Simplify CPDFSDK_AppStream.
- Organize code that draw closed figures to have their input data in an
array.
- Consistently use CFX_FloatRect's Width() and Height() methods.
- Reduce number of redundant calculations.
Change-Id: I180c95dfd6f3a44959ed3839c8689cd9d10e8944
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/96250
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 e06472b..7410933 100644
--- a/fpdfsdk/cpdfsdk_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -262,16 +262,15 @@
float fWidth = crBBox.Width();
float fHeight = crBBox.Height();
- CFX_PointF pt1(crBBox.left, crBBox.bottom + fHeight / 2);
- CFX_PointF pt2(crBBox.left + fWidth / 2, crBBox.top);
- CFX_PointF pt3(crBBox.right, crBBox.bottom + fHeight / 2);
- CFX_PointF pt4(crBBox.left + fWidth / 2, crBBox.bottom);
-
- csAP << pt1.x << " " << pt1.y << " " << kMoveToOperator << "\n";
- csAP << pt2.x << " " << pt2.y << " " << kLineToOperator << "\n";
- csAP << pt3.x << " " << pt3.y << " " << kLineToOperator << "\n";
- csAP << pt4.x << " " << pt4.y << " " << kLineToOperator << "\n";
- csAP << pt1.x << " " << pt1.y << " " << kLineToOperator << "\n";
+ const CFX_PointF points[] = {{crBBox.left, crBBox.bottom + fHeight / 2},
+ {crBBox.left + fWidth / 2, crBBox.top},
+ {crBBox.right, crBBox.bottom + fHeight / 2},
+ {crBBox.left + fWidth / 2, crBBox.bottom}};
+ csAP << points[0].x << " " << points[0].y << " " << kMoveToOperator << "\n";
+ csAP << points[1].x << " " << points[1].y << " " << kLineToOperator << "\n";
+ csAP << points[2].x << " " << points[2].y << " " << kLineToOperator << "\n";
+ csAP << points[3].x << " " << points[3].y << " " << kLineToOperator << "\n";
+ csAP << points[0].x << " " << points[0].y << " " << kLineToOperator << "\n";
return ByteString(csAP);
}
@@ -279,12 +278,15 @@
ByteString GetAP_Square(const CFX_FloatRect& crBBox) {
fxcrt::ostringstream csAP;
- csAP << crBBox.left << " " << crBBox.top << " " << kMoveToOperator << "\n";
- csAP << crBBox.right << " " << crBBox.top << " " << kLineToOperator << "\n";
- csAP << crBBox.right << " " << crBBox.bottom << " " << kLineToOperator
- << "\n";
- csAP << crBBox.left << " " << crBBox.bottom << " " << kLineToOperator << "\n";
- csAP << crBBox.left << " " << crBBox.top << " " << kLineToOperator << "\n";
+ const CFX_PointF points[] = {{crBBox.left, crBBox.top},
+ {crBBox.right, crBBox.top},
+ {crBBox.right, crBBox.bottom},
+ {crBBox.left, crBBox.bottom}};
+ csAP << points[0].x << " " << points[0].y << " " << kMoveToOperator << "\n";
+ csAP << points[1].x << " " << points[1].y << " " << kLineToOperator << "\n";
+ csAP << points[2].x << " " << points[2].y << " " << kLineToOperator << "\n";
+ csAP << points[3].x << " " << points[3].y << " " << kLineToOperator << "\n";
+ csAP << points[0].x << " " << points[0].y << " " << kLineToOperator << "\n";
return ByteString(csAP);
}
@@ -713,10 +715,10 @@
fxcrt::ostringstream str;
{
AutoClosedQCommand q(&str);
- str << rcPlate.left << " " << rcPlate.bottom << " "
- << rcPlate.right - rcPlate.left << " " << rcPlate.top - rcPlate.bottom
- << " " << kAppendRectOperator << " " << kSetNonZeroWindingClipOperator
- << " " << kEndPathNoFillOrStrokeOperator << "\n";
+ str << rcPlate.left << " " << rcPlate.bottom << " " << rcPlate.Width()
+ << " " << rcPlate.Height() << " " << kAppendRectOperator << " "
+ << kSetNonZeroWindingClipOperator << " "
+ << kEndPathNoFillOrStrokeOperator << "\n";
str << scale.x << " 0 0 " << scale.y << " " << rcPlate.left + offset.x
<< " " << rcPlate.bottom + offset.y << " " << kConcatMatrixOperator
@@ -915,10 +917,9 @@
fxcrt::ostringstream sAppStream;
{
AutoClosedQCommand q(&sAppStream);
- sAppStream << rcBBox.left << " " << rcBBox.bottom << " "
- << rcBBox.right - rcBBox.left << " "
- << rcBBox.top - rcBBox.bottom << " " << kAppendRectOperator
- << " " << kSetNonZeroWindingClipOperator << " "
+ sAppStream << rcBBox.left << " " << rcBBox.bottom << " " << rcBBox.Width()
+ << " " << rcBBox.Height() << " " << kAppendRectOperator << " "
+ << kSetNonZeroWindingClipOperator << " "
<< kEndPathNoFillOrStrokeOperator << "\n";
sAppStream << sTemp.str().c_str();
}
@@ -966,15 +967,20 @@
sAppStream << fWidth << " " << kSetLineWidthOperator << " ["
<< dash.nDash << " " << dash.nGap << "] " << dash.nPhase
<< " " << kSetDashOperator << "\n";
- sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " "
+ const CFX_PointF points[] = {
+ {fLeft + fWidth / 2, fBottom + fWidth / 2},
+ {fLeft + fWidth / 2, fTop - fWidth / 2},
+ {fRight - fWidth / 2, fTop - fWidth / 2},
+ {fRight - fWidth / 2, fBottom + fWidth / 2}};
+ sAppStream << points[0].x << " " << points[0].y << " "
<< kMoveToOperator << "\n";
- sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 << " "
+ sAppStream << points[1].x << " " << points[1].x << " "
<< kLineToOperator << "\n";
- sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 << " "
+ sAppStream << points[2].x << " " << points[2].x << " "
<< kLineToOperator << "\n";
- sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2
- << " " << kLineToOperator << "\n";
- sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " "
+ sAppStream << points[3].x << " " << points[3].x << " "
+ << kLineToOperator << "\n";
+ sAppStream << points[0].x << " " << points[0].y << " "
<< kLineToOperator << " " << kStrokeOperator << "\n";
}
break;
@@ -1053,10 +1059,9 @@
sAppStream << GetFillColorAppStream(
CFX_Color(CFX_Color::Type::kRGB, 220.0f / 255.0f,
220.0f / 255.0f, 220.0f / 255.0f))
- << rcBBox.left << " " << rcBBox.bottom << " "
- << rcBBox.right - rcBBox.left << " "
- << rcBBox.top - rcBBox.bottom << " " << kAppendRectOperator
- << " " << kFillOperator << "\n";
+ << rcBBox.left << " " << rcBBox.bottom << " " << rcBBox.Width()
+ << " " << rcBBox.Height() << " " << kAppendRectOperator << " "
+ << kFillOperator << "\n";
}
{
@@ -1073,15 +1078,18 @@
if (FXSYS_IsFloatBigger(rcBBox.right - rcBBox.left, 6) &&
FXSYS_IsFloatBigger(rcBBox.top - rcBBox.bottom, 6)) {
AutoClosedQCommand q(&sAppStream);
+ const CFX_PointF points[] = {{ptCenter.x - 3, ptCenter.y + 1.5f},
+ {ptCenter.x + 3, ptCenter.y + 1.5f},
+ {ptCenter.x, ptCenter.y - 1.5f}};
sAppStream << " 0 " << kSetGrayOperator << "\n"
- << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " "
- << kMoveToOperator << "\n"
- << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " "
- << kLineToOperator << "\n"
- << ptCenter.x << " " << ptCenter.y - 1.5f << " "
- << kLineToOperator << "\n"
- << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " "
- << kLineToOperator << " " << kFillOperator << "\n";
+ << points[0].x << " " << points[0].y << " " << kMoveToOperator
+ << "\n"
+ << points[1].x << " " << points[1].y << " " << kLineToOperator
+ << "\n"
+ << points[2].x << " " << points[2].y << " " << kLineToOperator
+ << "\n"
+ << points[0].x << " " << points[0].y << " " << kLineToOperator
+ << " " << kFillOperator << "\n";
}
return ByteString(sAppStream);
@@ -1094,7 +1102,7 @@
if (sColor.GetLength() > 0) {
AutoClosedQCommand q(&sAppStream);
sAppStream << sColor << rect.left << " " << rect.bottom << " "
- << rect.right - rect.left << " " << rect.top - rect.bottom << " "
+ << rect.Width() << " " << rect.Height() << " "
<< kAppendRectOperator << " " << kFillOperator << "\n";
}
@@ -1776,14 +1784,13 @@
<< " 2 " << kSetLineCapStyleOperator << " 0 "
<< kSetLineJoinStyleOperator << "\n";
+ const float width = rcClient.right - rcClient.left;
for (int32_t i = 1; i < nMaxLen; ++i) {
- sLines << rcClient.left +
- ((rcClient.right - rcClient.left) / nMaxLen) * i
- << " " << rcClient.bottom << " " << kMoveToOperator << "\n"
- << rcClient.left +
- ((rcClient.right - rcClient.left) / nMaxLen) * i
- << " " << rcClient.top << " " << kLineToOperator << " "
- << kStrokeOperator << "\n";
+ const float left = rcClient.left + (width / nMaxLen) * i;
+ sLines << left << " " << rcClient.bottom << " " << kMoveToOperator
+ << "\n"
+ << left << " " << rcClient.top << " " << kLineToOperator
+ << " " << kStrokeOperator << "\n";
}
}
break;
@@ -1800,14 +1807,13 @@
<< dsBorder.nDash << " " << dsBorder.nGap << "] "
<< dsBorder.nPhase << " " << kSetDashOperator << "\n";
+ const float width = rcClient.right - rcClient.left;
for (int32_t i = 1; i < nMaxLen; ++i) {
- sLines << rcClient.left +
- ((rcClient.right - rcClient.left) / nMaxLen) * i
- << " " << rcClient.bottom << " " << kMoveToOperator << "\n"
- << rcClient.left +
- ((rcClient.right - rcClient.left) / nMaxLen) * i
- << " " << rcClient.top << " " << kLineToOperator << " "
- << kStrokeOperator << "\n";
+ const float left = rcClient.left + (width / nMaxLen) * i;
+ sLines << left << " " << rcClient.bottom << " " << kMoveToOperator
+ << "\n"
+ << left << " " << rcClient.top << " " << kLineToOperator
+ << " " << kStrokeOperator << "\n";
}
}
break;