[instancer] simplify item_variations_t API calls
merge create,instantiate and as_item_varstore into one API
diff --git a/src/hb-ot-var-common.hh b/src/hb-ot-var-common.hh
index 00bea20..ee6e358 100644
--- a/src/hb-ot-var-common.hh
+++ b/src/hb-ot-var-common.hh
@@ -1812,6 +1812,20 @@
const hb_map_t& get_varidx_map () const
{ return varidx_map; }
+ bool instantiate (const VariationStore& varStore,
+ const hb_subset_plan_t *plan,
+ bool optimize=true,
+ bool use_no_variation_idx=true,
+ const hb_array_t <const hb_inc_bimap_t> inner_maps = hb_array_t<const hb_inc_bimap_t> ())
+ {
+ if (!create_from_item_varstore (varStore, plan->axes_old_index_tag_map, inner_maps))
+ return false;
+ if (!instantiate_tuple_vars (plan->axes_location, plan->axes_triple_distances))
+ return false;
+ return as_item_varstore (optimize, use_no_variation_idx);
+ }
+
+ /* keep below APIs public only for unit test: test-item-varstore */
bool create_from_item_varstore (const VariationStore& varStore,
const hb_map_t& axes_old_index_tag_map,
const hb_array_t <const hb_inc_bimap_t> inner_maps = hb_array_t<const hb_inc_bimap_t> ())
@@ -1840,8 +1854,8 @@
return !vars.in_error ();
}
- bool instantiate (const hb_hashmap_t<hb_tag_t, Triple>& normalized_axes_location,
- const hb_hashmap_t<hb_tag_t, TripleDistances>& axes_triple_distances)
+ bool instantiate_tuple_vars (const hb_hashmap_t<hb_tag_t, Triple>& normalized_axes_location,
+ const hb_hashmap_t<hb_tag_t, TripleDistances>& axes_triple_distances)
{
for (tuple_variations_t& tuple_vars : vars)
if (!tuple_vars.instantiate (normalized_axes_location, axes_triple_distances))
@@ -1926,6 +1940,7 @@
* varstore by default */
bool as_item_varstore (bool optimize=true, bool use_no_variation_idx=true)
{
+ if (!region_list) return false;
unsigned num_cols = region_list.length;
/* pre-alloc a 2D vector for all sub_table's VarData rows */
unsigned total_rows = 0;
diff --git a/src/hb-ot-var-hvar-table.hh b/src/hb-ot-var-hvar-table.hh
index e944ff1..ca1ea1c 100644
--- a/src/hb-ot-var-hvar-table.hh
+++ b/src/hb-ot-var-hvar-table.hh
@@ -347,21 +347,11 @@
if (c->plan->normalized_coords)
{
- /* TODO: merge these 3 calls into 1 call that executes all 3
- * functions */
item_variations_t item_vars;
- if (!item_vars.create_from_item_varstore (this+varStore,
- c->plan->axes_old_index_tag_map,
- hvar_plan.inner_maps.as_array ()))
- return_trace (false);
-
- if (!item_vars.instantiate (c->plan->axes_location, c->plan->axes_triple_distances))
- return_trace (false);
-
- /* if glyph indices are used as implicit delta-set indices, no need to
- * optimiza varstore, maintain original variation indices */
- if (!item_vars.as_item_varstore (advMap == 0 ? false : true,
- false /* use_no_variation_idx = false */))
+ if (!item_vars.instantiate (this+varStore, c->plan,
+ advMap == 0 ? false : true,
+ false, /* use_no_variation_idx = false */
+ hvar_plan.inner_maps.as_array ()))
return_trace (false);
if (!out->varStore.serialize_serialize (c->serializer,
diff --git a/src/hb-ot-var-mvar-table.hh b/src/hb-ot-var-mvar-table.hh
index 9bbd904..ceabc9a 100644
--- a/src/hb-ot-var-mvar-table.hh
+++ b/src/hb-ot-var-mvar-table.hh
@@ -105,13 +105,8 @@
item_variations_t item_vars;
const VariationStore& src_var_store = this+varStore;
- if (!item_vars.create_from_item_varstore (src_var_store, c->plan->axes_old_index_tag_map))
- return_trace (false);
- if (!item_vars.instantiate (c->plan->axes_location, c->plan->axes_triple_distances))
- return_trace (false);
-
- if (!item_vars.as_item_varstore ())
+ if (!item_vars.instantiate (src_var_store, c->plan))
return_trace (false);
/* serialize varstore */
diff --git a/src/test-item-varstore.cc b/src/test-item-varstore.cc
index 60ba812..3e0875e 100644
--- a/src/test-item-varstore.cc
+++ b/src/test-item-varstore.cc
@@ -52,7 +52,7 @@
hb_hashmap_t<hb_tag_t, TripleDistances> axes_triple_distances;
axes_triple_distances.set (axis_tag, TripleDistances (200.f, 500.f));
- result = item_vars.instantiate (normalized_axes_location, axes_triple_distances);
+ result = item_vars.instantiate_tuple_vars (normalized_axes_location, axes_triple_distances);
assert (result);
result = item_vars.as_item_varstore (false);
assert (result);