Remove bool parameter from CPDF_StreamContentParser::AddPathPoint().
Split it into AddPathPoint() and AddPathPointAndClose().
Change-Id: I7ef2c2f0c3a23e00a64652981ebed23657d186c1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81993
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Hui Yingst <nigi@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 84eeccd..ef2c28b 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_PathStart, CFX_Path::Point::Type::kLine, true);
+ AddPathPointAndClose(m_PathStart, CFX_Path::Point::Type::kLine);
AddPathObject(CFX_FillRenderOptions::FillType::kEvenOdd, true);
}
@@ -667,12 +667,9 @@
}
void CPDF_StreamContentParser::Handle_CurveTo_123() {
- AddPathPoint({GetNumber(5), GetNumber(4)}, 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,
- false);
+ AddPathPoint({GetNumber(5), GetNumber(4)}, CFX_Path::Point::Type::kBezier);
+ AddPathPoint({GetNumber(3), GetNumber(2)}, CFX_Path::Point::Type::kBezier);
+ AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier);
}
void CPDF_StreamContentParser::Handle_ConcatMatrix() {
@@ -903,7 +900,7 @@
return;
if (m_PathStart.x != m_PathCurrent.x || m_PathStart.y != m_PathCurrent.y) {
- AddPathPoint(m_PathStart, CFX_Path::Point::Type::kLine, true);
+ AddPathPointAndClose(m_PathStart, CFX_Path::Point::Type::kLine);
} else if (m_PathPoints.back().m_Type != CFX_Path::Point::Type::kMove) {
m_PathPoints.back().m_CloseFigure = true;
}
@@ -947,16 +944,14 @@
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);
}
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);
ParsePathObject();
}
@@ -993,11 +988,11 @@
}
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);
+ AddPathPoint({x + w, y}, CFX_Path::Point::Type::kLine);
+ AddPathPoint({x + w, y + h}, CFX_Path::Point::Type::kLine);
+ AddPathPoint({x, y + h}, CFX_Path::Point::Type::kLine);
+ AddPathPointAndClose({x, y}, CFX_Path::Point::Type::kLine);
}
void CPDF_StreamContentParser::Handle_SetRGBColor_Fill() {
@@ -1384,11 +1379,9 @@
}
void CPDF_StreamContentParser::Handle_CurveTo_23() {
- AddPathPoint(m_PathCurrent, 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,
- false);
+ AddPathPoint(m_PathCurrent, CFX_Path::Point::Type::kBezier);
+ AddPathPoint({GetNumber(3), GetNumber(2)}, CFX_Path::Point::Type::kBezier);
+ AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier);
}
void CPDF_StreamContentParser::Handle_SetLineWidth() {
@@ -1404,12 +1397,9 @@
}
void CPDF_StreamContentParser::Handle_CurveTo_13() {
- AddPathPoint({GetNumber(3), GetNumber(2)}, CFX_Path::Point::Type::kBezier,
- false);
- AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier,
- false);
- AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier,
- false);
+ AddPathPoint({GetNumber(3), GetNumber(2)}, CFX_Path::Point::Type::kBezier);
+ AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier);
+ AddPathPoint({GetNumber(1), GetNumber(0)}, CFX_Path::Point::Type::kBezier);
}
void CPDF_StreamContentParser::Handle_NextLineShowText() {
@@ -1426,18 +1416,17 @@
void CPDF_StreamContentParser::Handle_Invalid() {}
void CPDF_StreamContentParser::AddPathPoint(const CFX_PointF& point,
- CFX_Path::Point::Type type,
- bool close) {
+ CFX_Path::Point::Type type) {
// 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() &&
+ if (type == CFX_Path::Point::Type::kMove && !m_PathPoints.empty() &&
!m_PathPoints.back().m_CloseFigure &&
m_PathPoints.back().m_Type == type && m_PathCurrent == point) {
return;
}
m_PathCurrent = point;
- if (type == CFX_Path::Point::Type::kMove && !close) {
+ if (type == CFX_Path::Point::Type::kMove) {
m_PathStart = point;
if (!m_PathPoints.empty() &&
m_PathPoints.back().IsTypeAndOpen(CFX_Path::Point::Type::kMove)) {
@@ -1447,7 +1436,17 @@
} else if (m_PathPoints.empty()) {
return;
}
- m_PathPoints.push_back(CFX_Path::Point(point, type, close));
+ m_PathPoints.push_back(CFX_Path::Point(point, type, /*close=*/false));
+}
+
+void CPDF_StreamContentParser::AddPathPointAndClose(
+ const CFX_PointF& point,
+ CFX_Path::Point::Type type) {
+ m_PathCurrent = point;
+ if (m_PathPoints.empty())
+ return;
+
+ m_PathPoints.push_back(CFX_Path::Point(point, type, /*close=*/true));
}
void CPDF_StreamContentParser::AddPathObject(
@@ -1568,40 +1567,39 @@
if (len == 1) {
switch (strc[0]) {
case kPathOperatorSubpath:
- AddPathPoint({params[0], params[1]}, CFX_Path::Point::Type::kMove,
- false);
+ AddPathPoint({params[0], params[1]},
+ CFX_Path::Point::Type::kMove);
nParams = 0;
break;
case kPathOperatorLine:
- AddPathPoint({params[0], params[1]}, CFX_Path::Point::Type::kLine,
- false);
+ AddPathPoint({params[0], params[1]},
+ CFX_Path::Point::Type::kLine);
nParams = 0;
break;
case kPathOperatorCubicBezier1:
AddPathPoint({params[0], params[1]},
- CFX_Path::Point::Type::kBezier, false);
+ CFX_Path::Point::Type::kBezier);
AddPathPoint({params[2], params[3]},
- CFX_Path::Point::Type::kBezier, false);
+ CFX_Path::Point::Type::kBezier);
AddPathPoint({params[4], params[5]},
- CFX_Path::Point::Type::kBezier, false);
+ CFX_Path::Point::Type::kBezier);
nParams = 0;
break;
case kPathOperatorCubicBezier2:
- AddPathPoint(m_PathCurrent, CFX_Path::Point::Type::kBezier,
- false);
+ AddPathPoint(m_PathCurrent, CFX_Path::Point::Type::kBezier);
AddPathPoint({params[0], params[1]},
- CFX_Path::Point::Type::kBezier, false);
+ CFX_Path::Point::Type::kBezier);
AddPathPoint({params[2], params[3]},
- CFX_Path::Point::Type::kBezier, false);
+ CFX_Path::Point::Type::kBezier);
nParams = 0;
break;
case kPathOperatorCubicBezier3:
AddPathPoint({params[0], params[1]},
- CFX_Path::Point::Type::kBezier, false);
+ CFX_Path::Point::Type::kBezier);
AddPathPoint({params[2], params[3]},
- CFX_Path::Point::Type::kBezier, false);
+ CFX_Path::Point::Type::kBezier);
AddPathPoint({params[2], params[3]},
- CFX_Path::Point::Type::kBezier, false);
+ CFX_Path::Point::Type::kBezier);
nParams = 0;
break;
case kPathOperatorClosePath:
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.h b/core/fpdfapi/page/cpdf_streamcontentparser.h
index 895a2c7..977fedc 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.h
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.h
@@ -109,9 +109,9 @@
void OnChangeTextMatrix();
void ParsePathObject();
- void AddPathPoint(const CFX_PointF& point,
- CFX_Path::Point::Type type,
- bool close);
+ void AddPathPoint(const CFX_PointF& point, CFX_Path::Point::Type type);
+ void AddPathPointAndClose(const CFX_PointF& point,
+ CFX_Path::Point::Type type);
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);