formatting
This commit is contained in:
parent
4cdb45c01e
commit
d1d4bffe2f
|
@ -8,11 +8,12 @@
|
||||||
Add CJK module based on akito's autohint patch.
|
Add CJK module based on akito's autohint patch.
|
||||||
|
|
||||||
* src/autofit/afhints.h (AF_SegmentRec): New field `len' for the
|
* src/autofit/afhints.h (AF_SegmentRec): New field `len' for the
|
||||||
overlap length of the segments. (AF_SEGMENT_LEN, AF_SEGMENT_DIST):
|
overlap length of the segments.
|
||||||
New macros.
|
(AF_SEGMENT_LEN, AF_SEGMENT_DIST): New macros.
|
||||||
|
|
||||||
* src/autofit/aflatin.h (af_latin_metrics_init_widths),
|
* src/autofit/aflatin.h (af_latin_metrics_init_widths),
|
||||||
src/autofit/aflatin.c (af_latin_metrics_init_widths): Made `FT_LOCAL'.
|
src/autofit/aflatin.c (af_latin_metrics_init_widths): Made
|
||||||
|
`FT_LOCAL'.
|
||||||
Use the character given by the caller.
|
Use the character given by the caller.
|
||||||
(af_latin_metrics_init_widths, af_latin_hints_link_segments): Scale
|
(af_latin_metrics_init_widths, af_latin_hints_link_segments): Scale
|
||||||
the thresholds.
|
the thresholds.
|
||||||
|
|
|
@ -15,11 +15,12 @@
|
||||||
/* */
|
/* */
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The algorithm is based on akito's autohint patch, available here:
|
* The algorithm is based on akito's autohint patch, available here:
|
||||||
*
|
*
|
||||||
* http://www.kde.gr.jp/~akito/patch/freetype2/
|
* http://www.kde.gr.jp/~akito/patch/freetype2/
|
||||||
*/
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
#define xxAF_MOD_CJK
|
#define xxAF_MOD_CJK
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/***** *****/
|
/***** *****/
|
||||||
/***** L A T I N G L O B A L M E T R I C S *****/
|
/***** C J K G L O B A L M E T R I C S *****/
|
||||||
/***** *****/
|
/***** *****/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
@ -107,7 +108,7 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/***** *****/
|
/***** *****/
|
||||||
/***** L A T I N G L Y P H A N A L Y S I S *****/
|
/***** C J K G L Y P H A N A L Y S I S *****/
|
||||||
/***** *****/
|
/***** *****/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
@ -172,7 +173,8 @@
|
||||||
len_threshold = ( (AF_LatinMetrics)hints->metrics )->units_per_em;
|
len_threshold = ( (AF_LatinMetrics)hints->metrics )->units_per_em;
|
||||||
len_threshold = ( len_threshold * 8 ) / 2048;
|
len_threshold = ( len_threshold * 8 ) / 2048;
|
||||||
|
|
||||||
dist_threshold = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale : hints->y_scale;
|
dist_threshold = ( dim == AF_DIMENSION_HORZ ) ? hints->x_scale
|
||||||
|
: hints->y_scale;
|
||||||
dist_threshold = FT_DivFix( 64 * 3, dist_threshold );
|
dist_threshold = FT_DivFix( 64 * 3, dist_threshold );
|
||||||
|
|
||||||
/* now compare each segment to the others */
|
/* now compare each segment to the others */
|
||||||
|
@ -209,7 +211,7 @@
|
||||||
len = max - min;
|
len = max - min;
|
||||||
if ( len >= len_threshold )
|
if ( len >= len_threshold )
|
||||||
{
|
{
|
||||||
if ( dist * 8 < seg1->score * 9 &&
|
if ( dist * 8 < seg1->score * 9 &&
|
||||||
( dist * 8 < seg1->score * 7 || seg1->len < len ) )
|
( dist * 8 < seg1->score * 7 || seg1->len < len ) )
|
||||||
{
|
{
|
||||||
seg1->score = dist;
|
seg1->score = dist;
|
||||||
|
@ -217,7 +219,7 @@
|
||||||
seg1->link = seg2;
|
seg1->link = seg2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( dist * 8 < seg2->score * 9 &&
|
if ( dist * 8 < seg2->score * 9 &&
|
||||||
( dist * 8 < seg2->score * 7 || seg2->len < len ) )
|
( dist * 8 < seg2->score * 7 || seg2->len < len ) )
|
||||||
{
|
{
|
||||||
seg2->score = dist;
|
seg2->score = dist;
|
||||||
|
@ -230,11 +232,12 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* now, compute the `serif' segments
|
* now compute the `serif' segments
|
||||||
|
*
|
||||||
|
* In Hanzi, some strokes are wider on one or both of the ends.
|
||||||
|
* We either identify the stems on the ends as serifs or remove
|
||||||
|
* the linkage, depending on the length of the stems.
|
||||||
*
|
*
|
||||||
* In Hanzi, some strokes are wider on one or both of the ends.
|
|
||||||
* We either identify the stems on the ends as serifs or remove
|
|
||||||
* the linkage, depending on the length of the stems.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -348,13 +351,13 @@
|
||||||
|
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* We will begin by generating a sorted table of edges for the */
|
/* We begin by generating a sorted table of edges for the current */
|
||||||
/* current direction. To do so, we simply scan each segment and try */
|
/* direction. To do so, we simply scan each segment and try to find */
|
||||||
/* to find an edge in our table that corresponds to its position. */
|
/* an edge in our table that corresponds to its position. */
|
||||||
/* */
|
/* */
|
||||||
/* If no edge is found, we create and insert a new edge in the */
|
/* If no edge is found, we create and insert a new edge in the */
|
||||||
/* sorted table. Otherwise, we simply add the segment to the edge's */
|
/* sorted table. Otherwise, we simply add the segment to the edge's */
|
||||||
/* list which will be processed in the second step to compute the */
|
/* list which is then processed in the second step to compute the */
|
||||||
/* edge's properties. */
|
/* edge's properties. */
|
||||||
/* */
|
/* */
|
||||||
/* Note that the edges table is sorted along the segment/edge */
|
/* Note that the edges table is sorted along the segment/edge */
|
||||||
|
@ -400,8 +403,8 @@
|
||||||
AF_Segment link = seg->link;
|
AF_Segment link = seg->link;
|
||||||
|
|
||||||
|
|
||||||
/* check if all linked segments of the candidate edge */
|
/* check whether all linked segments of the candidate edge */
|
||||||
/* can make a single edge. */
|
/* can make a single edge. */
|
||||||
if ( link )
|
if ( link )
|
||||||
{
|
{
|
||||||
AF_Segment seg1 = edge->first;
|
AF_Segment seg1 = edge->first;
|
||||||
|
@ -425,14 +428,14 @@
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
best = dist;
|
best = dist;
|
||||||
found = edge;
|
found = edge;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !found )
|
if ( !found )
|
||||||
{
|
{
|
||||||
AF_Edge edge;
|
AF_Edge edge;
|
||||||
|
|
||||||
|
|
||||||
/* insert a new edge in the list and */
|
/* insert a new edge in the list and */
|
||||||
|
@ -461,11 +464,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* Good, we will now compute each edge's properties according to */
|
/* Good, we now compute each edge's properties according to segments */
|
||||||
/* segments found on its position. Basically, these are: */
|
/* found on its position. Basically, these are as follows. */
|
||||||
/* */
|
/* */
|
||||||
/* - edge's main direction */
|
/* - edge's main direction */
|
||||||
/* - stem edge, serif edge or both (which defaults to stem then) */
|
/* - stem edge, serif edge or both (which defaults to stem then) */
|
||||||
|
@ -474,14 +476,13 @@
|
||||||
/* */
|
/* */
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
|
|
||||||
/* first of all, set the `edge' field in each segment -- this is */
|
/* first of all, set the `edge' field in each segment -- this is */
|
||||||
/* required in order to compute edge links */
|
/* required in order to compute edge links */
|
||||||
|
/* */
|
||||||
|
/* Note that removing this loop and setting the `edge' field of each */
|
||||||
|
/* segment directly in the code above slows down execution speed for */
|
||||||
|
/* some reasons on platforms like the Sun. */
|
||||||
|
|
||||||
/*
|
|
||||||
* Note that removing this loop and setting the `edge' field of each
|
|
||||||
* segment directly in the code above slows down execution speed for
|
|
||||||
* some reasons on platforms like the Sun.
|
|
||||||
*/
|
|
||||||
{
|
{
|
||||||
AF_Edge edges = axis->edges;
|
AF_Edge edges = axis->edges;
|
||||||
AF_Edge edge_limit = edges + axis->num_edges;
|
AF_Edge edge_limit = edges + axis->num_edges;
|
||||||
|
@ -500,7 +501,7 @@
|
||||||
} while ( seg != edge->first );
|
} while ( seg != edge->first );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now, compute each edge properties */
|
/* now compute each edge properties */
|
||||||
for ( edge = edges; edge < edge_limit; edge++ )
|
for ( edge = edges; edge < edge_limit; edge++ )
|
||||||
{
|
{
|
||||||
FT_Int is_round = 0; /* does it contain round segments? */
|
FT_Int is_round = 0; /* does it contain round segments? */
|
||||||
|
@ -576,7 +577,7 @@
|
||||||
if ( is_round > 0 && is_round >= is_straight )
|
if ( is_round > 0 && is_round >= is_straight )
|
||||||
edge->flags |= AF_EDGE_ROUND;
|
edge->flags |= AF_EDGE_ROUND;
|
||||||
|
|
||||||
/* gets rid of serifs if link is set */
|
/* get rid of serifs if link is set */
|
||||||
/* XXX: This gets rid of many unpleasant artefacts! */
|
/* XXX: This gets rid of many unpleasant artefacts! */
|
||||||
/* Example: the `c' in cour.pfa at size 13 */
|
/* Example: the `c' in cour.pfa at size 13 */
|
||||||
|
|
||||||
|
@ -632,9 +633,7 @@
|
||||||
|
|
||||||
#ifdef AF_USE_WARPER
|
#ifdef AF_USE_WARPER
|
||||||
if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
|
if ( mode == FT_RENDER_MODE_LCD || mode == FT_RENDER_MODE_LCD_V )
|
||||||
{
|
|
||||||
metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
|
metrics->root.scaler.render_mode = mode = FT_RENDER_MODE_NORMAL;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
scaler_flags = hints->scaler_flags;
|
scaler_flags = hints->scaler_flags;
|
||||||
|
@ -675,7 +674,7 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/***** *****/
|
/***** *****/
|
||||||
/***** L A T I N G L Y P H G R I D - F I T T I N G *****/
|
/***** C J K G L Y P H G R I D - F I T T I N G *****/
|
||||||
/***** *****/
|
/***** *****/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
@ -743,10 +742,10 @@
|
||||||
FT_Int sign = 0;
|
FT_Int sign = 0;
|
||||||
FT_Int vertical = ( dim == AF_DIMENSION_VERT );
|
FT_Int vertical = ( dim == AF_DIMENSION_VERT );
|
||||||
|
|
||||||
|
|
||||||
FT_UNUSED( base_flags );
|
FT_UNUSED( base_flags );
|
||||||
FT_UNUSED( stem_flags );
|
FT_UNUSED( stem_flags );
|
||||||
|
|
||||||
|
|
||||||
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
||||||
return width;
|
return width;
|
||||||
|
|
||||||
|
@ -891,10 +890,10 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#define AF_LIGHT_MODE_MAX_HORZ_GAP 9
|
||||||
|
#define AF_LIGHT_MODE_MAX_VERT_GAP 15
|
||||||
|
#define AF_LIGHT_MODE_MAX_DELTA_ABS 14
|
||||||
|
|
||||||
#define AF_LIGHT_MODE_MAX_HORZ_GAP 9
|
|
||||||
#define AF_LIGHT_MODE_MAX_VERT_GAP 15
|
|
||||||
#define AF_LIGHT_MODE_MAX_DELTA_ABS 14
|
|
||||||
|
|
||||||
static FT_Pos
|
static FT_Pos
|
||||||
af_hint_normal_stem( AF_GlyphHints hints,
|
af_hint_normal_stem( AF_GlyphHints hints,
|
||||||
|
@ -903,17 +902,17 @@
|
||||||
FT_Pos anchor,
|
FT_Pos anchor,
|
||||||
AF_Dimension dim )
|
AF_Dimension dim )
|
||||||
{
|
{
|
||||||
FT_Pos org_len, cur_len, org_center;
|
FT_Pos org_len, cur_len, org_center;
|
||||||
FT_Pos cur_pos1, cur_pos2;
|
FT_Pos cur_pos1, cur_pos2;
|
||||||
FT_Pos d_off1, u_off1, d_off2, u_off2, delta;
|
FT_Pos d_off1, u_off1, d_off2, u_off2, delta;
|
||||||
FT_Pos offset;
|
FT_Pos offset;
|
||||||
FT_Pos threshold = 64;
|
FT_Pos threshold = 64;
|
||||||
|
|
||||||
|
|
||||||
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
||||||
{
|
{
|
||||||
if ( ( edge->flags & AF_EDGE_ROUND ) &&
|
if ( ( edge->flags & AF_EDGE_ROUND ) &&
|
||||||
( edge2->flags & AF_EDGE_ROUND ) )
|
( edge2->flags & AF_EDGE_ROUND ) )
|
||||||
{
|
{
|
||||||
if ( dim == AF_DIMENSION_VERT )
|
if ( dim == AF_DIMENSION_VERT )
|
||||||
threshold = 64 - AF_LIGHT_MODE_MAX_HORZ_GAP;
|
threshold = 64 - AF_LIGHT_MODE_MAX_HORZ_GAP;
|
||||||
|
@ -923,9 +922,9 @@
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( dim == AF_DIMENSION_VERT )
|
if ( dim == AF_DIMENSION_VERT )
|
||||||
threshold = 64 - AF_LIGHT_MODE_MAX_HORZ_GAP/3;
|
threshold = 64 - AF_LIGHT_MODE_MAX_HORZ_GAP / 3;
|
||||||
else
|
else
|
||||||
threshold = 64 - AF_LIGHT_MODE_MAX_VERT_GAP/3;
|
threshold = 64 - AF_LIGHT_MODE_MAX_VERT_GAP / 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -992,6 +991,7 @@
|
||||||
delta = u_off2;
|
delta = u_off2;
|
||||||
|
|
||||||
Exit:
|
Exit:
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) )
|
||||||
{
|
{
|
||||||
|
@ -1033,7 +1033,7 @@
|
||||||
FT_Int skipped = 0;
|
FT_Int skipped = 0;
|
||||||
|
|
||||||
|
|
||||||
/* now we will align all stem edges. */
|
/* now we align all stem edges. */
|
||||||
for ( edge = edges; edge < edge_limit; edge++ )
|
for ( edge = edges; edge < edge_limit; edge++ )
|
||||||
{
|
{
|
||||||
AF_Edge edge2;
|
AF_Edge edge2;
|
||||||
|
@ -1061,6 +1061,7 @@
|
||||||
|
|
||||||
if ( dim != AF_DIMENSION_VERT && !anchor )
|
if ( dim != AF_DIMENSION_VERT && !anchor )
|
||||||
{
|
{
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if ( fixedpitch )
|
if ( fixedpitch )
|
||||||
{
|
{
|
||||||
|
@ -1079,17 +1080,17 @@
|
||||||
right1 = *right->link;
|
right1 = *right->link;
|
||||||
right2 = *right;
|
right2 = *right;
|
||||||
|
|
||||||
delta = ( ( ( hinter->pp2.x + 32 ) & -64 ) - hinter->pp2.x )/2;
|
delta = ( ( ( hinter->pp2.x + 32 ) & -64 ) - hinter->pp2.x ) / 2;
|
||||||
target = left->opos + ( right->opos - left->opos )/2 + delta - 16;
|
target = left->opos + ( right->opos - left->opos ) / 2 + delta - 16;
|
||||||
|
|
||||||
delta1 = delta;
|
delta1 = delta;
|
||||||
delta1 += af_hint_normal_stem( hints, left, left->link,
|
delta1 += af_hint_normal_stem( hints, left, left->link,
|
||||||
delta1, 0 );
|
delta1, 0 );
|
||||||
|
|
||||||
if ( left->link != right )
|
if ( left->link != right )
|
||||||
af_hint_normal_stem( hints, right->link, right, delta1, 0 );
|
af_hint_normal_stem( hints, right->link, right, delta1, 0 );
|
||||||
|
|
||||||
center1 = left->pos + ( right->pos - left->pos )/2;
|
center1 = left->pos + ( right->pos - left->pos ) / 2;
|
||||||
|
|
||||||
if ( center1 >= target )
|
if ( center1 >= target )
|
||||||
delta2 = delta - 32;
|
delta2 = delta - 32;
|
||||||
|
@ -1103,7 +1104,7 @@
|
||||||
if ( left->link != right )
|
if ( left->link != right )
|
||||||
af_hint_normal_stem( hints, &right1, &right2, delta2, 0 );
|
af_hint_normal_stem( hints, &right1, &right2, delta2, 0 );
|
||||||
|
|
||||||
center2 = left1.pos + ( right2.pos - left1.pos )/2;
|
center2 = left1.pos + ( right2.pos - left1.pos ) / 2;
|
||||||
|
|
||||||
d1 = center1 - target;
|
d1 = center1 - target;
|
||||||
d2 = center2 - target;
|
d2 = center2 - target;
|
||||||
|
@ -1128,17 +1129,19 @@
|
||||||
right->flags |= AF_EDGE_DONE;
|
right->flags |= AF_EDGE_DONE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
|
#endif /* 0 */
|
||||||
|
|
||||||
delta = af_hint_normal_stem( hints, edge, edge2, 0, 0 );
|
delta = af_hint_normal_stem( hints, edge, edge2, 0, 0 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
af_hint_normal_stem( hints, edge, edge2, delta, dim );
|
af_hint_normal_stem( hints, edge, edge2, delta, dim );
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
printf("stem (%d,%d) adjusted (%.1f,%.1f)\n",
|
printf( "stem (%d,%d) adjusted (%.1f,%.1f)\n",
|
||||||
edge - edges, edge2 - edges,
|
edge - edges, edge2 - edges,
|
||||||
( edge->pos - edge->opos ) / 64.,
|
( edge->pos - edge->opos ) / 64.0,
|
||||||
( edge2->pos - edge2->opos ) / 64.);
|
( edge2->pos - edge2->opos ) / 64.0 );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
anchor = edge;
|
anchor = edge;
|
||||||
|
@ -1222,7 +1225,6 @@
|
||||||
if ( edge->flags & AF_EDGE_DONE )
|
if ( edge->flags & AF_EDGE_DONE )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
||||||
if ( edge->serif )
|
if ( edge->serif )
|
||||||
{
|
{
|
||||||
af_cjk_align_serif_edge( hints, edge->serif, edge );
|
af_cjk_align_serif_edge( hints, edge->serif, edge );
|
||||||
|
@ -1279,8 +1281,10 @@
|
||||||
FT_Bool snapping;
|
FT_Bool snapping;
|
||||||
|
|
||||||
|
|
||||||
snapping = ( ( dim == AF_DIMENSION_HORZ && AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) ||
|
snapping = ( ( dim == AF_DIMENSION_HORZ &&
|
||||||
( dim == AF_DIMENSION_VERT && AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) );
|
AF_LATIN_HINTS_DO_HORZ_SNAP( hints ) ) ||
|
||||||
|
( dim == AF_DIMENSION_VERT &&
|
||||||
|
AF_LATIN_HINTS_DO_VERT_SNAP( hints ) ) );
|
||||||
|
|
||||||
for ( edge = edges; edge < edge_limit; edge++ )
|
for ( edge = edges; edge < edge_limit; edge++ )
|
||||||
{
|
{
|
||||||
|
@ -1364,9 +1368,9 @@
|
||||||
FT_Error error;
|
FT_Error error;
|
||||||
int dim;
|
int dim;
|
||||||
|
|
||||||
|
|
||||||
FT_UNUSED( metrics );
|
FT_UNUSED( metrics );
|
||||||
|
|
||||||
|
|
||||||
error = af_glyph_hints_reload( hints, outline );
|
error = af_glyph_hints_reload( hints, outline );
|
||||||
if ( error )
|
if ( error )
|
||||||
goto Exit;
|
goto Exit;
|
||||||
|
@ -1392,8 +1396,9 @@
|
||||||
if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
|
if ( ( dim == AF_DIMENSION_HORZ && AF_HINTS_DO_HORIZONTAL( hints ) ) ||
|
||||||
( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
|
( dim == AF_DIMENSION_VERT && AF_HINTS_DO_VERTICAL( hints ) ) )
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef AF_USE_WARPER
|
#ifdef AF_USE_WARPER
|
||||||
if ( dim == AF_DIMENSION_HORZ &&
|
if ( dim == AF_DIMENSION_HORZ &&
|
||||||
metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL )
|
metrics->root.scaler.render_mode == FT_RENDER_MODE_NORMAL )
|
||||||
{
|
{
|
||||||
AF_WarperRec warper;
|
AF_WarperRec warper;
|
||||||
|
@ -1405,7 +1410,8 @@
|
||||||
af_glyph_hints_scale_dim( hints, dim, scale, delta );
|
af_glyph_hints_scale_dim( hints, dim, scale, delta );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* AF_USE_WARPER */
|
||||||
|
|
||||||
af_cjk_hint_edges( hints, (AF_Dimension)dim );
|
af_cjk_hint_edges( hints, (AF_Dimension)dim );
|
||||||
af_cjk_align_edge_points( hints, (AF_Dimension)dim );
|
af_cjk_align_edge_points( hints, (AF_Dimension)dim );
|
||||||
af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
|
af_glyph_hints_align_strong_points( hints, (AF_Dimension)dim );
|
||||||
|
@ -1429,7 +1435,7 @@
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/***** *****/
|
/***** *****/
|
||||||
/***** L A T I N S C R I P T C L A S S *****/
|
/***** C J K S C R I P T C L A S S *****/
|
||||||
/***** *****/
|
/***** *****/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
@ -1478,7 +1484,7 @@
|
||||||
(AF_Script_ApplyHintsFunc) af_cjk_hints_apply
|
(AF_Script_ApplyHintsFunc) af_cjk_hints_apply
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
#else /* !AF_MOD_CJK */
|
||||||
|
|
||||||
static const AF_Script_UniRangeRec af_cjk_uniranges[] =
|
static const AF_Script_UniRangeRec af_cjk_uniranges[] =
|
||||||
{
|
{
|
||||||
|
@ -1502,7 +1508,7 @@
|
||||||
(AF_Script_ApplyHintsFunc) NULL
|
(AF_Script_ApplyHintsFunc) NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* AF_MOD_CJK */
|
#endif /* !AF_MOD_CJK */
|
||||||
|
|
||||||
|
|
||||||
/* END */
|
/* END */
|
||||||
|
|
|
@ -286,13 +286,11 @@ FT_BEGIN_HEADER
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
|
|
||||||
#define AF_SEGMENT_LEN( seg ) \
|
#define AF_SEGMENT_LEN( seg ) ( (seg)->max_coord - (seg)->min_coord )
|
||||||
( ( seg )->max_coord - ( seg )->min_coord )
|
|
||||||
|
|
||||||
#define AF_SEGMENT_DIST( seg1, seg2 ) \
|
#define AF_SEGMENT_DIST( seg1, seg2 ) ( ( (seg1)->pos > (seg2)->pos ) \
|
||||||
( ( ( seg1 )->pos > ( seg2 )->pos ) \
|
? (seg1)->pos - (seg2)->pos \
|
||||||
? ( seg1 )->pos - ( seg2 )->pos \
|
: (seg2)->pos - (seg1)->pos )
|
||||||
: ( seg2 )->pos - ( seg1 )->pos )
|
|
||||||
|
|
||||||
|
|
||||||
FT_END_HEADER
|
FT_END_HEADER
|
||||||
|
|
|
@ -16,20 +16,20 @@
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/*************************************************************************
|
||||||
*
|
*
|
||||||
* The auto-fitter is a complete rewrite of the old auto-hinter.
|
* The auto-fitter is a complete rewrite of the old auto-hinter.
|
||||||
* Its main feature is the ability to differentiate between different
|
* Its main feature is the ability to differentiate between different
|
||||||
* scripts in order to apply language-specific rules.
|
* scripts in order to apply language-specific rules.
|
||||||
*
|
*
|
||||||
* The code has also been compartimentized into several entities that
|
* The code has also been compartimentized into several entities that
|
||||||
* should make algorithmic experimentation easier than with the old
|
* should make algorithmic experimentation easier than with the old
|
||||||
* code.
|
* code.
|
||||||
*
|
*
|
||||||
* Finally, we get rid of the Catharon license, since this code is
|
* Finally, we get rid of the Catharon license, since this code is
|
||||||
* released under the FreeType one.
|
* released under the FreeType one.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#ifndef __AFTYPES_H__
|
#ifndef __AFTYPES_H__
|
||||||
|
|
Loading…
Reference in New Issue