diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index 84f1be3..4760ab2 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -213,18 +213,6 @@
     m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved);
 }
 
-void CFWL_ComboBox::DrawStretchHandler(CXFA_Graphics* pGraphics,
-                                       const CFX_Matrix* pMatrix) {
-  CFWL_ThemeBackground param;
-  param.m_pGraphics = pGraphics;
-  param.m_iPart = CFWL_Part::StretchHandler;
-  param.m_dwStates = CFWL_PartState_Normal;
-  param.m_pWidget = this;
-  if (pMatrix)
-    param.m_matrix.Concat(*pMatrix);
-  m_pProperties->m_pThemeProvider->DrawBackground(param);
-}
-
 void CFWL_ComboBox::ShowDropList(bool bActivate) {
   if (IsDropListVisible() == bActivate)
     return;
diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h
index c9e092f..4142b83 100644
--- a/xfa/fwl/cfwl_combobox.h
+++ b/xfa/fwl/cfwl_combobox.h
@@ -88,8 +88,6 @@
 
   CFX_RectF GetBBox() const;
   void EditModifyStylesEx(uint32_t dwStylesExAdded, uint32_t dwStylesExRemoved);
-
-  void DrawStretchHandler(CXFA_Graphics* pGraphics, const CFX_Matrix* pMatrix);
   void ShowDropList(bool bActivate);
 
   CFWL_ComboEdit* GetComboEdit() const { return m_pEdit.get(); }
diff --git a/xfa/fwl/cfwl_themepart.h b/xfa/fwl/cfwl_themepart.h
index 942fd71..46be205 100644
--- a/xfa/fwl/cfwl_themepart.h
+++ b/xfa/fwl/cfwl_themepart.h
@@ -40,7 +40,6 @@
   MaximizeBox,
   NarrowCaption,
   RBtn,
-  StretchHandler,
   Thumb,
   ThumbBackArrow,
   ThumbForeArrow,
diff --git a/xfa/fwl/theme/cfwl_comboboxtp.cpp b/xfa/fwl/theme/cfwl_comboboxtp.cpp
index ff179b8..6876965 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_comboboxtp.cpp
@@ -48,25 +48,11 @@
       DrawDropDownButton(pParams, pParams.m_dwStates, pParams.m_matrix);
       break;
     }
-    case CFWL_Part::StretchHandler: {
-      DrawStretchHandler(pParams, 0, pParams.m_matrix);
-      break;
-    }
     default:
       break;
   }
 }
 
-void CFWL_ComboBoxTP::DrawStretchHandler(const CFWL_ThemeBackground& pParams,
-                                         uint32_t dwStates,
-                                         const CFX_Matrix& matrix) {
-  CXFA_GEPath path;
-  path.AddRectangle(pParams.m_rtPart.left, pParams.m_rtPart.top,
-                    pParams.m_rtPart.width - 1, pParams.m_rtPart.height);
-  pParams.m_pGraphics->SetFillColor(CXFA_GEColor(ArgbEncode(0xff, 0xff, 0, 0)));
-  pParams.m_pGraphics->FillPath(&path, FXFILL_WINDING, &pParams.m_matrix);
-}
-
 void CFWL_ComboBoxTP::DrawDropDownButton(const CFWL_ThemeBackground& pParams,
                                          uint32_t dwStates,
                                          const CFX_Matrix& matrix) {
diff --git a/xfa/fwl/theme/cfwl_comboboxtp.h b/xfa/fwl/theme/cfwl_comboboxtp.h
index 0be02aa..b3a75a5 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.h
+++ b/xfa/fwl/theme/cfwl_comboboxtp.h
@@ -21,9 +21,6 @@
   void DrawDropDownButton(const CFWL_ThemeBackground& pParams,
                           uint32_t dwStates,
                           const CFX_Matrix& matrix);
-  void DrawStretchHandler(const CFWL_ThemeBackground& pParams,
-                          uint32_t dwStates,
-                          const CFX_Matrix& matrix);
 };
 
 #endif  // XFA_FWL_THEME_CFWL_COMBOBOXTP_H_
