| // Copyright 2016 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #ifndef XFA_FXFA_LAYOUT_CXFA_LAYOUTITEM_H_ |
| #define XFA_FXFA_LAYOUT_CXFA_LAYOUTITEM_H_ |
| |
| #include "fxjs/gc/gced_tree_node.h" |
| #include "fxjs/gc/heap.h" |
| #include "v8/include/cppgc/member.h" |
| #include "v8/include/cppgc/prefinalizer.h" |
| #include "v8/include/cppgc/visitor.h" |
| |
| class CXFA_ContentLayoutItem; |
| class CXFA_Node; |
| class CXFA_ViewLayoutItem; |
| |
| class CXFA_LayoutItem : public GCedTreeNode<CXFA_LayoutItem> { |
| CPPGC_USING_PRE_FINALIZER(CXFA_LayoutItem, PreFinalize); |
| |
| public: |
| CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; |
| ~CXFA_LayoutItem() override; |
| |
| void PreFinalize(); |
| |
| // GCedTreeNode: |
| void Trace(cppgc::Visitor* visitor) const override; |
| |
| bool IsViewLayoutItem() const { return m_ItemType == kViewItem; } |
| bool IsContentLayoutItem() const { return m_ItemType == kContentItem; } |
| CXFA_ViewLayoutItem* AsViewLayoutItem(); |
| const CXFA_ViewLayoutItem* AsViewLayoutItem() const; |
| CXFA_ContentLayoutItem* AsContentLayoutItem(); |
| const CXFA_ContentLayoutItem* AsContentLayoutItem() const; |
| |
| const CXFA_ViewLayoutItem* GetPage() const; |
| CXFA_Node* GetFormNode() const { return m_pFormNode; } |
| void SetFormNode(CXFA_Node* pNode); |
| |
| protected: |
| enum ItemType { kViewItem, kContentItem }; |
| CXFA_LayoutItem(CXFA_Node* pNode, ItemType type); |
| |
| private: |
| const ItemType m_ItemType; |
| cppgc::Member<CXFA_Node> m_pFormNode; |
| }; |
| |
| inline CXFA_ViewLayoutItem* ToViewLayoutItem(CXFA_LayoutItem* item) { |
| return item ? item->AsViewLayoutItem() : nullptr; |
| } |
| |
| inline CXFA_ContentLayoutItem* ToContentLayoutItem(CXFA_LayoutItem* item) { |
| return item ? item->AsContentLayoutItem() : nullptr; |
| } |
| |
| void XFA_ReleaseLayoutItem(CXFA_LayoutItem* pLayoutItem); |
| |
| #endif // XFA_FXFA_LAYOUT_CXFA_LAYOUTITEM_H_ |