From b30bc1ccd23e909f281c742629281e822854e802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 2 Jan 2018 12:47:39 +0100 Subject: Add many events and event functions --- src/sdl_events.erl | 98 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 79 insertions(+), 19 deletions(-) (limited to 'src/sdl_events.erl') 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(). -- cgit v1.2.3