summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdk/gdkcairo.c13
-rw-r--r--gdk/gdkinternals.h2
2 files changed, 13 insertions, 2 deletions
diff --git a/gdk/gdkcairo.c b/gdk/gdkcairo.c
index 2ae8b09459..c19296d403 100644
--- a/gdk/gdkcairo.c
+++ b/gdk/gdkcairo.c
@@ -195,6 +195,16 @@ gdk_cairo_set_source_pixbuf (cairo_t *cr,
gdouble pixbuf_x,
gdouble pixbuf_y)
{
+ cairo_surface_t *surface;
+
+ surface = _gdk_cairo_create_surface_for_pixbuf (pixbuf);
+ cairo_set_source_surface (cr, surface, pixbuf_x, pixbuf_y);
+ cairo_surface_destroy (surface);
+}
+
+cairo_surface_t *
+_gdk_cairo_create_surface_for_pixbuf (const GdkPixbuf *pixbuf)
+{
gint width = gdk_pixbuf_get_width (pixbuf);
gint height = gdk_pixbuf_get_height (pixbuf);
guchar *gdk_pixels = gdk_pixbuf_get_pixels (pixbuf);
@@ -277,8 +287,7 @@ gdk_cairo_set_source_pixbuf (cairo_t *cr,
cairo_pixels += cairo_stride;
}
- cairo_set_source_surface (cr, surface, pixbuf_x, pixbuf_y);
- cairo_surface_destroy (surface);
+ return surface;
}
/**
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index bb33e090f7..938c020f9b 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -285,6 +285,8 @@ void gdk_synthesize_window_state (GdkWindow *window,
gboolean _gdk_cairo_surface_extents (cairo_surface_t *surface,
GdkRectangle *extents);
+cairo_surface_t *_gdk_cairo_create_surface_for_pixbuf (const GdkPixbuf *pixbuf);
+
/*************************************
* Interfaces used by windowing code *
*************************************/