1 #include "../../lv_examples.h"
2 #if LV_USE_SLIDER && LV_BUILD_EXAMPLES
3 
4 #define MAX_VALUE 100
5 #define MIN_VALUE 0
6 
7 static void slider_event_cb(lv_event_t * e);
8 
9 /**
10  * Show the current value when the slider is pressed by extending the drawer
11  *
12  */
lv_example_slider_3(void)13 void lv_example_slider_3(void)
14 {
15     /*Create a slider in the center of the display*/
16     lv_obj_t * slider;
17     slider = lv_slider_create(lv_screen_active());
18     lv_obj_center(slider);
19 
20     lv_slider_set_mode(slider, LV_SLIDER_MODE_RANGE);
21     lv_slider_set_range(slider, MIN_VALUE, MAX_VALUE);
22     lv_slider_set_value(slider, 70, LV_ANIM_OFF);
23     lv_slider_set_left_value(slider, 20, LV_ANIM_OFF);
24 
25     lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_ALL, NULL);
26     lv_obj_refresh_ext_draw_size(slider);
27 }
28 
slider_event_cb(lv_event_t * e)29 static void slider_event_cb(lv_event_t * e)
30 {
31     lv_event_code_t code = lv_event_get_code(e);
32     lv_obj_t * obj = lv_event_get_target(e);
33 
34     /*Provide some extra space for the value*/
35     if(code == LV_EVENT_REFR_EXT_DRAW_SIZE) {
36         lv_event_set_ext_draw_size(e, 50);
37     }
38     else if(code == LV_EVENT_DRAW_MAIN_END) {
39         if(!lv_obj_has_state(obj, LV_STATE_PRESSED)) return;
40 
41         lv_area_t slider_area;
42         lv_obj_get_coords(obj, &slider_area);
43         lv_area_t indic_area = slider_area;
44         lv_area_set_width(&indic_area, lv_area_get_width(&slider_area) * lv_slider_get_value(obj) / MAX_VALUE);
45         indic_area.x1 += lv_area_get_width(&slider_area) * lv_slider_get_left_value(obj) / MAX_VALUE;
46         char buf[16];
47         lv_snprintf(buf, sizeof(buf), "%d - %d", (int)lv_slider_get_left_value(obj), (int)lv_slider_get_value(obj));
48 
49         lv_point_t label_size;
50         lv_text_get_size(&label_size, buf, LV_FONT_DEFAULT, 0, 0, LV_COORD_MAX, 0);
51         lv_area_t label_area;
52         label_area.x1 = 0;
53         label_area.x2 = label_size.x - 1;
54         label_area.y1 = 0;
55         label_area.y2 = label_size.y - 1;
56 
57         lv_area_align(&indic_area, &label_area, LV_ALIGN_OUT_TOP_MID, 0, -10);
58 
59         lv_draw_label_dsc_t label_draw_dsc;
60         lv_draw_label_dsc_init(&label_draw_dsc);
61         label_draw_dsc.color = lv_color_hex3(0x888);
62         label_draw_dsc.text = buf;
63         label_draw_dsc.text_local = true;
64         lv_layer_t * layer = lv_event_get_layer(e);
65         lv_draw_label(layer, &label_draw_dsc, &label_area);
66     }
67 }
68 
69 #endif
70