xref: /inferno-os/libfreetype/pshalgo1.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth /***************************************************************************/
2*37da2899SCharles.Forsyth /*                                                                         */
3*37da2899SCharles.Forsyth /*  pshalgo1.h                                                             */
4*37da2899SCharles.Forsyth /*                                                                         */
5*37da2899SCharles.Forsyth /*    PostScript hinting algorithm 1 (specification).                      */
6*37da2899SCharles.Forsyth /*                                                                         */
7*37da2899SCharles.Forsyth /*  Copyright 2001 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 __PSHALGO1_H__
20*37da2899SCharles.Forsyth #define __PSHALGO1_H__
21*37da2899SCharles.Forsyth 
22*37da2899SCharles.Forsyth #include "pshrec.h"
23*37da2899SCharles.Forsyth 
24*37da2899SCharles.Forsyth FT_BEGIN_HEADER
25*37da2899SCharles.Forsyth 
26*37da2899SCharles.Forsyth   typedef struct PSH1_HintRec_*  PSH1_Hint;
27*37da2899SCharles.Forsyth 
28*37da2899SCharles.Forsyth   typedef enum
29*37da2899SCharles.Forsyth   {
30*37da2899SCharles.Forsyth     PSH1_HINT_FLAG_GHOST  = PS_HINT_FLAG_GHOST,
31*37da2899SCharles.Forsyth     PSH1_HINT_FLAG_BOTTOM = PS_HINT_FLAG_BOTTOM,
32*37da2899SCharles.Forsyth     PSH1_HINT_FLAG_ACTIVE = 4
33*37da2899SCharles.Forsyth 
34*37da2899SCharles.Forsyth   } PSH1_Hint_Flags;
35*37da2899SCharles.Forsyth 
36*37da2899SCharles.Forsyth #define psh1_hint_is_active( x )                          \
37*37da2899SCharles.Forsyth           ( ( (x)->flags & PSH1_HINT_FLAG_ACTIVE ) != 0 )
38*37da2899SCharles.Forsyth #define psh1_hint_is_ghost( x )                          \
39*37da2899SCharles.Forsyth           ( ( (x)->flags & PSH1_HINT_FLAG_GHOST ) != 0 )
40*37da2899SCharles.Forsyth 
41*37da2899SCharles.Forsyth #define psh1_hint_activate( x )    (x)->flags |= PSH1_HINT_FLAG_ACTIVE
42*37da2899SCharles.Forsyth #define psh1_hint_deactivate( x )  (x)->flags &= ~PSH1_HINT_FLAG_ACTIVE
43*37da2899SCharles.Forsyth 
44*37da2899SCharles.Forsyth   typedef struct  PSH1_HintRec_
45*37da2899SCharles.Forsyth   {
46*37da2899SCharles.Forsyth     FT_Int     org_pos;
47*37da2899SCharles.Forsyth     FT_Int     org_len;
48*37da2899SCharles.Forsyth     FT_Pos     cur_pos;
49*37da2899SCharles.Forsyth     FT_Pos     cur_len;
50*37da2899SCharles.Forsyth 
51*37da2899SCharles.Forsyth     FT_UInt    flags;
52*37da2899SCharles.Forsyth 
53*37da2899SCharles.Forsyth     PSH1_Hint  parent;
54*37da2899SCharles.Forsyth     FT_Int     order;
55*37da2899SCharles.Forsyth 
56*37da2899SCharles.Forsyth   } PSH1_HintRec;
57*37da2899SCharles.Forsyth 
58*37da2899SCharles.Forsyth 
59*37da2899SCharles.Forsyth   /* this is an interpolation zone used for strong points;  */
60*37da2899SCharles.Forsyth   /* weak points are interpolated according to their strong */
61*37da2899SCharles.Forsyth   /* neighbours                                             */
62*37da2899SCharles.Forsyth   typedef struct  PSH1_ZoneRec_
63*37da2899SCharles.Forsyth   {
64*37da2899SCharles.Forsyth     FT_Fixed  scale;
65*37da2899SCharles.Forsyth     FT_Fixed  delta;
66*37da2899SCharles.Forsyth     FT_Pos    min;
67*37da2899SCharles.Forsyth     FT_Pos    max;
68*37da2899SCharles.Forsyth 
69*37da2899SCharles.Forsyth   } PSH1_ZoneRec, *PSH1_Zone;
70*37da2899SCharles.Forsyth 
71*37da2899SCharles.Forsyth 
72*37da2899SCharles.Forsyth   typedef struct  PSH1_Hint_TableRec_
73*37da2899SCharles.Forsyth   {
74*37da2899SCharles.Forsyth     FT_UInt        max_hints;
75*37da2899SCharles.Forsyth     FT_UInt        num_hints;
76*37da2899SCharles.Forsyth     PSH1_Hint      hints;
77*37da2899SCharles.Forsyth     PSH1_Hint*     sort;
78*37da2899SCharles.Forsyth     PSH1_Hint*     sort_global;
79*37da2899SCharles.Forsyth     FT_UInt        num_zones;
80*37da2899SCharles.Forsyth     PSH1_Zone      zones;
81*37da2899SCharles.Forsyth     PSH1_Zone      zone;
82*37da2899SCharles.Forsyth     PS_Mask_Table  hint_masks;
83*37da2899SCharles.Forsyth     PS_Mask_Table  counter_masks;
84*37da2899SCharles.Forsyth 
85*37da2899SCharles.Forsyth   } PSH1_Hint_TableRec, *PSH1_Hint_Table;
86*37da2899SCharles.Forsyth 
87*37da2899SCharles.Forsyth 
88*37da2899SCharles.Forsyth   extern FT_Error
89*37da2899SCharles.Forsyth   ps1_hints_apply( PS_Hints        ps_hints,
90*37da2899SCharles.Forsyth                    FT_Outline*     outline,
91*37da2899SCharles.Forsyth                    PSH_Globals     globals,
92*37da2899SCharles.Forsyth                    FT_Render_Mode  hint_mode );
93*37da2899SCharles.Forsyth 
94*37da2899SCharles.Forsyth 
95*37da2899SCharles.Forsyth #ifdef DEBUG_HINTER
96*37da2899SCharles.Forsyth   extern  PSH1_Hint_Table  ps1_debug_hint_table;
97*37da2899SCharles.Forsyth 
98*37da2899SCharles.Forsyth   typedef void
99*37da2899SCharles.Forsyth   (*PSH1_HintFunc)( PSH1_Hint  hint,
100*37da2899SCharles.Forsyth                     FT_Bool    vertical );
101*37da2899SCharles.Forsyth 
102*37da2899SCharles.Forsyth   extern PSH1_HintFunc  ps1_debug_hint_func;
103*37da2899SCharles.Forsyth #endif
104*37da2899SCharles.Forsyth 
105*37da2899SCharles.Forsyth FT_END_HEADER
106*37da2899SCharles.Forsyth 
107*37da2899SCharles.Forsyth #endif /* __PSHALGO1_H__ */
108*37da2899SCharles.Forsyth 
109*37da2899SCharles.Forsyth 
110*37da2899SCharles.Forsyth /* END */
111