Change SetBitsWithMask() methods to take alpha as a float
Consistently use float values in more of the graphics stack.
SetBitsWithMask() is Skia-only and Skia actually prefers alpha values as
floats.
Along the way, refactor fx_skia_device.cpp, so SetBitmapPaintForMerge()
has one fewer parameter, considering the only caller passes in a
constant value.
Change-Id: Ica08c73d46997731bd2f6f49ccf0748fca99da36
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/115415
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 6584e06..6db5359 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -359,7 +359,7 @@
if (CFX_DefaultRenderDevice::UseSkiaRenderer() &&
m_pRenderStatus->GetRenderDevice()->SetBitsWithMask(
bitmap_device1.GetBitmap(), bitmap_device2.GetBitmap(), rect.left,
- rect.top, m_BitmapAlpha, m_BlendType)) {
+ rect.top, m_BitmapAlpha / 255.0f, m_BlendType)) {
return false;
}
#endif
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index 48ed249..80596b7 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -1004,10 +1004,10 @@
const RetainPtr<CFX_DIBBase>& pMask,
int left,
int top,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_type) {
- return m_pDeviceDriver->SetBitsWithMask(pBitmap, pMask, left, top,
- bitmap_alpha, blend_type);
+ return m_pDeviceDriver->SetBitsWithMask(pBitmap, pMask, left, top, alpha,
+ blend_type);
}
bool CFX_RenderDevice::SyncInternalBitmaps() {
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index b79a6e3..4c1d64d 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -222,7 +222,7 @@
const RetainPtr<CFX_DIBBase>& pMask,
int left,
int top,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_type);
bool SyncInternalBitmaps();
#endif
diff --git a/core/fxge/renderdevicedriver_iface.cpp b/core/fxge/renderdevicedriver_iface.cpp
index 9fe811c..faff0b4 100644
--- a/core/fxge/renderdevicedriver_iface.cpp
+++ b/core/fxge/renderdevicedriver_iface.cpp
@@ -77,7 +77,7 @@
const RetainPtr<CFX_DIBBase>& pMask,
int left,
int top,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_type) {
return false;
}
diff --git a/core/fxge/renderdevicedriver_iface.h b/core/fxge/renderdevicedriver_iface.h
index 5120ebb..adc10d2 100644
--- a/core/fxge/renderdevicedriver_iface.h
+++ b/core/fxge/renderdevicedriver_iface.h
@@ -113,7 +113,7 @@
const RetainPtr<CFX_DIBBase>& pMask,
int left,
int top,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_type);
virtual void SetGroupKnockout(bool group_knockout);
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 9435bb4..e2e88c9 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -595,14 +595,14 @@
void SetBitmapPaintForMerge(bool is_mask,
bool anti_alias,
- uint32_t argb,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_type,
SkPaint* paint) {
- if (is_mask)
- paint->setColorFilter(SkColorFilters::Blend(argb, SkBlendMode::kSrc));
+ if (is_mask) {
+ paint->setColorFilter(SkColorFilters::Blend(0xFFFFFFFF, SkBlendMode::kSrc));
+ }
- paint->setAlpha(bitmap_alpha);
+ paint->setAlphaf(alpha);
paint->setAntiAlias(anti_alias);
paint->setBlendMode(GetSkiaBlendMode(blend_type));
}
@@ -1488,7 +1488,7 @@
bool CFX_SkiaDeviceDriver::DrawBitsWithMask(
const RetainPtr<CFX_DIBBase>& pSource,
const RetainPtr<CFX_DIBBase>& pMask,
- int bitmap_alpha,
+ float alpha,
const CFX_Matrix& matrix,
BlendMode blend_type) {
DebugValidate(m_pBitmap);
@@ -1515,7 +1515,7 @@
m_pCanvas->concat(skMatrix);
SkPaint paint;
SetBitmapPaintForMerge(pSource->IsMaskFormat(), !m_FillOptions.aliased_path,
- 0xFFFFFFFF, bitmap_alpha, blend_type, &paint);
+ alpha, blend_type, &paint);
sk_sp<SkShader> source_shader = skia_source->makeShader(
SkTileMode::kClamp, SkTileMode::kClamp, SkSamplingOptions());
sk_sp<SkShader> mask_shader = skia_mask->makeShader(
@@ -1536,15 +1536,15 @@
const RetainPtr<CFX_DIBBase>& pMask,
int dest_left,
int dest_top,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_type) {
if (m_pBitmap->GetBuffer().empty()) {
return true;
}
- CFX_Matrix m = CFX_RenderDevice::GetFlipMatrix(
+ CFX_Matrix matrix = CFX_RenderDevice::GetFlipMatrix(
pBitmap->GetWidth(), pBitmap->GetHeight(), dest_left, dest_top);
- return DrawBitsWithMask(pBitmap, pMask, bitmap_alpha, m, blend_type);
+ return DrawBitsWithMask(pBitmap, pMask, alpha, matrix, blend_type);
}
void CFX_SkiaDeviceDriver::SetGroupKnockout(bool group_knockout) {
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index 00626db..d455e43 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -105,7 +105,7 @@
const RetainPtr<CFX_DIBBase>& pMask,
int dest_left,
int dest_top,
- int bitmap_alpha,
+ float alpha,
BlendMode blend_type) override;
void SetGroupKnockout(bool group_knockout) override;
bool SyncInternalBitmaps() override;
@@ -133,7 +133,7 @@
bool DrawBitsWithMask(const RetainPtr<CFX_DIBBase>& pSource,
const RetainPtr<CFX_DIBBase>& pMask,
- int bitmap_alpha,
+ float alpha,
const CFX_Matrix& matrix,
BlendMode blend_type);