fix(scroll) minor fixes on obj scroll handling
fixes https://github.com/lvgl/lvgl/issues/2547#issuecomment-927242760
This commit is contained in:
@@ -226,6 +226,7 @@ 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);
|
bool was_on_layout = lv_obj_is_layout_positioned(obj);
|
||||||
|
bool scrollable_chg = (f & LV_OBJ_FLAG_SCROLLABLE) != (obj->flags & LV_OBJ_FLAG_SCROLLABLE);
|
||||||
|
|
||||||
if(f & LV_OBJ_FLAG_HIDDEN) lv_obj_invalidate(obj);
|
if(f & LV_OBJ_FLAG_HIDDEN) lv_obj_invalidate(obj);
|
||||||
|
|
||||||
@@ -238,6 +239,13 @@ void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t f)
|
|||||||
if((was_on_layout != lv_obj_is_layout_positioned(obj)) || (f & (LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2))) {
|
if((was_on_layout != lv_obj_is_layout_positioned(obj)) || (f & (LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2))) {
|
||||||
lv_obj_mark_layout_as_dirty(lv_obj_get_parent(obj));
|
lv_obj_mark_layout_as_dirty(lv_obj_get_parent(obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(scrollable_chg) {
|
||||||
|
lv_area_t hor_area, ver_area;
|
||||||
|
lv_obj_get_scrollbar_area(obj, &hor_area, &ver_area);
|
||||||
|
lv_obj_invalidate_area(obj, &hor_area);
|
||||||
|
lv_obj_invalidate_area(obj, &ver_area);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t f)
|
void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t f)
|
||||||
@@ -245,6 +253,7 @@ 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);
|
bool was_on_layout = lv_obj_is_layout_positioned(obj);
|
||||||
|
bool scrollable_chg = (f & LV_OBJ_FLAG_SCROLLABLE) != (obj->flags & LV_OBJ_FLAG_SCROLLABLE);
|
||||||
|
|
||||||
obj->flags &= (~f);
|
obj->flags &= (~f);
|
||||||
|
|
||||||
@@ -258,6 +267,13 @@ void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t f)
|
|||||||
if((was_on_layout != lv_obj_is_layout_positioned(obj)) || (f & (LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2))) {
|
if((was_on_layout != lv_obj_is_layout_positioned(obj)) || (f & (LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2))) {
|
||||||
lv_obj_mark_layout_as_dirty(lv_obj_get_parent(obj));
|
lv_obj_mark_layout_as_dirty(lv_obj_get_parent(obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(scrollable_chg) {
|
||||||
|
lv_area_t hor_area, ver_area;
|
||||||
|
lv_obj_get_scrollbar_area(obj, &hor_area, &ver_area);
|
||||||
|
lv_obj_invalidate_area(obj, &hor_area);
|
||||||
|
lv_obj_invalidate_area(obj, &ver_area);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
@@ -787,6 +803,12 @@ static void lv_obj_event(const lv_obj_class_t * class_p, lv_event_t * e)
|
|||||||
}
|
}
|
||||||
else if(code == LV_EVENT_SCROLL_END) {
|
else if(code == LV_EVENT_SCROLL_END) {
|
||||||
lv_obj_clear_state(obj, LV_STATE_SCROLLED);
|
lv_obj_clear_state(obj, LV_STATE_SCROLLED);
|
||||||
|
if(lv_obj_get_scrollbar_mode(obj) == LV_SCROLLBAR_MODE_ACTIVE) {
|
||||||
|
lv_area_t hor_area, ver_area;
|
||||||
|
lv_obj_get_scrollbar_area(obj, &hor_area, &ver_area);
|
||||||
|
lv_obj_invalidate_area(obj, &hor_area);
|
||||||
|
lv_obj_invalidate_area(obj, &ver_area);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(code == LV_EVENT_DEFOCUSED) {
|
else if(code == LV_EVENT_DEFOCUSED) {
|
||||||
lv_obj_clear_state(obj, LV_STATE_FOCUSED | LV_STATE_EDITED | LV_STATE_FOCUS_KEY);
|
lv_obj_clear_state(obj, LV_STATE_FOCUSED | LV_STATE_EDITED | LV_STATE_FOCUS_KEY);
|
||||||
@@ -814,11 +836,6 @@ static void lv_obj_event(const lv_obj_class_t * class_p, lv_event_t * e)
|
|||||||
lv_obj_mark_layout_as_dirty(obj);
|
lv_obj_mark_layout_as_dirty(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(code == LV_EVENT_SCROLL_END) {
|
|
||||||
if(lv_obj_get_scrollbar_mode(obj) == LV_SCROLLBAR_MODE_ACTIVE) {
|
|
||||||
lv_obj_invalidate(obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(code == LV_EVENT_REFR_EXT_DRAW_SIZE) {
|
else if(code == LV_EVENT_REFR_EXT_DRAW_SIZE) {
|
||||||
lv_coord_t * s = lv_event_get_param(e);
|
lv_coord_t * s = lv_event_get_param(e);
|
||||||
lv_coord_t d = lv_obj_calculate_ext_draw_size(obj, LV_PART_MAIN);
|
lv_coord_t d = lv_obj_calculate_ext_draw_size(obj, LV_PART_MAIN);
|
||||||
|
|||||||
Reference in New Issue
Block a user