summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2021-12-14 15:06:30 +0200
committerJaakko Keränen <jaakko.keranen@iki.fi>2021-12-14 15:06:30 +0200
commit9069f757dead4096d75b42e8090313c101b57da2 (patch)
treef3a51b0c776fab87c0284fc37826efa633f17ef3 /src
parentc6dc83b3496edf5617ee3ce29f56b84b32c9cc14 (diff)
Touch: Notify about speed at end of swipe
Diffstat (limited to 'src')
-rw-r--r--src/ui/touch.c12
-rw-r--r--src/ui/touch.h2
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
259static 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
259static void update_TouchState_(void *ptr) { 264static 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 {
36iBool processEvent_Touch (const SDL_Event *); 36iBool processEvent_Touch (const SDL_Event *);
37void update_Touch (void); 37void update_Touch (void);
38 38
39float stopWidgetMomentum_Touch (const iWidget *widget); 39float stopWidgetMomentum_Touch (const iWidget *widget); /* pixels per second */
40enum iWidgetTouchMode widgetMode_Touch (const iWidget *widget); 40enum iWidgetTouchMode widgetMode_Touch (const iWidget *widget);
41void widgetDestroyed_Touch (iWidget *widget); 41void widgetDestroyed_Touch (iWidget *widget);
42void transferAffinity_Touch (iWidget *src, iWidget *dst); 42void transferAffinity_Touch (iWidget *src, iWidget *dst);