diff --git a/xfa/fgas/graphics/cfgas_gegraphics.h b/xfa/fgas/graphics/cfgas_gegraphics.h
index 4a28ffd..9885990 100644
--- a/xfa/fgas/graphics/cfgas_gegraphics.h
+++ b/xfa/fgas/graphics/cfgas_gegraphics.h
@@ -39,9 +39,6 @@
   explicit CFGAS_GEGraphics(CFX_RenderDevice* renderDevice);
   ~CFGAS_GEGraphics();
 
-  void SaveGraphState();
-  void RestoreGraphState();
-
   CFX_RectF GetClipRect() const;
   const CFX_Matrix* GetMatrix() const;
   CFX_RenderDevice* GetRenderDevice();
@@ -73,6 +70,9 @@
     CFGAS_GEColor fillColor{nullptr};
   };
 
+  void SaveGraphState();
+  void RestoreGraphState();
+
   void RenderDeviceStrokePath(const CFGAS_GEPath& path,
                               const CFX_Matrix& matrix);
   void RenderDeviceFillPath(const CFGAS_GEPath& path,
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index 4f90aee..c9d3a52 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -103,16 +103,14 @@
 
 void CFWL_ComboBox::DrawWidget(CFGAS_GEGraphics* pGraphics,
                                const CFX_Matrix& matrix) {
-  {
+  if (!m_BtnRect.IsEmpty(0.1f)) {
     CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
     pGraphics->ConcatMatrix(matrix);
-    if (!m_BtnRect.IsEmpty(0.1f)) {
-      CFWL_ThemeBackground param(this, pGraphics);
-      param.m_iPart = CFWL_ThemePart::Part::kDropDownButton;
-      param.m_dwStates = m_iBtnState;
-      param.m_PartRect = m_BtnRect;
-      GetThemeProvider()->DrawBackground(param);
-    }
+    CFWL_ThemeBackground param(this, pGraphics);
+    param.m_iPart = CFWL_ThemePart::Part::kDropDownButton;
+    param.m_dwStates = m_iBtnState;
+    param.m_PartRect = m_BtnRect;
+    GetThemeProvider()->DrawBackground(param);
   }
   if (m_pEdit) {
     CFX_RectF rtEdit = m_pEdit->GetWidgetRect();
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index 7c101dc..bdd3e0a 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -311,14 +311,32 @@
 
 void CFWL_Edit::DrawContent(CFGAS_GEGraphics* pGraphics,
                             const CFX_Matrix& mtMatrix) {
-  CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
-  if (m_Properties.m_dwStyleExts & FWL_STYLEEXT_EDT_CombText)
-    pGraphics->SaveGraphState();
+  DrawContentNonComb(pGraphics, mtMatrix);
+  if (m_Properties.m_dwStyleExts & FWL_STYLEEXT_EDT_CombText) {
+    CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
+    CFGAS_GEPath path;
+    const int32_t iLimit = m_nLimit > 0 ? m_nLimit : 1;
+    const float fStep = m_EngineRect.width / iLimit;
+    float fLeft = m_EngineRect.left + 1;
+    for (int32_t i = 1; i < iLimit; i++) {
+      fLeft += fStep;
+      path.AddLine(CFX_PointF(fLeft, m_ClientRect.top),
+                   CFX_PointF(fLeft, m_ClientRect.bottom()));
+    }
+    CFWL_ThemeBackground param(this, pGraphics);
+    param.m_matrix = mtMatrix;
+    param.m_iPart = CFWL_ThemePart::Part::kCombTextLine;
+    param.SetPath(&path);
+    GetThemeProvider()->DrawBackground(param);
+  }
+}
 
+void CFWL_Edit::DrawContentNonComb(CFGAS_GEGraphics* pGraphics,
+                                   const CFX_Matrix& mtMatrix) {
+  CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
   CFX_RectF rtClip = m_EngineRect;
   float fOffSetX = m_EngineRect.left - m_fScrollOffsetX;
   float fOffSetY = m_EngineRect.top - m_fScrollOffsetY + m_fVAlignOffset;
-
   CFX_Matrix mt(1, 0, 0, 1, fOffSetX, fOffSetY);
   rtClip = mtMatrix.TransformRect(rtClip);
   mt.Concat(mtMatrix);
@@ -349,26 +367,6 @@
 
   CFX_RenderDevice* pRenderDev = pGraphics->GetRenderDevice();
   RenderText(pRenderDev, rtClip, mt);
-
-  if (m_Properties.m_dwStyleExts & FWL_STYLEEXT_EDT_CombText) {
-    pGraphics->RestoreGraphState();
-
-    CFGAS_GEPath path;
-    int32_t iLimit = m_nLimit > 0 ? m_nLimit : 1;
-    float fStep = m_EngineRect.width / iLimit;
-    float fLeft = m_EngineRect.left + 1;
-    for (int32_t i = 1; i < iLimit; i++) {
-      fLeft += fStep;
-      path.AddLine(CFX_PointF(fLeft, m_ClientRect.top),
-                   CFX_PointF(fLeft, m_ClientRect.bottom()));
-    }
-
-    CFWL_ThemeBackground param(this, pGraphics);
-    param.m_matrix = mtMatrix;
-    param.m_iPart = CFWL_ThemePart::Part::kCombTextLine;
-    param.SetPath(&path);
-    GetThemeProvider()->DrawBackground(param);
-  }
 }
 
 void CFWL_Edit::RenderText(CFX_RenderDevice* pRenderDev,
diff --git a/xfa/fwl/cfwl_edit.h b/xfa/fwl/cfwl_edit.h
index 66ff7de..fc14a1a 100644
--- a/xfa/fwl/cfwl_edit.h
+++ b/xfa/fwl/cfwl_edit.h
@@ -110,6 +110,8 @@
                   const CFX_RectF& clipRect,
                   const CFX_Matrix& mt);
   void DrawContent(CFGAS_GEGraphics* pGraphics, const CFX_Matrix& mtMatrix);
+  void DrawContentNonComb(CFGAS_GEGraphics* pGraphics,
+                          const CFX_Matrix& mtMatrix);
 
   void UpdateEditEngine();
   void UpdateEditParams();
diff --git a/xfa/fwl/theme/cfwl_edittp.cpp b/xfa/fwl/theme/cfwl_edittp.cpp
index 22b2597..cc52473 100644
--- a/xfa/fwl/theme/cfwl_edittp.cpp
+++ b/xfa/fwl/theme/cfwl_edittp.cpp
@@ -24,10 +24,10 @@
       break;
     }
     case CFWL_ThemePart::Part::kBackground: {
+      CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
+      CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
       const CFGAS_GEPath* pParamsPath = pParams.GetPath();
       if (pParamsPath) {
-        CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
-        CFGAS_GEGraphics::StateRestorer restorer(pGraphics);
         pGraphics->SetFillColor(CFGAS_GEColor(FWLTHEME_COLOR_BKSelected));
         pGraphics->FillPath(*pParamsPath,
                             CFX_FillRenderOptions::FillType::kWinding,
@@ -45,10 +45,9 @@
           else
             cr = CFGAS_GEColor(0xFFFFFFFF);
         }
-        CFGAS_GEGraphics::StateRestorer restorer(pParams.GetGraphics());
-        pParams.GetGraphics()->SetFillColor(cr);
-        pParams.GetGraphics()->FillPath(
-            path, CFX_FillRenderOptions::FillType::kWinding, pParams.m_matrix);
+        pGraphics->SetFillColor(cr);
+        pGraphics->FillPath(path, CFX_FillRenderOptions::FillType::kWinding,
+                            pParams.m_matrix);
       }
       break;
     }
