diff --git a/README.md b/README.md index 144e79d..50d1dbf 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,81 @@ -# Forest-ttk-theme -The Forest theme is a beautiful and modern ttk theme inspired by Excel. +# Forest theme for ttk + + +## How to use +### Python / tkinter +To use the theme just import the **forest-light.tcl**, or the **forest-dark.tcl** file, and call the `theme_use` method to set the theme: +```python +# Import the tcl file +root.tk.call('source', 'forest-light.tcl / forest-dark.tcl') + +# Set the theme with the theme_use method +ttk.Style().theme_use('forest-light / forest-dark') +``` + +### Tcl / tk +To use the theme just import the **forest-light.tcl**, or the **forest-dark.tcl** file, and call the `theme use` method to set the theme: +```tcl +# Import the tcl file +source "forest-light.tcl / forest-dark.tcl" + +# Set theme using the theme use method +ttk::style theme use forest-light / forest-dark +``` + +## New style elements +The Forest theme similar to my [Azure theme](https://github.com/rdbende/Azure-ttk-theme) has some **new** widget styles, such as an accent button, toggle switch, toggle button and card. You can apply these with the style option. + +If you need a highlighted button, use `Accent.TButton`: +```python +button = ttk.Button(root, text='Accent button', style='Accent.TButton', command=callback) +``` + +To create a toggle button you need a checkbutton, to which you can apply the `ToggleButton` style: +```python +togglebutton = ttk.Checkbutton(root, text='Toggle button', style='ToggleButton', variable=var) +``` + +The use of switches is becoming more common these days, so this theme has a `Switch` style, that can be applied to checkbuttons: +```python +switch = ttk.Checkbutton(root, text='Switch', style='Switch', variable=var) +``` + +If you only want a border around your widgets, not an entire LabelFrame then apply the `Card` style to a Frame: +```python +card = ttk.Frame(root, style='Card', padding=(5, 6, 7, 8)) +``` + +## A short example +for Python... +```python +import tkinter as tk +from tkinter import ttk + +root = tk.Tk() + +# Import the tcl file +root.tk.call('source', 'forest-dark.tcl') + +# Set the theme with the theme_use method +ttk.Style().theme_use('forest-dark') + +# A themed (ttk) button +button = ttk.Button(root, text="I'm a themed button") +button.pack(pady=20) + +root.mainloop() +``` +...and for Tcl +```tcl +package require Tk 8.6 + +# Import the tcl file +source "forest-dark.tcl" + +# Set theme using the theme use method +ttk::style theme use forest-dark + +# A themed (ttk) button +ttk::button .button -text "I'm a themed button" +pack .button -pady 20 +``` diff --git a/example.py b/example.py new file mode 100644 index 0000000..3fef15f --- /dev/null +++ b/example.py @@ -0,0 +1,260 @@ +""" +Example script for testing the Forest theme + +Author: rdbende +License: MIT license +Source: https://github.com/rdbende/ttk-widget-factory +""" + + +import tkinter as tk +from tkinter import ttk + +root = tk.Tk() +root.title("Forest") +root.option_add("*tearOff", False) # This is always a good idea + +# Make the app responsive +root.columnconfigure(index=0, weight=1) +root.columnconfigure(index=1, weight=1) +root.columnconfigure(index=2, weight=1) +root.rowconfigure(index=0, weight=1) +root.rowconfigure(index=1, weight=1) +root.rowconfigure(index=2, weight=1) + +# Create a style +style = ttk.Style(root) + +# Import the tcl file +root.tk.call("source", "forest-dark.tcl") + +# Set the theme with the theme_use method +style.theme_use("forest-dark") + +# Create lists for the Comboboxes +option_menu_list = ["", "OptionMenu", "Option 1", "Option 2"] +combo_list = ["Combobox", "Editable item 1", "Editable item 2"] +readonly_combo_list = ["Readonly combobox", "Item 1", "Item 2"] + +# Create control variables +a = tk.BooleanVar() +b = tk.BooleanVar(value=True) +c = tk.BooleanVar() +d = tk.IntVar(value=2) +e = tk.StringVar(value=option_menu_list[1]) +f = tk.BooleanVar() +g = tk.DoubleVar(value=75.0) +h = tk.BooleanVar() + +# Create a Frame for the Checkbuttons +check_frame = ttk.LabelFrame(root, text="Checkbuttons", padding=(20, 10)) +check_frame.grid(row=0, column=0, padx=(20, 10), pady=(20, 10), sticky="nsew") + +# Checkbuttons +check_1 = ttk.Checkbutton(check_frame, text="Unchecked", variable=a) +check_1.grid(row=0, column=0, padx=5, pady=10, sticky="nsew") +check_2 = ttk.Checkbutton(check_frame, text="Checked", variable=b) +check_2.grid(row=1, column=0, padx=5, pady=10, sticky="nsew") +check_3 = ttk.Checkbutton(check_frame, text="Third state", variable=c) +check_3.state(["alternate"]) +check_3.grid(row=2, column=0, padx=5, pady=10, sticky="nsew") +check_4 = ttk.Checkbutton(check_frame, text="Disabled", state="disabled") +check_4.state(["disabled !alternate"]) +check_4.grid(row=3, column=0, padx=5, pady=10, sticky="nsew") + +# Separator +separator = ttk.Separator(root) +separator.grid(row=1, column=0, padx=(20, 10), pady=10, sticky="ew") + +# Create a Frame for the Radiobuttons +radio_frame = ttk.LabelFrame(root, text="Radiobuttons", padding=(20, 10)) +radio_frame.grid(row=2, column=0, padx=(20, 10), pady=10, sticky="nsew") + +# Radiobuttons +radio_1 = ttk.Radiobutton(radio_frame, text="Deselected", variable=d, value=1) +radio_1.grid(row=0, column=0, padx=5, pady=10, sticky="nsew") +radio_2 = ttk.Radiobutton(radio_frame, text="Selected", variable=d, value=2) +radio_2.grid(row=1, column=0, padx=5, pady=10, sticky="nsew") +radio_3 = ttk.Radiobutton(radio_frame, text="Mixed") +radio_3.state(["alternate"]) +radio_3.grid(row=2, column=0, padx=5, pady=10, sticky="nsew") +radio_4 = ttk.Radiobutton(radio_frame, text="Disabled", state="disabled") +radio_4.grid(row=3, column=0, padx=5, pady=10, sticky="nsew") + +# Create a Frame for input widgets +widgets_frame = ttk.Frame(root, padding=(0, 0, 0, 10)) +widgets_frame.grid(row=0, column=1, padx=10, pady=(30, 10), sticky="nsew", rowspan=3) +widgets_frame.columnconfigure(index=0, weight=1) + +# Entry +entry = ttk.Entry(widgets_frame) +entry.insert(0, "Entry") +entry.grid(row=0, column=0, padx=5, pady=(0, 10), sticky="ew") + +# Spinbox +spinbox = ttk.Spinbox(widgets_frame, from_=0, to=100, increment=0.1) +spinbox.insert(0, "Spinbox") +spinbox.grid(row=1, column=0, padx=5, pady=10, sticky="ew") + +# Combobox +combobox = ttk.Combobox(widgets_frame, values=combo_list) +combobox.current(0) +combobox.grid(row=2, column=0, padx=5, pady=10, sticky="ew") + +# Read-only combobox +readonly_combo = ttk.Combobox(widgets_frame, state="readonly", values=readonly_combo_list) +readonly_combo.current(0) +readonly_combo.grid(row=3, column=0, padx=5, pady=10, sticky="ew") + +# Menu for the Menubutton +menu = tk.Menu(widgets_frame) +menu.add_command(label="Menu item 1") +menu.add_command(label="Menu item 2") +menu.add_separator() +menu.add_command(label="Menu item 3") +menu.add_command(label="Menu item 4") + +# Menubutton +menubutton = ttk.Menubutton(widgets_frame, text="Menubutton", menu=menu, direction="below") +menubutton.grid(row=4, column=0, padx=5, pady=10, sticky="nsew") + +# OptionMenu +optionmenu = ttk.OptionMenu(widgets_frame, e, *option_menu_list) +optionmenu.grid(row=5, column=0, padx=5, pady=10, sticky="nsew") + +# Button +button = ttk.Button(widgets_frame, text="Button") +button.grid(row=6, column=0, padx=5, pady=10, sticky="nsew") + +# Accentbutton +accentbutton = ttk.Button(widgets_frame, text="Accentbutton", style="Accent.TButton") +accentbutton.grid(row=7, column=0, padx=5, pady=10, sticky="nsew") + +# Togglebutton +button = ttk.Checkbutton(widgets_frame, text="Togglebutton", style="ToggleButton") +button.grid(row=8, column=0, padx=5, pady=10, sticky="nsew") + +# Switch +switch = ttk.Checkbutton(widgets_frame, text="Switch", style="Switch") +switch.grid(row=9, column=0, padx=5, pady=10, sticky="nsew") + +# Panedwindow +paned = ttk.PanedWindow(root) +paned.grid(row=0, column=2, pady=(25, 5), sticky="nsew", rowspan=3) + +# Pane #1 +pane_1 = ttk.Frame(paned) +paned.add(pane_1, weight=1) + +# Create a Frame for the Treeview +treeFrame = ttk.Frame(pane_1) +treeFrame.pack(expand=True, fill="both", padx=5, pady=5) + +# Scrollbar +treeScroll = ttk.Scrollbar(treeFrame) +treeScroll.pack(side="right", fill="y") + +# Treeview +treeview = ttk.Treeview(treeFrame, selectmode="extended", yscrollcommand=treeScroll.set, columns=(1, 2), height=12) +treeview.pack(expand=True, fill="both") +treeScroll.config(command=treeview.yview) + +# Treeview columns +treeview.column("#0", width=120) +treeview.column(1, anchor="w", width=120) +treeview.column(2, anchor="w", width=120) + +# Treeview headings +treeview.heading("#0", text="Column 1", anchor="center") +treeview.heading(1, text="Column 2", anchor="center") +treeview.heading(2, text="Column 3", anchor="center") + +# Define treeview data +treeview_data = [ + ("", "end", 1, "Parent", ("Item 1", "Value 1")), + (1, "end", 2, "Child", ("Subitem 1.1", "Value 1.1")), + (1, "end", 3, "Child", ("Subitem 1.2", "Value 1.2")), + (1, "end", 4, "Child", ("Subitem 1.3", "Value 1.3")), + (1, "end", 5, "Child", ("Subitem 1.4", "Value 1.4")), + ("", "end", 6, "Parent", ("Item 2", "Value 2")), + (6, "end", 7, "Child", ("Subitem 2.1", "Value 2.1")), + (6, "end", 8, "Sub-parent", ("Subitem 2.2", "Value 2.2")), + (8, "end", 9, "Child", ("Subitem 2.2.1", "Value 2.2.1")), + (8, "end", 10, "Child", ("Subitem 2.2.2", "Value 2.2.2")), + (8, "end", 11, "Child", ("Subitem 2.2.3", "Value 2.2.3")), + (6, "end", 12, "Child", ("Subitem 2.3", "Value 2.3")), + (6, "end", 13, "Child", ("Subitem 2.4", "Value 2.4")), + ("", "end", 14, "Parent", ("Item 3", "Value 3")), + (14, "end", 15, "Child", ("Subitem 3.1", "Value 3.1")), + (14, "end", 16, "Child", ("Subitem 3.2", "Value 3.2")), + (14, "end", 17, "Child", ("Subitem 3.3", "Value 3.3")), + (14, "end", 18, "Child", ("Subitem 3.4", "Value 3.4")), + ("", "end", 19, "Parent", ("Item 4", "Value 4")), + (19, "end", 20, "Child", ("Subitem 4.1", "Value 4.1")), + (19, "end", 21, "Sub-parent", ("Subitem 4.2", "Value 4.2")), + (21, "end", 22, "Child", ("Subitem 4.2.1", "Value 4.2.1")), + (21, "end", 23, "Child", ("Subitem 4.2.2", "Value 4.2.2")), + (21, "end", 24, "Child", ("Subitem 4.2.3", "Value 4.2.3")), + (19, "end", 25, "Child", ("Subitem 4.3", "Value 4.3")) + ] + +# Insert treeview data +for item in treeview_data: + treeview.insert(parent=item[0], index=item[1], iid=item[2], text=item[3], values=item[4]) + if item[0] == "" or item[2] == 8 or item[2] == 21: + treeview.item(item[2], open=True) # Open parents + +# Select and scroll +treeview.selection_set(9) +treeview.see(7) + +# Pane #2 +pane_2 = ttk.Frame(paned) +paned.add(pane_2, weight=3) + +# Notebook +notebook = ttk.Notebook(pane_2) + +# Tab #1 +tab_1 = ttk.Frame(notebook) +tab_1.columnconfigure(index=0, weight=1) +tab_1.columnconfigure(index=1, weight=1) +tab_1.rowconfigure(index=0, weight=1) +tab_1.rowconfigure(index=1, weight=1) +notebook.add(tab_1, text="Tab 1") + +# Scale +scale = ttk.Scale(tab_1, from_=100, to=0, variable=g, command=lambda event: g.set(scale.get())) +scale.grid(row=0, column=0, padx=(20, 10), pady=(20, 0), sticky="ew") + +# Progressbar +progress = ttk.Progressbar(tab_1, value=0, variable=g, mode="determinate") +progress.grid(row=0, column=1, padx=(10, 20), pady=(20, 0), sticky="ew") + +# Label +label = ttk.Label(tab_1, text="Forest ttk theme", justify="center") +label.grid(row=1, column=0, pady=10, columnspan=2) + +# Tab #2 +tab_2 = ttk.Frame(notebook) +notebook.add(tab_2, text="Tab 2") + +# Tab #3 +tab_3 = ttk.Frame(notebook) +notebook.add(tab_3, text="Tab 3") + +notebook.pack(expand=True, fill="both", padx=5, pady=5) + +# Sizegrip +sizegrip = ttk.Sizegrip(root) +sizegrip.grid(row=100, column=100, padx=(0, 5), pady=(0, 5)) + +# Center the window, and set minsize +root.update() +root.minsize(root.winfo_width(), root.winfo_height()) +x_cordinate = int((root.winfo_screenwidth()/2) - (root.winfo_width()/2)) +y_cordinate = int((root.winfo_screenheight()/2) - (root.winfo_height()/2)) +root.geometry("+{}+{}".format(x_cordinate, y_cordinate)) + +# Start the main loop +root.mainloop() diff --git a/forest-dark.tcl b/forest-dark.tcl new file mode 100644 index 0000000..06de07c --- /dev/null +++ b/forest-dark.tcl @@ -0,0 +1,548 @@ +# Copyright (c) 2021 rdbende + +# The Forest theme is a beautiful and modern ttk theme inspired by Excel. + +package require Tk 8.6 + +namespace eval ttk::theme::forest-dark { + + variable version 1.3 + package provide ttk::theme::forest-dark $version + variable colors + array set colors { + -fg "#eeeeee" + -bg "#313131" + -disabledfg "#595959" + -disabledbg "#ffffff" + -selectfg "#ffffff" + -selectbg "#217346" + } + + proc LoadImages {imgdir} { + variable I + foreach file [glob -directory $imgdir *.png] { + set img [file tail [file rootname $file]] + set I($img) [image create photo -file $file -format png] + } + } + + LoadImages [file join [file dirname [info script]] forest-dark] + + # Settings + ttk::style theme create forest-dark -parent default -settings { + ttk::style configure . \ + -background $colors(-bg) \ + -foreground $colors(-fg) \ + -troughcolor $colors(-bg) \ + -focuscolor $colors(-selectbg) \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -insertwidth 1 \ + -insertcolor $colors(-fg) \ + -fieldbackground $colors(-selectbg) \ + -font {TkDefaultFont 10} \ + -borderwidth 1 \ + -relief flat + + ttk::style map . -foreground [list disabled $colors(-disabledfg)] + + tk_setPalette background [ttk::style lookup . -background] \ + foreground [ttk::style lookup . -foreground] \ + highlightColor [ttk::style lookup . -focuscolor] \ + selectBackground [ttk::style lookup . -selectbackground] \ + selectForeground [ttk::style lookup . -selectforeground] \ + activeBackground [ttk::style lookup . -selectbackground] \ + activeForeground [ttk::style lookup . -selectforeground] + + option add *font [ttk::style lookup . -font] + + + # Layouts + ttk::style layout TButton { + Button.button -children { + Button.padding -children { + Button.label -side left -expand true + } + } + } + + ttk::style layout Toolbutton { + Toolbutton.button -children { + Toolbutton.padding -children { + Toolbutton.label -side left -expand true + } + } + } + + ttk::style layout TMenubutton { + Menubutton.button -children { + Menubutton.padding -children { + Menubutton.indicator -side right + Menubutton.label -side right -expand true + } + } + } + + ttk::style layout TOptionMenu { + OptionMenu.button -children { + OptionMenu.padding -children { + OptionMenu.indicator -side right + OptionMenu.label -side right -expand true + } + } + } + + ttk::style layout Accent.TButton { + AccentButton.button -children { + AccentButton.padding -children { + AccentButton.label -side left -expand true + } + } + } + + ttk::style layout TCheckbutton { + Checkbutton.button -children { + Checkbutton.padding -children { + Checkbutton.indicator -side left + Checkbutton.label -side right -expand true + } + } + } + + ttk::style layout Switch { + Switch.button -children { + Switch.padding -children { + Switch.indicator -side left + Switch.label -side right -expand true + } + } + } + + ttk::style layout ToggleButton { + ToggleButton.button -children { + ToggleButton.padding -children { + ToggleButton.label -side left -expand true + } + } + } + + ttk::style layout TRadiobutton { + Radiobutton.button -children { + Radiobutton.padding -children { + Radiobutton.indicator -side left + Radiobutton.label -side right -expand true + } + } + } + + ttk::style layout Vertical.TScrollbar { + Vertical.Scrollbar.trough -sticky ns -children { + Vertical.Scrollbar.thumb -expand true + } + } + + ttk::style layout Horizontal.TScrollbar { + Horizontal.Scrollbar.trough -sticky ew -children { + Horizontal.Scrollbar.thumb -expand true + } + } + + ttk::style layout TCombobox { + Combobox.field -sticky nswe -children { + Combobox.padding -expand true -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + Combobox.button -side right -sticky ns -children { + Combobox.arrow -sticky nsew + } + } + + ttk::style layout TSpinbox { + Spinbox.field -sticky nsew -children { + Spinbox.padding -expand true -sticky nswe -children { + Spinbox.textarea -sticky nsew + } + + } + null -side right -sticky nsew -children { + Spinbox.uparrow -side right -sticky nsew -children { + Spinbox.symuparrow + } + Spinbox.downarrow -side left -sticky nsew -children { + Spinbox.symdownarrow + } + } + } + + ttk::style layout Horizontal.TSeparator { + Horizontal.separator -sticky nswe + } + + ttk::style layout Vertical.TSeparator { + Vertical.separator -sticky nswe + } + + ttk::style layout Horizontal.TickScale { + Horizontal.TickScale.trough -sticky ew -children { + Horizontal.TickScale.slider -sticky w + } + } + + ttk::style layout Vertical.TickScale { + Vertical.TickScale.trough -sticky ns -children { + Vertical.TickScale.slider -sticky n + } + } + + ttk::style layout Card { + Card.field { + Card.padding -expand 1 + } + } + + ttk::style layout TLabelframe { + Labelframe.border { + Labelframe.padding -expand 1 -children { + Labelframe.label -side left + } + } + } + + ttk::style layout TNotebook { + Notebook.border -children { + TNotebook.Tab -expand 1 -side top + Notebook.client -sticky nsew + } + } + + ttk::style layout TNotebook.Tab { + Notebook.tab -children { + Notebook.padding -side top -children { + Notebook.label + } + } + } + + ttk::style layout Treeview.Item { + Treeitem.padding -sticky nswe -children { + Treeitem.indicator -side left -sticky {} + Treeitem.image -side left -sticky {} + Treeitem.text -side left -sticky {} + } + } + + + # Elements + + # Button + ttk::style configure TButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create Button.button image \ + [list $I(rect-basic) \ + {selected disabled} $I(rect-basic) \ + disabled $I(rect-basic) \ + selected $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-hover) \ + ] -border 4 -sticky ewns + + # Toolbutton + ttk::style configure Toolbutton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create Toolbutton.button image \ + [list $I(empty) \ + {selected disabled} $I(empty) \ + disabled $I(empty) \ + selected $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-basic) \ + ] -border 4 -sticky ewns + + # Menubutton + ttk::style configure TMenubutton -padding {8 4 4 4} + + ttk::style element create Menubutton.button \ + image [list $I(rect-basic) \ + disabled $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-hover) \ + ] -border 4 -sticky ewns + + ttk::style element create Menubutton.indicator \ + image [list $I(down) \ + active $I(down) \ + pressed $I(down) \ + disabled $I(down) \ + ] -width 15 -sticky e + + # OptionMenu + ttk::style configure TOptionMenu -padding {8 4 4 4} + + ttk::style element create OptionMenu.button \ + image [list $I(rect-basic) \ + disabled $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-hover) \ + ] -border 4 -sticky ewns + + ttk::style element create OptionMenu.indicator \ + image [list $I(down) \ + active $I(down) \ + pressed $I(down) \ + disabled $I(down) \ + ] -width 15 -sticky e + + # AccentButton + ttk::style configure Accent.TButton -padding {8 4 8 4} -width -10 -anchor center -foreground $colors(-fg) + + ttk::style element create AccentButton.button image \ + [list $I(rect-accent) \ + {selected disabled} $I(rect-accent-hover) \ + disabled $I(rect-accent-hover) \ + selected $I(rect-accent) \ + pressed $I(rect-accent) \ + active $I(rect-accent-hover) \ + ] -border 4 -sticky ewns + + # Checkbutton + ttk::style configure TCheckbutton -padding 4 + + ttk::style element create Checkbutton.indicator image \ + [list $I(check-unsel-accent) \ + {alternate disabled} $I(check-tri-basic) \ + {selected disabled} $I(check-basic) \ + disabled $I(check-unsel-basic) \ + {pressed alternate} $I(check-tri-hover) \ + {active alternate} $I(check-tri-hover) \ + alternate $I(check-tri-accent) \ + {pressed selected} $I(check-hover) \ + {active selected} $I(check-hover) \ + selected $I(check-accent) \ + {pressed !selected} $I(check-unsel-pressed) \ + active $I(check-unsel-hover) \ + ] -width 26 -sticky w + + # Switch + ttk::style element create Switch.indicator image \ + [list $I(off-accent) \ + {selected disabled} $I(on-basic) \ + disabled $I(off-basic) \ + {pressed selected} $I(on-accent) \ + {active selected} $I(on-hover) \ + selected $I(on-accent) \ + {pressed !selected} $I(off-accent) \ + active $I(off-hover) \ + ] -width 46 -sticky w + + # ToggleButton + ttk::style configure ToggleButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create ToggleButton.button image \ + [list $I(rect-basic) \ + {selected disabled} $I(rect-accent-hover) \ + disabled $I(rect-basic) \ + {pressed selected} $I(rect-basic) \ + {active selected} $I(rect-accent-hover) \ + selected $I(rect-accent) \ + {pressed !selected} $I(rect-accent) \ + active $I(rect-hover) \ + ] -border 4 -sticky ewns + + # Radiobutton + ttk::style configure TRadiobutton -padding 4 + + ttk::style element create Radiobutton.indicator image \ + [list $I(radio-unsel-accent) \ + {alternate disabled} $I(radio-tri-basic) \ + {selected disabled} $I(radio-basic) \ + disabled $I(radio-unsel-basic) \ + {pressed alternate} $I(radio-tri-hover) \ + {active alternate} $I(radio-tri-hover) \ + alternate $I(radio-tri-accent) \ + {pressed selected} $I(radio-hover) \ + {active selected} $I(radio-hover) \ + selected $I(radio-accent) \ + {pressed !selected} $I(circle-hover) \ + active $I(radio-unsel-hover) \ + ] -width 26 -sticky w + + # Scrollbar + ttk::style element create Horizontal.Scrollbar.trough image $I(hor-basic) \ + -sticky ew + + ttk::style element create Horizontal.Scrollbar.thumb \ + image [list $I(hor-accent) \ + disabled $I(hor-basic) \ + pressed $I(hor-hover) \ + active $I(hor-hover) \ + ] -sticky ew + + ttk::style element create Vertical.Scrollbar.trough image $I(vert-basic) \ + -sticky ns + + ttk::style element create Vertical.Scrollbar.thumb \ + image [list $I(vert-accent) \ + disabled $I(vert-basic) \ + pressed $I(vert-hover) \ + active $I(vert-hover) \ + ] -sticky ns + + # Scale + ttk::style element create Horizontal.Scale.trough image $I(scale-hor) \ + -border 5 -padding 0 + + ttk::style element create Horizontal.Scale.slider \ + image [list $I(thumb-hor-accent) \ + disabled $I(thumb-hor-basic) \ + pressed $I(thumb-hor-hover) \ + active $I(thumb-hor-hover) \ + ] -sticky {} + + ttk::style element create Vertical.Scale.trough image $I(scale-vert) \ + -border 5 -padding 0 + + ttk::style element create Vertical.Scale.slider \ + image [list $I(thumb-vert-accent) \ + disabled $I(thumb-vert-basic) \ + pressed $I(thumb-vert-hover) \ + active $I(thumb-vert-hover) \ + ] -sticky {} + + # Progressbar + ttk::style element create Horizontal.Progressbar.trough image $I(hor-basic) \ + -sticky ew + + ttk::style element create Horizontal.Progressbar.pbar image $I(hor-accent) \ + -sticky ew + + ttk::style element create Vertical.Progressbar.trough image $I(vert-basic) \ + -sticky ns + + ttk::style element create Vertical.Progressbar.pbar image $I(vert-accent) \ + -sticky ns + + # Entry + ttk::style element create Entry.field \ + image [list $I(border-basic) \ + {focus hover} $I(border-accent) \ + invalid $I(border-invalid) \ + disabled $I(border-basic) \ + focus $I(border-accent) \ + hover $I(border-hover) \ + ] -border 5 -padding {8} -sticky news + + # Combobox + ttk::style map TCombobox -selectbackground [list \ + {!focus} $colors(-selectbg) \ + {readonly hover} $colors(-selectbg) \ + {readonly focus} $colors(-selectbg) \ + ] + + ttk::style map TCombobox -selectforeground [list \ + {!focus} $colors(-selectfg) \ + {readonly hover} $colors(-selectfg) \ + {readonly focus} $colors(-selectfg) \ + ] + + ttk::style element create Combobox.field \ + image [list $I(border-basic) \ + {readonly disabled} $I(rect-basic) \ + {readonly pressed} $I(rect-basic) \ + {readonly focus hover} $I(rect-hover) \ + {readonly focus} $I(rect-hover) \ + {readonly hover} $I(rect-hover) \ + {focus hover} $I(border-accent) \ + readonly $I(rect-basic) \ + invalid $I(border-invalid) \ + disabled $I(border-basic) \ + focus $I(border-accent) \ + hover $I(border-hover) \ + ] -border 5 -padding {8 8 28 8} + + ttk::style element create Combobox.button \ + image [list $I(combo-button-basic) \ + {!readonly focus} $I(combo-button-focus) \ + {readonly focus} $I(combo-button-hover) \ + {readonly hover} $I(combo-button-hover) + ] -border 5 -padding {2 6 6 6} + + ttk::style element create Combobox.arrow image $I(down) -width 15 -sticky e + + # Spinbox + ttk::style element create Spinbox.field \ + image [list $I(border-basic) \ + invalid $I(border-invalid) \ + disabled $I(border-basic) \ + focus $I(border-accent) \ + hover $I(border-hover) \ + ] -border 5 -padding {8 8 54 8} -sticky news + + ttk::style element create Spinbox.uparrow image $I(spin-button-up) -border 4 -sticky nsew + + ttk::style element create Spinbox.downarrow \ + image [list $I(spin-button-down-basic) \ + focus $I(spin-button-down-focus) \ + ] -border 4 -sticky nsew + + ttk::style element create Spinbox.symuparrow image $I(up) -width 15 -sticky {} + ttk::style element create Spinbox.symdownarrow image $I(down) -width 17 -sticky {} + + # Sizegrip + ttk::style element create Sizegrip.sizegrip image $I(sizegrip) \ + -sticky ewns + + # Separator + ttk::style element create Horizontal.separator image $I(separator) + + ttk::style element create Vertical.separator image $I(separator) + + # Card + ttk::style element create Card.field image $I(card) \ + -border 10 -padding 4 -sticky news + + # Labelframe + ttk::style element create Labelframe.border image $I(card) \ + -border 5 -padding 4 -sticky news + + # Notebook + ttk::style configure TNotebook -padding 2 + + ttk::style element create Notebook.border \ + image $I(card) -border 5 + + ttk::style element create Notebook.client \ + image $I(notebook) -border 5 + + ttk::style element create Notebook.tab \ + image [list $I(tab-basic) \ + selected $I(tab-accent) \ + active $I(tab-hover) \ + ] -border 5 -padding {14 4} + + # Treeview + ttk::style element create Treeview.field image $I(card) \ + -border 5 + + ttk::style element create Treeheading.cell \ + image [list $I(tree-basic) \ + pressed $I(tree-pressed) + ] -border 5 -padding 6 -sticky ewns + + ttk::style element create Treeitem.indicator \ + image [list $I(right) \ + user2 $I(empty) \ + user1 $I(down) \ + ] -width 17 -sticky {} + + ttk::style configure Treeview -background $colors(-bg) + ttk::style configure Treeview.Item -padding {2 0 0 0} + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] + + # Sashes + #ttk::style map TPanedwindow \ + # -background [list hover $colors(-bg)] + } +} diff --git a/forest-dark/border-accent-hover.png b/forest-dark/border-accent-hover.png new file mode 100644 index 0000000..9e6cc8e Binary files /dev/null and b/forest-dark/border-accent-hover.png differ diff --git a/forest-dark/border-accent.png b/forest-dark/border-accent.png new file mode 100644 index 0000000..1f7fc27 Binary files /dev/null and b/forest-dark/border-accent.png differ diff --git a/forest-dark/border-basic.png b/forest-dark/border-basic.png new file mode 100644 index 0000000..a483271 Binary files /dev/null and b/forest-dark/border-basic.png differ diff --git a/forest-dark/border-hover.png b/forest-dark/border-hover.png new file mode 100644 index 0000000..dcd837a Binary files /dev/null and b/forest-dark/border-hover.png differ diff --git a/forest-dark/border-invalid.png b/forest-dark/border-invalid.png new file mode 100644 index 0000000..63cdd6e Binary files /dev/null and b/forest-dark/border-invalid.png differ diff --git a/forest-dark/card.png b/forest-dark/card.png new file mode 100644 index 0000000..3ac8413 Binary files /dev/null and b/forest-dark/card.png differ diff --git a/forest-dark/check-accent.png b/forest-dark/check-accent.png new file mode 100644 index 0000000..81f4a62 Binary files /dev/null and b/forest-dark/check-accent.png differ diff --git a/forest-dark/check-basic.png b/forest-dark/check-basic.png new file mode 100644 index 0000000..dd93bbc Binary files /dev/null and b/forest-dark/check-basic.png differ diff --git a/forest-dark/check-hover.png b/forest-dark/check-hover.png new file mode 100644 index 0000000..6a90056 Binary files /dev/null and b/forest-dark/check-hover.png differ diff --git a/forest-dark/check-tri-accent.png b/forest-dark/check-tri-accent.png new file mode 100644 index 0000000..4a49300 Binary files /dev/null and b/forest-dark/check-tri-accent.png differ diff --git a/forest-dark/check-tri-basic.png b/forest-dark/check-tri-basic.png new file mode 100644 index 0000000..219b92d Binary files /dev/null and b/forest-dark/check-tri-basic.png differ diff --git a/forest-dark/check-tri-hover.png b/forest-dark/check-tri-hover.png new file mode 100644 index 0000000..ee9d108 Binary files /dev/null and b/forest-dark/check-tri-hover.png differ diff --git a/forest-dark/check-unsel-accent.png b/forest-dark/check-unsel-accent.png new file mode 100644 index 0000000..abbdeb8 Binary files /dev/null and b/forest-dark/check-unsel-accent.png differ diff --git a/forest-dark/check-unsel-basic.png b/forest-dark/check-unsel-basic.png new file mode 100644 index 0000000..a483271 Binary files /dev/null and b/forest-dark/check-unsel-basic.png differ diff --git a/forest-dark/check-unsel-hover.png b/forest-dark/check-unsel-hover.png new file mode 100644 index 0000000..da35159 Binary files /dev/null and b/forest-dark/check-unsel-hover.png differ diff --git a/forest-dark/check-unsel-pressed.png b/forest-dark/check-unsel-pressed.png new file mode 100644 index 0000000..d7a8825 Binary files /dev/null and b/forest-dark/check-unsel-pressed.png differ diff --git a/forest-dark/circle-accent.png b/forest-dark/circle-accent.png new file mode 100644 index 0000000..0963d5e Binary files /dev/null and b/forest-dark/circle-accent.png differ diff --git a/forest-dark/circle-basic.png b/forest-dark/circle-basic.png new file mode 100644 index 0000000..8543b1b Binary files /dev/null and b/forest-dark/circle-basic.png differ diff --git a/forest-dark/circle-hover.png b/forest-dark/circle-hover.png new file mode 100644 index 0000000..493f02d Binary files /dev/null and b/forest-dark/circle-hover.png differ diff --git a/forest-dark/combo-button-basic.png b/forest-dark/combo-button-basic.png new file mode 100644 index 0000000..7582f0e Binary files /dev/null and b/forest-dark/combo-button-basic.png differ diff --git a/forest-dark/combo-button-focus.png b/forest-dark/combo-button-focus.png new file mode 100644 index 0000000..50dba42 Binary files /dev/null and b/forest-dark/combo-button-focus.png differ diff --git a/forest-dark/combo-button-hover.png b/forest-dark/combo-button-hover.png new file mode 100644 index 0000000..555d685 Binary files /dev/null and b/forest-dark/combo-button-hover.png differ diff --git a/forest-dark/down.png b/forest-dark/down.png new file mode 100644 index 0000000..8dbdd89 Binary files /dev/null and b/forest-dark/down.png differ diff --git a/forest-dark/empty.png b/forest-dark/empty.png new file mode 100644 index 0000000..202e3de Binary files /dev/null and b/forest-dark/empty.png differ diff --git a/forest-dark/hor-accent.png b/forest-dark/hor-accent.png new file mode 100644 index 0000000..b471f4b Binary files /dev/null and b/forest-dark/hor-accent.png differ diff --git a/forest-dark/hor-basic.png b/forest-dark/hor-basic.png new file mode 100644 index 0000000..9a73a59 Binary files /dev/null and b/forest-dark/hor-basic.png differ diff --git a/forest-dark/hor-hover.png b/forest-dark/hor-hover.png new file mode 100644 index 0000000..2f8b196 Binary files /dev/null and b/forest-dark/hor-hover.png differ diff --git a/forest-dark/notebook.png b/forest-dark/notebook.png new file mode 100644 index 0000000..edffcb5 Binary files /dev/null and b/forest-dark/notebook.png differ diff --git a/forest-dark/off-accent.png b/forest-dark/off-accent.png new file mode 100644 index 0000000..8940a8c Binary files /dev/null and b/forest-dark/off-accent.png differ diff --git a/forest-dark/off-basic.png b/forest-dark/off-basic.png new file mode 100644 index 0000000..43dd748 Binary files /dev/null and b/forest-dark/off-basic.png differ diff --git a/forest-dark/off-hover.png b/forest-dark/off-hover.png new file mode 100644 index 0000000..3d5f8a2 Binary files /dev/null and b/forest-dark/off-hover.png differ diff --git a/forest-dark/on-accent.png b/forest-dark/on-accent.png new file mode 100644 index 0000000..1405001 Binary files /dev/null and b/forest-dark/on-accent.png differ diff --git a/forest-dark/on-basic.png b/forest-dark/on-basic.png new file mode 100644 index 0000000..8db29a9 Binary files /dev/null and b/forest-dark/on-basic.png differ diff --git a/forest-dark/on-hover.png b/forest-dark/on-hover.png new file mode 100644 index 0000000..7ad670d Binary files /dev/null and b/forest-dark/on-hover.png differ diff --git a/forest-dark/radio-accent.png b/forest-dark/radio-accent.png new file mode 100644 index 0000000..099e148 Binary files /dev/null and b/forest-dark/radio-accent.png differ diff --git a/forest-dark/radio-basic.png b/forest-dark/radio-basic.png new file mode 100644 index 0000000..6b745d1 Binary files /dev/null and b/forest-dark/radio-basic.png differ diff --git a/forest-dark/radio-hover.png b/forest-dark/radio-hover.png new file mode 100644 index 0000000..e2fa366 Binary files /dev/null and b/forest-dark/radio-hover.png differ diff --git a/forest-dark/radio-tri-accent.png b/forest-dark/radio-tri-accent.png new file mode 100644 index 0000000..756ff13 Binary files /dev/null and b/forest-dark/radio-tri-accent.png differ diff --git a/forest-dark/radio-tri-basic.png b/forest-dark/radio-tri-basic.png new file mode 100644 index 0000000..0f20b21 Binary files /dev/null and b/forest-dark/radio-tri-basic.png differ diff --git a/forest-dark/radio-tri-hover.png b/forest-dark/radio-tri-hover.png new file mode 100644 index 0000000..2af0b72 Binary files /dev/null and b/forest-dark/radio-tri-hover.png differ diff --git a/forest-dark/radio-unsel-accent.png b/forest-dark/radio-unsel-accent.png new file mode 100644 index 0000000..b8a2f95 Binary files /dev/null and b/forest-dark/radio-unsel-accent.png differ diff --git a/forest-dark/radio-unsel-basic.png b/forest-dark/radio-unsel-basic.png new file mode 100644 index 0000000..bd8a723 Binary files /dev/null and b/forest-dark/radio-unsel-basic.png differ diff --git a/forest-dark/radio-unsel-hover b/forest-dark/radio-unsel-hover new file mode 100644 index 0000000..6512106 Binary files /dev/null and b/forest-dark/radio-unsel-hover differ diff --git a/forest-dark/radio-unsel-hover.png b/forest-dark/radio-unsel-hover.png new file mode 100644 index 0000000..6512106 Binary files /dev/null and b/forest-dark/radio-unsel-hover.png differ diff --git a/forest-dark/rect-accent-hover.png b/forest-dark/rect-accent-hover.png new file mode 100644 index 0000000..d7a8825 Binary files /dev/null and b/forest-dark/rect-accent-hover.png differ diff --git a/forest-dark/rect-accent.png b/forest-dark/rect-accent.png new file mode 100644 index 0000000..bebf948 Binary files /dev/null and b/forest-dark/rect-accent.png differ diff --git a/forest-dark/rect-basic.png b/forest-dark/rect-basic.png new file mode 100644 index 0000000..c6474d5 Binary files /dev/null and b/forest-dark/rect-basic.png differ diff --git a/forest-dark/rect-hover.png b/forest-dark/rect-hover.png new file mode 100644 index 0000000..b669407 Binary files /dev/null and b/forest-dark/rect-hover.png differ diff --git a/forest-dark/right.png b/forest-dark/right.png new file mode 100644 index 0000000..336945c Binary files /dev/null and b/forest-dark/right.png differ diff --git a/forest-dark/scale-hor.png b/forest-dark/scale-hor.png new file mode 100644 index 0000000..37172d0 Binary files /dev/null and b/forest-dark/scale-hor.png differ diff --git a/forest-dark/scale-vert.png b/forest-dark/scale-vert.png new file mode 100644 index 0000000..f268b60 Binary files /dev/null and b/forest-dark/scale-vert.png differ diff --git a/forest-dark/separator.png b/forest-dark/separator.png new file mode 100644 index 0000000..2b2a001 Binary files /dev/null and b/forest-dark/separator.png differ diff --git a/forest-dark/sizegrip.png b/forest-dark/sizegrip.png new file mode 100644 index 0000000..5bfc967 Binary files /dev/null and b/forest-dark/sizegrip.png differ diff --git a/forest-dark/spin-button-down-basic.png b/forest-dark/spin-button-down-basic.png new file mode 100644 index 0000000..f4e0890 Binary files /dev/null and b/forest-dark/spin-button-down-basic.png differ diff --git a/forest-dark/spin-button-down-focus.png b/forest-dark/spin-button-down-focus.png new file mode 100644 index 0000000..9421a2c Binary files /dev/null and b/forest-dark/spin-button-down-focus.png differ diff --git a/forest-dark/spin-button-up.png b/forest-dark/spin-button-up.png new file mode 100644 index 0000000..6e87841 Binary files /dev/null and b/forest-dark/spin-button-up.png differ diff --git a/forest-dark/tab-accent.png b/forest-dark/tab-accent.png new file mode 100644 index 0000000..ffdf1a0 Binary files /dev/null and b/forest-dark/tab-accent.png differ diff --git a/forest-dark/tab-basic.png b/forest-dark/tab-basic.png new file mode 100644 index 0000000..14d222c Binary files /dev/null and b/forest-dark/tab-basic.png differ diff --git a/forest-dark/tab-hover.png b/forest-dark/tab-hover.png new file mode 100644 index 0000000..31e74d2 Binary files /dev/null and b/forest-dark/tab-hover.png differ diff --git a/forest-dark/thumb-hor-accent.png b/forest-dark/thumb-hor-accent.png new file mode 100644 index 0000000..477a11f Binary files /dev/null and b/forest-dark/thumb-hor-accent.png differ diff --git a/forest-dark/thumb-hor-basic.png b/forest-dark/thumb-hor-basic.png new file mode 100644 index 0000000..1426d8d Binary files /dev/null and b/forest-dark/thumb-hor-basic.png differ diff --git a/forest-dark/thumb-hor-hover.png b/forest-dark/thumb-hor-hover.png new file mode 100644 index 0000000..18db753 Binary files /dev/null and b/forest-dark/thumb-hor-hover.png differ diff --git a/forest-dark/thumb-vert-accent.png b/forest-dark/thumb-vert-accent.png new file mode 100644 index 0000000..3db6b23 Binary files /dev/null and b/forest-dark/thumb-vert-accent.png differ diff --git a/forest-dark/thumb-vert-basic.png b/forest-dark/thumb-vert-basic.png new file mode 100644 index 0000000..b1a5587 Binary files /dev/null and b/forest-dark/thumb-vert-basic.png differ diff --git a/forest-dark/thumb-vert-hover.png b/forest-dark/thumb-vert-hover.png new file mode 100644 index 0000000..6137ff1 Binary files /dev/null and b/forest-dark/thumb-vert-hover.png differ diff --git a/forest-dark/tree-basic.png b/forest-dark/tree-basic.png new file mode 100644 index 0000000..06e9b18 Binary files /dev/null and b/forest-dark/tree-basic.png differ diff --git a/forest-dark/tree-pressed.png b/forest-dark/tree-pressed.png new file mode 100644 index 0000000..728c69a Binary files /dev/null and b/forest-dark/tree-pressed.png differ diff --git a/forest-dark/up.png b/forest-dark/up.png new file mode 100644 index 0000000..b02eda4 Binary files /dev/null and b/forest-dark/up.png differ diff --git a/forest-dark/vert-accent.png b/forest-dark/vert-accent.png new file mode 100644 index 0000000..305ee72 Binary files /dev/null and b/forest-dark/vert-accent.png differ diff --git a/forest-dark/vert-basic.png b/forest-dark/vert-basic.png new file mode 100644 index 0000000..36988fd Binary files /dev/null and b/forest-dark/vert-basic.png differ diff --git a/forest-dark/vert-hover.png b/forest-dark/vert-hover.png new file mode 100644 index 0000000..c2259c7 Binary files /dev/null and b/forest-dark/vert-hover.png differ diff --git a/forest-light.tcl b/forest-light.tcl new file mode 100644 index 0000000..3f96274 --- /dev/null +++ b/forest-light.tcl @@ -0,0 +1,553 @@ +# Copyright (c) 2021 rdbende + +# The Forest theme is a beautiful and modern ttk theme inspired by Excel. + +package require Tk 8.6 + +namespace eval ttk::theme::forest-light { + + variable version 1.3 + package provide ttk::theme::forest-light $version + variable colors + array set colors { + -fg "#313131" + -bg "#ffffff" + -disabledfg "#595959" + -disabledbg "#ffffff" + -selectfg "#ffffff" + -selectbg "#217346" + } + + proc LoadImages {imgdir} { + variable I + foreach file [glob -directory $imgdir *.png] { + set img [file tail [file rootname $file]] + set I($img) [image create photo -file $file -format png] + } + } + + LoadImages [file join [file dirname [info script]] forest-light] + + # Settings + ttk::style theme create forest-light -parent default -settings { + ttk::style configure . \ + -background $colors(-bg) \ + -foreground $colors(-fg) \ + -troughcolor $colors(-bg) \ + -focuscolor $colors(-selectbg) \ + -selectbackground $colors(-selectbg) \ + -selectforeground $colors(-selectfg) \ + -insertwidth 1 \ + -insertcolor $colors(-fg) \ + -fieldbackground $colors(-selectbg) \ + -font {TkDefaultFont 10} \ + -borderwidth 1 \ + -relief flat + + ttk::style map . -foreground [list disabled $colors(-disabledfg)] + + tk_setPalette background [ttk::style lookup . -background] \ + foreground [ttk::style lookup . -foreground] \ + highlightColor [ttk::style lookup . -focuscolor] \ + selectBackground [ttk::style lookup . -selectbackground] \ + selectForeground [ttk::style lookup . -selectforeground] \ + activeBackground [ttk::style lookup . -selectbackground] \ + activeForeground [ttk::style lookup . -selectforeground] + + option add *font [ttk::style lookup . -font] + + + # Layouts + ttk::style layout TButton { + Button.button -children { + Button.padding -children { + Button.label -side left -expand true + } + } + } + + ttk::style layout Toolbutton { + Toolbutton.button -children { + Toolbutton.padding -children { + Toolbutton.label -side left -expand true + } + } + } + + ttk::style layout TMenubutton { + Menubutton.button -children { + Menubutton.padding -children { + Menubutton.indicator -side right + Menubutton.label -side right -expand true + } + } + } + + ttk::style layout TOptionMenu { + OptionMenu.button -children { + OptionMenu.padding -children { + OptionMenu.indicator -side right + OptionMenu.label -side right -expand true + } + } + } + + ttk::style layout Accent.TButton { + AccentButton.button -children { + AccentButton.padding -children { + AccentButton.label -side left -expand true + } + } + } + + ttk::style layout TCheckbutton { + Checkbutton.button -children { + Checkbutton.padding -children { + Checkbutton.indicator -side left + Checkbutton.label -side right -expand true + } + } + } + + ttk::style layout Switch { + Switch.button -children { + Switch.padding -children { + Switch.indicator -side left + Switch.label -side right -expand true + } + } + } + + ttk::style layout ToggleButton { + ToggleButton.button -children { + ToggleButton.padding -children { + ToggleButton.label -side left -expand true + } + } + } + + ttk::style layout TRadiobutton { + Radiobutton.button -children { + Radiobutton.padding -children { + Radiobutton.indicator -side left + Radiobutton.label -side right -expand true + } + } + } + + ttk::style layout Vertical.TScrollbar { + Vertical.Scrollbar.trough -sticky ns -children { + Vertical.Scrollbar.thumb -expand true + } + } + + ttk::style layout Horizontal.TScrollbar { + Horizontal.Scrollbar.trough -sticky ew -children { + Horizontal.Scrollbar.thumb -expand true + } + } + + ttk::style layout TCombobox { + Combobox.field -sticky nswe -children { + Combobox.padding -expand true -sticky nswe -children { + Combobox.textarea -sticky nswe + } + } + Combobox.button -side right -sticky ns -children { + Combobox.arrow -sticky nsew + } + } + + ttk::style layout TSpinbox { + Spinbox.field -sticky nsew -children { + Spinbox.padding -expand true -sticky nswe -children { + Spinbox.textarea -sticky nsew + } + + } + null -side right -sticky nsew -children { + Spinbox.uparrow -side right -sticky nsew -children { + Spinbox.symuparrow + } + Spinbox.downarrow -side left -sticky nsew -children { + Spinbox.symdownarrow + } + } + } + + ttk::style layout Horizontal.TSeparator { + Horizontal.separator -sticky nswe + } + + ttk::style layout Vertical.TSeparator { + Vertical.separator -sticky nswe + } + + ttk::style layout Horizontal.TickScale { + Horizontal.TickScale.trough -sticky ew -children { + Horizontal.TickScale.slider -sticky w + } + } + + ttk::style layout Vertical.TickScale { + Vertical.TickScale.trough -sticky ns -children { + Vertical.TickScale.slider -sticky n + } + } + + ttk::style layout Card { + Card.field { + Card.padding -expand 1 + } + } + + ttk::style layout TLabelframe { + Labelframe.border { + Labelframe.padding -expand 1 -children { + Labelframe.label -side left + } + } + } + + ttk::style layout TNotebook { + Notebook.border -children { + TNotebook.Tab -expand 1 -side top + Notebook.client -sticky nsew + } + } + + ttk::style layout TNotebook.Tab { + Notebook.tab -children { + Notebook.padding -side top -children { + Notebook.label + } + } + } + + ttk::style layout Treeview.Item { + Treeitem.padding -sticky nswe -children { + Treeitem.indicator -side left -sticky {} + Treeitem.image -side left -sticky {} + Treeitem.text -side left -sticky {} + } + } + + + # Elements + + # Button + ttk::style configure TButton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create Button.button image \ + [list $I(rect-basic) \ + {selected disabled} $I(rect-basic) \ + disabled $I(rect-basic) \ + selected $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-hover) \ + ] -border 4 -sticky nsew + + # Toolbutton + ttk::style configure Toolbutton -padding {8 4 8 4} -width -10 -anchor center + + ttk::style element create Toolbutton.button image \ + [list $I(empty) \ + {selected disabled} $I(empty) \ + disabled $I(empty) \ + selected $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-basic) \ + ] -border 4 -sticky nsew + + # Menubutton + ttk::style configure TMenubutton -padding {8 4 4 4} + + ttk::style element create Menubutton.button image \ + [list $I(rect-basic) \ + disabled $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-hover) \ + ] -border 4 -sticky nsew + + ttk::style element create Menubutton.indicator image \ + [list $I(down) \ + active $I(down) \ + pressed $I(down) \ + disabled $I(down) \ + ] -width 15 -sticky e + + # OptionMenu + ttk::style configure TOptionMenu -padding {8 4 4 4} + + ttk::style element create OptionMenu.button image \ + [list $I(rect-basic) \ + disabled $I(rect-basic) \ + pressed $I(rect-basic) \ + active $I(rect-hover) \ + ] -border 4 -sticky nsew + + ttk::style element create OptionMenu.indicator image \ + [list $I(down) \ + active $I(down) \ + pressed $I(down) \ + disabled $I(down) \ + ] -width 15 -sticky e + + # AccentButton + ttk::style configure Accent.TButton -padding {8 4 8 4} -width -10 -anchor center -foreground #eeeeee + + ttk::style element create AccentButton.button image \ + [list $I(rect-accent) \ + {selected disabled} $I(rect-accent-hover) \ + disabled $I(rect-accent-hover) \ + selected $I(rect-accent) \ + pressed $I(rect-accent) \ + active $I(rect-accent-hover) \ + ] -border 4 -sticky nsew + + # Checkbutton + ttk::style configure TCheckbutton -padding 4 + + ttk::style element create Checkbutton.indicator image \ + [list $I(check-unsel-accent) \ + {alternate disabled} $I(check-tri-basic) \ + {selected disabled} $I(check-basic) \ + disabled $I(check-unsel-basic) \ + {pressed alternate} $I(check-tri-hover) \ + {active alternate} $I(check-tri-hover) \ + alternate $I(check-tri-accent) \ + {pressed selected} $I(check-hover) \ + {active selected} $I(check-hover) \ + selected $I(check-accent) \ + {pressed !selected} $I(check-unsel-pressed) \ + active $I(check-unsel-hover) \ + ] -width 26 -sticky w + + # Switch + ttk::style element create Switch.indicator image \ + [list $I(off-accent) \ + {selected disabled} $I(on-basic) \ + disabled $I(off-basic) \ + {pressed selected} $I(on-accent) \ + {active selected} $I(on-hover) \ + selected $I(on-accent) \ + {pressed !selected} $I(off-accent) \ + active $I(off-hover) \ + ] -width 46 -sticky w + + # ToggleButton + ttk::style configure ToggleButton -padding {8 4 8 4} -width -10 -anchor center -foregound $colors(-fg) + + ttk::style map ToggleButton -foreground \ + [list {pressed selected} $colors(-fg) \ + {pressed !selected} #ffffff \ + selected #ffffff] + + ttk::style element create ToggleButton.button image \ + [list $I(rect-basic) \ + {selected disabled} $I(rect-accent-hover) \ + disabled $I(rect-basic) \ + {pressed selected} $I(rect-basic) \ + {active selected} $I(rect-accent-hover) \ + selected $I(rect-accent) \ + {pressed !selected} $I(rect-accent) \ + active $I(rect-hover) \ + ] -border 4 -sticky nsew + + # Radiobutton + ttk::style configure TRadiobutton -padding 4 + + ttk::style element create Radiobutton.indicator image \ + [list $I(radio-unsel-accent) \ + {alternate disabled} $I(radio-tri-basic) \ + {selected disabled} $I(radio-basic) \ + disabled $I(radio-unsel-basic) \ + {pressed alternate} $I(radio-tri-hover) \ + {active alternate} $I(radio-tri-hover) \ + alternate $I(radio-tri-accent) \ + {pressed selected} $I(radio-hover) \ + {active selected} $I(radio-hover) \ + selected $I(radio-accent) \ + {pressed !selected} $I(radio-unsel-pressed) \ + active $I(radio-unsel-hover) \ + ] -width 26 -sticky w + + # Scrollbar + ttk::style element create Horizontal.Scrollbar.trough image $I(hor-basic) \ + -sticky ew + + ttk::style element create Horizontal.Scrollbar.thumb image \ + [list $I(hor-accent) \ + disabled $I(hor-basic) \ + pressed $I(hor-hover) \ + active $I(hor-hover) \ + ] -sticky ew + + ttk::style element create Vertical.Scrollbar.trough image $I(vert-basic) \ + -sticky ns + + ttk::style element create Vertical.Scrollbar.thumb image \ + [list $I(vert-accent) \ + disabled $I(vert-basic) \ + pressed $I(vert-hover) \ + active $I(vert-hover) \ + ] -sticky ns + + # Scale + ttk::style element create Horizontal.Scale.trough image $I(scale-hor) \ + -border 5 -padding 0 + + ttk::style element create Horizontal.Scale.slider image \ + [list $I(thumb-hor-accent) \ + disabled $I(thumb-hor-basic) \ + pressed $I(thumb-hor-hover) \ + active $I(thumb-hor-hover) \ + ] -sticky {} + + ttk::style element create Vertical.Scale.trough image $I(scale-vert) \ + -border 5 -padding 0 + + ttk::style element create Vertical.Scale.slider image \ + [list $I(thumb-vert-accent) \ + disabled $I(thumb-vert-basic) \ + pressed $I(thumb-vert-hover) \ + active $I(thumb-vert-hover) \ + ] -sticky {} + + # Progressbar + ttk::style element create Horizontal.Progressbar.trough image $I(hor-basic) \ + -sticky ew + + ttk::style element create Horizontal.Progressbar.pbar image $I(hor-accent) \ + -sticky ew + + ttk::style element create Vertical.Progressbar.trough image $I(vert-basic) \ + -sticky ns + + ttk::style element create Vertical.Progressbar.pbar image $I(vert-accent) \ + -sticky ns + + # Entry + ttk::style element create Entry.field image \ + [list $I(border-basic) \ + {focus hover} $I(border-accent) \ + invalid $I(border-invalid) \ + disabled $I(border-basic) \ + focus $I(border-accent) \ + hover $I(border-hover) \ + ] -border 5 -padding {8} -sticky nsew + + # Combobox + ttk::style map TCombobox -selectbackground [list \ + {!focus} $colors(-selectbg) \ + {readonly hover} $colors(-selectbg) \ + {readonly focus} $colors(-selectbg) \ + ] + + ttk::style map TCombobox -selectforeground [list \ + {!focus} $colors(-selectfg) \ + {readonly hover} $colors(-selectfg) \ + {readonly focus} $colors(-selectfg) \ + ] + + ttk::style element create Combobox.field image \ + [list $I(border-basic) \ + {readonly disabled} $I(rect-basic) \ + {readonly pressed} $I(rect-basic) \ + {readonly focus hover} $I(rect-hover) \ + {readonly focus} $I(rect-hover) \ + {readonly hover} $I(rect-hover) \ + {focus hover} $I(border-accent) \ + readonly $I(rect-basic) \ + invalid $I(border-invalid) \ + disabled $I(border-basic) \ + focus $I(border-accent) \ + hover $I(border-hover) \ + ] -border 5 -padding {8 8 28 8} + + ttk::style element create Combobox.button image \ + [list $I(combo-button-basic) \ + {!readonly focus} $I(combo-button-focus) \ + {readonly focus} $I(combo-button-hover) \ + {readonly hover} $I(combo-button-hover) + ] -border 5 -padding {2 6 6 6} + + ttk::style element create Combobox.arrow image $I(down) -width 15 -sticky e + + # Spinbox + ttk::style element create Spinbox.field image \ + [list $I(border-basic) \ + invalid $I(border-invalid) \ + disabled $I(border-basic) \ + focus $I(border-accent) \ + hover $I(border-hover) \ + ] -border 5 -padding {8 8 54 8} -sticky nsew + + ttk::style element create Spinbox.uparrow image $I(spin-button-up) -border 4 -sticky nsew + + ttk::style element create Spinbox.downarrow image \ + [list $I(spin-button-down-basic) \ + focus $I(spin-button-down-focus) \ + ] -border 4 -sticky nsew + + ttk::style element create Spinbox.symuparrow image $I(up) -width 15 -sticky {} + ttk::style element create Spinbox.symdownarrow image $I(down) -width 17 -sticky {} + + # Sizegrip + ttk::style element create Sizegrip.sizegrip image $I(sizegrip) \ + -sticky nsew + + # Separator + ttk::style element create Horizontal.separator image $I(separator) + + ttk::style element create Vertical.separator image $I(separator) + + # Card + ttk::style element create Card.field image $I(card) \ + -border 10 -padding 4 -sticky nsew + + # Labelframe + ttk::style element create Labelframe.border image $I(card) \ + -border 5 -padding 4 -sticky nsew + + # Notebook + ttk::style configure TNotebook -padding 2 + + ttk::style element create Notebook.border image $I(card) -border 5 + + ttk::style element create Notebook.client image $I(notebook) -border 5 + + ttk::style element create Notebook.tab image \ + [list $I(tab-basic) \ + selected $I(tab-accent) \ + active $I(tab-hover) \ + ] -border 5 -padding {14 4} + + # Treeview + ttk::style element create Treeview.field image $I(card) \ + -border 5 + + ttk::style element create Treeheading.cell image \ + [list $I(tree-basic) \ + pressed $I(tree-pressed) + ] -border 5 -padding 6 -sticky nsew + + ttk::style element create Treeitem.indicator image \ + [list $I(right) \ + user2 $I(empty) \ + {user1 focus} $I(down-focus) \ + focus $I(right-focus) \ + user1 $I(down) \ + ] -width 17 -sticky {} + + ttk::style configure Treeview -background $colors(-bg) + ttk::style configure Treeview.Item -padding {2 0 0 0} + + ttk::style map Treeview \ + -background [list selected $colors(-selectbg)] \ + -foreground [list selected $colors(-selectfg)] + + # Sashes + #ttk::style map TPanedwindow -background [list hover $colors(-bg)] + } +} diff --git a/forest-light/border-accent-hover.png b/forest-light/border-accent-hover.png new file mode 100644 index 0000000..72c3e60 Binary files /dev/null and b/forest-light/border-accent-hover.png differ diff --git a/forest-light/border-accent.png b/forest-light/border-accent.png new file mode 100644 index 0000000..24ea0b6 Binary files /dev/null and b/forest-light/border-accent.png differ diff --git a/forest-light/border-basic.png b/forest-light/border-basic.png new file mode 100644 index 0000000..1094b6d Binary files /dev/null and b/forest-light/border-basic.png differ diff --git a/forest-light/border-hover.png b/forest-light/border-hover.png new file mode 100644 index 0000000..a09fb3b Binary files /dev/null and b/forest-light/border-hover.png differ diff --git a/forest-light/border-invalid.png b/forest-light/border-invalid.png new file mode 100644 index 0000000..2d01fa5 Binary files /dev/null and b/forest-light/border-invalid.png differ diff --git a/forest-light/card.png b/forest-light/card.png new file mode 100644 index 0000000..fc62212 Binary files /dev/null and b/forest-light/card.png differ diff --git a/forest-light/check-accent.png b/forest-light/check-accent.png new file mode 100644 index 0000000..a789b5d Binary files /dev/null and b/forest-light/check-accent.png differ diff --git a/forest-light/check-basic.png b/forest-light/check-basic.png new file mode 100644 index 0000000..198019e Binary files /dev/null and b/forest-light/check-basic.png differ diff --git a/forest-light/check-hover.png b/forest-light/check-hover.png new file mode 100644 index 0000000..0284dba Binary files /dev/null and b/forest-light/check-hover.png differ diff --git a/forest-light/check-tri-accent.png b/forest-light/check-tri-accent.png new file mode 100644 index 0000000..27bcb36 Binary files /dev/null and b/forest-light/check-tri-accent.png differ diff --git a/forest-light/check-tri-basic.png b/forest-light/check-tri-basic.png new file mode 100644 index 0000000..a897099 Binary files /dev/null and b/forest-light/check-tri-basic.png differ diff --git a/forest-light/check-tri-hover.png b/forest-light/check-tri-hover.png new file mode 100644 index 0000000..f38f8b9 Binary files /dev/null and b/forest-light/check-tri-hover.png differ diff --git a/forest-light/check-unsel-accent.png b/forest-light/check-unsel-accent.png new file mode 100644 index 0000000..2dd9e0f Binary files /dev/null and b/forest-light/check-unsel-accent.png differ diff --git a/forest-light/check-unsel-basic.png b/forest-light/check-unsel-basic.png new file mode 100644 index 0000000..1094b6d Binary files /dev/null and b/forest-light/check-unsel-basic.png differ diff --git a/forest-light/check-unsel-hover.png b/forest-light/check-unsel-hover.png new file mode 100644 index 0000000..1690b97 Binary files /dev/null and b/forest-light/check-unsel-hover.png differ diff --git a/forest-light/check-unsel-pressed.png b/forest-light/check-unsel-pressed.png new file mode 100644 index 0000000..2f4a5a8 Binary files /dev/null and b/forest-light/check-unsel-pressed.png differ diff --git a/forest-light/circle-accent.png b/forest-light/circle-accent.png new file mode 100644 index 0000000..0963d5e Binary files /dev/null and b/forest-light/circle-accent.png differ diff --git a/forest-light/circle-basic.png b/forest-light/circle-basic.png new file mode 100644 index 0000000..8543b1b Binary files /dev/null and b/forest-light/circle-basic.png differ diff --git a/forest-light/circle-hover.png b/forest-light/circle-hover.png new file mode 100644 index 0000000..493f02d Binary files /dev/null and b/forest-light/circle-hover.png differ diff --git a/forest-light/combo-button-basic.png b/forest-light/combo-button-basic.png new file mode 100644 index 0000000..b7daa04 Binary files /dev/null and b/forest-light/combo-button-basic.png differ diff --git a/forest-light/combo-button-focus.png b/forest-light/combo-button-focus.png new file mode 100644 index 0000000..179c742 Binary files /dev/null and b/forest-light/combo-button-focus.png differ diff --git a/forest-light/combo-button-hover.png b/forest-light/combo-button-hover.png new file mode 100644 index 0000000..297c88b Binary files /dev/null and b/forest-light/combo-button-hover.png differ diff --git a/forest-light/down-focus.png b/forest-light/down-focus.png new file mode 100644 index 0000000..70921a3 Binary files /dev/null and b/forest-light/down-focus.png differ diff --git a/forest-light/down.png b/forest-light/down.png new file mode 100644 index 0000000..28e9d24 Binary files /dev/null and b/forest-light/down.png differ diff --git a/forest-light/empty.png b/forest-light/empty.png new file mode 100644 index 0000000..202e3de Binary files /dev/null and b/forest-light/empty.png differ diff --git a/forest-light/hor-accent.png b/forest-light/hor-accent.png new file mode 100644 index 0000000..e92bc7d Binary files /dev/null and b/forest-light/hor-accent.png differ diff --git a/forest-light/hor-basic.png b/forest-light/hor-basic.png new file mode 100644 index 0000000..eb18d1e Binary files /dev/null and b/forest-light/hor-basic.png differ diff --git a/forest-light/hor-hover.png b/forest-light/hor-hover.png new file mode 100644 index 0000000..92bc070 Binary files /dev/null and b/forest-light/hor-hover.png differ diff --git a/forest-light/notebook.png b/forest-light/notebook.png new file mode 100644 index 0000000..5be4294 Binary files /dev/null and b/forest-light/notebook.png differ diff --git a/forest-light/off-accent.png b/forest-light/off-accent.png new file mode 100644 index 0000000..6263d96 Binary files /dev/null and b/forest-light/off-accent.png differ diff --git a/forest-light/off-basic.png b/forest-light/off-basic.png new file mode 100644 index 0000000..9e60b33 Binary files /dev/null and b/forest-light/off-basic.png differ diff --git a/forest-light/off-hover.png b/forest-light/off-hover.png new file mode 100644 index 0000000..5c92e93 Binary files /dev/null and b/forest-light/off-hover.png differ diff --git a/forest-light/on-accent.png b/forest-light/on-accent.png new file mode 100644 index 0000000..c191ac5 Binary files /dev/null and b/forest-light/on-accent.png differ diff --git a/forest-light/on-basic.png b/forest-light/on-basic.png new file mode 100644 index 0000000..fd0f6c0 Binary files /dev/null and b/forest-light/on-basic.png differ diff --git a/forest-light/on-hover.png b/forest-light/on-hover.png new file mode 100644 index 0000000..df18787 Binary files /dev/null and b/forest-light/on-hover.png differ diff --git a/forest-light/radio-accent.png b/forest-light/radio-accent.png new file mode 100644 index 0000000..944ed85 Binary files /dev/null and b/forest-light/radio-accent.png differ diff --git a/forest-light/radio-basic.png b/forest-light/radio-basic.png new file mode 100644 index 0000000..8f93029 Binary files /dev/null and b/forest-light/radio-basic.png differ diff --git a/forest-light/radio-hover.png b/forest-light/radio-hover.png new file mode 100644 index 0000000..0e9f2bd Binary files /dev/null and b/forest-light/radio-hover.png differ diff --git a/forest-light/radio-tri-accent.png b/forest-light/radio-tri-accent.png new file mode 100644 index 0000000..5a5b54c Binary files /dev/null and b/forest-light/radio-tri-accent.png differ diff --git a/forest-light/radio-tri-basic.png b/forest-light/radio-tri-basic.png new file mode 100644 index 0000000..654f7e9 Binary files /dev/null and b/forest-light/radio-tri-basic.png differ diff --git a/forest-light/radio-tri-hover.png b/forest-light/radio-tri-hover.png new file mode 100644 index 0000000..12d2a9a Binary files /dev/null and b/forest-light/radio-tri-hover.png differ diff --git a/forest-light/radio-unsel-accent.png b/forest-light/radio-unsel-accent.png new file mode 100644 index 0000000..fdfe1f0 Binary files /dev/null and b/forest-light/radio-unsel-accent.png differ diff --git a/forest-light/radio-unsel-basic.png b/forest-light/radio-unsel-basic.png new file mode 100644 index 0000000..6c88725 Binary files /dev/null and b/forest-light/radio-unsel-basic.png differ diff --git a/forest-light/radio-unsel-hover b/forest-light/radio-unsel-hover new file mode 100644 index 0000000..6512106 Binary files /dev/null and b/forest-light/radio-unsel-hover differ diff --git a/forest-light/radio-unsel-hover.png b/forest-light/radio-unsel-hover.png new file mode 100644 index 0000000..de5afe9 Binary files /dev/null and b/forest-light/radio-unsel-hover.png differ diff --git a/forest-light/radio-unsel-pressed.png b/forest-light/radio-unsel-pressed.png new file mode 100644 index 0000000..7428dc9 Binary files /dev/null and b/forest-light/radio-unsel-pressed.png differ diff --git a/forest-light/rect-accent-hover.png b/forest-light/rect-accent-hover.png new file mode 100644 index 0000000..2f4a5a8 Binary files /dev/null and b/forest-light/rect-accent-hover.png differ diff --git a/forest-light/rect-accent.png b/forest-light/rect-accent.png new file mode 100644 index 0000000..6f5b8f4 Binary files /dev/null and b/forest-light/rect-accent.png differ diff --git a/forest-light/rect-basic.png b/forest-light/rect-basic.png new file mode 100644 index 0000000..4fbd3c5 Binary files /dev/null and b/forest-light/rect-basic.png differ diff --git a/forest-light/rect-hover.png b/forest-light/rect-hover.png new file mode 100644 index 0000000..2fc43f6 Binary files /dev/null and b/forest-light/rect-hover.png differ diff --git a/forest-light/right-focus.png b/forest-light/right-focus.png new file mode 100644 index 0000000..4ca8ed7 Binary files /dev/null and b/forest-light/right-focus.png differ diff --git a/forest-light/right.png b/forest-light/right.png new file mode 100644 index 0000000..cba4328 Binary files /dev/null and b/forest-light/right.png differ diff --git a/forest-light/scale-hor.png b/forest-light/scale-hor.png new file mode 100644 index 0000000..86e2fcb Binary files /dev/null and b/forest-light/scale-hor.png differ diff --git a/forest-light/scale-vert.png b/forest-light/scale-vert.png new file mode 100644 index 0000000..0531242 Binary files /dev/null and b/forest-light/scale-vert.png differ diff --git a/forest-light/separator.png b/forest-light/separator.png new file mode 100644 index 0000000..fe323b8 Binary files /dev/null and b/forest-light/separator.png differ diff --git a/forest-light/sizegrip.png b/forest-light/sizegrip.png new file mode 100644 index 0000000..8f0bddf Binary files /dev/null and b/forest-light/sizegrip.png differ diff --git a/forest-light/spin-button-down-basic.png b/forest-light/spin-button-down-basic.png new file mode 100644 index 0000000..8153581 Binary files /dev/null and b/forest-light/spin-button-down-basic.png differ diff --git a/forest-light/spin-button-down-focus.png b/forest-light/spin-button-down-focus.png new file mode 100644 index 0000000..544545c Binary files /dev/null and b/forest-light/spin-button-down-focus.png differ diff --git a/forest-light/spin-button-up.png b/forest-light/spin-button-up.png new file mode 100644 index 0000000..e04e757 Binary files /dev/null and b/forest-light/spin-button-up.png differ diff --git a/forest-light/tab-accent.png b/forest-light/tab-accent.png new file mode 100644 index 0000000..37b37c4 Binary files /dev/null and b/forest-light/tab-accent.png differ diff --git a/forest-light/tab-basic.png b/forest-light/tab-basic.png new file mode 100644 index 0000000..860417c Binary files /dev/null and b/forest-light/tab-basic.png differ diff --git a/forest-light/tab-hover.png b/forest-light/tab-hover.png new file mode 100644 index 0000000..5d6277c Binary files /dev/null and b/forest-light/tab-hover.png differ diff --git a/forest-light/thumb-hor-accent.png b/forest-light/thumb-hor-accent.png new file mode 100644 index 0000000..5179d9d Binary files /dev/null and b/forest-light/thumb-hor-accent.png differ diff --git a/forest-light/thumb-hor-basic.png b/forest-light/thumb-hor-basic.png new file mode 100644 index 0000000..ba727d7 Binary files /dev/null and b/forest-light/thumb-hor-basic.png differ diff --git a/forest-light/thumb-hor-hover.png b/forest-light/thumb-hor-hover.png new file mode 100644 index 0000000..9fee17d Binary files /dev/null and b/forest-light/thumb-hor-hover.png differ diff --git a/forest-light/thumb-vert-accent.png b/forest-light/thumb-vert-accent.png new file mode 100644 index 0000000..f793ad9 Binary files /dev/null and b/forest-light/thumb-vert-accent.png differ diff --git a/forest-light/thumb-vert-basic.png b/forest-light/thumb-vert-basic.png new file mode 100644 index 0000000..a58440d Binary files /dev/null and b/forest-light/thumb-vert-basic.png differ diff --git a/forest-light/thumb-vert-hover.png b/forest-light/thumb-vert-hover.png new file mode 100644 index 0000000..faa6f6b Binary files /dev/null and b/forest-light/thumb-vert-hover.png differ diff --git a/forest-light/tree-basic.png b/forest-light/tree-basic.png new file mode 100644 index 0000000..98c26e0 Binary files /dev/null and b/forest-light/tree-basic.png differ diff --git a/forest-light/tree-pressed.png b/forest-light/tree-pressed.png new file mode 100644 index 0000000..517cc19 Binary files /dev/null and b/forest-light/tree-pressed.png differ diff --git a/forest-light/up.png b/forest-light/up.png new file mode 100644 index 0000000..196e038 Binary files /dev/null and b/forest-light/up.png differ diff --git a/forest-light/vert-accent.png b/forest-light/vert-accent.png new file mode 100644 index 0000000..7dab874 Binary files /dev/null and b/forest-light/vert-accent.png differ diff --git a/forest-light/vert-basic.png b/forest-light/vert-basic.png new file mode 100644 index 0000000..d5f61ec Binary files /dev/null and b/forest-light/vert-basic.png differ diff --git a/forest-light/vert-hover.png b/forest-light/vert-hover.png new file mode 100644 index 0000000..bd8957d Binary files /dev/null and b/forest-light/vert-hover.png differ