Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Side by Side Diff: core/include/fxge/fx_font.h

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

Powered by Google App Engine
This is Rietveld 408576698