It would be nice to support something like LESS (https://lesscss.org/).

I've integrated a LESS parser in my personal project that takes .less files and converts them to CSS before giving them to JavaFX.  This allows me to use functions like "fade" and "lighten":

    -fx-background-color: fade(black, 40%);
    -fx-background-color: lighten(@glass-color, 20%, relative);

It supports variables, and the & operator to repeat parent selectors, here a bigger example:

    .group-heading {
      @c1: rgba(255, 255, 255, 85%);
      @c2: fade(@text-accent-highlight, 70%);

      &.horizontal {
        -fx-background-color: linear-gradient(to right, transparent 0%, @c2 18%, transparent 48%, transparent),                               linear-gradient(to right, transparent 0%, @c2 6%, @c2 35%, transparent 98%, transparent);         -fx-border-color: linear-gradient(to right, transparent 0%, transparent 50%, @c1 93%, @c1 99%, transparent);
      }

      &.vertical {
        -fx-background-color: linear-gradient(to top, transparent 0%, @c2 18%, transparent 48%, transparent),                               linear-gradient(to top, transparent 0%, @c2 6%, @c2 35%, transparent 98%, transparent);         -fx-border-color: linear-gradient(to top, transparent 0%, transparent 50%, @c1 93%, @c1 99%, transparent);
      }
    }

It integrates relatively easily. I let it statically compile the less files and generate regular CSS file URL's:

    private static final String ROOT_STYLES_URL = LessLoader.compile(RootNodeFactory.class, "root.less");     private static final String PROGRESS_STYLES_URL = LessLoader.compile(RootNodeFactory.class, "progress-pane.less");     private static final String CLOCK_STYLES_URL = LessLoader.compile(RootNodeFactory.class, "clock-pane.less");     private static final String LOGO_STYLES_URL = LessLoader.compile(RootNodeFactory.class, "logo-pane.less");     private static final String FPS_STYLES_URL = LessLoader.compile(RootNodeFactory.class, "fps-pane.less");

Then you can use it like any other stylesheet on a component:

    clockPane.getStylesheets().add(CLOCK_STYLES_URL);


--John


On 15/01/2023 01:31, Scott Palmer wrote:
I was looking at Modena.css and came across this:

    /* A bright blue for the focus indicator of objects. Typically used as the      * first color in -fx-background-color for the "focused" pseudo-class. Also
     * typically used with insets of -1.4 to provide a glowing effect.
     */
    -fx-focus-color: #039ED3;
    -fx-faint-focus-color: #039ED322;

I noticed two things pertaining to -fx-faint-focus-color. Although I've used this form to specify colors myself, the JavaFX CSS Reference Guide at https://openjfx.io/javadoc/19/javafx.graphics/javafx/scene/doc-files/cssref.html#typecolor does not mention being able to use an 8-digit form of #rrggbbaa when using hex digits. Only the 3- and 6-digit forms of hexadecimal RGB are mentioned. RGB + Alpha colors are only documented in the form of rgba(#,#,#,#) and rgba(#%,#%,#%,#).

More importantly, this is a copy of -fx-focus-color with an added alpha channel, but it's created by repeating the literal color value and appending the alpha component, rather than somehow deriving it from -fx-focus-color.  Similar repetition is needed for the semi-transparent chart colors.

Would it make sense to add support for something similar to derive( <color> , <number>% ) to specify a color based on an existing color with a new value for the alpha channel (or any other) value? Maybe a color-transform method that would do for an RGBA color vector what other transforms do for spatial coordinates?*

Regards,

Scott

* Note: It seems future CSS standards are looking for ways to do similar things.  A color-modfunction was proposed in https://www.w3.org/TR/2016/WD-css-color-4-20160705/#funcdef-color-mod but removed in the next revision https://www.w3.org/TR/2022/CRD-css-color-4-20221101/#changes-from-20160705. I'm not following CSS development closely, but some googling suggests the next proposal is based on a new keyword 'from' to create derived colors.  E.g rgb(from skyblue, 255 g b) to get a color based on skyblue with a red component of 255. This is mentioned here https://github.com/w3c/csswg-drafts/issues/3187#issuecomment-499126198  I'm skeptical that it is worth waiting for the dust to settle on the CSS standard, but supporting whatever they come up with is a possibility.

Reply via email to