Merge pull request #607 from aenchevich/dev-5.3
lv_roller_set_align and some minor bug fixes
This commit is contained in:
@@ -514,7 +514,6 @@ static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p)
|
|||||||
if(union_ok != false) {
|
if(union_ok != false) {
|
||||||
|
|
||||||
/* Redraw the object */
|
/* Redraw the object */
|
||||||
lv_style_t * style = lv_obj_get_style(obj);
|
|
||||||
obj->design_func(obj, &obj_ext_mask, LV_DESIGN_DRAW_MAIN);
|
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*/
|
//tick_wait_ms(100); /*DEBUG: Wait after every object draw to see the order of drawing*/
|
||||||
|
|
||||||
|
|||||||
@@ -81,10 +81,11 @@ lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
|
|||||||
}
|
}
|
||||||
/*Copy an existing image button*/
|
/*Copy an existing image button*/
|
||||||
else {
|
else {
|
||||||
lv_imgbtn_ext_t * copy_ext = lv_obj_get_ext_attr(copy);
|
|
||||||
#if LV_IMGBTN_TILED == 0
|
#if LV_IMGBTN_TILED == 0
|
||||||
memset(ext->img_src, 0, sizeof(ext->img_src));
|
memset(ext->img_src, 0, sizeof(ext->img_src));
|
||||||
#else
|
#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_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_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));
|
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)
|
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];
|
return NULL;//ext->img_src[state];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,6 +123,19 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
|
|||||||
* Setter functions
|
* 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
|
* Set the selected option
|
||||||
* @param roller pointer to a roller object
|
* @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_roller_ext_t * ext = lv_obj_get_ext_attr(roller);
|
||||||
lv_style_t * style_label = lv_obj_get_style(ext->ddlist.label);
|
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));
|
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
|
* Set a style of a roller
|
||||||
* @param roller pointer to a roller object
|
* @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
|
* 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
|
* Get the auto width set attribute
|
||||||
* @param roller pointer to a roller object
|
* @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
|
* STATIC FUNCTIONS
|
||||||
**********************/
|
**********************/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle the drawing related tasks of the rollers
|
* Handle the drawing related tasks of the rollers
|
||||||
* @param roller pointer to an object
|
* @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) {
|
if(area_ok) {
|
||||||
lv_style_t * sel_style = lv_roller_get_style(roller, LV_ROLLER_STYLE_SEL);
|
lv_style_t * sel_style = lv_roller_get_style(roller, LV_ROLLER_STYLE_SEL);
|
||||||
lv_style_t new_style;
|
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);
|
lv_style_copy(&new_style, style);
|
||||||
new_style.text.color = sel_style->text.color;
|
new_style.text.color = sel_style->text.color;
|
||||||
new_style.text.opa = sel_style->text.opa;
|
new_style.text.opa = sel_style->text.opa;
|
||||||
lv_draw_label(&ext->ddlist.label->coords, &mask_sel, &new_style, opa_scale,
|
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_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) {
|
if(sign == LV_SIGNAL_STYLE_CHG) {
|
||||||
lv_obj_set_height(lv_page_get_scrl(roller),
|
lv_obj_set_height(lv_page_get_scrl(roller),
|
||||||
lv_obj_get_height(ext->ddlist.label) + lv_obj_get_height(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);
|
lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id);
|
||||||
refr_position(roller, false);
|
refr_position(roller, false);
|
||||||
} else if(sign == LV_SIGNAL_CORD_CHG) {
|
} 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_set_height(lv_page_get_scrl(roller),
|
||||||
lv_obj_get_height(ext->ddlist.label) + lv_obj_get_height(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);
|
lv_ddlist_set_selected(roller, ext->ddlist.sel_opt_id);
|
||||||
refr_position(roller, false);
|
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*/
|
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) {
|
} else if(sign == LV_SIGNAL_DEFOCUS) {
|
||||||
/*Revert the original state*/
|
/*Revert the original state*/
|
||||||
if(ext->ddlist.sel_opt_id != ext->ddlist.sel_opt_id_ori) {
|
if(ext->ddlist.sel_opt_id != ext->ddlist.sel_opt_id_ori) {
|
||||||
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);
|
refr_position(roller, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if(sign == LV_SIGNAL_CONTROLL) {
|
} else if(sign == LV_SIGNAL_CONTROLL) {
|
||||||
char c = *((char *)param);
|
char c = *((char *)param);
|
||||||
if(c == LV_GROUP_KEY_RIGHT || c == LV_GROUP_KEY_DOWN) {
|
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.main_color = main_tmp;
|
||||||
style->body.grad_color = grad_tmp;
|
style->body.grad_color = grad_tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ extern "C" {
|
|||||||
|
|
||||||
#include "../lv_core/lv_obj.h"
|
#include "../lv_core/lv_obj.h"
|
||||||
#include "lv_ddlist.h"
|
#include "lv_ddlist.h"
|
||||||
|
#include "lv_label.h"
|
||||||
|
|
||||||
/*********************
|
/*********************
|
||||||
* DEFINES
|
* DEFINES
|
||||||
@@ -64,6 +65,13 @@ lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy);
|
|||||||
* Setter functions
|
* 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
|
* Set the options on a roller
|
||||||
* @param roller pointer to roller object
|
* @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);
|
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
|
* Set a function to call when a new option is chosen
|
||||||
* @param roller pointer to a roller
|
* @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);
|
lv_ddlist_set_anim_time(roller, anim_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a style of a roller
|
* Set a style of a roller
|
||||||
* @param roller pointer to a roller object
|
* @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
|
* 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
|
* Get the options of a roller
|
||||||
* @param roller pointer to roller object
|
* @param roller pointer to roller object
|
||||||
|
|||||||
Reference in New Issue
Block a user