2d860835c46069fe0777478a25f24430dc228efa
[terminatorX.git] / src / tX_mouse.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2014  Alexander K├Ânig
4  
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9  
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14  
15     You should have received a copy of the GNU General Public License
16     along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  
18     File: tX_mouse.h
19  
20     Description: Header to tX_mouse.cc
21 */    
22
23 #ifndef _h_tx_mouse 
24 #define _h_tx_mouse
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 #include <tX_types.h>
31 #include <unistd.h>
32 #include <X11/Xlib.h>
33 #include <X11/extensions/XInput.h>
34 #include <X11/keysym.h>
35 #include <glib.h>
36 #include <gdk/gdk.h>
37 #include <gdk/gdkkeysyms.h>
38
39 /* Use old gdk keys if the new ones are not yet defined */
40
41 #ifndef GDK_KEY_Alt_L
42 #define GDK_KEY_Alt_L GDK_Alt_L
43 #endif
44 #ifndef GDK_KEY_Alt_R
45 #define GDK_KEY_Alt_R GDK_Alt_R
46 #endif
47 #ifndef GDK_KEY_BackSpace
48 #define GDK_KEY_BackSpace GDK_BackSpace
49 #endif
50 #ifndef GDK_KEY_Control_L
51 #define GDK_KEY_Control_L GDK_Control_L
52 #endif
53 #ifndef GDK_KEY_Control_R
54 #define GDK_KEY_Control_R GDK_Control_R
55 #endif
56 #ifndef GDK_KEY_Escape
57 #define GDK_KEY_Escape GDK_Escape
58 #endif
59 #ifndef GDK_KEY_f
60 #define GDK_KEY_f GDK_f
61 #endif
62 #ifndef GDK_KEY_F1
63 #define GDK_KEY_F1 GDK_F1
64 #endif
65 #ifndef GDK_KEY_F10
66 #define GDK_KEY_F10 GDK_F10
67 #endif
68 #ifndef GDK_KEY_F11
69 #define GDK_KEY_F11 GDK_F11
70 #endif
71 #ifndef GDK_KEY_F12
72 #define GDK_KEY_F12 GDK_F12
73 #endif
74 #ifndef GDK_KEY_F2
75 #define GDK_KEY_F2 GDK_F2
76 #endif
77 #ifndef GDK_KEY_F3
78 #define GDK_KEY_F3 GDK_F3
79 #endif
80 #ifndef GDK_KEY_F4
81 #define GDK_KEY_F4 GDK_F4
82 #endif
83 #ifndef GDK_KEY_F5
84 #define GDK_KEY_F5 GDK_F5
85 #endif
86 #ifndef GDK_KEY_F6
87 #define GDK_KEY_F6 GDK_F6
88 #endif
89 #ifndef GDK_KEY_F7
90 #define GDK_KEY_F7 GDK_F7
91 #endif
92 #ifndef GDK_KEY_F8
93 #define GDK_KEY_F8 GDK_F8
94 #endif
95 #ifndef GDK_KEY_F9
96 #define GDK_KEY_F9 GDK_F9
97 #endif
98 #ifndef GDK_KEY_m
99 #define GDK_KEY_m GDK_m
100 #endif
101 #ifndef GDK_KEY_Return
102 #define GDK_KEY_Return GDK_Return
103 #endif
104 #ifndef GDK_KEY_s
105 #define GDK_KEY_s GDK_s
106 #endif
107 #ifndef GDK_KEY_space
108 #define GDK_KEY_space GDK_space
109 #endif
110 #ifndef GDK_KEY_Tab
111 #define GDK_KEY_Tab GDK_Tab
112 #endif
113 #ifndef GDK_KEY_w
114 #define GDK_KEY_w GDK_w
115 #endif
116 #ifndef GDK_KEY_space
117 #define GDK_KEY_space GDK_space
118 #endif
119
120 class tx_mouse
121 {
122         XID OrgXPointer;
123         char OrgXPointerName[256];
124         XDevice *input_device;
125         XEvent xev;
126         long mask;
127         XMotionEvent *xmot;
128         XKeyEvent *xkey;
129         XButtonEvent *xbut;
130         bool warp_override;
131         GdkEventMask savedEventMask;
132
133         gboolean enable_auto_mnemonics;
134         guint last_button_press;
135         guint last_button_release;
136
137 #ifdef USE_DGA2 
138         XEvent xev_copy;
139         XDGAButtonEvent *xdgabut;
140         XDGAKeyEvent *xdgakey;
141         XDGAMotionEvent *xdgamot;
142 #endif  
143         
144         Time otime, ntime;
145         f_prec dtime;
146         Display *dpy;
147         KeySym key;
148         float warp;
149         
150         int grabbed;
151
152         public:
153         int set_xinput();
154         void reset_xinput();
155         bool is_grabbed() { return grabbed != 0; }
156                 
157         int grab();
158         int check_event();
159         void ungrab();
160         tx_mouse();
161         
162         void motion_notify(GtkWidget *widget, GdkEventMotion *eventMotion);
163         void button_press(GtkWidget *widget, GdkEventButton *eventButton);
164         void button_release(GtkWidget *widget, GdkEventButton *eventButton);
165         void key_press(GtkWidget *widget, GdkEventKey *eventKey);
166         void key_release(GtkWidget *widget, GdkEventKey *eventKey);
167
168         static gboolean motion_notify_wrap(GtkWidget *widget, GdkEventMotion *eventMotion, void *data);
169         static gboolean button_press_wrap(GtkWidget *widget, GdkEventButton *eventButton, void *data);
170         static gboolean button_release_wrap(GtkWidget *widget, GdkEventButton *eventButton, void *data);
171         static gboolean key_press_wrap(GtkWidget *widget, GdkEventKey *eventKey, void *data);
172         static gboolean key_release_wrap(GtkWidget *widget, GdkEventKey *eventKey, void *data);
173
174         private:
175         void set_x_pointer(char*);
176 };
177
178
179 #endif