From 9c99a49ac57975f38e0a6c499208dcf5a3708918 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sun, 9 Oct 2022 11:28:28 -0700 Subject: [PATCH] font: deferred face can load core text backend --- src/Window.zig | 25 ++++++++++++++----------- src/font/DeferredFace.zig | 12 ++++++++++++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/Window.zig b/src/Window.zig index 1d15d114d..b17d060f7 100644 --- a/src/Window.zig +++ b/src/Window.zig @@ -339,17 +339,20 @@ pub fn create(alloc: Allocator, loop: libuv.Loop, config: *const Config) !*Windo font.DeferredFace.initLoaded(try font.Face.init(font_lib, face_bold_ttf, font_size)), ); - // Emoji - try group.addFace( - alloc, - .regular, - font.DeferredFace.initLoaded(try font.Face.init(font_lib, face_emoji_ttf, font_size)), - ); - try group.addFace( - alloc, - .regular, - font.DeferredFace.initLoaded(try font.Face.init(font_lib, face_emoji_text_ttf, font_size)), - ); + // Emoji fallback. We don't include this on Mac since Mac is expected + // to always have the Apple Emoji available. + if (builtin.os.tag != .macos or font.Discover == void) { + try group.addFace( + alloc, + .regular, + font.DeferredFace.initLoaded(try font.Face.init(font_lib, face_emoji_ttf, font_size)), + ); + try group.addFace( + alloc, + .regular, + font.DeferredFace.initLoaded(try font.Face.init(font_lib, face_emoji_text_ttf, font_size)), + ); + } break :group group; }); diff --git a/src/font/DeferredFace.zig b/src/font/DeferredFace.zig index ed4a4517d..0407ec3c9 100644 --- a/src/font/DeferredFace.zig +++ b/src/font/DeferredFace.zig @@ -115,6 +115,7 @@ pub fn load( // both here. switch (font.Face) { @import("face/freetype.zig").Face => try self.loadCoreTextFreetype(lib, size), + @import("face/coretext.zig").Face => try self.loadCoreText(lib, size), else => unreachable, } @@ -142,6 +143,17 @@ fn loadFontconfig( self.face = try Face.initFile(lib, filename, face_index, size); } +fn loadCoreText( + self: *DeferredFace, + lib: Library, + size: font.face.DesiredSize, +) !void { + _ = lib; + assert(self.face == null); + const ct = self.ct.?; + self.face = try Face.initFontCopy(ct.font, size); +} + fn loadCoreTextFreetype( self: *DeferredFace, lib: Library,