Description: A set of patches against KDE 3.1 and KDE CVS to kwin and the Window Decorations kcontrol module to enable Windows- or Mac OS X-styled drop shadows under the active window.
They're based heavily on David Sansome's and noonespecial's work. Have a look at
This should work with any window decoration, but irregularly shaped ones such as Keramik and ModSystem may look a bit weird.
Like most of the dedicated Shadow Coders (ooh, sounds dramatic ) before me, I used a well-known fake translucency technique to draw the drop shadows, which are subject to rendering errors, update desyncs, and the whole doubtful business.
If you have any code or suggestions to contribute, please let me know.
Have fun!Last changelog:
0.3.1: - thanks to Piotr Szymanski, a patch is now available for KDE 3.1!
0.3: - enabled click passthrough for Windows-style drop shadows - fixed shadow stacking order. In other words, shadows of newly focused but not raised windows (i.e. wheel scroll or right-click in inactive window) no longer overlap any windows above it. See 2nd screenshot for an example - fixed XMMS random crash on startup - fixed crash when drawing shadow around very small windows (such as XMMS in shade mode)
For a compelte changelog, see the CHANGELOG file in the archive.
Ok, I definitively can't check this out by now, I've already done a mess previously because of a strange mix of gcc2.95/3.2 compiled libraries in debian sources, and I don't want to go through that...
Could it be possible to patch the stable 3.1 sources instead? I have them on cdrom and it should be more simple to try and experiment with them =)
Of course just if the changes are compatible with the stable release...
Hey, I'm not sure, but it might work to download CVS for kdebase, make -f Makefile.cvs; ./configure --prefix=/usr; cd kwin; make; su -c "make install";
Again, I'm not sure about this, but its worth a try.
Ok, I downloaded the kwin module from CVS, it is a "sub-module" indeed :-/ I also got kde-common.
I applied the patch and all fine. I was blindly hoping it would compile but I realized there was no Makefile.cvs or anything similar.
I played with some auto-tools (auto[scan,header,conf,make]) but nothing... Please any idea? Am I supposed to download the entire kdebase module?!? nooo... :D
I would very glad if someone could eventually provide me with a binary release of just kwin... I'm on an "almost" standard debian/woody
Thank you
felipe
I had an old (December 2002) CVS HEAD source tree laying around, so I tried to do what you suggested earlier. It wouldn't work until I also updated kdelibs/kdecore, and my changes to kwin breaks binary compatibility so every window decoration had to be recompiled, but it's working fine now.
I'd suggest getting all of kdelibs and kdebase from CVS to be on the safe side. If you _really_ don't want to do that, I suppose you could get away with hitting Ctrl+C as soon as the main kdelibs and kdebase directories have been checked out. Also check out kdelibs/admin and kdebase/admin. make -f Makefile.cvs might work then.
Anyway, kdelibs + kdebase doesn't take too long to build from scratch. About 5 hours on my PIII/800. You should also build kdeartwork/kwin-styles (binary incompatibility again).
Could I download just the kwin module from CVS and patch that? I don't have enough bandwidth to d'load all current kde cvs and I *don't want* to go through a week-long compile on my PIII-450...
Could I simply do that?
ciao
felipe
BTW, Liquid doesn't use shaped window decorations so these should work together. I'll be getting a new computer soon and haven't upgraded to HEAD yet, but I'll be giving this a try as soon as I do :)
The main problem I see, and the reason why I haven't put much effort into things like this, is that with the shadow/transparency method I originally developed for Liquid and MegaGradient and was then adopted by KDE doesn't catch changes made to underlying windows. This is okay for popup menus, which aren't displayed for long, but is really rather bad for permanent windows. If a window is displayed for a long time chances are better that the underlying window will change contents and it will look bad. This is why with Liquid when you tear-off menus it shuts off the translucency.
I don't see any easy way around this except for Keith's translucency server, which has been promised for a long time. The other option is to use a transparent stipple. This works okay on high resolution displays but still takes up quite a bit of resources in spite of rather clever optimizations people have made because of the complex mask require.
Transparency will be acheived vis-a-vis a 'transparency server' which I assume tracks changes and tells windows to redraw themselves whenever they're showing stale data in transparent regions? Isn't the high amount of network communication a performance problem? Will developers have to access this server, or will it be abstracted (so that they can just set alpha channel values as they would color)?
Hi:
I've not have enough time to compile the sources with this patch. Can you tell me if the shadows moves with the window?
Does the window shadow hide when the window is moved, as another window theme does?
Thank you!
Whenever a window is moved, resized, or loses focus, its shadow disappears until it stops moving, resizing, or regains focus.
The main differences between this and the modified Acqua decoration is that this works with most window decorations and allows you to click through the shadow to get at what's underneath.
I'd also like to see a third shadow type, a "custom" one where you can set the shadow width and opacity (very easy todo, added it myself already to my copy of the code).
"for the sake of simplicity, complete copies of client.h, client.cpp, option.h, option.cpp, kwindecoration.h, and kwindecoration.cpp are included in the archive. If you're feeling adventurous, you can overwrite your versions with those"...
-------------------------------
would be nice, if these files would be there, but I can find only client.h and options.h... I have KDE3.1 on Debian Sid
Great work - I was hoping somebody would implement this in KWin :-)
I've got some new code coming soon (next week probably) which fixes the shadows being drawn above other windows, and gives the option of putting shadows on all windows (not just the active one). You could probably add a seperate "Advanced" box to configure this in the kontrol center.
Anyway, well done :-)
Ratings & Comments
38 Comments
...someone create .deb out of this (for sid etc)... i'd really like to have this :-/
hey! which color-scheme is that? looks really cool to me.
4 months of tweaking the same 2 hues until it didn't hurt my eyes anymore. ;) I might post it to KDE-Look as a separate entry later.
girl wonders, if somebody could make a deb-bundle from it? greetz, Mona
Great, I love this work. And I wonder, could someone make an rpm, please.
Ok, I definitively can't check this out by now, I've already done a mess previously because of a strange mix of gcc2.95/3.2 compiled libraries in debian sources, and I don't want to go through that... Could it be possible to patch the stable 3.1 sources instead? I have them on cdrom and it should be more simple to try and experiment with them =) Of course just if the changes are compatible with the stable release...
I obviously intended *MY* debian sources! There's nothing wrong with the official repositories =) viva Debian! felipe
Hey, I'm not sure, but it might work to download CVS for kdebase, make -f Makefile.cvs; ./configure --prefix=/usr; cd kwin; make; su -c "make install"; Again, I'm not sure about this, but its worth a try.
Ok, I downloaded the kwin module from CVS, it is a "sub-module" indeed :-/ I also got kde-common. I applied the patch and all fine. I was blindly hoping it would compile but I realized there was no Makefile.cvs or anything similar. I played with some auto-tools (auto[scan,header,conf,make]) but nothing... Please any idea? Am I supposed to download the entire kdebase module?!? nooo... :D I would very glad if someone could eventually provide me with a binary release of just kwin... I'm on an "almost" standard debian/woody Thank you felipe
I had an old (December 2002) CVS HEAD source tree laying around, so I tried to do what you suggested earlier. It wouldn't work until I also updated kdelibs/kdecore, and my changes to kwin breaks binary compatibility so every window decoration had to be recompiled, but it's working fine now. I'd suggest getting all of kdelibs and kdebase from CVS to be on the safe side. If you _really_ don't want to do that, I suppose you could get away with hitting Ctrl+C as soon as the main kdelibs and kdebase directories have been checked out. Also check out kdelibs/admin and kdebase/admin. make -f Makefile.cvs might work then. Anyway, kdelibs + kdebase doesn't take too long to build from scratch. About 5 hours on my PIII/800. You should also build kdeartwork/kwin-styles (binary incompatibility again).
this. Someone make an rpm
Could I download just the kwin module from CVS and patch that? I don't have enough bandwidth to d'load all current kde cvs and I *don't want* to go through a week-long compile on my PIII-450... Could I simply do that? ciao felipe
BTW, Liquid doesn't use shaped window decorations so these should work together. I'll be getting a new computer soon and haven't upgraded to HEAD yet, but I'll be giving this a try as soon as I do :) The main problem I see, and the reason why I haven't put much effort into things like this, is that with the shadow/transparency method I originally developed for Liquid and MegaGradient and was then adopted by KDE doesn't catch changes made to underlying windows. This is okay for popup menus, which aren't displayed for long, but is really rather bad for permanent windows. If a window is displayed for a long time chances are better that the underlying window will change contents and it will look bad. This is why with Liquid when you tear-off menus it shuts off the translucency. I don't see any easy way around this except for Keith's translucency server, which has been promised for a long time. The other option is to use a transparent stipple. This works okay on high resolution displays but still takes up quite a bit of resources in spite of rather clever optimizations people have made because of the complex mask require.
Transparency will be acheived vis-a-vis a 'transparency server' which I assume tracks changes and tells windows to redraw themselves whenever they're showing stale data in transparent regions? Isn't the high amount of network communication a performance problem? Will developers have to access this server, or will it be abstracted (so that they can just set alpha channel values as they would color)?
A detailed discussion on the X Translucent Window Extension can be found at http://www.xfree86.org/~keithp/talks/KeithPackardAls2000/index.html . Most of it is over my head, so I won't risk mis-summarising here. ;)
give the dude (Keith) a hand with the translucency server. =)
Hi: I've not have enough time to compile the sources with this patch. Can you tell me if the shadows moves with the window? Does the window shadow hide when the window is moved, as another window theme does? Thank you!
Whenever a window is moved, resized, or loses focus, its shadow disappears until it stops moving, resizing, or regains focus. The main differences between this and the modified Acqua decoration is that this works with most window decorations and allows you to click through the shadow to get at what's underneath.
I'd also like to see a third shadow type, a "custom" one where you can set the shadow width and opacity (very easy todo, added it myself already to my copy of the code).
If you could share those changes. ^_^; I've left the shadow-drawing code essentially untouched because I really don't know how to work with it.
"for the sake of simplicity, complete copies of client.h, client.cpp, option.h, option.cpp, kwindecoration.h, and kwindecoration.cpp are included in the archive. If you're feeling adventurous, you can overwrite your versions with those"... ------------------------------- would be nice, if these files would be there, but I can find only client.h and options.h... I have KDE3.1 on Debian Sid
it works here, did you compile from the source?
I use debian unstable packages...
Great work - I was hoping somebody would implement this in KWin :-) I've got some new code coming soon (next week probably) which fixes the shadows being drawn above other windows, and gives the option of putting shadows on all windows (not just the active one). You could probably add a seperate "Advanced" box to configure this in the kontrol center. Anyway, well done :-)
=)