X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=obrender%2Fimagecache.c;h=036ac121091a5b8fcf8a03031fd560f274193df3;hb=8c9fb63baaf7d6245cccc584359bf09359663bea;hp=fde1e7a06ce5e03805f9fdd357006ff3c29704f5;hpb=fc120a75308855b738a42b1fde9d6e0d276f3bf9;p=chaz%2Fopenbox 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))