Skip to content

Commit

Permalink
Implement draw_octant() and yQuads() for U16.0
Browse files Browse the repository at this point in the history
  • Loading branch information
dankamongmen committed Jan 30, 2025
1 parent a62b26c commit ea1299d
Showing 1 changed file with 269 additions and 0 deletions.
269 changes: 269 additions & 0 deletions src/font/sprite/Box.zig
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,241 @@ const z2d = @import("z2d");
const font = @import("../main.zig");
const Sprite = @import("../sprite.zig").Sprite;

const OctantMin = 0x1cd00;
const OctantMax = 0x1cde5;
const Octants = [OctantMax - OctantMin + 1][8]bool{
[_]bool{ false, false, true, false, false, false, false, false },
[_]bool{ false, true, true, false, false, false, false, false },
[_]bool{ true, true, true, false, false, false, false, false },
[_]bool{ false, false, false, true, false, false, false, false },
[_]bool{ true, false, false, true, false, false, false, false },
[_]bool{ true, true, false, true, false, false, false, false },
[_]bool{ false, false, true, true, false, false, false, false },
[_]bool{ true, false, true, true, false, false, false, false },
[_]bool{ false, true, true, true, false, false, false, false },
[_]bool{ false, false, false, false, true, false, false, false },
[_]bool{ true, false, false, false, true, false, false, false },
[_]bool{ false, true, false, false, true, false, false, false },
[_]bool{ true, true, false, false, true, false, false, false },
[_]bool{ true, false, true, false, true, false, false, false },
[_]bool{ false, true, true, false, true, false, false, false },
[_]bool{ true, true, true, false, true, false, false, false },
[_]bool{ false, false, false, true, true, false, false, false },
[_]bool{ true, false, false, true, true, false, false, false },
[_]bool{ false, true, false, true, true, false, false, false },
[_]bool{ true, true, false, true, true, false, false, false },
[_]bool{ false, false, true, true, true, false, false, false },
[_]bool{ true, false, true, true, true, false, false, false },
[_]bool{ false, true, true, true, true, false, false, false },
[_]bool{ true, true, true, true, true, false, false, false },
[_]bool{ false, false, false, false, false, true, false, false },
[_]bool{ true, false, false, false, false, true, false, false },
[_]bool{ false, true, false, false, false, true, false, false },
[_]bool{ true, true, false, false, false, true, false, false },
[_]bool{ false, false, true, false, false, true, false, false },
[_]bool{ true, false, true, false, false, true, false, false },
[_]bool{ false, true, true, false, false, true, false, false },
[_]bool{ true, true, true, false, false, true, false, false },
[_]bool{ true, false, false, true, false, true, false, false },
[_]bool{ false, true, false, true, false, true, false, false },
[_]bool{ true, true, false, true, false, true, false, false },
[_]bool{ false, false, true, true, false, true, false, false },
[_]bool{ true, false, true, true, false, true, false, false },
[_]bool{ false, true, true, true, false, true, false, false },
[_]bool{ true, true, true, true, false, true, false, false },
[_]bool{ false, false, false, false, true, true, false, false },
[_]bool{ true, false, false, false, true, true, false, false },
[_]bool{ false, true, false, false, true, true, false, false },
[_]bool{ true, true, false, false, true, true, false, false },
[_]bool{ false, false, true, false, true, true, false, false },
[_]bool{ true, false, true, false, true, true, false, false },
[_]bool{ false, true, true, false, true, true, false, false },
[_]bool{ true, true, true, false, true, true, false, false },
[_]bool{ false, false, false, true, true, true, false, false },
[_]bool{ true, false, false, true, true, true, false, false },
[_]bool{ false, true, false, true, true, true, false, false },
[_]bool{ true, true, false, true, true, true, false, false },
[_]bool{ false, false, true, true, true, true, false, false },
[_]bool{ true, false, true, true, true, true, false, false },
[_]bool{ false, true, true, true, true, true, false, false },
[_]bool{ true, false, false, false, false, false, true, false },
[_]bool{ false, true, false, false, false, false, true, false },
[_]bool{ true, true, false, false, false, false, true, false },
[_]bool{ false, false, true, false, false, false, true, false },
[_]bool{ true, false, true, false, false, false, true, false },
[_]bool{ false, true, true, false, false, false, true, false },
[_]bool{ true, true, true, false, false, false, true, false },
[_]bool{ false, false, false, true, false, false, true, false },
[_]bool{ true, false, false, true, false, false, true, false },
[_]bool{ false, true, false, true, false, false, true, false },
[_]bool{ true, true, false, true, false, false, true, false },
[_]bool{ false, false, true, true, false, false, true, false },
[_]bool{ true, false, true, true, false, false, true, false },
[_]bool{ false, true, true, true, false, false, true, false },
[_]bool{ true, true, true, true, false, false, true, false },
[_]bool{ true, false, false, false, true, false, true, false },
[_]bool{ false, true, false, false, true, false, true, false },
[_]bool{ true, true, false, false, true, false, true, false },
[_]bool{ false, false, true, false, true, false, true, false },
[_]bool{ false, true, true, false, true, false, true, false },
[_]bool{ true, true, true, false, true, false, true, false },
[_]bool{ false, false, false, true, true, false, true, false },
[_]bool{ true, false, false, true, true, false, true, false },
[_]bool{ true, true, false, true, true, false, true, false },
[_]bool{ false, false, true, true, true, false, true, false },
[_]bool{ true, false, true, true, true, false, true, false },
[_]bool{ false, true, true, true, true, false, true, false },
[_]bool{ false, false, false, false, false, true, true, false },
[_]bool{ true, false, false, false, false, true, true, false },
[_]bool{ false, true, false, false, false, true, true, false },
[_]bool{ true, true, false, false, false, true, true, false },
[_]bool{ false, false, true, false, false, true, true, false },
[_]bool{ true, false, true, false, false, true, true, false },
[_]bool{ false, true, true, false, false, true, true, false },
[_]bool{ true, true, true, false, false, true, true, false },
[_]bool{ false, false, false, true, false, true, true, false },
[_]bool{ true, false, false, true, false, true, true, false },
[_]bool{ false, true, false, true, false, true, true, false },
[_]bool{ true, true, false, true, false, true, true, false },
[_]bool{ false, false, true, true, false, true, true, false },
[_]bool{ true, false, true, true, false, true, true, false },
[_]bool{ false, true, true, true, false, true, true, false },
[_]bool{ true, true, true, true, false, true, true, false },
[_]bool{ false, false, false, false, true, true, true, false },
[_]bool{ true, false, false, false, true, true, true, false },
[_]bool{ false, true, false, false, true, true, true, false },
[_]bool{ true, true, false, false, true, true, true, false },
[_]bool{ false, false, true, false, true, true, true, false },
[_]bool{ true, false, true, false, true, true, true, false },
[_]bool{ false, true, true, false, true, true, true, false },
[_]bool{ true, true, true, false, true, true, true, false },
[_]bool{ false, false, false, true, true, true, true, false },
[_]bool{ true, false, false, true, true, true, true, false },
[_]bool{ false, true, false, true, true, true, true, false },
[_]bool{ true, true, false, true, true, true, true, false },
[_]bool{ false, false, true, true, true, true, true, false },
[_]bool{ true, false, true, true, true, true, true, false },
[_]bool{ false, true, true, true, true, true, true, false },
[_]bool{ true, true, true, true, true, true, true, false },
[_]bool{ true, false, false, false, false, false, false, true },
[_]bool{ false, true, false, false, false, false, false, true },
[_]bool{ true, true, false, false, false, false, false, true },
[_]bool{ false, false, true, false, false, false, false, true },
[_]bool{ true, false, true, false, false, false, false, true },
[_]bool{ false, true, true, false, false, false, false, true },
[_]bool{ true, true, true, false, false, false, false, true },
[_]bool{ false, false, false, true, false, false, false, true },
[_]bool{ true, false, false, true, false, false, false, true },
[_]bool{ false, true, false, true, false, false, false, true },
[_]bool{ true, true, false, true, false, false, false, true },
[_]bool{ false, false, true, true, false, false, false, true },
[_]bool{ true, false, true, true, false, false, false, true },
[_]bool{ false, true, true, true, false, false, false, true },
[_]bool{ true, true, true, true, false, false, false, true },
[_]bool{ false, false, false, false, true, false, false, true },
[_]bool{ true, false, false, false, true, false, false, true },
[_]bool{ false, true, false, false, true, false, false, true },
[_]bool{ true, true, false, false, true, false, false, true },
[_]bool{ false, false, true, false, true, false, false, true },
[_]bool{ true, false, true, false, true, false, false, true },
[_]bool{ false, true, true, false, true, false, false, true },
[_]bool{ true, true, true, false, true, false, false, true },
[_]bool{ false, false, false, true, true, false, false, true },
[_]bool{ true, false, false, true, true, false, false, true },
[_]bool{ false, true, false, true, true, false, false, true },
[_]bool{ true, true, false, true, true, false, false, true },
[_]bool{ false, false, true, true, true, false, false, true },
[_]bool{ true, false, true, true, true, false, false, true },
[_]bool{ false, true, true, true, true, false, false, true },
[_]bool{ true, true, true, true, true, false, false, true },
[_]bool{ true, false, false, false, false, true, false, true },
[_]bool{ false, true, false, false, false, true, false, true },
[_]bool{ true, true, false, false, false, true, false, true },
[_]bool{ false, false, true, false, false, true, false, true },
[_]bool{ false, true, true, false, false, true, false, true },
[_]bool{ true, true, true, false, false, true, false, true },
[_]bool{ false, false, false, true, false, true, false, true },
[_]bool{ true, false, false, true, false, true, false, true },
[_]bool{ true, true, false, true, false, true, false, true },
[_]bool{ false, false, true, true, false, true, false, true },
[_]bool{ true, false, true, true, false, true, false, true },
[_]bool{ false, true, true, true, false, true, false, true },
[_]bool{ false, false, false, false, true, true, false, true },
[_]bool{ true, false, false, false, true, true, false, true },
[_]bool{ false, true, false, false, true, true, false, true },
[_]bool{ true, true, false, false, true, true, false, true },
[_]bool{ false, false, true, false, true, true, false, true },
[_]bool{ true, false, true, false, true, true, false, true },
[_]bool{ false, true, true, false, true, true, false, true },
[_]bool{ true, true, true, false, true, true, false, true },
[_]bool{ false, false, false, true, true, true, false, true },
[_]bool{ true, false, false, true, true, true, false, true },
[_]bool{ false, true, false, true, true, true, false, true },
[_]bool{ true, true, false, true, true, true, false, true },
[_]bool{ false, false, true, true, true, true, false, true },
[_]bool{ true, false, true, true, true, true, false, true },
[_]bool{ false, true, true, true, true, true, false, true },
[_]bool{ true, true, true, true, true, true, false, true },
[_]bool{ true, false, false, false, false, false, true, true },
[_]bool{ false, true, false, false, false, false, true, true },
[_]bool{ true, true, false, false, false, false, true, true },
[_]bool{ false, false, true, false, false, false, true, true },
[_]bool{ true, false, true, false, false, false, true, true },
[_]bool{ false, true, true, false, false, false, true, true },
[_]bool{ true, true, true, false, false, false, true, true },
[_]bool{ false, false, false, true, false, false, true, true },
[_]bool{ true, false, false, true, false, false, true, true },
[_]bool{ false, true, false, true, false, false, true, true },
[_]bool{ true, true, false, true, false, false, true, true },
[_]bool{ false, false, true, true, false, false, true, true },
[_]bool{ true, false, true, true, false, false, true, true },
[_]bool{ false, true, true, true, false, false, true, true },
[_]bool{ true, true, true, true, false, false, true, true },
[_]bool{ false, false, false, false, true, false, true, true },
[_]bool{ true, false, false, false, true, false, true, true },
[_]bool{ false, true, false, false, true, false, true, true },
[_]bool{ true, true, false, false, true, false, true, true },
[_]bool{ false, false, true, false, true, false, true, true },
[_]bool{ true, false, true, false, true, false, true, true },
[_]bool{ false, true, true, false, true, false, true, true },
[_]bool{ true, true, true, false, true, false, true, true },
[_]bool{ false, false, false, true, true, false, true, true },
[_]bool{ true, false, false, true, true, false, true, true },
[_]bool{ false, true, false, true, true, false, true, true },
[_]bool{ true, true, false, true, true, false, true, true },
[_]bool{ false, false, true, true, true, false, true, true },
[_]bool{ true, false, true, true, true, false, true, true },
[_]bool{ false, true, true, true, true, false, true, true },
[_]bool{ true, true, true, true, true, false, true, true },
[_]bool{ false, false, false, false, false, true, true, true },
[_]bool{ true, false, false, false, false, true, true, true },
[_]bool{ false, true, false, false, false, true, true, true },
[_]bool{ true, true, false, false, false, true, true, true },
[_]bool{ false, false, true, false, false, true, true, true },
[_]bool{ true, false, true, false, false, true, true, true },
[_]bool{ false, true, true, false, false, true, true, true },
[_]bool{ true, true, true, false, false, true, true, true },
[_]bool{ false, false, false, true, false, true, true, true },
[_]bool{ true, false, false, true, false, true, true, true },
[_]bool{ false, true, false, true, false, true, true, true },
[_]bool{ true, true, false, true, false, true, true, true },
[_]bool{ false, false, true, true, false, true, true, true },
[_]bool{ true, false, true, true, false, true, true, true },
[_]bool{ false, true, true, true, false, true, true, true },
[_]bool{ true, true, true, true, false, true, true, true },
[_]bool{ true, false, false, false, true, true, true, true },
[_]bool{ false, true, false, false, true, true, true, true },
[_]bool{ true, true, false, false, true, true, true, true },
[_]bool{ false, false, true, false, true, true, true, true },
[_]bool{ false, true, true, false, true, true, true, true },
[_]bool{ true, true, true, false, true, true, true, true },
[_]bool{ false, false, false, true, true, true, true, true },
[_]bool{ true, false, false, true, true, true, true, true },
[_]bool{ true, true, false, true, true, true, true, true },
[_]bool{ true, false, true, true, true, true, true, true },
[_]bool{ false, true, true, true, true, true, true, true },
};

const log = std.log.scoped(.box_font);

/// Grid metrics for the rendering.
Expand Down Expand Up @@ -579,6 +814,8 @@ fn draw(self: Box, alloc: Allocator, canvas: *font.sprite.Canvas, cp: u32) !void

0x2800...0x28ff => self.draw_braille(canvas, cp),

OctantMin...OctantMax => self.draw_octant(canvas, cp),

0x1fb00...0x1fb3b => self.draw_sextant(canvas, cp),

// '🬼'
Expand Down Expand Up @@ -2484,6 +2721,23 @@ fn draw_sextant(self: Box, canvas: *font.sprite.Canvas, cp: u32) void {
if (sex.br) self.rect(canvas, x_halfs[1], y_thirds[1], self.metrics.cell_width, self.metrics.cell_height);
}

fn draw_octant(self: Box, canvas: *font.sprite.Canvas, cp: u32) void {
assert(cp >= OctantMin and cp <= OctantMax);
const oct = Octants[cp - OctantMin];

const x_halfs = self.xHalfs();
const y_quads = self.yQuads();

if (oct[0]) self.rect(canvas, 0, 0, x_halfs[0], y_quads[0]);
if (oct[1]) self.rect(canvas, x_halfs[1], 0, self.metrics.cell_width, y_quads[0]);
if (oct[2]) self.rect(canvas, 0, y_quads[0], x_halfs[0], y_quads[1]);
if (oct[3]) self.rect(canvas, x_halfs[1], y_quads[0], self.metrics.cell_width, y_quads[1]);
if (oct[4]) self.rect(canvas, 0, y_quads[1], x_halfs[0], y_quads[2]);
if (oct[5]) self.rect(canvas, x_halfs[1], y_quads[1], self.metrics.cell_width, y_quads[2]);
if (oct[6]) self.rect(canvas, 0, y_quads[2], x_halfs[0], self.metrics.cell_height);
if (oct[7]) self.rect(canvas, x_halfs[1], y_quads[2], self.metrics.cell_width, self.metrics.cell_height);
}

fn xHalfs(self: Box) [2]u32 {
return .{
@as(u32, @intFromFloat(@round(@as(f64, @floatFromInt(self.metrics.cell_width)) / 2))),
Expand All @@ -2500,6 +2754,21 @@ fn yThirds(self: Box) [2]u32 {
};
}

// assume octants might be striped across multiple rows of cells. to maximize
// distance between excess pixellines, we want (1) an arbitrary region (there
// will be a pattern of 1'-3-1'-3-1'-3 no matter what), (2) discontiguous
// regions (0 and 2 or 1 and 3), and (3) an arbitrary three regions (there will
// be a pattern of 3-1-3-1-3-1 no matter what).
fn yQuads(self: Box) [3]u32 {
return switch (@mod(self.metrics.cell_height, 4)) {
0 => .{ self.metrics.cell_height / 4, 2 * self.metrics.cell_height / 4, 3 * self.metrics.cell_height / 4 },
1 => .{ self.metrics.cell_height / 4, 2 * self.metrics.cell_height / 4 + 1, 3 * self.metrics.cell_height / 4 },
2 => .{ self.metrics.cell_height / 4 + 1, 2 * self.metrics.cell_height / 4, 3 * self.metrics.cell_height / 4 + 1 },
3 => .{ self.metrics.cell_height / 4 + 1, 2 * self.metrics.cell_height / 4 + 1, 3 * self.metrics.cell_height / 4 },
else => unreachable,
};
}

fn draw_smooth_mosaic(
self: Box,
canvas: *font.sprite.Canvas,
Expand Down

0 comments on commit ea1299d

Please sign in to comment.