diff options
author | Loïc Hoguin <[email protected]> | 2017-12-20 20:03:16 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2017-12-20 20:03:16 +0100 |
commit | b0950785e72d9d59c6fd816c01d203ecb083c663 (patch) | |
tree | 38cfae31a019ffe7b90d60dea2f6f01c3830e4b3 /src | |
parent | e4f6a3c1f1032f83b25210dea21bbacf4552f8f0 (diff) | |
download | esdl2-b0950785e72d9d59c6fd816c01d203ecb083c663.tar.gz esdl2-b0950785e72d9d59c6fd816c01d203ecb083c663.tar.bz2 esdl2-b0950785e72d9d59c6fd816c01d203ecb083c663.zip |
Add the sdl_mouse module implementing half of sdl_mouse.h
The latter half will be part of sdl_cursor.
This depends on some changes to nif_helper. The sdl_gl part of
the code is probably slithly broken now, the dependency on the
window is gone. This will be resolved later on.
Diffstat (limited to 'src')
-rw-r--r-- | src/esdl2.erl | 40 | ||||
-rw-r--r-- | src/sdl_mouse.erl | 72 |
2 files changed, 112 insertions, 0 deletions
diff --git a/src/esdl2.erl b/src/esdl2.erl index 7bacb71..0b1b456 100644 --- a/src/esdl2.erl +++ b/src/esdl2.erl @@ -64,6 +64,17 @@ -export([start_text_input/0]). -export([stop_text_input/0]). +%% sdl_mouse +-export([capture_mouse/1]). +-export([get_global_mouse_state/0]). +-export([get_mouse_focus/0]). +-export([get_mouse_state/0]). +-export([get_relative_mouse_mode/0]). +-export([get_relative_mouse_state/0]). +-export([set_relative_mouse_mode/1]). +-export([warp_mouse_global/2]). +-export([warp_mouse_in_window/3]). + %% sdl_power -export([get_power_info/0]). @@ -269,6 +280,35 @@ start_text_input() -> stop_text_input() -> erlang:nif_error({not_loaded, ?MODULE}). +%% sdl_mouse + +capture_mouse(_) -> + erlang:nif_error({not_loaded, ?MODULE}). + +get_global_mouse_state() -> + erlang:nif_error({not_loaded, ?MODULE}). + +get_mouse_focus() -> + erlang:nif_error({not_loaded, ?MODULE}). + +get_mouse_state() -> + erlang:nif_error({not_loaded, ?MODULE}). + +get_relative_mouse_mode() -> + erlang:nif_error({not_loaded, ?MODULE}). + +get_relative_mouse_state() -> + erlang:nif_error({not_loaded, ?MODULE}). + +set_relative_mouse_mode(_) -> + erlang:nif_error({not_loaded, ?MODULE}). + +warp_mouse_global(_, _) -> + erlang:nif_error({not_loaded, ?MODULE}). + +warp_mouse_in_window(_, _, _) -> + erlang:nif_error({not_loaded, ?MODULE}). + %% sdl_power get_power_info() -> diff --git a/src/sdl_mouse.erl b/src/sdl_mouse.erl new file mode 100644 index 0000000..d6c3815 --- /dev/null +++ b/src/sdl_mouse.erl @@ -0,0 +1,72 @@ +%% Copyright (c) 2017, 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_mouse). + +-export([capture/1]). +-export([get_focused_window/0]). +-export([get_global_state/0]). +-export([get_relative_mode/0]). +-export([get_relative_state/0]). +-export([get_state/0]). +-export([set_relative_mode/1]). +-export([warp/2]). +-export([warp/3]). + +-spec capture(boolean()) -> ok | sdl:error(). +capture(Bool) -> + esdl2:capture_mouse(Bool), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec get_focused_window() -> sdl_window:window() | undefined. +get_focused_window() -> + esdl2:get_mouse_focus(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec get_global_state() + -> {integer(), integer(), [left | middle | right | x1 | x2]}. +get_global_state() -> + esdl2:get_global_mouse_state(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec get_relative_mode() -> boolean(). +get_relative_mode() -> + esdl2:get_relative_mouse_mode(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec get_relative_state() + -> {integer(), integer(), [left | middle | right | x1 | x2]}. +get_relative_state() -> + esdl2:get_relative_mouse_state(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec get_state() + -> {integer(), integer(), [left | middle | right | x1 | x2]}. +get_state() -> + esdl2:get_mouse_state(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec set_relative_mode(boolean()) -> ok | sdl:error(). +set_relative_mode(Bool) -> + esdl2:set_relative_mouse_mode(Bool), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec warp(integer(), integer()) -> ok | sdl:error(). +warp(X, Y) -> + esdl2:warp_mouse_global(X, Y), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +-spec warp(sdl_window:window(), integer(), integer()) -> ok. +warp(Window, X, Y) -> + esdl2:warp_mouse_in_window(Window, X, Y). |