[Xfce4-commits] <xfce4-session:master> Use cairo to draw the fadeout.

Jérôme Guelfucci noreply at xfce.org
Mon Oct 11 23:00:01 CEST 2010


Updating branch refs/heads/master
         to 0aaf32268adbd81225931b216ae851ca8f045a24 (commit)
       from 14cc0d4bd54fb2163460b1c40d27b4e51d33bb85 (commit)

commit 0aaf32268adbd81225931b216ae851ca8f045a24
Author: Jérôme Guelfucci <jeromeg at xfce.org>
Date:   Mon Oct 11 22:56:19 2010 +0200

    Use cairo to draw the fadeout.

 xfce4-session/xfsm-fadeout.c |   46 ++++++++++++-----------------------------
 1 files changed, 14 insertions(+), 32 deletions(-)

diff --git a/xfce4-session/xfsm-fadeout.c b/xfce4-session/xfsm-fadeout.c
index d000151..d2c3889 100644
--- a/xfce4-session/xfsm-fadeout.c
+++ b/xfce4-session/xfsm-fadeout.c
@@ -37,11 +37,6 @@ typedef struct _FoScreen FoScreen;
 
 
 
-static void xfsm_fadeout_drawable_mono (XfsmFadeout *fadeout,
-                                        GdkDrawable *drawable);
-
-
-
 struct _FoScreen
 {
   GdkWindow *window;
@@ -60,12 +55,11 @@ XfsmFadeout*
 xfsm_fadeout_new (GdkDisplay *display)
 {
   GdkWindowAttr  attr;
-  GdkGCValues    values;
   XfsmFadeout   *fadeout;
   GdkWindow     *root;
   GdkCursor     *cursor;
   FoScreen      *screen;
-  GdkGC         *gc;
+  cairo_t       *cr;
   GList         *lp;
   gint           width;
   gint           height;
@@ -86,21 +80,23 @@ xfsm_fadeout_new (GdkDisplay *display)
 
   for (n = 0; n < gdk_display_get_n_screens (display); ++n)
     {
+      GdkPixbuf *root_pixbuf;
+
       screen = g_new (FoScreen, 1);
 
       root = gdk_screen_get_root_window (gdk_display_get_screen (display, n));
       gdk_drawable_get_size (GDK_DRAWABLE (root), &width, &height);
 
-      values.function = GDK_COPY;
-      values.graphics_exposures = FALSE;
-      values.subwindow_mode = TRUE;
-      gc = gdk_gc_new_with_values (root, &values, GDK_GC_FUNCTION | GDK_GC_EXPOSURES | GDK_GC_SUBWINDOW);
-
       screen->backbuf = gdk_pixmap_new (GDK_DRAWABLE (root), width, height, -1);
-      gdk_draw_drawable (GDK_DRAWABLE (screen->backbuf),
-                         gc, GDK_DRAWABLE (root),
-                         0, 0, 0, 0, width, height);
-      xfsm_fadeout_drawable_mono (fadeout, GDK_DRAWABLE (screen->backbuf));
+
+      /* Copy the root window */
+      root_pixbuf = gdk_pixbuf_get_from_drawable (NULL, GDK_DRAWABLE (root), NULL,
+                                                  0, 0, 0, 0, width, height);
+      cr = gdk_cairo_create (GDK_DRAWABLE (screen->backbuf));
+      gdk_cairo_set_source_pixbuf (cr, root_pixbuf, 0, 0);
+      cairo_paint (cr);
+      gdk_cairo_set_source_color (cr, &fadeout->color);
+      cairo_paint_with_alpha (cr, 0.5);
 
       attr.width = width;
       attr.height = height;
@@ -109,7 +105,8 @@ xfsm_fadeout_new (GdkDisplay *display)
                                        | GDK_WA_NOREDIR | GDK_WA_CURSOR);
       gdk_window_set_back_pixmap (screen->window, screen->backbuf, FALSE);
 
-      g_object_unref (G_OBJECT (gc));
+      g_object_unref (root_pixbuf);
+      cairo_destroy (cr);
 
       fadeout->screens = g_list_append (fadeout->screens, screen);
     }
@@ -141,18 +138,3 @@ xfsm_fadeout_destroy (XfsmFadeout *fadeout)
   g_list_free (fadeout->screens);
   g_free (fadeout);
 }
-
-
-static void
-xfsm_fadeout_drawable_mono (XfsmFadeout *fadeout,
-                            GdkDrawable *drawable)
-{
-  cairo_t *cr;
-
-  /* using Xrender gives better results */
-  cr = gdk_cairo_create (drawable);
-  gdk_cairo_set_source_color (cr, &fadeout->color);
-  cairo_paint_with_alpha (cr, 0.5);
-  cairo_destroy (cr);
-}
-



More information about the Xfce4-commits mailing list