* src/cid/cidgload.c (cid_slot_load_glyph),
src/truetype/ttgload.c (tt_prepare_zone): removing compiler warnings
This commit is contained in:
parent
f1e96066a6
commit
9fbfc6af07
|
@ -1,3 +1,8 @@
|
||||||
|
2006-08-16 David Turner <david@freetype.org>
|
||||||
|
|
||||||
|
* src/cid/cidgload.c (cid_slot_load_glyph),
|
||||||
|
src/truetype/ttgload.c (tt_prepare_zone): removing compiler warnings
|
||||||
|
|
||||||
2006-08-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
2006-08-15 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||||
|
|
||||||
* modules.cfg (BASE_EXTENSIONS): Compile in ftgxval.c by default to
|
* modules.cfg (BASE_EXTENSIONS): Compile in ftgxval.c by default to
|
||||||
|
@ -239,7 +244,7 @@
|
||||||
Public API of TrueTypeGX, OpenType, and classic kern table validator
|
Public API of TrueTypeGX, OpenType, and classic kern table validator
|
||||||
should return `FT_Err_Unimplemented_Feature' if validation service
|
should return `FT_Err_Unimplemented_Feature' if validation service
|
||||||
is unavailable (disabled in `modules.cfg'). It is originally
|
is unavailable (disabled in `modules.cfg'). It is originally
|
||||||
suggested by David Turner, cf.
|
suggested by David Turner, cf.
|
||||||
http://lists.gnu.org/archive/html/freetype-devel/2005-11/msg00078.html
|
http://lists.gnu.org/archive/html/freetype-devel/2005-11/msg00078.html
|
||||||
|
|
||||||
* src/base/ftgxval.c (FT_TrueTypeGX_Validate): Return
|
* src/base/ftgxval.c (FT_TrueTypeGX_Validate): Return
|
||||||
|
|
|
@ -289,134 +289,131 @@
|
||||||
|
|
||||||
cidglyph->format = FT_GLYPH_FORMAT_OUTLINE;
|
cidglyph->format = FT_GLYPH_FORMAT_OUTLINE;
|
||||||
|
|
||||||
{
|
error = psaux->t1_decoder_funcs->init( &decoder,
|
||||||
error = psaux->t1_decoder_funcs->init( &decoder,
|
cidglyph->face,
|
||||||
cidglyph->face,
|
cidsize,
|
||||||
cidsize,
|
cidglyph,
|
||||||
cidglyph,
|
0, /* glyph names -- XXX */
|
||||||
0, /* glyph names -- XXX */
|
0, /* blend == 0 */
|
||||||
0, /* blend == 0 */
|
hinting,
|
||||||
hinting,
|
FT_LOAD_TARGET_MODE( load_flags ),
|
||||||
FT_LOAD_TARGET_MODE( load_flags ),
|
cid_load_glyph );
|
||||||
cid_load_glyph );
|
if (error)
|
||||||
|
goto Exit;
|
||||||
|
|
||||||
if ( !error )
|
/* TODO: initialize decoder.len_buildchar and decoder.buildchar */
|
||||||
{
|
/* if we ever support CID-keyed multiple master fonts */
|
||||||
/* TODO: initialize decoder.len_buildchar and decoder.buildchar */
|
|
||||||
/* if we ever support CID-keyed multiple master fonts */
|
|
||||||
|
|
||||||
/* set up the decoder */
|
/* set up the decoder */
|
||||||
decoder.builder.no_recurse = FT_BOOL(
|
decoder.builder.no_recurse = FT_BOOL(
|
||||||
( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 ) );
|
( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 ) );
|
||||||
|
|
||||||
error = cid_load_glyph( &decoder, glyph_index );
|
error = cid_load_glyph( &decoder, glyph_index );
|
||||||
|
if (error)
|
||||||
|
goto Exit;
|
||||||
|
|
||||||
font_matrix = decoder.font_matrix;
|
font_matrix = decoder.font_matrix;
|
||||||
font_offset = decoder.font_offset;
|
font_offset = decoder.font_offset;
|
||||||
|
|
||||||
/* save new glyph tables */
|
/* save new glyph tables */
|
||||||
psaux->t1_decoder_funcs->done( &decoder );
|
psaux->t1_decoder_funcs->done( &decoder );
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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 )
|
cidglyph->outline.flags &= FT_OUTLINE_OWNER;
|
||||||
|
cidglyph->outline.flags |= FT_OUTLINE_REVERSE_FILL;
|
||||||
|
|
||||||
|
/* for composite glyphs, return only left side bearing and */
|
||||||
|
/* advance width */
|
||||||
|
if ( load_flags & FT_LOAD_NO_RECURSE )
|
||||||
{
|
{
|
||||||
cidglyph->outline.flags &= FT_OUTLINE_OWNER;
|
FT_Slot_Internal internal = cidglyph->internal;
|
||||||
cidglyph->outline.flags |= FT_OUTLINE_REVERSE_FILL;
|
|
||||||
|
|
||||||
/* for composite glyphs, return only left side bearing and */
|
|
||||||
/* advance width */
|
cidglyph->metrics.horiBearingX = decoder.builder.left_bearing.x;
|
||||||
if ( load_flags & FT_LOAD_NO_RECURSE )
|
cidglyph->metrics.horiAdvance = decoder.builder.advance.x;
|
||||||
|
|
||||||
|
internal->glyph_matrix = font_matrix;
|
||||||
|
internal->glyph_delta = font_offset;
|
||||||
|
internal->glyph_transformed = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FT_BBox cbox;
|
||||||
|
FT_Glyph_Metrics* metrics = &cidglyph->metrics;
|
||||||
|
FT_Vector advance;
|
||||||
|
|
||||||
|
|
||||||
|
/* copy the _unscaled_ advance width */
|
||||||
|
metrics->horiAdvance = decoder.builder.advance.x;
|
||||||
|
cidglyph->linearHoriAdvance = decoder.builder.advance.x;
|
||||||
|
cidglyph->internal->glyph_transformed = 0;
|
||||||
|
|
||||||
|
/* make up vertical ones */
|
||||||
|
metrics->vertAdvance = ( face->cid.font_bbox.yMax -
|
||||||
|
face->cid.font_bbox.yMin ) >> 16;
|
||||||
|
cidglyph->linearVertAdvance = metrics->vertAdvance;
|
||||||
|
|
||||||
|
cidglyph->format = FT_GLYPH_FORMAT_OUTLINE;
|
||||||
|
|
||||||
|
if ( size && cidsize->metrics.y_ppem < 24 )
|
||||||
|
cidglyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
|
||||||
|
|
||||||
|
/* apply the font matrix */
|
||||||
|
FT_Outline_Transform( &cidglyph->outline, &font_matrix );
|
||||||
|
|
||||||
|
FT_Outline_Translate( &cidglyph->outline,
|
||||||
|
font_offset.x,
|
||||||
|
font_offset.y );
|
||||||
|
|
||||||
|
advance.x = metrics->horiAdvance;
|
||||||
|
advance.y = 0;
|
||||||
|
FT_Vector_Transform( &advance, &font_matrix );
|
||||||
|
metrics->horiAdvance = advance.x + font_offset.x;
|
||||||
|
advance.x = 0;
|
||||||
|
advance.y = metrics->vertAdvance;
|
||||||
|
FT_Vector_Transform( &advance, &font_matrix );
|
||||||
|
metrics->vertAdvance = advance.y + font_offset.y;
|
||||||
|
|
||||||
|
if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
|
||||||
{
|
{
|
||||||
FT_Slot_Internal internal = cidglyph->internal;
|
/* scale the outline and the metrics */
|
||||||
|
FT_Int n;
|
||||||
|
FT_Outline* cur = decoder.builder.base;
|
||||||
|
FT_Vector* vec = cur->points;
|
||||||
|
FT_Fixed x_scale = glyph->x_scale;
|
||||||
|
FT_Fixed y_scale = glyph->y_scale;
|
||||||
|
|
||||||
|
|
||||||
cidglyph->metrics.horiBearingX = decoder.builder.left_bearing.x;
|
/* First of all, scale the points */
|
||||||
cidglyph->metrics.horiAdvance = decoder.builder.advance.x;
|
if ( !hinting || !decoder.builder.hints_funcs )
|
||||||
|
for ( n = cur->n_points; n > 0; n--, vec++ )
|
||||||
|
{
|
||||||
|
vec->x = FT_MulFix( vec->x, x_scale );
|
||||||
|
vec->y = FT_MulFix( vec->y, y_scale );
|
||||||
|
}
|
||||||
|
|
||||||
internal->glyph_matrix = font_matrix;
|
/* Then scale the metrics */
|
||||||
internal->glyph_delta = font_offset;
|
metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale );
|
||||||
internal->glyph_transformed = 1;
|
metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale );
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
FT_BBox cbox;
|
|
||||||
FT_Glyph_Metrics* metrics = &cidglyph->metrics;
|
|
||||||
FT_Vector advance;
|
|
||||||
|
|
||||||
|
/* compute the other metrics */
|
||||||
|
FT_Outline_Get_CBox( &cidglyph->outline, &cbox );
|
||||||
|
|
||||||
/* copy the _unscaled_ advance width */
|
metrics->width = cbox.xMax - cbox.xMin;
|
||||||
metrics->horiAdvance = decoder.builder.advance.x;
|
metrics->height = cbox.yMax - cbox.yMin;
|
||||||
cidglyph->linearHoriAdvance = decoder.builder.advance.x;
|
|
||||||
cidglyph->internal->glyph_transformed = 0;
|
|
||||||
|
|
||||||
/* make up vertical ones */
|
metrics->horiBearingX = cbox.xMin;
|
||||||
metrics->vertAdvance = ( face->cid.font_bbox.yMax -
|
metrics->horiBearingY = cbox.yMax;
|
||||||
face->cid.font_bbox.yMin ) >> 16;
|
|
||||||
cidglyph->linearVertAdvance = metrics->vertAdvance;
|
|
||||||
|
|
||||||
cidglyph->format = FT_GLYPH_FORMAT_OUTLINE;
|
/* make up vertical ones */
|
||||||
|
ft_synthesize_vertical_metrics( metrics,
|
||||||
if ( size && cidsize->metrics.y_ppem < 24 )
|
metrics->vertAdvance );
|
||||||
cidglyph->outline.flags |= FT_OUTLINE_HIGH_PRECISION;
|
|
||||||
|
|
||||||
/* apply the font matrix */
|
|
||||||
FT_Outline_Transform( &cidglyph->outline, &font_matrix );
|
|
||||||
|
|
||||||
FT_Outline_Translate( &cidglyph->outline,
|
|
||||||
font_offset.x,
|
|
||||||
font_offset.y );
|
|
||||||
|
|
||||||
advance.x = metrics->horiAdvance;
|
|
||||||
advance.y = 0;
|
|
||||||
FT_Vector_Transform( &advance, &font_matrix );
|
|
||||||
metrics->horiAdvance = advance.x + font_offset.x;
|
|
||||||
advance.x = 0;
|
|
||||||
advance.y = metrics->vertAdvance;
|
|
||||||
FT_Vector_Transform( &advance, &font_matrix );
|
|
||||||
metrics->vertAdvance = advance.y + font_offset.y;
|
|
||||||
|
|
||||||
if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
|
|
||||||
{
|
|
||||||
/* scale the outline and the metrics */
|
|
||||||
FT_Int n;
|
|
||||||
FT_Outline* cur = decoder.builder.base;
|
|
||||||
FT_Vector* vec = cur->points;
|
|
||||||
FT_Fixed x_scale = glyph->x_scale;
|
|
||||||
FT_Fixed y_scale = glyph->y_scale;
|
|
||||||
|
|
||||||
|
|
||||||
/* First of all, scale the points */
|
|
||||||
if ( !hinting || !decoder.builder.hints_funcs )
|
|
||||||
for ( n = cur->n_points; n > 0; n--, vec++ )
|
|
||||||
{
|
|
||||||
vec->x = FT_MulFix( vec->x, x_scale );
|
|
||||||
vec->y = FT_MulFix( vec->y, y_scale );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Then scale the metrics */
|
|
||||||
metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale );
|
|
||||||
metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* compute the other metrics */
|
|
||||||
FT_Outline_Get_CBox( &cidglyph->outline, &cbox );
|
|
||||||
|
|
||||||
metrics->width = cbox.xMax - cbox.xMin;
|
|
||||||
metrics->height = cbox.yMax - cbox.yMin;
|
|
||||||
|
|
||||||
metrics->horiBearingX = cbox.xMin;
|
|
||||||
metrics->horiBearingY = cbox.yMax;
|
|
||||||
|
|
||||||
/* make up vertical ones */
|
|
||||||
ft_synthesize_vertical_metrics( metrics,
|
|
||||||
metrics->vertAdvance );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Exit:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -578,7 +578,7 @@
|
||||||
zone->cur = load->outline.points + start_point;
|
zone->cur = load->outline.points + start_point;
|
||||||
zone->tags = (FT_Byte*)load->outline.tags + start_point;
|
zone->tags = (FT_Byte*)load->outline.tags + start_point;
|
||||||
zone->contours = (FT_UShort*)load->outline.contours + start_contour;
|
zone->contours = (FT_UShort*)load->outline.contours + start_contour;
|
||||||
zone->first_point = start_point;
|
zone->first_point = (FT_UShort)start_point;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue