Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
X11Events.h
Go to the documentation of this file.
1 // @(#)root/graf2d:$Id$
2 // Author: Timur Pocheptsov 16/02/2012
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2012, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_X11Events
13 #define ROOT_X11Events
14 
15 #include <deque>
16 
17 #include "GuiTypes.h"
18 
19 #include <Foundation/Foundation.h>
20 
21 //////////////////////////////////////////////////////////////////////////
22 // //
23 // EventTranslator class translates Cocoa events to 'ROOT's X11' events.//
24 // In 90% cases there is no direct mapping from Cocoa event to //
25 // X11 event: Cocoa events are more simple (from programmer's POV). //
26 // EventTranslator tries to emulate X11 behavior. //
27 // //
28 //////////////////////////////////////////////////////////////////////////
29 
30 class TGCocoa;
31 
32 @protocol X11Window;
33 
34 @class QuartzWindow;
35 @class NSEvent;
36 @class NSView;
37 
38 namespace ROOT {
39 namespace MacOSX {
40 namespace X11 {//X11 emulation for Cocoa.
41 
42 enum PointerGrab {
43  kPGNoGrab,
44  kPGImplicitGrab,
45  kPGActiveGrab,
46  kPGPassiveGrab
47 };
48 
49 typedef std::deque<Event_t> EventQueue_t;
50 
51 class EventTranslator {
52  friend class ::TGCocoa;
53 public:
54  EventTranslator();
55 
56  void GenerateConfigureNotifyEvent(NSView<X11Window> *view, const NSRect &newFrame);
57  void GenerateDestroyNotify(unsigned winID);
58  void GenerateExposeEvent(NSView<X11Window> *view, const NSRect &exposedRect);
59 
60  void GenerateCrossingEvent(NSEvent *theEvent);
61  void GeneratePointerMotionEvent(NSEvent *theEvent);
62 
63  void GenerateButtonPressEvent(NSView<X11Window> *eventView, NSEvent *theEvent, EMouseButton btn);
64  void GenerateButtonReleaseEvent(NSView<X11Window> *eventView, NSEvent *theEvent, EMouseButton btn);
65 
66  void GenerateKeyPressEvent(NSView<X11Window> *eventView, NSEvent *theEvent);
67  void GenerateKeyReleaseEvent(NSView<X11Window> *eventView, NSEvent *theEvent);
68 
69  void GenerateFocusChangeEvent(NSView<X11Window> *eventView);
70 
71  void SetPointerGrab(NSView<X11Window> *grabView, unsigned eventMask, bool ownerEvents);
72  void CancelPointerGrab();
73 
74  void SetInputFocus(NSView<X11Window> *focusView);
75  unsigned GetInputFocus()const;
76 
77  //Window winID was either deleted or unmapped.
78  //If it's a grab view or a parent of a grab view - cancel grab.
79  //If it's a "view under pointer" - reset view under pointer.
80  //If it's a focus view, cancel focus.
81  void CheckUnmappedView(Window_t winID);
82 
83  bool HasPointerGrab()const;
84 
85 private:
86 
87  //Used both by grab and non-grab case.
88  void GenerateCrossingEventNoGrab(NSEvent *theEvent);
89  void GenerateCrossingEventActiveGrab(NSEvent *theEvent);
90 
91  void GeneratePointerMotionEventNoGrab(NSEvent *theEvent);
92  void GeneratePointerMotionEventActiveGrab(NSEvent *theEvent);
93 
94  void GenerateButtonPressEventNoGrab(NSView<X11Window> *view, NSEvent *theEvent, EMouseButton btn);
95  void GenerateButtonPressEventActiveGrab(NSView<X11Window> *view, NSEvent *theEvent, EMouseButton btn);
96 
97  void GenerateButtonReleaseEventNoGrab(NSView<X11Window> *eventView, NSEvent *theEvent, EMouseButton btn);
98  void GenerateButtonReleaseEventActiveGrab(NSView<X11Window> *eventView, NSEvent *theEvent, EMouseButton btn);
99 
100  void GenerateKeyPressEventNoGrab(NSView<X11Window> *eventView, NSEvent *theEvent);
101  void GenerateKeyReleaseEventNoGrab(NSView<X11Window> *eventView, NSEvent *theEvent);
102 
103  void GenerateKeyEventActiveGrab(NSView<X11Window> *eventView, NSEvent *theEvent);//Both press/release events.
104  void GenerateKeyEventForView(NSView<X11Window> *view, NSEvent *theEvent);//Both press/release events.
105 
106  void FindButtonGrab(NSView<X11Window> *fromView, NSEvent *theEvent, EMouseButton btn);
107  void FindKeyGrabView(NSView<X11Window> *eventView, NSEvent *theEvent);
108 
109  NSView<X11Window> *fViewUnderPointer;
110 
111  PointerGrab fPointerGrabType;
112  unsigned fGrabEventMask;
113  bool fOwnerEvents;
114 
115 
116  NSView<X11Window> *fButtonGrabView;
117  NSView<X11Window> *fKeyGrabView;
118  NSView<X11Window> *fFocusView;
119  EMouseButton fImplicitGrabButton;
120 
121  EventQueue_t fEventQueue;
122 };
123 
124 void MapUnicharToKeySym(unichar key, char *buf, Int_t len, UInt_t &rootKeySym);
125 Int_t MapKeySymToKeyCode(Int_t keySym);
126 NSUInteger GetCocoaKeyModifiersFromROOTKeyModifiers(UInt_t rootKeyModifiers);
127 
128 UInt_t GetModifiers();//Mouse buttons + keyboard modifiers.
129 
130 }//X11
131 }//MacOSX
132 }//ROOT
133 
134 #endif