summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolaus Waxweiler <madigens@gmail.com>2016-05-31 08:39:52 +0200
committerWerner Lemberg <wl@gnu.org>2016-05-31 08:39:52 +0200
commitb459882804836557bf6a8ccea45421fd87f36097 (patch)
treedb6fd45a9605f407ce2f82425941cdaa6c984954
parentd28eac249a22e924708be483c8cbc39052e5afd1 (diff)
downloadfreetype2-b459882804836557bf6a8ccea45421fd87f36097.tar.gz
[truetype] Let SHPIX move points in the twilight zone in v40.
* src/truetype/ttinterp.c (Ins_SHPIX): 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.
-rw-r--r--ChangeLog10
-rw-r--r--src/truetype/ttinterp.c20
2 files changed, 25 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index b3592bb1c..332f42eec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2016-05-17 Nikolaus Waxweiler <madigens@gmail.com>
+
+ [truetype] Let SHPIX move points in the twilight zone in v40.
+
+ * src/truetype/ttinterp.c (Ins_SHPIX): 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.
+
2016-05-30 Werner Lemberg <wl@gnu.org>
[type42] Support `CharStrings' entry format as created by LilyPond.
diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
index c6df12962..2e3f9ef9d 100644
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -5548,6 +5548,12 @@
#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 +5662,15 @@
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