Forward declare CPDF_ImageLoder in cpdf_imagerenderer.h
Use unique_ptr<> to decouple the two classes since they are
now cross-layer.
Change-Id: Id93d85ac8042eb5580fbc226cbafcfdef10fa0eb
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99953
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 0636aee..30cd39e 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -15,6 +15,7 @@
#include "core/fpdfapi/page/cpdf_dib.h"
#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_image.h"
+#include "core/fpdfapi/page/cpdf_imageloader.h"
#include "core/fpdfapi/page/cpdf_imageobject.h"
#include "core/fpdfapi/page/cpdf_occontext.h"
#include "core/fpdfapi/page/cpdf_page.h"
@@ -82,7 +83,8 @@
} // namespace
CPDF_ImageRenderer::CPDF_ImageRenderer(CPDF_RenderStatus* pStatus)
- : m_pRenderStatus(pStatus) {}
+ : m_pRenderStatus(pStatus),
+ m_pLoader(std::make_unique<CPDF_ImageLoader>()) {}
CPDF_ImageRenderer::~CPDF_ImageRenderer() = default;
@@ -90,7 +92,7 @@
if (!GetUnitRect().has_value())
return false;
- if (!m_Loader.Start(
+ if (!m_pLoader->Start(
m_pImageObject.Get(), m_pRenderStatus->GetContext()->GetPageCache(),
m_pRenderStatus->GetFormResource(),
m_pRenderStatus->GetPageResource(), m_bStdCS,
@@ -102,14 +104,14 @@
}
bool CPDF_ImageRenderer::StartRenderDIBBase() {
- if (!m_Loader.GetBitmap())
+ if (!m_pLoader->GetBitmap())
return false;
CPDF_GeneralState& state = m_pImageObject->m_GeneralState;
m_BitmapAlpha = FXSYS_roundf(255 * state.GetFillAlpha());
- m_pDIBBase = m_Loader.GetBitmap();
+ m_pDIBBase = m_pLoader->GetBitmap();
if (GetRenderOptions().ColorModeIs(CPDF_RenderOptions::kAlpha) &&
- !m_Loader.GetMask()) {
+ !m_pLoader->GetMask()) {
return StartBitmapAlpha();
}
RetainPtr<const CPDF_Object> pTR = state.GetTR();
@@ -118,7 +120,7 @@
state.SetTransferFunc(m_pRenderStatus->GetTransferFunc(std::move(pTR)));
if (state.GetTransferFunc() && !state.GetTransferFunc()->GetIdentity())
- m_pDIBBase = m_Loader.TranslateImage(state.GetTransferFunc());
+ m_pDIBBase = m_pLoader->TranslateImage(state.GetTransferFunc());
}
m_FillArgb = 0;
m_bPatternColor = false;
@@ -153,7 +155,7 @@
else if (m_pImageObject->GetImage()->IsInterpol())
m_ResampleOptions.bInterpolateBilinear = true;
- if (m_Loader.GetMask())
+ if (m_pLoader->GetMask())
return DrawMaskedImage();
if (m_bPatternColor)
@@ -262,11 +264,11 @@
m_ResampleOptions, true)) {
image_render.Continue(nullptr);
}
- if (m_Loader.MatteColor() == 0xffffffff)
+ if (m_pLoader->MatteColor() == 0xffffffff)
return;
- int matte_r = FXARGB_R(m_Loader.MatteColor());
- int matte_g = FXARGB_G(m_Loader.MatteColor());
- int matte_b = FXARGB_B(m_Loader.MatteColor());
+ int matte_r = FXARGB_R(m_pLoader->MatteColor());
+ int matte_g = FXARGB_G(m_pLoader->MatteColor());
+ int matte_b = FXARGB_B(m_pLoader->MatteColor());
for (int row = 0; row < rect.Height(); row++) {
uint8_t* dest_scan =
pBitmapDevice1->GetBitmap()->GetWritableScanline(row).data();
@@ -378,7 +380,7 @@
return true;
}
ClearBitmap(bitmap_device2, 0);
- CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_Loader.GetMask(),
+ CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_pLoader->GetMask(),
new_matrix, rect);
#if defined(_SKIA_SUPPORT_)
if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
@@ -556,7 +558,7 @@
}
bool CPDF_ImageRenderer::ContinueDefault(PauseIndicatorIface* pPause) {
- if (m_Loader.Continue(pPause))
+ if (m_pLoader->Continue(pPause))
return true;
if (!StartRenderDIBBase())
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.h b/core/fpdfapi/render/cpdf_imagerenderer.h
index fcbd3f7..66bb6ba 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.h
+++ b/core/fpdfapi/render/cpdf_imagerenderer.h
@@ -9,7 +9,6 @@
#include <memory>
-#include "core/fpdfapi/page/cpdf_imageloader.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/retain_ptr.h"
#include "core/fxcrt/unowned_ptr.h"
@@ -20,6 +19,7 @@
class CFX_DIBBase;
class CFX_DefaultRenderDevice;
class CFX_ImageTransformer;
+class CPDF_ImageLoader;
class CPDF_ImageObject;
class CPDF_Pattern;
class CPDF_RenderOptions;
@@ -84,7 +84,7 @@
RetainPtr<CFX_DIBBase> m_pDIBBase;
CFX_Matrix m_mtObj2Device;
CFX_Matrix m_ImageMatrix;
- CPDF_ImageLoader m_Loader;
+ std::unique_ptr<CPDF_ImageLoader> const m_pLoader;
std::unique_ptr<CFX_ImageTransformer> m_pTransformer;
std::unique_ptr<CFX_ImageRenderer> m_DeviceHandle;
Mode m_Mode = Mode::kNone;