| 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 1856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1867 return NULL; | 1867 return NULL; |
| 1868 } | 1868 } |
| 1869 if (!pPDFFont->IsEmbedded()) { | 1869 if (!pPDFFont->IsEmbedded()) { |
| 1870 *pDstPDFFont = pPDFFont; | 1870 *pDstPDFFont = pPDFFont; |
| 1871 return NULL; | 1871 return NULL; |
| 1872 } | 1872 } |
| 1873 return IFX_Font::LoadFont(&pPDFFont->m_Font, pFDEFontMgr); | 1873 return IFX_Font::LoadFont(&pPDFFont->m_Font, pFDEFontMgr); |
| 1874 } | 1874 } |
| 1875 return NULL; | 1875 return NULL; |
| 1876 } | 1876 } |
| 1877 |
| 1877 IFX_Font* CXFA_PDFFontMgr::GetFont(const CFX_WideStringC& wsFontFamily, | 1878 IFX_Font* CXFA_PDFFontMgr::GetFont(const CFX_WideStringC& wsFontFamily, |
| 1878 uint32_t dwFontStyles, | 1879 uint32_t dwFontStyles, |
| 1879 CPDF_Font** pPDFFont, | 1880 CPDF_Font** pPDFFont, |
| 1880 FX_BOOL bStrictMatch) { | 1881 FX_BOOL bStrictMatch) { |
| 1881 uint32_t dwHashCode = FX_HashCode_GetW(wsFontFamily, false); | 1882 uint32_t dwHashCode = FX_HashCode_GetW(wsFontFamily, false); |
| 1882 CFX_ByteString strKey; | 1883 CFX_ByteString strKey; |
| 1883 strKey.Format("%u%u", dwHashCode, dwFontStyles); | 1884 strKey.Format("%u%u", dwHashCode, dwFontStyles); |
| 1884 auto it = m_FontMap.find(strKey); | 1885 auto it = m_FontMap.find(strKey); |
| 1885 if (it != m_FontMap.end()) | 1886 if (it != m_FontMap.end()) |
| 1886 return it->second; | 1887 return it->second; |
| 1887 CFX_ByteString bsPsName = CFX_ByteString::FromUnicode(wsFontFamily); | 1888 CFX_ByteString bsPsName = CFX_ByteString::FromUnicode(wsFontFamily); |
| 1888 FX_BOOL bBold = (dwFontStyles & FX_FONTSTYLE_Bold) == FX_FONTSTYLE_Bold; | 1889 FX_BOOL bBold = (dwFontStyles & FX_FONTSTYLE_Bold) == FX_FONTSTYLE_Bold; |
| 1889 FX_BOOL bItalic = (dwFontStyles & FX_FONTSTYLE_Italic) == FX_FONTSTYLE_Italic; | 1890 FX_BOOL bItalic = (dwFontStyles & FX_FONTSTYLE_Italic) == FX_FONTSTYLE_Italic; |
| 1890 CFX_ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic); | 1891 CFX_ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic); |
| 1891 IFX_Font* pFont = | 1892 IFX_Font* pFont = |
| 1892 FindFont(strFontName, bBold, bItalic, pPDFFont, bStrictMatch); | 1893 FindFont(strFontName, bBold, bItalic, pPDFFont, bStrictMatch); |
| 1893 if (pFont) | 1894 if (pFont) |
| 1894 m_FontMap[strKey] = pFont; | 1895 m_FontMap[strKey] = pFont; |
| 1895 return pFont; | 1896 return pFont; |
| 1896 } | 1897 } |
| 1898 |
| 1897 CFX_ByteString CXFA_PDFFontMgr::PsNameToFontName( | 1899 CFX_ByteString CXFA_PDFFontMgr::PsNameToFontName( |
| 1898 const CFX_ByteString& strPsName, | 1900 const CFX_ByteString& strPsName, |
| 1899 FX_BOOL bBold, | 1901 FX_BOOL bBold, |
| 1900 FX_BOOL bItalic) { | 1902 FX_BOOL bItalic) { |
| 1901 int32_t nCount = sizeof(g_XFAPDFFontName) / sizeof(XFA_PDFFONTNAME); | 1903 int32_t nCount = sizeof(g_XFAPDFFontName) / sizeof(XFA_PDFFONTNAME); |
| 1902 for (int32_t i = 0; i < nCount; i++) { | 1904 for (int32_t i = 0; i < nCount; i++) { |
| 1903 if (strPsName == g_XFAPDFFontName[i].lpPsName) { | 1905 if (strPsName == g_XFAPDFFontName[i].lpPsName) { |
| 1904 int32_t index = 1 + ((bItalic << 1) | bBold); | 1906 int32_t index = 1 + ((bItalic << 1) | bBold); |
| 1905 return *(&g_XFAPDFFontName[i].lpPsName + index); | 1907 return *(&g_XFAPDFFontName[i].lpPsName + index); |
| 1906 } | 1908 } |
| 1907 } | 1909 } |
| 1908 return strPsName; | 1910 return strPsName; |
| 1909 } | 1911 } |
| 1912 |
| 1910 FX_BOOL CXFA_PDFFontMgr::PsNameMatchDRFontName( | 1913 FX_BOOL CXFA_PDFFontMgr::PsNameMatchDRFontName( |
| 1911 const CFX_ByteStringC& bsPsName, | 1914 const CFX_ByteStringC& bsPsName, |
| 1912 FX_BOOL bBold, | 1915 FX_BOOL bBold, |
| 1913 FX_BOOL bItalic, | 1916 FX_BOOL bItalic, |
| 1914 const CFX_ByteString& bsDRFontName, | 1917 const CFX_ByteString& bsDRFontName, |
| 1915 FX_BOOL bStrictMatch) { | 1918 FX_BOOL bStrictMatch) { |
| 1916 CFX_ByteString bsDRName = bsDRFontName; | 1919 CFX_ByteString bsDRName = bsDRFontName; |
| 1917 bsDRName.Remove('-'); | 1920 bsDRName.Remove('-'); |
| 1918 int32_t iPsLen = bsPsName.GetLength(); | 1921 int32_t iPsLen = bsPsName.GetLength(); |
| 1919 int32_t nIndex = bsDRName.Find(bsPsName); | 1922 int32_t nIndex = bsDRName.Find(bsPsName); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1989 return FALSE; | 1992 return FALSE; |
| 1990 } | 1993 } |
| 1991 CPDF_Font* pPDFFont = (CPDF_Font*)m_FDE2PDFFont.GetValueAt(pFont); | 1994 CPDF_Font* pPDFFont = (CPDF_Font*)m_FDE2PDFFont.GetValueAt(pFont); |
| 1992 if (!pPDFFont) { | 1995 if (!pPDFFont) { |
| 1993 return FALSE; | 1996 return FALSE; |
| 1994 } | 1997 } |
| 1995 wUnicode = (FX_WCHAR)pPDFFont->CharCodeFromUnicode(wUnicode); | 1998 wUnicode = (FX_WCHAR)pPDFFont->CharCodeFromUnicode(wUnicode); |
| 1996 iWidth = pPDFFont->GetCharWidthF(wUnicode); | 1999 iWidth = pPDFFont->GetCharWidthF(wUnicode); |
| 1997 return TRUE; | 2000 return TRUE; |
| 1998 } | 2001 } |
| 1999 CXFA_FontMgr::CXFA_FontMgr() : m_pDefFontMgr(NULL) {} | 2002 |
| 2003 CXFA_FontMgr::CXFA_FontMgr() : m_pDefFontMgr(nullptr) {} |
| 2004 |
| 2000 CXFA_FontMgr::~CXFA_FontMgr() { | 2005 CXFA_FontMgr::~CXFA_FontMgr() { |
| 2001 DelAllMgrMap(); | 2006 DelAllMgrMap(); |
| 2002 } | 2007 } |
| 2008 |
| 2003 IFX_Font* CXFA_FontMgr::GetFont(CXFA_FFDoc* hDoc, | 2009 IFX_Font* CXFA_FontMgr::GetFont(CXFA_FFDoc* hDoc, |
| 2004 const CFX_WideStringC& wsFontFamily, | 2010 const CFX_WideStringC& wsFontFamily, |
| 2005 uint32_t dwFontStyles, | 2011 uint32_t dwFontStyles, |
| 2006 uint16_t wCodePage) { | 2012 uint16_t wCodePage) { |
| 2007 uint32_t dwHash = FX_HashCode_GetW(wsFontFamily, false); | 2013 uint32_t dwHash = FX_HashCode_GetW(wsFontFamily, false); |
| 2008 CFX_ByteString bsKey; | 2014 CFX_ByteString bsKey; |
| 2009 bsKey.Format("%u%u%u", dwHash, dwFontStyles, wCodePage); | 2015 bsKey.Format("%u%u%u", dwHash, dwFontStyles, wCodePage); |
| 2010 auto it = m_FontMap.find(bsKey); | 2016 auto it = m_FontMap.find(bsKey); |
| 2011 if (it != m_FontMap.end()) | 2017 if (it != m_FontMap.end()) |
| 2012 return it->second; | 2018 return it->second; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2062 CXFA_PDFFontMgr* pMgr = NULL; | 2068 CXFA_PDFFontMgr* pMgr = NULL; |
| 2063 m_PDFFontMgrArray.GetNextAssoc(ps, (void*&)hDoc, (void*&)pMgr); | 2069 m_PDFFontMgrArray.GetNextAssoc(ps, (void*&)hDoc, (void*&)pMgr); |
| 2064 delete pMgr; | 2070 delete pMgr; |
| 2065 } | 2071 } |
| 2066 m_PDFFontMgrArray.RemoveAll(); | 2072 m_PDFFontMgrArray.RemoveAll(); |
| 2067 m_FontMap.clear(); | 2073 m_FontMap.clear(); |
| 2068 } | 2074 } |
| 2069 void CXFA_FontMgr::SetDefFontMgr(CXFA_DefFontMgr* pFontMgr) { | 2075 void CXFA_FontMgr::SetDefFontMgr(CXFA_DefFontMgr* pFontMgr) { |
| 2070 m_pDefFontMgr = pFontMgr; | 2076 m_pDefFontMgr = pFontMgr; |
| 2071 } | 2077 } |
| OLD | NEW |