mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
font/freetype: CBDT/CBLC tables imply color
This commit is contained in:
@ -135,6 +135,15 @@ pub const Face = struct {
|
||||
return buf;
|
||||
}
|
||||
|
||||
/// Check whether a given SFNT table is available in a face.
|
||||
pub fn hasSfntTable(self: Face, tag: Tag) bool {
|
||||
const tag_u64: u64 = @intCast(@as(u32, @bitCast(tag)));
|
||||
var len: c_ulong = 0;
|
||||
const res = c.FT_Load_Sfnt_Table(self.handle, tag_u64, 0, null, &len);
|
||||
_ = intToError(res) catch return false;
|
||||
return len != 0;
|
||||
}
|
||||
|
||||
/// Retrieve the font variation descriptor for a font.
|
||||
pub fn getMMVar(self: Face) Error!*c.FT_MM_Var {
|
||||
var result: *c.FT_MM_Var = undefined;
|
||||
|
@ -216,6 +216,11 @@ pub const Face = struct {
|
||||
// sbix table is always true for now
|
||||
if (self.face.hasSBIX()) return true;
|
||||
|
||||
// CBDT/CBLC tables always imply colorized glyphs.
|
||||
// These are used by Noto.
|
||||
if (self.face.hasSfntTable(freetype.Tag.init("CBDT"))) return true;
|
||||
if (self.face.hasSfntTable(freetype.Tag.init("CBLC"))) return true;
|
||||
|
||||
// Otherwise, load the glyph and see what format it is in.
|
||||
self.face.loadGlyph(glyph_id, .{
|
||||
.render = true,
|
||||
@ -698,6 +703,13 @@ test "color emoji" {
|
||||
|
||||
_ = try ft_font.renderGlyph(alloc, &atlas, ft_font.glyphIndex('🥸').?, .{});
|
||||
|
||||
// Make sure this glyph has color
|
||||
{
|
||||
try testing.expect(ft_font.hasColor());
|
||||
const glyph_id = ft_font.glyphIndex('🥸').?;
|
||||
try testing.expect(ft_font.isColorGlyph(glyph_id));
|
||||
}
|
||||
|
||||
// resize
|
||||
{
|
||||
const glyph = try ft_font.renderGlyph(alloc, &atlas, ft_font.glyphIndex('🥸').?, .{
|
||||
|
Reference in New Issue
Block a user