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

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

Issue 1060813003: Set m_FontType in CPDF_Font() constructor. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Address comments, also add |override| to destructors. Created 5 years, 8 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/include/fpdfapi/fpdf_resource.h ('k') | core/src/fpdfapi/fpdf_font/fpdf_font_cid.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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 { 106 {
107 FX_POSITION pos = m_pStockMap.GetStartPosition(); 107 FX_POSITION pos = m_pStockMap.GetStartPosition();
108 while (pos) { 108 while (pos) {
109 void* key = NULL; 109 void* key = NULL;
110 void* value = NULL; 110 void* value = NULL;
111 m_pStockMap.GetNextAssoc(pos, key, value); 111 m_pStockMap.GetNextAssoc(pos, key, value);
112 delete static_cast<CFX_StockFontArray*>(value); 112 delete static_cast<CFX_StockFontArray*>(value);
113 m_pStockMap.RemoveKey(key); 113 m_pStockMap.RemoveKey(key);
114 } 114 }
115 } 115 }
116 CPDF_Font::CPDF_Font() 116 CPDF_Font::CPDF_Font(int fonttype) : m_FontType(fonttype)
117 { 117 {
118 m_FontType = 0;
119 m_FontBBox.left = m_FontBBox.right = m_FontBBox.top = m_FontBBox.bottom = 0; 118 m_FontBBox.left = m_FontBBox.right = m_FontBBox.top = m_FontBBox.bottom = 0;
120 m_StemV = m_Ascent = m_Descent = m_ItalicAngle = 0; 119 m_StemV = m_Ascent = m_Descent = m_ItalicAngle = 0;
121 m_pFontFile = NULL; 120 m_pFontFile = NULL;
122 m_Flags = 0; 121 m_Flags = 0;
123 m_pToUnicodeMap = NULL; 122 m_pToUnicodeMap = NULL;
124 m_bToUnicodeLoaded = FALSE; 123 m_bToUnicodeLoaded = FALSE;
125 m_pCharMap = NULL;
126 }
127 FX_BOOL CPDF_Font::Initialize()
128 {
129 m_pCharMap = new CPDF_FontCharMap(this); 124 m_pCharMap = new CPDF_FontCharMap(this);
130 return TRUE;
131 } 125 }
132 CPDF_Font::~CPDF_Font() 126 CPDF_Font::~CPDF_Font()
133 { 127 {
134 delete m_pCharMap; 128 delete m_pCharMap;
135 m_pCharMap = NULL; 129 m_pCharMap = NULL;
136 130
137 delete m_pToUnicodeMap; 131 delete m_pToUnicodeMap;
138 m_pToUnicodeMap = NULL; 132 m_pToUnicodeMap = NULL;
139 133
140 if (m_pFontFile) { 134 if (m_pFontFile) {
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 int count = sizeof(ChineseFontNames) / sizeof(ChineseFontNames[0]); 432 int count = sizeof(ChineseFontNames) / sizeof(ChineseFontNames[0]);
439 for (i = 0; i < count; ++i) { 433 for (i = 0; i < count; ++i) {
440 if (tag == CFX_ByteString((FX_LPCSTR)ChineseFontNames[i])) { 434 if (tag == CFX_ByteString((FX_LPCSTR)ChineseFontNames[i])) {
441 break; 435 break;
442 } 436 }
443 } 437 }
444 if (i < count) { 438 if (i < count) {
445 CPDF_Dictionary* pFontDesc = pFontDict->GetDict(FX_BSTRC("FontDe scriptor")); 439 CPDF_Dictionary* pFontDesc = pFontDict->GetDict(FX_BSTRC("FontDe scriptor"));
446 if (pFontDesc == NULL || !pFontDesc->KeyExist(FX_BSTRC("FontFile 2"))) { 440 if (pFontDesc == NULL || !pFontDesc->KeyExist(FX_BSTRC("FontFile 2"))) {
447 pFont = new CPDF_CIDFont; 441 pFont = new CPDF_CIDFont;
448 pFont->Initialize();
449 pFont->m_FontType = PDFFONT_CIDFONT;
450 pFont->m_pFontDict = pFontDict; 442 pFont->m_pFontDict = pFontDict;
451 pFont->m_pDocument = pDoc; 443 pFont->m_pDocument = pDoc;
452 if (!pFont->Load()) { 444 if (!pFont->Load()) {
453 delete pFont; 445 delete pFont;
454 return NULL; 446 return NULL;
455 } 447 }
456 return pFont; 448 return pFont;
457 } 449 }
458 } 450 }
459 #endif 451 #endif
460 } 452 }
461 pFont = new CPDF_TrueTypeFont; 453 pFont = new CPDF_TrueTypeFont;
462 pFont->Initialize();
463 pFont->m_FontType = PDFFONT_TRUETYPE;
464 } else if (type == FX_BSTRC("Type3")) { 454 } else if (type == FX_BSTRC("Type3")) {
465 pFont = new CPDF_Type3Font; 455 pFont = new CPDF_Type3Font;
466 pFont->Initialize();
467 pFont->m_FontType = PDFFONT_TYPE3;
468 } else if (type == FX_BSTRC("Type0")) { 456 } else if (type == FX_BSTRC("Type0")) {
469 pFont = new CPDF_CIDFont; 457 pFont = new CPDF_CIDFont;
470 pFont->Initialize();
471 pFont->m_FontType = PDFFONT_CIDFONT;
472 } else { 458 } else {
473 pFont = new CPDF_Type1Font; 459 pFont = new CPDF_Type1Font;
474 pFont->Initialize();
475 pFont->m_FontType = PDFFONT_TYPE1;
476 } 460 }
477 pFont->m_pFontDict = pFontDict; 461 pFont->m_pFontDict = pFontDict;
478 pFont->m_pDocument = pDoc; 462 pFont->m_pDocument = pDoc;
479 if (!pFont->Load()) { 463 if (!pFont->Load()) {
480 delete pFont; 464 delete pFont;
481 return NULL; 465 return NULL;
482 } 466 }
483 return pFont; 467 return pFont;
484 } 468 }
485 FX_BOOL CPDF_Font::Load() 469 FX_BOOL CPDF_Font::Load()
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 } 810 }
827 if (m_pFontFile != NULL) { 811 if (m_pFontFile != NULL) {
828 return FALSE; 812 return FALSE;
829 } 813 }
830 if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) { 814 if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) {
831 return FALSE; 815 return FALSE;
832 } 816 }
833 return TRUE; 817 return TRUE;
834 } 818 }
835 extern FX_LPCSTR PDF_CharNameFromPredefinedCharSet(int encoding, FX_BYTE charcod e); 819 extern FX_LPCSTR PDF_CharNameFromPredefinedCharSet(int encoding, FX_BYTE charcod e);
836 CPDF_SimpleFont::CPDF_SimpleFont() 820 CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype)
837 { 821 {
838 FXSYS_memset8(m_CharBBox, 0xff, sizeof m_CharBBox); 822 FXSYS_memset8(m_CharBBox, 0xff, sizeof m_CharBBox);
839 FXSYS_memset8(m_CharWidth, 0xff, sizeof m_CharWidth); 823 FXSYS_memset8(m_CharWidth, 0xff, sizeof m_CharWidth);
840 FXSYS_memset8(m_GlyphIndex, 0xff, sizeof m_GlyphIndex); 824 FXSYS_memset8(m_GlyphIndex, 0xff, sizeof m_GlyphIndex);
841 FXSYS_memset8(m_ExtGID, 0xff, sizeof m_ExtGID); 825 FXSYS_memset8(m_ExtGID, 0xff, sizeof m_ExtGID);
842 m_pCharNames = NULL; 826 m_pCharNames = NULL;
843 m_BaseEncoding = PDFFONT_ENCODING_BUILTIN; 827 m_BaseEncoding = PDFFONT_ENCODING_BUILTIN;
844 } 828 }
845 CPDF_SimpleFont::~CPDF_SimpleFont() 829 CPDF_SimpleFont::~CPDF_SimpleFont()
846 { 830 {
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 width = m_CharWidth[i]; 1008 width = m_CharWidth[i];
1025 } else if (width != m_CharWidth[i]) { 1009 } else if (width != m_CharWidth[i]) {
1026 break; 1010 break;
1027 } 1011 }
1028 } 1012 }
1029 if (i == 256 && width) { 1013 if (i == 256 && width) {
1030 m_Flags |= PDFFONT_FIXEDPITCH; 1014 m_Flags |= PDFFONT_FIXEDPITCH;
1031 } 1015 }
1032 } 1016 }
1033 int weight = m_StemV < 140 ? m_StemV * 5 : (m_StemV * 4 + 140); 1017 int weight = m_StemV < 140 ? m_StemV * 5 : (m_StemV * 4 + 140);
1034 m_Font.LoadSubst(m_BaseFont, m_FontType == PDFFONT_TRUETYPE, m_Flags, weight , m_ItalicAngle, 0); 1018 m_Font.LoadSubst(m_BaseFont, IsFontType(PDFFONT_TRUETYPE), m_Flags, weight, m_ItalicAngle, 0);
1035 if (m_Font.m_pSubstFont->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) { 1019 if (m_Font.m_pSubstFont->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) {
1036 } 1020 }
1037 } 1021 }
1038 FX_BOOL CPDF_SimpleFont::IsUnicodeCompatible() const 1022 FX_BOOL CPDF_SimpleFont::IsUnicodeCompatible() const
1039 { 1023 {
1040 return m_BaseEncoding != PDFFONT_ENCODING_BUILTIN && m_BaseEncoding != PDFFO NT_ENCODING_ADOBE_SYMBOL && 1024 return m_BaseEncoding != PDFFONT_ENCODING_BUILTIN && m_BaseEncoding != PDFFO NT_ENCODING_ADOBE_SYMBOL &&
1041 m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS; 1025 m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS;
1042 } 1026 }
1043 CPDF_Type1Font::CPDF_Type1Font() 1027 CPDF_Type1Font::CPDF_Type1Font() : CPDF_SimpleFont(PDFFONT_TYPE1)
1044 { 1028 {
1045 m_Base14Font = -1; 1029 m_Base14Font = -1;
1046 } 1030 }
1047 FX_BOOL CPDF_Type1Font::_Load() 1031 FX_BOOL CPDF_Type1Font::_Load()
1048 { 1032 {
1049 m_Base14Font = _PDF_GetStandardFontName(m_BaseFont); 1033 m_Base14Font = _PDF_GetStandardFontName(m_BaseFont);
1050 if (m_Base14Font >= 0) { 1034 if (m_Base14Font >= 0) {
1051 CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescript or")); 1035 CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescript or"));
1052 if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("Flags"))) { 1036 if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("Flags"))) {
1053 m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags")); 1037 m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"));
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 for (int i = 0; i < 256; i ++) { 1409 for (int i = 0; i < 256; i ++) {
1426 if (pStandard[i] == m_Unicodes[i]) { 1410 if (pStandard[i] == m_Unicodes[i]) {
1427 continue; 1411 continue;
1428 } 1412 }
1429 pDiff->Add(CPDF_Number::Create(i)); 1413 pDiff->Add(CPDF_Number::Create(i));
1430 pDiff->Add(CPDF_Name::Create(PDF_AdobeNameFromUnicode(m_Unicodes[i]))); 1414 pDiff->Add(CPDF_Name::Create(PDF_AdobeNameFromUnicode(m_Unicodes[i])));
1431 } 1415 }
1432 pDict->SetAt(FX_BSTRC("Differences"), pDiff); 1416 pDict->SetAt(FX_BSTRC("Differences"), pDiff);
1433 return pDict; 1417 return pDict;
1434 } 1418 }
1435 CPDF_TrueTypeFont::CPDF_TrueTypeFont() 1419 CPDF_TrueTypeFont::CPDF_TrueTypeFont() : CPDF_SimpleFont(PDFFONT_TRUETYPE)
1436 { 1420 {
1437 } 1421 }
1438 FX_BOOL CPDF_TrueTypeFont::_Load() 1422 FX_BOOL CPDF_TrueTypeFont::_Load()
1439 { 1423 {
1440 return LoadCommon(); 1424 return LoadCommon();
1441 } 1425 }
1442 extern FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode); 1426 extern FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode);
1443 void CPDF_TrueTypeFont::LoadGlyphMap() 1427 void CPDF_TrueTypeFont::LoadGlyphMap()
1444 { 1428 {
1445 if (m_Font.m_Face == NULL) { 1429 if (m_Font.m_Face == NULL) {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1607 } 1591 }
1608 } 1592 }
1609 if (bGotOne) { 1593 if (bGotOne) {
1610 return; 1594 return;
1611 } 1595 }
1612 } 1596 }
1613 for (int charcode = 0; charcode < 256; charcode ++) { 1597 for (int charcode = 0; charcode < 256; charcode ++) {
1614 m_GlyphIndex[charcode] = charcode; 1598 m_GlyphIndex[charcode] = charcode;
1615 } 1599 }
1616 } 1600 }
1617 CPDF_Type3Font::CPDF_Type3Font() 1601 CPDF_Type3Font::CPDF_Type3Font() : CPDF_SimpleFont(PDFFONT_TYPE3)
1618 { 1602 {
1619 m_pPageResources = NULL; 1603 m_pPageResources = NULL;
1620 FXSYS_memset32(m_CharWidthL, 0, sizeof m_CharWidthL); 1604 FXSYS_memset32(m_CharWidthL, 0, sizeof m_CharWidthL);
1621 } 1605 }
1622 CPDF_Type3Font::~CPDF_Type3Font() 1606 CPDF_Type3Font::~CPDF_Type3Font()
1623 { 1607 {
1624 FX_POSITION pos = m_CacheMap.GetStartPosition(); 1608 FX_POSITION pos = m_CacheMap.GetStartPosition();
1625 while (pos) { 1609 while (pos) {
1626 FX_LPVOID key, value; 1610 FX_LPVOID key, value;
1627 m_CacheMap.GetNextAssoc(pos, key, value); 1611 m_CacheMap.GetNextAssoc(pos, key, value);
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1762 } 1746 }
1763 CPDF_Type3Char::~CPDF_Type3Char() 1747 CPDF_Type3Char::~CPDF_Type3Char()
1764 { 1748 {
1765 if (m_pForm) { 1749 if (m_pForm) {
1766 delete m_pForm; 1750 delete m_pForm;
1767 } 1751 }
1768 if (m_pBitmap) { 1752 if (m_pBitmap) {
1769 delete m_pBitmap; 1753 delete m_pBitmap;
1770 } 1754 }
1771 } 1755 }
OLDNEW
« no previous file with comments | « core/include/fpdfapi/fpdf_resource.h ('k') | core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698