1.3 KiB
Each widget has:
- Class: Type of widget.
Example: textbox, scrollbar, separator
Class are prefixed with a @
- Name: Internal name of the widget.
Sub-widgets are {Parent}.{Child}.
Example: Listview, Listview.Even, Listview.Uneven, Listview.Scrollbar
Names are prefixed with a #
- State: State of widget
Optional flag(s) indicating state. Multiple flags can be set.
Example: Highlight Active Urgent
States are prefixed with a !
So to set color of Even entry in listview that is highlighted and urgent:
@textbox #Listview.Even !Urgent !Highlight
Or to indicate all textboxes
@textbox !Highlight
Class is manditory, name is optional. Name is split on .s.
Internally:
The theme is represented like a tree:
class --> name --> name --> state -> state
The states are sorted alphabetically
So @textbox #Listview.Even !Urgent !Highlight
becomes:
textbox->listview->even -> highlight -> urgent.
When searching for entries the tree is traversed until deepest node is found. Missing states are skipped. Then from there properties are searched going up again.
Properties are in the form of:
name: value
Each property ends with ;
Each property has a type. (Boolean, Integer, String, Color)
A block is enclosed by {}
@textbox #Listview.Even !Urgent !Highlight {
padding: 3;
foreground: #aarrggbb;
}