source: trunk/poppler/freetype-2.1.10/include/freetype/fttypes.h @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 16 years ago

First import

File size: 33.7 KB
Line 
1/***************************************************************************/
2/*                                                                         */
3/*  fttypes.h                                                              */
4/*                                                                         */
5/*    FreeType simple types definitions (specification only).              */
6/*                                                                         */
7/*  Copyright 1996-2001, 2002, 2004 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 __FTTYPES_H__
20#define __FTTYPES_H__
21
22
23#include <ft2build.h>
24#include FT_CONFIG_CONFIG_H
25#include FT_SYSTEM_H
26#include FT_IMAGE_H
27
28#include <stddef.h>
29
30
31FT_BEGIN_HEADER
32
33
34  /*************************************************************************/
35  /*                                                                       */
36  /* <Section>                                                             */
37  /*    basic_types                                                        */
38  /*                                                                       */
39  /* <Title>                                                               */
40  /*    Basic Data Types                                                   */
41  /*                                                                       */
42  /* <Abstract>                                                            */
43  /*    The basic data types defined by the library.                       */
44  /*                                                                       */
45  /* <Description>                                                         */
46  /*    This section contains the basic data types defined by FreeType 2,  */
47  /*    ranging from simple scalar types to bitmap descriptors.  More      */
48  /*    font-specific structures are defined in a different section.       */
49  /*                                                                       */
50  /* <Order>                                                               */
51  /*    FT_Byte                                                            */
52  /*    FT_Bytes                                                           */
53  /*    FT_Char                                                            */
54  /*    FT_Int                                                             */
55  /*    FT_UInt                                                            */
56  /*    FT_Short                                                           */
57  /*    FT_UShort                                                          */
58  /*    FT_Long                                                            */
59  /*    FT_ULong                                                           */
60  /*    FT_Bool                                                            */
61  /*    FT_Offset                                                          */
62  /*    FT_PtrDist                                                         */
63  /*    FT_String                                                          */
64  /*    FT_Tag                                                             */
65  /*    FT_Error                                                           */
66  /*    FT_Fixed                                                           */
67  /*    FT_Pointer                                                         */
68  /*    FT_Pos                                                             */
69  /*    FT_Vector                                                          */
70  /*    FT_BBox                                                            */
71  /*    FT_Matrix                                                          */
72  /*    FT_FWord                                                           */
73  /*    FT_UFWord                                                          */
74  /*    FT_F2Dot14                                                         */
75  /*    FT_UnitVector                                                      */
76  /*    FT_F26Dot6                                                         */
77  /*                                                                       */
78  /*                                                                       */
79  /*    FT_Generic                                                         */
80  /*    FT_Generic_Finalizer                                               */
81  /*                                                                       */
82  /*    FT_Bitmap                                                          */
83  /*    FT_Pixel_Mode                                                      */
84  /*    FT_Palette_Mode                                                    */
85  /*    FT_Glyph_Format                                                    */
86  /*    FT_IMAGE_TAG                                                       */
87  /*                                                                       */
88  /*************************************************************************/
89
90
91  /*************************************************************************/
92  /*                                                                       */
93  /* <Type>                                                                */
94  /*    FT_Bool                                                            */
95  /*                                                                       */
96  /* <Description>                                                         */
97  /*    A typedef of unsigned char, used for simple booleans.              */
98  /*                                                                       */
99  typedef unsigned char  FT_Bool;
100
101
102  /*************************************************************************/
103  /*                                                                       */
104  /* <Type>                                                                */
105  /*    FT_FWord                                                           */
106  /*                                                                       */
107  /* <Description>                                                         */
108  /*    A signed 16-bit integer used to store a distance in original font  */
109  /*    units.                                                             */
110  /*                                                                       */
111  typedef signed short  FT_FWord;   /* distance in FUnits */
112
113
114  /*************************************************************************/
115  /*                                                                       */
116  /* <Type>                                                                */
117  /*    FT_UFWord                                                          */
118  /*                                                                       */
119  /* <Description>                                                         */
120  /*    An unsigned 16-bit integer used to store a distance in original    */
121  /*    font units.                                                        */
122  /*                                                                       */
123  typedef unsigned short  FT_UFWord;  /* unsigned distance */
124
125
126  /*************************************************************************/
127  /*                                                                       */
128  /* <Type>                                                                */
129  /*    FT_Char                                                            */
130  /*                                                                       */
131  /* <Description>                                                         */
132  /*    A simple typedef for the _signed_ char type.                       */
133  /*                                                                       */
134  typedef signed char  FT_Char;
135
136
137  /*************************************************************************/
138  /*                                                                       */
139  /* <Type>                                                                */
140  /*    FT_Byte                                                            */
141  /*                                                                       */
142  /* <Description>                                                         */
143  /*    A simple typedef for the _unsigned_ char type.                     */
144  /*                                                                       */
145  typedef unsigned char  FT_Byte;
146
147
148  /*************************************************************************/
149  /*                                                                       */
150  /* <Type>                                                                */
151  /*    FT_Bytes                                                           */
152  /*                                                                       */
153  /* <Description>                                                         */
154  /*    A typedef for constant memory areas.                               */
155  /*                                                                       */
156  typedef const FT_Byte*  FT_Bytes;
157
158
159  /*************************************************************************/
160  /*                                                                       */
161  /* <Type>                                                                */
162  /*    FT_Tag                                                             */
163  /*                                                                       */
164  /* <Description>                                                         */
165  /*    A typedef for 32bit tags (as used in the SFNT format).             */
166  /*                                                                       */
167  typedef FT_UInt32  FT_Tag;
168
169
170  /*************************************************************************/
171  /*                                                                       */
172  /* <Type>                                                                */
173  /*    FT_String                                                          */
174  /*                                                                       */
175  /* <Description>                                                         */
176  /*    A simple typedef for the char type, usually used for strings.      */
177  /*                                                                       */
178  typedef char  FT_String;
179
180
181  /*************************************************************************/
182  /*                                                                       */
183  /* <Type>                                                                */
184  /*    FT_Short                                                           */
185  /*                                                                       */
186  /* <Description>                                                         */
187  /*    A typedef for signed short.                                        */
188  /*                                                                       */
189  typedef signed short  FT_Short;
190
191
192  /*************************************************************************/
193  /*                                                                       */
194  /* <Type>                                                                */
195  /*    FT_UShort                                                          */
196  /*                                                                       */
197  /* <Description>                                                         */
198  /*    A typedef for unsigned short.                                      */
199  /*                                                                       */
200  typedef unsigned short  FT_UShort;
201
202
203  /*************************************************************************/
204  /*                                                                       */
205  /* <Type>                                                                */
206  /*    FT_Int                                                             */
207  /*                                                                       */
208  /* <Description>                                                         */
209  /*    A typedef for the int type.                                        */
210  /*                                                                       */
211  typedef signed int  FT_Int;
212
213
214  /*************************************************************************/
215  /*                                                                       */
216  /* <Type>                                                                */
217  /*    FT_UInt                                                            */
218  /*                                                                       */
219  /* <Description>                                                         */
220  /*    A typedef for the unsigned int type.                               */
221  /*                                                                       */
222  typedef unsigned int  FT_UInt;
223
224
225  /*************************************************************************/
226  /*                                                                       */
227  /* <Type>                                                                */
228  /*    FT_Long                                                            */
229  /*                                                                       */
230  /* <Description>                                                         */
231  /*    A typedef for signed long.                                         */
232  /*                                                                       */
233  typedef signed long  FT_Long;
234
235
236  /*************************************************************************/
237  /*                                                                       */
238  /* <Type>                                                                */
239  /*    FT_ULong                                                           */
240  /*                                                                       */
241  /* <Description>                                                         */
242  /*    A typedef for unsigned long.                                       */
243  /*                                                                       */
244  typedef unsigned long  FT_ULong;
245
246
247  /*************************************************************************/
248  /*                                                                       */
249  /* <Type>                                                                */
250  /*    FT_F2Dot14                                                         */
251  /*                                                                       */
252  /* <Description>                                                         */
253  /*    A signed 2.14 fixed float type used for unit vectors.              */
254  /*                                                                       */
255  typedef signed short  FT_F2Dot14;
256
257
258  /*************************************************************************/
259  /*                                                                       */
260  /* <Type>                                                                */
261  /*    FT_F26Dot6                                                         */
262  /*                                                                       */
263  /* <Description>                                                         */
264  /*    A signed 26.6 fixed float type used for vectorial pixel            */
265  /*    coordinates.                                                       */
266  /*                                                                       */
267  typedef signed long  FT_F26Dot6;
268
269
270  /*************************************************************************/
271  /*                                                                       */
272  /* <Type>                                                                */
273  /*    FT_Fixed                                                           */
274  /*                                                                       */
275  /* <Description>                                                         */
276  /*    This type is used to store 16.16 fixed float values, like scales   */
277  /*    or matrix coefficients.                                            */
278  /*                                                                       */
279  typedef signed long  FT_Fixed;
280
281
282  /*************************************************************************/
283  /*                                                                       */
284  /* <Type>                                                                */
285  /*    FT_Error                                                           */
286  /*                                                                       */
287  /* <Description>                                                         */
288  /*    The FreeType error code type.  A value of 0 is always interpreted  */
289  /*    as a successful operation.                                         */
290  /*                                                                       */
291  typedef int  FT_Error;
292
293
294  /*************************************************************************/
295  /*                                                                       */
296  /* <Type>                                                                */
297  /*    FT_Pointer                                                         */
298  /*                                                                       */
299  /* <Description>                                                         */
300  /*    A simple typedef for a typeless pointer.                           */
301  /*                                                                       */
302  typedef void*  FT_Pointer;
303
304
305  /*************************************************************************/
306  /*                                                                       */
307  /* <Type>                                                                */
308  /*    FT_Offset                                                          */
309  /*                                                                       */
310  /* <Description>                                                         */
311  /*    This is equivalent to the ANSI C `size_t' type, i.e. the largest   */
312  /*    _unsigned_ integer type used to express a file size or position,   */
313  /*    or a memory block size.                                            */
314  /*                                                                       */
315  typedef size_t  FT_Offset;
316
317
318  /*************************************************************************/
319  /*                                                                       */
320  /* <Type>                                                                */
321  /*    FT_PtrDist                                                         */
322  /*                                                                       */
323  /* <Description>                                                         */
324  /*    This is equivalent to the ANSI C `ptrdiff_t' type, i.e. the        */
325  /*    largest _signed_ integer type used to express the distance         */
326  /*    between two pointers.                                              */
327  /*                                                                       */
328  typedef ft_ptrdiff_t  FT_PtrDist;
329
330
331  /*************************************************************************/
332  /*                                                                       */
333  /* <Struct>                                                              */
334  /*    FT_UnitVector                                                      */
335  /*                                                                       */
336  /* <Description>                                                         */
337  /*    A simple structure used to store a 2D vector unit vector.  Uses    */
338  /*    FT_F2Dot14 types.                                                  */
339  /*                                                                       */
340  /* <Fields>                                                              */
341  /*    x :: Horizontal coordinate.                                        */
342  /*                                                                       */
343  /*    y :: Vertical coordinate.                                          */
344  /*                                                                       */
345  typedef struct  FT_UnitVector_
346  {
347    FT_F2Dot14  x;
348    FT_F2Dot14  y;
349
350  } FT_UnitVector;
351
352
353  /*************************************************************************/
354  /*                                                                       */
355  /* <Struct>                                                              */
356  /*    FT_Matrix                                                          */
357  /*                                                                       */
358  /* <Description>                                                         */
359  /*    A simple structure used to store a 2x2 matrix.  Coefficients are   */
360  /*    in 16.16 fixed float format.  The computation performed is:        */
361  /*                                                                       */
362  /*       {                                                               */
363  /*          x' = x*xx + y*xy                                             */
364  /*          y' = x*yx + y*yy                                             */
365  /*       }                                                               */
366  /*                                                                       */
367  /* <Fields>                                                              */
368  /*    xx :: Matrix coefficient.                                          */
369  /*                                                                       */
370  /*    xy :: Matrix coefficient.                                          */
371  /*                                                                       */
372  /*    yx :: Matrix coefficient.                                          */
373  /*                                                                       */
374  /*    yy :: Matrix coefficient.                                          */
375  /*                                                                       */
376  typedef struct  FT_Matrix_
377  {
378    FT_Fixed  xx, xy;
379    FT_Fixed  yx, yy;
380
381  } FT_Matrix;
382
383
384  /*************************************************************************/
385  /*                                                                       */
386  /* <Struct>                                                              */
387  /*    FT_Data                                                            */
388  /*                                                                       */
389  /* <Description>                                                         */
390  /*    Read-only binary data represented as a pointer and a length.       */
391  /*                                                                       */
392  /* <Fields>                                                              */
393  /*    pointer :: The data.                                               */
394  /*                                                                       */
395  /*    length  :: The length of the data in bytes.                        */
396  /*                                                                       */
397  typedef struct  FT_Data_
398  {
399    const FT_Byte*  pointer;
400    FT_Int          length;
401
402  } FT_Data;
403
404
405  /*************************************************************************/
406  /*                                                                       */
407  /* <FuncType>                                                            */
408  /*    FT_Generic_Finalizer                                               */
409  /*                                                                       */
410  /* <Description>                                                         */
411  /*    Describes a function used to destroy the `client' data of any      */
412  /*    FreeType object.  See the description of the FT_Generic type for   */
413  /*    details of usage.                                                  */
414  /*                                                                       */
415  /* <Input>                                                               */
416  /*    The address of the FreeType object which is under finalization.    */
417  /*    Its client data is accessed through its `generic' field.           */
418  /*                                                                       */
419  typedef void  (*FT_Generic_Finalizer)(void*  object);
420
421
422  /*************************************************************************/
423  /*                                                                       */
424  /* <Struct>                                                              */
425  /*    FT_Generic                                                         */
426  /*                                                                       */
427  /* <Description>                                                         */
428  /*    Client applications often need to associate their own data to a    */
429  /*    variety of FreeType core objects.  For example, a text layout API  */
430  /*    might want to associate a glyph cache to a given size object.      */
431  /*                                                                       */
432  /*    Most FreeType object contains a `generic' field, of type           */
433  /*    FT_Generic, which usage is left to client applications and font    */
434  /*    servers.                                                           */
435  /*                                                                       */
436  /*    It can be used to store a pointer to client-specific data, as well */
437  /*    as the address of a `finalizer' function, which will be called by  */
438  /*    FreeType when the object is destroyed (for example, the previous   */
439  /*    client example would put the address of the glyph cache destructor */
440  /*    in the `finalizer' field).                                         */
441  /*                                                                       */
442  /* <Fields>                                                              */
443  /*    data      :: A typeless pointer to any client-specified data. This */
444  /*                 field is completely ignored by the FreeType library.  */
445  /*                                                                       */
446  /*    finalizer :: A pointer to a `generic finalizer' function, which    */
447  /*                 will be called when the object is destroyed.  If this */
448  /*                 field is set to NULL, no code will be called.         */
449  /*                                                                       */
450  typedef struct  FT_Generic_
451  {
452    void*                 data;
453    FT_Generic_Finalizer  finalizer;
454
455  } FT_Generic;
456
457
458  /*************************************************************************/
459  /*                                                                       */
460  /* <Macro>                                                               */
461  /*    FT_MAKE_TAG                                                        */
462  /*                                                                       */
463  /* <Description>                                                         */
464  /*    This macro converts four letter tags which are used to label       */
465  /*    TrueType tables into an unsigned long to be used within FreeType.  */
466  /*                                                                       */
467  /* <Note>                                                                */
468  /*    The produced values *must* be 32bit integers.  Don't redefine this */
469  /*    macro.                                                             */
470  /*                                                                       */
471#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
472          ( ( (FT_ULong)_x1 << 24 ) |     \
473            ( (FT_ULong)_x2 << 16 ) |     \
474            ( (FT_ULong)_x3 <<  8 ) |     \
475              (FT_ULong)_x4         )
476
477
478  /*************************************************************************/
479  /*************************************************************************/
480  /*                                                                       */
481  /*                    L I S T   M A N A G E M E N T                      */
482  /*                                                                       */
483  /*************************************************************************/
484  /*************************************************************************/
485
486
487  /*************************************************************************/
488  /*                                                                       */
489  /* <Section>                                                             */
490  /*    list_processing                                                    */
491  /*                                                                       */
492  /*************************************************************************/
493
494
495  /*************************************************************************/
496  /*                                                                       */
497  /* <Type>                                                                */
498  /*    FT_ListNode                                                        */
499  /*                                                                       */
500  /* <Description>                                                         */
501  /*     Many elements and objects in FreeType are listed through a        */
502  /*     FT_List record (see FT_ListRec).  As its name suggests, a         */
503  /*     FT_ListNode is a handle to a single list element.                 */
504  /*                                                                       */
505  typedef struct FT_ListNodeRec_*  FT_ListNode;
506
507
508  /*************************************************************************/
509  /*                                                                       */
510  /* <Type>                                                                */
511  /*    FT_List                                                            */
512  /*                                                                       */
513  /* <Description>                                                         */
514  /*    A handle to a list record (see FT_ListRec).                        */
515  /*                                                                       */
516  typedef struct FT_ListRec_*  FT_List;
517
518
519  /*************************************************************************/
520  /*                                                                       */
521  /* <Struct>                                                              */
522  /*    FT_ListNodeRec                                                     */
523  /*                                                                       */
524  /* <Description>                                                         */
525  /*    A structure used to hold a single list element.                    */
526  /*                                                                       */
527  /* <Fields>                                                              */
528  /*    prev :: The previous element in the list.  NULL if first.          */
529  /*                                                                       */
530  /*    next :: The next element in the list.  NULL if last.               */
531  /*                                                                       */
532  /*    data :: A typeless pointer to the listed object.                   */
533  /*                                                                       */
534  typedef struct  FT_ListNodeRec_
535  {
536    FT_ListNode  prev;
537    FT_ListNode  next;
538    void*        data;
539
540  } FT_ListNodeRec;
541
542
543  /*************************************************************************/
544  /*                                                                       */
545  /* <Struct>                                                              */
546  /*    FT_ListRec                                                         */
547  /*                                                                       */
548  /* <Description>                                                         */
549  /*    A structure used to hold a simple doubly-linked list.  These are   */
550  /*    used in many parts of FreeType.                                    */
551  /*                                                                       */
552  /* <Fields>                                                              */
553  /*    head :: The head (first element) of doubly-linked list.            */
554  /*                                                                       */
555  /*    tail :: The tail (last element) of doubly-linked list.             */
556  /*                                                                       */
557  typedef struct  FT_ListRec_
558  {
559    FT_ListNode  head;
560    FT_ListNode  tail;
561
562  } FT_ListRec;
563
564
565  /* */
566
567#define FT_IS_EMPTY( list )  ( (list).head == 0 )
568
569  /* return base error code (without module-specific prefix) */
570#define FT_ERROR_BASE( x )    ( (x) & 0xFF )
571
572  /* return module error code */
573#define FT_ERROR_MODULE( x )  ( (x) & 0xFF00U )
574
575#define FT_BOOL( x )  ( (FT_Bool)( x ) )
576
577FT_END_HEADER
578
579#endif /* __FTTYPES_H__ */
580
581
582/* END */
Note: See TracBrowser for help on using the repository browser.