80 Commits

Author SHA1 Message Date
Cosimo Lupo
f220d36df1
instancer: merge TupleVariations left with same axes after pinning
The instantiateTupleVariationStore function now groups TupleVariation
tables that have the same axes 'tents', then merges them into a single
TupleVariation by summing their deltas. The rounding to integer happens
after summing the scaled deltas as floats, to reduce off-by-one errors.

To be able to sum gvar TupleVariation, it needs to calculate the inferred
deltas so it now takes two optional lists (origCoords and endPts) that
are passed on to iup_delta function. These only make sense for gvar
type of TupleVariation, of course, and are unused for cvar tuples.

It also run iup_delta_optimize on the gvar deltas that are left after
partial instancing and whose inferred deltas had to be interpolated.
This can be disabled with --no-optimize CLI option.

Also added calcInferredDeltas and optimize methods to TupleVariation
class, which use functions from varLib.iup module, plus tests
that exercise them.
2019-04-04 15:11:23 +01:00
Cosimo Lupo
18f8a30305 TupleVariation: add scaleDeltas and roundDeltas method 2019-03-22 14:13:55 +00:00
Cosimo Lupo
71e44a52ee TupleVariation.toXML: sort attrs min/value/max in TTX dump
It's more legible if the peak value is written after the min and before the max value
defining a given region.
2019-03-04 16:41:26 -08:00
Behdad Esfahbod
349cd94d17 [graphite] Fix for big-endian
Make all "if sys.byteorder..." and "byteswap" be on the same line for
earsier grep verification.

Fixes https://github.com/fonttools/fonttools/issues/1311
2018-09-05 21:12:53 -07:00
Cosimo Lupo
d570fc038a
use otRound when rounding visual coordinates or deltas
So we now round towards +Infinity in:

- floatToFixed (which fully examplify that quotes from OT spec)
- psCharStrings: when packing floats as fixed 16.16
- t2CharStringPen: when rounding coordinates and advance widths
- subset: when rounding advance widths to compute average
- TupleVariation: rounding gvar deltas
- _g_l_y_f: when rounding coordinates: both in GlyphComponent.{x,y}
  and for GlyphCoordinates.toInt()
- _h_m_t_x: for rounding horiz/vert metrics
- varLib: rounding horiz metrics and deltas
2018-06-14 17:40:11 +01:00
Jens Kutilek
cb6676f93e Don't share points in cvar by default (fails in Chrome), adjust tests to test both shared and private points in cvar 2017-11-24 19:06:36 +01:00
Jens Kutilek
b9bca702f6
[varLib] Try a set of used points instead of all points (#1090)
* Try a set of used points instead of all points when testing whether to share points.
* Amend comment, remove unused variable
2017-11-06 11:49:26 +01:00
Jens Kutilek
cb364aff2c Remove outdated comment 2017-10-22 17:56:12 -04:00
Jens Kutilek
3745cf19ec Keep track of whether a tuple with proposed shared points actually can use them 2017-10-22 17:56:12 -04:00
Jens Kutilek
671cdc2edb Reactivate shared point logic 2017-10-22 17:56:12 -04:00
Jens Kutilek
abe0553c63 Fix constant name in unused code 2017-10-22 17:56:12 -04:00
Cosimo Lupo
a1c2cf1137 [TupleVariation] write axis coord values as float in toXML()
https://github.com/fonttools/fonttools/pull/1026#pullrequestreview-56807115
2017-08-17 11:13:00 +01:00
Behdad Esfahbod
3ece5d842c [TupleVariation] Copy items in constructor
Avoids surprises when aller modifies those same objects.
2017-05-18 16:06:10 -07:00
Denis Moyogo Jacquerye
891405fd68 TupleVariation: round deltas before encoding (#861)
* TupleVariationTest.test_compileDeltaValues(): also test floats

* TupleVariation: round deltas before encoding

Python 3 was raising 'struct.error: required argument is not an integer' and Python 2 was truncating when deltas are floats
2017-02-24 08:58:41 -08:00
Sascha Brawer
155ec67ae6 [cvar] Implement cvar table 2017-01-10 17:57:04 +01:00
Sascha Brawer
6a67c6ee0f [cvar] Fix crashing cvar compilation if deltas are None 2017-01-10 10:45:41 +01:00
Sascha Brawer
317c26418a [cvar] Compile tuple variations whose deltas affect constants 2017-01-10 10:10:21 +01:00
Sascha Brawer
689008a4f5 [gvar/cvar] Rename decompileVariationTuples to decompileVariationTupleStore
For consistency with the terminology of the OpenType 1.8 specification,
and for symetry with the compileVariationTupleStore function.
2017-01-09 19:00:39 +01:00
Sascha Brawer
5d3eae404c [cvar] Compile TupleVariationStores in common library 2017-01-09 17:34:45 +01:00
Sascha Brawer
c3d68a684e [cvar] Move compileSharedTuples() to module TupleVariation 2017-01-09 17:01:43 +01:00
Sascha Brawer
87d854e881 [cvar] Move decompilation of shared tuples to TupleVariation.py 2017-01-09 14:25:16 +01:00
Sascha Brawer
24a02fedd7 [cvar] Refactor decompilation of tuple variation stores 2017-01-09 14:05:52 +01:00
Sascha Brawer
625460836a [cvar] Pass table tag to point decompilation routine 2017-01-09 13:23:51 +01:00
Sascha Brawer
de55ab2889 [cvar] Rename numPointsInGlyph to pointCount so it works for cvar
There are no glyphs in the `cvar` table.
2017-01-09 13:21:51 +01:00
Sascha Brawer
7c082600d3 [cvar] Move decompilation for single TupleVariation out of gvar
Rename local variables to match terminology of OpenType 1.8 specification
2017-01-09 12:14:12 +01:00
Sascha Brawer
7f9ab7fc7f [gvar] Remove unused function 2017-01-05 17:54:38 +01:00
Sascha Brawer
039cb48927 [gvar] Move gvar.computeMinMaxCoord() to TupleVariation.inferRegion()
Document what this helper function does, using terminology from
the OpenType 1.8 specification.
2017-01-05 13:35:27 +01:00
Sascha Brawer
39c4ef621c [cvar] Change warning message for out-of-range points 2017-01-05 08:55:36 +01:00
Sascha Brawer
6275668840 [cvar] Support XML input/output for TupleVariations on constant values
OpenType TupleVariations can be used in two places:

* In the `gvar` table, they modify glyph contour points by shifting
  them towards a point in 2D space.

* In the `cvar` table, they modify constant values.

Before this change, we only had code to handle the `gvar` version
which shifts points around by delta values.

After this change, the XML parsing and generation routines of
TupleVariations can handle deltas that modify constant values in the
CVT table, as used in `cvar`.

An upcoming change will add support for the binary encoding of
TupleVariations as needed for `cvar`.
2017-01-04 18:16:14 +01:00
Sascha Brawer
3420bb116c [gvar] Move TupleVariation to its own source file
The TupleVariation structure is used both for `gvar` and `cvar`.
2017-01-04 14:07:38 +01:00