mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
font: coretext initialize face from memory
This commit is contained in:
@ -14,6 +14,24 @@ pub const Face = struct {
|
|||||||
/// The presentation for this font.
|
/// The presentation for this font.
|
||||||
presentation: font.Presentation,
|
presentation: font.Presentation,
|
||||||
|
|
||||||
|
/// Initialize a CoreText-based font from a TTF/TTC in memory.
|
||||||
|
pub fn init(lib: font.Library, source: [:0]const u8, size: font.face.DesiredSize) !Face {
|
||||||
|
_ = lib;
|
||||||
|
|
||||||
|
const data = try macos.foundation.Data.createWithBytesNoCopy(source);
|
||||||
|
defer data.release();
|
||||||
|
|
||||||
|
const arr = macos.text.createFontDescriptorsFromData(data) orelse
|
||||||
|
return error.FontInitFailure;
|
||||||
|
defer arr.release();
|
||||||
|
|
||||||
|
const desc = arr.getValueAtIndex(macos.text.FontDescriptor, 0);
|
||||||
|
const ct_font = try macos.text.Font.createWithFontDescriptor(desc, 12);
|
||||||
|
defer ct_font.release();
|
||||||
|
|
||||||
|
return try initFontCopy(ct_font, size);
|
||||||
|
}
|
||||||
|
|
||||||
/// Initialize a CoreText-based face from another initialized font face
|
/// Initialize a CoreText-based face from another initialized font face
|
||||||
/// but with a new size. This is often how CoreText fonts are initialized
|
/// but with a new size. This is often how CoreText fonts are initialized
|
||||||
/// because the font is loaded at a default size during discovery, and then
|
/// because the font is loaded at a default size during discovery, and then
|
||||||
@ -104,3 +122,23 @@ test "emoji" {
|
|||||||
// Glyph index check
|
// Glyph index check
|
||||||
try testing.expect(face.glyphIndex('🥸') != null);
|
try testing.expect(face.glyphIndex('🥸') != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "in-memory" {
|
||||||
|
const testing = std.testing;
|
||||||
|
const testFont = @import("../test.zig").fontRegular;
|
||||||
|
|
||||||
|
var lib = try font.Library.init();
|
||||||
|
defer lib.deinit();
|
||||||
|
|
||||||
|
var face = try Face.init(lib, testFont, .{ .points = 12 });
|
||||||
|
defer face.deinit();
|
||||||
|
|
||||||
|
try testing.expectEqual(font.Presentation.text, face.presentation);
|
||||||
|
|
||||||
|
// Generate all visible ASCII
|
||||||
|
var i: u8 = 32;
|
||||||
|
while (i < 127) : (i += 1) {
|
||||||
|
try testing.expect(face.glyphIndex(i) != null);
|
||||||
|
//_ = try face.renderGlyph(alloc, &atlas, ft_font.glyphIndex(i).?);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user