[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