Cleanup CFWL_Widget code to return CFX_RectFs where appropriate

This Cl changes the various Get*Rect methods in CFWL_Widget to return CFX_RectF
classes instead of taking an out parameter. The Repaint method is split into
Repaint() and RepaintRect() in order to change the param to a const CFX_RectF&
from a CFX_RectF*.

Review-Url: https://codereview.chromium.org/2560873005
diff --git a/xfa/fwl/cfwl_caret.cpp b/xfa/fwl/cfwl_caret.cpp
index fdac8ec..4a95b09 100644
--- a/xfa/fwl/cfwl_caret.cpp
+++ b/xfa/fwl/cfwl_caret.cpp
@@ -108,5 +108,5 @@
 
   CFX_RectF rt = pCaret->GetWidgetRect();
   rt.Set(0, 0, rt.width + 1, rt.height);
-  pCaret->Repaint(&rt);
+  pCaret->RepaintRect(rt);
 }
diff --git a/xfa/fwl/cfwl_checkbox.cpp b/xfa/fwl/cfwl_checkbox.cpp
index 2e37548..3f8ca90 100644
--- a/xfa/fwl/cfwl_checkbox.cpp
+++ b/xfa/fwl/cfwl_checkbox.cpp
@@ -120,7 +120,7 @@
     default:
       break;
   }
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_CheckBox::Layout() {
@@ -128,7 +128,7 @@
       FXSYS_round(m_pProperties->m_rtWidget.width);
   m_pProperties->m_rtWidget.height =
       FXSYS_round(m_pProperties->m_rtWidget.height);
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
 
   FX_FLOAT fBoxTop = m_rtClient.top;
   FX_FLOAT fClientBottom = m_rtClient.bottom();
@@ -287,7 +287,7 @@
             pCheckBox->SetCheckState(0);
             CFX_RectF rt = pCheckBox->GetWidgetRect();
             rt.left = rt.top = 0;
-            m_pWidgetMgr->RepaintWidget(pCheckBox, &rt);
+            m_pWidgetMgr->RepaintWidget(pCheckBox, rt);
             break;
           }
         }
@@ -311,7 +311,7 @@
     }
   }
 
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
   if (dwFirststate == m_pProperties->m_dwStates)
     return;
 
@@ -374,7 +374,7 @@
   else
     m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
 
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_CheckBox::OnLButtonDown() {
@@ -386,7 +386,7 @@
   m_bBtnDown = true;
   m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered;
   m_pProperties->m_dwStates |= FWL_STATE_CKB_Pressed;
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_CheckBox::OnLButtonUp(CFWL_MessageMouse* pMsg) {
@@ -436,7 +436,7 @@
     }
   }
   if (bRepaint)
-    Repaint(&m_rtBox);
+    RepaintRect(m_rtBox);
 }
 
 void CFWL_CheckBox::OnMouseLeave() {
@@ -445,7 +445,7 @@
   else
     m_pProperties->m_dwStates &= ~FWL_STATE_CKB_Hovered;
 
-  Repaint(&m_rtBox);
+  RepaintRect(m_rtBox);
 }
 
 void CFWL_CheckBox::OnKeyDown(CFWL_MessageKey* pMsg) {
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index 83c3d4a..eb6bb63 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -400,7 +400,7 @@
   if (m_pWidgetMgr->IsFormDisabled())
     return DisForm_Layout();
 
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>(
       GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
   if (!pFWidth)
@@ -504,7 +504,7 @@
 void CFWL_ComboBox::ProcessSelChanged(bool bLButtonUp) {
   m_iCurSel = m_pListBox->GetItemIndex(this, m_pListBox->GetSelItem(0));
   if (!IsDropDownStyle()) {
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
     return;
   }
 
@@ -614,7 +614,7 @@
 
   CFX_RectF rect = m_pListBox->GetWidgetRect();
   rect.Inflate(2, 2);
-  Repaint(&rect);
+  RepaintRect(rect);
 }
 
 void CFWL_ComboBox::DisForm_ModifyStylesEx(uint32_t dwStylesExAdded,
@@ -709,7 +709,7 @@
 }
 
 void CFWL_ComboBox::DisForm_Layout() {
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   m_rtContent = m_rtClient;
   FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>(
       GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
@@ -822,13 +822,13 @@
       return;
     }
 
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
     return;
   }
 
   m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
   if (!IsDropDownStyle() || pMsg->m_pDstTarget == m_pListBox.get()) {
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
     return;
   }
   if (!m_pEdit)
@@ -851,11 +851,11 @@
 
   m_bLButtonDown = true;
   m_iBtnState = CFWL_PartState_Pressed;
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 
   ShowDropList(true);
   m_iBtnState = CFWL_PartState_Normal;
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_ComboBox::OnLButtonUp(CFWL_MessageMouse* pMsg) {
@@ -865,7 +865,7 @@
   else
     m_iBtnState = CFWL_PartState_Normal;
 
-  Repaint(&m_rtBtn);
+  RepaintRect(m_rtBtn);
 }
 
 void CFWL_ComboBox::OnMouseMove(CFWL_MessageMouse* pMsg) {
@@ -879,7 +879,7 @@
   if ((iOldState != m_iBtnState) &&
       !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) ==
         FWL_WGTSTATE_Disabled)) {
-    Repaint(&m_rtBtn);
+    RepaintRect(m_rtBtn);
   }
 }
 
@@ -888,7 +888,7 @@
       !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) ==
         FWL_WGTSTATE_Disabled)) {
     m_iBtnState = CFWL_PartState_Normal;
-    Repaint(&m_rtBtn);
+    RepaintRect(m_rtBtn);
   }
 }
 
@@ -935,7 +935,7 @@
     if (bDropDown && m_pEdit)
       SyncEditText(m_iCurSel);
     else
-      Repaint(&m_rtClient);
+      RepaintRect(m_rtClient);
     return;
   }
 
diff --git a/xfa/fwl/cfwl_comboedit.cpp b/xfa/fwl/cfwl_comboedit.cpp
index 5981fd7..22ad6bf 100644
--- a/xfa/fwl/cfwl_comboedit.cpp
+++ b/xfa/fwl/cfwl_comboedit.cpp
@@ -23,7 +23,7 @@
 
 void CFWL_ComboEdit::ClearSelected() {
   ClearSelections();
-  Repaint(&GetRTClient());
+  RepaintRect(GetRTClient());
 }
 
 void CFWL_ComboEdit::SetSelected() {
diff --git a/xfa/fwl/cfwl_combolist.cpp b/xfa/fwl/cfwl_combolist.cpp
index 4ec3abe..1fa9acb 100644
--- a/xfa/fwl/cfwl_combolist.cpp
+++ b/xfa/fwl/cfwl_combolist.cpp
@@ -62,7 +62,7 @@
     SetSelItem(hSel, true);
   }
   if (!rtInvalidate.IsEmpty())
-    Repaint(&rtInvalidate);
+    RepaintRect(rtInvalidate);
 }
 
 void CFWL_ComboList::ClientToOuter(FX_FLOAT& fx, FX_FLOAT& fy) {
@@ -236,7 +236,7 @@
       CFX_RectF rtInvalidate;
       rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width,
                        m_pProperties->m_rtWidget.height);
-      Repaint(&rtInvalidate);
+      RepaintRect(rtInvalidate);
       break;
     }
     default:
diff --git a/xfa/fwl/cfwl_datetimeedit.cpp b/xfa/fwl/cfwl_datetimeedit.cpp
index 869f08a..f1ddbb1 100644
--- a/xfa/fwl/cfwl_datetimeedit.cpp
+++ b/xfa/fwl/cfwl_datetimeedit.cpp
@@ -53,7 +53,7 @@
       CFX_RectF rtInvalidate = pDateTime->GetWidgetRect();
       pDateTime->ShowMonthCalendar(false);
       rtInvalidate.Offset(-rtInvalidate.left, -rtInvalidate.top);
-      pDateTime->Repaint(&rtInvalidate);
+      pDateTime->RepaintRect(rtInvalidate);
     }
   }
   CFWL_Edit::OnProcessMessage(pMessage);
diff --git a/xfa/fwl/cfwl_datetimepicker.cpp b/xfa/fwl/cfwl_datetimepicker.cpp
index 8bc17f3..fe7b903 100644
--- a/xfa/fwl/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/cfwl_datetimepicker.cpp
@@ -77,7 +77,7 @@
     m_pProperties->m_pThemeProvider = GetAvailableTheme();
 
   m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider);
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>(
       GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
   if (!pFWidth)
@@ -172,7 +172,7 @@
     return;
 
   m_pEdit->SetText(wsText);
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 
   CFWL_Event ev(CFWL_Event::Type::EditChanged);
   DispatchEvent(&ev);
@@ -327,7 +327,7 @@
   FormatDateString(m_iYear, m_iMonth, m_iDay, wsText);
   m_pEdit->SetText(wsText);
   m_pEdit->Update();
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 
   CFWL_EventSelectChanged ev(this);
   ev.iYear = m_iYear;
@@ -393,7 +393,7 @@
   CFX_RectF rtCal = m_pMonthCal->GetWidgetRect();
   rtInvalidate.Union(rtCal);
   rtInvalidate.Inflate(2, 2);
-  Repaint(&rtInvalidate);
+  RepaintRect(rtInvalidate);
 }
 
 FWL_WidgetHit CFWL_DateTimePicker::DisForm_HitTest(FX_FLOAT fx,
@@ -427,7 +427,7 @@
     m_pProperties->m_pThemeProvider = GetAvailableTheme();
 
   m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider);
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   m_pEdit->SetWidgetRect(m_rtClient);
   ResetEditAlignment();
   m_pEdit->Update();
@@ -543,15 +543,15 @@
 
   if (bSet) {
     m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused);
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
   } else {
     m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused);
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
   }
   if (pMsg->m_pSrcTarget == m_pMonthCal.get() && IsMonthCalendarVisible()) {
     ShowMonthCalendar(false);
   }
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_DateTimePicker::OnLButtonDown(CFWL_MessageMouse* pMsg) {
@@ -570,7 +570,7 @@
     ShowMonthCalendar(true);
 
   m_bLBtnDown = true;
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_DateTimePicker::OnLButtonUp(CFWL_MessageMouse* pMsg) {
@@ -582,20 +582,20 @@
     m_iBtnState = CFWL_PartState_Hovered;
   else
     m_iBtnState = CFWL_PartState_Normal;
-  Repaint(&m_rtBtn);
+  RepaintRect(m_rtBtn);
 }
 
 void CFWL_DateTimePicker::OnMouseMove(CFWL_MessageMouse* pMsg) {
   if (!m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy))
     m_iBtnState = CFWL_PartState_Normal;
-  Repaint(&m_rtBtn);
+  RepaintRect(m_rtBtn);
 }
 
 void CFWL_DateTimePicker::OnMouseLeave(CFWL_MessageMouse* pMsg) {
   if (!pMsg)
     return;
   m_iBtnState = CFWL_PartState_Normal;
-  Repaint(&m_rtBtn);
+  RepaintRect(m_rtBtn);
 }
 
 void CFWL_DateTimePicker::DisForm_OnFocusChanged(CFWL_Message* pMsg,
@@ -621,5 +621,5 @@
     }
   }
   rtInvalidate.Inflate(2, 2);
-  Repaint(&rtInvalidate);
+  RepaintRect(rtInvalidate);
 }
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index 3213039..913f08d 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -429,7 +429,7 @@
   if (bRepaintContent || bRepaintScroll) {
     if (bRepaintContent)
       rtInvalid.Union(m_rtEngine);
-    Repaint(&rtInvalid);
+    RepaintRect(rtInvalid);
   }
 }
 
@@ -437,21 +437,16 @@
   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask)
     UpdateVAlignment();
 
-  CFX_RectF rtTemp;
-  GetClientRect(rtTemp);
-
   CFWL_EventTextChanged event(this);
   event.wsPrevText = ChangeInfo.wsPrevText;
   DispatchEvent(&event);
 
   LayoutScrollBar();
-  Repaint(&rtTemp);
+  RepaintRect(GetClientRect());
 }
 
 void CFWL_Edit::OnSelChanged() {
-  CFX_RectF rtTemp;
-  GetClientRect(rtTemp);
-  Repaint(&rtTemp);
+  RepaintRect(GetClientRect());
 }
 
 bool CFWL_Edit::OnPageLoad(int32_t nPageIndex) {
@@ -863,10 +858,8 @@
   CFX_RectF rtCaret;
   rtCaret.Set(rtFDE.left, rtFDE.top, rtFDE.width, rtFDE.height);
 
-  CFX_RectF rtClient;
-  GetClientRect(rtClient);
+  CFX_RectF rtClient = GetClientRect();
   rtCaret.Intersect(rtClient);
-
   if (rtCaret.left > rtClient.right()) {
     FX_FLOAT right = rtCaret.right();
     rtCaret.left = rtClient.right() - 1;
@@ -990,7 +983,7 @@
 }
 
 void CFWL_Edit::Layout() {
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   m_rtEngine = m_rtClient;
   FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>(
       GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
@@ -1162,7 +1155,7 @@
     m_pCaret->ShowCaret();
     if (!pRect->IsEmpty())
       m_pCaret->SetWidgetRect(*pRect);
-    Repaint(&m_rtEngine);
+    RepaintRect(m_rtEngine);
     return;
   }
 
@@ -1196,7 +1189,7 @@
 void CFWL_Edit::HideCaret(CFX_RectF* pRect) {
   if (m_pCaret) {
     m_pCaret->HideCaret();
-    Repaint(&m_rtEngine);
+    RepaintRect(m_rtEngine);
     return;
   }
 
@@ -1391,7 +1384,7 @@
   CFX_RectF rtInvalidate;
   rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width,
                    m_pProperties->m_rtWidget.height);
-  Repaint(&rtInvalidate);
+  RepaintRect(rtInvalidate);
 }
 
 void CFWL_Edit::OnLButtonDown(CFWL_MessageMouse* pMsg) {
@@ -1417,7 +1410,7 @@
     m_nSelStart = nIndex;
   }
   if (bRepaint)
-    Repaint(&m_rtEngine);
+    RepaintRect(m_rtEngine);
 }
 
 void CFWL_Edit::OnLButtonUp(CFWL_MessageMouse* pMsg) {
@@ -1439,7 +1432,7 @@
 
   m_EdtEngine.AddSelRange(nIndex, nCount);
   m_EdtEngine.SetCaretPos(nIndex + nCount - 1, false);
-  Repaint(&m_rtEngine);
+  RepaintRect(m_rtEngine);
 }
 
 void CFWL_Edit::OnMouseMove(CFWL_MessageMouse* pMsg) {
@@ -1639,6 +1632,6 @@
   CFX_RectF rect = GetWidgetRect();
   CFX_RectF rtInvalidate;
   rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2);
-  Repaint(&rtInvalidate);
+  RepaintRect(rtInvalidate);
   return true;
 }
diff --git a/xfa/fwl/cfwl_form.cpp b/xfa/fwl/cfwl_form.cpp
index 6249571..4d978a5 100644
--- a/xfa/fwl/cfwl_form.cpp
+++ b/xfa/fwl/cfwl_form.cpp
@@ -80,9 +80,10 @@
   return CFWL_Widget::IsInstance(wsClass);
 }
 
-void CFWL_Form::GetClientRect(CFX_RectF& rect) {
-  rect = m_pProperties->m_rtWidget;
+CFX_RectF CFWL_Form::GetClientRect() {
+  CFX_RectF rect = m_pProperties->m_rtWidget;
   rect.Offset(-rect.left, -rect.top);
+  return rect;
 }
 
 void CFWL_Form::Update() {
@@ -384,11 +385,11 @@
     return;
 
   m_bSetMaximize = true;
-  Repaint(&m_rtRelative);
+  RepaintRect(m_rtRelative);
 }
 
 void CFWL_Form::Layout() {
-  GetRelativeRect(m_rtRelative);
+  m_rtRelative = GetRelativeRect();
 
 #ifndef FWL_UseMacSystemBorder
   ResetSysBtn();
@@ -519,7 +520,7 @@
     return;
 
   pPressBtn->SetPressed();
-  Repaint(&pPressBtn->m_rtBtn);
+  RepaintRect(pPressBtn->m_rtBtn);
 }
 
 void CFWL_Form::OnLButtonUp(CFWL_MessageMouse* pMsg) {
@@ -535,7 +536,7 @@
     if (m_bMaximized) {
       SetWidgetRect(m_rtRestore);
       Update();
-      Repaint(nullptr);
+      Repaint();
     } else {
       SetWorkAreaRect();
       Update();
@@ -598,7 +599,7 @@
 #endif
 
   if (!rtInvalidate.IsEmpty())
-    Repaint(&rtInvalidate);
+    RepaintRect(rtInvalidate);
 }
 
 void CFWL_Form::OnMouseLeave(CFWL_MessageMouse* pMsg) {
@@ -607,7 +608,7 @@
     return;
 
   pHover->SetNormal();
-  Repaint(&pHover->m_rtBtn);
+  RepaintRect(pHover->m_rtBtn);
 }
 
 void CFWL_Form::OnLButtonDblClk(CFWL_MessageMouse* pMsg) {
diff --git a/xfa/fwl/cfwl_form.h b/xfa/fwl/cfwl_form.h
index 725e82b..e894784 100644
--- a/xfa/fwl/cfwl_form.h
+++ b/xfa/fwl/cfwl_form.h
@@ -43,7 +43,7 @@
   // CFWL_Widget
   FWL_Type GetClassID() const override;
   bool IsInstance(const CFX_WideStringC& wsClass) const override;
-  void GetClientRect(CFX_RectF& rect) override;
+  CFX_RectF GetClientRect() override;
   void Update() override;
   FWL_WidgetHit HitTest(FX_FLOAT fx, FX_FLOAT fy) override;
   void DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) override;
diff --git a/xfa/fwl/cfwl_listbox.cpp b/xfa/fwl/cfwl_listbox.cpp
index c126e5a..fafb61f 100644
--- a/xfa/fwl/cfwl_listbox.cpp
+++ b/xfa/fwl/cfwl_listbox.cpp
@@ -385,7 +385,7 @@
 
   m_pVertScrollBar->SetPos(fPosY);
   m_pVertScrollBar->SetTrackPos(fPosY);
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
   return true;
 }
 
@@ -554,7 +554,7 @@
   if (!m_pProperties->m_pThemeProvider)
     return fs;
 
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   m_rtConent = m_rtClient;
   CFX_RectF rtUIMargin;
   rtUIMargin.Set(0, 0, 0, 0);
@@ -841,7 +841,7 @@
   else
     m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused);
 
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_ListBox::OnLButtonDown(CFWL_MessageMouse* pMsg) {
@@ -883,7 +883,7 @@
   SetFocusItem(pItem);
   ScrollToVisible(pItem);
   SetGrab(true);
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_ListBox::OnLButtonUp(CFWL_MessageMouse* pMsg) {
@@ -945,7 +945,7 @@
   CFX_RectF rtInvalidate;
   rtInvalidate.Set(0, 0, m_pProperties->m_rtWidget.width,
                    m_pProperties->m_rtWidget.height);
-  Repaint(&rtInvalidate);
+  RepaintRect(rtInvalidate);
 }
 
 bool CFWL_ListBox::OnScroll(CFWL_ScrollBar* pScrollBar,
@@ -998,7 +998,7 @@
   if (iCurPos != fPos) {
     pScrollBar->SetPos(fPos);
     pScrollBar->SetTrackPos(fPos);
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
   }
   return true;
 }
diff --git a/xfa/fwl/cfwl_monthcalendar.cpp b/xfa/fwl/cfwl_monthcalendar.cpp
index 94d1985..c93ee04 100644
--- a/xfa/fwl/cfwl_monthcalendar.cpp
+++ b/xfa/fwl/cfwl_monthcalendar.cpp
@@ -601,7 +601,7 @@
 }
 
 void CFWL_MonthCalendar::Layout() {
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
 
   m_rtHead.Set(
       m_rtClient.left + MONTHCAL_HEADER_BTN_HMARGIN, m_rtClient.top,
@@ -934,15 +934,15 @@
   if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
     m_iLBtnPartStates = CFWL_PartState_Pressed;
     PrevMonth();
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
   } else if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
     m_iRBtnPartStates |= CFWL_PartState_Pressed;
     NextMonth();
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
   } else if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) {
     if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == 0) {
       JumpToToday();
-      Repaint(&m_rtClient);
+      RepaintRect(m_rtClient);
     }
   } else {
     CFWL_DateTimePicker* pIPicker = static_cast<CFWL_DateTimePicker*>(m_pOuter);
@@ -957,12 +957,12 @@
 
   if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
     m_iLBtnPartStates = 0;
-    Repaint(&m_rtLBtn);
+    RepaintRect(m_rtLBtn);
     return;
   }
   if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
     m_iRBtnPartStates = 0;
-    Repaint(&m_rtRBtn);
+    RepaintRect(m_rtRBtn);
     return;
   }
   if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy))
@@ -998,12 +998,12 @@
 void CFWL_MonthCalendar::DisForm_OnLButtonUp(CFWL_MessageMouse* pMsg) {
   if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
     m_iLBtnPartStates = 0;
-    Repaint(&(m_rtLBtn));
+    RepaintRect(m_rtLBtn);
     return;
   }
   if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
     m_iRBtnPartStates = 0;
-    Repaint(&(m_rtRBtn));
+    RepaintRect(m_rtRBtn);
     return;
   }
   if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy))
@@ -1060,7 +1060,7 @@
     m_iHovered = -1;
   }
   if (bRepaint && !rtInvalidate.IsEmpty())
-    Repaint(&rtInvalidate);
+    RepaintRect(rtInvalidate);
 }
 
 void CFWL_MonthCalendar::OnMouseLeave(CFWL_MessageMouse* pMsg) {
@@ -1072,7 +1072,7 @@
   GetDayRect(m_iHovered, rtInvalidate);
   m_iHovered = -1;
   if (!rtInvalidate.IsEmpty())
-    Repaint(&rtInvalidate);
+    RepaintRect(rtInvalidate);
 }
 
 CFWL_MonthCalendar::DATEINFO::DATEINFO(int32_t day,
diff --git a/xfa/fwl/cfwl_picturebox.cpp b/xfa/fwl/cfwl_picturebox.cpp
index b62aac9..9c1f033 100644
--- a/xfa/fwl/cfwl_picturebox.cpp
+++ b/xfa/fwl/cfwl_picturebox.cpp
@@ -29,7 +29,7 @@
   if (!m_pProperties->m_pThemeProvider)
     m_pProperties->m_pThemeProvider = GetAvailableTheme();
 
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
 }
 
 void CFWL_PictureBox::DrawWidget(CFX_Graphics* pGraphics,
diff --git a/xfa/fwl/cfwl_pushbutton.cpp b/xfa/fwl/cfwl_pushbutton.cpp
index 4e5ab8b..a1566bd 100644
--- a/xfa/fwl/cfwl_pushbutton.cpp
+++ b/xfa/fwl/cfwl_pushbutton.cpp
@@ -50,7 +50,7 @@
     m_pProperties->m_pThemeProvider = GetAvailableTheme();
 
   UpdateTextOutStyles();
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   m_rtCaption = m_rtClient;
   FX_FLOAT* fcaption =
       static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::Margin));
@@ -208,7 +208,7 @@
   else
     m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
 
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_PushButton::OnLButtonDown(CFWL_MessageMouse* pMsg) {
@@ -218,7 +218,7 @@
   m_bBtnDown = true;
   m_pProperties->m_dwStates |= FWL_STATE_PSB_Hovered;
   m_pProperties->m_dwStates |= FWL_STATE_PSB_Pressed;
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_PushButton::OnLButtonUp(CFWL_MessageMouse* pMsg) {
@@ -234,7 +234,7 @@
     CFWL_Event wmClick(CFWL_Event::Type::Click, this);
     DispatchEvent(&wmClick);
   }
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_PushButton::OnMouseMove(CFWL_MessageMouse* pMsg) {
@@ -268,14 +268,14 @@
     }
   }
   if (bRepaint)
-    Repaint(&m_rtClient);
+    RepaintRect(m_rtClient);
 }
 
 void CFWL_PushButton::OnMouseLeave(CFWL_MessageMouse* pMsg) {
   m_bBtnDown = false;
   m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Hovered;
   m_pProperties->m_dwStates &= ~FWL_STATE_PSB_Pressed;
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_PushButton::OnKeyDown(CFWL_MessageKey* pMsg) {
diff --git a/xfa/fwl/cfwl_scrollbar.cpp b/xfa/fwl/cfwl_scrollbar.cpp
index d6124c6..a8e4447 100644
--- a/xfa/fwl/cfwl_scrollbar.cpp
+++ b/xfa/fwl/cfwl_scrollbar.cpp
@@ -157,7 +157,7 @@
   part.m_pWidget = this;
   m_fMinThumb = *static_cast<FX_FLOAT*>(
       pTheme->GetCapacity(&part, CFWL_WidgetCapacity::Size));
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   CalcButtonLen();
   CalcMinButtonRect(m_rtMinBtn);
   CalcMaxButtonRect(m_rtMaxBtn);
@@ -433,7 +433,7 @@
     return;
 
   iState = CFWL_PartState_Pressed;
-  Repaint(&rtItem);
+  RepaintRect(rtItem);
 }
 
 void CFWL_ScrollBar::DoMouseUp(int32_t iItem,
@@ -447,7 +447,7 @@
     return;
 
   iState = iNewState;
-  Repaint(&rtItem);
+  RepaintRect(rtItem);
   OnScroll(CFWL_EventScroll::Code::EndScroll, m_fTrackPos);
 }
 
@@ -463,7 +463,7 @@
       return;
 
     iState = iNewState;
-    Repaint(&rtItem);
+    RepaintRect(rtItem);
   } else if ((2 == iItem) && (m_iThumbButtonState == CFWL_PartState_Pressed)) {
     FX_FLOAT fPos = GetTrackPointPos(fx, fy);
     m_fTrackPos = fPos;
@@ -478,7 +478,7 @@
     return;
 
   iState = CFWL_PartState_Normal;
-  Repaint(&rtItem);
+  RepaintRect(rtItem);
 }
 
 void CFWL_ScrollBar::DoMouseHover(int32_t iItem,
@@ -488,7 +488,7 @@
     return;
 
   iState = CFWL_PartState_Hovered;
-  Repaint(&rtItem);
+  RepaintRect(rtItem);
 }
 
 CFWL_ScrollBar::Timer::Timer(CFWL_ScrollBar* pToolTip) : CFWL_Timer(pToolTip) {}
diff --git a/xfa/fwl/cfwl_spinbutton.cpp b/xfa/fwl/cfwl_spinbutton.cpp
index 1c6662e..bda168f 100644
--- a/xfa/fwl/cfwl_spinbutton.cpp
+++ b/xfa/fwl/cfwl_spinbutton.cpp
@@ -50,7 +50,7 @@
   if (IsLocked())
     return;
 
-  GetClientRect(m_rtClient);
+  m_rtClient = GetClientRect();
   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXE_SPB_Vert) {
     m_rtUpButton.Set(m_rtClient.top, m_rtClient.left, m_rtClient.width,
                      m_rtClient.height / 2);
@@ -69,12 +69,8 @@
     return FWL_WidgetHit::Client;
   if (HasBorder() && (m_rtClient.Contains(fx, fy)))
     return FWL_WidgetHit::Border;
-  if (HasEdge()) {
-    CFX_RectF rtEdge;
-    GetEdgeRect(rtEdge);
-    if (rtEdge.Contains(fx, fy))
-      return FWL_WidgetHit::Left;
-  }
+  if (HasEdge() && GetEdgeRect().Contains(fx, fy))
+    return FWL_WidgetHit::Left;
   if (m_rtUpButton.Contains(fx, fy))
     return FWL_WidgetHit::UpButton;
   if (m_rtDnButton.Contains(fx, fy))
@@ -199,7 +195,7 @@
   else
     m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused);
 
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_SpinButton::OnLButtonDown(CFWL_MessageMouse* pMsg) {
@@ -225,7 +221,7 @@
   CFWL_Event wmPosChanged(CFWL_Event::Type::Click, this);
   DispatchEvent(&wmPosChanged);
 
-  Repaint(bUpPress ? &m_rtUpButton : &m_rtDnButton);
+  RepaintRect(bUpPress ? m_rtUpButton : m_rtDnButton);
   m_pTimerInfo = m_Timer.StartTimer(kElapseTime, true);
 }
 
@@ -252,7 +248,7 @@
     rtInvalidate = m_rtDnButton;
   }
   if (bRepaint)
-    Repaint(&rtInvalidate);
+    RepaintRect(rtInvalidate);
 }
 
 void CFWL_SpinButton::OnMouseMove(CFWL_MessageMouse* pMsg) {
@@ -316,7 +312,7 @@
     }
   }
   if (bRepaint)
-    Repaint(&rtInvlidate);
+    RepaintRect(rtInvlidate);
 }
 
 void CFWL_SpinButton::OnMouseLeave(CFWL_MessageMouse* pMsg) {
@@ -327,7 +323,7 @@
   if (m_dwDnState != CFWL_PartState_Normal && IsDownButtonEnabled())
     m_dwDnState = CFWL_PartState_Normal;
 
-  Repaint(&m_rtClient);
+  RepaintRect(m_rtClient);
 }
 
 void CFWL_SpinButton::OnKeyDown(CFWL_MessageKey* pMsg) {
@@ -346,7 +342,7 @@
   CFWL_Event wmPosChanged(CFWL_Event::Type::Click, this);
   DispatchEvent(&wmPosChanged);
 
-  Repaint(bUpEnable ? &m_rtUpButton : &m_rtDnButton);
+  RepaintRect(bUpEnable ? m_rtUpButton : m_rtDnButton);
 }
 
 CFWL_SpinButton::Timer::Timer(CFWL_SpinButton* pToolTip)
diff --git a/xfa/fwl/cfwl_widget.cpp b/xfa/fwl/cfwl_widget.cpp
index 4da5764..071e0de 100644
--- a/xfa/fwl/cfwl_widget.cpp
+++ b/xfa/fwl/cfwl_widget.cpp
@@ -92,12 +92,13 @@
   m_pWidgetMgr->SetWidgetRect_Native(this, rect);
 }
 
-void CFWL_Widget::GetClientRect(CFX_RectF& rect) {
-  GetEdgeRect(rect);
+CFX_RectF CFWL_Widget::GetClientRect() {
+  CFX_RectF rect = GetEdgeRect();
   if (HasEdge()) {
     FX_FLOAT fEdge = GetEdgeWidth();
     rect.Deflate(fEdge, fEdge);
   }
+  return rect;
 }
 
 void CFWL_Widget::SetParent(CFWL_Widget* pParent) {
@@ -162,22 +163,12 @@
 }
 
 FWL_WidgetHit CFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) {
-  CFX_RectF rtClient;
-  GetClientRect(rtClient);
-  if (rtClient.Contains(fx, fy))
+  if (GetClientRect().Contains(fx, fy))
     return FWL_WidgetHit::Client;
-  if (HasEdge()) {
-    CFX_RectF rtEdge;
-    GetEdgeRect(rtEdge);
-    if (rtEdge.Contains(fx, fy))
-      return FWL_WidgetHit::Edge;
-  }
-  if (HasBorder()) {
-    CFX_RectF rtRelative;
-    GetRelativeRect(rtRelative);
-    if (rtRelative.Contains(fx, fy))
-      return FWL_WidgetHit::Border;
-  }
+  if (HasEdge() && GetEdgeRect().Contains(fx, fy))
+    return FWL_WidgetHit::Edge;
+  if (HasBorder() && GetRelativeRect().Contains(fx, fy))
+    return FWL_WidgetHit::Border;
   return FWL_WidgetHit::Unknown;
 }
 
@@ -317,14 +308,15 @@
   return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Offscreen);
 }
 
-void CFWL_Widget::GetEdgeRect(CFX_RectF& rtEdge) {
-  rtEdge = m_pProperties->m_rtWidget;
+CFX_RectF CFWL_Widget::GetEdgeRect() {
+  CFX_RectF rtEdge = m_pProperties->m_rtWidget;
   rtEdge.left = rtEdge.top = 0;
   if (HasBorder()) {
     FX_FLOAT fCX = GetBorderSize(true);
     FX_FLOAT fCY = GetBorderSize(false);
     rtEdge.Deflate(fCX, fCY);
   }
+  return rtEdge;
 }
 
 FX_FLOAT CFWL_Widget::GetBorderSize(bool bCX) {
@@ -358,9 +350,11 @@
   return 0;
 }
 
-void CFWL_Widget::GetRelativeRect(CFX_RectF& rect) {
-  rect = m_pProperties->m_rtWidget;
-  rect.left = rect.top = 0;
+CFX_RectF CFWL_Widget::GetRelativeRect() {
+  CFX_RectF rect = m_pProperties->m_rtWidget;
+  rect.left = 0;
+  rect.top = 0;
+  return rect;
 }
 
 void* CFWL_Widget::GetThemeCapacity(CFWL_WidgetCapacity dwCapacity) {
@@ -602,30 +596,29 @@
   pNoteDriver->SendEvent(pEvent);
 }
 
-void CFWL_Widget::Repaint(const CFX_RectF* pRect) {
-  if (pRect) {
-    m_pWidgetMgr->RepaintWidget(this, pRect);
-    return;
-  }
+void CFWL_Widget::Repaint() {
   CFX_RectF rect;
   rect = m_pProperties->m_rtWidget;
-  rect.left = rect.top = 0;
-  m_pWidgetMgr->RepaintWidget(this, &rect);
+  rect.left = 0;
+  rect.top = 0;
+  RepaintRect(rect);
+}
+
+void CFWL_Widget::RepaintRect(const CFX_RectF& pRect) {
+  m_pWidgetMgr->RepaintWidget(this, pRect);
 }
 
 void CFWL_Widget::DrawBackground(CFX_Graphics* pGraphics,
                                  CFWL_Part iPartBk,
                                  IFWL_ThemeProvider* pTheme,
                                  const CFX_Matrix* pMatrix) {
-  CFX_RectF rtRelative;
-  GetRelativeRect(rtRelative);
   CFWL_ThemeBackground param;
   param.m_pWidget = this;
   param.m_iPart = iPartBk;
   param.m_pGraphics = pGraphics;
   if (pMatrix)
     param.m_matrix.Concat(*pMatrix, true);
-  param.m_rtPart = rtRelative;
+  param.m_rtPart = GetRelativeRect();
   pTheme->DrawBackground(&param);
 }
 
@@ -633,15 +626,13 @@
                              CFWL_Part iPartBorder,
                              IFWL_ThemeProvider* pTheme,
                              const CFX_Matrix* pMatrix) {
-  CFX_RectF rtRelative;
-  GetRelativeRect(rtRelative);
   CFWL_ThemeBackground param;
   param.m_pWidget = this;
   param.m_iPart = iPartBorder;
   param.m_pGraphics = pGraphics;
   if (pMatrix)
     param.m_matrix.Concat(*pMatrix, true);
-  param.m_rtPart = rtRelative;
+  param.m_rtPart = GetRelativeRect();
   pTheme->DrawBackground(&param);
 }
 
@@ -649,15 +640,13 @@
                            CFWL_Part iPartEdge,
                            IFWL_ThemeProvider* pTheme,
                            const CFX_Matrix* pMatrix) {
-  CFX_RectF rtEdge;
-  GetEdgeRect(rtEdge);
   CFWL_ThemeBackground param;
   param.m_pWidget = this;
   param.m_iPart = iPartEdge;
   param.m_pGraphics = pGraphics;
   if (pMatrix)
     param.m_matrix.Concat(*pMatrix, true);
-  param.m_rtPart = rtEdge;
+  param.m_rtPart = GetEdgeRect();
   pTheme->DrawBackground(&param);
 }
 
diff --git a/xfa/fwl/cfwl_widget.h b/xfa/fwl/cfwl_widget.h
index 53839a7..64fc526 100644
--- a/xfa/fwl/cfwl_widget.h
+++ b/xfa/fwl/cfwl_widget.h
@@ -53,7 +53,7 @@
   virtual bool IsInstance(const CFX_WideStringC& wsClass) const;
   virtual CFX_RectF GetAutosizedWidgetRect();
   virtual CFX_RectF GetWidgetRect();
-  virtual void GetClientRect(CFX_RectF& rect);
+  virtual CFX_RectF GetClientRect();
   virtual void ModifyStylesEx(uint32_t dwStylesExAdded,
                               uint32_t dwStylesExRemoved);
   virtual void SetStates(uint32_t dwStates);
@@ -109,7 +109,8 @@
   void SetLayoutItem(void* pItem) { m_pLayoutItem = pItem; }
 
   void SetFocus(bool bFocus);
-  void Repaint(const CFX_RectF* pRect);
+  void RepaintRect(const CFX_RectF& pRect);
+  void Repaint();
 
  protected:
   CFWL_Widget(const CFWL_App* app,
@@ -121,10 +122,10 @@
   bool IsLocked() const { return m_iLock > 0; }
   bool HasBorder() const;
   bool HasEdge() const;
-  void GetEdgeRect(CFX_RectF& rtEdge);
+  CFX_RectF GetEdgeRect();
   FX_FLOAT GetBorderSize(bool bCX);
   FX_FLOAT GetEdgeWidth();
-  void GetRelativeRect(CFX_RectF& rect);
+  CFX_RectF GetRelativeRect();
   void* GetThemeCapacity(CFWL_WidgetCapacity dwCapacity);
   IFWL_ThemeProvider* GetAvailableTheme();
   CFX_SizeF CalcTextSize(const CFX_WideString& wsText,
diff --git a/xfa/fwl/cfwl_widgetmgr.cpp b/xfa/fwl/cfwl_widgetmgr.cpp
index 825de0e..f01c02b 100644
--- a/xfa/fwl/cfwl_widgetmgr.cpp
+++ b/xfa/fwl/cfwl_widgetmgr.cpp
@@ -148,18 +148,18 @@
 }
 
 void CFWL_WidgetMgr::RepaintWidget(CFWL_Widget* pWidget,
-                                   const CFX_RectF* pRect) {
+                                   const CFX_RectF& rect) {
   if (!m_pAdapter)
     return;
 
   CFWL_Widget* pNative = pWidget;
-  CFX_RectF rect(*pRect);
+  CFX_RectF transformedRect = rect;
   if (IsFormDisabled()) {
     CFWL_Widget* pOuter = pWidget->GetOuter();
     while (pOuter) {
       CFX_RectF rtTemp = pNative->GetWidgetRect();
-      rect.left += rtTemp.left;
-      rect.top += rtTemp.top;
+      transformedRect.left += rtTemp.left;
+      transformedRect.top += rtTemp.top;
       pNative = pOuter;
       pOuter = pOuter->GetOuter();
     }
@@ -168,10 +168,10 @@
     if (!pNative)
       return;
 
-    pWidget->TransformTo(pNative, rect.left, rect.top);
+    pWidget->TransformTo(pNative, transformedRect.left, transformedRect.top);
   }
   AddRedrawCounts(pNative);
-  m_pAdapter->RepaintWidget(pNative, &rect);
+  m_pAdapter->RepaintWidget(pNative);
 }
 
 void CFWL_WidgetMgr::InsertWidget(CFWL_Widget* pParent, CFWL_Widget* pChild) {
@@ -497,11 +497,8 @@
   }
 #endif  // _FX_OS_ == _FX_MACOSX_
 
-  if (!IsFormDisabled()) {
-    CFX_RectF rtClient;
-    pWidget->GetClientRect(rtClient);
-    clipBounds.Intersect(rtClient);
-  }
+  if (!IsFormDisabled())
+    clipBounds.Intersect(pWidget->GetClientRect());
   if (!clipBounds.IsEmpty())
     DrawChild(pWidget, clipBounds, pTemp, pMatrix);
 
diff --git a/xfa/fwl/cfwl_widgetmgr.h b/xfa/fwl/cfwl_widgetmgr.h
index 10825b9..4d39d36 100644
--- a/xfa/fwl/cfwl_widgetmgr.h
+++ b/xfa/fwl/cfwl_widgetmgr.h
@@ -42,7 +42,7 @@
   CFWL_Widget* GetFirstChildWidget(CFWL_Widget* pWidget) const;
   CFWL_Widget* GetSystemFormWidget(CFWL_Widget* pWidget) const;
 
-  void RepaintWidget(CFWL_Widget* pWidget, const CFX_RectF* pRect);
+  void RepaintWidget(CFWL_Widget* pWidget, const CFX_RectF& pRect);
 
   void InsertWidget(CFWL_Widget* pParent, CFWL_Widget* pChild);
   void RemoveWidget(CFWL_Widget* pWidget);
diff --git a/xfa/fxfa/app/xfa_fwladapter.cpp b/xfa/fxfa/app/xfa_fwladapter.cpp
index 63a4a92..3f3dc16 100644
--- a/xfa/fxfa/app/xfa_fwladapter.cpp
+++ b/xfa/fxfa/app/xfa_fwladapter.cpp
@@ -13,8 +13,7 @@
 
 CXFA_FWLAdapterWidgetMgr::~CXFA_FWLAdapterWidgetMgr() {}
 
-void CXFA_FWLAdapterWidgetMgr::RepaintWidget(CFWL_Widget* pWidget,
-                                             const CFX_RectF* pRect) {
+void CXFA_FWLAdapterWidgetMgr::RepaintWidget(CFWL_Widget* pWidget) {
   if (!pWidget)
     return;
 
diff --git a/xfa/fxfa/app/xfa_fwladapter.h b/xfa/fxfa/app/xfa_fwladapter.h
index 11181dd..406709b 100644
--- a/xfa/fxfa/app/xfa_fwladapter.h
+++ b/xfa/fxfa/app/xfa_fwladapter.h
@@ -18,7 +18,7 @@
   CXFA_FWLAdapterWidgetMgr();
   ~CXFA_FWLAdapterWidgetMgr();
 
-  void RepaintWidget(CFWL_Widget* pWidget, const CFX_RectF* pRect);
+  void RepaintWidget(CFWL_Widget* pWidget);
   bool GetPopupPos(CFWL_Widget* pWidget,
                    FX_FLOAT fMinHeight,
                    FX_FLOAT fMaxHeight,