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