1 /** 2 * @file lv_arc.h 3 * 4 */ 5 6 #ifndef LV_ARC_H 7 #define LV_ARC_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 #include "../lv_conf_internal.h" 17 18 #if LV_USE_ARC != 0 19 20 #include "../core/lv_obj.h" 21 22 /********************* 23 * DEFINES 24 *********************/ 25 26 /********************** 27 * TYPEDEFS 28 **********************/ 29 30 enum { 31 LV_ARC_MODE_NORMAL, 32 LV_ARC_MODE_SYMMETRICAL, 33 LV_ARC_MODE_REVERSE 34 }; 35 typedef uint8_t lv_arc_mode_t; 36 37 typedef struct { 38 lv_obj_t obj; 39 uint16_t rotation; 40 uint16_t indic_angle_start; 41 uint16_t indic_angle_end; 42 uint16_t bg_angle_start; 43 uint16_t bg_angle_end; 44 int16_t value; /*Current value of the arc*/ 45 int16_t min_value; /*Minimum value of the arc*/ 46 int16_t max_value; /*Maximum value of the arc*/ 47 uint16_t dragging : 1; 48 uint16_t type : 2; 49 uint16_t min_close : 1; /*1: the last pressed angle was closer to minimum end*/ 50 uint16_t chg_rate; /*Drag angle rate of change of the arc (degrees/sec)*/ 51 uint32_t last_tick; /*Last dragging event timestamp of the arc*/ 52 int16_t last_angle; /*Last dragging angle of the arc*/ 53 } lv_arc_t; 54 55 extern const lv_obj_class_t lv_arc_class; 56 57 /** 58 * `type` field in `lv_obj_draw_part_dsc_t` if `class_p = lv_arc_class` 59 * Used in `LV_EVENT_DRAW_PART_BEGIN` and `LV_EVENT_DRAW_PART_END` 60 */ 61 typedef enum { 62 LV_ARC_DRAW_PART_BACKGROUND, /**< The background arc*/ 63 LV_ARC_DRAW_PART_FOREGROUND, /**< The foreground arc*/ 64 LV_ARC_DRAW_PART_KNOB, /**< The knob*/ 65 } lv_arc_draw_part_type_t; 66 67 /********************** 68 * GLOBAL PROTOTYPES 69 **********************/ 70 71 /** 72 * Create an arc object 73 * @param parent pointer to an object, it will be the parent of the new arc 74 * @return pointer to the created arc 75 */ 76 lv_obj_t * lv_arc_create(lv_obj_t * parent); 77 78 /*====================== 79 * Add/remove functions 80 *=====================*/ 81 82 /*===================== 83 * Setter functions 84 *====================*/ 85 86 /** 87 * Set the start angle of an arc. 0 deg: right, 90 bottom, etc. 88 * @param obj pointer to an arc object 89 * @param start the start angle 90 */ 91 void lv_arc_set_start_angle(lv_obj_t * obj, uint16_t start); 92 93 /** 94 * Set the end angle of an arc. 0 deg: right, 90 bottom, etc. 95 * @param obj pointer to an arc object 96 * @param end the end angle 97 */ 98 void lv_arc_set_end_angle(lv_obj_t * obj, uint16_t end); 99 100 /** 101 * Set the start and end angles 102 * @param obj pointer to an arc object 103 * @param start the start angle 104 * @param end the end angle 105 */ 106 void lv_arc_set_angles(lv_obj_t * obj, uint16_t start, uint16_t end); 107 108 /** 109 * Set the start angle of an arc background. 0 deg: right, 90 bottom, etc. 110 * @param obj pointer to an arc object 111 * @param start the start angle 112 */ 113 void lv_arc_set_bg_start_angle(lv_obj_t * obj, uint16_t start); 114 115 /** 116 * Set the start angle of an arc background. 0 deg: right, 90 bottom etc. 117 * @param obj pointer to an arc object 118 * @param end the end angle 119 */ 120 void lv_arc_set_bg_end_angle(lv_obj_t * obj, uint16_t end); 121 122 /** 123 * Set the start and end angles of the arc background 124 * @param obj pointer to an arc object 125 * @param start the start angle 126 * @param end the end angle 127 */ 128 void lv_arc_set_bg_angles(lv_obj_t * obj, uint16_t start, uint16_t end); 129 130 /** 131 * Set the rotation for the whole arc 132 * @param obj pointer to an arc object 133 * @param rotation rotation angle 134 */ 135 void lv_arc_set_rotation(lv_obj_t * obj, uint16_t rotation); 136 137 /** 138 * Set the type of arc. 139 * @param obj pointer to arc object 140 * @param mode arc's mode 141 */ 142 void lv_arc_set_mode(lv_obj_t * obj, lv_arc_mode_t type); 143 144 /** 145 * Set a new value on the arc 146 * @param obj pointer to an arc object 147 * @param value new value 148 */ 149 void lv_arc_set_value(lv_obj_t * obj, int16_t value); 150 151 /** 152 * Set minimum and the maximum values of an arc 153 * @param obj pointer to the arc object 154 * @param min minimum value 155 * @param max maximum value 156 */ 157 void lv_arc_set_range(lv_obj_t * obj, int16_t min, int16_t max); 158 159 /** 160 * Set a change rate to limit the speed how fast the arc should reach the pressed point. 161 * @param obj pointer to an arc object 162 * @param rate the change rate 163 */ 164 void lv_arc_set_change_rate(lv_obj_t * obj, uint16_t rate); 165 166 /*===================== 167 * Getter functions 168 *====================*/ 169 170 /** 171 * Get the start angle of an arc. 172 * @param obj pointer to an arc object 173 * @return the start angle [0..360] 174 */ 175 uint16_t lv_arc_get_angle_start(lv_obj_t * obj); 176 177 /** 178 * Get the end angle of an arc. 179 * @param obj pointer to an arc object 180 * @return the end angle [0..360] 181 */ 182 uint16_t lv_arc_get_angle_end(lv_obj_t * obj); 183 184 /** 185 * Get the start angle of an arc background. 186 * @param obj pointer to an arc object 187 * @return the start angle [0..360] 188 */ 189 uint16_t lv_arc_get_bg_angle_start(lv_obj_t * obj); 190 191 /** 192 * Get the end angle of an arc background. 193 * @param obj pointer to an arc object 194 * @return the end angle [0..360] 195 */ 196 uint16_t lv_arc_get_bg_angle_end(lv_obj_t * obj); 197 198 /** 199 * Get the value of an arc 200 * @param obj pointer to an arc object 201 * @return the value of the arc 202 */ 203 int16_t lv_arc_get_value(const lv_obj_t * obj); 204 205 /** 206 * Get the minimum value of an arc 207 * @param obj pointer to an arc object 208 * @return the minimum value of the arc 209 */ 210 int16_t lv_arc_get_min_value(const lv_obj_t * obj); 211 212 /** 213 * Get the maximum value of an arc 214 * @param obj pointer to an arc object 215 * @return the maximum value of the arc 216 */ 217 int16_t lv_arc_get_max_value(const lv_obj_t * obj); 218 219 /** 220 * Get whether the arc is type or not. 221 * @param obj pointer to an arc object 222 * @return arc's mode 223 */ 224 lv_arc_mode_t lv_arc_get_mode(const lv_obj_t * obj); 225 226 /*===================== 227 * Other functions 228 *====================*/ 229 230 /** 231 * Align an object to the current position of the arc (knob) 232 * @param obj pointer to an arc object 233 * @param obj_to_align pointer to an object to align 234 * @param r_offset consider the radius larger with this value (< 0: for smaller radius) 235 */ 236 void lv_arc_align_obj_to_angle(const lv_obj_t * obj, lv_obj_t * obj_to_align, lv_coord_t r_offset); 237 238 /** 239 * Rotate an object to the current position of the arc (knob) 240 * @param obj pointer to an arc object 241 * @param obj_to_align pointer to an object to rotate 242 * @param r_offset consider the radius larger with this value (< 0: for smaller radius) 243 */ 244 void lv_arc_rotate_obj_to_angle(const lv_obj_t * obj, lv_obj_t * obj_to_rotate, lv_coord_t r_offset); 245 246 /********************** 247 * MACROS 248 **********************/ 249 250 #endif /*LV_USE_ARC*/ 251 252 #ifdef __cplusplus 253 } /*extern "C"*/ 254 #endif 255 256 #endif /*LV_ARC_H*/ 257