Change CPDF_RenderStatus::CompositeDIBitmap() to take a float alpha
Convert another method and its caller to use float alpha values.
Change-Id: I6f6753aee3188a9ad7ec27a9f76550b2509a427e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/115453
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 6db5359..ef33f9f 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -457,9 +457,9 @@
RetainPtr<CFX_DIBitmap> pStretched = m_pDIBBase->StretchTo(
dest_width, dest_height, m_ResampleOptions, &dest_clip);
if (pStretched) {
- m_pRenderStatus->CompositeDIBitmap(pStretched, dest_rect.left,
- dest_rect.top, m_FillArgb, m_BitmapAlpha,
- m_BlendType, CPDF_Transparency());
+ m_pRenderStatus->CompositeDIBitmap(
+ pStretched, dest_rect.left, dest_rect.top, m_FillArgb,
+ m_BitmapAlpha / 255.0f, m_BlendType, CPDF_Transparency());
}
return false;
}
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index de5fa6e..0ba2913 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -699,8 +699,8 @@
bitmap_device.GetBitmap()->UnPreMultiply();
}
#endif
- CompositeDIBitmap(bitmap_device.GetBitmap(), rect.left, rect.top, 0, 255,
- blend_type, transparency);
+ CompositeDIBitmap(bitmap_device.GetBitmap(), rect.left, rect.top,
+ /*mask_argb=*/0, /*alpha=*/1.0f, blend_type, transparency);
return true;
}
@@ -1147,7 +1147,8 @@
if (!pScreen)
return;
- CompositeDIBitmap(pScreen, clip_box.left, clip_box.top, 0, 255,
+ constexpr FX_ARGB kMask = 0;
+ CompositeDIBitmap(pScreen, clip_box.left, clip_box.top, kMask, /*alpha=*/1.0f,
BlendMode::kNormal, CPDF_Transparency());
}
@@ -1202,32 +1203,33 @@
int left,
int top,
FX_ARGB mask_argb,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_mode,
const CPDF_Transparency& transparency) {
CHECK(pDIBitmap);
if (blend_mode == BlendMode::kNormal) {
if (!pDIBitmap->IsMaskFormat()) {
- if (bitmap_alpha < 255) {
+ if (alpha != 1.0f) {
if (CFX_DefaultRenderDevice::UseSkiaRenderer()) {
std::unique_ptr<CFX_ImageRenderer> dummy;
- CFX_Matrix m = CFX_RenderDevice::GetFlipMatrix(
+ CFX_Matrix matrix = CFX_RenderDevice::GetFlipMatrix(
pDIBitmap->GetWidth(), pDIBitmap->GetHeight(), left, top);
- m_pDevice->StartDIBits(pDIBitmap, bitmap_alpha, 0, m,
+ const int bitmap_alpha = FXSYS_roundf(alpha * 255);
+ m_pDevice->StartDIBits(pDIBitmap, bitmap_alpha, /*color=*/0, matrix,
FXDIB_ResampleOptions(), &dummy);
return;
}
- pDIBitmap->MultiplyAlpha(bitmap_alpha / 255.0f);
+ pDIBitmap->MultiplyAlpha(alpha);
}
if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
return;
}
} else {
uint32_t fill_argb = m_Options.TranslateColor(mask_argb);
- if (bitmap_alpha < 255) {
+ if (alpha != 1.0f) {
uint8_t* fill_argb8 = reinterpret_cast<uint8_t*>(&fill_argb);
- fill_argb8[3] *= bitmap_alpha / 255;
+ fill_argb8[3] *= FXSYS_roundf(alpha * 255) / 255;
}
if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) {
return;
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h
index 81fd4dd..622d8a0 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.h
+++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -117,7 +117,7 @@
int left,
int top,
FX_ARGB mask_argb,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_mode,
const CPDF_Transparency& transparency);