diff options
Diffstat (limited to 'xfa/fxfa/cxfa_ffpageview.h')
-rw-r--r-- | xfa/fxfa/cxfa_ffpageview.h | 102 |
1 files changed, 46 insertions, 56 deletions
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h index 65c0b9510..32dd1d94d 100644 --- a/xfa/fxfa/cxfa_ffpageview.h +++ b/xfa/fxfa/cxfa_ffpageview.h @@ -1,4 +1,4 @@ -// Copyright 2014 PDFium Authors. All rights reserved. +// Copyright 2014 The PDFium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -7,10 +7,15 @@ #ifndef XFA_FXFA_CXFA_FFPAGEVIEW_H_ #define XFA_FXFA_CXFA_FFPAGEVIEW_H_ -#include <memory> #include <vector> -#include "core/fxcrt/observed_ptr.h" +#include "core/fxcrt/mask.h" +#include "core/fxcrt/widestring.h" +#include "fxjs/gc/heap.h" +#include "v8/include/cppgc/garbage-collected.h" +#include "v8/include/cppgc/member.h" +#include "v8/include/cppgc/visitor.h" +#include "xfa/fxfa/cxfa_ffwidget.h" #include "xfa/fxfa/layout/cxfa_contentlayoutitem.h" #include "xfa/fxfa/layout/cxfa_traversestrategy_layoutitem.h" #include "xfa/fxfa/layout/cxfa_viewlayoutitem.h" @@ -18,36 +23,41 @@ class CXFA_FFWidget; class CXFA_FFDocView; -class CXFA_FFPageView : public Observable { +class CXFA_FFPageView final : public cppgc::GarbageCollected<CXFA_FFPageView> { public: - CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea); + CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; ~CXFA_FFPageView(); - CXFA_ViewLayoutItem* GetLayoutItem() const { return m_pLayoutItem.Get(); } + void Trace(cppgc::Visitor* visitor) const; + + CXFA_ViewLayoutItem* GetLayoutItem() const { return m_pLayoutItem; } void SetLayoutItem(CXFA_ViewLayoutItem* pItem) { m_pLayoutItem = pItem; } CXFA_FFDocView* GetDocView() const; CFX_RectF GetPageViewRect() const; CFX_Matrix GetDisplayMatrix(const FX_RECT& rtDisp, int32_t iRotate) const; - // These always return a non-null iterator. - std::unique_ptr<IXFA_WidgetIterator> CreateFormWidgetIterator( - uint32_t dwWidgetFilter); - std::unique_ptr<IXFA_WidgetIterator> CreateTraverseWidgetIterator( - uint32_t dwWidgetFilter); + // This always returns a non-null iterator from the gc heap. + CXFA_FFWidget::IteratorIface* CreateGCedTraverseWidgetIterator( + Mask<XFA_WidgetStatus> dwWidgetFilter); private: - UnownedPtr<CXFA_Node> const m_pPageArea; - UnownedPtr<CXFA_FFDocView> const m_pDocView; - UnownedPtr<CXFA_ViewLayoutItem> m_pLayoutItem; + CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea); + + cppgc::Member<CXFA_Node> const m_pPageArea; + cppgc::Member<CXFA_FFDocView> const m_pDocView; + cppgc::Member<CXFA_ViewLayoutItem> m_pLayoutItem; }; -class CXFA_FFPageWidgetIterator final : public IXFA_WidgetIterator { +class CXFA_FFPageWidgetIterator final : public CXFA_FFWidget::IteratorIface { + CPPGC_STACK_ALLOCATED(); + public: - CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, uint32_t dwFilter); + CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, + Mask<XFA_WidgetStatus> dwFilter); ~CXFA_FFPageWidgetIterator() override; - void Reset() override; + // CXFA_FFWidget::IteratorIface: CXFA_FFWidget* MoveToFirst() override; CXFA_FFWidget* MoveToLast() override; CXFA_FFWidget* MoveToNext() override; @@ -56,37 +66,21 @@ class CXFA_FFPageWidgetIterator final : public IXFA_WidgetIterator { bool SetCurrentWidget(CXFA_FFWidget* hWidget) override; private: - CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem); - - UnownedPtr<CXFA_FFPageView> m_pPageView; - UnownedPtr<CXFA_FFWidget> m_hCurWidget; - uint32_t m_dwFilter; - bool m_bIgnoreRelevant; CXFA_LayoutItemIterator m_sIterator; + const Mask<XFA_WidgetStatus> m_dwFilter; + const bool m_bIgnoreRelevant; }; -class CXFA_TabParam { +class CXFA_FFTabOrderPageWidgetIterator final + : public cppgc::GarbageCollected<CXFA_FFTabOrderPageWidgetIterator>, + public CXFA_FFWidget::IteratorIface { public: - explicit CXFA_TabParam(CXFA_FFWidget* pWidget); - ~CXFA_TabParam(); - - void AppendTabParam(CXFA_TabParam* pParam); - void ClearChildren(); - CXFA_FFWidget* GetWidget() const { return m_pWidget.Get(); } - const std::vector<CXFA_FFWidget*>& GetChildren() const { return m_Children; } - - private: - UnownedPtr<CXFA_FFWidget> const m_pWidget; - std::vector<CXFA_FFWidget*> m_Children; -}; - -class CXFA_FFTabOrderPageWidgetIterator final : public IXFA_WidgetIterator { - public: - CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView, - uint32_t dwFilter); + CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; ~CXFA_FFTabOrderPageWidgetIterator() override; - void Reset() override; + void Trace(cppgc::Visitor* visitor) const; + + // CXFA_FFWidget::IteratorIface: CXFA_FFWidget* MoveToFirst() override; CXFA_FFWidget* MoveToLast() override; CXFA_FFWidget* MoveToNext() override; @@ -95,24 +89,20 @@ class CXFA_FFTabOrderPageWidgetIterator final : public IXFA_WidgetIterator { bool SetCurrentWidget(CXFA_FFWidget* hWidget) override; private: + CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView, + Mask<XFA_WidgetStatus> dwFilter); + CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget); CXFA_FFWidget* FindWidgetByName(const WideString& wsWidgetName, CXFA_FFWidget* pRefWidget); void CreateTabOrderWidgetArray(); - void CreateSpaceOrderWidgetArray(std::vector<CXFA_FFWidget*>* WidgetArray); - CXFA_FFWidget* GetWidget(CXFA_LayoutItem* pLayoutItem); - void OrderContainer(CXFA_LayoutItemIterator* sIterator, - CXFA_LayoutItem* pViewItem, - CXFA_TabParam* pContainer, - bool* bCurrentItem, - bool* bContentArea, - bool bMasterPage); - - std::vector<UnownedPtr<CXFA_FFWidget>> m_TabOrderWidgetArray; - UnownedPtr<CXFA_FFPageView> m_pPageView; - uint32_t m_dwFilter; - int32_t m_iCurWidget; - bool m_bIgnoreRelevant; + std::vector<CXFA_ContentLayoutItem*> CreateSpaceOrderLayoutItems(); + + cppgc::Member<CXFA_ViewLayoutItem> const m_pPageViewLayout; + std::vector<cppgc::Member<CXFA_ContentLayoutItem>> m_TabOrderWidgetArray; + const Mask<XFA_WidgetStatus> m_dwFilter; + int32_t m_iCurWidget = -1; + const bool m_bIgnoreRelevant; }; #endif // XFA_FXFA_CXFA_FFPAGEVIEW_H_ |