Edit

kc3-lang/freetype/src/autofit/aftypes.h

Branch :

  • Show log

    Commit

  • Author : Werner Lemberg
    Date : 2004-03-27 08:43:17
    Hash : 8bb07e63
    Message : Add vertical phantom points. * include/freetype/internal/tttypes.h (TT_LoaderRec): Add `top_bearing', `vadvance', `pp3, and `pp4'. * src/autofit/afloader.c (af_loader_load_g): Handle two more points. * src/autohint/ahhint.c (ah_hinter_load): Handle two more points. * src/truetype/ttgload.c (Get_VMetrics): New function. (TT_Load_Simple_Glyph, TT_Process_Simple_Glyph): Handle two more points. (load_truetype_glyph): Use Get_VMetrics. Handle two more points. (compute_glyph_metrics): Thanks to vertical phantom points we now can always compute `advance_height' and `top_bearing'. * src/truetype/ttobjs.h (TT_SubglyphRec): Add vertical phantom points. * src/autohint/ahglyph.c (ah_outline_load): Fix allocation of `news'. Converting some files to Unix end-of-line convention.

  • src/autofit/aftypes.h
  • #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 AF_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     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__ */