[font] Fix parallel funcs passing to eachover in infinite-loop
Fixes test just added.
This commit is contained in:
parent
77d5c3df07
commit
08b7172969
|
@ -103,7 +103,7 @@ hb_font_get_nominal_glyph_default (hb_font_t *font,
|
||||||
hb_codepoint_t *glyph,
|
hb_codepoint_t *glyph,
|
||||||
void *user_data HB_UNUSED)
|
void *user_data HB_UNUSED)
|
||||||
{
|
{
|
||||||
if (font->has_nominal_glyphs_func ())
|
if (font->has_nominal_glyphs_func_set ())
|
||||||
{
|
{
|
||||||
return font->get_nominal_glyphs (1, &unicode, 0, glyph, 0);
|
return font->get_nominal_glyphs (1, &unicode, 0, glyph, 0);
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ hb_font_get_nominal_glyphs_default (hb_font_t *font,
|
||||||
unsigned int glyph_stride,
|
unsigned int glyph_stride,
|
||||||
void *user_data HB_UNUSED)
|
void *user_data HB_UNUSED)
|
||||||
{
|
{
|
||||||
if (font->has_nominal_glyph_func ())
|
if (font->has_nominal_glyph_func_set ())
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < count; i++)
|
for (unsigned int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
|
@ -176,7 +176,7 @@ hb_font_get_glyph_h_advance_default (hb_font_t *font,
|
||||||
hb_codepoint_t glyph,
|
hb_codepoint_t glyph,
|
||||||
void *user_data HB_UNUSED)
|
void *user_data HB_UNUSED)
|
||||||
{
|
{
|
||||||
if (font->has_glyph_h_advances_func ())
|
if (font->has_glyph_h_advances_func_set ())
|
||||||
{
|
{
|
||||||
hb_position_t ret;
|
hb_position_t ret;
|
||||||
font->get_glyph_h_advances (1, &glyph, 0, &ret, 0);
|
font->get_glyph_h_advances (1, &glyph, 0, &ret, 0);
|
||||||
|
@ -200,7 +200,7 @@ hb_font_get_glyph_v_advance_default (hb_font_t *font,
|
||||||
hb_codepoint_t glyph,
|
hb_codepoint_t glyph,
|
||||||
void *user_data HB_UNUSED)
|
void *user_data HB_UNUSED)
|
||||||
{
|
{
|
||||||
if (font->has_glyph_v_advances_func ())
|
if (font->has_glyph_v_advances_func_set ())
|
||||||
{
|
{
|
||||||
hb_position_t ret;
|
hb_position_t ret;
|
||||||
font->get_glyph_v_advances (1, &glyph, 0, &ret, 0);
|
font->get_glyph_v_advances (1, &glyph, 0, &ret, 0);
|
||||||
|
@ -220,7 +220,7 @@ hb_font_get_glyph_h_advances_default (hb_font_t* font,
|
||||||
unsigned int advance_stride,
|
unsigned int advance_stride,
|
||||||
void *user_data HB_UNUSED)
|
void *user_data HB_UNUSED)
|
||||||
{
|
{
|
||||||
if (font->has_glyph_h_advance_func ())
|
if (font->has_glyph_h_advance_func_set ())
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < count; i++)
|
for (unsigned int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
|
@ -252,7 +252,7 @@ hb_font_get_glyph_v_advances_default (hb_font_t* font,
|
||||||
unsigned int advance_stride,
|
unsigned int advance_stride,
|
||||||
void *user_data HB_UNUSED)
|
void *user_data HB_UNUSED)
|
||||||
{
|
{
|
||||||
if (font->has_glyph_v_advance_func ())
|
if (font->has_glyph_v_advance_func_set ())
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < count; i++)
|
for (unsigned int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
|
@ -687,10 +687,16 @@ hb_font_funcs_set_##name##_func (hb_font_funcs_t *ffuncs, \
|
||||||
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
|
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
|
||||||
#undef HB_FONT_FUNC_IMPLEMENT
|
#undef HB_FONT_FUNC_IMPLEMENT
|
||||||
|
|
||||||
|
bool
|
||||||
|
hb_font_t::has_func_set (unsigned int i)
|
||||||
|
{
|
||||||
|
return this->klass->get.array[i] != _hb_font_funcs_default.get.array[i];
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
hb_font_t::has_func (unsigned int i)
|
hb_font_t::has_func (unsigned int i)
|
||||||
{
|
{
|
||||||
return (this->klass->get.array[i] != _hb_font_funcs_default.get.array[i]) ||
|
return has_func_set (i) ||
|
||||||
(parent && parent != &_hb_Null_hb_font_t && parent->has_func (i));
|
(parent && parent != &_hb_Null_hb_font_t && parent->has_func (i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -171,6 +171,7 @@ struct hb_font_t
|
||||||
/* Public getters */
|
/* Public getters */
|
||||||
|
|
||||||
HB_INTERNAL bool has_func (unsigned int i);
|
HB_INTERNAL bool has_func (unsigned int i);
|
||||||
|
HB_INTERNAL bool has_func_set (unsigned int i);
|
||||||
|
|
||||||
/* has_* ... */
|
/* has_* ... */
|
||||||
#define HB_FONT_FUNC_IMPLEMENT(name) \
|
#define HB_FONT_FUNC_IMPLEMENT(name) \
|
||||||
|
@ -180,6 +181,13 @@ struct hb_font_t
|
||||||
hb_font_funcs_t *funcs = this->klass; \
|
hb_font_funcs_t *funcs = this->klass; \
|
||||||
unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
|
unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
|
||||||
return has_func (i); \
|
return has_func (i); \
|
||||||
|
} \
|
||||||
|
bool \
|
||||||
|
has_##name##_func_set (void) \
|
||||||
|
{ \
|
||||||
|
hb_font_funcs_t *funcs = this->klass; \
|
||||||
|
unsigned int i = offsetof (hb_font_funcs_t::get_t::get_funcs_t, name) / sizeof (funcs->get.array[0]); \
|
||||||
|
return has_func_set (i); \
|
||||||
}
|
}
|
||||||
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
|
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
|
||||||
#undef HB_FONT_FUNC_IMPLEMENT
|
#undef HB_FONT_FUNC_IMPLEMENT
|
||||||
|
|
Loading…
Reference in New Issue