New CSS parser for JavaFX

John Hendrikx john.hendrikx at gmail.com
Mon Aug 26 21:35:22 UTC 2024


On 26/08/2024 22:42, Michael Strauß wrote:
>> can we create stylesheets programmatically without parsing (i.e. construct the token tree directly)?
> Maybe, but `Stylesheet` and its constituent classes really seem like
> exposed implementation details of JavaFX. I would rather deprecate
> their use and remove them from the public API eventually.

I'm pretty convinced of that as well.  The whole CSS API seems to have 
been put in place to allow use of binary stylesheets (to perhaps 
load Modena .5 seconds faster?), it doesn't seem to serve much of a 
function beyond that.  I haven't found a use for any of these classes 
and the API surface they expose.

For example, I implemented a LESS parser that I can use with JavaFX, and 
the CSS API was absolutely no help there (what is the point of being 
able to create a StyleSheet when I can't "set" it on a Scene?) -- 
instead I've just resorted to writing the LESS output to memory buffers, 
and pointing my stylesheet properties directly to these (using 
"data:text/css;charset=UTF-8;base64," URL's -- thanks for whoever 
mentioned "data" URL's, I was writing these to temporary files before 
that...).

The CSS API classes are also full of observable properties, which seems 
a rather odd decision given that a Stylesheet is probably far better 
represented as something immutable.  Imagine assigning a Stylesheet type 
to Scene (something that isn't possible, so it is unclear what the 
purpose of this class is), then having the CSS engine observe almost 
every aspect of this Stylesheet, just in case someone decides to add a 
new Selector somewhere programmatically... it would be incredibly 
complicated to "act" on such a change correctly, requiring no doubt 
thousands of lines of code, that will likely never ever be used in any 
FX application (well perhaps if you are writing a Stylesheet editor, but 
that's hardly a use-case worth supporting just in case...)

--John


More information about the openjfx-dev mailing list