From: Danny Baumann Date: Mon, 6 Sep 2010 09:25:02 +0000 (+0200) Subject: Replace old gdk_draw_drawable method calls with cairo equivalents. X-Git-Url: http://gitweb.compiz.org/?p=compiz%2Fcore;a=commitdiff_plain;h=777e5ecdb197105f770e7bcedd83eb54c53457f3 Replace old gdk_draw_drawable method calls with cairo equivalents. --- diff --git a/gtk/window-decorator/gtk-window-decorator.c b/gtk/window-decorator/gtk-window-decorator.c index 18b907e..adb20d5 100644 --- a/gtk/window-decorator/gtk-window-decorator.c +++ b/gtk/window-decorator/gtk-window-decorator.c @@ -380,7 +380,7 @@ typedef struct _decor { guint button_states[BUTTON_NUM]; GdkPixmap *pixmap; GdkPixmap *buffer_pixmap; - GdkGC *gc; + cairo_t *cr; decor_layout_t border_layout; decor_context_t *context; decor_shadow_t *shadow; @@ -918,6 +918,17 @@ button_state_paint (cairo_t *cr, } static void +copy_to_front_buffer (decor_t *d) +{ + if (!d->buffer_pixmap) + return; + + cairo_set_operator (d->cr, CAIRO_OPERATOR_SOURCE); + gdk_cairo_set_source_pixmap (d->cr, d->buffer_pixmap, 0, 0); + cairo_paint (d->cr); +} + +static void draw_window_decoration (decor_t *d) { cairo_t *cr; @@ -1298,16 +1309,7 @@ draw_window_decoration (decor_t *d) cairo_destroy (cr); - if (d->buffer_pixmap) - gdk_draw_drawable (d->pixmap, - d->gc, - d->buffer_pixmap, - 0, - 0, - 0, - 0, - d->width, - d->height); + copy_to_front_buffer (d); if (d->prop_xid) { @@ -2103,16 +2105,7 @@ meta_draw_window_decoration (decor_t *d) XRenderFreePicture (xdisplay, src); } - if (d->buffer_pixmap) - gdk_draw_drawable (d->pixmap, - d->gc, - d->buffer_pixmap, - 0, - 0, - 0, - 0, - d->width, - d->height); + copy_to_front_buffer (d); if (d->prop_xid) { @@ -2361,18 +2354,9 @@ draw_switcher_background (decor_t *d) alpha); cairo_stroke (cr); - cairo_destroy (cr); - gdk_draw_drawable (d->pixmap, - d->gc, - d->buffer_pixmap, - 0, - 0, - 0, - 0, - d->width, - d->height); + copy_to_front_buffer (d); pixel = ((((a * style->bg[GTK_STATE_NORMAL].blue ) >> 24) & 0x0000ff) | (((a * style->bg[GTK_STATE_NORMAL].green) >> 16) & 0x00ff00) | @@ -2439,15 +2423,7 @@ draw_switcher_foreground (decor_t *d) cairo_destroy (cr); - gdk_draw_drawable (d->pixmap, - d->gc, - d->buffer_pixmap, - 0, - 0, - 0, - 0, - d->width, - d->height); + copy_to_front_buffer (d); } static void @@ -3512,15 +3488,15 @@ update_window_decoration_size (WnckWindow *win) if (d->buffer_pixmap) g_object_unref (G_OBJECT (d->buffer_pixmap)); - if (d->gc) - g_object_unref (G_OBJECT (d->gc)); - if (d->picture) XRenderFreePicture (xdisplay, d->picture); + if (d->cr) + cairo_destroy (d->cr); + d->pixmap = pixmap; d->buffer_pixmap = buffer_pixmap; - d->gc = gdk_gc_new (pixmap); + d->cr = gdk_cairo_create (pixmap); d->picture = picture; @@ -3642,6 +3618,7 @@ update_switcher_window (WnckWindow *win, { g_object_ref (G_OBJECT (switcher_pixmap)); d->pixmap = switcher_pixmap; + d->cr = gdk_cairo_create (switcher_pixmap); } if (!d->buffer_pixmap && switcher_buffer_pixmap) @@ -3729,9 +3706,6 @@ update_switcher_window (WnckWindow *win, if (width == d->width && height == d->height) { - if (!d->gc) - d->gc = gdk_gc_new (d->pixmap); - if (!d->picture) d->picture = XRenderCreatePicture (xdisplay, @@ -3765,8 +3739,8 @@ update_switcher_window (WnckWindow *win, if (d->buffer_pixmap) g_object_unref (G_OBJECT (d->buffer_pixmap)); - if (d->gc) - g_object_unref (G_OBJECT (d->gc)); + if (d->cr) + cairo_destroy (d->cr); if (d->picture) XRenderFreePicture (xdisplay, d->picture); @@ -3782,7 +3756,7 @@ update_switcher_window (WnckWindow *win, d->pixmap = pixmap; d->buffer_pixmap = buffer_pixmap; - d->gc = gdk_gc_new (pixmap); + d->cr = gdk_cairo_create (pixmap); d->picture = XRenderCreatePicture (xdisplay, GDK_PIXMAP_XID (buffer_pixmap), xformat, 0, NULL); @@ -3817,10 +3791,10 @@ remove_frame_window (WnckWindow *win) d->buffer_pixmap = NULL; } - if (d->gc) + if (d->cr) { - g_object_unref (G_OBJECT (d->gc)); - d->gc = NULL; + cairo_destroy (d->cr); + d->cr = NULL; } if (d->picture)