mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
Merge branch 'dev-7.0' of github.com:littlevgl/lvgl into dev-7.0
This commit is contained in:
commit
b5371e9830
@ -279,9 +279,7 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i
|
||||
#define LV_USE_ASSERT_MEM 1
|
||||
|
||||
/*Check the integrity of `lv_mem` after critical operations. (Slow)*/
|
||||
#ifndef LV_USE_ASSERT_MEM_INTEGRITY
|
||||
#define LV_USE_ASSERT_MEM_INTEGRITY 0
|
||||
#endif
|
||||
|
||||
/* Check the strings.
|
||||
* Search for NULL, very long strings, invalid characters, and unnatural repetitions. (Slow)
|
||||
@ -293,7 +291,7 @@ typedef void * lv_indev_drv_user_data_t; /*Type of user data in the i
|
||||
#define LV_USE_ASSERT_OBJ 0
|
||||
|
||||
/*Check if the styles are properly initialized. (Fast)*/
|
||||
#define LV_USE_ASSERT_STYLE 1
|
||||
#define LV_USE_ASSERT_STYLE 0
|
||||
|
||||
#endif /*LV_USE_DEBUG*/
|
||||
|
||||
@ -522,6 +520,10 @@ typedef void * lv_obj_user_data_t;
|
||||
|
||||
/*LED (dependencies: -)*/
|
||||
#define LV_USE_LED 1
|
||||
#if LV_USE_LED
|
||||
# define LV_LED_BRIGHT_MIN 60 /*Minimal brightness*/
|
||||
# define LV_LED_BRIGHT_MAX 255 /*Maximal brightness*/
|
||||
#endif
|
||||
|
||||
/*Line (dependencies: -*/
|
||||
#define LV_USE_LINE 1
|
||||
|
10
scripts/infer_run.sh
Executable file
10
scripts/infer_run.sh
Executable file
@ -0,0 +1,10 @@
|
||||
# https://github.com/facebook/infer
|
||||
#
|
||||
# Install:
|
||||
# VERSION=0.17.0; \
|
||||
# curl -sSL "https://github.com/facebook/infer/releases/download/v$VERSION/infer-linux64-v$VERSION.tar.xz" \
|
||||
# | sudo tar -C /opt -xJ && \
|
||||
# sudoln -s "/opt/infer-linux64-v$VERSION/bin/infer" /usr/local/bin/infer
|
||||
|
||||
|
||||
infer run -- make -j8
|
@ -766,6 +766,14 @@
|
||||
#ifndef LV_USE_LED
|
||||
#define LV_USE_LED 1
|
||||
#endif
|
||||
#if LV_USE_LED
|
||||
#ifndef LV_LED_BRIGHT_MIN
|
||||
# define LV_LED_BRIGHT_MIN 60 /*Minimal brightness*/
|
||||
#endif
|
||||
#ifndef LV_LED_BRIGHT_MAX
|
||||
# define LV_LED_BRIGHT_MAX 255 /*Maximal brightness*/
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*Line (dependencies: -*/
|
||||
#ifndef LV_USE_LINE
|
||||
|
@ -57,7 +57,7 @@ lv_obj_t * lv_disp_get_scr_act(lv_disp_t * disp)
|
||||
void lv_disp_load_scr(lv_obj_t * scr)
|
||||
{
|
||||
lv_disp_t * d = lv_obj_get_disp(scr);
|
||||
|
||||
if(!d) return; /*Shouldn't happen, just to be sure*/
|
||||
d->act_scr = scr;
|
||||
|
||||
lv_obj_invalidate(scr);
|
||||
@ -151,7 +151,8 @@ uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp)
|
||||
uint32_t t = UINT32_MAX;
|
||||
d = lv_disp_get_next(NULL);
|
||||
while(d) {
|
||||
t = LV_MATH_MIN(t, lv_tick_elaps(d->last_activity_time));
|
||||
uint32_t elaps = lv_tick_elaps(d->last_activity_time);
|
||||
t = LV_MATH_MIN(t, elaps);
|
||||
d = lv_disp_get_next(d);
|
||||
}
|
||||
|
||||
|
@ -110,7 +110,6 @@ void lv_group_del(lv_group_t * group)
|
||||
void lv_group_add_obj(lv_group_t * group, lv_obj_t * obj)
|
||||
{
|
||||
if(group == NULL) return;
|
||||
|
||||
/*Do not add the object twice*/
|
||||
lv_obj_t ** obj_i;
|
||||
LV_LL_READ(group->obj_ll, obj_i) {
|
||||
|
@ -247,6 +247,11 @@ void lv_indev_set_button_points(lv_indev_t * indev, const lv_point_t * points)
|
||||
*/
|
||||
void lv_indev_get_point(const lv_indev_t * indev, lv_point_t * point)
|
||||
{
|
||||
if(indev == NULL) {
|
||||
point->x = 0;
|
||||
point->y = 0;
|
||||
return;
|
||||
}
|
||||
if(indev->driver.type != LV_INDEV_TYPE_POINTER && indev->driver.type != LV_INDEV_TYPE_BUTTON) {
|
||||
point->x = -1;
|
||||
point->y = -1;
|
||||
@ -488,6 +493,14 @@ static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data)
|
||||
}
|
||||
/*Pressing*/
|
||||
else if(data->state == LV_INDEV_STATE_PR && prev_state == LV_INDEV_STATE_PR) {
|
||||
|
||||
if(data->key == LV_KEY_ENTER) {
|
||||
indev_obj_act->signal_cb(indev_obj_act, LV_SIGNAL_PRESSING, NULL);
|
||||
if(indev_reset_check(&i->proc)) return;
|
||||
lv_event_send(indev_obj_act, LV_EVENT_PRESSING, NULL);
|
||||
if(indev_reset_check(&i->proc)) return;
|
||||
}
|
||||
|
||||
/*Long press time has elapsed?*/
|
||||
if(i->proc.long_pr_sent == 0 && lv_tick_elaps(i->proc.pr_timestamp) > i->driver.long_press_time) {
|
||||
i->proc.long_pr_sent = 1;
|
||||
@ -780,6 +793,11 @@ static void indev_proc_press(lv_indev_proc_t * proc)
|
||||
indev_drag_throw(proc);
|
||||
}
|
||||
|
||||
/*Do not use disabled objects*/
|
||||
if((lv_obj_get_state(indev_obj_act, LV_OBJ_PART_MAIN) & LV_STATE_DISABLED)) {
|
||||
indev_obj_act = proc->types.pointer.act_obj;
|
||||
}
|
||||
|
||||
/*If a new object was found reset some variables and send a pressed signal*/
|
||||
if(indev_obj_act != proc->types.pointer.act_obj) {
|
||||
proc->types.pointer.last_point.x = proc->types.pointer.act_point.x;
|
||||
@ -1044,8 +1062,7 @@ lv_obj_t * lv_indev_search_obj(lv_obj_t * obj, lv_point_t * point)
|
||||
|
||||
/*If then the children was not ok, and this obj is clickable
|
||||
* and it or its parent is not hidden then save this object*/
|
||||
if(found_p == NULL && lv_obj_get_click(obj) != false &&
|
||||
(lv_obj_get_state(obj, LV_OBJ_PART_MAIN) & LV_STATE_DISABLED) == 0) {
|
||||
if(found_p == NULL && lv_obj_get_click(obj) != false) {
|
||||
lv_obj_t * hidden_i = obj;
|
||||
while(hidden_i != NULL) {
|
||||
if(lv_obj_get_hidden(hidden_i) == true) break;
|
||||
|
@ -389,6 +389,14 @@ lv_res_t lv_obj_del(lv_obj_t * obj)
|
||||
LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
|
||||
lv_obj_invalidate(obj);
|
||||
|
||||
lv_disp_t * disp = NULL;
|
||||
bool act_scr_del = false;
|
||||
if(obj->parent == NULL) {
|
||||
disp = lv_obj_get_disp(obj);
|
||||
if(!disp) return LV_RES_INV; /*Shouldn't happen*/
|
||||
if(disp->act_scr == obj) act_scr_del = true;
|
||||
}
|
||||
|
||||
/*Delete from the group*/
|
||||
#if LV_USE_GROUP
|
||||
lv_group_t * group = lv_obj_get_group(obj);
|
||||
@ -402,8 +410,10 @@ lv_res_t lv_obj_del(lv_obj_t * obj)
|
||||
#endif
|
||||
|
||||
/*Delete the user data*/
|
||||
#if LV_USE_USER_DATA
|
||||
#if LV_USE_USER_DATA_FREE
|
||||
LV_USER_DATA_FREE(obj);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*Recursively delete the children*/
|
||||
@ -467,6 +477,11 @@ lv_res_t lv_obj_del(lv_obj_t * obj)
|
||||
par->signal_cb(par, LV_SIGNAL_CHILD_CHG, NULL);
|
||||
}
|
||||
|
||||
/*Handle if the active screen was deleted*/
|
||||
if(act_scr_del) {
|
||||
disp->act_scr = NULL;
|
||||
}
|
||||
|
||||
return LV_RES_INV;
|
||||
}
|
||||
|
||||
@ -1139,7 +1154,7 @@ void lv_obj_add_style(lv_obj_t * obj, uint8_t part, lv_style_t * style)
|
||||
#if LV_USE_ANIMATION
|
||||
trans_del(obj, part, 0xFF, NULL);
|
||||
#endif
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1176,7 +1191,7 @@ void lv_obj_reset_style_list(lv_obj_t * obj, uint8_t part)
|
||||
{
|
||||
lv_obj_clean_style_list(obj, part);
|
||||
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1198,7 +1213,7 @@ void _lv_obj_set_style_local_int(lv_obj_t * obj, uint8_t part, lv_style_property
|
||||
#if LV_USE_ANIMATION
|
||||
trans_del(obj, part, prop, NULL);
|
||||
#endif
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, prop & (~LV_STYLE_STATE_MASK));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1220,7 +1235,7 @@ void _lv_obj_set_style_local_color(lv_obj_t * obj, uint8_t part, lv_style_proper
|
||||
#if LV_USE_ANIMATION
|
||||
trans_del(obj, part, prop, NULL);
|
||||
#endif
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, prop & (~LV_STYLE_STATE_MASK));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1242,7 +1257,7 @@ void _lv_obj_set_style_local_opa(lv_obj_t * obj, uint8_t part, lv_style_property
|
||||
#if LV_USE_ANIMATION
|
||||
trans_del(obj, part, prop, NULL);
|
||||
#endif
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, prop & (~LV_STYLE_STATE_MASK));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1264,7 +1279,7 @@ void _lv_obj_set_style_local_ptr(lv_obj_t * obj, uint8_t part, lv_style_property
|
||||
#if LV_USE_ANIMATION
|
||||
trans_del(obj, part, prop, NULL);
|
||||
#endif
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, prop & (~LV_STYLE_STATE_MASK));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1289,17 +1304,62 @@ bool _lv_obj_remove_style_local_prop(lv_obj_t * obj, uint8_t part, lv_style_prop
|
||||
/**
|
||||
* Notify an object (and its children) about its style is modified
|
||||
* @param obj pointer to an object
|
||||
* @param prop `LV_STYLE_PROP_ALL` or an `LV_STYLE_...` property. It is used the optimize what needs to be refreshed.
|
||||
*/
|
||||
void lv_obj_refresh_style(lv_obj_t * obj)
|
||||
void lv_obj_refresh_style(lv_obj_t * obj, lv_style_property_t prop)
|
||||
{
|
||||
LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
|
||||
|
||||
lv_obj_invalidate(obj);
|
||||
obj->signal_cb(obj, LV_SIGNAL_STYLE_CHG, NULL);
|
||||
lv_obj_invalidate(obj);
|
||||
/*If a real style refresh is required*/
|
||||
bool real_refr = false;
|
||||
switch(prop) {
|
||||
case LV_STYLE_PROP_ALL:
|
||||
case LV_STYLE_CLIP_CORNER:
|
||||
case LV_STYLE_SIZE:
|
||||
case LV_STYLE_TRANSFORM_WIDTH:
|
||||
case LV_STYLE_TRANSFORM_HEIGHT:
|
||||
case LV_STYLE_PAD_TOP:
|
||||
case LV_STYLE_PAD_BOTTOM:
|
||||
case LV_STYLE_PAD_LEFT:
|
||||
case LV_STYLE_PAD_RIGHT:
|
||||
case LV_STYLE_PAD_INNER:
|
||||
case LV_STYLE_OUTLINE_WIDTH:
|
||||
case LV_STYLE_OUTLINE_PAD:
|
||||
case LV_STYLE_OUTLINE_OPA:
|
||||
case LV_STYLE_SHADOW_WIDTH:
|
||||
case LV_STYLE_SHADOW_OPA:
|
||||
case LV_STYLE_SHADOW_OFS_X:
|
||||
case LV_STYLE_SHADOW_OFS_Y:
|
||||
case LV_STYLE_SHADOW_SPREAD:
|
||||
case LV_STYLE_VALUE_LETTER_SPACE:
|
||||
case LV_STYLE_VALUE_LINE_SPACE:
|
||||
case LV_STYLE_VALUE_OFS_X:
|
||||
case LV_STYLE_VALUE_OFS_Y:
|
||||
case LV_STYLE_VALUE_ALIGN:
|
||||
case LV_STYLE_VALUE_STR:
|
||||
case LV_STYLE_VALUE_FONT:
|
||||
case LV_STYLE_VALUE_OPA:
|
||||
case LV_STYLE_TEXT_LETTER_SPACE:
|
||||
case LV_STYLE_TEXT_LINE_SPACE:
|
||||
case LV_STYLE_TEXT_FONT:
|
||||
case LV_STYLE_LINE_WIDTH:
|
||||
real_refr = true;
|
||||
break;
|
||||
default:
|
||||
real_refr = false;
|
||||
}
|
||||
|
||||
/*Send style change signals*/
|
||||
refresh_children_style(obj);
|
||||
if(real_refr) {
|
||||
lv_obj_invalidate(obj);
|
||||
obj->signal_cb(obj, LV_SIGNAL_STYLE_CHG, NULL);
|
||||
lv_obj_invalidate(obj);
|
||||
|
||||
if(prop == LV_STYLE_PROP_ALL || (prop & LV_STYLE_INHERIT_MASK))
|
||||
/*Send style change signals*/
|
||||
refresh_children_style(obj);
|
||||
} else {
|
||||
lv_obj_invalidate(obj);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1517,7 +1577,7 @@ void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state)
|
||||
|
||||
#if LV_USE_ANIMATION == 0
|
||||
obj->state = new_state;
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, LV_STYLE_PROP_ALL);
|
||||
#else
|
||||
lv_state_t prev_state = obj->state;
|
||||
obj->state = new_state;
|
||||
@ -1539,7 +1599,6 @@ void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state)
|
||||
props[4] = lv_obj_get_style_transition_prop_5(obj, part);
|
||||
props[5] = lv_obj_get_style_transition_prop_6(obj, part);
|
||||
|
||||
|
||||
uint8_t i;
|
||||
for(i = 0; i < LV_STYLE_TRANS_NUM_MAX; i++) {
|
||||
if(props[i] != 0) {
|
||||
@ -1553,23 +1612,18 @@ void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state)
|
||||
tr->prop = props[i];
|
||||
tr->part = part;
|
||||
|
||||
if(time == 0) {
|
||||
trans_anim_cb(tr, 255);
|
||||
}
|
||||
else {
|
||||
lv_anim_t a;
|
||||
lv_anim_init(&a);
|
||||
lv_anim_set_var(&a, tr);
|
||||
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)trans_anim_cb);
|
||||
lv_anim_set_start_cb(&a, trans_anim_start_cb);
|
||||
lv_anim_set_ready_cb(&a, trans_anim_ready_cb);
|
||||
lv_anim_set_values(&a, 0x00, 0xFF);
|
||||
lv_anim_set_time(&a, time);
|
||||
lv_anim_set_delay(&a, delay);
|
||||
lv_anim_set_path_cb(&a, path);
|
||||
a.early_apply = 0;
|
||||
lv_anim_start(&a);
|
||||
}
|
||||
lv_anim_t a;
|
||||
lv_anim_init(&a);
|
||||
lv_anim_set_var(&a, tr);
|
||||
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)trans_anim_cb);
|
||||
lv_anim_set_start_cb(&a, trans_anim_start_cb);
|
||||
lv_anim_set_ready_cb(&a, trans_anim_ready_cb);
|
||||
lv_anim_set_values(&a, 0x00, 0xFF);
|
||||
lv_anim_set_time(&a, time);
|
||||
lv_anim_set_delay(&a, delay);
|
||||
lv_anim_set_path_cb(&a, path);
|
||||
a.early_apply = 0;
|
||||
lv_anim_start(&a);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1577,7 +1631,7 @@ void lv_obj_set_state(lv_obj_t * obj, lv_state_t new_state)
|
||||
}
|
||||
#endif
|
||||
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, LV_STYLE_PROP_ALL);
|
||||
|
||||
}
|
||||
|
||||
@ -3118,23 +3172,24 @@ lv_coord_t lv_obj_get_draw_rect_ext_pad_size(lv_obj_t * obj, uint8_t part)
|
||||
{
|
||||
lv_coord_t s = 0;
|
||||
|
||||
lv_opa_t sh_opa = lv_obj_get_style_shadow_opa(obj, part);
|
||||
if(sh_opa > LV_OPA_MIN) {
|
||||
lv_coord_t sh_width = lv_obj_get_style_shadow_width(obj, part);
|
||||
if(sh_width) {
|
||||
lv_coord_t sh_width = lv_obj_get_style_shadow_width(obj, part);
|
||||
if(sh_width) {
|
||||
lv_opa_t sh_opa = lv_obj_get_style_shadow_opa(obj, part);
|
||||
if(sh_opa > LV_OPA_MIN) {
|
||||
sh_width = sh_width / 2; /*THe blur adds only half width*/
|
||||
sh_width++;
|
||||
sh_width += lv_obj_get_style_shadow_spread(obj, part);
|
||||
sh_width += LV_MATH_MAX(LV_MATH_ABS(lv_obj_get_style_shadow_ofs_x(obj, part)),
|
||||
LV_MATH_ABS(lv_obj_get_style_shadow_ofs_y(obj, part)));
|
||||
lv_style_int_t sh_ofs_x = lv_obj_get_style_shadow_ofs_x(obj, part);
|
||||
lv_style_int_t sh_ofs_y = lv_obj_get_style_shadow_ofs_y(obj, part);
|
||||
sh_width += LV_MATH_MAX(LV_MATH_ABS(sh_ofs_x), LV_MATH_ABS(sh_ofs_y));
|
||||
s = LV_MATH_MAX(s, sh_width);
|
||||
}
|
||||
}
|
||||
|
||||
lv_opa_t value_opa = lv_obj_get_style_value_opa(obj, part);
|
||||
if(value_opa > LV_OPA_MIN) {
|
||||
const char * value_str = lv_obj_get_style_value_str(obj, part);
|
||||
if(value_str) {
|
||||
const char * value_str = lv_obj_get_style_value_str(obj, part);
|
||||
if(value_str) {
|
||||
lv_opa_t value_opa = lv_obj_get_style_value_opa(obj, part);
|
||||
if(value_opa > LV_OPA_MIN) {
|
||||
lv_style_int_t letter_space = lv_obj_get_style_value_letter_space(obj, part);
|
||||
lv_style_int_t line_space = lv_obj_get_style_value_letter_space(obj, part);
|
||||
const lv_font_t * font = lv_obj_get_style_value_font(obj, part);
|
||||
@ -3166,10 +3221,10 @@ lv_coord_t lv_obj_get_draw_rect_ext_pad_size(lv_obj_t * obj, uint8_t part)
|
||||
}
|
||||
}
|
||||
|
||||
lv_opa_t outline_opa = lv_obj_get_style_outline_opa(obj, part);
|
||||
if(outline_opa > LV_OPA_MIN) {
|
||||
lv_style_int_t outline_width = lv_obj_get_style_outline_width(obj, part);
|
||||
if(outline_width) {
|
||||
lv_style_int_t outline_width = lv_obj_get_style_outline_width(obj, part);
|
||||
if(outline_width) {
|
||||
lv_opa_t outline_opa = lv_obj_get_style_outline_opa(obj, part);
|
||||
if(outline_opa > LV_OPA_MIN) {
|
||||
lv_style_int_t outline_pad = lv_obj_get_style_outline_pad(obj, part);
|
||||
s = LV_MATH_MAX(s, outline_pad + outline_width);
|
||||
}
|
||||
@ -3289,7 +3344,6 @@ static lv_design_res_t lv_obj_design(lv_obj_t * obj, const lv_area_t * clip_area
|
||||
|
||||
lv_obj_init_draw_rect_dsc(obj, LV_OBJ_PART_MAIN, &draw_dsc);
|
||||
|
||||
|
||||
lv_coord_t w = lv_obj_get_style_transform_width(obj, LV_OBJ_PART_MAIN);
|
||||
lv_coord_t h = lv_obj_get_style_transform_height(obj, LV_OBJ_PART_MAIN);
|
||||
lv_area_t coords;
|
||||
@ -3336,7 +3390,6 @@ static lv_design_res_t lv_obj_design(lv_obj_t * obj, const lv_area_t * clip_area
|
||||
coords.y2 += h;
|
||||
lv_draw_rect(&coords, clip_area, &draw_dsc);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return LV_DESIGN_RES_OK;
|
||||
@ -3366,7 +3419,8 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param)
|
||||
if(lv_obj_is_protected(obj, LV_PROTECT_CHILD_CHG) != false) res = LV_RES_INV;
|
||||
}
|
||||
else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) {
|
||||
obj->ext_draw_pad = LV_MATH_MAX(obj->ext_draw_pad, lv_obj_get_draw_rect_ext_pad_size(obj, LV_OBJ_PART_MAIN));
|
||||
lv_coord_t d = lv_obj_get_draw_rect_ext_pad_size(obj, LV_OBJ_PART_MAIN);
|
||||
obj->ext_draw_pad = LV_MATH_MAX(obj->ext_draw_pad, d);
|
||||
}
|
||||
#if LV_USE_OBJ_REALIGN
|
||||
else if(sign == LV_SIGNAL_PARENT_SIZE_CHG) {
|
||||
@ -3442,7 +3496,7 @@ static void report_style_mod_core(void * style, lv_obj_t * obj)
|
||||
for(ci = 0; ci < dsc->style_cnt; ci++) {
|
||||
lv_style_t * class = lv_style_list_get_style(dsc, ci);
|
||||
if(class == style) {
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, LV_STYLE_PROP_ALL);
|
||||
/*It's enough to handle once (if duplicated)*/
|
||||
break;
|
||||
}
|
||||
@ -3457,8 +3511,6 @@ static void report_style_mod_core(void * style, lv_obj_t * obj)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Recursively refresh the style of the children. Go deeper until a not NULL style is found
|
||||
* because the NULL styles are inherited from the parent
|
||||
@ -3697,6 +3749,12 @@ static void trans_del(lv_obj_t * obj, uint8_t part, lv_style_property_t prop, lv
|
||||
tr_prev = lv_ll_get_prev(&LV_GC_ROOT(_lv_obj_style_trans_ll), tr);
|
||||
|
||||
if(tr->obj == obj && (part == tr->part || part == 0xFF) && (prop == tr->prop || prop == 0xFF)) {
|
||||
/* Remove the transitioned property from trans. style
|
||||
* to allow changing it by normal styles*/
|
||||
lv_style_list_t * list = lv_obj_get_style_list(tr->obj, tr->part);
|
||||
lv_style_t * style_trans = lv_style_list_get_transition_style(list);
|
||||
lv_style_remove_prop(style_trans, tr->prop);
|
||||
|
||||
lv_anim_del(tr, NULL);
|
||||
lv_ll_remove(&LV_GC_ROOT(_lv_obj_style_trans_ll), tr);
|
||||
lv_mem_free(tr);
|
||||
@ -3737,22 +3795,16 @@ static void trans_anim_cb(lv_style_trans_t * tr, lv_anim_value_t v)
|
||||
else x = tr->end_value._ptr;
|
||||
_lv_style_set_ptr(style, tr->prop, x);
|
||||
}
|
||||
lv_obj_refresh_style(tr->obj);
|
||||
lv_obj_refresh_style(tr->obj, tr->prop);
|
||||
|
||||
}
|
||||
|
||||
static void trans_anim_start_cb(lv_anim_t * a)
|
||||
{
|
||||
lv_style_trans_t * tr = a->var;
|
||||
|
||||
lv_style_property_t prop_tmp = tr->prop;
|
||||
|
||||
/*Init prop to an invalid values to be sure `trans_del` won't delete the just added `tr`*/
|
||||
tr->prop = 0;
|
||||
/*Delete the relate transition if any*/
|
||||
trans_del(tr->obj, tr->part, prop_tmp, tr);
|
||||
|
||||
tr->prop = prop_tmp;
|
||||
|
||||
/*Start the animation from the current value*/
|
||||
if((prop_tmp & 0xF) < LV_STYLE_ID_COLOR) { /*Int*/
|
||||
tr->start_value._int = _lv_obj_get_style_int(tr->obj, tr->part, prop_tmp);
|
||||
@ -3766,11 +3818,26 @@ static void trans_anim_start_cb(lv_anim_t * a)
|
||||
else { /*Ptr*/
|
||||
tr->start_value._ptr = _lv_obj_get_style_ptr(tr->obj, tr->part, prop_tmp);
|
||||
}
|
||||
|
||||
/*Init prop to an invalid values to be sure `trans_del` won't delete this added `tr`*/
|
||||
tr->prop = 0;
|
||||
/*Delete the relate transition if any*/
|
||||
trans_del(tr->obj, tr->part, prop_tmp, tr);
|
||||
|
||||
tr->prop = prop_tmp;
|
||||
|
||||
}
|
||||
|
||||
static void trans_anim_ready_cb(lv_anim_t * a)
|
||||
{
|
||||
lv_style_trans_t * tr = a->var;
|
||||
|
||||
/* Remove the transitioned property from trans. style
|
||||
* to allow changing it by normal styles*/
|
||||
lv_style_list_t * list = lv_obj_get_style_list(tr->obj, tr->part);
|
||||
lv_style_t * style_trans = lv_style_list_get_transition_style(list);
|
||||
lv_style_remove_prop(style_trans, tr->prop);
|
||||
|
||||
lv_ll_remove(&LV_GC_ROOT(_lv_obj_style_trans_ll), tr);
|
||||
lv_mem_free(tr);
|
||||
}
|
||||
|
@ -507,7 +507,7 @@ void lv_obj_reset_style_list(lv_obj_t * obj, uint8_t part);
|
||||
* Notify an object about its style is modified
|
||||
* @param obj pointer to an object
|
||||
*/
|
||||
void lv_obj_refresh_style(lv_obj_t * obj);
|
||||
void lv_obj_refresh_style(lv_obj_t * obj, lv_style_property_t prop);
|
||||
|
||||
/**
|
||||
* Notify all object if a style is modified
|
||||
|
@ -184,6 +184,12 @@ void lv_disp_refr_task(lv_task_t * task)
|
||||
|
||||
disp_refr = task->user_data;
|
||||
|
||||
/*Do nothing if there is no active screen*/
|
||||
if(disp_refr->act_scr == NULL) {
|
||||
disp_refr->inv_p = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
lv_refr_join_area();
|
||||
|
||||
lv_refr_areas();
|
||||
@ -516,6 +522,7 @@ static void lv_refr_obj_and_children(lv_obj_t * top_p, const lv_area_t * mask_p)
|
||||
* but in special cases (e.g. if the screen has alpha) it won't.
|
||||
* In this case use the screen directly */
|
||||
if(top_p == NULL) top_p = lv_disp_get_scr_act(disp_refr);
|
||||
if(top_p == NULL) return; /*Shouldn't happen*/
|
||||
|
||||
/*Refresh the top object and its children*/
|
||||
lv_refr_obj(top_p, mask_p);
|
||||
|
@ -42,6 +42,8 @@ LV_EXPORT_CONST_INT(LV_RADIUS_CIRCLE);
|
||||
|
||||
#define LV_STYLE_TRANS_NUM_MAX 6
|
||||
|
||||
#define LV_STYLE_PROP_ALL 0xFF
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
@ -198,6 +200,7 @@ typedef uint16_t lv_style_property_t;
|
||||
|
||||
#define LV_STYLE_STATE_POS 8
|
||||
#define LV_STYLE_STATE_MASK 0x7F00
|
||||
#define LV_STYLE_INHERIT_MASK 0x8000
|
||||
|
||||
typedef uint16_t lv_style_state_t;
|
||||
|
||||
|
@ -260,8 +260,9 @@ static void fill_normal(const lv_area_t * disp_area, lv_color_t * disp_buf, con
|
||||
|
||||
/*Fill the first line. Use `memcpy` because it's faster then simple value assignment*/
|
||||
/*Set the first pixels manually*/
|
||||
int32_t fill_end = draw_area->x1 + FILL_DIRECT_LEN + (draw_area_w & FILL_DIRECT_MASK) - 1;
|
||||
int32_t direct_fill_end = LV_MATH_MIN(draw_area->x2,
|
||||
draw_area->x1 + FILL_DIRECT_LEN + (draw_area_w & FILL_DIRECT_MASK) - 1);
|
||||
fill_end);
|
||||
for(x = draw_area->x1; x <= direct_fill_end ; x++) {
|
||||
disp_buf_tmp[x].full = color.full;
|
||||
}
|
||||
|
@ -389,6 +389,9 @@ static void lv_draw_letter(const lv_point_t * pos_p, const lv_area_t * clip_area
|
||||
return;
|
||||
}
|
||||
|
||||
/* Don't draw anything if the character is empty. E.g. space */
|
||||
if((g.box_h == 0) && (g.box_w == 0)) return;
|
||||
|
||||
int32_t pos_x = pos_p->x + g.ofs_x;
|
||||
int32_t pos_y = pos_p->y + (font_p->line_height - font_p->base_line) - g.box_h - g.ofs_y;
|
||||
|
||||
@ -446,13 +449,9 @@ static void draw_letter_normal(lv_coord_t pos_x, lv_coord_t pos_y, lv_font_glyph
|
||||
return; /*Invalid bpp. Can't render the letter*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
int32_t col, row;
|
||||
int32_t box_w = g->box_w;
|
||||
int32_t box_h = g->box_h;
|
||||
int32_t width_byte_scr = box_w >> 3; /*Width in bytes (on the screen finally) (e.g. w = 11 -> 2 bytes wide)*/
|
||||
if(box_w & 0x7) width_byte_scr++;
|
||||
int32_t width_bit = box_w * bpp; /*Letter width in bits*/
|
||||
|
||||
/* Calculate the col/row start/end on the map*/
|
||||
@ -596,8 +595,6 @@ static void draw_letter_subpx(lv_coord_t pos_x, lv_coord_t pos_y, lv_font_glyph_
|
||||
|
||||
int32_t box_w = g->box_w;
|
||||
int32_t box_h = g->box_h;
|
||||
int32_t width_byte_scr = box_w >> 3; /*Width in bytes (on the screen finally) (e.g. w = 11 -> 2 bytes wide)*/
|
||||
if(box_w & 0x7) width_byte_scr++;
|
||||
int32_t width_bit = box_w * bpp; /*Letter width in bits*/
|
||||
|
||||
|
||||
|
@ -412,9 +412,8 @@ static void draw_line_skew(const lv_point_t * point1, const lv_point_t * point2,
|
||||
/* The real draw area is around the line.
|
||||
* It's easy to calculate with steep lines, but the area can be very wide with very flat lines.
|
||||
* So deal with it only with steep lines. */
|
||||
int32_t draw_area_w;
|
||||
if(flat) draw_area_w = lv_area_get_width(&draw_area);
|
||||
else draw_area_w = LV_MATH_MIN(lv_area_get_width(&draw_area), dsc->width * 2 + 2);
|
||||
int32_t draw_area_w = lv_area_get_width(&draw_area);
|
||||
if(!flat) draw_area_w = LV_MATH_MIN(draw_area_w, dsc->width * 2 + 2);
|
||||
|
||||
/*Draw the background line by line*/
|
||||
int32_t h;
|
||||
|
@ -99,11 +99,11 @@ lv_draw_mask_res_t lv_draw_mask_apply(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_
|
||||
bool changed = false;
|
||||
lv_draw_mask_common_dsc_t * dsc;
|
||||
|
||||
lv_draw_mask_res_t res = LV_DRAW_MASK_RES_FULL_COVER;
|
||||
uint8_t i;
|
||||
for(i = 0; i < LV_MASK_MAX_NUM; i++) {
|
||||
if(mask_list[i].param) {
|
||||
dsc = mask_list[i].param;
|
||||
lv_draw_mask_res_t res = LV_DRAW_MASK_RES_FULL_COVER;
|
||||
res = dsc->cb(mask_buf, abs_x, abs_y, len, (void *)mask_list[i].param);
|
||||
if(res == LV_DRAW_MASK_RES_FULL_TRANSP) return LV_DRAW_MASK_RES_FULL_TRANSP;
|
||||
else if(res == LV_DRAW_MASK_RES_CHANGED) changed = true;
|
||||
@ -361,8 +361,9 @@ void lv_draw_mask_angle_init(lv_draw_mask_angle_param_t * param, lv_coord_t vert
|
||||
*/
|
||||
void lv_draw_mask_radius_init(lv_draw_mask_radius_param_t * param, const lv_area_t * rect, lv_coord_t radius, bool inv)
|
||||
{
|
||||
|
||||
int32_t short_side = LV_MATH_MIN(lv_area_get_width(rect), lv_area_get_height(rect));
|
||||
lv_coord_t w = lv_area_get_width(rect);
|
||||
lv_coord_t h = lv_area_get_height(rect);
|
||||
int32_t short_side = LV_MATH_MIN(w, h);
|
||||
if(radius > short_side >> 1) radius = short_side >> 1;
|
||||
|
||||
lv_area_copy(¶m->cfg.rect, rect);
|
||||
|
@ -287,7 +287,6 @@ static void draw_bg(const lv_area_t * coords, const lv_area_t * clip, lv_draw_re
|
||||
}
|
||||
|
||||
if(dsc->bg_grad_dir == LV_GRAD_DIR_NONE && other_mask_cnt == 0) {
|
||||
lv_area_t fill_area;
|
||||
/*Central part*/
|
||||
fill_area.x1 = coords_bg.x1 + rout;
|
||||
fill_area.x2 = coords_bg.x2 - rout;
|
||||
|
@ -336,18 +336,21 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
|
||||
/*If the file was open successfully save the file descriptor*/
|
||||
if(dsc->user_data == NULL) {
|
||||
dsc->user_data = lv_mem_alloc(sizeof(lv_img_decoder_built_in_data_t));
|
||||
LV_ASSERT_MEM(dsc->user_data);
|
||||
if(dsc->user_data == NULL) {
|
||||
LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
|
||||
LV_ASSERT_MEM(dsc->user_data);
|
||||
return LV_RES_INV;
|
||||
}
|
||||
memset(dsc->user_data, 0, sizeof(lv_img_decoder_built_in_data_t));
|
||||
}
|
||||
|
||||
lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
|
||||
user_data->f = lv_mem_alloc(sizeof(f));
|
||||
user_data->f = lv_mem_alloc(sizeof(f));
|
||||
LV_ASSERT_MEM(user_data->f);
|
||||
if(user_data->f == NULL) {
|
||||
LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
|
||||
LV_ASSERT_MEM(user_data->f);
|
||||
lv_img_decoder_built_in_close(decoder, dsc);
|
||||
return LV_RES_INV;
|
||||
}
|
||||
|
||||
memcpy(user_data->f, &f, sizeof(f));
|
||||
@ -390,21 +393,24 @@ lv_res_t lv_img_decoder_built_in_open(lv_img_decoder_t * decoder, lv_img_decoder
|
||||
/*Allocate the palette*/
|
||||
if(dsc->user_data == NULL) {
|
||||
dsc->user_data = lv_mem_alloc(sizeof(lv_img_decoder_built_in_data_t));
|
||||
LV_ASSERT_MEM(dsc->user_data);
|
||||
if(dsc->user_data == NULL) {
|
||||
LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
|
||||
LV_ASSERT_MEM(dsc->user_data);
|
||||
lv_img_decoder_built_in_close(decoder, dsc);
|
||||
return LV_RES_INV;
|
||||
}
|
||||
memset(dsc->user_data, 0, sizeof(lv_img_decoder_built_in_data_t));
|
||||
}
|
||||
|
||||
lv_img_decoder_built_in_data_t * user_data = dsc->user_data;
|
||||
user_data->palette = lv_mem_alloc(palette_size * sizeof(lv_color_t));
|
||||
LV_ASSERT_MEM(user_data->palette);
|
||||
user_data->opa = lv_mem_alloc(palette_size * sizeof(lv_opa_t));
|
||||
LV_ASSERT_MEM(user_data->opa);
|
||||
if(user_data->palette == NULL || user_data->opa == NULL) {
|
||||
LV_LOG_ERROR("img_decoder_built_in_open: out of memory");
|
||||
#if LV_USE_FILESYSTEM
|
||||
LV_ASSERT_MEM(user_data->f);
|
||||
#endif
|
||||
lv_img_decoder_built_in_close(decoder, dsc);
|
||||
return LV_RES_INV;
|
||||
}
|
||||
|
||||
if(dsc->src_type == LV_IMG_SRC_FILE) {
|
||||
|
@ -26,7 +26,7 @@
|
||||
*********************/
|
||||
#define LV_ANIM_RESOLUTION 1024
|
||||
#define LV_ANIM_RES_SHIFT 10
|
||||
#define LV_ANIM_TASK_PRIO LV_TASK_PRIO_MID
|
||||
#define LV_ANIM_TASK_PRIO LV_TASK_PRIO_HIGH
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
@ -163,7 +163,7 @@ uint16_t lv_anim_count_running(void)
|
||||
lv_anim_t * a;
|
||||
LV_LL_READ(LV_GC_ROOT(_lv_anim_ll), a) cnt++;
|
||||
|
||||
return cnt++;
|
||||
return cnt;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -161,7 +161,9 @@ bool lv_area_is_point_on(const lv_area_t * a_p, const lv_point_t * p_p, lv_coord
|
||||
/*No radius, it is within the rectangle*/
|
||||
return true;
|
||||
}
|
||||
lv_coord_t max_radius = LV_MATH_MIN(lv_area_get_width(a_p) / 2, lv_area_get_height(a_p) / 2);
|
||||
lv_coord_t w = lv_area_get_width(a_p) / 2;
|
||||
lv_coord_t h = lv_area_get_height(a_p) / 2;
|
||||
lv_coord_t max_radius = LV_MATH_MIN(w, h);
|
||||
if(radius > max_radius)
|
||||
radius = max_radius;
|
||||
|
||||
|
@ -66,9 +66,6 @@ lv_color_t lv_color_hsv_to_rgb(uint16_t h, uint8_t s, uint8_t v)
|
||||
uint8_t region, remainder, p, q, t;
|
||||
|
||||
if(s == 0) {
|
||||
r = v;
|
||||
g = v;
|
||||
b = v;
|
||||
return lv_color_make(v, v, v);
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#if LV_USE_LOG
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include "lv_printf.h"
|
||||
|
||||
#if LV_LOG_PRINTF
|
||||
@ -52,15 +53,17 @@ void lv_log_register_print_cb(lv_log_print_g_cb_t print_cb)
|
||||
custom_print_cb = print_cb;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a log
|
||||
* @param level the level of log. (From `lv_log_level_t` enum)
|
||||
* @param file name of the file when the log added
|
||||
* @param line line number in the source code where the log added
|
||||
* @param func name of the function when the log added
|
||||
* @param format printf-like format string
|
||||
* @param ... parameters for `format`
|
||||
*/
|
||||
void lv_log_add(lv_log_level_t level, const char * file, int line, const char * format, ...)
|
||||
void lv_log_add(lv_log_level_t level, const char * file, int line, const char * func, const char * format, ...)
|
||||
{
|
||||
if(level >= _LV_LOG_LEVEL_NUM) return; /*Invalid level*/
|
||||
|
||||
@ -72,10 +75,19 @@ void lv_log_add(lv_log_level_t level, const char * file, int line, const char *
|
||||
va_end(args);
|
||||
|
||||
#if LV_LOG_PRINTF
|
||||
/*Use only the file name not the path*/
|
||||
size_t p;
|
||||
for(p = strlen(file); p > 0; p--) {
|
||||
if(file[p] == '/' || file[p] == '\\') {
|
||||
p++; /*Skip the slash*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static const char * lvl_prefix[] = {"Trace", "Info", "Warn", "Error", "User"};
|
||||
printf("%s: %s \t(%s #%d)\n", lvl_prefix[level], buf, file, line);
|
||||
printf("%s: %s \t(%s #%d %s())\n", lvl_prefix[level], buf, &file[p], line ,func);
|
||||
#else
|
||||
if(custom_print_cb) custom_print_cb(level, file, line, buf);
|
||||
if(custom_print_cb) custom_print_cb(level, file, line, func, buf);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -45,9 +45,9 @@ typedef int8_t lv_log_level_t;
|
||||
**********************/
|
||||
|
||||
/**
|
||||
* Log print function. Receives "Log Level", "File path", "Line number" and "Description".
|
||||
* Log print function. Receives "Log Level", "File path", "Line number", "Function name" and "Description".
|
||||
*/
|
||||
typedef void (*lv_log_print_g_cb_t)(lv_log_level_t level, const char *, uint32_t, const char *);
|
||||
typedef void (*lv_log_print_g_cb_t)(lv_log_level_t level, const char *, uint32_t, const char *, const char *);
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
@ -66,17 +66,18 @@ void lv_log_register_print_cb(lv_log_print_g_cb_t print_cb);
|
||||
* @param level the level of log. (From `lv_log_level_t` enum)
|
||||
* @param file name of the file when the log added
|
||||
* @param line line number in the source code where the log added
|
||||
* @param func name of the function when the log added
|
||||
* @param format printf-like format string
|
||||
* @param ... parameters for `format`
|
||||
*/
|
||||
void lv_log_add(lv_log_level_t level, const char * file, int line, const char * format, ...);
|
||||
void lv_log_add(lv_log_level_t level, const char * file, int line, const char * func, const char * format, ...);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#if LV_LOG_LEVEL <= LV_LOG_LEVEL_TRACE
|
||||
#define LV_LOG_TRACE(...) lv_log_add(LV_LOG_LEVEL_TRACE, __FILE__, __LINE__, __VA_ARGS__);
|
||||
#define LV_LOG_TRACE(...) lv_log_add(LV_LOG_LEVEL_TRACE, __FILE__, __LINE__, __func__, __VA_ARGS__);
|
||||
#else
|
||||
#define LV_LOG_TRACE(...) \
|
||||
{ \
|
||||
@ -85,7 +86,7 @@ void lv_log_add(lv_log_level_t level, const char * file, int line, const char *
|
||||
#endif
|
||||
|
||||
#if LV_LOG_LEVEL <= LV_LOG_LEVEL_INFO
|
||||
#define LV_LOG_INFO(...) lv_log_add(LV_LOG_LEVEL_INFO, __FILE__, __LINE__, __VA_ARGS__);
|
||||
#define LV_LOG_INFO(...) lv_log_add(LV_LOG_LEVEL_INFO, __FILE__, __LINE__, __func__, __VA_ARGS__);
|
||||
#else
|
||||
#define LV_LOG_INFO(...) \
|
||||
{ \
|
||||
@ -94,7 +95,7 @@ void lv_log_add(lv_log_level_t level, const char * file, int line, const char *
|
||||
#endif
|
||||
|
||||
#if LV_LOG_LEVEL <= LV_LOG_LEVEL_WARN
|
||||
#define LV_LOG_WARN(...) lv_log_add(LV_LOG_LEVEL_WARN, __FILE__, __LINE__, __VA_ARGS__);
|
||||
#define LV_LOG_WARN(...) lv_log_add(LV_LOG_LEVEL_WARN, __FILE__, __LINE__, __func__, __VA_ARGS__);
|
||||
#else
|
||||
#define LV_LOG_WARN(...) \
|
||||
{ \
|
||||
@ -103,7 +104,7 @@ void lv_log_add(lv_log_level_t level, const char * file, int line, const char *
|
||||
#endif
|
||||
|
||||
#if LV_LOG_LEVEL <= LV_LOG_LEVEL_ERROR
|
||||
#define LV_LOG_ERROR(...) lv_log_add(LV_LOG_LEVEL_ERROR, __FILE__, __LINE__, __VA_ARGS__);
|
||||
#define LV_LOG_ERROR(...) lv_log_add(LV_LOG_LEVEL_ERROR, __FILE__, __LINE__, __func__, __VA_ARGS__);
|
||||
#else
|
||||
#define LV_LOG_ERROR(...) \
|
||||
{ \
|
||||
@ -112,7 +113,7 @@ void lv_log_add(lv_log_level_t level, const char * file, int line, const char *
|
||||
#endif
|
||||
|
||||
#if LV_LOG_LEVEL <= LV_LOG_LEVEL_USER
|
||||
#define LV_LOG_USER(...) lv_log_add(LV_LOG_LEVEL_USER, __FILE__, __LINE__, __VA_ARGS__);
|
||||
#define LV_LOG_USER(...) lv_log_add(LV_LOG_LEVEL_USER, __FILE__, __LINE__, __func__, __VA_ARGS__);
|
||||
#else
|
||||
#define LV_LOG_USER(...) \
|
||||
{ \
|
||||
|
@ -37,45 +37,111 @@ typedef enum {
|
||||
LV_THEME_NONE = 0,
|
||||
LV_THEME_SCR,
|
||||
LV_THEME_OBJ,
|
||||
#if LV_USE_ARC
|
||||
LV_THEME_ARC,
|
||||
#endif
|
||||
#if LV_USE_BAR
|
||||
LV_THEME_BAR,
|
||||
#endif
|
||||
#if LV_USE_BTN
|
||||
LV_THEME_BTN,
|
||||
#endif
|
||||
#if LV_USE_BTNMATRIX
|
||||
LV_THEME_BTNMATRIX,
|
||||
#endif
|
||||
#if LV_USE_CALENDAR
|
||||
LV_THEME_CALENDAR,
|
||||
#endif
|
||||
#if LV_USE_CANVAS
|
||||
LV_THEME_CANVAS,
|
||||
#endif
|
||||
#if LV_USE_CHECKBOX
|
||||
LV_THEME_CHECKBOX,
|
||||
#endif
|
||||
#if LV_USE_CHART
|
||||
LV_THEME_CHART,
|
||||
#endif
|
||||
#if LV_USE_CONT
|
||||
LV_THEME_CONT,
|
||||
#endif
|
||||
#if LV_USE_CPICKER
|
||||
LV_THEME_CPICKER,
|
||||
#endif
|
||||
#if LV_USE_DROPDOWN
|
||||
LV_THEME_DROPDOWN,
|
||||
#endif
|
||||
#if LV_USE_GAUGE
|
||||
LV_THEME_GAUGE,
|
||||
#endif
|
||||
#if LV_USE_IMG
|
||||
LV_THEME_IMAGE,
|
||||
#endif
|
||||
#if LV_USE_IMGBTN
|
||||
LV_THEME_IMGBTN,
|
||||
#endif
|
||||
#if LV_USE_KEYBOARD
|
||||
LV_THEME_KEYBOARD,
|
||||
#endif
|
||||
#if LV_USE_LABEL
|
||||
LV_THEME_LABEL,
|
||||
#endif
|
||||
#if LV_USE_LED
|
||||
LV_THEME_LED,
|
||||
#endif
|
||||
#if LV_USE_LINE
|
||||
LV_THEME_LINE,
|
||||
#endif
|
||||
#if LV_USE_LIST
|
||||
LV_THEME_LIST,
|
||||
LV_THEME_LIST_BTN,
|
||||
#endif
|
||||
#if LV_USE_LINEMETER
|
||||
LV_THEME_LINEMETER,
|
||||
#endif
|
||||
#if LV_USE_MSGBOX
|
||||
LV_THEME_MSGBOX,
|
||||
LV_THEME_MSGBOX_BTNS, /*The button matrix of the buttons are initialized separately*/
|
||||
#endif
|
||||
#if LV_USE_OBJMASK
|
||||
LV_THEME_OBJMASK,
|
||||
#endif
|
||||
#if LV_USE_PAGE
|
||||
LV_THEME_PAGE,
|
||||
#endif
|
||||
#if LV_USE_ROLLER
|
||||
LV_THEME_ROLLER,
|
||||
#endif
|
||||
#if LV_USE_SLIDER
|
||||
LV_THEME_SLIDER,
|
||||
#endif
|
||||
#if LV_USE_SPINBOX
|
||||
LV_THEME_SPINBOX,
|
||||
LV_THEME_SPINBOX_BTN, /*Button extra for spinbox*/
|
||||
#endif
|
||||
#if LV_USE_SPINNER
|
||||
LV_THEME_SPINNER,
|
||||
#endif
|
||||
#if LV_USE_SWITCH
|
||||
LV_THEME_SWITCH,
|
||||
#endif
|
||||
#if LV_USE_TABLE
|
||||
LV_THEME_TABLE,
|
||||
#endif
|
||||
#if LV_USE_TABVIEW
|
||||
LV_THEME_TABVIEW,
|
||||
LV_THEME_TABVIEW_PAGE, /*The tab pages are initialized separately*/
|
||||
#endif
|
||||
#if LV_USE_TEXTAREA
|
||||
LV_THEME_TEXTAREA,
|
||||
LV_THEME_TEXTAREA_ONELINE,
|
||||
#endif
|
||||
#if LV_USE_TILEVIEW
|
||||
LV_THEME_TILEVIEW,
|
||||
#endif
|
||||
#if LV_USE_WIN
|
||||
LV_THEME_WIN,
|
||||
LV_THEME_WIN_BTN, /*The buttons are initialized separately*/
|
||||
#endif
|
||||
} lv_theme_style_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -178,6 +178,7 @@ static void basic_init(void)
|
||||
lv_style_set_border_color(&panel, LV_STATE_FOCUSED, color_panel_border(LV_STATE_FOCUSED));
|
||||
lv_style_set_border_width(&panel, LV_STATE_DEFAULT, BORDER_WIDTH);
|
||||
lv_style_set_border_side(&panel, LV_STATE_DEFAULT, LV_BORDER_SIDE_TOP);
|
||||
lv_style_set_border_post(&panel, LV_STATE_DEFAULT, true);
|
||||
lv_style_set_text_font(&panel, LV_STATE_DEFAULT, _font_normal);
|
||||
lv_style_set_text_color(&panel, LV_STATE_DEFAULT, color_panel_txt(LV_STATE_DEFAULT));
|
||||
lv_style_set_value_color(&panel, LV_STATE_DEFAULT, color_panel_txt(LV_STATE_DEFAULT));
|
||||
@ -924,7 +925,6 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
#if LV_USE_BTNMATRIX
|
||||
case LV_THEME_BTNMATRIX:
|
||||
lv_obj_clean_style_list(obj, LV_BTNMATRIX_PART_BG);
|
||||
list = lv_obj_get_style_list(obj, LV_BTNMATRIX_PART_BG);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_BTNMATRIX_PART_BTN);
|
||||
list = lv_obj_get_style_list(obj, LV_BTNMATRIX_PART_BTN);
|
||||
@ -978,35 +978,30 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
#if LV_USE_CANVAS
|
||||
case LV_THEME_CANVAS:
|
||||
lv_obj_clean_style_list(obj, LV_CANVAS_PART_MAIN);
|
||||
list = lv_obj_get_style_list(obj, LV_CANVAS_PART_MAIN);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if LV_USE_IMG
|
||||
case LV_THEME_IMAGE:
|
||||
lv_obj_clean_style_list(obj, LV_IMG_PART_MAIN);
|
||||
list = lv_obj_get_style_list(obj, LV_IMG_PART_MAIN);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if LV_USE_IMGBTN
|
||||
case LV_THEME_IMGBTN:
|
||||
lv_obj_clean_style_list(obj, LV_IMG_PART_MAIN);
|
||||
list = lv_obj_get_style_list(obj, LV_IMG_PART_MAIN);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if LV_USE_LABEL
|
||||
case LV_THEME_LABEL:
|
||||
lv_obj_clean_style_list(obj, LV_LABEL_PART_MAIN);
|
||||
list = lv_obj_get_style_list(obj, LV_LABEL_PART_MAIN);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if LV_USE_LINE
|
||||
case LV_THEME_LINE:
|
||||
lv_obj_clean_style_list(obj, LV_LABEL_PART_MAIN);
|
||||
list = lv_obj_get_style_list(obj, LV_LABEL_PART_MAIN);
|
||||
break;
|
||||
#endif
|
||||
|
||||
@ -1028,8 +1023,8 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
list = lv_obj_get_style_list(obj, LV_SPINNER_PART_BG);
|
||||
lv_style_list_add_style(list, &arc_bg);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_SPINNER_PART_ARC);
|
||||
list = lv_obj_get_style_list(obj, LV_SPINNER_PART_ARC);
|
||||
lv_obj_clean_style_list(obj, LV_SPINNER_PART_INDIC);
|
||||
list = lv_obj_get_style_list(obj, LV_SPINNER_PART_INDIC);
|
||||
lv_style_list_add_style(list, &arc);
|
||||
break;
|
||||
#endif
|
||||
@ -1109,7 +1104,6 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
lv_style_list_add_style(list, &scr);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_TABVIEW_PART_BG_SCRL);
|
||||
list = lv_obj_get_style_list(obj, LV_TABVIEW_PART_BG_SCRL);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_TABVIEW_PART_TAB_BG);
|
||||
list = lv_obj_get_style_list(obj, LV_TABVIEW_PART_TAB_BG);
|
||||
@ -1126,7 +1120,6 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
|
||||
case LV_THEME_TABVIEW_PAGE:
|
||||
lv_obj_clean_style_list(obj, LV_PAGE_PART_BG);
|
||||
list = lv_obj_get_style_list(obj, LV_PAGE_PART_BG);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_PAGE_PART_SCRL);
|
||||
list = lv_obj_get_style_list(obj, LV_PAGE_PART_SCRL);
|
||||
@ -1158,8 +1151,8 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
list = lv_obj_get_style_list(obj, LV_ROLLER_PART_BG);
|
||||
lv_style_list_add_style(list, &roller_bg);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_ROLLER_PART_SEL);
|
||||
list = lv_obj_get_style_list(obj, LV_ROLLER_PART_SEL);
|
||||
lv_obj_clean_style_list(obj, LV_ROLLER_PART_SELECTED);
|
||||
list = lv_obj_get_style_list(obj, LV_ROLLER_PART_SELECTED);
|
||||
lv_style_list_add_style(list, &roller_sel);
|
||||
break;
|
||||
#endif
|
||||
@ -1179,7 +1172,6 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
lv_style_list_add_style(list, &list_bg);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_LIST_PART_SCRL);
|
||||
list = lv_obj_get_style_list(obj, LV_LIST_PART_SCRL);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_LIST_PART_SCRLBAR);
|
||||
list = lv_obj_get_style_list(obj, LV_LIST_PART_SCRLBAR);
|
||||
@ -1195,8 +1187,8 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
|
||||
#if LV_USE_DROPDOWN
|
||||
case LV_THEME_DROPDOWN:
|
||||
lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_BTN);
|
||||
list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_BTN);
|
||||
lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_MAIN);
|
||||
list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_MAIN);
|
||||
lv_style_list_add_style(list, &ddlist_btn);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_LIST);
|
||||
@ -1231,7 +1223,6 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
#if LV_USE_TABLE
|
||||
case LV_THEME_TABLE:
|
||||
lv_obj_clean_style_list(obj, LV_TABLE_PART_BG);
|
||||
list = lv_obj_get_style_list(obj, LV_TABLE_PART_BG);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_TABLE_PART_CELL1);
|
||||
list = lv_obj_get_style_list(obj, LV_TABLE_PART_CELL1);
|
||||
@ -1378,8 +1369,8 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
list = lv_obj_get_style_list(obj, LV_GAUGE_PART_MAIN);
|
||||
lv_style_list_add_style(list, &gauge_main);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_GAUGE_PART_STRONG);
|
||||
list = lv_obj_get_style_list(obj, LV_GAUGE_PART_STRONG);
|
||||
lv_obj_clean_style_list(obj, LV_GAUGE_PART_MAJOR);
|
||||
list = lv_obj_get_style_list(obj, LV_GAUGE_PART_MAJOR);
|
||||
lv_style_list_add_style(list, &gauge_strong);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_GAUGE_PART_NEEDLE);
|
||||
@ -1392,7 +1383,7 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
}
|
||||
|
||||
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, LV_STYLE_PROP_ALL);
|
||||
|
||||
|
||||
}
|
||||
|
@ -60,6 +60,7 @@ static void basic_init(void)
|
||||
lv_style_init(&style_bg);
|
||||
lv_style_set_bg_opa(&style_bg, LV_STATE_DEFAULT, LV_OPA_COVER);
|
||||
lv_style_set_border_width(&style_bg, LV_STATE_DEFAULT, 1);
|
||||
lv_style_set_border_width(&style_bg, LV_STATE_FOCUSED, 2);
|
||||
lv_style_set_border_color(&style_bg, LV_STATE_FOCUSED, _color_secondary);
|
||||
lv_style_set_border_color(&style_bg, LV_STATE_EDITED, lv_color_darken(_color_secondary, LV_OPA_30));
|
||||
lv_style_set_line_width(&style_bg, LV_STATE_DEFAULT, 1);
|
||||
@ -80,7 +81,6 @@ static void basic_init(void)
|
||||
lv_style_set_text_color(&style_btn, LV_STATE_DISABLED, LV_COLOR_GRAY);
|
||||
lv_style_set_image_recolor(&style_btn, LV_STATE_DISABLED, LV_COLOR_GRAY);
|
||||
|
||||
|
||||
lv_style_init(&style_round);
|
||||
lv_style_set_radius(&style_round, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE);
|
||||
|
||||
@ -543,8 +543,8 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
lv_style_list_add_style(list, &style_bg);
|
||||
lv_style_list_add_style(list, &style_tick_line);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_SPINNER_PART_ARC);
|
||||
list = lv_obj_get_style_list(obj, LV_SPINNER_PART_ARC);
|
||||
lv_obj_clean_style_list(obj, LV_SPINNER_PART_INDIC);
|
||||
list = lv_obj_get_style_list(obj, LV_SPINNER_PART_INDIC);
|
||||
lv_style_list_add_style(list, &style_bg);
|
||||
lv_style_list_add_style(list, &style_color);
|
||||
lv_style_list_add_style(list, &style_tick_line);
|
||||
@ -687,8 +687,8 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
list = lv_obj_get_style_list(obj, LV_ROLLER_PART_BG);
|
||||
lv_style_list_add_style(list, &style_bg);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_ROLLER_PART_SEL);
|
||||
list = lv_obj_get_style_list(obj, LV_ROLLER_PART_SEL);
|
||||
lv_obj_clean_style_list(obj, LV_ROLLER_PART_SELECTED);
|
||||
list = lv_obj_get_style_list(obj, LV_ROLLER_PART_SELECTED);
|
||||
lv_style_list_add_style(list, &style_bg);
|
||||
lv_style_list_add_style(list, &style_color);
|
||||
break;
|
||||
@ -726,8 +726,8 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
|
||||
#if LV_USE_DROPDOWN
|
||||
case LV_THEME_DROPDOWN:
|
||||
lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_BTN);
|
||||
list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_BTN);
|
||||
lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_MAIN);
|
||||
list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_MAIN);
|
||||
lv_style_list_add_style(list, &style_bg);
|
||||
lv_style_list_add_style(list, &style_btn);
|
||||
|
||||
@ -922,8 +922,8 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
lv_style_list_add_style(list, &style_bg);
|
||||
lv_style_list_add_style(list, &style_round);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_GAUGE_PART_STRONG);
|
||||
list = lv_obj_get_style_list(obj, LV_GAUGE_PART_STRONG);
|
||||
lv_obj_clean_style_list(obj, LV_GAUGE_PART_MAJOR);
|
||||
list = lv_obj_get_style_list(obj, LV_GAUGE_PART_MAJOR);
|
||||
lv_style_list_add_style(list, &style_tick_line);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_GAUGE_PART_NEEDLE);
|
||||
@ -936,7 +936,7 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
}
|
||||
|
||||
|
||||
lv_obj_refresh_style(obj);
|
||||
lv_obj_refresh_style(obj, LV_STYLE_PROP_ALL);
|
||||
|
||||
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_style_list_copy(&ext->style_arc, ©_ext->style_arc);
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(arc);
|
||||
lv_obj_refresh_style(arc, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("arc created");
|
||||
@ -132,6 +132,7 @@ void lv_arc_set_start_angle(lv_obj_t * arc, int16_t start)
|
||||
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
|
||||
|
||||
if(start > 360) start -= 360;
|
||||
if(start < 0) start += 360;
|
||||
|
||||
/*Too large move, the whole arc need to be invalidated anyway*/
|
||||
if(LV_MATH_ABS(start - ext->arc_angle_start) >= 180) {
|
||||
@ -164,6 +165,9 @@ void lv_arc_set_end_angle(lv_obj_t * arc, int16_t end)
|
||||
|
||||
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
|
||||
|
||||
if(end > 360) end -= 360;
|
||||
if(end < 0) end += 360;
|
||||
|
||||
/*Too large move, the whole arc need to be invalidated anyway*/
|
||||
if(LV_MATH_ABS(end - ext->arc_angle_end) >= 180) {
|
||||
lv_obj_invalidate(arc);
|
||||
@ -191,14 +195,17 @@ void lv_arc_set_end_angle(lv_obj_t * arc, int16_t end)
|
||||
* @param start the start angle
|
||||
* @param end the end angle
|
||||
*/
|
||||
void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
|
||||
void lv_arc_set_angles(lv_obj_t * arc, int16_t start, int16_t end)
|
||||
{
|
||||
LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
|
||||
|
||||
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
|
||||
|
||||
if(end > 360) end -= 360;
|
||||
if(end < 0) end += 360;
|
||||
|
||||
if(start > 360) start -= 360;
|
||||
if(start < 0) start += 360;
|
||||
|
||||
inv_arc_area(arc, ext->arc_angle_start, ext->arc_angle_end);
|
||||
|
||||
@ -220,6 +227,7 @@ void lv_arc_set_bg_start_angle(lv_obj_t * arc, int16_t start)
|
||||
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
|
||||
|
||||
if(start > 360) start -= 360;
|
||||
if(start < 0) start += 360;
|
||||
|
||||
/*Too large move, the whole arc need to be invalidated anyway*/
|
||||
if(LV_MATH_ABS(start - ext->bg_angle_start) >= 180) {
|
||||
@ -253,6 +261,7 @@ void lv_arc_set_bg_end_angle(lv_obj_t * arc, int16_t end)
|
||||
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
|
||||
|
||||
if(end > 360) end -= 360;
|
||||
if(end < 0) end += 360;
|
||||
|
||||
/*Too large move, the whole arc need to be invalidated anyway*/
|
||||
if(LV_MATH_ABS(end - ext->bg_angle_end) >= 180) {
|
||||
@ -280,14 +289,17 @@ void lv_arc_set_bg_end_angle(lv_obj_t * arc, int16_t end)
|
||||
* @param start the start angle
|
||||
* @param end the end angle
|
||||
*/
|
||||
void lv_arc_set_bg_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
|
||||
void lv_arc_set_bg_angles(lv_obj_t * arc, int16_t start, int16_t end)
|
||||
{
|
||||
LV_ASSERT_OBJ(arc, LV_OBJX_NAME);
|
||||
|
||||
lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc);
|
||||
|
||||
if(end > 360) end -= 360;
|
||||
if(end < 0) end += 360;
|
||||
|
||||
if(start > 360) start -= 360;
|
||||
if(start < 0) start += 360;
|
||||
|
||||
inv_arc_area(arc, ext->bg_angle_start, ext->bg_angle_end);
|
||||
|
||||
|
@ -86,7 +86,7 @@ void lv_arc_set_end_angle(lv_obj_t * arc, int16_t end);
|
||||
* @param start the start angle
|
||||
* @param end the end angle
|
||||
*/
|
||||
void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end);
|
||||
void lv_arc_set_angles(lv_obj_t * arc, int16_t start, int16_t end);
|
||||
|
||||
/**
|
||||
* Set the start angle of an arc background. 0 deg: right, 90 bottom, etc.
|
||||
@ -108,7 +108,7 @@ void lv_arc_set_bg_end_angle(lv_obj_t * arc, int16_t end);
|
||||
* @param start the start angle
|
||||
* @param end the end angle
|
||||
*/
|
||||
void lv_arc_set_bg_angles(lv_obj_t * arc, uint16_t start, uint16_t end);
|
||||
void lv_arc_set_bg_angles(lv_obj_t * arc, int16_t start, int16_t end);
|
||||
|
||||
/*=====================
|
||||
* Getter functions
|
||||
|
@ -130,7 +130,7 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_style_list_copy(&ext->style_indic, &ext_copy->style_indic);
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(bar);
|
||||
lv_obj_refresh_style(bar, LV_STYLE_PROP_ALL);
|
||||
|
||||
lv_bar_set_value(bar, ext->cur_value, LV_ANIM_OFF);
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->checkable = copy_ext->checkable;
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(btn);
|
||||
lv_obj_refresh_style(btn, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("button created");
|
||||
|
@ -280,12 +280,11 @@ void lv_btnmatrix_set_ctrl_map(lv_obj_t * btnm, const lv_btnmatrix_ctrl_t ctrl_m
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the pressed button i.e. visually highlight it.
|
||||
* Mainly used a when the btnm is in a group to show the selected button
|
||||
* Set the focused button i.e. visually highlight it.
|
||||
* @param btnm pointer to button matrix object
|
||||
* @param id index of the currently pressed button (`LV_BTNMATRIX_BTN_NONE` to unpress)
|
||||
* @param id index of the button to focus(`LV_BTNMATRIX_BTN_NONE` to remove focus)
|
||||
*/
|
||||
void lv_btnmatrix_set_pressed(lv_obj_t * btnm, uint16_t id)
|
||||
void lv_btnmatrix_set_focused_btn(lv_obj_t * btnm, uint16_t id)
|
||||
{
|
||||
LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
|
||||
|
||||
@ -293,9 +292,9 @@ void lv_btnmatrix_set_pressed(lv_obj_t * btnm, uint16_t id)
|
||||
|
||||
if(id >= ext->btn_cnt && id != LV_BTNMATRIX_BTN_NONE) return;
|
||||
|
||||
if(id == ext->btn_id_pr) return;
|
||||
if(id == ext->btn_id_focused) return;
|
||||
|
||||
ext->btn_id_pr = id;
|
||||
ext->btn_id_focused = id;
|
||||
lv_obj_invalidate(btnm);
|
||||
}
|
||||
|
||||
@ -492,7 +491,7 @@ const char * lv_btnmatrix_get_active_btn_text(const lv_obj_t * btnm)
|
||||
* @param btnm pointer to button matrix object
|
||||
* @return index of the pressed button (LV_BTNMATRIX_BTN_NONE: if unset)
|
||||
*/
|
||||
uint16_t lv_btnmatrix_get_pressed_btn(const lv_obj_t * btnm)
|
||||
uint16_t lv_btnmatrix_get_focused_btn(const lv_obj_t * btnm)
|
||||
{
|
||||
LV_ASSERT_OBJ(btnm, LV_OBJX_NAME);
|
||||
|
||||
@ -829,9 +828,13 @@ static lv_res_t lv_btnmatrix_signal(lv_obj_t * btnm, lv_signal_t sign, void * pa
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_PRESSING) {
|
||||
uint16_t btn_pr;
|
||||
uint16_t btn_pr = LV_BTNMATRIX_BTN_NONE;
|
||||
/*Search the pressed area*/
|
||||
lv_indev_get_point(param, &p);
|
||||
lv_indev_t * indev = lv_indev_get_act();
|
||||
lv_indev_type_t indev_type = lv_indev_get_type(indev);
|
||||
if(indev_type == LV_INDEV_TYPE_ENCODER || indev_type == LV_INDEV_TYPE_KEYPAD) return LV_RES_OK;
|
||||
|
||||
lv_indev_get_point(indev, &p);
|
||||
btn_pr = get_button_from_point(btnm, &p);
|
||||
/*Invalidate to old and the new areas*/
|
||||
if(btn_pr != ext->btn_id_pr) {
|
||||
|
@ -108,12 +108,11 @@ void lv_btnmatrix_set_map(lv_obj_t * btnm, const char * map[]);
|
||||
void lv_btnmatrix_set_ctrl_map(lv_obj_t * btnm, const lv_btnmatrix_ctrl_t ctrl_map[]);
|
||||
|
||||
/**
|
||||
* Set the pressed button i.e. visually highlight it.
|
||||
* Mainly used a when the btnm is in a group to show the selected button
|
||||
* Set the focused button i.e. visually highlight it.
|
||||
* @param btnm pointer to button matrix object
|
||||
* @param id index of the currently pressed button (`LV_BTNMATRIX_BTN_NONE` to unpress)
|
||||
* @param id index of the button to focus(`LV_BTNMATRIX_BTN_NONE` to remove focus)
|
||||
*/
|
||||
void lv_btnmatrix_set_pressed(lv_obj_t * btnm, uint16_t id);
|
||||
void lv_btnmatrix_set_focused_btn(lv_obj_t * btnm, uint16_t id);
|
||||
|
||||
/**
|
||||
* Set a style of a button matrix
|
||||
@ -214,12 +213,11 @@ uint16_t lv_btnmatrix_get_active_btn(const lv_obj_t * btnm);
|
||||
const char * lv_btnmatrix_get_active_btn_text(const lv_obj_t * btnm);
|
||||
|
||||
/**
|
||||
* Get the pressed button's index.
|
||||
* The button be really pressed by the user or manually set to pressed with `lv_btnmatrix_set_pressed`
|
||||
* Get the focused button's index.
|
||||
* @param btnm pointer to button matrix object
|
||||
* @return index of the pressed button (LV_BTNMATRIX_BTN_NONE: if unset)
|
||||
* @return index of the focused button (LV_BTNMATRIX_BTN_NONE: if unset)
|
||||
*/
|
||||
uint16_t lv_btnmatrix_get_pressed_btn(const lv_obj_t * btnm);
|
||||
uint16_t lv_btnmatrix_get_focused_btn(const lv_obj_t * btnm);
|
||||
|
||||
/**
|
||||
* Get the button's text
|
||||
|
@ -652,7 +652,7 @@ void lv_canvas_fill_bg(lv_obj_t * canvas, lv_color_t color, lv_opa_t opa)
|
||||
|
||||
lv_img_dsc_t * dsc = lv_canvas_get_img(canvas);
|
||||
|
||||
uint32_t x = dsc->header.w * dsc->header.h;
|
||||
uint32_t x;
|
||||
uint32_t y;
|
||||
for(y = 0; y < dsc->header.h; y++) {
|
||||
for(x = 0; x < dsc->header.w; x++) {
|
||||
|
@ -152,7 +152,7 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
memcpy(&ext->secondary_y_axis, &ext_copy->secondary_y_axis, sizeof(lv_chart_axis_cfg_t));
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(chart);
|
||||
lv_obj_refresh_style(chart, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("chart created");
|
||||
|
@ -49,7 +49,9 @@ typedef struct {
|
||||
/** Checkbox styles. */
|
||||
enum {
|
||||
LV_CHECKBOX_PART_BG = LV_BTN_PART_MAIN, /**< Style of object background. */
|
||||
_LV_CHECKBOX_PART_VIRTUAL_LAST,
|
||||
LV_CHECKBOX_PART_BULLET = _LV_BTN_PART_REAL_LAST, /**< Style of box (released). */
|
||||
_LV_CHECKBOX_PART_REAL_LAST
|
||||
};
|
||||
typedef uint8_t lv_checkbox_style_t;
|
||||
|
||||
@ -99,7 +101,7 @@ static inline void lv_checkbox_set_checked(lv_obj_t * cb, bool checked)
|
||||
* Make the check box inactive (disabled)
|
||||
* @param cb pointer to a check box object
|
||||
*/
|
||||
static inline void lv_checkbox_set_inactive(lv_obj_t * cb)
|
||||
static inline void lv_checkbox_set_disabled(lv_obj_t * cb)
|
||||
{
|
||||
lv_btn_set_state(cb, LV_BTN_STATE_DISABLED);
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->layout = copy_ext->layout;
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(cont);
|
||||
lv_obj_refresh_style(cont, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("container created");
|
||||
@ -243,7 +243,7 @@ lv_fit_t lv_cont_get_fit_bottom(const lv_obj_t * cont)
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
extern uint32_t cont_sign;
|
||||
/**
|
||||
* Signal function of the container
|
||||
* @param cont pointer to a container object
|
||||
@ -282,7 +282,7 @@ static lv_res_t lv_cont_signal(lv_obj_t * cont, lv_signal_t sign, void * param)
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_PARENT_SIZE_CHG) {
|
||||
/*FLOOD and FILL fit needs to be refreshed if the parent's size has changed*/
|
||||
/*MAX and EDGE fit needs to be refreshed if the parent's size has changed*/
|
||||
lv_cont_refr_autofit(cont);
|
||||
}
|
||||
|
||||
@ -523,7 +523,8 @@ static void lv_cont_layout_pretty(lv_obj_t * cont)
|
||||
break;
|
||||
}
|
||||
w_row += lv_obj_get_width(child_rc) + inner; /*Add the object width + opad*/
|
||||
h_row = LV_MATH_MAX(h_row, lv_obj_get_height(child_rc)); /*Search the highest object*/
|
||||
lv_coord_t child_h = lv_obj_get_height(child_rc);
|
||||
h_row = LV_MATH_MAX(h_row, child_h); /*Search the highest object*/
|
||||
obj_num++;
|
||||
if(lv_obj_is_protected(child_rc, LV_PROTECT_FOLLOW))
|
||||
break; /*If can not be followed by an other object then break here*/
|
||||
|
@ -144,7 +144,7 @@ lv_obj_t * lv_cpicker_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
|
||||
lv_style_list_copy(&ext->indic.style_list, ©_ext->indic.style_list);
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(cpicker);
|
||||
lv_obj_refresh_style(cpicker, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
refr_indic_pos(cpicker);
|
||||
|
||||
@ -483,14 +483,18 @@ static void draw_disc_grad(lv_obj_t * cpicker, const lv_area_t * mask)
|
||||
uint16_t i;
|
||||
lv_coord_t cir_w = lv_obj_get_style_scale_width(cpicker, LV_CPICKER_PART_MAIN);
|
||||
|
||||
/* The inner line ends will be masked out.
|
||||
* So make lines a little bit longer because the masking makes a more even result */
|
||||
lv_coord_t cir_w_extra = cir_w + line_dsc.width;
|
||||
|
||||
for(i = 0; i <= 360; i += LV_CPICKER_DEF_QF) {
|
||||
line_dsc.color = angle_to_mode_color(cpicker, i);
|
||||
|
||||
lv_point_t p[2];
|
||||
p[0].x = cx + (r * lv_trigo_sin(i) >> LV_TRIGO_SHIFT);
|
||||
p[0].y = cy + (r * lv_trigo_sin(i + 90) >> LV_TRIGO_SHIFT);
|
||||
p[1].x = cx + ((r - cir_w) * lv_trigo_sin(i) >> LV_TRIGO_SHIFT);
|
||||
p[1].y = cy + ((r - cir_w) * lv_trigo_sin(i + 90) >> LV_TRIGO_SHIFT);
|
||||
p[1].x = cx + ((r - cir_w_extra) * lv_trigo_sin(i) >> LV_TRIGO_SHIFT);
|
||||
p[1].y = cy + ((r - cir_w_extra) * lv_trigo_sin(i + 90) >> LV_TRIGO_SHIFT);
|
||||
|
||||
lv_draw_line(&p[0], &p[1], mask, &line_dsc);
|
||||
}
|
||||
@ -697,6 +701,7 @@ static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * p
|
||||
}
|
||||
else if(sign == LV_SIGNAL_CONTROL) {
|
||||
uint32_t c = *((uint32_t *)param); /*uint32_t because can be UTF-8*/
|
||||
|
||||
if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
|
||||
lv_color_hsv_t hsv_cur;
|
||||
hsv_cur = ext->hsv;
|
||||
@ -718,7 +723,7 @@ static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * p
|
||||
if(res != LV_RES_OK) return res;
|
||||
}
|
||||
}
|
||||
else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
|
||||
else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
|
||||
lv_color_hsv_t hsv_cur;
|
||||
hsv_cur = ext->hsv;
|
||||
|
||||
@ -750,8 +755,15 @@ static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * p
|
||||
lv_indev_t * indev = lv_indev_get_act();
|
||||
if(indev == NULL) return res;
|
||||
|
||||
lv_indev_type_t indev_type = lv_indev_get_type(indev);
|
||||
lv_point_t p;
|
||||
lv_indev_get_point(indev, &p);
|
||||
if(indev_type == LV_INDEV_TYPE_ENCODER || indev_type == LV_INDEV_TYPE_KEYPAD) {
|
||||
p.x = cpicker->coords.x1 + lv_obj_get_width(cpicker) / 2;
|
||||
p.y = cpicker->coords.y1 + lv_obj_get_height(cpicker) / 2;
|
||||
}
|
||||
else {
|
||||
lv_indev_get_point(indev, &p);
|
||||
}
|
||||
|
||||
if((LV_MATH_ABS(p.x - ext->last_press_point.x) > indev->driver.drag_limit / 2) ||
|
||||
(LV_MATH_ABS(p.y - ext->last_press_point.y) > indev->driver.drag_limit / 2)) {
|
||||
|
@ -89,7 +89,7 @@ lv_obj_t * lv_dropdown_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
LV_LOG_TRACE("drop down list create started");
|
||||
|
||||
/*Create the ancestor drop down list*/
|
||||
lv_obj_t * ddlist = lv_btn_create(par, copy);
|
||||
lv_obj_t * ddlist = lv_obj_create(par, copy);
|
||||
LV_ASSERT_MEM(ddlist);
|
||||
if(ddlist == NULL) return NULL;
|
||||
|
||||
@ -109,14 +109,14 @@ lv_obj_t * lv_dropdown_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->options = NULL;
|
||||
ext->symbol = LV_SYMBOL_DOWN;
|
||||
ext->text = "Select";
|
||||
ext->static_txt = 0;
|
||||
ext->static_txt = 1;
|
||||
ext->show_selected = 1;
|
||||
ext->sel_opt_id = 0;
|
||||
ext->sel_opt_id_orig = 0;
|
||||
ext->pr_opt_id = LV_DROPDOWN_PR_NONE;
|
||||
ext->option_cnt = 0;
|
||||
ext->dir = LV_DROPDOWN_DIR_DOWN;
|
||||
ext->max_height = LV_DPI * 2;
|
||||
ext->max_height = (3 * lv_disp_get_ver_res(NULL)) / 4;
|
||||
ext->anim_time = LV_DROPDOWN_DEF_ANIM_TIME;
|
||||
lv_style_list_init(&ext->style_page);
|
||||
lv_style_list_init(&ext->style_scrlbar);
|
||||
@ -128,8 +128,7 @@ lv_obj_t * lv_dropdown_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
|
||||
/*Init the new drop down list drop down list*/
|
||||
if(copy == NULL) {
|
||||
ext->options = NULL;
|
||||
|
||||
lv_dropdown_set_static_options(ddlist, "Option 1\nOption 2\nOption 3");
|
||||
lv_theme_apply(ddlist, LV_THEME_DROPDOWN);
|
||||
}
|
||||
/*Copy an existing drop down list*/
|
||||
@ -178,6 +177,26 @@ void lv_dropdown_set_text(lv_obj_t * ddlist, const char * txt)
|
||||
lv_obj_invalidate(ddlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear any options in a drop down list. Static or dynamic.
|
||||
* @param ddlist pointer to drop down list object
|
||||
*/
|
||||
void lv_dropdown_clear_options(lv_obj_t * ddlist)
|
||||
{
|
||||
LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
if(ext->options == NULL) return;
|
||||
|
||||
if(ext->static_txt == 0)
|
||||
lv_mem_free(ext->options);
|
||||
|
||||
ext->options = NULL;
|
||||
ext->static_txt = 0;
|
||||
ext->option_cnt = 0;
|
||||
|
||||
lv_obj_invalidate(ddlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the options in a drop down list from a string
|
||||
* @param ddlist pointer to drop down list object
|
||||
@ -263,8 +282,18 @@ void lv_dropdown_add_option(lv_obj_t * ddlist, const char * option, uint16_t pos
|
||||
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
|
||||
/*Can not append to static options*/
|
||||
if(ext->static_txt != 0) return;
|
||||
/*Convert static options to dynmaic*/
|
||||
if(ext->static_txt != 0) {
|
||||
char * static_options = ext->options;
|
||||
size_t len = strlen(static_options) + 1;
|
||||
|
||||
ext->options = lv_mem_alloc(len);
|
||||
LV_ASSERT_MEM(ext->options);
|
||||
if(ext->options == NULL) return;
|
||||
|
||||
strcpy(ext->options, static_options);
|
||||
ext->static_txt = 0;
|
||||
}
|
||||
|
||||
/*Allocate space for the new option*/
|
||||
size_t old_len = (ext->options == NULL) ? 0 : strlen(ext->options);
|
||||
@ -326,10 +355,26 @@ void lv_dropdown_set_selected(lv_obj_t * ddlist, uint16_t sel_opt)
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a fix height for the drop down list
|
||||
* If 0 then the opened ddlist will be auto. sized else the set height will be applied.
|
||||
* Set the direction of the a drop down list
|
||||
* @param ddlist pointer to a drop down list object
|
||||
* @param dir LV_DROPDOWN_DIR_LEF/RIGHT/TOP/BOTTOM
|
||||
*/
|
||||
void lv_dropdown_set_dir(lv_obj_t * ddlist, lv_dropdown_dir_t dir)
|
||||
{
|
||||
LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
|
||||
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
if(ext->dir == dir) return;
|
||||
|
||||
ext->dir = dir;
|
||||
|
||||
lv_obj_invalidate(ddlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the maximal height for the drop down list
|
||||
* @param ddlist pointer to a drop down list
|
||||
* @param h the height when the list is opened (0: auto size)
|
||||
* @param h the maximal height
|
||||
*/
|
||||
void lv_dropdown_set_max_height(lv_obj_t * ddlist, lv_coord_t h)
|
||||
{
|
||||
@ -365,23 +410,6 @@ void lv_dropdown_set_symbol(lv_obj_t * ddlist, const char * symbol)
|
||||
lv_obj_invalidate(ddlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the direction of the a drop down list
|
||||
* @param ddlist pointer to a drop down list object
|
||||
* @param dir LV_DROPDOWN_DIR_LEF/RIGHT/TOP/BOTTOM
|
||||
*/
|
||||
void lv_dropdown_set_dir(lv_obj_t * ddlist, lv_dropdown_dir_t dir)
|
||||
{
|
||||
LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
|
||||
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
if(ext->dir == dir) return;
|
||||
|
||||
ext->dir = dir;
|
||||
|
||||
lv_obj_invalidate(ddlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether the ddlist highlight the last selected option and display its text or not
|
||||
* @param ddlist pointer to a drop down list object
|
||||
@ -552,7 +580,7 @@ bool lv_dropdown_get_show_selected(lv_obj_t * ddlist)
|
||||
void lv_dropdown_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
|
||||
{
|
||||
#if LV_USE_ANIMATION == 0
|
||||
anim = false;
|
||||
(void) anim; /*Unused*/
|
||||
#endif
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
if(ext->page) return;
|
||||
@ -566,6 +594,12 @@ void lv_dropdown_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
|
||||
if(ancestor_page_design == NULL) ancestor_page_design = lv_obj_get_design_cb(ext->page);
|
||||
|
||||
lv_dropdown_page_ext_t * page_ext = lv_obj_allocate_ext_attr(ext->page, sizeof(lv_dropdown_page_ext_t));
|
||||
LV_ASSERT_MEM(page_ext);
|
||||
if(page_ext == NULL) {
|
||||
lv_obj_del(ext->page);
|
||||
ext->page = NULL;
|
||||
return;
|
||||
}
|
||||
page_ext->ddlist = ddlist;
|
||||
|
||||
lv_obj_set_design_cb(ext->page, lv_dropdown_page_design);
|
||||
@ -575,7 +609,7 @@ void lv_dropdown_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
|
||||
lv_style_list_copy(lv_obj_get_style_list(ext->page, LV_PAGE_PART_BG), &ext->style_page);
|
||||
lv_style_list_copy(lv_obj_get_style_list(ext->page, LV_PAGE_PART_SCRLBAR), &ext->style_scrlbar);
|
||||
lv_obj_clean_style_list(ext->page, LV_PAGE_PART_SCRL);
|
||||
lv_obj_refresh_style(ext->page);
|
||||
lv_obj_refresh_style(ext->page, LV_STYLE_PROP_ALL);
|
||||
|
||||
lv_page_set_scrl_fit(ext->page, LV_FIT_TIGHT);
|
||||
|
||||
@ -613,7 +647,7 @@ void lv_dropdown_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
|
||||
}
|
||||
|
||||
#if LV_USE_ANIMATION
|
||||
if(ext->dir != LV_DROPDOWN_DIR_UP) {
|
||||
if(anim == LV_ANIM_ON && ext->dir != LV_DROPDOWN_DIR_UP) {
|
||||
lv_anim_t a;
|
||||
lv_anim_init(&a);
|
||||
lv_anim_set_var(&a, ddlist);
|
||||
@ -695,13 +729,13 @@ static lv_design_res_t lv_dropdown_design(lv_obj_t * ddlist, const lv_area_t * c
|
||||
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
|
||||
lv_style_int_t left = lv_obj_get_style_pad_left(ddlist, LV_DROPDOWN_PART_BTN);
|
||||
lv_style_int_t right = lv_obj_get_style_pad_right(ddlist, LV_DROPDOWN_PART_BTN);
|
||||
lv_style_int_t top = lv_obj_get_style_pad_top(ddlist, LV_DROPDOWN_PART_BTN);
|
||||
lv_style_int_t left = lv_obj_get_style_pad_left(ddlist, LV_DROPDOWN_PART_MAIN);
|
||||
lv_style_int_t right = lv_obj_get_style_pad_right(ddlist, LV_DROPDOWN_PART_MAIN);
|
||||
lv_style_int_t top = lv_obj_get_style_pad_top(ddlist, LV_DROPDOWN_PART_MAIN);
|
||||
|
||||
lv_draw_label_dsc_t label_dsc;
|
||||
lv_draw_label_dsc_init(&label_dsc);
|
||||
lv_obj_init_draw_label_dsc(ddlist, LV_DROPDOWN_PART_BTN, &label_dsc);
|
||||
lv_obj_init_draw_label_dsc(ddlist, LV_DROPDOWN_PART_MAIN, &label_dsc);
|
||||
|
||||
lv_area_t txt_area;
|
||||
lv_point_t txt_size;
|
||||
@ -852,7 +886,6 @@ static lv_res_t lv_dropdown_signal(lv_obj_t * ddlist, lv_signal_t sign, void * p
|
||||
return LV_RES_OK;
|
||||
}
|
||||
else if(sign == LV_SIGNAL_GET_STATE_DSC) {
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
lv_get_state_info_t * info = param;
|
||||
if(info->part == LV_DROPDOWN_PART_LIST ||
|
||||
info->part == LV_DROPDOWN_PART_SCRLBAR ||
|
||||
@ -915,12 +948,12 @@ static lv_res_t lv_dropdown_signal(lv_obj_t * ddlist, lv_signal_t sign, void * p
|
||||
if(ext->page) lv_dropdown_close(ddlist, LV_ANIM_OFF);
|
||||
}
|
||||
else if(sign == LV_SIGNAL_STYLE_CHG) {
|
||||
lv_style_int_t top = lv_obj_get_style_pad_top(ddlist, LV_DROPDOWN_PART_BTN);
|
||||
lv_style_int_t bottom = lv_obj_get_style_pad_bottom(ddlist, LV_DROPDOWN_PART_BTN);
|
||||
const lv_font_t * font = lv_obj_get_style_text_font(ddlist, LV_DROPDOWN_PART_BTN);
|
||||
lv_style_int_t top = lv_obj_get_style_pad_top(ddlist, LV_DROPDOWN_PART_MAIN);
|
||||
lv_style_int_t bottom = lv_obj_get_style_pad_bottom(ddlist, LV_DROPDOWN_PART_MAIN);
|
||||
const lv_font_t * font = lv_obj_get_style_text_font(ddlist, LV_DROPDOWN_PART_MAIN);
|
||||
lv_obj_set_height(ddlist, top + bottom + lv_font_get_line_height(font));
|
||||
|
||||
if(ext->page) lv_obj_refresh_style(ext->page);
|
||||
if(ext->page) lv_obj_refresh_style(ext->page, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
else if(sign == LV_SIGNAL_CONTROL) {
|
||||
char c = *((char *)param);
|
||||
@ -982,7 +1015,7 @@ static lv_res_t lv_dropdown_page_signal(lv_obj_t * page, lv_signal_t sign, void
|
||||
lv_style_int_t left = lv_obj_get_style_pad_left(ddlist, LV_DROPDOWN_PART_LIST);
|
||||
lv_style_int_t right = lv_obj_get_style_pad_right(ddlist, LV_DROPDOWN_PART_LIST);
|
||||
lv_obj_t * scrl = lv_page_get_scrl(page);
|
||||
scrl->ext_draw_pad = LV_MATH_MAX(scrl->ext_draw_pad, LV_MATH_MAX(left, right));
|
||||
scrl->ext_draw_pad = LV_MATH_MAX3(scrl->ext_draw_pad, left, right);
|
||||
}
|
||||
else if(sign == LV_SIGNAL_RELEASED) {
|
||||
if(lv_indev_is_dragging(lv_indev_get_act()) == false) {
|
||||
@ -1039,7 +1072,7 @@ static lv_res_t lv_dropdown_page_scrl_signal(lv_obj_t * scrl, lv_signal_t sign,
|
||||
* (The scrollabel is scrolled the "select rectangle" is drawn on the bg too)*/
|
||||
lv_style_int_t left = lv_obj_get_style_pad_left(ddlist, LV_DROPDOWN_PART_LIST);
|
||||
lv_style_int_t right = lv_obj_get_style_pad_right(ddlist, LV_DROPDOWN_PART_LIST);
|
||||
scrl->ext_draw_pad = LV_MATH_MAX(scrl->ext_draw_pad, LV_MATH_MAX(left, right));
|
||||
scrl->ext_draw_pad = LV_MATH_MAX3(scrl->ext_draw_pad, left, right);
|
||||
}
|
||||
|
||||
return res;
|
||||
@ -1060,7 +1093,7 @@ static lv_style_list_t * lv_dropdown_get_style(lv_obj_t * ddlist, uint8_t part)
|
||||
lv_style_list_t * style_dsc_p;
|
||||
|
||||
switch(part) {
|
||||
case LV_DROPDOWN_PART_BTN:
|
||||
case LV_DROPDOWN_PART_MAIN:
|
||||
style_dsc_p = &ddlist->style_list;
|
||||
break;
|
||||
case LV_DROPDOWN_PART_LIST:
|
||||
@ -1131,6 +1164,8 @@ static void draw_box_label(lv_obj_t * ddlist, const lv_area_t * clip_area, uint1
|
||||
lv_coord_t font_h = lv_font_get_line_height(label_dsc.font);
|
||||
|
||||
lv_obj_t * label = get_label(ddlist);
|
||||
if(label == NULL) return;
|
||||
|
||||
lv_area_t area_sel;
|
||||
area_sel.y1 = label->coords.y1;
|
||||
area_sel.y1 += id * (font_h + label_dsc.line_space);
|
||||
@ -1212,6 +1247,7 @@ static void page_press_handler(lv_obj_t * page)
|
||||
static uint16_t get_id_on_point(lv_obj_t * ddlist, lv_coord_t x, lv_coord_t y)
|
||||
{
|
||||
lv_obj_t * label = get_label(ddlist);
|
||||
if(label == NULL) return 0;
|
||||
x -= label->coords.x1;
|
||||
y -= label->coords.y1;
|
||||
uint16_t letter_i;
|
||||
@ -1247,6 +1283,7 @@ static void pos_selected(lv_obj_t * ddlist)
|
||||
lv_coord_t font_h = lv_font_get_line_height(font);
|
||||
lv_obj_t * scrl = lv_page_get_scrl(ext->page);
|
||||
lv_obj_t * label = get_label(ddlist);
|
||||
if(label == NULL) return;
|
||||
|
||||
lv_coord_t h = lv_obj_get_height(ext->page);
|
||||
lv_style_int_t line_space = lv_obj_get_style_text_line_space(ddlist, LV_DROPDOWN_PART_LIST);
|
||||
|
@ -26,7 +26,6 @@ extern "C" {
|
||||
#error "lv_ddlist: lv_label is required. Enable it in lv_conf.h (LV_USE_LABEL 1) "
|
||||
#endif
|
||||
|
||||
#include "../lv_widgets/lv_btn.h"
|
||||
#include "../lv_widgets/lv_page.h"
|
||||
#include "../lv_widgets/lv_label.h"
|
||||
|
||||
@ -50,7 +49,6 @@ typedef uint8_t lv_dropdown_dir_t;
|
||||
|
||||
/*Data of drop down list*/
|
||||
typedef struct {
|
||||
lv_btn_ext_t btn; /*Ext. of ancestor*/
|
||||
/*New data for this type */
|
||||
lv_obj_t * page; /*The dropped down list*/
|
||||
const char * text; /*Text to display on the ddlist's button*/
|
||||
@ -71,8 +69,8 @@ typedef struct {
|
||||
} lv_dropdown_ext_t;
|
||||
|
||||
enum {
|
||||
LV_DROPDOWN_PART_BTN = LV_BTN_PART_MAIN,
|
||||
LV_DROPDOWN_PART_LIST = _LV_BTN_PART_REAL_LAST,
|
||||
LV_DROPDOWN_PART_MAIN = LV_OBJ_PART_MAIN,
|
||||
LV_DROPDOWN_PART_LIST = _LV_OBJ_PART_REAL_LAST,
|
||||
LV_DROPDOWN_PART_SCRLBAR,
|
||||
LV_DROPDOWN_PART_SELECTED,
|
||||
};
|
||||
@ -101,6 +99,12 @@ lv_obj_t * lv_dropdown_create(lv_obj_t * par, const lv_obj_t * copy);
|
||||
*/
|
||||
void lv_dropdown_set_text(lv_obj_t * ddlist, const char * txt);
|
||||
|
||||
/**
|
||||
* Clear any options in a drop down list. Static or dynamic.
|
||||
* @param ddlist pointer to drop down list object
|
||||
*/
|
||||
void lv_dropdown_clear_options(lv_obj_t * ddlist);
|
||||
|
||||
/**
|
||||
* Set the options in a drop down list from a string
|
||||
* @param ddlist pointer to drop down list object
|
||||
@ -131,11 +135,18 @@ void lv_dropdown_add_option(lv_obj_t * ddlist, const char * option, uint16_t pos
|
||||
*/
|
||||
void lv_dropdown_set_selected(lv_obj_t * ddlist, uint16_t sel_opt);
|
||||
|
||||
|
||||
/**
|
||||
* Set a maximum height for the drop down list
|
||||
* If 0 then the opened ddlist will be auto. sized else the set height will be applied.
|
||||
* Set the direction of the a drop down list
|
||||
* @param ddlist pointer to a drop down list object
|
||||
* @param dir LV_DROPDOWN_DIR_LEF/RIGHT/TOP/BOTTOM
|
||||
*/
|
||||
void lv_dropdown_set_dir(lv_obj_t * ddlist, lv_dropdown_dir_t dir);
|
||||
|
||||
/**
|
||||
* Set the maximal height for the drop down list
|
||||
* @param ddlist pointer to a drop down list
|
||||
* @param h the height when the list is opened (0: auto size)
|
||||
* @param h the maximal height
|
||||
*/
|
||||
void lv_dropdown_set_max_height(lv_obj_t * ddlist, lv_coord_t h);
|
||||
|
||||
@ -147,14 +158,12 @@ void lv_dropdown_set_max_height(lv_obj_t * ddlist, lv_coord_t h);
|
||||
void lv_dropdown_set_symbol(lv_obj_t * ddlist, const char * symbol);
|
||||
|
||||
/**
|
||||
* Set the scroll bar mode of a drop down list
|
||||
* Set whether the ddlist highlight the last selected option and display its text or not
|
||||
* @param ddlist pointer to a drop down list object
|
||||
* @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
|
||||
* @param show true/false
|
||||
*/
|
||||
static inline void lv_dropdown_set_sb_mode(lv_obj_t * ddlist, lv_sb_mode_t mode)
|
||||
{
|
||||
lv_page_set_sb_mode(ddlist, mode);
|
||||
}
|
||||
void lv_dropdown_set_show_selected(lv_obj_t * ddlist, bool show);
|
||||
|
||||
/**
|
||||
* Set the open/close animation time.
|
||||
* @param ddlist pointer to a drop down list
|
||||
@ -165,20 +174,6 @@ static inline void lv_dropdown_set_anim_time(lv_obj_t * ddlist, uint16_t anim_ti
|
||||
lv_page_set_anim_time(ddlist, anim_time);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the direction of the a drop down list
|
||||
* @param ddlist pointer to a drop down list object
|
||||
* @param dir LV_DROPDOWN_DIR_LEF/RIGHT/TOP/BOTTOM
|
||||
*/
|
||||
void lv_dropdown_set_dir(lv_obj_t * ddlist, lv_dropdown_dir_t dir);
|
||||
|
||||
/**
|
||||
* Set whether the ddlist highlight the last selected option and display its text or not
|
||||
* @param ddlist pointer to a drop down list object
|
||||
* @param show true/false
|
||||
*/
|
||||
void lv_dropdown_set_show_selected(lv_obj_t * ddlist, bool show);
|
||||
|
||||
/*=====================
|
||||
* Getter functions
|
||||
*====================*/
|
||||
@ -247,16 +242,6 @@ lv_dropdown_dir_t lv_dropdown_get_dir(const lv_obj_t * ddlist);
|
||||
*/
|
||||
bool lv_dropdown_get_show_selected(lv_obj_t * ddlist);
|
||||
|
||||
/**
|
||||
* Get the scroll bar mode of a drop down list
|
||||
* @param ddlist pointer to a drop down list object
|
||||
* @return scrollbar mode from 'lv_page_sb_mode_t' enum
|
||||
*/
|
||||
static inline lv_sb_mode_t lv_dropdown_get_sb_mode(const lv_obj_t * ddlist)
|
||||
{
|
||||
return lv_page_get_sb_mode(ddlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the open/close animation time.
|
||||
* @param ddlist pointer to a drop down list
|
||||
@ -267,13 +252,6 @@ static inline uint16_t lv_dropdown_get_anim_time(const lv_obj_t * ddlist)
|
||||
return lv_page_get_anim_time(ddlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the alignment of the labels in a drop down list
|
||||
* @param ddlist pointer to a drop down list object
|
||||
* @return alignment of labels
|
||||
*/
|
||||
lv_label_align_t lv_dropdown_get_align(const lv_obj_t * ddlist);
|
||||
|
||||
/*=====================
|
||||
* Other functions
|
||||
*====================*/
|
||||
|
@ -118,8 +118,9 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->values[i] = copy_ext->values[i];
|
||||
}
|
||||
ext->label_count = copy_ext->label_count;
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
// lv_obj_refresh_style(new_gauge);
|
||||
lv_obj_refresh_style(new_gauge, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("gauge created");
|
||||
@ -358,7 +359,7 @@ static lv_design_res_t lv_gauge_design(lv_obj_t * gauge, const lv_area_t * clip_
|
||||
/*Add the strong lines*/
|
||||
uint16_t line_cnt_tmp = ext->lmeter.line_cnt;
|
||||
ext->lmeter.line_cnt = ext->label_count; /*Only to labels*/
|
||||
lv_linemeter_draw_scale(gauge, clip_area, LV_GAUGE_PART_STRONG);
|
||||
lv_linemeter_draw_scale(gauge, clip_area, LV_GAUGE_PART_MAJOR);
|
||||
ext->lmeter.line_cnt = line_cnt_tmp; /*Restore the parameters*/
|
||||
|
||||
lv_gauge_draw_needle(gauge, clip_area);
|
||||
@ -398,7 +399,7 @@ static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * param
|
||||
lv_mem_free(ext->values);
|
||||
ext->values = NULL;
|
||||
lv_obj_clean_style_list(gauge, LV_GAUGE_PART_NEEDLE);
|
||||
lv_obj_clean_style_list(gauge, LV_GAUGE_PART_STRONG);
|
||||
lv_obj_clean_style_list(gauge, LV_GAUGE_PART_MAJOR);
|
||||
}
|
||||
|
||||
return res;
|
||||
@ -420,7 +421,7 @@ static lv_style_list_t * lv_gauge_get_style(lv_obj_t * gauge, uint8_t part)
|
||||
case LV_GAUGE_PART_MAIN:
|
||||
style_dsc_p = &gauge->style_list;
|
||||
break;
|
||||
case LV_GAUGE_PART_STRONG:
|
||||
case LV_GAUGE_PART_MAJOR:
|
||||
style_dsc_p = &ext->style_strong;
|
||||
break;
|
||||
case LV_GAUGE_PART_NEEDLE:
|
||||
@ -442,7 +443,7 @@ static void lv_gauge_draw_labels(lv_obj_t * gauge, const lv_area_t * mask)
|
||||
char scale_txt[16];
|
||||
|
||||
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
|
||||
lv_style_int_t scale_width = lv_obj_get_style_scale_width(gauge, LV_GAUGE_PART_STRONG);
|
||||
lv_style_int_t scale_width = lv_obj_get_style_scale_width(gauge, LV_GAUGE_PART_MAJOR);
|
||||
lv_style_int_t left = lv_obj_get_style_pad_left(gauge, LV_GAUGE_PART_MAIN);
|
||||
lv_style_int_t right = lv_obj_get_style_pad_right(gauge, LV_GAUGE_PART_MAIN);
|
||||
lv_style_int_t top = lv_obj_get_style_pad_top(gauge, LV_GAUGE_PART_MAIN);
|
||||
@ -458,7 +459,7 @@ static void lv_gauge_draw_labels(lv_obj_t * gauge, const lv_area_t * mask)
|
||||
|
||||
lv_draw_label_dsc_t label_dsc;
|
||||
lv_draw_label_dsc_init(&label_dsc);
|
||||
lv_obj_init_draw_label_dsc(gauge, LV_GAUGE_PART_STRONG, &label_dsc);
|
||||
lv_obj_init_draw_label_dsc(gauge, LV_GAUGE_PART_MAJOR, &label_dsc);
|
||||
|
||||
uint8_t i;
|
||||
for(i = 0; i < label_num; i++) {
|
||||
@ -564,7 +565,6 @@ static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * clip_area)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
lv_draw_rect_dsc_t mid_dsc;
|
||||
lv_draw_rect_dsc_init(&mid_dsc);
|
||||
lv_obj_init_draw_rect_dsc(gauge, LV_GAUGE_PART_NEEDLE, &mid_dsc);
|
||||
|
@ -52,7 +52,7 @@ typedef struct {
|
||||
/*Styles*/
|
||||
enum {
|
||||
LV_GAUGE_PART_MAIN = LV_LINEMETER_PART_MAIN,
|
||||
LV_GAUGE_PART_STRONG = _LV_LINEMETER_PART_VIRTUAL_LAST,
|
||||
LV_GAUGE_PART_MAJOR = _LV_LINEMETER_PART_VIRTUAL_LAST,
|
||||
LV_GAUGE_PART_NEEDLE,
|
||||
_LV_GAUGE_PART_VIRTUAL_LAST = _LV_LINEMETER_PART_VIRTUAL_LAST,
|
||||
_LV_GAUGE_PART_REAL_LAST = _LV_LINEMETER_PART_REAL_LAST,
|
||||
@ -123,6 +123,16 @@ static inline void lv_gauge_set_critical_value(lv_obj_t * gauge, int16_t value)
|
||||
*/
|
||||
void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint8_t label_cnt);
|
||||
|
||||
/**
|
||||
* Set the set an offset for the gauge's angles to rotate it.
|
||||
* @param gauge pointer to a line meter object
|
||||
* @param angle angle offset (0..360), rotates clockwise
|
||||
*/
|
||||
static inline void lv_gauge_set_angle_offset(lv_obj_t * gauge, uint16_t angle)
|
||||
{
|
||||
lv_linemeter_set_angle_offset(gauge, angle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set an image to display as needle(s).
|
||||
* The needle image should be horizontal and pointing to the right (`--->`).
|
||||
@ -210,6 +220,16 @@ static inline uint16_t lv_gauge_get_scale_angle(const lv_obj_t * gauge)
|
||||
return lv_linemeter_get_scale_angle(gauge);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the offset for the gauge.
|
||||
* @param gauge pointer to a gauge object
|
||||
* @return angle offset (0..360)
|
||||
*/
|
||||
static inline uint16_t lv_gauge_get_angle_offset(lv_obj_t * gauge)
|
||||
{
|
||||
return lv_linemeter_get_angle_offset(gauge);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an image to display as needle(s).
|
||||
* @param gauge pointer to a gauge object
|
||||
|
@ -121,7 +121,7 @@ lv_obj_t * lv_img_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_img_set_src(img, copy_ext->src);
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(img);
|
||||
lv_obj_refresh_style(img, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("image created");
|
||||
|
@ -73,13 +73,12 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(imgbtn);
|
||||
|
||||
/*Initialize the allocated 'ext' */
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
memset((void *)ext->img_src, 0, sizeof(ext->img_src));
|
||||
#else
|
||||
memset((void *)ext->img_src_mid, 0, sizeof(ext->img_src_mid));
|
||||
#if LV_IMGBTN_TILED
|
||||
memset(ext->img_src_left, 0, sizeof(ext->img_src_left));
|
||||
memset(ext->img_src_mid, 0, sizeof(ext->img_src_mid));
|
||||
memset(ext->img_src_right, 0, sizeof(ext->img_src_right));
|
||||
#endif
|
||||
ext->tiled = 0;
|
||||
|
||||
ext->act_cf = LV_IMG_CF_UNKNOWN;
|
||||
|
||||
@ -94,15 +93,14 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
/*Copy an existing image button*/
|
||||
else {
|
||||
lv_imgbtn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
memcpy((void *)ext->img_src, copy_ext->img_src, sizeof(ext->img_src));
|
||||
#else
|
||||
memcpy((void *)ext->img_src_left, copy_ext->img_src_left, sizeof(ext->img_src_left));
|
||||
memcpy((void *)ext->img_src_mid, copy_ext->img_src_mid, sizeof(ext->img_src_mid));
|
||||
#if LV_IMGBTN_TILED
|
||||
memcpy((void *)ext->img_src_left, copy_ext->img_src_left, sizeof(ext->img_src_left));
|
||||
memcpy((void *)ext->img_src_right, copy_ext->img_src_right, sizeof(ext->img_src_right));
|
||||
#endif
|
||||
ext->tiled = copy_ext->tiled;
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(imgbtn);
|
||||
lv_obj_refresh_style(imgbtn, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("image button created");
|
||||
@ -114,7 +112,6 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
* Setter functions
|
||||
*====================*/
|
||||
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
/**
|
||||
* Set images for a state of the image button
|
||||
* @param imgbtn pointer to an image button object
|
||||
@ -127,12 +124,16 @@ void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src
|
||||
|
||||
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
|
||||
|
||||
ext->img_src[state] = src;
|
||||
|
||||
ext->img_src_mid[state] = src;
|
||||
#if LV_IMGBTN_TILED
|
||||
ext->img_src_left[state] = NULL;
|
||||
ext->img_src_right[state] = NULL;
|
||||
#endif
|
||||
ext->tiled = 0;
|
||||
refr_img(imgbtn);
|
||||
}
|
||||
|
||||
#else
|
||||
#if LV_IMGBTN_TILED
|
||||
/**
|
||||
* Set images for a state of the image button
|
||||
* @param imgbtn pointer to an image button object
|
||||
@ -144,12 +145,11 @@ void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src
|
||||
* @param src_right pointer to an image source for the right side of the button (a C array or path
|
||||
* to a file)
|
||||
*/
|
||||
void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src_left, const void * src_mid,
|
||||
void lv_imgbtn_set_src_tiled(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src_left, const void * src_mid,
|
||||
const void * src_right)
|
||||
{
|
||||
LV_ASSERT_OBJ(imgbtn, LV_OBJX_NAME);
|
||||
|
||||
|
||||
if(lv_img_src_get_type(src_left) == LV_IMG_SRC_SYMBOL ||
|
||||
lv_img_src_get_type(src_mid) == LV_IMG_SRC_SYMBOL ||
|
||||
lv_img_src_get_type(src_right) == LV_IMG_SRC_SYMBOL) {
|
||||
@ -163,6 +163,8 @@ void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src
|
||||
ext->img_src_mid[state] = src_mid;
|
||||
ext->img_src_right[state] = src_right;
|
||||
|
||||
ext->tiled = 1;
|
||||
|
||||
refr_img(imgbtn);
|
||||
}
|
||||
|
||||
@ -172,7 +174,6 @@ void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src
|
||||
* Getter functions
|
||||
*====================*/
|
||||
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
/**
|
||||
* Get the images in a given state
|
||||
* @param imgbtn pointer to an image button object
|
||||
@ -185,9 +186,9 @@ const void * lv_imgbtn_get_src(lv_obj_t * imgbtn, lv_btn_state_t state)
|
||||
|
||||
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
|
||||
|
||||
return ext->img_src[state];
|
||||
return ext->img_src_mid[state];
|
||||
}
|
||||
#else
|
||||
#if LV_IMGBTN_TILED
|
||||
|
||||
/**
|
||||
* Get the left image in a given state
|
||||
@ -276,97 +277,99 @@ static lv_design_res_t lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * cli
|
||||
/*Just draw an image*/
|
||||
lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn);
|
||||
lv_btn_state_t state = lv_imgbtn_get_state(imgbtn);
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
const void * src = ext->img_src[state];
|
||||
if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
|
||||
lv_draw_label_dsc_t label_dsc;
|
||||
lv_draw_label_dsc_init(&label_dsc);
|
||||
lv_obj_init_draw_label_dsc(imgbtn, LV_IMGBTN_PART_MAIN, &label_dsc);
|
||||
lv_draw_label(&imgbtn->coords, clip_area, &label_dsc, src, NULL);
|
||||
}
|
||||
else {
|
||||
|
||||
/*Simply draw the middle src if no tiled*/
|
||||
if(!ext->tiled) {
|
||||
const void * src = ext->img_src_mid[state];
|
||||
if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
|
||||
lv_draw_label_dsc_t label_dsc;
|
||||
lv_draw_label_dsc_init(&label_dsc);
|
||||
lv_obj_init_draw_label_dsc(imgbtn, LV_IMGBTN_PART_MAIN, &label_dsc);
|
||||
lv_draw_label(&imgbtn->coords, clip_area, &label_dsc, src, NULL);
|
||||
}
|
||||
else {
|
||||
lv_draw_img_dsc_t img_dsc;
|
||||
lv_draw_img_dsc_init(&img_dsc);
|
||||
lv_obj_init_draw_img_dsc(imgbtn, LV_IMGBTN_PART_MAIN, &img_dsc);
|
||||
lv_draw_img(&imgbtn->coords, clip_area, src, &img_dsc);
|
||||
}
|
||||
} else {
|
||||
#if LV_IMGBTN_TILED
|
||||
const void * src = ext->img_src_left[state];
|
||||
if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
|
||||
LV_LOG_WARN("lv_imgbtn_design: SYMBOLS are not supported in tiled mode")
|
||||
return LV_DESIGN_RES_OK;
|
||||
}
|
||||
|
||||
lv_coord_t w = lv_obj_get_style_transform_width(imgbtn, LV_OBJ_PART_MAIN);
|
||||
lv_coord_t h = lv_obj_get_style_transform_height(imgbtn, LV_OBJ_PART_MAIN);
|
||||
lv_area_t coords;
|
||||
lv_area_copy(&coords, &imgbtn->coords);
|
||||
coords.x1 -= w;
|
||||
coords.x2 += w;
|
||||
coords.y1 -= h;
|
||||
coords.y2 += h;
|
||||
|
||||
lv_draw_img_dsc_t img_dsc;
|
||||
lv_draw_img_dsc_init(&img_dsc);
|
||||
lv_obj_init_draw_img_dsc(imgbtn, LV_IMGBTN_PART_MAIN, &img_dsc);
|
||||
lv_draw_img(&imgbtn->coords, clip_area, src, &img_dsc);
|
||||
}
|
||||
#else
|
||||
const void * src = ext->img_src_left[state];
|
||||
if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
|
||||
LV_LOG_WARN("lv_imgbtn_design: SYMBOLS are not supported in tiled mode")
|
||||
return LV_DESIGN_RES_OK;
|
||||
}
|
||||
|
||||
lv_coord_t w = lv_obj_get_style_transform_width(imgbtn, LV_OBJ_PART_MAIN);
|
||||
lv_coord_t h = lv_obj_get_style_transform_height(imgbtn, LV_OBJ_PART_MAIN);
|
||||
lv_area_t coords;
|
||||
lv_area_copy(&coords, &imgbtn->coords);
|
||||
coords.x1 -= w;
|
||||
coords.x2 += w;
|
||||
coords.y1 -= h;
|
||||
coords.y2 += h;
|
||||
lv_img_header_t header;
|
||||
lv_area_t coords_part;
|
||||
lv_coord_t left_w = 0;
|
||||
lv_coord_t right_w = 0;
|
||||
|
||||
lv_draw_img_dsc_t img_dsc;
|
||||
lv_draw_img_dsc_init(&img_dsc);
|
||||
lv_obj_init_draw_img_dsc(imgbtn, LV_IMGBTN_PART_MAIN, &img_dsc);
|
||||
|
||||
lv_img_header_t header;
|
||||
lv_area_t coords_part;
|
||||
lv_coord_t left_w = 0;
|
||||
lv_coord_t right_w = 0;
|
||||
|
||||
if(src) {
|
||||
lv_img_decoder_get_info(src, &header);
|
||||
left_w = header.w;
|
||||
coords_part.x1 = coords.x1;
|
||||
coords_part.y1 = coords.y1;
|
||||
coords_part.x2 = coords.x1 + header.w - 1;
|
||||
coords_part.y2 = coords.y1 + header.h - 1;
|
||||
lv_draw_img(&coords_part, clip_area, src, &img_dsc);
|
||||
}
|
||||
|
||||
src = ext->img_src_right[state];
|
||||
if(src) {
|
||||
lv_img_decoder_get_info(src, &header);
|
||||
right_w = header.w;
|
||||
coords_part.x1 = coords.x2 - header.w + 1;
|
||||
coords_part.y1 = coords.y1;
|
||||
coords_part.x2 = coords.x2;
|
||||
coords_part.y2 = coords.y1 + header.h - 1;
|
||||
lv_draw_img(&coords_part, clip_area, src, &img_dsc);
|
||||
}
|
||||
|
||||
src = ext->img_src_mid[state];
|
||||
if(src) {
|
||||
lv_area_t clip_center_area;
|
||||
clip_center_area.x1 = coords.x1 + left_w;
|
||||
clip_center_area.x2 = coords.x2 - right_w;
|
||||
clip_center_area.y1 = coords.y1;
|
||||
clip_center_area.y2 = coords.y2;
|
||||
|
||||
bool comm_res;
|
||||
comm_res = lv_area_intersect(&clip_center_area, &clip_center_area, clip_area);
|
||||
if(comm_res) {
|
||||
lv_coord_t obj_w = lv_obj_get_width(imgbtn);
|
||||
lv_coord_t i;
|
||||
if(src) {
|
||||
lv_img_decoder_get_info(src, &header);
|
||||
|
||||
coords_part.x1 = coords.x1 + left_w;
|
||||
left_w = header.w;
|
||||
coords_part.x1 = coords.x1;
|
||||
coords_part.y1 = coords.y1;
|
||||
coords_part.x2 = coords_part.x1 + header.w - 1;
|
||||
coords_part.y2 = coords_part.y1 + header.h - 1;
|
||||
coords_part.x2 = coords.x1 + header.w - 1;
|
||||
coords_part.y2 = coords.y1 + header.h - 1;
|
||||
lv_draw_img(&coords_part, clip_area, src, &img_dsc);
|
||||
}
|
||||
|
||||
for(i = 0; i < obj_w - right_w - left_w; i += header.w) {
|
||||
src = ext->img_src_right[state];
|
||||
if(src) {
|
||||
lv_img_decoder_get_info(src, &header);
|
||||
right_w = header.w;
|
||||
coords_part.x1 = coords.x2 - header.w + 1;
|
||||
coords_part.y1 = coords.y1;
|
||||
coords_part.x2 = coords.x2;
|
||||
coords_part.y2 = coords.y1 + header.h - 1;
|
||||
lv_draw_img(&coords_part, clip_area, src, &img_dsc);
|
||||
}
|
||||
|
||||
lv_draw_img(&coords_part, &clip_center_area, src, &img_dsc);
|
||||
coords_part.x1 = coords_part.x2 + 1;
|
||||
coords_part.x2 += header.w;
|
||||
src = ext->img_src_mid[state];
|
||||
if(src) {
|
||||
lv_area_t clip_center_area;
|
||||
clip_center_area.x1 = coords.x1 + left_w;
|
||||
clip_center_area.x2 = coords.x2 - right_w;
|
||||
clip_center_area.y1 = coords.y1;
|
||||
clip_center_area.y2 = coords.y2;
|
||||
|
||||
bool comm_res;
|
||||
comm_res = lv_area_intersect(&clip_center_area, &clip_center_area, clip_area);
|
||||
if(comm_res) {
|
||||
lv_coord_t obj_w = lv_obj_get_width(imgbtn);
|
||||
lv_coord_t i;
|
||||
lv_img_decoder_get_info(src, &header);
|
||||
|
||||
coords_part.x1 = coords.x1 + left_w;
|
||||
coords_part.y1 = coords.y1;
|
||||
coords_part.x2 = coords_part.x1 + header.w - 1;
|
||||
coords_part.y2 = coords_part.y1 + header.h - 1;
|
||||
|
||||
for(i = 0; i < obj_w - right_w - left_w; i += header.w) {
|
||||
|
||||
lv_draw_img(&coords_part, &clip_center_area, src, &img_dsc);
|
||||
coords_part.x1 = coords_part.x2 + 1;
|
||||
coords_part.x2 += header.w;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
/*Post draw when the children are drawn*/
|
||||
else if(mode == LV_DESIGN_DRAW_POST) {
|
||||
@ -409,11 +412,7 @@ static void refr_img(lv_obj_t * imgbtn)
|
||||
lv_btn_state_t state = lv_imgbtn_get_state(imgbtn);
|
||||
lv_img_header_t header;
|
||||
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
const void * src = ext->img_src[state];
|
||||
#else
|
||||
const void * src = ext->img_src_mid[state];
|
||||
#endif
|
||||
|
||||
lv_res_t info_res = LV_RES_OK;
|
||||
if(lv_img_src_get_type(src) == LV_IMG_SRC_SYMBOL) {
|
||||
@ -429,11 +428,8 @@ static void refr_img(lv_obj_t * imgbtn)
|
||||
|
||||
if(info_res == LV_RES_OK) {
|
||||
ext->act_cf = header.cf;
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
lv_obj_set_size(imgbtn, header.w, header.h);
|
||||
#else
|
||||
lv_obj_set_height(imgbtn, header.h);
|
||||
#endif
|
||||
if(ext->tiled) lv_obj_set_height(imgbtn, header.h); /*Keep the suer defined width*/
|
||||
else lv_obj_set_size(imgbtn, header.w, header.h);
|
||||
}
|
||||
else {
|
||||
ext->act_cf = LV_IMG_CF_UNKNOWN;
|
||||
|
@ -37,14 +37,13 @@ extern "C" {
|
||||
typedef struct {
|
||||
lv_btn_ext_t btn; /*Ext. of ancestor*/
|
||||
/*New data for this type */
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
const void * img_src[_LV_BTN_STATE_LAST]; /*Store images to each state*/
|
||||
#else
|
||||
const void * img_src_left[_LV_BTN_STATE_LAST]; /*Store left side images to each state*/
|
||||
const void * img_src_mid[_LV_BTN_STATE_LAST]; /*Store center images to each state*/
|
||||
#if LV_IMGBTN_TILED
|
||||
const void * img_src_left[_LV_BTN_STATE_LAST]; /*Store left side images to each state*/
|
||||
const void * img_src_right[_LV_BTN_STATE_LAST]; /*Store right side images to each state*/
|
||||
#endif
|
||||
lv_img_cf_t act_cf; /*Color format of the currently active image*/
|
||||
uint8_t tiled :1; /*1: the middle src will be repeated to fill the user defined width*/
|
||||
} lv_imgbtn_ext_t;
|
||||
|
||||
/*Parts of the image button*/
|
||||
@ -74,7 +73,6 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy);
|
||||
* Setter functions
|
||||
*====================*/
|
||||
|
||||
#if LV_IMGBTN_TILED == 0
|
||||
/**
|
||||
* Set images for a state of the image button
|
||||
* @param imgbtn pointer to an image button object
|
||||
@ -82,7 +80,8 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy);
|
||||
* @param src pointer to an image source (a C array or path to a file)
|
||||
*/
|
||||
void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src);
|
||||
#else
|
||||
|
||||
#if LV_IMGBTN_TILED
|
||||
/**
|
||||
* Set images for a state of the image button
|
||||
* @param imgbtn pointer to an image button object
|
||||
@ -94,7 +93,7 @@ void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src
|
||||
* @param src_right pointer to an image source for the right side of the button (a C array or path
|
||||
* to a file)
|
||||
*/
|
||||
void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src_left, const void * src_mid,
|
||||
void lv_imgbtn_set_src_tiled(lv_obj_t * imgbtn, lv_btn_state_t state, const void * src_left, const void * src_mid,
|
||||
const void * src_right);
|
||||
|
||||
#endif
|
||||
|
@ -134,7 +134,6 @@ lv_obj_t * lv_keyboard_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
}
|
||||
|
||||
/*Initialize the allocated 'ext' */
|
||||
|
||||
ext->ta = NULL;
|
||||
ext->mode = LV_KEYBOARD_MODE_TEXT_LOWER;
|
||||
ext->cursor_mng = 0;
|
||||
@ -187,7 +186,7 @@ lv_obj_t * lv_keyboard_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
* @param kb pointer to a Keyboard object
|
||||
* @param ta pointer to a Text Area object to write there
|
||||
*/
|
||||
void lv_keyboard_set_ta(lv_obj_t * kb, lv_obj_t * ta)
|
||||
void lv_keyboard_set_textarea(lv_obj_t * kb, lv_obj_t * ta)
|
||||
{
|
||||
LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
|
||||
if(ta) LV_ASSERT_OBJ(ta, "lv_ta");
|
||||
@ -286,7 +285,7 @@ void lv_keyboard_set_ctrl_map(lv_obj_t * kb, lv_keyboard_mode_t mode, const lv_b
|
||||
* @param kb pointer to a Keyboard object
|
||||
* @return pointer to the assigned Text Area object
|
||||
*/
|
||||
lv_obj_t * lv_keyboard_get_ta(const lv_obj_t * kb)
|
||||
lv_obj_t * lv_keyboard_get_textarea(const lv_obj_t * kb)
|
||||
{
|
||||
LV_ASSERT_OBJ(kb, LV_OBJX_NAME);
|
||||
|
||||
@ -371,7 +370,7 @@ void lv_keyboard_def_event_cb(lv_obj_t * kb, lv_event_t event)
|
||||
if(res != LV_RES_OK) return;
|
||||
}
|
||||
else {
|
||||
lv_keyboard_set_ta(kb, NULL); /*De-assign the text area to hide it cursor if needed*/
|
||||
lv_keyboard_set_textarea(kb, NULL); /*De-assign the text area to hide it cursor if needed*/
|
||||
lv_obj_del(kb);
|
||||
return;
|
||||
}
|
||||
@ -383,7 +382,7 @@ void lv_keyboard_def_event_cb(lv_obj_t * kb, lv_event_t event)
|
||||
if(res != LV_RES_OK) return;
|
||||
}
|
||||
else {
|
||||
lv_keyboard_set_ta(kb, NULL); /*De-assign the text area to hide it cursor if needed*/
|
||||
lv_keyboard_set_textarea(kb, NULL); /*De-assign the text area to hide it cursor if needed*/
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ lv_obj_t * lv_keyboard_create(lv_obj_t * par, const lv_obj_t * copy);
|
||||
* @param kb pointer to a Keyboard object
|
||||
* @param ta pointer to a Text Area object to write there
|
||||
*/
|
||||
void lv_keyboard_set_ta(lv_obj_t * kb, lv_obj_t * ta);
|
||||
void lv_keyboard_set_textarea(lv_obj_t * kb, lv_obj_t * ta);
|
||||
|
||||
/**
|
||||
* Set a new a mode (text or number map)
|
||||
@ -128,7 +128,7 @@ void lv_keyboard_set_ctrl_map(lv_obj_t * kb, lv_keyboard_mode_t mode, const lv_b
|
||||
* @param kb pointer to a Keyboard object
|
||||
* @return pointer to the assigned Text Area object
|
||||
*/
|
||||
lv_obj_t * lv_keyboard_get_ta(const lv_obj_t * kb);
|
||||
lv_obj_t * lv_keyboard_get_textarea(const lv_obj_t * kb);
|
||||
|
||||
/**
|
||||
* Set a new a mode (text or number map)
|
||||
|
@ -161,7 +161,7 @@ lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->dot_end = copy_ext->dot_end;
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(new_label);
|
||||
lv_obj_refresh_style(new_label, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("label created");
|
||||
@ -1153,7 +1153,6 @@ static lv_res_t lv_label_signal(lv_obj_t * label, lv_signal_t sign, void * param
|
||||
else if(sign == LV_SIGNAL_STYLE_CHG) {
|
||||
/*Revert dots for proper refresh*/
|
||||
lv_label_revert_dots(label);
|
||||
|
||||
lv_label_refr_text(label);
|
||||
}
|
||||
else if(sign == LV_SIGNAL_COORD_CHG) {
|
||||
|
@ -20,8 +20,6 @@
|
||||
|
||||
#define LV_LED_WIDTH_DEF (LV_DPI / 3)
|
||||
#define LV_LED_HEIGHT_DEF (LV_DPI / 3)
|
||||
#define LV_LED_BRIGHT_OFF 60
|
||||
#define LV_LED_BRIGHT_ON 255
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
@ -73,7 +71,7 @@ lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ext->bright = LV_LED_BRIGHT_ON;
|
||||
ext->bright = LV_LED_BRIGHT_MAX;
|
||||
|
||||
lv_obj_set_signal_cb(led, lv_led_signal);
|
||||
lv_obj_set_design_cb(led, lv_led_design);
|
||||
@ -90,7 +88,7 @@ lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->bright = copy_ext->bright;
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(led);
|
||||
lv_obj_refresh_style(led, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("led created");
|
||||
@ -105,7 +103,7 @@ lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
/**
|
||||
* Set the brightness of a LED object
|
||||
* @param led pointer to a LED object
|
||||
* @param bright 0 (max. dark) ... 255 (max. light)
|
||||
* @param bright LV_LED_BRIGHT_MIN (max. dark) ... LV_LED_BRIGHT_MAX (max. light)
|
||||
*/
|
||||
void lv_led_set_bright(lv_obj_t * led, uint8_t bright)
|
||||
{
|
||||
@ -115,6 +113,9 @@ void lv_led_set_bright(lv_obj_t * led, uint8_t bright)
|
||||
lv_led_ext_t * ext = lv_obj_get_ext_attr(led);
|
||||
if(ext->bright == bright) return;
|
||||
|
||||
if(bright <= LV_LED_BRIGHT_MIN) bright = LV_LED_BRIGHT_MIN;
|
||||
if(bright >= LV_LED_BRIGHT_MAX) bright = LV_LED_BRIGHT_MAX;
|
||||
|
||||
ext->bright = bright;
|
||||
|
||||
/*Invalidate the object there fore it will be redrawn*/
|
||||
@ -129,7 +130,7 @@ void lv_led_on(lv_obj_t * led)
|
||||
{
|
||||
LV_ASSERT_OBJ(led, LV_OBJX_NAME);
|
||||
|
||||
lv_led_set_bright(led, LV_LED_BRIGHT_ON);
|
||||
lv_led_set_bright(led, LV_LED_BRIGHT_MAX);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -140,7 +141,7 @@ void lv_led_off(lv_obj_t * led)
|
||||
{
|
||||
LV_ASSERT_OBJ(led, LV_OBJX_NAME);
|
||||
|
||||
lv_led_set_bright(led, LV_LED_BRIGHT_OFF);
|
||||
lv_led_set_bright(led, LV_LED_BRIGHT_MIN);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -152,7 +153,7 @@ void lv_led_toggle(lv_obj_t * led)
|
||||
LV_ASSERT_OBJ(led, LV_OBJX_NAME);
|
||||
|
||||
uint8_t bright = lv_led_get_bright(led);
|
||||
if(bright > (LV_LED_BRIGHT_OFF + LV_LED_BRIGHT_ON) >> 1)
|
||||
if(bright > (LV_LED_BRIGHT_MIN + LV_LED_BRIGHT_MAX) >> 1)
|
||||
lv_led_off(led);
|
||||
else
|
||||
lv_led_on(led);
|
||||
@ -211,8 +212,8 @@ static lv_design_res_t lv_led_design(lv_obj_t * led, const lv_area_t * clip_area
|
||||
|
||||
/*Set the current shadow width according to brightness proportionally between LV_LED_BRIGHT_OFF
|
||||
* and LV_LED_BRIGHT_ON*/
|
||||
rect_dsc.shadow_width = ((ext->bright - LV_LED_BRIGHT_OFF) * rect_dsc.shadow_width) /
|
||||
(LV_LED_BRIGHT_ON - LV_LED_BRIGHT_OFF);
|
||||
rect_dsc.shadow_width = ((ext->bright - LV_LED_BRIGHT_MIN) * rect_dsc.shadow_width) /
|
||||
(LV_LED_BRIGHT_MAX - LV_LED_BRIGHT_MIN);
|
||||
|
||||
lv_draw_rect(&led->coords, clip_area, &rect_dsc);
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy);
|
||||
/**
|
||||
* Set the brightness of a LED object
|
||||
* @param led pointer to a LED object
|
||||
* @param bright 0 (max. dark) ... 255 (max. light)
|
||||
* @param bright LV_LED_BRIGHT_MIN (max. dark) ... LV_LED_BRIGHT_MAX (max. light)
|
||||
*/
|
||||
void lv_led_set_bright(lv_obj_t * led, uint8_t bright);
|
||||
|
||||
|
@ -95,7 +95,7 @@ lv_obj_t * lv_line_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_line_set_points(line, copy_ext->point_array, copy_ext->point_num);
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(line);
|
||||
lv_obj_refresh_style(line, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("line created");
|
||||
|
@ -255,7 +255,7 @@ uint16_t lv_linemeter_get_scale_angle(const lv_obj_t * lmeter)
|
||||
}
|
||||
|
||||
/**
|
||||
* get the set an offset for the line meter.
|
||||
* Get the offset for the line meter.
|
||||
* @param lmeter pointer to a line meter object
|
||||
* @return angle offset (0..360)
|
||||
*/
|
||||
|
@ -133,7 +133,7 @@ uint16_t lv_linemeter_get_line_count(const lv_obj_t * lmeter);
|
||||
uint16_t lv_linemeter_get_scale_angle(const lv_obj_t * lmeter);
|
||||
|
||||
/**
|
||||
* get the set an offset for the line meter.
|
||||
* Get the offset for the line meter.
|
||||
* @param lmeter pointer to a line meter object
|
||||
* @return angle offset (0..360)
|
||||
*/
|
||||
|
@ -85,7 +85,7 @@ lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
}
|
||||
|
||||
#if LV_USE_GROUP
|
||||
ext->last_sel_btn = NULL;
|
||||
ext->last_sel_btn = NULL;
|
||||
#endif
|
||||
ext->act_sel_btn = NULL;
|
||||
|
||||
@ -97,7 +97,7 @@ lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_page_set_scrl_fit2(list, LV_FIT_PARENT, LV_FIT_TIGHT);
|
||||
lv_obj_set_size(list, 2 * LV_DPI, 3 * LV_DPI);
|
||||
lv_page_set_scrl_layout(list, LV_LIST_LAYOUT_DEF);
|
||||
lv_list_set_sb_mode(list, LV_SB_MODE_DRAG);
|
||||
lv_list_set_sb_mode(list, LV_SCRLBAR_MODE_DRAG);
|
||||
|
||||
lv_theme_apply(list, LV_THEME_LIST);
|
||||
|
||||
@ -115,7 +115,7 @@ lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
}
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(list);
|
||||
lv_obj_refresh_style(list, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("list created");
|
||||
|
@ -122,9 +122,9 @@ void lv_list_focus_btn(lv_obj_t * list, lv_obj_t * btn);
|
||||
* @param list pointer to a list object
|
||||
* @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
|
||||
*/
|
||||
static inline void lv_list_set_sb_mode(lv_obj_t * list, lv_sb_mode_t mode)
|
||||
static inline void lv_list_set_sb_mode(lv_obj_t * list, lv_scrlbar_mode_t mode)
|
||||
{
|
||||
lv_page_set_sb_mode(list, mode);
|
||||
lv_page_set_scrlbar_mode(list, mode);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -241,7 +241,7 @@ lv_layout_t lv_list_get_layout(lv_obj_t * list);
|
||||
* @param list pointer to a list object
|
||||
* @return scrollbar mode from 'lv_page_sb_mode_t' enum
|
||||
*/
|
||||
static inline lv_sb_mode_t lv_list_get_sb_mode(const lv_obj_t * list)
|
||||
static inline lv_scrlbar_mode_t lv_list_get_sb_mode(const lv_obj_t * list)
|
||||
{
|
||||
return lv_page_get_sb_mode(list);
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ lv_obj_t * lv_msgbox_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
if(copy_ext->btnm) ext->btnm = lv_btnmatrix_create(mbox, copy_ext->btnm);
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(mbox);
|
||||
lv_obj_refresh_style(mbox, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("message box created");
|
||||
@ -408,9 +408,12 @@ static lv_res_t lv_msgbox_signal(lv_obj_t * mbox, lv_signal_t sign, void * param
|
||||
else if(sign == LV_SIGNAL_GET_STATE_DSC) {
|
||||
lv_get_state_info_t * info = param;
|
||||
lv_msgbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
|
||||
if(ext->btnm && info->part == LV_MSGBOX_PART_BTN_BG) info->result = lv_obj_get_state(ext->btnm, LV_BTNMATRIX_PART_BG);
|
||||
else if(ext->btnm &&
|
||||
info->part == LV_MSGBOX_PART_BTN) info->result = lv_obj_get_state(ext->btnm, LV_BTNMATRIX_PART_BTN);
|
||||
if(ext->btnm && info->part == LV_MSGBOX_PART_BTN_BG) {
|
||||
info->result = lv_obj_get_state(ext->btnm, LV_BTNMATRIX_PART_BG);
|
||||
}
|
||||
else if(ext->btnm && info->part == LV_MSGBOX_PART_BTN) {
|
||||
info->result = lv_obj_get_state(ext->btnm, LV_BTNMATRIX_PART_BTN);
|
||||
}
|
||||
return LV_RES_OK;
|
||||
}
|
||||
|
||||
@ -499,7 +502,7 @@ static void mbox_realign(lv_obj_t * mbox)
|
||||
{
|
||||
lv_msgbox_ext_t * ext = lv_obj_get_ext_attr(mbox);
|
||||
|
||||
lv_coord_t w = lv_obj_get_width_fit(mbox);
|
||||
lv_coord_t w = lv_obj_get_width_fit(mbox);
|
||||
|
||||
if(ext->text) {
|
||||
lv_obj_set_width(ext->text, w);
|
||||
@ -508,12 +511,21 @@ static void mbox_realign(lv_obj_t * mbox)
|
||||
if(ext->btnm) {
|
||||
lv_style_int_t bg_top = lv_obj_get_style_pad_top(mbox, LV_MSGBOX_PART_BTN_BG);
|
||||
lv_style_int_t bg_bottom = lv_obj_get_style_pad_bottom(mbox, LV_MSGBOX_PART_BTN_BG);
|
||||
lv_style_int_t bg_inner = lv_obj_get_style_pad_inner(mbox, LV_MSGBOX_PART_BTN_BG);
|
||||
lv_style_int_t btn_top = lv_obj_get_style_pad_top(mbox, LV_MSGBOX_PART_BTN);
|
||||
lv_style_int_t btn_bottom = lv_obj_get_style_pad_bottom(mbox, LV_MSGBOX_PART_BTN);
|
||||
const lv_font_t * font = lv_obj_get_style_text_font(mbox, LV_MSGBOX_PART_BTN);
|
||||
|
||||
uint16_t btnm_lines = 1;
|
||||
const char ** btnm_map = lv_btnmatrix_get_map_array(ext->btnm);
|
||||
uint16_t i;
|
||||
for(i = 0; btnm_map[i][0] != '\0'; i++) {
|
||||
if(btnm_map[i][0] == '\n') btnm_lines++;
|
||||
}
|
||||
|
||||
lv_coord_t font_h = lv_font_get_line_height(font);
|
||||
lv_obj_set_size(ext->btnm, w, font_h + btn_top + btn_bottom + bg_top + bg_bottom);
|
||||
lv_coord_t btn_h = font_h + btn_top + btn_bottom;
|
||||
lv_obj_set_size(ext->btnm, w, btn_h * btnm_lines + bg_inner * (btnm_lines - 1) + bg_top + bg_bottom);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,7 +86,7 @@ lv_obj_t * lv_objmask_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
/* lv_objmask_ext_t * copy_ext = lv_obj_get_ext_attr(copy); */
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(objmask);
|
||||
lv_obj_refresh_style(objmask, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("object mask created");
|
||||
@ -115,9 +115,11 @@ lv_objmask_mask_t * lv_objmask_add_mask(lv_obj_t * objmask, void * param)
|
||||
uint16_t param_size = get_param_size(dsc->type);
|
||||
|
||||
lv_objmask_mask_t * m = lv_ll_ins_head(&ext->mask_ll);
|
||||
LV_ASSERT_MEM(m);
|
||||
if(m == NULL) return NULL;
|
||||
m->param = lv_mem_alloc(param_size);
|
||||
LV_ASSERT_MEM(m->param);
|
||||
if(m == NULL) return NULL;
|
||||
if(m->param == NULL) return NULL;
|
||||
|
||||
memcpy(m->param, param, param_size);
|
||||
|
||||
|
@ -99,7 +99,7 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_style_list_init(&ext->scrlbar.style);
|
||||
ext->scrlbar.hor_draw = 0;
|
||||
ext->scrlbar.ver_draw = 0;
|
||||
ext->scrlbar.mode = LV_SB_MODE_AUTO;
|
||||
ext->scrlbar.mode = LV_SCRLBAR_MODE_AUTO;
|
||||
#if LV_USE_ANIMATION
|
||||
lv_style_list_init(&ext->edge_flash.style);
|
||||
ext->edge_flash.enabled = 0;
|
||||
@ -129,7 +129,7 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_obj_set_signal_cb(page, lv_page_signal);
|
||||
lv_obj_set_design_cb(page, lv_page_design);
|
||||
|
||||
lv_page_set_sb_mode(page, ext->scrlbar.mode);
|
||||
lv_page_set_scrlbar_mode(page, ext->scrlbar.mode);
|
||||
|
||||
lv_theme_apply(page, LV_THEME_PAGE);
|
||||
|
||||
@ -148,7 +148,7 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
// lv_page_set_style(new_page, LV_PAGE_STYLE_SCRL, lv_page_get_style(copy, LV_PAGE_STYLE_SCRL));
|
||||
// lv_page_set_style(new_page, LV_PAGE_STYLE_SCRLBAR, lv_page_get_style(copy, LV_PAGE_STYLE_SCRLBAR));
|
||||
|
||||
lv_page_set_sb_mode(page, copy_ext->scrlbar.mode);
|
||||
lv_page_set_scrlbar_mode(page, copy_ext->scrlbar.mode);
|
||||
}
|
||||
|
||||
|
||||
@ -180,19 +180,19 @@ void lv_page_clean(lv_obj_t * page)
|
||||
* @param page pointer to a page object
|
||||
* @param sb_mode the new mode from 'lv_page_sb.mode_t' enum
|
||||
*/
|
||||
void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode)
|
||||
void lv_page_set_scrlbar_mode(lv_obj_t * page, lv_scrlbar_mode_t sb_mode)
|
||||
{
|
||||
LV_ASSERT_OBJ(page, LV_OBJX_NAME);
|
||||
|
||||
lv_page_ext_t * ext = lv_obj_get_ext_attr(page);
|
||||
if(ext->scrlbar.mode == sb_mode) return;
|
||||
|
||||
if(sb_mode == LV_SB_MODE_HIDE)
|
||||
ext->scrlbar.mode |= LV_SB_MODE_HIDE; /*Set the hidden flag*/
|
||||
else if(sb_mode == LV_SB_MODE_UNHIDE)
|
||||
ext->scrlbar.mode &= (~LV_SB_MODE_HIDE); /*Clear the hidden flag*/
|
||||
if(sb_mode == LV_SCRLBAR_MODE_HIDE)
|
||||
ext->scrlbar.mode |= LV_SCRLBAR_MODE_HIDE; /*Set the hidden flag*/
|
||||
else if(sb_mode == LV_SCRLBAR_MODE_UNHIDE)
|
||||
ext->scrlbar.mode &= (~LV_SCRLBAR_MODE_HIDE); /*Clear the hidden flag*/
|
||||
else {
|
||||
if(ext->scrlbar.mode & LV_SB_MODE_HIDE) sb_mode |= LV_SB_MODE_HIDE;
|
||||
if(ext->scrlbar.mode & LV_SCRLBAR_MODE_HIDE) sb_mode |= LV_SCRLBAR_MODE_HIDE;
|
||||
ext->scrlbar.mode = sb_mode;
|
||||
}
|
||||
|
||||
@ -299,7 +299,7 @@ uint16_t lv_page_get_anim_time(const lv_obj_t * page)
|
||||
* @param page pointer to a page object
|
||||
* @return the mode from 'lv_page_sb.mode_t' enum
|
||||
*/
|
||||
lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page)
|
||||
lv_scrlbar_mode_t lv_page_get_sb_mode(const lv_obj_t * page)
|
||||
{
|
||||
LV_ASSERT_OBJ(page, LV_OBJX_NAME);
|
||||
|
||||
@ -659,11 +659,11 @@ static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_ar
|
||||
lv_draw_rect_dsc_t rect_dsc;
|
||||
lv_draw_rect_dsc_init(&rect_dsc);
|
||||
lv_obj_init_draw_rect_dsc(page, LV_PAGE_PART_SCRLBAR, &rect_dsc);
|
||||
if(ext->scrlbar.hor_draw && (ext->scrlbar.mode & LV_SB_MODE_HIDE) == 0) {
|
||||
if(ext->scrlbar.hor_draw && (ext->scrlbar.mode & LV_SCRLBAR_MODE_HIDE) == 0) {
|
||||
lv_draw_rect(&sb_hor_area, clip_area, &rect_dsc);
|
||||
}
|
||||
|
||||
if(ext->scrlbar.ver_draw && (ext->scrlbar.mode & LV_SB_MODE_HIDE) == 0) {
|
||||
if(ext->scrlbar.ver_draw && (ext->scrlbar.mode & LV_SCRLBAR_MODE_HIDE) == 0) {
|
||||
lv_draw_rect(&sb_ver_area, clip_area, &rect_dsc);
|
||||
}
|
||||
}
|
||||
@ -986,6 +986,13 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi
|
||||
|
||||
lv_page_sb_refresh(page);
|
||||
}
|
||||
else if(sign == LV_SIGNAL_DRAG_BEGIN) {
|
||||
if(page_ext->scrlbar.mode == LV_SCRLBAR_MODE_DRAG) {
|
||||
page_ext->scrlbar.ver_draw = 1;
|
||||
page_ext->scrlbar.hor_draw = 1;
|
||||
lv_obj_invalidate(page);
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_DRAG_END) {
|
||||
|
||||
/*Scroll propagation is finished on drag end*/
|
||||
@ -1003,12 +1010,19 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi
|
||||
lv_obj_set_drag_parent(scroller_page, false);
|
||||
lv_obj_set_drag_parent(lv_page_get_scrl(scroller_page), false);
|
||||
|
||||
lv_page_ext_t * scroller_page_ext = lv_obj_get_ext_attr(scroller_page);
|
||||
/*Hide scrollbars if required*/
|
||||
if(scroller_page_ext->scrlbar.mode == LV_SCRLBAR_MODE_DRAG) {
|
||||
scroller_page_ext->scrlbar.hor_draw = 0;
|
||||
scroller_page_ext->scrlbar.ver_draw = 0;
|
||||
lv_obj_invalidate(scroller_page);
|
||||
}
|
||||
scroller_ext = lv_obj_get_ext_attr(scroller_page);
|
||||
}
|
||||
}
|
||||
|
||||
/*Hide scrollbars if required*/
|
||||
if(page_ext->scrlbar.mode == LV_SB_MODE_DRAG) {
|
||||
if(page_ext->scrlbar.mode == LV_SCRLBAR_MODE_DRAG) {
|
||||
lv_area_t sb_area_tmp;
|
||||
if(page_ext->scrlbar.hor_draw) {
|
||||
lv_area_copy(&sb_area_tmp, &page_ext->scrlbar.hor_area);
|
||||
@ -1031,10 +1045,17 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_FOCUS) {
|
||||
res = lv_signal_send(page, LV_SIGNAL_FOCUS, NULL);
|
||||
if(res != LV_RES_OK) return res;
|
||||
res = lv_event_send(page, LV_EVENT_FOCUSED, NULL);
|
||||
if(res != LV_RES_OK) return res;
|
||||
#if LV_USE_GROUP
|
||||
if(lv_obj_get_group(page)) {
|
||||
lv_group_focus_obj(page);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
res = lv_signal_send(page, LV_SIGNAL_FOCUS, NULL);
|
||||
if(res != LV_RES_OK) return res;
|
||||
res = lv_event_send(page, LV_EVENT_FOCUSED, NULL);
|
||||
if(res != LV_RES_OK) return res;
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_DEFOCUS) {
|
||||
res = lv_signal_send(page, LV_SIGNAL_DEFOCUS, NULL);
|
||||
@ -1136,9 +1157,9 @@ static void lv_page_sb_refresh(lv_obj_t * page)
|
||||
lv_coord_t sb_hor_pad = LV_MATH_MAX(sb_width, sb_right);
|
||||
lv_coord_t sb_ver_pad = LV_MATH_MAX(sb_width, sb_bottom);
|
||||
|
||||
if(ext->scrlbar.mode == LV_SB_MODE_OFF) return;
|
||||
if(ext->scrlbar.mode == LV_SCRLBAR_MODE_OFF) return;
|
||||
|
||||
if(ext->scrlbar.mode == LV_SB_MODE_ON) {
|
||||
if(ext->scrlbar.mode == LV_SCRLBAR_MODE_ON) {
|
||||
ext->scrlbar.hor_draw = 1;
|
||||
ext->scrlbar.ver_draw = 1;
|
||||
}
|
||||
@ -1162,7 +1183,7 @@ static void lv_page_sb_refresh(lv_obj_t * page)
|
||||
lv_obj_invalidate_area(page, &sb_area_tmp);
|
||||
}
|
||||
|
||||
if(ext->scrlbar.mode == LV_SB_MODE_DRAG && lv_indev_is_dragging(lv_indev_get_act()) == false) {
|
||||
if(ext->scrlbar.mode == LV_SCRLBAR_MODE_DRAG && lv_indev_is_dragging(lv_indev_get_act()) == false) {
|
||||
ext->scrlbar.hor_draw = 0;
|
||||
ext->scrlbar.ver_draw = 0;
|
||||
return;
|
||||
@ -1173,7 +1194,7 @@ static void lv_page_sb_refresh(lv_obj_t * page)
|
||||
lv_area_set_width(&ext->scrlbar.hor_area, obj_w - 2 * sb_hor_pad);
|
||||
lv_area_set_pos(&ext->scrlbar.hor_area, sb_hor_pad,
|
||||
obj_h - sb_width - sb_bottom);
|
||||
if(ext->scrlbar.mode == LV_SB_MODE_AUTO || ext->scrlbar.mode == LV_SB_MODE_DRAG) ext->scrlbar.hor_draw = 0;
|
||||
if(ext->scrlbar.mode == LV_SCRLBAR_MODE_AUTO || ext->scrlbar.mode == LV_SCRLBAR_MODE_DRAG) ext->scrlbar.hor_draw = 0;
|
||||
}
|
||||
/*Smaller horizontal scrollbar*/
|
||||
else {
|
||||
@ -1188,7 +1209,7 @@ static void lv_page_sb_refresh(lv_obj_t * page)
|
||||
(scrl_w + bg_left + bg_right - obj_w),
|
||||
obj_h - sb_width - sb_bottom);
|
||||
|
||||
if(ext->scrlbar.mode == LV_SB_MODE_AUTO || ext->scrlbar.mode == LV_SB_MODE_DRAG) ext->scrlbar.hor_draw = 1;
|
||||
if(ext->scrlbar.mode == LV_SCRLBAR_MODE_AUTO || ext->scrlbar.mode == LV_SCRLBAR_MODE_DRAG) ext->scrlbar.hor_draw = 1;
|
||||
}
|
||||
|
||||
/*Full sized vertical scroll bar*/
|
||||
@ -1196,7 +1217,7 @@ static void lv_page_sb_refresh(lv_obj_t * page)
|
||||
lv_area_set_height(&ext->scrlbar.ver_area, obj_h - 2 * sb_ver_pad);
|
||||
lv_area_set_pos(&ext->scrlbar.ver_area,
|
||||
obj_w - sb_width - sb_right, sb_ver_pad);
|
||||
if(ext->scrlbar.mode == LV_SB_MODE_AUTO || ext->scrlbar.mode == LV_SB_MODE_DRAG) ext->scrlbar.ver_draw = 0;
|
||||
if(ext->scrlbar.mode == LV_SCRLBAR_MODE_AUTO || ext->scrlbar.mode == LV_SCRLBAR_MODE_DRAG) ext->scrlbar.ver_draw = 0;
|
||||
}
|
||||
/*Smaller vertical scroll bar*/
|
||||
else {
|
||||
@ -1211,7 +1232,7 @@ static void lv_page_sb_refresh(lv_obj_t * page)
|
||||
(obj_h - size_tmp - 2 * sb_ver_pad)) /
|
||||
(scrl_h + bg_top + bg_bottom - obj_h));
|
||||
|
||||
if(ext->scrlbar.mode == LV_SB_MODE_AUTO || ext->scrlbar.mode == LV_SB_MODE_DRAG) ext->scrlbar.ver_draw = 1;
|
||||
if(ext->scrlbar.mode == LV_SCRLBAR_MODE_AUTO) ext->scrlbar.ver_draw = 1;
|
||||
}
|
||||
|
||||
/*Invalidate the new scrollbar areas*/
|
||||
|
@ -36,14 +36,14 @@ extern "C" {
|
||||
|
||||
/** Scrollbar modes: shows when should the scrollbars be visible*/
|
||||
enum {
|
||||
LV_SB_MODE_OFF = 0x0, /**< Never show scrollbars*/
|
||||
LV_SB_MODE_ON = 0x1, /**< Always show scrollbars*/
|
||||
LV_SB_MODE_DRAG = 0x2, /**< Show scrollbars when page is being dragged*/
|
||||
LV_SB_MODE_AUTO = 0x3, /**< Show scrollbars when the scrollable container is large enough to be scrolled*/
|
||||
LV_SB_MODE_HIDE = 0x4, /**< Hide the scroll bar temporally*/
|
||||
LV_SB_MODE_UNHIDE = 0x5, /**< Unhide the previously hidden scrollbar. Recover it's type too*/
|
||||
LV_SCRLBAR_MODE_OFF = 0x0, /**< Never show scroll bars*/
|
||||
LV_SCRLBAR_MODE_ON = 0x1, /**< Always show scroll bars*/
|
||||
LV_SCRLBAR_MODE_DRAG = 0x2, /**< Show scroll bars when page is being dragged*/
|
||||
LV_SCRLBAR_MODE_AUTO = 0x3, /**< Show scroll bars when the scrollable container is large enough to be scrolled*/
|
||||
LV_SCRLBAR_MODE_HIDE = 0x4, /**< Hide the scroll bar temporally*/
|
||||
LV_SCRLBAR_MODE_UNHIDE = 0x5, /**< Unhide the previously hidden scroll bar. Recover original mode too*/
|
||||
};
|
||||
typedef uint8_t lv_sb_mode_t;
|
||||
typedef uint8_t lv_scrlbar_mode_t;
|
||||
|
||||
/** Edges: describes the four edges of the page*/
|
||||
enum { LV_PAGE_EDGE_LEFT = 0x1, LV_PAGE_EDGE_TOP = 0x2, LV_PAGE_EDGE_RIGHT = 0x4, LV_PAGE_EDGE_BOTTOM = 0x8 };
|
||||
@ -60,7 +60,7 @@ typedef struct {
|
||||
lv_area_t ver_area; /*Vertical scrollbar area relative to the page (Handled by the library)*/
|
||||
uint8_t hor_draw : 1; /*1: horizontal scrollbar is visible now (Handled by the library)*/
|
||||
uint8_t ver_draw : 1; /*1: vertical scrollbar is visible now (Handled by the library)*/
|
||||
lv_sb_mode_t mode : 3; /*Scrollbar visibility from 'lv_page_sb_mode_t'*/
|
||||
lv_scrlbar_mode_t mode : 3; /*Scrollbar visibility from 'lv_page_sb_mode_t'*/
|
||||
} scrlbar;
|
||||
#if LV_USE_ANIMATION
|
||||
struct {
|
||||
@ -135,7 +135,7 @@ uint16_t lv_page_get_anim_time(const lv_obj_t * page);
|
||||
* @param page pointer to a page object
|
||||
* @param sb_mode the new mode from 'lv_page_sb.mode_t' enum
|
||||
*/
|
||||
void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode);
|
||||
void lv_page_set_scrlbar_mode(lv_obj_t * page, lv_scrlbar_mode_t sb_mode);
|
||||
|
||||
/**
|
||||
* Set the animation time for the page
|
||||
@ -237,7 +237,7 @@ static inline void lv_page_set_scrl_layout(lv_obj_t * page, lv_layout_t layout)
|
||||
* @param page pointer to a page object
|
||||
* @return the mode from 'lv_page_sb.mode_t' enum
|
||||
*/
|
||||
lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page);
|
||||
lv_scrlbar_mode_t lv_page_get_sb_mode(const lv_obj_t * page);
|
||||
|
||||
/**
|
||||
* Get the scroll propagation property
|
||||
|
@ -103,7 +103,7 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
|
||||
|
||||
lv_obj_t * scrl = lv_page_get_scrl(roller);
|
||||
lv_obj_set_drag(scrl, true); /*In ddlist it might be disabled*/
|
||||
lv_obj_set_drag(scrl, true);
|
||||
lv_page_set_scrl_fit2(roller, LV_FIT_PARENT, LV_FIT_NONE); /*Height is specified directly*/
|
||||
lv_roller_set_anim_time(roller, LV_ROLLER_DEF_ANIM_TIME);
|
||||
lv_roller_set_options(roller, "Option 1\nOption 2\nOption 3\nOption 4\nOption 5", LV_ROLLER_MODE_NORMAL);
|
||||
@ -154,9 +154,9 @@ void lv_roller_set_options(lv_obj_t * roller, const char * options, lv_roller_mo
|
||||
|
||||
/*Count the '\n'-s to determine the number of options*/
|
||||
ext->option_cnt = 0;
|
||||
uint16_t i;
|
||||
for(i = 0; options[i] != '\0'; i++) {
|
||||
if(options[i] == '\n') ext->option_cnt++;
|
||||
uint16_t cnt;
|
||||
for(cnt = 0; options[cnt] != '\0'; cnt++) {
|
||||
if(options[cnt] == '\n') ext->option_cnt++;
|
||||
}
|
||||
ext->option_cnt++; /*Last option has no `\n`*/
|
||||
|
||||
@ -225,6 +225,13 @@ void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, lv_anim_enable_
|
||||
* nothing will continue the animation. */
|
||||
|
||||
lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
|
||||
|
||||
/*In infinite mode interpret the new ID relative to the currently visible "page"*/
|
||||
if(ext->mode == LV_ROLLER_MODE_INIFINITE) {
|
||||
uint16_t page = ext->sel_opt_id / LV_ROLLER_INF_PAGES;
|
||||
sel_opt = page * LV_ROLLER_INF_PAGES + sel_opt;
|
||||
}
|
||||
|
||||
ext->sel_opt_id = sel_opt < ext->option_cnt ? sel_opt : ext->option_cnt - 1;
|
||||
ext->sel_opt_id_ori = ext->sel_opt_id;
|
||||
|
||||
@ -389,14 +396,14 @@ static lv_design_res_t lv_roller_design(lv_obj_t * roller, const lv_area_t * cli
|
||||
|
||||
lv_draw_rect_dsc_t sel_dsc;
|
||||
lv_draw_rect_dsc_init(&sel_dsc);
|
||||
lv_obj_init_draw_rect_dsc(roller, LV_ROLLER_PART_SEL, &sel_dsc);
|
||||
lv_obj_init_draw_rect_dsc(roller, LV_ROLLER_PART_SELECTED, &sel_dsc);
|
||||
lv_draw_rect(&rect_area, clip_area, &sel_dsc);
|
||||
}
|
||||
/*Post draw when the children are drawn*/
|
||||
else if(mode == LV_DESIGN_DRAW_POST) {
|
||||
lv_draw_label_dsc_t label_dsc;
|
||||
lv_draw_label_dsc_init(&label_dsc);
|
||||
lv_obj_init_draw_label_dsc(roller, LV_ROLLER_PART_SEL, &label_dsc);
|
||||
lv_obj_init_draw_label_dsc(roller, LV_ROLLER_PART_SELECTED, &label_dsc);
|
||||
|
||||
lv_coord_t font_h = lv_font_get_line_height(label_dsc.font);
|
||||
|
||||
@ -445,12 +452,9 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
|
||||
else return ancestor_signal(roller, sign, param);
|
||||
}
|
||||
|
||||
/*Don't let the drop down list to handle the control signals. It works differently*/
|
||||
if(sign != LV_SIGNAL_CONTROL && sign != LV_SIGNAL_FOCUS && sign != LV_SIGNAL_DEFOCUS) {
|
||||
/* Include the ancient signal function */
|
||||
res = ancestor_signal(roller, sign, param);
|
||||
if(res != LV_RES_OK) return res;
|
||||
}
|
||||
/* Include the ancient signal function */
|
||||
res = ancestor_signal(roller, sign, param);
|
||||
if(res != LV_RES_OK) return res;
|
||||
|
||||
if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
|
||||
|
||||
@ -496,7 +500,7 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
|
||||
}
|
||||
else {
|
||||
ext->sel_opt_id_ori = ext->sel_opt_id; /*Save the current value. Used to revert this state if
|
||||
ENER wont't be pressed*/
|
||||
ENTER wont't be pressed*/
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -527,7 +531,7 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_CLEANUP) {
|
||||
lv_obj_clean_style_list(roller, LV_ROLLER_PART_SEL);
|
||||
lv_obj_clean_style_list(roller, LV_ROLLER_PART_SELECTED);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@ -549,7 +553,7 @@ static lv_style_list_t * lv_roller_get_style(lv_obj_t * roller, uint8_t part)
|
||||
case LV_ROLLER_PART_BG:
|
||||
style_dsc_p = &roller->style_list;
|
||||
break;
|
||||
case LV_ROLLER_PART_SEL:
|
||||
case LV_ROLLER_PART_SELECTED:
|
||||
style_dsc_p = &ext->style_sel;
|
||||
break;
|
||||
default:
|
||||
@ -745,18 +749,21 @@ static lv_res_t release_handler(lv_obj_t * roller)
|
||||
lv_indev_t * indev = lv_indev_get_act();
|
||||
#if LV_USE_GROUP
|
||||
/*Leave edit mode once a new option is selected*/
|
||||
if(lv_indev_get_type(indev) == LV_INDEV_TYPE_ENCODER) {
|
||||
lv_indev_type_t indev_type = lv_indev_get_type(indev);
|
||||
if(indev_type == LV_INDEV_TYPE_ENCODER || indev_type == LV_INDEV_TYPE_KEYPAD) {
|
||||
ext->sel_opt_id_ori = ext->sel_opt_id;
|
||||
lv_group_t * g = lv_obj_get_group(roller);
|
||||
if(lv_group_get_editing(g)) {
|
||||
lv_group_set_editing(g, false);
|
||||
|
||||
if(indev_type == LV_INDEV_TYPE_ENCODER) {
|
||||
lv_group_t * g = lv_obj_get_group(roller);
|
||||
if(lv_group_get_editing(g)) {
|
||||
lv_group_set_editing(g, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
lv_obj_t * label = get_label(roller);
|
||||
|
||||
|
||||
if(label == NULL) return LV_RES_OK;
|
||||
|
||||
if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) {
|
||||
/*Search the clicked option (For KEYPAD and ENCODER the new value should be already set)*/
|
||||
@ -791,13 +798,14 @@ static lv_res_t release_handler(lv_obj_t * roller)
|
||||
static void refr_width(lv_obj_t * roller)
|
||||
{
|
||||
lv_obj_t * label = get_label(roller);
|
||||
if(label == NULL) return;
|
||||
|
||||
lv_coord_t label_w = lv_obj_get_width(label);
|
||||
|
||||
lv_style_int_t left = lv_obj_get_style_pad_left(roller, LV_ROLLER_PART_BG);
|
||||
lv_style_int_t right = lv_obj_get_style_pad_right(roller, LV_ROLLER_PART_BG);
|
||||
|
||||
lv_obj_set_width(roller, label_w + left + right);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -807,6 +815,7 @@ static void refr_width(lv_obj_t * roller)
|
||||
static void refr_height(lv_obj_t * roller)
|
||||
{
|
||||
lv_obj_t * label = get_label(roller);
|
||||
if(label == NULL) return;
|
||||
|
||||
lv_obj_set_height(lv_page_get_scrl(roller), lv_obj_get_height(label) + lv_obj_get_height(roller));
|
||||
lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0);
|
||||
|
@ -58,7 +58,7 @@ typedef struct {
|
||||
|
||||
enum {
|
||||
LV_ROLLER_PART_BG = LV_PAGE_PART_BG,
|
||||
LV_ROLLER_PART_SEL = _LV_PAGE_PART_VIRTUAL_LAST,
|
||||
LV_ROLLER_PART_SELECTED = _LV_PAGE_PART_VIRTUAL_LAST,
|
||||
_LV_ROLLER_PART_VIRTUAL_LAST,
|
||||
};
|
||||
typedef uint8_t lv_roller_part_t;
|
||||
@ -168,12 +168,6 @@ static inline uint16_t lv_roller_get_anim_time(const lv_obj_t * roller)
|
||||
return lv_page_get_anim_time(roller);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the auto width set attribute
|
||||
* @param roller pointer to a roller object
|
||||
* @return true: auto size enabled; false: manual width settings enabled
|
||||
*/
|
||||
bool lv_roller_get_hor_fit(const lv_obj_t * roller);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
|
@ -404,12 +404,12 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par
|
||||
char c = *((char *)param);
|
||||
|
||||
if(c == LV_KEY_RIGHT || c == LV_KEY_UP) {
|
||||
lv_slider_set_value(slider, lv_slider_get_value(slider) + 1, true);
|
||||
lv_slider_set_value(slider, lv_slider_get_value(slider) + 1, LV_ANIM_ON);
|
||||
res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
if(res != LV_RES_OK) return res;
|
||||
}
|
||||
else if(c == LV_KEY_LEFT || c == LV_KEY_DOWN) {
|
||||
lv_slider_set_value(slider, lv_slider_get_value(slider) - 1, true);
|
||||
lv_slider_set_value(slider, lv_slider_get_value(slider) - 1, LV_ANIM_ON);
|
||||
res = lv_event_send(slider, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
if(res != LV_RES_OK) return res;
|
||||
}
|
||||
|
@ -35,10 +35,11 @@ extern "C" {
|
||||
|
||||
enum {
|
||||
LV_SLIDER_TYPE_NORMAL,
|
||||
LV_SLIDER_TYPE_SYM,
|
||||
LV_SLIDER_TYPE_SYMMETRICAL,
|
||||
LV_SLIDER_TYPE_RANGE
|
||||
};
|
||||
typedef uint8_t lv_slider_type_t;
|
||||
|
||||
/*Data of slider*/
|
||||
typedef struct {
|
||||
lv_bar_ext_t bar; /*Ext. of ancestor*/
|
||||
@ -56,7 +57,6 @@ enum {
|
||||
LV_SLIDER_PART_INDIC, /** Slider indicator (filled area) style. */
|
||||
LV_SLIDER_PART_KNOB, /** Slider knob style. */
|
||||
};
|
||||
typedef uint8_t lv_slider_style_t;
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
@ -127,7 +127,7 @@ static inline void lv_slider_set_type(lv_obj_t * slider, lv_slider_type_t type)
|
||||
{
|
||||
if(type == LV_SLIDER_TYPE_NORMAL)
|
||||
lv_bar_set_type(slider, LV_BAR_TYPE_NORMAL);
|
||||
else if(type == LV_SLIDER_TYPE_SYM)
|
||||
else if(type == LV_SLIDER_TYPE_SYMMETRICAL)
|
||||
lv_bar_set_type(slider, LV_BAR_TYPE_SYMMETRICAL);
|
||||
else if(type == LV_SLIDER_TYPE_RANGE)
|
||||
lv_bar_set_type(slider, LV_BAR_TYPE_CUSTOM);
|
||||
@ -181,13 +181,6 @@ static inline int16_t lv_slider_get_max_value(const lv_obj_t * slider)
|
||||
*/
|
||||
bool lv_slider_is_dragged(const lv_obj_t * slider);
|
||||
|
||||
/**
|
||||
* Get an image to display on the knob of the slider
|
||||
* @param slider pointer to a slider object
|
||||
* @return the image source: pointer to an `lv_img_dsc_t` variable or a path to an image (not an `lv_img` object)
|
||||
*/
|
||||
const void * lv_slider_get_knob_img(lv_obj_t * slider, const void * img_src);
|
||||
|
||||
/**
|
||||
* Get the animation time of the slider
|
||||
* @param slider pointer to a slider object
|
||||
@ -207,7 +200,7 @@ static inline lv_slider_type_t lv_slider_get_type(lv_obj_t * slider)
|
||||
{
|
||||
lv_bar_type_t type = lv_bar_get_type(slider);
|
||||
if(type == LV_BAR_TYPE_SYMMETRICAL)
|
||||
return LV_SLIDER_TYPE_SYM;
|
||||
return LV_SLIDER_TYPE_SYMMETRICAL;
|
||||
else if(type == LV_BAR_TYPE_CUSTOM)
|
||||
return LV_SLIDER_TYPE_RANGE;
|
||||
else
|
||||
|
@ -105,7 +105,7 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(spinbox);
|
||||
lv_obj_refresh_style(spinbox, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
lv_spinbox_updatevalue(spinbox);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @file lv_preload.c
|
||||
* @file lv_spinner.c
|
||||
*
|
||||
*/
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static lv_res_t lv_spinner_signal(lv_obj_t * preload, lv_signal_t sign, void * param);
|
||||
static lv_res_t lv_spinner_signal(lv_obj_t * spinner, lv_signal_t sign, void * param);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
@ -64,23 +64,23 @@ static lv_design_cb_t ancestor_design;
|
||||
*/
|
||||
lv_obj_t * lv_spinner_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
{
|
||||
LV_LOG_TRACE("preload create started");
|
||||
LV_LOG_TRACE("spinner create started");
|
||||
|
||||
/*Create the ancestor of pre loader*/
|
||||
lv_obj_t * preload = lv_arc_create(par, copy);
|
||||
LV_ASSERT_MEM(preload);
|
||||
if(preload == NULL) return NULL;
|
||||
lv_obj_t * spinner = lv_arc_create(par, copy);
|
||||
LV_ASSERT_MEM(spinner);
|
||||
if(spinner == NULL) return NULL;
|
||||
|
||||
/*Allocate the pre loader type specific extended data*/
|
||||
lv_spinner_ext_t * ext = lv_obj_allocate_ext_attr(preload, sizeof(lv_spinner_ext_t));
|
||||
lv_spinner_ext_t * ext = lv_obj_allocate_ext_attr(spinner, sizeof(lv_spinner_ext_t));
|
||||
LV_ASSERT_MEM(ext);
|
||||
if(ext == NULL) {
|
||||
lv_obj_del(preload);
|
||||
lv_obj_del(spinner);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(preload);
|
||||
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(preload);
|
||||
if(ancestor_signal == NULL) ancestor_signal = lv_obj_get_signal_cb(spinner);
|
||||
if(ancestor_design == NULL) ancestor_design = lv_obj_get_design_cb(spinner);
|
||||
|
||||
/*Initialize the allocated 'ext' */
|
||||
ext->arc_length = LV_SPINNER_DEF_ARC_LENGTH;
|
||||
@ -89,14 +89,14 @@ lv_obj_t * lv_spinner_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->time = LV_SPINNER_DEF_SPIN_TIME;
|
||||
|
||||
/*The signal and design functions are not copied so set them here*/
|
||||
lv_obj_set_signal_cb(preload, lv_spinner_signal);
|
||||
lv_obj_set_signal_cb(spinner, lv_spinner_signal);
|
||||
|
||||
/*Init the new spinner spinner*/
|
||||
if(copy == NULL) {
|
||||
ext->arc.bg_angle_start = 0;
|
||||
ext->arc.bg_angle_end = 360;
|
||||
lv_obj_set_size(preload, LV_DPI, LV_DPI);
|
||||
lv_theme_apply(preload, LV_THEME_SPINNER);
|
||||
lv_obj_set_size(spinner, LV_DPI, LV_DPI);
|
||||
lv_theme_apply(spinner, LV_THEME_SPINNER);
|
||||
|
||||
}
|
||||
/*Copy an existing spinner*/
|
||||
@ -106,14 +106,14 @@ lv_obj_t * lv_spinner_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->time = copy_ext->time;
|
||||
ext->anim_dir = copy_ext->anim_dir;
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(preload);
|
||||
lv_obj_refresh_style(spinner, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
lv_spinner_set_type(preload, ext->anim_type);
|
||||
lv_spinner_set_type(spinner, ext->anim_type);
|
||||
|
||||
LV_LOG_INFO("preload created");
|
||||
LV_LOG_INFO("spinner created");
|
||||
|
||||
return preload;
|
||||
return spinner;
|
||||
}
|
||||
|
||||
/*======================
|
||||
@ -122,55 +122,55 @@ lv_obj_t * lv_spinner_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
|
||||
/**
|
||||
* Set the length of the spinning arc in degrees
|
||||
* @param preload pointer to a preload object
|
||||
* @param spinner pointer to a spinner object
|
||||
* @param deg length of the arc
|
||||
*/
|
||||
void lv_spinner_set_arc_length(lv_obj_t * preload, lv_anim_value_t deg)
|
||||
void lv_spinner_set_arc_length(lv_obj_t * spinner, lv_anim_value_t deg)
|
||||
{
|
||||
LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
|
||||
LV_ASSERT_OBJ(spinner, LV_OBJX_NAME);
|
||||
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
|
||||
ext->arc_length = deg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the spin time of the arc
|
||||
* @param preload pointer to a preload object
|
||||
* @param spinner pointer to a spinner object
|
||||
* @param time time of one round in milliseconds
|
||||
*/
|
||||
void lv_spinner_set_spin_time(lv_obj_t * preload, uint16_t time)
|
||||
void lv_spinner_set_spin_time(lv_obj_t * spinner, uint16_t time)
|
||||
{
|
||||
LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
|
||||
LV_ASSERT_OBJ(spinner, LV_OBJX_NAME);
|
||||
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
|
||||
ext->time = time;
|
||||
lv_spinner_set_type(preload, ext->anim_type);
|
||||
lv_spinner_set_type(spinner, ext->anim_type);
|
||||
}
|
||||
/*=====================
|
||||
* Setter functions
|
||||
*====================*/
|
||||
|
||||
/**
|
||||
* Set the animation type of a preloadeer.
|
||||
* @param preload pointer to pre loader object
|
||||
* @param type animation type of the preload
|
||||
* Set the animation type of a spinnereer.
|
||||
* @param spinner pointer to pre loader object
|
||||
* @param type animation type of the spinner
|
||||
* */
|
||||
void lv_spinner_set_type(lv_obj_t * preload, lv_spinner_type_t type)
|
||||
void lv_spinner_set_type(lv_obj_t * spinner, lv_spinner_type_t type)
|
||||
{
|
||||
LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
|
||||
LV_ASSERT_OBJ(spinner, LV_OBJX_NAME);
|
||||
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
|
||||
/*delete previous animation*/
|
||||
lv_anim_del(preload, NULL);
|
||||
lv_anim_del(spinner, NULL);
|
||||
switch(type) {
|
||||
case LV_SPINNER_TYPE_FILLSPIN_ARC: {
|
||||
ext->anim_type = LV_SPINNER_TYPE_FILLSPIN_ARC;
|
||||
lv_anim_t a;
|
||||
lv_anim_init(&a);
|
||||
lv_anim_set_var(&a, preload);
|
||||
lv_anim_set_var(&a, spinner);
|
||||
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_spinner_anim_cb);
|
||||
lv_anim_set_path_cb(&a, lv_anim_path_ease_in_out);
|
||||
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINIT);
|
||||
@ -193,7 +193,7 @@ void lv_spinner_set_type(lv_obj_t * preload, lv_spinner_type_t type)
|
||||
ext->anim_type = type;
|
||||
lv_anim_t a;
|
||||
lv_anim_init(&a);
|
||||
lv_anim_set_var(&a, preload);
|
||||
lv_anim_set_var(&a, spinner);
|
||||
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_spinner_anim_cb);
|
||||
lv_anim_set_time(&a, ext->time);
|
||||
lv_anim_set_path_cb(&a, (LV_SPINNER_TYPE_CONSTANT_ARC == type ? lv_anim_path_linear : lv_anim_path_ease_in_out));
|
||||
@ -206,14 +206,14 @@ void lv_spinner_set_type(lv_obj_t * preload, lv_spinner_type_t type)
|
||||
}
|
||||
}
|
||||
|
||||
void lv_spinner_set_dir(lv_obj_t * preload, lv_spinner_dir_t dir)
|
||||
void lv_spinner_set_dir(lv_obj_t * spinner, lv_spinner_dir_t dir)
|
||||
{
|
||||
LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
|
||||
LV_ASSERT_OBJ(spinner, LV_OBJX_NAME);
|
||||
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
|
||||
ext->anim_dir = dir;
|
||||
lv_spinner_set_type(preload, ext->anim_type);
|
||||
lv_spinner_set_type(spinner, ext->anim_type);
|
||||
}
|
||||
|
||||
/*=====================
|
||||
@ -222,44 +222,44 @@ void lv_spinner_set_dir(lv_obj_t * preload, lv_spinner_dir_t dir)
|
||||
|
||||
/**
|
||||
* Get the arc length [degree] of the a pre loader
|
||||
* @param preload pointer to a pre loader object
|
||||
* @param spinner pointer to a pre loader object
|
||||
*/
|
||||
lv_anim_value_t lv_spinner_get_arc_length(const lv_obj_t * preload)
|
||||
lv_anim_value_t lv_spinner_get_arc_length(const lv_obj_t * spinner)
|
||||
{
|
||||
LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
|
||||
LV_ASSERT_OBJ(spinner, LV_OBJX_NAME);
|
||||
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
return ext->arc_length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the spin time of the arc
|
||||
* @param preload pointer to a pre loader object [milliseconds]
|
||||
* @param spinner pointer to a pre loader object [milliseconds]
|
||||
*/
|
||||
uint16_t lv_spinner_get_spin_time(const lv_obj_t * preload)
|
||||
uint16_t lv_spinner_get_spin_time(const lv_obj_t * spinner)
|
||||
{
|
||||
LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
|
||||
LV_ASSERT_OBJ(spinner, LV_OBJX_NAME);
|
||||
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
return ext->time;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the animation type of a preloadeer.
|
||||
* @param preload pointer to pre loader object
|
||||
* Get the animation type of a spinnereer.
|
||||
* @param spinner pointer to pre loader object
|
||||
* @return animation type
|
||||
* */
|
||||
lv_spinner_type_t lv_spinner_get_type(lv_obj_t * preload)
|
||||
lv_spinner_type_t lv_spinner_get_type(lv_obj_t * spinner)
|
||||
{
|
||||
LV_ASSERT_OBJ(preload, LV_OBJX_NAME);
|
||||
LV_ASSERT_OBJ(spinner, LV_OBJX_NAME);
|
||||
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
return ext->anim_type;
|
||||
}
|
||||
|
||||
lv_spinner_dir_t lv_spinner_get_dir(lv_obj_t * preload)
|
||||
lv_spinner_dir_t lv_spinner_get_dir(lv_obj_t * spinner)
|
||||
{
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
return ext->anim_dir;
|
||||
}
|
||||
|
||||
@ -274,8 +274,8 @@ lv_spinner_dir_t lv_spinner_get_dir(lv_obj_t * preload)
|
||||
*/
|
||||
void lv_spinner_anim_cb(void * ptr, lv_anim_value_t val)
|
||||
{
|
||||
lv_obj_t * preload = ptr;
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(preload);
|
||||
lv_obj_t * spinner = ptr;
|
||||
lv_spinner_ext_t * ext = lv_obj_get_ext_attr(spinner);
|
||||
|
||||
int16_t angle_start = val - ext->arc_length / 2 - 90;
|
||||
if(angle_start < 0) angle_start += 360;
|
||||
@ -284,7 +284,7 @@ void lv_spinner_anim_cb(void * ptr, lv_anim_value_t val)
|
||||
angle_start = angle_start % 360;
|
||||
angle_end = angle_end % 360;
|
||||
|
||||
lv_arc_set_angles(preload, angle_start, angle_end);
|
||||
lv_arc_set_angles(spinner, angle_start, angle_end);
|
||||
}
|
||||
|
||||
/**********************
|
||||
@ -293,17 +293,17 @@ void lv_spinner_anim_cb(void * ptr, lv_anim_value_t val)
|
||||
|
||||
/**
|
||||
* Signal function of the pre loader
|
||||
* @param preload pointer to a pre loader object
|
||||
* @param spinner pointer to a pre loader object
|
||||
* @param sign a signal type from lv_signal_t enum
|
||||
* @param param pointer to a signal specific variable
|
||||
* @return LV_RES_OK: the object is not deleted in the function; LV_RES_INV: the object is deleted
|
||||
*/
|
||||
static lv_res_t lv_spinner_signal(lv_obj_t * preload, lv_signal_t sign, void * param)
|
||||
static lv_res_t lv_spinner_signal(lv_obj_t * spinner, lv_signal_t sign, void * param)
|
||||
{
|
||||
lv_res_t res;
|
||||
|
||||
/* Include the ancient signal function */
|
||||
res = ancestor_signal(preload, sign, param);
|
||||
res = ancestor_signal(spinner, sign, param);
|
||||
if(res != LV_RES_OK) return res;
|
||||
if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME);
|
||||
|
||||
|
@ -70,7 +70,7 @@ typedef struct {
|
||||
/*Parts of the spinner*/
|
||||
enum {
|
||||
LV_SPINNER_PART_BG = LV_ARC_PART_BG,
|
||||
LV_SPINNER_PART_ARC = LV_ARC_PART_INDIC,
|
||||
LV_SPINNER_PART_INDIC = LV_ARC_PART_INDIC,
|
||||
_LV_SPINNER_PART_VIRTUAL_LAST,
|
||||
|
||||
_LV_SPINNER_PART_REAL_LAST = _LV_ARC_PART_REAL_LAST,
|
||||
|
@ -99,7 +99,7 @@ lv_obj_t * lv_switch_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_switch_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
|
||||
|
||||
lv_style_list_copy(&ext->style_knob, ©_ext->style_knob);
|
||||
lv_obj_refresh_style(sw);
|
||||
lv_obj_refresh_style(sw, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
|
@ -108,7 +108,7 @@ lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
}
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(table);
|
||||
lv_obj_refresh_style(table, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("table created");
|
||||
@ -162,6 +162,8 @@ void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t col, const
|
||||
}
|
||||
|
||||
ext->cell_data[cell] = lv_mem_realloc(ext->cell_data[cell], strlen(txt) + 2); /*+1: trailing '\0; +1: format byte*/
|
||||
LV_ASSERT_MEM(ext->cell_data[cell]);
|
||||
if(ext->cell_data[cell] == NULL) return;
|
||||
strcpy(ext->cell_data[cell] + 1, txt); /*+1 to skip the format byte*/
|
||||
|
||||
ext->cell_data[cell][0] = format.format_byte;
|
||||
@ -742,7 +744,6 @@ static lv_design_res_t lv_table_design(lv_obj_t * table, const lv_area_t * clip_
|
||||
lv_point_t p2;
|
||||
p1.x = cell_area.x1;
|
||||
p2.x = cell_area.x2;
|
||||
uint16_t i;
|
||||
for(i = 1; ext->cell_data[cell][i] != '\0'; i++) {
|
||||
if(ext->cell_data[cell][i] == '\n') {
|
||||
ext->cell_data[cell][i] = '\0';
|
||||
|
@ -95,7 +95,7 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->content = NULL;
|
||||
ext->indic = NULL;
|
||||
ext->btns = NULL;
|
||||
ext->btns_pos = LV_TABVIEW_BTNS_POS_TOP;
|
||||
ext->btns_pos = LV_TABVIEW_TAB_POS_TOP;
|
||||
#if LV_USE_ANIMATION
|
||||
ext->anim_time = LV_TABVIEW_DEF_ANIM_TIME;
|
||||
#endif
|
||||
@ -140,7 +140,7 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
|
||||
lv_page_set_scrl_fit2(ext->content, LV_FIT_TIGHT, LV_FIT_PARENT);
|
||||
lv_page_set_scrl_layout(ext->content, LV_LAYOUT_ROW_TOP);
|
||||
lv_page_set_sb_mode(ext->content, LV_SB_MODE_OFF);
|
||||
lv_page_set_scrlbar_mode(ext->content, LV_SCRLBAR_MODE_OFF);
|
||||
|
||||
lv_obj_clean_style_list(ext->content, LV_PAGE_PART_BG);
|
||||
|
||||
@ -180,11 +180,11 @@ lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
LV_PAGE_PART_SCRL));
|
||||
lv_style_list_copy(lv_obj_get_style_list(new_tab, LV_PAGE_PART_SCRLBAR), lv_obj_get_style_list(copy_tab,
|
||||
LV_PAGE_PART_SCRLBAR));
|
||||
lv_obj_refresh_style(new_tab);
|
||||
lv_obj_refresh_style(new_tab, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(tabview);
|
||||
lv_obj_refresh_style(tabview, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
tabview_realign(tabview);
|
||||
@ -226,7 +226,7 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
|
||||
/*Create the container page*/
|
||||
lv_obj_t * h = lv_page_create(ext->content, NULL);
|
||||
lv_obj_set_size(h, lv_obj_get_width(tabview), lv_obj_get_height(ext->content));
|
||||
lv_page_set_sb_mode(h, LV_SB_MODE_AUTO);
|
||||
lv_page_set_scrlbar_mode(h, LV_SCRLBAR_MODE_AUTO);
|
||||
lv_page_set_scroll_propagation(h, true);
|
||||
lv_theme_apply(h, LV_THEME_TABVIEW_PAGE);
|
||||
|
||||
@ -242,12 +242,12 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
|
||||
ext->tab_cnt++;
|
||||
|
||||
switch(ext->btns_pos) {
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
ext->tab_name_ptr = lv_mem_realloc((void *)ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt + 1));
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
ext->tab_name_ptr = lv_mem_realloc((void *)ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt * 2));
|
||||
break;
|
||||
}
|
||||
@ -261,9 +261,9 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
|
||||
*/
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt + 1));
|
||||
|
||||
LV_ASSERT_MEM(ext->tab_name_ptr);
|
||||
@ -273,8 +273,8 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
|
||||
ext->tab_name_ptr[ext->tab_cnt] = "";
|
||||
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
ext->tab_name_ptr = lv_mem_realloc(ext->tab_name_ptr, sizeof(char *) * (ext->tab_cnt * 2));
|
||||
|
||||
LV_ASSERT_MEM(ext->tab_name_ptr);
|
||||
@ -345,13 +345,13 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
|
||||
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
cont_x = -(lv_obj_get_width(tabview) * id + scrl_inner * id + scrl_left);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
cont_x = -((lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns)) * id + scrl_inner * id + scrl_left);
|
||||
break;
|
||||
}
|
||||
@ -375,21 +375,25 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
|
||||
lv_coord_t indic_size;
|
||||
lv_coord_t indic_pos = 0; /*silence uninitialized variable warning*/;
|
||||
|
||||
lv_style_int_t btns_bg_inner = lv_obj_get_style_pad_inner(tabview, LV_TABVIEW_PART_TAB_BG);
|
||||
lv_style_int_t btns_bg_left = lv_obj_get_style_pad_left(tabview, LV_TABVIEW_PART_TAB_BG);
|
||||
lv_style_int_t btns_bg_top = lv_obj_get_style_pad_top(tabview, LV_TABVIEW_PART_TAB_BG);
|
||||
lv_style_int_t btns_bg_inner = 0;
|
||||
lv_style_int_t btns_bg_left = 0;
|
||||
lv_style_int_t btns_bg_top = 0;
|
||||
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
btns_bg_inner = lv_obj_get_style_pad_inner(tabview, LV_TABVIEW_PART_TAB_BG);
|
||||
btns_bg_left = lv_obj_get_style_pad_left(tabview, LV_TABVIEW_PART_TAB_BG);
|
||||
indic_size = lv_obj_get_width(ext->indic);
|
||||
indic_pos = indic_size * id + btns_bg_inner * id + btns_bg_left;
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
btns_bg_inner = lv_obj_get_style_pad_inner(tabview, LV_TABVIEW_PART_TAB_BG);
|
||||
btns_bg_top = lv_obj_get_style_pad_top(tabview, LV_TABVIEW_PART_TAB_BG);
|
||||
indic_size = lv_obj_get_height(ext->indic);
|
||||
indic_pos = btns_bg_top + id * (indic_size + btns_bg_inner);
|
||||
break;
|
||||
@ -401,14 +405,14 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
|
||||
{
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
lv_obj_set_x(ext->indic, indic_pos);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
lv_obj_set_y(ext->indic, indic_pos);
|
||||
break;
|
||||
}
|
||||
@ -422,15 +426,15 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, lv_anim_enable_t an
|
||||
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_obj_set_x);
|
||||
lv_anim_set_values(&a, lv_obj_get_x(ext->indic), indic_pos);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)lv_obj_set_y);
|
||||
lv_anim_set_values(&a, lv_obj_get_y(ext->indic), indic_pos);
|
||||
break;
|
||||
@ -468,11 +472,11 @@ void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time)
|
||||
*/
|
||||
void lv_tabview_set_btns_pos(lv_obj_t * tabview, lv_tabview_btns_pos_t btns_pos)
|
||||
{
|
||||
if(btns_pos != LV_TABVIEW_BTNS_POS_NONE &&
|
||||
btns_pos != LV_TABVIEW_BTNS_POS_TOP &&
|
||||
btns_pos != LV_TABVIEW_BTNS_POS_BOTTOM &&
|
||||
btns_pos != LV_TABVIEW_BTNS_POS_LEFT &&
|
||||
btns_pos != LV_TABVIEW_BTNS_POS_RIGHT) {
|
||||
if(btns_pos != LV_TABVIEW_TAB_POS_NONE &&
|
||||
btns_pos != LV_TABVIEW_TAB_POS_TOP &&
|
||||
btns_pos != LV_TABVIEW_TAB_POS_BOTTOM &&
|
||||
btns_pos != LV_TABVIEW_TAB_POS_LEFT &&
|
||||
btns_pos != LV_TABVIEW_TAB_POS_RIGHT) {
|
||||
LV_LOG_WARN("lv_tabview_set_btns_pos: unexpected button position");
|
||||
return;
|
||||
}
|
||||
@ -645,10 +649,16 @@ static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * p
|
||||
|
||||
if(sign == LV_SIGNAL_FOCUS || sign == LV_SIGNAL_DEFOCUS || sign == LV_SIGNAL_CONTROL || sign == LV_SIGNAL_PRESSED ||
|
||||
sign == LV_SIGNAL_RELEASED) {
|
||||
|
||||
/* The button matrix is not in a group (the tab view is in it) but it should handle the
|
||||
* group signals. So propagate the related signals to the button matrix manually*/
|
||||
if(ext->btns) {
|
||||
ext->btns->signal_cb(ext->btns, sign, param);
|
||||
|
||||
/*Make the active tab's button focused*/
|
||||
if(sign == LV_SIGNAL_FOCUS) {
|
||||
lv_btnmatrix_set_focused_btn(ext->btns, ext->tab_cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -716,7 +726,7 @@ static lv_res_t tabview_scrl_signal(lv_obj_t * tabview_scrl, lv_signal_t sign, v
|
||||
lv_tabview_set_tab_act(tabview, tab_cur, LV_ANIM_ON);
|
||||
uint32_t id_new = lv_tabview_get_tab_act(tabview);
|
||||
|
||||
if(id_prev != id_new) res = lv_event_send(tabview, LV_EVENT_VALUE_CHANGED, &id_new);
|
||||
if(id_prev != id_new) res = lv_event_send(tabview, LV_EVENT_VALUE_CHANGED, &id_prev);
|
||||
if(res != LV_RES_OK) return res;
|
||||
|
||||
}
|
||||
@ -804,8 +814,6 @@ static void tabview_realign(lv_obj_t * tabview)
|
||||
lv_tabview_set_tab_act(tabview, ext->tab_cur, LV_ANIM_OFF);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void refr_indic_size(lv_obj_t * tabview)
|
||||
{
|
||||
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
|
||||
@ -819,13 +827,13 @@ static void refr_indic_size(lv_obj_t * tabview)
|
||||
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
lv_obj_set_hidden(ext->indic, true);
|
||||
indic_w = 0;
|
||||
indic_h = 0;
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
lv_obj_set_hidden(ext->indic, false);
|
||||
if(ext->tab_cnt) {
|
||||
indic_h = indic_size;
|
||||
@ -836,8 +844,8 @@ static void refr_indic_size(lv_obj_t * tabview)
|
||||
indic_h = 0;
|
||||
}
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
lv_obj_set_hidden(ext->indic, false);
|
||||
if(ext->tab_cnt) {
|
||||
indic_w = indic_size;
|
||||
@ -877,20 +885,20 @@ static void refr_btns_size(lv_obj_t * tabview)
|
||||
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
btns_w = 0;
|
||||
btns_h = 0;
|
||||
lv_obj_set_hidden(ext->btns, true);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
lv_obj_set_hidden(ext->btns, false);
|
||||
btns_h = lv_font_get_line_height(font) + tab_top + tab_bottom + tab_bg_top + tab_bg_bottom;
|
||||
btns_w = lv_obj_get_width(tabview);
|
||||
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
lv_obj_set_hidden(ext->btns, false);
|
||||
btns_w = lv_font_get_glyph_width(font, 'A', '\0') +
|
||||
tab_left + tab_right + tab_bg_left + tab_bg_right;
|
||||
@ -909,17 +917,17 @@ static void refr_content_size(lv_obj_t * tabview)
|
||||
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
cont_w = lv_obj_get_width(tabview);
|
||||
cont_h = lv_obj_get_height(tabview);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
cont_w = lv_obj_get_width(tabview);
|
||||
cont_h = lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
cont_w = lv_obj_get_width(tabview) - lv_obj_get_width(ext->btns);
|
||||
cont_h = lv_obj_get_height(tabview);
|
||||
break;
|
||||
@ -948,25 +956,25 @@ static void refr_align(lv_obj_t * tabview)
|
||||
|
||||
switch(ext->btns_pos) {
|
||||
default: /*default case is prevented in lv_tabview_set_btns_pos(), but here for safety*/
|
||||
case LV_TABVIEW_BTNS_POS_NONE:
|
||||
case LV_TABVIEW_TAB_POS_NONE:
|
||||
lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_TOP:
|
||||
case LV_TABVIEW_TAB_POS_TOP:
|
||||
lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||
lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
||||
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_BOTTOM:
|
||||
case LV_TABVIEW_TAB_POS_BOTTOM:
|
||||
lv_obj_align(ext->content, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||
lv_obj_align(ext->btns, ext->content, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
||||
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_LEFT:
|
||||
case LV_TABVIEW_TAB_POS_LEFT:
|
||||
lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||
lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, lv_obj_get_width(ext->btns), 0);
|
||||
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
|
||||
break;
|
||||
case LV_TABVIEW_BTNS_POS_RIGHT:
|
||||
case LV_TABVIEW_TAB_POS_RIGHT:
|
||||
lv_obj_align(ext->btns, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0);
|
||||
lv_obj_align(ext->content, tabview, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_TOP_LEFT, 0, 0);
|
||||
|
@ -40,11 +40,11 @@ extern "C" {
|
||||
|
||||
/** Position of tabview buttons. */
|
||||
enum {
|
||||
LV_TABVIEW_BTNS_POS_NONE,
|
||||
LV_TABVIEW_BTNS_POS_TOP,
|
||||
LV_TABVIEW_BTNS_POS_BOTTOM,
|
||||
LV_TABVIEW_BTNS_POS_LEFT,
|
||||
LV_TABVIEW_BTNS_POS_RIGHT
|
||||
LV_TABVIEW_TAB_POS_NONE,
|
||||
LV_TABVIEW_TAB_POS_TOP,
|
||||
LV_TABVIEW_TAB_POS_BOTTOM,
|
||||
LV_TABVIEW_TAB_POS_LEFT,
|
||||
LV_TABVIEW_TAB_POS_RIGHT
|
||||
};
|
||||
typedef uint8_t lv_tabview_btns_pos_t;
|
||||
|
||||
@ -70,8 +70,8 @@ enum {
|
||||
_LV_TABVIEW_PART_VIRTUAL_LAST = _LV_OBJ_PART_VIRTUAL_LAST,
|
||||
|
||||
LV_TABVIEW_PART_BG_SCRL = _LV_OBJ_PART_REAL_LAST,
|
||||
LV_TABVIEW_PART_TAB_BTN,
|
||||
LV_TABVIEW_PART_TAB_BG,
|
||||
LV_TABVIEW_PART_TAB_BTN,
|
||||
LV_TABVIEW_PART_INDIC,
|
||||
_LV_TABVIEW_PART_REAL_LAST,
|
||||
};
|
||||
|
@ -149,7 +149,7 @@ lv_obj_t * lv_textarea_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
lv_label_set_text(ext->label, "Text area");
|
||||
lv_obj_set_click(ext->label, false);
|
||||
lv_obj_set_size(ta, LV_TEXTAREA_DEF_WIDTH, LV_TEXTAREA_DEF_HEIGHT);
|
||||
lv_textarea_set_sb_mode(ta, LV_SB_MODE_DRAG);
|
||||
lv_textarea_set_sb_mode(ta, LV_SCRLBAR_MODE_DRAG);
|
||||
|
||||
lv_obj_reset_style_list(ta, LV_PAGE_PART_SCRL);
|
||||
lv_theme_apply(ta, LV_THEME_TEXTAREA);
|
||||
@ -188,7 +188,7 @@ lv_obj_t * lv_textarea_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
if(copy_ext->one_line) lv_textarea_set_one_line(ta, true);
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(ta);
|
||||
lv_obj_refresh_style(ta, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
#if LV_USE_ANIMATION
|
||||
@ -348,8 +348,8 @@ void lv_textarea_add_text(lv_obj_t * ta, const char * txt)
|
||||
|
||||
/*If the textarea is empty, invalidate it to hide the placeholder*/
|
||||
if(ext->placeholder_txt) {
|
||||
const char * txt = lv_label_get_text(ext->label);
|
||||
if(txt[0] == '\0') lv_obj_invalidate(ta);
|
||||
const char * txt_act = lv_label_get_text(ext->label);
|
||||
if(txt_act[0] == '\0') lv_obj_invalidate(ta);
|
||||
}
|
||||
|
||||
/*Insert the text*/
|
||||
@ -504,8 +504,8 @@ void lv_textarea_set_text(lv_obj_t * ta, const char * txt)
|
||||
|
||||
/*If the textarea is empty, invalidate it to hide the placeholder*/
|
||||
if(ext->placeholder_txt) {
|
||||
const char * txt = lv_label_get_text(ext->label);
|
||||
if(txt[0] == '\0') lv_obj_invalidate(ta);
|
||||
const char * txt_act = lv_label_get_text(ext->label);
|
||||
if(txt_act[0] == '\0') lv_obj_invalidate(ta);
|
||||
}
|
||||
|
||||
/*Don't let 'width == 0' because the cursor will not be visible*/
|
||||
@ -1467,29 +1467,6 @@ static lv_res_t lv_textarea_signal(lv_obj_t * ta, lv_signal_t sign, void * param
|
||||
bool * editable = (bool *)param;
|
||||
*editable = true;
|
||||
}
|
||||
else if(sign == LV_SIGNAL_DEFOCUS) {
|
||||
#if LV_USE_GROUP
|
||||
if(lv_obj_get_group(ta)) {
|
||||
lv_textarea_set_cursor_hidden(ta, true);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if(sign == LV_SIGNAL_FOCUS) {
|
||||
#if LV_USE_GROUP
|
||||
lv_group_t * g = lv_obj_get_group(ta);
|
||||
bool editing = lv_group_get_editing(g);
|
||||
lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
|
||||
|
||||
/*Encoders need special handling*/
|
||||
if(indev_type == LV_INDEV_TYPE_ENCODER) {
|
||||
if(editing) lv_textarea_set_cursor_hidden(ta, false);
|
||||
else lv_textarea_set_cursor_hidden(ta, true);
|
||||
}
|
||||
else {
|
||||
lv_textarea_set_cursor_hidden(ta, false);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if(sign == LV_SIGNAL_PRESSED || sign == LV_SIGNAL_PRESSING || sign == LV_SIGNAL_PRESS_LOST ||
|
||||
sign == LV_SIGNAL_RELEASED) {
|
||||
update_cursor_position_on_click(ta, sign, (lv_indev_t *)param);
|
||||
|
@ -224,9 +224,9 @@ void lv_textarea_set_insert_replace(lv_obj_t * ta, const char * txt);
|
||||
* @param ta pointer to a text area object
|
||||
* @param sb_mode the new mode from 'lv_page_sb_mode_t' enum
|
||||
*/
|
||||
static inline void lv_textarea_set_sb_mode(lv_obj_t * ta, lv_sb_mode_t mode)
|
||||
static inline void lv_textarea_set_sb_mode(lv_obj_t * ta, lv_scrlbar_mode_t mode)
|
||||
{
|
||||
lv_page_set_sb_mode(ta, mode);
|
||||
lv_page_set_scrlbar_mode(ta, mode);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -350,7 +350,7 @@ uint16_t lv_textarea_get_max_length(lv_obj_t * ta);
|
||||
* @param ta pointer to a text area object
|
||||
* @return scrollbar mode from 'lv_page_sb_mode_t' enum
|
||||
*/
|
||||
static inline lv_sb_mode_t lv_textarea_get_sb_mode(const lv_obj_t * ta)
|
||||
static inline lv_scrlbar_mode_t lv_textarea_get_sb_mode(const lv_obj_t * ta)
|
||||
{
|
||||
return lv_page_get_sb_mode(ta);
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
#endif
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(new_tileview);
|
||||
lv_obj_refresh_style(new_tileview, LV_STYLE_PROP_ALL);
|
||||
}
|
||||
|
||||
LV_LOG_INFO("tileview created");
|
||||
|
@ -95,7 +95,7 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
|
||||
ext->page = lv_page_create(new_win, NULL);
|
||||
lv_obj_add_protect(ext->page, LV_PROTECT_PARENT);
|
||||
lv_page_set_sb_mode(ext->page, LV_SB_MODE_AUTO);
|
||||
lv_page_set_scrlbar_mode(ext->page, LV_SCRLBAR_MODE_AUTO);
|
||||
lv_obj_clean_style_list(ext->page, LV_PAGE_PART_BG);
|
||||
|
||||
/*Create a holder for the header*/
|
||||
@ -134,7 +134,7 @@ lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
}
|
||||
|
||||
/*Refresh the style with new signal function*/
|
||||
lv_obj_refresh_style(new_win);
|
||||
lv_obj_refresh_style(new_win, LV_STYLE_PROP_ALL);
|
||||
|
||||
lv_win_realign(new_win);
|
||||
|
||||
@ -219,6 +219,9 @@ void lv_win_set_title(lv_obj_t * win, const char * title)
|
||||
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
|
||||
|
||||
ext->title_txt = lv_mem_realloc(ext->title_txt, strlen(title) + 1);
|
||||
LV_ASSERT_MEM(ext->title_txt);
|
||||
if(ext->title_txt == NULL) return;
|
||||
|
||||
strcpy(ext->title_txt, title);
|
||||
lv_obj_invalidate(ext->header);
|
||||
}
|
||||
@ -238,8 +241,23 @@ void lv_win_set_header_height(lv_obj_t * win, lv_coord_t height)
|
||||
lv_win_realign(win);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the width of the control buttons on the header
|
||||
* @param win pointer to a window object
|
||||
* @param width width of the control button. 0: to make them square automatically.
|
||||
*/
|
||||
void lv_win_set_btn_width(lv_obj_t * win, lv_coord_t width)
|
||||
{
|
||||
LV_ASSERT_OBJ(win, LV_OBJX_NAME);
|
||||
|
||||
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
|
||||
ext->btn_w = width;
|
||||
lv_win_realign(win);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the size of the content area.
|
||||
* It's the effective area where object can be placed.
|
||||
* @param win pointer to a window object
|
||||
* @param w width
|
||||
* @param h height (the window will be higher with the height of the header)
|
||||
@ -272,12 +290,12 @@ void lv_win_set_layout(lv_obj_t * win, lv_layout_t layout)
|
||||
* @param win pointer to a window object
|
||||
* @param sb_mode the new scroll bar mode from 'lv_sb_mode_t'
|
||||
*/
|
||||
void lv_win_set_sb_mode(lv_obj_t * win, lv_sb_mode_t sb_mode)
|
||||
void lv_win_set_scrlbar_mode(lv_obj_t * win, lv_scrlbar_mode_t sb_mode)
|
||||
{
|
||||
LV_ASSERT_OBJ(win, LV_OBJX_NAME);
|
||||
|
||||
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
|
||||
lv_page_set_sb_mode(ext->page, sb_mode);
|
||||
lv_page_set_scrlbar_mode(ext->page, sb_mode);
|
||||
}
|
||||
/**
|
||||
* Set focus animation duration on `lv_win_focus()`
|
||||
@ -349,6 +367,20 @@ lv_coord_t lv_win_get_header_height(const lv_obj_t * win)
|
||||
return lv_obj_get_height(ext->header);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the width of the control buttons on the header
|
||||
* @param win pointer to a window object
|
||||
* @return width of the control button. 0: square.
|
||||
*/
|
||||
lv_coord_t lv_win_get_btn_width(lv_obj_t * win)
|
||||
{
|
||||
LV_ASSERT_OBJ(win, LV_OBJX_NAME);
|
||||
|
||||
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
|
||||
return ext->btn_w;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the pointer of a widow from one of its control button.
|
||||
* It is useful in the action of the control buttons where only button is known.
|
||||
@ -383,7 +415,7 @@ lv_layout_t lv_win_get_layout(lv_obj_t * win)
|
||||
* @param win pointer to a window object
|
||||
* @return the scroll bar mode of the window (from 'lv_sb_mode_t')
|
||||
*/
|
||||
lv_sb_mode_t lv_win_get_sb_mode(lv_obj_t * win)
|
||||
lv_scrlbar_mode_t lv_win_get_sb_mode(lv_obj_t * win)
|
||||
{
|
||||
LV_ASSERT_OBJ(win, LV_OBJX_NAME);
|
||||
|
||||
@ -610,13 +642,14 @@ static void lv_win_realign(lv_obj_t * win)
|
||||
|
||||
lv_obj_t * btn;
|
||||
lv_obj_t * btn_prev = NULL;
|
||||
lv_coord_t btn_size = lv_obj_get_height_fit(ext->header);
|
||||
lv_coord_t btn_h = lv_obj_get_height_fit(ext->header);
|
||||
lv_coord_t btn_w = ext->btn_w != 0 ? ext->btn_w : btn_h;
|
||||
lv_style_int_t header_inner = lv_obj_get_style_pad_inner(win, LV_WIN_PART_HEADER);
|
||||
lv_style_int_t header_right = lv_obj_get_style_pad_right(win, LV_WIN_PART_HEADER);
|
||||
/*Refresh the size of all control buttons*/
|
||||
btn = lv_obj_get_child_back(ext->header, NULL);
|
||||
while(btn != NULL) {
|
||||
lv_obj_set_size(btn, btn_size, btn_size);
|
||||
lv_obj_set_size(btn, btn_h, btn_w);
|
||||
if(btn_prev == NULL) {
|
||||
lv_obj_align(btn, ext->header, LV_ALIGN_IN_RIGHT_MID, -header_right, 0);
|
||||
}
|
||||
|
@ -56,6 +56,7 @@ typedef struct {
|
||||
lv_obj_t * page; /*Pointer to a page which holds the content*/
|
||||
lv_obj_t * header; /*Pointer to the header container of the window*/
|
||||
char * title_txt; /*Pointer to the title label of the window*/
|
||||
lv_coord_t btn_w; /*Width of the control buttons*/
|
||||
} lv_win_ext_t;
|
||||
|
||||
/** Window parts. */
|
||||
@ -123,6 +124,13 @@ void lv_win_set_title(lv_obj_t * win, const char * title);
|
||||
*/
|
||||
void lv_win_set_header_height(lv_obj_t * win, lv_coord_t size);
|
||||
|
||||
/**
|
||||
* Set the width of the control buttons on the header
|
||||
* @param win pointer to a window object
|
||||
* @param width width of the control button. 0: to make them square automatically.
|
||||
*/
|
||||
void lv_win_set_btn_width(lv_obj_t * win, lv_coord_t width);
|
||||
|
||||
/**
|
||||
* Set the size of the content area.
|
||||
* @param win pointer to a window object
|
||||
@ -143,7 +151,7 @@ void lv_win_set_layout(lv_obj_t * win, lv_layout_t layout);
|
||||
* @param win pointer to a window object
|
||||
* @param sb_mode the new scroll bar mode from 'lv_sb_mode_t'
|
||||
*/
|
||||
void lv_win_set_sb_mode(lv_obj_t * win, lv_sb_mode_t sb_mode);
|
||||
void lv_win_set_scrlbar_mode(lv_obj_t * win, lv_scrlbar_mode_t sb_mode);
|
||||
|
||||
/**
|
||||
* Set focus animation duration on `lv_win_focus()`
|
||||
@ -191,6 +199,14 @@ lv_coord_t lv_win_get_btn_size(const lv_obj_t * win);
|
||||
*/
|
||||
lv_coord_t lv_win_get_header_height(const lv_obj_t * win);
|
||||
|
||||
|
||||
/**
|
||||
* Get the width of the control buttons on the header
|
||||
* @param win pointer to a window object
|
||||
* @return width of the control button. 0: square.
|
||||
*/
|
||||
lv_coord_t lv_win_get_btn_width(lv_obj_t * win);
|
||||
|
||||
/**
|
||||
* Get the pointer of a widow from one of its control button.
|
||||
* It is useful in the action of the control buttons where only button is known.
|
||||
@ -211,7 +227,7 @@ lv_layout_t lv_win_get_layout(lv_obj_t * win);
|
||||
* @param win pointer to a window object
|
||||
* @return the scroll bar mode of the window (from 'lv_sb_mode_t')
|
||||
*/
|
||||
lv_sb_mode_t lv_win_get_sb_mode(lv_obj_t * win);
|
||||
lv_scrlbar_mode_t lv_win_get_sb_mode(lv_obj_t * win);
|
||||
|
||||
/**
|
||||
* Get focus animation duration
|
||||
|
@ -5,7 +5,7 @@ CC ?= gcc
|
||||
LVGL_DIR ?= ${shell pwd}/../..
|
||||
LVGL_DIR_NAME ?= lvgl
|
||||
|
||||
WARNINGS ?= -Wall -Wextra
|
||||
WARNINGS ?= -Werror -Wall -Wextra -Wshadow -Wundef -Wmaybe-uninitialized -Wmissing-prototypes -Wno-discarded-qualifiers -Wall -Wextra -Wno-unused-function -Wundef -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wno-switch-enum -Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage=1024 -Wno-unused-value -Wno-unused-parameter -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wpointer-arith -Wno-cast-qual -Wmissing-prototypes -Wunreachable-code -Wno-switch-default -Wswitch-enum -Wreturn-type -Wmultichar -Wno-discarded-qualifiers -Wformat-security -Wno-ignored-qualifiers -Wno-sign-compare
|
||||
OPTIMIZATION ?= -O3 -g0
|
||||
|
||||
|
||||
|
@ -6,7 +6,6 @@ lvgldirname = os.path.abspath('..')
|
||||
lvgldirname = os.path.basename(lvgldirname)
|
||||
lvgldirname = '"' + lvgldirname + '"'
|
||||
|
||||
warnings = '"-Wall -Werror"'
|
||||
base_defines = '"-DLV_CONF_PATH=' + lvgldirname +'/tests/lv_test_conf.h -DLV_BUILD_TEST"'
|
||||
optimization = '"-O3 -g0"'
|
||||
|
||||
@ -24,7 +23,7 @@ def build(name, defines):
|
||||
d_all += " -D" + d + "=" + str(defines[d])
|
||||
|
||||
d_all += '"'
|
||||
cmd = "make -j8 BIN=test.bin LVGL_DIR_NAME=" + lvgldirname + " DEFINES=" + d_all + " WARNINGS=" + warnings + " OPTIMIZATION=" + optimization
|
||||
cmd = "make -j8 BIN=test.bin LVGL_DIR_NAME=" + lvgldirname + " DEFINES=" + d_all + " OPTIMIZATION=" + optimization
|
||||
|
||||
print("---------------------------")
|
||||
print("Clean")
|
||||
@ -64,8 +63,9 @@ minimal_monochrome = {
|
||||
"LV_GPU":0,
|
||||
"LV_USE_FILESYSTEM":0,
|
||||
"LV_USE_USER_DATA":0,
|
||||
"LV_USE_USER_DATA_FREE":0,
|
||||
"LV_USE_LOG":0,
|
||||
"LV_USE_THEME_MATERIAL":1,
|
||||
"LV_USE_THEME_EMPTY":1,
|
||||
"LV_THEME_DEFAULT_INIT": "\\\"lv_theme_material_init\\\"",
|
||||
"LV_THEME_DEFAULT_COLOR_PRIMARY": "\\\"LV_COLOR_RED\\\"",
|
||||
"LV_THEME_DEFAULT_COLOR_SECONDARY": "\\\"LV_COLOR_BLUE\\\"",
|
||||
@ -74,7 +74,13 @@ minimal_monochrome = {
|
||||
"LV_THEME_DEFAULT_FONT_NORMAL" : "\\\"&lv_font_unscii_8\\\"",
|
||||
"LV_THEME_DEFAULT_FONT_SUBTITLE" : "\\\"&lv_font_unscii_8\\\"",
|
||||
"LV_THEME_DEFAULT_FONT_TITLE" : "\\\"&lv_font_unscii_8\\\"",
|
||||
"LV_LOG_PRINTF":0,
|
||||
"LV_USE_DEBUG":0,
|
||||
"LV_USE_ASSERT_NULL":0,
|
||||
"LV_USE_ASSERT_MEM":0,
|
||||
"LV_USE_ASSERT_STR":0,
|
||||
"LV_USE_ASSERT_OBJ":0,
|
||||
"LV_USE_ASSERT_STYLE":0,
|
||||
"LV_FONT_ROBOTO_12":0,
|
||||
"LV_FONT_ROBOTO_16":0,
|
||||
"LV_FONT_ROBOTO_22":0,
|
||||
@ -131,6 +137,7 @@ all_obj_minimal_features = {
|
||||
"LV_GPU":0,
|
||||
"LV_USE_FILESYSTEM":0,
|
||||
"LV_USE_USER_DATA":0,
|
||||
"LV_USE_USER_DATA_FREE":0,
|
||||
"LV_USE_LOG":0,
|
||||
"LV_USE_THEME_MATERIAL":1,
|
||||
"LV_THEME_DEFAULT_INIT": "\\\"lv_theme_material_init\\\"",
|
||||
@ -142,6 +149,11 @@ all_obj_minimal_features = {
|
||||
"LV_THEME_DEFAULT_FONT_SUBTITLE" : "\\\"&lv_font_roboto_16\\\"",
|
||||
"LV_THEME_DEFAULT_FONT_TITLE" : "\\\"&lv_font_roboto_16\\\"",
|
||||
"LV_USE_DEBUG":0,
|
||||
"LV_USE_ASSERT_NULL":0,
|
||||
"LV_USE_ASSERT_MEM":0,
|
||||
"LV_USE_ASSERT_STR":0,
|
||||
"LV_USE_ASSERT_OBJ":0,
|
||||
"LV_USE_ASSERT_STYLE":0,
|
||||
"LV_FONT_ROBOTO_12":0,
|
||||
"LV_FONT_ROBOTO_16":1,
|
||||
"LV_FONT_ROBOTO_22":0,
|
||||
@ -199,8 +211,11 @@ all_obj_all_features = {
|
||||
"LV_GPU":1,
|
||||
"LV_USE_FILESYSTEM":1,
|
||||
"LV_USE_USER_DATA":1,
|
||||
"LV_USE_USER_DATA_FREE":0,
|
||||
"LV_USE_LOG":1,
|
||||
"LV_USE_THEME_MATERIAL":1,
|
||||
"LV_USE_THEME_EMPTY":1,
|
||||
"LV_USE_THEME_TEMPLATE":1,
|
||||
"LV_THEME_DEFAULT_INIT": "\\\"lv_theme_material_init\\\"",
|
||||
"LV_THEME_DEFAULT_COLOR_PRIMARY": "\\\"LV_COLOR_RED\\\"",
|
||||
"LV_THEME_DEFAULT_COLOR_SECONDARY": "\\\"LV_COLOR_BLUE\\\"",
|
||||
@ -208,7 +223,14 @@ all_obj_all_features = {
|
||||
"LV_THEME_DEFAULT_FONT_SMALL" : "\\\"&lv_font_roboto_12\\\"",
|
||||
"LV_THEME_DEFAULT_FONT_NORMAL" : "\\\"&lv_font_roboto_16\\\"",
|
||||
"LV_THEME_DEFAULT_FONT_SUBTITLE" : "\\\"&lv_font_roboto_22\\\"",
|
||||
"LV_THEME_DEFAULT_FONT_TITLE" : "\\\"&lv_font_roboto_28\\\"",
|
||||
"LV_THEME_DEFAULT_FONT_TITLE" : "\\\"&lv_font_roboto_28\\\"",
|
||||
"LV_LOG_PRINTF":0,
|
||||
"LV_USE_DEBUG":0,
|
||||
"LV_USE_ASSERT_NULL":0,
|
||||
"LV_USE_ASSERT_MEM":0,
|
||||
"LV_USE_ASSERT_STR":0,
|
||||
"LV_USE_ASSERT_OBJ":0,
|
||||
"LV_USE_ASSERT_STYLE":0,
|
||||
"LV_FONT_ROBOTO_12":1,
|
||||
"LV_FONT_ROBOTO_16":1,
|
||||
"LV_FONT_ROBOTO_22":1,
|
||||
@ -266,9 +288,14 @@ advanced_features = {
|
||||
"LV_GPU":1,
|
||||
"LV_USE_FILESYSTEM":1,
|
||||
"LV_USE_USER_DATA":1,
|
||||
"LV_USE_USER_DATA_FREE":1,
|
||||
"LV_USER_DATA_FREE_INCLUDE":"\\\"<stdio.h>\\\"",
|
||||
"LV_USER_DATA_FREE": "\\\"free\\\"",
|
||||
"LV_IMG_CACHE_DEF_SIZE":32,
|
||||
"LV_USE_LOG":1,
|
||||
"LV_USE_THEME_MATERIAL":1,
|
||||
"LV_USE_THEME_EMPTY":1,
|
||||
"LV_USE_THEME_TEMPLATE":1,
|
||||
"LV_THEME_DEFAULT_INIT": "\\\"lv_theme_material_init\\\"",
|
||||
"LV_THEME_DEFAULT_COLOR_PRIMARY": "\\\"LV_COLOR_RED\\\"",
|
||||
"LV_THEME_DEFAULT_COLOR_SECONDARY": "\\\"LV_COLOR_BLUE\\\"",
|
||||
@ -284,7 +311,6 @@ advanced_features = {
|
||||
"LV_USE_ASSERT_STR":1,
|
||||
"LV_USE_ASSERT_OBJ":1,
|
||||
"LV_USE_ASSERT_STYLE":1,
|
||||
"LV_USE_THEME_MATERIAL":1,
|
||||
"LV_FONT_ROBOTO_12":1,
|
||||
"LV_FONT_ROBOTO_16":1,
|
||||
"LV_FONT_ROBOTO_22":1,
|
||||
|
@ -47,9 +47,10 @@ typedef struct {
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
void read_png_file(png_img_t * p, const char* file_name);
|
||||
void write_png_file(png_img_t * p, const char* file_name);
|
||||
void png_release(png_img_t * p);
|
||||
static void read_png_file(png_img_t * p, const char* file_name);
|
||||
static void write_png_file(png_img_t * p, const char* file_name);
|
||||
static void png_release(png_img_t * p);
|
||||
static void process_file(png_img_t * p);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
@ -200,7 +201,7 @@ void lv_test_assert_img_eq(const char * fn_ref, const char * s)
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
void read_png_file(png_img_t * p, const char* file_name)
|
||||
static void read_png_file(png_img_t * p, const char* file_name)
|
||||
{
|
||||
char header[8]; // 8 is the maximum size that can be checked
|
||||
|
||||
@ -255,7 +256,7 @@ void read_png_file(png_img_t * p, const char* file_name)
|
||||
}
|
||||
|
||||
|
||||
void write_png_file(png_img_t * p, const char* file_name)
|
||||
static void write_png_file(png_img_t * p, const char* file_name)
|
||||
{
|
||||
/* create file */
|
||||
FILE *fp = fopen(file_name, "wb");
|
||||
@ -306,7 +307,7 @@ void write_png_file(png_img_t * p, const char* file_name)
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
void png_release(png_img_t * p)
|
||||
static void png_release(png_img_t * p)
|
||||
{
|
||||
int y;
|
||||
for (y=0; y<p->height; y++)
|
||||
@ -314,7 +315,7 @@ void png_release(png_img_t * p)
|
||||
free(p->row_pointers);
|
||||
}
|
||||
|
||||
void process_file(png_img_t * p)
|
||||
static void process_file(png_img_t * p)
|
||||
{
|
||||
if (png_get_color_type(p->png_ptr, p->info_ptr) == PNG_COLOR_TYPE_RGB)
|
||||
lv_test_exit("[process_file] input file is PNG_COLOR_TYPE_RGB but must be PNG_COLOR_TYPE_RGBA "
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include "../lv_test_assert.h"
|
||||
|
||||
#if LV_BUILD_TEST
|
||||
|
||||
#include "lv_test_core.h"
|
||||
#include "lv_test_obj.h"
|
||||
#include "lv_test_style.h"
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
*********************/
|
||||
#include "../../lvgl.h"
|
||||
#include "../lv_test_assert.h"
|
||||
#include "lv_test_obj.h"
|
||||
|
||||
#if LV_BUILD_TEST
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
*********************/
|
||||
#include "../../lvgl.h"
|
||||
#include "../lv_test_assert.h"
|
||||
#include "lv_test_style.h"
|
||||
|
||||
#if LV_BUILD_TEST
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user