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