====== Tvorba GTK2 motivů ====== 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. ====== Používané enginy ====== 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 } ===== Výpis nejznámějších enginů a jejich použití ===== Zde popíšu, které jsou nejznámější enginy a jak se používají(jejich parametry) ==== Clearlooks ==== 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. === Základní parametry === 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 ==== Crux ==== Obsažen v balíku **gtk2-engines**. Podporuje barevná schémata. Parametry se nepoužívají. ==== High contrast ==== 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**. ==== Industrial ==== Nenáročný, jednoduchý engine od Novellu. Podpora barevných schémat. Bez parametrů. Obsažen v balíku **gtk2-engines**. ==== Mist ==== Nenáročný plochý engine. Bez parametrů, podpora barevných schémat. Obsažen v balíku **gtk2-engines**. ==== Redmond 95 ==== Obsažen v balíku **gtk2-engines**. Engine snažící se napodobovat vzhled Windows 95. Bez parametrů a podpory barevných schémat. ==== Murrine ==== 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. === Parametry === 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 ==== Nodoka ==== Fork enginu Murrine. Výchozí GTK2 engine Fedory. Parametry: viz. Murrine. V Ubuntu není, nutné zkompilovat. ==== Rezlooks ==== Fork enginu Clearlooks. Stejný jako výchozí engine, ale má odstraněnu kulatost z kódu enginu. V Ubuntu jej nenajdete, nutné zkompilovat. ==== Ubuntulooks ==== Fork Clearlooks enginu. Upravuje několik věcí - viz. Human téma. Nedoporučuji používat - pomalost tohoto enginu je až neuvěřitelná.. ==== Pixmap ==== 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 } } ====== Základy ====== ===== Struktura adresářů ===== 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 ===== .rc soubory ===== 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. ===== Psaní témat ===== 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: {{.:testclearlooks.png}} Když si pohrajete s hodnotami ythickness a xthickness, dostanete různé velikosti prvků. ===== Barevná schémata ===== 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. ====== Vlastní téma ====== 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. ===== Instalace všeho, co budeme potřebovat ===== ==== Textový editor ==== 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 ==== Testovací nástroj ==== 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%%. ==== Enginy ==== Clearlooks máte už v systému a Murrine doinstalujte příkazem sudo apt-get install gtk2-engines-murrine ===== Psaní tématu ===== 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. ==== Vytvoření adresářové struktury ==== 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 ==== GTKRC ==== 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 "**" style "menu" widget_class "**" style "menu-item" widget_class "**" style "separator-menu-item" widget_class "*" style "button" widget_class "*" style "notebook" widget_class "*" style "progressbar" widget_class "*.." style "frame-title" widget_class "*.." style "treeview-header" widget_class "*.." style "treeview-header" widget_class "*.." style "treeview-header" widget_class "*.." style "treeview-header" widget "gtk-tooltip*" style "tooltips" ==== BUTTONS.RC ==== 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. ==== PROGRESSBAR.RC ==== 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. ==== OTHERS.RC ==== 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: {{.:final.png}} ====== Odkazy ====== * [[http://cimitan.com/murrine|Murrine GTK2 Engine]] * [[http://clearlooks.sourceforge.net|Clearlooks GTK2 Engine]] * Autor návodu: [[Quaker]]