Skip to content

Commit 41bbf7d

Browse files
committed
Fixing last path coordinates for subpaths
1 parent b7ae41a commit 41bbf7d

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

Samples/shapes.svg

Lines changed: 2 additions & 0 deletions
Loading

SwiftDraw/LayerTree.Builder.Path.swift

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,14 +235,41 @@ extension LayerTree.Path {
235235
}
236236

237237
var last: LayerTree.Point? {
238-
239-
guard let lastSegment = segments.last else { return nil }
240-
241-
switch lastSegment {
238+
guard let last = segments.last?.last else {
239+
return lastStart
240+
}
241+
242+
return last
243+
}
244+
245+
var lastStart: LayerTree.Point? {
246+
let rev = segments.reversed()
247+
guard
248+
let closeIdx = rev.index(where: { $0.isClose }),
249+
closeIdx != rev.startIndex else {
250+
return segments.first?.last
251+
}
252+
253+
let point = rev.index(before: closeIdx)
254+
return rev[point].last
255+
}
256+
}
257+
258+
private extension LayerTree.Path.Segment {
259+
260+
var isClose: Bool {
261+
guard case .close = self else {
262+
return false
263+
}
264+
return true
265+
}
266+
267+
var last: LayerTree.Point? {
268+
switch self {
242269
case .move(to: let p): return p
243270
case .line(let p): return p
244271
case .cubic(let p, _, _): return p
245-
case .close: return nil //traverse segments?
272+
case .close: return nil
246273
}
247274
}
248275
}

0 commit comments

Comments
 (0)