From 64a2a85077470100f560de621666cfed2a2fbe6e Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 4 Dec 2018 18:54:26 +0200 Subject: [PATCH 1/2] Compilation error fixes --- lv_core/lv_refr.c | 1 - lv_objx/lv_chart.c | 2 -- lv_objx/lv_imgbtn.c | 5 +++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/lv_core/lv_refr.c b/lv_core/lv_refr.c index 766c6e2e9..63c9bdc86 100644 --- a/lv_core/lv_refr.c +++ b/lv_core/lv_refr.c @@ -514,7 +514,6 @@ static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p) if(union_ok != false) { /* Redraw the object */ - lv_style_t * style = lv_obj_get_style(obj); obj->design_func(obj, &obj_ext_mask, LV_DESIGN_DRAW_MAIN); //tick_wait_ms(100); /*DEBUG: Wait after every object draw to see the order of drawing*/ diff --git a/lv_objx/lv_chart.c b/lv_objx/lv_chart.c index b3ac83880..92e09a400 100644 --- a/lv_objx/lv_chart.c +++ b/lv_objx/lv_chart.c @@ -731,7 +731,6 @@ static void lv_chart_draw_cols(lv_obj_t * chart, const lv_area_t * mask) col_a.y2 = chart->coords.y2; lv_coord_t x_act; - printf("\n", y_tmp); /*Go through all points*/ for(i = 0; i < ext->point_cnt; i ++) { @@ -749,7 +748,6 @@ static void lv_chart_draw_cols(lv_obj_t * chart, const lv_area_t * mask) lv_coord_t p_act = (ser->start_point + i) % ext->point_cnt; y_tmp = (int32_t)((int32_t) ser->points[p_act] - ext->ymin) * h; y_tmp = y_tmp / (ext->ymax - ext->ymin); - printf("ytmp:%d\n", y_tmp); col_a.y1 = h - y_tmp + chart->coords.y1; mask_ret = lv_area_intersect(&col_mask, mask, &col_a); diff --git a/lv_objx/lv_imgbtn.c b/lv_objx/lv_imgbtn.c index b7e061fb2..5bec801f1 100644 --- a/lv_objx/lv_imgbtn.c +++ b/lv_objx/lv_imgbtn.c @@ -81,10 +81,11 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy) } /*Copy an existing image button*/ else { - lv_imgbtn_ext_t * copy_ext = lv_obj_get_ext_attr(copy); #if LV_IMGBTN_TILED == 0 memset(ext->img_src, 0, sizeof(ext->img_src)); #else + lv_imgbtn_ext_t * copy_ext = lv_obj_get_ext_attr(copy); + memcpy(ext->img_src_left, copy_ext->img_src_left, sizeof(ext->img_src_left)); memcpy(ext->img_src_mid, copy_ext->img_src_mid, sizeof(ext->img_src_mid)); memcpy(ext->img_src_right, copy_ext->img_src_right, sizeof(ext->img_src_right)); @@ -163,7 +164,7 @@ void lv_imgbtn_set_style(lv_obj_t * imgbtn, lv_imgbtn_style_t type, lv_style_t * */ const void * lv_imgbtn_get_src(lv_obj_t * imgbtn, lv_btn_state_t state) { - lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn); +// lv_imgbtn_ext_t * ext = lv_obj_get_ext_attr(imgbtn); return NULL;//ext->img_src[state]; } From 50fe1ba14d079b715584624932e25a5b5a7b3fac Mon Sep 17 00:00:00 2001 From: Alexander Date: Wed, 5 Dec 2018 11:46:37 +0200 Subject: [PATCH 2/2] lv_roller_set_align / lv_roller_get_align funcs (user can align the Options: left, right or center) --- lv_objx/lv_roller.c | 63 ++++++++++++++++++++++++++++++++++++++------- lv_objx/lv_roller.h | 17 ++++++++++-- 2 files changed, 68 insertions(+), 12 deletions(-) diff --git a/lv_objx/lv_roller.c b/lv_objx/lv_roller.c index cc8728eb0..8f70c484d 100644 --- a/lv_objx/lv_roller.c +++ b/lv_objx/lv_roller.c @@ -22,7 +22,7 @@ # endif #else # undef LV_ROLLER_ANIM_TIME -# define LV_ROLLER_ANIM_TIME 0 /*No animation*/ +# define LV_ROLLER_ANIM_TIME 0 /*No animation*/ #endif /********************** @@ -75,7 +75,7 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy) lv_mem_assert(ext); if(ext == NULL) return NULL; ext->ddlist.draw_arrow = 0; /*Do not draw arrow by default*/ - + /*The signal and design functions are not copied so set them here*/ lv_obj_set_signal_func(new_roller, lv_roller_signal); lv_obj_set_design_func(new_roller, lv_roller_design); @@ -123,6 +123,19 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy) * Setter functions *====================*/ +/** + * Set the align of the roller's options (left or center) + * @param roller - pointer to a roller object + * @param align - one of lv_label_align_t values (left, right, center) + */ +void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align) +{ + lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller); + lv_mem_assert(ext); + if(ext->ddlist.label == NULL) return; /*Probably the roller is being deleted if the label is NULL.*/ + lv_label_set_align(ext->ddlist.label, align); +} + /** * Set the selected option * @param roller pointer to a roller object @@ -151,8 +164,8 @@ void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt) lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller); lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label); lv_ddlist_set_fix_height(roller, lv_font_get_height(style_label->text.font) * row_cnt + style_label->text.line_space * (row_cnt)); - } + /** * Set a style of a roller * @param roller pointer to a roller object @@ -175,6 +188,19 @@ void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, lv_style_t * * Getter functions *====================*/ +/** + * Get the align attribute. Default alignment after _create is LV_LABEL_ALIGN_CENTER + * @param roller pointer to a roller object + * @return LV_LABEL_ALIGN_LEFT, LV_LABEL_ALIGN_RIGHT or LV_LABEL_ALIGN_CENTER + */ +lv_label_align_t lv_roller_get_align(const lv_obj_t * roller) +{ + lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller); + lv_mem_assert(ext); + lv_mem_assert(ext->ddlist.label); + return lv_label_get_align(ext->ddlist.label); +} + /** * Get the auto width set attribute * @param roller pointer to a roller object @@ -210,7 +236,6 @@ lv_style_t * lv_roller_get_style(const lv_obj_t * roller, lv_roller_style_t type * STATIC FUNCTIONS **********************/ - /** * Handle the drawing related tasks of the rollers * @param roller pointer to an object @@ -266,11 +291,23 @@ static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, lv_desig if(area_ok) { lv_style_t * sel_style = lv_roller_get_style(roller, LV_ROLLER_STYLE_SEL); lv_style_t new_style; + lv_txt_flag_t txt_align = LV_TXT_FLAG_NONE; + + { + lv_label_align_t label_align = lv_label_get_align(ext->ddlist.label); + + if(LV_LABEL_ALIGN_CENTER == label_align) { + txt_align |= LV_TXT_FLAG_CENTER; + } else if(LV_LABEL_ALIGN_RIGHT == label_align) { + txt_align |= LV_TXT_FLAG_RIGHT; + } + } + lv_style_copy(&new_style, style); new_style.text.color = sel_style->text.color; new_style.text.opa = sel_style->text.opa; lv_draw_label(&ext->ddlist.label->coords, &mask_sel, &new_style, opa_scale, - lv_label_get_text(ext->ddlist.label), LV_TXT_FLAG_CENTER, NULL); + lv_label_get_text(ext->ddlist.label), txt_align, NULL); } } @@ -296,10 +333,19 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par } lv_roller_ext_t * ext = lv_obj_get_ext_attr(roller); + lv_align_t obj_align = LV_ALIGN_IN_LEFT_MID; + + { + lv_label_align_t label_align = lv_label_get_align(ext->ddlist.label); + + if(LV_LABEL_ALIGN_CENTER == label_align) obj_align = LV_ALIGN_CENTER; + else if(LV_LABEL_ALIGN_RIGHT == label_align) obj_align = LV_ALIGN_IN_RIGHT_MID; + } + if(sign == LV_SIGNAL_STYLE_CHG) { lv_obj_set_height(lv_page_get_scrl(roller), lv_obj_get_height(ext->ddlist.label) + lv_obj_get_height(roller)); - lv_obj_align(ext->ddlist.label, NULL, LV_ALIGN_CENTER, 0, 0); + lv_obj_align(ext->ddlist.label, NULL, obj_align, 0, 0); lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id); refr_position(roller, false); } else if(sign == LV_SIGNAL_CORD_CHG) { @@ -311,7 +357,7 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par lv_obj_set_height(lv_page_get_scrl(roller), lv_obj_get_height(ext->ddlist.label) + lv_obj_get_height(roller)); - lv_obj_align(ext->ddlist.label, NULL, LV_ALIGN_CENTER, 0, 0); + lv_obj_align(ext->ddlist.label, NULL, obj_align, 0, 0); lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id); refr_position(roller, false); } @@ -337,14 +383,12 @@ static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, void * par ext->ddlist.sel_opt_id_ori = ext->ddlist.sel_opt_id; /*Save the current value. Used to revert this state if ENER wont't be pressed*/ } - } else if(sign == LV_SIGNAL_DEFOCUS) { /*Revert the original state*/ if(ext->ddlist.sel_opt_id != ext->ddlist.sel_opt_id_ori) { ext->ddlist.sel_opt_id = ext->ddlist.sel_opt_id_ori; refr_position(roller, true); } - } else if(sign == LV_SIGNAL_CONTROLL) { char c = *((char *)param); if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_DOWN) { @@ -486,7 +530,6 @@ static void draw_bg(lv_obj_t * roller, const lv_area_t * mask) style->body.main_color = main_tmp; style->body.grad_color = grad_tmp; } - } /** diff --git a/lv_objx/lv_roller.h b/lv_objx/lv_roller.h index d0aaed42a..a751cd8c3 100644 --- a/lv_objx/lv_roller.h +++ b/lv_objx/lv_roller.h @@ -28,6 +28,7 @@ extern "C" { #include "../lv_core/lv_obj.h" #include "lv_ddlist.h" +#include "lv_label.h" /********************* * DEFINES @@ -64,6 +65,13 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy); * Setter functions *====================*/ +/** + * Set the align of the roller's options (left, right or center[default]) + * @param roller - pointer to a roller object + * @param align - one of lv_label_align_t values (left, right, center) + */ +void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align); + /** * Set the options on a roller * @param roller pointer to roller object @@ -82,7 +90,6 @@ static inline void lv_roller_set_options(lv_obj_t * roller, const char * options */ void lv_roller_set_selected(lv_obj_t *roller, uint16_t sel_opt, bool anim_en); - /** * Set a function to call when a new option is chosen * @param roller pointer to a roller @@ -120,7 +127,6 @@ static inline void lv_roller_set_anim_time(lv_obj_t *roller, uint16_t anim_time) lv_ddlist_set_anim_time(roller, anim_time); } - /** * Set a style of a roller * @param roller pointer to a roller object @@ -133,6 +139,13 @@ void lv_roller_set_style(lv_obj_t *roller, lv_roller_style_t type, lv_style_t *s * Getter functions *====================*/ +/** + * Get the align attribute. Default alignment after _create is LV_LABEL_ALIGN_CENTER + * @param roller pointer to a roller object + * @return LV_LABEL_ALIGN_LEFT, LV_LABEL_ALIGN_RIGHT or LV_LABEL_ALIGN_CENTER + */ +lv_label_align_t lv_roller_get_align(const lv_obj_t * roller); + /** * Get the options of a roller * @param roller pointer to roller object