Add a GetAlphaWithSrc() helper function.
Add a helper function to consolidate repeated code inside
CFX_ScanlineCompositor.
Change-Id: Ic3a5c3572f13c490da62235a7daa45bde7357819
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/65091
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index f8d4bd0..3c90d96 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -184,6 +184,18 @@
return clip_scan ? clip_scan[col] * src_alpha / 255 : src_alpha;
}
+int GetAlphaWithSrc(uint8_t src_alpha,
+ const uint8_t* clip_scan,
+ const uint8_t* src_scan,
+ int col) {
+ int result = src_alpha * src_scan[col];
+ if (clip_scan) {
+ result *= clip_scan[col];
+ result /= 255;
+ }
+ return result / 255;
+}
+
void CompositeRow_AlphaToMask(uint8_t* dest_scan,
const uint8_t* src_scan,
int pixel_count,
@@ -1512,12 +1524,7 @@
BlendMode blend_type,
const uint8_t* clip_scan) {
for (int col = 0; col < pixel_count; col++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
+ int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col);
uint8_t back_alpha = dest_scan[3];
if (back_alpha == 0) {
FXARGB_SETDIB(dest_scan, ArgbEncode(src_alpha, src_r, src_g, src_b));
@@ -1579,12 +1586,7 @@
const uint8_t* clip_scan,
uint8_t* dest_alpha_scan) {
for (int col = 0; col < pixel_count; col++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
+ int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col);
uint8_t back_alpha = *dest_alpha_scan;
if (back_alpha == 0) {
*dest_scan++ = src_b;
@@ -1651,12 +1653,7 @@
int Bpp,
const uint8_t* clip_scan) {
for (int col = 0; col < pixel_count; col++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
+ int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col);
if (src_alpha == 0) {
dest_scan += Bpp;
continue;
@@ -1698,12 +1695,7 @@
int pixel_count,
const uint8_t* clip_scan) {
for (int col = 0; col < pixel_count; col++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
+ int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col);
uint8_t back_alpha = *dest_scan;
if (!back_alpha) {
*dest_scan = src_alpha;
@@ -1721,12 +1713,7 @@
int pixel_count,
const uint8_t* clip_scan) {
for (int col = 0; col < pixel_count; col++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
+ int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col);
if (src_alpha) {
*dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, src_alpha);
}
@@ -1742,12 +1729,7 @@
const uint8_t* clip_scan,
uint8_t* dest_alpha_scan) {
for (int col = 0; col < pixel_count; col++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
+ int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col);
uint8_t back_alpha = *dest_alpha_scan;
if (back_alpha == 0) {
*dest_scan++ = src_gray;
@@ -2548,12 +2530,7 @@
BlendMode blend_type,
const uint8_t* clip_scan) {
for (int col = 0; col < pixel_count; col++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
+ int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col);
uint8_t back_alpha = dest_scan[3];
if (back_alpha == 0) {
FXARGB_SETRGBORDERDIB(dest_scan,
@@ -2611,12 +2588,7 @@
int Bpp,
const uint8_t* clip_scan) {
for (int col = 0; col < pixel_count; col++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
+ int src_alpha = GetAlphaWithSrc(mask_alpha, clip_scan, src_scan, col);
if (src_alpha == 0) {
dest_scan += Bpp;
continue;