Skip to content

Commit 65f5b52

Browse files
committed
events: Remove unique events for top/bottom
Refactor code to get rid of more events. Inline the event slider data into the event.
1 parent 29e55e3 commit 65f5b52

File tree

12 files changed

+102
-166
lines changed

12 files changed

+102
-166
lines changed

src/touch/gestures.c

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -144,18 +144,6 @@ static void _reset_state(void)
144144
memset(_state, 0, sizeof(_state));
145145
}
146146

147-
/**
148-
* Prepares the gestures data to be sent with an emitted event
149-
*/
150-
static void _collect_gestures_data(
151-
gestures_detection_state_t* state,
152-
gestures_slider_data_t* slider_data)
153-
{
154-
slider_data->position = state->position_current;
155-
slider_data->diff = state->position_current - state->position_start;
156-
slider_data->velocity = state->velocity_sum;
157-
}
158-
159147
/********************************** GESTURE DETECTION **********************************/
160148

161149
static bool _is_continuous_tap(uint8_t location)
@@ -194,59 +182,63 @@ static void _gesture_emit_event(uint8_t id, slider_location_t location)
194182
if (!_released_since_new_screen) {
195183
return;
196184
}
197-
gestures_slider_data_t slider_data;
198-
_collect_gestures_data(&_state[location], &slider_data);
199-
event_t event = {.data = &slider_data, .id = id};
185+
event_slider_data_t slider_data = {
186+
.source = location,
187+
.position = _state[location].position_current,
188+
.diff = _state[location].position_current - _state[location].position_start,
189+
.velocity = _state[location].velocity_sum,
190+
};
191+
event_t event = {.id = id, .data = slider_data};
200192
emit_event(&event);
201193
}
202194

203195
static void _emit_continuous_slide_event(void)
204196
{
205197
if (_is_continuous_slide(top_slider)) {
206-
_gesture_emit_event(EVENT_TOP_SLIDE, top_slider);
198+
_gesture_emit_event(EVENT_SLIDE, top_slider);
207199
}
208200
if (_is_continuous_slide(bottom_slider)) {
209-
_gesture_emit_event(EVENT_BOTTOM_SLIDE, bottom_slider);
201+
_gesture_emit_event(EVENT_SLIDE, bottom_slider);
210202
}
211203
}
212204

213205
static void _emit_slide_release_event(void)
214206
{
215207
if (_is_slide_released(top_slider)) {
216-
_gesture_emit_event(EVENT_TOP_SLIDE_RELEASED, top_slider);
208+
_gesture_emit_event(EVENT_SLIDE_RELEASED, top_slider);
217209
}
218210
if (_is_slide_released(bottom_slider)) {
219-
_gesture_emit_event(EVENT_BOTTOM_SLIDE_RELEASED, bottom_slider);
211+
_gesture_emit_event(EVENT_SLIDE_RELEASED, bottom_slider);
220212
}
221213
}
222214

223215
static void _emit_long_tap_event(void)
224216
{
225217
if (_is_long_tap_release(top_slider)) {
226-
_gesture_emit_event(EVENT_TOP_LONG_TAP, top_slider);
218+
_gesture_emit_event(EVENT_LONG_TAP, top_slider);
227219
}
228220
if (_is_long_tap_release(bottom_slider)) {
229-
_gesture_emit_event(EVENT_BOTTOM_LONG_TAP, bottom_slider);
221+
_gesture_emit_event(EVENT_LONG_TAP, bottom_slider);
230222
}
231223
}
232224

233225
static void _emit_short_tap_event(void)
234226
{
235227
if (_is_tap_release(top_slider)) {
236-
_gesture_emit_event(EVENT_TOP_SHORT_TAP, top_slider);
228+
_gesture_emit_event(EVENT_SHORT_TAP, top_slider);
237229
}
238230
if (_is_tap_release(bottom_slider)) {
239-
_gesture_emit_event(EVENT_BOTTOM_SHORT_TAP, bottom_slider);
231+
_gesture_emit_event(EVENT_SHORT_TAP, bottom_slider);
240232
}
241233
}
242234

243235
static void _emit_continuous_tap_event(void)
244236
{
245237
if (_is_continuous_tap(top_slider)) {
246-
_gesture_emit_event(EVENT_TOP_CONTINUOUS_TAP, top_slider);
238+
_gesture_emit_event(EVENT_CONTINUOUS_TAP, top_slider);
247239
}
248240
if (_is_continuous_tap(bottom_slider)) {
249-
_gesture_emit_event(EVENT_BOTTOM_CONTINUOUS_TAP, bottom_slider);
241+
_gesture_emit_event(EVENT_CONTINUOUS_TAP, bottom_slider);
250242
}
251243
}
252244

src/touch/gestures.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@
3333
#define SLIDER_POSITION_ONE_THIRD (MAX_SLIDER_POS / 3)
3434
#define SLIDER_POSITION_TWO_THIRD (MAX_SLIDER_POS / 3 * 2)
3535

36-
typedef struct {
37-
int16_t diff;
38-
uint16_t position;
39-
int32_t velocity;
40-
} gestures_slider_data_t;
41-
4236
/**
4337
* Detects a gestures and calls the respective callback.
4438
* @param[in] reset The flag indicates whether the gesture history should be

src/ui/components/button.c

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,13 @@ static void _render(component_t* component)
5959
static void _on_event(const event_t* event, component_t* component)
6060
{
6161
button_data_t* data = (button_data_t*)component->data;
62-
const gestures_slider_data_t* slider_data = (const gestures_slider_data_t*)event->data;
63-
if (data->span_over_slider) {
64-
if (event->id ==
65-
((data->location == top_slider) ? EVENT_TOP_SHORT_TAP : EVENT_BOTTOM_SHORT_TAP)) {
62+
if (event->id == EVENT_SHORT_TAP && event->data.source == data->location) {
63+
if (data->span_over_slider) {
6664
data->callback(component);
67-
}
68-
} else {
69-
if (event->id ==
70-
((data->location == top_slider) ? EVENT_TOP_SHORT_TAP : EVENT_BOTTOM_SHORT_TAP) &&
71-
slider_data->position >= component->position.left * MAX_SLIDER_POS / SCREEN_WIDTH &&
72-
slider_data->position <= (component->position.left + component->dimension.width) *
73-
MAX_SLIDER_POS / SCREEN_WIDTH) {
65+
} else if (
66+
event->data.position >= component->position.left * MAX_SLIDER_POS / SCREEN_WIDTH &&
67+
event->data.position <= (component->position.left + component->dimension.width) *
68+
MAX_SLIDER_POS / SCREEN_WIDTH) {
7469
data->callback(component);
7570
}
7671
}

src/ui/components/confirm_gesture.c

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -100,41 +100,32 @@ static void _render(component_t* component)
100100
*/
101101
static void _on_event(const event_t* event, component_t* component)
102102
{
103-
// Avoid type casting to unknown events
104-
if (event->id != EVENT_TOP_SLIDE_RELEASED && event->id != EVENT_BOTTOM_SLIDE_RELEASED &&
105-
event->id != EVENT_TOP_CONTINUOUS_TAP && event->id != EVENT_BOTTOM_CONTINUOUS_TAP &&
106-
event->id != EVENT_TOP_SHORT_TAP && event->id != EVENT_BOTTOM_SHORT_TAP &&
107-
event->id != EVENT_TOP_LONG_TAP && event->id != EVENT_BOTTOM_LONG_TAP &&
108-
event->id != EVENT_TOP_SLIDE && event->id != EVENT_BOTTOM_SLIDE) {
109-
return;
110-
}
111103
confirm_data_t* data = (confirm_data_t*)component->data;
112-
const gestures_slider_data_t* slider_data = (const gestures_slider_data_t*)event->data;
113104

114105
switch (event->id) {
115-
case EVENT_TOP_SLIDE_RELEASED:
116-
data->active_top = false;
117-
break;
118-
case EVENT_TOP_CONTINUOUS_TAP:
119-
if (slider_data->position > SLIDER_POSITION_TWO_THIRD &&
120-
slider_data->position <= MAX_SLIDER_POS) {
121-
data->active_top = true;
106+
case EVENT_SLIDE_RELEASED:
107+
if (event->data.source == top_slider) {
108+
data->active_top = false;
109+
} else {
110+
data->active_bottom = false;
122111
}
123112
break;
124-
case EVENT_TOP_SHORT_TAP:
125-
data->active_top = false;
126-
break;
127-
case EVENT_BOTTOM_SLIDE_RELEASED:
128-
data->active_bottom = false;
129-
break;
130-
case EVENT_BOTTOM_CONTINUOUS_TAP:
131-
if (slider_data->position > SLIDER_POSITION_TWO_THIRD &&
132-
slider_data->position <= MAX_SLIDER_POS) {
133-
data->active_bottom = true;
113+
case EVENT_CONTINUOUS_TAP:
114+
if (event->data.position > SLIDER_POSITION_TWO_THIRD &&
115+
event->data.position <= MAX_SLIDER_POS) {
116+
if (event->data.source == top_slider) {
117+
data->active_top = true;
118+
} else {
119+
data->active_bottom = true;
120+
}
134121
}
135122
break;
136-
case EVENT_BOTTOM_SHORT_TAP:
137-
data->active_bottom = false;
123+
case EVENT_SHORT_TAP:
124+
if (event->data.source == top_slider) {
125+
data->active_top = false;
126+
} else {
127+
data->active_bottom = false;
128+
}
138129
break;
139130
default:
140131
break;

src/ui/components/icon_button.c

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -106,16 +106,9 @@ static void _on_event(const event_t* event, component_t* component)
106106

107107
// Return if the slider event is on the wrong slider
108108
switch (event->id) {
109-
case EVENT_TOP_SHORT_TAP:
110-
case EVENT_TOP_CONTINUOUS_TAP:
111-
if (data->location != top_slider) {
112-
data->active = false;
113-
return;
114-
}
115-
break;
116-
case EVENT_BOTTOM_SHORT_TAP:
117-
case EVENT_BOTTOM_CONTINUOUS_TAP:
118-
if (data->location != bottom_slider) {
109+
case EVENT_SHORT_TAP:
110+
case EVENT_CONTINUOUS_TAP:
111+
if (event->data.source != data->location) {
119112
data->active = false;
120113
return;
121114
}
@@ -127,17 +120,16 @@ static void _on_event(const event_t* event, component_t* component)
127120

128121
// Return if the slider position is away from the button
129122
// Only slider events reach here, so ok to typescast event->data
130-
const gestures_slider_data_t* slider_data = (const gestures_slider_data_t*)event->data;
131123
switch (data->type) {
132124
case ICON_BUTTON_CHECK:
133125
case ICON_BUTTON_NEXT:
134-
if (slider_data->position < SLIDER_POSITION_TWO_THIRD) {
126+
if (event->data.position < SLIDER_POSITION_TWO_THIRD) {
135127
data->active = false;
136128
return;
137129
}
138130
break;
139131
case ICON_BUTTON_CROSS:
140-
if (slider_data->position >= SLIDER_POSITION_ONE_THIRD) {
132+
if (event->data.position >= SLIDER_POSITION_ONE_THIRD) {
141133
data->active = false;
142134
return;
143135
}
@@ -151,8 +143,7 @@ static void _on_event(const event_t* event, component_t* component)
151143

152144
// Call the callback on short tap
153145
switch (event->id) {
154-
case EVENT_TOP_SHORT_TAP:
155-
case EVENT_BOTTOM_SHORT_TAP:
146+
case EVENT_SHORT_TAP:
156147
if (data->callback) {
157148
data->callback(data->user_data);
158149
}

src/ui/components/keyboard_switch.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,19 @@ static void _render(component_t* component)
9090
static void _on_event(const event_t* event, component_t* component)
9191
{
9292
keyboard_switch_data_t* ks_data = (keyboard_switch_data_t*)component->data;
93-
const gestures_slider_data_t* slider_data = (const gestures_slider_data_t*)event->data;
9493
switch (event->id) {
95-
case EVENT_TOP_CONTINUOUS_TAP:
96-
if (ks_data->location == top_slider && slider_data->position > SLIDER_POSITION_ONE_THIRD &&
97-
slider_data->position <= SLIDER_POSITION_TWO_THIRD) {
94+
case EVENT_CONTINUOUS_TAP:
95+
if (event->data.source == top_slider && ks_data->location == top_slider &&
96+
event->data.position > SLIDER_POSITION_ONE_THIRD &&
97+
event->data.position <= SLIDER_POSITION_TWO_THIRD) {
9898
ks_data->active = true;
9999
break;
100100
}
101101
/* FALLTHROUGH */
102-
case EVENT_TOP_SHORT_TAP:
103-
if (ks_data->location == top_slider && slider_data->position > SLIDER_POSITION_ONE_THIRD &&
104-
slider_data->position <= SLIDER_POSITION_TWO_THIRD) {
102+
case EVENT_SHORT_TAP:
103+
if (event->data.source == top_slider && ks_data->location == top_slider &&
104+
event->data.position > SLIDER_POSITION_ONE_THIRD &&
105+
event->data.position <= SLIDER_POSITION_TWO_THIRD) {
105106
ks_data->active = false;
106107
switch (ks_data->mode) {
107108
case LOWER_CASE:

src/ui/components/label.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,36 +138,35 @@ static void _render(component_t* component)
138138
static void _on_event(const event_t* event, component_t* component)
139139
{
140140
data_t* data = (data_t*)component->data;
141+
if (event->data.source != bottom_slider) {
142+
return;
143+
}
141144
if (data->scrollable) {
142145
switch (event->id) {
143-
case EVENT_BOTTOM_SLIDE: {
144-
const gestures_slider_data_t* slider_data = (const gestures_slider_data_t*)event->data;
146+
case EVENT_SLIDE: {
145147
// Variable scroll speed
146148
int16_t margin = SCREEN_WIDTH / 5;
147-
data->slider_position_diff += SIGMOID(slider_data->velocity);
149+
data->slider_position_diff += SIGMOID(event->data.velocity);
148150
data->text_position = data->text_position_last + (int16_t)data->slider_position_diff;
149151
data->text_position = MIN(
150152
component->dimension.width / 2 + margin,
151153
MAX(-margin - component->dimension.width / 2 + SCREEN_WIDTH, data->text_position));
152-
data->slider_position = slider_data->position;
154+
data->slider_position = event->data.position;
153155
data->slider_is_touched = true;
154156
data->slider_was_touched = true;
155157
break;
156158
}
157-
158-
case EVENT_BOTTOM_SLIDE_RELEASED:
159+
case EVENT_SLIDE_RELEASED:
159160
data->text_position_last = data->text_position;
160161
data->slider_position_diff = 0;
161162
data->slider_is_touched = false;
162163
break;
163164

164-
case EVENT_BOTTOM_CONTINUOUS_TAP: {
165-
const gestures_slider_data_t* slider_data = (const gestures_slider_data_t*)event->data;
166-
data->slider_position = slider_data->position;
165+
case EVENT_CONTINUOUS_TAP:
166+
data->slider_position = event->data.position;
167167
data->slider_is_touched = true;
168168
data->slider_was_touched = true;
169169
break;
170-
}
171170
default:
172171
break;
173172
}

src/ui/components/left_arrow.c

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,33 +60,21 @@ static void _render(component_t* component)
6060
static void _on_event(const event_t* event, component_t* component)
6161
{
6262
left_arrow_data_t* data = (left_arrow_data_t*)component->data;
63-
const gestures_slider_data_t* slider_data = (const gestures_slider_data_t*)event->data;
63+
if (event->data.source != data->location) {
64+
return;
65+
}
6466
switch (event->id) {
65-
case EVENT_TOP_SHORT_TAP:
66-
case EVENT_BOTTOM_SHORT_TAP:
67-
if (data->location == top_slider && event->id == EVENT_BOTTOM_SHORT_TAP) {
68-
break;
69-
}
70-
if (data->location == bottom_slider && event->id == EVENT_TOP_SHORT_TAP) {
71-
break;
72-
}
73-
if (slider_data->position <= SLIDER_POSITION_ONE_THIRD) {
67+
case EVENT_SHORT_TAP:
68+
if (event->data.position <= SLIDER_POSITION_ONE_THIRD) {
7469
data->active = false;
7570
if (data->callback) {
7671
data->callback(data->user_data);
7772
}
7873
break;
7974
}
8075
/* FALLTHROUGH */
81-
case EVENT_TOP_CONTINUOUS_TAP:
82-
case EVENT_BOTTOM_CONTINUOUS_TAP:
83-
if (data->location == top_slider && event->id == EVENT_BOTTOM_CONTINUOUS_TAP) {
84-
break;
85-
}
86-
if (data->location == bottom_slider && event->id == EVENT_TOP_CONTINUOUS_TAP) {
87-
break;
88-
}
89-
if (slider_data->position <= SLIDER_POSITION_ONE_THIRD) {
76+
case EVENT_CONTINUOUS_TAP:
77+
if (event->data.position <= SLIDER_POSITION_ONE_THIRD) {
9078
data->active = true;
9179
break;
9280
}

0 commit comments

Comments
 (0)