mod(renderer): dynamic clear of size for widgets to improve render performance
All checks were successful
Zig Project Action / Lint, Spell-check and test zig project (push) Successful in 35s

This commit is contained in:
2024-11-13 15:07:26 +01:00
parent 80459a51b1
commit 270ca9b1be
4 changed files with 39 additions and 14 deletions

View File

@@ -22,6 +22,7 @@ pub fn Layout(comptime Event: type, comptime Element: type, comptime Renderer: t
const Events = std.ArrayList(Event);
return struct {
size: terminal.Size = undefined,
require_render: bool = true,
element: Element = undefined,
events: Events = undefined,
config: Config = undefined,
@@ -68,6 +69,7 @@ pub fn Layout(comptime Event: type, comptime Element: type, comptime Renderer: t
switch (event) {
.resize => |size| {
this.size = size;
this.require_render = true;
log.debug("Event .resize: {{ .anchor = {{ .col = {d}, .row = {d} }}, .cols = {d}, .rows = {d} }}", .{
size.anchor.col,
size.anchor.row,
@@ -167,8 +169,11 @@ pub fn Layout(comptime Event: type, comptime Element: type, comptime Renderer: t
}
pub fn render(this: *@This(), renderer: *Renderer) !void {
try renderer.clear(this.size);
try this.renderFrame(renderer);
if (this.require_render) {
try renderer.clear(this.size);
try this.renderFrame(renderer);
this.require_render = false;
}
switch ((&this.element).*) {
.layout => |*layout| {