aboutsummaryrefslogtreecommitdiffstats
path: root/c_src/sdl_mouse.c
diff options
context:
space:
mode:
Diffstat (limited to 'c_src/sdl_mouse.c')
-rw-r--r--c_src/sdl_mouse.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/c_src/sdl_mouse.c b/c_src/sdl_mouse.c
index eb2af39..018b44c 100644
--- a/c_src/sdl_mouse.c
+++ b/c_src/sdl_mouse.c
@@ -20,7 +20,16 @@
NIF_ENUM_TO_ATOM_FUNCTION(mousewheel_direction_to_atom, Uint32, MOUSEWHEEL_DIRECTION_ENUM)
-static ERL_NIF_TERM get_mouse_state_common(ErlNifEnv* env, int x, int y, Uint32 state)
+#define BUTTON_ENUM(E) \
+ E(left, SDL_BUTTON_LEFT) \
+ E(middle, SDL_BUTTON_MIDDLE) \
+ E(right, SDL_BUTTON_RIGHT) \
+ E(x1, SDL_BUTTON_X1) \
+ E(x2, SDL_BUTTON_X2)
+
+NIF_ENUM_TO_ATOM_FUNCTION(button_to_atom, Uint8, BUTTON_ENUM)
+
+ERL_NIF_TERM mouse_state_to_list(ErlNifEnv* env, Uint32 state)
{
ERL_NIF_TERM list;
@@ -37,10 +46,15 @@ static ERL_NIF_TERM get_mouse_state_common(ErlNifEnv* env, int x, int y, Uint32
if (state & SDL_BUTTON_X2MASK)
list = enif_make_list_cell(env, atom_x2, list);
+ return list;
+}
+
+static ERL_NIF_TERM get_mouse_state_common(ErlNifEnv* env, int x, int y, Uint32 state)
+{
return enif_make_tuple3(env,
enif_make_int(env, x),
enif_make_int(env, y),
- list
+ mouse_state_to_list(env, state)
);
}