Change CFX_ImageRenderer to use float alpha values

Change yet another portion of the graphics stack to use float alpha
values.

Change-Id: Ic55b4383b92f2fd2155766e09b00bbb1ff52100b
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/115417
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index ef90113..7f96a87 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -1371,9 +1371,9 @@
   if (m_pBitmap->GetBuffer().empty())
     return true;
 
-  *handle = std::make_unique<CFX_ImageRenderer>(
-      m_pBitmap, m_pClipRgn.get(), pSource, FXSYS_roundf(alpha * 255), argb,
-      matrix, options, m_bRgbByteOrder);
+  *handle = std::make_unique<CFX_ImageRenderer>(m_pBitmap, m_pClipRgn.get(),
+                                                pSource, alpha, argb, matrix,
+                                                options, m_bRgbByteOrder);
   return true;
 }
 
diff --git a/core/fxge/dib/cfx_imagerenderer.cpp b/core/fxge/dib/cfx_imagerenderer.cpp
index 0631018..2848b3b 100644
--- a/core/fxge/dib/cfx_imagerenderer.cpp
+++ b/core/fxge/dib/cfx_imagerenderer.cpp
@@ -10,6 +10,7 @@
 
 #include <memory>
 
+#include "core/fxcrt/fx_system.h"
 #include "core/fxge/cfx_cliprgn.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
 #include "core/fxge/dib/cfx_imagestretcher.h"
@@ -19,7 +20,7 @@
     const RetainPtr<CFX_DIBitmap>& pDevice,
     const CFX_ClipRgn* pClipRgn,
     const RetainPtr<const CFX_DIBBase>& pSource,
-    int bitmap_alpha,
+    float alpha,
     uint32_t mask_color,
     const CFX_Matrix& matrix,
     const FXDIB_ResampleOptions& options,
@@ -27,7 +28,7 @@
     : m_pDevice(pDevice),
       m_pClipRgn(pClipRgn),
       m_Matrix(matrix),
-      m_BitmapAlpha(bitmap_alpha),
+      m_Alpha(alpha),
       m_MaskColor(mask_color),
       m_bRgbByteOrder(bRgbByteOrder) {
   FX_RECT image_rect = m_Matrix.GetUnitRect().GetOuterRect();
@@ -51,9 +52,9 @@
                                                m_Matrix.c > 0, m_Matrix.b < 0);
       const bool flip_x = m_Matrix.c > 0;
       const bool flip_y = m_Matrix.b < 0;
-      m_Composer.Compose(pDevice, pClipRgn, bitmap_alpha / 255.0f, mask_color,
-                         m_ClipBox, /*bVertical=*/true, flip_x, flip_y,
-                         m_bRgbByteOrder, BlendMode::kNormal);
+      m_Composer.Compose(pDevice, pClipRgn, alpha, mask_color, m_ClipBox,
+                         /*bVertical=*/true, flip_x, flip_y, m_bRgbByteOrder,
+                         BlendMode::kNormal);
       m_Stretcher = std::make_unique<CFX_ImageStretcher>(
           &m_Composer, pSource, dest_height, dest_width, bitmap_clip, options);
       if (m_Stretcher->Start())
@@ -79,8 +80,7 @@
 
   FX_RECT bitmap_clip = m_ClipBox;
   bitmap_clip.Offset(-image_rect.left, -image_rect.top);
-  m_Composer.Compose(pDevice, pClipRgn, bitmap_alpha / 255.0f, mask_color,
-                     m_ClipBox,
+  m_Composer.Compose(pDevice, pClipRgn, alpha, mask_color, m_ClipBox,
                      /*bVertical=*/false, /*bFlipX=*/false, /*bFlipY=*/false,
                      m_bRgbByteOrder, BlendMode::kNormal);
   m_State = State::kStretching;
@@ -104,15 +104,17 @@
     return false;
 
   if (pBitmap->IsMaskFormat()) {
-    if (m_BitmapAlpha != 255)
-      m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, m_BitmapAlpha);
+    if (m_Alpha != 1.0f) {
+      m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, FXSYS_roundf(m_Alpha * 255));
+    }
     m_pDevice->CompositeMask(m_pTransformer->result().left,
                              m_pTransformer->result().top, pBitmap->GetWidth(),
                              pBitmap->GetHeight(), pBitmap, m_MaskColor, 0, 0,
                              BlendMode::kNormal, m_pClipRgn, m_bRgbByteOrder);
   } else {
-    if (m_BitmapAlpha != 255)
-      pBitmap->MultiplyAlpha(m_BitmapAlpha / 255.0f);
+    if (m_Alpha != 1.0f) {
+      pBitmap->MultiplyAlpha(m_Alpha);
+    }
     m_pDevice->CompositeBitmap(
         m_pTransformer->result().left, m_pTransformer->result().top,
         pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, 0, 0,
diff --git a/core/fxge/dib/cfx_imagerenderer.h b/core/fxge/dib/cfx_imagerenderer.h
index c851017..6a29c9d 100644
--- a/core/fxge/dib/cfx_imagerenderer.h
+++ b/core/fxge/dib/cfx_imagerenderer.h
@@ -25,7 +25,7 @@
   CFX_ImageRenderer(const RetainPtr<CFX_DIBitmap>& pDevice,
                     const CFX_ClipRgn* pClipRgn,
                     const RetainPtr<const CFX_DIBBase>& pSource,
-                    int bitmap_alpha,
+                    float alpha,
                     uint32_t mask_color,
                     const CFX_Matrix& matrix,
                     const FXDIB_ResampleOptions& options,
@@ -44,7 +44,7 @@
   std::unique_ptr<CFX_ImageStretcher> m_Stretcher;
   CFX_BitmapComposer m_Composer;
   FX_RECT m_ClipBox;
-  const int m_BitmapAlpha;
+  const float m_Alpha;
   uint32_t m_MaskColor;
   State m_State = State::kInitial;
   const bool m_bRgbByteOrder;