Files
zterm/src/widget/Spacer.zig
Yves Biener 270ca9b1be
All checks were successful
Zig Project Action / Lint, Spell-check and test zig project (push) Successful in 35s
mod(renderer): dynamic clear of size for widgets to improve render performance
2024-11-13 15:07:26 +01:00

44 lines
1.2 KiB
Zig

const std = @import("std");
const terminal = @import("../terminal.zig");
const isTaggedUnion = @import("../event.zig").isTaggedUnion;
const Error = @import("../event.zig").Error;
const log = std.log.scoped(.widget_spacer);
pub fn Widget(comptime Event: type, comptime Renderer: type) type {
if (!isTaggedUnion(Event)) {
@compileError("Provided user event `Event` for `Layout(comptime Event: type)` is not of type `union(enum)`.");
}
return struct {
size: terminal.Size = undefined,
size_changed: bool = false,
pub fn init() @This() {
return .{};
}
pub fn deinit(this: *@This()) void {
this.* = undefined;
}
pub fn handle(this: *@This(), event: Event) ?Event {
switch (event) {
.resize => |size| {
this.size = size;
this.size_changed = true;
},
else => {},
}
return null;
}
pub fn render(this: *@This(), renderer: *Renderer) !void {
if (this.size_changed) {
try renderer.clear(this.size);
this.size_changed = false;
}
}
};
}