mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-10 12:47:51 +08:00
feat(layer): add more efficient widget translucent mode (#4415)
Signed-off-by: FASTSHIFT <vifextech@foxmail.com> Co-authored-by: pengyiqiang <pengyiqiang@xiaomi.com> Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
This commit is contained in:
@@ -775,7 +775,7 @@ static void spectrum_draw_event_cb(lv_event_t * e)
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
lv_layer_t * layer = lv_event_get_layer(e);
|
||||
|
||||
lv_opa_t opa = lv_obj_get_style_opa(obj, LV_PART_MAIN);
|
||||
lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, LV_PART_MAIN);
|
||||
if(opa < LV_OPA_MIN) return;
|
||||
|
||||
lv_point_t center;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,10 @@ void lv_example_arc_1(void)
|
||||
|
||||
/*Manually update the label for the first time*/
|
||||
lv_obj_send_event(arc, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
|
||||
lv_obj_set_style_opa_layered(arc, LV_OPA_30, LV_PART_MAIN);
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void value_changed_event_cb(lv_event_t * e)
|
||||
|
||||
@@ -333,6 +333,10 @@ props = [
|
||||
'style_type': 'num', 'var_type': 'lv_opa_t', 'default':'`LV_OPA_COVER`', 'inherited': 1, 'layout': 0, 'ext_draw': 0,
|
||||
'dsc': "Scale down all opacity values of the object by this factor. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values or LV_OPA_10, LV_OPA_20, etc means semi transparency." },
|
||||
|
||||
{'name': 'OPA_LAYERED',
|
||||
'style_type': 'num', 'var_type': 'lv_opa_t', 'default':'`LV_OPA_COVER`', 'inherited': 1, 'layout': 0, 'ext_draw': 0,
|
||||
'dsc': "First draw the object on the layer, then scale down layer opacity factor. Value 0, `LV_OPA_0` or `LV_OPA_TRANSP` means fully transparent, 255, `LV_OPA_100` or `LV_OPA_COVER` means fully covering, other values or LV_OPA_10, LV_OPA_20, etc means semi transparency." },
|
||||
|
||||
{'name': 'COLOR_FILTER_DSC',
|
||||
'style_type': 'ptr', 'var_type': 'const lv_color_filter_dsc_t *', 'default':'`NULL`', 'inherited': 0, 'layout': 0, 'ext_draw': 0,
|
||||
'dsc': "Mix a color to all colors of the object." },
|
||||
|
||||
+6
-1
@@ -373,6 +373,11 @@ static void lv_obj_draw(lv_event_t * e)
|
||||
return;
|
||||
}
|
||||
|
||||
if(lv_obj_get_style_opa(obj, LV_PART_MAIN) < LV_OPA_MAX) {
|
||||
info->res = LV_COVER_RES_NOT_COVER;
|
||||
return;
|
||||
}
|
||||
|
||||
info->res = LV_COVER_RES_COVER;
|
||||
|
||||
}
|
||||
@@ -480,7 +485,7 @@ static lv_res_t scrollbar_init_draw_dsc(lv_obj_t * obj, lv_draw_rect_dsc_t * dsc
|
||||
}
|
||||
}
|
||||
|
||||
lv_opa_t opa = lv_obj_get_style_opa(obj, LV_PART_SCROLLBAR);
|
||||
lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, LV_PART_SCROLLBAR);
|
||||
if(opa < LV_OPA_MAX) {
|
||||
lv_opa_t v = LV_OPA_MIX2(dsc->bg_opa, opa);
|
||||
dsc->bg_opa = v;
|
||||
|
||||
+23
-49
@@ -42,9 +42,8 @@ void lv_obj_init_draw_rect_dsc(lv_obj_t * obj, uint32_t part, lv_draw_rect_dsc_t
|
||||
draw_dsc->base.obj = obj;
|
||||
draw_dsc->base.part = part;
|
||||
|
||||
lv_opa_t opa = LV_OPA_COVER;
|
||||
lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, part);
|
||||
if(part != LV_PART_MAIN) {
|
||||
opa = lv_obj_get_style_opa(obj, part);
|
||||
if(opa <= LV_OPA_MIN) {
|
||||
draw_dsc->bg_opa = LV_OPA_TRANSP;
|
||||
draw_dsc->bg_img_opa = LV_OPA_TRANSP;
|
||||
@@ -135,20 +134,15 @@ void lv_obj_init_draw_rect_dsc(lv_obj_t * obj, uint32_t part, lv_draw_rect_dsc_t
|
||||
}
|
||||
}
|
||||
|
||||
if(part != LV_PART_MAIN) {
|
||||
if(opa < LV_OPA_MAX) {
|
||||
lv_opa_t v = LV_OPA_MIX2(opa, draw_dsc->shadow_opa);
|
||||
draw_dsc->bg_opa = v;
|
||||
draw_dsc->bg_img_opa = v;
|
||||
draw_dsc->border_opa = v;
|
||||
draw_dsc->outline_opa = v;
|
||||
draw_dsc->shadow_opa = v;
|
||||
}
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->bg_opa = LV_OPA_MIX2(draw_dsc->bg_opa, opa);
|
||||
draw_dsc->bg_img_opa = LV_OPA_MIX2(draw_dsc->bg_img_opa, opa);
|
||||
draw_dsc->border_opa = LV_OPA_MIX2(draw_dsc->border_opa, opa);
|
||||
draw_dsc->shadow_opa = LV_OPA_MIX2(draw_dsc->shadow_opa, opa);
|
||||
draw_dsc->outline_opa = LV_OPA_MIX2(draw_dsc->outline_opa, opa);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void lv_obj_init_draw_label_dsc(lv_obj_t * obj, uint32_t part, lv_draw_label_dsc_t * draw_dsc)
|
||||
{
|
||||
draw_dsc->base.obj = obj;
|
||||
@@ -157,16 +151,11 @@ void lv_obj_init_draw_label_dsc(lv_obj_t * obj, uint32_t part, lv_draw_label_dsc
|
||||
draw_dsc->opa = lv_obj_get_style_text_opa(obj, part);
|
||||
if(draw_dsc->opa <= LV_OPA_MIN) return;
|
||||
|
||||
if(part != LV_PART_MAIN) {
|
||||
lv_opa_t opa = lv_obj_get_style_opa(obj, part);
|
||||
if(opa <= LV_OPA_MIN) {
|
||||
draw_dsc->opa = LV_OPA_TRANSP;
|
||||
return;
|
||||
}
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->opa = LV_OPA_MIX2(opa, draw_dsc->opa);
|
||||
}
|
||||
lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, part);
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->opa = LV_OPA_MIX2(draw_dsc->opa, opa);
|
||||
}
|
||||
if(draw_dsc->opa <= LV_OPA_MIN) return;
|
||||
|
||||
draw_dsc->color = lv_obj_get_style_text_color_filtered(obj, part);
|
||||
draw_dsc->letter_space = lv_obj_get_style_text_letter_space(obj, part);
|
||||
@@ -191,16 +180,11 @@ void lv_obj_init_draw_img_dsc(lv_obj_t * obj, uint32_t part, lv_draw_img_dsc_t *
|
||||
draw_dsc->opa = lv_obj_get_style_img_opa(obj, part);
|
||||
if(draw_dsc->opa <= LV_OPA_MIN) return;
|
||||
|
||||
if(part != LV_PART_MAIN) {
|
||||
lv_opa_t opa = lv_obj_get_style_opa(obj, part);
|
||||
if(opa <= LV_OPA_MIN) {
|
||||
draw_dsc->opa = LV_OPA_TRANSP;
|
||||
return;
|
||||
}
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->opa = LV_OPA_MIX2(opa, draw_dsc->opa);
|
||||
}
|
||||
lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, part);
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->opa = LV_OPA_MIX2(draw_dsc->opa, opa);
|
||||
}
|
||||
if(draw_dsc->opa <= LV_OPA_MIN) return;
|
||||
|
||||
draw_dsc->angle = 0;
|
||||
draw_dsc->zoom = LV_ZOOM_NONE;
|
||||
@@ -221,16 +205,11 @@ void lv_obj_init_draw_line_dsc(lv_obj_t * obj, uint32_t part, lv_draw_line_dsc_t
|
||||
draw_dsc->opa = lv_obj_get_style_line_opa(obj, part);
|
||||
if(draw_dsc->opa <= LV_OPA_MIN) return;
|
||||
|
||||
if(part != LV_PART_MAIN) {
|
||||
lv_opa_t opa = lv_obj_get_style_opa(obj, part);
|
||||
if(opa <= LV_OPA_MIN) {
|
||||
draw_dsc->opa = LV_OPA_TRANSP;
|
||||
return;
|
||||
}
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->opa = LV_OPA_MIX2(opa, draw_dsc->opa);
|
||||
}
|
||||
lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, part);
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->opa = LV_OPA_MIX2(draw_dsc->opa, opa);
|
||||
}
|
||||
if(draw_dsc->opa <= LV_OPA_MIN) return;
|
||||
|
||||
draw_dsc->width = lv_obj_get_style_line_width(obj, part);
|
||||
if(draw_dsc->width == 0) return;
|
||||
@@ -259,16 +238,11 @@ void lv_obj_init_draw_arc_dsc(lv_obj_t * obj, uint32_t part, lv_draw_arc_dsc_t *
|
||||
draw_dsc->opa = lv_obj_get_style_arc_opa(obj, part);
|
||||
if(draw_dsc->opa <= LV_OPA_MIN) return;
|
||||
|
||||
if(part != LV_PART_MAIN) {
|
||||
lv_opa_t opa = lv_obj_get_style_opa(obj, part);
|
||||
if(opa <= LV_OPA_MIN) {
|
||||
draw_dsc->opa = LV_OPA_TRANSP;
|
||||
return;
|
||||
}
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->opa = LV_OPA_MIX2(opa, draw_dsc->opa);
|
||||
}
|
||||
lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, part);
|
||||
if(opa < LV_OPA_MAX) {
|
||||
draw_dsc->opa = LV_OPA_MIX2(draw_dsc->opa, opa);
|
||||
}
|
||||
if(draw_dsc->opa <= LV_OPA_MIN) return;
|
||||
|
||||
draw_dsc->color = lv_obj_get_style_arc_color_filtered(obj, part);
|
||||
draw_dsc->img_src = lv_obj_get_style_arc_img_src(obj, part);
|
||||
|
||||
+35
-1
@@ -563,6 +563,40 @@ lv_text_align_t lv_obj_calculate_style_text_align(const struct _lv_obj_t * obj,
|
||||
return align;
|
||||
}
|
||||
|
||||
lv_opa_t lv_obj_get_style_opa_recursive(const lv_obj_t * obj, lv_part_t part)
|
||||
{
|
||||
|
||||
lv_opa_t opa_obj = lv_obj_get_style_opa(obj, part);
|
||||
if(opa_obj <= LV_OPA_MIN) return LV_OPA_TRANSP;
|
||||
|
||||
lv_opa_t opa_final = LV_OPA_COVER;
|
||||
if(opa_obj < LV_OPA_MAX) {
|
||||
opa_final = LV_OPA_MIX2(opa_final, opa_obj);
|
||||
}
|
||||
|
||||
if(part != LV_PART_MAIN) {
|
||||
part = LV_PART_MAIN;
|
||||
}
|
||||
else {
|
||||
obj = lv_obj_get_parent(obj);
|
||||
}
|
||||
|
||||
while(obj) {
|
||||
opa_obj = lv_obj_get_style_opa(obj, part);
|
||||
if(opa_obj <= LV_OPA_MIN) return LV_OPA_TRANSP;
|
||||
if(opa_obj < LV_OPA_MAX) {
|
||||
opa_final = LV_OPA_MIX2(opa_final, opa_obj);
|
||||
}
|
||||
|
||||
obj = lv_obj_get_parent(obj);
|
||||
}
|
||||
|
||||
if(opa_final <= LV_OPA_MIN) return LV_OPA_TRANSP;
|
||||
if(opa_final >= LV_OPA_MAX) return LV_OPA_COVER;
|
||||
return opa_final;
|
||||
}
|
||||
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
@@ -919,7 +953,7 @@ static lv_layer_type_t calculate_layer_type(lv_obj_t * obj)
|
||||
{
|
||||
if(lv_obj_get_style_transform_angle(obj, 0) != 0) return LV_LAYER_TYPE_TRANSFORM;
|
||||
if(lv_obj_get_style_transform_zoom(obj, 0) != 256) return LV_LAYER_TYPE_TRANSFORM;
|
||||
if(lv_obj_get_style_opa(obj, 0) != LV_OPA_COVER) return LV_LAYER_TYPE_SIMPLE;
|
||||
if(lv_obj_get_style_opa_layered(obj, 0) != LV_OPA_COVER) return LV_LAYER_TYPE_SIMPLE;
|
||||
if(lv_obj_get_style_blend_mode(obj, 0) != LV_BLEND_MODE_NORMAL) return LV_LAYER_TYPE_SIMPLE;
|
||||
return LV_LAYER_TYPE_NONE;
|
||||
}
|
||||
|
||||
@@ -314,6 +314,17 @@ static inline lv_coord_t lv_obj_get_style_transform_zoom_safe(const struct _lv_o
|
||||
int16_t zoom = lv_obj_get_style_transform_zoom(obj, part);
|
||||
return zoom != 0 ? zoom : 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the `opa` style property from all parents and multiply and `>> 8` them.
|
||||
* @param obj the object whose opacity should be get
|
||||
* @param part the part whose opacity should be get. Non-MAIN parts will consider the `opa` of teh MAIN part too
|
||||
* @return the final opacity considering the parents' opacity too
|
||||
*/
|
||||
lv_opa_t lv_obj_get_style_opa_recursive(const struct _lv_obj_t * obj, lv_part_t part);
|
||||
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
@@ -632,6 +632,14 @@ void lv_obj_set_style_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selec
|
||||
lv_obj_set_local_style_prop(obj, LV_STYLE_OPA, v, selector);
|
||||
}
|
||||
|
||||
void lv_obj_set_style_opa_layered(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_obj_set_local_style_prop(obj, LV_STYLE_OPA_LAYERED, v, selector);
|
||||
}
|
||||
|
||||
void lv_obj_set_style_color_filter_dsc(struct _lv_obj_t * obj, const lv_color_filter_dsc_t * value, lv_style_selector_t selector)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
|
||||
@@ -535,6 +535,12 @@ static inline lv_opa_t lv_obj_get_style_opa(const struct _lv_obj_t * obj, uint32
|
||||
return (lv_opa_t)v.num;
|
||||
}
|
||||
|
||||
static inline lv_opa_t lv_obj_get_style_opa_layered(const struct _lv_obj_t * obj, uint32_t part)
|
||||
{
|
||||
lv_style_value_t v = lv_obj_get_style_prop(obj, part, LV_STYLE_OPA_LAYERED);
|
||||
return (lv_opa_t)v.num;
|
||||
}
|
||||
|
||||
static inline const lv_color_filter_dsc_t * lv_obj_get_style_color_filter_dsc(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_DSC);
|
||||
@@ -668,6 +674,7 @@ void lv_obj_set_style_text_align(struct _lv_obj_t * obj, lv_text_align_t value,
|
||||
void lv_obj_set_style_radius(struct _lv_obj_t * obj, lv_coord_t value, lv_style_selector_t selector);
|
||||
void lv_obj_set_style_clip_corner(struct _lv_obj_t * obj, bool value, lv_style_selector_t selector);
|
||||
void lv_obj_set_style_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
|
||||
void lv_obj_set_style_opa_layered(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
|
||||
void lv_obj_set_style_color_filter_dsc(struct _lv_obj_t * obj, const lv_color_filter_dsc_t * value, lv_style_selector_t selector);
|
||||
void lv_obj_set_style_color_filter_opa(struct _lv_obj_t * obj, lv_opa_t value, lv_style_selector_t selector);
|
||||
void lv_obj_set_style_anim(struct _lv_obj_t * obj, const lv_anim_t * value, lv_style_selector_t selector);
|
||||
|
||||
+1
-1
@@ -789,7 +789,7 @@ void refr_obj(lv_layer_t * layer, lv_obj_t * obj)
|
||||
lv_obj_redraw(layer, obj);
|
||||
}
|
||||
else {
|
||||
lv_opa_t opa = lv_obj_get_style_opa(obj, 0);
|
||||
lv_opa_t opa = lv_obj_get_style_opa_layered(obj, 0);
|
||||
if(opa < LV_OPA_MIN) return;
|
||||
|
||||
lv_area_t layer_area_full;
|
||||
|
||||
+3
-1
@@ -125,7 +125,8 @@ const uint8_t _lv_style_builtin_prop_flag_lookup_table[_LV_STYLE_NUM_BUILT_IN_PR
|
||||
|
||||
[LV_STYLE_RADIUS] = 0,
|
||||
[LV_STYLE_CLIP_CORNER] = 0,
|
||||
[LV_STYLE_OPA] = LV_STYLE_PROP_FLAG_LAYER_UPDATE,
|
||||
[LV_STYLE_OPA] = 0,
|
||||
[LV_STYLE_OPA_LAYERED] = LV_STYLE_PROP_FLAG_LAYER_UPDATE,
|
||||
[LV_STYLE_COLOR_FILTER_DSC] = LV_STYLE_PROP_FLAG_INHERITABLE,
|
||||
[LV_STYLE_COLOR_FILTER_OPA] = LV_STYLE_PROP_FLAG_INHERITABLE,
|
||||
[LV_STYLE_ANIM_TIME] = 0,
|
||||
@@ -332,6 +333,7 @@ lv_style_value_t lv_style_prop_get_default(lv_style_prop_t prop)
|
||||
value.color = lv_color_black();
|
||||
break;
|
||||
case LV_STYLE_OPA:
|
||||
case LV_STYLE_OPA_LAYERED:
|
||||
case LV_STYLE_BORDER_OPA:
|
||||
case LV_STYLE_TEXT_OPA:
|
||||
case LV_STYLE_IMG_OPA:
|
||||
|
||||
+17
-16
@@ -292,23 +292,24 @@ enum _lv_style_prop_t {
|
||||
|
||||
/*Group 6*/
|
||||
LV_STYLE_OPA = 96,
|
||||
LV_STYLE_COLOR_FILTER_DSC = 97,
|
||||
LV_STYLE_COLOR_FILTER_OPA = 98,
|
||||
LV_STYLE_ANIM = 99,
|
||||
LV_STYLE_ANIM_TIME = 100,
|
||||
LV_STYLE_ANIM_SPEED = 101,
|
||||
LV_STYLE_TRANSITION = 102,
|
||||
LV_STYLE_BLEND_MODE = 103,
|
||||
LV_STYLE_TRANSFORM_WIDTH = 104,
|
||||
LV_STYLE_TRANSFORM_HEIGHT = 105,
|
||||
LV_STYLE_TRANSLATE_X = 106,
|
||||
LV_STYLE_TRANSLATE_Y = 107,
|
||||
LV_STYLE_TRANSFORM_ZOOM = 108,
|
||||
LV_STYLE_TRANSFORM_ANGLE = 109,
|
||||
LV_STYLE_TRANSFORM_PIVOT_X = 110,
|
||||
LV_STYLE_TRANSFORM_PIVOT_Y = 111,
|
||||
LV_STYLE_OPA_LAYERED = 97,
|
||||
LV_STYLE_COLOR_FILTER_DSC = 98,
|
||||
LV_STYLE_COLOR_FILTER_OPA = 99,
|
||||
LV_STYLE_ANIM = 100,
|
||||
LV_STYLE_ANIM_TIME = 101,
|
||||
LV_STYLE_ANIM_SPEED = 102,
|
||||
LV_STYLE_TRANSITION = 103,
|
||||
LV_STYLE_BLEND_MODE = 104,
|
||||
LV_STYLE_TRANSFORM_WIDTH = 105,
|
||||
LV_STYLE_TRANSFORM_HEIGHT = 106,
|
||||
LV_STYLE_TRANSLATE_X = 107,
|
||||
LV_STYLE_TRANSLATE_Y = 108,
|
||||
LV_STYLE_TRANSFORM_ZOOM = 109,
|
||||
LV_STYLE_TRANSFORM_ANGLE = 110,
|
||||
LV_STYLE_TRANSFORM_PIVOT_X = 111,
|
||||
LV_STYLE_TRANSFORM_PIVOT_Y = 112,
|
||||
|
||||
_LV_STYLE_LAST_BUILT_IN_PROP = 111,
|
||||
_LV_STYLE_LAST_BUILT_IN_PROP = 112,
|
||||
_LV_STYLE_NUM_BUILT_IN_PROPS = _LV_STYLE_LAST_BUILT_IN_PROP + 1,
|
||||
|
||||
LV_STYLE_PROP_ANY = 0xFFFF,
|
||||
|
||||
@@ -790,6 +790,16 @@ void lv_style_set_opa(lv_style_t * style, lv_opa_t value)
|
||||
|
||||
const lv_style_prop_t _lv_style_const_prop_id_OPA = LV_STYLE_OPA;
|
||||
|
||||
void lv_style_set_opa_layered(lv_style_t * style, lv_opa_t value)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
.num = (int32_t)value
|
||||
};
|
||||
lv_style_set_prop(style, LV_STYLE_OPA_LAYERED, v);
|
||||
}
|
||||
|
||||
const lv_style_prop_t _lv_style_const_prop_id_OPA_LAYERED = LV_STYLE_OPA_LAYERED;
|
||||
|
||||
void lv_style_set_color_filter_dsc(lv_style_t * style, const lv_color_filter_dsc_t * value)
|
||||
{
|
||||
lv_style_value_t v = {
|
||||
|
||||
@@ -156,6 +156,8 @@ void lv_style_set_clip_corner(lv_style_t * style, bool value);
|
||||
extern const lv_style_prop_t _lv_style_const_prop_id_CLIP_CORNER;
|
||||
void lv_style_set_opa(lv_style_t * style, lv_opa_t value);
|
||||
extern const lv_style_prop_t _lv_style_const_prop_id_OPA;
|
||||
void lv_style_set_opa_layered(lv_style_t * style, lv_opa_t value);
|
||||
extern const lv_style_prop_t _lv_style_const_prop_id_OPA_LAYERED;
|
||||
void lv_style_set_color_filter_dsc(lv_style_t * style, const lv_color_filter_dsc_t * value);
|
||||
extern const lv_style_prop_t _lv_style_const_prop_id_COLOR_FILTER_DSC;
|
||||
void lv_style_set_color_filter_opa(lv_style_t * style, lv_opa_t value);
|
||||
@@ -570,6 +572,11 @@ extern const lv_style_prop_t _lv_style_const_prop_id_BASE_DIR;
|
||||
.prop_ptr = &_lv_style_const_prop_id_OPA, .value = { .num = (int32_t)val } \
|
||||
}
|
||||
|
||||
#define LV_STYLE_CONST_OPA_LAYERED(val) \
|
||||
{ \
|
||||
.prop_ptr = &_lv_style_const_prop_id_OPA_LAYERED, .value = { .num = (int32_t)val } \
|
||||
}
|
||||
|
||||
#define LV_STYLE_CONST_COLOR_FILTER_DSC(val) \
|
||||
{ \
|
||||
.prop_ptr = &_lv_style_const_prop_id_COLOR_FILTER_DSC, .value = { .ptr = val } \
|
||||
|
||||
@@ -340,7 +340,7 @@ static void draw_arcs(lv_obj_t * obj, lv_layer_t * layer, const lv_area_t * scal
|
||||
scale_center.x = scale_area->x1 + r_out;
|
||||
scale_center.y = scale_area->y1 + r_out;
|
||||
|
||||
lv_opa_t opa_main = lv_obj_get_style_opa(obj, LV_PART_MAIN);
|
||||
lv_opa_t opa_main = lv_obj_get_style_opa_recursive(obj, LV_PART_MAIN);
|
||||
lv_meter_indicator_t * indic;
|
||||
|
||||
_LV_LL_READ_BACK(&meter->indicator_ll, indic) {
|
||||
@@ -493,7 +493,7 @@ static void draw_needles(lv_obj_t * obj, lv_layer_t * layer, const lv_area_t * s
|
||||
lv_draw_img_dsc_t img_dsc;
|
||||
lv_draw_img_dsc_init(&img_dsc);
|
||||
lv_obj_init_draw_img_dsc(obj, LV_PART_ITEMS, &img_dsc);
|
||||
lv_opa_t opa_main = lv_obj_get_style_opa(obj, LV_PART_MAIN);
|
||||
lv_opa_t opa_main = lv_obj_get_style_opa_recursive(obj, LV_PART_MAIN);
|
||||
|
||||
lv_meter_indicator_t * indic;
|
||||
_LV_LL_READ_BACK(&meter->indicator_ll, indic) {
|
||||
|
||||
@@ -797,7 +797,7 @@ static void lv_draw_span(lv_obj_t * obj, lv_layer_t * layer)
|
||||
lv_coord_t max_width = lv_area_get_width(&coords);
|
||||
lv_coord_t indent = convert_indent_pct(obj, max_width);
|
||||
lv_coord_t max_w = max_width - indent; /* first line need minus indent */
|
||||
lv_opa_t obj_opa = lv_obj_get_style_opa(obj, LV_PART_MAIN);
|
||||
lv_opa_t obj_opa = lv_obj_get_style_opa_recursive(obj, LV_PART_MAIN);
|
||||
|
||||
/* coords of draw span-txt */
|
||||
lv_point_t txt_pos;
|
||||
|
||||
@@ -45,13 +45,13 @@ void test_layer_mixed_rgb(void)
|
||||
obj = create_test_obj("Normal", true);
|
||||
|
||||
obj = create_test_obj("Opa = 50%", true);
|
||||
lv_obj_set_style_opa(obj, LV_OPA_50, 0);
|
||||
lv_obj_set_style_opa_layered(obj, LV_OPA_50, 0);
|
||||
|
||||
obj = create_test_obj("Opa = 20%", true);
|
||||
lv_obj_set_style_opa(obj, LV_OPA_20, 0);
|
||||
lv_obj_set_style_opa_layered(obj, LV_OPA_20, 0);
|
||||
|
||||
obj = create_test_obj("Opa = 90%", true);
|
||||
lv_obj_set_style_opa(obj, LV_OPA_90, 0);
|
||||
lv_obj_set_style_opa_layered(obj, LV_OPA_90, 0);
|
||||
|
||||
obj = create_test_obj("Subtractive", true);
|
||||
lv_obj_set_style_blend_mode(obj, LV_BLEND_MODE_SUBTRACTIVE, 0);
|
||||
@@ -80,13 +80,13 @@ void test_layer_mixed_argb(void)
|
||||
obj = create_test_obj("Normal", false);
|
||||
|
||||
obj = create_test_obj("Opa = 50%", false);
|
||||
lv_obj_set_style_opa(obj, LV_OPA_50, 0);
|
||||
lv_obj_set_style_opa_layered(obj, LV_OPA_50, 0);
|
||||
|
||||
obj = create_test_obj("Opa = 20%", false);
|
||||
lv_obj_set_style_opa(obj, LV_OPA_20, 0);
|
||||
lv_obj_set_style_opa_layered(obj, LV_OPA_20, 0);
|
||||
|
||||
obj = create_test_obj("Opa = 90%", false);
|
||||
lv_obj_set_style_opa(obj, LV_OPA_90, 0);
|
||||
lv_obj_set_style_opa_layered(obj, LV_OPA_90, 0);
|
||||
|
||||
obj = create_test_obj("Subtractive", false);
|
||||
lv_obj_set_style_blend_mode(obj, LV_BLEND_MODE_SUBTRACTIVE, 0);
|
||||
@@ -114,7 +114,7 @@ void test_layer_large_opa_argb(void)
|
||||
obj = create_test_obj(lorem_ipsum, false);
|
||||
lv_obj_set_width(lv_obj_get_child(obj, 0), lv_pct(100));
|
||||
lv_obj_set_size(obj, 600, 400);
|
||||
lv_obj_set_style_opa(obj, LV_OPA_50, 0);
|
||||
lv_obj_set_style_opa_layered(obj, LV_OPA_50, 0);
|
||||
|
||||
TEST_ASSERT_EQUAL_SCREENSHOT("draw/layer_large_opa_argb.png");
|
||||
}
|
||||
@@ -125,7 +125,7 @@ void test_layer_large_opa_rgb(void)
|
||||
obj = create_test_obj(lorem_ipsum, true);
|
||||
lv_obj_set_width(lv_obj_get_child(obj, 0), lv_pct(100));
|
||||
lv_obj_set_size(obj, 600, 400);
|
||||
lv_obj_set_style_opa(obj, LV_OPA_50, 0);
|
||||
lv_obj_set_style_opa_layered(obj, LV_OPA_50, 0);
|
||||
|
||||
TEST_ASSERT_EQUAL_SCREENSHOT("draw/layer_large_opa_rgb.png");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user