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();
}