* src/cff/*: Clean up interface.
Ensure that all driver functions use the signature of the service or driver. This avoids pointer mismatches, which are technically undefined behaviour. Recent compilers are more picky in catching them as part of Control Flow Integrity tests.
This commit is contained in:
parent
8fe50c2adc
commit
c041411917
@ -108,20 +108,20 @@
|
||||
* They can be implemented by format-specific interfaces.
|
||||
*/
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_kerning( FT_Face ttface, /* TT_Face */
|
||||
cff_get_kerning( FT_Face face, /* CFF_Face */
|
||||
FT_UInt left_glyph,
|
||||
FT_UInt right_glyph,
|
||||
FT_Vector* kerning )
|
||||
{
|
||||
TT_Face face = (TT_Face)ttface;
|
||||
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
SFNT_Service sfnt = (SFNT_Service)cffface->sfnt;
|
||||
|
||||
|
||||
kerning->x = 0;
|
||||
kerning->y = 0;
|
||||
|
||||
if ( sfnt )
|
||||
kerning->x = sfnt->get_kerning( face, left_glyph, right_glyph );
|
||||
kerning->x = sfnt->get_kerning( cffface, left_glyph, right_glyph );
|
||||
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
@ -158,38 +158,38 @@
|
||||
* FreeType error code. 0 means success.
|
||||
*/
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_glyph_load( FT_GlyphSlot cffslot, /* CFF_GlyphSlot */
|
||||
FT_Size cffsize, /* CFF_Size */
|
||||
cff_glyph_load( FT_GlyphSlot slot, /* CFF_GlyphSlot */
|
||||
FT_Size size, /* CFF_Size */
|
||||
FT_UInt glyph_index,
|
||||
FT_Int32 load_flags )
|
||||
{
|
||||
FT_Error error;
|
||||
CFF_GlyphSlot slot = (CFF_GlyphSlot)cffslot;
|
||||
CFF_Size size = (CFF_Size)cffsize;
|
||||
CFF_GlyphSlot cffslot = (CFF_GlyphSlot)slot;
|
||||
CFF_Size cffsize = (CFF_Size)size;
|
||||
|
||||
|
||||
if ( !slot )
|
||||
if ( !cffslot )
|
||||
return FT_THROW( Invalid_Slot_Handle );
|
||||
|
||||
FT_TRACE1(( "cff_glyph_load: glyph index %d\n", glyph_index ));
|
||||
|
||||
/* check whether we want a scaled outline or bitmap */
|
||||
if ( !size )
|
||||
if ( !cffsize )
|
||||
load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
|
||||
|
||||
/* reset the size object if necessary */
|
||||
if ( load_flags & FT_LOAD_NO_SCALE )
|
||||
size = NULL;
|
||||
|
||||
if ( size )
|
||||
if ( cffsize )
|
||||
{
|
||||
/* these two objects must have the same parent */
|
||||
if ( cffsize->face != cffslot->face )
|
||||
if ( size->face != slot->face )
|
||||
return FT_THROW( Invalid_Face_Handle );
|
||||
}
|
||||
|
||||
/* now load the glyph outline if necessary */
|
||||
error = cff_slot_load( slot, size, glyph_index, load_flags );
|
||||
error = cff_slot_load( cffslot, cffsize, glyph_index, load_flags );
|
||||
|
||||
/* force drop-out mode to 2 - irrelevant now */
|
||||
/* slot->outline.dropout_mode = 2; */
|
||||
@ -216,7 +216,7 @@
|
||||
/* it is no longer necessary that those values are identical to */
|
||||
/* the values in the `CFF' table */
|
||||
|
||||
TT_Face ttface = (TT_Face)face;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Short dummy;
|
||||
|
||||
|
||||
@ -225,7 +225,7 @@
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
/* no fast retrieval for blended MM fonts without VVAR table */
|
||||
if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) &&
|
||||
!( ttface->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
|
||||
!( cffface->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
|
||||
return FT_THROW( Unimplemented_Feature );
|
||||
#endif
|
||||
|
||||
@ -233,7 +233,7 @@
|
||||
/* otherwise we extract the info from the CFF glyphstrings */
|
||||
/* (instead of synthesizing a global value using the `OS/2' */
|
||||
/* table) */
|
||||
if ( !ttface->vertical_info )
|
||||
if ( !cffface->vertical_info )
|
||||
goto Missing_Table;
|
||||
|
||||
for ( nn = 0; nn < count; nn++ )
|
||||
@ -241,11 +241,11 @@
|
||||
FT_UShort ah;
|
||||
|
||||
|
||||
( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
|
||||
1,
|
||||
start + nn,
|
||||
&dummy,
|
||||
&ah );
|
||||
( (SFNT_Service)cffface->sfnt )->get_metrics( cffface,
|
||||
1,
|
||||
start + nn,
|
||||
&dummy,
|
||||
&ah );
|
||||
|
||||
FT_TRACE5(( " idx %d: advance height %d font unit%s\n",
|
||||
start + nn,
|
||||
@ -259,12 +259,12 @@
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
/* no fast retrieval for blended MM fonts without HVAR table */
|
||||
if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) &&
|
||||
!( ttface->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
|
||||
!( cffface->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
|
||||
return FT_THROW( Unimplemented_Feature );
|
||||
#endif
|
||||
|
||||
/* check whether we have data from the `hmtx' table at all */
|
||||
if ( !ttface->horizontal.number_Of_HMetrics )
|
||||
if ( !cffface->horizontal.number_Of_HMetrics )
|
||||
goto Missing_Table;
|
||||
|
||||
for ( nn = 0; nn < count; nn++ )
|
||||
@ -272,11 +272,11 @@
|
||||
FT_UShort aw;
|
||||
|
||||
|
||||
( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
|
||||
0,
|
||||
start + nn,
|
||||
&dummy,
|
||||
&aw );
|
||||
( (SFNT_Service)cffface->sfnt )->get_metrics( cffface,
|
||||
0,
|
||||
start + nn,
|
||||
&dummy,
|
||||
&aw );
|
||||
|
||||
FT_TRACE5(( " idx %d: advance width %d font unit%s\n",
|
||||
start + nn,
|
||||
@ -312,13 +312,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
static FT_Error
|
||||
cff_get_glyph_name( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_glyph_name( FT_Face face, /* CFF_Face */
|
||||
FT_UInt glyph_index,
|
||||
FT_Pointer buffer,
|
||||
FT_UInt buffer_max )
|
||||
{
|
||||
CFF_Font font = (CFF_Font)face->extra.data;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
CFF_Font font = (CFF_Font)cffface->extra.data;
|
||||
FT_String* gname;
|
||||
FT_UShort sid;
|
||||
FT_Error error;
|
||||
@ -338,10 +339,7 @@
|
||||
|
||||
|
||||
if ( service && service->get_name )
|
||||
return service->get_name( FT_FACE( face ),
|
||||
glyph_index,
|
||||
buffer,
|
||||
buffer_max );
|
||||
return service->get_name( face, glyph_index, buffer, buffer_max );
|
||||
else
|
||||
{
|
||||
FT_ERROR(( "cff_get_glyph_name:"
|
||||
@ -366,7 +364,7 @@
|
||||
/* first, locate the sid in the charset table */
|
||||
sid = font->charset.sids[glyph_index];
|
||||
|
||||
/* now, lookup the name itself */
|
||||
/* now, look up the name itself */
|
||||
gname = cff_index_get_sid_string( font, sid );
|
||||
|
||||
if ( gname )
|
||||
@ -379,21 +377,19 @@
|
||||
}
|
||||
|
||||
|
||||
static FT_UInt
|
||||
cff_get_name_index( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_UInt )
|
||||
cff_get_name_index( FT_Face face, /* CFF_Face */
|
||||
const FT_String* glyph_name )
|
||||
{
|
||||
CFF_Font cff;
|
||||
CFF_Charset charset;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
CFF_Font cff = (CFF_Font)cffface->extra.data;
|
||||
CFF_Charset charset = &cff->charset;
|
||||
FT_Service_PsCMaps psnames;
|
||||
FT_String* name;
|
||||
FT_UShort sid;
|
||||
FT_UInt i;
|
||||
|
||||
|
||||
cff = (CFF_FontRec *)face->extra.data;
|
||||
charset = &cff->charset;
|
||||
|
||||
/* CFF2 table does not have glyph names; */
|
||||
/* we need to use `post' table method */
|
||||
if ( cff->version_major == 2 )
|
||||
@ -408,7 +404,7 @@
|
||||
|
||||
|
||||
if ( service && service->name_index )
|
||||
return service->name_index( FT_FACE( face ), glyph_name );
|
||||
return service->name_index( face, glyph_name );
|
||||
else
|
||||
{
|
||||
FT_ERROR(( "cff_get_name_index:"
|
||||
@ -456,22 +452,23 @@
|
||||
*
|
||||
*/
|
||||
|
||||
static FT_Int
|
||||
FT_CALLBACK_DEF( FT_Int )
|
||||
cff_ps_has_glyph_names( FT_Face face )
|
||||
{
|
||||
return ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) > 0;
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_ps_get_font_info( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_ps_get_font_info( FT_Face face, /* CFF_Face */
|
||||
PS_FontInfoRec* afont_info )
|
||||
{
|
||||
CFF_Font cff = (CFF_Font)face->extra.data;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
CFF_Font cff = (CFF_Font)cffface->extra.data;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
|
||||
|
||||
if ( face->is_cff2 )
|
||||
if ( cffface->is_cff2 )
|
||||
{
|
||||
error = FT_THROW( Invalid_Argument );
|
||||
goto Fail;
|
||||
@ -480,7 +477,7 @@
|
||||
if ( cff && !cff->font_info )
|
||||
{
|
||||
CFF_FontRecDict dict = &cff->top_font.font_dict;
|
||||
FT_Memory memory = face->root.memory;
|
||||
FT_Memory memory = FT_FACE_MEMORY( face );
|
||||
PS_FontInfoRec* font_info = NULL;
|
||||
|
||||
|
||||
@ -513,18 +510,19 @@
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_ps_get_font_extra( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_ps_get_font_extra( FT_Face face, /* CFF_Face */
|
||||
PS_FontExtraRec* afont_extra )
|
||||
{
|
||||
CFF_Font cff = (CFF_Font)face->extra.data;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
CFF_Font cff = (CFF_Font)cffface->extra.data;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
|
||||
|
||||
if ( cff && !cff->font_extra )
|
||||
{
|
||||
CFF_FontRecDict dict = &cff->top_font.font_dict;
|
||||
FT_Memory memory = face->root.memory;
|
||||
FT_Memory memory = FT_FACE_MEMORY( face );
|
||||
PS_FontExtraRec* font_extra = NULL;
|
||||
FT_String* embedded_postscript;
|
||||
|
||||
@ -609,17 +607,18 @@
|
||||
*
|
||||
*/
|
||||
|
||||
static const char*
|
||||
cff_get_ps_name( CFF_Face face )
|
||||
FT_CALLBACK_DEF( const char* )
|
||||
cff_get_ps_name( FT_Face face ) /* CFF_Face */
|
||||
{
|
||||
CFF_Font cff = (CFF_Font)face->extra.data;
|
||||
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
CFF_Font cff = (CFF_Font)cffface->extra.data;
|
||||
SFNT_Service sfnt = (SFNT_Service)cffface->sfnt;
|
||||
|
||||
|
||||
/* following the OpenType specification 1.7, we return the name stored */
|
||||
/* in the `name' table for a CFF wrapped into an SFNT container */
|
||||
|
||||
if ( FT_IS_SFNT( FT_FACE( face ) ) && sfnt )
|
||||
if ( FT_IS_SFNT( face ) && sfnt )
|
||||
{
|
||||
FT_Library library = FT_FACE_LIBRARY( face );
|
||||
FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
|
||||
@ -631,7 +630,7 @@
|
||||
|
||||
|
||||
if ( service && service->get_ps_font_name )
|
||||
return service->get_ps_font_name( FT_FACE( face ) );
|
||||
return service->get_ps_font_name( face );
|
||||
}
|
||||
|
||||
return cff ? (const char*)cff->font_name : NULL;
|
||||
@ -655,7 +654,7 @@
|
||||
* Otherwise call the service function in the sfnt module.
|
||||
*
|
||||
*/
|
||||
static FT_Error
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_cmap_info( FT_CharMap charmap,
|
||||
TT_CMapInfo *cmap_info )
|
||||
{
|
||||
@ -697,14 +696,15 @@
|
||||
* CID INFO SERVICE
|
||||
*
|
||||
*/
|
||||
static FT_Error
|
||||
cff_get_ros( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_ros( FT_Face face, /* FT_Face */
|
||||
const char* *registry,
|
||||
const char* *ordering,
|
||||
FT_Int *supplement )
|
||||
{
|
||||
FT_Error error = FT_Err_Ok;
|
||||
CFF_Font cff = (CFF_Font)face->extra.data;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
CFF_Font cff = (CFF_Font)cffface->extra.data;
|
||||
|
||||
|
||||
if ( cff )
|
||||
@ -754,12 +754,13 @@
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_get_is_cid( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_is_cid( FT_Face face, /* CFF_Face */
|
||||
FT_Bool *is_cid )
|
||||
{
|
||||
FT_Error error = FT_Err_Ok;
|
||||
CFF_Font cff = (CFF_Font)face->extra.data;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
CFF_Font cff = (CFF_Font)cffface->extra.data;
|
||||
|
||||
|
||||
*is_cid = 0;
|
||||
@ -777,17 +778,16 @@
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_get_cid_from_glyph_index( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_cid_from_glyph_index( FT_Face face, /* CFF_Face */
|
||||
FT_UInt glyph_index,
|
||||
FT_UInt *cid )
|
||||
{
|
||||
FT_Error error = FT_Err_Ok;
|
||||
CFF_Font cff;
|
||||
FT_Error error = FT_Err_Ok;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
CFF_Font cff = (CFF_Font)cffface->extra.data;
|
||||
|
||||
|
||||
cff = (CFF_Font)face->extra.data;
|
||||
|
||||
if ( cff )
|
||||
{
|
||||
FT_UInt c;
|
||||
@ -848,181 +848,195 @@
|
||||
*
|
||||
*/
|
||||
|
||||
static FT_Error
|
||||
cff_set_mm_blend( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_set_mm_blend( FT_Face face, /* CFF_Face */
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->set_mm_blend( FT_FACE( face ), num_coords, coords );
|
||||
return mm->set_mm_blend( face, num_coords, coords );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_get_mm_blend( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_mm_blend( FT_Face face, /* CFF_Face */
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->get_mm_blend( FT_FACE( face ), num_coords, coords );
|
||||
return mm->get_mm_blend( face, num_coords, coords );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_set_mm_weightvector( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_set_mm_weightvector( FT_Face face, /* CFF_Face */
|
||||
FT_UInt len,
|
||||
FT_Fixed* weightvector )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->set_mm_weightvector( FT_FACE( face ), len, weightvector );
|
||||
return mm->set_mm_weightvector( face, len, weightvector );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_get_mm_weightvector( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_mm_weightvector( FT_Face face, /* CFF_Face */
|
||||
FT_UInt* len,
|
||||
FT_Fixed* weightvector )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->get_mm_weightvector( FT_FACE( face ), len, weightvector );
|
||||
return mm->get_mm_weightvector( face, len, weightvector );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
cff_construct_ps_name( CFF_Face face )
|
||||
FT_CALLBACK_DEF( void )
|
||||
cff_construct_ps_name( FT_Face face ) /* CFF_Face */
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
mm->construct_ps_name( FT_FACE( face ) );
|
||||
mm->construct_ps_name( face );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_get_mm_var( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_mm_var( FT_Face face, /* CFF_Face */
|
||||
FT_MM_Var* *master )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->get_mm_var( FT_FACE( face ), master );
|
||||
return mm->get_mm_var( face, master );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_set_var_design( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_set_var_design( FT_Face face, /* CFF_Face */
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->set_var_design( FT_FACE( face ), num_coords, coords );
|
||||
return mm->set_var_design( face, num_coords, coords );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_get_var_design( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_var_design( FT_Face face, /* CFF_Face */
|
||||
FT_UInt num_coords,
|
||||
FT_Fixed* coords )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->get_var_design( FT_FACE( face ), num_coords, coords );
|
||||
return mm->get_var_design( face, num_coords, coords );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_set_named_instance( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_set_named_instance( FT_Face face, /* CFF_Face */
|
||||
FT_UInt instance_index )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->set_named_instance( FT_FACE( face ), instance_index );
|
||||
return mm->set_named_instance( face, instance_index );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_get_default_named_instance( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_get_default_named_instance( FT_Face face, /* CFF_Face */
|
||||
FT_UInt *instance_index )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->get_default_named_instance( FT_FACE( face ), instance_index );
|
||||
return mm->get_default_named_instance( face, instance_index );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_load_item_variation_store( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_load_item_variation_store( FT_Face face, /* CFF_Face */
|
||||
FT_ULong offset,
|
||||
GX_ItemVarStore itemStore )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->load_item_var_store( FT_FACE(face), offset, itemStore );
|
||||
return mm->load_item_var_store( face, offset, itemStore );
|
||||
}
|
||||
|
||||
|
||||
static FT_Error
|
||||
cff_load_delta_set_index_mapping( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_load_delta_set_index_mapping( FT_Face face, /* CFF_Face */
|
||||
FT_ULong offset,
|
||||
GX_DeltaSetIdxMap map,
|
||||
GX_ItemVarStore itemStore,
|
||||
FT_ULong table_len )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->load_delta_set_idx_map( FT_FACE( face ), offset, map,
|
||||
return mm->load_delta_set_idx_map( face, offset, map,
|
||||
itemStore, table_len );
|
||||
}
|
||||
|
||||
|
||||
static FT_Int
|
||||
cff_get_item_delta( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Int )
|
||||
cff_get_item_delta( FT_Face face, /* CFF_Face */
|
||||
GX_ItemVarStore itemStore,
|
||||
FT_UInt outerIndex,
|
||||
FT_UInt innerIndex )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->get_item_delta( FT_FACE( face ), itemStore,
|
||||
outerIndex, innerIndex );
|
||||
return mm->get_item_delta( face, itemStore, outerIndex, innerIndex );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
cff_done_item_variation_store( CFF_Face face,
|
||||
FT_CALLBACK_DEF( void )
|
||||
cff_done_item_variation_store( FT_Face face, /* CFF_Face */
|
||||
GX_ItemVarStore itemStore )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
mm->done_item_var_store( FT_FACE( face ), itemStore );
|
||||
mm->done_item_var_store( face, itemStore );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
cff_done_delta_set_index_map( CFF_Face face,
|
||||
FT_CALLBACK_DEF( void )
|
||||
cff_done_delta_set_index_map( FT_Face face, /* CFF_Face */
|
||||
GX_DeltaSetIdxMap deltaSetIdxMap )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
mm->done_delta_set_idx_map( FT_FACE ( face ), deltaSetIdxMap );
|
||||
mm->done_delta_set_idx_map( face, deltaSetIdxMap );
|
||||
}
|
||||
|
||||
|
||||
@ -1077,27 +1091,29 @@
|
||||
*
|
||||
*/
|
||||
|
||||
static FT_Error
|
||||
cff_hadvance_adjust( CFF_Face face,
|
||||
FT_CALLBACK_DEF( FT_Error )
|
||||
cff_hadvance_adjust( FT_Face face, /* CFF_Face */
|
||||
FT_UInt gindex,
|
||||
FT_Int *avalue )
|
||||
{
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MetricsVariations
|
||||
var = (FT_Service_MetricsVariations)face->tt_var;
|
||||
var = (FT_Service_MetricsVariations)cffface->tt_var;
|
||||
|
||||
|
||||
return var->hadvance_adjust( FT_FACE( face ), gindex, avalue );
|
||||
return var->hadvance_adjust( face, gindex, avalue );
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
cff_metrics_adjust( CFF_Face face )
|
||||
FT_CALLBACK_DEF( void )
|
||||
cff_metrics_adjust( FT_Face face ) /* CFF_Face */
|
||||
{
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MetricsVariations
|
||||
var = (FT_Service_MetricsVariations)face->tt_var;
|
||||
var = (FT_Service_MetricsVariations)cffface->tt_var;
|
||||
|
||||
|
||||
var->metrics_adjust( FT_FACE( face ) );
|
||||
var->metrics_adjust( face );
|
||||
}
|
||||
|
||||
|
||||
|
@ -1589,16 +1589,17 @@
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
cff_get_var_blend( CFF_Face face,
|
||||
cff_get_var_blend( FT_Face face, /* CFF_Face */
|
||||
FT_UInt *num_coords,
|
||||
FT_Fixed* *coords,
|
||||
FT_Fixed* *normalizedcoords,
|
||||
FT_MM_Var* *mm_var )
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
return mm->get_var_blend( FT_FACE( face ),
|
||||
return mm->get_var_blend( face,
|
||||
num_coords,
|
||||
coords,
|
||||
normalizedcoords,
|
||||
@ -1607,13 +1608,14 @@
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
cff_done_blend( CFF_Face face )
|
||||
cff_done_blend( FT_Face face ) /* CFF_Face */
|
||||
{
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
|
||||
CFF_Face cffface = (CFF_Face)face;
|
||||
FT_Service_MultiMasters mm = (FT_Service_MultiMasters)cffface->mm;
|
||||
|
||||
|
||||
if ( mm )
|
||||
mm->done_blend( FT_FACE( face ) );
|
||||
mm->done_blend( face );
|
||||
}
|
||||
|
||||
#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
|
||||
|
@ -105,14 +105,14 @@ FT_BEGIN_HEADER
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
FT_LOCAL( FT_Error )
|
||||
cff_get_var_blend( CFF_Face face,
|
||||
cff_get_var_blend( FT_Face face,
|
||||
FT_UInt *num_coords,
|
||||
FT_Fixed* *coords,
|
||||
FT_Fixed* *normalizedcoords,
|
||||
FT_MM_Var* *mm_var );
|
||||
|
||||
FT_LOCAL( void )
|
||||
cff_done_blend( CFF_Face face );
|
||||
cff_done_blend( FT_Face face );
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -1150,7 +1150,7 @@
|
||||
}
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
cff_done_blend( face );
|
||||
cff_done_blend( cffface );
|
||||
face->blend = NULL;
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user