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;