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_LAYOUTITEM_H_ 8 #define XFA_FXFA_LAYOUT_CXFA_LAYOUTITEM_H_ 9 10 #include "fxjs/gc/gced_tree_node.h" 11 #include "fxjs/gc/heap.h" 12 #include "v8/include/cppgc/member.h" 13 #include "v8/include/cppgc/prefinalizer.h" 14 #include "v8/include/cppgc/visitor.h" 15 16 class CXFA_ContentLayoutItem; 17 class CXFA_Node; 18 class CXFA_ViewLayoutItem; 19 20 class CXFA_LayoutItem : public GCedTreeNode<CXFA_LayoutItem> { 21 CPPGC_USING_PRE_FINALIZER(CXFA_LayoutItem, PreFinalize); 22 23 public: 24 CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 25 ~CXFA_LayoutItem() override; 26 27 void PreFinalize(); 28 29 // GCedTreeNode: 30 void Trace(cppgc::Visitor* visitor) const override; 31 IsViewLayoutItem()32 bool IsViewLayoutItem() const { return m_ItemType == kViewItem; } IsContentLayoutItem()33 bool IsContentLayoutItem() const { return m_ItemType == kContentItem; } 34 CXFA_ViewLayoutItem* AsViewLayoutItem(); 35 const CXFA_ViewLayoutItem* AsViewLayoutItem() const; 36 CXFA_ContentLayoutItem* AsContentLayoutItem(); 37 const CXFA_ContentLayoutItem* AsContentLayoutItem() const; 38 39 const CXFA_ViewLayoutItem* GetPage() const; GetFormNode()40 CXFA_Node* GetFormNode() const { return m_pFormNode; } 41 void SetFormNode(CXFA_Node* pNode); 42 43 protected: 44 enum ItemType { kViewItem, kContentItem }; 45 CXFA_LayoutItem(CXFA_Node* pNode, ItemType type); 46 47 private: 48 const ItemType m_ItemType; 49 cppgc::Member<CXFA_Node> m_pFormNode; 50 }; 51 ToViewLayoutItem(CXFA_LayoutItem * item)52inline CXFA_ViewLayoutItem* ToViewLayoutItem(CXFA_LayoutItem* item) { 53 return item ? item->AsViewLayoutItem() : nullptr; 54 } 55 ToContentLayoutItem(CXFA_LayoutItem * item)56inline CXFA_ContentLayoutItem* ToContentLayoutItem(CXFA_LayoutItem* item) { 57 return item ? item->AsContentLayoutItem() : nullptr; 58 } 59 60 void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem); 61 62 #endif // XFA_FXFA_LAYOUT_CXFA_LAYOUTITEM_H_ 63