Change subfont synthesis for CID fonts.

Change `t1_make_subfont' to take in the Private dict record as an
argument.  This is because Type 1 and CID font records in FreeType
have this in different places.

* src/psaux/psobjs.c (t1_make_subfont): Change `T1_Face' to
`FT_Face' so that CID is also accepted.
Take `PS_Private' as an argument and let caller figure out where the
Private dict actually is.
Update references.

* include/freetype/internal/psaux.h, src/psaux/psobjs.h: Update
declaration.

* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Update
call.
This commit is contained in:
Ewald Hew 2017-09-25 08:08:21 +02:00 committed by Werner Lemberg
parent e28550af18
commit 93e3cffddf
5 changed files with 33 additions and 14 deletions

View File

@ -1,3 +1,23 @@
2017-09-25 Ewald Hew <ewaldhew@gmail.com>
[psaux] Change subfont synthesis for CID fonts.
Change `t1_make_subfont' to take in the Private dict record as an
argument. This is because Type 1 and CID font records in FreeType
have this in different places.
* src/psaux/psobjs.c (t1_make_subfont): Change `T1_Face' to
`FT_Face' so that CID is also accepted.
Take `PS_Private' as an argument and let caller figure out where the
Private dict actually is.
Update references.
* include/freetype/internal/psaux.h, src/psaux/psobjs.h: Update
declaration.
* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Update
call.
2017-09-25 Ewald Hew <ewaldhew@gmail.com>
[type1] Switch to Adobe engine.

View File

@ -1291,10 +1291,10 @@ FT_BEGIN_HEADER
PS_Decoder* ps_decoder );
void
(*t1_make_subfont)( T1_Face face,
(*t1_make_subfont)( FT_Face face,
PS_Private priv,
CFF_SubFont subfont );
T1_CMap_Classes t1_cmap_classes;
/* fields after this comment line were added after version 2.1.10 */

View File

@ -2329,10 +2329,10 @@
FT_LOCAL_DEF( void )
t1_make_subfont( T1_Face face,
t1_make_subfont( FT_Face face,
PS_Private priv,
CFF_SubFont subfont )
{
PS_Private priv = &face->type1.private_dict;
CFF_Private cpriv = &subfont->private_dict;
FT_UInt n, count;
@ -2379,20 +2379,18 @@
/* Initialize the random number generator. */
if ( face->root.internal->random_seed != -1 )
if ( face->internal->random_seed != -1 )
{
/* . If we have a face-specific seed, use it. */
/* If non-zero, update it to a positive value. */
subfont->random = (FT_UInt32)face->root.internal->random_seed;
if ( face->root.internal->random_seed )
subfont->random = (FT_UInt32)face->internal->random_seed;
if ( face->internal->random_seed )
{
do
{
face->root.internal->random_seed =
(FT_Int32)((PSAux_Service)face->psaux)->cff_random(
(FT_UInt32)face->root.internal->random_seed );
} while ( face->root.internal->random_seed < 0 );
face->internal->random_seed = (FT_Int32)cff_random(
(FT_UInt32)face->internal->random_seed );
} while ( face->internal->random_seed < 0 );
}
}
if ( !subfont->random )

View File

@ -285,7 +285,8 @@ FT_BEGIN_HEADER
/*************************************************************************/
FT_LOCAL( void )
t1_make_subfont( T1_Face face,
t1_make_subfont( FT_Face face,
PS_Private priv,
CFF_SubFont subfont );
FT_LOCAL( void )

View File

@ -112,7 +112,7 @@
psaux->ps_decoder_init( decoder, TRUE, &psdecoder );
psaux->t1_make_subfont( face, &subfont );
psaux->t1_make_subfont( FT_FACE( face ), &face->type1.private_dict, &subfont );
psdecoder.current_subfont = &subfont;
error = decoder_funcs->parse_charstrings( &psdecoder,