xref: /aosp_15_r20/external/pdfium/xfa/fxfa/layout/cxfa_layoutprocessor.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2016 The PDFium Authors
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 
7 #ifndef XFA_FXFA_LAYOUT_CXFA_LAYOUTPROCESSOR_H_
8 #define XFA_FXFA_LAYOUT_CXFA_LAYOUTPROCESSOR_H_
9 
10 #include <stdint.h>
11 
12 #include "core/fxcrt/unowned_ptr.h"
13 #include "fxjs/gc/heap.h"
14 #include "v8/include/cppgc/garbage-collected.h"
15 #include "v8/include/cppgc/member.h"
16 #include "v8/include/cppgc/visitor.h"
17 #include "xfa/fxfa/parser/cxfa_document.h"
18 
19 class CXFA_ContentLayoutProcessor;
20 class CXFA_LayoutItem;
21 class CXFA_Node;
22 class CXFA_ViewLayoutItem;
23 class CXFA_ViewLayoutProcessor;
24 
25 namespace cppgc {
26 class Heap;
27 }  // namespace cppgc
28 
29 class CXFA_LayoutProcessor final : public CXFA_Document::LayoutProcessorIface {
30  public:
31   static CXFA_LayoutProcessor* FromDocument(const CXFA_Document* pXFADoc);
32 
33   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
34   ~CXFA_LayoutProcessor() override;
35 
36   void Trace(cppgc::Visitor* visitor) const override;
37 
38   // CXFA_Document::LayoutProcessorIface:
39   void SetForceRelayout() override;
40   void SetHasChangedContainer() override;
41 
42   int32_t StartLayout();
43   int32_t DoLayout();
44   bool IncrementLayout();
45   int32_t CountPages() const;
46   CXFA_ViewLayoutItem* GetPage(int32_t index) const;
47   CXFA_LayoutItem* GetLayoutItem(CXFA_Node* pFormItem);
GetRootContentLayoutProcessor()48   CXFA_ContentLayoutProcessor* GetRootContentLayoutProcessor() const {
49     return m_pContentLayoutProcessor;
50   }
GetLayoutPageMgr()51   CXFA_ViewLayoutProcessor* GetLayoutPageMgr() const {
52     return m_pViewLayoutProcessor;
53   }
54 
55  private:
56   explicit CXFA_LayoutProcessor(cppgc::Heap* pHeap);
57 
GetHeap()58   cppgc::Heap* GetHeap() { return m_pHeap; }
59   bool NeedLayout() const;
60   int32_t RestartLayout();
61 
62   UnownedPtr<cppgc::Heap> const m_pHeap;
63   cppgc::Member<CXFA_ViewLayoutProcessor> m_pViewLayoutProcessor;
64   cppgc::Member<CXFA_ContentLayoutProcessor> m_pContentLayoutProcessor;
65   uint32_t m_nProgressCounter = 0;
66   bool m_bHasChangedContainers = false;
67   bool m_bNeedLayout = true;
68 };
69 
70 #endif  // XFA_FXFA_LAYOUT_CXFA_LAYOUTPROCESSOR_H_
71