:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / subsys / win32k / freetype / src / type1 / t1gload.h
1 /***************************************************************************/
2 /*                                                                         */
3 /*  t1gload.h                                                              */
4 /*                                                                         */
5 /*    Type 1 Glyph Loader (specification).                                 */
6 /*                                                                         */
7 /*  Copyright 1996-2000 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 T1GLOAD_H
20 #define T1GLOAD_H
21
22
23 #ifdef FT_FLAT_COMPILE
24
25 #include "t1objs.h"
26
27 #else
28
29 #include <freetype/src/type1/t1objs.h>
30
31 #endif
32
33
34 #ifdef __cplusplus
35   extern "C" {
36 #endif
37
38
39   typedef struct T1_Builder_  T1_Builder;
40
41   typedef FT_Error  (*T1_Builder_EndChar)( T1_Builder*  loader );
42
43   typedef FT_Error  (*T1_Builder_Sbw)( T1_Builder*  loader,
44                                        FT_Pos       sbx,
45                                        FT_Pos       sby,
46                                        FT_Pos       wx,
47                                        FT_Pos       wy );
48
49   typedef FT_Error  (*T1_Builder_ClosePath)( T1_Builder*  loader );
50
51   typedef FT_Error  (*T1_Builder_RLineTo)( T1_Builder*  loader,
52                                            FT_Pos       dx,
53                                            FT_Pos       dy );
54
55   typedef FT_Error  (*T1_Builder_RMoveTo)( T1_Builder*  loader,
56                                            FT_Pos       dx,
57                                            FT_Pos       dy );
58
59   typedef FT_Error  (*T1_Builder_RCurveTo)( T1_Builder*  loader,
60                                             FT_Pos       dx1,
61                                             FT_Pos       dy1,
62                                             FT_Pos       dx2,
63                                             FT_Pos       dy2,
64                                             FT_Pos       dx3,
65                                             FT_Pos       dy3 );
66
67
68   /*************************************************************************/
69   /*                                                                       */
70   /* <Structure>                                                           */
71   /*    T1_Builder_Funcs                                                   */
72   /*                                                                       */
73   /* <Description>                                                         */
74   /*    A structure to store the address of various functions used by a    */
75   /*    glyph builder to implement the outline's `path construction'.      */
76   /*                                                                       */
77   typedef struct  T1_Builder_Funcs_
78   {
79     T1_Builder_EndChar    end_char;
80     T1_Builder_Sbw        set_bearing_point;
81     T1_Builder_ClosePath  close_path;
82     T1_Builder_RLineTo    rline_to;
83     T1_Builder_RMoveTo    rmove_to;
84     T1_Builder_RCurveTo   rcurve_to;
85
86   } T1_Builder_Funcs;
87
88
89   /*************************************************************************/
90   /*                                                                       */
91   /* <Structure>                                                           */
92   /*    T1_Builder                                                         */
93   /*                                                                       */
94   /* <Description>                                                         */
95   /*    A structure used during glyph loading to store its outline.        */
96   /*                                                                       */
97   /* <Fields>                                                              */
98   /*    memory       :: The current memory object.                         */
99   /*                                                                       */
100   /*    face         :: The current face object.                           */
101   /*                                                                       */
102   /*    size         :: The current size object.                           */
103   /*                                                                       */
104   /*    glyph        :: The current glyph slot.                            */
105   /*                                                                       */
106   /*    loader       :: The current glyph loader.                          */
107   /*                                                                       */
108   /*    current      :: The current glyph outline.                         */
109   /*                                                                       */
110   /*    base         :: The base glyph outline.                            */
111   /*                                                                       */
112   /*    last         :: The last point position.                           */
113   /*                                                                       */
114   /*    scale_x      :: The horizontal scale (FUnits to sub-pixels).       */
115   /*                                                                       */
116   /*    scale_y      :: The vertical scale (FUnits to sub-pixels).         */
117   /*                                                                       */
118   /*    pos_x        :: The horizontal translation (for composite glyphs). */
119   /*                                                                       */
120   /*    pos_y        :: The vertical translation (for composite glyphs).   */
121   /*                                                                       */
122   /*    left_bearing :: The left side bearing point.                       */
123   /*                                                                       */
124   /*    advance      :: The horizontal advance vector.                     */
125   /*                                                                       */
126   /*    no_recurse   ::                                                    */
127   /*                                                                       */
128   /*    bbox         :: The glyph's bounding box.                          */
129   /*                                                                       */
130   /*    path_begun   :: A flag which indicates that a new path has begun.  */
131   /*                                                                       */
132   /*    load_points  :: A flag which indicates, if not set, that no points */
133   /*                    are loaded.                                        */
134   /*                                                                       */
135   /*    pass         :: The pass number for multi-pass hinters.            */
136   /*                                                                       */
137   /*    hint_point   :: The index of the next point to hint.               */
138   /*                                                                       */
139   /*    funcs        :: A table of builder functions used to perform the   */
140   /*                    outline's path construction.                       */
141   /*                                                                       */
142   struct  T1_Builder_
143   {
144     FT_Memory        memory;
145     T1_Face          face;
146     T1_Size          size;
147     T1_GlyphSlot     glyph;
148     FT_GlyphLoader*  loader;
149
150     FT_Outline*      current;       /* the current glyph outline   */
151     FT_Outline*      base;          /* the composite glyph outline */
152
153     FT_Vector        last;
154
155     FT_Fixed         scale_x;
156     FT_Fixed         scale_y;
157
158     FT_Pos           pos_x;
159     FT_Pos           pos_y;
160
161     FT_Vector        left_bearing;
162     FT_Vector        advance;
163     FT_Bool          no_recurse;
164
165     FT_BBox          bbox;          /* bounding box */
166     FT_Bool          path_begun;
167     FT_Bool          load_points;
168
169     FT_Int           pass;
170     FT_Int           hint_point;
171
172     /* path construction function interface */
173     T1_Builder_Funcs  funcs;
174   };
175
176
177   typedef FT_Error  (*T1_Hinter_ChangeHints)( T1_Builder*  builder );
178
179   typedef FT_Error  (*T1_Hinter_DotSection)( T1_Builder*  builder );
180
181   typedef FT_Error  (*T1_Hinter_Stem)( T1_Builder*  builder,
182                                        FT_Pos       pos,
183                                        FT_Pos       width,
184                                        FT_Bool      vertical );
185
186   typedef FT_Error  (*T1_Hinter_Stem3)( T1_Builder*  builder,
187                                         FT_Pos       pos0,
188                                         FT_Pos       width0,
189                                         FT_Pos       pos1,
190                                         FT_Pos       width1,
191                                         FT_Pos       pos2,
192                                         FT_Pos       width2,
193                                         FT_Bool      vertical );
194
195
196   /*************************************************************************/
197   /*                                                                       */
198   /* <Structure>                                                           */
199   /*    T1_Hinter_Funcs                                                    */
200   /*                                                                       */
201   /* <Description>                                                         */
202   /*    A structure to store the address of various functions used by a    */
203   /*    Type 1 hinter to perform outline hinting.                          */
204   /*                                                                       */
205   typedef struct  T1_Hinter_Func_
206   {
207     T1_Hinter_ChangeHints  change_hints;
208     T1_Hinter_DotSection   dot_section;
209     T1_Hinter_Stem         stem;
210     T1_Hinter_Stem3        stem3;
211
212   } T1_Hinter_Funcs;
213
214
215   typedef enum  T1_Operator_
216   {
217     op_none = 0,
218     op_endchar,
219     op_hsbw,
220     op_seac,
221     op_sbw,
222     op_closepath,
223     op_hlineto,
224     op_hmoveto,
225     op_hvcurveto,
226     op_rlineto,
227     op_rmoveto,
228     op_rrcurveto,
229     op_vhcurveto,
230     op_vlineto,
231     op_vmoveto,
232     op_dotsection,
233     op_hstem,
234     op_hstem3,
235     op_vstem,
236     op_vstem3,
237     op_div,
238     op_callothersubr,
239     op_callsubr,
240     op_pop,
241     op_return,
242     op_setcurrentpoint,
243
244     op_max    /* never remove this one */
245
246   } T1_Operator;
247
248
249   /* execution context charstring zone */
250   typedef struct  T1_Decoder_Zone_
251   {
252     FT_Byte*  base;
253     FT_Byte*  limit;
254     FT_Byte*  cursor;
255
256   } T1_Decoder_Zone;
257
258
259   typedef struct  T1_Decoder_
260   {
261     T1_Builder        builder;
262     T1_Hinter_Funcs   hinter;
263
264     FT_Int            stack[T1_MAX_CHARSTRINGS_OPERANDS];
265     FT_Int*           top;
266
267     T1_Decoder_Zone   zones[T1_MAX_SUBRS_CALLS + 1];
268     T1_Decoder_Zone*  zone;
269
270     FT_Int            flex_state;
271     FT_Int            num_flex_vectors;
272     FT_Vector         flex_vectors[7];
273
274   } T1_Decoder;
275
276
277   LOCAL_DEF
278   void  T1_Init_Builder( T1_Builder*              builder,
279                          T1_Face                  face,
280                          T1_Size                  size,
281                          T1_GlyphSlot             glyph,
282                          const T1_Builder_Funcs*  funcs );
283
284   LOCAL_DEF
285   void T1_Done_Builder( T1_Builder*  builder );
286
287   LOCAL_DEF
288   void  T1_Init_Decoder( T1_Decoder*             decoder,
289                          const T1_Hinter_Funcs*  funcs );
290
291   LOCAL_DEF
292   FT_Error  T1_Compute_Max_Advance( T1_Face  face,
293                                     FT_Int*  max_advance );
294
295   LOCAL_DEF
296   FT_Error  T1_Parse_CharStrings( T1_Decoder*  decoder,
297                                   FT_Byte*     charstring_base,
298                                   FT_Int       charstring_len,
299                                   FT_Int       num_subrs,
300                                   FT_Byte**    subrs_base,
301                                   FT_Int*      subrs_len );
302
303   LOCAL_DEF
304   FT_Error  T1_Add_Points( T1_Builder*  builder,
305                            FT_Int       num_points );
306
307   LOCAL_DEF
308   FT_Error  T1_Add_Contours( T1_Builder*  builder,
309                              FT_Int       num_contours );
310
311   LOCAL_DEF
312   FT_Error  T1_Load_Glyph( T1_GlyphSlot  glyph,
313                            T1_Size       size,
314                            FT_Int        glyph_index,
315                            FT_Int        load_flags );
316
317
318 #ifdef __cplusplus
319   }
320 #endif
321
322
323 #endif /* T1GLOAD_H */
324
325
326 /* END */