Use CFX_RectF::ToFloatRect() instead of explicit arithmetic.

Also, tidy and back-fill a test for one of the existing constructors.

Change-Id: Iff23fd8484dda054904038e1dd38f5b17bc2222c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/53150
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/fx_coordinates.cpp b/core/fxcrt/fx_coordinates.cpp
index eade580..11d07e2 100644
--- a/core/fxcrt/fx_coordinates.cpp
+++ b/core/fxcrt/fx_coordinates.cpp
@@ -73,12 +73,9 @@
   }
 }
 
-CFX_FloatRect::CFX_FloatRect(const FX_RECT& rect) {
-  left = rect.left;
-  top = rect.bottom;
-  right = rect.right;
-  bottom = rect.top;
-}
+// Y-axis runs the opposite way in FX_RECT.
+CFX_FloatRect::CFX_FloatRect(const FX_RECT& rect)
+    : left(rect.left), bottom(rect.top), right(rect.right), top(rect.bottom) {}
 
 // static
 CFX_FloatRect CFX_FloatRect::GetBBox(const CFX_PointF* pPoints, int nPoints) {
diff --git a/core/fxcrt/fx_coordinates_unittest.cpp b/core/fxcrt/fx_coordinates_unittest.cpp
index 104bce3..14180d7 100644
--- a/core/fxcrt/fx_coordinates_unittest.cpp
+++ b/core/fxcrt/fx_coordinates_unittest.cpp
@@ -8,6 +8,15 @@
 
 #include "testing/gtest/include/gtest/gtest.h"
 
+TEST(CFX_FloatRect, FromFXRect) {
+  FX_RECT downwards(10, 20, 30, 40);
+  CFX_FloatRect rect(downwards);
+  EXPECT_FLOAT_EQ(rect.left, 10.0f);
+  EXPECT_FLOAT_EQ(rect.bottom, 20.0f);
+  EXPECT_FLOAT_EQ(rect.right, 30.0f);
+  EXPECT_FLOAT_EQ(rect.top, 40.0f);
+}
+
 TEST(CFX_FloatRect, GetBBox) {
   CFX_FloatRect rect = CFX_FloatRect::GetBBox(nullptr, 0);
   EXPECT_FLOAT_EQ(0.0f, rect.left);
diff --git a/fpdfsdk/cpdfsdk_xfawidget.cpp b/fpdfsdk/cpdfsdk_xfawidget.cpp
index ef6e127..a424d26 100644
--- a/fpdfsdk/cpdfsdk_xfawidget.cpp
+++ b/fpdfsdk/cpdfsdk_xfawidget.cpp
@@ -31,7 +31,5 @@
 }
 
 CFX_FloatRect CPDFSDK_XFAWidget::GetRect() const {
-  CFX_RectF rcBBox = GetXFAWidget()->GetLayoutItem()->GetRect(false);
-  return CFX_FloatRect(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
-                       rcBBox.top + rcBBox.height);
+  return GetXFAWidget()->GetLayoutItem()->GetRect(false).ToFloatRect();
 }
diff --git a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
index deeff6e..3ed228e 100644
--- a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
@@ -85,8 +85,7 @@
           ? CXFA_FFWidget::kDrawFocus
           : CXFA_FFWidget::kDoNotDrawFocus);
 
-  CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
-                         rcBBox.top + rcBBox.height);
+  CFX_FloatRect rcWidget = rcBBox.ToFloatRect();
   rcWidget.Inflate(1.0f, 1.0f);
   return rcWidget;
 }
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index 5be70cf..cf5e735 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -280,9 +280,7 @@
     if (pXFAAnnot->GetFormFieldType() == FormFieldType::kXFA)
       continue;
 
-    CFX_RectF rcBBox = pXFAAnnot->GetWidgetRect();
-    CFX_FloatRect rcWidget(rcBBox.left, rcBBox.top, rcBBox.left + rcBBox.width,
-                           rcBBox.top + rcBBox.height);
+    CFX_FloatRect rcWidget = pXFAAnnot->GetWidgetRect().ToFloatRect();
     rcWidget.Inflate(1.0f, 1.0f);
     if (rcWidget.Contains(CFX_PointF(static_cast<float>(page_x),
                                      static_cast<float>(page_y)))) {