[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

compiz: Changes to 'upstream-unstable'



 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 <onestone@opencompositing.org>
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 <onestone@opencompositing.org>)
+=========================================================================
+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 <onestone@opencompositing.org>)
 =========================================================================
 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 <onestone@opencompositing.org>
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 <onestone@opencompositing.org>
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 <onestone@opencompositing.org>
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 <onestone@opencompositing.org>
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;
 


Reply to: