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_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
|
||||
|
||||
@@ -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*/
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -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*/
|
||||
|
||||
Reference in New Issue
Block a user