aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-01-05 16:32:06 +0100
committerLoïc Hoguin <[email protected]>2018-01-05 16:32:06 +0100
commit30cd5551c4cdc7a2d9bbc92dfbc0313764d2bdad (patch)
tree328202812f754455471c883b7f8ab6b68f0f895f /src
parent435845af18dead29addb2d88e32bf919011a0a51 (diff)
downloadesdl2-30cd5551c4cdc7a2d9bbc92dfbc0313764d2bdad.tar.gz
esdl2-30cd5551c4cdc7a2d9bbc92dfbc0313764d2bdad.tar.bz2
esdl2-30cd5551c4cdc7a2d9bbc92dfbc0313764d2bdad.zip
Add the remaining keyboard functions
Also adds defines for all the keycode and scancode in SDL 2.0.7.
Diffstat (limited to 'src')
-rw-r--r--src/esdl2.erl20
-rw-r--r--src/sdl_keyboard.erl29
-rw-r--r--src/sdl_rect.erl21
-rw-r--r--src/sdl_renderer.erl35
4 files changed, 87 insertions, 18 deletions
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 <[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_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).