Split FWL OnFocusChanged() methods into Gained()/Lost() pairs
Removing the bool argument vastly simplifies the logic. Also remove
message parameter when it is unused.
Change-Id: I9274533c001fd0bcdc90f5765b6126ef7093c8c9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81332
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/cfwl_checkbox.cpp b/xfa/fwl/cfwl_checkbox.cpp
index 3d7c95d..b38159e 100644
--- a/xfa/fwl/cfwl_checkbox.cpp
+++ b/xfa/fwl/cfwl_checkbox.cpp
@@ -184,10 +184,10 @@
void CFWL_CheckBox::OnProcessMessage(CFWL_Message* pMessage) {
switch (pMessage->GetType()) {
case CFWL_Message::Type::kSetFocus:
- OnFocusChanged(true);
+ OnFocusGained();
break;
case CFWL_Message::Type::kKillFocus:
- OnFocusChanged(false);
+ OnFocusLost();
break;
case CFWL_Message::Type::kMouse: {
CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -228,12 +228,13 @@
DrawWidget(pGraphics, matrix);
}
-void CFWL_CheckBox::OnFocusChanged(bool bSet) {
- if (bSet)
- m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
- else
- m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
+void CFWL_CheckBox::OnFocusGained() {
+ m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+ RepaintRect(m_ClientRect);
+}
+void CFWL_CheckBox::OnFocusLost() {
+ m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
RepaintRect(m_ClientRect);
}
diff --git a/xfa/fwl/cfwl_checkbox.h b/xfa/fwl/cfwl_checkbox.h
index 0f69ec2..dbee03d 100644
--- a/xfa/fwl/cfwl_checkbox.h
+++ b/xfa/fwl/cfwl_checkbox.h
@@ -54,7 +54,8 @@
uint32_t GetPartStates() const;
void UpdateTextOutStyles();
void NextStates();
- void OnFocusChanged(bool bSet);
+ void OnFocusGained();
+ void OnFocusLost();
void OnLButtonDown();
void OnLButtonUp(CFWL_MessageMouse* pMsg);
void OnMouseMove(CFWL_MessageMouse* pMsg);
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index dc62065..b8bd6b3 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -379,12 +379,12 @@
switch (pMessage->GetType()) {
case CFWL_Message::Type::kSetFocus: {
backDefault = false;
- OnFocusChanged(pMessage, true);
+ OnFocusGained();
break;
}
case CFWL_Message::Type::kKillFocus: {
backDefault = false;
- OnFocusChanged(pMessage, false);
+ OnFocusLost();
break;
}
case CFWL_Message::Type::kMouse: {
@@ -471,21 +471,21 @@
ShowDropList(true);
}
-void CFWL_ComboBox::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
- if (bSet) {
- m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
- if ((m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) {
- CFWL_MessageSetFocus msg(nullptr, m_pEdit);
- m_pEdit->GetDelegate()->OnProcessMessage(&msg);
- }
- } else {
- m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
- ShowDropList(false);
- CFWL_MessageKillFocus msg(m_pEdit);
+void CFWL_ComboBox::OnFocusGained() {
+ m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+ if ((m_pEdit->GetStates() & FWL_WGTSTATE_Focused) == 0) {
+ CFWL_MessageSetFocus msg(nullptr, m_pEdit);
m_pEdit->GetDelegate()->OnProcessMessage(&msg);
}
}
+void CFWL_ComboBox::OnFocusLost() {
+ m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
+ ShowDropList(false);
+ CFWL_MessageKillFocus msg(m_pEdit);
+ m_pEdit->GetDelegate()->OnProcessMessage(&msg);
+}
+
void CFWL_ComboBox::OnKey(CFWL_MessageKey* pMsg) {
uint32_t dwKeyCode = pMsg->m_dwKeyCode;
const bool bUp = dwKeyCode == XFA_FWL_VKEY_Up;
diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h
index f19cb12..5830b20 100644
--- a/xfa/fwl/cfwl_combobox.h
+++ b/xfa/fwl/cfwl_combobox.h
@@ -108,7 +108,8 @@
void OnLButtonUp(CFWL_MessageMouse* pMsg);
bool IsDropListVisible() const { return m_pListBox->IsVisible(); }
void OnLButtonDown(CFWL_MessageMouse* pMsg);
- void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+ void OnFocusGained();
+ void OnFocusLost();
void OnKey(CFWL_MessageKey* pMsg);
CFX_RectF m_ClientRect;
diff --git a/xfa/fwl/cfwl_datetimepicker.cpp b/xfa/fwl/cfwl_datetimepicker.cpp
index 6f16255..0798637 100644
--- a/xfa/fwl/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/cfwl_datetimepicker.cpp
@@ -297,10 +297,10 @@
void CFWL_DateTimePicker::OnProcessMessage(CFWL_Message* pMessage) {
switch (pMessage->GetType()) {
case CFWL_Message::Type::kSetFocus:
- OnFocusChanged(pMessage, true);
+ OnFocusGained(pMessage);
break;
case CFWL_Message::Type::kKillFocus:
- OnFocusChanged(pMessage, false);
+ OnFocusLost(pMessage);
break;
case CFWL_Message::Type::kMouse: {
CFWL_MessageMouse* pMouse = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -342,29 +342,28 @@
DrawWidget(pGraphics, matrix);
}
-void CFWL_DateTimePicker::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
- if (!pMsg)
- return;
-
+void CFWL_DateTimePicker::OnFocusGained(CFWL_Message* pMsg) {
+ m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+ if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) {
+ m_BtnRect =
+ CFX_RectF(m_WidgetRect.width, 0, m_fBtn, m_WidgetRect.height - 1);
+ }
CFX_RectF rtInvalidate(m_BtnRect);
- if (bSet) {
- m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
- if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) {
- m_BtnRect =
- CFX_RectF(m_WidgetRect.width, 0, m_fBtn, m_WidgetRect.height - 1);
- }
- rtInvalidate = m_BtnRect;
- pMsg->SetDstTarget(m_pEdit);
+ pMsg->SetDstTarget(m_pEdit);
+ m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
+ rtInvalidate.Inflate(2, 2);
+ RepaintRect(rtInvalidate);
+}
+
+void CFWL_DateTimePicker::OnFocusLost(CFWL_Message* pMsg) {
+ CFX_RectF rtInvalidate(m_BtnRect);
+ m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
+ m_BtnRect = CFX_RectF();
+ if (IsMonthCalendarVisible())
+ ShowMonthCalendar(false);
+ if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) {
+ pMsg->SetSrcTarget(m_pEdit);
m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
- } else {
- m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
- m_BtnRect = CFX_RectF();
- if (IsMonthCalendarVisible())
- ShowMonthCalendar(false);
- if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) {
- pMsg->SetSrcTarget(m_pEdit);
- m_pEdit->GetDelegate()->OnProcessMessage(pMsg);
- }
}
rtInvalidate.Inflate(2, 2);
RepaintRect(rtInvalidate);
diff --git a/xfa/fwl/cfwl_datetimepicker.h b/xfa/fwl/cfwl_datetimepicker.h
index bc55bf1..d0e80cf 100644
--- a/xfa/fwl/cfwl_datetimepicker.h
+++ b/xfa/fwl/cfwl_datetimepicker.h
@@ -87,7 +87,8 @@
float fMaxHeight,
const CFX_RectF& rtAnchor,
CFX_RectF* pPopupRect);
- void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+ void OnFocusGained(CFWL_Message* pMsg);
+ void OnFocusLost(CFWL_Message* pMsg);
void OnLButtonDown(CFWL_MessageMouse* pMsg);
void OnLButtonUp(CFWL_MessageMouse* pMsg);
void OnMouseMove(CFWL_MessageMouse* pMsg);
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index 8884694..f2d9d36 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -902,10 +902,10 @@
void CFWL_Edit::OnProcessMessage(CFWL_Message* pMessage) {
switch (pMessage->GetType()) {
case CFWL_Message::Type::kSetFocus:
- OnFocusChanged(pMessage, true);
+ OnFocusGained();
break;
case CFWL_Message::Type::kKillFocus:
- OnFocusChanged(pMessage, false);
+ OnFocusLost();
break;
case CFWL_Message::Type::kMouse: {
CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -969,25 +969,25 @@
m_pEditEngine->GetIndexForPoint(DeviceToEngine(pMsg->m_pos)));
}
-void CFWL_Edit::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
- bool bRepaint = false;
- if (bSet) {
- m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+void CFWL_Edit::OnFocusGained() {
+ m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+ UpdateVAlignment();
+ UpdateOffset();
+ UpdateCaret();
+ LayoutScrollBar();
+}
- UpdateVAlignment();
- UpdateOffset();
- UpdateCaret();
- } else if (m_Properties.m_dwStates & FWL_WGTSTATE_Focused) {
+void CFWL_Edit::OnFocusLost() {
+ bool bRepaint = false;
+ if (m_Properties.m_dwStates & FWL_WGTSTATE_Focused) {
m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
HideCaret(nullptr);
-
if (HasSelection()) {
ClearSelection();
bRepaint = true;
}
UpdateOffset();
}
-
LayoutScrollBar();
if (!bRepaint)
return;
diff --git a/xfa/fwl/cfwl_edit.h b/xfa/fwl/cfwl_edit.h
index 07e3ed1..b1eb279 100644
--- a/xfa/fwl/cfwl_edit.h
+++ b/xfa/fwl/cfwl_edit.h
@@ -131,7 +131,8 @@
void UpdateCursorRect();
void DoRButtonDown(CFWL_MessageMouse* pMsg);
- void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+ void OnFocusGained();
+ void OnFocusLost();
void OnLButtonDown(CFWL_MessageMouse* pMsg);
void OnLButtonUp(CFWL_MessageMouse* pMsg);
void OnButtonDoubleClick(CFWL_MessageMouse* pMsg);
diff --git a/xfa/fwl/cfwl_listbox.cpp b/xfa/fwl/cfwl_listbox.cpp
index 49197e8..f65d369 100644
--- a/xfa/fwl/cfwl_listbox.cpp
+++ b/xfa/fwl/cfwl_listbox.cpp
@@ -609,10 +609,10 @@
switch (pMessage->GetType()) {
case CFWL_Message::Type::kSetFocus:
- OnFocusChanged(pMessage, true);
+ OnFocusGained();
break;
case CFWL_Message::Type::kKillFocus:
- OnFocusChanged(pMessage, false);
+ OnFocusLost();
break;
case CFWL_Message::Type::kMouse: {
CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -665,26 +665,25 @@
DrawWidget(pGraphics, matrix);
}
-void CFWL_ListBox::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
+void CFWL_ListBox::OnFocusGained() {
if (GetStylesEx() & FWL_STYLEEXT_LTB_ShowScrollBarFocus) {
- if (m_pVertScrollBar) {
- if (bSet)
- m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
- else
- m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible);
- }
- if (m_pHorzScrollBar) {
- if (bSet)
- m_pHorzScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
- else
- m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible);
- }
+ if (m_pVertScrollBar)
+ m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
+ if (m_pHorzScrollBar)
+ m_pHorzScrollBar->RemoveStates(FWL_WGTSTATE_Invisible);
}
- if (bSet)
- m_Properties.m_dwStates |= (FWL_WGTSTATE_Focused);
- else
- m_Properties.m_dwStates &= ~(FWL_WGTSTATE_Focused);
+ m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+ RepaintRect(m_ClientRect);
+}
+void CFWL_ListBox::OnFocusLost() {
+ if (GetStylesEx() & FWL_STYLEEXT_LTB_ShowScrollBarFocus) {
+ if (m_pVertScrollBar)
+ m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible);
+ if (m_pHorzScrollBar)
+ m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible);
+ }
+ m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
RepaintRect(m_ClientRect);
}
diff --git a/xfa/fwl/cfwl_listbox.h b/xfa/fwl/cfwl_listbox.h
index ee8df3f..16bcf87 100644
--- a/xfa/fwl/cfwl_listbox.h
+++ b/xfa/fwl/cfwl_listbox.h
@@ -115,7 +115,8 @@
float GetMaxTextWidth();
float GetScrollWidth();
- void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+ void OnFocusGained();
+ void OnFocusLost();
void OnLButtonDown(CFWL_MessageMouse* pMsg);
void OnLButtonUp(CFWL_MessageMouse* pMsg);
void OnMouseWheel(CFWL_MessageMouseWheel* pMsg);
diff --git a/xfa/fwl/cfwl_pushbutton.cpp b/xfa/fwl/cfwl_pushbutton.cpp
index 1ef9d9d..3a6c651 100644
--- a/xfa/fwl/cfwl_pushbutton.cpp
+++ b/xfa/fwl/cfwl_pushbutton.cpp
@@ -84,10 +84,10 @@
switch (pMessage->GetType()) {
case CFWL_Message::Type::kSetFocus:
- OnFocusChanged(pMessage, true);
+ OnFocusGained();
break;
case CFWL_Message::Type::kKillFocus:
- OnFocusChanged(pMessage, false);
+ OnFocusLost();
break;
case CFWL_Message::Type::kMouse: {
CFWL_MessageMouse* pMsg = static_cast<CFWL_MessageMouse*>(pMessage);
@@ -128,12 +128,13 @@
DrawWidget(pGraphics, matrix);
}
-void CFWL_PushButton::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
- if (bSet)
- m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
- else
- m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
+void CFWL_PushButton::OnFocusGained() {
+ m_Properties.m_dwStates |= FWL_WGTSTATE_Focused;
+ RepaintRect(m_ClientRect);
+}
+void CFWL_PushButton::OnFocusLost() {
+ m_Properties.m_dwStates &= ~FWL_WGTSTATE_Focused;
RepaintRect(m_ClientRect);
}
diff --git a/xfa/fwl/cfwl_pushbutton.h b/xfa/fwl/cfwl_pushbutton.h
index 429e0d9..f807ca0 100644
--- a/xfa/fwl/cfwl_pushbutton.h
+++ b/xfa/fwl/cfwl_pushbutton.h
@@ -36,7 +36,8 @@
void DrawBkground(CFGAS_GEGraphics* pGraphics, const CFX_Matrix& mtMatrix);
uint32_t GetPartStates();
void UpdateTextOutStyles();
- void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
+ void OnFocusGained();
+ void OnFocusLost();
void OnLButtonDown(CFWL_MessageMouse* pMsg);
void OnLButtonUp(CFWL_MessageMouse* pMsg);
void OnMouseMove(CFWL_MessageMouse* pMsg);