| Index: core/include/fxge/fx_font.h
|
| diff --git a/core/include/fxge/fx_font.h b/core/include/fxge/fx_font.h
|
| index 5797ecb246b3ffd9b80399d218ad5173555e594a..aa9286ff3e200bfafec516f29d27504e0b3e435e 100644
|
| --- a/core/include/fxge/fx_font.h
|
| +++ b/core/include/fxge/fx_font.h
|
| @@ -21,402 +21,437 @@ class CFX_FaceCache;
|
| class CFX_FontMapper;
|
| class IFX_SystemFontInfo;
|
| class CFontFileFaceInfo;
|
| -#define FXFONT_FIXED_PITCH 0x01
|
| -#define FXFONT_SERIF 0x02
|
| -#define FXFONT_SYMBOLIC 0x04
|
| -#define FXFONT_SCRIPT 0x08
|
| -#define FXFONT_ITALIC 0x40
|
| -#define FXFONT_BOLD 0x40000
|
| -#define FXFONT_USEEXTERNATTR 0x80000
|
| -#define FXFONT_CIDFONT 0x100000
|
| -#define FXFONT_ANSI_CHARSET 0
|
| -#define FXFONT_DEFAULT_CHARSET 1
|
| -#define FXFONT_SYMBOL_CHARSET 2
|
| -#define FXFONT_SHIFTJIS_CHARSET 128
|
| -#define FXFONT_HANGEUL_CHARSET 129
|
| -#define FXFONT_GB2312_CHARSET 134
|
| -#define FXFONT_CHINESEBIG5_CHARSET 136
|
| -#define FXFONT_THAI_CHARSET 222
|
| -#define FXFONT_EASTEUROPE_CHARSET 238
|
| -#define FXFONT_RUSSIAN_CHARSET 204
|
| -#define FXFONT_GREEK_CHARSET 161
|
| -#define FXFONT_TURKISH_CHARSET 162
|
| -#define FXFONT_HEBREW_CHARSET 177
|
| -#define FXFONT_ARABIC_CHARSET 178
|
| -#define FXFONT_BALTIC_CHARSET 186
|
| -#define FXFONT_FF_FIXEDPITCH 1
|
| -#define FXFONT_FF_ROMAN (1<<4)
|
| -#define FXFONT_FF_SCRIPT (4<<4)
|
| -#define FXFONT_FW_NORMAL 400
|
| -#define FXFONT_FW_BOLD 700
|
| -class CFX_Font
|
| -{
|
| -public:
|
| - CFX_Font();
|
| - ~CFX_Font();
|
| +#define FXFONT_FIXED_PITCH 0x01
|
| +#define FXFONT_SERIF 0x02
|
| +#define FXFONT_SYMBOLIC 0x04
|
| +#define FXFONT_SCRIPT 0x08
|
| +#define FXFONT_ITALIC 0x40
|
| +#define FXFONT_BOLD 0x40000
|
| +#define FXFONT_USEEXTERNATTR 0x80000
|
| +#define FXFONT_CIDFONT 0x100000
|
| +#define FXFONT_ANSI_CHARSET 0
|
| +#define FXFONT_DEFAULT_CHARSET 1
|
| +#define FXFONT_SYMBOL_CHARSET 2
|
| +#define FXFONT_SHIFTJIS_CHARSET 128
|
| +#define FXFONT_HANGEUL_CHARSET 129
|
| +#define FXFONT_GB2312_CHARSET 134
|
| +#define FXFONT_CHINESEBIG5_CHARSET 136
|
| +#define FXFONT_THAI_CHARSET 222
|
| +#define FXFONT_EASTEUROPE_CHARSET 238
|
| +#define FXFONT_RUSSIAN_CHARSET 204
|
| +#define FXFONT_GREEK_CHARSET 161
|
| +#define FXFONT_TURKISH_CHARSET 162
|
| +#define FXFONT_HEBREW_CHARSET 177
|
| +#define FXFONT_ARABIC_CHARSET 178
|
| +#define FXFONT_BALTIC_CHARSET 186
|
| +#define FXFONT_FF_FIXEDPITCH 1
|
| +#define FXFONT_FF_ROMAN (1 << 4)
|
| +#define FXFONT_FF_SCRIPT (4 << 4)
|
| +#define FXFONT_FW_NORMAL 400
|
| +#define FXFONT_FW_BOLD 700
|
| +class CFX_Font {
|
| + public:
|
| + CFX_Font();
|
| + ~CFX_Font();
|
|
|
| - FX_BOOL LoadSubst(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,
|
| - int weight, int italic_angle, int CharsetCP, FX_BOOL bVertical = FALSE);
|
| + FX_BOOL LoadSubst(const CFX_ByteString& face_name,
|
| + FX_BOOL bTrueType,
|
| + FX_DWORD flags,
|
| + int weight,
|
| + int italic_angle,
|
| + int CharsetCP,
|
| + FX_BOOL bVertical = FALSE);
|
|
|
| - FX_BOOL LoadEmbedded(const uint8_t* data, FX_DWORD size);
|
| + FX_BOOL LoadEmbedded(const uint8_t* data, FX_DWORD size);
|
|
|
| - FX_BOOL LoadFile(IFX_FileRead* pFile);
|
| + FX_BOOL LoadFile(IFX_FileRead* pFile);
|
|
|
| - FXFT_Face GetFace() const
|
| - {
|
| - return m_Face;
|
| - }
|
| + FXFT_Face GetFace() const { return m_Face; }
|
|
|
| + const CFX_SubstFont* GetSubstFont() const { return m_pSubstFont; }
|
|
|
| - const CFX_SubstFont* GetSubstFont() const
|
| - {
|
| - return m_pSubstFont;
|
| - }
|
| + CFX_PathData* LoadGlyphPath(FX_DWORD glyph_index, int dest_width = 0);
|
|
|
| - CFX_PathData* LoadGlyphPath(FX_DWORD glyph_index, int dest_width = 0);
|
| + int GetGlyphWidth(FX_DWORD glyph_index);
|
|
|
| - int GetGlyphWidth(FX_DWORD glyph_index);
|
| + int GetAscent() const;
|
|
|
| - int GetAscent() const;
|
| + int GetDescent() const;
|
|
|
| - int GetDescent() const;
|
| + FX_BOOL GetGlyphBBox(FX_DWORD glyph_index, FX_RECT& bbox);
|
|
|
| - FX_BOOL GetGlyphBBox(FX_DWORD glyph_index, FX_RECT &bbox);
|
| + FX_BOOL IsItalic();
|
|
|
| - FX_BOOL IsItalic();
|
| + FX_BOOL IsBold();
|
|
|
| - FX_BOOL IsBold();
|
| + FX_BOOL IsFixedWidth();
|
|
|
| - FX_BOOL IsFixedWidth();
|
| + FX_BOOL IsVertical() const { return m_bVertical; }
|
|
|
| - FX_BOOL IsVertical() const
|
| - {
|
| - return m_bVertical;
|
| - }
|
| + CFX_WideString GetPsName() const;
|
|
|
| - CFX_WideString GetPsName() const;
|
| + CFX_ByteString GetFamilyName() const;
|
|
|
| + CFX_ByteString GetFaceName() const;
|
|
|
| - CFX_ByteString GetFamilyName() const;
|
| + FX_BOOL IsTTFont();
|
|
|
| - CFX_ByteString GetFaceName() const;
|
| + FX_BOOL GetBBox(FX_RECT& bbox);
|
|
|
| + int GetHeight();
|
|
|
| - FX_BOOL IsTTFont();
|
| + int GetULPos();
|
|
|
| - FX_BOOL GetBBox(FX_RECT &bbox);
|
| + int GetULthickness();
|
|
|
| - int GetHeight();
|
| + int GetMaxAdvanceWidth();
|
|
|
| - int GetULPos();
|
| + FXFT_Face m_Face;
|
|
|
| - int GetULthickness();
|
| + CFX_SubstFont* m_pSubstFont;
|
| + FX_BOOL IsEmbedded() { return m_bEmbedded; }
|
|
|
| - int GetMaxAdvanceWidth();
|
| + void AdjustMMParams(int glyph_index, int width, int weight);
|
| + uint8_t* m_pFontDataAllocation;
|
| + uint8_t* m_pFontData;
|
| + uint8_t* m_pGsubData;
|
| + FX_DWORD m_dwSize;
|
| + CFX_BinaryBuf m_OtfFontData;
|
| + void* m_hHandle;
|
| + void* m_pPlatformFont;
|
| + void* m_pPlatformFontCollection;
|
| + void* m_pDwFont;
|
| + FX_BOOL m_bDwLoaded;
|
| + void ReleasePlatformResource();
|
|
|
| - FXFT_Face m_Face;
|
| + void DeleteFace();
|
|
|
| - CFX_SubstFont* m_pSubstFont;
|
| - FX_BOOL IsEmbedded()
|
| - {
|
| - return m_bEmbedded;
|
| - }
|
| -
|
| - void AdjustMMParams(int glyph_index, int width, int weight);
|
| - uint8_t* m_pFontDataAllocation;
|
| - uint8_t* m_pFontData;
|
| - uint8_t* m_pGsubData;
|
| - FX_DWORD m_dwSize;
|
| - CFX_BinaryBuf m_OtfFontData;
|
| - void* m_hHandle;
|
| - void* m_pPlatformFont;
|
| - void* m_pPlatformFontCollection;
|
| - void* m_pDwFont;
|
| - FX_BOOL m_bDwLoaded;
|
| - void ReleasePlatformResource();
|
| -
|
| - void DeleteFace();
|
| -protected:
|
| -
|
| - FX_BOOL m_bEmbedded;
|
| - FX_BOOL m_bVertical;
|
| - void* m_pOwnedStream;
|
| + protected:
|
| + FX_BOOL m_bEmbedded;
|
| + FX_BOOL m_bVertical;
|
| + void* m_pOwnedStream;
|
| };
|
| -#define ENCODING_INTERNAL 0
|
| -#define ENCODING_UNICODE 1
|
| -class IFX_FontEncoding
|
| -{
|
| -public:
|
| - virtual ~IFX_FontEncoding() {}
|
| +#define ENCODING_INTERNAL 0
|
| +#define ENCODING_UNICODE 1
|
| +class IFX_FontEncoding {
|
| + public:
|
| + virtual ~IFX_FontEncoding() {}
|
|
|
| - virtual FX_DWORD GlyphFromCharCode(FX_DWORD charcode) = 0;
|
| + virtual FX_DWORD GlyphFromCharCode(FX_DWORD charcode) = 0;
|
|
|
| - virtual CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const = 0;
|
| + virtual CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const = 0;
|
|
|
| - virtual FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
|
| + virtual FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
|
| };
|
| IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont);
|
| -#define FXFONT_SUBST_MM 0x01
|
| -#define FXFONT_SUBST_GLYPHPATH 0x04
|
| -#define FXFONT_SUBST_CLEARTYPE 0x08
|
| -#define FXFONT_SUBST_TRANSFORM 0x10
|
| -#define FXFONT_SUBST_NONSYMBOL 0x20
|
| -#define FXFONT_SUBST_EXACT 0x40
|
| -#define FXFONT_SUBST_STANDARD 0x80
|
| -class CFX_SubstFont
|
| -{
|
| -public:
|
| -
|
| - CFX_SubstFont();
|
| +#define FXFONT_SUBST_MM 0x01
|
| +#define FXFONT_SUBST_GLYPHPATH 0x04
|
| +#define FXFONT_SUBST_CLEARTYPE 0x08
|
| +#define FXFONT_SUBST_TRANSFORM 0x10
|
| +#define FXFONT_SUBST_NONSYMBOL 0x20
|
| +#define FXFONT_SUBST_EXACT 0x40
|
| +#define FXFONT_SUBST_STANDARD 0x80
|
| +class CFX_SubstFont {
|
| + public:
|
| + CFX_SubstFont();
|
|
|
| - void* m_ExtHandle;
|
| + void* m_ExtHandle;
|
|
|
| - CFX_ByteString m_Family;
|
| + CFX_ByteString m_Family;
|
|
|
| - int m_Charset;
|
| + int m_Charset;
|
|
|
| - FX_DWORD m_SubstFlags;
|
| + FX_DWORD m_SubstFlags;
|
|
|
| - int m_Weight;
|
| + int m_Weight;
|
|
|
| - int m_ItalicAngle;
|
| + int m_ItalicAngle;
|
|
|
| - FX_BOOL m_bSubstOfCJK;
|
| + FX_BOOL m_bSubstOfCJK;
|
|
|
| - int m_WeightCJK;
|
| + int m_WeightCJK;
|
|
|
| - FX_BOOL m_bItlicCJK;
|
| + FX_BOOL m_bItlicCJK;
|
| };
|
| -#define FX_FONT_FLAG_SERIF 0x01
|
| -#define FX_FONT_FLAG_FIXEDPITCH 0x02
|
| -#define FX_FONT_FLAG_ITALIC 0x04
|
| -#define FX_FONT_FLAG_BOLD 0x08
|
| -#define FX_FONT_FLAG_SYMBOLIC_SYMBOL 0x10
|
| -#define FX_FONT_FLAG_SYMBOLIC_DINGBATS 0x20
|
| -#define FX_FONT_FLAG_MULTIPLEMASTER 0x40
|
| +#define FX_FONT_FLAG_SERIF 0x01
|
| +#define FX_FONT_FLAG_FIXEDPITCH 0x02
|
| +#define FX_FONT_FLAG_ITALIC 0x04
|
| +#define FX_FONT_FLAG_BOLD 0x08
|
| +#define FX_FONT_FLAG_SYMBOLIC_SYMBOL 0x10
|
| +#define FX_FONT_FLAG_SYMBOLIC_DINGBATS 0x20
|
| +#define FX_FONT_FLAG_MULTIPLEMASTER 0x40
|
| typedef struct {
|
| - const uint8_t* m_pFontData;
|
| - FX_DWORD m_dwSize;
|
| + const uint8_t* m_pFontData;
|
| + FX_DWORD m_dwSize;
|
| } FoxitFonts;
|
| -class CFX_FontMgr
|
| -{
|
| -public:
|
| - CFX_FontMgr();
|
| - ~CFX_FontMgr();
|
| - void InitFTLibrary();
|
| - FXFT_Face GetCachedFace(const CFX_ByteString& face_name,
|
| - int weight, FX_BOOL bItalic, uint8_t*& pFontData);
|
| - FXFT_Face AddCachedFace(const CFX_ByteString& face_name,
|
| - int weight, FX_BOOL bItalic, uint8_t* pData, FX_DWORD size, int face_index);
|
| - FXFT_Face GetCachedTTCFace(int ttc_size, FX_DWORD checksum,
|
| - int font_offset, uint8_t*& pFontData);
|
| - FXFT_Face AddCachedTTCFace(int ttc_size, FX_DWORD checksum,
|
| - uint8_t* pData, FX_DWORD size, int font_offset);
|
| - FXFT_Face GetFileFace(const FX_CHAR* filename, int face_index);
|
| - FXFT_Face GetFixedFace(const uint8_t* pData, FX_DWORD size, int face_index);
|
| - void ReleaseFace(FXFT_Face face);
|
| - void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);
|
| - FXFT_Face FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,
|
| - int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont);
|
| -
|
| - void FreeCache();
|
| -
|
| - FX_BOOL GetStandardFont(const uint8_t*& pFontData, FX_DWORD& size, int index);
|
| - CFX_FontMapper* m_pBuiltinMapper;
|
| - CFX_MapByteStringToPtr m_FaceMap;
|
| - FXFT_Library m_FTLibrary;
|
| - FoxitFonts m_ExternalFonts[16];
|
| +class CFX_FontMgr {
|
| + public:
|
| + CFX_FontMgr();
|
| + ~CFX_FontMgr();
|
| + void InitFTLibrary();
|
| + FXFT_Face GetCachedFace(const CFX_ByteString& face_name,
|
| + int weight,
|
| + FX_BOOL bItalic,
|
| + uint8_t*& pFontData);
|
| + FXFT_Face AddCachedFace(const CFX_ByteString& face_name,
|
| + int weight,
|
| + FX_BOOL bItalic,
|
| + uint8_t* pData,
|
| + FX_DWORD size,
|
| + int face_index);
|
| + FXFT_Face GetCachedTTCFace(int ttc_size,
|
| + FX_DWORD checksum,
|
| + int font_offset,
|
| + uint8_t*& pFontData);
|
| + FXFT_Face AddCachedTTCFace(int ttc_size,
|
| + FX_DWORD checksum,
|
| + uint8_t* pData,
|
| + FX_DWORD size,
|
| + int font_offset);
|
| + FXFT_Face GetFileFace(const FX_CHAR* filename, int face_index);
|
| + FXFT_Face GetFixedFace(const uint8_t* pData, FX_DWORD size, int face_index);
|
| + void ReleaseFace(FXFT_Face face);
|
| + void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);
|
| + FXFT_Face FindSubstFont(const CFX_ByteString& face_name,
|
| + FX_BOOL bTrueType,
|
| + FX_DWORD flags,
|
| + int weight,
|
| + int italic_angle,
|
| + int CharsetCP,
|
| + CFX_SubstFont* pSubstFont);
|
| +
|
| + void FreeCache();
|
| +
|
| + FX_BOOL GetStandardFont(const uint8_t*& pFontData, FX_DWORD& size, int index);
|
| + CFX_FontMapper* m_pBuiltinMapper;
|
| + CFX_MapByteStringToPtr m_FaceMap;
|
| + FXFT_Library m_FTLibrary;
|
| + FoxitFonts m_ExternalFonts[16];
|
| };
|
| -class IFX_FontEnumerator
|
| -{
|
| -public:
|
| - virtual ~IFX_FontEnumerator() { }
|
| +class IFX_FontEnumerator {
|
| + public:
|
| + virtual ~IFX_FontEnumerator() {}
|
|
|
| - virtual void HitFont() = 0;
|
| + virtual void HitFont() = 0;
|
|
|
| - virtual void Finish() = 0;
|
| + virtual void Finish() = 0;
|
| };
|
| -class IFX_AdditionalFontEnum
|
| -{
|
| -public:
|
| - virtual ~IFX_AdditionalFontEnum() { }
|
| - virtual int CountFiles() = 0;
|
| - virtual IFX_FileStream* GetFontFile(int index) = 0;
|
| +class IFX_AdditionalFontEnum {
|
| + public:
|
| + virtual ~IFX_AdditionalFontEnum() {}
|
| + virtual int CountFiles() = 0;
|
| + virtual IFX_FileStream* GetFontFile(int index) = 0;
|
| };
|
| -class CFX_FontMapper
|
| -{
|
| -public:
|
| - CFX_FontMapper(CFX_FontMgr* mgr);
|
| - ~CFX_FontMapper();
|
| -
|
| - void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);
|
| - IFX_SystemFontInfo* GetSystemFontInfo()
|
| - {
|
| - return m_pFontInfo;
|
| - }
|
| - void AddInstalledFont(const CFX_ByteString& name, int charset);
|
| - void LoadInstalledFonts();
|
| - CFX_ByteStringArray m_InstalledTTFonts;
|
| - void SetFontEnumerator(IFX_FontEnumerator* pFontEnumerator)
|
| - {
|
| - m_pFontEnumerator = pFontEnumerator;
|
| - }
|
| - IFX_FontEnumerator* GetFontEnumerator() const
|
| - {
|
| - return m_pFontEnumerator;
|
| - }
|
| - FXFT_Face FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,
|
| - int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont);
|
| -private:
|
| - CFX_ByteString GetPSNameFromTT(void* hFont);
|
| - CFX_ByteString MatchInstalledFonts(const CFX_ByteString& norm_name);
|
| - FXFT_Face UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseFont, int italic_angle, int weight, int picthfamily);
|
| -
|
| - FX_BOOL m_bListLoaded;
|
| - FXFT_Face m_MMFaces[2];
|
| - CFX_ByteString m_LastFamily;
|
| - CFX_DWordArray m_CharsetArray;
|
| - CFX_ByteStringArray m_FaceArray;
|
| - IFX_SystemFontInfo* m_pFontInfo;
|
| - FXFT_Face m_FoxitFaces[14];
|
| - IFX_FontEnumerator* m_pFontEnumerator;
|
| - CFX_FontMgr* const m_pFontMgr;
|
| +class CFX_FontMapper {
|
| + public:
|
| + CFX_FontMapper(CFX_FontMgr* mgr);
|
| + ~CFX_FontMapper();
|
| +
|
| + void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);
|
| + IFX_SystemFontInfo* GetSystemFontInfo() { return m_pFontInfo; }
|
| + void AddInstalledFont(const CFX_ByteString& name, int charset);
|
| + void LoadInstalledFonts();
|
| + CFX_ByteStringArray m_InstalledTTFonts;
|
| + void SetFontEnumerator(IFX_FontEnumerator* pFontEnumerator) {
|
| + m_pFontEnumerator = pFontEnumerator;
|
| + }
|
| + IFX_FontEnumerator* GetFontEnumerator() const { return m_pFontEnumerator; }
|
| + FXFT_Face FindSubstFont(const CFX_ByteString& face_name,
|
| + FX_BOOL bTrueType,
|
| + FX_DWORD flags,
|
| + int weight,
|
| + int italic_angle,
|
| + int CharsetCP,
|
| + CFX_SubstFont* pSubstFont);
|
| +
|
| + private:
|
| + CFX_ByteString GetPSNameFromTT(void* hFont);
|
| + CFX_ByteString MatchInstalledFonts(const CFX_ByteString& norm_name);
|
| + FXFT_Face UseInternalSubst(CFX_SubstFont* pSubstFont,
|
| + int iBaseFont,
|
| + int italic_angle,
|
| + int weight,
|
| + int picthfamily);
|
| +
|
| + FX_BOOL m_bListLoaded;
|
| + FXFT_Face m_MMFaces[2];
|
| + CFX_ByteString m_LastFamily;
|
| + CFX_DWordArray m_CharsetArray;
|
| + CFX_ByteStringArray m_FaceArray;
|
| + IFX_SystemFontInfo* m_pFontInfo;
|
| + FXFT_Face m_FoxitFaces[14];
|
| + IFX_FontEnumerator* m_pFontEnumerator;
|
| + CFX_FontMgr* const m_pFontMgr;
|
| };
|
| -class IFX_SystemFontInfo
|
| -{
|
| -public:
|
| - static IFX_SystemFontInfo* CreateDefault();
|
| - virtual void Release() = 0;
|
| -
|
| - virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) = 0;
|
| - virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* face, int& iExact) = 0;
|
| - virtual void* GetFont(const FX_CHAR* face) = 0;
|
| - virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size) = 0;
|
| - virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) = 0;
|
| - virtual FX_BOOL GetFontCharset(void* hFont, int& charset) = 0;
|
| - virtual int GetFaceIndex(void* hFont)
|
| - {
|
| - return 0;
|
| - }
|
| - virtual void DeleteFont(void* hFont) = 0;
|
| - virtual void* RetainFont(void* hFont)
|
| - {
|
| - return NULL;
|
| - }
|
| -protected:
|
| - ~IFX_SystemFontInfo() { }
|
| +class IFX_SystemFontInfo {
|
| + public:
|
| + static IFX_SystemFontInfo* CreateDefault();
|
| + virtual void Release() = 0;
|
| +
|
| + virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) = 0;
|
| + virtual void* MapFont(int weight,
|
| + FX_BOOL bItalic,
|
| + int charset,
|
| + int pitch_family,
|
| + const FX_CHAR* face,
|
| + int& iExact) = 0;
|
| + virtual void* GetFont(const FX_CHAR* face) = 0;
|
| + virtual FX_DWORD GetFontData(void* hFont,
|
| + FX_DWORD table,
|
| + uint8_t* buffer,
|
| + FX_DWORD size) = 0;
|
| + virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) = 0;
|
| + virtual FX_BOOL GetFontCharset(void* hFont, int& charset) = 0;
|
| + virtual int GetFaceIndex(void* hFont) { return 0; }
|
| + virtual void DeleteFont(void* hFont) = 0;
|
| + virtual void* RetainFont(void* hFont) { return NULL; }
|
| +
|
| + protected:
|
| + ~IFX_SystemFontInfo() {}
|
| };
|
| -class CFX_FolderFontInfo : public IFX_SystemFontInfo
|
| -{
|
| -public:
|
| - CFX_FolderFontInfo();
|
| - virtual ~CFX_FolderFontInfo();
|
| - void AddPath(const CFX_ByteStringC& path);
|
| -
|
| - // IFX_SytemFontInfo:
|
| - void Release() override;
|
| - FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override;
|
| - void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family,
|
| - const FX_CHAR* face, int& bExact) override;
|
| - void* GetFont(const FX_CHAR* face) override;
|
| - FX_DWORD GetFontData(void* hFont, FX_DWORD table,
|
| - uint8_t* buffer, FX_DWORD size) override;
|
| - void DeleteFont(void* hFont) override;
|
| - FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override;
|
| - FX_BOOL GetFontCharset(void* hFont, int& charset) override;
|
| -
|
| -protected:
|
| - CFX_MapByteStringToPtr m_FontList;
|
| - CFX_ByteStringArray m_PathList;
|
| - CFX_FontMapper* m_pMapper;
|
| - void ScanPath(CFX_ByteString& path);
|
| - void ScanFile(CFX_ByteString& path);
|
| - void ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_DWORD filesize, FX_DWORD offset);
|
| +class CFX_FolderFontInfo : public IFX_SystemFontInfo {
|
| + public:
|
| + CFX_FolderFontInfo();
|
| + virtual ~CFX_FolderFontInfo();
|
| + void AddPath(const CFX_ByteStringC& path);
|
| +
|
| + // IFX_SytemFontInfo:
|
| + void Release() override;
|
| + FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override;
|
| + void* MapFont(int weight,
|
| + FX_BOOL bItalic,
|
| + int charset,
|
| + int pitch_family,
|
| + const FX_CHAR* face,
|
| + int& bExact) override;
|
| + void* GetFont(const FX_CHAR* face) override;
|
| + FX_DWORD GetFontData(void* hFont,
|
| + FX_DWORD table,
|
| + uint8_t* buffer,
|
| + FX_DWORD size) override;
|
| + void DeleteFont(void* hFont) override;
|
| + FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override;
|
| + FX_BOOL GetFontCharset(void* hFont, int& charset) override;
|
| +
|
| + protected:
|
| + CFX_MapByteStringToPtr m_FontList;
|
| + CFX_ByteStringArray m_PathList;
|
| + CFX_FontMapper* m_pMapper;
|
| + void ScanPath(CFX_ByteString& path);
|
| + void ScanFile(CFX_ByteString& path);
|
| + void ReportFace(CFX_ByteString& path,
|
| + FXSYS_FILE* pFile,
|
| + FX_DWORD filesize,
|
| + FX_DWORD offset);
|
| };
|
| -class CFX_CountedFaceCache
|
| -{
|
| -public:
|
| - CFX_FaceCache* m_Obj;
|
| - FX_DWORD m_nCount;
|
| +class CFX_CountedFaceCache {
|
| + public:
|
| + CFX_FaceCache* m_Obj;
|
| + FX_DWORD m_nCount;
|
| };
|
|
|
| -class CFX_FontCache
|
| -{
|
| -public:
|
| - ~CFX_FontCache();
|
| - CFX_FaceCache* GetCachedFace(CFX_Font* pFont);
|
| - void ReleaseCachedFace(CFX_Font* pFont);
|
| - void FreeCache(FX_BOOL bRelease = FALSE);
|
| -
|
| -private:
|
| - using CFX_FTCacheMap = std::map<FXFT_Face, CFX_CountedFaceCache*>;
|
| - CFX_FTCacheMap m_FTFaceMap;
|
| - CFX_FTCacheMap m_ExtFaceMap;
|
| +class CFX_FontCache {
|
| + public:
|
| + ~CFX_FontCache();
|
| + CFX_FaceCache* GetCachedFace(CFX_Font* pFont);
|
| + void ReleaseCachedFace(CFX_Font* pFont);
|
| + void FreeCache(FX_BOOL bRelease = FALSE);
|
| +
|
| + private:
|
| + using CFX_FTCacheMap = std::map<FXFT_Face, CFX_CountedFaceCache*>;
|
| + CFX_FTCacheMap m_FTFaceMap;
|
| + CFX_FTCacheMap m_ExtFaceMap;
|
| };
|
| -class CFX_AutoFontCache
|
| -{
|
| -public:
|
| - CFX_AutoFontCache(CFX_FontCache* pFontCache, CFX_Font* pFont)
|
| - : m_pFontCache(pFontCache)
|
| - , m_pFont(pFont)
|
| - {
|
| - }
|
| - ~CFX_AutoFontCache()
|
| - {
|
| - m_pFontCache->ReleaseCachedFace(m_pFont);
|
| - }
|
| - CFX_FontCache* m_pFontCache;
|
| - CFX_Font* m_pFont;
|
| +class CFX_AutoFontCache {
|
| + public:
|
| + CFX_AutoFontCache(CFX_FontCache* pFontCache, CFX_Font* pFont)
|
| + : m_pFontCache(pFontCache), m_pFont(pFont) {}
|
| + ~CFX_AutoFontCache() { m_pFontCache->ReleaseCachedFace(m_pFont); }
|
| + CFX_FontCache* m_pFontCache;
|
| + CFX_Font* m_pFont;
|
| };
|
| -#define FX_FONTCACHE_DEFINE(pFontCache, pFont) CFX_AutoFontCache autoFontCache((pFontCache), (pFont))
|
| -class CFX_GlyphBitmap
|
| -{
|
| -public:
|
| - int m_Top;
|
| - int m_Left;
|
| - CFX_DIBitmap m_Bitmap;
|
| +#define FX_FONTCACHE_DEFINE(pFontCache, pFont) \
|
| + CFX_AutoFontCache autoFontCache((pFontCache), (pFont))
|
| +class CFX_GlyphBitmap {
|
| + public:
|
| + int m_Top;
|
| + int m_Left;
|
| + CFX_DIBitmap m_Bitmap;
|
| };
|
| -class CFX_FaceCache
|
| -{
|
| -public:
|
| - ~CFX_FaceCache();
|
| - const CFX_GlyphBitmap* LoadGlyphBitmap(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle, const CFX_AffineMatrix* pMatrix,
|
| - int dest_width, int anti_alias, int& text_flags);
|
| - const CFX_PathData* LoadGlyphPath(CFX_Font* pFont, FX_DWORD glyph_index, int dest_width);
|
| -
|
| -
|
| - CFX_FaceCache(FXFT_Face face);
|
| -private:
|
| - FXFT_Face m_Face;
|
| - CFX_GlyphBitmap* RenderGlyph(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle,
|
| - const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias);
|
| - CFX_GlyphBitmap* RenderGlyph_Nativetext(CFX_Font* pFont, FX_DWORD glyph_index,
|
| - const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias);
|
| - CFX_GlyphBitmap* LookUpGlyphBitmap(CFX_Font* pFont, const CFX_AffineMatrix* pMatrix, CFX_ByteStringC& FaceGlyphsKey,
|
| - FX_DWORD glyph_index, FX_BOOL bFontStyle, int dest_width, int anti_alias);
|
| - CFX_MapByteStringToPtr m_SizeMap;
|
| - CFX_MapPtrToPtr m_PathMap;
|
| - CFX_DIBitmap* m_pBitmap;
|
| -
|
| - void InitPlatform();
|
| - void DestroyPlatform();
|
| +class CFX_FaceCache {
|
| + public:
|
| + ~CFX_FaceCache();
|
| + const CFX_GlyphBitmap* LoadGlyphBitmap(CFX_Font* pFont,
|
| + FX_DWORD glyph_index,
|
| + FX_BOOL bFontStyle,
|
| + const CFX_AffineMatrix* pMatrix,
|
| + int dest_width,
|
| + int anti_alias,
|
| + int& text_flags);
|
| + const CFX_PathData* LoadGlyphPath(CFX_Font* pFont,
|
| + FX_DWORD glyph_index,
|
| + int dest_width);
|
| +
|
| + CFX_FaceCache(FXFT_Face face);
|
| +
|
| + private:
|
| + FXFT_Face m_Face;
|
| + CFX_GlyphBitmap* RenderGlyph(CFX_Font* pFont,
|
| + FX_DWORD glyph_index,
|
| + FX_BOOL bFontStyle,
|
| + const CFX_AffineMatrix* pMatrix,
|
| + int dest_width,
|
| + int anti_alias);
|
| + CFX_GlyphBitmap* RenderGlyph_Nativetext(CFX_Font* pFont,
|
| + FX_DWORD glyph_index,
|
| + const CFX_AffineMatrix* pMatrix,
|
| + int dest_width,
|
| + int anti_alias);
|
| + CFX_GlyphBitmap* LookUpGlyphBitmap(CFX_Font* pFont,
|
| + const CFX_AffineMatrix* pMatrix,
|
| + CFX_ByteStringC& FaceGlyphsKey,
|
| + FX_DWORD glyph_index,
|
| + FX_BOOL bFontStyle,
|
| + int dest_width,
|
| + int anti_alias);
|
| + CFX_MapByteStringToPtr m_SizeMap;
|
| + CFX_MapPtrToPtr m_PathMap;
|
| + CFX_DIBitmap* m_pBitmap;
|
| +
|
| + void InitPlatform();
|
| + void DestroyPlatform();
|
| };
|
| typedef struct {
|
| - const CFX_GlyphBitmap* m_pGlyph;
|
| - int m_OriginX, m_OriginY;
|
| - FX_FLOAT m_fOriginX, m_fOriginY;
|
| + const CFX_GlyphBitmap* m_pGlyph;
|
| + int m_OriginX, m_OriginY;
|
| + FX_FLOAT m_fOriginX, m_fOriginY;
|
| } FXTEXT_GLYPHPOS;
|
| -FX_RECT FXGE_GetGlyphsBBox(FXTEXT_GLYPHPOS* pGlyphAndPos, int nChars, int anti_alias, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f);
|
| -FX_BOOL OutputGlyph(void* dib, int x, int y, CFX_Font* pFont, double font_size,
|
| - CFX_AffineMatrix* pMatrix, unsigned long glyph_index, unsigned long argb);
|
| -FX_BOOL OutputText(void* dib, int x, int y, CFX_Font* pFont, double font_size,
|
| - CFX_AffineMatrix* pText_matrix, unsigned short const* text, unsigned long argb);
|
| -class IFX_GSUBTable
|
| -{
|
| -public:
|
| - static IFX_GSUBTable* Create(CFX_Font* pFont);
|
| - virtual ~IFX_GSUBTable() { }
|
| - virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum) = 0;
|
| +FX_RECT FXGE_GetGlyphsBBox(FXTEXT_GLYPHPOS* pGlyphAndPos,
|
| + int nChars,
|
| + int anti_alias,
|
| + FX_FLOAT retinaScaleX = 1.0f,
|
| + FX_FLOAT retinaScaleY = 1.0f);
|
| +FX_BOOL OutputGlyph(void* dib,
|
| + int x,
|
| + int y,
|
| + CFX_Font* pFont,
|
| + double font_size,
|
| + CFX_AffineMatrix* pMatrix,
|
| + unsigned long glyph_index,
|
| + unsigned long argb);
|
| +FX_BOOL OutputText(void* dib,
|
| + int x,
|
| + int y,
|
| + CFX_Font* pFont,
|
| + double font_size,
|
| + CFX_AffineMatrix* pText_matrix,
|
| + unsigned short const* text,
|
| + unsigned long argb);
|
| +class IFX_GSUBTable {
|
| + public:
|
| + static IFX_GSUBTable* Create(CFX_Font* pFont);
|
| + virtual ~IFX_GSUBTable() {}
|
| + virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum) = 0;
|
| };
|
|
|
| #endif // CORE_INCLUDE_FXGE_FX_FONT_H_
|
|
|