main: some minor cleanup

This commit is contained in:
torque 2024-08-10 10:52:57 -07:00
parent 02381539a7
commit 8c6d9431c8
Signed by: torque
SSH Key Fingerprint: SHA256:nCrXefBNo6EbjNSQhv0nXmEg/VuNq3sMF5b8zETw3Tk

View File

@ -3,7 +3,6 @@ const builtin = @import("builtin");
const vaxis = @import("vaxis"); const vaxis = @import("vaxis");
const xev = @import("xev"); const xev = @import("xev");
const Cell = vaxis.Cell;
const networking = @import("./networking.zig"); const networking = @import("./networking.zig");
const rotctl = @import("./rotctl.zig"); const rotctl = @import("./rotctl.zig");
@ -206,6 +205,62 @@ pub const RotInt = struct {
try self.vx.render(self.termbuffer.writer().any()); try self.vx.render(self.termbuffer.writer().any());
try self.termbuffer.flush(); try self.termbuffer.flush();
} }
fn terminalEvent(
self_: ?*RotInt,
loop: *xev.Loop,
watcher: *vaxis.xev.TtyWatcher(RotInt),
event: vaxis.xev.Event,
) xev.CallbackAction {
const self = self_.?;
switch (event) {
.key_press => |key| keyp: {
var mods = key.mods;
mods.caps_lock = false;
mods.num_lock = false;
const scale: f64 = if (std.meta.eql(mods, .{ .shift = true })) 1 else 10;
const delta: AzEl = switch (key.codepoint) {
vaxis.Key.left, vaxis.Key.kp_left => .{ .az = -0.1 * scale, .el = 0 },
vaxis.Key.right, vaxis.Key.kp_right => .{ .az = 0.1 * scale, .el = 0 },
vaxis.Key.up, vaxis.Key.kp_up => .{ .az = 0, .el = 0.1 * scale },
vaxis.Key.down, vaxis.Key.kp_down => .{ .az = 0 * scale, .el = -0.1 * scale },
'l' => {
if (std.meta.eql(mods, .{ .ctrl = true }))
self.vx.queueRefresh();
break :keyp;
},
'c' => {
if (std.meta.eql(mods, .{ .ctrl = true })) {
loop.stop();
return .disarm;
}
break :keyp;
},
'q' => {
if (std.meta.eql(mods, .{})) {
loop.stop();
return .disarm;
}
break :keyp;
},
else => break :keyp,
};
self.offsets.az += delta.az;
self.offsets.el += delta.el;
self.draw() catch {
self.warn("draw failure", .{});
};
},
.winsize => |ws| {
watcher.vx.resize(self.allocator, watcher.tty.anyWriter(), ws) catch
return .disarm;
},
else => {},
}
return .rearm;
}
}; };
pub fn main() !void { pub fn main() !void {
@ -236,7 +291,7 @@ pub fn main() !void {
try app.initInPlace(); try app.initInPlace();
var vx_loop: vaxis.xev.TtyWatcher(RotInt) = undefined; var vx_loop: vaxis.xev.TtyWatcher(RotInt) = undefined;
try vx_loop.init(&tty, &vx, &loop, &app, eventCallback); try vx_loop.init(&tty, &vx, &loop, &app, RotInt.terminalEvent);
try vx.enterAltScreen(tty.anyWriter()); try vx.enterAltScreen(tty.anyWriter());
try vx.queryTerminalSend(tty.anyWriter()); try vx.queryTerminalSend(tty.anyWriter());
@ -247,75 +302,3 @@ pub fn main() !void {
try loop.run(.until_done); try loop.run(.until_done);
} }
fn eventCallback(
self_: ?*RotInt,
loop: *xev.Loop,
watcher: *vaxis.xev.TtyWatcher(RotInt),
event: vaxis.xev.Event,
) xev.CallbackAction {
const self = self_.?;
switch (event) {
.key_press => |key| keyp: {
var mods = key.mods;
mods.caps_lock = false;
mods.num_lock = false;
const scale: f64 = if (std.meta.eql(mods, .{ .shift = true })) 1 else 10;
const delta: AzEl = switch (key.codepoint) {
vaxis.Key.left, vaxis.Key.kp_left => .{ .az = -0.1 * scale, .el = 0 },
vaxis.Key.right, vaxis.Key.kp_right => .{ .az = 0.1 * scale, .el = 0 },
vaxis.Key.up, vaxis.Key.kp_up => .{ .az = 0, .el = 0.1 * scale },
vaxis.Key.down, vaxis.Key.kp_down => .{ .az = 0 * scale, .el = -0.1 * scale },
'l' => {
if (std.meta.eql(mods, .{ .ctrl = true }))
self.vx.queueRefresh();
break :keyp;
},
'c' => {
if (std.meta.eql(mods, .{ .ctrl = true })) {
loop.stop();
return .disarm;
}
break :keyp;
},
'q' => {
if (std.meta.eql(mods, .{})) {
loop.stop();
return .disarm;
}
break :keyp;
},
else => break :keyp,
};
self.offsets.az += delta.az;
self.offsets.el += delta.el;
self.draw() catch {
self.warn("draw failure", .{});
};
},
.winsize => |ws| {
watcher.vx.resize(self.allocator, watcher.tty.anyWriter(), ws) catch
return .disarm;
},
else => {},
}
return .rearm;
}
fn timerCallback(
ud: ?*RotInt,
loop: *xev.Loop,
completion: *xev.Completion,
err: xev.Timer.RunError!void,
) xev.CallbackAction {
_ = err catch @panic("timer error");
var app = ud orelse return .disarm;
app.draw() catch @panic("couldn't draw");
const timer = xev.Timer.init() catch unreachable;
timer.run(loop, completion, 8, RotInt, app, timerCallback);
return .disarm;
}