@@ -146,6 +146,8 @@ static void _reset_state(void)
146
146
147
147
/********************************** GESTURE DETECTION **********************************/
148
148
149
+ typedef bool (* gesture_detect_fn )(uint8_t location );
150
+
149
151
static bool _is_continuous_tap (uint8_t location )
150
152
{
151
153
return _state [location ].max_slide_travel < TAP_SLIDE_TOLERANCE &&
@@ -192,55 +194,13 @@ static void _gesture_emit_event(uint8_t id, slider_location_t location)
192
194
emit_event (& event );
193
195
}
194
196
195
- static void _emit_continuous_slide_event (void )
196
- {
197
- if (_is_continuous_slide (top_slider )) {
198
- _gesture_emit_event (EVENT_SLIDE , top_slider );
199
- }
200
- if (_is_continuous_slide (bottom_slider )) {
201
- _gesture_emit_event (EVENT_SLIDE , bottom_slider );
202
- }
203
- }
204
-
205
- static void _emit_slide_release_event (void )
206
- {
207
- if (_is_slide_released (top_slider )) {
208
- _gesture_emit_event (EVENT_SLIDE_RELEASED , top_slider );
209
- }
210
- if (_is_slide_released (bottom_slider )) {
211
- _gesture_emit_event (EVENT_SLIDE_RELEASED , bottom_slider );
212
- }
213
- }
214
-
215
- static void _emit_long_tap_event (void )
216
- {
217
- if (_is_long_tap_release (top_slider )) {
218
- _gesture_emit_event (EVENT_LONG_TAP , top_slider );
219
- }
220
- if (_is_long_tap_release (bottom_slider )) {
221
- _gesture_emit_event (EVENT_LONG_TAP , bottom_slider );
222
- }
223
- }
224
-
225
- static void _emit_short_tap_event (void )
226
- {
227
- if (_is_tap_release (top_slider )) {
228
- _gesture_emit_event (EVENT_SHORT_TAP , top_slider );
229
- }
230
- if (_is_tap_release (bottom_slider )) {
231
- _gesture_emit_event (EVENT_SHORT_TAP , bottom_slider );
232
- }
233
- }
234
-
235
- static void _emit_continuous_tap_event (void )
236
- {
237
- if (_is_continuous_tap (top_slider )) {
238
- _gesture_emit_event (EVENT_CONTINUOUS_TAP , top_slider );
239
- }
240
- if (_is_continuous_tap (bottom_slider )) {
241
- _gesture_emit_event (EVENT_CONTINUOUS_TAP , bottom_slider );
242
- }
243
- }
197
+ static gesture_detect_fn _emit_event_detect_fns [EVENT_ENUM_MAX ] = {
198
+ [EVENT_SLIDE ] = _is_continuous_slide ,
199
+ [EVENT_SLIDE_RELEASED ] = _is_slide_released ,
200
+ [EVENT_CONTINUOUS_TAP ] = _is_continuous_tap ,
201
+ [EVENT_LONG_TAP ] = _is_long_tap_release ,
202
+ [EVENT_SHORT_TAP ] = _is_tap_release ,
203
+ };
244
204
245
205
/********************************** MEASURE, DETECT and CALLBACK **********************************/
246
206
@@ -263,11 +223,13 @@ static void _measure_and_emit(void)
263
223
}
264
224
265
225
if (gesture_detected ) {
266
- _emit_continuous_slide_event ();
267
- _emit_slide_release_event ();
268
- _emit_long_tap_event ();
269
- _emit_short_tap_event ();
270
- _emit_continuous_tap_event ();
226
+ for (int location = 0 ; location < TOUCH_NUM_SLIDERS ; location ++ ) {
227
+ for (int event_idx = 0 ; event_idx < EVENT_ENUM_MAX ; event_idx ++ ) {
228
+ if (_emit_event_detect_fns [event_idx ](location )) {
229
+ _gesture_emit_event (event_idx , location );
230
+ }
231
+ }
232
+ }
271
233
}
272
234
273
235
bool both_sliders_released_or_inactive = true;
0 commit comments