з назвою, яке буде ім'ям вашої теми. Незважаючи та те, що Metacity знайде тему в обох вищевказаних каталогах, доцільним буде залишити тему в домашньому каталозі, поки ви будете писати і налагоджувати її. Наступний крок по створенню теми полягає в редагуванні файлу з ім'ям 'metacity-theme-1.xml', який необхідно створити в каталозі теми. Це файл, який містить XML опис теми, згідно з цим DTD description. Для створення даного файлу краще скористатися існуючої темою, скопіювавши вказаний файл і потім модифікувавши його, а не створювати нову тему з нуля. Перші кілька рядків будуть виглядати так:
Основи створення теми
Перед тим як зануритися в детальний опис кожної частини, зробимо короткий огляд.
Підтримувані типи вікон
Існує 6 спеціальних типів вікон, які розуміє Metacity:
При створенні теми для Metacity, рекомендується використовувати додаток metacity-theme-viewer. яке спеціально розроблене для тестування тем. Щоб користуватися цією програмою, просто вкажіть в якості аргументу ту тему, яку ви хочете завантажити. Ця тема буде завантажена і проаналізована і якщо в ній будуть помилки, то ви побачите повідомлення в командному рядку. Ви повинні виправити всі помилки перед тим як тема буде успішно завантажена.
Цей додаток фактично корисно тільки при дизайні стилю декоративного оформлення вікна, так як вам не будуть доступні дії, які ви призначили кнопок, а також вікна меню.
Щоб переключитися на вашу нову тему, використовуйте або gconftool-2
або інтерфейс користувача в Параметри -> Тема -> Theme details, виберіть закладку 'Рамка вікна'. При використанні gconftool2-. вам
необхідно використовувати наступну команду -
gconftool-2 --type = string --set / apps / metacity / general / theme [theme_name]
Metacity theme viewer application - for testing themes
Глибоко всередині
геометрія рамки
Перше, що вам потрібно зробити - це створити 'frame geometry' (геометрію рамки). На ім'я геометрії рамки пізніше буде посилатися 'frame style' (стиль рамки).
Наступна діаграма показує різні розміри, які ви можете змінювати в геометрії рамки:
Frame geometry specifications
Геометрія рамки має кілька необов'язкових атрибутів, які ви також можете визначити:
Визначає чи буде висота тексту заголовка вікна включена в калькулятор висоти. Якщо не задано, то значення за замовчуванням true.
Використовувати Pango markup - xx-small, x-small, small, medium, large, x-large і xx-large. Якщо не задано, то буде використовуватися шрифт робочого столу.
Визначає чи буде округленими верхній лівий кут вікна. Якщо не задано, то значення за замовчуванням false.
Визначає чи буде округленими верхній правий кут вікна. Якщо не задано, то значення за замовчуванням false.
Визначає чи буде округленими нижній лівий кут вікна. Якщо не задано, то значення за замовчуванням false.
Визначає чи буде округленими нижній правий кут вікна. Якщо не задано, то значення за замовчуванням false.
Після того як ви задали геометрію рамки, можна використовувати спадкування. Ось просте перекриття будь-яких значень, з тих, що були успадковані від батька.
Замість завдання розмірів кнопок, ви можете задати тільки коефіцієнт перспективи.
операції малювання
'Drawing operations' (операції малювання) є основою при створенні теми Metacity. Для успішного малювання частини рамки, вам знадобитися задати операцію малювання для цієї 'frame piece' (частини рамки).
Операції малювання зазвичай описуються спочатку, але можуть також бути вбудовані безпосередньо в потрібному місці [см. приклад нижче]. Для операцій малювання дозволяється наступний список операторів:
Малює лінію заданим кольором color від координат (x1, y1) до (x2, y2). Кольори можна вказувати іменами, типу "blue", шестрандцатерічним номером типу "# FF0099" або кольором з теми GTK, заданим у вигляді "gtk: base [NORMAL]" [Див. приклади нижче]. Є такі додаткові атрибути як width. dash_on_length і dash_off_length. які за умовчанням встановлюються в "0".
Малює чотирикутник від (x, y) і з заданими шириною width і висотою height. Є додаткові атрибут filled. який за замовчуванням встановлений в "false".
Малює дугу починаючи від (x, y) і з заднього шириною width. висотою height. початковим кутом start_angle і другим кутом extent_angle. Є додаткові атрибут filled. який за замовчуванням встановлений в "false".
Виконати черепицею список інших операціё малювання з заданим ім'ям name і значеннями tile_width і tile_height. Є додаткові аргументи (x, y), width. height. tile_xoffset і tile_yoffset with. які за умовчанням мають значення FIXME.
стиль рамки
Під час створення 'frame style' (стилю рамки), ви пов'язуєте різні 'frame pieces' (частини рамки) і 'window buttons' (кнопки вікна) зі спеціальною 'frame geometry' (геометрією рамки). Зазвичай потрібно створити стиль для таких станів вікна як normal. maximized. shaded. maximized_and_shaded і з огляду на залежність від такої речі як: чи буде вікно мати фокус чи ні.
Спершу створюємо шаблон, який буде містити всю інформацію, яка необхідна для малювання даного стилю рамки.
При завданні стилю рамки успадкування також дозволено. Можна задати інший стиль, який перекриває батьківський.
частини рамки
Щоб отрисовать частини рамки, для кожної частини рамки вам потрібно надати операцію малювання. Якщо ви опускаєте будь-яку частину, то для цієї частини рамки нічого малюватися не буде.
В якості альтернативи, як зазначалося раніше, ви можете надати вбудовану операцію малювання.
Наступні діаграми показують різні шматки, які можуть мати стиль в задається рамці:
кнопки вікна
Як зазначалося раніше, для задається рамки вам необхідно встановити мінімальний набір кнопок вона. Методи відтворення повинні бути рпедоставлени для таких кнопок як close, maximize, minimize і menu, при цьому для кожного з двох станів - normal і pressed. Якщо prelight не задано, то для цього стану буде використовуватися normal.
Перед завданням кнопок вікна, ви можете визначити як малювати частина кнопки, в залежності від позиції всередині рамки вікна. Якщо всі ваші кнопки мають однаковий фон, вам потрібно задати тільки операції малювання для left_middle_background і right_middle_background.
Якщо всю цю інформацію помістити разом в один стиль рамки 'frame style', то це може виглядати так:
значки меню
У меню вікна ви повинні задати значки для пунктів меню Close, Maximize, UnMaximize і Minimize. Досить поставити тільки операції малювання для стану normal. Ви можете додатково вказати операції малювання для всіх інших станів, як говорилося вище.
Список стилів рамки
Після того як ми створили різні стилі рамки, нам потрібно відобразити їх на різні стани вікна. Це робиться шляхом створення
'Frame style set' (списку стилів рамки). На атрибут name потім буде посилатися заданий 'window type' (тип вікна).
Як видно вище, ви повинні надати рамку для кожного з станів вікна і плюс при фокусі вікна та й немає. Атрибут style посилається на ваш 'frame style' (стиль рамки). Ви також повинні надати атрибут resize. встановлений в 'both' для всіх рамок зі станом normal. Також можна додатково вказати рамки для інших атрибутів resize таких як none. horizontal і vertical.
Нарешті, ви повинні надати відображення 'window types' (типів вікон) в задані 'frame style sets' (списки стилів рамок). Для кожного типу вікна необхідний список стилів - normal. dialog. modal_dialog. menu. utility і border
Як видно, створення теми Metacity займе досить багато часу. Краще взяти вже готові теми і змінити в них те, що ви хочете, замість того, щоб писати тему з нуля. Багато тем [Crux і Aqua будуть хорошими прикладами] засновані також і на картинках, які вам не так-то просто буде змінити. Хоча теми, які використовують картинки можуть виглядати дуже спокусливо, ви повинні розуміти, що отрисовка такої теми буде займати більше часу.
Хорошим ресурсом за темами Metacity є art.gnome.org. Повідомлення про помилки оформляйте через bugzilla.gnome.org. вибравши компонент 'Metacity'.