RFR: 8350149: VBox ignores bias of child controls when fillWidth is set to false [v3]

John Hendrikx jhendrikx at openjdk.org
Fri Feb 28 21:26:58 UTC 2025


On Mon, 24 Feb 2025 20:54:05 GMT, Andy Goryachev <angorya at openjdk.org> wrote:

>> Yeah, or possibly zero included.  What I meant here is that these are **real** values, and don't have a "special" value `-1` meaning absent/unavailable.
>
> A _very quick_ test with the monkey tester showed it never entered `boundedSize()` with zero values, but I can't be sure (I've seen 0's in `layoutChildren()`).
> 
> The statement about "never -1" is even more suspect below when margins are subtracted...
> 
> I just wanted to point this out because I am not entirely sure that we'll never receive 0 width/height.

There are a few guards in the code that prevent these values from becoming negative (as some negative values have special meanings).  See for example this code: 

    @Override public final double minWidth(double height) {
        final double override = getMinWidth();
        if (override == USE_COMPUTED_SIZE) {
            return super.minWidth(height);
        } else if (override == USE_PREF_SIZE) {
            return prefWidth(height);
        }
        return Double.isNaN(override) || override < 0 ? 0 : override;
    }

This method is `final`, to prevent anyone from messing with this logic.  And as you can see, the `override` value (which comes from calling `computeMinWidth` for example) is checked against special values, and other values are returned instead.  If it is not any special value, it is guarded against negative (it becomes 0) and against `NaN`.

Whether that truly guarantees we'll never see negative values, I'm not 100% sure off, but I think that's definitely the intent as specific negative values have special meanings.  So I think I'll document these as `cannot be negative`.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1723#discussion_r1976024980


More information about the openjfx-dev mailing list