forked from minhngoc25a/freetype2
[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>
|
2016-10-29 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
[truetype] Remove clang warnings.
|
[truetype] Remove clang warnings.
|
||||||
|
|
|
@ -1310,26 +1310,33 @@
|
||||||
a = mmvar->axis;
|
a = mmvar->axis;
|
||||||
for ( i = 0; i < num_coords; i++, a++ )
|
for ( i = 0; i < num_coords; i++, a++ )
|
||||||
{
|
{
|
||||||
FT_TRACE5(( " %.4f\n", coords[i] / 65536.0 ));
|
FT_Fixed coord = coords[i];
|
||||||
if ( coords[i] > a->maximum || coords[i] < a->minimum )
|
|
||||||
|
|
||||||
|
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"
|
FT_TRACE1((
|
||||||
" is out of range [%.4f;%.4f]\n",
|
"TT_Set_Var_Design: normalized design coordinate %.4f\n"
|
||||||
coords[i] / 65536.0,
|
" is out of range [%.4f;%.4f]; clamping\n",
|
||||||
|
coord / 65536.0,
|
||||||
a->minimum / 65536.0,
|
a->minimum / 65536.0,
|
||||||
a->maximum / 65536.0 ));
|
a->maximum / 65536.0 ));
|
||||||
error = FT_THROW( Invalid_Argument );
|
|
||||||
goto Exit;
|
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,
|
normalized[i] = -FT_DivFix( coords[i] - a->def,
|
||||||
a->minimum - a->def );
|
a->minimum - a->def );
|
||||||
else if ( a->maximum == a->def )
|
else if ( coord > a->def )
|
||||||
normalized[i] = 0;
|
|
||||||
else
|
|
||||||
normalized[i] = FT_DivFix( coords[i] - a->def,
|
normalized[i] = FT_DivFix( coords[i] - a->def,
|
||||||
a->maximum - a->def );
|
a->maximum - a->def );
|
||||||
|
else
|
||||||
|
normalized[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_TRACE5(( "\n" ));
|
FT_TRACE5(( "\n" ));
|
||||||
|
|
Loading…
Reference in New Issue