[FREETYPE] Update to v2.9.0 and use this as a chance to slim down our lib a bit....
[reactos.git] / sdk / lib / 3rdparty / freetype / src / pshinter / pshrec.h
1 /***************************************************************************/
2 /* */
3 /* pshrec.h */
4 /* */
5 /* Postscript (Type1/Type2) hints recorder (specification). */
6 /* */
7 /* Copyright 2001-2018 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
9 /* */
10 /* This file is part of the FreeType project, and may only be used, */
11 /* modified, and distributed under the terms of the FreeType project */
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
13 /* this file you indicate that you have read the license and */
14 /* understand and accept it fully. */
15 /* */
16 /***************************************************************************/
17
18
19 /**************************************************************************/
20 /* */
21 /* The functions defined here are called from the Type 1, CID and CFF */
22 /* font drivers to record the hints of a given character/glyph. */
23 /* */
24 /* The hints are recorded in a unified format, and are later processed */
25 /* by the `optimizer' and `fitter' to adjust the outlines to the pixel */
26 /* grid. */
27 /* */
28 /**************************************************************************/
29
30
31 #ifndef PSHREC_H_
32 #define PSHREC_H_
33
34
35 #include <ft2build.h>
36 #include FT_INTERNAL_POSTSCRIPT_HINTS_H
37 #include "pshglob.h"
38
39
40 FT_BEGIN_HEADER
41
42
43 /*************************************************************************/
44 /*************************************************************************/
45 /***** *****/
46 /***** GLYPH HINTS RECORDER INTERNALS *****/
47 /***** *****/
48 /*************************************************************************/
49 /*************************************************************************/
50
51 /* handle to hint record */
52 typedef struct PS_HintRec_* PS_Hint;
53
54 /* hint types */
55 typedef enum PS_Hint_Type_
56 {
57 PS_HINT_TYPE_1 = 1,
58 PS_HINT_TYPE_2 = 2
59
60 } PS_Hint_Type;
61
62
63 /* hint flags */
64 #define PS_HINT_FLAG_GHOST 1U
65 #define PS_HINT_FLAG_BOTTOM 2U
66
67
68 /* hint descriptor */
69 typedef struct PS_HintRec_
70 {
71 FT_Int pos;
72 FT_Int len;
73 FT_UInt flags;
74
75 } PS_HintRec;
76
77
78 #define ps_hint_is_active( x ) ( (x)->flags & PS_HINT_FLAG_ACTIVE )
79 #define ps_hint_is_ghost( x ) ( (x)->flags & PS_HINT_FLAG_GHOST )
80 #define ps_hint_is_bottom( x ) ( (x)->flags & PS_HINT_FLAG_BOTTOM )
81
82
83 /* hints table descriptor */
84 typedef struct PS_Hint_TableRec_
85 {
86 FT_UInt num_hints;
87 FT_UInt max_hints;
88 PS_Hint hints;
89
90 } PS_Hint_TableRec, *PS_Hint_Table;
91
92
93 /* hint and counter mask descriptor */
94 typedef struct PS_MaskRec_
95 {
96 FT_UInt num_bits;
97 FT_UInt max_bits;
98 FT_Byte* bytes;
99 FT_UInt end_point;
100
101 } PS_MaskRec, *PS_Mask;
102
103
104 /* masks and counters table descriptor */
105 typedef struct PS_Mask_TableRec_
106 {
107 FT_UInt num_masks;
108 FT_UInt max_masks;
109 PS_Mask masks;
110
111 } PS_Mask_TableRec, *PS_Mask_Table;
112
113
114 /* dimension-specific hints descriptor */
115 typedef struct PS_DimensionRec_
116 {
117 PS_Hint_TableRec hints;
118 PS_Mask_TableRec masks;
119 PS_Mask_TableRec counters;
120
121 } PS_DimensionRec, *PS_Dimension;
122
123
124 /* glyph hints descriptor */
125 /* dimension 0 => X coordinates + vertical hints/stems */
126 /* dimension 1 => Y coordinates + horizontal hints/stems */
127 typedef struct PS_HintsRec_
128 {
129 FT_Memory memory;
130 FT_Error error;
131 FT_UInt32 magic;
132 PS_Hint_Type hint_type;
133 PS_DimensionRec dimension[2];
134
135 } PS_HintsRec, *PS_Hints;
136
137 /* */
138
139 /* initialize hints recorder */
140 FT_LOCAL( void )
141 ps_hints_init( PS_Hints hints,
142 FT_Memory memory );
143
144 /* finalize hints recorder */
145 FT_LOCAL( void )
146 ps_hints_done( PS_Hints hints );
147
148 /* initialize Type1 hints recorder interface */
149 FT_LOCAL( void )
150 t1_hints_funcs_init( T1_Hints_FuncsRec* funcs );
151
152 /* initialize Type2 hints recorder interface */
153 FT_LOCAL( void )
154 t2_hints_funcs_init( T2_Hints_FuncsRec* funcs );
155
156
157 #ifdef DEBUG_HINTER
158 extern PS_Hints ps_debug_hints;
159 extern int ps_debug_no_horz_hints;
160 extern int ps_debug_no_vert_hints;
161 #endif
162
163 /* */
164
165
166 FT_END_HEADER
167
168
169 #endif /* PSHREC_H_ */
170
171
172 /* END */