@@ -68,6 +68,15 @@ const Lines = struct {
68
68
};
69
69
};
70
70
71
+ /// Specification of a quadrants char, which has each of the
72
+ /// 4 quadrants of the character cell either filled or empty.
73
+ const Quads = struct {
74
+ tl : bool = false ,
75
+ tr : bool = false ,
76
+ bl : bool = false ,
77
+ br : bool = false ,
78
+ };
79
+
71
80
/// Alignment of a figure within a cell
72
81
const Alignment = struct {
73
82
horizontal : enum {
@@ -454,9 +463,26 @@ fn draw(self: Box, alloc: Allocator, canvas: *font.sprite.Canvas, cp: u32) !void
454
463
0x2594 = > self .draw_block (canvas , Alignment .upper , 1 , one_eighth ),
455
464
// '▕' RIGHT ONE EIGHTH BLOCK
456
465
0x2595 = > self .draw_block (canvas , Alignment .right , one_eighth , 1 ),
457
-
458
- // ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟
459
- 0x2596... 0x259f = > self .draw_quadrant (canvas , cp ),
466
+ // '▖'
467
+ 0x2596 = > self .draw_quadrant (canvas , .{ .bl = true }),
468
+ // '▗'
469
+ 0x2597 = > self .draw_quadrant (canvas , .{ .br = true }),
470
+ // '▘'
471
+ 0x2598 = > self .draw_quadrant (canvas , .{ .tl = true }),
472
+ // '▙'
473
+ 0x2599 = > self .draw_quadrant (canvas , .{ .tl = true , .bl = true , .br = true }),
474
+ // '▚'
475
+ 0x259a = > self .draw_quadrant (canvas , .{ .tl = true , .br = true }),
476
+ // '▛'
477
+ 0x259b = > self .draw_quadrant (canvas , .{ .tl = true , .tr = true , .bl = true }),
478
+ // '▜'
479
+ 0x259c = > self .draw_quadrant (canvas , .{ .tl = true , .tr = true , .br = true }),
480
+ // '▝'
481
+ 0x259d = > self .draw_quadrant (canvas , .{ .tr = true }),
482
+ // '▞'
483
+ 0x259e = > self .draw_quadrant (canvas , .{ .tr = true , .bl = true }),
484
+ // '▟'
485
+ 0x259f = > self .draw_quadrant (canvas , .{ .tr = true , .bl = true , .br = true }),
460
486
461
487
0x2800... 0x28ff = > self .draw_braille (canvas , cp ),
462
488
@@ -975,32 +1001,14 @@ fn draw_horizontal_one_eighth_1358_block(self: Box, canvas: *font.sprite.Canvas)
975
1001
self .draw_horizontal_one_eighth_block_n (canvas , 7 );
976
1002
}
977
1003
978
- fn draw_quadrant (self : Box , canvas : * font.sprite.Canvas , cp : u32 ) void {
979
- const UPPER_LEFT : u8 = 1 << 0 ;
980
- const UPPER_RIGHT : u8 = 1 << 1 ;
981
- const LOWER_LEFT : u8 = 1 << 2 ;
982
- const LOWER_RIGHT : u8 = 1 << 3 ;
983
- const matrix : [10 ]u8 = .{
984
- LOWER_LEFT ,
985
- LOWER_RIGHT ,
986
- UPPER_LEFT ,
987
- UPPER_LEFT | LOWER_LEFT | LOWER_RIGHT ,
988
- UPPER_LEFT | LOWER_RIGHT ,
989
- UPPER_LEFT | UPPER_RIGHT | LOWER_LEFT ,
990
- UPPER_LEFT | UPPER_RIGHT | LOWER_RIGHT ,
991
- UPPER_RIGHT ,
992
- UPPER_RIGHT | LOWER_LEFT ,
993
- UPPER_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
994
- };
995
-
996
- assert (cp >= 0x2596 and cp <= 0x259f );
997
- const idx = cp - 0x2596 ;
998
- const encoded = matrix [idx ];
1004
+ fn draw_quadrant (self : Box , canvas : * font.sprite.Canvas , comptime quads : Quads ) void {
1005
+ const center_x = self .width / 2 + self .width % 2 ;
1006
+ const center_y = self .height / 2 + self .height % 2 ;
999
1007
1000
- if (encoded & UPPER_LEFT == UPPER_LEFT ) self .draw_block (canvas , .{ . horizontal = .left , . vertical = .top }, 0.5 , 0.5 );
1001
- if (encoded & UPPER_RIGHT == UPPER_RIGHT ) self .draw_block (canvas , .{ . horizontal = .right , . vertical = .top }, 0.5 , 0.5 );
1002
- if (encoded & LOWER_LEFT == LOWER_LEFT ) self .draw_block (canvas , .{ . horizontal = .left , . vertical = .bottom }, 0.5 , 0.5 );
1003
- if (encoded & LOWER_RIGHT == LOWER_RIGHT ) self .draw_block (canvas , .{ . horizontal = .right , . vertical = .bottom }, 0.5 , 0.5 );
1008
+ if (quads . tl ) self .rect (canvas , 0 , 0 , center_x , center_y );
1009
+ if (quads . tr ) self .rect (canvas , center_x , 0 , self . width , center_y );
1010
+ if (quads . bl ) self .rect (canvas , 0 , center_y , center_x , self . height );
1011
+ if (quads . br ) self .rect (canvas , center_x , center_y , self . width , self . height );
1004
1012
}
1005
1013
1006
1014
fn draw_braille (self : Box , canvas : * font.sprite.Canvas , cp : u32 ) void {
@@ -1099,96 +1107,30 @@ fn draw_braille(self: Box, canvas: *font.sprite.Canvas, cp: u32) void {
1099
1107
}
1100
1108
1101
1109
fn draw_sextant (self : Box , canvas : * font.sprite.Canvas , cp : u32 ) void {
1102
- const UPPER_LEFT : u8 = 1 << 0 ;
1103
- const MIDDLE_LEFT : u8 = 1 << 1 ;
1104
- const LOWER_LEFT : u8 = 1 << 2 ;
1105
- const UPPER_RIGHT : u8 = 1 << 3 ;
1106
- const MIDDLE_RIGHT : u8 = 1 << 4 ;
1107
- const LOWER_RIGHT : u8 = 1 << 5 ;
1108
-
1109
- const matrix : [60 ]u8 = .{
1110
- // U+1fb00 - U+1fb0f
1111
- UPPER_LEFT ,
1112
- UPPER_RIGHT ,
1113
- UPPER_LEFT | UPPER_RIGHT ,
1114
- MIDDLE_LEFT ,
1115
- UPPER_LEFT | MIDDLE_LEFT ,
1116
- UPPER_RIGHT | MIDDLE_LEFT ,
1117
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_LEFT ,
1118
- MIDDLE_RIGHT ,
1119
- UPPER_LEFT | MIDDLE_RIGHT ,
1120
- UPPER_RIGHT | MIDDLE_RIGHT ,
1121
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_RIGHT ,
1122
- MIDDLE_LEFT | MIDDLE_RIGHT ,
1123
- UPPER_LEFT | MIDDLE_LEFT | MIDDLE_RIGHT ,
1124
- UPPER_RIGHT | MIDDLE_LEFT | MIDDLE_RIGHT ,
1125
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_LEFT | MIDDLE_RIGHT ,
1126
- LOWER_LEFT ,
1127
-
1128
- // U+1fb10 - U+1fb1f
1129
- UPPER_LEFT | LOWER_LEFT ,
1130
- UPPER_RIGHT | LOWER_LEFT ,
1131
- UPPER_LEFT | UPPER_RIGHT | LOWER_LEFT ,
1132
- MIDDLE_LEFT | LOWER_LEFT ,
1133
- UPPER_RIGHT | MIDDLE_LEFT | LOWER_LEFT ,
1134
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_LEFT | LOWER_LEFT ,
1135
- MIDDLE_RIGHT | LOWER_LEFT ,
1136
- UPPER_LEFT | MIDDLE_RIGHT | LOWER_LEFT ,
1137
- UPPER_RIGHT | MIDDLE_RIGHT | LOWER_LEFT ,
1138
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_RIGHT | LOWER_LEFT ,
1139
- MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_LEFT ,
1140
- UPPER_LEFT | MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_LEFT ,
1141
- UPPER_RIGHT | MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_LEFT ,
1142
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_LEFT ,
1143
- LOWER_RIGHT ,
1144
- UPPER_LEFT | LOWER_RIGHT ,
1145
-
1146
- // U+1fb20 - U+1fb2f
1147
- UPPER_RIGHT | LOWER_RIGHT ,
1148
- UPPER_LEFT | UPPER_RIGHT | LOWER_RIGHT ,
1149
- MIDDLE_LEFT | LOWER_RIGHT ,
1150
- UPPER_LEFT | MIDDLE_LEFT | LOWER_RIGHT ,
1151
- UPPER_RIGHT | MIDDLE_LEFT | LOWER_RIGHT ,
1152
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_LEFT | LOWER_RIGHT ,
1153
- MIDDLE_RIGHT | LOWER_RIGHT ,
1154
- UPPER_LEFT | MIDDLE_RIGHT | LOWER_RIGHT ,
1155
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_RIGHT | LOWER_RIGHT ,
1156
- MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_RIGHT ,
1157
- UPPER_LEFT | MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_RIGHT ,
1158
- UPPER_RIGHT | MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_RIGHT ,
1159
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_RIGHT ,
1160
- LOWER_LEFT | LOWER_RIGHT ,
1161
- UPPER_LEFT | LOWER_LEFT | LOWER_RIGHT ,
1162
- UPPER_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1163
-
1164
- // U+1fb30 - U+1fb3b
1165
- UPPER_LEFT | UPPER_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1166
- MIDDLE_LEFT | LOWER_LEFT | LOWER_RIGHT ,
1167
- UPPER_LEFT | MIDDLE_LEFT | LOWER_LEFT | LOWER_RIGHT ,
1168
- UPPER_RIGHT | MIDDLE_LEFT | LOWER_LEFT | LOWER_RIGHT ,
1169
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_LEFT | LOWER_LEFT | LOWER_RIGHT ,
1170
- MIDDLE_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1171
- UPPER_LEFT | MIDDLE_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1172
- UPPER_RIGHT | MIDDLE_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1173
- UPPER_LEFT | UPPER_RIGHT | MIDDLE_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1174
- MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1175
- UPPER_LEFT | MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1176
- UPPER_RIGHT | MIDDLE_LEFT | MIDDLE_RIGHT | LOWER_LEFT | LOWER_RIGHT ,
1110
+ const Sextants = packed struct (u6 ) {
1111
+ tl : bool ,
1112
+ tr : bool ,
1113
+ ml : bool ,
1114
+ mr : bool ,
1115
+ bl : bool ,
1116
+ br : bool ,
1177
1117
};
1178
1118
1179
1119
assert (cp >= 0x1fb00 and cp <= 0x1fb3b );
1180
1120
const idx = cp - 0x1fb00 ;
1181
- const encoded = matrix [idx ];
1121
+ const sex : Sextants = @bitCast (@as (u6 , @intCast (
1122
+ idx + (idx / 0x14 ) + 1 ,
1123
+ )));
1182
1124
1183
1125
const x_halfs = self .xHalfs ();
1184
1126
const y_thirds = self .yThirds ();
1185
1127
1186
- if (encoded & UPPER_LEFT > 0 ) self .rect (canvas , 0 , 0 , x_halfs [0 ], y_thirds [0 ]);
1187
- if (encoded & MIDDLE_LEFT > 0 ) self .rect (canvas , 0 , y_thirds [ 0 ], x_halfs [ 0 ], y_thirds [1 ]);
1188
- if (encoded & LOWER_LEFT > 0 ) self .rect (canvas , 0 , y_thirds [1 ], x_halfs [0 ], self . height );
1189
- if (encoded & UPPER_RIGHT > 0 ) self .rect (canvas , x_halfs [1 ], 0 , self .width , y_thirds [0 ]);
1190
- if (encoded & MIDDLE_RIGHT > 0 ) self .rect (canvas , x_halfs [1 ], y_thirds [0 ], self .width , y_thirds [ 1 ] );
1191
- if (encoded & LOWER_RIGHT > 0 ) self .rect (canvas , x_halfs [1 ], y_thirds [1 ], self .width , self .height );
1128
+ if (sex . tl ) self .rect (canvas , 0 , 0 , x_halfs [0 ], y_thirds [0 ]);
1129
+ if (sex . tr ) self .rect (canvas , x_halfs [ 1 ], 0 , self . width , y_thirds [0 ]);
1130
+ if (sex . ml ) self .rect (canvas , 0 , y_thirds [0 ], x_halfs [0 ], y_thirds [ 1 ] );
1131
+ if (sex . mr ) self .rect (canvas , x_halfs [1 ], y_thirds [ 0 ] , self .width , y_thirds [1 ]);
1132
+ if (sex . bl ) self .rect (canvas , 0 , y_thirds [1 ], x_halfs [0 ], self .height );
1133
+ if (sex . br ) self .rect (canvas , x_halfs [1 ], y_thirds [1 ], self .width , self .height );
1192
1134
}
1193
1135
1194
1136
fn xHalfs (self : Box ) [2 ]u32 {
0 commit comments