aboutsummaryrefslogtreecommitdiff
path: root/backends/events/psp2sdl/psp2sdl-events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/events/psp2sdl/psp2sdl-events.cpp')
-rw-r--r--backends/events/psp2sdl/psp2sdl-events.cpp48
1 files changed, 28 insertions, 20 deletions
diff --git a/backends/events/psp2sdl/psp2sdl-events.cpp b/backends/events/psp2sdl/psp2sdl-events.cpp
index 6fc0b7dede..a8a179d170 100644
--- a/backends/events/psp2sdl/psp2sdl-events.cpp
+++ b/backends/events/psp2sdl/psp2sdl-events.cpp
@@ -107,6 +107,8 @@ void PSP2EventSource::preprocessFingerDown(SDL_Event *event) {
if (_finger[port][i].id == -1) {
_finger[port][i].id = id;
_finger[port][i].timeLastDown = event->tfinger.timestamp;
+ _finger[port][i].lastDownX = event->tfinger.x;
+ _finger[port][i].lastDownY = event->tfinger.y;
_finger[port][i].lastX = x;
_finger[port][i].lastY = y;
break;
@@ -137,28 +139,34 @@ void PSP2EventSource::preprocessFingerUp(SDL_Event *event) {
if (!_multiFingerDragging[port]) {
if ((event->tfinger.timestamp - _finger[port][i].timeLastDown) <= MAX_TAP_TIME) {
// short (<MAX_TAP_TIME ms) tap is interpreted as right/left mouse click depending on # fingers already down
- if (numFingersDown == 2 || numFingersDown == 1) {
- Uint8 simulatedButton = 0;
- if (numFingersDown == 2) {
- simulatedButton = SDL_BUTTON_RIGHT;
- } else if (numFingersDown == 1) {
- simulatedButton = SDL_BUTTON_LEFT;
- if (port == 0 && !ConfMan.getBool("frontpanel_touchpad_mode")) {
- convertTouchXYToGameXY(event->tfinger.x, event->tfinger.y, &x, &y);
+ // but only if the finger hasn't moved since it was pressed down by more than MAX_TAP_MOTION_DISTANCE pixels
+ float xrel = ((event->tfinger.x * 960.0) - (_finger[port][i].lastDownX * 960.0));
+ float yrel = ((event->tfinger.y * 544.0) - (_finger[port][i].lastDownY * 544.0));
+ float maxRSquared = (float) (MAX_TAP_MOTION_DISTANCE * MAX_TAP_MOTION_DISTANCE);
+ if ((xrel * xrel + yrel * yrel) < maxRSquared) {
+ if (numFingersDown == 2 || numFingersDown == 1) {
+ Uint8 simulatedButton = 0;
+ if (numFingersDown == 2) {
+ simulatedButton = SDL_BUTTON_RIGHT;
+ } else if (numFingersDown == 1) {
+ simulatedButton = SDL_BUTTON_LEFT;
+ if (port == 0 && !ConfMan.getBool("frontpanel_touchpad_mode")) {
+ convertTouchXYToGameXY(event->tfinger.x, event->tfinger.y, &x, &y);
+ }
}
- }
- event->type = SDL_MOUSEBUTTONDOWN;
- event->button.button = simulatedButton;
- event->button.x = x;
- event->button.y = y;
-
- SDL_Event ev;
- ev.type = SDL_MOUSEBUTTONUP;
- ev.button.button = simulatedButton;
- ev.button.x = x;
- ev.button.y = y;
- SDL_PushEvent(&ev);
+ event->type = SDL_MOUSEBUTTONDOWN;
+ event->button.button = simulatedButton;
+ event->button.x = x;
+ event->button.y = y;
+
+ SDL_Event ev;
+ ev.type = SDL_MOUSEBUTTONUP;
+ ev.button.button = simulatedButton;
+ ev.button.x = x;
+ ev.button.y = y;
+ SDL_PushEvent(&ev);
+ }
}
}
} else if (numFingersDown == 1) {