# HG changeset patch # User Ryan C. Gordon # Date 1471046340 14400 # Node ID c09f06c4e8c8dafefe0eb5dbe722a221379c29bf # Parent 1b8594db77f12e06e8c800bf5adaba5a1af4e594 emscripten: send fake mouse events for touches, like other targets do. (This really should be handled at the higher level and not in the individual targets, but this fixes the immediate bug.) diff -r 1b8594db77f1 -r c09f06c4e8c8 src/video/emscripten/SDL_emscriptenevents.c --- a/src/video/emscripten/SDL_emscriptenevents.c Fri Aug 12 00:03:58 2016 -0400 +++ b/src/video/emscripten/SDL_emscriptenevents.c Fri Aug 12 19:59:00 2016 -0400 @@ -391,11 +391,24 @@ x = touchEvent->touches[i].canvasX / (float)window_data->windowed_width; y = touchEvent->touches[i].canvasY / (float)window_data->windowed_height; - if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) { + if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) { + if (!window_data->finger_touching) { + window_data->finger_touching = SDL_TRUE; + window_data->first_finger = id; + SDL_SendMouseMotion(window_data->window, SDL_TOUCH_MOUSEID, 0, x, y); + SDL_SendMouseButton(window_data->window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT); + } + SDL_SendTouch(deviceId, id, SDL_TRUE, x, y, 1.0f); + } else if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) { + if ((window_data->finger_touching) && (window_data->first_finger == id)) { + SDL_SendMouseMotion(window_data->window, SDL_TOUCH_MOUSEID, 0, x, y); + } SDL_SendTouchMotion(deviceId, id, x, y, 1.0f); - } else if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) { - SDL_SendTouch(deviceId, id, SDL_TRUE, x, y, 1.0f); } else { + if ((window_data->finger_touching) && (window_data->first_finger == id)) { + SDL_SendMouseButton(window_data->window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); + window_data->finger_touching = SDL_FALSE; + } SDL_SendTouch(deviceId, id, SDL_FALSE, x, y, 1.0f); } } diff -r 1b8594db77f1 -r c09f06c4e8c8 src/video/emscripten/SDL_emscriptenvideo.h --- a/src/video/emscripten/SDL_emscriptenvideo.h Fri Aug 12 00:03:58 2016 -0400 +++ b/src/video/emscripten/SDL_emscriptenvideo.h Fri Aug 12 19:59:00 2016 -0400 @@ -24,6 +24,7 @@ #define _SDL_emscriptenvideo_h #include "../SDL_sysvideo.h" +#include "../../events/SDL_touch_c.h" #include #include @@ -45,6 +46,9 @@ SDL_bool external_size; int requested_fullscreen_mode; + + SDL_bool finger_touching; /* for mapping touch events to mice */ + SDL_FingerID first_finger; } SDL_WindowData; #endif /* _SDL_emscriptenvideo_h */