screen: refactor arg order and fix some math
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
This commit is contained in:
parent
bef5276340
commit
811fbdd2cb
4 changed files with 16 additions and 10 deletions
|
@ -33,16 +33,16 @@ pub fn main() !void {
|
|||
}
|
||||
},
|
||||
.winsize => |ws| {
|
||||
try vx.resize(alloc, ws.rows, ws.cols);
|
||||
try vx.resize(alloc, ws);
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
|
||||
const win = vx.window();
|
||||
const child = win.initChild(20, 20, .expand, .expand);
|
||||
const child = win.initChild(win.width / 2 - msg.len / 2, win.height / 2, .expand, .expand);
|
||||
for (msg, 0..) |_, i| {
|
||||
const cell: Cell = .{ .char = .{ .grapheme = msg[i .. i + 1] } };
|
||||
child.writeCell(cell, i, 0);
|
||||
child.writeCell(i, 0, cell);
|
||||
}
|
||||
try vx.render();
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ const assert = std.debug.assert;
|
|||
|
||||
const Cell = @import("cell.zig").Cell;
|
||||
|
||||
const log = std.log.scoped(.screen);
|
||||
|
||||
const Screen = @This();
|
||||
|
||||
width: usize,
|
||||
|
@ -22,6 +24,7 @@ pub fn deinit(self: *Screen, alloc: std.mem.Allocator) void {
|
|||
}
|
||||
|
||||
pub fn resize(self: *Screen, alloc: std.mem.Allocator, w: usize, h: usize) !void {
|
||||
log.debug("resizing screen: width={d} height={d}", .{ w, h });
|
||||
alloc.free(self.buf);
|
||||
self.buf = try alloc.alloc(Cell, w * h);
|
||||
for (self.buf, 0..) |_, i| {
|
||||
|
@ -32,7 +35,7 @@ pub fn resize(self: *Screen, alloc: std.mem.Allocator, w: usize, h: usize) !void
|
|||
}
|
||||
|
||||
/// writes a cell to a location. 0 indexed
|
||||
pub fn writeCell(self: *Screen, cell: Cell, row: usize, col: usize) void {
|
||||
pub fn writeCell(self: *Screen, col: usize, row: usize, cell: Cell) void {
|
||||
if (self.width < col) {
|
||||
// column out of bounds
|
||||
return;
|
||||
|
@ -41,7 +44,7 @@ pub fn writeCell(self: *Screen, cell: Cell, row: usize, col: usize) void {
|
|||
// height out of bounds
|
||||
return;
|
||||
}
|
||||
const i = (col * self.width) + row;
|
||||
const i = (row * self.width) + col;
|
||||
assert(i < self.buf.len);
|
||||
self.buf[i] = cell;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ const std = @import("std");
|
|||
const Screen = @import("Screen.zig");
|
||||
const Cell = @import("cell.zig").Cell;
|
||||
|
||||
const log = std.log.scoped(.window);
|
||||
|
||||
const Window = @This();
|
||||
|
||||
pub const Size = union(enum) {
|
||||
|
@ -59,9 +61,10 @@ pub fn initChild(
|
|||
}
|
||||
|
||||
/// writes a cell to the location in the window
|
||||
pub fn writeCell(self: Window, cell: Cell, row: usize, col: usize) void {
|
||||
pub fn writeCell(self: Window, col: usize, row: usize, cell: Cell) void {
|
||||
if (self.height == 0 or self.width == 0) return;
|
||||
if (self.height < row or self.width < col) return;
|
||||
self.screen.writeCell(cell, row + self.y_off, col + self.x_off);
|
||||
self.screen.writeCell(col + self.x_off, row + self.y_off, cell);
|
||||
}
|
||||
|
||||
test "Window size set" {
|
||||
|
|
|
@ -3,6 +3,7 @@ const std = @import("std");
|
|||
const Queue = @import("queue.zig").Queue;
|
||||
const ctlseqs = @import("ctlseqs.zig");
|
||||
const Tty = @import("Tty.zig");
|
||||
const Winsize = Tty.Winsize;
|
||||
const Key = @import("Key.zig");
|
||||
const Screen = @import("Screen.zig");
|
||||
const Window = @import("Window.zig");
|
||||
|
@ -91,8 +92,8 @@ pub fn Vaxis(comptime T: type) type {
|
|||
/// resize allocates a slice of cellsequal to the number of cells
|
||||
/// required to display the screen (ie width x height). Any previous screen is
|
||||
/// freed when resizing
|
||||
pub fn resize(self: *Self, alloc: std.mem.Allocator, w: usize, h: usize) !void {
|
||||
try self.screen.resize(alloc, w, h);
|
||||
pub fn resize(self: *Self, alloc: std.mem.Allocator, winsize: Winsize) !void {
|
||||
try self.screen.resize(alloc, winsize.cols, winsize.rows);
|
||||
}
|
||||
|
||||
/// returns a Window comprising of the entire terminal screen
|
||||
|
@ -124,7 +125,6 @@ pub fn Vaxis(comptime T: type) type {
|
|||
}
|
||||
|
||||
pub fn render(self: *Self) !void {
|
||||
log.debug("HERE", .{});
|
||||
var tty = self.tty orelse return;
|
||||
|
||||
_ = try tty.write(ctlseqs.home);
|
||||
|
|
Loading…
Reference in a new issue