On Sat, 22 Mar 2025 12:20:17 GMT, John Hendrikx <[email protected]> wrote:
> This PR will forward more Label calculations to LabeledSkinBase, as they are
> quite complex, especially when a Graphic is involved which is a full-fledged
> `Node`. More specifically, this solves issues with TitledPane when the
> graphic is resizable (ie. an HBox is placed as Graphic in the titled pane's
> title area). Before, the calculations would only look at the preferred size
> of the graphic, and use these regardless of available space, even if the
> maximum size allowed for the graphic to be larger. After this fix, the more
> extensive LabeledSkinBase calculations are used.
>
> This PR also simplifies the layout calculation. Instead of manually
> calculating where the label should be positioned (according to alignment),
> this is left to `layoutLabelInArea` which will do this automatically when its
> provided with the available space for the label instead of the label's width.
>
> See the ticket for a sample program; take a look at the graphic-only case
> where an HBox is used to put a label + gap + button as the graphic of the
> titled pane.
Looks good!
Also tried with `titleRegion.getAlignment()` code removed - still works as
expected. I agree with John it looks wrong.
The problem with inability to truncate the title label by setting max/pref
width might be a separate issue since it's also present in the `master` branch.
modules/javafx.controls/src/main/java/javafx/scene/control/skin/TitledPaneSkin.java
line 160:
> 158: registerChangeListener(titleRegion.alignmentProperty(), e -> pos
> = titleRegion.getAlignment());
> 159:
> 160: // NOTE: Listening to two different alignment properties, and
> using the last value of either is likely a bug!
I agree: it is definitely a bug. I think we should remove it along with the
possibility of specifying conflicting alignment via CSS. The control must be
in control.
modules/javafx.controls/src/main/java/javafx/scene/control/skin/TitledPaneSkin.java
line 514:
> 512: */
> 513:
> 514: double labelPrefWidth =
> TitledPaneSkin.super.computePrefWidth(height, 0, 0, 0, 0);
On a related subject: trying to get the title label truncated (using the code
sample in the ticket) did not succeed even though the TitledPane is a Labeled:
TitledPane tp1 = new TitledPane("Left Aligned Title with a long long
title with ellipses set", ...);
tp1.setPrefWidth(100);
tp1.setMaxWidth(100);
tp1.setEllipsisString("...");
This seems like a possible bug to me. What do you think?
-------------
PR Review: https://git.openjdk.org/jfx/pull/1742#pullrequestreview-2714550584
PR Review Comment: https://git.openjdk.org/jfx/pull/1742#discussion_r2012561300
PR Review Comment: https://git.openjdk.org/jfx/pull/1742#discussion_r2012653146