From f55a756132a06e892a2a6230aa36b3760372c31b Mon Sep 17 00:00:00 2001 From: Roman Pytkov Date: Thu, 26 Feb 2026 20:41:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D1=81=D0=BA=D1=80=D0=BE=D0=BB=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui/canvas_view.zig | 54 +++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/src/ui/canvas_view.zig b/src/ui/canvas_view.zig index 83b4aef..e3fc274 100644 --- a/src/ui/canvas_view.zig +++ b/src/ui/canvas_view.zig @@ -13,21 +13,28 @@ pub fn canvasView(canvas: *Canvas, selected_object: ?*Document.Object, content_r { var overlay = dvui.overlay(@src(), .{ .expand = .both }); { + const overlay_parent = dvui.parentGet(); var scroll = dvui.scrollArea( @src(), .{ .scroll_info = &canvas.scroll, .vertical_bar = .auto, .horizontal_bar = .auto, + .process_events_after = false, + }, + .{ + .expand = .both, + .background = false, }, - .{ .expand = .both, .background = false }, ); { drawCanvasContent(canvas, scroll); handleCanvasZoom(canvas, scroll); handleCanvasMouse(canvas, scroll); } - scroll.deinit(); + + const scroll_parent = dvui.parentGet(); + dvui.parentSet(overlay_parent); // Тулбар поверх scroll var toolbar_box = dvui.box( @@ -38,7 +45,7 @@ pub fn canvasView(canvas: *Canvas, selected_object: ?*Document.Object, content_r .background = false, .gravity_x = 0.0, .gravity_y = 0.0, - .margin = dvui.Rect{ .x = 8, .y = 8 }, + .margin = dvui.Rect{ .x = 16, .y = 16 }, }, ); { @@ -58,7 +65,7 @@ pub fn canvasView(canvas: *Canvas, selected_object: ?*Document.Object, content_r .background = false, .gravity_x = 1.0, .gravity_y = 0.0, - .margin = dvui.Rect{ .w = 8, .y = 8 }, + .margin = dvui.Rect{ .w = 32, .y = 16, .h = 100 }, }, ); { @@ -70,6 +77,30 @@ pub fn canvasView(canvas: *Canvas, selected_object: ?*Document.Object, content_r } dvui.label(@src(), "Canvas", .{}, .{ .gravity_x = 0.5, .gravity_y = 0.0 }); + + if (canvas.properties_rect_scale) |prs| { + for (dvui.events()) |*e| { + if (e.handled) continue; + if (e.evt != .mouse) continue; + const mouse = &e.evt.mouse; + if (mouse.action != .wheel_x and mouse.action != .wheel_y) continue; + const pt = prs.pointFromPhysical(mouse.p); + const r = prs.r; + if (pt.x >= 0 and pt.x * prs.s < r.w and pt.y >= 0 and pt.y * prs.s < r.h) { + e.handled = true; + } + } + } + + if (!scroll.init_opts.process_events_after) { + if (scroll.scroll) |*sc| { + dvui.clipSet(sc.prevClip); + sc.processEventsAfter(); + } + } + + dvui.parentSet(scroll_parent); + scroll.deinit(); } overlay.deinit(); } @@ -246,7 +277,6 @@ fn drawToolbar(canvas: *Canvas) void { .{ .gravity_x = 0.0, .gravity_y = 0.0, - .margin = dvui.Rect{ .x = 8, .y = 8 }, .padding = dvui.Rect.all(6), .corner_radius = dvui.Rect.all(8), .background = true, @@ -280,7 +310,6 @@ fn drawPropertiesPanel(canvas: *Canvas, selected_object: *Document.Object) void .{ .gravity_x = 1.0, .gravity_y = 0.0, - .margin = dvui.Rect{ .x = 8, .y = 8 }, .padding = dvui.Rect.all(8), .corner_radius = dvui.Rect.all(8), .background = true, @@ -290,9 +319,18 @@ fn drawPropertiesPanel(canvas: *Canvas, selected_object: *Document.Object) void ); { dvui.label(@src(), "Properties", .{}, .{}); - for (selected_object.properties.items, 0..) |*prop, i| { - drawPropertyEditor(canvas, selected_object, prop, i); + var scroll = dvui.scrollArea(@src(), .{ + .horizontal = .none, + .vertical = .auto, + }, .{ + .expand = .both, + }); + { + for (selected_object.properties.items, 0..) |*prop, i| { + drawPropertyEditor(canvas, selected_object, prop, i); + } } + scroll.deinit(); } panel.deinit(); }