Improve relative touch deadzone behavior

This commit is contained in:
Cameron Gutman 2020-04-30 21:04:51 -07:00
commit 9bf52eb63a
3 changed files with 5 additions and 10 deletions

View file

@ -101,7 +101,6 @@ SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer*, int s
SDL_zero(m_LastTouchDownEvent); SDL_zero(m_LastTouchDownEvent);
SDL_zero(m_LastTouchUpEvent); SDL_zero(m_LastTouchUpEvent);
SDL_zero(m_TouchDownEvent); SDL_zero(m_TouchDownEvent);
SDL_zero(m_CumulativeDelta);
SDL_AtomicSet(&m_MouseDeltaX, 0); SDL_AtomicSet(&m_MouseDeltaX, 0);
SDL_AtomicSet(&m_MouseDeltaY, 0); SDL_AtomicSet(&m_MouseDeltaY, 0);

View file

@ -128,7 +128,6 @@ private:
bool m_AbsoluteTouchMode; bool m_AbsoluteTouchMode;
SDL_TouchFingerEvent m_TouchDownEvent[MAX_FINGERS]; SDL_TouchFingerEvent m_TouchDownEvent[MAX_FINGERS];
float m_CumulativeDelta[MAX_FINGERS];
SDL_TimerID m_LeftButtonReleaseTimer; SDL_TimerID m_LeftButtonReleaseTimer;
SDL_TimerID m_RightButtonReleaseTimer; SDL_TimerID m_RightButtonReleaseTimer;
SDL_TimerID m_DragTimer; SDL_TimerID m_DragTimer;

View file

@ -3,6 +3,8 @@
#include <Limelight.h> #include <Limelight.h>
#include <SDL.h> #include <SDL.h>
#include <QtMath>
// How long the mouse button will be pressed for a tap to click gesture // How long the mouse button will be pressed for a tap to click gesture
#define TAP_BUTTON_RELEASE_DELAY 100 #define TAP_BUTTON_RELEASE_DELAY 100
@ -10,7 +12,7 @@
#define DRAG_ACTIVATION_DELAY 650 #define DRAG_ACTIVATION_DELAY 650
// How far the finger can move before it cancels a drag or tap // How far the finger can move before it cancels a drag or tap
#define DEAD_ZONE_DELTA 0.1f #define DEAD_ZONE_DELTA 0.01f
Uint32 SdlInputHandler::releaseLeftButtonTimerCallback(Uint32, void*) Uint32 SdlInputHandler::releaseLeftButtonTimerCallback(Uint32, void*)
{ {
@ -113,13 +115,9 @@ void SdlInputHandler::handleRelativeFingerEvent(SDL_TouchFingerEvent* event)
} }
if (event->type == SDL_FINGERMOTION) { if (event->type == SDL_FINGERMOTION) {
// Count the total cumulative dx/dy that the finger
// has moved.
m_CumulativeDelta[fingerIndex] += qAbs(event->x);
m_CumulativeDelta[fingerIndex] += qAbs(event->y);
// If it's outside the deadzone delta, cancel drags and taps // If it's outside the deadzone delta, cancel drags and taps
if (m_CumulativeDelta[fingerIndex] > DEAD_ZONE_DELTA) { if (qSqrt(qPow(event->x - m_TouchDownEvent[fingerIndex].x, 2) +
qPow(event->y - m_TouchDownEvent[fingerIndex].y, 2)) > DEAD_ZONE_DELTA) {
SDL_RemoveTimer(m_DragTimer); SDL_RemoveTimer(m_DragTimer);
m_DragTimer = 0; m_DragTimer = 0;
@ -170,7 +168,6 @@ void SdlInputHandler::handleRelativeFingerEvent(SDL_TouchFingerEvent* event)
if (event->type == SDL_FINGERDOWN) { if (event->type == SDL_FINGERDOWN) {
m_TouchDownEvent[fingerIndex] = *event; m_TouchDownEvent[fingerIndex] = *event;
m_CumulativeDelta[fingerIndex] = 0;
} }
else if (event->type == SDL_FINGERUP) { else if (event->type == SDL_FINGERUP) {
m_TouchDownEvent[fingerIndex] = {}; m_TouchDownEvent[fingerIndex] = {};