K. Moon | 832a694 | 2022-10-31 20:11:31 +0000 | [diff] [blame] | 1 | // Copyright 2014 The PDFium Authors |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
Dan Sinclair | 80c4878 | 2017-03-23 12:11:20 -0400 | [diff] [blame] | 7 | #ifndef XFA_FXFA_CXFA_FFPAGEVIEW_H_ |
| 8 | #define XFA_FXFA_CXFA_FFPAGEVIEW_H_ |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 9 | |
tsepez | a0b2d23 | 2017-01-23 11:32:36 -0800 | [diff] [blame] | 10 | #include <vector> |
| 11 | |
Tom Sepez | 6f9e9f6 | 2021-08-11 17:01:53 +0000 | [diff] [blame] | 12 | #include "core/fxcrt/mask.h" |
Tom Sepez | 1e151c6 | 2021-11-22 23:46:09 +0000 | [diff] [blame] | 13 | #include "core/fxcrt/widestring.h" |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 14 | #include "fxjs/gc/heap.h" |
| 15 | #include "v8/include/cppgc/garbage-collected.h" |
| 16 | #include "v8/include/cppgc/member.h" |
| 17 | #include "v8/include/cppgc/visitor.h" |
Tom Sepez | 3d4afc9 | 2021-06-09 01:03:59 +0000 | [diff] [blame] | 18 | #include "xfa/fxfa/cxfa_ffwidget.h" |
Tom Sepez | 8ec3cb1 | 2019-02-06 17:47:32 +0000 | [diff] [blame] | 19 | #include "xfa/fxfa/layout/cxfa_contentlayoutitem.h" |
| 20 | #include "xfa/fxfa/layout/cxfa_traversestrategy_layoutitem.h" |
Tom Sepez | 685d24f | 2019-04-09 21:11:56 +0000 | [diff] [blame] | 21 | #include "xfa/fxfa/layout/cxfa_viewlayoutitem.h" |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 22 | |
| 23 | class CXFA_FFWidget; |
| 24 | class CXFA_FFDocView; |
thestig | 9f3dbbc | 2016-04-13 13:18:21 -0700 | [diff] [blame] | 25 | |
Tom Sepez | 6fda807 | 2020-09-08 23:47:45 +0000 | [diff] [blame] | 26 | class CXFA_FFPageView final : public cppgc::GarbageCollected<CXFA_FFPageView> { |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 27 | public: |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 28 | CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; |
Tom Sepez | 0fb55ab | 2019-04-22 22:02:35 +0000 | [diff] [blame] | 29 | ~CXFA_FFPageView(); |
| 30 | |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 31 | void Trace(cppgc::Visitor* visitor) const; |
| 32 | |
| 33 | CXFA_ViewLayoutItem* GetLayoutItem() const { return m_pLayoutItem; } |
Tom Sepez | 0fb55ab | 2019-04-22 22:02:35 +0000 | [diff] [blame] | 34 | void SetLayoutItem(CXFA_ViewLayoutItem* pItem) { m_pLayoutItem = pItem; } |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 35 | |
thestig | 9f3dbbc | 2016-04-13 13:18:21 -0700 | [diff] [blame] | 36 | CXFA_FFDocView* GetDocView() const; |
Dan Sinclair | 1b08df1 | 2017-02-09 09:17:20 -0500 | [diff] [blame] | 37 | CFX_RectF GetPageViewRect() const; |
Lei Zhang | 7d865b6 | 2018-04-10 19:29:25 +0000 | [diff] [blame] | 38 | CFX_Matrix GetDisplayMatrix(const FX_RECT& rtDisp, int32_t iRotate) const; |
Tom Sepez | c256469 | 2020-01-09 23:34:16 +0000 | [diff] [blame] | 39 | |
Stefan Zager | 359cbde | 2023-03-07 17:10:23 +0000 | [diff] [blame] | 40 | // This always returns a non-null iterator from the gc heap. |
Tom Sepez | 3d4afc9 | 2021-06-09 01:03:59 +0000 | [diff] [blame] | 41 | CXFA_FFWidget::IteratorIface* CreateGCedTraverseWidgetIterator( |
Tom Sepez | 6f9e9f6 | 2021-08-11 17:01:53 +0000 | [diff] [blame] | 42 | Mask<XFA_WidgetStatus> dwWidgetFilter); |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 43 | |
Tom Sepez | cb79825 | 2018-09-17 18:25:32 +0000 | [diff] [blame] | 44 | private: |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 45 | CXFA_FFPageView(CXFA_FFDocView* pDocView, CXFA_Node* pPageArea); |
| 46 | |
| 47 | cppgc::Member<CXFA_Node> const m_pPageArea; |
| 48 | cppgc::Member<CXFA_FFDocView> const m_pDocView; |
| 49 | cppgc::Member<CXFA_ViewLayoutItem> m_pLayoutItem; |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 50 | }; |
thestig | 9f3dbbc | 2016-04-13 13:18:21 -0700 | [diff] [blame] | 51 | |
Stefan Zager | 359cbde | 2023-03-07 17:10:23 +0000 | [diff] [blame] | 52 | class CXFA_FFPageWidgetIterator final : public CXFA_FFWidget::IteratorIface { |
| 53 | CPPGC_STACK_ALLOCATED(); |
| 54 | |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 55 | public: |
Stefan Zager | 359cbde | 2023-03-07 17:10:23 +0000 | [diff] [blame] | 56 | CXFA_FFPageWidgetIterator(CXFA_FFPageView* pPageView, |
| 57 | Mask<XFA_WidgetStatus> dwFilter); |
tsepez | cc4d6d8 | 2016-05-16 13:21:03 -0700 | [diff] [blame] | 58 | ~CXFA_FFPageWidgetIterator() override; |
dsinclair | df4bc59 | 2016-03-31 20:34:43 -0700 | [diff] [blame] | 59 | |
Tom Sepez | 3d4afc9 | 2021-06-09 01:03:59 +0000 | [diff] [blame] | 60 | // CXFA_FFWidget::IteratorIface: |
dsinclair | df4bc59 | 2016-03-31 20:34:43 -0700 | [diff] [blame] | 61 | CXFA_FFWidget* MoveToFirst() override; |
| 62 | CXFA_FFWidget* MoveToLast() override; |
| 63 | CXFA_FFWidget* MoveToNext() override; |
| 64 | CXFA_FFWidget* MoveToPrevious() override; |
| 65 | CXFA_FFWidget* GetCurrentWidget() override; |
tsepez | d19e912 | 2016-11-02 15:43:18 -0700 | [diff] [blame] | 66 | bool SetCurrentWidget(CXFA_FFWidget* hWidget) override; |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 67 | |
Tom Sepez | cb79825 | 2018-09-17 18:25:32 +0000 | [diff] [blame] | 68 | private: |
Lei Zhang | ccb8ca6 | 2020-06-02 00:28:38 +0000 | [diff] [blame] | 69 | CXFA_LayoutItemIterator m_sIterator; |
Tom Sepez | 6f9e9f6 | 2021-08-11 17:01:53 +0000 | [diff] [blame] | 70 | const Mask<XFA_WidgetStatus> m_dwFilter; |
Lei Zhang | 78b7e03 | 2020-03-11 17:46:53 +0000 | [diff] [blame] | 71 | const bool m_bIgnoreRelevant; |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 72 | }; |
weili | 47bcd4c | 2016-06-16 08:00:06 -0700 | [diff] [blame] | 73 | |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 74 | class CXFA_FFTabOrderPageWidgetIterator final |
Tom Sepez | 1249e09 | 2021-04-07 20:02:16 +0000 | [diff] [blame] | 75 | : public cppgc::GarbageCollected<CXFA_FFTabOrderPageWidgetIterator>, |
Tom Sepez | 3d4afc9 | 2021-06-09 01:03:59 +0000 | [diff] [blame] | 76 | public CXFA_FFWidget::IteratorIface { |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 77 | public: |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 78 | CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; |
tsepez | cc4d6d8 | 2016-05-16 13:21:03 -0700 | [diff] [blame] | 79 | ~CXFA_FFTabOrderPageWidgetIterator() override; |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 80 | |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 81 | void Trace(cppgc::Visitor* visitor) const; |
| 82 | |
Tom Sepez | 3d4afc9 | 2021-06-09 01:03:59 +0000 | [diff] [blame] | 83 | // CXFA_FFWidget::IteratorIface: |
dsinclair | df4bc59 | 2016-03-31 20:34:43 -0700 | [diff] [blame] | 84 | CXFA_FFWidget* MoveToFirst() override; |
| 85 | CXFA_FFWidget* MoveToLast() override; |
| 86 | CXFA_FFWidget* MoveToNext() override; |
| 87 | CXFA_FFWidget* MoveToPrevious() override; |
| 88 | CXFA_FFWidget* GetCurrentWidget() override; |
tsepez | d19e912 | 2016-11-02 15:43:18 -0700 | [diff] [blame] | 89 | bool SetCurrentWidget(CXFA_FFWidget* hWidget) override; |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 90 | |
Tom Sepez | cb79825 | 2018-09-17 18:25:32 +0000 | [diff] [blame] | 91 | private: |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 92 | CXFA_FFTabOrderPageWidgetIterator(CXFA_FFPageView* pPageView, |
Tom Sepez | 6f9e9f6 | 2021-08-11 17:01:53 +0000 | [diff] [blame] | 93 | Mask<XFA_WidgetStatus> dwFilter); |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 94 | |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 95 | CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget); |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 96 | CXFA_FFWidget* FindWidgetByName(const WideString& wsWidgetName, |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 97 | CXFA_FFWidget* pRefWidget); |
| 98 | void CreateTabOrderWidgetArray(); |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 99 | std::vector<CXFA_ContentLayoutItem*> CreateSpaceOrderLayoutItems(); |
dsinclair | df4bc59 | 2016-03-31 20:34:43 -0700 | [diff] [blame] | 100 | |
Tom Sepez | 017cbc6 | 2020-08-18 23:25:17 +0000 | [diff] [blame] | 101 | cppgc::Member<CXFA_ViewLayoutItem> const m_pPageViewLayout; |
| 102 | std::vector<cppgc::Member<CXFA_ContentLayoutItem>> m_TabOrderWidgetArray; |
Tom Sepez | 6f9e9f6 | 2021-08-11 17:01:53 +0000 | [diff] [blame] | 103 | const Mask<XFA_WidgetStatus> m_dwFilter; |
Lei Zhang | 78b7e03 | 2020-03-11 17:46:53 +0000 | [diff] [blame] | 104 | int32_t m_iCurWidget = -1; |
| 105 | const bool m_bIgnoreRelevant; |
Dan Sinclair | 1770c02 | 2016-03-14 14:14:16 -0400 | [diff] [blame] | 106 | }; |
| 107 | |
Dan Sinclair | 80c4878 | 2017-03-23 12:11:20 -0400 | [diff] [blame] | 108 | #endif // XFA_FXFA_CXFA_FFPAGEVIEW_H_ |