On Tue, 5 Nov 2024 16:47:00 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

>> Michael Strauß has updated the pull request incrementally with one 
>> additional commit since the last revision:
>> 
>>   stylistic changes
>
> modules/javafx.graphics/src/main/java/javafx/scene/layout/HeaderBarBase.java 
> line 51:
> 
>> 49:  * can specify draggable content nodes of the {@code HeaderBarBase} with 
>> the {@link #setDraggable} method.
>> 50:  *
>> 51:  * @apiNote Most application developers should use the {@link HeaderBar} 
>> implementation instead of
> 
> just curious: what's the reason to split the HB into the two classes?  Can 
> you give an example?

The goal of the JEP is to allow fully customizable header bars (excluding 
window buttons). `HeaderBarBase` is the basic building block that is required 
for the headerbar-specific features like dragging, double clicking, and so on. 
This class is special because its functionality can't be replicated by user 
code.

For maximum customizability, `HeaderBarBase` is just a `Region`. Subclasses are 
free to implement any kind of control on top of that. This is what `HeaderBar` 
is: an implementation on top of the basic functionality, offering a pretty 
useful API and layout behavior. It covers many common use cases with the 
separation between a leading, center, and trailing area.

But special applications might have special requirements. For example, the 
Spotify desktop app selectively hides items in its header bar depending on the 
available space, and sometimes dynamically changes the alignment of items. This 
would be a case where an application would use a custom implementation of 
`HeaderBarBase`.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1605#discussion_r1829974615

Reply via email to