diff options
| author | victorfisac <victorfisac@gmail.com> | 2016-01-22 17:07:54 +0100 |
|---|---|---|
| committer | victorfisac <victorfisac@gmail.com> | 2016-01-22 17:07:54 +0100 |
| commit | 233f7611da96ea6bc0b7c62f6a06dacef707f9d7 (patch) | |
| tree | acb701111e7e3b31e57c487a3d2e1e011106e979 /src | |
| parent | f874fdc1addf2cb6aba788bc8879b76269c7a29d (diff) | |
| download | raylib-233f7611da96ea6bc0b7c62f6a06dacef707f9d7.tar.gz raylib-233f7611da96ea6bc0b7c62f6a06dacef707f9d7.zip | |
Fixed hold gesture detection
- Fixed gestures hold detection.
- Improved hold state detection for little touch position increments
(sensitivity).
Diffstat (limited to 'src')
| -rw-r--r-- | src/gestures.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/gestures.c b/src/gestures.c index 88cdb528..ea744555 100644 --- a/src/gestures.c +++ b/src/gestures.c @@ -217,8 +217,13 @@ void ProcessGestureEvent(GestureEvent event) angle = CalculateAngle(initialDragPosition, endDragPosition, magnitude); intensity = magnitude / (float)draggingTimeCounter; - currentGesture = GESTURE_DRAG; - 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; @@ -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; } //---------------------------------------------------------------------------------- |
