Transparency/alpha for top-level windows?


#1

I am using Juce svn head.

Is transparency or alpha channel for windows on the desktop not supported in Linux yet? I noticed that the juce demo’s ‘drag this window to see how a lightweight component can become a heavyweight window’ thing isn’t semi-transparent as it is on mac/win.

Also (this might be unrelated), while dragging the rows from the drag-drop demo, the entire white silhouette of the listbox is shown with a shadow behind it.

I am assuming these are because transparency is not yet implemented for linux, but given the huge number of people using compositing window managers these days, it would be a great addition and help with feature parity.

Any hints on where I should start hacking? I am checking out the juce_linux_Windowing.cpp file and from the looks of it, it seems all that needs to be done is make it support RGBA format images? I know that compositing window managers will obey the alpha channel, but I see a lot of hardcoded r,g,b channel code in that file, and stuff like jassert (! isARGB())I’m a n00b at X11 programming btw, so pointers (no pun intended) will be appreciated.


#2

no, actually the linux windowing code only supports 16/24 bit displays.
I’ve got some code around playing with 32bit ARGB Visuals, but i’ve not got so far on making it working correctly (even if it works in some cases).

juce_linux_Windowing.zip

Start from here, probably is a good starting point…


#3

Thanks a lot :slight_smile:

I got some compile errors while compiling, so can’t test it yet. Will start hacking as soon as I get some time.


#4

Did you get any improvment on this ?
What does “works in some cases” means ?

Sorry for referring to a very old thread.


#5

grab this:

http://code.google.com/p/juced/source/browse/trunk/juce/build/linux/platform_specific_code/juce_linux_Windowing.cpp

and do:

this way you enable GLX framebuffers in video memory (for the cards that supports ARGB pixels), this enable the use of alpha channels for the cards that supports it, and fail back to the old method instead.

cheers


#6

Whough!

It’s a whole new world!

So, if I get the idea correctly, we simply render to GL texture in a GL window and this allows transparent rendering.

Great!
It would be nice if it was merged into (official trunk) Juce directly.
(subliminal message here)