(root)/
freetype-2.13.2/
src/
cache/
ftcimage.h
       1  /****************************************************************************
       2   *
       3   * ftcimage.h
       4   *
       5   *   FreeType Generic Image cache (specification)
       6   *
       7   * Copyright (C) 2000-2023 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 <freetype/ftcache.h>
      40  #include "ftcglyph.h"
      41  
      42  FT_BEGIN_HEADER
      43  
      44  
      45    /* the FT_Glyph image node type - we store only 1 glyph per node */
      46    typedef struct  FTC_INodeRec_
      47    {
      48      FTC_GNodeRec  gnode;
      49      FT_Glyph      glyph;
      50  
      51    } FTC_INodeRec, *FTC_INode;
      52  
      53  #define FTC_INODE( x )         ( (FTC_INode)( x ) )
      54  #define FTC_INODE_GINDEX( x )  FTC_GNODE( x )->gindex
      55  #define FTC_INODE_FAMILY( x )  FTC_GNODE( x )->family
      56  
      57    typedef FT_Error
      58    (*FTC_IFamily_LoadGlyphFunc)( FTC_Family  family,
      59                                  FT_UInt     gindex,
      60                                  FTC_Cache   cache,
      61                                  FT_Glyph   *aglyph );
      62  
      63    typedef struct  FTC_IFamilyClassRec_
      64    {
      65      FTC_MruListClassRec        clazz;
      66      FTC_IFamily_LoadGlyphFunc  family_load_glyph;
      67  
      68    } FTC_IFamilyClassRec;
      69  
      70    typedef const FTC_IFamilyClassRec*  FTC_IFamilyClass;
      71  
      72  #define FTC_IFAMILY_CLASS( x )  ((FTC_IFamilyClass)(x))
      73  
      74  #define FTC_CACHE_IFAMILY_CLASS( x ) \
      75            FTC_IFAMILY_CLASS( FTC_CACHE_GCACHE_CLASS( x )->family_class )
      76  
      77  
      78    /* can be used as a @FTC_Node_FreeFunc */
      79    FT_LOCAL( void )
      80    FTC_INode_Free( FTC_INode  inode,
      81                    FTC_Cache  cache );
      82  
      83    /* Can be used as @FTC_Node_NewFunc.  `gquery.index' and `gquery.family'
      84     * must be set correctly.  This function will call the `family_load_glyph'
      85     * method to load the FT_Glyph into the cache node.
      86     */
      87    FT_LOCAL( FT_Error )
      88    FTC_INode_New( FTC_INode   *pinode,
      89                   FTC_GQuery   gquery,
      90                   FTC_Cache    cache );
      91  
      92  #if 0
      93    /* can be used as @FTC_Node_WeightFunc */
      94    FT_LOCAL( FT_ULong )
      95    FTC_INode_Weight( FTC_INode  inode );
      96  #endif
      97  
      98  
      99   /* */
     100  
     101  FT_END_HEADER
     102  
     103  #endif /* FTCIMAGE_H_ */
     104  
     105  
     106  /* END */