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