Use FXDIB_ALPHA_UNION() in more places in cfx_scanlinecompositor.cpp

Replace a bunch of duplicate code with FXDIB_ALPHA_UNION(). Then change
this macro to an actual function and rename it AlphaUnion().

Change-Id: Ib53953e18a59e7888c96276f45fe599dda6515e2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/123151
Reviewed-by: Tom Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index 2ff41bc..02a0c6c 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -21,10 +21,12 @@
 
 using fxge::Blend;
 
-#define FXDIB_ALPHA_UNION(dest, src) ((dest) + (src) - (dest) * (src) / 255)
-
 namespace {
 
+uint8_t AlphaUnion(uint8_t dest, uint8_t src) {
+  return dest + src - dest * src / 255;
+}
+
 template <typename T, typename U>
 void CopyInputAndAlpha(const T& input, uint8_t alpha, U& output) {
   output.blue = input.blue;
@@ -165,7 +167,7 @@
   if (src_alpha == 0) {
     return;
   }
-  output = FXDIB_ALPHA_UNION(output, src_alpha);
+  output = AlphaUnion(output, src_alpha);
 }
 
 void CompositeRowArgb2Mask(pdfium::span<const FX_BGRA_STRUCT<uint8_t>> src_span,
@@ -195,7 +197,7 @@
       return;
     }
     for (int i = 0; i < width; ++i) {
-      *dest_scan = FXDIB_ALPHA_UNION(*dest_scan, *clip_scan);
+      *dest_scan = AlphaUnion(*dest_scan, *clip_scan);
       ++dest_scan;
       ++clip_scan;
     }
@@ -355,8 +357,7 @@
         src_scan += src_Bpp;
         continue;
       }
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       if (bNonseparableBlend) {
@@ -403,8 +404,7 @@
         continue;
       }
       int back_alpha = dest_scan[3];
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       for (int color = 0; color < 3; color++) {
@@ -549,7 +549,7 @@
     return;
   }
 
-  const uint8_t dest_alpha = FXDIB_ALPHA_UNION(output.alpha, src_alpha);
+  const uint8_t dest_alpha = AlphaUnion(output.alpha, src_alpha);
   const int alpha_ratio = src_alpha * 255 / dest_alpha;
   FX_RGB_STRUCT<int> blended_color = RgbBlend(blend_type, input, output);
   AlphaMergeToSource(input, blended_color, output.alpha);
@@ -571,7 +571,7 @@
     return;
   }
 
-  const uint8_t dest_alpha = FXDIB_ALPHA_UNION(output.alpha, src_alpha);
+  const uint8_t dest_alpha = AlphaUnion(output.alpha, src_alpha);
   const int alpha_ratio = src_alpha * 255 / dest_alpha;
   FX_RGB_STRUCT<int> blended_color = {
       .red = Blend(blend_type, output.red, input.red),
@@ -596,7 +596,7 @@
     return;
   }
 
-  const uint8_t dest_alpha = FXDIB_ALPHA_UNION(output.alpha, src_alpha);
+  const uint8_t dest_alpha = AlphaUnion(output.alpha, src_alpha);
   const int alpha_ratio = src_alpha * 255 / dest_alpha;
   AlphaMerge(input, output, alpha_ratio);
   output.alpha = dest_alpha;
@@ -982,8 +982,7 @@
         continue;
       }
       int back_alpha = dest_scan[3];
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
@@ -1040,8 +1039,7 @@
         continue;
       }
       int back_alpha = dest_scan[3];
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
@@ -1078,8 +1076,7 @@
         dest_scan += 4;
         continue;
       }
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       if (IsNonSeparableBlendMode(blend_type)) {
@@ -1185,7 +1182,7 @@
     if (!back_alpha) {
       *dest_scan = src_alpha;
     } else if (src_alpha) {
-      *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      *dest_scan = AlphaUnion(back_alpha, src_alpha);
     }
     UNSAFE_TODO(dest_scan++);
   }
@@ -1245,8 +1242,7 @@
         dest_scan += 4;
         continue;
       }
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       if (IsNonSeparableBlendMode(blend_type)) {
@@ -1381,7 +1377,7 @@
       if (!back_alpha) {
         *dest_scan = src_alpha;
       } else if (src_alpha) {
-        *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+        *dest_scan = AlphaUnion(back_alpha, src_alpha);
       }
       dest_scan++;
     }
@@ -1563,8 +1559,7 @@
         src_scan += src_Bpp;
         continue;
       }
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       if (bNonseparableBlend) {
@@ -1658,8 +1653,7 @@
         continue;
       }
       int back_alpha = dest_scan[3];
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       for (int color = 0; color < 3; color++) {
@@ -1831,8 +1825,7 @@
         continue;
       }
       int back_alpha = dest_scan[3];
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, alpha_ratio);
@@ -1899,8 +1892,7 @@
         continue;
       }
       int back_alpha = dest_scan[3];
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, alpha_ratio);
@@ -1936,8 +1928,7 @@
         dest_scan += 4;
         continue;
       }
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       if (IsNonSeparableBlendMode(blend_type)) {
@@ -2064,8 +2055,7 @@
         dest_scan += 4;
         continue;
       }
-      uint8_t dest_alpha =
-          back_alpha + src_alpha - back_alpha * src_alpha / 255;
+      uint8_t dest_alpha = AlphaUnion(back_alpha, src_alpha);
       dest_scan[3] = dest_alpha;
       int alpha_ratio = src_alpha * 255 / dest_alpha;
       if (IsNonSeparableBlendMode(blend_type)) {