projman/theme/yaru/yaru.tcl
2022-07-21 10:56:46 +03:00

418 lines
15 KiB
Tcl

# Copyright (c) 2021 rdbende
# Copyright (c) 2020 RedFantom
# Derived from Ubuntu Yaru theme, Copyright (c) 2018-2020 The Yaru theme authors
# See <https://github.com/ubuntu/yaru/blob/master/AUTHORS> 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)]
}
}