update for HEAD-2003050101
[reactos.git] / lib / freetype / src / cache / ftcglyph.c
diff --git a/lib/freetype/src/cache/ftcglyph.c b/lib/freetype/src/cache/ftcglyph.c
new file mode 100644 (file)
index 0000000..aa21228
--- /dev/null
@@ -0,0 +1,115 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftcglyph.c                                                             */
+/*                                                                         */
+/*    FreeType Glyph Image (FT_Glyph) cache (body).                        */
+/*                                                                         */
+/*  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.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_CACHE_H
+#include FT_CACHE_INTERNAL_GLYPH_H
+#include FT_ERRORS_H
+#include FT_LIST_H
+#include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_DEBUG_H
+
+#include "ftcerror.h"
+
+
+  /* create a new chunk node, setting its cache index and ref count */
+  FT_EXPORT_DEF( void )
+  ftc_glyph_node_init( FTC_GlyphNode     gnode,
+                       FT_UInt           gindex,
+                       FTC_GlyphFamily   gfam )
+  {
+    FT_UInt  len;
+    FT_UInt  start = FTC_GLYPH_FAMILY_START( gfam, gindex );
+
+
+    gnode->item_start = (FT_UShort)start;
+
+    len = gfam->item_total - start;
+    if ( len > gfam->item_count )
+      len = gfam->item_count;
+
+    gnode->item_count = (FT_UShort)len;
+    gfam->family.num_nodes++;
+  }
+
+
+  FT_EXPORT_DEF( void )
+  ftc_glyph_node_done( FTC_GlyphNode  gnode,
+                       FTC_Cache      cache )
+  {
+    /* finalize the node */
+    gnode->item_count = 0;
+    gnode->item_start = 0;
+
+    ftc_node_done( FTC_NODE( gnode ), cache );
+  }
+
+
+  FT_EXPORT_DEF( FT_Bool )
+  ftc_glyph_node_compare( FTC_GlyphNode   gnode,
+                          FTC_GlyphQuery  gquery )
+  {
+    FT_UInt  start = (FT_UInt)gnode->item_start;
+    FT_UInt  count = (FT_UInt)gnode->item_count;
+
+    return FT_BOOL( (FT_UInt)( gquery->gindex - start ) < count );
+  }
+
+
+  /*************************************************************************/
+  /*************************************************************************/
+  /*****                                                               *****/
+  /*****                      CHUNK SETS                               *****/
+  /*****                                                               *****/
+  /*************************************************************************/
+  /*************************************************************************/
+
+
+  FT_EXPORT_DEF( 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_Error  error;
+
+
+    error = ftc_family_init( FTC_FAMILY( gfam ), FTC_QUERY( gquery ), cache );
+    if ( !error )
+    {
+      gfam->hash       = hash;
+      gfam->item_total = item_total;
+      gfam->item_count = item_count;
+      
+      FTC_GLYPH_FAMILY_FOUND( gfam, gquery );
+    }
+
+    return error;
+  }
+
+
+  FT_EXPORT_DEF( void )
+  ftc_glyph_family_done( FTC_GlyphFamily  gfam )
+  {
+    ftc_family_done( FTC_FAMILY( gfam ) );
+  }
+
+
+/* END */