misc/libfreetype/include/freetype/internal/ftgloadr.h
changeset 9372 915436ff64ab
parent 9371 f3840de881bd
child 9373 b769a8e38cbd
equal deleted inserted replaced
9371:f3840de881bd 9372:915436ff64ab
     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 */