Debugging CSS

Tom Eugelink tbee at tbee.org
Sun Apr 5 07:56:46 UTC 2015


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
>>>
>>
>



More information about the openjfx-dev mailing list