RFR: 8301302: Platform preferences API [v2]

Scott Palmer swpalmer at openjdk.org
Tue Jan 31 23:09:58 UTC 2023


On Sun, 29 Jan 2023 17:10:26 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:

>> Platform preferences are the preferred UI settings of the operating system. For example, on Windows this includes the color values identified by the `Windows.UI.ViewManagement.UIColorType` enumeration; on macOS this includes the system color values of the `NSColor` class.
>> 
>> Exposing these dynamic values to JavaFX applications allows developers to create themes that can integrate seamlessly with the color scheme of the operating system.
>> 
>> Platform preferences are exposed as an `ObservableMap` of platform-specific key-value pairs, which means that the preferences available on Windows are different from macOS or Linux. JavaFX provides a small, curated list of preferences that are available on most platforms, and are therefore exposed with a platform-independent API:
>> 
>> 
>> public interface Preferences extends ObservableMap<String, Object> {
>>     // Platform-independent API
>>     ReadOnlyObjectProperty<Appearance> appearanceProperty();
>>     ReadOnlyObjectProperty<Color> backgroundColorProperty();
>>     ReadOnlyObjectProperty<Color> foregroundColorProperty();
>>     ReadOnlyObjectProperty<Color> accentColorProperty();
>> 
>>     // Convenience methods to retrieve platform-specific values from the map
>>     Optional<Integer> getInteger(String key);
>>     Optional<Double> getDouble(String key);
>>     Optional<String> getString(String key);
>>     Optional<Boolean> getBoolean(String key);
>>     Optional<Color> getColor(String key);
>> }
>> 
>> 
>> The platform appearance is defined by the new `javafx.stage.Appearance` enumeration:
>> 
>> 
>> public enum Appearance {
>>     LIGHT,
>>     DARK
>> }
>> 
>> 
>> An instance of the `Preferences` interface can be retrieved by calling `Platform.getPreferences()`.
>
> Michael Strauß has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Use Optional for convenience methods in Preferences

On Tue, Jan 31, 2023 at 3:00 PM Andy Goryachev ***@***.***>
wrote:

> In the context of adding theme support in javafx, I think this PR is a
> step in the right direction. I also like a small set of
> platform-independent properties like fg and bg colors. I wonder if the same
> approach can be extended for other aspects of platform L&F, like fonts,
> spacing, and may be other aspects (like, hiding scrollbars setting on Mac?)
>
> I agree with @kevinrushforth <https://github.com/kevinrushforth> - we'd
> need more discussion on the actual implementation. There are a few items
> that I feel are unnecessary, or might be done differently, and I'd like to
> learn what other people think.
>
> Specifically:
>
>    1. Appearance enum seems unnecessary - there might be more choices in
>    a specific platform (Mac Ventura has three: dark/light/auto).
>
>
Is it necessary for any application to know about "auto"?  Presumably when
the mode automatically changes from one to the other there would be an
event that should be handled, just as if the user changed the setting while
the application was running.

Scott

> Message ID: ***@***.***>
>

-------------

PR: https://git.openjdk.org/jfx/pull/1014


More information about the openjfx-dev mailing list