1 /**
2  * @file lv_demo_scroll.c
3  */
4 
5 /*********************
6  *      INCLUDES
7  *********************/
8 #include "lv_demo_scroll.h"
9 
10 #if LV_USE_DEMO_SCROLL
11 
12 /*********************
13  *      DEFINES
14  *********************/
15 
16 /**********************
17  *      TYPEDEFS
18  **********************/
19 
20 /**********************
21  *  STATIC PROTOTYPES
22  **********************/
23 static lv_obj_t * switch_create(lv_obj_t * parent, const char * title, lv_obj_flag_t flag, bool en);
24 static void generic_switch_event_cb(lv_event_t * e);
25 
26 /**********************
27  *  STATIC VARIABLES
28  **********************/
29 static lv_obj_t * list;
30 
31 /**********************
32  *      MACROS
33  **********************/
34 
35 /**********************
36  *   GLOBAL FUNCTIONS
37  **********************/
lv_demo_scroll(void)38 void lv_demo_scroll(void)
39 {
40     lv_obj_t * panel = lv_obj_create(lv_screen_active());
41     lv_obj_set_style_shadow_width(panel, 16, 0);
42     lv_obj_set_style_shadow_offset_y(panel, 8, 0);
43     lv_obj_set_style_shadow_offset_x(panel, 4, 0);
44     lv_obj_set_style_shadow_opa(panel, LV_OPA_40, 0);
45 
46     lv_obj_set_size(panel, lv_pct(70), lv_pct(90));
47     lv_obj_center(panel);
48     lv_obj_set_flex_flow(panel, LV_FLEX_FLOW_COLUMN);
49     lv_obj_set_flex_align(panel, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
50 
51     list = lv_list_create(panel);
52     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image1.png");
53     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image2.png");
54     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image3.png");
55     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image4.png");
56     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image5.png");
57     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image6.png");
58     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image7.png");
59     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image8.png");
60     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image9.png");
61     lv_list_add_button(list, LV_SYMBOL_IMAGE, "Image10.png");
62 
63     switch_create(panel, "Scrollable", LV_OBJ_FLAG_SCROLLABLE, true);
64     switch_create(panel, "Scroll chain", LV_OBJ_FLAG_SCROLL_CHAIN, true);
65     switch_create(panel, "Elastic scroll", LV_OBJ_FLAG_SCROLL_ELASTIC, true);
66     switch_create(panel, "Add scroll momentum", LV_OBJ_FLAG_SCROLL_MOMENTUM, true);
67 
68     /*Show the switches first*/
69     lv_obj_move_foreground(list);
70 
71 }
72 
73 /**********************
74  *   STATIC FUNCTIONS
75  **********************/
76 
switch_create(lv_obj_t * parent,const char * title,lv_obj_flag_t flag,bool en)77 static lv_obj_t * switch_create(lv_obj_t * parent, const char * title, lv_obj_flag_t flag, bool en)
78 {
79     lv_obj_t * cont = lv_obj_create(parent);
80     lv_obj_remove_style_all(cont);
81     lv_obj_set_size(cont, lv_pct(100), LV_SIZE_CONTENT);
82     lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_ROW);
83     lv_obj_set_flex_align(cont, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_START);
84 
85     lv_obj_t * label = lv_label_create(cont);
86     lv_label_set_text(label, title);
87     lv_obj_set_flex_grow(label, 1);
88 
89     lv_obj_t * sw = lv_switch_create(cont);
90     lv_obj_add_event_cb(sw, generic_switch_event_cb, LV_EVENT_VALUE_CHANGED, (void *)((lv_uintptr_t) flag));
91     if(en) {
92         lv_obj_add_state(sw, LV_STATE_CHECKED);
93         lv_obj_add_flag(list, flag);
94     }
95     else {
96         lv_obj_remove_state(sw, LV_STATE_CHECKED);
97         lv_obj_remove_flag(list, flag);
98     }
99 
100     return cont;
101 }
102 
generic_switch_event_cb(lv_event_t * e)103 static void generic_switch_event_cb(lv_event_t * e)
104 {
105     lv_obj_t * sw = lv_event_get_target(e);
106     lv_obj_flag_t flag = (lv_obj_flag_t)((lv_uintptr_t)lv_event_get_user_data(e));
107 
108     if(lv_obj_has_state(sw, LV_STATE_CHECKED)) lv_obj_add_flag(list, flag);
109     else lv_obj_remove_flag(list, flag);
110 }
111 
112 #endif
113