diff options
author | Ewald Hew <ewaldhew@gmail.com> | 2017-07-24 09:27:56 +0800 |
---|---|---|
committer | Ewald Hew <ewaldhew@gmail.com> | 2017-08-21 14:17:42 +0800 |
commit | b55214c82038b3a827e69db9f4a018537a402e4c (patch) | |
tree | 4c3f1dc06f329069b7ae59f0e94858ae4c55b289 | |
parent | e6d81a03fa492763a0ecf36c4f78f83bd0b8afe7 (diff) | |
download | freetype2-b55214c82038b3a827e69db9f4a018537a402e4c.tar.gz |
[psaux] Add missing objects for Type 1. (1/2)
Move CF2_Font instance to PS_Decoder. This is the context for the interpreter
and since it is currently stored in CFF_Font, is unavailable in Type 1 mode.
* include/freetype/internal/psaux.h (T1_Decoder, PS_Decoder): Add the
cf2_instance field.
* src/psaux/psdecode.c (ps_decoder_init): Copy cf2_instance to PS_Decoder.
Remove unused line.
* src/psaux/t1decode.c (t1_decoder_done): Add finalization code.
* src/psaux/psft.c: Update accesses.
-rw-r--r-- | include/freetype/internal/psaux.h | 7 | ||||
-rw-r--r-- | src/psaux/psdecode.c | 3 | ||||
-rw-r--r-- | src/psaux/psft.c | 10 | ||||
-rw-r--r-- | src/psaux/t1decode.c | 8 |
4 files changed, 20 insertions, 8 deletions
diff --git a/include/freetype/internal/psaux.h b/include/freetype/internal/psaux.h index a8469f722..b28392bed 100644 --- a/include/freetype/internal/psaux.h +++ b/include/freetype/internal/psaux.h @@ -610,7 +610,8 @@ FT_BEGIN_HEADER CFF_Font cff; CFF_SubFont current_subfont; /* for current glyph_index */ - + FT_Generic* cf2_instance; + FT_Pos glyph_width; FT_Pos nominal_width; @@ -636,7 +637,7 @@ FT_BEGIN_HEADER CFF_Decoder_Get_Glyph_Callback get_glyph_callback; CFF_Decoder_Free_Glyph_Callback free_glyph_callback; - + /* Type 1 stuff */ FT_Service_PsCMaps psnames; /* for seac */ @@ -924,6 +925,8 @@ FT_BEGIN_HEADER FT_Bool seac; + FT_Generic cf2_instance; + } T1_DecoderRec; /*************************************************************************/ diff --git a/src/psaux/psdecode.c b/src/psaux/psdecode.c index 86b42863f..c8a5d01c2 100644 --- a/src/psaux/psdecode.c +++ b/src/psaux/psdecode.c @@ -41,13 +41,13 @@ is_t1, &ps_decoder->builder ); + ps_decoder->cf2_instance = &t1_decoder->cf2_instance; ps_decoder->psnames = t1_decoder->psnames; ps_decoder->num_glyphs = t1_decoder->num_glyphs; ps_decoder->glyph_names = t1_decoder->glyph_names; ps_decoder->hint_mode = t1_decoder->hint_mode; ps_decoder->blend = t1_decoder->blend; - /* ps_decoder->t1_parse_callback = t1_decoder->parse_callback; */ ps_decoder->num_locals = t1_decoder->num_subrs; ps_decoder->locals = t1_decoder->subrs; @@ -68,6 +68,7 @@ &ps_decoder->builder ); ps_decoder->cff = cff_decoder->cff; + ps_decoder->cf2_instance = &cff_decoder->cff->cf2_instance; ps_decoder->current_subfont = cff_decoder->current_subfont; ps_decoder->num_globals = cff_decoder->num_globals; diff --git a/src/psaux/psft.c b/src/psaux/psft.c index c91fedd28..ab1982663 100644 --- a/src/psaux/psft.c +++ b/src/psaux/psft.c @@ -318,19 +318,19 @@ memory = decoder->builder.memory; /* CF2 data is saved here across glyphs */ - font = (CF2_Font)decoder->cff->cf2_instance.data; + font = (CF2_Font)decoder->cf2_instance->data; /* on first glyph, allocate instance structure */ - if ( !decoder->cff->cf2_instance.data ) + if ( !decoder->cf2_instance->data ) { - decoder->cff->cf2_instance.finalizer = + decoder->cf2_instance->finalizer = (FT_Generic_Finalizer)cf2_free_instance; - if ( FT_ALLOC( decoder->cff->cf2_instance.data, + if ( FT_ALLOC( decoder->cf2_instance->data, sizeof ( CF2_FontRec ) ) ) return FT_THROW( Out_Of_Memory ); - font = (CF2_Font)decoder->cff->cf2_instance.data; + font = (CF2_Font)decoder->cf2_instance->data; font->memory = memory; diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c index 1250b53f5..81f579744 100644 --- a/src/psaux/t1decode.c +++ b/src/psaux/t1decode.c @@ -1641,7 +1641,15 @@ FT_LOCAL_DEF( void ) t1_decoder_done( T1_Decoder decoder ) { + FT_Memory memory = decoder->builder.memory; + t1_builder_done( &decoder->builder ); + + if ( decoder->cf2_instance.finalizer ) + { + decoder->cf2_instance.finalizer( decoder->cf2_instance.data ); + FT_FREE( decoder->cf2_instance.data ); + } } |