2
0
Эх сурвалжийг харах

[rcore] Fix `ShowCursor()`, `HideCursor()` and review `SetMouseCursor()` for `PLATFORM_WEB` (#3647)

* Fix ShowCursor(), HideCursor() and review SetMouseCursor() for PLATFORM_WEB

* Add static to cursorLUT[]

* Re-review SetMouseCursor()
ubkp 1 жил өмнө
parent
commit
9fcfc8d64b
1 өөрчлөгдсөн 31 нэмэгдсэн , 27 устгасан
  1. 31 27
      src/platforms/rcore_web.c

+ 31 - 27
src/platforms/rcore_web.c

@@ -83,6 +83,23 @@ extern CoreData CORE;                   // Global CORE state context
 
 static PlatformData platform = { 0 };   // Platform specific data
 
+//----------------------------------------------------------------------------------
+// Local Variables Definition
+//----------------------------------------------------------------------------------
+static const char cursorLUT[11][12] = {
+    "default",     // 0  MOUSE_CURSOR_DEFAULT
+    "default",     // 1  MOUSE_CURSOR_ARROW
+    "text",        // 2  MOUSE_CURSOR_IBEAM
+    "crosshair",   // 3  MOUSE_CURSOR_CROSSHAIR
+    "pointer",     // 4  MOUSE_CURSOR_POINTING_HAND
+    "ew-resize",   // 5  MOUSE_CURSOR_RESIZE_EW
+    "ns-resize",   // 6  MOUSE_CURSOR_RESIZE_NS
+    "nwse-resize", // 7  MOUSE_CURSOR_RESIZE_NWSE
+    "nesw-resize", // 8  MOUSE_CURSOR_RESIZE_NESW
+    "move",        // 9  MOUSE_CURSOR_RESIZE_ALL
+    "not-allowed"  // 10 MOUSE_CURSOR_NOT_ALLOWED
+};
+
 //----------------------------------------------------------------------------------
 // Module Internal Functions Declaration
 //----------------------------------------------------------------------------------
@@ -749,13 +766,23 @@ const char *GetClipboardText(void)
 // Show mouse cursor
 void ShowCursor(void)
 {
-    CORE.Input.Mouse.cursorHidden = false;
+    if (CORE.Input.Mouse.cursorHidden)
+    {
+        EM_ASM( { document.getElementById("canvas").style.cursor = UTF8ToString($0); }, cursorLUT[CORE.Input.Mouse.cursor]);
+
+        CORE.Input.Mouse.cursorHidden = false;
+    }
 }
 
 // Hides mouse cursor
 void HideCursor(void)
 {
-    CORE.Input.Mouse.cursorHidden = true;
+    if (!CORE.Input.Mouse.cursorHidden)
+    {
+        EM_ASM(document.getElementById('canvas').style.cursor = 'none';);
+
+        CORE.Input.Mouse.cursorHidden = true;
+    }
 }
 
 // Enables cursor (unlock cursor)
@@ -837,32 +864,9 @@ void SetMouseCursor(int cursor)
 {
     if (CORE.Input.Mouse.cursor != cursor)
     {
-        const char *cursorName = NULL;
-        CORE.Input.Mouse.cursor = cursor;
+        if (!CORE.Input.Mouse.cursorHidden) EM_ASM( { document.getElementById('canvas').style.cursor = UTF8ToString($0); }, cursorLUT[cursor]);
 
-        switch (cursor)
-        {
-            case MOUSE_CURSOR_IBEAM: cursorName = "text"; break;
-            case MOUSE_CURSOR_CROSSHAIR: cursorName = "crosshair"; break;
-            case MOUSE_CURSOR_POINTING_HAND: cursorName = "pointer"; break;
-            case MOUSE_CURSOR_RESIZE_EW: cursorName = "ew-resize"; break;
-            case MOUSE_CURSOR_RESIZE_NS: cursorName = "ns-resize"; break;
-            case MOUSE_CURSOR_RESIZE_NWSE: cursorName = "nwse-resize"; break;
-            case MOUSE_CURSOR_RESIZE_NESW: cursorName = "nesw-resize"; break;
-            case MOUSE_CURSOR_RESIZE_ALL: cursorName = "move"; break;
-            case MOUSE_CURSOR_NOT_ALLOWED: cursorName = "not-allowed"; break;
-            case MOUSE_CURSOR_ARROW: // WARNING: It does not seem t be a specific cursor for arrow
-            case MOUSE_CURSOR_DEFAULT: cursorName = "default"; break;
-            default:
-            {
-                cursorName = "default";
-                CORE.Input.Mouse.cursor = MOUSE_CURSOR_DEFAULT;
-            } break;
-        }
-
-        // Set the cursor element on the canvas CSS
-        // The canvas is coded to the Id "canvas" on init
-        EM_ASM({document.getElementById("canvas").style.cursor = UTF8ToString($0);}, cursorName);
+        CORE.Input.Mouse.cursor = cursor;
     }
 }