From 45956aea21e9c8a279f096a0536826a5d14a9c82 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Tue, 1 Sep 2009 17:05:50 +0200 Subject: [PATCH] Add gdk_cairo_reset_clip This is required to get back the original drawable clip due to non-native windows on a cairo_t. --- gdk/gdk.symbols | 1 + gdk/gdkcairo.c | 28 ++++++++++++++++++++++++++++ gdk/gdkcairo.h | 2 ++ 3 files changed, 31 insertions(+) diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols index 658fc49ef3..7956390d25 100644 --- a/gdk/gdk.symbols +++ b/gdk/gdk.symbols @@ -299,6 +299,7 @@ gdk_fontset_load_for_display #if IN_HEADER(__GDK_CAIRO_H__) #if IN_FILE(__GDK_CAIRO_C__) gdk_cairo_create +gdk_cairo_reset_clip gdk_cairo_set_source_color gdk_cairo_set_source_pixbuf gdk_cairo_set_source_pixmap diff --git a/gdk/gdkcairo.c b/gdk/gdkcairo.c index 9d3ce2d649..ef8ec25627 100644 --- a/gdk/gdkcairo.c +++ b/gdk/gdkcairo.c @@ -59,6 +59,34 @@ gdk_cairo_create (GdkDrawable *drawable) return cr; } +/** + * gdk_cairo_reset_clip: + * @cr: a #cairo_t + * @drawable: a #GdkDrawable + * + * Resets the clip region for a Cairo context created by gdk_cairo_create(). + * + * This resets the clip region to the "empty" state for the given drawable. + * This is required for non-native windows since a direct call to + * cairo_reset_clip() would unset the clip region inherited from the + * drawable (i.e. the window clip region), and thus let you e.g. + * draw outside your window. + * + * This is rarely needed though, since most code just create a new cairo_t + * using gdk_cairo_create() each time they want to draw something. + * + * Since: 2.18 + **/ +void +gdk_cairo_reset_clip (cairo_t *cr, + GdkDrawable *drawable) +{ + cairo_reset_clip (cr); + + if (GDK_DRAWABLE_GET_CLASS (drawable)->set_cairo_clip) + GDK_DRAWABLE_GET_CLASS (drawable)->set_cairo_clip (drawable, cr); +} + /** * gdk_cairo_set_source_color: * @cr: a #cairo_t diff --git a/gdk/gdkcairo.h b/gdk/gdkcairo.h index 70d79de882..d74182d0f8 100644 --- a/gdk/gdkcairo.h +++ b/gdk/gdkcairo.h @@ -31,6 +31,8 @@ G_BEGIN_DECLS cairo_t *gdk_cairo_create (GdkDrawable *drawable); +void gdk_cairo_reset_clip (cairo_t *cairo_t, + GdkDrawable *drawable); void gdk_cairo_set_source_color (cairo_t *cr, const GdkColor *color);