From 4fe3821719a1c3ae0fb34eaa68d24668faf193de Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Sat, 19 Dec 2020 06:51:14 +0100 Subject: [PATCH] add color filter style property --- scripts/style_api_gen.py | 98 ++++++++++++++++ src/lv_core/lv_obj_draw.c | 6 +- src/lv_core/lv_obj_style.c | 43 ++++--- src/lv_core/lv_obj_style.h | 31 ++++- src/lv_core/lv_style.c | 32 +++++- src/lv_core/lv_style.h | 51 ++++++++- src/lv_misc/lv_color.c | 8 ++ src/lv_misc/lv_color.h | 5 + src/lv_themes/lv_theme_default.c | 187 +++++++++++++++++-------------- src/lv_widgets/lv_bar.c | 33 +++--- src/lv_widgets/lv_bar.h | 9 -- src/lv_widgets/lv_slider.c | 78 ++++--------- src/lv_widgets/lv_slider.h | 9 +- 13 files changed, 394 insertions(+), 196 deletions(-) create mode 100755 scripts/style_api_gen.py diff --git a/scripts/style_api_gen.py b/scripts/style_api_gen.py new file mode 100755 index 000000000..1b811b5ef --- /dev/null +++ b/scripts/style_api_gen.py @@ -0,0 +1,98 @@ +props = [ +{'name': 'RADIUS', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'CLIP_CORNER', 'style_type': '_int', 'var_type': 'bool' }, +{'name': 'TRANSFORM_WIDTH', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'TRANSFORM_HEIGHT', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'TRANSFORM_ZOOM', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'TRANSFORM_ANGLE', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'COLOR_FILTER_CB', 'style_type': '_func', 'var_type': 'lv_color_filter_cb_t' }, +{'name': 'COLOR_FILTER_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'PAD_TOP', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'PAD_BOTTOM', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'PAD_LEFT', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'PAD_RIGHT', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'MARGIN_TOP', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'MARGIN_BOTTOM', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'MARGIN_LEFT', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'MARGIN_RIGHT', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'BG_COLOR', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'BG_COLOR_FILTERED', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'BG_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'BG_GRAD_COLOR', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'BG_GRAD_COLOR_FILTERED', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'BG_GRAD_DIR', 'style_type': '_int', 'var_type': 'lv_grad_dir_t' }, +{'name': 'BG_BLEND_MODE', 'style_type': '_int', 'var_type': 'lv_blend_mode_t' }, +{'name': 'BG_MAIN_STOP', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'BG_GRAD_STOP', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'BORDER_COLOR', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'BORDER_COLOR_FILTERED', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'BORDER_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'BORDER_WIDTH', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'BORDER_SIDE', 'style_type': '_int', 'var_type': 'lv_border_side_t' }, +{'name': 'BORDER_POST', 'style_type': '_int', 'var_type': 'bool' }, +{'name': 'BORDER_BLEND_MODE', 'style_type': '_int', 'var_type': 'lv_blend_mode_t' }, +{'name': 'TEXT_COLOR', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'TEXT_COLOR_FILTERED', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'TEXT_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'TEXT_FONT', 'style_type': '_ptr', 'var_type': 'const lv_font_t *' }, +{'name': 'TEXT_LETTER_SPACE', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'TEXT_LINE_SPACE', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'TEXT_DECOR', 'style_type': '_int', 'var_type': 'lv_text_decor_t' }, +{'name': 'TEXT_BLEND_MODE', 'style_type': '_int', 'var_type': 'lv_blend_mode_t' }, +{'name': 'IMG_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'IMG_BLEND_MODE', 'style_type': '_int', 'var_type': 'lv_blend_mode_t' }, +{'name': 'IMG_RECOLOR', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'IMG_RECOLOR_FILTERED', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'IMG_RECOLOR_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'OUTLINE_WIDTH', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'OUTLINE_COLOR', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'OUTLINE_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'OUTLINE_PAD', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'OUTLINE_BLEND_MODE', 'style_type': '_int', 'var_type': 'lv_blend_mode_t' }, +{'name': 'SHADOW_WIDTH', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'SHADOW_OFS_X', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'SHADOW_OFS_Y', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'SHADOW_SPREAD', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'SHADOW_BLEND_MODE', 'style_type': '_int', 'var_type': 'lv_blend_mode_t' }, +{'name': 'SHADOW_COLOR', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'SHADOW_COLOR_FILTERED', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'SHADOW_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'LINE_WIDTH', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'LINE_BLEND_MODE', 'style_type': '_int', 'var_type': 'lv_blend_mode_t' }, +{'name': 'LINE_DASH_WIDTH', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'LINE_DASH_GAP', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'LINE_ROUNDED', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'LINE_COLOR', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'LINE_COLOR_FILTERED', 'style_type': '_color', 'var_type': 'lv_color_t' }, +{'name': 'LINE_OPA', 'style_type': '_int', 'var_type': 'lv_opa_t' }, +{'name': 'CONTENT_SRC', 'style_type': '_ptr', 'var_type': 'const char *' }, +{'name': 'CONTENT_ALIGN', 'style_type': '_int', 'var_type': 'lv_align_t' }, +{'name': 'CONTENT_OFS_X', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'CONTENT_OFS_Y', 'style_type': '_int', 'var_type': 'lv_coord_t' }, +{'name': 'TRANSITION_TIME', 'style_type': '_int', 'var_type': 'uint16_t' }, +{'name': 'TRANSITION_DELAY', 'style_type': '_int', 'var_type': 'uint16_t' }, +{'name': 'TRANSITION_PATH', 'style_type': '_ptr', 'var_type': 'const lv_anim_path_t *' }, +{'name': 'TRANSITION_PROP_1', 'style_type': '_int', 'var_type': 'lv_style_prop_t' }, +{'name': 'TRANSITION_PROP_2', 'style_type': '_int', 'var_type': 'lv_style_prop_t' }, +{'name': 'TRANSITION_PROP_3', 'style_type': '_int', 'var_type': 'lv_style_prop_t' }, +{'name': 'TRANSITION_PROP_4', 'style_type': '_int', 'var_type': 'lv_style_prop_t' }, +{'name': 'TRANSITION_PROP_5', 'style_type': '_int', 'var_type': 'lv_style_prop_t' }, +{'name': 'TRANSITION_PROP_6', 'style_type': '_int', 'var_type': 'lv_style_prop_t' } +] + +def obj_style_get(i): + print("static inline " + props[i]['var_type'] + " lv_obj_get_style_" + props[i]['name'].lower() +"(const struct _lv_obj_t * obj, uint32_t part) {") + print(" lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_" + props[i]['name'] + "); return v." + props[i][ 'style_type'] + "; }") + print("") + + +def style_set(i): + print("static inline void lv_style_set_" + props[i]['name'].lower() +"(lv_style_t * style, "+ props[i]['var_type'] +" value) {") + print(" lv_style_value_t v = {." + props[i][ 'style_type'] +" = value}; lv_style_set_prop(style, LV_STYLE_" + props[i]['name'] +", v); }") + print("") + + + +for i in range(len(props)): + obj_style_get(i) diff --git a/src/lv_core/lv_obj_draw.c b/src/lv_core/lv_obj_draw.c index cace931b2..a89c23a40 100644 --- a/src/lv_core/lv_obj_draw.c +++ b/src/lv_core/lv_obj_draw.c @@ -68,7 +68,7 @@ void lv_obj_init_draw_rect_dsc(lv_obj_t * obj, uint8_t part, lv_draw_rect_dsc_t if(draw_dsc->bg_opa != LV_OPA_TRANSP) { draw_dsc->bg_opa = lv_obj_get_style_bg_opa(obj, part); if(draw_dsc->bg_opa > LV_OPA_MIN) { - draw_dsc->bg_color = lv_obj_get_style_bg_color(obj, part); + draw_dsc->bg_color = lv_obj_get_style_bg_color_filtered(obj, part); draw_dsc->bg_grad_dir = lv_obj_get_style_bg_grad_dir(obj, part); if(draw_dsc->bg_grad_dir != LV_GRAD_DIR_NONE) { draw_dsc->bg_grad_color = lv_obj_get_style_bg_grad_color(obj, part); @@ -115,7 +115,7 @@ void lv_obj_init_draw_rect_dsc(lv_obj_t * obj, uint8_t part, lv_draw_rect_dsc_t #if LV_USE_PATTERN if(draw_dsc->content_opa != LV_OPA_TRANSP) { - draw_dsc->content_src = lv_obj_get_style_content_text(obj, part); + draw_dsc->content_src = lv_obj_get_style_content_src(obj, part); if(draw_dsc->content_src) { draw_dsc->content_ofs_y = lv_obj_get_style_content_ofs_y(obj, part); draw_dsc->content_ofs_x = lv_obj_get_style_content_ofs_x(obj, part); @@ -331,7 +331,7 @@ lv_coord_t _lv_obj_get_draw_rect_ext_pad_size(lv_obj_t * obj, uint8_t part) } } - const void * content_src = lv_obj_get_style_content_text(obj, part); + const void * content_src = lv_obj_get_style_content_src(obj, part); if(content_src) { lv_opa_t content_opa; lv_point_t content_size; diff --git a/src/lv_core/lv_obj_style.c b/src/lv_core/lv_obj_style.c index 196626d57..8f5101126 100644 --- a/src/lv_core/lv_obj_style.c +++ b/src/lv_core/lv_obj_style.c @@ -70,14 +70,6 @@ static void trans_anim_ready_cb(lv_anim_t * a); static void fade_anim_cb(lv_obj_t * obj, lv_anim_value_t v); static void fade_in_anim_ready(lv_anim_t * a); #endif -static void style_snapshot(lv_obj_t * obj, uint8_t part, style_snapshot_t * shot); -static _lv_style_state_cmp_t style_snapshot_compare(style_snapshot_t * shot1, style_snapshot_t * shot2); - -#if LV_STYLE_CACHE_LEVEL >= 1 -static bool style_prop_is_cacheable(lv_style_property_t prop); -static void update_style_cache(lv_obj_t * obj, uint8_t part, uint16_t prop); -static void update_style_cache_children(lv_obj_t * obj); -#endif /********************** * STATIC VARIABLES @@ -290,6 +282,16 @@ void lv_obj_fade_out(lv_obj_t * obj, uint32_t time, uint32_t delay) } #endif +static lv_style_value_t apply_color_filter(const lv_obj_t * obj, uint32_t part, lv_style_value_t v) +{ + if(obj == NULL) return v; + lv_color_filter_cb_t f = lv_obj_get_style_color_filter_cb(obj, part); + if(f) { + lv_opa_t f_opa = lv_obj_get_style_color_filter_opa(obj, part); + if(f_opa != 0) v._color = f(v._color, f_opa); + } + return v; +} /** * Get a style property of a part of an object in the object's current state. @@ -311,6 +313,7 @@ lv_style_value_t lv_obj_get_style_prop(const lv_obj_t * obj, uint8_t part, lv_st lv_style_value_t value_final; bool found = false; bool inherit = prop & LV_STYLE_PROP_INHERIT ? true : false; + bool filter = prop & LV_STYLE_PROP_FILTER ? true : false; const lv_obj_t * parent = obj; while(parent) { int32_t weight = -1; @@ -324,7 +327,10 @@ lv_style_value_t lv_obj_get_style_prop(const lv_obj_t * obj, uint8_t part, lv_st if(skip_trans) continue; if(obj_style->part != part) continue; found = lv_style_get_prop(obj_style->style, prop, &value_act); - if(found) return value_act; + if(found) { + if(filter) value_act = apply_color_filter(parent, part, value_act); + return value_act; + } } for(; i < parent->style_list.style_cnt; i++) { @@ -341,14 +347,20 @@ lv_style_value_t lv_obj_get_style_prop(const lv_obj_t * obj, uint8_t part, lv_st found = lv_style_get_prop(obj_style->style, prop, &value_act); if(found) { - if(obj_style->state == state) return value_act; + if(obj_style->state == state) { + if(filter) value_act = apply_color_filter(parent, part, value_act); + return value_act; + } if(weight < obj_style->state) { weight = obj_style->state; value_final = value_act; } } } - if(weight >= 0) return value_final; + if(weight >= 0) { + if(filter) value_final = apply_color_filter(parent, part, value_final); + return value_final; + } if(!inherit) break; /*If not found, check the `MAIN` style first*/ @@ -361,7 +373,9 @@ lv_style_value_t lv_obj_get_style_prop(const lv_obj_t * obj, uint8_t part, lv_st parent = lv_obj_get_parent(parent); } - return lv_style_prop_get_default(prop); + value_act = lv_style_prop_get_default(prop); + if(filter) value_act = apply_color_filter(parent, part, value_act); + return value_act; } /** @@ -712,11 +726,12 @@ static void trans_anim_cb(lv_style_trans_t * tr, lv_anim_value_t v) case LV_STYLE_SHADOW_BLEND_MODE: case LV_STYLE_TEXT_BLEND_MODE: case LV_STYLE_LINE_BLEND_MODE: - if(v < 128) value_final._int = tr->start_value._int; + if(v < 255) value_final._int = tr->start_value._int; else value_final._int = tr->end_value._int; break; case LV_STYLE_TEXT_FONT: - if(v < 128) value_final._ptr = tr->start_value._ptr; + case LV_STYLE_COLOR_FILTER_CB: + if(v < 255) value_final._ptr = tr->start_value._ptr; else value_final._ptr = tr->end_value._ptr; break; diff --git a/src/lv_core/lv_obj_style.h b/src/lv_core/lv_obj_style.h index d209e8532..712dfa566 100644 --- a/src/lv_core/lv_obj_style.h +++ b/src/lv_core/lv_obj_style.h @@ -164,6 +164,7 @@ _lv_style_state_cmp_t _lv_obj_style_state_compare(struct _lv_obj_t * obj, lv_sta /********************* * OBJ STYLE GET *********************/ + static inline lv_coord_t lv_obj_get_style_radius(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_RADIUS); return v._int; } @@ -185,6 +186,12 @@ static inline lv_coord_t lv_obj_get_style_transform_angle(const struct _lv_obj_t static inline lv_opa_t lv_obj_get_style_opa(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_OPA); return v._int; } +static inline lv_color_filter_cb_t lv_obj_get_style_color_filter_cb(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_COLOR_FILTER_CB); return (lv_color_filter_cb_t)v._func; } + +static inline lv_opa_t lv_obj_get_style_color_filter_opa(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_COLOR_FILTER_OPA); return v._int; } + static inline lv_coord_t lv_obj_get_style_pad_top(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_PAD_TOP); return v._int; } @@ -212,12 +219,18 @@ static inline lv_coord_t lv_obj_get_style_margin_right(const struct _lv_obj_t * static inline lv_color_t lv_obj_get_style_bg_color(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_COLOR); return v._color; } +static inline lv_color_t lv_obj_get_style_bg_color_filtered(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_COLOR_FILTERED); return v._color; } + static inline lv_opa_t lv_obj_get_style_bg_opa(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_OPA); return v._int; } static inline lv_color_t lv_obj_get_style_bg_grad_color(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_GRAD_COLOR); return v._color; } +static inline lv_color_t lv_obj_get_style_bg_grad_color_filtered(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_GRAD_COLOR_FILTERED); return v._color; } + static inline lv_grad_dir_t lv_obj_get_style_bg_grad_dir(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BG_GRAD_DIR); return v._int; } @@ -233,6 +246,9 @@ static inline lv_coord_t lv_obj_get_style_bg_grad_stop(const struct _lv_obj_t * static inline lv_color_t lv_obj_get_style_border_color(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BORDER_COLOR); return v._color; } +static inline lv_color_t lv_obj_get_style_border_color_filtered(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BORDER_COLOR_FILTERED); return v._color; } + static inline lv_opa_t lv_obj_get_style_border_opa(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_BORDER_OPA); return v._int; } @@ -251,6 +267,9 @@ static inline lv_blend_mode_t lv_obj_get_style_border_blend_mode(const struct _l static inline lv_color_t lv_obj_get_style_text_color(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_TEXT_COLOR); return v._color; } +static inline lv_color_t lv_obj_get_style_text_color_filtered(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_TEXT_COLOR_FILTERED); return v._color; } + static inline lv_opa_t lv_obj_get_style_text_opa(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_TEXT_OPA); return v._int; } @@ -278,6 +297,9 @@ static inline lv_blend_mode_t lv_obj_get_style_img_blend_mode(const struct _lv_o static inline lv_color_t lv_obj_get_style_img_recolor(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_IMG_RECOLOR); return v._color; } +static inline lv_color_t lv_obj_get_style_img_recolor_filtered(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_IMG_RECOLOR_FILTERED); return v._color; } + static inline lv_opa_t lv_obj_get_style_img_recolor_opa(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_IMG_RECOLOR_OPA); return v._int; } @@ -314,6 +336,9 @@ static inline lv_blend_mode_t lv_obj_get_style_shadow_blend_mode(const struct _l static inline lv_color_t lv_obj_get_style_shadow_color(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_SHADOW_COLOR); return v._color; } +static inline lv_color_t lv_obj_get_style_shadow_color_filtered(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_SHADOW_COLOR_FILTERED); return v._color; } + static inline lv_opa_t lv_obj_get_style_shadow_opa(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_SHADOW_OPA); return v._int; } @@ -335,10 +360,13 @@ static inline lv_coord_t lv_obj_get_style_line_rounded(const struct _lv_obj_t * static inline lv_color_t lv_obj_get_style_line_color(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_LINE_COLOR); return v._color; } +static inline lv_color_t lv_obj_get_style_line_color_filtered(const struct _lv_obj_t * obj, uint32_t part) { + lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_LINE_COLOR_FILTERED); return v._color; } + static inline lv_opa_t lv_obj_get_style_line_opa(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_LINE_OPA); return v._int; } -static inline const char * lv_obj_get_style_content_text(const struct _lv_obj_t * obj, uint32_t part) { +static inline const char * lv_obj_get_style_content_src(const struct _lv_obj_t * obj, uint32_t part) { lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_CONTENT_SRC); return v._ptr; } static inline lv_align_t lv_obj_get_style_content_align(const struct _lv_obj_t * obj, uint32_t part) { @@ -378,7 +406,6 @@ static inline lv_style_prop_t lv_obj_get_style_transition_prop_6(const struct _l lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_TRANSITION_PROP_6); return v._int; } - /********************** * MACROS **********************/ diff --git a/src/lv_core/lv_style.c b/src/lv_core/lv_style.c index 5b9e067df..91f5f924a 100644 --- a/src/lv_core/lv_style.c +++ b/src/lv_core/lv_style.c @@ -228,6 +228,16 @@ static void set_prop(lv_style_t * style, lv_style_prop_t prop, lv_style_value_t style->ext->opa = value._int; style->ext->has_opa = 1; break; + case LV_STYLE_COLOR_FILTER_CB: + _alloc_ext(style); + style->ext->color_filter_cb = (lv_color_filter_cb_t)value._func; + style->ext->has_color_filter_cb = 1; + break; + case LV_STYLE_COLOR_FILTER_OPA: + _alloc_ext(style); + style->ext->color_filter_opa = value._int; + style->ext->has_color_filter_opa = 1; + break; case LV_STYLE_PAD_TOP: style->pad_top = value._int; @@ -569,6 +579,12 @@ static bool get_prop(const lv_style_t * style, lv_style_prop_t prop, lv_style_va case LV_STYLE_OPA: if(style->ext && style->ext->has_opa) { value->_int = style->ext->opa; return true; } break; + case LV_STYLE_COLOR_FILTER_CB: + if(style->ext && style->ext->has_color_filter_cb) { value->_func = (void(*)(void)) style->ext->color_filter_cb; return true; } + break; + case LV_STYLE_COLOR_FILTER_OPA: + if(style->ext && style->ext->has_color_filter_opa) { value->_int = style->ext->color_filter_opa; return true; } + break; case LV_STYLE_PAD_TOP: if(style->has_pad_top) { value->_int = style->pad_top; return true; } @@ -596,12 +612,14 @@ static bool get_prop(const lv_style_t * style, lv_style_prop_t prop, lv_style_va break; case LV_STYLE_BG_COLOR: + case LV_STYLE_BG_COLOR_FILTERED: if(style->has_bg_color) { value->_color = style->bg_color; return true; } break; case LV_STYLE_BG_OPA: if(style->has_bg_opa) { value->_int = style->bg_opa; return true; } break; case LV_STYLE_BG_GRAD_COLOR: + case LV_STYLE_BG_GRAD_COLOR_FILTERED: if(style->ext && style->ext->has_bg_grad_color) { value->_color = style->ext->bg_grad_color; return true; } break; case LV_STYLE_BG_GRAD_DIR: @@ -618,6 +636,7 @@ static bool get_prop(const lv_style_t * style, lv_style_prop_t prop, lv_style_va break; case LV_STYLE_BORDER_COLOR: + case LV_STYLE_BORDER_COLOR_FILTERED: if(style->has_border_color) { value->_color = style->border_color; return true; } break; case LV_STYLE_BORDER_OPA: @@ -637,6 +656,7 @@ static bool get_prop(const lv_style_t * style, lv_style_prop_t prop, lv_style_va break; case LV_STYLE_TEXT_COLOR: + case LV_STYLE_TEXT_COLOR_FILTERED: if(style->has_text_color) { value->_color = style->text_color; return true; } break; case LV_STYLE_TEXT_OPA: @@ -665,6 +685,7 @@ static bool get_prop(const lv_style_t * style, lv_style_prop_t prop, lv_style_va if(style->ext && style->ext->has_img_blend_mode) { value->_int = style->ext->img_blend_mode; return true; } break; case LV_STYLE_IMG_RECOLOR: + case LV_STYLE_IMG_RECOLOR_FILTERED: if(style->ext && style->ext->has_img_recolor) { value->_color = style->ext->img_recolor; return true; } break; case LV_STYLE_IMG_RECOLOR_OPA: @@ -676,6 +697,7 @@ static bool get_prop(const lv_style_t * style, lv_style_prop_t prop, lv_style_va if(style->ext && style->ext->has_outline_width) { value->_int = style->ext->outline_width; return true; } break; case LV_STYLE_OUTLINE_COLOR: + case LV_STYLE_OUTLINE_COLOR_FILTERED: if(style->ext && style->ext->has_outline_color) { value->_color = style->ext->outline_color; return true; } break; case LV_STYLE_OUTLINE_OPA: @@ -704,6 +726,7 @@ static bool get_prop(const lv_style_t * style, lv_style_prop_t prop, lv_style_va if(style->ext && style->ext->has_shadow_blend_mode) { value->_int = style->ext->shadow_blend_mode; return true; } break; case LV_STYLE_SHADOW_COLOR: + case LV_STYLE_SHADOW_COLOR_FILTERED: if(style->ext && style->ext->has_shadow_color) { value->_color = style->ext->shadow_color; return true; } break; case LV_STYLE_SHADOW_OPA: @@ -726,6 +749,7 @@ static bool get_prop(const lv_style_t * style, lv_style_prop_t prop, lv_style_va if(style->ext && style->ext->has_line_rounded) { value->_int = style->ext->line_rounded; return true; } break; case LV_STYLE_LINE_COLOR: + case LV_STYLE_LINE_COLOR_FILTERED: if(style->ext && style->ext->has_line_color) { value->_color = style->ext->line_color; return true; } break; case LV_STYLE_LINE_OPA: @@ -804,10 +828,16 @@ static bool remove_prop(lv_style_t * style, lv_style_prop_t prop) case LV_STYLE_TRANSFORM_ANGLE: if(style->ext) style->ext->has_transform_angle = 0; break; - case LV_STYLE_OPA: if(style->ext) style->ext->has_opa = 0; break; + case LV_STYLE_COLOR_FILTER_CB: + if(style->ext) style->ext->has_color_filter_cb = 0; + break; + case LV_STYLE_COLOR_FILTER_OPA: + if(style->ext) style->ext->has_color_filter_opa = 0; + break; + case LV_STYLE_PAD_TOP: style->has_pad_top = 0; break; diff --git a/src/lv_core/lv_style.h b/src/lv_core/lv_style.h index 3f593d4ac..383ff6a44 100644 --- a/src/lv_core/lv_style.h +++ b/src/lv_core/lv_style.h @@ -35,6 +35,7 @@ LV_EXPORT_CONST_INT(LV_RADIUS_CIRCLE); #define LV_STYLE_PROP_INHERIT (1 << 10) #define LV_STYLE_PROP_EXT_DRAW (1 << 11) #define LV_STYLE_PROP_LAYOUT_REFR (1 << 12) +#define LV_STYLE_PROP_FILTER (1 << 13) #define LV_STYLE_TRANS_NUM_MAX 6 @@ -74,9 +75,11 @@ enum { typedef uint8_t lv_text_decor_t; + typedef union { int32_t _int; const void * _ptr; + void (* _func)(void); lv_color_t _color; }lv_style_value_t; @@ -89,6 +92,8 @@ typedef enum { LV_STYLE_TRANSFORM_ZOOM = 5 | LV_STYLE_PROP_EXT_DRAW, LV_STYLE_TRANSFORM_ANGLE = 6 | LV_STYLE_PROP_EXT_DRAW, LV_STYLE_OPA = 7 | LV_STYLE_PROP_INHERIT, + LV_STYLE_COLOR_FILTER_CB = 8, + LV_STYLE_COLOR_FILTER_OPA = 9, LV_STYLE_PAD_TOP = 10 | LV_STYLE_PROP_LAYOUT_REFR, LV_STYLE_PAD_BOTTOM = 11 | LV_STYLE_PROP_LAYOUT_REFR, @@ -99,15 +104,18 @@ typedef enum { LV_STYLE_MARGIN_LEFT = 16 | LV_STYLE_PROP_LAYOUT_REFR, LV_STYLE_MARGIN_RIGHT = 17 | LV_STYLE_PROP_LAYOUT_REFR, - LV_STYLE_BG_COLOR = 20, + LV_STYLE_BG_COLOR = 20, + LV_STYLE_BG_COLOR_FILTERED = 20 | LV_STYLE_PROP_FILTER, LV_STYLE_BG_OPA = 21, LV_STYLE_BG_GRAD_COLOR = 22, + LV_STYLE_BG_GRAD_COLOR_FILTERED = 22 | LV_STYLE_PROP_FILTER, LV_STYLE_BG_GRAD_DIR = 23, LV_STYLE_BG_BLEND_MODE = 24, LV_STYLE_BG_MAIN_STOP = 25, LV_STYLE_BG_GRAD_STOP = 26, LV_STYLE_BORDER_COLOR = 31, + LV_STYLE_BORDER_COLOR_FILTERED = 31 | LV_STYLE_PROP_FILTER, LV_STYLE_BORDER_OPA = 32, LV_STYLE_BORDER_WIDTH = 33, LV_STYLE_BORDER_SIDE = 34, @@ -115,6 +123,7 @@ typedef enum { LV_STYLE_BORDER_BLEND_MODE = 36, LV_STYLE_TEXT_COLOR = 40 | LV_STYLE_PROP_INHERIT, + LV_STYLE_TEXT_COLOR_FILTERED = 40 | LV_STYLE_PROP_INHERIT | LV_STYLE_PROP_FILTER, LV_STYLE_TEXT_OPA = 41 | LV_STYLE_PROP_INHERIT, LV_STYLE_TEXT_FONT = 42 | LV_STYLE_PROP_INHERIT, LV_STYLE_TEXT_LETTER_SPACE = 43 | LV_STYLE_PROP_INHERIT, @@ -125,10 +134,12 @@ typedef enum { LV_STYLE_IMG_OPA = 50, LV_STYLE_IMG_BLEND_MODE = 51, LV_STYLE_IMG_RECOLOR = 52, + LV_STYLE_IMG_RECOLOR_FILTERED = 52 | LV_STYLE_PROP_FILTER, LV_STYLE_IMG_RECOLOR_OPA = 53, LV_STYLE_OUTLINE_WIDTH = 61 | LV_STYLE_PROP_EXT_DRAW, LV_STYLE_OUTLINE_COLOR = 62, + LV_STYLE_OUTLINE_COLOR_FILTERED = 62 | LV_STYLE_PROP_FILTER, LV_STYLE_OUTLINE_OPA = 63 | LV_STYLE_PROP_EXT_DRAW, LV_STYLE_OUTLINE_PAD = 64 | LV_STYLE_PROP_EXT_DRAW, LV_STYLE_OUTLINE_BLEND_MODE = 65, @@ -139,6 +150,7 @@ typedef enum { LV_STYLE_SHADOW_SPREAD = 73 | LV_STYLE_PROP_EXT_DRAW, LV_STYLE_SHADOW_BLEND_MODE = 74, LV_STYLE_SHADOW_COLOR = 75, + LV_STYLE_SHADOW_COLOR_FILTERED = 75 | LV_STYLE_PROP_FILTER, LV_STYLE_SHADOW_OPA = 76 | LV_STYLE_PROP_EXT_DRAW, LV_STYLE_LINE_WIDTH = 80 | LV_STYLE_PROP_EXT_DRAW, @@ -147,6 +159,7 @@ typedef enum { LV_STYLE_LINE_DASH_GAP = 83, LV_STYLE_LINE_ROUNDED = 84, LV_STYLE_LINE_COLOR = 85, + LV_STYLE_LINE_COLOR_FILTERED = 85 | LV_STYLE_PROP_FILTER, LV_STYLE_LINE_OPA = 86, LV_STYLE_CONTENT_SRC = 90 | LV_STYLE_PROP_EXT_DRAW, @@ -170,7 +183,8 @@ typedef enum { }lv_style_prop_t; typedef struct { - const lv_anim_path_cb_t * transition_path; + lv_color_filter_cb_t color_filter_cb; + const lv_anim_path_t * transition_path; const char * content_text; uint16_t transition_time; @@ -189,6 +203,7 @@ typedef struct { lv_color_t line_color; lv_opa_t opa; + lv_opa_t color_filter_opa; lv_opa_t outline_opa; lv_opa_t img_recolor_opa; lv_opa_t shadow_opa; @@ -238,6 +253,8 @@ typedef struct { uint32_t has_transform_zoom :1; uint32_t has_transform_angle :1; uint32_t has_opa :1; + uint32_t has_color_filter_cb :1; + uint32_t has_color_filter_opa :1; uint32_t has_margin_top :1; uint32_t has_margin_bottom :1; @@ -411,6 +428,12 @@ static inline void lv_style_set_transform_angle(lv_style_t * style, lv_coord_t v static inline void lv_style_set_opa(lv_style_t * style, lv_opa_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_OPA, v); } +static inline void lv_style_set_color_filter_cb(lv_style_t * style, lv_color_filter_cb_t value) { + lv_style_value_t v = {._func = (void(*)(void))value}; lv_style_set_prop(style, LV_STYLE_COLOR_FILTER_CB, v); } + +static inline void lv_style_set_color_filter_opa(lv_style_t * style, lv_opa_t value) { + lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_COLOR_FILTER_OPA, v); } + static inline void lv_style_set_pad_top(lv_style_t * style, lv_coord_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_PAD_TOP, v); } @@ -438,12 +461,18 @@ static inline void lv_style_set_margin_right(lv_style_t * style, lv_coord_t valu static inline void lv_style_set_bg_color(lv_style_t * style, lv_color_t value) { lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_BG_COLOR, v); } +static inline void lv_style_set_bg_color_filtered(lv_style_t * style, lv_color_t value) { + lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_BG_COLOR_FILTERED, v); } + static inline void lv_style_set_bg_opa(lv_style_t * style, lv_opa_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_BG_OPA, v); } static inline void lv_style_set_bg_grad_color(lv_style_t * style, lv_color_t value) { lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_BG_GRAD_COLOR, v); } +static inline void lv_style_set_bg_grad_color_filtered(lv_style_t * style, lv_color_t value) { + lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_BG_GRAD_COLOR_FILTERED, v); } + static inline void lv_style_set_bg_grad_dir(lv_style_t * style, lv_grad_dir_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_BG_GRAD_DIR, v); } @@ -459,6 +488,9 @@ static inline void lv_style_set_bg_grad_stop(lv_style_t * style, lv_coord_t valu static inline void lv_style_set_border_color(lv_style_t * style, lv_color_t value) { lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_BORDER_COLOR, v); } +static inline void lv_style_set_border_color_filtered(lv_style_t * style, lv_color_t value) { + lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_BORDER_COLOR_FILTERED, v); } + static inline void lv_style_set_border_opa(lv_style_t * style, lv_opa_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_BORDER_OPA, v); } @@ -477,6 +509,9 @@ static inline void lv_style_set_border_blend_mode(lv_style_t * style, lv_blend_m static inline void lv_style_set_text_color(lv_style_t * style, lv_color_t value) { lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_TEXT_COLOR, v); } +static inline void lv_style_set_text_color_filtered(lv_style_t * style, lv_color_t value) { + lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_TEXT_COLOR_FILTERED, v); } + static inline void lv_style_set_text_opa(lv_style_t * style, lv_opa_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_TEXT_OPA, v); } @@ -504,6 +539,9 @@ static inline void lv_style_set_img_blend_mode(lv_style_t * style, lv_blend_mode static inline void lv_style_set_img_recolor(lv_style_t * style, lv_color_t value) { lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_IMG_RECOLOR, v); } +static inline void lv_style_set_img_recolor_filtered(lv_style_t * style, lv_color_t value) { + lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_IMG_RECOLOR_FILTERED, v); } + static inline void lv_style_set_img_recolor_opa(lv_style_t * style, lv_opa_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_IMG_RECOLOR_OPA, v); } @@ -540,6 +578,9 @@ static inline void lv_style_set_shadow_blend_mode(lv_style_t * style, lv_blend_m static inline void lv_style_set_shadow_color(lv_style_t * style, lv_color_t value) { lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_SHADOW_COLOR, v); } +static inline void lv_style_set_shadow_color_filtered(lv_style_t * style, lv_color_t value) { + lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_SHADOW_COLOR_FILTERED, v); } + static inline void lv_style_set_shadow_opa(lv_style_t * style, lv_opa_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_SHADOW_OPA, v); } @@ -561,10 +602,13 @@ static inline void lv_style_set_line_rounded(lv_style_t * style, lv_coord_t valu static inline void lv_style_set_line_color(lv_style_t * style, lv_color_t value) { lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_LINE_COLOR, v); } +static inline void lv_style_set_line_color_filtered(lv_style_t * style, lv_color_t value) { + lv_style_value_t v = {._color = value}; lv_style_set_prop(style, LV_STYLE_LINE_COLOR_FILTERED, v); } + static inline void lv_style_set_line_opa(lv_style_t * style, lv_opa_t value) { lv_style_value_t v = {._int = value}; lv_style_set_prop(style, LV_STYLE_LINE_OPA, v); } -static inline void lv_style_set_content_text(lv_style_t * style, const char * value) { +static inline void lv_style_set_content_src(lv_style_t * style, const char * value) { lv_style_value_t v = {._ptr = value}; lv_style_set_prop(style, LV_STYLE_CONTENT_SRC, v); } static inline void lv_style_set_content_align(lv_style_t * style, lv_align_t value) { @@ -605,7 +649,6 @@ static inline void lv_style_set_transition_prop_6(lv_style_t * style, lv_style_p - static inline void lv_style_set_pad_ver(lv_style_t * style, lv_coord_t value) { lv_style_set_pad_top(style, value); diff --git a/src/lv_misc/lv_color.c b/src/lv_misc/lv_color.c index c0f3c0d23..77e982a7b 100644 --- a/src/lv_misc/lv_color.c +++ b/src/lv_misc/lv_color.c @@ -139,6 +139,14 @@ lv_color_t lv_color_darken(lv_color_t c, lv_opa_t lvl) return lv_color_mix(LV_COLOR_BLACK, c, lvl); } +lv_color_t lv_color_change_lightness(lv_color_t c, lv_opa_t lvl) +{ + /* It'd be better to convert the color to HSL, change L and convert back to RGB.*/ + if(lvl == LV_OPA_50) return c; + else if(lvl < LV_OPA_50) return lv_color_darken(c, (LV_OPA_50 - lvl) * 2); + else return lv_color_lighten(c, (lvl - LV_OPA_50) * 2); +} + /** * Convert a HSV color to RGB * @param h hue [0..359] diff --git a/src/lv_misc/lv_color.h b/src/lv_misc/lv_color.h index 42f2c413e..b16d49039 100644 --- a/src/lv_misc/lv_color.h +++ b/src/lv_misc/lv_color.h @@ -292,6 +292,9 @@ typedef struct { typedef uint8_t lv_opa_t; //! @endcond + +typedef lv_color_t (*lv_color_filter_cb_t)(lv_color_t, lv_opa_t); + /********************** * GLOBAL PROTOTYPES **********************/ @@ -673,6 +676,8 @@ lv_color_t lv_color_lighten(lv_color_t c, lv_opa_t lvl); lv_color_t lv_color_darken(lv_color_t c, lv_opa_t lvl); +lv_color_t lv_color_change_lightness(lv_color_t c, lv_opa_t lvl); + /** * Convert a HSV color to RGB * @param h hue [0..359] diff --git a/src/lv_themes/lv_theme_default.c b/src/lv_themes/lv_theme_default.c index 25cab8250..fefc6e8cb 100644 --- a/src/lv_themes/lv_theme_default.c +++ b/src/lv_themes/lv_theme_default.c @@ -61,12 +61,12 @@ #define COLOR_BG_TEXT_DIS (IS_LIGHT ? lv_color_hex3(0xaaa) : lv_color_hex3(0x999)) /*SECONDARY BACKGROUND*/ -#define COLOR_BG_SEC (IS_LIGHT ? lv_color_hex(0xd4d7d9) : lv_color_hex(0x45494d)) +#define COLOR_GRAY (IS_LIGHT ? lv_color_hex(0xd4d7d9) : lv_color_hex(0x45494d)) #define COLOR_BG_SEC_BORDER (IS_LIGHT ? lv_color_hex(0xdfe7ed) : lv_color_hex(0x404040)) #define COLOR_BG_SEC_TEXT (IS_LIGHT ? lv_color_hex(0x31404f) : lv_color_hex(0xa5a8ad)) #define COLOR_BG_SEC_TEXT_DIS (IS_LIGHT ? lv_color_hex(0xaaaaaa) : lv_color_hex(0xa5a8ad)) -#define TRANSITION_TIME ((theme.flags & LV_THEME_MATERIAL_FLAG_NO_TRANSITION) ? 0 : 100) +#define TRANSITION_TIME ((theme.flags & LV_THEME_MATERIAL_FLAG_NO_TRANSITION) ? 0 : 150) #define BORDER_WIDTH LV_DPX(2) #define OUTLINE_WIDTH ((theme.flags & LV_THEME_MATERIAL_FLAG_NO_FOCUS) ? 0 : LV_DPX(2)) #define IS_LIGHT (theme.flags & LV_THEME_MATERIAL_FLAG_LIGHT) @@ -82,17 +82,17 @@ typedef struct { lv_style_t scrollbar_scrolled; lv_style_t card; lv_style_t btn; - lv_style_t btn_pressed; lv_style_t btn_disabled; lv_style_t btn_color; - lv_style_t btn_color_disabled; - lv_style_t btn_color_pressed; lv_style_t btn_color_checked; - lv_style_t btn_color_pressed_checked; - lv_style_t btn_color_checked_disabled; /*Utility*/ + lv_style_t bg_color_primary; + lv_style_t bg_color_gray; + lv_style_t pressed; + lv_style_t disabled; lv_style_t pad_small; + lv_style_t pad_small_negative; lv_style_t focus_border; lv_style_t focus_outline; lv_style_t edit_outline; @@ -100,10 +100,10 @@ typedef struct { lv_style_t circle; lv_style_t no_radius; lv_style_t clip_corner; - lv_style_t bg_color_primary; /*Parts*/ lv_style_t knob; + lv_style_t indic; #if LV_USE_ARC @@ -246,16 +246,12 @@ static void basic_init(void) lv_style_set_img_recolor(&styles->btn, CARD_TEXT_COLOR); lv_style_set_pad_hor(&styles->btn, LV_DPX(40)); lv_style_set_pad_ver(&styles->btn, LV_DPX(15)); - lv_style_set_transition_prop_5(&styles->btn, LV_STYLE_BG_COLOR); - lv_style_set_transition_prop_6(&styles->btn, LV_STYLE_OUTLINE_OPA); + lv_style_set_transition_prop_5(&styles->btn, LV_STYLE_COLOR_FILTER_OPA); lv_style_set_transition_time(&styles->btn, TRANSITION_TIME); lv_style_set_transition_delay(&styles->btn, TRANSITION_TIME); + lv_style_set_color_filter_cb(&styles->btn, lv_color_change_lightness); + lv_style_set_color_filter_opa(&styles->btn, LV_OPA_50); - style_init_reset(&styles->btn_pressed); - lv_style_set_bg_color(&styles->btn_pressed, CARD_PR_COLOR); - lv_style_set_text_color(&styles->btn_pressed, CARD_TEXT_PR_COLOR); - lv_style_set_img_recolor(&styles->btn_pressed, CARD_TEXT_PR_COLOR); - lv_style_set_transition_delay(&styles->btn_pressed, 0); style_init_reset(&styles->btn_color); lv_style_set_border_width(&styles->btn_color, 0); @@ -263,26 +259,45 @@ static void basic_init(void) lv_style_set_text_color(&styles->btn_color, LV_COLOR_WHITE); lv_style_set_img_recolor(&styles->btn_color, LV_COLOR_WHITE); - style_init_reset(&styles->btn_color_pressed); - lv_style_set_bg_color(&styles->btn_color_pressed, BTN_PR_COLOR); - style_init_reset(&styles->btn_color_checked); lv_style_set_bg_color(&styles->btn_color_checked, BTN_CHK_PR_COLOR); - style_init_reset(&styles->btn_color_disabled); - lv_style_set_bg_color(&styles->btn_color_checked, BTN_DIS_COLOR); + style_init_reset(&styles->pressed); + lv_style_set_color_filter_opa(&styles->pressed, LV_OPA_40); + lv_style_set_transition_delay(&styles->pressed, 0); - style_init_reset(&styles->btn_color_checked_disabled); - lv_style_set_bg_color(&styles->btn_color_checked_disabled, BTN_CHK_DIS_COLOR); + style_init_reset(&styles->disabled); + lv_style_set_color_filter_opa(&styles->disabled, LV_OPA_70); + lv_style_set_transition_time(&styles->disabled, 0); + lv_style_set_transition_delay(&styles->disabled, 0); style_init_reset(&styles->clip_corner); - lv_style_set_clip_corner(&styles->clip_corner, BTN_CHK_DIS_COLOR); + lv_style_set_clip_corner(&styles->clip_corner, true); style_init_reset(&styles->pad_small); lv_coord_t pad_small_value = lv_disp_get_size_category(NULL) <= LV_DISP_MEDIUM_LIMIT ? LV_DPX(10) : LV_DPX(20); lv_style_set_pad_all(&styles->pad_small, pad_small_value); -} + style_init_reset(&styles->pad_small_negative); + lv_style_set_pad_all(&styles->pad_small_negative, - LV_DPX(2)); + + style_init_reset(&styles->bg_color_primary); + lv_style_set_bg_color(&styles->bg_color_primary, theme.color_primary); + lv_style_set_bg_opa(&styles->bg_color_primary, LV_OPA_COVER); + + style_init_reset(&styles->bg_color_gray); + lv_style_set_bg_color(&styles->bg_color_gray, COLOR_GRAY); + lv_style_set_bg_opa(&styles->bg_color_gray, LV_OPA_COVER); + + style_init_reset(&styles->circle); + lv_style_set_radius(&styles->circle, LV_RADIUS_CIRCLE); + + style_init_reset(&styles->knob); + lv_style_set_bg_color(&styles->knob, IS_LIGHT ? theme.color_primary : LV_COLOR_WHITE); + lv_style_set_bg_opa(&styles->knob, LV_OPA_COVER); + lv_style_set_pad_all(&styles->knob, LV_DPX(5)); + lv_style_set_radius(&styles->knob, LV_RADIUS_CIRCLE); +} static void btn_init(void) { @@ -309,25 +324,25 @@ static void label_init(void) static void bar_init(void) { #if LV_USE_BAR - style_init_reset(&styles->bar_bg); - lv_style_set_radius(&styles->bar_bg, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_style_set_bg_opa(&styles->bar_bg, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_bg_color(&styles->bar_bg, LV_STATE_DEFAULT, COLOR_BG_SEC); - lv_style_set_value_color(&styles->bar_bg, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex(0x31404f) : LV_COLOR_WHITE); - lv_style_set_outline_color(&styles->bar_bg, LV_STATE_DEFAULT, theme.color_primary); - lv_style_set_outline_color(&styles->bar_bg, LV_STATE_EDITED, theme.color_secondary); - lv_style_set_outline_opa(&styles->bar_bg, LV_STATE_DEFAULT, LV_OPA_TRANSP); - lv_style_set_outline_opa(&styles->bar_bg, LV_STATE_FOCUSED, LV_OPA_50); - lv_style_set_outline_width(&styles->bar_bg, LV_STATE_DEFAULT, OUTLINE_WIDTH); - lv_style_set_transition_time(&styles->bar_bg, LV_STATE_DEFAULT, TRANSITION_TIME); - lv_style_set_transition_prop_6(&styles->bar_bg, LV_STATE_DEFAULT, LV_STYLE_OUTLINE_OPA); - - style_init_reset(&styles->bar_indic); - lv_style_set_bg_opa(&styles->bar_indic, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_radius(&styles->bar_indic, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_style_set_bg_color(&styles->bar_indic, LV_STATE_DEFAULT, theme.color_primary); - lv_style_set_bg_color(&styles->bar_indic, LV_STATE_DISABLED, lv_color_hex3(0x888)); - lv_style_set_value_color(&styles->bar_indic, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex(0x41404f) : LV_COLOR_WHITE); +// style_init_reset(&styles->bar_bg); +// lv_style_set_radius(&styles->bar_bg, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); +// lv_style_set_bg_opa(&styles->bar_bg, LV_STATE_DEFAULT, LV_OPA_COVER); +// lv_style_set_bg_color(&styles->bar_bg, LV_STATE_DEFAULT, COLOR_BG_SEC); +// lv_style_set_value_color(&styles->bar_bg, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex(0x31404f) : LV_COLOR_WHITE); +// lv_style_set_outline_color(&styles->bar_bg, LV_STATE_DEFAULT, theme.color_primary); +// lv_style_set_outline_color(&styles->bar_bg, LV_STATE_EDITED, theme.color_secondary); +// lv_style_set_outline_opa(&styles->bar_bg, LV_STATE_DEFAULT, LV_OPA_TRANSP); +// lv_style_set_outline_opa(&styles->bar_bg, LV_STATE_FOCUSED, LV_OPA_50); +// lv_style_set_outline_width(&styles->bar_bg, LV_STATE_DEFAULT, OUTLINE_WIDTH); +// lv_style_set_transition_time(&styles->bar_bg, LV_STATE_DEFAULT, TRANSITION_TIME); +// lv_style_set_transition_prop_6(&styles->bar_bg, LV_STATE_DEFAULT, LV_STYLE_OUTLINE_OPA); +// +// style_init_reset(&styles->bar_indic); +// lv_style_set_bg_opa(&styles->bar_indic, LV_STATE_DEFAULT, LV_OPA_COVER); +// lv_style_set_radius(&styles->bar_indic, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); +// lv_style_set_bg_color(&styles->bar_indic, LV_STATE_DEFAULT, theme.color_primary); +// lv_style_set_bg_color(&styles->bar_indic, LV_STATE_DISABLED, lv_color_hex3(0x888)); +// lv_style_set_value_color(&styles->bar_indic, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex(0x41404f) : LV_COLOR_WHITE); #endif } @@ -348,21 +363,21 @@ static void line_init(void) static void slider_init(void) { #if LV_USE_SLIDER != 0 - style_init_reset(&styles->slider_knob); - lv_style_set_bg_opa(&styles->slider_knob, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_bg_color(&styles->slider_knob, LV_STATE_DEFAULT, IS_LIGHT ? theme.color_primary : LV_COLOR_WHITE); - lv_style_set_value_color(&styles->slider_knob, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex(0x31404f) : LV_COLOR_WHITE); - lv_style_set_radius(&styles->slider_knob, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_style_set_pad_left(&styles->slider_knob, LV_STATE_DEFAULT, LV_DPX(7)); - lv_style_set_pad_right(&styles->slider_knob, LV_STATE_DEFAULT, LV_DPX(7)); - lv_style_set_pad_top(&styles->slider_knob, LV_STATE_DEFAULT, LV_DPX(7)); - lv_style_set_pad_bottom(&styles->slider_knob, LV_STATE_DEFAULT, LV_DPX(7)); - - style_init_reset(&styles->slider_bg); - lv_style_set_margin_left(&styles->slider_bg, LV_STATE_DEFAULT, LV_DPX(10)); - lv_style_set_margin_right(&styles->slider_bg, LV_STATE_DEFAULT, LV_DPX(10)); - lv_style_set_margin_top(&styles->slider_bg, LV_STATE_DEFAULT, LV_DPX(10)); - lv_style_set_margin_bottom(&styles->slider_bg, LV_STATE_DEFAULT, LV_DPX(10)); +// style_init_reset(&styles->slider_knob); +// lv_style_set_bg_opa(&styles->slider_knob, LV_STATE_DEFAULT, LV_OPA_COVER); +// lv_style_set_bg_color(&styles->slider_knob, LV_STATE_DEFAULT, IS_LIGHT ? theme.color_primary : LV_COLOR_WHITE); +// lv_style_set_value_color(&styles->slider_knob, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex(0x31404f) : LV_COLOR_WHITE); +// lv_style_set_radius(&styles->slider_knob, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); +// lv_style_set_pad_left(&styles->slider_knob, LV_STATE_DEFAULT, LV_DPX(7)); +// lv_style_set_pad_right(&styles->slider_knob, LV_STATE_DEFAULT, LV_DPX(7)); +// lv_style_set_pad_top(&styles->slider_knob, LV_STATE_DEFAULT, LV_DPX(7)); +// lv_style_set_pad_bottom(&styles->slider_knob, LV_STATE_DEFAULT, LV_DPX(7)); +// +// style_init_reset(&styles->slider_bg); +// lv_style_set_margin_left(&styles->slider_bg, LV_STATE_DEFAULT, LV_DPX(10)); +// lv_style_set_margin_right(&styles->slider_bg, LV_STATE_DEFAULT, LV_DPX(10)); +// lv_style_set_margin_top(&styles->slider_bg, LV_STATE_DEFAULT, LV_DPX(10)); +// lv_style_set_margin_bottom(&styles->slider_bg, LV_STATE_DEFAULT, LV_DPX(10)); #endif } @@ -444,7 +459,7 @@ static void arc_init(void) lv_style_set_line_rounded(&styles->arc_indic, LV_STATE_DEFAULT, true); style_init_reset(&styles->arc_bg); - lv_style_set_line_color(&styles->arc_bg, LV_STATE_DEFAULT, COLOR_BG_SEC); + lv_style_set_line_color(&styles->arc_bg, LV_STATE_DEFAULT, COLOR_GRAY); lv_style_set_line_width(&styles->arc_bg, LV_STATE_DEFAULT, LV_DPX(25)); lv_style_set_line_rounded(&styles->arc_bg, LV_STATE_DEFAULT, true); @@ -682,12 +697,25 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj) else if(lv_obj_check_type(obj, &lv_btn)) { lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->btn); lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->btn_color); - lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_PRESSED, &styles->btn_pressed); - lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_PRESSED, &styles->btn_color_pressed); + lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_PRESSED, &styles->pressed); lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_CHECKED, &styles->btn_color_checked); - lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_PRESSED | LV_STATE_CHECKED, &styles->btn_color_pressed_checked); - lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DISABLED, &styles->btn_color_disabled); - lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_CHECKED | LV_STATE_DISABLED, &styles->btn_color_checked_disabled); + } +#endif + +#if LV_USE_BAR + else if(lv_obj_check_type(obj, &lv_bar)) { + lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->bg_color_gray); + lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->circle); + lv_obj_add_style(obj, LV_PART_INDICATOR, LV_STATE_DEFAULT, &styles->bg_color_primary); + lv_obj_add_style(obj, LV_PART_INDICATOR, LV_STATE_DEFAULT, &styles->circle); + } + + else if(lv_obj_check_type(obj, &lv_slider)) { + lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->bg_color_gray); + lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->circle); + lv_obj_add_style(obj, LV_PART_INDICATOR, LV_STATE_DEFAULT, &styles->bg_color_primary); + lv_obj_add_style(obj, LV_PART_INDICATOR, LV_STATE_DEFAULT, &styles->circle); + lv_obj_add_style(obj, LV_PART_KNOB, LV_STATE_DEFAULT, &styles->knob); } #endif @@ -709,15 +737,6 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj) break; #endif -#if LV_USE_BAR - case LV_THEME_BAR: - list = _lv_obj_get_style_list(obj, LV_BAR_PART_MAIN); - _lv_style_list_add_style(list, &styles->bar_bg); - - list = _lv_obj_get_style_list(obj, LV_BAR_PART_INDIC); - _lv_style_list_add_style(list, &styles->bar_indic); - break; -#endif #if LV_USE_SWITCH case LV_THEME_SWITCH: @@ -770,17 +789,17 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj) #endif #if LV_USE_SLIDER - case LV_THEME_SLIDER: - list = _lv_obj_get_style_list(obj, LV_SLIDER_PART_MAIN); - _lv_style_list_add_style(list, &styles->bar_bg); - _lv_style_list_add_style(list, &styles->slider_bg); - - list = _lv_obj_get_style_list(obj, LV_SLIDER_PART_INDIC); - _lv_style_list_add_style(list, &styles->bar_indic); - - list = _lv_obj_get_style_list(obj, LV_SLIDER_PART_KNOB); - _lv_style_list_add_style(list, &styles->slider_knob); - break; +// case LV_THEME_SLIDER: +// list = _lv_obj_get_style_list(obj, LV_SLIDER_PART_MAIN); +// _lv_style_list_add_style(list, &styles->bar_bg); +// _lv_style_list_add_style(list, &styles->slider_bg); +// +// list = _lv_obj_get_style_list(obj, LV_SLIDER_PART_INDIC); +// _lv_style_list_add_style(list, &styles->bar_indic); +// +// list = _lv_obj_get_style_list(obj, LV_SLIDER_PART_KNOB); +// _lv_style_list_add_style(list, &styles->slider_knob); +// break; #endif #if LV_USE_CHECKBOX diff --git a/src/lv_widgets/lv_bar.c b/src/lv_widgets/lv_bar.c index d9206d918..b495156ca 100644 --- a/src/lv_widgets/lv_bar.c +++ b/src/lv_widgets/lv_bar.c @@ -324,7 +324,6 @@ static void lv_bar_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t bar->start_value = 0; bar->cur_value = 0; bar->type = LV_BAR_TYPE_NORMAL; - lv_style_list_init(&bar->style_indic); #if LV_USE_ANIMATION bar->anim_time = 200; @@ -353,15 +352,15 @@ static void lv_bar_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t static void lv_bar_destructor(void * obj) { - lv_bar_t * bar = obj; +// lv_bar_t * bar = obj; +// +// _lv_obj_reset_style_list_no_refr(obj, LV_PART_INDICATOR); +//#if LV_USE_ANIMATION +// lv_anim_del(&bar->cur_value_anim, NULL); +// lv_anim_del(&bar->start_value_anim, NULL); +//#endif - _lv_obj_reset_style_list_no_refr(obj, LV_BAR_PART_INDIC); -#if LV_USE_ANIMATION - lv_anim_del(&bar->cur_value_anim, NULL); - lv_anim_del(&bar->start_value_anim, NULL); -#endif - - bar->class_p->base_p->destructor(obj); +// bar->class_p->base_p->destructor(obj); } /** @@ -395,7 +394,7 @@ static lv_design_res_t lv_bar_design(lv_obj_t * obj, const lv_area_t * clip_area draw_dsc.shadow_opa = LV_OPA_TRANSP; draw_dsc.content_opa = LV_OPA_TRANSP; draw_dsc.outline_opa = LV_OPA_TRANSP; - lv_obj_init_draw_rect_dsc(obj, LV_BAR_PART_MAIN, &draw_dsc); + lv_obj_init_draw_rect_dsc(obj, LV_PART_MAIN, &draw_dsc); lv_draw_rect(&bar->coords, clip_area, &draw_dsc); } else if(mode == LV_DESIGN_DRAW_POST) { @@ -419,10 +418,10 @@ static void draw_indic(lv_obj_t * obj, const lv_area_t * clip_area) bar->start_value == bar->min_value) sym = true; /*Calculate the indicator area*/ - lv_coord_t bg_left = lv_obj_get_style_pad_left(obj, LV_BAR_PART_MAIN); - lv_coord_t bg_right = lv_obj_get_style_pad_right(obj, LV_BAR_PART_MAIN); - lv_coord_t bg_top = lv_obj_get_style_pad_top(obj, LV_BAR_PART_MAIN); - lv_coord_t bg_bottom = lv_obj_get_style_pad_bottom(obj, LV_BAR_PART_MAIN); + lv_coord_t bg_left = lv_obj_get_style_pad_left(obj, LV_PART_MAIN); + lv_coord_t bg_right = lv_obj_get_style_pad_right(obj, LV_PART_MAIN); + lv_coord_t bg_top = lv_obj_get_style_pad_top(obj, LV_PART_MAIN); + lv_coord_t bg_bottom = lv_obj_get_style_pad_bottom(obj, LV_PART_MAIN); /*Respect padding and minimum width/height too*/ lv_area_copy(&bar->indic_area, &bar->coords); @@ -532,13 +531,13 @@ static void draw_indic(lv_obj_t * obj, const lv_area_t * clip_area) /*Do not draw a zero length indicator*/ if(!sym && indic_length_calc(&bar->indic_area) <= 1) return; - uint16_t bg_radius = lv_obj_get_style_radius(obj, LV_BAR_PART_MAIN); + uint16_t bg_radius = lv_obj_get_style_radius(obj, LV_PART_MAIN); lv_coord_t short_side = LV_MATH_MIN(objw, objh); if(bg_radius > short_side >> 1) bg_radius = short_side >> 1; lv_draw_rect_dsc_t draw_indic_dsc; lv_draw_rect_dsc_init(&draw_indic_dsc); - lv_obj_init_draw_rect_dsc(obj, LV_BAR_PART_INDIC, &draw_indic_dsc); + lv_obj_init_draw_rect_dsc(obj, LV_PART_INDICATOR, &draw_indic_dsc); /* Draw only the shadow if the indicator is long enough. * The radius of the bg and the indicator can make a strange shape where @@ -631,7 +630,7 @@ static lv_res_t lv_bar_signal(lv_obj_t * obj, lv_signal_t sign, void * param) if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) { lv_coord_t indic_size; - indic_size = _lv_obj_get_draw_rect_ext_pad_size(obj, LV_BAR_PART_INDIC); + indic_size = _lv_obj_get_draw_rect_ext_pad_size(obj, LV_PART_INDICATOR); /*Bg size is handled by lv_obj*/ lv_coord_t * s = param; diff --git a/src/lv_widgets/lv_bar.h b/src/lv_widgets/lv_bar.h index 41708403d..66a3fd059 100644 --- a/src/lv_widgets/lv_bar.h +++ b/src/lv_widgets/lv_bar.h @@ -81,7 +81,6 @@ LV_CLASS_DECLARE_START(lv_bar, lv_obj); lv_area_t indic_area; /*Save the indicator area. Might be used by derived types*/ \ _lv_bar_anim_data \ uint8_t type : 2; /*Type of bar*/ \ - lv_style_list_t style_indic; /*Style of the indicator*/ #define _lv_bar_class_dsc \ _lv_obj_class_dsc \ @@ -90,14 +89,6 @@ LV_CLASS_DECLARE_END(lv_bar, lv_obj); extern lv_bar_class_t lv_bar; -/** Bar parts */ -enum { - LV_BAR_PART_MAIN, /** Bar background style. */ - LV_BAR_PART_INDIC, /** Bar fill area style. */ - _LV_BAR_PART_VIRTUAL_LAST -}; -typedef uint8_t lv_bar_part_t; - /********************** * GLOBAL PROTOTYPES **********************/ diff --git a/src/lv_widgets/lv_slider.c b/src/lv_widgets/lv_slider.c index 9a28aa34e..036dad79a 100644 --- a/src/lv_widgets/lv_slider.c +++ b/src/lv_widgets/lv_slider.c @@ -37,7 +37,6 @@ static void lv_slider_desctructor(void * obj); static void lv_slider_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy); static lv_design_res_t lv_slider_design(lv_obj_t * slider, const lv_area_t * clip_area, lv_design_mode_t mode); static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * param); -static lv_style_list_t * lv_slider_get_style(lv_slider_t * slider, uint8_t part); static void lv_slider_position_knob(lv_obj_t * slider, lv_area_t * knob_area, lv_coord_t knob_size, bool hor); static void lv_slider_draw_knob(lv_obj_t * slider, const lv_area_t * knob_area, const lv_area_t * clip_area); @@ -81,12 +80,12 @@ lv_obj_t * lv_slider_create(lv_obj_t * parent, const lv_obj_t * copy) /*Init the new slider slider*/ if(copy == NULL) { - lv_theme_apply(obj, LV_THEME_SLIDER); + lv_theme_apply(obj); } else { - lv_slider_t * copy_slider = (lv_slider_t *) copy; - lv_style_list_copy(&slider->style_knob, ©_slider->style_knob); - - _lv_obj_refresh_style(obj, LV_OBJ_PART_ALL, LV_STYLE_PROP_ALL); +// lv_slider_t * copy_slider = (lv_slider_t *) copy; +// lv_style_list_copy(&slider->style_knob, ©_slider->style_knob); +// +// _lv_obj_refresh_style(obj, LV_OBJ_PART_ALL, LV_STYLE_PROP_ALL); } LV_LOG_INFO("slider created"); @@ -130,7 +129,6 @@ static void lv_slider_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_ob slider->value_to_set = NULL; slider->dragging = 0; slider->left_knob_focus = 0; - lv_style_list_init(&slider->style_knob); /*Init the new slider slider*/ if(copy == NULL) { @@ -149,11 +147,11 @@ static void lv_slider_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_ob static void lv_slider_desctructor(void * obj) { - lv_slider_t * slider = obj; - - _lv_obj_reset_style_list_no_refr(obj, LV_SLIDER_PART_KNOB); - - slider->class_p->base_p->destructor(obj); +// lv_slider_t * slider = obj; +// +// _lv_obj_reset_style_list_no_refr(obj, LV_PART_KNOB); +// +// slider->class_p->base_p->destructor(obj); } /** @@ -257,12 +255,6 @@ static lv_res_t lv_slider_signal(lv_obj_t * obj, lv_signal_t sign, void * param) lv_res_t res; lv_slider_t * slider = (lv_slider_t *)obj; - if(sign == LV_SIGNAL_GET_STYLE) { - lv_get_style_info_t * info = param; - info->result = lv_slider_get_style(slider, info->part); - if(info->result != NULL) return LV_RES_OK; - else return lv_slider.base_p->signal_cb(obj, sign, param); - } /* Include the ancient signal function */ res = lv_slider.base_p->signal_cb(obj, sign, param); @@ -343,10 +335,10 @@ static lv_res_t lv_slider_signal(lv_obj_t * obj, lv_signal_t sign, void * param) lv_coord_t w = lv_obj_get_width(obj); lv_coord_t h = lv_obj_get_height(obj); - lv_style_int_t bg_left = lv_obj_get_style_pad_left(obj, LV_SLIDER_PART_MAIN); - lv_style_int_t bg_right = lv_obj_get_style_pad_right(obj, LV_SLIDER_PART_MAIN); - lv_style_int_t bg_top = lv_obj_get_style_pad_top(obj, LV_SLIDER_PART_MAIN); - lv_style_int_t bg_bottom = lv_obj_get_style_pad_bottom(obj, LV_SLIDER_PART_MAIN); + lv_coord_t bg_left = lv_obj_get_style_pad_left(obj, LV_PART_MAIN); + lv_coord_t bg_right = lv_obj_get_style_pad_right(obj, LV_PART_MAIN); + lv_coord_t bg_top = lv_obj_get_style_pad_top(obj, LV_PART_MAIN); + lv_coord_t bg_bottom = lv_obj_get_style_pad_bottom(obj, LV_PART_MAIN); int32_t range = slider->max_value - slider->min_value; int16_t new_value = 0; @@ -428,17 +420,17 @@ static lv_res_t lv_slider_signal(lv_obj_t * obj, lv_signal_t sign, void * param) } } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) { - lv_style_int_t knob_left = lv_obj_get_style_pad_left(obj, LV_SLIDER_PART_KNOB); - lv_style_int_t knob_right = lv_obj_get_style_pad_right(obj,LV_SLIDER_PART_KNOB); - lv_style_int_t knob_top = lv_obj_get_style_pad_top(obj, LV_SLIDER_PART_KNOB); - lv_style_int_t knob_bottom = lv_obj_get_style_pad_bottom(obj, LV_SLIDER_PART_KNOB); + lv_coord_t knob_left = lv_obj_get_style_pad_left(obj, LV_PART_KNOB); + lv_coord_t knob_right = lv_obj_get_style_pad_right(obj,LV_PART_KNOB); + lv_coord_t knob_top = lv_obj_get_style_pad_top(obj, LV_PART_KNOB); + lv_coord_t knob_bottom = lv_obj_get_style_pad_bottom(obj, LV_PART_KNOB); /* The smaller size is the knob diameter*/ lv_coord_t knob_size = LV_MATH_MIN(lv_obj_get_width(obj), lv_obj_get_height(obj)) >> 1; knob_size += LV_MATH_MAX(LV_MATH_MAX(knob_left, knob_right), LV_MATH_MAX(knob_bottom, knob_top)); knob_size += 2; /*For rounding error*/ - knob_size += _lv_obj_get_draw_rect_ext_pad_size(obj, LV_SLIDER_PART_KNOB); + knob_size += _lv_obj_get_draw_rect_ext_pad_size(obj, LV_PART_KNOB); /*Indic. size is handled by bar*/ lv_coord_t * s = param; @@ -475,28 +467,6 @@ static lv_res_t lv_slider_signal(lv_obj_t * obj, lv_signal_t sign, void * param) return res; } - -static lv_style_list_t * lv_slider_get_style(lv_slider_t * slider, uint8_t part) -{ - lv_style_list_t * style_dsc_p; - - switch(part) { - case LV_SLIDER_PART_MAIN: - style_dsc_p = &slider->style_list; - break; - case LV_SLIDER_PART_INDIC: - style_dsc_p = &slider->style_indic; - break; - case LV_SLIDER_PART_KNOB: - style_dsc_p = &slider->style_knob; - break; - default: - style_dsc_p = NULL; - } - - return style_dsc_p; -} - static void lv_slider_position_knob(lv_obj_t * slider, lv_area_t * knob_area, lv_coord_t knob_size, bool hor) { @@ -513,10 +483,10 @@ static void lv_slider_position_knob(lv_obj_t * slider, lv_area_t * knob_area, lv knob_area->x2 = slider->coords.x2; } - lv_style_int_t knob_left = lv_obj_get_style_pad_left(slider, LV_SLIDER_PART_KNOB); - lv_style_int_t knob_right = lv_obj_get_style_pad_right(slider, LV_SLIDER_PART_KNOB); - lv_style_int_t knob_top = lv_obj_get_style_pad_top(slider, LV_SLIDER_PART_KNOB); - lv_style_int_t knob_bottom = lv_obj_get_style_pad_bottom(slider, LV_SLIDER_PART_KNOB); + lv_coord_t knob_left = lv_obj_get_style_pad_left(slider, LV_PART_KNOB); + lv_coord_t knob_right = lv_obj_get_style_pad_right(slider, LV_PART_KNOB); + lv_coord_t knob_top = lv_obj_get_style_pad_top(slider, LV_PART_KNOB); + lv_coord_t knob_bottom = lv_obj_get_style_pad_bottom(slider, LV_PART_KNOB); /*Apply the paddings on the knob area*/ knob_area->x1 -= knob_left; @@ -529,7 +499,7 @@ static void lv_slider_draw_knob(lv_obj_t * slider, const lv_area_t * knob_area, { lv_draw_rect_dsc_t knob_rect_dsc; lv_draw_rect_dsc_init(&knob_rect_dsc); - lv_obj_init_draw_rect_dsc(slider, LV_SLIDER_PART_KNOB, &knob_rect_dsc); + lv_obj_init_draw_rect_dsc(slider, LV_PART_KNOB, &knob_rect_dsc); lv_draw_rect(knob_area, clip_area, &knob_rect_dsc); } diff --git a/src/lv_widgets/lv_slider.h b/src/lv_widgets/lv_slider.h index 9dbb0ec63..4cc2b2c41 100644 --- a/src/lv_widgets/lv_slider.h +++ b/src/lv_widgets/lv_slider.h @@ -46,7 +46,6 @@ LV_CLASS_DECLARE_START(lv_slider, lv_bar) #define _lv_slider_data \ _lv_bar_data \ - lv_style_list_t style_knob; /*Style of the knob*/ \ lv_area_t left_knob_area; \ lv_area_t right_knob_area; \ int16_t * value_to_set; /* Which bar value to set */ \ @@ -58,13 +57,7 @@ LV_CLASS_DECLARE_START(lv_slider, lv_bar) LV_CLASS_DECLARE_END(lv_slider, lv_bar) -/** Built-in styles of slider*/ -enum { - LV_SLIDER_PART_MAIN = LV_BAR_PART_MAIN, /** Slider background style. */ - LV_SLIDER_PART_INDIC = LV_BAR_PART_INDIC, /** Slider indicator (filled area) style. */ - LV_SLIDER_PART_KNOB = _LV_BAR_PART_VIRTUAL_LAST, /** Slider knob style. */ - _LV_SLIDER_PART_VIRTUAL_LAST -}; +extern lv_slider_class_t lv_slider; /********************** * GLOBAL PROTOTYPES