forked from minhngoc25a/freetype2
Improve code readability.
* src/ttgload.c (load_truetype_glyph): Move metrics calculation to... (tt_get_metrics): This new function.
This commit is contained in:
parent
ac0d52d851
commit
422210be64
|
@ -1,3 +1,11 @@
|
|||
2009-11-03 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
Improve code readability.
|
||||
|
||||
* src/ttgload.c (load_truetype_glyph): Move metrics calculation
|
||||
to...
|
||||
(tt_get_metrics): This new function.
|
||||
|
||||
2009-10-26 Bram Tassyns <bramt@enfocus.be>
|
||||
|
||||
Fix Savannah bug #27811.
|
||||
|
|
|
@ -134,6 +134,87 @@
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
tt_get_metrics( TT_Loader loader,
|
||||
FT_UInt glyph_index )
|
||||
{
|
||||
TT_Face face = (TT_Face)loader->face;
|
||||
|
||||
FT_Short left_bearing = 0, top_bearing = 0;
|
||||
FT_UShort advance_width = 0, advance_height = 0;
|
||||
|
||||
|
||||
TT_Get_HMetrics( face, glyph_index,
|
||||
(FT_Bool)!( loader->load_flags &
|
||||
FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ),
|
||||
&left_bearing,
|
||||
&advance_width );
|
||||
TT_Get_VMetrics( face, glyph_index,
|
||||
(FT_Bool)!( loader->load_flags &
|
||||
FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ),
|
||||
&top_bearing,
|
||||
&advance_height );
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_INCREMENTAL
|
||||
|
||||
/* If this is an incrementally loaded font see if there are */
|
||||
/* overriding metrics for this glyph. */
|
||||
if ( face->root.internal->incremental_interface &&
|
||||
face->root.internal->incremental_interface->funcs->get_glyph_metrics )
|
||||
{
|
||||
FT_Incremental_MetricsRec metrics;
|
||||
FT_Error error;
|
||||
|
||||
|
||||
metrics.bearing_x = left_bearing;
|
||||
metrics.bearing_y = 0;
|
||||
metrics.advance = advance_width;
|
||||
|
||||
error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
|
||||
face->root.internal->incremental_interface->object,
|
||||
glyph_index, FALSE, &metrics );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
left_bearing = (FT_Short)metrics.bearing_x;
|
||||
advance_width = (FT_UShort)metrics.advance;
|
||||
|
||||
#if 0
|
||||
|
||||
/* GWW: Do I do the same for vertical metrics? */
|
||||
metrics.bearing_x = 0;
|
||||
metrics.bearing_y = top_bearing;
|
||||
metrics.advance = advance_height;
|
||||
|
||||
error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
|
||||
face->root.internal->incremental_interface->object,
|
||||
glyph_index, TRUE, &metrics );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
top_bearing = (FT_Short)metrics.bearing_y;
|
||||
advance_height = (FT_UShort)metrics.advance;
|
||||
|
||||
#endif /* 0 */
|
||||
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
|
||||
|
||||
Exit:
|
||||
loader->left_bearing = left_bearing;
|
||||
loader->advance = advance_width;
|
||||
loader->top_bearing = top_bearing;
|
||||
loader->vadvance = advance_height;
|
||||
|
||||
if ( !loader->linear_def )
|
||||
{
|
||||
loader->linear_def = 1;
|
||||
loader->linear = advance_width;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Translates an array of coordinates. */
|
||||
|
@ -1151,75 +1232,7 @@
|
|||
y_scale = 0x10000L;
|
||||
}
|
||||
|
||||
/* get metrics, horizontal and vertical */
|
||||
{
|
||||
FT_Short left_bearing = 0, top_bearing = 0;
|
||||
FT_UShort advance_width = 0, advance_height = 0;
|
||||
|
||||
|
||||
TT_Get_HMetrics( face, glyph_index,
|
||||
(FT_Bool)!( loader->load_flags &
|
||||
FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ),
|
||||
&left_bearing,
|
||||
&advance_width );
|
||||
TT_Get_VMetrics( face, glyph_index,
|
||||
(FT_Bool)!( loader->load_flags &
|
||||
FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ),
|
||||
&top_bearing,
|
||||
&advance_height );
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_INCREMENTAL
|
||||
|
||||
/* If this is an incrementally loaded font see if there are */
|
||||
/* overriding metrics for this glyph. */
|
||||
if ( face->root.internal->incremental_interface &&
|
||||
face->root.internal->incremental_interface->funcs->get_glyph_metrics )
|
||||
{
|
||||
FT_Incremental_MetricsRec metrics;
|
||||
|
||||
|
||||
metrics.bearing_x = left_bearing;
|
||||
metrics.bearing_y = 0;
|
||||
metrics.advance = advance_width;
|
||||
error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
|
||||
face->root.internal->incremental_interface->object,
|
||||
glyph_index, FALSE, &metrics );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
left_bearing = (FT_Short)metrics.bearing_x;
|
||||
advance_width = (FT_UShort)metrics.advance;
|
||||
|
||||
#if 0
|
||||
|
||||
/* GWW: Do I do the same for vertical metrics? */
|
||||
metrics.bearing_x = 0;
|
||||
metrics.bearing_y = top_bearing;
|
||||
metrics.advance = advance_height;
|
||||
error = face->root.internal->incremental_interface->funcs->get_glyph_metrics(
|
||||
face->root.internal->incremental_interface->object,
|
||||
glyph_index, TRUE, &metrics );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
top_bearing = (FT_Short)metrics.bearing_y;
|
||||
advance_height = (FT_UShort)metrics.advance;
|
||||
|
||||
#endif /* 0 */
|
||||
|
||||
}
|
||||
|
||||
#endif /* FT_CONFIG_OPTION_INCREMENTAL */
|
||||
|
||||
loader->left_bearing = left_bearing;
|
||||
loader->advance = advance_width;
|
||||
loader->top_bearing = top_bearing;
|
||||
loader->vadvance = advance_height;
|
||||
|
||||
if ( !loader->linear_def )
|
||||
{
|
||||
loader->linear_def = 1;
|
||||
loader->linear = advance_width;
|
||||
}
|
||||
}
|
||||
tt_get_metrics( loader, glyph_index );
|
||||
|
||||
/* Set `offset' to the start of the glyph relative to the start of */
|
||||
/* the `glyf' table, and `byte_len' to the length of the glyph in */
|
||||
|
|
Loading…
Reference in New Issue