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