On Mon, 7 Oct 2024 03:43:26 GMT, Michael Strauß <mstra...@openjdk.org> wrote:

>> This PR adds the `Platform.Preferences.reducedMotion` and 
>> `Platform.Preferences.reducedTransparency` accessibility preferences:
>> 
>> interface Preferences {
>>     /**
>>      * Specifies whether applications should minimize the amount of 
>> non-essential animations,
>>      * reducing discomfort for users who experience motion sickness or 
>> vertigo.
>>      * <p>
>>      * If the platform does not report this preference, this property 
>> defaults to {@code false}.
>>      *
>>      * @return the {@code reducedMotion} property
>>      * @defaultValue {@code false}
>>      * @since 24
>>      */
>>     ReadOnlyBooleanProperty reducedMotionProperty();
>> 
>>     /**
>>      * Specifies whether applications should minimize the amount of 
>> transparent or translucent
>>      * layer effects, which can help to increase contrast and readability 
>> for some users.
>>      * <p>
>>      * If the platform does not report this preference, this property 
>> defaults to {@code false}.
>>      *
>>      * @return the {@code reducedTransparency} property
>>      * @defaultValue {@code false}
>>      * @since 24
>>      */
>>     ReadOnlyBooleanProperty reducedTransparencyProperty();
>> 
>>     ...
>> }
>> 
>> 
>> On Windows, these preferences correspond to "Transparency effects" and 
>> "Animation effects" in the system settings:
>> <img 
>> src="https://github.com/user-attachments/assets/b286850d-ebbc-444c-9c09-5380f97d0e91";
>>  width="400" >
>> 
>> On macOS, these preferences correspond to "Reduce motion" and "Reduce 
>> transparency" in the system settings:
>> <img 
>> src="https://github.com/user-attachments/assets/4c7b92f8-0cd9-4d1f-91df-40cb449f91ff";
>>  width="400" >
>> 
>> On Linux, the `reducedMotion` preference corresponds to 
>> `gtk-enable-animations`. On my Ubuntu 24.04 system, GTK3 does not pick up 
>> the "Settings / Accessibility / Reduce Animations" system setting, and 
>> therefore GTK always reports `gtk-enable-animations == true`. Changing the 
>> preference requires manually editing `etc/gtk-3.0/settings.ini`. The 
>> `reducedTransparency` preference has no corresponding GTK setting.
>
> Michael Strauß has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   small changes

This seems like a reasonable enhancement. Since this adds new interface 
methods, it is (technically) an incompatible change. I recommend either 
documenting that applications should not implement the interface, or else make 
it a sealed class so that they can't.

modules/javafx.graphics/src/main/java/javafx/application/Platform.java line 598:

> 596:          * @since 24
> 597:          */
> 598:         ReadOnlyBooleanProperty reducedMotionProperty();

Adding a new method  without a default implementation to an interface is an 
incompatible change. Since we do not expect that an application would ever 
implement this interface, this seems OK to me.

We should either add an `@implSpec` to the class docs indicating that 
applications should not implement  `Platform.Preferences` or make it a sealed 
interface.

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

PR Review: https://git.openjdk.org/jfx/pull/1592#pullrequestreview-2352168072
PR Review Comment: https://git.openjdk.org/jfx/pull/1592#discussion_r1790364314

Reply via email to