De-duplicate code in CPDF_GenerateAP::GenerateFormAP()
-- pass provider to CPDF_VariableText constructor.
Change-Id: I88725921cc62ff17d1f552b73fdd1fb7078f28f8
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/95810
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp
index 0f1b674..c05b141 100644
--- a/core/fpdfdoc/cpdf_generateap.cpp
+++ b/core/fpdfdoc/cpdf_generateap.cpp
@@ -376,8 +376,7 @@
CPVT_FontMap map(pDoc, nullptr, pDefFont, sFontName);
CPVT_VariableText::Provider prd(&map);
- CPVT_VariableText vt;
- vt.SetProvider(&prd);
+ CPVT_VariableText vt(&prd);
vt.SetPlateRect(pAnnotDict.GetRectFor(pdfium::annotation::kRect));
vt.SetFontSize(12);
vt.SetAutoReturn(true);
@@ -1096,6 +1095,12 @@
pStreamDict->SetMatrixFor("Matrix", matrix);
pStreamDict->SetRectFor("BBox", rcBBox);
}
+ CPVT_FontMap map(
+ pDoc,
+ pStreamDict ? pStreamDict->GetMutableDictFor("Resources").Get() : nullptr,
+ pDefFont, font_name);
+ CPVT_VariableText::Provider prd(&map);
+
switch (type) {
case CPDF_GenerateAP::kTextField: {
const CPDF_Object* pV =
@@ -1109,14 +1114,7 @@
const CPDF_Object* pMaxLen =
CPDF_FormField::GetFieldAttr(pAnnotDict, "MaxLen");
uint32_t dwMaxLen = pMaxLen ? pMaxLen->GetInteger() : 0;
- CPVT_FontMap map(pDoc,
- pStreamDict
- ? pStreamDict->GetMutableDictFor("Resources").Get()
- : nullptr,
- pDefFont, font_name);
- CPVT_VariableText::Provider prd(&map);
- CPVT_VariableText vt;
- vt.SetProvider(&prd);
+ CPVT_VariableText vt(&prd);
vt.SetPlateRect(rcBody);
vt.SetAlignment(nAlign);
if (FXSYS_IsFloatZero(fFontSize))
@@ -1171,14 +1169,7 @@
const CPDF_Object* pV =
CPDF_FormField::GetFieldAttr(pAnnotDict, pdfium::form_fields::kV);
WideString swValue = pV ? pV->GetUnicodeText() : WideString();
- CPVT_FontMap map(pDoc,
- pStreamDict
- ? pStreamDict->GetMutableDictFor("Resources").Get()
- : nullptr,
- pDefFont, font_name);
- CPVT_VariableText::Provider prd(&map);
- CPVT_VariableText vt;
- vt.SetProvider(&prd);
+ CPVT_VariableText vt(&prd);
CFX_FloatRect rcButton = rcBody;
rcButton.left = rcButton.right - 13;
rcButton.Normalize();
@@ -1242,12 +1233,6 @@
break;
}
case CPDF_GenerateAP::kListBox: {
- CPVT_FontMap map(pDoc,
- pStreamDict
- ? pStreamDict->GetMutableDictFor("Resources").Get()
- : nullptr,
- pDefFont, font_name);
- CPVT_VariableText::Provider prd(&map);
CPDF_Array* pOpts =
ToArray(CPDF_FormField::GetFieldAttr(pAnnotDict, "Opt"));
CPDF_Array* pSels =
@@ -1280,15 +1265,14 @@
}
}
}
- CPVT_VariableText vt;
- vt.SetProvider(&prd);
+ CPVT_VariableText vt(&prd);
vt.SetPlateRect(
CFX_FloatRect(rcBody.left, 0.0f, rcBody.right, 0.0f));
vt.SetFontSize(FXSYS_IsFloatZero(fFontSize) ? 12.0f : fFontSize);
-
vt.Initialize();
vt.SetText(swItem);
vt.RearrangeAll();
+
float fItemHeight = vt.GetContentRect().Height();
if (bSelected) {
CFX_FloatRect rcItem = CFX_FloatRect(
diff --git a/core/fpdfdoc/cpvt_variabletext.cpp b/core/fpdfdoc/cpvt_variabletext.cpp
index 19da19f..d985b5b 100644
--- a/core/fpdfdoc/cpvt_variabletext.cpp
+++ b/core/fpdfdoc/cpvt_variabletext.cpp
@@ -166,7 +166,8 @@
return true;
}
-CPVT_VariableText::CPVT_VariableText() = default;
+CPVT_VariableText::CPVT_VariableText(Provider* pProvider)
+ : m_pVTProvider(pProvider) {}
CPVT_VariableText::~CPVT_VariableText() = default;
@@ -865,7 +866,7 @@
return m_pVTIterator.get();
}
-void CPVT_VariableText::SetProvider(CPVT_VariableText::Provider* pProvider) {
+void CPVT_VariableText::SetProvider(Provider* pProvider) {
m_pVTProvider = pProvider;
}
diff --git a/core/fpdfdoc/cpvt_variabletext.h b/core/fpdfdoc/cpvt_variabletext.h
index bdaedf2..77984b5 100644
--- a/core/fpdfdoc/cpvt_variabletext.h
+++ b/core/fpdfdoc/cpvt_variabletext.h
@@ -66,10 +66,10 @@
UnownedPtr<IPVT_FontMap> const m_pFontMap;
};
- CPVT_VariableText();
+ explicit CPVT_VariableText(Provider* Provider);
~CPVT_VariableText();
- void SetProvider(CPVT_VariableText::Provider* pProvider);
+ void SetProvider(Provider* pProvider);
CPVT_VariableText::Iterator* GetIterator();
CFX_FloatRect GetContentRect() const;
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.cpp b/fpdfsdk/pwl/cpwl_edit_impl.cpp
index 3cd89a2..77eeee9 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_impl.cpp
@@ -680,7 +680,8 @@
}
}
-CPWL_EditImpl::CPWL_EditImpl() : m_pVT(std::make_unique<CPVT_VariableText>()) {}
+CPWL_EditImpl::CPWL_EditImpl()
+ : m_pVT(std::make_unique<CPVT_VariableText>(nullptr)) {}
CPWL_EditImpl::~CPWL_EditImpl() = default;