I suspected as much, and that really is a shame because it cripples the 
declaration based behavior. The parser could of course declare any property it 
does not know at the time of parsing as needed to be looked up. Ultimately I 
cannot move the colorschemes into a separate file, so they are reusable by all 
gauges,, because the import must preceed any declarations.

All classes in the CSS are below .SimpleMetroArcGauge, I will prefix them. What 
I really want to do is reuse the -fxx-needle-color for each gauge, that is: 
multiple instances of the same control, but also different gauges, so I can 
have a universal set of colorscheme's applicable to every gauge.

Maybe I should have a look at placeholders and let Gradle / Maven resolve them.


On 9-4-2015 17:59, David Grieve wrote:
Take -fxx-needle-color (from SimpleMetroArcGauge.css) as an example. Its 
declaration appears in the .SimpleMetroArcGauge rule and is then used in the 
-fx-fill declaration of the .needle rule. The CSS parser is pretty dumb. It 
collects up the property names as it parses and if any of those property names 
appears a a property value, it marks the property value as needing to be looked 
up. Then, at run time, if a property has a value that needs to be looked up, 
the CSS engine goes from the node up to the root looking for a declaration that 
resolves the property to a real value. Anyway, the point is, you can't have 
forward references for these lookup values.

Note also that the .needle node has to be a .SimpleMetroArcGauge or a child of 
a .SimpleMetroArcGauge for the lookup to work. In modena.css, for example, all 
of the lookup properties are declared in the .root rule so this isn't an issue. 
You could do the same or be more explicit in your rules by saying, e.g.,

.needle { -fx-fill: orange; }
.SimpleMetroArcGauge .needle { -fx-fill: -fxx-needle-color; }

In this way, a needle that is a child of .SimpleMetroArcGauge will pick up 
-fxx-needle-color, but a .needle that is not will be orange.


On 4/9/15 11:11 AM, Tom Eugelink wrote:
Hm. That would mean this should work, but it does not. So instead of moving the 
lines 216 and up to a separate file, I moved them to the front, but the 
colorschemes are not working then. The lines must be after the first 
(.SimpleMetroArcGauge) block. I don't understand why this matters, if it is 
declaration based.

https://github.com/JFXtras/jfxtras-labs/blob/8.0/src/main/resources/jfxtras/labs/internal/scene/control/gauge/linear/SimpleMetroArcGauge.css


On 9-4-2015 13:34, David Grieve wrote:
Yes. The details are in http://www.w3.org/TR/CSS2/cascade.html#cascading-order, but here 
is the excerpt that matters: " if two declarations have the same weight, origin and 
specificity, the latter specified wins. Declarations in imported style sheets are 
considered to be before any declarations in the style sheet itself."

On 4/9/15 1:42 AM, Tom Eugelink wrote:
Does the order in which things appear in a CSS have influence on the behavior?

Tom


On 8-4-2015 23:22, David Grieve wrote:
The spec says that if there is an @import it has to appear first before any 
rule, except @charset, if present.

On 4/8/15 5:12 PM, Tom Eugelink wrote:
I'm currently porting and reworking some gauges from Enzo to JFXtras. One of 
things that gets reworked involves that all gauges will have custom colored 
segments. These segments can be preset using colorschemes (e.g. green to red in 
10 steps), so the CSS for these colors are shared over all gauges. I tried 
using @import, but since it is required to be the first lines in a CSS, I'm 
suspecting that is the reason it is not working as expected.

Is there any intention to allow these imports to occur half way in a file? 
Placeholder-and-replace alike (#include), so to speak.

Tom






Reply via email to