On Mon, 24 Feb 2025 20:54:05 GMT, Andy Goryachev <[email protected]> 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