From b6388bc5ac109068de23532405bf1b3547ff0723 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Sat, 15 Feb 2020 02:30:20 +0100 Subject: [PATCH] clean up the widgets style lists on delete --- src/lv_widgets/lv_arc.c | 3 +- src/lv_widgets/lv_chart.c | 3 + src/lv_widgets/lv_cpicker.c | 2 +- src/lv_widgets/lv_dropdown.c | 3 + src/lv_widgets/lv_gauge.c | 2 + src/lv_widgets/lv_list.c | 2 +- src/lv_widgets/lv_page.c | 125 ++++++++++++++++++----------------- src/lv_widgets/lv_page.h | 2 +- src/lv_widgets/lv_spinbox.c | 2 +- src/lv_widgets/lv_switch.c | 5 +- src/lv_widgets/lv_table.c | 18 +++-- src/lv_widgets/lv_textarea.c | 5 +- 12 files changed, 96 insertions(+), 76 deletions(-) diff --git a/src/lv_widgets/lv_arc.c b/src/lv_widgets/lv_arc.c index a609f7a29..b3438f55f 100644 --- a/src/lv_widgets/lv_arc.c +++ b/src/lv_widgets/lv_arc.c @@ -419,7 +419,8 @@ static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * param) if(sign == LV_SIGNAL_GET_TYPE) return lv_obj_handle_get_type_signal(param, LV_OBJX_NAME); if(sign == LV_SIGNAL_CLEANUP) { - /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/ + lv_arc_ext_t * ext = lv_obj_get_ext_attr(arc); + lv_style_list_reset(&ext->style_arc); } return res; diff --git a/src/lv_widgets/lv_chart.c b/src/lv_widgets/lv_chart.c index 608633de2..2f11db407 100644 --- a/src/lv_widgets/lv_chart.c +++ b/src/lv_widgets/lv_chart.c @@ -652,6 +652,9 @@ static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void * param lv_mem_free(*datal); } lv_ll_clear(&ext->series_ll); + + lv_style_list_reset(&ext->style_series); + lv_style_list_reset(&ext->style_series_bg); } return res; diff --git a/src/lv_widgets/lv_cpicker.c b/src/lv_widgets/lv_cpicker.c index f7ae96d6c..ac9fd5c08 100644 --- a/src/lv_widgets/lv_cpicker.c +++ b/src/lv_widgets/lv_cpicker.c @@ -661,7 +661,7 @@ static lv_res_t lv_cpicker_signal(lv_obj_t * cpicker, lv_signal_t sign, void * p lv_cpicker_ext_t * ext = lv_obj_get_ext_attr(cpicker); if(sign == LV_SIGNAL_CLEANUP) { - /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/ + lv_style_list_reset(&ext->indic.style_list); } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) { lv_style_int_t left = lv_obj_get_style_pad_left(cpicker, LV_CPICKER_PART_INDIC); lv_style_int_t right = lv_obj_get_style_pad_right(cpicker, LV_CPICKER_PART_INDIC); diff --git a/src/lv_widgets/lv_dropdown.c b/src/lv_widgets/lv_dropdown.c index d6eed80d7..171bc7884 100644 --- a/src/lv_widgets/lv_dropdown.c +++ b/src/lv_widgets/lv_dropdown.c @@ -740,6 +740,9 @@ 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_style_list_reset(&ext->style_page); + lv_style_list_reset(&ext->style_scrlbar); + lv_style_list_reset(&ext->style_selected); } else if(sign == LV_SIGNAL_FOCUS) { #if LV_USE_GROUP diff --git a/src/lv_widgets/lv_gauge.c b/src/lv_widgets/lv_gauge.c index e6e6bf787..5b4b18548 100644 --- a/src/lv_widgets/lv_gauge.c +++ b/src/lv_widgets/lv_gauge.c @@ -397,6 +397,8 @@ static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void * param if(sign == LV_SIGNAL_CLEANUP) { lv_mem_free(ext->values); ext->values = NULL; + lv_style_list_reset(&ext->style_needle); + lv_style_list_reset(&ext->style_strong); } return res; diff --git a/src/lv_widgets/lv_list.c b/src/lv_widgets/lv_list.c index b17db342e..22e299d1f 100644 --- a/src/lv_widgets/lv_list.c +++ b/src/lv_widgets/lv_list.c @@ -830,7 +830,7 @@ static lv_style_list_t * lv_list_get_style(lv_obj_t * list, uint8_t part) style_dsc_p = &ext->page.scrl->style_list; break; case LV_LIST_PART_SCRLBAR: - style_dsc_p = &ext->page.sb.style; + style_dsc_p = &ext->page.scrlbar.style; break; #if LV_USE_ANIMATION case LV_LIST_PART_EDGE_FLASH: diff --git a/src/lv_widgets/lv_page.c b/src/lv_widgets/lv_page.c index 79d8918c7..6826ecac3 100644 --- a/src/lv_widgets/lv_page.c +++ b/src/lv_widgets/lv_page.c @@ -96,10 +96,10 @@ lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy) } ext->scrl = NULL; - lv_style_list_init(&ext->sb.style); - ext->sb.hor_draw = 0; - ext->sb.ver_draw = 0; - ext->sb.mode = LV_SB_MODE_AUTO; + lv_style_list_init(&ext->scrlbar.style); + ext->scrlbar.hor_draw = 0; + ext->scrlbar.ver_draw = 0; + ext->scrlbar.mode = LV_SB_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->sb.mode); + lv_page_set_sb_mode(page, ext->scrlbar.mode); lv_theme_apply(page, LV_THEME_PAGE); @@ -147,7 +147,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->sb.mode); + lv_page_set_sb_mode(page, copy_ext->scrlbar.mode); } @@ -184,19 +184,19 @@ void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode) LV_ASSERT_OBJ(page, LV_OBJX_NAME); lv_page_ext_t * ext = lv_obj_get_ext_attr(page); - if(ext->sb.mode == sb_mode) return; + if(ext->scrlbar.mode == sb_mode) return; if(sb_mode == LV_SB_MODE_HIDE) - ext->sb.mode |= LV_SB_MODE_HIDE; /*Set the hidden flag*/ + ext->scrlbar.mode |= LV_SB_MODE_HIDE; /*Set the hidden flag*/ else if(sb_mode == LV_SB_MODE_UNHIDE) - ext->sb.mode &= (~LV_SB_MODE_HIDE); /*Clear the hidden flag*/ + ext->scrlbar.mode &= (~LV_SB_MODE_HIDE); /*Clear the hidden flag*/ else { - if(ext->sb.mode & LV_SB_MODE_HIDE) sb_mode |= LV_SB_MODE_HIDE; - ext->sb.mode = sb_mode; + if(ext->scrlbar.mode & LV_SB_MODE_HIDE) sb_mode |= LV_SB_MODE_HIDE; + ext->scrlbar.mode = sb_mode; } - ext->sb.hor_draw = 0; - ext->sb.ver_draw = 0; + ext->scrlbar.hor_draw = 0; + ext->scrlbar.ver_draw = 0; lv_page_sb_refresh(page); lv_obj_invalidate(page); @@ -303,7 +303,7 @@ lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page) LV_ASSERT_OBJ(page, LV_OBJX_NAME); lv_page_ext_t * ext = lv_obj_get_ext_attr(page); - return ext->sb.mode; + return ext->scrlbar.mode; } /** @@ -653,30 +653,30 @@ static lv_design_res_t lv_page_design(lv_obj_t * page, const lv_area_t * clip_ar lv_area_t sb_hor_area; lv_area_t sb_ver_area; /*Convert the relative coordinates to absolute*/ - lv_area_copy(&sb_hor_area, &ext->sb.hor_area); + lv_area_copy(&sb_hor_area, &ext->scrlbar.hor_area); sb_hor_area.x1 += page->coords.x1; sb_hor_area.y1 += page->coords.y1; sb_hor_area.x2 += page->coords.x1; sb_hor_area.y2 += page->coords.y1; /*Convert the relative coordinates to absolute*/ - lv_area_copy(&sb_ver_area, &ext->sb.ver_area); + lv_area_copy(&sb_ver_area, &ext->scrlbar.ver_area); sb_ver_area.x1 += page->coords.x1; sb_ver_area.y1 += page->coords.y1; sb_ver_area.x2 += page->coords.x1; sb_ver_area.y2 += page->coords.y1; - if((ext->sb.hor_draw && lv_area_is_on(&sb_hor_area, clip_area)) || - (ext->sb.ver_draw && lv_area_is_on(&sb_ver_area, clip_area))) { + if((ext->scrlbar.hor_draw && lv_area_is_on(&sb_hor_area, clip_area)) || + (ext->scrlbar.ver_draw && lv_area_is_on(&sb_ver_area, clip_area))) { /*Draw the scrollbars*/ 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->sb.hor_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) { + if(ext->scrlbar.hor_draw && (ext->scrlbar.mode & LV_SB_MODE_HIDE) == 0) { lv_draw_rect(&sb_hor_area, clip_area, &rect_dsc); } - if(ext->sb.ver_draw && (ext->sb.mode & LV_SB_MODE_HIDE) == 0) { + if(ext->scrlbar.ver_draw && (ext->scrlbar.mode & LV_SB_MODE_HIDE) == 0) { lv_draw_rect(&sb_ver_area, clip_area, &rect_dsc); } } @@ -765,7 +765,7 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) } } - lv_style_list_reset(&ext->sb.style); + lv_style_list_reset(&ext->scrlbar.style); #if LV_USE_ANIMATION lv_style_list_reset(&ext->edge_flash.style); #endif @@ -817,11 +817,11 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) ext->scrl->signal_cb(ext->scrl, LV_SIGNAL_COORD_CHG, &ext->scrl->coords); lv_style_int_t sb_width = lv_obj_get_style_size(page, LV_PAGE_PART_SCRLBAR); - lv_area_set_height(&ext->sb.hor_area, sb_width); - lv_area_set_width(&ext->sb.ver_area, sb_width); + lv_area_set_height(&ext->scrlbar.hor_area, sb_width); + lv_area_set_width(&ext->scrlbar.ver_area, sb_width); /*The scrollbars are important only if they are visible now*/ - if(ext->sb.hor_draw || ext->sb.ver_draw) lv_page_sb_refresh(page); + if(ext->scrlbar.hor_draw || ext->scrlbar.ver_draw) lv_page_sb_refresh(page); /*Refresh the ext. size because the scrollbars might be positioned out of the page*/ refr_ext_draw_pad(page); @@ -833,7 +833,7 @@ static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void * param) ext->scrl->signal_cb(ext->scrl, LV_SIGNAL_COORD_CHG, &ext->scrl->coords); /*The scrollbars are important only if they are visible now*/ - if(ext->sb.hor_draw || ext->sb.ver_draw) lv_page_sb_refresh(page); + if(ext->scrlbar.hor_draw || ext->scrlbar.ver_draw) lv_page_sb_refresh(page); } } else if(sign == LV_SIGNAL_REFR_EXT_DRAW_PAD) { refr_ext_draw_pad(page); @@ -1003,25 +1003,25 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi } /*Hide scrollbars if required*/ - if(page_ext->sb.mode == LV_SB_MODE_DRAG) { + if(page_ext->scrlbar.mode == LV_SB_MODE_DRAG) { lv_area_t sb_area_tmp; - if(page_ext->sb.hor_draw) { - lv_area_copy(&sb_area_tmp, &page_ext->sb.hor_area); + if(page_ext->scrlbar.hor_draw) { + lv_area_copy(&sb_area_tmp, &page_ext->scrlbar.hor_area); sb_area_tmp.x1 += page->coords.x1; sb_area_tmp.y1 += page->coords.y1; sb_area_tmp.x2 += page->coords.x1; sb_area_tmp.y2 += page->coords.y1; lv_obj_invalidate_area(page, &sb_area_tmp); - page_ext->sb.hor_draw = 0; + page_ext->scrlbar.hor_draw = 0; } - if(page_ext->sb.ver_draw) { - lv_area_copy(&sb_area_tmp, &page_ext->sb.ver_area); + if(page_ext->scrlbar.ver_draw) { + lv_area_copy(&sb_area_tmp, &page_ext->scrlbar.ver_area); sb_area_tmp.x1 += page->coords.x1; sb_area_tmp.y1 += page->coords.y1; sb_area_tmp.x2 += page->coords.x1; sb_area_tmp.y2 += page->coords.y1; lv_obj_invalidate_area(page, &sb_area_tmp); - page_ext->sb.ver_draw = 0; + page_ext->scrlbar.ver_draw = 0; } } } else if(sign == LV_SIGNAL_FOCUS) { @@ -1037,6 +1037,11 @@ static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t sign, voi } else if(sign == LV_SIGNAL_CLEANUP) { page_ext->scrl = NULL; +#if LV_USE_ANIMATION + lv_style_list_reset(&page_ext->edge_flash.style); +#endif + lv_style_list_reset(&page_ext->scrlbar.style); + } return res; } @@ -1083,7 +1088,7 @@ static lv_style_list_t * lv_page_get_style(lv_obj_t * page, uint8_t part) style_dsc_p = lv_obj_get_style_list(ext->scrl, LV_CONT_PART_MAIN); break; case LV_PAGE_PART_SCRLBAR: - style_dsc_p = &ext->sb.style; + style_dsc_p = &ext->scrlbar.style; break; #if LV_USE_ANIMATION case LV_PAGE_PART_EDGE_FLASH: @@ -1128,25 +1133,25 @@ 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->sb.mode == LV_SB_MODE_OFF) return; + if(ext->scrlbar.mode == LV_SB_MODE_OFF) return; - if(ext->sb.mode == LV_SB_MODE_ON) { - ext->sb.hor_draw = 1; - ext->sb.ver_draw = 1; + if(ext->scrlbar.mode == LV_SB_MODE_ON) { + ext->scrlbar.hor_draw = 1; + ext->scrlbar.ver_draw = 1; } /*Invalidate the current (old) scrollbar areas*/ lv_area_t sb_area_tmp; - if(ext->sb.hor_draw != 0) { - lv_area_copy(&sb_area_tmp, &ext->sb.hor_area); + if(ext->scrlbar.hor_draw != 0) { + lv_area_copy(&sb_area_tmp, &ext->scrlbar.hor_area); sb_area_tmp.x1 += page->coords.x1; sb_area_tmp.y1 += page->coords.y1; sb_area_tmp.x2 += page->coords.x1; sb_area_tmp.y2 += page->coords.y1; lv_obj_invalidate_area(page, &sb_area_tmp); } - if(ext->sb.ver_draw != 0) { - lv_area_copy(&sb_area_tmp, &ext->sb.ver_area); + if(ext->scrlbar.ver_draw != 0) { + lv_area_copy(&sb_area_tmp, &ext->scrlbar.ver_area); sb_area_tmp.x1 += page->coords.x1; sb_area_tmp.y1 += page->coords.y1; sb_area_tmp.x2 += page->coords.x1; @@ -1154,69 +1159,69 @@ static void lv_page_sb_refresh(lv_obj_t * page) lv_obj_invalidate_area(page, &sb_area_tmp); } - if(ext->sb.mode == LV_SB_MODE_DRAG && lv_indev_is_dragging(lv_indev_get_act()) == false) { - ext->sb.hor_draw = 0; - ext->sb.ver_draw = 0; + if(ext->scrlbar.mode == LV_SB_MODE_DRAG && lv_indev_is_dragging(lv_indev_get_act()) == false) { + ext->scrlbar.hor_draw = 0; + ext->scrlbar.ver_draw = 0; return; } /*Full sized horizontal scrollbar*/ if(scrl_w <= obj_w - bg_left - bg_right) { - lv_area_set_width(&ext->sb.hor_area, obj_w - 2 * sb_hor_pad); - lv_area_set_pos(&ext->sb.hor_area, sb_hor_pad, + 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->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.hor_draw = 0; + if(ext->scrlbar.mode == LV_SB_MODE_AUTO || ext->scrlbar.mode == LV_SB_MODE_DRAG) ext->scrlbar.hor_draw = 0; } /*Smaller horizontal scrollbar*/ else { size_tmp = (obj_w * (obj_w - (2 * sb_hor_pad))) / (scrl_w + bg_left + bg_right); if(size_tmp < LV_PAGE_SB_MIN_SIZE) size_tmp = LV_PAGE_SB_MIN_SIZE; - lv_area_set_width(&ext->sb.hor_area, size_tmp); + lv_area_set_width(&ext->scrlbar.hor_area, size_tmp); - lv_area_set_pos(&ext->sb.hor_area, + lv_area_set_pos(&ext->scrlbar.hor_area, sb_hor_pad + (-(lv_obj_get_x(scrl) -bg_left) * (obj_w - size_tmp - 2 * sb_hor_pad)) / (scrl_w + bg_left + bg_right - obj_w), obj_h - sb_width - sb_bottom); - if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.hor_draw = 1; + if(ext->scrlbar.mode == LV_SB_MODE_AUTO || ext->scrlbar.mode == LV_SB_MODE_DRAG) ext->scrlbar.hor_draw = 1; } /*Full sized vertical scroll bar*/ if(scrl_h <= obj_h - bg_top - bg_bottom) { - lv_area_set_height(&ext->sb.ver_area, obj_h - 2 * sb_ver_pad); - lv_area_set_pos(&ext->sb.ver_area, + 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->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.ver_draw = 0; + if(ext->scrlbar.mode == LV_SB_MODE_AUTO || ext->scrlbar.mode == LV_SB_MODE_DRAG) ext->scrlbar.ver_draw = 0; } /*Smaller vertical scroll bar*/ else { size_tmp = (obj_h * (obj_h - (2 * sb_ver_pad))) / (scrl_h + bg_top + bg_bottom); if(size_tmp < LV_PAGE_SB_MIN_SIZE) size_tmp = LV_PAGE_SB_MIN_SIZE; - lv_area_set_height(&ext->sb.ver_area, size_tmp); + lv_area_set_height(&ext->scrlbar.ver_area, size_tmp); - lv_area_set_pos(&ext->sb.ver_area, + lv_area_set_pos(&ext->scrlbar.ver_area, obj_w - sb_width - sb_right, sb_ver_pad + (-(lv_obj_get_y(scrl) - bg_left) * (obj_h - size_tmp - 2 * sb_ver_pad)) / (scrl_h + bg_top + bg_bottom - obj_h)); - if(ext->sb.mode == LV_SB_MODE_AUTO || ext->sb.mode == LV_SB_MODE_DRAG) ext->sb.ver_draw = 1; + if(ext->scrlbar.mode == LV_SB_MODE_AUTO || ext->scrlbar.mode == LV_SB_MODE_DRAG) ext->scrlbar.ver_draw = 1; } /*Invalidate the new scrollbar areas*/ - if(ext->sb.hor_draw != 0) { - lv_area_copy(&sb_area_tmp, &ext->sb.hor_area); + if(ext->scrlbar.hor_draw != 0) { + lv_area_copy(&sb_area_tmp, &ext->scrlbar.hor_area); sb_area_tmp.x1 += page->coords.x1; sb_area_tmp.y1 += page->coords.y1; sb_area_tmp.x2 += page->coords.x1; sb_area_tmp.y2 += page->coords.y1; lv_obj_invalidate_area(page, &sb_area_tmp); } - if(ext->sb.ver_draw != 0) { - lv_area_copy(&sb_area_tmp, &ext->sb.ver_area); + if(ext->scrlbar.ver_draw != 0) { + lv_area_copy(&sb_area_tmp, &ext->scrlbar.ver_area); sb_area_tmp.x1 += page->coords.x1; sb_area_tmp.y1 += page->coords.y1; sb_area_tmp.x2 += page->coords.x1; diff --git a/src/lv_widgets/lv_page.h b/src/lv_widgets/lv_page.h index ab1ae0d09..8dbbe159b 100644 --- a/src/lv_widgets/lv_page.h +++ b/src/lv_widgets/lv_page.h @@ -63,7 +63,7 @@ typedef struct 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'*/ - } sb; + } scrlbar; #if LV_USE_ANIMATION struct { diff --git a/src/lv_widgets/lv_spinbox.c b/src/lv_widgets/lv_spinbox.c index ab0e0df6b..a9a14de01 100644 --- a/src/lv_widgets/lv_spinbox.c +++ b/src/lv_widgets/lv_spinbox.c @@ -420,7 +420,7 @@ static lv_style_list_t * lv_spinbox_get_style(lv_obj_t * ta, uint8_t part) style_dsc_p = &ta->style_list; break; case LV_SPINBOX_PART_SCRLBAR: - style_dsc_p = &ext->ta.page.sb.style; + style_dsc_p = &ext->ta.page.scrlbar.style; break; case LV_SPINBOX_PART_CURSOR: style_dsc_p = &ext->ta.cursor.style; diff --git a/src/lv_widgets/lv_switch.c b/src/lv_widgets/lv_switch.c index 3796fa98d..7a51b2610 100644 --- a/src/lv_widgets/lv_switch.c +++ b/src/lv_widgets/lv_switch.c @@ -278,9 +278,10 @@ static lv_res_t lv_switch_signal(lv_obj_t * sw, lv_signal_t sign, void * param) if(res != LV_RES_OK) return res; if(sign == LV_SIGNAL_CLEANUP) { - /*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/ + lv_switch_ext_t * ext = lv_obj_get_ext_attr(sw); + lv_style_list_reset(&ext->style_knob); } else if(sign == LV_SIGNAL_RELEASED) { - if(lv_switch_get_state(sw)) lv_switch_off(sw, LV_ANIM_ON); + if(lv_switch_get_state(sw)) lv_switch_off(sw, LV_ANIM_ON); else lv_switch_on(sw, LV_ANIM_ON); res = lv_event_send(sw, LV_EVENT_VALUE_CHANGED, NULL); diff --git a/src/lv_widgets/lv_table.c b/src/lv_widgets/lv_table.c index 21642d13d..fdda8e2b8 100644 --- a/src/lv_widgets/lv_table.c +++ b/src/lv_widgets/lv_table.c @@ -782,15 +782,19 @@ static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void * param if(sign == LV_SIGNAL_CLEANUP) { /*Free the cell texts*/ lv_table_ext_t * ext = lv_obj_get_ext_attr(table); - uint16_t cell; - for(cell = 0; cell < ext->col_cnt * ext->row_cnt; cell++) { - if(ext->cell_data[cell]) { - lv_mem_free(ext->cell_data[cell]); - ext->cell_data[cell] = NULL; + uint16_t i; + for(i = 0; i < ext->col_cnt * ext->row_cnt; i++) { + if(ext->cell_data[i]) { + lv_mem_free(ext->cell_data[i]); + ext->cell_data[i] = NULL; } } - if(ext->cell_data != NULL) - lv_mem_free(ext->cell_data); + + if(ext->cell_data != NULL) lv_mem_free(ext->cell_data); + + for(i = 0; i < LV_TABLE_CELL_STYLE_CNT; i++) { + lv_style_list_reset(&ext->cell_style[i]); + } } else if(sign == LV_SIGNAL_STYLE_CHG) { refr_size(table); diff --git a/src/lv_widgets/lv_textarea.c b/src/lv_widgets/lv_textarea.c index c84bfb1e5..95890c342 100644 --- a/src/lv_widgets/lv_textarea.c +++ b/src/lv_widgets/lv_textarea.c @@ -1391,8 +1391,9 @@ static lv_res_t lv_textarea_signal(lv_obj_t * ta, lv_signal_t sign, void * param lv_textarea_ext_t * ext = lv_obj_get_ext_attr(ta); if(sign == LV_SIGNAL_CLEANUP) { if(ext->pwd_tmp != NULL) lv_mem_free(ext->pwd_tmp); - /* (The created label will be deleted automatically) */ + + lv_style_list_reset(&ext->cursor.style); } else if(sign == LV_SIGNAL_STYLE_CHG) { if(ext->label) { if(ext->one_line) { @@ -1556,7 +1557,7 @@ static lv_style_list_t * lv_textarea_get_style(lv_obj_t * ta, uint8_t part) style_dsc_p = &ta->style_list; break; case LV_TEXTAREA_PART_SCRLBAR: - style_dsc_p = &ext->page.sb.style; + style_dsc_p = &ext->page.scrlbar.style; break; case LV_TEXTAREA_PART_CURSOR: style_dsc_p = &ext->cursor.style;