Cleanup FWL default values part II.

This CL cleans up the remaining default values in the fwl/core directory. Some
methods are renamed to better represent what they do.

Review-Url: https://codereview.chromium.org/2557103002
diff --git a/xfa/fde/cfde_txtedtdorecord_deleterange.cpp b/xfa/fde/cfde_txtedtdorecord_deleterange.cpp
index 12ab203..d1682dd 100644
--- a/xfa/fde/cfde_txtedtdorecord_deleterange.cpp
+++ b/xfa/fde/cfde_txtedtdorecord_deleterange.cpp
@@ -36,7 +36,7 @@
   FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
   m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
   m_pEngine->m_ChangeInfo.wsDelete = m_wsRange;
-  Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo);
+  Param.pEventSink->OnTextChanged(m_pEngine->m_ChangeInfo);
   m_pEngine->SetCaretPos(m_nCaret, true);
   return true;
 }
@@ -49,7 +49,7 @@
   FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
   m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
   m_pEngine->m_ChangeInfo.wsDelete = m_wsRange;
-  Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo);
+  Param.pEventSink->OnTextChanged(m_pEngine->m_ChangeInfo);
   m_pEngine->SetCaretPos(m_nIndex, true);
   return true;
 }
diff --git a/xfa/fde/cfde_txtedtdorecord_insert.cpp b/xfa/fde/cfde_txtedtdorecord_insert.cpp
index 3ea9269..e659f02 100644
--- a/xfa/fde/cfde_txtedtdorecord_insert.cpp
+++ b/xfa/fde/cfde_txtedtdorecord_insert.cpp
@@ -31,7 +31,7 @@
   FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
   m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
   m_pEngine->m_ChangeInfo.wsDelete = m_wsInsert;
-  Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo);
+  Param.pEventSink->OnTextChanged(m_pEngine->m_ChangeInfo);
   m_pEngine->SetCaretPos(m_nCaret, true);
   return true;
 }
@@ -41,7 +41,7 @@
   FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
   m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
   m_pEngine->m_ChangeInfo.wsDelete = m_wsInsert;
-  Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo);
+  Param.pEventSink->OnTextChanged(m_pEngine->m_ChangeInfo);
   m_pEngine->SetCaretPos(m_nCaret, false);
   return true;
 }
diff --git a/xfa/fde/cfde_txtedtengine.cpp b/xfa/fde/cfde_txtedtengine.cpp
index d9e321f..6e113e1 100644
--- a/xfa/fde/cfde_txtedtengine.cpp
+++ b/xfa/fde/cfde_txtedtengine.cpp
@@ -8,6 +8,7 @@
 
 #include <algorithm>
 
+#include "third_party/base/ptr_util.h"
 #include "xfa/fde/cfde_txtedtbuf.h"
 #include "xfa/fde/cfde_txtedtbufiter.h"
 #include "xfa/fde/cfde_txtedtdorecord_deleterange.h"
@@ -207,7 +208,7 @@
   m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical)
                            ? m_rtCaret.top
                            : m_rtCaret.left;
-  m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnCaretChanged();
   m_nAnchorPos = -1;
   return m_nCaret;
 }
@@ -323,11 +324,11 @@
   if (bShift && m_nAnchorPos != -1 && (m_nAnchorPos != m_nCaret)) {
     AddSelRange(std::min(m_nAnchorPos, m_nCaret),
                 FXSYS_abs(m_nAnchorPos - m_nCaret));
-    m_Param.pEventSink->On_SelChanged(this);
+    m_Param.pEventSink->OnSelChanged();
   }
-  if (bSelChange) {
-    m_Param.pEventSink->On_SelChanged(this);
-  }
+  if (bSelChange)
+    m_Param.pEventSink->OnSelChanged();
+
   return m_nCaret;
 }
 
@@ -406,19 +407,18 @@
   }
   if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
     CFX_WideString wsText = GetPreInsertText(m_nCaret, lpBuffer, nLength);
-    if (!m_Param.pEventSink->On_Validate(this, wsText)) {
+    if (!m_Param.pEventSink->OnValidate(wsText))
       return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
-    }
   }
   if (IsSelect()) {
     DeleteSelect();
   }
   if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo))
-    m_Param.pEventSink->On_AddDoRecord(
-        this,
-        new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength));
+    m_Param.pEventSink->OnAddDoRecord(
+        pdfium::MakeUnique<CFDE_TxtEdtDoRecord_Insert>(this, m_nCaret, lpBuffer,
+                                                       nLength));
 
-  m_ChangeInfo.wsPrevText = GetText(0);
+  m_ChangeInfo.wsPrevText = GetText(0, -1);
   Inner_Insert(m_nCaret, lpBuffer, nLength);
   m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
   m_ChangeInfo.wsInsert = CFX_WideString(lpBuffer, nLength);
@@ -431,7 +431,7 @@
     bBefore = false;
   }
   SetCaretPos(nStart, bBefore);
-  m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
+  m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
   return bPart ? FDE_TXTEDT_MODIFY_RET_S_Part : FDE_TXTEDT_MODIFY_RET_S_Normal;
 }
 
@@ -467,43 +467,38 @@
   }
   if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
     CFX_WideString wsText = GetPreDeleteText(nStart, nCount);
-    if (!m_Param.pEventSink->On_Validate(this, wsText)) {
+    if (!m_Param.pEventSink->OnValidate(wsText))
       return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
-    }
   }
   if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
     CFX_WideString wsRange = m_pTxtBuf->GetRange(nStart, nCount);
-    m_Param.pEventSink->On_AddDoRecord(
-        this,
-        new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret, wsRange));
+    m_Param.pEventSink->OnAddDoRecord(
+        pdfium::MakeUnique<CFDE_TxtEdtDoRecord_DeleteRange>(this, nStart,
+                                                            m_nCaret, wsRange));
   }
   m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
   m_ChangeInfo.wsDelete = GetText(nStart, nCount);
   Inner_DeleteRange(nStart, nCount);
   SetCaretPos(nStart + ((!bBackspace && nStart > 0) ? -1 : 0),
               (bBackspace || nStart == 0));
-  m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
+  m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
   return FDE_TXTEDT_MODIFY_RET_S_Normal;
 }
 
 int32_t CFDE_TxtEdtEngine::DeleteRange(int32_t nStart, int32_t nCount) {
-  if (IsLocked()) {
+  if (IsLocked())
     return FDE_TXTEDT_MODIFY_RET_F_Locked;
-  }
-  if (nCount == -1) {
+  if (nCount == -1)
     nCount = GetTextBufLength();
-  }
-  if (nCount == 0) {
+  if (nCount == 0)
     return FDE_TXTEDT_MODIFY_RET_S_Normal;
-  }
   if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
     CFX_WideString wsText = GetPreDeleteText(nStart, nCount);
-    if (!m_Param.pEventSink->On_Validate(this, wsText)) {
+    if (!m_Param.pEventSink->OnValidate(wsText))
       return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
-    }
   }
   DeleteRange_DoRecord(nStart, nCount);
-  m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
+  m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
   SetCaretPos(nStart, true);
   return FDE_TXTEDT_MODIFY_RET_S_Normal;
 }
@@ -511,31 +506,28 @@
 int32_t CFDE_TxtEdtEngine::Replace(int32_t nStart,
                                    int32_t nLength,
                                    const CFX_WideString& wsReplace) {
-  if (IsLocked()) {
+  if (IsLocked())
     return FDE_TXTEDT_MODIFY_RET_F_Locked;
-  }
-  if (nStart < 0 || (nStart + nLength > GetTextBufLength())) {
+  if (nStart < 0 || (nStart + nLength > GetTextBufLength()))
     return FDE_TXTEDT_MODIFY_RET_F_Boundary;
-  }
   if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
     CFX_WideString wsText = GetPreReplaceText(
         nStart, nLength, wsReplace.c_str(), wsReplace.GetLength());
-    if (!m_Param.pEventSink->On_Validate(this, wsText)) {
+    if (!m_Param.pEventSink->OnValidate(wsText))
       return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
-    }
   }
-  if (IsSelect()) {
+  if (IsSelect())
     ClearSelection();
-  }
+
   m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Replace;
   m_ChangeInfo.wsDelete = GetText(nStart, nLength);
-  if (nLength > 0) {
+  if (nLength > 0)
     Inner_DeleteRange(nStart, nLength);
-  }
+
   int32_t nTextLength = wsReplace.GetLength();
-  if (nTextLength > 0) {
+  if (nTextLength > 0)
     Inner_Insert(nStart, wsReplace.c_str(), nTextLength);
-  }
+
   m_ChangeInfo.wsInsert = CFX_WideString(wsReplace.c_str(), nTextLength);
   nStart += nTextLength;
   FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1);
@@ -545,9 +537,9 @@
     bBefore = false;
   }
   SetCaretPos(nStart, bBefore);
-  m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
-  m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
-  m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
+  m_Param.pEventSink->OnPageUnload(m_nCaretPage);
+  m_Param.pEventSink->OnPageLoad(m_nCaretPage);
+  m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
   return FDE_TXTEDT_MODIFY_RET_S_Normal;
 }
 
@@ -583,7 +575,7 @@
     lpSelRange->nStart = nStart;
     lpSelRange->nCount = nCount;
     m_SelRangePtrArr.Add(lpSelRange);
-    m_Param.pEventSink->On_SelChanged(this);
+    m_Param.pEventSink->OnSelChanged();
     return;
   }
   FDE_TXTEDTSELRANGE* lpTemp = nullptr;
@@ -593,7 +585,7 @@
     lpSelRange->nStart = nStart;
     lpSelRange->nCount = nCount;
     m_SelRangePtrArr.Add(lpSelRange);
-    m_Param.pEventSink->On_SelChanged(this);
+    m_Param.pEventSink->OnSelChanged();
     return;
   }
   int32_t nEnd = nStart + nCount - 1;
@@ -639,15 +631,16 @@
       m_SelRangePtrArr.RemoveAt(nRangeBgn);
     }
   }
-  m_Param.pEventSink->On_SelChanged(this);
+  m_Param.pEventSink->OnSelChanged();
 }
 
 int32_t CFDE_TxtEdtEngine::CountSelRanges() const {
   return m_SelRangePtrArr.GetSize();
 }
 
-int32_t CFDE_TxtEdtEngine::GetSelRange(int32_t nIndex, int32_t& nStart) const {
-  nStart = m_SelRangePtrArr[nIndex]->nStart;
+int32_t CFDE_TxtEdtEngine::GetSelRange(int32_t nIndex, int32_t* nStart) const {
+  if (nStart)
+    *nStart = m_SelRangePtrArr[nIndex]->nStart;
   return m_SelRangePtrArr[nIndex]->nCount;
 }
 
@@ -657,7 +650,7 @@
     delete m_SelRangePtrArr[i];
   m_SelRangePtrArr.RemoveAll();
   if (nCount && m_Param.pEventSink)
-    m_Param.pEventSink->On_SelChanged(this);
+    m_Param.pEventSink->OnSelChanged();
 }
 
 bool CFDE_TxtEdtEngine::Redo(const IFDE_TxtEdtDoRecord* pDoRecord) {
@@ -787,7 +780,7 @@
   int32_t nSelLength = 0;
   int32_t nSelCount = CountSelRanges();
   while (nSelCount--) {
-    nSelLength = GetSelRange(nSelCount, nSelIndex);
+    nSelLength = GetSelRange(nSelCount, &nSelIndex);
     wsText.Delete(nSelIndex, nSelLength);
     nIndex = nSelIndex;
   }
@@ -813,7 +806,7 @@
   int32_t nSelLength = 0;
   int32_t nSelCount = CountSelRanges();
   while (nSelCount--) {
-    nSelLength = GetSelRange(nSelCount, nSelIndex);
+    nSelLength = GetSelRange(nSelCount, &nSelIndex);
     wsText.Delete(nSelIndex, nSelLength);
   }
   wsText.Delete(nIndex, nOriginLength);
@@ -830,7 +823,7 @@
   ASSERT(nLength > 0);
   FDE_TXTEDTPARAGPOS ParagPos;
   TextPos2ParagPos(nStart, ParagPos);
-  m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnPageUnload(m_nCaretPage);
   int32_t nParagCount = m_ParagPtrArray.GetSize();
   int32_t i = 0;
   for (i = ParagPos.nParagIndex + 1; i < nParagCount; i++)
@@ -884,7 +877,7 @@
     nTotalLineCount += pParag->GetLineCount();
   }
   m_nLineCount += nTotalLineCount - nReserveLineCount;
-  m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnPageLoad(m_nCaretPage);
   UpdatePages();
 }
 
@@ -894,7 +887,7 @@
   }
   int32_t nEnd = nStart + nCount - 1;
   ASSERT(nStart >= 0 && nEnd < m_pTxtBuf->GetTextLength());
-  m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnPageUnload(m_nCaretPage);
   FDE_TXTEDTPARAGPOS ParagPosBgn, ParagPosEnd;
   TextPos2ParagPos(nStart, ParagPosBgn);
   TextPos2ParagPos(nEnd, ParagPosEnd);
@@ -940,7 +933,7 @@
   if (m_nCaretPage >= nPageCount) {
     m_nCaretPage = nPageCount - 1;
   }
-  m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnPageLoad(m_nCaretPage);
 }
 
 void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart,
@@ -954,9 +947,9 @@
 
   if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
     CFX_WideString wsRange = m_pTxtBuf->GetRange(nStart, nCount);
-    m_Param.pEventSink->On_AddDoRecord(
-        this, new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret,
-                                                  wsRange, bSel));
+    m_Param.pEventSink->OnAddDoRecord(
+        pdfium::MakeUnique<CFDE_TxtEdtDoRecord_DeleteRange>(
+            this, nStart, m_nCaret, wsRange, bSel));
   }
   m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
   m_ChangeInfo.wsDelete = GetText(nStart, nCount);
@@ -1235,14 +1228,14 @@
   ASSERT(nIndex <= m_pTxtBuf->GetTextLength());
   if (m_nCaretPage >= 0) {
     IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage];
-    m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
+    m_Param.pEventSink->OnPageLoad(m_nCaretPage);
     int32_t nPageCharStart = pPage->GetCharStart();
     int32_t nPageCharCount = pPage->GetCharCount();
     if (nIndex >= nPageCharStart && nIndex < nPageCharStart + nPageCharCount) {
-      m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
+      m_Param.pEventSink->OnPageUnload(m_nCaretPage);
       return m_nCaretPage;
     }
-    m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
+    m_Param.pEventSink->OnPageUnload(m_nCaretPage);
   }
   CFDE_TxtEdtParag* pParag = nullptr;
   int32_t nLineCount = 0;
@@ -1552,7 +1545,7 @@
   m_fCaretPosReserve = (m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_DocVertical)
                            ? m_rtCaret.top
                            : m_rtCaret.left;
-  m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnCaretChanged();
 }
 
 void CFDE_TxtEdtEngine::GetCaretRect(CFX_RectF& rtCaret,
@@ -1560,7 +1553,7 @@
                                      int32_t nCaret,
                                      bool bBefore) {
   IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage];
-  m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnPageLoad(m_nCaretPage);
   bool bCombText = !!(m_Param.dwLayoutStyles & FDE_TEXTEDITLAYOUT_CombText);
   int32_t nIndexInpage = nCaret - pPage->GetCharStart();
   if (bBefore && bCombText && nIndexInpage > 0) {
@@ -1587,20 +1580,20 @@
 
     rtCaret.width = 1.0f;
   }
-  m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnPageUnload(m_nCaretPage);
 }
 
 void CFDE_TxtEdtEngine::UpdateCaretIndex(const CFX_PointF& ptCaret) {
   IFDE_TxtEdtPage* pPage = m_PagePtrArray[m_nCaretPage];
-  m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnPageLoad(m_nCaretPage);
   m_nCaret = pPage->GetCharIndex(ptCaret, m_bBefore);
   GetCaretRect(m_rtCaret, m_nCaretPage, m_nCaret, m_bBefore);
   if (!m_bBefore) {
     m_nCaret++;
     m_bBefore = true;
   }
-  m_Param.pEventSink->On_CaretChanged(this, m_nCaretPage);
-  m_Param.pEventSink->On_PageUnload(this, m_nCaretPage, 0);
+  m_Param.pEventSink->OnCaretChanged();
+  m_Param.pEventSink->OnPageUnload(m_nCaretPage);
 }
 
 bool CFDE_TxtEdtEngine::IsSelect() {
@@ -1612,14 +1605,14 @@
   if (nCountRange > 0) {
     int32_t nSelStart = 0;
     while (nCountRange > 0) {
-      int32_t nSelCount = GetSelRange(--nCountRange, nSelStart);
+      int32_t nSelCount = GetSelRange(--nCountRange, &nSelStart);
       delete m_SelRangePtrArr[nCountRange];
       m_SelRangePtrArr.RemoveAt(nCountRange);
       DeleteRange_DoRecord(nSelStart, nSelCount, true);
     }
     ClearSelection();
-    m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
-    m_Param.pEventSink->On_SelChanged(this);
+    m_Param.pEventSink->OnTextChanged(m_ChangeInfo);
+    m_Param.pEventSink->OnSelChanged();
     SetCaretPos(nSelStart, true);
     return;
   }
diff --git a/xfa/fde/cfde_txtedtengine.h b/xfa/fde/cfde_txtedtengine.h
index a01f756..755a820 100644
--- a/xfa/fde/cfde_txtedtengine.h
+++ b/xfa/fde/cfde_txtedtengine.h
@@ -32,7 +32,7 @@
   void SetTextByStream(const CFX_RetainPtr<IFGAS_Stream>& pStream);
   void SetText(const CFX_WideString& wsText);
   int32_t GetTextLength() const;
-  CFX_WideString GetText(int32_t nStart, int32_t nCount = -1) const;
+  CFX_WideString GetText(int32_t nStart, int32_t nCount) const;
   void ClearText();
 
   int32_t GetCaretRect(CFX_RectF& rtCaret) const;
@@ -55,11 +55,11 @@
   void SetLimit(int32_t nLimit);
   void SetAliasChar(FX_WCHAR wcAlias);
 
-  void RemoveSelRange(int32_t nStart, int32_t nCount = -1);
+  void RemoveSelRange(int32_t nStart, int32_t nCount);
 
-  void AddSelRange(int32_t nStart, int32_t nCount = -1);
+  void AddSelRange(int32_t nStart, int32_t nCount);
   int32_t CountSelRanges() const;
-  int32_t GetSelRange(int32_t nIndex, int32_t& nStart) const;
+  int32_t GetSelRange(int32_t nIndex, int32_t* nStart) const;
   void ClearSelection();
 
   bool Redo(const IFDE_TxtEdtDoRecord* pRecord);
diff --git a/xfa/fwl/core/cfwl_combobox.cpp b/xfa/fwl/core/cfwl_combobox.cpp
index 70f8635..2d59b7d 100644
--- a/xfa/fwl/core/cfwl_combobox.cpp
+++ b/xfa/fwl/core/cfwl_combobox.cpp
@@ -300,11 +300,9 @@
   m_pEdit->Update();
 }
 
-CFX_WideString CFWL_ComboBox::GetEditText(int32_t nStart,
-                                          int32_t nCount) const {
-  if (m_pEdit) {
-    return m_pEdit->GetText(nStart, nCount);
-  }
+CFX_WideString CFWL_ComboBox::GetEditText() const {
+  if (m_pEdit)
+    return m_pEdit->GetText();
   if (!m_pListBox)
     return L"";
 
@@ -624,7 +622,7 @@
     pComboList->ChangeSelected(m_iCurSel);
 
     FX_FLOAT fItemHeight = pComboList->CalcItemHeight();
-    FX_FLOAT fBorder = GetBorderSize();
+    FX_FLOAT fBorder = GetBorderSize(true);
     FX_FLOAT fPopupMin = 0.0f;
     if (iItems > 3)
       fPopupMin = fItemHeight * 3 + fBorder * 2;
diff --git a/xfa/fwl/core/cfwl_combobox.h b/xfa/fwl/core/cfwl_combobox.h
index dda8348..812a6d0 100644
--- a/xfa/fwl/core/cfwl_combobox.h
+++ b/xfa/fwl/core/cfwl_combobox.h
@@ -77,7 +77,7 @@
   void RemoveAll();
 
   void SetEditText(const CFX_WideString& wsText);
-  CFX_WideString GetEditText(int32_t nStart = 0, int32_t nCount = -1) const;
+  CFX_WideString GetEditText() const;
 
   void OpenDropDownList(bool bActivate);
 
@@ -127,6 +127,14 @@
   void ResetEditAlignment();
   void ResetListItemAlignment();
   void InitProxyForm();
+  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+  void OnLButtonDown(CFWL_MsgMouse* pMsg);
+  void OnLButtonUp(CFWL_MsgMouse* pMsg);
+  void OnMouseMove(CFWL_MsgMouse* pMsg);
+  void OnMouseLeave(CFWL_MsgMouse* pMsg);
+  void OnKey(CFWL_MsgKey* pMsg);
+  void DoSubCtrlKey(CFWL_MsgKey* pMsg);
+
   void DisForm_InitComboList();
   void DisForm_InitComboEdit();
   void DisForm_ShowDropList(bool bActivate);
@@ -137,20 +145,12 @@
                               uint32_t dwStylesExRemoved);
   void DisForm_Update();
   FWL_WidgetHit DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy);
-  void DisForm_DrawWidget(CFX_Graphics* pGraphics,
-                          const CFX_Matrix* pMatrix = nullptr);
+  void DisForm_DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix);
   void DisForm_GetBBox(CFX_RectF& rect) const;
   void DisForm_Layout();
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet = true);
-  void OnLButtonDown(CFWL_MsgMouse* pMsg);
-  void OnLButtonUp(CFWL_MsgMouse* pMsg);
-  void OnMouseMove(CFWL_MsgMouse* pMsg);
-  void OnMouseLeave(CFWL_MsgMouse* pMsg);
-  void OnKey(CFWL_MsgKey* pMsg);
-  void DoSubCtrlKey(CFWL_MsgKey* pMsg);
   void DisForm_OnProcessMessage(CFWL_Message* pMessage);
   void DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg);
-  void DisForm_OnFocusChanged(CFWL_Message* pMsg, bool bSet = true);
+  void DisForm_OnFocusChanged(CFWL_Message* pMsg, bool bSet);
   void DisForm_OnKey(CFWL_MsgKey* pMsg);
 
   CFX_RectF m_rtClient;
diff --git a/xfa/fwl/core/cfwl_datetimepicker.cpp b/xfa/fwl/core/cfwl_datetimepicker.cpp
index 29aaaf0..5207c9a 100644
--- a/xfa/fwl/core/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/core/cfwl_datetimepicker.cpp
@@ -196,9 +196,8 @@
   DispatchEvent(&ev);
 }
 
-CFX_WideString CFWL_DateTimePicker::GetEditText(int32_t nStart,
-                                                int32_t nCount) const {
-  return m_pEdit ? m_pEdit->GetText(nStart, nCount) : L"";
+CFX_WideString CFWL_DateTimePicker::GetEditText() const {
+  return m_pEdit ? m_pEdit->GetText() : L"";
 }
 
 void CFWL_DateTimePicker::GetBBox(CFX_RectF& rect) const {
diff --git a/xfa/fwl/core/cfwl_datetimepicker.h b/xfa/fwl/core/cfwl_datetimepicker.h
index 9856274..d6d47eb 100644
--- a/xfa/fwl/core/cfwl_datetimepicker.h
+++ b/xfa/fwl/core/cfwl_datetimepicker.h
@@ -55,10 +55,10 @@
   void SetCurSel(int32_t iYear, int32_t iMonth, int32_t iDay);
 
   void SetEditText(const CFX_WideString& wsText);
-  CFX_WideString GetEditText(int32_t nStart = 0, int32_t nCount = -1) const;
+  CFX_WideString GetEditText() const;
 
   int32_t CountSelRanges() const { return m_pEdit->CountSelRanges(); }
-  int32_t GetSelRange(int32_t nIndex, int32_t& nStart) const {
+  int32_t GetSelRange(int32_t nIndex, int32_t* nStart) const {
     return m_pEdit->GetSelRange(nIndex, nStart);
   }
 
@@ -82,6 +82,11 @@
                         CFX_WideString& wsText);
   void ResetEditAlignment();
   void InitProxyForm();
+  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+  void OnLButtonDown(CFWL_MsgMouse* pMsg);
+  void OnLButtonUp(CFWL_MsgMouse* pMsg);
+  void OnMouseMove(CFWL_MsgMouse* pMsg);
+  void OnMouseLeave(CFWL_MsgMouse* pMsg);
 
   bool DisForm_IsMonthCalendarVisible() const;
   void DisForm_ShowMonthCalendar(bool bActivate);
@@ -90,14 +95,8 @@
   void DisForm_Update();
   void DisForm_GetWidgetRect(CFX_RectF& rect, bool bAutoSize);
   void DisForm_GetBBox(CFX_RectF& rect) const;
-  void DisForm_DrawWidget(CFX_Graphics* pGraphics,
-                          const CFX_Matrix* pMatrix = nullptr);
+  void DisForm_DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix);
   void DisForm_OnFocusChanged(CFWL_Message* pMsg, bool bSet);
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
-  void OnLButtonDown(CFWL_MsgMouse* pMsg);
-  void OnLButtonUp(CFWL_MsgMouse* pMsg);
-  void OnMouseMove(CFWL_MsgMouse* pMsg);
-  void OnMouseLeave(CFWL_MsgMouse* pMsg);
 
   CFX_RectF m_rtBtn;
   CFX_RectF m_rtClient;
diff --git a/xfa/fwl/core/cfwl_edit.cpp b/xfa/fwl/core/cfwl_edit.cpp
index a2fee2a..c5c69a3 100644
--- a/xfa/fwl/core/cfwl_edit.cpp
+++ b/xfa/fwl/core/cfwl_edit.cpp
@@ -113,7 +113,7 @@
 
   int32_t iTextLen = m_EdtEngine.GetTextLength();
   if (iTextLen > 0) {
-    CFX_WideString wsText = m_EdtEngine.GetText(0);
+    CFX_WideString wsText = m_EdtEngine.GetText(0, -1);
     CFX_SizeF sz = CalcTextSize(
         wsText, m_pProperties->m_pThemeProvider,
         !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine));
@@ -297,23 +297,23 @@
   return m_EdtEngine.GetTextLength();
 }
 
-CFX_WideString CFWL_Edit::GetText(int32_t nStart, int32_t nCount) const {
-  return m_EdtEngine.GetText(nStart, nCount);
+CFX_WideString CFWL_Edit::GetText() const {
+  return m_EdtEngine.GetText(0, -1);
 }
 
 void CFWL_Edit::ClearText() {
   m_EdtEngine.ClearText();
 }
 
-void CFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) {
-  m_EdtEngine.AddSelRange(nStart, nCount);
+void CFWL_Edit::AddSelRange(int32_t nStart) {
+  m_EdtEngine.AddSelRange(nStart, -1);
 }
 
 int32_t CFWL_Edit::CountSelRanges() const {
   return m_EdtEngine.CountSelRanges();
 }
 
-int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) const {
+int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t* nStart) const {
   return m_EdtEngine.GetSelRange(nIndex, nStart);
 }
 
@@ -340,13 +340,11 @@
     return false;
 
   wsCopy.clear();
-  CFX_WideString wsTemp;
-  int32_t nStart, nLength;
+  int32_t nStart;
+  int32_t nLength;
   for (int32_t i = 0; i < nCount; i++) {
-    nLength = m_EdtEngine.GetSelRange(i, nStart);
-    wsTemp = m_EdtEngine.GetText(nStart, nLength);
-    wsCopy += wsTemp;
-    wsTemp.clear();
+    nLength = m_EdtEngine.GetSelRange(i, &nStart);
+    wsCopy += m_EdtEngine.GetText(nStart, nLength);
   }
   return true;
 }
@@ -360,7 +358,7 @@
   CFX_WideString wsTemp;
   int32_t nStart, nLength;
   for (int32_t i = 0; i < nCount; i++) {
-    nLength = m_EdtEngine.GetSelRange(i, nStart);
+    nLength = m_EdtEngine.GetSelRange(i, &nStart);
     wsTemp = m_EdtEngine.GetText(nStart, nLength);
     wsCut += wsTemp;
     wsTemp.clear();
@@ -416,9 +414,7 @@
   m_pOuter = pOuter;
 }
 
-void CFWL_Edit::On_CaretChanged(CFDE_TxtEdtEngine* pEdit,
-                                int32_t nPage,
-                                bool bVisible) {
+void CFWL_Edit::OnCaretChanged() {
   if (m_rtEngine.IsEmpty())
     return;
   if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)
@@ -443,8 +439,7 @@
   }
 }
 
-void CFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit,
-                               FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) {
+void CFWL_Edit::OnTextChanged(const FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) {
   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask)
     UpdateVAlignment();
 
@@ -459,15 +454,13 @@
   Repaint(&rtTemp);
 }
 
-void CFWL_Edit::On_SelChanged(CFDE_TxtEdtEngine* pEdit) {
+void CFWL_Edit::OnSelChanged() {
   CFX_RectF rtTemp;
   GetClientRect(rtTemp);
   Repaint(&rtTemp);
 }
 
-bool CFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit,
-                            int32_t nPageIndex,
-                            int32_t nPurpose) {
+bool CFWL_Edit::OnPageLoad(int32_t nPageIndex) {
   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex);
   if (!pPage)
     return false;
@@ -476,9 +469,7 @@
   return true;
 }
 
-bool CFWL_Edit::On_PageUnload(CFDE_TxtEdtEngine* pEdit,
-                              int32_t nPageIndex,
-                              int32_t nPurpose) {
+bool CFWL_Edit::OnPageUnload(int32_t nPageIndex) {
   IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex);
   if (!pPage)
     return false;
@@ -487,12 +478,11 @@
   return true;
 }
 
-void CFWL_Edit::On_AddDoRecord(CFDE_TxtEdtEngine* pEdit,
-                               IFDE_TxtEdtDoRecord* pRecord) {
-  AddDoRecord(pRecord);
+void CFWL_Edit::OnAddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord) {
+  AddDoRecord(std::move(pRecord));
 }
 
-bool CFWL_Edit::On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText) {
+bool CFWL_Edit::OnValidate(const CFX_WideString& wsText) {
   CFWL_Widget* pDst = GetOuter();
   if (!pDst)
     pDst = this;
@@ -583,7 +573,7 @@
     CFX_RectFArray rectArr;
     int32_t i = 0;
     for (i = 0; i < nSelCount; i++) {
-      nCharCount = m_EdtEngine.GetSelRange(i, nCharStart);
+      nCharCount = m_EdtEngine.GetSelRange(i, &nCharStart);
       int32_t nCharEnd = nCharStart + nCharCount - 1;
       if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd)
         continue;
@@ -991,7 +981,7 @@
   return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f;
 }
 
-int32_t CFWL_Edit::AddDoRecord(IFDE_TxtEdtDoRecord* pRecord) {
+int32_t CFWL_Edit::AddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord) {
   int32_t nCount = pdfium::CollectionSize<int32_t>(m_DoRecords);
   if (m_iCurRecord == nCount - 1) {
     if (nCount == m_iMaxRecord) {
@@ -1003,7 +993,7 @@
                       m_DoRecords.end());
   }
 
-  m_DoRecords.push_back(std::unique_ptr<IFDE_TxtEdtDoRecord>(pRecord));
+  m_DoRecords.push_back(std::move(pRecord));
   m_iCurRecord = pdfium::CollectionSize<int32_t>(m_DoRecords) - 1;
   return m_iCurRecord;
 }
@@ -1039,7 +1029,7 @@
   bool bShowVertScrollbar = IsShowScrollBar(true);
   bool bShowHorzScrollbar = IsShowScrollBar(false);
   if (bShowVertScrollbar) {
-    InitScrollBar();
+    InitVerticalScrollBar();
 
     CFX_RectF rtVertScr;
     if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
@@ -1061,7 +1051,7 @@
   }
 
   if (bShowHorzScrollbar) {
-    InitScrollBar(false);
+    InitHorizontalScrollBar();
 
     CFX_RectF rtHoriScr;
     if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
@@ -1096,7 +1086,7 @@
       pfWidth = static_cast<FX_FLOAT*>(
           GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
       FX_FLOAT fWidth = pfWidth ? *pfWidth : 0;
-      InitScrollBar();
+      InitVerticalScrollBar();
       CFX_RectF rtVertScr;
       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
         rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth,
@@ -1123,7 +1113,7 @@
       }
 
       FX_FLOAT fWidth = pfWidth ? *pfWidth : 0;
-      InitScrollBar(false);
+      InitHorizontalScrollBar();
       CFX_RectF rtHoriScr;
       if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) {
         rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin,
@@ -1150,21 +1140,30 @@
   pt.y += m_fScrollOffsetY - m_rtEngine.top - m_fVAlignOffset;
 }
 
-void CFWL_Edit::InitScrollBar(bool bVert) {
-  if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar))
+void CFWL_Edit::InitVerticalScrollBar() {
+  if (m_pVertScrollBar)
     return;
 
   auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
-  prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz;
+  prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Vert;
   prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible;
   prop->m_pParent = this;
   prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  m_pVertScrollBar =
+      pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this);
+}
 
-  CFWL_ScrollBar* sb = new CFWL_ScrollBar(m_pOwnerApp, std::move(prop), this);
-  if (bVert)
-    m_pVertScrollBar.reset(sb);
-  else
-    m_pHorzScrollBar.reset(sb);
+void CFWL_Edit::InitHorizontalScrollBar() {
+  if (m_pHorzScrollBar)
+    return;
+
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Horz;
+  prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible;
+  prop->m_pParent = this;
+  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  m_pHorzScrollBar =
+      pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this);
 }
 
 void CFWL_Edit::ShowCaret(CFX_RectF* pRect) {
@@ -1232,7 +1231,7 @@
   if (!m_bSetRange)
     return true;
 
-  CFX_WideString wsText = m_EdtEngine.GetText(0);
+  CFX_WideString wsText = m_EdtEngine.GetText(0, -1);
   if (wsText.IsEmpty()) {
     if (cNum == L'0')
       return false;
diff --git a/xfa/fwl/core/cfwl_edit.h b/xfa/fwl/core/cfwl_edit.h
index 0e5f0dc..8143c7d 100644
--- a/xfa/fwl/core/cfwl_edit.h
+++ b/xfa/fwl/core/cfwl_edit.h
@@ -79,12 +79,12 @@
   virtual void SetText(const CFX_WideString& wsText);
 
   int32_t GetTextLength() const;
-  CFX_WideString GetText(int32_t nStart = 0, int32_t nCount = -1) const;
+  CFX_WideString GetText() const;
   void ClearText();
 
-  void AddSelRange(int32_t nStart, int32_t nCount = -1);
+  void AddSelRange(int32_t nStart);
   int32_t CountSelRanges() const;
-  int32_t GetSelRange(int32_t nIndex, int32_t& nStart) const;
+  int32_t GetSelRange(int32_t nIndex, int32_t* nStart) const;
   void ClearSelections();
   int32_t GetLimit() const;
   void SetLimit(int32_t nLimit);
@@ -101,20 +101,13 @@
 
   void SetOuter(CFWL_Widget* pOuter);
 
-  void On_CaretChanged(CFDE_TxtEdtEngine* pEdit,
-                       int32_t nPage,
-                       bool bVisible = true);
-  void On_TextChanged(CFDE_TxtEdtEngine* pEdit,
-                      FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo);
-  void On_SelChanged(CFDE_TxtEdtEngine* pEdit);
-  bool On_PageLoad(CFDE_TxtEdtEngine* pEdit,
-                   int32_t nPageIndex,
-                   int32_t nPurpose);
-  bool On_PageUnload(CFDE_TxtEdtEngine* pEdit,
-                     int32_t nPageIndex,
-                     int32_t nPurpose);
-  void On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, IFDE_TxtEdtDoRecord* pRecord);
-  bool On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText);
+  void OnCaretChanged();
+  void OnTextChanged(const FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo);
+  void OnSelChanged();
+  bool OnPageLoad(int32_t nPageIndex);
+  bool OnPageUnload(int32_t nPageIndex);
+  void OnAddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord);
+  bool OnValidate(const CFX_WideString& wsText);
   void SetScrollOffset(FX_FLOAT fScrollOffset);
 
  protected:
@@ -126,10 +119,12 @@
  private:
   void DrawTextBk(CFX_Graphics* pGraphics,
                   IFWL_ThemeProvider* pTheme,
-                  const CFX_Matrix* pMatrix = nullptr);
+                  const CFX_Matrix* pMatrix);
   void DrawContent(CFX_Graphics* pGraphics,
                    IFWL_ThemeProvider* pTheme,
-                   const CFX_Matrix* pMatrix = nullptr);
+                   const CFX_Matrix* pMatrix);
+  void DrawSpellCheck(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix);
+
   void UpdateEditEngine();
   void UpdateEditParams();
   void UpdateEditLayout();
@@ -141,23 +136,22 @@
   void Layout();
   void LayoutScrollBar();
   void DeviceToEngine(CFX_PointF& pt);
-  void InitScrollBar(bool bVert = true);
+  void InitVerticalScrollBar();
+  void InitHorizontalScrollBar();
   void InitEngine();
-  bool ValidateNumberChar(FX_WCHAR cNum);
   void InitCaret();
+  bool ValidateNumberChar(FX_WCHAR cNum);
   void ClearRecord();
   bool IsShowScrollBar(bool bVert);
   bool IsContentHeightOverflow();
-  int32_t AddDoRecord(IFDE_TxtEdtDoRecord* pRecord);
+  int32_t AddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord);
   void ProcessInsertError(int32_t iError);
-
-  void DrawSpellCheck(CFX_Graphics* pGraphics,
-                      const CFX_Matrix* pMatrix = nullptr);
   void AddSpellCheckObj(CFX_Path& PathData,
                         int32_t nStart,
                         int32_t nCount,
                         FX_FLOAT fOffSetX,
                         FX_FLOAT fOffSetY);
+
   void DoButtonDown(CFWL_MsgMouse* pMsg);
   void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
   void OnLButtonDown(CFWL_MsgMouse* pMsg);
diff --git a/xfa/fwl/core/cfwl_form.cpp b/xfa/fwl/core/cfwl_form.cpp
index 1fe5e90..60f0de3 100644
--- a/xfa/fwl/core/cfwl_form.cpp
+++ b/xfa/fwl/core/cfwl_form.cpp
@@ -385,7 +385,7 @@
 void CFWL_Form::GetEdgeRect(CFX_RectF& rtEdge) {
   rtEdge = m_rtRelative;
   if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) {
-    FX_FLOAT fCX = GetBorderSize();
+    FX_FLOAT fCX = GetBorderSize(true);
     FX_FLOAT fCY = GetBorderSize(false);
     rtEdge.Deflate(fCX, fCY, fCX, fCY);
   }
@@ -549,7 +549,7 @@
     if (m_bMaximized) {
       SetWidgetRect(m_rtRestore);
       Update();
-      Repaint();
+      Repaint(nullptr);
     } else {
       SetWorkAreaRect();
       Update();
diff --git a/xfa/fwl/core/cfwl_listbox.cpp b/xfa/fwl/core/cfwl_listbox.cpp
index 7589623..48f8c26 100644
--- a/xfa/fwl/core/cfwl_listbox.cpp
+++ b/xfa/fwl/core/cfwl_listbox.cpp
@@ -90,7 +90,7 @@
 
   m_dwTTOStyles |= FDE_TTOSTYLE_SingleLine;
   m_fScorllBarWidth = GetScrollWidth();
-  CalcSize();
+  CalcSize(false);
 }
 
 FWL_WidgetHit CFWL_ListBox::HitTest(FX_FLOAT fx, FX_FLOAT fy) {
@@ -622,7 +622,7 @@
   CFX_SizeF szRange;
   if (bShowVertScr) {
     if (!m_pVertScrollBar)
-      InitScrollBar();
+      InitVerticalScrollBar();
 
     CFX_RectF rtScrollBar;
     rtScrollBar.Set(m_rtClient.right() - m_fScorllBarWidth, m_rtClient.top,
@@ -655,7 +655,7 @@
   }
   if (bShowHorzScr) {
     if (!m_pHorzScrollBar)
-      InitScrollBar(false);
+      InitHorizontalScrollBar();
 
     CFX_RectF rtScrollBar;
     rtScrollBar.Set(m_rtClient.left, m_rtClient.bottom() - m_fScorllBarWidth,
@@ -718,7 +718,7 @@
       continue;
 
     CFX_WideString wsText = GetItemText(this, pItem);
-    CFX_SizeF sz = CalcTextSize(wsText, m_pProperties->m_pThemeProvider);
+    CFX_SizeF sz = CalcTextSize(wsText, m_pProperties->m_pThemeProvider, false);
     fRet = std::max(fRet, sz.x);
   }
   return fRet;
@@ -740,20 +740,30 @@
   return *pfFont + 2 * kItemTextMargin;
 }
 
-void CFWL_ListBox::InitScrollBar(bool bVert) {
-  if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar))
+void CFWL_ListBox::InitVerticalScrollBar() {
+  if (m_pVertScrollBar)
     return;
 
   auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
-  prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz;
+  prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Vert;
   prop->m_dwStates = FWL_WGTSTATE_Invisible;
   prop->m_pParent = this;
   prop->m_pThemeProvider = m_pScrollBarTP;
-  CFWL_ScrollBar* sb = new CFWL_ScrollBar(m_pOwnerApp, std::move(prop), this);
-  if (bVert)
-    m_pVertScrollBar.reset(sb);
-  else
-    m_pHorzScrollBar.reset(sb);
+  m_pVertScrollBar =
+      pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this);
+}
+
+void CFWL_ListBox::InitHorizontalScrollBar() {
+  if (m_pHorzScrollBar)
+    return;
+
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Horz;
+  prop->m_dwStates = FWL_WGTSTATE_Invisible;
+  prop->m_pParent = this;
+  prop->m_pThemeProvider = m_pScrollBarTP;
+  m_pHorzScrollBar =
+      pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this);
 }
 
 bool CFWL_ListBox::IsShowScrollBar(bool bVert) {
@@ -1093,12 +1103,11 @@
   static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState = dwCheckState;
 }
 
-CFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd,
-                                       bool bSelect) {
+CFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd) {
   auto pItem = pdfium::MakeUnique<CFWL_ListItem>();
   pItem->m_dwStates = 0;
   pItem->m_wsText = wsAdd;
-  pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0;
+  pItem->m_dwStates = 0;
   m_ItemArray.push_back(std::move(pItem));
   return m_ItemArray.back().get();
 }
diff --git a/xfa/fwl/core/cfwl_listbox.h b/xfa/fwl/core/cfwl_listbox.h
index e9e59eb..0cfe1f0 100644
--- a/xfa/fwl/core/cfwl_listbox.h
+++ b/xfa/fwl/core/cfwl_listbox.h
@@ -84,7 +84,7 @@
   void SetItemCheckState(CFWL_Widget* pWidget,
                          CFWL_ListItem* pItem,
                          uint32_t dwCheckState);
-  CFWL_ListItem* AddString(const CFX_WideStringC& wsAdd, bool bSelect = false);
+  CFWL_ListItem* AddString(const CFX_WideStringC& wsAdd);
   bool RemoveAt(int32_t iIndex);
   bool DeleteString(CFWL_ListItem* pItem);
   void DeleteAll();
@@ -92,7 +92,7 @@
   int32_t CountSelItems();
   CFWL_ListItem* GetSelItem(int32_t nIndexSel);
   int32_t GetSelIndex(int32_t nIndex);
-  void SetSelItem(CFWL_ListItem* hItem, bool bSelect = true);
+  void SetSelItem(CFWL_ListItem* hItem, bool bSelect);
   CFX_WideString GetDataProviderItemText(CFWL_ListItem* hItem);
 
   FX_FLOAT GetItemHeight() const { return m_fItemHeight; }
@@ -103,7 +103,8 @@
   void SetSelection(CFWL_ListItem* hStart, CFWL_ListItem* hEnd, bool bSelected);
   CFWL_ListItem* GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy);
   bool ScrollToVisible(CFWL_ListItem* hItem);
-  void InitScrollBar(bool bVert = true);
+  void InitVerticalScrollBar();
+  void InitHorizontalScrollBar();
   bool IsShowScrollBar(bool bVert);
   CFWL_ScrollBar* GetVertScrollBar() const { return m_pVertScrollBar.get(); }
   const CFX_RectF& GetRTClient() const { return m_rtClient; }
@@ -121,27 +122,27 @@
   bool GetItemChecked(CFWL_ListItem* hItem);
   void DrawBkground(CFX_Graphics* pGraphics,
                     IFWL_ThemeProvider* pTheme,
-                    const CFX_Matrix* pMatrix = nullptr);
+                    const CFX_Matrix* pMatrix);
   void DrawItems(CFX_Graphics* pGraphics,
                  IFWL_ThemeProvider* pTheme,
-                 const CFX_Matrix* pMatrix = nullptr);
+                 const CFX_Matrix* pMatrix);
   void DrawItem(CFX_Graphics* pGraphics,
                 IFWL_ThemeProvider* pTheme,
                 CFWL_ListItem* hItem,
                 int32_t Index,
                 const CFX_RectF& rtItem,
-                const CFX_Matrix* pMatrix = nullptr);
+                const CFX_Matrix* pMatrix);
   void DrawStatic(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme);
-  CFX_SizeF CalcSize(bool bAutoSize = false);
+  CFX_SizeF CalcSize(bool bAutoSize);
   void GetItemSize(CFX_SizeF& size,
                    CFWL_ListItem* hItem,
                    FX_FLOAT fWidth,
                    FX_FLOAT fHeight,
-                   bool bAutoSize = false);
+                   bool bAutoSize);
   FX_FLOAT GetMaxTextWidth();
   FX_FLOAT GetScrollWidth();
 
-  void OnFocusChanged(CFWL_Message* pMsg, bool bSet = true);
+  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
   void OnLButtonDown(CFWL_MsgMouse* pMsg);
   void OnLButtonUp(CFWL_MsgMouse* pMsg);
   void OnMouseWheel(CFWL_MsgMouseWheel* pMsg);
diff --git a/xfa/fwl/core/cfwl_message.cpp b/xfa/fwl/core/cfwl_message.cpp
index b20cf0e..a8d13fc 100644
--- a/xfa/fwl/core/cfwl_message.cpp
+++ b/xfa/fwl/core/cfwl_message.cpp
@@ -17,7 +17,6 @@
                            CFWL_Widget* pDstTarget)
     : m_pSrcTarget(pSrcTarget),
       m_pDstTarget(pDstTarget),
-      m_dwExtend(0),
       m_type(type) {}
 
 CFWL_Message::~CFWL_Message() {}
diff --git a/xfa/fwl/core/cfwl_message.h b/xfa/fwl/core/cfwl_message.h
index a1545b1..0c98006 100644
--- a/xfa/fwl/core/cfwl_message.h
+++ b/xfa/fwl/core/cfwl_message.h
@@ -30,7 +30,6 @@
 
   CFWL_Widget* m_pSrcTarget;
   CFWL_Widget* m_pDstTarget;
-  uint32_t m_dwExtend;
 
  private:
   Type m_type;
diff --git a/xfa/fwl/core/cfwl_monthcalendar.cpp b/xfa/fwl/core/cfwl_monthcalendar.cpp
index 76426cd..7b5c171 100644
--- a/xfa/fwl/core/cfwl_monthcalendar.cpp
+++ b/xfa/fwl/core/cfwl_monthcalendar.cpp
@@ -166,7 +166,7 @@
     return;
   }
 
-  CFX_SizeF fs = CalcSize(true);
+  CFX_SizeF fs = CalcSize();
   rect.Set(0, 0, fs.x, fs.y);
   CFWL_Widget::GetWidgetRect(rect, true);
 }
@@ -297,7 +297,8 @@
   CFX_WideString wsCation;
   GetHeadText(iYear, iMonth, wsCation);
   textParam.m_wsText = wsCation;
-  m_szHead = CalcTextSize(textParam.m_wsText, m_pProperties->m_pThemeProvider);
+  m_szHead =
+      CalcTextSize(textParam.m_wsText, m_pProperties->m_pThemeProvider, false);
   CalcHeadSize();
   textParam.m_rtPart = m_rtHeadText;
   textParam.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine;
@@ -442,7 +443,8 @@
   GetTodayText(m_iYear, m_iMonth, m_iDay, wsText);
   params.m_wsText = *wsDay + wsText;
 
-  m_szToday = CalcTextSize(params.m_wsText, m_pProperties->m_pThemeProvider);
+  m_szToday =
+      CalcTextSize(params.m_wsText, m_pProperties->m_pThemeProvider, false);
   CalcTodaySize();
   params.m_rtPart = m_rtToday;
   params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine;
@@ -515,13 +517,9 @@
   pTheme->DrawBackground(&params);
 }
 
-CFX_SizeF CFWL_MonthCalendar::CalcSize(bool bAutoSize) {
+CFX_SizeF CFWL_MonthCalendar::CalcSize() {
   if (!m_pProperties->m_pThemeProvider)
     return CFX_SizeF();
-  if (!bAutoSize) {
-    GetClientRect(m_rtClient);
-    return CFX_SizeF(m_rtClient.width, m_rtClient.height);
-  }
 
   CFX_SizeF fs;
   CFWL_ThemePart params;
@@ -532,7 +530,7 @@
 
   for (uint32_t i = 0; i < 7; ++i) {
     CFX_SizeF sz = CalcTextSize(*GetCapacityForDay(pTheme, params, i),
-                                m_pProperties->m_pThemeProvider);
+                                m_pProperties->m_pThemeProvider, false);
     fMaxWeekW = (fMaxWeekW >= sz.x) ? fMaxWeekW : sz.x;
     fMaxWeekH = (fMaxWeekH >= sz.y) ? fMaxWeekH : sz.y;
   }
@@ -542,7 +540,7 @@
   for (int day = 10; day <= 31; day++) {
     CFX_WideString wsDay;
     wsDay.Format(L"%d", day);
-    CFX_SizeF sz = CalcTextSize(wsDay, m_pProperties->m_pThemeProvider);
+    CFX_SizeF sz = CalcTextSize(wsDay, m_pProperties->m_pThemeProvider, false);
     fDayMaxW = (fDayMaxW >= sz.x) ? fDayMaxW : sz.x;
     fDayMaxH = (fDayMaxH >= sz.y) ? fDayMaxH : sz.y;
   }
@@ -557,7 +555,7 @@
 
   for (uint32_t i = 0; i < 12; ++i) {
     CFX_SizeF sz = CalcTextSize(*GetCapacityForMonth(pTheme, params, i),
-                                m_pProperties->m_pThemeProvider);
+                                m_pProperties->m_pThemeProvider, false);
     fMonthMaxW = (fMonthMaxW >= sz.x) ? fMonthMaxW : sz.x;
     fMonthMaxH = (fMonthMaxH >= sz.y) ? fMonthMaxH : sz.y;
   }
@@ -565,7 +563,8 @@
   CFX_WideString wsYear;
   GetHeadText(m_iYear, m_iMonth, wsYear);
 
-  CFX_SizeF szYear = CalcTextSize(wsYear, m_pProperties->m_pThemeProvider);
+  CFX_SizeF szYear =
+      CalcTextSize(wsYear, m_pProperties->m_pThemeProvider, false);
   fMonthMaxH = std::max(fMonthMaxH, szYear.y);
   m_szHead = CFX_SizeF(fMonthMaxW + szYear.x, fMonthMaxH);
   fMonthMaxW = m_szHead.x + MONTHCAL_HEADER_BTN_HMARGIN * 2 + m_szCell.x * 2;
@@ -576,7 +575,7 @@
   CFX_WideString* wsText = static_cast<CFX_WideString*>(
       pTheme->GetCapacity(&params, CFWL_WidgetCapacity::Today));
   m_wsToday = *wsText + wsToday;
-  m_szToday = CalcTextSize(wsToday, m_pProperties->m_pThemeProvider);
+  m_szToday = CalcTextSize(wsToday, m_pProperties->m_pThemeProvider, false);
   m_szToday.y = (m_szToday.y >= m_szCell.y) ? m_szToday.y : m_szCell.y;
   fs.y = m_szCell.x + m_szCell.y * (MONTHCAL_ROWS - 2) + m_szToday.y +
          MONTHCAL_VMARGIN * MONTHCAL_ROWS * 2 + MONTHCAL_HEADER_BTN_VMARGIN * 4;
@@ -811,34 +810,18 @@
   GetHeadText(m_iCurYear, m_iCurMonth, m_wsHead);
 }
 
-void CFWL_MonthCalendar::RemoveSelDay(int32_t iDay, bool bAll) {
-  if (iDay == -1 && !bAll)
-    return;
-  if (bAll) {
-    int32_t iCount = m_arrSelDays.GetSize();
-    int32_t iDatesCount = m_arrDates.GetSize();
-    for (int32_t i = 0; i < iCount; i++) {
-      int32_t iSelDay = m_arrSelDays.GetAt(i);
-      if (iSelDay <= iDatesCount) {
-        DATEINFO* pDateInfo = m_arrDates.GetAt(iSelDay - 1);
-        pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected;
-      }
-    }
-    m_arrSelDays.RemoveAll();
-    return;
-  }
-
-  int32_t index = m_arrSelDays.Find(iDay);
-  if (index == -1)
-    return;
-
-  int32_t iSelDay = m_arrSelDays.GetAt(iDay);
+void CFWL_MonthCalendar::RemoveSelDay() {
+  int32_t iCount = m_arrSelDays.GetSize();
   int32_t iDatesCount = m_arrDates.GetSize();
-  if (iSelDay <= iDatesCount) {
-    DATEINFO* pDateInfo = m_arrDates.GetAt(iSelDay - 1);
-    pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected;
+  for (int32_t i = 0; i < iCount; i++) {
+    int32_t iSelDay = m_arrSelDays.GetAt(i);
+    if (iSelDay <= iDatesCount) {
+      DATEINFO* pDateInfo = m_arrDates.GetAt(iSelDay - 1);
+      pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected;
+    }
   }
-  m_arrSelDays.RemoveAt(index);
+  m_arrSelDays.RemoveAll();
+  return;
 }
 
 void CFWL_MonthCalendar::AddSelDay(int32_t iDay) {
@@ -849,7 +832,7 @@
   if (m_arrSelDays.Find(iDay) != -1)
     return;
 
-  RemoveSelDay(-1, true);
+  RemoveSelDay();
   if (iDay <= m_arrDates.GetSize()) {
     DATEINFO* pDateInfo = m_arrDates.GetAt(iDay - 1);
     pDateInfo->dwStates |= FWL_ITEMSTATE_MCD_Selected;
diff --git a/xfa/fwl/core/cfwl_monthcalendar.h b/xfa/fwl/core/cfwl_monthcalendar.h
index 1a983ab..15912e5 100644
--- a/xfa/fwl/core/cfwl_monthcalendar.h
+++ b/xfa/fwl/core/cfwl_monthcalendar.h
@@ -136,7 +136,7 @@
   void DrawDatesInCircle(CFX_Graphics* pGraphics,
                          IFWL_ThemeProvider* pTheme,
                          const CFX_Matrix* pMatrix);
-  CFX_SizeF CalcSize(bool bAutoSize = false);
+  CFX_SizeF CalcSize();
   void Layout();
   void CalcHeadSize();
   void CalcTodaySize();
@@ -148,7 +148,7 @@
   void NextMonth();
   void PrevMonth();
   void ChangeToMonth(int32_t iYear, int32_t iMonth);
-  void RemoveSelDay(int32_t iDay, bool bAll = false);
+  void RemoveSelDay();
   void AddSelDay(int32_t iDay);
   void JumpToToday();
   void GetHeadText(int32_t iYear, int32_t iMonth, CFX_WideString& wsHead);
diff --git a/xfa/fwl/core/cfwl_notedriver.cpp b/xfa/fwl/core/cfwl_notedriver.cpp
index 00a0b3e..8402b2b 100644
--- a/xfa/fwl/core/cfwl_notedriver.cpp
+++ b/xfa/fwl/core/cfwl_notedriver.cpp
@@ -84,19 +84,17 @@
   return p;
 }
 
-bool CFWL_NoteDriver::SetFocus(CFWL_Widget* pFocus, bool bNotify) {
+bool CFWL_NoteDriver::SetFocus(CFWL_Widget* pFocus) {
   if (m_pFocus == pFocus)
     return true;
 
   CFWL_Widget* pPrev = m_pFocus;
   m_pFocus = pFocus;
   if (pPrev) {
-    CFWL_MsgKillFocus ms(pPrev, pPrev);
-    if (bNotify)
-      ms.m_dwExtend = 1;
-
-    if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate())
+    if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate()) {
+      CFWL_MsgKillFocus ms(pPrev, pPrev);
       pDelegate->OnProcessMessage(&ms);
+    }
   }
   if (pFocus) {
     CFWL_Widget* pWidget =
@@ -105,11 +103,10 @@
     if (pForm)
       pForm->SetSubFocus(pFocus);
 
-    CFWL_MsgSetFocus ms(nullptr, pFocus);
-    if (bNotify)
-      ms.m_dwExtend = 1;
-    if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate())
+    if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate()) {
+      CFWL_MsgSetFocus ms(nullptr, pFocus);
       pDelegate->OnProcessMessage(&ms);
+    }
   }
   return true;
 }
diff --git a/xfa/fwl/core/cfwl_notedriver.h b/xfa/fwl/core/cfwl_notedriver.h
index 9fdb342..47f11da 100644
--- a/xfa/fwl/core/cfwl_notedriver.h
+++ b/xfa/fwl/core/cfwl_notedriver.h
@@ -36,7 +36,7 @@
   CFWL_NoteLoop* PopNoteLoop();
 
   CFWL_Widget* GetFocus() const { return m_pFocus; }
-  bool SetFocus(CFWL_Widget* pFocus, bool bNotify = false);
+  bool SetFocus(CFWL_Widget* pFocus);
   void SetGrab(CFWL_Widget* pGrab, bool bSet) {
     m_pGrab = bSet ? pGrab : nullptr;
   }
diff --git a/xfa/fwl/core/cfwl_scrollbar.cpp b/xfa/fwl/core/cfwl_scrollbar.cpp
index 4909404..46068dc 100644
--- a/xfa/fwl/core/cfwl_scrollbar.cpp
+++ b/xfa/fwl/core/cfwl_scrollbar.cpp
@@ -309,46 +309,6 @@
   return std::min(std::max(fPos, m_fRangeMin), m_fRangeMax);
 }
 
-void CFWL_ScrollBar::GetTrackRect(CFX_RectF& rect, bool bLower) {
-  bool bDisabled = !!(m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled);
-  if (bDisabled) {
-    rect = bLower ? m_rtMinTrack : m_rtMaxTrack;
-    return;
-  }
-
-  FX_FLOAT fW = m_rtThumb.width / 2;
-  FX_FLOAT fH = m_rtThumb.height / 2;
-  bool bVert = IsVertical();
-  if (bLower) {
-    if (bVert) {
-      FX_FLOAT fMinTrackHeight = m_rtMinTrack.height - fH - m_rtMinBtn.height;
-      fMinTrackHeight = (fMinTrackHeight >= 0.0f) ? fMinTrackHeight : 0.0f;
-      rect.Set(m_rtMinTrack.left, m_rtMinTrack.top + m_rtMinBtn.height,
-               m_rtMinTrack.width, fMinTrackHeight);
-      return;
-    }
-
-    FX_FLOAT fMinTrackWidth = m_rtMinTrack.width - fW - m_rtMinBtn.width + 2;
-    fMinTrackWidth = (fMinTrackWidth >= 0.0f) ? fMinTrackWidth : 0.0f;
-    rect.Set(m_rtMinTrack.left + m_rtMinBtn.width - 1, m_rtMinTrack.top,
-             fMinTrackWidth, m_rtMinTrack.height);
-    return;
-  }
-
-  if (bVert) {
-    FX_FLOAT fMaxTrackHeight = m_rtMaxTrack.height - fH - m_rtMaxBtn.height;
-    fMaxTrackHeight = (fMaxTrackHeight >= 0.0f) ? fMaxTrackHeight : 0.0f;
-    rect.Set(m_rtMaxTrack.left, m_rtMaxTrack.top + fH, m_rtMaxTrack.width,
-             fMaxTrackHeight);
-    return;
-  }
-
-  FX_FLOAT fMaxTrackWidth = m_rtMaxTrack.width - fW - m_rtMaxBtn.width + 2;
-  fMaxTrackWidth = (fMaxTrackWidth >= 0.0f) ? fMaxTrackWidth : 0.0f;
-  rect.Set(m_rtMaxTrack.left + fW, m_rtMaxTrack.top, fMaxTrackWidth,
-           m_rtMaxTrack.height);
-}
-
 bool CFWL_ScrollBar::SendEvent() {
   if (m_iMinButtonState == CFWL_PartState_Pressed) {
     DoScroll(CFWL_EvtScroll::Code::StepBackward, m_fTrackPos);
diff --git a/xfa/fwl/core/cfwl_scrollbar.h b/xfa/fwl/core/cfwl_scrollbar.h
index 5e9c0b5..fb44af6 100644
--- a/xfa/fwl/core/cfwl_scrollbar.h
+++ b/xfa/fwl/core/cfwl_scrollbar.h
@@ -69,15 +69,15 @@
   }
   void DrawTrack(CFX_Graphics* pGraphics,
                  IFWL_ThemeProvider* pTheme,
-                 bool bLower = true,
-                 const CFX_Matrix* pMatrix = nullptr);
+                 bool bLower,
+                 const CFX_Matrix* pMatrix);
   void DrawArrowBtn(CFX_Graphics* pGraphics,
                     IFWL_ThemeProvider* pTheme,
-                    bool bMinBtn = true,
-                    const CFX_Matrix* pMatrix = nullptr);
+                    bool bMinBtn,
+                    const CFX_Matrix* pMatrix);
   void DrawThumb(CFX_Graphics* pGraphics,
                  IFWL_ThemeProvider* pTheme,
-                 const CFX_Matrix* pMatrix = nullptr);
+                 const CFX_Matrix* pMatrix);
   void Layout();
   void CalcButtonLen();
   void CalcMinButtonRect(CFX_RectF& rect);
@@ -86,7 +86,7 @@
   void CalcMinTrackRect(CFX_RectF& rect);
   void CalcMaxTrackRect(CFX_RectF& rect);
   FX_FLOAT GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy);
-  void GetTrackRect(CFX_RectF& rect, bool bLower = true);
+
   bool SendEvent();
   bool OnScroll(CFWL_EvtScroll::Code dwCode, FX_FLOAT fPos);
   void OnLButtonDown(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy);
@@ -98,7 +98,7 @@
                     uint32_t dwFlags,
                     FX_FLOAT fDeltaX,
                     FX_FLOAT fDeltaY);
-  bool DoScroll(CFWL_EvtScroll::Code dwCode, FX_FLOAT fPos = 0.0f);
+  bool DoScroll(CFWL_EvtScroll::Code dwCode, FX_FLOAT fPos);
   void DoMouseDown(int32_t iItem,
                    const CFX_RectF& rtItem,
                    int32_t& iState,
diff --git a/xfa/fwl/core/cfwl_spinbutton.cpp b/xfa/fwl/core/cfwl_spinbutton.cpp
index e66b92e..8780fed 100644
--- a/xfa/fwl/core/cfwl_spinbutton.cpp
+++ b/xfa/fwl/core/cfwl_spinbutton.cpp
@@ -114,17 +114,16 @@
   DrawDownButton(pGraphics, pTheme, pMatrix);
 }
 
-void CFWL_SpinButton::EnableButton(bool bEnable, bool bUp) {
-  if (bUp)
-    m_dwUpState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled;
-  else
-    m_dwDnState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled;
+void CFWL_SpinButton::DisableButton() {
+  m_dwDnState = CFWL_PartState_Disabled;
 }
 
-bool CFWL_SpinButton::IsButtonEnabled(bool bUp) {
-  if (bUp)
-    return (m_dwUpState != CFWL_PartState_Disabled);
-  return (m_dwDnState != CFWL_PartState_Disabled);
+bool CFWL_SpinButton::IsUpButtonEnabled() {
+  return m_dwUpState != CFWL_PartState_Disabled;
+}
+
+bool CFWL_SpinButton::IsDownButtonEnabled() {
+  return m_dwDnState != CFWL_PartState_Disabled;
 }
 
 void CFWL_SpinButton::DrawUpButton(CFX_Graphics* pGraphics,
@@ -222,9 +221,9 @@
   SetFocus(true);
 
   bool bUpPress =
-      (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnabled(true));
+      (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsUpButtonEnabled());
   bool bDnPress =
-      (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnabled(false));
+      (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsDownButtonEnabled());
   if (!bUpPress && !bDnPress)
     return;
   if (bUpPress) {
@@ -256,11 +255,11 @@
   }
   bool bRepaint = false;
   CFX_RectF rtInvalidate;
-  if (m_dwUpState == CFWL_PartState_Pressed && IsButtonEnabled(true)) {
+  if (m_dwUpState == CFWL_PartState_Pressed && IsUpButtonEnabled()) {
     m_dwUpState = CFWL_PartState_Normal;
     bRepaint = true;
     rtInvalidate = m_rtUpButton;
-  } else if (m_dwDnState == CFWL_PartState_Pressed && IsButtonEnabled(false)) {
+  } else if (m_dwDnState == CFWL_PartState_Pressed && IsDownButtonEnabled()) {
     m_dwDnState = CFWL_PartState_Normal;
     bRepaint = true;
     rtInvalidate = m_rtDnButton;
@@ -277,13 +276,13 @@
   CFX_RectF rtInvlidate;
   rtInvlidate.Reset();
   if (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy)) {
-    if (IsButtonEnabled(true)) {
+    if (IsUpButtonEnabled()) {
       if (m_dwUpState == CFWL_PartState_Hovered) {
         m_dwUpState = CFWL_PartState_Hovered;
         bRepaint = true;
         rtInvlidate = m_rtUpButton;
       }
-      if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnabled(false)) {
+      if (m_dwDnState != CFWL_PartState_Normal && IsDownButtonEnabled()) {
         m_dwDnState = CFWL_PartState_Normal;
         if (bRepaint)
           rtInvlidate.Union(m_rtDnButton);
@@ -293,17 +292,17 @@
         bRepaint = true;
       }
     }
-    if (!IsButtonEnabled(false))
-      EnableButton(false, false);
+    if (!IsDownButtonEnabled())
+      DisableButton();
 
   } else if (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy)) {
-    if (IsButtonEnabled(false)) {
+    if (IsDownButtonEnabled()) {
       if (m_dwDnState != CFWL_PartState_Hovered) {
         m_dwDnState = CFWL_PartState_Hovered;
         bRepaint = true;
         rtInvlidate = m_rtDnButton;
       }
-      if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnabled(true)) {
+      if (m_dwUpState != CFWL_PartState_Normal && IsUpButtonEnabled()) {
         m_dwUpState = CFWL_PartState_Normal;
         if (bRepaint)
           rtInvlidate.Union(m_rtUpButton);
@@ -336,9 +335,9 @@
 void CFWL_SpinButton::OnMouseLeave(CFWL_MsgMouse* pMsg) {
   if (!pMsg)
     return;
-  if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnabled(true))
+  if (m_dwUpState != CFWL_PartState_Normal && IsUpButtonEnabled())
     m_dwUpState = CFWL_PartState_Normal;
-  if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnabled(false))
+  if (m_dwDnState != CFWL_PartState_Normal && IsDownButtonEnabled())
     m_dwDnState = CFWL_PartState_Normal;
 
   Repaint(&m_rtClient);
@@ -352,8 +351,8 @@
   if (!bUp && !bDown)
     return;
 
-  bool bUpEnable = IsButtonEnabled(true);
-  bool bDownEnable = IsButtonEnabled(false);
+  bool bUpEnable = IsUpButtonEnabled();
+  bool bDownEnable = IsDownButtonEnabled();
   if (!bUpEnable && !bDownEnable)
     return;
 
diff --git a/xfa/fwl/core/cfwl_spinbutton.h b/xfa/fwl/core/cfwl_spinbutton.h
index 2993663..fd2f02e 100644
--- a/xfa/fwl/core/cfwl_spinbutton.h
+++ b/xfa/fwl/core/cfwl_spinbutton.h
@@ -44,8 +44,9 @@
   };
   friend class CFWL_SpinButton::Timer;
 
-  void EnableButton(bool bEnable, bool bUp = true);
-  bool IsButtonEnabled(bool bUp = true);
+  void DisableButton();
+  bool IsUpButtonEnabled();
+  bool IsDownButtonEnabled();
   void DrawUpButton(CFX_Graphics* pGraphics,
                     IFWL_ThemeProvider* pTheme,
                     const CFX_Matrix* pMatrix);
diff --git a/xfa/fwl/core/cfwl_widget.cpp b/xfa/fwl/core/cfwl_widget.cpp
index 8989563..2dff10a 100644
--- a/xfa/fwl/core/cfwl_widget.cpp
+++ b/xfa/fwl/core/cfwl_widget.cpp
@@ -76,7 +76,7 @@
     rect.Inflate(fEdge, fEdge);
   }
   if (HasBorder()) {
-    FX_FLOAT fBorder = GetBorderSize();
+    FX_FLOAT fBorder = GetBorderSize(true);
     rect.Inflate(fBorder, fBorder);
   }
 }
@@ -317,7 +317,7 @@
   rtEdge = m_pProperties->m_rtWidget;
   rtEdge.left = rtEdge.top = 0;
   if (HasBorder()) {
-    FX_FLOAT fCX = GetBorderSize();
+    FX_FLOAT fCX = GetBorderSize(true);
     FX_FLOAT fCY = GetBorderSize(false);
     rtEdge.Deflate(fCX, fCY);
   }
@@ -399,8 +399,7 @@
 
 CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText,
                                     IFWL_ThemeProvider* pTheme,
-                                    bool bMultiLine,
-                                    int32_t iLineWidth) {
+                                    bool bMultiLine) {
   if (!pTheme)
     return CFX_SizeF();
 
@@ -411,10 +410,8 @@
       bMultiLine ? FDE_TTOSTYLE_LineWrap : FDE_TTOSTYLE_SingleLine;
   calPart.m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft;
   CFX_RectF rect;
-  FX_FLOAT fWidth = bMultiLine
-                        ? (iLineWidth > 0 ? (FX_FLOAT)iLineWidth
-                                          : FWL_WGT_CalcMultiLineDefWidth)
-                        : FWL_WGT_CalcWidth;
+  FX_FLOAT fWidth =
+      bMultiLine ? FWL_WGT_CalcMultiLineDefWidth : FWL_WGT_CalcWidth;
   rect.Set(0, 0, fWidth, FWL_WGT_CalcHeight);
   pTheme->CalcTextRect(&calPart, rect);
   return CFX_SizeF(rect.width, rect.height);
diff --git a/xfa/fwl/core/cfwl_widget.h b/xfa/fwl/core/cfwl_widget.h
index a17c623..4961055 100644
--- a/xfa/fwl/core/cfwl_widget.h
+++ b/xfa/fwl/core/cfwl_widget.h
@@ -67,7 +67,7 @@
   void OnProcessMessage(CFWL_Message* pMessage) override;
   void OnProcessEvent(CFWL_Event* pEvent) override;
   void OnDrawWidget(CFX_Graphics* pGraphics,
-                    const CFX_Matrix* pMatrix = nullptr) override;
+                    const CFX_Matrix* pMatrix) override;
 
   void SetWidgetRect(const CFX_RectF& rect);
 
@@ -88,7 +88,7 @@
   }
 
   void TransformTo(CFWL_Widget* pWidget, FX_FLOAT& fx, FX_FLOAT& fy);
-  void GetMatrix(CFX_Matrix& matrix, bool bGlobal = false);
+  void GetMatrix(CFX_Matrix& matrix, bool bGlobal);
   IFWL_ThemeProvider* GetThemeProvider() const;
 
   void SetDelegate(IFWL_WidgetDelegate* delegate) { m_pDelegate = delegate; }
@@ -107,7 +107,7 @@
   void SetLayoutItem(void* pItem) { m_pLayoutItem = pItem; }
 
   void SetFocus(bool bFocus);
-  void Repaint(const CFX_RectF* pRect = nullptr);
+  void Repaint(const CFX_RectF* pRect);
 
  protected:
   CFWL_Widget(const CFWL_App* app,
@@ -120,15 +120,14 @@
   bool HasBorder() const;
   bool HasEdge() const;
   void GetEdgeRect(CFX_RectF& rtEdge);
-  FX_FLOAT GetBorderSize(bool bCX = true);
+  FX_FLOAT GetBorderSize(bool bCX);
   FX_FLOAT GetEdgeWidth();
   void GetRelativeRect(CFX_RectF& rect);
   void* GetThemeCapacity(CFWL_WidgetCapacity dwCapacity);
   IFWL_ThemeProvider* GetAvailableTheme();
   CFX_SizeF CalcTextSize(const CFX_WideString& wsText,
                          IFWL_ThemeProvider* pTheme,
-                         bool bMultiLine = false,
-                         int32_t iLineWidth = -1);
+                         bool bMultiLine);
   void CalcTextRect(const CFX_WideString& wsText,
                     IFWL_ThemeProvider* pTheme,
                     uint32_t dwTTOStyles,
@@ -145,11 +144,11 @@
   void DrawBorder(CFX_Graphics* pGraphics,
                   CFWL_Part iPartBorder,
                   IFWL_ThemeProvider* pTheme,
-                  const CFX_Matrix* pMatrix = nullptr);
+                  const CFX_Matrix* pMatrix);
   void DrawEdge(CFX_Graphics* pGraphics,
                 CFWL_Part iPartEdge,
                 IFWL_ThemeProvider* pTheme,
-                const CFX_Matrix* pMatrix = nullptr);
+                const CFX_Matrix* pMatrix);
 
   const CFWL_App* const m_pOwnerApp;
   CFWL_WidgetMgr* const m_pWidgetMgr;
@@ -183,7 +182,7 @@
   void DrawBackground(CFX_Graphics* pGraphics,
                       CFWL_Part iPartBk,
                       IFWL_ThemeProvider* pTheme,
-                      const CFX_Matrix* pMatrix = nullptr);
+                      const CFX_Matrix* pMatrix);
   void NotifyDriver();
   bool IsParent(CFWL_Widget* pParent);
 
diff --git a/xfa/fwl/core/cfwl_widgetmgr.cpp b/xfa/fwl/core/cfwl_widgetmgr.cpp
index fc9f150..1649ee7 100644
--- a/xfa/fwl/core/cfwl_widgetmgr.cpp
+++ b/xfa/fwl/core/cfwl_widgetmgr.cpp
@@ -104,7 +104,7 @@
   return nullptr;
 }
 
-void CFWL_WidgetMgr::SetWidgetIndex(CFWL_Widget* pWidget, int32_t nIndex) {
+void CFWL_WidgetMgr::AppendWidget(CFWL_Widget* pWidget) {
   Item* pItem = GetWidgetMgrItem(pWidget);
   if (!pItem)
     return;
@@ -115,8 +115,6 @@
   int32_t i = 0;
   while (pChild) {
     if (pChild == pItem) {
-      if (i == nIndex)
-        return;
       if (pChild->pPrevious)
         pChild->pPrevious->pNext = pChild->pNext;
       if (pChild->pNext)
@@ -137,40 +135,16 @@
 
   pChild = pItem->pParent->pChild;
   if (pChild) {
-    if (nIndex < 0) {
-      while (pChild->pNext)
-        pChild = pChild->pNext;
-
-      pChild->pNext = pItem;
-      pItem->pPrevious = pChild;
-      pItem->pNext = nullptr;
-      return;
-    }
-
-    i = 0;
-    while (i < nIndex && pChild->pNext) {
+    while (pChild->pNext)
       pChild = pChild->pNext;
-      ++i;
-    }
-    if (!pChild->pNext) {
-      pChild->pNext = pItem;
-      pItem->pPrevious = pChild;
-      pItem->pNext = nullptr;
-      return;
-    }
-    if (pChild->pPrevious) {
-      pItem->pPrevious = pChild->pPrevious;
-      pChild->pPrevious->pNext = pItem;
-    }
-    pChild->pPrevious = pItem;
-    pItem->pNext = pChild;
-    if (pItem->pParent->pChild == pChild)
-      pItem->pParent->pChild = pItem;
+
+    pChild->pNext = pItem;
+    pItem->pPrevious = pChild;
   } else {
     pItem->pParent->pChild = pItem;
     pItem->pPrevious = nullptr;
-    pItem->pNext = nullptr;
   }
+  pItem->pNext = nullptr;
 }
 
 void CFWL_WidgetMgr::RepaintWidget(CFWL_Widget* pWidget,
@@ -201,9 +175,7 @@
   m_pAdapter->RepaintWidget(pNative, &rect);
 }
 
-void CFWL_WidgetMgr::InsertWidget(CFWL_Widget* pParent,
-                                  CFWL_Widget* pChild,
-                                  int32_t nIndex) {
+void CFWL_WidgetMgr::InsertWidget(CFWL_Widget* pParent, CFWL_Widget* pChild) {
   Item* pParentItem = GetWidgetMgrItem(pParent);
   if (!pParentItem) {
     auto item = pdfium::MakeUnique<Item>(pParent);
@@ -211,7 +183,7 @@
     m_mapWidgetItem[pParent] = std::move(item);
 
     pParentItem->pParent = GetWidgetMgrItem(nullptr);
-    SetWidgetIndex(pParent, -1);
+    AppendWidget(pParent);
   }
 
   Item* pItem = GetWidgetMgrItem(pChild);
@@ -229,7 +201,7 @@
       pItem->pParent->pChild = pItem->pNext;
   }
   pItem->pParent = pParentItem;
-  SetWidgetIndex(pChild, nIndex);
+  AppendWidget(pChild);
 }
 
 void CFWL_WidgetMgr::RemoveWidget(CFWL_Widget* pWidget) {
@@ -260,7 +232,7 @@
     m_mapWidgetItem[pOwner] = std::move(item);
 
     pParentItem->pParent = GetWidgetMgrItem(nullptr);
-    SetWidgetIndex(pOwner, -1);
+    AppendWidget(pOwner);
   }
 
   Item* pItem = GetWidgetMgrItem(pOwned);
@@ -288,7 +260,7 @@
     pItem->pPrevious = nullptr;
   }
   pItem->pParent = pParentItem;
-  SetWidgetIndex(pChild, -1);
+  AppendWidget(pChild);
 }
 
 void CFWL_WidgetMgr::SetWidgetRect_Native(CFWL_Widget* pWidget,
@@ -327,7 +299,7 @@
       x1 = x;
       y1 = y;
       CFX_Matrix matrixOnParent;
-      child->GetMatrix(matrixOnParent);
+      child->GetMatrix(matrixOnParent, false);
       CFX_Matrix m;
       m.SetIdentity();
       m.SetReverse(matrixOnParent);
diff --git a/xfa/fwl/core/cfwl_widgetmgr.h b/xfa/fwl/core/cfwl_widgetmgr.h
index 70d8b7e..5b72d44 100644
--- a/xfa/fwl/core/cfwl_widgetmgr.h
+++ b/xfa/fwl/core/cfwl_widgetmgr.h
@@ -42,11 +42,9 @@
   CFWL_Widget* GetFirstChildWidget(CFWL_Widget* pWidget) const;
   CFWL_Widget* GetSystemFormWidget(CFWL_Widget* pWidget) const;
 
-  void RepaintWidget(CFWL_Widget* pWidget, const CFX_RectF* pRect = nullptr);
+  void RepaintWidget(CFWL_Widget* pWidget, const CFX_RectF* pRect);
 
-  void InsertWidget(CFWL_Widget* pParent,
-                    CFWL_Widget* pChild,
-                    int32_t nIndex = -1);
+  void InsertWidget(CFWL_Widget* pParent, CFWL_Widget* pChild);
   void RemoveWidget(CFWL_Widget* pWidget);
   void SetOwner(CFWL_Widget* pOwner, CFWL_Widget* pOwned);
   void SetParent(CFWL_Widget* pParent, CFWL_Widget* pChild);
@@ -99,7 +97,7 @@
   CFWL_Widget* GetLastChildWidget(CFWL_Widget* pWidget) const;
   Item* GetWidgetMgrItem(CFWL_Widget* pWidget) const;
 
-  void SetWidgetIndex(CFWL_Widget* pWidget, int32_t nIndex);
+  void AppendWidget(CFWL_Widget* pWidget);
 
   int32_t CountRadioButtonGroup(CFWL_Widget* pFirst) const;
   CFWL_Widget* GetRadioButtonGroupHeader(CFWL_Widget* pRadioButton) const;
diff --git a/xfa/fwl/core/ifwl_widgetdelegate.h b/xfa/fwl/core/ifwl_widgetdelegate.h
index 7de1482..0426793 100644
--- a/xfa/fwl/core/ifwl_widgetdelegate.h
+++ b/xfa/fwl/core/ifwl_widgetdelegate.h
@@ -21,7 +21,7 @@
   virtual void OnProcessMessage(CFWL_Message* pMessage) = 0;
   virtual void OnProcessEvent(CFWL_Event* pEvent) = 0;
   virtual void OnDrawWidget(CFX_Graphics* pGraphics,
-                            const CFX_Matrix* pMatrix = nullptr) = 0;
+                            const CFX_Matrix* pMatrix) = 0;
 };
 
 #endif  // XFA_FWL_CORE_IFWL_WIDGETDELEGATE_H_
diff --git a/xfa/fxfa/app/xfa_fftextedit.cpp b/xfa/fxfa/app/xfa_fftextedit.cpp
index 89c323c..a678a20 100644
--- a/xfa/fxfa/app/xfa_fftextedit.cpp
+++ b/xfa/fxfa/app/xfa_fftextedit.cpp
@@ -303,13 +303,13 @@
     eParam.m_wsNewText = pDateTime->GetEditText();
     int32_t iSels = pDateTime->CountSelRanges();
     if (iSels) {
-      eParam.m_iSelEnd = pDateTime->GetSelRange(0, eParam.m_iSelStart);
+      eParam.m_iSelEnd = pDateTime->GetSelRange(0, &eParam.m_iSelStart);
     }
   } else {
     eParam.m_wsNewText = pEdit->GetText();
     int32_t iSels = pEdit->CountSelRanges();
     if (iSels) {
-      eParam.m_iSelEnd = pEdit->GetSelRange(0, eParam.m_iSelStart);
+      eParam.m_iSelEnd = pEdit->GetSelRange(0, &eParam.m_iSelStart);
     }
   }
   m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);