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
27FT_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
190FT_END_HEADER
191
192
193#endif /* __PSHGLOB_H__ */
194
195
196/* END */
197