forked from minhngoc25a/freetype2
Prepare for Type 1 mode.
Add some checks for Type 1 data passing through. * src/psaux/psfont.h (CF2_Font): Add `isT1' flag. * src/psaux/psfont.c (cf2_font_setup): Skip the variations and blend code which is not applicable for Type 1. * src/psaux/psft.c (cf2_decoder_parse_charstrings): Avoid accessing `decoder->cff' in Type 1 mode. Copy `is_t1' flag to `CF2_Font'.
This commit is contained in:
parent
0589e3c012
commit
9428ee42c0
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
|||
2017-09-25 Ewald Hew <ewaldhew@gmail.com>
|
||||
|
||||
[psaux] Prepare for Type 1 mode.
|
||||
|
||||
Add some checks for Type 1 data passing through.
|
||||
|
||||
* src/psaux/psfont.h (CF2_Font): Add `isT1' flag.
|
||||
* src/psaux/psfont.c (cf2_font_setup): Skip the variations and blend
|
||||
code which is not applicable for Type 1.
|
||||
|
||||
* src/psaux/psft.c (cf2_decoder_parse_charstrings): Avoid accessing
|
||||
`decoder->cff' in Type 1 mode.
|
||||
Copy `is_t1' flag to `CF2_Font'.
|
||||
|
||||
2017-09-25 Ewald Hew <ewaldhew@gmail.com>
|
||||
|
||||
[psaux, cff] Use the new objects.
|
||||
|
|
|
@ -260,8 +260,6 @@
|
|||
CF2_UInt lenNormalizedV = 0;
|
||||
FT_Fixed* normalizedV = NULL;
|
||||
|
||||
FT_Service_CFFLoad cffload = (FT_Service_CFFLoad)font->cffload;
|
||||
|
||||
/* clear previous error */
|
||||
font->error = FT_Err_Ok;
|
||||
|
||||
|
@ -274,46 +272,50 @@
|
|||
needExtraSetup = TRUE;
|
||||
}
|
||||
|
||||
/* check for variation vectors */
|
||||
vstore = cf2_getVStore( decoder );
|
||||
hasVariations = ( vstore->dataCount != 0 );
|
||||
|
||||
if ( hasVariations )
|
||||
if ( !font->isT1 )
|
||||
{
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
/* check whether Private DICT in this subfont needs to be reparsed */
|
||||
font->error = cf2_getNormalizedVector( decoder,
|
||||
&lenNormalizedV,
|
||||
&normalizedV );
|
||||
if ( font->error )
|
||||
return;
|
||||
FT_Service_CFFLoad cffload = (FT_Service_CFFLoad)font->cffload;
|
||||
/* check for variation vectors */
|
||||
vstore = cf2_getVStore( decoder );
|
||||
hasVariations = ( vstore->dataCount != 0 );
|
||||
|
||||
if ( cffload->blend_check_vector( &subFont->blend,
|
||||
subFont->private_dict.vsindex,
|
||||
lenNormalizedV,
|
||||
normalizedV ) )
|
||||
if ( hasVariations )
|
||||
{
|
||||
/* blend has changed, reparse */
|
||||
cffload->load_private_dict( decoder->cff,
|
||||
subFont,
|
||||
lenNormalizedV,
|
||||
normalizedV );
|
||||
needExtraSetup = TRUE;
|
||||
}
|
||||
#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
|
||||
/* check whether Private DICT in this subfont needs to be reparsed */
|
||||
font->error = cf2_getNormalizedVector( decoder,
|
||||
&lenNormalizedV,
|
||||
&normalizedV );
|
||||
if ( font->error )
|
||||
return;
|
||||
|
||||
if ( cffload->blend_check_vector( &subFont->blend,
|
||||
subFont->private_dict.vsindex,
|
||||
lenNormalizedV,
|
||||
normalizedV ) )
|
||||
{
|
||||
/* blend has changed, reparse */
|
||||
cffload->load_private_dict( decoder->cff,
|
||||
subFont,
|
||||
lenNormalizedV,
|
||||
normalizedV );
|
||||
needExtraSetup = TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* copy from subfont */
|
||||
font->blend.font = subFont->blend.font;
|
||||
/* copy from subfont */
|
||||
font->blend.font = subFont->blend.font;
|
||||
|
||||
/* clear state of charstring blend */
|
||||
font->blend.usedBV = FALSE;
|
||||
/* clear state of charstring blend */
|
||||
font->blend.usedBV = FALSE;
|
||||
|
||||
/* initialize value for charstring */
|
||||
font->vsindex = subFont->private_dict.vsindex;
|
||||
/* initialize value for charstring */
|
||||
font->vsindex = subFont->private_dict.vsindex;
|
||||
|
||||
/* store vector inputs for blends in charstring */
|
||||
font->lenNDV = lenNormalizedV;
|
||||
font->NDV = normalizedV;
|
||||
/* store vector inputs for blends in charstring */
|
||||
font->lenNDV = lenNormalizedV;
|
||||
font->NDV = normalizedV;
|
||||
}
|
||||
}
|
||||
|
||||
/* if ppem has changed, we need to recompute some cached data */
|
||||
|
|
|
@ -65,6 +65,7 @@ FT_BEGIN_HEADER
|
|||
FT_Memory memory;
|
||||
FT_Error error; /* shared error for this instance */
|
||||
|
||||
FT_Bool isT1;
|
||||
FT_Bool isCFF2;
|
||||
CF2_RenderingFlags renderingFlags;
|
||||
|
||||
|
|
|
@ -309,8 +309,11 @@
|
|||
FT_Error error = FT_Err_Ok;
|
||||
CF2_Font font;
|
||||
|
||||
FT_Bool is_t1 = decoder->builder.is_t1;
|
||||
|
||||
FT_ASSERT( decoder && decoder->cff );
|
||||
|
||||
FT_ASSERT( decoder &&
|
||||
( is_t1 || decoder->cff ) );
|
||||
|
||||
memory = decoder->builder.memory;
|
||||
|
||||
|
@ -330,7 +333,9 @@
|
|||
font = (CF2_Font)decoder->cff->cf2_instance.data;
|
||||
|
||||
font->memory = memory;
|
||||
font->cffload = (FT_Service_CFFLoad)decoder->cff->cffload;
|
||||
|
||||
if ( !is_t1 )
|
||||
font->cffload = (FT_Service_CFFLoad)decoder->cff->cffload;
|
||||
|
||||
/* initialize a client outline, to be shared by each glyph rendered */
|
||||
cf2_outline_init( &font->outline, font->memory, &font->error );
|
||||
|
@ -381,6 +386,7 @@
|
|||
|
||||
/* copy isCFF2 boolean from TT_Face to CF2_Font */
|
||||
font->isCFF2 = builder->face->is_cff2;
|
||||
font->isT1 = is_t1;
|
||||
|
||||
font->renderingFlags = 0;
|
||||
if ( hinted )
|
||||
|
|
Loading…
Reference in New Issue