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

Side by Side Diff: core/src/fpdfapi/fpdf_font/fpdf_font.cpp

Issue 1172793002: Merge to XFA: Use stdint.h types throughout PDFium. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: 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/fpdfapi/fpdf_font/font_int.h ('k') | core/src/fpdfapi/fpdf_font/fpdf_font_charset.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 "../../../include/fpdfapi/fpdf_page.h" 7 #include "../../../include/fpdfapi/fpdf_page.h"
8 #include "../../../include/fpdfapi/fpdf_module.h" 8 #include "../../../include/fpdfapi/fpdf_module.h"
9 #include "../../../include/fpdfapi/fpdf_pageobj.h" 9 #include "../../../include/fpdfapi/fpdf_pageobj.h"
10 #include "font_int.h" 10 #include "font_int.h"
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 405 }
406 CPDF_Dictionary* pDict = CPDF_Dictionary::Create(); 406 CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
407 pDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Font")); 407 pDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Font"));
408 pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Type1")); 408 pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Type1"));
409 pDict->SetAtName(FX_BSTRC("BaseFont"), fontname); 409 pDict->SetAtName(FX_BSTRC("BaseFont"), fontname);
410 pDict->SetAtName(FX_BSTRC("Encoding"), FX_BSTRC("WinAnsiEncoding")); 410 pDict->SetAtName(FX_BSTRC("Encoding"), FX_BSTRC("WinAnsiEncoding"));
411 pFont = CPDF_Font::CreateFontF(NULL, pDict); 411 pFont = CPDF_Font::CreateFontF(NULL, pDict);
412 pFontGlobals->Set(pDoc, font_id, pFont); 412 pFontGlobals->Set(pDoc, font_id, pFont);
413 return pFont; 413 return pFont;
414 } 414 }
415 const FX_BYTE ChineseFontNames[][5] = { 415 const uint8_t ChineseFontNames[][5] = {
416 {0xCB, 0xCE, 0xCC, 0xE5, 0x00}, 416 {0xCB, 0xCE, 0xCC, 0xE5, 0x00},
417 {0xBF, 0xAC, 0xCC, 0xE5, 0x00}, 417 {0xBF, 0xAC, 0xCC, 0xE5, 0x00},
418 {0xBA, 0xDA, 0xCC, 0xE5, 0x00}, 418 {0xBA, 0xDA, 0xCC, 0xE5, 0x00},
419 {0xB7, 0xC2, 0xCB, 0xCE, 0x00}, 419 {0xB7, 0xC2, 0xCB, 0xCE, 0x00},
420 {0xD0, 0xC2, 0xCB, 0xCE, 0x00} 420 {0xD0, 0xC2, 0xCB, 0xCE, 0x00}
421 }; 421 };
422 CPDF_Font* CPDF_Font::CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDic t) 422 CPDF_Font* CPDF_Font::CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDic t)
423 { 423 {
424 CFX_ByteString type = pFontDict->GetString(FX_BSTRC("Subtype")); 424 CFX_ByteString type = pFontDict->GetString(FX_BSTRC("Subtype"));
425 CPDF_Font* pFont; 425 CPDF_Font* pFont;
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 return FALSE; 809 return FALSE;
810 } 810 }
811 if (m_pFontFile != NULL) { 811 if (m_pFontFile != NULL) {
812 return FALSE; 812 return FALSE;
813 } 813 }
814 if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) { 814 if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) {
815 return FALSE; 815 return FALSE;
816 } 816 }
817 return TRUE; 817 return TRUE;
818 } 818 }
819 extern FX_LPCSTR PDF_CharNameFromPredefinedCharSet(int encoding, FX_BYTE charcod e); 819 extern FX_LPCSTR PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t charcod e);
820 CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype) 820 CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype)
821 { 821 {
822 FXSYS_memset8(m_CharBBox, 0xff, sizeof m_CharBBox); 822 FXSYS_memset8(m_CharBBox, 0xff, sizeof m_CharBBox);
823 FXSYS_memset8(m_CharWidth, 0xff, sizeof m_CharWidth); 823 FXSYS_memset8(m_CharWidth, 0xff, sizeof m_CharWidth);
824 FXSYS_memset8(m_GlyphIndex, 0xff, sizeof m_GlyphIndex); 824 FXSYS_memset8(m_GlyphIndex, 0xff, sizeof m_GlyphIndex);
825 FXSYS_memset8(m_ExtGID, 0xff, sizeof m_ExtGID); 825 FXSYS_memset8(m_ExtGID, 0xff, sizeof m_ExtGID);
826 m_pCharNames = NULL; 826 m_pCharNames = NULL;
827 m_BaseEncoding = PDFFONT_ENCODING_BUILTIN; 827 m_BaseEncoding = PDFFONT_ENCODING_BUILTIN;
828 } 828 }
829 CPDF_SimpleFont::~CPDF_SimpleFont() 829 CPDF_SimpleFont::~CPDF_SimpleFont()
830 { 830 {
831 delete[] m_pCharNames; 831 delete[] m_pCharNames;
832 } 832 }
833 int CPDF_SimpleFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph) 833 int CPDF_SimpleFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph)
834 { 834 {
835 if (pVertGlyph) { 835 if (pVertGlyph) {
836 *pVertGlyph = FALSE; 836 *pVertGlyph = FALSE;
837 } 837 }
838 if (charcode > 0xff) { 838 if (charcode > 0xff) {
839 return -1; 839 return -1;
840 } 840 }
841 int index = m_GlyphIndex[(FX_BYTE)charcode]; 841 int index = m_GlyphIndex[(uint8_t)charcode];
842 if (index == 0xffff) { 842 if (index == 0xffff) {
843 return -1; 843 return -1;
844 } 844 }
845 return index; 845 return index;
846 } 846 }
847 void CPDF_SimpleFont::LoadCharMetrics(int charcode) 847 void CPDF_SimpleFont::LoadCharMetrics(int charcode)
848 { 848 {
849 if (m_Font.m_Face == NULL) { 849 if (m_Font.m_Face == NULL) {
850 return; 850 return;
851 } 851 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 { 885 {
886 if (charcode > 0xff) { 886 if (charcode > 0xff) {
887 charcode = 0; 887 charcode = 0;
888 } 888 }
889 if (m_CharWidth[charcode] == 0xffff) { 889 if (m_CharWidth[charcode] == 0xffff) {
890 LoadCharMetrics(charcode); 890 LoadCharMetrics(charcode);
891 if (m_CharWidth[charcode] == 0xffff) { 891 if (m_CharWidth[charcode] == 0xffff) {
892 m_CharWidth[charcode] = 0; 892 m_CharWidth[charcode] = 0;
893 } 893 }
894 } 894 }
895 return (FX_INT16)m_CharWidth[charcode]; 895 return (int16_t)m_CharWidth[charcode];
896 } 896 }
897 void CPDF_SimpleFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) 897 void CPDF_SimpleFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level)
898 { 898 {
899 if (charcode > 0xff) { 899 if (charcode > 0xff) {
900 charcode = 0; 900 charcode = 0;
901 } 901 }
902 if (m_CharBBox[charcode].Left == (FX_SHORT)0xffff) { 902 if (m_CharBBox[charcode].Left == (int16_t)0xffff) {
903 LoadCharMetrics(charcode); 903 LoadCharMetrics(charcode);
904 } 904 }
905 rect.left = m_CharBBox[charcode].Left; 905 rect.left = m_CharBBox[charcode].Left;
906 rect.right = m_CharBBox[charcode].Right; 906 rect.right = m_CharBBox[charcode].Right;
907 rect.bottom = m_CharBBox[charcode].Bottom; 907 rect.bottom = m_CharBBox[charcode].Bottom;
908 rect.top = m_CharBBox[charcode].Top; 908 rect.top = m_CharBBox[charcode].Top;
909 } 909 }
910 FX_LPCSTR GetAdobeCharName(int iBaseEncoding, const CFX_ByteString* pCharNames, int charcode) 910 FX_LPCSTR GetAdobeCharName(int iBaseEncoding, const CFX_ByteString* pCharNames, int charcode)
911 { 911 {
912 ASSERT(charcode >= 0 && charcode < 256); 912 ASSERT(charcode >= 0 && charcode < 256);
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1066 } 1066 }
1067 extern FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode); 1067 extern FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode);
1068 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 1068 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
1069 #include "../../fxge/apple/apple_int.h" 1069 #include "../../fxge/apple/apple_int.h"
1070 #endif 1070 #endif
1071 int CPDF_Type1Font::GlyphFromCharCodeExt(FX_DWORD charcode) 1071 int CPDF_Type1Font::GlyphFromCharCodeExt(FX_DWORD charcode)
1072 { 1072 {
1073 if (charcode > 0xff) { 1073 if (charcode > 0xff) {
1074 return -1; 1074 return -1;
1075 } 1075 }
1076 int index = m_ExtGID[(FX_BYTE)charcode]; 1076 int index = m_ExtGID[(uint8_t)charcode];
1077 if (index == 0xffff) { 1077 if (index == 0xffff) {
1078 return -1; 1078 return -1;
1079 } 1079 }
1080 return index; 1080 return index;
1081 } 1081 }
1082 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 1082 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
1083 struct _GlyphNameMap { 1083 struct _GlyphNameMap {
1084 FX_LPCSTR m_pStrAdobe; 1084 FX_LPCSTR m_pStrAdobe;
1085 FX_LPCSTR m_pStrUnicode; 1085 FX_LPCSTR m_pStrUnicode;
1086 }; 1086 };
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 m_Font.m_pPlatformFont = quartz2d.CreateFont(m_Font.m_pFontData, m_Font. m_dwSize); 1123 m_Font.m_pPlatformFont = quartz2d.CreateFont(m_Font.m_pFontData, m_Font. m_dwSize);
1124 if (NULL == m_Font.m_pPlatformFont) { 1124 if (NULL == m_Font.m_pPlatformFont) {
1125 bCoreText = FALSE; 1125 bCoreText = FALSE;
1126 } 1126 }
1127 } 1127 }
1128 #endif 1128 #endif
1129 if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) { 1129 if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) {
1130 if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) { 1130 if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
1131 FX_BOOL bGotOne = FALSE; 1131 FX_BOOL bGotOne = FALSE;
1132 for (int charcode = 0; charcode < 256; charcode ++) { 1132 for (int charcode = 0; charcode < 256; charcode ++) {
1133 const FX_BYTE prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; 1133 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
1134 for (int j = 0; j < 4; j ++) { 1134 for (int j = 0; j < 4; j ++) {
1135 FX_WORD unicode = prefix[j] * 256 + charcode; 1135 FX_WORD unicode = prefix[j] * 256 + charcode;
1136 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode); 1136 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
1137 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 1137 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
1138 FX_CHAR name_glyph[256]; 1138 FX_CHAR name_glyph[256];
1139 FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], n ame_glyph, 256); 1139 FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], n ame_glyph, 256);
1140 name_glyph[255] = 0; 1140 name_glyph[255] = 0;
1141 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAll ocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull); 1141 CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAll ocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull);
1142 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef) m_Font.m_pPlatformFont, name_ct); 1142 m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef) m_Font.m_pPlatformFont, name_ct);
1143 if (name_ct) { 1143 if (name_ct) {
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
1475 } 1475 }
1476 FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode")); 1476 FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode"));
1477 for (int charcode = 0; charcode < 256; charcode ++) { 1477 for (int charcode = 0; charcode < 256; charcode ++) {
1478 FX_LPCSTR name = GetAdobeCharName(baseEncoding, m_pCharNames, charco de); 1478 FX_LPCSTR name = GetAdobeCharName(baseEncoding, m_pCharNames, charco de);
1479 if (name == NULL) { 1479 if (name == NULL) {
1480 m_GlyphIndex[charcode] = m_pFontFile ? FXFT_Get_Char_Index(m_Fon t.m_Face, charcode) : -1; 1480 m_GlyphIndex[charcode] = m_pFontFile ? FXFT_Get_Char_Index(m_Fon t.m_Face, charcode) : -1;
1481 continue; 1481 continue;
1482 } 1482 }
1483 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name); 1483 m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
1484 if (bMSSymbol) { 1484 if (bMSSymbol) {
1485 const FX_BYTE prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; 1485 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
1486 for (int j = 0; j < 4; j ++) { 1486 for (int j = 0; j < 4; j ++) {
1487 FX_WORD unicode = prefix[j] * 256 + charcode; 1487 FX_WORD unicode = prefix[j] * 256 + charcode;
1488 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode); 1488 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
1489 if (m_GlyphIndex[charcode]) { 1489 if (m_GlyphIndex[charcode]) {
1490 break; 1490 break;
1491 } 1491 }
1492 } 1492 }
1493 } else if (m_Encoding.m_Unicodes[charcode]) { 1493 } else if (m_Encoding.m_Unicodes[charcode]) {
1494 if (bMSUnicode) { 1494 if (bMSUnicode) {
1495 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]); 1495 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
(...skipping 22 matching lines...) Expand all
1518 if (m_GlyphIndex[charcode] == 0) { 1518 if (m_GlyphIndex[charcode] == 0) {
1519 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font. m_Face, charcode); 1519 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font. m_Face, charcode);
1520 } 1520 }
1521 } 1521 }
1522 } 1522 }
1523 } 1523 }
1524 } 1524 }
1525 return; 1525 return;
1526 } 1526 }
1527 if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) { 1527 if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
1528 const FX_BYTE prefix[4] = {0x00, 0xf0, 0xf1, 0xf2}; 1528 const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
1529 FX_BOOL bGotOne = FALSE; 1529 FX_BOOL bGotOne = FALSE;
1530 for (int charcode = 0; charcode < 256; charcode ++) { 1530 for (int charcode = 0; charcode < 256; charcode ++) {
1531 for (int j = 0; j < 4; j ++) { 1531 for (int j = 0; j < 4; j ++) {
1532 FX_WORD unicode = prefix[j] * 256 + charcode; 1532 FX_WORD unicode = prefix[j] * 256 + charcode;
1533 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unic ode); 1533 m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unic ode);
1534 if (m_GlyphIndex[charcode]) { 1534 if (m_GlyphIndex[charcode]) {
1535 bGotOne = TRUE; 1535 bGotOne = TRUE;
1536 break; 1536 break;
1537 } 1537 }
1538 } 1538 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1620 m_pFontResources = m_pFontDict->GetDict(FX_BSTRC("Resources")); 1620 m_pFontResources = m_pFontDict->GetDict(FX_BSTRC("Resources"));
1621 CPDF_Array* pMatrix = m_pFontDict->GetArray(FX_BSTRC("FontMatrix")); 1621 CPDF_Array* pMatrix = m_pFontDict->GetArray(FX_BSTRC("FontMatrix"));
1622 FX_FLOAT xscale = 1.0f, yscale = 1.0f; 1622 FX_FLOAT xscale = 1.0f, yscale = 1.0f;
1623 if (pMatrix) { 1623 if (pMatrix) {
1624 m_FontMatrix = pMatrix->GetMatrix(); 1624 m_FontMatrix = pMatrix->GetMatrix();
1625 xscale = m_FontMatrix.a; 1625 xscale = m_FontMatrix.a;
1626 yscale = m_FontMatrix.d; 1626 yscale = m_FontMatrix.d;
1627 } 1627 }
1628 CPDF_Array* pBBox = m_pFontDict->GetArray(FX_BSTRC("FontBBox")); 1628 CPDF_Array* pBBox = m_pFontDict->GetArray(FX_BSTRC("FontBBox"));
1629 if (pBBox) { 1629 if (pBBox) {
1630 m_FontBBox.left = (FX_INT32)(FXSYS_Mul(pBBox->GetNumber(0), xscale) * 10 00); 1630 m_FontBBox.left = (int32_t)(FXSYS_Mul(pBBox->GetNumber(0), xscale) * 100 0);
1631 m_FontBBox.bottom = (FX_INT32)(FXSYS_Mul(pBBox->GetNumber(1), yscale) * 1000); 1631 m_FontBBox.bottom = (int32_t)(FXSYS_Mul(pBBox->GetNumber(1), yscale) * 1 000);
1632 m_FontBBox.right = (FX_INT32)(FXSYS_Mul(pBBox->GetNumber(2), xscale) * 1 000); 1632 m_FontBBox.right = (int32_t)(FXSYS_Mul(pBBox->GetNumber(2), xscale) * 10 00);
1633 m_FontBBox.top = (FX_INT32)(FXSYS_Mul(pBBox->GetNumber(3), yscale) * 100 0); 1633 m_FontBBox.top = (int32_t)(FXSYS_Mul(pBBox->GetNumber(3), yscale) * 1000 );
1634 } 1634 }
1635 int StartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar")); 1635 int StartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"));
1636 CPDF_Array* pWidthArray = m_pFontDict->GetArray(FX_BSTRC("Widths")); 1636 CPDF_Array* pWidthArray = m_pFontDict->GetArray(FX_BSTRC("Widths"));
1637 if (pWidthArray && (StartChar >= 0 && StartChar < 256)) { 1637 if (pWidthArray && (StartChar >= 0 && StartChar < 256)) {
1638 FX_DWORD count = pWidthArray->GetCount(); 1638 FX_DWORD count = pWidthArray->GetCount();
1639 if (count > 256) { 1639 if (count > 256) {
1640 count = 256; 1640 count = 256;
1641 } 1641 }
1642 if (StartChar + count > 256) { 1642 if (StartChar + count > 256) {
1643 count = 256 - StartChar; 1643 count = 256 - StartChar;
(...skipping 20 matching lines...) Expand all
1664 void CPDF_Type3Font::CheckType3FontMetrics() 1664 void CPDF_Type3Font::CheckType3FontMetrics()
1665 { 1665 {
1666 CheckFontMetrics(); 1666 CheckFontMetrics();
1667 } 1667 }
1668 CPDF_Type3Char* CPDF_Type3Font::LoadChar(FX_DWORD charcode, int level) 1668 CPDF_Type3Char* CPDF_Type3Font::LoadChar(FX_DWORD charcode, int level)
1669 { 1669 {
1670 if (level >= _FPDF_MAX_TYPE3_FORM_LEVEL_) { 1670 if (level >= _FPDF_MAX_TYPE3_FORM_LEVEL_) {
1671 return NULL; 1671 return NULL;
1672 } 1672 }
1673 CPDF_Type3Char* pChar = NULL; 1673 CPDF_Type3Char* pChar = NULL;
1674 if (m_CacheMap.Lookup((FX_LPVOID)(FX_UINTPTR)charcode, (FX_LPVOID&)pChar)) { 1674 if (m_CacheMap.Lookup((FX_LPVOID)(uintptr_t)charcode, (FX_LPVOID&)pChar)) {
1675 if (pChar->m_bPageRequired && m_pPageResources) { 1675 if (pChar->m_bPageRequired && m_pPageResources) {
1676 delete pChar; 1676 delete pChar;
1677 m_CacheMap.RemoveKey((FX_LPVOID)(FX_UINTPTR)charcode); 1677 m_CacheMap.RemoveKey((FX_LPVOID)(uintptr_t)charcode);
1678 return LoadChar(charcode, level + 1); 1678 return LoadChar(charcode, level + 1);
1679 } 1679 }
1680 return pChar; 1680 return pChar;
1681 } 1681 }
1682 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); 1682 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
1683 if (name == NULL) { 1683 if (name == NULL) {
1684 return NULL; 1684 return NULL;
1685 } 1685 }
1686 CPDF_Stream* pStream = (CPDF_Stream*)(m_pCharProcs ? m_pCharProcs->GetElemen tValue(name) : NULL); 1686 CPDF_Stream* pStream = (CPDF_Stream*)(m_pCharProcs ? m_pCharProcs->GetElemen tValue(name) : NULL);
1687 if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) { 1687 if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) {
1688 return NULL; 1688 return NULL;
1689 } 1689 }
1690 pChar = new CPDF_Type3Char; 1690 pChar = new CPDF_Type3Char;
1691 pChar->m_pForm = new CPDF_Form(m_pDocument, m_pFontResources ? m_pFontResour ces : m_pPageResources, pStream, NULL); 1691 pChar->m_pForm = new CPDF_Form(m_pDocument, m_pFontResources ? m_pFontResour ces : m_pPageResources, pStream, NULL);
1692 pChar->m_pForm->ParseContent(NULL, NULL, pChar, NULL, level + 1); 1692 pChar->m_pForm->ParseContent(NULL, NULL, pChar, NULL, level + 1);
1693 FX_FLOAT scale = m_FontMatrix.GetXUnit(); 1693 FX_FLOAT scale = m_FontMatrix.GetXUnit();
1694 pChar->m_Width = (FX_INT32)(pChar->m_Width * scale + 0.5f); 1694 pChar->m_Width = (int32_t)(pChar->m_Width * scale + 0.5f);
1695 FX_RECT &rcBBox = pChar->m_BBox; 1695 FX_RECT &rcBBox = pChar->m_BBox;
1696 CFX_FloatRect char_rect((FX_FLOAT)rcBBox.left / 1000.0f, (FX_FLOAT)rcBBox.bo ttom / 1000.0f, 1696 CFX_FloatRect char_rect((FX_FLOAT)rcBBox.left / 1000.0f, (FX_FLOAT)rcBBox.bo ttom / 1000.0f,
1697 (FX_FLOAT)rcBBox.right / 1000.0f, (FX_FLOAT)rcBBox.t op / 1000.0f); 1697 (FX_FLOAT)rcBBox.right / 1000.0f, (FX_FLOAT)rcBBox.t op / 1000.0f);
1698 if (rcBBox.right <= rcBBox.left || rcBBox.bottom >= rcBBox.top) { 1698 if (rcBBox.right <= rcBBox.left || rcBBox.bottom >= rcBBox.top) {
1699 char_rect = pChar->m_pForm->CalcBoundingBox(); 1699 char_rect = pChar->m_pForm->CalcBoundingBox();
1700 } 1700 }
1701 char_rect.Transform(&m_FontMatrix); 1701 char_rect.Transform(&m_FontMatrix);
1702 rcBBox.left = FXSYS_round(char_rect.left * 1000); 1702 rcBBox.left = FXSYS_round(char_rect.left * 1000);
1703 rcBBox.right = FXSYS_round(char_rect.right * 1000); 1703 rcBBox.right = FXSYS_round(char_rect.right * 1000);
1704 rcBBox.top = FXSYS_round(char_rect.top * 1000); 1704 rcBBox.top = FXSYS_round(char_rect.top * 1000);
1705 rcBBox.bottom = FXSYS_round(char_rect.bottom * 1000); 1705 rcBBox.bottom = FXSYS_round(char_rect.bottom * 1000);
1706 m_CacheMap.SetAt((FX_LPVOID)(FX_UINTPTR)charcode, pChar); 1706 m_CacheMap.SetAt((FX_LPVOID)(uintptr_t)charcode, pChar);
1707 if (pChar->m_pForm->CountObjects() == 0) { 1707 if (pChar->m_pForm->CountObjects() == 0) {
1708 delete pChar->m_pForm; 1708 delete pChar->m_pForm;
1709 pChar->m_pForm = NULL; 1709 pChar->m_pForm = NULL;
1710 } 1710 }
1711 return pChar; 1711 return pChar;
1712 } 1712 }
1713 int CPDF_Type3Font::GetCharWidthF(FX_DWORD charcode, int level) 1713 int CPDF_Type3Font::GetCharWidthF(FX_DWORD charcode, int level)
1714 { 1714 {
1715 if (charcode > 0xff) { 1715 if (charcode > 0xff) {
1716 charcode = 0; 1716 charcode = 0;
(...skipping 25 matching lines...) Expand all
1742 } 1742 }
1743 CPDF_Type3Char::~CPDF_Type3Char() 1743 CPDF_Type3Char::~CPDF_Type3Char()
1744 { 1744 {
1745 if (m_pForm) { 1745 if (m_pForm) {
1746 delete m_pForm; 1746 delete m_pForm;
1747 } 1747 }
1748 if (m_pBitmap) { 1748 if (m_pBitmap) {
1749 delete m_pBitmap; 1749 delete m_pBitmap;
1750 } 1750 }
1751 } 1751 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_font/font_int.h ('k') | core/src/fpdfapi/fpdf_font/fpdf_font_charset.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698