xref: /aosp_15_r20/external/pdfium/xfa/fwl/cfwl_widgetmgr.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #ifndef XFA_FWL_CFWL_WIDGETMGR_H_
8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FWL_CFWL_WIDGETMGR_H_
9*3ac0a46fSAndroid Build Coastguard Worker 
10*3ac0a46fSAndroid Build Coastguard Worker #include <map>
11*3ac0a46fSAndroid Build Coastguard Worker 
12*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_coordinates.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/gc/gced_tree_node.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/gc/heap.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/garbage-collected.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/member.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/visitor.h"
18*3ac0a46fSAndroid Build Coastguard Worker 
19*3ac0a46fSAndroid Build Coastguard Worker class CFGAS_GEGraphics;
20*3ac0a46fSAndroid Build Coastguard Worker class CFWL_App;
21*3ac0a46fSAndroid Build Coastguard Worker class CFWL_Message;
22*3ac0a46fSAndroid Build Coastguard Worker class CFWL_Widget;
23*3ac0a46fSAndroid Build Coastguard Worker 
24*3ac0a46fSAndroid Build Coastguard Worker class CFWL_WidgetMgr final : public cppgc::GarbageCollected<CFWL_WidgetMgr> {
25*3ac0a46fSAndroid Build Coastguard Worker  public:
26*3ac0a46fSAndroid Build Coastguard Worker   class AdapterIface : public cppgc::GarbageCollectedMixin {
27*3ac0a46fSAndroid Build Coastguard Worker    public:
28*3ac0a46fSAndroid Build Coastguard Worker     virtual ~AdapterIface() = default;
29*3ac0a46fSAndroid Build Coastguard Worker     virtual void RepaintWidget(CFWL_Widget* pWidget) = 0;
30*3ac0a46fSAndroid Build Coastguard Worker     virtual bool GetPopupPos(CFWL_Widget* pWidget,
31*3ac0a46fSAndroid Build Coastguard Worker                              float fMinHeight,
32*3ac0a46fSAndroid Build Coastguard Worker                              float fMaxHeight,
33*3ac0a46fSAndroid Build Coastguard Worker                              const CFX_RectF& rtAnchor,
34*3ac0a46fSAndroid Build Coastguard Worker                              CFX_RectF* pPopupRect) = 0;
35*3ac0a46fSAndroid Build Coastguard Worker   };
36*3ac0a46fSAndroid Build Coastguard Worker 
37*3ac0a46fSAndroid Build Coastguard Worker   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
38*3ac0a46fSAndroid Build Coastguard Worker   ~CFWL_WidgetMgr();
39*3ac0a46fSAndroid Build Coastguard Worker 
40*3ac0a46fSAndroid Build Coastguard Worker   void Trace(cppgc::Visitor* visitor) const;
41*3ac0a46fSAndroid Build Coastguard Worker 
42*3ac0a46fSAndroid Build Coastguard Worker   void OnProcessMessageToForm(CFWL_Message* pMessage);
43*3ac0a46fSAndroid Build Coastguard Worker   void OnDrawWidget(CFWL_Widget* pWidget,
44*3ac0a46fSAndroid Build Coastguard Worker                     CFGAS_GEGraphics* pGraphics,
45*3ac0a46fSAndroid Build Coastguard Worker                     const CFX_Matrix& matrix);
46*3ac0a46fSAndroid Build Coastguard Worker 
47*3ac0a46fSAndroid Build Coastguard Worker   CFWL_Widget* GetParentWidget(const CFWL_Widget* pWidget) const;
48*3ac0a46fSAndroid Build Coastguard Worker   CFWL_Widget* GetNextSiblingWidget(CFWL_Widget* pWidget) const;
49*3ac0a46fSAndroid Build Coastguard Worker   CFWL_Widget* GetFirstChildWidget(CFWL_Widget* pWidget) const;
50*3ac0a46fSAndroid Build Coastguard Worker 
51*3ac0a46fSAndroid Build Coastguard Worker   void RepaintWidget(CFWL_Widget* pWidget, const CFX_RectF& pRect);
52*3ac0a46fSAndroid Build Coastguard Worker 
53*3ac0a46fSAndroid Build Coastguard Worker   void InsertWidget(CFWL_Widget* pParent, CFWL_Widget* pChild);
54*3ac0a46fSAndroid Build Coastguard Worker   void RemoveWidget(CFWL_Widget* pWidget);
55*3ac0a46fSAndroid Build Coastguard Worker 
56*3ac0a46fSAndroid Build Coastguard Worker   CFWL_Widget* GetWidgetAtPoint(CFWL_Widget* pParent,
57*3ac0a46fSAndroid Build Coastguard Worker                                 const CFX_PointF& point) const;
58*3ac0a46fSAndroid Build Coastguard Worker 
59*3ac0a46fSAndroid Build Coastguard Worker   CFWL_Widget* GetDefaultButton(CFWL_Widget* pParent) const;
60*3ac0a46fSAndroid Build Coastguard Worker   void GetAdapterPopupPos(CFWL_Widget* pWidget,
61*3ac0a46fSAndroid Build Coastguard Worker                           float fMinHeight,
62*3ac0a46fSAndroid Build Coastguard Worker                           float fMaxHeight,
63*3ac0a46fSAndroid Build Coastguard Worker                           const CFX_RectF& rtAnchor,
64*3ac0a46fSAndroid Build Coastguard Worker                           CFX_RectF* pPopupRect) const;
65*3ac0a46fSAndroid Build Coastguard Worker 
66*3ac0a46fSAndroid Build Coastguard Worker  private:
67*3ac0a46fSAndroid Build Coastguard Worker   class Item final : public GCedTreeNode<Item> {
68*3ac0a46fSAndroid Build Coastguard Worker    public:
69*3ac0a46fSAndroid Build Coastguard Worker     CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
70*3ac0a46fSAndroid Build Coastguard Worker     ~Item() final;
71*3ac0a46fSAndroid Build Coastguard Worker 
72*3ac0a46fSAndroid Build Coastguard Worker     // GcedTreeNode:
73*3ac0a46fSAndroid Build Coastguard Worker     void Trace(cppgc::Visitor* visitor) const override;
74*3ac0a46fSAndroid Build Coastguard Worker 
75*3ac0a46fSAndroid Build Coastguard Worker     cppgc::Member<CFWL_Widget> const pWidget;
76*3ac0a46fSAndroid Build Coastguard Worker 
77*3ac0a46fSAndroid Build Coastguard Worker    private:
78*3ac0a46fSAndroid Build Coastguard Worker     explicit Item(CFWL_Widget* widget);
79*3ac0a46fSAndroid Build Coastguard Worker   };
80*3ac0a46fSAndroid Build Coastguard Worker 
81*3ac0a46fSAndroid Build Coastguard Worker   CFWL_WidgetMgr(AdapterIface* pAdapter, CFWL_App* pApp);
82*3ac0a46fSAndroid Build Coastguard Worker 
83*3ac0a46fSAndroid Build Coastguard Worker   CFWL_Widget* GetPriorSiblingWidget(CFWL_Widget* pWidget) const;
84*3ac0a46fSAndroid Build Coastguard Worker   CFWL_Widget* GetLastChildWidget(CFWL_Widget* pWidget) const;
85*3ac0a46fSAndroid Build Coastguard Worker 
86*3ac0a46fSAndroid Build Coastguard Worker   Item* GetWidgetMgrRootItem() const;
87*3ac0a46fSAndroid Build Coastguard Worker   Item* GetWidgetMgrItem(const CFWL_Widget* pWidget) const;
88*3ac0a46fSAndroid Build Coastguard Worker   Item* CreateWidgetMgrItem(CFWL_Widget* pWidget);
89*3ac0a46fSAndroid Build Coastguard Worker 
90*3ac0a46fSAndroid Build Coastguard Worker   void DrawChildren(CFWL_Widget* pParent,
91*3ac0a46fSAndroid Build Coastguard Worker                     const CFX_RectF& rtClip,
92*3ac0a46fSAndroid Build Coastguard Worker                     CFGAS_GEGraphics* pGraphics,
93*3ac0a46fSAndroid Build Coastguard Worker                     const CFX_Matrix& mtMatrix);
94*3ac0a46fSAndroid Build Coastguard Worker 
95*3ac0a46fSAndroid Build Coastguard Worker   cppgc::Member<AdapterIface> const m_pAdapter;
96*3ac0a46fSAndroid Build Coastguard Worker   cppgc::Member<CFWL_App> const m_pApp;
97*3ac0a46fSAndroid Build Coastguard Worker   std::map<cppgc::Member<const CFWL_Widget>, cppgc::Member<Item>>
98*3ac0a46fSAndroid Build Coastguard Worker       m_mapWidgetItem;
99*3ac0a46fSAndroid Build Coastguard Worker };
100*3ac0a46fSAndroid Build Coastguard Worker 
101*3ac0a46fSAndroid Build Coastguard Worker #endif  // XFA_FWL_CFWL_WIDGETMGR_H_
102