ReactOS  0.4.13-dev-1174-gdff75d7
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 
95  ftc_inode_new( FTC_Node *ftcpinode,
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 */
Definition: cache.c:46
FT_Bitmap bitmap
Definition: ftglyph.h:165
int FT_Error
Definition: fttypes.h:300
struct FT_OutlineGlyphRec_ * FT_OutlineGlyph
Definition: ftglyph.h:179
unsigned int rows
Definition: ftimage.h:263
#define error(str)
Definition: mkdosfs.c:1605
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
FTC_IFamily_LoadGlyphFunc family_load_glyph
Definition: ftcimage.h:67
#define FT_ABS(a)
Definition: ftobjs.h:74
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_Glyph_Format format
Definition: ftglyph.h:112
static char memory[1024 *256]
Definition: process.c:116
#define FTC_NODE(x)
Definition: ftccache.h:69
struct FT_BitmapGlyphRec_ * FT_BitmapGlyph
Definition: ftglyph.h:127
ftc_inode_weight(FTC_Node ftcinode, FTC_Cache ftccache)
Definition: ftcimage.c:108
Definition: fs.h:78
unsigned char FT_Byte
Definition: fttypes.h:154
FTC_GNode_Init(FTC_GNode gnode, FT_UInt gindex, FTC_Family family)
Definition: ftcglyph.c:31
smooth NULL
Definition: ftsmooth.c:416
#define FT_FREE(ptr)
Definition: ftmemory.h:329
#define FT_LOCAL_DEF(x)
Definition: ftconfig.h:388
FTC_INode_Free(FTC_INode inode, FTC_Cache cache)
Definition: ftcimage.c:50
GLsizeiptr size
Definition: glext.h:5919
smooth FT_Module_Constructor FT_Module_Destructor FT_Module_Requester FT_GLYPH_FORMAT_OUTLINE
Definition: ftsmooth.c:416
#define FTC_GNODE(x)
Definition: ftcglyph.h:156
signed short FT_Short
Definition: fttypes.h:198
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
ftc_inode_new(FTC_Node *ftcpinode, FT_Pointer ftcgquery, FTC_Cache cache)
Definition: ftcimage.c:95
FT_BEGIN_HEADER struct FTC_FamilyRec_ * FTC_Family
FTC_GNode_Done(FTC_GNode gnode, FTC_Cache cache)
Definition: ftcglyph.c:55
short n_points
Definition: ftimage.h:337
unsigned int FT_UInt
Definition: fttypes.h:231
int pitch
Definition: ftimage.h:265
FT_BEGIN_HEADER struct FTC_INodeRec_ * FTC_INode
struct FTC_GQueryRec_ * FTC_GQuery
ftc_inode_free(FTC_Node ftcinode, FTC_Cache cache)
Definition: ftcimage.c:31
#define FT_NEW(ptr)
Definition: ftmemory.h:331
FT_Outline outline
Definition: ftglyph.h:211
FT_Done_Glyph(FT_Glyph glyph)
Definition: ftglyph.c:633
#define FT_UNUSED(arg)
Definition: ftconfig.h:101
short n_contours
Definition: ftimage.h:336
size_t FT_Offset
Definition: fttypes.h:324