[subset-cff2] Don't serialize VarStore if pinned

This commit is contained in:
Behdad Esfahbod 2023-02-19 10:47:36 -07:00
parent 8c1b47d7e2
commit a88f3e8d37
1 changed files with 8 additions and 5 deletions

View File

@ -243,16 +243,17 @@ struct cff2_subr_subsetter_t : subr_subsetter_t<cff2_subr_subsetter_t, CFF2Subrs
} }
}; };
struct cff2_subset_plan { struct cff2_subset_plan
{
bool create (const OT::cff2::accelerator_subset_t &acc, bool create (const OT::cff2::accelerator_subset_t &acc,
hb_subset_plan_t *plan) hb_subset_plan_t *plan)
{ {
orig_fdcount = acc.fdArray->count; orig_fdcount = acc.fdArray->count;
drop_hints = plan->flags & HB_SUBSET_FLAGS_NO_HINTING; drop_hints = plan->flags & HB_SUBSET_FLAGS_NO_HINTING;
pinned = (bool) plan->normalized_coords;
desubroutinize = plan->flags & HB_SUBSET_FLAGS_DESUBROUTINIZE || desubroutinize = plan->flags & HB_SUBSET_FLAGS_DESUBROUTINIZE ||
plan->normalized_coords; // For instancing we need this path pinned; // For instancing we need this path
if (desubroutinize) if (desubroutinize)
{ {
@ -311,8 +312,9 @@ struct cff2_subset_plan {
unsigned int orig_fdcount = 0; unsigned int orig_fdcount = 0;
unsigned int subset_fdcount = 1; unsigned int subset_fdcount = 1;
unsigned int subset_fdselect_size = 0; unsigned int subset_fdselect_size = 0;
unsigned int subset_fdselect_format = 0; unsigned int subset_fdselect_format = 0;
bool pinned = false;
hb_vector_t<code_pair_t> subset_fdselect_ranges; hb_vector_t<code_pair_t> subset_fdselect_ranges;
hb_inc_bimap_t fdmap; hb_inc_bimap_t fdmap;
@ -424,7 +426,8 @@ static bool _serialize_cff2 (hb_serialize_context_t *c,
} }
/* variation store */ /* variation store */
if (acc.varStore != &Null (CFF2VariationStore)) if (acc.varStore != &Null (CFF2VariationStore) &&
!plan.pinned)
{ {
c->push (); c->push ();
CFF2VariationStore *dest = c->start_embed<CFF2VariationStore> (); CFF2VariationStore *dest = c->start_embed<CFF2VariationStore> ();