Добавлять объекты в родителя
This commit is contained in:
@@ -30,6 +30,17 @@ pub fn addObject(self: *Document, template: Object) !void {
|
|||||||
try self.objects.append(self.allocator, obj);
|
try self.objects.append(self.allocator, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Добавляет объект в документ: как ребёнка родителя (если id найден), иначе в корень.
|
||||||
|
pub fn addObjectUnderParentId(self: *Document, parent_id: ?u64, template: Object) !void {
|
||||||
|
if (parent_id) |id| {
|
||||||
|
if (self.findObjectById(id)) |parent| {
|
||||||
|
try parent.addChild(self.allocator, template, &self.next_object_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try self.addObject(template);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn addShape(self: *Document, parent: ?*Object, shape_kind: Object.ShapeKind) !void {
|
pub fn addShape(self: *Document, parent: ?*Object, shape_kind: Object.ShapeKind) !void {
|
||||||
const obj = try shape.createObject(self.allocator, shape_kind);
|
const obj = try shape.createObject(self.allocator, shape_kind);
|
||||||
if (parent) |p| {
|
if (parent) |p| {
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
const Point2_f = @import("../models/basic_models.zig").Point2_f;
|
const Point2_f = @import("../models/basic_models.zig").Point2_f;
|
||||||
const Canvas = @import("../Canvas.zig");
|
const Canvas = @import("../Canvas.zig");
|
||||||
|
const Document = @import("../models/Document.zig");
|
||||||
|
|
||||||
pub const ToolContext = struct {
|
pub const ToolContext = struct {
|
||||||
canvas: *Canvas,
|
canvas: *Canvas,
|
||||||
document_point: Point2_f,
|
document_point: Point2_f,
|
||||||
|
selected_object_id: ?u64,
|
||||||
|
|
||||||
|
pub fn addObject(self: *const ToolContext, template: Document.Object) !void {
|
||||||
|
try self.canvas.document.addObjectUnderParentId(self.selected_object_id, template);
|
||||||
|
self.canvas.requestRedraw();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Tool = struct {
|
pub const Tool = struct {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ fn onCanvasClick(ctx: *const Tool.ToolContext) !void {
|
|||||||
var obj = shape.createObject(canvas.document.allocator, .arc) catch return;
|
var obj = shape.createObject(canvas.document.allocator, .arc) catch return;
|
||||||
defer obj.deinit(canvas.allocator);
|
defer obj.deinit(canvas.allocator);
|
||||||
try obj.setProperty(canvas.document.allocator, .{ .data = .{ .position = ctx.document_point } });
|
try obj.setProperty(canvas.document.allocator, .{ .data = .{ .position = ctx.document_point } });
|
||||||
try canvas.document.addObject(obj);
|
try ctx.addObject(obj);
|
||||||
canvas.requestRedraw();
|
|
||||||
}
|
}
|
||||||
pub const tool = Tool.Tool{ .onCanvasClick = onCanvasClick };
|
pub const tool = Tool.Tool{ .onCanvasClick = onCanvasClick };
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ fn onCanvasClick(ctx: *const Tool.ToolContext) !void {
|
|||||||
var obj = shape.createObject(canvas.document.allocator, .broken) catch return;
|
var obj = shape.createObject(canvas.document.allocator, .broken) catch return;
|
||||||
defer obj.deinit(canvas.allocator);
|
defer obj.deinit(canvas.allocator);
|
||||||
try obj.setProperty(canvas.document.allocator, .{ .data = .{ .position = ctx.document_point } });
|
try obj.setProperty(canvas.document.allocator, .{ .data = .{ .position = ctx.document_point } });
|
||||||
try canvas.document.addObject(obj);
|
try ctx.addObject(obj);
|
||||||
canvas.requestRedraw();
|
|
||||||
}
|
}
|
||||||
pub const tool = Tool.Tool{ .onCanvasClick = onCanvasClick };
|
pub const tool = Tool.Tool{ .onCanvasClick = onCanvasClick };
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ fn onCanvasClick(ctx: *const Tool.ToolContext) !void {
|
|||||||
var obj = shape.createObject(canvas.document.allocator, .ellipse) catch return;
|
var obj = shape.createObject(canvas.document.allocator, .ellipse) catch return;
|
||||||
defer obj.deinit(canvas.allocator);
|
defer obj.deinit(canvas.allocator);
|
||||||
try obj.setProperty(canvas.document.allocator, .{ .data = .{ .position = ctx.document_point } });
|
try obj.setProperty(canvas.document.allocator, .{ .data = .{ .position = ctx.document_point } });
|
||||||
try canvas.document.addObject(obj);
|
try ctx.addObject(obj);
|
||||||
canvas.requestRedraw();
|
|
||||||
}
|
}
|
||||||
pub const tool = Tool.Tool{ .onCanvasClick = onCanvasClick };
|
pub const tool = Tool.Tool{ .onCanvasClick = onCanvasClick };
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ fn onCanvasClick(ctx: *const Tool.ToolContext) !void {
|
|||||||
var obj = shape.createObject(canvas.document.allocator, .line) catch return;
|
var obj = shape.createObject(canvas.document.allocator, .line) catch return;
|
||||||
defer obj.deinit(canvas.allocator);
|
defer obj.deinit(canvas.allocator);
|
||||||
try obj.setProperty(canvas.document.allocator, .{ .data = .{ .position = ctx.document_point } });
|
try obj.setProperty(canvas.document.allocator, .{ .data = .{ .position = ctx.document_point } });
|
||||||
try canvas.document.addObject(obj);
|
try ctx.addObject(obj);
|
||||||
canvas.requestRedraw();
|
|
||||||
}
|
}
|
||||||
pub const tool = Tool.Tool{ .onCanvasClick = onCanvasClick };
|
pub const tool = Tool.Tool{ .onCanvasClick = onCanvasClick };
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ pub fn canvasView(canvas: *Canvas, selected_object_id: ?u64, content_rect_scale:
|
|||||||
{
|
{
|
||||||
drawCanvasContent(canvas, scroll);
|
drawCanvasContent(canvas, scroll);
|
||||||
handleCanvasZoom(canvas, scroll);
|
handleCanvasZoom(canvas, scroll);
|
||||||
handleCanvasMouse(canvas, scroll);
|
handleCanvasMouse(canvas, scroll, selected_object_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const scroll_parent = dvui.parentGet();
|
const scroll_parent = dvui.parentGet();
|
||||||
@@ -221,7 +221,7 @@ fn handleCanvasZoom(canvas: *Canvas, scroll: anytype) void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handleCanvasMouse(canvas: *Canvas, scroll: *dvui.ScrollAreaWidget) void {
|
fn handleCanvasMouse(canvas: *Canvas, scroll: *dvui.ScrollAreaWidget, selected_object_id: ?u64) void {
|
||||||
const natural_scale = if (canvas.native_scaling) 1 else dvui.windowNaturalScale();
|
const natural_scale = if (canvas.native_scaling) 1 else dvui.windowNaturalScale();
|
||||||
const scroll_data = scroll.data();
|
const scroll_data = scroll.data();
|
||||||
|
|
||||||
@@ -257,6 +257,7 @@ fn handleCanvasMouse(canvas: *Canvas, scroll: *dvui.ScrollAreaWidget) void {
|
|||||||
var ctx = Tool.ToolContext{
|
var ctx = Tool.ToolContext{
|
||||||
.canvas = canvas,
|
.canvas = canvas,
|
||||||
.document_point = point,
|
.document_point = point,
|
||||||
|
.selected_object_id = selected_object_id,
|
||||||
};
|
};
|
||||||
desc.implementation.onCanvasClick(&ctx) catch |err| {
|
desc.implementation.onCanvasClick(&ctx) catch |err| {
|
||||||
std.debug.print("onCanvasClick error: {}\n", .{err});
|
std.debug.print("onCanvasClick error: {}\n", .{err});
|
||||||
|
|||||||
Reference in New Issue
Block a user