1 /**
2 * @file lv_spinner.c
3 *
4 */
5
6 /*********************
7 * INCLUDES
8 *********************/
9 #include "lv_spinner.h"
10 #if LV_USE_SPINNER
11
12 /*********************
13 * DEFINES
14 *********************/
15
16 /**********************
17 * TYPEDEFS
18 **********************/
19
20 /**********************
21 * STATIC PROTOTYPES
22 **********************/
23 static void lv_spinner_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj);
24 static void arc_anim_start_angle(void * obj, int32_t v);
25 static void arc_anim_end_angle(void * obj, int32_t v);
26
27 /**********************
28 * STATIC VARIABLES
29 **********************/
30 const lv_obj_class_t lv_spinner_class = {
31 .base_class = &lv_arc_class,
32 .constructor_cb = lv_spinner_constructor
33 };
34
35 static uint32_t time_param;
36 static uint32_t arc_length_param;
37
38 /**********************
39 * MACROS
40 **********************/
41
42 /**********************
43 * GLOBAL FUNCTIONS
44 **********************/
45
46 /**
47 * Create a spinner object
48 * @param parent pointer to an object, it will be the parent of the new spinner
49 * @return pointer to the created spinner
50 */
lv_spinner_create(lv_obj_t * parent,uint32_t time,uint32_t arc_length)51 lv_obj_t * lv_spinner_create(lv_obj_t * parent, uint32_t time, uint32_t arc_length)
52 {
53 time_param = time;
54 arc_length_param = arc_length;
55
56 lv_obj_t * obj = lv_obj_class_create_obj(&lv_spinner_class, parent);
57 lv_obj_class_init_obj(obj);
58 return obj;
59 }
60
61
62 /**********************
63 * STATIC FUNCTIONS
64 **********************/
65
lv_spinner_constructor(const lv_obj_class_t * class_p,lv_obj_t * obj)66 static void lv_spinner_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj)
67 {
68 LV_TRACE_OBJ_CREATE("begin");
69
70 LV_UNUSED(class_p);
71
72 lv_obj_clear_flag(obj, LV_OBJ_FLAG_CLICKABLE);
73
74 lv_anim_t a;
75 lv_anim_init(&a);
76 lv_anim_set_var(&a, obj);
77 lv_anim_set_exec_cb(&a, arc_anim_end_angle);
78 lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
79 lv_anim_set_time(&a, time_param);
80 lv_anim_set_values(&a, arc_length_param, 360 + arc_length_param);
81 lv_anim_start(&a);
82
83 lv_anim_set_path_cb(&a, lv_anim_path_ease_in_out);
84 lv_anim_set_values(&a, 0, 360);
85 lv_anim_set_exec_cb(&a, arc_anim_start_angle);
86 lv_anim_start(&a);
87
88 lv_arc_set_bg_angles(obj, 0, 360);
89 lv_arc_set_rotation(obj, 270);
90 }
91
92
arc_anim_start_angle(void * obj,int32_t v)93 static void arc_anim_start_angle(void * obj, int32_t v)
94 {
95 lv_arc_set_start_angle(obj, (uint16_t) v);
96 }
97
98
arc_anim_end_angle(void * obj,int32_t v)99 static void arc_anim_end_angle(void * obj, int32_t v)
100 {
101 lv_arc_set_end_angle(obj, (uint16_t) v);
102 }
103
104 #endif /*LV_USE_SPINNER*/
105