- fixed an horrible FT_LOAD_RENDER bug that returned empty

bitmaps !!

- tested and fixed the image cache object. I'm performing a
  few more checks though, and we'll call the cache sub-system
  completed !!
This commit is contained in:
David Turner 2000-08-24 12:39:40 +00:00
parent 98d2701c58
commit 35db73220c
7 changed files with 52 additions and 37 deletions

View File

@ -1019,31 +1019,34 @@
slot->advance.y = 0;
}
/* now, transform the glyph image when needed */
if ( face->transform_flags && !( load_flags & FT_LOAD_NO_RECURSE ) )
if ((load_flags & FT_LOAD_NO_RECURSE)==0)
{
/* get renderer */
FT_Renderer renderer = ft_lookup_glyph_renderer( slot );
/* now, transform the glyph image when needed */
if ( face->transform_flags )
{
/* get renderer */
FT_Renderer renderer = ft_lookup_glyph_renderer( slot );
if ( renderer )
error = renderer->clazz->transform_glyph( renderer, slot,
&face->transform_matrix,
&face->transform_delta );
/* transform advance */
FT_Vector_Transform( &slot->advance, &face->transform_matrix );
}
if ( renderer )
error = renderer->clazz->transform_glyph( renderer, slot,
&face->transform_matrix,
&face->transform_delta );
/* transform advance */
FT_Vector_Transform( &slot->advance, &face->transform_matrix );
}
/* do we need to render the image now? */
if ( !error &&
slot->format != ft_glyph_format_bitmap &&
slot->format != ft_glyph_format_composite &&
load_flags & FT_LOAD_RENDER )
{
error = FT_Render_Glyph( slot,
( load_flags & FT_LOAD_MONOCHROME )
? ft_render_mode_mono
: ft_render_mode_normal );
/* do we need to render the image now? */
if ( !error &&
slot->format != ft_glyph_format_bitmap &&
slot->format != ft_glyph_format_composite &&
load_flags & FT_LOAD_RENDER )
{
error = FT_Render_Glyph( slot,
( load_flags & FT_LOAD_MONOCHROME )
? ft_render_mode_mono
: ft_render_mode_normal );
}
}
Exit:

28
src/cache/ftcimage.c vendored
View File

@ -2,7 +2,7 @@
/* */
/* ftcimage.c */
/* */
/* XXX */
/* FreeType Image Cache */
/* */
/* Copyright 2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
@ -448,6 +448,9 @@
error = FTC_ImageNode_New( queue->cache, &inode );
if (error)
goto Exit;
/* set the glyph and queue indices in the image node */
FTC_IMAGENODE_SET_INDICES( inode, glyph_index, queue->index );
error = queue->clazz->init_image( queue, inode );
if (error)
@ -456,9 +459,6 @@
goto Exit;
}
/* set the glyph and queue indices in the image node */
FTC_IMAGENODE_SET_INDICES( inode, glyph_index, queue->index );
/* insert the node at the start of our bucket list */
FT_List_Insert( bucket, (FT_ListNode)inode );
@ -606,6 +606,7 @@
goto Exit;
cache->manager = manager;
cache->memory = manager->library->memory;
cache->max_bytes = max_bytes;
error = FT_Lru_New( &ftc_image_queue_lru_class,
@ -653,11 +654,20 @@
FTC_ImageNode inode;
*aglyph = 0;
error = FT_Lru_Lookup( cache->queues_lru,
(FT_LruKey)desc,
(FT_Pointer*)&queue );
if (error)
goto Exit;
queue = cache->last_queue;
if ( !queue ||
queue->descriptor.size.face_id != desc->size.face_id ||
queue->descriptor.size.pix_width != desc->size.pix_width ||
queue->descriptor.size.pix_height != desc->size.pix_height ||
queue->descriptor.image_type != desc->image_type )
{
error = FT_Lru_Lookup( cache->queues_lru,
(FT_LruKey)desc,
(FT_Pointer*)&queue );
cache->last_queue = queue;
if (error)
goto Exit;
}
error = FTC_Image_Queue_Lookup_Node( queue, gindex, &inode );
if (error)

View File

@ -2,7 +2,7 @@
/* */
/* ftcimage.h */
/* */
/* XXX */
/* FreeType Image Cache */
/* */
/* Copyright 2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
@ -82,8 +82,10 @@
FT_ULong max_bytes; /* maximum size of cache in bytes */
FT_ULong num_bytes; /* current size of cache in bytes */
FT_Lru queues_lru; /* static queues lru list */
FT_Lru queues_lru; /* static queues lru list */
FT_ListRec glyphs_lru; /* global lru list of glyph images */
FTC_Image_Queue last_queue; /* small cache */
} FTC_Image_CacheRec;

View File

@ -2,7 +2,7 @@
/* */
/* ftcmanag.h */
/* */
/* XXX */
/* FreeType Cache Manager */
/* */
/* Copyright 2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
@ -317,7 +317,7 @@
if ( !error )
{
/* select the size as the current one for this face */
face->size = *asize;
face->size = size;
if (asize)
*asize = size;

View File

@ -2,7 +2,7 @@
/* */
/* ftcmanag.h */
/* */
/* XXX */
/* FreeType Cache Manager */
/* */
/* Copyright 2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */

2
src/cache/ftlru.c vendored
View File

@ -2,7 +2,7 @@
/* */
/* ftlru.c */
/* */
/* XXX */
/* simple LRU list-cache */
/* */
/* Copyright 2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */

2
src/cache/ftlru.h vendored
View File

@ -2,7 +2,7 @@
/* */
/* ftlru.h */
/* */
/* XXX */
/* simple LRU list-cache */
/* */
/* Copyright 2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */