Skip to content

Commit 28ed948

Browse files
jjatieliuxuan30
authored andcommitted
Utils Cleanup (#3054)
* Cleanup Replaced unnecessary getters with proper access control Replaced unnecessary convenience inits with default parameters Minor refactoring * Pulled latest master * Pulled latest master * Pulled latest master * Fix after pulling master * Fixed using wrong axis (Issue #2257) * fix #1830. credit from #2049 (#2874) * fix #1830. credit from #2049 * add combined chart unit tests for iOS, tvOS (macOS only have build process) * use iterater rather than index * Removed redundant ivars in BarLineChartViewBase (#3043) * Removed redundant ivars in favour of proper access control * Moved initialization of axes to their declaration to keep the same optionality exposed. * Update 4.0.0 with master (#3135) * Replaced relevant `ChartUtils` methods with `Double` extensions (#2994) * Replaced relevant `ChartUtils` methods with `Double` extensions Improves readability. `nextUp` is built in and provides the same functionality. * Updated `ChartUtilsTests` to match changes * add option to build demo projects unit tests on iOS (#3121) * add option to build demo projects unit tests on iOS * add ChartsDemo-OSX build test. * Update ViewPortHandler.swift (#3143) fix a small bug * Refactored ChartUtils method into CGPoint extension (#3087) * Refactored ChartUtils method into CGPoint extension * Replaced ChartUtils.defaultValueFormatter() * Codestyle fixes * Finished cleanup * Pulled master
1 parent 9d8b76d commit 28ed948

File tree

4 files changed

+177
-404
lines changed

4 files changed

+177
-404
lines changed

Source/Charts/Utils/Fill.swift

Lines changed: 49 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -27,79 +27,25 @@ public enum FillType: Int
2727
@objc(ChartFill)
2828
open class Fill: NSObject
2929
{
30-
private var _type: FillType = FillType.empty
31-
private var _color: CGColor?
32-
private var _gradient: CGGradient?
33-
private var _gradientAngle: CGFloat = 0.0
34-
private var _gradientStartOffsetPercent: CGPoint = CGPoint()
35-
private var _gradientStartRadiusPercent: CGFloat = 0.0
36-
private var _gradientEndOffsetPercent: CGPoint = CGPoint()
37-
private var _gradientEndRadiusPercent: CGFloat = 0.0
38-
private var _image: CGImage?
39-
private var _layer: CGLayer?
40-
4130
// MARK: Properties
42-
43-
@objc open var type: FillType
44-
{
45-
return _type
46-
}
47-
48-
@objc open var color: CGColor?
49-
{
50-
return _color
51-
}
52-
53-
@objc open var gradient: CGGradient?
54-
{
55-
return _gradient
56-
}
57-
58-
@objc open var gradientAngle: CGFloat
59-
{
60-
return _gradientAngle
61-
}
62-
63-
@objc open var gradientStartOffsetPercent: CGPoint
64-
{
65-
return _gradientStartOffsetPercent
66-
}
67-
68-
@objc open var gradientStartRadiusPercent: CGFloat
69-
{
70-
return _gradientStartRadiusPercent
71-
}
72-
73-
@objc open var gradientEndOffsetPercent: CGPoint
74-
{
75-
return _gradientEndOffsetPercent
76-
}
77-
78-
@objc open var gradientEndRadiusPercent: CGFloat
79-
{
80-
return _gradientEndRadiusPercent
81-
}
82-
83-
@objc open var image: CGImage?
84-
{
85-
return _image
86-
}
87-
88-
@objc open var layer: CGLayer?
89-
{
90-
return _layer
91-
}
92-
31+
32+
@objc open private(set) var type: FillType = .empty
33+
@objc open private(set) var color: CGColor?
34+
@objc open private(set) var gradient: CGGradient?
35+
@objc open private(set) var gradientAngle: CGFloat = 0.0
36+
@objc open private(set) var gradientStartOffsetPercent = CGPoint.zero
37+
@objc open private(set) var gradientStartRadiusPercent: CGFloat = 0.0
38+
@objc open private(set) var gradientEndOffsetPercent = CGPoint.zero
39+
@objc open private(set) var gradientEndRadiusPercent: CGFloat = 0.0
40+
@objc open private(set) var image: CGImage?
41+
@objc open private(set) var layer: CGLayer?
42+
9343
// MARK: Constructors
94-
95-
public override init()
96-
{
97-
}
98-
44+
9945
@objc public init(CGColor: CGColor)
10046
{
101-
_type = .color
102-
_color = CGColor
47+
type = .color
48+
color = CGColor
10349
}
10450

10551
@objc public convenience init(color: NSUIColor)
@@ -109,9 +55,9 @@ open class Fill: NSObject
10955

11056
@objc public init(linearGradient: CGGradient, angle: CGFloat)
11157
{
112-
_type = .linearGradient
113-
_gradient = linearGradient
114-
_gradientAngle = angle
58+
type = .linearGradient
59+
gradient = linearGradient
60+
gradientAngle = angle
11561
}
11662

11763
@objc public init(
@@ -122,12 +68,12 @@ open class Fill: NSObject
12268
endRadiusPercent: CGFloat
12369
)
12470
{
125-
_type = .radialGradient
126-
_gradient = radialGradient
127-
_gradientStartOffsetPercent = startOffsetPercent
128-
_gradientStartRadiusPercent = startRadiusPercent
129-
_gradientEndOffsetPercent = endOffsetPercent
130-
_gradientEndRadiusPercent = endRadiusPercent
71+
type = .radialGradient
72+
gradient = radialGradient
73+
gradientStartOffsetPercent = startOffsetPercent
74+
gradientStartRadiusPercent = startRadiusPercent
75+
gradientEndOffsetPercent = endOffsetPercent
76+
gradientEndRadiusPercent = endRadiusPercent
13177
}
13278

13379
@objc public convenience init(radialGradient: CGGradient)
@@ -141,31 +87,21 @@ open class Fill: NSObject
14187
)
14288
}
14389

144-
@objc public init(CGImage: CGImage, tiled: Bool)
90+
@objc public init(CGImage: CGImage, tiled: Bool = false)
14591
{
146-
_type = tiled ? .tiledImage : .image
147-
_image = CGImage
92+
type = tiled ? .tiledImage : .image
93+
image = CGImage
14894
}
14995

150-
@objc public convenience init(image: NSUIImage, tiled: Bool)
96+
@objc public convenience init(image: NSUIImage, tiled: Bool = false)
15197
{
15298
self.init(CGImage: image.cgImage!, tiled: tiled)
15399
}
154-
155-
@objc public convenience init(CGImage: CGImage)
156-
{
157-
self.init(CGImage: CGImage, tiled: false)
158-
}
159-
160-
@objc public convenience init(image: NSUIImage)
161-
{
162-
self.init(image: image, tiled: false)
163-
}
164-
100+
165101
@objc public init(CGLayer: CGLayer)
166102
{
167-
_type = .layer
168-
_layer = CGLayer
103+
type = .layer
104+
layer = CGLayer
169105
}
170106

171107
// MARK: Constructors
@@ -209,26 +145,16 @@ open class Fill: NSObject
209145
return Fill(radialGradient: radialGradient)
210146
}
211147

212-
@objc open class func fillWithCGImage(_ CGImage: CGImage, tiled: Bool) -> Fill
148+
@objc open class func fillWithCGImage(_ CGImage: CGImage, tiled: Bool = false) -> Fill
213149
{
214150
return Fill(CGImage: CGImage, tiled: tiled)
215151
}
216152

217-
@objc open class func fillWithImage(_ image: NSUIImage, tiled: Bool) -> Fill
153+
@objc open class func fillWithImage(_ image: NSUIImage, tiled: Bool = false) -> Fill
218154
{
219155
return Fill(image: image, tiled: tiled)
220156
}
221-
222-
@objc open class func fillWithCGImage(_ CGImage: CGImage) -> Fill
223-
{
224-
return Fill(CGImage: CGImage)
225-
}
226-
227-
@objc open class func fillWithImage(_ image: NSUIImage) -> Fill
228-
{
229-
return Fill(image: image)
230-
}
231-
157+
232158
@objc open class func fillWithCGLayer(_ CGLayer: CGLayer) -> Fill
233159
{
234160
return Fill(CGLayer: CGLayer)
@@ -241,39 +167,40 @@ open class Fill: NSObject
241167
context: CGContext,
242168
rect: CGRect)
243169
{
244-
let fillType = _type
170+
let fillType = type
245171
if fillType == .empty
246172
{
247173
return
248174
}
249175

250176
context.saveGState()
177+
defer { context.restoreGState() }
251178

252179
switch fillType
253180
{
254181
case .color:
255182

256-
context.setFillColor(_color!)
183+
context.setFillColor(color!)
257184
context.fillPath()
258185

259186
case .image:
260187

261188
context.clip()
262-
context.draw(_image!, in: rect)
189+
context.draw(image!, in: rect)
263190

264191
case .tiledImage:
265192

266193
context.clip()
267-
context.draw(_image!, in: rect, byTiling: true)
194+
context.draw(image!, in: rect, byTiling: true)
268195

269196
case .layer:
270197

271198
context.clip()
272-
context.draw(_layer!, in: rect)
199+
context.draw(layer!, in: rect)
273200

274201
case .linearGradient:
275202

276-
let radians = (360.0 - _gradientAngle).DEG2RAD
203+
let radians = (360.0 - gradientAngle).DEG2RAD
277204
let centerPoint = CGPoint(x: rect.midX, y: rect.midY)
278205
let xAngleDelta = cos(radians) * rect.width / 2.0
279206
let yAngleDelta = sin(radians) * rect.height / 2.0
@@ -287,7 +214,7 @@ open class Fill: NSObject
287214
)
288215

289216
context.clip()
290-
context.drawLinearGradient(_gradient!,
217+
context.drawLinearGradient(gradient!,
291218
start: startPoint,
292219
end: endPoint,
293220
options: [.drawsAfterEndLocation, .drawsBeforeStartLocation]
@@ -299,25 +226,22 @@ open class Fill: NSObject
299226
let radius = max(rect.width, rect.height) / 2.0
300227

301228
context.clip()
302-
context.drawRadialGradient(_gradient!,
229+
context.drawRadialGradient(gradient!,
303230
startCenter: CGPoint(
304-
x: centerPoint.x + rect.width * _gradientStartOffsetPercent.x,
305-
y: centerPoint.y + rect.height * _gradientStartOffsetPercent.y
231+
x: centerPoint.x + rect.width * gradientStartOffsetPercent.x,
232+
y: centerPoint.y + rect.height * gradientStartOffsetPercent.y
306233
),
307-
startRadius: radius * _gradientStartRadiusPercent,
234+
startRadius: radius * gradientStartRadiusPercent,
308235
endCenter: CGPoint(
309-
x: centerPoint.x + rect.width * _gradientEndOffsetPercent.x,
310-
y: centerPoint.y + rect.height * _gradientEndOffsetPercent.y
236+
x: centerPoint.x + rect.width * gradientEndOffsetPercent.x,
237+
y: centerPoint.y + rect.height * gradientEndOffsetPercent.y
311238
),
312-
endRadius: radius * _gradientEndRadiusPercent,
239+
endRadius: radius * gradientEndRadiusPercent,
313240
options: [.drawsAfterEndLocation, .drawsBeforeStartLocation]
314241
)
315242

316243
case .empty:
317244
break
318245
}
319-
320-
context.restoreGState()
321246
}
322-
323247
}

Source/Charts/Utils/Transformer.swift

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,50 +17,50 @@ import CoreGraphics
1717
open class Transformer: NSObject
1818
{
1919
/// matrix to map the values to the screen pixels
20-
internal var _matrixValueToPx = CGAffineTransform.identity
20+
internal var matrixValueToPx = CGAffineTransform.identity
2121

2222
/// matrix for handling the different offsets of the chart
23-
internal var _matrixOffset = CGAffineTransform.identity
23+
internal var matrixOffset = CGAffineTransform.identity
2424

25-
internal var _viewPortHandler: ViewPortHandler
25+
internal var viewPortHandler: ViewPortHandler
2626

2727
@objc public init(viewPortHandler: ViewPortHandler)
2828
{
29-
_viewPortHandler = viewPortHandler
29+
self.viewPortHandler = viewPortHandler
3030
}
3131

3232
/// Prepares the matrix that transforms values to pixels. Calculates the scale factors from the charts size and offsets.
3333
@objc open func prepareMatrixValuePx(chartXMin: Double, deltaX: CGFloat, deltaY: CGFloat, chartYMin: Double)
3434
{
35-
var scaleX = (_viewPortHandler.contentWidth / deltaX)
36-
var scaleY = (_viewPortHandler.contentHeight / deltaY)
35+
var scaleX = (viewPortHandler.contentWidth / deltaX)
36+
var scaleY = (viewPortHandler.contentHeight / deltaY)
3737

38-
if CGFloat.infinity == scaleX
38+
if .infinity == scaleX
3939
{
4040
scaleX = 0.0
4141
}
42-
if CGFloat.infinity == scaleY
42+
if .infinity == scaleY
4343
{
4444
scaleY = 0.0
4545
}
4646

4747
// setup all matrices
48-
_matrixValueToPx = CGAffineTransform.identity
49-
_matrixValueToPx = _matrixValueToPx.scaledBy(x: scaleX, y: -scaleY)
50-
_matrixValueToPx = _matrixValueToPx.translatedBy(x: CGFloat(-chartXMin), y: CGFloat(-chartYMin))
48+
matrixValueToPx = CGAffineTransform.identity
49+
.scaledBy(x: scaleX, y: -scaleY)
50+
.translatedBy(x: CGFloat(-chartXMin), y: CGFloat(-chartYMin))
5151
}
5252

5353
/// Prepares the matrix that contains all offsets.
5454
@objc open func prepareMatrixOffset(inverted: Bool)
5555
{
5656
if !inverted
5757
{
58-
_matrixOffset = CGAffineTransform(translationX: _viewPortHandler.offsetLeft, y: _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom)
58+
matrixOffset = CGAffineTransform(translationX: viewPortHandler.offsetLeft, y: viewPortHandler.chartHeight - viewPortHandler.offsetBottom)
5959
}
6060
else
6161
{
62-
_matrixOffset = CGAffineTransform(scaleX: 1.0, y: -1.0)
63-
_matrixOffset = _matrixOffset.translatedBy(x: _viewPortHandler.offsetLeft, y: -_viewPortHandler.offsetTop)
62+
matrixOffset = CGAffineTransform(scaleX: 1.0, y: -1.0)
63+
.translatedBy(x: viewPortHandler.offsetLeft, y: -viewPortHandler.offsetTop)
6464
}
6565
}
6666

@@ -69,10 +69,7 @@ open class Transformer: NSObject
6969
open func pointValuesToPixel(_ points: inout [CGPoint])
7070
{
7171
let trans = valueToPixelMatrix
72-
for i in 0 ..< points.count
73-
{
74-
points[i] = points[i].applying(trans)
75-
}
72+
points = points.map { $0.applying(trans) }
7673
}
7774

7875
open func pointValueToPixel(_ point: inout CGPoint)
@@ -126,22 +123,14 @@ open class Transformer: NSObject
126123
open func rectValuesToPixel(_ rects: inout [CGRect])
127124
{
128125
let trans = valueToPixelMatrix
129-
130-
for i in 0 ..< rects.count
131-
{
132-
rects[i] = rects[i].applying(trans)
133-
}
126+
rects = rects.map { $0.applying(trans) }
134127
}
135128

136129
/// Transforms the given array of touch points (pixels) into values on the chart.
137130
open func pixelsToValues(_ pixels: inout [CGPoint])
138131
{
139132
let trans = pixelToValueMatrix
140-
141-
for i in 0 ..< pixels.count
142-
{
143-
pixels[i] = pixels[i].applying(trans)
144-
}
133+
pixels = pixels.map { $0.applying(trans) }
145134
}
146135

147136
/// Transforms the given touch point (pixels) into a value on the chart.
@@ -169,8 +158,8 @@ open class Transformer: NSObject
169158
@objc open var valueToPixelMatrix: CGAffineTransform
170159
{
171160
return
172-
_matrixValueToPx.concatenating(_viewPortHandler.touchMatrix
173-
).concatenating(_matrixOffset
161+
matrixValueToPx.concatenating(viewPortHandler.touchMatrix)
162+
.concatenating(matrixOffset
174163
)
175164
}
176165

0 commit comments

Comments
 (0)