From b898e733b0e0a6a066c59d73758a2e1cd794c1bc Mon Sep 17 00:00:00 2001 From: Marc Prud'hommeaux Date: Thu, 2 Apr 2026 23:32:30 -0400 Subject: [PATCH] Fix arc shape drawing --- Sources/SkipUI/SkipUI/Graphics/Path.swift | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Sources/SkipUI/SkipUI/Graphics/Path.swift b/Sources/SkipUI/SkipUI/Graphics/Path.swift index 2df86192..2c21081b 100644 --- a/Sources/SkipUI/SkipUI/Graphics/Path.swift +++ b/Sources/SkipUI/SkipUI/Graphics/Path.swift @@ -300,8 +300,21 @@ public struct Path : Shape, Equatable { } public mutating func addArc(center: CGPoint, radius: CGFloat, startAngle: Angle, endAngle: Angle, clockwise: Bool, transform: CGAffineTransform = .identity) { - let deltar = clockwise ? startAngle.radians - endAngle.radians : endAngle.radians - startAngle.radians - addRelativeArc(center: center, radius: radius, startAngle: startAngle, delta: Angle(radians: deltar)) + // SwiftUI uses a flipped coordinate system (y-down), so: + // clockwise: false → positive sweep (clockwise on screen) + // clockwise: true → negative sweep (counter-clockwise on screen) + var deltar = endAngle.radians - startAngle.radians + let twoPi = 2.0 * Double.pi + if clockwise { + // Need a negative delta + if deltar > 0 { deltar -= twoPi } + if deltar == 0.0 { deltar = -twoPi } + } else { + // Need a positive delta + if deltar < 0 { deltar += twoPi } + if deltar == 0.0 { deltar = twoPi } + } + addRelativeArc(center: center, radius: radius, startAngle: startAngle, delta: Angle(radians: deltar), transform: transform) } // SKIP @bridge