Home | History | Annotate | Download | only in internal
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ftgloadr.h                                                             */
      4 /*                                                                         */
      5 /*    The FreeType glyph loader (specification).                           */
      6 /*                                                                         */
      7 /*  Copyright 2002, 2003, 2005, 2006 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 __FTGLOADR_H__
     20 #define __FTGLOADR_H__
     21 
     22 
     23 #include <ft2build.h>
     24 #include FT_FREETYPE_H
     25 
     26 
     27 FT_BEGIN_HEADER
     28 
     29 
     30   /*************************************************************************/
     31   /*                                                                       */
     32   /* <Struct>                                                              */
     33   /*    FT_GlyphLoader                                                     */
     34   /*                                                                       */
     35   /* <Description>                                                         */
     36   /*    The glyph loader is an internal object used to load several glyphs */
     37   /*    together (for example, in the case of composites).                 */
     38   /*                                                                       */
     39   /* <Note>                                                                */
     40   /*    The glyph loader implementation is not part of the high-level API, */
     41   /*    hence the forward structure declaration.                           */
     42   /*                                                                       */
     43   typedef struct FT_GlyphLoaderRec_*  FT_GlyphLoader ;
     44 
     45 
     46 #if 0  /* moved to freetype.h in version 2.2 */
     47 #define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS          1
     48 #define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES      2
     49 #define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID        4
     50 #define FT_SUBGLYPH_FLAG_SCALE                   8
     51 #define FT_SUBGLYPH_FLAG_XY_SCALE             0x40
     52 #define FT_SUBGLYPH_FLAG_2X2                  0x80
     53 #define FT_SUBGLYPH_FLAG_USE_MY_METRICS      0x200
     54 #endif
     55 
     56 
     57   typedef struct  FT_SubGlyphRec_
     58   {
     59     FT_Int     index;
     60     FT_UShort  flags;
     61     FT_Int     arg1;
     62     FT_Int     arg2;
     63     FT_Matrix  transform;
     64 
     65   } FT_SubGlyphRec;
     66 
     67 
     68   typedef struct  FT_GlyphLoadRec_
     69   {
     70     FT_Outline   outline;       /* outline                   */
     71     FT_Vector*   extra_points;  /* extra points table        */
     72     FT_Vector*   extra_points2; /* second extra points table */
     73     FT_UInt      num_subglyphs; /* number of subglyphs       */
     74     FT_SubGlyph  subglyphs;     /* subglyphs                 */
     75 
     76   } FT_GlyphLoadRec, *FT_GlyphLoad;
     77 
     78 
     79   typedef struct  FT_GlyphLoaderRec_
     80   {
     81     FT_Memory        memory;
     82     FT_UInt          max_points;
     83     FT_UInt          max_contours;
     84     FT_UInt          max_subglyphs;
     85     FT_Bool          use_extra;
     86 
     87     FT_GlyphLoadRec  base;
     88     FT_GlyphLoadRec  current;
     89 
     90     void*            other;            /* for possible future extension? */
     91 
     92   } FT_GlyphLoaderRec;
     93 
     94 
     95   /* create new empty glyph loader */
     96   FT_BASE( FT_Error )
     97   FT_GlyphLoader_New( FT_Memory        memory,
     98                       FT_GlyphLoader  *aloader );
     99 
    100   /* add an extra points table to a glyph loader */
    101   FT_BASE( FT_Error )
    102   FT_GlyphLoader_CreateExtra( FT_GlyphLoader  loader );
    103 
    104   /* destroy a glyph loader */
    105   FT_BASE( void )
    106   FT_GlyphLoader_Done( FT_GlyphLoader  loader );
    107 
    108   /* reset a glyph loader (frees everything int it) */
    109   FT_BASE( void )
    110   FT_GlyphLoader_Reset( FT_GlyphLoader  loader );
    111 
    112   /* rewind a glyph loader */
    113   FT_BASE( void )
    114   FT_GlyphLoader_Rewind( FT_GlyphLoader  loader );
    115 
    116   /* check that there is enough space to add `n_points' and `n_contours' */
    117   /* to the glyph loader                                                 */
    118   FT_BASE( FT_Error )
    119   FT_GlyphLoader_CheckPoints( FT_GlyphLoader  loader,
    120                               FT_UInt         n_points,
    121                               FT_UInt         n_contours );
    122 
    123 
    124 #define FT_GLYPHLOADER_CHECK_P( _loader, _count )                         \
    125    ( (_count) == 0 || ((_loader)->base.outline.n_points    +              \
    126                        (_loader)->current.outline.n_points +              \
    127                        (unsigned long)(_count)) <= (_loader)->max_points )
    128 
    129 #define FT_GLYPHLOADER_CHECK_C( _loader, _count )                          \
    130   ( (_count) == 0 || ((_loader)->base.outline.n_contours    +              \
    131                       (_loader)->current.outline.n_contours +              \
    132                       (unsigned long)(_count)) <= (_loader)->max_contours )
    133 
    134 #define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points,_contours )      \
    135   ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points )   &&                  \
    136       FT_GLYPHLOADER_CHECK_C( _loader, _contours ) )                   \
    137     ? 0                                                                \
    138     : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) )
    139 
    140 
    141   /* check that there is enough space to add `n_subs' sub-glyphs to */
    142   /* a glyph loader                                                 */
    143   FT_BASE( FT_Error )
    144   FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader  loader,
    145                                  FT_UInt         n_subs );
    146 
    147   /* prepare a glyph loader, i.e. empty the current glyph */
    148   FT_BASE( void )
    149   FT_GlyphLoader_Prepare( FT_GlyphLoader  loader );
    150 
    151   /* add the current glyph to the base glyph */
    152   FT_BASE( void )
    153   FT_GlyphLoader_Add( FT_GlyphLoader  loader );
    154 
    155   /* copy points from one glyph loader to another */
    156   FT_BASE( FT_Error )
    157   FT_GlyphLoader_CopyPoints( FT_GlyphLoader  target,
    158                              FT_GlyphLoader  source );
    159 
    160  /* */
    161 
    162 
    163 FT_END_HEADER
    164 
    165 #endif /* __FTGLOADR_H__ */
    166 
    167 
    168 /* END */
    169