fix(tui): prevent render overload on high mouse report rates
This commit is contained in:
parent
701107253f
commit
771c1dd980
2 changed files with 10 additions and 3 deletions
|
@ -4,6 +4,7 @@ const tp = @import("thespian");
|
||||||
|
|
||||||
const Plane = @import("renderer").Plane;
|
const Plane = @import("renderer").Plane;
|
||||||
|
|
||||||
|
const tui = @import("tui.zig");
|
||||||
pub const Box = @import("Box.zig");
|
pub const Box = @import("Box.zig");
|
||||||
pub const EventHandler = @import("EventHandler.zig");
|
pub const EventHandler = @import("EventHandler.zig");
|
||||||
pub const Theme = @import("theme");
|
pub const Theme = @import("theme");
|
||||||
|
@ -147,7 +148,7 @@ pub fn dynamic_cast(self: Self, comptime T: type) ?*T {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn need_render() void {
|
pub fn need_render() void {
|
||||||
tp.self_pid().send(.{"render"}) catch {};
|
tui.need_render();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn need_reflow() void {
|
pub fn need_reflow() void {
|
||||||
|
|
|
@ -51,6 +51,7 @@ init_timer: ?tp.timeout,
|
||||||
sigwinch_signal: ?tp.signal = null,
|
sigwinch_signal: ?tp.signal = null,
|
||||||
no_sleep: bool = false,
|
no_sleep: bool = false,
|
||||||
final_exit: []const u8 = "normal",
|
final_exit: []const u8 = "normal",
|
||||||
|
render_pending: bool = false,
|
||||||
|
|
||||||
const idle_frames = 0;
|
const idle_frames = 0;
|
||||||
|
|
||||||
|
@ -71,7 +72,6 @@ fn start(args: StartArgs) tp.result {
|
||||||
_ = tp.set_trap(true);
|
_ = tp.set_trap(true);
|
||||||
var self = init(args.a) catch |e| return tp.exit_error(e);
|
var self = init(args.a) catch |e| return tp.exit_error(e);
|
||||||
errdefer self.deinit();
|
errdefer self.deinit();
|
||||||
need_render();
|
|
||||||
tp.receive(&self.receiver);
|
tp.receive(&self.receiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,6 +132,7 @@ fn init(a: Allocator) !*Self {
|
||||||
command.executeName("restore_session", .{}) catch |e| self.logger.err("restore_session", e);
|
command.executeName("restore_session", .{}) catch |e| self.logger.err("restore_session", e);
|
||||||
self.logger.print("session restored", .{});
|
self.logger.print("session restored", .{});
|
||||||
}
|
}
|
||||||
|
need_render();
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,6 +235,7 @@ fn receive_safe(self: *Self, from: tp.pid_ref, m: tp.message) tp.result {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (try m.match(.{"render"})) {
|
if (try m.match(.{"render"})) {
|
||||||
|
self.render_pending = false;
|
||||||
if (!self.frame_clock_running)
|
if (!self.frame_clock_running)
|
||||||
self.render();
|
self.render();
|
||||||
return;
|
return;
|
||||||
|
@ -677,7 +679,11 @@ pub fn get_mode() []const u8 {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn need_render() void {
|
pub fn need_render() void {
|
||||||
|
const self = current();
|
||||||
|
if (!(self.render_pending or self.frame_clock_running)) {
|
||||||
|
self.render_pending = true;
|
||||||
tp.self_pid().send(.{"render"}) catch {};
|
tp.self_pid().send(.{"render"}) catch {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn resize(self: *Self) void {
|
pub fn resize(self: *Self) void {
|
||||||
|
|
Loading…
Add table
Reference in a new issue