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 "xfa/fxfa/include/xfa_fontmgr.h" | 7 #include "xfa/fxfa/include/xfa_fontmgr.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 1695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1706 break; | 1706 break; |
1707 } else if (dwFontNameHash < dwLocalNameHash) { | 1707 } else if (dwFontNameHash < dwLocalNameHash) { |
1708 iStart = iMid + 1; | 1708 iStart = iMid + 1; |
1709 } else { | 1709 } else { |
1710 iEnd = iMid - 1; | 1710 iEnd = iMid - 1; |
1711 } | 1711 } |
1712 } while (iEnd >= iStart); | 1712 } while (iEnd >= iStart); |
1713 } | 1713 } |
1714 const XFA_FONTINFO* XFA_GetFontINFOByFontName( | 1714 const XFA_FONTINFO* XFA_GetFontINFOByFontName( |
1715 const CFX_WideStringC& wsFontName) { | 1715 const CFX_WideStringC& wsFontName) { |
1716 CFX_WideString wsFontNameTemp = wsFontName; | 1716 CFX_WideString wsFontNameTemp(wsFontName); |
1717 wsFontNameTemp.Remove(L' '); | 1717 wsFontNameTemp.Remove(L' '); |
1718 uint32_t dwCurFontNameHash = | 1718 uint32_t dwCurFontNameHash = |
1719 FX_HashCode_GetW(wsFontNameTemp.AsStringC(), true); | 1719 FX_HashCode_GetW(wsFontNameTemp.AsStringC(), true); |
1720 int32_t iStart = 0; | 1720 int32_t iStart = 0; |
1721 int32_t iEnd = sizeof(g_XFAFontsMap) / sizeof(XFA_FONTINFO) - 1; | 1721 int32_t iEnd = sizeof(g_XFAFontsMap) / sizeof(XFA_FONTINFO) - 1; |
1722 int32_t iMid = 0; | 1722 int32_t iMid = 0; |
1723 const XFA_FONTINFO* pFontInfo = NULL; | 1723 const XFA_FONTINFO* pFontInfo = NULL; |
1724 do { | 1724 do { |
1725 iMid = (iStart + iEnd) / 2; | 1725 iMid = (iStart + iEnd) / 2; |
1726 uint32_t dwFontNameHash = g_XFAFontsMap[iMid].dwFontNameHash; | 1726 uint32_t dwFontNameHash = g_XFAFontsMap[iMid].dwFontNameHash; |
(...skipping 11 matching lines...) Expand all Loading... |
1738 | 1738 |
1739 CXFA_DefFontMgr::~CXFA_DefFontMgr() { | 1739 CXFA_DefFontMgr::~CXFA_DefFontMgr() { |
1740 for (int32_t i = 0; i < m_CacheFonts.GetSize(); i++) | 1740 for (int32_t i = 0; i < m_CacheFonts.GetSize(); i++) |
1741 m_CacheFonts[i]->Release(); | 1741 m_CacheFonts[i]->Release(); |
1742 } | 1742 } |
1743 | 1743 |
1744 IFX_Font* CXFA_DefFontMgr::GetFont(CXFA_FFDoc* hDoc, | 1744 IFX_Font* CXFA_DefFontMgr::GetFont(CXFA_FFDoc* hDoc, |
1745 const CFX_WideStringC& wsFontFamily, | 1745 const CFX_WideStringC& wsFontFamily, |
1746 uint32_t dwFontStyles, | 1746 uint32_t dwFontStyles, |
1747 uint16_t wCodePage) { | 1747 uint16_t wCodePage) { |
1748 CFX_WideString wsFontName = wsFontFamily; | 1748 CFX_WideString wsFontName(wsFontFamily); |
1749 IFX_FontMgr* pFDEFontMgr = hDoc->GetApp()->GetFDEFontMgr(); | 1749 IFX_FontMgr* pFDEFontMgr = hDoc->GetApp()->GetFDEFontMgr(); |
1750 IFX_Font* pFont = | 1750 IFX_Font* pFont = |
1751 pFDEFontMgr->LoadFont(wsFontName.c_str(), dwFontStyles, wCodePage); | 1751 pFDEFontMgr->LoadFont(wsFontName.c_str(), dwFontStyles, wCodePage); |
1752 if (!pFont) { | 1752 if (!pFont) { |
1753 const XFA_FONTINFO* pCurFont = | 1753 const XFA_FONTINFO* pCurFont = |
1754 XFA_GetFontINFOByFontName(wsFontName.AsStringC()); | 1754 XFA_GetFontINFOByFontName(wsFontName.AsStringC()); |
1755 if (pCurFont && pCurFont->pReplaceFont) { | 1755 if (pCurFont && pCurFont->pReplaceFont) { |
1756 uint32_t dwStyle = 0; | 1756 uint32_t dwStyle = 0; |
1757 if (dwFontStyles & FX_FONTSTYLE_Bold) { | 1757 if (dwFontStyles & FX_FONTSTYLE_Bold) { |
1758 dwStyle |= FX_FONTSTYLE_Bold; | 1758 dwStyle |= FX_FONTSTYLE_Bold; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1875 IFX_Font* CXFA_PDFFontMgr::GetFont(const CFX_WideStringC& wsFontFamily, | 1875 IFX_Font* CXFA_PDFFontMgr::GetFont(const CFX_WideStringC& wsFontFamily, |
1876 uint32_t dwFontStyles, | 1876 uint32_t dwFontStyles, |
1877 CPDF_Font** pPDFFont, | 1877 CPDF_Font** pPDFFont, |
1878 FX_BOOL bStrictMatch) { | 1878 FX_BOOL bStrictMatch) { |
1879 uint32_t dwHashCode = FX_HashCode_GetW(wsFontFamily, false); | 1879 uint32_t dwHashCode = FX_HashCode_GetW(wsFontFamily, false); |
1880 CFX_ByteString strKey; | 1880 CFX_ByteString strKey; |
1881 strKey.Format("%u%u", dwHashCode, dwFontStyles); | 1881 strKey.Format("%u%u", dwHashCode, dwFontStyles); |
1882 auto it = m_FontMap.find(strKey); | 1882 auto it = m_FontMap.find(strKey); |
1883 if (it != m_FontMap.end()) | 1883 if (it != m_FontMap.end()) |
1884 return it->second; | 1884 return it->second; |
1885 CFX_ByteString bsPsName = CFX_ByteString::FromUnicode(wsFontFamily); | 1885 CFX_ByteString bsPsName = |
| 1886 CFX_ByteString::FromUnicode(CFX_WideString(wsFontFamily)); |
1886 FX_BOOL bBold = (dwFontStyles & FX_FONTSTYLE_Bold) == FX_FONTSTYLE_Bold; | 1887 FX_BOOL bBold = (dwFontStyles & FX_FONTSTYLE_Bold) == FX_FONTSTYLE_Bold; |
1887 FX_BOOL bItalic = (dwFontStyles & FX_FONTSTYLE_Italic) == FX_FONTSTYLE_Italic; | 1888 FX_BOOL bItalic = (dwFontStyles & FX_FONTSTYLE_Italic) == FX_FONTSTYLE_Italic; |
1888 CFX_ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic); | 1889 CFX_ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic); |
1889 IFX_Font* pFont = | 1890 IFX_Font* pFont = |
1890 FindFont(strFontName, bBold, bItalic, pPDFFont, bStrictMatch); | 1891 FindFont(strFontName, bBold, bItalic, pPDFFont, bStrictMatch); |
1891 if (pFont) | 1892 if (pFont) |
1892 m_FontMap[strKey] = pFont; | 1893 m_FontMap[strKey] = pFont; |
1893 return pFont; | 1894 return pFont; |
1894 } | 1895 } |
1895 | 1896 |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2065 CXFA_PDFFontMgr* pMgr = NULL; | 2066 CXFA_PDFFontMgr* pMgr = NULL; |
2066 m_PDFFontMgrArray.GetNextAssoc(ps, (void*&)hDoc, (void*&)pMgr); | 2067 m_PDFFontMgrArray.GetNextAssoc(ps, (void*&)hDoc, (void*&)pMgr); |
2067 delete pMgr; | 2068 delete pMgr; |
2068 } | 2069 } |
2069 m_PDFFontMgrArray.RemoveAll(); | 2070 m_PDFFontMgrArray.RemoveAll(); |
2070 m_FontMap.clear(); | 2071 m_FontMap.clear(); |
2071 } | 2072 } |
2072 void CXFA_FontMgr::SetDefFontMgr(CXFA_DefFontMgr* pFontMgr) { | 2073 void CXFA_FontMgr::SetDefFontMgr(CXFA_DefFontMgr* pFontMgr) { |
2073 m_pDefFontMgr = pFontMgr; | 2074 m_pDefFontMgr = pFontMgr; |
2074 } | 2075 } |
OLD | NEW |