Lines Matching +full:- +full:r
48 static void get_knob_area(lv_obj_t * arc, const lv_point_t * center, int32_t r, lv_area_t * knob_ar…
99 if(start > 360) start -= 360; in lv_arc_set_start_angle()
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()
107 if(LV_ABS(new_delta - old_delta) > 180) lv_obj_invalidate(obj); 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()
122 if(end > 360) end -= 360; in lv_arc_set_end_angle()
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()
130 if(LV_ABS(new_delta - old_delta) > 180) lv_obj_invalidate(obj); 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()
152 if(start > 360) start -= 360; in lv_arc_set_bg_start_angle()
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()
160 if(LV_ABS(new_delta - old_delta) > 180) lv_obj_invalidate(obj); 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()
174 if(end > 360) end -= 360; in lv_arc_set_bg_end_angle()
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()
182 if(LV_ABS(new_delta - old_delta) > 180) lv_obj_invalidate(obj); 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()
204 while(rotation >= 360) rotation -= 360; in lv_arc_set_rotation()
205 arc->rotation = rotation; in lv_arc_set_rotation()
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()
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()
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()
281 arc->chg_rate = rate; in lv_arc_set_change_rate()
289 arc->knob_offset = offset; in lv_arc_set_knob_offset()
299 return ((lv_arc_t *) obj)->indic_angle_start; in lv_arc_get_angle_start()
305 return ((lv_arc_t *) obj)->indic_angle_end; in lv_arc_get_angle_end()
311 return ((lv_arc_t *) obj)->bg_angle_start; in lv_arc_get_bg_angle_start()
317 return ((lv_arc_t *) obj)->bg_angle_end; in lv_arc_get_bg_angle_end()
323 return ((lv_arc_t *) obj)->value; in lv_arc_get_value()
329 return ((lv_arc_t *) obj)->min_value; in lv_arc_get_min_value()
335 return ((lv_arc_t *) obj)->max_value; in lv_arc_get_max_value()
341 return ((lv_arc_t *) obj)->type; in lv_arc_get_mode()
347 return ((lv_arc_t *)obj)->rotation; in lv_arc_get_rotation()
353 return ((lv_arc_t *)obj)->knob_offset; in lv_arc_get_knob_offset()
372 arc_r -= indic_width_half; in lv_arc_align_obj_to_angle()
393 arc_r -= indic_width_half; in lv_arc_rotate_obj_to_angle()
396 lv_obj_align_to(obj_to_rotate, obj, LV_ALIGN_CENTER, 0, -arc_r); in lv_arc_rotate_obj_to_angle()
401 int32_t pivot_x = obj_to_rotate->coords.x1 - center.x; in lv_arc_rotate_obj_to_angle()
402 int32_t pivot_y = obj_to_rotate->coords.y1 - center.y; in lv_arc_rotate_obj_to_angle()
403 lv_obj_set_style_transform_pivot_x(obj_to_rotate, -pivot_x, 0); in lv_arc_rotate_obj_to_angle()
404 lv_obj_set_style_transform_pivot_y(obj_to_rotate, -pivot_y, 0); in lv_arc_rotate_obj_to_angle()
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()
469 int32_t r; in lv_arc_event() local
470 get_center(obj, ¢er, &r); in lv_arc_event()
472 p.x -= center.x; in lv_arc_event()
473 p.y -= center.y; in lv_arc_event()
476 if(arc->dragging == false) { in lv_arc_event()
478 r -= indic_width; in lv_arc_event()
482 r -= indic_width; in lv_arc_event()
485 r -= LV_MAX(r / 4, indic_width); in lv_arc_event()
487 if(r < 1) r = 1; in lv_arc_event()
489 if(p.x * p.x + p.y * p.y > r * r) { 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()
514 while(angle >= 360) angle -= 360; in lv_arc_event()
516 …const uint32_t circumference = (uint32_t)((2U * r * 314U) / 100U); /* Equivalent to: 2r * 3.14, a… 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()
527 lv_value_precise_t delta_angle = angle - last_angle_rel; in lv_arc_event()
531 *Check which end was closer on the last valid press (arc->min_close) and prefer that end*/ 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()
558 delta_angle = angle - last_angle_rel; 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()
567 else if(delta_angle < -delta_angle_max) { in lv_arc_event()
568 delta_angle = -delta_angle_max; 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()
623 lv_arc_set_value(obj, lv_arc_get_value(obj) - 1); in lv_arc_event()
626 if(old_value != arc->value) { in lv_arc_event()
632 int32_t r = lv_event_get_rotary_diff(e); in lv_arc_event() local
634 int32_t old_value = arc->value; in lv_arc_event()
635 lv_arc_set_value(obj, lv_arc_get_value(obj) + r); in lv_arc_event()
636 if(old_value != arc->value) { in lv_arc_event()
645 int32_t r; in lv_arc_event() local
646 get_center(obj, &p, &r); in lv_arc_event()
649 if(obj->spec_attr) ext_click_area = obj->spec_attr->ext_click_pad; in lv_arc_event()
652 r -= w + ext_click_area; in lv_arc_event()
656 lv_area_set(&a, p.x - r, p.y - r, p.x + r, p.y + r); in lv_arc_event()
657 if(lv_area_is_point_on(&a, info->point, LV_RADIUS_CIRCLE)) { in lv_arc_event()
658 info->res = false; in lv_arc_event()
663 lv_value_precise_t angle = lv_atan2(info->point->y - p.y, info->point->x - p.x); 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()
669 while(angle >= 360) angle -= 360; in lv_arc_event()
671 …const uint32_t circumference = (uint32_t)((2U * r * 314U) / 100U); /* Equivalent to: 2r * 3.14, a… in lv_arc_event()
677 info->res = false; in lv_arc_event()
683 info->res = lv_area_is_point_on(&a, info->point, LV_RADIUS_CIRCLE); in lv_arc_event()
698 int32_t knob_extra_size = knob_pad - bg_pad; in lv_arc_event()
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()
738 int32_t indic_r = arc_r - LV_MAX4(left_indic, right_indic, top_indic, bottom_indic); 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()
774 if(start_angle > 360) start_angle -= 360; in inv_arc_area()
775 if(end_angle > 360) end_angle -= 360; in inv_arc_area()
777 start_angle += arc->rotation; in inv_arc_area()
778 end_angle += arc->rotation; in inv_arc_area()
780 if(start_angle > 360) start_angle -= 360; in inv_arc_area()
781 if(end_angle > 360) end_angle -= 360; in inv_arc_area()
783 int32_t r; in inv_arc_area() local
785 get_center(obj, &c, &r); in inv_arc_area()
791 lv_draw_arc_get_area(c.x, c.y, r, start_angle, end_angle, w, rounded, &inv_area); in inv_arc_area()
799 int32_t r; in inv_knob_area() local
800 get_center(obj, &c, &r); in inv_knob_area()
803 get_knob_area(obj, &c, r, &a); in inv_knob_area()
821 int32_t r = (LV_MIN(lv_obj_get_width(obj) - left_bg - right_bg, in get_center() local
822 lv_obj_get_height(obj) - top_bg - bottom_bg)) / 2; in get_center()
824 center->x = obj->coords.x1 + r + left_bg; in get_center()
825 center->y = obj->coords.y1 + r + top_bg; in get_center()
827 if(arc_r) *arc_r = r; in get_center()
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()
855 static void get_knob_area(lv_obj_t * obj, const lv_point_t * center, int32_t r, lv_area_t * knob_ar… in get_knob_area() argument
859 r -= indic_width_half; in get_knob_area()
863 int32_t knob_x = (r * lv_trigo_sin(knob_offset + angle + 90)) >> LV_TRIGO_SHIFT; in get_knob_area()
864 int32_t knob_y = (r * lv_trigo_sin(knob_offset + angle)) >> LV_TRIGO_SHIFT; in get_knob_area()
871 knob_area->x1 = center->x + knob_x - left_knob - indic_width_half; in get_knob_area()
872 knob_area->x2 = center->x + knob_x + right_knob + indic_width_half; in get_knob_area()
873 knob_area->y1 = center->y + knob_y - top_knob - indic_width_half; in get_knob_area()
874 knob_area->y2 = center->y + knob_y + bottom_knob + indic_width_half; in get_knob_area()
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()
969 lv_value_precise_t bounds_angle = arc->bg_angle_end - arc->bg_angle_start; in lv_arc_angle_within_bg_bounds()
973 while(bounds_angle >= 360) bounds_angle -= 360; 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()
989 if(360 - bounds_angle <= tolerance_deg) { 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()
996 if(360 - angle <= tolerance_deg) { 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()