diff options
Diffstat (limited to 'nx-X11/extras/freetype2/src/autofit/aftypes.h')
-rw-r--r-- | nx-X11/extras/freetype2/src/autofit/aftypes.h | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/nx-X11/extras/freetype2/src/autofit/aftypes.h b/nx-X11/extras/freetype2/src/autofit/aftypes.h new file mode 100644 index 000000000..5d0371fcb --- /dev/null +++ b/nx-X11/extras/freetype2/src/autofit/aftypes.h @@ -0,0 +1,290 @@ +/*************************************************************************** + * + * FreeType auto-fitter + * + * (c) 2004 David Turner + * + * The auto-fitter is a complete rewrite of the old auto-hinter. + * its main feature is the ability to differentiate between different + * scripts in order to apply language-specific rules. + * + * the code has also been compartimentized into several entities that + * should make algorithmic experimentation easier than with the old + * code. + * + * finally, we get rid of the Catharon license, since this code is + * released under the FreeType one. + */ +#ifndef __AFTYPES_H__ +#define __AFTYPES_H__ + +#include <ft2build.h> +#include FT_FREETYPE_H +#include FT_OUTLINE_H +#include FT_INTERNAL_OBJECTS_H +#include FT_INTERNAL_DEBUG_H + +FT_BEGIN_HEADER + + /**************************************************************************/ + /**************************************************************************/ + /***** *****/ + /***** D E B U G G I N G *****/ + /***** *****/ + /**************************************************************************/ + /**************************************************************************/ + +#define xxAF_DEBUG + +#ifdef AF_DEBUG + +# include <stdio.h> +# define AF_LOG( x ) printf x + +#else + +# define AF_LOG( x ) do ; while ( 0 ) /* nothing */ + +#endif /* AF_DEBUG */ + + /**************************************************************************/ + /**************************************************************************/ + /***** *****/ + /***** U T I L I T Y *****/ + /***** *****/ + /**************************************************************************/ + /**************************************************************************/ + + typedef struct AF_WidthRec_ + { + FT_Pos org; /* original position/width in font units */ + FT_Pos cur; /* current/scaled position/width in device sub-pixels */ + FT_Pos fit; /* current/fitted position/width in device sub-pixels */ + + } AF_WidthRec, *AF_Width; + + + FT_LOCAL( void ) + af_sort_pos( FT_UInt count, + FT_Pos* table ); + + FT_LOCAL( void ) + af_sort_widths( FT_UInt count, + AF_Width widths ); + + + /**************************************************************************/ + /**************************************************************************/ + /***** *****/ + /***** A N G L E T Y P E S *****/ + /***** *****/ + /**************************************************************************/ + /**************************************************************************/ + + /* + * Angle type. The auto-fitter doesn't need a very high angular accuracy, + * and this allows us to speed up some computations considerably with a + * light Cordic algorithm (see afangles.c) + * + */ + + typedef FT_Int AF_Angle; + +#define AF_ANGLE_PI 256 +#define AF_ANGLE_2PI (AF_ANGLE_PI*2) +#define AF_ANGLE_PI2 (AF_ANGLE_PI/2) +#define AF_ANGLE_PI4 (AF_ANGLE_PI/4) + + /* + * compute the angle of a given 2-D vector + * + */ + FT_LOCAL( AF_Angle ) + af_angle_atan( FT_Pos dx, + FT_Pos dy ); + + + /* + * computes "angle2 - angle1", the result is always within + * the range [ -AF_ANGLE_PI .. AF_ANGLE_PI-1 ] + * + */ + FT_LOCAL( AF_Angle ) + af_angle_diff( AF_Angle angle1, + AF_Angle angle2 ); + + + /**************************************************************************/ + /**************************************************************************/ + /***** *****/ + /***** O U T L I N E S *****/ + /***** *****/ + /**************************************************************************/ + /**************************************************************************/ + + /* opaque handle to glyph-specific hints. see "afhints.h" for more + * details + */ + typedef struct AF_GlyphHintsRec_* AF_GlyphHints; + + /* this structure is used to model an input glyph outline to + * the auto-hinter. The latter will set the "hints" field + * depending on the glyph's script + */ + typedef struct AF_OutlineRec_ + { + FT_Face face; + FT_Outline outline; + FT_UInt outline_resolution; + + FT_Int advance; + FT_UInt metrics_resolution; + + AF_GlyphHints hints; + + } AF_OutlineRec; + + + /**************************************************************************/ + /**************************************************************************/ + /***** *****/ + /***** S C A L E R S *****/ + /***** *****/ + /**************************************************************************/ + /**************************************************************************/ + + /* + * A scaler models the target pixel device that will receive the + * auto-hinted glyph image + * + */ + + typedef enum + { + AF_SCALER_FLAG_NO_HORIZONTAL = 1, /* disable horizontal hinting */ + AF_SCALER_FLAG_NO_VERTICAL = 2, /* disable vertical hinting */ + AF_SCALER_FLAG_NO_ADVANCE = 4 /* disable advance hinting */ + + } AF_ScalerFlags; + + + typedef struct AF_ScalerRec_ + { + FT_Face face; /* source font face */ + FT_Fixed x_scale; /* from font units to 1/64th device pixels */ + FT_Fixed y_scale; /* from font units to 1/64th device pixels */ + FT_Pos x_delta; /* in 1/64th device pixels */ + FT_Pos y_delta; /* in 1/64th device pixels */ + FT_Render_Mode render_mode; /* monochrome, anti-aliased, LCD, etc.. */ + FT_UInt32 flags; /* additionnal control flags, see above */ + + } AF_ScalerRec, *AF_Scaler; + + +#define AF_SCALER_EQUAL_SCALES(a,b) \ + ( (a)->x_scale == (b)->x_scale && \ + (a)->y_scale == (b)->y_scale && \ + (a)->x_delta == (b)->x_delta && \ + (a)->y_delta == (b)->y_delta ) + + + /**************************************************************************/ + /**************************************************************************/ + /***** *****/ + /***** S C R I P T S *****/ + /***** *****/ + /**************************************************************************/ + /**************************************************************************/ + + /* + * the list of know scripts. Each different script correspond to the + * following information: + * + * - a set of Unicode ranges to test weither the face supports the + * script + * + * - a specific global analyzer that will compute global metrics + * specific to the script. + * + * - a specific glyph analyzer that will compute segments and + * edges for each glyph covered by the script + * + * - a specific grid-fitting algorithm that will distort the + * scaled glyph outline according to the results of the glyph + * analyzer + * + * note that a given analyzer and/or grid-fitting algorithm can be + * used by more than one script + */ + typedef enum + { + AF_SCRIPT_NONE = 0, + AF_SCRIPT_LATIN = 1, + /* add new scripts here. don't forget to update the list in "afglobal.c" */ + + AF_SCRIPT_MAX /* do not remove */ + + } AF_Script; + + + + typedef struct AF_ScriptClassRec_ const* AF_ScriptClass; + + typedef struct AF_ScriptMetricsRec_ + { + AF_ScriptClass clazz; + AF_ScalerRec scaler; + + } AF_ScriptMetricsRec, *AF_ScriptMetrics; + + + /* this function parses a FT_Face to compute global metrics for + * a specific script + */ + typedef FT_Error (*AF_Script_InitMetricsFunc)( AF_ScriptMetrics metrics, + FT_Face face ); + + typedef void (*AF_Script_ScaleMetricsFunc)( AF_ScriptMetrics metrics, + AF_Scaler scaler ); + + typedef void (*AF_Script_DoneMetricsFunc)( AF_ScriptMetrics metrics ); + + + typedef FT_Error (*AF_Script_InitHintsFunc)( AF_GlyphHints hints, + AF_ScriptMetrics metrics ); + + typedef void (*AF_Script_ApplyHintsFunc)( AF_GlyphHints hints, + FT_Outline* outline, + AF_ScriptMetrics metrics ); + + + typedef struct AF_Script_UniRangeRec_ + { + FT_UInt32 first; + FT_UInt32 last; + + } AF_Script_UniRangeRec; + + typedef const AF_Script_UniRangeRec * AF_Script_UniRange; + + typedef struct AF_ScriptClassRec_ + { + AF_Script script; + AF_Script_UniRange script_uni_ranges; /* last must be { 0, 0 } */ + + FT_UInt script_metrics_size; + AF_Script_InitMetricsFunc script_metrics_init; + AF_Script_ScaleMetricsFunc script_metrics_scale; + AF_Script_DoneMetricsFunc script_metrics_done; + + AF_Script_InitHintsFunc script_hints_init; + AF_Script_ApplyHintsFunc script_hints_apply; + + } AF_ScriptClassRec; + + +/* */ + +FT_END_HEADER + +#endif /* __AFTYPES_H__ */ |