From 9beca068b91c184ba89934bb8e0f84da25a0d429 Mon Sep 17 00:00:00 2001 From: Matthew Roush Date: Mon, 10 Aug 2026 08:51:59 -0400 Subject: [PATCH] [rshapes] Fix drawing circle sectors (#6045) * [rshapes] Fix drawing circle sectors Functions that draw a sector of a circle would keep drawing segments past a full rotation, which looked bad. * [rshapes] Change `DrawCircleSectorLines()` and `DrawRingLines()` `DrawCircleSectorLines()` and `DrawRingLines()` drew the cap lines even when drawing a full circle, which seems undesirable. --- src/rshapes.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/rshapes.c b/src/rshapes.c index 4e7374260..65040f452 100644 --- a/src/rshapes.c +++ b/src/rshapes.c @@ -1481,6 +1481,9 @@ void DrawCircleSector(Vector2 center, float radius, float startAngle, float endA endAngle = tmp; } + // Drawing a whole circle, things get weird without limiting the circle to 360 degrees + if (endAngle - startAngle >= 360.0f) endAngle = startAngle + 360.0f; + int minSegments = (int)ceilf((endAngle - startAngle)/90); if (segments < minSegments) @@ -1573,6 +1576,14 @@ void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle = tmp; } + bool showCapLines = true; + // Drawing a whole circle, things get weird without limiting the circle to 360 degrees + if (endAngle - startAngle >= 360.0f) + { + showCapLines = false; + endAngle = startAngle + 360.0f; + } + int minSegments = (int)ceilf((endAngle - startAngle)/90); if (segments < minSegments) @@ -1586,7 +1597,6 @@ void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float float stepLength = (endAngle - startAngle)/(float)segments; float angle = startAngle; - bool showCapLines = true; rlBegin(RL_LINES); if (showCapLines) @@ -1704,6 +1714,9 @@ void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startA endAngle = tmp; } + // Drawing a whole circle, things get weird without limiting the circle to 360 degrees + if (endAngle - startAngle >= 360.0f) endAngle = startAngle + 360.0f; + int minSegments = (int)ceilf((endAngle - startAngle)/90); if (segments < minSegments) @@ -1795,6 +1808,14 @@ void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float s endAngle = tmp; } + bool showCapLines = true; + // Drawing a whole circle, things get weird without limiting the circle to 360 degrees + if (endAngle - startAngle >= 360.0f) + { + showCapLines = false; + endAngle = startAngle + 360.0f; + } + int minSegments = (int)ceilf((endAngle - startAngle)/90); if (segments < minSegments) @@ -1814,7 +1835,6 @@ void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float s float stepLength = (endAngle - startAngle)/(float)segments; float angle = startAngle; - bool showCapLines = true; rlBegin(RL_LINES); if (showCapLines)