RFR: 8313709: Wrong layout of a FlowPane in a BorderPane in a ScrollPane, if padding is too big [v2]

Michael Strauß mstrauss at openjdk.org
Thu Oct 26 00:34:44 UTC 2023


On Tue, 8 Aug 2023 23:44:58 GMT, Jose Pereda <jpereda at openjdk.org> wrote:

>> So far, BorderPane does the calculation for the children min/pref width/height taken into account only the margin applied to them, if any, but not the total padding that could be applied as well to the BorderPane itself.
>> 
>> However, this padding needs to be taken into account as well, and this PR modifies BorderPane to subtract its insets from its size while doing the children min/pref width/height calculations.
>> 
>> A parameterized test has been included. 
>> 
>> It is a simplified version of the test case attached to https://bugs.openjdk.org/browse/JDK-8313709, but still shows how without this patch, two of the cases (padding with or without margin) fail, while pass with it.
>
> Jose Pereda has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Migrate old tests to JUnit 5

modules/javafx.graphics/src/main/java/javafx/scene/layout/BorderPane.java line 414:

> 412:         final Insets insets = getInsets();
> 413:         if (width != -1) {
> 414:             width -= (insets.getLeft() + insets.getRight());

Let's say we call `computeMinHeight(10)`, but the left and right insets are 20. This means that `width` is now -10, which probably means "ignore the value" (the spec isn't entirely clear about that, but -10 is not a valid width in any case).

I think the following code might be better:

if (width >= 0) {
    width = Math.max(0, width - insets.getLeft() - insets.getRight());
}

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1203#discussion_r1372443874


More information about the openjfx-dev mailing list