diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 7855198c8..250b1287d 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -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; diff --git a/src/lv_themes/lv_theme_material.c b/src/lv_themes/lv_theme_material.c index 0e47f1ff5..37786645e 100644 --- a/src/lv_themes/lv_theme_material.c +++ b/src/lv_themes/lv_theme_material.c @@ -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); diff --git a/src/lv_widgets/lv_bar.c b/src/lv_widgets/lv_bar.c index e2af54291..e0890e212 100644 --- a/src/lv_widgets/lv_bar.c +++ b/src/lv_widgets/lv_bar.c @@ -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; } diff --git a/src/lv_widgets/lv_chart.c b/src/lv_widgets/lv_chart.c index d2a761f77..e20e39423 100644 --- a/src/lv_widgets/lv_chart.c +++ b/src/lv_widgets/lv_chart.c @@ -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 */ diff --git a/src/lv_widgets/lv_cont.c b/src/lv_widgets/lv_cont.c index 788594318..9b91edd32 100644 --- a/src/lv_widgets/lv_cont.c +++ b/src/lv_widgets/lv_cont.c @@ -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); diff --git a/src/lv_widgets/lv_dropdown.c b/src/lv_widgets/lv_dropdown.c index 7bd96eebb..a2f434189 100644 --- a/src/lv_widgets/lv_dropdown.c +++ b/src/lv_widgets/lv_dropdown.c @@ -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 diff --git a/src/lv_widgets/lv_dropdown.h b/src/lv_widgets/lv_dropdown.h index 51cd1d9f2..f88dd72bd 100644 --- a/src/lv_widgets/lv_dropdown.h +++ b/src/lv_widgets/lv_dropdown.h @@ -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 diff --git a/src/lv_widgets/lv_page.c b/src/lv_widgets/lv_page.c index 0879a0765..7b6e85a1a 100644 --- a/src/lv_widgets/lv_page.c +++ b/src/lv_widgets/lv_page.c @@ -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;