Unnest some code in CFX_ScanlineCompositor.
Use early returns to reduce nesting.
Change-Id: I53ccafc7c319cb8f54b7a1ae8ebda9e4ac7a8003
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/102673
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 b8b3ac4..4da229a 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -2381,6 +2381,7 @@
}
return;
}
+
if (m_DestFormat == FXDIB_Format::k8bppMask) {
if (GetIsAlphaFromFormat(m_SrcFormat)) {
DCHECK_EQ(m_SrcFormat, FXDIB_Format::kArgb);
@@ -2388,7 +2389,10 @@
} else {
CompositeRow_Rgb2Mask(dest_scan, width, clip_scan);
}
- } else if (GetBppFromFormat(m_DestFormat) == 8) {
+ return;
+ }
+
+ if (GetBppFromFormat(m_DestFormat) == 8) {
DCHECK(!GetIsAlphaFromFormat(m_DestFormat));
if (GetIsAlphaFromFormat(m_SrcFormat)) {
CompositeRow_Argb2Gray(dest_scan, src_scan, width, m_BlendType,
@@ -2397,58 +2401,58 @@
CompositeRow_Rgb2Gray(dest_scan, src_scan, src_Bpp, width, m_BlendType,
clip_scan);
}
- } else {
- switch (m_iTransparency) {
- case 0:
- case 4:
- case 8:
- case 4 + 8: {
- CompositeRow_Argb2Argb(dest_scan, src_scan, width, m_BlendType,
- clip_scan);
- } break;
- case 1:
- CompositeRow_Rgb2Argb_Blend_NoClip(dest_scan, src_scan, width,
- m_BlendType, src_Bpp);
- break;
- case 1 + 8:
- CompositeRow_Rgb2Argb_Blend_Clip(dest_scan, src_scan, width,
- m_BlendType, src_Bpp, clip_scan);
- break;
- case 1 + 4:
- CompositeRow_Rgb2Argb_NoBlend_NoClip(dest_scan, src_scan, width,
- src_Bpp);
- break;
- case 1 + 4 + 8:
- CompositeRow_Rgb2Argb_NoBlend_Clip(dest_scan, src_scan, width, src_Bpp,
- clip_scan);
- break;
- case 2:
- case 2 + 8:
- CompositeRow_Argb2Rgb_Blend(dest_scan, src_scan, width, m_BlendType,
- dest_Bpp, clip_scan);
- break;
- case 2 + 4:
- case 2 + 4 + 8:
- CompositeRow_Argb2Rgb_NoBlend(dest_scan, src_scan, width, dest_Bpp,
- clip_scan);
- break;
- case 1 + 2:
- CompositeRow_Rgb2Rgb_Blend_NoClip(dest_scan, src_scan, width,
- m_BlendType, dest_Bpp, src_Bpp);
- break;
- case 1 + 2 + 8:
- CompositeRow_Rgb2Rgb_Blend_Clip(dest_scan, src_scan, width, m_BlendType,
- dest_Bpp, src_Bpp, clip_scan);
- break;
- case 1 + 2 + 4:
- CompositeRow_Rgb2Rgb_NoBlend_NoClip(dest_scan, src_scan, width,
- dest_Bpp, src_Bpp);
- break;
- case 1 + 2 + 4 + 8:
- CompositeRow_Rgb2Rgb_NoBlend_Clip(dest_scan, src_scan, width, dest_Bpp,
- src_Bpp, clip_scan);
- break;
- }
+ return;
+ }
+
+ switch (m_iTransparency) {
+ case 0:
+ case 4:
+ case 8:
+ case 4 + 8: {
+ CompositeRow_Argb2Argb(dest_scan, src_scan, width, m_BlendType,
+ clip_scan);
+ } break;
+ case 1:
+ CompositeRow_Rgb2Argb_Blend_NoClip(dest_scan, src_scan, width,
+ m_BlendType, src_Bpp);
+ break;
+ case 1 + 8:
+ CompositeRow_Rgb2Argb_Blend_Clip(dest_scan, src_scan, width, m_BlendType,
+ src_Bpp, clip_scan);
+ break;
+ case 1 + 4:
+ CompositeRow_Rgb2Argb_NoBlend_NoClip(dest_scan, src_scan, width, src_Bpp);
+ break;
+ case 1 + 4 + 8:
+ CompositeRow_Rgb2Argb_NoBlend_Clip(dest_scan, src_scan, width, src_Bpp,
+ clip_scan);
+ break;
+ case 2:
+ case 2 + 8:
+ CompositeRow_Argb2Rgb_Blend(dest_scan, src_scan, width, m_BlendType,
+ dest_Bpp, clip_scan);
+ break;
+ case 2 + 4:
+ case 2 + 4 + 8:
+ CompositeRow_Argb2Rgb_NoBlend(dest_scan, src_scan, width, dest_Bpp,
+ clip_scan);
+ break;
+ case 1 + 2:
+ CompositeRow_Rgb2Rgb_Blend_NoClip(dest_scan, src_scan, width, m_BlendType,
+ dest_Bpp, src_Bpp);
+ break;
+ case 1 + 2 + 8:
+ CompositeRow_Rgb2Rgb_Blend_Clip(dest_scan, src_scan, width, m_BlendType,
+ dest_Bpp, src_Bpp, clip_scan);
+ break;
+ case 1 + 2 + 4:
+ CompositeRow_Rgb2Rgb_NoBlend_NoClip(dest_scan, src_scan, width, dest_Bpp,
+ src_Bpp);
+ break;
+ case 1 + 2 + 4 + 8:
+ CompositeRow_Rgb2Rgb_NoBlend_Clip(dest_scan, src_scan, width, dest_Bpp,
+ src_Bpp, clip_scan);
+ break;
}
}
@@ -2488,10 +2492,12 @@
}
return;
}
+
if (m_DestFormat == FXDIB_Format::k8bppMask) {
CompositeRow_Rgb2Mask(dest_scan, width, clip_scan);
return;
}
+
if (GetBppFromFormat(m_DestFormat) == 8) {
DCHECK(!GetIsAlphaFromFormat(m_DestFormat));
if (m_iTransparency & 8) {
@@ -2503,36 +2509,37 @@
m_SrcPalette.Get8BitPalette(), width,
m_BlendType, clip_scan);
}
- } else {
- switch (m_iTransparency) {
- case 1 + 2:
- CompositeRow_8bppRgb2Argb_NoBlend(dest_scan, src_scan, width,
- m_SrcPalette.Get32BitPalette(),
- clip_scan);
- break;
- case 1 + 2 + 8:
- CompositeRow_1bppRgb2Argb_NoBlend(dest_scan, src_scan, src_left, width,
- m_SrcPalette.Get32BitPalette(),
- clip_scan);
- break;
- case 0:
- case 0 + 2:
- CompositeRow_8bppRgb2Rgb_NoBlend(
- dest_scan, src_scan, m_SrcPalette.Get32BitPalette(), width,
- GetCompsFromFormat(m_DestFormat), clip_scan);
- break;
- case 0 + 8:
- CompositeRow_1bppRgb2Rgb_NoBlend(
- dest_scan, src_scan, src_left, m_SrcPalette.Get32BitPalette(),
- width, GetCompsFromFormat(m_DestFormat), clip_scan);
- break;
- case 0 + 2 + 8:
- // TODO(thestig): Check if empty span argument is always empty.
- CompositeRow_1bppRgb2Rgba_NoBlend(dest_scan, src_scan, src_left, width,
- m_SrcPalette.Get32BitPalette(),
- clip_scan, {});
- break;
- }
+ return;
+ }
+
+ switch (m_iTransparency) {
+ case 1 + 2:
+ CompositeRow_8bppRgb2Argb_NoBlend(dest_scan, src_scan, width,
+ m_SrcPalette.Get32BitPalette(),
+ clip_scan);
+ break;
+ case 1 + 2 + 8:
+ CompositeRow_1bppRgb2Argb_NoBlend(dest_scan, src_scan, src_left, width,
+ m_SrcPalette.Get32BitPalette(),
+ clip_scan);
+ break;
+ case 0:
+ case 0 + 2:
+ CompositeRow_8bppRgb2Rgb_NoBlend(
+ dest_scan, src_scan, m_SrcPalette.Get32BitPalette(), width,
+ GetCompsFromFormat(m_DestFormat), clip_scan);
+ break;
+ case 0 + 8:
+ CompositeRow_1bppRgb2Rgb_NoBlend(
+ dest_scan, src_scan, src_left, m_SrcPalette.Get32BitPalette(), width,
+ GetCompsFromFormat(m_DestFormat), clip_scan);
+ break;
+ case 0 + 2 + 8:
+ // TODO(thestig): Check if empty span argument is always empty.
+ CompositeRow_1bppRgb2Rgba_NoBlend(dest_scan, src_scan, src_left, width,
+ m_SrcPalette.Get32BitPalette(),
+ clip_scan, {});
+ break;
}
}