X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=obrender%2Frender.h;h=64c2f6a114a1d2aa17aa8b700c103e9c13f0f5ce;hb=31f0c8c1ad8c9acf369ab8336765f4bf673b8e21;hp=7bea1b54bc75b7b639383676e2463a843edead0a;hpb=7aae8cc5262c1b36e3196845d62489b76af9063f;p=chaz%2Fopenbox diff --git a/obrender/render.h b/obrender/render.h index 7bea1b54..64c2f6a1 100644 --- a/obrender/render.h +++ b/obrender/render.h @@ -230,8 +230,14 @@ struct _RrImagePic { /* The sum of all the pixels. This is used to compare pictures if their hashes match. */ gint sum; + /* The name of the image. This is used to determine + if the named image already is loaded. May be NULL if the image + was not loaded from disk. */ + gchar *name; }; +typedef void (*RrImageDestroyFunc)(RrImage *image, gpointer data); + /*! 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 +256,11 @@ struct _RrImage { RrImage. */ RrImagePic **resized; gint n_resized; + + /* This function (if not NULL) will be called just before destroying + RrImage. */ + RrImageDestroyFunc destroy_func; + gpointer destroy_data; }; /* these are the same on all endian machines because it seems to be dependant @@ -337,12 +348,19 @@ void RrImageCacheUnref(RrImageCache *self); /*! Finds an image in the cache, if it is already in there */ RrImage* RrImageCacheFind(RrImageCache *self, RrPixel32 *data, gint w, gint h); +/*! Finds an image in the cache, by searching for the name of the image */ +RrImage* RrImageCacheFindName(RrImageCache *self, + const gchar *name); RrImage* RrImageNew(RrImageCache *cache); void RrImageRef(RrImage *im); void RrImageUnref(RrImage *im); -void RrImageAddPicture(RrImage *im, RrPixel32 *data, gint w, gint h); +void RrImageAddPicture(RrImage *im, const RrPixel32 *data, gint w, gint h); +/*! Adds a picture by name, from a file on disk. + @name Can be a full path to an image, or it can be a name as per the + freedesktop.org icon spec. */ +gboolean RrImageAddPictureName(RrImage *im, const gchar *name); void RrImageRemovePicture(RrImage *im, gint w, gint h); G_END_DECLS