Remove xfa/fxfa dependence on fpdfapi/font Pushes interaction with CPDF_Fonts down into CFGAS_GEFont Change-Id: I667130a0074f1087c1154d0f32eec9774ad1d83b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59219 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fgas/font/cfgas_gefont.cpp b/xfa/fgas/font/cfgas_gefont.cpp index 246fee1..3f4c886 100644 --- a/xfa/fgas/font/cfgas_gefont.cpp +++ b/xfa/fgas/font/cfgas_gefont.cpp
@@ -57,6 +57,16 @@ return pFont; } +// static +RetainPtr<CFGAS_GEFont> CFGAS_GEFont::LoadStockFont( + CPDF_Document* pDoc, + CFGAS_FontMgr* pMgr, + const ByteString& font_family) { + RetainPtr<CPDF_Font> stock_font = + CPDF_Font::GetStockFont(pDoc, font_family.AsStringView()); + return stock_font ? CFGAS_GEFont::LoadFont(stock_font, pMgr) : nullptr; +} + CFGAS_GEFont::CFGAS_GEFont(CFGAS_FontMgr* pFontMgr) : m_pFontMgr(pFontMgr) {} CFGAS_GEFont::~CFGAS_GEFont() = default;
diff --git a/xfa/fgas/font/cfgas_gefont.h b/xfa/fgas/font/cfgas_gefont.h index b7988db..7e021e1 100644 --- a/xfa/fgas/font/cfgas_gefont.h +++ b/xfa/fgas/font/cfgas_gefont.h
@@ -22,6 +22,7 @@ class CFX_Font; class CFX_UnicodeEncodingEx; +class CPDF_Document; class CPDF_Font; class CFGAS_GEFont final : public Retainable { @@ -39,6 +40,10 @@ std::unique_ptr<CFX_Font> pInternalFont, CFGAS_FontMgr* pFontMgr); + static RetainPtr<CFGAS_GEFont> LoadStockFont(CPDF_Document* pDoc, + CFGAS_FontMgr* pMgr, + const ByteString& font_family); + uint32_t GetFontStyles() const; bool GetCharWidth(wchar_t wUnicode, int32_t* pWidth); int32_t GetGlyphIndex(wchar_t wUnicode);
diff --git a/xfa/fxfa/BUILD.gn b/xfa/fxfa/BUILD.gn index f3c132d..06fb256 100644 --- a/xfa/fxfa/BUILD.gn +++ b/xfa/fxfa/BUILD.gn
@@ -96,7 +96,6 @@ "fxfa_basic.h", ] deps = [ - "../../core/fpdfapi/font", "../../core/fpdfapi/parser", "../../core/fpdfdoc", "../../core/fxcodec",
diff --git a/xfa/fxfa/cxfa_fontmgr.cpp b/xfa/fxfa/cxfa_fontmgr.cpp index c7ced0c..7259f6cf 100644 --- a/xfa/fxfa/cxfa_fontmgr.cpp +++ b/xfa/fxfa/cxfa_fontmgr.cpp
@@ -10,7 +10,6 @@ #include <memory> #include <utility> -#include "core/fpdfapi/font/cpdf_font.h" #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/parser/cpdf_document.h" #include "core/fxge/cfx_fontmgr.h" @@ -35,7 +34,6 @@ return iter->second; WideString wsEnglishName = FGAS_FontNameToEnglishName(wsFontFamily); - CFGAS_PDFFontMgr* pMgr = hDoc->GetPDFFontMgr(); RetainPtr<CFGAS_GEFont> pFont; if (pMgr) { @@ -47,27 +45,19 @@ pFont = CFGAS_DefaultFontManager::GetFont(hDoc->GetApp()->GetFDEFontMgr(), wsFontFamily, dwFontStyles); } - if (!pFont && pMgr) { pFont = pMgr->GetFont(wsEnglishName.AsStringView(), dwFontStyles, false); if (pFont) return pFont; } - if (!pFont) { pFont = CFGAS_DefaultFontManager::GetDefaultFont( hDoc->GetApp()->GetFDEFontMgr(), wsFontFamily, dwFontStyles); } - if (!pFont) { - ByteString font_family = - ByteString::Format("%ls", WideString(wsFontFamily).c_str()); - RetainPtr<CPDF_Font> stock_font = - CPDF_Font::GetStockFont(hDoc->GetPDFDoc(), font_family.AsStringView()); - if (stock_font) { - pFont = - CFGAS_GEFont::LoadFont(stock_font, hDoc->GetApp()->GetFDEFontMgr()); - } + pFont = CFGAS_GEFont::LoadStockFont( + hDoc->GetPDFDoc(), hDoc->GetApp()->GetFDEFontMgr(), + ByteString::Format("%ls", WideString(wsFontFamily).c_str())); } if (pFont) m_FontMap[bsKey] = pFont;