On Wed, 26 Aug 2026 08:25:35 GMT, Marius Hanl <[email protected]> wrote:

>> BorderPane's measurement and layout calculations are not correct when 
>> pixel-snapping is enabled. Here is what's wrong with BorderPane, and what 
>> consequently needs to be fixed:
>> 
>> 1. Insets are not snapped:
>>    * all measurement methods use raw insets
>>    * `layoutChildren()` also uses raw insets
>> 3. Content-biased children use the wrong dependent dimension:
>>    * top and bottom children call `prefHeight(adjustedWidth)` before their 
>> final width is established; left and right have the same problem with height
>>    * measurement and layout can disagree because
>>        - constrained measurement passes the pane's total width/height 
>> without first removing its snapped insets
>>        - `getAreaWidth` uses `fillHeight=false`, while left/right/center 
>> layout uses `fillHeight=true`
>> 5. Arithmetic results are not re-snapped.
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> modules/javafx.graphics/src/main/java/javafx/scene/layout/BorderPane.java 
> line 538:
> 
>> 536:             topHeight = result.y;
>> 537:             t.resize(result.x, topHeight);
>> 538:             topHeight = snapSpaceY(snapSpaceY(topMargin.getBottom()) + 
>> topHeight + snapSpaceY(topMargin.getTop()));
> 
> Shouldn't the entire result here simply be snapped using `snapSpace`, 
> something like this:
> 
> Suggestion:
> 
>             topHeight = snapSpaceY(topMargin.getBottom() + topHeight + 
> topMargin.getTop());
> 
> 
> Since the result is snapped and the `topHeight` is as well

No, this is in the guide.

|`top`|`bottom`| a + b | snap(a + b) | snap(a) + snap(b) |
|---|---|---|---|---|
|0.6|0.6|1.2|1.0|2.0|
|0.1|0.1|0.2|0.0|0.0|
|0.1|0.8|0.9|1.0|1.0|
|0.3|0.3|0.6|1.0|0.0|

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

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

Reply via email to