From b23b986683e3bfedec88203bb66e705fce4dd697 Mon Sep 17 00:00:00 2001 From: Gabor Date: Mon, 2 Jan 2017 14:10:32 +0100 Subject: [PATCH] Compatibility with malloc/free/realloc wrappers --- lv_appx/lv_app_sysmon.c | 39 ++++++++++++++++++++------- lv_appx/lv_app_terminal.c | 1 + lv_draw/lv_draw.c | 4 +-- lv_misc/anim.c | 2 +- lv_obj/lv_dispi.c | 4 +-- lv_obj/lv_obj.c | 38 +++++++++++++++++++------- lv_obj/lv_obj.h | 1 + lv_objx/lv_btn.c | 56 ++++++++++++++++++++++----------------- lv_objx/lv_btnm.c | 16 ++++++++--- lv_objx/lv_cb.c | 10 ++++++- lv_objx/lv_chart.c | 33 +++++++++++++---------- lv_objx/lv_img.c | 36 ++++++++++++++----------- lv_objx/lv_label.c | 19 ++++++++++--- lv_objx/lv_led.c | 10 ++++++- lv_objx/lv_line.c | 14 +++++----- lv_objx/lv_list.c | 11 +++++++- lv_objx/lv_mbox.c | 24 ++++++++++++----- lv_objx/lv_page.c | 18 ++++++++++--- lv_objx/lv_pb.c | 29 +++++++++++--------- lv_objx/lv_rect.c | 24 ++++++++++++----- lv_objx/lv_ta.c | 25 ++++++++--------- lv_objx/lv_win.c | 22 +++++++++------ 22 files changed, 293 insertions(+), 143 deletions(-) diff --git a/lv_appx/lv_app_sysmon.c b/lv_appx/lv_app_sysmon.c index 3a28671e9..e5b5ee228 100644 --- a/lv_appx/lv_app_sysmon.c +++ b/lv_appx/lv_app_sysmon.c @@ -83,7 +83,9 @@ static uint8_t mem_pct[LV_APP_SYSMON_PNUM]; static uint8_t cpu_pct[LV_APP_SYSMON_PNUM]; static lv_pbs_t cpu_pbs; static lv_pbs_t mem_pbs; +#if USE_DYN_MEM != 0 static dm_mon_t mem_mon; +#endif /********************** * MACROS @@ -281,16 +283,21 @@ static void sysmon_task(void) cpu_busy = 100 - idle_get(); #endif + uint8_t mem_used_pct = 0; +#if USE_DYN_MEM != 0 dm_monitor(&mem_mon); - uint8_t mem_free_pct = (uint32_t) ((DM_MEM_SIZE - mem_mon.size_free) * 100 ) / DM_MEM_SIZE; + mem_used_pct = (uint32_t) ((DM_MEM_SIZE - mem_mon.size_free) * 100 ) / DM_MEM_SIZE; +#endif /*Add the CPU and memory data*/ cpu_pct[LV_APP_SYSMON_PNUM - 1] = cpu_busy; - mem_pct[LV_APP_SYSMON_PNUM - 1] = mem_free_pct; + mem_pct[LV_APP_SYSMON_PNUM - 1] = mem_used_pct; /*Refresh the shortcuts and windows*/ lv_app_sysmon_refr(); +#if USE_DYN_MEM != 0 + /*Handle periodic defrag. if enabled*/ #if LV_APP_SYSMON_DEFRAG_PERIOD != 0 static uint32_t last_defrag = 0; @@ -320,6 +327,7 @@ static void sysmon_task(void) } if(mem_mon.pct_frag < LV_APP_SYSMON_FRAG_WARN) frag_warn_report = false; +#endif } /** @@ -327,19 +335,30 @@ static void sysmon_task(void) */ static void lv_app_sysmon_refr(void) { - /*Create a long detailed string*/ + char buf_long[256]; - sprintf(buf_long, "CPU: %d %%\n\nMEMORY: %d %%\nTotal: %d bytes\nUsed: %d bytes\nFree: %d bytes\nFrag: %d %%", - cpu_pct[LV_APP_SYSMON_PNUM - 1], + char buf_short[128]; +#if USE_IDLE != 0 + sprintf(buf_long, "CPU: %d %%\n\n", cpu_pct[LV_APP_SYSMON_PNUM - 1]); + sprintf(buf_short, "CPU: %d %%\n", cpu_pct[LV_APP_SYSMON_PNUM - 1]); +#else + strcpy(buf_long, "CPU: N/A\n\n"); + strcpy(buf_short, "CPU: N/A\n"); +#endif + +#if USE_DYN_MEM != 0 + sprintf(buf_long, "%sMEMORY: %d %%\nTotal: %d bytes\nUsed: %d bytes\nFree: %d bytes\nFrag: %d %%", + buf_long, mem_pct[LV_APP_SYSMON_PNUM - 1], DM_MEM_SIZE, DM_MEM_SIZE - mem_mon.size_free, mem_mon.size_free, mem_mon.pct_frag); - /*Create a short string*/ - char buf_short[128]; - sprintf(buf_short, "CPU: %d %%\nMem: %d %%\nFrag: %d %%", - cpu_pct[LV_APP_SYSMON_PNUM - 1], mem_pct[LV_APP_SYSMON_PNUM - 1], mem_mon.pct_frag); - + sprintf(buf_short, "%sMem: %d %%\nFrag: %d %%", + buf_short, mem_pct[LV_APP_SYSMON_PNUM - 1], mem_mon.pct_frag); +#else + sprintf(buf_long, "%sMEMORY: N/A", buf_long); + sprintf(buf_short, "%sMem: N/A\nFrag: N/A", buf_short); +#endif lv_app_style_t * app_style = lv_app_style_get(); cord_t opad = app_style->win_style.content.scrl_rects.opad; lv_app_inst_t * app; diff --git a/lv_appx/lv_app_terminal.c b/lv_appx/lv_app_terminal.c index e3b630b5d..f8d974d38 100644 --- a/lv_appx/lv_app_terminal.c +++ b/lv_appx/lv_app_terminal.c @@ -129,6 +129,7 @@ static void my_app_run(lv_app_inst_t * app, const char * cstr, void * conf) /*Initialize the application*/ my_app_data_t * app_data = app->app_data; app_data->com_type = LV_APP_COM_TYPE_CHAR; + memset(app_data->txt, 0, sizeof(app_data->txt));; } /** diff --git a/lv_draw/lv_draw.c b/lv_draw/lv_draw.c index ebfe23bd3..673676fe9 100644 --- a/lv_draw/lv_draw.c +++ b/lv_draw/lv_draw.c @@ -261,9 +261,9 @@ void lv_draw_line(const point_t * p1, const point_t * p2, const area_t * mask_p, if(p1->x == p2->x && p1->y == p2->y) return; - cord_t dx = abs(p2->x - p1->x); + cord_t dx = MATH_ABS(p2->x - p1->x); cord_t sx = p1->x < p2->x ? 1 : -1; - cord_t dy = abs(p2->y - p1->y); + cord_t dy = MATH_ABS(p2->y - p1->y); cord_t sy = p1->y < p2->y ? 1 : -1; cord_t err = (dx > dy ? dx : -dy) / 2; cord_t e2; diff --git a/lv_misc/anim.c b/lv_misc/anim.c index 161c30e9a..5fe5f5a92 100644 --- a/lv_misc/anim.c +++ b/lv_misc/anim.c @@ -125,7 +125,7 @@ bool anim_del(void * var, anim_fp_t fp) */ uint16_t anim_speed_to_time(uint16_t speed, int32_t start, int32_t end) { - int32_t d = abs((int32_t) start - end); + int32_t d = MATH_ABS((int32_t) start - end); uint16_t time = (int32_t)((int32_t)(d * 1000) / speed); if(time == 0) { diff --git a/lv_obj/lv_dispi.c b/lv_obj/lv_dispi.c index b111258fb..7a7b15f93 100644 --- a/lv_obj/lv_dispi.c +++ b/lv_obj/lv_dispi.c @@ -376,8 +376,8 @@ static void dispi_drag(lv_dispi_t * dispi_p) dispi_p->vect_sum.y += dispi_p->vect.y; /*If a move is greater then LV_DRAG_LIMIT then begin the drag*/ - if(abs(dispi_p->vect_sum.x) >= LV_DISPI_DRAG_LIMIT || - abs(dispi_p->vect_sum.y) >= LV_DISPI_DRAG_LIMIT) + if(MATH_ABS(dispi_p->vect_sum.x) >= LV_DISPI_DRAG_LIMIT || + MATH_ABS(dispi_p->vect_sum.y) >= LV_DISPI_DRAG_LIMIT) { dispi_p->drag_in_prog = 1; drag_obj->signal_f(drag_obj, diff --git a/lv_obj/lv_obj.c b/lv_obj/lv_obj.c index 7aa2fa049..8496af504 100644 --- a/lv_obj/lv_obj.c +++ b/lv_obj/lv_obj.c @@ -138,7 +138,7 @@ void lv_obj_inv(lv_obj_t * obj) } /** - * Notify an object if its style is modified + * Notify an object about its style is modified * @param obj pointer to an object */ void lv_obj_refr_style(lv_obj_t * obj) @@ -206,6 +206,9 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, lv_obj_t * copy) new_obj->style_iso = 0; new_obj->hidden = 0; new_obj->top_en = 0; + new_obj->child_chg_off = 0; + new_obj->opa_protect = 0; + new_obj->ext = NULL; } /*parent != NULL create normal obj. on a parent*/ @@ -241,6 +244,8 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, lv_obj_t * copy) new_obj->style_iso = 0; new_obj->hidden = 0; new_obj->top_en = 0; + new_obj->child_chg_off = 0; + new_obj->opa_protect = 0; new_obj->ext = NULL; @@ -249,23 +254,27 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, lv_obj_t * copy) if(copy != NULL) { area_cpy(&new_obj->cords, ©->cords); new_obj->ext_size = copy->ext_size; - /*Set attributes*/ + + new_obj->opa = copy->opa; + + /*Set attributes*/ new_obj->click_en = copy->click_en; new_obj->drag_en = copy->drag_en; new_obj->drag_throw_en = copy->drag_throw_en; new_obj->drag_parent = copy->drag_parent; new_obj->hidden = copy->hidden; + new_obj->style_iso = copy->style_iso; new_obj->top_en = copy->top_en; + new_obj->opa_protect = copy->opa_protect; - new_obj->style_p = copy->style_p; - - if(copy->style_iso != 0) { - lv_obj_iso_style(new_obj, dm_get_size(copy->style_p)); + if(copy->style_iso == 0) { + new_obj->style_p = copy->style_p; + } else { + new_obj->style_p = dm_alloc(sizeof(lv_objs_t)); + memcpy(new_obj->style_p, copy->style_p, sizeof(lv_objs_t)); } lv_obj_set_pos(new_obj, lv_obj_get_x(copy), lv_obj_get_y(copy)); - - new_obj->opa = copy->opa; } @@ -814,7 +823,8 @@ void lv_obj_set_style(lv_obj_t * obj, void * style) obj->style_p = style; /*Send a style change signal to the object*/ - obj->signal_f(obj, LV_SIGNAL_STYLE_CHG, NULL); + lv_obj_refr_style(obj); + lv_obj_inv(obj); } @@ -1352,6 +1362,16 @@ bool lv_obj_get_drag_parent(lv_obj_t * obj) return obj->drag_parent == 0 ? false : true; } +/** + * Get the style isolation attribute of an object + * @param obj pointer to an object + * @return pointer to a style + */ +bool lv_obj_get_style_iso(lv_obj_t * obj) +{ + return obj->style_iso == 0 ? false : true; +} + /** * Get the opa_protect attribute of an object * @param obj pointer to an object diff --git a/lv_obj/lv_obj.h b/lv_obj/lv_obj.h index 472d27bac..8d32715dd 100644 --- a/lv_obj/lv_obj.h +++ b/lv_obj/lv_obj.h @@ -241,6 +241,7 @@ bool lv_obj_get_top(lv_obj_t * obj); bool lv_obj_get_drag(lv_obj_t * obj); bool lv_obj_get_drag_throw(lv_obj_t * obj); bool lv_obj_get_drag_parent(lv_obj_t * obj); +bool lv_obj_get_style_iso(lv_obj_t * obj); bool lv_obj_get_opa_potect(lv_obj_t * obj); /*Virtual functions get*/ diff --git a/lv_objx/lv_btn.c b/lv_objx/lv_btn.c index 90222ec44..b722a124e 100644 --- a/lv_objx/lv_btn.c +++ b/lv_objx/lv_btn.c @@ -61,42 +61,47 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, lv_obj_t * copy) lv_obj_t * new_btn; new_btn = lv_rect_create(par, copy); + dm_assert(new_btn); /*Allocate the extended data*/ - lv_obj_alloc_ext(new_btn, sizeof(lv_btn_ext_t)); + lv_btn_ext_t * ext = lv_obj_alloc_ext(new_btn, sizeof(lv_btn_ext_t)); + dm_assert(ext); + ext->state = LV_BTN_STATE_REL; + ext->pr_action = NULL; + ext->rel_action = NULL; + ext->lpr_action = NULL; + ext->lpr_rep_action = NULL; + ext->lpr_exec = 0; + ext->tgl = 0; - if(ancestor_design_f == NULL) { - ancestor_design_f = lv_obj_get_design_f(new_btn); - } + if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_f(new_btn); lv_obj_set_signal_f(new_btn, lv_btn_signal); lv_obj_set_design_f(new_btn, lv_btn_design); - lv_btn_ext_t * ext = lv_obj_get_ext(new_btn); - ext->lpr_exec = 0; - - /*If no copy do the basic initialization*/ - if(copy == NULL) - { - ext->state = LV_BTN_STATE_REL; - ext->pr_action = NULL; - ext->rel_action = NULL; - ext->lpr_action = NULL; - ext->tgl = 0; + if(copy == NULL) { lv_rect_set_layout(new_btn, LV_RECT_LAYOUT_CENTER); + lv_obj_set_style(new_btn, lv_btns_get(LV_BTNS_DEF, NULL)); } /*Copy 'copy'*/ - else{ - lv_btn_ext_t * ori_btn_ext = lv_obj_get_ext(copy); - ext->state = ori_btn_ext->state; - ext->pr_action = ori_btn_ext->pr_action; - ext->rel_action = ori_btn_ext->rel_action; - ext->lpr_action = ori_btn_ext->lpr_action; - ext->tgl = ori_btn_ext->tgl; + else { + lv_btn_ext_t * copy_ext = lv_obj_get_ext(copy); + ext->state = copy_ext->state; + ext->pr_action = copy_ext->pr_action; + ext->rel_action = copy_ext->rel_action; + ext->lpr_action = copy_ext->lpr_action; + ext->lpr_rep_action = copy_ext->lpr_action; + ext->tgl = copy_ext->tgl; + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_btn) == false) { + lv_obj_set_style(new_btn, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_btn, lv_obj_get_style(copy)); + lv_obj_iso_style(new_btn, sizeof(lv_btns_t)); + } } - lv_obj_set_style(new_btn, lv_btns_get(LV_BTNS_DEF, NULL)); - return new_btn; } @@ -106,7 +111,7 @@ lv_obj_t * lv_btn_create(lv_obj_t * par, lv_obj_t * copy) * @param sign a signal type from lv_signal_t enum * @param param pointer to a signal specific variable */ -bool lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void* param) +bool lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param) { bool valid; @@ -144,6 +149,7 @@ bool lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void* param) lv_obj_inv(btn); break; case LV_SIGNAL_PRESSING: + /*When the button begins to drag revert pressed states to released*/ if(lv_dispi_is_dragging(param) != false) { if(ext->state == LV_BTN_STATE_PR) lv_btn_set_state(btn, LV_BTN_STATE_REL); else if(ext->state == LV_BTN_STATE_TGL_PR) lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL); diff --git a/lv_objx/lv_btnm.c b/lv_objx/lv_btnm.c index 3829f3ec3..3cdb8bd37 100644 --- a/lv_objx/lv_btnm.c +++ b/lv_objx/lv_btnm.c @@ -68,14 +68,17 @@ lv_obj_t * lv_btnm_create(lv_obj_t * par, lv_obj_t * copy) /*Allocate the object type specific extended data*/ lv_btnm_ext_t * ext = lv_obj_alloc_ext(new_btnm, sizeof(lv_btnm_ext_t)); dm_assert(ext); + ext->btn_cnt = 0; + ext->btn_pr = LV_BTNM_BTN_PR_INVALID; + ext->btn_areas = NULL; + ext->cb = NULL; + ext->map_p = NULL; if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_f(new_btnm); lv_obj_set_signal_f(new_btnm, lv_btnm_signal); lv_obj_set_design_f(new_btnm, lv_btnm_design); - ext->btn_cnt = 0; - ext->btn_pr = LV_BTNM_BTN_PR_INVALID; /*Init the new button matrix object*/ if(copy == NULL) { @@ -85,7 +88,14 @@ lv_obj_t * lv_btnm_create(lv_obj_t * par, lv_obj_t * copy) } /*Copy an existing object*/ else { - + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_btnm) == false) { + lv_obj_set_style(new_btnm, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_btnm, lv_obj_get_style(copy)); + lv_obj_iso_style(new_btnm, sizeof(lv_btnms_t)); + } + lv_btnm_set_map(new_btnm, lv_btnm_get_map(copy)); } return new_btnm; diff --git a/lv_objx/lv_cb.c b/lv_objx/lv_cb.c index 2d0ea676f..068933b7e 100644 --- a/lv_objx/lv_cb.c +++ b/lv_objx/lv_cb.c @@ -58,6 +58,8 @@ lv_obj_t * lv_cb_create(lv_obj_t * par, lv_obj_t * copy) lv_cb_ext_t * ext = lv_obj_alloc_ext(new_cb, sizeof(lv_cb_ext_t)); dm_assert(ext); + ext->bullet = NULL; + ext->label = NULL; lv_obj_set_signal_f(new_cb, lv_cb_signal); @@ -79,7 +81,13 @@ lv_obj_t * lv_cb_create(lv_obj_t * par, lv_obj_t * copy) ext->bullet = lv_btn_create(new_cb, copy_ext->bullet); ext->label = lv_label_create(new_cb, copy_ext->label); - lv_obj_set_style(new_cb, lv_obj_get_style(copy)); + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_cb) == false) { + lv_obj_set_style(new_cb, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_cb, lv_obj_get_style(copy)); + lv_obj_iso_style(new_cb, sizeof(lv_cbs_t)); + } } lv_obj_align_us(new_cb, NULL, LV_ALIGN_CENTER, 0, 0); diff --git a/lv_objx/lv_chart.c b/lv_objx/lv_chart.c index 4cc9c9b87..70d061fd9 100644 --- a/lv_objx/lv_chart.c +++ b/lv_objx/lv_chart.c @@ -41,7 +41,7 @@ static void lv_chart_draw_cols(lv_obj_t * chart, const area_t * mask); **********************/ static lv_charts_t lv_charts_def; static lv_charts_t lv_charts_transp; -static lv_design_f_t ancestor_design_fp; +static lv_design_f_t ancestor_design_f; /********************** * MACROS @@ -70,26 +70,23 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, lv_obj_t * copy) /*Allocate the object type specific extended data*/ lv_chart_ext_t * ext = lv_obj_alloc_ext(new_chart, sizeof(lv_chart_ext_t)); dm_assert(ext); - - if(ancestor_design_fp == NULL) { - ancestor_design_fp = lv_obj_get_design_f(new_chart); - } - ll_init(&ext->dl_ll, sizeof(cord_t *)); ext->dl_num = 0; + ext->ymin = LV_CHART_YMIN_DEF; + ext->ymax = LV_CHART_YMAX_DEF; + ext->hdiv_num = LV_CHART_HDIV_DEF; + ext->vdiv_num = LV_CHART_VDIV_DEF; + ext->pnum = LV_CHART_PNUM_DEF; + ext->type = LV_CHART_LINE; + + if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_f(new_chart); lv_obj_set_signal_f(new_chart, lv_chart_signal); lv_obj_set_design_f(new_chart, lv_chart_design); /*Init the new chart background object*/ if(copy == NULL) { - ext->type = LV_CHART_LINE; lv_obj_set_style(new_chart, lv_charts_get(LV_CHARTS_DEF, NULL)); - ext->ymin = LV_CHART_YMIN_DEF; - ext->ymax = LV_CHART_YMAX_DEF; - ext->hdiv_num = LV_CHART_HDIV_DEF; - ext->vdiv_num = LV_CHART_VDIV_DEF; - ext->pnum = LV_CHART_PNUM_DEF; } else { lv_chart_ext_t * ext_copy = lv_obj_get_ext(copy); ext->type = ext_copy->type; @@ -98,6 +95,14 @@ lv_obj_t * lv_chart_create(lv_obj_t * par, lv_obj_t * copy) ext->hdiv_num = ext_copy->hdiv_num; ext->vdiv_num = ext_copy->vdiv_num; ext->pnum = ext_copy->pnum; + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_chart) == false) { + lv_obj_set_style(new_chart, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_chart, lv_obj_get_style(copy)); + lv_obj_iso_style(new_chart, sizeof(lv_charts_t)); + } } return new_chart; @@ -348,10 +353,10 @@ static bool lv_chart_design(lv_obj_t * chart, const area_t * mask, lv_design_mod { if(mode == LV_DESIGN_COVER_CHK) { /*Return false if the object is not covers the mask_p area*/ - return ancestor_design_fp(chart, mask, mode); + return ancestor_design_f(chart, mask, mode); } else if(mode == LV_DESIGN_DRAW_MAIN) { /*Draw the rectangle ancient*/ - ancestor_design_fp(chart, mask, mode); + ancestor_design_f(chart, mask, mode); /*Draw the object*/ diff --git a/lv_objx/lv_img.c b/lv_objx/lv_img.c index 3bc50ea82..7d72f0fcb 100644 --- a/lv_objx/lv_img.c +++ b/lv_objx/lv_img.c @@ -56,32 +56,38 @@ lv_obj_t * lv_img_create(lv_obj_t * par, lv_obj_t * copy) /*Create a basic object*/ new_img = lv_obj_create(par, copy); + dm_assert(new_img); /*Extend the basic object to image object*/ - lv_obj_alloc_ext(new_img, sizeof(lv_img_ext_t)); + lv_img_ext_t * ext = lv_obj_alloc_ext(new_img, sizeof(lv_img_ext_t)); + dm_assert(ext); + ext->fn = NULL; + ext->w = lv_obj_get_width(new_img); + ext->h = lv_obj_get_height(new_img); + ext->transp = 0; /*Init the new object*/ lv_obj_set_signal_f(new_img, lv_img_signal); lv_obj_set_design_f(new_img, lv_img_design); - lv_img_ext_t * img_ext = lv_obj_get_ext(new_img); - if(copy == NULL) { - img_ext->fn = NULL; - img_ext->w = lv_obj_get_width(new_img); - img_ext->h = lv_obj_get_height(new_img); - img_ext->transp = 0; - - /*Enable auto size for non screens*/ - if(par != NULL) { - img_ext->auto_size = 1; - } else { - img_ext->auto_size = 0; - } + /* Enable auto size for non screens + * because image screens are wallpapers + * and must be screen sized*/ + if(par != NULL) ext->auto_size = 1; + else ext->auto_size = 0; lv_obj_set_style(new_img, lv_imgs_get(LV_IMGS_DEF, NULL)); } else { - img_ext->auto_size = LV_EA(copy, lv_img_ext_t)->auto_size; + ext->auto_size = lv_img_get_auto_size(copy); lv_img_set_file(new_img, LV_EA(copy, lv_img_ext_t)->fn); + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_img) == false) { + lv_obj_set_style(new_img, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_img, lv_obj_get_style(copy)); + lv_obj_iso_style(new_img, sizeof(lv_imgs_t)); + } } return new_img; diff --git a/lv_objx/lv_label.c b/lv_objx/lv_label.c index 34926ef34..97514e5d5 100644 --- a/lv_objx/lv_label.c +++ b/lv_objx/lv_label.c @@ -66,14 +66,17 @@ lv_obj_t * lv_label_create(lv_obj_t * par, lv_obj_t * copy) lv_obj_alloc_ext(new_label, sizeof(lv_label_ext_t)); lv_label_ext_t * ext = lv_obj_get_ext(new_label); + dm_assert(ext); ext->txt = NULL; + ext->static_txt = 0; + ext->dot_end = LV_LABEL_DOT_END_INV; + ext->long_mode = LV_LABEL_LONG_EXPAND; lv_obj_set_design_f(new_label, lv_label_design); lv_obj_set_signal_f(new_label, lv_label_signal); /*Init the new label*/ if(copy == NULL) { - ext->dot_end = LV_LABEL_DOT_END_INV; lv_obj_set_opa(new_label, OPA_COVER); lv_obj_set_click(new_label, false); lv_obj_set_style(new_label, lv_labels_get(LV_LABELS_DEF, NULL)); @@ -83,9 +86,17 @@ lv_obj_t * lv_label_create(lv_obj_t * par, lv_obj_t * copy) /*Copy 'copy' if not NULL*/ else { lv_label_ext_t * copy_ext = lv_obj_get_ext(copy); - lv_label_set_long_mode(new_label, lv_label_get_long_mode(copy)); - if(copy_ext->static_txt == 0) lv_label_set_text(new_label, lv_label_get_text(copy)); - else lv_label_set_text_static(new_label, lv_label_get_text(copy)); + lv_label_set_long_mode(new_label, lv_label_get_long_mode(copy)); + if(copy_ext->static_txt == 0) lv_label_set_text(new_label, lv_label_get_text(copy)); + else lv_label_set_text_static(new_label, lv_label_get_text(copy)); + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_label) == false) { + lv_obj_set_style(new_label, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_label, lv_obj_get_style(copy)); + lv_obj_iso_style(new_label, sizeof(lv_labels_t)); + } } return new_label; } diff --git a/lv_objx/lv_led.c b/lv_objx/lv_led.c index a64a54d5e..f7663dd69 100644 --- a/lv_objx/lv_led.c +++ b/lv_objx/lv_led.c @@ -64,13 +64,13 @@ lv_obj_t * lv_led_create(lv_obj_t * par, lv_obj_t * copy) /*Allocate the object type specific extended data*/ lv_led_ext_t * ext = lv_obj_alloc_ext(new_led, sizeof(lv_led_ext_t)); dm_assert(ext); + ext->bright = LV_LED_BRIGHTNESS_DEF; lv_obj_set_signal_f(new_led, lv_led_signal); lv_obj_set_design_f(new_led, lv_led_design); /*Init the new led object*/ if(copy == NULL) { - ext->bright = LV_LED_BRIGHTNESS_DEF; lv_obj_set_style(new_led, lv_leds_get(LV_LEDS_DEF, NULL)); lv_obj_set_size_us(new_led, 40, 40); } @@ -78,6 +78,14 @@ lv_obj_t * lv_led_create(lv_obj_t * par, lv_obj_t * copy) else { lv_led_ext_t * copy_ext = lv_obj_get_ext(copy); ext->bright = copy_ext->bright; + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_led) == false) { + lv_obj_set_style(new_led, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_led, lv_obj_get_style(copy)); + lv_obj_iso_style(new_led, sizeof(lv_leds_t)); + } } return new_led; diff --git a/lv_objx/lv_line.c b/lv_objx/lv_line.c index 1b1f72e8d..18c0ea660 100644 --- a/lv_objx/lv_line.c +++ b/lv_objx/lv_line.c @@ -64,16 +64,18 @@ lv_obj_t * lv_line_create(lv_obj_t * par, lv_obj_t * copy) /*Extend the basic object to rectangle object*/ lv_line_ext_t * ext = lv_obj_alloc_ext(new_line, sizeof(lv_line_ext_t)); + dm_assert(ext); + ext->point_num = 0; + ext->point_array = NULL; + ext->auto_size = 1; + ext->y_inv = 0; + ext->upscale = 0; + lv_obj_set_design_f(new_line, lv_line_design); lv_obj_set_signal_f(new_line, lv_line_signal); /*Init the new rectangle*/ if(copy == NULL) { - ext->point_num = 0; - ext->point_array = NULL; - ext->auto_size = 1; - ext->y_inv = 0; - ext->upscale = 0; lv_obj_set_style(new_line, lv_lines_get(LV_LINES_DEF, NULL)); } /*Copy an existing object*/ @@ -84,9 +86,9 @@ lv_obj_t * lv_line_create(lv_obj_t * par, lv_obj_t * copy) lv_line_set_upscale(new_line,lv_line_get_upscale(copy)); lv_line_set_points(new_line, LV_EA(copy, lv_line_ext_t)->point_array, LV_EA(copy, lv_line_ext_t)->point_num); + lv_obj_set_style(new_line, lv_obj_get_style(copy)); } - return new_line; } diff --git a/lv_objx/lv_list.c b/lv_objx/lv_list.c index 2a6973d88..7edab97c0 100644 --- a/lv_objx/lv_list.c +++ b/lv_objx/lv_list.c @@ -61,18 +61,27 @@ lv_obj_t * lv_list_create(lv_obj_t * par, lv_obj_t * copy) lv_obj_t * new_list = lv_page_create(par, copy); dm_assert(new_list); lv_list_ext_t * ext = lv_obj_alloc_ext(new_list, sizeof(lv_list_ext_t)); + dm_assert(ext); + ext ->fit = LV_LIST_FIT_WIDTH; lv_obj_set_signal_f(new_list, lv_list_signal); /*Init the new list object*/ if(copy == NULL) { - ext ->fit = LV_LIST_FIT_WIDTH; lv_obj_set_size_us(new_list, 120, 150); lv_obj_set_style(new_list, lv_lists_get(LV_LISTS_DEF, NULL)); lv_rect_set_layout(LV_EA(new_list, lv_list_ext_t)->page_ext.scrl, LV_LIST_LAYOUT_DEF); } else { lv_list_ext_t * copy_ext = lv_obj_get_ext(copy); ext ->fit = copy_ext->fit; + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_list) == false) { + lv_obj_set_style(new_list, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_list, lv_obj_get_style(copy)); + lv_obj_iso_style(new_list, sizeof(lv_lists_t)); + } } return new_list; diff --git a/lv_objx/lv_mbox.c b/lv_objx/lv_mbox.c index 25977756f..841edc5a2 100644 --- a/lv_objx/lv_mbox.c +++ b/lv_objx/lv_mbox.c @@ -62,13 +62,13 @@ lv_obj_t * lv_mbox_create(lv_obj_t * par, lv_obj_t * copy) /*Allocate the message box type specific extended data*/ lv_mbox_ext_t * ext = lv_obj_alloc_ext(new_mbox, sizeof(lv_mbox_ext_t)); dm_assert(ext); + ext->txt = NULL; + ext->title = NULL; + ext->btnh = NULL; /*The signal and design functions are not copied so set them here*/ lv_obj_set_signal_f(new_mbox, lv_mbox_signal); - /* Let the design function of rect - lv_obj_set_design_f(new_mbox, lv_mbox_design); */ - /*Init the new message box message box*/ if(copy == NULL) { lv_rect_set_layout(new_mbox, LV_RECT_LAYOUT_COL_L); @@ -85,15 +85,25 @@ lv_obj_t * lv_mbox_create(lv_obj_t * par, lv_obj_t * copy) lv_rect_set_layout(ext->btnh, LV_RECT_LAYOUT_PRETTY); lv_obj_set_style(new_mbox, lv_mboxs_get(LV_MBOXS_DEF, NULL)); - - lv_mbox_realign(new_mbox); } /*Copy an existing message box*/ else { -// lv_mbox_ext_t * copy_ext = lv_obj_get_ext(copy); - /*TODO*/ + lv_mbox_ext_t * copy_ext = lv_obj_get_ext(copy); + ext->title = lv_label_create(new_mbox, copy_ext->title); + ext->txt = lv_label_create(new_mbox, copy_ext->txt); + ext->btnh = lv_rect_create(new_mbox, copy_ext->btnh); + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_mbox) == false) { + lv_obj_set_style(new_mbox, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_mbox, lv_obj_get_style(copy)); + lv_obj_iso_style(new_mbox, sizeof(lv_mboxs_t)); + } } + lv_mbox_realign(new_mbox); + return new_mbox; } diff --git a/lv_objx/lv_page.c b/lv_objx/lv_page.c index b3be272f6..f5e943052 100644 --- a/lv_objx/lv_page.c +++ b/lv_objx/lv_page.c @@ -67,10 +67,13 @@ lv_obj_t * lv_page_create(lv_obj_t * par, lv_obj_t * copy) /*Allocate the object type specific extended data*/ lv_page_ext_t * ext = lv_obj_alloc_ext(new_page, sizeof(lv_page_ext_t)); dm_assert(ext); + ext->scrl = NULL; + ext->pr_action = NULL; + ext->rel_action = NULL; + ext->sbh_draw = 0; + ext->sbv_draw = 0; - if(ancestor_design_f == NULL) { - ancestor_design_f = lv_obj_get_design_f(new_page); - } + if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_f(new_page); /*Init the new page object*/ if(copy == NULL) { @@ -96,7 +99,14 @@ lv_obj_t * lv_page_create(lv_obj_t * par, lv_obj_t * copy) * because everything has to be ready before any signal is received*/ lv_obj_set_signal_f(new_page, lv_page_signal); lv_obj_set_design_f(new_page, lv_page_design); - lv_obj_set_style(new_page, lv_obj_get_style(copy)); + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_page) == false) { + lv_obj_set_style(new_page, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_page, lv_obj_get_style(copy)); + lv_obj_iso_style(new_page, sizeof(lv_pages_t)); + } } lv_page_sb_refresh(new_page); diff --git a/lv_objx/lv_pb.c b/lv_objx/lv_pb.c index ac123e944..d1d16a74e 100644 --- a/lv_objx/lv_pb.c +++ b/lv_objx/lv_pb.c @@ -35,7 +35,7 @@ static void lv_pbs_init(void); * STATIC VARIABLES **********************/ static lv_pbs_t lv_pbs_def; -static lv_design_f_t ancestor_design_fp; +static lv_design_f_t ancestor_design_f; /********************** * MACROS @@ -64,12 +64,15 @@ lv_obj_t * lv_pb_create(lv_obj_t * par, lv_obj_t * copy) /*Allocate the object type specific extended data*/ lv_pb_ext_t * ext = lv_obj_alloc_ext(new_pb, sizeof(lv_pb_ext_t)); dm_assert(ext); + ext->min_value = 0; + ext->max_value = 100; + ext->act_value = 0; + ext->format_str = NULL; + ext->label = NULL; /* Save the rectangle design function. * It will be used in the progress bar design function*/ - if(ancestor_design_fp == NULL) { - ancestor_design_fp = lv_obj_get_design_f(new_pb); - } + if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_f(new_pb); lv_obj_set_signal_f(new_pb, lv_pb_signal); lv_obj_set_design_f(new_pb, lv_pb_design); @@ -78,9 +81,6 @@ lv_obj_t * lv_pb_create(lv_obj_t * par, lv_obj_t * copy) if(copy == NULL) { ext->format_str = dm_alloc(strlen(LV_PB_DEF_FORMAT) + 1); strcpy(ext->format_str, LV_PB_DEF_FORMAT); - ext->min_value = 0; - ext->max_value = 100; - ext->act_value = 0; ext->label = lv_label_create(new_pb, NULL); @@ -95,10 +95,15 @@ lv_obj_t * lv_pb_create(lv_obj_t * par, lv_obj_t * copy) ext->min_value = ext_copy->min_value; ext->max_value = ext_copy->max_value; ext->act_value = ext_copy->act_value; - ext->label = lv_label_create(new_pb, ext_copy->label); - lv_obj_set_style(new_pb, lv_obj_get_style(copy)); + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_pb) == false) { + lv_obj_set_style(new_pb, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_pb, lv_obj_get_style(copy)); + lv_obj_iso_style(new_pb, sizeof(lv_pbs_t)); + } lv_pb_set_value(new_pb, ext->act_value); @@ -264,13 +269,13 @@ lv_pbs_t * lv_pbs_get(lv_pbs_builtin_t style, lv_pbs_t * copy) */ static bool lv_pb_design(lv_obj_t * pb, const area_t * mask, lv_design_mode_t mode) { - if(ancestor_design_fp == NULL) return false; + if(ancestor_design_f == NULL) return false; if(mode == LV_DESIGN_COVER_CHK) { /*Return false if the object is not covers the mask_p area*/ - return ancestor_design_fp(pb, mask, mode); + return ancestor_design_f(pb, mask, mode); } else if(mode == LV_DESIGN_DRAW_MAIN) { - ancestor_design_fp(pb, mask, mode); + ancestor_design_f(pb, mask, mode); lv_pb_ext_t * ext = lv_obj_get_ext(pb); area_t bar_area; diff --git a/lv_objx/lv_rect.c b/lv_objx/lv_rect.c index b7030c7f5..cb6f94f81 100644 --- a/lv_objx/lv_rect.c +++ b/lv_objx/lv_rect.c @@ -77,22 +77,34 @@ lv_obj_t * lv_rect_create(lv_obj_t * par, lv_obj_t * copy) lv_obj_t * new_rect = lv_obj_create(par, copy); dm_assert(new_rect); lv_obj_alloc_ext(new_rect, sizeof(lv_rect_ext_t)); - lv_rect_ext_t * rect_ext = lv_obj_get_ext(new_rect); + lv_rect_ext_t * ext = lv_obj_get_ext(new_rect); + dm_assert(ext); + ext->hfit_en = 0; + ext->vfit_en = 0; + ext->layout = LV_RECT_LAYOUT_OFF; + lv_obj_set_design_f(new_rect, lv_rect_design); lv_obj_set_signal_f(new_rect, lv_rect_signal); /*Init the new rectangle*/ if(copy == NULL) { lv_obj_set_style(new_rect, lv_rects_get(LV_RECTS_DEF, NULL)); - rect_ext->hfit_en = 0; - rect_ext->vfit_en = 0; } /*Copy an existing object*/ else { lv_rect_ext_t * copy_ext = lv_obj_get_ext(copy); - rect_ext->hfit_en = copy_ext->hfit_en; - rect_ext->vfit_en = copy_ext->vfit_en; - rect_ext->layout = copy_ext->layout; + ext->hfit_en = copy_ext->hfit_en; + ext->vfit_en = copy_ext->vfit_en; + ext->layout = copy_ext->layout; + + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_rect) == false) { + lv_obj_set_style(new_rect, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_rect, lv_obj_get_style(copy)); + lv_obj_iso_style(new_rect, sizeof(lv_rects_t)); + } + } return new_rect; diff --git a/lv_objx/lv_ta.c b/lv_objx/lv_ta.c index 55b39fbd3..a5a8ff44f 100644 --- a/lv_objx/lv_ta.c +++ b/lv_objx/lv_ta.c @@ -68,24 +68,20 @@ lv_obj_t * lv_ta_create(lv_obj_t * par, lv_obj_t * copy) /*Allocate the object type specific extended data*/ lv_ta_ext_t * ext = lv_obj_alloc_ext(new_ta, sizeof(lv_ta_ext_t)); dm_assert(ext); + ext->cur_hide = 0; + ext->cursor_pos = 0; + ext->cursor_valid_x = 0; + ext->label = NULL; - if(ancestor_design_f == NULL) { - ancestor_design_f = lv_obj_get_design_f(new_ta); - } + if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_f(new_ta); + if(scrl_design_f == NULL) scrl_design_f = lv_obj_get_design_f(ext->page.scrl); lv_obj_set_signal_f(new_ta, lv_ta_signal); lv_obj_set_design_f(new_ta, lv_ta_design); - ext->cursor_valid_x = 0; - ext->cursor_pos = 0; - ext->cur_hide = 0; - /*Init the new text area object*/ if(copy == NULL) { ext->label = lv_label_create(new_ta, NULL); - if(scrl_design_f == NULL) { - scrl_design_f = lv_obj_get_design_f(ext->page.scrl); - } lv_obj_set_design_f(ext->page.scrl, lv_ta_scrling_design); lv_label_set_long_mode(ext->label, LV_LABEL_LONG_BREAK); @@ -102,8 +98,13 @@ lv_obj_t * lv_ta_create(lv_obj_t * par, lv_obj_t * copy) ext->label = lv_label_create(new_ta, copy_ext->label); lv_page_glue_obj(ext->label, true); - /*Refresh the style when everything is ready*/ - lv_obj_set_style(new_ta, lv_obj_get_style(copy)); + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_ta) == false) { + lv_obj_set_style(new_ta, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_ta, lv_obj_get_style(copy)); + lv_obj_iso_style(new_ta, sizeof(lv_rects_t)); + } } /*Create a cursor blinker animation*/ diff --git a/lv_objx/lv_win.c b/lv_objx/lv_win.c index 2e9545d2e..1096530eb 100644 --- a/lv_objx/lv_win.c +++ b/lv_objx/lv_win.c @@ -63,13 +63,13 @@ lv_obj_t * lv_win_create(lv_obj_t * par, lv_obj_t * copy) /*Allocate the object type specific extended data*/ lv_win_ext_t * ext = lv_obj_alloc_ext(new_win, sizeof(lv_win_ext_t)); dm_assert(ext); + ext->content = NULL; + ext->ctrl_holder = NULL; + ext->header = NULL; + ext->title = NULL; - /*The signal and design functions are not copied so set them here*/ lv_obj_set_signal_f(new_win, lv_win_signal); - /* The design function is not changed - lv_obj_set_design_f(new_obj, lv_win_design); */ - lv_obj_set_size(new_win, LV_HOR_RES, LV_VER_RES); /*Init the new window object*/ if(copy == NULL) { @@ -91,7 +91,7 @@ lv_obj_t * lv_win_create(lv_obj_t * par, lv_obj_t * copy) lv_obj_set_style(new_win, lv_wins_get(LV_WINS_DEF, NULL)); - lv_win_realign(new_win); + lv_obj_set_size(new_win, LV_HOR_RES, LV_VER_RES); } /*Copy an existing object*/ else { @@ -112,11 +112,17 @@ lv_obj_t * lv_win_create(lv_obj_t * par, lv_obj_t * copy) child = lv_obj_get_child(copy_ext->ctrl_holder, child); } - lv_obj_set_style(new_win, lv_obj_get_style(copy)); - - lv_win_realign(new_win); + /*Set the style of 'copy' and isolate it if it is necessary*/ + if(lv_obj_get_style_iso(new_win) == false) { + lv_obj_set_style(new_win, lv_obj_get_style(copy)); + } else { + lv_obj_set_style(new_win, lv_obj_get_style(copy)); + lv_obj_iso_style(new_win, sizeof(lv_wins_t)); + } } + lv_win_realign(new_win); + return new_win; }