1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-02-04 07:13:00 +08:00

fix(layout): fix layout update trigger in lv_obj_add/clear_flag()

This commit is contained in:
Gabor Kiss-Vamosi 2021-03-03 02:23:11 +01:00
parent a8dd20435d
commit d4eb6a2ad3
2 changed files with 14 additions and 8 deletions

View File

@ -325,17 +325,18 @@ void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t f)
{ {
LV_ASSERT_OBJ(obj, MY_CLASS); LV_ASSERT_OBJ(obj, MY_CLASS);
bool was_on_layout = lv_obj_is_layout_positioned(obj);
if(f & LV_OBJ_FLAG_HIDDEN) lv_obj_invalidate(obj); if(f & LV_OBJ_FLAG_HIDDEN) lv_obj_invalidate(obj);
obj->flags |= f; obj->flags |= f;
if(f & (LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING)) lv_signal_send(lv_obj_get_parent(obj), LV_SIGNAL_CHILD_CHG, obj); if(f & LV_OBJ_FLAG_HIDDEN) {
if(f & (LV_OBJ_FLAG_HIDDEN | LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2)) {
lv_obj_invalidate(obj); lv_obj_invalidate(obj);
if(lv_obj_is_layout_positioned(obj)) { }
lv_obj_update_layout(lv_obj_get_parent(obj), obj);
} if((was_on_layout != lv_obj_is_layout_positioned(obj)) || (f & (LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2))) {
lv_obj_update_layout(lv_obj_get_parent(obj), obj);
} }
} }
@ -343,6 +344,8 @@ void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t f)
{ {
LV_ASSERT_OBJ(obj, MY_CLASS); LV_ASSERT_OBJ(obj, MY_CLASS);
bool was_on_layout = lv_obj_is_layout_positioned(obj);
obj->flags &= (~f); obj->flags &= (~f);
if(f & LV_OBJ_FLAG_HIDDEN) { if(f & LV_OBJ_FLAG_HIDDEN) {
@ -351,7 +354,10 @@ void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t f)
lv_obj_update_layout(lv_obj_get_parent(obj), obj); lv_obj_update_layout(lv_obj_get_parent(obj), obj);
} }
} }
if(f & (LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING)) lv_signal_send(lv_obj_get_parent(obj), LV_SIGNAL_CHILD_CHG, obj);
if((was_on_layout != lv_obj_is_layout_positioned(obj)) || (f & (LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2))) {
lv_obj_update_layout(lv_obj_get_parent(obj), obj);
}
} }
void lv_obj_add_state(lv_obj_t * obj, lv_state_t state) void lv_obj_add_state(lv_obj_t * obj, lv_state_t state)

View File

@ -153,7 +153,7 @@ void lv_obj_set_layout(lv_obj_t * obj, const void * layout)
bool lv_obj_is_layout_positioned(const lv_obj_t * obj) bool lv_obj_is_layout_positioned(const lv_obj_t * obj)
{ {
if(lv_obj_has_flag_any(obj, LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING)) return false; if(lv_obj_has_flag_any(obj, LV_OBJ_FLAG_HIDDEN | LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING)) return false;
lv_obj_t * parent = lv_obj_get_parent(obj); lv_obj_t * parent = lv_obj_get_parent(obj);
if(parent == NULL) return false; if(parent == NULL) return false;