mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
Merge pull request #1027 from seyyah/dev-6.0
Added tab button position LEFT and RIGHT
This commit is contained in:
commit
b4a632116e
@ -113,17 +113,18 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
|
|||||||
lv_obj_set_size(new_tabview, lv_obj_get_width_fit(lv_obj_get_parent(new_tabview)),
|
lv_obj_set_size(new_tabview, lv_obj_get_width_fit(lv_obj_get_parent(new_tabview)),
|
||||||
lv_obj_get_height_fit(lv_obj_get_parent(new_tabview)));
|
lv_obj_get_height_fit(lv_obj_get_parent(new_tabview)));
|
||||||
|
|
||||||
|
ext->content = lv_cont_create(new_tabview, NULL);
|
||||||
ext->btns = lv_btnm_create(new_tabview, NULL);
|
ext->btns = lv_btnm_create(new_tabview, NULL);
|
||||||
|
ext->indic = lv_obj_create(ext->btns, NULL);
|
||||||
|
|
||||||
lv_obj_set_height(ext->btns, 3 * LV_DPI / 4);
|
lv_obj_set_height(ext->btns, 3 * LV_DPI / 4);
|
||||||
lv_btnm_set_map(ext->btns, tab_def);
|
lv_btnm_set_map(ext->btns, tab_def);
|
||||||
lv_obj_set_event_cb(ext->btns, tab_btnm_event_cb);
|
lv_obj_set_event_cb(ext->btns, tab_btnm_event_cb);
|
||||||
|
|
||||||
ext->indic = lv_obj_create(ext->btns, NULL);
|
|
||||||
lv_obj_set_width(ext->indic, LV_DPI);
|
lv_obj_set_width(ext->indic, LV_DPI);
|
||||||
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
|
||||||
lv_obj_set_click(ext->indic, false);
|
lv_obj_set_click(ext->indic, false);
|
||||||
|
|
||||||
ext->content = lv_cont_create(new_tabview, NULL);
|
|
||||||
lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
|
lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
|
||||||
lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
|
lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
|
||||||
lv_cont_set_style(ext->content, &lv_style_transp_tight);
|
lv_cont_set_style(ext->content, &lv_style_transp_tight);
|
||||||
@ -232,12 +233,43 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
|
|||||||
strcpy(name_dm, name);
|
strcpy(name_dm, name);
|
||||||
|
|
||||||
ext->tab_cnt++;
|
ext->tab_cnt++;
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt + 1));
|
ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt + 1));
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt * 2));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
lv_mem_assert(ext->tab_name_ptr);
|
lv_mem_assert(ext->tab_name_ptr);
|
||||||
if(ext->tab_name_ptr == NULL) return NULL;
|
if(ext->tab_name_ptr == NULL) return NULL;
|
||||||
|
|
||||||
|
/* FIXME: It is not possible yet to switch tab button position from/to top/bottom from/to left/right at runtime.
|
||||||
|
* Method: clean extra \n when switch from LV_TABVIEW_BTNS_POS_LEFT or LV_TABVIEW_BTNS_POS_RIGHT
|
||||||
|
* to LV_TABVIEW_BTNS_POS_TOP or LV_TABVIEW_BTNS_POS_BOTTOM.
|
||||||
|
*/
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
ext->tab_name_ptr[ext->tab_cnt - 1] = name_dm;
|
ext->tab_name_ptr[ext->tab_cnt - 1] = name_dm;
|
||||||
ext->tab_name_ptr[ext->tab_cnt] = "";
|
ext->tab_name_ptr[ext->tab_cnt] = "";
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
if(ext->tab_cnt == 1) {
|
||||||
|
ext->tab_name_ptr[0] = name_dm;
|
||||||
|
ext->tab_name_ptr[1] = "";
|
||||||
|
} else {
|
||||||
|
ext->tab_name_ptr[ext->tab_cnt * 2 - 3] = "\n";
|
||||||
|
ext->tab_name_ptr[ext->tab_cnt * 2 - 2] = name_dm;
|
||||||
|
ext->tab_name_ptr[ext->tab_cnt * 2 - 1] = "";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* The button matrix's map still points to the old `tab_name_ptr` which might be freed by
|
/* The button matrix's map still points to the old `tab_name_ptr` which might be freed by
|
||||||
* `lv_mem_realloc`. So make its current map invalid*/
|
* `lv_mem_realloc`. So make its current map invalid*/
|
||||||
@ -249,21 +281,41 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
|
|||||||
|
|
||||||
/*Modify the indicator size*/
|
/*Modify the indicator size*/
|
||||||
const lv_style_t * style_tabs = lv_obj_get_style(ext->btns);
|
const lv_style_t * style_tabs = lv_obj_get_style(ext->btns);
|
||||||
lv_coord_t indic_width =
|
lv_coord_t indic_size;
|
||||||
|
lv_coord_t max_h, btn_h, act_y;
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
indic_size =
|
||||||
(lv_obj_get_width(tabview) - style_tabs->body.padding.inner * (ext->tab_cnt - 1) -
|
(lv_obj_get_width(tabview) - style_tabs->body.padding.inner * (ext->tab_cnt - 1) -
|
||||||
style_tabs->body.padding.left - style_tabs->body.padding.right) /
|
style_tabs->body.padding.left - style_tabs->body.padding.right) /
|
||||||
ext->tab_cnt;
|
ext->tab_cnt;
|
||||||
lv_obj_set_width(ext->indic, indic_width);
|
lv_obj_set_width(ext->indic, indic_size);
|
||||||
lv_obj_set_x(ext->indic, indic_width * ext->tab_cur +
|
lv_obj_set_x(ext->indic, indic_size * ext->tab_cur +
|
||||||
style_tabs->body.padding.inner * ext->tab_cur +
|
style_tabs->body.padding.inner * ext->tab_cur +
|
||||||
style_tabs->body.padding.left);
|
style_tabs->body.padding.left);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
max_h = lv_obj_get_height(ext->btns) - style_tabs->body.padding.top - style_tabs->body.padding.bottom;
|
||||||
|
btn_h = max_h - ((ext->tab_cnt - 1) * style_tabs->body.padding.inner);
|
||||||
|
btn_h = btn_h / ext->tab_cnt;
|
||||||
|
btn_h--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
|
||||||
|
act_y = style_tabs->body.padding.top + ext->tab_cur * (btn_h + style_tabs->body.padding.inner);
|
||||||
|
|
||||||
|
lv_obj_set_height(ext->indic, btn_h);
|
||||||
|
lv_obj_set_y(ext->indic, act_y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/*Set the first btn as active*/
|
/*Set the first btn as active*/
|
||||||
if(ext->tab_cnt == 1) {
|
if(ext->tab_cnt == 1) {
|
||||||
ext->tab_cur = 0;
|
ext->tab_cur = 0;
|
||||||
tabview_realign(tabview); /*To set the proper btns height*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tabview_realign(tabview); /*Set the size of the pages, tab buttons and indicator*/
|
||||||
|
|
||||||
lv_tabview_set_tab_act(tabview, ext->tab_cur, false);
|
lv_tabview_set_tab_act(tabview, ext->tab_cur, false);
|
||||||
|
|
||||||
return h;
|
return h;
|
||||||
@ -298,8 +350,27 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, bool anim_en)
|
|||||||
|
|
||||||
ext->tab_cur = id;
|
ext->tab_cur = id;
|
||||||
|
|
||||||
lv_coord_t cont_x = -(lv_obj_get_width(tabview) * id + style->body.padding.inner * id +
|
lv_coord_t cont_x;
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
cont_x = -(lv_obj_get_width(tabview) * id + style->body.padding.inner * id +
|
||||||
style->body.padding.left);
|
style->body.padding.left);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
cont_x = -((lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns)) * id +
|
||||||
|
style->body.padding.inner * id +
|
||||||
|
style->body.padding.left) +
|
||||||
|
lv_obj_get_width(ext->btns);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
cont_x = -((lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns)) * id +
|
||||||
|
style->body.padding.inner * id +
|
||||||
|
style->body.padding.left);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(ext->anim_time == 0 || anim_en == false) {
|
if(ext->anim_time == 0 || anim_en == false) {
|
||||||
lv_obj_set_x(ext->content, cont_x);
|
lv_obj_set_x(ext->content, cont_x);
|
||||||
} else {
|
} else {
|
||||||
@ -322,20 +393,54 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, bool anim_en)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*Move the indicator*/
|
/*Move the indicator*/
|
||||||
lv_coord_t indic_width = lv_obj_get_width(ext->indic);
|
|
||||||
const lv_style_t * tabs_style = lv_obj_get_style(ext->btns);
|
const lv_style_t * tabs_style = lv_obj_get_style(ext->btns);
|
||||||
lv_coord_t indic_x =
|
lv_coord_t indic_size;
|
||||||
indic_width * id + tabs_style->body.padding.inner * id + tabs_style->body.padding.left;
|
lv_coord_t indic_pos;
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
indic_size = lv_obj_get_width(ext->indic);
|
||||||
|
indic_pos = indic_size * id + tabs_style->body.padding.inner * id + tabs_style->body.padding.left;
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
indic_size = lv_obj_get_height(ext->indic);
|
||||||
|
indic_pos = tabs_style->body.padding.top + id * (indic_size + tabs_style->body.padding.inner);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if(ext->anim_time == 0 || anim_en == false) {
|
if(ext->anim_time == 0 || anim_en == false) {
|
||||||
lv_obj_set_x(ext->indic, indic_x);
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
lv_obj_set_x(ext->indic, indic_pos);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
lv_obj_set_y(ext->indic, indic_pos);
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
#if LV_USE_ANIMATION
|
#if LV_USE_ANIMATION
|
||||||
lv_anim_t a;
|
lv_anim_t a;
|
||||||
a.var = ext->indic;
|
a.var = ext->indic;
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
a.start = lv_obj_get_x(ext->indic);
|
a.start = lv_obj_get_x(ext->indic);
|
||||||
a.end = indic_x;
|
a.end = indic_pos;
|
||||||
a.fp = (lv_anim_fp_t)lv_obj_set_x;
|
a.fp = (lv_anim_fp_t)lv_obj_set_x;
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
a.start = lv_obj_get_y(ext->indic);
|
||||||
|
a.end = indic_pos;
|
||||||
|
a.fp = (lv_anim_fp_t)lv_obj_set_y;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
a.path = lv_anim_path_linear;
|
a.path = lv_anim_path_linear;
|
||||||
a.end_cb = NULL;
|
a.end_cb = NULL;
|
||||||
a.act_time = 0;
|
a.act_time = 0;
|
||||||
@ -407,7 +512,18 @@ void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, const lv_
|
|||||||
break;
|
break;
|
||||||
case LV_TABVIEW_STYLE_INDIC:
|
case LV_TABVIEW_STYLE_INDIC:
|
||||||
lv_obj_set_style(ext->indic, style);
|
lv_obj_set_style(ext->indic, style);
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
lv_obj_set_height(ext->indic, style->body.padding.inner);
|
lv_obj_set_height(ext->indic, style->body.padding.inner);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
lv_obj_set_width(ext->indic, style->body.padding.inner);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
tabview_realign(tabview);
|
tabview_realign(tabview);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -765,16 +881,33 @@ static void tabpage_pressing_handler(lv_obj_t * tabview, lv_obj_t * tabpage)
|
|||||||
ext->point_last.y = point_act.y;
|
ext->point_last.y = point_act.y;
|
||||||
|
|
||||||
/*Move the indicator*/
|
/*Move the indicator*/
|
||||||
lv_coord_t indic_width = lv_obj_get_width(ext->indic);
|
|
||||||
const lv_style_t * tabs_style = lv_obj_get_style(ext->btns);
|
const lv_style_t * tabs_style = lv_obj_get_style(ext->btns);
|
||||||
const lv_style_t * indic_style = lv_obj_get_style(ext->indic);
|
lv_coord_t indic_size;
|
||||||
lv_coord_t p = ((tabpage->coords.x1 - tabview->coords.x1) *
|
lv_coord_t p;
|
||||||
(indic_width + tabs_style->body.padding.inner)) /
|
lv_coord_t indic_y;
|
||||||
|
const lv_style_t * indic_style;
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
indic_size = lv_obj_get_width(ext->indic);
|
||||||
|
indic_style = lv_obj_get_style(ext->indic);
|
||||||
|
p = ((tabpage->coords.x1 - tabview->coords.x1) *
|
||||||
|
(indic_size + tabs_style->body.padding.inner)) /
|
||||||
lv_obj_get_width(tabview);
|
lv_obj_get_width(tabview);
|
||||||
|
|
||||||
lv_obj_set_x(ext->indic, indic_width * ext->tab_cur +
|
lv_obj_set_x(ext->indic, indic_size * ext->tab_cur +
|
||||||
tabs_style->body.padding.inner * ext->tab_cur +
|
tabs_style->body.padding.inner * ext->tab_cur +
|
||||||
indic_style->body.padding.left - p);
|
indic_style->body.padding.left - p);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
indic_size = lv_obj_get_height(ext->indic);
|
||||||
|
indic_y = tabs_style->body.padding.top +
|
||||||
|
ext->tab_cur * (indic_size + tabs_style->body.padding.inner);
|
||||||
|
lv_obj_set_y(ext->indic, indic_y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -859,30 +992,114 @@ static void tabview_realign(lv_obj_t * tabview)
|
|||||||
const lv_style_t * style_btn_bg = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_BG);
|
const lv_style_t * style_btn_bg = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_BG);
|
||||||
const lv_style_t * style_btn_rel = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_REL);
|
const lv_style_t * style_btn_rel = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_REL);
|
||||||
|
|
||||||
/*Set the indicator widths*/
|
/*Set the indicator width/height*/
|
||||||
lv_coord_t indic_width =
|
lv_coord_t indic_size;
|
||||||
|
lv_coord_t max_h;
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
indic_size =
|
||||||
(lv_obj_get_width(tabview) - style_btn_bg->body.padding.inner * (ext->tab_cnt - 1) -
|
(lv_obj_get_width(tabview) - style_btn_bg->body.padding.inner * (ext->tab_cnt - 1) -
|
||||||
style_btn_bg->body.padding.left - style_btn_bg->body.padding.right) /
|
style_btn_bg->body.padding.left - style_btn_bg->body.padding.right) /
|
||||||
ext->tab_cnt;
|
ext->tab_cnt;
|
||||||
lv_obj_set_width(ext->indic, indic_width);
|
lv_obj_set_width(ext->indic, indic_size);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
|
||||||
|
|
||||||
/*Set the tabs height*/
|
max_h = lv_obj_get_height(ext->btns) - style_btn_bg->body.padding.top - style_btn_bg->body.padding.bottom;
|
||||||
lv_coord_t btns_height = lv_font_get_height(style_btn_rel->text.font) +
|
indic_size = max_h - ((ext->tab_cnt - 1) * style_btn_bg->body.padding.inner);
|
||||||
|
indic_size = indic_size / ext->tab_cnt;
|
||||||
|
indic_size--; /*-1 because e.g. height = 100 means 101 pixels (0..100)*/
|
||||||
|
lv_obj_set_height(ext->indic, indic_size);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Set the tabs height/width*/
|
||||||
|
lv_coord_t btns_size;
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
btns_size = lv_font_get_height(style_btn_rel->text.font) +
|
||||||
style_btn_rel->body.padding.top +
|
style_btn_rel->body.padding.top +
|
||||||
style_btn_rel->body.padding.bottom +
|
style_btn_rel->body.padding.bottom +
|
||||||
style_btn_bg->body.padding.top + style_btn_bg->body.padding.bottom;
|
style_btn_bg->body.padding.top + style_btn_bg->body.padding.bottom;
|
||||||
lv_obj_set_height(ext->btns, btns_height);
|
lv_obj_set_height(ext->btns, btns_size);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
btns_size = lv_font_get_width(style_btn_rel->text.font, 0x0041) + // 'A'
|
||||||
|
style_btn_rel->body.padding.left +
|
||||||
|
style_btn_rel->body.padding.right +
|
||||||
|
style_btn_bg->body.padding.left + style_btn_bg->body.padding.right;
|
||||||
|
lv_obj_set_width(ext->btns, btns_size);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
|
lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
lv_obj_set_height(ext->content, lv_obj_get_height(tabview));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch(ext->btns_pos) {
|
switch(ext->btns_pos) {
|
||||||
case LV_TABVIEW_BTNS_POS_TOP:
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||||
lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
||||||
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
|
||||||
|
|
||||||
|
lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
|
||||||
|
lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
|
||||||
|
lv_obj_set_height(ext->content,
|
||||||
|
lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
|
||||||
|
|
||||||
|
// lv_obj_set_height(ext->btns, 3 * LV_DPI / 4);
|
||||||
|
|
||||||
|
// lv_obj_set_width(ext->indic, LV_DPI);
|
||||||
break;
|
break;
|
||||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||||
lv_obj_align(ext->btns, ext->content, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
lv_obj_align(ext->btns, ext->content, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
||||||
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||||
|
|
||||||
|
lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
|
||||||
|
lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
|
||||||
|
lv_obj_set_height(ext->content,
|
||||||
|
lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||||
|
lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, lv_obj_get_width(ext->btns), 0);
|
||||||
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
|
||||||
|
|
||||||
|
lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
|
||||||
|
lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
|
||||||
|
lv_obj_set_width(ext->content,
|
||||||
|
lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns));
|
||||||
|
|
||||||
|
lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
|
||||||
|
lv_obj_set_width(ext->indic, style_btn_bg->body.padding.inner);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
|
||||||
|
lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||||
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||||
|
|
||||||
|
lv_cont_set_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_NONE);
|
||||||
|
lv_cont_set_layout(ext->content, LV_LAYOUT_ROW_T);
|
||||||
|
lv_obj_set_width(ext->content,
|
||||||
|
lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns));
|
||||||
|
|
||||||
|
lv_obj_set_height(ext->btns, lv_obj_get_height(tabview));
|
||||||
|
lv_obj_set_width(ext->indic, style_btn_bg->body.padding.inner);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -891,13 +1108,43 @@ static void tabview_realign(lv_obj_t * tabview)
|
|||||||
while(pages != NULL) {
|
while(pages != NULL) {
|
||||||
if(lv_obj_get_signal_cb(pages) ==
|
if(lv_obj_get_signal_cb(pages) ==
|
||||||
tabpage_signal) { /*Be sure adjust only the pages (user can other things)*/
|
tabpage_signal) { /*Be sure adjust only the pages (user can other things)*/
|
||||||
lv_obj_set_size(pages, lv_obj_get_width(tabview), lv_obj_get_height(ext->content));
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
lv_obj_set_size(
|
||||||
|
pages,
|
||||||
|
lv_obj_get_width(tabview),
|
||||||
|
lv_obj_get_height(ext->content)
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
lv_obj_set_size(
|
||||||
|
pages,
|
||||||
|
lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns),
|
||||||
|
lv_obj_get_height(ext->content)
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pages = lv_obj_get_child(ext->content, pages);
|
pages = lv_obj_get_child(ext->content, pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!ext->btns_hide) {
|
if(!ext->btns_hide) {
|
||||||
|
switch(ext->btns_pos) {
|
||||||
|
case LV_TABVIEW_BTNS_POS_TOP:
|
||||||
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||||
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||||
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
|
||||||
|
break;
|
||||||
|
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||||
|
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lv_tabview_set_tab_act(tabview, ext->tab_cur, false);
|
lv_tabview_set_tab_act(tabview, ext->tab_cur, false);
|
||||||
|
@ -45,6 +45,8 @@ extern "C" {
|
|||||||
enum {
|
enum {
|
||||||
LV_TABVIEW_BTNS_POS_TOP,
|
LV_TABVIEW_BTNS_POS_TOP,
|
||||||
LV_TABVIEW_BTNS_POS_BOTTOM,
|
LV_TABVIEW_BTNS_POS_BOTTOM,
|
||||||
|
LV_TABVIEW_BTNS_POS_LEFT,
|
||||||
|
LV_TABVIEW_BTNS_POS_RIGHT
|
||||||
};
|
};
|
||||||
typedef uint8_t lv_tabview_btns_pos_t;
|
typedef uint8_t lv_tabview_btns_pos_t;
|
||||||
|
|
||||||
@ -66,7 +68,7 @@ typedef struct
|
|||||||
uint8_t drag_hor : 1;
|
uint8_t drag_hor : 1;
|
||||||
uint8_t scroll_ver : 1;
|
uint8_t scroll_ver : 1;
|
||||||
uint8_t btns_hide : 1;
|
uint8_t btns_hide : 1;
|
||||||
lv_tabview_btns_pos_t btns_pos : 1;
|
lv_tabview_btns_pos_t btns_pos : 2;
|
||||||
} lv_tabview_ext_t;
|
} lv_tabview_ext_t;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user