main: some minor cleanup
This commit is contained in:
parent
02381539a7
commit
8c6d9431c8
93
src/main.zig
93
src/main.zig
@ -3,7 +3,6 @@ const builtin = @import("builtin");
|
||||
|
||||
const vaxis = @import("vaxis");
|
||||
const xev = @import("xev");
|
||||
const Cell = vaxis.Cell;
|
||||
|
||||
const networking = @import("./networking.zig");
|
||||
const rotctl = @import("./rotctl.zig");
|
||||
@ -206,49 +205,8 @@ pub const RotInt = struct {
|
||||
try self.vx.render(self.termbuffer.writer().any());
|
||||
try self.termbuffer.flush();
|
||||
}
|
||||
};
|
||||
|
||||
pub fn main() !void {
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
defer _ = gpa.deinit();
|
||||
|
||||
const alloc = gpa.allocator();
|
||||
|
||||
var tty = try vaxis.Tty.init();
|
||||
defer tty.deinit();
|
||||
|
||||
var vx = try vaxis.init(alloc, .{});
|
||||
defer vx.deinit(alloc, tty.anyWriter());
|
||||
|
||||
var pool = xev.ThreadPool.init(.{});
|
||||
var loop = try xev.Loop.init(.{
|
||||
.thread_pool = &pool,
|
||||
});
|
||||
defer loop.deinit();
|
||||
|
||||
var app: RotInt = .{
|
||||
.allocator = alloc,
|
||||
.termbuffer = tty.bufferedWriter(),
|
||||
.vx = &vx,
|
||||
.loop = &loop,
|
||||
.poller = try xev.Timer.init(),
|
||||
};
|
||||
try app.initInPlace();
|
||||
|
||||
var vx_loop: vaxis.xev.TtyWatcher(RotInt) = undefined;
|
||||
try vx_loop.init(&tty, &vx, &loop, &app, eventCallback);
|
||||
|
||||
try vx.enterAltScreen(tty.anyWriter());
|
||||
try vx.queryTerminalSend(tty.anyWriter());
|
||||
// Window size appears to be left uninitialized unless we manually set it here. This
|
||||
// seems sketchy to me (tty fd should be nonblocking for the event loop)
|
||||
const size = try vaxis.Tty.getWinsize(tty.fd);
|
||||
vx.resize(alloc, tty.anyWriter(), size) catch @panic("TODO");
|
||||
|
||||
try loop.run(.until_done);
|
||||
}
|
||||
|
||||
fn eventCallback(
|
||||
fn terminalEvent(
|
||||
self_: ?*RotInt,
|
||||
loop: *xev.Loop,
|
||||
watcher: *vaxis.xev.TtyWatcher(RotInt),
|
||||
@ -303,19 +261,44 @@ fn eventCallback(
|
||||
}
|
||||
return .rearm;
|
||||
}
|
||||
};
|
||||
|
||||
fn timerCallback(
|
||||
ud: ?*RotInt,
|
||||
loop: *xev.Loop,
|
||||
completion: *xev.Completion,
|
||||
err: xev.Timer.RunError!void,
|
||||
) xev.CallbackAction {
|
||||
_ = err catch @panic("timer error");
|
||||
pub fn main() !void {
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
defer _ = gpa.deinit();
|
||||
|
||||
var app = ud orelse return .disarm;
|
||||
app.draw() catch @panic("couldn't draw");
|
||||
const alloc = gpa.allocator();
|
||||
|
||||
const timer = xev.Timer.init() catch unreachable;
|
||||
timer.run(loop, completion, 8, RotInt, app, timerCallback);
|
||||
return .disarm;
|
||||
var tty = try vaxis.Tty.init();
|
||||
defer tty.deinit();
|
||||
|
||||
var vx = try vaxis.init(alloc, .{});
|
||||
defer vx.deinit(alloc, tty.anyWriter());
|
||||
|
||||
var pool = xev.ThreadPool.init(.{});
|
||||
var loop = try xev.Loop.init(.{
|
||||
.thread_pool = &pool,
|
||||
});
|
||||
defer loop.deinit();
|
||||
|
||||
var app: RotInt = .{
|
||||
.allocator = alloc,
|
||||
.termbuffer = tty.bufferedWriter(),
|
||||
.vx = &vx,
|
||||
.loop = &loop,
|
||||
.poller = try xev.Timer.init(),
|
||||
};
|
||||
try app.initInPlace();
|
||||
|
||||
var vx_loop: vaxis.xev.TtyWatcher(RotInt) = undefined;
|
||||
try vx_loop.init(&tty, &vx, &loop, &app, RotInt.terminalEvent);
|
||||
|
||||
try vx.enterAltScreen(tty.anyWriter());
|
||||
try vx.queryTerminalSend(tty.anyWriter());
|
||||
// Window size appears to be left uninitialized unless we manually set it here. This
|
||||
// seems sketchy to me (tty fd should be nonblocking for the event loop)
|
||||
const size = try vaxis.Tty.getWinsize(tty.fd);
|
||||
vx.resize(alloc, tty.anyWriter(), size) catch @panic("TODO");
|
||||
|
||||
try loop.run(.until_done);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user