Add CJX_Object::GetMeasureInUnit();

GetMeasureInUnit(attr, unit) is syntactic sugar for
GetMeasure(attr).ToUnit(unit) that auto-formats better.

Change-Id: I0630797c3561d7e62ac180c4e4bb5dc8c5018bd7
Reviewed-on: https://pdfium-review.googlesource.com/c/50411
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index f8e1c95..5cec0c7 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -426,6 +426,11 @@
   return TryMeasure(eAttr, true).value_or(CXFA_Measurement());
 }
 
+float CJX_Object::GetMeasureInUnit(XFA_Attribute eAttr, XFA_Unit unit) const {
+  auto measure = TryMeasure(eAttr, true).value_or(CXFA_Measurement());
+  return measure.ToUnit(unit);
+}
+
 WideString CJX_Object::GetCData(XFA_Attribute eAttr) {
   return TryCData(eAttr, true).value_or(WideString());
 }
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index d94dcea..48a1361 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -217,6 +217,7 @@
   Optional<float> TryMeasureAsFloat(XFA_Attribute attr) const;
   void SetMeasure(XFA_Attribute eAttr, CXFA_Measurement mValue, bool bNotify);
   CXFA_Measurement GetMeasure(XFA_Attribute eAttr) const;
+  float GetMeasureInUnit(XFA_Attribute eAttr, XFA_Unit unit) const;
 
   void MergeAllData(CXFA_Object* pDstModule);
 
diff --git a/xfa/fxfa/layout/cxfa_containerlayoutitem.cpp b/xfa/fxfa/layout/cxfa_containerlayoutitem.cpp
index 88b6e35..6d5e313 100644
--- a/xfa/fxfa/layout/cxfa_containerlayoutitem.cpp
+++ b/xfa/fxfa/layout/cxfa_containerlayoutitem.cpp
@@ -36,12 +36,9 @@
   if (!pMedium)
     return size;
 
-  size = CFX_SizeF(pMedium->JSObject()
-                       ->GetMeasure(XFA_Attribute::Short)
-                       .ToUnit(XFA_Unit::Pt),
-                   pMedium->JSObject()
-                       ->GetMeasure(XFA_Attribute::Long)
-                       .ToUnit(XFA_Unit::Pt));
+  size = CFX_SizeF(
+      pMedium->JSObject()->GetMeasureInUnit(XFA_Attribute::Short, XFA_Unit::Pt),
+      pMedium->JSObject()->GetMeasureInUnit(XFA_Attribute::Long, XFA_Unit::Pt));
   if (pMedium->JSObject()->GetEnum(XFA_Attribute::Orientation) ==
       XFA_AttributeValue::Landscape) {
     size = CFX_SizeF(size.height, size.width);
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutitem.cpp b/xfa/fxfa/layout/cxfa_contentlayoutitem.cpp
index 600d1b9..bc97674 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutitem.cpp
+++ b/xfa/fxfa/layout/cxfa_contentlayoutitem.cpp
@@ -69,26 +69,21 @@
           pContent->m_pFormNode->GetFirstChildByClass<CXFA_Margin>(
               XFA_Element::Margin);
       if (pMarginNode) {
-        sPos += CFX_PointF(pMarginNode->JSObject()
-                               ->GetMeasure(XFA_Attribute::LeftInset)
-                               .ToUnit(XFA_Unit::Pt),
-                           pMarginNode->JSObject()
-                               ->GetMeasure(XFA_Attribute::TopInset)
-                               .ToUnit(XFA_Unit::Pt));
+        sPos += CFX_PointF(pMarginNode->JSObject()->GetMeasureInUnit(
+                               XFA_Attribute::LeftInset, XFA_Unit::Pt),
+                           pMarginNode->JSObject()->GetMeasureInUnit(
+                               XFA_Attribute::TopInset, XFA_Unit::Pt));
       }
       continue;
     }
 
     if (pLayoutItem->GetFormNode()->GetElementType() ==
         XFA_Element::ContentArea) {
-      sPos += CFX_PointF(pLayoutItem->GetFormNode()
-                             ->JSObject()
-                             ->GetMeasure(XFA_Attribute::X)
-                             .ToUnit(XFA_Unit::Pt),
-                         pLayoutItem->GetFormNode()
-                             ->JSObject()
-                             ->GetMeasure(XFA_Attribute::Y)
-                             .ToUnit(XFA_Unit::Pt));
+      sPos +=
+          CFX_PointF(pLayoutItem->GetFormNode()->JSObject()->GetMeasureInUnit(
+                         XFA_Attribute::X, XFA_Unit::Pt),
+                     pLayoutItem->GetFormNode()->JSObject()->GetMeasureInUnit(
+                         XFA_Attribute::Y, XFA_Unit::Pt));
       break;
     }
     if (pLayoutItem->GetFormNode()->GetElementType() == XFA_Element::PageArea)
diff --git a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
index 007481a..7271930 100644
--- a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
@@ -187,18 +187,14 @@
   float fRightInset = 0;
   float fBottomInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSObject()
-                     ->GetMeasure(XFA_Attribute::LeftInset)
-                     .ToUnit(XFA_Unit::Pt);
-    fTopInset = pMarginNode->JSObject()
-                    ->GetMeasure(XFA_Attribute::TopInset)
-                    .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSObject()
-                      ->GetMeasure(XFA_Attribute::RightInset)
-                      .ToUnit(XFA_Unit::Pt);
-    fBottomInset = pMarginNode->JSObject()
-                       ->GetMeasure(XFA_Attribute::BottomInset)
-                       .ToUnit(XFA_Unit::Pt);
+    fLeftInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::LeftInset, XFA_Unit::Pt);
+    fTopInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::TopInset, XFA_Unit::Pt);
+    fRightInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::RightInset, XFA_Unit::Pt);
+    fBottomInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::BottomInset, XFA_Unit::Pt);
   }
 
   float fContentWidthLimit =
@@ -486,12 +482,10 @@
       CXFA_Margin* pMarginNode =
           pFormNode->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin);
       if (pMarginNode && bCalculateMargin) {
-        fCurTopMargin = pMarginNode->JSObject()
-                            ->GetMeasure(XFA_Attribute::TopInset)
-                            .ToUnit(XFA_Unit::Pt);
-        fCurBottomMargin = pMarginNode->JSObject()
-                               ->GetMeasure(XFA_Attribute::BottomInset)
-                               .ToUnit(XFA_Unit::Pt);
+        fCurTopMargin = pMarginNode->JSObject()->GetMeasureInUnit(
+            XFA_Attribute::TopInset, XFA_Unit::Pt);
+        fCurBottomMargin = pMarginNode->JSObject()->GetMeasureInUnit(
+            XFA_Attribute::BottomInset, XFA_Unit::Pt);
       }
       bool bChanged = true;
       while (bChanged) {
@@ -592,8 +586,8 @@
                                          {2, 5, 8, 1, 4, 7, 0, 3, 6}};
 
   CFX_PointF pos(
-      pNode->JSObject()->GetMeasure(XFA_Attribute::X).ToUnit(XFA_Unit::Pt),
-      pNode->JSObject()->GetMeasure(XFA_Attribute::Y).ToUnit(XFA_Unit::Pt));
+      pNode->JSObject()->GetMeasureInUnit(XFA_Attribute::X, XFA_Unit::Pt),
+      pNode->JSObject()->GetMeasureInUnit(XFA_Attribute::Y, XFA_Unit::Pt));
   int32_t nRotate =
       XFA_MapRotation(pNode->JSObject()->GetInteger(XFA_Attribute::Rotate)) /
       90;
@@ -691,12 +685,10 @@
       pLayoutItem->GetFormNode()->GetFirstChildByClass<CXFA_Margin>(
           XFA_Element::Margin);
   if (pMarginNode && bCalculateMargin) {
-    fCurTopMargin = pMarginNode->JSObject()
-                        ->GetMeasure(XFA_Attribute::TopInset)
-                        .ToUnit(XFA_Unit::Pt);
-    fCurBottomMargin = pMarginNode->JSObject()
-                           ->GetMeasure(XFA_Attribute::BottomInset)
-                           .ToUnit(XFA_Unit::Pt);
+    fCurTopMargin = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::TopInset, XFA_Unit::Pt);
+    fCurBottomMargin = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::BottomInset, XFA_Unit::Pt);
   }
 
   CXFA_ContentLayoutItem* pSecondLayoutItem = nullptr;
@@ -1188,12 +1180,10 @@
   float fLeftInset = 0;
   float fRightInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSObject()
-                     ->GetMeasure(XFA_Attribute::LeftInset)
-                     .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSObject()
-                      ->GetMeasure(XFA_Attribute::RightInset)
-                      .ToUnit(XFA_Unit::Pt);
+    fLeftInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::LeftInset, XFA_Unit::Pt);
+    fRightInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::RightInset, XFA_Unit::Pt);
   }
 
   float fContentWidthLimit =
@@ -1587,18 +1577,14 @@
   float fRightInset = 0;
   float fBottomInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSObject()
-                     ->GetMeasure(XFA_Attribute::LeftInset)
-                     .ToUnit(XFA_Unit::Pt);
-    fTopInset = pMarginNode->JSObject()
-                    ->GetMeasure(XFA_Attribute::TopInset)
-                    .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSObject()
-                      ->GetMeasure(XFA_Attribute::RightInset)
-                      .ToUnit(XFA_Unit::Pt);
-    fBottomInset = pMarginNode->JSObject()
-                       ->GetMeasure(XFA_Attribute::BottomInset)
-                       .ToUnit(XFA_Unit::Pt);
+    fLeftInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::LeftInset, XFA_Unit::Pt);
+    fTopInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::TopInset, XFA_Unit::Pt);
+    fRightInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::RightInset, XFA_Unit::Pt);
+    fBottomInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::BottomInset, XFA_Unit::Pt);
   }
   float fContentWidthLimit =
       bContainerWidthAutoSize ? FLT_MAX
@@ -2285,18 +2271,14 @@
   float fRightInset = 0;
   float fBottomInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSObject()
-                     ->GetMeasure(XFA_Attribute::LeftInset)
-                     .ToUnit(XFA_Unit::Pt);
-    fTopInset = pMarginNode->JSObject()
-                    ->GetMeasure(XFA_Attribute::TopInset)
-                    .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSObject()
-                      ->GetMeasure(XFA_Attribute::RightInset)
-                      .ToUnit(XFA_Unit::Pt);
-    fBottomInset = pMarginNode->JSObject()
-                       ->GetMeasure(XFA_Attribute::BottomInset)
-                       .ToUnit(XFA_Unit::Pt);
+    fLeftInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::LeftInset, XFA_Unit::Pt);
+    fTopInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::TopInset, XFA_Unit::Pt);
+    fRightInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::RightInset, XFA_Unit::Pt);
+    fBottomInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::BottomInset, XFA_Unit::Pt);
   }
 
   if (!IsAddNewRowForTrailer(pTrailerLayoutItem)) {
@@ -2349,12 +2331,10 @@
   float fLeftInset = 0;
   float fRightInset = 0;
   if (pMarginNode) {
-    fLeftInset = pMarginNode->JSObject()
-                     ->GetMeasure(XFA_Attribute::LeftInset)
-                     .ToUnit(XFA_Unit::Pt);
-    fRightInset = pMarginNode->JSObject()
-                      ->GetMeasure(XFA_Attribute::RightInset)
-                      .ToUnit(XFA_Unit::Pt);
+    fLeftInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::LeftInset, XFA_Unit::Pt);
+    fRightInset = pMarginNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::RightInset, XFA_Unit::Pt);
   }
 
   float fHeight = pLeaderLayoutItem->m_sSize.height;
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index 04688b8..967f377 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -495,10 +495,8 @@
   if (!pLayoutItem || !pLayoutItem->GetFormNode())
     return 0.0f;
 
-  float fAvailHeight = pLayoutItem->GetFormNode()
-                           ->JSObject()
-                           ->GetMeasure(XFA_Attribute::H)
-                           .ToUnit(XFA_Unit::Pt);
+  float fAvailHeight = pLayoutItem->GetFormNode()->JSObject()->GetMeasureInUnit(
+      XFA_Attribute::H, XFA_Unit::Pt);
   if (fAvailHeight >= kXFALayoutPrecision)
     return fAvailHeight;
   if (m_CurrentContainerRecordIter == m_ProposedContainerRecords.begin())
@@ -702,10 +700,10 @@
               continue;
             }
             iCurContentAreaIndex++;
-            const float fHeight = pContentAreaNode->JSObject()
-                                      ->GetMeasure(XFA_Attribute::H)
-                                      .ToUnit(XFA_Unit::Pt) +
-                                  kXFALayoutPrecision;
+            const float fHeight =
+                pContentAreaNode->JSObject()->GetMeasureInUnit(XFA_Attribute::H,
+                                                               XFA_Unit::Pt) +
+                kXFALayoutPrecision;
             if (rgUsedHeights[iCurContentAreaIndex] > fHeight) {
               bUsable = false;
               break;
@@ -1548,9 +1546,8 @@
   pCurContentNode = pCurContentNode->GetNextSameClassSibling<CXFA_ContentArea>(
       XFA_Element::ContentArea);
   if (pCurContentNode) {
-    float fNextContentHeight = pCurContentNode->JSObject()
-                                   ->GetMeasure(XFA_Attribute::H)
-                                   .ToUnit(XFA_Unit::Pt);
+    float fNextContentHeight = pCurContentNode->JSObject()->GetMeasureInUnit(
+        XFA_Attribute::H, XFA_Unit::Pt);
     return fNextContentHeight > fChildHeight;
   }
 
@@ -1587,9 +1584,8 @@
             pNextPage->GetFirstChildByClass<CXFA_ContentArea>(
                 XFA_Element::ContentArea);
         if (pContentArea) {
-          float fNextContentHeight = pContentArea->JSObject()
-                                         ->GetMeasure(XFA_Attribute::H)
-                                         .ToUnit(XFA_Unit::Pt);
+          float fNextContentHeight = pContentArea->JSObject()->GetMeasureInUnit(
+              XFA_Attribute::H, XFA_Unit::Pt);
           if (fNextContentHeight > fChildHeight)
             return true;
         }
@@ -1603,9 +1599,8 @@
   if (!pContentArea)
     return false;
 
-  float fNextContentHeight = pContentArea->JSObject()
-                                 ->GetMeasure(XFA_Attribute::H)
-                                 .ToUnit(XFA_Unit::Pt);
+  float fNextContentHeight = pContentArea->JSObject()->GetMeasureInUnit(
+      XFA_Attribute::H, XFA_Unit::Pt);
   if (fNextContentHeight < kXFALayoutPrecision)
     return true;
   if (fNextContentHeight > fChildHeight)
diff --git a/xfa/fxfa/layout/cxfa_layoutprocessor.cpp b/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
index dd6c11c..45b54d6 100644
--- a/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
@@ -66,9 +66,9 @@
   XFA_ItemLayoutProcessorResult eStatus;
   CXFA_Node* pFormNode = m_pRootItemLayoutProcessor->GetFormNode();
   float fPosX =
-      pFormNode->JSObject()->GetMeasure(XFA_Attribute::X).ToUnit(XFA_Unit::Pt);
+      pFormNode->JSObject()->GetMeasureInUnit(XFA_Attribute::X, XFA_Unit::Pt);
   float fPosY =
-      pFormNode->JSObject()->GetMeasure(XFA_Attribute::Y).ToUnit(XFA_Unit::Pt);
+      pFormNode->JSObject()->GetMeasureInUnit(XFA_Attribute::Y, XFA_Unit::Pt);
   do {
     float fAvailHeight = m_pLayoutPageMgr->GetAvailHeight();
     eStatus = m_pRootItemLayoutProcessor->DoLayout(true, fAvailHeight,
diff --git a/xfa/fxfa/parser/cxfa_caption.cpp b/xfa/fxfa/parser/cxfa_caption.cpp
index 7ee88e6..1fadb8d 100644
--- a/xfa/fxfa/parser/cxfa_caption.cpp
+++ b/xfa/fxfa/parser/cxfa_caption.cpp
@@ -62,7 +62,7 @@
 }
 
 float CXFA_Caption::GetReserve() const {
-  return JSObject()->GetMeasure(XFA_Attribute::Reserve).ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::Reserve, XFA_Unit::Pt);
 }
 
 CXFA_Margin* CXFA_Caption::GetMarginIfExists() {
diff --git a/xfa/fxfa/parser/cxfa_font.cpp b/xfa/fxfa/parser/cxfa_font.cpp
index 20d8cc8..70e8426 100644
--- a/xfa/fxfa/parser/cxfa_font.cpp
+++ b/xfa/fxfa/parser/cxfa_font.cpp
@@ -66,9 +66,8 @@
 CXFA_Font::~CXFA_Font() = default;
 
 float CXFA_Font::GetBaselineShift() const {
-  return JSObject()
-      ->GetMeasure(XFA_Attribute::BaselineShift)
-      .ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::BaselineShift,
+                                      XFA_Unit::Pt);
 }
 
 float CXFA_Font::GetHorizontalScale() {
@@ -106,7 +105,7 @@
 }
 
 float CXFA_Font::GetFontSize() const {
-  return JSObject()->GetMeasure(XFA_Attribute::Size).ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::Size, XFA_Unit::Pt);
 }
 
 WideString CXFA_Font::GetTypeface() {
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 9ebd303..90acafb 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -3833,9 +3833,8 @@
 float CXFA_Node::GetCheckButtonSize() {
   CXFA_Node* pUIChild = GetUIChildNode();
   if (pUIChild) {
-    return pUIChild->JSObject()
-        ->GetMeasure(XFA_Attribute::Size)
-        .ToUnit(XFA_Unit::Pt);
+    return pUIChild->JSObject()->GetMeasureInUnit(XFA_Attribute::Size,
+                                                  XFA_Unit::Pt);
   }
   return CXFA_Measurement(10, XFA_Unit::Pt).ToUnit(XFA_Unit::Pt);
 }
diff --git a/xfa/fxfa/parser/cxfa_para.cpp b/xfa/fxfa/parser/cxfa_para.cpp
index af873d3..6907baf 100644
--- a/xfa/fxfa/parser/cxfa_para.cpp
+++ b/xfa/fxfa/parser/cxfa_para.cpp
@@ -65,27 +65,25 @@
 }
 
 float CXFA_Para::GetLineHeight() {
-  return JSObject()->GetMeasure(XFA_Attribute::LineHeight).ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::LineHeight, XFA_Unit::Pt);
 }
 
 float CXFA_Para::GetMarginLeft() {
-  return JSObject()->GetMeasure(XFA_Attribute::MarginLeft).ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::MarginLeft, XFA_Unit::Pt);
 }
 
 float CXFA_Para::GetMarginRight() {
-  return JSObject()
-      ->GetMeasure(XFA_Attribute::MarginRight)
-      .ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::MarginRight, XFA_Unit::Pt);
 }
 
 float CXFA_Para::GetSpaceAbove() {
-  return JSObject()->GetMeasure(XFA_Attribute::SpaceAbove).ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::SpaceAbove, XFA_Unit::Pt);
 }
 
 float CXFA_Para::GetSpaceBelow() {
-  return JSObject()->GetMeasure(XFA_Attribute::SpaceBelow).ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::SpaceBelow, XFA_Unit::Pt);
 }
 
 float CXFA_Para::GetTextIndent() {
-  return JSObject()->GetMeasure(XFA_Attribute::TextIndent).ToUnit(XFA_Unit::Pt);
+  return JSObject()->GetMeasureInUnit(XFA_Attribute::TextIndent, XFA_Unit::Pt);
 }