Remove knowledge of CPDF_ImageObject from fpdfapi/font layer.
One less layering violation.
Change-Id: I34443a5224d2df06374bccd3d6299deb0ee62748
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/58010
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_type3char.cpp b/core/fpdfapi/font/cpdf_type3char.cpp
index 44ca22b..e8d8bf5 100644
--- a/core/fpdfapi/font/cpdf_type3char.cpp
+++ b/core/fpdfapi/font/cpdf_type3char.cpp
@@ -8,7 +8,6 @@
#include <utility>
-#include "core/fpdfapi/page/cpdf_imageobject.h"
#include "core/fxge/dib/cfx_dibitmap.h"
#include "core/fxge/fx_dib.h"
#include "third_party/base/ptr_util.h"
@@ -40,12 +39,11 @@
if (m_bColored)
return false;
- const CPDF_ImageObject* pImageObject = m_pForm->GetSoleImageOfForm();
- if (!pImageObject)
+ auto result = m_pForm->GetBitmapAndMatrixFromSoleImageOfForm();
+ if (!result.has_value())
return false;
- m_ImageMatrix = pImageObject->matrix();
- m_pBitmap = pImageObject->GetIndependentBitmap();
+ std::tie(m_pBitmap, m_ImageMatrix) = result.value();
m_pForm.reset();
return true;
}
diff --git a/core/fpdfapi/font/cpdf_type3char.h b/core/fpdfapi/font/cpdf_type3char.h
index 25b3838..acf6190 100644
--- a/core/fpdfapi/font/cpdf_type3char.h
+++ b/core/fpdfapi/font/cpdf_type3char.h
@@ -8,13 +8,14 @@
#define CORE_FPDFAPI_FONT_CPDF_TYPE3CHAR_H_
#include <memory>
+#include <utility>
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/retain_ptr.h"
+#include "third_party/base/optional.h"
class CFX_DIBitmap;
-class CPDF_ImageObject;
class CPDF_Type3Char {
public:
@@ -24,8 +25,9 @@
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;
+ virtual Optional<std::pair<RetainPtr<CFX_DIBitmap>, CFX_Matrix>>
+ GetBitmapAndMatrixFromSoleImageOfForm() const = 0;
};
CPDF_Type3Char();
diff --git a/core/fpdfapi/page/cpdf_form.cpp b/core/fpdfapi/page/cpdf_form.cpp
index 3033f1c..5b3bf73 100644
--- a/core/fpdfapi/page/cpdf_form.cpp
+++ b/core/fpdfapi/page/cpdf_form.cpp
@@ -14,6 +14,7 @@
#include "core/fpdfapi/page/cpdf_pageobjectholder.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
+#include "core/fxge/dib/cfx_dibitmap.h"
#include "third_party/base/ptr_util.h"
// static
@@ -109,6 +110,14 @@
return GetPageObjectCount() != 0;
}
-const CPDF_ImageObject* CPDF_Form::GetSoleImageOfForm() const {
- return GetPageObjectCount() == 1 ? (*begin())->AsImage() : nullptr;
+Optional<std::pair<RetainPtr<CFX_DIBitmap>, CFX_Matrix>>
+CPDF_Form::GetBitmapAndMatrixFromSoleImageOfForm() const {
+ if (GetPageObjectCount() != 1)
+ return {};
+
+ CPDF_ImageObject* pImageObject = (*begin())->AsImage();
+ if (!pImageObject)
+ return {};
+
+ return {{pImageObject->GetIndependentBitmap(), pImageObject->matrix()}};
}
diff --git a/core/fpdfapi/page/cpdf_form.h b/core/fpdfapi/page/cpdf_form.h
index 7b94dde..5c104b2 100644
--- a/core/fpdfapi/page/cpdf_form.h
+++ b/core/fpdfapi/page/cpdf_form.h
@@ -9,6 +9,7 @@
#include <memory>
#include <set>
+#include <utility>
#include "core/fpdfapi/font/cpdf_type3char.h"
#include "core/fpdfapi/page/cpdf_pageobjectholder.h"
@@ -41,8 +42,9 @@
// CPDF_Type3Char::FormIface:
void ParseContentForType3Char(CPDF_Type3Char* pType3Char) override;
bool HasPageObjects() const override;
- const CPDF_ImageObject* GetSoleImageOfForm() const override;
CFX_FloatRect CalcBoundingBox() const override;
+ Optional<std::pair<RetainPtr<CFX_DIBitmap>, CFX_Matrix>>
+ GetBitmapAndMatrixFromSoleImageOfForm() const override;
void ParseContent();
void ParseContent(const CPDF_AllStates* pGraphicStates,