Detect if a freetype font has color tables

This commit is contained in:
Kovid Goyal 2017-12-05 23:31:26 +05:30
parent 138bfcf2a8
commit 122ad8a1f8
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -24,7 +24,7 @@ typedef struct {
unsigned int units_per_EM; unsigned int units_per_EM;
int ascender, descender, height, max_advance_width, max_advance_height, underline_position, underline_thickness; int ascender, descender, height, max_advance_width, max_advance_height, underline_position, underline_thickness;
int hinting, hintstyle, index; int hinting, hintstyle, index;
bool is_scalable; bool is_scalable, has_color;
float size_in_pts; float size_in_pts;
FT_F26Dot6 char_width, char_height; FT_F26Dot6 char_width, char_height;
FT_UInt xdpi, ydpi; FT_UInt xdpi, ydpi;
@ -154,6 +154,7 @@ init_ft_face(Face *self, PyObject *path, int hinting, int hintstyle) {
CPY(units_per_EM); CPY(ascender); CPY(descender); CPY(height); CPY(max_advance_width); CPY(max_advance_height); CPY(underline_position); CPY(underline_thickness); CPY(units_per_EM); CPY(ascender); CPY(descender); CPY(height); CPY(max_advance_width); CPY(max_advance_height); CPY(underline_position); CPY(underline_thickness);
#undef CPY #undef CPY
self->is_scalable = FT_IS_SCALABLE(self->face); self->is_scalable = FT_IS_SCALABLE(self->face);
self->has_color = FT_HAS_COLOR(self->face);
self->hinting = hinting; self->hintstyle = hintstyle; self->hinting = hinting; self->hintstyle = hintstyle;
if (!set_size_for_face((PyObject*)self, 0, false)) return false; if (!set_size_for_face((PyObject*)self, 0, false)) return false;
self->harfbuzz_font = hb_ft_font_create(self->face, NULL); self->harfbuzz_font = hb_ft_font_create(self->face, NULL);
@ -257,11 +258,11 @@ dealloc(Face* self) {
static PyObject * static PyObject *
repr(Face *self) { repr(Face *self) {
return PyUnicode_FromFormat( return PyUnicode_FromFormat(
"Face(family=%s, style=%s, ps_name=%s, path=%S, index=%d, is_scalable=%S, units_per_EM=%u, ascender=%i, descender=%i, height=%i, underline_position=%i, underline_thickness=%i)", "Face(family=%s, style=%s, ps_name=%s, path=%S, index=%d, is_scalable=%S, has_color=%S, ascender=%i, descender=%i, height=%i, underline_position=%i, underline_thickness=%i)",
self->face->family_name ? self->face->family_name : "", self->face->style_name ? self->face->style_name : "", self->face->family_name ? self->face->family_name : "", self->face->style_name ? self->face->style_name : "",
FT_Get_Postscript_Name(self->face), FT_Get_Postscript_Name(self->face),
self->path, self->index, self->is_scalable ? Py_True : Py_False, self->path, self->index, self->is_scalable ? Py_True : Py_False, self->has_color ? Py_True : Py_False,
self->ascender, self->descender, self->height, self->max_advance_width, self->max_advance_height, self->underline_position, self->underline_thickness self->ascender, self->descender, self->height, self->underline_position, self->underline_thickness
); );
} }