From f7cd61d6195e52d2b23c7a6a4d7d2858fcece52d Mon Sep 17 00:00:00 2001 From: Yves Biener Date: Sun, 8 Dec 2024 21:38:19 +0100 Subject: [PATCH] mod: reduce the amount of unnecessary re-renderings --- src/widget/List.zig | 22 ++++++++++++++++++---- src/widget/RawText.zig | 22 ++++++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/widget/List.zig b/src/widget/List.zig index bcbaf7a..84388f9 100644 --- a/src/widget/List.zig +++ b/src/widget/List.zig @@ -64,18 +64,32 @@ pub fn Widget(comptime Event: type, comptime Renderer: type) type { var require_render = true; if (key.matches(.{ .cp = 'g' })) { // top - this.idx = 0; + if (this.idx != 0) { + this.idx = 0; + } else { + require_render = false; + } } else if (key.matches(.{ .cp = 'G' })) { // bottom - this.idx = this.contents.items.len -| 1; + if (this.idx < this.contents.items.len -| 1) { + this.idx = this.contents.items.len -| 1; + } else { + require_render = false; + } } else if (key.matches(.{ .cp = 'j' })) { // down if (this.idx < this.contents.items.len -| 1) { - this.idx +|= 1; + this.idx += 1; + } else { + require_render = false; } } else if (key.matches(.{ .cp = 'k' })) { // up - this.idx -|= 1; + if (this.idx > 0) { + this.idx -= 1; + } else { + require_render = false; + } } else { require_render = false; } diff --git a/src/widget/RawText.zig b/src/widget/RawText.zig index cf9cf29..c51ca97 100644 --- a/src/widget/RawText.zig +++ b/src/widget/RawText.zig @@ -55,18 +55,32 @@ pub fn Widget(comptime Event: type, comptime Renderer: type) type { .key => |key| { if (key.matches(.{ .cp = 'g' })) { // top - this.line = 0; + if (this.line != 0) { + this.line = 0; + } else { + require_render = false; + } } else if (key.matches(.{ .cp = 'G' })) { // bottom - this.line = this.line_index.items.len -| 1 -| this.size.rows; + if (this.line < this.line_index.items.len -| 1 -| this.size.rows) { + this.line = this.line_index.items.len -| 1 -| this.size.rows; + } else { + require_render = false; + } } else if (key.matches(.{ .cp = 'j' })) { // down if (this.line < this.line_index.items.len -| 1 -| this.size.rows) { - this.line +|= 1; + this.line += 1; + } else { + require_render = false; } } else if (key.matches(.{ .cp = 'k' })) { // up - this.line -|= 1; + if (this.line > 0) { + this.line -= 1; + } else { + require_render = false; + } } else { require_render = false; }