diff --git a/examples/widgets/arc/lv_example_arc_1.c b/examples/widgets/arc/lv_example_arc_1.c index 1064d8144..28ddaacd9 100644 --- a/examples/widgets/arc/lv_example_arc_1.c +++ b/examples/widgets/arc/lv_example_arc_1.c @@ -6,8 +6,10 @@ void lv_example_arc_1(void) { /*Create an Arc*/ lv_obj_t * arc = lv_arc_create(lv_scr_act()); - lv_arc_set_end_angle(arc, 200); lv_obj_set_size(arc, 150, 150); + lv_arc_set_rotation(arc, 135); + lv_arc_set_bg_angles(arc, 0, 270); + lv_arc_set_value(arc, 40); lv_obj_center(arc); } diff --git a/examples/widgets/arc/lv_example_arc_2.c b/examples/widgets/arc/lv_example_arc_2.c index 5c9ec16a3..438c44e61 100644 --- a/examples/widgets/arc/lv_example_arc_2.c +++ b/examples/widgets/arc/lv_example_arc_2.c @@ -2,22 +2,9 @@ #if LV_USE_ARC && LV_BUILD_EXAMPLES -/** - * An `lv_timer` to call periodically to set the angles of the arc - * @param t - */ -static void arc_loader(lv_timer_t * t) +static void set_angle(void * obj, int32_t v) { - static int16_t a = 270; - - a+=5; - - lv_arc_set_end_angle(t->user_data, a); - - if(a >= 270 + 360) { - lv_timer_del(t); - return; - } + lv_arc_set_value(obj, v); } /** @@ -27,13 +14,24 @@ void lv_example_arc_2(void) { /*Create an Arc*/ lv_obj_t * arc = lv_arc_create(lv_scr_act()); + lv_arc_set_rotation(arc, 270); lv_arc_set_bg_angles(arc, 0, 360); - lv_arc_set_angles(arc, 270, 270); + lv_obj_remove_style(arc, NULL, LV_PART_KNOB); /*Be sure the knob is not displayed*/ + lv_obj_clear_flag(arc, LV_OBJ_FLAG_CLICKABLE); /*To not allow adjusting by click*/ lv_obj_center(arc); - /*Create an `lv_timer` to update the arc. - *Store the `arc` in the user data*/ - lv_timer_create(arc_loader, 20, arc); + lv_anim_t a; + lv_anim_init(&a); + lv_anim_set_var(&a, arc); + lv_anim_set_exec_cb(&a, set_angle); + lv_anim_set_time(&a, 1000); + lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE); /*Just for the demo*/ + lv_anim_set_repeat_delay(&a, 500); + lv_anim_set_values(&a, 0, 100); + lv_anim_start(&a); + + + } #endif diff --git a/src/widgets/lv_arc.c b/src/widgets/lv_arc.c index 87703ca1c..436835fea 100644 --- a/src/widgets/lv_arc.c +++ b/src/widgets/lv_arc.c @@ -498,7 +498,7 @@ static void lv_arc_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj) arc->min_value = 0; arc->max_value = 100; arc->dragging = false; - arc->chg_rate = 540; + arc->chg_rate = 720; arc->last_tick = lv_tick_get(); arc->last_angle =arc->indic_angle_end; @@ -578,8 +578,8 @@ static void lv_arc_event(const lv_obj_class_t * class_p, lv_event_t * e) /*Do not allow big jumps. *It's mainly to avoid jumping to the opposite end if the "dead" range between min. an max. is crossed. - *Check which and was closer on the last valid press (arc->min_close) and prefer that end*/ - if(LV_ABS(delta_angle) > 180) { + *Check which was closer on the last valid press (arc->min_close) and prefer that end*/ + if(LV_ABS(delta_angle) > 280) { if(arc->min_close) angle = 0; else angle = deg_range; }