I studied your article, that was so advanced for me(took me 8 hours that can write something) but gave me a lot of insight though I am not finished with that. I end up with something like this.
typedef struct
{
lv_obj_t *slider; /*Include the ancestors extend data first*/
lv_obj_t *value_label;
lv_obj_t *name_label;
/*Add new data*/
} gui_slider_t;
void slider_event_handler(lv_obj_t *obj, lv_event_t event)
{
gui_slider_t *ext = lv_obj_get_ext_attr(obj);
if (event == LV_EVENT_VALUE_CHANGED)
{
char val[5];
sprintf(val, "%d", lv_slider_get_value(obj) );
lv_label_set_text(ext->value_label, val);
//printf("Value: %d\n", );
}
}
gui_slider_t *gui_slider_create(lv_obj_t *parent, lv_event_cb_t cb)
{
//slider part
static lv_style_t style_bg;
static lv_style_t style_indic;
static lv_style_t style_knob;
lv_style_copy(&style_bg, &lv_style_pretty);
style_bg.body.main_color = LV_COLOR_BLACK;
style_bg.body.grad_color = LV_COLOR_GRAY;
style_bg.body.radius = LV_RADIUS_CIRCLE;
style_bg.body.border.color = LV_COLOR_WHITE;
lv_style_copy(&style_indic, &lv_style_pretty_color);
style_indic.body.radius = LV_RADIUS_CIRCLE;
style_indic.body.shadow.width = 8;
style_indic.body.shadow.color = style_indic.body.main_color;
style_indic.body.padding.left = 3;
style_indic.body.padding.right = 3;
style_indic.body.padding.top = 3;
style_indic.body.padding.bottom = 3;
lv_style_copy(&style_knob, &lv_style_pretty);
style_knob.body.radius = LV_RADIUS_CIRCLE;
style_knob.body.opa = LV_OPA_70;
style_knob.body.padding.top = 10 ;
style_knob.body.padding.bottom = 10 ;
/*Create a slider*/
lv_obj_t* slider = lv_slider_create(parent, NULL);
lv_slider_set_range(slider, 0, 6);
lv_obj_set_pos(slider, 50, 0);
lv_slider_set_style(slider, LV_SLIDER_STYLE_BG, &style_bg);
lv_slider_set_style(slider, LV_SLIDER_STYLE_INDIC, &style_indic);
lv_slider_set_style(slider, LV_SLIDER_STYLE_KNOB, &style_knob);
lv_obj_set_event_cb(slider, cb);
lv_obj_set_width(slider, 90);
lv_obj_allocate_ext_attr(slider, sizeof(gui_slider_t));
/*Create additoinal objects (like labels) and save them in `gui_slider_t`*/
lv_obj_t *value_label = lv_label_create(parent, NULL);
lv_obj_t* name_label = lv_label_create(parent, NULL);
gui_slider_t *ext = lv_obj_get_ext_attr(slider);
// ext->slider=slider;
ext->value_label=value_label;
ext->name_label=name_label;
//label name part
lv_label_set_long_mode(name_label, LV_LABEL_LONG_BREAK); /*Break the long lines*/
lv_label_set_recolor(name_label, true); /*Enable re-coloring by commands in the text*/
lv_obj_set_pos(name_label, 10, 0);
lv_obj_set_width(name_label, 120);
// value label
lv_label_set_long_mode(value_label, LV_LABEL_LONG_BREAK); /*Break the long lines*/
lv_label_set_recolor(value_label, true); /*Enable re-coloring by commands in the text*/
lv_obj_set_pos(value_label, 160, 5); /*Center aligned lines*/
lv_label_set_text(value_label, "0");
lv_obj_set_width(value_label, 60);
/*Other settings an adjustments*/
return ext;
/*Return `gui_slider_t *` */
}
in main i will call
gui_slider_t *x1= gui_slider_create(page, slider_event_handler);
when I changed slider value it changed from 0 to 7480 while I set it from 0 to 6
what is my mistake?