added TT VF full font test & fixed bugs
updated CFF2 VF api test results too
This commit is contained in:
parent
2bd2e656f9
commit
fe5aa8b36c
|
@ -1761,13 +1761,15 @@ struct VarData
|
|||
if (unlikely (!c->allocate_size<HBUINT8> (size)))
|
||||
return_trace (false);
|
||||
|
||||
memcpy (®ionIndices, &src->regionIndices, src->regionIndices.get_size ());
|
||||
HBUINT8 *p = get_delta_bytes ();
|
||||
for (unsigned int i = 0; i < remap.get_count (); i++)
|
||||
{
|
||||
memcpy (p, src->get_delta_bytes () + (row_size * remap.to_old (i)), row_size);
|
||||
p += row_size;
|
||||
}
|
||||
memcpy (®ionIndices[0], &src->regionIndices[0], src->regionIndices.get_size ()-HBUINT16::static_size);
|
||||
|
||||
for (unsigned int i = 0; i < itemCount; i++)
|
||||
for (unsigned int r = 0; r < regionIndices.len; r++)
|
||||
{
|
||||
hb_codepoint_t old = remap.to_old (i);
|
||||
if (unlikely (old >= src->itemCount)) return_trace (false);
|
||||
set_item_delta (i, r, src->get_item_delta (old, r));
|
||||
}
|
||||
|
||||
return_trace (true);
|
||||
}
|
||||
|
@ -1782,6 +1784,24 @@ struct VarData
|
|||
HBUINT8 *get_delta_bytes ()
|
||||
{ return &StructAfter<HBUINT8> (regionIndices); }
|
||||
|
||||
int16_t get_item_delta (unsigned int item, unsigned int region) const
|
||||
{
|
||||
const HBINT8 *p = (const HBINT8 *)get_delta_bytes () + item * get_row_size ();
|
||||
if (region < shortCount)
|
||||
return ((const HBINT16 *)p)[region];
|
||||
else
|
||||
return (p + HBINT16::static_size * shortCount)[region - shortCount];
|
||||
}
|
||||
|
||||
void set_item_delta (unsigned int item, unsigned int region, int16_t delta)
|
||||
{
|
||||
HBINT8 *p = (HBINT8 *)get_delta_bytes () + item * get_row_size ();
|
||||
if (region < shortCount)
|
||||
((HBINT16 *)p)[region].set (delta);
|
||||
else
|
||||
(p + HBINT16::static_size * shortCount)[region - shortCount].set (delta);
|
||||
}
|
||||
|
||||
protected:
|
||||
HBUINT16 itemCount;
|
||||
HBUINT16 shortCount;
|
||||
|
|
|
@ -121,7 +121,16 @@ struct DeltaSetIndexMap
|
|||
|
||||
struct index_map_subset_plan_t
|
||||
{
|
||||
enum index_map_index_t {
|
||||
ADV_INDEX,
|
||||
LSB_INDEX,
|
||||
RSB_INDEX,
|
||||
TSB_INDEX,
|
||||
VORG_INDEX
|
||||
};
|
||||
|
||||
void init (const DeltaSetIndexMap &index_map,
|
||||
unsigned int im_index,
|
||||
hb_bimap_t &outer_remap,
|
||||
hb_vector_t<hb_bimap_t> &inner_remaps,
|
||||
const hb_subset_plan_t *plan)
|
||||
|
@ -132,14 +141,18 @@ struct index_map_subset_plan_t
|
|||
max_inners.init ();
|
||||
output_map.init ();
|
||||
|
||||
/* Identity map */
|
||||
if (&index_map == &Null(DeltaSetIndexMap))
|
||||
{
|
||||
outer_remap.add (0);
|
||||
hb_codepoint_t old_gid;
|
||||
for (hb_codepoint_t gid = 0; gid < plan->num_output_glyphs (); gid++)
|
||||
if (plan->old_gid_for_new_gid (gid, &old_gid))
|
||||
inner_remaps[0].add (old_gid);
|
||||
/* Advance width index map is required. If its offset is missing,
|
||||
* treat it as an indentity map. */
|
||||
if (im_index == ADV_INDEX)
|
||||
{
|
||||
outer_remap.add (0);
|
||||
hb_codepoint_t old_gid;
|
||||
for (hb_codepoint_t gid = 0; gid < plan->num_output_glyphs (); gid++)
|
||||
if (plan->old_gid_for_new_gid (gid, &old_gid))
|
||||
inner_remaps[0].add (old_gid);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -257,7 +270,7 @@ struct hvarvvar_subset_plan_t
|
|||
inner_remaps[i].init ();
|
||||
|
||||
for (unsigned int i = 0; i < index_maps.length; i++)
|
||||
index_map_plans[i].init (*index_maps[i], outer_remap, inner_remaps, plan);
|
||||
index_map_plans[i].init (*index_maps[i], i, outer_remap, inner_remaps, plan);
|
||||
|
||||
outer_remap.reorder ();
|
||||
for (unsigned int i = 0; i < inner_remaps.length; i++)
|
||||
|
@ -294,14 +307,6 @@ struct HVARVVAR
|
|||
static constexpr hb_tag_t HVARTag = HB_OT_TAG_HVAR;
|
||||
static constexpr hb_tag_t VVARTag = HB_OT_TAG_VVAR;
|
||||
|
||||
enum index_map_index_t {
|
||||
ADV_INDEX,
|
||||
LSB_INDEX,
|
||||
RSB_INDEX,
|
||||
TSB_INDEX,
|
||||
VORG_INDEX
|
||||
};
|
||||
|
||||
bool sanitize (hb_sanitize_context_t *c) const
|
||||
{
|
||||
TRACE_SANITIZE (this);
|
||||
|
@ -324,17 +329,17 @@ struct HVARVVAR
|
|||
const hb_array_t<index_map_subset_plan_t> &im_plans)
|
||||
{
|
||||
TRACE_SUBSET (this);
|
||||
if (im_plans[ADV_INDEX].is_identity ())
|
||||
if (im_plans[index_map_subset_plan_t::ADV_INDEX].is_identity ())
|
||||
advMap.set (0);
|
||||
else if (unlikely (!advMap.serialize (c, this).serialize (c, im_plans[ADV_INDEX])))
|
||||
else if (unlikely (!advMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::ADV_INDEX])))
|
||||
return_trace (false);
|
||||
if (im_plans[LSB_INDEX].is_identity ())
|
||||
if (im_plans[index_map_subset_plan_t::LSB_INDEX].is_identity ())
|
||||
lsbMap.set (0);
|
||||
else if (unlikely (!lsbMap.serialize (c, this).serialize (c, im_plans[LSB_INDEX])))
|
||||
else if (unlikely (!lsbMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::LSB_INDEX])))
|
||||
return_trace (false);
|
||||
if (im_plans[RSB_INDEX].is_identity ())
|
||||
if (im_plans[index_map_subset_plan_t::RSB_INDEX].is_identity ())
|
||||
rsbMap.set (0);
|
||||
else if (unlikely (!rsbMap.serialize (c, this).serialize (c, im_plans[RSB_INDEX])))
|
||||
else if (unlikely (!rsbMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::RSB_INDEX])))
|
||||
return_trace (false);
|
||||
|
||||
return_trace (true);
|
||||
|
@ -424,9 +429,9 @@ struct VVAR : HVARVVAR {
|
|||
TRACE_SUBSET (this);
|
||||
if (unlikely (!HVARVVAR::serialize_index_maps (c, im_plans)))
|
||||
return_trace (false);
|
||||
if (!im_plans[VORG_INDEX].get_map_count ())
|
||||
if (!im_plans[index_map_subset_plan_t::VORG_INDEX].get_map_count ())
|
||||
vorgMap.set (0);
|
||||
else if (unlikely (!vorgMap.serialize (c, this).serialize (c, im_plans[VORG_INDEX])))
|
||||
else if (unlikely (!vorgMap.serialize (c, this).serialize (c, im_plans[index_map_subset_plan_t::VORG_INDEX])))
|
||||
return_trace (false);
|
||||
|
||||
return_trace (true);
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,5 +1,6 @@
|
|||
FONTS:
|
||||
Roboto-Regular.ttf
|
||||
SourceSerifVariable-Roman.ttf
|
||||
|
||||
PROFILES:
|
||||
default.txt
|
||||
|
|
Loading…
Reference in New Issue