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;