diff options
author | Werner Lemberg <wl@gnu.org> | 2017-02-20 09:15:13 +0100 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2017-02-20 09:15:13 +0100 |
commit | e706798d43da47cea09d1372db88aa16b3f06f5f (patch) | |
tree | 90497ac016aeb7c03df9e8277bb692c484c47dbf /src/cff/cffobjs.c | |
parent | 156b30b1aadb958f795e9888f5dfd115aae0fcec (diff) | |
download | freetype2-e706798d43da47cea09d1372db88aa16b3f06f5f.tar.gz |
[cff] Finish support for `random' operator.
* src/cff/cfftypes.h (CFF_SubFontRec): Add `random' field.
* src/cff/cffobjs.c: Updated.
(cff_driver_init): Initialize random seed value.
* src/cff/cffload.c (cff_random): New function.
(cff_subfont_load): Add `face' argument.
Update all callers.
Initialize random number generator with a proper seed value.
(cff_font_load): Add `face' argument.
Update all callers.
* src/cff/cffload.h: Updated.
* src/cff/cf2intrp.c (CF2_FIXME): Removed.
(cf2_interpT2CharString) <cf2_escRANDOM>: Implement opcode.
* src/cff/cffgload.c (cff_decoder_parse_charstrings): Don't
initialize random seed value.
<cff_op_random>: Use new random seed framework.
Diffstat (limited to 'src/cff/cffobjs.c')
-rw-r--r-- | src/cff/cffobjs.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c index f0320afa4..67bf0cc41 100644 --- a/src/cff/cffobjs.c +++ b/src/cff/cffobjs.c @@ -595,6 +595,7 @@ stream, face_index, cff, + face, pure_cff, cff2 ); if ( error ) @@ -1157,6 +1158,8 @@ { CFF_Driver driver = (CFF_Driver)module; + FT_UInt32 seed; + /* set default property values, cf. `ftcffdrv.h' */ #ifdef CFF_CONFIG_OPTION_OLD_ENGINE @@ -1176,6 +1179,18 @@ driver->darken_params[6] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4; driver->darken_params[7] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4; + /* compute random seed from some memory addresses */ + seed = (FT_UInt32)( (FT_Offset)(char*)&seed ^ + (FT_Offset)(char*)&module ^ + (FT_Offset)(char*)module->memory ); + seed = seed ^ ( seed >> 10 ) ^ ( seed >> 20 ); + + driver->random_seed = (FT_Int32)seed; + if ( driver->random_seed < 0 ) + driver->random_seed = -driver->random_seed; + else if ( driver->random_seed == 0 ) + driver->random_seed = 123456789; + return FT_Err_Ok; } |