diff --git a/lvgl.h b/lvgl.h index 07842034f..f071833f2 100644 --- a/lvgl.h +++ b/lvgl.h @@ -83,6 +83,7 @@ extern "C" { #define LVGL_VERSION_PATCH 0 #define LVGL_VERSION_INFO "dev" +#define LV_BUILD_TEST 1 /********************** * TYPEDEFS **********************/ diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 04847ee82..c488787ac 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -61,13 +61,13 @@ typedef struct { lv_color_t _color; lv_style_int_t _int; lv_opa_t _opa; - const void * _ptr; + lv_style_fptr_dptr_t _ptr; } start_value; union { lv_color_t _color; lv_style_int_t _int; lv_opa_t _opa; - const void * _ptr; + lv_style_fptr_dptr_t _ptr; } end_value; } lv_style_trans_t; @@ -1252,15 +1252,15 @@ void _lv_obj_set_style_local_opa(lv_obj_t * obj, uint8_t part, lv_style_property * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` * @param prop a style property ORed with a state. * E.g. `LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` - * @param the value to set + * @param value the value to set * @note shouldn't be used directly. Use the specific property get functions instead. * For example: `lv_obj_style_get_border_opa()` * @note for performance reasons it's not checked if the property really has pointer type */ -void _lv_obj_set_style_local_ptr(lv_obj_t * obj, uint8_t part, lv_style_property_t prop, const void * p) +void _lv_obj_set_style_local_ptr(lv_obj_t * obj, uint8_t part, lv_style_property_t prop, lv_style_fptr_dptr_t value) { lv_style_list_t * style_dsc = lv_obj_get_style_list(obj, part); - lv_style_list_set_local_ptr(style_dsc, prop, p); + lv_style_list_set_local_ptr(style_dsc, prop, value); #if LV_USE_ANIMATION trans_del(obj, part, prop, NULL); #endif @@ -2410,14 +2410,14 @@ lv_opa_t _lv_obj_get_style_opa(const lv_obj_t * obj, uint8_t part, lv_style_prop * For example: `lv_obj_style_get_border_opa()` * @note for performance reasons it's not checked if the property really has pointer type */ -const void * _lv_obj_get_style_ptr(const lv_obj_t * obj, uint8_t part, lv_style_property_t prop) +lv_style_fptr_dptr_t _lv_obj_get_style_ptr(const lv_obj_t * obj, uint8_t part, lv_style_property_t prop) { lv_style_property_t prop_ori = prop; lv_style_attr_t attr; attr.full = prop_ori >> 8; - void * value_act; + lv_style_fptr_dptr_t value_act; lv_res_t res = LV_RES_INV; const lv_obj_t * parent = obj; while(parent) { @@ -2443,17 +2443,22 @@ const void * _lv_obj_get_style_ptr(const lv_obj_t * obj, uint8_t part, lv_style_ /*Handle unset values*/ prop = prop & (~LV_STYLE_STATE_MASK); + lv_style_fptr_dptr_t fd; + fd.dptr = NULL; + fd.fptr = NULL; switch(prop) { case LV_STYLE_TEXT_FONT: case LV_STYLE_VALUE_FONT: - return LV_THEME_DEFAULT_FONT_NORMAL; + fd.dptr = LV_THEME_DEFAULT_FONT_NORMAL; + return fd; #if LV_USE_ANIMATION case LV_STYLE_TRANSITION_PATH: - return lv_anim_path_linear; + fd.fptr = (lv_style_prop_cb_t)lv_anim_path_linear; + return fd; #endif } - return NULL; + return fd; } /** @@ -3650,22 +3655,22 @@ static lv_style_trans_t * trans_create(lv_obj_t * obj, lv_style_property_t prop, else { /*Ptr*/ obj->state = prev_state; style_list->skip_trans = 1; - const void * p1 = _lv_obj_get_style_ptr(obj, part, prop); + lv_style_fptr_dptr_t fd1 = _lv_obj_get_style_ptr(obj, part, prop); obj->state = new_state; - const void * p2 = _lv_obj_get_style_ptr(obj, part, prop); + lv_style_fptr_dptr_t fd2 = _lv_obj_get_style_ptr(obj, part, prop); style_list->skip_trans = 0; - if(p1 == p2) return NULL; + if(memcmp(&fd1, &fd2, sizeof(lv_style_fptr_dptr_t)) == 0) return NULL; obj->state = prev_state; - p1 = _lv_obj_get_style_ptr(obj, part, prop); + fd1 = _lv_obj_get_style_ptr(obj, part, prop); obj->state = new_state; - _lv_style_set_ptr(style_trans, prop, p1); /*Be sure `trans_style` has a valid value */ + _lv_style_set_ptr(style_trans, prop, fd1); /*Be sure `trans_style` has a valid value */ tr = lv_ll_ins_head(&LV_GC_ROOT(_lv_obj_style_trans_ll)); LV_ASSERT_MEM(tr); if(tr == NULL) return NULL; - tr->start_value._ptr = p1; - tr->end_value._ptr = p2; + tr->start_value._ptr = fd1; + tr->end_value._ptr = fd2; } return tr; @@ -3727,7 +3732,7 @@ static void trans_anim_cb(lv_style_trans_t * tr, lv_anim_value_t v) _lv_style_set_opa(style, tr->prop, x); } else { - const void * x; + lv_style_fptr_dptr_t x; if(v < 128) x = tr->start_value._ptr; else x = tr->end_value._ptr; _lv_style_set_ptr(style, tr->prop, x); diff --git a/src/lv_core/lv_obj.h b/src/lv_core/lv_obj.h index 67741d9a7..bc20069c2 100644 --- a/src/lv_core/lv_obj.h +++ b/src/lv_core/lv_obj.h @@ -570,7 +570,46 @@ void _lv_obj_set_style_local_opa(lv_obj_t * obj, uint8_t type, lv_style_property * For example: `lv_obj_style_get_border_opa()` * @note for performance reasons it's not checked if the property really has pointer type */ -void _lv_obj_set_style_local_ptr(lv_obj_t * obj, uint8_t type, lv_style_property_t prop, const void * value); +void _lv_obj_set_style_local_ptr(lv_obj_t * obj, uint8_t type, lv_style_property_t prop, lv_style_fptr_dptr_t value); + +/** + * Set a local style property of a part of an object in a given state. + * @param obj pointer to an object + * @param part the part of the object which style property should be set. + * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param the value to set + * @note shouldn't be used directly. Use the specific property get functions instead. + * For example: `lv_obj_style_get_trasition_path()` + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline void _lv_obj_set_style_local_func_ptr(lv_obj_t * obj, uint8_t type, lv_style_property_t prop, lv_style_prop_cb_t value) +{ + lv_style_fptr_dptr_t fd; + fd.fptr = value; + fd.dptr = NULL; + _lv_obj_set_style_local_ptr(obj, type, prop, fd); +} +/** + * Set a local style property of a part of an object in a given state. + * @param obj pointer to an object + * @param part the part of the object which style property should be set. + * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param the value to set + * @note shouldn't be used directly. Use the specific property get functions instead. + * For example: `lv_obj_style_get_text_font()` + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline void _lv_obj_set_style_local_data_ptr(lv_obj_t * obj, uint8_t type, lv_style_property_t prop, const void * value) +{ + lv_style_fptr_dptr_t fd; + fd.fptr = NULL; + fd.dptr = value; + _lv_obj_set_style_local_ptr(obj, type, prop, fd); +} /** * Remove a local style property from a part of an object with a given state. @@ -1034,7 +1073,50 @@ lv_opa_t _lv_obj_get_style_opa(const lv_obj_t * obj, uint8_t part, lv_style_prop * For example: `lv_obj_style_get_border_opa()` * @note for performance reasons it's not checked if the property really has pointer type */ -const void * _lv_obj_get_style_ptr(const lv_obj_t * obj, uint8_t part, lv_style_property_t prop); +lv_style_fptr_dptr_t _lv_obj_get_style_ptr(const lv_obj_t * obj, uint8_t part, lv_style_property_t prop); + +/** + * Get a style property of a part of an object in the object's current state. + * If there is a running transitions it is taken into account + * @param obj pointer to an object + * @param part the part of the object which style property should be get. + * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` + * @param prop the property to get. E.g. `LV_STYLE_TEXT_FONT`. + * The state of the object will be added internally + * @return the value of the property of the given part in the current state. + * If the property is not found a default value will be returned. + * @note shouldn't be used directly. Use the specific property get functions instead. + * For example: `lv_obj_style_get_trasition_path()` + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline lv_style_prop_cb_t _lv_obj_get_style_func_ptr(const lv_obj_t * obj, uint8_t part, lv_style_property_t prop) +{ + lv_style_fptr_dptr_t fd; + fd = _lv_obj_get_style_ptr(obj, part, prop); + return fd.fptr; +} + +/** + * Get a style property of a part of an object in the object's current state. + * If there is a running transitions it is taken into account + * @param obj pointer to an object + * @param part the part of the object which style property should be get. + * E.g. `LV_OBJ_PART_MAIN`, `LV_BTN_PART_MAIN`, `LV_SLIDER_PART_KNOB` + * @param prop the property to get. E.g. `LV_STYLE_TEXT_FONT`. + * The state of the object will be added internally + * @return the value of the property of the given part in the current state. + * If the property is not found a default value will be returned. + * @note shouldn't be used directly. Use the specific property get functions instead. + * For example: `lv_obj_style_get_text_font()` + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline const void * _lv_obj_get_style_data_ptr(const lv_obj_t * obj, uint8_t part, lv_style_property_t prop) +{ + lv_style_fptr_dptr_t fd; + fd = _lv_obj_get_style_ptr(obj, part, prop); + return fd.dptr; +} + /** diff --git a/src/lv_core/lv_obj_style_dec.h b/src/lv_core/lv_obj_style_dec.h index 1c991b946..8f6fb0864 100644 --- a/src/lv_core/lv_obj_style_dec.h +++ b/src/lv_core/lv_obj_style_dec.h @@ -58,41 +58,82 @@ extern "C" { * `lv_style_set_border_width(&style1, LV_STATE_PRESSED, 2);` */ +#ifdef __cplusplus +#define FUNC_PTR_CAST(v) reinterpret_cast(v) +#else +#define FUNC_PTR_CAST(v) (lv_style_prop_cb_t)v +#endif -#define _LV_OBJ_STYLE_DECLARE_GET_scalar(prop_name, func_name, value_type, style_type) \ +#define _OBJ_GET_STYLE_scalar(prop_name, func_name, value_type, style_type) \ static inline value_type lv_obj_get_style_##func_name (const lv_obj_t * obj, uint8_t part) \ { \ return (value_type) _lv_obj_get_style##style_type (obj, part, LV_STYLE_##prop_name); \ } -#define _LV_OBJ_STYLE_DECLARE_GET_nonscalar(prop_name, func_name, value_type, style_type) \ +#define _OBJ_GET_STYLE_func_ptr(prop_name, func_name, value_type, style_type) \ + static inline value_type lv_obj_get_style_##func_name (const lv_obj_t * obj, uint8_t part) \ + { \ + return (value_type) _lv_obj_get_style##style_type (obj, part, LV_STYLE_##prop_name); \ + } + +#define _OBJ_GET_STYLE_nonscalar(prop_name, func_name, value_type, style_type) \ static inline value_type lv_obj_get_style_##func_name (const lv_obj_t * obj, uint8_t part) \ { \ return _lv_obj_get_style##style_type (obj, part, LV_STYLE_##prop_name); \ } -#define _LV_OBJ_STYLE_SET_GET_DECLARE(prop_name, func_name, value_type, style_type, scalar) \ - _LV_OBJ_STYLE_DECLARE_GET_##scalar(prop_name, func_name, value_type, style_type) \ - static inline void lv_obj_set_style_local_##func_name (lv_obj_t * obj, uint8_t part, lv_state_t state, value_type value) \ - { \ - _lv_obj_set_style_local##style_type (obj, part, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), value); \ - } \ +#define _OBJ_SET_STYLE_LOCAL_scalar(prop_name, func_name, value_type, style_type) \ + static inline void lv_obj_set_style_local_##func_name (lv_obj_t * obj, uint8_t part, lv_state_t state, value_type value) \ + { \ + _lv_obj_set_style_local##style_type (obj, part, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), value); \ + } + +#define _OBJ_SET_STYLE_LOCAL_nonscalar(prop_name, func_name, value_type, style_type) \ + static inline void lv_obj_set_style_local_##func_name (lv_obj_t * obj, uint8_t part, lv_state_t state, value_type value) \ + { \ + _lv_obj_set_style_local##style_type (obj, part, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), value); \ + } + +#define _OBJ_SET_STYLE_LOCAL_func_ptr(prop_name, func_name, value_type, style_type) \ + static inline void lv_obj_set_style_local_##func_name (lv_obj_t * obj, uint8_t part, lv_state_t state, value_type value) \ + { \ + _lv_obj_set_style_local##style_type (obj, part, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), FUNC_PTR_CAST(value)); \ + } + +#define _OBJ_SET_STYLE_scalar(prop_name, func_name, value_type, style_type) \ + static inline void lv_style_set_##func_name (lv_style_t * style, lv_state_t state, value_type value) \ + { \ + _lv_style_set##style_type (style, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), value); \ + } + +#define _OBJ_SET_STYLE_nonscalar(prop_name, func_name, value_type, style_type) \ + static inline void lv_style_set_##func_name (lv_style_t * style, lv_state_t state, value_type value) \ + { \ + _lv_style_set##style_type (style, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), value); \ + } + +#define _OBJ_SET_STYLE_func_ptr(prop_name, func_name, value_type, style_type) \ + static inline void lv_style_set_##func_name (lv_style_t * style, lv_state_t state, value_type value) \ + { \ + _lv_style_set##style_type (style, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), FUNC_PTR_CAST(value)); \ + } \ + +#define _LV_OBJ_STYLE_SET_GET_DECLARE(prop_name, func_name, value_type, style_type, scalar) \ + _OBJ_GET_STYLE_##scalar(prop_name, func_name, value_type, style_type) \ + _OBJ_SET_STYLE_LOCAL_##scalar(prop_name, func_name, value_type, style_type) \ static inline void lv_obj_get_style_local_##func_name (lv_obj_t * obj, uint8_t part, lv_state_t state, void * res) \ { \ _lv_style_get##style_type (lv_obj_get_local_style(obj, part), LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), res); \ - } \ - static inline void lv_obj_remove_style_local_##func_name (lv_obj_t * obj, uint8_t part, lv_state_t state) \ + } \ + static inline void lv_obj_remove_style_local_##func_name (lv_obj_t * obj, uint8_t part, lv_state_t state) \ { \ - _lv_obj_remove_style_local_prop(obj, part, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS)); \ + _lv_obj_remove_style_local_prop(obj, part, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS)); \ } \ static inline int16_t lv_style_get_##func_name (lv_style_t * style, lv_state_t state, void * res) \ { \ return _lv_style_get##style_type (style, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), res); \ } \ - static inline void lv_style_set_##func_name (lv_style_t * style, lv_state_t state, value_type value) \ - { \ - _lv_style_set##style_type (style, LV_STYLE_##prop_name | (state << LV_STYLE_STATE_POS), value); \ - } + _OBJ_SET_STYLE_##scalar(prop_name, func_name, value_type, style_type) _LV_OBJ_STYLE_SET_GET_DECLARE(RADIUS, radius, lv_style_int_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(CLIP_CORNER, clip_corner, bool, _int, scalar) @@ -135,7 +176,7 @@ _LV_OBJ_STYLE_SET_GET_DECLARE(PATTERN_BLEND_MODE, pattern_blend_mode, lv_blend_m _LV_OBJ_STYLE_SET_GET_DECLARE(PATTERN_RECOLOR, pattern_recolor, lv_color_t, _color, nonscalar) _LV_OBJ_STYLE_SET_GET_DECLARE(PATTERN_OPA, pattern_opa, lv_opa_t, _opa, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(PATTERN_RECOLOR_OPA, pattern_recolor_opa, lv_opa_t, _opa, scalar) -_LV_OBJ_STYLE_SET_GET_DECLARE(PATTERN_IMAGE, pattern_image, const void *, _ptr, scalar) +_LV_OBJ_STYLE_SET_GET_DECLARE(PATTERN_IMAGE, pattern_image, const void *, _data_ptr, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_LETTER_SPACE, value_letter_space, lv_style_int_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_LINE_SPACE, value_line_space, lv_style_int_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_BLEND_MODE, value_blend_mode, lv_blend_mode_t, _int, scalar) @@ -144,8 +185,8 @@ _LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_OFS_Y, value_ofs_y, lv_style_int_t, _int, sc _LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_ALIGN, value_align, lv_align_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_COLOR, value_color, lv_color_t, _color, nonscalar) _LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_OPA, value_opa, lv_opa_t, _opa, scalar) -_LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_FONT, value_font, const lv_font_t *, _ptr, scalar) -_LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_STR, value_str, const char *, _ptr, scalar) +_LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_FONT, value_font, const lv_font_t *, _data_ptr, scalar) +_LV_OBJ_STYLE_SET_GET_DECLARE(VALUE_STR, value_str, const char *, _data_ptr, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_LETTER_SPACE, text_letter_space, lv_style_int_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_LINE_SPACE, text_line_space, lv_style_int_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_DECOR, text_decor, lv_text_decor_t, _int, scalar) @@ -153,7 +194,7 @@ _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_BLEND_MODE, text_blend_mode, lv_blend_mode_t, _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_COLOR, text_color, lv_color_t, _color, nonscalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_SEL_COLOR, text_sel_color, lv_color_t, _color, nonscalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_OPA, text_opa, lv_opa_t, _opa, scalar) -_LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_FONT, text_font, const lv_font_t *, _ptr, scalar) +_LV_OBJ_STYLE_SET_GET_DECLARE(TEXT_FONT, text_font, const lv_font_t *, _data_ptr, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(LINE_WIDTH, line_width, lv_style_int_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(LINE_BLEND_MODE, line_blend_mode, lv_blend_mode_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(LINE_DASH_WIDTH, line_dash_width, lv_style_int_t, _int, scalar) @@ -174,9 +215,9 @@ _LV_OBJ_STYLE_SET_GET_DECLARE(TRANSITION_PROP_4, transition_prop_4, lv_style_int _LV_OBJ_STYLE_SET_GET_DECLARE(TRANSITION_PROP_5, transition_prop_5, lv_style_int_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(TRANSITION_PROP_6, transition_prop_6, lv_style_int_t, _int, scalar) #if LV_USE_ANIMATION -_LV_OBJ_STYLE_SET_GET_DECLARE(TRANSITION_PATH, transition_path, lv_anim_path_cb_t, _ptr, scalar) +_LV_OBJ_STYLE_SET_GET_DECLARE(TRANSITION_PATH, transition_path, lv_anim_path_cb_t, _func_ptr, func_ptr) #else -_LV_OBJ_STYLE_SET_GET_DECLARE(TRANSITION_PATH, transition_path, void *, _ptr, scalar) /*For compatibility*/ +_LV_OBJ_STYLE_SET_GET_DECLARE(TRANSITION_PATH, transition_path,lv_style_prop_cb_t, _func_ptr, func_ptr) /*For compatibility*/ #endif _LV_OBJ_STYLE_SET_GET_DECLARE(SCALE_WIDTH, scale_width, lv_style_int_t, _int, scalar) _LV_OBJ_STYLE_SET_GET_DECLARE(SCALE_BORDER_WIDTH, scale_border_width, lv_style_int_t, _int, scalar) diff --git a/src/lv_core/lv_style.c b/src/lv_core/lv_style.c index 78c39caf9..6512664d3 100644 --- a/src/lv_core/lv_style.c +++ b/src/lv_core/lv_style.c @@ -112,7 +112,7 @@ bool lv_style_remove_prop(lv_style_t * style, lv_style_property_t prop) if((prop & 0xF) < LV_STYLE_ID_COLOR) prop_size += sizeof(lv_style_int_t); else if((prop & 0xF) < LV_STYLE_ID_OPA) prop_size += sizeof(lv_color_t); else if((prop & 0xF) < LV_STYLE_ID_PTR) prop_size += sizeof(lv_opa_t); - else prop_size += sizeof(const void *); + else prop_size += sizeof(lv_style_fptr_dptr_t); /*Move the props to fill the space of the property to delete*/ uint32_t i; @@ -341,7 +341,7 @@ uint16_t lv_style_get_mem_size(const lv_style_t * style) if((style->map[i] & 0xF) < LV_STYLE_ID_COLOR) i += sizeof(lv_style_int_t); else if((style->map[i] & 0xF) < LV_STYLE_ID_OPA) i += sizeof(lv_color_t); else if((style->map[i] & 0xF) < LV_STYLE_ID_PTR) i += sizeof(lv_opa_t); - else i += sizeof(void *); + else i += sizeof(lv_style_fptr_dptr_t); i += sizeof(lv_style_property_t); } @@ -499,7 +499,7 @@ void _lv_style_set_opa(lv_style_t * style, lv_style_property_t prop, lv_opa_t op * For example: `lv_style_set_border_width()` * @note for performance reasons it's not checked if the property is really has pointer type */ -void _lv_style_set_ptr(lv_style_t * style, lv_style_property_t prop, const void * p) +void _lv_style_set_ptr(lv_style_t * style, lv_style_property_t prop, lv_style_fptr_dptr_t p) { LV_ASSERT_STYLE(style); @@ -513,26 +513,26 @@ void _lv_style_set_ptr(lv_style_t * style, lv_style_property_t prop, const void attr_goal.full = (prop >> 8) & 0xFFU; if(attr_found.bits.state == attr_goal.bits.state) { - memcpy(style->map + id + sizeof(lv_style_property_t), &p, sizeof(void *)); + memcpy(style->map + id + sizeof(lv_style_property_t), &p, sizeof(lv_style_fptr_dptr_t)); return; } } /*Add new property if not exists yet*/ - uint8_t new_prop_size = (sizeof(lv_style_property_t) + sizeof(void *)); + uint8_t new_prop_size = (sizeof(lv_style_property_t) + sizeof(lv_style_fptr_dptr_t)); lv_style_property_t end_mark = _LV_STYLE_CLOSEING_PROP; uint8_t end_mark_size = sizeof(end_mark); uint16_t size = lv_style_get_mem_size(style); if(size == 0) size += end_mark_size; - size += sizeof(lv_style_property_t) + sizeof(void *); + size += sizeof(lv_style_property_t) + sizeof(lv_style_fptr_dptr_t); style->map = lv_mem_realloc(style->map, size); LV_ASSERT_MEM(style->map); if(style == NULL) return; memcpy(style->map + size - new_prop_size - end_mark_size, &prop, sizeof(lv_style_property_t)); - memcpy(style->map + size - sizeof(void *) - end_mark_size, &p, sizeof(void *)); + memcpy(style->map + size - sizeof(lv_style_fptr_dptr_t) - end_mark_size, &p, sizeof(lv_style_fptr_dptr_t)); memcpy(style->map + size - end_mark_size, &end_mark, sizeof(end_mark)); } @@ -654,7 +654,7 @@ int16_t _lv_style_get_color(const lv_style_t * style, lv_style_property_t prop, */ int16_t _lv_style_get_ptr(const lv_style_t * style, lv_style_property_t prop, void * v_res) { - void ** res = (void *)v_res; + lv_style_fptr_dptr_t * res = (lv_style_fptr_dptr_t *)v_res; if(style == NULL) return -1; if(style->map == NULL) return -1; int32_t id = get_property_index(style, prop); @@ -662,7 +662,7 @@ int16_t _lv_style_get_ptr(const lv_style_t * style, lv_style_property_t prop, vo return -1; } else { - memcpy(res, &style->map[id + sizeof(lv_style_property_t)], sizeof(void *)); + memcpy(res, &style->map[id + sizeof(lv_style_property_t)], sizeof(lv_style_fptr_dptr_t)); lv_style_attr_t attr_act; attr_act.full = style->map[id + 1]; @@ -788,7 +788,7 @@ void lv_style_list_set_local_color(lv_style_list_t * list, lv_style_property_t p * @param value the value to set * @note for performance reasons it's not checked if the property really has pointer type */ -void lv_style_list_set_local_ptr(lv_style_list_t * list, lv_style_property_t prop, const void * value) +void lv_style_list_set_local_ptr(lv_style_list_t * list, lv_style_property_t prop, lv_style_fptr_dptr_t value) { LV_ASSERT_STYLE_LIST(list); @@ -796,6 +796,8 @@ void lv_style_list_set_local_ptr(lv_style_list_t * list, lv_style_property_t pro _lv_style_set_ptr(local, prop, value); } + + /** * Get an integer typed property from a style list. * It will return the property which match best with given state. @@ -959,7 +961,7 @@ lv_res_t lv_style_list_get_opa(lv_style_list_t * list, lv_style_property_t prop, * LV_RES_INV: there was NO matching property in the list * @note for performance reasons it's not checked if the property really has pointer type */ -lv_res_t lv_style_list_get_ptr(lv_style_list_t * list, lv_style_property_t prop, void ** res) +lv_res_t lv_style_list_get_ptr(lv_style_list_t * list, lv_style_property_t prop, lv_style_fptr_dptr_t * res) { LV_ASSERT_STYLE_LIST(list); @@ -972,7 +974,9 @@ lv_res_t lv_style_list_get_ptr(lv_style_list_t * list, lv_style_property_t prop, int16_t weight = -1; - void * value_act = NULL; + lv_style_fptr_dptr_t value_act; + value_act.dptr = NULL; + value_act.fptr = NULL; int16_t ci; for(ci = 0; ci < list->style_cnt; ci++) { @@ -980,17 +984,20 @@ lv_res_t lv_style_list_get_ptr(lv_style_list_t * list, lv_style_property_t prop, int16_t weight_act = _lv_style_get_ptr(class, prop, &value_act); /*On perfect match return the value immediately*/ if(weight_act == weight_goal) { - *res = value_act; + res->dptr = value_act.dptr; + res->fptr = value_act.fptr; return LV_RES_OK; } else if(list->has_trans && weight_act >= 0 && ci == 0 && !list->skip_trans) { - *res = value_act; + res->dptr = value_act.dptr; + res->fptr = value_act.fptr; return LV_RES_OK; } /*If the found ID is better the current candidate then use it*/ else if(weight_act > weight) { weight = weight_act; - *res = value_act; + res->dptr = value_act.dptr; + res->fptr = value_act.fptr; } } @@ -1050,7 +1057,7 @@ static inline int32_t get_property_index(const lv_style_t * style, lv_style_prop if((style->map[i] & 0xF) < LV_STYLE_ID_COLOR) i += sizeof(lv_style_int_t); else if((style->map[i] & 0xF) < LV_STYLE_ID_OPA) i += sizeof(lv_color_t); else if((style->map[i] & 0xF) < LV_STYLE_ID_PTR) i += sizeof(lv_opa_t); - else i += sizeof(void *); + else i += sizeof(lv_style_fptr_dptr_t); i += sizeof(lv_style_property_t); } diff --git a/src/lv_core/lv_style.h b/src/lv_core/lv_style.h index c4c85442f..2b567a1a4 100644 --- a/src/lv_core/lv_style.h +++ b/src/lv_core/lv_style.h @@ -210,6 +210,13 @@ typedef struct { typedef int16_t lv_style_int_t; +typedef void(*lv_style_prop_cb_t)(void); + +typedef union { + lv_style_prop_cb_t fptr; + const void * dptr; +}lv_style_fptr_dptr_t; + typedef struct { lv_style_t ** style_list; @@ -358,7 +365,44 @@ void _lv_style_set_opa(lv_style_t * style, lv_style_property_t prop, lv_opa_t op * For example: `lv_style_set_border_width()` * @note for performance reasons it's not checked if the property really has pointer type */ -void _lv_style_set_ptr(lv_style_t * style, lv_style_property_t prop, const void * p); +void _lv_style_set_ptr(lv_style_t * style, lv_style_property_t prop, lv_style_fptr_dptr_t p); + +/** + * Set a function pointer typed property in a style. + * @param style pointer to a style where the property should be set + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TRANSITION_PATH | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param value the value to set + * @note shouldn't be used directly. Use the specific property set functions instead. + * For example: `lv_style_set_border_width()` + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline void _lv_style_set_func_ptr(lv_style_t * style, lv_style_property_t prop, lv_style_prop_cb_t p) +{ + lv_style_fptr_dptr_t fd; + fd.dptr = NULL; + fd.fptr = p; + _lv_style_set_ptr(style, prop, fd); +} + +/** + * Set a data pointer typed property in a style. + * @param style pointer to a style where the property should be set + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TRANSITION_PATH | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param value the value to set + * @note shouldn't be used directly. Use the specific property set functions instead. + * For example: `lv_style_set_border_width()` + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline void _lv_style_set_data_ptr(lv_style_t * style, lv_style_property_t prop, const void * p) +{ + lv_style_fptr_dptr_t fd; + fd.fptr = NULL; + fd.dptr = p; + _lv_style_set_ptr(style, prop, fd); +} + /** * Get an integer typed property from a style. @@ -420,6 +464,57 @@ int16_t _lv_style_get_opa(const lv_style_t * style, lv_style_property_t prop, vo */ int16_t _lv_style_get_ptr(const lv_style_t * style, lv_style_property_t prop, void * res); +/** + * Get a pointer typed property from a style. + * @param style pointer to a style from where the property should be get + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param res pointer to a buffer to store the result value + * @return -1: the property wasn't found in the style. + * The matching state bits of the desired state (in `prop`) and the best matching property's state + * Higher value means match in higher precedence state. + * @note shouldn't be used directly. Use the specific property get functions instead. + * For example: `lv_style_get_transition_path()` + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline int16_t _lv_style_get_func_ptr(const lv_style_t * style, lv_style_property_t prop, void * res) +{ + lv_style_fptr_dptr_t fd_res; + fd_res.dptr = NULL; + fd_res.fptr = NULL; + lv_res_t r = _lv_style_get_ptr(style, prop, &fd_res); + + lv_style_prop_cb_t * res2 = (lv_style_prop_cb_t *)res; + *res2 = fd_res.fptr; + return r; +} + +/** + * Get a pointer typed property from a style. + * @param style pointer to a style from where the property should be get + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param res pointer to a buffer to store the result value + * @return -1: the property wasn't found in the style. + * The matching state bits of the desired state (in `prop`) and the best matching property's state + * Higher value means match in higher precedence state. + * @note shouldn't be used directly. Use the specific property get functions instead. + * For example: `lv_style_get_text_font()` + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline int16_t _lv_style_get_data_ptr(const lv_style_t * style, lv_style_property_t prop, void * res) +{ + lv_style_fptr_dptr_t fd_res; + fd_res.dptr = NULL; + fd_res.fptr = NULL; + lv_res_t r = _lv_style_get_ptr(style, prop, &fd_res); + + void** res2 = (void**)res; + *res2 = (void*)fd_res.dptr; + return r; +} + + /** * Get the local style of a style list * @param list pointer to a style list where the local property should be set @@ -479,8 +574,39 @@ void lv_style_list_set_local_opa(lv_style_list_t * list, lv_style_property_t pro * @param value the value to set * @note for performance reasons it's not checked if the property really has pointer type */ -void lv_style_list_set_local_ptr(lv_style_list_t * list, lv_style_property_t prop, const void * value); +void lv_style_list_set_local_ptr(lv_style_list_t * list, lv_style_property_t prop, lv_style_fptr_dptr_t value); +/** + * Set a local pointer typed property in a style list. + * @param list pointer to a style list where the local property should be set + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TRANSITION_PATH | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param value the value to set + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline void lv_style_list_set_local_func_ptr(lv_style_list_t * list, lv_style_property_t prop, lv_style_prop_cb_t value) +{ + lv_style_fptr_dptr_t fd; + fd.dptr = NULL; + fd.fptr = value; + lv_style_list_set_local_ptr(list, prop, fd); +} + +/** + * Set a local pointer typed property in a style list. + * @param list pointer to a style list where the local property should be set + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param value the value to set + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline void lv_style_list_set_local_data_ptr(lv_style_list_t * list, lv_style_property_t prop, const void * value) +{ + lv_style_fptr_dptr_t fd; + fd.fptr = NULL; + fd.dptr = value; + lv_style_list_set_local_ptr(list, prop, fd); +} /** * Get an integer typed property from a style list. * It will return the property which match best with given state. @@ -531,8 +657,54 @@ lv_res_t lv_style_list_get_opa(lv_style_list_t * list, lv_style_property_t prop, * @return LV_RES_OK: there was a matching property in the list * LV_RES_INV: there was NO matching property in the list * @note for performance reasons it's not checked if the property really has pointer type + * @note Do not use this function directly. Use `lv_style_list_get_func_ptr` or `lv_style_list_get_data_ptr` */ -lv_res_t lv_style_list_get_ptr(lv_style_list_t * list, lv_style_property_t prop, void ** res); +lv_res_t lv_style_list_get_ptr(lv_style_list_t * list, lv_style_property_t prop, lv_style_fptr_dptr_t * res); + + +/** + * Get a function pointer typed property from a style list. + * It will return the property which match best with given state. + * @param list pointer to a style list from where the property should be get + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TRANSITION_PATH | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param res pointer to a buffer to store the result + * @return LV_RES_OK: there was a matching property in the list + * LV_RES_INV: there was NO matching property in the list + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline lv_res_t lv_style_list_get_func_ptr(lv_style_list_t * list, lv_style_property_t prop, void (**res)(void)) +{ + lv_style_fptr_dptr_t fd_res; + fd_res.dptr = NULL; + fd_res.fptr = NULL; + lv_res_t r = lv_style_list_get_ptr(list, prop, &fd_res); + + *res = fd_res.fptr; + return r; +} + +/** + * Get a data pointer typed property from a style list. + * It will return the property which match best with given state. + * @param list pointer to a style list from where the property should be get + * @param prop a style property ORed with a state. + * E.g. `LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED << LV_STYLE_STATE_POS)` + * @param res pointer to a buffer to store the result + * @return LV_RES_OK: there was a matching property in the list + * LV_RES_INV: there was NO matching property in the list + * @note for performance reasons it's not checked if the property really has pointer type + */ +static inline lv_res_t lv_style_list_get_data_ptr(lv_style_list_t * list, lv_style_property_t prop, const void ** res) +{ + lv_style_fptr_dptr_t fd_res; + fd_res.dptr = NULL; + fd_res.fptr = NULL; + lv_res_t r = lv_style_list_get_ptr(list, prop, &fd_res); + + *res = fd_res.dptr; + return r; +} /************************* * GLOBAL VARIABLES diff --git a/src/lv_widgets/lv_textarea.c b/src/lv_widgets/lv_textarea.c index 3ca34b073..78cf2ce71 100644 --- a/src/lv_widgets/lv_textarea.c +++ b/src/lv_widgets/lv_textarea.c @@ -1708,8 +1708,8 @@ static void refr_cursor_area(lv_obj_t * ta) { lv_textarea_ext_t * ext = lv_obj_get_ext_attr(ta); - const lv_font_t * font = _lv_obj_get_style_ptr(ta, LV_TEXTAREA_PART_BG, LV_STYLE_TEXT_FONT); - lv_style_int_t line_space = _lv_obj_get_style_int(ta, LV_TEXTAREA_PART_BG, LV_STYLE_TEXT_LINE_SPACE); + const lv_font_t * font = lv_obj_get_style_text_font(ta, LV_TEXTAREA_PART_BG); + lv_style_int_t line_space = lv_obj_get_style_text_line_space(ta, LV_TEXTAREA_PART_BG); uint16_t cur_pos = lv_textarea_get_cursor_pos(ta); const char * txt = lv_label_get_text(ext->label); diff --git a/tests/lv_test_core/lv_test_style.c b/tests/lv_test_core/lv_test_style.c index 7588b45b2..f524802af 100644 --- a/tests/lv_test_core/lv_test_style.c +++ b/tests/lv_test_core/lv_test_style.c @@ -73,7 +73,7 @@ static void empty_style(void) lv_res_t found; lv_style_int_t value; lv_opa_t opa; - void * ptr; + const void * ptr; lv_color_t color; lv_test_print("Get a properties from an empty style"); @@ -84,7 +84,7 @@ static void empty_style(void) found = lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'opa' property"); - found = lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + found = lv_style_list_get_data_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); lv_test_assert_int_eq(LV_RES_INV, found, "Get a 'ptr' property"); found = lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); @@ -108,7 +108,7 @@ static void add_remove_read_prop(void) lv_res_t found; lv_style_int_t value; lv_opa_t opa; - void * ptr; + const void * ptr; lv_color_t color; lv_test_print("Add an empty style and read properties"); @@ -119,7 +119,7 @@ static void add_remove_read_prop(void) found = lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); lv_test_assert_int_eq(LV_RES_INV, found, "Get a non existing 'opa' property"); - found = lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + found = lv_style_list_get_data_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); lv_test_assert_int_eq(LV_RES_INV, found, "Get a non existing 'ptr' property"); found = lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); @@ -128,7 +128,7 @@ static void add_remove_read_prop(void) lv_test_print("Set properties and read back the values"); _lv_style_set_int(&style, LV_STYLE_TEXT_LINE_SPACE, 5); _lv_style_set_opa(&style, LV_STYLE_BG_OPA, LV_OPA_50); - _lv_style_set_ptr(&style, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL); + _lv_style_set_data_ptr(&style, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL); _lv_style_set_color(&style, LV_STYLE_BG_COLOR, LV_COLOR_RED); found = lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); @@ -139,7 +139,7 @@ static void add_remove_read_prop(void) lv_test_assert_int_eq(LV_RES_OK, found, "Get an existing 'opa' property"); lv_test_assert_int_eq(LV_OPA_50, opa, "Get the value of an 'opa' property"); - found = lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + found = lv_style_list_get_data_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); lv_test_assert_int_eq(LV_RES_OK, found, "Get an existing 'ptr' property"); lv_test_assert_ptr_eq(LV_THEME_DEFAULT_FONT_NORMAL, ptr, "Get the value of a 'ptr' property"); @@ -155,7 +155,7 @@ static void add_remove_read_prop(void) found = lv_style_list_get_opa(&style_list, LV_STYLE_BG_OPA, &opa); lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'opa' property from a reseted style"); - found = lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + found = lv_style_list_get_data_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); lv_test_assert_int_eq(LV_RES_INV, found, "Get an 'ptr' property from a reseted style"); found = lv_style_list_get_color(&style_list, LV_STYLE_BG_COLOR, &color); @@ -186,14 +186,14 @@ static void cascade(void) lv_res_t found; lv_style_int_t value; lv_opa_t opa; - void * ptr; + const void * ptr; lv_color_t color; lv_test_print("Read properties set only in the firstly added style"); _lv_style_set_int(&style_first, LV_STYLE_TEXT_LINE_SPACE, 5); _lv_style_set_opa(&style_first, LV_STYLE_BG_OPA, LV_OPA_50); - _lv_style_set_ptr(&style_first, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL); + _lv_style_set_data_ptr(&style_first, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL); _lv_style_set_color(&style_first, LV_STYLE_BG_COLOR, LV_COLOR_RED); found = lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); @@ -204,7 +204,7 @@ static void cascade(void) lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'opa' property"); lv_test_assert_int_eq(LV_OPA_50, opa, "Get the value of an 'opa' property"); - found = lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + found = lv_style_list_get_data_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); lv_test_assert_int_eq(LV_RES_OK, found, "Get an 'ptr' property"); lv_test_assert_ptr_eq(LV_THEME_DEFAULT_FONT_NORMAL, ptr, "Get the value of a 'ptr' property"); @@ -216,7 +216,7 @@ static void cascade(void) _lv_style_set_int(&style_second, LV_STYLE_TEXT_LINE_SPACE, 10); _lv_style_set_opa(&style_second, LV_STYLE_BG_OPA, LV_OPA_60); - _lv_style_set_ptr(&style_second, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL + 1); + _lv_style_set_data_ptr(&style_second, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL + 1); _lv_style_set_color(&style_second, LV_STYLE_BG_COLOR, LV_COLOR_BLUE); found = lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); @@ -227,7 +227,7 @@ static void cascade(void) lv_test_assert_int_eq(LV_RES_OK, found, "Get an overwritten 'opa' property"); lv_test_assert_int_eq(LV_OPA_60, opa, "Get the value of an overwritten 'opa' property"); - found = lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + found = lv_style_list_get_data_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); lv_test_assert_int_eq(LV_RES_OK, found, "Get an overwritten 'ptr' property"); lv_test_assert_ptr_eq(LV_THEME_DEFAULT_FONT_NORMAL + 1, ptr, "Get the value of an overwritten 'ptr' property"); @@ -239,7 +239,7 @@ static void cascade(void) lv_test_print("Overwrite the properties with the local style"); lv_style_list_set_local_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, 20); lv_style_list_set_local_opa(&style_list, LV_STYLE_BG_OPA, LV_OPA_70); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL + 2); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_TEXT_FONT, LV_THEME_DEFAULT_FONT_NORMAL + 2); lv_style_list_set_local_color(&style_list, LV_STYLE_BG_COLOR, LV_COLOR_LIME); found = lv_style_list_get_int(&style_list, LV_STYLE_TEXT_LINE_SPACE, &value); @@ -250,7 +250,7 @@ static void cascade(void) lv_test_assert_int_eq(LV_RES_OK, found, "Get a local 'opa' property"); lv_test_assert_int_eq(LV_OPA_70, opa, "Get the value of a local 'opa' property"); - found = lv_style_list_get_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); + found = lv_style_list_get_data_ptr(&style_list, LV_STYLE_TEXT_FONT, &ptr); lv_test_assert_int_eq(LV_RES_OK, found, "Get a local 'ptr' property"); lv_test_assert_ptr_eq(LV_THEME_DEFAULT_FONT_NORMAL + 2, ptr, "Get the value of a local'ptr' property"); @@ -469,17 +469,17 @@ static void mem_leak(void) lv_test_print("Use local style"); lv_mem_monitor(&mon_start); for(i = 0; i < 100; i++) { - lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, LV_THEME_DEFAULT_FONT_NORMAL); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, LV_THEME_DEFAULT_FONT_NORMAL); lv_style_list_reset(&style_list); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, NULL); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, NULL); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); lv_style_list_reset(&style_list); } @@ -558,7 +558,7 @@ static void mem_leak(void) for(i = 0; i < 100; i++) { if(i % 2 == 0) { - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); } _lv_style_set_color(&style1, LV_STYLE_LINE_COLOR, LV_COLOR_RED); @@ -570,7 +570,7 @@ static void mem_leak(void) if(i % 4 == 0) { - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); } lv_style_list_remove_style(&style_list, &style1); @@ -585,7 +585,7 @@ static void mem_leak(void) lv_style_list_add_style(&style_list, &style2); if(i % 8 == 0) { - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_CLOSE); } lv_style_list_add_style(&style_list, &style2); @@ -603,14 +603,14 @@ static void mem_leak(void) _lv_style_set_int(&style3, LV_STYLE_PAD_LEFT, 12); _lv_style_set_int(&style3, LV_STYLE_PAD_RIGHT, 23); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, LV_THEME_DEFAULT_FONT_NORMAL); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, NULL); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); - lv_style_list_set_local_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, LV_THEME_DEFAULT_FONT_NORMAL); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_TEXT_FONT | (LV_STATE_PRESSED) << LV_STYLE_STATE_POS, NULL); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); + lv_style_list_set_local_data_ptr(&style_list, LV_STYLE_PATTERN_IMAGE, LV_SYMBOL_OK); lv_style_list_add_style(&style_list, &style3); lv_style_list_add_style(&style_list, &style2); diff --git a/tests/lv_test_main.c b/tests/lv_test_main.c index ead72faac..d145208f8 100644 --- a/tests/lv_test_main.c +++ b/tests/lv_test_main.c @@ -26,7 +26,7 @@ int main(void) static void hal_init(void) { static lv_disp_buf_t disp_buf; - lv_color_t * disp_buf1 = malloc(LV_HOR_RES * LV_VER_RES * sizeof(lv_color_t)); + lv_color_t * disp_buf1 = (lv_color_t *)malloc(LV_HOR_RES * LV_VER_RES * sizeof(lv_color_t)); lv_disp_buf_init(&disp_buf, disp_buf1, NULL, LV_HOR_RES* LV_VER_RES);