Первая версия тулбара
This commit is contained in:
36
src/Toolbar.zig
Normal file
36
src/Toolbar.zig
Normal file
@@ -0,0 +1,36 @@
|
||||
//! Структура тулбара инструментов. Жизненный цикл совпадает с Canvas.
|
||||
|
||||
const tool_interface = @import("tool_interface.zig");
|
||||
|
||||
const Toolbar = @This();
|
||||
|
||||
/// Описание одного инструмента для тулбара.
|
||||
pub const ToolDescriptor = struct {
|
||||
name: []const u8,
|
||||
/// Иконка в формате TVG (байты).
|
||||
icon_tvg: []const u8,
|
||||
/// Реализация интерфейса инструмента (своя для каждого инструмента в tools/).
|
||||
implementation: *const tool_interface.Tool,
|
||||
};
|
||||
|
||||
/// Вертикальный тулбар инструментов.
|
||||
tools: []const ToolDescriptor,
|
||||
selected_index: usize,
|
||||
|
||||
pub fn init(tools_list: []const ToolDescriptor) Toolbar {
|
||||
return .{
|
||||
.tools = tools_list,
|
||||
.selected_index = 0,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn deinit(_: *Toolbar) void {}
|
||||
|
||||
pub fn currentDescriptor(self: *const Toolbar) ?*const ToolDescriptor {
|
||||
if (self.tools.len == 0) return null;
|
||||
return &self.tools[self.selected_index];
|
||||
}
|
||||
|
||||
pub fn select(self: *Toolbar, index: usize) void {
|
||||
if (index < self.tools.len) self.selected_index = index;
|
||||
}
|
||||
Reference in New Issue
Block a user