@@ -219,10 +219,20 @@ void lv_draw_arc(lv_coord_t center_x, lv_coord_t center_y, uint16_t radius, uin
|
|||||||
|
|
||||||
void lv_draw_arc_get_area(lv_coord_t x, lv_coord_t y, uint16_t radius, uint16_t start_angle, uint16_t end_angle, lv_coord_t w, bool rounded, lv_area_t * area)
|
void lv_draw_arc_get_area(lv_coord_t x, lv_coord_t y, uint16_t radius, uint16_t start_angle, uint16_t end_angle, lv_coord_t w, bool rounded, lv_area_t * area)
|
||||||
{
|
{
|
||||||
|
lv_coord_t rout = radius;
|
||||||
|
|
||||||
|
/*Special case: full arc invalidation */
|
||||||
|
if(end_angle == start_angle + 360) {
|
||||||
|
area->x1 = x - rout;
|
||||||
|
area->y1 = y - rout;
|
||||||
|
area->x2 = x + rout;
|
||||||
|
area->y2 = y + rout;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(start_angle > 360) start_angle -= 360;
|
if(start_angle > 360) start_angle -= 360;
|
||||||
if(end_angle > 360) end_angle -= 360;
|
if(end_angle > 360) end_angle -= 360;
|
||||||
|
|
||||||
lv_coord_t rout = radius;
|
|
||||||
lv_coord_t rin = radius - w;
|
lv_coord_t rin = radius - w;
|
||||||
lv_coord_t extra_area = rounded ? w / 2 + 1 : 0;
|
lv_coord_t extra_area = rounded ? w / 2 + 1 : 0;
|
||||||
uint8_t start_quarter = start_angle / 90;
|
uint8_t start_quarter = start_angle / 90;
|
||||||
|
|||||||
@@ -696,12 +696,6 @@ static void inv_arc_area(lv_obj_t * obj, uint16_t start_angle, uint16_t end_angl
|
|||||||
/*Skip this complicated invalidation if the arc is not visible*/
|
/*Skip this complicated invalidation if the arc is not visible*/
|
||||||
if(lv_obj_is_visible(obj) == false) return;
|
if(lv_obj_is_visible(obj) == false) return;
|
||||||
|
|
||||||
start_angle += arc->rotation;
|
|
||||||
end_angle += arc->rotation;
|
|
||||||
|
|
||||||
if(start_angle >= 360) start_angle -= 360;
|
|
||||||
if(end_angle >= 360) end_angle -= 360;
|
|
||||||
|
|
||||||
lv_coord_t left = lv_obj_get_style_pad_left(obj, LV_PART_MAIN);
|
lv_coord_t left = lv_obj_get_style_pad_left(obj, LV_PART_MAIN);
|
||||||
lv_coord_t right = lv_obj_get_style_pad_right(obj, LV_PART_MAIN);
|
lv_coord_t right = lv_obj_get_style_pad_right(obj, LV_PART_MAIN);
|
||||||
lv_coord_t top = lv_obj_get_style_pad_top(obj, LV_PART_MAIN);
|
lv_coord_t top = lv_obj_get_style_pad_top(obj, LV_PART_MAIN);
|
||||||
@@ -726,6 +720,9 @@ static void inv_arc_area(lv_obj_t * obj, uint16_t start_angle, uint16_t end_angl
|
|||||||
rout += knob_extra_size + 2;
|
rout += knob_extra_size + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
start_angle += arc->rotation;
|
||||||
|
end_angle += arc->rotation;
|
||||||
|
|
||||||
lv_area_t inv_area;
|
lv_area_t inv_area;
|
||||||
lv_draw_arc_get_area(x, y, rout, start_angle, end_angle, w, rounded, &inv_area);
|
lv_draw_arc_get_area(x, y, rout, start_angle, end_angle, w, rounded, &inv_area);
|
||||||
lv_obj_invalidate_area(obj, &inv_area);
|
lv_obj_invalidate_area(obj, &inv_area);
|
||||||
|
|||||||
Reference in New Issue
Block a user