Дерево объектов хорошее

This commit is contained in:
2026-02-26 15:45:54 +03:00
parent 93f7f3d814
commit 6212d8d6aa
2 changed files with 20 additions and 9 deletions

View File

@@ -31,25 +31,32 @@ fn objectTreeRow(open_doc: *WindowContext.OpenDocument, obj: *Object, depth: u32
const focus_color = dvui.themeGet().focus;
// Визуально строка — это box с подсветкой по hover/selected, а не кнопка.
var row = dvui.box(
@src(),
.{ .dir = .horizontal },
.{
.id_extra = row_id,
.expand = .horizontal,
// Постоянной рамки нет; лёгкая заливка по hover и более яркая по selected.
// .color_fill = if (is_selected) focus_color.opacity(0.35) else null,
.color_fill_hover = focus_color.opacity(0.18),
},
);
{
var hovered: bool = false;
const row_data = row.data();
if (dvui.clicked(row_data, .{
.hovered = &hovered,
})) {
object_callback.* = .{ .select = obj };
var select_row: bool = false;
// Ручная обработка hover/click по строке без пометки события как handled,
// чтобы кнопка удаления могла нормально получать свои события.
for (dvui.events()) |*e| {
switch (e.evt) {
.mouse => |*mouse| {
if (!dvui.eventMatchSimple(e, row_data)) continue;
hovered = true;
if (mouse.action == .press and mouse.button == .left) {
select_row = true;
}
},
else => {},
}
}
const background = is_selected or hovered;
@@ -81,6 +88,10 @@ fn objectTreeRow(open_doc: *WindowContext.OpenDocument, obj: *Object, depth: u32
}
}
content.deinit();
if (select_row) {
object_callback.* = .{ .select = obj };
}
}
row.deinit();
for (obj.children.items) |*child| {