diff --git a/xfa/fgas/graphics/cfgas_gegraphics.cpp b/xfa/fgas/graphics/cfgas_gegraphics.cpp
index 5c5d8a7..2b8e4b5 100644
--- a/xfa/fgas/graphics/cfgas_gegraphics.cpp
+++ b/xfa/fgas/graphics/cfgas_gegraphics.cpp
@@ -174,14 +174,13 @@
 
 void CFGAS_GEGraphics::FillPath(CFGAS_GEPath* path,
                                 CFX_FillRenderOptions::FillType fill_type,
-                                const CFX_Matrix* matrix) {
+                                const CFX_Matrix& matrix) {
   if (path)
     RenderDeviceFillPath(path, fill_type, matrix);
 }
 
-void CFGAS_GEGraphics::ConcatMatrix(const CFX_Matrix* matrix) {
-  if (matrix)
-    m_info.CTM.Concat(*matrix);
+void CFGAS_GEGraphics::ConcatMatrix(const CFX_Matrix& matrix) {
+  m_info.CTM.Concat(matrix);
 }
 
 const CFX_Matrix* CFGAS_GEGraphics::GetMatrix() const {
@@ -220,10 +219,9 @@
 void CFGAS_GEGraphics::RenderDeviceFillPath(
     const CFGAS_GEPath* path,
     CFX_FillRenderOptions::FillType fill_type,
-    const CFX_Matrix* matrix) {
+    const CFX_Matrix& matrix) {
   CFX_Matrix m = m_info.CTM;
-  if (matrix)
-    m.Concat(*matrix);
+  m.Concat(matrix);
 
   const CFX_FillRenderOptions fill_options(fill_type);
   switch (m_info.fillColor.GetType()) {
diff --git a/xfa/fgas/graphics/cfgas_gegraphics.h b/xfa/fgas/graphics/cfgas_gegraphics.h
index 5bcbbd8..d29ff20 100644
--- a/xfa/fgas/graphics/cfgas_gegraphics.h
+++ b/xfa/fgas/graphics/cfgas_gegraphics.h
@@ -53,8 +53,8 @@
   void StrokePath(CFGAS_GEPath* path, const CFX_Matrix* matrix);
   void FillPath(CFGAS_GEPath* path,
                 CFX_FillRenderOptions::FillType fill_type,
-                const CFX_Matrix* matrix);
-  void ConcatMatrix(const CFX_Matrix* matrix);
+                const CFX_Matrix& matrix);
+  void ConcatMatrix(const CFX_Matrix& matrix);
 
  private:
   struct TInfo {
@@ -73,7 +73,7 @@
                               const CFX_Matrix* matrix);
   void RenderDeviceFillPath(const CFGAS_GEPath* path,
                             CFX_FillRenderOptions::FillType fill_type,
-                            const CFX_Matrix* matrix);
+                            const CFX_Matrix& matrix);
   void FillPathWithPattern(const CFGAS_GEPath* path,
                            const CFX_FillRenderOptions& fill_options,
                            const CFX_Matrix& matrix);
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index 8ef8fd8..e9a81ef 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -104,7 +104,7 @@
 void CFWL_ComboBox::DrawWidget(CFGAS_GEGraphics* pGraphics,
                                const CFX_Matrix& matrix) {
   pGraphics->SaveGraphState();
-  pGraphics->ConcatMatrix(&matrix);
+  pGraphics->ConcatMatrix(matrix);
   if (!m_BtnRect.IsEmpty(0.1f)) {
     CFWL_ThemeBackground param;
     param.m_pWidget = this;
diff --git a/xfa/fwl/theme/cfwl_carettp.cpp b/xfa/fwl/theme/cfwl_carettp.cpp
index 5c4d99b..c348cf9 100644
--- a/xfa/fwl/theme/cfwl_carettp.cpp
+++ b/xfa/fwl/theme/cfwl_carettp.cpp
@@ -38,6 +38,5 @@
   CFGAS_GEPath path;
   path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
   pGraphics->SetFillColor(CFGAS_GEColor(ArgbEncode(255, 0, 0, 0)));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding, matrix);
 }
diff --git a/xfa/fwl/theme/cfwl_checkboxtp.cpp b/xfa/fwl/theme/cfwl_checkboxtp.cpp
index ee4dfca..3079e07 100644
--- a/xfa/fwl/theme/cfwl_checkboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_checkboxtp.cpp
@@ -54,7 +54,7 @@
   pGraphics->SaveGraphState();
   pGraphics->SetFillColor(CFGAS_GEColor(argbFill));
   pGraphics->FillPath(m_pCheckPath.get(),
-                      CFX_FillRenderOptions::FillType::kWinding, &mt);
+                      CFX_FillRenderOptions::FillType::kWinding, mt);
   pGraphics->RestoreGraphState();
 }
 
@@ -66,8 +66,7 @@
   path.AddEllipse(rtSign);
   pGraphics->SaveGraphState();
   pGraphics->SetFillColor(CFGAS_GEColor(argbFill));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGraphics->RestoreGraphState();
 }
 
@@ -105,8 +104,7 @@
 
   pGraphics->SaveGraphState();
   pGraphics->SetFillColor(CFGAS_GEColor(argbFill));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGraphics->RestoreGraphState();
 }
 
@@ -118,8 +116,7 @@
   path.AddRectangle(rtSign.left, rtSign.top, rtSign.width, rtSign.height);
   pGraphics->SaveGraphState();
   pGraphics->SetFillColor(CFGAS_GEColor(argbFill));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGraphics->RestoreGraphState();
 }
 
@@ -149,8 +146,7 @@
   }
   pGraphics->SaveGraphState();
   pGraphics->SetFillColor(CFGAS_GEColor(argbFill));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGraphics->RestoreGraphState();
 }
 
diff --git a/xfa/fwl/theme/cfwl_comboboxtp.cpp b/xfa/fwl/theme/cfwl_comboboxtp.cpp
index 662027a..a39b539 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_comboboxtp.cpp
@@ -42,7 +42,7 @@
       pParams.m_pGraphics->SaveGraphState();
       pParams.m_pGraphics->SetFillColor(CFGAS_GEColor(argb_color));
       pParams.m_pGraphics->FillPath(
-          &path, CFX_FillRenderOptions::FillType::kWinding, &pParams.m_matrix);
+          &path, CFX_FillRenderOptions::FillType::kWinding, pParams.m_matrix);
       pParams.m_pGraphics->RestoreGraphState();
       break;
     }
diff --git a/xfa/fwl/theme/cfwl_edittp.cpp b/xfa/fwl/theme/cfwl_edittp.cpp
index d808a13..8e09002 100644
--- a/xfa/fwl/theme/cfwl_edittp.cpp
+++ b/xfa/fwl/theme/cfwl_edittp.cpp
@@ -42,7 +42,7 @@
         pGraphics->SetFillColor(CFGAS_GEColor(FWLTHEME_COLOR_BKSelected));
         pGraphics->FillPath(pParams.m_pPath.Get(),
                             CFX_FillRenderOptions::FillType::kWinding,
-                            &pParams.m_matrix);
+                            pParams.m_matrix);
         pGraphics->RestoreGraphState();
       } else {
         CFGAS_GEPath path;
@@ -59,9 +59,8 @@
         }
         pParams.m_pGraphics->SaveGraphState();
         pParams.m_pGraphics->SetFillColor(cr);
-        pParams.m_pGraphics->FillPath(&path,
-                                      CFX_FillRenderOptions::FillType::kWinding,
-                                      &pParams.m_matrix);
+        pParams.m_pGraphics->FillPath(
+            &path, CFX_FillRenderOptions::FillType::kWinding, pParams.m_matrix);
         pParams.m_pGraphics->RestoreGraphState();
       }
       break;
diff --git a/xfa/fwl/theme/cfwl_listboxtp.cpp b/xfa/fwl/theme/cfwl_listboxtp.cpp
index a5737c5..4ce7a5f 100644
--- a/xfa/fwl/theme/cfwl_listboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_listboxtp.cpp
@@ -70,7 +70,7 @@
     path.AddRectangle(rtItem.left, rtItem.top, rtItem.width, rtItem.height);
 #endif
     pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                        &matrix);
+                        matrix);
     pGraphics->RestoreGraphState();
   }
   if ((dwStates & CFWL_PartState_Focused) && pData)
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.cpp b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
index aeb2c75..69c627a 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.cpp
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
@@ -106,7 +106,7 @@
   pParams.m_pGraphics->SaveGraphState();
   pParams.m_pGraphics->SetFillColor(CFGAS_GEColor(kBackgroundColor));
   pParams.m_pGraphics->FillPath(
-      &path, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+      &path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pParams.m_pGraphics->RestoreGraphState();
 }
 
@@ -118,7 +118,7 @@
   pParams.m_pGraphics->SaveGraphState();
   pParams.m_pGraphics->SetFillColor(CFGAS_GEColor(kBackgroundColor));
   pParams.m_pGraphics->FillPath(
-      &path, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+      &path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pParams.m_pGraphics->RestoreGraphState();
 }
 
@@ -135,12 +135,12 @@
     pParams.m_pGraphics->SetFillColor(
         CFGAS_GEColor(ArgbEncode(0xff, 174, 198, 242)));
     pParams.m_pGraphics->FillPath(
-        &path, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+        &path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   } else {
     pParams.m_pGraphics->SetFillColor(
         CFGAS_GEColor(ArgbEncode(0xff, 227, 235, 249)));
     pParams.m_pGraphics->FillPath(
-        &path, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+        &path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   }
 
   path.Clear();
@@ -170,12 +170,12 @@
     pParams.m_pGraphics->SetFillColor(
         CFGAS_GEColor(ArgbEncode(0xff, 174, 198, 242)));
     pParams.m_pGraphics->FillPath(
-        &path, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+        &path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   } else {
     pParams.m_pGraphics->SetFillColor(
         CFGAS_GEColor(ArgbEncode(0xff, 227, 235, 249)));
     pParams.m_pGraphics->FillPath(
-        &path, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+        &path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   }
 
   path.Clear();
@@ -227,7 +227,7 @@
     pParams.m_pGraphics->SetFillColor(
         CFGAS_GEColor(kDatesSelectedBackgroundColor));
     pParams.m_pGraphics->FillPath(
-        &path, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+        &path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   } else if (pParams.m_dwStates & CFWL_PartState_Hovered) {
     CFGAS_GEPath path;
     CFX_RectF rtSelDay = pParams.m_PartRect;
@@ -236,7 +236,7 @@
     pParams.m_pGraphics->SetFillColor(
         CFGAS_GEColor(kDatesHoverBackgroundColor));
     pParams.m_pGraphics->FillPath(
-        &path, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+        &path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   }
   pParams.m_pGraphics->RestoreGraphState();
 }
diff --git a/xfa/fwl/theme/cfwl_pushbuttontp.cpp b/xfa/fwl/theme/cfwl_pushbuttontp.cpp
index fdbbdab..68f5cb7 100644
--- a/xfa/fwl/theme/cfwl_pushbuttontp.cpp
+++ b/xfa/fwl/theme/cfwl_pushbuttontp.cpp
@@ -74,7 +74,7 @@
 
       pGraphics->SetFillColor(CFGAS_GEColor(m_pThemeData->clrFill[iColor]));
       pGraphics->FillPath(&fillPath, CFX_FillRenderOptions::FillType::kWinding,
-                          &pParams.m_matrix);
+                          pParams.m_matrix);
       if (pParams.m_dwStates & CFWL_PartState_Focused) {
         rtInner.Inflate(1, 1, 0, 0);
         DrawFocus(pGraphics, rtInner, pParams.m_matrix);
diff --git a/xfa/fwl/theme/cfwl_scrollbartp.cpp b/xfa/fwl/theme/cfwl_scrollbartp.cpp
index b56935e..3d918b8 100644
--- a/xfa/fwl/theme/cfwl_scrollbartp.cpp
+++ b/xfa/fwl/theme/cfwl_scrollbartp.cpp
@@ -204,8 +204,7 @@
     path.AddRectangle(rect.left, fBottom - 1, rect.width, 1);
   }
   pGraphics->SetFillColor(CFGAS_GEColor(ArgbEncode(255, 238, 237, 229)));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   path.Clear();
   path.AddRectangle(rect.left + 1, rect.top, rect.width - 2, rect.height);
   pGraphics->RestoreGraphState();
diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
index a6cdf1e..afb922c 100644
--- a/xfa/fwl/theme/cfwl_widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -97,8 +97,7 @@
                     rect.height - 2);
   pGraphics->SaveGraphState();
   pGraphics->SetFillColor(CFGAS_GEColor(ArgbEncode(255, 0, 0, 0)));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kEvenOdd,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kEvenOdd, matrix);
   pGraphics->RestoreGraphState();
 }
 
@@ -119,8 +118,7 @@
   path.AddRectangle(rect.left, rect.top, rect.width, rect.height);
   pGraphics->SaveGraphState();
   pGraphics->SetFillColor(CFGAS_GEColor(fillColor));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGraphics->RestoreGraphState();
 }
 
@@ -189,8 +187,7 @@
     }
   }
   pGraphics->SetFillColor(CFGAS_GEColor(argSign));
-  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                      &matrix);
+  pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding, matrix);
 }
 
 void CFWL_WidgetTP::DrawBtn(CFGAS_GEGraphics* pGraphics,
diff --git a/xfa/fxfa/cxfa_ffbarcode.cpp b/xfa/fxfa/cxfa_ffbarcode.cpp
index c7bc88a..5ddbf88 100644
--- a/xfa/fxfa/cxfa_ffbarcode.cpp
+++ b/xfa/fxfa/cxfa_ffbarcode.cpp
@@ -176,7 +176,7 @@
 
   CXFA_FFWidget::RenderWidget(pGS, mtRotate, highlight);
   DrawBorder(pGS, m_pNode->GetUIBorder(), m_UIRect, mtRotate);
-  RenderCaption(pGS, &mtRotate);
+  RenderCaption(pGS, mtRotate);
   CFX_RectF rtWidget = GetNormalWidget()->GetWidgetRect();
 
   CFX_Matrix mt(1, 0, 0, 1, rtWidget.left, rtWidget.top);
diff --git a/xfa/fxfa/cxfa_ffcheckbutton.cpp b/xfa/fxfa/cxfa_ffcheckbutton.cpp
index 81de82b..fd232b5 100644
--- a/xfa/fxfa/cxfa_ffcheckbutton.cpp
+++ b/xfa/fxfa/cxfa_ffcheckbutton.cpp
@@ -244,8 +244,8 @@
   CXFA_FFWidget::RenderWidget(pGS, mtRotate, highlight);
   DrawBorderWithFlag(pGS, m_pNode->GetUIBorder(), m_UIRect, mtRotate,
                      button_->IsRound());
-  RenderCaption(pGS, &mtRotate);
-  DrawHighlight(pGS, &mtRotate, highlight,
+  RenderCaption(pGS, mtRotate);
+  DrawHighlight(pGS, mtRotate, highlight,
                 button_->IsRound() ? kRoundShape : kSquareShape);
   CFX_Matrix mt(1, 0, 0, 1, m_CheckBoxRect.left, m_CheckBoxRect.top);
   mt.Concat(mtRotate);
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index 6fb5c5e..5898c77 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -80,8 +80,8 @@
 
   CXFA_FFWidget::RenderWidget(pGS, mtRotate, highlight);
   DrawBorder(pGS, m_pNode->GetUIBorder(), m_UIRect, mtRotate);
-  RenderCaption(pGS, &mtRotate);
-  DrawHighlight(pGS, &mtRotate, highlight, kSquareShape);
+  RenderCaption(pGS, mtRotate);
+  DrawHighlight(pGS, mtRotate, highlight, kSquareShape);
 
   CFX_RectF rtWidget = GetNormalWidget()->GetWidgetRect();
   CFX_Matrix mt(1, 0, 0, 1, rtWidget.left, rtWidget.top);
@@ -90,7 +90,7 @@
 }
 
 void CXFA_FFField::DrawHighlight(CFGAS_GEGraphics* pGS,
-                                 CFX_Matrix* pMatrix,
+                                 const CFX_Matrix& pMatrix,
                                  HighlightOption highlight,
                                  ShapeOption shape) {
   if (highlight == kNoHighlight)
@@ -582,7 +582,8 @@
   m_CaptionRect.height = std::max(m_CaptionRect.height, fHeight);
 }
 
-void CXFA_FFField::RenderCaption(CFGAS_GEGraphics* pGS, CFX_Matrix* pMatrix) {
+void CXFA_FFField::RenderCaption(CFGAS_GEGraphics* pGS,
+                                 const CFX_Matrix& pMatrix) {
   CXFA_TextLayout* pCapTextLayout = m_pNode->GetCaptionTextLayout();
   if (!pCapTextLayout)
     return;
@@ -598,10 +599,8 @@
   rtClip.Intersect(GetRectWithoutRotate());
   CFX_RenderDevice* pRenderDevice = pGS->GetRenderDevice();
   CFX_Matrix mt(1, 0, 0, 1, m_CaptionRect.left, m_CaptionRect.top);
-  if (pMatrix) {
-    rtClip = pMatrix->TransformRect(rtClip);
-    mt.Concat(*pMatrix);
-  }
+  rtClip = pMatrix.TransformRect(rtClip);
+  mt.Concat(pMatrix);
   pCapTextLayout->DrawString(pRenderDevice, mt, rtClip, 0);
 }
 
diff --git a/xfa/fxfa/cxfa_fffield.h b/xfa/fxfa/cxfa_fffield.h
index 297470a..204b8c6 100644
--- a/xfa/fxfa/cxfa_fffield.h
+++ b/xfa/fxfa/cxfa_fffield.h
@@ -82,13 +82,13 @@
   void SetNormalWidget(CFWL_Widget* widget);
   CFX_PointF FWLToClient(const CFX_PointF& point);
   void LayoutCaption();
-  void RenderCaption(CFGAS_GEGraphics* pGS, CFX_Matrix* pMatrix);
+  void RenderCaption(CFGAS_GEGraphics* pGS, const CFX_Matrix& pMatrix);
 
   int32_t CalculateOverride();
   int32_t CalculateNode(CXFA_Node* pNode);
   bool ProcessCommittedData();
   void DrawHighlight(CFGAS_GEGraphics* pGS,
-                     CFX_Matrix* pMatrix,
+                     const CFX_Matrix& pMatrix,
                      HighlightOption highlight,
                      ShapeOption shape);
   void DrawFocus(CFGAS_GEGraphics* pGS, CFX_Matrix* pMatrix);
diff --git a/xfa/fxfa/cxfa_ffimageedit.cpp b/xfa/fxfa/cxfa_ffimageedit.cpp
index 97dda51..c6f4faf 100644
--- a/xfa/fxfa/cxfa_ffimageedit.cpp
+++ b/xfa/fxfa/cxfa_ffimageedit.cpp
@@ -68,7 +68,7 @@
 
   CXFA_FFWidget::RenderWidget(pGS, mtRotate, highlight);
   DrawBorder(pGS, m_pNode->GetUIBorder(), m_UIRect, mtRotate);
-  RenderCaption(pGS, &mtRotate);
+  RenderCaption(pGS, mtRotate);
   RetainPtr<CFX_DIBitmap> pDIBitmap = m_pNode->GetImageEditImage();
   if (!pDIBitmap)
     return;
diff --git a/xfa/fxfa/cxfa_ffpushbutton.cpp b/xfa/fxfa/cxfa_ffpushbutton.cpp
index 343846e..5ae31f0 100644
--- a/xfa/fxfa/cxfa_ffpushbutton.cpp
+++ b/xfa/fxfa/cxfa_ffpushbutton.cpp
@@ -223,7 +223,7 @@
       path.AddRectangle(rtFill.left, rtFill.top, rtFill.width, rtFill.height);
       pGraphics->SetFillColor(CFGAS_GEColor(ArgbEncode(128, 128, 255, 255)));
       pGraphics->FillPath(&path, CFX_FillRenderOptions::FillType::kWinding,
-                          &matrix);
+                          matrix);
     }
     return;
   }
diff --git a/xfa/fxfa/cxfa_ffsignature.cpp b/xfa/fxfa/cxfa_ffsignature.cpp
index 34d2f24..6b4c3c0 100644
--- a/xfa/fxfa/cxfa_ffsignature.cpp
+++ b/xfa/fxfa/cxfa_ffsignature.cpp
@@ -34,8 +34,8 @@
   CXFA_FFWidget::RenderWidget(pGS, mtRotate, highlight);
 
   DrawBorder(pGS, m_pNode->GetUIBorder(), m_UIRect, mtRotate);
-  RenderCaption(pGS, &mtRotate);
-  DrawHighlight(pGS, &mtRotate, highlight, kSquareShape);
+  RenderCaption(pGS, mtRotate);
+  DrawHighlight(pGS, mtRotate, highlight, kSquareShape);
 }
 
 bool CXFA_FFSignature::OnMouseEnter() {
diff --git a/xfa/fxfa/parser/cxfa_fill.cpp b/xfa/fxfa/parser/cxfa_fill.cpp
index 552746c..899a282 100644
--- a/xfa/fxfa/parser/cxfa_fill.cpp
+++ b/xfa/fxfa/parser/cxfa_fill.cpp
@@ -109,7 +109,7 @@
     default:
       pGS->SetFillColor(CFGAS_GEColor(GetColor(false)));
       pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding,
-                    &matrix);
+                    matrix);
       break;
   }
 
diff --git a/xfa/fxfa/parser/cxfa_linear.cpp b/xfa/fxfa/parser/cxfa_linear.cpp
index 565e888..7e539fc 100644
--- a/xfa/fxfa/parser/cxfa_linear.cpp
+++ b/xfa/fxfa/parser/cxfa_linear.cpp
@@ -87,6 +87,6 @@
 
   pGS->SaveGraphState();
   pGS->SetFillColor(CFGAS_GEColor(&shading));
-  pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+  pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGS->RestoreGraphState();
 }
diff --git a/xfa/fxfa/parser/cxfa_pattern.cpp b/xfa/fxfa/parser/cxfa_pattern.cpp
index 4a5eae6..0005abd 100644
--- a/xfa/fxfa/parser/cxfa_pattern.cpp
+++ b/xfa/fxfa/parser/cxfa_pattern.cpp
@@ -83,6 +83,6 @@
 
   pGS->SaveGraphState();
   pGS->SetFillColor(CFGAS_GEColor(&pattern, 0x0));
-  pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+  pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGS->RestoreGraphState();
 }
diff --git a/xfa/fxfa/parser/cxfa_radial.cpp b/xfa/fxfa/parser/cxfa_radial.cpp
index 7b75ca8..4b4558e 100644
--- a/xfa/fxfa/parser/cxfa_radial.cpp
+++ b/xfa/fxfa/parser/cxfa_radial.cpp
@@ -71,6 +71,6 @@
 
   pGS->SaveGraphState();
   pGS->SetFillColor(CFGAS_GEColor(&shading));
-  pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+  pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGS->RestoreGraphState();
 }
diff --git a/xfa/fxfa/parser/cxfa_rectangle.cpp b/xfa/fxfa/parser/cxfa_rectangle.cpp
index aeb41ad..930ca8e 100644
--- a/xfa/fxfa/parser/cxfa_rectangle.cpp
+++ b/xfa/fxfa/parser/cxfa_rectangle.cpp
@@ -382,7 +382,7 @@
   pathLT.LineTo(CFX_PointF(rt.left, fBottom));
   pGraphic->SetFillColor(CFGAS_GEColor(argbTopLeft));
   pGraphic->FillPath(&pathLT, CFX_FillRenderOptions::FillType::kWinding,
-                     &matrix);
+                     matrix);
 
   CFGAS_GEPath pathRB;
   pathRB.MoveTo(CFX_PointF(fRight, rt.top));
@@ -394,7 +394,7 @@
   pathRB.LineTo(CFX_PointF(fRight, rt.top));
   pGraphic->SetFillColor(CFGAS_GEColor(argbBottomRight));
   pGraphic->FillPath(&pathRB, CFX_FillRenderOptions::FillType::kWinding,
-                     &matrix);
+                     matrix);
 }
 
 void CXFA_Rectangle::StrokeLowered(CFGAS_GEGraphics* pGS,
@@ -409,8 +409,7 @@
   path.AddRectangle(rt.left, rt.top, rt.width, rt.height);
   path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height);
   pGS->SetFillColor(CFGAS_GEColor(0xFF000000));
-  pGS->FillPath(&path, CFX_FillRenderOptions::FillType::kEvenOdd, &matrix);
-
+  pGS->FillPath(&path, CFX_FillRenderOptions::FillType::kEvenOdd, matrix);
   StrokeRect(pGS, rtInner, fHalfWidth, matrix, 0xFF808080, 0xFFC0C0C0);
 }
 
@@ -426,8 +425,7 @@
   path.AddRectangle(rt.left, rt.top, rt.width, rt.height);
   path.AddRectangle(rtInner.left, rtInner.top, rtInner.width, rtInner.height);
   pGS->SetFillColor(CFGAS_GEColor(0xFF000000));
-  pGS->FillPath(&path, CFX_FillRenderOptions::FillType::kEvenOdd, &matrix);
-
+  pGS->FillPath(&path, CFX_FillRenderOptions::FillType::kEvenOdd, matrix);
   StrokeRect(pGS, rtInner, fHalfWidth, matrix, 0xFFFFFFFF, 0xFF808080);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_stipple.cpp b/xfa/fxfa/parser/cxfa_stipple.cpp
index cc401cd..08413e7 100644
--- a/xfa/fxfa/parser/cxfa_stipple.cpp
+++ b/xfa/fxfa/parser/cxfa_stipple.cpp
@@ -68,6 +68,6 @@
 
   pGS->SaveGraphState();
   pGS->SetFillColor(CFGAS_GEColor(cr));
-  pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding, &matrix);
+  pGS->FillPath(fillPath, CFX_FillRenderOptions::FillType::kWinding, matrix);
   pGS->RestoreGraphState();
 }
