Make RenderDeviceDriverIface::Result::kNotSupported Windows-only
Split part of CPDF_ImageRenderer::StartDIBBase() into
StartDIBBaseFallback(), which is Windows-only. Then get rid of the
IS_WIN checks inside.
Change-Id: I688d22ab96dd3351d438a5240bad3eb03558eeb1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/122596
Reviewed-by: Tom Sepez <tsepez@google.com>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 56c71a2..8e28eef 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -432,20 +432,25 @@
     return false;
   }
 
-  if (result.result == RenderDeviceDriverIface::Result::kFailure) {
-    m_Result = false;
-    return false;
+#if BUILDFLAG(IS_WIN)
+  if (result.result == RenderDeviceDriverIface::Result::kNotSupported) {
+    return StartDIBBaseFallback();
   }
+#endif
 
-  CHECK_EQ(result.result, RenderDeviceDriverIface::Result::kNotSupported);
+  CHECK_EQ(result.result, RenderDeviceDriverIface::Result::kFailure);
+  m_Result = false;
+  return false;
+}
+
+#if BUILDFLAG(IS_WIN)
+bool CPDF_ImageRenderer::StartDIBBaseFallback() {
   if ((fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
       (fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0)) {
-#if BUILDFLAG(IS_WIN)
     if (IsPrinting()) {
       m_Result = false;
       return false;
     }
-#endif
 
     std::optional<FX_RECT> image_rect = GetUnitRect();
     if (!image_rect.has_value())
@@ -490,12 +495,10 @@
     }
   }
 
-#if BUILDFLAG(IS_WIN)
   if (IsPrinting()) {
     m_Result = false;
     return true;
   }
-#endif
 
   FX_RECT clip_box = m_pRenderStatus->GetRenderDevice()->GetClipBox();
   FX_RECT dest_rect = clip_box;
@@ -512,6 +515,7 @@
   }
   return false;
 }
+#endif  // BUILDFLAG(IS_WIN)
 
 bool CPDF_ImageRenderer::StartBitmapAlpha() {
   if (m_pDIBBase->IsOpaqueImage()) {
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.h b/core/fpdfapi/render/cpdf_imagerenderer.h
index add4e08..203d28e 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.h
+++ b/core/fpdfapi/render/cpdf_imagerenderer.h
@@ -65,6 +65,7 @@
   bool DrawMaskedImage();
   bool DrawPatternImage();
 #if BUILDFLAG(IS_WIN)
+  bool StartDIBBaseFallback();
   bool IsPrinting() const;
   void HandleFilters();
 #endif
diff --git a/core/fxge/renderdevicedriver_iface.h b/core/fxge/renderdevicedriver_iface.h
index ee4f4bf..3dee410 100644
--- a/core/fxge/renderdevicedriver_iface.h
+++ b/core/fxge/renderdevicedriver_iface.h
@@ -40,7 +40,13 @@
 
 class RenderDeviceDriverIface {
  public:
-  enum class Result { kFailure, kSuccess, kNotSupported };
+  enum class Result {
+    kFailure,
+    kSuccess,
+#if BUILDFLAG(IS_WIN)
+    kNotSupported
+#endif
+  };
 
   struct StartResult {
     StartResult(Result result,