ReactOS 0.4.15-dev-5669-g09dde2c
ftcimage.c
Go to the documentation of this file.
1/***************************************************************************/
2/* */
3/* ftcimage.c */
4/* */
5/* FreeType Image cache (body). */
6/* */
7/* Copyright 2000-2018 by */
8/* David Turner, Robert Wilhelm, and Werner Lemberg. */
9/* */
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. */
15/* */
16/***************************************************************************/
17
18
19#include <ft2build.h>
20#include FT_CACHE_H
21#include "ftcimage.h"
22#include FT_INTERNAL_MEMORY_H
23#include FT_INTERNAL_OBJECTS_H
24
25#include "ftccback.h"
26#include "ftcerror.h"
27
28
29 /* finalize a given glyph image node */
30 FT_LOCAL_DEF( void )
33 {
34 FTC_INode inode = (FTC_INode)ftcinode;
35 FT_Memory memory = cache->memory;
36
37
38 if ( inode->glyph )
39 {
40 FT_Done_Glyph( inode->glyph );
41 inode->glyph = NULL;
42 }
43
45 FT_FREE( inode );
46 }
47
48
49 FT_LOCAL_DEF( void )
52 {
54 }
55
56
57 /* initialize a new glyph image node */
60 FTC_GQuery gquery,
62 {
63 FT_Memory memory = cache->memory;
66
67
68 if ( !FT_NEW( inode ) )
69 {
70 FTC_GNode gnode = FTC_GNODE( inode );
71 FTC_Family family = gquery->family;
72 FT_UInt gindex = gquery->gindex;
74
75
76 /* initialize its inner fields */
77 FTC_GNode_Init( gnode, gindex, family );
78
79 /* we will now load the glyph image */
80 error = clazz->family_load_glyph( family, gindex, cache,
81 &inode->glyph );
82 if ( error )
83 {
85 inode = NULL;
86 }
87 }
88
89 *pinode = inode;
90 return error;
91 }
92
93
96 FT_Pointer ftcgquery,
98 {
99 FTC_INode *pinode = (FTC_INode*)ftcpinode;
100 FTC_GQuery gquery = (FTC_GQuery)ftcgquery;
101
102
103 return FTC_INode_New( pinode, gquery, cache );
104 }
105
106
109 FTC_Cache ftccache )
110 {
111 FTC_INode inode = (FTC_INode)ftcinode;
112 FT_Offset size = 0;
113 FT_Glyph glyph = inode->glyph;
114
115 FT_UNUSED( ftccache );
116
117
118 switch ( glyph->format )
119 {
120 case FT_GLYPH_FORMAT_BITMAP:
121 {
122 FT_BitmapGlyph bitg;
123
124
125 bitg = (FT_BitmapGlyph)glyph;
126 size = bitg->bitmap.rows * (FT_Offset)FT_ABS( bitg->bitmap.pitch ) +
127 sizeof ( *bitg );
128 }
129 break;
130
132 {
133 FT_OutlineGlyph outg;
134
135
136 outg = (FT_OutlineGlyph)glyph;
137 size = (FT_Offset)outg->outline.n_points *
138 ( sizeof ( FT_Vector ) + sizeof ( FT_Byte ) ) +
140 sizeof ( *outg );
141 }
142 break;
143
144 default:
145 ;
146 }
147
148 size += sizeof ( *inode );
149 return size;
150 }
151
152
153#if 0
154
156 FTC_INode_Weight( FTC_INode inode )
157 {
158 return ftc_inode_weight( FTC_NODE( inode ), NULL );
159 }
160
161#endif /* 0 */
162
163
164/* END */
#define NULL
Definition: types.h:112
#define FTC_NODE(x)
Definition: ftccache.h:69
FTC_GNode_Done(FTC_GNode gnode, FTC_Cache cache)
Definition: ftcglyph.c:55
FTC_GNode_Init(FTC_GNode gnode, FT_UInt gindex, FTC_Family family)
Definition: ftcglyph.c:31
FT_BEGIN_HEADER struct FTC_FamilyRec_ * FTC_Family
struct FTC_GQueryRec_ * FTC_GQuery
#define FTC_GNODE(x)
Definition: ftcglyph.h:156
ftc_inode_weight(FTC_Node ftcinode, FTC_Cache ftccache)
Definition: ftcimage.c:108
ftc_inode_new(FTC_Node *ftcpinode, FT_Pointer ftcgquery, FTC_Cache cache)
Definition: ftcimage.c:95
ftc_inode_free(FTC_Node ftcinode, FTC_Cache cache)
Definition: ftcimage.c:31
FTC_INode_Free(FTC_INode inode, FTC_Cache cache)
Definition: ftcimage.c:50
FTC_INode_New(FTC_INode *pinode, FTC_GQuery gquery, FTC_Cache cache)
Definition: ftcimage.c:59
#define FTC_CACHE_IFAMILY_CLASS(x)
Definition: ftcimage.h:75
FT_BEGIN_HEADER struct FTC_INodeRec_ * FTC_INode
#define FT_LOCAL_DEF(x)
Definition: ftconfig.h:388
#define FT_UNUSED(arg)
Definition: ftconfig.h:101
FT_Done_Glyph(FT_Glyph glyph)
Definition: ftglyph.c:633
struct FT_BitmapGlyphRec_ * FT_BitmapGlyph
Definition: ftglyph.h:127
struct FT_OutlineGlyphRec_ * FT_OutlineGlyph
Definition: ftglyph.h:179
#define FT_NEW(ptr)
Definition: ftmemory.h:331
#define FT_FREE(ptr)
Definition: ftmemory.h:329
#define FT_ABS(a)
Definition: ftobjs.h:74
smooth FT_Module_Constructor FT_Module_Destructor FT_Module_Requester FT_GLYPH_FORMAT_OUTLINE
Definition: ftsmooth.c:426
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
unsigned char FT_Byte
Definition: fttypes.h:154
int FT_Error
Definition: fttypes.h:300
signed short FT_Short
Definition: fttypes.h:198
unsigned int FT_UInt
Definition: fttypes.h:231
size_t FT_Offset
Definition: fttypes.h:324
GLsizeiptr size
Definition: glext.h:5919
#define error(str)
Definition: mkdosfs.c:1605
static char memory[1024 *256]
Definition: process.c:116
FTC_IFamily_LoadGlyphFunc family_load_glyph
Definition: ftcimage.h:67
FT_Bitmap bitmap
Definition: ftglyph.h:165
unsigned int rows
Definition: ftimage.h:263
int pitch
Definition: ftimage.h:265
FT_Glyph_Format format
Definition: ftglyph.h:112
FT_Outline outline
Definition: ftglyph.h:211
short n_contours
Definition: ftimage.h:336
short n_points
Definition: ftimage.h:337
Definition: cache.c:49
Definition: fs.h:78
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList