From 78923b6b9b814affe2552882fd5f58892ec5477d Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 21 Feb 2020 16:33:42 +0100 Subject: [PATCH] support transition on virtual styles too --- src/lv_core/lv_obj.c | 170 +++++++++++++----------- src/lv_core/lv_obj.h | 14 +- src/lv_core/lv_style.c | 13 +- src/lv_core/lv_style.h | 3 +- src/lv_themes/lv_theme_material.c | 208 +++++++++++++++--------------- src/lv_widgets/lv_arc.c | 2 +- src/lv_widgets/lv_bar.c | 2 +- src/lv_widgets/lv_btnmatrix.c | 2 + src/lv_widgets/lv_calendar.c | 12 +- src/lv_widgets/lv_chart.c | 4 +- src/lv_widgets/lv_cpicker.c | 2 +- src/lv_widgets/lv_dropdown.c | 6 +- src/lv_widgets/lv_gauge.c | 4 +- src/lv_widgets/lv_page.c | 8 +- src/lv_widgets/lv_roller.c | 3 +- src/lv_widgets/lv_slider.c | 2 +- src/lv_widgets/lv_switch.c | 3 +- src/lv_widgets/lv_table.c | 2 +- src/lv_widgets/lv_tabview.c | 4 +- src/lv_widgets/lv_textarea.c | 2 +- src/lv_widgets/lv_win.c | 2 +- 21 files changed, 259 insertions(+), 209 deletions(-) diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index f5711c8c8..daea5ea51 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -57,6 +57,7 @@ typedef struct _lv_event_temp_data typedef struct { lv_obj_t * obj; lv_style_property_t prop; + uint8_t part; union { lv_color_t _color; lv_style_int_t _int; @@ -89,8 +90,8 @@ static void opa_scale_anim(lv_obj_t * obj, lv_anim_value_t v); #endif static void lv_event_mark_deleted(lv_obj_t * obj); static void lv_obj_del_async_cb(void * obj); -static lv_anim_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, lv_state_t prev_state, lv_state_t new_state); -static void trans_del(lv_obj_t * obj, lv_style_property_t prop); +static lv_anim_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, uint8_t part, lv_state_t prev_state, lv_state_t new_state); +static void trans_del(lv_obj_t * obj, uint8_t part, lv_style_property_t prop); /********************** * STATIC VARIABLES @@ -398,6 +399,8 @@ lv_res_t lv_obj_del(lv_obj_t * obj) lv_anim_del(obj, NULL); #endif + trans_del(obj, 0xFF, 0xFF); + /*Delete the user data*/ #if LV_USE_USER_DATA_FREE LV_USER_DATA_FREE(obj); @@ -1123,20 +1126,37 @@ void lv_obj_add_style(lv_obj_t * obj, uint8_t part, lv_style_t * style) } /** - * Remove all styles from the objects style list. Also reset the local styles + * Reset a style to the default (empty) state. + * Release all used memories and cancel pending related transitions. + * Typically used in `LV_SIGN_CLEAN_UP. + * @param obj pointer to an object + * @param part the part of the object which style list should be reseted. + * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` + */ +void lv_obj_clean_style_list(lv_obj_t * obj, uint8_t part) +{ + lv_style_list_t * style_dsc = lv_obj_get_style_list(obj, part); + if(style_dsc == NULL) { + LV_LOG_WARN("lv_obj_clean_style_list: can't find style with `part`"); + return; + } + + lv_style_list_reset(style_dsc); + + trans_del(obj, part, 0xFF); +} + +/** + * Reset a style to the default (empty) state. + * Release all used memories and cancel pending related transitions. + * Also notifies the object about the style change. * @param obj pointer to an object * @param part the part of the object which style list should be reseted. * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` */ void lv_obj_reset_style_list(lv_obj_t * obj, uint8_t part) { - lv_style_list_t * style_dsc = lv_obj_get_style_list(obj, part); - if(style_dsc == NULL) { - LV_LOG_WARN("lv_obj_clean_styles: can't find style with `part`"); - return; - } - - lv_style_list_reset(style_dsc); + lv_obj_clean_style_list(obj, part); lv_obj_refresh_style(obj); } @@ -1465,75 +1485,82 @@ void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state) lv_state_t prev_state = obj->state_dsc.act; obj->state_dsc.act = new_state; - lv_style_int_t time = lv_obj_get_style_trans_time(obj, LV_OBJ_PART_MAIN); - lv_style_property_t props[LV_STYLE_TRANS_NUM_MAX]; - lv_style_int_t delay = lv_obj_get_style_trans_delay(obj, LV_OBJ_PART_MAIN); - lv_anim_path_cb_t path = lv_obj_get_style_trans_path(obj, LV_OBJ_PART_MAIN); - props[0] = lv_obj_get_style_trans_prop1(obj, LV_OBJ_PART_MAIN); - props[1] = lv_obj_get_style_trans_prop2(obj, LV_OBJ_PART_MAIN); - props[2] = lv_obj_get_style_trans_prop3(obj, LV_OBJ_PART_MAIN); - props[3] = lv_obj_get_style_trans_prop4(obj, LV_OBJ_PART_MAIN); - props[4] = lv_obj_get_style_trans_prop5(obj, LV_OBJ_PART_MAIN); - props[5] = lv_obj_get_style_trans_prop6(obj, LV_OBJ_PART_MAIN); + uint8_t part; + for(part = 0; part < _LV_OBJ_PART_REAL_LAST; part++) { + lv_style_list_t * style_list = lv_obj_get_style_list(obj, part); + if(style_list == NULL) break; /*No more style lists*/ + if(style_list->ignore_trans) continue; - lv_style_list_t * style_list = lv_obj_get_style_list(obj, LV_OBJ_PART_MAIN); + lv_style_int_t time = lv_obj_get_style_trans_time(obj, part); + lv_style_property_t props[LV_STYLE_TRANS_NUM_MAX]; + lv_style_int_t delay = lv_obj_get_style_trans_delay(obj, part); + lv_anim_path_cb_t path = lv_obj_get_style_trans_path(obj, part); + props[0] = lv_obj_get_style_trans_prop1(obj, part); + props[1] = lv_obj_get_style_trans_prop2(obj, part); + props[2] = lv_obj_get_style_trans_prop3(obj, part); + props[3] = lv_obj_get_style_trans_prop4(obj, part); + props[4] = lv_obj_get_style_trans_prop5(obj, part); + props[5] = lv_obj_get_style_trans_prop6(obj, part); - uint8_t i; - for(i = 0; i < LV_STYLE_TRANS_NUM_MAX; i++) { - if(props[i] != 0) { - lv_style_list_add_trans_style(style_list); - lv_anim_trans_t * tr = trans_create(obj, props[i], prev_state, new_state); + uint8_t i; + for(i = 0; i < LV_STYLE_TRANS_NUM_MAX; i++) { + if(props[i] != 0) { + lv_style_list_add_trans_style(style_list); - /*If there is a pending anim for this property remove it*/ - if(tr) { - tr->obj = obj; - tr->prop = props[i]; + lv_anim_trans_t * tr = trans_create(obj, props[i], part, prev_state, new_state); - if(time == 0) { - trans_anim_cb(tr, 255); - } else { - lv_anim_t a; - lv_anim_init(&a); - lv_anim_set_var(&a, tr); - lv_anim_set_exec_cb(&a, trans_anim_cb); - lv_anim_set_start_cb(&a, trans_anim_start_cb); - lv_anim_set_ready_cb(&a, trans_anim_ready_cb); - lv_anim_set_values(&a, 0x00, 0xFF); - lv_anim_set_time(&a, time); - lv_anim_set_delay(&a, delay); - lv_anim_set_path_cb(&a, path); - a.early_apply = 0; - lv_anim_start(&a); + /*If there is a pending anim for this property remove it*/ + if(tr) { + tr->obj = obj; + tr->prop = props[i]; + tr->part = part; + + if(time == 0) { + trans_anim_cb(tr, 255); + } else { + lv_anim_t a; + lv_anim_init(&a); + lv_anim_set_var(&a, tr); + lv_anim_set_exec_cb(&a, trans_anim_cb); + lv_anim_set_start_cb(&a, trans_anim_start_cb); + lv_anim_set_ready_cb(&a, trans_anim_ready_cb); + lv_anim_set_values(&a, 0x00, 0xFF); + lv_anim_set_time(&a, time); + lv_anim_set_delay(&a, delay); + lv_anim_set_path_cb(&a, path); + a.early_apply = 0; + lv_anim_start(&a); + } } - } - } + } #endif + } } lv_obj_refresh_style(obj); } -static lv_anim_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, lv_state_t prev_state, lv_state_t new_state) +static lv_anim_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, uint8_t part, lv_state_t prev_state, lv_state_t new_state) { lv_anim_trans_t * tr; - lv_style_list_t * style_list = lv_obj_get_style_list(obj, LV_OBJ_PART_MAIN); + lv_style_list_t * style_list = lv_obj_get_style_list(obj, part); lv_style_t * style_trans = lv_style_list_get_trans_style(style_list); /*Get the previous and current values*/ if((prop & 0xF) < LV_STYLE_ID_COLOR) { /*Int*/ style_list->skip_trans = 1; obj->state_dsc.act = prev_state; - lv_style_int_t int1 = _lv_obj_get_style_int(obj, LV_OBJ_PART_MAIN, prop); + lv_style_int_t int1 = _lv_obj_get_style_int(obj, part, prop); obj->state_dsc.act = new_state; - lv_style_int_t int2 = _lv_obj_get_style_int(obj, LV_OBJ_PART_MAIN, prop); + lv_style_int_t int2 = _lv_obj_get_style_int(obj, part, prop); style_list->skip_trans = 0; if(int1 == int2) return NULL; obj->state_dsc.act = prev_state; - int1 = _lv_obj_get_style_int(obj, LV_OBJ_PART_MAIN, prop); + int1 = _lv_obj_get_style_int(obj, part, prop); obj->state_dsc.act = new_state; _lv_style_set_int(style_trans, prop, int1); /*Be sure `trans_style` has a valid value */ @@ -1555,14 +1582,14 @@ static lv_anim_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, else if((prop & 0xF) < LV_STYLE_ID_OPA) { /*Color*/ style_list->skip_trans = 1; obj->state_dsc.act = prev_state; - lv_color_t c1 = _lv_obj_get_style_color(obj, LV_OBJ_PART_MAIN, prop); + lv_color_t c1 = _lv_obj_get_style_color(obj, part, prop); obj->state_dsc.act = new_state; - lv_color_t c2 = _lv_obj_get_style_color(obj, LV_OBJ_PART_MAIN, prop); + lv_color_t c2 = _lv_obj_get_style_color(obj, part, prop); style_list->skip_trans = 0; if(c1.full == c2.full) return NULL; obj->state_dsc.act = prev_state; - c1 = _lv_obj_get_style_color(obj, LV_OBJ_PART_MAIN, prop); + c1 = _lv_obj_get_style_color(obj, part, prop); obj->state_dsc.act = new_state; _lv_style_set_color(style_trans, prop, c1); /*Be sure `trans_style` has a valid value */ @@ -1575,15 +1602,15 @@ static lv_anim_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, else if((prop & 0xF) < LV_STYLE_ID_PTR) { /*Opa*/ style_list->skip_trans = 1; obj->state_dsc.act = prev_state; - lv_opa_t o1 = _lv_obj_get_style_opa(obj, LV_OBJ_PART_MAIN, prop); + lv_opa_t o1 = _lv_obj_get_style_opa(obj, part, prop); obj->state_dsc.act = new_state; - lv_opa_t o2 = _lv_obj_get_style_opa(obj, LV_OBJ_PART_MAIN, prop); + lv_opa_t o2 = _lv_obj_get_style_opa(obj, part, prop); style_list->skip_trans = 0; if(o1 == o2) return NULL; obj->state_dsc.act = prev_state; - o1 = _lv_obj_get_style_opa(obj, LV_OBJ_PART_MAIN, prop); + o1 = _lv_obj_get_style_opa(obj, part, prop); obj->state_dsc.act = new_state; _lv_style_set_opa(style_trans, prop, o1); /*Be sure `trans_style` has a valid value */ @@ -1595,14 +1622,14 @@ static lv_anim_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, } else { /*Ptr*/ obj->state_dsc.act = prev_state; style_list->skip_trans = 1; - const void * p1 = _lv_obj_get_style_ptr(obj, LV_OBJ_PART_MAIN, prop); + const void * p1 = _lv_obj_get_style_ptr(obj, part, prop); obj->state_dsc.act = new_state; - const void * p2 = _lv_obj_get_style_ptr(obj, LV_OBJ_PART_MAIN, prop); + const void * p2 = _lv_obj_get_style_ptr(obj, part, prop); style_list->skip_trans = 0; if(p1 == p2) return NULL; obj->state_dsc.act = prev_state; - p1 = _lv_obj_get_style_ptr(obj, LV_OBJ_PART_MAIN, prop); + p1 = _lv_obj_get_style_ptr(obj, part, prop); obj->state_dsc.act = new_state; _lv_style_set_ptr(style_trans, prop, p1); /*Be sure `trans_style` has a valid value */ @@ -1616,7 +1643,7 @@ static lv_anim_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, return tr; } -static void trans_del(lv_obj_t * obj, lv_style_property_t prop) +static void trans_del(lv_obj_t * obj, uint8_t part, lv_style_property_t prop) { lv_anim_trans_t * tr; lv_anim_trans_t * tr_next; @@ -1625,7 +1652,7 @@ static void trans_del(lv_obj_t * obj, lv_style_property_t prop) /*'tr' might be deleted, so get the next object while 'tr' is valid*/ tr_next = lv_ll_get_next(&LV_GC_ROOT(_lv_obj_style_trans_ll), tr); - if(tr->obj == obj && (prop == tr->prop || prop == 0xFF)) { + if(tr->obj == obj && (part == tr->part || part == 0xFF) && (prop == tr->prop || prop == 0xFF)) { lv_anim_del(tr, NULL); lv_ll_remove(&LV_GC_ROOT(_lv_obj_style_trans_ll), tr); lv_mem_free(tr); @@ -3379,8 +3406,7 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param) } #endif else if(sign == LV_SIGNAL_CLEANUP) { - - lv_style_list_reset(&obj->style_list); + lv_obj_clean_style_list(obj, LV_OBJ_PART_MAIN); } return res; @@ -3550,7 +3576,7 @@ static void base_dir_refr_children(lv_obj_t * obj) static void trans_anim_cb(lv_anim_trans_t * tr, lv_anim_value_t v) { - lv_style_list_t * list = lv_obj_get_style_list(tr->obj, LV_OBJ_PART_MAIN); + lv_style_list_t * list = lv_obj_get_style_list(tr->obj, tr->part); lv_style_t * style = lv_style_list_get_trans_style(list); if((tr->prop & 0xF) < LV_STYLE_ID_COLOR) { /*Value*/ @@ -3591,21 +3617,21 @@ static void trans_anim_start_cb(lv_anim_t * a) /*Init prop to an invalid values to be sure `trans_del` won't delete the just added `tr`*/ tr->prop = 0; /*Delete the relate transition if any*/ - trans_del(tr->obj, prop_tmp); + trans_del(tr->obj, tr->part, prop_tmp); tr->prop = prop_tmp; - /*Get the previous and current values*/ + /*Start the animation from the current value*/ if((prop_tmp & 0xF) < LV_STYLE_ID_COLOR) { /*Int*/ - tr->start_value._int = _lv_obj_get_style_int(tr->obj, LV_OBJ_PART_MAIN, prop_tmp); + tr->start_value._int = _lv_obj_get_style_int(tr->obj, tr->part, prop_tmp); } else if((prop_tmp & 0xF) < LV_STYLE_ID_OPA) { /*Color*/ - tr->start_value._color = _lv_obj_get_style_color(tr->obj, LV_OBJ_PART_MAIN, prop_tmp); + tr->start_value._color = _lv_obj_get_style_color(tr->obj, tr->part, prop_tmp); } else if((prop_tmp & 0xF) < LV_STYLE_ID_PTR) { /*Opa*/ - tr->start_value._opa = _lv_obj_get_style_opa(tr->obj, LV_OBJ_PART_MAIN, prop_tmp); + tr->start_value._opa = _lv_obj_get_style_opa(tr->obj, tr->part, prop_tmp); } else { /*Ptr*/ - tr->start_value._ptr= _lv_obj_get_style_ptr(tr->obj, LV_OBJ_PART_MAIN, prop_tmp); + tr->start_value._ptr= _lv_obj_get_style_ptr(tr->obj, tr->part, prop_tmp); } diff --git a/src/lv_core/lv_obj.h b/src/lv_core/lv_obj.h index bce91adb3..d81ae2da9 100644 --- a/src/lv_core/lv_obj.h +++ b/src/lv_core/lv_obj.h @@ -487,7 +487,19 @@ void lv_obj_set_ext_click_area(lv_obj_t * obj, lv_coord_t left, lv_coord_t right void lv_obj_add_style(lv_obj_t * obj, uint8_t part, lv_style_t * style); /** - * Remove all styles from the objects style list. Also reset the local styles + * Reset a style to the default (empty) state. + * Release all used memories and cancel pending related transitions. + * Typically used in `LV_SIGN_CLEAN_UP. + * @param obj pointer to an object + * @param part the part of the object which style list should be reseted. + * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` + */ +void lv_obj_clean_style_list(lv_obj_t * obj, uint8_t part); + +/** + * Reset a style to the default (empty) state. + * Release all used memories and cancel pending related transitions. + * Also notifies the object about the style change. * @param obj pointer to an object * @param part the part of the object which style list should be reseted. * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` diff --git a/src/lv_core/lv_style.c b/src/lv_core/lv_style.c index 1e0b8bbee..088b89df1 100644 --- a/src/lv_core/lv_style.c +++ b/src/lv_core/lv_style.c @@ -60,7 +60,7 @@ static lv_style_t * get_alloc_local_style(lv_style_list_t * list); */ void lv_style_init(lv_style_t * style) { - style->map = NULL; + memset(style, 0x00, sizeof(lv_style_t)); #if LV_USE_ASSERT_STYLE style->sentinel = LV_DEBUG_STYLE_SENTINEL_VALUE; #endif @@ -136,10 +136,7 @@ bool lv_style_remove_prop(lv_style_t * style, lv_style_property_t prop) */ void lv_style_list_init(lv_style_list_t * list) { - list->style_list = NULL; - list->style_cnt = 0; - list->has_local = 0; - list->has_trans = 0; + memset(list, 0x00, sizeof(lv_style_list_t)); #if LV_USE_ASSERT_STYLE list->sentinel = LV_DEBUG_STYLE_LIST_SENTINEL_VALUE; #endif @@ -709,6 +706,12 @@ lv_style_t * lv_style_list_add_trans_style(lv_style_list_t * list) lv_style_list_add_style(list, trans_style); list->has_trans = 1; + /*If the list has local style trans was added after it. But trans should be the first so swap them*/ + if(list->has_local) { + lv_style_t * tmp = list->style_list[0]; + list->style_list[0] = list->style_list[1]; + list->style_list[1] = tmp; + } return trans_style; } diff --git a/src/lv_core/lv_style.h b/src/lv_core/lv_style.h index 8e9db0729..e0d5eeb4c 100644 --- a/src/lv_core/lv_style.h +++ b/src/lv_core/lv_style.h @@ -226,7 +226,8 @@ typedef struct { uint8_t style_cnt; uint8_t has_local :1; uint8_t has_trans :1; - uint8_t skip_trans :1; + uint8_t skip_trans :1; /*1: Temporally skip the transition style if any*/ + uint8_t ignore_trans :1; /*1: Mark that this style list shouldn't receive transitions at all*/ }lv_style_list_t; /********************** diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index fe7d119f1..afba2651f 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -336,12 +336,16 @@ static void slider_init(void) lv_style_init(&slider_knob); lv_style_set_bg_opa(&slider_knob, LV_STATE_NORMAL, LV_OPA_COVER); lv_style_set_bg_color(&slider_knob, LV_STATE_NORMAL, LV_COLOR_WHITE); + lv_style_set_bg_color(&slider_knob, LV_STATE_FOCUSED, LV_COLOR_RED); lv_style_set_value_color(&slider_knob, LV_STATE_NORMAL, LV_COLOR_WHITE); lv_style_set_radius(&slider_knob, LV_STATE_NORMAL, LV_RADIUS_CIRCLE); lv_style_set_pad_left(&slider_knob, LV_STATE_NORMAL, LV_DPI/20); lv_style_set_pad_right(&slider_knob, LV_STATE_NORMAL, LV_DPI/20); lv_style_set_pad_top(&slider_knob, LV_STATE_NORMAL, LV_DPI/20); lv_style_set_pad_bottom(&slider_knob, LV_STATE_NORMAL, LV_DPI/20); + lv_style_set_trans_time(&slider_knob, LV_STATE_NORMAL, 500); + lv_style_set_trans_prop1(&slider_knob, LV_STATE_NORMAL, LV_STYLE_BG_COLOR); + #endif } @@ -896,240 +900,239 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name) break; case LV_THEME_SCR: + lv_obj_clean_style_list(obj, LV_OBJ_PART_MAIN); list = lv_obj_get_style_list(obj, LV_OBJ_PART_MAIN); - lv_style_list_reset(list); - lv_style_list_add_style(list, &scr); +lv_style_list_add_style(list, &scr); break; case LV_THEME_OBJ: + lv_obj_clean_style_list(obj, LV_OBJ_PART_MAIN); list = lv_obj_get_style_list(obj, LV_OBJ_PART_MAIN); - lv_style_list_reset(list); - lv_style_list_add_style(list, &panel); +lv_style_list_add_style(list, &panel); break; #if LV_USE_CONT case LV_THEME_CONT: + lv_obj_clean_style_list(obj, LV_OBJ_PART_MAIN); list = lv_obj_get_style_list(obj, LV_CONT_PART_MAIN); - lv_style_list_reset(list); - lv_style_list_add_style(list, &panel); +lv_style_list_add_style(list, &panel); break; #endif #if LV_USE_BTN case LV_THEME_BTN: + lv_obj_clean_style_list(obj, LV_BTN_PART_MAIN); list = lv_obj_get_style_list(obj, LV_BTN_PART_MAIN); - lv_style_list_reset(list); - lv_style_list_add_style(list, &btn); +lv_style_list_add_style(list, &btn); break; #endif #if LV_USE_BTNMATRIX case LV_THEME_BTNMATRIX: + lv_obj_clean_style_list(obj, LV_BTNMATRIX_PART_BG); list = lv_obj_get_style_list(obj, LV_BTNMATRIX_PART_BG); - lv_style_list_reset(list); - lv_style_list_add_style(list, &btnm_bg); + lv_obj_clean_style_list(obj, LV_BTNMATRIX_PART_BTN); list = lv_obj_get_style_list(obj, LV_BTNMATRIX_PART_BTN); - lv_style_list_reset(list); - lv_style_list_add_style(list, &btn); - lv_style_list_add_style(list, &btnm_btn); +lv_style_list_add_style(list, &btn); +lv_style_list_add_style(list, &btnm_btn); break; #endif #if LV_USE_KEYBOARD case LV_THEME_KEYBOARD: + lv_obj_clean_style_list(obj, LV_KEYBOARD_PART_BG); list = lv_obj_get_style_list(obj, LV_KEYBOARD_PART_BG); - lv_style_list_reset(list); - lv_style_list_add_style(list, &kb_bg); +lv_style_list_add_style(list, &kb_bg); + lv_obj_clean_style_list(obj, LV_KEYBOARD_PART_BTN); list = lv_obj_get_style_list(obj, LV_KEYBOARD_PART_BTN); - lv_style_list_reset(list); - lv_style_list_add_style(list, &btn); - lv_style_list_add_style(list, &kb_btn); +lv_style_list_add_style(list, &btn); +lv_style_list_add_style(list, &kb_btn); break; #endif #if LV_USE_BAR case LV_THEME_BAR: + lv_obj_clean_style_list(obj, LV_BAR_PART_BG); list = lv_obj_get_style_list(obj, LV_BAR_PART_BG); - lv_style_list_reset(list); - lv_style_list_add_style(list, &bar_bg); +lv_style_list_add_style(list, &bar_bg); + + lv_obj_clean_style_list(obj, LV_BAR_PART_INDIC); list = lv_obj_get_style_list(obj, LV_BAR_PART_INDIC); - lv_style_list_reset(list); lv_style_list_add_style(list, &bar_indic); break; #endif #if LV_USE_SWITCH case LV_THEME_SWITCH: + lv_obj_clean_style_list(obj, LV_SWITCH_PART_BG); list = lv_obj_get_style_list(obj, LV_SWITCH_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &bar_bg); + lv_obj_clean_style_list(obj, LV_SWITCH_PART_INDIC); list = lv_obj_get_style_list(obj, LV_SWITCH_PART_INDIC); - lv_style_list_reset(list); lv_style_list_add_style(list, &bar_indic); + lv_obj_clean_style_list(obj, LV_SWITCH_PART_KNOB); list = lv_obj_get_style_list(obj, LV_SWITCH_PART_KNOB); - lv_style_list_reset(list); lv_style_list_add_style(list, &sw_knob); break; #endif #if LV_USE_CANVAS case LV_THEME_CANVAS: + lv_obj_clean_style_list(obj, LV_CANVAS_PART_MAIN); list = lv_obj_get_style_list(obj, LV_CANVAS_PART_MAIN); - lv_style_list_reset(list); break; #endif #if LV_USE_IMG case LV_THEME_IMAGE: + lv_obj_clean_style_list(obj, LV_IMG_PART_MAIN); list = lv_obj_get_style_list(obj, LV_IMG_PART_MAIN); - lv_style_list_reset(list); break; #endif #if LV_USE_IMGBTN case LV_THEME_IMGBTN: + lv_obj_clean_style_list(obj, LV_IMG_PART_MAIN); list = lv_obj_get_style_list(obj, LV_IMG_PART_MAIN); - lv_style_list_reset(list); break; #endif #if LV_USE_LABEL case LV_THEME_LABEL: + lv_obj_clean_style_list(obj, LV_LABEL_PART_MAIN); list = lv_obj_get_style_list(obj, LV_LABEL_PART_MAIN); - lv_style_list_reset(list); break; #endif #if LV_USE_LINE case LV_THEME_LINE: + lv_obj_clean_style_list(obj, LV_LABEL_PART_MAIN); list = lv_obj_get_style_list(obj, LV_LABEL_PART_MAIN); - lv_style_list_reset(list); break; #endif #if LV_USE_ARC case LV_THEME_ARC: + lv_obj_clean_style_list(obj, LV_ARC_PART_BG); list = lv_obj_get_style_list(obj, LV_ARC_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &arc_bg); + lv_obj_clean_style_list(obj, LV_ARC_PART_ARC); list = lv_obj_get_style_list(obj, LV_ARC_PART_ARC); - lv_style_list_reset(list); lv_style_list_add_style(list, &arc); break; #endif #if LV_USE_SPINNER case LV_THEME_SPINNER: + lv_obj_clean_style_list(obj, LV_SPINNER_PART_BG); list = lv_obj_get_style_list(obj, LV_SPINNER_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &arc_bg); + lv_obj_clean_style_list(obj, LV_SPINNER_PART_ARC); list = lv_obj_get_style_list(obj, LV_SPINNER_PART_ARC); - lv_style_list_reset(list); lv_style_list_add_style(list, &arc); break; #endif #if LV_USE_SLIDER case LV_THEME_SLIDER: + lv_obj_clean_style_list(obj, LV_SLIDER_PART_BG); list = lv_obj_get_style_list(obj, LV_SLIDER_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &bar_bg); + lv_obj_clean_style_list(obj, LV_SLIDER_PART_INDIC); list = lv_obj_get_style_list(obj, LV_SLIDER_PART_INDIC); - lv_style_list_reset(list); lv_style_list_add_style(list, &bar_indic); + lv_obj_clean_style_list(obj, LV_SLIDER_PART_KNOB); list = lv_obj_get_style_list(obj, LV_SLIDER_PART_KNOB); - lv_style_list_reset(list); lv_style_list_add_style(list, &slider_knob); break; #endif #if LV_USE_CHECKBOX case LV_THEME_CHECKBOX: + lv_obj_clean_style_list(obj, LV_CHECKBOX_PART_BG); list = lv_obj_get_style_list(obj, LV_CHECKBOX_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &cb_bg); + lv_obj_clean_style_list(obj, LV_CHECKBOX_PART_BULLET); list = lv_obj_get_style_list(obj, LV_CHECKBOX_PART_BULLET); - lv_style_list_reset(list); lv_style_list_add_style(list, &cb_bullet); break; #endif #if LV_USE_MSGBOX case LV_THEME_MSGBOX: + lv_obj_clean_style_list(obj, LV_MSGBOX_PART_BG); list = lv_obj_get_style_list(obj, LV_MSGBOX_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &bg); break; case LV_THEME_MSGBOX_BTNS: + lv_obj_clean_style_list(obj, LV_MSGBOX_PART_BTN_BG); list = lv_obj_get_style_list(obj, LV_MSGBOX_PART_BTN_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &mbox_btn_bg); + lv_obj_clean_style_list(obj, LV_MSGBOX_PART_BTN); list = lv_obj_get_style_list(obj, LV_MSGBOX_PART_BTN); - lv_style_list_reset(list); lv_style_list_add_style(list, &btn); break; #endif #if LV_USE_LED case LV_THEME_LED: + lv_obj_clean_style_list(obj, LV_LED_PART_MAIN); list = lv_obj_get_style_list(obj, LV_LED_PART_MAIN); - lv_style_list_reset(list); lv_style_list_add_style(list, &led); break; #endif #if LV_USE_PAGE case LV_THEME_PAGE: + lv_obj_clean_style_list(obj, LV_PAGE_PART_BG); list = lv_obj_get_style_list(obj, LV_PAGE_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &panel); + lv_obj_clean_style_list(obj, LV_PAGE_PART_SCRL); list = lv_obj_get_style_list(obj, LV_PAGE_PART_SCRL); - lv_style_list_reset(list); + lv_obj_clean_style_list(obj, LV_PAGE_PART_SCRLBAR); list = lv_obj_get_style_list(obj, LV_PAGE_PART_SCRLBAR); - lv_style_list_reset(list); lv_style_list_add_style(list, &sb); break; #endif #if LV_USE_TABVIEW case LV_THEME_TABVIEW: + lv_obj_clean_style_list(obj, LV_TABVIEW_PART_BG); list = lv_obj_get_style_list(obj, LV_TABVIEW_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &scr); + lv_obj_clean_style_list(obj, LV_TABVIEW_PART_BG_SCRL); list = lv_obj_get_style_list(obj, LV_TABVIEW_PART_BG_SCRL); - lv_style_list_reset(list); + lv_obj_clean_style_list(obj, LV_TABVIEW_PART_TAB_BG); list = lv_obj_get_style_list(obj, LV_TABVIEW_PART_TAB_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &tabview_btns_bg); - + lv_obj_clean_style_list(obj, LV_TABVIEW_PART_INDIC); list = lv_obj_get_style_list(obj, LV_TABVIEW_PART_INDIC); - lv_style_list_reset(list); lv_style_list_add_style(list, &tabview_indic); + lv_obj_clean_style_list(obj, LV_TABVIEW_PART_TAB); list = lv_obj_get_style_list(obj, LV_TABVIEW_PART_TAB); - lv_style_list_reset(list); lv_style_list_add_style(list, &tabview_btns); break; case LV_THEME_TABVIEW_PAGE: + lv_obj_clean_style_list(obj, LV_PAGE_PART_BG); list = lv_obj_get_style_list(obj, LV_PAGE_PART_BG); - lv_style_list_reset(list); + lv_obj_clean_style_list(obj, LV_PAGE_PART_SCRL); list = lv_obj_get_style_list(obj, LV_PAGE_PART_SCRL); - lv_style_list_reset(list); lv_style_list_add_style(list, &tabview_page_scrl); break; @@ -1137,16 +1140,16 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name) #if LV_USE_TILEVIEW case LV_THEME_TILEVIEW: + lv_obj_clean_style_list(obj, LV_TILEVIEW_PART_BG); list = lv_obj_get_style_list(obj, LV_TILEVIEW_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &scr); + lv_obj_clean_style_list(obj, LV_TILEVIEW_PART_SCRLBAR); list = lv_obj_get_style_list(obj, LV_TILEVIEW_PART_SCRLBAR); - lv_style_list_reset(list); lv_style_list_add_style(list, &sb); + lv_obj_clean_style_list(obj, LV_TILEVIEW_PART_EDGE_FLASH); list = lv_obj_get_style_list(obj, LV_TILEVIEW_PART_EDGE_FLASH); - lv_style_list_reset(list); lv_style_list_add_style(list, &btn); break; #endif @@ -1154,12 +1157,12 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name) #if LV_USE_ROLLER case LV_THEME_ROLLER: + lv_obj_clean_style_list(obj, LV_ROLLER_PART_BG); list = lv_obj_get_style_list(obj, LV_ROLLER_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &roller_bg); + lv_obj_clean_style_list(obj, LV_ROLLER_PART_SEL); list = lv_obj_get_style_list(obj, LV_ROLLER_PART_SEL); - lv_style_list_reset(list); lv_style_list_add_style(list, &roller_sel); break; #endif @@ -1167,149 +1170,150 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name) #if LV_USE_OBJMASK case LV_THEME_OBJMASK: + lv_obj_clean_style_list(obj, LV_OBJMASK_PART_MAIN); list = lv_obj_get_style_list(obj, LV_OBJMASK_PART_MAIN); - lv_style_list_reset(list); break; #endif #if LV_USE_LIST case LV_THEME_LIST: + lv_obj_clean_style_list(obj, LV_LIST_PART_BG); list = lv_obj_get_style_list(obj, LV_LIST_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &list_bg); + lv_obj_clean_style_list(obj, LV_LIST_PART_SCRL); list = lv_obj_get_style_list(obj, LV_LIST_PART_SCRL); - lv_style_list_reset(list); + lv_obj_clean_style_list(obj, LV_LIST_PART_SCRLBAR); list = lv_obj_get_style_list(obj, LV_LIST_PART_SCRLBAR); - lv_style_list_reset(list); lv_style_list_add_style(list, &sb); break; case LV_THEME_LIST_BTN: + lv_obj_clean_style_list(obj, LV_BTN_PART_MAIN); list = lv_obj_get_style_list(obj, LV_BTN_PART_MAIN); - lv_style_list_reset(list); lv_style_list_add_style(list, &list_btn); break; #endif #if LV_USE_DROPDOWN case LV_THEME_DROPDOWN: + lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_BTN); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_BTN); - lv_style_list_reset(list); lv_style_list_add_style(list, &ddlist_btn); + lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_LIST); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_LIST); - lv_style_list_reset(list); lv_style_list_add_style(list, &ddlist_page); + lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_SCRLBAR); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_SCRLBAR); - lv_style_list_reset(list); lv_style_list_add_style(list, &sb); + lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_SELECTED); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_SELECTED); - lv_style_list_reset(list); lv_style_list_add_style(list, &ddlist_sel); break; #endif #if LV_USE_CHART case LV_THEME_CHART: + lv_obj_clean_style_list(obj, LV_CHART_PART_BG); list = lv_obj_get_style_list(obj, LV_CHART_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &panel); + lv_obj_clean_style_list(obj, LV_CHART_PART_SERIES_BG); list = lv_obj_get_style_list(obj, LV_CHART_PART_SERIES_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &chart_series_bg); + lv_obj_clean_style_list(obj, LV_CHART_PART_SERIES); list = lv_obj_get_style_list(obj, LV_CHART_PART_SERIES); - lv_style_list_reset(list); lv_style_list_add_style(list, &chart_series); break; #endif #if LV_USE_TABLE case LV_THEME_TABLE: + lv_obj_clean_style_list(obj, LV_TABLE_PART_BG); list = lv_obj_get_style_list(obj, LV_TABLE_PART_BG); - lv_style_list_reset(list); + lv_obj_clean_style_list(obj, LV_TABLE_PART_CELL1); list = lv_obj_get_style_list(obj, LV_TABLE_PART_CELL1); - lv_style_list_reset(list); lv_style_list_add_style(list, &table_cell); + lv_obj_clean_style_list(obj, LV_TABLE_PART_CELL2); list = lv_obj_get_style_list(obj, LV_TABLE_PART_CELL2); - lv_style_list_reset(list); lv_style_list_add_style(list, &table_cell); + lv_obj_clean_style_list(obj, LV_TABLE_PART_CELL3); list = lv_obj_get_style_list(obj, LV_TABLE_PART_CELL3); - lv_style_list_reset(list); lv_style_list_add_style(list, &table_cell); + lv_obj_clean_style_list(obj, LV_TABLE_PART_CELL4); list = lv_obj_get_style_list(obj, LV_TABLE_PART_CELL4); - lv_style_list_reset(list); lv_style_list_add_style(list, &table_cell); break; #endif #if LV_USE_WIN case LV_THEME_WIN: + lv_obj_clean_style_list(obj, LV_WIN_PART_BG); list = lv_obj_get_style_list(obj, LV_WIN_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &scr); + lv_obj_clean_style_list(obj, LV_WIN_PART_SCRLBAR); list = lv_obj_get_style_list(obj, LV_WIN_PART_SCRLBAR); - lv_style_list_reset(list); lv_style_list_add_style(list, &sb); + lv_obj_clean_style_list(obj, LV_WIN_PART_CONTENT_SCRL); list = lv_obj_get_style_list(obj, LV_WIN_PART_CONTENT_SCRL); - lv_style_list_reset(list); lv_style_list_add_style(list, &tabview_page_scrl); + lv_obj_clean_style_list(obj, LV_WIN_PART_HEADER); list = lv_obj_get_style_list(obj, LV_WIN_PART_HEADER); - lv_style_list_reset(list); lv_style_list_add_style(list, &tabview_btns_bg); break; + case LV_THEME_WIN_BTN: + lv_obj_clean_style_list(obj, LV_BTN_PART_MAIN); list = lv_obj_get_style_list(obj, LV_BTN_PART_MAIN); - lv_style_list_reset(list); lv_style_list_add_style(list, &tabview_btns); break; #endif #if LV_USE_TEXTAREA case LV_THEME_TEXTAREA: + lv_obj_clean_style_list(obj, LV_TEXTAREA_PART_BG); list = lv_obj_get_style_list(obj, LV_TEXTAREA_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &ta_bg); + lv_obj_clean_style_list(obj, LV_TEXTAREA_PART_PLACEHOLDER); list = lv_obj_get_style_list(obj, LV_TEXTAREA_PART_PLACEHOLDER); - lv_style_list_reset(list); lv_style_list_add_style(list, &ta_placeholder); + lv_obj_clean_style_list(obj, LV_TEXTAREA_PART_CURSOR); list = lv_obj_get_style_list(obj, LV_TEXTAREA_PART_CURSOR); - lv_style_list_reset(list); lv_style_list_add_style(list, &ta_cursor); + lv_obj_clean_style_list(obj, LV_TEXTAREA_PART_SCRLBAR); list = lv_obj_get_style_list(obj, LV_TEXTAREA_PART_SCRLBAR); - lv_style_list_reset(list); lv_style_list_add_style(list, &sb); break; case LV_THEME_TEXTAREA_ONELINE: + lv_obj_clean_style_list(obj, LV_TEXTAREA_PART_BG); list = lv_obj_get_style_list(obj, LV_TEXTAREA_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &ta_oneline); + lv_obj_clean_style_list(obj, LV_TEXTAREA_PART_PLACEHOLDER); list = lv_obj_get_style_list(obj, LV_TEXTAREA_PART_PLACEHOLDER); - lv_style_list_reset(list); lv_style_list_add_style(list, &ta_placeholder); + lv_obj_clean_style_list(obj, LV_TEXTAREA_PART_CURSOR); list = lv_obj_get_style_list(obj, LV_TEXTAREA_PART_CURSOR); - lv_style_list_reset(list); lv_style_list_add_style(list, &ta_cursor); + lv_obj_clean_style_list(obj, LV_TEXTAREA_PART_SCRLBAR); list = lv_obj_get_style_list(obj, LV_TEXTAREA_PART_SCRLBAR); - lv_style_list_reset(list); lv_style_list_add_style(list, &sb); break; #endif @@ -1317,72 +1321,72 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name) #if LV_USE_SPINBOX case LV_THEME_SPINBOX: + lv_obj_clean_style_list(obj, LV_SPINBOX_PART_BG); list = lv_obj_get_style_list(obj, LV_SPINBOX_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &ta_bg); + lv_obj_clean_style_list(obj, LV_SPINBOX_PART_CURSOR); list = lv_obj_get_style_list(obj, LV_SPINBOX_PART_CURSOR); - lv_style_list_reset(list); lv_style_list_add_style(list, &spinbox_cursor); break; case LV_THEME_SPINBOX_BTN: + lv_obj_clean_style_list(obj, LV_BTN_PART_MAIN); list = lv_obj_get_style_list(obj, LV_BTN_PART_MAIN); - lv_style_list_reset(list); lv_style_list_add_style(list, &spinbox_btn); break; #endif #if LV_USE_CALENDAR case LV_THEME_CALENDAR: + lv_obj_clean_style_list(obj, LV_CALENDAR_PART_BG); list = lv_obj_get_style_list(obj, LV_CALENDAR_PART_BG); - lv_style_list_reset(list); lv_style_list_add_style(list, &panel); + lv_obj_clean_style_list(obj, LV_CALENDAR_PART_DATE); list = lv_obj_get_style_list(obj, LV_CALENDAR_PART_DATE); - lv_style_list_reset(list); lv_style_list_add_style(list, &calendar_date_nums); + lv_obj_clean_style_list(obj, LV_CALENDAR_PART_HEADER); list = lv_obj_get_style_list(obj, LV_CALENDAR_PART_HEADER); - lv_style_list_reset(list); lv_style_list_add_style(list, &calendar_header); + lv_obj_clean_style_list(obj, LV_CALENDAR_PART_DAY_NAMES); list = lv_obj_get_style_list(obj, LV_CALENDAR_PART_DAY_NAMES); - lv_style_list_reset(list); lv_style_list_add_style(list, &calendar_daynames); break; #endif #if LV_USE_CPICKER case LV_THEME_CPICKER: + lv_obj_clean_style_list(obj, LV_CPICKER_PART_MAIN); list = lv_obj_get_style_list(obj, LV_CPICKER_PART_MAIN); - lv_style_list_reset(list); lv_style_list_add_style(list, &cpicker_bg); + lv_obj_clean_style_list(obj, LV_CPICKER_PART_INDIC); list = lv_obj_get_style_list(obj, LV_CPICKER_PART_INDIC); - lv_style_list_reset(list); lv_style_list_add_style(list, &cpicker_indic); break; #endif -#if LV_USE_LMETER +#if LV_USE_LINEMETER case LV_THEME_LINEMETER: + lv_obj_clean_style_list(obj, LV_LINEMETER_PART_MAIN); list = lv_obj_get_style_list(obj, LV_LINEMETER_PART_MAIN); - lv_style_list_reset(list); lv_style_list_add_style(list, &lmeter); break; #endif #if LV_USE_GAUGE case LV_THEME_GAUGE: + lv_obj_clean_style_list(obj, LV_GAUGE_PART_MAIN); list = lv_obj_get_style_list(obj, LV_GAUGE_PART_MAIN); - lv_style_list_reset(list); lv_style_list_add_style(list, &gauge_main); + lv_obj_clean_style_list(obj, LV_GAUGE_PART_STRONG); list = lv_obj_get_style_list(obj, LV_GAUGE_PART_STRONG); - lv_style_list_reset(list); lv_style_list_add_style(list, &gauge_strong); + lv_obj_clean_style_list(obj, LV_GAUGE_PART_NEEDLE); list = lv_obj_get_style_list(obj, LV_GAUGE_PART_NEEDLE); - lv_style_list_reset(list); lv_style_list_add_style(list, &gauge_needle); break; #endif diff --git a/src/lv_widgets/lv_arc.c b/src/lv_widgets/lv_arc.c index b3438f55f..e29e21f61 100644 --- a/src/lv_widgets/lv_arc.c +++ b/src/lv_widgets/lv_arc.c @@ -420,7 +420,7 @@ static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param) if(sign == LV_SIGNAL_CLEANUP) { lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc); - lv_style_list_reset(&ext->style_arc); + lv_obj_clean_style_list(arc, LV_ARC_PART_ARC); } return res; diff --git a/src/lv_widgets/lv_bar.c b/src/lv_widgets/lv_bar.c index dcf45a6b7..4b6b0dbb8 100644 --- a/src/lv_widgets/lv_bar.c +++ b/src/lv_widgets/lv_bar.c @@ -627,7 +627,7 @@ static lv_res_t lv_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * param) } if(sign == LV_SIGNAL_CLEANUP) { lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar); - lv_style_list_reset(&ext->style_indic); + lv_obj_clean_style_list(bar, LV_BAR_PART_INDIC); #if LV_USE_ANIMATION lv_anim_del(&ext->cur_value_anim, NULL); lv_anim_del(&ext->start_value_anim, NULL); diff --git a/src/lv_widgets/lv_btnmatrix.c b/src/lv_widgets/lv_btnmatrix.c index 3d27daa5f..9dfd2207c 100644 --- a/src/lv_widgets/lv_btnmatrix.c +++ b/src/lv_widgets/lv_btnmatrix.c @@ -97,6 +97,7 @@ lv_obj_t * lv_btnmatrix_create(lv_obj_t * par, const lv_obj_t * copy) ext->recolor = 0; ext->one_toggle = 0; lv_style_list_init(&ext->style_btn); + ext->style_btn.ignore_trans = 1; if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_cb(btnm); @@ -778,6 +779,7 @@ static lv_res_t lv_btnmatrix_signal(lv_obj_t * btnm, lv_signal_t sign, void * pa lv_btnmatrix_ext_t * ext = lv_obj_get_ext_attr(btnm); lv_point_t p; if(sign == LV_SIGNAL_CLEANUP) { + lv_obj_clean_style_list(btnm, LV_BTNMATRIX_PART_BTN); lv_mem_free(ext->button_areas); lv_mem_free(ext->ctrl_bits); } else if(sign == LV_SIGNAL_STYLE_CHG) { diff --git a/src/lv_widgets/lv_calendar.c b/src/lv_widgets/lv_calendar.c index a0b32f227..950b30a6a 100644 --- a/src/lv_widgets/lv_calendar.c +++ b/src/lv_widgets/lv_calendar.c @@ -119,6 +119,9 @@ lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy) lv_style_list_init(&ext->style_date_nums); lv_style_list_init(&ext->style_day_names); lv_style_list_init(&ext->style_header); + ext->style_date_nums.skip_trans = 1; + ext->style_day_names.skip_trans = 1; + ext->style_header.skip_trans = 1; /*The signal and design functions are not copied so set them here*/ lv_obj_set_signal_cb(calendar, lv_calendar_signal); @@ -426,10 +429,9 @@ static lv_res_t lv_calendar_signal(lv_obj_t * calendar, lv_signal_t sign, void * if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME); if(sign == LV_SIGNAL_CLEANUP) { - lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar); - lv_style_list_reset(&ext->style_header); - lv_style_list_reset(&ext->style_day_names); - lv_style_list_reset(&ext->style_date_nums); + lv_obj_clean_style_list(calendar, LV_CALENDAR_PART_HEADER); + lv_obj_clean_style_list(calendar, LV_CALENDAR_PART_DAY_NAMES); + lv_obj_clean_style_list(calendar, LV_CALENDAR_PART_DATE); } else if(sign == LV_SIGNAL_PRESSING) { lv_calendar_ext_t * ext = lv_obj_get_ext_attr(calendar); lv_area_t header_area; @@ -459,7 +461,7 @@ static lv_res_t lv_calendar_signal(lv_obj_t * calendar, lv_signal_t sign, void * ext->btn_pressing = 0; lv_obj_invalidate(calendar); } - /*ELse set a default state*/ + /*Else set a default state*/ else { if(ext->btn_pressing != 0) lv_obj_invalidate(calendar); ext->btn_pressing = 0; diff --git a/src/lv_widgets/lv_chart.c b/src/lv_widgets/lv_chart.c index 2f11db407..304590ab9 100644 --- a/src/lv_widgets/lv_chart.c +++ b/src/lv_widgets/lv_chart.c @@ -653,8 +653,8 @@ static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param } lv_ll_clear(&ext->series_ll); - lv_style_list_reset(&ext->style_series); - lv_style_list_reset(&ext->style_series_bg); + lv_obj_clean_style_list(chart, LV_CHART_PART_SERIES); + lv_obj_clean_style_list(chart, LV_CHART_PART_SERIES_BG); } return res; diff --git a/src/lv_widgets/lv_cpicker.c b/src/lv_widgets/lv_cpicker.c index ac9fd5c08..d3a3e49c2 100644 --- a/src/lv_widgets/lv_cpicker.c +++ b/src/lv_widgets/lv_cpicker.c @@ -661,7 +661,7 @@ static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * p lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker); if(sign == LV_SIGNAL_CLEANUP) { - lv_style_list_reset(&ext->indic.style_list); + lv_obj_clean_style_list(cpicker, LV_CPICKER_PART_INDIC); } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) { lv_style_int_t left = lv_obj_get_style_pad_left(cpicker, LV_CPICKER_PART_INDIC); lv_style_int_t right = lv_obj_get_style_pad_right(cpicker, LV_CPICKER_PART_INDIC); diff --git a/src/lv_widgets/lv_dropdown.c b/src/lv_widgets/lv_dropdown.c index a7753dcc7..b60dd73d1 100644 --- a/src/lv_widgets/lv_dropdown.c +++ b/src/lv_widgets/lv_dropdown.c @@ -467,7 +467,7 @@ void lv_dropdown_open(lv_obj_t * ddlist, lv_anim_enable_t anim) lv_style_list_copy(lv_obj_get_style_list(ext->page, LV_PAGE_PART_BG), &ext->style_page); lv_style_list_copy(lv_obj_get_style_list(ext->page, LV_PAGE_PART_SCRLBAR), &ext->style_scrlbar); - lv_style_list_reset(lv_obj_get_style_list(ext->page, LV_PAGE_PART_SCRL)); + lv_obj_clean_style_list(ext->page, LV_PAGE_PART_SCRL); lv_obj_refresh_style(ext->page); lv_page_set_scrl_fit(ext->page, LV_FIT_TIGHT); @@ -742,9 +742,13 @@ static lv_res_t lv_dropdown_signal(lv_obj_t * ddlist, lv_signal_t sign, void * p } else if(sign == LV_SIGNAL_CLEANUP) { lv_dropdown_close(ddlist, LV_ANIM_OFF); + + /*`lv_obj_clean_style_list` is not required because these styles are only copied to the page + * so they can have transitions or other object related things. */ lv_style_list_reset(&ext->style_page); lv_style_list_reset(&ext->style_scrlbar); lv_style_list_reset(&ext->style_selected); + } else if(sign == LV_SIGNAL_FOCUS) { #if LV_USE_GROUP diff --git a/src/lv_widgets/lv_gauge.c b/src/lv_widgets/lv_gauge.c index 5b4b18548..0efd03850 100644 --- a/src/lv_widgets/lv_gauge.c +++ b/src/lv_widgets/lv_gauge.c @@ -397,8 +397,8 @@ static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * param if(sign == LV_SIGNAL_CLEANUP) { lv_mem_free(ext->values); ext->values = NULL; - lv_style_list_reset(&ext->style_needle); - lv_style_list_reset(&ext->style_strong); + lv_obj_clean_style_list(gauge, LV_GAUGE_PART_NEEDLE); + lv_obj_clean_style_list(gauge, LV_GAUGE_PART_STRONG); } return res; diff --git a/src/lv_widgets/lv_page.c b/src/lv_widgets/lv_page.c index 205eac447..e4a85fb11 100644 --- a/src/lv_widgets/lv_page.c +++ b/src/lv_widgets/lv_page.c @@ -741,9 +741,9 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) } } - lv_style_list_reset(&ext->scrlbar.style); + lv_obj_clean_style_list(page, LV_PAGE_PART_SCRLBAR); #if LV_USE_ANIMATION - lv_style_list_reset(&ext->edge_flash.style); + lv_obj_clean_style_list(page, LV_PAGE_PART_EDGE_FLASH); #endif } /*Automatically move children to the scrollable object*/ @@ -1013,10 +1013,6 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi } else if(sign == LV_SIGNAL_CLEANUP) { page_ext->scrl = NULL; -#if LV_USE_ANIMATION - lv_style_list_reset(&page_ext->edge_flash.style); -#endif - lv_style_list_reset(&page_ext->scrlbar.style); } return res; diff --git a/src/lv_widgets/lv_roller.c b/src/lv_widgets/lv_roller.c index 4db39f90b..0dbb461b3 100644 --- a/src/lv_widgets/lv_roller.c +++ b/src/lv_widgets/lv_roller.c @@ -111,7 +111,8 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy) lv_obj_set_signal_cb(scrl, lv_roller_scrl_signal); - lv_style_list_reset(lv_obj_get_style_list(roller, LV_PAGE_PART_SCRL)); + + lv_obj_clean_style_list(roller, LV_PAGE_PART_SCRL); /*Use a transparent scrollable*/ lv_theme_apply(roller, LV_THEME_ROLLER); refr_height(roller); diff --git a/src/lv_widgets/lv_slider.c b/src/lv_widgets/lv_slider.c index 71b8e5d1f..365172aeb 100644 --- a/src/lv_widgets/lv_slider.c +++ b/src/lv_widgets/lv_slider.c @@ -377,7 +377,7 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par if(res != LV_RES_OK) return res; } } else if(sign == LV_SIGNAL_CLEANUP) { - lv_style_list_reset(&ext->style_knob); + lv_obj_clean_style_list(slider, LV_SLIDER_PART_KNOB); } else if(sign == LV_SIGNAL_GET_EDITABLE) { bool * editable = (bool *)param; *editable = true; diff --git a/src/lv_widgets/lv_switch.c b/src/lv_widgets/lv_switch.c index 7a51b2610..1faf1481c 100644 --- a/src/lv_widgets/lv_switch.c +++ b/src/lv_widgets/lv_switch.c @@ -278,8 +278,7 @@ static lv_res_t lv_switch_signal(lv_obj_t * sw, lv_signal_t sign, void * param) if(res != LV_RES_OK) return res; if(sign == LV_SIGNAL_CLEANUP) { - lv_switch_ext_t * ext = lv_obj_get_ext_attr(sw); - lv_style_list_reset(&ext->style_knob); + lv_obj_clean_style_list(sw, LV_SWITCH_PART_KNOB); } else if(sign == LV_SIGNAL_RELEASED) { if(lv_switch_get_state(sw)) lv_switch_off(sw, LV_ANIM_ON); else lv_switch_on(sw, LV_ANIM_ON); diff --git a/src/lv_widgets/lv_table.c b/src/lv_widgets/lv_table.c index fdda8e2b8..13260e35c 100644 --- a/src/lv_widgets/lv_table.c +++ b/src/lv_widgets/lv_table.c @@ -793,7 +793,7 @@ static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void * param if(ext->cell_data != NULL) lv_mem_free(ext->cell_data); for(i = 0; i < LV_TABLE_CELL_STYLE_CNT; i++) { - lv_style_list_reset(&ext->cell_style[i]); + lv_obj_clean_style_list(table, LV_TABLE_PART_CELL1 + i); } } else if(sign == LV_SIGNAL_STYLE_CHG) { diff --git a/src/lv_widgets/lv_tabview.c b/src/lv_widgets/lv_tabview.c index 5a6c97882..115b664c1 100644 --- a/src/lv_widgets/lv_tabview.c +++ b/src/lv_widgets/lv_tabview.c @@ -135,13 +135,13 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy) lv_obj_set_event_cb(ext->btns, tab_btnm_event_cb); lv_obj_set_click(ext->indic, false); + lv_obj_set_drag_dir(lv_page_get_scrl(ext->content), LV_DRAG_DIR_ONE); lv_page_set_scrl_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_PARENT); lv_page_set_scrl_layout(ext->content, LV_LAYOUT_ROW_TOP); lv_page_set_sb_mode(ext->content, LV_SB_MODE_OFF); - lv_obj_set_drag_dir(lv_page_get_scrl(ext->content), LV_DRAG_DIR_ONE); - lv_style_list_reset(lv_obj_get_style_list(ext->content, LV_PAGE_PART_BG)); + lv_obj_clean_style_list(ext->content, LV_PAGE_PART_BG); lv_theme_apply(tabview, LV_THEME_TABVIEW); diff --git a/src/lv_widgets/lv_textarea.c b/src/lv_widgets/lv_textarea.c index aa2bfdb55..42eb424be 100644 --- a/src/lv_widgets/lv_textarea.c +++ b/src/lv_widgets/lv_textarea.c @@ -1361,7 +1361,7 @@ static lv_res_t lv_textarea_signal(lv_obj_t * ta, lv_signal_t sign, void * param if(ext->pwd_tmp != NULL) lv_mem_free(ext->pwd_tmp); /* (The created label will be deleted automatically) */ - lv_style_list_reset(&ext->cursor.style); + lv_obj_clean_style_list(ta, LV_TEXTAREA_PART_CURSOR); } else if(sign == LV_SIGNAL_STYLE_CHG) { if(ext->label) { if(ext->one_line) { diff --git a/src/lv_widgets/lv_win.c b/src/lv_widgets/lv_win.c index 79c494a8d..8e6d8e8a9 100644 --- a/src/lv_widgets/lv_win.c +++ b/src/lv_widgets/lv_win.c @@ -95,7 +95,7 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy) ext->page = lv_page_create(new_win, NULL); lv_obj_add_protect(ext->page, LV_PROTECT_PARENT); lv_page_set_sb_mode(ext->page, LV_SB_MODE_AUTO); - lv_style_list_reset(lv_obj_get_style_list(ext->page, LV_PAGE_PART_BG)); + lv_obj_clean_style_list(ext->page, LV_PAGE_PART_BG); /*Create a holder for the header*/ ext->header = lv_obj_create(new_win, NULL);