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;