aboutsummaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/ncurses.zig39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/frontend/ncurses.zig b/src/frontend/ncurses.zig
index a8c6f71..e0421c4 100644
--- a/src/frontend/ncurses.zig
+++ b/src/frontend/ncurses.zig
@@ -33,7 +33,6 @@ pub const Display = struct {
inst: ?*ncurses.WINDOW,
msgs: ?*ncurses.WINDOW,
stat: ?*ncurses.WINDOW,
- allocator: std.mem.Allocator,
fn validTermSize() bool {
return ncurses.LINES >= MIN_HEIGHT and
@@ -104,6 +103,8 @@ pub const Display = struct {
}
pub fn displayMessage(self: *Display, comptime fmt: []const u8, args: anytype) void {
+ if (self.msgs == null) return;
+
for (1..MESSAGE_PANEL_WIDTH - 1) |i| {
const i_32 = @as(i32, @intCast(i));
_ = ncurses.mvwaddch(self.msgs, 1, i_32, ' ');
@@ -193,11 +194,6 @@ pub const Display = struct {
return error.CursesInitFail;
}
- if (!validTermSize()) {
- _ = ncurses.endwin();
- return error.InvalidTermSize;
- }
-
if (!colorSupport()) {
_ = ncurses.endwin();
return error.NoColorSupport;
@@ -208,30 +204,45 @@ pub const Display = struct {
_ = ncurses.noecho();
_ = ncurses.curs_set(0);
_ = ncurses.start_color();
+ _ = ncurses.timeout(0);
_ = ncurses.init_pair(1, ncurses.COLOR_WHITE, ncurses.COLOR_BLACK);
_ = ncurses.init_pair(2, ncurses.COLOR_BLACK, ncurses.COLOR_RED);
_ = ncurses.wattron(ncurses.stdscr, ncurses.COLOR_PAIR(1));
_ = ncurses.refresh();
- var d = Display{
- .inst = createInstructionPanel(),
- .msgs = createMessagePanel(),
- .stat = createStatisticsPanel(),
- .main = createMainPanel(),
- .allocator = undefined,
- };
+ var d: Display = undefined;
- d.displayInstructions();
+ if (!validTermSize()) {
+ _ = ncurses.mvprintw(0, 0, "Terminal must be at least %dx%d", @as(i32, @intCast(MIN_WIDTH)), @as(i32, @intCast(MIN_HEIGHT)));
+ d = Display{
+ .inst = null,
+ .msgs = null,
+ .stat = null,
+ .main = null,
+ };
+ } else {
+ d = Display{
+ .inst = createInstructionPanel(),
+ .msgs = createMessagePanel(),
+ .stat = createStatisticsPanel(),
+ .main = createMainPanel(),
+ };
+ d.displayInstructions();
+ }
return d;
}
fn deleteWindows(self: *Display) void {
_ = ncurses.delwin(self.main);
+ self.main = null;
_ = ncurses.delwin(self.inst);
+ self.inst = null;
_ = ncurses.delwin(self.msgs);
+ self.msgs = null;
_ = ncurses.delwin(self.stat);
+ self.stat = null;
}
pub fn deinit(self: *Display) void {