1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_FONT_H_ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FX_FONT_H_ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FXCRT_EXTENSION_ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/fxcrt/fx_ext.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_DIB_H_ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_dib.h" 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct FT_FaceRec_* FXFT_Face; 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* FXFT_Library; 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_FontEncoding; 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_PathData; 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_SubstFont; 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_FaceCache; 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_FontMapper; 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_FontMapper; 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_SystemFontInfo; 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFontFileFaceInfo; 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_FIXED_PITCH 0x01 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SERIF 0x02 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SYMBOLIC 0x04 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SCRIPT 0x08 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_ITALIC 0x40 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_BOLD 0x40000 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_USEEXTERNATTR 0x80000 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_CIDFONT 0x100000 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_ANSI_CHARSET 0 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_DEFAULT_CHARSET 1 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SYMBOL_CHARSET 2 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SHIFTJIS_CHARSET 128 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_HANGEUL_CHARSET 129 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_GB2312_CHARSET 134 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_CHINESEBIG5_CHARSET 136 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_THAI_CHARSET 222 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_EASTEUROPE_CHARSET 238 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_RUSSIAN_CHARSET 204 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_GREEK_CHARSET 161 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_TURKISH_CHARSET 162 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_HEBREW_CHARSET 177 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_ARABIC_CHARSET 178 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_BALTIC_CHARSET 186 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_FF_FIXEDPITCH 1 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_FF_ROMAN (1<<4) 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_FF_SCRIPT (4<<4) 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_FW_NORMAL 400 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_FW_BOLD 700 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Font : public CFX_Object 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_Font(); 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_Font(); 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadSubst(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags, 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int weight, int italic_angle, int CharsetCP, FX_BOOL bVertical = FALSE); 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadEmbedded(FX_LPCBYTE data, FX_DWORD size); 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadFile(IFX_FileRead* pFile); 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face GetFace() const 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Face; 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_SubstFont* GetSubstFont() const 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pSubstFont; 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_PathData* LoadGlyphPath(FX_DWORD glyph_index, int dest_width = 0); 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetGlyphWidth(FX_DWORD glyph_index); 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetAscent() const; 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetDescent() const; 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetGlyphBBox(FX_DWORD glyph_index, FX_RECT &bbox); 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsItalic(); 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsBold(); 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsFixedWidth(); 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsVertical() const 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bVertical; 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString GetPsName() const; 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetFamilyName() const; 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetFaceName() const; 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsTTFont(); 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetBBox(FX_RECT &bbox); 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetHeight(); 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetULPos(); 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetULthickness(); 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetMaxAdvanceWidth(); 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face m_Face; 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_SubstFont* m_pSubstFont; 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsEmbedded() 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bEmbedded; 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AdjustMMParams(int glyph_index, int width, int weight); 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE m_pFontDataAllocation; 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE m_pFontData; 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE m_pGsubData; 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwSize; 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_BinaryBuf m_OtfFontData; 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_hHandle; 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_pPlatformFont; 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_pPlatformFontCollection; 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_pDwFont; 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bDwLoaded; 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ReleasePlatformResource(); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void DeleteFace(); 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bEmbedded; 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bVertical; 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_pOwnedStream; 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ENCODING_INTERNAL 0 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ENCODING_UNICODE 1 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_FontEncoding : public CFX_Object 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~IFX_FontEncoding() {} 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GlyphFromCharCode(FX_DWORD charcode) = 0; 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const = 0; 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const = 0; 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont); 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SUBST_MM 0x01 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SUBST_GLYPHPATH 0x04 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SUBST_CLEARTYPE 0x08 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SUBST_TRANSFORM 0x10 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SUBST_NONSYMBOL 0x20 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SUBST_EXACT 0x40 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFONT_SUBST_STANDARD 0x80 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_SubstFont : public CFX_Object 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_SubstFont(); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPVOID m_ExtHandle; 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString m_Family; 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Charset; 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_SubstFlags; 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Weight; 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_ItalicAngle; 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bSubstOfCJK; 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_WeightCJK; 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bItlicCJK; 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_FONT_FLAG_SERIF 0x01 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_FONT_FLAG_FIXEDPITCH 0x02 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_FONT_FLAG_ITALIC 0x04 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_FONT_FLAG_BOLD 0x08 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_FONT_FLAG_SYMBOLIC_SYMBOL 0x10 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_FONT_FLAG_SYMBOLIC_DINGBATS 0x20 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_FONT_FLAG_MULTIPLEMASTER 0x40 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE m_pFontData; 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwSize; 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} FoxitFonts; 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_FontMgr : public CFX_Object 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FontMgr(); 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_FontMgr(); 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void InitFTLibrary(); 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face GetCachedFace(const CFX_ByteString& face_name, 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int weight, FX_BOOL bItalic, FX_LPBYTE& pFontData); 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face AddCachedFace(const CFX_ByteString& face_name, 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int weight, FX_BOOL bItalic, FX_LPBYTE pData, FX_DWORD size, int face_index); 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face GetCachedTTCFace(int ttc_size, FX_DWORD checksum, 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int font_offset, FX_LPBYTE& pFontData); 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face AddCachedTTCFace(int ttc_size, FX_DWORD checksum, 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE pData, FX_DWORD size, int font_offset); 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face GetFileFace(FX_LPCSTR filename, int face_index); 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face GetFixedFace(FX_LPCBYTE pData, FX_DWORD size, int face_index); 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ReleaseFace(FXFT_Face face); 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo); 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags, 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont); 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void FreeCache(); 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetStandardFont(FX_LPCBYTE& pFontData, FX_DWORD& size, int index); 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FontMapper* m_pBuiltinMapper; 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FontMapper* m_pExtMapper; 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_MapByteStringToPtr m_FaceMap; 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Library m_FTLibrary; 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FoxitFonts m_ExternalFonts[16]; 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_FontMapper : public CFX_Object 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~IFX_FontMapper() {} 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FXFT_Face FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags, 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont) = 0; 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FontMgr* m_pFontMgr; 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_FontEnumerator 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void HitFont() = 0; 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Finish() = 0; 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_AdditionalFontEnum 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int CountFiles() = 0; 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual IFX_FileStream* GetFontFile(int index) = 0; 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_FontMapper : public IFX_FontMapper 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FontMapper(); 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CFX_FontMapper(); 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo); 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_SystemFontInfo* GetSystemFontInfo() 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pFontInfo; 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AddInstalledFont(const CFX_ByteString& name, int charset); 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void LoadInstalledFonts(); 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringArray m_InstalledTTFonts; 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetFontEnumerator(IFX_FontEnumerator* pFontEnumerator) 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFontEnumerator = pFontEnumerator; 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FontEnumerator* GetFontEnumerator() const 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pFontEnumerator; 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FXFT_Face FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags, 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont); 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetPSNameFromTT(void* hFont); 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString MatchInstalledFonts(const CFX_ByteString& norm_name); 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseFont, int italic_angle, int weight, int picthfamily); 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bListLoaded; 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face m_MMFaces[2]; 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString m_LastFamily; 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_DWordArray m_CharsetArray; 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringArray m_FaceArray; 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_SystemFontInfo* m_pFontInfo; 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face m_FoxitFaces[14]; 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FontEnumerator* m_pFontEnumerator; 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_SystemFontInfo : public CFX_Object 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static IFX_SystemFontInfo* CreateDefault(); 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Release() = 0; 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) = 0; 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, FX_LPCSTR face, FX_BOOL& bExact) = 0; 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* GetFont(FX_LPCSTR face) = 0; 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, FX_LPBYTE buffer, FX_DWORD size) = 0; 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) = 0; 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetFontCharset(void* hFont, int& charset) = 0; 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int GetFaceIndex(void* hFont) 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DeleteFont(void* hFont) = 0; 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* RetainFont(void* hFont) 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_FolderFontInfo : public IFX_SystemFontInfo 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FolderFontInfo(); 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_FolderFontInfo(); 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AddPath(FX_BSTR path); 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Release(); 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper); 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, FX_LPCSTR face, FX_BOOL& bExact); 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* GetFont(FX_LPCSTR face); 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, FX_LPBYTE buffer, FX_DWORD size); 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DeleteFont(void* hFont); 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name); 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetFontCharset(void* hFont, int& charset); 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_MapByteStringToPtr m_FontList; 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringArray m_PathList; 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FontMapper* m_pMapper; 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ScanPath(CFX_ByteString& path); 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ScanFile(CFX_ByteString& path); 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_DWORD filesize, FX_DWORD offset); 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_CountedFaceCache : public CFX_Object 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FaceCache* m_Obj; 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_nCount; 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef CFX_MapPtrTemplate<FXFT_Face, CFX_CountedFaceCache*> CFX_FTCacheMap; 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_FontCache : public CFX_Object 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_FontCache(); 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FaceCache* GetCachedFace(CFX_Font* pFont); 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ReleaseCachedFace(CFX_Font* pFont); 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void FreeCache(FX_BOOL bRelease = FALSE); 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FTCacheMap m_FTFaceMap; 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FTCacheMap m_ExtFaceMap; 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_AutoFontCache 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_AutoFontCache(CFX_FontCache* pFontCache, CFX_Font* pFont) 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov : m_pFontCache(pFontCache) 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov , m_pFont(pFont) 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_AutoFontCache() 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFontCache->ReleaseCachedFace(m_pFont); 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FontCache* m_pFontCache; 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_Font* m_pFont; 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_FONTCACHE_DEFINE(pFontCache, pFont) CFX_AutoFontCache autoFontCache((pFontCache), (pFont)) 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_GlyphBitmap : public CFX_Object 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Top; 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Left; 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_DIBitmap m_Bitmap; 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_FaceCache : public CFX_Object 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_FaceCache(); 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_GlyphBitmap* LoadGlyphBitmap(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle, const CFX_AffineMatrix* pMatrix, 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int anti_alias, int& text_flags); 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_PathData* LoadGlyphPath(CFX_Font* pFont, FX_DWORD glyph_index, int dest_width); 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FaceCache(FXFT_Face face); 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FXFT_Face m_Face; 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_GlyphBitmap* RenderGlyph(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle, 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias); 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_GlyphBitmap* RenderGlyph_Nativetext(CFX_Font* pFont, FX_DWORD glyph_index, 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias); 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_GlyphBitmap* LookUpGlyphBitmap(CFX_Font* pFont, const CFX_AffineMatrix* pMatrix, CFX_ByteStringC& FaceGlyphsKey, 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD glyph_index, FX_BOOL bFontStyle, int dest_width, int anti_alias); 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_MapByteStringToPtr m_SizeMap; 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_MapPtrToPtr m_PathMap; 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_DIBitmap* m_pBitmap; 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_pPlatformGraphics; 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_pPlatformBitmap; 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_hDC; 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_hBitmap; 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_hOldBitmap; 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_hGdiFont; 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_hOldGdiFont; 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void InitPlatform(); 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void DestroyPlatform(); 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_GlyphBitmap* m_pGlyph; 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_OriginX, m_OriginY; 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FLOAT m_fOriginX, m_fOriginY; 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} FXTEXT_GLYPHPOS; 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_RECT FXGE_GetGlyphsBBox(FXTEXT_GLYPHPOS* pGlyphAndPos, int nChars, int anti_alias, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f); 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL OutputGlyph(void* dib, int x, int y, CFX_Font* pFont, double font_size, 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_AffineMatrix* pMatrix, unsigned long glyph_index, unsigned long argb); 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL OutputText(void* dib, int x, int y, CFX_Font* pFont, double font_size, 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_AffineMatrix* pText_matrix, unsigned short const* text, unsigned long argb); 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_GSUBTable 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Release() = 0; 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum) = 0; 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIFX_GSUBTable* FXGE_CreateGSUBTable(CFX_Font* pFont); 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 429