Fix of mouse events in browser without pointer locks
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
diff --git a/src/video/emscripten/SDL_emscriptenevents.c b/src/video/emscripten/SDL_emscriptenevents.c
index fc72e0f..77eb20e 100644
--- a/src/video/emscripten/SDL_emscriptenevents.c
+++ b/src/video/emscripten/SDL_emscriptenevents.c
@@ -305,9 +305,10 @@ Emscripten_HandleMouseMove(int eventType, const EmscriptenMouseEvent *mouseEvent
EmscriptenPointerlockChangeEvent pointerlock_status;
/* check for pointer lock */
- emscripten_get_pointerlock_status(&pointerlock_status);
+ int isPointerLockSupported = emscripten_get_pointerlock_status(&pointerlock_status);
+ int isPointerLocked = isPointerLockSupported == EMSCRIPTEN_RESULT_SUCCESS ? pointerlock_status.isActive : SDL_FALSE;
- if (pointerlock_status.isActive) {
+ if (isPointerLocked) {
mx = mouseEvent->movementX;
my = mouseEvent->movementY;
}
@@ -319,7 +320,7 @@ Emscripten_HandleMouseMove(int eventType, const EmscriptenMouseEvent *mouseEvent
mx = mx * (window_data->window->w / (client_w * window_data->pixel_ratio));
my = my * (window_data->window->h / (client_h * window_data->pixel_ratio));
- SDL_SendMouseMotion(window_data->window, 0, pointerlock_status.isActive, mx, my);
+ SDL_SendMouseMotion(window_data->window, 0, isPointerLocked, mx, my);
return 0;
}
@@ -354,16 +355,17 @@ Emscripten_HandleMouseFocus(int eventType, const EmscriptenMouseEvent *mouseEven
EmscriptenPointerlockChangeEvent pointerlock_status;
/* check for pointer lock */
- emscripten_get_pointerlock_status(&pointerlock_status);
+ int isPointerLockSupported = emscripten_get_pointerlock_status(&pointerlock_status);
+ int isPointerLocked = isPointerLockSupported == EMSCRIPTEN_RESULT_SUCCESS ? pointerlock_status.isActive : SDL_FALSE;
- if (!pointerlock_status.isActive) {
+ if (!isPointerLocked) {
/* rescale (in case canvas is being scaled)*/
double client_w, client_h;
emscripten_get_element_css_size(NULL, &client_w, &client_h);
mx = mx * (window_data->window->w / (client_w * window_data->pixel_ratio));
my = my * (window_data->window->h / (client_h * window_data->pixel_ratio));
- SDL_SendMouseMotion(window_data->window, 0, pointerlock_status.isActive, mx, my);
+ SDL_SendMouseMotion(window_data->window, 0, isPointerLocked, mx, my);
}
SDL_SetMouseFocus(eventType == EMSCRIPTEN_EVENT_MOUSEENTER ? window_data->window : NULL);