diff options
author | Benjamin Otte <otte@redhat.com> | 2010-10-05 23:22:25 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2010-10-05 23:22:55 +0200 |
commit | 04c630d0fd713a683e6a1eb8f3bd7fb9c70a2b1d (patch) | |
tree | 27936b803052ad897e28e7aeca5096f8c8bb4947 /gtk/gtkviewport.c | |
parent | 2a1650843d0eb4d75e03f6c25aeaf5388de499a1 (diff) | |
download | gtk+-04c630d0fd713a683e6a1eb8f3bd7fb9c70a2b1d.tar.gz |
viewport: Clip contents properly when called via gtk_widget_draw()
Diffstat (limited to 'gtk/gtkviewport.c')
-rw-r--r-- | gtk/gtkviewport.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c index 7f24b54ace..5988682330 100644 --- a/gtk/gtkviewport.c +++ b/gtk/gtkviewport.c @@ -784,6 +784,21 @@ gtk_viewport_draw (GtkWidget *widget, gdk_window_get_height (gtk_widget_get_window (widget))); } + if (gtk_cairo_should_draw_window (cr, priv->view_window)) + { + /* This is a cute hack to ensure the contents of bin_window are + * restricted to where they are visible. We only need to do this + * clipping when called via gtk_widget_draw() and not in expose + * events. And when that happens every window (including this one) + * should be drawn. + */ + gdk_window_get_position (priv->view_window, &x, &y); + cairo_rectangle (cr, x, y, + gdk_window_get_width (priv->view_window), + gdk_window_get_height (priv->view_window)); + cairo_clip (cr); + } + if (gtk_cairo_should_draw_window (cr, priv->bin_window)) { gdk_window_get_position (priv->bin_window, &x, &y); |