diff --git a/lime/ui/Mouse.hx b/lime/ui/Mouse.hx index 8682a78e2..02e124b15 100644 --- a/lime/ui/Mouse.hx +++ b/lime/ui/Mouse.hx @@ -21,6 +21,8 @@ class Mouse { if (!__hidden) { + __hidden = true; + #if (js && html5) for (window in Application.__instance.windows) { @@ -35,8 +37,6 @@ class Mouse { #end - __hidden = true; - } } @@ -46,6 +46,8 @@ class Mouse { if (__hidden) { + __hidden = false; + #if (js && html5) var cacheValue = __cursor; @@ -58,8 +60,6 @@ class Mouse { #end - __hidden = false; - } } @@ -92,9 +92,18 @@ class Mouse { window.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"; - default: "default"; + case WAIT: "wait"; + case WAIT_ARROW: "wait"; + default: "auto"; } @@ -102,11 +111,20 @@ class Mouse { #elseif (cpp || neko || nodejs) - var type = switch (value) { + var type:MouseCursorType = switch (value) { - case POINTER: MouseCursorType.POINTER; - case TEXT: MouseCursorType.TEXT; - default: MouseCursorType.DEFAULT; + case ARROW: ARROW; + case CROSSHAIR: CROSSHAIR; + case MOVE: MOVE; + case POINTER: POINTER; + case RESIZE_NESW: RESIZE_NESW; + case RESIZE_NS: RESIZE_NS; + case RESIZE_NWSE: RESIZE_NWSE; + case RESIZE_WE: RESIZE_WE; + case TEXT: TEXT; + case WAIT: WAIT; + case WAIT_ARROW: WAIT_ARROW; + default: DEFAULT; } @@ -137,8 +155,17 @@ class Mouse { @:enum private abstract MouseCursorType(Int) { - var DEFAULT = 0; - var POINTER = 1; - var TEXT = 2; + var ARROW = 0; + var CROSSHAIR = 1; + var DEFAULT = 2; + var MOVE = 3; + var POINTER = 4; + var RESIZE_NESW = 5; + var RESIZE_NS = 6; + var RESIZE_NWSE = 7; + var RESIZE_WE = 8; + var TEXT = 9; + var WAIT = 10; + var WAIT_ARROW = 11; } \ No newline at end of file diff --git a/lime/ui/MouseCursor.hx b/lime/ui/MouseCursor.hx index 21ef509a9..8d07f8803 100644 --- a/lime/ui/MouseCursor.hx +++ b/lime/ui/MouseCursor.hx @@ -3,11 +3,18 @@ package lime.ui; enum MouseCursor { - + 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/project/include/ui/MouseCursor.h b/project/include/ui/MouseCursor.h index e8f93d7d8..5194f025d 100644 --- a/project/include/ui/MouseCursor.h +++ b/project/include/ui/MouseCursor.h @@ -7,9 +7,18 @@ namespace lime { enum MouseCursor { - DEFAULT, - POINTER, - TEXT, + ARROW, + CROSSHAIR, + DEFAULT, + MOVE, + POINTER, + RESIZE_NESW, + RESIZE_NS, + RESIZE_NWSE, + RESIZE_WE, + TEXT, + WAIT, + WAIT_ARROW, CUSTOM }; diff --git a/project/src/backend/sdl/SDLMouse.cpp b/project/src/backend/sdl/SDLMouse.cpp index b8f9536d3..0c11d7be1 100644 --- a/project/src/backend/sdl/SDLMouse.cpp +++ b/project/src/backend/sdl/SDLMouse.cpp @@ -5,9 +5,18 @@ namespace lime { MouseCursor Mouse::currentCursor = DEFAULT; - SDL_Cursor* SDLMouse::defaultCursor = 0; + + SDL_Cursor* SDLMouse::arrowCursor = 0; + SDL_Cursor* SDLMouse::crosshairCursor = 0; + SDL_Cursor* SDLMouse::moveCursor = 0; SDL_Cursor* SDLMouse::pointerCursor = 0; + SDL_Cursor* SDLMouse::resizeNESWCursor = 0; + SDL_Cursor* SDLMouse::resizeNSCursor = 0; + SDL_Cursor* SDLMouse::resizeNWSECursor = 0; + SDL_Cursor* SDLMouse::resizeWECursor = 0; SDL_Cursor* SDLMouse::textCursor = 0; + SDL_Cursor* SDLMouse::waitCursor = 0; + SDL_Cursor* SDLMouse::waitArrowCursor = 0; void Mouse::Hide () { @@ -23,6 +32,28 @@ namespace lime { switch (cursor) { + case CROSSHAIR: + + if (!SDLMouse::crosshairCursor) { + + SDLMouse::crosshairCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_CROSSHAIR); + + } + + SDL_SetCursor (SDLMouse::crosshairCursor); + break; + + case MOVE: + + if (!SDLMouse::moveCursor) { + + SDLMouse::moveCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZEALL); + + } + + SDL_SetCursor (SDLMouse::moveCursor); + break; + case POINTER: if (!SDLMouse::pointerCursor) { @@ -34,6 +65,50 @@ namespace lime { SDL_SetCursor (SDLMouse::pointerCursor); break; + case RESIZE_NESW: + + if (!SDLMouse::resizeNESWCursor) { + + SDLMouse::resizeNESWCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZENESW); + + } + + SDL_SetCursor (SDLMouse::resizeNESWCursor); + break; + + case RESIZE_NS: + + if (!SDLMouse::resizeNSCursor) { + + SDLMouse::resizeNSCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZENS); + + } + + SDL_SetCursor (SDLMouse::resizeNSCursor); + break; + + case RESIZE_NWSE: + + if (!SDLMouse::resizeNWSECursor) { + + SDLMouse::resizeNWSECursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZENWSE); + + } + + SDL_SetCursor (SDLMouse::resizeNWSECursor); + break; + + case RESIZE_WE: + + if (!SDLMouse::resizeWECursor) { + + SDLMouse::resizeWECursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_SIZEWE); + + } + + SDL_SetCursor (SDLMouse::resizeWECursor); + break; + case TEXT: if (!SDLMouse::textCursor) { @@ -45,15 +120,37 @@ namespace lime { SDL_SetCursor (SDLMouse::textCursor); break; - default: + case WAIT: - if (!SDLMouse::defaultCursor) { + if (!SDLMouse::waitCursor) { - SDLMouse::defaultCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_ARROW); + SDLMouse::waitCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_WAIT); } - SDL_SetCursor (SDLMouse::defaultCursor); + SDL_SetCursor (SDLMouse::waitCursor); + break; + + case WAIT_ARROW: + + if (!SDLMouse::waitArrowCursor) { + + SDLMouse::waitArrowCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_WAITARROW); + + } + + SDL_SetCursor (SDLMouse::waitArrowCursor); + break; + + default: + + if (!SDLMouse::arrowCursor) { + + SDLMouse::arrowCursor = SDL_CreateSystemCursor (SDL_SYSTEM_CURSOR_ARROW); + + } + + SDL_SetCursor (SDLMouse::arrowCursor); break; } @@ -62,8 +159,6 @@ namespace lime { } - - } diff --git a/project/src/backend/sdl/SDLMouse.h b/project/src/backend/sdl/SDLMouse.h index a294d0c7f..8ab457941 100644 --- a/project/src/backend/sdl/SDLMouse.h +++ b/project/src/backend/sdl/SDLMouse.h @@ -14,9 +14,17 @@ namespace lime { public: - static SDL_Cursor* defaultCursor; + static SDL_Cursor* arrowCursor; + static SDL_Cursor* crosshairCursor; + static SDL_Cursor* moveCursor; static SDL_Cursor* pointerCursor; + static SDL_Cursor* resizeNESWCursor; + static SDL_Cursor* resizeNSCursor; + static SDL_Cursor* resizeNWSECursor; + static SDL_Cursor* resizeWECursor; static SDL_Cursor* textCursor; + static SDL_Cursor* waitCursor; + static SDL_Cursor* waitArrowCursor; };