diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 929b825ef..7b9ac8849 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -778,6 +778,9 @@ void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state) } } + if(cmp_res == _LV_STYLE_STATE_CMP_VISUAL_DIFF) { + _lv_obj_invalidate_style_cache(obj, part, LV_STYLE_PROP_ALL); + } } if(cmp_res == _LV_STYLE_STATE_CMP_DIFF) _lv_obj_refresh_style(obj, LV_OBJ_PART_ALL, LV_STYLE_PROP_ALL); diff --git a/src/lv_core/lv_obj_style.c b/src/lv_core/lv_obj_style.c index c01b0a8b6..ceca453a0 100644 --- a/src/lv_core/lv_obj_style.c +++ b/src/lv_core/lv_obj_style.c @@ -92,7 +92,6 @@ static _lv_style_state_cmp_t style_snapshot_compare(style_snapshot_t * shot1, st static bool style_prop_is_cacheable(lv_style_property_t prop); static void update_style_cache(lv_obj_t * obj, uint8_t part, uint16_t prop); static void update_style_cache_children(lv_obj_t * obj); -static void invalidate_style_cache(lv_obj_t * obj, uint8_t part, lv_style_property_t prop); #endif static void fade_anim_cb(lv_obj_t * obj, lv_anim_value_t v); static void fade_in_anim_ready(lv_anim_t * a); @@ -307,6 +306,44 @@ void _lv_obj_disable_style_caching(lv_obj_t * obj, bool dis) } +#if LV_STYLE_CACHE_LEVEL > 0 + +/** + * Mark the object and all of it's children's style lists as invalid. + * The cache will be updated when a cached property asked nest time + * @param obj pointer to an object + */ +void _lv_obj_invalidate_style_cache(lv_obj_t * obj, uint8_t part, lv_style_property_t prop) +{ + if(style_prop_is_cacheable(prop) == false) return; + + if(part != LV_OBJ_PART_ALL) { + lv_style_list_t * list = _lv_obj_get_style_list(obj, part); + if(list == NULL) return; + list->valid_cache = 0; + } + else { + + for(part = 0; part < _LV_OBJ_PART_REAL_FIRST; part++) { + lv_style_list_t * list = _lv_obj_get_style_list(obj, part); + if(list == NULL) break; + list->valid_cache = 0; + } + for(part = _LV_OBJ_PART_REAL_FIRST; part < 0xFF; part++) { + lv_style_list_t * list = _lv_obj_get_style_list(obj, part); + if(list == NULL) break; + list->valid_cache = 0; + } + } + + lv_obj_t * child = lv_obj_get_child(obj, NULL); + while(child) { + update_style_cache_children(child); + child = lv_obj_get_child(obj, child); + } +} +#endif /*LV_STYLE_CACHE_LEVEL >= 1*/ + /** * Get a style property of a part of an object in the object's current state. * If there is a running transitions it is taken into account @@ -798,7 +835,7 @@ void _lv_obj_refresh_style(lv_obj_t * obj, uint8_t part, lv_style_property_t pro { LV_ASSERT_OBJ(obj, LV_OBJX_NAME); #if LV_STYLE_CACHE_LEVEL >= 1 - invalidate_style_cache(obj, part, prop); + _lv_obj_invalidate_style_cache(obj, part, prop); #endif /*If a real style refresh is required*/ @@ -1481,40 +1518,6 @@ static void update_style_cache_children(lv_obj_t * obj) } -/** - * Mark the object and all of it's children's style lists as invalid. - * The cache will be updated when a cached property asked nest time - * @param obj pointer to an object - */ -static void invalidate_style_cache(lv_obj_t * obj, uint8_t part, lv_style_property_t prop) -{ - if(style_prop_is_cacheable(prop) == false) return; - - if(part != LV_OBJ_PART_ALL) { - lv_style_list_t * list = _lv_obj_get_style_list(obj, part); - if(list == NULL) return; - list->valid_cache = 0; - } - else { - - for(part = 0; part < _LV_OBJ_PART_REAL_FIRST; part++) { - lv_style_list_t * list = _lv_obj_get_style_list(obj, part); - if(list == NULL) break; - list->valid_cache = 0; - } - for(part = _LV_OBJ_PART_REAL_FIRST; part < 0xFF; part++) { - lv_style_list_t * list = _lv_obj_get_style_list(obj, part); - if(list == NULL) break; - list->valid_cache = 0; - } - } - - lv_obj_t * child = lv_obj_get_child(obj, NULL); - while(child) { - update_style_cache_children(child); - child = lv_obj_get_child(obj, child); - } -} #endif /*LV_STYLE_CACHE_LEVEL >= 1*/ diff --git a/src/lv_core/lv_obj_style.h b/src/lv_core/lv_obj_style.h index 7eecbb97d..598f240bf 100644 --- a/src/lv_core/lv_obj_style.h +++ b/src/lv_core/lv_obj_style.h @@ -127,6 +127,17 @@ lv_style_list_t * _lv_obj_get_style_list(const lv_obj_t * obj, uint8_t part); */ void _lv_obj_disable_style_caching(lv_obj_t * obj, bool dis); + +#if LV_STYLE_CACHE_LEVEL > 0 + +/** + * Mark the object and all of it's children's style lists as invalid. + * The cache will be updated when a cached property asked nest time + * @param obj pointer to an object + */ +void _lv_obj_invalidate_style_cache(lv_obj_t * obj, uint8_t part, lv_style_property_t prop); +#endif + /** * Get a style property of a part of an object in the object's current state. * If there is a running transitions it is taken into account diff --git a/src/lv_widgets/lv_checkbox.c b/src/lv_widgets/lv_checkbox.c index f577633b4..a8258d159 100644 --- a/src/lv_widgets/lv_checkbox.c +++ b/src/lv_widgets/lv_checkbox.c @@ -78,6 +78,7 @@ lv_obj_t * lv_checkbox_create(lv_obj_t * par, const lv_obj_t * copy) lv_label_set_text_static(cb, "Check box"); lv_theme_apply(cb, LV_THEME_CHECKBOX); lv_obj_add_flag(cb, LV_OBJ_FLAG_CLICKABLE); + lv_obj_add_flag(cb, LV_OBJ_FLAG_CHECKABLE); } else {