[ot-font] Use the cmap cache more
Use the cmap cache for get_nominal_glyph and get_variation_glyph as well. The first of these is used a lot in pango.
This commit is contained in:
parent
5da829eaf5
commit
318aa10708
|
@ -1898,7 +1898,6 @@ struct cmap
|
|||
bool get_nominal_glyph (hb_codepoint_t unicode,
|
||||
hb_codepoint_t *glyph) const
|
||||
{
|
||||
if (unlikely (!this->get_glyph_funcZ)) return false;
|
||||
return this->get_glyph_funcZ (this->get_glyph_data, unicode, glyph);
|
||||
}
|
||||
|
||||
|
@ -1913,12 +1912,20 @@ struct cmap
|
|||
*glyph = v;
|
||||
return true;
|
||||
}
|
||||
bool ret = this->get_glyph_funcZ (this->get_glyph_data, unicode, glyph);
|
||||
bool ret = get_nominal_glyph (unicode, glyph);
|
||||
if (cache && ret)
|
||||
cache->set (unicode, *glyph);
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <typename cache_t = void>
|
||||
bool get_nominal_glyph (hb_codepoint_t unicode,
|
||||
hb_codepoint_t *glyph,
|
||||
cache_t *cache = nullptr) const
|
||||
{
|
||||
return _cached_get (unicode, glyph, cache);
|
||||
}
|
||||
|
||||
template <typename cache_t = void>
|
||||
unsigned int get_nominal_glyphs (unsigned int count,
|
||||
const hb_codepoint_t *first_unicode,
|
||||
|
@ -1940,9 +1947,11 @@ struct cmap
|
|||
return done;
|
||||
}
|
||||
|
||||
template <typename cache_t = void>
|
||||
bool get_variation_glyph (hb_codepoint_t unicode,
|
||||
hb_codepoint_t variation_selector,
|
||||
hb_codepoint_t *glyph) const
|
||||
hb_codepoint_t *glyph,
|
||||
cache_t *cache = nullptr) const
|
||||
{
|
||||
switch (this->subtable_uvs->get_glyph_variant (unicode,
|
||||
variation_selector,
|
||||
|
@ -1953,7 +1962,7 @@ struct cmap
|
|||
case GLYPH_VARIANT_USE_DEFAULT: break;
|
||||
}
|
||||
|
||||
return get_nominal_glyph (unicode, glyph);
|
||||
return get_nominal_glyph (unicode, glyph, cache);
|
||||
}
|
||||
|
||||
void collect_unicodes (hb_set_t *out, unsigned int num_glyphs) const
|
||||
|
|
|
@ -136,7 +136,7 @@ hb_ot_get_nominal_glyph (hb_font_t *font HB_UNUSED,
|
|||
{
|
||||
const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
|
||||
const hb_ot_face_t *ot_face = ot_font->ot_face;
|
||||
return ot_face->cmap->get_nominal_glyph (unicode, glyph);
|
||||
return ot_face->cmap->get_nominal_glyph (unicode, glyph, ot_font->cmap_cache);
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
|
@ -167,7 +167,9 @@ hb_ot_get_variation_glyph (hb_font_t *font HB_UNUSED,
|
|||
{
|
||||
const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
|
||||
const hb_ot_face_t *ot_face = ot_font->ot_face;
|
||||
return ot_face->cmap->get_variation_glyph (unicode, variation_selector, glyph);
|
||||
return ot_face->cmap->get_variation_glyph (unicode,
|
||||
variation_selector, glyph,
|
||||
ot_font->cmap_cache);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue