From ca9454c2fbfa618f1482286e137be85b5f51ae47 Mon Sep 17 00:00:00 2001 From: jjanzen Date: Mon, 20 Jan 2025 22:50:37 -0600 Subject: handle ticks --- src/frontend/ncurses.zig | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) (limited to 'src/frontend') 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 { -- cgit v1.2.3