Skip to content

Commit abd0f23

Browse files
committed
Closed paths move location back to last unbroken segment
1 parent 937a1a9 commit abd0f23

File tree

5 files changed

+28
-11
lines changed

5 files changed

+28
-11
lines changed

Examples/Sources/ViewController.swift

+1-1
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 = Image(named: "stylesheet.svg", in: .samples)?.rasterize()
68+
imageView.image = Image(named: "path-close.svg", in: .samples)?.rasterize()
6969
imageView.contentMode = .scaleAspectFit
7070
imageView.backgroundColor = .white
7171
self.view = imageView

Samples/key.svg

+3
Loading

Samples/path-close.svg

+6
Loading

SwiftDraw/LayerTree.Path.swift

+12-10
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,12 @@ extension LayerTree.Path {
7070

7171
return location
7272
}
73-
73+
7474
var lastStart: LayerTree.Point? {
75-
let rev = segments.reversed().dropFirst()
76-
guard
77-
let closeIdx = rev.firstIndex(where: { $0.isClose }),
78-
closeIdx != rev.startIndex else {
79-
return segments.first?.location
80-
}
81-
82-
let point = rev.index(before: closeIdx)
83-
return rev[point].location
75+
guard let index = segments.lastIndex(where:\.isMove) else {
76+
return segments.first?.location
77+
}
78+
return segments[index].location
8479
}
8580
}
8681

@@ -92,6 +87,13 @@ private extension LayerTree.Path.Segment {
9287
}
9388
return true
9489
}
90+
91+
var isMove: Bool {
92+
guard case .move = self else {
93+
return false
94+
}
95+
return true
96+
}
9597

9698
var location: LayerTree.Point? {
9799
switch self {

SwiftDrawTests/LayerTree.PathTests.swift

+6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ final class LayerTreePathTests: XCTestCase {
4242
func testLocation() {
4343
let path = Path()
4444
XCTAssertNil(path.location)
45+
46+
path.segments.append(move(10, 10))
47+
XCTAssertEqual(path.location, Point(10, 10))
48+
49+
path.segments.append(line(20, 20))
50+
XCTAssertEqual(path.location, Point(20, 20))
4551

4652
path.segments.append(move(110, 90))
4753
XCTAssertEqual(path.location, Point(110, 90))

0 commit comments

Comments
 (0)