Move Start to constructor in CFX_Image(Renderer|Transformer)

The bool returned by Start was not being used and the method was always
called right after the constructor, so it should be in the constructor.

Change-Id: I98abf9f7c11fbe42b3aa15ec5e46731198aa23d5
Reviewed-on: https://pdfium-review.googlesource.com/7151
Commit-Queue: Nicolás Peña <npm@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 716203a..6fcf89c 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -418,7 +418,6 @@
     m_Status = 2;
     m_pTransformer = pdfium::MakeUnique<CFX_ImageTransformer>(
         m_pDIBSource, &m_ImageMatrix, m_Flags, &clip_box);
-    m_pTransformer->Start();
     return true;
   }
   if (m_ImageMatrix.a < 0)
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 91272d4..855ea2a 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -1546,9 +1546,9 @@
   if (!m_pBitmap->GetBuffer())
     return true;
 
-  *handle = pdfium::MakeUnique<CFX_ImageRenderer>();
-  (*handle)->Start(m_pBitmap, m_pClipRgn.get(), pSource, bitmap_alpha, argb,
-                   pMatrix, render_flags, m_bRgbByteOrder);
+  *handle = pdfium::MakeUnique<CFX_ImageRenderer>(
+      m_pBitmap, m_pClipRgn.get(), pSource, bitmap_alpha, argb, pMatrix,
+      render_flags, m_bRgbByteOrder);
   return true;
 }
 
diff --git a/core/fxge/dib/cfx_dibsource.cpp b/core/fxge/dib/cfx_dibsource.cpp
index deb8e15..458baa5 100644
--- a/core/fxge/dib/cfx_dibsource.cpp
+++ b/core/fxge/dib/cfx_dibsource.cpp
@@ -1089,7 +1089,6 @@
     int* result_top) {
   CFX_RetainPtr<CFX_DIBSource> holder(this);
   CFX_ImageTransformer transformer(holder, pDestMatrix, 0, nullptr);
-  transformer.Start();
   transformer.Continue(nullptr);
   *result_left = transformer.result().left;
   *result_top = transformer.result().top;
diff --git a/core/fxge/dib/cfx_imagerenderer.cpp b/core/fxge/dib/cfx_imagerenderer.cpp
index ec611ca..db3fe02 100644
--- a/core/fxge/dib/cfx_imagerenderer.cpp
+++ b/core/fxge/dib/cfx_imagerenderer.cpp
@@ -13,39 +13,30 @@
 #include "core/fxge/ge/cfx_cliprgn.h"
 #include "third_party/base/ptr_util.h"
 
-CFX_ImageRenderer::CFX_ImageRenderer()
-    : m_Status(0),
-      m_bRgbByteOrder(false),
-      m_BlendType(FXDIB_BLEND_NORMAL) {}
-
-CFX_ImageRenderer::~CFX_ImageRenderer() {}
-
-bool CFX_ImageRenderer::Start(const CFX_RetainPtr<CFX_DIBitmap>& pDevice,
-                              const CFX_ClipRgn* pClipRgn,
-                              const CFX_RetainPtr<CFX_DIBSource>& pSource,
-                              int bitmap_alpha,
-                              uint32_t mask_color,
-                              const CFX_Matrix* pMatrix,
-                              uint32_t dib_flags,
-                              bool bRgbByteOrder) {
-  m_Matrix = *pMatrix;
-  CFX_FloatRect image_rect_f = m_Matrix.GetUnitRect();
-  FX_RECT image_rect = image_rect_f.GetOuterRect();
+CFX_ImageRenderer::CFX_ImageRenderer(
+    const CFX_RetainPtr<CFX_DIBitmap>& pDevice,
+    const CFX_ClipRgn* pClipRgn,
+    const CFX_RetainPtr<CFX_DIBSource>& pSource,
+    int bitmap_alpha,
+    uint32_t mask_color,
+    const CFX_Matrix* pMatrix,
+    uint32_t dib_flags,
+    bool bRgbByteOrder)
+    : m_pDevice(pDevice),
+      m_pClipRgn(pClipRgn),
+      m_Matrix(*pMatrix),
+      m_BitmapAlpha(bitmap_alpha),
+      m_BlendType(FXDIB_BLEND_NORMAL),
+      m_bRgbByteOrder(bRgbByteOrder),
+      m_MaskColor(mask_color),
+      m_Status(0),
+      m_AlphaFlag(0) {
+  FX_RECT image_rect = m_Matrix.GetUnitRect().GetOuterRect();
   m_ClipBox = pClipRgn ? pClipRgn->GetBox() : FX_RECT(0, 0, pDevice->GetWidth(),
                                                       pDevice->GetHeight());
   m_ClipBox.Intersect(image_rect);
   if (m_ClipBox.IsEmpty())
-    return false;
-
-  m_pDevice = pDevice;
-  m_pClipRgn = pClipRgn;
-  m_MaskColor = mask_color;
-  m_BitmapAlpha = bitmap_alpha;
-  m_Matrix = *pMatrix;
-  m_Flags = dib_flags;
-  m_AlphaFlag = 0;
-  m_bRgbByteOrder = bRgbByteOrder;
-  m_BlendType = FXDIB_BLEND_NORMAL;
+    return;
 
   if ((fabs(m_Matrix.b) >= 0.5f || m_Matrix.a == 0) ||
       (fabs(m_Matrix.c) >= 0.5f || m_Matrix.d == 0)) {
@@ -64,17 +55,14 @@
       m_Stretcher = pdfium::MakeUnique<CFX_ImageStretcher>(
           &m_Composer, pSource, dest_height, dest_width, bitmap_clip,
           dib_flags);
-      if (!m_Stretcher->Start())
-        return false;
-
-      m_Status = 1;
-      return true;
+      if (m_Stretcher->Start())
+        m_Status = 1;
+      return;
     }
     m_Status = 2;
     m_pTransformer = pdfium::MakeUnique<CFX_ImageTransformer>(
         pSource, &m_Matrix, dib_flags, &m_ClipBox);
-    m_pTransformer->Start();
-    return true;
+    return;
   }
 
   int dest_width = image_rect.Width();
@@ -86,7 +74,7 @@
     dest_height = -dest_height;
 
   if (dest_width == 0 || dest_height == 0)
-    return false;
+    return;
 
   FX_RECT bitmap_clip = m_ClipBox;
   bitmap_clip.Offset(-image_rect.left, -image_rect.top);
@@ -95,9 +83,11 @@
   m_Status = 1;
   m_Stretcher = pdfium::MakeUnique<CFX_ImageStretcher>(
       &m_Composer, pSource, dest_width, dest_height, bitmap_clip, dib_flags);
-  return m_Stretcher->Start();
+  m_Stretcher->Start();
 }
 
+CFX_ImageRenderer::~CFX_ImageRenderer() {}
+
 bool CFX_ImageRenderer::Continue(IFX_Pause* pPause) {
   if (m_Status == 1)
     return m_Stretcher->Continue(pPause);
diff --git a/core/fxge/dib/cfx_imagerenderer.h b/core/fxge/dib/cfx_imagerenderer.h
index cad621e..97427ce 100644
--- a/core/fxge/dib/cfx_imagerenderer.h
+++ b/core/fxge/dib/cfx_imagerenderer.h
@@ -23,35 +23,32 @@
 
 class CFX_ImageRenderer {
  public:
-  CFX_ImageRenderer();
+  CFX_ImageRenderer(const CFX_RetainPtr<CFX_DIBitmap>& pDevice,
+                    const CFX_ClipRgn* pClipRgn,
+                    const CFX_RetainPtr<CFX_DIBSource>& pSource,
+                    int bitmap_alpha,
+                    uint32_t mask_color,
+                    const CFX_Matrix* pMatrix,
+                    uint32_t dib_flags,
+                    bool bRgbByteOrder);
   ~CFX_ImageRenderer();
 
-  bool Start(const CFX_RetainPtr<CFX_DIBitmap>& pDevice,
-             const CFX_ClipRgn* pClipRgn,
-             const CFX_RetainPtr<CFX_DIBSource>& pSource,
-             int bitmap_alpha,
-             uint32_t mask_color,
-             const CFX_Matrix* pMatrix,
-             uint32_t dib_flags,
-             bool bRgbByteOrder);
-
   bool Continue(IFX_Pause* pPause);
 
  private:
-  CFX_RetainPtr<CFX_DIBitmap> m_pDevice;
-  CFX_UnownedPtr<const CFX_ClipRgn> m_pClipRgn;
-  int m_BitmapAlpha;
+  const CFX_RetainPtr<CFX_DIBitmap> m_pDevice;
+  const CFX_UnownedPtr<const CFX_ClipRgn> m_pClipRgn;
+  const CFX_Matrix m_Matrix;
+  const int m_BitmapAlpha;
+  const int m_BlendType;
+  const bool m_bRgbByteOrder;
   uint32_t m_MaskColor;
-  CFX_Matrix m_Matrix;
   std::unique_ptr<CFX_ImageTransformer> m_pTransformer;
   std::unique_ptr<CFX_ImageStretcher> m_Stretcher;
   CFX_BitmapComposer m_Composer;
   int m_Status;
   FX_RECT m_ClipBox;
-  uint32_t m_Flags;
   int m_AlphaFlag;
-  bool m_bRgbByteOrder;
-  int m_BlendType;
 };
 
 #endif  // CORE_FXGE_DIB_CFX_IMAGERENDERER_H_
diff --git a/core/fxge/dib/cfx_imagetransformer.cpp b/core/fxge/dib/cfx_imagetransformer.cpp
index 2fb21e4..7a097ce 100644
--- a/core/fxge/dib/cfx_imagetransformer.cpp
+++ b/core/fxge/dib/cfx_imagetransformer.cpp
@@ -186,19 +186,14 @@
       m_pMatrix(pMatrix),
       m_pClip(pClip),
       m_Flags(flags),
-      m_Status(0) {}
-
-CFX_ImageTransformer::~CFX_ImageTransformer() {}
-
-bool CFX_ImageTransformer::Start() {
-  CFX_FloatRect unit_rect = m_pMatrix->GetUnitRect();
-  FX_RECT result_rect = unit_rect.GetClosestRect();
+      m_Status(0) {
+  FX_RECT result_rect = m_pMatrix->GetUnitRect().GetClosestRect();
   FX_RECT result_clip = result_rect;
   if (m_pClip)
     result_clip.Intersect(*m_pClip);
 
   if (result_clip.IsEmpty())
-    return false;
+    return;
 
   m_result = result_clip;
   if (fabs(m_pMatrix->a) < fabs(m_pMatrix->b) / 20 &&
@@ -213,29 +208,29 @@
         &m_Storer, m_pSrc, dest_height, dest_width, result_clip, m_Flags);
     m_Stretcher->Start();
     m_Status = 1;
-    return true;
+    return;
   }
   if (fabs(m_pMatrix->b) < FIX16_005 && fabs(m_pMatrix->c) < FIX16_005) {
-    int dest_width =
-        m_pMatrix->a > 0 ? (int)ceil(m_pMatrix->a) : (int)floor(m_pMatrix->a);
-    int dest_height =
-        m_pMatrix->d > 0 ? (int)-ceil(m_pMatrix->d) : (int)-floor(m_pMatrix->d);
+    int dest_width = static_cast<int>(m_pMatrix->a > 0 ? ceil(m_pMatrix->a)
+                                                       : floor(m_pMatrix->a));
+    int dest_height = static_cast<int>(m_pMatrix->d > 0 ? -ceil(m_pMatrix->d)
+                                                        : -floor(m_pMatrix->d));
     result_clip.Offset(-result_rect.left, -result_rect.top);
     m_Stretcher = pdfium::MakeUnique<CFX_ImageStretcher>(
         &m_Storer, m_pSrc, dest_width, dest_height, result_clip, m_Flags);
     m_Stretcher->Start();
     m_Status = 2;
-    return true;
+    return;
   }
-  int stretch_width = (int)ceil(FXSYS_sqrt2(m_pMatrix->a, m_pMatrix->b));
-  int stretch_height = (int)ceil(FXSYS_sqrt2(m_pMatrix->c, m_pMatrix->d));
-  CFX_Matrix stretch2dest(1.0f, 0.0f, 0.0f, -1.0f, 0.0f,
-                          (float)(stretch_height));
+  int stretch_width =
+      static_cast<int>(ceil(FXSYS_sqrt2(m_pMatrix->a, m_pMatrix->b)));
+  int stretch_height =
+      static_cast<int>(ceil(FXSYS_sqrt2(m_pMatrix->c, m_pMatrix->d)));
+  CFX_Matrix stretch2dest(1.0f, 0.0f, 0.0f, -1.0f, 0.0f, stretch_height);
   stretch2dest.Concat(
       CFX_Matrix(m_pMatrix->a / stretch_width, m_pMatrix->b / stretch_width,
                  m_pMatrix->c / stretch_height, m_pMatrix->d / stretch_height,
                  m_pMatrix->e, m_pMatrix->f));
-  ASSERT(m_dest2stretch.IsIdentity());
   m_dest2stretch = stretch2dest.GetInverse();
 
   CFX_FloatRect clip_rect_f(result_clip);
@@ -246,9 +241,10 @@
       &m_Storer, m_pSrc, stretch_width, stretch_height, m_StretchClip, m_Flags);
   m_Stretcher->Start();
   m_Status = 3;
-  return true;
 }
 
+CFX_ImageTransformer::~CFX_ImageTransformer() {}
+
 bool CFX_ImageTransformer::Continue(IFX_Pause* pPause) {
   if (m_Status == 1) {
     if (m_Stretcher->Continue(pPause))
diff --git a/core/fxge/dib/cfx_imagetransformer.h b/core/fxge/dib/cfx_imagetransformer.h
index 90f605d..60e4714 100644
--- a/core/fxge/dib/cfx_imagetransformer.h
+++ b/core/fxge/dib/cfx_imagetransformer.h
@@ -25,7 +25,6 @@
                        const FX_RECT* pClip);
   ~CFX_ImageTransformer();
 
-  bool Start();
   bool Continue(IFX_Pause* pPause);
 
   const FX_RECT& result() const { return m_result; }
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index f4b72fe..7e0d556 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -2174,9 +2174,9 @@
   if (!m_pBitmap->GetBuffer())
     return true;
   m_pBitmap->UnPreMultiply();
-  *handle = pdfium::MakeUnique<CFX_ImageRenderer>();
-  (*handle)->Start(m_pBitmap, m_pClipRgn.get(), pSource, bitmap_alpha, argb,
-                   pMatrix, render_flags, m_bRgbByteOrder);
+  *handle = pdfium::MakeUnique<CFX_ImageRenderer>(
+      m_pBitmap, m_pClipRgn.get(), pSource, bitmap_alpha, argb, pMatrix,
+      render_flags, m_bRgbByteOrder);
 #endif  // _SKIA_SUPPORT_PATHS_
   return true;
 }
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index f72b291..2437c53 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -660,15 +660,12 @@
     m_Status = 2;
     m_pTransformer = pdfium::MakeUnique<CFX_ImageTransformer>(
         pDib, &m_ImageMatrix, m_Flags, &clip_box);
-    m_pTransformer->Start();
     return true;
   }
-  if (m_ImageMatrix.a < 0) {
+  if (m_ImageMatrix.a < 0)
     dest_width = -dest_width;
-  }
-  if (m_ImageMatrix.d > 0) {
+  if (m_ImageMatrix.d > 0)
     dest_height = -dest_height;
-  }
   int dest_left, dest_top;
   dest_left = dest_width > 0 ? image_rect.left : image_rect.right;
   dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom;