Use factory method for CFX_SkiaDeviceDriver ctor.
Make a CFX_SkiaDeviceDriver ctor private and create a factory method
CFX_SkiaDeviceDriver::Create() around it. This will help notify errors
if error handling is needed in the future.
Change-Id: I0a5b301d7f652e430e96d1e777179d3b87d98666
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/103075
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Nigi <nigi@chromium.org>
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index ed75214..76e99be 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -47,6 +47,7 @@
#include "third_party/base/cxx17_backports.h"
#include "third_party/base/notreached.h"
#include "third_party/base/numerics/safe_conversions.h"
+#include "third_party/base/ptr_util.h"
#include "third_party/base/span.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
@@ -1333,6 +1334,18 @@
spaint->setStrokeJoin(join);
}
+// static
+std::unique_ptr<CFX_SkiaDeviceDriver> CFX_SkiaDeviceDriver::Create(
+ RetainPtr<CFX_DIBitmap> pBitmap,
+ bool bRgbByteOrder,
+ RetainPtr<CFX_DIBitmap> pBackdropBitmap,
+ bool bGroupKnockout) {
+ auto driver = pdfium::WrapUnique(
+ new CFX_SkiaDeviceDriver(std::move(pBitmap), bRgbByteOrder,
+ std::move(pBackdropBitmap), bGroupKnockout));
+ return driver;
+}
+
CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(
RetainPtr<CFX_DIBitmap> pBitmap,
bool bRgbByteOrder,
@@ -2205,9 +2218,10 @@
if (!pBitmap)
return false;
SetBitmap(pBitmap);
- SetDeviceDriver(std::make_unique<CFX_SkiaDeviceDriver>(
- std::move(pBitmap), bRgbByteOrder, std::move(pBackdropBitmap),
- bGroupKnockout));
+ auto driver =
+ CFX_SkiaDeviceDriver::Create(std::move(pBitmap), bRgbByteOrder,
+ std::move(pBackdropBitmap), bGroupKnockout);
+ SetDeviceDriver(std::move(driver));
return true;
}
@@ -2228,8 +2242,9 @@
return false;
SetBitmap(pBitmap);
- SetDeviceDriver(std::make_unique<CFX_SkiaDeviceDriver>(
- std::move(pBitmap), false, std::move(pBackdropBitmap), false));
+ auto driver = CFX_SkiaDeviceDriver::Create(std::move(pBitmap), false,
+ std::move(pBackdropBitmap), false);
+ SetDeviceDriver(std::move(driver));
return true;
}
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index 8ddee6c..06ff5ba 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -21,10 +21,12 @@
class CFX_SkiaDeviceDriver final : public RenderDeviceDriverIface {
public:
- CFX_SkiaDeviceDriver(RetainPtr<CFX_DIBitmap> pBitmap,
- bool bRgbByteOrder,
- RetainPtr<CFX_DIBitmap> pBackdropBitmap,
- bool bGroupKnockout);
+ static std::unique_ptr<CFX_SkiaDeviceDriver> Create(
+ RetainPtr<CFX_DIBitmap> pBitmap,
+ bool bRgbByteOrder,
+ RetainPtr<CFX_DIBitmap> pBackdropBitmap,
+ bool bGroupKnockout);
+
explicit CFX_SkiaDeviceDriver(SkPictureRecorder* recorder);
~CFX_SkiaDeviceDriver() override;
@@ -151,6 +153,11 @@
bool GetGroupKnockout() const { return m_bGroupKnockout; }
private:
+ CFX_SkiaDeviceDriver(RetainPtr<CFX_DIBitmap> pBitmap,
+ bool bRgbByteOrder,
+ RetainPtr<CFX_DIBitmap> pBackdropBitmap,
+ bool bGroupKnockout);
+
bool StartDIBitsSkia(const RetainPtr<CFX_DIBBase>& pBitmap,
int bitmap_alpha,
uint32_t color,
diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index 8258db2..dc51c1f 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -134,8 +134,7 @@
ASSERT_TRUE(bitmap);
FPDFBitmap_FillRect(bitmap.get(), 0, 0, kWidth, kHeight, 0x00000000);
RetainPtr<CFX_DIBitmap> pBitmap(CFXDIBitmapFromFPDFBitmap(bitmap.get()));
- auto driver =
- std::make_unique<CFX_SkiaDeviceDriver>(pBitmap, false, nullptr, false);
+ auto driver = CFX_SkiaDeviceDriver::Create(pBitmap, false, nullptr, false);
(*Test)(driver.get(), state);
driver->Flush();
uint32_t pixel = pBitmap->GetPixel(0, 0);