# Copyright (c) 2021 rdbende # Copyright (c) 2020 RedFantom # Derived from Ubuntu Yaru theme, Copyright (c) 2018-2020 The Yaru theme authors # See for a list of authors for the Yaru theme package require Tk 8.6 namespace eval ttk::theme::yaru { variable version 1.2 package provide ttk::theme::yaru $version variable colors array set colors { -fg "#3d3d3d" -bg "#f7f7f7" -disabledfg "#8b8e8f" -disabledbg "#f7f7f7" -selectfg "#f7f7f7" -selectbg "#e95420" } 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]] yaru] # Settings ttk::style theme create yaru -parent default -settings { ttk::style configure . \ -background $colors(-bg) \ -foreground $colors(-fg) \ -troughcolor $colors(-bg) \ -focuscolor $colors(-selectbg) \ -selectbackground $colors(-selectbg) \ -selectforeground $colors(-selectfg) \ -fieldbackground $colors(-selectbg) \ -font TkDefaultFont \ -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 TCheckbutton { Checkbutton.button -children { Checkbutton.padding -children { Checkbutton.indicator -side left Checkbutton.label -side right -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 -children { Combobox.downarrow -side right -sticky {} Combobox.padding -expand 1 -children { Combobox.textarea } } } ttk::style layout TSpinbox { Spinbox.field -children { null -side right -children { Spinbox.uparrow -side top -sticky e Spinbox.downarrow -side bottom -sticky s } Spinbox.padding -expand 0 -children { Spinbox.textarea } } } ttk::style layout Horizontal.TSeparator { Horizontal.separator -sticky nswe } ttk::style layout Vertical.TSeparator { Vertical.separator -sticky nswe } ttk::style layout TLabelframe { Labelframe.border { Labelframe.padding -expand 1 -children { Labelframe.label -side right } } } ttk::style layout TNotebook.Tab { Notebook.tab -children { Notebook.padding -side top -children { Notebook.label -side top -sticky {} } } } 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 {} } } # Button ttk::style configure TButton -padding 4 -width 10 -anchor center ttk::style element create Button.button \ image [list $I(button-basic) \ disabled $I(button-disabled) \ pressed $I(button-pressed) \ active $I(button-basic) \ ] -border 4 -sticky news # Toolbutton ttk::style configure Toolbutton -padding 4 -width 10 -anchor center ttk::style element create Toolbutton.button \ image [list $I(empty) \ disabled $I(empty) \ pressed $I(button-pressed) \ active $I(button-pressed) \ ] -border 4 -sticky news # Menubutton ttk::style configure TMenubutton -padding 4 ttk::style element create Menubutton.button \ image [list $I(button-basic) \ disabled $I(button-disabled) \ pressed $I(button-pressed) \ active $I(button-basic) \ ] -border 4 -sticky news ttk::style element create Menubutton.indicator image $I(arrow-down-basic) -width 25 -sticky e # OptionMenu ttk::style configure TOptionMenu -padding 4 ttk::style element create OptionMenu.button \ image [list $I(button-basic) \ disabled $I(button-disabled) \ pressed $I(button-pressed) \ active $I(button-basic) \ ] -border 4 -sticky news ttk::style element create OptionMenu.indicator image $I(arrow-down-basic) -width 25 -sticky e # Checkbutton ttk::style configure TCheckbutton -padding 4 ttk::style element create Checkbutton.indicator \ image [list $I(checkbox-basic) \ disabled $I(checkbox-basic) \ {selected disabled} $I(checkbox-selected-dis) \ {pressed selected} $I(checkbox-selected) \ {active selected} $I(checkbox-selected) \ selected $I(checkbox-selected) \ {pressed !selected} $I(checkbox-basic) \ active $I(checkbox-basic) \ ] -width 20 -sticky w # Radiobutton ttk::style configure TRadiobutton -padding 4 ttk::style element create Radiobutton.indicator \ image [list $I(radio-basic) \ disabled $I(radio-basic) \ {selected disabled} $I(radio-selected-dis) \ {pressed selected} $I(radio-selected) \ {active selected} $I(radio-selected) \ selected $I(radio-selected) \ {pressed !selected} $I(radio-basic) \ active $I(radio-basic) \ ] -width 20 -sticky w # Scrollbar ttk::style element create Horizontal.Scrollbar.trough image $I(scrollbar-hor-trough) \ -border 2 -sticky ew ttk::style element create Horizontal.Scrollbar.thumb \ image [list $I(scrollbar-hor-gray) \ disabled $I(scrollbar-hor-gray) \ pressed $I(scrollbar-hor-orange) \ active $I(scrollbar-hor-orange) \ ] -border 1 -sticky ew ttk::style element create Vertical.Scrollbar.trough image $I(scrollbar-vert-trough) \ -border 2 -sticky ns ttk::style element create Vertical.Scrollbar.thumb \ image [list $I(scrollbar-vert-gray) \ disabled $I(scrollbar-vert-gray) \ pressed $I(scrollbar-vert-orange) \ active $I(scrollbar-vert-orange) \ ] -border 1 -sticky ns # Scale ttk::style element create Horizontal.Scale.trough \ image [ list $I(scale-trough) \ disabled $I(scale-trough-disabled) ] -border 9 -padding 0 ttk::style element create Horizontal.Scale.slider \ image [list $I(scale-slider) \ disabled $I(scale-slider) \ pressed $I(scale-slider-hover) \ active $I(scale-slider-hover) \ ] -sticky news ttk::style element create Vertical.Scale.trough \ image [ list $I(scale-trough) \ disabled $I(scale-trough-disabled) ] -border 9 -padding 0 ttk::style element create Vertical.Scale.slider \ image [list $I(scale-slider) \ disabled $I(scale-slider) \ pressed $I(scale-slider-hover) \ active $I(scale-slider-hover) \ ] -sticky news # Progressbar ttk::style element create Horizontal.Progressbar.trough image $I(progressbar-trough-hor) \ -border 2 -sticky ew ttk::style element create Horizontal.Progressbar.pbar image $I(progressbar-hor) \ -border 2 -sticky ew ttk::style element create Vertical.Progressbar.trough image $I(progressbar-trough-hor) \ -border 2 -sticky ns ttk::style element create Vertical.Progressbar.pbar image $I(progressbar-hor) \ -border 2 -sticky ns # Entry ttk::style element create Entry.field \ image [list $I(entry-basic) \ {focus hover} $I(entry-focus) \ invalid $I(entry-focus) \ disabled $I(entry-disabled) \ focus $I(entry-focus) \ hover $I(entry-basic) \ ] -border 4 -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(entry-basic) \ {readonly disabled} $I(button-disabled) \ {readonly pressed} $I(button-pressed) \ {readonly focus hover} $I(button-basic) \ {readonly focus} $I(button-basic) \ {readonly hover} $I(button-basic) \ {focus hover} $I(entry-focus) \ readonly $I(button-basic) \ disabled $I(entry-disabled) \ focus $I(entry-focus) \ hover $I(entry-basic) \ ] -border 4 -padding 8 ttk::style element create Combobox.downarrow image $I(arrow-down-basic) \ -width 25 -sticky e # Spinbox ttk::style element create Spinbox.field \ image [list $I(entry-basic) \ disabled $I(entry-disabled) \ focus $I(entry-focus) \ hover $I(entry-basic) \ ] -border 4 -padding 8 -sticky news ttk::style element create Spinbox.uparrow \ image [list $I(arrow-up-basic) \ disabled $I(arrow-up-hover) \ pressed $I(arrow-up-hover) \ active $I(arrow-up-hover) \ ] -width 15 -sticky e ttk::style element create Spinbox.downarrow \ image [list $I(arrow-down-basic) \ disabled $I(arrow-down-hover) \ pressed $I(arrow-down-hover) \ active $I(arrow-down-hover) \ ] -width 15 -sticky e # Sizegrip ttk::style element create Sizegrip.sizegrip image $I(sizegrip) \ -sticky news # Separator ttk::style element create Horizontal.separator image $I(separator) ttk::style element create Vertical.separator image $I(separator) # Labelframe ttk::style element create Labelframe.border image $I(checkbox-basic) \ -border 4 -padding 4 -sticky news # Notebook ttk::style element create Notebook.client \ image $I(checkbox-basic) -border 4 ttk::style element create Notebook.tab \ image [list $I(tab-basic) \ selected $I(tab-current) \ active $I(tab-hover) \ ] -border 6 -padding {14 10} -sticky news # Treeview ttk::style element create Treeview.field image $I(checkbox-basic) \ -border 4 ttk::style element create Treeheading.cell \ image [list $I(tree-basic) \ pressed $I(tree-pressed) ] -border 10 -padding 4 -sticky news ttk::style element create Treeitem.indicator \ image [list $I(plus) \ user2 $I(empty) \ user1 $I(minus) \ ] -width 15 -sticky w ttk::style configure Treeview -background $colors(-bg) ttk::style configure Treeview.Item ttk::style map Treeview \ -background [list selected $colors(-selectbg)] \ -foreground [list selected $colors(-selectfg)] # Sashes ttk::style configure TPanedwindow \ -width 1 -padding 0 ttk::style map TPanedwindow \ -background [list hover $colors(-bg)] } }