From 5d27fd55e92fa4b3ea874ccb87a9ae1fb5a84dfb Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 19 Aug 2022 16:24:06 -0700 Subject: [PATCH 01/16] temp: add libpng to nix --- nix/devshell.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nix/devshell.nix b/nix/devshell.nix index b587e1915..b25f8f8d5 100644 --- a/nix/devshell.nix +++ b/nix/devshell.nix @@ -29,6 +29,7 @@ let # See package.nix. Keep in sync. rpathLibs = [ + libpng libGL ] ++ lib.optionals stdenv.isLinux [ libX11 @@ -61,6 +62,7 @@ in mkShell rec { buildInputs = [ # TODO: non-linux ] ++ lib.optionals stdenv.isLinux [ + libpng libX11 libXcursor libXext From 3d6ca0e4239a0f2ac6f07c92515a0dc5294e2336 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 19 Aug 2022 16:28:47 -0700 Subject: [PATCH 02/16] font face supports loading color fonts (emoji!) --- src/font/Face.zig | 82 +++++++++++++++++++++++++++----- src/font/res/NotoColorEmoji.ttf | Bin 0 -> 9867108 bytes src/font/test.zig | 1 + 3 files changed, 72 insertions(+), 11 deletions(-) create mode 100755 src/font/res/NotoColorEmoji.ttf diff --git a/src/font/Face.zig b/src/font/Face.zig index 98305705e..3250ef58f 100644 --- a/src/font/Face.zig +++ b/src/font/Face.zig @@ -58,8 +58,31 @@ pub fn loadFaceFromMemory(self: *Face, source: [:0]const u8, size: u32) !void { if (ftc.FT_Select_Charmap(self.ft_face, ftc.FT_ENCODING_UNICODE) != ftok) return error.FaceLoadFailed; - if (ftc.FT_Set_Pixel_Sizes(self.ft_face, size, size) != ftok) - return error.FaceLoadFailed; + // If we have fixed sizes, we just have to try to pick the one closest + // to what the user requested. Otherwise, we can choose an arbitrary + // pixel size. + if (!ftc.FT_HAS_FIXED_SIZES(self.ft_face)) { + if (ftc.FT_Set_Pixel_Sizes(self.ft_face, size, size) != ftok) + return error.FaceLoadFailed; + } else try self.selectSizeNearest(size); +} + +/// Selects the fixed size in the loaded face that is closest to the +/// requested pixel size. +fn selectSizeNearest(self: *Face, size: u32) !void { + var i: usize = 0; + var best_i: usize = 0; + var best_diff: i32 = 0; + while (i < self.ft_face.*.num_fixed_sizes) : (i += 1) { + const diff = @intCast(i32, size) - @intCast(i32, self.ft_face.*.available_sizes[i].width); + if (i == 0 or diff < best_diff) { + best_diff = diff; + best_i = i; + } + } + + if (ftc.FT_Select_Size(self.ft_face, @intCast(c_int, best_i)) != ftok) + return error.FaceSelectSizeFailed; } /// Load a glyph for this face. The codepoint can be either a u8 or @@ -69,7 +92,7 @@ pub fn loadGlyph(self: Face, alloc: Allocator, atlas: *Atlas, cp: u32) !Glyph { // We need a UTF32 codepoint for freetype const glyph_index = glyph_index: { - // log.warn("glyph load: {x}", .{cp}); + //log.warn("glyph load: {x}", .{cp}); const idx = ftc.FT_Get_Char_Index(self.ft_face, cp); if (idx > 0) break :glyph_index idx; @@ -79,16 +102,32 @@ pub fn loadGlyph(self: Face, alloc: Allocator, atlas: *Atlas, cp: u32) !Glyph { // TODO: render something more identifiable than a space break :glyph_index ftc.FT_Get_Char_Index(self.ft_face, ' '); }; + //log.warn("glyph index: {}", .{glyph_index}); + + // If our glyph has color, we want to render the color + var load_flags: c_int = ftc.FT_LOAD_RENDER; + if (ftc.FT_HAS_COLOR(self.ft_face)) load_flags |= @intCast(c_int, ftc.FT_LOAD_COLOR); if (ftc.FT_Load_Glyph( self.ft_face, glyph_index, - ftc.FT_LOAD_RENDER, + load_flags, ) != ftok) return error.LoadGlyphFailed; const glyph = self.ft_face.*.glyph; const bitmap = glyph.*.bitmap; - assert(bitmap.pixel_mode == ftc.FT_PIXEL_MODE_GRAY); + + // Ensure we know how to work with the font format. And assure that + // or color depth is as expected on the texture atlas. + const format: Atlas.Format = switch (bitmap.pixel_mode) { + ftc.FT_PIXEL_MODE_GRAY => .greyscale, + ftc.FT_PIXEL_MODE_BGRA => .rgba, + else => { + log.warn("pixel mode={}", .{bitmap.pixel_mode}); + @panic("unsupported pixel mode"); + }, + }; + assert(atlas.format == format); const src_w = bitmap.width; const src_h = bitmap.rows; @@ -99,24 +138,26 @@ pub fn loadGlyph(self: Face, alloc: Allocator, atlas: *Atlas, cp: u32) !Glyph { // If we have data, copy it into the atlas if (region.width > 0 and region.height > 0) { + const depth = @enumToInt(format); + // We can avoid a buffer copy if our atlas width and bitmap // width match and the bitmap pitch is just the width (meaning // the data is tightly packed). - const needs_copy = !(tgt_w == bitmap.width and bitmap.width == bitmap.pitch); + const needs_copy = !(tgt_w == bitmap.width and (bitmap.width * depth) == bitmap.pitch); // If we need to copy the data, we copy it into a temporary buffer. const buffer = if (needs_copy) buffer: { - var temp = try alloc.alloc(u8, tgt_w * tgt_h); + var temp = try alloc.alloc(u8, tgt_w * tgt_h * depth); var dst_ptr = temp; var src_ptr = bitmap.buffer; var i: usize = 0; while (i < src_h) : (i += 1) { - std.mem.copy(u8, dst_ptr, src_ptr[0..bitmap.width]); - dst_ptr = dst_ptr[tgt_w..]; + std.mem.copy(u8, dst_ptr, src_ptr[0 .. bitmap.width * depth]); + dst_ptr = dst_ptr[tgt_w * depth ..]; src_ptr += @intCast(usize, bitmap.pitch); } break :buffer temp; - } else bitmap.buffer[0..(tgt_w * tgt_h)]; + } else bitmap.buffer[0..(tgt_w * tgt_h * depth)]; defer if (buffer.ptr != bitmap.buffer) alloc.free(buffer); // Write the glyph information into the atlas @@ -149,6 +190,8 @@ fn f26dot6ToFloat(v: ftc.FT_F26Dot6) f32 { } test { + const testFont = @import("test.zig").fontRegular; + var ft_lib: ftc.FT_Library = undefined; if (ftc.FT_Init_FreeType(&ft_lib) != ftok) return error.FreeTypeInitFailed; @@ -170,4 +213,21 @@ test { } } -const testFont = @embedFile("res/Inconsolata-Regular.ttf"); +test "color emoji" { + const testFont = @import("test.zig").fontEmoji; + + var ft_lib: ftc.FT_Library = undefined; + if (ftc.FT_Init_FreeType(&ft_lib) != ftok) + return error.FreeTypeInitFailed; + defer _ = ftc.FT_Done_FreeType(ft_lib); + + const alloc = testing.allocator; + var atlas = try Atlas.init(alloc, 512, .rgba); + defer atlas.deinit(alloc); + + var font = try init(ft_lib); + defer font.deinit(); + + try font.loadFaceFromMemory(testFont, 48); + _ = try font.loadGlyph(alloc, &atlas, '🥸'); +} diff --git a/src/font/res/NotoColorEmoji.ttf b/src/font/res/NotoColorEmoji.ttf new file mode 100755 index 0000000000000000000000000000000000000000..2c1f104350d5183df04ccfb8159a1382e3b32ba4 GIT binary patch literal 9867108 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

aaef7LHtl3S+=oE81#m7x+^ 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