@@ -195,7 +195,7 @@ extension LayerTree {
195195 commands. append ( . setStroke( color: color) )
196196 commands. append ( . stroke( path) )
197197 case . linearGradient( let gradient) :
198- if let endpoints = shape. endpoints , canRenderGradient ( gradient. gradient) {
198+ if let endpoints = shape. gradientEndpoints , canRenderGradient ( gradient. gradient) {
199199 let width = provider. createFloat ( from: stroke. width)
200200 let cap = provider. createLineCap ( from: stroke. cap)
201201 let join = provider. createLineJoin ( from: stroke. join)
@@ -482,14 +482,29 @@ private extension LayerTree.Gradient {
482482
483483private extension LayerTree . Shape {
484484
485- var endpoints : ( start: LayerTree . Point , end: LayerTree . Point ) ? {
486- guard case . path( let p) = self else { return nil }
487- return p. endpoints
485+ var gradientEndpoints : ( start: LayerTree . Point , end: LayerTree . Point ) ? {
486+ switch self {
487+ case . path( let p) :
488+ return p. endpoints
489+ case . ellipse( within: let rect) :
490+ return rect. gradientEndpoints
491+ case . rect( within: let rect, _) :
492+ return rect. gradientEndpoints
493+ case . polygon( between: let points) :
494+ guard points. count > 1 else { return nil }
495+ return ( points [ 0 ] , points [ points. count / 2 ] )
496+ default :
497+ return nil
498+ }
488499 }
489500
490501 var bounds : LayerTree . Rect ? {
491- guard case . path( let p) = self else { return nil }
492- return p. bounds
502+ switch self {
503+ case . path( let p) :
504+ return p. bounds
505+ default :
506+ return nil
507+ }
493508 }
494509}
495510
@@ -501,3 +516,12 @@ private extension LayerTree.Filter {
501516 }
502517 }
503518}
519+
520+ private extension LayerTree . Rect {
521+
522+ var gradientEndpoints : ( start: LayerTree . Point , end: LayerTree . Point ) {
523+ let start = LayerTree . Point ( midX, minY)
524+ let end = LayerTree . Point ( midX, maxY)
525+ return ( start, end)
526+ }
527+ }
0 commit comments