Make CFX_RenderDevice::GetDeviceDriver() a protected method
Add DrawShading() wrapper method for the one public caller.
-- Rework test to create driver directly.
Change-Id: I036f455863eadff5ea2ec4417d00c0007068f10a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99990
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_rendershading.cpp b/core/fpdfapi/render/cpdf_rendershading.cpp
index df6e23d..1a50e61 100644
--- a/core/fpdfapi/render/cpdf_rendershading.cpp
+++ b/core/fpdfapi/render/cpdf_rendershading.cpp
@@ -907,8 +907,8 @@
}
bool bAlphaMode = options.ColorModeIs(CPDF_RenderOptions::kAlpha);
if (pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SHADING &&
- pDevice->GetDeviceDriver()->DrawShading(
- pPattern, &mtMatrix, clip_rect_bbox, alpha, bAlphaMode)) {
+ pDevice->DrawShading(pPattern, &mtMatrix, clip_rect_bbox, alpha,
+ bAlphaMode)) {
return;
}
CPDF_DeviceBuffer buffer(pContext, pDevice, clip_rect_bbox, pCurObj, 150);
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index 23793f7..9e40642 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -1354,6 +1354,15 @@
}
}
+bool CFX_RenderDevice::DrawShading(const CPDF_ShadingPattern* pPattern,
+ const CFX_Matrix* pMatrix,
+ const FX_RECT& clip_rect,
+ int alpha,
+ bool bAlphaMode) {
+ return m_pDeviceDriver->DrawShading(pPattern, pMatrix, clip_rect, alpha,
+ bAlphaMode);
+}
+
void CFX_RenderDevice::DrawBorder(const CFX_Matrix* pUser2Device,
const CFX_FloatRect& rect,
float fWidth,
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index 0076b2f..e0a15f0 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -54,10 +54,6 @@
float left,
float top);
- RenderDeviceDriverIface* GetDeviceDriver() const {
- return m_pDeviceDriver.get();
- }
-
void SaveState();
void RestoreState(bool bKeepSaved);
@@ -206,6 +202,11 @@
int32_t nTransparency,
int32_t nStartGray,
int32_t nEndGray);
+ bool DrawShading(const CPDF_ShadingPattern* pPattern,
+ const CFX_Matrix* pMatrix,
+ const FX_RECT& clip_rect,
+ int alpha,
+ bool bAlphaMode);
#if defined(_SKIA_SUPPORT_)
virtual void DebugVerifyBitmapIsPreMultiplied() const;
@@ -224,6 +225,9 @@
CFX_RenderDevice();
void SetDeviceDriver(std::unique_ptr<RenderDeviceDriverIface> pDriver);
+ RenderDeviceDriverIface* GetDeviceDriver() const {
+ return m_pDeviceDriver.get();
+ }
private:
void InitDeviceInfo();
diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index 4060e0a..afa875a 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -2,6 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "core/fxge/skia/fx_skia_device.h"
+
+#include <memory>
+
#include "core/fxge/cfx_defaultrenderdevice.h"
#include "core/fxge/cfx_fillrenderoptions.h"
#include "core/fxge/cfx_font.h"
@@ -9,7 +13,6 @@
#include "core/fxge/cfx_path.h"
#include "core/fxge/cfx_renderdevice.h"
#include "core/fxge/cfx_textrenderoptions.h"
-#include "core/fxge/skia/fx_skia_device.h"
#include "core/fxge/text_char_pos.h"
#include "fpdfsdk/cpdfsdk_helpers.h"
#include "public/cpp/fpdf_scopers.h"
@@ -130,18 +133,13 @@
ScopedFPDFBitmap bitmap(FPDFBitmap_Create(kWidth, kHeight, 1));
ASSERT_TRUE(bitmap);
FPDFBitmap_FillRect(bitmap.get(), 0, 0, kWidth, kHeight, 0x00000000);
- CFX_DefaultRenderDevice device;
RetainPtr<CFX_DIBitmap> pBitmap(CFXDIBitmapFromFPDFBitmap(bitmap.get()));
- device.Attach(pBitmap);
- auto* driver = static_cast<CFX_SkiaDeviceDriver*>(device.GetDeviceDriver());
- (*Test)(driver, state);
+ auto driver =
+ std::make_unique<CFX_SkiaDeviceDriver>(pBitmap, false, nullptr, false);
+ (*Test)(driver.get(), state);
driver->Flush();
uint32_t pixel = pBitmap->GetPixel(0, 0);
EXPECT_EQ(state.m_pixel, pixel);
-#ifdef SK_DEBUG
- if (!driver) // force dump to be linked in so it can be called from debugger
- driver->Dump();
-#endif
}
} // namespace