Skip to content

Commit c746f44

Browse files
committed
Shape gradientEndpoints
1 parent 69148e4 commit c746f44

File tree

3 files changed

+50
-7
lines changed

3 files changed

+50
-7
lines changed

Examples/Sources/ViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class ViewController: UIViewController {
6565

6666
override func loadView() {
6767
let imageView = UIImageView(frame: UIScreen.main.bounds)
68-
imageView.image = SVG(named: "stylesheet.svg", in: .samples)?.rasterize()
68+
imageView.image = SVG(named: "gradient-stroke.svg", in: .samples)?.rasterize()
6969
imageView.contentMode = .scaleAspectFit
7070
imageView.backgroundColor = .white
7171
self.view = imageView

Samples/gradient-stroke.svg

Lines changed: 19 additions & 0 deletions
Loading

SwiftDraw/LayerTree.CommandGenerator.swift

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

483483
private 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

Comments
 (0)