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); -}