> 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 Author: Martin Fox <[email protected]> Date: Wed Apr 1 12:34:00 2026 -0700 Removing macOS 26 glass backdrops since they require an updated SDK commit 96f5ab2250b911d5fd5436e865850a4b17e07e62 Author: Martin Fox <[email protected]> Date: Wed Apr 1 12:16:39 2026 -0700 JavaDoc fixes, Ios fixes commit 547027b89fa6f22c8801fda9b878f9a9ac91fbc3 Author: Martin Fox <[email protected]> Date: Wed Apr 1 11:43:47 2026 -0700 Windows implementation of material-based backdrops commit 3b1b47917baf6a36a01199dc9fa18fdc076bab52 Author: Martin Fox <[email protected]> Date: Wed Apr 1 09:44:31 2026 -0700 Backdrop materials are now strings and can be platform-specific. - Merge remote-tracking branch 'upstream/master' into osbackdrop - Backdrops are now objects created by specifying a material. The list of materials is now open-ended. - Merge remote-tracking branch 'upstream/master' into osbackdrop - Merge remote-tracking branch 'upstream/master' into osbackdrop - Merge remote-tracking branch 'upstream/master' into osbackdrop - Removed unused import - Merge remote-tracking branch 'upstream/master' into osbackdrop - OS supplied translucent window backdrops ------------- Changes: https://git.openjdk.org/jfx/pull/2048/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2048&range=03 Stats: 1207 lines in 43 files changed: 1087 ins; 64 del; 56 mod Patch: https://git.openjdk.org/jfx/pull/2048.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/2048/head:pull/2048 PR: https://git.openjdk.org/jfx/pull/2048
