nacl_keycodes.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. /*************************************************************************/
  2. /* nacl_keycodes.h */
  3. /*************************************************************************/
  4. /* This file is part of: */
  5. /* GODOT ENGINE */
  6. /* http://www.godotengine.org */
  7. /*************************************************************************/
  8. /* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur. */
  9. /* */
  10. /* Permission is hereby granted, free of charge, to any person obtaining */
  11. /* a copy of this software and associated documentation files (the */
  12. /* "Software"), to deal in the Software without restriction, including */
  13. /* without limitation the rights to use, copy, modify, merge, publish, */
  14. /* distribute, sublicense, and/or sell copies of the Software, and to */
  15. /* permit persons to whom the Software is furnished to do so, subject to */
  16. /* the following conditions: */
  17. /* */
  18. /* The above copyright notice and this permission notice shall be */
  19. /* included in all copies or substantial portions of the Software. */
  20. /* */
  21. /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
  22. /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
  23. /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
  24. /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
  25. /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
  26. /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
  27. /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
  28. /*************************************************************************/
  29. * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com. All rights reserved.
  30. * Copyright (C) 2008, 2009 Google Inc.
  31. *
  32. * Redistribution and use in source and binary forms, with or without
  33. * modification, are permitted provided that the following conditions
  34. * are met:
  35. * 1. Redistributions of source code must retain the above copyright
  36. * notice, this list of conditions and the following disclaimer.
  37. * 2. Redistributions in binary form must reproduce the above copyright
  38. * notice, this list of conditions and the following disclaimer in the
  39. * documentation and/or other materials provided with the distribution.
  40. *
  41. * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
  42. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  43. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  44. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
  45. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  46. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  47. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR
  48. * PROFITS, OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  49. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  50. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  51. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  52. */
  53. #ifndef BASE_KEYBOARD_CODES_POSIX_H_
  54. #define BASE_KEYBOARD_CODES_POSIX_H_
  55. #pragma once
  56. #include "core/os/keyboard.h"
  57. enum {
  58. VKEY_BACK = 0x08,
  59. VKEY_TAB = 0x09,
  60. VKEY_CLEAR = 0x0C,
  61. VKEY_RETURN = 0x0D,
  62. VKEY_SHIFT = 0x10,
  63. VKEY_CONTROL = 0x11,
  64. VKEY_MENU = 0x12,
  65. VKEY_PAUSE = 0x13,
  66. VKEY_CAPITAL = 0x14,
  67. VKEY_KANA = 0x15,
  68. VKEY_HANGUL = 0x15,
  69. VKEY_JUNJA = 0x17,
  70. VKEY_FINAL = 0x18,
  71. VKEY_HANJA = 0x19,
  72. VKEY_KANJI = 0x19,
  73. VKEY_ESCAPE = 0x1B,
  74. VKEY_CONVERT = 0x1C,
  75. VKEY_NONCONVERT = 0x1D,
  76. VKEY_ACCEPT = 0x1E,
  77. VKEY_MODECHANGE = 0x1F,
  78. VKEY_SPACE = 0x20,
  79. VKEY_PRIOR = 0x21,
  80. VKEY_NEXT = 0x22,
  81. VKEY_END = 0x23,
  82. VKEY_HOME = 0x24,
  83. VKEY_LEFT = 0x25,
  84. VKEY_UP = 0x26,
  85. VKEY_RIGHT = 0x27,
  86. VKEY_DOWN = 0x28,
  87. VKEY_SELECT = 0x29,
  88. VKEY_PRINT = 0x2A,
  89. VKEY_EXECUTE = 0x2B,
  90. VKEY_SNAPSHOT = 0x2C,
  91. VKEY_INSERT = 0x2D,
  92. VKEY_DELETE = 0x2E,
  93. VKEY_HELP = 0x2F,
  94. VKEY_0 = 0x30,
  95. VKEY_1 = 0x31,
  96. VKEY_2 = 0x32,
  97. VKEY_3 = 0x33,
  98. VKEY_4 = 0x34,
  99. VKEY_5 = 0x35,
  100. VKEY_6 = 0x36,
  101. VKEY_7 = 0x37,
  102. VKEY_8 = 0x38,
  103. VKEY_9 = 0x39,
  104. VKEY_A = 0x41,
  105. VKEY_B = 0x42,
  106. VKEY_C = 0x43,
  107. VKEY_D = 0x44,
  108. VKEY_E = 0x45,
  109. VKEY_F = 0x46,
  110. VKEY_G = 0x47,
  111. VKEY_H = 0x48,
  112. VKEY_I = 0x49,
  113. VKEY_J = 0x4A,
  114. VKEY_K = 0x4B,
  115. VKEY_L = 0x4C,
  116. VKEY_M = 0x4D,
  117. VKEY_N = 0x4E,
  118. VKEY_O = 0x4F,
  119. VKEY_P = 0x50,
  120. VKEY_Q = 0x51,
  121. VKEY_R = 0x52,
  122. VKEY_S = 0x53,
  123. VKEY_T = 0x54,
  124. VKEY_U = 0x55,
  125. VKEY_V = 0x56,
  126. VKEY_W = 0x57,
  127. VKEY_X = 0x58,
  128. VKEY_Y = 0x59,
  129. VKEY_Z = 0x5A,
  130. VKEY_LWIN = 0x5B,
  131. VKEY_COMMAND = VKEY_LWIN, // Provide the Mac name for convenience.
  132. VKEY_RWIN = 0x5C,
  133. VKEY_APPS = 0x5D,
  134. VKEY_SLEEP = 0x5F,
  135. VKEY_NUMPAD0 = 0x60,
  136. VKEY_NUMPAD1 = 0x61,
  137. VKEY_NUMPAD2 = 0x62,
  138. VKEY_NUMPAD3 = 0x63,
  139. VKEY_NUMPAD4 = 0x64,
  140. VKEY_NUMPAD5 = 0x65,
  141. VKEY_NUMPAD6 = 0x66,
  142. VKEY_NUMPAD7 = 0x67,
  143. VKEY_NUMPAD8 = 0x68,
  144. VKEY_NUMPAD9 = 0x69,
  145. VKEY_MULTIPLY = 0x6A,
  146. VKEY_ADD = 0x6B,
  147. VKEY_SEPARATOR = 0x6C,
  148. VKEY_SUBTRACT = 0x6D,
  149. VKEY_DECIMAL = 0x6E,
  150. VKEY_DIVIDE = 0x6F,
  151. VKEY_F1 = 0x70,
  152. VKEY_F2 = 0x71,
  153. VKEY_F3 = 0x72,
  154. VKEY_F4 = 0x73,
  155. VKEY_F5 = 0x74,
  156. VKEY_F6 = 0x75,
  157. VKEY_F7 = 0x76,
  158. VKEY_F8 = 0x77,
  159. VKEY_F9 = 0x78,
  160. VKEY_F10 = 0x79,
  161. VKEY_F11 = 0x7A,
  162. VKEY_F12 = 0x7B,
  163. VKEY_F13 = 0x7C,
  164. VKEY_F14 = 0x7D,
  165. VKEY_F15 = 0x7E,
  166. VKEY_F16 = 0x7F,
  167. VKEY_F17 = 0x80,
  168. VKEY_F18 = 0x81,
  169. VKEY_F19 = 0x82,
  170. VKEY_F20 = 0x83,
  171. VKEY_F21 = 0x84,
  172. VKEY_F22 = 0x85,
  173. VKEY_F23 = 0x86,
  174. VKEY_F24 = 0x87,
  175. VKEY_NUMLOCK = 0x90,
  176. VKEY_SCROLL = 0x91,
  177. VKEY_LSHIFT = 0xA0,
  178. VKEY_RSHIFT = 0xA1,
  179. VKEY_LCONTROL = 0xA2,
  180. VKEY_RCONTROL = 0xA3,
  181. VKEY_LMENU = 0xA4,
  182. VKEY_RMENU = 0xA5,
  183. VKEY_BROWSER_BACK = 0xA6,
  184. VKEY_BROWSER_FORWARD = 0xA7,
  185. VKEY_BROWSER_REFRESH = 0xA8,
  186. VKEY_BROWSER_STOP = 0xA9,
  187. VKEY_BROWSER_SEARCH = 0xAA,
  188. VKEY_BROWSER_FAVORITES = 0xAB,
  189. VKEY_BROWSER_HOME = 0xAC,
  190. VKEY_VOLUME_MUTE = 0xAD,
  191. VKEY_VOLUME_DOWN = 0xAE,
  192. VKEY_VOLUME_UP = 0xAF,
  193. VKEY_MEDIA_NEXT_TRACK = 0xB0,
  194. VKEY_MEDIA_PREV_TRACK = 0xB1,
  195. VKEY_MEDIA_STOP = 0xB2,
  196. VKEY_MEDIA_PLAY_PAUSE = 0xB3,
  197. VKEY_MEDIA_LAUNCH_MAIL = 0xB4,
  198. VKEY_MEDIA_LAUNCH_MEDIA_SELECT = 0xB5,
  199. VKEY_MEDIA_LAUNCH_APP1 = 0xB6,
  200. VKEY_MEDIA_LAUNCH_APP2 = 0xB7,
  201. VKEY_OEM_1 = 0xBA,
  202. VKEY_OEM_PLUS = 0xBB,
  203. VKEY_OEM_COMMA = 0xBC,
  204. VKEY_OEM_MINUS = 0xBD,
  205. VKEY_OEM_PERIOD = 0xBE,
  206. VKEY_OEM_2 = 0xBF,
  207. VKEY_OEM_3 = 0xC0,
  208. VKEY_OEM_4 = 0xDB,
  209. VKEY_OEM_5 = 0xDC,
  210. VKEY_OEM_6 = 0xDD,
  211. VKEY_OEM_7 = 0xDE,
  212. VKEY_OEM_8 = 0xDF,
  213. VKEY_OEM_102 = 0xE2,
  214. VKEY_PROCESSKEY = 0xE5,
  215. VKEY_PACKET = 0xE7,
  216. VKEY_ATTN = 0xF6,
  217. VKEY_CRSEL = 0xF7,
  218. VKEY_EXSEL = 0xF8,
  219. VKEY_EREOF = 0xF9,
  220. VKEY_PLAY = 0xFA,
  221. VKEY_ZOOM = 0xFB,
  222. VKEY_NONAME = 0xFC,
  223. VKEY_PA1 = 0xFD,
  224. VKEY_OEM_CLEAR = 0xFE,
  225. VKEY_UNKNOWN = 0
  226. };
  227. static uint32_t godot_key(uint32_t p_key, bool& is_char) {
  228. is_char = false;
  229. switch (p_key) {
  230. case VKEY_BACK: return KEY_BACKSPACE;
  231. case VKEY_TAB: return KEY_TAB;
  232. case VKEY_CLEAR: return KEY_CLEAR;
  233. case VKEY_RETURN: return KEY_RETURN;
  234. case VKEY_SHIFT: return KEY_SHIFT;
  235. case VKEY_CONTROL: return KEY_CONTROL;
  236. case VKEY_MENU: return KEY_MENU;
  237. case VKEY_PAUSE: return KEY_PAUSE;
  238. // case VKEY_CAPITAL: return KEY_CAPITAL;
  239. // case VKEY_KANA: return KEY_KANA;
  240. // case VKEY_HANGUL: return KEY_HANGUL;
  241. // case VKEY_JUNJA: return KEY_JUNJA;
  242. // case VKEY_FINAL: return KEY_FINAL;
  243. // case VKEY_HANJA: return KEY_HANJA;
  244. // case VKEY_KANJI: return KEY_KANJI;
  245. case VKEY_ESCAPE: return KEY_ESCAPE;
  246. // case VKEY_CONVERT: return KEY_CONVERT;
  247. // case VKEY_NONCONVERT: return KEY_NONCONVERT;
  248. // case VKEY_ACCEPT: return KEY_ACCEPT;
  249. // case VKEY_MODECHANGE: return KEY_MODECHANGE;
  250. // case VKEY_PRIOR: return KEY_PRIOR;
  251. // case VKEY_NEXT: return KEY_NEXT;
  252. case VKEY_END: return KEY_END;
  253. case VKEY_HOME: return KEY_HOME;
  254. case VKEY_LEFT: return KEY_LEFT;
  255. case VKEY_UP: return KEY_UP;
  256. case VKEY_RIGHT: return KEY_RIGHT;
  257. case VKEY_DOWN: return KEY_DOWN;
  258. // case VKEY_SELECT: return KEY_SELECT;
  259. case VKEY_PRINT: return KEY_PRINT;
  260. // case VKEY_EXECUTE: return KEY_EXECUTE;
  261. // case VKEY_SNAPSHOT: return KEY_SNAPSHOT;
  262. case VKEY_INSERT: return KEY_INSERT;
  263. case VKEY_DELETE: return KEY_DELETE;
  264. case VKEY_HELP: return KEY_HELP;
  265. // case VKEY_LWIN: return KEY_LWIN;
  266. // case VKEY_RWIN: return KEY_RWIN;
  267. // case VKEY_APPS: return KEY_APPS;
  268. // case VKEY_SLEEP: return KEY_SLEEP;
  269. case VKEY_NUMPAD0: return KEY_KP_0;
  270. case VKEY_NUMPAD1: return KEY_KP_1;
  271. case VKEY_NUMPAD2: return KEY_KP_2;
  272. case VKEY_NUMPAD3: return KEY_KP_3;
  273. case VKEY_NUMPAD4: return KEY_KP_4;
  274. case VKEY_NUMPAD5: return KEY_KP_5;
  275. case VKEY_NUMPAD6: return KEY_KP_6;
  276. case VKEY_NUMPAD7: return KEY_KP_7;
  277. case VKEY_NUMPAD8: return KEY_KP_8;
  278. case VKEY_NUMPAD9: return KEY_KP_9;
  279. case VKEY_MULTIPLY: return KEY_KP_MULTIPLY;
  280. case VKEY_ADD: return KEY_KP_ADD;
  281. // case VKEY_SEPARATOR: return KEY_SEPARATOR;
  282. case VKEY_SUBTRACT: return KEY_KP_SUBSTRACT;
  283. case VKEY_DECIMAL: return KEY_KP_PERIOD;
  284. case VKEY_DIVIDE: return KEY_KP_DIVIDE;
  285. case VKEY_F1: return KEY_F1;
  286. case VKEY_F2: return KEY_F2;
  287. case VKEY_F3: return KEY_F3;
  288. case VKEY_F4: return KEY_F4;
  289. case VKEY_F5: return KEY_F5;
  290. case VKEY_F6: return KEY_F6;
  291. case VKEY_F7: return KEY_F7;
  292. case VKEY_F8: return KEY_F8;
  293. case VKEY_F9: return KEY_F9;
  294. case VKEY_F10: return KEY_F10;
  295. case VKEY_F11: return KEY_F11;
  296. case VKEY_F12: return KEY_F12;
  297. case VKEY_F13: return KEY_F13;
  298. case VKEY_F14: return KEY_F14;
  299. case VKEY_F15: return KEY_F15;
  300. case VKEY_F16: return KEY_F16;
  301. /*
  302. case VKEY_F17: return KEY_F17;
  303. case VKEY_F18: return KEY_F18;
  304. case VKEY_F19: return KEY_F19;
  305. case VKEY_F20: return KEY_F20;
  306. case VKEY_F21: return KEY_F21;
  307. case VKEY_F22: return KEY_F22;
  308. case VKEY_F23: return KEY_F23;
  309. case VKEY_F24: return KEY_F24;
  310. */
  311. case VKEY_NUMLOCK: return KEY_NUMLOCK;
  312. case VKEY_SCROLL: return KEY_SCROLLLOCK;
  313. case VKEY_LSHIFT: return KEY_SHIFT;
  314. case VKEY_RSHIFT: return KEY_SHIFT;
  315. case VKEY_LCONTROL: return KEY_CONTROL;
  316. case VKEY_RCONTROL: return KEY_CONTROL;
  317. case VKEY_LMENU: return KEY_MENU;
  318. case VKEY_RMENU: return KEY_MENU;
  319. case VKEY_BROWSER_BACK: return KEY_BACK;
  320. case VKEY_BROWSER_FORWARD: return KEY_FORWARD;
  321. case VKEY_BROWSER_REFRESH: return KEY_REFRESH;
  322. case VKEY_BROWSER_STOP: return KEY_STOP;
  323. case VKEY_BROWSER_SEARCH: return KEY_SEARCH;
  324. case VKEY_BROWSER_FAVORITES: return KEY_FAVORITES;
  325. case VKEY_BROWSER_HOME: return KEY_HOMEPAGE;
  326. case VKEY_VOLUME_MUTE: return KEY_VOLUMEMUTE;
  327. case VKEY_VOLUME_DOWN: return KEY_VOLUMEDOWN;
  328. case VKEY_VOLUME_UP: return KEY_VOLUMEUP;
  329. case VKEY_MEDIA_NEXT_TRACK: return KEY_MEDIANEXT;
  330. case VKEY_MEDIA_PREV_TRACK: return KEY_MEDIAPREVIOUS;
  331. case VKEY_MEDIA_STOP: return KEY_MEDIASTOP;
  332. case VKEY_MEDIA_PLAY_PAUSE: return KEY_MEDIAPLAY;
  333. case VKEY_MEDIA_LAUNCH_MAIL: return KEY_LAUNCHMAIL;
  334. case VKEY_MEDIA_LAUNCH_MEDIA_SELECT: return KEY_LAUNCHMEDIA; // FUCKING USELESS KEYS, HOW DO THEY WORK?
  335. case VKEY_MEDIA_LAUNCH_APP1: return KEY_LAUNCH0;
  336. case VKEY_MEDIA_LAUNCH_APP2: return KEY_LAUNCH0;
  337. // case VKEY_OEM_102: return KEY_OEM_102;
  338. // case VKEY_PROCESSKEY: return KEY_PROCESSKEY;
  339. // case VKEY_PACKET: return KEY_PACKET;
  340. // case VKEY_ATTN: return KEY_ATTN;
  341. // case VKEY_CRSEL: return KEY_CRSEL;
  342. // case VKEY_EXSEL: return KEY_EXSEL;
  343. // case VKEY_EREOF: return KEY_EREOF;
  344. // case VKEY_PLAY: return KEY_PLAY;
  345. // case VKEY_ZOOM: return KEY_ZOOM;
  346. // case VKEY_NONAME: return KEY_NONAME;
  347. // case VKEY_PA1: return KEY_PA1;
  348. // case VKEY_OEM_CLEAR: return KEY_OEM_CLEAR;
  349. default: break;
  350. };
  351. is_char = true;
  352. switch (p_key) {
  353. case VKEY_SPACE: return KEY_SPACE;
  354. case VKEY_0: return KEY_0;
  355. case VKEY_1: return KEY_1;
  356. case VKEY_2: return KEY_2;
  357. case VKEY_3: return KEY_3;
  358. case VKEY_4: return KEY_4;
  359. case VKEY_5: return KEY_5;
  360. case VKEY_6: return KEY_6;
  361. case VKEY_7: return KEY_7;
  362. case VKEY_8: return KEY_8;
  363. case VKEY_9: return KEY_9;
  364. case VKEY_A: return KEY_A;
  365. case VKEY_B: return KEY_B;
  366. case VKEY_C: return KEY_C;
  367. case VKEY_D: return KEY_D;
  368. case VKEY_E: return KEY_E;
  369. case VKEY_F: return KEY_F;
  370. case VKEY_G: return KEY_G;
  371. case VKEY_H: return KEY_H;
  372. case VKEY_I: return KEY_I;
  373. case VKEY_J: return KEY_J;
  374. case VKEY_K: return KEY_K;
  375. case VKEY_L: return KEY_L;
  376. case VKEY_M: return KEY_M;
  377. case VKEY_N: return KEY_N;
  378. case VKEY_O: return KEY_O;
  379. case VKEY_P: return KEY_P;
  380. case VKEY_Q: return KEY_Q;
  381. case VKEY_R: return KEY_R;
  382. case VKEY_S: return KEY_S;
  383. case VKEY_T: return KEY_T;
  384. case VKEY_U: return KEY_U;
  385. case VKEY_V: return KEY_V;
  386. case VKEY_W: return KEY_W;
  387. case VKEY_X: return KEY_X;
  388. case VKEY_Y: return KEY_Y;
  389. case VKEY_Z: return KEY_Z;
  390. /*
  391. case VKEY_OEM_PLUS: return KEY_PLUS;
  392. case VKEY_OEM_COMMA: return KEY_COMMA;
  393. case VKEY_OEM_MINUS: return KEY_MINUS;
  394. case VKEY_OEM_PERIOD: return KEY_PERIOD;
  395. case VKEY_OEM_1: return KEY_OEM_1;
  396. case VKEY_OEM_2: return KEY_OEM_2;
  397. case VKEY_OEM_3: return KEY_OEM_3;
  398. case VKEY_OEM_4: return KEY_OEM_4;
  399. case VKEY_OEM_5: return KEY_OEM_5;
  400. case VKEY_OEM_6: return KEY_OEM_6;
  401. case VKEY_OEM_7: return KEY_OEM_7;
  402. case VKEY_OEM_8: return KEY_OEM_8;
  403. */
  404. default: break;
  405. };
  406. return 0;
  407. };
  408. #endif // BASE_KEYBOARD_CODES_POSIX_H_