summaryrefslogtreecommitdiffstats
path: root/src/display/cairo-utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/display/cairo-utils.cpp')
-rw-r--r--src/display/cairo-utils.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/display/cairo-utils.cpp b/src/display/cairo-utils.cpp
index 8aaf838ed..bb401dc87 100644
--- a/src/display/cairo-utils.cpp
+++ b/src/display/cairo-utils.cpp
@@ -315,6 +315,20 @@ ink_cairo_pattern_set_matrix(cairo_pattern_t *cp, Geom::Matrix const &m)
cairo_pattern_set_matrix(cp, &cm);
}
+void
+ink_cairo_set_source_argb32_pixbuf(cairo_t *ct, GdkPixbuf *pb, double x, double y)
+{
+ guchar *data = gdk_pixbuf_get_pixels(pb);
+ int w = gdk_pixbuf_get_width(pb);
+ int h = gdk_pixbuf_get_height(pb);
+ int stride = gdk_pixbuf_get_rowstride(pb);
+
+ cairo_surface_t *pbs = cairo_image_surface_create_for_data(
+ data, CAIRO_FORMAT_ARGB32, w, h, stride);
+ cairo_set_source_surface(ct, pbs, x, y);
+ cairo_surface_destroy(pbs);
+}
+
// taken from Cairo sources
static inline guint32 premul_alpha(guint32 color, guint32 alpha)
{