начало дерева объектов
This commit is contained in:
@@ -36,3 +36,28 @@ pub fn addShape(self: *Document, parent: ?*Object, shape_kind: Object.ShapeKind)
|
||||
try self.addObject(obj);
|
||||
}
|
||||
}
|
||||
|
||||
/// Удаляет объект из документа (из корня или из детей родителя). Возвращает true, если объект был найден и удалён.
|
||||
pub fn removeObject(self: *Document, obj: *Object) bool {
|
||||
for (self.objects.items, 0..) |*item, i| {
|
||||
if (item == obj) {
|
||||
var removed = self.objects.orderedRemove(i);
|
||||
removed.deinit(self.allocator);
|
||||
return true;
|
||||
}
|
||||
if (removeFromChildren(self.allocator, &item.children, obj)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
fn removeFromChildren(allocator: std.mem.Allocator, children: *std.ArrayList(Object), obj: *Object) bool {
|
||||
for (children.items, 0..) |*item, i| {
|
||||
if (item == obj) {
|
||||
var removed = children.orderedRemove(i);
|
||||
removed.deinit(allocator);
|
||||
return true;
|
||||
}
|
||||
if (removeFromChildren(allocator, &item.children, obj)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user