| Index: xfa/src/fwl/src/theme/widgettp.cpp
|
| diff --git a/xfa/src/fwl/src/theme/widgettp.cpp b/xfa/src/fwl/src/theme/widgettp.cpp
|
| index 1941694557181d6010f787947cdbd9d5d1c0cfcd..ef69ec0334305ecaf75b6e0e7fad099389ce5220 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;
|
|
|