keycode.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. #pragma once
  2. #ifndef KEYCODE_H
  3. #define KEYCODE_H
  4. #include "../base/os.h"
  5. #if defined(IS_MACOSX)
  6. #include <Carbon/Carbon.h> /* Really only need <HIToolbox/Events.h> */
  7. #include <ApplicationServices/ApplicationServices.h>
  8. #import <IOKit/hidsystem/ev_keymap.h>
  9. enum _MMKeyCode {
  10. // a-z, 0-9
  11. K_NOT_A_KEY = 9999,
  12. K_BACKSPACE = kVK_Delete,
  13. K_DELETE = kVK_ForwardDelete,
  14. K_RETURN = kVK_Return,
  15. K_TAB = kVK_Tab,
  16. K_ESCAPE = kVK_Escape,
  17. K_UP = kVK_UpArrow,
  18. K_DOWN = kVK_DownArrow,
  19. K_RIGHT = kVK_RightArrow,
  20. K_LEFT = kVK_LeftArrow,
  21. K_HOME = kVK_Home,
  22. K_END = kVK_End,
  23. K_PAGEUP = kVK_PageUp,
  24. K_PAGEDOWN = kVK_PageDown,
  25. K_F1 = kVK_F1,
  26. K_F2 = kVK_F2,
  27. K_F3 = kVK_F3,
  28. K_F4 = kVK_F4,
  29. K_F5 = kVK_F5,
  30. K_F6 = kVK_F6,
  31. K_F7 = kVK_F7,
  32. K_F8 = kVK_F8,
  33. K_F9 = kVK_F9,
  34. K_F10 = kVK_F10,
  35. K_F11 = kVK_F11,
  36. K_F12 = kVK_F12,
  37. K_F13 = kVK_F13,
  38. K_F14 = kVK_F14,
  39. K_F15 = kVK_F15,
  40. K_F16 = kVK_F16,
  41. K_F17 = kVK_F17,
  42. K_F18 = kVK_F18,
  43. K_F19 = kVK_F19,
  44. K_F20 = kVK_F20,
  45. K_F21 = K_NOT_A_KEY,
  46. K_F22 = K_NOT_A_KEY,
  47. K_F23 = K_NOT_A_KEY,
  48. K_F24 = K_NOT_A_KEY,
  49. K_META = kVK_Command,
  50. K_LMETA = kVK_Command,
  51. K_RMETA = kVK_RightCommand,
  52. K_ALT = kVK_Option,
  53. K_LALT = kVK_Option,
  54. K_RALT = kVK_RightOption,
  55. K_CONTROL = kVK_Control,
  56. K_LCONTROL = kVK_Control,
  57. K_RCONTROL = kVK_RightControl,
  58. K_SHIFT = kVK_Shift,
  59. K_LSHIFT = kVK_Shift,
  60. K_RSHIFT = kVK_RightShift,
  61. K_CAPSLOCK = kVK_CapsLock,
  62. K_SPACE = kVK_Space,
  63. K_INSERT = kVK_Help,
  64. // K_PRINTSCREEN = K_NOT_A_KEY,
  65. K_PRINTSCREEN = kVK_F13,
  66. K_MENU = K_NOT_A_KEY,
  67. K_NUMPAD_0 = kVK_ANSI_Keypad0,
  68. K_NUMPAD_1 = kVK_ANSI_Keypad1,
  69. K_NUMPAD_2 = kVK_ANSI_Keypad2,
  70. K_NUMPAD_3 = kVK_ANSI_Keypad3,
  71. K_NUMPAD_4 = kVK_ANSI_Keypad4,
  72. K_NUMPAD_5 = kVK_ANSI_Keypad5,
  73. K_NUMPAD_6 = kVK_ANSI_Keypad6,
  74. K_NUMPAD_7 = kVK_ANSI_Keypad7,
  75. K_NUMPAD_8 = kVK_ANSI_Keypad8,
  76. K_NUMPAD_9 = kVK_ANSI_Keypad9,
  77. K_NUMPAD_LOCK = kVK_ANSI_KeypadClear,
  78. //
  79. K_NUMPAD_DECIMAL = kVK_ANSI_KeypadDecimal,
  80. K_NUMPAD_PLUS = kVK_ANSI_KeypadPlus,
  81. K_NUMPAD_MINUS = kVK_ANSI_KeypadMinus,
  82. K_NUMPAD_MUL = kVK_ANSI_KeypadMultiply,
  83. K_NUMPAD_DIV = kVK_ANSI_KeypadDivide,
  84. K_NUMPAD_CLEAR = kVK_ANSI_KeypadClear,
  85. K_NUMPAD_ENTER = kVK_ANSI_KeypadEnter,
  86. K_NUMPAD_EQUAL = kVK_ANSI_KeypadEquals,
  87. K_NUMPAD_LB = kVK_ANSI_LeftBracket,
  88. K_NUMPAD_RB = kVK_ANSI_RightBracket,
  89. K_Backslash = kVK_ANSI_Backslash,
  90. K_Semicolon = kVK_ANSI_Semicolon,
  91. K_Quote = kVK_ANSI_Quote,
  92. K_Slash = kVK_ANSI_Slash,
  93. K_Grave = kVK_ANSI_Grave,
  94. K_AUDIO_VOLUME_MUTE = 1007,
  95. K_AUDIO_VOLUME_DOWN = 1001,
  96. K_AUDIO_VOLUME_UP = 1000,
  97. K_AUDIO_PLAY = 1016,
  98. K_AUDIO_STOP = K_NOT_A_KEY,
  99. K_AUDIO_PAUSE = 1016,
  100. K_AUDIO_PREV = 1018,
  101. K_AUDIO_NEXT = 1017,
  102. K_AUDIO_REWIND = K_NOT_A_KEY,
  103. K_AUDIO_FORWARD = K_NOT_A_KEY,
  104. K_AUDIO_REPEAT = K_NOT_A_KEY,
  105. K_AUDIO_RANDOM = K_NOT_A_KEY,
  106. K_LIGHTS_MON_UP = 1002,
  107. K_LIGHTS_MON_DOWN = 1003,
  108. K_LIGHTS_KBD_TOGGLE = 1023,
  109. K_LIGHTS_KBD_UP = 1021,
  110. K_LIGHTS_KBD_DOWN = 1022
  111. };
  112. typedef CGKeyCode MMKeyCode;
  113. #elif defined(USE_X11)
  114. #include <X11/Xutil.h>
  115. #include <X11/XF86keysym.h>
  116. enum _MMKeyCode {
  117. K_NOT_A_KEY = 9999,
  118. K_BACKSPACE = XK_BackSpace,
  119. K_DELETE = XK_Delete,
  120. K_RETURN = XK_Return,
  121. K_TAB = XK_Tab,
  122. K_ESCAPE = XK_Escape,
  123. K_UP = XK_Up,
  124. K_DOWN = XK_Down,
  125. K_RIGHT = XK_Right,
  126. K_LEFT = XK_Left,
  127. K_HOME = XK_Home,
  128. K_END = XK_End,
  129. K_PAGEUP = XK_Page_Up,
  130. K_PAGEDOWN = XK_Page_Down,
  131. K_F1 = XK_F1,
  132. K_F2 = XK_F2,
  133. K_F3 = XK_F3,
  134. K_F4 = XK_F4,
  135. K_F5 = XK_F5,
  136. K_F6 = XK_F6,
  137. K_F7 = XK_F7,
  138. K_F8 = XK_F8,
  139. K_F9 = XK_F9,
  140. K_F10 = XK_F10,
  141. K_F11 = XK_F11,
  142. K_F12 = XK_F12,
  143. K_F13 = XK_F13,
  144. K_F14 = XK_F14,
  145. K_F15 = XK_F15,
  146. K_F16 = XK_F16,
  147. K_F17 = XK_F17,
  148. K_F18 = XK_F18,
  149. K_F19 = XK_F19,
  150. K_F20 = XK_F20,
  151. K_F21 = XK_F21,
  152. K_F22 = XK_F22,
  153. K_F23 = XK_F23,
  154. K_F24 = XK_F24,
  155. K_META = XK_Super_L,
  156. K_LMETA = XK_Super_L,
  157. K_RMETA = XK_Super_R,
  158. K_ALT = XK_Alt_L,
  159. K_LALT = XK_Alt_L,
  160. K_RALT = XK_Alt_R,
  161. K_CONTROL = XK_Control_L,
  162. K_LCONTROL = XK_Control_L,
  163. K_RCONTROL = XK_Control_R,
  164. K_SHIFT = XK_Shift_L,
  165. K_LSHIFT = XK_Shift_L,
  166. K_RSHIFT = XK_Shift_R,
  167. K_CAPSLOCK = XK_Caps_Lock,
  168. K_SPACE = XK_space,
  169. K_INSERT = XK_Insert,
  170. K_PRINTSCREEN = XK_Print,
  171. K_MENU = K_NOT_A_KEY,
  172. // K_NUMPAD_0 = K_NOT_A_KEY,
  173. K_NUMPAD_0 = XK_KP_0,
  174. K_NUMPAD_1 = XK_KP_1,
  175. K_NUMPAD_2 = XK_KP_2,
  176. K_NUMPAD_3 = XK_KP_3,
  177. K_NUMPAD_4 = XK_KP_4,
  178. K_NUMPAD_5 = XK_KP_5,
  179. K_NUMPAD_6 = XK_KP_6,
  180. K_NUMPAD_7 = XK_KP_7,
  181. K_NUMPAD_8 = XK_KP_8,
  182. K_NUMPAD_9 = XK_KP_9,
  183. K_NUMPAD_LOCK = XK_Num_Lock,
  184. //
  185. K_NUMPAD_DECIMAL = XK_KP_Decimal,
  186. K_NUMPAD_PLUS = 78, // XK_KP_Add
  187. K_NUMPAD_MINUS = 74, // XK_KP_Subtract
  188. K_NUMPAD_MUL = 55, // XK_KP_Multiply
  189. K_NUMPAD_DIV = 98, // XK_KP_Divide
  190. K_NUMPAD_CLEAR = K_NOT_A_KEY,
  191. K_NUMPAD_ENTER = 96, // XK_KP_Enter
  192. K_NUMPAD_EQUAL = XK_equal,
  193. K_NUMPAD_LB = XK_bracketleft,
  194. K_NUMPAD_RB = XK_bracketright,
  195. K_Backslash = XK_backslash,
  196. K_Semicolon = XK_semicolon,
  197. K_Quote = XK_apostrophe,
  198. K_Slash = XK_slash,
  199. K_Grave = XK_grave,
  200. K_AUDIO_VOLUME_MUTE = XF86XK_AudioMute,
  201. K_AUDIO_VOLUME_DOWN = XF86XK_AudioLowerVolume,
  202. K_AUDIO_VOLUME_UP = XF86XK_AudioRaiseVolume,
  203. K_AUDIO_PLAY = XF86XK_AudioPlay,
  204. K_AUDIO_STOP = XF86XK_AudioStop,
  205. K_AUDIO_PAUSE = XF86XK_AudioPause,
  206. K_AUDIO_PREV = XF86XK_AudioPrev,
  207. K_AUDIO_NEXT = XF86XK_AudioNext,
  208. K_AUDIO_REWIND = XF86XK_AudioRewind,
  209. K_AUDIO_FORWARD = XF86XK_AudioForward,
  210. K_AUDIO_REPEAT = XF86XK_AudioRepeat,
  211. K_AUDIO_RANDOM = XF86XK_AudioRandomPlay,
  212. K_LIGHTS_MON_UP = XF86XK_MonBrightnessUp,
  213. K_LIGHTS_MON_DOWN = XF86XK_MonBrightnessDown,
  214. K_LIGHTS_KBD_TOGGLE = XF86XK_KbdLightOnOff,
  215. K_LIGHTS_KBD_UP = XF86XK_KbdBrightnessUp,
  216. K_LIGHTS_KBD_DOWN = XF86XK_KbdBrightnessDown
  217. };
  218. typedef KeySym MMKeyCode;
  219. /*
  220. * Structs to store key mappings not handled by XStringToKeysym() on some
  221. * Linux systems.
  222. */
  223. struct XSpecialCharacterMapping {
  224. char name;
  225. MMKeyCode code;
  226. };
  227. struct XSpecialCharacterMapping XSpecialCharacterTable[] = {
  228. {'~', XK_asciitilde},
  229. {'_', XK_underscore},
  230. {'[', XK_bracketleft},
  231. {']', XK_bracketright},
  232. {'!', XK_exclam},
  233. {'#', XK_numbersign},
  234. {'$', XK_dollar},
  235. {'%', XK_percent},
  236. {'&', XK_ampersand},
  237. {'*', XK_asterisk},
  238. {'+', XK_plus},
  239. {',', XK_comma},
  240. {'-', XK_minus},
  241. {'.', XK_period},
  242. {'?', XK_question},
  243. {'<', XK_less},
  244. {'>', XK_greater},
  245. {'=', XK_equal},
  246. {'@', XK_at},
  247. {':', XK_colon},
  248. {';', XK_semicolon},
  249. {'{', XK_braceleft},
  250. {'}', XK_braceright},
  251. {'|', XK_bar},
  252. {'^', XK_asciicircum},
  253. {'(', XK_parenleft},
  254. {')', XK_parenright},
  255. {' ', XK_space},
  256. {'/', XK_slash},
  257. {'\\', XK_backslash},
  258. {'`', XK_grave},
  259. {'"', XK_quoteright},
  260. {'\'', XK_quotedbl},
  261. {'\t', XK_Tab},
  262. {'\n', XK_Return}
  263. };
  264. #elif defined(IS_WINDOWS)
  265. enum _MMKeyCode {
  266. K_NOT_A_KEY = 9999,
  267. K_BACKSPACE = VK_BACK,
  268. K_DELETE = VK_DELETE,
  269. K_RETURN = VK_RETURN,
  270. K_TAB = VK_TAB,
  271. K_ESCAPE = VK_ESCAPE,
  272. K_UP = VK_UP,
  273. K_DOWN = VK_DOWN,
  274. K_RIGHT = VK_RIGHT,
  275. K_LEFT = VK_LEFT,
  276. K_HOME = VK_HOME,
  277. K_END = VK_END,
  278. K_PAGEUP = VK_PRIOR,
  279. K_PAGEDOWN = VK_NEXT,
  280. K_F1 = VK_F1,
  281. K_F2 = VK_F2,
  282. K_F3 = VK_F3,
  283. K_F4 = VK_F4,
  284. K_F5 = VK_F5,
  285. K_F6 = VK_F6,
  286. K_F7 = VK_F7,
  287. K_F8 = VK_F8,
  288. K_F9 = VK_F9,
  289. K_F10 = VK_F10,
  290. K_F11 = VK_F11,
  291. K_F12 = VK_F12,
  292. K_F13 = VK_F13,
  293. K_F14 = VK_F14,
  294. K_F15 = VK_F15,
  295. K_F16 = VK_F16,
  296. K_F17 = VK_F17,
  297. K_F18 = VK_F18,
  298. K_F19 = VK_F19,
  299. K_F20 = VK_F20,
  300. K_F21 = VK_F21,
  301. K_F22 = VK_F22,
  302. K_F23 = VK_F23,
  303. K_F24 = VK_F24,
  304. K_META = VK_LWIN,
  305. K_LMETA = VK_LWIN,
  306. K_RMETA = VK_RWIN,
  307. K_ALT = VK_MENU,
  308. K_LALT = VK_LMENU,
  309. K_RALT = VK_RMENU,
  310. K_CONTROL = VK_CONTROL,
  311. K_LCONTROL = VK_LCONTROL,
  312. K_RCONTROL = VK_RCONTROL,
  313. K_SHIFT = VK_SHIFT,
  314. K_LSHIFT = VK_LSHIFT,
  315. K_RSHIFT = VK_RSHIFT,
  316. K_CAPSLOCK = VK_CAPITAL,
  317. K_SPACE = VK_SPACE,
  318. K_PRINTSCREEN = VK_SNAPSHOT,
  319. K_INSERT = VK_INSERT,
  320. K_MENU = VK_APPS,
  321. K_NUMPAD_0 = VK_NUMPAD0,
  322. K_NUMPAD_1 = VK_NUMPAD1,
  323. K_NUMPAD_2 = VK_NUMPAD2,
  324. K_NUMPAD_3 = VK_NUMPAD3,
  325. K_NUMPAD_4 = VK_NUMPAD4,
  326. K_NUMPAD_5 = VK_NUMPAD5,
  327. K_NUMPAD_6 = VK_NUMPAD6,
  328. K_NUMPAD_7 = VK_NUMPAD7,
  329. K_NUMPAD_8 = VK_NUMPAD8,
  330. K_NUMPAD_9 = VK_NUMPAD9,
  331. K_NUMPAD_LOCK = VK_NUMLOCK,
  332. // VK_NUMPAD_
  333. K_NUMPAD_DECIMAL = VK_DECIMAL,
  334. K_NUMPAD_PLUS = VK_ADD,
  335. K_NUMPAD_MINUS = VK_SUBTRACT,
  336. K_NUMPAD_MUL = VK_MULTIPLY,
  337. K_NUMPAD_DIV = VK_DIVIDE,
  338. K_NUMPAD_CLEAR = K_NOT_A_KEY,
  339. K_NUMPAD_ENTER = VK_RETURN,
  340. K_NUMPAD_EQUAL = VK_OEM_PLUS,
  341. K_NUMPAD_LB = VK_OEM_4,
  342. K_NUMPAD_RB = VK_OEM_6,
  343. K_Backslash = VK_OEM_5,
  344. K_Semicolon = VK_OEM_1,
  345. K_Quote = VK_OEM_7,
  346. K_Slash = VK_OEM_2,
  347. K_Grave = VK_OEM_3,
  348. K_AUDIO_VOLUME_MUTE = VK_VOLUME_MUTE,
  349. K_AUDIO_VOLUME_DOWN = VK_VOLUME_DOWN,
  350. K_AUDIO_VOLUME_UP = VK_VOLUME_UP,
  351. K_AUDIO_PLAY = VK_MEDIA_PLAY_PAUSE,
  352. K_AUDIO_STOP = VK_MEDIA_STOP,
  353. K_AUDIO_PAUSE = VK_MEDIA_PLAY_PAUSE,
  354. K_AUDIO_PREV = VK_MEDIA_PREV_TRACK,
  355. K_AUDIO_NEXT = VK_MEDIA_NEXT_TRACK,
  356. K_AUDIO_REWIND = K_NOT_A_KEY,
  357. K_AUDIO_FORWARD = K_NOT_A_KEY,
  358. K_AUDIO_REPEAT = K_NOT_A_KEY,
  359. K_AUDIO_RANDOM = K_NOT_A_KEY,
  360. K_LIGHTS_MON_UP = K_NOT_A_KEY,
  361. K_LIGHTS_MON_DOWN = K_NOT_A_KEY,
  362. K_LIGHTS_KBD_TOGGLE = K_NOT_A_KEY,
  363. K_LIGHTS_KBD_UP = K_NOT_A_KEY,
  364. K_LIGHTS_KBD_DOWN = K_NOT_A_KEY
  365. };
  366. typedef int MMKeyCode;
  367. #endif
  368. /* Returns the keyCode corresponding to the current keyboard layout for the
  369. * given ASCII character. */
  370. MMKeyCode keyCodeForChar(const char c);
  371. #endif /* KEYCODE_H */