[xfa] Vastly simplify CFWL_FontManager.

It is only ever called with a single fontname and flags, so just
cache the one font we need.

Change-Id: I14738e76685243624814f0df43e52bdd609c57eb
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/93793
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fwl/theme/cfwl_fontmanager.cpp b/xfa/fwl/theme/cfwl_fontmanager.cpp
index ebf48e0..01fca70 100644
--- a/xfa/fwl/theme/cfwl_fontmanager.cpp
+++ b/xfa/fwl/theme/cfwl_fontmanager.cpp
@@ -34,40 +34,9 @@
 
 CFWL_FontManager::~CFWL_FontManager() = default;
 
-RetainPtr<CFGAS_GEFont> CFWL_FontManager::FindFont(WideStringView wsFontFamily,
-                                                   uint32_t dwFontStyles) {
-  for (const auto& pData : m_FontsArray) {
-    if (pData->Equal(wsFontFamily, dwFontStyles))
-      return pData->GetFont();
+RetainPtr<CFGAS_GEFont> CFWL_FontManager::GetFWLFont() {
+  if (!m_pFWLFont) {
+    m_pFWLFont = CFGAS_GEFont::LoadFont(L"Helvetica", 0, FX_CodePage::kDefANSI);
   }
-  auto pFontData = std::make_unique<FontData>();
-  if (!pFontData->LoadFont(wsFontFamily, dwFontStyles))
-    return nullptr;
-
-  m_FontsArray.push_back(std::move(pFontData));
-  return m_FontsArray.back()->GetFont();
-}
-
-CFWL_FontManager::FontData::FontData() = default;
-
-CFWL_FontManager::FontData::~FontData() = default;
-
-bool CFWL_FontManager::FontData::Equal(WideStringView wsFontFamily,
-                                       uint32_t dwFontStyles) {
-  return m_wsFamily == wsFontFamily && m_dwStyles == dwFontStyles;
-}
-
-bool CFWL_FontManager::FontData::LoadFont(WideStringView wsFontFamily,
-                                          uint32_t dwFontStyles) {
-  m_wsFamily = wsFontFamily;
-  m_dwStyles = dwFontStyles;
-
-  // TODO(tsepez): check usage of c_str() below.
-  m_pFont = CFGAS_GEFont::LoadFont(wsFontFamily.unterminated_c_str(),
-                                   dwFontStyles, FX_CodePage::kDefANSI);
-  return !!m_pFont;
-}
-
-RetainPtr<CFGAS_GEFont> CFWL_FontManager::FontData::GetFont() const {
-  return m_pFont;
+  return m_pFWLFont;
 }
diff --git a/xfa/fwl/theme/cfwl_fontmanager.h b/xfa/fwl/theme/cfwl_fontmanager.h
index 36162ce..c08be4e 100644
--- a/xfa/fwl/theme/cfwl_fontmanager.h
+++ b/xfa/fwl/theme/cfwl_fontmanager.h
@@ -7,13 +7,7 @@
 #ifndef XFA_FWL_THEME_CFWL_FONTMANAGER_H_
 #define XFA_FWL_THEME_CFWL_FONTMANAGER_H_
 
-#include <stdint.h>
-
-#include <memory>
-#include <vector>
-
 #include "core/fxcrt/retain_ptr.h"
-#include "core/fxcrt/widestring.h"
 
 class CFGAS_GEFont;
 
@@ -22,30 +16,13 @@
   static CFWL_FontManager* GetInstance();
   static void DestroyInstance();
 
-  RetainPtr<CFGAS_GEFont> FindFont(WideStringView wsFontFamily,
-                                   uint32_t dwFontStyles);
+  RetainPtr<CFGAS_GEFont> GetFWLFont();
 
  private:
-  class FontData final {
-   public:
-    FontData();
-    ~FontData();
-
-    bool Equal(WideStringView wsFontFamily, uint32_t dwFontStyles);
-    bool LoadFont(WideStringView wsFontFamily, uint32_t dwFontStyles);
-
-    RetainPtr<CFGAS_GEFont> GetFont() const;
-
-   private:
-    WideString m_wsFamily;
-    uint32_t m_dwStyles = 0;
-    RetainPtr<CFGAS_GEFont> m_pFont;
-  };
-
   CFWL_FontManager();
   ~CFWL_FontManager();
 
-  std::vector<std::unique_ptr<FontData>> m_FontsArray;
+  RetainPtr<CFGAS_GEFont> m_pFWLFont;
 };
 
 #endif  // XFA_FWL_THEME_CFWL_FONTMANAGER_H_
diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
index 7220296..34193fb 100644
--- a/xfa/fwl/theme/cfwl_widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -78,7 +78,7 @@
   if (m_pTextOut)
     return;
 
-  m_pFGASFont = CFWL_FontManager::GetInstance()->FindFont(L"Helvetica", 0);
+  m_pFGASFont = CFWL_FontManager::GetInstance()->GetFWLFont();
   m_pTextOut = std::make_unique<CFDE_TextOut>();
   m_pTextOut->SetFont(m_pFGASFont);
   m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);