Home | History | Annotate | Download | only in cache
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ftcimage.h                                                             */
      4 /*                                                                         */
      5 /*    FreeType Generic Image cache (specification)                         */
      6 /*                                                                         */
      7 /*  Copyright 2000-2015 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  /*
     20   *  FTC_ICache is an _abstract_ cache used to store a single FT_Glyph
     21   *  image per cache node.
     22   *
     23   *  FTC_ICache extends FTC_GCache.  For an implementation example,
     24   *  see FTC_ImageCache in `src/cache/ftbasic.c'.
     25   */
     26 
     27 
     28   /*************************************************************************/
     29   /*                                                                       */
     30   /* Each image cache really manages FT_Glyph objects.                     */
     31   /*                                                                       */
     32   /*************************************************************************/
     33 
     34 
     35 #ifndef __FTCIMAGE_H__
     36 #define __FTCIMAGE_H__
     37 
     38 
     39 #include <ft2build.h>
     40 #include FT_CACHE_H
     41 #include "ftcglyph.h"
     42 
     43 FT_BEGIN_HEADER
     44 
     45 
     46   /* the FT_Glyph image node type - we store only 1 glyph per node */
     47   typedef struct  FTC_INodeRec_
     48   {
     49     FTC_GNodeRec  gnode;
     50     FT_Glyph      glyph;
     51 
     52   } FTC_INodeRec, *FTC_INode;
     53 
     54 #define FTC_INODE( x )         ( (FTC_INode)( x ) )
     55 #define FTC_INODE_GINDEX( x )  FTC_GNODE(x)->gindex
     56 #define FTC_INODE_FAMILY( x )  FTC_GNODE(x)->family
     57 
     58   typedef FT_Error
     59   (*FTC_IFamily_LoadGlyphFunc)( FTC_Family  family,
     60                                 FT_UInt     gindex,
     61                                 FTC_Cache   cache,
     62                                 FT_Glyph   *aglyph );
     63 
     64   typedef struct  FTC_IFamilyClassRec_
     65   {
     66     FTC_MruListClassRec        clazz;
     67     FTC_IFamily_LoadGlyphFunc  family_load_glyph;
     68 
     69   } FTC_IFamilyClassRec;
     70 
     71   typedef const FTC_IFamilyClassRec*  FTC_IFamilyClass;
     72 
     73 #define FTC_IFAMILY_CLASS( x )  ((FTC_IFamilyClass)(x))
     74 
     75 #define FTC_CACHE__IFAMILY_CLASS( x ) \
     76           FTC_IFAMILY_CLASS( FTC_CACHE__GCACHE_CLASS(x)->family_class )
     77 
     78 
     79   /* can be used as a @FTC_Node_FreeFunc */
     80   FT_LOCAL( void )
     81   FTC_INode_Free( FTC_INode  inode,
     82                   FTC_Cache  cache );
     83 
     84   /* Can be used as @FTC_Node_NewFunc.  `gquery.index' and `gquery.family'
     85    * must be set correctly.  This function will call the `family_load_glyph'
     86    * method to load the FT_Glyph into the cache node.
     87    */
     88   FT_LOCAL( FT_Error )
     89   FTC_INode_New( FTC_INode   *pinode,
     90                  FTC_GQuery   gquery,
     91                  FTC_Cache    cache );
     92 
     93 #if 0
     94   /* can be used as @FTC_Node_WeightFunc */
     95   FT_LOCAL( FT_ULong )
     96   FTC_INode_Weight( FTC_INode  inode );
     97 #endif
     98 
     99 
    100  /* */
    101 
    102 FT_END_HEADER
    103 
    104 #endif /* __FTCIMAGE_H__ */
    105 
    106 
    107 /* END */
    108