Review request for 7124236: [macosx] Some components lost shadows after the latest fix of translucent windows. (original) (raw)

Anthony Petrov anthony.petrov at oracle.com
Fri Feb 3 04:22:00 PST 2012


Hi Dmitry,

On 2/3/2012 4:05 PM, Dmitry Cherepanov wrote:

Major concern: is that possible to avoid modifications to the shared code with this fix? I'm afraid that this is a necessary change if we want to create a CALayer where the background is fully transparent. Also, having fully transparent background in CALayer seems to be necessary to implement http://java.net/jira/browse/MACOSXPORT-764 . I'm currently trying to come up with a fix for the native textured background and likely I'll submit a separate review request for MACOSXPORT-764.

I wonder how are we going to differentiate between the fully transparent background of the layer which is supposed to make the native textured background shine through, and fully transparent areas painted by user's code explicitly. Those user areas must actually be fully transparent visually, too. Do you have an idea how to resolve that?

Also, I see that 764 is basically an RFE. Does it make sense to fix it in JDK8 rather than in 7u? In this case changes to the shared code would be all fine.

On 1/31/2012 11:04 PM, Dmitry Cherepanov wrote:

The cause of the problem with broken shadows is that currently NSWindow's background color is [NSWindow clearColor] and it makes shadows invisible. The fix implements Mike's suggestion and now we draw pure transparent pixels into a CALayer so that the native background color will be visible through transparent areas of the CALayer.

Looks like it should work fine if background's alpha is > 0 and < 255. And what about window.setBackground(new Color(0, 0, 0, 0))? I see that in CPlatformWindow we'll actually pass these zeros (which is in fact the same as the clearColor, isn't it?) to the native system. In this case I wouldn't expect any shadow to appear since the background color set is completely transparent. Is this correct? I would also expect that there shouldn't be any shadow after setting window.setBackground(new Color(0, 0, 0, 0)) and this is how it behaves now.

To me this seems like the most common use case for transparent windows. Are we, or rather are developers OK with missing window shadows in that case? From developer's perspective it seems that shadow must be present regardless of the background color set to the window.

Also, the bug evaluation mentions the click-through problem. Is it resolved with this fix? The patch doesn't solve the click-through problem. I've spent a while investigating this issue and there's a number of mailing threads (for example, [1] and [2]) mentioning that OpenGL content is opaque to events.

This basically means that with current implementation transparent windows behave on the Mac the same way they do on X11 which is far from being... hmmm... convenient. To worsen thing, Mac doesn't support Shapes, which makes it absolutely impossible to implement normal non-opaque windows with click-through capability on Mac OS with AWT/Swing. I think this is a problem.

The thread [1] mentions that using renderInContext: can actually produce satisfying results - i.e. make visually transparent areas transparent for mouse clicks, too. And this is actually what we really want, isn't it?

-- best regards, Anthony

[1] http://lists.apple.com/archives/cocoa-dev/2009/Apr/msg01945.html

[2] http://lists.apple.com/archives/mac-opengl/2010/Mar/msg00038.html



More information about the macosx-port-dev mailing list