Fix clipping of drawn pixbufs in the no-render case

The fallback pixbuf rendering case ends up calling gdk_draw_image() on the
destination drawable wrapper, which resets the previously set clip region.
So, we need to manually get the impl and draw on that directly.

This fixes bug 592752 where we don't clip pixbuf rendering on non-render
Xservers.
This commit is contained in:
Alexander Larsson 2009-08-25 08:57:10 +02:00
parent 9e12297d69
commit 0ad0646daf

View File

@ -1638,11 +1638,13 @@ gdk_drawable_real_draw_pixbuf (GdkDrawable *drawable,
have already retargeted the destination to any have already retargeted the destination to any
impl window and set the clip, so what we really impl window and set the clip, so what we really
want to do is draw directly on the impl, ignoring want to do is draw directly on the impl, ignoring
client side subwindows. */ client side subwindows. We also use the impl
in the pixmap target case to avoid resetting the
already set clip on the GC. */
if (GDK_IS_WINDOW (drawable)) if (GDK_IS_WINDOW (drawable))
real_drawable = GDK_WINDOW_OBJECT (drawable)->impl; real_drawable = GDK_WINDOW_OBJECT (drawable)->impl;
else else
real_drawable = drawable; real_drawable = GDK_PIXMAP_OBJECT (drawable)->impl;
if (pixbuf->has_alpha) if (pixbuf->has_alpha)
{ {