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
