summaryrefslogtreecommitdiff
path: root/include/freetype/cache/ftcglyph.h
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
commit37da2899f40661e3e9631e497da8dc59b971cbd0 (patch)
treecbc6d4680e347d906f5fa7fca73214418741df72 /include/freetype/cache/ftcglyph.h
parent54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff)
20060303a
Diffstat (limited to 'include/freetype/cache/ftcglyph.h')
-rw-r--r--include/freetype/cache/ftcglyph.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/include/freetype/cache/ftcglyph.h b/include/freetype/cache/ftcglyph.h
new file mode 100644
index 00000000..3d14cf02
--- /dev/null
+++ b/include/freetype/cache/ftcglyph.h
@@ -0,0 +1,193 @@
+/***************************************************************************/
+/* */
+/* 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 */