diff --git a/Memola/Canvas/Elements/Core/Element.swift b/Memola/Canvas/Elements/Core/Element.swift index bde3e5b..5d05736 100644 --- a/Memola/Canvas/Elements/Core/Element.swift +++ b/Memola/Canvas/Elements/Core/Element.swift @@ -40,4 +40,17 @@ enum Element: Equatable, Comparable { photo.createdAt } } + + static func < (lhs: Element, rhs: Element) -> Bool { + switch (lhs, rhs) { + case let (.stroke(leftStroke), .stroke(rightStroke)): + leftStroke < rightStroke + case let (.photo(leftPhoto), .photo(rightPhoto)): + leftPhoto < rightPhoto + case let (.photo(photo), .stroke(stroke)): + photo.createdAt < stroke.value.createdAt + case let (.stroke(stroke), .photo(photo)): + stroke.value.createdAt < photo.createdAt + } + } } diff --git a/Memola/Canvas/RTree/RTree.swift b/Memola/Canvas/RTree/RTree.swift index 367a7ba..168520f 100644 --- a/Memola/Canvas/RTree/RTree.swift +++ b/Memola/Canvas/RTree/RTree.swift @@ -38,7 +38,11 @@ class RTree where T: Equatable & Comparable { .sorted(by: <) result = _merge(result, children) } else { - queue.append(contentsOf: node.children) + let nodes = node.children.sorted { + guard let first = $0.value, let second = $1.value else { return false } + return first < second + } + queue.append(contentsOf: nodes) } } return result