Разделил главный фрейм UI на отдельные модули: tab_bar, left_panel, right_panel и canvas_view. Это улучшает читаемость и поддерживает принцип единственной ответственности. Также изменил функцию `updateVisibleImageRect`, чтобы она возвращала `bool`, указывающий на необходимость перерисовки.
48 lines
1.4 KiB
Zig
48 lines
1.4 KiB
Zig
// Правая панель: контент документа (холст) или заглушка «Нет документа».
|
|
const std = @import("std");
|
|
const dvui = @import("dvui");
|
|
const WindowContext = @import("../WindowContext.zig");
|
|
const canvas_view = @import("canvas_view.zig");
|
|
|
|
pub fn rightPanel(ctx: *WindowContext) void {
|
|
const fill_color = dvui.Color.black.opacity(0.25);
|
|
var panel = dvui.box(
|
|
@src(),
|
|
.{ .dir = .vertical },
|
|
.{
|
|
.expand = .both,
|
|
.background = true,
|
|
.padding = dvui.Rect.all(5),
|
|
.corner_radius = dvui.Rect.all(24),
|
|
.color_fill = fill_color,
|
|
},
|
|
);
|
|
{
|
|
const active_doc = ctx.activeDocument();
|
|
if (active_doc) |doc| {
|
|
const content_rect_scale = panel.data().contentRectScale();
|
|
canvas_view.canvasView(&doc.canvas, content_rect_scale);
|
|
} else {
|
|
noDocView(ctx);
|
|
}
|
|
}
|
|
panel.deinit();
|
|
}
|
|
|
|
fn noDocView(ctx: *WindowContext) void {
|
|
var center = dvui.box(
|
|
@src(),
|
|
.{ .dir = .vertical },
|
|
.{ .expand = .both, .padding = dvui.Rect.all(20) },
|
|
);
|
|
{
|
|
dvui.label(@src(), "No document open", .{}, .{});
|
|
if (dvui.button(@src(), "New document", .{}, .{})) {
|
|
ctx.addNewDocument() catch |err| {
|
|
std.debug.print("addNewDocument error: {}\n", .{err});
|
|
};
|
|
}
|
|
}
|
|
center.deinit();
|
|
}
|