diff --git a/src/renderer/vaxis/renderer.zig b/src/renderer/vaxis/renderer.zig index b4dc97e..f2dbf9d 100644 --- a/src/renderer/vaxis/renderer.zig +++ b/src/renderer/vaxis/renderer.zig @@ -94,7 +94,7 @@ pub fn run(self: *Self) !void { panic_cleanup_tty = &self.tty; if (!self.no_alternate) try self.vx.enterAltScreen(self.tty.anyWriter()); - try self.resize(.{ .rows = 0, .cols = 0, .x_pixel = 0, .y_pixel = 0 }); // dummy resize to fully init vaxis + try self.resize(.{ .rows = 25, .cols = 80, .x_pixel = 0, .y_pixel = 0 }); // dummy resize to fully init vaxis try self.query_resize(); try self.vx.setBracketedPaste(self.tty.anyWriter(), true); try self.vx.queryTerminalSend(self.tty.anyWriter()); @@ -114,9 +114,10 @@ pub fn query_resize(self: *Self) !void { try self.resize(try vaxis.Tty.getWinsize(self.input_fd_blocking())); } -pub fn resize(self: *Self, ws: vaxis.Winsize) !void { +fn resize(self: *Self, ws: vaxis.Winsize) !void { try self.vx.resize(self.a, self.tty.anyWriter(), ws); self.vx.queueRefresh(); + if (self.dispatch_event) |f| f(self.handler_ctx, try self.fmtmsg(.{"resize"})); } pub fn stop(self: *Self) void { diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index a28e440..0b4be42 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -64,7 +64,6 @@ pub fn create(a: std.mem.Allocator, n: Plane) !Widget { self.widgets_widget = widgets.widget(); try widgets.add(try Widget.empty(a, n, .dynamic)); self.statusbar = try widgets.addP(try @import("status/statusbar.zig").create(a, w)); - self.resize(); if (tp.env.get().is("show-input")) self.toggle_inputview_async(); if (tp.env.get().is("show-log")) @@ -101,10 +100,6 @@ pub fn render(self: *Self, theme: *const Widget.Theme) bool { return widgets_more or views_more; } -pub fn resize(self: *Self) void { - self.handle_resize(Box.from(self.plane)); -} - pub fn handle_resize(self: *Self, pos: Box) void { self.widgets.resize(pos); self.floating_views.resize(pos); @@ -135,7 +130,7 @@ fn toggle_panel_view(self: *Self, view: anytype, enable_only: bool) error{Exit}! panels.add(view.create(self.a, self.widgets.plane) catch |e| return tp.exit_error(e)) catch |e| return tp.exit_error(e); self.panels = panels; } - self.resize(); + tui.current().resize(); return enabled; } @@ -144,7 +139,7 @@ fn close_all_panel_views(self: *Self) void { self.widgets.remove(panels.widget()); self.panels = null; } - self.resize(); + tui.current().resize(); } fn toggle_view(self: *Self, view: anytype) tp.result { @@ -153,7 +148,7 @@ fn toggle_view(self: *Self, view: anytype) tp.result { } else { self.widgets.add(view.create(self.a, self.plane) catch |e| return tp.exit_error(e)) catch |e| return tp.exit_error(e); } - self.resize(); + tui.current().resize(); } const cmds = struct { @@ -411,7 +406,7 @@ fn create_editor(self: *Self) tp.result { self.editor = if (editor.dynamic_cast(ed.EditorWidget)) |p| &p.editor else null; } else @panic("mainview editor not found"); self.widgets.replace(0, editor_widget); - self.resize(); + tui.current().resize(); } fn toggle_logview_async(_: *Self) void { @@ -435,7 +430,7 @@ fn create_home(self: *Self) tp.result { var home_widget = home.create(self.a, Widget.to(self)) catch |e| return tp.exit_error(e); errdefer home_widget.deinit(self.a); self.widgets.replace(0, home_widget); - self.resize(); + tui.current().resize(); } fn write_restore_info(self: *Self) void { diff --git a/src/tui/tui.zig b/src/tui/tui.zig index eec3671..3912b24 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -125,6 +125,7 @@ fn init(a: Allocator) !*Self { if (builtin.os.tag != .windows) try self.listen_sigwinch(); self.mainview = try mainview.create(a, n); + self.resize(); try self.rdr.render(); try self.save_config(); if (tp.env.get().is("restore-session")) { @@ -218,14 +219,11 @@ fn receive_safe(self: *Self, from: tp.pid_ref, m: tp.message) tp.result { if (try m.match(.{"sigwinch"})) { try self.listen_sigwinch(); self.rdr.query_resize() catch |e| return self.logger.err("query_resize", e); - self.mainview.resize(Widget.Box.from(self.rdr.stdplane())); - need_render(); return; }; if (try m.match(.{"resize"})) { - self.mainview.resize(Widget.Box.from(self.rdr.stdplane())); - need_render(); + self.resize(); return; } @@ -682,6 +680,11 @@ pub fn need_render() void { tp.self_pid().send(.{"render"}) catch {}; } +pub fn resize(self: *Self) void { + self.mainview.resize(Widget.Box.from(self.rdr.stdplane())); + need_render(); +} + pub fn get_theme_by_name(name: []const u8) ?Widget.Theme { for (Widget.themes) |theme| { if (std.mem.eql(u8, theme.name, name))