1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

minor fixes

This commit is contained in:
Gabor Kiss-Vamosi 2020-04-08 20:54:02 +02:00
parent d04d5ab4d4
commit 1ddf83a73c
8 changed files with 86 additions and 179 deletions

View File

@ -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_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_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; r = r * span + (span - 1) * pinner;
return r; 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_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_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; r = r * span + (span - 1) * pinner;
return r; return r;

View File

@ -42,11 +42,11 @@
#define COLOR_BG_PR_CHK lv_color_darken(theme.color_primary, LV_OPA_20) #define COLOR_BG_PR_CHK lv_color_darken(theme.color_primary, LV_OPA_20)
#define COLOR_BG_DIS COLOR_BG #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_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 (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_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 (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)) #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_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_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_left(&btn, LV_STATE_DEFAULT, LV_DPI / 5);
lv_style_set_pad_right(&btn, LV_STATE_DEFAULT, LV_DPI / 7); 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_top(&btn, LV_STATE_DEFAULT, LV_DPI / 15);
lv_style_set_pad_bottom(&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); 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_set_pad_bottom(&slider_knob, LV_STATE_DEFAULT, LV_DPI / 20);
lv_style_init(&slider_bg); lv_style_init(&slider_bg);
lv_style_set_margin_left(&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 / 20); 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_top(&slider_bg, LV_STATE_DEFAULT, LV_DPI / 20);
lv_style_set_margin_bottom(&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_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_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_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_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_radius(&gauge_needle, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE);
lv_style_set_size(&gauge_needle, LV_STATE_DEFAULT, LV_DPI / 7); 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 #endif
} }
@ -605,8 +605,9 @@ static void keyboard_init(void)
#if LV_USE_KEYBOARD #if LV_USE_KEYBOARD
lv_style_init(&kb_bg); lv_style_init(&kb_bg);
lv_style_set_radius(&kb_bg, LV_STATE_DEFAULT, 0); 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_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_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_right(&kb_bg, LV_STATE_DEFAULT, LV_DPI / 20);
lv_style_set_pad_top(&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_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_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_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 #endif
} }
@ -1009,6 +1011,7 @@ void lv_theme_material_apply(lv_obj_t * obj, lv_theme_style_t name)
case LV_THEME_ARC: case LV_THEME_ARC:
lv_obj_clean_style_list(obj, LV_ARC_PART_BG); lv_obj_clean_style_list(obj, LV_ARC_PART_BG);
list = lv_obj_get_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_style_list_add_style(list, &arc_bg);
lv_obj_clean_style_list(obj, LV_ARC_PART_INDIC); lv_obj_clean_style_list(obj, LV_ARC_PART_INDIC);

View File

@ -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.pattern_opa = LV_OPA_TRANSP;
draw_dsc.outline_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_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); lv_draw_rect(&bar->coords, clip_area, &draw_dsc);
} }
else if(mode == LV_DESIGN_DRAW_POST) { 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)) { (!hor && lv_area_get_height(&ext->indic_area) > bg_radius * 2)) {
lv_opa_t bg_opa = draw_indic_dsc.bg_opa; lv_opa_t bg_opa = draw_indic_dsc.bg_opa;
lv_opa_t border_opa = draw_indic_dsc.border_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; const void * pattern_src = draw_indic_dsc.pattern_image;
draw_indic_dsc.bg_opa = LV_OPA_TRANSP; draw_indic_dsc.bg_opa = LV_OPA_TRANSP;
draw_indic_dsc.border_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); lv_draw_rect(&ext->indic_area, clip_area, &draw_indic_dsc);
draw_indic_dsc.bg_opa = bg_opa; draw_indic_dsc.bg_opa = bg_opa;
draw_indic_dsc.border_opa = border_opa; draw_indic_dsc.border_opa = border_opa;
draw_indic_dsc.value_opa = value_opa;
draw_indic_dsc.pattern_image = pattern_src; draw_indic_dsc.pattern_image = pattern_src;
} }

View File

@ -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 y_ofs = series_area->y1;
lv_coord_t h = lv_area_get_height(series_area); lv_coord_t h = lv_area_get_height(series_area);
lv_coord_t w = lv_area_get_width(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 */ char buf[LV_CHART_AXIS_TICK_LABEL_MAX_LEN + 1]; /* up to N symbols per label + null terminator */
/* calculate the size of tick marks */ /* calculate the size of tick marks */

View File

@ -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*/ /*If there is only one object in the row then align it to the middle*/
else if(obj_num == 1) { else if(obj_num == 1) {
lv_obj_align(child_rs, cont, LV_ALIGN_IN_TOP_MID, 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)); 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*/ /*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 * obj1 = child_rs;
lv_obj_t * obj2 = lv_ll_get_prev(&cont->child_ll, 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); w_row = lv_obj_get_width(obj1) + lv_obj_get_width(obj2);

View File

@ -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 lv_res_t page_release_handler(lv_obj_t * page);
static void page_press_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 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); 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 * 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->option_cnt = 0;
ext->dir = LV_DROPDOWN_DIR_DOWN; ext->dir = LV_DROPDOWN_DIR_DOWN;
ext->max_height = (3 * lv_disp_get_ver_res(NULL)) / 4; 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_page);
lv_style_list_init(&ext->style_scrlbar); lv_style_list_init(&ext->style_scrlbar);
lv_style_list_init(&ext->style_selected); 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->sel_opt_id_orig = copy_ext->sel_opt_id;
ext->symbol = copy_ext->symbol; ext->symbol = copy_ext->symbol;
ext->max_height = copy_ext->max_height; ext->max_height = copy_ext->max_height;
ext->anim_time = copy_ext->anim_time;
ext->text = copy_ext->text; ext->text = copy_ext->text;
ext->dir = copy_ext->dir; ext->dir = copy_ext->dir;
ext->show_selected = copy_ext->show_selected; 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); 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 * 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 * 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 * Open the drop down list with or without animation
* @param ddlist pointer to drop down list object * @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); lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
if(ext->page) return; 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; 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); 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); if(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(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(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); 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(); if(ext->dir == LV_DROPDOWN_DIR_LEFT || ext->dir == LV_DROPDOWN_DIR_RIGHT) {
bool moved = false; if(ext->page->coords.y2 > LV_VER_RES) {
if(ext->dir != LV_DROPDOWN_DIR_UP) { lv_obj_set_y(ext->page, lv_obj_get_y(ext->page) - (ext->page->coords.y2 - LV_VER_RES));
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;
} }
} }
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 * Close (Collapse) the drop down list
* @param ddlist pointer to drop down list object * @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); lv_dropdown_ext_t * ext = lv_obj_get_ext_attr(ddlist);
if(ext->page == NULL) return; if(ext->page == NULL) return;
ext->pr_opt_id = LV_DROPDOWN_PR_NONE; ext->pr_opt_id = LV_DROPDOWN_PR_NONE;
lv_obj_del(ext->page);
if(ext->anim_time == 0 || anim == LV_ANIM_OFF) { ext->page = NULL;
#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
}
} }
/********************** /**********************
@ -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) { else if(sign == LV_SIGNAL_CLEANUP) {
lv_dropdown_close(ddlist, LV_ANIM_OFF); lv_dropdown_close(ddlist);
if(ext->static_txt == 0) { if(ext->static_txt == 0) {
lv_mem_free(ext->options); lv_mem_free(ext->options);
ext->options = NULL; 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*/ /*Encoders need special handling*/
if(indev_type == LV_INDEV_TYPE_ENCODER) { if(indev_type == LV_INDEV_TYPE_ENCODER) {
/*Open the list if editing*/ /*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*/ /*Close the list if navigating*/
else else
lv_dropdown_close(ddlist, LV_ANIM_ON); lv_dropdown_close(ddlist);
} }
#endif #endif
} }
else if(sign == LV_SIGNAL_DEFOCUS || sign == LV_SIGNAL_LEAVE) { 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) { else if(sign == LV_SIGNAL_RELEASED) {
if(lv_indev_is_dragging(lv_indev_get_act()) == false) { if(lv_indev_is_dragging(lv_indev_get_act()) == false) {
if(ext->page) { if(ext->page) {
lv_dropdown_close(ddlist, LV_ANIM_ON); lv_dropdown_close(ddlist);
if(ext->sel_opt_id_orig != ext->sel_opt_id) { if(ext->sel_opt_id_orig != ext->sel_opt_id) {
ext->sel_opt_id_orig = ext->sel_opt_id; ext->sel_opt_id_orig = ext->sel_opt_id;
lv_obj_invalidate(ddlist); lv_obj_invalidate(ddlist);
} }
} }
else { else {
lv_dropdown_open(ddlist, LV_ANIM_ON); lv_dropdown_open(ddlist);
} }
} }
else { 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) { 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) { else if(sign == LV_SIGNAL_STYLE_CHG) {
lv_style_int_t top = lv_obj_get_style_pad_top(ddlist, LV_DROPDOWN_PART_MAIN); 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); char c = *((char *)param);
if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) { if(c == LV_KEY_RIGHT || c == LV_KEY_DOWN) {
if(ext->page == NULL) { 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) { else if(ext->sel_opt_id + 1 < ext->option_cnt) {
ext->sel_opt_id++; ext->sel_opt_id++;
pos_selected(ddlist); position_to_selected(ddlist);
} }
} }
else if(c == LV_KEY_LEFT || c == LV_KEY_UP) { else if(c == LV_KEY_LEFT || c == LV_KEY_UP) {
if(ext->page == NULL) { if(ext->page == NULL) {
lv_dropdown_open(ddlist, LV_ANIM_ON); lv_dropdown_open(ddlist);
} }
else if(ext->sel_opt_id > 0) { else if(ext->sel_opt_id > 0) {
ext->sel_opt_id--; ext->sel_opt_id--;
pos_selected(ddlist); position_to_selected(ddlist);
} }
} }
else if(c == LV_KEY_ESC) { else if(c == LV_KEY_ESC) {
ext->sel_opt_id = ext->sel_opt_id_orig; 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) { 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; 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*/ /*Invalidate to refresh the text*/
if(ext->show_selected) lv_obj_invalidate(ddlist); 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 * Set the position of list when it is closed to show the selected item
* @param ddlist pointer to a drop down list * @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); 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); 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 #endif

View File

@ -62,7 +62,6 @@ typedef struct {
uint16_t sel_opt_id; /*Index of the currently selected option*/ 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 sel_opt_id_orig; /*Store the original index on focus*/
uint16_t pr_opt_id; /*Index of the currently pressed option*/ uint16_t pr_opt_id; /*Index of the currently pressed option*/
uint16_t anim_time;
lv_dropdown_dir_t dir : 2; lv_dropdown_dir_t dir : 2;
uint8_t show_selected : 1; uint8_t show_selected : 1;
uint8_t static_txt : 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); 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 * 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); 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 * 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 * Open the drop down list with or without animation
* @param ddlist pointer to drop down list object * @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 * Close (Collapse) the drop down list
* @param ddlist pointer to drop down list object * @param ddlist pointer to drop down list object
* @param anim_en LV_ANIM_ON: use animation; LV_ANOM_OFF: not use animations * @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 * MACROS

View File

@ -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_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_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; r = r * span + (span - 1) * pinner;
return r; 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_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_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; r = r * span + (span - 1) * pinner;
return r; return r;