summaryrefslogtreecommitdiff
path: root/xfa/src/fwl/src/theme/widgettp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fwl/src/theme/widgettp.cpp')
-rw-r--r--xfa/src/fwl/src/theme/widgettp.cpp56
1 files changed, 24 insertions, 32 deletions
diff --git a/xfa/src/fwl/src/theme/widgettp.cpp b/xfa/src/fwl/src/theme/widgettp.cpp
index 1941694557..ef69ec0334 100644
--- a/xfa/src/fwl/src/theme/widgettp.cpp
+++ b/xfa/src/fwl/src/theme/widgettp.cpp
@@ -166,7 +166,7 @@ FWL_ERR CFWL_WidgetTP::SetFont(IFWL_Widget* pWidget,
if (!m_pTextOut) {
return FWL_ERR_Succeeded;
}
- m_pFDEFont = FWL_GetFontManager()->FindFont(strFont, 0, 0);
+ m_pFDEFont = CFWL_FontManager::GetInstance()->FindFont(strFont, 0, 0);
m_pTextOut->SetFont(m_pFDEFont);
m_pTextOut->SetFontSize(fFontSize);
m_pTextOut->SetTextColor(rgbFont);
@@ -193,7 +193,8 @@ FX_ERR CFWL_WidgetTP::InitTTO() {
if (m_pTextOut) {
return FWL_ERR_Succeeded;
}
- m_pFDEFont = FWL_GetFontManager()->FindFont(FX_WSTRC(L"Helvetica"), 0, 0);
+ m_pFDEFont =
+ CFWL_FontManager::GetInstance()->FindFont(FX_WSTRC(L"Helvetica"), 0, 0);
m_pTextOut = IFDE_TextOut::Create();
m_pTextOut->SetFont(m_pFDEFont);
m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
@@ -683,17 +684,6 @@ FWLCOLOR CFWL_WidgetTP::BlendColor(FWLCOLOR srcColor,
CFWL_ArrowData::CFWL_ArrowData() : m_pColorData(NULL) {
SetColorData(0);
}
-CFWL_FontManager* FWL_GetFontManager() {
- static CFWL_FontManager* _fontManager = NULL;
- if (_fontManager == NULL) {
- _fontManager = new CFWL_FontManager;
- }
- return _fontManager;
-}
-void FWL_ReleaseFontManager() {
- CFWL_FontManager* fontManager = FWL_GetFontManager();
- delete fontManager;
-}
CFWL_FontData::CFWL_FontData()
: m_dwStyles(0),
m_dwCodePage(0),
@@ -742,36 +732,38 @@ FX_BOOL CFWL_FontData::LoadFont(const CFX_WideStringC& wsFontFamily,
m_pFontMgr);
return m_pFont != NULL;
}
-CFWL_FontManager::CFWL_FontManager() {}
-CFWL_FontManager::~CFWL_FontManager() {
- for (int32_t i = 0; i < m_arrFonts.GetSize(); i++) {
- delete static_cast<CFWL_FontData*>(m_arrFonts[i]);
- }
- m_arrFonts.RemoveAll();
+
+CFWL_FontManager* CFWL_FontManager::s_FontManager = nullptr;
+CFWL_FontManager* CFWL_FontManager::GetInstance() {
+ if (!s_FontManager)
+ s_FontManager = new CFWL_FontManager;
+ return s_FontManager;
+}
+void CFWL_FontManager::DestroyInstance() {
+ delete s_FontManager;
+ s_FontManager = nullptr;
}
+CFWL_FontManager::CFWL_FontManager() {}
+CFWL_FontManager::~CFWL_FontManager() {}
IFX_Font* CFWL_FontManager::FindFont(const CFX_WideStringC& wsFontFamily,
FX_DWORD dwFontStyles,
FX_WORD wCodePage) {
- for (int32_t i = 0; i < m_arrFonts.GetSize(); i++) {
- CFWL_FontData* data = static_cast<CFWL_FontData*>(m_arrFonts[i]);
- if (data->Equal(wsFontFamily, dwFontStyles, wCodePage)) {
- return data->GetFont();
- }
- }
- CFWL_FontData* fontData = new CFWL_FontData;
- if (!fontData->LoadFont(wsFontFamily, dwFontStyles, wCodePage)) {
- delete fontData;
- return NULL;
+ for (const auto& pData : m_FontsArray) {
+ if (pData->Equal(wsFontFamily, dwFontStyles, wCodePage))
+ return pData->GetFont();
}
- m_arrFonts.Add(fontData);
- return fontData->GetFont();
+ std::unique_ptr<CFWL_FontData> pFontData(new CFWL_FontData);
+ if (!pFontData->LoadFont(wsFontFamily, dwFontStyles, wCodePage))
+ return nullptr;
+ m_FontsArray.push_back(std::move(pFontData));
+ return m_FontsArray.back()->GetFont();
}
FX_BOOL FWLTHEME_Init() {
return TRUE;
}
void FWLTHEME_Release() {
CFWL_ArrowData::DestroyInstance();
- FWL_ReleaseFontManager();
+ CFWL_FontManager::DestroyInstance();
}
FX_DWORD FWL_GetThemeLayout(FX_DWORD dwThemeID) {
return 0xffff0000 & dwThemeID;