diff --git a/fpdfsdk/cpdfsdk_appstream.cpp b/fpdfsdk/cpdfsdk_appstream.cpp
index 2d01282..2db422a 100644
--- a/fpdfsdk/cpdfsdk_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -748,10 +748,10 @@
   if (IsFloatZero(fFontSize))
     pEdit->SetAutoFontSize(true, true);
   else
-    pEdit->SetFontSize(fFontSize);
+    pEdit->SetFontSizeAndPaint(fFontSize);
 
   pEdit->Initialize();
-  pEdit->SetText(sLabel);
+  pEdit->SetTextAndPaint(sLabel);
 
   CFX_FloatRect rcLabelContent = pEdit->GetContentRect();
   CFX_FloatRect rcLabel;
@@ -895,7 +895,7 @@
   sTemp << GenerateIconAppStream(IconFit, pIconStream, rcIcon);
 
   if (!rcLabel.IsEmpty()) {
-    pEdit->SetPlateRect(rcLabel);
+    pEdit->SetPlateRectAndPaint(rcLabel);
     ByteString sEdit =
         GetEditAppStream(pEdit.get(), CFX_PointF(0.0f, 0.0f), true, 0);
     if (sEdit.GetLength() > 0) {
@@ -1540,25 +1540,25 @@
   rcEdit.right = rcButton.left;
   rcEdit.Normalize();
 
-  pEdit->SetPlateRect(rcEdit);
+  pEdit->SetPlateRectAndPaint(rcEdit);
   pEdit->SetAlignmentV(1, true);
 
   float fFontSize = widget_->GetFontSize();
   if (IsFloatZero(fFontSize))
     pEdit->SetAutoFontSize(true, true);
   else
-    pEdit->SetFontSize(fFontSize);
+    pEdit->SetFontSizeAndPaint(fFontSize);
 
   pEdit->Initialize();
 
   if (sValue.has_value()) {
-    pEdit->SetText(sValue.value());
+    pEdit->SetTextAndPaint(sValue.value());
   } else {
     int32_t nCurSel = pField->GetSelectedIndex(0);
     if (nCurSel < 0)
-      pEdit->SetText(pField->GetValue());
+      pEdit->SetTextAndPaint(pField->GetValue());
     else
-      pEdit->SetText(pField->GetOptionLabel(nCurSel));
+      pEdit->SetTextAndPaint(pField->GetOptionLabel(nCurSel));
   }
 
   CFX_FloatRect rcContent = pEdit->GetContentRect();
@@ -1601,10 +1601,11 @@
   auto pEdit = std::make_unique<CPWL_EditImpl>();
   pEdit->EnableRefresh(false);
   pEdit->SetFontMap(&font_map);
-  pEdit->SetPlateRect(CFX_FloatRect(rcClient.left, 0.0f, rcClient.right, 0.0f));
+  pEdit->SetPlateRectAndPaint(
+      CFX_FloatRect(rcClient.left, 0.0f, rcClient.right, 0.0f));
 
   float fFontSize = widget_->GetFontSize();
-  pEdit->SetFontSize(IsFloatZero(fFontSize) ? 12.0f : fFontSize);
+  pEdit->SetFontSizeAndPaint(IsFloatZero(fFontSize) ? 12.0f : fFontSize);
   pEdit->Initialize();
 
   std::ostringstream sList;
@@ -1623,7 +1624,7 @@
       }
     }
 
-    pEdit->SetText(pField->GetOptionLabel(i));
+    pEdit->SetTextAndPaint(pField->GetOptionLabel(i));
 
     CFX_FloatRect rcContent = pEdit->GetContentRect();
     float fItemHeight = rcContent.Height();
@@ -1687,7 +1688,7 @@
   pEdit->SetFontMap(&font_map);
 
   CFX_FloatRect rcClient = widget_->GetClientRect();
-  pEdit->SetPlateRect(rcClient);
+  pEdit->SetPlateRectAndPaint(rcClient);
   pEdit->SetAlignmentH(pControl->GetControlAlignment(), true);
 
   uint32_t dwFieldFlags = pField->GetFieldFlags();
@@ -1716,7 +1717,7 @@
 
   if (nMaxLen > 0) {
     if (bCharArray) {
-      pEdit->SetCharArray(nMaxLen);
+      pEdit->SetCharArrayAndPaint(nMaxLen);
       if (IsFloatZero(fFontSize)) {
         fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(
             font_map.GetPDFFont(0).Get(), rcClient, nMaxLen);
@@ -1724,17 +1725,17 @@
     } else {
       if (sValue.has_value())
         nMaxLen = sValue.value().GetLength();
-      pEdit->SetLimitChar(nMaxLen);
+      pEdit->SetLimitCharAndPaint(nMaxLen);
     }
   }
 
   if (IsFloatZero(fFontSize))
     pEdit->SetAutoFontSize(true, true);
   else
-    pEdit->SetFontSize(fFontSize);
+    pEdit->SetFontSizeAndPaint(fFontSize);
 
   pEdit->Initialize();
-  pEdit->SetText(sValue.value_or(pField->GetValue()));
+  pEdit->SetTextAndPaint(sValue.value_or(pField->GetValue()));
 
   CFX_FloatRect rcContent = pEdit->GetContentRect();
   ByteString sEdit =
diff --git a/fpdfsdk/pwl/cpwl_edit.cpp b/fpdfsdk/pwl/cpwl_edit.cpp
index 513ee55..03e853e 100644
--- a/fpdfsdk/pwl/cpwl_edit.cpp
+++ b/fpdfsdk/pwl/cpwl_edit.cpp
@@ -41,7 +41,7 @@
 }
 
 void CPWL_Edit::SetText(const WideString& csText) {
-  m_pEditImpl->SetText(csText);
+  m_pEditImpl->SetTextAndPaint(csText);
 }
 
 bool CPWL_Edit::RePosChildWnd() {
@@ -67,7 +67,7 @@
     m_pCaret->SetClipRect(rect);
   }
 
-  m_pEditImpl->SetPlateRect(GetClientRect());
+  m_pEditImpl->SetPlateRectAndPaint(GetClientRect());
   return true;
 }
 
@@ -258,7 +258,7 @@
 }
 
 void CPWL_Edit::SetCharSpace(float fCharSpace) {
-  m_pEditImpl->SetCharSpace(fCharSpace);
+  m_pEditImpl->SetCharSpaceAndPaint(fCharSpace);
 }
 
 CPVT_WordRange CPWL_Edit::GetSelectWordRange() const {
@@ -297,7 +297,7 @@
   if (!HasFlag(PES_CHARARRAY) || nCharArray <= 0)
     return;
 
-  m_pEditImpl->SetCharArray(nCharArray);
+  m_pEditImpl->SetCharArrayAndPaint(nCharArray);
   m_pEditImpl->SetTextOverflow(true, true);
 
   if (!HasFlag(PWS_AUTOFONTSIZE))
@@ -313,11 +313,11 @@
     return;
 
   m_pEditImpl->SetAutoFontSize(false, true);
-  m_pEditImpl->SetFontSize(fFontSize);
+  m_pEditImpl->SetFontSizeAndPaint(fFontSize);
 }
 
 void CPWL_Edit::SetLimitChar(int32_t nLimitChar) {
-  m_pEditImpl->SetLimitChar(nLimitChar);
+  m_pEditImpl->SetLimitCharAndPaint(nLimitChar);
 }
 
 CFX_FloatRect CPWL_Edit::GetFocusRect() const {
@@ -539,7 +539,7 @@
 }
 
 void CPWL_Edit::SetFontSize(float fFontSize) {
-  m_pEditImpl->SetFontSize(fFontSize);
+  m_pEditImpl->SetFontSizeAndPaint(fFontSize);
 }
 
 float CPWL_Edit::GetFontSize() const {
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.cpp b/fpdfsdk/pwl/cpwl_edit_impl.cpp
index 5be9483..af2de46 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_impl.cpp
@@ -721,7 +721,7 @@
   return m_pVTProvider ? m_pVTProvider->GetFontMap() : nullptr;
 }
 
-void CPWL_EditImpl::SetPlateRect(const CFX_FloatRect& rect) {
+void CPWL_EditImpl::SetPlateRectAndPaint(const CFX_FloatRect& rect) {
   m_pVT->SetPlateRect(rect);
   m_ptScrollPos = CFX_PointF(rect.left, rect.top);
   Paint();
@@ -745,17 +745,17 @@
     Paint();
 }
 
-void CPWL_EditImpl::SetLimitChar(int32_t nLimitChar) {
+void CPWL_EditImpl::SetLimitCharAndPaint(int32_t nLimitChar) {
   m_pVT->SetLimitChar(nLimitChar);
   Paint();
 }
 
-void CPWL_EditImpl::SetCharArray(int32_t nCharArray) {
+void CPWL_EditImpl::SetCharArrayAndPaint(int32_t nCharArray) {
   m_pVT->SetCharArray(nCharArray);
   Paint();
 }
 
-void CPWL_EditImpl::SetCharSpace(float fCharSpace) {
+void CPWL_EditImpl::SetCharSpaceAndPaint(float fCharSpace) {
   m_pVT->SetCharSpace(fCharSpace);
   Paint();
 }
@@ -778,7 +778,7 @@
     Paint();
 }
 
-void CPWL_EditImpl::SetFontSize(float fFontSize) {
+void CPWL_EditImpl::SetFontSizeAndPaint(float fFontSize) {
   m_pVT->SetFontSize(fFontSize);
   Paint();
 }
@@ -918,7 +918,7 @@
   return m_SelState.ConvertToWordRange();
 }
 
-void CPWL_EditImpl::SetText(const WideString& sText) {
+void CPWL_EditImpl::SetTextAndPaint(const WideString& sText) {
   Clear();
   DoInsertText(CPVT_WordPlace(0, 0, -1), sText, FX_CHARSET_Default);
   Paint();
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.h b/fpdfsdk/pwl/cpwl_edit_impl.h
index f1e3bb0..040abfb 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.h
+++ b/fpdfsdk/pwl/cpwl_edit_impl.h
@@ -63,7 +63,7 @@
   void Initialize();
 
   // Set the bounding box of the text area.
-  void SetPlateRect(const CFX_FloatRect& rect);
+  void SetPlateRectAndPaint(const CFX_FloatRect& rect);
   void SetScrollPos(const CFX_PointF& point);
 
   // Set the horizontal text alignment. (nFormat [0:left, 1:middle, 2:right])
@@ -75,14 +75,14 @@
   void SetPasswordChar(uint16_t wSubWord, bool bPaint);
 
   // Set the maximum number of words in the text.
-  void SetLimitChar(int32_t nLimitChar);
-  void SetCharArray(int32_t nCharArray);
-  void SetCharSpace(float fCharSpace);
+  void SetLimitCharAndPaint(int32_t nLimitChar);
+  void SetCharArrayAndPaint(int32_t nCharArray);
+  void SetCharSpaceAndPaint(float fCharSpace);
   void SetMultiLine(bool bMultiLine, bool bPaint);
   void SetAutoReturn(bool bAuto, bool bPaint);
   void SetAutoFontSize(bool bAuto, bool bPaint);
   void SetAutoScroll(bool bAuto);
-  void SetFontSize(float fFontSize);
+  void SetFontSizeAndPaint(float fFontSize);
   void SetTextOverflow(bool bAllowed, bool bPaint);
   void OnMouseDown(const CFX_PointF& point, bool bShift, bool bCtrl);
   void OnMouseMove(const CFX_PointF& point, bool bShift, bool bCtrl);
@@ -92,7 +92,7 @@
   void OnVK_RIGHT(bool bShift, bool bCtrl);
   void OnVK_HOME(bool bShift, bool bCtrl);
   void OnVK_END(bool bShift, bool bCtrl);
-  void SetText(const WideString& sText);
+  void SetTextAndPaint(const WideString& sText);
   bool InsertWord(uint16_t word, int32_t charset);
   bool InsertReturn();
   bool Backspace();
diff --git a/fpdfsdk/pwl/cpwl_list_ctrl.cpp b/fpdfsdk/pwl/cpwl_list_ctrl.cpp
index 8959fdc..5f06d46 100644
--- a/fpdfsdk/pwl/cpwl_list_ctrl.cpp
+++ b/fpdfsdk/pwl/cpwl_list_ctrl.cpp
@@ -29,11 +29,11 @@
 }
 
 void CPWL_ListCtrl::Item::SetText(const WideString& text) {
-  m_pEdit->SetText(text);
+  m_pEdit->SetTextAndPaint(text);
 }
 
 void CPWL_ListCtrl::Item::SetFontSize(float fFontSize) {
-  m_pEdit->SetFontSize(fFontSize);
+  m_pEdit->SetFontSizeAndPaint(fFontSize);
 }
 
 float CPWL_ListCtrl::Item::GetItemHeight() const {
