From 443998ff339e2f024eb235b6013bff4c7fd15192 Mon Sep 17 00:00:00 2001 From: TelpeNight Date: Tue, 13 Sep 2016 00:03:44 -0700 Subject: [PATCH] Fix of mouse events in browser without pointer locks --- src/video/emscripten/SDL_emscriptenevents.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/video/emscripten/SDL_emscriptenevents.c b/src/video/emscripten/SDL_emscriptenevents.c index fc72e0f49..77eb20e3d 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);