From 40316b7890466b28b9e88f6ff94aa8da820d6347 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Fri, 20 Jul 2018 16:13:18 -0700 Subject: [PATCH] Add MouseWheelMode, make SDL wheel events consistent, add MouseButton, rename Cursor back to MouseCursor (resolve #1124) --- project/src/backend/sdl/SDLApplication.cpp | 14 +++++- .../_internal/backend/flash/FlashWindow.hx | 43 ++++++++++--------- .../_internal/backend/html5/HTML5Window.hx | 19 +++++--- .../backend/native/NativeApplication.hx | 2 +- .../_internal/backend/native/NativeWindow.hx | 12 +++--- src/lime/app/Application.hx | 8 ++-- src/lime/ui/Cursor.hx | 20 --------- src/lime/ui/Window.hx | 10 ++--- 8 files changed, 65 insertions(+), 63 deletions(-) delete mode 100644 src/lime/ui/Cursor.hx diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index 299266dc5..1abca6711 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -627,8 +627,18 @@ namespace lime { case SDL_MOUSEWHEEL: mouseEvent.type = MOUSE_WHEEL; - mouseEvent.x = event->wheel.x; - mouseEvent.y = event->wheel.y; + + if (event->wheel.direction == SDL_MOUSEWHEEL_FLIPPED) { + + mouseEvent.x = -event->wheel.x; + mouseEvent.y = -event->wheel.y; + + } else { + + mouseEvent.x = event->wheel.x; + mouseEvent.y = event->wheel.y; + + } break; } diff --git a/src/lime/_internal/backend/flash/FlashWindow.hx b/src/lime/_internal/backend/flash/FlashWindow.hx index 544f61a36..c6b335bdb 100644 --- a/src/lime/_internal/backend/flash/FlashWindow.hx +++ b/src/lime/_internal/backend/flash/FlashWindow.hx @@ -13,16 +13,17 @@ import flash.events.TouchEvent; import flash.geom.Matrix; import flash.system.Capabilities; import flash.ui.Mouse; -import flash.ui.MouseCursor; +import flash.ui.MouseCursor in FlashMouseCursor; import flash.Lib; import lime.app.Application; import lime.graphics.Image; import lime.graphics.RenderContext; import lime.graphics.RenderContextAttributes; import lime.math.Rectangle; -import lime.ui.Cursor; import lime.ui.KeyCode; import lime.ui.KeyModifier; +import lime.ui.MouseButton; +import lime.ui.MouseCursor; import lime.ui.Touch; import lime.system.Display; import lime.system.DisplayMode; @@ -305,11 +306,11 @@ class FlashWindow { private function handleMouseEvent (event:MouseEvent):Void { - var button = switch (event.type) { + var button:MouseButton = switch (event.type) { - case "middleMouseDown", "middleMouseUp": 1; - case "rightMouseDown", "rightMouseUp": 2; - default: 0; + case "middleMouseDown", "middleMouseUp": MIDDLE; + case "rightMouseDown", "rightMouseUp": RIGHT; + default: LEFT; } @@ -343,7 +344,7 @@ class FlashWindow { case "mouseWheel": - parent.onMouseWheel.dispatch (0, event.delta); + parent.onMouseWheel.dispatch (0, event.delta, LINES); default: @@ -385,7 +386,7 @@ class FlashWindow { if (event.isPrimaryTouchPoint) { - parent.onMouseDown.dispatch (x, y, 0); + parent.onMouseDown.dispatch (x, y, LEFT); } @@ -522,7 +523,7 @@ class FlashWindow { } - public function setCursor (value:Cursor):Cursor { + public function setCursor (value:MouseCursor):MouseCursor { if (cursor != value) { @@ -540,18 +541,18 @@ class FlashWindow { Mouse.cursor = switch (value) { - case ARROW: MouseCursor.ARROW; - case CROSSHAIR: MouseCursor.ARROW; - case MOVE: MouseCursor.HAND; - case POINTER: MouseCursor.BUTTON; - case RESIZE_NESW: MouseCursor.HAND; - case RESIZE_NS: MouseCursor.HAND; - case RESIZE_NWSE: MouseCursor.HAND; - case RESIZE_WE: MouseCursor.HAND; - case TEXT: MouseCursor.IBEAM; - case WAIT: MouseCursor.ARROW; - case WAIT_ARROW: MouseCursor.ARROW; - default: MouseCursor.AUTO; + case ARROW: FlashMouseCursor.ARROW; + case CROSSHAIR: FlashMouseCursor.ARROW; + case MOVE: FlashMouseCursor.HAND; + case POINTER: FlashMouseCursor.BUTTON; + case RESIZE_NESW: FlashMouseCursor.HAND; + case RESIZE_NS: FlashMouseCursor.HAND; + case RESIZE_NWSE: FlashMouseCursor.HAND; + case RESIZE_WE: FlashMouseCursor.HAND; + case TEXT: FlashMouseCursor.IBEAM; + case WAIT: FlashMouseCursor.ARROW; + case WAIT_ARROW: FlashMouseCursor.ARROW; + default: FlashMouseCursor.AUTO; } diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx index 2603cd840..8005b2372 100644 --- a/src/lime/_internal/backend/html5/HTML5Window.hx +++ b/src/lime/_internal/backend/html5/HTML5Window.hx @@ -27,9 +27,9 @@ import lime.system.Display; import lime.system.DisplayMode; import lime.system.System; import lime.system.Clipboard; -import lime.ui.Cursor; import lime.ui.Gamepad; import lime.ui.Joystick; +import lime.ui.MouseCursor; import lime.ui.Touch; import lime.ui.Window; @@ -61,7 +61,7 @@ class HTML5Window { private var cacheElementWidth:Float; private var cacheMouseX:Float; private var cacheMouseY:Float; - private var cursor:Cursor; + private var cursor:MouseCursor; private var cursorHidden:Bool; private var currentTouches = new Map (); private var isFullscreen:Bool; @@ -375,7 +375,7 @@ class HTML5Window { } - public function getCursor ():Cursor { + public function getCursor ():MouseCursor { return cursor; @@ -713,7 +713,16 @@ class HTML5Window { } else { - parent.onMouseWheel.dispatch (untyped event.deltaX, -untyped event.deltaY); + var deltaMode = switch (untyped event.deltaMode) { + + case 0: PIXELS; + case 1: LINES; + case 2: PAGES; + default: UNKNOWN; + + } + + parent.onMouseWheel.dispatch (untyped event.deltaX, -untyped event.deltaY, deltaMode); if (parent.onMouseWheel.canceled) { @@ -1023,7 +1032,7 @@ class HTML5Window { } - public function setCursor (value:Cursor):Cursor { + public function setCursor (value:MouseCursor):MouseCursor { if (cursor != value) { diff --git a/src/lime/_internal/backend/native/NativeApplication.hx b/src/lime/_internal/backend/native/NativeApplication.hx index f08fab8c5..f9be77114 100644 --- a/src/lime/_internal/backend/native/NativeApplication.hx +++ b/src/lime/_internal/backend/native/NativeApplication.hx @@ -400,7 +400,7 @@ class NativeApplication { case MOUSE_WHEEL: - window.onMouseWheel.dispatch (mouseEventInfo.x, mouseEventInfo.y); + window.onMouseWheel.dispatch (mouseEventInfo.x, mouseEventInfo.y, UNKNOWN); default: diff --git a/src/lime/_internal/backend/native/NativeWindow.hx b/src/lime/_internal/backend/native/NativeWindow.hx index d83dc0d07..8dd663565 100644 --- a/src/lime/_internal/backend/native/NativeWindow.hx +++ b/src/lime/_internal/backend/native/NativeWindow.hx @@ -20,7 +20,7 @@ import lime.system.Display; import lime.system.DisplayMode; import lime.system.JNI; import lime.system.System; -import lime.ui.Cursor; +import lime.ui.MouseCursor; import lime.ui.Window; import lime.utils.UInt8Array; @@ -47,7 +47,7 @@ class NativeWindow { public var handle:Dynamic; private var closing:Bool; - private var cursor:Cursor; + private var cursor:MouseCursor; private var displayMode:DisplayMode; private var frameRate:Float; private var mouseLock:Bool; @@ -273,7 +273,7 @@ class NativeWindow { } - public function getCursor ():Cursor { + public function getCursor ():MouseCursor { return cursor; @@ -528,7 +528,7 @@ class NativeWindow { } - public function setCursor (value:Cursor):Cursor { + public function setCursor (value:MouseCursor):MouseCursor { if (cursor != value) { @@ -540,7 +540,7 @@ class NativeWindow { } else { - var type:CursorType = switch (value) { + var type:MouseCursorType = switch (value) { case ARROW: ARROW; case CROSSHAIR: CROSSHAIR; @@ -766,7 +766,7 @@ class NativeWindow { } -@:enum private abstract CursorType(Int) from Int to Int { +@:enum private abstract MouseCursorType(Int) from Int to Int { var HIDDEN = 0; var ARROW = 1; diff --git a/src/lime/app/Application.hx b/src/lime/app/Application.hx index b2c848b50..f2beaf654 100644 --- a/src/lime/app/Application.hx +++ b/src/lime/app/Application.hx @@ -10,6 +10,8 @@ import lime.ui.Joystick; import lime.ui.JoystickHatPosition; import lime.ui.KeyCode; import lime.ui.KeyModifier; +import lime.ui.MouseButton; +import lime.ui.MouseWheelMode; import lime.ui.Touch; import lime.ui.Window; import lime.ui.WindowAttributes; @@ -292,7 +294,7 @@ class Application extends Module { @param y The current y coordinate of the mouse @param button The ID of the mouse button that was pressed **/ - public function onMouseDown (x:Float, y:Float, button:Int):Void { } + public function onMouseDown (x:Float, y:Float, button:MouseButton):Void { } /** @@ -319,7 +321,7 @@ class Application extends Module { @param y The current y coordinate of the mouse @param button The ID of the button that was released **/ - public function onMouseUp (x:Float, y:Float, button:Int):Void { } + public function onMouseUp (x:Float, y:Float, button:MouseButton):Void { } /** @@ -327,7 +329,7 @@ class Application extends Module { @param deltaX The amount of horizontal scrolling (if applicable) @param deltaY The amount of vertical scrolling (if applicable) **/ - public function onMouseWheel (deltaX:Float, deltaY:Float):Void { } + public function onMouseWheel (deltaX:Float, deltaY:Float, deltaMode:MouseWheelMode):Void { } /** diff --git a/src/lime/ui/Cursor.hx b/src/lime/ui/Cursor.hx deleted file mode 100644 index a64c0552f..000000000 --- a/src/lime/ui/Cursor.hx +++ /dev/null @@ -1,20 +0,0 @@ -package lime.ui; - - -enum Cursor { - - ARROW; - CROSSHAIR; - DEFAULT; - MOVE; - POINTER; - RESIZE_NESW; - RESIZE_NS; - RESIZE_NWSE; - RESIZE_WE; - TEXT; - WAIT; - WAIT_ARROW; - CUSTOM; - -} \ No newline at end of file diff --git a/src/lime/ui/Window.hx b/src/lime/ui/Window.hx index 1406b30b4..c84c2d62e 100644 --- a/src/lime/ui/Window.hx +++ b/src/lime/ui/Window.hx @@ -38,7 +38,7 @@ class Window { public var application (default, null):Application; public var borderless (get, set):Bool; public var context (default, null):RenderContext; - public var cursor (get, set):Cursor; + public var cursor (get, set):MouseCursor; public var display (get, null):Display; public var displayMode (get, set):DisplayMode; @@ -75,11 +75,11 @@ class Window { public var onLeave (default, null) = new EventVoid> (); public var onMaximize (default, null) = new EventVoid> (); public var onMinimize (default, null) = new EventVoid> (); - public var onMouseDown (default, null) = new EventFloat->Int->Void> (); + public var onMouseDown (default, null) = new EventFloat->MouseButton->Void> (); public var onMouseMove (default, null) = new EventFloat->Void> (); public var onMouseMoveRelative (default, null) = new EventFloat->Void> (); public var onMouseUp (default, null) = new EventFloat->Int->Void> (); - public var onMouseWheel (default, null) = new EventFloat->Void> (); + public var onMouseWheel (default, null) = new EventFloat->MouseWheelMode->Void> (); public var onMove (default, null) = new EventFloat->Void> (); public var onRender (default, null) = new EventVoid> (); public var onRenderContextLost (default, null) = new EventVoid> (); @@ -459,14 +459,14 @@ class Window { - @:noCompletion private function get_cursor ():Cursor { + @:noCompletion private function get_cursor ():MouseCursor { return __backend.getCursor (); } - @:noCompletion private function set_cursor (value:Cursor):Cursor { + @:noCompletion private function set_cursor (value:MouseCursor):MouseCursor { return __backend.setCursor (value);