"Fossies" - the Fresh Open Source Software Archive 
Member "SDL2_ttf-2.20.2/external/freetype/src/autofit/aflatin.h" (25 May 2022, 6784 Bytes) of package /linux/misc/SDL2_ttf-2.20.2.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "aflatin.h" see the
Fossies "Dox" file reference documentation.
1 /****************************************************************************
2 *
3 * aflatin.h
4 *
5 * Auto-fitter hinting routines for latin writing system
6 * (specification).
7 *
8 * Copyright (C) 2003-2022 by
9 * David Turner, Robert Wilhelm, and Werner Lemberg.
10 *
11 * This file is part of the FreeType project, and may only be used,
12 * modified, and distributed under the terms of the FreeType project
13 * license, LICENSE.TXT. By continuing to use, modify, or distribute
14 * this file you indicate that you have read the license and
15 * understand and accept it fully.
16 *
17 */
18
19
20 #ifndef AFLATIN_H_
21 #define AFLATIN_H_
22
23 #include "afhints.h"
24
25
26 FT_BEGIN_HEADER
27
28 /* the `latin' writing system */
29
30 AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin_writing_system_class )
31
32
33 /* constants are given with units_per_em == 2048 in mind */
34 #define AF_LATIN_CONSTANT( metrics, c ) \
35 ( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 )
36
37
38 /*************************************************************************/
39 /*************************************************************************/
40 /***** *****/
41 /***** L A T I N G L O B A L M E T R I C S *****/
42 /***** *****/
43 /*************************************************************************/
44 /*************************************************************************/
45
46
47 /*
48 * The following declarations could be embedded in the file `aflatin.c';
49 * they have been made semi-public to allow alternate writing system
50 * hinters to re-use some of them.
51 */
52
53
54 #define AF_LATIN_IS_TOP_BLUE( b ) \
55 ( (b)->properties & AF_BLUE_PROPERTY_LATIN_TOP )
56 #define AF_LATIN_IS_SUB_TOP_BLUE( b ) \
57 ( (b)->properties & AF_BLUE_PROPERTY_LATIN_SUB_TOP )
58 #define AF_LATIN_IS_NEUTRAL_BLUE( b ) \
59 ( (b)->properties & AF_BLUE_PROPERTY_LATIN_NEUTRAL )
60 #define AF_LATIN_IS_X_HEIGHT_BLUE( b ) \
61 ( (b)->properties & AF_BLUE_PROPERTY_LATIN_X_HEIGHT )
62 #define AF_LATIN_IS_LONG_BLUE( b ) \
63 ( (b)->properties & AF_BLUE_PROPERTY_LATIN_LONG )
64
65 #define AF_LATIN_MAX_WIDTHS 16
66
67
68 #define AF_LATIN_BLUE_ACTIVE ( 1U << 0 ) /* zone height is <= 3/4px */
69 #define AF_LATIN_BLUE_TOP ( 1U << 1 ) /* we have a top blue zone */
70 #define AF_LATIN_BLUE_SUB_TOP ( 1U << 2 ) /* we have a subscript top */
71 /* blue zone */
72 #define AF_LATIN_BLUE_NEUTRAL ( 1U << 3 ) /* we have neutral blue zone */
73 #define AF_LATIN_BLUE_ADJUSTMENT ( 1U << 4 ) /* used for scale adjustment */
74 /* optimization */
75
76
77 typedef struct AF_LatinBlueRec_
78 {
79 AF_WidthRec ref;
80 AF_WidthRec shoot;
81 FT_Pos ascender;
82 FT_Pos descender;
83 FT_UInt flags;
84
85 } AF_LatinBlueRec, *AF_LatinBlue;
86
87
88 typedef struct AF_LatinAxisRec_
89 {
90 FT_Fixed scale;
91 FT_Pos delta;
92
93 FT_UInt width_count; /* number of used widths */
94 AF_WidthRec widths[AF_LATIN_MAX_WIDTHS]; /* widths array */
95 FT_Pos edge_distance_threshold; /* used for creating edges */
96 FT_Pos standard_width; /* the default stem thickness */
97 FT_Bool extra_light; /* is standard width very light? */
98
99 /* ignored for horizontal metrics */
100 FT_UInt blue_count;
101 AF_LatinBlueRec blues[AF_BLUE_STRINGSET_MAX];
102
103 FT_Fixed org_scale;
104 FT_Pos org_delta;
105
106 } AF_LatinAxisRec, *AF_LatinAxis;
107
108
109 typedef struct AF_LatinMetricsRec_
110 {
111 AF_StyleMetricsRec root;
112 FT_UInt units_per_em;
113 AF_LatinAxisRec axis[AF_DIMENSION_MAX];
114
115 } AF_LatinMetricsRec, *AF_LatinMetrics;
116
117
118 FT_LOCAL( FT_Error )
119 af_latin_metrics_init( AF_LatinMetrics metrics,
120 FT_Face face );
121
122 FT_LOCAL( void )
123 af_latin_metrics_scale( AF_LatinMetrics metrics,
124 AF_Scaler scaler );
125
126 FT_LOCAL( void )
127 af_latin_metrics_init_widths( AF_LatinMetrics metrics,
128 FT_Face face );
129
130 FT_LOCAL( void )
131 af_latin_metrics_check_digits( AF_LatinMetrics metrics,
132 FT_Face face );
133
134
135 /*************************************************************************/
136 /*************************************************************************/
137 /***** *****/
138 /***** L A T I N G L Y P H A N A L Y S I S *****/
139 /***** *****/
140 /*************************************************************************/
141 /*************************************************************************/
142
143 #define AF_LATIN_HINTS_HORZ_SNAP ( 1U << 0 ) /* stem width snapping */
144 #define AF_LATIN_HINTS_VERT_SNAP ( 1U << 1 ) /* stem height snapping */
145 #define AF_LATIN_HINTS_STEM_ADJUST ( 1U << 2 ) /* stem width/height */
146 /* adjustment */
147 #define AF_LATIN_HINTS_MONO ( 1U << 3 ) /* monochrome rendering */
148
149
150 #define AF_LATIN_HINTS_DO_HORZ_SNAP( h ) \
151 AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP )
152
153 #define AF_LATIN_HINTS_DO_VERT_SNAP( h ) \
154 AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP )
155
156 #define AF_LATIN_HINTS_DO_STEM_ADJUST( h ) \
157 AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST )
158
159 #define AF_LATIN_HINTS_DO_MONO( h ) \
160 AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO )
161
162
163 /*
164 * The next functions shouldn't normally be exported. However, other
165 * writing systems might like to use these functions as-is.
166 */
167 FT_LOCAL( FT_Error )
168 af_latin_hints_compute_segments( AF_GlyphHints hints,
169 AF_Dimension dim );
170
171 FT_LOCAL( void )
172 af_latin_hints_link_segments( AF_GlyphHints hints,
173 FT_UInt width_count,
174 AF_WidthRec* widths,
175 AF_Dimension dim );
176
177 FT_LOCAL( FT_Error )
178 af_latin_hints_compute_edges( AF_GlyphHints hints,
179 AF_Dimension dim );
180
181 FT_LOCAL( FT_Error )
182 af_latin_hints_detect_features( AF_GlyphHints hints,
183 FT_UInt width_count,
184 AF_WidthRec* widths,
185 AF_Dimension dim );
186
187 /* */
188
189 FT_END_HEADER
190
191 #endif /* AFLATIN_H_ */
192
193
194 /* END */