Дерево объектов хорошее
This commit is contained in:
@@ -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| {
|
||||
|
||||
Reference in New Issue
Block a user