summaryrefslogtreecommitdiff
path: root/obrender
diff options
context:
space:
mode:
Diffstat (limited to 'obrender')
-rw-r--r--obrender/image.c8
-rw-r--r--obrender/imagecache.c2
-rw-r--r--obrender/imagecache.h4
-rw-r--r--obrender/render.h6
4 files changed, 20 insertions, 0 deletions
diff --git a/obrender/image.c b/obrender/image.c
index 924504fd..c65cd2a5 100644
--- a/obrender/image.c
+++ b/obrender/image.c
@@ -325,6 +325,12 @@ RrImage* RrImageNew(RrImageCache *cache)
return self;
}
+/*! Set function that will be called just before RrImage is destroyed. */
+void RrImageSetDestroyFunc(RrImage *image, RrImageDestroyFunc func)
+{
+ image->destroy_func = func;
+}
+
void RrImageRef(RrImage *self)
{
++self->ref;
@@ -339,6 +345,8 @@ void RrImageUnref(RrImage *self)
"Image 0x%lx", (gulong)self);
#endif
*/
+ if (self->destroy_func)
+ self->destroy_func(self);
while (self->n_original > 0)
RemovePicture(self, &self->original, 0, &self->n_original);
while (self->n_resized > 0)
diff --git a/obrender/imagecache.c b/obrender/imagecache.c
index 9c605f9d..fde1e7a0 100644
--- a/obrender/imagecache.c
+++ b/obrender/imagecache.c
@@ -34,6 +34,7 @@ RrImageCache* RrImageCacheNew(gint max_resized_saved)
self->max_resized_saved = max_resized_saved;
self->table = g_hash_table_new((GHashFunc)RrImagePicHash,
(GEqualFunc)RrImagePicEqual);
+ self->file_name_table = NULL;
return self;
}
@@ -46,6 +47,7 @@ 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_free(self);
diff --git a/obrender/imagecache.h b/obrender/imagecache.h
index 4ad2deae..a61fae67 100644
--- a/obrender/imagecache.h
+++ b/obrender/imagecache.h
@@ -46,6 +46,10 @@ struct _RrImageCache {
gint max_resized_saved;
GHashTable *table;
+
+ /* Used to find out if an image file has already been loaded.
+ Quick file_name -> RrImage lookup. */
+ GHashTable *file_name_table;
};
#endif
diff --git a/obrender/render.h b/obrender/render.h
index 7bea1b54..7aa9d698 100644
--- a/obrender/render.h
+++ b/obrender/render.h
@@ -232,6 +232,8 @@ struct _RrImagePic {
gint sum;
};
+typedef void (*RrImageDestroyFunc)(RrImage *image);
+
/*! An RrImage is a sort of meta-image. It can contain multiple versions of
an image at different sizes, which may or may not be completely different
pictures */
@@ -250,6 +252,10 @@ struct _RrImage {
RrImage. */
RrImagePic **resized;
gint n_resized;
+
+ /* This function (if not NULL) will be called just before destroying
+ RrImage. */
+ RrImageDestroyFunc destroy_func;
};
/* these are the same on all endian machines because it seems to be dependant