[type1, cid] Add hinting engine switch.
Implement property service in `type1' and `cid' drivers to allow switching between FreeType or Adobe hinting engine when both are available. * src/cid/cidriver.c (cid_property_{set,get}, cid_services), src/type1/t1driver.c (t1_property_{set,get}, t1_services): Add Properties service. * src/cid/cidobjs.c (cid_driver_init), src/type1/t1objs.c (T1_Driver_Init): Add default property values.
This commit is contained in:
parent
dff40d03df
commit
7e23568b16
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
||||||
|
2017-10-12 Ewald Hew <ewaldhew@gmail.com>
|
||||||
|
|
||||||
|
[type1, cid] Add hinting engine switch.
|
||||||
|
|
||||||
|
Implement property service in `type1' and `cid' drivers to allow
|
||||||
|
switching between FreeType or Adobe hinting engine when both are
|
||||||
|
available.
|
||||||
|
|
||||||
|
* src/cid/cidriver.c (cid_property_{set,get}, cid_services),
|
||||||
|
src/type1/t1driver.c (t1_property_{set,get}, t1_services): Add
|
||||||
|
Properties service.
|
||||||
|
|
||||||
|
* src/cid/cidobjs.c (cid_driver_init), src/type1/t1objs.c
|
||||||
|
(T1_Driver_Init): Add default property values.
|
||||||
|
|
||||||
2017-10-12 Ewald Hew <ewaldhew@gmail.com>
|
2017-10-12 Ewald Hew <ewaldhew@gmail.com>
|
||||||
|
|
||||||
Add T1_CONFIG_OPTION_OLD_ENGINE configuration option.
|
Add T1_CONFIG_OPTION_OLD_ENGINE configuration option.
|
||||||
|
|
|
@ -471,8 +471,12 @@
|
||||||
FT_UInt32 seed;
|
FT_UInt32 seed;
|
||||||
|
|
||||||
|
|
||||||
/* set default property values, cf. `ftcffdrv.h' */
|
/* set default property values, cf. `ftt1drv.h' */
|
||||||
|
#ifdef T1_CONFIG_OPTION_OLD_ENGINE
|
||||||
|
driver->hinting_engine = FT_T1_HINTING_FREETYPE;
|
||||||
|
#else
|
||||||
driver->hinting_engine = FT_T1_HINTING_ADOBE;
|
driver->hinting_engine = FT_T1_HINTING_ADOBE;
|
||||||
|
#endif
|
||||||
|
|
||||||
driver->no_stem_darkening = TRUE;
|
driver->no_stem_darkening = TRUE;
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include FT_SERVICE_FONT_FORMAT_H
|
#include FT_SERVICE_FONT_FORMAT_H
|
||||||
#include FT_SERVICE_POSTSCRIPT_INFO_H
|
#include FT_SERVICE_POSTSCRIPT_INFO_H
|
||||||
#include FT_SERVICE_CID_H
|
#include FT_SERVICE_CID_H
|
||||||
|
#include FT_SERVICE_PROPERTIES_H
|
||||||
|
#include FT_TYPE1_DRIVER_H
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
@ -167,6 +169,237 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PROPERTY SERVICE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static FT_Error
|
||||||
|
cid_property_set( FT_Module module, /* PS_Driver */
|
||||||
|
const char* property_name,
|
||||||
|
const void* value,
|
||||||
|
FT_Bool value_is_string )
|
||||||
|
{
|
||||||
|
FT_Error error = FT_Err_Ok;
|
||||||
|
PS_Driver driver = (PS_Driver)module;
|
||||||
|
|
||||||
|
#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
FT_UNUSED( value_is_string );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
if ( !ft_strcmp( property_name, "darkening-parameters" ) )
|
||||||
|
{
|
||||||
|
FT_Int* darken_params;
|
||||||
|
FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
|
||||||
|
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
FT_Int dp[8];
|
||||||
|
|
||||||
|
|
||||||
|
if ( value_is_string )
|
||||||
|
{
|
||||||
|
const char* s = (const char*)value;
|
||||||
|
char* ep;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
/* eight comma-separated numbers */
|
||||||
|
for ( i = 0; i < 7; i++ )
|
||||||
|
{
|
||||||
|
dp[i] = (FT_Int)ft_strtol( s, &ep, 10 );
|
||||||
|
if ( *ep != ',' || s == ep )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
|
s = ep + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dp[7] = (FT_Int)ft_strtol( s, &ep, 10 );
|
||||||
|
if ( !( *ep == '\0' || *ep == ' ' ) || s == ep )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
|
darken_params = dp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
darken_params = (FT_Int*)value;
|
||||||
|
|
||||||
|
x1 = darken_params[0];
|
||||||
|
y1 = darken_params[1];
|
||||||
|
x2 = darken_params[2];
|
||||||
|
y2 = darken_params[3];
|
||||||
|
x3 = darken_params[4];
|
||||||
|
y3 = darken_params[5];
|
||||||
|
x4 = darken_params[6];
|
||||||
|
y4 = darken_params[7];
|
||||||
|
|
||||||
|
if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
|
||||||
|
y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
|
||||||
|
x1 > x2 || x2 > x3 || x3 > x4 ||
|
||||||
|
y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
|
driver->darken_params[0] = x1;
|
||||||
|
driver->darken_params[1] = y1;
|
||||||
|
driver->darken_params[2] = x2;
|
||||||
|
driver->darken_params[3] = y2;
|
||||||
|
driver->darken_params[4] = x3;
|
||||||
|
driver->darken_params[5] = y3;
|
||||||
|
driver->darken_params[6] = x4;
|
||||||
|
driver->darken_params[7] = y4;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "hinting-engine" ) )
|
||||||
|
{
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
if ( value_is_string )
|
||||||
|
{
|
||||||
|
const char* s = (const char*)value;
|
||||||
|
|
||||||
|
|
||||||
|
if ( !ft_strcmp( s, "adobe" ) )
|
||||||
|
driver->hinting_engine = FT_T1_HINTING_ADOBE;
|
||||||
|
#ifdef T1_CONFIG_OPTION_OLD_ENGINE
|
||||||
|
else if ( !ft_strcmp( s, "freetype" ) )
|
||||||
|
driver->hinting_engine = FT_T1_HINTING_FREETYPE;
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
FT_UInt* hinting_engine = (FT_UInt*)value;
|
||||||
|
|
||||||
|
|
||||||
|
if ( *hinting_engine == FT_T1_HINTING_ADOBE
|
||||||
|
#ifdef T1_CONFIG_OPTION_OLD_ENGINE
|
||||||
|
|| *hinting_engine == FT_T1_HINTING_FREETYPE
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
driver->hinting_engine = *hinting_engine;
|
||||||
|
else
|
||||||
|
error = FT_ERR( Unimplemented_Feature );
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
|
||||||
|
{
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
if ( value_is_string )
|
||||||
|
{
|
||||||
|
const char* s = (const char*)value;
|
||||||
|
long nsd = ft_strtol( s, NULL, 10 );
|
||||||
|
|
||||||
|
|
||||||
|
if ( !nsd )
|
||||||
|
driver->no_stem_darkening = FALSE;
|
||||||
|
else
|
||||||
|
driver->no_stem_darkening = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
FT_Bool* no_stem_darkening = (FT_Bool*)value;
|
||||||
|
|
||||||
|
|
||||||
|
driver->no_stem_darkening = *no_stem_darkening;
|
||||||
|
}
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "random-seed" ) )
|
||||||
|
{
|
||||||
|
FT_Int32 random_seed;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
if ( value_is_string )
|
||||||
|
{
|
||||||
|
const char* s = (const char*)value;
|
||||||
|
|
||||||
|
|
||||||
|
random_seed = (FT_Int32)ft_strtol( s, NULL, 10 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
random_seed = *(FT_Int32*)value;
|
||||||
|
|
||||||
|
if ( random_seed < 0 )
|
||||||
|
random_seed = 0;
|
||||||
|
|
||||||
|
driver->random_seed = random_seed;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
FT_TRACE0(( "cid_property_set: missing property `%s'\n",
|
||||||
|
property_name ));
|
||||||
|
return FT_THROW( Missing_Property );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static FT_Error
|
||||||
|
cid_property_get( FT_Module module, /* PS_Driver */
|
||||||
|
const char* property_name,
|
||||||
|
const void* value )
|
||||||
|
{
|
||||||
|
FT_Error error = FT_Err_Ok;
|
||||||
|
PS_Driver driver = (PS_Driver)module;
|
||||||
|
|
||||||
|
|
||||||
|
if ( !ft_strcmp( property_name, "darkening-parameters" ) )
|
||||||
|
{
|
||||||
|
FT_Int* darken_params = driver->darken_params;
|
||||||
|
FT_Int* val = (FT_Int*)value;
|
||||||
|
|
||||||
|
|
||||||
|
val[0] = darken_params[0];
|
||||||
|
val[1] = darken_params[1];
|
||||||
|
val[2] = darken_params[2];
|
||||||
|
val[3] = darken_params[3];
|
||||||
|
val[4] = darken_params[4];
|
||||||
|
val[5] = darken_params[5];
|
||||||
|
val[6] = darken_params[6];
|
||||||
|
val[7] = darken_params[7];
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "hinting-engine" ) )
|
||||||
|
{
|
||||||
|
FT_UInt hinting_engine = driver->hinting_engine;
|
||||||
|
FT_UInt* val = (FT_UInt*)value;
|
||||||
|
|
||||||
|
|
||||||
|
*val = hinting_engine;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
|
||||||
|
{
|
||||||
|
FT_Bool no_stem_darkening = driver->no_stem_darkening;
|
||||||
|
FT_Bool* val = (FT_Bool*)value;
|
||||||
|
|
||||||
|
|
||||||
|
*val = no_stem_darkening;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
FT_TRACE0(( "cid_property_get: missing property `%s'\n",
|
||||||
|
property_name ));
|
||||||
|
return FT_THROW( Missing_Property );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_DEFINE_SERVICE_PROPERTIESREC(
|
||||||
|
cid_service_properties,
|
||||||
|
|
||||||
|
(FT_Properties_SetFunc)cid_property_set, /* set_property */
|
||||||
|
(FT_Properties_GetFunc)cid_property_get ) /* get_property */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERVICE LIST
|
* SERVICE LIST
|
||||||
*
|
*
|
||||||
|
@ -178,6 +411,7 @@
|
||||||
{ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name },
|
{ FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name },
|
||||||
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &cid_service_ps_info },
|
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &cid_service_ps_info },
|
||||||
{ FT_SERVICE_ID_CID, &cid_service_cid_info },
|
{ FT_SERVICE_ID_CID, &cid_service_cid_info },
|
||||||
|
{ FT_SERVICE_ID_PROPERTIES, &cid_service_properties },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include FT_INTERNAL_DEBUG_H
|
#include FT_INTERNAL_DEBUG_H
|
||||||
#include FT_INTERNAL_STREAM_H
|
#include FT_INTERNAL_STREAM_H
|
||||||
#include FT_INTERNAL_HASH_H
|
#include FT_INTERNAL_HASH_H
|
||||||
|
#include FT_TYPE1_DRIVER_H
|
||||||
|
|
||||||
#include FT_SERVICE_MULTIPLE_MASTERS_H
|
#include FT_SERVICE_MULTIPLE_MASTERS_H
|
||||||
#include FT_SERVICE_GLYPH_DICT_H
|
#include FT_SERVICE_GLYPH_DICT_H
|
||||||
|
@ -37,6 +38,7 @@
|
||||||
#include FT_SERVICE_POSTSCRIPT_NAME_H
|
#include FT_SERVICE_POSTSCRIPT_NAME_H
|
||||||
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
|
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
|
||||||
#include FT_SERVICE_POSTSCRIPT_INFO_H
|
#include FT_SERVICE_POSTSCRIPT_INFO_H
|
||||||
|
#include FT_SERVICE_PROPERTIES_H
|
||||||
#include FT_SERVICE_KERNING_H
|
#include FT_SERVICE_KERNING_H
|
||||||
|
|
||||||
|
|
||||||
|
@ -614,6 +616,237 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PROPERTY SERVICE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static FT_Error
|
||||||
|
t1_property_set( FT_Module module, /* PS_Driver */
|
||||||
|
const char* property_name,
|
||||||
|
const void* value,
|
||||||
|
FT_Bool value_is_string )
|
||||||
|
{
|
||||||
|
FT_Error error = FT_Err_Ok;
|
||||||
|
PS_Driver driver = (PS_Driver)module;
|
||||||
|
|
||||||
|
#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
FT_UNUSED( value_is_string );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
if ( !ft_strcmp( property_name, "darkening-parameters" ) )
|
||||||
|
{
|
||||||
|
FT_Int* darken_params;
|
||||||
|
FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
|
||||||
|
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
FT_Int dp[8];
|
||||||
|
|
||||||
|
|
||||||
|
if ( value_is_string )
|
||||||
|
{
|
||||||
|
const char* s = (const char*)value;
|
||||||
|
char* ep;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
/* eight comma-separated numbers */
|
||||||
|
for ( i = 0; i < 7; i++ )
|
||||||
|
{
|
||||||
|
dp[i] = (FT_Int)ft_strtol( s, &ep, 10 );
|
||||||
|
if ( *ep != ',' || s == ep )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
|
s = ep + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dp[7] = (FT_Int)ft_strtol( s, &ep, 10 );
|
||||||
|
if ( !( *ep == '\0' || *ep == ' ' ) || s == ep )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
|
darken_params = dp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
darken_params = (FT_Int*)value;
|
||||||
|
|
||||||
|
x1 = darken_params[0];
|
||||||
|
y1 = darken_params[1];
|
||||||
|
x2 = darken_params[2];
|
||||||
|
y2 = darken_params[3];
|
||||||
|
x3 = darken_params[4];
|
||||||
|
y3 = darken_params[5];
|
||||||
|
x4 = darken_params[6];
|
||||||
|
y4 = darken_params[7];
|
||||||
|
|
||||||
|
if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
|
||||||
|
y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
|
||||||
|
x1 > x2 || x2 > x3 || x3 > x4 ||
|
||||||
|
y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
|
driver->darken_params[0] = x1;
|
||||||
|
driver->darken_params[1] = y1;
|
||||||
|
driver->darken_params[2] = x2;
|
||||||
|
driver->darken_params[3] = y2;
|
||||||
|
driver->darken_params[4] = x3;
|
||||||
|
driver->darken_params[5] = y3;
|
||||||
|
driver->darken_params[6] = x4;
|
||||||
|
driver->darken_params[7] = y4;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "hinting-engine" ) )
|
||||||
|
{
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
if ( value_is_string )
|
||||||
|
{
|
||||||
|
const char* s = (const char*)value;
|
||||||
|
|
||||||
|
|
||||||
|
if ( !ft_strcmp( s, "adobe" ) )
|
||||||
|
driver->hinting_engine = FT_T1_HINTING_ADOBE;
|
||||||
|
#ifdef T1_CONFIG_OPTION_OLD_ENGINE
|
||||||
|
else if ( !ft_strcmp( s, "freetype" ) )
|
||||||
|
driver->hinting_engine = FT_T1_HINTING_FREETYPE;
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
FT_UInt* hinting_engine = (FT_UInt*)value;
|
||||||
|
|
||||||
|
|
||||||
|
if ( *hinting_engine == FT_T1_HINTING_ADOBE
|
||||||
|
#ifdef T1_CONFIG_OPTION_OLD_ENGINE
|
||||||
|
|| *hinting_engine == FT_T1_HINTING_FREETYPE
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
driver->hinting_engine = *hinting_engine;
|
||||||
|
else
|
||||||
|
error = FT_ERR( Unimplemented_Feature );
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
|
||||||
|
{
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
if ( value_is_string )
|
||||||
|
{
|
||||||
|
const char* s = (const char*)value;
|
||||||
|
long nsd = ft_strtol( s, NULL, 10 );
|
||||||
|
|
||||||
|
|
||||||
|
if ( !nsd )
|
||||||
|
driver->no_stem_darkening = FALSE;
|
||||||
|
else
|
||||||
|
driver->no_stem_darkening = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
FT_Bool* no_stem_darkening = (FT_Bool*)value;
|
||||||
|
|
||||||
|
|
||||||
|
driver->no_stem_darkening = *no_stem_darkening;
|
||||||
|
}
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "random-seed" ) )
|
||||||
|
{
|
||||||
|
FT_Int32 random_seed;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
if ( value_is_string )
|
||||||
|
{
|
||||||
|
const char* s = (const char*)value;
|
||||||
|
|
||||||
|
|
||||||
|
random_seed = (FT_Int32)ft_strtol( s, NULL, 10 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
random_seed = *(FT_Int32*)value;
|
||||||
|
|
||||||
|
if ( random_seed < 0 )
|
||||||
|
random_seed = 0;
|
||||||
|
|
||||||
|
driver->random_seed = random_seed;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
FT_TRACE0(( "t1_property_set: missing property `%s'\n",
|
||||||
|
property_name ));
|
||||||
|
return FT_THROW( Missing_Property );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static FT_Error
|
||||||
|
t1_property_get( FT_Module module, /* PS_Driver */
|
||||||
|
const char* property_name,
|
||||||
|
const void* value )
|
||||||
|
{
|
||||||
|
FT_Error error = FT_Err_Ok;
|
||||||
|
PS_Driver driver = (PS_Driver)module;
|
||||||
|
|
||||||
|
|
||||||
|
if ( !ft_strcmp( property_name, "darkening-parameters" ) )
|
||||||
|
{
|
||||||
|
FT_Int* darken_params = driver->darken_params;
|
||||||
|
FT_Int* val = (FT_Int*)value;
|
||||||
|
|
||||||
|
|
||||||
|
val[0] = darken_params[0];
|
||||||
|
val[1] = darken_params[1];
|
||||||
|
val[2] = darken_params[2];
|
||||||
|
val[3] = darken_params[3];
|
||||||
|
val[4] = darken_params[4];
|
||||||
|
val[5] = darken_params[5];
|
||||||
|
val[6] = darken_params[6];
|
||||||
|
val[7] = darken_params[7];
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "hinting-engine" ) )
|
||||||
|
{
|
||||||
|
FT_UInt hinting_engine = driver->hinting_engine;
|
||||||
|
FT_UInt* val = (FT_UInt*)value;
|
||||||
|
|
||||||
|
|
||||||
|
*val = hinting_engine;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
else if ( !ft_strcmp( property_name, "no-stem-darkening" ) )
|
||||||
|
{
|
||||||
|
FT_Bool no_stem_darkening = driver->no_stem_darkening;
|
||||||
|
FT_Bool* val = (FT_Bool*)value;
|
||||||
|
|
||||||
|
|
||||||
|
*val = no_stem_darkening;
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
FT_TRACE0(( "t1_property_get: missing property `%s'\n",
|
||||||
|
property_name ));
|
||||||
|
return FT_THROW( Missing_Property );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_DEFINE_SERVICE_PROPERTIESREC(
|
||||||
|
t1_service_properties,
|
||||||
|
|
||||||
|
(FT_Properties_SetFunc)t1_property_set, /* set_property */
|
||||||
|
(FT_Properties_GetFunc)t1_property_get ) /* get_property */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SERVICE LIST
|
* SERVICE LIST
|
||||||
*
|
*
|
||||||
|
@ -625,6 +858,7 @@
|
||||||
{ FT_SERVICE_ID_GLYPH_DICT, &t1_service_glyph_dict },
|
{ FT_SERVICE_ID_GLYPH_DICT, &t1_service_glyph_dict },
|
||||||
{ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TYPE_1 },
|
{ FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_TYPE_1 },
|
||||||
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &t1_service_ps_info },
|
{ FT_SERVICE_ID_POSTSCRIPT_INFO, &t1_service_ps_info },
|
||||||
|
{ FT_SERVICE_ID_PROPERTIES, &t1_service_properties },
|
||||||
|
|
||||||
#ifndef T1_CONFIG_OPTION_NO_AFM
|
#ifndef T1_CONFIG_OPTION_NO_AFM
|
||||||
{ FT_SERVICE_ID_KERNING, &t1_service_kerning },
|
{ FT_SERVICE_ID_KERNING, &t1_service_kerning },
|
||||||
|
|
|
@ -587,7 +587,11 @@
|
||||||
|
|
||||||
|
|
||||||
/* set default property values, cf. `ftt1drv.h' */
|
/* set default property values, cf. `ftt1drv.h' */
|
||||||
|
#ifdef T1_CONFIG_OPTION_OLD_ENGINE
|
||||||
|
driver->hinting_engine = FT_T1_HINTING_FREETYPE;
|
||||||
|
#else
|
||||||
driver->hinting_engine = FT_T1_HINTING_ADOBE;
|
driver->hinting_engine = FT_T1_HINTING_ADOBE;
|
||||||
|
#endif
|
||||||
|
|
||||||
driver->no_stem_darkening = TRUE;
|
driver->no_stem_darkening = TRUE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue