On Thu, 2 Jul 2026 23:23:10 GMT, Michael Strauß <[email protected]> wrote:

>> JavaFX controls in the title bar were previewed with 
>> [JDK-8313424](https://bugs.openjdk.org/browse/JDK-8313424) (delivered in JFX 
>> 25) and the API was subsequently refined with 
>> [JDK-8369836](https://bugs.openjdk.org/browse/JDK-8369836) and 
>> [JDK-8370446](https://bugs.openjdk.org/browse/JDK-8370446) (delivered in JFX 
>> 26). The feedback collected in two preview rounds suggests that the API is 
>> fit for purpose, and no fundamental changes are required. This means that 
>> the feature is ready to become final and permanent in JFX 27.
>> 
>> I propose a few small changes to smooth out remaining edges:
>> 1. **Rename `HeaderBar.prefButtonHeight` to `HeaderBar.systemButtonHeight`**
>>    This more clearly expresses that it is the height of the 
>> _system-provided_ buttons.
>> 2. **Rename `HeaderBar.minSystemHeight` to `HeaderBar.systemMinHeight`**
>>    What is meant is not a _minimum system height_ (which makes no sense), 
>> but a _system-provided minimum height_.
>> 3. **Add `HeaderBar.systemColorScheme`**
>>    In the previous iteration, the color scheme of the header buttons on 
>> Windows and Linux was determined by the brightness of the `Scene.fill` 
>> background. On macOS, which uses header buttons drawn by the operating 
>> system, the color scheme of the header buttons was instead determined by the 
>> color scheme of the window itself.
>> 
>>    The newly added `HeaderBar.systemColorScheme` attached property allows 
>> applications to specify the color scheme for system-provided header buttons 
>> directly, without falling back to either the scene background or the window 
>> color scheme. The default value of the property is `null`, which means "no 
>> preference"; in this case, the color scheme for header buttons will match 
>> the color scheme for the window on all platforms. Setting this property to a 
>> non-null value is only necessary in the rare case when an application needs 
>> different color schemes for header buttons and the window (i.e. when it has 
>> a bright title bar in dark mode, or a dark title bar in light mode).
>> 
>> Since these changes are only cosmetic (in the case of renamed properties) 
>> and don't fundamentally change the API of the enhancement (in the case of 
>> `HeaderBar.systemColorScheme`), they shouldn't need to be previewed for 
>> another round.
>> 
>> The rest of the significant changes in this PR are a clean-up pass over the 
>> documentation, and having the macOS header button implementation support the 
>> new `HeaderBar.systemColorScheme` property.
>> 
>> ## Note on the use of attached properties
>> This e...
>
> Michael Strauß has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   HeaderBar.systemColorScheme evaluates to platform when not connected to 
> scene

some preliminary review comments, will do more testing and reviewing later this 
day

modules/javafx.graphics/src/main/java/com/sun/glass/ui/HeaderButtonOverlay.java 
line 353:

> 351:             stylesheet.subscribe(this::updateStylesheet));
> 352: 
> 353:         getStyleClass().setAll("-FX-INTERNAL-header-button-container");

Should this be `-FX-INTERNAL` still? I thought this is named like that simply 
because it's a preview feature?

modules/javafx.graphics/src/main/java/com/sun/glass/ui/Window.java line 314:

> 312:      * {@link HeaderBar#USE_DEFAULT_SIZE} is specified.
> 313:      */
> 314:     private final ReadOnlyDoubleWrapper headerButtonHeight =

same question as for `headerButtonDarkStyle`

modules/javafx.graphics/src/main/java/com/sun/glass/ui/Window.java line 335:

> 333:      * Sub-classes can use this value in their header button 
> visualization, but they are not required to do so.
> 334:      */
> 335:     private final ReadOnlyBooleanWrapper headerButtonDarkStyle =

Can this be a lazy property? From what I saw when reviewing locally, this is 
only called when we are an extended window, otherwise it is not. If this 
correct, then I think it makes sense to save a bit of memory (especially since 
this class is also used for plain `Popup`s).

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

PR Review: https://git.openjdk.org/jfx/pull/2188#pullrequestreview-4629311373
PR Review Comment: https://git.openjdk.org/jfx/pull/2188#discussion_r3522976848
PR Review Comment: https://git.openjdk.org/jfx/pull/2188#discussion_r3522971065
PR Review Comment: https://git.openjdk.org/jfx/pull/2188#discussion_r3522970585

Reply via email to