I am making a GUI application that has a themes folder inside the package. Users can write their own theme files following the format specified in the documentation - it is somewhat similar to GTK theme files.

Now, inside the theme file, the data is mainly about widget colours, fonts, sizes, position and so on - everything is specific to each widget. These data can refer to each other to avoid repetition.

The trouble is: writing data for each and every single widget or element on the screen is cumbersome. Some widgets share the same look, but some have different properties. Example : Close button and Play button. They both are buttons, but look very different.

How is this, from a designers point of view, handled? Should I keep this code-for-each-element pattern, or do something else? I thought about the following:

  1. Add a "default" theme for each widget type (eg: all buttons)
  2. If the theme doesn't have a specific widget data (eg: close button), fallback to the aforementioned default.

Is this a viable solution? Is it easy to maintain and establish? I have no experience in this area at all, apart from the designing/drawing part. Also, this software is part of an academic project. My professor and I (and some other faculty) will be doing most of the maintenance.

  • I think this really all boils down to sheer opinion based upon someone preferred working method. I would prefer a default style which encompasses all [similar] items, then documentation on how to specify properties per-item if I desired.
    – Scott
    Commented Aug 6, 2015 at 22:31
  • From a web developer point of view I would say you should define defaults. When I make websites, all buttons (on contact forms, login forms etc) use a certain style by default unless I tell them not to. I'd change the background color, hover color etc individually, but all properties that I don't change like font size, font color and shadow are taken from the default. Commented Aug 7, 2015 at 0:03


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.