Add a WriteAppendRect() helper in cpdfsdk_appstream.cpp.
There are several instances of code that generate "append rect"
operators in cpdfsdk_appstream.cpp. Add a WriteAppendRect() function to
consolidate these similar instances.
Note that this is not a pure refactor, as some instances that
previously generated stream content of the form "4 5 6 7 re f" now
generate "4 5 6 7 re\nf" instead.
Change-Id: I80e6a4db81f4e0eb01b35285aede4b024d0148c7
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/96253
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 2857632..1336ec1 100644
--- a/fpdfsdk/cpdfsdk_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -135,6 +135,11 @@
<< "\n";
}
+void WriteAppendRect(fxcrt::ostringstream& stream, const CFX_FloatRect& rect) {
+ stream << rect.left << " " << rect.bottom << " " << rect.Width() << " "
+ << rect.Height() << " " << kAppendRectOperator << "\n";
+}
+
ByteString GetStrokeColorAppStream(const CFX_Color& color) {
fxcrt::ostringstream sColorStream;
switch (color.nColorType) {
@@ -726,9 +731,8 @@
fxcrt::ostringstream str;
{
AutoClosedQCommand q(&str);
- str << rcPlate.left << " " << rcPlate.bottom << " " << rcPlate.Width()
- << " " << rcPlate.Height() << " " << kAppendRectOperator << " "
- << kSetNonZeroWindingClipOperator << " "
+ WriteAppendRect(str, rcPlate);
+ str << kSetNonZeroWindingClipOperator << " "
<< kEndPathNoFillOrStrokeOperator << "\n";
str << scale.x << " 0 0 " << scale.y << " " << rcPlate.left + offset.x
@@ -928,9 +932,8 @@
fxcrt::ostringstream sAppStream;
{
AutoClosedQCommand q(&sAppStream);
- sAppStream << rcBBox.left << " " << rcBBox.bottom << " " << rcBBox.Width()
- << " " << rcBBox.Height() << " " << kAppendRectOperator << " "
- << kSetNonZeroWindingClipOperator << " "
+ WriteAppendRect(sAppStream, rcBBox);
+ sAppStream << kSetNonZeroWindingClipOperator << " "
<< kEndPathNoFillOrStrokeOperator << "\n";
sAppStream << sTemp.str().c_str();
}
@@ -962,12 +965,9 @@
sColor = GetFillColorAppStream(color);
if (sColor.GetLength() > 0) {
sAppStream << sColor;
- sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
- << fTop - fBottom << " " << kAppendRectOperator << "\n";
- sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " "
- << fRight - fLeft - fWidth * 2 << " "
- << fTop - fBottom - fWidth * 2 << " "
- << kAppendRectOperator << "\n";
+ WriteAppendRect(sAppStream, {fLeft, fBottom, fRight, fTop});
+ WriteAppendRect(sAppStream, {fLeft + fWidth, fBottom + fWidth,
+ fRight - fWidth, fTop - fWidth});
sAppStream << kFillEvenOddOperator << "\n";
}
break;
@@ -1020,13 +1020,10 @@
sColor = GetFillColorAppStream(color);
if (sColor.GetLength() > 0) {
sAppStream << sColor;
- sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
- << fTop - fBottom << " " << kAppendRectOperator << "\n";
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
- << fRight - fLeft - fHalfWidth * 2 << " "
- << fTop - fBottom - fHalfWidth * 2 << " "
- << kAppendRectOperator << " " << kFillEvenOddOperator
- << "\n";
+ WriteAppendRect(sAppStream, {fLeft, fBottom, fRight, fTop});
+ WriteAppendRect(sAppStream, {fLeft + fHalfWidth, fBottom + fHalfWidth,
+ fRight - fHalfWidth, fTop - fHalfWidth});
+ sAppStream << kFillEvenOddOperator << "\n";
}
break;
case BorderStyle::kUnderline:
@@ -1052,11 +1049,10 @@
{
AutoClosedQCommand q(&sAppStream);
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.Width()
- << " " << rcBBox.Height() << " " << kAppendRectOperator << " "
- << kFillOperator << "\n";
+ CFX_Color(CFX_Color::Type::kRGB, 220.0f / 255.0f, 220.0f / 255.0f,
+ 220.0f / 255.0f));
+ WriteAppendRect(sAppStream, rcBBox);
+ sAppStream << kFillOperator << "\n";
}
{
@@ -1090,9 +1086,9 @@
ByteString sColor = GetFillColorAppStream(color);
if (sColor.GetLength() > 0) {
AutoClosedQCommand q(&sAppStream);
- sAppStream << sColor << rect.left << " " << rect.bottom << " "
- << rect.Width() << " " << rect.Height() << " "
- << kAppendRectOperator << " " << kFillOperator << "\n";
+ sAppStream << sColor;
+ WriteAppendRect(sAppStream, rect);
+ sAppStream << kFillOperator << "\n";
}
return ByteString(sAppStream);
@@ -1570,9 +1566,8 @@
if (rcContent.Width() > rcEdit.Width() ||
rcContent.Height() > rcEdit.Height()) {
- sBody << rcEdit.left << " " << rcEdit.bottom << " " << rcEdit.Width()
- << " " << rcEdit.Height() << " " << kAppendRectOperator << "\n"
- << kSetNonZeroWindingClipOperator << "\n"
+ WriteAppendRect(sBody, rcEdit);
+ sBody << kSetNonZeroWindingClipOperator << "\n"
<< kEndPathNoFillOrStrokeOperator << "\n";
}
@@ -1634,10 +1629,9 @@
{
AutoClosedQCommand q(&sList);
sList << GetFillColorAppStream(CFX_Color(
- CFX_Color::Type::kRGB, 0, 51.0f / 255.0f, 113.0f / 255.0f))
- << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width()
- << " " << rcItem.Height() << " " << kAppendRectOperator << " "
- << kFillOperator << "\n";
+ CFX_Color::Type::kRGB, 0, 51.0f / 255.0f, 113.0f / 255.0f));
+ WriteAppendRect(sList, rcItem);
+ sList << kFillOperator << "\n";
}
AutoClosedCommand bt(&sList, kTextBeginOperator, kTextEndOperator);
@@ -1660,9 +1654,8 @@
kMarkedSequenceEndOperator);
AutoClosedQCommand q(&sBody);
- sBody << rcClient.left << " " << rcClient.bottom << " " << rcClient.Width()
- << " " << rcClient.Height() << " " << kAppendRectOperator << "\n"
- << kSetNonZeroWindingClipOperator << "\n"
+ WriteAppendRect(sBody, rcClient);
+ sBody << kSetNonZeroWindingClipOperator << "\n"
<< kEndPathNoFillOrStrokeOperator << "\n"
<< sList.str();
}
@@ -1748,10 +1741,8 @@
if (rcContent.Width() > rcClient.Width() ||
rcContent.Height() > rcClient.Height()) {
- sBody << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.Width() << " " << rcClient.Height() << " "
- << kAppendRectOperator << "\n"
- << kSetNonZeroWindingClipOperator << "\n"
+ WriteAppendRect(sBody, rcClient);
+ sBody << kSetNonZeroWindingClipOperator << "\n"
<< kEndPathNoFillOrStrokeOperator << "\n";
}
CFX_Color crText = widget_->GetTextPWLColor();