diff --git a/src/models/Document.zig b/src/models/Document.zig index 83fe9b2..72a27cf 100644 --- a/src/models/Document.zig +++ b/src/models/Document.zig @@ -26,3 +26,17 @@ pub fn addObject(self: *Document, template: Object) !void { const obj = try template.clone(self.allocator); try self.objects.append(self.allocator, obj); } + +pub fn addShape(self: *Document, parent: ?*Object, shape: Object.ShapeKind) !void { + const obj = switch (shape) { + .line => try Object.createLine(self.allocator), + .ellipse => try Object.createEllipse(self.allocator), + .broken => try Object.createBrokenLine(self.allocator), + .arc => return error.ArcNotImplemented, + }; + if (parent) |p| { + try p.addChild(self.allocator, obj); + } else { + try self.addObject(obj); + } +} diff --git a/src/models/Object.zig b/src/models/Object.zig index 13f5604..5566d6c 100644 --- a/src/models/Object.zig +++ b/src/models/Object.zig @@ -8,7 +8,6 @@ const defaultCommonProperties = @import("Property.zig").defaultCommonProperties; const Object = @This(); pub const ShapeKind = enum { - rect, line, ellipse, arc, @@ -81,13 +80,6 @@ fn createWithCommonProperties(allocator: std.mem.Allocator, shape: ShapeKind) !O }; } -pub fn createRect(allocator: std.mem.Allocator) !Object { - var obj = try createWithCommonProperties(allocator, .rect); - errdefer obj.deinit(allocator); - try obj.properties.append(allocator, .{ .data = .{ .size = .{ .width = 100, .height = 100 } } }); - return obj; -} - pub fn createEllipse(allocator: std.mem.Allocator) !Object { var obj = try createWithCommonProperties(allocator, .ellipse); errdefer obj.deinit(allocator);