[truetype] Reduce Infinality footprint.
* src/truetype/ttinterp.c (Ins_SHPIX, Ins_MSIRP, Ins_MIAP, Ins_MDRP, Ins_MIRP): Shrink variable scopes and consolidate ifdefs.
This commit is contained in:
parent
e6c7e4b42b
commit
51a5e3389c
|
@ -1,3 +1,10 @@
|
||||||
|
2020-09-02 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||||
|
|
||||||
|
[truetype] Reduce Infinality footprint.
|
||||||
|
|
||||||
|
* src/truetype/ttinterp.c (Ins_SHPIX, Ins_MSIRP, Ins_MIAP, Ins_MDRP,
|
||||||
|
Ins_MIRP): Shrink variable scopes and consolidate ifdefs.
|
||||||
|
|
||||||
2020-09-01 Alexei Podtelezhnikov <apodtele@gmail.com>
|
2020-09-01 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||||
|
|
||||||
[truetype] Refactor compensation color.
|
[truetype] Refactor compensation color.
|
||||||
|
|
|
@ -5722,9 +5722,6 @@
|
||||||
{
|
{
|
||||||
FT_F26Dot6 dx, dy;
|
FT_F26Dot6 dx, dy;
|
||||||
FT_UShort point;
|
FT_UShort point;
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
|
||||||
FT_Int B1, B2;
|
|
||||||
#endif
|
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
|
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
|
||||||
FT_Bool in_twilight = FT_BOOL( exc->GS.gep0 == 0 ||
|
FT_Bool in_twilight = FT_BOOL( exc->GS.gep0 == 0 ||
|
||||||
exc->GS.gep1 == 0 ||
|
exc->GS.gep1 == 0 ||
|
||||||
|
@ -5771,6 +5768,9 @@
|
||||||
|
|
||||||
if ( exc->ignore_x_mode )
|
if ( exc->ignore_x_mode )
|
||||||
{
|
{
|
||||||
|
FT_Int B1, B2;
|
||||||
|
|
||||||
|
|
||||||
/* save point for later comparison */
|
/* save point for later comparison */
|
||||||
if ( exc->GS.freeVector.y != 0 )
|
if ( exc->GS.freeVector.y != 0 )
|
||||||
B1 = exc->zp2.cur[point].y;
|
B1 = exc->zp2.cur[point].y;
|
||||||
|
@ -5882,22 +5882,8 @@
|
||||||
{
|
{
|
||||||
FT_UShort point = 0;
|
FT_UShort point = 0;
|
||||||
FT_F26Dot6 distance;
|
FT_F26Dot6 distance;
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
|
||||||
FT_F26Dot6 control_value_cutin = 0;
|
|
||||||
FT_F26Dot6 delta;
|
|
||||||
|
|
||||||
|
|
||||||
if ( SUBPIXEL_HINTING_INFINALITY )
|
|
||||||
{
|
|
||||||
control_value_cutin = exc->GS.control_value_cutin;
|
|
||||||
|
|
||||||
if ( exc->ignore_x_mode &&
|
|
||||||
exc->GS.freeVector.x != 0 &&
|
|
||||||
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
|
||||||
control_value_cutin = 0;
|
|
||||||
}
|
|
||||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
|
||||||
|
|
||||||
point = (FT_UShort)args[0];
|
point = (FT_UShort)args[0];
|
||||||
|
|
||||||
if ( BOUNDS( point, exc->zp1.n_points ) ||
|
if ( BOUNDS( point, exc->zp1.n_points ) ||
|
||||||
|
@ -5920,16 +5906,25 @@
|
||||||
distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
|
distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 );
|
||||||
|
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||||
delta = SUB_LONG( distance, args[1] );
|
|
||||||
if ( delta < 0 )
|
|
||||||
delta = NEG_LONG( delta );
|
|
||||||
|
|
||||||
/* subpixel hinting - make MSIRP respect CVT cut-in; */
|
/* subpixel hinting - make MSIRP respect CVT cut-in; */
|
||||||
if ( SUBPIXEL_HINTING_INFINALITY &&
|
if ( SUBPIXEL_HINTING_INFINALITY &&
|
||||||
exc->ignore_x_mode &&
|
exc->ignore_x_mode &&
|
||||||
exc->GS.freeVector.x != 0 &&
|
exc->GS.freeVector.x != 0 )
|
||||||
delta >= control_value_cutin )
|
{
|
||||||
distance = args[1];
|
FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin;
|
||||||
|
FT_F26Dot6 delta;
|
||||||
|
|
||||||
|
|
||||||
|
if ( !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
||||||
|
control_value_cutin = 0;
|
||||||
|
|
||||||
|
delta = SUB_LONG( distance, args[1] );
|
||||||
|
if ( delta < 0 )
|
||||||
|
delta = NEG_LONG( delta );
|
||||||
|
|
||||||
|
if ( delta >= control_value_cutin )
|
||||||
|
distance = args[1];
|
||||||
|
}
|
||||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
||||||
|
|
||||||
exc->func_move( exc,
|
exc->func_move( exc,
|
||||||
|
@ -6005,21 +6000,10 @@
|
||||||
FT_UShort point;
|
FT_UShort point;
|
||||||
FT_F26Dot6 distance;
|
FT_F26Dot6 distance;
|
||||||
FT_F26Dot6 org_dist;
|
FT_F26Dot6 org_dist;
|
||||||
FT_F26Dot6 control_value_cutin;
|
|
||||||
|
|
||||||
|
|
||||||
control_value_cutin = exc->GS.control_value_cutin;
|
cvtEntry = (FT_ULong)args[1];
|
||||||
cvtEntry = (FT_ULong)args[1];
|
point = (FT_UShort)args[0];
|
||||||
point = (FT_UShort)args[0];
|
|
||||||
|
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
|
||||||
if ( SUBPIXEL_HINTING_INFINALITY &&
|
|
||||||
exc->ignore_x_mode &&
|
|
||||||
exc->GS.freeVector.x != 0 &&
|
|
||||||
exc->GS.freeVector.y == 0 &&
|
|
||||||
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
|
||||||
control_value_cutin = 0;
|
|
||||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
|
||||||
|
|
||||||
if ( BOUNDS( point, exc->zp0.n_points ) ||
|
if ( BOUNDS( point, exc->zp0.n_points ) ||
|
||||||
BOUNDSL( cvtEntry, exc->cvtSize ) )
|
BOUNDSL( cvtEntry, exc->cvtSize ) )
|
||||||
|
@ -6079,9 +6063,19 @@
|
||||||
|
|
||||||
if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */
|
if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */
|
||||||
{
|
{
|
||||||
|
FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin;
|
||||||
FT_F26Dot6 delta;
|
FT_F26Dot6 delta;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||||
|
if ( SUBPIXEL_HINTING_INFINALITY &&
|
||||||
|
exc->ignore_x_mode &&
|
||||||
|
exc->GS.freeVector.x != 0 &&
|
||||||
|
exc->GS.freeVector.y == 0 &&
|
||||||
|
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
||||||
|
control_value_cutin = 0;
|
||||||
|
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
||||||
|
|
||||||
delta = SUB_LONG( distance, org_dist );
|
delta = SUB_LONG( distance, org_dist );
|
||||||
if ( delta < 0 )
|
if ( delta < 0 )
|
||||||
delta = NEG_LONG( delta );
|
delta = NEG_LONG( delta );
|
||||||
|
@ -6118,19 +6112,9 @@
|
||||||
FT_Long* args )
|
FT_Long* args )
|
||||||
{
|
{
|
||||||
FT_UShort point = 0;
|
FT_UShort point = 0;
|
||||||
FT_F26Dot6 org_dist, distance, minimum_distance;
|
FT_F26Dot6 org_dist, distance;
|
||||||
|
|
||||||
|
|
||||||
minimum_distance = exc->GS.minimum_distance;
|
|
||||||
|
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
|
||||||
if ( SUBPIXEL_HINTING_INFINALITY &&
|
|
||||||
exc->ignore_x_mode &&
|
|
||||||
exc->GS.freeVector.x != 0 &&
|
|
||||||
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
|
||||||
minimum_distance = 0;
|
|
||||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
|
||||||
|
|
||||||
point = (FT_UShort)args[0];
|
point = (FT_UShort)args[0];
|
||||||
|
|
||||||
if ( BOUNDS( point, exc->zp1.n_points ) ||
|
if ( BOUNDS( point, exc->zp1.n_points ) ||
|
||||||
|
@ -6215,6 +6199,17 @@
|
||||||
|
|
||||||
if ( ( exc->opcode & 8 ) != 0 )
|
if ( ( exc->opcode & 8 ) != 0 )
|
||||||
{
|
{
|
||||||
|
FT_F26Dot6 minimum_distance = exc->GS.minimum_distance;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||||
|
if ( SUBPIXEL_HINTING_INFINALITY &&
|
||||||
|
exc->ignore_x_mode &&
|
||||||
|
exc->GS.freeVector.x != 0 &&
|
||||||
|
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
||||||
|
minimum_distance = 0;
|
||||||
|
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
||||||
|
|
||||||
if ( org_dist >= 0 )
|
if ( org_dist >= 0 )
|
||||||
{
|
{
|
||||||
if ( distance < minimum_distance )
|
if ( distance < minimum_distance )
|
||||||
|
@ -6258,30 +6253,13 @@
|
||||||
FT_F26Dot6 cvt_dist,
|
FT_F26Dot6 cvt_dist,
|
||||||
distance,
|
distance,
|
||||||
cur_dist,
|
cur_dist,
|
||||||
org_dist,
|
org_dist;
|
||||||
control_value_cutin,
|
|
||||||
minimum_distance;
|
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
|
||||||
FT_Int B1 = 0; /* pacify compiler */
|
|
||||||
FT_Int B2 = 0;
|
|
||||||
FT_Bool reverse_move = FALSE;
|
|
||||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
|
||||||
|
|
||||||
FT_F26Dot6 delta;
|
FT_F26Dot6 delta;
|
||||||
|
|
||||||
|
|
||||||
minimum_distance = exc->GS.minimum_distance;
|
point = (FT_UShort)args[0];
|
||||||
control_value_cutin = exc->GS.control_value_cutin;
|
cvtEntry = (FT_ULong)( ADD_LONG( args[1], 1 ) );
|
||||||
point = (FT_UShort)args[0];
|
|
||||||
cvtEntry = (FT_ULong)( ADD_LONG( args[1], 1 ) );
|
|
||||||
|
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
|
||||||
if ( SUBPIXEL_HINTING_INFINALITY &&
|
|
||||||
exc->ignore_x_mode &&
|
|
||||||
exc->GS.freeVector.x != 0 &&
|
|
||||||
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
|
||||||
control_value_cutin = minimum_distance = 0;
|
|
||||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
|
||||||
|
|
||||||
/* XXX: UNDOCUMENTED! cvt[-1] = 0 always */
|
/* XXX: UNDOCUMENTED! cvt[-1] = 0 always */
|
||||||
|
|
||||||
|
@ -6361,6 +6339,9 @@
|
||||||
|
|
||||||
if ( exc->GS.gep0 == exc->GS.gep1 )
|
if ( exc->GS.gep0 == exc->GS.gep1 )
|
||||||
{
|
{
|
||||||
|
FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin;
|
||||||
|
|
||||||
|
|
||||||
/* XXX: According to Greg Hitchcock, the following wording is */
|
/* XXX: According to Greg Hitchcock, the following wording is */
|
||||||
/* the right one: */
|
/* the right one: */
|
||||||
/* */
|
/* */
|
||||||
|
@ -6392,6 +6373,13 @@
|
||||||
exc->ignore_x_mode &&
|
exc->ignore_x_mode &&
|
||||||
exc->GS.gep0 == exc->GS.gep1 )
|
exc->GS.gep0 == exc->GS.gep1 )
|
||||||
{
|
{
|
||||||
|
FT_F26Dot6 control_value_cutin = exc->GS.control_value_cutin;
|
||||||
|
|
||||||
|
|
||||||
|
if ( exc->GS.freeVector.x != 0 &&
|
||||||
|
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
||||||
|
control_value_cutin = 0;
|
||||||
|
|
||||||
delta = SUB_LONG( cvt_dist, org_dist );
|
delta = SUB_LONG( cvt_dist, org_dist );
|
||||||
if ( delta < 0 )
|
if ( delta < 0 )
|
||||||
delta = NEG_LONG( delta );
|
delta = NEG_LONG( delta );
|
||||||
|
@ -6408,6 +6396,17 @@
|
||||||
|
|
||||||
if ( ( exc->opcode & 8 ) != 0 )
|
if ( ( exc->opcode & 8 ) != 0 )
|
||||||
{
|
{
|
||||||
|
FT_F26Dot6 minimum_distance = exc->GS.minimum_distance;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||||
|
if ( SUBPIXEL_HINTING_INFINALITY &&
|
||||||
|
exc->ignore_x_mode &&
|
||||||
|
exc->GS.freeVector.x != 0 &&
|
||||||
|
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
||||||
|
minimum_distance = 0;
|
||||||
|
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
||||||
|
|
||||||
if ( org_dist >= 0 )
|
if ( org_dist >= 0 )
|
||||||
{
|
{
|
||||||
if ( distance < minimum_distance )
|
if ( distance < minimum_distance )
|
||||||
|
@ -6423,6 +6422,10 @@
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||||
if ( SUBPIXEL_HINTING_INFINALITY )
|
if ( SUBPIXEL_HINTING_INFINALITY )
|
||||||
{
|
{
|
||||||
|
FT_Int B1, B2;
|
||||||
|
FT_Bool reverse_move = FALSE;
|
||||||
|
|
||||||
|
|
||||||
B1 = exc->zp1.cur[point].y;
|
B1 = exc->zp1.cur[point].y;
|
||||||
|
|
||||||
/* Round moves if necessary */
|
/* Round moves if necessary */
|
||||||
|
@ -6437,17 +6440,12 @@
|
||||||
( exc->opcode & 8 ) == 0 &&
|
( exc->opcode & 8 ) == 0 &&
|
||||||
( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
|
( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
|
||||||
distance += 64;
|
distance += 64;
|
||||||
}
|
|
||||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
|
||||||
|
|
||||||
exc->func_move( exc,
|
exc->func_move( exc,
|
||||||
&exc->zp1,
|
&exc->zp1,
|
||||||
point,
|
point,
|
||||||
SUB_LONG( distance, cur_dist ) );
|
SUB_LONG( distance, cur_dist ) );
|
||||||
|
|
||||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
|
||||||
if ( SUBPIXEL_HINTING_INFINALITY )
|
|
||||||
{
|
|
||||||
B2 = exc->zp1.cur[point].y;
|
B2 = exc->zp1.cur[point].y;
|
||||||
|
|
||||||
/* Reverse move if necessary */
|
/* Reverse move if necessary */
|
||||||
|
@ -6472,9 +6470,14 @@
|
||||||
point,
|
point,
|
||||||
SUB_LONG( cur_dist, distance ) );
|
SUB_LONG( cur_dist, distance ) );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
||||||
|
|
||||||
|
exc->func_move( exc,
|
||||||
|
&exc->zp1,
|
||||||
|
point,
|
||||||
|
SUB_LONG( distance, cur_dist ) );
|
||||||
|
|
||||||
Fail:
|
Fail:
|
||||||
exc->GS.rp1 = exc->GS.rp0;
|
exc->GS.rp1 = exc->GS.rp0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue