X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=obrender%2Fimagecache.c;h=ad1183e4f6cf8784442c73cfea24b921e69548ff;hb=b79b70620fbf4b73534d964bfbf647e268ece404;hp=9c605f9d5a69885c4c4608429c5a7e74b663e217;hpb=7aae8cc5262c1b36e3196845d62489b76af9063f;p=chaz%2Fopenbox diff --git a/obrender/imagecache.c b/obrender/imagecache.c index 9c605f9d..ad1183e4 100644 --- a/obrender/imagecache.c +++ b/obrender/imagecache.c @@ -29,11 +29,12 @@ RrImageCache* RrImageCacheNew(gint max_resized_saved) g_assert(max_resized_saved >= 0); - self = g_new(RrImageCache, 1); + self = g_slice_new(RrImageCache); self->ref = 1; self->max_resized_saved = max_resized_saved; - self->table = g_hash_table_new((GHashFunc)RrImagePicHash, - (GEqualFunc)RrImagePicEqual); + 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; } @@ -45,21 +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_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_free(self); + g_assert(g_hash_table_size(self->name_table) == 0); + g_hash_table_destroy(self->name_table); + self->name_table = NULL; + + g_slice_free(RrImageCache, 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))