>>>>> "JHC" == James Cloos <[EMAIL PROTECTED]> writes:
JHC> When it does report a false value, it is always the case that: JHC> (master->axis[i].def)<<16 == master->axis[i].minimum Or, put another way, for every error I saw it was the case that: master->axis[i].minimum == FT_INT_TO_FIXED(master->axis[i].def) t1load.c:T1_Get_MM_Var() does: mmvar->axis[i].minimum = FT_INT_TO_FIXED( mmaster.axis[i].minimum); mmvar->axis[i].maximum = FT_INT_TO_FIXED( mmaster.axis[i].maximum); mmvar->axis[i].def = ( mmvar->axis[i].minimum + mmvar->axis[i].maximum ) / 2; and then later updated .def with: mmvar->axis[i].def = mm_axis_unmap( &blend->design_map[i], axiscoords[i] ); but only if ( blend->num_designs == 1U << blend->num_axis ). mm_axis_unmap() looks like: FT_LOCAL_DEF( FT_Fixed ) mm_axis_unmap( PS_DesignMap axismap, FT_Fixed ncv ) { int j; if ( ncv <= axismap->blend_points[0] ) return axismap->design_points[0]; for ( j = 1; j < axismap->num_points; ++j ) { if ( ncv <= axismap->blend_points[j] ) { FT_Fixed t = FT_MulDiv( ncv - axismap->blend_points[j - 1], 0x10000L, axismap->blend_points[j] - axismap->blend_points[j - 1] ); return FT_INT_TO_FIXED( axismap->design_points[j - 1] ) + FT_MulDiv( t, axismap->design_points[j] - axismap->design_points[j - 1], 1L ); } } return axismap->design_points[axismap->num_points - 1]; } The design_points and blend_points are created by: map->design_points[p] = T1_ToInt( parser ); map->blend_points [p] = T1_ToFixed( parser, 0 ); That means that mm_axis_unmap returns Int values if ncv is out of range and Fixed values if it is in range. I'll post a proposed patch momentarily. -JimC -- James Cloos <[EMAIL PROTECTED]> OpenPGP: 1024D/ED7DAEA6 _______________________________________________ Freetype-devel mailing list Freetype-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/freetype-devel