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
    String getString(String key);
    String getString(String key, String fallbackValue);
    Boolean getBoolean(String key);
    boolean getBoolean(String key, boolean fallbackValue);
    Color getColor(String key);
    Color getColor(String key, Color fallbackValue);
}


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()`.

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

Commit messages:
 - refactored PlatformPreferencesImpl
 - javadoc
 - Added appearance and convenience platform properties
 - Removed StyleTheme implementation
 - update javadoc
 - update javadoc
 - Rename Application.styleTheme to userAgentStyleTheme
 - Changed GTK preference keys
 - Platform.Preferences implements ObservableMap
 - Added missing newline at end of file
 - ... and 19 more: https://git.openjdk.org/jfx/compare/48f6f5ba...776dabf3

Changes: https://git.openjdk.org/jfx/pull/1014/files
 Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1014&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8301302
  Stats: 2430 lines in 28 files changed: 2330 ins; 58 del; 42 mod
  Patch: https://git.openjdk.org/jfx/pull/1014.diff
  Fetch: git fetch https://git.openjdk.org/jfx pull/1014/head:pull/1014

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

Reply via email to