Logo ROOT   6.18/05
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
30class TGCocoa;
31
32@protocol X11Window;
33
34@class QuartzWindow;
35@class NSEvent;
36@class NSView;
37
38namespace ROOT {
39namespace MacOSX {
40namespace X11 {//X11 emulation for Cocoa.
41
47};
48
49typedef std::deque<Event_t> EventQueue_t;
50
52 friend class ::TGCocoa;
53public:
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
85private:
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
114
115
116 NSView<X11Window> *fButtonGrabView;
117 NSView<X11Window> *fKeyGrabView;
118 NSView<X11Window> *fFocusView;
120
122};
123
124void MapUnicharToKeySym(unichar key, char *buf, Int_t len, UInt_t &rootKeySym);
126NSUInteger GetCocoaKeyModifiersFromROOTKeyModifiers(UInt_t rootKeyModifiers);
127
128UInt_t GetModifiers();//Mouse buttons + keyboard modifiers.
129
130}//X11
131}//MacOSX
132}//ROOT
133
134#endif
EMouseButton
Definition: GuiTypes.h:213
Handle_t Window_t
Definition: GuiTypes.h:28
int Int_t
Definition: RtypesCore.h:41
unsigned int UInt_t
Definition: RtypesCore.h:42
void CheckUnmappedView(Window_t winID)
Definition: X11Events.mm:1474
void FindKeyGrabView(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1843
NSView< X11Window > * fButtonGrabView
Definition: X11Events.h:116
void GenerateFocusChangeEvent(NSView< X11Window > *eventView)
Definition: X11Events.mm:1321
void FindButtonGrab(NSView< X11Window > *fromView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1795
void GenerateExposeEvent(NSView< X11Window > *view, const NSRect &exposedRect)
Definition: X11Events.mm:1174
NSView< X11Window > * fFocusView
Definition: X11Events.h:118
void GenerateKeyEventActiveGrab(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1722
void GenerateConfigureNotifyEvent(NSView< X11Window > *view, const NSRect &newFrame)
Definition: X11Events.mm:1149
void GenerateCrossingEvent(NSEvent *theEvent)
Definition: X11Events.mm:1192
void GenerateKeyEventForView(NSView< X11Window > *view, NSEvent *theEvent)
Definition: X11Events.mm:1772
void GenerateButtonPressEventActiveGrab(NSView< X11Window > *view, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1609
void GeneratePointerMotionEventNoGrab(NSEvent *theEvent)
Definition: X11Events.mm:1518
void GenerateCrossingEventActiveGrab(NSEvent *theEvent)
Definition: X11Events.mm:1213
NSView< X11Window > * fKeyGrabView
Definition: X11Events.h:117
void GenerateButtonReleaseEventActiveGrab(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1655
void GenerateButtonReleaseEventNoGrab(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1643
void GenerateKeyReleaseEvent(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1301
void SetPointerGrab(NSView< X11Window > *grabView, unsigned eventMask, bool ownerEvents)
Definition: X11Events.mm:1339
void GenerateKeyPressEvent(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1285
void GenerateKeyPressEventNoGrab(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1699
void GenerateKeyReleaseEventNoGrab(NSView< X11Window > *eventView, NSEvent *theEvent)
Definition: X11Events.mm:1755
void GenerateCrossingEventNoGrab(NSEvent *theEvent)
Definition: X11Events.mm:1202
void GeneratePointerMotionEventActiveGrab(NSEvent *theEvent)
Definition: X11Events.mm:1537
void GenerateButtonPressEvent(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1257
void GeneratePointerMotionEvent(NSEvent *theEvent)
Definition: X11Events.mm:1244
void GenerateDestroyNotify(unsigned winID)
NSView< X11Window > * fViewUnderPointer
Definition: X11Events.h:109
void SetInputFocus(NSView< X11Window > *focusView)
Definition: X11Events.mm:1431
void GenerateButtonPressEventNoGrab(NSView< X11Window > *view, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1575
void GenerateButtonReleaseEvent(NSView< X11Window > *eventView, NSEvent *theEvent, EMouseButton btn)
Definition: X11Events.mm:1270
This class implements TVirtualX interface for MacOS X, using Cocoa and Quartz 2D.
Definition: TGCocoa.h:58
Int_t MapKeySymToKeyCode(Int_t keySym)
Definition: X11Events.mm:178
std::deque< Event_t > EventQueue_t
Definition: X11Events.h:49
void MapUnicharToKeySym(unichar key, char *buf, Int_t len, UInt_t &rootKeySym)
Definition: X11Events.mm:98
UInt_t GetModifiers()
Definition: X11Events.mm:300
NSUInteger GetCocoaKeyModifiersFromROOTKeyModifiers(UInt_t rootKeyModifiers)
Definition: X11Events.mm:261
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21