static hb_font_funcs_t* harfBuzzCoreTextGetFontFuncs() { static hb_font_funcs_t* harfBuzzCoreTextFontFuncs = 0; if (!harfBuzzCoreTextFontFuncs) { harfBuzzCoreTextFontFuncs = hb_font_funcs_create(); hb_font_funcs_set_glyph_func(harfBuzzCoreTextFontFuncs, getGlyph, 0, 0); hb_font_funcs_set_glyph_h_advance_func(harfBuzzCoreTextFontFuncs, getGlyphHorizontalAdvance, 0, 0); hb_font_funcs_set_glyph_h_origin_func(harfBuzzCoreTextFontFuncs, getGlyphHorizontalOrigin, 0, 0); hb_font_funcs_set_glyph_extents_func(harfBuzzCoreTextFontFuncs, getGlyphExtents, 0, 0); hb_font_funcs_make_immutable(harfBuzzCoreTextFontFuncs); } return harfBuzzCoreTextFontFuncs; }
static hb_font_funcs_t* harfbuzzSkiaGetFontFuncs() { static hb_font_funcs_t* harfbuzzSkiaFontFuncs = 0; // We don't set callback functions which we can't support. // Harfbuzz will use the fallback implementation if they aren't set. if (!harfbuzzSkiaFontFuncs) { harfbuzzSkiaFontFuncs = hb_font_funcs_create(); hb_font_funcs_set_glyph_func(harfbuzzSkiaFontFuncs, harfbuzzGetGlyph, 0, 0); hb_font_funcs_set_glyph_h_advance_func(harfbuzzSkiaFontFuncs, harfbuzzGetGlyphHorizontalAdvance, 0, 0); hb_font_funcs_set_glyph_h_origin_func(harfbuzzSkiaFontFuncs, harfbuzzGetGlyphHorizontalOrigin, 0, 0); hb_font_funcs_set_glyph_extents_func(harfbuzzSkiaFontFuncs, harfbuzzGetGlyphExtents, 0, 0); hb_font_funcs_make_immutable(harfbuzzSkiaFontFuncs); } return harfbuzzSkiaFontFuncs; }
static hb_font_funcs_t * _get_font_funcs(void) { static hb_font_funcs_t* funcs = hb_font_funcs_create(); hb_font_funcs_set_glyph_func (funcs, _get_glyph, NULL, NULL); hb_font_funcs_set_glyph_h_advance_func (funcs, _get_glyph_h_advance, NULL, NULL); hb_font_funcs_set_glyph_v_advance_func (funcs, _get_glyph_v_advance, NULL, NULL); hb_font_funcs_set_glyph_h_origin_func (funcs, _get_glyph_h_origin, NULL, NULL); hb_font_funcs_set_glyph_v_origin_func (funcs, _get_glyph_v_origin, NULL, NULL); hb_font_funcs_set_glyph_h_kerning_func (funcs, _get_glyph_h_kerning, NULL, NULL); hb_font_funcs_set_glyph_v_kerning_func (funcs, _get_glyph_v_kerning, NULL, NULL); hb_font_funcs_set_glyph_extents_func (funcs, _get_glyph_extents, NULL, NULL); hb_font_funcs_set_glyph_contour_point_func (funcs, _get_glyph_contour_point, NULL, NULL); hb_font_funcs_set_glyph_name_func (funcs, _get_glyph_name, NULL, NULL); return funcs; }
static hb_font_funcs_t * icu_le_hb_get_font_funcs (void) { static hb_font_funcs_t *ffuncs = NULL; retry: if (!ffuncs) { /* Only pseudo-thread-safe... */ hb_font_funcs_t *f = hb_font_funcs_create (); hb_font_funcs_set_glyph_func (f, icu_le_hb_font_get_glyph, NULL, NULL); hb_font_funcs_set_glyph_h_advance_func (f, icu_le_hb_font_get_glyph_h_advance, NULL, NULL); hb_font_funcs_set_glyph_contour_point_func (f, icu_le_hb_font_get_glyph_contour_point, NULL, NULL); if (!ffuncs) ffuncs = f; else { hb_font_funcs_destroy (f); goto retry; } } return ffuncs; }