Skip to content

Commit

Permalink
[instancer/avar2] First try at scaling deltas
Browse files Browse the repository at this point in the history
Seems to do something.
  • Loading branch information
behdad committed May 6, 2024
1 parent 98c08da commit 2028449
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
3 changes: 0 additions & 3 deletions Lib/fontTools/ttLib/tables/_a_v_a_r.py
Expand Up @@ -144,7 +144,6 @@ def fromXML(self, name, attrs, content, ttFont):
super().fromXML(name, attrs, content, ttFont)

def renormalizeLocation(self, location, font):

if self.majorVersion not in (1, 2):
raise NotImplementedError("Unknown avar table version")

Expand All @@ -171,7 +170,6 @@ def renormalizeLocation(self, location, font):

out = []
for varIdx, v in enumerate(coords):

if varIdxMap is not None:
varIdx = varIdxMap[varIdx]

Expand All @@ -189,7 +187,6 @@ def renormalizeLocation(self, location, font):
return mappedLocation

def renormalizeAxisLimits(self, axisLimits, font, *, versionOneOnly=False):

version = getattr(self, "majorVersion", 1)
if version not in (1, 2):
raise NotImplementedError("Unknown avar table version")
Expand Down
23 changes: 20 additions & 3 deletions Lib/fontTools/varLib/instancer/__init__.py
Expand Up @@ -414,7 +414,6 @@ def normalize(self, varfont, usingAvar=True) -> "NormalizedAxisLimits":
normalizedLimits = {}

for axis_tag, triple in axes.items():

if self[axis_tag] is None: # Drop
normalizedLimits[axis_tag] = (0, 0, 0)

Check warning on line 418 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L418

Added line #L418 was not covered by tests
continue
Expand Down Expand Up @@ -1108,7 +1107,22 @@ def instantiateAvar(varfont, axisLimits, normalizedLimits):
assert version == 2
fvarAxes = varfont["fvar"].axes
varStore = getattr(avar.table, "VarStore", None)

Check warning on line 1109 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1107-L1109

Added lines #L1107 - L1109 were not covered by tests

if varStore is not None:
# Compute scalar for each region, based on the new axis limits
regionList = varStore.VarRegionList.Region
scalars = []

Check warning on line 1114 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1113-L1114

Added lines #L1113 - L1114 were not covered by tests
for region in regionList:
regionAxes = region.get_support(fvarAxes)
scalar = 1.0

Check warning on line 1117 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1116-L1117

Added lines #L1116 - L1117 were not covered by tests
for axisTag, axis in regionAxes.items():
if axis[1] == 0:
continue

Check warning on line 1120 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1120

Added line #L1120 was not covered by tests
if axisTag in axisLimits:
axisRange = axisLimits[axisTag]
scalar *= (axisRange.maximum - axisRange.minimum) / 2.0
scalars.append(scalar)

Check warning on line 1124 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1122-L1124

Added lines #L1122 - L1124 were not covered by tests

varIdxMap = getattr(avar.table, "VarIdxMap", None)

Check warning on line 1126 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1126

Added line #L1126 was not covered by tests
varStoreBuilder = OnlineVarStoreBuilder([axis.axisTag for axis in fvarAxes])
newVarIdxMapping = []

Check warning on line 1128 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1128

Added line #L1128 was not covered by tests
Expand All @@ -1121,12 +1135,15 @@ def instantiateAvar(varfont, axisLimits, normalizedLimits):
if varIdx != varStore.NO_VARIATION_INDEX:
VarData = varStore.VarData[varIdx >> 16]

Check warning on line 1136 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1136

Added line #L1136 was not covered by tests
supports = [
varStore.VarRegionList.Region[regionIndex].get_support(fvarAxes)
regionList[regionIndex].get_support(fvarAxes)
for regionIndex in VarData.VarRegionIndex
]
varStoreBuilder.setSupports(supports)
row = VarData.Item[varIdx & 0xFFFF]

Check warning on line 1142 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1141-L1142

Added lines #L1141 - L1142 were not covered by tests
# XXX Manipulate row
row = [
delta / scalars[idx]
for delta, idx in zip(row, VarData.VarRegionIndex)
]
varIdx = varStoreBuilder.storeDeltas(row)

Check warning on line 1147 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1147

Added line #L1147 was not covered by tests

newVarIdxMapping.append(varIdx)

Check warning on line 1149 in Lib/fontTools/varLib/instancer/__init__.py

View check run for this annotation

Codecov / codecov/patch

Lib/fontTools/varLib/instancer/__init__.py#L1149

Added line #L1149 was not covered by tests
Expand Down

0 comments on commit 2028449

Please sign in to comment.