Skip to content

Commit 1b9bc5b

Browse files
author
Oleg
committed
Add inverted corners for negative values
1 parent c14ed45 commit 1b9bc5b

File tree

4 files changed

+55
-6
lines changed

4 files changed

+55
-6
lines changed

Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift

+23-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,29 @@ open class BarChartDataSet: BarLineScatterCandleBubbleChartDataSet, BarChartData
5555
public var cornerRadius: CGFloat = 0.0
5656

5757
/// array of corners to be rounded
58-
open var roundedCorners: UIRectCorner = []
58+
open var roundedCorners: UIRectCorner = [] {
59+
didSet {
60+
var invertedCorners: UIRectCorner = []
61+
if roundedCorners.contains(.topLeft) {
62+
invertedCorners.insert(.bottomLeft)
63+
}
64+
if roundedCorners.contains(.topRight) {
65+
invertedCorners.insert(.bottomRight)
66+
}
67+
if roundedCorners.contains(.bottomLeft) {
68+
invertedCorners.insert(.topLeft)
69+
}
70+
if roundedCorners.contains(.bottomRight) {
71+
invertedCorners.insert(.topRight)
72+
}
73+
if roundedCorners.contains(.allCorners) {
74+
invertedCorners.insert(.allCorners)
75+
}
76+
roundedCornersInverted = invertedCorners
77+
}
78+
}
79+
80+
open var roundedCornersInverted: UIRectCorner = []
5981

6082
/// Calculates the total number of entries this DataSet represents, including
6183
/// stacks. All values belonging to a stack are calculated separately.

Source/Charts/Data/Interfaces/BarChartDataSetProtocol.swift

+3
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,7 @@ public protocol BarChartDataSetProtocol: BarLineScatterCandleBubbleChartDataSetP
4949

5050
/// array of corners to be rounded
5151
var roundedCorners: UIRectCorner { get set }
52+
53+
/// array of corners to be rounded
54+
var roundedCornersInverted: UIRectCorner { get }
5255
}

Source/Charts/Renderers/BarChartRenderer.swift

+18-3
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,13 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer
352352

353353
context.setFillColor(dataSet.barShadowColor.cgColor)
354354

355-
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: dataSet.roundedCorners,
355+
var roundedCorners = dataSet.roundedCorners
356+
if let i = buffer.firstIndex(of: barRect),
357+
let entry = dataSet.entryForIndex(i),
358+
entry.y < 0 {
359+
roundedCorners = dataSet.roundedCornersInverted
360+
}
361+
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: roundedCorners,
356362
cornerRadii: .init(width: dataSet.cornerRadius, height: dataSet.cornerRadius))
357363
context.addPath(bezierPath.cgPath)
358364
context.drawPath(using: .fill)
@@ -383,7 +389,12 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer
383389
context.setFillColor(dataSet.color(atIndex: j).cgColor)
384390
}
385391

386-
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: dataSet.roundedCorners,
392+
var roundedCorners = dataSet.roundedCorners
393+
if let entry = dataSet.entryForIndex(j),
394+
entry.y < 0 {
395+
roundedCorners = dataSet.roundedCornersInverted
396+
}
397+
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: roundedCorners,
387398
cornerRadii: .init(width: dataSet.cornerRadius, height: dataSet.cornerRadius))
388399
context.addPath(bezierPath.cgPath)
389400
context.drawPath(using: .fill)
@@ -751,7 +762,11 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer
751762

752763
setHighlightDrawPos(highlight: high, barRect: barRect)
753764

754-
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: set.roundedCorners,
765+
var roundedCorners = set.roundedCorners
766+
if e.y < 0 {
767+
roundedCorners = set.roundedCornersInverted
768+
}
769+
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: roundedCorners,
755770
cornerRadii: .init(width: set.cornerRadius, height: set.cornerRadius))
756771
context.addPath(bezierPath.cgPath)
757772
context.drawPath(using: .fill)

Source/Charts/Renderers/HorizontalBarChartRenderer.swift

+11-2
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,11 @@ open class HorizontalBarChartRenderer: BarChartRenderer
229229

230230
context.setFillColor(dataSet.barShadowColor.cgColor)
231231

232-
let bezierPath = UIBezierPath(roundedRect: _barShadowRectBuffer, byRoundingCorners: dataSet.roundedCorners,
232+
var roundedCorners = dataSet.roundedCorners
233+
if e.x < 0 {
234+
roundedCorners = dataSet.roundedCornersInverted
235+
}
236+
let bezierPath = UIBezierPath(roundedRect: _barShadowRectBuffer, byRoundingCorners: roundedCorners,
233237
cornerRadii: .init(width: dataSet.cornerRadius, height: dataSet.cornerRadius))
234238
context.addPath(bezierPath.cgPath)
235239
context.drawPath(using: .fill)
@@ -269,7 +273,12 @@ open class HorizontalBarChartRenderer: BarChartRenderer
269273
context.setFillColor(dataSet.color(atIndex: j).cgColor)
270274
}
271275

272-
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: dataSet.roundedCorners,
276+
var roundedCorners = dataSet.roundedCorners
277+
if let entry = dataSet.entryForIndex(j),
278+
entry.x < 0 {
279+
roundedCorners = dataSet.roundedCornersInverted
280+
}
281+
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: roundedCorners,
273282
cornerRadii: .init(width: dataSet.cornerRadius, height: dataSet.cornerRadius))
274283
context.addPath(bezierPath.cgPath)
275284
context.drawPath(using: .fill)

0 commit comments

Comments
 (0)