diff --git a/fpdfsdk/pwl/cpwl_cbbutton.cpp b/fpdfsdk/pwl/cpwl_cbbutton.cpp
index e2848b2..bb4725f 100644
--- a/fpdfsdk/pwl/cpwl_cbbutton.cpp
+++ b/fpdfsdk/pwl/cpwl_cbbutton.cpp
@@ -12,14 +12,6 @@
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
 
-namespace {
-
-constexpr float kComboBoxTriangleHalfLength = 3.0f;
-constexpr float kComboBoxTriangleQuarterLength =
-    kComboBoxTriangleHalfLength * 0.5;
-
-}  // namespace
-
 CPWL_CBButton::CPWL_CBButton(
     const CreateParams& cp,
     std::unique_ptr<IPWL_SystemHandler::PerWindowData> pAttachedData)
@@ -31,39 +23,45 @@
                                        const CFX_Matrix& mtUser2Device) {
   CPWL_Wnd::DrawThisAppearance(pDevice, mtUser2Device);
 
-  CFX_FloatRect rectWnd = CPWL_Wnd::GetWindowRect();
-  if (!IsVisible() || rectWnd.IsEmpty())
+  if (!IsVisible())
     return;
 
-  CFX_PointF ptCenter = GetCenterPoint();
+  CFX_FloatRect window = CPWL_Wnd::GetWindowRect();
+  if (window.IsEmpty())
+    return;
 
+  constexpr float kComboBoxTriangleLength = 6.0f;
+  constexpr float kComboBoxTriangleHalfLength = kComboBoxTriangleLength / 2;
+  constexpr float kComboBoxTriangleQuarterLength = kComboBoxTriangleLength / 4;
+  if (!IsFloatBigger(window.right - window.left, kComboBoxTriangleLength) ||
+      !IsFloatBigger(window.top - window.bottom, kComboBoxTriangleHalfLength)) {
+    return;
+  }
+
+  CFX_PointF ptCenter = GetCenterPoint();
   CFX_PointF pt1(ptCenter.x - kComboBoxTriangleHalfLength,
                  ptCenter.y + kComboBoxTriangleQuarterLength);
   CFX_PointF pt2(ptCenter.x + kComboBoxTriangleHalfLength,
                  ptCenter.y + kComboBoxTriangleQuarterLength);
   CFX_PointF pt3(ptCenter.x, ptCenter.y - kComboBoxTriangleQuarterLength);
 
-  if (IsFloatBigger(rectWnd.right - rectWnd.left,
-                    kComboBoxTriangleHalfLength * 2) &&
-      IsFloatBigger(rectWnd.top - rectWnd.bottom,
-                    kComboBoxTriangleHalfLength)) {
-    CFX_PathData path;
-    path.AppendPoint(pt1, FXPT_TYPE::MoveTo);
-    path.AppendPoint(pt2, FXPT_TYPE::LineTo);
-    path.AppendPoint(pt3, FXPT_TYPE::LineTo);
-    path.AppendPoint(pt1, FXPT_TYPE::LineTo);
+  CFX_PathData path;
+  path.AppendPoint(pt1, FXPT_TYPE::MoveTo);
+  path.AppendPoint(pt2, FXPT_TYPE::LineTo);
+  path.AppendPoint(pt3, FXPT_TYPE::LineTo);
+  path.AppendPoint(pt1, FXPT_TYPE::LineTo);
 
-    pDevice->DrawPath(&path, &mtUser2Device, nullptr,
-                      PWL_DEFAULT_BLACKCOLOR.ToFXColor(GetTransparency()), 0,
-                      CFX_FillRenderOptions::EvenOddOptions());
-  }
+  pDevice->DrawPath(&path, &mtUser2Device, nullptr,
+                    PWL_DEFAULT_BLACKCOLOR.ToFXColor(GetTransparency()), 0,
+                    CFX_FillRenderOptions::EvenOddOptions());
 }
 
 bool CPWL_CBButton::OnLButtonDown(uint32_t nFlag, const CFX_PointF& point) {
   CPWL_Wnd::OnLButtonDown(nFlag, point);
 
   SetCapture();
-  if (CPWL_Wnd* pParent = GetParentWindow())
+  CPWL_Wnd* pParent = GetParentWindow();
+  if (pParent)
     pParent->NotifyLButtonDown(this, point);
 
   return true;
