• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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