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_NOTEDRIVER_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define XFA_FWL_CFWL_NOTEDRIVER_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <map> 11*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 12*3ac0a46fSAndroid Build Coastguard Worker #include <set> 13*3ac0a46fSAndroid Build Coastguard Worker 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 #include "xfa/fgas/graphics/cfgas_gegraphics.h" 19*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_widget.h" 20*3ac0a46fSAndroid Build Coastguard Worker 21*3ac0a46fSAndroid Build Coastguard Worker class CFWL_Event; 22*3ac0a46fSAndroid Build Coastguard Worker 23*3ac0a46fSAndroid Build Coastguard Worker class CFWL_NoteDriver final : public cppgc::GarbageCollected<CFWL_NoteDriver> { 24*3ac0a46fSAndroid Build Coastguard Worker public: 25*3ac0a46fSAndroid Build Coastguard Worker CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 26*3ac0a46fSAndroid Build Coastguard Worker ~CFWL_NoteDriver(); 27*3ac0a46fSAndroid Build Coastguard Worker 28*3ac0a46fSAndroid Build Coastguard Worker void Trace(cppgc::Visitor* visitor) const; 29*3ac0a46fSAndroid Build Coastguard Worker 30*3ac0a46fSAndroid Build Coastguard Worker void SendEvent(CFWL_Event* pNote); 31*3ac0a46fSAndroid Build Coastguard Worker void ProcessMessage(CFWL_Message* pMessage); 32*3ac0a46fSAndroid Build Coastguard Worker void RegisterEventTarget(CFWL_Widget* pListener, CFWL_Widget* pEventSource); 33*3ac0a46fSAndroid Build Coastguard Worker void UnregisterEventTarget(CFWL_Widget* pListener); 34*3ac0a46fSAndroid Build Coastguard Worker void NotifyTargetHide(CFWL_Widget* pNoteTarget); 35*3ac0a46fSAndroid Build Coastguard Worker void NotifyTargetDestroy(CFWL_Widget* pNoteTarget); SetGrab(CFWL_Widget * pGrab)36*3ac0a46fSAndroid Build Coastguard Worker void SetGrab(CFWL_Widget* pGrab) { m_pGrab = pGrab; } 37*3ac0a46fSAndroid Build Coastguard Worker 38*3ac0a46fSAndroid Build Coastguard Worker private: 39*3ac0a46fSAndroid Build Coastguard Worker class Target : public cppgc::GarbageCollected<Target> { 40*3ac0a46fSAndroid Build Coastguard Worker public: 41*3ac0a46fSAndroid Build Coastguard Worker explicit Target(CFWL_Widget* pListener); 42*3ac0a46fSAndroid Build Coastguard Worker ~Target(); 43*3ac0a46fSAndroid Build Coastguard Worker 44*3ac0a46fSAndroid Build Coastguard Worker void Trace(cppgc::Visitor* visitor) const; 45*3ac0a46fSAndroid Build Coastguard Worker void SetEventSource(CFWL_Widget* pSource); 46*3ac0a46fSAndroid Build Coastguard Worker bool ProcessEvent(CFWL_Event* pEvent); IsValid()47*3ac0a46fSAndroid Build Coastguard Worker bool IsValid() const { return m_bValid; } Invalidate()48*3ac0a46fSAndroid Build Coastguard Worker void Invalidate() { m_bValid = false; } 49*3ac0a46fSAndroid Build Coastguard Worker 50*3ac0a46fSAndroid Build Coastguard Worker private: 51*3ac0a46fSAndroid Build Coastguard Worker bool m_bValid = true; 52*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CFWL_Widget> const m_pListener; 53*3ac0a46fSAndroid Build Coastguard Worker std::set<cppgc::Member<CFWL_Widget>> m_widgets; 54*3ac0a46fSAndroid Build Coastguard Worker }; 55*3ac0a46fSAndroid Build Coastguard Worker 56*3ac0a46fSAndroid Build Coastguard Worker explicit CFWL_NoteDriver(CFWL_App* pApp); 57*3ac0a46fSAndroid Build Coastguard Worker 58*3ac0a46fSAndroid Build Coastguard Worker bool DispatchMessage(CFWL_Message* pMessage, CFWL_Widget* pMessageForm); 59*3ac0a46fSAndroid Build Coastguard Worker bool DoSetFocus(CFWL_Message* pMsg, CFWL_Widget* pMessageForm); 60*3ac0a46fSAndroid Build Coastguard Worker bool DoKillFocus(CFWL_Message* pMsg, CFWL_Widget* pMessageForm); 61*3ac0a46fSAndroid Build Coastguard Worker bool DoKey(CFWL_Message* pMsg, CFWL_Widget* pMessageForm); 62*3ac0a46fSAndroid Build Coastguard Worker bool DoMouse(CFWL_Message* pMsg, CFWL_Widget* pMessageForm); 63*3ac0a46fSAndroid Build Coastguard Worker bool DoWheel(CFWL_Message* pMsg, CFWL_Widget* pMessageForm); 64*3ac0a46fSAndroid Build Coastguard Worker bool DoMouseEx(CFWL_Message* pMsg, CFWL_Widget* pMessageForm); 65*3ac0a46fSAndroid Build Coastguard Worker void MouseSecondary(CFWL_Message* pMsg); 66*3ac0a46fSAndroid Build Coastguard Worker 67*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CFWL_App> m_pApp; 68*3ac0a46fSAndroid Build Coastguard Worker std::map<uint64_t, cppgc::Member<Target>> m_eventTargets; 69*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CFWL_Widget> m_pHover; 70*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CFWL_Widget> m_pFocus; 71*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CFWL_Widget> m_pGrab; 72*3ac0a46fSAndroid Build Coastguard Worker }; 73*3ac0a46fSAndroid Build Coastguard Worker 74*3ac0a46fSAndroid Build Coastguard Worker #endif // XFA_FWL_CFWL_NOTEDRIVER_H_ 75