RFR: 8375578: Enable translucent window backdrops
Martin Fox
mfox at openjdk.org
Thu Jan 22 18:53:23 UTC 2026
On Thu, 22 Jan 2026 11:38:48 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:
>> I'm not sure about scene preferences, as the supported backdrop materials are not exactly a _preference_. It's not something users can change about the system.
>>
>> How about something like this:
>>
>> public sealed interface StageBackdrop {
>>
>> enum Generic implements StageBackdrop {
>> DEFAULT,
>> WINDOW,
>> TABBED,
>> TRANSIENT
>> }
>>
>> record Specialized(String name, Map<String, Object> parameters) implements StageBackdrop {
>> public Specialized(String name) {
>> this(name, Map.of());
>> }
>> }
>> }
>>
>>
>>
>> public class Stage {
>>
>> public final void initBackdrop(StageBackdrop... backdrop) {
>> ...
>> }
>> }
>>
>>
>> The `initBackdrop` method would take a list of options in order of preference. Maybe I could then configure my backdrop like so:
>>
>> myStage.initBackdrop(
>> // first choice
>> new StageBackdrop.Specialized(
>> "NSGlassEffect",
>> Map.of("style", "NSGlassEffectViewStyleClear")
>> ),
>>
>> // second choice
>> StageBackdrop.Generic.TRANSIENT
>> );
>
> Should we have a (new kind of) fallback system, or should we do this with the existing `Platform.isSupported(ConditionalFeature)` and have the user decide based on the result of that function?
I agree that an enum is inadequate. The two API's we have to work with (macOS and Win11) are based on enums; you specify the type of window or content (e.g. tooltip, menu, sidebar, window) and let the OS decide what material to use. macOS pro-actively enumerates a lot of different window types though it looks like many of them map to the same material under the hood. I'm not entirely sure the glass effect recently added to macOS is appropriate for JavaFX but it is a prime example of a specialized platform-specific backdrop that can't easily be squeezed into an enum.
So, yes, we should expand StageBackdrop so we can provide more information. How to do that might be beyond my pay grade (I'm not a Java expert). I don't think the existing `Platform.isSupported()` API would be appropriate since it takes a separate enum type.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/2048#discussion_r2718168893
More information about the openjfx-dev
mailing list