diff --git a/src/lime/_internal/backend/flash/FlashMouse.hx b/src/lime/_internal/backend/flash/FlashMouse.hx index 231abfc0f..5051965a1 100644 --- a/src/lime/_internal/backend/flash/FlashMouse.hx +++ b/src/lime/_internal/backend/flash/FlashMouse.hx @@ -110,4 +110,11 @@ class FlashMouse { } + public static function get_visible ():Bool { + + return !__hidden; + + } + + } \ No newline at end of file diff --git a/src/lime/_internal/backend/html5/HTML5Mouse.hx b/src/lime/_internal/backend/html5/HTML5Mouse.hx index 3bb7c8d3d..ce0d688e6 100644 --- a/src/lime/_internal/backend/html5/HTML5Mouse.hx +++ b/src/lime/_internal/backend/html5/HTML5Mouse.hx @@ -24,7 +24,7 @@ class HTML5Mouse { for (window in Application.current.windows) { - window.__backend.element.style.cursor = "none"; + window.__backend.hideCursor (); } @@ -39,9 +39,11 @@ class HTML5Mouse { __hidden = false; - var cacheValue = __cursor; - __cursor = null; - set_cursor (cacheValue); + for (window in Application.current.windows) { + + window.__backend.showCursor (); + + } } @@ -74,28 +76,9 @@ class HTML5Mouse { if (__cursor != value) { - if (!__hidden) { + for (window in Application.current.windows) { - for (window in Application.current.windows) { - - window.__backend.element.style.cursor = switch (value) { - - case ARROW: "default"; - case CROSSHAIR: "crosshair"; - case MOVE: "move"; - case POINTER: "pointer"; - case RESIZE_NESW: "nesw-resize"; - case RESIZE_NS: "ns-resize"; - case RESIZE_NWSE: "nwse-resize"; - case RESIZE_WE: "ew-resize"; - case TEXT: "text"; - case WAIT: "wait"; - case WAIT_ARROW: "wait"; - default: "auto"; - - } - - } + window.__backend.setCursor (value); } @@ -122,4 +105,11 @@ class HTML5Mouse { } + public static function get_visible ():Bool { + + return !__hidden; + + } + + } \ No newline at end of file diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx index 1a6134f14..1d70c8bf2 100644 --- a/src/lime/_internal/backend/html5/HTML5Window.hx +++ b/src/lime/_internal/backend/html5/HTML5Window.hx @@ -29,6 +29,7 @@ import lime.system.System; import lime.system.Clipboard; import lime.ui.Gamepad; import lime.ui.Joystick; +import lime.ui.MouseCursor; import lime.ui.Touch; import lime.ui.Window; @@ -62,6 +63,8 @@ class HTML5Window { private var cacheElementWidth:Float; private var cacheMouseX:Float; private var cacheMouseY:Float; + private var cursor:MouseCursor; + private var cursorHidden:Bool; private var currentTouches = new Map (); private var enableTextEvents:Bool; private var isFullscreen:Bool; @@ -401,6 +404,18 @@ class HTML5Window { } + public function hideCursor ():Void { + + if (!cursorHidden) { + + cursorHidden = true; + element.style.cursor = "none"; + + } + + } + + public function setDisplayMode (value:DisplayMode):DisplayMode { return value; @@ -1005,6 +1020,38 @@ class HTML5Window { } + public function setCursor (value:MouseCursor):Void { + + if (cursor != value) { + + if (!cursorHidden) { + + element.style.cursor = switch (value) { + + case ARROW: "default"; + case CROSSHAIR: "crosshair"; + case MOVE: "move"; + case POINTER: "pointer"; + case RESIZE_NESW: "nesw-resize"; + case RESIZE_NS: "ns-resize"; + case RESIZE_NWSE: "nwse-resize"; + case RESIZE_WE: "ew-resize"; + case TEXT: "text"; + case WAIT: "wait"; + case WAIT_ARROW: "wait"; + default: "auto"; + + } + + } + + cursor = value; + + } + + } + + public function setEnableTextEvents (value:Bool):Bool { if (value) { @@ -1236,6 +1283,21 @@ class HTML5Window { } + public function showCursor ():Void { + + if (cursorHidden) { + + cursorHidden = false; + + var cacheValue = cursor; + cursor = null; + setCursor (cacheValue); + + } + + } + + private function updateSize ():Void { if (!parent.__resizable) return; diff --git a/src/lime/_internal/backend/native/NativeMouse.hx b/src/lime/_internal/backend/native/NativeMouse.hx index cea228707..f81227bb5 100644 --- a/src/lime/_internal/backend/native/NativeMouse.hx +++ b/src/lime/_internal/backend/native/NativeMouse.hx @@ -139,6 +139,14 @@ class NativeMouse { } + public static function get_visible ():Bool { + + // TODO: Use SDL_ShowCursor (SDL_QUERY) to poll state instead? + return !__hidden; + + } + + } diff --git a/src/lime/ui/Mouse.hx b/src/lime/ui/Mouse.hx index c3065c499..60224cc22 100644 --- a/src/lime/ui/Mouse.hx +++ b/src/lime/ui/Mouse.hx @@ -12,6 +12,7 @@ class Mouse { public static var cursor (get, set):MouseCursor; public static var lock (get, set):Bool; + public static var visible (get, never):Bool; public static function hide ():Void { @@ -70,6 +71,13 @@ class Mouse { } + private static function get_visible ():Bool { + + return MouseBackend.get_visible (); + + } + + }