summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorubkp <[email protected]>2023-12-16 14:25:55 -0300
committerGitHub <[email protected]>2023-12-16 18:25:55 +0100
commit2487174b48385247566f8e0af5564518446f7c13 (patch)
tree85a9119fdbe5a995670ebe3ea6b8957b474285ad
parent0df78d4eeb259d152850c0e2a68c7b079c8ec84d (diff)
downloadraylib-2487174b48385247566f8e0af5564518446f7c13.tar.gz
raylib-2487174b48385247566f8e0af5564518446f7c13.zip
Fix CORE.Input.Mouse.cursorHidden with callbacks for PLATFORM_WEB (#3644)
-rw-r--r--src/platforms/rcore_web.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/platforms/rcore_web.c b/src/platforms/rcore_web.c
index ea74472e..ba44096b 100644
--- a/src/platforms/rcore_web.c
+++ b/src/platforms/rcore_web.c
@@ -114,6 +114,7 @@ static EM_BOOL EmscriptenResizeCallback(int eventType, const EmscriptenUiEvent *
// Emscripten input callback events
static EM_BOOL EmscriptenMouseCallback(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData);
+static EM_BOOL EmscriptenPointerlockCallback(int eventType, const EmscriptenPointerlockChangeEvent *pointerlockChangeEvent, void *userData);
static EM_BOOL EmscriptenTouchCallback(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData);
static EM_BOOL EmscriptenGamepadCallback(int eventType, const EmscriptenGamepadEvent *gamepadEvent, void *userData);
@@ -765,7 +766,7 @@ void EnableCursor(void)
// Set cursor position in the middle
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
- CORE.Input.Mouse.cursorHidden = false;
+ // NOTE: CORE.Input.Mouse.cursorHidden handled by EmscriptenPointerlockCallback()
}
// Disables cursor (lock cursor)
@@ -777,7 +778,7 @@ void DisableCursor(void)
// Set cursor position in the middle
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
- CORE.Input.Mouse.cursorHidden = true;
+ // NOTE: CORE.Input.Mouse.cursorHidden handled by EmscriptenPointerlockCallback()
}
// Swap back buffer with front buffer (screen drawing)
@@ -1251,6 +1252,7 @@ int InitPlatform(void)
// Support mouse events
emscripten_set_click_callback("#canvas", NULL, 1, EmscriptenMouseCallback);
+ emscripten_set_pointerlockchange_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, NULL, 1, EmscriptenPointerlockCallback);
// Support touch events
emscripten_set_touchstart_callback("#canvas", NULL, 1, EmscriptenTouchCallback);
@@ -1570,6 +1572,14 @@ static EM_BOOL EmscriptenMouseCallback(int eventType, const EmscriptenMouseEvent
return 1; // The event was consumed by the callback handler
}
+// Register pointer lock events
+static EM_BOOL EmscriptenPointerlockCallback(int eventType, const EmscriptenPointerlockChangeEvent *pointerlockChangeEvent, void *userData)
+{
+ CORE.Input.Mouse.cursorHidden = EM_ASM_INT( { if (document.pointerLockElement) return 1; }, 0);
+
+ return 1; // The event was consumed by the callback handler
+}
+
// Register connected/disconnected gamepads events
static EM_BOOL EmscriptenGamepadCallback(int eventType, const EmscriptenGamepadEvent *gamepadEvent, void *userData)
{