Vzhledem k tomu, že na internetu neexistuje návod, jak si napsat vlastní hezké GTK2 téma, tak to popíšu zde. Na konci návodu vám vyjde funkční GTK2 téma založené na Clearlooks a Murrine Enginech.
Návod je určen pro mírně pokročilé uživatele(Pro ty, co nepracují s Ubuntu den), takže počítám s tím, že umíte instalovat software, spouštět aplikace pod rootem a jiné. Také je nutné znát alespoň trochu anglický jazyk.
Engine se stará v GTK2 o to, jakým stylem se budou jednotlivé prvky vykreslovat. Bývá psaný většinou v jazyce C. V tématu můžete použít i více enginů pro různé prvky, nicméně není to doporučeno. Doporučuji také snažit se nepoužít pixmap/ubuntulooks engine, protože takové téma je potom velice pomalé.
Do tématu se enginy zapisují takhle:
engine "nazev" { parametry }
Zde popíšu, které jsou nejznámější enginy a jak se používají(jejich parametry)
Obsažen přímo v Ubuntu v balíku gtk2-engines. Je zároveň výchozím enginem pro čisté Gnome. Engine byl založeno na Bluecurve enginu. Podporuje barevná schémata Gnome.
colorize_scrollbar = TRUE # obarvit scrollbar menubarstyle = 2 # 0 = plochý, 1 = zapadlý, 2 = plochý gradient toolbarstyle = 1 # 0 = plochý, 1 = zapnout efekty animation = FALSE # animace progressbaru style = GUMMY # styl, používá se GUMMY, GLOSSY nebo INVERTED, rozdíl uvidíte na porovnání témat Clearlooks, Glossy a Inverted, které jsou postaveny na stejném enginu
Obsažen v balíku gtk2-engines. Podporuje barevná schémata. Parametry se nepoužívají.
Tento engine se pro tvorbu nových témat nepoužívá, je využit pouze pro vysoce kontrastní témata v Gnome. Obsažen v balíku gtk2-engines.
Nenáročný, jednoduchý engine od Novellu. Podpora barevných schémat. Bez parametrů. Obsažen v balíku gtk2-engines.
Nenáročný plochý engine. Bez parametrů, podpora barevných schémat. Obsažen v balíku gtk2-engines.
Obsažen v balíku gtk2-engines.
Engine snažící se napodobovat vzhled Windows 95. Bez parametrů a podpory barevných schémat.
Velice rozšířený, hezký, rychlý a nastavitelný engine. Vytvořil ho Ital Andrea Cimitan, tvůrce témat pro Gnome. Xubuntu ho od verze 7.10 využívá jako výchozí engine. Doporučuji používat. Existuje také Murrine Configurator, GUI pro konfiguraci enginu. Najdete jej na oficiálních stránkách. V Ubuntu v balíku gtk2-engines-murrine, ale o něco starší verze.
glazestyle = 0 # Změna základního vzhledu, 0 = plochý, 1 = zakřivený, 2 = vydutý, 3 = nahoře zakřivený, 4 = beryl/emerald styl roundness = 2 # Kulatost, 0 = hranatý, 8 = nejvíce kulatý, glazestyle s hodnotou 2 je podporován pouze s roundness 0,1 gradients = TRUE # povoluje gradienty, hodnoty jsou jen TRUE a FALSE menubarstyle = 0 # styl menubaru, hodnoty jsou 0 = plochý, 1 = glass-efekt, 2 = gradient, 3 = pruhovaný menuitemstyle = 0# styl položky menu, 0 = plochý, 1 = glassefekt, 2 = pruhovaný menubaritemstyle = 1 # styl položky menubaru, 0 = vzhled položky menu, 1 = vzhled tlačítka listviewheaderstyle = 0 # styl hlavičky seznamu, 0 = plochý, 1 = glass efekt, 2 = vyvýšený listviewstyle = 0 # vzhled oddělovačů seznamů, 0 = kompletně plochý, 1 = tečkovaný scrollbarstyle = 0 # styl posuvníků, 0 = nic nepřidat, 1 = kruhy, 2 = "držadlo" 3 = diagonální pruhy, 4 = 2+3, 5 = horizontální pruhy, 6 = 2+5 animation = TRUE # animované progressbary, hodnoty jsou TRUE a FALSE(ano, ne) hilight_ratio = 1.0 # zvýšení/snížení osvícení při najetí myší na prvek, 1.0 základ, 1.1 vyšší(pro tmavá témata), 0.909090 plochá témata contrast = 1.0 # kontrast tématu, 0.8 = méně kontrastní, 1.0 = více kontrastu na ohraničeních
Fork enginu Murrine. Výchozí GTK2 engine Fedory. Parametry: viz. Murrine. V Ubuntu není, nutné zkompilovat.
Fork enginu Clearlooks. Stejný jako výchozí engine, ale má odstraněnu kulatost z kódu enginu. V Ubuntu jej nenajdete, nutné zkompilovat.
Fork Clearlooks enginu. Upravuje několik věcí - viz. Human téma. Nedoporučuji používat - pomalost tohoto enginu je až neuvěřitelná..
Engine využívající obrázky k vykreslování prvků. Nebudu zde popisovat všechny funkce, protože by to bylo na 10 stránek Pokud chcete vědět více o funkci pixmapového enginu, podívejte se do kódu nějakého tématu jako Carbonit, Samui, Linsta atd. Obsažen v balíku gtk2-engines.
do tématu se pixmap engine zapisuje takhle, popíšu to na tlačítku:
engine "pixmap" { # vychozi tlacitko, prazdna pixmapa image { function = BOX detail = "buttondefault" recolorable = TRUE file = "tlacitkovychozi.png" # obrazek prvku border = {4, 4, 4, 4} # nastavte tak, aby tlacitko vypadalo dobre stretch = TRUE # roztahnout } # osvicene tlacitko image { function = BOX state = PRELIGHT # stav recolorable = TRUE file = "tlacitkoprelight.png" border = { 4, 4, 4, 4 } stretch = TRUE } # stisknute tlacitko image { function = BOX state = ACTIVE file = "tlacitkostisknute.png" border = { 4, 4, 4, 4 } stretch = TRUE } # tlacitko v normalnim stavu image { function = BOX file = "tlacitkonormal.png" border = { 4, 4, 4, 4 } stretch = TRUE } }
Vaše témata si ukládejte do /home/uživatel/.themes, pokud chcete, aby byly přístupné všem, tak do /usr/share/themes.
Struktura by měla vypadat takhle:
+/usr +share +themes +VaseTema +gtk-2.0 -gtkrc # kód tématu -neco.rc # nepovinné, do .rc souborů se dají zapisovat části gtkrc a .rc soubor pak v gtkrc použít, pro větší přehlednost +Buttons # v složce VaseTema si můžete vytvářet další složky, do těch dávat obrázky, pokud využíváte pixmap engine a v gtkrc pak parametr file zapisovat '''file = Buttons/pixmapa.png''', pozor, case sensitive -ButtonDefault.png # pixmapa v Buttons složce
Do .rc souborů ve stejné složce, jako gtkrc, se dají, jak už jsem se zmínil, zapisovat kusy kódu místo do gtkrc pro větší přehlednost - např. vše co se týká panelu zapsat do panel.rc.
V gtkrc souboru využijete .rc soubory zapsáním řádku
include "soubor.rc"
na začátek.
V tématu se používají tzv. styly. Ve stylu je zapsáno který engine použít, z kterého jiného stylu použít parametry, barvy, velikosti aj.
Každé téma má jeden základní styl, nazvaný většinou default. Každý další styl má pak nastaveno, aby využíval default styl.
Předvedu na příkladu jednoduchého tématu na enginu Clearlooks se třemi styly. Výchozí nastavení tématu je tmavé a barevné schéma změníte v nastavení Gnome. Pokud chcete vyzkoušet, vložte si tento kód to gtkrc souboru v /home/uživatel/.themes/Test/gtk-2.0/gtkrc a zvolte v nastavení vašeho prostředí.
# barevné schéma gtk_color_scheme = "fg_color:#fff\nbg_color:#505050\nbase_color:#505050\ntext_color:#ffffff\nselected_bg_color:#505050\nselected_fg_color:#fff\ntooltip_bg_color:#505050\ntooltip_fg_color:#000" # výchozí styl style "default" # název stylu { # Vlastnosti stylu, může jich být mnoho. GtkButton ::child-displacement-x = 1 GtkButton ::child-displacement-y = 1 GtkButton ::default-border = { 0, 0, 0, 0 } # velikosti xthickness = 1 ythickness = 1 # barvy fg[NORMAL] = @fg_color fg[PRELIGHT] = @fg_color fg[SELECTED] = @selected_fg_color fg[ACTIVE] = @fg_color fg[INSENSITIVE] = darker (@bg_color) bg[NORMAL] = @bg_color bg[PRELIGHT] = shade (1.02, @bg_color) bg[SELECTED] = @selected_bg_color bg[INSENSITIVE] = @bg_color bg[ACTIVE] = shade (0.9, @bg_color) base[NORMAL] = @base_color base[PRELIGHT] = shade (0.95, @bg_color) base[ACTIVE] = shade (0.9, @selected_bg_color) base[SELECTED] = @selected_bg_color base[INSENSITIVE] = @bg_color text[NORMAL] = @text_color text[PRELIGHT] = @text_color text[ACTIVE] = @selected_fg_color text[SELECTED] = @selected_fg_color text[INSENSITIVE] = darker (@bg_color) engine "clearlooks" { animation = TRUE style = GUMMY } } style "testbutton" = "default" # = "default" znamená, že se využije engine a nastavení enginu z default stylu. { # velikosti xthickness = 3 ythickness = 3 # specifické barvy pro styl bg[NORMAL] = shade (1.04, @bg_color) bg[PRELIGHT] = shade (1.06, @bg_color) bg[ACTIVE] = shade (0.85, @bg_color) } style "testprogressbar" = "default" # další styl { # velikosti.. jsou v každém stylu.. aby vše sedělo xthickness = 1 ythickness = 1 # specifické barvy fg[PRELIGHT] = @selected_fg_color } # použití stylů v prvcích class "GtkButton" style "testbutton" # použití stylu testbutton pro tlačítka class "GtkProgressBar" style "testprogressbar" # použití stylu testprogressbar pro progressbar class "GtkWidget" style "default" # použití stylu default pro prvky, které nemají nastaven styl.
Naše výsledné téma bude vypadat asi takhle:
Když si pohrajete s hodnotami ythickness a xthickness, dostanete různé velikosti prvků.
Ty použijete zapsáním řádku
gtk_color_scheme = "fg_color:#000\nbg_color:#EDECEB\nbase_color:#fff\ntext_color:#1A1A1A\nselected_bg_color:#86ABD9\nselected_fg_color:#fff\ntooltip_bg_color:#F5F5B5\ntooltip_fg_color:#000"
na začátek(ale až po .rc souborech), upravením hodnot podle sebe a použitím nastavení barev
base[INSENSITIVE] = @bg_color
popř.
base[ACTIVE] = shade (0.9, @selected_bg_color)
místo
base[ACTIVE] = "#HEXCODE"
Váš engine musí podporovat barevná schémata.
HEX kódy si můžete zjistit např. pomocí GIMPu.
Už znáte dost věcí, abyste si mohli napsat vlastní GTK2 téma. Použijeme vše, co je v návodu napsáno. Enginy využijeme Murrine a Clearlooks.
První si nainstalujeme něco, v čem to budeme psát
Já doporučuju Vim, pokud Vim nechcete, použijte gedit, jinak VIMa nainstalujete
sudo apt-get install vim
Jako nástroj pro testování využijeme The Widget Factory. Nainstalujete příkazem
sudo apt-get install thewidgetfactory
a spustíte příkazem twf.
Clearlooks máte už v systému a Murrine doinstalujte příkazem
sudo apt-get install gtk2-engines-murrine
Nyní se dostáváme k vlastnímu psaní tématu. Napíšeme si Glassy Clearlooks v Murrine enginu :), proto také využijeme stejné parametry.
První se přesuneme do domovské složky.
cd /home/uživatel
Pak si vytvoříme postupně adresářovou strukturu
mkdir .themes mkdir .themes/MyFirstTheme mkdir .themes/MyFirstTheme/gtk-2.0
Nyní si vytvoříme soubory
cd .themes/MyFirstTheme/gtk-2.0 touch gtkrc touch buttons.rc touch progressbar.rc touch others.rc
Otevřeme si gtkrc v oblíbeném textovém editoru a zapíšeme include řádky.
include "buttons.rc" include "progressbar.rc" include "others.rc"
Vynecháme řádek a zapíšeme barevné schéma. Využijeme stejné, jako je v tématu „Clearlooks“.
gtk_color_scheme = "fg_color:#000\nbg_color:#EDECEB\nbase_color:#fff\ntext_color:#1A1A1A\nselected_bg_color:#86ABD9\nselected_fg_color:#fff\ntooltip_bg_color:#F5F5B5\ntooltip_fg_color:#000"
Do gtkrc nebudeme psát přímo nic jiného, kromě default stylu a asociací stylů prvkům.
Zapíšeme do gtkrc default styl.
style "default" { GtkButton ::child-displacement-x = 1 GtkButton ::child-displacement-y = 1 GtkButton ::default-border = { 0, 0, 0, 0 } GtkCheckButton ::indicator-size = 14 GtkPaned ::handle-size = 6 GtkRange ::trough-border = 0 GtkRange ::slider-width = 15 GtkRange ::stepper-size = 15 GtkScale ::slider-length = 23 GtkScale ::trough-side-details = 1 GtkScrollbar ::min-slider-length = 30 GtkMenuBar ::internal-padding = 0 GtkExpander ::expander-size = 16 GtkToolbar ::internal-padding = 1 GtkTreeView ::expander-size = 14 GtkTreeView ::vertical-separator = 1 GtkMenu ::horizontal-padding = 0 GtkMenu ::vertical-padding = 0 xthickness = 1 ythickness = 1 fg[NORMAL] = @fg_color fg[PRELIGHT] = @fg_color fg[SELECTED] = @selected_fg_color fg[ACTIVE] = @fg_color fg[INSENSITIVE] = darker (@bg_color) bg[NORMAL] = @bg_color bg[PRELIGHT] = shade (1.02, @bg_color) bg[SELECTED] = @selected_bg_color bg[INSENSITIVE] = @bg_color bg[ACTIVE] = shade (0.9, @bg_color) base[NORMAL] = @base_color base[PRELIGHT] = shade (0.95, @bg_color) base[ACTIVE] = shade (0.9, @selected_bg_color) base[SELECTED] = @selected_bg_color base[INSENSITIVE] = @bg_color text[NORMAL] = @text_color text[PRELIGHT] = @text_color text[ACTIVE] = @selected_fg_color text[SELECTED] = @selected_fg_color text[INSENSITIVE] = darker (@bg_color) engine "murrine" { glazestyle = 1 roundness = 2 gradients = TRUE menubarstyle = 3 menuitemstyle = 2 menubaritemstyle = 1 listviewheaderstyle = 1 scrollbarstyle = 2 animation = TRUE } }
Vynecháme řádek a asociujeme ještě neexistující styly prvkům. Použijeme nastavení stylů z Clearlooks.
class "GtkWidget" style "default" class "GtkToolbar" style "default" class "GtkRange" style "wide" class "GtkFrame" style "wide" class "GtkSeparator" style "wide" class "GtkEntry" style "wider" widget_class "*<GtkMenu>*" style "menu" widget_class "*<GtkMenuItem>*" style "menu-item" widget_class "*<GtkSeparatorMenuItem>*" style "separator-menu-item" widget_class "*<GtkButton>" style "button" widget_class "*<GtkNotebook>" style "notebook" widget_class "*<GtkProgressBar>" style "progressbar" widget_class "*.<GtkFrame>.<GtkLabel>" style "frame-title" widget_class "*.<GtkTreeView>.<GtkButton>" style "treeview-header" widget_class "*.<GtkCTree>.<GtkButton>" style "treeview-header" widget_class "*.<GtkList>.<GtkButton>" style "treeview-header" widget_class "*.<GtkCList>.<GtkButton>" style "treeview-header" widget "gtk-tooltip*" style "tooltips"
Otevřeme si buttons.rc a vložíme do něj styl pro tlačítka.
style "button" = "default" { xthickness = 3 ythickness = 3 bg[NORMAL] = shade (1.04, @bg_color) bg[PRELIGHT] = shade (1.06, @bg_color) bg[ACTIVE] = shade (0.85, @bg_color) }
Uložíme buttons.rc a zavřeme.
Dále si otevřeme progressbar.rc a vložíme do něj progressbar styl. U Progressbaru
style "progressbar" { xthickness = 1 ythickness = 1 fg[PRELIGHT] = @selected_fg_color }
Uložíme a zavřeme.
Do tohoto souboru si vložíme všechny ostatní styly. U stylu notebook a menu využijeme Clearlooks engine.
Vložte tam tedy toto:
style "wide" = "default" { xthickness = 2 ythickness = 2 } style "wider" = "default" { xthickness = 3 ythickness = 3 } style "notebook" = "default" { xthickness = 2 ythickness = 2 bg[NORMAL] = shade (1.02, @bg_color) engine "clearlooks" { style = GUMMY } } style "menu" = "default" { xthickness = 0 ythickness = 0 bg[NORMAL] = shade (1.08, @bg_color) # Radius of the menu items (inside menus) engine "clearlooks" { } } style "menu-item" = "default" { xthickness = 2 ythickness = 3 fg[PRELIGHT] = @selected_fg_color text[NORMAL] = @fg_color text[PRELIGHT] = @selected_fg_color text[SELECTED] = @selected_fg_color text[ACTIVE] = @fg_color text[INSENSITIVE] = darker (@bg_color) } style "separator-menu-item" = "default" { GtkSeparatorMenuItem::horizontal-padding = 0 GtkWidget::wide-separators = 1 GtkWidget::separator-width = 1 GtkWidget::separator-height = 5 xthickness = 1 ythickness = 0 } style "treeview-header" = "default" { xthickness = 2 ythickness = 1 } style "frame-title" = "default" { fg[NORMAL] = lighter (@fg_color) } style "tooltips" = "default" { xthickness = 4 ythickness = 4 bg[NORMAL] = @tooltip_bg_color fg[NORMAL] = @tooltip_fg_color }
Vaše práce pak bude vypadat nějak takhle: