SDL_androidkeyboard.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. /*
  2. Simple DirectMedia Layer
  3. Copyright (C) 1997-2014 Sam Lantinga <[email protected]>
  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. Permission is granted to anyone to use this software for any purpose,
  8. including commercial applications, and to alter it and redistribute it
  9. freely, subject to the following restrictions:
  10. 1. The origin of this software must not be misrepresented; you must not
  11. claim that you wrote the original software. If you use this software
  12. in a product, an acknowledgment in the product documentation would be
  13. appreciated but is not required.
  14. 2. Altered source versions must be plainly marked as such, and must not be
  15. misrepresented as being the original software.
  16. 3. This notice may not be removed or altered from any source distribution.
  17. */
  18. #include "../../SDL_internal.h"
  19. #if SDL_VIDEO_DRIVER_ANDROID
  20. #include <android/log.h>
  21. #include "../../events/SDL_events_c.h"
  22. #include "SDL_androidkeyboard.h"
  23. #include "../../core/android/SDL_android.h"
  24. void Android_InitKeyboard(void)
  25. {
  26. SDL_Keycode keymap[SDL_NUM_SCANCODES];
  27. /* Add default scancode to key mapping */
  28. SDL_GetDefaultKeymap(keymap);
  29. SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES);
  30. }
  31. static SDL_Scancode Android_Keycodes[] = {
  32. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_UNKNOWN */
  33. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SOFT_LEFT */
  34. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SOFT_RIGHT */
  35. SDL_SCANCODE_AC_HOME, /* AKEYCODE_HOME */
  36. SDL_SCANCODE_AC_BACK, /* AKEYCODE_BACK */
  37. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CALL */
  38. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_ENDCALL */
  39. SDL_SCANCODE_0, /* AKEYCODE_0 */
  40. SDL_SCANCODE_1, /* AKEYCODE_1 */
  41. SDL_SCANCODE_2, /* AKEYCODE_2 */
  42. SDL_SCANCODE_3, /* AKEYCODE_3 */
  43. SDL_SCANCODE_4, /* AKEYCODE_4 */
  44. SDL_SCANCODE_5, /* AKEYCODE_5 */
  45. SDL_SCANCODE_6, /* AKEYCODE_6 */
  46. SDL_SCANCODE_7, /* AKEYCODE_7 */
  47. SDL_SCANCODE_8, /* AKEYCODE_8 */
  48. SDL_SCANCODE_9, /* AKEYCODE_9 */
  49. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STAR */
  50. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_POUND */
  51. SDL_SCANCODE_UP, /* AKEYCODE_DPAD_UP */
  52. SDL_SCANCODE_DOWN, /* AKEYCODE_DPAD_DOWN */
  53. SDL_SCANCODE_LEFT, /* AKEYCODE_DPAD_LEFT */
  54. SDL_SCANCODE_RIGHT, /* AKEYCODE_DPAD_RIGHT */
  55. SDL_SCANCODE_SELECT, /* AKEYCODE_DPAD_CENTER */
  56. SDL_SCANCODE_VOLUMEUP, /* AKEYCODE_VOLUME_UP */
  57. SDL_SCANCODE_VOLUMEDOWN, /* AKEYCODE_VOLUME_DOWN */
  58. SDL_SCANCODE_POWER, /* AKEYCODE_POWER */
  59. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CAMERA */
  60. SDL_SCANCODE_CLEAR, /* AKEYCODE_CLEAR */
  61. SDL_SCANCODE_A, /* AKEYCODE_A */
  62. SDL_SCANCODE_B, /* AKEYCODE_B */
  63. SDL_SCANCODE_C, /* AKEYCODE_C */
  64. SDL_SCANCODE_D, /* AKEYCODE_D */
  65. SDL_SCANCODE_E, /* AKEYCODE_E */
  66. SDL_SCANCODE_F, /* AKEYCODE_F */
  67. SDL_SCANCODE_G, /* AKEYCODE_G */
  68. SDL_SCANCODE_H, /* AKEYCODE_H */
  69. SDL_SCANCODE_I, /* AKEYCODE_I */
  70. SDL_SCANCODE_J, /* AKEYCODE_J */
  71. SDL_SCANCODE_K, /* AKEYCODE_K */
  72. SDL_SCANCODE_L, /* AKEYCODE_L */
  73. SDL_SCANCODE_M, /* AKEYCODE_M */
  74. SDL_SCANCODE_N, /* AKEYCODE_N */
  75. SDL_SCANCODE_O, /* AKEYCODE_O */
  76. SDL_SCANCODE_P, /* AKEYCODE_P */
  77. SDL_SCANCODE_Q, /* AKEYCODE_Q */
  78. SDL_SCANCODE_R, /* AKEYCODE_R */
  79. SDL_SCANCODE_S, /* AKEYCODE_S */
  80. SDL_SCANCODE_T, /* AKEYCODE_T */
  81. SDL_SCANCODE_U, /* AKEYCODE_U */
  82. SDL_SCANCODE_V, /* AKEYCODE_V */
  83. SDL_SCANCODE_W, /* AKEYCODE_W */
  84. SDL_SCANCODE_X, /* AKEYCODE_X */
  85. SDL_SCANCODE_Y, /* AKEYCODE_Y */
  86. SDL_SCANCODE_Z, /* AKEYCODE_Z */
  87. SDL_SCANCODE_COMMA, /* AKEYCODE_COMMA */
  88. SDL_SCANCODE_PERIOD, /* AKEYCODE_PERIOD */
  89. SDL_SCANCODE_LALT, /* AKEYCODE_ALT_LEFT */
  90. SDL_SCANCODE_RALT, /* AKEYCODE_ALT_RIGHT */
  91. SDL_SCANCODE_LSHIFT, /* AKEYCODE_SHIFT_LEFT */
  92. SDL_SCANCODE_RSHIFT, /* AKEYCODE_SHIFT_RIGHT */
  93. SDL_SCANCODE_TAB, /* AKEYCODE_TAB */
  94. SDL_SCANCODE_SPACE, /* AKEYCODE_SPACE */
  95. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SYM */
  96. SDL_SCANCODE_WWW, /* AKEYCODE_EXPLORER */
  97. SDL_SCANCODE_MAIL, /* AKEYCODE_ENVELOPE */
  98. SDL_SCANCODE_RETURN, /* AKEYCODE_ENTER */
  99. SDL_SCANCODE_BACKSPACE, /* AKEYCODE_DEL */
  100. SDL_SCANCODE_GRAVE, /* AKEYCODE_GRAVE */
  101. SDL_SCANCODE_MINUS, /* AKEYCODE_MINUS */
  102. SDL_SCANCODE_EQUALS, /* AKEYCODE_EQUALS */
  103. SDL_SCANCODE_LEFTBRACKET, /* AKEYCODE_LEFT_BRACKET */
  104. SDL_SCANCODE_RIGHTBRACKET, /* AKEYCODE_RIGHT_BRACKET */
  105. SDL_SCANCODE_BACKSLASH, /* AKEYCODE_BACKSLASH */
  106. SDL_SCANCODE_SEMICOLON, /* AKEYCODE_SEMICOLON */
  107. SDL_SCANCODE_APOSTROPHE, /* AKEYCODE_APOSTROPHE */
  108. SDL_SCANCODE_SLASH, /* AKEYCODE_SLASH */
  109. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_AT */
  110. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NUM */
  111. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_HEADSETHOOK */
  112. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_FOCUS */
  113. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PLUS */
  114. SDL_SCANCODE_MENU, /* AKEYCODE_MENU */
  115. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NOTIFICATION */
  116. SDL_SCANCODE_AC_SEARCH, /* AKEYCODE_SEARCH */
  117. SDL_SCANCODE_AUDIOPLAY, /* AKEYCODE_MEDIA_PLAY_PAUSE */
  118. SDL_SCANCODE_AUDIOSTOP, /* AKEYCODE_MEDIA_STOP */
  119. SDL_SCANCODE_AUDIONEXT, /* AKEYCODE_MEDIA_NEXT */
  120. SDL_SCANCODE_AUDIOPREV, /* AKEYCODE_MEDIA_PREVIOUS */
  121. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_REWIND */
  122. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_FAST_FORWARD */
  123. SDL_SCANCODE_MUTE, /* AKEYCODE_MUTE */
  124. SDL_SCANCODE_PAGEUP, /* AKEYCODE_PAGE_UP */
  125. SDL_SCANCODE_PAGEDOWN, /* AKEYCODE_PAGE_DOWN */
  126. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PICTSYMBOLS */
  127. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SWITCH_CHARSET */
  128. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_A */
  129. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_B */
  130. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_C */
  131. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_X */
  132. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_Y */
  133. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_Z */
  134. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_L1 */
  135. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_R1 */
  136. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_L2 */
  137. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_R2 */
  138. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_THUMBL */
  139. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_THUMBR */
  140. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_START */
  141. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_SELECT */
  142. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_MODE */
  143. SDL_SCANCODE_ESCAPE, /* AKEYCODE_ESCAPE */
  144. SDL_SCANCODE_DELETE, /* AKEYCODE_FORWARD_DEL */
  145. SDL_SCANCODE_LCTRL, /* AKEYCODE_CTRL_LEFT */
  146. SDL_SCANCODE_RCTRL, /* AKEYCODE_CTRL_RIGHT */
  147. SDL_SCANCODE_CAPSLOCK, /* AKEYCODE_CAPS_LOCK */
  148. SDL_SCANCODE_SCROLLLOCK, /* AKEYCODE_SCROLL_LOCK */
  149. SDL_SCANCODE_LGUI, /* AKEYCODE_META_LEFT */
  150. SDL_SCANCODE_RGUI, /* AKEYCODE_META_RIGHT */
  151. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_FUNCTION */
  152. SDL_SCANCODE_PRINTSCREEN, /* AKEYCODE_SYSRQ */
  153. SDL_SCANCODE_PAUSE, /* AKEYCODE_BREAK */
  154. SDL_SCANCODE_HOME, /* AKEYCODE_MOVE_HOME */
  155. SDL_SCANCODE_END, /* AKEYCODE_MOVE_END */
  156. SDL_SCANCODE_INSERT, /* AKEYCODE_INSERT */
  157. SDL_SCANCODE_AC_FORWARD, /* AKEYCODE_FORWARD */
  158. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_PLAY */
  159. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_PAUSE */
  160. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_CLOSE */
  161. SDL_SCANCODE_EJECT, /* AKEYCODE_MEDIA_EJECT */
  162. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_RECORD */
  163. SDL_SCANCODE_F1, /* AKEYCODE_F1 */
  164. SDL_SCANCODE_F2, /* AKEYCODE_F2 */
  165. SDL_SCANCODE_F3, /* AKEYCODE_F3 */
  166. SDL_SCANCODE_F4, /* AKEYCODE_F4 */
  167. SDL_SCANCODE_F5, /* AKEYCODE_F5 */
  168. SDL_SCANCODE_F6, /* AKEYCODE_F6 */
  169. SDL_SCANCODE_F7, /* AKEYCODE_F7 */
  170. SDL_SCANCODE_F8, /* AKEYCODE_F8 */
  171. SDL_SCANCODE_F9, /* AKEYCODE_F9 */
  172. SDL_SCANCODE_F10, /* AKEYCODE_F10 */
  173. SDL_SCANCODE_F11, /* AKEYCODE_F11 */
  174. SDL_SCANCODE_F12, /* AKEYCODE_F12 */
  175. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NUM_LOCK */
  176. SDL_SCANCODE_KP_0, /* AKEYCODE_NUMPAD_0 */
  177. SDL_SCANCODE_KP_1, /* AKEYCODE_NUMPAD_1 */
  178. SDL_SCANCODE_KP_2, /* AKEYCODE_NUMPAD_2 */
  179. SDL_SCANCODE_KP_3, /* AKEYCODE_NUMPAD_3 */
  180. SDL_SCANCODE_KP_4, /* AKEYCODE_NUMPAD_4 */
  181. SDL_SCANCODE_KP_5, /* AKEYCODE_NUMPAD_5 */
  182. SDL_SCANCODE_KP_6, /* AKEYCODE_NUMPAD_6 */
  183. SDL_SCANCODE_KP_7, /* AKEYCODE_NUMPAD_7 */
  184. SDL_SCANCODE_KP_8, /* AKEYCODE_NUMPAD_8 */
  185. SDL_SCANCODE_KP_9, /* AKEYCODE_NUMPAD_9 */
  186. SDL_SCANCODE_KP_DIVIDE, /* AKEYCODE_NUMPAD_DIVIDE */
  187. SDL_SCANCODE_KP_MULTIPLY, /* AKEYCODE_NUMPAD_MULTIPLY */
  188. SDL_SCANCODE_KP_MINUS, /* AKEYCODE_NUMPAD_SUBTRACT */
  189. SDL_SCANCODE_KP_PLUS, /* AKEYCODE_NUMPAD_ADD */
  190. SDL_SCANCODE_KP_PERIOD, /* AKEYCODE_NUMPAD_DOT */
  191. SDL_SCANCODE_KP_COMMA, /* AKEYCODE_NUMPAD_COMMA */
  192. SDL_SCANCODE_KP_ENTER, /* AKEYCODE_NUMPAD_ENTER */
  193. SDL_SCANCODE_KP_EQUALS, /* AKEYCODE_NUMPAD_EQUALS */
  194. SDL_SCANCODE_KP_LEFTPAREN, /* AKEYCODE_NUMPAD_LEFT_PAREN */
  195. SDL_SCANCODE_KP_RIGHTPAREN, /* AKEYCODE_NUMPAD_RIGHT_PAREN */
  196. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_VOLUME_MUTE */
  197. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_INFO */
  198. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CHANNEL_UP */
  199. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CHANNEL_DOWN */
  200. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_ZOOM_IN */
  201. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_ZOOM_OUT */
  202. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV */
  203. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_WINDOW */
  204. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_GUIDE */
  205. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_DVR */
  206. SDL_SCANCODE_AC_BOOKMARKS, /* AKEYCODE_BOOKMARK */
  207. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CAPTIONS */
  208. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_SETTINGS */
  209. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_POWER */
  210. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT */
  211. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STB_POWER */
  212. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_STB_INPUT */
  213. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_AVR_POWER */
  214. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_AVR_INPUT */
  215. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PROG_RED */
  216. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PROG_GREEN */
  217. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PROG_YELLOW */
  218. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PROG_BLUE */
  219. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_APP_SWITCH */
  220. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_1 */
  221. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_2 */
  222. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_3 */
  223. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_4 */
  224. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_5 */
  225. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_6 */
  226. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_7 */
  227. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_8 */
  228. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_9 */
  229. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_10 */
  230. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_11 */
  231. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_12 */
  232. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_13 */
  233. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_14 */
  234. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_15 */
  235. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_BUTTON_16 */
  236. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_LANGUAGE_SWITCH */
  237. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MANNER_MODE */
  238. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_3D_MODE */
  239. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CONTACTS */
  240. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_CALENDAR */
  241. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MUSIC */
  242. SDL_SCANCODE_CALCULATOR, /* AKEYCODE_CALCULATOR */
  243. SDL_SCANCODE_LANG5, /* AKEYCODE_ZENKAKU_HANKAKU */
  244. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_EISU */
  245. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MUHENKAN */
  246. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_HENKAN */
  247. SDL_SCANCODE_LANG3, /* AKEYCODE_KATAKANA_HIRAGANA */
  248. SDL_SCANCODE_INTERNATIONAL3, /* AKEYCODE_YEN */
  249. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_RO */
  250. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_KANA */
  251. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_ASSIST */
  252. SDL_SCANCODE_BRIGHTNESSDOWN, /* AKEYCODE_BRIGHTNESS_DOWN */
  253. SDL_SCANCODE_BRIGHTNESSUP, /* AKEYCODE_BRIGHTNESS_UP */
  254. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_AUDIO_TRACK */
  255. SDL_SCANCODE_SLEEP, /* AKEYCODE_SLEEP */
  256. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_WAKEUP */
  257. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PAIRING */
  258. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_TOP_MENU */
  259. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_11 */
  260. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_12 */
  261. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_LAST_CHANNEL */
  262. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_DATA_SERVICE */
  263. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_VOICE_ASSIST */
  264. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_RADIO_SERVICE */
  265. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TELETEXT */
  266. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_NUMBER_ENTRY */
  267. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TERRESTRIAL_ANALOG */
  268. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TERRESTRIAL_DIGITAL */
  269. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE */
  270. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_BS */
  271. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_CS */
  272. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_SERVICE */
  273. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_NETWORK */
  274. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_ANTENNA_CABLE */
  275. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_1 */
  276. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_2 */
  277. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_3 */
  278. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_4 */
  279. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPOSITE_1 */
  280. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPOSITE_2 */
  281. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPONENT_1 */
  282. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPONENT_2 */
  283. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_VGA_1 */
  284. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION */
  285. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP */
  286. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN */
  287. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_ZOOM_MODE */
  288. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_CONTENTS_MENU */
  289. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_MEDIA_CONTEXT_MENU */
  290. SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TIMER_PROGRAMMING */
  291. SDL_SCANCODE_HELP, /* AKEYCODE_HELP */
  292. };
  293. static SDL_Scancode
  294. TranslateKeycode(int keycode)
  295. {
  296. SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
  297. if (keycode < SDL_arraysize(Android_Keycodes)) {
  298. scancode = Android_Keycodes[keycode];
  299. }
  300. if (scancode == SDL_SCANCODE_UNKNOWN) {
  301. __android_log_print(ANDROID_LOG_INFO, "SDL", "Unknown keycode %d", keycode);
  302. }
  303. return scancode;
  304. }
  305. int
  306. Android_OnKeyDown(int keycode)
  307. {
  308. return SDL_SendKeyboardKey(SDL_PRESSED, TranslateKeycode(keycode));
  309. }
  310. int
  311. Android_OnKeyUp(int keycode)
  312. {
  313. return SDL_SendKeyboardKey(SDL_RELEASED, TranslateKeycode(keycode));
  314. }
  315. SDL_bool
  316. Android_HasScreenKeyboardSupport(_THIS)
  317. {
  318. return SDL_TRUE;
  319. }
  320. SDL_bool
  321. Android_IsScreenKeyboardShown(_THIS, SDL_Window * window)
  322. {
  323. return SDL_IsTextInputActive();
  324. }
  325. void
  326. Android_StartTextInput(_THIS)
  327. {
  328. SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
  329. Android_JNI_ShowTextInput(&videodata->textRect);
  330. }
  331. void
  332. Android_StopTextInput(_THIS)
  333. {
  334. Android_JNI_HideTextInput();
  335. }
  336. void
  337. Android_SetTextInputRect(_THIS, SDL_Rect *rect)
  338. {
  339. SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
  340. if (!rect) {
  341. SDL_InvalidParamError("rect");
  342. return;
  343. }
  344. videodata->textRect = *rect;
  345. }
  346. #endif /* SDL_VIDEO_DRIVER_ANDROID */
  347. /* vi: set ts=4 sw=4 expandtab: */