OLD | NEW |
| (Empty) |
1 /***************************************************************************/ | |
2 /* */ | |
3 /* pshrec.h */ | |
4 /* */ | |
5 /* Postscript (Type1/Type2) hints recorder (specification). */ | |
6 /* */ | |
7 /* Copyright 2001, 2002, 2003, 2006, 2008 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 "../../include/ft2build.h" | |
36 #include "../../include/freetype/internal/pshints.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 typedef enum PS_Hint_Flags_ | |
65 { | |
66 PS_HINT_FLAG_GHOST = 1, | |
67 PS_HINT_FLAG_BOTTOM = 2 | |
68 | |
69 } PS_Hint_Flags; | |
70 | |
71 | |
72 /* hint descriptor */ | |
73 typedef struct PS_HintRec_ | |
74 { | |
75 FT_Int pos; | |
76 FT_Int len; | |
77 FT_UInt flags; | |
78 | |
79 } PS_HintRec; | |
80 | |
81 | |
82 #define ps_hint_is_active( x ) ( (x)->flags & PS_HINT_FLAG_ACTIVE ) | |
83 #define ps_hint_is_ghost( x ) ( (x)->flags & PS_HINT_FLAG_GHOST ) | |
84 #define ps_hint_is_bottom( x ) ( (x)->flags & PS_HINT_FLAG_BOTTOM ) | |
85 | |
86 | |
87 /* hints table descriptor */ | |
88 typedef struct PS_Hint_TableRec_ | |
89 { | |
90 FT_UInt num_hints; | |
91 FT_UInt max_hints; | |
92 PS_Hint hints; | |
93 | |
94 } PS_Hint_TableRec, *PS_Hint_Table; | |
95 | |
96 | |
97 /* hint and counter mask descriptor */ | |
98 typedef struct PS_MaskRec_ | |
99 { | |
100 FT_UInt num_bits; | |
101 FT_UInt max_bits; | |
102 FT_Byte* bytes; | |
103 FT_UInt end_point; | |
104 | |
105 } PS_MaskRec, *PS_Mask; | |
106 | |
107 | |
108 /* masks and counters table descriptor */ | |
109 typedef struct PS_Mask_TableRec_ | |
110 { | |
111 FT_UInt num_masks; | |
112 FT_UInt max_masks; | |
113 PS_Mask masks; | |
114 | |
115 } PS_Mask_TableRec, *PS_Mask_Table; | |
116 | |
117 | |
118 /* dimension-specific hints descriptor */ | |
119 typedef struct PS_DimensionRec_ | |
120 { | |
121 PS_Hint_TableRec hints; | |
122 PS_Mask_TableRec masks; | |
123 PS_Mask_TableRec counters; | |
124 | |
125 } PS_DimensionRec, *PS_Dimension; | |
126 | |
127 | |
128 /* glyph hints descriptor */ | |
129 /* dimension 0 => X coordinates + vertical hints/stems */ | |
130 /* dimension 1 => Y coordinates + horizontal hints/stems */ | |
131 typedef struct PS_HintsRec_ | |
132 { | |
133 FT_Memory memory; | |
134 FT_Error error; | |
135 FT_UInt32 magic; | |
136 PS_Hint_Type hint_type; | |
137 PS_DimensionRec dimension[2]; | |
138 | |
139 } PS_HintsRec, *PS_Hints; | |
140 | |
141 /* */ | |
142 | |
143 /* initialize hints recorder */ | |
144 FT_LOCAL( FT_Error ) | |
145 ps_hints_init( PS_Hints hints, | |
146 FT_Memory memory ); | |
147 | |
148 /* finalize hints recorder */ | |
149 FT_LOCAL( void ) | |
150 ps_hints_done( PS_Hints hints ); | |
151 | |
152 /* initialize Type1 hints recorder interface */ | |
153 FT_LOCAL( void ) | |
154 t1_hints_funcs_init( T1_Hints_FuncsRec* funcs ); | |
155 | |
156 /* initialize Type2 hints recorder interface */ | |
157 FT_LOCAL( void ) | |
158 t2_hints_funcs_init( T2_Hints_FuncsRec* funcs ); | |
159 | |
160 | |
161 #ifdef DEBUG_HINTER | |
162 extern PS_Hints ps_debug_hints; | |
163 extern int ps_debug_no_horz_hints; | |
164 extern int ps_debug_no_vert_hints; | |
165 #endif | |
166 | |
167 /* */ | |
168 | |
169 | |
170 FT_END_HEADER | |
171 | |
172 | |
173 #endif /* __PS_HINTER_RECORD_H__ */ | |
174 | |
175 | |
176 /* END */ | |
OLD | NEW |