Optimize CPWL_EditImpl::Paint() calls

- Batch Paint() following groups of changes.
- Paint() prior to Initialize() is a no-op, remove.

Change-Id: I392f9e7f36124fa84c29d037c132cc492efd8fb6
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/82252
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_appstream.cpp b/fpdfsdk/cpdfsdk_appstream.cpp
index bdc6318..6a77c61 100644
--- a/fpdfsdk/cpdfsdk_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -742,20 +742,14 @@
   auto pEdit = std::make_unique<CPWL_EditImpl>();
   pEdit->SetFontMap(pFontMap);
   pEdit->SetAlignmentH(1);
-  pEdit->Paint();
   pEdit->SetAlignmentV(1);
-  pEdit->Paint();
   pEdit->SetMultiLine(false);
-  pEdit->Paint();
   pEdit->SetAutoReturn(false);
-  pEdit->Paint();
-  if (IsFloatZero(fFontSize)) {
+  if (IsFloatZero(fFontSize))
     pEdit->SetAutoFontSize(true);
-    pEdit->Paint();
-  } else {
+  else
     pEdit->SetFontSize(fFontSize);
-    pEdit->Paint();
-  }
+
   pEdit->Initialize();
   pEdit->SetText(sLabel);
   pEdit->Paint();
@@ -1549,33 +1543,26 @@
   rcEdit.Normalize();
 
   pEdit->SetPlateRect(rcEdit);
-  pEdit->Paint();
   pEdit->SetAlignmentV(1);
-  pEdit->Paint();
 
   float fFontSize = widget_->GetFontSize();
-  if (IsFloatZero(fFontSize)) {
+  if (IsFloatZero(fFontSize))
     pEdit->SetAutoFontSize(true);
-    pEdit->Paint();
-  } else {
+  else
     pEdit->SetFontSize(fFontSize);
-    pEdit->Paint();
-  }
-  pEdit->Initialize();
 
+  pEdit->Initialize();
   if (sValue.has_value()) {
     pEdit->SetText(sValue.value());
-    pEdit->Paint();
   } else {
     int32_t nCurSel = pField->GetSelectedIndex(0);
     if (nCurSel < 0) {
       pEdit->SetText(pField->GetValue());
-      pEdit->Paint();
     } else {
       pEdit->SetText(pField->GetOptionLabel(nCurSel));
-      pEdit->Paint();
     }
   }
+  pEdit->Paint();
 
   CFX_FloatRect rcContent = pEdit->GetContentRect();
   ByteString sEdit = GetEditAppStream(pEdit.get(), CFX_PointF(), true, 0);
@@ -1618,11 +1605,9 @@
   pEdit->EnableRefresh(false);
   pEdit->SetFontMap(&font_map);
   pEdit->SetPlateRect(CFX_FloatRect(rcClient.left, 0.0f, rcClient.right, 0.0f));
-  pEdit->Paint();
 
   float fFontSize = widget_->GetFontSize();
   pEdit->SetFontSize(IsFloatZero(fFontSize) ? 12.0f : fFontSize);
-  pEdit->Paint();
   pEdit->Initialize();
 
   std::ostringstream sList;
@@ -1707,27 +1692,21 @@
 
   CFX_FloatRect rcClient = widget_->GetClientRect();
   pEdit->SetPlateRect(rcClient);
-  pEdit->Paint();
   pEdit->SetAlignmentH(pControl->GetControlAlignment());
-  pEdit->Paint();
 
   uint32_t dwFieldFlags = pField->GetFieldFlags();
   bool bMultiLine = dwFieldFlags & pdfium::form_flags::kTextMultiline;
   if (bMultiLine) {
     pEdit->SetMultiLine(true);
-    pEdit->Paint();
     pEdit->SetAutoReturn(true);
-    pEdit->Paint();
   } else {
     pEdit->SetAlignmentV(1);
-    pEdit->Paint();
   }
 
   uint16_t subWord = 0;
   if (dwFieldFlags & pdfium::form_flags::kTextPassword) {
     subWord = '*';
     pEdit->SetPasswordChar(subWord);
-    pEdit->Paint();
   }
 
   int nMaxLen = pField->GetMaxLen();
@@ -1742,7 +1721,6 @@
   if (nMaxLen > 0) {
     if (bCharArray) {
       pEdit->SetCharArray(nMaxLen);
-      pEdit->Paint();
       if (IsFloatZero(fFontSize)) {
         fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(
             font_map.GetPDFFont(0).Get(), rcClient, nMaxLen);
@@ -1751,17 +1729,14 @@
       if (sValue.has_value())
         nMaxLen = sValue.value().GetLength();
       pEdit->SetLimitChar(nMaxLen);
-      pEdit->Paint();
     }
   }
 
-  if (IsFloatZero(fFontSize)) {
+  if (IsFloatZero(fFontSize))
     pEdit->SetAutoFontSize(true);
-    pEdit->Paint();
-  } else {
+  else
     pEdit->SetFontSize(fFontSize);
-    pEdit->Paint();
-  }
+
   pEdit->Initialize();
   pEdit->SetText(sValue.value_or(pField->GetValue()));
   pEdit->Paint();
diff --git a/fpdfsdk/pwl/cpwl_edit.cpp b/fpdfsdk/pwl/cpwl_edit.cpp
index db2ec9c..9fe729d 100644
--- a/fpdfsdk/pwl/cpwl_edit.cpp
+++ b/fpdfsdk/pwl/cpwl_edit.cpp
@@ -302,7 +302,6 @@
     return;
 
   m_pEditImpl->SetCharArray(nCharArray);
-  m_pEditImpl->Paint();
   m_pEditImpl->SetTextOverflow(true);
   m_pEditImpl->Paint();
 
@@ -319,7 +318,6 @@
     return;
 
   m_pEditImpl->SetAutoFontSize(false);
-  m_pEditImpl->Paint();
   m_pEditImpl->SetFontSize(fFontSize);
   m_pEditImpl->Paint();
 }
diff --git a/fpdfsdk/pwl/cpwl_list_ctrl.cpp b/fpdfsdk/pwl/cpwl_list_ctrl.cpp
index 74a4603..80d6bd1 100644
--- a/fpdfsdk/pwl/cpwl_list_ctrl.cpp
+++ b/fpdfsdk/pwl/cpwl_list_ctrl.cpp
@@ -19,7 +19,6 @@
 
 CPWL_ListCtrl::Item::Item() : m_pEdit(std::make_unique<CPWL_EditImpl>()) {
   m_pEdit->SetAlignmentV(1);
-  m_pEdit->Paint();
   m_pEdit->Initialize();
 }