NEWS                                        |   30 
 configure.ac                                |   18 
 gtk/window-decorator/gtk-window-decorator.c |  237 +-
 include/compiz-core.h                       |   31 
 include/compiz-cube.h                       |   71 
 include/decoration.h                        |   63 
 kde/window-decorator-kde4/decorator.cpp     |   17 
 kde/window-decorator-kde4/main.cpp          |    3 
 kde/window-decorator-kde4/switcher.cpp      |  121 -
 kde/window-decorator-kde4/switcher.h        |    4 
 kde/window-decorator-kde4/window.cpp        |   82 
 kde/window-decorator-kde4/window.h          |   12 
 kde/window-decorator/window.cpp             |   80 
 libdecoration/decoration.c                  |  435 ++--
 metadata/Makefile.am                        |    1 
 metadata/core.xml.in                        |    5 
 metadata/cube.xml.in                        |    5 
 metadata/place.xml.in                       |   32 
 metadata/plane.xml.in                       |   83 
 metadata/switcher.xml.in                    |   18 
 plugins/Makefile.am                         |   17 
 plugins/blur.c                              |  329 +--
 plugins/cube.c                              |  380 ----
 plugins/place.c                             | 1884 +++++++++------------
 plugins/plane.c                             |  766 --------
 plugins/resize.c                            |   19 
 plugins/rotate.c                            |   10 
 plugins/scale.c                             |    5 
 plugins/switcher.c                          |  287 +--
 po/POTFILES.in                              |    1 
 po/af.po                                    |  597 ++----
 po/ar.po                                    |  570 ++----
 po/bg.po                                    |  767 ++++----
 po/bn.po                                    |  711 ++++----
 po/bn_IN.po                                 |  711 ++++----
 po/bs.po                                    |  600 ++----
 po/ca.po                                    |  853 ++++-----
 po/cs.po                                    |  780 ++++----
 po/cy.po                                    |  606 ++----
 po/da.po                                    |  778 ++++----
 po/de.po                                    |  722 ++++----
 po/el.po                                    |  751 ++++----
 po/en_GB.po                                 |  765 ++++----
 po/en_US.po                                 |  610 +++---
 po/es.po                                    |  743 ++++----
 po/et.po                                    |  771 ++++----
 po/eu.po                                    |  708 ++++----
 po/fi.po                                    |  789 ++++----
 po/fr.po                                    |  708 ++++----
 po/gl.po                                    |  708 ++++----
 po/gu.po                                    |  714 ++++----
 po/he.po                                    | 2323 +++++++++++---------------
 po/hi.po                                    |  778 ++++----
 po/hr.po                                    |  765 ++++----
 po/hu.po                                    |  738 ++++----
 po/id.po                                    |  595 ++----
 po/it.po                                    |  736 ++++----
 po/ja.po                                    | 2035 +++--------------------
 po/ka.po                                    |  570 ++----
 po/km.po                                    |  767 ++++----
 po/ko.po                                    |  760 ++++----
 po/lo.po                                    |  570 ++----
 po/lt.po                                    |  767 ++++----
 po/mk.po                                    |  570 ++----
 po/mr.po                                    |  595 ++----
 po/nb.po                                    |  722 ++++----
 po/nl.po                                    |  731 ++++----
 po/or.po                                    |  715 ++++----
 po/pa.po                                    |  779 ++++----
 po/pl.po                                    | 1019 +++++------
 po/pt.po                                    |  769 ++++----
 po/pt_BR.po                                 |  707 ++++----
 po/ro.po                                    | 1846 ++++++++++----------
 po/ru.po                                    | 1563 ++++-------------
 po/sk.po                                    | 2472 ++++++++++------------------
 po/sl.po                                    |  767 ++++----
 po/sr.po                                    |  866 ++++-----
 po/sv.po                                    |  705 ++++---
 po/ta.po                                    |  570 ++----
 po/tr.po                                    |  767 ++++----
 po/uk.po                                    |  843 ++++-----
 po/vi.po                                    |  570 ++----
 po/xh.po                                    |  595 ++----
 po/zh_CN.po                                 |  771 ++++----
 po/zh_TW.po                                 |  806 ++++-----
 po/zu.po                                    |  595 ++----
 src/display.c                               |   17 
 src/event.c                                 |   65 
 src/paint.c                                 |  360 ++--
 src/screen.c                                |   49 
 src/session.c                               |   25 
 src/texture.c                               |   32 
 src/window.c                                |  230 +-
 93 files changed, 23864 insertions(+), 28669 deletions(-)

New commits:
commit 9b739fd78cb3f43fa56e14294b171b695340952e
Author: Dennis Kasprzyk <[EMAIL PROTECTED]>
Date:   Thu May 29 14:06:34 2008 +0200

    Add NEWS entry and bump version for 0.7.6 release.

diff --git a/NEWS b/NEWS
index a468c32..9e071a7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,33 @@
+Release 0.7.6 (2008-05-29 Dennis Kasprzyk <[EMAIL PROTECTED]>)
+=========================================================================
+Development release.
+
+Rewrite of place plugin, which significantly improves multi-output
+behaviour.
+
+Configurable multi-output behaviour in place.
+
+Removed plane plugin. Former plane plugin users are encouraged to use
+the wall plugin of Compiz Fusion.
+
+Removed cube wallpaper painting. Users are encouraged to use the Compiz
+Fusion wallpaper plugin instead.
+
+Place plugin viewport placement viewport numbers are now 1-based.
+
+Panel and desktop selection mode in switcher plugin.
+
+Improved painting behaviour when using overlapping outputs.
+
+Gtk-window-decorator now emits accessibility events when switching.
+
+Gtk-window-decorator behaviour when using Metacity themes has been
+improved to match Metacity better.
+
+KDE4-window-decorator has been adapted to current KDE4 API.
+
+Various bugfixes.
+
 Release 0.7.4 (2008-03-04 Dennis Kasprzyk <[EMAIL PROTECTED]>)
 =========================================================================
 Development release.
diff --git a/configure.ac b/configure.ac
index aea3d27..5ff0cfe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@ dnl An odd micro number indicates in-progress development.
 dnl An even micro number indicates a released version.
 m4_define(compiz_version_major, 0)
 m4_define(compiz_version_minor, 7)
-m4_define(compiz_version_micro, 5)
+m4_define(compiz_version_micro, 6)
 
 AC_INIT([compiz],
        [compiz_version_major().compiz_version_minor().compiz_version_micro()],

commit e1126830348f99762acae92ffa4a16df2438f1de
Author: Dennis Kasprzyk <[EMAIL PROTECTED]>
Date:   Thu May 29 13:51:56 2008 +0200

    Applied libdecoration changes to gtk window decorator.

diff --git a/gtk/window-decorator/gtk-window-decorator.c 
b/gtk/window-decorator/gtk-window-decorator.c
index 29d0181..0ebb2d7 100644
--- a/gtk/window-decorator/gtk-window-decorator.c
+++ b/gtk/window-decorator/gtk-window-decorator.c
@@ -1998,15 +1998,17 @@ meta_draw_window_decoration (decor_t *d)
 
            top_region = meta_get_top_border_region (&fgeom, clip.width);
 
-           decor_blend_top_border_picture (xdisplay,
-                                           d->context,
-                                           src,
-                                           0, 0,
-                                           d->picture,
-                                           &d->border_layout,
-                                           top_region,
-                                           alpha * 0xffff,
-                                           shade_alpha);
+           decor_blend_border_picture (xdisplay,
+                                       d->context,
+                                       src,
+                                       0, 0,
+                                       d->picture,
+                                       &d->border_layout,
+                                       BORDER_TOP,
+                                       top_region,
+                                       alpha * 0xffff,
+                                       shade_alpha,
+                                       0);
        }
 
        if (fgeom.bottom_height)
@@ -2036,15 +2038,17 @@ meta_draw_window_decoration (decor_t *d)
 
            bottom_region = meta_get_bottom_border_region (&fgeom, clip.width);
 
-           decor_blend_bottom_border_picture (xdisplay,
-                                              d->context,
-                                              src,
-                                              0, 0,
-                                              d->picture,
-                                              &d->border_layout,
-                                              bottom_region,
-                                              alpha * 0xffff,
-                                              shade_alpha);
+           decor_blend_border_picture (xdisplay,
+                                       d->context,
+                                       src,
+                                       0, 0,
+                                       d->picture,
+                                       &d->border_layout,
+                                       BORDER_BOTTOM,
+                                       bottom_region,
+                                       alpha * 0xffff,
+                                       shade_alpha,
+                                       0);
        }
 
        cairo_destroy (cr);
@@ -2097,15 +2101,17 @@ meta_draw_window_decoration (decor_t *d)
 
            left_region = meta_get_left_border_region (&fgeom, clip.height);
 
-           decor_blend_left_border_picture (xdisplay,
-                                            d->context,
-                                            src,
-                                            0, 0,
-                                            d->picture,
-                                            &d->border_layout,
-                                            left_region,
-                                            alpha * 0xffff,
-                                            shade_alpha);
+           decor_blend_border_picture (xdisplay,
+                                       d->context,
+                                       src,
+                                       0, 0,
+                                       d->picture,
+                                       &d->border_layout,
+                                       BORDER_LEFT,
+                                       left_region,
+                                       alpha * 0xffff,
+                                       shade_alpha,
+                                       0);
        }
 
        if (fgeom.right_width)
@@ -2135,15 +2141,17 @@ meta_draw_window_decoration (decor_t *d)
 
            right_region = meta_get_right_border_region (&fgeom, clip.height);
 
-           decor_blend_right_border_picture (xdisplay,
-                                             d->context,
-                                             src,
-                                             0, 0,
-                                             d->picture,
-                                             &d->border_layout,
-                                             right_region,
-                                             alpha * 0xffff,
-                                             shade_alpha);
+           decor_blend_border_picture (xdisplay,
+                                       d->context,
+                                       src,
+                                       0, 0,
+                                       d->picture,
+                                       &d->border_layout,
+                                       BORDER_RIGHT,
+                                       right_region,
+                                       alpha * 0xffff,
+                                       shade_alpha,
+                                       0);
        }
 
        cairo_destroy (cr);

commit 239de9a104f45bc7196fa76b19b4099783671a75
Author: Dennis Kasprzyk <[EMAIL PROTECTED]>
Date:   Thu May 29 13:51:10 2008 +0200

    Applied libdecoration changes to kde4 window decorator.

diff --git a/kde/window-decorator-kde4/window.cpp 
b/kde/window-decorator-kde4/window.cpp
index c73f771..b13dc23 100644
--- a/kde/window-decorator-kde4/window.cpp
+++ b/kde/window-decorator-kde4/window.cpp
@@ -2027,15 +2027,17 @@ KWD::Window::processDamage (void)
     {
        r2.translate (-xOff, -yOff);
 
-       decor_blend_top_border_picture (QX11Info::display(),
-                                       &mContext,
-                                       mPicture,
-                                       xOff, xOff,
-                                       mTexturePicture,
-                                       &mLayout,
-                                       r2.handle (),
-                                       (unsigned short) (alpha * 0xffff),
-                                       shade_alpha);
+       decor_blend_border_picture (QX11Info::display(),
+                                   &mContext,
+                                   mPicture,
+                                   xOff, xOff,
+                                   mTexturePicture,
+                                   &mLayout,
+                                   BORDER_TOP,
+                                   r2.handle (),
+                                   (unsigned short) (alpha * 0xffff),
+                                   shade_alpha,
+                                   TRUE);
     }
 
     xOff = 0;
@@ -2048,15 +2050,17 @@ KWD::Window::processDamage (void)
     {
        r2.translate (-xOff, -yOff);
 
-       decor_blend_bottom_border_picture (QX11Info::display(),
-                                          &mContext,
-                                          mPicture,
-                                          xOff, yOff,
-                                          mTexturePicture,
-                                          &mLayout,
-                                          r2.handle (),
-                                          (unsigned short) (alpha * 0xffff),
-                                          shade_alpha);
+       decor_blend_border_picture (QX11Info::display(),
+                                   &mContext,
+                                   mPicture,
+                                   xOff, yOff,
+                                   mTexturePicture,
+                                   &mLayout,
+                                   BORDER_BOTTOM,
+                                   r2.handle (),
+                                   (unsigned short) (alpha * 0xffff),
+                                   shade_alpha,
+                                   TRUE);
     }
 
     xOff = 0;
@@ -2069,15 +2073,17 @@ KWD::Window::processDamage (void)
     {
        r2.translate (-xOff, -yOff);
 
-       decor_blend_left_border_picture (QX11Info::display(),
-                                        &mContext,
-                                        mPicture,
-                                        xOff, yOff,
-                                        mTexturePicture,
-                                        &mLayout,
-                                        r2.handle (),
-                                        (unsigned short) (alpha * 0xffff),
-                                        shade_alpha);
+       decor_blend_border_picture (QX11Info::display(),
+                                   &mContext,
+                                   mPicture,
+                                   xOff, yOff,
+                                   mTexturePicture,
+                                   &mLayout,
+                                   BORDER_LEFT,
+                                   r2.handle (),
+                                   (unsigned short) (alpha * 0xffff),
+                                   shade_alpha,
+                                   TRUE);
     }
 
     xOff = mContext.extents.left + mGeometry.width ();
@@ -2090,15 +2096,17 @@ KWD::Window::processDamage (void)
     {
        r2.translate (-xOff, -yOff);
 
-       decor_blend_right_border_picture (QX11Info::display(),
-                                         &mContext,
-                                         mPicture,
-                                         xOff, yOff,
-                                         mTexturePicture,
-                                         &mLayout,
-                                         r2.handle (),
-                                         (unsigned short) (alpha * 0xffff),
-                                         shade_alpha);
+       decor_blend_border_picture (QX11Info::display(),
+                                   &mContext,
+                                   mPicture,
+                                   xOff, yOff,
+                                   mTexturePicture,
+                                   &mLayout,
+                                   BORDER_RIGHT,
+                                   r2.handle (),
+                                   (unsigned short) (alpha * 0xffff),
+                                   shade_alpha,
+                                   TRUE);
     }
 
     mDamage = QRegion ();

commit e1a0b9f6dabce5f37a3c20b090b1bae4d980f478
Author: Dennis Kasprzyk <[EMAIL PROTECTED]>
Date:   Thu May 29 13:50:47 2008 +0200

    Applied libdecoration changes to kde3 window decorator.

diff --git a/kde/window-decorator/window.cpp b/kde/window-decorator/window.cpp
index c10ff16..55580e6 100644
--- a/kde/window-decorator/window.cpp
+++ b/kde/window-decorator/window.cpp
@@ -1911,15 +1911,17 @@ KWD::Window::processDamage (void)
     {
        r2.translate (-xOff, -yOff);
 
-       decor_blend_top_border_picture (qt_xdisplay (),
-                                       &mContext,
-                                       mPicture,
-                                       xOff, xOff,
-                                       mTexturePicture,
-                                       &mLayout,
-                                       r2.handle (),
-                                       (unsigned short) (alpha * 0xffff),
-                                       shade_alpha);
+       decor_blend_border_picture (qt_xdisplay (),
+                                   &mContext,
+                                   mPicture,
+                                   xOff, xOff,
+                                   mTexturePicture,
+                                   &mLayout,
+                                   BORDER_TOP,
+                                   r2.handle (),
+                                   (unsigned short) (alpha * 0xffff),
+                                   shade_alpha,
+                                   TRUE);
     }
 
     xOff = 0;
@@ -1932,15 +1934,17 @@ KWD::Window::processDamage (void)
     {
        r2.translate (-xOff, -yOff);
 
-       decor_blend_bottom_border_picture (qt_xdisplay (),
-                                          &mContext,
-                                          mPicture,
-                                          xOff, yOff,
-                                          mTexturePicture,
-                                          &mLayout,
-                                          r2.handle (),
-                                          (unsigned short) (alpha * 0xffff),
-                                          shade_alpha);
+       decor_blend_border_picture (qt_xdisplay (),
+                                   &mContext,
+                                   mPicture,
+                                   xOff, yOff,
+                                   mTexturePicture,
+                                   &mLayout,
+                                   BORDER_BOTTOM,
+                                   r2.handle (),
+                                   (unsigned short) (alpha * 0xffff),
+                                   shade_alpha,
+                                   TRUE);
     }
 
     xOff = 0;
@@ -1953,15 +1957,17 @@ KWD::Window::processDamage (void)
     {
        r2.translate (-xOff, -yOff);
 
-       decor_blend_left_border_picture (qt_xdisplay (),
-                                        &mContext,
-                                        mPicture,
-                                        xOff, yOff,
-                                        mTexturePicture,
-                                        &mLayout,
-                                        r2.handle (),
-                                        (unsigned short) (alpha * 0xffff),
-                                        shade_alpha);
+       decor_blend_border_picture (qt_xdisplay (),
+                                   &mContext,
+                                   mPicture,
+                                   xOff, yOff,
+                                   mTexturePicture,
+                                   &mLayout,
+                                   BORDER_LEFT,
+                                   r2.handle (),
+                                   (unsigned short) (alpha * 0xffff),
+                                   shade_alpha,
+                                   TRUE);
     }
 
     xOff = mContext.extents.left + mGeometry.width ();
@@ -1974,15 +1980,17 @@ KWD::Window::processDamage (void)
     {
        r2.translate (-xOff, -yOff);
 
-       decor_blend_right_border_picture (qt_xdisplay (),
-                                         &mContext,
-                                         mPicture,
-                                         xOff, yOff,
-                                         mTexturePicture,
-                                         &mLayout,
-                                         r2.handle (),
-                                         (unsigned short) (alpha * 0xffff),
-                                         shade_alpha);
+       decor_blend_border_picture (qt_xdisplay (),
+                                   &mContext,
+                                   mPicture,
+                                   xOff, yOff,
+                                   mTexturePicture,
+                                   &mLayout,
+                                   BORDER_RIGHT,
+                                   r2.handle (),
+                                   (unsigned short) (alpha * 0xffff),
+                                   shade_alpha,
+                                   TRUE);
     }
 
     mDamage = QRegion ();

commit cdd241241478ddf8ef0d18f2e962c4d77311a62c
Author: Dennis Kasprzyk <[EMAIL PROTECTED]>
Date:   Thu May 29 13:49:50 2008 +0200

    Merged decor_blend_(top|bottom|left|right)_border_picture function into one 
common function.
    
    The new ignore_src_alpha parameter tells libdecoration to ignore the alpha 
channel of the src picture.

diff --git a/configure.ac b/configure.ac
index c096137..aea3d27 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,7 +24,7 @@ AC_PROG_INTLTOOL([0.23])
 AM_MAINTAINER_MODE
 
 dnl decorator interface version
-AC_DEFINE(DECOR_INTERFACE_VERSION, 20080131, [Decorator interface version])
+AC_DEFINE(DECOR_INTERFACE_VERSION, 20080529, [Decorator interface version])
 
 AC_ISC_POSIX
 AC_PROG_CC
diff --git a/include/decoration.h b/include/decoration.h
index f382a44..5eed043 100644
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -71,6 +71,11 @@ extern "C" {
 #define PAD_LEFT   (1 << 2)
 #define PAD_RIGHT  (1 << 3)
 
+#define BORDER_TOP    0
+#define BORDER_BOTTOM 1
+#define BORDER_LEFT   2
+#define BORDER_RIGHT  3
+
 typedef struct _decor_point {
     int x;
     int y;
@@ -346,52 +351,18 @@ decor_blend_transform_picture (Display           
*xdisplay,
                               int             shade_alpha);
 
 void
-decor_blend_top_border_picture (Display                *xdisplay,
-                               decor_context_t *context,
-                               Picture         src,
-                               int             xSrc,
-                               int             ySrc,
-                               Picture         dst,
-                               decor_layout_t  *layout,
-                               Region          region,
-                               unsigned short  alpha,
-                               int             shade_alpha);
-
-void
-decor_blend_bottom_border_picture (Display        *xdisplay,
-                                  decor_context_t *context,
-                                  Picture         src,
-                                  int             xSrc,
-                                  int             ySrc,
-                                  Picture         dst,
-                                  decor_layout_t  *layout,
-                                  Region          region,
-                                  unsigned short  alpha,
-                                  int             shade_alpha);
-
-void
-decor_blend_left_border_picture (Display        *xdisplay,
-                                decor_context_t *context,
-                                Picture         src,
-                                int             xSrc,
-                                int             ySrc,
-                                Picture         dst,
-                                decor_layout_t  *layout,
-                                Region          region,
-                                unsigned short  alpha,
-                                int             shade_alpha);
-
-void
-decor_blend_right_border_picture (Display        *xdisplay,
-                                 decor_context_t *context,
-                                 Picture         src,
-                                 int             xSrc,
-                                 int             ySrc,
-                                 Picture         dst,
-                                 decor_layout_t  *layout,
-                                 Region          region,
-                                 unsigned short  alpha,
-                                 int             shade_alpha);
+decor_blend_border_picture (Display        *xdisplay,
+                           decor_context_t *context,
+                           Picture         src,
+                           int             xSrc,
+                           int             ySrc,
+                           Picture         dst,
+                           decor_layout_t  *layout,
+                           unsigned int    border,
+                           Region          region,
+                           unsigned short  alpha,
+                           int             shade_alpha,
+                           int             ignore_src_alpha);
 
 #define DECOR_ACQUIRE_STATUS_SUCCESS         0
 #define DECOR_ACQUIRE_STATUS_FAILED          1
diff --git a/libdecoration/decoration.c b/libdecoration/decoration.c
index 16eee7f..1f3407c 100644
--- a/libdecoration/decoration.c
+++ b/libdecoration/decoration.c
@@ -2061,13 +2061,15 @@ _decor_blend_horz_border_picture (Display         
*xdisplay,
                                  int             x2,
                                  int             y2,
                                  int             dy,
-                                 int             direction)
+                                 int             direction,
+                                 int             ignore_src_alpha)
 {
     XRenderColor color[3] = {
        { 0xffff, 0xffff, 0xffff, 0xffff },
-       {  alpha,  alpha,  alpha,  alpha }
+       {  alpha,  alpha,  alpha,  alpha },
+       {    0x0,    0x0,    0x0, 0xffff }
     };
-    int                 op = PictOpSrc;
+    int                 op = PictOpSrc, gop = PictOpSrc;
     int                 left, right;
 
     left   = context->extents.left;
@@ -2077,6 +2079,18 @@ _decor_blend_horz_border_picture (Display          
*xdisplay,
     XRenderSetPictureClipRegion (xdisplay, dst, region);
     XOffsetRegion (region, -x1, -y1);
 
+    if (ignore_src_alpha)
+    {
+       XRenderComposite (xdisplay, PictOpSrc, src, None, dst,
+                         xSrc, ySrc,
+                         0, 0,
+                         x1, y1,
+                         x2 - x1, y2 - y1);
+       XRenderFillRectangle (xdisplay, PictOpAdd, dst, &color[2], x1, y1,
+                             x2 - x1, y2 - y1);
+       gop = PictOpInReverse;
+    }
+
     if (alpha != 0xffff)
     {
        op = PictOpIn;
@@ -2122,7 +2136,7 @@ _decor_blend_horz_border_picture (Display   *xdisplay,
            XRenderSetPictureTransform (xdisplay, grad, &transform);
            XRenderChangePicture (xdisplay, grad, CPRepeat, &attrib);
 
-           XRenderComposite (xdisplay, PictOpSrc, grad, None, dst,
+           XRenderComposite (xdisplay, gop, grad, None, dst,
                              0, 0,
                              0, 0,
                              x1, y1,
@@ -2153,7 +2167,7 @@ _decor_blend_horz_border_picture (Display   *xdisplay,
 
            XRenderChangePicture (xdisplay, grad, CPRepeat, &attrib);
 
-           XRenderComposite (xdisplay, PictOpSrc, grad, None, dst,
+           XRenderComposite (xdisplay, gop, grad, None, dst,
                              0, 0,
                              0, 0,
                              x1 + left, y1,
@@ -2179,7 +2193,7 @@ _decor_blend_horz_border_picture (Display   *xdisplay,
            XRenderSetPictureTransform (xdisplay, grad, &transform);
            XRenderChangePicture (xdisplay, grad, CPRepeat, &attrib);
 
-           XRenderComposite (xdisplay, PictOpSrc, grad, None, dst,
+           XRenderComposite (xdisplay, gop, grad, None, dst,
                              0, 0,
                              0, 0,
                              x2 - right, y1,
@@ -2189,108 +2203,21 @@ _decor_blend_horz_border_picture (Display        
*xdisplay,
        }
        else
        {
-           XRenderFillRectangle (xdisplay, PictOpSrc, dst, &color[1],
+           XRenderFillRectangle (xdisplay, gop, dst, &color[1],
                                  x1, y1, x2 - x1, y2 - y1);
        }
     }
 
-    XRenderComposite (xdisplay, op, src, None, dst,
-                     xSrc, ySrc,
-                     0, 0,
-                     x1, y1,
-                     x2 - x1, y2 - y1);
+    if (!ignore_src_alpha)
+       XRenderComposite (xdisplay, op, src, None, dst,
+                         xSrc, ySrc,
+                         0, 0,
+                         x1, y1,
+                         x2 - x1, y2 - y1);
 
     set_no_picture_clip (xdisplay, dst);
 }
 
-void
-decor_blend_top_border_picture (Display                *xdisplay,
-                               decor_context_t *context,
-                               Picture         src,
-                               int             xSrc,
-                               int             ySrc,
-                               Picture         dst,
-                               decor_layout_t  *layout,
-                               Region          region,
-                               unsigned short  alpha,
-                               int             shade_alpha)
-{
-    int left, right, top;
-    int x1, y1, x2, y2;
-
-    left  = context->extents.left;
-    right = context->extents.right;
-    top   = context->extents.top;
-
-    x1 = layout->top.x1 + context->left_space - left;
-    y1 = layout->top.y1 + context->top_space - top;
-    x2 = layout->top.x2 - context->right_space + right;
-    y2 = layout->top.y2;
-
-    _decor_blend_horz_border_picture (xdisplay,
-                                     context,
-                                     src,
-                                     xSrc,
-                                     ySrc,
-                                     dst,
-                                     layout,
-                                     region,
-                                     alpha,
-                                     shade_alpha,
-                                     x1,
-                                     y1,
-                                     x2,
-                                     y2,
-                                     top,
-                                     -1);
-
-    _decor_pad_border_picture (xdisplay, dst, &layout->top);
-}
-
-void
-decor_blend_bottom_border_picture (Display        *xdisplay,
-                                  decor_context_t *context,
-                                  Picture         src,
-                                  int             xSrc,
-                                  int             ySrc,
-                                  Picture         dst,
-                                  decor_layout_t  *layout,
-                                  Region          region,
-                                  unsigned short  alpha,
-                                  int             shade_alpha)
-{
-    int left, right, bottom;
-    int x1, y1, x2, y2;
-
-    left   = context->extents.left;
-    right  = context->extents.right;
-    bottom = context->extents.bottom;
-
-    x1 = layout->bottom.x1 + context->left_space - left;
-    y1 = layout->bottom.y1;
-    x2 = layout->bottom.x2 - context->right_space + right;
-    y2 = layout->bottom.y1 + bottom;
-
-    _decor_blend_horz_border_picture (xdisplay,
-                                     context,
-                                     src,
-                                     xSrc,
-                                     ySrc,
-                                     dst,
-                                     layout,
-                                     region,
-                                     alpha,
-                                     shade_alpha,
-                                     x1,
-                                     y1,
-                                     x2,
-                                     y2,
-                                     bottom,
-                                     1);
-
-    _decor_pad_border_picture (xdisplay, dst, &layout->bottom);
-}
-
 static void
 _decor_blend_vert_border_picture (Display        *xdisplay,
                                  decor_context_t *context,
@@ -2306,13 +2233,15 @@ _decor_blend_vert_border_picture (Display         
*xdisplay,
                                  int             y1,
                                  int             x2,
                                  int             y2,
-                                 int             direction)
+                                 int             direction,
+                                 int             ignore_src_alpha)
 {
     XRenderColor color[3] = {
        { 0xffff, 0xffff, 0xffff, 0xffff },
-       {  alpha,  alpha,  alpha,  alpha }
+       {  alpha,  alpha,  alpha,  alpha },
+       {    0x0,    0x0,    0x0, 0xffff }
     };
-    int                 op = PictOpSrc;
+    int                 op = PictOpSrc, gop = PictOpSrc;
 
     if (layout->rotation)
     {
@@ -2345,6 +2274,44 @@ _decor_blend_vert_border_picture (Display          
*xdisplay,
        XOffsetRegion (region, -x1, -y1);
     }
 
+    if (ignore_src_alpha)
+    {
+       if (layout->rotation)
+       {
+           XTransform t = {
+               {
+                   {       0, 1 << 16,       0 },
+                   { 1 << 16,       0,       0 },
+                   {       0,       0, 1 << 16 }
+               }
+           };
+
+           t.matrix[0][2] = xSrc << 16;
+           t.matrix[1][2] = ySrc << 16;
+
+           XRenderSetPictureTransform (xdisplay, src, &t);
+
+           XRenderComposite (xdisplay, PictOpSrc, src, None, dst,
+                             0, 0,
+                             0, 0,
+                             x1, y1, x2 - x1, y2 - y1);
+           XRenderFillRectangle (xdisplay, PictOpAdd, dst, &color[2], x1, y1,
+                                 x2 - x1, y2 - y1);
+
+           XRenderSetPictureTransform (xdisplay, src, &xident);
+       }
+       else
+       {
+           XRenderComposite (xdisplay, PictOpSrc, src, None, dst,
+                             xSrc, ySrc,
+                             0, 0,
+                             x1, y1, x2 - x1, y2 - y1);
+           XRenderFillRectangle (xdisplay, PictOpAdd, dst, &color[2], x1, y1,
+                             x2 - x1, y2 - y1);
+       }
+       gop = PictOpInReverse;
+    }
+    
     if (alpha != 0xffff)
     {
        op = PictOpIn;
@@ -2399,7 +2366,7 @@ _decor_blend_vert_border_picture (Display   *xdisplay,
 
            XRenderChangePicture (xdisplay, grad, CPRepeat, &attrib);
 
-           XRenderComposite (xdisplay, PictOpSrc, grad, None, dst,
+           XRenderComposite (xdisplay, gop, grad, None, dst,
                              0, 0,
                              0, 0,
                              x1, y1,
@@ -2409,128 +2376,186 @@ _decor_blend_vert_border_picture (Display       
*xdisplay,
        }
        else
        {
-           XRenderFillRectangle (xdisplay, PictOpSrc, dst, &color[1],
+           XRenderFillRectangle (xdisplay, gop, dst, &color[1],
                                  x1, y1, x2 - x1, y2 - y1);
        }
     }
 
-    if (layout->rotation)
+    if (!ignore_src_alpha)
     {
-       XTransform t = {
-           {
-               {       0, 1 << 16,       0 },
-               { 1 << 16,       0,       0 },
-               {       0,       0, 1 << 16 }
-           }
-       };
+       if (layout->rotation)
+       {
+           XTransform t = {
+               {
+                   {       0, 1 << 16,       0 },
+                   { 1 << 16,       0,       0 },
+                   {       0,       0, 1 << 16 }
+               }
+           };
 
-       t.matrix[0][2] = xSrc << 16;
-       t.matrix[1][2] = ySrc << 16;
+           t.matrix[0][2] = xSrc << 16;
+           t.matrix[1][2] = ySrc << 16;
 
-       XRenderSetPictureTransform (xdisplay, src, &t);
+           XRenderSetPictureTransform (xdisplay, src, &t);
 
-       XRenderComposite (xdisplay, op, src, None, dst,
-                         0, 0,
-                         0, 0,
-                         x1, y1, x2 - x1, y2 - y1);
+           XRenderComposite (xdisplay, op, src, None, dst,
+                           0, 0,
+                           0, 0,
+                           x1, y1, x2 - x1, y2 - y1);
 
-       XRenderSetPictureTransform (xdisplay, src, &xident);
-    }
-    else
-    {
-       XRenderComposite (xdisplay, op, src, None, dst,
-                         xSrc, ySrc,
-                         0, 0,
-                         x1, y1, x2 - x1, y2 - y1);
+           XRenderSetPictureTransform (xdisplay, src, &xident);
+       }
+       else
+       {
+           XRenderComposite (xdisplay, op, src, None, dst,
+                           xSrc, ySrc,
+                           0, 0,
+                           x1, y1, x2 - x1, y2 - y1);
+       }
     }
 
     set_no_picture_clip (xdisplay, dst);
 }
 
 void
-decor_blend_left_border_picture (Display        *xdisplay,
-                                decor_context_t *context,
-                                Picture         src,
-                                int             xSrc,
-                                int             ySrc,
-                                Picture         dst,
-                                decor_layout_t  *layout,
-                                Region          region,
-                                unsigned short  alpha,
-                                int             shade_alpha)
+decor_blend_border_picture (Display        *xdisplay,
+                           decor_context_t *context,
+                           Picture         src,
+                           int             xSrc,
+                           int             ySrc,
+                           Picture         dst,
+                           decor_layout_t  *layout,
+                           unsigned int    border,
+                           Region          region,
+                           unsigned short  alpha,
+                           int             shade_alpha,
+                           int             ignore_src_alpha)
 {
+    int left, right, bottom, top;
     int x1, y1, x2, y2;
 
-    x1 = layout->left.x1;
-    y1 = layout->left.y1;
-    x2 = layout->left.x2;
-    y2 = layout->left.y2;
-
-    if (layout->rotation)
-       y1 += context->left_space - context->extents.left;
-    else
-       x1 += context->left_space - context->extents.left;
-
-    _decor_blend_vert_border_picture (xdisplay,
-                                     context,
-                                     src,
-                                     xSrc,
-                                     ySrc,
-                                     dst,
-                                     layout,
-                                     region,
-                                     alpha,
-                                     shade_alpha,
-                                     x1,
-                                     y1,
-                                     x2,
-                                     y2,
-                                     1);
-
-    _decor_pad_border_picture (xdisplay, dst, &layout->left);
-}
+    left   = context->extents.left;
+    right  = context->extents.right;
+    top    = context->extents.top;
+    bottom = context->extents.bottom;
 


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to