aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2015-10-20 15:58:50 +0200
committerLoïc Hoguin <[email protected]>2015-10-20 15:58:50 +0200
commitcdaf2699bcb6aa0db3440b1d5906f3031e50b2ac (patch)
treef2fb92be90aa98d320471ff338703eef1bb218af
parent8f19fb094712dd6a871136c8522e0cf87fb3025e (diff)
downloadesdl2-cdaf2699bcb6aa0db3440b1d5906f3031e50b2ac.tar.gz
esdl2-cdaf2699bcb6aa0db3440b1d5906f3031e50b2ac.tar.bz2
esdl2-cdaf2699bcb6aa0db3440b1d5906f3031e50b2ac.zip
Add sdl_keyboard with 3 text input related functions
The following functions were added: * sdl_keyboard:start_text_input() * sdl_keyboard:stop_text_input() * sdl_keyboard:is_text_input_active() Calling sdl_keyboard:stop_text_input() at the beginning of the program allows not receiving unwanted textinput events.
-rw-r--r--README.md15
-rw-r--r--c_src/esdl2.h4
-rw-r--r--c_src/sdl_keyboard.c54
-rw-r--r--src/esdl2.erl16
-rw-r--r--src/sdl_keyboard.erl32
5 files changed, 120 insertions, 1 deletions
diff --git a/README.md b/README.md
index 6b98e00..8d538e2 100644
--- a/README.md
+++ b/README.md
@@ -198,7 +198,20 @@ The following tasks remain to be done:
* SDL_RegisterEvents()
* http://hg.libsdl.org/SDL/file/default/include/SDL_keyboard.h
- * We need to implement everything.
+ * We need to implement the following functions:
+ * SDL_GetKeyboardFocus()
+ * SDL_GetKeyboardState()
+ * SDL_GetModState()
+ * SDL_SetModState()
+ * SDL_GetKeyFromScancode()
+ * SDL_GetScancodeFromKey()
+ * SDL_GetScancodeName()
+ * SDL_GetScancodeFromName()
+ * SDL_GetKeyName()
+ * SDL_GetKeyFromName()
+ * SDL_SetTextInputRect()
+ * SDL_HasScreenKeyboardSupport()
+ * SDL_IsScreenKeyboardShown()
* http://hg.libsdl.org/SDL/file/default/include/SDL_keycode.h
* We probably should make it easy to identify keycodes and scancodes.
diff --git a/c_src/esdl2.h b/c_src/esdl2.h
index 61af33a..530abc4 100644
--- a/c_src/esdl2.h
+++ b/c_src/esdl2.h
@@ -166,6 +166,10 @@
/* sdl_gl */ \
F(gl_create_context, 1) \
F(gl_swap_window, 1) \
+ /* sdl_keyboard */ \
+ F(is_text_input_active, 0) \
+ F(start_text_input, 0) \
+ F(stop_text_input, 0) \
/* sdl_power */ \
F(get_power_info, 0) \
/* sdl_renderer */ \
diff --git a/c_src/sdl_keyboard.c b/c_src/sdl_keyboard.c
new file mode 100644
index 0000000..4c7dbc5
--- /dev/null
+++ b/c_src/sdl_keyboard.c
@@ -0,0 +1,54 @@
+// Copyright (c) 2015, Loïc Hoguin <[email protected]>
+//
+// 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"
+
+// is_text_input_active
+
+NIF_CALL_HANDLER(thread_is_text_input_active)
+{
+ if (SDL_IsTextInputActive())
+ return atom_true;
+
+ return atom_false;
+}
+
+NIF_FUNCTION(is_text_input_active)
+{
+ return nif_thread_call(env, thread_is_text_input_active, 0);
+}
+
+// start_text_input
+
+NIF_CAST_HANDLER(thread_start_text_input)
+{
+ SDL_StartTextInput();
+}
+
+NIF_FUNCTION(start_text_input)
+{
+ return nif_thread_cast(env, thread_start_text_input, 0);
+}
+
+// stop_text_input
+
+NIF_CAST_HANDLER(thread_stop_text_input)
+{
+ SDL_StopTextInput();
+}
+
+NIF_FUNCTION(stop_text_input)
+{
+ return nif_thread_cast(env, thread_stop_text_input, 0);
+}
diff --git a/src/esdl2.erl b/src/esdl2.erl
index 6ffc331..3e0db38 100644
--- a/src/esdl2.erl
+++ b/src/esdl2.erl
@@ -53,6 +53,11 @@
-export([gl_create_context/1]).
-export([gl_swap_window/1]).
+%% sdl_keyboard
+-export([is_text_input_active/0]).
+-export([start_text_input/0]).
+-export([stop_text_input/0]).
+
%% sdl_power
-export([get_power_info/0]).
@@ -237,6 +242,17 @@ gl_create_context(_) ->
gl_swap_window(_) ->
erlang:nif_error({not_loaded, ?MODULE}).
+%% sdl_keyboard
+
+is_text_input_active() ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
+start_text_input() ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
+stop_text_input() ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
%% sdl_power
get_power_info() ->
diff --git a/src/sdl_keyboard.erl b/src/sdl_keyboard.erl
new file mode 100644
index 0000000..462f48b
--- /dev/null
+++ b/src/sdl_keyboard.erl
@@ -0,0 +1,32 @@
+%% Copyright (c) 2015, Loïc Hoguin <[email protected]>
+%%
+%% 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_keyboard).
+
+-export([is_text_input_active/0]).
+-export([start_text_input/0]).
+-export([stop_text_input/0]).
+
+-spec is_text_input_active() -> boolean().
+is_text_input_active() ->
+ esdl2:is_text_input_active(),
+ receive {'_nif_thread_ret_', Ret} -> Ret end.
+
+-spec start_text_input() -> ok.
+start_text_input() ->
+ esdl2:start_text_input().
+
+-spec stop_text_input() -> ok.
+stop_text_input() ->
+ esdl2:stop_text_input().