1 | /***************************************************************************/ |
2 | /* */ |
3 | /* pshglob.h */ |
4 | /* */ |
5 | /* PostScript hinter global hinting management. */ |
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 | #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( void ) |
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 */ |
197 | |