1 /***************************************************************************/
5 /* FreeType Image cache (body). */
7 /* Copyright 2000-2001, 2003, 2004, 2006 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
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. */
16 /***************************************************************************/
22 #include FT_INTERNAL_MEMORY_H
28 /* finalize a given glyph image node */
30 ftc_inode_free( FTC_Node ftcinode
,
33 FTC_INode inode
= (FTC_INode
)ftcinode
;
34 FT_Memory memory
= cache
->memory
;
39 FT_Done_Glyph( inode
->glyph
);
43 FTC_GNode_Done( FTC_GNODE( inode
), cache
);
49 FTC_INode_Free( FTC_INode inode
,
52 ftc_inode_free( FTC_NODE( inode
), cache
);
56 /* initialize a new glyph image node */
57 FT_LOCAL_DEF( FT_Error
)
58 FTC_INode_New( FTC_INode
*pinode
,
62 FT_Memory memory
= cache
->memory
;
67 if ( !FT_NEW( inode
) )
69 FTC_GNode gnode
= FTC_GNODE( inode
);
70 FTC_Family family
= gquery
->family
;
71 FT_UInt gindex
= gquery
->gindex
;
72 FTC_IFamilyClass clazz
= FTC_CACHE__IFAMILY_CLASS( cache
);
75 /* initialize its inner fields */
76 FTC_GNode_Init( gnode
, gindex
, family
);
78 /* we will now load the glyph image */
79 error
= clazz
->family_load_glyph( family
, gindex
, cache
,
83 FTC_INode_Free( inode
, cache
);
93 FT_LOCAL_DEF( FT_Error
)
94 ftc_inode_new( FTC_Node
*ftcpinode
,
98 FTC_INode
*pinode
= (FTC_INode
*)ftcpinode
;
99 FTC_GQuery gquery
= (FTC_GQuery
)ftcgquery
;
102 return FTC_INode_New( pinode
, gquery
, cache
);
106 FT_LOCAL_DEF( FT_Offset
)
107 ftc_inode_weight( FTC_Node ftcinode
,
110 FTC_INode inode
= (FTC_INode
)ftcinode
;
112 FT_Glyph glyph
= inode
->glyph
;
114 FT_UNUSED( ftccache
);
117 switch ( glyph
->format
)
119 case FT_GLYPH_FORMAT_BITMAP
:
124 bitg
= (FT_BitmapGlyph
)glyph
;
125 size
= bitg
->bitmap
.rows
* ft_labs( bitg
->bitmap
.pitch
) +
130 case FT_GLYPH_FORMAT_OUTLINE
:
132 FT_OutlineGlyph outg
;
135 outg
= (FT_OutlineGlyph
)glyph
;
136 size
= outg
->outline
.n_points
*
137 ( sizeof ( FT_Vector
) + sizeof ( FT_Byte
) ) +
138 outg
->outline
.n_contours
* sizeof ( FT_Short
) +
147 size
+= sizeof ( *inode
);
154 FT_LOCAL_DEF( FT_Offset
)
155 FTC_INode_Weight( FTC_INode inode
)
157 return ftc_inode_weight( FTC_NODE( inode
), NULL
);