Encapsulate CPDF_ImageLoader.

Change-Id: Iee7ce04630fed86f651cd382a19e46b2f7ab6d61
Reviewed-on: https://pdfium-review.googlesource.com/42672
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imageloader.cpp b/core/fpdfapi/render/cpdf_imageloader.cpp
index 157bc48..d7b7bb8 100644
--- a/core/fpdfapi/render/cpdf_imageloader.cpp
+++ b/core/fpdfapi/render/cpdf_imageloader.cpp
@@ -12,14 +12,12 @@
 #include "core/fpdfapi/render/cpdf_imagecacheentry.h"
 #include "core/fpdfapi/render/cpdf_pagerendercache.h"
 #include "core/fpdfapi/render/cpdf_renderstatus.h"
+#include "core/fpdfapi/render/cpdf_transferfunc.h"
+#include "core/fxge/dib/cfx_dibitmap.h"
 
-CPDF_ImageLoader::CPDF_ImageLoader()
-    : m_MatteColor(0),
-      m_bCached(false),
-      m_pCache(nullptr),
-      m_pImageObject(nullptr) {}
+CPDF_ImageLoader::CPDF_ImageLoader() = default;
 
-CPDF_ImageLoader::~CPDF_ImageLoader() {}
+CPDF_ImageLoader::~CPDF_ImageLoader() = default;
 
 bool CPDF_ImageLoader::Start(CPDF_ImageObject* pImage,
                              CPDF_PageRenderCache* pCache,
@@ -52,6 +50,18 @@
   return ret;
 }
 
+RetainPtr<CFX_DIBBase> CPDF_ImageLoader::TranslateImage(
+    const RetainPtr<CPDF_TransferFunc>& pTransferFunc) {
+  ASSERT(pTransferFunc);
+  ASSERT(!pTransferFunc->GetIdentity());
+
+  m_pBitmap = pTransferFunc->TranslateImage(m_pBitmap);
+  if (m_bCached && m_pMask)
+    m_pMask = m_pMask->Clone(nullptr);
+  m_bCached = false;
+  return m_pBitmap;
+}
+
 void CPDF_ImageLoader::HandleFailure() {
   if (m_pCache) {
     CPDF_ImageCacheEntry* entry = m_pCache->GetCurImageCacheEntry();
diff --git a/core/fpdfapi/render/cpdf_imageloader.h b/core/fpdfapi/render/cpdf_imageloader.h
index de29d0e..7586d69 100644
--- a/core/fpdfapi/render/cpdf_imageloader.h
+++ b/core/fpdfapi/render/cpdf_imageloader.h
@@ -16,6 +16,7 @@
 class CPDF_ImageObject;
 class CPDF_PageRenderCache;
 class CPDF_RenderStatus;
+class CPDF_TransferFunc;
 class PauseIndicatorIface;
 
 class CPDF_ImageLoader {
@@ -31,14 +32,21 @@
              CPDF_RenderStatus* pRenderStatus);
   bool Continue(PauseIndicatorIface* pPause, CPDF_RenderStatus* pRenderStatus);
 
-  RetainPtr<CFX_DIBBase> m_pBitmap;
-  RetainPtr<CFX_DIBBase> m_pMask;
-  uint32_t m_MatteColor;
-  bool m_bCached;
+  RetainPtr<CFX_DIBBase> TranslateImage(
+      const RetainPtr<CPDF_TransferFunc>& pTransferFunc);
+
+  const RetainPtr<CFX_DIBBase>& GetBitmap() const { return m_pBitmap; }
+  const RetainPtr<CFX_DIBBase>& GetMask() const { return m_pMask; }
+  uint32_t MatteColor() const { return m_MatteColor; }
 
  private:
   void HandleFailure();
 
+  RetainPtr<CFX_DIBBase> m_pBitmap;
+  RetainPtr<CFX_DIBBase> m_pMask;
+  uint32_t m_MatteColor = 0;
+  bool m_bCached = false;
+
   UnownedPtr<CPDF_PageRenderCache> m_pCache;
   UnownedPtr<CPDF_ImageObject> m_pImageObject;
 };
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 33aca42..cd68322 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -70,28 +70,23 @@
 }
 
 bool CPDF_ImageRenderer::StartRenderDIBBase() {
-  if (!m_Loader.m_pBitmap)
+  if (!m_Loader.GetBitmap())
     return false;
 
   CPDF_GeneralState& state = m_pImageObject->m_GeneralState;
   m_BitmapAlpha = FXSYS_round(255 * state.GetFillAlpha());
-  m_pDIBBase = m_Loader.m_pBitmap;
+  m_pDIBBase = m_Loader.GetBitmap();
   if (m_pRenderStatus->GetRenderOptions().ColorModeIs(
           CPDF_RenderOptions::kAlpha) &&
-      !m_Loader.m_pMask) {
+      !m_Loader.GetMask()) {
     return StartBitmapAlpha();
   }
   if (state.GetTR()) {
     if (!state.GetTransferFunc())
       state.SetTransferFunc(m_pRenderStatus->GetTransferFunc(state.GetTR()));
 
-    if (state.GetTransferFunc() && !state.GetTransferFunc()->GetIdentity()) {
-      m_pDIBBase = m_Loader.m_pBitmap =
-          state.GetTransferFunc()->TranslateImage(m_Loader.m_pBitmap);
-      if (m_Loader.m_bCached && m_Loader.m_pMask)
-        m_Loader.m_pMask = m_Loader.m_pMask->Clone(nullptr);
-      m_Loader.m_bCached = false;
-    }
+    if (state.GetTransferFunc() && !state.GetTransferFunc()->GetIdentity())
+      m_pDIBBase = m_Loader.TranslateImage(state.GetTransferFunc());
   }
   m_FillArgb = 0;
   m_bPatternColor = false;
@@ -127,7 +122,7 @@
   else if (m_pImageObject->GetImage()->IsInterpol())
     m_Flags |= FXDIB_INTERPOL;
 
-  if (m_Loader.m_pMask)
+  if (m_Loader.GetMask())
     return DrawMaskedImage();
 
   if (m_bPatternColor)
@@ -242,11 +237,11 @@
                          m_Flags, true, FXDIB_BLEND_NORMAL)) {
     image_render.Continue(nullptr);
   }
-  if (m_Loader.m_MatteColor == 0xffffffff)
+  if (m_Loader.MatteColor() == 0xffffffff)
     return;
-  int matte_r = FXARGB_R(m_Loader.m_MatteColor);
-  int matte_g = FXARGB_G(m_Loader.m_MatteColor);
-  int matte_b = FXARGB_B(m_Loader.m_MatteColor);
+  int matte_r = FXARGB_R(m_Loader.MatteColor());
+  int matte_g = FXARGB_G(m_Loader.MatteColor());
+  int matte_b = FXARGB_B(m_Loader.MatteColor());
   for (int row = 0; row < rect.Height(); row++) {
     uint8_t* dest_scan = pBitmapDevice1->GetBitmap()->GetWritableScanline(row);
     const uint8_t* mask_scan = pBitmapDevice2->GetBitmap()->GetScanline(row);
@@ -359,7 +354,7 @@
 #else
   bitmap_device2.GetBitmap()->Clear(0);
 #endif
-  CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_Loader.m_pMask,
+  CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_Loader.GetMask(),
                      &new_matrix, rect);
 #ifdef _SKIA_SUPPORT_
   m_pRenderStatus->GetRenderDevice()->SetBitsWithMask(