Simplify CPWL_Edit::DrawThisAppearance().

Restructure the method to avoid redundant drawing code inside the switch
statement. Then avoid doing redundant work inside the for-loop in the
drawing code.

Change-Id: I14307a29c0f004e957d0dcab8cc849661968849f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/69135
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/pwl/cpwl_edit.cpp b/fpdfsdk/pwl/cpwl_edit.cpp
index a1e4ba9..9c24875 100644
--- a/fpdfsdk/pwl/cpwl_edit.cpp
+++ b/fpdfsdk/pwl/cpwl_edit.cpp
@@ -162,71 +162,40 @@
                                    const CFX_Matrix& mtUser2Device) {
   CPWL_Wnd::DrawThisAppearance(pDevice, mtUser2Device);
 
-  CFX_FloatRect rcClient = GetClientRect();
+  const CFX_FloatRect rcClient = GetClientRect();
+  const BorderStyle border_style = GetBorderStyle();
+  const int32_t nCharArray = m_pEdit->GetCharArray();
+  bool draw_border = nCharArray > 0 && (border_style == BorderStyle::SOLID ||
+                                        border_style == BorderStyle::DASH);
+  if (draw_border) {
+    FX_SAFE_INT32 nCharArraySafe = nCharArray;
+    nCharArraySafe -= 1;
+    nCharArraySafe *= 2;
+    draw_border = nCharArraySafe.IsValid();
+  }
 
-  int32_t nCharArray = m_pEdit->GetCharArray();
-  FX_SAFE_INT32 nCharArraySafe = nCharArray;
-  nCharArraySafe -= 1;
-  nCharArraySafe *= 2;
+  if (draw_border) {
+    CFX_GraphStateData gsd;
+    gsd.m_LineWidth = GetBorderWidth();
+    if (border_style == BorderStyle::DASH) {
+      gsd.m_DashArray = {static_cast<float>(GetBorderDash().nDash),
+                         static_cast<float>(GetBorderDash().nGap)};
+      gsd.m_DashPhase = GetBorderDash().nPhase;
+    }
 
-  if (nCharArray > 0 && nCharArraySafe.IsValid()) {
-    switch (GetBorderStyle()) {
-      case BorderStyle::SOLID: {
-        CFX_GraphStateData gsd;
-        gsd.m_LineWidth = GetBorderWidth();
-
-        CFX_PathData path;
-
-        for (int32_t i = 0; i < nCharArray - 1; i++) {
-          path.AppendPoint(
-              CFX_PointF(
-                  rcClient.left +
-                      ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
-                  rcClient.bottom),
-              FXPT_TYPE::MoveTo);
-          path.AppendPoint(
-              CFX_PointF(
-                  rcClient.left +
-                      ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
-                  rcClient.top),
-              FXPT_TYPE::LineTo);
-        }
-        if (!path.GetPoints().empty()) {
-          pDevice->DrawPath(&path, &mtUser2Device, &gsd, 0,
-                            GetBorderColor().ToFXColor(255), FXFILL_ALTERNATE);
-        }
-        break;
-      }
-      case BorderStyle::DASH: {
-        CFX_GraphStateData gsd;
-        gsd.m_LineWidth = static_cast<float>(GetBorderWidth());
-        gsd.m_DashArray = {static_cast<float>(GetBorderDash().nDash),
-                           static_cast<float>(GetBorderDash().nGap)};
-        gsd.m_DashPhase = static_cast<float>(GetBorderDash().nPhase);
-
-        CFX_PathData path;
-        for (int32_t i = 0; i < nCharArray - 1; i++) {
-          path.AppendPoint(
-              CFX_PointF(
-                  rcClient.left +
-                      ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
-                  rcClient.bottom),
-              FXPT_TYPE::MoveTo);
-          path.AppendPoint(
-              CFX_PointF(
-                  rcClient.left +
-                      ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
-                  rcClient.top),
-              FXPT_TYPE::LineTo);
-        }
-        if (!path.GetPoints().empty()) {
-          pDevice->DrawPath(&path, &mtUser2Device, &gsd, 0,
-                            GetBorderColor().ToFXColor(255), FXFILL_ALTERNATE);
-        }
-        break;
-      }
-      default:
-        break;
+    const float width = (rcClient.right - rcClient.left) / nCharArray;
+    CFX_PathData path;
+    CFX_PointF bottom(0, rcClient.bottom);
+    CFX_PointF top(0, rcClient.top);
+    for (int32_t i = 0; i < nCharArray - 1; ++i) {
+      bottom.x = rcClient.left + width * (i + 1);
+      top.x = bottom.x;
+      path.AppendPoint(bottom, FXPT_TYPE::MoveTo);
+      path.AppendPoint(top, FXPT_TYPE::LineTo);
+    }
+    if (!path.GetPoints().empty()) {
+      pDevice->DrawPath(&path, &mtUser2Device, &gsd, 0,
+                        GetBorderColor().ToFXColor(255), FXFILL_ALTERNATE);
     }
   }