@@ -15,9 +15,7 @@ static void mui_list_view_start_text_anim(mui_list_view_t *p_view) {
15
15
if (mui_list_view_anim_enabled ()) {
16
16
mui_list_item_t * p_item = mui_list_item_array_get (p_view -> items , p_view -> focus_index );
17
17
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 );
19
18
focus_text_width += mui_list_view_get_utf8_width (string_get_cstr (p_item -> sub_text ));
20
- NRF_LOG_INFO ("%d" , focus_text_width );
21
19
if (focus_text_width > p_view -> canvas_width - 13 ) {
22
20
p_view -> text_offset = 0 ;
23
21
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) {
32
30
}
33
31
}
34
32
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
+
35
39
static void mui_list_view_anim_exec (void * p , int32_t value ) {
36
40
mui_list_view_t * p_view = (mui_list_view_t * )p ;
37
41
p_view -> anim_value = value ;
@@ -41,6 +45,11 @@ static void mui_list_view_text_anim_exec(void *p, int32_t value) {
41
45
mui_list_view_t * p_view = (mui_list_view_t * )p ;
42
46
p_view -> text_offset = value ;
43
47
}
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
+
44
53
45
54
static void mui_list_view_on_draw (mui_view_t * p_view , mui_canvas_t * p_canvas ) {
46
55
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) {
65
74
int32_t y = index * LIST_ITEM_HEIGHT - offset_y ;
66
75
int32_t text_offset = index == p_mui_list_view -> focus_index ? p_mui_list_view -> text_offset : 0 ;
67
76
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 ;
68
78
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 );
70
80
mui_canvas_set_font (p_canvas , u8g2_font_wqy12_t_gb2312a );
71
81
mui_canvas_get_clip_window (p_canvas , & clip_win_prev );
72
82
clip_win_cur .x = 13 ;
73
- clip_win_cur .y = y ;
83
+ clip_win_cur .y = actual_y ;
74
84
clip_win_cur .h = LIST_ITEM_HEIGHT , clip_win_cur .w = mui_canvas_get_width (p_canvas );
75
85
mui_canvas_set_clip_window (p_canvas , & clip_win_cur );
76
86
77
87
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 ));
79
89
// sub text
80
90
if (string_size (item -> sub_text ) > 0 ) {
81
91
uint8_t w = mui_canvas_get_utf8_width (p_canvas , string_get_cstr (item -> sub_text ));
82
92
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 ));
84
95
} 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 ,
86
97
string_get_cstr (item -> sub_text ));
87
98
}
88
99
}
@@ -108,6 +119,7 @@ static void mui_list_view_on_draw(mui_view_t *p_view, mui_canvas_t *p_canvas) {
108
119
if (!p_mui_list_view -> first_draw ) {
109
120
p_mui_list_view -> first_draw = 1 ;
110
121
mui_list_view_start_text_anim (p_mui_list_view );
122
+ mui_list_view_start_gap_anim (p_mui_list_view );
111
123
}
112
124
}
113
125
@@ -263,6 +275,7 @@ mui_list_view_t *mui_list_view_create() {
263
275
264
276
mui_anim_init (& p_mui_list_view -> anim );
265
277
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 );
266
279
mui_anim_set_exec_cb (& p_mui_list_view -> anim , mui_list_view_anim_exec );
267
280
mui_anim_set_values (& p_mui_list_view -> anim , 0 , LIST_ITEM_HEIGHT );
268
281
mui_anim_set_time (& p_mui_list_view -> anim , 200 );
@@ -275,6 +288,13 @@ mui_list_view_t *mui_list_view_create() {
275
288
mui_anim_set_exec_cb (& p_mui_list_view -> text_anim , mui_list_view_text_anim_exec );
276
289
mui_anim_set_time (& p_mui_list_view -> text_anim , 200 );
277
290
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
+
278
298
mui_list_item_array_init (p_mui_list_view -> items );
279
299
280
300
return p_mui_list_view ;
0 commit comments