|
|
|
@ -144,6 +144,17 @@ |
|
|
|
|
|
|
|
|
|
#include FT_CONFIG_STANDARD_LIBRARY_H |
|
|
|
|
|
|
|
|
|
/* The dump functions are used in the `ftgrid' demo program, too. */ |
|
|
|
|
#define AF_DUMP( varformat ) \ |
|
|
|
|
do \
|
|
|
|
|
{ \
|
|
|
|
|
if ( to_stdout ) \
|
|
|
|
|
printf varformat; \
|
|
|
|
|
else \
|
|
|
|
|
FT_TRACE7( varformat ); \
|
|
|
|
|
} while ( 0 ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static const char* |
|
|
|
|
af_dir_str( AF_Direction dir ) |
|
|
|
|
{ |
|
|
|
@ -179,34 +190,35 @@ |
|
|
|
|
extern "C" { |
|
|
|
|
#endif |
|
|
|
|
void |
|
|
|
|
af_glyph_hints_dump_points( AF_GlyphHints hints ) |
|
|
|
|
af_glyph_hints_dump_points( AF_GlyphHints hints, |
|
|
|
|
FT_Bool to_stdout ) |
|
|
|
|
{ |
|
|
|
|
AF_Point points = hints->points; |
|
|
|
|
AF_Point limit = points + hints->num_points; |
|
|
|
|
AF_Point point; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_TRACE7(( "Table of points:\n" |
|
|
|
|
" [ index | xorg | yorg | xscale | yscale" |
|
|
|
|
" | xfit | yfit | flags ]\n" )); |
|
|
|
|
AF_DUMP(( "Table of points:\n" |
|
|
|
|
" [ index | xorg | yorg | xscale | yscale" |
|
|
|
|
" | xfit | yfit | flags ]\n" )); |
|
|
|
|
|
|
|
|
|
for ( point = points; point < limit; point++ ) |
|
|
|
|
FT_TRACE7(( " [ %5d | %5d | %5d | %6.2f | %6.2f" |
|
|
|
|
" | %5.2f | %5.2f | %c%c%c%c%c%c ]\n", |
|
|
|
|
point - points, |
|
|
|
|
point->fx, |
|
|
|
|
point->fy, |
|
|
|
|
point->ox / 64.0, |
|
|
|
|
point->oy / 64.0, |
|
|
|
|
point->x / 64.0, |
|
|
|
|
point->y / 64.0, |
|
|
|
|
( point->flags & AF_FLAG_WEAK_INTERPOLATION ) ? 'w' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_INFLECTION ) ? 'i' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_EXTREMA_X ) ? '<' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_EXTREMA_Y ) ? 'v' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_ROUND_X ) ? '(' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_ROUND_Y ) ? 'u' : ' ')); |
|
|
|
|
FT_TRACE7(( "\n" )); |
|
|
|
|
AF_DUMP(( " [ %5d | %5d | %5d | %6.2f | %6.2f" |
|
|
|
|
" | %5.2f | %5.2f | %c%c%c%c%c%c ]\n", |
|
|
|
|
point - points, |
|
|
|
|
point->fx, |
|
|
|
|
point->fy, |
|
|
|
|
point->ox / 64.0, |
|
|
|
|
point->oy / 64.0, |
|
|
|
|
point->x / 64.0, |
|
|
|
|
point->y / 64.0, |
|
|
|
|
( point->flags & AF_FLAG_WEAK_INTERPOLATION ) ? 'w' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_INFLECTION ) ? 'i' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_EXTREMA_X ) ? '<' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_EXTREMA_Y ) ? 'v' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_ROUND_X ) ? '(' : ' ', |
|
|
|
|
( point->flags & AF_FLAG_ROUND_Y ) ? 'u' : ' ')); |
|
|
|
|
AF_DUMP(( "\n" )); |
|
|
|
|
} |
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
} |
|
|
|
@ -247,7 +259,8 @@ |
|
|
|
|
extern "C" { |
|
|
|
|
#endif |
|
|
|
|
void |
|
|
|
|
af_glyph_hints_dump_segments( AF_GlyphHints hints ) |
|
|
|
|
af_glyph_hints_dump_segments( AF_GlyphHints hints, |
|
|
|
|
FT_Bool to_stdout ) |
|
|
|
|
{ |
|
|
|
|
FT_Int dimension; |
|
|
|
|
|
|
|
|
@ -262,34 +275,34 @@ |
|
|
|
|
AF_Segment seg; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_TRACE7(( "Table of %s segments:\n", |
|
|
|
|
dimension == AF_DIMENSION_HORZ ? "vertical" |
|
|
|
|
: "horizontal" )); |
|
|
|
|
AF_DUMP(( "Table of %s segments:\n", |
|
|
|
|
dimension == AF_DIMENSION_HORZ ? "vertical" |
|
|
|
|
: "horizontal" )); |
|
|
|
|
if ( axis->num_segments ) |
|
|
|
|
FT_TRACE7(( " [ index | pos | dir | from" |
|
|
|
|
" | to | link | serif | edge" |
|
|
|
|
" | height | extra | flags ]\n" )); |
|
|
|
|
AF_DUMP(( " [ index | pos | dir | from" |
|
|
|
|
" | to | link | serif | edge" |
|
|
|
|
" | height | extra | flags ]\n" )); |
|
|
|
|
else |
|
|
|
|
FT_TRACE7(( " (none)\n" )); |
|
|
|
|
AF_DUMP(( " (none)\n" )); |
|
|
|
|
|
|
|
|
|
for ( seg = segments; seg < limit; seg++ ) |
|
|
|
|
FT_TRACE7(( " [ %5d | %5.2g | %5s | %4d" |
|
|
|
|
" | %4d | %4d | %5d | %4d" |
|
|
|
|
" | %6d | %5d | %11s ]\n", |
|
|
|
|
seg - segments, |
|
|
|
|
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->first, points ), |
|
|
|
|
AF_INDEX_NUM( seg->last, points ), |
|
|
|
|
AF_INDEX_NUM( seg->link, segments ), |
|
|
|
|
AF_INDEX_NUM( seg->serif, segments ), |
|
|
|
|
AF_INDEX_NUM( seg->edge, edges ), |
|
|
|
|
seg->height, |
|
|
|
|
seg->height - ( seg->max_coord - seg->min_coord ), |
|
|
|
|
af_edge_flags_to_string( (AF_Edge_Flags)seg->flags ) )); |
|
|
|
|
FT_TRACE7(( "\n" )); |
|
|
|
|
AF_DUMP(( " [ %5d | %5.2g | %5s | %4d" |
|
|
|
|
" | %4d | %4d | %5d | %4d" |
|
|
|
|
" | %6d | %5d | %11s ]\n", |
|
|
|
|
seg - segments, |
|
|
|
|
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->first, points ), |
|
|
|
|
AF_INDEX_NUM( seg->last, points ), |
|
|
|
|
AF_INDEX_NUM( seg->link, segments ), |
|
|
|
|
AF_INDEX_NUM( seg->serif, segments ), |
|
|
|
|
AF_INDEX_NUM( seg->edge, edges ), |
|
|
|
|
seg->height, |
|
|
|
|
seg->height - ( seg->max_coord - seg->min_coord ), |
|
|
|
|
af_edge_flags_to_string( (AF_Edge_Flags)seg->flags ) )); |
|
|
|
|
AF_DUMP(( "\n" )); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#ifdef __cplusplus |
|
|
|
@ -366,7 +379,8 @@ |
|
|
|
|
extern "C" { |
|
|
|
|
#endif |
|
|
|
|
void |
|
|
|
|
af_glyph_hints_dump_edges( AF_GlyphHints hints ) |
|
|
|
|
af_glyph_hints_dump_edges( AF_GlyphHints hints, |
|
|
|
|
FT_Bool to_stdout ) |
|
|
|
|
{ |
|
|
|
|
FT_Int dimension; |
|
|
|
|
|
|
|
|
@ -383,94 +397,35 @@ |
|
|
|
|
* note: AF_DIMENSION_HORZ corresponds to _vertical_ edges |
|
|
|
|
* since they have a constant X coordinate. |
|
|
|
|
*/ |
|
|
|
|
FT_TRACE7(( "Table of %s edges:\n", |
|
|
|
|
dimension == AF_DIMENSION_HORZ ? "vertical" |
|
|
|
|
: "horizontal" )); |
|
|
|
|
AF_DUMP(( "Table of %s edges:\n", |
|
|
|
|
dimension == AF_DIMENSION_HORZ ? "vertical" |
|
|
|
|
: "horizontal" )); |
|
|
|
|
if ( axis->num_edges ) |
|
|
|
|
FT_TRACE7(( " [ index | pos | dir | link" |
|
|
|
|
" | serif | blue | opos | pos | flags ]\n" )); |
|
|
|
|
AF_DUMP(( " [ index | pos | dir | link" |
|
|
|
|
" | serif | blue | opos | pos | flags ]\n" )); |
|
|
|
|
else |
|
|
|
|
FT_TRACE7(( " (none)\n" )); |
|
|
|
|
AF_DUMP(( " (none)\n" )); |
|
|
|
|
|
|
|
|
|
for ( edge = edges; edge < limit; edge++ ) |
|
|
|
|
FT_TRACE7(( " [ %5d | %5.2g | %5s | %4d" |
|
|
|
|
" | %5d | %c | %5.2f | %5.2f | %11s ]\n", |
|
|
|
|
edge - edges, |
|
|
|
|
(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( (AF_Edge_Flags)edge->flags ) )); |
|
|
|
|
FT_TRACE7(( "\n" )); |
|
|
|
|
AF_DUMP(( " [ %5d | %5.2g | %5s | %4d" |
|
|
|
|
" | %5d | %c | %5.2f | %5.2f | %11s ]\n", |
|
|
|
|
edge - edges, |
|
|
|
|
(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( (AF_Edge_Flags)edge->flags ) )); |
|
|
|
|
AF_DUMP(( "\n" )); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#else /* !FT_DEBUG_AUTOFIT */ |
|
|
|
|
|
|
|
|
|
/* these empty stubs are only used to link the `ftgrid' test program */ |
|
|
|
|
/* if debugging is disabled */ |
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
extern "C" { |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
af_glyph_hints_dump_points( AF_GlyphHints hints ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( hints ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
af_glyph_hints_dump_segments( AF_GlyphHints hints ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( hints ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_Error |
|
|
|
|
af_glyph_hints_get_num_segments( AF_GlyphHints hints, |
|
|
|
|
FT_Int dimension, |
|
|
|
|
FT_Int* num_segments ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( hints ); |
|
|
|
|
FT_UNUSED( dimension ); |
|
|
|
|
FT_UNUSED( num_segments ); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_Error |
|
|
|
|
af_glyph_hints_get_segment_offset( AF_GlyphHints hints, |
|
|
|
|
FT_Int dimension, |
|
|
|
|
FT_Int idx, |
|
|
|
|
FT_Pos* offset ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( hints ); |
|
|
|
|
FT_UNUSED( dimension ); |
|
|
|
|
FT_UNUSED( idx ); |
|
|
|
|
FT_UNUSED( offset ); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
af_glyph_hints_dump_edges( AF_GlyphHints hints ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( hints ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
#undef AF_DUMP |
|
|
|
|
|
|
|
|
|
#endif /* !FT_DEBUG_AUTOFIT */ |
|
|
|
|
|
|
|
|
|