mirror of
https://github.com/harfbuzz/harfbuzz.git
synced 2025-04-14 17:13:40 +00:00
[instancer] update STAT table to accept Triples for axes positions
This commit is contained in:
parent
779e8ba080
commit
bf46d566f9
1 changed files with 35 additions and 24 deletions
|
@ -57,6 +57,21 @@ enum
|
|||
// Reserved = 0xFFFC /* Reserved for future use — set to zero. */
|
||||
};
|
||||
|
||||
#ifndef HB_NO_VAR
|
||||
static bool axis_value_is_outside_axis_range (hb_tag_t axis_tag, float axis_value,
|
||||
const hb_hashmap_t<hb_tag_t, Triple> *user_axes_location) const
|
||||
{
|
||||
if (!user_axes_location->has (axis_tag))
|
||||
return false;
|
||||
|
||||
Triple axis_range = user_axes_location->get (axis_tag);
|
||||
if (axis_value < axis_range.minimum || axis_value > axis_range.maximum)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct StatAxisRecord
|
||||
{
|
||||
int cmp (hb_tag_t key) const { return tag.cmp (key); }
|
||||
|
@ -96,23 +111,22 @@ struct AxisValueFormat1
|
|||
}
|
||||
|
||||
bool keep_axis_value (const hb_array_t<const StatAxisRecord> axis_records,
|
||||
const hb_hashmap_t<hb_tag_t, float> *user_axes_location) const
|
||||
const hb_hashmap_t<hb_tag_t, Triple> *user_axes_location) const
|
||||
{
|
||||
hb_tag_t axis_tag = get_axis_tag (axis_records);
|
||||
float axis_value = get_value ();
|
||||
|
||||
if (!user_axes_location->has (axis_tag) ||
|
||||
fabsf(axis_value - user_axes_location->get (axis_tag)) < 0.001f)
|
||||
return true;
|
||||
if (axis_value_is_outside_axis_range (axis_tag, axis_value, user_axes_location))
|
||||
return false;
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool subset (hb_subset_context_t *c,
|
||||
const hb_array_t<const StatAxisRecord> axis_records) const
|
||||
{
|
||||
TRACE_SUBSET (this);
|
||||
const hb_hashmap_t<hb_tag_t, float>* user_axes_location = &c->plan->user_axes_location;
|
||||
const hb_hashmap_t<hb_tag_t, Triple>* user_axes_location = &c->plan->user_axes_location;
|
||||
|
||||
if (keep_axis_value (axis_records, user_axes_location))
|
||||
return_trace (c->serializer->embed (this));
|
||||
|
@ -155,23 +169,22 @@ struct AxisValueFormat2
|
|||
}
|
||||
|
||||
bool keep_axis_value (const hb_array_t<const StatAxisRecord> axis_records,
|
||||
const hb_hashmap_t<hb_tag_t, float> *user_axes_location) const
|
||||
const hb_hashmap_t<hb_tag_t, Triple> *user_axes_location) const
|
||||
{
|
||||
hb_tag_t axis_tag = get_axis_tag (axis_records);
|
||||
float axis_value = get_value ();
|
||||
|
||||
if (!user_axes_location->has (axis_tag) ||
|
||||
fabsf(axis_value - user_axes_location->get (axis_tag)) < 0.001f)
|
||||
return true;
|
||||
if (axis_value_is_outside_axis_range (axis_tag, axis_value, user_axes_location))
|
||||
return false;
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool subset (hb_subset_context_t *c,
|
||||
const hb_array_t<const StatAxisRecord> axis_records) const
|
||||
{
|
||||
TRACE_SUBSET (this);
|
||||
const hb_hashmap_t<hb_tag_t, float>* user_axes_location = &c->plan->user_axes_location;
|
||||
const hb_hashmap_t<hb_tag_t, Triple>* user_axes_location = &c->plan->user_axes_location;
|
||||
|
||||
if (keep_axis_value (axis_records, user_axes_location))
|
||||
return_trace (c->serializer->embed (this));
|
||||
|
@ -218,23 +231,22 @@ struct AxisValueFormat3
|
|||
}
|
||||
|
||||
bool keep_axis_value (const hb_array_t<const StatAxisRecord> axis_records,
|
||||
const hb_hashmap_t<hb_tag_t, float> *user_axes_location) const
|
||||
const hb_hashmap_t<hb_tag_t, Triple> *user_axes_location) const
|
||||
{
|
||||
hb_tag_t axis_tag = get_axis_tag (axis_records);
|
||||
float axis_value = get_value ();
|
||||
|
||||
if (!user_axes_location->has (axis_tag) ||
|
||||
fabsf(axis_value - user_axes_location->get (axis_tag)) < 0.001f)
|
||||
return true;
|
||||
if (axis_value_is_outside_axis_range (axis_tag, axis_value, user_axes_location))
|
||||
return false;
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool subset (hb_subset_context_t *c,
|
||||
const hb_array_t<const StatAxisRecord> axis_records) const
|
||||
{
|
||||
TRACE_SUBSET (this);
|
||||
const hb_hashmap_t<hb_tag_t, float>* user_axes_location = &c->plan->user_axes_location;
|
||||
const hb_hashmap_t<hb_tag_t, Triple>* user_axes_location = &c->plan->user_axes_location;
|
||||
|
||||
if (keep_axis_value (axis_records, user_axes_location))
|
||||
return_trace (c->serializer->embed (this));
|
||||
|
@ -291,7 +303,7 @@ struct AxisValueFormat4
|
|||
{ return axisValues.as_array (axisCount)[axis_index]; }
|
||||
|
||||
bool keep_axis_value (const hb_array_t<const StatAxisRecord> axis_records,
|
||||
const hb_hashmap_t<hb_tag_t, float> *user_axes_location) const
|
||||
const hb_hashmap_t<hb_tag_t, Triple> *user_axes_location) const
|
||||
{
|
||||
hb_array_t<const AxisValueRecord> axis_value_records = axisValues.as_array (axisCount);
|
||||
|
||||
|
@ -301,8 +313,7 @@ struct AxisValueFormat4
|
|||
float axis_value = rec.get_value ();
|
||||
hb_tag_t axis_tag = axis_records[axis_idx].get_axis_tag ();
|
||||
|
||||
if (user_axes_location->has (axis_tag) &&
|
||||
fabsf(axis_value - user_axes_location->get (axis_tag)) > 0.001f)
|
||||
if (axis_value_is_outside_axis_range (axis_tag, axis_value, user_axes_location))
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -313,7 +324,7 @@ struct AxisValueFormat4
|
|||
const hb_array_t<const StatAxisRecord> axis_records) const
|
||||
{
|
||||
TRACE_SUBSET (this);
|
||||
const hb_hashmap_t<hb_tag_t, float> *user_axes_location = &c->plan->user_axes_location;
|
||||
const hb_hashmap_t<hb_tag_t, Triple> *user_axes_location = &c->plan->user_axes_location;
|
||||
if (!keep_axis_value (axis_records, user_axes_location))
|
||||
return_trace (false);
|
||||
|
||||
|
@ -402,7 +413,7 @@ struct AxisValue
|
|||
}
|
||||
|
||||
bool keep_axis_value (const hb_array_t<const StatAxisRecord> axis_records,
|
||||
hb_hashmap_t<hb_tag_t, float> *user_axes_location) const
|
||||
hb_hashmap_t<hb_tag_t, Triple> *user_axes_location) const
|
||||
{
|
||||
switch (u.format)
|
||||
{
|
||||
|
@ -517,7 +528,7 @@ struct STAT
|
|||
return axis_value.get_value_name_id ();
|
||||
}
|
||||
|
||||
void collect_name_ids (hb_hashmap_t<hb_tag_t, float> *user_axes_location,
|
||||
void collect_name_ids (hb_hashmap_t<hb_tag_t, Triple> *user_axes_location,
|
||||
hb_set_t *nameids_to_retain /* OUT */) const
|
||||
{
|
||||
if (!has_data ()) return;
|
||||
|
|
Loading…
Add table
Reference in a new issue