summaryrefslogtreecommitdiff
path: root/source/3rd-party/SDL2/src/video/qnx/keyboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/3rd-party/SDL2/src/video/qnx/keyboard.c')
-rw-r--r--source/3rd-party/SDL2/src/video/qnx/keyboard.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/source/3rd-party/SDL2/src/video/qnx/keyboard.c b/source/3rd-party/SDL2/src/video/qnx/keyboard.c
new file mode 100644
index 0000000..86c6395
--- /dev/null
+++ b/source/3rd-party/SDL2/src/video/qnx/keyboard.c
@@ -0,0 +1,133 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 2017 BlackBerry Limited
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+#include "../../events/SDL_keyboard_c.h"
+#include "SDL_scancode.h"
+#include "SDL_events.h"
+#include "sdl_qnx.h"
+#include <sys/keycodes.h>
+
+/**
+ * A map thta translates Screen key names to SDL scan codes.
+ * This map is incomplete, but should include most major keys.
+ */
+static int key_to_sdl[] = {
+ [KEYCODE_SPACE] = SDL_SCANCODE_SPACE,
+ [KEYCODE_APOSTROPHE] = SDL_SCANCODE_APOSTROPHE,
+ [KEYCODE_COMMA] = SDL_SCANCODE_COMMA,
+ [KEYCODE_MINUS] = SDL_SCANCODE_MINUS,
+ [KEYCODE_PERIOD] = SDL_SCANCODE_PERIOD,
+ [KEYCODE_SLASH] = SDL_SCANCODE_SLASH,
+ [KEYCODE_ZERO] = SDL_SCANCODE_0,
+ [KEYCODE_ONE] = SDL_SCANCODE_1,
+ [KEYCODE_TWO] = SDL_SCANCODE_2,
+ [KEYCODE_THREE] = SDL_SCANCODE_3,
+ [KEYCODE_FOUR] = SDL_SCANCODE_4,
+ [KEYCODE_FIVE] = SDL_SCANCODE_5,
+ [KEYCODE_SIX] = SDL_SCANCODE_6,
+ [KEYCODE_SEVEN] = SDL_SCANCODE_7,
+ [KEYCODE_EIGHT] = SDL_SCANCODE_8,
+ [KEYCODE_NINE] = SDL_SCANCODE_9,
+ [KEYCODE_SEMICOLON] = SDL_SCANCODE_SEMICOLON,
+ [KEYCODE_EQUAL] = SDL_SCANCODE_EQUALS,
+ [KEYCODE_LEFT_BRACKET] = SDL_SCANCODE_LEFTBRACKET,
+ [KEYCODE_BACK_SLASH] = SDL_SCANCODE_BACKSLASH,
+ [KEYCODE_RIGHT_BRACKET] = SDL_SCANCODE_RIGHTBRACKET,
+ [KEYCODE_GRAVE] = SDL_SCANCODE_GRAVE,
+ [KEYCODE_A] = SDL_SCANCODE_A,
+ [KEYCODE_B] = SDL_SCANCODE_B,
+ [KEYCODE_C] = SDL_SCANCODE_C,
+ [KEYCODE_D] = SDL_SCANCODE_D,
+ [KEYCODE_E] = SDL_SCANCODE_E,
+ [KEYCODE_F] = SDL_SCANCODE_F,
+ [KEYCODE_G] = SDL_SCANCODE_G,
+ [KEYCODE_H] = SDL_SCANCODE_H,
+ [KEYCODE_I] = SDL_SCANCODE_I,
+ [KEYCODE_J] = SDL_SCANCODE_J,
+ [KEYCODE_K] = SDL_SCANCODE_K,
+ [KEYCODE_L] = SDL_SCANCODE_L,
+ [KEYCODE_M] = SDL_SCANCODE_M,
+ [KEYCODE_N] = SDL_SCANCODE_N,
+ [KEYCODE_O] = SDL_SCANCODE_O,
+ [KEYCODE_P] = SDL_SCANCODE_P,
+ [KEYCODE_Q] = SDL_SCANCODE_Q,
+ [KEYCODE_R] = SDL_SCANCODE_R,
+ [KEYCODE_S] = SDL_SCANCODE_S,
+ [KEYCODE_T] = SDL_SCANCODE_T,
+ [KEYCODE_U] = SDL_SCANCODE_U,
+ [KEYCODE_V] = SDL_SCANCODE_V,
+ [KEYCODE_W] = SDL_SCANCODE_W,
+ [KEYCODE_X] = SDL_SCANCODE_X,
+ [KEYCODE_Y] = SDL_SCANCODE_Y,
+ [KEYCODE_Z] = SDL_SCANCODE_Z,
+ [KEYCODE_UP] = SDL_SCANCODE_UP,
+ [KEYCODE_DOWN] = SDL_SCANCODE_DOWN,
+ [KEYCODE_LEFT] = SDL_SCANCODE_LEFT,
+ [KEYCODE_PG_UP] = SDL_SCANCODE_PAGEUP,
+ [KEYCODE_PG_DOWN] = SDL_SCANCODE_PAGEDOWN,
+ [KEYCODE_RIGHT] = SDL_SCANCODE_RIGHT,
+ [KEYCODE_RETURN] = SDL_SCANCODE_RETURN,
+ [KEYCODE_TAB] = SDL_SCANCODE_TAB,
+ [KEYCODE_ESCAPE] = SDL_SCANCODE_ESCAPE,
+};
+
+/**
+ * Called from the event dispatcher when a keyboard event is encountered.
+ * Translates the event such that it can be handled by SDL.
+ * @param event Screen keyboard event
+ */
+void
+handleKeyboardEvent(screen_event_t event)
+{
+ int val;
+ SDL_Scancode scancode;
+
+ // Get the key value.
+ if (screen_get_event_property_iv(event, SCREEN_PROPERTY_SYM, &val) < 0) {
+ return;
+ }
+
+ // Skip unrecognized keys.
+ if ((val < 0) || (val >= SDL_TABLESIZE(key_to_sdl))) {
+ return;
+ }
+
+ // Translate to an SDL scan code.
+ scancode = key_to_sdl[val];
+ if (scancode == 0) {
+ return;
+ }
+
+ // Get event flags (key state).
+ if (screen_get_event_property_iv(event, SCREEN_PROPERTY_FLAGS, &val) < 0) {
+ return;
+ }
+
+ // Propagate the event to SDL.
+ // FIXME:
+ // Need to handle more key states (such as key combinations).
+ if (val & KEY_DOWN) {
+ SDL_SendKeyboardKey(SDL_PRESSED, scancode);
+ } else {
+ SDL_SendKeyboardKey(SDL_RELEASED, scancode);
+ }
+}