ReactOS 0.4.16-dev-2354-g16de117
ftcmanag.c
Go to the documentation of this file.
1/****************************************************************************
2 *
3 * ftcmanag.c
4 *
5 * FreeType Cache Manager (body).
6 *
7 * Copyright (C) 2000-2020 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 <freetype/ftcache.h>
20#include "ftcmanag.h"
23#include <freetype/ftsizes.h>
24
25#include "ftccback.h"
26#include "ftcerror.h"
27
28
29#undef FT_COMPONENT
30#define FT_COMPONENT cache
31
32
33 static FT_Error
35 FTC_Scaler scaler,
36 FT_Size *asize )
37 {
41
42
43 error = FTC_Manager_LookupFace( manager, scaler->face_id, &face );
44 if ( error )
45 goto Exit;
46
48 if ( error )
49 goto Exit;
50
52
53 if ( scaler->pixel )
54 error = FT_Set_Pixel_Sizes( face, scaler->width, scaler->height );
55 else
57 (FT_F26Dot6)scaler->width,
58 (FT_F26Dot6)scaler->height,
59 scaler->x_res,
60 scaler->y_res );
61 if ( error )
62 {
64 size = NULL;
65 }
66
67 Exit:
68 *asize = size;
69 return error;
70 }
71
72
73 typedef struct FTC_SizeNodeRec_
74 {
78
80
81#define FTC_SIZE_NODE( x ) ( (FTC_SizeNode)( x ) )
82
83
84 FT_CALLBACK_DEF( void )
87 {
89 FT_Size size = node->size;
90 FT_UNUSED( data );
91
92
93 if ( size )
95 }
96
97
100 FT_Pointer ftcscaler )
101 {
102 FTC_SizeNode node = (FTC_SizeNode)ftcnode;
103 FTC_Scaler scaler = (FTC_Scaler)ftcscaler;
104 FTC_Scaler scaler0 = &node->scaler;
105
106
107 if ( FTC_SCALER_COMPARE( scaler0, scaler ) )
108 {
109 FT_Activate_Size( node->size );
110 return 1;
111 }
112 return 0;
113 }
114
115
118 FT_Pointer ftcscaler,
119 FT_Pointer ftcmanager )
120 {
121 FTC_SizeNode node = (FTC_SizeNode)ftcnode;
122 FTC_Scaler scaler = (FTC_Scaler)ftcscaler;
123 FTC_Manager manager = (FTC_Manager)ftcmanager;
124
125
126 node->scaler = scaler[0];
127
128 return ftc_scaler_lookup_size( manager, scaler, &node->size );
129 }
130
131
134 FT_Pointer ftcscaler,
135 FT_Pointer ftcmanager )
136 {
137 FTC_SizeNode node = (FTC_SizeNode)ftcnode;
138 FTC_Scaler scaler = (FTC_Scaler)ftcscaler;
139 FTC_Manager manager = (FTC_Manager)ftcmanager;
140
141
142 FT_Done_Size( node->size );
143
144 node->scaler = scaler[0];
145
146 return ftc_scaler_lookup_size( manager, scaler, &node->size );
147 }
148
149
150 static
152 {
153 sizeof ( FTC_SizeNodeRec ),
154
155 ftc_size_node_compare, /* FTC_MruNode_CompareFunc node_compare */
156 ftc_size_node_init, /* FTC_MruNode_InitFunc node_init */
157 ftc_size_node_reset, /* FTC_MruNode_ResetFunc node_reset */
158 ftc_size_node_done /* FTC_MruNode_DoneFunc node_done */
159 };
160
161
162 /* helper function used by ftc_face_node_done */
163 static FT_Bool
165 FT_Pointer ftcface_id )
166 {
167 FTC_SizeNode node = (FTC_SizeNode)ftcnode;
168 FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
169
170
171 return FT_BOOL( node->scaler.face_id == face_id );
172 }
173
174
175 /* documentation is in ftcache.h */
176
179 FTC_Scaler scaler,
180 FT_Size *asize )
181 {
183 FTC_MruNode mrunode;
184
185
186 if ( !asize || !scaler )
187 return FT_THROW( Invalid_Argument );
188
189 *asize = NULL;
190
191 if ( !manager )
192 return FT_THROW( Invalid_Cache_Handle );
193
194#ifdef FTC_INLINE
195
196 FTC_MRULIST_LOOKUP_CMP( &manager->sizes, scaler, ftc_size_node_compare,
197 mrunode, error );
198
199#else
200 error = FTC_MruList_Lookup( &manager->sizes, scaler, &mrunode );
201#endif
202
203 if ( !error )
204 *asize = FTC_SIZE_NODE( mrunode )->size;
205
206 return error;
207 }
208
209
210 /*************************************************************************/
211 /*************************************************************************/
212 /***** *****/
213 /***** FACE MRU IMPLEMENTATION *****/
214 /***** *****/
215 /*************************************************************************/
216 /*************************************************************************/
217
218 typedef struct FTC_FaceNodeRec_
219 {
223
225
226#define FTC_FACE_NODE( x ) ( ( FTC_FaceNode )( x ) )
227
228
231 FT_Pointer ftcface_id,
232 FT_Pointer ftcmanager )
233 {
234 FTC_FaceNode node = (FTC_FaceNode)ftcnode;
235 FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
236 FTC_Manager manager = (FTC_Manager)ftcmanager;
238
239
240 node->face_id = face_id;
241
242 error = manager->request_face( face_id,
243 manager->library,
244 manager->request_data,
245 &node->face );
246 if ( !error )
247 {
248 /* destroy initial size object; it will be re-created later */
249 if ( node->face->size )
250 FT_Done_Size( node->face->size );
251 }
252
253 return error;
254 }
255
256
257 FT_CALLBACK_DEF( void )
259 FT_Pointer ftcmanager )
260 {
261 FTC_FaceNode node = (FTC_FaceNode)ftcnode;
262 FTC_Manager manager = (FTC_Manager)ftcmanager;
263
264
265 /* we must begin by removing all scalers for the target face */
266 /* from the manager's list */
269 node->face_id );
270
271 /* all right, we can discard the face now */
272 FT_Done_Face( node->face );
273 node->face = NULL;
274 node->face_id = NULL;
275 }
276
277
280 FT_Pointer ftcface_id )
281 {
282 FTC_FaceNode node = (FTC_FaceNode)ftcnode;
283 FTC_FaceID face_id = (FTC_FaceID)ftcface_id;
284
285
286 return FT_BOOL( node->face_id == face_id );
287 }
288
289
290 static
292 {
293 sizeof ( FTC_FaceNodeRec),
294
295 ftc_face_node_compare, /* FTC_MruNode_CompareFunc node_compare */
296 ftc_face_node_init, /* FTC_MruNode_InitFunc node_init */
297 NULL, /* FTC_MruNode_ResetFunc node_reset */
298 ftc_face_node_done /* FTC_MruNode_DoneFunc node_done */
299 };
300
301
302 /* documentation is in ftcache.h */
303
306 FTC_FaceID face_id,
307 FT_Face *aface )
308 {
310 FTC_MruNode mrunode;
311
312
313 if ( !aface )
314 return FT_THROW( Invalid_Argument );
315
316 *aface = NULL;
317
318 if ( !manager )
319 return FT_THROW( Invalid_Cache_Handle );
320
321 /* we break encapsulation for the sake of speed */
322#ifdef FTC_INLINE
323
324 FTC_MRULIST_LOOKUP_CMP( &manager->faces, face_id, ftc_face_node_compare,
325 mrunode, error );
326
327#else
328 error = FTC_MruList_Lookup( &manager->faces, face_id, &mrunode );
329#endif
330
331 if ( !error )
332 *aface = FTC_FACE_NODE( mrunode )->face;
333
334 return error;
335 }
336
337
338 /*************************************************************************/
339 /*************************************************************************/
340 /***** *****/
341 /***** CACHE MANAGER ROUTINES *****/
342 /***** *****/
343 /*************************************************************************/
344 /*************************************************************************/
345
346
347 /* documentation is in ftcache.h */
348
351 FT_UInt max_faces,
352 FT_UInt max_sizes,
353 FT_ULong max_bytes,
354 FTC_Face_Requester requester,
355 FT_Pointer req_data,
356 FTC_Manager *amanager )
357 {
360 FTC_Manager manager = 0;
361
362
363 if ( !library )
364 return FT_THROW( Invalid_Library_Handle );
365
366 if ( !amanager || !requester )
367 return FT_THROW( Invalid_Argument );
368
370
371 if ( FT_NEW( manager ) )
372 goto Exit;
373
374 if ( max_faces == 0 )
375 max_faces = FTC_MAX_FACES_DEFAULT;
376
377 if ( max_sizes == 0 )
378 max_sizes = FTC_MAX_SIZES_DEFAULT;
379
380 if ( max_bytes == 0 )
381 max_bytes = FTC_MAX_BYTES_DEFAULT;
382
383 manager->library = library;
384 manager->memory = memory;
385 manager->max_weight = max_bytes;
386
387 manager->request_face = requester;
388 manager->request_data = req_data;
389
390 FTC_MruList_Init( &manager->faces,
392 max_faces,
393 manager,
394 memory );
395
396 FTC_MruList_Init( &manager->sizes,
398 max_sizes,
399 manager,
400 memory );
401
402 *amanager = manager;
403
404 Exit:
405 return error;
406 }
407
408
409 /* documentation is in ftcache.h */
410
411 FT_EXPORT_DEF( void )
413 {
415 FT_UInt idx;
416
417
418 if ( !manager || !manager->library )
419 return;
420
421 memory = manager->memory;
422
423 /* now discard all caches */
424 for (idx = manager->num_caches; idx-- > 0; )
425 {
426 FTC_Cache cache = manager->caches[idx];
427
428
429 if ( cache )
430 {
431 cache->clazz.cache_done( cache );
432 FT_FREE( cache );
433 manager->caches[idx] = NULL;
434 }
435 }
436 manager->num_caches = 0;
437
438 /* discard faces and sizes */
439 FTC_MruList_Done( &manager->sizes );
440 FTC_MruList_Done( &manager->faces );
441
442 manager->library = NULL;
443 manager->memory = NULL;
444
445 FT_FREE( manager );
446 }
447
448
449 /* documentation is in ftcache.h */
450
451 FT_EXPORT_DEF( void )
453 {
454 if ( !manager )
455 return;
456
457 FTC_MruList_Reset( &manager->sizes );
458 FTC_MruList_Reset( &manager->faces );
459
460 FTC_Manager_FlushN( manager, manager->num_nodes );
461 }
462
463
464#ifdef FT_DEBUG_ERROR
465
466 static void
467 FTC_Manager_Check( FTC_Manager manager )
468 {
470
471
472 first = manager->nodes_list;
473
474 /* check node weights */
475 if ( first )
476 {
477 FT_Offset weight = 0;
478
479
480 node = first;
481
482 do
483 {
484 FTC_Cache cache = manager->caches[node->cache_index];
485
486
487 if ( (FT_UInt)node->cache_index >= manager->num_caches )
488 FT_TRACE0(( "FTC_Manager_Check: invalid node (cache index = %ld\n",
489 node->cache_index ));
490 else
491 weight += cache->clazz.node_weight( node, cache );
492
494
495 } while ( node != first );
496
497 if ( weight != manager->cur_weight )
498 FT_TRACE0(( "FTC_Manager_Check: invalid weight %ld instead of %ld\n",
499 manager->cur_weight, weight ));
500 }
501
502 /* check circular list */
503 if ( first )
504 {
505 FT_UFast count = 0;
506
507
508 node = first;
509 do
510 {
511 count++;
513
514 } while ( node != first );
515
516 if ( count != manager->num_nodes )
517 FT_TRACE0(( "FTC_Manager_Check:"
518 " invalid cache node count %d instead of %d\n",
519 manager->num_nodes, count ));
520 }
521 }
522
523#endif /* FT_DEBUG_ERROR */
524
525
526 /* `Compress' the manager's data, i.e., get rid of old cache nodes */
527 /* that are not referenced anymore in order to limit the total */
528 /* memory used by the cache. */
529
530 /* documentation is in ftcmanag.h */
531
532 FT_LOCAL_DEF( void )
534 {
536
537
538 if ( !manager )
539 return;
540
541 first = manager->nodes_list;
542
543#ifdef FT_DEBUG_ERROR
544 FTC_Manager_Check( manager );
545
546 FT_TRACE0(( "compressing, weight = %ld, max = %ld, nodes = %d\n",
547 manager->cur_weight, manager->max_weight,
548 manager->num_nodes ));
549#endif
550
551 if ( manager->cur_weight < manager->max_weight || !first )
552 return;
553
554 /* go to last node -- it's a circular list */
556 do
557 {
558 FTC_Node prev;
559
560
561 prev = ( node == first ) ? NULL : FTC_NODE_PREV( node );
562
563 if ( node->ref_count <= 0 )
564 ftc_node_destroy( node, manager );
565
566 node = prev;
567
568 } while ( node && manager->cur_weight > manager->max_weight );
569 }
570
571
572 /* documentation is in ftcmanag.h */
573
576 FTC_CacheClass clazz,
577 FTC_Cache *acache )
578 {
579 FT_Error error = FT_ERR( Invalid_Argument );
581
582
583 if ( manager && clazz && acache )
584 {
585 FT_Memory memory = manager->memory;
586
587
588 if ( manager->num_caches >= FTC_MAX_CACHES )
589 {
590 error = FT_THROW( Too_Many_Caches );
591 FT_ERROR(( "FTC_Manager_RegisterCache:"
592 " too many registered caches\n" ));
593 goto Exit;
594 }
595
596 if ( !FT_ALLOC( cache, clazz->cache_size ) )
597 {
598 cache->manager = manager;
599 cache->memory = memory;
600 cache->clazz = clazz[0];
601 cache->org_class = clazz;
602
603 /* THIS IS VERY IMPORTANT! IT WILL WRETCH THE MANAGER */
604 /* IF IT IS NOT SET CORRECTLY */
605 cache->index = manager->num_caches;
606
607 error = clazz->cache_init( cache );
608 if ( error )
609 {
610 clazz->cache_done( cache );
611 FT_FREE( cache );
612 goto Exit;
613 }
614
615 manager->caches[manager->num_caches++] = cache;
616 }
617 }
618
619 Exit:
620 if ( acache )
621 *acache = cache;
622 return error;
623 }
624
625
628 FT_UInt count )
629 {
630 FTC_Node first = manager->nodes_list;
633
634
635 /* try to remove `count' nodes from the list */
636 if ( !first ) /* empty list! */
637 return 0;
638
639 /* go to last node - it's a circular list */
641 for ( result = 0; result < count; )
642 {
643 FTC_Node prev = FTC_NODE_PREV( node );
644
645
646 /* don't touch locked nodes */
647 if ( node->ref_count <= 0 )
648 {
649 ftc_node_destroy( node, manager );
650 result++;
651 }
652
653 if ( node == first )
654 break;
655
656 node = prev;
657 }
658 return result;
659 }
660
661
662 /* documentation is in ftcache.h */
663
664 FT_EXPORT_DEF( void )
666 FTC_FaceID face_id )
667 {
668 FT_UInt nn;
669
670
671 if ( !manager )
672 return;
673
674 /* this will remove all FTC_SizeNode that correspond to
675 * the face_id as well
676 */
677 FTC_MruList_RemoveSelection( &manager->faces,
679 face_id );
680
681 for ( nn = 0; nn < manager->num_caches; nn++ )
682 FTC_Cache_RemoveFaceID( manager->caches[nn], face_id );
683 }
684
685
686 /* documentation is in ftcache.h */
687
688 FT_EXPORT_DEF( void )
690 FTC_Manager manager )
691 {
692 if ( node &&
693 manager &&
694 (FT_UInt)node->cache_index < manager->num_caches )
695 node->ref_count--;
696 }
697
698
699/* END */
FT_Library library
Definition: cffdrivr.c:660
#define FT_CALLBACK_DEF(x)
#define FT_LOCAL_DEF(x)
#define FT_EXPORT_DEF(x)
#define NULL
Definition: types.h:112
WORD face[3]
Definition: mesh.c:4747
unsigned int idx
Definition: utils.c:41
FT_Set_Pixel_Sizes(FT_Face face, FT_UInt pixel_width, FT_UInt pixel_height)
Definition: ftobjs.c:3373
FT_Done_Face(FT_Face face)
Definition: ftobjs.c:2783
FT_Set_Char_Size(FT_Face face, FT_F26Dot6 char_width, FT_F26Dot6 char_height, FT_UInt horz_resolution, FT_UInt vert_resolution)
Definition: ftobjs.c:3331
FT_Error(* FTC_Face_Requester)(FTC_FaceID face_id, FT_Library library, FT_Pointer req_data, FT_Face *aface)
Definition: ftcache.h:210
FT_BEGIN_HEADER typedef FT_Pointer FTC_FaceID
Definition: ftcache.h:171
struct FTC_ScalerRec_ * FTC_Scaler
Definition: ftcache.h:461
struct FTC_ManagerRec_ * FTC_Manager
Definition: ftcache.h:250
ftc_node_destroy(FTC_Node node, FTC_Manager manager)
Definition: ftccache.c:272
FTC_Cache_RemoveFaceID(FTC_Cache cache, FTC_FaceID face_id)
Definition: ftccache.c:563
#define FTC_NODE_NEXT(x)
Definition: ftccache.h:72
#define FTC_NODE_PREV(x)
Definition: ftccache.h:73
FTC_Manager_RegisterCache(FTC_Manager manager, FTC_CacheClass clazz, FTC_Cache *acache)
Definition: ftcmanag.c:575
ftc_face_node_done(FTC_MruNode ftcnode, FT_Pointer ftcmanager)
Definition: ftcmanag.c:258
FTC_Manager_Done(FTC_Manager manager)
Definition: ftcmanag.c:412
ftc_size_node_done(FTC_MruNode ftcnode, FT_Pointer data)
Definition: ftcmanag.c:85
struct FTC_FaceNodeRec_ * FTC_FaceNode
#define FTC_FACE_NODE(x)
Definition: ftcmanag.c:226
struct FTC_FaceNodeRec_ FTC_FaceNodeRec
static const FTC_MruListClassRec ftc_size_list_class
Definition: ftcmanag.c:151
static const FTC_MruListClassRec ftc_face_list_class
Definition: ftcmanag.c:291
FTC_Manager_RemoveFaceID(FTC_Manager manager, FTC_FaceID face_id)
Definition: ftcmanag.c:665
static FT_Bool ftc_size_node_compare_faceid(FTC_MruNode ftcnode, FT_Pointer ftcface_id)
Definition: ftcmanag.c:164
struct FTC_SizeNodeRec_ FTC_SizeNodeRec
FTC_Manager_LookupFace(FTC_Manager manager, FTC_FaceID face_id, FT_Face *aface)
Definition: ftcmanag.c:305
FTC_Manager_Compress(FTC_Manager manager)
Definition: ftcmanag.c:533
FTC_Node_Unref(FTC_Node node, FTC_Manager manager)
Definition: ftcmanag.c:689
FTC_Manager_Reset(FTC_Manager manager)
Definition: ftcmanag.c:452
FTC_Manager_FlushN(FTC_Manager manager, FT_UInt count)
Definition: ftcmanag.c:627
ftc_size_node_reset(FTC_MruNode ftcnode, FT_Pointer ftcscaler, FT_Pointer ftcmanager)
Definition: ftcmanag.c:133
struct FTC_SizeNodeRec_ * FTC_SizeNode
ftc_size_node_compare(FTC_MruNode ftcnode, FT_Pointer ftcscaler)
Definition: ftcmanag.c:99
ftc_face_node_compare(FTC_MruNode ftcnode, FT_Pointer ftcface_id)
Definition: ftcmanag.c:279
static FT_Error ftc_scaler_lookup_size(FTC_Manager manager, FTC_Scaler scaler, FT_Size *asize)
Definition: ftcmanag.c:34
ftc_size_node_init(FTC_MruNode ftcnode, FT_Pointer ftcscaler, FT_Pointer ftcmanager)
Definition: ftcmanag.c:117
#define FTC_SIZE_NODE(x)
Definition: ftcmanag.c:81
FTC_Manager_LookupSize(FTC_Manager manager, FTC_Scaler scaler, FT_Size *asize)
Definition: ftcmanag.c:178
FTC_Manager_New(FT_Library library, FT_UInt max_faces, FT_UInt max_sizes, FT_ULong max_bytes, FTC_Face_Requester requester, FT_Pointer req_data, FTC_Manager *amanager)
Definition: ftcmanag.c:350
ftc_face_node_init(FTC_MruNode ftcnode, FT_Pointer ftcface_id, FT_Pointer ftcmanager)
Definition: ftcmanag.c:230
#define FTC_MAX_BYTES_DEFAULT
Definition: ftcmanag.h:84
#define FTC_MAX_SIZES_DEFAULT
Definition: ftcmanag.h:83
#define FTC_SCALER_COMPARE(a, b)
Definition: ftcmanag.h:154
#define FTC_MAX_CACHES
Definition: ftcmanag.h:87
#define FTC_MAX_FACES_DEFAULT
Definition: ftcmanag.h:82
FTC_MruList_Reset(FTC_MruList list)
Definition: ftcmru.c:184
FTC_MruList_Done(FTC_MruList list)
Definition: ftcmru.c:194
FTC_MruList_Init(FTC_MruList list, FTC_MruListClass clazz, FT_UInt max_nodes, FT_Pointer data, FT_Memory memory)
Definition: ftcmru.c:168
FTC_MruList_RemoveSelection(FTC_MruList list, FTC_MruNode_CompareFunc selection, FT_Pointer key)
Definition: ftcmru.c:326
#define FTC_MRULIST_LOOKUP_CMP(list, key, compare, node, error)
Definition: ftcmru.h:164
typedefFT_BEGIN_HEADER struct FTC_MruNodeRec_ * FTC_MruNode
Definition: ftcmru.h:61
#define FT_TRACE0(varformat)
Definition: ftdebug.h:187
#define FT_ERROR(varformat)
Definition: ftdebug.h:211
#define FT_THROW(e)
Definition: ftdebug.h:243
#define FT_NEW(ptr)
Definition: ftmemory.h:339
#define FT_ALLOC(ptr, size)
Definition: ftmemory.h:311
#define FT_FREE(ptr)
Definition: ftmemory.h:337
FT_Done_Size(FT_Size size)
Definition: ftobjs.c:2891
FT_Activate_Size(FT_Size size)
Definition: ftobjs.c:4293
FT_BEGIN_HEADER FT_New_Size(FT_Face face, FT_Size *size)
Definition: ftobjs.c:2824
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:64
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
signed long FT_F26Dot6
Definition: fttypes.h:275
unsigned long FT_ULong
Definition: fttypes.h:253
int FT_Error
Definition: fttypes.h:299
#define FT_ERR(e)
Definition: fttypes.h:599
unsigned int FT_UInt
Definition: fttypes.h:231
#define FT_BOOL(x)
Definition: fttypes.h:591
size_t FT_Offset
Definition: fttypes.h:323
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
const GLint * first
Definition: glext.h:5794
GLuint64EXT * result
Definition: glext.h:11304
#define error(str)
Definition: mkdosfs.c:1605
static char memory[1024 *256]
Definition: process.c:122
#define FT_UNUSED(arg)
weight
Definition: sortkey.c:157
static void Exit(void)
Definition: sock.c:1330
FTC_FaceID face_id
Definition: ftcmanag.c:221
FTC_MruNodeRec node
Definition: ftcmanag.c:220
FT_Face face
Definition: ftcmanag.c:222
FT_UInt num_caches
Definition: ftcmanag.h:101
FT_Pointer request_data
Definition: ftcmanag.h:106
FTC_Cache caches[FTC_MAX_CACHES]
Definition: ftcmanag.h:100
FT_Offset cur_weight
Definition: ftcmanag.h:97
FTC_MruListRec faces
Definition: ftcmanag.h:103
FT_Memory memory
Definition: ftcmanag.h:93
FTC_Face_Requester request_face
Definition: ftcmanag.h:107
FT_Offset max_weight
Definition: ftcmanag.h:96
FTC_Node nodes_list
Definition: ftcmanag.h:95
FT_Library library
Definition: ftcmanag.h:92
FTC_MruListRec sizes
Definition: ftcmanag.h:104
FT_UInt num_nodes
Definition: ftcmanag.h:98
FT_UInt width
Definition: ftcache.h:444
FT_UInt x_res
Definition: ftcache.h:447
FTC_FaceID face_id
Definition: ftcache.h:443
FT_UInt height
Definition: ftcache.h:445
FT_Int pixel
Definition: ftcache.h:446
FT_UInt y_res
Definition: ftcache.h:448
FT_Size size
Definition: ftcmanag.c:76
FTC_MruNodeRec node
Definition: ftcmanag.c:75
FTC_ScalerRec scaler
Definition: ftcmanag.c:77
FT_Memory memory
Definition: ftobjs.h:895
Definition: cache.c:49
Definition: dlist.c:348