61 lines
2.4 KiB
Diff
61 lines
2.4 KiB
Diff
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
|
|
|