diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-12-14 15:06:30 +0200 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-12-14 15:06:30 +0200 |
commit | 9069f757dead4096d75b42e8090313c101b57da2 (patch) | |
tree | f3a51b0c776fab87c0284fc37826efa633f17ef3 | |
parent | c6dc83b3496edf5617ee3ce29f56b84b32c9cc14 (diff) |
Touch: Notify about speed at end of swipe
-rw-r--r-- | src/ui/touch.c | 12 | ||||
-rw-r--r-- | src/ui/touch.h | 2 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/ui/touch.c b/src/ui/touch.c index aee5a383..0749bc7c 100644 --- a/src/ui/touch.c +++ b/src/ui/touch.c | |||
@@ -256,6 +256,11 @@ static iFloat3 gestureVector_Touch_(const iTouch *d) { | |||
256 | return sub_F3(d->pos[0], d->pos[lastIndex]); | 256 | return sub_F3(d->pos[0], d->pos[lastIndex]); |
257 | } | 257 | } |
258 | 258 | ||
259 | static uint32_t gestureSpan_Touch_(const iTouch *d) { | ||
260 | const size_t lastIndex = iMin(d->posCount - 1, lastIndex_Touch_); | ||
261 | return d->posTime[0] - d->posTime[lastIndex]; | ||
262 | } | ||
263 | |||
259 | static void update_TouchState_(void *ptr) { | 264 | static void update_TouchState_(void *ptr) { |
260 | iWindow *win = get_Window(); | 265 | iWindow *win = get_Window(); |
261 | const iWidget *oldHover = win->hover; | 266 | const iWidget *oldHover = win->hover; |
@@ -668,11 +673,14 @@ iBool processEvent_Touch(const SDL_Event *ev) { | |||
668 | #endif | 673 | #endif |
669 | if (touch->edge && !isStationary_Touch_(touch)) { | 674 | if (touch->edge && !isStationary_Touch_(touch)) { |
670 | const iFloat3 gesture = gestureVector_Touch_(touch); | 675 | const iFloat3 gesture = gestureVector_Touch_(touch); |
676 | const uint32_t duration = gestureSpan_Touch_(touch); | ||
671 | const float pixel = window->pixelRatio; | 677 | const float pixel = window->pixelRatio; |
672 | const int moveDir = x_F3(gesture) < -pixel ? -1 : x_F3(gesture) > pixel ? +1 : 0; | 678 | const int moveDir = x_F3(gesture) < -pixel ? -1 : x_F3(gesture) > pixel ? +1 : 0; |
673 | const int didAbort = (touch->edge == left_TouchEdge && moveDir < 0) || | 679 | const int didAbort = (touch->edge == left_TouchEdge && moveDir < 0) || |
674 | (touch->edge == right_TouchEdge && moveDir > 0); | 680 | (touch->edge == right_TouchEdge && moveDir > 0); |
675 | postCommandf_App("edgeswipe.ended abort:%d side:%d id:%llu", didAbort, touch->edge, touch->id); | 681 | postCommandf_App("edgeswipe.ended abort:%d side:%d id:%llu speed:%d", didAbort, |
682 | touch->edge, touch->id, | ||
683 | (int) (duration > 0 ? length_F3(gesture) / (duration / 1000.0f) : 0)); | ||
676 | remove_ArrayIterator(&i); | 684 | remove_ArrayIterator(&i); |
677 | continue; | 685 | continue; |
678 | } | 686 | } |
@@ -696,8 +704,8 @@ iBool processEvent_Touch(const SDL_Event *ev) { | |||
696 | } | 704 | } |
697 | /* Edge swipes do not generate momentum. */ | 705 | /* Edge swipes do not generate momentum. */ |
698 | const size_t lastIndex = iMin(touch->posCount - 1, lastIndex_Touch_); | 706 | const size_t lastIndex = iMin(touch->posCount - 1, lastIndex_Touch_); |
699 | const uint32_t duration = nowTime - touch->startTime; | ||
700 | const iFloat3 gestureVector = sub_F3(pos, touch->pos[lastIndex]); | 707 | const iFloat3 gestureVector = sub_F3(pos, touch->pos[lastIndex]); |
708 | const uint32_t duration = nowTime - touch->startTime; | ||
701 | iFloat3 velocity = zero_F3(); | 709 | iFloat3 velocity = zero_F3(); |
702 | #if 0 | 710 | #if 0 |
703 | if (touch->edge && fabsf(2 * x_F3(gestureVector)) > fabsf(y_F3(gestureVector)) && | 711 | if (touch->edge && fabsf(2 * x_F3(gestureVector)) > fabsf(y_F3(gestureVector)) && |
diff --git a/src/ui/touch.h b/src/ui/touch.h index c9c76d86..9c45fcb1 100644 --- a/src/ui/touch.h +++ b/src/ui/touch.h | |||
@@ -36,7 +36,7 @@ enum iWidgetTouchMode { | |||
36 | iBool processEvent_Touch (const SDL_Event *); | 36 | iBool processEvent_Touch (const SDL_Event *); |
37 | void update_Touch (void); | 37 | void update_Touch (void); |
38 | 38 | ||
39 | float stopWidgetMomentum_Touch (const iWidget *widget); | 39 | float stopWidgetMomentum_Touch (const iWidget *widget); /* pixels per second */ |
40 | enum iWidgetTouchMode widgetMode_Touch (const iWidget *widget); | 40 | enum iWidgetTouchMode widgetMode_Touch (const iWidget *widget); |
41 | void widgetDestroyed_Touch (iWidget *widget); | 41 | void widgetDestroyed_Touch (iWidget *widget); |
42 | void transferAffinity_Touch (iWidget *src, iWidget *dst); | 42 | void transferAffinity_Touch (iWidget *src, iWidget *dst); |