From a8652c59daca62b5f25680928efcdd04ea9f6731 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 18 Dec 2016 18:12:03 +0100 Subject: [PATCH] [truetype, cff] Extend `get_var_blend' function of MM service. In particular, we need access to named instance data. * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func): Add argument for `FT_MM_Var'. * src/cff/cffload.c (cff_get_var_blend): Updated. * src/cff/cffload.h: Updated. * src/cff/cf2ft.c (cf2_getNormalizedVector): Updated. * src/truetype/ttgxvar.c (tt_get_var_blend): Updated. Accept value `NULL' for arguments. * src/truetype/ttgxvar.h: Updated. --- ChangeLog | 18 ++++++++++++++++ include/freetype/internal/services/svmm.h | 7 ++++--- src/cff/cf2ft.c | 2 +- src/cff/cffload.c | 9 ++++---- src/cff/cffload.h | 7 ++++--- src/truetype/ttgxvar.c | 25 +++++++++++++++-------- src/truetype/ttgxvar.h | 7 ++++--- 7 files changed, 53 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index 75a33bd86..46623ad52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2016-12-18 Werner Lemberg + + [truetype, cff] Extend `get_var_blend' function of MM service. + + In particular, we need access to named instance data. + + * include/freetype/internal/services/svmm.h (FT_Get_Var_Blend_Func): + Add argument for `FT_MM_Var'. + + * src/cff/cffload.c (cff_get_var_blend): Updated. + * src/cff/cffload.h: Updated. + + * src/cff/cf2ft.c (cf2_getNormalizedVector): Updated. + + * src/truetype/ttgxvar.c (tt_get_var_blend): Updated. + Accept value `NULL' for arguments. + * src/truetype/ttgxvar.h: Updated. + 2016-12-18 Werner Lemberg [sfnt] Handle `fvar' with zero axes as a non-MM font. diff --git a/include/freetype/internal/services/svmm.h b/include/freetype/internal/services/svmm.h index 21dbd873c..e54845a54 100644 --- a/include/freetype/internal/services/svmm.h +++ b/include/freetype/internal/services/svmm.h @@ -69,9 +69,10 @@ FT_BEGIN_HEADER FT_Long* coords ); typedef FT_Error - (*FT_Get_Var_Blend_Func)( FT_Face face, - FT_UInt *num_coords, - FT_Fixed* *coords ); + (*FT_Get_Var_Blend_Func)( FT_Face face, + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_MM_Var* *mm_var ); typedef void (*FT_Done_Blend_Func)( FT_Face ); diff --git a/src/cff/cf2ft.c b/src/cff/cf2ft.c index 02f16ab07..a7fb5aa2e 100644 --- a/src/cff/cf2ft.c +++ b/src/cff/cf2ft.c @@ -450,7 +450,7 @@ FT_ASSERT( decoder && decoder->builder.face ); FT_ASSERT( vec && len ); - return cff_get_var_blend( decoder->builder.face, len, vec ); + return cff_get_var_blend( decoder->builder.face, len, vec, NULL ); } #endif diff --git a/src/cff/cffload.c b/src/cff/cffload.c index d347b0aa4..c097523ea 100644 --- a/src/cff/cffload.c +++ b/src/cff/cffload.c @@ -1548,14 +1548,15 @@ #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT FT_LOCAL_DEF( FT_Error ) - cff_get_var_blend( CFF_Face face, - FT_UInt *num_coords, - FT_Fixed* *coords ) + cff_get_var_blend( CFF_Face face, + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_MM_Var* *mm_var ) { FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm; - return mm->get_var_blend( FT_FACE( face ), num_coords, coords ); + return mm->get_var_blend( FT_FACE( face ), num_coords, coords, mm_var ); } diff --git a/src/cff/cffload.h b/src/cff/cffload.h index 2da726ca5..dc3a2c523 100644 --- a/src/cff/cffload.h +++ b/src/cff/cffload.h @@ -105,9 +105,10 @@ FT_BEGIN_HEADER #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT FT_LOCAL( FT_Error ) - cff_get_var_blend( CFF_Face face, - FT_UInt *num_coords, - FT_Fixed* *coords ); + cff_get_var_blend( CFF_Face face, + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_MM_Var* *mm_var ); FT_LOCAL( void ) cff_done_blend( CFF_Face face ); diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c index 3bcec27ac..5a4e8f5f5 100644 --- a/src/truetype/ttgxvar.c +++ b/src/truetype/ttgxvar.c @@ -2740,24 +2740,33 @@ /* tt_get_var_blend */ /* */ /* */ - /* An internal version of `TT_Get_MM_Blend' that just returns */ + /* An extended internal version of `TT_Get_MM_Blend' that returns */ /* pointers instead of copying data, without any initialization of */ /* the MM machinery in case it isn't loaded yet. */ /* */ FT_LOCAL_DEF( FT_Error ) - tt_get_var_blend( TT_Face face, - FT_UInt *num_coords, - FT_Fixed* *coords ) + tt_get_var_blend( TT_Face face, + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_MM_Var* *mm_var ) { if ( face->blend ) { - *num_coords = face->blend->num_axis; - *coords = face->blend->normalizedcoords; + if ( num_coords ) + *num_coords = face->blend->num_axis; + if ( coords ) + *coords = face->blend->normalizedcoords; + if ( mm_var ) + *mm_var = face->blend->mmvar; } else { - *num_coords = 0; - *coords = NULL; + if ( num_coords ) + *num_coords = 0; + if ( coords ) + *coords = NULL; + if ( mm_var ) + *mm_var = NULL; } return FT_Err_Ok; diff --git a/src/truetype/ttgxvar.h b/src/truetype/ttgxvar.h index 95f991fc7..215e109cc 100644 --- a/src/truetype/ttgxvar.h +++ b/src/truetype/ttgxvar.h @@ -260,9 +260,10 @@ FT_BEGIN_HEADER FT_Int *adelta ); FT_LOCAL( FT_Error ) - tt_get_var_blend( TT_Face face, - FT_UInt *num_coords, - FT_Fixed* *coords ); + tt_get_var_blend( TT_Face face, + FT_UInt *num_coords, + FT_Fixed* *coords, + FT_MM_Var* *mm_var ); FT_LOCAL( void ) tt_done_blend( TT_Face face );