Browse Source

Make rounded rectangles more robust.

- rx and ry parameters are set to 0 if they're negative.
- automatic points calculation doesn't cause an unnecessarily large amount of points when rx or ry are greater than half the rectangle's size.
Alex Szpakowski 3 years ago
parent
commit
4574805486
1 changed files with 3 additions and 2 deletions
  1. 3 2
      src/modules/graphics/Graphics.cpp

+ 3 - 2
src/modules/graphics/Graphics.cpp

@@ -1350,7 +1350,7 @@ void Graphics::rectangle(DrawMode mode, float x, float y, float w, float h)
 
 void Graphics::rectangle(DrawMode mode, float x, float y, float w, float h, float rx, float ry, int points)
 {
-	if (rx == 0 || ry == 0)
+	if (rx <= 0 || ry <= 0)
 	{
 		rectangle(mode, x, y, w, h);
 		return;
@@ -1409,7 +1409,8 @@ void Graphics::rectangle(DrawMode mode, float x, float y, float w, float h, floa
 
 void Graphics::rectangle(DrawMode mode, float x, float y, float w, float h, float rx, float ry)
 {
-	rectangle(mode, x, y, w, h, rx, ry, calculateEllipsePoints(rx, ry));
+	int points = calculateEllipsePoints(std::min(rx, std::abs(w/2)), std::min(ry, std::abs(h/2)));
+	rectangle(mode, x, y, w, h, rx, ry, points);
 }
 
 void Graphics::circle(DrawMode mode, float x, float y, float radius, int points)