@@ -216,7 +216,7 @@ extension LayerTree {
216216 let end = provider. createPoint ( from: pathEnd)
217217
218218 if !fillGradient. transform. isEmpty {
219- // commands.append(contentsOf: renderCommands(forTransforms: fillGradient.transform))
219+ commands. append ( contentsOf: renderCommands ( forTransforms: fillGradient. transform) )
220220 }
221221
222222 let apha = provider. createFloat ( from: fill. opacity)
@@ -227,21 +227,47 @@ extension LayerTree {
227227 commands. append ( . pushState)
228228 commands. append ( . setClip( path: path) )
229229
230- let converted = apply ( colorConverter: colorConverter, to: fillGradient. gradient)
231- let gradient = provider. createGradient ( from: converted)
232- let pathBounds = provider. getBounds ( from: shape)
233- let center = provider. createPoint ( from: pathBounds. center)
234- let x = ( pathBounds. center. x - pathBounds. origin. x)
235- let y = ( pathBounds. center. y - pathBounds. origin. y)
236- let radius = provider. createFloat ( from: sqrt ( x*x+ y*y) )
230+ let startCenter : LayerTree . Point
231+ let startRadius : LayerTree . Float
232+ let endCenter : LayerTree . Point
233+ let endRadius : LayerTree . Float
234+
235+ switch fillGradient. gradient. units {
236+ case . objectBoundingBox:
237+ let pathBounds = provider. getBounds ( from: shape)
238+ let h = sqrt ( ( pathBounds. width*pathBounds. width) + ( pathBounds. height*pathBounds. height) )
239+ startCenter = LayerTree . Point (
240+ pathBounds. x + ( fillGradient. center. x * pathBounds. width) ,
241+ pathBounds. y + ( fillGradient. center. y * pathBounds. height)
242+ )
243+ startRadius = h * fillGradient. radius
244+ endCenter = LayerTree . Point (
245+ pathBounds. x + ( fillGradient. endCenter. x * pathBounds. width) ,
246+ pathBounds. y + ( fillGradient. endCenter. y * pathBounds. height)
247+ )
248+ endRadius = h * fillGradient. endRadius
249+ case . userSpaceOnUse:
250+ startCenter = fillGradient. center
251+ startRadius = fillGradient. radius
252+ endCenter = fillGradient. endCenter
253+ endRadius = fillGradient. endRadius
254+ }
237255
238256 if !fillGradient. gradient. transform. isEmpty {
239- // commands.append(contentsOf: renderCommands(forTransforms: fillGradient.transform))
257+ commands. append ( contentsOf: renderCommands ( forTransforms: fillGradient. gradient . transform) )
240258 }
241259
260+ let converted = apply ( colorConverter: colorConverter, to: fillGradient. gradient)
261+ let gradient = provider. createGradient ( from: converted)
242262 let apha = provider. createFloat ( from: fill. opacity)
243263 commands. append ( . setAlpha( apha) )
244- commands. append ( . drawRadialGradient( gradient, center: center, radius: radius) )
264+ commands. append ( . drawRadialGradient(
265+ gradient,
266+ startCenter: provider. createPoint ( from: startCenter) ,
267+ startRadius: provider. createFloat ( from: startRadius) ,
268+ endCenter: provider. createPoint ( from: endCenter) ,
269+ endRadius: provider. createFloat ( from: endRadius)
270+ ) )
245271 commands. append ( . popState)
246272 }
247273
0 commit comments