24 Commits

Author SHA1 Message Date
Behdad Esfahbod
42bef176a3 [varLib] Tweak support-resolution algorithm
Improve varLib model algorithm.

This, basically means any varfont built that had an unusual master
configuration will change when rebuilt.

Here's a good test: a two-axis with 8 masters at unusual locations:

2-----------------5----------3
|                            |
|                    7       |
|                            |
|              6             |
|                            |
|                            |
|                            |
0-----------4----------------1

Previously, the reach of master 3 (Black Extended) would
have started from A=.4, ie, the A position of master 4.
It now correctly starts from 0. Same thing with masters
after it. Ie, master 5 gets a span on the A axis from
0 to 1, whereas before it was getting from .4 to 1.

Previously, the on-axis masters always cut the space. They
don't anymore. That's more consistent, and fixes the main
issue Erik showed at TYPO Labs 2017.  Same issue was also
causing the reach of master 3 to be limited, which I think
is the issue being discussed in the linked issue. Both should
be fixed.

It's hard to describe exactly what happened before / after.
Best to read the actual support values:

Before:
Sorted locations:
$ ./fonttools varLib.models 0,0 0,1 1,0 1,1 .4,0 .6,1 .5,.5 .7,.7
[{},
 {'A': 0.4},
 {'A': 1.0},
 {'B': 1.0},
 {'A': 1.0, 'B': 1.0},
 {'A': 0.6, 'B': 1.0},
 {'A': 0.5, 'B': 0.5},
 {'A': 0.7, 'B': 0.7}]
Supports:
[{},
 {'A': (0.0, 0.4, 1.0)},
 {'A': (0.4, 1.0, 1.0)},
 {'B': (0.0, 1.0, 1.0)},
 {'A': (0.4, 1.0, 1.0), 'B': (0.0, 1.0, 1.0)},
 {'A': (0.4, 0.6, 1.0), 'B': (0.0, 1.0, 1.0)},
 {'A': (0.4, 0.5, 1.0), 'B': (0.0, 0.5, 1.0)},
 {'A': (0.5, 0.7, 1.0), 'B': (0.5, 0.7, 1.0)}]

After:
$ ./fonttools varLib.models 0,0 0,1 1,0 1,1 .4,0 .6,1 .5,.5 .7,.7
Sorted locations:
[{},
 {'A': 0.4},
 {'A': 1.0},
 {'B': 1.0},
 {'A': 1.0, 'B': 1.0},
 {'A': 0.6, 'B': 1.0},
 {'A': 0.5, 'B': 0.5},
 {'A': 0.7, 'B': 0.7}]
Supports:
[{},
 {'A': (0, 0.4, 1.0)},
 {'A': (0.4, 1.0, 1.0)},
 {'B': (0, 1.0, 1.0)},
 {'A': (0, 1.0, 1.0), 'B': (0, 1.0, 1.0)},
 {'A': (0, 0.6, 1.0), 'B': (0, 1.0, 1.0)},
 {'A': (0, 0.5, 1.0), 'B': (0, 0.5, 1.0)},
 {'A': (0.5, 0.7, 1.0), 'B': (0.5, 0.7, 1.0)}]

TODO: We should add this as a test case.

There's another improvement I want to make, but that's separate.
2018-03-26 20:32:27 -07:00
Behdad Esfahbod
05e2ec4d3a [varLib.models] Add main()
Takes positions and prints model results:

$ ./fonttools varLib.models 0,0 0,1 1,0 1,1 .4,0 .6,1 .5,.5
Sorted locations:
[{},
 {'A': 0.4},
 {'A': 1.0},
 {'B': 1.0},
 {'A': 1.0, 'B': 1.0},
 {'A': 0.6, 'B': 1.0},
 {'A': 0.5, 'B': 0.5}]
Supports:
[{},
 {'A': (0.0, 0.4, 1.0)},
 {'A': (0.4, 1.0, 1.0)},
 {'B': (0.0, 1.0, 1.0)},
 {'A': (0.4, 1.0, 1.0), 'B': (0.0, 1.0, 1.0)},
 {'A': (0.4, 0.6, 1.0), 'B': (0.0, 1.0, 1.0)},
 {'A': (0.4, 0.5, 1.0), 'B': (0.0, 0.5, 1.0)}]
2018-03-26 20:10:15 -07:00
Behdad Esfahbod
cca7a79018 [varLib] Adjust for supportScalar() default ot=True change
Fixup for 028ed0125244531215d4d774474d929acda14d49
2017-10-19 10:07:08 -07:00
justvanrossum
2f6ec32ff0 oops, forgot to adapt doctests; thanks @anthrotype\! 2017-10-18 10:29:19 +02:00
justvanrossum
028ed01252 set default value of the ot argument to True, as discussed in a1629fa52b 2017-10-18 10:04:42 +02:00
Cosimo Lupo
dfeacfba36 [varLib.models] minor
We need to use float (0.) rather than int (0) for the normalized axis
origin, otherwise some varLib roundtrip tests may fail.

E.g.

```diff
       <tuple>
-        <coord axis="wght" max="1.0" min="0.0" value="0.61"/>
+        <coord axis="wght" max="1.0" min="0" value="0.61"/>
```
2017-08-16 16:35:57 +01:00
Behdad Esfahbod
a1629fa52b [varLib] Update supportScalar() to allow for OpenType-specific contraints
Part of https://github.com/fonttools/fonttools/issues/1020
2017-08-07 17:05:29 -07:00
justvanrossum
18fa7ccec0 supportScalar(): ignore an axis when its peak value is 0; fixes #1020 2017-08-07 13:16:24 +02:00
Erik van Blokland
4762865cac Makes it a bit easier to find out what is wrong with the values. 2017-08-05 20:37:37 +02:00
Behdad Esfahbod
dbc54a2429 [varLib.models] Mark VariationModel.interpolateFromDeltasAndScalars static
This correctly reflects that all we need to interpolate is deltas and
scalars.
2017-05-23 01:01:07 -07:00
Behdad Esfahbod
39d059ef08 Revert "[varLib.models] Minor"
This reverts commit 49df768cd3d1dd2c39933e3c07d214013d50ef60.

That was accidentally pushed!
2017-05-23 00:54:23 -07:00
Behdad Esfahbod
bc546dec10 [varLib.models] Add VariationModel.interpolateFromMastersAndScalars() 2017-05-23 00:54:11 -07:00
Behdad Esfahbod
53b7ea4612 [varLib.models] Add VariationModel.interpolateFromDeltasAndScalars() 2017-05-23 00:54:11 -07:00
Behdad Esfahbod
489c80c83b [varLib.models] Add VariationModel.getScalars()
To factor out scalar computation out of each interpolation.
2017-05-23 00:54:11 -07:00
Behdad Esfahbod
adc4fe960e [varLib.models] Remove unused line 2017-05-23 00:54:11 -07:00
Behdad Esfahbod
fdbe93e33c [varLib.models] Minor; move computing scalars out of inner loop 2017-05-23 00:54:11 -07:00
Behdad Esfahbod
49df768cd3 [varLib.models] Minor 2017-05-23 00:31:48 -07:00
Behdad Esfahbod
a08fb27f17 [varLib.models] Minor 2017-05-23 00:26:53 -07:00
Behdad Esfahbod
968c25dd7f [varLib] Generate avar table
Fixes https://github.com/fonttools/fonttools/issues/916
2017-04-12 21:54:43 -07:00
justvanrossum
289fd62d8f added assert, as suggested by @behdad in #749 2016-12-02 14:24:46 +01:00
justvanrossum
e5d2d49900 two more doctests 2016-11-29 14:42:20 +01:00
justvanrossum
8fa2ee1d95 Do the capping before calculating the normalized value to avoid ZeroDivisionError when default == lower or default == upper. Added doctests to verify. Fixes #749 2016-11-29 14:38:46 +01:00
Behdad Esfahbod
9ed319d0ad [varLib] Clamp values in normalizeLocation() 2016-09-27 19:49:41 +02:00
Behdad Esfahbod
d9ee2609be [varLib] Move VariationModel and supporting code to fontTools.varLib.models
More code to be moved there in the future.
2016-09-27 19:49:41 +02:00