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();