Lines Matching refs:arc
44 static void inv_arc_area(lv_obj_t * arc, lv_value_precise_t start_angle, lv_value_precise_t end_ang…
48 static void get_knob_area(lv_obj_t * arc, const lv_point_t * center, int32_t r, lv_area_t * knob_ar…
49 static void value_update(lv_obj_t * arc);
97 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_start_angle() local
101 lv_value_precise_t old_delta = arc->indic_angle_end - arc->indic_angle_start; in lv_arc_set_start_angle()
102 lv_value_precise_t new_delta = arc->indic_angle_end - start; in lv_arc_set_start_angle()
108 …else if(new_delta < old_delta) inv_arc_area(obj, arc->indic_angle_start, start, LV_PART_INDICATOR); in lv_arc_set_start_angle()
109 …else if(old_delta < new_delta) inv_arc_area(obj, start, arc->indic_angle_start, LV_PART_INDICATOR); in lv_arc_set_start_angle()
113 arc->indic_angle_start = start; in lv_arc_set_start_angle()
121 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_end_angle() local
124 lv_value_precise_t old_delta = arc->indic_angle_end - arc->indic_angle_start; in lv_arc_set_end_angle()
125 lv_value_precise_t new_delta = end - arc->indic_angle_start; in lv_arc_set_end_angle()
131 else if(new_delta < old_delta) inv_arc_area(obj, end, arc->indic_angle_end, LV_PART_INDICATOR); in lv_arc_set_end_angle()
132 else if(old_delta < new_delta) inv_arc_area(obj, arc->indic_angle_end, end, LV_PART_INDICATOR); in lv_arc_set_end_angle()
136 arc->indic_angle_end = end; in lv_arc_set_end_angle()
150 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_bg_start_angle() local
154 lv_value_precise_t old_delta = arc->bg_angle_end - arc->bg_angle_start; in lv_arc_set_bg_start_angle()
155 lv_value_precise_t new_delta = arc->bg_angle_end - start; in lv_arc_set_bg_start_angle()
161 else if(new_delta < old_delta) inv_arc_area(obj, arc->bg_angle_start, start, LV_PART_MAIN); in lv_arc_set_bg_start_angle()
162 else if(old_delta < new_delta) inv_arc_area(obj, start, arc->bg_angle_start, LV_PART_MAIN); in lv_arc_set_bg_start_angle()
164 arc->bg_angle_start = start; in lv_arc_set_bg_start_angle()
172 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_bg_end_angle() local
176 lv_value_precise_t old_delta = arc->bg_angle_end - arc->bg_angle_start; in lv_arc_set_bg_end_angle()
177 lv_value_precise_t new_delta = end - arc->bg_angle_start; in lv_arc_set_bg_end_angle()
183 else if(new_delta < old_delta) inv_arc_area(obj, end, arc->bg_angle_end, LV_PART_MAIN); in lv_arc_set_bg_end_angle()
184 else if(old_delta < new_delta) inv_arc_area(obj, arc->bg_angle_end, end, LV_PART_MAIN); in lv_arc_set_bg_end_angle()
186 arc->bg_angle_end = end; in lv_arc_set_bg_end_angle()
200 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_rotation() local
205 arc->rotation = rotation; in lv_arc_set_rotation()
213 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_mode() local
215 int32_t val = arc->value; in lv_arc_set_mode()
217 arc->type = type; in lv_arc_set_mode()
218 arc->value = -1; /** Force set_value handling*/ in lv_arc_set_mode()
220 lv_value_precise_t bg_midpoint, bg_end = arc->bg_angle_end; in lv_arc_set_mode()
221 if(arc->bg_angle_end < arc->bg_angle_start) bg_end = arc->bg_angle_end + 360; in lv_arc_set_mode()
223 switch(arc->type) { in lv_arc_set_mode()
225 bg_midpoint = (arc->bg_angle_start + bg_end) / 2; in lv_arc_set_mode()
230 lv_arc_set_end_angle(obj, arc->bg_angle_end); in lv_arc_set_mode()
233 lv_arc_set_start_angle(obj, arc->bg_angle_start); in lv_arc_set_mode()
242 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_value() local
244 if(arc->value == value) return; in lv_arc_set_value()
247 new_value = value > arc->max_value ? arc->max_value : value; in lv_arc_set_value()
248 new_value = new_value < arc->min_value ? arc->min_value : new_value; in lv_arc_set_value()
250 if(arc->value == new_value) return; in lv_arc_set_value()
251 arc->value = new_value; in lv_arc_set_value()
259 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_range() local
261 if(arc->min_value == min && arc->max_value == max) return; in lv_arc_set_range()
263 arc->min_value = min; in lv_arc_set_range()
264 arc->max_value = max; in lv_arc_set_range()
266 if(arc->value < min) { in lv_arc_set_range()
267 arc->value = min; in lv_arc_set_range()
269 if(arc->value > max) { in lv_arc_set_range()
270 arc->value = max; in lv_arc_set_range()
279 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_change_rate() local
281 arc->chg_rate = rate; in lv_arc_set_change_rate()
287 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_set_knob_offset() local
289 arc->knob_offset = offset; in lv_arc_set_knob_offset()
417 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_constructor() local
420 arc->rotation = 0; in lv_arc_constructor()
421 arc->bg_angle_start = 135; in lv_arc_constructor()
422 arc->bg_angle_end = 45; in lv_arc_constructor()
423 arc->indic_angle_start = 135; in lv_arc_constructor()
424 arc->indic_angle_end = 270; in lv_arc_constructor()
425 arc->type = LV_ARC_MODE_NORMAL; in lv_arc_constructor()
426 arc->value = VALUE_UNSET; in lv_arc_constructor()
427 arc->min_close = CLICK_CLOSER_TO_MIN_END; in lv_arc_constructor()
428 arc->min_value = 0; in lv_arc_constructor()
429 arc->max_value = 100; in lv_arc_constructor()
430 arc->dragging = false; in lv_arc_constructor()
431 arc->chg_rate = 720; in lv_arc_constructor()
432 arc->last_tick = lv_tick_get(); in lv_arc_constructor()
433 arc->last_angle = arc->indic_angle_end; in lv_arc_constructor()
434 arc->in_out = CLICK_OUTSIDE_BG_ANGLES; in lv_arc_constructor()
455 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_event() local
476 if(arc->dragging == false) { in lv_arc_event()
490 arc->dragging = true; in lv_arc_event()
491 arc->last_tick = lv_tick_get(); /*Capture timestamp at dragging start*/ in lv_arc_event()
496 if(arc->dragging == false) return; in lv_arc_event()
503 lv_value_precise_t bg_end = arc->bg_angle_end; in lv_arc_event()
504 if(arc->bg_angle_end < arc->bg_angle_start) { in lv_arc_event()
505 bg_end = arc->bg_angle_end + 360; in lv_arc_event()
509 angle -= arc->rotation; in lv_arc_event()
510 angle -= arc->bg_angle_start; /*Make the angle relative to the start angle*/ in lv_arc_event()
518 const uint32_t min_close_prev = (uint32_t) arc->min_close; in lv_arc_event()
525 lv_value_precise_t deg_range = bg_end - arc->bg_angle_start; in lv_arc_event()
526 lv_value_precise_t last_angle_rel = arc->last_angle - arc->bg_angle_start; in lv_arc_event()
533 if(arc->min_close == CLICK_CLOSER_TO_MIN_END) angle = 0; in lv_arc_event()
537 else if(CLICK_OUTSIDE_BG_ANGLES == arc->in_out) { in lv_arc_event()
538 if(arc->min_close == CLICK_CLOSER_TO_MIN_END) angle = -deg_range; in lv_arc_event()
545 … if(((min_close_prev == CLICK_CLOSER_TO_MIN_END) && (arc->min_close == CLICK_CLOSER_TO_MAX_END)) in lv_arc_event()
546 && ((CLICK_OUTSIDE_BG_ANGLES == arc->in_out) && (LV_ABS(delta_angle) > 280))) { in lv_arc_event()
548 arc->min_close = min_close_prev; in lv_arc_event()
550 …else if(((min_close_prev == CLICK_CLOSER_TO_MAX_END) && (arc->min_close == CLICK_CLOSER_TO_MIN_END… in lv_arc_event()
551 && (CLICK_OUTSIDE_BG_ANGLES == arc->in_out) && (360 - LV_ABS(delta_angle) > 280)) { in lv_arc_event()
553 arc->min_close = min_close_prev; in lv_arc_event()
560 uint32_t delta_tick = lv_tick_elaps(arc->last_tick); in lv_arc_event()
562 const lv_value_precise_t delta_angle_max = (arc->chg_rate * delta_tick) / 1000; in lv_arc_event()
575 …lv_value_precise_t round = ((bg_end - arc->bg_angle_start) * 8) / (arc->max_value - arc->min_value… in lv_arc_event()
579 angle += arc->bg_angle_start; /*Make the angle absolute again*/ in lv_arc_event()
582 int32_t old_value = arc->value; in lv_arc_event()
583 …int32_t new_value = lv_map((int32_t)angle, (int32_t)arc->bg_angle_start, (int32_t)bg_end, arc->min… in lv_arc_event()
584 arc->max_value); in lv_arc_event()
585 if(arc->type == LV_ARC_MODE_REVERSE) { in lv_arc_event()
586 new_value = arc->max_value - new_value + arc->min_value; in lv_arc_event()
590 arc->last_tick = lv_tick_get(); /*Cache timestamp for the next iteration*/ in lv_arc_event()
599 if(new_value == arc->min_value || new_value == arc->max_value) { in lv_arc_event()
600 arc->last_tick = lv_tick_get(); /*Cache timestamp for the next iteration*/ in lv_arc_event()
604 arc->dragging = false; in lv_arc_event()
618 int32_t old_value = arc->value; in lv_arc_event()
626 if(old_value != arc->value) { in lv_arc_event()
634 int32_t old_value = arc->value; in lv_arc_event()
636 if(old_value != arc->value) { in lv_arc_event()
664 angle -= arc->rotation; in lv_arc_event()
665 angle -= arc->bg_angle_start; /*Make the angle relative to the start angle*/ in lv_arc_event()
712 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_draw() local
727 arc_dsc.start_angle = arc->bg_angle_start + arc->rotation; in lv_arc_draw()
728 arc_dsc.end_angle = arc->bg_angle_end + arc->rotation; in lv_arc_draw()
745 arc_dsc.start_angle = arc->indic_angle_start + arc->rotation; in lv_arc_draw()
746 arc_dsc.end_angle = arc->indic_angle_end + arc->rotation; in lv_arc_draw()
770 lv_arc_t * arc = (lv_arc_t *)obj; in inv_arc_area() local
777 start_angle += arc->rotation; in inv_arc_area()
778 end_angle += arc->rotation; in inv_arc_area()
832 lv_arc_t * arc = (lv_arc_t *)obj; in get_angle() local
833 lv_value_precise_t angle = arc->rotation; in get_angle()
834 if(arc->type == LV_ARC_MODE_NORMAL) { in get_angle()
835 angle += arc->indic_angle_end; in get_angle()
837 else if(arc->type == LV_ARC_MODE_REVERSE) { in get_angle()
838 angle += arc->indic_angle_start; in get_angle()
840 else if(arc->type == LV_ARC_MODE_SYMMETRICAL) { in get_angle()
841 lv_value_precise_t bg_end = arc->bg_angle_end; in get_angle()
842 if(arc->bg_angle_end < arc->bg_angle_start) bg_end = arc->bg_angle_end + 360; in get_angle()
843 lv_value_precise_t indic_end = arc->indic_angle_end; in get_angle()
844 if(arc->indic_angle_end < arc->indic_angle_start) indic_end = arc->indic_angle_end + 360; in get_angle()
846 lv_value_precise_t angle_midpoint = (int32_t)(arc->bg_angle_start + bg_end) / 2; in get_angle()
847 if(arc->indic_angle_start < angle_midpoint) angle += arc->indic_angle_start; in get_angle()
848 else if(indic_end > angle_midpoint) angle += arc->indic_angle_end; in get_angle()
884 lv_arc_t * arc = (lv_arc_t *)obj; in value_update() local
887 if(arc->value == VALUE_UNSET) return; in value_update()
889 lv_value_precise_t bg_midpoint, bg_end = arc->bg_angle_end; in value_update()
891 if(arc->bg_angle_end < arc->bg_angle_start) bg_end = arc->bg_angle_end + 360; in value_update()
894 switch(arc->type) { in value_update()
896 bg_midpoint = (arc->bg_angle_start + bg_end) / 2; in value_update()
897 range_midpoint = (int32_t)(arc->min_value + arc->max_value) / 2; in value_update()
899 if(arc->value < range_midpoint) { in value_update()
900 …angle = lv_map(arc->value, arc->min_value, range_midpoint, (int32_t)arc->bg_angle_start, (int32_t)… in value_update()
905 … angle = lv_map(arc->value, range_midpoint, arc->max_value, (int32_t)bg_midpoint, (int32_t)bg_end); in value_update()
911 …angle = lv_map(arc->value, arc->min_value, arc->max_value, (int32_t)bg_end, (int32_t)arc->bg_angle… in value_update()
912 lv_arc_set_angles(obj, angle, arc->bg_angle_end); in value_update()
915 …angle = lv_map(arc->value, arc->min_value, arc->max_value, (int32_t)arc->bg_angle_start, (int32_t)… in value_update()
916 lv_arc_set_angles(obj, arc->bg_angle_start, angle); in value_update()
920 LV_LOG_WARN("Invalid mode: %d", arc->type); in value_update()
923 arc->last_angle = angle; /*Cache angle for slew rate limiting*/ in value_update()
967 lv_arc_t * arc = (lv_arc_t *)obj; in lv_arc_angle_within_bg_bounds() local
969 lv_value_precise_t bounds_angle = arc->bg_angle_end - arc->bg_angle_start; in lv_arc_angle_within_bg_bounds()
978 arc->min_close = CLICK_CLOSER_TO_MIN_END; in lv_arc_angle_within_bg_bounds()
981 arc->min_close = CLICK_CLOSER_TO_MAX_END; in lv_arc_angle_within_bg_bounds()
983 arc->in_out = CLICK_INSIDE_BG_ANGLES; in lv_arc_angle_within_bg_bounds()
990 arc->min_close = CLICK_CLOSER_TO_MIN_END; in lv_arc_angle_within_bg_bounds()
991 arc->in_out = CLICK_INSIDE_BG_ANGLES; in lv_arc_angle_within_bg_bounds()
997 arc->min_close = CLICK_CLOSER_TO_MIN_END; in lv_arc_angle_within_bg_bounds()
998 arc->in_out = CLICK_OUTSIDE_BG_ANGLES; in lv_arc_angle_within_bg_bounds()
1004 arc->min_close = CLICK_CLOSER_TO_MAX_END; in lv_arc_angle_within_bg_bounds()
1005 arc->in_out = CLICK_OUTSIDE_BG_ANGLES; in lv_arc_angle_within_bg_bounds()