aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/extras/freetype2/src/autofit/aflatin.h
blob: e7e8e4842cfebcc365d2002633b09d840a7ec6b9 (plain)
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__ */