if (private->bg_pixmap == GDK_PARENT_RELATIVE_BG && private->parent)
{
+ x_offset += private->x;
+ y_offset += private->y;
gdk_window_set_bg_pattern (GDK_WINDOW (private->parent), cr,
- private->x, private->y);
+ x_offset, y_offset);
}
else if (private->bg_pixmap &&
private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
cairo_pattern_t *pattern = cairo_pattern_create_for_surface (surface);
cairo_surface_destroy (surface);
- if (x_offset != 0 || y_offset)
+ if (x_offset != 0 || y_offset != 0)
{
- cairo_matrix_t *matrix = cairo_matrix_create ();
- cairo_matrix_translate (matrix, x_offset, y_offset);
- cairo_pattern_set_matrix (pattern, matrix);
- cairo_matrix_destroy (matrix);
+ cairo_matrix_t matrix;
+ cairo_matrix_init_translate (&matrix, x_offset, y_offset);
+ cairo_pattern_set_matrix (pattern, &matrix);
}
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
}
}
-static void
-region_path (cairo_t *cr,
- GdkRegion *region)
-{
- GdkRectangle *rectangles;
- int n_rectangles, i;
-
- gdk_region_get_rectangles (region, &rectangles, &n_rectangles);
- for (i = 0; i < n_rectangles; i++)
- {
- cairo_rectangle (cr,
- rectangles[i].x, rectangles[i].y,
- rectangles[i].width, rectangles[i].height);
- }
- g_free (rectangles);
-}
-
static void
gdk_window_clear_backing_rect (GdkWindow *window,
gint x,
if (GDK_WINDOW_DESTROYED (window))
return;
- cr = cairo_create ();
- cairo_set_target_surface (cr, paint->surface);
+ cr = cairo_create (paint->surface);
gdk_window_set_bg_pattern (window, cr, 0, 0);
cairo_rectangle (cr, x, y, width, height);
cairo_clip (cr);
- region_path (cr, paint->region);
+ gdk_cairo_region (cr, paint->region);
cairo_fill (cr);
cairo_destroy (cr);