Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Bug 4576: handle mapping of TouchEvents to MouseEvents at higher level
- Loading branch information
Showing
with
42 additions
and
0 deletions.
-
+42
−0
src/events/SDL_touch.c
|
@@ -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 @@ 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) { |
|
@@ -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); |
|
|