Big rework of image.c and the image cache system.
[dana/openbox.git] / obrender / imagecache.c
index 9c605f9..909d874 100644 (file)
@@ -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,16 @@ 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;
 
-/*! 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);
+        g_slice_free(RrImageCache, self);
+    }
 }
 
 #define hashsize(n) ((RrPixel32)1<<(n))