diff --git a/src/lv_draw/lv_draw_line.c b/src/lv_draw/lv_draw_line.c index 5ede6ba42..c965d981d 100644 --- a/src/lv_draw/lv_draw_line.c +++ b/src/lv_draw/lv_draw_line.c @@ -85,6 +85,12 @@ void lv_draw_line(const lv_point_t * point1, const lv_point_t * point2, const lv if(style->line.width == 0) return; if(point1->x == point2->x && point1->y == point2->y) return; + /*Return if the points are out of the mask*/ + if(point1->x < mask->x1 && point2->x < mask->x1) return; + if(point1->x > mask->x2 && point2->x > mask->x2) return; + if(point1->y < mask->y1 && point2->y < mask->y1) return; + if(point1->y > mask->y2 && point2->y > mask->y2) return; + line_draw_t main_line; lv_point_t p1; lv_point_t p2; diff --git a/src/lv_draw/lv_draw_triangle.c b/src/lv_draw/lv_draw_triangle.c index 52d512aef..54f557e1a 100644 --- a/src/lv_draw/lv_draw_triangle.c +++ b/src/lv_draw/lv_draw_triangle.c @@ -44,6 +44,31 @@ static void point_swap(lv_point_t * p1, lv_point_t * p2); void lv_draw_triangle(const lv_point_t * points, const lv_area_t * mask, const lv_style_t * style, lv_opa_t opa_scale) { + /*Return if the points are out of the mask*/ + if(points[0].x < mask->x1 && + points[1].x < mask->x1 && + points[2].x < mask->x1) { + return; + } + + if(points[0].x > mask->x2 && + points[1].x > mask->x2 && + points[2].x > mask->x2) { + return; + } + + if(points[0].y < mask->y1 && + points[1].y < mask->y1 && + points[2].y < mask->y1) { + return; + } + + if(points[0].y > mask->y2 && + points[1].y > mask->y2 && + points[2].y > mask->y2) { + return; + } + lv_point_t tri[3]; memcpy(tri, points, sizeof(tri));