From 3d8523500690558c2a1964b467d6a7b6f1fc30e2 Mon Sep 17 00:00:00 2001 From: Samu Andras Date: Sat, 3 Sep 2022 18:46:53 +0200 Subject: [PATCH] fix: BarChartCellShape to handle negative numbers correctly --- .../Charts/BarChart/BarChartCellShape.swift | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/Sources/SwiftUICharts/Charts/BarChart/BarChartCellShape.swift b/Sources/SwiftUICharts/Charts/BarChart/BarChartCellShape.swift index 5cf99839..268f4229 100644 --- a/Sources/SwiftUICharts/Charts/BarChart/BarChartCellShape.swift +++ b/Sources/SwiftUICharts/Charts/BarChart/BarChartCellShape.swift @@ -3,6 +3,7 @@ import SwiftUI struct BarChartCellShape: Shape, Animatable { var value: Double var cornerRadius: CGFloat = 6.0 + var animatableData: CGFloat { get { CGFloat(value) } set { value = Double(newValue) } @@ -16,14 +17,14 @@ struct BarChartCellShape: Shape, Animatable { path.addArc(center: CGPoint(x: cornerRadius, y: adjustedOriginY + cornerRadius), radius: cornerRadius, startAngle: Angle(radians: Double.pi), - endAngle: Angle(radians: -Double.pi/2), - clockwise: false) - path.addLine(to: CGPoint(x: rect.width - cornerRadius, y: adjustedOriginY)) + endAngle: Angle(radians: value < 0 ? Double.pi/2 : -Double.pi/2), + clockwise: value < 0 ? true : false) + path.addLine(to: CGPoint(x: rect.width - cornerRadius, y: value < 0 ? adjustedOriginY + 2 * cornerRadius : adjustedOriginY)) path.addArc(center: CGPoint(x: rect.width - cornerRadius, y: adjustedOriginY + cornerRadius), radius: cornerRadius, - startAngle: Angle(radians: -Double.pi/2), + startAngle: Angle(radians: value < 0 ? Double.pi/2 : -Double.pi/2), endAngle: Angle(radians: 0), - clockwise: false) + clockwise: value < 0 ? true : false) path.addLine(to: CGPoint(x: rect.width, y: rect.height)) path.closeSubpath() @@ -39,6 +40,10 @@ struct BarChartCellShape_Previews: PreviewProvider { BarChartCellShape(value: 0.3) .fill(Color.blue) + + BarChartCellShape(value: -0.3) + .fill(Color.blue) + .offset(x: 0, y: -600) } } }