From 7c092bf4a2d68b1a9995b5fa6c5b151427c4412b Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Fri, 5 Sep 2025 15:16:00 +0200 Subject: [PATCH 1/6] CSSTUDIO-3429 Restore calls to setMinSize(). --- .../representation/javafx/widgets/LabelRepresentation.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/LabelRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/LabelRepresentation.java index e65e4d4a89..3585156e5d 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/LabelRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/LabelRepresentation.java @@ -138,12 +138,14 @@ public void updateChanges() { case NONE: jfx_node.setPrefSize(width, height); + jfx_node.setMinSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); jfx_node.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); if (was_ever_transformed) jfx_node.getTransforms().clear(); break; case NINETY: jfx_node.setPrefSize(height, width); + jfx_node.setMinSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); jfx_node.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); jfx_node.getTransforms().setAll(new Rotate(-rotation.getAngle()), new Translate(-height, 0)); @@ -151,6 +153,7 @@ public void updateChanges() break; case ONEEIGHTY: jfx_node.setPrefSize(width, height); + jfx_node.setMinSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); jfx_node.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); jfx_node.getTransforms().setAll(new Rotate(-rotation.getAngle()), new Translate(-width, -height)); @@ -158,6 +161,7 @@ public void updateChanges() break; case MINUS_NINETY: jfx_node.setPrefSize(height, width); + jfx_node.setMinSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); jfx_node.setMaxSize(Control.USE_PREF_SIZE, Control.USE_PREF_SIZE); jfx_node.getTransforms().setAll(new Rotate(-rotation.getAngle()), new Translate(0, -width)); From fce5f18fb0cfc7576a2d6990590491a89102aaec Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Fri, 5 Sep 2025 15:35:34 +0200 Subject: [PATCH 2/6] CSSTUDIO-3429 Call setTextFill(text_color) when square_led == false. --- .../widgets/ByteMonitorRepresentation.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java index 3815953624..e216b8e36c 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java @@ -428,20 +428,25 @@ public void updateChanges() for (int i = 0; i < N; i++) { leds[i].setFill(save_values[i]); - if (save_labels[i] != null && square_led) - { - // Compare brightness of LED with text. - final double brightness = Brightness.of(save_values[i]); - if (Math.abs(text_brightness - brightness) < Brightness.SIMILARITY_THRESHOLD) - { // Colors of text and LED are very close in brightness. - // Make text visible by forcing black resp. white - if (brightness > Brightness.BRIGHT_THRESHOLD) - save_labels[i].setTextFill(Color.BLACK); + if (save_labels[i] != null) { + if (square_led) + { + // Compare brightness of LED with text. + final double brightness = Brightness.of(save_values[i]); + if (Math.abs(text_brightness - brightness) < Brightness.SIMILARITY_THRESHOLD) + { // Colors of text and LED are very close in brightness. + // Make text visible by forcing black resp. white + if (brightness > Brightness.BRIGHT_THRESHOLD) + save_labels[i].setTextFill(Color.BLACK); + else + save_labels[i].setTextFill(Color.WHITE); + } else - save_labels[i].setTextFill(Color.WHITE); + save_labels[i].setTextFill(text_color); } - else + else { save_labels[i].setTextFill(text_color); + } save_labels[i].layout(); } } From f6f64f6b506cc7c407de99b4b98b9f6610a4340f Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Fri, 5 Sep 2025 16:26:44 +0200 Subject: [PATCH 3/6] CSSTUDIO-3429 Call pane.layout() on the JavaFX Application Thread at a later point in time. --- .../javafx/widgets/ByteMonitorRepresentation.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java index e216b8e36c..1dd403cca7 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java @@ -83,6 +83,8 @@ protected Pane createJFXNode() throws Exception horizontal = model_widget.propHorizontal().getValue(); addLEDs(pane); pane.setManaged(false); + Platform.runLater(() -> pane.layout()); + return pane; } From 107c1ce2b58026b44621eac8495d3555e95f5e15 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Wed, 10 Sep 2025 09:33:52 +0200 Subject: [PATCH 4/6] Revert "CSSTUDIO-3429 Call pane.layout() on the JavaFX Application Thread at a later point in time." This reverts commit f6f64f6b506cc7c407de99b4b98b9f6610a4340f. --- .../javafx/widgets/ByteMonitorRepresentation.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java index 1dd403cca7..e216b8e36c 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java @@ -83,8 +83,6 @@ protected Pane createJFXNode() throws Exception horizontal = model_widget.propHorizontal().getValue(); addLEDs(pane); pane.setManaged(false); - Platform.runLater(() -> pane.layout()); - return pane; } From 2a9713d90ebc52c852d2bd33341bf0cb994eddbd Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Wed, 10 Sep 2025 09:33:57 +0200 Subject: [PATCH 5/6] Revert "CSSTUDIO-3429 Call setTextFill(text_color) when square_led == false." This reverts commit fce5f18fb0cfc7576a2d6990590491a89102aaec. --- .../widgets/ByteMonitorRepresentation.java | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java index e216b8e36c..3815953624 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java @@ -428,25 +428,20 @@ public void updateChanges() for (int i = 0; i < N; i++) { leds[i].setFill(save_values[i]); - if (save_labels[i] != null) { - if (square_led) - { - // Compare brightness of LED with text. - final double brightness = Brightness.of(save_values[i]); - if (Math.abs(text_brightness - brightness) < Brightness.SIMILARITY_THRESHOLD) - { // Colors of text and LED are very close in brightness. - // Make text visible by forcing black resp. white - if (brightness > Brightness.BRIGHT_THRESHOLD) - save_labels[i].setTextFill(Color.BLACK); - else - save_labels[i].setTextFill(Color.WHITE); - } + if (save_labels[i] != null && square_led) + { + // Compare brightness of LED with text. + final double brightness = Brightness.of(save_values[i]); + if (Math.abs(text_brightness - brightness) < Brightness.SIMILARITY_THRESHOLD) + { // Colors of text and LED are very close in brightness. + // Make text visible by forcing black resp. white + if (brightness > Brightness.BRIGHT_THRESHOLD) + save_labels[i].setTextFill(Color.BLACK); else - save_labels[i].setTextFill(text_color); + save_labels[i].setTextFill(Color.WHITE); } - else { + else save_labels[i].setTextFill(text_color); - } save_labels[i].layout(); } } From d4c4f186921c89085d1086138d0e8e031b5e5c72 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Wed, 10 Sep 2025 09:37:30 +0200 Subject: [PATCH 6/6] CSSTUDIO-3429 Call layout() unconditionally in updateChanges(). --- .../javafx/widgets/ByteMonitorRepresentation.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java index 3815953624..b26d8a8534 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ByteMonitorRepresentation.java @@ -447,5 +447,14 @@ public void updateChanges() } } } + + if (jfx_node != null) { + jfx_node.layout(); + } + for (Label label : labels) { + if (label != null) { + label.layout(); + } + } } }