Make CPDF_RenderStatus::Initialize() saner.

Move mandatory arguments to ctor.
Replace long list of positional parameters with setter methods.
Make Initialize() return void since it can't fail.

Change-Id: I490118923855158891cf45eecd5de1e922a3a1fe
Reviewed-on: https://pdfium-review.googlesource.com/40170
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index c7334f6..9f14e84 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -76,7 +76,7 @@
   CPDF_GeneralState& state = m_pImageObject->m_GeneralState;
   m_BitmapAlpha = FXSYS_round(255 * state.GetFillAlpha());
   m_pDIBSource = m_Loader.m_pBitmap;
-  if (m_pRenderStatus->GetRenderOptions()->ColorModeIs(
+  if (m_pRenderStatus->GetRenderOptions().ColorModeIs(
           CPDF_RenderOptions::kAlpha) &&
       !m_Loader.m_pMask) {
     return StartBitmapAlpha();
@@ -104,7 +104,7 @@
         m_bPatternColor = true;
     }
     m_FillArgb = m_pRenderStatus->GetFillArgb(m_pImageObject.Get());
-  } else if (m_pRenderStatus->GetRenderOptions()->ColorModeIs(
+  } else if (m_pRenderStatus->GetRenderOptions().ColorModeIs(
                  CPDF_RenderOptions::kGray)) {
     RetainPtr<CFX_DIBitmap> pClone = m_pDIBSource->Clone(nullptr);
     if (!pClone)
@@ -114,15 +114,15 @@
     m_pDIBSource = pClone;
   }
   m_Flags = 0;
-  if (m_pRenderStatus->GetRenderOptions()->HasFlag(RENDER_FORCE_DOWNSAMPLE))
+  if (m_pRenderStatus->GetRenderOptions().HasFlag(RENDER_FORCE_DOWNSAMPLE))
     m_Flags |= RENDER_FORCE_DOWNSAMPLE;
-  else if (m_pRenderStatus->GetRenderOptions()->HasFlag(RENDER_FORCE_HALFTONE))
+  else if (m_pRenderStatus->GetRenderOptions().HasFlag(RENDER_FORCE_HALFTONE))
     m_Flags |= RENDER_FORCE_HALFTONE;
 
   if (m_pRenderStatus->GetRenderDevice()->GetDeviceClass() != FXDC_DISPLAY)
     HandleFilters();
 
-  if (m_pRenderStatus->GetRenderOptions()->HasFlag(RENDER_NOIMAGESMOOTH))
+  if (m_pRenderStatus->GetRenderOptions().HasFlag(RENDER_NOIMAGESMOOTH))
     m_Flags |= FXDIB_NOSMOOTH;
   else if (m_pImageObject->GetImage()->IsInterpol())
     m_Flags |= FXDIB_INTERPOL;
@@ -176,8 +176,8 @@
   m_BlendType = blendType;
   m_pObj2Device = pObj2Device;
   const CPDF_Dictionary* pOC = m_pImageObject->GetImage()->GetOC();
-  if (pOC && m_pRenderStatus->GetRenderOptions()->GetOCContext() &&
-      !m_pRenderStatus->GetRenderOptions()->GetOCContext()->CheckOCGVisible(
+  if (pOC && m_pRenderStatus->GetRenderOptions().GetOCContext() &&
+      !m_pRenderStatus->GetRenderOptions().GetOCContext()->CheckOCGVisible(
           pOC)) {
     return false;
   }
@@ -231,11 +231,12 @@
     const RetainPtr<CFX_DIBSource>& pDIBSource,
     CFX_Matrix* pNewMatrix,
     const FX_RECT& rect) const {
-  CPDF_RenderStatus bitmap_render;
-  bitmap_render.Initialize(m_pRenderStatus->GetContext(), pBitmapDevice2,
-                           nullptr, nullptr, nullptr, nullptr, nullptr,
-                           CPDF_Transparency(),
-                           m_pRenderStatus->GetDropObjects(), nullptr, true);
+  CPDF_RenderStatus bitmap_render(m_pRenderStatus->GetContext(),
+                                  pBitmapDevice2);
+  bitmap_render.SetDropObjects(m_pRenderStatus->GetDropObjects());
+  bitmap_render.SetStdCS(true);
+  bitmap_render.Initialize(nullptr, nullptr);
+
   CPDF_ImageRenderer image_render;
   if (image_render.Start(&bitmap_render, pDIBSource, 0xffffffff, 255,
                          pNewMatrix, m_Flags, true, FXDIB_BLEND_NORMAL)) {
@@ -282,11 +283,14 @@
     return true;
 
   bitmap_device1.GetBitmap()->Clear(0xffffff);
-  CPDF_RenderStatus bitmap_render;
-  bitmap_render.Initialize(
-      m_pRenderStatus->GetContext(), &bitmap_device1, nullptr, nullptr, nullptr,
-      nullptr, m_pRenderStatus->GetRenderOptions(), CPDF_Transparency(),
-      m_pRenderStatus->GetDropObjects(), nullptr, true);
+
+  CPDF_RenderStatus bitmap_render(m_pRenderStatus->GetContext(),
+                                  &bitmap_device1);
+  bitmap_render.SetOptions(m_pRenderStatus->GetRenderOptions());
+  bitmap_render.SetDropObjects(m_pRenderStatus->GetDropObjects());
+  bitmap_render.SetStdCS(true);
+  bitmap_render.Initialize(nullptr, nullptr);
+
   CFX_Matrix patternDevice = *pObj2Device;
   patternDevice.Translate(static_cast<float>(-rect.left),
                           static_cast<float>(-rect.top));
@@ -335,11 +339,11 @@
 #else
   bitmap_device1.GetBitmap()->Clear(0xffffff);
 #endif
-  CPDF_RenderStatus bitmap_render;
-  bitmap_render.Initialize(m_pRenderStatus->GetContext(), &bitmap_device1,
-                           nullptr, nullptr, nullptr, nullptr, nullptr,
-                           CPDF_Transparency(),
-                           m_pRenderStatus->GetDropObjects(), nullptr, true);
+  CPDF_RenderStatus bitmap_render(m_pRenderStatus->GetContext(),
+                                  &bitmap_device1);
+  bitmap_render.SetDropObjects(m_pRenderStatus->GetDropObjects());
+  bitmap_render.SetStdCS(true);
+  bitmap_render.Initialize(nullptr, nullptr);
   CPDF_ImageRenderer image_render;
   if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix,
                          m_Flags, true, FXDIB_BLEND_NORMAL)) {
diff --git a/core/fpdfapi/render/cpdf_progressiverenderer.cpp b/core/fpdfapi/render/cpdf_progressiverenderer.cpp
index de140d8..15b58fb 100644
--- a/core/fpdfapi/render/cpdf_progressiverenderer.cpp
+++ b/core/fpdfapi/render/cpdf_progressiverenderer.cpp
@@ -54,11 +54,13 @@
       m_pCurrentLayer = m_pContext->GetLayer(m_LayerIndex);
       m_LastObjectRendered =
           m_pCurrentLayer->m_pObjectHolder->GetPageObjectList()->end();
-      m_pRenderStatus = pdfium::MakeUnique<CPDF_RenderStatus>();
-      m_pRenderStatus->Initialize(
-          m_pContext.Get(), m_pDevice.Get(), nullptr, nullptr, nullptr, nullptr,
-          m_pOptions, m_pCurrentLayer->m_pObjectHolder->GetTransparency(),
-          false, nullptr);
+      m_pRenderStatus = pdfium::MakeUnique<CPDF_RenderStatus>(m_pContext.Get(),
+                                                              m_pDevice.Get());
+      if (m_pOptions)
+        m_pRenderStatus->SetOptions(*m_pOptions);
+      m_pRenderStatus->SetTransparency(
+          m_pCurrentLayer->m_pObjectHolder->GetTransparency());
+      m_pRenderStatus->Initialize(nullptr, nullptr);
       m_pDevice->SaveState();
       m_ClipRect = m_pCurrentLayer->m_Matrix.GetInverse().TransformRect(
           CFX_FloatRect(m_pDevice->GetClipBox()));
@@ -94,10 +96,10 @@
                 pCurObj, &m_pCurrentLayer->m_Matrix, pPause)) {
           return;
         }
-        if (pCurObj->IsImage() && m_pRenderStatus->GetRenderOptions()->HasFlag(
+        if (pCurObj->IsImage() && m_pRenderStatus->GetRenderOptions().HasFlag(
                                       RENDER_LIMITEDIMAGECACHE)) {
           m_pContext->GetPageCache()->CacheOptimization(
-              m_pRenderStatus->GetRenderOptions()->GetCacheSizeLimit());
+              m_pRenderStatus->GetRenderOptions().GetCacheSizeLimit());
         }
         if (pCurObj->IsForm() || pCurObj->IsShading())
           nObjsToGo = 0;
diff --git a/core/fpdfapi/render/cpdf_rendercontext.cpp b/core/fpdfapi/render/cpdf_rendercontext.cpp
index fc756e7..48b87d9 100644
--- a/core/fpdfapi/render/cpdf_rendercontext.cpp
+++ b/core/fpdfapi/render/cpdf_rendercontext.cpp
@@ -65,23 +65,24 @@
                                 const CFX_Matrix* pLastMatrix) {
   for (auto& layer : m_Layers) {
     CFX_RenderDevice::StateRestorer restorer(pDevice);
-    CPDF_RenderStatus status;
+    CPDF_RenderStatus status(this, pDevice);
+    if (pOptions)
+      status.SetOptions(*pOptions);
+    status.SetStopObject(pStopObj);
+    status.SetTransparency(layer.m_pObjectHolder->GetTransparency());
     if (pLastMatrix) {
       CFX_Matrix FinalMatrix = layer.m_Matrix;
       FinalMatrix.Concat(*pLastMatrix);
-      status.Initialize(this, pDevice, pLastMatrix, pStopObj, nullptr, nullptr,
-                        pOptions, layer.m_pObjectHolder->GetTransparency(),
-                        false, nullptr);
+      status.SetDeviceMatrix(*pLastMatrix);
+      status.Initialize(nullptr, nullptr);
       status.RenderObjectList(layer.m_pObjectHolder.Get(), &FinalMatrix);
     } else {
-      status.Initialize(this, pDevice, nullptr, pStopObj, nullptr, nullptr,
-                        pOptions, layer.m_pObjectHolder->GetTransparency(),
-                        false, nullptr);
+      status.Initialize(nullptr, nullptr);
       status.RenderObjectList(layer.m_pObjectHolder.Get(), &layer.m_Matrix);
     }
-    if (status.GetRenderOptions()->HasFlag(RENDER_LIMITEDIMAGECACHE)) {
+    if (status.GetRenderOptions().HasFlag(RENDER_LIMITEDIMAGECACHE)) {
       m_pPageCache->CacheOptimization(
-          status.GetRenderOptions()->GetCacheSizeLimit());
+          status.GetRenderOptions().GetCacheSizeLimit());
     }
     if (status.IsStopped())
       break;
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 85e446f..76c5e87 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -998,42 +998,15 @@
 
 }  // namespace
 
-CPDF_RenderStatus::CPDF_RenderStatus() {}
+CPDF_RenderStatus::CPDF_RenderStatus(CPDF_RenderContext* pContext,
+                                     CFX_RenderDevice* pDevice)
+    : m_pContext(pContext), m_pDevice(pDevice) {}
 
 CPDF_RenderStatus::~CPDF_RenderStatus() {}
 
-bool CPDF_RenderStatus::Initialize(CPDF_RenderContext* pContext,
-                                   CFX_RenderDevice* pDevice,
-                                   const CFX_Matrix* pDeviceMatrix,
-                                   const CPDF_PageObject* pStopObj,
-                                   const CPDF_RenderStatus* pParentState,
-                                   const CPDF_GraphicStates* pInitialStates,
-                                   const CPDF_RenderOptions* pOptions,
-                                   const CPDF_Transparency& transparency,
-                                   bool bDropObjects,
-                                   const CPDF_Dictionary* pFormResource,
-                                   bool bStdCS,
-                                   CPDF_Type3Char* pType3Char,
-                                   FX_ARGB fill_color,
-                                   uint32_t GroupFamily,
-                                   bool bLoadMask) {
-  m_pContext = pContext;
-  m_pDevice = pDevice;
+void CPDF_RenderStatus::Initialize(const CPDF_RenderStatus* pParentState,
+                                   const CPDF_GraphicStates* pInitialStates) {
   m_bPrint = m_pDevice->GetDeviceClass() != FXDC_DISPLAY;
-  if (pDeviceMatrix) {
-    m_DeviceMatrix = *pDeviceMatrix;
-  }
-  m_pStopObj = pStopObj;
-  if (pOptions) {
-    m_Options = *pOptions;
-  }
-  m_bDropObjects = bDropObjects;
-  m_bStdCS = bStdCS;
-  m_T3FillColor = fill_color;
-  m_pType3Char = pType3Char;
-  m_GroupFamily = GroupFamily;
-  m_bLoadMask = bLoadMask;
-  m_pFormResource = pFormResource;
   m_pPageResource = m_pContext->GetPageResources();
   if (pInitialStates && !m_pType3Char) {
     m_InitialStates.CopyStates(*pInitialStates);
@@ -1054,9 +1027,6 @@
   } else {
     m_InitialStates.DefaultStates();
   }
-  m_pImageRenderer.reset();
-  m_Transparency = transparency;
-  return true;
 }
 
 void CPDF_RenderStatus::RenderObjectList(
@@ -1230,10 +1200,13 @@
     if (pFormDict)
       pFormResource = pFormDict->GetDictFor("Resources");
   }
-  CPDF_RenderStatus status;
-  status.Initialize(m_pContext.Get(), buffer.GetDevice(), buffer.GetMatrix(),
-                    nullptr, nullptr, nullptr, &m_Options, m_Transparency,
-                    m_bDropObjects, pFormResource);
+  CPDF_RenderStatus status(m_pContext.Get(), buffer.GetDevice());
+  status.SetOptions(m_Options);
+  status.SetDeviceMatrix(*buffer.GetMatrix());
+  status.SetTransparency(m_Transparency);
+  status.SetDropObjects(m_bDropObjects);
+  status.SetFormResource(pFormResource);
+  status.Initialize(nullptr, nullptr);
   status.RenderSingleObject(pObj, &matrix);
   buffer.OutputToDevice();
 }
@@ -1253,10 +1226,13 @@
   const CPDF_Dictionary* pFormDict = pFormObj->form()->GetDict();
   const CPDF_Dictionary* pResources =
       pFormDict ? pFormDict->GetDictFor("Resources") : nullptr;
-  CPDF_RenderStatus status;
-  status.Initialize(m_pContext.Get(), m_pDevice, nullptr, m_pStopObj, this,
-                    pFormObj, &m_Options, m_Transparency, m_bDropObjects,
-                    pResources, false);
+  CPDF_RenderStatus status(m_pContext.Get(), m_pDevice);
+  status.SetOptions(m_Options);
+  status.SetStopObject(m_pStopObj);
+  status.SetTransparency(m_Transparency);
+  status.SetDropObjects(m_bDropObjects);
+  status.SetFormResource(pResources);
+  status.Initialize(this, pFormObj);
   status.m_curBlend = m_curBlend;
   {
     CFX_RenderDevice::StateRestorer restorer(m_pDevice);
@@ -1590,10 +1566,13 @@
           (FX_ARGB)-1, 0, nullptr, 0);
     }
   }
-  CPDF_RenderStatus bitmap_render;
-  bitmap_render.Initialize(
-      m_pContext.Get(), &bitmap_device, nullptr, m_pStopObj, nullptr, nullptr,
-      &m_Options, CPDF_Transparency(), m_bDropObjects, pFormResource, true);
+  CPDF_RenderStatus bitmap_render(m_pContext.Get(), &bitmap_device);
+  bitmap_render.SetOptions(m_Options);
+  bitmap_render.SetStopObject(m_pStopObj);
+  bitmap_render.SetStdCS(true);
+  bitmap_render.SetDropObjects(m_bDropObjects);
+  bitmap_render.SetFormResource(pFormResource);
+  bitmap_render.Initialize(nullptr, nullptr);
   bitmap_render.ProcessObjectNoClip(pPageObj, &new_matrix);
 #if defined _SKIA_SUPPORT_PATHS_
   bitmap_device.Flush(true);
@@ -1880,11 +1859,14 @@
         pFormResource = pType3Char->form()->GetDict()->GetDictFor("Resources");
       }
       if (fill_alpha == 255) {
-        CPDF_RenderStatus status;
-        status.Initialize(m_pContext.Get(), m_pDevice, nullptr, nullptr, this,
-                          pStates.get(), &options,
-                          pType3Char->form()->GetTransparency(), m_bDropObjects,
-                          pFormResource, false, pType3Char, fill_argb);
+        CPDF_RenderStatus status(m_pContext.Get(), m_pDevice);
+        status.SetOptions(options);
+        status.SetTransparency(pType3Char->form()->GetTransparency());
+        status.SetType3Char(pType3Char);
+        status.SetFillColor(fill_argb);
+        status.SetDropObjects(m_bDropObjects);
+        status.SetFormResource(pFormResource);
+        status.Initialize(this, pStates.get());
         status.m_Type3FontCache = m_Type3FontCache;
         status.m_Type3FontCache.push_back(pType3Font);
 
@@ -1900,11 +1882,14 @@
           return true;
         }
         bitmap_device.GetBitmap()->Clear(0);
-        CPDF_RenderStatus status;
-        status.Initialize(m_pContext.Get(), &bitmap_device, nullptr, nullptr,
-                          this, pStates.get(), &options,
-                          pType3Char->form()->GetTransparency(), m_bDropObjects,
-                          pFormResource, false, pType3Char, fill_argb);
+        CPDF_RenderStatus status(m_pContext.Get(), &bitmap_device);
+        status.SetOptions(options);
+        status.SetTransparency(pType3Char->form()->GetTransparency());
+        status.SetType3Char(pType3Char);
+        status.SetFillColor(fill_argb);
+        status.SetDropObjects(m_bDropObjects);
+        status.SetFormResource(pFormResource);
+        status.Initialize(this, pStates.get());
         status.m_Type3FontCache = m_Type3FontCache;
         status.m_Type3FontCache.push_back(pType3Font);
         matrix.Translate(-rect.left, -rect.top);
@@ -2244,11 +2229,12 @@
         matrix.Translate(original.x - mtPattern2Device.e,
                          original.y - mtPattern2Device.f);
         CFX_RenderDevice::StateRestorer restorer2(m_pDevice);
-        CPDF_RenderStatus status;
-        status.Initialize(m_pContext.Get(), m_pDevice, nullptr, nullptr, this,
-                          pStates.get(), &m_Options,
-                          pPattern->form()->GetTransparency(), m_bDropObjects,
-                          pFormResource);
+        CPDF_RenderStatus status(m_pContext.Get(), m_pDevice);
+        status.SetOptions(m_Options);
+        status.SetTransparency(pPattern->form()->GetTransparency());
+        status.SetFormResource(pFormResource);
+        status.SetDropObjects(m_bDropObjects);
+        status.Initialize(this, pStates.get());
         status.RenderObjectList(pPattern->form(), &matrix);
       }
     }
@@ -2570,10 +2556,14 @@
   CPDF_RenderOptions options;
   options.SetColorMode(bLuminosity ? CPDF_RenderOptions::kNormal
                                    : CPDF_RenderOptions::kAlpha);
-  CPDF_RenderStatus status;
-  status.Initialize(m_pContext.Get(), &bitmap_device, nullptr, nullptr, nullptr,
-                    nullptr, &options, CPDF_Transparency(), m_bDropObjects,
-                    pFormResource, true, nullptr, 0, nCSFamily, bLuminosity);
+  CPDF_RenderStatus status(m_pContext.Get(), &bitmap_device);
+  status.SetOptions(options);
+  status.SetGroupFamily(nCSFamily);
+  status.SetLoadMask(bLuminosity);
+  status.SetStdCS(true);
+  status.SetFormResource(pFormResource);
+  status.SetDropObjects(m_bDropObjects);
+  status.Initialize(nullptr, nullptr);
   status.RenderObjectList(&form, &matrix);
 
   auto pMask = pdfium::MakeRetain<CFX_DIBitmap>();
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h
index 92b96f9..b15c1d1 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.h
+++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -29,6 +29,7 @@
 class CPDF_PageObject;
 class CPDF_PageObjectHolder;
 class CPDF_PathObject;
+class CPDF_RenderContext;
 class CPDF_ShadingObject;
 class CPDF_ShadingPattern;
 class CPDF_TilingPattern;
@@ -39,24 +40,27 @@
 
 class CPDF_RenderStatus {
  public:
-  CPDF_RenderStatus();
+  CPDF_RenderStatus(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice);
   ~CPDF_RenderStatus();
 
-  bool Initialize(class CPDF_RenderContext* pContext,
-                  CFX_RenderDevice* pDevice,
-                  const CFX_Matrix* pDeviceMatrix,
-                  const CPDF_PageObject* pStopObj,
-                  const CPDF_RenderStatus* pParentStatus,
-                  const CPDF_GraphicStates* pInitialStates,
-                  const CPDF_RenderOptions* pOptions,
-                  const CPDF_Transparency& transparency,
-                  bool bDropObjects,
-                  const CPDF_Dictionary* pFormResource = nullptr,
-                  bool bStdCS = false,
-                  CPDF_Type3Char* pType3Char = nullptr,
-                  FX_ARGB fill_color = 0,
-                  uint32_t GroupFamily = 0,
-                  bool bLoadMask = false);
+  // Called prior to Initialize().
+  void SetOptions(const CPDF_RenderOptions& options) { m_Options = options; }
+  void SetDeviceMatrix(const CFX_Matrix& matrix) { m_DeviceMatrix = matrix; }
+  void SetStopObject(const CPDF_PageObject* pStopObj) { m_pStopObj = pStopObj; }
+  void SetFormResource(const CPDF_Dictionary* pRes) { m_pFormResource = pRes; }
+  void SetType3Char(CPDF_Type3Char* pType3Char) { m_pType3Char = pType3Char; }
+  void SetFillColor(FX_ARGB color) { m_T3FillColor = color; }
+  void SetDropObjects(bool bDropObjects) { m_bDropObjects = bDropObjects; }
+  void SetLoadMask(bool bLoadMask) { m_bLoadMask = bLoadMask; }
+  void SetStdCS(bool bStdCS) { m_bStdCS = bStdCS; }
+  void SetGroupFamily(uint32_t family) { m_GroupFamily = family; }
+  void SetTransparency(const CPDF_Transparency& transparency) {
+    m_Transparency = transparency;
+  }
+
+  void Initialize(const CPDF_RenderStatus* pParentStatus,
+                  const CPDF_GraphicStates* pInitialStates);
+
   void RenderObjectList(const CPDF_PageObjectHolder* pObjectHolder,
                         const CFX_Matrix* pObj2Device);
   void RenderSingleObject(CPDF_PageObject* pObj, const CFX_Matrix* pObj2Device);
@@ -77,7 +81,7 @@
   }
   CPDF_Dictionary* GetPageResource() const { return m_pPageResource.Get(); }
   CFX_RenderDevice* GetRenderDevice() const { return m_pDevice; }
-  const CPDF_RenderOptions* GetRenderOptions() const { return &m_Options; }
+  const CPDF_RenderOptions& GetRenderOptions() const { return m_Options; }
 
 #if defined _SKIA_SUPPORT_
   void DebugVerifyDeviceIsPreMultiplied() const;
@@ -171,21 +175,21 @@
   UnownedPtr<const CPDF_Dictionary> m_pFormResource;
   UnownedPtr<CPDF_Dictionary> m_pPageResource;
   std::vector<CPDF_Type3Font*> m_Type3FontCache;
-  UnownedPtr<CPDF_RenderContext> m_pContext;
+  UnownedPtr<CPDF_RenderContext> const m_pContext;
   bool m_bStopped = false;
-  CFX_RenderDevice* m_pDevice = nullptr;
+  CFX_RenderDevice* const m_pDevice;
   CFX_Matrix m_DeviceMatrix;
   CPDF_ClipPath m_LastClipPath;
   const CPDF_PageObject* m_pCurObj = nullptr;
   const CPDF_PageObject* m_pStopObj = nullptr;
   CPDF_GraphicStates m_InitialStates;
   std::unique_ptr<CPDF_ImageRenderer> m_pImageRenderer;
-  bool m_bPrint = false;
   CPDF_Transparency m_Transparency;
+  bool m_bPrint = false;
   bool m_bDropObjects = false;
   bool m_bStdCS = false;
-  uint32_t m_GroupFamily = 0;
   bool m_bLoadMask = false;
+  uint32_t m_GroupFamily = 0;
   UnownedPtr<CPDF_Type3Char> m_pType3Char;
   FX_ARGB m_T3FillColor = 0;
   int m_curBlend = FXDIB_BLEND_NORMAL;