mirror of
https://github.com/lvgl/lvgl.git
synced 2026-06-02 09:37:42 +08:00
Merge branch 'dev-5.3' into btnm_recolor
This commit is contained in:
+35
-2
@@ -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
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user