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: