Fix Savannah bug #33246.
* src/truetype/ttobjs.c (tt_check_single_notdef): New function. (tt_face_init): Use it to test FT_FACE_FLAG_SCALABLE.
This commit is contained in:
parent
9ae6c7c54d
commit
07598339f7
|
@ -1,3 +1,10 @@
|
||||||
|
2011-07-02 Just Fill Bugs <mozbugbox@yahoo.com.au>
|
||||||
|
|
||||||
|
Fix Savannah bug #33246.
|
||||||
|
|
||||||
|
* src/truetype/ttobjs.c (tt_check_single_notdef): New function.
|
||||||
|
(tt_face_init): Use it to test FT_FACE_FLAG_SCALABLE.
|
||||||
|
|
||||||
2011-07-02 Werner Lemberg <wl@gnu.org>
|
2011-07-02 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
* docs/CHANGES: Updated.
|
* docs/CHANGES: Updated.
|
||||||
|
|
|
@ -409,6 +409,54 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Check whether `.notdef' is the only glyph in the `loca' table. */
|
||||||
|
static FT_Bool
|
||||||
|
tt_check_single_notdef( FT_Face ttface )
|
||||||
|
{
|
||||||
|
FT_Bool result = FALSE;
|
||||||
|
|
||||||
|
TT_Face face = (TT_Face)ttface;
|
||||||
|
FT_UInt asize;
|
||||||
|
FT_ULong i;
|
||||||
|
FT_ULong glyph_index = 0;
|
||||||
|
FT_UInt count = 0;
|
||||||
|
|
||||||
|
|
||||||
|
for( i = 0; i < face->num_locations; i++ )
|
||||||
|
{
|
||||||
|
tt_face_get_location( face, i, &asize );
|
||||||
|
if ( asize > 0 )
|
||||||
|
{
|
||||||
|
count += 1;
|
||||||
|
if ( count > 1 )
|
||||||
|
break;
|
||||||
|
glyph_index = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Only have a single outline. */
|
||||||
|
if ( count == 1 )
|
||||||
|
{
|
||||||
|
if ( glyph_index == 0 )
|
||||||
|
result = TRUE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* FIXME: Need to test glyphname == .notdef ? */
|
||||||
|
FT_Error error;
|
||||||
|
char buf[8];
|
||||||
|
|
||||||
|
|
||||||
|
error = FT_Get_Glyph_Name( ttface, glyph_index, buf, 8 );
|
||||||
|
if ( !error &&
|
||||||
|
buf[0] == '.' && !ft_strncmp( buf, ".notdef", 8 ) )
|
||||||
|
result = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* <Function> */
|
/* <Function> */
|
||||||
|
@ -504,6 +552,18 @@
|
||||||
if ( !error )
|
if ( !error )
|
||||||
error = tt_face_load_prep( face, stream );
|
error = tt_face_load_prep( face, stream );
|
||||||
|
|
||||||
|
/* Check the scalable flag based on `loca'. */
|
||||||
|
if ( !ttface->internal->incremental_interface &&
|
||||||
|
face->glyph_locations && tt_check_single_notdef( ttface ) )
|
||||||
|
{
|
||||||
|
FT_TRACE5(( "tt_face_init:"
|
||||||
|
" Only the `.notdef' glyph has an outline.\n"
|
||||||
|
" "
|
||||||
|
" Resetting scalable flag to FALSE.\n" ));
|
||||||
|
|
||||||
|
ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
if ( !error )
|
if ( !error )
|
||||||
|
@ -515,6 +575,17 @@
|
||||||
if ( !error )
|
if ( !error )
|
||||||
error = tt_face_load_prep( face, stream );
|
error = tt_face_load_prep( face, stream );
|
||||||
|
|
||||||
|
/* Check the scalable flag based on `loca'. */
|
||||||
|
if ( face->glyph_locations && tt_check_single_notdef( ttface ) )
|
||||||
|
{
|
||||||
|
FT_TRACE5(( "tt_face_init:"
|
||||||
|
" Only the `.notdef' glyph has an outline.\n"
|
||||||
|
" "
|
||||||
|
" Resetting scalable flag to FALSE.\n" ));
|
||||||
|
|
||||||
|
ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue