aboutsummaryrefslogtreecommitdiffstats
path: root/src/sdl_events.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdl_events.erl')
-rw-r--r--src/sdl_events.erl98
1 files changed, 79 insertions, 19 deletions
diff --git a/src/sdl_events.erl b/src/sdl_events.erl
index 366edeb..034ca3d 100644
--- a/src/sdl_events.erl
+++ b/src/sdl_events.erl
@@ -14,40 +14,100 @@
-module(sdl_events).
+-export([flush/1]).
+-export([flush/2]).
+-export([get/3]).
+-export([has/1]).
+-export([has/2]).
+-export([peek/3]).
-export([poll/0]).
+-export([pump/0]).
+
+-type event_type() :: first
+ | quit
+ | app_terminating | app_low_memory | app_will_enter_background
+ | app_did_enter_background | app_will_enter_foreground | app_did_enter_foreground
+ | window | syswm
+ | key_down | key_up | text_editing | text_input | keymap_changed
+ | mouse_motion | mouse_down | mouse_up | mouse_wheel
+ | joy_axis_motion | joy_ball_motion | joy_hat_motion
+ | joy_button_down | joy_button_up | joy_device_added | joy_device_removed
+ | controller_axis_motion | controller_button_down | controller_button_up
+ | controller_device_added | controller_device_removed | controller_device_remapped
+ | finger_down | finger_up | finger_motion
+ | dollar_gesture | dollar_record | multi_gesture
+ | clipboard_update
+ | drop_file | drop_text | drop_begin | drop_complete
+ | audio_device_added | audio_device_removed
+ | render_targets_reset | render_device_reset
+ | last.
--type window_event_type() :: shown | hidden | exposed | moved | resized
- | size_changed | minimized | maximized | restored | enter | leave
- | focus_gained | focus_lost | close.
-type window_event() :: #{type=>window, timestamp=>non_neg_integer(),
- window_id=>non_neg_integer(), event=>window_event_type(),
- data=>{integer(), integer()}}.
+ window_id=>non_neg_integer(), event=>sdl_window:window_event_type(),
+ data1=>integer(), data2=>integer()}.
--type keymod() :: left_shift | right_shift | left_ctrl | right_ctrl
- | left_alt | right_alt | left_gui | right_gui | num | caps | mode.
--type key_event() :: #{type=>key_down | key_up, timestamp=>non_neg_integer(),
- window_id=>non_neg_integer(), repeat=>boolean(), scancode=>non_neg_integer(),
- sym=>non_neg_integer(), mod=>[keymod()]}.
-
--type mouse_button() :: left | middle | right | x1 | x2 | non_neg_integer().
--type mouse_button_event() :: #{type=>mouse_down | mouse_up, timestamp=>non_neg_integer(),
- window_id=>non_neg_integer(), which=>touch | non_neg_integer(),
- button=>mouse_button(), clicks=>non_neg_integer(), x=>integer(), y=>integer()}.
+-type keyboard_event() :: #{type=>key_down | key_up, timestamp=>non_neg_integer(),
+ window_id=>non_neg_integer(), state=>released | pressed, repeat=>boolean(),
+ scancode=>non_neg_integer(), sym=>non_neg_integer(), mod=>[sdl_keycode:keymod()]}.
-type mouse_motion_event() :: #{type=>mouse_motion, timestamp=>non_neg_integer(),
window_id=>non_neg_integer(), which=>touch | non_neg_integer(),
x=>integer(), y=>integer(), xrel=>integer(), yrel=>integer()}.
+-type mouse_button_event() :: #{type=>mouse_down | mouse_up, timestamp=>non_neg_integer(),
+ window_id=>non_neg_integer(), which=>touch | non_neg_integer(),
+ button=>sdl_mouse:button(), state=>released | pressed,
+ clicks=>non_neg_integer(), x=>integer(), y=>integer()}.
+
-type mouse_wheel_event() :: #{type=>mouse_wheel, timestamp=>non_neg_integer(),
window_id=>non_neg_integer(), which=>touch | non_neg_integer(),
- x=>integer(), y=>integer()}.
+ x=>integer(), y=>integer(), direction=>sdl_mouse:wheel_direction()}.
+
+-type generic_event() :: #{
+ type=> quit | app_terminating | app_low_memory | app_will_enter_background
+ | app_did_enter_background | app_will_enter_foreground | app_did_enter_foreground
+ | keymap_changed | clipboard_update | render_targets_reset | render_device_reset,
+ timestamp=>non_neg_integer()}.
+
+-type event() :: window_event() | keyboard_event()
+ | mouse_motion_event() | mouse_button_event() | mouse_wheel_event()
+ | generic_event().
--type quit_event() :: #{type=>quit, timestamp=>non_neg_integer()}.
+-spec flush(event_type()) -> ok.
+flush(Type) ->
+ esdl2:flush_event(Type).
--type event() :: window_event() | key_event() | mouse_button_event()
- | mouse_motion_event() | mouse_wheel_event() | quit_event().
+-spec flush(event_type(), event_type()) -> ok.
+flush(MinType, MaxType) ->
+ esdl2:flush_events(MinType, MaxType).
+
+-spec get(non_neg_integer(), event_type(), event_type())
+ -> {ok, [event()]} | sdl:error().
+get(NumEvents, MinType, MaxType) ->
+ esdl2:peep_events(get, NumEvents, MinType, MaxType),
+ receive {'_nif_thread_ret_', Ret} -> Ret end.
+
+-spec has(event_type()) -> boolean().
+has(Type) ->
+ esdl2:has_event(Type),
+ receive {'_nif_thread_ret_', Ret} -> Ret end.
+
+-spec has(event_type(), event_type()) -> boolean().
+has(MinType, MaxType) ->
+ esdl2:has_events(MinType, MaxType),
+ receive {'_nif_thread_ret_', Ret} -> Ret end.
+
+-spec peek(non_neg_integer(), event_type(), event_type())
+ -> {ok, [event()]} | sdl:error().
+peek(NumEvents, MinType, MaxType) ->
+ esdl2:peep_events(peek, NumEvents, MinType, MaxType),
+ receive {'_nif_thread_ret_', Ret} -> Ret end.
-spec poll() -> event() | false.
poll() ->
esdl2:poll_event(),
receive {'_nif_thread_ret_', Ret} -> Ret end.
+
+-spec pump() -> ok.
+pump() ->
+ esdl2:pump_events().