ClanLib  2.3.7
keys.h
Go to the documentation of this file.
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2011 The ClanLib Team
4 **
5 ** This software is provided 'as-is', without any express or implied
6 ** warranty. In no event will the authors be held liable for any damages
7 ** arising from the use of this software.
8 **
9 ** Permission is granted to anyone to use this software for any purpose,
10 ** including commercial applications, and to alter it and redistribute it
11 ** freely, subject to the following restrictions:
12 **
13 ** 1. The origin of this software must not be misrepresented; you must not
14 ** claim that you wrote the original software. If you use this software
15 ** in a product, an acknowledgment in the product documentation would be
16 ** appreciated but is not required.
17 ** 2. Altered source versions must be plainly marked as such, and must not be
18 ** misrepresented as being the original software.
19 ** 3. This notice may not be removed or altered from any source distribution.
20 **
21 ** Note: Some of the libraries ClanLib may link to may have additional
22 ** requirements or restrictions.
23 **
24 ** File Author(s):
25 **
26 ** Magnus Norddahl
27 */
28 
31 
32 #pragma once
33 
34 // Keyboard & mouse platform independence support.
35 
36 #ifdef WIN32
37 
38 #include <windows.h>
39 
40 #define CL_MOUSE_LEFT 0
41 #define CL_MOUSE_RIGHT 1
42 #define CL_MOUSE_MIDDLE 2
43 #define CL_MOUSE_WHEEL_UP 3
44 #define CL_MOUSE_WHEEL_DOWN 4
45 #define CL_MOUSE_XBUTTON1 5
46 #define CL_MOUSE_XBUTTON2 6
47 
48 #define CL_KEY_BACKSPACE VK_BACK
49 #define CL_KEY_TAB VK_TAB
50 #define CL_KEY_CLEAR VK_CLEAR
51 #define CL_KEY_RETURN VK_RETURN
52 #define CL_KEY_SHIFT VK_SHIFT
53 #define CL_KEY_CONTROL VK_CONTROL
54 #define CL_KEY_MENU VK_MENU
55 #define CL_KEY_PAUSE VK_PAUSE
56 #define CL_KEY_ESCAPE VK_ESCAPE
57 
58 #if !defined(__CYGWIN__) && !defined(__MINGW32__)
59 # define CL_KEY_KANJI VK_KANJI
60 # define CL_KEY_CONVERT VK_CONVERT
61 # define CL_KEY_NONCONVERT VK_NONCONVERT
62 #endif
63 
64 #define CL_KEY_SPACE VK_SPACE
65 #define CL_KEY_PRIOR VK_PRIOR
66 #define CL_KEY_NEXT VK_NEXT
67 #define CL_KEY_END VK_END
68 #define CL_KEY_HOME VK_HOME
69 #define CL_KEY_LEFT VK_LEFT
70 #define CL_KEY_UP VK_UP
71 #define CL_KEY_RIGHT VK_RIGHT
72 #define CL_KEY_DOWN VK_DOWN
73 #define CL_KEY_SELECT VK_SELECT
74 #define CL_KEY_PRINT VK_PRINT
75 #define CL_KEY_EXECUTE VK_EXECUTE
76 #define CL_KEY_INSERT VK_INSERT
77 #define CL_KEY_DELETE VK_DELETE
78 #define CL_KEY_HELP VK_HELP
79 #define CL_KEY_0 '0'
80 #define CL_KEY_1 '1'
81 #define CL_KEY_2 '2'
82 #define CL_KEY_3 '3'
83 #define CL_KEY_4 '4'
84 #define CL_KEY_5 '5'
85 #define CL_KEY_6 '6'
86 #define CL_KEY_7 '7'
87 #define CL_KEY_8 '8'
88 #define CL_KEY_9 '9'
89 #define CL_KEY_A 'A'
90 #define CL_KEY_B 'B'
91 #define CL_KEY_C 'C'
92 #define CL_KEY_D 'D'
93 #define CL_KEY_E 'E'
94 #define CL_KEY_F 'F'
95 #define CL_KEY_G 'G'
96 #define CL_KEY_H 'H'
97 #define CL_KEY_I 'I'
98 #define CL_KEY_J 'J'
99 #define CL_KEY_K 'K'
100 #define CL_KEY_L 'L'
101 #define CL_KEY_M 'M'
102 #define CL_KEY_N 'N'
103 #define CL_KEY_O 'O'
104 #define CL_KEY_P 'P'
105 #define CL_KEY_Q 'Q'
106 #define CL_KEY_R 'R'
107 #define CL_KEY_S 'S'
108 #define CL_KEY_T 'T'
109 #define CL_KEY_U 'U'
110 #define CL_KEY_V 'V'
111 #define CL_KEY_W 'W'
112 #define CL_KEY_X 'X'
113 #define CL_KEY_Y 'Y'
114 #define CL_KEY_Z 'Z'
115 #define CL_KEY_LWIN VK_LWIN
116 #define CL_KEY_RWIN VK_RWIN
117 #define CL_KEY_APPS VK_APPS
118 #define CL_KEY_NUMPAD0 VK_NUMPAD0
119 #define CL_KEY_NUMPAD1 VK_NUMPAD1
120 #define CL_KEY_NUMPAD2 VK_NUMPAD2
121 #define CL_KEY_NUMPAD3 VK_NUMPAD3
122 #define CL_KEY_NUMPAD4 VK_NUMPAD4
123 #define CL_KEY_NUMPAD5 VK_NUMPAD5
124 #define CL_KEY_NUMPAD6 VK_NUMPAD6
125 #define CL_KEY_NUMPAD7 VK_NUMPAD7
126 #define CL_KEY_NUMPAD8 VK_NUMPAD8
127 #define CL_KEY_NUMPAD9 VK_NUMPAD9
128 #define CL_KEY_NUMPAD_ENTER CL_KEY_RETURN
129 #define CL_KEY_MULTIPLY VK_MULTIPLY
130 #define CL_KEY_ADD VK_ADD
131 #define CL_KEY_SEPARATOR VK_SEPARATOR
132 #define CL_KEY_SUBTRACT VK_SUBTRACT
133 #define CL_KEY_DECIMAL VK_DECIMAL
134 #define CL_KEY_DIVIDE VK_DIVIDE
135 #define CL_KEY_F1 VK_F1
136 #define CL_KEY_F2 VK_F2
137 #define CL_KEY_F3 VK_F3
138 #define CL_KEY_F4 VK_F4
139 #define CL_KEY_F5 VK_F5
140 #define CL_KEY_F6 VK_F6
141 #define CL_KEY_F7 VK_F7
142 #define CL_KEY_F8 VK_F8
143 #define CL_KEY_F9 VK_F9
144 #define CL_KEY_F10 VK_F10
145 #define CL_KEY_F11 VK_F11
146 #define CL_KEY_F12 VK_F12
147 #define CL_KEY_F13 VK_F13
148 #define CL_KEY_F14 VK_F14
149 #define CL_KEY_F15 VK_F15
150 #define CL_KEY_F16 VK_F16
151 #define CL_KEY_F17 VK_F17
152 #define CL_KEY_F18 VK_F18
153 #define CL_KEY_F19 VK_F19
154 #define CL_KEY_F20 VK_F20
155 #define CL_KEY_F21 VK_F21
156 #define CL_KEY_F22 VK_F22
157 #define CL_KEY_F23 VK_F23
158 #define CL_KEY_F24 VK_F24
159 #define CL_KEY_NUMLOCK VK_NUMLOCK
160 #define CL_KEY_SCROLL VK_SCROLL
161 #define CL_KEY_LSHIFT VK_LSHIFT
162 #define CL_KEY_RSHIFT VK_RSHIFT
163 #define CL_KEY_LCONTROL VK_LCONTROL
164 #define CL_KEY_RCONTROL VK_RCONTROL
165 #define CL_KEY_LMENU VK_LMENU
166 #define CL_KEY_RMENU VK_RMENU
167 
168 // These tablet key defines can be changed if they conflict with something.
169 #define CL_KEY_TABLET1 0x10001
170 #define CL_KEY_TABLET2 0x10002
171 #define CL_KEY_TABLET3 0x10003
172 #define CL_KEY_TABLET4 0x10004
173 #define CL_KEY_TABLET5 0x10005
174 #define CL_KEY_TABLET6 0x10006
175 #define CL_KEY_TABLET7 0x10007
176 #define CL_KEY_TABLET8 0x10008
177 #define CL_KEY_TABLET9 0x10009
178 #define CL_KEY_TABLET10 0x1000a
179 
180 #else
181 #ifdef __APPLE__
182 
183 // Seems like this platform dont have keysyms, or their docs suck so much I
184 // can't find it.
185 //
186 // To solve this matter I've made my own virtual key numbering. If a key
187 // pressed does not match any of these, then it will return the actual
188 // MacOSX keycode in the high order word (keycode + 0x10000000).
189 //
190 // Naturally this require that they dont use keycode values above 0xffff,
191 // but if they do complain to Apple for their crappy keyboard support.
192 // Already kinda annoyed that the keys for typing { and } are alt+shift+8 and
193 // alt+shift+9, plus that backslash is alt+shift+7. How hostile is that!?!?
194 // Oh well what can you expect from a company that write "Designed by Apple
195 // in California" with big letters when you open your box that the powerbook
196 // came in. Yes it shows thats its designed in California!!
197 //
198 // (No offence to California though. Been there once and loved the place.)
199 
200 #define CL_MOUSE_LEFT 0
201 #define CL_MOUSE_RIGHT 1
202 #define CL_MOUSE_MIDDLE 2
203 #define CL_MOUSE_WHEEL_UP 3
204 #define CL_MOUSE_WHEEL_DOWN 4
205 #define CL_MOUSE_XBUTTON1 5
206 #define CL_MOUSE_XBUTTON2 6
207 
208 #define CL_KEY_BACKSPACE 10
209 #define CL_KEY_TAB 11
210 #define CL_KEY_CLEAR 12
211 #define CL_KEY_RETURN 13
212 #define CL_KEY_SHIFT 14
213 #define CL_KEY_CONTROL 15
214 #define CL_KEY_MENU 16
215 #define CL_KEY_PAUSE 17
216 #define CL_KEY_KANJI 18
217 #define CL_KEY_ESCAPE 19
218 #define CL_KEY_CONVERT 20
219 #define CL_KEY_NONCONVERT 21
220 #define CL_KEY_SPACE 22
221 #define CL_KEY_PRIOR 23
222 #define CL_KEY_NEXT 24
223 #define CL_KEY_END 25
224 #define CL_KEY_HOME 26
225 #define CL_KEY_LEFT 27
226 #define CL_KEY_UP 28
227 #define CL_KEY_RIGHT 29
228 #define CL_KEY_DOWN 30
229 #define CL_KEY_SELECT 31
230 #define CL_KEY_PRINT 32
231 #define CL_KEY_EXECUTE 33
232 #define CL_KEY_INSERT 34
233 #define CL_KEY_DELETE 35
234 #define CL_KEY_HELP 36
235 #define CL_KEY_0 37
236 #define CL_KEY_1 38
237 #define CL_KEY_2 39
238 #define CL_KEY_3 40
239 #define CL_KEY_4 41
240 #define CL_KEY_5 42
241 #define CL_KEY_6 43
242 #define CL_KEY_7 44
243 #define CL_KEY_8 45
244 #define CL_KEY_9 46
245 #define CL_KEY_A 47
246 #define CL_KEY_B 48
247 #define CL_KEY_C 49
248 #define CL_KEY_D 50
249 #define CL_KEY_E 51
250 #define CL_KEY_F 52
251 #define CL_KEY_G 53
252 #define CL_KEY_H 54
253 #define CL_KEY_I 55
254 #define CL_KEY_J 56
255 #define CL_KEY_K 57
256 #define CL_KEY_L 58
257 #define CL_KEY_M 59
258 #define CL_KEY_N 60
259 #define CL_KEY_O 61
260 #define CL_KEY_P 62
261 #define CL_KEY_Q 63
262 #define CL_KEY_R 64
263 #define CL_KEY_S 65
264 #define CL_KEY_T 66
265 #define CL_KEY_U 67
266 #define CL_KEY_V 68
267 #define CL_KEY_W 69
268 #define CL_KEY_X 70
269 #define CL_KEY_Y 71
270 #define CL_KEY_Z 72
271 #define CL_KEY_LWIN 73
272 #define CL_KEY_RWIN 74
273 #define CL_KEY_APPS 75
274 #define CL_KEY_NUMPAD0 76
275 #define CL_KEY_NUMPAD1 77
276 #define CL_KEY_NUMPAD2 78
277 #define CL_KEY_NUMPAD3 79
278 #define CL_KEY_NUMPAD4 80
279 #define CL_KEY_NUMPAD5 81
280 #define CL_KEY_NUMPAD6 82
281 #define CL_KEY_NUMPAD7 83
282 #define CL_KEY_NUMPAD8 84
283 #define CL_KEY_NUMPAD9 85
284 #define CL_KEY_NUMPAD_ENTER CL_KEY_RETURN
285 #define CL_KEY_MULTIPLY 86
286 #define CL_KEY_ADD 87
287 #define CL_KEY_SEPARATOR 88
288 #define CL_KEY_SUBTRACT 89
289 #define CL_KEY_DECIMAL 90
290 #define CL_KEY_DIVIDE 91
291 #define CL_KEY_F1 92
292 #define CL_KEY_F2 93
293 #define CL_KEY_F3 94
294 #define CL_KEY_F4 95
295 #define CL_KEY_F5 96
296 #define CL_KEY_F6 97
297 #define CL_KEY_F7 98
298 #define CL_KEY_F8 99
299 #define CL_KEY_F9 100
300 #define CL_KEY_F10 101
301 #define CL_KEY_F11 102
302 #define CL_KEY_F12 103
303 #define CL_KEY_F13 104
304 #define CL_KEY_F14 105
305 #define CL_KEY_F15 106
306 #define CL_KEY_F16 107
307 #define CL_KEY_F17 108
308 #define CL_KEY_F18 109
309 #define CL_KEY_F19 110
310 #define CL_KEY_F20 111
311 #define CL_KEY_F21 112
312 #define CL_KEY_F22 113
313 #define CL_KEY_F23 114
314 #define CL_KEY_F24 115
315 #define CL_KEY_NUMLOCK 116
316 #define CL_KEY_SCROLL 117
317 #define CL_KEY_LSHIFT 118
318 #define CL_KEY_RSHIFT 119
319 #define CL_KEY_LCONTROL 120
320 #define CL_KEY_RCONTROL 121
321 #define CL_KEY_LMENU 122
322 #define CL_KEY_RMENU 123
323 
324 #else
325 
326 #include <X11/keysym.h>
327 
328 #define CL_MOUSE_LEFT 0
329 #define CL_MOUSE_RIGHT 1
330 #define CL_MOUSE_MIDDLE 2
331 #define CL_MOUSE_WHEEL_UP 3
332 #define CL_MOUSE_WHEEL_DOWN 4
333 #define CL_MOUSE_XBUTTON1 5
334 #define CL_MOUSE_XBUTTON2 6
335 
336 #define CL_KEY_BACKSPACE XK_BackSpace
337 #define CL_KEY_TAB XK_Tab
338 #define CL_KEY_CLEAR XK_Clear
339 #define CL_KEY_RETURN XK_Return
340 #define CL_KEY_SHIFT XK_Shift_L
341 #define CL_KEY_CONTROL XK_Control_L
342 #define CL_KEY_MENU XK_Menu // there is no XK_Alt, only XK_Alt_L and XK_Alt_R. Maybe remove this key? -- mbn 30 sep 2003
343 #define CL_KEY_PAUSE XK_Pause
344 #define CL_KEY_KANJI XK_Kanji
345 #define CL_KEY_ESCAPE XK_Escape
346 #define CL_KEY_CONVERT XK_Henkan_Mode
347 #define CL_KEY_NONCONVERT XK_Muhenkan
348 #define CL_KEY_SPACE XK_space
349 #define CL_KEY_PRIOR XK_Prior
350 #define CL_KEY_NEXT XK_Next
351 #define CL_KEY_END XK_End
352 #define CL_KEY_HOME XK_Home
353 #define CL_KEY_LEFT XK_Left
354 #define CL_KEY_UP XK_Up
355 #define CL_KEY_RIGHT XK_Right
356 #define CL_KEY_DOWN XK_Down
357 #define CL_KEY_SELECT XK_Select
358 #define CL_KEY_PRINT XK_Print
359 #define CL_KEY_EXECUTE XK_Execute
360 #define CL_KEY_INSERT XK_Insert
361 #define CL_KEY_DELETE XK_Delete
362 #define CL_KEY_HELP XK_Help
363 #define CL_KEY_0 XK_0
364 #define CL_KEY_1 XK_1
365 #define CL_KEY_2 XK_2
366 #define CL_KEY_3 XK_3
367 #define CL_KEY_4 XK_4
368 #define CL_KEY_5 XK_5
369 #define CL_KEY_6 XK_6
370 #define CL_KEY_7 XK_7
371 #define CL_KEY_8 XK_8
372 #define CL_KEY_9 XK_9
373 #define CL_KEY_A XK_a
374 #define CL_KEY_B XK_b
375 #define CL_KEY_C XK_c
376 #define CL_KEY_D XK_d
377 #define CL_KEY_E XK_e
378 #define CL_KEY_F XK_f
379 #define CL_KEY_G XK_g
380 #define CL_KEY_H XK_h
381 #define CL_KEY_I XK_i
382 #define CL_KEY_J XK_j
383 #define CL_KEY_K XK_k
384 #define CL_KEY_L XK_l
385 #define CL_KEY_M XK_m
386 #define CL_KEY_N XK_n
387 #define CL_KEY_O XK_o
388 #define CL_KEY_P XK_p
389 #define CL_KEY_Q XK_q
390 #define CL_KEY_R XK_r
391 #define CL_KEY_S XK_s
392 #define CL_KEY_T XK_t
393 #define CL_KEY_U XK_u
394 #define CL_KEY_V XK_v
395 #define CL_KEY_W XK_w
396 #define CL_KEY_X XK_x
397 #define CL_KEY_Y XK_y
398 #define CL_KEY_Z XK_z
399 #define CL_KEY_LWIN XK_Super_L
400 #define CL_KEY_RWIN XK_Multi_key
401 #define CL_KEY_APPS XK_Menu
402 #define CL_KEY_NUMPAD0 XK_KP_0
403 #define CL_KEY_NUMPAD1 XK_KP_1
404 #define CL_KEY_NUMPAD2 XK_KP_2
405 #define CL_KEY_NUMPAD3 XK_KP_3
406 #define CL_KEY_NUMPAD4 XK_KP_4
407 #define CL_KEY_NUMPAD5 XK_KP_5
408 #define CL_KEY_NUMPAD6 XK_KP_6
409 #define CL_KEY_NUMPAD7 XK_KP_7
410 #define CL_KEY_NUMPAD8 XK_KP_8
411 #define CL_KEY_NUMPAD9 XK_KP_9
412 #define CL_KEY_NUMPAD_ENTER XK_KP_Enter
413 #define CL_KEY_MULTIPLY XK_KP_Multiply
414 #define CL_KEY_ADD XK_KP_Add
415 #define CL_KEY_SEPARATOR XK_KP_Separator
416 #define CL_KEY_SUBTRACT XK_KP_Subtract
417 #define CL_KEY_DECIMAL XK_KP_Decimal
418 #define CL_KEY_DIVIDE XK_KP_Divide
419 #define CL_KEY_F1 XK_F1
420 #define CL_KEY_F2 XK_F2
421 #define CL_KEY_F3 XK_F3
422 #define CL_KEY_F4 XK_F4
423 #define CL_KEY_F5 XK_F5
424 #define CL_KEY_F6 XK_F6
425 #define CL_KEY_F7 XK_F7
426 #define CL_KEY_F8 XK_F8
427 #define CL_KEY_F9 XK_F9
428 #define CL_KEY_F10 XK_F10
429 #define CL_KEY_F11 XK_F11
430 #define CL_KEY_F12 XK_F12
431 #define CL_KEY_F13 XK_F13
432 #define CL_KEY_F14 XK_F14
433 #define CL_KEY_F15 XK_F15
434 #define CL_KEY_F16 XK_F16
435 #define CL_KEY_F17 XK_F17
436 #define CL_KEY_F18 XK_F18
437 #define CL_KEY_F19 XK_F19
438 #define CL_KEY_F20 XK_F20
439 #define CL_KEY_F21 XK_F21
440 #define CL_KEY_F22 XK_F22
441 #define CL_KEY_F23 XK_F23
442 #define CL_KEY_F24 XK_F24
443 #define CL_KEY_NUMLOCK XK_Num_Lock
444 #define CL_KEY_SCROLL XK_Scroll_Lock
445 #define CL_KEY_LSHIFT XK_Shift_L
446 #define CL_KEY_RSHIFT XK_Shift_R
447 #define CL_KEY_LCONTROL XK_Control_L
448 #define CL_KEY_RCONTROL XK_Control_R
449 #define CL_KEY_LMENU XK_Meta_L
450 #define CL_KEY_RMENU XK_Meta_R
451 #endif
452 #endif
453 
454 #define CL_KEY_ENTER CL_KEY_RETURN
455 #define CL_KEY_LAPPLE CL_KEY_LWIN
456 #define CL_KEY_RAPPLE CL_KEY_RWIN
457