2004-03-27 09:43:17 +01:00
|
|
|
#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 *****/
|
|
|
|
/***** *****/
|
|
|
|
/**************************************************************************/
|
|
|
|
/**************************************************************************/
|
|
|
|
|
2004-04-21 16:30:37 +02:00
|
|
|
#define xxAF_DEBUG
|
2004-03-27 09:43:17 +01:00
|
|
|
|
|
|
|
#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 128
|
|
|
|
#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;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************/
|
|
|
|
/**************************************************************************/
|
|
|
|
/***** *****/
|
|
|
|
/***** 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,
|
|
|
|
FT_Outline* outline,
|
|
|
|
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__ */
|