Use CPDF_Type3Char::FormIface rather than CPDF_Form in cpdf_type3font.cpp
In turn, this shows one omission in the callback interface, where
we don't want to virtualize a base class method, so wrap it instead.
Separated out from future CL since it can go by itself.
Change-Id: I59e325d53bf99dbc0300012ad45594871360cfae
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/58031
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_type3char.h b/core/fpdfapi/font/cpdf_type3char.h
index a7d855e..25b3838 100644
--- a/core/fpdfapi/font/cpdf_type3char.h
+++ b/core/fpdfapi/font/cpdf_type3char.h
@@ -23,6 +23,7 @@
virtual ~FormIface() {}
virtual void ParseContentForType3Char(CPDF_Type3Char* pChar) = 0;
+ virtual bool HasPageObjects() const = 0;
virtual const CPDF_ImageObject* GetSoleImageOfForm() const = 0;
virtual CFX_FloatRect CalcBoundingBox() const = 0;
};
diff --git a/core/fpdfapi/font/cpdf_type3font.cpp b/core/fpdfapi/font/cpdf_type3font.cpp
index 5787dc9..f7c58c2 100644
--- a/core/fpdfapi/font/cpdf_type3font.cpp
+++ b/core/fpdfapi/font/cpdf_type3font.cpp
@@ -110,10 +110,11 @@
if (!pStream)
return nullptr;
- auto pForm = pdfium::MakeUnique<CPDF_Form>(
- m_pDocument.Get(),
- m_pFontResources ? m_pFontResources.Get() : m_pPageResources.Get(),
- pStream);
+ std::unique_ptr<CPDF_Type3Char::FormIface> pForm =
+ pdfium::MakeUnique<CPDF_Form>(
+ m_pDocument.Get(),
+ m_pFontResources ? m_pFontResources.Get() : m_pPageResources.Get(),
+ pStream);
auto pNewChar = pdfium::MakeUnique<CPDF_Type3Char>();
@@ -130,7 +131,7 @@
return it->second.get();
pNewChar->Transform(pForm.get(), m_FontMatrix);
- if (pForm->GetPageObjectCount() != 0)
+ if (pForm->HasPageObjects())
pNewChar->SetForm(std::move(pForm));
CPDF_Type3Char* pCachedChar = pNewChar.get();
diff --git a/core/fpdfapi/page/cpdf_form.cpp b/core/fpdfapi/page/cpdf_form.cpp
index cef03d0..3033f1c 100644
--- a/core/fpdfapi/page/cpdf_form.cpp
+++ b/core/fpdfapi/page/cpdf_form.cpp
@@ -105,6 +105,10 @@
return m_pFormStream.Get();
}
+bool CPDF_Form::HasPageObjects() const {
+ return GetPageObjectCount() != 0;
+}
+
const CPDF_ImageObject* CPDF_Form::GetSoleImageOfForm() const {
return GetPageObjectCount() == 1 ? (*begin())->AsImage() : nullptr;
}
diff --git a/core/fpdfapi/page/cpdf_form.h b/core/fpdfapi/page/cpdf_form.h
index f9b2e2e..7b94dde 100644
--- a/core/fpdfapi/page/cpdf_form.h
+++ b/core/fpdfapi/page/cpdf_form.h
@@ -40,6 +40,7 @@
// CPDF_Type3Char::FormIface:
void ParseContentForType3Char(CPDF_Type3Char* pType3Char) override;
+ bool HasPageObjects() const override;
const CPDF_ImageObject* GetSoleImageOfForm() const override;
CFX_FloatRect CalcBoundingBox() const override;