On Sat, 22 Mar 2025 12:20:17 GMT, John Hendrikx <jhendr...@openjdk.org> 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

Reply via email to