summaryrefslogtreecommitdiff
path: root/obrender/imagecache.c
diff options
context:
space:
mode:
Diffstat (limited to 'obrender/imagecache.c')
-rw-r--r--obrender/imagecache.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/obrender/imagecache.c b/obrender/imagecache.c
index fde1e7a0..036ac121 100644
--- a/obrender/imagecache.c
+++ b/obrender/imagecache.c
@@ -32,9 +32,9 @@ RrImageCache* RrImageCacheNew(gint max_resized_saved)
self = g_new(RrImageCache, 1);
self->ref = 1;
self->max_resized_saved = max_resized_saved;
- self->table = g_hash_table_new((GHashFunc)RrImagePicHash,
- (GEqualFunc)RrImagePicEqual);
- self->file_name_table = NULL;
+ self->pic_table = g_hash_table_new((GHashFunc)RrImagePicHash,
+ (GEqualFunc)RrImagePicEqual);
+ self->name_table = g_hash_table_new(g_str_hash, g_str_equal);
return self;
}
@@ -46,22 +46,31 @@ void RrImageCacheRef(RrImageCache *self)
void RrImageCacheUnref(RrImageCache *self)
{
if (self && --self->ref == 0) {
- g_assert(g_hash_table_size(self->table) == 0);
- g_assert(self->file_name_table == NULL);
- g_hash_table_unref(self->table);
+ g_assert(g_hash_table_size(self->pic_table) == 0);
+ g_hash_table_unref(self->pic_table);
+ self->pic_table = NULL;
+
+ g_assert(g_hash_table_size(self->name_table) == 0);
+ g_hash_table_destroy(self->name_table);
+ self->name_table = NULL;
g_free(self);
}
}
+RrImage* RrImageCacheFindName(RrImageCache *self, const gchar *name)
+{
+ return g_hash_table_lookup(self->name_table, name);
+}
+
/*! Finds an image in the cache, if it is already in there */
RrImage* RrImageCacheFind(RrImageCache *self,
RrPixel32 *data, gint w, gint h)
{
RrImagePic pic;
- RrImagePicInit(&pic, w, h, data);
- return g_hash_table_lookup(self->table, &pic);
+ RrImagePicInit(&pic, NULL, w, h, data);
+ return g_hash_table_lookup(self->pic_table, &pic);
}
#define hashsize(n) ((RrPixel32)1<<(n))