[gtk+] gdk: Use gdk_window_get_background_pixmap() when setting up paint
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] gdk: Use gdk_window_get_background_pixmap() when setting up paint
- Date: Mon, 16 Aug 2010 17:49:06 +0000 (UTC)
commit 434b3e1072e20c6970bcd9ef3d0b07bf648619b9
Author: Benjamin Otte <otte redhat com>
Date: Mon Aug 16 00:08:58 2010 +0200
gdk: Use gdk_window_get_background_pixmap() when setting up paint
gdk/gdkwindow.c | 52 +++++++++++++++++-----------------------------------
1 files changed, 17 insertions(+), 35 deletions(-)
---
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index e7380c6..bb2c5eb 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -3659,50 +3659,32 @@ gdk_window_get_visible_region (GdkDrawable *drawable)
static cairo_t *
setup_backing_rect (GdkWindow *window, GdkWindowPaint *paint, int x_offset_cairo, int y_offset_cairo)
{
- GdkWindowObject *private = (GdkWindowObject *)window;
+ GdkWindowObject *private = (GdkWindowObject *) window;
+ GdkWindowObject *bg_private;
+ cairo_pattern_t *pattern;
+ int x_offset = 0, y_offset = 0;
cairo_t *cr;
- if (private->bg_pixmap == GDK_PARENT_RELATIVE_BG && private->parent)
- {
- GdkWindowPaint tmp_paint;
-
- tmp_paint = *paint;
- tmp_paint.x_offset += private->x;
- tmp_paint.y_offset += private->y;
+ cr = cairo_create (paint->surface);
- x_offset_cairo += private->x;
- y_offset_cairo += private->y;
-
- cr = setup_backing_rect (GDK_WINDOW (private->parent), &tmp_paint, x_offset_cairo, y_offset_cairo);
- }
- else if (private->bg_pixmap &&
- private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
- private->bg_pixmap != GDK_NO_BG)
+ for (bg_private = private; bg_private; bg_private = bg_private->parent)
{
- cairo_surface_t *surface = _gdk_drawable_ref_cairo_surface (private->bg_pixmap);
- cairo_pattern_t *pattern = cairo_pattern_create_for_surface (surface);
- cairo_surface_destroy (surface);
-
- if (x_offset_cairo != 0 || y_offset_cairo != 0)
- {
- cairo_matrix_t matrix;
- cairo_matrix_init_translate (&matrix, x_offset_cairo, y_offset_cairo);
- cairo_pattern_set_matrix (pattern, &matrix);
- }
-
- cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
+ pattern = gdk_window_get_background_pattern ((GdkWindow *) bg_private);
+ if (pattern)
+ break;
- cr = cairo_create (paint->surface);
+ x_offset += bg_private->x;
+ y_offset += bg_private->y;
+ }
+ if (pattern)
+ {
+ cairo_translate (cr, -x_offset, -y_offset);
cairo_set_source (cr, pattern);
- cairo_pattern_destroy (pattern);
+ cairo_translate (cr, x_offset, y_offset);
}
else
- {
- cr = cairo_create (paint->surface);
-
- gdk_cairo_set_source_color (cr, &private->bg_color);
- }
+ gdk_cairo_set_source_color (cr, &private->bg_color);
return cr;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]