sdl2 & gamnit: add mouse wheel events
authorAlexis Laferrière <alexis.laf@xymus.net>
Wed, 5 Apr 2017 19:05:30 +0000 (15:05 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Thu, 6 Apr 2017 01:51:38 +0000 (21:51 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/gamnit/gamnit_linux.nit
lib/sdl2/events.nit

index fe6cdac..e68ee8e 100644 (file)
@@ -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
index 8eb14f2..6506dfd 100644 (file)
@@ -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