提交 5dc30451 编写于 作者: B Behdad Esfahbod

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
上级 dc2c418e
......@@ -57,8 +57,13 @@ struct SegmentMaps : ArrayOf<AxisValueMap>
* that at least -1, 0, and +1 must be mapped. But we include these as
* part of a better error recovery scheme. */
if (!len)
return value;
if (len < 2)
{
if (!len)
return value;
else /* len == 1*/
return value - array[0].fromCoord + array[0].toCoord;
}
if (value <= array[0].fromCoord)
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;
return array[i-1].toCoord +
(array[i].toCoord - array[i-1].toCoord) *
(value - array[i-1].fromCoord + denom/2) / denom;
((array[i].toCoord - array[i-1].toCoord) *
(value - array[i-1].fromCoord) + denom/2) / denom;
}
DEFINE_SIZE_ARRAY (2, array);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册