[mutator] Implement MVAR
Test expectation needs updating. Leaving for someone else to confirm the new value is correct and update the test.
This commit is contained in:
parent
b9d4795be4
commit
acd2f490af
@ -9,6 +9,7 @@ from fontTools.ttLib import TTFont
|
||||
from fontTools.ttLib.tables._g_l_y_f import GlyphCoordinates
|
||||
from fontTools.varLib import _GetCoordinates, _SetCoordinates
|
||||
from fontTools.varLib.models import supportScalar, normalizeLocation
|
||||
from fontTools.varLib.mvar import MVAR_entries
|
||||
from fontTools.varLib.iup import iup_delta
|
||||
import os.path
|
||||
import logging
|
||||
@ -17,8 +18,6 @@ import logging
|
||||
log = logging.getLogger("fontTools.varlib.mutator")
|
||||
|
||||
|
||||
|
||||
|
||||
def instantiateVariableFont(varfont, location, inplace=False):
|
||||
""" Generate a static instance from a variable TTFont and a dictionary
|
||||
defining the desired location along the variable font's axes.
|
||||
@ -69,8 +68,6 @@ def instantiateVariableFont(varfont, location, inplace=False):
|
||||
coordinates += GlyphCoordinates(delta) * scalar
|
||||
_SetCoordinates(varfont, glyphname, coordinates)
|
||||
|
||||
# Interpolate cvt
|
||||
|
||||
if 'cvar' in varfont:
|
||||
cvar = varfont['cvar']
|
||||
cvt = varfont['cvt ']
|
||||
@ -84,6 +81,37 @@ def instantiateVariableFont(varfont, location, inplace=False):
|
||||
for i, delta in deltas.items():
|
||||
cvt[i] += int(round(delta))
|
||||
|
||||
if 'MVAR' in varfont:
|
||||
mvar = varfont['MVAR'].table
|
||||
varstore = mvar.VarStore
|
||||
records = mvar.ValueRecord
|
||||
for rec in records:
|
||||
mvarTag = rec.ValueTag
|
||||
if mvarTag not in MVAR_entries:
|
||||
continue
|
||||
tableTag, itemName = MVAR_entries[mvarTag]
|
||||
|
||||
varIdx = rec.VarIdx
|
||||
major,minor = varIdx >> 16, varIdx & 0xFFFF
|
||||
|
||||
assert varstore.Format == 1
|
||||
deltas = varstore.VarData[major].Item[minor]
|
||||
def VarRegion_get_support(self, fvar):
|
||||
axes = fvar.axes
|
||||
return {axes[i].axisTag: (reg.StartCoord,reg.PeakCoord,reg.EndCoord)
|
||||
for i,reg in enumerate(self.VarRegionAxis)}
|
||||
supports = [VarRegion_get_support(varstore.VarRegionList.Region[ri], fvar)
|
||||
for ri in varstore.VarData[major].VarRegionIndex]
|
||||
delta = 0.
|
||||
for d,s in zip(deltas, supports):
|
||||
if not d: continue
|
||||
scalar = supportScalar(loc, s)
|
||||
delta += d * scalar
|
||||
delta = int(round(delta))
|
||||
if not delta:
|
||||
continue
|
||||
setattr(varfont[tableTag], itemName, getattr(varfont[tableTag], itemName) + delta)
|
||||
|
||||
log.info("Removing variable tables")
|
||||
for tag in ('avar','cvar','fvar','gvar','HVAR','MVAR','VVAR','STAT'):
|
||||
if tag in varfont:
|
||||
|
Loading…
x
Reference in New Issue
Block a user