From 30cd5551c4cdc7a2d9bbc92dfbc0313764d2bdad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Fri, 5 Jan 2018 16:32:06 +0100 Subject: Add the remaining keyboard functions Also adds defines for all the keycode and scancode in SDL 2.0.7. --- README.asciidoc | 10 +- c_src/esdl2.h | 8 ++ c_src/sdl_keyboard.c | 103 ++++++++++++++++++- c_src/sdl_rect.c | 57 +++++++++++ c_src/sdl_renderer.c | 42 -------- ebin/esdl2.app | 2 +- include/sdl_keycode.hrl | 261 +++++++++++++++++++++++++++++++++++++++++++++++ include/sdl_scancode.hrl | 261 +++++++++++++++++++++++++++++++++++++++++++++++ src/esdl2.erl | 20 ++++ src/sdl_keyboard.erl | 29 ++++++ src/sdl_rect.erl | 21 ++++ src/sdl_renderer.erl | 35 +++---- 12 files changed, 778 insertions(+), 71 deletions(-) create mode 100644 c_src/sdl_rect.c create mode 100644 include/sdl_keycode.hrl create mode 100644 include/sdl_scancode.hrl create mode 100644 src/sdl_rect.erl diff --git a/README.asciidoc b/README.asciidoc index b3f2f19..a52dc35 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -11,9 +11,12 @@ corresponding to the public headers. * 'SDL.h' * 'SDL_blendmode.h' * 'SDL_cpuinfo.h' -* 'SDL_mouse.h' * 'SDL_filesystem.h' +* 'SDL_keyboard.h' +* 'SDL_keycode.h' +* 'SDL_mouse.h' * 'SDL_power.h' +* 'SDL_scancode.h' == Partially implemented @@ -57,7 +60,7 @@ corresponding to the public headers. ** `SDL_EventState` and `SDL_GetEventState` ** `SDL_RegisterEvents` * 'SDL_hints.h': We only have a proof of concept callback system. -* 'SDL_keyboard.h': A few more functions are missing. +* 'SDL_rect.h': Everything is missing except the map to point/rect conversion functions. * 'SDL_render.h': The following elements are missing: ** `SDL_TextureAccess` enum ** `SDL_TextureModulate` enum @@ -149,13 +152,10 @@ corresponding to the public headers. * 'SDL_gesture.h' * 'SDL_haptic.h' * 'SDL_joystick.h' -* 'SDL_keycode.h' (have a header containing the values) * 'SDL_messagebox.h' * 'SDL_pixels.h' * 'SDL_platform.h' -* 'SDL_rect.h' (though we have a rect data type in sdl_renderer) * 'SDL_rwops.h' (unclear if we need it) -* 'SDL_scancode.h' (have a header containing the values) * 'SDL_shape.h' * 'SDL_system.h' * 'SDL_syswm.h' diff --git a/c_src/esdl2.h b/c_src/esdl2.h index 7fa237f..31a1fcc 100644 --- a/c_src/esdl2.h +++ b/c_src/esdl2.h @@ -272,12 +272,17 @@ F(get_key_from_name, 1) \ F(get_key_from_scancode, 1) \ F(get_key_name, 1) \ + F(get_keyboard_focus, 0) \ + F(get_keyboard_state, 0) \ F(get_mod_state, 0) \ F(get_scancode_from_key, 1) \ F(get_scancode_from_name, 1) \ F(get_scancode_name, 1) \ + F(has_screen_keyboard_support, 0) \ + F(is_screen_keyboard_shown, 1) \ F(is_text_input_active, 0) \ F(set_mod_state, 1) \ + F(set_text_input_rect, 1) \ F(start_text_input, 0) \ F(stop_text_input, 0) \ /* sdl_mouse */ \ @@ -384,6 +389,9 @@ NIF_ENUM_TO_ATOM_FUNCTION_DECL(window_event_to_atom, Uint8) NIF_LIST_TO_FLAGS_FUNCTION_DECL(keymod_list_to_flags, Uint16) NIF_FLAGS_TO_LIST_FUNCTION_DECL(keymod_flags_to_list, Uint16) +int map_to_point(ErlNifEnv*, ERL_NIF_TERM, SDL_Point*); +int map_to_rect(ErlNifEnv*, ERL_NIF_TERM, SDL_Rect*); + ERL_NIF_TERM mouse_state_to_list(ErlNifEnv*, Uint32); // -- diff --git a/c_src/sdl_keyboard.c b/c_src/sdl_keyboard.c index 0e961a8..f33a69d 100644 --- a/c_src/sdl_keyboard.c +++ b/c_src/sdl_keyboard.c @@ -147,8 +147,51 @@ NIF_FUNCTION(get_scancode_name) return enif_make_binary(env, &bin); } -// @todo get_keyboard_focus -// @todo get_keyboard_state +// get_keyboard_focus + +NIF_CALL_HANDLER(thread_get_keyboard_focus) +{ + SDL_Window* window; + + window = SDL_GetKeyboardFocus(); + + if (!window) + return atom_undefined; + + return esdl2_windows_find(env, window); +} + +NIF_FUNCTION(get_keyboard_focus) +{ + return nif_thread_call(env, thread_get_keyboard_focus, 0); +} + +// get_keyboard_state + +NIF_CALL_HANDLER(thread_get_keyboard_state) +{ + const Uint8* state; + int i, numkeys; + ERL_NIF_TERM map; + + state = SDL_GetKeyboardState(&numkeys); + + map = enif_make_new_map(env); + + for (i = 0; i < numkeys; i++) { + enif_make_map_put(env, map, + enif_make_int(env, i), + state[i] ? atom_true : atom_false, + &map); + } + + return map; +} + +NIF_FUNCTION(get_keyboard_state) +{ + return nif_thread_call(env, thread_get_keyboard_state, 0); +} // get_mod_state @@ -166,8 +209,40 @@ NIF_FUNCTION(get_mod_state) return nif_thread_call(env, thread_get_mod_state, 0); } -// @todo has_screen_keyboard_support -// @todo is_screen_keyboard_shown +// has_screen_keyboard_support + +NIF_CALL_HANDLER(thread_has_screen_keyboard_support) +{ + if (SDL_HasScreenKeyboardSupport()) + return atom_true; + + return atom_false; +} + +NIF_FUNCTION(has_screen_keyboard_support) +{ + return nif_thread_call(env, thread_has_screen_keyboard_support, 0); +} + +// is_screen_keyboard_shown + +NIF_CALL_HANDLER(thread_is_screen_keyboard_shown) +{ + if (SDL_IsScreenKeyboardShown(args[0])) + return atom_true; + + return atom_false; +} + +NIF_FUNCTION(is_screen_keyboard_shown) +{ + void* window_res; + + BADARG_IF(!enif_get_resource(env, argv[0], res_Window, &window_res)); + + return nif_thread_call(env, thread_is_screen_keyboard_shown, 1, + NIF_RES_GET(Window, window_res)); +} // is_text_input_active @@ -200,7 +275,25 @@ NIF_FUNCTION(set_mod_state) return nif_thread_cast(env, thread_set_mod_state, 1, mod); } -// @todo set_text_input_rect +// set_text_input_rect + +NIF_CAST_HANDLER(thread_set_text_input_rect) +{ + SDL_SetTextInputRect(args[0]); +} + +NIF_FUNCTION(set_text_input_rect) +{ + SDL_Rect* rect = NULL; + + rect = (SDL_Rect*)enif_alloc(sizeof(SDL_Rect)); + if (!map_to_rect(env, argv[0], rect)) { + enif_free(rect); + return enif_make_badarg(env); + } + + return nif_thread_cast(env, thread_set_text_input_rect, 1, rect); +} // start_text_input diff --git a/c_src/sdl_rect.c b/c_src/sdl_rect.c new file mode 100644 index 0000000..eb04d5b --- /dev/null +++ b/c_src/sdl_rect.c @@ -0,0 +1,57 @@ +// Copyright (c) 2014-2018, Loïc Hoguin +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +#include "esdl2.h" + +int map_to_point(ErlNifEnv* env, ERL_NIF_TERM map, SDL_Point* point) +{ + ERL_NIF_TERM x, y; + + if (!enif_get_map_value(env, map, atom_x, &x)) + return 0; + if (!enif_get_map_value(env, map, atom_y, &y)) + return 0; + + if (!enif_get_int(env, x, &point->x)) + return 0; + if (!enif_get_int(env, y, &point->y)) + return 0; + + return 1; +} + +int map_to_rect(ErlNifEnv* env, ERL_NIF_TERM map, SDL_Rect* rect) +{ + ERL_NIF_TERM x, y, w, h; + + if (!enif_get_map_value(env, map, atom_x, &x)) + return 0; + if (!enif_get_map_value(env, map, atom_y, &y)) + return 0; + if (!enif_get_map_value(env, map, atom_w, &w)) + return 0; + if (!enif_get_map_value(env, map, atom_h, &h)) + return 0; + + if (!enif_get_int(env, x, &rect->x)) + return 0; + if (!enif_get_int(env, y, &rect->y)) + return 0; + if (!enif_get_int(env, w, &rect->w)) + return 0; + if (!enif_get_int(env, h, &rect->h)) + return 0; + + return 1; +} diff --git a/c_src/sdl_renderer.c b/c_src/sdl_renderer.c index 17eaa07..60bfe85 100644 --- a/c_src/sdl_renderer.c +++ b/c_src/sdl_renderer.c @@ -37,48 +37,6 @@ static NIF_LIST_TO_FLAGS_FUNCTION(list_to_renderer_flags, Uint32, RENDERER_FLAGS static NIF_LIST_TO_FLAGS_FUNCTION(list_to_flip_flags, SDL_RendererFlip, FLIP_FLAGS) -static int map_to_point(ErlNifEnv* env, ERL_NIF_TERM map, SDL_Point* point) -{ - ERL_NIF_TERM x, y; - - if (!enif_get_map_value(env, map, atom_x, &x)) - return 0; - if (!enif_get_map_value(env, map, atom_y, &y)) - return 0; - - if (!enif_get_int(env, x, &point->x)) - return 0; - if (!enif_get_int(env, y, &point->y)) - return 0; - - return 1; -} - -static int map_to_rect(ErlNifEnv* env, ERL_NIF_TERM map, SDL_Rect* rect) -{ - ERL_NIF_TERM x, y, w, h; - - if (!enif_get_map_value(env, map, atom_x, &x)) - return 0; - if (!enif_get_map_value(env, map, atom_y, &y)) - return 0; - if (!enif_get_map_value(env, map, atom_w, &w)) - return 0; - if (!enif_get_map_value(env, map, atom_h, &h)) - return 0; - - if (!enif_get_int(env, x, &rect->x)) - return 0; - if (!enif_get_int(env, y, &rect->y)) - return 0; - if (!enif_get_int(env, w, &rect->w)) - return 0; - if (!enif_get_int(env, h, &rect->h)) - return 0; - - return 1; -} - // create_renderer NIF_CALL_HANDLER(thread_create_renderer) diff --git a/ebin/esdl2.app b/ebin/esdl2.app index 3b48762..e4b849b 100644 --- a/ebin/esdl2.app +++ b/ebin/esdl2.app @@ -1,7 +1,7 @@ {application, 'esdl2', [ {description, "SDL2 Erlang NIF."}, {vsn, "0.1.0"}, - {modules, ['esdl2','esdl2_app','esdl2_callbacks','esdl2_sup','sdl','sdl_blend_mode','sdl_clipboard','sdl_cpu_info','sdl_cursor','sdl_events','sdl_filesystem','sdl_gl','sdl_hints','sdl_keyboard','sdl_keycode','sdl_mouse','sdl_power','sdl_renderer','sdl_surface','sdl_texture','sdl_version','sdl_window']}, + {modules, ['esdl2','esdl2_app','esdl2_callbacks','esdl2_sup','sdl','sdl_blend_mode','sdl_clipboard','sdl_cpu_info','sdl_cursor','sdl_events','sdl_filesystem','sdl_gl','sdl_hints','sdl_keyboard','sdl_keycode','sdl_mouse','sdl_power','sdl_rect','sdl_renderer','sdl_surface','sdl_texture','sdl_version','sdl_window']}, {registered, [esdl2_sup]}, {applications, [kernel,stdlib]}, {mod, {esdl2_app, []}}, diff --git a/include/sdl_keycode.hrl b/include/sdl_keycode.hrl new file mode 100644 index 0000000..f33765c --- /dev/null +++ b/include/sdl_keycode.hrl @@ -0,0 +1,261 @@ +%% Copyright (c) 2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-ifndef(__SDL_KEYCODE_HRL__). +-define(__SDL_KEYCODE_HRL__, 1). + +-define(SDLK_SCANCODE_MASK, (1 bsl 30)). +-define(SDL_SCANCODE_TO_KEYCODE(X), (X bor ?SDLK_SCANCODE_MASK)). + +-define(SDLK_RETURN, $\r). +-define(SDLK_ESCAPE, $\033). +-define(SDLK_BACKSPACE, $\b). +-define(SDLK_TAB, $\t). +-define(SDLK_SPACE, $ ). +-define(SDLK_EXCLAIM, $!). +-define(SDLK_QUOTEDBL, $"). +-define(SDLK_HASH, $#). +-define(SDLK_PERCENT, $%). +-define(SDLK_DOLLAR, $$). +-define(SDLK_AMPERSAND, $&). +-define(SDLK_QUOTE, $'). +-define(SDLK_LEFTPAREN, $(). +-define(SDLK_RIGHTPAREN, $)). +-define(SDLK_ASTERISK, $*). +-define(SDLK_PLUS, $+). +-define(SDLK_COMMA, $,). +-define(SDLK_MINUS, $-). +-define(SDLK_PERIOD, $.). +-define(SDLK_SLASH, $/). +-define(SDLK_0, $0). +-define(SDLK_1, $1). +-define(SDLK_2, $2). +-define(SDLK_3, $3). +-define(SDLK_4, $4). +-define(SDLK_5, $5). +-define(SDLK_6, $6). +-define(SDLK_7, $7). +-define(SDLK_8, $8). +-define(SDLK_9, $9). +-define(SDLK_COLON, $:). +-define(SDLK_SEMICOLON, $;). +-define(SDLK_LESS, $<). +-define(SDLK_EQUALS, $=). +-define(SDLK_GREATER, $>). +-define(SDLK_QUESTION, $?). +-define(SDLK_AT, $@). +-define(SDLK_LEFTBRACKET, $[). +-define(SDLK_BACKSLASH, $\\). +-define(SDLK_RIGHTBRACKET, $]). +-define(SDLK_CARET, $^). +-define(SDLK_UNDERSCORE, $_). +-define(SDLK_BACKQUOTE, $`). +-define(SDLK_a, $a). +-define(SDLK_b, $b). +-define(SDLK_c, $c). +-define(SDLK_d, $d). +-define(SDLK_e, $e). +-define(SDLK_f, $f). +-define(SDLK_g, $g). +-define(SDLK_h, $h). +-define(SDLK_i, $i). +-define(SDLK_j, $j). +-define(SDLK_k, $k). +-define(SDLK_l, $l). +-define(SDLK_m, $m). +-define(SDLK_n, $n). +-define(SDLK_o, $o). +-define(SDLK_p, $p). +-define(SDLK_q, $q). +-define(SDLK_r, $r). +-define(SDLK_s, $s). +-define(SDLK_t, $t). +-define(SDLK_u, $u). +-define(SDLK_v, $v). +-define(SDLK_w, $w). +-define(SDLK_x, $x). +-define(SDLK_y, $y). +-define(SDLK_z, $z). +-define(SDLK_CAPSLOCK, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CAPSLOCK)). +-define(SDLK_F1, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F1)). +-define(SDLK_F2, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F2)). +-define(SDLK_F3, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F3)). +-define(SDLK_F4, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F4)). +-define(SDLK_F5, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F5)). +-define(SDLK_F6, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F6)). +-define(SDLK_F7, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F7)). +-define(SDLK_F8, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F8)). +-define(SDLK_F9, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F9)). +-define(SDLK_F10, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F10)). +-define(SDLK_F11, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F11)). +-define(SDLK_F12, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F12)). +-define(SDLK_PRINTSCREEN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_PRINTSCREEN)). +-define(SDLK_SCROLLLOCK, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_SCROLLLOCK)). +-define(SDLK_PAUSE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_PAUSE)). +-define(SDLK_INSERT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_INSERT)). +-define(SDLK_HOME, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_HOME)). +-define(SDLK_PAGEUP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_PAGEUP)). +-define(SDLK_DELETE, $\177). +-define(SDLK_END, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_END)). +-define(SDLK_PAGEDOWN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_PAGEDOWN)). +-define(SDLK_RIGHT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_RIGHT)). +-define(SDLK_LEFT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_LEFT)). +-define(SDLK_DOWN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_DOWN)). +-define(SDLK_UP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_UP)). +-define(SDLK_NUMLOCKCLEAR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_NUMLOCKCLEAR)). +-define(SDLK_KP_DIVIDE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_DIVIDE)). +-define(SDLK_KP_MULTIPLY, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MULTIPLY)). +-define(SDLK_KP_MINUS, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MINUS)). +-define(SDLK_KP_PLUS, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_PLUS)). +-define(SDLK_KP_ENTER, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_ENTER)). +-define(SDLK_KP_1, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_1)). +-define(SDLK_KP_2, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_2)). +-define(SDLK_KP_3, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_3)). +-define(SDLK_KP_4, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_4)). +-define(SDLK_KP_5, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_5)). +-define(SDLK_KP_6, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_6)). +-define(SDLK_KP_7, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_7)). +-define(SDLK_KP_8, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_8)). +-define(SDLK_KP_9, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_9)). +-define(SDLK_KP_0, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_0)). +-define(SDLK_KP_PERIOD, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_PERIOD)). +-define(SDLK_APPLICATION, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_APPLICATION)). +-define(SDLK_POWER, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_POWER)). +-define(SDLK_KP_EQUALS, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_EQUALS)). +-define(SDLK_F13, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F13)). +-define(SDLK_F14, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F14)). +-define(SDLK_F15, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F15)). +-define(SDLK_F16, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F16)). +-define(SDLK_F17, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F17)). +-define(SDLK_F18, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F18)). +-define(SDLK_F19, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F19)). +-define(SDLK_F20, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F20)). +-define(SDLK_F21, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F21)). +-define(SDLK_F22, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F22)). +-define(SDLK_F23, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F23)). +-define(SDLK_F24, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_F24)). +-define(SDLK_EXECUTE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_EXECUTE)). +-define(SDLK_HELP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_HELP)). +-define(SDLK_MENU, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_MENU)). +-define(SDLK_SELECT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_SELECT)). +-define(SDLK_STOP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_STOP)). +-define(SDLK_AGAIN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AGAIN)). +-define(SDLK_UNDO, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_UNDO)). +-define(SDLK_CUT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CUT)). +-define(SDLK_COPY, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_COPY)). +-define(SDLK_PASTE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_PASTE)). +-define(SDLK_FIND, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_FIND)). +-define(SDLK_MUTE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_MUTE)). +-define(SDLK_VOLUMEUP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_VOLUMEUP)). +-define(SDLK_VOLUMEDOWN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_VOLUMEDOWN)). +-define(SDLK_KP_COMMA, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_COMMA)). +-define(SDLK_KP_EQUALSAS400, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_EQUALSAS400)). +-define(SDLK_ALTERASE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_ALTERASE)). +-define(SDLK_SYSREQ, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_SYSREQ)). +-define(SDLK_CANCEL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CANCEL)). +-define(SDLK_CLEAR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CLEAR)). +-define(SDLK_PRIOR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_PRIOR)). +-define(SDLK_RETURN2, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_RETURN2)). +-define(SDLK_SEPARATOR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_SEPARATOR)). +-define(SDLK_OUT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_OUT)). +-define(SDLK_OPER, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_OPER)). +-define(SDLK_CLEARAGAIN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CLEARAGAIN)). +-define(SDLK_CRSEL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CRSEL)). +-define(SDLK_EXSEL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_EXSEL)). +-define(SDLK_KP_00, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_00)). +-define(SDLK_KP_000, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_000)). +-define(SDLK_THOUSANDSSEPARATOR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_THOUSANDSSEPARATOR)). +-define(SDLK_DECIMALSEPARATOR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_DECIMALSEPARATOR)). +-define(SDLK_CURRENCYUNIT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CURRENCYUNIT)). +-define(SDLK_CURRENCYSUBUNIT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CURRENCYSUBUNIT)). +-define(SDLK_KP_LEFTPAREN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_LEFTPAREN)). +-define(SDLK_KP_RIGHTPAREN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_RIGHTPAREN)). +-define(SDLK_KP_LEFTBRACE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_LEFTBRACE)). +-define(SDLK_KP_RIGHTBRACE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_RIGHTBRACE)). +-define(SDLK_KP_TAB, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_TAB)). +-define(SDLK_KP_BACKSPACE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_BACKSPACE)). +-define(SDLK_KP_A, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_A)). +-define(SDLK_KP_B, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_B)). +-define(SDLK_KP_C, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_C)). +-define(SDLK_KP_D, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_D)). +-define(SDLK_KP_E, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_E)). +-define(SDLK_KP_F, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_F)). +-define(SDLK_KP_XOR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_XOR)). +-define(SDLK_KP_POWER, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_POWER)). +-define(SDLK_KP_PERCENT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_PERCENT)). +-define(SDLK_KP_LESS, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_LESS)). +-define(SDLK_KP_GREATER, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_GREATER)). +-define(SDLK_KP_AMPERSAND, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_AMPERSAND)). +-define(SDLK_KP_DBLAMPERSAND, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_DBLAMPERSAND)). +-define(SDLK_KP_VERTICALBAR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_VERTICALBAR)). +-define(SDLK_KP_DBLVERTICALBAR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_DBLVERTICALBAR)). +-define(SDLK_KP_COLON, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_COLON)). +-define(SDLK_KP_HASH, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_HASH)). +-define(SDLK_KP_SPACE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_SPACE)). +-define(SDLK_KP_AT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_AT)). +-define(SDLK_KP_EXCLAM, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_EXCLAM)). +-define(SDLK_KP_MEMSTORE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MEMSTORE)). +-define(SDLK_KP_MEMRECALL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MEMRECALL)). +-define(SDLK_KP_MEMCLEAR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MEMCLEAR)). +-define(SDLK_KP_MEMADD, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MEMADD)). +-define(SDLK_KP_MEMSUBTRACT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MEMSUBTRACT)). +-define(SDLK_KP_MEMMULTIPLY, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MEMMULTIPLY)). +-define(SDLK_KP_MEMDIVIDE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_MEMDIVIDE)). +-define(SDLK_KP_PLUSMINUS, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_PLUSMINUS)). +-define(SDLK_KP_CLEAR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_CLEAR)). +-define(SDLK_KP_CLEARENTRY, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_CLEARENTRY)). +-define(SDLK_KP_BINARY, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_BINARY)). +-define(SDLK_KP_OCTAL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_OCTAL)). +-define(SDLK_KP_DECIMAL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_DECIMAL)). +-define(SDLK_KP_HEXADECIMAL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KP_HEXADECIMAL)). +-define(SDLK_LCTRL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_LCTRL)). +-define(SDLK_LSHIFT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_LSHIFT)). +-define(SDLK_LALT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_LALT)). +-define(SDLK_LGUI, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_LGUI)). +-define(SDLK_RCTRL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_RCTRL)). +-define(SDLK_RSHIFT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_RSHIFT)). +-define(SDLK_RALT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_RALT)). +-define(SDLK_RGUI, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_RGUI)). +-define(SDLK_MODE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_MODE)). +-define(SDLK_AUDIONEXT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AUDIONEXT)). +-define(SDLK_AUDIOPREV, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AUDIOPREV)). +-define(SDLK_AUDIOSTOP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AUDIOSTOP)). +-define(SDLK_AUDIOPLAY, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AUDIOPLAY)). +-define(SDLK_AUDIOMUTE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AUDIOMUTE)). +-define(SDLK_MEDIASELECT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_MEDIASELECT)). +-define(SDLK_WWW, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_WWW)). +-define(SDLK_MAIL, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_MAIL)). +-define(SDLK_CALCULATOR, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_CALCULATOR)). +-define(SDLK_COMPUTER, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_COMPUTER)). +-define(SDLK_AC_SEARCH, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AC_SEARCH)). +-define(SDLK_AC_HOME, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AC_HOME)). +-define(SDLK_AC_BACK, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AC_BACK)). +-define(SDLK_AC_FORWARD, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AC_FORWARD)). +-define(SDLK_AC_STOP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AC_STOP)). +-define(SDLK_AC_REFRESH, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AC_REFRESH)). +-define(SDLK_AC_BOOKMARKS, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AC_BOOKMARKS)). +-define(SDLK_BRIGHTNESSDOWN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_BRIGHTNESSDOWN)). +-define(SDLK_BRIGHTNESSUP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_BRIGHTNESSUP)). +-define(SDLK_DISPLAYSWITCH, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_DISPLAYSWITCH)). +-define(SDLK_KBDILLUMTOGGLE, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KBDILLUMTOGGLE)). +-define(SDLK_KBDILLUMDOWN, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KBDILLUMDOWN)). +-define(SDLK_KBDILLUMUP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_KBDILLUMUP)). +-define(SDLK_EJECT, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_EJECT)). +-define(SDLK_SLEEP, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_SLEEP)). +-define(SDLK_APP1, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_APP1)). +-define(SDLK_APP2, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_APP2)). +-define(SDLK_AUDIOREWIND, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AUDIOREWIND)). +-define(SDLK_AUDIOFASTFORWARD, ?SDL_SCANCODE_TO_KEYCODE(?SDL_SCANCODE_AUDIOFASTFORWARD)). + +-endif. diff --git a/include/sdl_scancode.hrl b/include/sdl_scancode.hrl new file mode 100644 index 0000000..54f9df6 --- /dev/null +++ b/include/sdl_scancode.hrl @@ -0,0 +1,261 @@ +%% Copyright (c) 2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-ifndef(__SDL_SCANCODE_HRL__). +-define(__SDL_SCANCODE_HRL__, 1). + +-define(SDL_SCANCODE_A, 4). +-define(SDL_SCANCODE_B, 5). +-define(SDL_SCANCODE_C, 6). +-define(SDL_SCANCODE_D, 7). +-define(SDL_SCANCODE_E, 8). +-define(SDL_SCANCODE_F, 9). +-define(SDL_SCANCODE_G, 10). +-define(SDL_SCANCODE_H, 11). +-define(SDL_SCANCODE_I, 12). +-define(SDL_SCANCODE_J, 13). +-define(SDL_SCANCODE_K, 14). +-define(SDL_SCANCODE_L, 15). +-define(SDL_SCANCODE_M, 16). +-define(SDL_SCANCODE_N, 17). +-define(SDL_SCANCODE_O, 18). +-define(SDL_SCANCODE_P, 19). +-define(SDL_SCANCODE_Q, 20). +-define(SDL_SCANCODE_R, 21). +-define(SDL_SCANCODE_S, 22). +-define(SDL_SCANCODE_T, 23). +-define(SDL_SCANCODE_U, 24). +-define(SDL_SCANCODE_V, 25). +-define(SDL_SCANCODE_W, 26). +-define(SDL_SCANCODE_X, 27). +-define(SDL_SCANCODE_Y, 28). +-define(SDL_SCANCODE_Z, 29). +-define(SDL_SCANCODE_1, 30). +-define(SDL_SCANCODE_2, 31). +-define(SDL_SCANCODE_3, 32). +-define(SDL_SCANCODE_4, 33). +-define(SDL_SCANCODE_5, 34). +-define(SDL_SCANCODE_6, 35). +-define(SDL_SCANCODE_7, 36). +-define(SDL_SCANCODE_8, 37). +-define(SDL_SCANCODE_9, 38). +-define(SDL_SCANCODE_0, 39). +-define(SDL_SCANCODE_RETURN, 40). +-define(SDL_SCANCODE_ESCAPE, 41). +-define(SDL_SCANCODE_BACKSPACE, 42). +-define(SDL_SCANCODE_TAB, 43). +-define(SDL_SCANCODE_SPACE, 44). +-define(SDL_SCANCODE_MINUS, 45). +-define(SDL_SCANCODE_EQUALS, 46). +-define(SDL_SCANCODE_LEFTBRACKET, 47). +-define(SDL_SCANCODE_RIGHTBRACKET, 48). +-define(SDL_SCANCODE_BACKSLASH, 49). +-define(SDL_SCANCODE_NONUSHASH, 50). +-define(SDL_SCANCODE_SEMICOLON, 51). +-define(SDL_SCANCODE_APOSTROPHE, 52). +-define(SDL_SCANCODE_GRAVE, 53). +-define(SDL_SCANCODE_COMMA, 54). +-define(SDL_SCANCODE_PERIOD, 55). +-define(SDL_SCANCODE_SLASH, 56). +-define(SDL_SCANCODE_CAPSLOCK, 57). +-define(SDL_SCANCODE_F1, 58). +-define(SDL_SCANCODE_F2, 59). +-define(SDL_SCANCODE_F3, 60). +-define(SDL_SCANCODE_F4, 61). +-define(SDL_SCANCODE_F5, 62). +-define(SDL_SCANCODE_F6, 63). +-define(SDL_SCANCODE_F7, 64). +-define(SDL_SCANCODE_F8, 65). +-define(SDL_SCANCODE_F9, 66). +-define(SDL_SCANCODE_F10, 67). +-define(SDL_SCANCODE_F11, 68). +-define(SDL_SCANCODE_F12, 69). +-define(SDL_SCANCODE_PRINTSCREEN, 70). +-define(SDL_SCANCODE_SCROLLLOCK, 71). +-define(SDL_SCANCODE_PAUSE, 72). +-define(SDL_SCANCODE_INSERT, 73). +-define(SDL_SCANCODE_HOME, 74). +-define(SDL_SCANCODE_PAGEUP, 75). +-define(SDL_SCANCODE_DELETE, 76). +-define(SDL_SCANCODE_END, 77). +-define(SDL_SCANCODE_PAGEDOWN, 78). +-define(SDL_SCANCODE_RIGHT, 79). +-define(SDL_SCANCODE_LEFT, 80). +-define(SDL_SCANCODE_DOWN, 81). +-define(SDL_SCANCODE_UP, 82). +-define(SDL_SCANCODE_NUMLOCKCLEAR, 83). +-define(SDL_SCANCODE_KP_DIVIDE, 84). +-define(SDL_SCANCODE_KP_MULTIPLY, 85). +-define(SDL_SCANCODE_KP_MINUS, 86). +-define(SDL_SCANCODE_KP_PLUS, 87). +-define(SDL_SCANCODE_KP_ENTER, 88). +-define(SDL_SCANCODE_KP_1, 89). +-define(SDL_SCANCODE_KP_2, 90). +-define(SDL_SCANCODE_KP_3, 91). +-define(SDL_SCANCODE_KP_4, 92). +-define(SDL_SCANCODE_KP_5, 93). +-define(SDL_SCANCODE_KP_6, 94). +-define(SDL_SCANCODE_KP_7, 95). +-define(SDL_SCANCODE_KP_8, 96). +-define(SDL_SCANCODE_KP_9, 97). +-define(SDL_SCANCODE_KP_0, 98). +-define(SDL_SCANCODE_KP_PERIOD, 99). +-define(SDL_SCANCODE_NONUSBACKSLASH, 100). +-define(SDL_SCANCODE_APPLICATION, 101). +-define(SDL_SCANCODE_POWER, 102). +-define(SDL_SCANCODE_KP_EQUALS, 103). +-define(SDL_SCANCODE_F13, 104). +-define(SDL_SCANCODE_F14, 105). +-define(SDL_SCANCODE_F15, 106). +-define(SDL_SCANCODE_F16, 107). +-define(SDL_SCANCODE_F17, 108). +-define(SDL_SCANCODE_F18, 109). +-define(SDL_SCANCODE_F19, 110). +-define(SDL_SCANCODE_F20, 111). +-define(SDL_SCANCODE_F21, 112). +-define(SDL_SCANCODE_F22, 113). +-define(SDL_SCANCODE_F23, 114). +-define(SDL_SCANCODE_F24, 115). +-define(SDL_SCANCODE_EXECUTE, 116). +-define(SDL_SCANCODE_HELP, 117). +-define(SDL_SCANCODE_MENU, 118). +-define(SDL_SCANCODE_SELECT, 119). +-define(SDL_SCANCODE_STOP, 120). +-define(SDL_SCANCODE_AGAIN, 121). +-define(SDL_SCANCODE_UNDO, 122). +-define(SDL_SCANCODE_CUT, 123). +-define(SDL_SCANCODE_COPY, 124). +-define(SDL_SCANCODE_PASTE, 125). +-define(SDL_SCANCODE_FIND, 126). +-define(SDL_SCANCODE_MUTE, 127). +-define(SDL_SCANCODE_VOLUMEUP, 128). +-define(SDL_SCANCODE_VOLUMEDOWN, 129). +-define(SDL_SCANCODE_KP_COMMA, 133). +-define(SDL_SCANCODE_KP_EQUALSAS400, 134). +-define(SDL_SCANCODE_INTERNATIONAL1, 135). +-define(SDL_SCANCODE_INTERNATIONAL2, 136). +-define(SDL_SCANCODE_INTERNATIONAL3, 137). +-define(SDL_SCANCODE_INTERNATIONAL4, 138). +-define(SDL_SCANCODE_INTERNATIONAL5, 139). +-define(SDL_SCANCODE_INTERNATIONAL6, 140). +-define(SDL_SCANCODE_INTERNATIONAL7, 141). +-define(SDL_SCANCODE_INTERNATIONAL8, 142). +-define(SDL_SCANCODE_INTERNATIONAL9, 143). +-define(SDL_SCANCODE_LANG1, 144). +-define(SDL_SCANCODE_LANG2, 145). +-define(SDL_SCANCODE_LANG3, 146). +-define(SDL_SCANCODE_LANG4, 147). +-define(SDL_SCANCODE_LANG5, 148). +-define(SDL_SCANCODE_LANG6, 149). +-define(SDL_SCANCODE_LANG7, 150). +-define(SDL_SCANCODE_LANG8, 151). +-define(SDL_SCANCODE_LANG9, 152). +-define(SDL_SCANCODE_ALTERASE, 153). +-define(SDL_SCANCODE_SYSREQ, 154). +-define(SDL_SCANCODE_CANCEL, 155). +-define(SDL_SCANCODE_CLEAR, 156). +-define(SDL_SCANCODE_PRIOR, 157). +-define(SDL_SCANCODE_RETURN2, 158). +-define(SDL_SCANCODE_SEPARATOR, 159). +-define(SDL_SCANCODE_OUT, 160). +-define(SDL_SCANCODE_OPER, 161). +-define(SDL_SCANCODE_CLEARAGAIN, 162). +-define(SDL_SCANCODE_CRSEL, 163). +-define(SDL_SCANCODE_EXSEL, 164). +-define(SDL_SCANCODE_KP_00, 176). +-define(SDL_SCANCODE_KP_000, 177). +-define(SDL_SCANCODE_THOUSANDSSEPARATOR, 178). +-define(SDL_SCANCODE_DECIMALSEPARATOR, 179). +-define(SDL_SCANCODE_CURRENCYUNIT, 180). +-define(SDL_SCANCODE_CURRENCYSUBUNIT, 181). +-define(SDL_SCANCODE_KP_LEFTPAREN, 182). +-define(SDL_SCANCODE_KP_RIGHTPAREN, 183). +-define(SDL_SCANCODE_KP_LEFTBRACE, 184). +-define(SDL_SCANCODE_KP_RIGHTBRACE, 185). +-define(SDL_SCANCODE_KP_TAB, 186). +-define(SDL_SCANCODE_KP_BACKSPACE, 187). +-define(SDL_SCANCODE_KP_A, 188). +-define(SDL_SCANCODE_KP_B, 189). +-define(SDL_SCANCODE_KP_C, 190). +-define(SDL_SCANCODE_KP_D, 191). +-define(SDL_SCANCODE_KP_E, 192). +-define(SDL_SCANCODE_KP_F, 193). +-define(SDL_SCANCODE_KP_XOR, 194). +-define(SDL_SCANCODE_KP_POWER, 195). +-define(SDL_SCANCODE_KP_PERCENT, 196). +-define(SDL_SCANCODE_KP_LESS, 197). +-define(SDL_SCANCODE_KP_GREATER, 198). +-define(SDL_SCANCODE_KP_AMPERSAND, 199). +-define(SDL_SCANCODE_KP_DBLAMPERSAND, 200). +-define(SDL_SCANCODE_KP_VERTICALBAR, 201). +-define(SDL_SCANCODE_KP_DBLVERTICALBAR, 202). +-define(SDL_SCANCODE_KP_COLON, 203). +-define(SDL_SCANCODE_KP_HASH, 204). +-define(SDL_SCANCODE_KP_SPACE, 205). +-define(SDL_SCANCODE_KP_AT, 206). +-define(SDL_SCANCODE_KP_EXCLAM, 207). +-define(SDL_SCANCODE_KP_MEMSTORE, 208). +-define(SDL_SCANCODE_KP_MEMRECALL, 209). +-define(SDL_SCANCODE_KP_MEMCLEAR, 210). +-define(SDL_SCANCODE_KP_MEMADD, 211). +-define(SDL_SCANCODE_KP_MEMSUBTRACT, 212). +-define(SDL_SCANCODE_KP_MEMMULTIPLY, 213). +-define(SDL_SCANCODE_KP_MEMDIVIDE, 214). +-define(SDL_SCANCODE_KP_PLUSMINUS, 215). +-define(SDL_SCANCODE_KP_CLEAR, 216). +-define(SDL_SCANCODE_KP_CLEARENTRY, 217). +-define(SDL_SCANCODE_KP_BINARY, 218). +-define(SDL_SCANCODE_KP_OCTAL, 219). +-define(SDL_SCANCODE_KP_DECIMAL, 220). +-define(SDL_SCANCODE_KP_HEXADECIMAL, 221). +-define(SDL_SCANCODE_LCTRL, 224). +-define(SDL_SCANCODE_LSHIFT, 225). +-define(SDL_SCANCODE_LALT, 226). +-define(SDL_SCANCODE_LGUI, 227). +-define(SDL_SCANCODE_RCTRL, 228). +-define(SDL_SCANCODE_RSHIFT, 229). +-define(SDL_SCANCODE_RALT, 230). +-define(SDL_SCANCODE_RGUI, 231). +-define(SDL_SCANCODE_MODE, 257). +-define(SDL_SCANCODE_AUDIONEXT, 258). +-define(SDL_SCANCODE_AUDIOPREV, 259). +-define(SDL_SCANCODE_AUDIOSTOP, 260). +-define(SDL_SCANCODE_AUDIOPLAY, 261). +-define(SDL_SCANCODE_AUDIOMUTE, 262). +-define(SDL_SCANCODE_MEDIASELECT, 263). +-define(SDL_SCANCODE_WWW, 264). +-define(SDL_SCANCODE_MAIL, 265). +-define(SDL_SCANCODE_CALCULATOR, 266). +-define(SDL_SCANCODE_COMPUTER, 267). +-define(SDL_SCANCODE_AC_SEARCH, 268). +-define(SDL_SCANCODE_AC_HOME, 269). +-define(SDL_SCANCODE_AC_BACK, 270). +-define(SDL_SCANCODE_AC_FORWARD, 271). +-define(SDL_SCANCODE_AC_STOP, 272). +-define(SDL_SCANCODE_AC_REFRESH, 273). +-define(SDL_SCANCODE_AC_BOOKMARKS, 274). +-define(SDL_SCANCODE_BRIGHTNESSDOWN, 275). +-define(SDL_SCANCODE_BRIGHTNESSUP, 276). +-define(SDL_SCANCODE_DISPLAYSWITCH, 277). +-define(SDL_SCANCODE_KBDILLUMTOGGLE, 278). +-define(SDL_SCANCODE_KBDILLUMDOWN, 279). +-define(SDL_SCANCODE_KBDILLUMUP, 280). +-define(SDL_SCANCODE_EJECT, 281). +-define(SDL_SCANCODE_SLEEP, 282). +-define(SDL_SCANCODE_APP1, 283). +-define(SDL_SCANCODE_APP2, 284). +-define(SDL_SCANCODE_AUDIOREWIND, 285). +-define(SDL_SCANCODE_AUDIOFASTFORWARD, 286). + +-endif. diff --git a/src/esdl2.erl b/src/esdl2.erl index a8a1f61..0a76f25 100644 --- a/src/esdl2.erl +++ b/src/esdl2.erl @@ -83,12 +83,17 @@ -export([get_key_from_name/1]). -export([get_key_from_scancode/1]). -export([get_key_name/1]). +-export([get_keyboard_focus/0]). +-export([get_keyboard_state/0]). -export([get_mod_state/0]). -export([get_scancode_from_key/1]). -export([get_scancode_from_name/1]). -export([get_scancode_name/1]). +-export([has_screen_keyboard_support/0]). +-export([is_screen_keyboard_shown/1]). -export([is_text_input_active/0]). -export([set_mod_state/1]). +-export([set_text_input_rect/1]). -export([start_text_input/0]). -export([stop_text_input/0]). @@ -360,6 +365,12 @@ get_key_from_scancode(_) -> get_key_name(_) -> erlang:nif_error({not_loaded, ?MODULE}). +get_keyboard_focus() -> + erlang:nif_error({not_loaded, ?MODULE}). + +get_keyboard_state() -> + erlang:nif_error({not_loaded, ?MODULE}). + get_mod_state() -> erlang:nif_error({not_loaded, ?MODULE}). @@ -372,12 +383,21 @@ get_scancode_from_name(_) -> get_scancode_name(_) -> erlang:nif_error({not_loaded, ?MODULE}). +has_screen_keyboard_support() -> + erlang:nif_error({not_loaded, ?MODULE}). + +is_screen_keyboard_shown(_) -> + erlang:nif_error({not_loaded, ?MODULE}). + is_text_input_active() -> erlang:nif_error({not_loaded, ?MODULE}). set_mod_state(_) -> erlang:nif_error({not_loaded, ?MODULE}). +set_text_input_rect(_) -> + erlang:nif_error({not_loaded, ?MODULE}). + start_text_input() -> erlang:nif_error({not_loaded, ?MODULE}). diff --git a/src/sdl_keyboard.erl b/src/sdl_keyboard.erl index 325c727..1e0b68c 100644 --- a/src/sdl_keyboard.erl +++ b/src/sdl_keyboard.erl @@ -14,6 +14,7 @@ -module(sdl_keyboard). +-export([get_focused_window/0]). -export([get_key_from_name/1]). -export([get_key_from_scancode/1]). -export([get_key_name/1]). @@ -21,11 +22,20 @@ -export([get_scancode_from_key/1]). -export([get_scancode_from_name/1]). -export([get_scancode_name/1]). +-export([get_state/0]). +-export([has_screen_keyboard_support/0]). +-export([is_screen_keyboard_shown/1]). -export([is_text_input_active/0]). -export([set_mod_state/1]). +-export([set_text_input_rect/1]). -export([start_text_input/0]). -export([stop_text_input/0]). +-spec get_focused_window() -> sdl_window:window() | undefined. +get_focused_window() -> + esdl2:get_keyboard_focus(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + -spec get_key_from_name(binary()) -> non_neg_integer() | undefined. get_key_from_name(Name) -> esdl2:get_key_from_name(Name). @@ -56,6 +66,21 @@ get_scancode_from_name(Name) -> get_scancode_name(Scancode) -> esdl2:get_scancode_name(Scancode). +-spec get_state() -> #{non_neg_integer() => boolean()}. +get_state() -> + esdl2:get_keyboard_state(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec has_screen_keyboard_support() -> boolean(). +has_screen_keyboard_support() -> + esdl2:has_screen_keyboard_support(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec is_screen_keyboard_shown(sdl_window:window()) -> boolean(). +is_screen_keyboard_shown(Window) -> + esdl2:is_screen_keyboard_shown(Window), + receive {'_nif_thread_ret_', Ret} -> Ret end. + -spec is_text_input_active() -> boolean(). is_text_input_active() -> esdl2:is_text_input_active(), @@ -65,6 +90,10 @@ is_text_input_active() -> set_mod_state(Mod) -> esdl2:set_mod_state(Mod). +-spec set_text_input_rect(sdl_rect:rect()) -> ok. +set_text_input_rect(Rect) -> + esdl2:set_text_input_rect(Rect). + -spec start_text_input() -> ok. start_text_input() -> esdl2:start_text_input(). diff --git a/src/sdl_rect.erl b/src/sdl_rect.erl new file mode 100644 index 0000000..b747d64 --- /dev/null +++ b/src/sdl_rect.erl @@ -0,0 +1,21 @@ +%% Copyright (c) 2014-2018, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(sdl_rect). + +-type point() :: #{x=>integer(), y=>integer()}. +-export_type([point/0]). + +-type rect() :: #{x=>integer(), y=>integer(), w=>integer(), h=>integer()}. +-export_type([rect/0]). diff --git a/src/sdl_renderer.erl b/src/sdl_renderer.erl index f596acd..c46df8a 100644 --- a/src/sdl_renderer.erl +++ b/src/sdl_renderer.erl @@ -56,9 +56,6 @@ -type renderer_flag() :: software | accelerated | present_vsync | target_texture. -export_type([renderer_flag/0]). --type point() :: #{x=>integer(), y=>integer()}. --type rect() :: #{x=>integer(), y=>integer(), w=>integer(), h=>integer()}. - -spec clear(renderer()) -> ok | sdl:error(). clear(Renderer) -> esdl2:render_clear(Renderer), @@ -69,14 +66,16 @@ copy(Renderer, Texture) -> esdl2:render_copy(Renderer, Texture, undefined, undefined), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec copy(renderer(), sdl_texture:texture(), undefined | rect(), undefined | rect()) +-spec copy(renderer(), sdl_texture:texture(), + undefined | sdl_rect:rect(), undefined | sdl_rect:rect()) -> ok | sdl:error(). copy(Renderer, Texture, SrcRect, DstRect) -> esdl2:render_copy(Renderer, Texture, SrcRect, DstRect), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec copy(renderer(), sdl_texture:texture(), undefined | rect(), undefined | rect(), - float(), undefined | point(), none | horizontal | vertical) +-spec copy(renderer(), sdl_texture:texture(), + undefined | sdl_rect:rect(), undefined | sdl_rect:rect(), + float(), undefined | sdl_rect:point(), none | horizontal | vertical) -> ok | sdl:error(). copy(Renderer, Texture, SrcRect, DstRect, Angle, CenterPoint, FlipFlags) -> esdl2:render_copy_ex(Renderer, Texture, SrcRect, DstRect, Angle, CenterPoint, FlipFlags), @@ -93,7 +92,7 @@ create(Window, Index, Flags) -> esdl2:create_renderer(Window, Index, Flags), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec draw_line(renderer(), point(), point()) -> ok | sdl:error(). +-spec draw_line(renderer(), sdl_rect:point(), sdl_rect:point()) -> ok | sdl:error(). draw_line(Renderer, #{x:=X1, y:=Y1}, #{x:=X2, y:=Y2}) -> draw_line(Renderer, X1, Y1, X2, Y2). @@ -102,12 +101,12 @@ draw_line(Renderer, X1, Y1, X2, Y2) -> esdl2:render_draw_line(Renderer, X1, Y1, X2, Y2), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec draw_lines(renderer(), [point()]) -> ok | sdl:error(). +-spec draw_lines(renderer(), [sdl_rect:point()]) -> ok | sdl:error(). draw_lines(Renderer, Points) -> esdl2:render_draw_lines(Renderer, Points), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec draw_point(renderer(), point()) -> ok | sdl:error(). +-spec draw_point(renderer(), sdl_rect:point()) -> ok | sdl:error(). draw_point(Renderer, #{x:=X, y:=Y}) -> draw_point(Renderer, X, Y). @@ -116,12 +115,12 @@ draw_point(Renderer, X, Y) -> esdl2:render_draw_point(Renderer, X, Y), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec draw_points(renderer(), [point()]) -> ok | sdl:error(). +-spec draw_points(renderer(), [sdl_rect:point()]) -> ok | sdl:error(). draw_points(Renderer, Points) -> esdl2:render_draw_points(Renderer, Points), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec draw_rect(renderer(), rect()) -> ok | sdl:error(). +-spec draw_rect(renderer(), sdl_rect:rect()) -> ok | sdl:error(). draw_rect(Renderer, #{x:=X, y:=Y, w:=W, h:=H}) -> draw_rect(Renderer, X, Y, W, H). @@ -130,12 +129,12 @@ draw_rect(Renderer, X, Y, W, H) -> esdl2:render_draw_rect(Renderer, X, Y, W, H), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec draw_rects(renderer(), [rect()]) -> ok | sdl:error(). +-spec draw_rects(renderer(), [sdl_rect:rect()]) -> ok | sdl:error(). draw_rects(Renderer, Rects) -> esdl2:render_draw_rects(Renderer, Rects), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec fill_rect(renderer(), rect()) -> ok | sdl:error(). +-spec fill_rect(renderer(), sdl_rect:rect()) -> ok | sdl:error(). fill_rect(Renderer, #{x:=X, y:=Y, w:=W, h:=H}) -> fill_rect(Renderer, X, Y, W, H). @@ -144,12 +143,12 @@ fill_rect(Renderer, X, Y, W, H) -> esdl2:render_fill_rect(Renderer, X, Y, W, H), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec fill_rects(renderer(), [rect()]) -> ok | sdl:error(). +-spec fill_rects(renderer(), [sdl_rect:rect()]) -> ok | sdl:error(). fill_rects(Renderer, Rects) -> esdl2:render_fill_rects(Renderer, Rects), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec get_clip_rect(renderer()) -> rect(). +-spec get_clip_rect(renderer()) -> sdl_rect:rect(). get_clip_rect(Renderer) -> esdl2:render_get_clip_rect(Renderer), receive {'_nif_thread_ret_', Ret} -> Ret end. @@ -188,7 +187,7 @@ get_scale(Renderer) -> esdl2:render_get_scale(Renderer), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec get_viewport(renderer()) -> rect(). +-spec get_viewport(renderer()) -> sdl_rect:rect(). get_viewport(Renderer) -> esdl2:render_get_viewport(Renderer), receive {'_nif_thread_ret_', Ret} -> Ret end. @@ -202,7 +201,7 @@ is_target_supported(Renderer) -> present(Renderer) -> esdl2:render_present(Renderer). --spec set_clip_rect(renderer(), rect()) -> ok | sdl:error(). +-spec set_clip_rect(renderer(), sdl_rect:rect()) -> ok | sdl:error(). set_clip_rect(Renderer, #{x:=X, y:=Y, w:=W, h:=H}) -> set_clip_rect(Renderer, X, Y, W, H). @@ -231,7 +230,7 @@ set_scale(Renderer, ScaleX, ScaleY) -> esdl2:render_set_scale(Renderer, ScaleX, ScaleY), receive {'_nif_thread_ret_', Ret} -> Ret end. --spec set_viewport(renderer(), rect()) -> ok | sdl:error(). +-spec set_viewport(renderer(), sdl_rect:rect()) -> ok | sdl:error(). set_viewport(Renderer, #{x:=X, y:=Y, w:=W, h:=H}) -> set_viewport(Renderer, X, Y, W, H). -- cgit v1.2.3