mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-01-11 20:00:24 +01:00
bug: separate strokes if erasers do not match
This commit is contained in:
@@ -8,23 +8,47 @@
|
||||
import Foundation
|
||||
|
||||
final class ElementGroup {
|
||||
#if DEBUG
|
||||
let id = UUID()
|
||||
#endif
|
||||
var elements: [Element] = []
|
||||
var type: ElementGroupType
|
||||
var eraserStrokes: Set<EraserStroke> = []
|
||||
|
||||
init(_ element: Element) {
|
||||
elements = [element]
|
||||
type = element.elementGroupType
|
||||
collect(element)
|
||||
}
|
||||
|
||||
var isEmpty: Bool { elements.isEmpty }
|
||||
|
||||
func add(_ element: Element) {
|
||||
elements.append(element)
|
||||
collect(element)
|
||||
}
|
||||
|
||||
private func collect(_ element: Element) {
|
||||
if let stroke = element.stroke(as: PenStroke.self) {
|
||||
eraserStrokes.formUnion(stroke.eraserStrokes)
|
||||
}
|
||||
#if DEBUG
|
||||
NSLog("[Memola] - \(id) eraser count - \(eraserStrokes.count)")
|
||||
#endif
|
||||
}
|
||||
|
||||
func isSameElement(_ element: Element) -> Bool {
|
||||
guard let last = elements.last else { return false }
|
||||
return element ^= last
|
||||
guard element ^= last else {
|
||||
return false
|
||||
}
|
||||
if let stroke = element.stroke(as: PenStroke.self) {
|
||||
if eraserStrokes.count <= stroke.eraserStrokes.count {
|
||||
return true
|
||||
}
|
||||
return eraserStrokes.intersection(stroke.eraserStrokes).count == eraserStrokes.count
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func getPenStyle() -> PenStyle? {
|
||||
|
||||
Reference in New Issue
Block a user