diff --git a/lv_objx/lv_bar.c b/lv_objx/lv_bar.c index 4efe3fdb78..1e938995c3 100644 --- a/lv_objx/lv_bar.c +++ b/lv_objx/lv_bar.c @@ -110,6 +110,8 @@ lv_obj_t * lv_bar_create(lv_obj_t * par, lv_obj_t * copy) void lv_bar_set_value(lv_obj_t * bar, int16_t value) { lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar); + if(ext->cur_value == value) return; + ext->cur_value = value > ext->max_value ? ext->max_value : value; ext->cur_value = ext->cur_value < ext->min_value ? ext->min_value : ext->cur_value; lv_obj_invalidate(bar); @@ -125,6 +127,8 @@ void lv_bar_set_value(lv_obj_t * bar, int16_t value) void lv_bar_set_value_anim(lv_obj_t * bar, int16_t value, uint16_t anim_time) { lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar); + if(ext->cur_value == value) return; + int16_t new_value; new_value = value > ext->max_value ? ext->max_value : value; new_value = new_value < ext->min_value ? ext->min_value : new_value; @@ -157,6 +161,8 @@ void lv_bar_set_value_anim(lv_obj_t * bar, int16_t value, uint16_t anim_time) void lv_bar_set_range(lv_obj_t * bar, int16_t min, int16_t max) { lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar); + if(ext->min_value == min && ext->max_value == max) return; + ext->max_value = max; ext->min_value = min; if(ext->cur_value > max) { diff --git a/lv_objx/lv_chart.c b/lv_objx/lv_chart.c index e2b302de7f..c424928580 100644 --- a/lv_objx/lv_chart.c +++ b/lv_objx/lv_chart.c @@ -159,6 +159,7 @@ lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color) void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv) { lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(ext->hdiv_cnt == hdiv && ext->vdiv_cnt == vdiv) return; ext->hdiv_cnt = hdiv; ext->vdiv_cnt = vdiv; @@ -175,6 +176,7 @@ void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t vdiv) void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax) { lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(ext->ymin == ymin && ext->ymax == ymax) return; ext->ymin = ymin; ext->ymax = ymax; @@ -190,6 +192,8 @@ void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax) void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type) { lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(ext->type == type) return; + ext->type = type; lv_chart_refresh(chart); @@ -203,6 +207,8 @@ void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type) void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt) { lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(ext->point_cnt == point_cnt) return; + lv_chart_series_t *ser; uint16_t point_cnt_old = ext->point_cnt; uint16_t i; @@ -233,6 +239,8 @@ void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt) void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa) { lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(ext->series.opa == opa) return; + ext->series.opa = opa; lv_obj_invalidate(chart); } @@ -245,6 +253,8 @@ void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa) void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width) { lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(ext->series.width == width) return; + ext->series.width = width; lv_obj_invalidate(chart); } @@ -256,7 +266,10 @@ void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width) void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff) { lv_chart_ext_t * ext = lv_obj_get_ext_attr(chart); + if(ext->series.dark == dark_eff) return; + ext->series.dark = dark_eff; + lv_obj_invalidate(chart); } /** diff --git a/lv_objx/lv_cont.c b/lv_objx/lv_cont.c index 7a3e09be8e..9d8cc01114 100644 --- a/lv_objx/lv_cont.c +++ b/lv_objx/lv_cont.c @@ -113,6 +113,8 @@ lv_obj_t * lv_cont_create(lv_obj_t * par, lv_obj_t * copy) void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout) { lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont); + if(ext->layout == layout) return; + ext->layout = layout; /*Send a signal to refresh the layout*/ @@ -131,6 +133,8 @@ void lv_cont_set_fit(lv_obj_t * cont, bool hor_en, bool ver_en) { lv_obj_invalidate(cont); lv_cont_ext_t * ext = lv_obj_get_ext_attr(cont); + if(ext->hor_fit == hor_en && ext->ver_fit == ver_en) return; + ext->hor_fit = hor_en == false ? 0 : 1; ext->ver_fit = ver_en == false ? 0 : 1; diff --git a/lv_objx/lv_ddlist.c b/lv_objx/lv_ddlist.c index 0e3b90968f..314fcdb2a4 100644 --- a/lv_objx/lv_ddlist.c +++ b/lv_objx/lv_ddlist.c @@ -172,6 +172,7 @@ void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options) void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt) { lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist); + if(ext->sel_opt_id == sel_opt) return; ext->sel_opt_id = sel_opt < ext->option_cnt ? sel_opt : ext->option_cnt - 1; @@ -203,6 +204,8 @@ void lv_ddlist_set_action(lv_obj_t * ddlist, lv_action_t action) void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h) { lv_ddlist_ext_t * ext = lv_obj_get_ext_attr(ddlist); + if(ext->fix_height == h) return; + ext->fix_height = h; lv_ddlist_refr_size(ddlist, false); @@ -218,7 +221,6 @@ void lv_ddlist_set_hor_fit(lv_obj_t * ddlist, bool fit_en) lv_cont_set_fit(ddlist, fit_en, lv_cont_get_ver_fit(ddlist)); lv_page_set_scrl_fit(ddlist, fit_en, lv_page_get_scrl_fit_ver(ddlist)); - lv_ddlist_refr_size(ddlist, false); } diff --git a/lv_objx/lv_gauge.c b/lv_objx/lv_gauge.c index 4fbb580c5f..2242d32a5e 100644 --- a/lv_objx/lv_gauge.c +++ b/lv_objx/lv_gauge.c @@ -127,20 +127,24 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, lv_obj_t * copy) void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_color_t * colors) { lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge); - if(ext->values != NULL) { - lv_mem_free(ext->values); - ext->values = NULL; + + if(ext->needle_count != needle_cnt) { + if(ext->values != NULL) { + lv_mem_free(ext->values); + ext->values = NULL; + } + + ext->values = lv_mem_realloc(ext->values, needle_cnt * sizeof(int16_t)); + + int16_t min = lv_gauge_get_min_value(gauge); + uint8_t n; + for(n = ext->needle_count; n < needle_cnt; n++) { + ext->values[n] = min; + } + + ext->needle_count = needle_cnt; } - ext->values = lv_mem_realloc(ext->values, needle_cnt * sizeof(int16_t)); - - int16_t min = lv_gauge_get_min_value(gauge); - uint8_t n; - for(n = ext->needle_count; n < needle_cnt; n++) { - ext->values[n] = min; - } - - ext->needle_count = needle_cnt; ext->needle_colors = colors; lv_obj_invalidate(gauge); } @@ -156,6 +160,8 @@ void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int16_t value) lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge); if(needle_id >= ext->needle_count) return; + if(ext->values[needle_id] == value) return; + int16_t min = lv_gauge_get_min_value(gauge); int16_t max = lv_gauge_get_max_value(gauge); @@ -183,6 +189,7 @@ void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_cnt, uint lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge); ext->label_count = label_cnt; + lv_obj_invalidate(gauge); } /*===================== diff --git a/lv_objx/lv_kb.c b/lv_objx/lv_kb.c index d7254954fa..a9b7eac1be 100644 --- a/lv_objx/lv_kb.c +++ b/lv_objx/lv_kb.c @@ -146,6 +146,7 @@ void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta) lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb); lv_cursor_type_t cur_type; + /*Hide the cursor of the old Text area if cursor management is enabled*/ if(ext->ta && ext->cursor_mng) { cur_type = lv_ta_get_cursor_type(ext->ta); lv_ta_set_cursor_type(ext->ta, cur_type | LV_CURSOR_HIDDEN); @@ -153,6 +154,7 @@ void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta) ext->ta = ta; + /*Show the cursor of the new Text area if cursor management is enabled*/ if(ext->ta && ext->cursor_mng) { cur_type = lv_ta_get_cursor_type(ext->ta); lv_ta_set_cursor_type(ext->ta, cur_type & (~LV_CURSOR_HIDDEN)); @@ -167,6 +169,8 @@ void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta) void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode) { lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb); + if(ext->mode == mode) return; + ext->mode = mode; if(mode == LV_KB_MODE_TEXT) lv_btnm_set_map(kb, kb_map_lc); else if(mode == LV_KB_MODE_NUM) lv_btnm_set_map(kb, kb_map_num); @@ -181,6 +185,8 @@ void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode) void lv_kb_set_cursor_manage(lv_obj_t * kb, bool en) { lv_kb_ext_t * ext = lv_obj_get_ext_attr(kb); + if(ext->cursor_mng == en) return; + ext->cursor_mng = en == false? 0 : 1; if(ext->ta) { diff --git a/lv_objx/lv_label.c b/lv_objx/lv_label.c index f6f40fd09b..3463098138 100644 --- a/lv_objx/lv_label.c +++ b/lv_objx/lv_label.c @@ -253,6 +253,7 @@ void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode) void lv_label_set_align(lv_obj_t *label, lv_label_align_t align) { lv_label_ext_t *ext = lv_obj_get_ext_attr(label); + if(ext->align == align) return; ext->align = align; @@ -268,6 +269,7 @@ void lv_label_set_align(lv_obj_t *label, lv_label_align_t align) void lv_label_set_recolor(lv_obj_t * label, bool recolor_en) { lv_label_ext_t * ext = lv_obj_get_ext_attr(label); + if(ext->recolor == recolor_en) return; ext->recolor = recolor_en == false ? 0 : 1; @@ -282,6 +284,8 @@ void lv_label_set_recolor(lv_obj_t * label, bool recolor_en) void lv_label_set_no_break(lv_obj_t * label, bool no_break_en) { lv_label_ext_t * ext = lv_obj_get_ext_attr(label); + if(ext->no_break == no_break_en) return; + ext->no_break = no_break_en == false ? 0 : 1; lv_label_refr_text(label); @@ -295,6 +299,8 @@ void lv_label_set_no_break(lv_obj_t * label, bool no_break_en) void lv_label_set_body_draw(lv_obj_t *label, bool body_en) { lv_label_ext_t * ext = lv_obj_get_ext_attr(label); + if(ext->body_draw == body_en) return; + ext->body_draw = body_en == false ? 0 : 1; lv_obj_refresh_ext_size(label); @@ -310,6 +316,8 @@ void lv_label_set_body_draw(lv_obj_t *label, bool body_en) void lv_label_set_anim_speed(lv_obj_t *label, uint16_t anim_speed) { lv_label_ext_t *ext = lv_obj_get_ext_attr(label); + if(ext->anim_speed == anim_speed) return; + ext->anim_speed = anim_speed; if(ext->long_mode == LV_LABEL_LONG_ROLL || ext->long_mode == LV_LABEL_LONG_SCROLL) { diff --git a/lv_objx/lv_led.c b/lv_objx/lv_led.c index e14630c4ba..4a11607df4 100644 --- a/lv_objx/lv_led.c +++ b/lv_objx/lv_led.c @@ -104,6 +104,8 @@ void lv_led_set_bright(lv_obj_t * led, uint8_t bright) { /*Set the brightness*/ lv_led_ext_t * ext = lv_obj_get_ext_attr(led); + if(ext->bright == bright) return; + ext->bright = bright; /*Invalidate the object there fore it will be redrawn*/ diff --git a/lv_objx/lv_line.c b/lv_objx/lv_line.c index d3de7b5785..b6e71d35e6 100644 --- a/lv_objx/lv_line.c +++ b/lv_objx/lv_line.c @@ -129,6 +129,7 @@ void lv_line_set_points(lv_obj_t * line, const lv_point_t * point_a, uint16_t po void lv_line_set_auto_size(lv_obj_t * line, bool autosize_en) { lv_line_ext_t * ext = lv_obj_get_ext_attr(line); + if(ext->auto_size == autosize_en) return; ext->auto_size = autosize_en == false ? 0 : 1; @@ -146,6 +147,7 @@ void lv_line_set_auto_size(lv_obj_t * line, bool autosize_en) void lv_line_set_y_invert(lv_obj_t * line, bool yinv_en) { lv_line_ext_t * ext = lv_obj_get_ext_attr(line); + if(ext->y_inv == yinv_en) return; ext->y_inv = yinv_en == false ? 0 : 1; diff --git a/lv_objx/lv_list.c b/lv_objx/lv_list.c index 9da62addad..f272efd227 100644 --- a/lv_objx/lv_list.c +++ b/lv_objx/lv_list.c @@ -211,6 +211,8 @@ void lv_list_set_anim_time(lv_obj_t *list, uint16_t anim_time) #if USE_LV_ANIMATION == 0 anim_time = 0; #endif + + if(ext->anim_time == anim_time) return; ext->anim_time = anim_time; } diff --git a/lv_objx/lv_lmeter.c b/lv_objx/lv_lmeter.c index d9d0a1a845..6bda4c0506 100644 --- a/lv_objx/lv_lmeter.c +++ b/lv_objx/lv_lmeter.c @@ -112,8 +112,10 @@ lv_obj_t * lv_lmeter_create(lv_obj_t * par, lv_obj_t * copy) */ void lv_lmeter_set_value(lv_obj_t *lmeter, int16_t value) { - lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter); - ext->cur_value = value > ext->max_value ? ext->max_value : value; + lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter); + if(ext->cur_value == value) return; + + ext->cur_value = value > ext->max_value ? ext->max_value : value; ext->cur_value = ext->cur_value < ext->min_value ? ext->min_value : ext->cur_value; lv_obj_invalidate(lmeter); } @@ -127,6 +129,8 @@ void lv_lmeter_set_value(lv_obj_t *lmeter, int16_t value) void lv_lmeter_set_range(lv_obj_t *lmeter, int16_t min, int16_t max) { lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter); + if(ext->min_value == min && ext->max_value == max) return; + ext->max_value = max; ext->min_value = min; if(ext->cur_value > max) { @@ -149,6 +153,8 @@ void lv_lmeter_set_range(lv_obj_t *lmeter, int16_t min, int16_t max) void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint8_t line_cnt) { lv_lmeter_ext_t * ext = lv_obj_get_ext_attr(lmeter); + if(ext->scale_angle == angle && ext->line_cnt == line_cnt) return; + ext->scale_angle = angle; ext->line_cnt = line_cnt; diff --git a/lv_objx/lv_mbox.c b/lv_objx/lv_mbox.c index 4c3e57f40d..5156a3a6d7 100644 --- a/lv_objx/lv_mbox.c +++ b/lv_objx/lv_mbox.c @@ -191,6 +191,7 @@ void lv_mbox_set_anim_time(lv_obj_t * mbox, uint16_t anim_time) #if USE_LV_ANIMATION == 0 anim_time = 0; #endif + ext->anim_time = anim_time; } diff --git a/lv_objx/lv_page.c b/lv_objx/lv_page.c index 024eea3045..2f0c0fcc94 100644 --- a/lv_objx/lv_page.c +++ b/lv_objx/lv_page.c @@ -170,6 +170,8 @@ void lv_page_set_pr_action(lv_obj_t * page, lv_action_t pr_action) void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode) { lv_page_ext_t * ext = lv_obj_get_ext_attr(page); + if(ext->sb.mode == sb_mode) return; + ext->sb.mode = sb_mode; ext->sb.hor_draw = 0; ext->sb.ver_draw = 0; diff --git a/lv_objx/lv_roller.c b/lv_objx/lv_roller.c index 361d4e389a..de9e33c17d 100644 --- a/lv_objx/lv_roller.c +++ b/lv_objx/lv_roller.c @@ -125,6 +125,9 @@ void lv_roller_set_selected(lv_obj_t *roller, uint16_t sel_opt, bool anim_en) #if USE_LV_ANIMATION == 0 anim_en = false; #endif + + if(lv_roller_get_selected(roller) == sel_opt) return; + lv_ddlist_set_selected(roller, sel_opt); refr_position(roller, anim_en); } diff --git a/lv_objx/lv_slider.c b/lv_objx/lv_slider.c index e115e54e04..ed188be25e 100644 --- a/lv_objx/lv_slider.c +++ b/lv_objx/lv_slider.c @@ -127,6 +127,8 @@ void lv_slider_set_action(lv_obj_t * slider, lv_action_t action) void lv_slider_set_knob_in(lv_obj_t * slider, bool in) { lv_slider_ext_t * ext = lv_obj_get_ext_attr(slider); + if(ext->knob_in == in) return; + ext->knob_in = in == false ? 0 : 1; lv_obj_invalidate(slider); } diff --git a/lv_objx/lv_sw.c b/lv_objx/lv_sw.c index 4b667bd093..79495438ed 100644 --- a/lv_objx/lv_sw.c +++ b/lv_objx/lv_sw.c @@ -112,6 +112,8 @@ lv_obj_t * lv_sw_create(lv_obj_t * par, lv_obj_t * copy) */ void lv_sw_on(lv_obj_t *sw) { + if(lv_sw_get_state(sw)) return; /*Do nothing is already turned on*/ + lv_sw_ext_t *ext = lv_obj_get_ext_attr(sw); lv_slider_set_value(sw, 1); lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB,ext->style_knob_on); @@ -123,6 +125,8 @@ void lv_sw_on(lv_obj_t *sw) */ void lv_sw_off(lv_obj_t *sw) { + if(!lv_sw_get_state(sw)) return; /*Do nothing is already turned off*/ + lv_sw_ext_t *ext = lv_obj_get_ext_attr(sw); lv_slider_set_value(sw, 0); lv_slider_set_style(sw, LV_SLIDER_STYLE_KNOB,ext->style_knob_off); diff --git a/lv_objx/lv_ta.c b/lv_objx/lv_ta.c index 86c5ce199d..f3cca7828e 100644 --- a/lv_objx/lv_ta.c +++ b/lv_objx/lv_ta.c @@ -347,6 +347,8 @@ void lv_ta_set_text(lv_obj_t * ta, const char * txt) void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos) { lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta); + if(ext->cursor.pos == pos) return; + uint16_t len = lv_txt_get_length(lv_label_get_text(ext->label)); if(pos < 0) pos = len + pos; @@ -419,6 +421,8 @@ void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos) void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type) { lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta); + if(ext->cursor.type == cur_type) return; + ext->cursor.type = cur_type; lv_obj_invalidate(ta); } @@ -431,6 +435,7 @@ void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type) void lv_ta_set_pwd_mode(lv_obj_t * ta, bool pwd_en) { lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta); + if(ext->pwd_mode == pwd_en) return; /*Pwd mode is now enabled*/ if(ext->pwd_mode == 0 && pwd_en != false) { @@ -464,8 +469,10 @@ void lv_ta_set_pwd_mode(lv_obj_t * ta, bool pwd_en) */ void lv_ta_set_one_line(lv_obj_t * ta, bool en) { + lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta); + if(ext->one_line == en) return; + if(en != false) { - lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta); lv_style_t * style_ta = lv_obj_get_style(ta); lv_style_t * style_scrl = lv_obj_get_style(lv_page_get_scrl(ta)); lv_style_t * style_label = lv_obj_get_style(ext->label); @@ -478,7 +485,6 @@ void lv_ta_set_one_line(lv_obj_t * ta, bool en) lv_label_set_no_break(ext->label, true); lv_obj_set_pos(lv_page_get_scrl(ta), style_ta->body.padding.hor, style_ta->body.padding.ver); } else { - lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta); lv_style_t * style_ta = lv_obj_get_style(ta); ext->one_line = 0; diff --git a/lv_objx/lv_tabview.c b/lv_objx/lv_tabview.c index 67a55842cc..39cb837d92 100644 --- a/lv_objx/lv_tabview.c +++ b/lv_objx/lv_tabview.c @@ -241,6 +241,8 @@ void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, bool anim_en) anim_en = false; #endif lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview); + if(ext->tab_cur == id) return; + lv_style_t * style = lv_obj_get_style(ext->content); if(id >= ext->tab_cnt) id = ext->tab_cnt - 1; diff --git a/lv_objx/lv_win.c b/lv_objx/lv_win.c index 00202d5a75..e1dedffa6d 100644 --- a/lv_objx/lv_win.c +++ b/lv_objx/lv_win.c @@ -207,6 +207,8 @@ void lv_win_set_title(lv_obj_t * win, const char * title) void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size) { lv_win_ext_t * ext = lv_obj_get_ext_attr(win); + if(ext->btn_size == size) return; + ext->btn_size = size; lv_win_realign(win);