1-
21/// An object which maps a value in the range `0...1` to a `Color`.
32///
43/// This object wraps a conformer to `ColorMapProtocol`, and is used instead of `ColorMapProtocol` directly
87///
98public struct ColorMap : ColorMapProtocol {
109 var base : ColorMapProtocol
11-
10+
1211 public init ( _ base: ColorMapProtocol ) {
1312 // If base is already wrapped, do not re-wrap it.
14- if let existing = base as? ColorMap { self = existing }
15- else { self . base = base }
13+ if let existing = base as? ColorMap { self = existing } else { self . base = base }
1614 }
1715 public func colorForOffset( _ offset: Double ) -> Color {
1816 let offset = min ( max ( offset, 0 ) , 1 )
@@ -35,8 +33,8 @@ extension ColorMapProtocol {
3533
3634private struct ColorTransformer : ColorMapProtocol {
3735 var base : ColorMapProtocol
38- var transform : ( Color ) -> Color
39- init ( _ base: ColorMapProtocol , transform: @escaping ( Color ) -> Color ) {
36+ var transform : ( Color ) -> Color
37+ init ( _ base: ColorMapProtocol , transform: @escaping ( Color ) -> Color ) {
4038 self . base = base; self . transform = transform
4139 }
4240 func colorForOffset( _ offset: Double ) -> Color {
@@ -45,13 +43,13 @@ private struct ColorTransformer: ColorMapProtocol {
4543}
4644
4745extension ColorMap {
48-
46+
4947 /// Returns a `ColorMap` whose output is transformed by the given closure.
5048 ///
51- public func withTransform( _ transform: @escaping ( Color ) -> Color ) -> ColorMap {
49+ public func withTransform( _ transform: @escaping ( Color ) -> Color ) -> ColorMap {
5250 return ColorMap ( ColorTransformer ( base, transform: transform) )
5351 }
54-
52+
5553 /// Returns a `ColorMap` whose output colors' alpha components are given by `alpha`.
5654 ///
5755 public func withAlpha( _ alpha: Float ) -> ColorMap {
@@ -63,7 +61,7 @@ extension ColorMap {
6361 public func lightened( by amount: Float ) -> ColorMap {
6462 return withTransform { $0. linearBlend ( with: . white, offset: amount) }
6563 }
66-
64+
6765 /// Returns a `ColorMap` whose output colors are darkened by the given `amount`.
6866 ///
6967 public func darkened( by amount: Float ) -> ColorMap {
@@ -75,8 +73,8 @@ extension ColorMap {
7573
7674private struct ColorMapOffsetTransformer : ColorMapProtocol {
7775 var base : ColorMapProtocol
78- var transform : ( Double ) -> Double
79- init ( _ base: ColorMapProtocol , transform: @escaping ( Double ) -> Double ) {
76+ var transform : ( Double ) -> Double
77+ init ( _ base: ColorMapProtocol , transform: @escaping ( Double ) -> Double ) {
8078 self . base = base; self . transform = transform
8179 }
8280 func colorForOffset( _ offset: Double ) -> Color {
@@ -88,11 +86,11 @@ private struct ColorMapOffsetTransformer: ColorMapProtocol {
8886}
8987
9088extension ColorMap {
91-
89+
9290 private func withOffsetTransform( _ transform: @escaping ( Double ) -> Double ) -> ColorMap {
9391 return ColorMap ( ColorMapOffsetTransformer ( base, transform: transform) )
9492 }
95-
93+
9694 /// Returns a `ColorMap` whose output at offset `x` is equal to this `ColorMap`'s output at `1 - x`.
9795 ///
9896 public func reversed( ) -> ColorMap {
@@ -110,11 +108,11 @@ private struct SingleColorMap: ColorMapProtocol {
110108}
111109
112110extension ColorMap {
113-
111+
114112 /// Returns a `ColorMap` which always returns the same color.
115113 ///
116114 public static func color( _ color: Color ) -> ColorMap {
117- return ColorMap ( SingleColorMap ( color: color) )
115+ return ColorMap ( SingleColorMap ( color: color) )
118116 }
119117}
120118
@@ -132,7 +130,7 @@ public struct GradientStop {
132130
133131private struct LinearGradient : ColorMapProtocol {
134132 var stops : [ GradientStop ]
135-
133+
136134 init ( stops: [ GradientStop ] ) {
137135 self . stops = stops. sorted { $0. position < $1. position }
138136 }
@@ -147,29 +145,29 @@ private struct LinearGradient: ColorMapProtocol {
147145 guard rightStopIdx > stops. startIndex else { return rightStop. color }
148146 let leftStop = stops [ stops. index ( before: rightStopIdx) ]
149147 assert ( leftStop. position <= offset)
150-
148+
151149 let distance = rightStop. position - leftStop. position
152150 guard distance > 0 else { return rightStop. color }
153-
151+
154152 let offset = ( offset - leftStop. position) / distance
155153 return leftStop. color. linearBlend ( with: rightStop. color, offset: Float ( offset) )
156154 }
157155}
158156
159157extension ColorMap {
160-
158+
161159 /// Returns a `ColorMap` whose output is a linear gradient with the given stops.
162160 ///
163161 public static func linearGradient( _ stops: [ GradientStop ] ) -> ColorMap {
164162 return ColorMap ( LinearGradient ( stops: stops) )
165163 }
166-
164+
167165 /// Returns a `ColorMap` whose output is a linear gradient between the given colors.
168166 ///
169167 public static func linearGradient( _ start: Color , _ end: Color ) -> ColorMap {
170168 return ColorMap ( LinearGradient ( start: start, end: end) )
171169 }
172-
170+
173171 /// A standard, five-color heat map.
174172 ///
175173 public static let fiveColorHeatMap = ColorMap . linearGradient ( [
@@ -192,4 +190,3 @@ extension ColorMap {
192190 GradientStop ( Color ( 1 , 1 , 1 , 1 ) , at: 1 )
193191 ] )
194192}
195-
0 commit comments