kordamp / ikonli

Icon packs for Java applications
http://kordamp.org/ikonli/
Apache License 2.0
500 stars 50 forks source link

Cannot bind size then set font #160

Open johantiden opened 1 year ago

johantiden commented 1 year ago

iconSizeProperty and fontSize seem indepentend but are not. If you bind iconSizeProperty and then try to set the font, you get an exception.

FontIcon fontIcon = new FontIcon("mdi2m-magnify");
fontIcon.iconSizeProperty().bind(new SimpleDoubleProperty(17));
fontIcon.setFont(new Font("Arial", 10));
java.lang.RuntimeException: FontIcon.iconSize : A bound value cannot be set.
    at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:144)
    at javafx.css.StyleableIntegerProperty.set(StyleableIntegerProperty.java:82)
    at org.kordamp.ikonli.javafx.FontIcon.setIconSize(FontIcon.java:213)
    at org.kordamp.ikonli.javafx.FontIcon.lambda$new$0(FontIcon.java:63)
    at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)

FontIcon extends Text, which makes it eligible for css styling. The css engine will try to set the font, and procudes this stack trace for me:

java.lang.RuntimeException: FontIcon.iconSize : A bound value cannot be set.
    at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:144)
    at javafx.css.StyleableIntegerProperty.set(StyleableIntegerProperty.java:82)
    at org.kordamp.ikonli.javafx.FontIcon.setIconSize(FontIcon.java:213)
    at org.kordamp.ikonli.javafx.FontIcon.lambda$new$0(FontIcon.java:63)
    at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
    at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:106)
    at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
    at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
    at javafx.css.StyleableObjectProperty.set(StyleableObjectProperty.java:82)
    at javafx.css.StyleableObjectProperty.applyStyle(StyleableObjectProperty.java:68)
    at javafx.scene.CssStyleHelper.transitionToState(CssStyleHelper.java:954)
    at javafx.scene.Node.doProcessCSS(Node.java:9574)
    at javafx.scene.Node$1.doProcessCSS(Node.java:481)
    at com.sun.javafx.scene.NodeHelper.processCSSImpl(NodeHelper.java:193)
    at com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:146)
    at javafx.scene.Parent.doProcessCSS(Parent.java:1400)
    at javafx.scene.Parent$1.doProcessCSS(Parent.java:125)
    at com.sun.javafx.scene.ParentHelper.processCSSImpl(ParentHelper.java:98)
    at com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:146)
    at javafx.scene.Node.processCSS(Node.java:9456)
    at javafx.scene.Node.processCSS(Node.java:9449)
    at javafx.scene.Scene.doCSSPass(Scene.java:572)
    at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2510)
    at com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:423)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:422)
    at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:452)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:575)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:555)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:548)
    at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:353)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:290)
    at java.base/java.lang.Thread.run(Thread.java:833)

As a workaround I will opt out of binding and properties on Ikonli objects.

This was created on

johantiden commented 1 year ago

These are probable all related: https://github.com/kordamp/ikonli/issues/156, https://github.com/kordamp/ikonli/issues/150