feat(event) add LV_EVENT_LAYOUT_CHANGED and fix tabview's tab position on resize
This commit is contained in:
@@ -14,9 +14,9 @@ void lv_example_obj_1(void)
|
|||||||
lv_style_set_shadow_spread(&style_shadow, 5);
|
lv_style_set_shadow_spread(&style_shadow, 5);
|
||||||
lv_style_set_shadow_color(&style_shadow, lv_palette_main(LV_PALETTE_BLUE));
|
lv_style_set_shadow_color(&style_shadow, lv_palette_main(LV_PALETTE_BLUE));
|
||||||
|
|
||||||
lv_obj_t * obj3;
|
lv_obj_t * obj2;
|
||||||
obj3 = lv_obj_create(lv_scr_act());
|
obj2 = lv_obj_create(lv_scr_act());
|
||||||
lv_obj_add_style(obj3, &style_shadow, 0);
|
lv_obj_add_style(obj2, &style_shadow, 0);
|
||||||
lv_obj_align(obj3, LV_ALIGN_CENTER, 60, 30);
|
lv_obj_align(obj2, LV_ALIGN_CENTER, 60, 30);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -73,8 +73,9 @@ typedef enum {
|
|||||||
/** Other events*/
|
/** Other events*/
|
||||||
LV_EVENT_DELETE, /**< Object is being deleted*/
|
LV_EVENT_DELETE, /**< Object is being deleted*/
|
||||||
LV_EVENT_CHILD_CHANGED, /**< Child was removed/added*/
|
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_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_GET_SELF_SIZE, /**< Get the internal size of a widget*/
|
||||||
|
|
||||||
_LV_EVENT_LAST /** Number of default events*/
|
_LV_EVENT_LAST /** Number of default events*/
|
||||||
|
|||||||
@@ -215,6 +215,8 @@ static void flex_update(lv_obj_t * cont, void * user_data)
|
|||||||
lv_obj_refr_size(cont);
|
lv_obj_refr_size(cont);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lv_event_send(cont, LV_EVENT_LAYOUT_CHANGED, NULL);
|
||||||
|
|
||||||
LV_TRACE_LAYOUT("finished");
|
LV_TRACE_LAYOUT("finished");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -182,6 +182,8 @@ static void grid_update(lv_obj_t * cont, void * user_data)
|
|||||||
lv_obj_refr_size(cont);
|
lv_obj_refr_size(cont);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lv_event_send(cont, LV_EVENT_LAYOUT_CHANGED, NULL);
|
||||||
|
|
||||||
LV_TRACE_LAYOUT("finished");
|
LV_TRACE_LAYOUT("finished");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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_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_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);
|
lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_OFF);
|
||||||
|
|
||||||
switch(tabview->tab_pos) {
|
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_event_code_t code = lv_event_get_code(e);
|
||||||
lv_obj_t * target = lv_event_get_target(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);
|
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);
|
lv_event_send(tv, LV_EVENT_VALUE_CHANGED, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cont_scroll_end_event_cb(lv_event_t * e)
|
static void cont_scroll_end_event_cb(lv_event_t * e)
|
||||||
{
|
{
|
||||||
lv_obj_t * cont = lv_event_get_target(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);
|
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_coord_t w = lv_obj_get_content_width(cont);
|
||||||
lv_obj_get_scroll_end(cont, &p);
|
lv_coord_t t = (p.x + w/ 2) / w;
|
||||||
|
if(t < 0) t = 0;
|
||||||
lv_coord_t w = lv_obj_get_content_width(cont);
|
lv_tabview_set_act(tv, t, LV_ANIM_ON);
|
||||||
lv_coord_t t = (p.x + w/ 2) / w;
|
lv_event_send(tv, LV_EVENT_VALUE_CHANGED, NULL);
|
||||||
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*/
|
#endif /*LV_USE_TABVIEW*/
|
||||||
|
|||||||
Reference in New Issue
Block a user