Logo ROOT   6.10/09
Reference Guide
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 
47 };
48 
49 typedef std::deque<Event_t> EventQueue_t;
50 
52  friend class ::TGCocoa;
53 public:
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 
112  unsigned fGrabEventMask;
114 
115 
116  NSView<X11Window> *fButtonGrabView;
117  NSView<X11Window> *fKeyGrabView;
118  NSView<X11Window> *fFocusView;
120 
121  EventQueue_t fEventQueue;
122 };
123 
124 void MapUnicharToKeySym(unichar key, char *buf, Int_t len, UInt_t &rootKeySym);
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
NSUInteger GetCocoaKeyModifiersFromROOTKeyModifiers(UInt_t rootKeyModifiers)
Definition: X11Events.mm:261
void GenerateConfigureNotifyEvent(NSView< X11Window > *view, const NSRect &newFrame)
Definition: X11Events.mm:1149
void GeneratePointerMotionEventActiveGrab(NSEvent *theEvent)
Definition: X11Events.mm:1539
UInt_t GetModifiers()
Definition: X11Events.mm:300
void GeneratePointerMotionEvent(NSEvent *theEvent)
Definition: X11Events.mm:1246
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21
Int_t MapKeySymToKeyCode(Int_t keySym)
Definition: X11Events.mm:178
void GenerateKeyReleaseEvent(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1303
void MapUnicharToKeySym(unichar key, char *buf, Int_t len, UInt_t &rootKeySym)
Definition: X11Events.mm:98
void GenerateButtonReleaseEventActiveGrab(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1657
std::deque< Event_t > EventQueue_t
Definition: X11Events.h:49
int Int_t
Definition: RtypesCore.h:41
void GenerateKeyPressEventNoGrab(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1701
void FindKeyGrabView(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1845
NSView< X11Window > * fButtonGrabView
Definition: X11Events.h:116
void GenerateButtonPressEvent(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1259
NSView< X11Window > * fFocusView
Definition: X11Events.h:118
void GenerateButtonReleaseEventNoGrab(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1645
void SetInputFocus(NSView< X11Window > *focusView)
Definition: X11Events.mm:1433
void FindButtonGrab(NSView< X11Window > *fromView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1797
EMouseButton
Definition: GuiTypes.h:213
void GenerateExposeEvent(NSView< X11Window > *view, const NSRect &exposedRect)
Definition: X11Events.mm:1176
void GenerateButtonPressEventActiveGrab(NSView< X11Window > *view, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1611
unsigned int UInt_t
Definition: RtypesCore.h:42
void GenerateDestroyNotify(unsigned winID)
void GenerateKeyEventActiveGrab(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1724
NSView< X11Window > * fKeyGrabView
Definition: X11Events.h:117
void GenerateButtonPressEventNoGrab(NSView< X11Window > *view, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1577
void GenerateCrossingEventActiveGrab(NSEvent *theEvent)
Definition: X11Events.mm:1215
NSView< X11Window > * fViewUnderPointer
Definition: X11Events.h:109
void GenerateCrossingEvent(NSEvent *theEvent)
Definition: X11Events.mm:1194
Handle_t Window_t
Definition: GuiTypes.h:28
void GenerateKeyReleaseEventNoGrab(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1757
This class implements TVirtualX interface for MacOS X, using Cocoa and Quartz 2D. ...
Definition: TGCocoa.h:58
void GeneratePointerMotionEventNoGrab(NSEvent *theEvent)
Definition: X11Events.mm:1520
void CheckUnmappedView(Window_t winID)
Definition: X11Events.mm:1476
void GenerateCrossingEventNoGrab(NSEvent *theEvent)
Definition: X11Events.mm:1204
void GenerateKeyPressEvent(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1287
void GenerateKeyEventForView(NSView< X11Window > *view, NSEvent *theEvent)
Definition: X11Events.mm:1774
void SetPointerGrab(NSView< X11Window > *grabView, unsigned eventMask, bool ownerEvents)
Definition: X11Events.mm:1341
void GenerateFocusChangeEvent(NSView< X11Window > *eventView)
Definition: X11Events.mm:1323
void GenerateButtonReleaseEvent(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1272