xref: /aosp_15_r20/external/pdfium/xfa/fxfa/layout/cxfa_layoutitem.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_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)52 inline CXFA_ViewLayoutItem* ToViewLayoutItem(CXFA_LayoutItem* item) {
53   return item ? item->AsViewLayoutItem() : nullptr;
54 }
55 
ToContentLayoutItem(CXFA_LayoutItem * item)56 inline 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