add color filter style property

This commit is contained in:
Gabor Kiss-Vamosi
2020-12-19 06:51:14 +01:00
parent 01a6bacbd7
commit 4fe3821719
13 changed files with 394 additions and 196 deletions

98
scripts/style_api_gen.py Executable file
View File

@@ -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)

View File

@@ -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;

View File

@@ -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;

View File

@@ -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
**********************/

View File

@@ -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;

View File

@@ -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,
@@ -100,14 +105,17 @@ typedef enum {
LV_STYLE_MARGIN_RIGHT = 17 | LV_STYLE_PROP_LAYOUT_REFR,
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);

View File

@@ -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]

View File

@@ -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]

View File

@@ -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

View File

@@ -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;

View File

@@ -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
**********************/

View File

@@ -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, &copy_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, &copy_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);
}

View File

@@ -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