|
1 /***************************************************************************/ |
|
2 /* */ |
|
3 /* pshglob.h */ |
|
4 /* */ |
|
5 /* PostScript hinter global hinting management. */ |
|
6 /* */ |
|
7 /* Copyright 2001, 2002, 2003 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 #ifndef __PSHGLOB_H__ |
|
20 #define __PSHGLOB_H__ |
|
21 |
|
22 |
|
23 #include FT_FREETYPE_H |
|
24 #include FT_INTERNAL_POSTSCRIPT_HINTS_H |
|
25 |
|
26 |
|
27 FT_BEGIN_HEADER |
|
28 |
|
29 |
|
30 /*************************************************************************/ |
|
31 /*************************************************************************/ |
|
32 /***** *****/ |
|
33 /***** GLOBAL HINTS INTERNALS *****/ |
|
34 /***** *****/ |
|
35 /*************************************************************************/ |
|
36 /*************************************************************************/ |
|
37 |
|
38 |
|
39 /*************************************************************************/ |
|
40 /* */ |
|
41 /* @constant: */ |
|
42 /* PS_GLOBALS_MAX_BLUE_ZONES */ |
|
43 /* */ |
|
44 /* @description: */ |
|
45 /* The maximum number of blue zones in a font global hints structure. */ |
|
46 /* See @PS_Globals_BluesRec. */ |
|
47 /* */ |
|
48 #define PS_GLOBALS_MAX_BLUE_ZONES 16 |
|
49 |
|
50 |
|
51 /*************************************************************************/ |
|
52 /* */ |
|
53 /* @constant: */ |
|
54 /* PS_GLOBALS_MAX_STD_WIDTHS */ |
|
55 /* */ |
|
56 /* @description: */ |
|
57 /* The maximum number of standard and snap widths in either the */ |
|
58 /* horizontal or vertical direction. See @PS_Globals_WidthsRec. */ |
|
59 /* */ |
|
60 #define PS_GLOBALS_MAX_STD_WIDTHS 16 |
|
61 |
|
62 |
|
63 /* standard and snap width */ |
|
64 typedef struct PSH_WidthRec_ |
|
65 { |
|
66 FT_Int org; |
|
67 FT_Pos cur; |
|
68 FT_Pos fit; |
|
69 |
|
70 } PSH_WidthRec, *PSH_Width; |
|
71 |
|
72 |
|
73 /* standard and snap widths table */ |
|
74 typedef struct PSH_WidthsRec_ |
|
75 { |
|
76 FT_UInt count; |
|
77 PSH_WidthRec widths[PS_GLOBALS_MAX_STD_WIDTHS]; |
|
78 |
|
79 } PSH_WidthsRec, *PSH_Widths; |
|
80 |
|
81 |
|
82 typedef struct PSH_DimensionRec_ |
|
83 { |
|
84 PSH_WidthsRec stdw; |
|
85 FT_Fixed scale_mult; |
|
86 FT_Fixed scale_delta; |
|
87 |
|
88 } PSH_DimensionRec, *PSH_Dimension; |
|
89 |
|
90 |
|
91 /* blue zone descriptor */ |
|
92 typedef struct PSH_Blue_ZoneRec_ |
|
93 { |
|
94 FT_Int org_ref; |
|
95 FT_Int org_delta; |
|
96 FT_Int org_top; |
|
97 FT_Int org_bottom; |
|
98 |
|
99 FT_Pos cur_ref; |
|
100 FT_Pos cur_delta; |
|
101 FT_Pos cur_bottom; |
|
102 FT_Pos cur_top; |
|
103 |
|
104 } PSH_Blue_ZoneRec, *PSH_Blue_Zone; |
|
105 |
|
106 |
|
107 typedef struct PSH_Blue_TableRec_ |
|
108 { |
|
109 FT_UInt count; |
|
110 PSH_Blue_ZoneRec zones[PS_GLOBALS_MAX_BLUE_ZONES]; |
|
111 |
|
112 } PSH_Blue_TableRec, *PSH_Blue_Table; |
|
113 |
|
114 |
|
115 /* blue zones table */ |
|
116 typedef struct PSH_BluesRec_ |
|
117 { |
|
118 PSH_Blue_TableRec normal_top; |
|
119 PSH_Blue_TableRec normal_bottom; |
|
120 PSH_Blue_TableRec family_top; |
|
121 PSH_Blue_TableRec family_bottom; |
|
122 |
|
123 FT_Fixed blue_scale; |
|
124 FT_Int blue_shift; |
|
125 FT_Int blue_threshold; |
|
126 FT_Int blue_fuzz; |
|
127 FT_Bool no_overshoots; |
|
128 |
|
129 } PSH_BluesRec, *PSH_Blues; |
|
130 |
|
131 |
|
132 /* font globals. */ |
|
133 /* dimension 0 => X coordinates + vertical hints/stems */ |
|
134 /* dimension 1 => Y coordinates + horizontal hints/stems */ |
|
135 typedef struct PSH_GlobalsRec_ |
|
136 { |
|
137 FT_Memory memory; |
|
138 PSH_DimensionRec dimension[2]; |
|
139 PSH_BluesRec blues; |
|
140 |
|
141 } PSH_GlobalsRec; |
|
142 |
|
143 |
|
144 #define PSH_BLUE_ALIGN_NONE 0 |
|
145 #define PSH_BLUE_ALIGN_TOP 1 |
|
146 #define PSH_BLUE_ALIGN_BOT 2 |
|
147 |
|
148 |
|
149 typedef struct PSH_AlignmentRec_ |
|
150 { |
|
151 int align; |
|
152 FT_Pos align_top; |
|
153 FT_Pos align_bot; |
|
154 |
|
155 } PSH_AlignmentRec, *PSH_Alignment; |
|
156 |
|
157 |
|
158 FT_LOCAL( void ) |
|
159 psh_globals_funcs_init( PSH_Globals_FuncsRec* funcs ); |
|
160 |
|
161 |
|
162 #if 0 |
|
163 /* snap a stem width to fitter coordinates. `org_width' is in font */ |
|
164 /* units. The result is in device pixels (26.6 format). */ |
|
165 FT_LOCAL( FT_Pos ) |
|
166 psh_dimension_snap_width( PSH_Dimension dimension, |
|
167 FT_Int org_width ); |
|
168 #endif |
|
169 |
|
170 FT_LOCAL( FT_Error ) |
|
171 psh_globals_set_scale( PSH_Globals globals, |
|
172 FT_Fixed x_scale, |
|
173 FT_Fixed y_scale, |
|
174 FT_Fixed x_delta, |
|
175 FT_Fixed y_delta ); |
|
176 |
|
177 /* snap a stem to one or two blue zones */ |
|
178 FT_LOCAL( void ) |
|
179 psh_blues_snap_stem( PSH_Blues blues, |
|
180 FT_Int stem_top, |
|
181 FT_Int stem_bot, |
|
182 PSH_Alignment alignment ); |
|
183 /* */ |
|
184 |
|
185 #ifdef DEBUG_HINTER |
|
186 extern PSH_Globals ps_debug_globals; |
|
187 #endif |
|
188 |
|
189 |
|
190 FT_END_HEADER |
|
191 |
|
192 |
|
193 #endif /* __PSHGLOB_H__ */ |
|
194 |
|
195 |
|
196 /* END */ |