diff --git a/examples/widgets/obj/lv_example_obj_1.c b/examples/widgets/obj/lv_example_obj_1.c index 5cc7571da..9c5ff7a05 100644 --- a/examples/widgets/obj/lv_example_obj_1.c +++ b/examples/widgets/obj/lv_example_obj_1.c @@ -14,9 +14,9 @@ void lv_example_obj_1(void) lv_style_set_shadow_spread(&style_shadow, 5); lv_style_set_shadow_color(&style_shadow, lv_palette_main(LV_PALETTE_BLUE)); - lv_obj_t * obj3; - obj3 = lv_obj_create(lv_scr_act()); - lv_obj_add_style(obj3, &style_shadow, 0); - lv_obj_align(obj3, LV_ALIGN_CENTER, 60, 30); + lv_obj_t * obj2; + obj2 = lv_obj_create(lv_scr_act()); + lv_obj_add_style(obj2, &style_shadow, 0); + lv_obj_align(obj2, LV_ALIGN_CENTER, 60, 30); } #endif diff --git a/src/core/lv_event.h b/src/core/lv_event.h index 3dde99220..689cbc4bc 100644 --- a/src/core/lv_event.h +++ b/src/core/lv_event.h @@ -73,8 +73,9 @@ typedef enum { /** Other events*/ LV_EVENT_DELETE, /**< Object is being deleted*/ LV_EVENT_CHILD_CHANGED, /**< Child was removed/added*/ - LV_EVENT_SIZE_CHANGED, /**< Object coordinates/size have changed*/ + LV_EVENT_SIZE_CHANGED, /**< Object coordinates/size have changed*/ LV_EVENT_STYLE_CHANGED, /**< Object's style has changed*/ + LV_EVENT_LAYOUT_CHANGED, /**< The children position has changed due to a layout recalculation*/ LV_EVENT_GET_SELF_SIZE, /**< Get the internal size of a widget*/ _LV_EVENT_LAST /** Number of default events*/ diff --git a/src/extra/layouts/flex/lv_flex.c b/src/extra/layouts/flex/lv_flex.c index 9cb91c3ac..becced659 100644 --- a/src/extra/layouts/flex/lv_flex.c +++ b/src/extra/layouts/flex/lv_flex.c @@ -215,6 +215,8 @@ static void flex_update(lv_obj_t * cont, void * user_data) lv_obj_refr_size(cont); } + lv_event_send(cont, LV_EVENT_LAYOUT_CHANGED, NULL); + LV_TRACE_LAYOUT("finished"); } diff --git a/src/extra/layouts/grid/lv_grid.c b/src/extra/layouts/grid/lv_grid.c index c64d455e3..84a1d8fce 100644 --- a/src/extra/layouts/grid/lv_grid.c +++ b/src/extra/layouts/grid/lv_grid.c @@ -182,6 +182,8 @@ static void grid_update(lv_obj_t * cont, void * user_data) lv_obj_refr_size(cont); } + lv_event_send(cont, LV_EVENT_LAYOUT_CHANGED, NULL); + LV_TRACE_LAYOUT("finished"); } diff --git a/src/extra/widgets/tabview/lv_tabview.c b/src/extra/widgets/tabview/lv_tabview.c index 420b98904..b49a72103 100644 --- a/src/extra/widgets/tabview/lv_tabview.c +++ b/src/extra/widgets/tabview/lv_tabview.c @@ -193,7 +193,7 @@ static void lv_tabview_constructor(const lv_obj_class_t * class_p, lv_obj_t * ob lv_obj_add_event_cb(btnm, btns_value_changed_event_cb, LV_EVENT_VALUE_CHANGED, NULL); lv_obj_add_flag(btnm, LV_OBJ_FLAG_EVENT_BUBBLE); - lv_obj_add_event_cb(cont, cont_scroll_end_event_cb, LV_EVENT_SCROLL_END, NULL); + lv_obj_add_event_cb(cont, cont_scroll_end_event_cb, LV_EVENT_ALL, NULL); lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_OFF); switch(tabview->tab_pos) { @@ -247,7 +247,7 @@ static void lv_tabview_event(const lv_obj_class_t * class_p, lv_event_t * e) lv_event_code_t code = lv_event_get_code(e); lv_obj_t * target = lv_event_get_target(e); - if(code == LV_EVENT_SIZE_CHANGED || e == LV_EVENT_CHILD_CHANGED) { + if(code == LV_EVENT_SIZE_CHANGED) { lv_tabview_set_act(target, lv_tabview_get_tab_act(target), LV_ANIM_OFF); } } @@ -263,19 +263,25 @@ static void btns_value_changed_event_cb(lv_event_t * e) lv_event_send(tv, LV_EVENT_VALUE_CHANGED, NULL); } + static void cont_scroll_end_event_cb(lv_event_t * e) { lv_obj_t * cont = lv_event_get_target(e); + lv_event_code_t code = lv_event_get_code(e); lv_obj_t * tv = lv_obj_get_parent(cont); + if(code == LV_EVENT_LAYOUT_CHANGED) { + lv_tabview_set_act(tv, lv_tabview_get_tab_act(tv), LV_ANIM_OFF); + } + else if(code == LV_EVENT_SCROLL_END) { + lv_point_t p; + lv_obj_get_scroll_end(cont, &p); - lv_point_t p; - lv_obj_get_scroll_end(cont, &p); - - lv_coord_t w = lv_obj_get_content_width(cont); - lv_coord_t t = (p.x + w/ 2) / w; - if(t < 0) t = 0; - lv_tabview_set_act(tv, t, LV_ANIM_ON); - lv_event_send(tv, LV_EVENT_VALUE_CHANGED, NULL); + lv_coord_t w = lv_obj_get_content_width(cont); + lv_coord_t t = (p.x + w/ 2) / w; + if(t < 0) t = 0; + lv_tabview_set_act(tv, t, LV_ANIM_ON); + lv_event_send(tv, LV_EVENT_VALUE_CHANGED, NULL); + } } #endif /*LV_USE_TABVIEW*/