>From a1c6bbcbb81ec091b17de5054b3f21ee80520c6c Mon Sep 17 00:00:00 2001 From: Nikolaus Waxweiler Date: Sun, 29 May 2016 20:05:35 +0200 Subject: [PATCH] Let SHPIX move points in the twilight zone in v40. Special case: allow SHPIX to move points in the twilight zone. Otherwise, treat SHPIX the same as DELTAP. Unbreaks various fonts such as older versions of Rokkitt and DTL Argo T Light that would glitch severly after calling ALIGNRP after a blocked SHPIX. --- src/truetype/ttinterp.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index c6df129..f376161 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -5548,6 +5548,10 @@ #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY FT_Int B1, B2; #endif +#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL + FT_Bool in_twilight = exc->GS.gep0 == 0 || exc->GS.gep1 == 0 || exc->GS.gep2 == 0; +#endif + if ( exc->top < exc->GS.loop + 1 ) @@ -5656,11 +5660,14 @@ if ( SUBPIXEL_HINTING_MINIMAL && exc->backwards_compatibility ) { - /* XXX: breaks Rokkitt < v1.2 */ - /* (glyphs explode vertically on ALIGNRP). */ - if ( !( exc->iupx_called && exc->iupy_called ) && - ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) || - ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ) ) + /* Special case: allow SHPIX to move points in the twilight zone. + * Otherwise, treat SHPIX the same as DELTAP. Unbreaks various fonts + * such as older versions of Rokkitt and DTL Argo T Light that would + * glitch severly after calling ALIGNRP after a blocked SHPIX. */ + if ( in_twilight || + ( !( exc->iupx_called && exc->iupy_called ) && + ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) || + ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) ) ) ) Move_Zp2_Point( exc, point, 0, dy, TRUE ); } else -- 2.5.5