Skip to content

Commit ad4e156

Browse files
committed
add list drop down animation
1 parent 900306d commit ad4e156

File tree

4 files changed

+31
-9
lines changed

4 files changed

+31
-9
lines changed

fw/application/openocd/rtt.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
adapter driver cmsis-dap
2-
adapter serial 1234567890
2+
# adapter serial 1234567890
33
transport select swd
44
source [find target/nrf52.cfg]
55
adapter speed 10000

fw/application/src/mui/mui_anim.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#define LV_ANIM_RESOLUTION 1024
77
#define LV_ANIM_RES_SHIFT 10
88

9-
#define MUI_ANIM_TICK_INTERVAL_MS 50
9+
#define MUI_ANIM_TICK_INTERVAL_MS 20
1010
#define MUI_ANIM_REPEAT_INFINITE 0xFFFF
1111

1212

fw/application/src/mui/view/mui_list_view.c

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ static void mui_list_view_start_text_anim(mui_list_view_t *p_view) {
1515
if (mui_list_view_anim_enabled()) {
1616
mui_list_item_t *p_item = mui_list_item_array_get(p_view->items, p_view->focus_index);
1717
uint32_t focus_text_width = mui_list_view_get_utf8_width(string_get_cstr(p_item->text));
18-
NRF_LOG_INFO("%d", focus_text_width);
1918
focus_text_width += mui_list_view_get_utf8_width(string_get_cstr(p_item->sub_text));
20-
NRF_LOG_INFO("%d", focus_text_width);
2119
if (focus_text_width > p_view->canvas_width - 13) {
2220
p_view->text_offset = 0;
2321
int32_t overflowed_width = focus_text_width - p_view->canvas_width + 20;
@@ -32,6 +30,12 @@ static void mui_list_view_start_text_anim(mui_list_view_t *p_view) {
3230
}
3331
}
3432

33+
static void mui_list_view_start_gap_anim(mui_list_view_t *p_view) {
34+
if (mui_list_view_anim_enabled()) {
35+
mui_anim_start(&p_view->gap_anim);
36+
}
37+
}
38+
3539
static void mui_list_view_anim_exec(void *p, int32_t value) {
3640
mui_list_view_t *p_view = (mui_list_view_t *)p;
3741
p_view->anim_value = value;
@@ -41,6 +45,11 @@ static void mui_list_view_text_anim_exec(void *p, int32_t value) {
4145
mui_list_view_t *p_view = (mui_list_view_t *)p;
4246
p_view->text_offset = value;
4347
}
48+
static void mui_list_view_gap_anim_exec(void *p, int32_t value) {
49+
mui_list_view_t *p_view = (mui_list_view_t *)p;
50+
p_view->item_gap = value;
51+
}
52+
4453

4554
static void mui_list_view_on_draw(mui_view_t *p_view, mui_canvas_t *p_canvas) {
4655
mui_canvas_set_font(p_canvas, u8g2_font_wqy12_t_gb2312a);
@@ -65,24 +74,26 @@ static void mui_list_view_on_draw(mui_view_t *p_view, mui_canvas_t *p_canvas) {
6574
int32_t y = index * LIST_ITEM_HEIGHT - offset_y;
6675
int32_t text_offset = index == p_mui_list_view->focus_index ? p_mui_list_view->text_offset : 0;
6776
if (y >= -LIST_ITEM_HEIGHT && y <= mui_canvas_get_height(p_canvas)) { // visible object
77+
uint32_t actual_y = index * p_mui_list_view->item_gap - offset_y;
6878
mui_canvas_set_font(p_canvas, u8g2_font_siji_t_6x10);
69-
mui_canvas_draw_glyph(p_canvas, 0, y + 10, item->icon);
79+
mui_canvas_draw_glyph(p_canvas, 0, actual_y + 10, item->icon);
7080
mui_canvas_set_font(p_canvas, u8g2_font_wqy12_t_gb2312a);
7181
mui_canvas_get_clip_window(p_canvas, &clip_win_prev);
7282
clip_win_cur.x = 13;
73-
clip_win_cur.y = y;
83+
clip_win_cur.y = actual_y;
7484
clip_win_cur.h = LIST_ITEM_HEIGHT, clip_win_cur.w = mui_canvas_get_width(p_canvas);
7585
mui_canvas_set_clip_window(p_canvas, &clip_win_cur);
7686

7787
uint32_t focus_text_width =
78-
mui_canvas_draw_utf8_clip(p_canvas, 13 + text_offset, y + 10, string_get_cstr(item->text));
88+
mui_canvas_draw_utf8_clip(p_canvas, 13 + text_offset, actual_y + 10, string_get_cstr(item->text));
7989
// sub text
8090
if (string_size(item->sub_text) > 0) {
8191
uint8_t w = mui_canvas_get_utf8_width(p_canvas, string_get_cstr(item->sub_text));
8292
if (focus_text_width + w > p_mui_list_view->canvas_width - 13) {
83-
mui_canvas_draw_utf8_clip(p_canvas, 13 + text_offset + focus_text_width, y + 10, string_get_cstr(item->sub_text));
93+
mui_canvas_draw_utf8_clip(p_canvas, 13 + text_offset + focus_text_width, actual_y + 10,
94+
string_get_cstr(item->sub_text));
8495
} else {
85-
mui_canvas_draw_utf8(p_canvas, mui_canvas_get_width(p_canvas) - w - 5, y + 10,
96+
mui_canvas_draw_utf8(p_canvas, mui_canvas_get_width(p_canvas) - w - 5, actual_y + 10,
8697
string_get_cstr(item->sub_text));
8798
}
8899
}
@@ -108,6 +119,7 @@ static void mui_list_view_on_draw(mui_view_t *p_view, mui_canvas_t *p_canvas) {
108119
if (!p_mui_list_view->first_draw) {
109120
p_mui_list_view->first_draw = 1;
110121
mui_list_view_start_text_anim(p_mui_list_view);
122+
mui_list_view_start_gap_anim(p_mui_list_view);
111123
}
112124
}
113125

@@ -263,6 +275,7 @@ mui_list_view_t *mui_list_view_create() {
263275

264276
mui_anim_init(&p_mui_list_view->anim);
265277
mui_anim_set_var(&p_mui_list_view->anim, p_mui_list_view);
278+
mui_anim_set_path_cb(&p_mui_list_view->gap_anim, lv_anim_path_ease_in_out);
266279
mui_anim_set_exec_cb(&p_mui_list_view->anim, mui_list_view_anim_exec);
267280
mui_anim_set_values(&p_mui_list_view->anim, 0, LIST_ITEM_HEIGHT);
268281
mui_anim_set_time(&p_mui_list_view->anim, 200);
@@ -275,6 +288,13 @@ mui_list_view_t *mui_list_view_create() {
275288
mui_anim_set_exec_cb(&p_mui_list_view->text_anim, mui_list_view_text_anim_exec);
276289
mui_anim_set_time(&p_mui_list_view->text_anim, 200);
277290

291+
mui_anim_init(&p_mui_list_view->gap_anim);
292+
mui_anim_set_var(&p_mui_list_view->gap_anim, p_mui_list_view);
293+
mui_anim_set_path_cb(&p_mui_list_view->gap_anim, lv_anim_path_ease_in_out);
294+
mui_anim_set_values(&p_mui_list_view->gap_anim, 0, LIST_ITEM_HEIGHT);
295+
mui_anim_set_exec_cb(&p_mui_list_view->gap_anim, mui_list_view_gap_anim_exec);
296+
mui_anim_set_time(&p_mui_list_view->gap_anim, 200);
297+
278298
mui_list_item_array_init(p_mui_list_view->items);
279299

280300
return p_mui_list_view;

fw/application/src/mui/view/mui_list_view.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ struct mui_list_view_s {
5757
mui_anim_t text_anim;
5858
int16_t text_offset;
5959
uint8_t first_draw;
60+
mui_anim_t gap_anim;
61+
uint8_t item_gap;
6062
};
6163

6264
mui_list_view_t *mui_list_view_create();

0 commit comments

Comments
 (0)