bug: separate strokes if erasers do not match

This commit is contained in:
dscyrescotti
2024-11-25 01:23:55 +07:00
parent 6e24dd8da9
commit d8b3362a18

View File

@@ -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? {