Chromium Code Reviews| Index: core/src/fxge/ge/fx_ge_fontmap.cpp |
| diff --git a/core/src/fxge/ge/fx_ge_fontmap.cpp b/core/src/fxge/ge/fx_ge_fontmap.cpp |
| index e88791aac510dd852366f859b54d5516a0f62f3e..5243fc4f6860376f9d34dda84897ed2476ab55c7 100644 |
| --- a/core/src/fxge/ge/fx_ge_fontmap.cpp |
| +++ b/core/src/fxge/ge/fx_ge_fontmap.cpp |
| @@ -80,31 +80,28 @@ FX_BOOL CTTFontDesc::ReleaseFace(FXFT_Face face) { |
| delete this; |
| return TRUE; |
| } |
| + |
| CFX_FontMgr::CFX_FontMgr() : m_FTLibrary(nullptr) { |
| m_pBuiltinMapper = new CFX_FontMapper(this); |
| - FXSYS_memset(m_ExternalFonts, 0, sizeof m_ExternalFonts); |
| } |
| + |
| CFX_FontMgr::~CFX_FontMgr() { |
| delete m_pBuiltinMapper; |
|
Tom Sepez
2015/10/20 18:58:24
Do we want to do this after the FXFT_DoneFreetype?
Lei Zhang
2015/10/20 19:13:57
Ya, I was thinking about this on the commute. Mayb
|
| - FreeCache(); |
| - if (m_FTLibrary) { |
| - FXFT_Done_FreeType(m_FTLibrary); |
| - } |
| + for (const auto& pair : m_FaceMap) |
| + delete pair.second; |
| + FXFT_Done_FreeType(m_FTLibrary); |
|
Lei Zhang
2015/10/20 18:13:31
FT_Done_FreeType() checks its input already.
|
| } |
| + |
| void CFX_FontMgr::InitFTLibrary() { |
| - if (m_FTLibrary == NULL) { |
| - FXFT_Init_FreeType(&m_FTLibrary); |
| - } |
| -} |
| -void CFX_FontMgr::FreeCache() { |
| - for (const auto& pair : m_FaceMap) { |
| - delete pair.second; |
| - } |
| - m_FaceMap.clear(); |
| + if (m_FTLibrary) |
| + return; |
| + FXFT_Init_FreeType(&m_FTLibrary); |
| } |
| + |
| void CFX_FontMgr::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) { |
| m_pBuiltinMapper->SetSystemFontInfo(pFontInfo); |
| } |
| + |
| FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name, |
| FX_BOOL bTrueType, |
| FX_DWORD flags, |
| @@ -112,12 +109,11 @@ FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name, |
| int italic_angle, |
| int CharsetCP, |
| CFX_SubstFont* pSubstFont) { |
| - if (!m_FTLibrary) { |
| - FXFT_Init_FreeType(&m_FTLibrary); |
| - } |
| + InitFTLibrary(); |
| return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight, |
| italic_angle, CharsetCP, pSubstFont); |
| } |
| + |
| FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name, |
| int weight, |
| FX_BOOL bItalic, |
| @@ -144,11 +140,9 @@ FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name, |
| pFontDesc->m_SingleFace.m_bItalic = bItalic; |
| pFontDesc->m_pFontData = pData; |
| pFontDesc->m_RefCount = 1; |
| - FXFT_Library library; |
| - if (m_FTLibrary == NULL) { |
| - FXFT_Init_FreeType(&m_FTLibrary); |
| - } |
| - library = m_FTLibrary; |
| + |
| + InitFTLibrary(); |
| + FXFT_Library library = m_FTLibrary; |
| int ret = FXFT_New_Memory_Face(library, pData, size, face_index, |
| &pFontDesc->m_SingleFace.m_pFace); |
| if (ret) { |
| @@ -335,42 +329,27 @@ FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, |
| GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); |
| return pFontDesc->m_TTCFace.m_pFaces[face_index]; |
| } |
| + |
| FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData, |
| FX_DWORD size, |
| int face_index) { |
| - FXFT_Library library; |
| - if (m_FTLibrary == NULL) { |
| - FXFT_Init_FreeType(&m_FTLibrary); |
| - } |
| - library = m_FTLibrary; |
| - FXFT_Face face = NULL; |
| - int ret = FXFT_New_Memory_Face(library, pData, size, face_index, &face); |
| - if (ret) { |
| - return NULL; |
| - } |
| - ret = FXFT_Set_Pixel_Sizes(face, 64, 64); |
| - if (ret) { |
| - return NULL; |
| - } |
| - return face; |
| + InitFTLibrary(); |
| + FXFT_Library library = m_FTLibrary; |
| + FXFT_Face face = nullptr; |
| + if (FXFT_New_Memory_Face(library, pData, size, face_index, &face)) |
| + return nullptr; |
| + return FXFT_Set_Pixel_Sizes(face, 64, 64) ? nullptr : face; |
| } |
| + |
| FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index) { |
| - FXFT_Library library; |
| - if (m_FTLibrary == NULL) { |
| - FXFT_Init_FreeType(&m_FTLibrary); |
| - } |
| - library = m_FTLibrary; |
| - FXFT_Face face = NULL; |
| - int ret = FXFT_New_Face(library, filename, face_index, &face); |
| - if (ret) { |
| - return NULL; |
| - } |
| - ret = FXFT_Set_Pixel_Sizes(face, 64, 64); |
| - if (ret) { |
| - return NULL; |
| - } |
| - return face; |
| + InitFTLibrary(); |
| + FXFT_Library library = m_FTLibrary; |
| + FXFT_Face face = nullptr; |
| + if (FXFT_New_Face(library, filename, face_index, &face)) |
| + return nullptr; |
| + return FXFT_Set_Pixel_Sizes(face, 64, 64) ? nullptr : face; |
| } |
| + |
| void CFX_FontMgr::ReleaseFace(FXFT_Face face) { |
| if (!face) { |
| return; |
| @@ -1058,19 +1037,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, |
| iBaseFont += 2; |
| } |
| } |
| - if (m_pFontMgr->m_ExternalFonts[iBaseFont].m_pFontData) { |
| - if (m_FoxitFaces[iBaseFont]) { |
| - return m_FoxitFaces[iBaseFont]; |
| - } |
| - m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace( |
| - m_pFontMgr->m_ExternalFonts[iBaseFont].m_pFontData, |
| - m_pFontMgr->m_ExternalFonts[iBaseFont].m_dwSize, 0); |
| - if (m_FoxitFaces[iBaseFont]) { |
| - return m_FoxitFaces[iBaseFont]; |
| - } |
| - } else { |
| - family = g_Base14FontNames[iBaseFont]; |
| - } |
| + family = g_Base14FontNames[iBaseFont]; |
| pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD; |
| } |
| } else { |