font/sprite: add corner pieces from Geometric Shapes block (#7562)

Resolves #3344

Adds ◢ ◣ ◤ ◥ ◸ ◹ ◺ ◿

(The outlined versions aren't perfect, if someone actually uses them and
is dissatisfied they can be improved in the future.)

### Before

![image](https://github.com/user-attachments/assets/72ce8f0a-6109-4c89-b4a9-090ebba401b2)
### After

![image](https://github.com/user-attachments/assets/d10f7569-e476-40e8-9e54-a8d75f2453bb)
pull/7566/head
Mitchell Hashimoto 2025-06-10 11:57:33 -07:00 committed by GitHub
commit 40340e994c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 128 additions and 0 deletions

View File

@ -581,6 +581,120 @@ fn draw(self: Box, alloc: Allocator, canvas: *font.sprite.Canvas, cp: u32) !void
// '▟' // '▟'
0x259f => self.draw_quadrant(canvas, .{ .tr = true, .bl = true, .br = true }), 0x259f => self.draw_quadrant(canvas, .{ .tr = true, .bl = true, .br = true }),
// '◢'
0x25e2 => self.draw_corner_triangle_shade(canvas, .br, .on),
// '◣'
0x25e3 => self.draw_corner_triangle_shade(canvas, .bl, .on),
// '◤'
0x25e4 => self.draw_corner_triangle_shade(canvas, .tl, .on),
// '◥'
0x25e5 => self.draw_corner_triangle_shade(canvas, .tr, .on),
// '◸'
0x25f8 => {
const thickness_px = Thickness.light.height(self.metrics.box_thickness);
// top edge
self.rect(
canvas,
0,
0,
self.metrics.cell_width,
thickness_px,
);
// left edge
self.rect(
canvas,
0,
0,
thickness_px,
self.metrics.cell_height -| 1,
);
// diagonal
self.draw_cell_diagonal(
canvas,
.lower_left,
.upper_right,
);
},
// '◹'
0x25f9 => {
const thickness_px = Thickness.light.height(self.metrics.box_thickness);
// top edge
self.rect(
canvas,
0,
0,
self.metrics.cell_width,
thickness_px,
);
// right edge
self.rect(
canvas,
self.metrics.cell_width -| thickness_px,
0,
self.metrics.cell_width,
self.metrics.cell_height -| 1,
);
// diagonal
self.draw_cell_diagonal(
canvas,
.upper_left,
.lower_right,
);
},
// '◺'
0x25fa => {
const thickness_px = Thickness.light.height(self.metrics.box_thickness);
// bottom edge
self.rect(
canvas,
0,
self.metrics.cell_height -| thickness_px,
self.metrics.cell_width,
self.metrics.cell_height,
);
// left edge
self.rect(
canvas,
0,
1,
thickness_px,
self.metrics.cell_height,
);
// diagonal
self.draw_cell_diagonal(
canvas,
.upper_left,
.lower_right,
);
},
// '◿'
0x25ff => {
const thickness_px = Thickness.light.height(self.metrics.box_thickness);
// bottom edge
self.rect(
canvas,
0,
self.metrics.cell_height -| thickness_px,
self.metrics.cell_width,
self.metrics.cell_height,
);
// right edge
self.rect(
canvas,
self.metrics.cell_width -| thickness_px,
1,
self.metrics.cell_width,
self.metrics.cell_height,
);
// diagonal
self.draw_cell_diagonal(
canvas,
.lower_left,
.upper_right,
);
},
0x2800...0x28ff => self.draw_braille(canvas, cp), 0x2800...0x28ff => self.draw_braille(canvas, cp),
0x1fb00...0x1fb3b => self.draw_sextant(canvas, cp), 0x1fb00...0x1fb3b => self.draw_sextant(canvas, cp),
@ -3197,6 +3311,15 @@ fn testRenderAll(self: Box, alloc: Allocator, atlas: *font.Atlas) !void {
else => {}, else => {},
} }
} }
// Geometric Shapes: filled and outlined corners
for ([_]u21{ '◢', '◣', '◤', '◥', '◸', '◹', '◺', '◿' }) |char| {
_ = try self.renderGlyph(
alloc,
atlas,
char,
);
}
} }
test "render all sprites" { test "render all sprites" {

View File

@ -190,6 +190,11 @@ const Kind = enum {
// //
0x2580...0x259F, 0x2580...0x259F,
// "Geometric Shapes" block
0x25e2...0x25e5, //
0x25f8...0x25fa, //
0x25ff, //
// "Braille" block // "Braille" block
0x2800...0x28FF, 0x2800...0x28FF,

Binary file not shown.