Add a WriteBezierCurve() helper in cpdfsdk_appstream.cpp.
There are several instances of code that generate bezier curve operators
in cpdfsdk_appstream.cpp. Add a WriteBezierCurve() function to
consolidate these similar instances.
Change-Id: I62a40f395e37ffc22b2da74c0c55c78353751a13
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/96252
Reviewed-by: Nigi <nigi@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_appstream.cpp b/fpdfsdk/cpdfsdk_appstream.cpp
index d8e747e..2857632 100644
--- a/fpdfsdk/cpdfsdk_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -126,6 +126,15 @@
WriteLine(stream, points[0]);
}
+void WriteBezierCurve(fxcrt::ostringstream& stream,
+ const CFX_PointF& point1,
+ const CFX_PointF& point2,
+ const CFX_PointF& point3) {
+ stream << point1.x << " " << point1.y << " " << point2.x << " " << point2.y
+ << " " << point3.x << " " << point3.y << " " << kCurveToOperator
+ << "\n";
+}
+
ByteString GetStrokeColorAppStream(const CFX_Color& color) {
fxcrt::ostringstream sColorStream;
switch (color.nColorType) {
@@ -201,17 +210,18 @@
for (size_t i = 0; i < std::size(pts); ++i) {
size_t nNext = i < std::size(pts) - 1 ? i + 1 : 0;
+ const CFX_PointF& pt_next = pts[nNext][0];
float px1 = pts[i][1].x - pts[i][0].x;
float py1 = pts[i][1].y - pts[i][0].y;
- float px2 = pts[i][2].x - pts[nNext][0].x;
- float py2 = pts[i][2].y - pts[nNext][0].y;
+ float px2 = pts[i][2].x - pt_next.x;
+ float py2 = pts[i][2].y - pt_next.y;
- csAP << pts[i][0].x + px1 * FXSYS_BEZIER << " "
- << pts[i][0].y + py1 * FXSYS_BEZIER << " "
- << pts[nNext][0].x + px2 * FXSYS_BEZIER << " "
- << pts[nNext][0].y + py2 * FXSYS_BEZIER << " " << pts[nNext][0].x
- << " " << pts[nNext][0].y << " " << kCurveToOperator << "\n";
+ WriteBezierCurve(
+ csAP,
+ {pts[i][0].x + px1 * FXSYS_BEZIER, pts[i][0].y + py1 * FXSYS_BEZIER},
+ {pt_next.x + px2 * FXSYS_BEZIER, pt_next.y + py2 * FXSYS_BEZIER},
+ pt_next);
}
return ByteString(csAP);
@@ -233,30 +243,26 @@
float px = pt2.x - pt1.x;
float py = pt2.y - pt1.y;
- csAP << pt1.x << " " << pt1.y + py * FXSYS_BEZIER << " "
- << pt2.x - px * FXSYS_BEZIER << " " << pt2.y << " " << pt2.x << " "
- << pt2.y << " " << kCurveToOperator << "\n";
+ WriteBezierCurve(csAP, {pt1.x, pt1.y + py * FXSYS_BEZIER},
+ {pt2.x - px * FXSYS_BEZIER, pt2.y}, pt2);
px = pt3.x - pt2.x;
py = pt2.y - pt3.y;
- csAP << pt2.x + px * FXSYS_BEZIER << " " << pt2.y << " " << pt3.x << " "
- << pt3.y + py * FXSYS_BEZIER << " " << pt3.x << " " << pt3.y << " "
- << kCurveToOperator << "\n";
+ WriteBezierCurve(csAP, {pt2.x + px * FXSYS_BEZIER, pt2.y},
+ {pt3.x, pt3.y + py * FXSYS_BEZIER}, pt3);
px = pt3.x - pt4.x;
py = pt3.y - pt4.y;
- csAP << pt3.x << " " << pt3.y - py * FXSYS_BEZIER << " "
- << pt4.x + px * FXSYS_BEZIER << " " << pt4.y << " " << pt4.x << " "
- << pt4.y << " " << kCurveToOperator << "\n";
+ WriteBezierCurve(csAP, {pt3.x, pt3.y - py * FXSYS_BEZIER},
+ {pt4.x + px * FXSYS_BEZIER, pt4.y}, pt4);
px = pt4.x - pt1.x;
py = pt1.y - pt4.y;
- csAP << pt4.x - px * FXSYS_BEZIER << " " << pt4.y << " " << pt1.x << " "
- << pt1.y - py * FXSYS_BEZIER << " " << pt1.x << " " << pt1.y << " "
- << kCurveToOperator << "\n";
+ WriteBezierCurve(csAP, {pt4.x - px * FXSYS_BEZIER, pt4.y},
+ {pt1.x, pt1.y - py * FXSYS_BEZIER}, pt1);
return ByteString(csAP);
}
@@ -347,16 +353,14 @@
px = pt2.x - pt1.x;
py = pt2.y - pt1.y;
- csAP << pt1.x << " " << pt1.y + py * FXSYS_BEZIER << " "
- << pt2.x - px * FXSYS_BEZIER << " " << pt2.y << " " << pt2.x << " "
- << pt2.y << " " << kCurveToOperator << "\n";
+ WriteBezierCurve(csAP, {pt1.x, pt1.y + py * FXSYS_BEZIER},
+ {pt2.x - px * FXSYS_BEZIER, pt2.y}, pt2);
px = pt3.x - pt2.x;
py = pt2.y - pt3.y;
- csAP << pt2.x + px * FXSYS_BEZIER << " " << pt2.y << " " << pt3.x << " "
- << pt3.y + py * FXSYS_BEZIER << " " << pt3.x << " " << pt3.y << " "
- << kCurveToOperator << "\n";
+ WriteBezierCurve(csAP, {pt2.x + px * FXSYS_BEZIER, pt2.y},
+ {pt3.x, pt3.y + py * FXSYS_BEZIER}, pt3);
return ByteString(csAP);
}