[cff] Provide metrics variation service interface (#50196).
Only now I've got an OTF with an HVAR table for testing... The code in `ftmm.c' uses `FT_FACE_LOOKUP_SERVICE' to get the metrics variations interface. However, this didn't work with `FT_FACE_FIND_GLOBAL_SERVICE' used in `sfnt_init_face'. * src/cff/cffdrivr.c: Include FT_SERVICE_METRICS_VARIATIONS_H. (cff_hadvance_adjust, cff_metrics_adjust): Wrapper functions for metric service functions from the `truetype' module. (cff_service_metrics_variations): New service. (cff_services): Updated. * src/cff/cffpic.h (CFF_SERVICE_METRICS_VAR_GET): New macro. [FT_CONFIG_OPTION_PIC]: Synchronize code. * src/sfnt/sfobjs.c (sfnt_init_face): Replace call to FT_FACE_FIND_GLOBAL_SERVICE with `ft_module_get_service' to always load the service from the `truetype' module.
This commit is contained in:
parent
4058939cb1
commit
fa437d8d3c
23
ChangeLog
23
ChangeLog
|
@ -1,3 +1,26 @@
|
||||||
|
2017-01-31 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
|
[cff] Provide metrics variation service interface (#50196).
|
||||||
|
|
||||||
|
Only now I've got an OTF with an HVAR table for testing...
|
||||||
|
|
||||||
|
The code in `ftmm.c' uses `FT_FACE_LOOKUP_SERVICE' to get the
|
||||||
|
metrics variations interface. However, this didn't work with
|
||||||
|
`FT_FACE_FIND_GLOBAL_SERVICE' used in `sfnt_init_face'.
|
||||||
|
|
||||||
|
* src/cff/cffdrivr.c: Include FT_SERVICE_METRICS_VARIATIONS_H.
|
||||||
|
(cff_hadvance_adjust, cff_metrics_adjust): Wrapper functions for
|
||||||
|
metric service functions from the `truetype' module.
|
||||||
|
(cff_service_metrics_variations): New service.
|
||||||
|
(cff_services): Updated.
|
||||||
|
|
||||||
|
* src/cff/cffpic.h (CFF_SERVICE_METRICS_VAR_GET): New macro.
|
||||||
|
[FT_CONFIG_OPTION_PIC]: Synchronize code.
|
||||||
|
|
||||||
|
* src/sfnt/sfobjs.c (sfnt_init_face): Replace call to
|
||||||
|
FT_FACE_FIND_GLOBAL_SERVICE with `ft_module_get_service' to always
|
||||||
|
load the service from the `truetype' module.
|
||||||
|
|
||||||
2017-01-31 Werner Lemberg <wl@gnu.org>
|
2017-01-31 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
Add framework to support services with 9 functions.
|
Add framework to support services with 9 functions.
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||||
#include FT_SERVICE_MULTIPLE_MASTERS_H
|
#include FT_SERVICE_MULTIPLE_MASTERS_H
|
||||||
|
#include FT_SERVICE_METRICS_VARIATIONS_H
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cfferrs.h"
|
#include "cfferrs.h"
|
||||||
|
@ -1018,6 +1019,49 @@
|
||||||
(FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
|
(FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
|
||||||
(FT_Done_Blend_Func) cff_done_blend /* done_blend */
|
(FT_Done_Blend_Func) cff_done_blend /* done_blend */
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* METRICS VARIATIONS SERVICE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static FT_Error
|
||||||
|
cff_hadvance_adjust( CFF_Face face,
|
||||||
|
FT_UInt gindex,
|
||||||
|
FT_Int *avalue )
|
||||||
|
{
|
||||||
|
FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
|
||||||
|
|
||||||
|
|
||||||
|
return var->hadvance_adjust( FT_FACE( face ), gindex, avalue );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
cff_metrics_adjust( CFF_Face face )
|
||||||
|
{
|
||||||
|
FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
|
||||||
|
|
||||||
|
|
||||||
|
var->metrics_adjust( FT_FACE( face ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
|
||||||
|
cff_service_metrics_variations,
|
||||||
|
|
||||||
|
(FT_HAdvance_Adjust_Func)cff_hadvance_adjust, /* hadvance_adjust */
|
||||||
|
(FT_LSB_Adjust_Func) NULL, /* lsb_adjust */
|
||||||
|
(FT_RSB_Adjust_Func) NULL, /* rsb_adjust */
|
||||||
|
|
||||||
|
(FT_VAdvance_Adjust_Func)NULL, /* vadvance_adjust */
|
||||||
|
(FT_TSB_Adjust_Func) NULL, /* tsb_adjust */
|
||||||
|
(FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
|
||||||
|
(FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
|
||||||
|
|
||||||
|
(FT_Metrics_Adjust_Func) cff_metrics_adjust /* metrics_adjust */
|
||||||
|
)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -1035,11 +1079,12 @@
|
||||||
|
|
||||||
#if !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES && \
|
#if !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES && \
|
||||||
defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||||
FT_DEFINE_SERVICEDESCREC8(
|
FT_DEFINE_SERVICEDESCREC9(
|
||||||
cff_services,
|
cff_services,
|
||||||
|
|
||||||
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
|
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
|
||||||
FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
|
FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
|
||||||
|
FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
|
||||||
FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
|
FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
|
||||||
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
|
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
|
||||||
FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
|
FT_SERVICE_ID_GLYPH_DICT, &CFF_SERVICE_GLYPH_DICT_GET,
|
||||||
|
@ -1060,11 +1105,12 @@
|
||||||
FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
|
FT_SERVICE_ID_PROPERTIES, &CFF_SERVICE_PROPERTIES_GET
|
||||||
)
|
)
|
||||||
#elif defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
#elif defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||||
FT_DEFINE_SERVICEDESCREC7(
|
FT_DEFINE_SERVICEDESCREC8(
|
||||||
cff_services,
|
cff_services,
|
||||||
|
|
||||||
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
|
FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_CFF,
|
||||||
FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
|
FT_SERVICE_ID_MULTI_MASTERS, &CFF_SERVICE_MULTI_MASTERS_GET,
|
||||||
|
FT_SERVICE_ID_METRICS_VARIATIONS, &CFF_SERVICE_METRICS_VAR_GET,
|
||||||
FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
|
FT_SERVICE_ID_POSTSCRIPT_INFO, &CFF_SERVICE_PS_INFO_GET,
|
||||||
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
|
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
|
||||||
FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
|
FT_SERVICE_ID_TT_CMAP, &CFF_SERVICE_GET_CMAP_INFO_GET,
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#define CFF_SERVICE_PROPERTIES_GET cff_service_properties
|
#define CFF_SERVICE_PROPERTIES_GET cff_service_properties
|
||||||
#define CFF_SERVICES_GET cff_services
|
#define CFF_SERVICES_GET cff_services
|
||||||
#define CFF_SERVICE_MULTI_MASTERS_GET cff_service_multi_masters
|
#define CFF_SERVICE_MULTI_MASTERS_GET cff_service_multi_masters
|
||||||
|
#define CFF_SERVICE_METRICS_VAR_GET cff_service_metrics_variations
|
||||||
#define CFF_CMAP_ENCODING_CLASS_REC_GET cff_cmap_encoding_class_rec
|
#define CFF_CMAP_ENCODING_CLASS_REC_GET cff_cmap_encoding_class_rec
|
||||||
#define CFF_CMAP_UNICODE_CLASS_REC_GET cff_cmap_unicode_class_rec
|
#define CFF_CMAP_UNICODE_CLASS_REC_GET cff_cmap_unicode_class_rec
|
||||||
#define CFF_FIELD_HANDLERS_GET cff_field_handlers
|
#define CFF_FIELD_HANDLERS_GET cff_field_handlers
|
||||||
|
@ -46,22 +47,26 @@
|
||||||
#include FT_SERVICE_TT_CMAP_H
|
#include FT_SERVICE_TT_CMAP_H
|
||||||
#include FT_SERVICE_CID_H
|
#include FT_SERVICE_CID_H
|
||||||
#include FT_SERVICE_PROPERTIES_H
|
#include FT_SERVICE_PROPERTIES_H
|
||||||
|
#include FT_SERVICE_MULTIPLE_MASTERS_H
|
||||||
|
#include FT_SERVICE_METRICS_VARIATIONS_H
|
||||||
|
|
||||||
|
|
||||||
FT_BEGIN_HEADER
|
FT_BEGIN_HEADER
|
||||||
|
|
||||||
typedef struct CffModulePIC_
|
typedef struct CffModulePIC_
|
||||||
{
|
{
|
||||||
FT_ServiceDescRec* cff_services;
|
FT_ServiceDescRec* cff_services;
|
||||||
CFF_Field_Handler* cff_field_handlers;
|
CFF_Field_Handler* cff_field_handlers;
|
||||||
FT_Service_PsInfoRec cff_service_ps_info;
|
FT_Service_PsInfoRec cff_service_ps_info;
|
||||||
FT_Service_GlyphDictRec cff_service_glyph_dict;
|
FT_Service_GlyphDictRec cff_service_glyph_dict;
|
||||||
FT_Service_PsFontNameRec cff_service_ps_name;
|
FT_Service_PsFontNameRec cff_service_ps_name;
|
||||||
FT_Service_TTCMapsRec cff_service_get_cmap_info;
|
FT_Service_TTCMapsRec cff_service_get_cmap_info;
|
||||||
FT_Service_CIDRec cff_service_cid_info;
|
FT_Service_CIDRec cff_service_cid_info;
|
||||||
FT_Service_PropertiesRec cff_service_properties;
|
FT_Service_PropertiesRec cff_service_properties;
|
||||||
FT_CMap_ClassRec cff_cmap_encoding_class_rec;
|
FT_Service_MultiMastersRec cff_service_multiple_masters;
|
||||||
FT_CMap_ClassRec cff_cmap_unicode_class_rec;
|
FT_Service_MetricsVariationsRec cff_service_metrics_variations;
|
||||||
|
FT_CMap_ClassRec cff_cmap_encoding_class_rec;
|
||||||
|
FT_CMap_ClassRec cff_cmap_unicode_class_rec;
|
||||||
|
|
||||||
} CffModulePIC;
|
} CffModulePIC;
|
||||||
|
|
||||||
|
@ -83,6 +88,10 @@ FT_BEGIN_HEADER
|
||||||
( GET_PIC( library )->cff_service_properties )
|
( GET_PIC( library )->cff_service_properties )
|
||||||
#define CFF_SERVICES_GET \
|
#define CFF_SERVICES_GET \
|
||||||
( GET_PIC( library )->cff_services )
|
( GET_PIC( library )->cff_services )
|
||||||
|
#define CFF_SERVICE_MULTI_MASTERS_GET \
|
||||||
|
( GET_PIC( library )->cff_service_multi_masters )
|
||||||
|
#define CFF_SERVICE_METRICS_VAR_GET \
|
||||||
|
( GET_PIC( library )->cff_service_metrics_variations )
|
||||||
#define CFF_CMAP_ENCODING_CLASS_REC_GET \
|
#define CFF_CMAP_ENCODING_CLASS_REC_GET \
|
||||||
( GET_PIC( library )->cff_cmap_encoding_class_rec )
|
( GET_PIC( library )->cff_cmap_encoding_class_rec )
|
||||||
#define CFF_CMAP_UNICODE_CLASS_REC_GET \
|
#define CFF_CMAP_UNICODE_CLASS_REC_GET \
|
||||||
|
|
|
@ -894,7 +894,17 @@
|
||||||
0 );
|
0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_FACE_FIND_GLOBAL_SERVICE( face, face->var, METRICS_VARIATIONS );
|
if ( !face->var )
|
||||||
|
{
|
||||||
|
/* we want the metrics variations interface */
|
||||||
|
/* from the `truetype' module only */
|
||||||
|
FT_Module tt_module = FT_Get_Module( library, "truetype" );
|
||||||
|
|
||||||
|
|
||||||
|
face->var = ft_module_get_service( tt_module,
|
||||||
|
FT_SERVICE_ID_METRICS_VARIATIONS,
|
||||||
|
0 );
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FT_TRACE2(( "SFNT driver\n" ));
|
FT_TRACE2(( "SFNT driver\n" ));
|
||||||
|
|
Loading…
Reference in New Issue