formatting
This commit is contained in:
parent
a48162759e
commit
49e18b8d5f
47
ChangeLog
47
ChangeLog
|
@ -1,12 +1,49 @@
|
||||||
2007-06-11 David Turner <david@freetype.org>
|
2007-06-11 David Turner <david@freetype.org>
|
||||||
|
|
||||||
* src/autofit/aflatin,c: fix incorrect segment linking computation,
|
* src/autofit/aflatin.c (af_latin_hints_link_segments): Fix
|
||||||
this was the root cause of bug #19565.
|
incorrect segment linking computation. This was the root cause of
|
||||||
|
Savannah bug #19565.
|
||||||
|
|
||||||
|
|
||||||
* src/autofit/*: some very experimental changes to improve the Latin
|
* src/autofit/* [FT_OPTION_AUTOFIT2]: Some very experimental changes
|
||||||
auto-hinter. note that the new code is disabled by default since this
|
to improve the Latin auto-hinter. Note that the new code is
|
||||||
is not stablizied yet.
|
disabled by default since it is not stabilized yet.
|
||||||
|
|
||||||
|
* src/autofit/aflatin2.c, src/autofit/aflatin2.h: New files
|
||||||
|
(disabled currently).
|
||||||
|
|
||||||
|
* src/autofit/afhints.c: Remove dead code.
|
||||||
|
(af_axis_hints_new_edge): Add argument to handle segment directions.
|
||||||
|
(af_edge_flags_to_string): New function.
|
||||||
|
(af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Handle
|
||||||
|
option flags.
|
||||||
|
(af_glyph_hints_reload): Add argument to handle inflections.
|
||||||
|
Simplify.
|
||||||
|
(af_direction_compute): Fine tuning.
|
||||||
|
(af_glyph_hints_align_edge_points): Fix logic.
|
||||||
|
(af_glyph_hints_align_strong_points): Do linear search for small
|
||||||
|
edge counts.
|
||||||
|
(af_glyph_hints_align_weak_points): Skip any touched neighbors.
|
||||||
|
(af_iup_shift): Handle zero `delta'.
|
||||||
|
|
||||||
|
* src/autofit/afhints.h: Updated.
|
||||||
|
(AF_SORT_SEGMENTS): New macro (disabled).
|
||||||
|
(AF_AxisHintsRec) [AF_SORT_SEGMENTS]: New member `mid_segments'.
|
||||||
|
|
||||||
|
* src/autofit/afglobal.c (af_face_globals_get_metrics): Add
|
||||||
|
argument to pass option flags for handling scripts.
|
||||||
|
* src/autofit/afglobal.h: Updated.
|
||||||
|
|
||||||
|
* src/autofit/afcjk.c: Updated.
|
||||||
|
* src/autofit/aflatin.c: Updated.
|
||||||
|
(af_latin_metrics_scale_dim): Don't reduce scale by 2%.
|
||||||
|
|
||||||
|
(af_latin_hints_compute_segments) [AF_HINT_METRICS]: Remove dead code.
|
||||||
|
(af_latin_hints_compute_edges) [AF_HINT_METRICS]: Remove dead code.
|
||||||
|
Don't set `edge->dir'
|
||||||
|
(af_latin_hint_edges): Add more logging.
|
||||||
|
|
||||||
|
* src/autofit/afloader.c: Updated.
|
||||||
|
|
||||||
2007-06-11 Werner Lemberg <wl@gnu.org>
|
2007-06-11 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
|
|
|
@ -229,10 +229,10 @@
|
||||||
AF_ScriptMetrics metrics = NULL;
|
AF_ScriptMetrics metrics = NULL;
|
||||||
FT_UInt gidx;
|
FT_UInt gidx;
|
||||||
AF_ScriptClass clazz;
|
AF_ScriptClass clazz;
|
||||||
FT_UInt script = (options & 15);
|
FT_UInt script = options & 15;
|
||||||
const FT_UInt script_max = sizeof(af_script_classes)/
|
const FT_UInt script_max = sizeof ( af_script_classes ) /
|
||||||
sizeof(af_script_classes[0]);
|
sizeof ( af_script_classes[0] );
|
||||||
FT_Error error = AF_Err_Ok;
|
FT_Error error = AF_Err_Ok;
|
||||||
|
|
||||||
|
|
||||||
if ( gindex >= globals->glyph_count )
|
if ( gindex >= globals->glyph_count )
|
||||||
|
@ -242,11 +242,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
gidx = script;
|
gidx = script;
|
||||||
if (gidx == 0 || gidx+1 >= script_max)
|
if ( gidx == 0 || gidx + 1 >= script_max )
|
||||||
gidx = globals->glyph_scripts[gindex];
|
gidx = globals->glyph_scripts[gindex];
|
||||||
|
|
||||||
clazz = af_script_classes[gidx];
|
clazz = af_script_classes[gidx];
|
||||||
if (script == 0)
|
if ( script == 0 )
|
||||||
script = clazz->script;
|
script = clazz->script;
|
||||||
|
|
||||||
metrics = globals->metrics[clazz->script];
|
metrics = globals->metrics[clazz->script];
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
/* Auto-fitter routines to compute global hinting values */
|
/* Auto-fitter routines to compute global hinting values */
|
||||||
/* (specification). */
|
/* (specification). */
|
||||||
/* */
|
/* */
|
||||||
/* Copyright 2003, 2004, 2005 by */
|
/* Copyright 2003, 2004, 2005, 2007 by */
|
||||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of the FreeType project, and may only be used, */
|
/* This file is part of the FreeType project, and may only be used, */
|
||||||
|
|
|
@ -101,13 +101,12 @@
|
||||||
|
|
||||||
while ( edge > edges )
|
while ( edge > edges )
|
||||||
{
|
{
|
||||||
if (edge[-1].fpos < fpos)
|
if ( edge[-1].fpos < fpos )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* we want the edge with same position and minor direction
|
/* we want the edge with same position and minor direction */
|
||||||
* to appear before those in the major one in the list
|
/* to appear before those in the major one in the list */
|
||||||
*/
|
if ( edge[-1].fpos == fpos && dir == axis->major_dir )
|
||||||
if (edge[-1].fpos == fpos && dir == axis->major_dir)
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
edge[0] = edge[-1];
|
edge[0] = edge[-1];
|
||||||
|
@ -198,28 +197,31 @@
|
||||||
static const char*
|
static const char*
|
||||||
af_edge_flags_to_string( AF_Edge_Flags flags )
|
af_edge_flags_to_string( AF_Edge_Flags flags )
|
||||||
{
|
{
|
||||||
static char temp[32];
|
static char temp[32];
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
|
|
||||||
|
|
||||||
if ( flags & AF_EDGE_ROUND )
|
if ( flags & AF_EDGE_ROUND )
|
||||||
{
|
{
|
||||||
memcpy( temp+pos, "round", 5 );
|
memcpy( temp + pos, "round", 5 );
|
||||||
pos += 5;
|
pos += 5;
|
||||||
}
|
}
|
||||||
if ( flags & AF_EDGE_SERIF )
|
if ( flags & AF_EDGE_SERIF )
|
||||||
{
|
{
|
||||||
if (pos > 0)
|
if ( pos > 0 )
|
||||||
temp[pos++] = ' ';
|
temp[pos++] = ' ';
|
||||||
memcpy( temp+pos, "serif", 5 );
|
memcpy( temp + pos, "serif", 5 );
|
||||||
pos += 5;
|
pos += 5;
|
||||||
}
|
}
|
||||||
if (pos == 0)
|
if ( pos == 0 )
|
||||||
return "normal";
|
return "normal";
|
||||||
|
|
||||||
temp[pos] = 0;
|
temp[pos] = 0;
|
||||||
|
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* A function to dump the array of linked segments. */
|
/* A function to dump the array of linked segments. */
|
||||||
void
|
void
|
||||||
af_glyph_hints_dump_segments( AF_GlyphHints hints )
|
af_glyph_hints_dump_segments( AF_GlyphHints hints )
|
||||||
|
@ -244,13 +246,14 @@
|
||||||
{
|
{
|
||||||
printf ( " [ %5d | %5.2g | %5s | %4d | %5d | %5d | %5d | %s ]\n",
|
printf ( " [ %5d | %5.2g | %5s | %4d | %5d | %5d | %5d | %s ]\n",
|
||||||
seg - segments,
|
seg - segments,
|
||||||
dimension == AF_DIMENSION_HORZ ? (int)seg->first->ox/64.0 : (int)seg->first->oy/64.0,
|
dimension == AF_DIMENSION_HORZ ? (int)seg->first->ox / 64.0
|
||||||
|
: (int)seg->first->oy / 64.0,
|
||||||
af_dir_str( (AF_Direction)seg->dir ),
|
af_dir_str( (AF_Direction)seg->dir ),
|
||||||
AF_INDEX_NUM( seg->link, segments ),
|
AF_INDEX_NUM( seg->link, segments ),
|
||||||
AF_INDEX_NUM( seg->serif, segments ),
|
AF_INDEX_NUM( seg->serif, segments ),
|
||||||
seg->height,
|
seg->height,
|
||||||
seg->height - ( seg->max_coord - seg->min_coord ),
|
seg->height - ( seg->max_coord - seg->min_coord ),
|
||||||
af_edge_flags_to_string(seg->flags));
|
af_edge_flags_to_string( seg->flags ) );
|
||||||
}
|
}
|
||||||
printf( "\n" );
|
printf( "\n" );
|
||||||
}
|
}
|
||||||
|
@ -285,14 +288,14 @@
|
||||||
printf ( " [ %5d | %5.2g | %5s | %4d |"
|
printf ( " [ %5d | %5.2g | %5s | %4d |"
|
||||||
" %5d | %c | %5.2f | %5.2f | %s ]\n",
|
" %5d | %c | %5.2f | %5.2f | %s ]\n",
|
||||||
edge - edges,
|
edge - edges,
|
||||||
(int)edge->opos/64.0,
|
(int)edge->opos / 64.0,
|
||||||
af_dir_str( (AF_Direction)edge->dir ),
|
af_dir_str( (AF_Direction)edge->dir ),
|
||||||
AF_INDEX_NUM( edge->link, edges ),
|
AF_INDEX_NUM( edge->link, edges ),
|
||||||
AF_INDEX_NUM( edge->serif, edges ),
|
AF_INDEX_NUM( edge->serif, edges ),
|
||||||
edge->blue_edge ? 'y' : 'n',
|
edge->blue_edge ? 'y' : 'n',
|
||||||
edge->opos / 64.0,
|
edge->opos / 64.0,
|
||||||
edge->pos / 64.0,
|
edge->pos / 64.0,
|
||||||
af_edge_flags_to_string(edge->flags) );
|
af_edge_flags_to_string( edge->flags ) );
|
||||||
}
|
}
|
||||||
printf( "\n" );
|
printf( "\n" );
|
||||||
}
|
}
|
||||||
|
@ -367,7 +370,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
ss *= 14;
|
ss *= 14;
|
||||||
if ( FT_ABS(ll) <= FT_ABS(ss) )
|
if ( FT_ABS( ll ) <= FT_ABS( ss ) )
|
||||||
dir = AF_DIR_NONE;
|
dir = AF_DIR_NONE;
|
||||||
|
|
||||||
return dir;
|
return dir;
|
||||||
|
@ -634,13 +637,14 @@
|
||||||
|
|
||||||
/* compute coordinates & Bezier flags, next and prev */
|
/* compute coordinates & Bezier flags, next and prev */
|
||||||
{
|
{
|
||||||
FT_Vector* vec = outline->points;
|
FT_Vector* vec = outline->points;
|
||||||
char* tag = outline->tags;
|
char* tag = outline->tags;
|
||||||
AF_Point first = points;
|
AF_Point first = points;
|
||||||
AF_Point end = points + outline->contours[0];
|
AF_Point end = points + outline->contours[0];
|
||||||
AF_Point prev = end;
|
AF_Point prev = end;
|
||||||
FT_Int contour_index = 0;
|
FT_Int contour_index = 0;
|
||||||
|
|
||||||
|
|
||||||
for ( point = points; point < point_limit; point++, vec++, tag++ )
|
for ( point = points; point < point_limit; point++, vec++, tag++ )
|
||||||
{
|
{
|
||||||
point->fx = (FT_Short)vec->x;
|
point->fx = (FT_Short)vec->x;
|
||||||
|
@ -664,7 +668,7 @@
|
||||||
prev->next = point;
|
prev->next = point;
|
||||||
prev = point;
|
prev = point;
|
||||||
|
|
||||||
if (point == end)
|
if ( point == end )
|
||||||
{
|
{
|
||||||
if ( ++contour_index < outline->n_contours )
|
if ( ++contour_index < outline->n_contours )
|
||||||
{
|
{
|
||||||
|
@ -699,11 +703,13 @@
|
||||||
FT_Pos in_y = 0;
|
FT_Pos in_y = 0;
|
||||||
AF_Direction in_dir = AF_DIR_NONE;
|
AF_Direction in_dir = AF_DIR_NONE;
|
||||||
|
|
||||||
|
|
||||||
for ( point = points; point < point_limit; point++ )
|
for ( point = points; point < point_limit; point++ )
|
||||||
{
|
{
|
||||||
AF_Point next;
|
AF_Point next;
|
||||||
FT_Pos out_x, out_y;
|
FT_Pos out_x, out_y;
|
||||||
|
|
||||||
|
|
||||||
if ( point == first )
|
if ( point == first )
|
||||||
{
|
{
|
||||||
prev = first->prev;
|
prev = first->prev;
|
||||||
|
@ -713,14 +719,14 @@
|
||||||
first = prev + 1;
|
first = prev + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
point->in_dir = (FT_Char) in_dir;
|
point->in_dir = (FT_Char)in_dir;
|
||||||
|
|
||||||
next = point->next;
|
next = point->next;
|
||||||
out_x = next->fx - point->fx;
|
out_x = next->fx - point->fx;
|
||||||
out_y = next->fy - point->fy;
|
out_y = next->fy - point->fy;
|
||||||
|
|
||||||
in_dir = af_direction_compute( out_x, out_y );
|
in_dir = af_direction_compute( out_x, out_y );
|
||||||
point->out_dir = (FT_Char) in_dir;
|
point->out_dir = (FT_Char)in_dir;
|
||||||
|
|
||||||
if ( point->flags & ( AF_FLAG_CONIC | AF_FLAG_CUBIC ) )
|
if ( point->flags & ( AF_FLAG_CONIC | AF_FLAG_CUBIC ) )
|
||||||
{
|
{
|
||||||
|
@ -745,8 +751,9 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compute inflection points -- disable due to no longer perceived benefits */
|
/* compute inflection points -- */
|
||||||
if (0 && get_inflections)
|
/* disabled due to no longer perceived benefits */
|
||||||
|
if ( 0 && get_inflections )
|
||||||
af_glyph_hints_compute_inflections( hints );
|
af_glyph_hints_compute_inflections( hints );
|
||||||
|
|
||||||
Exit:
|
Exit:
|
||||||
|
@ -1021,7 +1028,7 @@
|
||||||
AF_Point p;
|
AF_Point p;
|
||||||
FT_Pos delta = ref->u - ref->v;
|
FT_Pos delta = ref->u - ref->v;
|
||||||
|
|
||||||
if (delta == 0)
|
if ( delta == 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for ( p = p1; p < ref; p++ )
|
for ( p = p1; p < ref; p++ )
|
||||||
|
@ -1141,7 +1148,8 @@
|
||||||
|
|
||||||
for ( ; contour < contour_limit; contour++ )
|
for ( ; contour < contour_limit; contour++ )
|
||||||
{
|
{
|
||||||
AF_Point first_touched, last_touched;
|
AF_Point first_touched, last_touched;
|
||||||
|
|
||||||
|
|
||||||
point = *contour;
|
point = *contour;
|
||||||
end_point = point->prev;
|
end_point = point->prev;
|
||||||
|
@ -1164,10 +1172,11 @@
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
FT_ASSERT( point <= end_point && (point->flags & touch_flag) != 0 );
|
FT_ASSERT( point <= end_point &&
|
||||||
|
( point->flags & touch_flag ) != 0 );
|
||||||
|
|
||||||
/* skip any touched neighbhours */
|
/* skip any touched neighbhours */
|
||||||
while ( point < end_point && (point[1].flags & touch_flag) != 0 )
|
while ( point < end_point && ( point[1].flags & touch_flag ) != 0 )
|
||||||
point++;
|
point++;
|
||||||
|
|
||||||
last_touched = point;
|
last_touched = point;
|
||||||
|
@ -1179,7 +1188,7 @@
|
||||||
if ( point > end_point )
|
if ( point > end_point )
|
||||||
goto EndContour;
|
goto EndContour;
|
||||||
|
|
||||||
if ( (point->flags & touch_flag) != 0 )
|
if ( ( point->flags & touch_flag ) != 0 )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
point++;
|
point++;
|
||||||
|
|
|
@ -2009,13 +2009,16 @@
|
||||||
FT_MulDiv( edge->opos - before->opos,
|
FT_MulDiv( edge->opos - before->opos,
|
||||||
after->pos - before->pos,
|
after->pos - before->pos,
|
||||||
after->opos - before->opos );
|
after->opos - before->opos );
|
||||||
AF_LOG(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f) from %d (opos=%.2f)\n",
|
AF_LOG(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f) "
|
||||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0, before - edges, before->opos / 64.0 ));
|
"from %d (opos=%.2f)\n",
|
||||||
|
edge-edges, edge->opos / 64.0,
|
||||||
|
edge->pos / 64.0, before - edges,
|
||||||
|
before->opos / 64.0 ));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
edge->pos = anchor->pos + (( edge->opos - anchor->opos + 16) & ~31);
|
edge->pos = anchor->pos +
|
||||||
|
( ( edge->opos - anchor->opos + 16 ) & ~31 );
|
||||||
AF_LOG(( "SERIF_LINK2: edge %d (opos=%.2f) snapped to (%.2f)\n",
|
AF_LOG(( "SERIF_LINK2: edge %d (opos=%.2f) snapped to (%.2f)\n",
|
||||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
|
edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
|
||||||
}
|
}
|
||||||
|
|
|
@ -494,9 +494,10 @@
|
||||||
AF_ScriptMetrics metrics;
|
AF_ScriptMetrics metrics;
|
||||||
FT_UInt options = 0;
|
FT_UInt options = 0;
|
||||||
|
|
||||||
|
|
||||||
#ifdef FT_OPTION_AUTOFIT2
|
#ifdef FT_OPTION_AUTOFIT2
|
||||||
/* XXX: undocumented hook to activate the latin2 hinter */
|
/* XXX: undocumented hook to activate the latin2 hinter */
|
||||||
if (load_flags & (1UL << 20))
|
if ( load_flags & ( 1UL << 20 ) )
|
||||||
options = 2;
|
options = 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue