Merge branch 'dev-5.3' into btnm_recolor

This commit is contained in:
Gabor Kiss-Vamosi
2018-12-16 11:33:42 +01:00
committed by GitHub
3 changed files with 53 additions and 21 deletions
+35 -2
View File
@@ -204,7 +204,10 @@ void lv_group_focus_next(lv_group_t * group)
if(group->obj_focus == NULL) obj_next = lv_ll_get_head(&group->obj_ll); if(group->obj_focus == NULL) obj_next = lv_ll_get_head(&group->obj_ll);
else obj_next = lv_ll_get_next(&group->obj_ll, group->obj_focus); else obj_next = lv_ll_get_next(&group->obj_ll, group->obj_focus);
if(obj_next == NULL) obj_next = lv_ll_get_head(&group->obj_ll); if(obj_next == NULL) {
if(group->wrap) obj_next = lv_ll_get_head(&group->obj_ll);
else obj_next = lv_ll_get_tail(&group->obj_ll);
}
group->obj_focus = obj_next; group->obj_focus = obj_next;
if(group->obj_focus) { if(group->obj_focus) {
@@ -232,7 +235,10 @@ void lv_group_focus_prev(lv_group_t * group)
if(group->obj_focus == NULL) obj_next = lv_ll_get_tail(&group->obj_ll); if(group->obj_focus == NULL) obj_next = lv_ll_get_tail(&group->obj_ll);
else obj_next = lv_ll_get_prev(&group->obj_ll, group->obj_focus); else obj_next = lv_ll_get_prev(&group->obj_ll, group->obj_focus);
if(obj_next == NULL) obj_next = lv_ll_get_tail(&group->obj_ll); if(obj_next == NULL) {
if(group->wrap) obj_next = lv_ll_get_tail(&group->obj_ll);
else obj_next = lv_ll_get_head(&group->obj_ll);
}
group->obj_focus = obj_next; group->obj_focus = obj_next;
if(group->obj_focus != NULL) { if(group->obj_focus != NULL) {
@@ -334,10 +340,26 @@ void lv_group_set_refocus_policy(lv_group_t * group, lv_group_refocus_policy_t p
} }
static void lv_group_refocus(lv_group_t *g) { static void lv_group_refocus(lv_group_t *g) {
/*Refocus must temporarily allow wrapping to work correctly*/
uint8_t temp_wrap = g->wrap;
g->wrap = 1;
if(g->refocus_policy == LV_GROUP_REFOCUS_POLICY_NEXT) if(g->refocus_policy == LV_GROUP_REFOCUS_POLICY_NEXT)
lv_group_focus_next(g); lv_group_focus_next(g);
else if(g->refocus_policy == LV_GROUP_REFOCUS_POLICY_PREV) else if(g->refocus_policy == LV_GROUP_REFOCUS_POLICY_PREV)
lv_group_focus_prev(g); lv_group_focus_prev(g);
/*Restore wrap property*/
g->wrap = temp_wrap;
}
/**
* Set whether focus next/prev will allow wrapping from first->last or last->first.
* @param group pointer to group
* @param en: true: enable `click_focus`
*/
void lv_group_set_wrap(lv_group_t * group, bool en)
{
group->wrap = en ? 1 : 0;
} }
/** /**
@@ -428,6 +450,17 @@ bool lv_group_get_click_focus(const lv_group_t * group)
return group->click_focus ? true : false; return group->click_focus ? true : false;
} }
/**
* Get whether focus next/prev will allow wrapping from first->last or last->first object.
* @param group pointer to group
* @param en: true: wrapping enabled; false: wrapping disabled
*/
bool lv_group_get_wrap(lv_group_t * group)
{
if(!group) return false;
return group->wrap ? true : false;
}
/********************** /**********************
* STATIC FUNCTIONS * STATIC FUNCTIONS
**********************/ **********************/
+14
View File
@@ -58,6 +58,7 @@ typedef struct _lv_group_t
uint8_t editing :1; /*1: Edit mode, 0: Navigate mode*/ uint8_t editing :1; /*1: Edit mode, 0: Navigate mode*/
uint8_t click_focus :1; /*1: If an object in a group is clicked by an indev then it will be focused */ uint8_t click_focus :1; /*1: If an object in a group is clicked by an indev then it will be focused */
uint8_t refocus_policy :1; /*1: Focus prev if focused on deletion. 0: Focus prev if focused on deletion.*/ uint8_t refocus_policy :1; /*1: Focus prev if focused on deletion. 0: Focus prev if focused on deletion.*/
uint8_t wrap :1; /*1: Focus next/prev can wrap at end of list. 0: Focus next/prev stops at end of list.*/
} lv_group_t; } lv_group_t;
typedef enum _lv_group_refocus_policy_t { typedef enum _lv_group_refocus_policy_t {
@@ -168,6 +169,13 @@ void lv_group_set_editing(lv_group_t * group, bool edit);
*/ */
void lv_group_set_click_focus(lv_group_t * group, bool en); void lv_group_set_click_focus(lv_group_t * group, bool en);
/**
* Set whether focus next/prev will allow wrapping from first->last or last->first object.
* @param group pointer to group
* @param en: true: wrapping enabled; false: wrapping disabled
*/
void lv_group_set_wrap(lv_group_t * group, bool en);
/** /**
* Modify a style with the set 'style_mod' function. The input style remains unchanged. * Modify a style with the set 'style_mod' function. The input style remains unchanged.
* @param group pointer to group * @param group pointer to group
@@ -218,6 +226,12 @@ bool lv_group_get_editing(const lv_group_t * group);
*/ */
bool lv_group_get_click_focus(const lv_group_t * group); bool lv_group_get_click_focus(const lv_group_t * group);
/**
* Get whether focus next/prev will allow wrapping from first->last or last->first object.
* @param group pointer to group
* @param en: true: wrapping enabled; false: wrapping disabled
*/
bool lv_group_get_wrap(lv_group_t * group);
/********************** /**********************
* MACROS * MACROS
-15
View File
@@ -453,7 +453,6 @@ static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mo
lv_area_t area_tmp; lv_area_t area_tmp;
lv_coord_t btn_w; lv_coord_t btn_w;
lv_coord_t btn_h; lv_coord_t btn_h;
bool border_mod = false;
uint16_t btn_i = 0; uint16_t btn_i = 0;
uint16_t txt_i = 0; uint16_t txt_i = 0;
@@ -487,21 +486,8 @@ static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mo
else if(btn_i == ext->btn_id_pr && btn_i == ext->btn_id_tgl) btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_TGL_PR); else if(btn_i == ext->btn_id_pr && btn_i == ext->btn_id_tgl) btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_TGL_PR);
else btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_REL); /*Not possible option, just to be sure*/ else btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_REL); /*Not possible option, just to be sure*/
/*On the right buttons clear the border if only right borders are drawn*/
if(ext->map_p[txt_i + 1][0] == '\0' || ext->map_p[txt_i + 1][0] == '\n') {
if(btn_style->body.border.part == LV_BORDER_RIGHT) {
btn_style->body.border.part = LV_BORDER_NONE;
border_mod = true;
}
}
lv_draw_rect(&area_tmp, mask, btn_style, opa_scale); lv_draw_rect(&area_tmp, mask, btn_style, opa_scale);
if(border_mod) {
border_mod = false;
btn_style->body.border.part = LV_BORDER_RIGHT;
}
/*Calculate the size of the text*/ /*Calculate the size of the text*/
if(btn_style->glass) btn_style = bg_style; if(btn_style->glass) btn_style = bg_style;
const lv_font_t * font = btn_style->text.font; const lv_font_t * font = btn_style->text.font;
@@ -515,7 +501,6 @@ static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_design_mo
area_tmp.x2 = area_tmp.x1 + txt_size.x; area_tmp.x2 = area_tmp.x1 + txt_size.x;
area_tmp.y2 = area_tmp.y1 + txt_size.y; area_tmp.y2 = area_tmp.y1 + txt_size.y;
lv_draw_label(&area_tmp, mask, btn_style, opa_scale, ext->map_p[txt_i], txt_flag, NULL); lv_draw_label(&area_tmp, mask, btn_style, opa_scale, ext->map_p[txt_i], txt_flag, NULL);
} }
} }