Replace uint32_t with more meaningful types in fxfa.h - replace XFA_PRINTOPT_* defines with enum type - introduce XFA_WidgetStatusMask type. Bug: pdfium:1085 Change-Id: I7570aab70fe0fc0fb77d840eaf3d70cb90709fa7 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/80832 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp index 6776486..38011c5 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -579,7 +579,7 @@ void CPDFXFA_DocEnvironment::Print(CXFA_FFDoc* hDoc, int32_t nStartPage, int32_t nEndPage, - uint32_t dwOptions) { + XFA_PrintOptMask dwOptions) { if (hDoc != m_pContext->GetXFADoc()) return;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h index 7035ce4..92e00a1 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h +++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
@@ -54,7 +54,7 @@ void Print(CXFA_FFDoc* hDoc, int32_t nStartPage, int32_t nEndPage, - uint32_t dwOptions) override; + XFA_PrintOptMask dwOptions) override; FX_ARGB GetHighlightColor(const CXFA_FFDoc* hDoc) const override; IJS_Runtime* GetIJSRuntime(const CXFA_FFDoc* hDoc) const override; CFX_XMLDocument* GetXMLDoc() const override;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp index b7606be..bcbdd85 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -24,9 +24,9 @@ namespace { -constexpr uint32_t kIteratorFilter = XFA_WidgetStatus_Visible | - XFA_WidgetStatus_Viewable | - XFA_WidgetStatus_Focused; +constexpr XFA_WidgetStatusMask kIteratorFilter = XFA_WidgetStatus_Visible | + XFA_WidgetStatus_Viewable | + XFA_WidgetStatus_Focused; } // namespace
diff --git a/fxjs/xfa/cjx_hostpseudomodel.cpp b/fxjs/xfa/cjx_hostpseudomodel.cpp index cf20597..e063901 100644 --- a/fxjs/xfa/cjx_hostpseudomodel.cpp +++ b/fxjs/xfa/cjx_hostpseudomodel.cpp
@@ -531,7 +531,7 @@ if (!pNotify) return CJS_Result::Success(); - uint32_t dwOptions = 0; + XFA_PrintOptMask dwOptions = 0; if (runtime->ToBoolean(params[0])) dwOptions |= XFA_PRINTOPT_ShowDialog; if (runtime->ToBoolean(params[3]))
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp index 23c7887..d78393b 100644 --- a/xfa/fxfa/cxfa_ffdoc.cpp +++ b/xfa/fxfa/cxfa_ffdoc.cpp
@@ -200,7 +200,7 @@ void CXFA_FFDoc::Print(int32_t nStartPage, int32_t nEndPage, - uint32_t dwOptions) { + XFA_PrintOptMask dwOptions) { m_pDocEnvironment->Print(this, nStartPage, nEndPage, dwOptions); }
diff --git a/xfa/fxfa/cxfa_ffdoc.h b/xfa/fxfa/cxfa_ffdoc.h index 19e00e1..f99d344 100644 --- a/xfa/fxfa/cxfa_ffdoc.h +++ b/xfa/fxfa/cxfa_ffdoc.h
@@ -87,7 +87,7 @@ bool IsValidationsEnabled() const; void SetValidationsEnabled(bool bEnabled); void SetFocusWidget(CXFA_FFWidget* hWidget); - void Print(int32_t nStartPage, int32_t nEndPage, uint32_t dwOptions); + void Print(int32_t nStartPage, int32_t nEndPage, XFA_PrintOptMask dwOptions); FX_ARGB GetHighlightColor() const; IJS_Runtime* GetIJSRuntime() const; CFX_XMLDocument* GetXMLDocument() const;
diff --git a/xfa/fxfa/cxfa_ffnotify.cpp b/xfa/fxfa/cxfa_ffnotify.cpp index f5354fe..73e0b74 100644 --- a/xfa/fxfa/cxfa_ffnotify.cpp +++ b/xfa/fxfa/cxfa_ffnotify.cpp
@@ -470,7 +470,7 @@ void CXFA_FFNotify::OnLayoutItemAdded(CXFA_LayoutProcessor* pLayout, CXFA_LayoutItem* pSender, int32_t iPageIdx, - uint32_t dwStatus) { + XFA_WidgetStatusMask dwStatus) { CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout); if (!pDocView) return; @@ -480,9 +480,10 @@ return; CXFA_FFPageView* pNewPageView = pDocView->GetPageView(iPageIdx); - uint32_t dwFilter = XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable | - XFA_WidgetStatus_Printable; - pWidget->ModifyStatus(dwStatus, dwFilter); + constexpr XFA_WidgetStatusMask kRemove = XFA_WidgetStatus_Visible | + XFA_WidgetStatus_Viewable | + XFA_WidgetStatus_Printable; + pWidget->ModifyStatus(dwStatus, kRemove); CXFA_FFPageView* pPrePageView = pWidget->GetPageView(); if (pPrePageView != pNewPageView || (dwStatus & (XFA_WidgetStatus_Visible | XFA_WidgetStatus_Viewable)) ==
diff --git a/xfa/fxfa/cxfa_ffnotify.h b/xfa/fxfa/cxfa_ffnotify.h index 167a17a..a189ea7 100644 --- a/xfa/fxfa/cxfa_ffnotify.h +++ b/xfa/fxfa/cxfa_ffnotify.h
@@ -54,7 +54,7 @@ void OnLayoutItemAdded(CXFA_LayoutProcessor* pLayout, CXFA_LayoutItem* pSender, int32_t iPageIdx, - uint32_t dwStatus); + XFA_WidgetStatusMask dwStatus); void OnLayoutItemRemoving(CXFA_LayoutProcessor* pLayout, CXFA_LayoutItem* pSender); void StartFieldDrawLayout(CXFA_Node* pItem,
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp index bed3360..ab92161 100644 --- a/xfa/fxfa/cxfa_ffpageview.cpp +++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -67,7 +67,7 @@ } bool PageWidgetFilter(CXFA_FFWidget* pWidget, - uint32_t dwFilter, + XFA_WidgetStatusMask dwFilter, bool bTraversal, bool bIgnoreRelevant) { CXFA_Node* pNode = pWidget->GetNode(); @@ -133,7 +133,7 @@ } CXFA_FFWidget* FilteredLoadedWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem, - uint32_t dwFilter, + XFA_WidgetStatusMask dwFilter, bool bIgnoreRelevant) { CXFA_FFWidget* pWidget = CXFA_FFWidget::FromLayoutItem(pLayoutItem); if (!pWidget) @@ -269,21 +269,22 @@ } IXFA_WidgetIterator* CXFA_FFPageView::CreateGCedFormWidgetIterator( - uint32_t dwWidgetFilter) { + XFA_WidgetStatusMask dwWidgetFilter) { return cppgc::MakeGarbageCollected<CXFA_FFPageWidgetIterator>( GetDocView()->GetDoc()->GetHeap()->GetAllocationHandle(), this, dwWidgetFilter); } IXFA_WidgetIterator* CXFA_FFPageView::CreateGCedTraverseWidgetIterator( - uint32_t dwWidgetFilter) { + XFA_WidgetStatusMask dwWidgetFilter) { return cppgc::MakeGarbageCollected<CXFA_FFTabOrderPageWidgetIterator>( GetDocView()->GetDoc()->GetHeap()->GetAllocationHandle(), this, dwWidgetFilter); } -CXFA_FFPageWidgetIterator::CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, - uint32_t dwFilter) +CXFA_FFPageWidgetIterator::CXFA_FFPageWidgetIterator( + CXFA_FFPageView* pPageView, + XFA_WidgetStatusMask dwFilter) : m_sIterator(pPageView->GetLayoutItem()), m_dwFilter(dwFilter), m_bIgnoreRelevant(IsDocVersionBelow205(GetDocForPageView(pPageView))) {} @@ -340,7 +341,7 @@ CXFA_FFTabOrderPageWidgetIterator::CXFA_FFTabOrderPageWidgetIterator( CXFA_FFPageView* pPageView, - uint32_t dwFilter) + XFA_WidgetStatusMask dwFilter) : m_pPageViewLayout(pPageView->GetLayoutItem()), m_dwFilter(dwFilter), m_bIgnoreRelevant(IsDocVersionBelow205(GetDocForPageView(pPageView))) {
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h index c8488a1..371819a 100644 --- a/xfa/fxfa/cxfa_ffpageview.h +++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -36,9 +36,10 @@ CFX_Matrix GetDisplayMatrix(const FX_RECT& rtDisp, int32_t iRotate) const; // These always return a non-null iterator from the gc heap. - IXFA_WidgetIterator* CreateGCedFormWidgetIterator(uint32_t dwWidgetFilter); + IXFA_WidgetIterator* CreateGCedFormWidgetIterator( + XFA_WidgetStatusMask dwWidgetFilter); IXFA_WidgetIterator* CreateGCedTraverseWidgetIterator( - uint32_t dwWidgetFilter); + XFA_WidgetStatusMask dwWidgetFilter); private: CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea); @@ -66,10 +67,11 @@ bool SetCurrentWidget(CXFA_FFWidget* hWidget) override; private: - CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, uint32_t dwFilter); + CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, + XFA_WidgetStatusMask dwFilter); CXFA_LayoutItemIterator m_sIterator; - const uint32_t m_dwFilter; + const XFA_WidgetStatusMask m_dwFilter; const bool m_bIgnoreRelevant; }; @@ -92,7 +94,7 @@ private: CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView, - uint32_t dwFilter); + XFA_WidgetStatusMask dwFilter); CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget); CXFA_FFWidget* FindWidgetByName(const WideString& wsWidgetName, @@ -102,7 +104,7 @@ cppgc::Member<CXFA_ViewLayoutItem> const m_pPageViewLayout; std::vector<cppgc::Member<CXFA_ContentLayoutItem>> m_TabOrderWidgetArray; - const uint32_t m_dwFilter; + const XFA_WidgetStatusMask m_dwFilter; int32_t m_iCurWidget = -1; const bool m_bIgnoreRelevant; };
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp index ac34fc9..097d2e2 100644 --- a/xfa/fxfa/cxfa_ffwidget.cpp +++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -285,7 +285,8 @@ return rtWidget; } -void CXFA_FFWidget::ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved) { +void CXFA_FFWidget::ModifyStatus(XFA_WidgetStatusMask dwAdded, + XFA_WidgetStatusMask dwRemoved) { GetLayoutItem()->ClearStatusBits(dwRemoved); GetLayoutItem()->SetStatusBits(dwAdded); }
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h index 04afd14..897dcba 100644 --- a/xfa/fxfa/cxfa_ffwidget.h +++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -152,7 +152,8 @@ CXFA_FFWidget* GetNextFFWidget() const; const CFX_RectF& GetWidgetRect() const; const CFX_RectF& RecacheWidgetRect() const; - void ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved); + void ModifyStatus(XFA_WidgetStatusMask dwAdded, + XFA_WidgetStatusMask dwRemoved); CXFA_FFDoc* GetDoc(); CXFA_FFApp* GetApp();
diff --git a/xfa/fxfa/fxfa.h b/xfa/fxfa/fxfa.h index 7630405..59b36f5 100644 --- a/xfa/fxfa/fxfa.h +++ b/xfa/fxfa/fxfa.h
@@ -7,6 +7,8 @@ #ifndef XFA_FXFA_FXFA_H_ #define XFA_FXFA_FXFA_H_ +#include <type_traits> + #include "core/fxcrt/cfx_timer.h" #include "core/fxcrt/fx_coordinates.h" #include "core/fxcrt/retain_ptr.h" @@ -61,12 +63,15 @@ kXFAForeground = 3, }; -#define XFA_PRINTOPT_ShowDialog 0x00000001 -#define XFA_PRINTOPT_CanCancel 0x00000002 -#define XFA_PRINTOPT_ShrinkPage 0x00000004 -#define XFA_PRINTOPT_AsImage 0x00000008 -#define XFA_PRINTOPT_ReverseOrder 0x00000010 -#define XFA_PRINTOPT_PrintAnnot 0x00000020 +enum XFA_PrintOpt : uint8_t { + XFA_PRINTOPT_ShowDialog = 1 << 0, + XFA_PRINTOPT_CanCancel = 1 << 1, + XFA_PRINTOPT_ShrinkPage = 1 << 2, + XFA_PRINTOPT_AsImage = 1 << 3, + XFA_PRINTOPT_ReverseOrder = 1 << 4, + XFA_PRINTOPT_PrintAnnot = 1 << 5, +}; +using XFA_PrintOptMask = std::underlying_type<XFA_PrintOpt>::type; enum class XFA_EventError { kError = -1, @@ -75,9 +80,8 @@ kDisabled = 2, }; -enum XFA_WidgetStatus { +enum XFA_WidgetStatus : uint16_t { XFA_WidgetStatus_None = 0, - XFA_WidgetStatus_Access = 1 << 0, XFA_WidgetStatus_ButtonDown = 1 << 1, XFA_WidgetStatus_Disabled = 1 << 2, @@ -88,6 +92,7 @@ XFA_WidgetStatus_Viewable = 1 << 7, XFA_WidgetStatus_Visible = 1 << 8 }; +using XFA_WidgetStatusMask = std::underlying_type<XFA_WidgetStatus>::type; // Probably should be CXFA_FFApp::CallbackIface in cxfa_ffapp.h class IXFA_AppProvider { @@ -242,7 +247,7 @@ virtual void Print(CXFA_FFDoc* hDoc, int32_t nStartPage, int32_t nEndPage, - uint32_t dwOptions) = 0; + XFA_PrintOptMask dwOptions) = 0; virtual FX_ARGB GetHighlightColor(const CXFA_FFDoc* hDoc) const = 0; virtual IJS_Runtime* GetIJSRuntime(const CXFA_FFDoc* hDoc) const = 0; virtual CFX_XMLDocument* GetXMLDoc() const = 0;
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutitem.h b/xfa/fxfa/layout/cxfa_contentlayoutitem.h index 3b4163c..1a30743 100644 --- a/xfa/fxfa/layout/cxfa_contentlayoutitem.h +++ b/xfa/fxfa/layout/cxfa_contentlayoutitem.h
@@ -9,6 +9,7 @@ #include "core/fxcrt/fx_coordinates.h" #include "v8/include/cppgc/persistent.h" +#include "xfa/fxfa/fxfa.h" #include "xfa/fxfa/layout/cxfa_layoutitem.h" class CXFA_FFWidget; @@ -31,11 +32,13 @@ 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; } + void SetStatusBits(XFA_WidgetStatusMask val) { m_dwStatus |= val; } + void ClearStatusBits(XFA_WidgetStatusMask 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; } + bool TestStatusBits(XFA_WidgetStatusMask val) const { + return (m_dwStatus & val) == val; + } CFX_PointF m_sPos; CFX_SizeF m_sSize; @@ -44,7 +47,7 @@ CXFA_ContentLayoutItem(CXFA_Node* pNode, CXFA_FFWidget* pFFWidget); void RemoveSelf(); - mutable uint32_t m_dwStatus = 0; + mutable XFA_WidgetStatusMask m_dwStatus = 0; cppgc::Member<CXFA_ContentLayoutItem> m_pPrev; cppgc::Member<CXFA_ContentLayoutItem> m_pNext; cppgc::Member<CXFA_FFWidget> const m_pFFWidget;
diff --git a/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp index 41c6338..8e0b9c2 100644 --- a/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp +++ b/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
@@ -105,8 +105,10 @@ using PageSetIterator = CXFA_NodeIteratorTemplate<CXFA_ViewLayoutItem, TraverseStrategy_PageSet>; -uint32_t GetRelevant(CXFA_Node* pFormItem, uint32_t dwParentRelvant) { - uint32_t dwRelevant = XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable; +XFA_WidgetStatusMask GetRelevant(CXFA_Node* pFormItem, + XFA_WidgetStatusMask dwParentRelvant) { + XFA_WidgetStatusMask dwRelevant = + XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable; WideString wsRelevant = pFormItem->JSObject()->GetCData(XFA_Attribute::Relevant); if (!wsRelevant.IsEmpty()) { @@ -129,12 +131,12 @@ void SyncContainer(CXFA_FFNotify* pNotify, CXFA_LayoutProcessor* pDocLayout, CXFA_LayoutItem* pViewItem, - uint32_t dwRelevant, + XFA_WidgetStatusMask dwRelevant, bool bVisible, int32_t nPageIndex) { bool bVisibleItem = false; - uint32_t dwStatus = 0; - uint32_t dwRelevantContainer = 0; + XFA_WidgetStatusMask dwStatus = 0; + XFA_WidgetStatusMask dwRelevantContainer = 0; if (bVisible) { XFA_AttributeValue eAttributeValue = pViewItem->GetFormNode() @@ -1882,7 +1884,7 @@ continue; nPageIdx++; - uint32_t dwRelevant = + XFA_WidgetStatusMask dwRelevant = XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable; CXFA_LayoutItemIterator iterator(pViewItem); CXFA_LayoutItem* pChildLayoutItem = iterator.GetCurrent(); @@ -1900,7 +1902,7 @@ ->TryEnum(XFA_Attribute::Presence, true) .value_or(XFA_AttributeValue::Visible); bool bVisible = presence == XFA_AttributeValue::Visible; - uint32_t dwRelevantChild = + XFA_WidgetStatusMask dwRelevantChild = GetRelevant(pContentItem->GetFormNode(), dwRelevant); SyncContainer(pNotify, m_pLayoutProcessor, pContentItem, dwRelevantChild, bVisible, nPageIdx);