@@ -25,6 +25,241 @@ const z2d = @import("z2d");
25
25
const font = @import ("../main.zig" );
26
26
const Sprite = @import ("../sprite.zig" ).Sprite ;
27
27
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
+
28
263
const log = std .log .scoped (.box_font );
29
264
30
265
/// Grid metrics for the rendering.
@@ -579,6 +814,8 @@ fn draw(self: Box, alloc: Allocator, canvas: *font.sprite.Canvas, cp: u32) !void
579
814
580
815
0x2800... 0x28ff = > self .draw_braille (canvas , cp ),
581
816
817
+ OctantMin ... OctantMax = > self .draw_octant (canvas , cp ),
818
+
582
819
0x1fb00... 0x1fb3b = > self .draw_sextant (canvas , cp ),
583
820
584
821
// '🬼'
@@ -2484,6 +2721,23 @@ fn draw_sextant(self: Box, canvas: *font.sprite.Canvas, cp: u32) void {
2484
2721
if (sex .br ) self .rect (canvas , x_halfs [1 ], y_thirds [1 ], self .metrics .cell_width , self .metrics .cell_height );
2485
2722
}
2486
2723
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
+
2487
2741
fn xHalfs (self : Box ) [2 ]u32 {
2488
2742
return .{
2489
2743
@as (u32 , @intFromFloat (@round (@as (f64 , @floatFromInt (self .metrics .cell_width )) / 2 ))),
@@ -2500,6 +2754,21 @@ fn yThirds(self: Box) [2]u32 {
2500
2754
};
2501
2755
}
2502
2756
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
+
2503
2772
fn draw_smooth_mosaic (
2504
2773
self : Box ,
2505
2774
canvas : * font.sprite.Canvas ,
0 commit comments