On Mon, 31 Aug 2026 21:46:33 GMT, Marius Hanl <[email protected]> wrote:

>> I wonder, why do we even need the unsnapped setting?  what is the use case?
>
>> I wonder, why do we even need the unsnapped setting? what is the use case?
> 
> That is something I always asked myself as well.

>   * HBox 2 (snapped) gets 10.25 pixels
>     * Child 1 gets 5 pixels
>     * Child 2 gets 5 pixels
>     * (empty space within border of 0.25 pixels)
>       * Empty space location determined by alignment
>         * LEFT: C1  C2 (0.25)
>         * CENTER: (0.125) C1  C2 (0.125)
>         * RIGHT: (0.25) C1  C2

It can't possibly work like that. You have a snapped HBox that is allocated 
10.25 pixels. Now, each of the two children must be allocated 5 pixels, as 
otherwise they will be off-grid. If you allocate 5.0 pixels to C1, and 5.25 
pixels to C2, then the latter will be off-grid at its right edge.

The remainder of 0.25 pixels can't possibly be anywhere else but at the right 
edge of the allocated space:
1. If the remainder is at the left edge of the allocation, then both children 
will be offset 0.25 pixels relative to the grid.
2. If it is between the children, then the left child will be aligned, but the 
right child will be offset.
3. This leaves the right edge as the only place where to insert the remainder.

What confuses me is the following: You argue that we should just accept the 
allocation that we receive from the parent. But then you also say that a small 
portion of empty space should be inserted when the children can't fill the 
allocation. I can't help but see a contradiction here. We can only choose 
between two options:

1. A layout container accepts the allocation it has received, and lays out its 
children so the assigned allocation is perfectly honored. If the allocation is 
not snapped, this inevitably means that at least one child can't be perfectly 
aligned to the grid. In the HBox scenario, it means that we can perfectly align 
all children but the last, which needs to be that 0.25 pixels wider in order to 
perfectly fill the allocation.
2. Alternatively, we don't accept the allocation that was given to us, but 
instead snap the allocation to the pixel grid. Only then will be be able to 
perfectly align the children within that allocation.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/2262#discussion_r3905970667

Reply via email to