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