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