ftgloadr.h

Go to the documentation of this file.
00001 /***************************************************************************/
00002 /*                                                                         */
00003 /*  ftgloadr.h                                                             */
00004 /*                                                                         */
00005 /*    The FreeType glyph loader (specification).                           */
00006 /*                                                                         */
00007 /*  Copyright 2002, 2003, 2005, 2006 by                                    */
00008 /*  David Turner, Robert Wilhelm, and Werner Lemberg                       */
00009 /*                                                                         */
00010 /*  This file is part of the FreeType project, and may only be used,       */
00011 /*  modified, and distributed under the terms of the FreeType project      */
00012 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
00013 /*  this file you indicate that you have read the license and              */
00014 /*  understand and accept it fully.                                        */
00015 /*                                                                         */
00016 /***************************************************************************/
00017 
00018 
00019 #ifndef __FTGLOADR_H__
00020 #define __FTGLOADR_H__
00021 
00022 
00023 #include <ft2build.h>
00024 #include FT_FREETYPE_H
00025 
00026 
00027 FT_BEGIN_HEADER
00028 
00029 
00030   /*************************************************************************/
00031   /*                                                                       */
00032   /* <Struct>                                                              */
00033   /*    FT_GlyphLoader                                                     */
00034   /*                                                                       */
00035   /* <Description>                                                         */
00036   /*    The glyph loader is an internal object used to load several glyphs */
00037   /*    together (for example, in the case of composites).                 */
00038   /*                                                                       */
00039   /* <Note>                                                                */
00040   /*    The glyph loader implementation is not part of the high-level API, */
00041   /*    hence the forward structure declaration.                           */
00042   /*                                                                       */
00043   typedef struct FT_GlyphLoaderRec_*  FT_GlyphLoader ;
00044 
00045 
00046 #if 0  /* moved to freetype.h in version 2.2 */
00047 #define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS          1
00048 #define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES      2
00049 #define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID        4
00050 #define FT_SUBGLYPH_FLAG_SCALE                   8
00051 #define FT_SUBGLYPH_FLAG_XY_SCALE             0x40
00052 #define FT_SUBGLYPH_FLAG_2X2                  0x80
00053 #define FT_SUBGLYPH_FLAG_USE_MY_METRICS      0x200
00054 #endif
00055 
00056 
00057   typedef struct  FT_SubGlyphRec_
00058   {
00059     FT_Int     index;
00060     FT_UShort  flags;
00061     FT_Int     arg1;
00062     FT_Int     arg2;
00063     FT_Matrix  transform;
00064 
00065   } FT_SubGlyphRec;
00066 
00067 
00068   typedef struct  FT_GlyphLoadRec_
00069   {
00070     FT_Outline   outline;       /* outline                   */
00071     FT_Vector*   extra_points;  /* extra points table        */
00072     FT_Vector*   extra_points2; /* second extra points table */
00073     FT_UInt      num_subglyphs; /* number of subglyphs       */
00074     FT_SubGlyph  subglyphs;     /* subglyphs                 */
00075 
00076   } FT_GlyphLoadRec, *FT_GlyphLoad;
00077 
00078 
00079   typedef struct  FT_GlyphLoaderRec_
00080   {
00081     FT_Memory        memory;
00082     FT_UInt          max_points;
00083     FT_UInt          max_contours;
00084     FT_UInt          max_subglyphs;
00085     FT_Bool          use_extra;
00086 
00087     FT_GlyphLoadRec  base;
00088     FT_GlyphLoadRec  current;
00089 
00090     void*            other;            /* for possible future extension? */
00091 
00092   } FT_GlyphLoaderRec;
00093 
00094 
00095   /* create new empty glyph loader */
00096   FT_BASE( FT_Error )
00097   FT_GlyphLoader_New( FT_Memory        memory,
00098                       FT_GlyphLoader  *aloader );
00099 
00100   /* add an extra points table to a glyph loader */
00101   FT_BASE( FT_Error )
00102   FT_GlyphLoader_CreateExtra( FT_GlyphLoader  loader );
00103 
00104   /* destroy a glyph loader */
00105   FT_BASE( void )
00106   FT_GlyphLoader_Done( FT_GlyphLoader  loader );
00107 
00108   /* reset a glyph loader (frees everything int it) */
00109   FT_BASE( void )
00110   FT_GlyphLoader_Reset( FT_GlyphLoader  loader );
00111 
00112   /* rewind a glyph loader */
00113   FT_BASE( void )
00114   FT_GlyphLoader_Rewind( FT_GlyphLoader  loader );
00115 
00116   /* check that there is enough space to add `n_points' and `n_contours' */
00117   /* to the glyph loader                                                 */
00118   FT_BASE( FT_Error )
00119   FT_GlyphLoader_CheckPoints( FT_GlyphLoader  loader,
00120                               FT_UInt         n_points,
00121                               FT_UInt         n_contours );
00122 
00123 
00124 #define FT_GLYPHLOADER_CHECK_P( _loader, _count )                         \
00125    ( (_count) == 0 || ((_loader)->base.outline.n_points    +              \
00126                        (_loader)->current.outline.n_points +              \
00127                        (unsigned long)(_count)) <= (_loader)->max_points )
00128 
00129 #define FT_GLYPHLOADER_CHECK_C( _loader, _count )                          \
00130   ( (_count) == 0 || ((_loader)->base.outline.n_contours    +              \
00131                       (_loader)->current.outline.n_contours +              \
00132                       (unsigned long)(_count)) <= (_loader)->max_contours )
00133 
00134 #define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points,_contours )      \
00135   ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points )   &&                  \
00136       FT_GLYPHLOADER_CHECK_C( _loader, _contours ) )                   \
00137     ? 0                                                                \
00138     : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) )
00139 
00140 
00141   /* check that there is enough space to add `n_subs' sub-glyphs to */
00142   /* a glyph loader                                                 */
00143   FT_BASE( FT_Error )
00144   FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader  loader,
00145                                  FT_UInt         n_subs );
00146 
00147   /* prepare a glyph loader, i.e. empty the current glyph */
00148   FT_BASE( void )
00149   FT_GlyphLoader_Prepare( FT_GlyphLoader  loader );
00150 
00151   /* add the current glyph to the base glyph */
00152   FT_BASE( void )
00153   FT_GlyphLoader_Add( FT_GlyphLoader  loader );
00154 
00155   /* copy points from one glyph loader to another */
00156   FT_BASE( FT_Error )
00157   FT_GlyphLoader_CopyPoints( FT_GlyphLoader  target,
00158                              FT_GlyphLoader  source );
00159 
00160  /* */
00161 
00162 
00163 FT_END_HEADER
00164 
00165 #endif /* __FTGLOADR_H__ */
00166 
00167 
00168 /* END */

Generated on Tue Jul 5 14:13:38 2011 for ROOT_528-00b_version by  doxygen 1.5.1