X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=obrender%2Fimagecache.c;h=ad1183e4f6cf8784442c73cfea24b921e69548ff;hb=918efe8e49ba95b093ba6ba4f893370669483bcd;hp=fde1e7a06ce5e03805f9fdd357006ff3c29704f5;hpb=0352abfa88892bc17bdff2022745e3c1b312edd0;p=chaz%2Fopenbox diff --git a/obrender/imagecache.c b/obrender/imagecache.c index fde1e7a0..ad1183e4 100644 --- a/obrender/imagecache.c +++ b/obrender/imagecache.c @@ -29,12 +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->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_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))