Modified paint_all so that it doesn't draw off-screen windows, and doesn't
authordolio <dolio>
Wed, 29 Sep 2004 18:33:42 +0000 (18:33 +0000)
committerdolio <dolio>
Wed, 29 Sep 2004 18:33:42 +0000 (18:33 +0000)
    draw shadows on desktop 'root' windows.

ChangeLog
xcompmgr.c

index d04f4f8..cd9c99a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-09-29  Dan Doel  <dolio@case.edu>
+
+       * xcompmgr.c: (paint_all):
+       Added some small optimizations by Thomas Luebking. paint_all
+       now avoids drawing windows that don't appear on the screen,
+       and doesn't bother drawing shadows on desktop windows.
+
 2004-09-23  Dan Doel  <dolio@case.edu>
 
        * xcompmgr.1:
 2004-09-23  Dan Doel  <dolio@case.edu>
 
        * xcompmgr.1:
index 8eaa0a2..c39b7b1 100644 (file)
@@ -942,6 +942,10 @@ paint_all (Display *dpy, XserverRegion region)
        /* never painted, ignore it */
        if (!w->damaged)
            continue;
        /* never painted, ignore it */
        if (!w->damaged)
            continue;
+       /* if invisible, ignore it */
+       if (w->a.x + w->a.width < 1 || w->a.y + w->a.height < 1
+           || w->a.x >= root_width || w->a.y >= root_height)
+           continue;
        if (!w->picture)
        {
            XRenderPictureAttributes    pa;
        if (!w->picture)
        {
            XRenderPictureAttributes    pa;
@@ -1030,6 +1034,9 @@ paint_all (Display *dpy, XserverRegion region)
        case CompSimple:
            break;
        case CompServerShadows:
        case CompSimple:
            break;
        case CompServerShadows:
+           /* dont' bother drawing shadows on desktop windows */
+           if (w->windowType == winDesktopAtom)
+               break;
            set_ignore (dpy, NextRequest (dpy));
            if (w->opacity != OPAQUE && !w->shadowPict)
                w->shadowPict = solid_picture (dpy, True,
            set_ignore (dpy, NextRequest (dpy));
            if (w->opacity != OPAQUE && !w->shadowPict)
                w->shadowPict = solid_picture (dpy, True,
@@ -1044,7 +1051,8 @@ paint_all (Display *dpy, XserverRegion region)
                              w->shadow_width, w->shadow_height);
            break;
        case CompClientShadows:
                              w->shadow_width, w->shadow_height);
            break;
        case CompClientShadows:
-           if (w->shadow)
+           /* don't bother drawing shadows on desktop windows */
+           if (w->shadow && w->windowType != winDesktopAtom)
            {
                XRenderComposite (dpy, PictOpOver, blackPicture, w->shadow, rootBuffer,
                                  0, 0, 0, 0,
            {
                XRenderComposite (dpy, PictOpOver, blackPicture, w->shadow, rootBuffer,
                                  0, 0, 0, 0,