summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
Diffstat (limited to 'src/display')
-rw-r--r--src/display/cairo-utils.cpp12
-rw-r--r--src/display/cairo-utils.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/src/display/cairo-utils.cpp b/src/display/cairo-utils.cpp
index 90f65c33e..8b75f09a6 100644
--- a/src/display/cairo-utils.cpp
+++ b/src/display/cairo-utils.cpp
@@ -345,6 +345,18 @@ ink_cairo_surface_create_for_argb32_pixbuf(GdkPixbuf *pb)
return pbs;
}
+/** @brief Cleanup function for GdkPixbuf.
+ * This function should be passed as the GdkPixbufDestroyNotify parameter
+ * to gdk_pixbuf_new_from_data when creating a GdkPixbuf backed by
+ * a Cairo surface.
+ */
+void
+ink_cairo_pixbuf_cleanup(guchar *pixels, void *data)
+{
+ cairo_surface_t *surface = reinterpret_cast<cairo_surface_t*>(data);
+ cairo_surface_destroy(surface);
+}
+
/** @brief Create an exact copy of a surface.
* Creates a surface that has the same type, content type, dimensions and contents
* as the specified surface. */
diff --git a/src/display/cairo-utils.h b/src/display/cairo-utils.h
index 0c2ac2dd6..1de88785d 100644
--- a/src/display/cairo-utils.h
+++ b/src/display/cairo-utils.h
@@ -106,6 +106,7 @@ void convert_pixels_argb32_to_pixbuf(guchar *data, int w, int h, int rs);
void convert_pixbuf_normal_to_argb32(GdkPixbuf *);
void convert_pixbuf_argb32_to_normal(GdkPixbuf *);
cairo_surface_t *ink_cairo_surface_create_for_argb32_pixbuf(GdkPixbuf *pb);
+void ink_cairo_pixbuf_cleanup(guchar *pixels, void *surface);
G_GNUC_CONST guint32 argb32_from_pixbuf(guint32 in);
G_GNUC_CONST guint32 pixbuf_from_argb32(guint32 in);