[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: Make themes a first-class concept in JavaFX
From:       Michael_Strauß <michaelstrau2 () gmail ! com>
Date:       2021-05-25 16:30:26
Message-ID: CAJEpuXSeRkiRdM_nRSdW50KPPcLkd8s+9YmhHFjRPv6wWNq9zA () mail ! gmail ! com
[Download RAW message or body]

Maybe others will chime in regarding the thin vs. rich API discussion.

Regarding the extensibility of themes:

If Modena and Caspian were public API, you could extend those themes
simply by subclassing:

public class CustomTheme extends Modena {
    private final ObservableList<String> allStylesheets =
            FXCollections.observableArrayList();

    private final ObservableList<String> customStylesheets =
            FXCollections.observableArrayList();

    public CustomTheme(Map<String, String> properties) {
        super(properties);

        // Add custom stylesheets here
        customStylesheets.add("com/example/custom.css");

        // Combine with Modena stylesheets
        allStylesheets = new ListBinding<>() {
           {  bind(super.getStylesheets(), customStylesheets); }

           @Override
           protected ObservableList<String> computeValue() {
               return FXCollections.concat(
                   super.getStylesheets(), customStylesheets);
           }
        };
    }

    @Override
    public ObservableList<String> getStylesheets() {
        return allStylesheets;
    }
}



Am Di., 25. Mai 2021 um 13:06 Uhr schrieb Pedro Duque Vieira
<pedro.duquevieira@gmail.com>:
> 
> Again thanks for bringing this up into discussion and for taking the time to file a \
> PR, etc. I like the idea of having better support for themes. 
> Regarding your first point:
> 1 - To keep it simple we can discard the idea of having an API to be able to check \
> what are the OS settings for dark/light, accent color, etc, for now. I think that \
> this can be a separate discussion. We could simply start by having an API that a \
> theme has to implement (probably an interface that the theme has to implement like \
> what I think happens with your proposed API). That API has properties: dark/light \
> style, accent color, etc. Each theme can decide to respond or not to changes in \
> those properties hence decide whether or not to support these features. 
> Regarding the second point:
> 2 - Not sure I explained myself well.
> What I meant was that right now, and it happens to all themes I know of, theme \
> creators decide to extend the Modena theme. What I mean by "extend" is that they \
> add stylesheets to the Scene/Parent (without being user agent stylesheets). This \
> means they simply build on top of the rules in Modena which is much easier/better \
> but also means that the rules they define in their stylesheets will trump any rules \
> defined by the theme users in their FXMLs, stylesheets (depending on specificity of \
> their rules in their stylesheets), code... I think this can be confusing and not \
> ideal for users of these themes, and I find most of the time theme users don't even \
> know about JavaFX user agent stylesheets feature vs Scene/Parent stylesheets and \
> what that implies. What I would propose is to have an API, perhaps in this theme \
> interface, that toggles whether the theme, theme creators are creating will be a \
> user agent stylesheet or a regular stylesheet. The advantage would be that if it is \
> a user agent stylesheet developers won't need to copy all Modena definitions into \
> their theme stylesheets, they can simply toggle this boolean to say what kind of \
> stylesheet they want their theme to be. 
> Thanks,


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic