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