Bug 4576: remove touch/mouse duplication for Android

This commit is contained in:
Sylvain Becker 2019-04-02 17:23:55 +02:00
parent 9d28156f12
commit 9b3c2258aa

View File

@ -40,23 +40,11 @@
#define ACTION_POINTER_DOWN 5 #define ACTION_POINTER_DOWN 5
#define ACTION_POINTER_UP 6 #define ACTION_POINTER_UP 6
static void Android_GetWindowCoordinates(SDL_Window *window, float x, float y,
int *window_x, int *window_y)
{
int window_w, window_h;
SDL_GetWindowSize(window, &window_w, &window_h);
*window_x = (int)(x * window_w);
*window_y = (int)(y * window_h);
}
static SDL_bool separate_mouse_and_touch = SDL_FALSE;
static void SDLCALL static void SDLCALL
SeparateEventsHintWatcher(void *userdata, const char *name, SeparateEventsHintWatcher(void *userdata, const char *name,
const char *oldValue, const char *newValue) const char *oldValue, const char *newValue)
{ {
separate_mouse_and_touch = (newValue && (SDL_strcmp(newValue, "1") == 0)); SDL_bool separate_mouse_and_touch = (newValue && (SDL_strcmp(newValue, "1") == 0));
Android_JNI_SetSeparateMouseAndTouch(separate_mouse_and_touch); Android_JNI_SetSeparateMouseAndTouch(separate_mouse_and_touch);
} }
@ -74,7 +62,6 @@ void Android_QuitTouch(void)
{ {
SDL_DelHintCallback(SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH, SDL_DelHintCallback(SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH,
SeparateEventsHintWatcher, NULL); SeparateEventsHintWatcher, NULL);
separate_mouse_and_touch = SDL_FALSE;
} }
void Android_OnTouch(SDL_Window *window, int touch_device_id_in, int pointer_finger_id_in, int action, float x, float y, float p) void Android_OnTouch(SDL_Window *window, int touch_device_id_in, int pointer_finger_id_in, int action, float x, float y, float p)
@ -82,7 +69,6 @@ void Android_OnTouch(SDL_Window *window, int touch_device_id_in, int pointer_fin
SDL_TouchID touchDeviceId = 0; SDL_TouchID touchDeviceId = 0;
SDL_FingerID fingerId = 0; SDL_FingerID fingerId = 0;
int window_x, window_y; int window_x, window_y;
static SDL_FingerID pointerFingerID = 0;
if (!window) { if (!window) {
return; return;
@ -96,40 +82,16 @@ void Android_OnTouch(SDL_Window *window, int touch_device_id_in, int pointer_fin
fingerId = (SDL_FingerID)pointer_finger_id_in; fingerId = (SDL_FingerID)pointer_finger_id_in;
switch (action) { switch (action) {
case ACTION_DOWN: case ACTION_DOWN:
/* Primary pointer down */
if (!separate_mouse_and_touch) {
Android_GetWindowCoordinates(window, x, y, &window_x, &window_y);
/* send moved event */
SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, window_x, window_y);
/* send mouse down event */
SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT);
}
pointerFingerID = fingerId;
case ACTION_POINTER_DOWN: case ACTION_POINTER_DOWN:
/* Non primary pointer down */
SDL_SendTouch(touchDeviceId, fingerId, SDL_TRUE, x, y, p); SDL_SendTouch(touchDeviceId, fingerId, SDL_TRUE, x, y, p);
break; break;
case ACTION_MOVE: case ACTION_MOVE:
if (!pointerFingerID) {
if (!separate_mouse_and_touch) {
Android_GetWindowCoordinates(window, x, y, &window_x, &window_y);
/* send moved event */
SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, window_x, window_y);
}
}
SDL_SendTouchMotion(touchDeviceId, fingerId, x, y, p); SDL_SendTouchMotion(touchDeviceId, fingerId, x, y, p);
break; break;
case ACTION_UP: case ACTION_UP:
/* Primary pointer up */
if (!separate_mouse_and_touch) {
/* send mouse up */
SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
}
pointerFingerID = (SDL_FingerID) 0;
case ACTION_POINTER_UP: case ACTION_POINTER_UP:
/* Non primary pointer up */
SDL_SendTouch(touchDeviceId, fingerId, SDL_FALSE, x, y, p); SDL_SendTouch(touchDeviceId, fingerId, SDL_FALSE, x, y, p);
break; break;