keys.h

Go to the documentation of this file.
00001 /*
00002 **  ClanLib SDK
00003 **  Copyright (c) 1997-2011 The ClanLib Team
00004 **
00005 **  This software is provided 'as-is', without any express or implied
00006 **  warranty.  In no event will the authors be held liable for any damages
00007 **  arising from the use of this software.
00008 **
00009 **  Permission is granted to anyone to use this software for any purpose,
00010 **  including commercial applications, and to alter it and redistribute it
00011 **  freely, subject to the following restrictions:
00012 **
00013 **  1. The origin of this software must not be misrepresented; you must not
00014 **     claim that you wrote the original software. If you use this software
00015 **     in a product, an acknowledgment in the product documentation would be
00016 **     appreciated but is not required.
00017 **  2. Altered source versions must be plainly marked as such, and must not be
00018 **     misrepresented as being the original software.
00019 **  3. This notice may not be removed or altered from any source distribution.
00020 **
00021 **  Note: Some of the libraries ClanLib may link to may have additional
00022 **  requirements or restrictions.
00023 **
00024 **  File Author(s):
00025 **
00026 **    Magnus Norddahl
00027 */
00028 
00031 
00032 #pragma once
00033 
00034 // Keyboard & mouse platform independence support.
00035 
00036 #ifdef WIN32
00037 
00038 #include <windows.h>
00039 
00040 #define CL_MOUSE_LEFT 0
00041 #define CL_MOUSE_RIGHT 1
00042 #define CL_MOUSE_MIDDLE 2
00043 #define CL_MOUSE_WHEEL_UP 3
00044 #define CL_MOUSE_WHEEL_DOWN 4
00045 #define CL_MOUSE_XBUTTON1 5
00046 #define CL_MOUSE_XBUTTON2 6
00047 
00048 #define CL_KEY_BACKSPACE VK_BACK
00049 #define CL_KEY_TAB VK_TAB
00050 #define CL_KEY_CLEAR VK_CLEAR
00051 #define CL_KEY_RETURN VK_RETURN
00052 #define CL_KEY_SHIFT VK_SHIFT
00053 #define CL_KEY_CONTROL VK_CONTROL
00054 #define CL_KEY_MENU VK_MENU
00055 #define CL_KEY_PAUSE VK_PAUSE
00056 #define CL_KEY_ESCAPE VK_ESCAPE
00057 
00058 #if !defined(__CYGWIN__) && !defined(__MINGW32__)
00059 #  define CL_KEY_KANJI      VK_KANJI
00060 #  define CL_KEY_CONVERT    VK_CONVERT
00061 #  define CL_KEY_NONCONVERT VK_NONCONVERT
00062 #endif
00063 
00064 #define CL_KEY_SPACE VK_SPACE
00065 #define CL_KEY_PRIOR VK_PRIOR
00066 #define CL_KEY_NEXT VK_NEXT
00067 #define CL_KEY_END VK_END
00068 #define CL_KEY_HOME VK_HOME
00069 #define CL_KEY_LEFT VK_LEFT
00070 #define CL_KEY_UP VK_UP
00071 #define CL_KEY_RIGHT VK_RIGHT
00072 #define CL_KEY_DOWN VK_DOWN
00073 #define CL_KEY_SELECT VK_SELECT
00074 #define CL_KEY_PRINT VK_PRINT
00075 #define CL_KEY_EXECUTE VK_EXECUTE
00076 #define CL_KEY_INSERT VK_INSERT
00077 #define CL_KEY_DELETE VK_DELETE
00078 #define CL_KEY_HELP VK_HELP
00079 #define CL_KEY_0 '0'
00080 #define CL_KEY_1 '1'
00081 #define CL_KEY_2 '2'
00082 #define CL_KEY_3 '3'
00083 #define CL_KEY_4 '4'
00084 #define CL_KEY_5 '5'
00085 #define CL_KEY_6 '6'
00086 #define CL_KEY_7 '7'
00087 #define CL_KEY_8 '8'
00088 #define CL_KEY_9 '9'
00089 #define CL_KEY_A 'A'
00090 #define CL_KEY_B 'B'
00091 #define CL_KEY_C 'C'
00092 #define CL_KEY_D 'D'
00093 #define CL_KEY_E 'E'
00094 #define CL_KEY_F 'F'
00095 #define CL_KEY_G 'G'
00096 #define CL_KEY_H 'H'
00097 #define CL_KEY_I 'I'
00098 #define CL_KEY_J 'J'
00099 #define CL_KEY_K 'K'
00100 #define CL_KEY_L 'L'
00101 #define CL_KEY_M 'M'
00102 #define CL_KEY_N 'N'
00103 #define CL_KEY_O 'O'
00104 #define CL_KEY_P 'P'
00105 #define CL_KEY_Q 'Q'
00106 #define CL_KEY_R 'R'
00107 #define CL_KEY_S 'S'
00108 #define CL_KEY_T 'T'
00109 #define CL_KEY_U 'U'
00110 #define CL_KEY_V 'V'
00111 #define CL_KEY_W 'W'
00112 #define CL_KEY_X 'X'
00113 #define CL_KEY_Y 'Y'
00114 #define CL_KEY_Z 'Z'
00115 #define CL_KEY_LWIN VK_LWIN
00116 #define CL_KEY_RWIN VK_RWIN
00117 #define CL_KEY_APPS VK_APPS
00118 #define CL_KEY_NUMPAD0 VK_NUMPAD0
00119 #define CL_KEY_NUMPAD1 VK_NUMPAD1
00120 #define CL_KEY_NUMPAD2 VK_NUMPAD2
00121 #define CL_KEY_NUMPAD3 VK_NUMPAD3
00122 #define CL_KEY_NUMPAD4 VK_NUMPAD4
00123 #define CL_KEY_NUMPAD5 VK_NUMPAD5
00124 #define CL_KEY_NUMPAD6 VK_NUMPAD6
00125 #define CL_KEY_NUMPAD7 VK_NUMPAD7
00126 #define CL_KEY_NUMPAD8 VK_NUMPAD8
00127 #define CL_KEY_NUMPAD9 VK_NUMPAD9
00128 #define CL_KEY_NUMPAD_ENTER CL_KEY_RETURN
00129 #define CL_KEY_MULTIPLY VK_MULTIPLY
00130 #define CL_KEY_ADD VK_ADD
00131 #define CL_KEY_SEPARATOR VK_SEPARATOR
00132 #define CL_KEY_SUBTRACT VK_SUBTRACT
00133 #define CL_KEY_DECIMAL VK_DECIMAL
00134 #define CL_KEY_DIVIDE VK_DIVIDE
00135 #define CL_KEY_F1 VK_F1
00136 #define CL_KEY_F2 VK_F2
00137 #define CL_KEY_F3 VK_F3
00138 #define CL_KEY_F4 VK_F4
00139 #define CL_KEY_F5 VK_F5
00140 #define CL_KEY_F6 VK_F6
00141 #define CL_KEY_F7 VK_F7
00142 #define CL_KEY_F8 VK_F8
00143 #define CL_KEY_F9 VK_F9
00144 #define CL_KEY_F10 VK_F10
00145 #define CL_KEY_F11 VK_F11
00146 #define CL_KEY_F12 VK_F12
00147 #define CL_KEY_F13 VK_F13
00148 #define CL_KEY_F14 VK_F14
00149 #define CL_KEY_F15 VK_F15
00150 #define CL_KEY_F16 VK_F16
00151 #define CL_KEY_F17 VK_F17
00152 #define CL_KEY_F18 VK_F18
00153 #define CL_KEY_F19 VK_F19
00154 #define CL_KEY_F20 VK_F20
00155 #define CL_KEY_F21 VK_F21
00156 #define CL_KEY_F22 VK_F22
00157 #define CL_KEY_F23 VK_F23
00158 #define CL_KEY_F24 VK_F24
00159 #define CL_KEY_NUMLOCK VK_NUMLOCK
00160 #define CL_KEY_SCROLL VK_SCROLL
00161 #define CL_KEY_LSHIFT VK_LSHIFT
00162 #define CL_KEY_RSHIFT VK_RSHIFT
00163 #define CL_KEY_LCONTROL VK_LCONTROL
00164 #define CL_KEY_RCONTROL VK_RCONTROL
00165 #define CL_KEY_LMENU VK_LMENU
00166 #define CL_KEY_RMENU VK_RMENU
00167 
00168 // These tablet key defines can be changed if they conflict with something.
00169 #define CL_KEY_TABLET1 0x10001
00170 #define CL_KEY_TABLET2 0x10002 
00171 #define CL_KEY_TABLET3 0x10003
00172 #define CL_KEY_TABLET4 0x10004
00173 #define CL_KEY_TABLET5 0x10005
00174 #define CL_KEY_TABLET6 0x10006
00175 #define CL_KEY_TABLET7 0x10007
00176 #define CL_KEY_TABLET8 0x10008
00177 #define CL_KEY_TABLET9 0x10009
00178 #define CL_KEY_TABLET10 0x1000a
00179 
00180 #else
00181 #ifdef __APPLE__
00182 
00183 // Seems like this platform dont have keysyms, or their docs suck so much I
00184 // can't find it.
00185 //
00186 // To solve this matter I've made my own virtual key numbering. If a key
00187 // pressed does not match any of these, then it will return the actual
00188 // MacOSX keycode in the high order word (keycode + 0x10000000).
00189 //
00190 // Naturally this require that they dont use keycode values above 0xffff,
00191 // but if they do complain to Apple for their crappy keyboard support.
00192 // Already kinda annoyed that the keys for typing { and } are alt+shift+8 and
00193 // alt+shift+9, plus that backslash is alt+shift+7. How hostile is that!?!?
00194 // Oh well what can you expect from a company that write "Designed by Apple
00195 // in California" with big letters when you open your box that the powerbook
00196 // came in. Yes it shows thats its designed in California!!
00197 //
00198 // (No offence to California though. Been there once and loved the place.)
00199 
00200 #define CL_MOUSE_LEFT 0
00201 #define CL_MOUSE_RIGHT 1
00202 #define CL_MOUSE_MIDDLE 2
00203 #define CL_MOUSE_WHEEL_UP 3
00204 #define CL_MOUSE_WHEEL_DOWN 4
00205 #define CL_MOUSE_XBUTTON1 5
00206 #define CL_MOUSE_XBUTTON2 6
00207 
00208 #define CL_KEY_BACKSPACE 10
00209 #define CL_KEY_TAB 11
00210 #define CL_KEY_CLEAR 12
00211 #define CL_KEY_RETURN 13
00212 #define CL_KEY_SHIFT 14
00213 #define CL_KEY_CONTROL 15
00214 #define CL_KEY_MENU 16
00215 #define CL_KEY_PAUSE 17
00216 #define CL_KEY_KANJI 18
00217 #define CL_KEY_ESCAPE 19
00218 #define CL_KEY_CONVERT 20
00219 #define CL_KEY_NONCONVERT 21
00220 #define CL_KEY_SPACE 22
00221 #define CL_KEY_PRIOR 23
00222 #define CL_KEY_NEXT 24
00223 #define CL_KEY_END 25
00224 #define CL_KEY_HOME 26
00225 #define CL_KEY_LEFT 27
00226 #define CL_KEY_UP 28
00227 #define CL_KEY_RIGHT 29
00228 #define CL_KEY_DOWN 30
00229 #define CL_KEY_SELECT 31
00230 #define CL_KEY_PRINT 32
00231 #define CL_KEY_EXECUTE 33
00232 #define CL_KEY_INSERT 34
00233 #define CL_KEY_DELETE 35
00234 #define CL_KEY_HELP 36
00235 #define CL_KEY_0 37
00236 #define CL_KEY_1 38
00237 #define CL_KEY_2 39
00238 #define CL_KEY_3 40
00239 #define CL_KEY_4 41
00240 #define CL_KEY_5 42
00241 #define CL_KEY_6 43
00242 #define CL_KEY_7 44
00243 #define CL_KEY_8 45
00244 #define CL_KEY_9 46
00245 #define CL_KEY_A 47
00246 #define CL_KEY_B 48
00247 #define CL_KEY_C 49
00248 #define CL_KEY_D 50
00249 #define CL_KEY_E 51
00250 #define CL_KEY_F 52
00251 #define CL_KEY_G 53
00252 #define CL_KEY_H 54
00253 #define CL_KEY_I 55
00254 #define CL_KEY_J 56
00255 #define CL_KEY_K 57
00256 #define CL_KEY_L 58
00257 #define CL_KEY_M 59
00258 #define CL_KEY_N 60
00259 #define CL_KEY_O 61
00260 #define CL_KEY_P 62
00261 #define CL_KEY_Q 63
00262 #define CL_KEY_R 64
00263 #define CL_KEY_S 65
00264 #define CL_KEY_T 66
00265 #define CL_KEY_U 67
00266 #define CL_KEY_V 68
00267 #define CL_KEY_W 69
00268 #define CL_KEY_X 70
00269 #define CL_KEY_Y 71
00270 #define CL_KEY_Z 72
00271 #define CL_KEY_LWIN 73
00272 #define CL_KEY_RWIN 74
00273 #define CL_KEY_APPS 75
00274 #define CL_KEY_NUMPAD0 76
00275 #define CL_KEY_NUMPAD1 77
00276 #define CL_KEY_NUMPAD2 78
00277 #define CL_KEY_NUMPAD3 79
00278 #define CL_KEY_NUMPAD4 80
00279 #define CL_KEY_NUMPAD5 81
00280 #define CL_KEY_NUMPAD6 82
00281 #define CL_KEY_NUMPAD7 83
00282 #define CL_KEY_NUMPAD8 84
00283 #define CL_KEY_NUMPAD9 85
00284 #define CL_KEY_NUMPAD_ENTER CL_KEY_RETURN
00285 #define CL_KEY_MULTIPLY 86
00286 #define CL_KEY_ADD 87
00287 #define CL_KEY_SEPARATOR 88
00288 #define CL_KEY_SUBTRACT 89
00289 #define CL_KEY_DECIMAL 90
00290 #define CL_KEY_DIVIDE 91
00291 #define CL_KEY_F1 92
00292 #define CL_KEY_F2 93
00293 #define CL_KEY_F3 94
00294 #define CL_KEY_F4 95
00295 #define CL_KEY_F5 96
00296 #define CL_KEY_F6 97
00297 #define CL_KEY_F7 98
00298 #define CL_KEY_F8 99
00299 #define CL_KEY_F9 100
00300 #define CL_KEY_F10 101
00301 #define CL_KEY_F11 102
00302 #define CL_KEY_F12 103
00303 #define CL_KEY_F13 104
00304 #define CL_KEY_F14 105
00305 #define CL_KEY_F15 106
00306 #define CL_KEY_F16 107
00307 #define CL_KEY_F17 108
00308 #define CL_KEY_F18 109
00309 #define CL_KEY_F19 110
00310 #define CL_KEY_F20 111
00311 #define CL_KEY_F21 112
00312 #define CL_KEY_F22 113
00313 #define CL_KEY_F23 114
00314 #define CL_KEY_F24 115
00315 #define CL_KEY_NUMLOCK 116
00316 #define CL_KEY_SCROLL 117
00317 #define CL_KEY_LSHIFT 118
00318 #define CL_KEY_RSHIFT 119
00319 #define CL_KEY_LCONTROL 120
00320 #define CL_KEY_RCONTROL 121
00321 #define CL_KEY_LMENU 122
00322 #define CL_KEY_RMENU 123
00323 
00324 #else
00325 
00326 #include <X11/keysym.h>
00327 
00328 #define CL_MOUSE_LEFT 0
00329 #define CL_MOUSE_RIGHT 1
00330 #define CL_MOUSE_MIDDLE 2
00331 #define CL_MOUSE_WHEEL_UP 3
00332 #define CL_MOUSE_WHEEL_DOWN 4
00333 #define CL_MOUSE_XBUTTON1 5
00334 #define CL_MOUSE_XBUTTON2 6
00335 
00336 #define CL_KEY_BACKSPACE XK_BackSpace
00337 #define CL_KEY_TAB XK_Tab
00338 #define CL_KEY_CLEAR XK_Clear
00339 #define CL_KEY_RETURN XK_Return
00340 #define CL_KEY_SHIFT XK_Shift_L
00341 #define CL_KEY_CONTROL XK_Control_L
00342 #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
00343 #define CL_KEY_PAUSE XK_Pause
00344 #define CL_KEY_KANJI XK_Kanji
00345 #define CL_KEY_ESCAPE XK_Escape
00346 #define CL_KEY_CONVERT XK_Henkan_Mode
00347 #define CL_KEY_NONCONVERT XK_Muhenkan
00348 #define CL_KEY_SPACE XK_space
00349 #define CL_KEY_PRIOR XK_Prior
00350 #define CL_KEY_NEXT XK_Next
00351 #define CL_KEY_END XK_End
00352 #define CL_KEY_HOME XK_Home
00353 #define CL_KEY_LEFT XK_Left
00354 #define CL_KEY_UP XK_Up
00355 #define CL_KEY_RIGHT XK_Right
00356 #define CL_KEY_DOWN XK_Down
00357 #define CL_KEY_SELECT XK_Select
00358 #define CL_KEY_PRINT XK_Print
00359 #define CL_KEY_EXECUTE XK_Execute
00360 #define CL_KEY_INSERT XK_Insert
00361 #define CL_KEY_DELETE XK_Delete
00362 #define CL_KEY_HELP XK_Help
00363 #define CL_KEY_0 XK_0
00364 #define CL_KEY_1 XK_1
00365 #define CL_KEY_2 XK_2
00366 #define CL_KEY_3 XK_3
00367 #define CL_KEY_4 XK_4
00368 #define CL_KEY_5 XK_5
00369 #define CL_KEY_6 XK_6
00370 #define CL_KEY_7 XK_7
00371 #define CL_KEY_8 XK_8
00372 #define CL_KEY_9 XK_9
00373 #define CL_KEY_A XK_a
00374 #define CL_KEY_B XK_b
00375 #define CL_KEY_C XK_c
00376 #define CL_KEY_D XK_d
00377 #define CL_KEY_E XK_e
00378 #define CL_KEY_F XK_f
00379 #define CL_KEY_G XK_g
00380 #define CL_KEY_H XK_h
00381 #define CL_KEY_I XK_i
00382 #define CL_KEY_J XK_j
00383 #define CL_KEY_K XK_k
00384 #define CL_KEY_L XK_l
00385 #define CL_KEY_M XK_m
00386 #define CL_KEY_N XK_n
00387 #define CL_KEY_O XK_o
00388 #define CL_KEY_P XK_p
00389 #define CL_KEY_Q XK_q
00390 #define CL_KEY_R XK_r
00391 #define CL_KEY_S XK_s
00392 #define CL_KEY_T XK_t
00393 #define CL_KEY_U XK_u
00394 #define CL_KEY_V XK_v
00395 #define CL_KEY_W XK_w
00396 #define CL_KEY_X XK_x
00397 #define CL_KEY_Y XK_y
00398 #define CL_KEY_Z XK_z
00399 #define CL_KEY_LWIN XK_Super_L
00400 #define CL_KEY_RWIN XK_Multi_key
00401 #define CL_KEY_APPS XK_Menu
00402 #define CL_KEY_NUMPAD0 XK_KP_0
00403 #define CL_KEY_NUMPAD1 XK_KP_1
00404 #define CL_KEY_NUMPAD2 XK_KP_2
00405 #define CL_KEY_NUMPAD3 XK_KP_3
00406 #define CL_KEY_NUMPAD4 XK_KP_4
00407 #define CL_KEY_NUMPAD5 XK_KP_5
00408 #define CL_KEY_NUMPAD6 XK_KP_6
00409 #define CL_KEY_NUMPAD7 XK_KP_7
00410 #define CL_KEY_NUMPAD8 XK_KP_8
00411 #define CL_KEY_NUMPAD9 XK_KP_9
00412 #define CL_KEY_NUMPAD_ENTER XK_KP_Enter
00413 #define CL_KEY_MULTIPLY XK_KP_Multiply
00414 #define CL_KEY_ADD XK_KP_Add
00415 #define CL_KEY_SEPARATOR XK_KP_Separator
00416 #define CL_KEY_SUBTRACT XK_KP_Subtract
00417 #define CL_KEY_DECIMAL XK_KP_Decimal
00418 #define CL_KEY_DIVIDE XK_KP_Divide
00419 #define CL_KEY_F1 XK_F1
00420 #define CL_KEY_F2 XK_F2
00421 #define CL_KEY_F3 XK_F3
00422 #define CL_KEY_F4 XK_F4
00423 #define CL_KEY_F5 XK_F5
00424 #define CL_KEY_F6 XK_F6
00425 #define CL_KEY_F7 XK_F7
00426 #define CL_KEY_F8 XK_F8
00427 #define CL_KEY_F9 XK_F9
00428 #define CL_KEY_F10 XK_F10
00429 #define CL_KEY_F11 XK_F11
00430 #define CL_KEY_F12 XK_F12
00431 #define CL_KEY_F13 XK_F13
00432 #define CL_KEY_F14 XK_F14
00433 #define CL_KEY_F15 XK_F15
00434 #define CL_KEY_F16 XK_F16
00435 #define CL_KEY_F17 XK_F17
00436 #define CL_KEY_F18 XK_F18
00437 #define CL_KEY_F19 XK_F19
00438 #define CL_KEY_F20 XK_F20
00439 #define CL_KEY_F21 XK_F21
00440 #define CL_KEY_F22 XK_F22
00441 #define CL_KEY_F23 XK_F23
00442 #define CL_KEY_F24 XK_F24
00443 #define CL_KEY_NUMLOCK XK_Num_Lock
00444 #define CL_KEY_SCROLL XK_Scroll_Lock
00445 #define CL_KEY_LSHIFT XK_Shift_L
00446 #define CL_KEY_RSHIFT XK_Shift_R
00447 #define CL_KEY_LCONTROL XK_Control_L
00448 #define CL_KEY_RCONTROL XK_Control_R
00449 #define CL_KEY_LMENU XK_Meta_L
00450 #define CL_KEY_RMENU XK_Meta_R
00451 #endif
00452 #endif
00453 
00454 #define CL_KEY_ENTER CL_KEY_RETURN
00455 #define CL_KEY_LAPPLE CL_KEY_LWIN
00456 #define CL_KEY_RAPPLE CL_KEY_RWIN
00457