mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
minor fixes
This commit is contained in:
parent
d04d5ab4d4
commit
1ddf83a73c
@ -2173,7 +2173,7 @@ lv_coord_t lv_obj_get_width_grid(lv_obj_t * obj, uint8_t div, uint8_t span)
|
||||
lv_coord_t obj_w = lv_obj_get_width_fit(obj);
|
||||
lv_style_int_t pinner = lv_obj_get_style_pad_inner(obj, LV_OBJ_PART_MAIN);
|
||||
|
||||
lv_coord_t r = obj_w / div - (div - 1) * pinner;
|
||||
lv_coord_t r = (obj_w - (div - 1) * pinner) / div;
|
||||
|
||||
r = r * span + (span - 1) * pinner;
|
||||
return r;
|
||||
@ -2194,7 +2194,7 @@ lv_coord_t lv_obj_get_height_grid(lv_obj_t * obj, uint8_t div, uint8_t span)
|
||||
lv_coord_t obj_h = lv_obj_get_height_fit(obj);
|
||||
lv_style_int_t pinner = lv_obj_get_style_pad_inner(obj, LV_OBJ_PART_MAIN);
|
||||
|
||||
lv_coord_t r = obj_h / div - (div - 1) * pinner;
|
||||
lv_coord_t r = (obj_h - (div - 1) * pinner) / div;
|
||||
|
||||
r = r * span + (span - 1) * pinner;
|
||||
return r;
|
||||
|
@ -42,11 +42,11 @@
|
||||
#define COLOR_BG_PR_CHK lv_color_darken(theme.color_primary, LV_OPA_20)
|
||||
#define COLOR_BG_DIS COLOR_BG
|
||||
|
||||
#define COLOR_BG_BORDER (IS_LIGHT ? lv_color_hex(0xdfe7ed) : lv_color_hex(0x404040))
|
||||
#define COLOR_BG_BORDER (IS_LIGHT ? lv_color_hex(0xd6dde3) : lv_color_hex(0x404040)) /*dfe7ed*/
|
||||
#define COLOR_BG_BORDER_PR (IS_LIGHT ? lv_color_hex3(0xccc) : lv_color_hex(0x404040))
|
||||
#define COLOR_BG_BORDER_CHK (IS_LIGHT ? lv_color_hex(0x3b3e42) : lv_color_hex(0x404040))
|
||||
#define COLOR_BG_BORDER_CHK_PR (IS_LIGHT ? lv_color_hex(0x3b3e42) : lv_color_hex(0x404040))
|
||||
#define COLOR_BG_BORDER_DIS (IS_LIGHT ? lv_color_hex(0xdfe7ed) : lv_color_hex(0x404040))
|
||||
#define COLOR_BG_BORDER_DIS (IS_LIGHT ? lv_color_hex(0xd6dde3) : lv_color_hex(0x404040))
|
||||
|
||||
#define COLOR_BG_TEXT (IS_LIGHT ? lv_color_hex(0x3b3e42) : lv_color_hex(0xffffff))
|
||||
#define COLOR_BG_TEXT_PR (IS_LIGHT ? lv_color_hex(0x3b3e42) : lv_color_hex(0xffffff))
|
||||
@ -275,8 +275,8 @@ static void basic_init(void)
|
||||
lv_style_set_value_color(&btn, LV_STATE_CHECKED | LV_STATE_PRESSED, lv_color_hex(0xffffff));
|
||||
lv_style_set_value_color(&btn, LV_STATE_DISABLED, IS_LIGHT ? lv_color_hex(0x888888) : lv_color_hex(0x888888));
|
||||
|
||||
lv_style_set_pad_left(&btn, LV_STATE_DEFAULT, LV_DPI / 7);
|
||||
lv_style_set_pad_right(&btn, LV_STATE_DEFAULT, LV_DPI / 7);
|
||||
lv_style_set_pad_left(&btn, LV_STATE_DEFAULT, LV_DPI / 5);
|
||||
lv_style_set_pad_right(&btn, LV_STATE_DEFAULT, LV_DPI / 5);
|
||||
lv_style_set_pad_top(&btn, LV_STATE_DEFAULT, LV_DPI / 15);
|
||||
lv_style_set_pad_bottom(&btn, LV_STATE_DEFAULT, LV_DPI / 15);
|
||||
lv_style_set_pad_inner(&btn, LV_STATE_DEFAULT, LV_DPI / 10);
|
||||
@ -391,8 +391,8 @@ static void slider_init(void)
|
||||
lv_style_set_pad_bottom(&slider_knob, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
|
||||
lv_style_init(&slider_bg);
|
||||
lv_style_set_margin_left(&slider_bg, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
lv_style_set_margin_right(&slider_bg, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
lv_style_set_margin_left(&slider_bg, LV_STATE_DEFAULT, LV_DPI / 12);
|
||||
lv_style_set_margin_right(&slider_bg, LV_STATE_DEFAULT, LV_DPI / 12);
|
||||
lv_style_set_margin_top(&slider_bg, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
lv_style_set_margin_bottom(&slider_bg, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
|
||||
@ -460,12 +460,12 @@ static void gauge_init(void)
|
||||
|
||||
lv_style_init(&gauge_needle);
|
||||
lv_style_set_line_color(&gauge_needle, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex(0x464b5b) : LV_COLOR_WHITE);
|
||||
lv_style_set_line_width(&gauge_needle, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
lv_style_set_line_width(&gauge_needle, LV_STATE_DEFAULT, LV_DPI / 25);
|
||||
lv_style_set_bg_opa(&gauge_needle, LV_STATE_DEFAULT, LV_OPA_COVER);
|
||||
lv_style_set_bg_color(&gauge_needle, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex(0x464b5b) : LV_COLOR_WHITE);
|
||||
lv_style_set_radius(&gauge_needle, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE);
|
||||
lv_style_set_size(&gauge_needle, LV_STATE_DEFAULT, LV_DPI / 7);
|
||||
lv_style_set_pad_inner(&gauge_needle, LV_STATE_DEFAULT, LV_DPI / 10);
|
||||
lv_style_set_pad_inner(&gauge_needle, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -605,8 +605,9 @@ static void keyboard_init(void)
|
||||
#if LV_USE_KEYBOARD
|
||||
lv_style_init(&kb_bg);
|
||||
lv_style_set_radius(&kb_bg, LV_STATE_DEFAULT, 0);
|
||||
lv_style_set_border_width(&kb_bg, LV_STATE_DEFAULT, (LV_DPI / 40 > 0 ? LV_DPI / 40 : 1));
|
||||
lv_style_set_border_width(&kb_bg, LV_STATE_DEFAULT, (LV_DPI / 50 > 0 ? LV_DPI / 50 : 1));
|
||||
lv_style_set_border_side(&kb_bg, LV_STATE_DEFAULT, LV_BORDER_SIDE_TOP);
|
||||
lv_style_set_border_color(&kb_bg, LV_STATE_DEFAULT, COLOR_BG_TEXT);
|
||||
lv_style_set_pad_left(&kb_bg, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
lv_style_set_pad_right(&kb_bg, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
lv_style_set_pad_top(&kb_bg, LV_STATE_DEFAULT, LV_DPI / 20);
|
||||
@ -733,6 +734,7 @@ static void ddlist_init(void)
|
||||
lv_style_set_bg_color(&ddlist_sel, LV_STATE_DEFAULT, theme.color_primary);
|
||||
lv_style_set_text_color(&ddlist_sel, LV_STATE_DEFAULT, IS_LIGHT ? lv_color_hex3(0xfff) : lv_color_hex3(0xfff));
|
||||
lv_style_set_bg_color(&ddlist_sel, LV_STATE_PRESSED, COLOR_BG_PR);
|
||||
lv_style_set_text_color(&ddlist_sel, LV_STATE_PRESSED, COLOR_BG_TEXT_PR);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1009,6 +1011,7 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
|
||||
case LV_THEME_ARC:
|
||||
lv_obj_clean_style_list(obj, LV_ARC_PART_BG);
|
||||
list = lv_obj_get_style_list(obj, LV_ARC_PART_BG);
|
||||
lv_style_list_add_style(list, &bg);
|
||||
lv_style_list_add_style(list, &arc_bg);
|
||||
|
||||
lv_obj_clean_style_list(obj, LV_ARC_PART_INDIC);
|
||||
|
@ -384,18 +384,7 @@ static lv_design_res_t lv_bar_design(lv_obj_t * bar, const lv_area_t * clip_area
|
||||
draw_dsc.pattern_opa = LV_OPA_TRANSP;
|
||||
draw_dsc.outline_opa = LV_OPA_TRANSP;
|
||||
lv_obj_init_draw_rect_dsc(bar, LV_BAR_PART_BG, &draw_dsc);
|
||||
// lv_draw_rect(&bar->coords, clip_area, &draw_dsc);
|
||||
|
||||
/*Finally draw the indicators value*/
|
||||
lv_draw_rect_dsc_init(&draw_dsc);
|
||||
draw_dsc.bg_opa = LV_OPA_TRANSP;
|
||||
draw_dsc.border_opa = LV_OPA_TRANSP;
|
||||
draw_dsc.shadow_opa = LV_OPA_TRANSP;
|
||||
draw_dsc.pattern_opa = LV_OPA_TRANSP;
|
||||
draw_dsc.outline_opa = LV_OPA_TRANSP;
|
||||
lv_obj_init_draw_rect_dsc(bar, LV_BAR_PART_INDIC, &draw_dsc);
|
||||
lv_draw_rect(&bar->coords, clip_area, &draw_dsc);
|
||||
|
||||
}
|
||||
else if(mode == LV_DESIGN_DRAW_POST) {
|
||||
|
||||
@ -555,6 +544,7 @@ static void draw_indic(lv_obj_t * bar, const lv_area_t * clip_area)
|
||||
(!hor && lv_area_get_height(&ext->indic_area) > bg_radius * 2)) {
|
||||
lv_opa_t bg_opa = draw_indic_dsc.bg_opa;
|
||||
lv_opa_t border_opa = draw_indic_dsc.border_opa;
|
||||
lv_opa_t value_opa = draw_indic_dsc.value_opa;
|
||||
const void * pattern_src = draw_indic_dsc.pattern_image;
|
||||
draw_indic_dsc.bg_opa = LV_OPA_TRANSP;
|
||||
draw_indic_dsc.border_opa = LV_OPA_TRANSP;
|
||||
@ -563,6 +553,7 @@ static void draw_indic(lv_obj_t * bar, const lv_area_t * clip_area)
|
||||
lv_draw_rect(&ext->indic_area, clip_area, &draw_indic_dsc);
|
||||
draw_indic_dsc.bg_opa = bg_opa;
|
||||
draw_indic_dsc.border_opa = border_opa;
|
||||
draw_indic_dsc.value_opa = value_opa;
|
||||
draw_indic_dsc.pattern_image = pattern_src;
|
||||
|
||||
}
|
||||
|
@ -1301,6 +1301,17 @@ static void draw_x_ticks(lv_obj_t * chart, const lv_area_t * series_area, const
|
||||
lv_coord_t y_ofs = series_area->y1;
|
||||
lv_coord_t h = lv_area_get_height(series_area);
|
||||
lv_coord_t w = lv_area_get_width(series_area);
|
||||
|
||||
/* The columns don't start at the most right position
|
||||
* so change the width and offset accordingly. */
|
||||
if(ext->type == LV_CHART_TYPE_COLUMN) {
|
||||
uint32_t ser_num = lv_ll_get_len(&ext->series_ll);
|
||||
lv_coord_t col_w = w / ((ser_num + 1) * ext->point_cnt); /* Suppose + 1 series as separator*/
|
||||
x_ofs += col_w / 2 + (col_w * (ser_num) / 2);
|
||||
w -= col_w * ser_num + col_w;
|
||||
}
|
||||
|
||||
|
||||
char buf[LV_CHART_AXIS_TICK_LABEL_MAX_LEN + 1]; /* up to N symbols per label + null terminator */
|
||||
|
||||
/* calculate the size of tick marks */
|
||||
|
@ -558,11 +558,11 @@ static void lv_cont_layout_pretty(lv_obj_t * cont)
|
||||
/*If there is only one object in the row then align it to the middle*/
|
||||
else if(obj_num == 1) {
|
||||
lv_obj_align(child_rs, cont, LV_ALIGN_IN_TOP_MID,
|
||||
lv_obj_get_style_margin_left(child_rs, LV_OBJ_PART_MAIN),
|
||||
0,
|
||||
act_y + lv_obj_get_style_margin_top(child_rs, LV_OBJ_PART_MAIN));
|
||||
}
|
||||
/*If there are two object in the row then align them proportionally*/
|
||||
else if(obj_num == 2) {
|
||||
else if(obj_num == 2 && 0) {
|
||||
lv_obj_t * obj1 = child_rs;
|
||||
lv_obj_t * obj2 = lv_ll_get_prev(&cont->child_ll, child_rs);
|
||||
w_row = lv_obj_get_width(obj1) + lv_obj_get_width(obj2);
|
||||
|
@ -53,12 +53,8 @@ static void draw_box_label(lv_obj_t * ddlist, const lv_area_t * clip_area, uint1
|
||||
static lv_res_t page_release_handler(lv_obj_t * page);
|
||||
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);
|
||||
static void pos_selected(lv_obj_t * ddlist);
|
||||
static void position_to_selected(lv_obj_t * ddlist);
|
||||
static lv_obj_t * get_label(const lv_obj_t * ddlist);
|
||||
#if LV_USE_ANIMATION
|
||||
static void list_anim(void * p, lv_anim_value_t v);
|
||||
static void close_anim_ready(lv_anim_t * a);
|
||||
#endif
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
@ -117,7 +113,6 @@ lv_obj_t * lv_dropdown_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->option_cnt = 0;
|
||||
ext->dir = LV_DROPDOWN_DIR_DOWN;
|
||||
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);
|
||||
lv_style_list_init(&ext->style_selected);
|
||||
@ -143,7 +138,6 @@ lv_obj_t * lv_dropdown_create(lv_obj_t * par, const lv_obj_t * copy)
|
||||
ext->sel_opt_id_orig = copy_ext->sel_opt_id;
|
||||
ext->symbol = copy_ext->symbol;
|
||||
ext->max_height = copy_ext->max_height;
|
||||
ext->anim_time = copy_ext->anim_time;
|
||||
ext->text = copy_ext->text;
|
||||
ext->dir = copy_ext->dir;
|
||||
ext->show_selected = copy_ext->show_selected;
|
||||
@ -429,20 +423,6 @@ void lv_dropdown_set_show_selected(lv_obj_t * ddlist, bool show)
|
||||
lv_obj_invalidate(ddlist);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the open/close animation time.
|
||||
* @param ddlist pointer to a drop down list
|
||||
* @param anim_time: open/close animation time [ms]
|
||||
*/
|
||||
void lv_dropdown_set_anim_time(lv_obj_t * ddlist, uint16_t anim_time)
|
||||
{
|
||||
LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
|
||||
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
ext->anim_time = anim_time;
|
||||
}
|
||||
|
||||
|
||||
/*=====================
|
||||
* Getter functions
|
||||
*====================*/
|
||||
@ -589,20 +569,6 @@ bool lv_dropdown_get_show_selected(lv_obj_t * ddlist)
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the open/close animation time.
|
||||
* @param ddlist pointer to a drop down list
|
||||
* @return open/close animation time [ms]
|
||||
*/
|
||||
uint16_t lv_dropdown_get_anim_time(const lv_obj_t * ddlist)
|
||||
{
|
||||
LV_ASSERT_OBJ(ddlist, LV_OBJX_NAME);
|
||||
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
|
||||
return ext->anim_time;
|
||||
}
|
||||
|
||||
/*=====================
|
||||
* Other functions
|
||||
*====================*/
|
||||
@ -610,13 +576,9 @@ uint16_t lv_dropdown_get_anim_time(const lv_obj_t * ddlist)
|
||||
/**
|
||||
* Open the drop down list with or without animation
|
||||
* @param ddlist pointer to drop down list object
|
||||
* @param anim_en LV_ANIM_EN: use animation; LV_ANIM_OFF: not use animations
|
||||
*/
|
||||
void lv_dropdown_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
|
||||
void lv_dropdown_open(lv_obj_t * ddlist)
|
||||
{
|
||||
#if LV_USE_ANIMATION == 0
|
||||
(void) anim; /*Unused*/
|
||||
#endif
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
if(ext->page) return;
|
||||
|
||||
@ -660,87 +622,60 @@ void lv_dropdown_open(lv_obj_t * ddlist, lv_anim_enable_t anim)
|
||||
|
||||
if(list_h > ext->max_height) list_h = ext->max_height;
|
||||
|
||||
lv_dropdown_dir_t dir = ext->dir;
|
||||
/*No place on the bottom? See if top is better.*/
|
||||
if(ext->dir == LV_DROPDOWN_DIR_DOWN) {
|
||||
if(ddlist->coords.y2 + list_h > LV_VER_RES) {
|
||||
if(ddlist->coords.y1 > LV_VER_RES - ddlist->coords.y2) {
|
||||
/*There is more space on the top, so make it drop up*/
|
||||
dir = LV_DROPDOWN_DIR_UP;
|
||||
list_h = ddlist->coords.y1;
|
||||
} else {
|
||||
list_h = LV_VER_RES - ddlist->coords.y2;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*No place on the top? See if bottom is better.*/
|
||||
else if(ext->dir == LV_DROPDOWN_DIR_UP) {
|
||||
if(ddlist->coords.y1 - list_h < 0) {
|
||||
if(ddlist->coords.y1 < LV_VER_RES - ddlist->coords.y2) {
|
||||
/*There is more space on the top, so make it drop up*/
|
||||
dir = LV_DROPDOWN_DIR_DOWN;
|
||||
list_h = LV_VER_RES - ddlist->coords.y2;
|
||||
} else {
|
||||
list_h = ddlist->coords.y1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lv_obj_set_height(ext->page, list_h);
|
||||
|
||||
pos_selected(ddlist);
|
||||
position_to_selected(ddlist);
|
||||
|
||||
if(ext->dir == LV_DROPDOWN_DIR_DOWN) lv_obj_align(ext->page, ddlist, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
||||
else if(ext->dir == LV_DROPDOWN_DIR_UP) lv_obj_align(ext->page, ddlist, LV_ALIGN_OUT_TOP_LEFT, 0, 0);
|
||||
else if(ext->dir == LV_DROPDOWN_DIR_LEFT) lv_obj_align(ext->page, ddlist, LV_ALIGN_OUT_LEFT_TOP, 0, 0);
|
||||
else if(ext->dir == LV_DROPDOWN_DIR_RIGHT)lv_obj_align(ext->page, ddlist, LV_ALIGN_OUT_RIGHT_TOP, 0, 0);
|
||||
if(dir == LV_DROPDOWN_DIR_DOWN) lv_obj_align(ext->page, ddlist, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
||||
else if(dir == LV_DROPDOWN_DIR_UP) lv_obj_align(ext->page, ddlist, LV_ALIGN_OUT_TOP_LEFT, 0, 0);
|
||||
else if(dir == LV_DROPDOWN_DIR_LEFT) lv_obj_align(ext->page, ddlist, LV_ALIGN_OUT_LEFT_TOP, 0, 0);
|
||||
else if(dir == LV_DROPDOWN_DIR_RIGHT)lv_obj_align(ext->page, ddlist, LV_ALIGN_OUT_RIGHT_TOP, 0, 0);
|
||||
|
||||
lv_obj_t * scr = lv_scr_act();
|
||||
bool moved = false;
|
||||
if(ext->dir != LV_DROPDOWN_DIR_UP) {
|
||||
if(ext->page->coords.y2 > scr->coords.y2) {
|
||||
lv_obj_set_y(ext->page, lv_obj_get_y(ext->page) - (ext->page->coords.y2 - scr->coords.y2));
|
||||
moved = true;
|
||||
if(ext->dir == LV_DROPDOWN_DIR_LEFT || ext->dir == LV_DROPDOWN_DIR_RIGHT) {
|
||||
if(ext->page->coords.y2 > LV_VER_RES) {
|
||||
lv_obj_set_y(ext->page, lv_obj_get_y(ext->page) - (ext->page->coords.y2 - LV_VER_RES));
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(ext->page->coords.y1 < 0) {
|
||||
lv_obj_set_y(ext->page, 0);
|
||||
moved = true;
|
||||
}
|
||||
}
|
||||
|
||||
#if LV_USE_ANIMATION
|
||||
if(anim == LV_ANIM_ON && ext->dir != LV_DROPDOWN_DIR_UP && !moved) {
|
||||
lv_anim_t a;
|
||||
lv_anim_init(&a);
|
||||
lv_anim_set_var(&a, ddlist);
|
||||
lv_anim_set_exec_cb(&a, list_anim);
|
||||
lv_anim_set_values(&a, 0, lv_obj_get_height(ext->page));
|
||||
lv_anim_set_time(&a, ext->anim_time);
|
||||
lv_anim_start(&a);
|
||||
}
|
||||
#else
|
||||
(void)moved; /*Unused*/
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Close (Collapse) the drop down list
|
||||
* @param ddlist pointer to drop down list object
|
||||
* @param anim_en LV_ANIM_ON: use animation; LV_ANIM_OFF: not use animations
|
||||
*/
|
||||
void lv_dropdown_close(lv_obj_t * ddlist, lv_anim_enable_t anim)
|
||||
void lv_dropdown_close(lv_obj_t * ddlist)
|
||||
{
|
||||
#if LV_USE_ANIMATION == 0
|
||||
anim = false;
|
||||
#endif
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
if(ext->page == NULL) return;
|
||||
|
||||
ext->pr_opt_id = LV_DROPDOWN_PR_NONE;
|
||||
|
||||
if(ext->anim_time == 0 || anim == LV_ANIM_OFF) {
|
||||
#if LV_USE_ANIMATION
|
||||
lv_anim_del(ddlist, list_anim);
|
||||
#endif
|
||||
lv_obj_del(ext->page);
|
||||
ext->page = NULL;
|
||||
}
|
||||
else {
|
||||
#if LV_USE_ANIMATION
|
||||
if(ext->dir != LV_DROPDOWN_DIR_UP) {
|
||||
lv_anim_t a;
|
||||
lv_anim_init(&a);
|
||||
lv_anim_set_var(&a, ddlist);
|
||||
lv_anim_set_exec_cb(&a, list_anim);
|
||||
lv_anim_set_values(&a, lv_obj_get_height(ext->page), 0);
|
||||
lv_anim_set_time(&a, ext->anim_time);
|
||||
lv_anim_set_ready_cb(&a, close_anim_ready);
|
||||
lv_anim_start(&a);
|
||||
}
|
||||
else {
|
||||
lv_anim_del(ddlist, list_anim);
|
||||
lv_obj_del(ext->page);
|
||||
ext->page = NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
lv_obj_del(ext->page);
|
||||
ext->page = NULL;
|
||||
}
|
||||
|
||||
/**********************
|
||||
@ -934,7 +869,7 @@ static lv_res_t lv_dropdown_signal(lv_obj_t * ddlist, lv_signal_t sign, void * p
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_CLEANUP) {
|
||||
lv_dropdown_close(ddlist, LV_ANIM_OFF);
|
||||
lv_dropdown_close(ddlist);
|
||||
if(ext->static_txt == 0) {
|
||||
lv_mem_free(ext->options);
|
||||
ext->options = NULL;
|
||||
@ -956,27 +891,27 @@ static lv_res_t lv_dropdown_signal(lv_obj_t * ddlist, lv_signal_t sign, void * p
|
||||
/*Encoders need special handling*/
|
||||
if(indev_type == LV_INDEV_TYPE_ENCODER) {
|
||||
/*Open the list if editing*/
|
||||
if(editing) lv_dropdown_open(ddlist, LV_ANIM_ON);
|
||||
if(editing) lv_dropdown_open(ddlist);
|
||||
/*Close the list if navigating*/
|
||||
else
|
||||
lv_dropdown_close(ddlist, LV_ANIM_ON);
|
||||
lv_dropdown_close(ddlist);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if(sign == LV_SIGNAL_DEFOCUS || sign == LV_SIGNAL_LEAVE) {
|
||||
lv_dropdown_close(ddlist, LV_ANIM_ON);
|
||||
lv_dropdown_close(ddlist);
|
||||
}
|
||||
else if(sign == LV_SIGNAL_RELEASED) {
|
||||
if(lv_indev_is_dragging(lv_indev_get_act()) == false) {
|
||||
if(ext->page) {
|
||||
lv_dropdown_close(ddlist, LV_ANIM_ON);
|
||||
lv_dropdown_close(ddlist);
|
||||
if(ext->sel_opt_id_orig != ext->sel_opt_id) {
|
||||
ext->sel_opt_id_orig = ext->sel_opt_id;
|
||||
lv_obj_invalidate(ddlist);
|
||||
}
|
||||
}
|
||||
else {
|
||||
lv_dropdown_open(ddlist, LV_ANIM_ON);
|
||||
lv_dropdown_open(ddlist);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -985,7 +920,7 @@ static lv_res_t lv_dropdown_signal(lv_obj_t * ddlist, lv_signal_t sign, void * p
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_COORD_CHG) {
|
||||
if(ext->page) lv_dropdown_close(ddlist, LV_ANIM_OFF);
|
||||
if(ext->page) lv_dropdown_close(ddlist);
|
||||
}
|
||||
else if(sign == LV_SIGNAL_STYLE_CHG) {
|
||||
lv_style_int_t top = lv_obj_get_style_pad_top(ddlist, LV_DROPDOWN_PART_MAIN);
|
||||
@ -999,26 +934,26 @@ static lv_res_t lv_dropdown_signal(lv_obj_t * ddlist, lv_signal_t sign, void * p
|
||||
char c = *((char *)param);
|
||||
if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) {
|
||||
if(ext->page == NULL) {
|
||||
lv_dropdown_open(ddlist, LV_ANIM_ON);
|
||||
lv_dropdown_open(ddlist);
|
||||
}
|
||||
else if(ext->sel_opt_id + 1 < ext->option_cnt) {
|
||||
ext->sel_opt_id++;
|
||||
pos_selected(ddlist);
|
||||
position_to_selected(ddlist);
|
||||
}
|
||||
}
|
||||
else if(c == LV_KEY_LEFT || c == LV_KEY_UP) {
|
||||
|
||||
if(ext->page == NULL) {
|
||||
lv_dropdown_open(ddlist, LV_ANIM_ON);
|
||||
lv_dropdown_open(ddlist);
|
||||
}
|
||||
else if(ext->sel_opt_id > 0) {
|
||||
ext->sel_opt_id--;
|
||||
pos_selected(ddlist);
|
||||
position_to_selected(ddlist);
|
||||
}
|
||||
}
|
||||
else if(c == LV_KEY_ESC) {
|
||||
ext->sel_opt_id = ext->sel_opt_id_orig;
|
||||
lv_dropdown_close(ddlist, LV_ANIM_ON);
|
||||
lv_dropdown_close(ddlist);
|
||||
}
|
||||
}
|
||||
else if(sign == LV_SIGNAL_GET_EDITABLE) {
|
||||
@ -1262,7 +1197,7 @@ static lv_res_t page_release_handler(lv_obj_t * page)
|
||||
ext->sel_opt_id_orig = ext->sel_opt_id;
|
||||
}
|
||||
|
||||
lv_dropdown_close(ddlist, LV_ANIM_ON);
|
||||
lv_dropdown_close(ddlist);
|
||||
|
||||
/*Invalidate to refresh the text*/
|
||||
if(ext->show_selected) lv_obj_invalidate(ddlist);
|
||||
@ -1322,7 +1257,7 @@ static uint16_t get_id_on_point(lv_obj_t * ddlist, lv_coord_t x, lv_coord_t y)
|
||||
* Set the position of list when it is closed to show the selected item
|
||||
* @param ddlist pointer to a drop down list
|
||||
*/
|
||||
static void pos_selected(lv_obj_t * ddlist)
|
||||
static void position_to_selected(lv_obj_t * ddlist)
|
||||
{
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
|
||||
@ -1351,21 +1286,4 @@ static lv_obj_t * get_label(const lv_obj_t * ddlist)
|
||||
return lv_obj_get_child(lv_page_get_scrl(ext->page), NULL);
|
||||
}
|
||||
|
||||
#if LV_USE_ANIMATION
|
||||
static void list_anim(void * p, lv_anim_value_t v)
|
||||
{
|
||||
lv_obj_t * ddlist = p;
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
lv_obj_set_height(ext->page, v);
|
||||
}
|
||||
|
||||
static void close_anim_ready(lv_anim_t * a)
|
||||
{
|
||||
lv_obj_t * ddlist = a->var;
|
||||
lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
|
||||
lv_obj_del(ext->page);
|
||||
ext->page = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -62,7 +62,6 @@ typedef struct {
|
||||
uint16_t sel_opt_id; /*Index of the currently selected option*/
|
||||
uint16_t sel_opt_id_orig; /*Store the original index on focus*/
|
||||
uint16_t pr_opt_id; /*Index of the currently pressed option*/
|
||||
uint16_t anim_time;
|
||||
lv_dropdown_dir_t dir : 2;
|
||||
uint8_t show_selected : 1;
|
||||
uint8_t static_txt : 1;
|
||||
@ -164,13 +163,6 @@ void lv_dropdown_set_symbol(lv_obj_t * ddlist, const char * symbol);
|
||||
*/
|
||||
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
|
||||
* @param anim_time: open/close animation time [ms]
|
||||
*/
|
||||
void lv_dropdown_set_anim_time(lv_obj_t * ddlist, uint16_t anim_time);
|
||||
|
||||
/*=====================
|
||||
* Getter functions
|
||||
*====================*/
|
||||
@ -239,13 +231,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 open/close animation time.
|
||||
* @param ddlist pointer to a drop down list
|
||||
* @return open/close animation time [ms]
|
||||
*/
|
||||
uint16_t lv_dropdown_get_anim_time(const lv_obj_t * ddlist);
|
||||
|
||||
/*=====================
|
||||
* Other functions
|
||||
*====================*/
|
||||
@ -253,16 +238,15 @@ uint16_t lv_dropdown_get_anim_time(const lv_obj_t * ddlist);
|
||||
/**
|
||||
* Open the drop down list with or without animation
|
||||
* @param ddlist pointer to drop down list object
|
||||
* @param anim_en LV_ANIM_ON: use animation; LV_ANOM_OFF: not use animations
|
||||
*/
|
||||
void lv_dropdown_open(lv_obj_t * ddlist, lv_anim_enable_t anim);
|
||||
void lv_dropdown_open(lv_obj_t * ddlist);
|
||||
|
||||
/**
|
||||
* Close (Collapse) the drop down list
|
||||
* @param ddlist pointer to drop down list object
|
||||
* @param anim_en LV_ANIM_ON: use animation; LV_ANOM_OFF: not use animations
|
||||
*/
|
||||
void lv_dropdown_close(lv_obj_t * ddlist, lv_anim_enable_t anim);
|
||||
void lv_dropdown_close(lv_obj_t * ddlist);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
|
@ -393,7 +393,7 @@ lv_coord_t lv_page_get_width_grid(lv_obj_t * page, uint8_t div, uint8_t span)
|
||||
lv_coord_t obj_w = lv_page_get_width_fit(page);
|
||||
lv_style_int_t pinner = lv_obj_get_style_pad_inner(page, LV_PAGE_PART_SCRL);
|
||||
|
||||
lv_coord_t r = obj_w / div - (div - 1) * pinner;
|
||||
lv_coord_t r = (obj_w - (div - 1) * pinner) / div;
|
||||
|
||||
r = r * span + (span - 1) * pinner;
|
||||
return r;
|
||||
@ -415,7 +415,7 @@ lv_coord_t lv_page_get_height_grid(lv_obj_t * page, uint8_t div, uint8_t span)
|
||||
lv_coord_t obj_h = lv_page_get_height_fit(page);
|
||||
lv_style_int_t pinner = lv_obj_get_style_pad_inner(page, LV_PAGE_PART_SCRL);
|
||||
|
||||
lv_coord_t r = obj_h / div - (div - 1) * pinner;
|
||||
lv_coord_t r = (obj_h - (div - 1) * pinner) / div;
|
||||
|
||||
r = r * span + (span - 1) * pinner;
|
||||
return r;
|
||||
|
Loading…
x
Reference in New Issue
Block a user