Encapsulate CXFA_ContentLayoutItem::m_dwStatus.
Access its bits via Test, Set and Clear methods.
Change-Id: I9738e81324cbc4522b0be5efc636b2daaa55e115
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52990
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/cxfa_ffdatetimeedit.cpp b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
index 9391f25..3a2d814 100644
--- a/xfa/fxfa/cxfa_ffdatetimeedit.cpp
+++ b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
@@ -172,7 +172,7 @@
}
bool CXFA_FFDateTimeEdit::IsDataChanged() {
- if (GetLayoutItem()->m_dwStatus & XFA_WidgetStatus_TextEditValueChanged)
+ if (GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_TextEditValueChanged))
return true;
WideString wsText = GetPickerWidget()->GetEditText();
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index 0b069f6..bb7bb65 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -273,25 +273,22 @@
return false;
if (pOldFocus) {
- if (!(pOldFocus->GetStatus() & XFA_WidgetStatus_Focused) &&
- (pOldFocus->GetStatus() & XFA_WidgetStatus_Visible)) {
+ CXFA_ContentLayoutItem* pItem = pOldFocus->GetLayoutItem();
+ if (pItem->TestStatusBits(XFA_WidgetStatus_Visible) &&
+ !pItem->TestStatusBits(XFA_WidgetStatus_Focused)) {
if (!pOldFocus->IsLoaded())
pOldFocus->LoadWidget();
-
pOldFocus->OnSetFocus(pOldFocus);
}
-
pOldFocus->OnKillFocus(pNewFocus);
}
if (pNewFocus) {
- if (pNewFocus->GetStatus() & XFA_WidgetStatus_Visible) {
+ if (pNewFocus->GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_Visible)) {
if (!pNewFocus->IsLoaded())
pNewFocus->LoadWidget();
-
pNewFocus->OnSetFocus(pOldFocus);
}
-
CXFA_Node* node = pNewFocus->GetNode();
m_pFocusNode = node->IsWidgetReady() ? node : nullptr;
m_pFocusWidget = pNewFocus;
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index 7e3d838..820e64b 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -105,7 +105,7 @@
}
void CXFA_FFField::DrawFocus(CXFA_Graphics* pGS, CFX_Matrix* pMatrix) {
- if (!(GetLayoutItem()->m_dwStatus & XFA_WidgetStatus_Focused))
+ if (!GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_Focused))
return;
pGS->SetStrokeColor(CXFA_GEColor(0xFF000000));
@@ -503,7 +503,7 @@
CFWL_MessageSetFocus ms(nullptr, m_pNormalWidget.get());
TranslateFWLMessage(&ms);
- GetLayoutItem()->m_dwStatus |= XFA_WidgetStatus_Focused;
+ GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
InvalidateRect();
return true;
}
@@ -514,7 +514,7 @@
CFWL_MessageKillFocus ms(nullptr, m_pNormalWidget.get());
TranslateFWLMessage(&ms);
- GetLayoutItem()->m_dwStatus &= ~XFA_WidgetStatus_Focused;
+ GetLayoutItem()->ClearStatusBits(XFA_WidgetStatus_Focused);
InvalidateRect();
CXFA_FFWidget::OnKillFocus(pNewWidget);
return true;
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp
index 5ad5036..b5c5628 100644
--- a/xfa/fxfa/cxfa_ffpageview.cpp
+++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -74,20 +74,21 @@
bool bIgnorerelevant) {
CXFA_Node* pNode = pWidget->GetNode();
- if (!!(dwFilter & XFA_WidgetStatus_Focused) &&
+ if ((dwFilter & XFA_WidgetStatus_Focused) &&
(!pNode || pNode->GetElementType() != XFA_Element::Field)) {
return false;
}
- uint32_t dwStatus = pWidget->GetStatus();
- if (bTraversal && (dwStatus & XFA_WidgetStatus_Disabled))
+ CXFA_ContentLayoutItem* pItem = pWidget->GetLayoutItem();
+ if (bTraversal && pItem->TestStatusBits(XFA_WidgetStatus_Disabled))
return false;
+
if (bIgnorerelevant)
- return !!(dwStatus & XFA_WidgetStatus_Visible);
+ return pItem->TestStatusBits(XFA_WidgetStatus_Visible);
dwFilter &= (XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable |
XFA_WidgetStatus_Printable);
- return (dwFilter & dwStatus) == dwFilter;
+ return pItem->TestStatusBits(dwFilter);
}
bool IsLayoutElement(XFA_Element eElement, bool bLayoutContainer) {
@@ -211,7 +212,7 @@
return nullptr;
if (!pWidget->IsLoaded() &&
- !!(pWidget->GetStatus() & XFA_WidgetStatus_Visible)) {
+ pWidget->GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_Visible)) {
if (!pWidget->LoadWidget())
return nullptr;
}
@@ -455,14 +456,15 @@
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetWidget(
CXFA_LayoutItem* pLayoutItem) {
- if (CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem)) {
- if (!pWidget->IsLoaded() &&
- (pWidget->GetStatus() & XFA_WidgetStatus_Visible)) {
- pWidget->LoadWidget();
- }
- return pWidget;
+ CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem);
+ if (!pWidget)
+ return nullptr;
+
+ if (!pWidget->IsLoaded() &&
+ pWidget->GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_Visible)) {
+ pWidget->LoadWidget();
}
- return nullptr;
+ return pWidget;
}
CXFA_TabParam::CXFA_TabParam(CXFA_FFWidget* pWidget) : m_pWidget(pWidget) {}
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index 528d55e..1e5055c 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -121,7 +121,7 @@
void CXFA_FFTextEdit::OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
if (!IsFocused()) {
- GetLayoutItem()->m_dwStatus |= XFA_WidgetStatus_Focused;
+ GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
UpdateFWLData();
InvalidateRect();
}
@@ -136,7 +136,7 @@
void CXFA_FFTextEdit::OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point) {
if (!IsFocused()) {
- GetLayoutItem()->m_dwStatus |= XFA_WidgetStatus_Focused;
+ GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
UpdateFWLData();
InvalidateRect();
}
@@ -158,9 +158,9 @@
}
bool CXFA_FFTextEdit::OnSetFocus(CXFA_FFWidget* pOldWidget) {
- GetLayoutItem()->m_dwStatus &= ~XFA_WidgetStatus_TextEditValueChanged;
+ GetLayoutItem()->ClearStatusBits(XFA_WidgetStatus_TextEditValueChanged);
if (!IsFocused()) {
- GetLayoutItem()->m_dwStatus |= XFA_WidgetStatus_Focused;
+ GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
UpdateFWLData();
InvalidateRect();
}
@@ -173,15 +173,15 @@
bool CXFA_FFTextEdit::OnKillFocus(CXFA_FFWidget* pNewWidget) {
CFWL_MessageKillFocus ms(nullptr, m_pNormalWidget.get());
TranslateFWLMessage(&ms);
- GetLayoutItem()->m_dwStatus &= ~XFA_WidgetStatus_Focused;
-
+ GetLayoutItem()->ClearStatusBits(XFA_WidgetStatus_Focused);
SetEditScrollOffset();
ProcessCommittedData();
UpdateFWLData();
InvalidateRect();
+
CXFA_FFWidget::OnKillFocus(pNewWidget);
- GetLayoutItem()->m_dwStatus &= ~XFA_WidgetStatus_TextEditValueChanged;
+ GetLayoutItem()->ClearStatusBits(XFA_WidgetStatus_TextEditValueChanged);
return true;
}
@@ -211,8 +211,7 @@
}
bool CXFA_FFTextEdit::IsDataChanged() {
- auto* pItem = GetLayoutItem();
- return !!(pItem->m_dwStatus & XFA_WidgetStatus_TextEditValueChanged);
+ return GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_TextEditValueChanged);
}
uint32_t CXFA_FFTextEdit::GetAlignment() {
@@ -300,7 +299,7 @@
void CXFA_FFTextEdit::OnTextWillChange(CFWL_Widget* pWidget,
CFWL_EventTextWillChange* event) {
- GetLayoutItem()->m_dwStatus |= XFA_WidgetStatus_TextEditValueChanged;
+ GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_TextEditValueChanged);
CXFA_EventParam eParam;
eParam.m_eType = XFA_EVENT_Change;
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 125ebc0..d5c1367 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -242,13 +242,13 @@
}
const CFX_RectF& CXFA_FFWidget::GetWidgetRect() const {
- if ((GetLayoutItem()->m_dwStatus & XFA_WidgetStatus_RectCached) == 0)
+ if (!GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_RectCached))
RecacheWidgetRect();
return m_rtWidget;
}
const CFX_RectF& CXFA_FFWidget::RecacheWidgetRect() const {
- GetLayoutItem()->m_dwStatus |= XFA_WidgetStatus_RectCached;
+ GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_RectCached);
m_rtWidget = GetLayoutItem()->GetRect(false);
return m_rtWidget;
}
@@ -277,13 +277,9 @@
return rtWidget;
}
-uint32_t CXFA_FFWidget::GetStatus() {
- return GetLayoutItem()->m_dwStatus;
-}
-
void CXFA_FFWidget::ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved) {
- GetLayoutItem()->m_dwStatus =
- (GetLayoutItem()->m_dwStatus & ~dwRemoved) | dwAdded;
+ GetLayoutItem()->ClearStatusBits(dwRemoved);
+ GetLayoutItem()->SetStatusBits(dwAdded);
}
CFX_RectF CXFA_FFWidget::GetBBox(FocusOption focus) {
@@ -401,7 +397,8 @@
if (pParent && !pParent->IsAncestorOf(pOldWidget))
pParent->OnSetFocus(pOldWidget);
- GetLayoutItem()->m_dwStatus |= XFA_WidgetStatus_Focused;
+ GetLayoutItem()->SetStatusBits(XFA_WidgetStatus_Focused);
+
CXFA_EventParam eParam;
eParam.m_eType = XFA_EVENT_Enter;
eParam.m_pTarget = m_pNode.Get();
@@ -410,7 +407,7 @@
}
bool CXFA_FFWidget::OnKillFocus(CXFA_FFWidget* pNewWidget) {
- GetLayoutItem()->m_dwStatus &= ~XFA_WidgetStatus_Focused;
+ GetLayoutItem()->ClearStatusBits(XFA_WidgetStatus_Focused);
EventKillFocus();
if (!pNewWidget)
return true;
@@ -597,12 +594,13 @@
}
bool CXFA_FFWidget::HasVisibleStatus() const {
- return !!(GetLayoutItem()->m_dwStatus & XFA_WidgetStatus_Visible);
+ return GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_Visible);
}
void CXFA_FFWidget::EventKillFocus() {
- if (GetLayoutItem()->m_dwStatus & XFA_WidgetStatus_Access) {
- GetLayoutItem()->m_dwStatus &= ~XFA_WidgetStatus_Access;
+ CXFA_ContentLayoutItem* pItem = GetLayoutItem();
+ if (pItem->TestStatusBits(XFA_WidgetStatus_Access)) {
+ pItem->ClearStatusBits(XFA_WidgetStatus_Access);
return;
}
CXFA_EventParam eParam;
@@ -612,10 +610,13 @@
}
bool CXFA_FFWidget::IsButtonDown() {
- return (GetLayoutItem()->m_dwStatus & XFA_WidgetStatus_ButtonDown) != 0;
+ return GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_ButtonDown);
}
void CXFA_FFWidget::SetButtonDown(bool bSet) {
- bSet ? GetLayoutItem()->m_dwStatus |= XFA_WidgetStatus_ButtonDown
- : GetLayoutItem()->m_dwStatus &= ~XFA_WidgetStatus_ButtonDown;
+ CXFA_ContentLayoutItem* pItem = GetLayoutItem();
+ if (bSet)
+ pItem->SetStatusBits(XFA_WidgetStatus_ButtonDown);
+ else
+ pItem->ClearStatusBits(XFA_WidgetStatus_ButtonDown);
}
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index ec68cff..1327c54 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -131,7 +131,6 @@
const CFX_RectF& GetWidgetRect() const;
const CFX_RectF& RecacheWidgetRect() const;
- uint32_t GetStatus();
void ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved);
CXFA_FFDoc* GetDoc();
@@ -139,7 +138,7 @@
IXFA_AppProvider* GetAppProvider();
void InvalidateRect();
bool IsFocused() const {
- return !!(GetLayoutItem()->m_dwStatus & XFA_WidgetStatus_Focused);
+ return GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_Focused);
}
CFX_PointF Rotate2Normal(const CFX_PointF& point);
CFX_Matrix GetRotateMatrix();
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.cpp b/xfa/fxfa/cxfa_ffwidgethandler.cpp
index 809655d..ee43004 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.cpp
+++ b/xfa/fxfa/cxfa_ffwidgethandler.cpp
@@ -182,11 +182,11 @@
return widget->Redo();
}
-FWL_WidgetHit CXFA_FFWidgetHandler::OnHitTest(CXFA_FFWidget* hWidget,
+FWL_WidgetHit CXFA_FFWidgetHandler::OnHitTest(CXFA_FFWidget* pWidget,
const CFX_PointF& point) {
- if (!(hWidget->GetStatus() & XFA_WidgetStatus_Visible))
+ if (!pWidget->GetLayoutItem()->TestStatusBits(XFA_WidgetStatus_Visible))
return FWL_WidgetHit::Unknown;
- return hWidget->OnHitTest(hWidget->Rotate2Normal(point));
+ return pWidget->OnHitTest(pWidget->Rotate2Normal(point));
}
bool CXFA_FFWidgetHandler::OnSetCursor(CXFA_FFWidget* hWidget,
diff --git a/xfa/fxfa/cxfa_ffwidgethandler.h b/xfa/fxfa/cxfa_ffwidgethandler.h
index 3283ca9..1e7c546 100644
--- a/xfa/fxfa/cxfa_ffwidgethandler.h
+++ b/xfa/fxfa/cxfa_ffwidgethandler.h
@@ -65,7 +65,7 @@
bool OnKeyDown(CXFA_FFWidget* hWidget, uint32_t dwKeyCode, uint32_t dwFlags);
bool OnKeyUp(CXFA_FFWidget* hWidget, uint32_t dwKeyCode, uint32_t dwFlags);
bool OnChar(CXFA_FFWidget* hWidget, uint32_t dwChar, uint32_t dwFlags);
- FWL_WidgetHit OnHitTest(CXFA_FFWidget* hWidget, const CFX_PointF& point);
+ FWL_WidgetHit OnHitTest(CXFA_FFWidget* pWidget, const CFX_PointF& point);
bool OnSetCursor(CXFA_FFWidget* hWidget, const CFX_PointF& point);
void RenderWidget(CXFA_FFWidget* hWidget,
CXFA_Graphics* pGS,
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutitem.h b/xfa/fxfa/layout/cxfa_contentlayoutitem.h
index fa1591e..c83ec3f 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutitem.h
+++ b/xfa/fxfa/layout/cxfa_contentlayoutitem.h
@@ -31,13 +31,19 @@
CFX_RectF GetRect(bool bRelative) const;
size_t GetIndex() const;
+ void SetStatusBits(uint32_t val) { m_dwStatus |= val; }
+ void ClearStatusBits(uint32_t val) { m_dwStatus &= ~val; }
+
+ // TRUE if all (not any) bits set in |val| are set in |m_dwStatus|.
+ bool TestStatusBits(uint32_t val) const { return (m_dwStatus & val) == val; }
+
CFX_PointF m_sPos;
CFX_SizeF m_sSize;
- mutable uint32_t m_dwStatus = 0;
private:
void RemoveSelf();
+ mutable uint32_t m_dwStatus = 0;
UnownedPtr<CXFA_ContentLayoutItem> m_pPrev;
UnownedPtr<CXFA_ContentLayoutItem> m_pNext;
std::unique_ptr<CXFA_FFWidget> const m_pFFWidget;