summaryrefslogtreecommitdiff
path: root/src/grail-gestures.c
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2011-02-24 14:15:08 +0100
committerHenrik Rydberg <rydberg@euromail.se>2011-03-14 12:55:19 +0100
commit8d663cda3c338940ebbd8adc38f24e9b2f2d61c3 (patch)
treefae9a9eb1b43e01056a7f05c131b866f3367869b /src/grail-gestures.c
parentf92c18c344c04a2501e01ae402441a92883da382 (diff)
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 <rydberg@euromail.se>
Diffstat (limited to 'src/grail-gestures.c')
-rw-r--r--src/grail-gestures.c5
1 files changed, 4 insertions, 1 deletions
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 @@
27static const float FM_SN[DIM_FM] = { 1000, 1000, 200, 1000 }; 27static const float FM_SN[DIM_FM] = { 1000, 1000, 200, 1000 };
28static const float FM_BAR[DIM_FM] = { 50, 50, 30, 50 }; 28static const float FM_BAR[DIM_FM] = { 50, 50, 30, 50 };
29static const grail_time_t FM_BAR_MS[DIM_FM] = { 300, 300, 10000, 10000 }; 29static const grail_time_t FM_BAR_MS[DIM_FM] = { 300, 300, 10000, 10000 };
30static const grail_time_t FM_HOLD_MS[DIM_FM] = { 60, 60, 60, 60 };
30static const grail_time_t SAMPLE_MS = 10; 31static const grail_time_t SAMPLE_MS = 10;
31static const float EPS = 1e-3; 32static const float EPS = 1e-3;
32 33
@@ -133,7 +134,8 @@ static void move_update(struct move_model *m, int i, float x, grail_time_t t)
133 if (m->active & (1 << i)) 134 if (m->active & (1 << i))
134 return; 135 return;
135 fm->action_delta = x - fm->original; 136 fm->action_delta = x - fm->original;
136 if (fabs(fm->action_delta) > fm->bar) { 137 if (t - fm->original_ms > fm->hold_ms &&
138 fabs(fm->action_delta) > fm->bar) {
137 m->active |= (1 << i); 139 m->active |= (1 << i);
138 } else if (t - fm->original_ms > fm->bar_ms) { 140 } else if (t - fm->original_ms > fm->bar_ms) {
139 m->active |= (1 << i); 141 m->active |= (1 << i);
@@ -157,6 +159,7 @@ void gru_init_motion(struct grail *ge)
157 for (i = 0; i < DIM_FM; i++) { 159 for (i = 0; i < DIM_FM; i++) {
158 m->fm[i].fuzz = D[i] / FM_SN[i]; 160 m->fm[i].fuzz = D[i] / FM_SN[i];
159 m->fm[i].bar = D[i] / FM_BAR[i]; 161 m->fm[i].bar = D[i] / FM_BAR[i];
162 m->fm[i].hold_ms = FM_HOLD_MS[i];
160 m->fm[i].bar_ms = FM_BAR_MS[i]; 163 m->fm[i].bar_ms = FM_BAR_MS[i];
161 } 164 }
162} 165}