Use more CFX_PointFs in CPDF_StreamContentParser.

Replace pairs of floats with a points.

Change-Id: Icde27aaf54b9a9c937b220cb1353fcd758ca0805
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81992
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 633dee6..84eeccd 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -560,7 +560,7 @@
 }
 
 void CPDF_StreamContentParser::Handle_CloseEOFillStrokePath() {
-  AddPathPoint(m_PathStartX, m_PathStartY, CFX_Path::Point::Type::kLine, true);
+  AddPathPoint(m_PathStart, CFX_Path::Point::Type::kLine, true);
   AddPathObject(CFX_FillRenderOptions::FillType::kEvenOdd, true);
 }
 
@@ -667,11 +667,11 @@
 }
 
 void CPDF_StreamContentParser::Handle_CurveTo_123() {
-  AddPathPoint(GetNumber(5), GetNumber(4), CFX_Path::Point::Type::kBezier,
+  AddPathPoint({GetNumber(5), GetNumber(4)}, CFX_Path::Point::Type::kBezier,
                false);
-  AddPathPoint(GetNumber(3), GetNumber(2), CFX_Path::Point::Type::kBezier,
+  AddPathPoint({GetNumber(3), GetNumber(2)}, CFX_Path::Point::Type::kBezier,
                false);
-  AddPathPoint(GetNumber(1), GetNumber(0), CFX_Path::Point::Type::kBezier,
+  AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier,
                false);
 }
 
@@ -902,11 +902,11 @@
   if (m_PathPoints.empty())
     return;
 
-  if (m_PathStartX != m_PathCurrentX || m_PathStartY != m_PathCurrentY)
-    AddPathPoint(m_PathStartX, m_PathStartY, CFX_Path::Point::Type::kLine,
-                 true);
-  else if (m_PathPoints.back().m_Type != CFX_Path::Point::Type::kMove)
+  if (m_PathStart.x != m_PathCurrent.x || m_PathStart.y != m_PathCurrent.y) {
+    AddPathPoint(m_PathStart, CFX_Path::Point::Type::kLine, true);
+  } else if (m_PathPoints.back().m_Type != CFX_Path::Point::Type::kMove) {
     m_PathPoints.back().m_CloseFigure = true;
+  }
 }
 
 void CPDF_StreamContentParser::Handle_SetFlat() {
@@ -947,14 +947,16 @@
   if (m_ParamCount != 2)
     return;
 
-  AddPathPoint(GetNumber(1), GetNumber(0), CFX_Path::Point::Type::kLine, false);
+  AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kLine,
+               false);
 }
 
 void CPDF_StreamContentParser::Handle_MoveTo() {
   if (m_ParamCount != 2)
     return;
 
-  AddPathPoint(GetNumber(1), GetNumber(0), CFX_Path::Point::Type::kMove, false);
+  AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kMove,
+               false);
   ParsePathObject();
 }
 
@@ -983,17 +985,19 @@
 }
 
 void CPDF_StreamContentParser::Handle_Rectangle() {
-  float x = GetNumber(3), y = GetNumber(2);
-  float w = GetNumber(1), h = GetNumber(0);
+  float x = GetNumber(3);
+  float y = GetNumber(2);
+  float w = GetNumber(1);
+  float h = GetNumber(0);
   AddPathRect(x, y, w, h);
 }
 
 void CPDF_StreamContentParser::AddPathRect(float x, float y, float w, float h) {
-  AddPathPoint(x, y, CFX_Path::Point::Type::kMove, false);
-  AddPathPoint(x + w, y, CFX_Path::Point::Type::kLine, false);
-  AddPathPoint(x + w, y + h, CFX_Path::Point::Type::kLine, false);
-  AddPathPoint(x, y + h, CFX_Path::Point::Type::kLine, false);
-  AddPathPoint(x, y, CFX_Path::Point::Type::kLine, true);
+  AddPathPoint({x, y}, CFX_Path::Point::Type::kMove, false);
+  AddPathPoint({x + w, y}, CFX_Path::Point::Type::kLine, false);
+  AddPathPoint({x + w, y + h}, CFX_Path::Point::Type::kLine, false);
+  AddPathPoint({x, y + h}, CFX_Path::Point::Type::kLine, false);
+  AddPathPoint({x, y}, CFX_Path::Point::Type::kLine, true);
 }
 
 void CPDF_StreamContentParser::Handle_SetRGBColor_Fill() {
@@ -1380,11 +1384,10 @@
 }
 
 void CPDF_StreamContentParser::Handle_CurveTo_23() {
-  AddPathPoint(m_PathCurrentX, m_PathCurrentY, CFX_Path::Point::Type::kBezier,
+  AddPathPoint(m_PathCurrent, CFX_Path::Point::Type::kBezier, false);
+  AddPathPoint({GetNumber(3), GetNumber(2)}, CFX_Path::Point::Type::kBezier,
                false);
-  AddPathPoint(GetNumber(3), GetNumber(2), CFX_Path::Point::Type::kBezier,
-               false);
-  AddPathPoint(GetNumber(1), GetNumber(0), CFX_Path::Point::Type::kBezier,
+  AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier,
                false);
 }
 
@@ -1401,11 +1404,11 @@
 }
 
 void CPDF_StreamContentParser::Handle_CurveTo_13() {
-  AddPathPoint(GetNumber(3), GetNumber(2), CFX_Path::Point::Type::kBezier,
+  AddPathPoint({GetNumber(3), GetNumber(2)}, CFX_Path::Point::Type::kBezier,
                false);
-  AddPathPoint(GetNumber(1), GetNumber(0), CFX_Path::Point::Type::kBezier,
+  AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier,
                false);
-  AddPathPoint(GetNumber(1), GetNumber(0), CFX_Path::Point::Type::kBezier,
+  AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier,
                false);
 }
 
@@ -1422,33 +1425,29 @@
 
 void CPDF_StreamContentParser::Handle_Invalid() {}
 
-void CPDF_StreamContentParser::AddPathPoint(float x,
-                                            float y,
+void CPDF_StreamContentParser::AddPathPoint(const CFX_PointF& point,
                                             CFX_Path::Point::Type type,
                                             bool close) {
   // If the path point is the same move as the previous one and neither of them
   // closes the path, then just skip it.
   if (!close && type == CFX_Path::Point::Type::kMove && !m_PathPoints.empty() &&
       !m_PathPoints.back().m_CloseFigure &&
-      m_PathPoints.back().m_Type == type && m_PathCurrentX == x &&
-      m_PathCurrentY == y) {
+      m_PathPoints.back().m_Type == type && m_PathCurrent == point) {
     return;
   }
 
-  m_PathCurrentX = x;
-  m_PathCurrentY = y;
+  m_PathCurrent = point;
   if (type == CFX_Path::Point::Type::kMove && !close) {
-    m_PathStartX = x;
-    m_PathStartY = y;
+    m_PathStart = point;
     if (!m_PathPoints.empty() &&
         m_PathPoints.back().IsTypeAndOpen(CFX_Path::Point::Type::kMove)) {
-      m_PathPoints.back().m_Point = CFX_PointF(x, y);
+      m_PathPoints.back().m_Point = point;
       return;
     }
   } else if (m_PathPoints.empty()) {
     return;
   }
-  m_PathPoints.push_back(CFX_Path::Point(CFX_PointF(x, y), type, close));
+  m_PathPoints.push_back(CFX_Path::Point(point, type, close));
 }
 
 void CPDF_StreamContentParser::AddPathObject(
@@ -1569,40 +1568,40 @@
         if (len == 1) {
           switch (strc[0]) {
             case kPathOperatorSubpath:
-              AddPathPoint(params[0], params[1], CFX_Path::Point::Type::kMove,
+              AddPathPoint({params[0], params[1]}, CFX_Path::Point::Type::kMove,
                            false);
               nParams = 0;
               break;
             case kPathOperatorLine:
-              AddPathPoint(params[0], params[1], CFX_Path::Point::Type::kLine,
+              AddPathPoint({params[0], params[1]}, CFX_Path::Point::Type::kLine,
                            false);
               nParams = 0;
               break;
             case kPathOperatorCubicBezier1:
-              AddPathPoint(params[0], params[1], CFX_Path::Point::Type::kBezier,
-                           false);
-              AddPathPoint(params[2], params[3], CFX_Path::Point::Type::kBezier,
-                           false);
-              AddPathPoint(params[4], params[5], CFX_Path::Point::Type::kBezier,
-                           false);
+              AddPathPoint({params[0], params[1]},
+                           CFX_Path::Point::Type::kBezier, false);
+              AddPathPoint({params[2], params[3]},
+                           CFX_Path::Point::Type::kBezier, false);
+              AddPathPoint({params[4], params[5]},
+                           CFX_Path::Point::Type::kBezier, false);
               nParams = 0;
               break;
             case kPathOperatorCubicBezier2:
-              AddPathPoint(m_PathCurrentX, m_PathCurrentY,
+              AddPathPoint(m_PathCurrent, CFX_Path::Point::Type::kBezier,
+                           false);
+              AddPathPoint({params[0], params[1]},
                            CFX_Path::Point::Type::kBezier, false);
-              AddPathPoint(params[0], params[1], CFX_Path::Point::Type::kBezier,
-                           false);
-              AddPathPoint(params[2], params[3], CFX_Path::Point::Type::kBezier,
-                           false);
+              AddPathPoint({params[2], params[3]},
+                           CFX_Path::Point::Type::kBezier, false);
               nParams = 0;
               break;
             case kPathOperatorCubicBezier3:
-              AddPathPoint(params[0], params[1], CFX_Path::Point::Type::kBezier,
-                           false);
-              AddPathPoint(params[2], params[3], CFX_Path::Point::Type::kBezier,
-                           false);
-              AddPathPoint(params[2], params[3], CFX_Path::Point::Type::kBezier,
-                           false);
+              AddPathPoint({params[0], params[1]},
+                           CFX_Path::Point::Type::kBezier, false);
+              AddPathPoint({params[2], params[3]},
+                           CFX_Path::Point::Type::kBezier, false);
+              AddPathPoint({params[2], params[3]},
+                           CFX_Path::Point::Type::kBezier, false);
               nParams = 0;
               break;
             case kPathOperatorClosePath:
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.h b/core/fpdfapi/page/cpdf_streamcontentparser.h
index cf95937..895a2c7 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.h
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.h
@@ -14,6 +14,7 @@
 #include <vector>
 
 #include "core/fpdfapi/page/cpdf_contentmarks.h"
+#include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_number.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -108,7 +109,9 @@
 
   void OnChangeTextMatrix();
   void ParsePathObject();
-  void AddPathPoint(float x, float y, CFX_Path::Point::Type type, bool close);
+  void AddPathPoint(const CFX_PointF& point,
+                    CFX_Path::Point::Type type,
+                    bool close);
   void AddPathRect(float x, float y, float w, float h);
   void AddPathObject(CFX_FillRenderOptions::FillType fill_type, bool bStroke);
   CPDF_ImageObject* AddImage(RetainPtr<CPDF_Stream> pStream);
@@ -222,10 +225,8 @@
   std::vector<std::unique_ptr<CPDF_TextObject>> m_ClipTextList;
   UnownedPtr<const CPDF_TextObject> m_pLastTextObject;
   std::vector<CFX_Path::Point> m_PathPoints;
-  float m_PathStartX = 0.0f;
-  float m_PathStartY = 0.0f;
-  float m_PathCurrentX = 0.0f;
-  float m_PathCurrentY = 0.0f;
+  CFX_PointF m_PathStart;
+  CFX_PointF m_PathCurrent;
   CFX_FillRenderOptions::FillType m_PathClipType =
       CFX_FillRenderOptions::FillType::kNoFill;
   ByteString m_LastImageName;