Skip to content

Commit

Permalink
Add logic to make cornerRadius on BarChart
Browse files Browse the repository at this point in the history
  • Loading branch information
Oleg committed Mar 28, 2024
1 parent 29e4f58 commit c14ed45
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ open class BarChartDataSet: BarLineScatterCandleBubbleChartDataSet, BarChartData
/// the overall entry count, including counting each stack-value individually
private var _entryCountStacks = 0

/// the corner radius applied to each data set
public var cornerRadius: CGFloat = 0.0

/// array of corners to be rounded
open var roundedCorners: UIRectCorner = []

/// Calculates the total number of entries this DataSet represents, including
/// stacks. All values belonging to a stack are calculated separately.
private func calcEntryCountIncludingStacks(entries: [BarChartDataEntry])
Expand Down
10 changes: 10 additions & 0 deletions Source/Charts/Data/Interfaces/BarChartDataSetProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
import Foundation
import CoreGraphics

#if canImport(UIKit)
import UIKit
#endif

@objc
public protocol BarChartDataSetProtocol: BarLineScatterCandleBubbleChartDataSetProtocol
{
Expand Down Expand Up @@ -39,4 +43,10 @@ public protocol BarChartDataSetProtocol: BarLineScatterCandleBubbleChartDataSetP

/// array of labels used to describe the different values of the stacked bars
var stackLabels: [String] { get set }

/// the corner radius applied to each data set
var cornerRadius: CGFloat { get set }

/// array of corners to be rounded
var roundedCorners: UIRectCorner { get set }
}
16 changes: 13 additions & 3 deletions Source/Charts/Renderers/BarChartRenderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,11 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer
guard viewPortHandler.isInBoundsRight(barRect.origin.x) else { break }

context.setFillColor(dataSet.barShadowColor.cgColor)
context.fill(barRect)

let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: dataSet.roundedCorners,
cornerRadii: .init(width: dataSet.cornerRadius, height: dataSet.cornerRadius))
context.addPath(bezierPath.cgPath)
context.drawPath(using: .fill)
}
}

Expand Down Expand Up @@ -379,7 +383,10 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer
context.setFillColor(dataSet.color(atIndex: j).cgColor)
}

context.fill(barRect)
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: dataSet.roundedCorners,
cornerRadii: .init(width: dataSet.cornerRadius, height: dataSet.cornerRadius))
context.addPath(bezierPath.cgPath)
context.drawPath(using: .fill)

if drawBorder
{
Expand Down Expand Up @@ -744,7 +751,10 @@ open class BarChartRenderer: BarLineScatterCandleBubbleRenderer

setHighlightDrawPos(highlight: high, barRect: barRect)

context.fill(barRect)
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: set.roundedCorners,
cornerRadii: .init(width: set.cornerRadius, height: set.cornerRadius))
context.addPath(bezierPath.cgPath)
context.drawPath(using: .fill)
}
}
}
Expand Down
11 changes: 9 additions & 2 deletions Source/Charts/Renderers/HorizontalBarChartRenderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,11 @@ open class HorizontalBarChartRenderer: BarChartRenderer
_barShadowRectBuffer.size.width = viewPortHandler.contentWidth

context.setFillColor(dataSet.barShadowColor.cgColor)
context.fill(_barShadowRectBuffer)

let bezierPath = UIBezierPath(roundedRect: _barShadowRectBuffer, byRoundingCorners: dataSet.roundedCorners,
cornerRadii: .init(width: dataSet.cornerRadius, height: dataSet.cornerRadius))
context.addPath(bezierPath.cgPath)
context.drawPath(using: .fill)
}
}

Expand Down Expand Up @@ -265,7 +269,10 @@ open class HorizontalBarChartRenderer: BarChartRenderer
context.setFillColor(dataSet.color(atIndex: j).cgColor)
}

context.fill(barRect)
let bezierPath = UIBezierPath(roundedRect: barRect, byRoundingCorners: dataSet.roundedCorners,
cornerRadii: .init(width: dataSet.cornerRadius, height: dataSet.cornerRadius))
context.addPath(bezierPath.cgPath)
context.drawPath(using: .fill)

if drawBorder
{
Expand Down

0 comments on commit c14ed45

Please sign in to comment.