diff -r d5b4d374a312 src/events/SDL_touch.c --- a/src/events/SDL_touch.c Wed Mar 27 08:17:05 2019 -0700 +++ b/src/events/SDL_touch.c Tue Apr 02 14:58:03 2019 +0200 @@ -31,6 +31,12 @@ static int SDL_num_touch = 0; static SDL_Touch **SDL_touchDevices = NULL; +/* for mapping touch events to mice */ +#define DUPLICATE_TO_MOUSE_EVENT +#if defined(DUPLICATE_TO_MOUSE_EVENT) +static SDL_bool finger_touching = SDL_FALSE; +static SDL_FingerID first_finger; +#endif /* Public functions */ int @@ -241,6 +247,29 @@ return -1; } +#if defined(DUPLICATE_TO_MOUSE_EVENT) + { + SDL_Window *window = SDL_GetMouseFocus(); + if (window) { + if (down) { + if (finger_touching == SDL_FALSE) { + int pos_x = x * window->w; + int pos_y = y * window->y; + finger_touching = SDL_TRUE; + first_finger = fingerid; + SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y); + SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT); + } + } else { + if (finger_touching == SDL_TRUE && first_finger == fingerid) { + SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); + finger_touching = SDL_FALSE; + } + } + } + } +#endif + finger = SDL_GetFinger(touch, fingerid); if (down) { if (finger) { @@ -305,6 +334,19 @@ return -1; } +#if defined(DUPLICATE_TO_MOUSE_EVENT) + { + SDL_Window *window = SDL_GetMouseFocus(); + if (window) { + if (finger_touching == SDL_TRUE && first_finger == fingerid) { + int pos_x = x * window->w; + int pos_y = y * window->y; + SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, pos_x, pos_y); + } + } + } +#endif + finger = SDL_GetFinger(touch,fingerid); if (!finger) { return SDL_SendTouch(id, fingerid, SDL_TRUE, x, y, pressure);