topical media & game development

talk show tell print

lib-of-vs-libs-free-type-2.1.4-include-freetype2-freetype-cache-ftcglyph.h / h



  
************************************************************************

  
  /*                                                                         */
  /*  ftcglyph.h                                                             */
  /*                                                                         */
  /*    FreeType abstract glyph cache (specification).                       */
  /*                                                                         */
  /*  Copyright 2000-2001 by                                                 */
  /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
  /*                                                                         */
  /*  This file is part of the FreeType project, and may only be used,       */
  /*  modified, and distributed under the terms of the FreeType project      */
  /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
  /*  this file you indicate that you have read the license and              */
  /*  understand and accept it fully.                                        */
  /*                                                                         */
  
************************************************************************

  
  
    
**********************************************************************

  
    /*                                                                       */
    /* Important: The functions defined in this file are only used to        */
    /*            implement an abstract glyph cache class.  You need to      */
    /*            provide additional logic to implement a complete cache.    */
    /*            For example, see `ftcimage.h' and `ftcimage.c' which       */
    /*            implement a FT_Glyph cache based on this code.             */
    /*                                                                       */
    
**********************************************************************

  
  
    
**********************************************************************

  
    
**********************************************************************

  
    
**********************************************************************

  
    
**********************************************************************

  
    
**********************************************************************

  
    
******* ********

  
    
******* WARNING, THIS IS BETA CODE. ********

  
    
******* ********

  
    
**********************************************************************

  
    
**********************************************************************

  
    
**********************************************************************

  
    
**********************************************************************

  
    
**********************************************************************

  
  
  ifndef __FTCGLYPH_H__
  define __FTCGLYPH_H__
  
  include <ft2build.h>
  include FT_CACHE_H
  include FT_CACHE_MANAGER_H
  
  include <stddef.h>
  
  FT_BEGIN_HEADER
  
    /* each glyph set is characterized by a "glyph set type" which must be */
    /* defined by sub-classes                                              */
    typedef struct FTC_GlyphFamilyRec_*  FTC_GlyphFamily;
  
    /* handle to a glyph cache node */
    typedef struct FTC_GlyphNodeRec_*  FTC_GlyphNode;
  
    /* size should be 24 + chunk size on 32-bit machines;                 */
    /* note that the node's hash is ((gfam->hash << 16) | glyph_index) -- */
    /* this _must_ be set properly by the glyph node initializer          */
    /*                                                                    */
    typedef struct  FTC_GlyphNodeRec_
    {
      FTC_NodeRec   node;
      FT_UShort     item_count;
      FT_UShort     item_start;
  
    } FTC_GlyphNodeRec;
  
  define FTC_GLYPH_NODE( x )    ( (FTC_GlyphNode)(x) )
  define FTC_GLYPH_NODE_P( x )  ( (FTC_GlyphNode*)(x) )
  
    typedef struct  FTC_GlyphQueryRec_
    {
      FTC_QueryRec  query;
      FT_UInt       gindex;
  
    } FTC_GlyphQueryRec, *FTC_GlyphQuery;
  
  define FTC_GLYPH_QUERY( x )  ( (FTC_GlyphQuery)(x) )
  
    /* a glyph set is used to categorize glyphs of a given type */
    typedef struct  FTC_GlyphFamilyRec_
    {
      FTC_FamilyRec  family;
      FT_UInt32      hash;
      FT_UInt        item_total;   /* total number of glyphs in family */
      FT_UInt        item_count;   /* number of glyph items per node   */
  
    } FTC_GlyphFamilyRec;
  
  define FTC_GLYPH_FAMILY( x )         ( (FTC_GlyphFamily)(x) )
  define FTC_GLYPH_FAMILY_P( x )       ( (FTC_GlyphFamily*)(x) )
  
  define FTC_GLYPH_FAMILY_MEMORY( x )  FTC_FAMILY(x)->cache->memory
  
    /* each glyph node contains a 'chunk' of glyph items; */
    /* translate a glyph index into a chunk index         */
  define FTC_GLYPH_FAMILY_CHUNK( gfam, gindex )                  \
            ( ( gindex ) / FTC_GLYPH_FAMILY( gfam )->item_count )
  
    /* find a glyph index's chunk, and return its start index */
  define FTC_GLYPH_FAMILY_START( gfam, gindex )       \
            ( FTC_GLYPH_FAMILY_CHUNK( gfam, gindex ) * \
              FTC_GLYPH_FAMILY( gfam )->item_count )
  
    /* compute a glyph request's hash value */
  define FTC_GLYPH_FAMILY_HASH( gfam, gindex )                         \
            ( (FT_UFast)(                                               \
                ( FTC_GLYPH_FAMILY( gfam )->hash << 16 ) |              \
                ( FTC_GLYPH_FAMILY_CHUNK( gfam, gindex ) & 0xFFFF ) ) )
  
    /* must be called in an FTC_Family_CompareFunc to update the query */
    /* whenever a glyph set is matched in the lookup, or when it       */
    /* is created                                                      */
  define FTC_GLYPH_FAMILY_FOUND( gfam, gquery )                            \
            do                                                              \
            {                                                               \
              FTC_QUERY( gquery )->family = FTC_FAMILY( gfam );             \
              FTC_QUERY( gquery )->hash =                                   \
                FTC_GLYPH_FAMILY_HASH( gfam,                                \
                                       FTC_GLYPH_QUERY( gquery )->gindex ); \
            } while ( 0 )
  
    /* retrieve glyph index of glyph node */
  define FTC_GLYPH_NODE_GINDEX( x )                                 \
            ( (FT_UInt)( FTC_GLYPH_NODE( x )->node.hash & 0xFFFF ) )
  
    
**********************************************************************

  
    /*                                                                       */
    /* These functions are exported so that they can be called from          */
    /* user-provided cache classes; otherwise, they are really part of the   */
    /* cache sub-system internals.                                           */
    /*                                                                       */
  
    /* must be called by derived FTC_Node_InitFunc routines */
    FT_EXPORT( void )
    ftc_glyph_node_init( FTC_GlyphNode    node,
                         FT_UInt          gindex,  /* glyph index for node */
                         FTC_GlyphFamily  gfam );
  
    /* returns TRUE iff the query's glyph index correspond to the node;  */
    /* this assumes that the "family" and "hash" fields of the query are */
    /* already correctly set                                             */
    FT_EXPORT( FT_Bool )
    ftc_glyph_node_compare( FTC_GlyphNode   gnode,
                            FTC_GlyphQuery  gquery );
  
    /* must be called by derived FTC_Node_DoneFunc routines */
    FT_EXPORT( void )
    ftc_glyph_node_done( FTC_GlyphNode  node,
                         FTC_Cache      cache );
  
    /* must be called by derived FTC_Family_InitFunc; */
    /* calls "ftc_family_init"                        */
    FT_EXPORT( FT_Error )
    ftc_glyph_family_init( FTC_GlyphFamily  gfam,
                           FT_UInt32        hash,
                           FT_UInt          item_count,
                           FT_UInt          item_total,
                           FTC_GlyphQuery   gquery,
                           FTC_Cache        cache );
  
    FT_EXPORT( void )
    ftc_glyph_family_done( FTC_GlyphFamily  gfam );
  
    /* */
   
  FT_END_HEADER
  
  endif /* __FTCGLYPH_H__ */
  
  /* END */
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.