varLib: build variable COLR table when master fonts contain COLRv1
This commit is contained in:
parent
e58c43d187
commit
00959d3132
@ -30,13 +30,15 @@ from fontTools.ttLib.tables.TupleVariation import TupleVariation
|
|||||||
from fontTools.ttLib.tables import otTables as ot
|
from fontTools.ttLib.tables import otTables as ot
|
||||||
from fontTools.ttLib.tables.otBase import OTTableWriter
|
from fontTools.ttLib.tables.otBase import OTTableWriter
|
||||||
from fontTools.varLib import builder, models, varStore
|
from fontTools.varLib import builder, models, varStore
|
||||||
from fontTools.varLib.merger import VariationMerger
|
from fontTools.varLib.merger import VariationMerger, COLRVariationMerger
|
||||||
from fontTools.varLib.mvar import MVAR_ENTRIES
|
from fontTools.varLib.mvar import MVAR_ENTRIES
|
||||||
from fontTools.varLib.iup import iup_delta_optimize
|
from fontTools.varLib.iup import iup_delta_optimize
|
||||||
from fontTools.varLib.featureVars import addFeatureVariations
|
from fontTools.varLib.featureVars import addFeatureVariations
|
||||||
from fontTools.designspaceLib import DesignSpaceDocument, InstanceDescriptor
|
from fontTools.designspaceLib import DesignSpaceDocument, InstanceDescriptor
|
||||||
from fontTools.designspaceLib.split import splitInterpolable, splitVariableFonts
|
from fontTools.designspaceLib.split import splitInterpolable, splitVariableFonts
|
||||||
from fontTools.varLib.stat import buildVFStatTable
|
from fontTools.varLib.stat import buildVFStatTable
|
||||||
|
from fontTools.colorLib.builder import buildColrV1
|
||||||
|
from fontTools.colorLib.unbuilder import unbuildColrV1
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from collections import OrderedDict, namedtuple
|
from collections import OrderedDict, namedtuple
|
||||||
import os.path
|
import os.path
|
||||||
@ -711,6 +713,28 @@ def _add_CFF2(varFont, model, master_fonts):
|
|||||||
merge_region_fonts(varFont, model, ordered_fonts_list, glyphOrder)
|
merge_region_fonts(varFont, model, ordered_fonts_list, glyphOrder)
|
||||||
|
|
||||||
|
|
||||||
|
def _add_COLR(font, model, master_fonts, axisTags):
|
||||||
|
merger = COLRVariationMerger(model, axisTags, font)
|
||||||
|
merger.mergeTables(font, master_fonts)
|
||||||
|
store = merger.store_builder.finish()
|
||||||
|
|
||||||
|
colr = font["COLR"].table
|
||||||
|
if store.VarData:
|
||||||
|
mapping = store.optimize()
|
||||||
|
colr.VarStore = store
|
||||||
|
# the special 0xFFFF/0xFFFF (for no variations) always maps to itself
|
||||||
|
mapping[ot.NO_VARIATION_INDEX] = ot.NO_VARIATION_INDEX
|
||||||
|
varIdxes = [mapping[v] for v in merger.varIdxes]
|
||||||
|
# TODO: Optimize reusable runs of delta-set indices from multiple paints
|
||||||
|
colr.VarIndexMap = builder.buildDeltaSetIndexMap(varIdxes)
|
||||||
|
|
||||||
|
# rebuild LayerList to optimize PaintColrLayers layer reuse
|
||||||
|
# TODO: Perhaps make it optional?
|
||||||
|
if colr.LayerList:
|
||||||
|
colorGlyphs = unbuildColrV1(colr.LayerList, colr.BaseGlyphList)
|
||||||
|
colr.LayerList, colr.BaseGlyphList = buildColrV1(colorGlyphs, allowLayerReuse=True)
|
||||||
|
|
||||||
|
|
||||||
def load_designspace(designspace):
|
def load_designspace(designspace):
|
||||||
# TODO: remove this and always assume 'designspace' is a DesignSpaceDocument,
|
# TODO: remove this and always assume 'designspace' is a DesignSpaceDocument,
|
||||||
# never a file path, as that's already handled by caller
|
# never a file path, as that's already handled by caller
|
||||||
@ -975,6 +999,8 @@ def build(designspace, master_finder=lambda s:s, exclude=[], optimize=True):
|
|||||||
post.formatType = 2.0
|
post.formatType = 2.0
|
||||||
post.extraNames = []
|
post.extraNames = []
|
||||||
post.mapping = {}
|
post.mapping = {}
|
||||||
|
if 'COLR' not in exclude and 'COLR' in vf and vf['COLR'].version > 0:
|
||||||
|
_add_COLR(vf, model, master_fonts, axisTags)
|
||||||
|
|
||||||
set_default_weight_width_slant(
|
set_default_weight_width_slant(
|
||||||
vf, location={axis.axisTag: axis.defaultValue for axis in vf["fvar"].axes}
|
vf, location={axis.axisTag: axis.defaultValue for axis in vf["fvar"].axes}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user