xref: /inferno-os/libfreetype/ftcglyph.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
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