blob: 3e4ed7430ed659763bf4d7d6ccdf96ea6cea955e [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SV_SALFONT_H
#define _SV_SALFONT_H
// -=-= exports =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
class SalFontCache;
struct SalFontDimension;
class SalFontFamily;
class SalFontFamilyList;
class SalFontStruct;
class SalFontStructList;
class SalFonts;
// -=-= includes -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include <salstd.hxx>
#include <vcl/outfont.hxx>
// -=-= forwards =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
typedef ULONG XFP_FLAGS;
class SalDisplay;
class SalFontCacheItem;
// -=-= SalFontCache -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
DECLARE_LIST( SalFontCache, SalFontCacheItem* )
// -=-= SalFontDimension -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
struct SalFontDimension
{
USHORT nHeight_; // [pixel]
USHORT nPtHeight_; // [point/10]
USHORT nAverage_; // [pixel/10]
USHORT nXRes_; // [dpi]
USHORT nYRes_; // [dpi]
USHORT nSlant_; // [pixel]
// size_t nUnderlineThickness_; // [pixel]
// size_t nUnderlinePosition_; // [pixel]
// size_t nStrikeoutAscent_; // [pixel]
// size_t nStrikeoutDescent_; // [pixel]
// Subscript, Superscript, Capital, Space ...
inline SalFontDimension( USHORT nA = 0, USHORT nH = 0 );
inline BOOL IsScalable() const;
inline USHORT GetWidth() const { return (nAverage_ + 5) / 10; }
inline Size GetSize() const;
inline void SetSize( const Size & rSize );
inline BOOL operator == ( const SalFontDimension &r ) const;
inline BOOL operator != ( const SalFontDimension &r ) const;
inline BOOL operator >= ( const SalFontDimension &r ) const;
};
inline SalFontDimension::SalFontDimension( USHORT nA, USHORT nH )
: nHeight_( nH ), nAverage_( nA )
{ nPtHeight_ = nXRes_ = nYRes_ = nSlant_ = 0; }
inline BOOL SalFontDimension::IsScalable() const
{ return !nHeight_ && !nPtHeight_ && !nAverage_; }
inline Size SalFontDimension::GetSize() const
{ return Size( (nAverage_ + 5) / 10, nHeight_ ); }
inline void SalFontDimension::SetSize( const Size & rSize )
{ nAverage_ = (USHORT)rSize.Width() * 10; nHeight_ = (USHORT)rSize.Height(); }
inline BOOL SalFontDimension::operator == ( const SalFontDimension &r ) const
{ return nHeight_ == r.nHeight_ && (!r.nAverage_ || nAverage_ == r.nAverage_); }
inline BOOL SalFontDimension::operator != ( const SalFontDimension &r ) const
{ return !(*this == r); }
inline BOOL SalFontDimension::operator >= ( const SalFontDimension &r ) const
{ return nHeight_ > r.nHeight_
|| (nHeight_ == r.nHeight_ && nAverage_ >= r.nAverage_); }
// -=-= SalFontStruct =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
class SalFontStruct : public ImplFontMetricData
{
friend class SalDisplay;
friend class SalGraphicsData;
SalFontCacheItem*pCache_;
#if (OSL_DEBUG_LEVEL > 1) || defined DBG_UTIL
ByteString aFontName_;
#endif
USHORT nHeightCount_; // Anzahl der Hoehen-Eintraege
SalFontDimension*pDimensions_; // Hoehen-Array
USHORT nWeight_;
USHORT nFoundry_; // properties indexies
USHORT nFamily_;
USHORT nWeightName_;
USHORT nSlant_;
USHORT nSetWidthName_;
ByteString aAddStyleName_;
USHORT nSpacing_;
USHORT nCharSet_;
USHORT nFaceName_;
BOOL mbValidFontDescription; // valid xlfd entries
void Init();
BOOL Init( SalDisplay* pDisp,
const char* pFontName,
SalFontDimension& rDim );
ByteString GetXFontName( const SalFontDimension& );
inline void SetFoundry( USHORT n )
{ nFoundry_ = n; }
inline void SetFamily( USHORT n )
{ meFamily = sal_FamilyToSal( nFamily_ = n ); }
inline void SetWeightName( USHORT n )
{ meWeight = sal_WeightToSal( nWeightName_ = n ); }
inline void SetSlant( USHORT n )
{ meItalic = sal_ItalicToSal( nSlant_ = n ); }
inline void SetSetWidthName( USHORT n )
{ nSetWidthName_ = n; }
inline void SetAddStyleName( const ByteString& rAddStyle )
{ aAddStyleName_ = rAddStyle; aAddStyleName_.ToLowerAscii(); }
inline void SetSpacing( USHORT n )
{ mePitch = sal_PitchToSal( nSpacing_ = n ); }
inline void SetAverage( long n )
{ mnWidth = (n + 5) / 10; }
void SetCharSet( USHORT n );
SalFontStruct( const SalFontStruct& rFont );
public:
SalFontStruct( SalDisplay* pDisp,
const char* pFontName,
SalFontDimension& rDim );
~SalFontStruct();
inline void Cache( SalFontCacheItem *p ) { pCache_ = p; }
inline SalFontCacheItem*IsCache() const { return pCache_; }
inline BOOL IsScalable() const { return TYPE_SCALABLE==meType; }
inline SalFontDimension*GetDim() const { return pDimensions_; }
inline BOOL IsValid() const { return mbValidFontDescription; }
#ifdef DBG_UTIL
const ByteString& GetName() const { return aFontName_; }
#endif
ImplFontData *GetDevFontData();
SalFontCacheItem*Load( SalDisplay *pDisp, const SalFontDimension &rDim );
CharSet GetCharSet() { return meCharSet; }
};
// -=-= SalFontStructList =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
DECLARE_LIST( SalFontStructList, SalFontStruct* )
#endif // _SV_SALFONT_H