Begin encapsulation of CFWL_ThemePart classes

-- Add .cpp file for CFWL_ThemeBackground constructors.
-- Avoid multiplication against identity matrix.
-- Remove redundant assignments of CFWL_PartState_Normal

Bug: pdfium:1680
Change-Id: Ia584e605440397d60161c3c15153e95ca7359b83
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/80130
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/BUILD.gn b/xfa/fwl/BUILD.gn
index 511a29c..0b02bf2 100644
--- a/xfa/fwl/BUILD.gn
+++ b/xfa/fwl/BUILD.gn
@@ -65,6 +65,7 @@
     "cfwl_pushbutton.h",
     "cfwl_scrollbar.cpp",
     "cfwl_scrollbar.h",
+    "cfwl_themebackground.cpp",
     "cfwl_themebackground.h",
     "cfwl_themepart.cpp",
     "cfwl_themepart.h",
diff --git a/xfa/fwl/cfwl_barcode.cpp b/xfa/fwl/cfwl_barcode.cpp
index 44ce6a0..09065e9 100644
--- a/xfa/fwl/cfwl_barcode.cpp
+++ b/xfa/fwl/cfwl_barcode.cpp
@@ -156,8 +156,7 @@
     return;
 
   IFWL_ThemeProvider* pTheme = GetThemeProvider();
-  CFWL_ThemePart part;
-  part.m_pWidget = this;
+  CFWL_ThemePart part(this);
   if (RetainPtr<CFGAS_GEFont> pFont = pTheme->GetFont(part)) {
     if (CFX_Font* pCXFont = pFont->GetDevFont())
       m_pBarcodeEngine->SetFont(pCXFont);
diff --git a/xfa/fwl/cfwl_caret.cpp b/xfa/fwl/cfwl_caret.cpp
index db82ac8..2788bfa 100644
--- a/xfa/fwl/cfwl_caret.cpp
+++ b/xfa/fwl/cfwl_caret.cpp
@@ -62,13 +62,11 @@
   if (!(m_Properties.m_dwStates & kStateHighlight))
     return;
 
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
-  param.m_pGraphics = pGraphics;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_PartRect = CFX_RectF(0, 0, GetWidgetRect().Size());
   param.m_iPart = CFWL_Part::Background;
   param.m_dwStates = CFWL_PartState_HightLight;
-  param.m_matrix.Concat(mtMatrix);
+  param.m_matrix = mtMatrix;
   GetThemeProvider()->DrawBackground(param);
 }
 
diff --git a/xfa/fwl/cfwl_checkbox.cpp b/xfa/fwl/cfwl_checkbox.cpp
index 01160b6..3d7c95d 100644
--- a/xfa/fwl/cfwl_checkbox.cpp
+++ b/xfa/fwl/cfwl_checkbox.cpp
@@ -59,12 +59,10 @@
     DrawBorder(pGraphics, CFWL_Part::Border, matrix);
 
   int32_t dwStates = GetPartStates();
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = CFWL_Part::Background;
   param.m_dwStates = dwStates;
-  param.m_pGraphics = pGraphics;
-  param.m_matrix.Concat(matrix);
+  param.m_matrix = matrix;
   param.m_PartRect = m_ClientRect;
   if (m_Properties.m_dwStates & FWL_WGTSTATE_Focused)
     param.m_pRtData = &m_FocusRect;
@@ -76,12 +74,10 @@
   param.m_PartRect = m_BoxRect;
   pTheme->DrawBackground(param);
 
-  CFWL_ThemeText textParam;
-  textParam.m_pWidget = this;
+  CFWL_ThemeText textParam(this, pGraphics);
   textParam.m_iPart = CFWL_Part::Caption;
   textParam.m_dwStates = dwStates;
-  textParam.m_pGraphics = pGraphics;
-  textParam.m_matrix.Concat(matrix);
+  textParam.m_matrix = matrix;
   textParam.m_PartRect = m_CaptionRect;
   textParam.m_wsText = L"Check box";
   textParam.m_dwTTOStyles = m_TTOStyles;
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index e9a81ef..c2977c4 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -106,11 +106,9 @@
   pGraphics->SaveGraphState();
   pGraphics->ConcatMatrix(matrix);
   if (!m_BtnRect.IsEmpty(0.1f)) {
-    CFWL_ThemeBackground param;
-    param.m_pWidget = this;
+    CFWL_ThemeBackground param(this, pGraphics);
     param.m_iPart = CFWL_Part::DropDownButton;
     param.m_dwStates = m_iBtnState;
-    param.m_pGraphics = pGraphics;
     param.m_PartRect = m_BtnRect;
     GetThemeProvider()->DrawBackground(param);
   }
@@ -282,8 +280,7 @@
                   fBtn - borderWidth, m_ClientRect.height - 2 * borderWidth);
   }
 
-  CFWL_ThemePart part;
-  part.m_pWidget = this;
+  CFWL_ThemePart part(this);
   CFX_RectF pUIMargin = theme->GetUIMargin(part);
   m_ContentRect.Deflate(pUIMargin.left, pUIMargin.top, pUIMargin.width,
                         pUIMargin.height);
diff --git a/xfa/fwl/cfwl_datetimepicker.cpp b/xfa/fwl/cfwl_datetimepicker.cpp
index ec3af04..9108539 100644
--- a/xfa/fwl/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/cfwl_datetimepicker.cpp
@@ -181,13 +181,11 @@
 
 void CFWL_DateTimePicker::DrawDropDownButton(CFGAS_GEGraphics* pGraphics,
                                              const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = CFWL_Part::DropDownButton;
   param.m_dwStates = m_iBtnState;
-  param.m_pGraphics = pGraphics;
   param.m_PartRect = m_BtnRect;
-  param.m_matrix.Concat(mtMatrix);
+  param.m_matrix = mtMatrix;
   GetThemeProvider()->DrawBackground(param);
 }
 
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index 76eb9ba..d14e515 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -352,10 +352,8 @@
     }
     pGraphics->SetClipRect(rtClip);
 
-    CFWL_ThemeBackground param;
-    param.m_pGraphics = pGraphics;
+    CFWL_ThemeBackground param(this, pGraphics);
     param.m_matrix = mtMatrix;
-    param.m_pWidget = this;
     param.m_iPart = CFWL_Part::Background;
     param.m_pPath = &path;
     GetThemeProvider()->DrawBackground(param);
@@ -377,10 +375,8 @@
                    CFX_PointF(fLeft, m_ClientRect.bottom()));
     }
 
-    CFWL_ThemeBackground param;
-    param.m_pGraphics = pGraphics;
+    CFWL_ThemeBackground param(this, pGraphics);
     param.m_matrix = mtMatrix;
-    param.m_pWidget = this;
     param.m_iPart = CFWL_Part::CombTextLine;
     param.m_pPath = &path;
     GetThemeProvider()->DrawBackground(param);
@@ -480,8 +476,7 @@
   m_pEditEngine->LimitHorizontalScroll(!auto_hscroll);
 
   IFWL_ThemeProvider* theme = GetThemeProvider();
-  CFWL_ThemePart part;
-  part.m_pWidget = this;
+  CFWL_ThemePart part(this);
   m_fFontSize = theme->GetFontSize(part);
 
   RetainPtr<CFGAS_GEFont> pFont = theme->GetFont(part);
@@ -552,16 +547,11 @@
 }
 
 void CFWL_Edit::UpdateVAlignment() {
-  float fSpaceAbove = 0.0f;
-  float fSpaceBelow = 0.0f;
   IFWL_ThemeProvider* theme = GetThemeProvider();
-  CFWL_ThemePart part;
-  part.m_pWidget = this;
-
-  CFX_SizeF pSpace = theme->GetSpaceAboveBelow(part);
-  fSpaceAbove = pSpace.width >= 0.1f ? pSpace.width : 0.0f;
-  fSpaceBelow = pSpace.height >= 0.1f ? pSpace.height : 0.0f;
-
+  CFWL_ThemePart part(this);
+  const CFX_SizeF pSpace = theme->GetSpaceAboveBelow(part);
+  const float fSpaceAbove = pSpace.width >= 0.1f ? pSpace.width : 0.0f;
+  const float fSpaceBelow = pSpace.height >= 0.1f ? pSpace.height : 0.0f;
   float fOffsetY = 0.0f;
   CFX_RectF contents_bounds = m_pEditEngine->GetContentsBoundingBox();
   if (m_Properties.m_dwStyleExes & FWL_STYLEEXT_EDT_VCenter) {
@@ -691,14 +681,13 @@
 
   IFWL_ThemeProvider* theme = GetThemeProvider();
   float fWidth = theme->GetScrollBarWidth();
-  CFWL_ThemePart part;
   if (!GetOuter()) {
-    part.m_pWidget = this;
+    CFWL_ThemePart part(this);
     CFX_RectF pUIMargin = theme->GetUIMargin(part);
     m_EngineRect.Deflate(pUIMargin.left, pUIMargin.top, pUIMargin.width,
                          pUIMargin.height);
   } else if (GetOuter()->GetClassID() == FWL_Type::DateTimePicker) {
-    part.m_pWidget = GetOuter();
+    CFWL_ThemePart part(GetOuter());
     CFX_RectF pUIMargin = theme->GetUIMargin(part);
     m_EngineRect.Deflate(pUIMargin.left, pUIMargin.top, pUIMargin.width,
                          pUIMargin.height);
diff --git a/xfa/fwl/cfwl_listbox.cpp b/xfa/fwl/cfwl_listbox.cpp
index a0d925e..e93babd 100644
--- a/xfa/fwl/cfwl_listbox.cpp
+++ b/xfa/fwl/cfwl_listbox.cpp
@@ -332,12 +332,9 @@
   if (!pGraphics)
     return;
 
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = CFWL_Part::Background;
-  param.m_dwStates = 0;
-  param.m_pGraphics = pGraphics;
-  param.m_matrix.Concat(mtMatrix);
+  param.m_matrix = mtMatrix;
   param.m_PartRect = m_ClientRect;
   if (IsShowScrollBar(false) && IsShowScrollBar(true))
     param.m_pRtData = &m_StaticRect;
@@ -396,12 +393,10 @@
   }
 
   CFX_RectF rtFocus(rtItem);  // Must outlive |bg_param|.
-  CFWL_ThemeBackground bg_param;
-  bg_param.m_pWidget = this;
+  CFWL_ThemeBackground bg_param(this, pGraphics);
   bg_param.m_iPart = CFWL_Part::ListItem;
   bg_param.m_dwStates = dwPartStates;
-  bg_param.m_pGraphics = pGraphics;
-  bg_param.m_matrix.Concat(mtMatrix);
+  bg_param.m_matrix = mtMatrix;
   bg_param.m_PartRect = rtItem;
   bg_param.m_bMaximize = true;
   bg_param.m_pRtData = &rtFocus;
@@ -424,12 +419,10 @@
   CFX_RectF rtText(rtItem);
   rtText.Deflate(kItemTextMargin, kItemTextMargin);
 
-  CFWL_ThemeText textParam;
-  textParam.m_pWidget = this;
+  CFWL_ThemeText textParam(this, pGraphics);
   textParam.m_iPart = CFWL_Part::ListItem;
   textParam.m_dwStates = dwPartStates;
-  textParam.m_pGraphics = pGraphics;
-  textParam.m_matrix.Concat(mtMatrix);
+  textParam.m_matrix = mtMatrix;
   textParam.m_PartRect = rtText;
   textParam.m_wsText = std::move(wsText);
   textParam.m_dwTTOStyles = m_TTOStyles;
@@ -443,8 +436,7 @@
   m_ContentRect = m_ClientRect;
   CFX_RectF rtUIMargin;
   if (!GetOuter()) {
-    CFWL_ThemePart part;
-    part.m_pWidget = this;
+    CFWL_ThemePart part(this);
     CFX_RectF pUIMargin = GetThemeProvider()->GetUIMargin(part);
     m_ContentRect.Deflate(pUIMargin.left, pUIMargin.top, pUIMargin.width,
                           pUIMargin.height);
@@ -580,8 +572,7 @@
 }
 
 float CFWL_ListBox::CalcItemHeight() {
-  CFWL_ThemePart part;
-  part.m_pWidget = this;
+  CFWL_ThemePart part(this);
   return GetThemeProvider()->GetFontSize(part) + 2 * kItemTextMargin;
 }
 
diff --git a/xfa/fwl/cfwl_monthcalendar.cpp b/xfa/fwl/cfwl_monthcalendar.cpp
index 3e69428..d3ccb1a 100644
--- a/xfa/fwl/cfwl_monthcalendar.cpp
+++ b/xfa/fwl/cfwl_monthcalendar.cpp
@@ -150,88 +150,70 @@
 
 void CFWL_MonthCalendar::DrawBackground(CFGAS_GEGraphics* pGraphics,
                                         const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground params;
-  params.m_pWidget = this;
+  CFWL_ThemeBackground params(this, pGraphics);
   params.m_iPart = CFWL_Part::Background;
-  params.m_pGraphics = pGraphics;
-  params.m_dwStates = CFWL_PartState_Normal;
   params.m_PartRect = m_ClientRect;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
   GetThemeProvider()->DrawBackground(params);
 }
 
 void CFWL_MonthCalendar::DrawHeadBK(CFGAS_GEGraphics* pGraphics,
                                     const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground params;
-  params.m_pWidget = this;
+  CFWL_ThemeBackground params(this, pGraphics);
   params.m_iPart = CFWL_Part::Header;
-  params.m_pGraphics = pGraphics;
-  params.m_dwStates = CFWL_PartState_Normal;
   params.m_PartRect = m_HeadRect;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
   GetThemeProvider()->DrawBackground(params);
 }
 
 void CFWL_MonthCalendar::DrawLButton(CFGAS_GEGraphics* pGraphics,
                                      const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground params;
-  params.m_pWidget = this;
+  CFWL_ThemeBackground params(this, pGraphics);
   params.m_iPart = CFWL_Part::LBtn;
-  params.m_pGraphics = pGraphics;
   params.m_dwStates = m_iLBtnPartStates;
   params.m_PartRect = m_LBtnRect;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
   GetThemeProvider()->DrawBackground(params);
 }
 
 void CFWL_MonthCalendar::DrawRButton(CFGAS_GEGraphics* pGraphics,
                                      const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground params;
-  params.m_pWidget = this;
+  CFWL_ThemeBackground params(this, pGraphics);
   params.m_iPart = CFWL_Part::RBtn;
-  params.m_pGraphics = pGraphics;
   params.m_dwStates = m_iRBtnPartStates;
   params.m_PartRect = m_RBtnRect;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
   GetThemeProvider()->DrawBackground(params);
 }
 
 void CFWL_MonthCalendar::DrawCaption(CFGAS_GEGraphics* pGraphics,
                                      const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeText textParam;
-  textParam.m_pWidget = this;
+  CFWL_ThemeText textParam(this, pGraphics);
   textParam.m_iPart = CFWL_Part::Caption;
-  textParam.m_dwStates = CFWL_PartState_Normal;
-  textParam.m_pGraphics = pGraphics;
   textParam.m_wsText = GetHeadText(m_iCurYear, m_iCurMonth);
   m_HeadSize = CalcTextSize(textParam.m_wsText, false);
   CalcHeadSize();
   textParam.m_PartRect = m_HeadTextRect;
   textParam.m_dwTTOStyles.single_line_ = true;
   textParam.m_iTTOAlign = FDE_TextAlignment::kCenter;
-  textParam.m_matrix.Concat(mtMatrix);
+  textParam.m_matrix = mtMatrix;
   GetThemeProvider()->DrawText(textParam);
 }
 
 void CFWL_MonthCalendar::DrawSeparator(CFGAS_GEGraphics* pGraphics,
                                        const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground params;
-  params.m_pWidget = this;
+  CFWL_ThemeBackground params(this, pGraphics);
   params.m_iPart = CFWL_Part::HSeparator;
-  params.m_pGraphics = pGraphics;
-  params.m_dwStates = CFWL_PartState_Normal;
   params.m_PartRect = m_HSepRect;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
   GetThemeProvider()->DrawBackground(params);
 }
 
 void CFWL_MonthCalendar::DrawDatesInBK(CFGAS_GEGraphics* pGraphics,
                                        const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground params;
-  params.m_pWidget = this;
+  CFWL_ThemeBackground params(this, pGraphics);
   params.m_iPart = CFWL_Part::DateInBK;
-  params.m_pGraphics = pGraphics;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
 
   IFWL_ThemeProvider* pTheme = GetThemeProvider();
   int32_t iCount = pdfium::CollectionSize<int32_t>(m_DateArray);
@@ -256,14 +238,11 @@
 
 void CFWL_MonthCalendar::DrawWeek(CFGAS_GEGraphics* pGraphics,
                                   const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeText params;
-  params.m_pWidget = this;
+  CFWL_ThemeText params(this, pGraphics);
   params.m_iPart = CFWL_Part::Week;
-  params.m_pGraphics = pGraphics;
-  params.m_dwStates = CFWL_PartState_Normal;
   params.m_iTTOAlign = FDE_TextAlignment::kCenter;
   params.m_dwTTOStyles.single_line_ = true;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
 
   IFWL_ThemeProvider* pTheme = GetThemeProvider();
   CFX_RectF rtDayOfWeek;
@@ -280,30 +259,24 @@
 
 void CFWL_MonthCalendar::DrawToday(CFGAS_GEGraphics* pGraphics,
                                    const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeText params;
-  params.m_pWidget = this;
+  CFWL_ThemeText params(this, pGraphics);
   params.m_iPart = CFWL_Part::Today;
-  params.m_pGraphics = pGraphics;
-  params.m_dwStates = CFWL_PartState_Normal;
   params.m_iTTOAlign = FDE_TextAlignment::kCenterLeft;
   params.m_wsText = GetTodayText(m_iYear, m_iMonth, m_iDay);
   m_TodaySize = CalcTextSize(params.m_wsText, false);
   CalcTodaySize();
   params.m_PartRect = m_TodayRect;
   params.m_dwTTOStyles.single_line_ = true;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
   GetThemeProvider()->DrawText(params);
 }
 
 void CFWL_MonthCalendar::DrawDatesIn(CFGAS_GEGraphics* pGraphics,
                                      const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeText params;
-  params.m_pWidget = this;
+  CFWL_ThemeText params(this, pGraphics);
   params.m_iPart = CFWL_Part::DatesIn;
-  params.m_pGraphics = pGraphics;
-  params.m_dwStates = CFWL_PartState_Normal;
   params.m_iTTOAlign = FDE_TextAlignment::kCenter;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
 
   IFWL_ThemeProvider* pTheme = GetThemeProvider();
   int32_t iCount = pdfium::CollectionSize<int32_t>(m_DateArray);
@@ -322,13 +295,10 @@
 
 void CFWL_MonthCalendar::DrawDatesOut(CFGAS_GEGraphics* pGraphics,
                                       const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeText params;
-  params.m_pWidget = this;
+  CFWL_ThemeText params(this, pGraphics);
   params.m_iPart = CFWL_Part::DatesOut;
-  params.m_pGraphics = pGraphics;
-  params.m_dwStates = CFWL_PartState_Normal;
   params.m_iTTOAlign = FDE_TextAlignment::kCenter;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
   GetThemeProvider()->DrawText(params);
 }
 
@@ -344,13 +314,10 @@
   if (!pDate)
     return;
 
-  CFWL_ThemeBackground params;
-  params.m_pWidget = this;
+  CFWL_ThemeBackground params(this, pGraphics);
   params.m_iPart = CFWL_Part::DateInCircle;
-  params.m_pGraphics = pGraphics;
   params.m_PartRect = pDate->rect;
-  params.m_dwStates = CFWL_PartState_Normal;
-  params.m_matrix.Concat(mtMatrix);
+  params.m_matrix = mtMatrix;
   GetThemeProvider()->DrawBackground(params);
 }
 
diff --git a/xfa/fwl/cfwl_pushbutton.cpp b/xfa/fwl/cfwl_pushbutton.cpp
index 7e57c58..0b502f3 100644
--- a/xfa/fwl/cfwl_pushbutton.cpp
+++ b/xfa/fwl/cfwl_pushbutton.cpp
@@ -55,12 +55,10 @@
 
 void CFWL_PushButton::DrawBkground(CFGAS_GEGraphics* pGraphics,
                                    const CFX_Matrix& matrix) {
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = CFWL_Part::Background;
   param.m_dwStates = GetPartStates();
-  param.m_pGraphics = pGraphics;
-  param.m_matrix.Concat(matrix);
+  param.m_matrix = matrix;
   param.m_PartRect = m_ClientRect;
   if (m_Properties.m_dwStates & FWL_WGTSTATE_Focused)
     param.m_pRtData = &m_CaptionRect;
diff --git a/xfa/fwl/cfwl_scrollbar.cpp b/xfa/fwl/cfwl_scrollbar.cpp
index fd8ad7a..7b61342 100644
--- a/xfa/fwl/cfwl_scrollbar.cpp
+++ b/xfa/fwl/cfwl_scrollbar.cpp
@@ -76,14 +76,12 @@
 void CFWL_ScrollBar::DrawTrack(CFGAS_GEGraphics* pGraphics,
                                bool bLower,
                                const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = bLower ? CFWL_Part::LowerTrack : CFWL_Part::UpperTrack;
   param.m_dwStates = (m_Properties.m_dwStates & FWL_WGTSTATE_Disabled)
                          ? CFWL_PartState_Disabled
                          : (bLower ? m_iMinTrackState : m_iMaxTrackState);
-  param.m_pGraphics = pGraphics;
-  param.m_matrix.Concat(mtMatrix);
+  param.m_matrix = mtMatrix;
   param.m_PartRect = bLower ? m_MinTrackRect : m_MaxTrackRect;
   GetThemeProvider()->DrawBackground(param);
 }
@@ -91,14 +89,12 @@
 void CFWL_ScrollBar::DrawArrowBtn(CFGAS_GEGraphics* pGraphics,
                                   bool bMinBtn,
                                   const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = bMinBtn ? CFWL_Part::ForeArrow : CFWL_Part::BackArrow;
   param.m_dwStates = (m_Properties.m_dwStates & FWL_WGTSTATE_Disabled)
                          ? CFWL_PartState_Disabled
                          : (bMinBtn ? m_iMinButtonState : m_iMaxButtonState);
-  param.m_pGraphics = pGraphics;
-  param.m_matrix.Concat(mtMatrix);
+  param.m_matrix = mtMatrix;
   param.m_PartRect = bMinBtn ? m_MinBtnRect : m_MaxBtnRect;
   if (param.m_PartRect.height > 0 && param.m_PartRect.width > 0)
     GetThemeProvider()->DrawBackground(param);
@@ -106,14 +102,12 @@
 
 void CFWL_ScrollBar::DrawThumb(CFGAS_GEGraphics* pGraphics,
                                const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = CFWL_Part::Thumb;
   param.m_dwStates = (m_Properties.m_dwStates & FWL_WGTSTATE_Disabled)
                          ? CFWL_PartState_Disabled
                          : m_iThumbButtonState;
-  param.m_pGraphics = pGraphics;
-  param.m_matrix.Concat(mtMatrix);
+  param.m_matrix = mtMatrix;
   param.m_PartRect = m_ThumbRect;
   GetThemeProvider()->DrawBackground(param);
 }
diff --git a/xfa/fwl/cfwl_themebackground.cpp b/xfa/fwl/cfwl_themebackground.cpp
new file mode 100644
index 0000000..54d5cb9
--- /dev/null
+++ b/xfa/fwl/cfwl_themebackground.cpp
@@ -0,0 +1,13 @@
+// Copyright 2021 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "xfa/fwl/cfwl_themebackground.h"
+
+CFWL_ThemeBackground::CFWL_ThemeBackground(CFWL_Widget* pWidget,
+                                           CFGAS_GEGraphics* pGraphics)
+    : CFWL_ThemePart(pWidget), m_pGraphics(pGraphics) {}
+
+CFWL_ThemeBackground::~CFWL_ThemeBackground() = default;
diff --git a/xfa/fwl/cfwl_themebackground.h b/xfa/fwl/cfwl_themebackground.h
index 8751e3c..56c2972 100644
--- a/xfa/fwl/cfwl_themebackground.h
+++ b/xfa/fwl/cfwl_themebackground.h
@@ -15,15 +15,15 @@
 
 class CFWL_ThemeBackground final : public CFWL_ThemePart {
  public:
-  CFWL_ThemeBackground();
+  CFWL_ThemeBackground(CFWL_Widget* pWidget, CFGAS_GEGraphics* pGraphics);
   ~CFWL_ThemeBackground();
 
-  UnownedPtr<CFGAS_GEGraphics> m_pGraphics;
+  CFGAS_GEGraphics* GetGraphics() const { return m_pGraphics.Get(); }
+
   UnownedPtr<const CFGAS_GEPath> m_pPath;
+
+ private:
+  UnownedPtr<CFGAS_GEGraphics> const m_pGraphics;
 };
 
-inline CFWL_ThemeBackground::CFWL_ThemeBackground() = default;
-
-inline CFWL_ThemeBackground::~CFWL_ThemeBackground() = default;
-
 #endif  // XFA_FWL_CFWL_THEMEBACKGROUND_H_
diff --git a/xfa/fwl/cfwl_themepart.cpp b/xfa/fwl/cfwl_themepart.cpp
index f488f2f..f7d5974 100644
--- a/xfa/fwl/cfwl_themepart.cpp
+++ b/xfa/fwl/cfwl_themepart.cpp
@@ -6,6 +6,6 @@
 
 #include "xfa/fwl/cfwl_themepart.h"
 
-CFWL_ThemePart::CFWL_ThemePart() = default;
+CFWL_ThemePart::CFWL_ThemePart(CFWL_Widget* pWidget) : m_pWidget(pWidget) {}
 
 CFWL_ThemePart::~CFWL_ThemePart() = default;
diff --git a/xfa/fwl/cfwl_themepart.h b/xfa/fwl/cfwl_themepart.h
index 73d10a9..76abbca 100644
--- a/xfa/fwl/cfwl_themepart.h
+++ b/xfa/fwl/cfwl_themepart.h
@@ -79,17 +79,21 @@
 
 class CFWL_ThemePart {
  public:
-  CFWL_ThemePart();
+  CFWL_ThemePart(CFWL_Widget* pWidget);
   ~CFWL_ThemePart();
 
+  CFWL_Widget* GetWidget() const { return m_pWidget.Get(); }
+
   CFX_Matrix m_matrix;
   CFX_RectF m_PartRect;
-  UnownedPtr<CFWL_Widget> m_pWidget;
   UnownedPtr<const CFX_RectF> m_pRtData;
   uint32_t m_dwStates = CFWL_PartState_Normal;
   CFWL_Part m_iPart = CFWL_Part::None;
   bool m_bMaximize = false;
   bool m_bStaticBackground = false;
+
+ private:
+  UnownedPtr<CFWL_Widget> const m_pWidget;
 };
 
 #endif  // XFA_FWL_CFWL_THEMEPART_H_
diff --git a/xfa/fwl/cfwl_themetext.cpp b/xfa/fwl/cfwl_themetext.cpp
index 2cd07d0..7349aa8 100644
--- a/xfa/fwl/cfwl_themetext.cpp
+++ b/xfa/fwl/cfwl_themetext.cpp
@@ -6,6 +6,8 @@
 
 #include "xfa/fwl/cfwl_themetext.h"
 
-CFWL_ThemeText::CFWL_ThemeText() = default;
+CFWL_ThemeText::CFWL_ThemeText(CFWL_Widget* pWidget,
+                               CFGAS_GEGraphics* pGraphics)
+    : CFWL_ThemePart(pWidget), m_pGraphics(pGraphics) {}
 
 CFWL_ThemeText::~CFWL_ThemeText() = default;
diff --git a/xfa/fwl/cfwl_themetext.h b/xfa/fwl/cfwl_themetext.h
index ae924ed..bd47392 100644
--- a/xfa/fwl/cfwl_themetext.h
+++ b/xfa/fwl/cfwl_themetext.h
@@ -16,13 +16,17 @@
 
 class CFWL_ThemeText final : public CFWL_ThemePart {
  public:
-  CFWL_ThemeText();
+  CFWL_ThemeText(CFWL_Widget* pWidget, CFGAS_GEGraphics* pGraphics);
   ~CFWL_ThemeText();
 
+  CFGAS_GEGraphics* GetGraphics() const { return m_pGraphics.Get(); }
+
   FDE_TextAlignment m_iTTOAlign = FDE_TextAlignment::kTopLeft;
   FDE_TextStyle m_dwTTOStyles;
-  UnownedPtr<CFGAS_GEGraphics> m_pGraphics;
   WideString m_wsText;
+
+ private:
+  UnownedPtr<CFGAS_GEGraphics> const m_pGraphics;
 };
 
 #endif  // XFA_FWL_CFWL_THEMETEXT_H_
diff --git a/xfa/fwl/cfwl_widget.cpp b/xfa/fwl/cfwl_widget.cpp
index ff783ae..15c1e47 100644
--- a/xfa/fwl/cfwl_widget.cpp
+++ b/xfa/fwl/cfwl_widget.cpp
@@ -225,8 +225,7 @@
 }
 
 CFX_SizeF CFWL_Widget::CalcTextSize(const WideString& wsText, bool bMultiLine) {
-  CFWL_ThemeText calPart;
-  calPart.m_pWidget = this;
+  CFWL_ThemeText calPart(this, nullptr);
   calPart.m_wsText = wsText;
   if (bMultiLine)
     calPart.m_dwTTOStyles.line_wrap_ = true;
@@ -244,8 +243,7 @@
                                const FDE_TextStyle& dwTTOStyles,
                                FDE_TextAlignment iTTOAlign,
                                CFX_RectF* pRect) {
-  CFWL_ThemeText calPart;
-  calPart.m_pWidget = this;
+  CFWL_ThemeText calPart(this, nullptr);
   calPart.m_wsText = wsText;
   calPart.m_dwTTOStyles = dwTTOStyles;
   calPart.m_iTTOAlign = iTTOAlign;
@@ -283,10 +281,8 @@
 void CFWL_Widget::DrawBackground(CFGAS_GEGraphics* pGraphics,
                                  CFWL_Part iPartBk,
                                  const CFX_Matrix& mtMatrix) {
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = iPartBk;
-  param.m_pGraphics = pGraphics;
   param.m_matrix = mtMatrix;
   param.m_PartRect = GetRelativeRect();
   GetThemeProvider()->DrawBackground(param);
@@ -295,10 +291,8 @@
 void CFWL_Widget::DrawBorder(CFGAS_GEGraphics* pGraphics,
                              CFWL_Part iPartBorder,
                              const CFX_Matrix& matrix) {
-  CFWL_ThemeBackground param;
-  param.m_pWidget = this;
+  CFWL_ThemeBackground param(this, pGraphics);
   param.m_iPart = iPartBorder;
-  param.m_pGraphics = pGraphics;
   param.m_matrix = matrix;
   param.m_PartRect = GetRelativeRect();
   GetThemeProvider()->DrawBackground(param);
diff --git a/xfa/fwl/theme/cfwl_barcodetp.cpp b/xfa/fwl/theme/cfwl_barcodetp.cpp
index b6d147d..ffe87d4 100644
--- a/xfa/fwl/theme/cfwl_barcodetp.cpp
+++ b/xfa/fwl/theme/cfwl_barcodetp.cpp
@@ -17,11 +17,10 @@
 void CFWL_BarcodeTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
     case CFWL_Part::Border:
-      DrawBorder(pParams.m_pGraphics.Get(), pParams.m_PartRect,
-                 pParams.m_matrix);
+      DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
       break;
     case CFWL_Part::Background:
-      FillBackground(pParams.m_pGraphics.Get(), pParams.m_PartRect,
+      FillBackground(pParams.GetGraphics(), pParams.m_PartRect,
                      pParams.m_matrix);
       break;
     default:
diff --git a/xfa/fwl/theme/cfwl_carettp.cpp b/xfa/fwl/theme/cfwl_carettp.cpp
index 30663c9..91ce1f8 100644
--- a/xfa/fwl/theme/cfwl_carettp.cpp
+++ b/xfa/fwl/theme/cfwl_carettp.cpp
@@ -22,8 +22,8 @@
       if (!(pParams.m_dwStates & CFWL_PartState_HightLight))
         return;
 
-      DrawCaretBK(pParams.m_pGraphics.Get(), pParams.m_dwStates,
-                  pParams.m_PartRect, pParams.m_matrix);
+      DrawCaretBK(pParams.GetGraphics(), pParams.m_dwStates, pParams.m_PartRect,
+                  pParams.m_matrix);
       break;
     }
     default:
diff --git a/xfa/fwl/theme/cfwl_checkboxtp.cpp b/xfa/fwl/theme/cfwl_checkboxtp.cpp
index 10dd265..7183ba6 100644
--- a/xfa/fwl/theme/cfwl_checkboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_checkboxtp.cpp
@@ -210,7 +210,7 @@
 
   if ((pParams.m_dwStates & CFWL_PartState_Checked) ||
       (pParams.m_dwStates & CFWL_PartState_Neutral)) {
-    DrawCheckSign(pParams.m_pWidget, pParams.m_pGraphics.Get(),
+    DrawCheckSign(pParams.GetWidget(), pParams.GetGraphics(),
                   pParams.m_PartRect, pParams.m_dwStates, pParams.m_matrix);
   }
 }
diff --git a/xfa/fwl/theme/cfwl_comboboxtp.cpp b/xfa/fwl/theme/cfwl_comboboxtp.cpp
index f7ef5b5..a143f13 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_comboboxtp.cpp
@@ -20,8 +20,7 @@
 void CFWL_ComboBoxTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
     case CFWL_Part::Border: {
-      DrawBorder(pParams.m_pGraphics.Get(), pParams.m_PartRect,
-                 pParams.m_matrix);
+      DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
       break;
     }
     case CFWL_Part::Background: {
@@ -39,11 +38,11 @@
         default:
           argb_color = 0xFFFFFFFF;
       }
-      pParams.m_pGraphics->SaveGraphState();
-      pParams.m_pGraphics->SetFillColor(CFGAS_GEColor(argb_color));
-      pParams.m_pGraphics->FillPath(
+      pParams.GetGraphics()->SaveGraphState();
+      pParams.GetGraphics()->SetFillColor(CFGAS_GEColor(argb_color));
+      pParams.GetGraphics()->FillPath(
           path, CFX_FillRenderOptions::FillType::kWinding, pParams.m_matrix);
-      pParams.m_pGraphics->RestoreGraphState();
+      pParams.GetGraphics()->RestoreGraphState();
       break;
     }
     case CFWL_Part::DropDownButton: {
@@ -79,6 +78,6 @@
     default:
       break;
   }
-  DrawArrowBtn(pParams.m_pGraphics.Get(), pParams.m_PartRect,
+  DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
                FWLTHEME_DIRECTION_Down, eState, pParams.m_matrix);
 }
diff --git a/xfa/fwl/theme/cfwl_datetimepickertp.cpp b/xfa/fwl/theme/cfwl_datetimepickertp.cpp
index a2bb19e..70d3db4 100644
--- a/xfa/fwl/theme/cfwl_datetimepickertp.cpp
+++ b/xfa/fwl/theme/cfwl_datetimepickertp.cpp
@@ -17,8 +17,7 @@
     const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
     case CFWL_Part::Border:
-      DrawBorder(pParams.m_pGraphics.Get(), pParams.m_PartRect,
-                 pParams.m_matrix);
+      DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
       break;
     case CFWL_Part::DropDownButton:
       DrawDropDownButton(pParams, pParams.m_matrix);
@@ -54,6 +53,6 @@
     default:
       break;
   }
-  DrawArrowBtn(pParams.m_pGraphics.Get(), pParams.m_PartRect,
+  DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
                FWLTHEME_DIRECTION_Down, eState, matrix);
 }
diff --git a/xfa/fwl/theme/cfwl_edittp.cpp b/xfa/fwl/theme/cfwl_edittp.cpp
index 36cff36..4f05d19 100644
--- a/xfa/fwl/theme/cfwl_edittp.cpp
+++ b/xfa/fwl/theme/cfwl_edittp.cpp
@@ -19,13 +19,12 @@
 void CFWL_EditTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
     case CFWL_Part::Border: {
-      DrawBorder(pParams.m_pGraphics.Get(), pParams.m_PartRect,
-                 pParams.m_matrix);
+      DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
       break;
     }
     case CFWL_Part::Background: {
       if (pParams.m_pPath) {
-        CFGAS_GEGraphics* pGraphics = pParams.m_pGraphics.Get();
+        CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
         pGraphics->SaveGraphState();
         pGraphics->SetFillColor(CFGAS_GEColor(FWLTHEME_COLOR_BKSelected));
         if (pParams.m_pPath) {
@@ -47,24 +46,24 @@
           else
             cr = CFGAS_GEColor(0xFFFFFFFF);
         }
-        pParams.m_pGraphics->SaveGraphState();
-        pParams.m_pGraphics->SetFillColor(cr);
-        pParams.m_pGraphics->FillPath(
+        pParams.GetGraphics()->SaveGraphState();
+        pParams.GetGraphics()->SetFillColor(cr);
+        pParams.GetGraphics()->FillPath(
             path, CFX_FillRenderOptions::FillType::kWinding, pParams.m_matrix);
-        pParams.m_pGraphics->RestoreGraphState();
+        pParams.GetGraphics()->RestoreGraphState();
       }
       break;
     }
     case CFWL_Part::CombTextLine: {
       CFWL_Widget::AdapterIface* pWidget =
-          pParams.m_pWidget->GetOutmost()->GetAdapterIface();
+          pParams.GetWidget()->GetOutmost()->GetAdapterIface();
       FX_ARGB cr = 0xFF000000;
       float fWidth = 1.0f;
       pWidget->GetBorderColorAndThickness(&cr, &fWidth);
-      pParams.m_pGraphics->SetStrokeColor(CFGAS_GEColor(cr));
-      pParams.m_pGraphics->SetLineWidth(fWidth);
+      pParams.GetGraphics()->SetStrokeColor(CFGAS_GEColor(cr));
+      pParams.GetGraphics()->SetLineWidth(fWidth);
       if (pParams.m_pPath)
-        pParams.m_pGraphics->StrokePath(*pParams.m_pPath, pParams.m_matrix);
+        pParams.GetGraphics()->StrokePath(*pParams.m_pPath, pParams.m_matrix);
       break;
     }
     default:
diff --git a/xfa/fwl/theme/cfwl_listboxtp.cpp b/xfa/fwl/theme/cfwl_listboxtp.cpp
index 4712cd7..41cf9d9 100644
--- a/xfa/fwl/theme/cfwl_listboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_listboxtp.cpp
@@ -20,21 +20,20 @@
 void CFWL_ListBoxTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
     case CFWL_Part::Border: {
-      DrawBorder(pParams.m_pGraphics.Get(), pParams.m_PartRect,
-                 pParams.m_matrix);
+      DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
       break;
     }
     case CFWL_Part::Background: {
-      FillSolidRect(pParams.m_pGraphics.Get(), ArgbEncode(255, 255, 255, 255),
+      FillSolidRect(pParams.GetGraphics(), ArgbEncode(255, 255, 255, 255),
                     pParams.m_PartRect, pParams.m_matrix);
       if (pParams.m_pRtData) {
-        FillSolidRect(pParams.m_pGraphics.Get(), FWLTHEME_COLOR_Background,
+        FillSolidRect(pParams.GetGraphics(), FWLTHEME_COLOR_Background,
                       *pParams.m_pRtData, pParams.m_matrix);
       }
       break;
     }
     case CFWL_Part::ListItem: {
-      DrawListBoxItem(pParams.m_pGraphics.Get(), pParams.m_dwStates,
+      DrawListBoxItem(pParams.GetGraphics(), pParams.m_dwStates,
                       pParams.m_PartRect, pParams.m_pRtData, pParams.m_matrix);
       break;
     }
@@ -45,7 +44,7 @@
       } else if (pParams.m_dwStates == CFWL_PartState_Normal) {
         color = 0xFF0000FF;
       }
-      FillSolidRect(pParams.m_pGraphics.Get(), color, pParams.m_PartRect,
+      FillSolidRect(pParams.GetGraphics(), color, pParams.m_PartRect,
                     pParams.m_matrix);
       break;
     }
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.cpp b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
index b889be0..c282da6 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.cpp
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
@@ -34,8 +34,7 @@
 void CFWL_MonthCalendarTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
     case CFWL_Part::Border: {
-      DrawBorder(pParams.m_pGraphics.Get(), pParams.m_PartRect,
-                 pParams.m_matrix);
+      DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
       break;
     }
     case CFWL_Part::Background: {
@@ -48,13 +47,13 @@
     }
     case CFWL_Part::LBtn: {
       FWLTHEME_STATE eState = GetState(pParams.m_dwStates);
-      DrawArrowBtn(pParams.m_pGraphics.Get(), pParams.m_PartRect,
+      DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
                    FWLTHEME_DIRECTION_Left, eState, pParams.m_matrix);
       break;
     }
     case CFWL_Part::RBtn: {
       FWLTHEME_STATE eState = GetState(pParams.m_dwStates);
-      DrawArrowBtn(pParams.m_pGraphics.Get(), pParams.m_PartRect,
+      DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
                    FWLTHEME_DIRECTION_Right, eState, pParams.m_matrix);
       break;
     }
@@ -103,11 +102,11 @@
   CFGAS_GEPath path;
   CFX_RectF rtTotal(pParams.m_PartRect);
   path.AddRectangle(rtTotal.left, rtTotal.top, rtTotal.width, rtTotal.height);
-  pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetFillColor(CFGAS_GEColor(kBackgroundColor));
-  pParams.m_pGraphics->FillPath(path, CFX_FillRenderOptions::FillType::kWinding,
-                                matrix);
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->SaveGraphState();
+  pParams.GetGraphics()->SetFillColor(CFGAS_GEColor(kBackgroundColor));
+  pParams.GetGraphics()->FillPath(
+      path, CFX_FillRenderOptions::FillType::kWinding, matrix);
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 void CFWL_MonthCalendarTP::DrawHeadBk(const CFWL_ThemeBackground& pParams,
@@ -115,11 +114,11 @@
   CFGAS_GEPath path;
   CFX_RectF rtHead = pParams.m_PartRect;
   path.AddRectangle(rtHead.left, rtHead.top, rtHead.width, rtHead.height);
-  pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetFillColor(CFGAS_GEColor(kBackgroundColor));
-  pParams.m_pGraphics->FillPath(path, CFX_FillRenderOptions::FillType::kWinding,
-                                matrix);
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->SaveGraphState();
+  pParams.GetGraphics()->SetFillColor(CFGAS_GEColor(kBackgroundColor));
+  pParams.GetGraphics()->FillPath(
+      path, CFX_FillRenderOptions::FillType::kWinding, matrix);
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 void CFWL_MonthCalendarTP::DrawLButton(const CFWL_ThemeBackground& pParams,
@@ -127,19 +126,19 @@
   CFGAS_GEPath path;
   CFX_RectF rtLBtn = pParams.m_PartRect;
   path.AddRectangle(rtLBtn.left, rtLBtn.top, rtLBtn.width, rtLBtn.height);
-  pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(
+  pParams.GetGraphics()->SaveGraphState();
+  pParams.GetGraphics()->SetStrokeColor(
       CFGAS_GEColor(ArgbEncode(0xff, 205, 219, 243)));
-  pParams.m_pGraphics->StrokePath(path, matrix);
+  pParams.GetGraphics()->StrokePath(path, matrix);
   if (pParams.m_dwStates & CFWL_PartState_Pressed) {
-    pParams.m_pGraphics->SetFillColor(
+    pParams.GetGraphics()->SetFillColor(
         CFGAS_GEColor(ArgbEncode(0xff, 174, 198, 242)));
-    pParams.m_pGraphics->FillPath(
+    pParams.GetGraphics()->FillPath(
         path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   } else {
-    pParams.m_pGraphics->SetFillColor(
+    pParams.GetGraphics()->SetFillColor(
         CFGAS_GEColor(ArgbEncode(0xff, 227, 235, 249)));
-    pParams.m_pGraphics->FillPath(
+    pParams.GetGraphics()->FillPath(
         path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   }
 
@@ -151,10 +150,10 @@
   path.LineTo(CFX_PointF(rtLBtn.left + rtLBtn.Width() / 3 * 2,
                          rtLBtn.bottom() - rtLBtn.height / 4));
 
-  pParams.m_pGraphics->SetStrokeColor(
+  pParams.GetGraphics()->SetStrokeColor(
       CFGAS_GEColor(ArgbEncode(0xff, 50, 104, 205)));
-  pParams.m_pGraphics->StrokePath(path, matrix);
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->StrokePath(path, matrix);
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 void CFWL_MonthCalendarTP::DrawRButton(const CFWL_ThemeBackground& pParams,
@@ -162,19 +161,19 @@
   CFGAS_GEPath path;
   CFX_RectF rtRBtn = pParams.m_PartRect;
   path.AddRectangle(rtRBtn.left, rtRBtn.top, rtRBtn.width, rtRBtn.height);
-  pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(
+  pParams.GetGraphics()->SaveGraphState();
+  pParams.GetGraphics()->SetStrokeColor(
       CFGAS_GEColor(ArgbEncode(0xff, 205, 219, 243)));
-  pParams.m_pGraphics->StrokePath(path, matrix);
+  pParams.GetGraphics()->StrokePath(path, matrix);
   if (pParams.m_dwStates & CFWL_PartState_Pressed) {
-    pParams.m_pGraphics->SetFillColor(
+    pParams.GetGraphics()->SetFillColor(
         CFGAS_GEColor(ArgbEncode(0xff, 174, 198, 242)));
-    pParams.m_pGraphics->FillPath(
+    pParams.GetGraphics()->FillPath(
         path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   } else {
-    pParams.m_pGraphics->SetFillColor(
+    pParams.GetGraphics()->SetFillColor(
         CFGAS_GEColor(ArgbEncode(0xff, 227, 235, 249)));
-    pParams.m_pGraphics->FillPath(
+    pParams.GetGraphics()->FillPath(
         path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   }
 
@@ -186,10 +185,10 @@
   path.LineTo(CFX_PointF(rtRBtn.left + rtRBtn.Width() / 3,
                          rtRBtn.bottom() - rtRBtn.height / 4));
 
-  pParams.m_pGraphics->SetStrokeColor(
+  pParams.GetGraphics()->SetStrokeColor(
       CFGAS_GEColor(ArgbEncode(0xff, 50, 104, 205)));
-  pParams.m_pGraphics->StrokePath(path, matrix);
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->StrokePath(path, matrix);
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 void CFWL_MonthCalendarTP::DrawHSeparator(const CFWL_ThemeBackground& pParams,
@@ -198,10 +197,10 @@
   CFX_RectF rtHSep = pParams.m_PartRect;
   path.MoveTo(CFX_PointF(rtHSep.left, rtHSep.top + rtHSep.height / 2));
   path.LineTo(CFX_PointF(rtHSep.right(), rtHSep.top + rtHSep.height / 2));
-  pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(CFGAS_GEColor(kSeparatorColor));
-  pParams.m_pGraphics->StrokePath(path, matrix);
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->SaveGraphState();
+  pParams.GetGraphics()->SetStrokeColor(CFGAS_GEColor(kSeparatorColor));
+  pParams.GetGraphics()->StrokePath(path, matrix);
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 void CFWL_MonthCalendarTP::DrawWeekNumSep(const CFWL_ThemeBackground& pParams,
@@ -210,35 +209,35 @@
   CFX_RectF rtWeekSep = pParams.m_PartRect;
   path.MoveTo(rtWeekSep.TopLeft());
   path.LineTo(rtWeekSep.BottomLeft());
-  pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(CFGAS_GEColor(kSeparatorColor));
-  pParams.m_pGraphics->StrokePath(path, matrix);
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->SaveGraphState();
+  pParams.GetGraphics()->SetStrokeColor(CFGAS_GEColor(kSeparatorColor));
+  pParams.GetGraphics()->StrokePath(path, matrix);
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 void CFWL_MonthCalendarTP::DrawDatesInBK(const CFWL_ThemeBackground& pParams,
                                          const CFX_Matrix& matrix) {
-  pParams.m_pGraphics->SaveGraphState();
+  pParams.GetGraphics()->SaveGraphState();
   if (pParams.m_dwStates & CFWL_PartState_Selected) {
     CFGAS_GEPath path;
     CFX_RectF rtSelDay = pParams.m_PartRect;
     path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
                       rtSelDay.height);
-    pParams.m_pGraphics->SetFillColor(
+    pParams.GetGraphics()->SetFillColor(
         CFGAS_GEColor(kDatesSelectedBackgroundColor));
-    pParams.m_pGraphics->FillPath(
+    pParams.GetGraphics()->FillPath(
         path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   } else if (pParams.m_dwStates & CFWL_PartState_Hovered) {
     CFGAS_GEPath path;
     CFX_RectF rtSelDay = pParams.m_PartRect;
     path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
                       rtSelDay.height);
-    pParams.m_pGraphics->SetFillColor(
+    pParams.GetGraphics()->SetFillColor(
         CFGAS_GEColor(kDatesHoverBackgroundColor));
-    pParams.m_pGraphics->FillPath(
+    pParams.GetGraphics()->FillPath(
         path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   }
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 void CFWL_MonthCalendarTP::DrawDatesInCircle(
@@ -248,10 +247,10 @@
   CFX_RectF rtSelDay = pParams.m_PartRect;
   path.AddRectangle(rtSelDay.left, rtSelDay.top, rtSelDay.width,
                     rtSelDay.height);
-  pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(CFGAS_GEColor(kDatesCircleColor));
-  pParams.m_pGraphics->StrokePath(path, matrix);
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->SaveGraphState();
+  pParams.GetGraphics()->SetStrokeColor(CFGAS_GEColor(kDatesCircleColor));
+  pParams.GetGraphics()->StrokePath(path, matrix);
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 void CFWL_MonthCalendarTP::DrawTodayCircle(const CFWL_ThemeBackground& pParams,
@@ -260,10 +259,10 @@
   CFX_RectF rtTodayCircle = pParams.m_PartRect;
   path.AddRectangle(rtTodayCircle.left, rtTodayCircle.top, rtTodayCircle.width,
                     rtTodayCircle.height);
-  pParams.m_pGraphics->SaveGraphState();
-  pParams.m_pGraphics->SetStrokeColor(CFGAS_GEColor(kDatesCircleColor));
-  pParams.m_pGraphics->StrokePath(path, matrix);
-  pParams.m_pGraphics->RestoreGraphState();
+  pParams.GetGraphics()->SaveGraphState();
+  pParams.GetGraphics()->SetStrokeColor(CFGAS_GEColor(kDatesCircleColor));
+  pParams.GetGraphics()->StrokePath(path, matrix);
+  pParams.GetGraphics()->RestoreGraphState();
 }
 
 FWLTHEME_STATE CFWL_MonthCalendarTP::GetState(uint32_t dwFWLStates) {
diff --git a/xfa/fwl/theme/cfwl_pictureboxtp.cpp b/xfa/fwl/theme/cfwl_pictureboxtp.cpp
index 20d18cd..3b0368c 100644
--- a/xfa/fwl/theme/cfwl_pictureboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_pictureboxtp.cpp
@@ -17,8 +17,7 @@
 void CFWL_PictureBoxTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
     case CFWL_Part::Border:
-      DrawBorder(pParams.m_pGraphics.Get(), pParams.m_PartRect,
-                 pParams.m_matrix);
+      DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
       break;
     default:
       break;
diff --git a/xfa/fwl/theme/cfwl_pushbuttontp.cpp b/xfa/fwl/theme/cfwl_pushbuttontp.cpp
index 3e7b65e..b9cd345 100644
--- a/xfa/fwl/theme/cfwl_pushbuttontp.cpp
+++ b/xfa/fwl/theme/cfwl_pushbuttontp.cpp
@@ -24,8 +24,7 @@
 void CFWL_PushButtonTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
   switch (pParams.m_iPart) {
     case CFWL_Part::Border: {
-      DrawBorder(pParams.m_pGraphics.Get(), pParams.m_PartRect,
-                 pParams.m_matrix);
+      DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
       break;
     }
     case CFWL_Part::Background: {
@@ -52,7 +51,7 @@
       CFGAS_GEPath fillPath;
       fillPath.AddSubpath(strokePath);
 
-      CFGAS_GEGraphics* pGraphics = pParams.m_pGraphics.Get();
+      CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
       pGraphics->SaveGraphState();
 
       CFX_RectF rtInner(rect);
diff --git a/xfa/fwl/theme/cfwl_scrollbartp.cpp b/xfa/fwl/theme/cfwl_scrollbartp.cpp
index 164d37d..f526922 100644
--- a/xfa/fwl/theme/cfwl_scrollbartp.cpp
+++ b/xfa/fwl/theme/cfwl_scrollbartp.cpp
@@ -20,7 +20,7 @@
 CFWL_ScrollBarTP::~CFWL_ScrollBarTP() = default;
 
 void CFWL_ScrollBarTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
-  CFWL_Widget* pWidget = pParams.m_pWidget;
+  CFWL_Widget* pWidget = pParams.GetWidget();
   FWLTHEME_STATE eState = FWLTHEME_STATE_Normal;
   if (pParams.m_dwStates & CFWL_PartState_Hovered)
     eState = FWLTHEME_STATE_Hover;
@@ -29,7 +29,7 @@
   else if (pParams.m_dwStates & CFWL_PartState_Disabled)
     eState = FWLTHEME_STATE_Disable;
 
-  CFGAS_GEGraphics* pGraphics = pParams.m_pGraphics.Get();
+  CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
   bool bVert = !!pWidget->GetStylesEx();
   switch (pParams.m_iPart) {
     case CFWL_Part::ForeArrow: {
diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
index 7e763d1..e87fc3f 100644
--- a/xfa/fwl/theme/cfwl_widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -35,7 +35,7 @@
   if (iLen <= 0)
     return;
 
-  CFGAS_GEGraphics* pGraphics = pParams.m_pGraphics;
+  CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
   m_pTextOut->SetStyles(pParams.m_dwTTOStyles);
   m_pTextOut->SetAlignment(pParams.m_iTTOAlign);
 
diff --git a/xfa/fxfa/cxfa_fwltheme.cpp b/xfa/fxfa/cxfa_fwltheme.cpp
index ea73992..daaef0d 100644
--- a/xfa/fxfa/cxfa_fwltheme.cpp
+++ b/xfa/fxfa/cxfa_fwltheme.cpp
@@ -84,15 +84,15 @@
 }
 
 void CXFA_FWLTheme::DrawBackground(const CFWL_ThemeBackground& pParams) {
-  GetTheme(pParams.m_pWidget)->DrawBackground(pParams);
+  GetTheme(pParams.GetWidget())->DrawBackground(pParams);
 }
 
 void CXFA_FWLTheme::DrawText(const CFWL_ThemeText& pParams) {
   if (pParams.m_wsText.IsEmpty())
     return;
 
-  if (pParams.m_pWidget->GetClassID() == FWL_Type::MonthCalendar) {
-    CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.m_pWidget);
+  if (pParams.GetWidget()->GetClassID() == FWL_Type::MonthCalendar) {
+    CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.GetWidget());
     if (!pWidget)
       return;
 
@@ -110,7 +110,7 @@
     if (pParams.m_iPart == CFWL_Part::Caption)
       m_pTextOut->SetTextColor(ArgbEncode(0xff, 0, 153, 255));
 
-    CFGAS_GEGraphics* pGraphics = pParams.m_pGraphics;
+    CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
     CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice();
     CFX_Matrix mtPart = pParams.m_matrix;
     const CFX_Matrix* pMatrix = pGraphics->GetMatrix();
@@ -122,12 +122,12 @@
                               pParams.m_PartRect);
     return;
   }
-  CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.m_pWidget);
+  CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.GetWidget());
   if (!pWidget)
     return;
 
   CXFA_Node* pNode = pWidget->GetNode();
-  CFGAS_GEGraphics* pGraphics = pParams.m_pGraphics;
+  CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
   CFX_RenderDevice* pRenderDevice = pGraphics->GetRenderDevice();
   m_pTextOut->SetStyles(pParams.m_dwTTOStyles);
   m_pTextOut->SetAlignment(pParams.m_iTTOAlign);
@@ -145,7 +145,7 @@
 }
 
 CFX_RectF CXFA_FWLTheme::GetUIMargin(const CFWL_ThemePart& pThemePart) const {
-  CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.m_pWidget);
+  CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget());
   if (!pWidget)
     return CFX_RectF();
 
@@ -179,20 +179,20 @@
 }
 
 float CXFA_FWLTheme::GetFontSize(const CFWL_ThemePart& pThemePart) const {
-  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.m_pWidget))
+  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget()))
     return pWidget->GetNode()->GetFontSize();
   return FWLTHEME_CAPACITY_FontSize;
 }
 
 RetainPtr<CFGAS_GEFont> CXFA_FWLTheme::GetFont(
     const CFWL_ThemePart& pThemePart) const {
-  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.m_pWidget))
+  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget()))
     return pWidget->GetNode()->GetFGASFont(pWidget->GetDoc());
-  return GetTheme(pThemePart.m_pWidget)->GetFont();
+  return GetTheme(pThemePart.GetWidget())->GetFont();
 }
 
 float CXFA_FWLTheme::GetLineHeight(const CFWL_ThemePart& pThemePart) const {
-  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.m_pWidget))
+  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget()))
     return pWidget->GetNode()->GetLineHeight();
   return kLineHeight;
 }
@@ -203,7 +203,7 @@
 
 FX_COLORREF CXFA_FWLTheme::GetTextColor(
     const CFWL_ThemePart& pThemePart) const {
-  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.m_pWidget))
+  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget()))
     return pWidget->GetNode()->GetTextColor();
   return FWLTHEME_CAPACITY_TextColor;
 }
@@ -211,7 +211,7 @@
 CFX_SizeF CXFA_FWLTheme::GetSpaceAboveBelow(
     const CFWL_ThemePart& pThemePart) const {
   CFX_SizeF sizeAboveBelow;
-  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.m_pWidget)) {
+  if (CXFA_FFWidget* pWidget = GetOutmostFFWidget(pThemePart.GetWidget())) {
     CXFA_Para* para = pWidget->GetNode()->GetParaIfExists();
     if (para) {
       sizeAboveBelow.width = para->GetSpaceAbove();
@@ -226,11 +226,11 @@
   if (!m_pTextOut)
     return;
 
-  CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.m_pWidget);
+  CXFA_FFWidget* pWidget = GetOutmostFFWidget(pParams.GetWidget());
   if (!pWidget)
     return;
 
-  if (pParams.m_pWidget->GetClassID() == FWL_Type::MonthCalendar) {
+  if (pParams.GetWidget()->GetClassID() == FWL_Type::MonthCalendar) {
     m_pTextOut->SetFont(m_pCalendarFont);
     m_pTextOut->SetFontSize(FWLTHEME_CAPACITY_FontSize);
     m_pTextOut->SetTextColor(FWLTHEME_CAPACITY_TextColor);