[truetype] Clamp variation requests to valid range.
This is required by OpenType 1.8; it also avoids rounding surprises. * src/truetype/ttgxvar.c (TT_Set_Var_Design): Clamp design coordinates outside of the allowed range to always stay within the range instead of producing an error.
This commit is contained in:
parent
328d68449d
commit
b72858c992
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2016-11-03 Behdad Esfahbod <behdad@behdad.org>
|
||||
|
||||
[truetype] Clamp variation requests to valid range.
|
||||
|
||||
This is required by OpenType 1.8; it also avoids rounding surprises.
|
||||
|
||||
* src/truetype/ttgxvar.c (TT_Set_Var_Design): Clamp design coordinates
|
||||
outside of the allowed range to always stay within the range instead
|
||||
of producing an error.
|
||||
|
||||
2016-10-29 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[truetype] Remove clang warnings.
|
||||
|
|
|
@ -1310,26 +1310,33 @@
|
|||
a = mmvar->axis;
|
||||
for ( i = 0; i < num_coords; i++, a++ )
|
||||
{
|
||||
FT_TRACE5(( " %.4f\n", coords[i] / 65536.0 ));
|
||||
if ( coords[i] > a->maximum || coords[i] < a->minimum )
|
||||
FT_Fixed coord = coords[i];
|
||||
|
||||
|
||||
FT_TRACE5(( " %.4f\n", coord / 65536.0 ));
|
||||
if ( coord > a->maximum || coord < a->minimum )
|
||||
{
|
||||
FT_TRACE1(( "TT_Set_Var_Design: normalized design coordinate %.4f\n"
|
||||
" is out of range [%.4f;%.4f]\n",
|
||||
coords[i] / 65536.0,
|
||||
a->minimum / 65536.0,
|
||||
a->maximum / 65536.0 ));
|
||||
error = FT_THROW( Invalid_Argument );
|
||||
goto Exit;
|
||||
FT_TRACE1((
|
||||
"TT_Set_Var_Design: normalized design coordinate %.4f\n"
|
||||
" is out of range [%.4f;%.4f]; clamping\n",
|
||||
coord / 65536.0,
|
||||
a->minimum / 65536.0,
|
||||
a->maximum / 65536.0 ));
|
||||
|
||||
if ( coord > a->maximum)
|
||||
coord = a->maximum;
|
||||
else
|
||||
coord = a->minimum;
|
||||
}
|
||||
|
||||
if ( coords[i] < a->def )
|
||||
if ( coord < a->def )
|
||||
normalized[i] = -FT_DivFix( coords[i] - a->def,
|
||||
a->minimum - a->def );
|
||||
else if ( a->maximum == a->def )
|
||||
normalized[i] = 0;
|
||||
else
|
||||
else if ( coord > a->def )
|
||||
normalized[i] = FT_DivFix( coords[i] - a->def,
|
||||
a->maximum - a->def );
|
||||
else
|
||||
normalized[i] = 0;
|
||||
}
|
||||
|
||||
FT_TRACE5(( "\n" ));
|
||||
|
|
Loading…
Reference in New Issue