In function T2_Load_Glyph, added code so that the font transform is

applied.
This commit is contained in:
Tom Kacvinsky 2000-12-24 10:01:54 +00:00
parent a05c02c9ca
commit 91a0b65f46
1 changed files with 20 additions and 6 deletions

View File

@ -1930,6 +1930,8 @@
FT_Bool hinting; FT_Bool hinting;
CFF_Font* cff = (CFF_Font*)face->extra.data; CFF_Font* cff = (CFF_Font*)face->extra.data;
FT_Matrix font_matrix;
FT_Vector font_offset;
if ( load_flags & FT_LOAD_NO_RECURSE ) if ( load_flags & FT_LOAD_NO_RECURSE )
load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
@ -1975,17 +1977,26 @@
T2_Done_Builder( &decoder.builder ); T2_Done_Builder( &decoder.builder );
} }
font_matrix = cff->top_font.font_dict.font_matrix;
font_offset = cff->top_font.font_dict.font_offset;
/* Now, set the metrics -- this is rather simple, as */ /* Now, set the metrics -- this is rather simple, as */
/* the left side bearing is the xMin, and the top side */ /* the left side bearing is the xMin, and the top side */
/* bearing the yMax. */ /* bearing the yMax. */
if ( !error ) if ( !error )
{ {
/* for composite glyphs, return only left side bearing and */ /* for composite glyphs, return only left side bearing and */
/* advance width */ /* advance width */
if ( glyph->root.format == ft_glyph_format_composite ) if ( load_flags & FT_LOAD_NO_RECURSE )
{ {
FT_Slot_Internal internal = glyph->root.internal;
glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x; glyph->root.metrics.horiBearingX = decoder.builder.left_bearing.x;
glyph->root.metrics.horiAdvance = decoder.glyph_width; glyph->root.metrics.horiAdvance = decoder.glyph_width;
internal->glyph_matrix = font_matrix;
internal->glyph_delta = font_offset;
internal->glyph_transformed = 1;
} }
else else
{ {
@ -1996,6 +2007,7 @@
/* copy the _unscaled_ advance width */ /* copy the _unscaled_ advance width */
metrics->horiAdvance = decoder.glyph_width; metrics->horiAdvance = decoder.glyph_width;
glyph->root.linearHoriAdvance = decoder.glyph_width; glyph->root.linearHoriAdvance = decoder.glyph_width;
glyph->root.internal->glyph_transformed = 0;
/* make up vertical metrics */ /* make up vertical metrics */
metrics->vertBearingX = 0; metrics->vertBearingX = 0;
@ -2012,6 +2024,13 @@
glyph->root.outline.flags |= ft_outline_reverse_fill; glyph->root.outline.flags |= ft_outline_reverse_fill;
/* apply the font matrix */
FT_Outline_Transform( &glyph->root.outline, &font_matrix );
FT_Outline_Translate( &glyph->root.outline,
font_offset.x,
font_offset.y );
if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 ) if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
{ {
/* scale the outline and the metrics */ /* scale the outline and the metrics */
@ -2039,11 +2058,6 @@
metrics->vertBearingY = FT_MulFix( metrics->vertBearingY, y_scale ); metrics->vertBearingY = FT_MulFix( metrics->vertBearingY, y_scale );
} }
#if 0
/* apply the font matrix */
FT_Outline_Transform( &glyph->root.outline, cff->font_matrix );
#endif
/* compute the other metrics */ /* compute the other metrics */
FT_Outline_Get_CBox( &glyph->root.outline, &cbox ); FT_Outline_Get_CBox( &glyph->root.outline, &cbox );