ProgressiveDecoder: switch over loop, part 2

Duplicates some code but allows for tighter inner loops. Switching
once per line is usually fine; once per pixel, not so much.

Change-Id: I8734d7ee4f43ad8dffa8269ba7b6cfab8923cd7c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81974
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcodec/progressive_decoder.cpp b/core/fxcodec/progressive_decoder.cpp
index 427ab65..501ca0b 100644
--- a/core/fxcodec/progressive_decoder.cpp
+++ b/core/fxcodec/progressive_decoder.cpp
@@ -647,24 +647,25 @@
     const uint8_t* scan_src2 =
         pDeviceBitmap->GetScanline(pWeight->m_SrcEnd + dest_top) +
         dest_ScanOffet;
-    for (int dest_col = 0; dest_col < m_sizeX; dest_col++) {
-      switch (pDeviceBitmap->GetFormat()) {
-        case FXDIB_Format::kInvalid:
-        case FXDIB_Format::k1bppMask:
-        case FXDIB_Format::k1bppRgb:
+    switch (pDeviceBitmap->GetFormat()) {
+      case FXDIB_Format::kInvalid:
+      case FXDIB_Format::k1bppMask:
+      case FXDIB_Format::k1bppRgb:
+        return;
+      case FXDIB_Format::k8bppMask:
+      case FXDIB_Format::k8bppRgb:
+        if (pDeviceBitmap->HasPalette())
           return;
-        case FXDIB_Format::k8bppMask:
-        case FXDIB_Format::k8bppRgb: {
-          if (pDeviceBitmap->HasPalette())
-            return;
-
+        for (int dest_col = 0; dest_col < m_sizeX; dest_col++) {
           uint32_t dest_g = 0;
           dest_g += pWeight->m_Weights[0] * (*scan_src1++);
           dest_g += pWeight->m_Weights[1] * (*scan_src2++);
           *scan_des++ = (uint8_t)(dest_g >> 16);
-        } break;
-        case FXDIB_Format::kRgb:
-        case FXDIB_Format::kRgb32: {
+        }
+        break;
+      case FXDIB_Format::kRgb:
+      case FXDIB_Format::kRgb32:
+        for (int dest_col = 0; dest_col < m_sizeX; dest_col++) {
           uint32_t dest_b = 0;
           uint32_t dest_g = 0;
           uint32_t dest_r = 0;
@@ -680,8 +681,10 @@
           *scan_des++ = (uint8_t)((dest_g) >> 16);
           *scan_des++ = (uint8_t)((dest_r) >> 16);
           scan_des += dest_Bpp - 3;
-        } break;
-        case FXDIB_Format::kArgb: {
+        }
+        break;
+      case FXDIB_Format::kArgb:
+        for (int dest_col = 0; dest_col < m_sizeX; dest_col++) {
           uint32_t dest_a = 0;
           uint32_t dest_b = 0;
           uint32_t dest_g = 0;
@@ -698,10 +701,10 @@
           *scan_des++ = (uint8_t)((dest_g) >> 16);
           *scan_des++ = (uint8_t)((dest_r) >> 16);
           *scan_des++ = (uint8_t)((dest_a) >> 16);
-        } break;
-        default:
-          return;
-      }
+        }
+        break;
+      default:
+        return;
     }
   }
 }