From 0ae70c027ba24b07a1a7aa55b392357b8acd9e0b Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 13 Nov 2020 15:57:38 +0100 Subject: [PATCH 1/3] fix(anim): tune overshoth path --- src/lv_misc/lv_anim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lv_misc/lv_anim.c b/src/lv_misc/lv_anim.c index ed3fd7929..e4a20b391 100644 --- a/src/lv_misc/lv_anim.c +++ b/src/lv_misc/lv_anim.c @@ -341,7 +341,7 @@ lv_anim_value_t lv_anim_path_overshoot(const lv_anim_path_t * path, const lv_ani else t = (uint32_t)((uint32_t)a->act_time * 1024) / a->time; - int32_t step = _lv_bezier3(t, 0, 1000, 2000, 1024); + int32_t step = _lv_bezier3(t, 0, 1000, 1300, 1024); int32_t new_value; new_value = (int32_t)step * (a->end - a->start); From 63dfe9e8e39d82ee9adad5aefe0c59a8e7832f8a Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 13 Nov 2020 16:18:34 +0100 Subject: [PATCH 2/3] fix(imgbtn): guess a the closest availabe state with valid src --- CHANGELOG.md | 1 + src/lv_widgets/lv_imgbtn.c | 44 +++++++++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eff01b4bb..4fd054917 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - fix(arc) fix and improve arc dragging - label: Repair calculate back `dot` character logical error which cause infinite loop. - fix(theme_material): remove the bottom border from tabview header +- fix(imgbtn) guess a the closest availabe state with valid src ## v7.7.1 (04.11.2020) ### Bugfixes diff --git a/src/lv_widgets/lv_imgbtn.c b/src/lv_widgets/lv_imgbtn.c index 17a783409..812f52b06 100644 --- a/src/lv_widgets/lv_imgbtn.c +++ b/src/lv_widgets/lv_imgbtn.c @@ -30,6 +30,7 @@ static lv_design_res_t lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * clip_area, lv_design_mode_t mode); static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * param); static void refr_img(lv_obj_t * imgbtn); +static lv_btn_state_t suggest_state(lv_obj_t * imgbtn, lv_btn_state_t state); /********************** * STATIC VARIABLES @@ -327,7 +328,7 @@ 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); + lv_btn_state_t state = suggest_state(imgbtn, lv_imgbtn_get_state(imgbtn)); /*Simply draw the middle src if no tiled*/ if(!ext->tiled) { @@ -440,7 +441,6 @@ static lv_design_res_t lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * cli draw_dsc.shadow_opa = LV_OPA_TRANSP; lv_obj_init_draw_rect_dsc(imgbtn, LV_OBJ_PART_MAIN, &draw_dsc); - lv_area_t bg_coords; lv_area_copy(&bg_coords, &imgbtn->coords); bg_coords.x1 -= lv_obj_get_style_pad_left(imgbtn, LV_IMGBTN_PART_MAIN); @@ -501,7 +501,7 @@ static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, void * par static void refr_img(lv_obj_t * imgbtn) { lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn); - lv_btn_state_t state = lv_imgbtn_get_state(imgbtn); + lv_btn_state_t state = suggest_state(imgbtn, lv_imgbtn_get_state(imgbtn)); lv_img_header_t header; const void * src = ext->img_src_mid[state]; @@ -531,4 +531,42 @@ static void refr_img(lv_obj_t * imgbtn) lv_obj_invalidate(imgbtn); } +/** + * If `src` is not defined for the current state try to get a state which is related to the curent but has `src`. + * E.g. if the PRESSED src is not set but the RELEASED does, use the RELEASED. + * @param imgbtn pointer to an image button + * @param state the state to convert + * @return the suggested state + */ +static lv_btn_state_t suggest_state(lv_obj_t * imgbtn, lv_btn_state_t state) +{ + lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn); + if(ext->img_src_mid[state] == NULL) { + switch(state) { + case LV_BTN_STATE_PRESSED: + if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED; + break; + case LV_BTN_STATE_CHECKED_RELEASED: + if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED; + break; + case LV_BTN_STATE_CHECKED_PRESSED: + if(ext->img_src_mid[LV_BTN_STATE_CHECKED_RELEASED]) return LV_BTN_STATE_CHECKED_RELEASED; + if(ext->img_src_mid[LV_BTN_STATE_PRESSED]) return LV_BTN_STATE_PRESSED; + if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED; + break; + case LV_BTN_STATE_DISABLED: + if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED; + break; + case LV_BTN_STATE_CHECKED_DISABLED: + if(ext->img_src_mid[LV_BTN_STATE_CHECKED_RELEASED]) return LV_BTN_STATE_CHECKED_RELEASED; + if(ext->img_src_mid[LV_BTN_STATE_RELEASED]) return LV_BTN_STATE_RELEASED; + break; + default: + break; + } + } + + return state; +} + #endif From 20fef93fea45b3dc80cce28478fed16ab9c603d2 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 13 Nov 2020 16:20:02 +0100 Subject: [PATCH 3/3] fix(list): fix removing list elements remove the button from last_sel_btn adn act_sel_btn related to #1895 --- src/lv_widgets/lv_list.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lv_widgets/lv_list.c b/src/lv_widgets/lv_list.c index 8ccdb0b33..0db402c21 100644 --- a/src/lv_widgets/lv_list.c +++ b/src/lv_widgets/lv_list.c @@ -250,9 +250,13 @@ bool lv_list_remove(const lv_obj_t * list, uint16_t index) { LV_ASSERT_OBJ(list, LV_OBJX_NAME); + lv_list_ext_t * ext = lv_obj_get_ext_attr(list); uint16_t count = 0; lv_obj_t * e = lv_list_get_next_btn(list, NULL); while(e != NULL) { + if(e == ext->last_sel_btn) ext->last_sel_btn = NULL; + if(e == ext->act_sel_btn) ext->act_sel_btn = NULL; + if(count == index) { lv_obj_del(e); return true;