1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* ftcglyph.c */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* FreeType Glyph Image (FT_Glyph) cache (body). */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 2000-2001 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth #include <ft2build.h> 20*37da2899SCharles.Forsyth #include FT_CACHE_H 21*37da2899SCharles.Forsyth #include FT_CACHE_INTERNAL_GLYPH_H 22*37da2899SCharles.Forsyth #include FT_ERRORS_H 23*37da2899SCharles.Forsyth #include FT_LIST_H 24*37da2899SCharles.Forsyth #include FT_INTERNAL_OBJECTS_H 25*37da2899SCharles.Forsyth #include FT_INTERNAL_DEBUG_H 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth #include "ftcerror.h" 28*37da2899SCharles.Forsyth 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth /* create a new chunk node, setting its cache index and ref count */ 31*37da2899SCharles.Forsyth FT_EXPORT_DEF( void ) ftc_glyph_node_init(FTC_GlyphNode gnode,FT_UInt gindex,FTC_GlyphFamily gfam)32*37da2899SCharles.Forsyth ftc_glyph_node_init( FTC_GlyphNode gnode, 33*37da2899SCharles.Forsyth FT_UInt gindex, 34*37da2899SCharles.Forsyth FTC_GlyphFamily gfam ) 35*37da2899SCharles.Forsyth { 36*37da2899SCharles.Forsyth FT_UInt len; 37*37da2899SCharles.Forsyth FT_UInt start = FTC_GLYPH_FAMILY_START( gfam, gindex ); 38*37da2899SCharles.Forsyth 39*37da2899SCharles.Forsyth 40*37da2899SCharles.Forsyth gnode->item_start = (FT_UShort)start; 41*37da2899SCharles.Forsyth 42*37da2899SCharles.Forsyth len = gfam->item_total - start; 43*37da2899SCharles.Forsyth if ( len > gfam->item_count ) 44*37da2899SCharles.Forsyth len = gfam->item_count; 45*37da2899SCharles.Forsyth 46*37da2899SCharles.Forsyth gnode->item_count = (FT_UShort)len; 47*37da2899SCharles.Forsyth gfam->family.num_nodes++; 48*37da2899SCharles.Forsyth } 49*37da2899SCharles.Forsyth 50*37da2899SCharles.Forsyth 51*37da2899SCharles.Forsyth FT_EXPORT_DEF( void ) ftc_glyph_node_done(FTC_GlyphNode gnode,FTC_Cache cache)52*37da2899SCharles.Forsyth ftc_glyph_node_done( FTC_GlyphNode gnode, 53*37da2899SCharles.Forsyth FTC_Cache cache ) 54*37da2899SCharles.Forsyth { 55*37da2899SCharles.Forsyth /* finalize the node */ 56*37da2899SCharles.Forsyth gnode->item_count = 0; 57*37da2899SCharles.Forsyth gnode->item_start = 0; 58*37da2899SCharles.Forsyth 59*37da2899SCharles.Forsyth ftc_node_done( FTC_NODE( gnode ), cache ); 60*37da2899SCharles.Forsyth } 61*37da2899SCharles.Forsyth 62*37da2899SCharles.Forsyth 63*37da2899SCharles.Forsyth FT_EXPORT_DEF( FT_Bool ) ftc_glyph_node_compare(FTC_GlyphNode gnode,FTC_GlyphQuery gquery)64*37da2899SCharles.Forsyth ftc_glyph_node_compare( FTC_GlyphNode gnode, 65*37da2899SCharles.Forsyth FTC_GlyphQuery gquery ) 66*37da2899SCharles.Forsyth { 67*37da2899SCharles.Forsyth FT_UInt start = (FT_UInt)gnode->item_start; 68*37da2899SCharles.Forsyth FT_UInt count = (FT_UInt)gnode->item_count; 69*37da2899SCharles.Forsyth 70*37da2899SCharles.Forsyth return FT_BOOL( (FT_UInt)( gquery->gindex - start ) < count ); 71*37da2899SCharles.Forsyth } 72*37da2899SCharles.Forsyth 73*37da2899SCharles.Forsyth 74*37da2899SCharles.Forsyth /*************************************************************************/ 75*37da2899SCharles.Forsyth /*************************************************************************/ 76*37da2899SCharles.Forsyth /***** *****/ 77*37da2899SCharles.Forsyth /***** CHUNK SETS *****/ 78*37da2899SCharles.Forsyth /***** *****/ 79*37da2899SCharles.Forsyth /*************************************************************************/ 80*37da2899SCharles.Forsyth /*************************************************************************/ 81*37da2899SCharles.Forsyth 82*37da2899SCharles.Forsyth 83*37da2899SCharles.Forsyth 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)84*37da2899SCharles.Forsyth ftc_glyph_family_init( FTC_GlyphFamily gfam, 85*37da2899SCharles.Forsyth FT_UInt32 hash, 86*37da2899SCharles.Forsyth FT_UInt item_count, 87*37da2899SCharles.Forsyth FT_UInt item_total, 88*37da2899SCharles.Forsyth FTC_GlyphQuery gquery, 89*37da2899SCharles.Forsyth FTC_Cache cache ) 90*37da2899SCharles.Forsyth { 91*37da2899SCharles.Forsyth FT_Error error; 92*37da2899SCharles.Forsyth 93*37da2899SCharles.Forsyth 94*37da2899SCharles.Forsyth error = ftc_family_init( FTC_FAMILY( gfam ), FTC_QUERY( gquery ), cache ); 95*37da2899SCharles.Forsyth if ( !error ) 96*37da2899SCharles.Forsyth { 97*37da2899SCharles.Forsyth gfam->hash = hash; 98*37da2899SCharles.Forsyth gfam->item_total = item_total; 99*37da2899SCharles.Forsyth gfam->item_count = item_count; 100*37da2899SCharles.Forsyth 101*37da2899SCharles.Forsyth FTC_GLYPH_FAMILY_FOUND( gfam, gquery ); 102*37da2899SCharles.Forsyth } 103*37da2899SCharles.Forsyth 104*37da2899SCharles.Forsyth return error; 105*37da2899SCharles.Forsyth } 106*37da2899SCharles.Forsyth 107*37da2899SCharles.Forsyth 108*37da2899SCharles.Forsyth FT_EXPORT_DEF( void ) ftc_glyph_family_done(FTC_GlyphFamily gfam)109*37da2899SCharles.Forsyth ftc_glyph_family_done( FTC_GlyphFamily gfam ) 110*37da2899SCharles.Forsyth { 111*37da2899SCharles.Forsyth ftc_family_done( FTC_FAMILY( gfam ) ); 112*37da2899SCharles.Forsyth } 113*37da2899SCharles.Forsyth 114*37da2899SCharles.Forsyth 115*37da2899SCharles.Forsyth /* END */ 116