| 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/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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 void CPDF_FontGlobals::Clear(void* key) | 71 void CPDF_FontGlobals::Clear(void* key) |
| 72 { | 72 { |
| 73 void* value = NULL; | 73 void* value = NULL; |
| 74 if (!m_pStockMap.Lookup(key, value)) { | 74 if (!m_pStockMap.Lookup(key, value)) { |
| 75 return; | 75 return; |
| 76 } | 76 } |
| 77 if (value) { | 77 if (value) { |
| 78 CFX_StockFontArray* pStockFonts = (CFX_StockFontArray*)value; | 78 CFX_StockFontArray* pStockFonts = (CFX_StockFontArray*)value; |
| 79 for (int i = 0; i < 14; i ++) { | 79 for (int i = 0; i < 14; i ++) { |
| 80 if (pStockFonts->m_pStockFonts[i]) { | 80 if (pStockFonts->m_pStockFonts[i]) { |
| 81 pStockFonts->m_pStockFonts[i]->GetFontDict()->Release(); | 81 CPDF_Dictionary* pFontDict = pStockFonts->m_pStockFonts[i]->GetF
ontDict(); |
| 82 if (pFontDict) |
| 83 pFontDict->Release(); |
| 82 delete pStockFonts->m_pStockFonts[i]; | 84 delete pStockFonts->m_pStockFonts[i]; |
| 83 } | 85 } |
| 84 } | 86 } |
| 85 delete pStockFonts; | 87 delete pStockFonts; |
| 86 } | 88 } |
| 87 m_pStockMap.RemoveKey(key); | 89 m_pStockMap.RemoveKey(key); |
| 88 } | 90 } |
| 89 void CPDF_FontGlobals::ClearAll() | 91 void CPDF_FontGlobals::ClearAll() |
| 90 { | 92 { |
| 91 FX_POSITION pos = m_pStockMap.GetStartPosition(); | 93 FX_POSITION pos = m_pStockMap.GetStartPosition(); |
| 92 while (pos) { | 94 while (pos) { |
| 93 void *key = NULL; | 95 void *key = NULL; |
| 94 void* value = NULL; | 96 void* value = NULL; |
| 95 m_pStockMap.GetNextAssoc(pos, key, value); | 97 m_pStockMap.GetNextAssoc(pos, key, value); |
| 96 if (value) { | 98 if (value) { |
| 97 CFX_StockFontArray* pStockFonts = (CFX_StockFontArray*)value; | 99 CFX_StockFontArray* pStockFonts = (CFX_StockFontArray*)value; |
| 98 for (int i = 0; i < 14; i ++) { | 100 for (int i = 0; i < 14; i ++) { |
| 99 if (pStockFonts->m_pStockFonts[i]) { | 101 if (pStockFonts->m_pStockFonts[i]) { |
| 100 pStockFonts->m_pStockFonts[i]->GetFontDict()->Release(); | 102 CPDF_Dictionary* pFontDict = pStockFonts->m_pStockFonts[i]->
GetFontDict(); |
| 103 if (pFontDict) |
| 104 pFontDict->Release(); |
| 101 delete pStockFonts->m_pStockFonts[i]; | 105 delete pStockFonts->m_pStockFonts[i]; |
| 102 } | 106 } |
| 103 } | 107 } |
| 104 delete pStockFonts; | 108 delete pStockFonts; |
| 105 } | 109 } |
| 106 m_pStockMap.RemoveKey(key); | 110 m_pStockMap.RemoveKey(key); |
| 107 } | 111 } |
| 108 } | 112 } |
| 109 CPDF_Font::CPDF_Font() | 113 CPDF_Font::CPDF_Font() |
| 110 { | 114 { |
| (...skipping 1580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1691 delete pChar; | 1695 delete pChar; |
| 1692 m_CacheMap.RemoveKey((FX_LPVOID)(FX_UINTPTR)charcode); | 1696 m_CacheMap.RemoveKey((FX_LPVOID)(FX_UINTPTR)charcode); |
| 1693 return LoadChar(charcode, level + 1); | 1697 return LoadChar(charcode, level + 1); |
| 1694 } | 1698 } |
| 1695 return pChar; | 1699 return pChar; |
| 1696 } | 1700 } |
| 1697 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); | 1701 FX_LPCSTR name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode); |
| 1698 if (name == NULL) { | 1702 if (name == NULL) { |
| 1699 return NULL; | 1703 return NULL; |
| 1700 } | 1704 } |
| 1701 CPDF_Stream* pStream = (CPDF_Stream*)m_pCharProcs->GetElementValue(name); | 1705 CPDF_Stream* pStream = (CPDF_Stream*)(m_pCharProcs ? m_pCharProcs->GetElemen
tValue(name) : NULL); |
| 1702 if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) { | 1706 if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) { |
| 1703 return NULL; | 1707 return NULL; |
| 1704 } | 1708 } |
| 1705 pChar = FX_NEW CPDF_Type3Char; | 1709 pChar = FX_NEW CPDF_Type3Char; |
| 1706 pChar->m_pForm = FX_NEW CPDF_Form(m_pDocument, m_pFontResources ? m_pFontRes
ources : m_pPageResources, pStream, NULL); | 1710 pChar->m_pForm = FX_NEW CPDF_Form(m_pDocument, m_pFontResources ? m_pFontRes
ources : m_pPageResources, pStream, NULL); |
| 1707 pChar->m_pForm->ParseContent(NULL, NULL, pChar, NULL, level + 1); | 1711 pChar->m_pForm->ParseContent(NULL, NULL, pChar, NULL, level + 1); |
| 1708 FX_FLOAT scale = m_FontMatrix.GetXUnit(); | 1712 FX_FLOAT scale = m_FontMatrix.GetXUnit(); |
| 1709 pChar->m_Width = (FX_INT32)(pChar->m_Width * scale + 0.5f); | 1713 pChar->m_Width = (FX_INT32)(pChar->m_Width * scale + 0.5f); |
| 1710 FX_RECT &rcBBox = pChar->m_BBox; | 1714 FX_RECT &rcBBox = pChar->m_BBox; |
| 1711 CFX_FloatRect char_rect((FX_FLOAT)rcBBox.left / 1000.0f, (FX_FLOAT)rcBBox.bo
ttom / 1000.0f, | 1715 CFX_FloatRect char_rect((FX_FLOAT)rcBBox.left / 1000.0f, (FX_FLOAT)rcBBox.bo
ttom / 1000.0f, |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1757 } | 1761 } |
| 1758 CPDF_Type3Char::~CPDF_Type3Char() | 1762 CPDF_Type3Char::~CPDF_Type3Char() |
| 1759 { | 1763 { |
| 1760 if (m_pForm) { | 1764 if (m_pForm) { |
| 1761 delete m_pForm; | 1765 delete m_pForm; |
| 1762 } | 1766 } |
| 1763 if (m_pBitmap) { | 1767 if (m_pBitmap) { |
| 1764 delete m_pBitmap; | 1768 delete m_pBitmap; |
| 1765 } | 1769 } |
| 1766 } | 1770 } |
| OLD | NEW |