I have another interesting behavior involving CSS. The gauge has a text 
representation of the value of the needle, which can be formatted using 
DecimalFormat. The format string can be set with a styleable property.

In the example this property is set, via setStyle(), to something with a unit postfix, 
e.g. "##0.0W" so the gauge will show watts. This works. But as soon as totally 
unrelated classes are removed from the gauge, the styleable property reverts to its 
initial value, but the style string is unchanged!

This behavior is introduced in 8u20, in 8u00 it works as intended.

Tom

On 4-4-2015 08:14, Tom Eugelink wrote:
After loads of trail and error I pinned it down to the fact that scaling of the 
node in question was not taking into account when positioning it; it is 
centered and I use its width to do that, but it was the width-before-scaling. 
So it was a miracle it was in the right place at all. What really would be 
needed here (and I think anyone who has done HTML with CSS will agree) is a 
which-property-is-set-by-which-CSS-class-and-file, like the debug view in 
browsers. Does the CSS engine keep track of this information?

Tom


On 3-4-2015 22:19, David Grieve wrote:
When you add or remove style-classes, CSS for the node (and all its children) 
is totally re-calculated. This means that cached data for that node is tossed 
out and the node is styled from scratch, as if it were just added to the 
scene-graph.

You are much better off using pseudo-class state for what you are trying to do. 
Changes in pseudo-class state just causes evaluation of what styles are applied 
in that state, which is relatively low overhead compared to re-calculating 
styles.

To debug, you should try using Scenic View 
(http://fxexperience.com/scenic-view/)

You can also use the Node API Map<StyleableProperty<?>,List<Style>> 
impl_findStyles(Map<StyleableProperty<?>,List<Style>> styleMap). Note that this is deprecated API

On 4/3/15 2:13 PM, Tom Eugelink wrote:
One addition: the move happens if, for example, "segment0-active" is added to 
the skinnable. Even if that class is empty or even not defined in the CSS.

Tom

On 3-4-2015 19:48, Tom Eugelink wrote:
I'm pushing the envelope a bit -I think- concerning the use of CSS. I have setup a control (gauge) 
in such a way that, depending on the position of the needle, certain CSS classes are added or 
removed from the control. For example a "errorSegment-active" class if the value comes 
into the 90-100 value in a 0-100 gauge. In this class a CSS variable -fx-error-indicator-visibility 
is set to "visible" and that again shows some kind of indicator on the gauge. Works great.

What is strange is when this class is assigned to the control, a totally 
unrelated node (the value in the needle) suddenly moves out of position. I do 
not understand this, because the CSS only involves colors and visibility, never 
any transformation.
https://github.com/JFXtras/jfxtras-labs/blob/8.0/src/main/resources/jfxtras/labs/internal/scene/control/gauge/linear/SimpleMetroArcGauge.css

Is there any way to debug what CSS settings are applied to nodes? I really 
would like to find out what causes that node to move.

Tom




Reply via email to