forked from minhngoc25a/freetype2
[truetype] Reduce Infinality footprint (cont'd).
* src/truetype/ttinterp.c (Ins_DELTAP): Shrink variable scope. (Ins_SHPIX, Ins_MIRP): Revise if-logic.
This commit is contained in:
parent
51a5e3389c
commit
600d59e343
|
@ -1,3 +1,10 @@
|
|||
2020-09-02 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||
|
||||
[truetype] Reduce Infinality footprint (cont'd).
|
||||
|
||||
* src/truetype/ttinterp.c (Ins_DELTAP): Shrink variable scope.
|
||||
(Ins_SHPIX, Ins_MIRP): Revise if-logic.
|
||||
|
||||
2020-09-02 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||
|
||||
[truetype] Reduce Infinality footprint.
|
||||
|
|
|
@ -5756,8 +5756,12 @@
|
|||
}
|
||||
else
|
||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||
if ( SUBPIXEL_HINTING_INFINALITY )
|
||||
if ( SUBPIXEL_HINTING_INFINALITY &&
|
||||
exc->ignore_x_mode )
|
||||
{
|
||||
FT_Int B1, B2;
|
||||
|
||||
|
||||
/* If not using ignore_x_mode rendering, allow ZP2 move. */
|
||||
/* If inline deltas aren't allowed, skip ZP2 move. */
|
||||
/* If using ignore_x_mode rendering, allow ZP2 point move if: */
|
||||
|
@ -5766,75 +5770,57 @@
|
|||
/* - the glyph is specifically set to allow SHPIX moves */
|
||||
/* - the move is on a previously Y-touched point */
|
||||
|
||||
if ( exc->ignore_x_mode )
|
||||
/* save point for later comparison */
|
||||
B1 = exc->zp2.cur[point].y;
|
||||
|
||||
if ( exc->face->sph_compatibility_mode )
|
||||
{
|
||||
FT_Int B1, B2;
|
||||
if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
|
||||
dy = FT_PIX_ROUND( B1 + dy ) - B1;
|
||||
|
||||
/* skip post-iup deltas */
|
||||
if ( exc->iup_called &&
|
||||
( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) ||
|
||||
( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) )
|
||||
goto Skip;
|
||||
|
||||
/* save point for later comparison */
|
||||
if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) &&
|
||||
( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
|
||||
( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ||
|
||||
( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) )
|
||||
Move_Zp2_Point( exc, point, 0, dy, TRUE );
|
||||
|
||||
/* save new point */
|
||||
if ( exc->GS.freeVector.y != 0 )
|
||||
B1 = exc->zp2.cur[point].y;
|
||||
else
|
||||
B1 = exc->zp2.cur[point].x;
|
||||
|
||||
if ( !exc->face->sph_compatibility_mode &&
|
||||
exc->GS.freeVector.y != 0 )
|
||||
{
|
||||
Move_Zp2_Point( exc, point, dx, dy, TRUE );
|
||||
B2 = exc->zp2.cur[point].y;
|
||||
|
||||
/* save new point */
|
||||
if ( exc->GS.freeVector.y != 0 )
|
||||
{
|
||||
B2 = exc->zp2.cur[point].y;
|
||||
|
||||
/* reverse any disallowed moves */
|
||||
if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
|
||||
( B1 & 63 ) != 0 &&
|
||||
( B2 & 63 ) != 0 &&
|
||||
B1 != B2 )
|
||||
Move_Zp2_Point( exc,
|
||||
point,
|
||||
NEG_LONG( dx ),
|
||||
NEG_LONG( dy ),
|
||||
TRUE );
|
||||
}
|
||||
/* reverse any disallowed moves */
|
||||
if ( ( B1 & 63 ) == 0 &&
|
||||
( B2 & 63 ) != 0 &&
|
||||
B1 != B2 )
|
||||
Move_Zp2_Point( exc, point, 0, NEG_LONG( dy ), TRUE );
|
||||
}
|
||||
else if ( exc->face->sph_compatibility_mode )
|
||||
{
|
||||
if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
|
||||
{
|
||||
dx = FT_PIX_ROUND( B1 + dx ) - B1;
|
||||
dy = FT_PIX_ROUND( B1 + dy ) - B1;
|
||||
}
|
||||
|
||||
/* skip post-iup deltas */
|
||||
if ( exc->iup_called &&
|
||||
( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) ||
|
||||
( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) )
|
||||
goto Skip;
|
||||
|
||||
if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) &&
|
||||
( ( exc->is_composite && exc->GS.freeVector.y != 0 ) ||
|
||||
( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ||
|
||||
( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) )
|
||||
Move_Zp2_Point( exc, point, 0, dy, TRUE );
|
||||
|
||||
/* save new point */
|
||||
if ( exc->GS.freeVector.y != 0 )
|
||||
{
|
||||
B2 = exc->zp2.cur[point].y;
|
||||
|
||||
/* reverse any disallowed moves */
|
||||
if ( ( B1 & 63 ) == 0 &&
|
||||
( B2 & 63 ) != 0 &&
|
||||
B1 != B2 )
|
||||
Move_Zp2_Point( exc, point, 0, NEG_LONG( dy ), TRUE );
|
||||
}
|
||||
}
|
||||
else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
|
||||
Move_Zp2_Point( exc, point, dx, dy, TRUE );
|
||||
}
|
||||
else
|
||||
else if ( exc->GS.freeVector.y != 0 )
|
||||
{
|
||||
Move_Zp2_Point( exc, point, dx, dy, TRUE );
|
||||
|
||||
/* save new point */
|
||||
B2 = exc->zp2.cur[point].y;
|
||||
|
||||
/* reverse any disallowed moves */
|
||||
if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
|
||||
( B1 & 63 ) != 0 &&
|
||||
( B2 & 63 ) != 0 &&
|
||||
B1 != B2 )
|
||||
Move_Zp2_Point( exc,
|
||||
point,
|
||||
NEG_LONG( dx ),
|
||||
NEG_LONG( dy ),
|
||||
TRUE );
|
||||
}
|
||||
else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL )
|
||||
Move_Zp2_Point( exc, point, dx, dy, TRUE );
|
||||
}
|
||||
else
|
||||
|
@ -6317,19 +6303,6 @@
|
|||
cvt_dist = NEG_LONG( cvt_dist );
|
||||
}
|
||||
|
||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||
if ( SUBPIXEL_HINTING_INFINALITY &&
|
||||
exc->ignore_x_mode &&
|
||||
exc->GS.freeVector.y != 0 &&
|
||||
( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
|
||||
{
|
||||
if ( cur_dist < -64 )
|
||||
cvt_dist -= 16;
|
||||
else if ( cur_dist > 64 && cur_dist < 84 )
|
||||
cvt_dist += 32;
|
||||
}
|
||||
#endif /* TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY */
|
||||
|
||||
/* control value cut-in and round */
|
||||
|
||||
if ( ( exc->opcode & 4 ) != 0 )
|
||||
|
@ -6380,6 +6353,15 @@
|
|||
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
|
||||
control_value_cutin = 0;
|
||||
|
||||
if ( exc->GS.freeVector.y != 0 &&
|
||||
( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) )
|
||||
{
|
||||
if ( cur_dist < -64 )
|
||||
cvt_dist -= 16;
|
||||
else if ( cur_dist > 64 && cur_dist < 84 )
|
||||
cvt_dist += 32;
|
||||
}
|
||||
|
||||
delta = SUB_LONG( cvt_dist, org_dist );
|
||||
if ( delta < 0 )
|
||||
delta = NEG_LONG( delta );
|
||||
|
@ -6420,23 +6402,20 @@
|
|||
}
|
||||
|
||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||
if ( SUBPIXEL_HINTING_INFINALITY )
|
||||
if ( SUBPIXEL_HINTING_INFINALITY &&
|
||||
exc->ignore_x_mode &&
|
||||
exc->GS.freeVector.y != 0 )
|
||||
{
|
||||
FT_Int B1, B2;
|
||||
FT_Bool reverse_move = FALSE;
|
||||
|
||||
|
||||
B1 = exc->zp1.cur[point].y;
|
||||
|
||||
/* Round moves if necessary */
|
||||
if ( exc->ignore_x_mode &&
|
||||
exc->GS.freeVector.y != 0 &&
|
||||
( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) )
|
||||
if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES )
|
||||
distance = FT_PIX_ROUND( B1 + distance - cur_dist ) - B1 + cur_dist;
|
||||
|
||||
if ( exc->ignore_x_mode &&
|
||||
exc->GS.freeVector.y != 0 &&
|
||||
( exc->opcode & 16 ) == 0 &&
|
||||
if ( ( exc->opcode & 16 ) == 0 &&
|
||||
( exc->opcode & 8 ) == 0 &&
|
||||
( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) )
|
||||
distance += 64;
|
||||
|
@ -6449,22 +6428,12 @@
|
|||
B2 = exc->zp1.cur[point].y;
|
||||
|
||||
/* Reverse move if necessary */
|
||||
if ( exc->ignore_x_mode )
|
||||
{
|
||||
if ( exc->face->sph_compatibility_mode &&
|
||||
exc->GS.freeVector.y != 0 &&
|
||||
if ( ( exc->face->sph_compatibility_mode &&
|
||||
( B1 & 63 ) == 0 &&
|
||||
( B2 & 63 ) != 0 )
|
||||
reverse_move = TRUE;
|
||||
|
||||
if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
|
||||
exc->GS.freeVector.y != 0 &&
|
||||
( B2 & 63 ) != 0 &&
|
||||
( B1 & 63 ) != 0 )
|
||||
reverse_move = TRUE;
|
||||
}
|
||||
|
||||
if ( reverse_move )
|
||||
( B2 & 63 ) != 0 ) ||
|
||||
( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) &&
|
||||
( B1 & 63 ) != 0 &&
|
||||
( B2 & 63 ) != 0 ) )
|
||||
exc->func_move( exc,
|
||||
&exc->zp1,
|
||||
point,
|
||||
|
@ -7150,10 +7119,9 @@
|
|||
FT_UShort A;
|
||||
FT_ULong C, P;
|
||||
FT_Long B;
|
||||
|
||||
|
||||
#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
|
||||
FT_UShort B1, B2;
|
||||
|
||||
|
||||
if ( SUBPIXEL_HINTING_INFINALITY &&
|
||||
exc->ignore_x_mode &&
|
||||
exc->iup_called &&
|
||||
|
@ -7234,6 +7202,9 @@
|
|||
/* rules, always skipping deltas in subpixel direction. */
|
||||
else if ( exc->ignore_x_mode && exc->GS.freeVector.y != 0 )
|
||||
{
|
||||
FT_UShort B1, B2;
|
||||
|
||||
|
||||
/* save the y value of the point now; compare after move */
|
||||
B1 = (FT_UShort)exc->zp0.cur[A].y;
|
||||
|
||||
|
|
Loading…
Reference in New Issue