summarylogtreecommitdiffstats
path: root/0004-Properly-handle-phantom-points-for-variation-fonts-5.patch
diff options
context:
space:
mode:
Diffstat (limited to '0004-Properly-handle-phantom-points-for-variation-fonts-5.patch')
-rw-r--r--0004-Properly-handle-phantom-points-for-variation-fonts-5.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/0004-Properly-handle-phantom-points-for-variation-fonts-5.patch b/0004-Properly-handle-phantom-points-for-variation-fonts-5.patch
new file mode 100644
index 000000000000..3f498d6f4fbf
--- /dev/null
+++ b/0004-Properly-handle-phantom-points-for-variation-fonts-5.patch
@@ -0,0 +1,60 @@
+From 2d7a2292f80368125c08f3818faf6926bcc9eb5d Mon Sep 17 00:00:00 2001
+From: Ben Wagner <bungeman@google.com>
+Date: Fri, 12 Jul 2019 10:48:10 +0200
+Subject: [PATCH 4/4] Properly handle phantom points for variation fonts
+ (#56601).
+
+* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Scale phantom
+points if HVAR and/or VVAR is present.
+---
+ src/truetype/ttgload.c | 27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
+index a04684086..093eed839 100644
+--- a/src/truetype/ttgload.c
++++ b/src/truetype/ttgload.c
+@@ -1102,19 +1102,34 @@
+ }
+
+ #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+- /* if we have a HVAR table, `pp1' and/or `pp2' are already adjusted */
+- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) ||
+- !IS_HINTED( loader->load_flags ) )
++ /* if we have a HVAR table, `pp1' and/or `pp2' */
++ /* are already adjusted but unscaled */
++ if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) &&
++ IS_HINTED( loader->load_flags ) )
++ {
++ loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
++ loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
++ /* pp1.y and pp2.y are always zero */
++ }
++ else
+ #endif
+ {
+ loader->pp1 = outline->points[n_points - 4];
+ loader->pp2 = outline->points[n_points - 3];
+ }
+
+ #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+- /* if we have a VVAR table, `pp3' and/or `pp4' are already adjusted */
+- if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) ||
+- !IS_HINTED( loader->load_flags ) )
++ /* if we have a VVAR table, `pp3' and/or `pp4' */
++ /* are already adjusted but unscaled */
++ if ( ( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) &&
++ IS_HINTED( loader->load_flags ) )
++ {
++ loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
++ loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
++ loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
++ loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
++ }
++ else
+ #endif
+ {
+ loader->pp3 = outline->points[n_points - 2];
+--
+2.25.1
+