summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2015-10-20 10:43:15 -0700
committerLei Zhang <thestig@chromium.org>2015-10-20 10:43:15 -0700
commit444ed783c014bbbde2eda7a25cf42bfc2234d7a8 (patch)
tree8acd0842faeed065ef12e1a528293c87222e82d4
parent937840e1722d1f2b77d80575d6e710d760662c9c (diff)
downloadpdfium-444ed783c014bbbde2eda7a25cf42bfc2234d7a8.tar.xz
Revert "Make CFX_FontMgr member variables private."
This reverts commit c29bee029cd5fe3f8a4ceb580235ac2d0e5ce8fd. because it broke corpus tests. TBR=tsepez@chromium.org Review URL: https://codereview.chromium.org/1410733005 .
-rw-r--r--core/include/fxge/fx_font.h13
-rw-r--r--core/src/fxge/ge/fx_ge_font.cpp32
-rw-r--r--core/src/fxge/ge/fx_ge_fontmap.cpp99
-rw-r--r--core/src/fxge/ge/fx_ge_text.cpp2
-rw-r--r--fpdfsdk/src/fsdk_mgr.cpp28
5 files changed, 103 insertions, 71 deletions
diff --git a/core/include/fxge/fx_font.h b/core/include/fxge/fx_font.h
index d4f7a5dc04..f36801584d 100644
--- a/core/include/fxge/fx_font.h
+++ b/core/include/fxge/fx_font.h
@@ -9,7 +9,6 @@
#include <map>
-#include "../../../third_party/base/nonstd_unique_ptr.h"
#include "../fxcrt/fx_system.h"
#include "fx_dib.h"
@@ -177,7 +176,7 @@ class CFX_FontMgr {
public:
CFX_FontMgr();
~CFX_FontMgr();
-
+ void InitFTLibrary();
FXFT_Face GetCachedFace(const CFX_ByteString& face_name,
int weight,
FX_BOOL bItalic,
@@ -208,17 +207,13 @@ class CFX_FontMgr {
int italic_angle,
int CharsetCP,
CFX_SubstFont* pSubstFont);
+ void FreeCache();
FX_BOOL GetStandardFont(const uint8_t*& pFontData, FX_DWORD& size, int index);
- CFX_FontMapper* GetBuiltinMapper() const { return m_pBuiltinMapper.get(); }
- FXFT_Library GetFTLibrary() const { return m_FTLibrary; }
-
- private:
- void InitFTLibrary();
-
- nonstd::unique_ptr<CFX_FontMapper> m_pBuiltinMapper;
+ CFX_FontMapper* m_pBuiltinMapper;
std::map<CFX_ByteString, CTTFontDesc*> m_FaceMap;
FXFT_Library m_FTLibrary;
+ FoxitFonts m_ExternalFonts[16];
};
class IFX_FontEnumerator {
diff --git a/core/src/fxge/ge/fx_ge_font.cpp b/core/src/fxge/ge/fx_ge_font.cpp
index fed80e6165..a6ababf572 100644
--- a/core/src/fxge/ge/fx_ge_font.cpp
+++ b/core/src/fxge/ge/fx_ge_font.cpp
@@ -7,17 +7,7 @@
#include "../../../include/fxge/fx_ge.h"
#include "../../../include/fxge/fx_freetype.h"
#include "text_int.h"
-
#define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em)
-
-namespace {
-
-FXFT_Face FT_LoadFont(const uint8_t* pData, int size) {
- return CFX_GEModule::Get()->GetFontMgr()->GetFixedFace(pData, size, 0);
-}
-
-} // namespace
-
CFX_Font::CFX_Font() {
m_pSubstFont = NULL;
m_Face = NULL;
@@ -100,12 +90,28 @@ int CFX_Font::GetGlyphWidth(FX_DWORD glyph_index) {
FXFT_Get_Glyph_HoriAdvance(m_Face));
return width;
}
-
+static FXFT_Face FT_LoadFont(uint8_t* pData, int size) {
+ FXFT_Library library;
+ if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary);
+ }
+ library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary;
+ FXFT_Face face = NULL;
+ int error = FXFT_New_Memory_Face(library, pData, size, 0, &face);
+ if (error) {
+ return NULL;
+ }
+ error = FXFT_Set_Pixel_Sizes(face, 64, 64);
+ if (error) {
+ return NULL;
+ }
+ return face;
+}
FX_BOOL CFX_Font::LoadEmbedded(const uint8_t* data, FX_DWORD size) {
m_pFontDataAllocation = FX_Alloc(uint8_t, size);
FXSYS_memcpy(m_pFontDataAllocation, data, size);
- m_Face = FT_LoadFont(m_pFontDataAllocation, size);
- m_pFontData = m_pFontDataAllocation;
+ m_Face = FT_LoadFont((uint8_t*)m_pFontDataAllocation, size);
+ m_pFontData = (uint8_t*)m_pFontDataAllocation;
m_bEmbedded = TRUE;
m_dwSize = size;
return m_Face != NULL;
diff --git a/core/src/fxge/ge/fx_ge_fontmap.cpp b/core/src/fxge/ge/fx_ge_fontmap.cpp
index d135ffb531..e88791aac5 100644
--- a/core/src/fxge/ge/fx_ge_fontmap.cpp
+++ b/core/src/fxge/ge/fx_ge_fontmap.cpp
@@ -80,28 +80,31 @@ FX_BOOL CTTFontDesc::ReleaseFace(FXFT_Face face) {
delete this;
return TRUE;
}
-
CFX_FontMgr::CFX_FontMgr() : m_FTLibrary(nullptr) {
- m_pBuiltinMapper.reset(new CFX_FontMapper(this));
+ m_pBuiltinMapper = new CFX_FontMapper(this);
+ FXSYS_memset(m_ExternalFonts, 0, sizeof m_ExternalFonts);
}
-
CFX_FontMgr::~CFX_FontMgr() {
- for (const auto& pair : m_FaceMap)
- delete pair.second;
- if (m_FTLibrary)
+ delete m_pBuiltinMapper;
+ FreeCache();
+ if (m_FTLibrary) {
FXFT_Done_FreeType(m_FTLibrary);
+ }
}
-
void CFX_FontMgr::InitFTLibrary() {
- if (m_FTLibrary)
- return;
- FXFT_Init_FreeType(&m_FTLibrary);
+ 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();
}
-
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,
@@ -109,11 +112,12 @@ FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name,
int italic_angle,
int CharsetCP,
CFX_SubstFont* pSubstFont) {
- InitFTLibrary();
+ if (!m_FTLibrary) {
+ FXFT_Init_FreeType(&m_FTLibrary);
+ }
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,
@@ -140,9 +144,11 @@ FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name,
pFontDesc->m_SingleFace.m_bItalic = bItalic;
pFontDesc->m_pFontData = pData;
pFontDesc->m_RefCount = 1;
-
- InitFTLibrary();
- FXFT_Library library = m_FTLibrary;
+ FXFT_Library library;
+ if (m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&m_FTLibrary);
+ }
+ library = m_FTLibrary;
int ret = FXFT_New_Memory_Face(library, pData, size, face_index,
&pFontDesc->m_SingleFace.m_pFace);
if (ret) {
@@ -329,26 +335,41 @@ 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) {
- 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_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;
}
-
FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index) {
- 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;
+ 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;
}
void CFX_FontMgr::ReleaseFace(FXFT_Face face) {
if (!face) {
@@ -1037,7 +1058,19 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name,
iBaseFont += 2;
}
}
- family = g_Base14FontNames[iBaseFont];
+ 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];
+ }
pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
}
} else {
diff --git a/core/src/fxge/ge/fx_ge_text.cpp b/core/src/fxge/ge/fx_ge_text.cpp
index 11bc29ef5b..6938bb975d 100644
--- a/core/src/fxge/ge/fx_ge_text.cpp
+++ b/core/src/fxge/ge/fx_ge_text.cpp
@@ -1592,7 +1592,7 @@ CFX_GlyphBitmap* CFX_FaceCache::RenderGlyph(CFX_Font* pFont,
}
FXFT_Outline_Embolden(FXFT_Get_Glyph_Outline(m_Face), level);
}
- FXFT_Library_SetLcdFilter(CFX_GEModule::Get()->GetFontMgr()->GetFTLibrary(),
+ FXFT_Library_SetLcdFilter(CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary,
FT_LCD_FILTER_DEFAULT);
error = FXFT_Render_Glyph(m_Face, anti_alias);
if (error) {
diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp
index 5d765a495d..883ad60a93 100644
--- a/fpdfsdk/src/fsdk_mgr.cpp
+++ b/fpdfsdk/src/fsdk_mgr.cpp
@@ -145,22 +145,20 @@ FX_BOOL CFX_SystemHandler::FindNativeTrueTypeFont(
int32_t nCharset,
CFX_ByteString sFontFaceName) {
CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
- if (!pFontMgr)
- return FALSE;
-
- CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
- if (!pFontMapper)
- return FALSE;
-
- int nSize = pFontMapper->m_InstalledTTFonts.GetSize();
- if (nSize == 0) {
- pFontMapper->LoadInstalledFonts();
- nSize = pFontMapper->m_InstalledTTFonts.GetSize();
- }
+ if (pFontMgr) {
+ CFX_FontMapper* pFontMapper = pFontMgr->m_pBuiltinMapper;
+ if (pFontMapper) {
+ int nSize = pFontMapper->m_InstalledTTFonts.GetSize();
+ if (nSize == 0) {
+ pFontMapper->LoadInstalledFonts();
+ nSize = pFontMapper->m_InstalledTTFonts.GetSize();
+ }
- for (int i = 0; i < nSize; ++i) {
- if (pFontMapper->m_InstalledTTFonts[i].Compare(sFontFaceName))
- return TRUE;
+ for (int i = 0; i < nSize; i++) {
+ if (pFontMapper->m_InstalledTTFonts[i].Compare(sFontFaceName))
+ return TRUE;
+ }
+ }
}
return FALSE;