Hash :
e664efad
        
        Author :
  
        
        Date :
2004-06-04T17:41:59
        
      
        * src/autofit/*: important fixes to the auto-fitter. The output
        now seems to be 100% equivalent to the auto-hinter, while being
        about 2% faster (which proves that script-specific algorithm
        selection isn't a performance problem).
        to test it, change "autohint" to "autofit" in
        <freetype/config/ftmodule.h> and recompile.
        a few more testing is needed before making this the official
        auto-hinting module
      
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
#ifndef __AFLATIN_H__
#define __AFLATIN_H__
#include "afhints.h"
FT_BEGIN_HEADER
 /*
  * the latin-specific script class
  *
  */
  FT_LOCAL( const AF_ScriptClassRec )    af_latin_script_class;
 /***************************************************************************/
 /***************************************************************************/
 /*****                                                                 *****/
 /*****       L A T I N   G L O B A L   M E T R I C S                   *****/
 /*****                                                                 *****/
 /***************************************************************************/
 /***************************************************************************/
 /*
  * the following declarations could be embedded in the file "aflatin.c"
  * they've been made semi-public to allow alternate script hinters to
  * re-use some of them
  */
 /*
  *  Latin (global) metrics management
  *
  */
  enum
  {
    AF_LATIN_BLUE_CAPITAL_TOP,
    AF_LATIN_BLUE_CAPITAL_BOTTOM,
    AF_LATIN_BLUE_SMALL_F_TOP,
    AF_LATIN_BLUE_SMALL_TOP,
    AF_LATIN_BLUE_SMALL_BOTTOM,
    AF_LATIN_BLUE_SMALL_MINOR,
    AF_LATIN_BLUE_MAX
  };
#define AF_LATIN_IS_TOP_BLUE( b )  ( (b) == AF_LATIN_BLUE_CAPITAL_TOP || \
                                     (b) == AF_LATIN_BLUE_SMALL_F_TOP || \
                                     (b) == AF_LATIN_BLUE_SMALL_TOP   )
#define  AF_LATIN_MAX_WIDTHS     16
#define  AF_LATIN_MAX_BLUES      AF_LATIN_BLUE_MAX
  enum
  {
    AF_LATIN_BLUE_ACTIVE     = (1 << 0),
    AF_LATIN_BLUE_TOP        = (1 << 1),
    AF_LATIN_BLUE_ADJUSTMENT = (1 << 2),  /* used for scale adjustment */
                                          /* optimization              */
    AF_LATIN_BLUE_FLAG_MAX
  };
  typedef struct AF_LatinBlueRec_
  {
    AF_WidthRec   ref;
    AF_WidthRec   shoot;
    FT_UInt       flags;
  } AF_LatinBlueRec, *AF_LatinBlue;
  typedef struct AF_LatinAxisRec_
  {
    FT_Fixed         scale;
    FT_Pos           delta;
    FT_UInt          width_count;
    AF_WidthRec      widths[ AF_LATIN_MAX_WIDTHS ];
    FT_Pos           edge_distance_threshold;
   /* ignored for horizontal metrics */
    FT_Bool          control_overshoot;
    FT_UInt          blue_count;
    AF_LatinBlueRec  blues[ AF_LATIN_BLUE_MAX ];
    FT_Fixed         org_scale;
    FT_Pos           org_delta;
  } AF_LatinAxisRec, *AF_LatinAxis;
  typedef struct AF_LatinMetricsRec_
  {
    AF_ScriptMetricsRec   root;
    FT_UInt               units_per_em;
    AF_LatinAxisRec       axis[ AF_DIMENSION_MAX ];
  } AF_LatinMetricsRec, *AF_LatinMetrics;
  FT_LOCAL( FT_Error )
  af_latin_metrics_init( AF_LatinMetrics  metrics,
                         FT_Face          face );
  FT_LOCAL( void )
  af_latin_metrics_scale( AF_LatinMetrics  metrics,
                          AF_Scaler        scaler );
 /***************************************************************************/
 /***************************************************************************/
 /*****                                                                 *****/
 /*****            L A T I N   G L Y P H   A N A L Y S I S              *****/
 /*****                                                                 *****/
 /***************************************************************************/
 /***************************************************************************/
  enum
  {
    AF_LATIN_HINTS_HORZ_SNAP   = (1 << 0),  /* enable stem width snapping  */
    AF_LATIN_HINTS_VERT_SNAP   = (1 << 1),  /* enable stem height snapping */
    AF_LATIN_HINTS_STEM_ADJUST = (1 << 2),  /* enable stem width/height adjustment */
    AF_LATIN_HINTS_MONO        = (1 << 3)   /* indicate monochrome rendering */
  };
#define  AF_LATIN_HINTS_DO_HORZ_SNAP(h) \
   AF_HINTS_TEST_OTHER(h,AF_LATIN_HINTS_HORZ_SNAP)
#define  AF_LATIN_HINTS_DO_VERT_SNAP(h) \
   AF_HINTS_TEST_OTHER(h,AF_LATIN_HINTS_VERT_SNAP)
#define  AF_LATIN_HINTS_DO_STEM_ADJUST(h)  \
   AF_HINTS_TEST_OTHER(h,AF_LATIN_HINTS_STEM_ADJUST)
#define  AF_LATIN_HINTS_DO_MONO(h)  \
   AF_HINTS_TEST_OTHER(h,AF_LATIN_HINTS_MONO)
 /* this shouldn't normally be exported. However, other scripts might
  * like to use this function as-is
  */
  FT_LOCAL( void )
  af_latin_hints_compute_segments( AF_GlyphHints  hints,
                                   AF_Dimension   dim );
 /* this shouldn't normally be exported. However, other scripts might
  * want to use this function as-is
  */
  FT_LOCAL( void )
  af_latin_hints_link_segments( AF_GlyphHints  hints,
                                AF_Dimension   dim );
 /* this shouldn't normally be exported. However, other scripts might
  * want to use this function as-is
  */
  FT_LOCAL( void )
  af_latin_hints_compute_edges( AF_GlyphHints  hints,
                                AF_Dimension   dim );
  FT_LOCAL( void )
  af_latin_hints_detect_features( AF_GlyphHints  hints,
                                  AF_Dimension   dim );
/* */
FT_END_HEADER
#endif /* __AFLATIN_H__ */