From d0677928af54eb3fea5d11db9b593dbc189e854c Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Sun, 15 Dec 2024 14:33:09 -0600 Subject: [PATCH 1/4] font: add sprites for the separated block quadrants MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unicode 16 added "Separated Block Quadrants" from CP 0x0x1CC21 through 0x1CC2F: 𜰡 𜰢 𜰣 𜰤 𜰥 𜰦 𜰧 𜰨 𜰩 𜰪 𜰫 𜰬 𜰭 𜰮 𜰯 To test, use the following command: ``` printf "\U0001CC21\U0001CC22\U0001CC23\U0001CC24\U0001CC25\U0001CC26\U0001CC27\U0001CC28\U0001CC29\U0001CC2A\U0001CC2B\U0001CC2C\U0001CC2D\U0001CC2E\U0001CC2F\n" ``` --- src/font/sprite/Box.zig | 128 +++++++++++++++++++++++++++++++ src/font/sprite/Face.zig | 5 +- src/font/sprite/testdata/Box.ppm | Bin 1048593 -> 1048593 bytes 3 files changed, 132 insertions(+), 1 deletion(-) diff --git a/src/font/sprite/Box.zig b/src/font/sprite/Box.zig index cf929eb679..438af2c4cf 100644 --- a/src/font/sprite/Box.zig +++ b/src/font/sprite/Box.zig @@ -1624,6 +1624,37 @@ fn draw(self: Box, alloc: Allocator, canvas: *font.sprite.Canvas, cp: u32) !void .right = true, }, .light), + // '𜰡' - SEPARATED BLOCK QUADRANT-1 + 0x1cc21 => try self.draw_separated_block_quadrant(canvas, "1"), + // '𜰢' - SEPARATED BLOCK QUADRANT-2 + 0x1cc22 => try self.draw_separated_block_quadrant(canvas, "2"), + // '𜰣' - SEPARATED BLOCK QUADRANT-12 + 0x1cc23 => try self.draw_separated_block_quadrant(canvas, "12"), + // '𜰤' - SEPARATED BLOCK QUADRANT-3 + 0x1cc24 => try self.draw_separated_block_quadrant(canvas, "3"), + // '𜰥' - SEPARATED BLOCK QUADRANT-13 + 0x1cc25 => try self.draw_separated_block_quadrant(canvas, "13"), + // '𜰦' - SEPARATED BLOCK QUADRANT-23 + 0x1cc26 => try self.draw_separated_block_quadrant(canvas, "23"), + // '𜰧' - SEPARATED BLOCK QUADRANT-123 + 0x1cc27 => try self.draw_separated_block_quadrant(canvas, "123"), + // '𜰨' - SEPARATED BLOCK QUADRANT-4 + 0x1cc28 => try self.draw_separated_block_quadrant(canvas, "4"), + // '𜰩' - SEPARATED BLOCK QUADRANT-14 + 0x1cc29 => try self.draw_separated_block_quadrant(canvas, "14"), + // '𜰪' - SEPARATED BLOCK QUADRANT-24 + 0x1cc2a => try self.draw_separated_block_quadrant(canvas, "24"), + // '𜰫' - SEPARATED BLOCK QUADRANT-124 + 0x1cc2b => try self.draw_separated_block_quadrant(canvas, "124"), + // '𜰬' - SEPARATED BLOCK QUADRANT-34 + 0x1cc2c => try self.draw_separated_block_quadrant(canvas, "34"), + // '𜰭' - SEPARATED BLOCK QUADRANT-134 + 0x1cc2d => try self.draw_separated_block_quadrant(canvas, "134"), + // '𜰮' - SEPARATED BLOCK QUADRANT-234 + 0x1cc2e => try self.draw_separated_block_quadrant(canvas, "234"), + // '𜰯' - SEPARATED BLOCK QUADRANT-1234 + 0x1cc2f => try self.draw_separated_block_quadrant(canvas, "1234"), + else => return error.InvalidCodepoint, } } @@ -2865,6 +2896,89 @@ fn rect( } }).rect(), .on); } +// Separated Block Quadrants from Symbols for Legacy Computing Supplement +// 𜰡 𜰢 𜰣 𜰤 𜰥 𜰦 𜰧 𜰨 𜰩 𜰪 𜰫 𜰬 𜰭 𜰮 𜰯 +fn draw_separated_block_quadrant(self: Box, canvas: *font.sprite.Canvas, comptime fmt: []const u8) !void { + comptime { + if (fmt.len > 4) @compileError("cannot have more than four quadrants"); + var seen = [_]bool{false} ** (std.math.maxInt(u8) + 1); + for (fmt) |c| { + if (seen[c]) @compileError("repeated quadrants not allowed"); + seen[c] = true; + switch (c) { + '1'...'4' => {}, + else => @compileError("invalid quadrant"), + } + } + } + + var ctx: z2d.Context = .{ + .surface = canvas.sfc, + .pattern = .{ + .opaque_pattern = .{ + .pixel = .{ .alpha8 = .{ .a = @intFromEnum(Shade.on) } }, + }, + }, + }; + + const left: f64 = 0.5; + const right = @as(f64, @floatFromInt(self.metrics.cell_width)) - 0.5; + const top: f64 = 0.5; + const bottom = @as(f64, @floatFromInt(self.metrics.cell_height)) - 0.5; + const center_x = @as(f64, @floatFromInt(self.metrics.cell_width)) / 2.0; + const center_left = center_x - 0.5; + const center_right = center_x + 0.5; + const center_y = @as(f64, @floatFromInt(self.metrics.cell_height)) / 2.0; + const center_top = center_y - 0.5; + const center_bottom = center_y + 0.5; + + inline for (fmt) |c| { + switch (c) { + '1' => { + var path = z2d.Path.init(canvas.alloc); + defer path.deinit(); + try path.moveTo(left, top); + try path.lineTo(center_left, top); + try path.lineTo(center_left, center_top); + try path.lineTo(left, center_top); + try path.close(); + try ctx.fill(canvas.alloc, path); + }, + '2' => { + var path = z2d.Path.init(canvas.alloc); + defer path.deinit(); + try path.moveTo(center_right, top); + try path.lineTo(right, top); + try path.lineTo(right, center_top); + try path.lineTo(center_right, center_top); + try path.close(); + try ctx.fill(canvas.alloc, path); + }, + '3' => { + var path = z2d.Path.init(canvas.alloc); + defer path.deinit(); + try path.moveTo(left, center_bottom); + try path.lineTo(center_left, center_bottom); + try path.lineTo(center_left, bottom); + try path.lineTo(left, bottom); + try path.close(); + try ctx.fill(canvas.alloc, path); + }, + '4' => { + var path = z2d.Path.init(canvas.alloc); + defer path.deinit(); + try path.moveTo(center_right, center_bottom); + try path.lineTo(right, center_bottom); + try path.lineTo(right, bottom); + try path.lineTo(center_right, bottom); + try path.close(); + try ctx.fill(canvas.alloc, path); + }, + else => unreachable, + } + } +} + test "all" { const testing = std.testing; const alloc = testing.allocator; @@ -2994,6 +3108,20 @@ fn testRenderAll(self: Box, alloc: Allocator, atlas: *font.Atlas) !void { cp, ); } + + // Symbols for Legacy Computing Supplement. + // 𜰡 𜰢 𜰣 𜰤 𜰥 𜰦 𜰧 𜰨 𜰩 𜰪 𜰫 𜰬 𜰭 𜰮 𜰯 + cp = 0x1cc21; + while (cp <= 0x1cc2f) : (cp += 1) { + switch (cp) { + 0x1cc21...0x1cc2f => _ = try self.renderGlyph( + alloc, + atlas, + cp, + ), + else => {}, + } + } } test "render all sprites" { diff --git a/src/font/sprite/Face.zig b/src/font/sprite/Face.zig index ede67d00d9..83dfffefab 100644 --- a/src/font/sprite/Face.zig +++ b/src/font/sprite/Face.zig @@ -152,7 +152,6 @@ pub fn renderGlyph( break :cursor g; }, - }; } @@ -263,6 +262,10 @@ const Kind = enum { //             0xF5D0...0xF60D => .box, + // Separated Block Quadrants from Symbols for Legacy Computing Supplement + // 𜰡 𜰢 𜰣 𜰤 𜰥 𜰦 𜰧 𜰨 𜰩 𜰪 𜰫 𜰬 𜰭 𜰮 𜰯 + 0x1CC21...0x1CC2F => .box, + // Powerline fonts 0xE0B0, 0xE0B1, diff --git a/src/font/sprite/testdata/Box.ppm b/src/font/sprite/testdata/Box.ppm index 1301a4299816fec222672eb24f327db221007b21..331d19502bc75a7ac691d782779325c26ca41b59 100644 GIT binary patch delta 19727 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 From 3588d81dcbc8cd7ef6a7afa93bfc75afd63d91f1 Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Sun, 15 Dec 2024 17:59:04 -0600 Subject: [PATCH 2/4] simplify the code for separated block quadrants --- src/font/sprite/Box.zig | 77 +++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 46 deletions(-) diff --git a/src/font/sprite/Box.zig b/src/font/sprite/Box.zig index 438af2c4cf..f48b505985 100644 --- a/src/font/sprite/Box.zig +++ b/src/font/sprite/Box.zig @@ -2921,61 +2921,46 @@ fn draw_separated_block_quadrant(self: Box, canvas: *font.sprite.Canvas, comptim }, }; - const left: f64 = 0.5; - const right = @as(f64, @floatFromInt(self.metrics.cell_width)) - 0.5; - const top: f64 = 0.5; - const bottom = @as(f64, @floatFromInt(self.metrics.cell_height)) - 0.5; + const gap: f64 = @max(1.0, @as(f64, @floatFromInt(self.metrics.cell_width)) * 0.10) / 2.0; + const left: f64 = gap; + const right = @as(f64, @floatFromInt(self.metrics.cell_width)) - gap; + const top: f64 = gap; + const bottom = @as(f64, @floatFromInt(self.metrics.cell_height)) - gap; const center_x = @as(f64, @floatFromInt(self.metrics.cell_width)) / 2.0; - const center_left = center_x - 0.5; - const center_right = center_x + 0.5; + const center_left = center_x - gap; + const center_right = center_x + gap; const center_y = @as(f64, @floatFromInt(self.metrics.cell_height)) / 2.0; - const center_top = center_y - 0.5; - const center_bottom = center_y + 0.5; + const center_top = center_y - gap; + const center_bottom = center_y + gap; inline for (fmt) |c| { - switch (c) { - '1' => { - var path = z2d.Path.init(canvas.alloc); - defer path.deinit(); - try path.moveTo(left, top); - try path.lineTo(center_left, top); - try path.lineTo(center_left, center_top); - try path.lineTo(left, center_top); - try path.close(); - try ctx.fill(canvas.alloc, path); + const x1, const y1, const x2, const y2 = switch (c) { + '1' => .{ + left, top, + center_left, center_top, }, - '2' => { - var path = z2d.Path.init(canvas.alloc); - defer path.deinit(); - try path.moveTo(center_right, top); - try path.lineTo(right, top); - try path.lineTo(right, center_top); - try path.lineTo(center_right, center_top); - try path.close(); - try ctx.fill(canvas.alloc, path); + '2' => .{ + center_right, top, + right, center_top, }, - '3' => { - var path = z2d.Path.init(canvas.alloc); - defer path.deinit(); - try path.moveTo(left, center_bottom); - try path.lineTo(center_left, center_bottom); - try path.lineTo(center_left, bottom); - try path.lineTo(left, bottom); - try path.close(); - try ctx.fill(canvas.alloc, path); + '3' => .{ + left, center_bottom, + center_left, bottom, }, - '4' => { - var path = z2d.Path.init(canvas.alloc); - defer path.deinit(); - try path.moveTo(center_right, center_bottom); - try path.lineTo(right, center_bottom); - try path.lineTo(right, bottom); - try path.lineTo(center_right, bottom); - try path.close(); - try ctx.fill(canvas.alloc, path); + '4' => .{ + center_right, center_bottom, + right, bottom, }, else => unreachable, - } + }; + var path = z2d.Path.init(canvas.alloc); + defer path.deinit(); + try path.moveTo(x1, y1); + try path.lineTo(x2, y1); + try path.lineTo(x2, y2); + try path.lineTo(x1, y2); + try path.close(); + try ctx.fill(canvas.alloc, path); } } From 0c6f4afb34185423602ce70568556acd4cb515da Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Sun, 15 Dec 2024 18:00:50 -0600 Subject: [PATCH 3/4] fix sprite drawing test --- src/font/sprite/testdata/Box.ppm | Bin 1048593 -> 1048593 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/font/sprite/testdata/Box.ppm b/src/font/sprite/testdata/Box.ppm index 331d19502bc75a7ac691d782779325c26ca41b59..56d1908424c84d17ca1cd9f847f9d460c8d9cf13 100644 GIT binary patch delta 7929 zcmeHMO=uHA6z(S3&TM{6)%++{yVhze6pi#!Xe;eO5GrjE#Cj8|k~Ro?EK*I>K#p}A z;awC~5bQzFU}3$e#e+fx?NRVx1wr(n1wB|&iEp-T#x$FnL)vC_7iKg2GHl-W=KXy0 zq9(f4M0X-7Bppd-(v=jGwNvEqbI=wMfaCOENg!qih4=+b)Fdg|s^@(@n zwgb**#jP7%D$J@>*r;KDlry8M<#KT65#0%AqmqkhzD-ZPCzI8qwP_J9&RINIL!iZI zBjXYhJnSdu^zM&jO0ZgGH^W1~e~i@X^-VP3uo|9XUcx1O$7-SL774(w(;i03}TvuNO1tYSQeRQV=EqQnocW26V3 z#mGRZTW8g7iU9&ot99@uE%@{Zr5%opEF0(ErM#eHUU*d`^PmjoK08Dh$%nwN!KD5~u;?^@}wuS!IFSjjZTgdc(5*|tDB6c3ir)_Q*KHGE)tpn+Qn@3!b zA~Hbt4&+6Jtz%cEZExg;HhGB5nE3^c&PMJP*6`BBv9~D z(j4AJAqSy7SZYvMFILfm2SIul)PtZ%5z!tLTH>2YoZV!zX;P5pX9s3^`*t$f@6DU{ zX1>{EJerJ0;|VEYPqZW)31`Cfl#IS|PAXVH8j%BiHk*y#p<+@eavg7x3_EM8eJb|L z3)^#4R^zY9rrn`rvsq|wl|wyDVnwmp6fU611opJ|h}sQ6{Ipw!^fdKC`j1mihP@SN zR^jEo)33WkmdMFu_`FV2)IhtOCSGRBC(6R+amy(N^DzN4!aWX3Q|Ztl4Bm zp3pIo5{j||%M?l~{UHdEZOH|1Zqq<2@`b9a@5zH2$S&pI8#->%9++QnJJ^eNs>>hA zdJVjE*;H%{UD}ilLVA%7vP|iQ$1~)b8vRV3NOhODN&zC^yFgrO-&fLAeBIx^=M-0QgmyFEbi#NVA;x}?PZHpDxb7U(h*Q&O z*E4AmY-wO0$MLZ&Gfq*L-1 zL>7n--Yt?Tc(F)gW|#4!AD)AN;O476wej7%HtL}En%XQ^zj^1`IT!C#jCXJCQ#yJ8 z$%0&|O2=sg+?4ByhJPI$MkoGU2)eG#bO8m68N*Qk+Jm5@I@cAiT8)k~5}bX&KRjV)R6#gCM+ev?2uqvPn+#w7 zpHA5zBwVN@3CD;z$dt2gCcMX36knL7<1(p-vE#Vd`1N XzOlNo%2?UG7i%llHg#pzcX#bCezMqd From d89db99f6c0221101a1ade5278a8415380f3e71a Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Sun, 15 Dec 2024 18:02:03 -0600 Subject: [PATCH 4/4] add Box_test*.ppm to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index c7a2cf20b9..0e301f8c41 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ test/ghostty test/cases/**/*.actual.png glad.zip +/Box_test.ppm +/Box_test_diff.ppm