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>
|
||||
|
||||
* src/autofit/aflatin,c: fix incorrect segment linking computation,
|
||||
this was the root cause of bug #19565.
|
||||
* src/autofit/aflatin.c (af_latin_hints_link_segments): Fix
|
||||
incorrect segment linking computation. This was the root cause of
|
||||
Savannah bug #19565.
|
||||
|
||||
|
||||
* src/autofit/*: some very experimental changes to improve the Latin
|
||||
auto-hinter. note that the new code is disabled by default since this
|
||||
is not stablizied yet.
|
||||
* src/autofit/* [FT_OPTION_AUTOFIT2]: Some very experimental changes
|
||||
to improve the Latin auto-hinter. Note that the new code is
|
||||
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>
|
||||
|
||||
|
@ -229,10 +229,10 @@
|
||||
AF_ScriptMetrics metrics = NULL;
|
||||
FT_UInt gidx;
|
||||
AF_ScriptClass clazz;
|
||||
FT_UInt script = (options & 15);
|
||||
const FT_UInt script_max = sizeof(af_script_classes)/
|
||||
sizeof(af_script_classes[0]);
|
||||
FT_Error error = AF_Err_Ok;
|
||||
FT_UInt script = options & 15;
|
||||
const FT_UInt script_max = sizeof ( af_script_classes ) /
|
||||
sizeof ( af_script_classes[0] );
|
||||
FT_Error error = AF_Err_Ok;
|
||||
|
||||
|
||||
if ( gindex >= globals->glyph_count )
|
||||
@ -242,11 +242,11 @@
|
||||
}
|
||||
|
||||
gidx = script;
|
||||
if (gidx == 0 || gidx+1 >= script_max)
|
||||
if ( gidx == 0 || gidx + 1 >= script_max )
|
||||
gidx = globals->glyph_scripts[gindex];
|
||||
|
||||
clazz = af_script_classes[gidx];
|
||||
if (script == 0)
|
||||
clazz = af_script_classes[gidx];
|
||||
if ( script == 0 )
|
||||
script = clazz->script;
|
||||
|
||||
metrics = globals->metrics[clazz->script];
|
||||
|
@ -5,7 +5,7 @@
|
||||
/* Auto-fitter routines to compute global hinting values */
|
||||
/* (specification). */
|
||||
/* */
|
||||
/* Copyright 2003, 2004, 2005 by */
|
||||
/* Copyright 2003, 2004, 2005, 2007 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -101,13 +101,12 @@
|
||||
|
||||
while ( edge > edges )
|
||||
{
|
||||
if (edge[-1].fpos < fpos)
|
||||
if ( edge[-1].fpos < fpos )
|
||||
break;
|
||||
|
||||
/* we want the edge with same position and minor direction
|
||||
* to appear before those in the major one in the list
|
||||
*/
|
||||
if (edge[-1].fpos == fpos && dir == axis->major_dir)
|
||||
/* we want the edge with same position and minor direction */
|
||||
/* to appear before those in the major one in the list */
|
||||
if ( edge[-1].fpos == fpos && dir == axis->major_dir )
|
||||
break;
|
||||
|
||||
edge[0] = edge[-1];
|
||||
@ -198,28 +197,31 @@
|
||||
static const char*
|
||||
af_edge_flags_to_string( AF_Edge_Flags flags )
|
||||
{
|
||||
static char temp[32];
|
||||
int pos = 0;
|
||||
static char temp[32];
|
||||
int pos = 0;
|
||||
|
||||
|
||||
if ( flags & AF_EDGE_ROUND )
|
||||
{
|
||||
memcpy( temp+pos, "round", 5 );
|
||||
memcpy( temp + pos, "round", 5 );
|
||||
pos += 5;
|
||||
}
|
||||
if ( flags & AF_EDGE_SERIF )
|
||||
{
|
||||
if (pos > 0)
|
||||
if ( pos > 0 )
|
||||
temp[pos++] = ' ';
|
||||
memcpy( temp+pos, "serif", 5 );
|
||||
memcpy( temp + pos, "serif", 5 );
|
||||
pos += 5;
|
||||
}
|
||||
if (pos == 0)
|
||||
if ( pos == 0 )
|
||||
return "normal";
|
||||
|
||||
temp[pos] = 0;
|
||||
|
||||
return temp;
|
||||
}
|
||||
|
||||
|
||||
/* A function to dump the array of linked segments. */
|
||||
void
|
||||
af_glyph_hints_dump_segments( AF_GlyphHints hints )
|
||||
@ -244,13 +246,14 @@
|
||||
{
|
||||
printf ( " [ %5d | %5.2g | %5s | %4d | %5d | %5d | %5d | %s ]\n",
|
||||
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_INDEX_NUM( seg->link, segments ),
|
||||
AF_INDEX_NUM( seg->serif, segments ),
|
||||
seg->height,
|
||||
seg->height - ( seg->max_coord - seg->min_coord ),
|
||||
af_edge_flags_to_string(seg->flags));
|
||||
af_edge_flags_to_string( seg->flags ) );
|
||||
}
|
||||
printf( "\n" );
|
||||
}
|
||||
@ -285,14 +288,14 @@
|
||||
printf ( " [ %5d | %5.2g | %5s | %4d |"
|
||||
" %5d | %c | %5.2f | %5.2f | %s ]\n",
|
||||
edge - edges,
|
||||
(int)edge->opos/64.0,
|
||||
(int)edge->opos / 64.0,
|
||||
af_dir_str( (AF_Direction)edge->dir ),
|
||||
AF_INDEX_NUM( edge->link, edges ),
|
||||
AF_INDEX_NUM( edge->serif, edges ),
|
||||
edge->blue_edge ? 'y' : 'n',
|
||||
edge->opos / 64.0,
|
||||
edge->pos / 64.0,
|
||||
af_edge_flags_to_string(edge->flags) );
|
||||
af_edge_flags_to_string( edge->flags ) );
|
||||
}
|
||||
printf( "\n" );
|
||||
}
|
||||
@ -367,7 +370,7 @@
|
||||
}
|
||||
|
||||
ss *= 14;
|
||||
if ( FT_ABS(ll) <= FT_ABS(ss) )
|
||||
if ( FT_ABS( ll ) <= FT_ABS( ss ) )
|
||||
dir = AF_DIR_NONE;
|
||||
|
||||
return dir;
|
||||
@ -634,13 +637,14 @@
|
||||
|
||||
/* compute coordinates & Bezier flags, next and prev */
|
||||
{
|
||||
FT_Vector* vec = outline->points;
|
||||
char* tag = outline->tags;
|
||||
AF_Point first = points;
|
||||
AF_Point end = points + outline->contours[0];
|
||||
AF_Point prev = end;
|
||||
FT_Vector* vec = outline->points;
|
||||
char* tag = outline->tags;
|
||||
AF_Point first = points;
|
||||
AF_Point end = points + outline->contours[0];
|
||||
AF_Point prev = end;
|
||||
FT_Int contour_index = 0;
|
||||
|
||||
|
||||
for ( point = points; point < point_limit; point++, vec++, tag++ )
|
||||
{
|
||||
point->fx = (FT_Short)vec->x;
|
||||
@ -664,7 +668,7 @@
|
||||
prev->next = point;
|
||||
prev = point;
|
||||
|
||||
if (point == end)
|
||||
if ( point == end )
|
||||
{
|
||||
if ( ++contour_index < outline->n_contours )
|
||||
{
|
||||
@ -699,11 +703,13 @@
|
||||
FT_Pos in_y = 0;
|
||||
AF_Direction in_dir = AF_DIR_NONE;
|
||||
|
||||
|
||||
for ( point = points; point < point_limit; point++ )
|
||||
{
|
||||
AF_Point next;
|
||||
FT_Pos out_x, out_y;
|
||||
|
||||
|
||||
if ( point == first )
|
||||
{
|
||||
prev = first->prev;
|
||||
@ -713,14 +719,14 @@
|
||||
first = prev + 1;
|
||||
}
|
||||
|
||||
point->in_dir = (FT_Char) in_dir;
|
||||
point->in_dir = (FT_Char)in_dir;
|
||||
|
||||
next = point->next;
|
||||
out_x = next->fx - point->fx;
|
||||
out_y = next->fy - point->fy;
|
||||
next = point->next;
|
||||
out_x = next->fx - point->fx;
|
||||
out_y = next->fy - point->fy;
|
||||
|
||||
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 ) )
|
||||
{
|
||||
@ -745,8 +751,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* compute inflection points -- disable due to no longer perceived benefits */
|
||||
if (0 && get_inflections)
|
||||
/* compute inflection points -- */
|
||||
/* disabled due to no longer perceived benefits */
|
||||
if ( 0 && get_inflections )
|
||||
af_glyph_hints_compute_inflections( hints );
|
||||
|
||||
Exit:
|
||||
@ -1021,7 +1028,7 @@
|
||||
AF_Point p;
|
||||
FT_Pos delta = ref->u - ref->v;
|
||||
|
||||
if (delta == 0)
|
||||
if ( delta == 0 )
|
||||
return;
|
||||
|
||||
for ( p = p1; p < ref; p++ )
|
||||
@ -1141,7 +1148,8 @@
|
||||
|
||||
for ( ; contour < contour_limit; contour++ )
|
||||
{
|
||||
AF_Point first_touched, last_touched;
|
||||
AF_Point first_touched, last_touched;
|
||||
|
||||
|
||||
point = *contour;
|
||||
end_point = point->prev;
|
||||
@ -1164,10 +1172,11 @@
|
||||
|
||||
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 */
|
||||
while ( point < end_point && (point[1].flags & touch_flag) != 0 )
|
||||
while ( point < end_point && ( point[1].flags & touch_flag ) != 0 )
|
||||
point++;
|
||||
|
||||
last_touched = point;
|
||||
@ -1179,7 +1188,7 @@
|
||||
if ( point > end_point )
|
||||
goto EndContour;
|
||||
|
||||
if ( (point->flags & touch_flag) != 0 )
|
||||
if ( ( point->flags & touch_flag ) != 0 )
|
||||
break;
|
||||
|
||||
point++;
|
||||
|
@ -2009,13 +2009,16 @@
|
||||
FT_MulDiv( edge->opos - before->opos,
|
||||
after->pos - before->pos,
|
||||
after->opos - before->opos );
|
||||
AF_LOG(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f) from %d (opos=%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0, before - edges, before->opos / 64.0 ));
|
||||
AF_LOG(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f) "
|
||||
"from %d (opos=%.2f)\n",
|
||||
edge-edges, edge->opos / 64.0,
|
||||
edge->pos / 64.0, before - edges,
|
||||
before->opos / 64.0 ));
|
||||
}
|
||||
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",
|
||||
edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
|
||||
}
|
||||
|
@ -494,9 +494,10 @@
|
||||
AF_ScriptMetrics metrics;
|
||||
FT_UInt options = 0;
|
||||
|
||||
|
||||
#ifdef FT_OPTION_AUTOFIT2
|
||||
/* XXX: undocumented hook to activate the latin2 hinter */
|
||||
if (load_flags & (1UL << 20))
|
||||
if ( load_flags & ( 1UL << 20 ) )
|
||||
options = 2;
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user