From 584e88da0828a2a4e453e1f8f00efc13d703420e Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Tue, 31 Dec 2019 06:10:50 +0100 Subject: [PATCH] style: integrate page + fixes + refactoring --- src/lv_core/lv_obj.c | 85 ++++---- src/lv_core/lv_obj.h | 6 +- src/lv_core/lv_style.c | 16 +- src/lv_core/lv_style.h | 30 +-- src/lv_draw/lv_draw_label.c | 27 +-- src/lv_draw/lv_draw_rect.c | 12 +- src/lv_hal/lv_hal_disp.c | 4 +- src/lv_objx/lv_btn.c | 14 +- src/lv_objx/lv_btn.h | 6 +- src/lv_objx/lv_btnm.c | 115 +++++------ src/lv_objx/lv_btnm.h | 18 +- src/lv_objx/lv_cont.c | 58 +++--- src/lv_objx/lv_cont.h | 4 +- src/lv_objx/lv_label.c | 52 ++--- src/lv_objx/lv_label.h | 4 +- src/lv_objx/lv_page.c | 376 +++++++++++++++++------------------- src/lv_objx/lv_page.h | 30 +-- src/lv_objx/lv_tabview.h | 5 - 18 files changed, 409 insertions(+), 453 deletions(-) diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index cb61d0698..e9e524382 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -240,7 +240,7 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy) new_obj->drag = 0; new_obj->drag_throw = 0; new_obj->drag_parent = 0; - new_obj->drag_dir = 0; + new_obj->drag_dir = LV_DRAG_DIR_BOTH; new_obj->hidden = 0; new_obj->top = 0; new_obj->protect = LV_PROTECT_NONE; @@ -260,9 +260,9 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy) lv_style_dsc_init(&new_obj->style_dsc); if(parent != NULL) { - lv_obj_add_style_class(new_obj, LV_OBJ_STYLE_MAIN, &lv_style_panel); + lv_obj_add_style_class(new_obj, LV_OBJ_PART_MAIN, &lv_style_panel); } else { - lv_obj_update_style_cache(new_obj, LV_OBJ_STYLE_MAIN); + lv_obj_update_style_cache(new_obj, LV_OBJ_PART_MAIN); } @@ -1428,7 +1428,7 @@ void lv_obj_set_state(lv_obj_t * obj, lv_obj_state_t state) lv_obj_state_t new_state = obj->state | state; if(obj->state != new_state) { obj->state = new_state; - lv_obj_refresh_style(obj, LV_OBJ_STYLE_ALL); + lv_obj_refresh_style(obj, LV_OBJ_PART_ALL); } } @@ -1440,7 +1440,7 @@ void lv_obj_clear_state(lv_obj_t * obj, lv_obj_state_t state) lv_obj_state_t new_state = obj->state & state; if(obj->state != new_state) { obj->state = new_state; - lv_obj_refresh_style(obj, LV_OBJ_STYLE_ALL); + lv_obj_refresh_style(obj, LV_OBJ_PART_ALL); } } @@ -1796,16 +1796,16 @@ void lv_obj_get_inner_coords(const lv_obj_t * obj, lv_area_t * coords_p) { LV_ASSERT_OBJ(obj, LV_OBJX_NAME); - lv_border_part_t part = lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_BORDER_PART); - lv_coord_t w = lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_BORDER_WIDTH); + lv_border_side_t part = lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_BORDER_PART); + lv_coord_t w = lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_BORDER_WIDTH); - if(part & LV_BORDER_PART_LEFT) coords_p->x1 += w; + if(part & LV_BORDER_SIDE_LEFT) coords_p->x1 += w; - if(part & LV_BORDER_PART_RIGHT) coords_p->x2 -= w; + if(part & LV_BORDER_SIDE_RIGHT) coords_p->x2 -= w; - if(part & LV_BORDER_PART_TOP) coords_p->y1 += w; + if(part & LV_BORDER_SIDE_TOP) coords_p->y1 += w; - if(part & LV_BORDER_PART_BOTTOM) coords_p->y2 -= w; + if(part & LV_BORDER_SIDE_BOTTOM) coords_p->y2 -= w; } /** @@ -1879,8 +1879,8 @@ lv_coord_t lv_obj_get_width_fit(const lv_obj_t * obj) { LV_ASSERT_OBJ(obj, LV_OBJX_NAME); - lv_style_value_t left = lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_PAD_LEFT); - lv_style_value_t right = lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_PAD_RIGHT); + lv_style_value_t left = lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_PAD_LEFT); + lv_style_value_t right = lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_PAD_RIGHT); return lv_obj_get_width(obj) - left - right; } @@ -1894,8 +1894,8 @@ lv_coord_t lv_obj_get_height_fit(const lv_obj_t * obj) { LV_ASSERT_OBJ(obj, LV_OBJX_NAME); - lv_style_value_t top = lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_PAD_TOP); - lv_style_value_t bottom = lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_PAD_BOTTOM); + lv_style_value_t top = lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_PAD_TOP); + lv_style_value_t bottom = lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_PAD_BOTTOM); return lv_obj_get_height(obj) - top - bottom; } @@ -2158,8 +2158,8 @@ lv_style_value_t lv_obj_get_style_value(const lv_obj_t * obj, uint8_t type, lv_s if(attr.bits.inherit == 0) break; /*If not found, check the `MAIN` style first*/ - if(type != LV_OBJ_STYLE_MAIN) { - type = LV_OBJ_STYLE_MAIN; + if(type != LV_OBJ_PART_MAIN) { + type = LV_OBJ_PART_MAIN; continue; } @@ -2173,7 +2173,9 @@ lv_style_value_t lv_obj_get_style_value(const lv_obj_t * obj, uint8_t type, lv_s prop = prop & (~LV_STYLE_STATE_MASK); switch(prop) { case LV_STYLE_BORDER_PART: - return LV_BORDER_PART_FULL; + return LV_BORDER_SIDE_FULL; + case LV_STYLE_SCROLLBAR_WIDTH: + return LV_DPI/10; } return 0; @@ -2236,8 +2238,8 @@ lv_color_t lv_obj_get_style_color(const lv_obj_t * obj, uint8_t type, lv_style_p if(attr.bits.inherit == 0) break; /*If not found, check the `MAIN` style first*/ - if(type != LV_OBJ_STYLE_MAIN) { - type = LV_OBJ_STYLE_MAIN; + if(type != LV_OBJ_PART_MAIN) { + type = LV_OBJ_PART_MAIN; continue; } @@ -2350,8 +2352,8 @@ lv_opa_t lv_obj_get_style_opa(const lv_obj_t * obj, uint8_t type, lv_style_prope if(attr.bits.inherit == 0) break; /*If not found, check the `MAIN` style first*/ - if(type != LV_OBJ_STYLE_MAIN) { - type = LV_OBJ_STYLE_MAIN; + if(type != LV_OBJ_PART_MAIN) { + type = LV_OBJ_PART_MAIN; continue; } @@ -2417,8 +2419,8 @@ void * lv_obj_get_style_ptr(const lv_obj_t * obj, uint8_t type, lv_style_propert if(attr.bits.inherit == 0) break; /*If not found, check the `MAIN` style first*/ - if(type != LV_OBJ_STYLE_MAIN) { - type = LV_OBJ_STYLE_MAIN; + if(type != LV_OBJ_PART_MAIN) { + type = LV_OBJ_PART_MAIN; continue; } @@ -2441,11 +2443,11 @@ void * lv_obj_get_style_ptr(const lv_obj_t * obj, uint8_t type, lv_style_propert void lv_obj_update_style_cache(lv_obj_t * obj, uint8_t type) { - if(type != LV_OBJ_STYLE_ALL) { + if(type != LV_OBJ_PART_ALL) { style_cache_update_core(obj, type); } else { uint8_t type_sub; - for(type_sub = 0; type_sub != LV_OBJ_STYLE_ALL; type_sub++) { + for(type_sub = 0; type_sub != LV_OBJ_PART_ALL; type_sub++) { lv_res_t res; res = style_cache_update_core(obj, type_sub); if(res == LV_RES_INV) break; @@ -2907,18 +2909,18 @@ static lv_design_res_t lv_obj_design(lv_obj_t * obj, const lv_area_t * clip_area /*Most trivial test. Is the mask fully IN the object? If no it surely doesn't cover it*/ if(lv_area_is_in(clip_area, &obj->coords) == false) return LV_DESIGN_RES_NOT_COVER; - if(lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_BG_CLIP_CORNER)) return LV_DESIGN_RES_MASKED; + if(lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_BG_CLIP_CORNER)) return LV_DESIGN_RES_MASKED; - if(lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_BG_BLEND_MODE) != LV_BLEND_MODE_NORMAL) return LV_DESIGN_RES_NOT_COVER; - if(lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_BORDER_BLEND_MODE) != LV_BLEND_MODE_NORMAL) return LV_DESIGN_RES_NOT_COVER; + if(lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_BG_BLEND_MODE) != LV_BLEND_MODE_NORMAL) return LV_DESIGN_RES_NOT_COVER; + if(lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_BORDER_BLEND_MODE) != LV_BLEND_MODE_NORMAL) return LV_DESIGN_RES_NOT_COVER; /*Can cover the area only if fully solid (no opacity)*/ - if(lv_obj_get_style_opa(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_BG_OPA) < LV_OPA_MAX) return LV_DESIGN_RES_NOT_COVER; - if(lv_obj_get_style_opa(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_OPA_SCALE) < LV_OPA_MAX) return LV_DESIGN_RES_NOT_COVER; + if(lv_obj_get_style_opa(obj, LV_OBJ_PART_MAIN, LV_STYLE_BG_OPA) < LV_OPA_MAX) return LV_DESIGN_RES_NOT_COVER; + if(lv_obj_get_style_opa(obj, LV_OBJ_PART_MAIN, LV_STYLE_OPA_SCALE) < LV_OPA_MAX) return LV_DESIGN_RES_NOT_COVER; /* Because of the radius it is not sure the area is covered * Check the areas where there is no radius*/ - lv_coord_t r = lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_RADIUS); + lv_coord_t r = lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_RADIUS); if(r == LV_RADIUS_CIRCLE) return LV_DESIGN_RES_NOT_COVER; @@ -2942,13 +2944,13 @@ static lv_design_res_t lv_obj_design(lv_obj_t * obj, const lv_area_t * clip_area else if(mode == LV_DESIGN_DRAW_MAIN) { lv_draw_rect_dsc_t draw_dsc; lv_draw_rect_dsc_init(&draw_dsc); - lv_obj_init_draw_rect_dsc(obj, LV_OBJ_STYLE_MAIN, &draw_dsc); + lv_obj_init_draw_rect_dsc(obj, LV_OBJ_PART_MAIN, &draw_dsc); lv_draw_rect(&obj->coords, clip_area, &draw_dsc); - if(lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_BG_CLIP_CORNER)) { + if(lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_BG_CLIP_CORNER)) { lv_draw_mask_radius_param_t * mp = lv_mem_buf_get(sizeof(lv_draw_mask_radius_param_t)); - lv_coord_t r = lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_RADIUS); + lv_coord_t r = lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_RADIUS); lv_draw_mask_radius_init(mp, &obj->coords, r, false); /*Add the mask and use `obj+8` as custom id. Don't use `obj` directly because it might be used by the user*/ @@ -2956,8 +2958,7 @@ static lv_design_res_t lv_obj_design(lv_obj_t * obj, const lv_area_t * clip_area } } else if(mode == LV_DESIGN_DRAW_POST) { -// const lv_style_t * style_dsc = lv_obj_get_style(obj); - if(lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_BG_CLIP_CORNER)) { + if(lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_BG_CLIP_CORNER)) { lv_draw_mask_radius_param_t * param = lv_draw_mask_remove_custom(obj + 8); lv_mem_buf_release(param); } @@ -2978,7 +2979,7 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param) if(sign == LV_SIGNAL_GET_STYLE) { uint8_t ** type_p = param; lv_style_dsc_t ** style_dsc_p = param; - if((**type_p) == LV_OBJ_STYLE_MAIN) *style_dsc_p = &obj->style_dsc; + if((**type_p) == LV_OBJ_PART_MAIN) *style_dsc_p = &obj->style_dsc; else *style_dsc_p = NULL; return LV_RES_OK; } @@ -2990,10 +2991,10 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param) /*Return 'invalid' if the child change signal is not enabled*/ if(lv_obj_is_protected(obj, LV_PROTECT_CHILD_CHG) != false) res = LV_RES_INV; } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) { - lv_coord_t shadow = (lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_SHADOW_WIDTH) >> 1) + 1; - shadow += lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_SHADOW_SPREAD); - shadow += LV_MATH_MAX(LV_MATH_ABS(lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_SHADOW_OFFSET_X)), - LV_MATH_ABS(lv_obj_get_style_value(obj, LV_OBJ_STYLE_MAIN, LV_STYLE_SHADOW_OFFSET_Y))); + lv_coord_t shadow = (lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_SHADOW_WIDTH) >> 1) + 1; + shadow += lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_SHADOW_SPREAD); + shadow += LV_MATH_MAX(LV_MATH_ABS(lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_SHADOW_OFFSET_X)), + LV_MATH_ABS(lv_obj_get_style_value(obj, LV_OBJ_PART_MAIN, LV_STYLE_SHADOW_OFFSET_Y))); if(shadow > obj->ext_draw_pad) obj->ext_draw_pad = shadow; } else if(sign == LV_SIGNAL_STYLE_CHG) { diff --git a/src/lv_core/lv_obj.h b/src/lv_core/lv_obj.h index c105b1c90..ef06b4d1d 100644 --- a/src/lv_core/lv_obj.h +++ b/src/lv_core/lv_obj.h @@ -267,11 +267,11 @@ typedef struct _lv_obj_t } lv_obj_t; enum { - LV_OBJ_STYLE_MAIN, - LV_OBJ_STYLE_ALL = 0xFF, + LV_OBJ_PART_MAIN, + LV_OBJ_PART_ALL = 0xFF, }; -typedef uint8_t lv_obj_style_t; +typedef uint8_t lv_obj_part_t; /** Used by `lv_obj_get_type()`. The object's and its ancestor types are stored here*/ typedef struct diff --git a/src/lv_core/lv_style.c b/src/lv_core/lv_style.c index 27e343775..91f1d09a8 100644 --- a/src/lv_core/lv_style.c +++ b/src/lv_core/lv_style.c @@ -101,10 +101,10 @@ void lv_style_built_in_init(void) lv_style_set_value(&lv_style_plain, LV_STYLE_PAD_INNER, LV_DPI / 16); lv_style_init(&lv_style_panel); - lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_LEFT, LV_DPI / 12); - lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_RIGHT, LV_DPI / 12); - lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_TOP, LV_DPI / 12); - lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_BOTTOM, LV_DPI / 12); + lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_LEFT, LV_DPI / 20); + lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_RIGHT, LV_DPI / 20); + lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_TOP, LV_DPI / 20); + lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_BOTTOM, LV_DPI / 20); lv_style_set_value(&lv_style_panel, LV_STYLE_PAD_INNER, LV_DPI / 20); lv_style_set_value(&lv_style_panel, LV_STYLE_RADIUS, LV_DPI / 16); lv_style_set_value(&lv_style_panel, LV_STYLE_BORDER_WIDTH, LV_DPI / 50 > 0 ? LV_DPI / 50 : 1); @@ -113,10 +113,10 @@ void lv_style_built_in_init(void) lv_style_set_color(&lv_style_panel, LV_STYLE_BORDER_COLOR, LV_COLOR_GRAY); lv_style_init(&lv_style_btn); - lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_LEFT, LV_DPI / 6); - lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_RIGHT, LV_DPI / 6); - lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_TOP, LV_DPI / 10); - lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_BOTTOM, LV_DPI / 10); + lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_LEFT, LV_DPI / 20); + lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_RIGHT, LV_DPI / 20); + lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_TOP, LV_DPI / 20); + lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_BOTTOM, LV_DPI / 20); lv_style_set_value(&lv_style_btn, LV_STYLE_PAD_INNER, LV_DPI / 16); lv_style_set_value(&lv_style_btn, LV_STYLE_RADIUS, LV_DPI / 20); lv_style_set_value(&lv_style_btn, LV_STYLE_BORDER_WIDTH, LV_DPI / 50 > 0 ? LV_DPI / 50 : 1); diff --git a/src/lv_core/lv_style.h b/src/lv_core/lv_style.h index 9cb524ef6..487f9b599 100644 --- a/src/lv_core/lv_style.h +++ b/src/lv_core/lv_style.h @@ -25,8 +25,6 @@ extern "C" { * DEFINES *********************/ #define LV_RADIUS_CIRCLE (LV_COORD_MAX) /**< A very big radius to always draw as circle*/ -#define LV_STYLE_DEGUG_SENTINEL_VALUE 0x12345678 -#define LV_STYLE_WEIGHT_MAX 0xFF LV_EXPORT_CONST_INT(LV_RADIUS_CIRCLE); @@ -36,15 +34,15 @@ LV_EXPORT_CONST_INT(LV_RADIUS_CIRCLE); /*Border types (Use 'OR'ed values)*/ enum { - LV_BORDER_PART_NONE = 0x00, - LV_BORDER_PART_BOTTOM = 0x01, - LV_BORDER_PART_TOP = 0x02, - LV_BORDER_PART_LEFT = 0x04, - LV_BORDER_PART_RIGHT = 0x08, - LV_BORDER_PART_FULL = 0x0F, - LV_BORDER_PART_INTERNAL = 0x10, /**< FOR matrix-like objects (e.g. Button matrix)*/ + LV_BORDER_SIDE_NONE = 0x00, + LV_BORDER_SIDE_BOTTOM = 0x01, + LV_BORDER_SIDE_TOP = 0x02, + LV_BORDER_SIDE_LEFT = 0x04, + LV_BORDER_SIDE_RIGHT = 0x08, + LV_BORDER_SIDE_FULL = 0x0F, + LV_BORDER_SIDE_INTERNAL = 0x10, /**< FOR matrix-like objects (e.g. Button matrix)*/ }; -typedef uint8_t lv_border_part_t; +typedef uint8_t lv_border_side_t; enum { LV_GRAD_DIR_NONE, @@ -70,10 +68,10 @@ typedef union { }lv_style_attr_t; -#define LV_STYLE_ID_VALUE 0x0 -#define LV_STYLE_ID_COLOR 0x6 -#define LV_STYLE_ID_OPA 0xA -#define LV_STYLE_ID_PTR 0xE +#define LV_STYLE_ID_VALUE 0x0 /*max 6 pcs*/ +#define LV_STYLE_ID_COLOR 0x6 /*max 4 pcs*/ +#define LV_STYLE_ID_OPA 0xA /*max 4 pcs*/ +#define LV_STYLE_ID_PTR 0xE /*max 2 pcs*/ enum { LV_STYLE_PROP_INIT(LV_STYLE_RADIUS, 0x0, LV_STYLE_ID_VALUE + 0, LV_STYLE_ATTR_NONE), @@ -126,6 +124,10 @@ enum { LV_STYLE_PROP_INIT(LV_STYLE_OVERLAY_COLOR, 0x8, LV_STYLE_ID_COLOR + 0, LV_STYLE_ATTR_INHERIT), LV_STYLE_PROP_INIT(LV_STYLE_OVERLAY_OPA, 0x8, LV_STYLE_ID_OPA + 0, LV_STYLE_ATTR_INHERIT), + + LV_STYLE_PROP_INIT(LV_STYLE_SCROLLBAR_WIDTH, 0x9, LV_STYLE_ID_VALUE + 0, LV_STYLE_ATTR_NONE), + + }; typedef uint16_t lv_style_property_t; diff --git a/src/lv_draw/lv_draw_label.c b/src/lv_draw/lv_draw_label.c index e7ba71437..529fb2252 100644 --- a/src/lv_draw/lv_draw_label.c +++ b/src/lv_draw/lv_draw_label.c @@ -188,9 +188,10 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, lv_draw_lab lv_color_t recolor; lv_coord_t letter_w; -// lv_style_t sel_style; -// lv_style_copy(&sel_style, &lv_style_plain_color); -// sel_style.body.main_color = sel_style.body.grad_color = dsc->sel_color; + + lv_draw_rect_dsc_t draw_dsc_sel; + lv_draw_rect_dsc_init(&draw_dsc_sel); + draw_dsc_sel.bg_color = dsc->sel_color; lv_coord_t pos_x_start = pos.x; /*Write out all lines*/ @@ -268,16 +269,16 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, lv_draw_lab letter_w = lv_font_get_glyph_width(font, letter, letter_next); -// if(sel_start != 0xFFFF && sel_end != 0xFFFF) { -// if(logical_char_pos >= sel_start && logical_char_pos < sel_end) { -// lv_area_t sel_coords; -// sel_coords.x1 = pos.x; -// sel_coords.y1 = pos.y; -// sel_coords.x2 = pos.x + letter_w + dsc->letter_space - 1; -// sel_coords.y2 = pos.y + line_height - 1; -// lv_draw_rect(&sel_coords, mask, &sel_style, opa); -// } -// } + if(sel_start != 0xFFFF && sel_end != 0xFFFF) { + if(logical_char_pos >= sel_start && logical_char_pos < sel_end) { + lv_area_t sel_coords; + sel_coords.x1 = pos.x; + sel_coords.y1 = pos.y; + sel_coords.x2 = pos.x + letter_w + dsc->letter_space - 1; + sel_coords.y2 = pos.y + line_height - 1; + lv_draw_rect(&sel_coords, mask, &draw_dsc_sel); + } + } lv_draw_letter(&pos, mask, font, letter, color, opa); diff --git a/src/lv_draw/lv_draw_rect.c b/src/lv_draw/lv_draw_rect.c index 7e9424201..7c520591e 100644 --- a/src/lv_draw/lv_draw_rect.c +++ b/src/lv_draw/lv_draw_rect.c @@ -309,7 +309,7 @@ static void draw_border(const lv_area_t * coords, const lv_area_t * clip, lv_dra bool simple_mode = true; if(lv_draw_mask_get_cnt()!= 0) simple_mode = false; - else if(dsc->border_part != LV_BORDER_PART_FULL) simple_mode = false; + else if(dsc->border_part != LV_BORDER_SIDE_FULL) simple_mode = false; else if(dsc->bg_grad_dir == LV_GRAD_DIR_HOR) simple_mode = false; int16_t mask_rout_id = LV_MASK_ID_INV; @@ -337,10 +337,10 @@ static void draw_border(const lv_area_t * coords, const lv_area_t * clip, lv_dra /*Get the inner area*/ lv_area_t area_small; lv_area_copy(&area_small, coords); - area_small.x1 += ((dsc->border_part & LV_BORDER_PART_LEFT) ? border_width : - (border_width + rout)); - area_small.x2 -= ((dsc->border_part & LV_BORDER_PART_RIGHT) ? border_width : - (border_width + rout)); - area_small.y1 += ((dsc->border_part & LV_BORDER_PART_TOP) ? border_width : - (border_width + rout)); - area_small.y2 -= ((dsc->border_part & LV_BORDER_PART_BOTTOM) ? border_width : - (border_width + rout)); + area_small.x1 += ((dsc->border_part & LV_BORDER_SIDE_LEFT) ? border_width : - (border_width + rout)); + area_small.x2 -= ((dsc->border_part & LV_BORDER_SIDE_RIGHT) ? border_width : - (border_width + rout)); + area_small.y1 += ((dsc->border_part & LV_BORDER_SIDE_TOP) ? border_width : - (border_width + rout)); + area_small.y2 -= ((dsc->border_part & LV_BORDER_SIDE_BOTTOM) ? border_width : - (border_width + rout)); /*Create inner the mask*/ lv_draw_mask_radius_param_t mask_rin_param; @@ -397,7 +397,7 @@ static void draw_border(const lv_area_t * coords, const lv_area_t * clip, lv_dra } /*Draw the lower corner area corner area*/ - if(dsc->border_part & LV_BORDER_PART_BOTTOM) { + if(dsc->border_part & LV_BORDER_SIDE_BOTTOM) { lv_coord_t lower_corner_end = coords->y2 - disp_area->y1 - corner_size; if(lower_corner_end <= upper_corner_end) lower_corner_end = upper_corner_end + 1; fill_area.y1 = disp_area->y1 + lower_corner_end; diff --git a/src/lv_hal/lv_hal_disp.c b/src/lv_hal/lv_hal_disp.c index efcd600d6..86cff9e38 100644 --- a/src/lv_hal/lv_hal_disp.c +++ b/src/lv_hal/lv_hal_disp.c @@ -139,8 +139,8 @@ lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver) disp->act_scr = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/ disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/ disp->sys_layer = lv_obj_create(NULL, NULL); /*Create sys layer on the display*/ - lv_obj_add_style_class(disp->top_layer, LV_OBJ_STYLE_MAIN, &lv_style_transp); - lv_obj_add_style_class(disp->sys_layer, LV_OBJ_STYLE_MAIN, &lv_style_transp); + lv_obj_add_style_class(disp->top_layer, LV_OBJ_PART_MAIN, &lv_style_transp); + lv_obj_add_style_class(disp->sys_layer, LV_OBJ_PART_MAIN, &lv_style_transp); lv_obj_invalidate(disp->act_scr); diff --git a/src/lv_objx/lv_btn.c b/src/lv_objx/lv_btn.c index 9b8c624dd..c47e93175 100644 --- a/src/lv_objx/lv_btn.c +++ b/src/lv_objx/lv_btn.c @@ -121,8 +121,8 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy) // lv_btn_set_style(new_btn, LV_BTN_STYLE_TGL_PR, th->style.btn.tgl_pr); // lv_btn_set_style(new_btn, LV_BTN_STYLE_INA, th->style.btn.ina); } else { - lv_obj_reset_style(new_btn, LV_BTN_STYLE_MAIN); - lv_obj_add_style_class(new_btn, LV_BTN_STYLE_MAIN, &lv_style_btn); + lv_obj_reset_style(new_btn, LV_BTN_PART_MAIN); + lv_obj_add_style_class(new_btn, LV_BTN_PART_MAIN, &lv_style_btn); } } /*Copy 'copy'*/ @@ -137,7 +137,7 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy) // memcpy((void*) ext->styles, copy_ext->styles, sizeof(ext->styles)); /*Refresh the style with new signal function*/ - lv_obj_refresh_style(new_btn,LV_BTN_STYLE_MAIN); + lv_obj_refresh_style(new_btn,LV_BTN_PART_MAIN); } LV_LOG_INFO("button created"); @@ -362,7 +362,7 @@ lv_style_dsc_t * lv_btn_get_style(lv_obj_t * cont, uint8_t type) { lv_style_dsc_t * style_dsc_p; switch(type) { - case LV_BTN_STYLE_MAIN: + case LV_BTN_PART_MAIN: style_dsc_p = &cont->style_dsc; break; default: @@ -455,14 +455,14 @@ static lv_design_res_t lv_btn_design(lv_obj_t * btn, const lv_area_t * clip_area lv_draw_rect_dsc_t draw_dsc; lv_draw_rect_dsc_init(&draw_dsc); - lv_obj_init_draw_rect_dsc(btn, LV_OBJ_STYLE_MAIN, &draw_dsc); + lv_obj_init_draw_rect_dsc(btn, LV_OBJ_PART_MAIN, &draw_dsc); lv_draw_rect(&btn->coords, clip_area, &draw_dsc); - if(lv_obj_get_style_value(btn, LV_OBJ_STYLE_MAIN, LV_STYLE_BG_CLIP_CORNER)) { + if(lv_obj_get_style_value(btn, LV_OBJ_PART_MAIN, LV_STYLE_BG_CLIP_CORNER)) { lv_draw_mask_radius_param_t * mp = lv_mem_buf_get(sizeof(lv_draw_mask_radius_param_t)); - lv_coord_t r = lv_obj_get_style_value(btn, LV_OBJ_STYLE_MAIN, LV_STYLE_RADIUS); + lv_coord_t r = lv_obj_get_style_value(btn, LV_OBJ_PART_MAIN, LV_STYLE_RADIUS); lv_draw_mask_radius_init(mp, &btn->coords, r, false); /*Add the mask and use `obj+8` as custom id. Don't use `obj` directly because it might be used by the user*/ diff --git a/src/lv_objx/lv_btn.h b/src/lv_objx/lv_btn.h index c46cd1d5c..55cdf15df 100644 --- a/src/lv_objx/lv_btn.h +++ b/src/lv_objx/lv_btn.h @@ -68,10 +68,10 @@ typedef struct /**Styles*/ enum { - LV_BTN_STYLE_MAIN, + LV_BTN_PART_MAIN, }; -typedef uint8_t lv_btn_style_t; +typedef uint8_t lv_btn_part_t; /********************** * GLOBAL PROTOTYPES @@ -183,7 +183,7 @@ void lv_btn_set_ink_out_time(lv_obj_t * btn, uint16_t time); * @param type which style should be set * @param style pointer to a style * */ -void lv_btn_set_style(lv_obj_t * btn, lv_btn_style_t type, const lv_style_t * style); +void lv_btn_set_style(lv_obj_t * btn, lv_btn_part_t type, const lv_style_t * style); /*===================== * Getter functions diff --git a/src/lv_objx/lv_btnm.c b/src/lv_objx/lv_btnm.c index 29fde746c..a43bd1342 100644 --- a/src/lv_objx/lv_btnm.c +++ b/src/lv_objx/lv_btnm.c @@ -30,6 +30,8 @@ **********************/ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param); static lv_design_res_t lv_btnm_design(lv_obj_t * btnm, const lv_area_t * clip_area, lv_design_mode_t mode); +static lv_style_dsc_t * lv_btnm_get_style(lv_obj_t * btnm, uint8_t type); + static uint8_t get_button_width(lv_btnm_ctrl_t ctrl_bits); static bool button_is_hidden(lv_btnm_ctrl_t ctrl_bits); static bool button_is_repeat_disabled(lv_btnm_ctrl_t ctrl_bits); @@ -115,13 +117,13 @@ lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy) // lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_TGL_PR, th->style.btnm.btn.tgl_pr); // lv_btnm_set_style(new_btnm, LV_BTNM_STYLE_BTN_INA, th->style.btnm.btn.ina); } else { - lv_obj_reset_style(new_btnm, LV_BTNM_STYLE_MAIN); - lv_obj_add_style_class(new_btnm, LV_BTNM_STYLE_MAIN, &lv_style_panel); + lv_obj_reset_style(new_btnm, LV_BTNM_PART_MAIN); + lv_obj_add_style_class(new_btnm, LV_BTNM_PART_MAIN, &lv_style_panel); /* Do not cache the button style because it's independent from the object's style. * (Therefore it can't be cached)*/ ext->style_btn.cache.enabled = 0; - lv_obj_add_style_class(new_btnm, LV_BTNM_STYLE_BTN, &lv_style_btn); + lv_obj_add_style_class(new_btnm, LV_BTNM_PART_BTN, &lv_style_btn); } } /*Copy an existing object*/ @@ -172,11 +174,11 @@ void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[]) ext->map_p = map; /*Set size and positions of the buttons*/ - lv_style_value_t left = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_LEFT); - lv_style_value_t right = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_RIGHT); - lv_style_value_t top = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_TOP); - lv_style_value_t bottom = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_BOTTOM); - lv_style_value_t inner = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_INNER); + lv_style_value_t left = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_LEFT); + lv_style_value_t right = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_RIGHT); + lv_style_value_t top = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_TOP); + lv_style_value_t bottom = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_BOTTOM); + lv_style_value_t inner = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_INNER); lv_coord_t max_w = lv_obj_get_width(btnm) - left - right; @@ -565,28 +567,6 @@ bool lv_btnm_get_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl) } -lv_style_dsc_t * lv_btnm_get_style(lv_obj_t * btnm, uint8_t type) -{ - LV_ASSERT_OBJ(btnm, LV_OBJX_NAME); - - lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm); - - lv_style_dsc_t * style_dsc_p; - - switch(type) { - case LV_BTNM_STYLE_MAIN: - style_dsc_p = &btnm->style_dsc; - break; - case LV_BTNM_STYLE_BTN: - style_dsc_p = &ext->style_btn; - break; - default: - style_dsc_p = NULL; - } - - return style_dsc_p; -} - /** * Find whether "one toggle" mode is enabled. * @param btnm Button matrix object @@ -647,29 +627,29 @@ static lv_design_res_t lv_btnm_design(lv_obj_t * btnm, const lv_area_t * clip_ar uint8_t state_ori = btnm->state; btnm->state = 0; - lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_rect_dsc[LV_BTN_STATE_REL]); - lv_obj_init_draw_label_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_label_dsc[LV_BTN_STATE_REL]); + lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_PART_BTN, &draw_rect_dsc[LV_BTN_STATE_REL]); + lv_obj_init_draw_label_dsc(btnm, LV_BTNM_PART_BTN, &draw_label_dsc[LV_BTN_STATE_REL]); btnm->state = LV_OBJ_STATE_PRESSED; - lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_rect_dsc[LV_BTN_STATE_PR]); - lv_obj_init_draw_label_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_label_dsc[LV_BTN_STATE_PR]); + lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_PART_BTN, &draw_rect_dsc[LV_BTN_STATE_PR]); + lv_obj_init_draw_label_dsc(btnm, LV_BTNM_PART_BTN, &draw_label_dsc[LV_BTN_STATE_PR]); btnm->state = LV_OBJ_STATE_CHECKED; - lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_rect_dsc[LV_BTN_STATE_TGL_REL]); - lv_obj_init_draw_label_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_label_dsc[LV_BTN_STATE_TGL_REL]); + lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_PART_BTN, &draw_rect_dsc[LV_BTN_STATE_TGL_REL]); + lv_obj_init_draw_label_dsc(btnm, LV_BTNM_PART_BTN, &draw_label_dsc[LV_BTN_STATE_TGL_REL]); btnm->state = LV_OBJ_STATE_PRESSED | LV_OBJ_STATE_CHECKED; - lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_rect_dsc[LV_BTN_STATE_TGL_PR]); - lv_obj_init_draw_label_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_label_dsc[LV_BTN_STATE_TGL_PR]); + lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_PART_BTN, &draw_rect_dsc[LV_BTN_STATE_TGL_PR]); + lv_obj_init_draw_label_dsc(btnm, LV_BTNM_PART_BTN, &draw_label_dsc[LV_BTN_STATE_TGL_PR]); btnm->state = LV_OBJ_STATE_DISABLED; - lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_rect_dsc[LV_BTN_STATE_INA]); - lv_obj_init_draw_label_dsc(btnm, LV_BTNM_STYLE_BTN, &draw_label_dsc[LV_BTN_STATE_INA]); + lv_obj_init_draw_rect_dsc(btnm, LV_BTNM_PART_BTN, &draw_rect_dsc[LV_BTN_STATE_INA]); + lv_obj_init_draw_label_dsc(btnm, LV_BTNM_PART_BTN, &draw_label_dsc[LV_BTN_STATE_INA]); btnm->state = state_ori; - lv_style_value_t padding_top = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_TOP); - lv_style_value_t padding_bottom = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_BOTTOM); + lv_style_value_t padding_top = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_TOP); + lv_style_value_t padding_bottom = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_BOTTOM); if(ext->recolor) txt_flag = LV_TXT_FLAG_RECOLOR; for(btn_i = 0; btn_i < ext->btn_cnt; btn_i++, txt_i++) { @@ -705,24 +685,24 @@ static lv_design_res_t lv_btnm_design(lv_obj_t * btnm, const lv_area_t * clip_ar lv_style_value_t border_part_ori = draw_rect_dsc[act_state].border_part; /*Remove borders on the edges if `LV_BORDER_INTERNAL`*/ - if(border_part_ori & LV_BORDER_PART_INTERNAL) { + if(border_part_ori & LV_BORDER_SIDE_INTERNAL) { /*Top/Bottom lines*/ if(area_tmp.y1 == btnm->coords.y1 + padding_top) { - draw_rect_dsc[act_state].border_part &= ~LV_BORDER_PART_TOP; + draw_rect_dsc[act_state].border_part &= ~LV_BORDER_SIDE_TOP; } if(area_tmp.y2 == btnm->coords.y2 - padding_bottom) { - draw_rect_dsc[act_state].border_part &= ~LV_BORDER_PART_BOTTOM; + draw_rect_dsc[act_state].border_part &= ~LV_BORDER_SIDE_BOTTOM; } /*Left/right columns*/ if(txt_i == 0) { /*First button*/ - draw_rect_dsc[act_state].border_part &= ~LV_BORDER_PART_LEFT; + draw_rect_dsc[act_state].border_part &= ~LV_BORDER_SIDE_LEFT; } else if(strcmp(ext->map_p[txt_i - 1], "\n") == 0) { - draw_rect_dsc[act_state].border_part &= ~LV_BORDER_PART_LEFT; + draw_rect_dsc[act_state].border_part &= ~LV_BORDER_SIDE_LEFT; } if(ext->map_p[txt_i + 1][0] == '\0' || strcmp(ext->map_p[txt_i + 1], "\n") == 0) { - draw_rect_dsc[act_state].border_part &= ~LV_BORDER_PART_RIGHT; + draw_rect_dsc[act_state].border_part &= ~LV_BORDER_SIDE_RIGHT; } } @@ -825,9 +805,9 @@ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param) /*Toggle the button if enabled*/ if(button_is_tgl_enabled(ext->ctrl_bits[ext->btn_id_pr])) { if(button_get_tgl_state(ext->ctrl_bits[ext->btn_id_pr])) { - ext->ctrl_bits[ext->btn_id_pr] &= (~LV_BTNM_CTRL_TGL_STATE); + ext->ctrl_bits[ext->btn_id_pr] &= (~LV_BTNM_CTRL_CHECHK_STATE); } else { - ext->ctrl_bits[ext->btn_id_pr] |= LV_BTNM_CTRL_TGL_STATE; + ext->ctrl_bits[ext->btn_id_pr] |= LV_BTNM_CTRL_CHECHK_STATE; } if(ext->one_toggle) make_one_button_toggled(btnm, ext->btn_id_pr); } @@ -913,7 +893,7 @@ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param) ext->btn_id_act = ext->btn_id_pr; lv_obj_invalidate(btnm); } else if(c == LV_KEY_DOWN) { - lv_style_value_t pad_inner = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_INNER); + lv_style_value_t pad_inner = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_INNER); /*Find the area below the the current*/ if(ext->btn_id_pr == LV_BTNM_BTN_NONE) { ext->btn_id_pr = 0; @@ -935,7 +915,7 @@ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param) ext->btn_id_act = ext->btn_id_pr; lv_obj_invalidate(btnm); } else if(c == LV_KEY_UP) { - lv_style_value_t pad_inner = lv_obj_get_style_value(btnm, LV_BTNM_STYLE_MAIN, LV_STYLE_PAD_INNER); + lv_style_value_t pad_inner = lv_obj_get_style_value(btnm, LV_BTNM_PART_MAIN, LV_STYLE_PAD_INNER); /*Find the area below the the current*/ if(ext->btn_id_pr == LV_BTNM_BTN_NONE) { ext->btn_id_pr = 0; @@ -963,6 +943,27 @@ static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void * param) return res; } +static lv_style_dsc_t * lv_btnm_get_style(lv_obj_t * btnm, uint8_t type) +{ + LV_ASSERT_OBJ(btnm, LV_OBJX_NAME); + + lv_btnm_ext_t * ext = lv_obj_get_ext_attr(btnm); + + lv_style_dsc_t * style_dsc_p; + + switch(type) { + case LV_BTNM_PART_MAIN: + style_dsc_p = &btnm->style_dsc; + break; + case LV_BTNM_PART_BTN: + style_dsc_p = &ext->style_btn; + break; + default: + style_dsc_p = NULL; + } + + return style_dsc_p; +} /** * Create the required number of buttons and control bytes according to a map * @param btnm pointer to button matrix object @@ -1035,12 +1036,12 @@ static bool button_is_click_trig(lv_btnm_ctrl_t ctrl_bits) static bool button_is_tgl_enabled(lv_btnm_ctrl_t ctrl_bits) { - return ctrl_bits & LV_BTNM_CTRL_TGL_ENABLE ? true : false; + return ctrl_bits & LV_BTNM_CTRL_CHECKABLE ? true : false; } static bool button_get_tgl_state(lv_btnm_ctrl_t ctrl_bits) { - return ctrl_bits & LV_BTNM_CTRL_TGL_STATE ? true : false; + return ctrl_bits & LV_BTNM_CTRL_CHECHK_STATE ? true : false; } /** @@ -1121,11 +1122,11 @@ static bool maps_are_identical(const char ** map1, const char ** map2) static void make_one_button_toggled(lv_obj_t * btnm, uint16_t btn_idx) { /*Save whether the button was toggled*/ - bool was_toggled = lv_btnm_get_btn_ctrl(btnm, btn_idx, LV_BTNM_CTRL_TGL_STATE); + bool was_toggled = lv_btnm_get_btn_ctrl(btnm, btn_idx, LV_BTNM_CTRL_CHECHK_STATE); - lv_btnm_clear_btn_ctrl_all(btnm, LV_BTNM_CTRL_TGL_STATE); + lv_btnm_clear_btn_ctrl_all(btnm, LV_BTNM_CTRL_CHECHK_STATE); - if(was_toggled) lv_btnm_set_btn_ctrl(btnm, btn_idx, LV_BTNM_CTRL_TGL_STATE); + if(was_toggled) lv_btnm_set_btn_ctrl(btnm, btn_idx, LV_BTNM_CTRL_CHECHK_STATE); } #endif diff --git a/src/lv_objx/lv_btnm.h b/src/lv_objx/lv_btnm.h index 313517239..ac735acdc 100644 --- a/src/lv_objx/lv_btnm.h +++ b/src/lv_objx/lv_btnm.h @@ -33,13 +33,14 @@ LV_EXPORT_CONST_INT(LV_BTNM_BTN_NONE); * TYPEDEFS **********************/ -/** Type to store button control bits (disabled, hidden etc.) */ +/** Type to store button control bits (disabled, hidden etc.) + * The first 3 bits are used to store the width */ enum { LV_BTNM_CTRL_HIDDEN = 0x0008, /**< Button hidden */ LV_BTNM_CTRL_NO_REPEAT = 0x0010, /**< Do not repeat press this button. */ LV_BTNM_CTRL_INACTIVE = 0x0020, /**< Disable this button. */ - LV_BTNM_CTRL_TGL_ENABLE = 0x0040, /**< Button *can* be toggled. */ - LV_BTNM_CTRL_TGL_STATE = 0x0080, /**< Button is currently toggled (e.g. checked). */ + LV_BTNM_CTRL_CHECKABLE = 0x0040, /**< Button *can* be toggled. */ + LV_BTNM_CTRL_CHECHK_STATE = 0x0080, /**< Button is currently toggled (e.g. checked). */ LV_BTNM_CTRL_CLICK_TRIG = 0x0100, /**< 1: Send LV_EVENT_SELECTED on CLICK, 0: Send LV_EVENT_SELECTED on PRESS*/ }; typedef uint16_t lv_btnm_ctrl_t; @@ -61,10 +62,10 @@ typedef struct } lv_btnm_ext_t; enum { - LV_BTNM_STYLE_MAIN, - LV_BTNM_STYLE_BTN, + LV_BTNM_PART_MAIN, + LV_BTNM_PART_BTN, }; -typedef uint8_t lv_btnm_style_t; +typedef uint8_t lv_btnm_part_t; /********************** * GLOBAL PROTOTYPES @@ -120,7 +121,7 @@ void lv_btnm_set_pressed(const lv_obj_t * btnm, uint16_t id); * @param type which style should be set * @param style pointer to a style */ -void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_style_t type, const lv_style_t * style); +void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_part_t type, const lv_style_t * style); /** * Enable recoloring of button's texts @@ -241,9 +242,6 @@ const char * lv_btnm_get_btn_text(const lv_obj_t * btnm, uint16_t btn_id); */ bool lv_btnm_get_btn_ctrl(lv_obj_t * btnm, uint16_t btn_id, lv_btnm_ctrl_t ctrl); - -lv_style_dsc_t * lv_btnm_get_style(lv_obj_t * btnm, uint8_t type); - /** * Find whether "one toggle" mode is enabled. * @param btnm Button matrix object diff --git a/src/lv_objx/lv_cont.c b/src/lv_objx/lv_cont.c index e0af672c6..0aabf753c 100644 --- a/src/lv_objx/lv_cont.c +++ b/src/lv_objx/lv_cont.c @@ -99,9 +99,9 @@ lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy) if(par != NULL) { lv_theme_t * th = lv_theme_get_current(); if(th) { -// lv_cont_set_style(new_cont, LV_CONT_STYLE_MAIN, th->style_dsc.cont); +// lv_cont_set_style(new_cont, LV_CONT_PART_MAIN, th->style_dsc.cont); } else { - lv_obj_add_style_class(new_cont, LV_CONT_STYLE_MAIN, &lv_style_panel); + lv_obj_add_style_class(new_cont, LV_CONT_PART_MAIN, &lv_style_panel); } } } @@ -115,7 +115,7 @@ lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy) ext->layout = copy_ext->layout; /*Refresh the style with new signal function*/ - lv_obj_refresh_style(new_cont, LV_CONT_STYLE_MAIN); + lv_obj_refresh_style(new_cont, LV_CONT_PART_MAIN); } LV_LOG_INFO("container created"); @@ -247,7 +247,7 @@ lv_style_dsc_t * lv_cont_get_style(lv_obj_t * cont, uint8_t type) { lv_style_dsc_t * style_dsc_p; switch(type) { - case LV_CONT_STYLE_MAIN: + case LV_CONT_PART_MAIN: style_dsc_p = &cont->style_dsc; break; default: @@ -336,10 +336,10 @@ static void lv_cont_refr_layout(lv_obj_t * cont) */ static void lv_cont_layout_col(lv_obj_t * cont) { - lv_coord_t left = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_LEFT); - lv_coord_t right = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_RIGHT); - lv_coord_t top = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_TOP); - lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_INNER); + lv_coord_t left = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_LEFT); + lv_coord_t right = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_RIGHT); + lv_coord_t top = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_TOP); + lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_INNER); lv_layout_t type = lv_cont_get_layout(cont); lv_obj_t * child; @@ -399,7 +399,7 @@ static void lv_cont_layout_row(lv_obj_t * cont) lv_bidi_dir_t base_dir = lv_obj_get_base_dir(cont); switch(type) { case LV_LAYOUT_ROW_T: - vpad_corr = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_TOP); + vpad_corr = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_TOP); align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_TOP_RIGHT : LV_ALIGN_IN_TOP_LEFT; break; case LV_LAYOUT_ROW_M: @@ -407,7 +407,7 @@ static void lv_cont_layout_row(lv_obj_t * cont) align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_RIGHT_MID: LV_ALIGN_IN_LEFT_MID; break; case LV_LAYOUT_ROW_B: - vpad_corr = -lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_BOTTOM);; + vpad_corr = -lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_BOTTOM);; align = base_dir == LV_BIDI_DIR_RTL ? LV_ALIGN_IN_BOTTOM_RIGHT: LV_ALIGN_IN_BOTTOM_LEFT; break; default: @@ -422,10 +422,10 @@ static void lv_cont_layout_row(lv_obj_t * cont) /* Align the children */ lv_coord_t last_cord; - if(base_dir == LV_BIDI_DIR_RTL) last_cord = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_RIGHT); - else last_cord = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_LEFT); + if(base_dir == LV_BIDI_DIR_RTL) last_cord = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_RIGHT); + else last_cord = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_LEFT); - lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_INNER); + lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_INNER); LV_LL_READ_BACK(cont->child_ll, child) { @@ -450,7 +450,7 @@ static void lv_cont_layout_center(lv_obj_t * cont) uint32_t obj_num = 0; lv_coord_t h_tot = 0; - lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_INNER); + lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_INNER); LV_LL_READ(cont->child_ll, child) { if(lv_obj_get_hidden(child) != false || lv_obj_is_protected(child, LV_PROTECT_POS) != false) continue; @@ -490,7 +490,7 @@ static void lv_cont_layout_pretty(lv_obj_t * cont) lv_obj_t * child_rc; /* Row closer child */ lv_obj_t * child_tmp; /* Temporary child */ lv_coord_t w_obj = lv_obj_get_width(cont); - lv_coord_t act_y = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_TOP); + lv_coord_t act_y = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_TOP); /* Disable child change action because the children will be moved a lot * an unnecessary child change signals could be sent*/ @@ -498,9 +498,9 @@ static void lv_cont_layout_pretty(lv_obj_t * cont) if(child_rs == NULL) return; /*Return if no child*/ lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG); - lv_coord_t left = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_LEFT); - lv_coord_t right = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_RIGHT); - lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_INNER); + lv_coord_t left = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_LEFT); + lv_coord_t right = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_RIGHT); + lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_INNER); child_rc = child_rs; /*Initially the the row starter and closer is the same*/ while(child_rs != NULL) { @@ -588,7 +588,7 @@ static void lv_cont_layout_grid(lv_obj_t * cont) lv_coord_t w_obj = lv_obj_get_width(lv_obj_get_child(cont, NULL)); lv_coord_t w_fit = lv_obj_get_width_fit(cont); lv_coord_t h_obj = lv_obj_get_height(lv_obj_get_child(cont, NULL)); - lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_INNER); + lv_coord_t inner = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_INNER); uint16_t obj_row = (w_fit) / (w_obj + inner); /*Obj. num. in a row*/ lv_coord_t x_ofs; if(obj_row > 1) { @@ -603,9 +603,9 @@ static void lv_cont_layout_grid(lv_obj_t * cont) lv_obj_set_protect(cont, LV_PROTECT_CHILD_CHG); /* Align the children */ - lv_coord_t left = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_LEFT); + lv_coord_t left = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_LEFT); lv_coord_t act_x = left; - lv_coord_t act_y = lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_TOP); + lv_coord_t act_y = lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_TOP); uint16_t obj_cnt = 0; LV_LL_READ_BACK(cont->child_ll, child) { @@ -653,10 +653,10 @@ static void lv_cont_refr_autofit(lv_obj_t * cont) lv_obj_t * par = lv_obj_get_parent(cont); lv_area_t flood_area; lv_area_copy(&flood_area, &par->coords); - flood_area.x1 += lv_obj_get_style_value(par, LV_OBJ_STYLE_MAIN, LV_STYLE_PAD_LEFT); - flood_area.x2 -= lv_obj_get_style_value(par, LV_OBJ_STYLE_MAIN, LV_STYLE_PAD_RIGHT); - flood_area.y1 += lv_obj_get_style_value(par, LV_OBJ_STYLE_MAIN, LV_STYLE_PAD_TOP); - flood_area.y2 -= lv_obj_get_style_value(par, LV_OBJ_STYLE_MAIN, LV_STYLE_PAD_BOTTOM); + flood_area.x1 += lv_obj_get_style_value(par, LV_OBJ_PART_MAIN, LV_STYLE_PAD_LEFT); + flood_area.x2 -= lv_obj_get_style_value(par, LV_OBJ_PART_MAIN, LV_STYLE_PAD_RIGHT); + flood_area.y1 += lv_obj_get_style_value(par, LV_OBJ_PART_MAIN, LV_STYLE_PAD_TOP); + flood_area.y2 -= lv_obj_get_style_value(par, LV_OBJ_PART_MAIN, LV_STYLE_PAD_BOTTOM); /*Search the side coordinates of the children*/ lv_obj_get_coords(cont, &ori); @@ -679,10 +679,10 @@ static void lv_cont_refr_autofit(lv_obj_t * cont) tight_area.y2 = LV_MATH_MAX(tight_area.y2, child_i->coords.y2); } - tight_area.x1 -= lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_LEFT); - tight_area.x2 += lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_RIGHT); - tight_area.y1 -= lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_TOP); - tight_area.y2 += lv_obj_get_style_value(cont, LV_CONT_STYLE_MAIN, LV_STYLE_PAD_BOTTOM); + tight_area.x1 -= lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_LEFT); + tight_area.x2 += lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_RIGHT); + tight_area.y1 -= lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_TOP); + tight_area.y2 += lv_obj_get_style_value(cont, LV_CONT_PART_MAIN, LV_STYLE_PAD_BOTTOM); } lv_area_t new_area; diff --git a/src/lv_objx/lv_cont.h b/src/lv_objx/lv_cont.h index 042686629..0285c7cd8 100644 --- a/src/lv_objx/lv_cont.h +++ b/src/lv_objx/lv_cont.h @@ -69,9 +69,9 @@ typedef struct /*Styles*/ enum { - LV_CONT_STYLE_MAIN, + LV_CONT_PART_MAIN, }; -typedef uint8_t lv_cont_style_t; +typedef uint8_t lv_cont_part_t; /********************** * GLOBAL PROTOTYPES diff --git a/src/lv_objx/lv_label.c b/src/lv_objx/lv_label.c index 5c5ba9df2..e84d305bf 100644 --- a/src/lv_objx/lv_label.c +++ b/src/lv_objx/lv_label.c @@ -591,9 +591,9 @@ void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t char_id, lv_point_ uint32_t line_start = 0; uint32_t new_line_start = 0; lv_coord_t max_w = lv_obj_get_width(label); - const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_STYLE_MAIN, LV_STYLE_FONT); - lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LINE_SPACE); - lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LETTER_SPACE); + const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_PART_MAIN, LV_STYLE_FONT); + lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LINE_SPACE); + lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LETTER_SPACE); lv_coord_t letter_height = lv_font_get_line_height(font); lv_coord_t y = 0; lv_txt_flag_t flag = LV_TXT_FLAG_NONE; @@ -695,9 +695,9 @@ uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos) uint32_t line_start = 0; uint32_t new_line_start = 0; lv_coord_t max_w = lv_obj_get_width(label); - const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_STYLE_MAIN, LV_STYLE_FONT); - lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LINE_SPACE); - lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LETTER_SPACE); + const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_PART_MAIN, LV_STYLE_FONT); + lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LINE_SPACE); + lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LETTER_SPACE); lv_coord_t letter_height = lv_font_get_line_height(font); lv_coord_t y = 0; lv_txt_flag_t flag = LV_TXT_FLAG_NONE; @@ -856,9 +856,9 @@ bool lv_label_is_char_under_pos(const lv_obj_t * label, lv_point_t * pos) uint32_t line_start = 0; uint32_t new_line_start = 0; lv_coord_t max_w = lv_obj_get_width(label); - const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_STYLE_MAIN, LV_STYLE_FONT); - lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LINE_SPACE); - lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LETTER_SPACE); + const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_PART_MAIN, LV_STYLE_FONT); + lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LINE_SPACE); + lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LETTER_SPACE); lv_coord_t letter_height = lv_font_get_line_height(font); lv_coord_t y = 0; lv_txt_flag_t flag = LV_TXT_FLAG_NONE; @@ -938,7 +938,7 @@ lv_style_dsc_t * lv_label_get_style(lv_obj_t * label, uint8_t type) { lv_style_dsc_t * style_dsc_p; switch(type) { - case LV_LABEL_STYLE_MAIN: + case LV_LABEL_PART_MAIN: style_dsc_p = &label->style_dsc; break; default: @@ -1044,9 +1044,9 @@ static lv_design_res_t lv_label_design(lv_obj_t * label, const lv_area_t * clip_ return LV_DESIGN_RES_NOT_COVER; else if(mode == LV_DESIGN_DRAW_MAIN) { lv_area_t coords; - const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_STYLE_MAIN, LV_STYLE_FONT); - lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LINE_SPACE); - lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LETTER_SPACE); + const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_PART_MAIN, LV_STYLE_FONT); + lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LINE_SPACE); + lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LETTER_SPACE); lv_obj_get_coords(label, &coords); lv_label_ext_t * ext = lv_obj_get_ext_attr(label); @@ -1054,10 +1054,10 @@ static lv_design_res_t lv_label_design(lv_obj_t * label, const lv_area_t * clip_ lv_area_t bg; lv_obj_get_coords(label, &bg); - lv_coord_t left = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_PAD_LEFT); - lv_coord_t right = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_PAD_RIGHT); - lv_coord_t top = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_PAD_TOP); - lv_coord_t bottom = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_PAD_BOTTOM); + lv_coord_t left = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_PAD_LEFT); + lv_coord_t right = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_PAD_RIGHT); + lv_coord_t top = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_PAD_TOP); + lv_coord_t bottom = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_PAD_BOTTOM); bg.x1 -= left; bg.x2 += right; bg.y1 -= top; @@ -1065,7 +1065,7 @@ static lv_design_res_t lv_label_design(lv_obj_t * label, const lv_area_t * clip_ lv_draw_rect_dsc_t draw_rect_dsc; lv_draw_rect_dsc_init(&draw_rect_dsc); - lv_obj_init_draw_rect_dsc(label, LV_LABEL_STYLE_MAIN, &draw_rect_dsc); + lv_obj_init_draw_rect_dsc(label, LV_LABEL_PART_MAIN, &draw_rect_dsc); lv_draw_rect(&bg, clip_area, &draw_rect_dsc); } @@ -1108,7 +1108,7 @@ static lv_design_res_t lv_label_design(lv_obj_t * label, const lv_area_t * clip_ label_draw_dsc.ofs_x = ext->offset.x; label_draw_dsc.ofs_y = ext->offset.y; label_draw_dsc.flag = flag; - lv_obj_init_draw_label_dsc(label, LV_LABEL_STYLE_MAIN, &label_draw_dsc); + lv_obj_init_draw_label_dsc(label, LV_LABEL_PART_MAIN, &label_draw_dsc); lv_draw_label(&coords, clip_area, &label_draw_dsc, ext->text, hint); @@ -1182,10 +1182,10 @@ static lv_res_t lv_label_signal(lv_obj_t * label, lv_signal_t sign, void * param } } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) { if(ext->body_draw) { - lv_coord_t left = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_PAD_LEFT); - lv_coord_t right = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_PAD_RIGHT); - lv_coord_t top = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_PAD_TOP); - lv_coord_t bottom = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_PAD_BOTTOM); + lv_coord_t left = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_PAD_LEFT); + lv_coord_t right = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_PAD_RIGHT); + lv_coord_t top = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_PAD_TOP); + lv_coord_t bottom = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_PAD_BOTTOM); label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, left); label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, right); label->ext_draw_pad = LV_MATH_MAX(label->ext_draw_pad, top); @@ -1222,9 +1222,9 @@ static void lv_label_refr_text(lv_obj_t * label) #endif lv_coord_t max_w = lv_obj_get_width(label); - const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_STYLE_MAIN, LV_STYLE_FONT); - lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LINE_SPACE); - lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_STYLE_MAIN, LV_STYLE_LETTER_SPACE); + const lv_font_t * font = lv_obj_get_style_ptr(label, LV_LABEL_PART_MAIN, LV_STYLE_FONT); + lv_style_value_t line_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LINE_SPACE); + lv_style_value_t letter_space = lv_obj_get_style_value(label, LV_LABEL_PART_MAIN, LV_STYLE_LETTER_SPACE); /*If the width will be expanded set the max length to very big */ if(ext->long_mode == LV_LABEL_LONG_EXPAND) { diff --git a/src/lv_objx/lv_label.h b/src/lv_objx/lv_label.h index dbd4f0262..036445ca2 100644 --- a/src/lv_objx/lv_label.h +++ b/src/lv_objx/lv_label.h @@ -103,10 +103,10 @@ typedef struct /** Label styles*/ enum { - LV_LABEL_STYLE_MAIN, + LV_LABEL_PART_MAIN, }; -typedef uint8_t lv_label_style_t; +typedef uint8_t lv_label_part_t; /********************** * GLOBAL PROTOTYPES diff --git a/src/lv_objx/lv_page.c b/src/lv_objx/lv_page.c index aa5706e74..629dc6479 100644 --- a/src/lv_objx/lv_page.c +++ b/src/lv_objx/lv_page.c @@ -45,8 +45,8 @@ **********************/ static void lv_page_sb_refresh(lv_obj_t * page); static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_area, lv_design_mode_t mode); -static lv_design_res_t lv_scrl_design(lv_obj_t * scrl, const lv_area_t * clisp_area, lv_design_mode_t mode); static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param); +static lv_style_dsc_t * lv_page_get_style(lv_obj_t * page, uint8_t type); static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void * param); static void scrl_def_event_cb(lv_obj_t * scrl, lv_event_t event); #if LV_USE_ANIMATION @@ -97,7 +97,7 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy) ext->scrl = NULL; ext->sb.hor_draw = 0; ext->sb.ver_draw = 0; - ext->sb.style = &lv_style_pretty; +// ext->sb.style = &lv_style_pretty; ext->sb.mode = LV_SB_MODE_AUTO; #if LV_USE_ANIMATION ext->edge_flash.enabled = 0; @@ -115,14 +115,13 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy) /*Init the new page object*/ if(copy == NULL) { ext->scrl = lv_cont_create(new_page, NULL); - lv_obj_set_signal_cb(ext->scrl, lv_page_scrollable_signal); - lv_obj_set_design_cb(ext->scrl, lv_scrl_design); lv_obj_set_drag(ext->scrl, true); lv_obj_set_drag_throw(ext->scrl, true); lv_obj_set_protect(ext->scrl, LV_PROTECT_PARENT | LV_PROTECT_PRESS_LOST); lv_cont_set_fit4(ext->scrl, LV_FIT_FILL, LV_FIT_FILL, LV_FIT_FILL, LV_FIT_FILL); lv_obj_set_event_cb(ext->scrl, scrl_def_event_cb); /*Propagate some event to the background object by default for convenience */ + lv_obj_set_signal_cb(ext->scrl, lv_page_scrollable_signal); /* Add the signal function only if 'scrolling' is created + * because everything has to be ready before any signal is received*/ @@ -131,21 +130,23 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy) lv_page_set_sb_mode(new_page, ext->sb.mode); + lv_obj_refresh_style(new_page, LV_OBJ_PART_ALL); + /*Set the default styles*/ lv_theme_t * th = lv_theme_get_current(); if(th) { if(par == NULL) { /*Different styles if it is screen*/ - lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.bg); - lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_transp); +// lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.bg); +// lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_transp); } else { - lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.page.bg); - lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, th->style.page.scrl); +// lv_page_set_style(new_page, LV_PAGE_STYLE_BG, th->style.page.bg); +// lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, th->style.page.scrl); } - lv_page_set_style(new_page, LV_PAGE_STYLE_SB, th->style.page.sb); +// lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL_BAR, th->style.page.sb); } else { - lv_page_set_style(new_page, LV_PAGE_STYLE_BG, &lv_style_pretty_color); - lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_pretty); - lv_page_set_style(new_page, LV_PAGE_STYLE_SB, &lv_style_pretty_color); +// lv_page_set_style(new_page, LV_PAGE_STYLE_BG, &lv_style_pretty_color); +// lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, &lv_style_pretty); +// lv_page_set_style(new_page, LV_PAGE_STYLE_SB, &lv_style_pretty_color); } } else { @@ -158,16 +159,14 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy) lv_obj_set_signal_cb(new_page, lv_page_signal); lv_obj_set_design_cb(new_page, lv_page_design); - lv_page_set_style(new_page, LV_PAGE_STYLE_BG, lv_page_get_style(copy, LV_PAGE_STYLE_BG)); - lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, lv_page_get_style(copy, LV_PAGE_STYLE_SCRL)); - lv_page_set_style(new_page, LV_PAGE_STYLE_SB, lv_page_get_style(copy, LV_PAGE_STYLE_SB)); +// lv_page_set_style(new_page, LV_PAGE_STYLE_BG, lv_page_get_style(copy, LV_PAGE_STYLE_BG)); +// lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, lv_page_get_style(copy, LV_PAGE_STYLE_SCRL)); +// lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL_BAR, lv_page_get_style(copy, LV_PAGE_STYLE_SCRL_BAR)); lv_page_set_sb_mode(new_page, copy_ext->sb.mode); - - /*Refresh the style with new signal function*/ - lv_obj_refresh_style(new_page); } + lv_page_sb_refresh(new_page); LV_LOG_INFO("page created"); @@ -274,35 +273,6 @@ void lv_page_set_edge_flash(lv_obj_t * page, bool en) #endif } -/** - * Set a style of a page - * @param page pointer to a page object - * @param type which style should be set - * @param style pointer to a style - * */ -void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t * style) -{ - LV_ASSERT_OBJ(page, LV_OBJX_NAME); - - lv_page_ext_t * ext = lv_obj_get_ext_attr(page); - - switch(type) { - case LV_PAGE_STYLE_BG: lv_obj_set_style(page, style); break; - case LV_PAGE_STYLE_SCRL: lv_obj_set_style(ext->scrl, style); break; - case LV_PAGE_STYLE_SB: - ext->sb.style = style; - lv_area_set_height(&ext->sb.hor_area, ext->sb.style->body.padding.inner); - lv_area_set_width(&ext->sb.ver_area, ext->sb.style->body.padding.inner); - lv_page_sb_refresh(page); - lv_obj_refresh_ext_draw_pad(page); - lv_obj_invalidate(page); - break; -#if LV_USE_ANIMATION - case LV_PAGE_STYLE_EDGE_FLASH: ext->edge_flash.style = style; break; -#endif - } -} - /*===================== * Getter functions *====================*/ @@ -392,11 +362,12 @@ lv_coord_t lv_page_get_fit_width(lv_obj_t * page) { LV_ASSERT_OBJ(page, LV_OBJX_NAME); - const lv_style_t * bg_style = lv_page_get_style(page, LV_PAGE_STYLE_BG); - const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL); + lv_style_value_t bg_left = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_LEFT); + lv_style_value_t bg_right = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_RIGHT); + lv_style_value_t scrl_left = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_LEFT); + lv_style_value_t scrl_right = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_RIGHT); - return lv_obj_get_width(page) - bg_style->body.padding.left - bg_style->body.padding.right - - scrl_style->body.padding.left - scrl_style->body.padding.right; + return lv_obj_get_width(page) - bg_left - bg_right - scrl_left - scrl_right; } /** @@ -408,37 +379,42 @@ lv_coord_t lv_page_get_fit_height(lv_obj_t * page) { LV_ASSERT_OBJ(page, LV_OBJX_NAME); - const lv_style_t * bg_style = lv_page_get_style(page, LV_PAGE_STYLE_BG); - const lv_style_t * scrl_style = lv_page_get_style(page, LV_PAGE_STYLE_SCRL); + lv_style_value_t bg_top = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_TOP); + lv_style_value_t bg_bottom = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_BOTTOM); + lv_style_value_t scrl_top = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_TOP); + lv_style_value_t scrl_bottom = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_BOTTOM); - return lv_obj_get_height(page) - bg_style->body.padding.top - bg_style->body.padding.bottom - - scrl_style->body.padding.top - scrl_style->body.padding.bottom; + return lv_obj_get_height(page) - bg_top - bg_bottom - scrl_top - scrl_bottom; } -/** - * Get a style of a page - * @param page pointer to page object - * @param type which style should be get - * @return style pointer to a style - * */ -const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type) + +static lv_style_dsc_t * lv_page_get_style(lv_obj_t * page, uint8_t type) { LV_ASSERT_OBJ(page, LV_OBJX_NAME); - const lv_style_t * style = NULL; - lv_page_ext_t * ext = lv_obj_get_ext_attr(page); + lv_page_ext_t * ext = lv_obj_get_ext_attr(page); + lv_style_dsc_t * style_dsc_p; switch(type) { - case LV_PAGE_STYLE_BG: style = lv_obj_get_style(page); break; - case LV_PAGE_STYLE_SCRL: style = lv_obj_get_style(ext->scrl); break; - case LV_PAGE_STYLE_SB: style = ext->sb.style; break; + case LV_PAGE_PART_BG: + style_dsc_p = &page->style_dsc; + break; + case LV_PAGE_PART_SCRL: + style_dsc_p = lv_obj_get_style(ext->scrl, LV_CONT_PART_MAIN); + break; + case LV_PAGE_PART_SCRL_BAR: + style_dsc_p = &ext->sb.style; + break; #if LV_USE_ANIMATION - case LV_PAGE_STYLE_EDGE_FLASH: style = ext->edge_flash.style; break; + case LV_PAGE_STYLE_EDGE_FLASH: + style_dsc_p = &ext->edge_flash.style; + break; #endif - default: style = NULL; break; + default: + style_dsc_p = NULL; } - return style; + return style_dsc_p; } /*===================== @@ -453,7 +429,6 @@ const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type */ bool lv_page_on_edge(lv_obj_t * page, lv_page_edge_t edge) { - const lv_style_t * page_style = lv_obj_get_style(page); lv_obj_t * scrl = lv_page_get_scrl(page); lv_area_t page_coords; lv_area_t scrl_coords; @@ -461,10 +436,15 @@ bool lv_page_on_edge(lv_obj_t * page, lv_page_edge_t edge) lv_obj_get_coords(scrl, &scrl_coords); lv_obj_get_coords(page, &page_coords); - if((edge & LV_PAGE_EDGE_TOP) && scrl_coords.y1 == page_coords.y1 + page_style->body.padding.top) return true; - if((edge & LV_PAGE_EDGE_BOTTOM) && scrl_coords.y2 == page_coords.y2 - page_style->body.padding.bottom) return true; - if((edge & LV_PAGE_EDGE_LEFT) && scrl_coords.x1 == page_coords.x1 + page_style->body.padding.left) return true; - if((edge & LV_PAGE_EDGE_RIGHT) && scrl_coords.x2 == page_coords.x2 - page_style->body.padding.right) return true; + lv_style_value_t left = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_LEFT); + lv_style_value_t right = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_RIGHT); + lv_style_value_t top = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_TOP); + lv_style_value_t bottom = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_BOTTOM); + + if((edge & LV_PAGE_EDGE_TOP) && scrl_coords.y1 == page_coords.y1 + top) return true; + if((edge & LV_PAGE_EDGE_BOTTOM) && scrl_coords.y2 == page_coords.y2 - bottom) return true; + if((edge & LV_PAGE_EDGE_LEFT) && scrl_coords.x1 == page_coords.x1 + left) return true; + if((edge & LV_PAGE_EDGE_RIGHT) && scrl_coords.x2 == page_coords.x2 - right) return true; return false; } @@ -499,8 +479,6 @@ void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, lv_anim_enable_t anim_ lv_anim_del(ext->scrl, (lv_anim_exec_xcb_t)lv_obj_set_y); #endif - const lv_style_t * style = lv_page_get_style(page, LV_PAGE_STYLE_BG); - const lv_style_t * style_scrl = lv_page_get_style(page, LV_PAGE_STYLE_SCRL); /*If obj is higher then the page focus where the "error" is smaller*/ lv_coord_t obj_y = obj->coords.y1 - ext->scrl->coords.y1; @@ -511,20 +489,26 @@ void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, lv_anim_enable_t anim_ lv_coord_t top_err = -(scrlable_y + obj_y); lv_coord_t bot_err = scrlable_y + obj_y + obj_h - page_h; + lv_style_value_t bg_top = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_TOP); + lv_style_value_t bg_bottom = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_BOTTOM); + lv_style_value_t scrl_top = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_TOP); + lv_style_value_t scrl_bottom = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_BOTTOM); + /*Out of the page on the top*/ if((obj_h <= page_h && top_err > 0) || (obj_h > page_h && top_err < bot_err)) { /*Calculate a new position and let some space above*/ - scrlable_y = -(obj_y - style_scrl->body.padding.top - style->body.padding.top); - scrlable_y += style_scrl->body.padding.top; + scrlable_y = -(obj_y - scrl_top - bg_top); + scrlable_y += scrl_top; } /*Out of the page on the bottom*/ else if((obj_h <= page_h && bot_err > 0) || (obj_h > page_h && top_err >= bot_err)) { /*Calculate a new position and let some space below*/ - scrlable_y = -(obj_y + style_scrl->body.padding.bottom + style->body.padding.bottom); - scrlable_y -= style_scrl->body.padding.bottom; + scrlable_y = -(obj_y + scrl_bottom + bg_bottom); + scrlable_y -= scrl_bottom; scrlable_y += page_h - obj_h; } + /*If obj is wider then the page focus where the "error" is smaller*/ lv_coord_t obj_x = obj->coords.x1 - ext->scrl->coords.x1; lv_coord_t obj_w = lv_obj_get_width(obj); @@ -534,17 +518,22 @@ void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, lv_anim_enable_t anim_ lv_coord_t left_err = -(scrlable_x + obj_x); lv_coord_t right_err = scrlable_x + obj_x + obj_w - page_w; + lv_style_value_t bg_left = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_LEFT); + lv_style_value_t bg_right = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_RIGHT); + lv_style_value_t scrl_left = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_LEFT); + lv_style_value_t scrl_right = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_RIGHT); + /*Out of the page on the left*/ if((obj_w <= page_w && left_err > 0) || (obj_w > page_w && left_err < right_err)) { - /*Calculate a new position and let some space above*/ - scrlable_x = -(obj_x - style_scrl->body.padding.left - style->body.padding.left); - scrlable_x += style_scrl->body.padding.left; + /*Calculate a new position and let some space on the side*/ + scrlable_x = -(obj_x - scrl_left - bg_left); + scrlable_x += scrl_left; } /*Out of the page on the rigth*/ else if((obj_w <= page_w && right_err > 0) || (obj_w > page_w && left_err >= right_err)) { - /*Calculate a new position and let some space below*/ - scrlable_x = -(obj_x + style_scrl->body.padding.right + style->body.padding.right); - scrlable_x -= style_scrl->body.padding.right; + /*Calculate a new position and let some space on teh side*/ + scrlable_x = -(obj_x + scrl_right + bg_right); + scrlable_x -= scrl_right; scrlable_x += page_w - obj_w; } @@ -697,32 +686,40 @@ static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_ar if(mode == LV_DESIGN_COVER_CHK) { return ancestor_design(page, clip_area, mode); } - /*Cache page bg style for temporary modification*/ - const lv_style_t * style = lv_page_get_style(page, LV_PAGE_STYLE_BG); - lv_style_t style_tmp; - lv_style_copy(&style_tmp, style); if(mode == LV_DESIGN_DRAW_MAIN) { - /*Draw without border*/ - style_tmp.body.border.width = 0; - lv_draw_rect(&page->coords, clip_area, &style_tmp, lv_obj_get_opa_scale(page)); + lv_draw_rect_dsc_t draw_dsc; + lv_draw_rect_dsc_init(&draw_dsc); + lv_obj_init_draw_rect_dsc(page, LV_PAGE_PART_BG, &draw_dsc); - if(style->body.corner_mask) { - style = lv_page_get_style(page, LV_PAGE_STYLE_BG); - lv_draw_mask_radius_param_t * mp = lv_mem_buf_get(sizeof(lv_draw_mask_radius_param_t));; - lv_draw_mask_radius_init(mp, &page->coords, style->body.radius, false); + /*Draw without border first*/ + draw_dsc.border_width = 0; + + lv_draw_rect(&page->coords, clip_area, &draw_dsc); + + if(lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_BG_CLIP_CORNER)) { + lv_draw_mask_radius_param_t * mp = lv_mem_buf_get(sizeof(lv_draw_mask_radius_param_t)); + + lv_coord_t r = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_RADIUS); + + lv_draw_mask_radius_init(mp, &page->coords, r, false); /*Add the mask and use `page+8` as custom id. Don't use `page` directly because it might be sued by the user*/ lv_draw_mask_add(mp, page + 8); } } else if(mode == LV_DESIGN_DRAW_POST) { - /*Draw only a border*/ - style_tmp.body.shadow.width = 0; - style_tmp.body.opa = LV_OPA_TRANSP; - lv_draw_rect(&page->coords, clip_area, &style_tmp, lv_obj_get_opa_scale(page)); + lv_draw_rect_dsc_t draw_dsc; + lv_draw_rect_dsc_init(&draw_dsc); + lv_obj_init_draw_rect_dsc(page, LV_PAGE_PART_BG, &draw_dsc); - lv_page_ext_t * ext = lv_obj_get_ext_attr(page); + /*Draw only a border. It ensures that the page looks "closed" even with overflowing scrollable*/ + draw_dsc.shadow_blur = 0; + draw_dsc.bg_opa = LV_OPA_TRANSP; + lv_draw_rect(&page->coords, clip_area, &draw_dsc); /*Draw the scrollbars*/ + lv_page_ext_t * ext = lv_obj_get_ext_attr(page); + lv_draw_rect_dsc_init(&draw_dsc); + lv_obj_init_draw_rect_dsc(page, LV_PAGE_PART_SCRL_BAR, &draw_dsc); lv_area_t sb_area; if(ext->sb.hor_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) { /*Convert the relative coordinates to absolute*/ @@ -731,7 +728,7 @@ static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_ar sb_area.y1 += page->coords.y1; sb_area.x2 += page->coords.x1; sb_area.y2 += page->coords.y1; - lv_draw_rect(&sb_area, clip_area, ext->sb.style, lv_obj_get_opa_scale(page)); + lv_draw_rect(&sb_area, clip_area, &draw_dsc); } if(ext->sb.ver_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) { @@ -741,7 +738,7 @@ static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_ar sb_area.y1 += page->coords.y1; sb_area.x2 += page->coords.x1; sb_area.y2 += page->coords.y1; - lv_draw_rect(&sb_area, clip_area, ext->sb.style, lv_obj_get_opa_scale(page)); + lv_draw_rect(&sb_area, clip_area, &draw_dsc); } #if LV_USE_ANIMATION @@ -794,57 +791,6 @@ static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_ar return LV_DESIGN_RES_OK; } -/** - * Handle the drawing related tasks of the scrollable object - * @param scrl pointer to an object - * @param clisp_area the object will be drawn only in this area - * @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area - * (return 'true' if yes) - * LV_DESIGN_DRAW: draw the object (always return 'true') - * LV_DESIGN_DRAW_POST: drawing after every children are drawn - * @param return an element of `lv_design_res_t` - */ -static lv_design_res_t lv_scrl_design(lv_obj_t * scrl, const lv_area_t * clisp_area, lv_design_mode_t mode) -{ - if(mode == LV_DESIGN_COVER_CHK) { - return ancestor_design(scrl, clisp_area, mode); - } else if(mode == LV_DESIGN_DRAW_MAIN) { -#if LV_USE_GROUP - /* If the page is focused in a group and - * the background object is not visible (transparent) - * then "activate" the style of the scrollable*/ - const lv_style_t * style_scrl_ori = lv_obj_get_style(scrl); - lv_obj_t * page = lv_obj_get_parent(scrl); - const lv_style_t * style_page = lv_obj_get_style(page); - lv_group_t * g = lv_obj_get_group(page); - if((style_page->body.opa == LV_OPA_TRANSP) && - style_page->body.border.width == 0) { /*Is the background visible?*/ - if(lv_group_get_focused(g) == page) { - lv_style_t * style_mod; - style_mod = lv_group_mod_style(g, style_scrl_ori); - /*If still not visible modify the style a littel bit*/ - if((style_mod->body.opa == LV_OPA_TRANSP) && style_mod->body.border.width == 0) { - style_mod->body.opa = LV_OPA_50; - style_mod->body.border.width = 1; - style_mod = lv_group_mod_style(g, style_mod); - } - - scrl->style_p = style_mod; /*Temporally change the style to the activated */ - } - } -#endif - ancestor_design(scrl, clisp_area, mode); - -#if LV_USE_GROUP - scrl->style_p = style_scrl_ori; /*Revert the style*/ -#endif - } else if(mode == LV_DESIGN_DRAW_POST) { - ancestor_design(scrl, clisp_area, mode); - } - - return LV_DESIGN_RES_OK; -} - /** * Signal function of the page * @param page pointer to a page object @@ -855,6 +801,12 @@ static lv_design_res_t lv_scrl_design(lv_obj_t * scrl, const lv_area_t * clisp_a static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) { lv_res_t res; + if(sign == LV_SIGNAL_GET_STYLE) { + uint8_t ** type_p = param; + lv_style_dsc_t ** style_dsc_p = param; + *style_dsc_p = lv_page_get_style(page, **type_p); + return LV_RES_OK; + } /* Include the ancient signal function */ res = ancestor_signal(page, sign, param); @@ -875,12 +827,15 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) /*Automatically move children to the scrollable object*/ else if(sign == LV_SIGNAL_CHILD_CHG) { lv_obj_t * child; - const lv_style_t * style_scrl = lv_page_get_style(page, LV_PAGE_STYLE_SCRL); lv_fit_t fit_left = lv_page_get_scrl_fit_left(page); lv_fit_t fit_right = lv_page_get_scrl_fit_right(page); lv_fit_t fit_top = lv_page_get_scrl_fit_top(page); lv_bidi_dir_t base_dir = lv_obj_get_base_dir(page); + lv_style_value_t scrl_left = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_LEFT); + lv_style_value_t scrl_right = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_RIGHT); + lv_style_value_t scrl_top = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL, LV_STYLE_PAD_TOP); + child = lv_obj_get_child(page, NULL); while(child != NULL) { if(lv_obj_is_protected(child, LV_PROTECT_PARENT) == false) { @@ -892,18 +847,18 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) if((tmp->coords.x1 == page->coords.x1) && (fit_left == LV_FIT_TIGHT || fit_left == LV_FIT_FILL) && base_dir != LV_BIDI_DIR_RTL) { - tmp->coords.x1 += style_scrl->body.padding.left; - tmp->coords.x2 += style_scrl->body.padding.left; + tmp->coords.x1 += scrl_left; + tmp->coords.x2 += scrl_left; } else if((tmp->coords.x2 == page->coords.x2) && (fit_right == LV_FIT_TIGHT || fit_right == LV_FIT_FILL) && base_dir == LV_BIDI_DIR_RTL) { - tmp->coords.x1 -= style_scrl->body.padding.right; - tmp->coords.x2 -= style_scrl->body.padding.right; + tmp->coords.x1 -= scrl_right; + tmp->coords.x2 -= scrl_right; } if((tmp->coords.y1 == page->coords.y1) && (fit_top == LV_FIT_TIGHT || fit_top == LV_FIT_FILL)) { - tmp->coords.y1 += style_scrl->body.padding.top; - tmp->coords.y2 += style_scrl->body.padding.top; + tmp->coords.y1 += scrl_top; + tmp->coords.y2 += scrl_top; } lv_obj_set_parent(tmp, ext->scrl); } else { @@ -913,6 +868,10 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) } else if(sign == LV_SIGNAL_STYLE_CHG) { ext->scrl->signal_cb(ext->scrl, LV_SIGNAL_CORD_CHG, &ext->scrl->coords); + lv_style_value_t sb_width = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL_BAR, LV_STYLE_SCROLLBAR_WIDTH); + lv_area_set_height(&ext->sb.hor_area, sb_width); + lv_area_set_width(&ext->sb.ver_area, sb_width); + /*The scrollbars are important only if they are visible now*/ if(ext->sb.hor_draw || ext->sb.ver_draw) lv_page_sb_refresh(page); @@ -929,11 +888,13 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) if(ext->sb.hor_draw || ext->sb.ver_draw) lv_page_sb_refresh(page); } } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) { + + lv_style_value_t sb_bottom = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL_BAR, LV_STYLE_PAD_BOTTOM); + lv_style_value_t sb_right = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL_BAR, LV_STYLE_PAD_RIGHT); + /*Ensure ext. size for the scrollbars if they are out of the page*/ - if(page->ext_draw_pad < (-ext->sb.style->body.padding.right)) - page->ext_draw_pad = -ext->sb.style->body.padding.right; - if(page->ext_draw_pad < (-ext->sb.style->body.padding.bottom)) - page->ext_draw_pad = -ext->sb.style->body.padding.bottom; + if(page->ext_draw_pad < (-sb_right)) page->ext_draw_pad = -sb_right; + if(page->ext_draw_pad < (-sb_bottom)) page->ext_draw_pad = -sb_bottom; } else if(sign == LV_SIGNAL_CONTROL) { uint32_t c = *((uint32_t *)param); @@ -973,6 +934,11 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) */ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, void * param) { + + if(sign == LV_SIGNAL_GET_STYLE) { + return ancestor_signal(scrl, sign, param); + } + lv_res_t res; /* Include the ancient signal function */ @@ -981,7 +947,6 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, ""); lv_obj_t * page = lv_obj_get_parent(scrl); - const lv_style_t * page_style = lv_obj_get_style(page); lv_page_ext_t * page_ext = lv_obj_get_ext_attr(page); if(sign == LV_SIGNAL_CORD_CHG) { @@ -996,8 +961,6 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi lv_obj_get_coords(scrl, &scrl_coords); lv_obj_get_coords(page, &page_coords); - lv_coord_t hpad = page_style->body.padding.left + page_style->body.padding.right; - lv_coord_t vpad = page_style->body.padding.top + page_style->body.padding.bottom; lv_obj_t * page_parent = lv_obj_get_parent(page); /*Handle scroll propagation*/ @@ -1027,41 +990,44 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi } } + lv_style_value_t left = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_LEFT); + lv_style_value_t right = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_RIGHT); + lv_style_value_t top = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_TOP); + lv_style_value_t bottom = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_BOTTOM); + /*scrollable width smaller then page width? -> align to left*/ - if(lv_area_get_width(&scrl_coords) + hpad <= lv_area_get_width(&page_coords)) { - if(scrl_coords.x1 != page_coords.x1 + page_style->body.padding.left) { - new_x = page_style->body.padding.left; + if(lv_area_get_width(&scrl_coords) + left +right <= lv_area_get_width(&page_coords)) { + if(scrl_coords.x1 != page_coords.x1 + left) { + new_x = left; refr_x = true; } } else { /*The edges of the scrollable can not be in the page (minus hpad) */ - if(scrl_coords.x2 < page_coords.x2 - page_style->body.padding.right) { - new_x = lv_area_get_width(&page_coords) - lv_area_get_width(&scrl_coords) - - page_style->body.padding.right; /* Right align */ + if(scrl_coords.x2 < page_coords.x2 - right) { + new_x = lv_area_get_width(&page_coords) - lv_area_get_width(&scrl_coords) - right; /* Right align */ refr_x = true; lv_page_start_edge_flash(page, LV_PAGE_EDGE_RIGHT); - } else if(scrl_coords.x1 > page_coords.x1 + page_style->body.padding.left) { - new_x = page_style->body.padding.left; /*Left align*/ + } else if(scrl_coords.x1 > page_coords.x1 + left) { + new_x = left; /*Left align*/ refr_x = true; lv_page_start_edge_flash(page, LV_PAGE_EDGE_LEFT); } } /*scrollable height smaller then page height? -> align to top*/ - if(lv_area_get_height(&scrl_coords) + vpad <= lv_area_get_height(&page_coords)) { - if(scrl_coords.y1 != page_coords.y1 + page_style->body.padding.top) { - new_y = page_style->body.padding.top; + if(lv_area_get_height(&scrl_coords) + top + bottom <= lv_area_get_height(&page_coords)) { + if(scrl_coords.y1 != page_coords.y1 + top) { + new_y = top; refr_y = true; } } else { /*The edges of the scrollable can not be in the page (minus vpad) */ - if(scrl_coords.y2 < page_coords.y2 - page_style->body.padding.bottom) { - new_y = lv_area_get_height(&page_coords) - lv_area_get_height(&scrl_coords) - - page_style->body.padding.bottom; /* Bottom align */ + if(scrl_coords.y2 < page_coords.y2 - bottom) { + new_y = lv_area_get_height(&page_coords) - lv_area_get_height(&scrl_coords) - bottom; /* Bottom align */ refr_y = true; lv_page_start_edge_flash(page, LV_PAGE_EDGE_BOTTOM); - } else if(scrl_coords.y1 > page_coords.y1 + page_style->body.padding.top) { - new_y = page_style->body.padding.top; /*Top align*/ + } else if(scrl_coords.y1 > page_coords.y1 + top) { + new_y = top; /*Top align*/ refr_y = true; lv_page_start_edge_flash(page, LV_PAGE_EDGE_TOP); } @@ -1149,7 +1115,6 @@ static void scrl_def_event_cb(lv_obj_t * scrl, lv_event_t event) static void lv_page_sb_refresh(lv_obj_t * page) { lv_page_ext_t * ext = lv_obj_get_ext_attr(page); - const lv_style_t * style = lv_obj_get_style(page); lv_obj_t * scrl = ext->scrl; lv_coord_t size_tmp; lv_coord_t scrl_w = lv_obj_get_width(scrl); @@ -1157,12 +1122,21 @@ static void lv_page_sb_refresh(lv_obj_t * page) lv_coord_t obj_w = lv_obj_get_width(page); lv_coord_t obj_h = lv_obj_get_height(page); + lv_style_value_t sb_width = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL_BAR, LV_STYLE_SCROLLBAR_WIDTH); + lv_style_value_t sb_right = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL_BAR, LV_STYLE_PAD_RIGHT); + lv_style_value_t sb_bottom = lv_obj_get_style_value(page, LV_PAGE_PART_SCRL_BAR, LV_STYLE_PAD_BOTTOM); + + lv_style_value_t bg_left = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_LEFT); + lv_style_value_t bg_right = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_RIGHT); + lv_style_value_t bg_top = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_TOP); + lv_style_value_t bg_bottom = lv_obj_get_style_value(page, LV_PAGE_PART_BG, LV_STYLE_PAD_BOTTOM); + /*Always let 'scrollbar width' padding above, under, left and right to the scrollbars * else: * - horizontal and vertical scrollbars can overlap on the corners * - if the page has radius the scrollbar can be out of the radius */ - lv_coord_t sb_hor_pad = LV_MATH_MAX(ext->sb.style->body.padding.inner, style->body.padding.right); - lv_coord_t sb_ver_pad = LV_MATH_MAX(ext->sb.style->body.padding.inner, style->body.padding.bottom); + lv_coord_t sb_hor_pad = LV_MATH_MAX(sb_width, sb_right); + lv_coord_t sb_ver_pad = LV_MATH_MAX(sb_width, sb_bottom); if(ext->sb.mode == LV_SB_MODE_OFF) return; @@ -1198,47 +1172,47 @@ static void lv_page_sb_refresh(lv_obj_t * page) } /*Full sized horizontal scrollbar*/ - if(scrl_w <= obj_w - style->body.padding.left - style->body.padding.right) { + if(scrl_w <= obj_w - bg_left - bg_right) { lv_area_set_width(&ext->sb.hor_area, obj_w - 2 * sb_hor_pad); lv_area_set_pos(&ext->sb.hor_area, sb_hor_pad, - obj_h - ext->sb.style->body.padding.inner - ext->sb.style->body.padding.bottom); + obj_h - sb_width - sb_bottom); if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.hor_draw = 0; } /*Smaller horizontal scrollbar*/ else { size_tmp = - (obj_w * (obj_w - (2 * sb_hor_pad))) / (scrl_w + style->body.padding.left + style->body.padding.right); + (obj_w * (obj_w - (2 * sb_hor_pad))) / (scrl_w + bg_left + bg_right); if(size_tmp < LV_PAGE_SB_MIN_SIZE) size_tmp = LV_PAGE_SB_MIN_SIZE; lv_area_set_width(&ext->sb.hor_area, size_tmp); lv_area_set_pos(&ext->sb.hor_area, sb_hor_pad + - (-(lv_obj_get_x(scrl) - style->body.padding.left) * (obj_w - size_tmp - 2 * sb_hor_pad)) / - (scrl_w + style->body.padding.left + style->body.padding.right - obj_w), - obj_h - ext->sb.style->body.padding.inner - ext->sb.style->body.padding.bottom); + (-(lv_obj_get_x(scrl) -bg_left) * (obj_w - size_tmp - 2 * sb_hor_pad)) / + (scrl_w + bg_left + sb_right - obj_w), + obj_h - sb_width - sb_bottom); if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.hor_draw = 1; } /*Full sized vertical scroll bar*/ - if(scrl_h <= obj_h - style->body.padding.top - style->body.padding.bottom) { + if(scrl_h <= obj_h - bg_top - bg_bottom) { lv_area_set_height(&ext->sb.ver_area, obj_h - 2 * sb_ver_pad); lv_area_set_pos(&ext->sb.ver_area, - obj_w - ext->sb.style->body.padding.inner - ext->sb.style->body.padding.right, sb_ver_pad); + obj_w - sb_width - sb_right, sb_ver_pad); if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.ver_draw = 0; } /*Smaller vertical scroll bar*/ else { size_tmp = - (obj_h * (obj_h - (2 * sb_ver_pad))) / (scrl_h + style->body.padding.top + style->body.padding.bottom); + (obj_h * (obj_h - (2 * sb_ver_pad))) / (scrl_h + bg_top + bg_bottom); if(size_tmp < LV_PAGE_SB_MIN_SIZE) size_tmp = LV_PAGE_SB_MIN_SIZE; lv_area_set_height(&ext->sb.ver_area, size_tmp); lv_area_set_pos(&ext->sb.ver_area, - obj_w - ext->sb.style->body.padding.inner - ext->sb.style->body.padding.right, - sb_ver_pad + (-(lv_obj_get_y(scrl) - ext->sb.style->body.padding.bottom) * + obj_w - sb_width - sb_right, + sb_ver_pad + (-(lv_obj_get_y(scrl) - sb_bottom) * (obj_h - size_tmp - 2 * sb_ver_pad)) / - (scrl_h + style->body.padding.top + style->body.padding.bottom - obj_h)); + (scrl_h + bg_top + bg_bottom - obj_h)); if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.ver_draw = 1; } diff --git a/src/lv_objx/lv_page.h b/src/lv_objx/lv_page.h index f11ce0158..94889b24f 100644 --- a/src/lv_objx/lv_page.h +++ b/src/lv_objx/lv_page.h @@ -57,7 +57,7 @@ typedef struct lv_obj_t * scrl; /*The scrollable object on the background*/ struct { - const lv_style_t * style; /*Style of scrollbars*/ + lv_style_dsc_t style; /*Style of scrollbars*/ lv_area_t hor_area; /*Horizontal scrollbar area relative to the page. (Handled by the library) */ lv_area_t ver_area; /*Vertical scrollbar area relative to the page (Handled by the library)*/ uint8_t hor_draw : 1; /*1: horizontal scrollbar is visible now (Handled by the library)*/ @@ -68,7 +68,7 @@ typedef struct struct { lv_anim_value_t state; /*Store the current size of the edge flash effect*/ - const lv_style_t * style; /*Style of edge flash effect (usually homogeneous circle)*/ + lv_style_dsc_t style; /*Style of edge flash effect (usually homogeneous circle)*/ uint8_t enabled : 1; /*1: Show a flash animation on the edge*/ uint8_t top_ip : 1; /*Used internally to show that top most position is reached (flash is In Progress)*/ @@ -87,12 +87,12 @@ typedef struct } lv_page_ext_t; enum { - LV_PAGE_STYLE_BG, - LV_PAGE_STYLE_SCRL, - LV_PAGE_STYLE_SB, - LV_PAGE_STYLE_EDGE_FLASH, + LV_PAGE_PART_BG, + LV_PAGE_PART_SCRL, + LV_PAGE_PART_SCRL_BAR, + LV_PAGE_PART_EDGE_FLASH, }; -typedef uint8_t lv_page_style_t; +typedef uint8_t lv_part_style_t; /********************** * GLOBAL PROTOTYPES @@ -228,14 +228,6 @@ static inline void lv_page_set_scrl_layout(lv_obj_t * page, lv_layout_t layout) lv_cont_set_layout(lv_page_get_scrl(page), layout); } -/** - * Set a style of a page - * @param page pointer to a page object - * @param type which style should be set - * @param style pointer to a style - */ -void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, const lv_style_t * style); - /*===================== * Getter functions *====================*/ @@ -345,14 +337,6 @@ static inline lv_fit_t lv_page_get_scrl_fit_bottom(const lv_obj_t * page) return lv_cont_get_fit_bottom(lv_page_get_scrl(page)); } -/** - * Get a style of a page - * @param page pointer to page object - * @param type which style should be get - * @return style pointer to a style - */ -const lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type); - /*===================== * Other functions *====================*/ diff --git a/src/lv_objx/lv_tabview.h b/src/lv_objx/lv_tabview.h index 826226e1e..e94619d8f 100644 --- a/src/lv_objx/lv_tabview.h +++ b/src/lv_objx/lv_tabview.h @@ -69,11 +69,6 @@ typedef struct enum { LV_TABVIEW_STYLE_BG, LV_TABVIEW_STYLE_INDIC, - LV_TABVIEW_STYLE_BTN_BG, - LV_TABVIEW_STYLE_BTN_REL, - LV_TABVIEW_STYLE_BTN_PR, - LV_TABVIEW_STYLE_BTN_TGL_REL, - LV_TABVIEW_STYLE_BTN_TGL_PR, }; typedef uint8_t lv_tabview_style_t;