Make sure we handle clipping in gdk_window_draw_pixbuf if gc == NULL

This commit is contained in:
Alexander Larsson 2009-01-16 15:45:18 +01:00
parent 78bbac87ed
commit e918b64088

View File

@ -3756,8 +3756,13 @@ gdk_window_draw_pixbuf (GdkDrawable *drawable,
if (GDK_WINDOW_DESTROYED (drawable)) if (GDK_WINDOW_DESTROYED (drawable))
return; return;
if (gc) /* If no gc => no user clipping, but we need clipping
for window emulation, so use a scratch gc */
if (!gc)
gc = _gdk_drawable_get_scratch_gc (drawable, FALSE);
/* Need block to make OFFSET_GC macro to work */
{ {
OFFSET_GC (gc); OFFSET_GC (gc);
@ -3783,29 +3788,6 @@ gdk_window_draw_pixbuf (GdkDrawable *drawable,
RESTORE_GC (gc); RESTORE_GC (gc);
} }
else
{
gint x_offset, y_offset;
gdk_window_get_offsets (drawable, &x_offset, &y_offset);
if (private->paint_stack)
{
GdkWindowPaint *paint = private->paint_stack->data;
/* TODO: Do paint clipping here... */
gdk_draw_pixbuf (paint->pixmap, gc, pixbuf, src_x, src_y,
dest_x - x_offset, dest_y - y_offset,
width, height,
dither, x_dither - x_offset, y_dither - y_offset);
}
else
{
/* TODO: No GC passed in, but still want clipping here... */
gdk_draw_pixbuf (private->impl, gc, pixbuf, src_x, src_y,
dest_x - x_offset, dest_y - y_offset,
width, height,
dither, x_dither, y_dither);
}
}
} }
static void static void