Skip to content

Commit

Permalink
Bug 4576: handle mapping of TouchEvents to MouseEvents at higher level
Browse files Browse the repository at this point in the history
  • Loading branch information
1bsyl committed Apr 2, 2019
1 parent 1febfed commit a3f2c44
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions src/events/SDL_touch.c
Expand Up @@ -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
Expand Down Expand Up @@ -241,6 +247,29 @@ SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid,
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) {
Expand Down Expand Up @@ -305,6 +334,19 @@ SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid,
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);
Expand Down

0 comments on commit a3f2c44

Please sign in to comment.