diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp
index fcf2175..7b95c09 100644
--- a/core/fpdfdoc/cpdf_formcontrol.cpp
+++ b/core/fpdfdoc/cpdf_formcontrol.cpp
@@ -8,16 +8,13 @@
 
 #include <algorithm>
 
-#include "core/fpdfapi/page/cpdf_form.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fpdfapi/parser/cpdf_name.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "core/fpdfapi/parser/fpdf_parser_decode.h"
-#include "core/fpdfapi/render/cpdf_rendercontext.h"
 #include "core/fpdfdoc/cpdf_interform.h"
-#include "core/fxge/cfx_renderdevice.h"
 
 namespace {
 
@@ -58,7 +55,7 @@
   return ByteString();
 }
 
-ByteString CPDF_FormControl::GetCheckedAPState() {
+ByteString CPDF_FormControl::GetCheckedAPState() const {
   ASSERT(GetType() == CPDF_FormField::CheckBox ||
          GetType() == CPDF_FormField::RadioButton);
   ByteString csOn = GetOnStateName();
@@ -121,34 +118,8 @@
   m_pWidgetDict->SetNewFor<CPDF_Name>("AS", csAS);
 }
 
-void CPDF_FormControl::DrawControl(CFX_RenderDevice* pDevice,
-                                   CFX_Matrix* pMatrix,
-                                   CPDF_Page* pPage,
-                                   CPDF_Annot::AppearanceMode mode,
-                                   const CPDF_RenderOptions* pOptions) {
-  if (m_pWidgetDict->GetIntegerFor("F") & ANNOTFLAG_HIDDEN)
-    return;
-
-  CPDF_Stream* pStream = GetAnnotAP(m_pWidgetDict.Get(), mode);
-  if (!pStream)
-    return;
-
-  CFX_Matrix form_matrix = pStream->GetDict()->GetMatrixFor("Matrix");
-  CFX_FloatRect form_bbox =
-      form_matrix.TransformRect(pStream->GetDict()->GetRectFor("BBox"));
-  CFX_FloatRect arect = m_pWidgetDict->GetRectFor("Rect");
-  CFX_Matrix matrix;
-  matrix.MatchRect(arect, form_bbox);
-  matrix.Concat(*pMatrix);
-  CPDF_Form form(m_pField->GetForm()->GetDocument(),
-                 m_pField->GetForm()->GetFormDict()->GetDictFor("DR"), pStream);
-  form.ParseContent(nullptr, nullptr, nullptr, nullptr);
-  CPDF_RenderContext context(pPage);
-  context.AppendLayer(&form, &matrix);
-  context.Render(pDevice, pOptions, nullptr);
-}
-
-CPDF_FormControl::HighlightingMode CPDF_FormControl::GetHighlightingMode() {
+CPDF_FormControl::HighlightingMode CPDF_FormControl::GetHighlightingMode()
+    const {
   if (!m_pWidgetDict)
     return Invert;
 
@@ -169,7 +140,7 @@
   return GetMK().HasMKEntry(csEntry);
 }
 
-int CPDF_FormControl::GetRotation() {
+int CPDF_FormControl::GetRotation() const {
   return GetMK().GetRotation();
 }
 
@@ -187,7 +158,7 @@
   GetMK().GetOriginalColor(iColorType, fc, csEntry);
 }
 
-WideString CPDF_FormControl::GetCaption(const ByteString& csEntry) {
+WideString CPDF_FormControl::GetCaption(const ByteString& csEntry) const {
   return GetMK().GetCaption(csEntry);
 }
 
@@ -195,15 +166,15 @@
   return GetMK().GetIcon(csEntry);
 }
 
-CPDF_IconFit CPDF_FormControl::GetIconFit() {
+CPDF_IconFit CPDF_FormControl::GetIconFit() const {
   return GetMK().GetIconFit();
 }
 
-int CPDF_FormControl::GetTextPosition() {
+int CPDF_FormControl::GetTextPosition() const {
   return GetMK().GetTextPosition();
 }
 
-CPDF_Action CPDF_FormControl::GetAction() {
+CPDF_Action CPDF_FormControl::GetAction() const {
   if (!m_pWidgetDict)
     return CPDF_Action(nullptr);
 
@@ -214,7 +185,7 @@
   return CPDF_Action(pObj ? pObj->GetDict() : nullptr);
 }
 
-CPDF_AAction CPDF_FormControl::GetAdditionalAction() {
+CPDF_AAction CPDF_FormControl::GetAdditionalAction() const {
   if (!m_pWidgetDict)
     return CPDF_AAction(nullptr);
 
@@ -223,7 +194,7 @@
   return m_pField->GetAdditionalAction();
 }
 
-CPDF_DefaultAppearance CPDF_FormControl::GetDefaultAppearance() {
+CPDF_DefaultAppearance CPDF_FormControl::GetDefaultAppearance() const {
   if (!m_pWidgetDict)
     return CPDF_DefaultAppearance();
 
@@ -276,7 +247,7 @@
   return nullptr;
 }
 
-int CPDF_FormControl::GetControlAlignment() {
+int CPDF_FormControl::GetControlAlignment() const {
   if (!m_pWidgetDict)
     return 0;
   if (m_pWidgetDict->KeyExist("Q"))
diff --git a/core/fpdfdoc/cpdf_formcontrol.h b/core/fpdfdoc/cpdf_formcontrol.h
index d29be14..b89a08b 100644
--- a/core/fpdfdoc/cpdf_formcontrol.h
+++ b/core/fpdfdoc/cpdf_formcontrol.h
@@ -50,21 +50,15 @@
   CPDF_Dictionary* GetWidget() const { return m_pWidgetDict.Get(); }
   CFX_FloatRect GetRect() const;
 
-  void DrawControl(CFX_RenderDevice* pDevice,
-                   CFX_Matrix* pMatrix,
-                   CPDF_Page* pPage,
-                   CPDF_Annot::AppearanceMode mode,
-                   const CPDF_RenderOptions* pOptions);
-
-  ByteString GetCheckedAPState();
+  ByteString GetCheckedAPState() const;
   WideString GetExportValue() const;
 
   bool IsChecked() const;
   bool IsDefaultChecked() const;
 
-  HighlightingMode GetHighlightingMode();
+  HighlightingMode GetHighlightingMode() const;
   bool HasMKEntry(const ByteString& csEntry) const;
-  int GetRotation();
+  int GetRotation() const;
 
   FX_ARGB GetBorderColor(int& iColorType) { return GetColor(iColorType, "BC"); }
 
@@ -88,22 +82,22 @@
     GetOriginalColor(iColorType, fc, "BG");
   }
 
-  WideString GetNormalCaption() { return GetCaption("CA"); }
-  WideString GetRolloverCaption() { return GetCaption("RC"); }
-  WideString GetDownCaption() { return GetCaption("AC"); }
+  WideString GetNormalCaption() const { return GetCaption("CA"); }
+  WideString GetRolloverCaption() const { return GetCaption("RC"); }
+  WideString GetDownCaption() const { return GetCaption("AC"); }
 
   CPDF_Stream* GetNormalIcon() { return GetIcon("I"); }
   CPDF_Stream* GetRolloverIcon() { return GetIcon("RI"); }
   CPDF_Stream* GetDownIcon() { return GetIcon("IX"); }
-  CPDF_IconFit GetIconFit();
+  CPDF_IconFit GetIconFit() const;
 
-  int GetTextPosition();
-  CPDF_Action GetAction();
-  CPDF_AAction GetAdditionalAction();
-  CPDF_DefaultAppearance GetDefaultAppearance();
+  int GetTextPosition() const;
+  CPDF_Action GetAction() const;
+  CPDF_AAction GetAdditionalAction() const;
+  CPDF_DefaultAppearance GetDefaultAppearance() const;
 
   CPDF_Font* GetDefaultControlFont();
-  int GetControlAlignment();
+  int GetControlAlignment() const;
 
   ByteString GetOnStateName() const;
   void CheckControl(bool bChecked);
@@ -115,7 +109,7 @@
                         float fc[4],
                         const ByteString& csEntry);
 
-  WideString GetCaption(const ByteString& csEntry);
+  WideString GetCaption(const ByteString& csEntry) const;
   CPDF_Stream* GetIcon(const ByteString& csEntry);
   CPDF_ApSettings GetMK() const;
 
