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

Side by Side Diff: core/src/fxge/ge/fx_ge_fontmap.cpp

Issue 1171733003: Remove typdefs for pointer types in fx_system.h (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Manual fixes. Created 5 years, 6 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
« no previous file with comments | « core/src/fxge/ge/fx_ge_font.cpp ('k') | core/src/fxge/ge/fx_ge_linux.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <limits> 7 #include <limits>
8 8
9 #include "../../../include/fxge/fx_ge.h" 9 #include "../../../include/fxge/fx_ge.h"
10 #include "../../../include/fxge/fx_freetype.h" 10 #include "../../../include/fxge/fx_freetype.h"
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 FXFT_Face face = m_pExtMapper->FindSubstFont(face_name, bTrueType, flags , weight, italic_angle, 110 FXFT_Face face = m_pExtMapper->FindSubstFont(face_name, bTrueType, flags , weight, italic_angle,
111 CharsetCP, pSubstFont); 111 CharsetCP, pSubstFont);
112 if (face) { 112 if (face) {
113 return face; 113 return face;
114 } 114 }
115 } 115 }
116 return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight, italic_angle, 116 return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight, italic_angle,
117 CharsetCP, pSubstFont); 117 CharsetCP, pSubstFont);
118 } 118 }
119 FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name, 119 FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name,
120 int weight, FX_BOOL bItalic, FX_LPBYTE& pFo ntData) 120 int weight, FX_BOOL bItalic, uint8_t*& pFon tData)
121 { 121 {
122 CFX_ByteString key(face_name); 122 CFX_ByteString key(face_name);
123 key += ','; 123 key += ',';
124 key += CFX_ByteString::FormatInteger(weight); 124 key += CFX_ByteString::FormatInteger(weight);
125 key += bItalic ? 'I' : 'N'; 125 key += bItalic ? 'I' : 'N';
126 CTTFontDesc* pFontDesc = NULL; 126 CTTFontDesc* pFontDesc = NULL;
127 m_FaceMap.Lookup(key, (void*&)pFontDesc); 127 m_FaceMap.Lookup(key, (void*&)pFontDesc);
128 if(pFontDesc) { 128 if(pFontDesc) {
129 pFontData = pFontDesc->m_pFontData; 129 pFontData = pFontDesc->m_pFontData;
130 pFontDesc->m_RefCount ++; 130 pFontDesc->m_RefCount ++;
131 return pFontDesc->m_SingleFace.m_pFace; 131 return pFontDesc->m_SingleFace.m_pFace;
132 } 132 }
133 return NULL; 133 return NULL;
134 } 134 }
135 FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name, 135 FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name,
136 int weight, FX_BOOL bItalic, FX_LPBYTE pDat a, FX_DWORD size, int face_index) 136 int weight, FX_BOOL bItalic, uint8_t* pData , FX_DWORD size, int face_index)
137 { 137 {
138 CTTFontDesc* pFontDesc = new CTTFontDesc; 138 CTTFontDesc* pFontDesc = new CTTFontDesc;
139 pFontDesc->m_Type = 1; 139 pFontDesc->m_Type = 1;
140 pFontDesc->m_SingleFace.m_pFace = NULL; 140 pFontDesc->m_SingleFace.m_pFace = NULL;
141 pFontDesc->m_SingleFace.m_bBold = weight; 141 pFontDesc->m_SingleFace.m_bBold = weight;
142 pFontDesc->m_SingleFace.m_bItalic = bItalic; 142 pFontDesc->m_SingleFace.m_bItalic = bItalic;
143 pFontDesc->m_pFontData = pData; 143 pFontDesc->m_pFontData = pData;
144 pFontDesc->m_RefCount = 1; 144 pFontDesc->m_RefCount = 1;
145 FXFT_Library library; 145 FXFT_Library library;
146 if (m_FTLibrary == NULL) { 146 if (m_FTLibrary == NULL) {
(...skipping 10 matching lines...) Expand all
157 delete pFontDesc; 157 delete pFontDesc;
158 return NULL; 158 return NULL;
159 } 159 }
160 CFX_ByteString key(face_name); 160 CFX_ByteString key(face_name);
161 key += ','; 161 key += ',';
162 key += CFX_ByteString::FormatInteger(weight); 162 key += CFX_ByteString::FormatInteger(weight);
163 key += bItalic ? 'I' : 'N'; 163 key += bItalic ? 'I' : 'N';
164 m_FaceMap.SetAt(key, pFontDesc); 164 m_FaceMap.SetAt(key, pFontDesc);
165 return pFontDesc->m_SingleFace.m_pFace; 165 return pFontDesc->m_SingleFace.m_pFace;
166 } 166 }
167 const FX_LPCSTR g_Base14FontNames[14] = { 167 const FX_CHAR* const g_Base14FontNames[14] = {
168 "Courier", 168 "Courier",
169 "Courier-Bold", 169 "Courier-Bold",
170 "Courier-BoldOblique", 170 "Courier-BoldOblique",
171 "Courier-Oblique", 171 "Courier-Oblique",
172 "Helvetica", 172 "Helvetica",
173 "Helvetica-Bold", 173 "Helvetica-Bold",
174 "Helvetica-BoldOblique", 174 "Helvetica-BoldOblique",
175 "Helvetica-Oblique", 175 "Helvetica-Oblique",
176 "Times-Roman", 176 "Times-Roman",
177 "Times-Bold", 177 "Times-Bold",
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 {"TimesNewRomanPS-ItalicMT", 11}, 271 {"TimesNewRomanPS-ItalicMT", 11},
272 {"TimesNewRomanPSMT", 8}, 272 {"TimesNewRomanPSMT", 8},
273 {"TimesNewRomanPSMT,Bold", 9}, 273 {"TimesNewRomanPSMT,Bold", 9},
274 {"TimesNewRomanPSMT,BoldItalic", 10}, 274 {"TimesNewRomanPSMT,BoldItalic", 10},
275 {"TimesNewRomanPSMT,Italic", 11}, 275 {"TimesNewRomanPSMT,Italic", 11},
276 {"ZapfDingbats", 13}, 276 {"ZapfDingbats", 13},
277 }; 277 };
278 extern "C" { 278 extern "C" {
279 static int compareString(const void* key, const void* element) 279 static int compareString(const void* key, const void* element)
280 { 280 {
281 return FXSYS_stricmp((FX_LPCSTR)key, ((_AltFontName*)element)->m_pName); 281 return FXSYS_stricmp((const FX_CHAR*)key, ((_AltFontName*)element)->m_pN ame);
282 } 282 }
283 } 283 }
284 int _PDF_GetStandardFontName(CFX_ByteString& name) 284 int _PDF_GetStandardFontName(CFX_ByteString& name)
285 { 285 {
286 _AltFontName* found = (_AltFontName*)FXSYS_bsearch(name.c_str(), g_AltFontNa mes, 286 _AltFontName* found = (_AltFontName*)FXSYS_bsearch(name.c_str(), g_AltFontNa mes,
287 sizeof g_AltFontNames / sizeof (_AltFontName), sizeof (_AltFontName), compareString); 287 sizeof g_AltFontNames / sizeof (_AltFontName), sizeof (_AltFontName), compareString);
288 if (found == NULL) { 288 if (found == NULL) {
289 return -1; 289 return -1;
290 } 290 }
291 name = g_Base14FontNames[found->m_Index]; 291 name = g_Base14FontNames[found->m_Index];
292 return found->m_Index; 292 return found->m_Index;
293 } 293 }
294 int GetTTCIndex(FX_LPCBYTE pFontData, FX_DWORD ttc_size, FX_DWORD font_offset) 294 int GetTTCIndex(const uint8_t* pFontData, FX_DWORD ttc_size, FX_DWORD font_offse t)
295 { 295 {
296 int face_index = 0; 296 int face_index = 0;
297 FX_LPCBYTE p = pFontData + 8; 297 const uint8_t* p = pFontData + 8;
298 FX_DWORD nfont = GET_TT_LONG(p); 298 FX_DWORD nfont = GET_TT_LONG(p);
299 FX_DWORD index; 299 FX_DWORD index;
300 for (index = 0; index < nfont; index ++) { 300 for (index = 0; index < nfont; index ++) {
301 p = pFontData + 12 + index * 4; 301 p = pFontData + 12 + index * 4;
302 if (GET_TT_LONG(p) == font_offset) { 302 if (GET_TT_LONG(p) == font_offset) {
303 break; 303 break;
304 } 304 }
305 } 305 }
306 if(index >= nfont) { 306 if(index >= nfont) {
307 face_index = 0; 307 face_index = 0;
308 } else { 308 } else {
309 face_index = index; 309 face_index = index;
310 } 310 }
311 return face_index; 311 return face_index;
312 } 312 }
313 FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, FX_DWORD checksum, 313 FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, FX_DWORD checksum,
314 int font_offset, FX_LPBYTE& pFontData) 314 int font_offset, uint8_t*& pFontData)
315 { 315 {
316 CFX_ByteString key; 316 CFX_ByteString key;
317 key.Format("%d:%d", ttc_size, checksum); 317 key.Format("%d:%d", ttc_size, checksum);
318 CTTFontDesc* pFontDesc = NULL; 318 CTTFontDesc* pFontDesc = NULL;
319 m_FaceMap.Lookup(key, (void*&)pFontDesc); 319 m_FaceMap.Lookup(key, (void*&)pFontDesc);
320 if (pFontDesc == NULL) { 320 if (pFontDesc == NULL) {
321 return NULL; 321 return NULL;
322 } 322 }
323 pFontData = pFontDesc->m_pFontData; 323 pFontData = pFontDesc->m_pFontData;
324 pFontDesc->m_RefCount ++; 324 pFontDesc->m_RefCount ++;
325 int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); 325 int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset);
326 if (pFontDesc->m_TTCFace.m_pFaces[face_index] == NULL) { 326 if (pFontDesc->m_TTCFace.m_pFaces[face_index] == NULL) {
327 pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pF ontData, ttc_size, face_index); 327 pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pF ontData, ttc_size, face_index);
328 } 328 }
329 return pFontDesc->m_TTCFace.m_pFaces[face_index]; 329 return pFontDesc->m_TTCFace.m_pFaces[face_index];
330 } 330 }
331 FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, FX_DWORD checksum, 331 FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, FX_DWORD checksum,
332 FX_LPBYTE pData, FX_DWORD size, int font _offset) 332 uint8_t* pData, FX_DWORD size, int font_ offset)
333 { 333 {
334 CFX_ByteString key; 334 CFX_ByteString key;
335 key.Format("%d:%d", ttc_size, checksum); 335 key.Format("%d:%d", ttc_size, checksum);
336 CTTFontDesc* pFontDesc = new CTTFontDesc; 336 CTTFontDesc* pFontDesc = new CTTFontDesc;
337 pFontDesc->m_Type = 2; 337 pFontDesc->m_Type = 2;
338 pFontDesc->m_pFontData = pData; 338 pFontDesc->m_pFontData = pData;
339 for (int i = 0; i < 16; i ++) { 339 for (int i = 0; i < 16; i ++) {
340 pFontDesc->m_TTCFace.m_pFaces[i] = NULL; 340 pFontDesc->m_TTCFace.m_pFaces[i] = NULL;
341 } 341 }
342 pFontDesc->m_RefCount ++; 342 pFontDesc->m_RefCount ++;
343 key.Format("%d:%d", ttc_size, checksum); 343 key.Format("%d:%d", ttc_size, checksum);
344 m_FaceMap.SetAt(key, pFontDesc); 344 m_FaceMap.SetAt(key, pFontDesc);
345 int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); 345 int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset);
346 pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontD ata, ttc_size, face_index); 346 pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontD ata, ttc_size, face_index);
347 return pFontDesc->m_TTCFace.m_pFaces[face_index]; 347 return pFontDesc->m_TTCFace.m_pFaces[face_index];
348 } 348 }
349 FXFT_Face CFX_FontMgr::GetFixedFace(FX_LPCBYTE pData, FX_DWORD size, int face_in dex) 349 FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData, FX_DWORD size, int fac e_index)
350 { 350 {
351 FXFT_Library library; 351 FXFT_Library library;
352 if (m_FTLibrary == NULL) { 352 if (m_FTLibrary == NULL) {
353 FXFT_Init_FreeType(&m_FTLibrary); 353 FXFT_Init_FreeType(&m_FTLibrary);
354 } 354 }
355 library = m_FTLibrary; 355 library = m_FTLibrary;
356 FXFT_Face face = NULL; 356 FXFT_Face face = NULL;
357 int ret = FXFT_New_Memory_Face(library, pData, size, face_index, &face); 357 int ret = FXFT_New_Memory_Face(library, pData, size, face_index, &face);
358 if (ret) { 358 if (ret) {
359 return NULL; 359 return NULL;
360 } 360 }
361 ret = FXFT_Set_Pixel_Sizes(face, 64, 64); 361 ret = FXFT_Set_Pixel_Sizes(face, 64, 64);
362 if (ret) { 362 if (ret) {
363 return NULL; 363 return NULL;
364 } 364 }
365 return face; 365 return face;
366 } 366 }
367 FXFT_Face CFX_FontMgr::GetFileFace(FX_LPCSTR filename, int face_index) 367 FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index)
368 { 368 {
369 FXFT_Library library; 369 FXFT_Library library;
370 if (m_FTLibrary == NULL) { 370 if (m_FTLibrary == NULL) {
371 FXFT_Init_FreeType(&m_FTLibrary); 371 FXFT_Init_FreeType(&m_FTLibrary);
372 } 372 }
373 library = m_FTLibrary; 373 library = m_FTLibrary;
374 FXFT_Face face = NULL; 374 FXFT_Face face = NULL;
375 int ret = FXFT_New_Face(library, filename, face_index, &face); 375 int ret = FXFT_New_Face(library, filename, face_index, &face);
376 if (ret) { 376 if (ret) {
377 return NULL; 377 return NULL;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 {g_FoxitSansBoldFontData, 16344}, 424 {g_FoxitSansBoldFontData, 16344},
425 {g_FoxitSansBoldItalicFontData, 16418}, 425 {g_FoxitSansBoldItalicFontData, 16418},
426 {g_FoxitSansItalicFontData, 16339}, 426 {g_FoxitSansItalicFontData, 16339},
427 {g_FoxitSerifFontData, 19469}, 427 {g_FoxitSerifFontData, 19469},
428 {g_FoxitSerifBoldFontData, 19395}, 428 {g_FoxitSerifBoldFontData, 19395},
429 {g_FoxitSerifBoldItalicFontData, 20733}, 429 {g_FoxitSerifBoldItalicFontData, 20733},
430 {g_FoxitSerifItalicFontData, 21227}, 430 {g_FoxitSerifItalicFontData, 21227},
431 {g_FoxitSymbolFontData, 16729}, 431 {g_FoxitSymbolFontData, 16729},
432 {g_FoxitDingbatsFontData, 29513}, 432 {g_FoxitDingbatsFontData, 29513},
433 }; 433 };
434 void _FPDFAPI_GetInternalFontData(int id, FX_LPCBYTE& data, FX_DWORD& size) 434 void _FPDFAPI_GetInternalFontData(int id, const uint8_t*& data, FX_DWORD& size)
435 { 435 {
436 CFX_GEModule::Get()->GetFontMgr()->GetStandardFont(data, size, id); 436 CFX_GEModule::Get()->GetFontMgr()->GetStandardFont(data, size, id);
437 } 437 }
438 FX_BOOL CFX_FontMgr::GetStandardFont(FX_LPCBYTE& pFontData, FX_DWORD& size, int index) 438 FX_BOOL CFX_FontMgr::GetStandardFont(const uint8_t*& pFontData, FX_DWORD& size, int index)
439 { 439 {
440 if (index > 15 || index < 0) { 440 if (index > 15 || index < 0) {
441 return FALSE; 441 return FALSE;
442 } 442 }
443 { 443 {
444 if (index >= 14) { 444 if (index >= 14) {
445 if (index == 14) { 445 if (index == 14) {
446 pFontData = g_FoxitSerifMMFontData; 446 pFontData = g_FoxitSerifMMFontData;
447 size = 113417; 447 size = 113417;
448 } else { 448 } else {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 void CFX_FontMapper::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) 483 void CFX_FontMapper::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo)
484 { 484 {
485 if (pFontInfo == NULL) { 485 if (pFontInfo == NULL) {
486 return; 486 return;
487 } 487 }
488 if (m_pFontInfo) { 488 if (m_pFontInfo) {
489 m_pFontInfo->Release(); 489 m_pFontInfo->Release();
490 } 490 }
491 m_pFontInfo = pFontInfo; 491 m_pFontInfo = pFontInfo;
492 } 492 }
493 static CFX_ByteString _TT_NormalizeName(FX_LPCSTR family) 493 static CFX_ByteString _TT_NormalizeName(const FX_CHAR* family)
494 { 494 {
495 CFX_ByteString norm(family, -1); 495 CFX_ByteString norm(family, -1);
496 norm.Remove(' '); 496 norm.Remove(' ');
497 norm.Remove('-'); 497 norm.Remove('-');
498 norm.Remove(','); 498 norm.Remove(',');
499 int pos = norm.Find('+'); 499 int pos = norm.Find('+');
500 if (pos > 0) { 500 if (pos > 0) {
501 norm = norm.Left(pos); 501 norm = norm.Left(pos);
502 } 502 }
503 norm.MakeLower(); 503 norm.MakeLower();
504 return norm; 504 return norm;
505 } 505 }
506 CFX_ByteString _FPDF_GetNameFromTT(FX_LPCBYTE name_table, FX_DWORD name_id) 506 CFX_ByteString _FPDF_GetNameFromTT(const uint8_t* name_table, FX_DWORD name_id)
507 { 507 {
508 FX_LPCBYTE ptr = name_table + 2; 508 const uint8_t* ptr = name_table + 2;
509 int name_count = GET_TT_SHORT(ptr); 509 int name_count = GET_TT_SHORT(ptr);
510 int string_offset = GET_TT_SHORT(ptr + 2); 510 int string_offset = GET_TT_SHORT(ptr + 2);
511 FX_LPCBYTE string_ptr = name_table + string_offset; 511 const uint8_t* string_ptr = name_table + string_offset;
512 ptr += 4; 512 ptr += 4;
513 for (int i = 0; i < name_count; i ++) { 513 for (int i = 0; i < name_count; i ++) {
514 if (GET_TT_SHORT(ptr + 6) == name_id && GET_TT_SHORT(ptr) == 1 && GET_TT _SHORT(ptr + 2) == 0) { 514 if (GET_TT_SHORT(ptr + 6) == name_id && GET_TT_SHORT(ptr) == 1 && GET_TT _SHORT(ptr + 2) == 0) {
515 return CFX_ByteStringC(string_ptr + GET_TT_SHORT(ptr + 10), GET_TT_S HORT(ptr + 8)); 515 return CFX_ByteStringC(string_ptr + GET_TT_SHORT(ptr + 10), GET_TT_S HORT(ptr + 8));
516 } 516 }
517 ptr += 12; 517 ptr += 12;
518 } 518 }
519 return CFX_ByteString(); 519 return CFX_ByteString();
520 } 520 }
521 static CFX_ByteString _FPDF_ReadStringFromFile(FXSYS_FILE* pFile, FX_DWORD size) 521 static CFX_ByteString _FPDF_ReadStringFromFile(FXSYS_FILE* pFile, FX_DWORD size)
522 { 522 {
523 CFX_ByteString buffer; 523 CFX_ByteString buffer;
524 if (!FXSYS_fread(buffer.GetBuffer(size), size, 1, pFile)) { 524 if (!FXSYS_fread(buffer.GetBuffer(size), size, 1, pFile)) {
525 return CFX_ByteString(); 525 return CFX_ByteString();
526 } 526 }
527 buffer.ReleaseBuffer(size); 527 buffer.ReleaseBuffer(size);
528 return buffer; 528 return buffer;
529 } 529 }
530 CFX_ByteString _FPDF_LoadTableFromTT(FXSYS_FILE* pFile, FX_LPCBYTE pTables, FX_D WORD nTables, FX_DWORD tag) 530 CFX_ByteString _FPDF_LoadTableFromTT(FXSYS_FILE* pFile, const uint8_t* pTables, FX_DWORD nTables, FX_DWORD tag)
531 { 531 {
532 for (FX_DWORD i = 0; i < nTables; i ++) { 532 for (FX_DWORD i = 0; i < nTables; i ++) {
533 FX_LPCBYTE p = pTables + i * 16; 533 const uint8_t* p = pTables + i * 16;
534 if (GET_TT_LONG(p) == tag) { 534 if (GET_TT_LONG(p) == tag) {
535 FX_DWORD offset = GET_TT_LONG(p + 8); 535 FX_DWORD offset = GET_TT_LONG(p + 8);
536 FX_DWORD size = GET_TT_LONG(p + 12); 536 FX_DWORD size = GET_TT_LONG(p + 12);
537 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET); 537 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
538 return _FPDF_ReadStringFromFile(pFile, size); 538 return _FPDF_ReadStringFromFile(pFile, size);
539 } 539 }
540 } 540 }
541 return CFX_ByteString(); 541 return CFX_ByteString();
542 } 542 }
543 CFX_ByteString _FPDF_LoadTableFromTTStreamFile(IFX_FileStream* pFile, FX_LPCBYTE pTables, FX_DWORD nTables, FX_DWORD tag) 543 CFX_ByteString _FPDF_LoadTableFromTTStreamFile(IFX_FileStream* pFile, const uint 8_t* pTables, FX_DWORD nTables, FX_DWORD tag)
544 { 544 {
545 for (FX_DWORD i = 0; i < nTables; i ++) { 545 for (FX_DWORD i = 0; i < nTables; i ++) {
546 FX_LPCBYTE p = pTables + i * 16; 546 const uint8_t* p = pTables + i * 16;
547 if (GET_TT_LONG(p) == tag) { 547 if (GET_TT_LONG(p) == tag) {
548 FX_DWORD offset = GET_TT_LONG(p + 8); 548 FX_DWORD offset = GET_TT_LONG(p + 8);
549 FX_DWORD size = GET_TT_LONG(p + 12); 549 FX_DWORD size = GET_TT_LONG(p + 12);
550 CFX_ByteString buffer; 550 CFX_ByteString buffer;
551 if (!pFile->ReadBlock(buffer.GetBuffer(size), offset, size)) { 551 if (!pFile->ReadBlock(buffer.GetBuffer(size), offset, size)) {
552 return CFX_ByteString(); 552 return CFX_ByteString();
553 } 553 }
554 buffer.ReleaseBuffer(size); 554 buffer.ReleaseBuffer(size);
555 return buffer; 555 return buffer;
556 } 556 }
557 } 557 }
558 return CFX_ByteString(); 558 return CFX_ByteString();
559 } 559 }
560 CFX_ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont) 560 CFX_ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont)
561 { 561 {
562 if (m_pFontInfo == NULL) { 562 if (m_pFontInfo == NULL) {
563 CFX_ByteString(); 563 CFX_ByteString();
564 } 564 }
565 CFX_ByteString result; 565 CFX_ByteString result;
566 FX_DWORD size = m_pFontInfo->GetFontData(hFont, 0x6e616d65, NULL, 0); 566 FX_DWORD size = m_pFontInfo->GetFontData(hFont, 0x6e616d65, NULL, 0);
567 if (size) { 567 if (size) {
568 FX_LPBYTE buffer = FX_Alloc(uint8_t, size); 568 uint8_t* buffer = FX_Alloc(uint8_t, size);
569 m_pFontInfo->GetFontData(hFont, 0x6e616d65, buffer, size); 569 m_pFontInfo->GetFontData(hFont, 0x6e616d65, buffer, size);
570 result = _FPDF_GetNameFromTT(buffer, 6); 570 result = _FPDF_GetNameFromTT(buffer, 6);
571 FX_Free(buffer); 571 FX_Free(buffer);
572 } 572 }
573 return result; 573 return result;
574 } 574 }
575 void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset) 575 void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset)
576 { 576 {
577 if (m_pFontInfo == NULL) { 577 if (m_pFontInfo == NULL) {
578 return; 578 return;
579 } 579 }
580 if (m_CharsetArray.Find((FX_DWORD)charset) == -1) { 580 if (m_CharsetArray.Find((FX_DWORD)charset) == -1) {
581 m_CharsetArray.Add((FX_DWORD)charset); 581 m_CharsetArray.Add((FX_DWORD)charset);
582 m_FaceArray.Add(name); 582 m_FaceArray.Add(name);
583 } 583 }
584 if (name == m_LastFamily) { 584 if (name == m_LastFamily) {
585 return; 585 return;
586 } 586 }
587 FX_LPCBYTE ptr = name; 587 const uint8_t* ptr = name;
588 FX_BOOL bLocalized = FALSE; 588 FX_BOOL bLocalized = FALSE;
589 for (int i = 0; i < name.GetLength(); i ++) 589 for (int i = 0; i < name.GetLength(); i ++)
590 if (ptr[i] > 0x80) { 590 if (ptr[i] > 0x80) {
591 bLocalized = TRUE; 591 bLocalized = TRUE;
592 break; 592 break;
593 } 593 }
594 if (bLocalized) { 594 if (bLocalized) {
595 void* hFont = m_pFontInfo->GetFont(name); 595 void* hFont = m_pFontInfo->GetFont(name);
596 if (hFont == NULL) { 596 if (hFont == NULL) {
597 FX_BOOL bExact; 597 FX_BOOL bExact;
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 return 1 << 31; 737 return 1 << 31;
738 } 738 }
739 return 1 << 21; 739 return 1 << 21;
740 } 740 }
741 FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseF ont, int italic_angle, int weight, int picthfamily) 741 FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseF ont, int italic_angle, int weight, int picthfamily)
742 { 742 {
743 if (iBaseFont < 12) { 743 if (iBaseFont < 12) {
744 if (m_FoxitFaces[iBaseFont]) { 744 if (m_FoxitFaces[iBaseFont]) {
745 return m_FoxitFaces[iBaseFont]; 745 return m_FoxitFaces[iBaseFont];
746 } 746 }
747 FX_LPCBYTE pFontData = NULL; 747 const uint8_t* pFontData = NULL;
748 FX_DWORD size = 0; 748 FX_DWORD size = 0;
749 if (m_pFontMgr->GetStandardFont(pFontData, size, iBaseFont)) { 749 if (m_pFontMgr->GetStandardFont(pFontData, size, iBaseFont)) {
750 m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(pFontData, size, 0); 750 m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
751 return m_FoxitFaces[iBaseFont]; 751 return m_FoxitFaces[iBaseFont];
752 } 752 }
753 } 753 }
754 pSubstFont->m_SubstFlags |= FXFONT_SUBST_MM; 754 pSubstFont->m_SubstFlags |= FXFONT_SUBST_MM;
755 pSubstFont->m_ItalicAngle = italic_angle; 755 pSubstFont->m_ItalicAngle = italic_angle;
756 if (weight) { 756 if (weight) {
757 pSubstFont->m_Weight = weight; 757 pSubstFont->m_Weight = weight;
758 } 758 }
759 if (picthfamily & FXFONT_FF_ROMAN) { 759 if (picthfamily & FXFONT_FF_ROMAN) {
760 pSubstFont->m_Weight = pSubstFont->m_Weight * 4 / 5; 760 pSubstFont->m_Weight = pSubstFont->m_Weight * 4 / 5;
761 pSubstFont->m_Family = "Chrome Serif"; 761 pSubstFont->m_Family = "Chrome Serif";
762 if (m_MMFaces[1]) { 762 if (m_MMFaces[1]) {
763 return m_MMFaces[1]; 763 return m_MMFaces[1];
764 } 764 }
765 FX_LPCBYTE pFontData = NULL; 765 const uint8_t* pFontData = NULL;
766 FX_DWORD size; 766 FX_DWORD size;
767 m_pFontMgr->GetStandardFont(pFontData, size, 14); 767 m_pFontMgr->GetStandardFont(pFontData, size, 14);
768 m_MMFaces[1] = m_pFontMgr->GetFixedFace(pFontData, size, 0); 768 m_MMFaces[1] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
769 return m_MMFaces[1]; 769 return m_MMFaces[1];
770 } 770 }
771 pSubstFont->m_Family = "Chrome Sans"; 771 pSubstFont->m_Family = "Chrome Sans";
772 if (m_MMFaces[0]) { 772 if (m_MMFaces[0]) {
773 return m_MMFaces[0]; 773 return m_MMFaces[0];
774 } 774 }
775 FX_LPCBYTE pFontData = NULL; 775 const uint8_t* pFontData = NULL;
776 FX_DWORD size = 0; 776 FX_DWORD size = 0;
777 m_pFontMgr->GetStandardFont(pFontData, size, 15); 777 m_pFontMgr->GetStandardFont(pFontData, size, 15);
778 m_MMFaces[0] = m_pFontMgr->GetFixedFace(pFontData, size, 0); 778 m_MMFaces[0] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
779 return m_MMFaces[0]; 779 return m_MMFaces[0];
780 } 780 }
781 const struct _AltFontFamily { 781 const struct _AltFontFamily {
782 FX_LPCSTR m_pFontName; 782 const FX_CHAR* m_pFontName;
783 FX_LPCSTR m_pFontFamily; 783 const FX_CHAR* m_pFontFamily;
784 } 784 }
785 g_AltFontFamilies[] = { 785 g_AltFontFamilies[] = {
786 {"AGaramondPro", "Adobe Garamond Pro"}, 786 {"AGaramondPro", "Adobe Garamond Pro"},
787 {"BankGothicBT-Medium", "BankGothic Md BT"}, 787 {"BankGothicBT-Medium", "BankGothic Md BT"},
788 {"ForteMT", "Forte"}, 788 {"ForteMT", "Forte"},
789 }; 789 };
790 extern "C" { 790 extern "C" {
791 static int compareFontFamilyString(const void* key, const void* element) 791 static int compareFontFamilyString(const void* key, const void* element)
792 { 792 {
793 CFX_ByteString str_key((FX_LPCSTR)key); 793 CFX_ByteString str_key((const FX_CHAR*)key);
794 if (str_key.Find(((_AltFontFamily*)element)->m_pFontName) != -1) { 794 if (str_key.Find(((_AltFontFamily*)element)->m_pFontName) != -1) {
795 return 0; 795 return 0;
796 } 796 }
797 return FXSYS_stricmp((FX_LPCSTR)key, ((_AltFontFamily*)element)->m_pFont Name); 797 return FXSYS_stricmp((const FX_CHAR*)key, ((_AltFontFamily*)element)->m_ pFontName);
798 } 798 }
799 } 799 }
800 #define FX_FONT_STYLE_None 0x00 800 #define FX_FONT_STYLE_None 0x00
801 #define FX_FONT_STYLE_Bold 0x01 801 #define FX_FONT_STYLE_Bold 0x01
802 #define FX_FONT_STYLE_Italic 0x02 802 #define FX_FONT_STYLE_Italic 0x02
803 #define FX_FONT_STYLE_BoldBold 0x04 803 #define FX_FONT_STYLE_BoldBold 0x04
804 static CFX_ByteString _GetFontFamily(CFX_ByteString fontName, int nStyle) 804 static CFX_ByteString _GetFontFamily(CFX_ByteString fontName, int nStyle)
805 { 805 {
806 if (fontName.Find("Script") >= 0) { 806 if (fontName.Find("Script") >= 0) {
807 if ((nStyle & FX_FONT_STYLE_Bold) == FX_FONT_STYLE_Bold) { 807 if ((nStyle & FX_FONT_STYLE_Bold) == FX_FONT_STYLE_Bold) {
808 fontName = "ScriptMTBold"; 808 fontName = "ScriptMTBold";
809 } else if (fontName.Find("Palace") >= 0) { 809 } else if (fontName.Find("Palace") >= 0) {
810 fontName = "PalaceScriptMT"; 810 fontName = "PalaceScriptMT";
811 } else if (fontName.Find("French") >= 0) { 811 } else if (fontName.Find("French") >= 0) {
812 fontName = "FrenchScriptMT"; 812 fontName = "FrenchScriptMT";
813 } else if (fontName.Find("FreeStyle") >= 0) { 813 } else if (fontName.Find("FreeStyle") >= 0) {
814 fontName = "FreeStyleScript"; 814 fontName = "FreeStyleScript";
815 } 815 }
816 return fontName; 816 return fontName;
817 } 817 }
818 _AltFontFamily* found = (_AltFontFamily*)FXSYS_bsearch(fontName.c_str(), g_A ltFontFamilies, 818 _AltFontFamily* found = (_AltFontFamily*)FXSYS_bsearch(fontName.c_str(), g_A ltFontFamilies,
819 sizeof g_AltFontFamilies / sizeof (_AltFontFamily), sizeof (_AltFontFamily), compareFontFamilyString); 819 sizeof g_AltFontFamilies / sizeof (_AltFontFamily), sizeof (_AltFontFamily), compareFontFamilyString);
820 if (found == NULL) { 820 if (found == NULL) {
821 return fontName; 821 return fontName;
822 } 822 }
823 return found->m_pFontFamily; 823 return found->m_pFontFamily;
824 }; 824 };
825 typedef struct _FX_FontStyle { 825 typedef struct _FX_FontStyle {
826 FX_LPCSTR style; 826 const FX_CHAR* style;
827 int32_t len; 827 int32_t len;
828 } FX_FontStyle; 828 } FX_FontStyle;
829 const FX_FontStyle g_FontStyles[] = { 829 const FX_FontStyle g_FontStyles[] = {
830 { "Bold", 4 }, 830 { "Bold", 4 },
831 { "Italic", 6 }, 831 { "Italic", 6 },
832 { "BoldItalic", 10 }, 832 { "BoldItalic", 10 },
833 { "Reg", 3 }, 833 { "Reg", 3 },
834 { "Regular", 7 }, 834 { "Regular", 7 },
835 }; 835 };
836 CFX_ByteString ParseStyle(FX_LPCSTR pStyle, int iLen, int iIndex) 836 CFX_ByteString ParseStyle(const FX_CHAR* pStyle, int iLen, int iIndex)
837 { 837 {
838 CFX_ByteTextBuf buf; 838 CFX_ByteTextBuf buf;
839 if (!iLen || iLen <= iIndex) { 839 if (!iLen || iLen <= iIndex) {
840 return buf.GetByteString(); 840 return buf.GetByteString();
841 } 841 }
842 while (iIndex < iLen) { 842 while (iIndex < iLen) {
843 if (pStyle[iIndex] == ',') { 843 if (pStyle[iIndex] == ',') {
844 break; 844 break;
845 } 845 }
846 buf.AppendChar(pStyle[iIndex]); 846 buf.AppendChar(pStyle[iIndex]);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 } 896 }
897 } 897 }
898 _PDF_GetStandardFontName(SubstName); 898 _PDF_GetStandardFontName(SubstName);
899 if (SubstName == FX_BSTRC("Symbol") && !bTrueType) { 899 if (SubstName == FX_BSTRC("Symbol") && !bTrueType) {
900 pSubstFont->m_Family = "Chrome Symbol"; 900 pSubstFont->m_Family = "Chrome Symbol";
901 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; 901 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
902 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; 902 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
903 if (m_FoxitFaces[12]) { 903 if (m_FoxitFaces[12]) {
904 return m_FoxitFaces[12]; 904 return m_FoxitFaces[12];
905 } 905 }
906 FX_LPCBYTE pFontData = NULL; 906 const uint8_t* pFontData = NULL;
907 FX_DWORD size = 0; 907 FX_DWORD size = 0;
908 m_pFontMgr->GetStandardFont(pFontData, size, 12); 908 m_pFontMgr->GetStandardFont(pFontData, size, 12);
909 m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0); 909 m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
910 return m_FoxitFaces[12]; 910 return m_FoxitFaces[12];
911 } 911 }
912 if (SubstName == FX_BSTRC("ZapfDingbats")) { 912 if (SubstName == FX_BSTRC("ZapfDingbats")) {
913 pSubstFont->m_Family = "Chrome Dingbats"; 913 pSubstFont->m_Family = "Chrome Dingbats";
914 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; 914 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
915 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; 915 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
916 if (m_FoxitFaces[13]) { 916 if (m_FoxitFaces[13]) {
917 return m_FoxitFaces[13]; 917 return m_FoxitFaces[13];
918 } 918 }
919 FX_LPCBYTE pFontData = NULL; 919 const uint8_t* pFontData = NULL;
920 FX_DWORD size = 0; 920 FX_DWORD size = 0;
921 m_pFontMgr->GetStandardFont(pFontData, size, 13); 921 m_pFontMgr->GetStandardFont(pFontData, size, 13);
922 m_FoxitFaces[13] = m_pFontMgr->GetFixedFace(pFontData, size, 0); 922 m_FoxitFaces[13] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
923 return m_FoxitFaces[13]; 923 return m_FoxitFaces[13];
924 } 924 }
925 int iBaseFont = 0; 925 int iBaseFont = 0;
926 CFX_ByteString family, style; 926 CFX_ByteString family, style;
927 FX_BOOL bHasComma = FALSE; 927 FX_BOOL bHasComma = FALSE;
928 FX_BOOL bHasHypen = FALSE; 928 FX_BOOL bHasHypen = FALSE;
929 int find = SubstName.Find(FX_BSTRC(","), 0); 929 int find = SubstName.Find(FX_BSTRC(","), 0);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 } 987 }
988 if (flags & FXFONT_SCRIPT) { 988 if (flags & FXFONT_SCRIPT) {
989 PitchFamily |= FXFONT_FF_SCRIPT; 989 PitchFamily |= FXFONT_FF_SCRIPT;
990 } 990 }
991 if (flags & FXFONT_FIXED_PITCH) { 991 if (flags & FXFONT_FIXED_PITCH) {
992 PitchFamily |= FXFONT_FF_FIXEDPITCH; 992 PitchFamily |= FXFONT_FF_FIXEDPITCH;
993 } 993 }
994 } 994 }
995 if (!style.IsEmpty()) { 995 if (!style.IsEmpty()) {
996 int nLen = style.GetLength(); 996 int nLen = style.GetLength();
997 FX_LPCSTR pStyle = style; 997 const FX_CHAR* pStyle = style;
998 int i = 0; 998 int i = 0;
999 FX_BOOL bFirstItem = TRUE; 999 FX_BOOL bFirstItem = TRUE;
1000 CFX_ByteString buf; 1000 CFX_ByteString buf;
1001 while (i < nLen) { 1001 while (i < nLen) {
1002 buf = ParseStyle(pStyle, nLen, i); 1002 buf = ParseStyle(pStyle, nLen, i);
1003 int32_t nRet = GetStyleType(buf, FALSE); 1003 int32_t nRet = GetStyleType(buf, FALSE);
1004 if ((i && !bStyleAvail) || (!i && nRet < 0)) { 1004 if ((i && !bStyleAvail) || (!i && nRet < 0)) {
1005 family = SubstName; 1005 family = SubstName;
1006 iBaseFont = 12; 1006 iBaseFont = 12;
1007 break; 1007 break;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1149 } else { 1149 } else {
1150 if (Charset == FXFONT_SYMBOL_CHARSET) { 1150 if (Charset == FXFONT_SYMBOL_CHARSET) {
1151 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || _FXM_PLATFORM_ == _FXM_PLATFORM_ ANDROID_ 1151 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || _FXM_PLATFORM_ == _FXM_PLATFORM_ ANDROID_
1152 if (SubstName == FX_BSTRC("Symbol")) { 1152 if (SubstName == FX_BSTRC("Symbol")) {
1153 pSubstFont->m_Family = "Chrome Symbol"; 1153 pSubstFont->m_Family = "Chrome Symbol";
1154 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; 1154 pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
1155 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET; 1155 pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
1156 if (m_FoxitFaces[12]) { 1156 if (m_FoxitFaces[12]) {
1157 return m_FoxitFaces[12]; 1157 return m_FoxitFaces[12];
1158 } 1158 }
1159 FX_LPCBYTE pFontData = NULL; 1159 const uint8_t* pFontData = NULL;
1160 FX_DWORD size = 0; 1160 FX_DWORD size = 0;
1161 m_pFontMgr->GetStandardFont(pFontData, size, 12); 1161 m_pFontMgr->GetStandardFont(pFontData, size, 12);
1162 m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0); 1162 m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
1163 return m_FoxitFaces[12]; 1163 return m_FoxitFaces[12];
1164 } else { 1164 } else {
1165 pSubstFont->m_SubstFlags |= FXFONT_SUBST_NONSYMBOL; 1165 pSubstFont->m_SubstFlags |= FXFONT_SUBST_NONSYMBOL;
1166 return FindSubstFont(family, bTrueType, flags & ~FXFONT_SYMB OLIC, weight, italic_angle, 0, pSubstFont); 1166 return FindSubstFont(family, bTrueType, flags & ~FXFONT_SYMB OLIC, weight, italic_angle, 0, pSubstFont);
1167 } 1167 }
1168 #else 1168 #else
1169 pSubstFont->m_SubstFlags |= FXFONT_SUBST_NONSYMBOL; 1169 pSubstFont->m_SubstFlags |= FXFONT_SUBST_NONSYMBOL;
(...skipping 27 matching lines...) Expand all
1197 return NULL; 1197 return NULL;
1198 } 1198 }
1199 FXFT_Face face = NULL; 1199 FXFT_Face face = NULL;
1200 if (ttc_size) { 1200 if (ttc_size) {
1201 uint8_t temp[1024]; 1201 uint8_t temp[1024];
1202 m_pFontInfo->GetFontData(hFont, 0x74746366, temp, 1024); 1202 m_pFontInfo->GetFontData(hFont, 0x74746366, temp, 1024);
1203 FX_DWORD checksum = 0; 1203 FX_DWORD checksum = 0;
1204 for (int i = 0; i < 256; i ++) { 1204 for (int i = 0; i < 256; i ++) {
1205 checksum += ((FX_DWORD*)temp)[i]; 1205 checksum += ((FX_DWORD*)temp)[i];
1206 } 1206 }
1207 FX_LPBYTE pFontData; 1207 uint8_t* pFontData;
1208 face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, ttc_size - font_ size, pFontData); 1208 face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, ttc_size - font_ size, pFontData);
1209 if (face == NULL) { 1209 if (face == NULL) {
1210 pFontData = FX_Alloc(uint8_t, ttc_size); 1210 pFontData = FX_Alloc(uint8_t, ttc_size);
1211 m_pFontInfo->GetFontData(hFont, 0x74746366, pFontData, ttc_size); 1211 m_pFontInfo->GetFontData(hFont, 0x74746366, pFontData, ttc_size);
1212 face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, t tc_size, 1212 face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, t tc_size,
1213 ttc_size - font_size); 1213 ttc_size - font_size);
1214 } 1214 }
1215 } else { 1215 } else {
1216 FX_LPBYTE pFontData; 1216 uint8_t* pFontData;
1217 face = m_pFontMgr->GetCachedFace(SubstName, weight, bItalic, pFontData); 1217 face = m_pFontMgr->GetCachedFace(SubstName, weight, bItalic, pFontData);
1218 if (face == NULL) { 1218 if (face == NULL) {
1219 pFontData = FX_Alloc(uint8_t, font_size); 1219 pFontData = FX_Alloc(uint8_t, font_size);
1220 m_pFontInfo->GetFontData(hFont, 0, pFontData, font_size); 1220 m_pFontInfo->GetFontData(hFont, 0, pFontData, font_size);
1221 face = m_pFontMgr->AddCachedFace(SubstName, weight, bItalic, pFontDa ta, font_size, m_pFontInfo->GetFaceIndex(hFont)); 1221 face = m_pFontMgr->AddCachedFace(SubstName, weight, bItalic, pFontDa ta, font_size, m_pFontInfo->GetFaceIndex(hFont));
1222 } 1222 }
1223 } 1223 }
1224 if (face == NULL) { 1224 if (face == NULL) {
1225 m_pFontInfo->DeleteFont(hFont); 1225 m_pFontInfo->DeleteFont(hFont);
1226 return NULL; 1226 return NULL;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 } 1286 }
1287 #endif 1287 #endif
1288 CFX_FolderFontInfo::CFX_FolderFontInfo() 1288 CFX_FolderFontInfo::CFX_FolderFontInfo()
1289 { 1289 {
1290 } 1290 }
1291 CFX_FolderFontInfo::~CFX_FolderFontInfo() 1291 CFX_FolderFontInfo::~CFX_FolderFontInfo()
1292 { 1292 {
1293 FX_POSITION pos = m_FontList.GetStartPosition(); 1293 FX_POSITION pos = m_FontList.GetStartPosition();
1294 while (pos) { 1294 while (pos) {
1295 CFX_ByteString key; 1295 CFX_ByteString key;
1296 FX_LPVOID value; 1296 void* value;
1297 m_FontList.GetNextAssoc(pos, key, value); 1297 m_FontList.GetNextAssoc(pos, key, value);
1298 delete (CFontFaceInfo*)value; 1298 delete (CFontFaceInfo*)value;
1299 } 1299 }
1300 } 1300 }
1301 void CFX_FolderFontInfo::AddPath(FX_BSTR path) 1301 void CFX_FolderFontInfo::AddPath(FX_BSTR path)
1302 { 1302 {
1303 m_PathList.Add(path); 1303 m_PathList.Add(path);
1304 } 1304 }
1305 void CFX_FolderFontInfo::Release() 1305 void CFX_FolderFontInfo::Release()
1306 { 1306 {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 return; 1365 return;
1366 } 1366 }
1367 1367
1368 if (GET_TT_LONG(buffer) == 0x74746366) { 1368 if (GET_TT_LONG(buffer) == 0x74746366) {
1369 FX_DWORD nFaces = GET_TT_LONG(buffer + 8); 1369 FX_DWORD nFaces = GET_TT_LONG(buffer + 8);
1370 if (nFaces > std::numeric_limits<FX_DWORD>::max() / 4) { 1370 if (nFaces > std::numeric_limits<FX_DWORD>::max() / 4) {
1371 FXSYS_fclose(pFile); 1371 FXSYS_fclose(pFile);
1372 return; 1372 return;
1373 } 1373 }
1374 FX_DWORD face_bytes = nFaces * 4; 1374 FX_DWORD face_bytes = nFaces * 4;
1375 FX_LPBYTE offsets = FX_Alloc(uint8_t, face_bytes); 1375 uint8_t* offsets = FX_Alloc(uint8_t, face_bytes);
1376 readCnt = FXSYS_fread(offsets, face_bytes, 1, pFile); 1376 readCnt = FXSYS_fread(offsets, face_bytes, 1, pFile);
1377 if (readCnt != face_bytes) { 1377 if (readCnt != face_bytes) {
1378 FX_Free(offsets); 1378 FX_Free(offsets);
1379 FXSYS_fclose(pFile); 1379 FXSYS_fclose(pFile);
1380 return; 1380 return;
1381 } 1381 }
1382 for (FX_DWORD i = 0; i < nFaces; i ++) { 1382 for (FX_DWORD i = 0; i < nFaces; i ++) {
1383 FX_LPBYTE p = offsets + i * 4; 1383 uint8_t* p = offsets + i * 4;
1384 ReportFace(path, pFile, filesize, GET_TT_LONG(p)); 1384 ReportFace(path, pFile, filesize, GET_TT_LONG(p));
1385 } 1385 }
1386 FX_Free(offsets); 1386 FX_Free(offsets);
1387 } else { 1387 } else {
1388 ReportFace(path, pFile, filesize, 0); 1388 ReportFace(path, pFile, filesize, 0);
1389 } 1389 }
1390 FXSYS_fclose(pFile); 1390 FXSYS_fclose(pFile);
1391 } 1391 }
1392 void CFX_FolderFontInfo::ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_ DWORD filesize, FX_DWORD offset) 1392 void CFX_FolderFontInfo::ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_ DWORD filesize, FX_DWORD offset)
1393 { 1393 {
1394 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET); 1394 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
1395 char buffer[16]; 1395 char buffer[16];
1396 if (!FXSYS_fread(buffer, 12, 1, pFile)) { 1396 if (!FXSYS_fread(buffer, 12, 1, pFile)) {
1397 return; 1397 return;
1398 } 1398 }
1399 FX_DWORD nTables = GET_TT_SHORT(buffer + 4); 1399 FX_DWORD nTables = GET_TT_SHORT(buffer + 4);
1400 CFX_ByteString tables = _FPDF_ReadStringFromFile(pFile, nTables * 16); 1400 CFX_ByteString tables = _FPDF_ReadStringFromFile(pFile, nTables * 16);
1401 if (tables.IsEmpty()) { 1401 if (tables.IsEmpty()) {
1402 return; 1402 return;
1403 } 1403 }
1404 CFX_ByteString names = _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x6e616 d65); 1404 CFX_ByteString names = _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x6e616 d65);
1405 CFX_ByteString facename = _FPDF_GetNameFromTT(names, 1); 1405 CFX_ByteString facename = _FPDF_GetNameFromTT(names, 1);
1406 CFX_ByteString style = _FPDF_GetNameFromTT(names, 2); 1406 CFX_ByteString style = _FPDF_GetNameFromTT(names, 2);
1407 if (style != "Regular") { 1407 if (style != "Regular") {
1408 facename += " " + style; 1408 facename += " " + style;
1409 } 1409 }
1410 FX_LPVOID p; 1410 void* p;
1411 if (m_FontList.Lookup(facename, p)) { 1411 if (m_FontList.Lookup(facename, p)) {
1412 return; 1412 return;
1413 } 1413 }
1414 CFontFaceInfo* pInfo = new CFontFaceInfo; 1414 CFontFaceInfo* pInfo = new CFontFaceInfo;
1415 pInfo->m_FilePath = path; 1415 pInfo->m_FilePath = path;
1416 pInfo->m_FaceName = facename; 1416 pInfo->m_FaceName = facename;
1417 pInfo->m_FontTables = tables; 1417 pInfo->m_FontTables = tables;
1418 pInfo->m_FontOffset = offset; 1418 pInfo->m_FontOffset = offset;
1419 pInfo->m_FileSize = filesize; 1419 pInfo->m_FileSize = filesize;
1420 pInfo->m_Charsets = 0; 1420 pInfo->m_Charsets = 0;
1421 CFX_ByteString os2 = _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f3 2); 1421 CFX_ByteString os2 = _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f3 2);
1422 if (os2.GetLength() >= 86) { 1422 if (os2.GetLength() >= 86) {
1423 FX_LPCBYTE p = (FX_LPCBYTE)os2 + 78; 1423 const uint8_t* p = (const uint8_t*)os2 + 78;
1424 FX_DWORD codepages = GET_TT_LONG(p); 1424 FX_DWORD codepages = GET_TT_LONG(p);
1425 if (codepages & (1 << 17)) { 1425 if (codepages & (1 << 17)) {
1426 m_pMapper->AddInstalledFont(facename, FXFONT_SHIFTJIS_CHARSET); 1426 m_pMapper->AddInstalledFont(facename, FXFONT_SHIFTJIS_CHARSET);
1427 pInfo->m_Charsets |= CHARSET_FLAG_SHIFTJIS; 1427 pInfo->m_Charsets |= CHARSET_FLAG_SHIFTJIS;
1428 } 1428 }
1429 if (codepages & (1 << 18)) { 1429 if (codepages & (1 << 18)) {
1430 m_pMapper->AddInstalledFont(facename, FXFONT_GB2312_CHARSET); 1430 m_pMapper->AddInstalledFont(facename, FXFONT_GB2312_CHARSET);
1431 pInfo->m_Charsets |= CHARSET_FLAG_GB; 1431 pInfo->m_Charsets |= CHARSET_FLAG_GB;
1432 } 1432 }
1433 if (codepages & (1 << 20)) { 1433 if (codepages & (1 << 20)) {
(...skipping 16 matching lines...) Expand all
1450 pInfo->m_Styles |= FXFONT_BOLD; 1450 pInfo->m_Styles |= FXFONT_BOLD;
1451 } 1451 }
1452 if (style.Find(FX_BSTRC("Italic")) > -1 || style.Find(FX_BSTRC("Oblique")) > -1) { 1452 if (style.Find(FX_BSTRC("Italic")) > -1 || style.Find(FX_BSTRC("Oblique")) > -1) {
1453 pInfo->m_Styles |= FXFONT_ITALIC; 1453 pInfo->m_Styles |= FXFONT_ITALIC;
1454 } 1454 }
1455 if (facename.Find(FX_BSTRC("Serif")) > -1) { 1455 if (facename.Find(FX_BSTRC("Serif")) > -1) {
1456 pInfo->m_Styles |= FXFONT_SERIF; 1456 pInfo->m_Styles |= FXFONT_SERIF;
1457 } 1457 }
1458 m_FontList.SetAt(facename, pInfo); 1458 m_FontList.SetAt(facename, pInfo);
1459 } 1459 }
1460 void* CFX_FolderFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, FX_LPCSTR family, FX_BOOL& bExact) 1460 void* CFX_FolderFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, FX_BOOL& bExact)
1461 { 1461 {
1462 return NULL; 1462 return NULL;
1463 } 1463 }
1464 void* CFX_FolderFontInfo::GetFont(FX_LPCSTR face) 1464 void* CFX_FolderFontInfo::GetFont(const FX_CHAR* face)
1465 { 1465 {
1466 FX_LPVOID p; 1466 void* p;
1467 if (!m_FontList.Lookup(face, p)) { 1467 if (!m_FontList.Lookup(face, p)) {
1468 return NULL; 1468 return NULL;
1469 } 1469 }
1470 return p; 1470 return p;
1471 } 1471 }
1472 FX_DWORD CFX_FolderFontInfo::GetFontData(void* hFont, FX_DWORD table, FX_LPBYTE buffer, FX_DWORD size) 1472 FX_DWORD CFX_FolderFontInfo::GetFontData(void* hFont, FX_DWORD table, uint8_t* b uffer, FX_DWORD size)
1473 { 1473 {
1474 if (hFont == NULL) { 1474 if (hFont == NULL) {
1475 return 0; 1475 return 0;
1476 } 1476 }
1477 CFontFaceInfo* pFont = (CFontFaceInfo*)hFont; 1477 CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
1478 FXSYS_FILE* pFile = NULL; 1478 FXSYS_FILE* pFile = NULL;
1479 if (size > 0) { 1479 if (size > 0) {
1480 pFile = FXSYS_fopen(pFont->m_FilePath, "rb"); 1480 pFile = FXSYS_fopen(pFont->m_FilePath, "rb");
1481 if (pFile == NULL) { 1481 if (pFile == NULL) {
1482 return 0; 1482 return 0;
1483 } 1483 }
1484 } 1484 }
1485 FX_DWORD datasize = 0; 1485 FX_DWORD datasize = 0;
1486 FX_DWORD offset; 1486 FX_DWORD offset;
1487 if (table == 0) { 1487 if (table == 0) {
1488 datasize = pFont->m_FontOffset ? 0 : pFont->m_FileSize; 1488 datasize = pFont->m_FontOffset ? 0 : pFont->m_FileSize;
1489 offset = 0; 1489 offset = 0;
1490 } else if (table == 0x74746366) { 1490 } else if (table == 0x74746366) {
1491 datasize = pFont->m_FontOffset ? pFont->m_FileSize : 0; 1491 datasize = pFont->m_FontOffset ? pFont->m_FileSize : 0;
1492 offset = 0; 1492 offset = 0;
1493 } else { 1493 } else {
1494 FX_DWORD nTables = pFont->m_FontTables.GetLength() / 16; 1494 FX_DWORD nTables = pFont->m_FontTables.GetLength() / 16;
1495 for (FX_DWORD i = 0; i < nTables; i ++) { 1495 for (FX_DWORD i = 0; i < nTables; i ++) {
1496 FX_LPCBYTE p = (FX_LPCBYTE)pFont->m_FontTables + i * 16; 1496 const uint8_t* p = (const uint8_t*)pFont->m_FontTables + i * 16;
1497 if (GET_TT_LONG(p) == table) { 1497 if (GET_TT_LONG(p) == table) {
1498 offset = GET_TT_LONG(p + 8); 1498 offset = GET_TT_LONG(p + 8);
1499 datasize = GET_TT_LONG(p + 12); 1499 datasize = GET_TT_LONG(p + 12);
1500 } 1500 }
1501 } 1501 }
1502 } 1502 }
1503 if (datasize && size >= datasize && pFile) { 1503 if (datasize && size >= datasize && pFile) {
1504 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET); 1504 FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
1505 FXSYS_fread(buffer, datasize, 1, pFile); 1505 FXSYS_fread(buffer, datasize, 1, pFile);
1506 } 1506 }
(...skipping 11 matching lines...) Expand all
1518 return FALSE; 1518 return FALSE;
1519 } 1519 }
1520 CFontFaceInfo* pFont = (CFontFaceInfo*)hFont; 1520 CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
1521 name = pFont->m_FaceName; 1521 name = pFont->m_FaceName;
1522 return TRUE; 1522 return TRUE;
1523 } 1523 }
1524 FX_BOOL CFX_FolderFontInfo::GetFontCharset(void* hFont, int& charset) 1524 FX_BOOL CFX_FolderFontInfo::GetFontCharset(void* hFont, int& charset)
1525 { 1525 {
1526 return FALSE; 1526 return FALSE;
1527 } 1527 }
OLDNEW
« no previous file with comments | « core/src/fxge/ge/fx_ge_font.cpp ('k') | core/src/fxge/ge/fx_ge_linux.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698