Change CFX_Matrix* params to CFX_Matrix& in core/fpdfapi/render.

Remove CPDF_ImageRenderer::DrawPatternImage()'s matrix parameter along
the way, since the argument passed is always the same member variable.

Change-Id: Id7f12c1d28fd625271022f6d5e67b05219e333dc
Reviewed-on: https://pdfium-review.googlesource.com/c/47530
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_devicebuffer.h b/core/fpdfapi/render/cpdf_devicebuffer.h
index 8ccf2b7..00fd5c8 100644
--- a/core/fpdfapi/render/cpdf_devicebuffer.h
+++ b/core/fpdfapi/render/cpdf_devicebuffer.h
@@ -28,7 +28,7 @@
                   int max_dpi);
   void OutputToDevice();
   RetainPtr<CFX_DIBitmap> GetBitmap() const { return m_pBitmap; }
-  const CFX_Matrix* GetMatrix() const { return &m_Matrix; }
+  const CFX_Matrix& GetMatrix() const { return m_Matrix; }
 
  private:
   UnownedPtr<CFX_RenderDevice> m_pDevice;
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 90e1960..6149cca 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -115,7 +115,7 @@
     return DrawMaskedImage();
 
   if (m_bPatternColor)
-    return DrawPatternImage(m_pObj2Device.Get());
+    return DrawPatternImage();
 
   if (m_BitmapAlpha != 255 || !state.HasRef() || !state.GetFillOP() ||
       state.GetOPMode() != 0 || state.GetBlendType() != BlendMode::kNormal ||
@@ -150,7 +150,7 @@
 
 bool CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus,
                                CPDF_ImageObject* pImageObject,
-                               const CFX_Matrix* pObj2Device,
+                               const CFX_Matrix& mtObj2Device,
                                bool bStdCS,
                                BlendMode blendType) {
   ASSERT(pImageObject);
@@ -158,13 +158,13 @@
   m_bStdCS = bStdCS;
   m_pImageObject = pImageObject;
   m_BlendType = blendType;
-  m_pObj2Device = pObj2Device;
+  m_mtObj2Device = mtObj2Device;
   const CPDF_Dictionary* pOC = m_pImageObject->GetImage()->GetOC();
   if (pOC && GetRenderOptions().GetOCContext() &&
       !GetRenderOptions().GetOCContext()->CheckOCGVisible(pOC)) {
     return false;
   }
-  m_ImageMatrix = m_pImageObject->matrix() * *pObj2Device;
+  m_ImageMatrix = m_pImageObject->matrix() * mtObj2Device;
   if (StartLoadDIBBase())
     return true;
   return StartRenderDIBBase();
@@ -174,7 +174,7 @@
                                const RetainPtr<CFX_DIBBase>& pDIBBase,
                                FX_ARGB bitmap_argb,
                                int bitmap_alpha,
-                               const CFX_Matrix* pImage2Device,
+                               const CFX_Matrix& mtImage2Device,
                                const FXDIB_ResampleOptions& options,
                                bool bStdCS,
                                BlendMode blendType) {
@@ -182,7 +182,7 @@
   m_pDIBBase = pDIBBase;
   m_FillArgb = bitmap_argb;
   m_BitmapAlpha = bitmap_alpha;
-  m_ImageMatrix = *pImage2Device;
+  m_ImageMatrix = mtImage2Device;
   m_ResampleOptions = options;
   m_bStdCS = bStdCS;
   m_BlendType = blendType;
@@ -211,7 +211,7 @@
     CFX_DefaultRenderDevice* pBitmapDevice1,
     CFX_DefaultRenderDevice* pBitmapDevice2,
     const RetainPtr<CFX_DIBBase>& pDIBBase,
-    CFX_Matrix* pNewMatrix,
+    const CFX_Matrix& mtNewMatrix,
     const FX_RECT& rect) const {
   CPDF_RenderStatus bitmap_render(m_pRenderStatus->GetContext(),
                                   pBitmapDevice2);
@@ -220,7 +220,7 @@
   bitmap_render.Initialize(nullptr, nullptr);
 
   CPDF_ImageRenderer image_render;
-  if (image_render.Start(&bitmap_render, pDIBBase, 0xffffffff, 255, pNewMatrix,
+  if (image_render.Start(&bitmap_render, pDIBBase, 0xffffffff, 255, mtNewMatrix,
                          m_ResampleOptions, true, BlendMode::kNormal)) {
     image_render.Continue(nullptr);
   }
@@ -253,7 +253,7 @@
   return m_pRenderStatus->GetRenderOptions();
 }
 
-bool CPDF_ImageRenderer::DrawPatternImage(const CFX_Matrix* pObj2Device) {
+bool CPDF_ImageRenderer::DrawPatternImage() {
   if (NotDrawing()) {
     m_Result = false;
     return false;
@@ -277,7 +277,7 @@
   bitmap_render.SetStdCS(true);
   bitmap_render.Initialize(nullptr, nullptr);
 
-  CFX_Matrix patternDevice = *pObj2Device;
+  CFX_Matrix patternDevice = m_mtObj2Device;
   patternDevice.Translate(static_cast<float>(-rect.left),
                           static_cast<float>(-rect.top));
   if (CPDF_TilingPattern* pTilingPattern = m_pPattern->AsTilingPattern()) {
@@ -295,7 +295,7 @@
     return true;
   }
   bitmap_device2.GetBitmap()->Clear(0);
-  CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_pDIBBase, &new_matrix,
+  CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_pDIBBase, new_matrix,
                      rect);
   bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask);
   bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
@@ -331,7 +331,7 @@
   bitmap_render.SetStdCS(true);
   bitmap_render.Initialize(nullptr, nullptr);
   CPDF_ImageRenderer image_render;
-  if (image_render.Start(&bitmap_render, m_pDIBBase, 0, 255, &new_matrix,
+  if (image_render.Start(&bitmap_render, m_pDIBBase, 0, 255, new_matrix,
                          m_ResampleOptions, true, BlendMode::kNormal)) {
     image_render.Continue(nullptr);
   }
@@ -346,7 +346,7 @@
   bitmap_device2.GetBitmap()->Clear(0);
 #endif
   CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_Loader.GetMask(),
-                     &new_matrix, rect);
+                     new_matrix, rect);
 #ifdef _SKIA_SUPPORT_
   m_pRenderStatus->GetRenderDevice()->SetBitsWithMask(
       bitmap_device1.GetBitmap(), bitmap_device2.GetBitmap(), rect.left,
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.h b/core/fpdfapi/render/cpdf_imagerenderer.h
index 6befaf9..ed2cf7b 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.h
+++ b/core/fpdfapi/render/cpdf_imagerenderer.h
@@ -32,7 +32,7 @@
 
   bool Start(CPDF_RenderStatus* pStatus,
              CPDF_ImageObject* pImageObject,
-             const CFX_Matrix* pObj2Device,
+             const CFX_Matrix& mtObj2Device,
              bool bStdCS,
              BlendMode blendType);
 
@@ -40,7 +40,7 @@
              const RetainPtr<CFX_DIBBase>& pDIBBase,
              FX_ARGB bitmap_argb,
              int bitmap_alpha,
-             const CFX_Matrix* pImage2Device,
+             const CFX_Matrix& mtImage2Device,
              const FXDIB_ResampleOptions& options,
              bool bStdCS,
              BlendMode blendType);
@@ -54,23 +54,23 @@
   bool StartRenderDIBBase();
   bool StartLoadDIBBase();
   bool DrawMaskedImage();
-  bool DrawPatternImage(const CFX_Matrix* pObj2Device);
+  bool DrawPatternImage();
   bool NotDrawing() const;
   FX_RECT GetDrawRect() const;
   CFX_Matrix GetDrawMatrix(const FX_RECT& rect) const;
   void CalculateDrawImage(CFX_DefaultRenderDevice* bitmap_device1,
                           CFX_DefaultRenderDevice* bitmap_device2,
                           const RetainPtr<CFX_DIBBase>& pDIBBase,
-                          CFX_Matrix* pNewMatrix,
+                          const CFX_Matrix& mtNewMatrix,
                           const FX_RECT& rect) const;
   const CPDF_RenderOptions& GetRenderOptions() const;
   void HandleFilters();
 
   UnownedPtr<CPDF_RenderStatus> m_pRenderStatus;
   UnownedPtr<CPDF_ImageObject> m_pImageObject;
-  UnownedPtr<const CFX_Matrix> m_pObj2Device;
   UnownedPtr<CPDF_Pattern> m_pPattern;
   RetainPtr<CFX_DIBBase> m_pDIBBase;
+  CFX_Matrix m_mtObj2Device;
   CFX_Matrix m_ImageMatrix;
   CPDF_ImageLoader m_Loader;
   std::unique_ptr<CFX_ImageTransformer> m_pTransformer;
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 007bd8f..62e8986 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1109,7 +1109,7 @@
   }
 
   m_pImageRenderer = pdfium::MakeUnique<CPDF_ImageRenderer>();
-  if (!m_pImageRenderer->Start(this, pObj->AsImage(), &mtObj2Device, false,
+  if (!m_pImageRenderer->Start(this, pObj->AsImage(), mtObj2Device, false,
                                BlendMode::kNormal)) {
     if (!m_pImageRenderer->GetResult())
       DrawObjWithBackground(pObj, mtObj2Device);
@@ -1187,7 +1187,7 @@
                          res)) {
     return;
   }
-  CFX_Matrix matrix = mtObj2Device * (*buffer.GetMatrix());
+  CFX_Matrix matrix = mtObj2Device * buffer.GetMatrix();
   const CPDF_Dictionary* pFormResource = nullptr;
   const CPDF_FormObject* pFormObj = pObj->AsForm();
   if (pFormObj) {
@@ -1197,7 +1197,7 @@
   }
   CPDF_RenderStatus status(m_pContext.Get(), buffer.GetDevice());
   status.SetOptions(m_Options);
-  status.SetDeviceMatrix(*buffer.GetMatrix());
+  status.SetDeviceMatrix(buffer.GetMatrix());
   status.SetTransparency(m_Transparency);
   status.SetDropObjects(m_bDropObjects);
   status.SetFormResource(pFormResource);
@@ -1903,7 +1903,7 @@
         CFX_Matrix image_matrix = pType3Char->matrix() * matrix;
         CPDF_ImageRenderer renderer;
         if (renderer.Start(this, pType3Char->GetBitmap(), fill_argb, 255,
-                           &image_matrix, FXDIB_ResampleOptions(), false,
+                           image_matrix, FXDIB_ResampleOptions(), false,
                            BlendMode::kNormal)) {
           renderer.Continue(nullptr);
         }
@@ -2007,7 +2007,7 @@
 }
 
 void CPDF_RenderStatus::DrawShading(const CPDF_ShadingPattern* pPattern,
-                                    const CFX_Matrix* pMatrix,
+                                    const CFX_Matrix& mtMatrix,
                                     const FX_RECT& clip_rect,
                                     int alpha,
                                     bool bAlphaMode) {
@@ -2035,17 +2035,17 @@
   FX_RECT clip_rect_bbox = clip_rect;
   if (pDict->KeyExist("BBox")) {
     clip_rect_bbox.Intersect(
-        pMatrix->TransformRect(pDict->GetRectFor("BBox")).GetOuterRect());
+        mtMatrix.TransformRect(pDict->GetRectFor("BBox")).GetOuterRect());
   }
   if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SHADING &&
       m_pDevice->GetDeviceDriver()->DrawShading(
-          pPattern, pMatrix, clip_rect_bbox, alpha, bAlphaMode)) {
+          pPattern, &mtMatrix, clip_rect_bbox, alpha, bAlphaMode)) {
     return;
   }
   CPDF_DeviceBuffer buffer;
   buffer.Initialize(m_pContext.Get(), m_pDevice, clip_rect_bbox,
                     m_pCurObj.Get(), 150);
-  CFX_Matrix FinalMatrix = *pMatrix * (*buffer.GetMatrix());
+  CFX_Matrix FinalMatrix = mtMatrix * buffer.GetMatrix();
   RetainPtr<CFX_DIBitmap> pBitmap = buffer.GetBitmap();
   if (!pBitmap->GetBuffer())
     return;
@@ -2118,7 +2118,7 @@
   int alpha =
       FXSYS_round(255 * (bStroke ? pPageObj->m_GeneralState.GetStrokeAlpha()
                                  : pPageObj->m_GeneralState.GetFillAlpha()));
-  DrawShading(pattern, &matrix, rect, alpha,
+  DrawShading(pattern, matrix, rect, alpha,
               m_Options.ColorModeIs(CPDF_RenderOptions::kAlpha));
 }
 
@@ -2131,7 +2131,7 @@
     return;
 
   CFX_Matrix matrix = pShadingObj->matrix() * mtObj2Device;
-  DrawShading(pShadingObj->pattern(), &matrix, rect,
+  DrawShading(pShadingObj->pattern(), matrix, rect,
               FXSYS_round(255 * pShadingObj->m_GeneralState.GetFillAlpha()),
               m_Options.ColorModeIs(CPDF_RenderOptions::kAlpha));
 }
@@ -2360,7 +2360,7 @@
 bool CPDF_RenderStatus::ProcessImage(CPDF_ImageObject* pImageObj,
                                      const CFX_Matrix& mtObj2Device) {
   CPDF_ImageRenderer render;
-  if (render.Start(this, pImageObj, &mtObj2Device, m_bStdCS, m_curBlend))
+  if (render.Start(this, pImageObj, mtObj2Device, m_bStdCS, m_curBlend))
     render.Continue(nullptr);
   return render.GetResult();
 }
diff --git a/core/fpdfapi/render/cpdf_renderstatus.h b/core/fpdfapi/render/cpdf_renderstatus.h
index 5d2ffae..228a6a8 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.h
+++ b/core/fpdfapi/render/cpdf_renderstatus.h
@@ -144,7 +144,7 @@
   void ProcessShading(const CPDF_ShadingObject* pShadingObj,
                       const CFX_Matrix& mtObj2Device);
   void DrawShading(const CPDF_ShadingPattern* pPattern,
-                   const CFX_Matrix* pMatrix,
+                   const CFX_Matrix& mtMatrix,
                    const FX_RECT& clip_rect,
                    int alpha,
                    bool bAlphaMode);
diff --git a/core/fpdfapi/render/cpdf_scaledrenderbuffer.h b/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
index 14089f3..e809845 100644
--- a/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
+++ b/core/fpdfapi/render/cpdf_scaledrenderbuffer.h
@@ -31,7 +31,7 @@
                   int max_dpi);
 
   CFX_RenderDevice* GetDevice() const;
-  CFX_Matrix* GetMatrix() { return &m_Matrix; }
+  const CFX_Matrix& GetMatrix() const { return m_Matrix; }
   void OutputToDevice();
 
  private: