1 | /**************************************************************************** |
2 | * |
3 | * pshglob.h |
4 | * |
5 | * PostScript hinter global hinting management. |
6 | * |
7 | * Copyright (C) 2001-2019 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 | |