[ot-font] Remove level of indirection in get_glyph_variant

This commit is contained in:
Behdad Esfahbod 2016-02-24 19:32:43 +09:00
parent 49fe6ecf19
commit 5473ebfb84
2 changed files with 11 additions and 16 deletions

View File

@ -388,7 +388,7 @@ struct CmapSubtableFormat14
}
protected:
USHORT format; /* Format number is set to 0. */
USHORT format; /* Format number is set to 14. */
ULONG lengthZ; /* Byte length of this subtable. */
SortedArrayOf<VariationSelectorRecord, ULONG>
record; /* Variation selector records; sorted
@ -416,16 +416,6 @@ struct CmapSubtable
}
}
inline glyph_variant_t get_glyph_variant (hb_codepoint_t codepoint,
hb_codepoint_t variation_selector,
hb_codepoint_t *glyph) const
{
switch (u.format) {
case 14: return u.format14.get_glyph_variant(codepoint, variation_selector, glyph);
default: return GLYPH_VARIANT_NOT_FOUND;
}
}
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@ -442,7 +432,7 @@ struct CmapSubtable
}
}
protected:
public:
union {
USHORT format; /* Format identifier */
CmapSubtableFormat0 format0;

View File

@ -204,7 +204,7 @@ struct hb_ot_face_glyf_accelerator_t
struct hb_ot_face_cmap_accelerator_t
{
const OT::CmapSubtable *table;
const OT::CmapSubtable *uvs_table;
const OT::CmapSubtableFormat14 *uvs_table;
hb_blob_t *blob;
inline void init (hb_face_t *face)
@ -212,7 +212,7 @@ struct hb_ot_face_cmap_accelerator_t
this->blob = OT::Sanitizer<OT::cmap>::sanitize (face->reference_table (HB_OT_TAG_cmap));
const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (this->blob);
const OT::CmapSubtable *subtable = NULL;
const OT::CmapSubtable *subtable_uvs = NULL;
const OT::CmapSubtableFormat14 *subtable_uvs = NULL;
/* 32-bit subtables. */
if (!subtable) subtable = cmap->find_subtable (3, 10);
@ -229,9 +229,14 @@ struct hb_ot_face_cmap_accelerator_t
if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
/* UVS subtable. */
if (!subtable_uvs) subtable_uvs = cmap->find_subtable (0, 5);
if (!subtable_uvs)
{
const OT::CmapSubtable *st = cmap->find_subtable (0, 5);
if (st && st->u.format == 14)
subtable_uvs = &st->u.format14;
}
/* Meh. */
if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtable);
if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtableFormat14);
this->table = subtable;
this->uvs_table = subtable_uvs;