From 31fcd19726f5cfc38054e8351806fbdcaf32675f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Wed, 5 Apr 2017 15:05:30 -0400 Subject: [PATCH] sdl2 & gamnit: add mouse wheel events MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/gamnit/gamnit_linux.nit | 17 +++++++++++++++++ lib/sdl2/events.nit | 21 ++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/gamnit/gamnit_linux.nit b/lib/gamnit/gamnit_linux.nit index fe6cdac..e68ee8e 100644 --- a/lib/gamnit/gamnit_linux.nit +++ b/lib/gamnit/gamnit_linux.nit @@ -56,6 +56,10 @@ redef class SDLMouseEvent redef fun to_gamnit_event(buffer) do return new GamnitPointerEvent(buffer, self) end +redef class SDLMouseWheelEvent + redef fun to_gamnit_event(buffer) do return new GamnitMouseWheelEvent(buffer, self) +end + redef class SDLKeyboardEvent redef fun to_gamnit_event(buffer) do return new GamnitKeyEvent(buffer, self) end @@ -126,6 +130,19 @@ class GamnitPointerEvent end end +# Event on mouse wheel input +class GamnitMouseWheelEvent + super GamnitInputEvent + + redef type NATIVE: SDLMouseWheelEvent + + # Horizontal scroll amount + fun x: Float do return native.x.to_f + + # Vertical scroll amount + fun y: Float do return native.y.to_f +end + # SDL2 event not handled by gamnit class GamnitOtherEvent super GamnitInputEvent diff --git a/lib/sdl2/events.nit b/lib/sdl2/events.nit index 8eb14f2..6506dfd 100644 --- a/lib/sdl2/events.nit +++ b/lib/sdl2/events.nit @@ -47,6 +47,7 @@ extern class SDLEventBuffer `{SDL_Event *`} if is_mouse_motion then return to_mouse_motion if is_mouse_button_down then return to_mouse_button_down if is_mouse_button_up then return to_mouse_button_up + if is_mouse_wheel then return to_mouse_wheel if is_keydown then return to_keydown if is_keyup then return to_keyup return to_event_direct @@ -86,6 +87,14 @@ extern class SDLEventBuffer `{SDL_Event *`} # Require: `is_mouse_button_up` fun to_mouse_button_up: SDLMouseButtonUpEvent `{ return self; `} + # Is this a mouse wheel event? + fun is_mouse_wheel: Bool `{ return self->type == SDL_MOUSEWHEEL; `} + + # Get a reference to data at `self` as a `SDLMouseWheelEvent` + # + # Require: `is_mouse_wheel` + fun to_mouse_wheel: SDLMouseWheelEvent `{ return self; `} + # Is this a key presse event? fun is_keydown: Bool `{ return self->type == SDL_KEYDOWN; `} @@ -108,7 +117,6 @@ extern class SDLEventBuffer `{SDL_Event *`} # SDL_WindowEvent window # SDL_TextEditingEvent edit # SDL_TextInputEvent text - # SDL_MouseWheelEvent wheel # SDL_JoyAxisEvent jaxis # SDL_JoyBallEvent jball # SDL_JoyHatEvent jhat; @@ -214,6 +222,17 @@ extern class SDLMouseButtonDownEvent super SDLMouseButtonEvent end +# Mouse wheel event +extern class SDLMouseWheelEvent + super SDLEvent + + # Horizontal scroll amount + fun x: Int `{ return self->wheel.x; `} + + # Vertical scroll amount + fun y: Int `{ return self->wheel.y; `} +end + # Keyboard button event extern class SDLKeyboardEvent super SDLEvent -- 1.7.9.5