34#define FT_COMPONENT psprops
37 FT_BASE_CALLBACK_DEF( FT_Error )
38 ps_property_set( FT_Module module,
39 const char* property_name,
41 FT_Bool value_is_string )
43 FT_Error error = FT_Err_Ok;
44 PS_Driver driver = (PS_Driver)module;
46#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
47 FT_UNUSED( value_is_string );
51 if ( !ft_strcmp( property_name,
"darkening-parameters" ) )
53 FT_Int* darken_params;
54 FT_Int x1, y1, x2, y2, x3, y3, x4, y4;
56#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
60 if ( value_is_string )
62 const char* s = (
const char*)value;
68 for ( i = 0; i < 7; i++ )
70 dp[i] = (FT_Int)ft_strtol( s, &ep, 10 );
71 if ( *ep !=
',' || s == ep )
72 return FT_THROW( Invalid_Argument );
77 dp[7] = (FT_Int)ft_strtol( s, &ep, 10 );
78 if ( !( *ep ==
'\0' || *ep ==
' ' ) || s == ep )
79 return FT_THROW( Invalid_Argument );
85 darken_params = (FT_Int*)value;
87 x1 = darken_params[0];
88 y1 = darken_params[1];
89 x2 = darken_params[2];
90 y2 = darken_params[3];
91 x3 = darken_params[4];
92 y3 = darken_params[5];
93 x4 = darken_params[6];
94 y4 = darken_params[7];
96 if ( x1 < 0 || x2 < 0 || x3 < 0 || x4 < 0 ||
97 y1 < 0 || y2 < 0 || y3 < 0 || y4 < 0 ||
98 x1 > x2 || x2 > x3 || x3 > x4 ||
99 y1 > 500 || y2 > 500 || y3 > 500 || y4 > 500 )
100 return FT_THROW( Invalid_Argument );
102 driver->darken_params[0] = x1;
103 driver->darken_params[1] = y1;
104 driver->darken_params[2] = x2;
105 driver->darken_params[3] = y2;
106 driver->darken_params[4] = x3;
107 driver->darken_params[5] = y3;
108 driver->darken_params[6] = x4;
109 driver->darken_params[7] = y4;
114 else if ( !ft_strcmp( property_name,
"hinting-engine" ) )
116#if defined( CFF_CONFIG_OPTION_OLD_ENGINE ) || \
117 defined( T1_CONFIG_OPTION_OLD_ENGINE )
118 const char* module_name =
module->clazz->module_name;
122#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
123 if ( value_is_string )
125 const char* s = (
const char*)value;
128 if ( !ft_strcmp( s,
"adobe" ) )
129 driver->hinting_engine = FT_HINTING_ADOBE;
131#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
132 else if ( !ft_strcmp( module_name,
"cff" ) &&
133 !ft_strcmp( s,
"freetype" ) )
134 driver->hinting_engine = FT_HINTING_FREETYPE;
137#ifdef T1_CONFIG_OPTION_OLD_ENGINE
138 else if ( ( !ft_strcmp( module_name,
"type1" ) ||
139 !ft_strcmp( module_name,
"t1cid" ) ) &&
140 !ft_strcmp( s,
"freetype" ) )
141 driver->hinting_engine = FT_HINTING_FREETYPE;
145 return FT_THROW( Invalid_Argument );
150 FT_UInt* hinting_engine = (FT_UInt*)value;
153 if ( *hinting_engine == FT_HINTING_ADOBE
154#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
155 || ( *hinting_engine == FT_HINTING_FREETYPE &&
156 !ft_strcmp( module_name,
"cff" ) )
158#ifdef T1_CONFIG_OPTION_OLD_ENGINE
159 || ( *hinting_engine == FT_HINTING_FREETYPE &&
160 ( !ft_strcmp( module_name,
"type1" ) ||
161 !ft_strcmp( module_name,
"t1cid" ) ) )
164 driver->hinting_engine = *hinting_engine;
166 error = FT_ERR( Unimplemented_Feature );
172 else if ( !ft_strcmp( property_name,
"no-stem-darkening" ) )
174#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
175 if ( value_is_string )
177 const char* s = (
const char*)value;
178 long nsd = ft_strtol( s, NULL, 10 );
182 driver->no_stem_darkening = FALSE;
184 driver->no_stem_darkening = TRUE;
189 FT_Bool* no_stem_darkening = (FT_Bool*)value;
192 driver->no_stem_darkening = *no_stem_darkening;
198 else if ( !ft_strcmp( property_name,
"random-seed" ) )
200 FT_Int32 random_seed;
203#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
204 if ( value_is_string )
206 const char* s = (
const char*)value;
209 random_seed = (FT_Int32)ft_strtol( s, NULL, 10 );
213 random_seed = *(FT_Int32*)value;
215 if ( random_seed < 0 )
218 driver->random_seed = random_seed;
223 FT_TRACE2((
"ps_property_set: missing property `%s'\n",
225 return FT_THROW( Missing_Property );
229 FT_BASE_CALLBACK_DEF( FT_Error )
230 ps_property_get( FT_Module module,
231 const char* property_name,
234 FT_Error error = FT_Err_Ok;
235 PS_Driver driver = (PS_Driver)module;
238 if ( !ft_strcmp( property_name,
"darkening-parameters" ) )
240 FT_Int* darken_params = driver->darken_params;
241 FT_Int* val = (FT_Int*)value;
244 val[0] = darken_params[0];
245 val[1] = darken_params[1];
246 val[2] = darken_params[2];
247 val[3] = darken_params[3];
248 val[4] = darken_params[4];
249 val[5] = darken_params[5];
250 val[6] = darken_params[6];
251 val[7] = darken_params[7];
256 else if ( !ft_strcmp( property_name,
"hinting-engine" ) )
258 FT_UInt hinting_engine = driver->hinting_engine;
259 FT_UInt* val = (FT_UInt*)value;
262 *val = hinting_engine;
267 else if ( !ft_strcmp( property_name,
"no-stem-darkening" ) )
269 FT_Bool no_stem_darkening = driver->no_stem_darkening;
270 FT_Bool* val = (FT_Bool*)value;
273 *val = no_stem_darkening;
278 FT_TRACE2((
"ps_property_get: missing property `%s'\n",
280 return FT_THROW( Missing_Property );