IFWL method and param cleanup

Cleaning up virtual methods, unused methods, and visibility.

Review-Url: https://codereview.chromium.org/2491103002
diff --git a/xfa/fwl/core/cfwl_combobox.cpp b/xfa/fwl/core/cfwl_combobox.cpp
index bd045f4..1a75927 100644
--- a/xfa/fwl/core/cfwl_combobox.cpp
+++ b/xfa/fwl/core/cfwl_combobox.cpp
@@ -127,11 +127,6 @@
                      : FWL_Error::Indefinite;
 }
 
-FWL_Error CFWL_ComboBox::EditDoClipboard(int32_t iCmd) {
-  return GetWidget() ? ToComboBox(GetWidget())->EditDoClipboard(iCmd)
-                     : FWL_Error::Indefinite;
-}
-
 bool CFWL_ComboBox::EditRedo(const IFDE_TxtEdtDoRecord* pRecord) {
   return GetWidget() ? ToComboBox(GetWidget())->EditRedo(pRecord) : false;
 }
diff --git a/xfa/fwl/core/cfwl_combobox.h b/xfa/fwl/core/cfwl_combobox.h
index 8486471..2467119 100644
--- a/xfa/fwl/core/cfwl_combobox.h
+++ b/xfa/fwl/core/cfwl_combobox.h
@@ -37,7 +37,6 @@
   int32_t GetEditSelRange(int32_t nIndex, int32_t& nStart);
   int32_t GetEditLimit();
   FWL_Error SetEditLimit(int32_t nLimit);
-  FWL_Error EditDoClipboard(int32_t iCmd);
   bool EditRedo(const IFDE_TxtEdtDoRecord* pRecord);
   bool EditUndo(const IFDE_TxtEdtDoRecord* pRecord);
   FWL_Error SetMaxListHeight(FX_FLOAT fMaxHeight);
diff --git a/xfa/fwl/core/cfwl_edit.cpp b/xfa/fwl/core/cfwl_edit.cpp
index 579442b..c7acf18 100644
--- a/xfa/fwl/core/cfwl_edit.cpp
+++ b/xfa/fwl/core/cfwl_edit.cpp
@@ -17,10 +17,6 @@
   return static_cast<IFWL_Edit*>(widget);
 }
 
-const IFWL_Edit* ToEdit(const IFWL_Widget* widget) {
-  return static_cast<const IFWL_Edit*>(widget);
-}
-
 }  // namespace
 
 CFWL_Edit::CFWL_Edit(const IFWL_App* app) : CFWL_Widget(app) {}
@@ -36,202 +32,41 @@
   CFWL_Widget::Initialize();
 }
 
-FWL_Error CFWL_Edit::SetText(const CFX_WideString& wsText) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->SetText(wsText);
+void CFWL_Edit::SetText(const CFX_WideString& wsText) {
+  if (GetWidget())
+    ToEdit(GetWidget())->SetText(wsText);
 }
 
-int32_t CFWL_Edit::GetTextLength() const {
-  if (!GetWidget())
-    return 0;
-  return ToEdit(GetWidget())->GetTextLength();
-}
-
-FWL_Error CFWL_Edit::GetText(CFX_WideString& wsText,
-                             int32_t nStart,
-                             int32_t nCount) const {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->GetText(wsText, nStart, nCount);
-}
-
-FWL_Error CFWL_Edit::ClearText() {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->ClearText();
-}
-
-int32_t CFWL_Edit::GetCaretPos() const {
-  if (!GetWidget())
-    return -1;
-  return ToEdit(GetWidget())->GetCaretPos();
-}
-
-int32_t CFWL_Edit::SetCaretPos(int32_t nIndex, bool bBefore) {
-  if (!GetWidget())
-    return -1;
-  return ToEdit(GetWidget())->SetCaretPos(nIndex, bBefore);
-}
-
-int32_t CFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) {
-  if (!GetWidget())
-    return -1;
-  ToEdit(GetWidget())->AddSelRange(nStart, nCount);
-  int32_t pos = 0;
-  int32_t sum = ToEdit(GetWidget())->GetTextLength();
-  if (nCount == -1) {
-    pos = sum;
-  } else {
-    pos = nStart + nCount;
-  }
-  return ToEdit(GetWidget())->SetCaretPos(pos);
+void CFWL_Edit::GetText(CFX_WideString& wsText,
+                        int32_t nStart,
+                        int32_t nCount) {
+  if (GetWidget())
+    ToEdit(GetWidget())->GetText(wsText, nStart, nCount);
 }
 
 int32_t CFWL_Edit::CountSelRanges() {
-  if (!GetWidget())
-    return 0;
-  return ToEdit(GetWidget())->CountSelRanges();
+  return GetWidget() ? ToEdit(GetWidget())->CountSelRanges() : 0;
 }
 
 int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) {
-  if (!GetWidget())
-    return 0;
-  return ToEdit(GetWidget())->GetSelRange(nIndex, nStart);
-}
-
-FWL_Error CFWL_Edit::ClearSelections() {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->ClearSelections();
+  return GetWidget() ? ToEdit(GetWidget())->GetSelRange(nIndex, nStart) : 0;
 }
 
 int32_t CFWL_Edit::GetLimit() {
-  if (!GetWidget())
-    return -1;
-  return ToEdit(GetWidget())->GetLimit();
+  return GetWidget() ? ToEdit(GetWidget())->GetLimit() : -1;
 }
 
-FWL_Error CFWL_Edit::SetLimit(int32_t nLimit) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->SetLimit(nLimit);
+void CFWL_Edit::SetLimit(int32_t nLimit) {
+  if (GetWidget())
+    ToEdit(GetWidget())->SetLimit(nLimit);
 }
 
-FWL_Error CFWL_Edit::SetAliasChar(FX_WCHAR wAlias) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->SetAliasChar(wAlias);
-}
-
-FWL_Error CFWL_Edit::Insert(int32_t nStart,
-                            const FX_WCHAR* lpText,
-                            int32_t nLen) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->Insert(nStart, lpText, nLen);
-}
-
-FWL_Error CFWL_Edit::DeleteSelections() {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->DeleteSelections();
-}
-
-FWL_Error CFWL_Edit::DeleteRange(int32_t nStart, int32_t nCount) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->DeleteRange(nStart, nCount);
-}
-
-FWL_Error CFWL_Edit::Replace(int32_t nStart,
-                             int32_t nLen,
-                             const CFX_WideStringC& wsReplace) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->Replace(nStart, nLen, wsReplace);
-}
-
-FWL_Error CFWL_Edit::DoClipboard(int32_t iCmd) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->DoClipboard(iCmd);
-}
-
-bool CFWL_Edit::Redo(const IFDE_TxtEdtDoRecord* pRecord) {
-  return GetWidget() && ToEdit(GetWidget())->Redo(pRecord);
-}
-
-bool CFWL_Edit::Undo(const IFDE_TxtEdtDoRecord* pRecord) {
-  return GetWidget() && ToEdit(GetWidget())->Undo(pRecord);
-}
-
-FWL_Error CFWL_Edit::SetTabWidth(FX_FLOAT fTabWidth, bool bEquidistant) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->SetTabWidth(fTabWidth, bEquidistant);
-}
-
-FWL_Error CFWL_Edit::SetNumberRange(int32_t iMin, int32_t iMax) {
-  if (iMin > iMax)
-    return FWL_Error::ParameterInvalid;
-  return ToEdit(GetWidget())->SetNumberRange(iMin, iMax);
-}
-
-FWL_Error CFWL_Edit::SetBackColor(uint32_t dwColor) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->SetBackgroundColor(dwColor);
-}
-
-FWL_Error CFWL_Edit::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) {
-  if (!GetWidget())
-    return FWL_Error::Indefinite;
-  return ToEdit(GetWidget())->SetFont(wsFont, fSize);
-}
-
-bool CFWL_Edit::CanUndo() {
-  return ToEdit(GetWidget())->CanUndo();
-}
-
-bool CFWL_Edit::CanRedo() {
-  return ToEdit(GetWidget())->CanRedo();
-}
-
-bool CFWL_Edit::Undo() {
-  return ToEdit(GetWidget())->Undo();
-}
-
-bool CFWL_Edit::Redo() {
-  return ToEdit(GetWidget())->Undo();
-}
-
-bool CFWL_Edit::Copy(CFX_WideString& wsCopy) {
-  return ToEdit(GetWidget())->Copy(wsCopy);
-}
-
-bool CFWL_Edit::Cut(CFX_WideString& wsCut) {
-  return ToEdit(GetWidget())->Cut(wsCut);
-}
-
-bool CFWL_Edit::Paste(const CFX_WideString& wsPaste) {
-  return ToEdit(GetWidget())->Paste(wsPaste);
-}
-
-bool CFWL_Edit::Delete() {
-  return ToEdit(GetWidget())->Delete();
+void CFWL_Edit::SetAliasChar(FX_WCHAR wAlias) {
+  if (GetWidget())
+    ToEdit(GetWidget())->SetAliasChar(wAlias);
 }
 
 void CFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) {
-  return ToEdit(GetWidget())->SetScrollOffset(fScrollOffset);
-}
-
-bool CFWL_Edit::GetSuggestWords(CFX_PointF pointf,
-                                std::vector<CFX_ByteString>& sSuggest) {
-  return ToEdit(GetWidget())->GetSuggestWords(pointf, sSuggest);
-}
-
-bool CFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf,
-                                      const CFX_ByteStringC& bsReplace) {
-  return ToEdit(GetWidget())->ReplaceSpellCheckWord(pointf, bsReplace);
+  if (GetWidget())
+    ToEdit(GetWidget())->SetScrollOffset(fScrollOffset);
 }
diff --git a/xfa/fwl/core/cfwl_edit.h b/xfa/fwl/core/cfwl_edit.h
index 2f2983b..a3a77a7 100644
--- a/xfa/fwl/core/cfwl_edit.h
+++ b/xfa/fwl/core/cfwl_edit.h
@@ -21,48 +21,14 @@
 
   void Initialize();
 
-  FWL_Error SetText(const CFX_WideString& wsText);
-  int32_t GetTextLength() const;
-  FWL_Error GetText(CFX_WideString& wsText,
-                    int32_t nStart = 0,
-                    int32_t nCount = -1) const;
-  FWL_Error ClearText();
-  int32_t GetCaretPos() const;
-  int32_t SetCaretPos(int32_t nIndex, bool bBefore = true);
-  int32_t AddSelRange(int32_t nStart, int32_t nCount = -1);
+  void SetText(const CFX_WideString& wsText);
+  void GetText(CFX_WideString& wsText, int32_t nStart = 0, int32_t nCount = -1);
   int32_t CountSelRanges();
   int32_t GetSelRange(int32_t nIndex, int32_t& nStart);
-  FWL_Error ClearSelections();
   int32_t GetLimit();
-  FWL_Error SetLimit(int32_t nLimit);
-  FWL_Error SetAliasChar(FX_WCHAR wAlias);
-  FWL_Error SetFormatString(const CFX_WideString& wsFormat);
-  FWL_Error Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLen);
-  FWL_Error DeleteSelections();
-  FWL_Error DeleteRange(int32_t nStart, int32_t nCount = -1);
-  FWL_Error Replace(int32_t nStart,
-                    int32_t nLen,
-                    const CFX_WideStringC& wsReplace);
-  FWL_Error DoClipboard(int32_t iCmd);
-  bool Redo(const IFDE_TxtEdtDoRecord* pRecord);
-  bool Undo(const IFDE_TxtEdtDoRecord* pRecord);
-  FWL_Error SetTabWidth(FX_FLOAT fTabWidth, bool bEquidistant);
-  FWL_Error SetNumberRange(int32_t iMin, int32_t iMax);
-  FWL_Error SetBackColor(uint32_t dwColor);
-  FWL_Error SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize);
-  bool CanUndo();
-  bool CanRedo();
-  bool Undo();
-  bool Redo();
-  bool Copy(CFX_WideString& wsCopy);
-  bool Cut(CFX_WideString& wsCut);
-  bool Paste(const CFX_WideString& wsPaste);
-  bool Delete();
+  void SetLimit(int32_t nLimit);
+  void SetAliasChar(FX_WCHAR wAlias);
   void SetScrollOffset(FX_FLOAT fScrollOffset);
-  bool GetSuggestWords(CFX_PointF pointf,
-                       std::vector<CFX_ByteString>& sSuggest);
-  bool ReplaceSpellCheckWord(CFX_PointF pointf,
-                             const CFX_ByteStringC& bsReplace);
 };
 
 #endif  // XFA_FWL_CORE_CFWL_EDIT_H_
diff --git a/xfa/fwl/core/cfwl_event.h b/xfa/fwl/core/cfwl_event.h
index ba8a4d6..0052c4e 100644
--- a/xfa/fwl/core/cfwl_event.h
+++ b/xfa/fwl/core/cfwl_event.h
@@ -41,7 +41,6 @@
   DrawItem,
   DropDown,
   EditChanged,
-  GetSuggestedWords,
   HoverChanged,
   Idle,
   Key,
diff --git a/xfa/fwl/core/ifwl_barcode.cpp b/xfa/fwl/core/ifwl_barcode.cpp
index 518ed4a..c918b3b 100644
--- a/xfa/fwl/core/ifwl_barcode.cpp
+++ b/xfa/fwl/core/ifwl_barcode.cpp
@@ -45,8 +45,8 @@
       return;
     }
     CFX_Matrix mt;
-    mt.e = m_rtClient.left;
-    mt.f = m_rtClient.top;
+    mt.e = GetRTClient().left;
+    mt.f = GetRTClient().top;
     if (pMatrix) {
       mt.Concat(*pMatrix);
     }
@@ -69,8 +69,8 @@
   if (!m_pBarcodeEngine)
     return;
   CFX_WideString wsText;
-  if (GetText(wsText) != FWL_Error::Succeeded)
-    return;
+  GetText(wsText);
+
   CFWL_ThemePart part;
   part.m_pWidget = this;
   IFWL_ThemeProvider* pTheme = GetAvailableTheme();
@@ -90,8 +90,8 @@
   if (pFontColor) {
     m_pBarcodeEngine->SetFontColor(*pFontColor);
   }
-  m_pBarcodeEngine->SetHeight(int32_t(m_rtClient.height));
-  m_pBarcodeEngine->SetWidth(int32_t(m_rtClient.width));
+  m_pBarcodeEngine->SetHeight(int32_t(GetRTClient().height));
+  m_pBarcodeEngine->SetWidth(int32_t(GetRTClient().width));
   uint32_t dwAttributeMask = pData->GetBarcodeAttributeMask();
   if (dwAttributeMask & FWL_BCDATTRIBUTE_CHARENCODING) {
     m_pBarcodeEngine->SetCharEncoding(pData->GetCharEncoding());
@@ -155,10 +155,10 @@
   m_type = type;
   m_dwStatus = XFA_BCS_NeedUpdate;
 }
-FWL_Error IFWL_Barcode::SetText(const CFX_WideString& wsText) {
+void IFWL_Barcode::SetText(const CFX_WideString& wsText) {
   m_pBarcodeEngine.reset();
   m_dwStatus = XFA_BCS_NeedUpdate;
-  return IFWL_Edit::SetText(wsText);
+  IFWL_Edit::SetText(wsText);
 }
 bool IFWL_Barcode::IsProtectedType() {
   if (!m_pBarcodeEngine) {
diff --git a/xfa/fwl/core/ifwl_barcode.h b/xfa/fwl/core/ifwl_barcode.h
index 28025fc..1d88c32 100644
--- a/xfa/fwl/core/ifwl_barcode.h
+++ b/xfa/fwl/core/ifwl_barcode.h
@@ -9,6 +9,7 @@
 
 #include <memory>
 
+#include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_edit.h"
 #include "xfa/fwl/core/ifwl_scrollbar.h"
 #include "xfa/fxbarcode/BC_Library.h"
@@ -37,7 +38,7 @@
   FWL_BCDATTRIBUTE_TRUNCATED = 1 << 12
 };
 
-class IFWL_BarcodeDP : public IFWL_EditDP {
+class IFWL_BarcodeDP : public IFWL_DataProvider {
  public:
   virtual BC_CHAR_ENCODING GetCharEncoding() const = 0;
   virtual int32_t GetModuleHeight() const = 0;
@@ -66,9 +67,11 @@
   void Update() override;
   void DrawWidget(CFX_Graphics* pGraphics,
                   const CFX_Matrix* pMatrix = nullptr) override;
-  FWL_Error SetText(const CFX_WideString& wsText) override;
   void OnProcessEvent(CFWL_Event* pEvent) override;
 
+  // IFWL_Edit
+  void SetText(const CFX_WideString& wsText) override;
+
   void SetType(BC_TYPE type);
   bool IsProtectedType();
 
diff --git a/xfa/fwl/core/ifwl_combobox.cpp b/xfa/fwl/core/ifwl_combobox.cpp
index b0fc9a3..e8534a4 100644
--- a/xfa/fwl/core/ifwl_combobox.cpp
+++ b/xfa/fwl/core/ifwl_combobox.cpp
@@ -286,8 +286,10 @@
                                      int32_t nStart,
                                      int32_t nCount) const {
   if (m_pEdit) {
-    return m_pEdit->GetText(wsText, nStart, nCount);
-  } else if (m_pListBox) {
+    m_pEdit->GetText(wsText, nStart, nCount);
+    return FWL_Error::Succeeded;
+  }
+  if (m_pListBox) {
     IFWL_ComboBoxDP* pData =
         static_cast<IFWL_ComboBoxDP*>(m_pProperties->m_pDataProvider);
     CFWL_ListItem* hItem = pData->GetItem(this, m_iCurSel);
@@ -320,13 +322,8 @@
 FWL_Error IFWL_ComboBox::SetEditLimit(int32_t nLimit) {
   if (!m_pEdit)
     return FWL_Error::Indefinite;
-  return m_pEdit->SetLimit(nLimit);
-}
-
-FWL_Error IFWL_ComboBox::EditDoClipboard(int32_t iCmd) {
-  if (!m_pEdit)
-    return FWL_Error::Indefinite;
-  return m_pEdit->DoClipboard(iCmd);
+  m_pEdit->SetLimit(nLimit);
+  return FWL_Error::Succeeded;
 }
 
 bool IFWL_ComboBox::EditRedo(const IFDE_TxtEdtDoRecord* pRecord) {
@@ -402,15 +399,18 @@
 }
 
 bool IFWL_ComboBox::EditSelectAll() {
-  return m_pEdit->AddSelRange(0) == FWL_Error::Succeeded;
+  m_pEdit->AddSelRange(0);
+  return true;
 }
 
 bool IFWL_ComboBox::EditDelete() {
-  return m_pEdit->ClearText() == FWL_Error::Succeeded;
+  m_pEdit->ClearText();
+  return true;
 }
 
 bool IFWL_ComboBox::EditDeSelect() {
-  return m_pEdit->ClearSelections() == FWL_Error::Succeeded;
+  m_pEdit->ClearSelections();
+  return true;
 }
 
 FWL_Error IFWL_ComboBox::GetBBox(CFX_RectF& rect) {
diff --git a/xfa/fwl/core/ifwl_combobox.h b/xfa/fwl/core/ifwl_combobox.h
index e5065db..0b586b4 100644
--- a/xfa/fwl/core/ifwl_combobox.h
+++ b/xfa/fwl/core/ifwl_combobox.h
@@ -110,7 +110,6 @@
   int32_t GetEditSelRange(int32_t nIndex, int32_t& nStart);
   int32_t GetEditLimit();
   FWL_Error SetEditLimit(int32_t nLimit);
-  FWL_Error EditDoClipboard(int32_t iCmd);
   bool EditRedo(const IFDE_TxtEdtDoRecord* pRecord);
   bool EditUndo(const IFDE_TxtEdtDoRecord* pRecord);
   IFWL_ListBox* GetListBoxt();
diff --git a/xfa/fwl/core/ifwl_comboedit.cpp b/xfa/fwl/core/ifwl_comboedit.cpp
index a8b04fd..2a7ac90 100644
--- a/xfa/fwl/core/ifwl_comboedit.cpp
+++ b/xfa/fwl/core/ifwl_comboedit.cpp
@@ -19,7 +19,7 @@
 
 void IFWL_ComboEdit::ClearSelected() {
   ClearSelections();
-  Repaint(&m_rtClient);
+  Repaint(&GetRTClient());
 }
 
 void IFWL_ComboEdit::SetSelected() {
@@ -29,7 +29,7 @@
 }
 
 void IFWL_ComboEdit::EndCaret() {
-  m_pEdtEngine->MoveCaretPos(MC_End);
+  GetTxtEdtEngine()->MoveCaretPos(MC_End);
 }
 
 void IFWL_ComboEdit::FlagFocus(bool bSet) {
diff --git a/xfa/fwl/core/ifwl_datetimepicker.cpp b/xfa/fwl/core/ifwl_datetimepicker.cpp
index 31e5b65..ff2dbfb 100644
--- a/xfa/fwl/core/ifwl_datetimepicker.cpp
+++ b/xfa/fwl/core/ifwl_datetimepicker.cpp
@@ -204,19 +204,20 @@
   if (!m_pEdit)
     return FWL_Error::Indefinite;
 
-  FWL_Error iRet = m_pEdit->SetText(wsText);
+  m_pEdit->SetText(wsText);
   Repaint(&m_rtClient);
   CFWL_Event_DtpEditChanged ev;
   ev.m_wsText = wsText;
   DispatchEvent(&ev);
-  return iRet;
+  return FWL_Error::Succeeded;
 }
 
 FWL_Error IFWL_DateTimePicker::GetEditText(CFX_WideString& wsText,
                                            int32_t nStart,
                                            int32_t nCount) const {
   if (m_pEdit) {
-    return m_pEdit->GetText(wsText, nStart, nCount);
+    m_pEdit->GetText(wsText, nStart, nCount);
+    return FWL_Error::Succeeded;
   }
   return FWL_Error::Indefinite;
 }
@@ -267,15 +268,18 @@
 }
 
 bool IFWL_DateTimePicker::SelectAll() {
-  return m_pEdit->AddSelRange(0) == FWL_Error::Succeeded;
+  m_pEdit->AddSelRange(0);
+  return true;
 }
 
 bool IFWL_DateTimePicker::Delete() {
-  return m_pEdit->ClearText() == FWL_Error::Succeeded;
+  m_pEdit->ClearText();
+  return true;
 }
 
 bool IFWL_DateTimePicker::DeSelect() {
-  return m_pEdit->ClearSelections() == FWL_Error::Succeeded;
+  m_pEdit->ClearSelections();
+  return true;
 }
 
 FWL_Error IFWL_DateTimePicker::GetBBox(CFX_RectF& rect) {
@@ -294,7 +298,8 @@
 }
 
 FWL_Error IFWL_DateTimePicker::SetEditLimit(int32_t nLimit) {
-  return m_pEdit->SetLimit(nLimit);
+  m_pEdit->SetLimit(nLimit);
+  return FWL_Error::Succeeded;
 }
 
 void IFWL_DateTimePicker::ModifyEditStylesEx(uint32_t dwStylesExAdded,
diff --git a/xfa/fwl/core/ifwl_edit.cpp b/xfa/fwl/core/ifwl_edit.cpp
index 1679a5b..aa3fdce 100644
--- a/xfa/fwl/core/ifwl_edit.cpp
+++ b/xfa/fwl/core/ifwl_edit.cpp
@@ -62,14 +62,9 @@
       m_bLButtonDown(false),
       m_nSelStart(0),
       m_nLimit(-1),
-      m_fSpaceAbove(0),
-      m_fSpaceBelow(0),
       m_fFontSize(0),
       m_bSetRange(false),
-      m_iMin(-1),
       m_iMax(0xFFFFFFF),
-      m_backColor(0),
-      m_updateBackColor(false),
       m_iCurRecord(-1),
       m_iMaxRecord(128) {
   m_rtClient.Reset();
@@ -77,8 +72,6 @@
   m_rtStatic.Reset();
 
   InitCaret();
-  if (!m_pEdtEngine)
-    InitEngine();
 }
 
 IFWL_Edit::~IFWL_Edit() {
@@ -95,16 +88,15 @@
 void IFWL_Edit::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) {
   if (bAutoSize) {
     rect.Set(0, 0, 0, 0);
-    if (m_pEdtEngine) {
-      int32_t iTextLen = m_pEdtEngine->GetTextLength();
-      if (iTextLen > 0) {
-        CFX_WideString wsText;
-        m_pEdtEngine->GetText(wsText, 0);
-        CFX_SizeF sz = CalcTextSize(
-            wsText, m_pProperties->m_pThemeProvider,
-            !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine));
-        rect.Set(0, 0, sz.x, sz.y);
-      }
+
+    int32_t iTextLen = m_EdtEngine.GetTextLength();
+    if (iTextLen > 0) {
+      CFX_WideString wsText;
+      m_EdtEngine.GetText(wsText, 0);
+      CFX_SizeF sz = CalcTextSize(
+          wsText, m_pProperties->m_pThemeProvider,
+          !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine));
+      rect.Set(0, 0, sz.x, sz.y);
     }
     IFWL_Widget::GetWidgetRect(rect, true);
   } else {
@@ -180,10 +172,10 @@
   FX_FLOAT fEndX = 0.0f;
   FX_FLOAT fY = 0.0f;
   FX_FLOAT fStep = 0.0f;
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   CFX_RectFArray rectArray;
   CFX_RectF rectText;
-  const FDE_TXTEDTPARAMS* txtEdtParams = m_pEdtEngine->GetEditParams();
+  const FDE_TXTEDTPARAMS* txtEdtParams = m_EdtEngine.GetEditParams();
   FX_FLOAT fAsent = (FX_FLOAT)txtEdtParams->pFont->GetAscent() *
                     txtEdtParams->fFontSize / 1000;
   pPage->CalcRangeRectArray(nStart, nCount, rectArray);
@@ -196,69 +188,6 @@
     AddSquigglyPath(&PathData, fStartX, fEndX, fY, fStep);
   }
 }
-int32_t IFWL_Edit::GetWordAtPoint(CFX_PointF pointf, int32_t& nCount) {
-  return 0;
-}
-bool IFWL_Edit::GetSuggestWords(CFX_PointF pointf,
-                                std::vector<CFX_ByteString>& sSuggest) {
-  int32_t nWordCount = 0;
-  int32_t nWordStart = GetWordAtPoint(pointf, nWordCount);
-  if (nWordCount < 1) {
-    return false;
-  }
-  CFX_WideString wsSpell;
-  GetText(wsSpell, nWordStart, nWordCount);
-  CFX_ByteString sLatinWord;
-  for (int i = 0; i < nWordCount; i++) {
-    if (!FX_EDIT_ISLATINWORD(wsSpell[i])) {
-      break;
-    }
-    sLatinWord += (FX_CHAR)wsSpell[i];
-  }
-  if (sLatinWord.IsEmpty()) {
-    return false;
-  }
-  CFWL_EvtEdtCheckWord checkWordEvent;
-  checkWordEvent.m_pSrcTarget = this;
-  checkWordEvent.bsWord = sLatinWord;
-  checkWordEvent.bCheckWord = true;
-  DispatchEvent(&checkWordEvent);
-  if (checkWordEvent.bCheckWord) {
-    return false;
-  }
-  CFWL_EvtEdtGetSuggestWords suggestWordsEvent;
-  suggestWordsEvent.m_pSrcTarget = this;
-  suggestWordsEvent.bsWord = sLatinWord;
-  suggestWordsEvent.bsArraySuggestWords = sSuggest;
-  suggestWordsEvent.bSuggestWords = false;
-  DispatchEvent(&checkWordEvent);
-  return suggestWordsEvent.bSuggestWords;
-}
-bool IFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf,
-                                      const CFX_ByteStringC& bsReplace) {
-  int32_t nWordCount = 0;
-  int32_t nWordStart = GetWordAtPoint(pointf, nWordCount);
-  if (nWordCount < 1) {
-    return false;
-  }
-  CFX_WideString wsSpell;
-  GetText(wsSpell, nWordStart, nWordCount);
-  for (int i = 0; i < nWordCount; i++) {
-    if (!FX_EDIT_ISLATINWORD(wsSpell[i])) {
-      nWordCount = i;
-      break;
-    }
-  }
-  int32_t nDestLen = bsReplace.GetLength();
-  CFX_WideString wsDest;
-  FX_WCHAR* pBuffer = wsDest.GetBuffer(nDestLen);
-  for (int32_t i = 0; i < nDestLen; i++) {
-    pBuffer[i] = bsReplace[i];
-  }
-  wsDest.ReleaseBuffer(nDestLen);
-  Replace(nWordStart, nWordCount, wsDest.AsStringC());
-  return true;
-}
 void IFWL_Edit::DrawSpellCheck(CFX_Graphics* pGraphics,
                                const CFX_Matrix* pMatrix) {
   pGraphics->SaveGraphState();
@@ -329,9 +258,9 @@
   if (!m_pWidgetMgr->IsFormDisabled()) {
     DrawTextBk(pGraphics, pTheme, pMatrix);
   }
-  if (m_pEdtEngine) {
-    DrawContent(pGraphics, pTheme, pMatrix);
-  }
+
+  DrawContent(pGraphics, pTheme, pMatrix);
+
   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) &&
       !(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly)) {
     DrawSpellCheck(pGraphics, pMatrix);
@@ -358,154 +287,55 @@
   m_pProperties->m_pThemeProvider = pThemeProvider;
 }
 
-FWL_Error IFWL_Edit::SetText(const CFX_WideString& wsText) {
-  m_pEdtEngine->SetText(wsText);
-  return FWL_Error::Succeeded;
+void IFWL_Edit::SetText(const CFX_WideString& wsText) {
+  m_EdtEngine.SetText(wsText);
 }
 
 int32_t IFWL_Edit::GetTextLength() const {
-  if (!m_pEdtEngine)
-    return -1;
-  return m_pEdtEngine->GetTextLength();
+  return m_EdtEngine.GetTextLength();
 }
 
-FWL_Error IFWL_Edit::GetText(CFX_WideString& wsText,
-                             int32_t nStart,
-                             int32_t nCount) const {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  m_pEdtEngine->GetText(wsText, nStart, nCount);
-  return FWL_Error::Succeeded;
+void IFWL_Edit::GetText(CFX_WideString& wsText,
+                        int32_t nStart,
+                        int32_t nCount) {
+  m_EdtEngine.GetText(wsText, nStart, nCount);
 }
 
-FWL_Error IFWL_Edit::ClearText() {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  m_pEdtEngine->ClearText();
-  return FWL_Error::Succeeded;
+void IFWL_Edit::ClearText() {
+  m_EdtEngine.ClearText();
 }
 
-int32_t IFWL_Edit::GetCaretPos() const {
-  if (!m_pEdtEngine)
-    return -1;
-  return m_pEdtEngine->GetCaretPos();
-}
-
-int32_t IFWL_Edit::SetCaretPos(int32_t nIndex, bool bBefore) {
-  if (!m_pEdtEngine)
-    return -1;
-  return m_pEdtEngine->SetCaretPos(nIndex, bBefore);
-}
-
-FWL_Error IFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  m_pEdtEngine->AddSelRange(nStart, nCount);
-  return FWL_Error::Succeeded;
+void IFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) {
+  m_EdtEngine.AddSelRange(nStart, nCount);
 }
 
 int32_t IFWL_Edit::CountSelRanges() {
-  if (!m_pEdtEngine)
-    return 0;
-  return m_pEdtEngine->CountSelRanges();
+  return m_EdtEngine.CountSelRanges();
 }
 
 int32_t IFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) {
-  if (!m_pEdtEngine)
-    return -1;
-  return m_pEdtEngine->GetSelRange(nIndex, nStart);
+  return m_EdtEngine.GetSelRange(nIndex, nStart);
 }
 
-FWL_Error IFWL_Edit::ClearSelections() {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  m_pEdtEngine->ClearSelection();
-  return FWL_Error::Succeeded;
+void IFWL_Edit::ClearSelections() {
+  m_EdtEngine.ClearSelection();
 }
 
 int32_t IFWL_Edit::GetLimit() {
   return m_nLimit;
 }
 
-FWL_Error IFWL_Edit::SetLimit(int32_t nLimit) {
+void IFWL_Edit::SetLimit(int32_t nLimit) {
   m_nLimit = nLimit;
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  m_pEdtEngine->SetLimit(nLimit);
-  return FWL_Error::Succeeded;
+  m_EdtEngine.SetLimit(nLimit);
 }
 
-FWL_Error IFWL_Edit::SetAliasChar(FX_WCHAR wAlias) {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  m_pEdtEngine->SetAliasChar(wAlias);
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::Insert(int32_t nStart,
-                            const FX_WCHAR* lpText,
-                            int32_t nLen) {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) ||
-      (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
-    return FWL_Error::Indefinite;
-  }
-  m_pEdtEngine->Insert(nStart, lpText, nLen);
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::DeleteSelections() {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  int32_t iCount = m_pEdtEngine->CountSelRanges();
-  if (iCount > 0)
-    m_pEdtEngine->Delete(-1);
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::DeleteRange(int32_t nStart, int32_t nCount) {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  m_pEdtEngine->DeleteRange(nStart, nCount);
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::Replace(int32_t nStart,
-                             int32_t nLen,
-                             const CFX_WideStringC& wsReplace) {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  m_pEdtEngine->Replace(nStart, nLen, CFX_WideString(wsReplace));
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::DoClipboard(int32_t iCmd) {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_ReadOnly) ||
-      (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
-    return FWL_Error::Succeeded;
-  }
-  return FWL_Error::Indefinite;
+void IFWL_Edit::SetAliasChar(FX_WCHAR wAlias) {
+  m_EdtEngine.SetAliasChar(wAlias);
 }
 
 bool IFWL_Edit::Copy(CFX_WideString& wsCopy) {
-  if (!m_pEdtEngine)
-    return false;
-
-  int32_t nCount = m_pEdtEngine->CountSelRanges();
+  int32_t nCount = m_EdtEngine.CountSelRanges();
   if (nCount == 0)
     return false;
 
@@ -513,8 +343,8 @@
   CFX_WideString wsTemp;
   int32_t nStart, nLength;
   for (int32_t i = 0; i < nCount; i++) {
-    nLength = m_pEdtEngine->GetSelRange(i, nStart);
-    m_pEdtEngine->GetText(wsTemp, nStart, nLength);
+    nLength = m_EdtEngine.GetSelRange(i, nStart);
+    m_EdtEngine.GetText(wsTemp, nStart, nLength);
     wsCopy += wsTemp;
     wsTemp.clear();
   }
@@ -522,10 +352,7 @@
 }
 
 bool IFWL_Edit::Cut(CFX_WideString& wsCut) {
-  if (!m_pEdtEngine)
-    return false;
-
-  int32_t nCount = m_pEdtEngine->CountSelRanges();
+  int32_t nCount = m_EdtEngine.CountSelRanges();
   if (nCount == 0)
     return false;
 
@@ -533,22 +360,19 @@
   CFX_WideString wsTemp;
   int32_t nStart, nLength;
   for (int32_t i = 0; i < nCount; i++) {
-    nLength = m_pEdtEngine->GetSelRange(i, nStart);
-    m_pEdtEngine->GetText(wsTemp, nStart, nLength);
+    nLength = m_EdtEngine.GetSelRange(i, nStart);
+    m_EdtEngine.GetText(wsTemp, nStart, nLength);
     wsCut += wsTemp;
     wsTemp.clear();
   }
-  m_pEdtEngine->Delete(0);
+  m_EdtEngine.Delete(0);
   return true;
 }
 
 bool IFWL_Edit::Paste(const CFX_WideString& wsPaste) {
-  if (!m_pEdtEngine)
-    return false;
-
-  int32_t nCaret = m_pEdtEngine->GetCaretPos();
+  int32_t nCaret = m_EdtEngine.GetCaretPos();
   int32_t iError =
-      m_pEdtEngine->Insert(nCaret, wsPaste.c_str(), wsPaste.GetLength());
+      m_EdtEngine.Insert(nCaret, wsPaste.c_str(), wsPaste.GetLength());
   if (iError < 0) {
     ProcessInsertError(iError);
     return false;
@@ -556,32 +380,16 @@
   return true;
 }
 
-bool IFWL_Edit::Delete() {
-  if (!m_pEdtEngine)
-    return false;
-
-  int32_t nCount = m_pEdtEngine->CountSelRanges();
-  if (nCount < 1)
-    return false;
-
-  m_pEdtEngine->Delete(0);
-  return true;
-}
-
 bool IFWL_Edit::Redo(const IFDE_TxtEdtDoRecord* pRecord) {
-  if (!m_pEdtEngine)
-    return false;
   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo)
     return true;
-  return m_pEdtEngine->Redo(pRecord);
+  return m_EdtEngine.Redo(pRecord);
 }
 
 bool IFWL_Edit::Undo(const IFDE_TxtEdtDoRecord* pRecord) {
-  if (!m_pEdtEngine)
-    return false;
   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_NoRedoUndo)
     return true;
-  return m_pEdtEngine->Undo(pRecord);
+  return m_EdtEngine.Undo(pRecord);
 }
 
 bool IFWL_Edit::Undo() {
@@ -604,26 +412,8 @@
   return m_iCurRecord < pdfium::CollectionSize<int32_t>(m_DoRecords) - 1;
 }
 
-FWL_Error IFWL_Edit::SetTabWidth(FX_FLOAT fTabWidth, bool bEquidistant) {
-  if (!m_pEdtEngine)
-    return FWL_Error::Indefinite;
-
-  FDE_TXTEDTPARAMS* pParams = m_pEdtEngine->GetEditParams();
-  pParams->fTabWidth = fTabWidth;
-  pParams->bTabEquidistant = bEquidistant;
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::SetOuter(IFWL_Widget* pOuter) {
+void IFWL_Edit::SetOuter(IFWL_Widget* pOuter) {
   m_pOuter = pOuter;
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::SetNumberRange(int32_t iMin, int32_t iMax) {
-  m_iMin = iMin;
-  m_iMax = iMax;
-  m_bSetRange = true;
-  return FWL_Error::Succeeded;
 }
 
 void IFWL_Edit::On_CaretChanged(CFDE_TxtEdtEngine* pEdit,
@@ -660,7 +450,7 @@
   if (dwStyleEx & FWL_STYLEEXT_EDT_VAlignMask)
     UpdateVAlignment();
 
-  IFDE_TxtEdtPage* page = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* page = m_EdtEngine.GetPage(0);
   FX_FLOAT fContentWidth = page->GetContentsBox().width;
   FX_FLOAT fContentHeight = page->GetContentsBox().height;
   CFX_RectF rtTemp;
@@ -697,7 +487,7 @@
   if (bNeedUpdate) {
     UpdateEditParams();
     UpdateEditLayout();
-    IFDE_TxtEdtPage* page1 = m_pEdtEngine->GetPage(0);
+    IFDE_TxtEdtPage* page1 = m_EdtEngine.GetPage(0);
     fContentWidth1 = page1->GetContentsBox().width;
     fContentHeight1 = page1->GetContentsBox().height;
   }
@@ -729,7 +519,7 @@
 bool IFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit,
                             int32_t nPageIndex,
                             int32_t nPurpose) {
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(nPageIndex);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex);
   if (!pPage)
     return false;
   pPage->LoadPage(nullptr, nullptr);
@@ -739,7 +529,7 @@
 bool IFWL_Edit::On_PageUnload(CFDE_TxtEdtEngine* pEdit,
                               int32_t nPageIndex,
                               int32_t nPurpose) {
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(nPageIndex);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex);
   if (!pPage)
     return false;
   pPage->UnloadPage(nullptr);
@@ -765,18 +555,6 @@
   return event.bValidate;
 }
 
-FWL_Error IFWL_Edit::SetBackgroundColor(uint32_t color) {
-  m_backColor = color;
-  m_updateBackColor = true;
-  return FWL_Error::Succeeded;
-}
-
-FWL_Error IFWL_Edit::SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize) {
-  m_wsFont = wsFont;
-  m_fFontSize = fSize;
-  return FWL_Error::Succeeded;
-}
-
 void IFWL_Edit::SetScrollOffset(FX_FLOAT fScrollOffset) {
   m_fScrollOffsetY = fScrollOffset;
 }
@@ -816,9 +594,7 @@
 void IFWL_Edit::DrawContent(CFX_Graphics* pGraphics,
                             IFWL_ThemeProvider* pTheme,
                             const CFX_Matrix* pMatrix) {
-  if (!m_pEdtEngine)
-    return;
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   if (!pPage)
     return;
   pGraphics->SaveGraphState();
@@ -843,7 +619,7 @@
                  FWL_WGTSTATE_Deactivated;
     }
   }
-  int32_t nSelCount = m_pEdtEngine->CountSelRanges();
+  int32_t nSelCount = m_EdtEngine.CountSelRanges();
   if (bShowSel && nSelCount > 0) {
     int32_t nPageCharStart = pPage->GetCharStart();
     int32_t nPageCharCount = pPage->GetCharCount();
@@ -853,7 +629,7 @@
     CFX_RectFArray rectArr;
     int32_t i = 0;
     for (i = 0; i < nSelCount; i++) {
-      nCharCount = m_pEdtEngine->GetSelRange(i, nCharStart);
+      nCharCount = m_EdtEngine.GetSelRange(i, nCharStart);
       int32_t nCharEnd = nCharStart + nCharCount - 1;
       if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) {
         continue;
@@ -917,7 +693,7 @@
   UpdateEditParams();
   UpdateEditLayout();
   if (m_nLimit > -1) {
-    m_pEdtEngine->SetLimit(m_nLimit);
+    m_EdtEngine.SetLimit(m_nLimit);
   }
 }
 void IFWL_Edit::UpdateEditParams() {
@@ -1033,34 +809,34 @@
   params.wLineBreakChar = L'\n';
   params.nCharRotation = 0;
   params.pEventSink = this;
-  m_pEdtEngine->SetEditParams(params);
+  m_EdtEngine.SetEditParams(params);
 }
 
 void IFWL_Edit::UpdateEditLayout() {
-  if (m_pEdtEngine->GetTextLength() <= 0)
-    m_pEdtEngine->SetTextByStream(nullptr);
+  if (m_EdtEngine.GetTextLength() <= 0)
+    m_EdtEngine.SetTextByStream(nullptr);
 
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   if (pPage)
     pPage->UnloadPage(nullptr);
 
-  m_pEdtEngine->StartLayout();
-  m_pEdtEngine->DoLayout(nullptr);
-  m_pEdtEngine->EndLayout();
-  pPage = m_pEdtEngine->GetPage(0);
+  m_EdtEngine.StartLayout();
+  m_EdtEngine.DoLayout(nullptr);
+  m_EdtEngine.EndLayout();
+  pPage = m_EdtEngine.GetPage(0);
   if (pPage)
     pPage->LoadPage(nullptr, nullptr);
 }
 
 bool IFWL_Edit::UpdateOffset() {
   CFX_RectF rtCaret;
-  m_pEdtEngine->GetCaretRect(rtCaret);
+  m_EdtEngine.GetCaretRect(rtCaret);
   FX_FLOAT fOffSetX = m_rtEngine.left - m_fScrollOffsetX;
   FX_FLOAT fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset;
   rtCaret.Offset(fOffSetX, fOffSetY);
   const CFX_RectF& rtEidt = m_rtEngine;
   if (rtEidt.Contains(rtCaret)) {
-    IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+    IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
     if (!pPage)
       return false;
 
@@ -1105,7 +881,7 @@
 }
 
 void IFWL_Edit::UpdateVAlignment() {
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   if (!pPage)
     return;
   const CFX_RectF& rtFDE = pPage->GetContentsBox();
@@ -1144,7 +920,7 @@
 }
 void IFWL_Edit::UpdateCaret() {
   CFX_RectF rtFDE;
-  m_pEdtEngine->GetCaretRect(rtFDE);
+  m_EdtEngine.GetCaretRect(rtFDE);
   rtFDE.Offset(m_rtEngine.left - m_fScrollOffsetX,
                m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset);
   CFX_RectF rtCaret;
@@ -1189,7 +965,7 @@
   if (!bShowHorz && !bShowVert) {
     return nullptr;
   }
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   if (!pPage)
     return nullptr;
   const CFX_RectF& rtFDE = pPage->GetContentsBox();
@@ -1230,7 +1006,7 @@
     m_pVertScrollBar->GetWidgetRect(rtScroll);
     if (rtScroll.height < rtFDE.height) {
       m_pVertScrollBar->LockUpdate();
-      FX_FLOAT fStep = m_pEdtEngine->GetEditParams()->fLineSpace;
+      FX_FLOAT fStep = m_EdtEngine.GetEditParams()->fLineSpace;
       FX_FLOAT fRange = rtFDE.height - m_rtEngine.height;
       if (fRange < fStep) {
         fRange = fStep;
@@ -1277,9 +1053,7 @@
          (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine);
 }
 bool IFWL_Edit::IsContentHeightOverflow() {
-  if (!m_pEdtEngine)
-    return false;
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   if (!pPage)
     return false;
   return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f;
@@ -1455,11 +1229,6 @@
     m_pHorzScrollBar.reset(sb);
 }
 
-void IFWL_Edit::InitEngine() {
-  if (!m_pEdtEngine)
-    m_pEdtEngine.reset(new CFDE_TxtEdtEngine);
-}
-
 bool FWL_ShowCaret(IFWL_Widget* pWidget,
                    bool bVisible,
                    const CFX_RectF* pRtAnchor) {
@@ -1510,21 +1279,18 @@
   }
 }
 bool IFWL_Edit::ValidateNumberChar(FX_WCHAR cNum) {
-  if (!m_pEdtEngine) {
-    return false;
-  }
   if (!m_bSetRange) {
     return true;
   }
   CFX_WideString wsOld, wsText;
-  m_pEdtEngine->GetText(wsText, 0);
+  m_EdtEngine.GetText(wsText, 0);
   if (wsText.IsEmpty()) {
     if (cNum == L'0') {
       return false;
     }
     return true;
   }
-  int32_t caretPos = m_pEdtEngine->GetCaretPos();
+  int32_t caretPos = m_EdtEngine.GetCaretPos();
   int32_t iSel = CountSelRanges();
   if (iSel == 0) {
     if (cNum == L'0' && caretPos == 0) {
@@ -1571,7 +1337,8 @@
       DispatchEvent(&textFullEvent);
       break;
     }
-    default: {}
+    default:
+      break;
   }
 }
 
@@ -1661,10 +1428,8 @@
 void IFWL_Edit::DoButtonDown(CFWL_MsgMouse* pMsg) {
   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)
     SetFocus(true);
-  if (!m_pEdtEngine)
-    UpdateEditEngine();
 
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   if (!pPage)
     return;
   CFX_PointF pt(pMsg->m_fx, pMsg->m_fy);
@@ -1674,7 +1439,7 @@
   if (nIndex < 0)
     nIndex = 0;
 
-  m_pEdtEngine->SetCaretPos(nIndex, bBefore);
+  m_EdtEngine.SetCaretPos(nIndex, bBefore);
 }
 
 void IFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
@@ -1682,8 +1447,6 @@
   bool bRepaint = !!(dwStyleEx & FWL_STYLEEXT_EDT_InnerCaret);
   if (bSet) {
     m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
-    if (!m_pEdtEngine)
-      UpdateEditEngine();
 
     UpdateVAlignment();
     UpdateOffset();
@@ -1691,13 +1454,13 @@
   } else if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) {
     m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
     ShowCaret(false);
-    if (m_pEdtEngine && (dwStyleEx & FWL_STYLEEXT_EDT_NoHideSel) == 0) {
+    if ((dwStyleEx & FWL_STYLEEXT_EDT_NoHideSel) == 0) {
       int32_t nSel = CountSelRanges();
       if (nSel > 0) {
         ClearSelections();
         bRepaint = true;
       }
-      SetCaretPos(0);
+      m_EdtEngine.SetCaretPos(0, true);
       UpdateOffset();
     }
     ClearRecord();
@@ -1718,11 +1481,11 @@
   m_bLButtonDown = true;
   SetGrab(true);
   DoButtonDown(pMsg);
-  int32_t nIndex = m_pEdtEngine->GetCaretPos();
+  int32_t nIndex = m_EdtEngine.GetCaretPos();
   bool bRepaint = false;
-  int32_t iCount = m_pEdtEngine->CountSelRanges();
+  int32_t iCount = m_EdtEngine.CountSelRanges();
   if (iCount > 0) {
-    m_pEdtEngine->ClearSelection();
+    m_EdtEngine.ClearSelection();
     bRepaint = true;
   }
 
@@ -1730,7 +1493,7 @@
   if (bShift && m_nSelStart != nIndex) {
     int32_t iStart = std::min(m_nSelStart, nIndex);
     int32_t iEnd = std::max(m_nSelStart, nIndex);
-    m_pEdtEngine->AddSelRange(iStart, iEnd - iStart);
+    m_EdtEngine.AddSelRange(iStart, iEnd - iStart);
     bRepaint = true;
   } else {
     m_nSelStart = nIndex;
@@ -1745,10 +1508,7 @@
 }
 
 void IFWL_Edit::OnButtonDblClk(CFWL_MsgMouse* pMsg) {
-  if (!m_pEdtEngine)
-    return;
-
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   if (!pPage)
     return;
 
@@ -1759,18 +1519,16 @@
   if (nIndex < 0)
     return;
 
-  m_pEdtEngine->AddSelRange(nIndex, nCount);
-  m_pEdtEngine->SetCaretPos(nIndex + nCount - 1, false);
+  m_EdtEngine.AddSelRange(nIndex, nCount);
+  m_EdtEngine.SetCaretPos(nIndex + nCount - 1, false);
   Repaint(&m_rtEngine);
 }
 
 void IFWL_Edit::OnMouseMove(CFWL_MsgMouse* pMsg) {
-  if (!m_pEdtEngine)
-    return;
   if (m_nSelStart == -1 || !m_bLButtonDown)
     return;
 
-  IFDE_TxtEdtPage* pPage = m_pEdtEngine->GetPage(0);
+  IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0);
   if (!pPage)
     return;
 
@@ -1778,23 +1536,20 @@
   DeviceToEngine(pt);
   bool bBefore = true;
   int32_t nIndex = pPage->GetCharIndex(pt, bBefore);
-  m_pEdtEngine->SetCaretPos(nIndex, bBefore);
-  nIndex = m_pEdtEngine->GetCaretPos();
-  m_pEdtEngine->ClearSelection();
+  m_EdtEngine.SetCaretPos(nIndex, bBefore);
+  nIndex = m_EdtEngine.GetCaretPos();
+  m_EdtEngine.ClearSelection();
   if (nIndex != m_nSelStart) {
-    int32_t nLen = m_pEdtEngine->GetTextLength();
+    int32_t nLen = m_EdtEngine.GetTextLength();
     if (m_nSelStart >= nLen)
       m_nSelStart = nLen;
 
-    m_pEdtEngine->AddSelRange(std::min(m_nSelStart, nIndex),
-                              FXSYS_abs(nIndex - m_nSelStart));
+    m_EdtEngine.AddSelRange(std::min(m_nSelStart, nIndex),
+                            FXSYS_abs(nIndex - m_nSelStart));
   }
 }
 
 void IFWL_Edit::OnKeyDown(CFWL_MsgKey* pMsg) {
-  if (!m_pEdtEngine)
-    return;
-
   FDE_TXTEDTMOVECARET MoveCaret = MC_MoveNone;
   bool bShift = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Shift);
   bool bCtrl = !!(pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl);
@@ -1831,11 +1586,11 @@
           (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
         break;
       }
-      int32_t nCaret = m_pEdtEngine->GetCaretPos();
+      int32_t nCaret = m_EdtEngine.GetCaretPos();
 #if (_FX_OS_ == _FX_MACOSX_)
-      m_pEdtEngine->Delete(nCaret, true);
+      m_EdtEngine.Delete(nCaret, true);
 #else
-      m_pEdtEngine->Delete(nCaret);
+      m_EdtEngine.Delete(nCaret);
 #endif
       break;
     }
@@ -1845,29 +1600,11 @@
       DispatchKeyEvent(pMsg);
       break;
     }
-    default: {
-#if (_FX_OS_ == _FX_MACOSX_)
-      if (pMsg->m_dwFlags & FWL_KEYFLAG_Command) {
-#else
-      if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) {
-#endif
-        if (dwKeyCode == 0x43 || dwKeyCode == 0x63) {
-          DoClipboard(1);
-          return;
-        }
-        if (dwKeyCode == 0x58 || dwKeyCode == 0x78) {
-          DoClipboard(2);
-          return;
-        }
-        if (dwKeyCode == 0x56 || dwKeyCode == 0x76) {
-          DoClipboard(3);
-          return;
-        }
-      }
-    }
+    default:
+      break;
   }
   if (MoveCaret != MC_MoveNone)
-    m_pEdtEngine->MoveCaretPos(MoveCaret, bShift, bCtrl);
+    m_EdtEngine.MoveCaretPos(MoveCaret, bShift, bCtrl);
 }
 
 void IFWL_Edit::OnChar(CFWL_MsgKey* pMsg) {
@@ -1875,27 +1612,25 @@
       (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)) {
     return;
   }
-  if (!m_pEdtEngine)
-    return;
 
   int32_t iError = 0;
   FX_WCHAR c = (FX_WCHAR)pMsg->m_dwKeyCode;
-  int32_t nCaret = m_pEdtEngine->GetCaretPos();
+  int32_t nCaret = m_EdtEngine.GetCaretPos();
   switch (c) {
     case FWL_VKEY_Back:
-      m_pEdtEngine->Delete(nCaret, true);
+      m_EdtEngine.Delete(nCaret, true);
       break;
     case 0x0A:
       break;
     case FWL_VKEY_Escape:
       break;
     case FWL_VKEY_Tab: {
-      iError = m_pEdtEngine->Insert(nCaret, L"\t", 1);
+      iError = m_EdtEngine.Insert(nCaret, L"\t", 1);
       break;
     }
     case FWL_VKEY_Return: {
       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_WantReturn) {
-        iError = m_pEdtEngine->Insert(nCaret, L"\n", 1);
+        iError = m_EdtEngine.Insert(nCaret, L"\n", 1);
       }
       break;
     }
@@ -1919,7 +1654,7 @@
       {
         break;
       }
-      iError = m_pEdtEngine->Insert(nCaret, &c, 1);
+      iError = m_EdtEngine.Insert(nCaret, &c, 1);
       break;
     }
   }
@@ -1982,9 +1717,8 @@
     pScrollBar->SetPos(fPos);
     pScrollBar->SetTrackPos(fPos);
     UpdateOffset(pScrollBar, fPos - iCurPos);
-    if (m_pEdtEngine) {
-      UpdateCaret();
-    }
+    UpdateCaret();
+
     CFX_RectF rect;
     GetWidgetRect(rect);
     CFX_RectF rtInvalidate;
diff --git a/xfa/fwl/core/ifwl_edit.h b/xfa/fwl/core/ifwl_edit.h
index d436a4f..65c6603 100644
--- a/xfa/fwl/core/ifwl_edit.h
+++ b/xfa/fwl/core/ifwl_edit.h
@@ -8,11 +8,10 @@
 #define XFA_FWL_CORE_IFWL_EDIT_H_
 
 #include <deque>
-#include <memory>
 #include <vector>
 
+#include "xfa/fde/cfde_txtedtengine.h"
 #include "xfa/fde/ifde_txtedtdorecord.h"
-#include "xfa/fde/ifde_txtedtengine.h"
 #include "xfa/fwl/core/cfwl_event.h"
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
@@ -85,12 +84,6 @@
               CFX_ByteString bsWord;
               bool bCheckWord;)
 
-FWL_EVENT_DEF(CFWL_EvtEdtGetSuggestWords,
-              CFWL_EventType::GetSuggestedWords,
-              bool bSuggestWords;
-              CFX_ByteString bsWord;
-              std::vector<CFX_ByteString> bsArraySuggestWords;)
-
 class IFDE_TxtEdtDoRecord;
 class IFWL_Edit;
 class CFWL_MsgActivate;
@@ -99,8 +92,6 @@
 class CFWL_WidgetProperties;
 class IFWL_Caret;
 
-class IFWL_EditDP : public IFWL_DataProvider {};
-
 class IFWL_Edit : public IFWL_Widget {
  public:
   IFWL_Edit(const IFWL_App* app,
@@ -122,45 +113,30 @@
   void OnDrawWidget(CFX_Graphics* pGraphics,
                     const CFX_Matrix* pMatrix) override;
 
-  virtual FWL_Error SetText(const CFX_WideString& wsText);
-  virtual int32_t GetTextLength() const;
-  virtual FWL_Error GetText(CFX_WideString& wsText,
-                            int32_t nStart = 0,
-                            int32_t nCount = -1) const;
-  virtual FWL_Error ClearText();
-  virtual int32_t GetCaretPos() const;
-  virtual int32_t SetCaretPos(int32_t nIndex, bool bBefore = true);
-  virtual FWL_Error AddSelRange(int32_t nStart, int32_t nCount = -1);
-  virtual int32_t CountSelRanges();
-  virtual int32_t GetSelRange(int32_t nIndex, int32_t& nStart);
-  virtual FWL_Error ClearSelections();
-  virtual int32_t GetLimit();
-  virtual FWL_Error SetLimit(int32_t nLimit);
-  virtual FWL_Error SetAliasChar(FX_WCHAR wAlias);
-  virtual FWL_Error Insert(int32_t nStart,
-                           const FX_WCHAR* lpText,
-                           int32_t nLen);
-  virtual FWL_Error DeleteSelections();
-  virtual FWL_Error DeleteRange(int32_t nStart, int32_t nCount = -1);
-  virtual FWL_Error Replace(int32_t nStart,
-                            int32_t nLen,
-                            const CFX_WideStringC& wsReplace);
-  virtual FWL_Error DoClipboard(int32_t iCmd);
-  virtual bool Copy(CFX_WideString& wsCopy);
-  virtual bool Cut(CFX_WideString& wsCut);
-  virtual bool Paste(const CFX_WideString& wsPaste);
-  virtual bool Delete();
-  virtual bool Redo(const IFDE_TxtEdtDoRecord* pRecord);
-  virtual bool Undo(const IFDE_TxtEdtDoRecord* pRecord);
-  virtual bool Undo();
-  virtual bool Redo();
-  virtual bool CanUndo();
-  virtual bool CanRedo();
-  virtual FWL_Error SetTabWidth(FX_FLOAT fTabWidth, bool bEquidistant);
-  virtual FWL_Error SetOuter(IFWL_Widget* pOuter);
-  virtual FWL_Error SetNumberRange(int32_t iMin, int32_t iMax);
-  virtual FWL_Error SetBackgroundColor(uint32_t color);
-  virtual FWL_Error SetFont(const CFX_WideString& wsFont, FX_FLOAT fSize);
+  virtual void SetText(const CFX_WideString& wsText);
+
+  int32_t GetTextLength() const;
+  void GetText(CFX_WideString& wsText, int32_t nStart = 0, int32_t nCount = -1);
+  void ClearText();
+
+  void AddSelRange(int32_t nStart, int32_t nCount = -1);
+  int32_t CountSelRanges();
+  int32_t GetSelRange(int32_t nIndex, int32_t& nStart);
+  void ClearSelections();
+  int32_t GetLimit();
+  void SetLimit(int32_t nLimit);
+  void SetAliasChar(FX_WCHAR wAlias);
+  bool Copy(CFX_WideString& wsCopy);
+  bool Cut(CFX_WideString& wsCut);
+  bool Paste(const CFX_WideString& wsPaste);
+  bool Redo(const IFDE_TxtEdtDoRecord* pRecord);
+  bool Undo(const IFDE_TxtEdtDoRecord* pRecord);
+  bool Undo();
+  bool Redo();
+  bool CanUndo();
+  bool CanRedo();
+
+  void SetOuter(IFWL_Widget* pOuter);
 
   void On_CaretChanged(CFDE_TxtEdtEngine* pEdit,
                        int32_t nPage,
@@ -177,14 +153,13 @@
   void On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, IFDE_TxtEdtDoRecord* pRecord);
   bool On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText);
   void SetScrollOffset(FX_FLOAT fScrollOffset);
-  bool GetSuggestWords(CFX_PointF pointf,
-                       std::vector<CFX_ByteString>& sSuggest);
-  bool ReplaceSpellCheckWord(CFX_PointF pointf,
-                             const CFX_ByteStringC& bsReplace);
 
  protected:
-  friend class CFWL_TxtEdtEventSink;
+  void ShowCaret(bool bVisible, CFX_RectF* pRect = nullptr);
+  const CFX_RectF& GetRTClient() const { return m_rtClient; }
+  CFDE_TxtEdtEngine* GetTxtEdtEngine() { return &m_EdtEngine; }
 
+ private:
   void DrawTextBk(CFX_Graphics* pGraphics,
                   IFWL_ThemeProvider* pTheme,
                   const CFX_Matrix* pMatrix = nullptr);
@@ -204,7 +179,6 @@
   void DeviceToEngine(CFX_PointF& pt);
   void InitScrollBar(bool bVert = true);
   void InitEngine();
-  virtual void ShowCaret(bool bVisible, CFX_RectF* pRect = nullptr);
   bool ValidateNumberChar(FX_WCHAR cNum);
   void InitCaret();
   void ClearRecord();
@@ -220,37 +194,6 @@
                         int32_t nCount,
                         FX_FLOAT fOffSetX,
                         FX_FLOAT fOffSetY);
-  int32_t GetWordAtPoint(CFX_PointF pointf, int32_t& nCount);
-
-  CFX_RectF m_rtClient;
-  CFX_RectF m_rtEngine;
-  CFX_RectF m_rtStatic;
-  FX_FLOAT m_fVAlignOffset;
-  FX_FLOAT m_fScrollOffsetX;
-  FX_FLOAT m_fScrollOffsetY;
-  std::unique_ptr<CFDE_TxtEdtEngine> m_pEdtEngine;
-  bool m_bLButtonDown;
-  int32_t m_nSelStart;
-  int32_t m_nLimit;
-  FX_FLOAT m_fSpaceAbove;
-  FX_FLOAT m_fSpaceBelow;
-  FX_FLOAT m_fFontSize;
-  FX_ARGB m_argbSel;
-  bool m_bSetRange;
-  int32_t m_iMin;
-  int32_t m_iMax;
-  std::unique_ptr<IFWL_ScrollBar> m_pVertScrollBar;
-  std::unique_ptr<IFWL_ScrollBar> m_pHorzScrollBar;
-  std::unique_ptr<IFWL_Caret> m_pCaret;
-  CFX_WideString m_wsCache;
-  uint32_t m_backColor;
-  bool m_updateBackColor;
-  CFX_WideString m_wsFont;
-  std::deque<std::unique_ptr<IFDE_TxtEdtDoRecord>> m_DoRecords;
-  int32_t m_iCurRecord;
-  int32_t m_iMaxRecord;
-
- private:
   void DoActivate(CFWL_MsgActivate* pMsg);
   void DoDeactivate(CFWL_MsgDeactivate* pMsg);
   void DoButtonDown(CFWL_MsgMouse* pMsg);
@@ -262,6 +205,28 @@
   void OnKeyDown(CFWL_MsgKey* pMsg);
   void OnChar(CFWL_MsgKey* pMsg);
   bool OnScroll(IFWL_ScrollBar* pScrollBar, FWL_SCBCODE dwCode, FX_FLOAT fPos);
+
+  CFX_RectF m_rtClient;
+  CFX_RectF m_rtEngine;
+  CFX_RectF m_rtStatic;
+  FX_FLOAT m_fVAlignOffset;
+  FX_FLOAT m_fScrollOffsetX;
+  FX_FLOAT m_fScrollOffsetY;
+  CFDE_TxtEdtEngine m_EdtEngine;
+  bool m_bLButtonDown;
+  int32_t m_nSelStart;
+  int32_t m_nLimit;
+  FX_FLOAT m_fFontSize;
+  bool m_bSetRange;
+  int32_t m_iMax;
+  std::unique_ptr<IFWL_ScrollBar> m_pVertScrollBar;
+  std::unique_ptr<IFWL_ScrollBar> m_pHorzScrollBar;
+  std::unique_ptr<IFWL_Caret> m_pCaret;
+  CFX_WideString m_wsCache;
+  CFX_WideString m_wsFont;
+  std::deque<std::unique_ptr<IFDE_TxtEdtDoRecord>> m_DoRecords;
+  int32_t m_iCurRecord;
+  int32_t m_iMaxRecord;
 };
 
 #endif  // XFA_FWL_CORE_IFWL_EDIT_H_
diff --git a/xfa/fwl/core/ifwl_form.cpp b/xfa/fwl/core/ifwl_form.cpp
index e256a13..4a8d911 100644
--- a/xfa/fwl/core/ifwl_form.cpp
+++ b/xfa/fwl/core/ifwl_form.cpp
@@ -41,6 +41,9 @@
                      std::unique_ptr<CFWL_WidgetProperties> properties,
                      IFWL_Widget* pOuter)
     : IFWL_Widget(app, std::move(properties), pOuter),
+#if (_FX_OS_ == _FX_MACOSX_)
+      m_bMouseIn(false),
+#endif
       m_pCloseBox(nullptr),
       m_pMinBox(nullptr),
       m_pMaxBox(nullptr),
@@ -55,11 +58,9 @@
       m_bMaximized(false),
       m_bSetMaximize(false),
       m_bCustomizeLayout(false),
-      m_eFormSize(FWL_FORMSIZE_Manual),
       m_bDoModalFlag(false),
       m_pBigIcon(nullptr),
-      m_pSmallIcon(nullptr),
-      m_bMouseIn(false) {
+      m_pSmallIcon(nullptr) {
   m_rtRelative.Reset();
   m_rtCaption.Reset();
   m_rtRestore.Reset();
@@ -319,15 +320,6 @@
 #endif
 }
 
-FWL_FORMSIZE IFWL_Form::GetFormSize() {
-  return m_eFormSize;
-}
-
-FWL_Error IFWL_Form::SetFormSize(FWL_FORMSIZE eFormSize) {
-  m_eFormSize = eFormSize;
-  return FWL_Error::Succeeded;
-}
-
 IFWL_Widget* IFWL_Form::DoModal() {
   const IFWL_App* pApp = GetOwnerApp();
   if (!pApp)
@@ -350,37 +342,29 @@
   return nullptr;
 }
 
-IFWL_Widget* IFWL_Form::DoModal(uint32_t& dwCommandID) {
-  return DoModal();
-}
-
-FWL_Error IFWL_Form::EndDoModal() {
+void IFWL_Form::EndDoModal() {
   if (!m_pNoteLoop)
-    return FWL_Error::Indefinite;
+    return;
   m_bDoModalFlag = false;
 #if (_FX_OS_ == _FX_MACOSX_)
   m_pNoteLoop->EndModalLoop();
   const IFWL_App* pApp = GetOwnerApp();
   if (!pApp)
-    return FWL_Error::Indefinite;
+    return;
 
   CFWL_NoteDriver* pDriver =
       static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
   if (!pDriver)
-    return FWL_Error::Indefinite;
+    return;
 
   pDriver->PopNoteLoop();
   SetStates(FWL_WGTSTATE_Invisible, true);
-  return FWL_Error::Succeeded;
 #else
   SetStates(FWL_WGTSTATE_Invisible, true);
-  return m_pNoteLoop->EndModalLoop();
+  m_pNoteLoop->EndModalLoop();
 #endif
 }
 
-FWL_Error IFWL_Form::SetBorderRegion(CFX_Path* pPath) {
-  return FWL_Error::Succeeded;
-}
 void IFWL_Form::DrawBackground(CFX_Graphics* pGraphics,
                                IFWL_ThemeProvider* pTheme) {
   CFWL_ThemeBackground param;
@@ -392,28 +376,6 @@
                          m_fCXBorder);
   pTheme->DrawBackground(&param);
 }
-IFWL_Widget* IFWL_Form::GetSubFocus() {
-  return m_pSubFocus;
-}
-void IFWL_Form::SetSubFocus(IFWL_Widget* pWidget) {
-  m_pSubFocus = pWidget;
-}
-
-void IFWL_Form::ShowChildWidget(IFWL_Widget* pParent) {
-  const IFWL_App* pApp = pParent->GetOwnerApp();
-  if (!pApp)
-    return;
-
-  CFWL_WidgetMgr* pWidgetMgr = pApp->GetWidgetMgr();
-  if (!pWidgetMgr)
-    return;
-
-  IFWL_Widget* pChild = pWidgetMgr->GetFirstChildWidget(pParent);
-  while (pChild) {
-    ShowChildWidget(pChild);
-    pChild = pWidgetMgr->GetNextSiblingWidget(pChild);
-  }
-}
 
 void IFWL_Form::RemoveSysButtons() {
   m_rtCaption.Reset();
@@ -427,17 +389,6 @@
   m_pCaptionBox = nullptr;
 }
 
-void IFWL_Form::CalcContentRect(CFX_RectF& rtContent) {
-#ifdef FWL_UseMacSystemBorder
-  rtContent = m_rtRelative;
-#else
-  GetEdgeRect(rtContent);
-  if (HasEdge()) {
-    FX_FLOAT fEdge = GetEdgeWidth();
-    rtContent.Deflate(fEdge, fEdge);
-  }
-#endif
-}
 CFWL_SysBtn* IFWL_Form::GetSysBtnAtPoint(FX_FLOAT fx, FX_FLOAT fy) {
   if (m_pCloseBox && m_pCloseBox->m_rtBtn.Contains(fx, fy)) {
     return m_pCloseBox;
@@ -578,14 +529,14 @@
   m_bSetMaximize = true;
   Repaint(&m_rtRelative);
 }
-void IFWL_Form::SetCursor(FX_FLOAT fx, FX_FLOAT fy) {}
+
 void IFWL_Form::Layout() {
   GetRelativeRect(m_rtRelative);
 #ifndef FWL_UseMacSystemBorder
-  ReSetSysBtn();
+  ResetSysBtn();
 #endif
 }
-void IFWL_Form::ReSetSysBtn() {
+void IFWL_Form::ResetSysBtn() {
   m_fCXBorder =
       *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::CXBorder));
   m_fCYBorder =
@@ -676,9 +627,7 @@
 
   pDriver->UnRegisterForm(this);
 }
-bool IFWL_Form::IsDoModal() {
-  return m_bDoModalFlag;
-}
+
 void IFWL_Form::SetThemeData() {
   m_fSmallIconSz =
       *static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::SmallIcon));
@@ -713,55 +662,6 @@
   CFX_WideString text;
   pData->GetCaption(this, text);
 }
-void IFWL_Form::DoWidthLimit(FX_FLOAT& fLeft,
-                             FX_FLOAT& fWidth,
-                             FX_FLOAT fCurX,
-                             FX_FLOAT fSpace,
-                             FX_FLOAT fLimitMin,
-                             FX_FLOAT fLimitMax,
-                             bool bLeft) {
-  FX_FLOAT fx = fCurX;
-  FX_FLOAT fy = 0;
-  TransformTo(nullptr, fx, fy);
-  FX_FLOAT fTemp =
-      bLeft ? (fWidth - fx + fLeft + fSpace) : (fx - fLeft + fSpace);
-  if (fTemp >= fLimitMin && fTemp <= fLimitMax) {
-    fWidth = fTemp;
-    fLeft += bLeft ? (fx - fLeft - fSpace) : 0;
-  } else {
-    if (fTemp < fLimitMin && fWidth > fLimitMin) {
-      fLeft += bLeft ? (fWidth - fLimitMin) : 0;
-      fWidth = fLimitMin;
-    } else if (fTemp > fLimitMax && fWidth < fLimitMax) {
-      fLeft -= bLeft ? (fLimitMax - fWidth) : 0;
-      fWidth = fLimitMax;
-    }
-  }
-}
-void IFWL_Form::DoHeightLimit(FX_FLOAT& fTop,
-                              FX_FLOAT& fHeight,
-                              FX_FLOAT fCurY,
-                              FX_FLOAT fSpace,
-                              FX_FLOAT fLimitMin,
-                              FX_FLOAT fLimitMax,
-                              bool bTop) {
-  FX_FLOAT fx = 0;
-  FX_FLOAT fy = fCurY;
-  TransformTo(nullptr, fx, fy);
-  FX_FLOAT fTemp = bTop ? (fHeight - fy + fTop + fSpace) : (fy - fTop + fSpace);
-  if (fTemp >= fLimitMin && fTemp <= fLimitMax) {
-    fHeight = fTemp;
-    fTop += bTop ? (fy - fTop - fSpace) : 0;
-  } else {
-    if (fTemp < fLimitMin && fHeight > fLimitMin) {
-      fTop += bTop ? (fHeight - fLimitMin) : 0;
-      fHeight = fLimitMin;
-    } else if (fTemp > fLimitMax && fHeight < fLimitMax) {
-      fTop -= bTop ? (fLimitMax - fHeight) : 0;
-      fHeight = fLimitMax;
-    }
-  }
-}
 
 #ifdef FWL_UseMacSystemBorder
 void IFWL_Form::OnProcessMessage(CFWL_Message* pMessage) {
@@ -832,9 +732,6 @@
         case FWL_MouseCommand::Move:
           OnMouseMove(pMsg);
           break;
-        case FWL_MouseCommand::Hover:
-          OnMouseHover(pMsg);
-          break;
         case FWL_MouseCommand::Leave:
           OnMouseLeave(pMsg);
           break;
@@ -897,10 +794,6 @@
     Repaint(&pPressBtn->m_rtBtn);
   } else if (rtCap.Contains(pMsg->m_fx, pMsg->m_fy)) {
     m_eResizeType = FORM_RESIZETYPE_Cap;
-  } else if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) &&
-             (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) &&
-             !m_bMaximized) {
-    SetCursor(pMsg->m_fx, pMsg->m_fy);
   }
   m_InfoStart.m_ptStart = CFX_PointF(pMsg->m_fx, pMsg->m_fy);
   m_InfoStart.m_szStart = CFX_SizeF(m_pProperties->m_rtWidget.width,
@@ -937,11 +830,6 @@
   if (m_bLButtonDown)
     return;
 
-  if ((m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) &&
-      (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_FRM_Resize) &&
-      !m_bMaximized) {
-    SetCursor(pMsg->m_fx, pMsg->m_fy);
-  }
   CFX_RectF rtInvalidate;
   rtInvalidate.Reset();
   CFWL_SysBtn* pPointBtn = GetSysBtnAtPoint(pMsg->m_fx, pMsg->m_fy);
@@ -990,18 +878,12 @@
     Repaint(&rtInvalidate);
 }
 
-void IFWL_Form::OnMouseHover(CFWL_MsgMouse* pMsg) {
-  SetCursor(pMsg->m_fx, pMsg->m_fy);
-}
-
 void IFWL_Form::OnMouseLeave(CFWL_MsgMouse* pMsg) {
   CFWL_SysBtn* pHover = GetSysBtnByState(FWL_SYSBUTTONSTATE_Hover);
   if (pHover) {
     pHover->SetNormal();
     Repaint(&pHover->m_rtBtn);
   }
-  if (pMsg->m_dwCmd == FWL_MouseCommand::Leave && !m_bLButtonDown)
-    SetCursor(pMsg->m_fx, pMsg->m_fy);
 }
 
 void IFWL_Form::OnLButtonDblClk(CFWL_MsgMouse* pMsg) {
diff --git a/xfa/fwl/core/ifwl_form.h b/xfa/fwl/core/ifwl_form.h
index 08211fe..77acbd8 100644
--- a/xfa/fwl/core/ifwl_form.h
+++ b/xfa/fwl/core/ifwl_form.h
@@ -101,22 +101,15 @@
   void OnDrawWidget(CFX_Graphics* pGraphics,
                     const CFX_Matrix* pMatrix) override;
 
-  FWL_FORMSIZE GetFormSize();
-  FWL_Error SetFormSize(FWL_FORMSIZE eFormSize);
   IFWL_Widget* DoModal();
-  IFWL_Widget* DoModal(uint32_t& dwCommandID);
-  FWL_Error EndDoModal();
-  FWL_Error SetBorderRegion(CFX_Path* pPath);
+  void EndDoModal();
+
+  IFWL_Widget* GetSubFocus() const { return m_pSubFocus; }
+  void SetSubFocus(IFWL_Widget* pWidget) { m_pSubFocus = pWidget; }
+
+ private:
   void DrawBackground(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme);
-  IFWL_Widget* GetSubFocus();
-  void SetSubFocus(IFWL_Widget* pWidget);
-
- protected:
-  friend class CFWL_FormImpDelegate;
-
-  void ShowChildWidget(IFWL_Widget* pParent);
   void RemoveSysButtons();
-  void CalcContentRect(CFX_RectF& rtContent);
   CFWL_SysBtn* GetSysBtnAtPoint(FX_FLOAT fx, FX_FLOAT fy);
   CFWL_SysBtn* GetSysBtnByState(uint32_t dwState);
   CFWL_SysBtn* GetSysBtnByIndex(int32_t nIndex);
@@ -130,31 +123,25 @@
                      const CFX_Matrix* pMatrix = nullptr);
   void GetEdgeRect(CFX_RectF& rtEdge);
   void SetWorkAreaRect();
-  void SetCursor(FX_FLOAT fx, FX_FLOAT fy);
   void Layout();
-  void ReSetSysBtn();
+  void ResetSysBtn();
   void RegisterForm();
   void UnRegisterForm();
-  bool IsDoModal();
   void SetThemeData();
   bool HasIcon();
   void UpdateIcon();
   void UpdateCaption();
-  void DoWidthLimit(FX_FLOAT& fLeft,
-                    FX_FLOAT& fWidth,
-                    FX_FLOAT fCurX,
-                    FX_FLOAT fSpace,
-                    FX_FLOAT fLimitMin,
-                    FX_FLOAT fLimitMax,
-                    bool bLeft);
-  void DoHeightLimit(FX_FLOAT& fTop,
-                     FX_FLOAT& fHeight,
-                     FX_FLOAT fCurY,
-                     FX_FLOAT fSpace,
-                     FX_FLOAT fLimitMin,
-                     FX_FLOAT fLimitMax,
-                     bool bTop);
+  void OnLButtonDown(CFWL_MsgMouse* pMsg);
+  void OnLButtonUp(CFWL_MsgMouse* pMsg);
+  void OnMouseMove(CFWL_MsgMouse* pMsg);
+  void OnMouseLeave(CFWL_MsgMouse* pMsg);
+  void OnLButtonDblClk(CFWL_MsgMouse* pMsg);
+  void OnWindowMove(CFWL_MsgWindowMove* pMsg);
+  void OnClose(CFWL_MsgClose* pMsg);
 
+#if (_FX_OS_ == _FX_MACOSX_)
+  bool m_bMouseIn;
+#endif
   CFX_RectF m_rtRestore;
   CFX_RectF m_rtCaptionText;
   CFX_RectF m_rtRelative;
@@ -176,23 +163,11 @@
   bool m_bMaximized;
   bool m_bSetMaximize;
   bool m_bCustomizeLayout;
-  FWL_FORMSIZE m_eFormSize;
   bool m_bDoModalFlag;
   FX_FLOAT m_fSmallIconSz;
   FX_FLOAT m_fBigIconSz;
   CFX_DIBitmap* m_pBigIcon;
   CFX_DIBitmap* m_pSmallIcon;
-  bool m_bMouseIn;
-
- private:
-  void OnLButtonDown(CFWL_MsgMouse* pMsg);
-  void OnLButtonUp(CFWL_MsgMouse* pMsg);
-  void OnMouseMove(CFWL_MsgMouse* pMsg);
-  void OnMouseHover(CFWL_MsgMouse* pMsg);
-  void OnMouseLeave(CFWL_MsgMouse* pMsg);
-  void OnLButtonDblClk(CFWL_MsgMouse* pMsg);
-  void OnWindowMove(CFWL_MsgWindowMove* pMsg);
-  void OnClose(CFWL_MsgClose* pMsg);
 };
 
 #endif  // XFA_FWL_CORE_IFWL_FORM_H_
diff --git a/xfa/fxfa/app/xfa_fftextedit.cpp b/xfa/fxfa/app/xfa_fftextedit.cpp
index 2b47ae2..e851cb2 100644
--- a/xfa/fxfa/app/xfa_fftextedit.cpp
+++ b/xfa/fxfa/app/xfa_fftextedit.cpp
@@ -289,72 +289,6 @@
   }
   return true;
 }
-bool CXFA_FFTextEdit::CanUndo() {
-  return ((CFWL_Edit*)m_pNormalWidget)->CanUndo();
-}
-bool CXFA_FFTextEdit::CanRedo() {
-  return ((CFWL_Edit*)m_pNormalWidget)->CanRedo();
-}
-bool CXFA_FFTextEdit::Undo() {
-  return ((CFWL_Edit*)m_pNormalWidget)->Undo();
-}
-bool CXFA_FFTextEdit::Redo() {
-  return ((CFWL_Edit*)m_pNormalWidget)->Redo();
-}
-bool CXFA_FFTextEdit::CanCopy() {
-  int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->CountSelRanges();
-  return nCount > 0;
-}
-bool CXFA_FFTextEdit::CanCut() {
-  if (m_pNormalWidget->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) {
-    return false;
-  }
-  int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->CountSelRanges();
-  return nCount > 0;
-}
-bool CXFA_FFTextEdit::CanPaste() {
-  return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open;
-}
-bool CXFA_FFTextEdit::CanSelectAll() {
-  return ((CFWL_Edit*)m_pNormalWidget)->GetTextLength() > 0;
-}
-bool CXFA_FFTextEdit::Copy(CFX_WideString& wsCopy) {
-  return ((CFWL_Edit*)m_pNormalWidget)->Copy(wsCopy);
-}
-bool CXFA_FFTextEdit::Cut(CFX_WideString& wsCut) {
-  return ((CFWL_Edit*)m_pNormalWidget)->Cut(wsCut);
-}
-bool CXFA_FFTextEdit::Paste(const CFX_WideString& wsPaste) {
-  return ((CFWL_Edit*)m_pNormalWidget)->Paste(wsPaste);
-}
-bool CXFA_FFTextEdit::SelectAll() {
-  int32_t nCount = ((CFWL_Edit*)m_pNormalWidget)->GetTextLength();
-  return ((CFWL_Edit*)m_pNormalWidget)->AddSelRange(0, nCount) >= 0;
-}
-bool CXFA_FFTextEdit::Delete() {
-  return ((CFWL_Edit*)m_pNormalWidget)->Delete();
-}
-bool CXFA_FFTextEdit::DeSelect() {
-  return ((CFWL_Edit*)m_pNormalWidget)->ClearSelections() ==
-         FWL_Error::Succeeded;
-}
-bool CXFA_FFTextEdit::GetSuggestWords(CFX_PointF pointf,
-                                      std::vector<CFX_ByteString>& sSuggest) {
-  if (m_pDataAcc->GetUIType() != XFA_Element::TextEdit) {
-    return false;
-  }
-  FWLToClient(pointf.x, pointf.y);
-  return ((CFWL_Edit*)m_pNormalWidget)->GetSuggestWords(pointf, sSuggest);
-}
-bool CXFA_FFTextEdit::ReplaceSpellCheckWord(CFX_PointF pointf,
-                                            const CFX_ByteStringC& bsReplace) {
-  if (m_pDataAcc->GetUIType() != XFA_Element::TextEdit) {
-    return false;
-  }
-  FWLToClient(pointf.x, pointf.y);
-  return ((CFWL_Edit*)m_pNormalWidget)
-      ->ReplaceSpellCheckWord(pointf, bsReplace);
-}
 void CXFA_FFTextEdit::OnTextChanged(IFWL_Widget* pWidget,
                                     const CFX_WideString& wsChanged,
                                     const CFX_WideString& wsPrevText) {
@@ -417,11 +351,6 @@
       event->bCheckWord = CheckWord(event->bsWord.AsStringC());
       break;
     }
-    case CFWL_EventType::GetSuggestedWords: {
-      CFWL_EvtEdtGetSuggestWords* event = (CFWL_EvtEdtGetSuggestWords*)pEvent;
-      event->bSuggestWords = false;
-      break;
-    }
     default:
       break;
   }
@@ -726,51 +655,7 @@
   m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Edit);
   return wsOldValue != wsText;
 }
-bool CXFA_FFDateTimeEdit::CanUndo() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanUndo();
-}
-bool CXFA_FFDateTimeEdit::CanRedo() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanRedo();
-}
-bool CXFA_FFDateTimeEdit::Undo() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->Undo();
-}
-bool CXFA_FFDateTimeEdit::Redo() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->Redo();
-}
-bool CXFA_FFDateTimeEdit::CanCopy() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanCopy();
-}
-bool CXFA_FFDateTimeEdit::CanCut() {
-  if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) {
-    return false;
-  }
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanCut();
-}
-bool CXFA_FFDateTimeEdit::CanPaste() {
-  return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open;
-}
-bool CXFA_FFDateTimeEdit::CanSelectAll() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->CanSelectAll();
-}
-bool CXFA_FFDateTimeEdit::Copy(CFX_WideString& wsCopy) {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->Copy(wsCopy);
-}
-bool CXFA_FFDateTimeEdit::Cut(CFX_WideString& wsCut) {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->Cut(wsCut);
-}
-bool CXFA_FFDateTimeEdit::Paste(const CFX_WideString& wsPaste) {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->Paste(wsPaste);
-}
-bool CXFA_FFDateTimeEdit::SelectAll() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->SelectAll();
-}
-bool CXFA_FFDateTimeEdit::Delete() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->Delete();
-}
-bool CXFA_FFDateTimeEdit::DeSelect() {
-  return ((CFWL_DateTimePicker*)m_pNormalWidget)->DeSelect();
-}
+
 void CXFA_FFDateTimeEdit::OnSelectChanged(IFWL_Widget* pWidget,
                                           int32_t iYear,
                                           int32_t iMonth,
diff --git a/xfa/fxfa/app/xfa_fftextedit.h b/xfa/fxfa/app/xfa_fftextedit.h
index 917d6cf..115b370 100644
--- a/xfa/fxfa/app/xfa_fftextedit.h
+++ b/xfa/fxfa/app/xfa_fftextedit.h
@@ -24,24 +24,6 @@
   bool OnRButtonUp(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) override;
   bool OnSetFocus(CXFA_FFWidget* pOldWidget) override;
   bool OnKillFocus(CXFA_FFWidget* pNewWidget) override;
-  bool CanUndo() override;
-  bool CanRedo() override;
-  bool Undo() override;
-  bool Redo() override;
-  bool CanCopy() override;
-  bool CanCut() override;
-  bool CanPaste() override;
-  bool CanSelectAll() override;
-  bool Copy(CFX_WideString& wsCopy) override;
-  bool Cut(CFX_WideString& wsCut) override;
-  bool Paste(const CFX_WideString& wsPaste) override;
-  bool SelectAll() override;
-  bool Delete() override;
-  bool DeSelect() override;
-  bool GetSuggestWords(CFX_PointF pointf,
-                       std::vector<CFX_ByteString>& sSuggest) override;
-  bool ReplaceSpellCheckWord(CFX_PointF pointf,
-                             const CFX_ByteStringC& bsReplace) override;
   void OnProcessMessage(CFWL_Message* pMessage) override;
   void OnProcessEvent(CFWL_Event* pEvent) override;
   void OnDrawWidget(CFX_Graphics* pGraphics,
@@ -107,21 +89,6 @@
                bool bDrawFocus = false) override;
   bool LoadWidget() override;
   void UpdateWidgetProperty() override;
-
-  bool CanUndo() override;
-  bool CanRedo() override;
-  bool Undo() override;
-  bool Redo() override;
-  bool CanCopy() override;
-  bool CanCut() override;
-  bool CanPaste() override;
-  bool CanSelectAll() override;
-  bool Copy(CFX_WideString& wsCopy) override;
-  bool Cut(CFX_WideString& wsCut) override;
-  bool Paste(const CFX_WideString& wsPaste) override;
-  bool SelectAll() override;
-  bool Delete() override;
-  bool DeSelect() override;
   void OnProcessEvent(CFWL_Event* pEvent) override;
 
   void OnSelectChanged(IFWL_Widget* pWidget,