Remove force_alpha parameter
Removes the force_alpha parameter from RealizeSkImage(), as this only
has an effect when the CFX_DIBBase is not in a mask format (k1bppMask or
k8bppMask). There is only one such case, which can be converted
trivially to use k8bppMask.
Also removes CFX_DefaultRenderDevice's SetBitsWithMask() overload, as
the implementation is equivalent to the one in CFX_RenderDevice.
Bug: pdfium:2034
Change-Id: I9f4ec7556b0132368063764b182e8a40e6e325e1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108710
Reviewed-by: Nigi <nigi@chromium.org>
Commit-Queue: K. Moon <kmoon@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 9a94a59..60d0fc1 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -364,6 +364,8 @@
}
CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_pLoader->GetMask(),
new_matrix, rect);
+ DCHECK(!bitmap_device2.GetBitmap()->HasPalette());
+ bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_Format::k8bppMask);
#if defined(_SKIA_SUPPORT_)
if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
m_pRenderStatus->GetRenderDevice()->SetBitsWithMask(
@@ -372,7 +374,6 @@
return false;
}
#endif
- bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_Format::k8bppMask);
bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
if (m_BitmapAlpha < 255)
bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha);
diff --git a/core/fxge/cfx_defaultrenderdevice.h b/core/fxge/cfx_defaultrenderdevice.h
index 112c4c7..4d94b7a 100644
--- a/core/fxge/cfx_defaultrenderdevice.h
+++ b/core/fxge/cfx_defaultrenderdevice.h
@@ -35,12 +35,6 @@
#if defined(_SKIA_SUPPORT_)
bool AttachCanvas(SkCanvas* canvas);
void Clear(uint32_t color);
- bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
- const RetainPtr<CFX_DIBBase>& pMask,
- int left,
- int top,
- int bitmap_alpha,
- BlendMode blend_type) override;
#endif
// Runtime check to see if Skia is the renderer variant in use.
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index e1d9487..5782f95 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -215,12 +215,12 @@
bool MultiplyAlpha(const RetainPtr<CFX_DIBBase>& mask);
#if defined(_SKIA_SUPPORT_)
- virtual bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
- const RetainPtr<CFX_DIBBase>& pMask,
- int left,
- int top,
- int bitmap_alpha,
- BlendMode blend_type);
+ bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
+ const RetainPtr<CFX_DIBBase>& pMask,
+ int left,
+ int top,
+ int bitmap_alpha,
+ BlendMode blend_type);
#endif
protected:
diff --git a/core/fxge/dib/cfx_dibbase.h b/core/fxge/dib/cfx_dibbase.h
index 4b8724d..5b1c6bf 100644
--- a/core/fxge/dib/cfx_dibbase.h
+++ b/core/fxge/dib/cfx_dibbase.h
@@ -90,12 +90,11 @@
const CFX_ClipRgn* pClipRgn) const;
#if defined(_SKIA_SUPPORT_)
- // Realizes an `SkImage` from this DIB. `force_alpha` forces gray images to be
- // treated as 8-bit alpha.
+ // Realizes an `SkImage` from this DIB.
//
// This may share the underlying pixels, in which case, this DIB should not be
// modified during the lifetime of the `SkImage`.
- virtual sk_sp<SkImage> RealizeSkImage(bool force_alpha) const;
+ virtual sk_sp<SkImage> RealizeSkImage() const;
#endif // defined(_SKIA_SUPPORT_)
protected:
diff --git a/core/fxge/skia/cfx_dibbase_skia.cpp b/core/fxge/skia/cfx_dibbase_skia.cpp
index 73179ef..d655641 100644
--- a/core/fxge/skia/cfx_dibbase_skia.cpp
+++ b/core/fxge/skia/cfx_dibbase_skia.cpp
@@ -218,10 +218,7 @@
} // namespace
-sk_sp<SkImage> CFX_DIBBase::RealizeSkImage(bool force_alpha) const {
- const SkColorType color_type = force_alpha || IsMaskFormat()
- ? SkColorType::kAlpha_8_SkColorType
- : SkColorType::kGray_8_SkColorType;
+sk_sp<SkImage> CFX_DIBBase::RealizeSkImage() const {
switch (GetBPP()) {
case 1: {
// By default, the two colors for grayscale are 0xFF and 0x00 unless they
@@ -247,7 +244,8 @@
}
return CreateSkiaImageFromTransformedDib</*source_bits_per_pixel=*/1>(
- *this, color_type, kPremul_SkAlphaType,
+ *this, IsMaskFormat() ? kAlpha_8_SkColorType : kGray_8_SkColorType,
+ kPremul_SkAlphaType,
[color0, color1](bool bit) { return bit ? color1 : color0; });
}
@@ -264,7 +262,9 @@
return palette[index];
});
}
- return CreateSkiaImageFromDib(this, color_type, kPremul_SkAlphaType);
+ return CreateSkiaImageFromDib(
+ this, IsMaskFormat() ? kAlpha_8_SkColorType : kGray_8_SkColorType,
+ kPremul_SkAlphaType);
case 24:
return CreateSkiaImageFromTransformedDib</*source_bits_per_pixel=*/24>(
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index ff2c8eb..1e803bf 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -956,10 +956,11 @@
return false;
}
- sk_sp<SkImage> skia_mask = mask->RealizeSkImage(/*force_alpha=*/true);
+ sk_sp<SkImage> skia_mask = mask->RealizeSkImage();
if (!skia_mask) {
return false;
}
+ DCHECK_EQ(skia_mask->colorType(), kAlpha_8_SkColorType);
SkPaint paint;
paint.setBlendMode(SkBlendMode::kDstIn);
@@ -1487,15 +1488,17 @@
BlendMode blend_type) {
DebugValidate(m_pBitmap, m_pBackdropBitmap);
- sk_sp<SkImage> skia_source = pSource->RealizeSkImage(/*force_alpha=*/false);
+ sk_sp<SkImage> skia_source = pSource->RealizeSkImage();
if (!skia_source) {
return false;
}
- sk_sp<SkImage> skia_mask = pMask->RealizeSkImage(/*force_alpha=*/true);
+ DCHECK(pMask->IsMaskFormat());
+ sk_sp<SkImage> skia_mask = pMask->RealizeSkImage();
if (!skia_mask) {
return false;
}
+ DCHECK_EQ(skia_mask->colorType(), kAlpha_8_SkColorType);
{
SkAutoCanvasRestore scoped_save_restore(m_pCanvas, /*doSave=*/true);
@@ -1556,7 +1559,7 @@
BlendMode blend_type) {
DebugValidate(m_pBitmap, m_pBackdropBitmap);
- sk_sp<SkImage> skia_source = pSource->RealizeSkImage(/*force_alpha=*/false);
+ sk_sp<SkImage> skia_source = pSource->RealizeSkImage();
if (!skia_source) {
return false;
}
@@ -1653,14 +1656,3 @@
SetDeviceDriver(std::move(driver));
return true;
}
-
-bool CFX_DefaultRenderDevice::SetBitsWithMask(
- const RetainPtr<CFX_DIBBase>& pBitmap,
- const RetainPtr<CFX_DIBBase>& pMask,
- int left,
- int top,
- int bitmap_alpha,
- BlendMode blend_type) {
- return static_cast<CFX_SkiaDeviceDriver*>(GetDeviceDriver())
- ->SetBitsWithMask(pBitmap, pMask, left, top, bitmap_alpha, blend_type);
-}