Fixed hold gesture detection

- Fixed gestures hold detection.
- Improved hold state detection for little touch position increments
(sensitivity).
This commit is contained in:
victorfisac 2016-01-22 17:07:54 +01:00
parent f874fdc1ad
commit 233f7611da

View File

@ -217,9 +217,14 @@ void ProcessGestureEvent(GestureEvent event)
angle = CalculateAngle(initialDragPosition, endDragPosition, magnitude);
intensity = magnitude / (float)draggingTimeCounter;
// Check if drag movement is less than minimum to keep it as hold state or switch to drag state
if(magnitude > FORCE_TO_SWIPE)
{
currentGesture = GESTURE_DRAG;
draggingTimeCounter++;
}
else currentGesture = GESTURE_HOLD;
}
}
} break;
case TYPE_DUAL_INPUT:
@ -339,8 +344,13 @@ void UpdateGestures(void)
{
// NOTE: Gestures are processed through system callbacks on touch events
if ((previousGesture == GESTURE_TAP) && (currentGesture == GESTURE_TAP)) currentGesture = GESTURE_HOLD;
else if (currentGesture != GESTURE_HOLD) currentGesture = GESTURE_NONE;
// When screen is touched, in first frame GESTURE_TAP is called but in next frame touch event callback is not called (if touch position doesn't change),
// so we need to store previous frame gesture type manually in this update function to switch to HOLD if current gesture is
// GESTURE_TAP two frames in a row. Due to current gesture is set to HOLD, current gesture doesn't need to be reset to NONE every frame.
// It will be reset when UP is called.
if(currentGesture == GESTURE_TAP) previousGesture = currentGesture;
if(previousGesture == GESTURE_TAP && currentGesture == GESTURE_TAP) currentGesture = GESTURE_HOLD;
}
//----------------------------------------------------------------------------------