On Wed, 20 May 2026 15:23:02 GMT, Martin Fox <[email protected]> wrote:
>> This PR enables translucent window backdrops for JavaFX stages on macOS and >> Windows 11. Since we’re reliant on the operating system for these effects >> (they typically require real-time blurring of the desktop) I needed to flesh >> out a fairly complete prototype to sort out the API. I will start a >> discussion about the API on the mailing list. >> >> There’s a crude manual test for trying out the different backdrop materials. >> >> java @build/run.args -Djavafx.enablePreview=true >> tests/manual/stage/BackdropTest.java >> >> You’ll want to drag the windows around to avoid having them overlap each >> other since they’re all created in the center of the screen. For windows >> without title bars you can click anywhere on the background to drag the >> window except for TRANSPARENT stages on Windows which are a bit tricker to >> get a hold of; try to click on a text label. >> >> If you create an UNDECORATED stage on Windows the backdrop won’t be >> translucent initially. This can be corrected by changing the stage’s color >> scheme. This is an OS bug that I haven’t found a workaround for. >> >> The changes on Windows 11 are minimal since we’re just invoking an OS >> feature by calling DwmSetWindowAttribute. I did need to make two small >> changes to the D3D9 Prism code to ensure that the swap chain and back buffer >> support an alpha channel so JavaFX can composite its content on top of the >> backdrop. This is the same way the old UNIFIED stage style worked before it >> became unreliable (see >> [JDK-8154847](https://bugs.openjdk.org/browse/JDK-8154847)). >> >> On macOS I moved the GlassHostView so it’s now a permanent part of the >> NSWindow. For some time the host view has been a remnant left over from an >> older approach to implementing fullscreen. Now it serves as a common parent >> for the NSVisualEffectView that provides the backdrop and the GlassView3D >> that contains the JavaFX content. Making it the permanent contentView of the >> NSWindow simplifies some code. >> >> To validate the API I did prototype this for Windows 10 (thanks @mstr2!). >> Well, I prototyped this using DirectComposition so it should work on Win10 >> but I can't test Win10 myself. Using DirectComposition is much more involved >> so I shelved that implementation for now but it does inform the API. It’s >> the reason the backdrop needs to be specified before the Java window is >> shown and the platform window created. >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > Martin Fox has updated the pull request with a new target base due to a merge > or a rebase. The pull request now contains 10 commits: > > - Merge remote-tracking branch 'upstream/master' into osbackdrop > - New version of StageBackdrop API, separated into standard and platform > variants > > commit dee190390d147e9032a734ab0abaab752e308c76 > Author: Martin Fox <[email protected]> > Date: Wed May 20 06:18:23 2026 -0700 > > More minor cleanup > > commit 457c7eb99affd42f67dedb2c760fa639a88943b9 > Author: Martin Fox <[email protected]> > Date: Tue May 19 19:33:15 2026 -0700 > > Cleaning up imports, comments, etc. > > commit 947a5e3598fd0e1b8f69747314405519a8a8794d > Author: Martin Fox <[email protected]> > Date: Tue May 19 16:16:23 2026 -0700 > > Disabling macOS 26 Liquid Glass effect > > commit 9c3d0389f3687504411fc840ecb878ebe9608e36 > Author: Martin Fox <[email protected]> > Date: Tue May 19 16:14:19 2026 -0700 > > Backdrop options are now dynamic and set on the stage. > > commit 7d61c2b9bc15a7bdc7c79b0ddde651678404f065 > Author: Martin Fox <[email protected]> > Date: Tue May 19 11:15:09 2026 -0700 > > Added options query and simplified Windows implementation > > commit c1514f348f9e1d9d3761aec9786dda25e12fa588 > Author: Martin Fox <[email protected]> > Date: Mon May 18 12:07:40 2026 -0700 > > Revamped StageBackdrop API, splitting standard and platform backdrops > and adding options > > commit 608cfa631967470bdbfc02a5b30e55ab3c932d32 > Merge: 551c9ec336 7110a0940d > Author: Martin Fox <[email protected]> > Date: Thu May 14 07:08:44 2026 -0700 > > Merge branch 'osbackdrop' into osbackdrop_dev > > commit 551c9ec336d9e6d3f90e37b278dc17df9a9bca03 > Author: Martin Fox <[email protected]> > Date: Wed Apr 8 08:51:49 2026 -0700 > > Cleanup. > > commit c2e8ec8afc4df2dbd529470761b500e4d670bbeb > Author: Martin Fox <[email protected]> > Date: Sat Apr 4 20:18:07 2026 -0700 > > Factory for construction backdrops > > commit 4654e4071e19b0b45e44161925b38904d100dda5 > Author: Martin Fox <[email protected]> > Date: Wed Apr 1 16:20:29 2026 -0700 > > Some tests call Application.createWindow. Added compatibility version. > > commit cb417164e378a5e15c9d9b62b80bd010495b1f28 > Aut... I've pushed a new version. StageBackdrops now come in two flavors, the standard backdrops which are referenced using constants (WINDOW and PARTIAL) and the platform-dependent backdrops which are referenced by name (string). The selection of platform backdrops is not final, the current crop are just for demo purposes. I had to remove the macOS liquid glass backdrops since they require a more recent SDK than the build machines support. If you want to try them out you'll need to edit MacWindow.java (look for ClearGlass) and GlassHostView.m (look for setGlassBackdrop). There's now a call to query a backdrop for its supported options. The call for setting an option has been moved to Stage since you can change the value at any time. That call is currently a no-op since the only backdrop that supports options is macOS.ClearGlass and it's not available. Hooking this up isn't rocket science but is a bit tedious so I'm putting it off. ------------- PR Comment: https://git.openjdk.org/jfx/pull/2048#issuecomment-4500059348
