Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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.