1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef XFA_FXFA_CXFA_FFPAGEVIEW_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FXFA_CXFA_FFPAGEVIEW_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/mask.h" 13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/widestring.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/gc/heap.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/garbage-collected.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/member.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/visitor.h" 18*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffwidget.h" 19*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/layout/cxfa_contentlayoutitem.h" 20*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/layout/cxfa_traversestrategy_layoutitem.h" 21*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/layout/cxfa_viewlayoutitem.h" 22*3ac0a46fSAndroid Build Coastguard Worker 23*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFWidget; 24*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFDocView; 25*3ac0a46fSAndroid Build Coastguard Worker 26*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFPageView final : public cppgc::GarbageCollected<CXFA_FFPageView> { 27*3ac0a46fSAndroid Build Coastguard Worker public: 28*3ac0a46fSAndroid Build Coastguard Worker CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 29*3ac0a46fSAndroid Build Coastguard Worker ~CXFA_FFPageView(); 30*3ac0a46fSAndroid Build Coastguard Worker 31*3ac0a46fSAndroid Build Coastguard Worker void Trace(cppgc::Visitor* visitor) const; 32*3ac0a46fSAndroid Build Coastguard Worker GetLayoutItem()33*3ac0a46fSAndroid Build Coastguard Worker CXFA_ViewLayoutItem* GetLayoutItem() const { return m_pLayoutItem; } SetLayoutItem(CXFA_ViewLayoutItem * pItem)34*3ac0a46fSAndroid Build Coastguard Worker void SetLayoutItem(CXFA_ViewLayoutItem* pItem) { m_pLayoutItem = pItem; } 35*3ac0a46fSAndroid Build Coastguard Worker 36*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDocView* GetDocView() const; 37*3ac0a46fSAndroid Build Coastguard Worker CFX_RectF GetPageViewRect() const; 38*3ac0a46fSAndroid Build Coastguard Worker CFX_Matrix GetDisplayMatrix(const FX_RECT& rtDisp, int32_t iRotate) const; 39*3ac0a46fSAndroid Build Coastguard Worker 40*3ac0a46fSAndroid Build Coastguard Worker // This always returns a non-null iterator from the gc heap. 41*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget::IteratorIface* CreateGCedTraverseWidgetIterator( 42*3ac0a46fSAndroid Build Coastguard Worker Mask<XFA_WidgetStatus> dwWidgetFilter); 43*3ac0a46fSAndroid Build Coastguard Worker 44*3ac0a46fSAndroid Build Coastguard Worker private: 45*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea); 46*3ac0a46fSAndroid Build Coastguard Worker 47*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_Node> const m_pPageArea; 48*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_FFDocView> const m_pDocView; 49*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_ViewLayoutItem> m_pLayoutItem; 50*3ac0a46fSAndroid Build Coastguard Worker }; 51*3ac0a46fSAndroid Build Coastguard Worker 52*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFPageWidgetIterator final : public CXFA_FFWidget::IteratorIface { 53*3ac0a46fSAndroid Build Coastguard Worker CPPGC_STACK_ALLOCATED(); 54*3ac0a46fSAndroid Build Coastguard Worker 55*3ac0a46fSAndroid Build Coastguard Worker public: 56*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, 57*3ac0a46fSAndroid Build Coastguard Worker Mask<XFA_WidgetStatus> dwFilter); 58*3ac0a46fSAndroid Build Coastguard Worker ~CXFA_FFPageWidgetIterator() override; 59*3ac0a46fSAndroid Build Coastguard Worker 60*3ac0a46fSAndroid Build Coastguard Worker // CXFA_FFWidget::IteratorIface: 61*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* MoveToFirst() override; 62*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* MoveToLast() override; 63*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* MoveToNext() override; 64*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* MoveToPrevious() override; 65*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* GetCurrentWidget() override; 66*3ac0a46fSAndroid Build Coastguard Worker bool SetCurrentWidget(CXFA_FFWidget* hWidget) override; 67*3ac0a46fSAndroid Build Coastguard Worker 68*3ac0a46fSAndroid Build Coastguard Worker private: 69*3ac0a46fSAndroid Build Coastguard Worker CXFA_LayoutItemIterator m_sIterator; 70*3ac0a46fSAndroid Build Coastguard Worker const Mask<XFA_WidgetStatus> m_dwFilter; 71*3ac0a46fSAndroid Build Coastguard Worker const bool m_bIgnoreRelevant; 72*3ac0a46fSAndroid Build Coastguard Worker }; 73*3ac0a46fSAndroid Build Coastguard Worker 74*3ac0a46fSAndroid Build Coastguard Worker class CXFA_FFTabOrderPageWidgetIterator final 75*3ac0a46fSAndroid Build Coastguard Worker : public cppgc::GarbageCollected<CXFA_FFTabOrderPageWidgetIterator>, 76*3ac0a46fSAndroid Build Coastguard Worker public CXFA_FFWidget::IteratorIface { 77*3ac0a46fSAndroid Build Coastguard Worker public: 78*3ac0a46fSAndroid Build Coastguard Worker CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 79*3ac0a46fSAndroid Build Coastguard Worker ~CXFA_FFTabOrderPageWidgetIterator() override; 80*3ac0a46fSAndroid Build Coastguard Worker 81*3ac0a46fSAndroid Build Coastguard Worker void Trace(cppgc::Visitor* visitor) const; 82*3ac0a46fSAndroid Build Coastguard Worker 83*3ac0a46fSAndroid Build Coastguard Worker // CXFA_FFWidget::IteratorIface: 84*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* MoveToFirst() override; 85*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* MoveToLast() override; 86*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* MoveToNext() override; 87*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* MoveToPrevious() override; 88*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* GetCurrentWidget() override; 89*3ac0a46fSAndroid Build Coastguard Worker bool SetCurrentWidget(CXFA_FFWidget* hWidget) override; 90*3ac0a46fSAndroid Build Coastguard Worker 91*3ac0a46fSAndroid Build Coastguard Worker private: 92*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView, 93*3ac0a46fSAndroid Build Coastguard Worker Mask<XFA_WidgetStatus> dwFilter); 94*3ac0a46fSAndroid Build Coastguard Worker 95*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget); 96*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* FindWidgetByName(const WideString& wsWidgetName, 97*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFWidget* pRefWidget); 98*3ac0a46fSAndroid Build Coastguard Worker void CreateTabOrderWidgetArray(); 99*3ac0a46fSAndroid Build Coastguard Worker std::vector<CXFA_ContentLayoutItem*> CreateSpaceOrderLayoutItems(); 100*3ac0a46fSAndroid Build Coastguard Worker 101*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_ViewLayoutItem> const m_pPageViewLayout; 102*3ac0a46fSAndroid Build Coastguard Worker std::vector<cppgc::Member<CXFA_ContentLayoutItem>> m_TabOrderWidgetArray; 103*3ac0a46fSAndroid Build Coastguard Worker const Mask<XFA_WidgetStatus> m_dwFilter; 104*3ac0a46fSAndroid Build Coastguard Worker int32_t m_iCurWidget = -1; 105*3ac0a46fSAndroid Build Coastguard Worker const bool m_bIgnoreRelevant; 106*3ac0a46fSAndroid Build Coastguard Worker }; 107*3ac0a46fSAndroid Build Coastguard Worker 108*3ac0a46fSAndroid Build Coastguard Worker #endif // XFA_FXFA_CXFA_FFPAGEVIEW_H_ 109