mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
font/freetype: CBDT/CBLC tables imply color
This commit is contained in:
@ -135,6 +135,15 @@ pub const Face = struct {
|
|||||||
return buf;
|
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.
|
/// Retrieve the font variation descriptor for a font.
|
||||||
pub fn getMMVar(self: Face) Error!*c.FT_MM_Var {
|
pub fn getMMVar(self: Face) Error!*c.FT_MM_Var {
|
||||||
var result: *c.FT_MM_Var = undefined;
|
var result: *c.FT_MM_Var = undefined;
|
||||||
|
@ -216,6 +216,11 @@ pub const Face = struct {
|
|||||||
// sbix table is always true for now
|
// sbix table is always true for now
|
||||||
if (self.face.hasSBIX()) return true;
|
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.
|
// Otherwise, load the glyph and see what format it is in.
|
||||||
self.face.loadGlyph(glyph_id, .{
|
self.face.loadGlyph(glyph_id, .{
|
||||||
.render = true,
|
.render = true,
|
||||||
@ -698,6 +703,13 @@ test "color emoji" {
|
|||||||
|
|
||||||
_ = try ft_font.renderGlyph(alloc, &atlas, ft_font.glyphIndex('🥸').?, .{});
|
_ = 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
|
// resize
|
||||||
{
|
{
|
||||||
const glyph = try ft_font.renderGlyph(alloc, &atlas, ft_font.glyphIndex('🥸').?, .{
|
const glyph = try ft_font.renderGlyph(alloc, &atlas, ft_font.glyphIndex('🥸').?, .{
|
||||||
|
Reference in New Issue
Block a user