Keyboard.cpp 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. /**
  2. * Copyright (c) 2006-2014 LOVE Development Team
  3. *
  4. * This software is provided 'as-is', without any express or implied
  5. * warranty. In no event will the authors be held liable for any damages
  6. * arising from the use of this software.
  7. *
  8. * Permission is granted to anyone to use this software for any purpose,
  9. * including commercial applications, and to alter it and redistribute it
  10. * freely, subject to the following restrictions:
  11. *
  12. * 1. The origin of this software must not be misrepresented; you must not
  13. * claim that you wrote the original software. If you use this software
  14. * in a product, an acknowledgment in the product documentation would be
  15. * appreciated but is not required.
  16. * 2. Altered source versions must be plainly marked as such, and must not be
  17. * misrepresented as being the original software.
  18. * 3. This notice may not be removed or altered from any source distribution.
  19. **/
  20. #include "Keyboard.h"
  21. namespace love
  22. {
  23. namespace keyboard
  24. {
  25. namespace sdl
  26. {
  27. Keyboard::Keyboard()
  28. : key_repeat(false)
  29. {
  30. }
  31. const char *Keyboard::getName() const
  32. {
  33. return "love.keyboard.sdl";
  34. }
  35. void Keyboard::setKeyRepeat(bool enable)
  36. {
  37. key_repeat = enable;
  38. }
  39. bool Keyboard::hasKeyRepeat() const
  40. {
  41. return key_repeat;
  42. }
  43. bool Keyboard::isDown(Key *keylist) const
  44. {
  45. const Uint8 *keystate = SDL_GetKeyboardState(nullptr);
  46. for (Key key = *keylist; key != KEY_MAX_ENUM; key = *(++keylist))
  47. {
  48. SDL_Scancode scancode = SDL_GetScancodeFromKey(keymap[key]);
  49. if (keystate[scancode])
  50. return true;
  51. }
  52. return false;
  53. }
  54. void Keyboard::setTextInput(bool enable)
  55. {
  56. if (enable)
  57. SDL_StartTextInput();
  58. else
  59. SDL_StopTextInput();
  60. }
  61. bool Keyboard::hasTextInput() const
  62. {
  63. return SDL_IsTextInputActive();
  64. }
  65. const SDL_Keycode *Keyboard::createKeyMap()
  66. {
  67. // Array must be static so its lifetime continues once the function returns.
  68. static SDL_Keycode k[Keyboard::KEY_MAX_ENUM] = {SDLK_UNKNOWN};
  69. k[Keyboard::KEY_UNKNOWN] = SDLK_UNKNOWN;
  70. k[Keyboard::KEY_RETURN] = SDLK_RETURN;
  71. k[Keyboard::KEY_ESCAPE] = SDLK_ESCAPE;
  72. k[Keyboard::KEY_BACKSPACE] = SDLK_BACKSPACE;
  73. k[Keyboard::KEY_TAB] = SDLK_TAB;
  74. k[Keyboard::KEY_SPACE] = SDLK_SPACE;
  75. k[Keyboard::KEY_EXCLAIM] = SDLK_EXCLAIM;
  76. k[Keyboard::KEY_QUOTEDBL] = SDLK_QUOTEDBL;
  77. k[Keyboard::KEY_HASH] = SDLK_HASH;
  78. k[Keyboard::KEY_DOLLAR] = SDLK_DOLLAR;
  79. k[Keyboard::KEY_AMPERSAND] = SDLK_AMPERSAND;
  80. k[Keyboard::KEY_QUOTE] = SDLK_QUOTE;
  81. k[Keyboard::KEY_LEFTPAREN] = SDLK_LEFTPAREN;
  82. k[Keyboard::KEY_RIGHTPAREN] = SDLK_RIGHTPAREN;
  83. k[Keyboard::KEY_ASTERISK] = SDLK_ASTERISK;
  84. k[Keyboard::KEY_PLUS] = SDLK_PLUS;
  85. k[Keyboard::KEY_COMMA] = SDLK_COMMA;
  86. k[Keyboard::KEY_MINUS] = SDLK_MINUS;
  87. k[Keyboard::KEY_PERIOD] = SDLK_PERIOD;
  88. k[Keyboard::KEY_SLASH] = SDLK_SLASH;
  89. k[Keyboard::KEY_0] = SDLK_0;
  90. k[Keyboard::KEY_1] = SDLK_1;
  91. k[Keyboard::KEY_2] = SDLK_2;
  92. k[Keyboard::KEY_3] = SDLK_3;
  93. k[Keyboard::KEY_4] = SDLK_4;
  94. k[Keyboard::KEY_5] = SDLK_5;
  95. k[Keyboard::KEY_6] = SDLK_6;
  96. k[Keyboard::KEY_7] = SDLK_7;
  97. k[Keyboard::KEY_8] = SDLK_8;
  98. k[Keyboard::KEY_9] = SDLK_9;
  99. k[Keyboard::KEY_COLON] = SDLK_COLON;
  100. k[Keyboard::KEY_SEMICOLON] = SDLK_SEMICOLON;
  101. k[Keyboard::KEY_LESS] = SDLK_LESS;
  102. k[Keyboard::KEY_EQUALS] = SDLK_EQUALS;
  103. k[Keyboard::KEY_GREATER] = SDLK_GREATER;
  104. k[Keyboard::KEY_QUESTION] = SDLK_QUESTION;
  105. k[Keyboard::KEY_AT] = SDLK_AT;
  106. k[Keyboard::KEY_LEFTBRACKET] = SDLK_LEFTBRACKET;
  107. k[Keyboard::KEY_BACKSLASH] = SDLK_BACKSLASH;
  108. k[Keyboard::KEY_RIGHTBRACKET] = SDLK_RIGHTBRACKET;
  109. k[Keyboard::KEY_CARET] = SDLK_CARET;
  110. k[Keyboard::KEY_UNDERSCORE] = SDLK_UNDERSCORE;
  111. k[Keyboard::KEY_BACKQUOTE] = SDLK_BACKQUOTE;
  112. k[Keyboard::KEY_A] = SDLK_a;
  113. k[Keyboard::KEY_B] = SDLK_b;
  114. k[Keyboard::KEY_C] = SDLK_c;
  115. k[Keyboard::KEY_D] = SDLK_d;
  116. k[Keyboard::KEY_E] = SDLK_e;
  117. k[Keyboard::KEY_F] = SDLK_f;
  118. k[Keyboard::KEY_G] = SDLK_g;
  119. k[Keyboard::KEY_H] = SDLK_h;
  120. k[Keyboard::KEY_I] = SDLK_i;
  121. k[Keyboard::KEY_J] = SDLK_j;
  122. k[Keyboard::KEY_K] = SDLK_k;
  123. k[Keyboard::KEY_L] = SDLK_l;
  124. k[Keyboard::KEY_M] = SDLK_m;
  125. k[Keyboard::KEY_N] = SDLK_n;
  126. k[Keyboard::KEY_O] = SDLK_o;
  127. k[Keyboard::KEY_P] = SDLK_p;
  128. k[Keyboard::KEY_Q] = SDLK_q;
  129. k[Keyboard::KEY_R] = SDLK_r;
  130. k[Keyboard::KEY_S] = SDLK_s;
  131. k[Keyboard::KEY_T] = SDLK_t;
  132. k[Keyboard::KEY_U] = SDLK_u;
  133. k[Keyboard::KEY_V] = SDLK_v;
  134. k[Keyboard::KEY_W] = SDLK_w;
  135. k[Keyboard::KEY_X] = SDLK_x;
  136. k[Keyboard::KEY_Y] = SDLK_y;
  137. k[Keyboard::KEY_Z] = SDLK_z;
  138. k[Keyboard::KEY_CAPSLOCK] = SDLK_CAPSLOCK;
  139. k[Keyboard::KEY_F1] = SDLK_F1;
  140. k[Keyboard::KEY_F2] = SDLK_F2;
  141. k[Keyboard::KEY_F3] = SDLK_F3;
  142. k[Keyboard::KEY_F4] = SDLK_F4;
  143. k[Keyboard::KEY_F5] = SDLK_F5;
  144. k[Keyboard::KEY_F6] = SDLK_F6;
  145. k[Keyboard::KEY_F7] = SDLK_F7;
  146. k[Keyboard::KEY_F8] = SDLK_F8;
  147. k[Keyboard::KEY_F9] = SDLK_F9;
  148. k[Keyboard::KEY_F10] = SDLK_F10;
  149. k[Keyboard::KEY_F11] = SDLK_F11;
  150. k[Keyboard::KEY_F12] = SDLK_F12;
  151. k[Keyboard::KEY_PRINTSCREEN] = SDLK_PRINTSCREEN;
  152. k[Keyboard::KEY_SCROLLLOCK] = SDLK_SCROLLLOCK;
  153. k[Keyboard::KEY_PAUSE] = SDLK_PAUSE;
  154. k[Keyboard::KEY_INSERT] = SDLK_INSERT;
  155. k[Keyboard::KEY_HOME] = SDLK_HOME;
  156. k[Keyboard::KEY_PAGEUP] = SDLK_PAGEUP;
  157. k[Keyboard::KEY_DELETE] = SDLK_DELETE;
  158. k[Keyboard::KEY_END] = SDLK_END;
  159. k[Keyboard::KEY_PAGEDOWN] = SDLK_PAGEDOWN;
  160. k[Keyboard::KEY_RIGHT] = SDLK_RIGHT;
  161. k[Keyboard::KEY_LEFT] = SDLK_LEFT;
  162. k[Keyboard::KEY_DOWN] = SDLK_DOWN;
  163. k[Keyboard::KEY_UP] = SDLK_UP;
  164. k[Keyboard::KEY_NUMLOCKCLEAR] = SDLK_NUMLOCKCLEAR;
  165. k[Keyboard::KEY_KP_DIVIDE] = SDLK_KP_DIVIDE;
  166. k[Keyboard::KEY_KP_MULTIPLY] = SDLK_KP_MULTIPLY;
  167. k[Keyboard::KEY_KP_MINUS] = SDLK_KP_MINUS;
  168. k[Keyboard::KEY_KP_PLUS] = SDLK_KP_PLUS;
  169. k[Keyboard::KEY_KP_ENTER] = SDLK_KP_ENTER;
  170. k[Keyboard::KEY_KP_0] = SDLK_KP_0;
  171. k[Keyboard::KEY_KP_1] = SDLK_KP_1;
  172. k[Keyboard::KEY_KP_2] = SDLK_KP_2;
  173. k[Keyboard::KEY_KP_3] = SDLK_KP_3;
  174. k[Keyboard::KEY_KP_4] = SDLK_KP_4;
  175. k[Keyboard::KEY_KP_5] = SDLK_KP_5;
  176. k[Keyboard::KEY_KP_6] = SDLK_KP_6;
  177. k[Keyboard::KEY_KP_7] = SDLK_KP_7;
  178. k[Keyboard::KEY_KP_8] = SDLK_KP_8;
  179. k[Keyboard::KEY_KP_9] = SDLK_KP_9;
  180. k[Keyboard::KEY_KP_PERIOD] = SDLK_KP_PERIOD;
  181. k[Keyboard::KEY_KP_COMMA] = SDLK_KP_COMMA;
  182. k[Keyboard::KEY_KP_EQUALS] = SDLK_KP_EQUALS;
  183. k[Keyboard::KEY_APPLICATION] = SDLK_APPLICATION;
  184. k[Keyboard::KEY_POWER] = SDLK_POWER;
  185. k[Keyboard::KEY_F13] = SDLK_F13;
  186. k[Keyboard::KEY_F14] = SDLK_F14;
  187. k[Keyboard::KEY_F15] = SDLK_F15;
  188. k[Keyboard::KEY_F16] = SDLK_F16;
  189. k[Keyboard::KEY_F17] = SDLK_F17;
  190. k[Keyboard::KEY_F18] = SDLK_F18;
  191. k[Keyboard::KEY_F19] = SDLK_F19;
  192. k[Keyboard::KEY_F20] = SDLK_F20;
  193. k[Keyboard::KEY_F21] = SDLK_F21;
  194. k[Keyboard::KEY_F22] = SDLK_F22;
  195. k[Keyboard::KEY_F23] = SDLK_F23;
  196. k[Keyboard::KEY_F24] = SDLK_F24;
  197. k[Keyboard::KEY_EXECUTE] = SDLK_EXECUTE;
  198. k[Keyboard::KEY_HELP] = SDLK_HELP;
  199. k[Keyboard::KEY_MENU] = SDLK_MENU;
  200. k[Keyboard::KEY_SELECT] = SDLK_SELECT;
  201. k[Keyboard::KEY_STOP] = SDLK_STOP;
  202. k[Keyboard::KEY_AGAIN] = SDLK_AGAIN;
  203. k[Keyboard::KEY_UNDO] = SDLK_UNDO;
  204. k[Keyboard::KEY_CUT] = SDLK_CUT;
  205. k[Keyboard::KEY_COPY] = SDLK_COPY;
  206. k[Keyboard::KEY_PASTE] = SDLK_PASTE;
  207. k[Keyboard::KEY_FIND] = SDLK_FIND;
  208. k[Keyboard::KEY_MUTE] = SDLK_MUTE;
  209. k[Keyboard::KEY_VOLUMEUP] = SDLK_VOLUMEUP;
  210. k[Keyboard::KEY_VOLUMEDOWN] = SDLK_VOLUMEDOWN;
  211. k[Keyboard::KEY_ALTERASE] = SDLK_ALTERASE;
  212. k[Keyboard::KEY_SYSREQ] = SDLK_SYSREQ;
  213. k[Keyboard::KEY_CANCEL] = SDLK_CANCEL;
  214. k[Keyboard::KEY_CLEAR] = SDLK_CLEAR;
  215. k[Keyboard::KEY_PRIOR] = SDLK_PRIOR;
  216. k[Keyboard::KEY_RETURN2] = SDLK_RETURN2;
  217. k[Keyboard::KEY_SEPARATOR] = SDLK_SEPARATOR;
  218. k[Keyboard::KEY_OUT] = SDLK_OUT;
  219. k[Keyboard::KEY_OPER] = SDLK_OPER;
  220. k[Keyboard::KEY_CLEARAGAIN] = SDLK_CLEARAGAIN;
  221. k[Keyboard::KEY_THOUSANDSSEPARATOR] = SDLK_THOUSANDSSEPARATOR;
  222. k[Keyboard::KEY_DECIMALSEPARATOR] = SDLK_DECIMALSEPARATOR;
  223. k[Keyboard::KEY_CURRENCYUNIT] = SDLK_CURRENCYUNIT;
  224. k[Keyboard::KEY_CURRENCYSUBUNIT] = SDLK_CURRENCYSUBUNIT;
  225. k[Keyboard::KEY_LCTRL] = SDLK_LCTRL;
  226. k[Keyboard::KEY_LSHIFT] = SDLK_LSHIFT;
  227. k[Keyboard::KEY_LALT] = SDLK_LALT;
  228. k[Keyboard::KEY_LGUI] = SDLK_LGUI;
  229. k[Keyboard::KEY_RCTRL] = SDLK_RCTRL;
  230. k[Keyboard::KEY_RSHIFT] = SDLK_RSHIFT;
  231. k[Keyboard::KEY_RALT] = SDLK_RALT;
  232. k[Keyboard::KEY_RGUI] = SDLK_RGUI;
  233. k[Keyboard::KEY_MODE] = SDLK_MODE;
  234. k[Keyboard::KEY_AUDIONEXT] = SDLK_AUDIONEXT;
  235. k[Keyboard::KEY_AUDIOPREV] = SDLK_AUDIOPREV;
  236. k[Keyboard::KEY_AUDIOSTOP] = SDLK_AUDIOSTOP;
  237. k[Keyboard::KEY_AUDIOPLAY] = SDLK_AUDIOPLAY;
  238. k[Keyboard::KEY_AUDIOMUTE] = SDLK_AUDIOMUTE;
  239. k[Keyboard::KEY_MEDIASELECT] = SDLK_MEDIASELECT;
  240. k[Keyboard::KEY_WWW] = SDLK_WWW;
  241. k[Keyboard::KEY_MAIL] = SDLK_MAIL;
  242. k[Keyboard::KEY_CALCULATOR] = SDLK_CALCULATOR;
  243. k[Keyboard::KEY_COMPUTER] = SDLK_COMPUTER;
  244. k[Keyboard::KEY_APP_SEARCH] = SDLK_AC_SEARCH;
  245. k[Keyboard::KEY_APP_HOME] = SDLK_AC_HOME;
  246. k[Keyboard::KEY_APP_BACK] = SDLK_AC_BACK;
  247. k[Keyboard::KEY_APP_FORWARD] = SDLK_AC_FORWARD;
  248. k[Keyboard::KEY_APP_STOP] = SDLK_AC_STOP;
  249. k[Keyboard::KEY_APP_REFRESH] = SDLK_AC_REFRESH;
  250. k[Keyboard::KEY_APP_BOOKMARKS] = SDLK_AC_BOOKMARKS;
  251. k[Keyboard::KEY_BRIGHTNESSDOWN] = SDLK_BRIGHTNESSDOWN;
  252. k[Keyboard::KEY_BRIGHTNESSUP] = SDLK_BRIGHTNESSUP;
  253. k[Keyboard::KEY_DISPLAYSWITCH] = SDLK_DISPLAYSWITCH;
  254. k[Keyboard::KEY_KBDILLUMTOGGLE] = SDLK_KBDILLUMTOGGLE;
  255. k[Keyboard::KEY_KBDILLUMDOWN] = SDLK_KBDILLUMDOWN;
  256. k[Keyboard::KEY_KBDILLUMUP] = SDLK_KBDILLUMUP;
  257. k[Keyboard::KEY_EJECT] = SDLK_EJECT;
  258. k[Keyboard::KEY_SLEEP] = SDLK_SLEEP;
  259. return k;
  260. }
  261. const SDL_Keycode *Keyboard::keymap = Keyboard::createKeyMap();
  262. } // sdl
  263. } // keyboard
  264. } // love