Skip to content

Commit 659e715

Browse files
committed
Implement draw_octant() and yQuads() for U16.0
1 parent 76fd4fa commit 659e715

File tree

1 file changed

+269
-0
lines changed

1 file changed

+269
-0
lines changed

Diff for: src/font/sprite/Box.zig

+269
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,241 @@ const z2d = @import("z2d");
2525
const font = @import("../main.zig");
2626
const Sprite = @import("../sprite.zig").Sprite;
2727

28+
const OctantMin = 0x1cd00;
29+
const OctantMax = 0x1cde5;
30+
const Octants = [OctantMax - OctantMin + 1][8]bool{
31+
[_]bool{ false, false, true, false, false, false, false, false },
32+
[_]bool{ false, true, true, false, false, false, false, false },
33+
[_]bool{ true, true, true, false, false, false, false, false },
34+
[_]bool{ false, false, false, true, false, false, false, false },
35+
[_]bool{ true, false, false, true, false, false, false, false },
36+
[_]bool{ true, true, false, true, false, false, false, false },
37+
[_]bool{ false, false, true, true, false, false, false, false },
38+
[_]bool{ true, false, true, true, false, false, false, false },
39+
[_]bool{ false, true, true, true, false, false, false, false },
40+
[_]bool{ false, false, false, false, true, false, false, false },
41+
[_]bool{ true, false, false, false, true, false, false, false },
42+
[_]bool{ false, true, false, false, true, false, false, false },
43+
[_]bool{ true, true, false, false, true, false, false, false },
44+
[_]bool{ true, false, true, false, true, false, false, false },
45+
[_]bool{ false, true, true, false, true, false, false, false },
46+
[_]bool{ true, true, true, false, true, false, false, false },
47+
[_]bool{ false, false, false, true, true, false, false, false },
48+
[_]bool{ true, false, false, true, true, false, false, false },
49+
[_]bool{ false, true, false, true, true, false, false, false },
50+
[_]bool{ true, true, false, true, true, false, false, false },
51+
[_]bool{ false, false, true, true, true, false, false, false },
52+
[_]bool{ true, false, true, true, true, false, false, false },
53+
[_]bool{ false, true, true, true, true, false, false, false },
54+
[_]bool{ true, true, true, true, true, false, false, false },
55+
[_]bool{ false, false, false, false, false, true, false, false },
56+
[_]bool{ true, false, false, false, false, true, false, false },
57+
[_]bool{ false, true, false, false, false, true, false, false },
58+
[_]bool{ true, true, false, false, false, true, false, false },
59+
[_]bool{ false, false, true, false, false, true, false, false },
60+
[_]bool{ true, false, true, false, false, true, false, false },
61+
[_]bool{ false, true, true, false, false, true, false, false },
62+
[_]bool{ true, true, true, false, false, true, false, false },
63+
[_]bool{ true, false, false, true, false, true, false, false },
64+
[_]bool{ false, true, false, true, false, true, false, false },
65+
[_]bool{ true, true, false, true, false, true, false, false },
66+
[_]bool{ false, false, true, true, false, true, false, false },
67+
[_]bool{ true, false, true, true, false, true, false, false },
68+
[_]bool{ false, true, true, true, false, true, false, false },
69+
[_]bool{ true, true, true, true, false, true, false, false },
70+
[_]bool{ false, false, false, false, true, true, false, false },
71+
[_]bool{ true, false, false, false, true, true, false, false },
72+
[_]bool{ false, true, false, false, true, true, false, false },
73+
[_]bool{ true, true, false, false, true, true, false, false },
74+
[_]bool{ false, false, true, false, true, true, false, false },
75+
[_]bool{ true, false, true, false, true, true, false, false },
76+
[_]bool{ false, true, true, false, true, true, false, false },
77+
[_]bool{ true, true, true, false, true, true, false, false },
78+
[_]bool{ false, false, false, true, true, true, false, false },
79+
[_]bool{ true, false, false, true, true, true, false, false },
80+
[_]bool{ false, true, false, true, true, true, false, false },
81+
[_]bool{ true, true, false, true, true, true, false, false },
82+
[_]bool{ false, false, true, true, true, true, false, false },
83+
[_]bool{ true, false, true, true, true, true, false, false },
84+
[_]bool{ false, true, true, true, true, true, false, false },
85+
[_]bool{ true, false, false, false, false, false, true, false },
86+
[_]bool{ false, true, false, false, false, false, true, false },
87+
[_]bool{ true, true, false, false, false, false, true, false },
88+
[_]bool{ false, false, true, false, false, false, true, false },
89+
[_]bool{ true, false, true, false, false, false, true, false },
90+
[_]bool{ false, true, true, false, false, false, true, false },
91+
[_]bool{ true, true, true, false, false, false, true, false },
92+
[_]bool{ false, false, false, true, false, false, true, false },
93+
[_]bool{ true, false, false, true, false, false, true, false },
94+
[_]bool{ false, true, false, true, false, false, true, false },
95+
[_]bool{ true, true, false, true, false, false, true, false },
96+
[_]bool{ false, false, true, true, false, false, true, false },
97+
[_]bool{ true, false, true, true, false, false, true, false },
98+
[_]bool{ false, true, true, true, false, false, true, false },
99+
[_]bool{ true, true, true, true, false, false, true, false },
100+
[_]bool{ true, false, false, false, true, false, true, false },
101+
[_]bool{ false, true, false, false, true, false, true, false },
102+
[_]bool{ true, true, false, false, true, false, true, false },
103+
[_]bool{ false, false, true, false, true, false, true, false },
104+
[_]bool{ false, true, true, false, true, false, true, false },
105+
[_]bool{ true, true, true, false, true, false, true, false },
106+
[_]bool{ false, false, false, true, true, false, true, false },
107+
[_]bool{ true, false, false, true, true, false, true, false },
108+
[_]bool{ true, true, false, true, true, false, true, false },
109+
[_]bool{ false, false, true, true, true, false, true, false },
110+
[_]bool{ true, false, true, true, true, false, true, false },
111+
[_]bool{ false, true, true, true, true, false, true, false },
112+
[_]bool{ false, false, false, false, false, true, true, false },
113+
[_]bool{ true, false, false, false, false, true, true, false },
114+
[_]bool{ false, true, false, false, false, true, true, false },
115+
[_]bool{ true, true, false, false, false, true, true, false },
116+
[_]bool{ false, false, true, false, false, true, true, false },
117+
[_]bool{ true, false, true, false, false, true, true, false },
118+
[_]bool{ false, true, true, false, false, true, true, false },
119+
[_]bool{ true, true, true, false, false, true, true, false },
120+
[_]bool{ false, false, false, true, false, true, true, false },
121+
[_]bool{ true, false, false, true, false, true, true, false },
122+
[_]bool{ false, true, false, true, false, true, true, false },
123+
[_]bool{ true, true, false, true, false, true, true, false },
124+
[_]bool{ false, false, true, true, false, true, true, false },
125+
[_]bool{ true, false, true, true, false, true, true, false },
126+
[_]bool{ false, true, true, true, false, true, true, false },
127+
[_]bool{ true, true, true, true, false, true, true, false },
128+
[_]bool{ false, false, false, false, true, true, true, false },
129+
[_]bool{ true, false, false, false, true, true, true, false },
130+
[_]bool{ false, true, false, false, true, true, true, false },
131+
[_]bool{ true, true, false, false, true, true, true, false },
132+
[_]bool{ false, false, true, false, true, true, true, false },
133+
[_]bool{ true, false, true, false, true, true, true, false },
134+
[_]bool{ false, true, true, false, true, true, true, false },
135+
[_]bool{ true, true, true, false, true, true, true, false },
136+
[_]bool{ false, false, false, true, true, true, true, false },
137+
[_]bool{ true, false, false, true, true, true, true, false },
138+
[_]bool{ false, true, false, true, true, true, true, false },
139+
[_]bool{ true, true, false, true, true, true, true, false },
140+
[_]bool{ false, false, true, true, true, true, true, false },
141+
[_]bool{ true, false, true, true, true, true, true, false },
142+
[_]bool{ false, true, true, true, true, true, true, false },
143+
[_]bool{ true, true, true, true, true, true, true, false },
144+
[_]bool{ true, false, false, false, false, false, false, true },
145+
[_]bool{ false, true, false, false, false, false, false, true },
146+
[_]bool{ true, true, false, false, false, false, false, true },
147+
[_]bool{ false, false, true, false, false, false, false, true },
148+
[_]bool{ true, false, true, false, false, false, false, true },
149+
[_]bool{ false, true, true, false, false, false, false, true },
150+
[_]bool{ true, true, true, false, false, false, false, true },
151+
[_]bool{ false, false, false, true, false, false, false, true },
152+
[_]bool{ true, false, false, true, false, false, false, true },
153+
[_]bool{ false, true, false, true, false, false, false, true },
154+
[_]bool{ true, true, false, true, false, false, false, true },
155+
[_]bool{ false, false, true, true, false, false, false, true },
156+
[_]bool{ true, false, true, true, false, false, false, true },
157+
[_]bool{ false, true, true, true, false, false, false, true },
158+
[_]bool{ true, true, true, true, false, false, false, true },
159+
[_]bool{ false, false, false, false, true, false, false, true },
160+
[_]bool{ true, false, false, false, true, false, false, true },
161+
[_]bool{ false, true, false, false, true, false, false, true },
162+
[_]bool{ true, true, false, false, true, false, false, true },
163+
[_]bool{ false, false, true, false, true, false, false, true },
164+
[_]bool{ true, false, true, false, true, false, false, true },
165+
[_]bool{ false, true, true, false, true, false, false, true },
166+
[_]bool{ true, true, true, false, true, false, false, true },
167+
[_]bool{ false, false, false, true, true, false, false, true },
168+
[_]bool{ true, false, false, true, true, false, false, true },
169+
[_]bool{ false, true, false, true, true, false, false, true },
170+
[_]bool{ true, true, false, true, true, false, false, true },
171+
[_]bool{ false, false, true, true, true, false, false, true },
172+
[_]bool{ true, false, true, true, true, false, false, true },
173+
[_]bool{ false, true, true, true, true, false, false, true },
174+
[_]bool{ true, true, true, true, true, false, false, true },
175+
[_]bool{ true, false, false, false, false, true, false, true },
176+
[_]bool{ false, true, false, false, false, true, false, true },
177+
[_]bool{ true, true, false, false, false, true, false, true },
178+
[_]bool{ false, false, true, false, false, true, false, true },
179+
[_]bool{ false, true, true, false, false, true, false, true },
180+
[_]bool{ true, true, true, false, false, true, false, true },
181+
[_]bool{ false, false, false, true, false, true, false, true },
182+
[_]bool{ true, false, false, true, false, true, false, true },
183+
[_]bool{ true, true, false, true, false, true, false, true },
184+
[_]bool{ false, false, true, true, false, true, false, true },
185+
[_]bool{ true, false, true, true, false, true, false, true },
186+
[_]bool{ false, true, true, true, false, true, false, true },
187+
[_]bool{ false, false, false, false, true, true, false, true },
188+
[_]bool{ true, false, false, false, true, true, false, true },
189+
[_]bool{ false, true, false, false, true, true, false, true },
190+
[_]bool{ true, true, false, false, true, true, false, true },
191+
[_]bool{ false, false, true, false, true, true, false, true },
192+
[_]bool{ true, false, true, false, true, true, false, true },
193+
[_]bool{ false, true, true, false, true, true, false, true },
194+
[_]bool{ true, true, true, false, true, true, false, true },
195+
[_]bool{ false, false, false, true, true, true, false, true },
196+
[_]bool{ true, false, false, true, true, true, false, true },
197+
[_]bool{ false, true, false, true, true, true, false, true },
198+
[_]bool{ true, true, false, true, true, true, false, true },
199+
[_]bool{ false, false, true, true, true, true, false, true },
200+
[_]bool{ true, false, true, true, true, true, false, true },
201+
[_]bool{ false, true, true, true, true, true, false, true },
202+
[_]bool{ true, true, true, true, true, true, false, true },
203+
[_]bool{ true, false, false, false, false, false, true, true },
204+
[_]bool{ false, true, false, false, false, false, true, true },
205+
[_]bool{ true, true, false, false, false, false, true, true },
206+
[_]bool{ false, false, true, false, false, false, true, true },
207+
[_]bool{ true, false, true, false, false, false, true, true },
208+
[_]bool{ false, true, true, false, false, false, true, true },
209+
[_]bool{ true, true, true, false, false, false, true, true },
210+
[_]bool{ false, false, false, true, false, false, true, true },
211+
[_]bool{ true, false, false, true, false, false, true, true },
212+
[_]bool{ false, true, false, true, false, false, true, true },
213+
[_]bool{ true, true, false, true, false, false, true, true },
214+
[_]bool{ false, false, true, true, false, false, true, true },
215+
[_]bool{ true, false, true, true, false, false, true, true },
216+
[_]bool{ false, true, true, true, false, false, true, true },
217+
[_]bool{ true, true, true, true, false, false, true, true },
218+
[_]bool{ false, false, false, false, true, false, true, true },
219+
[_]bool{ true, false, false, false, true, false, true, true },
220+
[_]bool{ false, true, false, false, true, false, true, true },
221+
[_]bool{ true, true, false, false, true, false, true, true },
222+
[_]bool{ false, false, true, false, true, false, true, true },
223+
[_]bool{ true, false, true, false, true, false, true, true },
224+
[_]bool{ false, true, true, false, true, false, true, true },
225+
[_]bool{ true, true, true, false, true, false, true, true },
226+
[_]bool{ false, false, false, true, true, false, true, true },
227+
[_]bool{ true, false, false, true, true, false, true, true },
228+
[_]bool{ false, true, false, true, true, false, true, true },
229+
[_]bool{ true, true, false, true, true, false, true, true },
230+
[_]bool{ false, false, true, true, true, false, true, true },
231+
[_]bool{ true, false, true, true, true, false, true, true },
232+
[_]bool{ false, true, true, true, true, false, true, true },
233+
[_]bool{ true, true, true, true, true, false, true, true },
234+
[_]bool{ false, false, false, false, false, true, true, true },
235+
[_]bool{ true, false, false, false, false, true, true, true },
236+
[_]bool{ false, true, false, false, false, true, true, true },
237+
[_]bool{ true, true, false, false, false, true, true, true },
238+
[_]bool{ false, false, true, false, false, true, true, true },
239+
[_]bool{ true, false, true, false, false, true, true, true },
240+
[_]bool{ false, true, true, false, false, true, true, true },
241+
[_]bool{ true, true, true, false, false, true, true, true },
242+
[_]bool{ false, false, false, true, false, true, true, true },
243+
[_]bool{ true, false, false, true, false, true, true, true },
244+
[_]bool{ false, true, false, true, false, true, true, true },
245+
[_]bool{ true, true, false, true, false, true, true, true },
246+
[_]bool{ false, false, true, true, false, true, true, true },
247+
[_]bool{ true, false, true, true, false, true, true, true },
248+
[_]bool{ false, true, true, true, false, true, true, true },
249+
[_]bool{ true, true, true, true, false, true, true, true },
250+
[_]bool{ true, false, false, false, true, true, true, true },
251+
[_]bool{ false, true, false, false, true, true, true, true },
252+
[_]bool{ true, true, false, false, true, true, true, true },
253+
[_]bool{ false, false, true, false, true, true, true, true },
254+
[_]bool{ false, true, true, false, true, true, true, true },
255+
[_]bool{ true, true, true, false, true, true, true, true },
256+
[_]bool{ false, false, false, true, true, true, true, true },
257+
[_]bool{ true, false, false, true, true, true, true, true },
258+
[_]bool{ true, true, false, true, true, true, true, true },
259+
[_]bool{ true, false, true, true, true, true, true, true },
260+
[_]bool{ false, true, true, true, true, true, true, true },
261+
};
262+
28263
const log = std.log.scoped(.box_font);
29264

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

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

817+
OctantMin...OctantMax => self.draw_octant(canvas, cp),
818+
582819
0x1fb00...0x1fb3b => self.draw_sextant(canvas, cp),
583820

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

2724+
fn draw_octant(self: Box, canvas: *font.sprite.Canvas, cp: u32) void {
2725+
assert(cp >= OctantMin and cp <= OctantMax);
2726+
const oct = Octants[cp - OctantMin];
2727+
2728+
const x_halfs = self.xHalfs();
2729+
const y_quads = self.yQuads();
2730+
2731+
if (oct[0]) self.rect(canvas, 0, 0, x_halfs[0], y_quads[0]);
2732+
if (oct[1]) self.rect(canvas, x_halfs[1], 0, self.metrics.cell_width, y_quads[0]);
2733+
if (oct[2]) self.rect(canvas, 0, y_quads[0], x_halfs[0], y_quads[1]);
2734+
if (oct[3]) self.rect(canvas, x_halfs[1], y_quads[0], self.metrics.cell_width, y_quads[1]);
2735+
if (oct[4]) self.rect(canvas, 0, y_quads[1], x_halfs[0], y_quads[2]);
2736+
if (oct[5]) self.rect(canvas, x_halfs[1], y_quads[1], self.metrics.cell_width, y_quads[2]);
2737+
if (oct[6]) self.rect(canvas, 0, y_quads[2], x_halfs[0], self.metrics.cell_height);
2738+
if (oct[7]) self.rect(canvas, x_halfs[1], y_quads[2], self.metrics.cell_width, self.metrics.cell_height);
2739+
}
2740+
24872741
fn xHalfs(self: Box) [2]u32 {
24882742
return .{
24892743
@as(u32, @intFromFloat(@round(@as(f64, @floatFromInt(self.metrics.cell_width)) / 2))),
@@ -2500,6 +2754,21 @@ fn yThirds(self: Box) [2]u32 {
25002754
};
25012755
}
25022756

2757+
// assume octants might be striped across multiple rows of cells. to maximize
2758+
// distance between excess pixellines, we want (1) an arbitrary region (there
2759+
// will be a pattern of 1'-3-1'-3-1'-3 no matter what), (2) discontiguous
2760+
// regions (0 and 2 or 1 and 3), and (3) an arbitrary three regions (there will
2761+
// be a pattern of 3-1-3-1-3-1 no matter what).
2762+
fn yQuads(self: Box) [3]u32 {
2763+
return switch (@mod(self.metrics.cell_height, 4)) {
2764+
0 => .{ self.metrics.cell_height / 4, 2 * self.metrics.cell_height / 4, 3 * self.metrics.cell_height / 4 },
2765+
1 => .{ self.metrics.cell_height / 4, 2 * self.metrics.cell_height / 4 + 1, 3 * self.metrics.cell_height / 4 },
2766+
2 => .{ self.metrics.cell_height / 4 + 1, 2 * self.metrics.cell_height / 4, 3 * self.metrics.cell_height / 4 + 1 },
2767+
3 => .{ self.metrics.cell_height / 4 + 1, 2 * self.metrics.cell_height / 4 + 1, 3 * self.metrics.cell_height / 4 },
2768+
else => unreachable,
2769+
};
2770+
}
2771+
25032772
fn draw_smooth_mosaic(
25042773
self: Box,
25052774
canvas: *font.sprite.Canvas,

0 commit comments

Comments
 (0)