ВНИМАНИЕ:
В Ubuntu 11.10 появилась новая библиотека Gtk3 она использует CSS для формирования стилей.
подробнее про синтаксис можно прочитать тут
http://developer.gnome.org/gtk3/3.0/GtkCssProvider.htmlглавное отличие, практически отпала необходимость в разных theme-engines, идеи остались прежними.
Устройство:
Что такое можно прочесть тут
http://ru.wikipedia.org/wiki/GtkПеревод GTK Theming Tutorial
http://open-life.org/blog/gnome/330.htmlОсновная идея заключается в том что все элементы графического интерфейса называемые "виджеты" умеют взаимодействовать с соседними элементами. Создание интерфейса на Gtk в чём то похоже на создание html страницы. Не нужно задумываться какая позиция будет у того или иного объекта при том или ином размере окна или если рядом появится ещё какой нибудь виджет. Нужно лишь описать расположение объектов друг относительно друга. Всё остальное происходит автоматически.
Библиотека разделена на две чести код который отвечает за логическое строение объекта (Gtk) и код код который рисует этот объект на экране Gdk. Благодаря такому строению одни и те же объекты могут выглядеть по разному. Отрисовка происходит при помощи движков (engines).
Итак когда программа запускается она вызывает функции создания обьектов из библиотеки Gtk когда эти объекты создаются для их отрисовки используется движёк который прописан в теме (gtkrc файл) (для каждого объекта (кнопки, поля для редактирования текста и т.п.) можно использовать свои движки). Получается можно на основе одних и тех же движков создавать огромное количество тем не похожих друг на друга.
Темы можно располагать:
в
/usr/share/themes темы от сюда будут доступны для всех пользователей
в
~/.themes доступна только конкретному пользователю (поэтому программы запущенные
от рута не будут использовать эту тему!!!)
также настройки Gtk тем можно располагать в
~/.gtkrc-2.0Нужно отметить что настройки в стом файле перекрывают настройки темы, поскольку он читается в последнюю очередь.
Устройство темы:
Рассмотрим тему Clearlooks она устанавливается по умолчанию как и несколько других тем.
Вот список файлов:
ls -1 -R /usr/share/themes/Clearlooks/
/usr/share/themes/Clearlooks/:
gtk-2.0/
index.theme
metacity-1/
/usr/share/themes/Clearlooks/gtk-2.0:
gtkrc
/usr/share/themes/Clearlooks/metacity-1:
metacity-theme-1.xml
В файле /usr/share/themes/Clearlooks/index.theme прописано название темы в целом (тема состоит не только gtk но и оконного менеджера и иконок) и описание этой темы на разных языках:
[X-GNOME-Metatheme]
Name=Clearlooks
Name[be]=Clearlooks
...
Name[ru]=Ясность
...
GtkTheme=Clearlooks
MetacityTheme=Clearlooks
IconTheme=gnome
Именно это название мы увидим в менеджере тем
Система->Параметры->Тема
(или из консоли gnome-theme-manager)
Как видите это готовая тема включив которую мы получим законченное решение.
по мимо файла index.theme в каталоге /usr/share/themes/Clearlooks/
есть два подкаталога /usr/share/themes/Clearlooks/gtk-2.0 и /usr/share/themes/Clearlooks/metacity-1
В них описаны тема для gtk и metacity соответственно.
В каталоге /usr/share/themes/Clearlooks/gtk-2.0/ находится файл gtkrc который какраз и описывает тему.
Но если в него заглянуть мы не найдём названия как же тогда программы узнают какой файл относится к теме Clearlooks которая описана в /usr/share/themes/Clearlooks/index.theme
....
GtkTheme=Clearlooks
....
Всё очень просто. Поскольку gtk и metacity это отдельные проекты то формат файлов тем у них разный
но есть общая структура расположения файлов.
т.е. файлы тем должны располагаться в
/usr/share/themes/<тут имя какталога оноже название темы>/<каталог конкретного проекта>Например для gtk темы Clearlooks файл темы должен иметь следующий путь
/usr/share/themes/Clearlooks/gtk-2.0/gtkrc
А для metacity
/usr/share/themes/Clearlooks/metacity-1/metacity-theme-1.xml
Поэтому если в каталоге /usr/share/themes/Clearlooks/ не будет файла index.theme а будут только каталоги gtk-2.0 и metacity-1
То в менеджере тем мы не увидим тему Clearlooks и для того чтобы нам включить тему Clearlooks для gtk нужно выбрать любую тему из представленных затем щёлкнуть на кнопке "Подробнее о теме" и там на закладке "Элементы управления" мы увидим Clearlooks.
Также если мы переключимся на закладку "Рамка окна" то там мы также увидим тему Clearlooks.
Если вы внимательно читали то должны были заметить что в файле index.theme прописаны так же и иконки строка IconTheme=gnome
но каталога с иконками в /usr/share/themes/Clearlooks/ нет.
Дело в том что иконки располагаются отдельно в каталоге
/usr/share/iconsЛистинг файлов:
ls -1 /usr/share/icons
Crux/
default/
gnome/
...
Tango/
whiteglass/
Каждый из каталогов содержит много подкаталогов к которых расположены иконки соответствующего размера и предназначения.
Описывать каждый каталог очень долго но в целом
/usr/share/icons/gnome/<размер>/<предназначение>/<название иконки>размеры могут быть разные например 10x10 16x16 или огромные 48x48.
Несложно догадаться что в каталоге /usr/share/icons/gnome/16x16 будут иконки именно стого размера т.е. 16 на 16 пикселей.
Но как я уже писал выше темы расположенные в каталогах /usr/share/icons и /usr/share/themes доступны всем пользователям на чтение и только root'у на запись поэтому если у вас нет прав или вы просто хотите посмотреть тему можно поместить темы в
~/.themes и ~/.icons соответственно.
Например можно скопировать тему /usr/share/themes/Clearlooks в ~/.themes/Clearlooks-My/ изменить название в файле index.theme
и дальше можно экспериментировать с разными настройками например поправить цвет фона кнопок и т.п.
В следующей версии Gtk обещают ассоциировать специально расширение файла с установщиком тем. А пока если вы скачали тему
с gnome-look.org то можно архивный файл перетащить мышкой на программу "Менеджер тем" (gnome-theme-manager) и если архив правильной структуры то он установится. Но попадаются и "кривые" архивы в стом случае программа скажет что это не архив с темой и она установить не сможет, поэтому придётся распаковать файлы из архива во временный каталог и поправить структуру каталогов чтобы она соответствовала правильной, надеюсь благодаря этому описанию вы сможете разобраться.
Напоследок несколько ссылок где можно подробнее узнать о строении gtk тем.
Ru:
Еще одно руководство
http://systemsinside.kiev.ua/node/282?page=1И о создании тем иконок
http://systemsinside.kiev.ua/node/281(Спасибо за ссылки
EtTi )
En:
http://live.gnome.org/GnomeArt/Tutorials/GtkThemeshttps://stage.maemo.org/svn/maemo/projects/haf/trunk/gtk+/docs/widget_geometry.txthttp://developer.gnome.org/doc/API/2.0/gtk/index.html Здесь доступна полная документация о gtk для программистов но там же описаны
Style Properties т.е. настройки стиля для конкретного виджета.
Также можно получить информацию поиском в гугле или на форуме
http://gnomesupport.org/forums/viewforum.php?f=20&sid=cc054db42895f999aa608ac6a6692bbdили на канале #gnome-art что на сервере irc.gnome.org