diff --git a/BUILD.gn b/BUILD.gn
index cda8528..dc06aa9 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -966,6 +966,8 @@
     "fpdfsdk/pdfwindow/PWL_Wnd.cpp",
     "fpdfsdk/pdfwindow/PWL_Wnd.h",
     "fpdfsdk/pdfwindow/cpwl_color.h",
+    "fpdfsdk/pdfwindow/cpwl_pathdata.cpp",
+    "fpdfsdk/pdfwindow/cpwl_pathdata.h",
   ]
   configs += [ ":pdfium_core_config" ]
   deps = [
diff --git a/fpdfsdk/pdfwindow/PWL_Icon.cpp b/fpdfsdk/pdfwindow/PWL_Icon.cpp
index 4abe884..b0d0c76 100644
--- a/fpdfsdk/pdfwindow/PWL_Icon.cpp
+++ b/fpdfsdk/pdfwindow/PWL_Icon.cpp
@@ -6,6 +6,8 @@
 
 #include "fpdfsdk/pdfwindow/PWL_Icon.h"
 
+#include <algorithm>
+
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "fpdfsdk/pdfwindow/PWL_Utils.h"
@@ -169,20 +171,20 @@
     switch (nScaleMethod) {
       default:
       case 0:
-        fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
-        fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
+        fHScale = fPlateWidth / std::max(fImageWidth, 1.0f);
+        fVScale = fPlateHeight / std::max(fImageHeight, 1.0f);
         break;
       case 1:
         if (fPlateWidth < fImageWidth)
-          fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
+          fHScale = fPlateWidth / std::max(fImageWidth, 1.0f);
         if (fPlateHeight < fImageHeight)
-          fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
+          fVScale = fPlateHeight / std::max(fImageHeight, 1.0f);
         break;
       case 2:
         if (fPlateWidth > fImageWidth)
-          fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
+          fHScale = fPlateWidth / std::max(fImageWidth, 1.0f);
         if (fPlateHeight > fImageHeight)
-          fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
+          fVScale = fPlateHeight / std::max(fImageHeight, 1.0f);
         break;
       case 3:
         break;
@@ -190,7 +192,7 @@
 
     FX_FLOAT fMinScale;
     if (IsProportionalScale()) {
-      fMinScale = PWL_MIN(fHScale, fVScale);
+      fMinScale = std::min(fHScale, fVScale);
       fHScale = fMinScale;
       fVScale = fMinScale;
     }
diff --git a/fpdfsdk/pdfwindow/PWL_Utils.cpp b/fpdfsdk/pdfwindow/PWL_Utils.cpp
index d4e31bc..8b2813d 100644
--- a/fpdfsdk/pdfwindow/PWL_Utils.cpp
+++ b/fpdfsdk/pdfwindow/PWL_Utils.cpp
@@ -74,10 +74,10 @@
                                   const CFX_FloatRect& rect2) {
   CFX_FloatRect rcRet;
 
-  rcRet.left = PWL_MIN(rect1.left, rect2.left);
-  rcRet.bottom = PWL_MIN(rect1.bottom, rect2.bottom);
-  rcRet.right = PWL_MAX(rect1.right, rect2.right);
-  rcRet.top = PWL_MAX(rect1.top, rect2.top);
+  rcRet.left = std::min(rect1.left, rect2.left);
+  rcRet.bottom = std::min(rect1.bottom, rect2.bottom);
+  rcRet.right = std::max(rect1.right, rect2.right);
+  rcRet.top = std::max(rect1.top, rect2.top);
 
   return rcRet;
 }
@@ -141,22 +141,22 @@
   const FX_FLOAT fWidth = crBBox.right - crBBox.left;
   const FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
-  CPWL_Point pts[8][3] = {{CPWL_Point(0.28f, 0.52f), CPWL_Point(0.27f, 0.48f),
-                           CPWL_Point(0.29f, 0.40f)},
-                          {CPWL_Point(0.30f, 0.33f), CPWL_Point(0.31f, 0.29f),
-                           CPWL_Point(0.31f, 0.28f)},
-                          {CPWL_Point(0.39f, 0.28f), CPWL_Point(0.49f, 0.29f),
-                           CPWL_Point(0.77f, 0.67f)},
-                          {CPWL_Point(0.76f, 0.68f), CPWL_Point(0.78f, 0.69f),
-                           CPWL_Point(0.76f, 0.75f)},
-                          {CPWL_Point(0.76f, 0.75f), CPWL_Point(0.73f, 0.80f),
-                           CPWL_Point(0.68f, 0.75f)},
-                          {CPWL_Point(0.68f, 0.74f), CPWL_Point(0.68f, 0.74f),
-                           CPWL_Point(0.44f, 0.47f)},
-                          {CPWL_Point(0.43f, 0.47f), CPWL_Point(0.40f, 0.47f),
-                           CPWL_Point(0.41f, 0.58f)},
-                          {CPWL_Point(0.40f, 0.60f), CPWL_Point(0.28f, 0.66f),
-                           CPWL_Point(0.30f, 0.56f)}};
+  CFX_PointF pts[8][3] = {{CFX_PointF(0.28f, 0.52f), CFX_PointF(0.27f, 0.48f),
+                           CFX_PointF(0.29f, 0.40f)},
+                          {CFX_PointF(0.30f, 0.33f), CFX_PointF(0.31f, 0.29f),
+                           CFX_PointF(0.31f, 0.28f)},
+                          {CFX_PointF(0.39f, 0.28f), CFX_PointF(0.49f, 0.29f),
+                           CFX_PointF(0.77f, 0.67f)},
+                          {CFX_PointF(0.76f, 0.68f), CFX_PointF(0.78f, 0.69f),
+                           CFX_PointF(0.76f, 0.75f)},
+                          {CFX_PointF(0.76f, 0.75f), CFX_PointF(0.73f, 0.80f),
+                           CFX_PointF(0.68f, 0.75f)},
+                          {CFX_PointF(0.68f, 0.74f), CFX_PointF(0.68f, 0.74f),
+                           CFX_PointF(0.44f, 0.47f)},
+                          {CFX_PointF(0.43f, 0.47f), CFX_PointF(0.40f, 0.47f),
+                           CFX_PointF(0.41f, 0.58f)},
+                          {CFX_PointF(0.40f, 0.60f), CFX_PointF(0.28f, 0.66f),
+                           CFX_PointF(0.30f, 0.56f)}};
 
   for (size_t i = 0; i < FX_ArraySize(pts); ++i) {
     for (size_t j = 0; j < FX_ArraySize(pts[0]); ++j) {
@@ -928,17 +928,17 @@
   switch (sColor.nColorType) {
     case COLORTYPE_TRANSPARENT:
       sRet.nColorType = COLORTYPE_RGB;
-      sRet.fColor1 = PWL_MAX(1 - fColorSub, 0.0f);
-      sRet.fColor2 = PWL_MAX(1 - fColorSub, 0.0f);
-      sRet.fColor3 = PWL_MAX(1 - fColorSub, 0.0f);
+      sRet.fColor1 = std::max(1 - fColorSub, 0.0f);
+      sRet.fColor2 = std::max(1 - fColorSub, 0.0f);
+      sRet.fColor3 = std::max(1 - fColorSub, 0.0f);
       break;
     case COLORTYPE_RGB:
     case COLORTYPE_GRAY:
     case COLORTYPE_CMYK:
-      sRet.fColor1 = PWL_MAX(sColor.fColor1 - fColorSub, 0.0f);
-      sRet.fColor2 = PWL_MAX(sColor.fColor2 - fColorSub, 0.0f);
-      sRet.fColor3 = PWL_MAX(sColor.fColor3 - fColorSub, 0.0f);
-      sRet.fColor4 = PWL_MAX(sColor.fColor4 - fColorSub, 0.0f);
+      sRet.fColor1 = std::max(sColor.fColor1 - fColorSub, 0.0f);
+      sRet.fColor2 = std::max(sColor.fColor2 - fColorSub, 0.0f);
+      sRet.fColor3 = std::max(sColor.fColor3 - fColorSub, 0.0f);
+      sRet.fColor4 = std::max(sColor.fColor4 - fColorSub, 0.0f);
       break;
   }
 
@@ -1667,83 +1667,69 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
-                               crBBox.bottom + fHeight * 2 / 5.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 15.0f +
-                         FX_BEZIER * (fWidth / 7.0f - fWidth / 15.0f),
-                     crBBox.bottom + fHeight * 2 / 5.0f +
-                         FX_BEZIER * (fHeight * 2 / 7.0f - fHeight * 2 / 5.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 4.5f +
-                         FX_BEZIER * (fWidth / 5.0f - fWidth / 4.5f),
-                     crBBox.bottom + fHeight / 16.0f +
-                         FX_BEZIER * (fHeight / 5.0f - fHeight / 16.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f,
-                               crBBox.bottom + fHeight / 16.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f +
-                                   FX_BEZIER * (fWidth / 4.4f - fWidth / 4.5f),
-                               crBBox.bottom + fHeight / 16.0f -
-                                   FX_BEZIER * fHeight / 16.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f +
-                                   FX_BEZIER * (fWidth / 4.0f - fWidth / 3.0f),
-                               crBBox.bottom),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f, crBBox.bottom),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f +
-                                   FX_BEZIER * fWidth * (1 / 7.0f + 2 / 15.0f),
-                               crBBox.bottom + FX_BEZIER * fHeight * 4 / 5.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f +
-                                   FX_BEZIER * fWidth * (1 / 7.0f - 7 / 15.0f),
-                               crBBox.bottom + fHeight * 15 / 16.0f +
-                                   FX_BEZIER * (fHeight * 4 / 5.0f -
-                                                fHeight * 15 / 16.0f)),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f,
-                               crBBox.bottom + fHeight * 15 / 16.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(
-              crBBox.left + fWidth * 14 / 15.0f +
-                  FX_BEZIER * (fWidth * 7 / 15.0f - fWidth * 14 / 15.0f),
-              crBBox.bottom + fHeight * 15 / 16.0f +
-                  FX_BEZIER * (fHeight * 8 / 7.0f - fHeight * 15 / 16.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 3.6f +
-                         FX_BEZIER * (fWidth / 3.4f - fWidth / 3.6f),
-                     crBBox.bottom + fHeight / 3.5f +
-                         FX_BEZIER * (fHeight / 3.5f - fHeight / 3.5f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f,
-                               crBBox.bottom + fHeight / 3.5f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 3.6f,
-                     crBBox.bottom + fHeight / 3.5f +
-                         FX_BEZIER * (fHeight / 4.0f - fHeight / 3.5f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f +
-                                   FX_BEZIER * (fWidth / 3.5f - fWidth / 15.0f),
-                               crBBox.bottom + fHeight * 2 / 5.0f +
-                                   FX_BEZIER * (fHeight * 3.5f / 5.0f -
-                                                fHeight * 2 / 5.0f)),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
-                               crBBox.bottom + fHeight * 2 / 5.0f),
-                    PWLPT_BEZIERTO)};
+      {{crBBox.left + fWidth / 15.0f, crBBox.bottom + fHeight * 2 / 5.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 15.0f +
+            FX_BEZIER * (fWidth / 7.0f - fWidth / 15.0f),
+        crBBox.bottom + fHeight * 2 / 5.0f +
+            FX_BEZIER * (fHeight * 2 / 7.0f - fHeight * 2 / 5.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 4.5f +
+            FX_BEZIER * (fWidth / 5.0f - fWidth / 4.5f),
+        crBBox.bottom + fHeight / 16.0f +
+            FX_BEZIER * (fHeight / 5.0f - fHeight / 16.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 4.5f, crBBox.bottom + fHeight / 16.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 4.5f +
+            FX_BEZIER * (fWidth / 4.4f - fWidth / 4.5f),
+        crBBox.bottom + fHeight / 16.0f - FX_BEZIER * fHeight / 16.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 3.0f +
+            FX_BEZIER * (fWidth / 4.0f - fWidth / 3.0f),
+        crBBox.bottom},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 3.0f, crBBox.bottom}, PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 3.0f +
+            FX_BEZIER * fWidth * (1 / 7.0f + 2 / 15.0f),
+        crBBox.bottom + FX_BEZIER * fHeight * 4 / 5.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 14 / 15.0f +
+            FX_BEZIER * fWidth * (1 / 7.0f - 7 / 15.0f),
+        crBBox.bottom + fHeight * 15 / 16.0f +
+            FX_BEZIER * (fHeight * 4 / 5.0f - fHeight * 15 / 16.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 14 / 15.0f,
+        crBBox.bottom + fHeight * 15 / 16.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 14 / 15.0f +
+            FX_BEZIER * (fWidth * 7 / 15.0f - fWidth * 14 / 15.0f),
+        crBBox.bottom + fHeight * 15 / 16.0f +
+            FX_BEZIER * (fHeight * 8 / 7.0f - fHeight * 15 / 16.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 3.6f +
+            FX_BEZIER * (fWidth / 3.4f - fWidth / 3.6f),
+        crBBox.bottom + fHeight / 3.5f +
+            FX_BEZIER * (fHeight / 3.5f - fHeight / 3.5f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 3.6f, crBBox.bottom + fHeight / 3.5f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 3.6f,
+        crBBox.bottom + fHeight / 3.5f +
+            FX_BEZIER * (fHeight / 4.0f - fHeight / 3.5f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 15.0f +
+            FX_BEZIER * (fWidth / 3.5f - fWidth / 15.0f),
+        crBBox.bottom + fHeight * 2 / 5.0f +
+            FX_BEZIER * (fHeight * 3.5f / 5.0f - fHeight * 2 / 5.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 15.0f, crBBox.bottom + fHeight * 2 / 5.0f},
+       PWLPT_BEZIERTO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 16);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 16);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Circle(CFX_ByteString& sPathData,
@@ -1754,119 +1740,95 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 15.0f,
-                     crBBox.bottom + fHeight / 2.0f +
-                         FX_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
-                                   FX_BEZIER * (fWidth / 2.0f - fWidth / 15.0f),
-                               crBBox.top - fHeight / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f +
-                         FX_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f),
-                     crBBox.top - fHeight / 15.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 15.0f,
-                     crBBox.bottom + fHeight / 2.0f +
-                         FX_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 15.0f,
-                     crBBox.bottom + fHeight / 2.0f -
-                         FX_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f +
-                         FX_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f),
-                     crBBox.bottom + fHeight / 15.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
-                                   FX_BEZIER * (fWidth / 2.0f - fWidth / 15.0f),
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 15.0f,
-                     crBBox.bottom + fHeight / 2.0f -
-                         FX_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
-                     crBBox.bottom + fHeight / 2.0f +
-                         FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f -
-                         FX_BEZIER * (fWidth / 2.0f - fWidth * 3 / 15.0f),
-                     crBBox.top - fHeight * 3 / 15.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
-                               crBBox.top - fHeight * 3 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f +
-                         FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
-                     crBBox.top - fHeight * 3 / 15.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
-                     crBBox.bottom + fHeight / 2.0f +
-                         FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
-                     crBBox.bottom + fHeight / 2.0f -
-                         FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f +
-                         FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
-                     crBBox.bottom + fHeight * 3 / 15.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
-                               crBBox.bottom + fHeight * 3 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f -
-                         FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
-                     crBBox.bottom + fHeight * 3 / 15.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
-                     crBBox.bottom + fHeight / 2.0f -
-                         FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_BEZIERTO)};
+      {{crBBox.left + fWidth / 15.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 15.0f,
+        crBBox.bottom + fHeight / 2.0f +
+            FX_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f -
+            FX_BEZIER * (fWidth / 2.0f - fWidth / 15.0f),
+        crBBox.top - fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f +
+            FX_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f),
+        crBBox.top - fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15.0f,
+        crBBox.bottom + fHeight / 2.0f +
+            FX_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15.0f,
+        crBBox.bottom + fHeight / 2.0f -
+            FX_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f +
+            FX_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f),
+        crBBox.bottom + fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f -
+            FX_BEZIER * (fWidth / 2.0f - fWidth / 15.0f),
+        crBBox.bottom + fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 15.0f,
+        crBBox.bottom + fHeight / 2.0f -
+            FX_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 15.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 3 / 15.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 3 / 15.0f,
+        crBBox.bottom + fHeight / 2.0f +
+            FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f -
+            FX_BEZIER * (fWidth / 2.0f - fWidth * 3 / 15.0f),
+        crBBox.top - fHeight * 3 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight * 3 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f +
+            FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
+        crBBox.top - fHeight * 3 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 3 / 15.0f,
+        crBBox.bottom + fHeight / 2.0f +
+            FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 3 / 15.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 3 / 15.0f,
+        crBBox.bottom + fHeight / 2.0f -
+            FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f +
+            FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
+        crBBox.bottom + fHeight * 3 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.bottom + fHeight * 3 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f -
+            FX_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
+        crBBox.bottom + fHeight * 3 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 3 / 15.0f,
+        crBBox.bottom + fHeight / 2.0f -
+            FX_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 3 / 15.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_BEZIERTO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 26);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 26);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Comment(CFX_ByteString& sPathData,
@@ -1877,115 +1839,85 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 15.0f,
-                     crBBox.top - fHeight / 6.0f +
-                         FX_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f -
-                                   FX_BEZIER * fWidth / 15.0f,
-                               crBBox.top - fHeight / 10.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
-                               crBBox.top - fHeight / 10.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
-                               crBBox.top - fHeight / 10.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f +
-                                   FX_BEZIER * fWidth / 15.0f,
-                               crBBox.top - fHeight / 10.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 15.0f,
-                     crBBox.top - fHeight / 6 +
-                         FX_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
-                               crBBox.top - fHeight / 6.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
-                               crBBox.bottom + fHeight / 3.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f +
-                                   FX_BEZIER * fHeight / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f +
-                                   FX_BEZIER * fWidth / 15.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f,
-                               crBBox.bottom + fHeight * 2 / 15 +
-                                   FX_BEZIER * fHeight * 2 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f -
-                                   FX_BEZIER * fWidth * 2 / 15.0f,
-                               crBBox.bottom + fHeight * 2 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 6 / 30.0f,
-                               crBBox.bottom + fHeight * 2 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f +
-                                   FX_BEZIER * fWidth / 30.0f,
-                               crBBox.bottom + fHeight * 2 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f,
-                               crBBox.bottom + fHeight * 2 / 15.0f +
-                                   FX_BEZIER * fHeight * 2 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f -
-                                   FX_BEZIER * fWidth / 15.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
-                               crBBox.bottom + fHeight / 3.0f -
-                                   FX_BEZIER * fHeight / 15.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
-                               crBBox.bottom + fHeight / 3.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
-                               crBBox.top - fHeight * 8 / 30.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
-                               crBBox.top - fHeight * 8 / 30.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15,
-                               crBBox.top - fHeight * 25 / 60.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
-                               crBBox.top - fHeight * 25 / 60.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 4 / 15.0f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_LINETO)};
+      {{crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 15.0f,
+        crBBox.top - fHeight / 6.0f +
+            FX_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 2 / 15.0f - FX_BEZIER * fWidth / 15.0f,
+        crBBox.top - fHeight / 10.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 2 / 15.0f, crBBox.top - fHeight / 10.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 2 / 15.0f, crBBox.top - fHeight / 10.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 2 / 15.0f + FX_BEZIER * fWidth / 15.0f,
+        crBBox.top - fHeight / 10.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15.0f,
+        crBBox.top - fHeight / 6 +
+            FX_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15.0f, crBBox.top - fHeight / 6.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15.0f, crBBox.bottom + fHeight / 3.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 15.0f,
+        crBBox.bottom + fHeight * 4 / 15.0f + FX_BEZIER * fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 2 / 15.0f + FX_BEZIER * fWidth / 15.0f,
+        crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 2 / 15.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 5 / 15.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 5 / 15.0f,
+        crBBox.bottom + fHeight * 2 / 15 + FX_BEZIER * fHeight * 2 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 5 / 15.0f - FX_BEZIER * fWidth * 2 / 15.0f,
+        crBBox.bottom + fHeight * 2 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 6 / 30.0f, crBBox.bottom + fHeight * 2 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 7 / 30.0f + FX_BEZIER * fWidth / 30.0f,
+        crBBox.bottom + fHeight * 2 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 7 / 30.0f,
+        crBBox.bottom + fHeight * 2 / 15.0f + FX_BEZIER * fHeight * 2 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 7 / 30.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 2 / 15.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 2 / 15.0f - FX_BEZIER * fWidth / 15.0f,
+        crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 15.0f,
+        crBBox.bottom + fHeight / 3.0f - FX_BEZIER * fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 15.0f, crBBox.bottom + fHeight / 3.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 2 / 15.0f, crBBox.top - fHeight * 8 / 30.0f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth * 2 / 15.0f, crBBox.top - fHeight * 8 / 30.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 2 / 15, crBBox.top - fHeight * 25 / 60.0f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth * 2 / 15.0f, crBBox.top - fHeight * 25 / 60.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 2 / 15.0f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth * 4 / 15.0f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 30);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 30);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Cross(CFX_ByteString& sPathData,
@@ -1994,55 +1926,44 @@
                                    const PWL_PATH_TYPE type) {
   FX_FLOAT fWidth = crBBox.right - crBBox.left;
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-  CPWL_Point center_point(crBBox.left + fWidth / 2,
+  CFX_PointF center_point(crBBox.left + fWidth / 2,
                           crBBox.bottom + fHeight / 2);
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(center_point.x + fWidth * 0.3f,
-                     center_point.y + fHeight / 10.0f + fWidth * 0.3f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f,
-                               center_point.y + fHeight * 0.3f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f, center_point.y),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f,
-                               center_point.y - fHeight * 0.3f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(center_point.x + fWidth * 0.3f,
-                     center_point.y - fHeight / 10.0f - fHeight * 0.3f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(center_point.x, center_point.y - fHeight / 10.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(center_point.x - fWidth * 0.3f,
-                               center_point.y - fHeight / 10 - fHeight * 0.3f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10.0f - fWidth * 0.3f,
-                               center_point.y - fHeight * 0.3f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10, center_point.y),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10 - fWidth * 0.3f,
-                               center_point.y + fHeight * 0.3f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(center_point.x - fWidth * 0.3f,
-                     center_point.y + fHeight / 10.0f + fHeight * 0.3f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f),
-          PWLPT_LINETO)};
+      {{center_point.x, center_point.y + fHeight / 10.0f}, PWLPT_MOVETO},
+      {{center_point.x + fWidth * 0.3f,
+        center_point.y + fHeight / 10.0f + fWidth * 0.3f},
+       PWLPT_LINETO},
+      {{center_point.x + fWidth / 10.0f + fWidth * 0.3f,
+        center_point.y + fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{center_point.x + fWidth / 10.0f, center_point.y}, PWLPT_LINETO},
+      {{center_point.x + fWidth / 10.0f + fWidth * 0.3f,
+        center_point.y - fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{center_point.x + fWidth * 0.3f,
+        center_point.y - fHeight / 10.0f - fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{center_point.x, center_point.y - fHeight / 10.0f}, PWLPT_LINETO},
+      {{center_point.x - fWidth * 0.3f,
+        center_point.y - fHeight / 10 - fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{center_point.x - fWidth / 10.0f - fWidth * 0.3f,
+        center_point.y - fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{center_point.x - fWidth / 10, center_point.y}, PWLPT_LINETO},
+      {{center_point.x - fWidth / 10 - fWidth * 0.3f,
+        center_point.y + fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{center_point.x - fWidth * 0.3f,
+        center_point.y + fHeight / 10.0f + fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{center_point.x, center_point.y + fHeight / 10.0f}, PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 13);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 13);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Help(CFX_ByteString& sPathData,
@@ -2053,226 +1974,168 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 60.0f,
-                     crBBox.bottom + fHeight / 2.0f +
-                         FX_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
-                                   FX_BEZIER * (fWidth / 2.0f - fWidth / 60.0f),
-                               crBBox.bottom + fHeight / 60.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
-                               crBBox.bottom + fHeight / 60.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f +
-                                   FX_BEZIER * fWidth * 29 / 60.0f,
-                               crBBox.bottom + fHeight / 60.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 60.0f,
-                     crBBox.bottom + fHeight / 2.0f +
-                         FX_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f,
-                               crBBox.bottom + fHeight / 2.0f +
-                                   FX_BEZIER * fHeight * 29 / 60.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f +
-                                   FX_BEZIER * fWidth * 29 / 60.0f,
-                               crBBox.top - fHeight / 60.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 60.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
-                                   FX_BEZIER * fWidth * 29 / 60.0f,
-                               crBBox.top - fHeight / 60.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
-                               crBBox.bottom + fHeight / 2.0f +
-                                   FX_BEZIER * fHeight * 29 / 60.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
-                               crBBox.bottom + fHeight / 2.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
-                               crBBox.top - fHeight * 0.36f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
-                               crBBox.top - fHeight * 0.36f +
-                                   FX_BEZIER * fHeight * 0.23f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.5f - FX_BEZIER * fWidth * 0.23f,
-                     crBBox.bottom + fHeight * 0.87f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
-                               crBBox.bottom + fHeight * 0.87f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.5f + FX_BEZIER * fWidth * 0.23f,
-                     crBBox.bottom + fHeight * 0.87f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f,
-                               crBBox.top - fHeight * 0.36f +
-                                   FX_BEZIER * fHeight * 0.23f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f,
-                               crBBox.top - fHeight * 0.36f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.27f - fWidth * 0.08f * 0.2f,
-                     crBBox.top - fHeight * 0.36f - fHeight * 0.15f * 0.7f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.35f + fWidth * 0.08f * 0.2f,
-                     crBBox.top - fHeight * 0.51f + fHeight * 0.15f * 0.2f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.35f,
-                               crBBox.top - fHeight * 0.51f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.35f - fWidth * 0.1f * 0.5f,
-                     crBBox.top - fHeight * 0.51f - fHeight * 0.15f * 0.3f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.5f,
-                     crBBox.top - fHeight * 0.68f + fHeight * 0.15f * 0.5f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
-                               crBBox.top - fHeight * 0.68f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
-                               crBBox.bottom + fHeight * 0.30f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.45f,
-                     crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.55f,
-                     crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f,
-                               crBBox.bottom + fHeight * 0.30f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f,
-                               crBBox.top - fHeight * 0.66f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.55f - fWidth * 0.1f * 0.05f,
-                     crBBox.top - fHeight * 0.66f + fHeight * 0.18f * 0.5f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.05f,
-                     crBBox.top - fHeight * 0.48f - fHeight * 0.18f * 0.3f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
-                               crBBox.top - fHeight * 0.48f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.45f + fWidth * 0.08f * 0.2f,
-                     crBBox.top - fHeight * 0.48f + fHeight * 0.18f * 0.2f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.37f - fWidth * 0.08f * 0.2f,
-                     crBBox.top - fHeight * 0.36f - fHeight * 0.18f * 0.7f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f,
-                               crBBox.top - fHeight * 0.36f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f,
-                               crBBox.top - fHeight * 0.36f +
-                                   FX_BEZIER * fHeight * 0.13f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.5f + FX_BEZIER * fWidth * 0.13f,
-                     crBBox.bottom + fHeight * 0.77f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
-                               crBBox.bottom + fHeight * 0.77f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.5f - FX_BEZIER * fWidth * 0.13f,
-                     crBBox.bottom + fHeight * 0.77f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f,
-                               crBBox.top - fHeight * 0.36f +
-                                   FX_BEZIER * fHeight * 0.13f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f,
-                               crBBox.top - fHeight * 0.36f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.37f,
-                     crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.27f,
-                     crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
-                               crBBox.top - fHeight * 0.36f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
-                               crBBox.bottom + fHeight * 0.13f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
-                               crBBox.bottom + fHeight * 0.13f +
-                                   FX_BEZIER * fHeight * 0.055f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f -
-                                   FX_BEZIER * fWidth * 0.095f,
-                               crBBox.bottom + fHeight * 0.185f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f,
-                               crBBox.bottom + fHeight * 0.185f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f +
-                                   FX_BEZIER * fWidth * 0.065f,
-                               crBBox.bottom + fHeight * 0.185f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
-                               crBBox.bottom + fHeight * 0.13f +
-                                   FX_BEZIER * fHeight * 0.055f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
-                               crBBox.bottom + fHeight * 0.13f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
-                               crBBox.bottom + fHeight * 0.13f -
-                                   FX_BEZIER * fHeight * 0.055f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f +
-                                   FX_BEZIER * fWidth * 0.065f,
-                               crBBox.bottom + fHeight * 0.075f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f,
-                               crBBox.bottom + fHeight * 0.075f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f -
-                                   FX_BEZIER * fWidth * 0.065f,
-                               crBBox.bottom + fHeight * 0.075f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
-                               crBBox.bottom + fHeight * 0.13f -
-                                   FX_BEZIER * fHeight * 0.055f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
-                               crBBox.bottom + fHeight * 0.13f),
-                    PWLPT_BEZIERTO)};
+      {{crBBox.left + fWidth / 60.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 60.0f,
+        crBBox.bottom + fHeight / 2.0f +
+            FX_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f -
+            FX_BEZIER * (fWidth / 2.0f - fWidth / 60.0f),
+        crBBox.bottom + fHeight / 60.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.bottom + fHeight / 60.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f + FX_BEZIER * fWidth * 29 / 60.0f,
+        crBBox.bottom + fHeight / 60.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 60.0f,
+        crBBox.bottom + fHeight / 2.0f +
+            FX_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 60.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 60.0f,
+        crBBox.bottom + fHeight / 2.0f + FX_BEZIER * fHeight * 29 / 60.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f + FX_BEZIER * fWidth * 29 / 60.0f,
+        crBBox.top - fHeight / 60.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 60.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f - FX_BEZIER * fWidth * 29 / 60.0f,
+        crBBox.top - fHeight / 60.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 60.0f,
+        crBBox.bottom + fHeight / 2.0f + FX_BEZIER * fHeight * 29 / 60.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 60.0f, crBBox.bottom + fHeight / 2.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.27f, crBBox.top - fHeight * 0.36f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.27f,
+        crBBox.top - fHeight * 0.36f + FX_BEZIER * fHeight * 0.23f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.5f - FX_BEZIER * fWidth * 0.23f,
+        crBBox.bottom + fHeight * 0.87f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.5f, crBBox.bottom + fHeight * 0.87f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.5f + FX_BEZIER * fWidth * 0.23f,
+        crBBox.bottom + fHeight * 0.87f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.27f,
+        crBBox.top - fHeight * 0.36f + FX_BEZIER * fHeight * 0.23f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.27f, crBBox.top - fHeight * 0.36f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.27f - fWidth * 0.08f * 0.2f,
+        crBBox.top - fHeight * 0.36f - fHeight * 0.15f * 0.7f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.35f + fWidth * 0.08f * 0.2f,
+        crBBox.top - fHeight * 0.51f + fHeight * 0.15f * 0.2f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.35f, crBBox.top - fHeight * 0.51f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.35f - fWidth * 0.1f * 0.5f,
+        crBBox.top - fHeight * 0.51f - fHeight * 0.15f * 0.3f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.5f,
+        crBBox.top - fHeight * 0.68f + fHeight * 0.15f * 0.5f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.45f, crBBox.top - fHeight * 0.68f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.45f, crBBox.bottom + fHeight * 0.30f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 0.45f,
+        crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.55f,
+        crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.55f, crBBox.bottom + fHeight * 0.30f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.55f, crBBox.top - fHeight * 0.66f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 0.55f - fWidth * 0.1f * 0.05f,
+        crBBox.top - fHeight * 0.66f + fHeight * 0.18f * 0.5f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.05f,
+        crBBox.top - fHeight * 0.48f - fHeight * 0.18f * 0.3f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.45f, crBBox.top - fHeight * 0.48f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.45f + fWidth * 0.08f * 0.2f,
+        crBBox.top - fHeight * 0.48f + fHeight * 0.18f * 0.2f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.37f - fWidth * 0.08f * 0.2f,
+        crBBox.top - fHeight * 0.36f - fHeight * 0.18f * 0.7f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.37f, crBBox.top - fHeight * 0.36f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.37f,
+        crBBox.top - fHeight * 0.36f + FX_BEZIER * fHeight * 0.13f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.5f + FX_BEZIER * fWidth * 0.13f,
+        crBBox.bottom + fHeight * 0.77f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.5f, crBBox.bottom + fHeight * 0.77f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.5f - FX_BEZIER * fWidth * 0.13f,
+        crBBox.bottom + fHeight * 0.77f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.37f,
+        crBBox.top - fHeight * 0.36f + FX_BEZIER * fHeight * 0.13f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.37f, crBBox.top - fHeight * 0.36f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.37f,
+        crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.27f,
+        crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.27f, crBBox.top - fHeight * 0.36f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.56f, crBBox.bottom + fHeight * 0.13f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth * 0.56f,
+        crBBox.bottom + fHeight * 0.13f + FX_BEZIER * fHeight * 0.055f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.505f - FX_BEZIER * fWidth * 0.095f,
+        crBBox.bottom + fHeight * 0.185f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.505f, crBBox.bottom + fHeight * 0.185f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.505f + FX_BEZIER * fWidth * 0.065f,
+        crBBox.bottom + fHeight * 0.185f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.44f,
+        crBBox.bottom + fHeight * 0.13f + FX_BEZIER * fHeight * 0.055f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.44f, crBBox.bottom + fHeight * 0.13f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.44f,
+        crBBox.bottom + fHeight * 0.13f - FX_BEZIER * fHeight * 0.055f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.505f + FX_BEZIER * fWidth * 0.065f,
+        crBBox.bottom + fHeight * 0.075f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.505f, crBBox.bottom + fHeight * 0.075f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.505f - FX_BEZIER * fWidth * 0.065f,
+        crBBox.bottom + fHeight * 0.075f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.56f,
+        crBBox.bottom + fHeight * 0.13f - FX_BEZIER * fHeight * 0.055f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth * 0.56f, crBBox.bottom + fHeight * 0.13f},
+       PWLPT_BEZIERTO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 59);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 59);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_InsertText(CFX_ByteString& sPathData,
@@ -2283,23 +2146,17 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2, crBBox.top - fHeight * 2 / 15),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 10, crBBox.bottom + fHeight / 10),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10),
-          PWLPT_LINETO)};
+      {{crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10}, PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 2, crBBox.top - fHeight * 2 / 15}, PWLPT_LINETO},
+      {{crBBox.right - fWidth / 10, crBBox.bottom + fHeight / 10},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 4);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 4);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Key(CFX_ByteString& sPathData,
@@ -2309,128 +2166,96 @@
   FX_FLOAT fWidth = crBBox.right - crBBox.left;
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
   FX_FLOAT k = -fHeight / fWidth;
-  CPWL_Point tail;
-  CPWL_Point CicleCenter;
+  CFX_PointF tail;
+  CFX_PointF CicleCenter;
   tail.x = crBBox.left + fWidth * 0.9f;
   tail.y = k * (tail.x - crBBox.right) + crBBox.bottom;
   CicleCenter.x = crBBox.left + fWidth * 0.15f;
   CicleCenter.y = k * (CicleCenter.x - crBBox.right) + crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(tail.x + fWidth / 30.0f, -fWidth / 30.0f / k + tail.y),
-          PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(tail.x + fWidth / 30.0f - fWidth * 0.18f,
-                               -k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f + fWidth * 0.07f,
-                     -fWidth * 0.07f / k - k * fWidth * 0.18f -
-                         fWidth / 30 / k + tail.y),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 +
-                         fWidth * 0.07f,
-                     -fWidth * 0.07f / k - k * fWidth / 20 -
-                         k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(
-              tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20,
-              -k * fWidth / 20 - k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(
-              tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15,
-              -k * fWidth / 15 - k * fWidth / 20 - k * fWidth * 0.18f -
-                  fWidth / 30 / k + tail.y),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
-                         fWidth / 15 + fWidth * 0.07f,
-                     -fWidth * 0.07f / k - k * fWidth / 15 - k * fWidth / 20 -
-                         k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
-                         fWidth / 15 - fWidth / 20 + fWidth * 0.07f,
-                     -fWidth * 0.07f / k + -k * fWidth / 20 + -k * fWidth / 15 -
-                         k * fWidth / 20 - k * fWidth * 0.18f -
-                         fWidth / 30 / k + tail.y),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
-                         fWidth / 15 - fWidth / 20,
-                     -k * fWidth / 20 + -k * fWidth / 15 - k * fWidth / 20 -
-                         k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f,
-                               -k * fWidth * 0.45f - fWidth / 30 / k + tail.y),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f + fWidth * 0.2f,
-                     -fWidth * 0.4f / k - k * fWidth * 0.45f - fWidth / 30 / k +
-                         tail.y),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.2f,
-                               -fWidth * 0.1f / k + CicleCenter.y),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60.0f,
-                               -k * fWidth / 60 + CicleCenter.y),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60,
-                               -k * fWidth / 60 + CicleCenter.y),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(CicleCenter.x - fWidth * 0.22f,
-                     fWidth * 0.35f / k + CicleCenter.y - fHeight * 0.05f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(tail.x - fWidth / 30 - fWidth * 0.45f - fWidth * 0.18f,
-                     fWidth * 0.05f / k - k * fWidth * 0.45f + fWidth / 30 / k +
-                         tail.y - fHeight * 0.05f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(tail.x - fWidth / 30.0f - fWidth * 0.45f,
-                     -k * fWidth * 0.45f + fWidth / 30.0f / k + tail.y),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(tail.x - fWidth / 30.0f, fWidth / 30.0f / k + tail.y),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(tail.x + fWidth / 30, -fWidth / 30 / k + tail.y),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f,
-                               k * fWidth * 0.08f + CicleCenter.y),
-                    PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(CicleCenter.x + fWidth * 0.08f + fWidth * 0.1f,
-                     -fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(CicleCenter.x + fWidth * 0.22f + fWidth * 0.1f,
-                     k * fWidth * 0.22f + CicleCenter.y - fWidth * 0.1f / k),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.22f,
-                               k * fWidth * 0.22f + CicleCenter.y),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(CicleCenter.x + fWidth * 0.22f - fWidth * 0.1f,
-                     fWidth * 0.1f / k + k * fWidth * 0.22f + CicleCenter.y),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(CicleCenter.x + fWidth * 0.08f - fWidth * 0.1f,
-                     fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f,
-                               k * fWidth * 0.08f + CicleCenter.y),
-                    PWLPT_BEZIERTO)};
+      {{tail.x + fWidth / 30.0f, -fWidth / 30.0f / k + tail.y}, PWLPT_MOVETO},
+      {{tail.x + fWidth / 30.0f - fWidth * 0.18f,
+        -k * fWidth * 0.18f - fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.18f + fWidth * 0.07f,
+        -fWidth * 0.07f / k - k * fWidth * 0.18f - fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 + fWidth * 0.07f,
+        -fWidth * 0.07f / k - k * fWidth / 20 - k * fWidth * 0.18f -
+            fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20,
+        -k * fWidth / 20 - k * fWidth * 0.18f - fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15,
+        -k * fWidth / 15 - k * fWidth / 20 - k * fWidth * 0.18f -
+            fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15 +
+            fWidth * 0.07f,
+        -fWidth * 0.07f / k - k * fWidth / 15 - k * fWidth / 20 -
+            k * fWidth * 0.18f - fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15 -
+            fWidth / 20 + fWidth * 0.07f,
+        -fWidth * 0.07f / k + -k * fWidth / 20 + -k * fWidth / 15 -
+            k * fWidth / 20 - k * fWidth * 0.18f - fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15 -
+            fWidth / 20,
+        -k * fWidth / 20 + -k * fWidth / 15 - k * fWidth / 20 -
+            k * fWidth * 0.18f - fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.45f,
+        -k * fWidth * 0.45f - fWidth / 30 / k + tail.y},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 30 - fWidth * 0.45f + fWidth * 0.2f,
+        -fWidth * 0.4f / k - k * fWidth * 0.45f - fWidth / 30 / k + tail.y},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x + fWidth * 0.2f, -fWidth * 0.1f / k + CicleCenter.y},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x, CicleCenter.y}, PWLPT_BEZIERTO},
+      {{CicleCenter.x - fWidth / 60.0f, -k * fWidth / 60 + CicleCenter.y},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x - fWidth / 60, -k * fWidth / 60 + CicleCenter.y},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x, CicleCenter.y}, PWLPT_BEZIERTO},
+      {{CicleCenter.x - fWidth * 0.22f,
+        fWidth * 0.35f / k + CicleCenter.y - fHeight * 0.05f},
+       PWLPT_BEZIERTO},
+      {{tail.x - fWidth / 30 - fWidth * 0.45f - fWidth * 0.18f,
+        fWidth * 0.05f / k - k * fWidth * 0.45f + fWidth / 30 / k + tail.y -
+            fHeight * 0.05f},
+       PWLPT_BEZIERTO},
+      {{tail.x - fWidth / 30.0f - fWidth * 0.45f,
+        -k * fWidth * 0.45f + fWidth / 30.0f / k + tail.y},
+       PWLPT_BEZIERTO},
+      {{tail.x - fWidth / 30.0f, fWidth / 30.0f / k + tail.y}, PWLPT_LINETO},
+      {{tail.x + fWidth / 30, -fWidth / 30 / k + tail.y}, PWLPT_LINETO},
+      {{CicleCenter.x + fWidth * 0.08f, k * fWidth * 0.08f + CicleCenter.y},
+       PWLPT_MOVETO},
+      {{CicleCenter.x + fWidth * 0.08f + fWidth * 0.1f,
+        -fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x + fWidth * 0.22f + fWidth * 0.1f,
+        k * fWidth * 0.22f + CicleCenter.y - fWidth * 0.1f / k},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x + fWidth * 0.22f, k * fWidth * 0.22f + CicleCenter.y},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x + fWidth * 0.22f - fWidth * 0.1f,
+        fWidth * 0.1f / k + k * fWidth * 0.22f + CicleCenter.y},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x + fWidth * 0.08f - fWidth * 0.1f,
+        fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y},
+       PWLPT_BEZIERTO},
+      {{CicleCenter.x + fWidth * 0.08f, k * fWidth * 0.08f + CicleCenter.y},
+       PWLPT_BEZIERTO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 28);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 28);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_NewParagraph(CFX_ByteString& sPathData,
@@ -2441,100 +2266,75 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 10.0f, crBBox.top - fHeight / 2.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
-                               crBBox.top - fHeight / 2.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
-                               crBBox.bottom + fHeight / 10.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f,
-                               crBBox.bottom + fHeight / 10.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.22f,
-                     crBBox.top - fHeight * 17 / 30.0f - fWidth * 0.14f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
-                               crBBox.bottom + fHeight / 10.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f,
-                               crBBox.bottom + fHeight / 10.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
-                               crBBox.bottom + fWidth * 0.24f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
-                               crBBox.bottom + fHeight / 10.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
-                               crBBox.bottom + fHeight / 10.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.7f,
-                     crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.97f,
-                     crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.97f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
-                               crBBox.top - fHeight * 17 / 30.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
-                               crBBox.bottom + fHeight / 10.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
-                               crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.85f,
-                               crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.85f,
-                     crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.7f,
-                     crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
-                               crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
-                    PWLPT_LINETO)};
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 10.0f, crBBox.top - fHeight / 2.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 10.0f, crBBox.top - fHeight / 2.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.12f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.12f, crBBox.bottom + fHeight / 10.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.22f, crBBox.bottom + fHeight / 10.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.22f,
+        crBBox.top - fHeight * 17 / 30.0f - fWidth * 0.14f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.38f, crBBox.bottom + fHeight / 10.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.48f, crBBox.bottom + fHeight / 10.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.48f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.38f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.38f, crBBox.bottom + fWidth * 0.24f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.22f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.12f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.6f, crBBox.bottom + fHeight / 10.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.7f, crBBox.bottom + fHeight / 10.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.7f,
+        crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.97f,
+        crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.97f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.7f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 17 / 30.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.6f, crBBox.bottom + fHeight / 10.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.7f,
+        crBBox.bottom + fHeight / 7 + fHeight * 0.18f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.85f,
+        crBBox.bottom + fHeight / 7 + fHeight * 0.18f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.85f,
+        crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.7f,
+        crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.7f,
+        crBBox.bottom + fHeight / 7 + fHeight * 0.18f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 28);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 28);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_TextNote(CFX_ByteString& sPathData,
@@ -2545,62 +2345,45 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 10.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
-                               crBBox.top - fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f,
-                               crBBox.top - fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
-                               crBBox.bottom + fHeight * 4 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
-                               crBBox.top - fHeight * 4 / 15.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f,
-                               crBBox.top - fHeight * 4 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
-                               crBBox.top - fHeight * 7 / 15.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f,
-                               crBBox.top - fHeight * 7 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
-                               crBBox.top - fHeight * 10 / 15.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
-                               crBBox.top - fHeight * 10 / 15.0f),
-                    PWLPT_LINETO)};
+      {{crBBox.right - fWidth * 3 / 10.0f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 7 / 10.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 10.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 10.0f, crBBox.top - fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 10.0f, crBBox.top - fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 10.0f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 3 / 10.0f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 10.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 3 / 10.0f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 3 / 10.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 10.0f, crBBox.bottom + fHeight * 4 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 5.0f, crBBox.top - fHeight * 4 / 15.0f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth / 5.0f, crBBox.top - fHeight * 4 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 5.0f, crBBox.top - fHeight * 7 / 15.0f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth / 5.0f, crBBox.top - fHeight * 7 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 5.0f, crBBox.top - fHeight * 10 / 15.0f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth * 3 / 10.0f, crBBox.top - fHeight * 10 / 15.0f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 17);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 17);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Paragraph(CFX_ByteString& sPathData,
@@ -2611,47 +2394,37 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight / 15.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f,
-                               crBBox.top - fHeight * 2 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f,
-                               crBBox.top - fHeight * 2 / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
-                               crBBox.top - fHeight / 15.0f - fHeight * 0.4f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.2f,
-                               crBBox.top - fHeight / 15.0f - fHeight * 0.4f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.2f, crBBox.top - fHeight / 15.0f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
-          PWLPT_BEZIERTO)};
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.7f, crBBox.top - fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.7f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.634f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.634f, crBBox.top - fHeight * 2 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.566f, crBBox.top - fHeight * 2 / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.566f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 2.0f,
+        crBBox.top - fHeight / 15.0f - fHeight * 0.4f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.2f,
+        crBBox.top - fHeight / 15.0f - fHeight * 0.4f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.2f, crBBox.top - fHeight / 15.0f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f},
+       PWLPT_BEZIERTO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 12);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 12);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_RightArrow(CFX_ByteString& sPathData,
@@ -2662,41 +2435,37 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
-                               crBBox.top - fHeight / 2.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f,
-                               crBBox.bottom + fHeight / 5.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
-                               crBBox.bottom + fHeight / 5.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f,
-                               crBBox.top - fHeight / 2.0f - fWidth / 25.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f,
-                               crBBox.top - fHeight / 2.0f - fWidth / 25.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f,
-                               crBBox.top - fHeight / 2.0f + fWidth / 25.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f,
-                               crBBox.top - fHeight / 2.0f + fWidth / 25.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 5.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f,
-                               crBBox.top - fHeight / 5.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
-                               crBBox.top - fHeight / 2.0f),
-                    PWLPT_LINETO)};
+      {{crBBox.right - fWidth / 15.0f, crBBox.top - fHeight / 2.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 2.0f + fWidth / 8.0f,
+        crBBox.bottom + fHeight / 5.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.bottom + fHeight / 5.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 15.0f - fWidth * 0.15f,
+        crBBox.top - fHeight / 2.0f - fWidth / 25.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.1f,
+        crBBox.top - fHeight / 2.0f - fWidth / 25.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.1f,
+        crBBox.top - fHeight / 2.0f + fWidth / 25.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 15.0f - fWidth * 0.15f,
+        crBBox.top - fHeight / 2.0f + fWidth / 25.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 5.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 2.0f + fWidth / 8.0f,
+        crBBox.top - fHeight / 5.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 15.0f, crBBox.top - fHeight / 2.0f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 10);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 10);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_RightPointer(CFX_ByteString& sPathData,
@@ -2707,26 +2476,21 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f,
-                               crBBox.top - fHeight / 2.0f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 30.0f,
-                               crBBox.bottom + fHeight / 6.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 4 / 15.0f,
-                               crBBox.top - fHeight / 2.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 30.0f, crBBox.top - fHeight / 6.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f,
-                               crBBox.top - fHeight / 2.0f),
-                    PWLPT_LINETO)};
+      {{crBBox.right - fWidth / 30.0f, crBBox.top - fHeight / 2.0f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 30.0f, crBBox.bottom + fHeight / 6.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 4 / 15.0f, crBBox.top - fHeight / 2.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 30.0f, crBBox.top - fHeight / 6.0f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 30.0f, crBBox.top - fHeight / 2.0f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 5);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 5);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Star(CFX_ByteString& sPathData,
@@ -2762,22 +2526,20 @@
   }
 
   CPWL_PathData PathArray[11];
-  PathArray[0] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_MOVETO);
-  PathArray[1] = CPWL_PathData(CPWL_Point(px2[0], py2[0]), PWLPT_LINETO);
+  PathArray[0] = {{px1[0], py1[0]}, PWLPT_MOVETO};
+  PathArray[1] = {{px2[0], py2[0]}, PWLPT_LINETO};
 
   for (int32_t k = 0; k < 4; k++) {
-    PathArray[(k + 1) * 2] =
-        CPWL_PathData(CPWL_Point(px1[k + 1], py1[k + 1]), PWLPT_LINETO);
-    PathArray[(k + 1) * 2 + 1] =
-        CPWL_PathData(CPWL_Point(px2[k + 1], py2[k + 1]), PWLPT_LINETO);
+    PathArray[(k + 1) * 2] = {{px1[k + 1], py1[k + 1]}, PWLPT_LINETO};
+    PathArray[(k + 1) * 2 + 1] = {{px2[k + 1], py2[k + 1]}, PWLPT_LINETO};
   }
 
-  PathArray[10] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_LINETO);
+  PathArray[10] = {{px1[0], py1[0]}, PWLPT_LINETO};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 11);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 11);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_UpArrow(CFX_ByteString& sPathData,
@@ -2788,35 +2550,27 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
-          PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
-                               crBBox.top - fWidth * 3 / 5.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
-                               crBBox.top - fWidth * 3 / 5.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
-                               crBBox.bottom + fHeight / 15.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
-                               crBBox.top - fWidth * 3 / 5.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 10, crBBox.top - fWidth * 3 / 5.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
-          PWLPT_LINETO)};
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth / 10.0f, crBBox.top - fWidth * 3 / 5.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.6f, crBBox.top - fWidth * 3 / 5.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.6f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.bottom + fHeight / 15.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fWidth * 3 / 5.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 10, crBBox.top - fWidth * 3 / 5.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 8);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 8);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_UpLeftArrow(CFX_ByteString& sPathData,
@@ -2825,53 +2579,40 @@
                                          const PWL_PATH_TYPE type) {
   FX_FLOAT fWidth = crBBox.right - crBBox.left;
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-  CPWL_Point leftup(crBBox.left, crBBox.top);
-  CPWL_Point rightdown(crBBox.right, crBBox.bottom);
+  CFX_PointF leftup(crBBox.left, crBBox.top);
+  CFX_PointF rightdown(crBBox.right, crBBox.bottom);
   FX_FLOAT k = -fHeight / fWidth;
-  CPWL_Point tail;
+  CFX_PointF tail;
   tail.x = crBBox.left + fWidth * 4 / 5.0f;
   tail.y = k * (tail.x - crBBox.right) + rightdown.y;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(
-              crBBox.left + fWidth / 20.0f,
-              k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y),
-          PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x +
-                                   fWidth / 10.0f + fWidth / 5.0f,
-                               -fWidth / 5.0f / k + tail.y -
-                                   fWidth / 10.0f / k + fHeight * 17 / 60.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(fHeight * 17 / 60.0f / k + tail.x + fWidth / 10.0f,
-                     tail.y - fWidth / 10.0f / k + fHeight * 17 / 60.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(tail.x + fWidth / 10.0f, tail.y - fWidth / 10.0f / k),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(tail.x - fWidth / 10.0f, tail.y + fWidth / 10.0f / k),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(fHeight * 17 / 60.0f / k + tail.x - fWidth / 10.0f,
-                     tail.y + fWidth / 10.0f / k + fHeight * 17 / 60.0f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x -
-                                   fWidth / 10.0f - fWidth / 5.0f,
-                               fWidth / 5.0f / k + tail.y + fWidth / 10.0f / k +
-                                   fHeight * 17 / 60.0f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(
-              crBBox.left + fWidth / 20.0f,
-              k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y),
-          PWLPT_LINETO)};
+      {{crBBox.left + fWidth / 20.0f,
+        k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y},
+       PWLPT_MOVETO},
+      {{fHeight * 17 / 60.0f / k + tail.x + fWidth / 10.0f + fWidth / 5.0f,
+        -fWidth / 5.0f / k + tail.y - fWidth / 10.0f / k +
+            fHeight * 17 / 60.0f},
+       PWLPT_LINETO},
+      {{fHeight * 17 / 60.0f / k + tail.x + fWidth / 10.0f,
+        tail.y - fWidth / 10.0f / k + fHeight * 17 / 60.0f},
+       PWLPT_LINETO},
+      {{tail.x + fWidth / 10.0f, tail.y - fWidth / 10.0f / k}, PWLPT_LINETO},
+      {{tail.x - fWidth / 10.0f, tail.y + fWidth / 10.0f / k}, PWLPT_LINETO},
+      {{fHeight * 17 / 60.0f / k + tail.x - fWidth / 10.0f,
+        tail.y + fWidth / 10.0f / k + fHeight * 17 / 60.0f},
+       PWLPT_LINETO},
+      {{fHeight * 17 / 60.0f / k + tail.x - fWidth / 10.0f - fWidth / 5.0f,
+        fWidth / 5.0f / k + tail.y + fWidth / 10.0f / k + fHeight * 17 / 60.0f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 20.0f,
+        k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 8);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 8);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Graph(CFX_ByteString& sPathData,
@@ -2882,74 +2623,54 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f),
-          PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.25f,
-                               crBBox.top - fHeight * 0.15f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
-                               crBBox.bottom + fHeight * 0.08f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.05f,
-                               crBBox.bottom + fHeight * 0.08f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f),
-          PWLPT_LINETO),
+      {{crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.15f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.275f, crBBox.bottom + fHeight * 0.08f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.05f, crBBox.bottom + fHeight * 0.08f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f},
+       PWLPT_LINETO},
 
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
-                               crBBox.top - fWidth * 0.45f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f,
-                               crBBox.top - fWidth * 0.45f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f,
-                               crBBox.bottom + fHeight * 0.08f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
-                               crBBox.bottom + fHeight * 0.08f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
-                               crBBox.top - fWidth * 0.45f),
-                    PWLPT_LINETO),
+      {{crBBox.left + fWidth * 0.275f, crBBox.top - fWidth * 0.45f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.475f, crBBox.top - fWidth * 0.45f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.475f, crBBox.bottom + fHeight * 0.08f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.275f, crBBox.bottom + fHeight * 0.08f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.275f, crBBox.top - fWidth * 0.45f},
+       PWLPT_LINETO},
 
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight * 0.05f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
-                               crBBox.bottom + fHeight * 0.08f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
-                               crBBox.bottom + fHeight * 0.08f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f),
-          PWLPT_LINETO),
+      {{crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.7f, crBBox.top - fHeight * 0.05f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.7f, crBBox.bottom + fHeight * 0.08f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.5f, crBBox.bottom + fHeight * 0.08f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f},
+       PWLPT_LINETO},
 
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
-                               crBBox.top - fWidth * 0.35f),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f,
-                               crBBox.top - fWidth * 0.35f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f,
-                               crBBox.bottom + fHeight * 0.08f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
-                               crBBox.bottom + fHeight * 0.08f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
-                               crBBox.top - fWidth * 0.35f),
-                    PWLPT_LINETO)};
+      {{crBBox.left + fWidth * 0.725f, crBBox.top - fWidth * 0.35f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.925f, crBBox.top - fWidth * 0.35f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.925f, crBBox.bottom + fHeight * 0.08f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.725f, crBBox.bottom + fHeight * 0.08f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.725f, crBBox.top - fWidth * 0.35f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 20);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 20);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Paperclip(CFX_ByteString& sPathData,
@@ -2960,139 +2681,113 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f),
-          PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
-                               crBBox.bottom + fHeight * 0.25f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
-                               crBBox.bottom + fHeight * 0.25f -
-                                   fWidth * 57 / 60.0f * 0.35f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30,
-                               crBBox.bottom + fHeight * 0.25f -
-                                   fWidth * 57 / 60.0f * 0.35f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30,
-                               crBBox.bottom + fHeight * 0.25f),
-                    PWLPT_BEZIERTO),
+      {{crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f}, PWLPT_MOVETO},
+      {{crBBox.left + fWidth / 60, crBBox.bottom + fHeight * 0.25f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 60,
+        crBBox.bottom + fHeight * 0.25f - fWidth * 57 / 60.0f * 0.35f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 30,
+        crBBox.bottom + fHeight * 0.25f - fWidth * 57 / 60.0f * 0.35f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 30, crBBox.bottom + fHeight * 0.25f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 30, crBBox.top - fHeight * 0.33f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 30,
-                     crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
-                     crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
-                               crBBox.top - fHeight * 0.33f),
-                    PWLPT_BEZIERTO),
+      {{crBBox.right - fWidth / 30, crBBox.top - fHeight * 0.33f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 30,
+        crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 30 - fWidth * 0.12f,
+        crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 30 - fWidth * 0.12f,
+        crBBox.top - fHeight * 0.33f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
-                               crBBox.bottom + fHeight * 0.2f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
-                     crBBox.bottom + fHeight * 0.2f -
-                         (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
-                     crBBox.bottom + fHeight * 0.2f -
-                         (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
-                               crBBox.bottom + fHeight * 0.2f),
-                    PWLPT_BEZIERTO),
+      {{crBBox.right - fWidth / 30 - fWidth * 0.12f,
+        crBBox.bottom + fHeight * 0.2f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 30 - fWidth * 0.12f,
+        crBBox.bottom + fHeight * 0.2f -
+            (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 60 + fWidth * 0.12f,
+        crBBox.bottom + fHeight * 0.2f -
+            (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 60 + fWidth * 0.12f,
+        crBBox.bottom + fHeight * 0.2f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
-                               crBBox.top - fHeight * 0.2f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
-                     crBBox.top - fHeight * 0.2f +
-                         (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
-                     crBBox.top - fHeight * 0.2f +
-                         (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
-                               crBBox.top - fHeight * 0.2f),
-                    PWLPT_BEZIERTO),
+      {{crBBox.left + fWidth / 60 + fWidth * 0.12f,
+        crBBox.top - fHeight * 0.2f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth / 60 + fWidth * 0.12f,
+        crBBox.top - fHeight * 0.2f +
+            (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15 - fWidth * 0.24f,
+        crBBox.top - fHeight * 0.2f +
+            (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15 - fWidth * 0.24f,
+        crBBox.top - fHeight * 0.2f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
-                               crBBox.bottom + fHeight * 0.25f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
-                     crBBox.bottom + fHeight * 0.25f -
-                         (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.29f,
-                     crBBox.bottom + fHeight * 0.25f -
-                         (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f,
-                               crBBox.bottom + fHeight * 0.25f),
-                    PWLPT_BEZIERTO),
+      {{crBBox.right - fWidth / 15 - fWidth * 0.24f,
+        crBBox.bottom + fHeight * 0.25f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 15 - fWidth * 0.24f,
+        crBBox.bottom + fHeight * 0.25f -
+            (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.29f,
+        crBBox.bottom + fHeight * 0.25f -
+            (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.29f, crBBox.bottom + fHeight * 0.25f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f,
-                               crBBox.top - fHeight * 0.33f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.29f,
-                     crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.17f,
-                     crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
-                               crBBox.top - fHeight * 0.33f),
-                    PWLPT_BEZIERTO),
+      {{crBBox.left + fWidth * 0.29f, crBBox.top - fHeight * 0.33f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.29f,
+        crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.17f,
+        crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.17f, crBBox.top - fHeight * 0.33f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
-                               crBBox.bottom + fHeight * 0.3f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
-                               crBBox.bottom + fHeight * 0.3f -
-                                   fWidth * (14 / 15.0f - 0.29f) * 0.35f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
-                               crBBox.bottom + fHeight * 0.3f -
-                                   fWidth * (14 / 15.0f - 0.29f) * 0.35f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
-                               crBBox.bottom + fHeight * 0.3f),
-                    PWLPT_BEZIERTO),
+      {{crBBox.left + fWidth * 0.17f, crBBox.bottom + fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.17f,
+        crBBox.bottom + fHeight * 0.3f - fWidth * (14 / 15.0f - 0.29f) * 0.35f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15 - fWidth * 0.12f,
+        crBBox.bottom + fHeight * 0.3f - fWidth * (14 / 15.0f - 0.29f) * 0.35f},
+       PWLPT_BEZIERTO},
+      {{crBBox.right - fWidth / 15 - fWidth * 0.12f,
+        crBBox.bottom + fHeight * 0.3f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
-                               crBBox.top - fHeight * 0.25f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
-                               crBBox.top - fHeight * 0.25f +
-                                   fWidth * 0.35f * (11 / 12.0f - 0.12f)),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
-                               crBBox.top - fHeight * 0.25f +
-                                   fWidth * 0.35f * (11 / 12.0f - 0.12f)),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f),
-          PWLPT_BEZIERTO)};
+      {{crBBox.right - fWidth / 15 - fWidth * 0.12f,
+        crBBox.top - fHeight * 0.25f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth / 15 - fWidth * 0.12f,
+        crBBox.top - fHeight * 0.25f + fWidth * 0.35f * (11 / 12.0f - 0.12f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 60,
+        crBBox.top - fHeight * 0.25f + fWidth * 0.35f * (11 / 12.0f - 0.12f)},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f},
+       PWLPT_BEZIERTO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 33);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 33);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Attachment(CFX_ByteString& sPathData,
@@ -3103,92 +2798,72 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
-                               crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
-                               crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f),
-          PWLPT_BEZIERTO),
+      {{crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f,
+        crBBox.top - fHeight * 0.5f + fWidth * 0.04f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.6f,
+        crBBox.top - fHeight * 0.5f + fWidth * 0.04f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.25f,
-                               crBBox.top - fHeight * 0.1f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f),
-          PWLPT_LINETO),
+      {{crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 0.25f, crBBox.top - fHeight * 0.1f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f},
+       PWLPT_LINETO},
 
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f - fWidth * 0.25f * 0.4f,
-                     crBBox.top - fHeight * 0.5f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.15f,
-                     crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.15f,
-                               crBBox.top - fHeight * 0.65f),
-                    PWLPT_BEZIERTO),
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.4f - fWidth * 0.25f * 0.4f,
+        crBBox.top - fHeight * 0.5f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.15f,
+        crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.15f, crBBox.top - fHeight * 0.65f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.15f,
-                               crBBox.top - fHeight * 0.65f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.15f,
-                     crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.6f + fWidth * 0.25f * 0.4f,
-                     crBBox.top - fHeight * 0.5f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f),
-          PWLPT_BEZIERTO),
+      {{crBBox.right - fWidth * 0.15f, crBBox.top - fHeight * 0.65f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 0.15f,
+        crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.6f + fWidth * 0.25f * 0.4f,
+        crBBox.top - fHeight * 0.5f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
-                               crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
-                               crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
-          PWLPT_BEZIERTO),
+      {{crBBox.left + fWidth * 0.6f,
+        crBBox.top - fHeight * 0.5f + fWidth * 0.04f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.4f,
+        crBBox.top - fHeight * 0.5f + fWidth * 0.04f},
+       PWLPT_BEZIERTO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f},
+       PWLPT_BEZIERTO},
 
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.65f),
-          PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
-                               crBBox.bottom + fHeight * 0.1f),
-                    PWLPT_LINETO)};
+      {{crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.65f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.5f, crBBox.bottom + fHeight * 0.1f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 24);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 24);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Tag(CFX_ByteString& sPathData,
@@ -3199,47 +2874,35 @@
   FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.1f, crBBox.top - fHeight * 0.5f),
-          PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.3f,
-                               crBBox.bottom + fHeight * 0.1f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.1f,
-                               crBBox.bottom + fHeight * 0.1f),
-                    PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.1f, crBBox.top - fHeight * 0.1f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.3f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.3f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.5f),
-          PWLPT_LINETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.7f),
-          PWLPT_MOVETO),
-      CPWL_PathData(
-          CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.7f),
-          PWLPT_LINETO)};
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f},
+       PWLPT_MOVETO},
+      {{crBBox.left + fWidth * 0.1f, crBBox.top - fHeight * 0.5f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.3f, crBBox.bottom + fHeight * 0.1f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 0.1f, crBBox.bottom + fHeight * 0.1f},
+       PWLPT_LINETO},
+      {{crBBox.right - fWidth * 0.1f, crBBox.top - fHeight * 0.1f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.3f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.3f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.5f},
+       PWLPT_LINETO},
+      {{crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.7f},
+       PWLPT_MOVETO},
+      {{crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.7f},
+       PWLPT_LINETO}};
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 12);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 12);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Utils::GetGraphics_Foxit(CFX_ByteString& sPathData,
@@ -3259,66 +2922,53 @@
   FX_FLOAT fHeight = crInBox.top - crInBox.bottom;
 
   CPWL_PathData PathArray[] = {
-      CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f, crInBox.top),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f,
-                               crInBox.top - FX_BEZIER * fHeight * 0.4f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crInBox.left + fWidth * 0.45f - FX_BEZIER * fWidth * 0.45f,
-                     crInBox.top - fHeight * 0.4f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.4f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_LINETO),
+      {{crInBox.left, crInBox.top}, PWLPT_MOVETO},
+      {{crInBox.left + fWidth * 0.45f, crInBox.top}, PWLPT_LINETO},
+      {{crInBox.left + fWidth * 0.45f,
+        crInBox.top - FX_BEZIER * fHeight * 0.4f},
+       PWLPT_BEZIERTO},
+      {{crInBox.left + fWidth * 0.45f - FX_BEZIER * fWidth * 0.45f,
+        crInBox.top - fHeight * 0.4f},
+       PWLPT_BEZIERTO},
+      {{crInBox.left, crInBox.top - fHeight * 0.4f}, PWLPT_BEZIERTO},
+      {{crInBox.left, crInBox.top}, PWLPT_LINETO},
 
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f, crInBox.top),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f,
-                               crInBox.top - FX_BEZIER * fHeight * 0.7f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crInBox.left + fWidth * 0.75f - FX_BEZIER * fWidth * 0.75f,
-                     crInBox.top - fHeight * 0.7f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.7f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.55f),
-                    PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crInBox.left + FX_BEZIER * fWidth * 0.60f,
-                               crInBox.top - fHeight * 0.55f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f,
-                               crInBox.top - FX_BEZIER * fHeight * 0.55f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top),
-                    PWLPT_BEZIERTO),
+      {{crInBox.left + fWidth * 0.60f, crInBox.top}, PWLPT_MOVETO},
+      {{crInBox.left + fWidth * 0.75f, crInBox.top}, PWLPT_LINETO},
+      {{crInBox.left + fWidth * 0.75f,
+        crInBox.top - FX_BEZIER * fHeight * 0.7f},
+       PWLPT_BEZIERTO},
+      {{crInBox.left + fWidth * 0.75f - FX_BEZIER * fWidth * 0.75f,
+        crInBox.top - fHeight * 0.7f},
+       PWLPT_BEZIERTO},
+      {{crInBox.left, crInBox.top - fHeight * 0.7f}, PWLPT_BEZIERTO},
+      {{crInBox.left, crInBox.top - fHeight * 0.55f}, PWLPT_LINETO},
+      {{crInBox.left + FX_BEZIER * fWidth * 0.60f,
+        crInBox.top - fHeight * 0.55f},
+       PWLPT_BEZIERTO},
+      {{crInBox.left + fWidth * 0.60f,
+        crInBox.top - FX_BEZIER * fHeight * 0.55f},
+       PWLPT_BEZIERTO},
+      {{crInBox.left + fWidth * 0.60f, crInBox.top}, PWLPT_BEZIERTO},
 
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top),
-                    PWLPT_MOVETO),
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f,
-                               crInBox.top - FX_BEZIER * fHeight * 0.85f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(
-          CPWL_Point(crInBox.left + fWidth * 0.90f - FX_BEZIER * fWidth * 0.90f,
-                     crInBox.top - fHeight * 0.85f),
-          PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.85f),
-                    PWLPT_BEZIERTO),
-      CPWL_PathData(CPWL_Point(crInBox.left, crInBox.bottom), PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crInBox.right, crInBox.bottom), PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crInBox.right, crInBox.top), PWLPT_LINETO),
-      CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top),
-                    PWLPT_LINETO),
+      {{crInBox.left + fWidth * 0.90f, crInBox.top}, PWLPT_MOVETO},
+      {{crInBox.left + fWidth * 0.90f,
+        crInBox.top - FX_BEZIER * fHeight * 0.85f},
+       PWLPT_BEZIERTO},
+      {{crInBox.left + fWidth * 0.90f - FX_BEZIER * fWidth * 0.90f,
+        crInBox.top - fHeight * 0.85f},
+       PWLPT_BEZIERTO},
+      {{crInBox.left, crInBox.top - fHeight * 0.85f}, PWLPT_BEZIERTO},
+      {{crInBox.left, crInBox.bottom}, PWLPT_LINETO},
+      {{crInBox.right, crInBox.bottom}, PWLPT_LINETO},
+      {{crInBox.right, crInBox.top}, PWLPT_LINETO},
+      {{crInBox.left + fWidth * 0.90f, crInBox.top}, PWLPT_LINETO},
   };
 
   if (type == PWLPT_STREAM)
-    sPathData = GetAppStreamFromArray(PathArray, 23);
+    sPathData = GetAppStreamFromArray(PathArray, FX_ArraySize(PathArray));
   else
-    GetPathDataFromArray(path, PathArray, 23);
+    GetPathDataFromArray(path, PathArray, FX_ArraySize(PathArray));
 }
 
 void CPWL_Color::ConvertColorType(int32_t nConvertColorType) {
diff --git a/fpdfsdk/pdfwindow/PWL_Utils.h b/fpdfsdk/pdfwindow/PWL_Utils.h
index f6b51d7..cbf54e6 100644
--- a/fpdfsdk/pdfwindow/PWL_Utils.h
+++ b/fpdfsdk/pdfwindow/PWL_Utils.h
@@ -9,21 +9,13 @@
 
 #include "core/fpdfdoc/cpvt_wordrange.h"
 #include "fpdfsdk/pdfwindow/PWL_Wnd.h"
+#include "fpdfsdk/pdfwindow/cpwl_pathdata.h"
 
 class CFX_Edit;
 class CFX_PathData;
 
 struct CPWL_Color;
 
-template <class T>
-T PWL_MIN(const T& i, const T& j) {
-  return ((i < j) ? i : j);
-}
-template <class T>
-T PWL_MAX(const T& i, const T& j) {
-  return ((i > j) ? i : j);
-}
-
 #define PWL_PDF2WIN(color) (uint8_t(color * 255))
 #define PWL_WIN2PDF(color) ((FX_FLOAT)((FX_FLOAT)color / 255.0f))
 
@@ -74,32 +66,8 @@
 #define PPBL_LABELLEFTICONRIGHT 5
 #define PPBL_LABELOVERICON 6
 
-class CPWL_Point : public CFX_PointF {
- public:
-  CPWL_Point() {}
-  CPWL_Point(FX_FLOAT fx, FX_FLOAT fy) : CFX_PointF(fx, fy) {}
-  CPWL_Point(const CPWL_Point& point) : CFX_PointF(point.x, point.y) {}
-};
-
-enum PWL_PATHDATA_TYPE {
-  PWLPT_MOVETO,
-  PWLPT_LINETO,
-  PWLPT_BEZIERTO,
-  PWLPT_UNKNOWN
-};
-
 enum PWL_PATH_TYPE { PWLPT_PATHDATA, PWLPT_STREAM };
 
-class CPWL_PathData {
- public:
-  CPWL_PathData() : point(), type(PWLPT_UNKNOWN) {}
-  CPWL_PathData(const CPWL_Point& pt, PWL_PATHDATA_TYPE tp)
-      : point(pt), type(tp) {}
-
-  CPWL_Point point;
-  PWL_PATHDATA_TYPE type;
-};
-
 class CPWL_Utils {
  public:
   static CFX_FloatRect InflateRect(const CFX_FloatRect& rcRect, FX_FLOAT fSize);
diff --git a/fpdfsdk/pdfwindow/cpwl_pathdata.cpp b/fpdfsdk/pdfwindow/cpwl_pathdata.cpp
new file mode 100644
index 0000000..64fcd90
--- /dev/null
+++ b/fpdfsdk/pdfwindow/cpwl_pathdata.cpp
@@ -0,0 +1,16 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "fpdfsdk/pdfwindow/cpwl_pathdata.h"
+
+CPWL_PathData::CPWL_PathData() : point(), type(PWLPT_UNKNOWN) {}
+
+CPWL_PathData::CPWL_PathData(const CFX_PointF& pt, PWL_PATHDATA_TYPE tp)
+    : point(pt), type(tp) {}
+
+CPWL_PathData::CPWL_PathData(const CPWL_PathData&) = default;
+
+CPWL_PathData::~CPWL_PathData() = default;
diff --git a/fpdfsdk/pdfwindow/cpwl_pathdata.h b/fpdfsdk/pdfwindow/cpwl_pathdata.h
new file mode 100644
index 0000000..de969b6
--- /dev/null
+++ b/fpdfsdk/pdfwindow/cpwl_pathdata.h
@@ -0,0 +1,30 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef FPDFSDK_PDFWINDOW_CPWL_PATHDATA_H_
+#define FPDFSDK_PDFWINDOW_CPWL_PATHDATA_H_
+
+#include "core/fxcrt/fx_coordinates.h"
+
+enum PWL_PATHDATA_TYPE {
+  PWLPT_MOVETO,
+  PWLPT_LINETO,
+  PWLPT_BEZIERTO,
+  PWLPT_UNKNOWN
+};
+
+class CPWL_PathData {
+ public:
+  CPWL_PathData();
+  CPWL_PathData(const CFX_PointF& pt, PWL_PATHDATA_TYPE tp);
+  CPWL_PathData(const CPWL_PathData&);
+  ~CPWL_PathData();
+
+  CFX_PointF point;
+  PWL_PATHDATA_TYPE type;
+};
+
+#endif  // FPDFSDK_PDFWINDOW_CPWL_PATHDATA_H_
