fix name
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
This commit is contained in:
parent
5c9ce93a63
commit
a355d7519a
4 changed files with 120 additions and 3 deletions
|
@ -1,5 +1,5 @@
|
|||
.{
|
||||
.name = "salmon",
|
||||
.name = "vaxis",
|
||||
// This is a [Semantic Version](https://semver.org/).
|
||||
// In a future version of Zig it will be used for package deduplication.
|
||||
.version = "0.0.0",
|
||||
|
|
|
@ -76,8 +76,9 @@ test "image" {
|
|||
.y_pixel = 1,
|
||||
},
|
||||
.{ .path = "vaxis.png" },
|
||||
1,
|
||||
);
|
||||
defer img.deinit();
|
||||
try testing.expectEqual(1, img.cell_width);
|
||||
try testing.expectEqual(1, img.cell_height);
|
||||
try testing.expectEqual(200, img.cell_width);
|
||||
try testing.expectEqual(197, img.cell_height);
|
||||
}
|
||||
|
|
74
src/image/Kitty.zig
Normal file
74
src/image/Kitty.zig
Normal file
|
@ -0,0 +1,74 @@
|
|||
const std = @import("std");
|
||||
const math = std.math;
|
||||
const testing = std.testing;
|
||||
const zigimg = @import("zigimg");
|
||||
const png = zigimg.png;
|
||||
|
||||
const Window = @import("../Window.zig");
|
||||
const Winsize = @import("../Tty.zig").Winsize;
|
||||
|
||||
const Kitty = @This();
|
||||
|
||||
/// the decoded image
|
||||
img: zigimg.Image,
|
||||
|
||||
/// unique identifier for this image
|
||||
id: u32,
|
||||
|
||||
/// width of the image, in cells
|
||||
cell_width: usize,
|
||||
/// height of the image, in cells
|
||||
cell_height: usize,
|
||||
|
||||
/// initialize a new image
|
||||
pub fn init(
|
||||
alloc: std.mem.Allocator,
|
||||
winsize: Winsize,
|
||||
src: []const u8,
|
||||
id: u32,
|
||||
) !Kitty {
|
||||
const img = switch (src) {
|
||||
.path => |path| try zigimg.Image.fromFilePath(alloc, path),
|
||||
.mem => |bytes| try zigimg.Image.fromMemory(alloc, bytes),
|
||||
};
|
||||
// cell geometry
|
||||
const pix_per_col = try math.divCeil(usize, winsize.x_pixel, winsize.cols);
|
||||
const pix_per_row = try math.divCeil(usize, winsize.y_pixel, winsize.rows);
|
||||
|
||||
const cell_width = math.divCeil(usize, img.width, pix_per_col) catch 0;
|
||||
const cell_height = math.divCeil(usize, img.height, pix_per_row) catch 0;
|
||||
|
||||
return Image{
|
||||
.img = img,
|
||||
.cell_width = cell_width,
|
||||
.cell_height = cell_height,
|
||||
.id = id,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn deinit(self: *Image) void {
|
||||
self.img.deinit();
|
||||
}
|
||||
|
||||
pub fn draw(self: *Image, win: Window, placement_id: u32) !void {
|
||||
try win.writeImage(win.x_off, win.y_off, self, placement_id);
|
||||
}
|
||||
|
||||
test "image" {
|
||||
const alloc = testing.allocator;
|
||||
var img = try init(
|
||||
alloc,
|
||||
.{
|
||||
.rows = 1,
|
||||
.cols = 1,
|
||||
.x_pixel = 1,
|
||||
.y_pixel = 1,
|
||||
},
|
||||
.{ .path = "vaxis.png" },
|
||||
0,
|
||||
.kitty,
|
||||
);
|
||||
defer img.deinit();
|
||||
try testing.expectEqual(200, img.cell_width);
|
||||
try testing.expectEqual(197, img.cell_height);
|
||||
}
|
42
src/image/image.zig
Normal file
42
src/image/image.zig
Normal file
|
@ -0,0 +1,42 @@
|
|||
const std = @import("std");
|
||||
const math = std.math;
|
||||
const testing = std.testing;
|
||||
const zigimg = @import("zigimg");
|
||||
|
||||
const Winsize = @import("../Tty.zig").Winsize;
|
||||
const Window = @import("../Window.zig");
|
||||
|
||||
const Kitty = @import("Kitty.zig");
|
||||
|
||||
pub const Image = union(enum) {
|
||||
kitty: Kitty,
|
||||
|
||||
pub const Protocol = enum {
|
||||
kitty,
|
||||
// TODO: sixel, full block, half block, quad block
|
||||
};
|
||||
|
||||
/// initialize a new image
|
||||
pub fn init(
|
||||
alloc: std.mem.Allocator,
|
||||
winsize: Winsize,
|
||||
src: []const u8,
|
||||
id: u32,
|
||||
protocol: Protocol,
|
||||
) !Image {
|
||||
switch (protocol) {
|
||||
.kitty => {
|
||||
const img = try Kitty.init(alloc, winsize, src, id);
|
||||
return .{ .kitty = img };
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub fn deinit(self: *Image) void {
|
||||
self.img.deinit();
|
||||
}
|
||||
|
||||
pub fn draw(self: *Image, win: Window, placement_id: u32) !void {
|
||||
try win.writeImage(win.x_off, win.y_off, self, placement_id);
|
||||
}
|
||||
};
|
Loading…
Reference in a new issue