Remove font-related methods from CFX_SystemHandler.
These don't require any member variables, so they can be
anonymous functions instead. In turn, this gets rid of a
circular include between formfiller:fontmap and fpdfsdk.
Change-Id: I7f9725af406ebbf8621d1208638d6d4e372cf808
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55533
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index 786cc8f..255e68c 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -94,7 +94,6 @@
allow_circular_includes_from = [
"../fxjs",
"formfiller",
- "formfiller:fontmap",
"pwl",
]
visibility = [ "../*" ]
diff --git a/fpdfsdk/cfx_systemhandler.cpp b/fpdfsdk/cfx_systemhandler.cpp
index b43e303..6833693 100644
--- a/fpdfsdk/cfx_systemhandler.cpp
+++ b/fpdfsdk/cfx_systemhandler.cpp
@@ -10,9 +10,6 @@
#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fxcrt/fx_codepage.h"
-#include "core/fxge/cfx_font.h"
-#include "core/fxge/cfx_fontmapper.h"
-#include "core/fxge/cfx_fontmgr.h"
#include "core/fxge/cfx_gemodule.h"
#include "fpdfsdk/cpdfsdk_annot.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
@@ -70,38 +67,6 @@
m_pFormFillEnv->SetCursor(nCursorType);
}
-bool CFX_SystemHandler::FindNativeTrueTypeFont(ByteString sFontFaceName) {
- CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
- if (!pFontMgr)
- return false;
-
- CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
- pFontMapper->LoadInstalledFonts();
-
- for (const auto& font : pFontMapper->m_InstalledTTFonts) {
- if (font.Compare(sFontFaceName.AsStringView()))
- return true;
- }
- for (const auto& fontPair : pFontMapper->m_LocalizedTTFonts) {
- if (fontPair.first.Compare(sFontFaceName.AsStringView()))
- return true;
- }
- return false;
-}
-
-CPDF_Font* CFX_SystemHandler::AddNativeTrueTypeFontToPDF(
- CPDF_Document* pDoc,
- ByteString sFontFaceName,
- uint8_t nCharset) {
- if (!pDoc)
- return nullptr;
-
- auto pFXFont = pdfium::MakeUnique<CFX_Font>();
- pFXFont->LoadSubst(sFontFaceName, true, 0, 0, 0,
- FX_GetCodePageFromCharset(nCharset), false);
- return pDoc->AddFont(pFXFont.get(), nCharset);
-}
-
int32_t CFX_SystemHandler::SetTimer(int32_t uElapse,
TimerCallback lpTimerFunc) {
return m_pFormFillEnv->SetTimer(uElapse, lpTimerFunc);
diff --git a/fpdfsdk/cfx_systemhandler.h b/fpdfsdk/cfx_systemhandler.h
index 7c555b6..49297cd 100644
--- a/fpdfsdk/cfx_systemhandler.h
+++ b/fpdfsdk/cfx_systemhandler.h
@@ -14,7 +14,6 @@
class CFFL_FormFiller;
class CPDF_Document;
-class CPDF_Font;
class CPDFSDK_FormFillEnvironment;
class CPDFSDK_Widget;
@@ -31,11 +30,6 @@
const CFX_FloatRect& rect);
bool IsSelectionImplemented() const;
void SetCursor(int32_t nCursorType);
- bool FindNativeTrueTypeFont(ByteString sFontFaceName);
- CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
- ByteString sFontFaceName,
- uint8_t nCharset);
-
int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc);
void KillTimer(int32_t nID);
diff --git a/fpdfsdk/formfiller/cba_fontmap.cpp b/fpdfsdk/formfiller/cba_fontmap.cpp
index 4e2e100..d4f9334 100644
--- a/fpdfsdk/formfiller/cba_fontmap.cpp
+++ b/fpdfsdk/formfiller/cba_fontmap.cpp
@@ -24,17 +24,50 @@
#include "core/fpdfdoc/cpdf_formfield.h"
#include "core/fpdfdoc/ipvt_fontmap.h"
#include "core/fxcrt/fx_codepage.h"
+#include "core/fxge/cfx_fontmapper.h"
+#include "core/fxge/cfx_fontmgr.h"
+#include "core/fxge/cfx_gemodule.h"
#include "core/fxge/cfx_substfont.h"
-#include "fpdfsdk/cfx_systemhandler.h"
#include "third_party/base/ptr_util.h"
#include "third_party/base/stl_util.h"
-CBA_FontMap::CBA_FontMap(CFX_SystemHandler* pSystemHandler,
- CPDF_Document* pDocument,
- CPDF_Dictionary* pAnnotDict)
- : m_pSystemHandler(pSystemHandler),
- m_pDocument(pDocument),
- m_pAnnotDict(pAnnotDict) {
+namespace {
+
+bool FindNativeTrueTypeFont(ByteString sFontFaceName) {
+ CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
+ if (!pFontMgr)
+ return false;
+
+ CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
+ pFontMapper->LoadInstalledFonts();
+
+ for (const auto& font : pFontMapper->m_InstalledTTFonts) {
+ if (font.Compare(sFontFaceName.AsStringView()))
+ return true;
+ }
+ for (const auto& fontPair : pFontMapper->m_LocalizedTTFonts) {
+ if (fontPair.first.Compare(sFontFaceName.AsStringView()))
+ return true;
+ }
+ return false;
+}
+
+CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
+ ByteString sFontFaceName,
+ uint8_t nCharset) {
+ if (!pDoc)
+ return nullptr;
+
+ auto pFXFont = pdfium::MakeUnique<CFX_Font>();
+ pFXFont->LoadSubst(sFontFaceName, true, 0, 0, 0,
+ FX_GetCodePageFromCharset(nCharset), false);
+ return pDoc->AddFont(pFXFont.get(), nCharset);
+}
+
+} // namespace
+
+CBA_FontMap::CBA_FontMap(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict)
+ : m_pDocument(pDocument), m_pAnnotDict(pAnnotDict) {
Initialize();
}
@@ -389,7 +422,7 @@
nCharset = GetNativeCharset();
ByteString sFontName = CFX_Font::GetDefaultFontNameByCharset(nCharset);
- if (!m_pSystemHandler->FindNativeTrueTypeFont(sFontName))
+ if (!FindNativeTrueTypeFont(sFontName))
return ByteString();
return sFontName;
@@ -469,9 +502,9 @@
if (sFontName.IsEmpty())
sFontName = GetNativeFont(nCharset);
+
if (nCharset == FX_CHARSET_Default)
nCharset = GetNativeCharset();
- return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontName,
- nCharset);
+ return AddNativeTrueTypeFontToPDF(pDoc, sFontName, nCharset);
}
diff --git a/fpdfsdk/formfiller/cba_fontmap.h b/fpdfsdk/formfiller/cba_fontmap.h
index 9912b38..2639cac 100644
--- a/fpdfsdk/formfiller/cba_fontmap.h
+++ b/fpdfsdk/formfiller/cba_fontmap.h
@@ -15,15 +15,12 @@
#include "core/fxcrt/unowned_ptr.h"
#include "public/fpdf_sysfontinfo.h"
-class CFX_SystemHandler;
class CPDF_Dictionary;
class CPDF_Document;
class CBA_FontMap final : public IPVT_FontMap {
public:
- CBA_FontMap(CFX_SystemHandler* pSystemHandler,
- CPDF_Document* pDocument,
- CPDF_Dictionary* pAnnotDict);
+ CBA_FontMap(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict);
~CBA_FontMap() override;
// IPVT_FontMap
@@ -89,7 +86,6 @@
std::vector<std::unique_ptr<Data>> m_Data;
std::vector<std::unique_ptr<Native>> m_NativeFont;
- UnownedPtr<CFX_SystemHandler> const m_pSystemHandler;
UnownedPtr<CPDF_Document> const m_pDocument;
RetainPtr<CPDF_Dictionary> const m_pAnnotDict;
UnownedPtr<CPDF_Font> m_pDefaultFont;
diff --git a/fpdfsdk/formfiller/cffl_textobject.cpp b/fpdfsdk/formfiller/cffl_textobject.cpp
index 3beca7f..a6b1308 100644
--- a/fpdfsdk/formfiller/cffl_textobject.cpp
+++ b/fpdfsdk/formfiller/cffl_textobject.cpp
@@ -34,7 +34,7 @@
CBA_FontMap* CFFL_TextObject::MaybeCreateFontMap() {
if (!m_pFontMap) {
m_pFontMap = pdfium::MakeUnique<CBA_FontMap>(
- GetSystemHandler(), m_pWidget->GetPDFPage()->GetDocument(),
+ m_pWidget->GetPDFPage()->GetDocument(),
m_pWidget->GetPDFAnnot()->GetAnnotDict());
}
return m_pFontMap.get();
diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/pwl/cpwl_appstream.cpp
index a431781..2e9ca5c 100644
--- a/fpdfsdk/pwl/cpwl_appstream.cpp
+++ b/fpdfsdk/pwl/cpwl_appstream.cpp
@@ -1231,14 +1231,11 @@
SetDefaultIconName(pRolloverIcon, "ImgB");
SetDefaultIconName(pDownIcon, "ImgC");
- CPDF_IconFit iconFit = pControl->GetIconFit();
- CBA_FontMap font_map(
- widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler(),
- widget_->GetPDFPage()->GetDocument(),
- widget_->GetPDFAnnot()->GetAnnotDict());
-
+ CBA_FontMap font_map(widget_->GetPDFPage()->GetDocument(),
+ widget_->GetPDFAnnot()->GetAnnotDict());
font_map.SetAPType("N");
+ CPDF_IconFit iconFit = pControl->GetIconFit();
ByteString csAP =
GetRectFillAppStream(rcWindow, crBackground) +
GetBorderAppStreamInternal(rcWindow, fBorderWidth, crBorder, crLeftTop,
@@ -1591,10 +1588,8 @@
rcButton.Normalize();
// Font map must outlive |pEdit|.
- CBA_FontMap font_map(
- widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler(),
- widget_->GetPDFPage()->GetDocument(),
- widget_->GetPDFAnnot()->GetAnnotDict());
+ CBA_FontMap font_map(widget_->GetPDFPage()->GetDocument(),
+ widget_->GetPDFAnnot()->GetAnnotDict());
auto pEdit = pdfium::MakeUnique<CPWL_EditImpl>();
pEdit->EnableRefresh(false);
@@ -1659,10 +1654,8 @@
std::ostringstream sBody;
// Font map must outlive |pEdit|.
- CBA_FontMap font_map(
- widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler(),
- widget_->GetPDFPage()->GetDocument(),
- widget_->GetPDFAnnot()->GetAnnotDict());
+ CBA_FontMap font_map(widget_->GetPDFPage()->GetDocument(),
+ widget_->GetPDFAnnot()->GetAnnotDict());
auto pEdit = pdfium::MakeUnique<CPWL_EditImpl>();
pEdit->EnableRefresh(false);
@@ -1745,10 +1738,8 @@
std::ostringstream sLines;
// Font map must outlive |pEdit|.
- CBA_FontMap font_map(
- widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler(),
- widget_->GetPDFPage()->GetDocument(),
- widget_->GetPDFAnnot()->GetAnnotDict());
+ CBA_FontMap font_map(widget_->GetPDFPage()->GetDocument(),
+ widget_->GetPDFAnnot()->GetAnnotDict());
auto pEdit = pdfium::MakeUnique<CPWL_EditImpl>();
pEdit->EnableRefresh(false);