| OLD | NEW |
| 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 "../../../include/fxge/fx_ge.h" | 7 #include "../../../include/fxge/fx_ge.h" |
| 8 #include "../../../include/fxge/fx_freetype.h" | 8 #include "../../../include/fxge/fx_freetype.h" |
| 9 #include "text_int.h" | 9 #include "text_int.h" |
| 10 #define EM_ADJUST(em, a) (em == 0?(a): (a)*1000/em) | 10 #define EM_ADJUST(em, a) (em == 0?(a): (a)*1000/em) |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 } | 338 } |
| 339 return psName; | 339 return psName; |
| 340 } | 340 } |
| 341 CFX_ByteString CFX_Font::GetFamilyName() const | 341 CFX_ByteString CFX_Font::GetFamilyName() const |
| 342 { | 342 { |
| 343 if (m_Face == NULL && m_pSubstFont == NULL) { | 343 if (m_Face == NULL && m_pSubstFont == NULL) { |
| 344 return CFX_ByteString(); | 344 return CFX_ByteString(); |
| 345 } | 345 } |
| 346 if (m_Face) { | 346 if (m_Face) { |
| 347 return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face)); | 347 return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face)); |
| 348 } else { | |
| 349 return m_pSubstFont->m_Family; | |
| 350 } | 348 } |
| 349 return m_pSubstFont->m_Family; |
| 351 } | 350 } |
| 352 CFX_ByteString CFX_Font::GetFaceName() const | 351 CFX_ByteString CFX_Font::GetFaceName() const |
| 353 { | 352 { |
| 354 if (m_Face == NULL && m_pSubstFont == NULL) { | 353 if (m_Face == NULL && m_pSubstFont == NULL) { |
| 355 return CFX_ByteString(); | 354 return CFX_ByteString(); |
| 356 } | 355 } |
| 357 if (m_Face) { | 356 if (m_Face) { |
| 358 CFX_ByteString facename; | 357 CFX_ByteString facename; |
| 359 CFX_ByteString style = CFX_ByteString(FXFT_Get_Face_Style_Name(m_Face)); | 358 CFX_ByteString style = CFX_ByteString(FXFT_Get_Face_Style_Name(m_Face)); |
| 360 facename = GetFamilyName(); | 359 facename = GetFamilyName(); |
| 361 if (facename.IsEmpty()) { | 360 if (facename.IsEmpty()) { |
| 362 facename = "Untitled"; | 361 facename = "Untitled"; |
| 363 } | 362 } |
| 364 if (!style.IsEmpty() && style != "Regular") { | 363 if (!style.IsEmpty() && style != "Regular") { |
| 365 facename += " " + style; | 364 facename += " " + style; |
| 366 } | 365 } |
| 367 return facename; | 366 return facename; |
| 368 } else { | |
| 369 return m_pSubstFont->m_Family; | |
| 370 } | 367 } |
| 368 return m_pSubstFont->m_Family; |
| 371 } | 369 } |
| 372 FX_BOOL CFX_Font::GetBBox(FX_RECT &bbox) | 370 FX_BOOL CFX_Font::GetBBox(FX_RECT &bbox) |
| 373 { | 371 { |
| 374 if (m_Face == NULL) { | 372 if (m_Face == NULL) { |
| 375 return FALSE; | 373 return FALSE; |
| 376 } | 374 } |
| 377 int em = FXFT_Get_Face_UnitsPerEM(m_Face); | 375 int em = FXFT_Get_Face_UnitsPerEM(m_Face); |
| 378 if (em == 0) { | 376 if (em == 0) { |
| 379 bbox.left = FXFT_Get_Face_xMin(m_Face); | 377 bbox.left = FXFT_Get_Face_xMin(m_Face); |
| 380 bbox.bottom = FXFT_Get_Face_yMax(m_Face); | 378 bbox.bottom = FXFT_Get_Face_yMax(m_Face); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 index = FXFT_Get_Char_Index(face, charcode); | 437 index = FXFT_Get_Char_Index(face, charcode); |
| 440 } | 438 } |
| 441 if (!index && !FXFT_Select_Charmap(face, FXFT_ENCODING_APPLE_ROMAN)) { | 439 if (!index && !FXFT_Select_Charmap(face, FXFT_ENCODING_APPLE_ROMAN)) { |
| 442 return FXFT_Get_Char_Index(face, charcode); | 440 return FXFT_Get_Char_Index(face, charcode); |
| 443 } | 441 } |
| 444 } | 442 } |
| 445 return charcode; | 443 return charcode; |
| 446 } | 444 } |
| 447 FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCodeEx(FX_DWORD charcode, int encodin
g) | 445 FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCodeEx(FX_DWORD charcode, int encodin
g) |
| 448 { | 446 { |
| 449 FXFT_Face face = m_pFont->GetFace(); | 447 FXFT_Face face = m_pFont->GetFace(); |
| 450 if (!face) { | 448 if (!face) { |
| 451 return charcode; | 449 return charcode; |
| 452 } | 450 } |
| 453 if (encoding == ENCODING_UNICODE) { | 451 if (encoding == ENCODING_UNICODE) { |
| 454 return» GlyphFromCharCode(charcode); | 452 return GlyphFromCharCode(charcode); |
| 455 } else { | 453 } |
| 456 int nmaps = FXFT_Get_Face_CharmapCount(m_pFont->m_Face); | 454 int nmaps = FXFT_Get_Face_CharmapCount(m_pFont->m_Face); |
| 457 int i = 0; | 455 int i = 0; |
| 458 while (i < nmaps) { | 456 while (i < nmaps) { |
| 459 int encoding = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face
)[i++]); | 457 int encoding = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[i+
+]); |
| 460 if (encoding != FXFT_ENCODING_UNICODE) { | 458 if (encoding != FXFT_ENCODING_UNICODE) { |
| 461 FXFT_Select_Charmap(face, encoding); | 459 FXFT_Select_Charmap(face, encoding); |
| 462 break; | 460 break; |
| 463 } | |
| 464 } | 461 } |
| 465 } | 462 } |
| 466 return FXFT_Get_Char_Index(face, charcode); | 463 return FXFT_Get_Char_Index(face, charcode); |
| 467 } | 464 } |
| 468 IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont) | 465 IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont) |
| 469 { | 466 { |
| 470 CFX_UnicodeEncoding* pEncoding = NULL; | 467 CFX_UnicodeEncoding* pEncoding = NULL; |
| 471 pEncoding = FX_NEW CFX_UnicodeEncoding(pFont); | 468 pEncoding = FX_NEW CFX_UnicodeEncoding(pFont); |
| 472 return pEncoding; | 469 return pEncoding; |
| 473 } | 470 } |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 629 } | 626 } |
| 630 static int s_count = sizeof(gs_EncodingID) / sizeof(FX_DWORD); | 627 static int s_count = sizeof(gs_EncodingID) / sizeof(FX_DWORD); |
| 631 for (int i = 0; i < s_count; i++) { | 628 for (int i = 0; i < s_count; i++) { |
| 632 IFX_FontEncodingEx* pFontEncoding = _FXFM_CreateFontEncoding(pFont, gs_E
ncodingID[i]); | 629 IFX_FontEncodingEx* pFontEncoding = _FXFM_CreateFontEncoding(pFont, gs_E
ncodingID[i]); |
| 633 if (pFontEncoding) { | 630 if (pFontEncoding) { |
| 634 return pFontEncoding; | 631 return pFontEncoding; |
| 635 } | 632 } |
| 636 } | 633 } |
| 637 return NULL; | 634 return NULL; |
| 638 } | 635 } |
| OLD | NEW |