diff --git a/core/fpdfdoc/cpdf_iconfit.cpp b/core/fpdfdoc/cpdf_iconfit.cpp
index bef9eb4..8b8fa4e 100644
--- a/core/fpdfdoc/cpdf_iconfit.cpp
+++ b/core/fpdfdoc/cpdf_iconfit.cpp
@@ -10,13 +10,19 @@
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fxcrt/fx_string.h"
 
+namespace {
+
+constexpr float kDefaultPosition = 0.5f;
+
+}  // namespace
+
 CPDF_IconFit::CPDF_IconFit(const CPDF_Dictionary* pDict) : m_pDict(pDict) {}
 
 CPDF_IconFit::CPDF_IconFit(const CPDF_IconFit& that) = default;
 
-CPDF_IconFit::~CPDF_IconFit() {}
+CPDF_IconFit::~CPDF_IconFit() = default;
 
-CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() {
+CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() const {
   if (!m_pDict)
     return Always;
 
@@ -30,25 +36,28 @@
   return Always;
 }
 
-bool CPDF_IconFit::IsProportionalScale() {
-  return m_pDict ? m_pDict->GetStringFor("S", "P") != "A" : true;
+bool CPDF_IconFit::IsProportionalScale() const {
+  return !m_pDict || m_pDict->GetStringFor("S", "P") != "A";
 }
 
-void CPDF_IconFit::GetIconPosition(float& fLeft, float& fBottom) {
-  fLeft = fBottom = 0.5;
+CFX_PointF CPDF_IconFit::GetIconBottomLeftPosition() const {
+  float fLeft = kDefaultPosition;
+  float fBottom = kDefaultPosition;
   if (!m_pDict)
-    return;
+    return {fLeft, fBottom};
 
   const CPDF_Array* pA = m_pDict->GetArrayFor("A");
-  if (pA) {
-    uint32_t dwCount = pA->GetCount();
-    if (dwCount > 0)
-      fLeft = pA->GetNumberAt(0);
-    if (dwCount > 1)
-      fBottom = pA->GetNumberAt(1);
-  }
+  if (!pA)
+    return {fLeft, fBottom};
+
+  size_t dwCount = pA->GetCount();
+  if (dwCount > 0)
+    fLeft = pA->GetNumberAt(0);
+  if (dwCount > 1)
+    fBottom = pA->GetNumberAt(1);
+  return {fLeft, fBottom};
 }
 
-bool CPDF_IconFit::GetFittingBounds() {
+bool CPDF_IconFit::GetFittingBounds() const {
   return m_pDict && m_pDict->GetBooleanFor("FB", false);
 }
diff --git a/core/fpdfdoc/cpdf_iconfit.h b/core/fpdfdoc/cpdf_iconfit.h
index e6aafb6..7c27d6f 100644
--- a/core/fpdfdoc/cpdf_iconfit.h
+++ b/core/fpdfdoc/cpdf_iconfit.h
@@ -7,6 +7,7 @@
 #ifndef CORE_FPDFDOC_CPDF_ICONFIT_H_
 #define CORE_FPDFDOC_CPDF_ICONFIT_H_
 
+#include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/unowned_ptr.h"
 
@@ -20,10 +21,10 @@
   CPDF_IconFit(const CPDF_IconFit& that);
   ~CPDF_IconFit();
 
-  ScaleMethod GetScaleMethod();
-  bool IsProportionalScale();
-  void GetIconPosition(float& fLeft, float& fBottom);
-  bool GetFittingBounds();
+  ScaleMethod GetScaleMethod() const;
+  bool IsProportionalScale() const;
+  CFX_PointF GetIconBottomLeftPosition() const;
+  bool GetFittingBounds() const;
   const CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
 
  private:
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index 2777fd8..9c47e70 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -758,11 +758,8 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   CPDF_IconFit IconFit = pFormControl->GetIconFit();
-
-  float fLeft;
-  float fBottom;
-  IconFit.GetIconPosition(fLeft, fBottom);
-  return CJS_Result::Success(pRuntime->NewNumber(static_cast<int32_t>(fLeft)));
+  CFX_PointF pos = IconFit.GetIconBottomLeftPosition();
+  return CJS_Result::Success(pRuntime->NewNumber(static_cast<int32_t>(pos.x)));
 }
 
 CJS_Result CJS_Field::set_button_align_x(CJS_Runtime* pRuntime,
@@ -788,13 +785,8 @@
     return CJS_Result::Failure(JSMessage::kBadObjectError);
 
   CPDF_IconFit IconFit = pFormControl->GetIconFit();
-
-  float fLeft;
-  float fBottom;
-  IconFit.GetIconPosition(fLeft, fBottom);
-
-  return CJS_Result::Success(
-      pRuntime->NewNumber(static_cast<int32_t>(fBottom)));
+  CFX_PointF pos = IconFit.GetIconBottomLeftPosition();
+  return CJS_Result::Success(pRuntime->NewNumber(static_cast<int32_t>(pos.y)));
 }
 
 CJS_Result CJS_Field::set_button_align_y(CJS_Runtime* pRuntime,
