Two fixes to avar mapping

1. Handle segment with two entries correctly,

2. Fix rounding math.  Ouch!

Fixes https://github.com/behdad/harfbuzz/issues/521
This commit is contained in:
Behdad Esfahbod 2017-08-07 21:37:07 -07:00
parent dc2c418e39
commit 5dc30451b8
1 changed files with 9 additions and 4 deletions

View File

@ -57,8 +57,13 @@ struct SegmentMaps : ArrayOf<AxisValueMap>
* that at least -1, 0, and +1 must be mapped. But we include these as * that at least -1, 0, and +1 must be mapped. But we include these as
* part of a better error recovery scheme. */ * part of a better error recovery scheme. */
if (!len) if (len < 2)
return value; {
if (!len)
return value;
else /* len == 1*/
return value - array[0].fromCoord + array[0].toCoord;
}
if (value <= array[0].fromCoord) if (value <= array[0].fromCoord)
return value - array[0].fromCoord + array[0].toCoord; return value - array[0].fromCoord + array[0].toCoord;
@ -76,8 +81,8 @@ struct SegmentMaps : ArrayOf<AxisValueMap>
int denom = array[i].fromCoord - array[i-1].fromCoord; int denom = array[i].fromCoord - array[i-1].fromCoord;
return array[i-1].toCoord + return array[i-1].toCoord +
(array[i].toCoord - array[i-1].toCoord) * ((array[i].toCoord - array[i-1].toCoord) *
(value - array[i-1].fromCoord + denom/2) / denom; (value - array[i-1].fromCoord) + denom/2) / denom;
} }
DEFINE_SIZE_ARRAY (2, array); DEFINE_SIZE_ARRAY (2, array);