diff options
| author | ubkp <[email protected]> | 2023-12-16 14:25:55 -0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-12-16 18:25:55 +0100 |
| commit | 2487174b48385247566f8e0af5564518446f7c13 (patch) | |
| tree | 85a9119fdbe5a995670ebe3ea6b8957b474285ad | |
| parent | 0df78d4eeb259d152850c0e2a68c7b079c8ec84d (diff) | |
| download | raylib-2487174b48385247566f8e0af5564518446f7c13.tar.gz raylib-2487174b48385247566f8e0af5564518446f7c13.zip | |
Fix CORE.Input.Mouse.cursorHidden with callbacks for PLATFORM_WEB (#3644)
| -rw-r--r-- | src/platforms/rcore_web.c | 14 |
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) { |
