From 8d663cda3c338940ebbd8adc38f24e9b2f2d61c3 Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Thu, 24 Feb 2011 14:15:08 +0100 Subject: Introduce activation hold time Do not activate a drag, pinch or rotate immediately, even if the activation threshold is met. This allows for a smoother transition between fingers. Signed-off-by: Henrik Rydberg --- src/grail-gestures.c | 5 ++++- src/grail-gestures.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/grail-gestures.c b/src/grail-gestures.c index efadde5..458f60d 100644 --- a/src/grail-gestures.c +++ b/src/grail-gestures.c @@ -27,6 +27,7 @@ static const float FM_SN[DIM_FM] = { 1000, 1000, 200, 1000 }; static const float FM_BAR[DIM_FM] = { 50, 50, 30, 50 }; static const grail_time_t FM_BAR_MS[DIM_FM] = { 300, 300, 10000, 10000 }; +static const grail_time_t FM_HOLD_MS[DIM_FM] = { 60, 60, 60, 60 }; static const grail_time_t SAMPLE_MS = 10; static const float EPS = 1e-3; @@ -133,7 +134,8 @@ static void move_update(struct move_model *m, int i, float x, grail_time_t t) if (m->active & (1 << i)) return; fm->action_delta = x - fm->original; - if (fabs(fm->action_delta) > fm->bar) { + if (t - fm->original_ms > fm->hold_ms && + fabs(fm->action_delta) > fm->bar) { m->active |= (1 << i); } else if (t - fm->original_ms > fm->bar_ms) { m->active |= (1 << i); @@ -157,6 +159,7 @@ void gru_init_motion(struct grail *ge) for (i = 0; i < DIM_FM; i++) { m->fm[i].fuzz = D[i] / FM_SN[i]; m->fm[i].bar = D[i] / FM_BAR[i]; + m->fm[i].hold_ms = FM_HOLD_MS[i]; m->fm[i].bar_ms = FM_BAR_MS[i]; } } diff --git a/src/grail-gestures.h b/src/grail-gestures.h index c4c46c2..d92a24b 100644 --- a/src/grail-gestures.h +++ b/src/grail-gestures.h @@ -49,6 +49,7 @@ struct filter_model { float bar; grail_time_t original_ms; grail_time_t sample_ms; + grail_time_t hold_ms; grail_time_t bar_ms; }; -- cgit v1.2.3