Fix issue in fullscreen patch.
[blender.git] / source / blender / windowmanager / wm_event_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version. 
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Blender Foundation
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file blender/windowmanager/wm_event_types.h
24  *  \ingroup wm
25  */
26
27
28 /*
29  *  These define have its origin at sgi, where all device defines were written down in device.h.
30  *  Blender copied the conventions quite some, and expanded it with internal new defines (ton)
31  *
32  */ 
33
34
35 #ifndef __WM_EVENT_TYPES_H__
36 #define __WM_EVENT_TYPES_H__
37
38 /* customdata type */
39 enum {
40         EVT_DATA_GESTURE     = 1,
41         EVT_DATA_TIMER       = 2,
42         EVT_DATA_DRAGDROP    = 3,
43         EVT_DATA_NDOF_MOTION = 4,
44 };
45
46 /* tablet active, matches GHOST_TTabletMode */
47 enum {
48         EVT_TABLET_NONE   = 0,
49         EVT_TABLET_STYLUS = 1,
50         EVT_TABLET_ERASER = 2,
51 };
52
53 /* ********** wmEvent.type ********** */
54 enum {
55         /* non-event, for example disabled timer */
56         EVENT_NONE = 0x0000,
57
58         /* ********** Start of Input devices. ********** */
59
60         /* MOUSE : 0x000x, 0x001x */
61         LEFTMOUSE           = 0x0001,
62         MIDDLEMOUSE         = 0x0002,
63         RIGHTMOUSE          = 0x0003,
64         MOUSEMOVE           = 0x0004,
65         /* only use if you want user option switch possible */
66         ACTIONMOUSE         = 0x0005,
67         SELECTMOUSE         = 0x0006,
68         /* Extra mouse buttons */
69         BUTTON4MOUSE        = 0x0007,
70         BUTTON5MOUSE        = 0x0008,
71         /* More mouse buttons - can't use 9 and 10 here (wheel) */
72         BUTTON6MOUSE        = 0x0012,
73         BUTTON7MOUSE        = 0x0013,
74         /* Extra trackpad gestures */
75         MOUSEPAN            = 0x000e,
76         MOUSEZOOM           = 0x000f,
77         MOUSEROTATE         = 0x0010,
78         /* defaults from ghost */
79         WHEELUPMOUSE        = 0x000a,
80         WHEELDOWNMOUSE      = 0x000b,
81         /* mapped with userdef */
82         WHEELINMOUSE        = 0x000c,
83         WHEELOUTMOUSE       = 0x000d,
84         /* Successive MOUSEMOVE's are converted to this, so we can easily
85          * ignore all but the most recent MOUSEMOVE (for better performance),
86          * paint and drawing tools however will want to handle these. */
87         INBETWEEN_MOUSEMOVE = 0x0011,
88
89         /* *** Start of keyboard codes. *** */
90
91         /* standard keyboard.
92          * XXX from 0x0020 to 0x00ff, and 0x012c to 0x013f for function keys! */
93         AKEY            = 0x0061,  /* 'a' */
94         BKEY            = 0x0062,  /* 'b' */
95         CKEY            = 0x0063,  /* 'c' */
96         DKEY            = 0x0064,  /* 'd' */
97         EKEY            = 0x0065,  /* 'e' */
98         FKEY            = 0x0066,  /* 'f' */
99         GKEY            = 0x0067,  /* 'g' */
100 #ifndef WIN32
101         HKEY            = 0x0068,  /* 'h' */
102 #else
103 #define HKEY 0x0068
104 #endif
105         IKEY            = 0x0069,  /* 'i' */
106         JKEY            = 0x006a,  /* 'j' */
107         KKEY            = 0x006b,  /* 'k' */
108         LKEY            = 0x006c,  /* 'l' */
109         MKEY            = 0x006d,  /* 'm' */
110         NKEY            = 0x006e,  /* 'n' */
111         OKEY            = 0x006f,  /* 'o' */
112         PKEY            = 0x0070,  /* 'p' */
113         QKEY            = 0x0071,  /* 'q' */
114         RKEY            = 0x0072,  /* 'r' */
115         SKEY            = 0x0073,  /* 's' */
116         TKEY            = 0x0074,  /* 't' */
117         UKEY            = 0x0075,  /* 'u' */
118         VKEY            = 0x0076,  /* 'v' */
119         WKEY            = 0x0077,  /* 'w' */
120         XKEY            = 0x0078,  /* 'x' */
121         YKEY            = 0x0079,  /* 'y' */
122         ZKEY            = 0x007a,  /* 'z' */
123
124         ZEROKEY         = 0x0030,  /* '0' */
125         ONEKEY          = 0x0031,  /* '1' */
126         TWOKEY          = 0x0032,  /* '2' */
127         THREEKEY        = 0x0033,  /* '3' */
128         FOURKEY         = 0x0034,  /* '4' */
129         FIVEKEY         = 0x0035,  /* '5' */
130         SIXKEY          = 0x0036,  /* '6' */
131         SEVENKEY        = 0x0037,  /* '7' */
132         EIGHTKEY        = 0x0038,  /* '8' */
133         NINEKEY         = 0x0039,  /* '9' */
134
135         CAPSLOCKKEY     = 0x00d3,  /* 211 */
136
137         LEFTCTRLKEY     = 0x00d4,  /* 212 */
138         LEFTALTKEY      = 0x00d5,  /* 213 */
139         RIGHTALTKEY     = 0x00d6,  /* 214 */
140         RIGHTCTRLKEY    = 0x00d7,  /* 215 */
141         RIGHTSHIFTKEY   = 0x00d8,  /* 216 */
142         LEFTSHIFTKEY    = 0x00d9,  /* 217 */
143
144         ESCKEY          = 0x00da,  /* 218 */
145         TABKEY          = 0x00db,  /* 219 */
146         RETKEY          = 0x00dc,  /* 220 */
147         SPACEKEY        = 0x00dd,  /* 221 */
148         LINEFEEDKEY     = 0x00de,  /* 222 */
149         BACKSPACEKEY    = 0x00df,  /* 223 */
150         DELKEY          = 0x00e0,  /* 224 */
151         SEMICOLONKEY    = 0x00e1,  /* 225 */
152         PERIODKEY       = 0x00e2,  /* 226 */
153         COMMAKEY        = 0x00e3,  /* 227 */
154         QUOTEKEY        = 0x00e4,  /* 228 */
155         ACCENTGRAVEKEY  = 0x00e5,  /* 229 */
156         MINUSKEY        = 0x00e6,  /* 230 */
157         SLASHKEY        = 0x00e8,  /* 232 */
158         BACKSLASHKEY    = 0x00e9,  /* 233 */
159         EQUALKEY        = 0x00ea,  /* 234 */
160         LEFTBRACKETKEY  = 0x00eb,  /* 235 */
161         RIGHTBRACKETKEY = 0x00ec,  /* 236 */
162
163         LEFTARROWKEY    = 0x0089,  /* 137 */
164         DOWNARROWKEY    = 0x008a,  /* 138 */
165         RIGHTARROWKEY   = 0x008b,  /* 139 */
166         UPARROWKEY      = 0x008c,  /* 140 */
167
168         PAD0            = 0x0096,  /* 150 */
169         PAD1            = 0x0097,  /* 151 */
170         PAD2            = 0x0098,  /* 152 */
171         PAD3            = 0x0099,  /* 153 */
172         PAD4            = 0x009a,  /* 154 */
173         PAD5            = 0x009b,  /* 155 */
174         PAD6            = 0x009c,  /* 156 */
175         PAD7            = 0x009d,  /* 157 */
176         PAD8            = 0x009e,  /* 158 */
177         PAD9            = 0x009f,  /* 159 */
178
179         PADPERIOD       = 0x00c7,  /* 199 */
180         PADASTERKEY     = 0x00a0,  /* 160 */
181         PADSLASHKEY     = 0x00a1,  /* 161 */
182         PADMINUS        = 0x00a2,  /* 162 */
183         PADENTER        = 0x00a3,  /* 163 */
184         PADPLUSKEY      = 0x00a4,  /* 164 */
185
186         PAUSEKEY        = 0x00a5,  /* 165 */
187         INSERTKEY       = 0x00a6,  /* 166 */
188         HOMEKEY         = 0x00a7,  /* 167 */
189         PAGEUPKEY       = 0x00a8,  /* 168 */
190         PAGEDOWNKEY     = 0x00a9,  /* 169 */
191         ENDKEY          = 0x00aa,  /* 170 */
192
193         UNKNOWNKEY      = 0x00ab,  /* 171 */
194         OSKEY           = 0x00ac,  /* 172 */
195         GRLESSKEY       = 0x00ad,  /* 173 */
196
197         /* XXX: are these codes ok? */
198         MEDIAPLAY       = 0x00ae,  /* 174 */
199         MEDIASTOP       = 0x00af,  /* 175 */
200         MEDIAFIRST      = 0x00b0,  /* 176 */
201         MEDIALAST       = 0x00b1,  /* 177 */
202
203         F1KEY           = 0x012c,  /* 300 */
204         F2KEY           = 0x012d,  /* 301 */
205         F3KEY           = 0x012e,  /* 302 */
206         F4KEY           = 0x012f,  /* 303 */
207         F5KEY           = 0x0130,  /* 304 */
208         F6KEY           = 0x0131,  /* 305 */
209         F7KEY           = 0x0132,  /* 306 */
210         F8KEY           = 0x0133,  /* 307 */
211         F9KEY           = 0x0134,  /* 308 */
212         F10KEY          = 0x0135,  /* 309 */
213         F11KEY          = 0x0136,  /* 310 */
214         F12KEY          = 0x0137,  /* 311 */
215         F13KEY          = 0x0138,  /* 312 */
216         F14KEY          = 0x0139,  /* 313 */
217         F15KEY          = 0x013a,  /* 314 */
218         F16KEY          = 0x013b,  /* 315 */
219         F17KEY          = 0x013c,  /* 316 */
220         F18KEY          = 0x013d,  /* 317 */
221         F19KEY          = 0x013e,  /* 318 */
222
223         /* *** End of keyboard codes. *** */
224
225         /* NDOF (from SpaceNavigator & friends)
226          * These should be kept in sync with GHOST_NDOFManager.h
227          * Ordering matters, exact values do not. */
228         NDOF_MOTION = 0x0190,
229         /* used internally, never sent */
230         NDOF_BUTTON_NONE = NDOF_MOTION,
231         /* these two are available from any 3Dconnexion device */
232         NDOF_BUTTON_MENU,
233         NDOF_BUTTON_FIT,
234         /* standard views */
235         NDOF_BUTTON_TOP,
236         NDOF_BUTTON_BOTTOM,
237         NDOF_BUTTON_LEFT,
238         NDOF_BUTTON_RIGHT,
239         NDOF_BUTTON_FRONT,
240         NDOF_BUTTON_BACK,
241         /* more views */
242         NDOF_BUTTON_ISO1,
243         NDOF_BUTTON_ISO2,
244         /* 90 degree rotations */
245         NDOF_BUTTON_ROLL_CW,
246         NDOF_BUTTON_ROLL_CCW,
247         NDOF_BUTTON_SPIN_CW,
248         NDOF_BUTTON_SPIN_CCW,
249         NDOF_BUTTON_TILT_CW,
250         NDOF_BUTTON_TILT_CCW,
251         /* device control */
252         NDOF_BUTTON_ROTATE,
253         NDOF_BUTTON_PANZOOM,
254         NDOF_BUTTON_DOMINANT,
255         NDOF_BUTTON_PLUS,
256         NDOF_BUTTON_MINUS,
257         /* keyboard emulation */
258         NDOF_BUTTON_ESC,
259         NDOF_BUTTON_ALT,
260         NDOF_BUTTON_SHIFT,
261         NDOF_BUTTON_CTRL,
262         /* general-purpose buttons */
263         NDOF_BUTTON_1,
264         NDOF_BUTTON_2,
265         NDOF_BUTTON_3,
266         NDOF_BUTTON_4,
267         NDOF_BUTTON_5,
268         NDOF_BUTTON_6,
269         NDOF_BUTTON_7,
270         NDOF_BUTTON_8,
271         NDOF_BUTTON_9,
272         NDOF_BUTTON_10,
273         /* more general-purpose buttons */
274         NDOF_BUTTON_A,
275         NDOF_BUTTON_B,
276         NDOF_BUTTON_C,
277         /* the end */
278         NDOF_LAST,
279
280         /* ********** End of Input devices. ********** */
281
282         /* ********** Start of Blender internal events. ********** */
283
284         /* XXX Those are mixed inside keyboard 'area'! */
285         /* System: 0x010x */
286         INPUTCHANGE           = 0x0103,  /* input connected or disconnected */
287         WINDEACTIVATE         = 0x0104,  /* window is deactivated, focus lost */
288         /* Timer: 0x011x */
289         TIMER                 = 0x0110,  /* timer event, passed on to all queues */
290         TIMER0                = 0x0111,  /* timer event, slot for internal use */
291         TIMER1                = 0x0112,  /* timer event, slot for internal use */
292         TIMER2                = 0x0113,  /* timer event, slot for internal use */
293         TIMERJOBS             = 0x0114,  /* timer event, jobs system */
294         TIMERAUTOSAVE         = 0x0115,  /* timer event, autosave */
295         TIMERREPORT           = 0x0116,  /* timer event, reports */
296         TIMERREGION           = 0x0117,  /* timer event, region slide in/out */
297         TIMERF                = 0x011F,  /* last timer */
298
299         /* Tweak, gestures: 0x500x, 0x501x */
300         EVT_ACTIONZONE_AREA   = 0x5000,
301         EVT_ACTIONZONE_REGION = 0x5001,
302         EVT_ACTIONZONE_FULLSCREEN = 0x5011,
303
304         /* tweak events, for L M R mousebuttons */
305         EVT_TWEAK_L           = 0x5002,
306         EVT_TWEAK_M           = 0x5003,
307         EVT_TWEAK_R           = 0x5004,
308         /* tweak events for action or select mousebutton */
309         EVT_TWEAK_A           = 0x5005,
310         EVT_TWEAK_S           = 0x5006,
311         EVT_GESTURE           = 0x5010,
312
313         /* 0x5011 is taken, see EVT_ACTIONZONE_FULLSCREEN */
314
315         /* Misc Blender internals: 0x502x */
316         EVT_FILESELECT        = 0x5020,
317         EVT_BUT_OPEN          = 0x5021,
318         EVT_MODAL_MAP         = 0x5022,
319         EVT_DROP              = 0x5023,
320         EVT_BUT_CANCEL        = 0x5024,
321
322         /* ********** End of Blender internal events. ********** */
323 };
324
325
326 /* *********** wmEvent.type helpers. ********** */
327
328 /* test whether the event is timer event */
329 #define ISTIMER(event_type)     (event_type >= TIMER && event_type <= TIMERF)
330
331 /* for event checks */
332 /* only used for KM_TEXTINPUT, so assume that we want all user-inputtable ascii codes included */
333 /* UNUSED - see wm_eventmatch - BUG [#30479] */
334 /* #define ISTEXTINPUT(event_type)  (event_type >= ' ' && event_type <= 255) */
335 /* note, an alternative could be to check 'event->utf8_buf' */
336
337 /* test whether the event is a key on the keyboard */
338 #define ISKEYBOARD(event_type)                          \
339         ((event_type >= 0x0020 && event_type <= 0x00ff) ||  \
340          (event_type >= 0x012c && event_type <= 0x013f))
341
342 /* test whether the event is a modifier key */
343 #define ISKEYMODIFIER(event_type)  ((event_type >= LEFTCTRLKEY && event_type <= LEFTSHIFTKEY) || event_type == OSKEY)
344
345 /* test whether the event is a mouse button */
346 #define ISMOUSE(event_type)  (event_type >= LEFTMOUSE && event_type <= BUTTON7MOUSE)
347
348 /* test whether the event is tweak event */
349 #define ISTWEAK(event_type)  (event_type >= EVT_TWEAK_L && event_type <= EVT_GESTURE)
350
351 /* test whether the event is a NDOF event */
352 #define ISNDOF(event_type)  (event_type >= NDOF_MOTION && event_type < NDOF_LAST)
353
354 /* test whether event type is acceptable as hotkey, excluding modifiers */
355 #define ISHOTKEY(event_type)                                                  \
356         ((ISKEYBOARD(event_type) || ISMOUSE(event_type) || ISNDOF(event_type)) && \
357          (event_type != ESCKEY) &&                                                \
358          (event_type >= LEFTCTRLKEY && event_type <= LEFTSHIFTKEY) == false &&    \
359          (event_type >= UNKNOWNKEY  && event_type <= GRLESSKEY) == false)
360
361
362 /* ********** wmEvent.val ********** */
363
364 /* Gestures */
365 enum {
366         /* value of tweaks and line gestures, note, KM_ANY (-1) works for this case too */
367         EVT_GESTURE_N   = 1,
368         EVT_GESTURE_NE  = 2,
369         EVT_GESTURE_E   = 3,
370         EVT_GESTURE_SE  = 4,
371         EVT_GESTURE_S   = 5,
372         EVT_GESTURE_SW  = 6,
373         EVT_GESTURE_W   = 7,
374         EVT_GESTURE_NW  = 8,
375         /* value of corner gestures */
376         EVT_GESTURE_N_E = 9,
377         EVT_GESTURE_N_W = 10,
378         EVT_GESTURE_E_N = 11,
379         EVT_GESTURE_E_S = 12,
380         EVT_GESTURE_S_E = 13,
381         EVT_GESTURE_S_W = 14,
382         EVT_GESTURE_W_S = 15,
383         EVT_GESTURE_W_N = 16,
384 };
385
386 /* File select */
387 enum {
388         EVT_FILESELECT_OPEN             = 1,
389         EVT_FILESELECT_FULL_OPEN        = 2,
390         EVT_FILESELECT_EXEC             = 3,
391         EVT_FILESELECT_CANCEL           = 4,
392         EVT_FILESELECT_EXTERNAL_CANCEL  = 5,
393 };
394
395 /* Gesture */
396 /* NOTE: these values are saved in keymap files, do not change them but just add new ones */
397 enum {
398         GESTURE_MODAL_CANCEL      = 1,
399         GESTURE_MODAL_CONFIRM     = 2,
400
401         GESTURE_MODAL_SELECT      = 3,
402         GESTURE_MODAL_DESELECT    = 4,
403
404         GESTURE_MODAL_NOP         = 5, /* circle select when no mouse button is pressed */
405
406         GESTURE_MODAL_CIRCLE_ADD  = 6, /* circle sel: larger brush */
407         GESTURE_MODAL_CIRCLE_SUB  = 7, /* circle sel: smaller brush */
408
409         GESTURE_MODAL_BEGIN       = 8, /* border select/straight line, activate, use release to detect which button */
410
411         GESTURE_MODAL_IN          = 9,
412         GESTURE_MODAL_OUT         = 10,
413
414         GESTURE_MODAL_CIRCLE_SIZE = 11, /* circle sel: size brush (for trackpad event) */
415 };
416
417
418 #endif  /* __WM_EVENT_TYPES_H__ */
419