Руководство по созданию тем для IceWM

Adam Pribyl, covex@lowlevel.cz
MJ Ray, markj@stu.uea.ac.uk
Последнее обновление для IceWM-2.3.1.

Что такое тема IceWM?

Тема IceWM состоит из нескольких частей:

  • одного или более файлов темы, включая "default.theme", который должен определять все параметры IceWM, связанные с внешним видом (определение цветов) и поведением, в обычном формате предпочтений "Параметр=Значение" на каждой строке (некоторые из предпочтений/значений невозможно изменить при описании темы);

  • набора изображений (файлов XPM и PNG), которые будут использованы для сборки оформления окон;

  • набора изображений (файлов XPM и PNG) для курсоров, специальных значков, почтового ящика и панели задач;

Они не должны содержать много фоновой графики или определять другие параметры, не связанные с внешним видом.

И файлы темы, и изображения для оформления живут в одном подкаталоге каталога ICE-LIB/themes, где ICE-LIB любой системный каталог IceWM или пользовательский каталог .icewm. Тогда темы будут находиться в разделе "Темы" главного меню. Тема по умолчанию при старте устанавливается в файле theme или параметром командной строки -t.

Типы тем IceWM

Разрешёнными являются несколько типов тем, которые могут быть выбраны параметром "Look" с одним из следующих значений: warp3; warp4; win95; motif; nice; pixmap; metal; gtk. Каждый из них даёт Вам различные уровни управления внешним видом и требуют различное количество изображений. (На самом деле, pixmap, metal и gtk похожи.)

В этом руководстве мы рассмотрим самый общий случай Look=pixmap, потому что другим look’ам обычно нужен меньший набор изображений. Загляните в системный каталог ICE-LIB/themes с основными темами, если Вы захотите узнать, чем они отличаются.

Инструменты создания изображений

Большинство народа используют некую комбинацию пакетов для рисования - GIMP и xpaint могут создавать файлы XPM и PNG - и редактор текста, чтобы создавать и редактировать изображения XPM.
Если у редактора текста настроена подсветка синтаксиса, и изображения меньше, чем Ваш экран, тогда это простейший путь к плодотворной работе над увеличенными превьюшками.

Требования к изображениям

(Подсказка: изображения XPM являются довольно простыми файлами, реально. Если Вы этого ещё не поняли, взгляните повнимательнее на несколько: там в заголовке заданы размеры картинки и палитры, затем палитра, затем картинка.)

Изображения именуются методически, даже если на первый взгляд немного недружественно.
Каждая часть окна- это отдельное изображение и начинается с имени, определяющего, какая это часть (напр. "close"- это кнопка закрытия, а "frame"- это секция рамки окна). Следующая буква- это "A" для активного (имеющего фокус) окна, или "I" для неактивного окна. Некоторые части (секции рамки и панели заголовка) также имеют символ, обозначающий, какая это часть. И в конце имеется ".xpm".

Вы можете использовать файлы XPM и PNG со всеми доступными особенностями, вроде прозрачности.
Таким образом Вы можете создавать частично прозрачные рамки, заголовки, кнопки и т.д.

Кнопки панели заголовка

Какие кнопки подготовлены в Вашей теме, определяет параметр TitleButtonsSupported в файле темы. TitleButtonsLeft и TitleButtonsRight (см. файл preferences) говорят, какие кнопки где располагаются (Вы можете использовать меньше кнопок, чем имеется под TitleButtonsSupported). Буквы показаны после названий кнопок:

  • close (x)

  • hide (h)

  • maximize и restore (m)

  • menuButton (s)

  • minimize (i)

  • rollup и rolldown (r)

  • depth (d)

и названия кнопок ставятся перед A.xpm или I.xpm.

Есть ещё один суффикс, только для изображений кнопок - "O". Он определяет, что это изображение кнопки, над которой проходит курсор мыши. Для того, чтобы это особенность работала, Вам нужно установить RolloverButtonsSupported=1. Пожалуйста, установите в Вашей теме TitleButtonsSupported, чтобы включить все имеющиеся у Вас кнопки, и не больше.

Каждая кнопка в pixmap-look теме имеет два вида: обычную и нажатую версии. Используемые изображения слегка необычно размещены, у них двойной размер по вертикали, нажатая версия находится под обычной. Так что если Вы используете кнопки размером 16х16, Ваши изображения будут размером 16х32 и будут содержать два изображения в одном.

Рамки

Изображения рамки окна это "frame" с последующими A или I и последующим определением местоположения.
Рамки диалоговых окон это "dframe". Местоположения обозначаются довольно логично и одинаково и для frame, и для dframe.

              ,TL --------- T -------- TR.
              |                          |
              L                          R
              |                          |
              `BL --------- B -------- BR'

(здесь это Top, Bottom, Left и Right)

Панель заголовка

Панель заголовка состоит из изображений, определённых как "title", затем A или I, затем местоположения.

Сейчас разрешается называть изображения панели заголовка так:

              ,-----------------------.
              J L  S  P   T   M  B  R Q
              `-----------------------'

здесь текст заголовка появляется поверх изображения T (здесь основные буквы Left, Space, Title, Middle, Bulk, Right). Space заполняет всё пространство между изображениями L и P, то же самое применимо для Bulk.

Вам нет необходимости определять все рамки и заголовки как изображения. Вместо этого Вы можете использовать определения цветов и размеров в файле default.theme. (Тогда Вы определяете границы и цвета границ для рамок и т.д.)

Обобщение границ и рамок

frame?TL

frame?TL

frame?T

frame?TR

frame?TR

frame?TL

TITLE BAR (см. ниже)

frame?TR

frame?L

frame?R

frame?BL

frame?BR

frame?BL

frame?BL

frame?B

frame?BR

frame?BR

Где каждый ? это или A, или I (для активного/неактивного).
Панель заголовка это:

title?J

menuButton

title?L

title?S
заполнение

title?P

title?T
заполнение + текст

title?M

title?B
заполнение

title?R

"кнопки"

title?Q

Здесь приведём пример возможной рамки и заголовка темы Infadel:

         example

Поддержка тем панелью задач

Панель задач IceWM также поддерживает темы. Вам необходимы четыре изображения, чтобы изменить весь вид панели задач (имена говорят сами за себя):

    taskbarbg.xpm
    taskbuttonbg.xpm
    taskbuttonactive.xpm
    taskbuttonminimized.xpm

Для кнопок рабочих мест:

    workspacebuttonbg.xpm
    workspacebuttonactive.xpm

Вы можете также изменить кнопку Start.

    start.xpm

("icewm.xpm" и "linux.xpm" в настоящее время устарели.)

Кнопки для списка окон и чтобы показать рабочий стол.

    windows.xpm
    desktop.xpm

Кнопка панели инструментов по умолчанию:

    toolbuttonbg.xpm

Все изображения для панели задач должны находиться в подкаталоге taskbar темы. Размер изображений не имеет значения, но Вам следует иметь в виду, что может быть использована только соответствующая часть. Например, для taskbarbg.xpm могут быть использованы только верхние 25 пикселов (высота панели задач) изображения при одинарной строке панели задач. Если изображение меньше требуемого размера, оно будет воспроизведено на всю область, которую оно должно заполнить.

start.xpm

taskbuttonbg.xpm

taskbuttonactive.xpm

taskbuttonminimized.xpm

taskbarbg.xpm

12:34

Часы

Вы можете настроить часы на использование изображений цифр. Если Вы хотите использовать изображения цифр, Вам необходимо положить:

    a.xpm
    colon.xpm
    dot.xpm
    m.xpm
    n0.xpm ... n9.xpm
    p.xpm
    slash.xpm
    space.xpm

в подкаталог ledclock вашей темы. Высота изображений должна подходить панели задач.

APM

Для APM состояния батареи также можно использовать изображения цифр. В дополнение к тем, что предназначены для часов, Вы можете определить

    percent.xpm

для символа "%". Расположите его также в ledclock.

Значки почтового ящика

Значки почтового ящика также поддерживают темы. Там пять состояний этого значка.

    errmail.xpm
    mail.xpm
    newmail.xpm
    nomail.xpm
    unreadmail.xpm

В настоящее время изображения должны быть 16х16 пикселов и сложены в подкаталог mailbox.

Кнопка сворачивания

Начиная с IceWM 1.2.17 панель задач имеет кнопку сворачивания. Эта кнопка поддерживается темами с 1.2.22. Используйте:

    collapse.xpm
    expand.xpm

и расположите их в подкаталоге taskbar.

Изменение размера панели задач

Высота панели задач может быть изменена двумя способами. Или увеличить, сделав "start.xpm" на панели задач выше (в 1.2.23 это сломано для TaskBarDoubleHeight=0), или изменив параметр SmallIconSize. Помните, что когда высота панели задач изменяется, не все части панели задач изменяются в соответствии (напр. мониторы).

Значки

Очень сложные темы могут также содержать свои собственные значки для папки, файла или других приложений в подкаталоге icons. По умолчанию используются значки 16х16 и 32х32. Они именуются примерно так:

    folder_16x16.xpm    для папки, размер значка 16x16 пикселов
    folder_32x32.xpm    для папки, размер значка 32x32 пикселов

В, например, файле меню тогда достаточно указать

    menu "Mail Agents" folder {
    }

и будет использован значок папки с подходящим размером и именем. IceWM также принимает файлы PNG в качестве значков, но Вы должны явным образом указать имя и/или путь (если Вы не добавили путь к значкам в параметр IconPath).

    menu Applications "/home/test/my icons/myfolder.png" {
    }

Размеры по умолчанию для значков могут быть установлены параметрами *IconSize.

Прочие Кнопки и фоновые Изображения

Активные и неактивные кнопки по умолчанию:

    buttonA.xpm
    buttonI.xpm

Изображения меню:

    menusel.xpm
    menusep.xpm
    menubg.xpm

Фоновые изображения для диалогов и списка окон:

    dialogbg.xpm
    listbg.xpm
    logoutbg.xpm
    switchbg.xpm

Курсоры

Имена указателей для изменения размера начинаются с size, за которым следует часть имени рамки (напр. sizeTR.xpm это указатель для изменения размера верхний правый (Top Right), то же самое применяется для B, BL, BR, L, R, T, TL). Имена указателей для прокрутки начинаются со scroll, за которым следуют L, R, U или D (от Left, Right, Up, Down). Курсоры располагаются в подкаталоге cursors.

Курсорами направления являются:

    left.xpm
    right.xpm
    move.xpm

Курсорами изменения размера являются:

    sizeR.xpm
    sizeTR.xpm
    sizeT.xpm
    sizeTL.xpm
    sizeL.xpm
    sizeBL.xpm
    sizeB.xpm
    sizeBR.xpm

Курсорами прокрутки являются:

    scrollL.xpm
    scrollR.xpm
    scrollU.xpm
    scrollD.xpm

Памятка как определять cursor hotspot.

    /* <width> <height> <colors> <chars-per-pixel> <x-hotspot> <y-hotspot> */
    "16 16 2 1 10 4",

Градиенты

Если Вы хотите использовать градиенты, Вам нужно скомпилировать IceWM с поддержкой градиентов. Тогда в файл определения темы Вы просто добавите строку наподобие такой:

    Gradients="menubg.xpm titleAS.xpm titleAT.xpm titleAB.xpm titleIS.xpm titleIT.xpm titleIB.xpm"

Изображения для определения градиентов могут содержать всего несколько пикселов. Они определяют, что за цвета будут использованы для создания градиентов. Например такое определение (увеличено 1:10):

             menubg

при использовании в качестве titleAS.xpm выглядит примерно так:

             titlebar

Вы можете использовать почти любую картинку, но Вам нужно иметь в виду, что это изображение будет размытым по, например, всей области S. (Это отличие от тем без градиентов - там S-изображения не являются размытыми, но располагаются множество раз в области S - это заполняет область наподобие повторяющегося шаблона).

Поддержка цветов темами

с помощью настроек цветов в предпочтениях Вы можете установить цвет почти всех частей IceWM. Вы можете установить цвета Обычным, Активным, Свёрнутым и Невидимым кнопкам и цвета текста для тех же самых категорий кнопок. (Ищите параметры Color*TaskBar в файле preferences).

Вы также можете установить цвета мониторов и фон + шрифт часов, цвета для рамок, панели задач, меню, всплывающих подсказок, диалогов, окон списков, полос прокрутки и рабочего стола. Вы можете совмещать в темах изображения и цвета как Вы хотите. Для уточнения деталей Вам нужно заглянуть в файл preferences IceWM.

Цвета указываются в шестнадцатиричном RGB формате наподобие ColorApm="rgb:12/89/ef". Начиная с 1.6.0 альфа-компонент для эффектов полупрозрачности может быть добавлен двумя способами. Или добавить процентное отношение непрозрачности между 1 и 100, заключённое в квадратные скобки наподобие ColorApm="[80]rgb:12/89/ef", или использовать шестнадцатиричный RGBA формат наподобие ColorApm="rgba:12/89/ef/cc".

default.theme

Файл default.theme это на самом деле ещё один файл предпочтений, просто подобие ICE-LIB/preferences. В нём есть три параметра, которые персонализируют его и находятся в начале файла default.theme:

        ThemeDescripton="описание темы"
        ThemeAuthor="детали контактов"
        License="тип лицензии"

и я призываю Вас сделать то же. Также будет полезно добавить некоторые комментарии (строки, начинающиеся с хэша, #) в начало файла, представляющие другие ресурсы (напр. фоновые изображения), которые, по Вашему мнению, хорошо сочетались бы с темой.

Ваш файл default.theme должен устанавливать все параметры, относящиеся к внешнему виду, независимо от того, думаете ли Вы, будут они использованы или нет. Он не должен вмешиваться в конфигурацию icewm, кроме случая, когда это исключительно важно для внешнего вида. Например, обычно не принято, чтобы тема решала, отображать ли Панель задач (обычно это настраивается в файле preferences), но тема, похожая на Windows95 для уверенности захочет показать панель задач одинарной высоты, установить вид часов, и т.д.

Если Вы пожелаете, можете включить в Вашу тему другие файлы .theme. Они появятся в дополнительном подменю Вашей темы (похожем на "Перезапуск" в дополнительном вложенном меню "Выход") и дадут пользователю несколько возможных вариантов темы.

В качестве примера Вы, разумеется, можете посмотреть файл preferences из пакета IceWM.

Проверка Вашей темы

Когда Вы будете готовы проверить Вашу тему в первый раз, Вам необходимо заставить icewm перестроить свои меню, чтобы Ваша новая тема появилась в подменю "Темы". Вы можете сделать это или перезапустив icewm, или заменив тему на иную, тогда Вы сможете изменить тему на Вашу. После изменения Вашего файла темы, Вы должны сделать то же самое.

Упаковка Вашей темы

Зайдите в ICE-LIB/themes и сделайте

        tar czvf themename.tar.gz themename

чтобы создать тарболл с Вашей темой.

Домом для тем IceWM в настоящее время является box-look.org.

Об этом документе

Руководство по созданию тем IceWM имеет copyright 1999-2000 ML Ray и 2003 Adam Pribyl, и может быть свободно воспроизведён без изменений, но с аннотациями. Последняя версия всегда должна быть на Вебсайте IceWM. Если Вы пожелаете улучшить этот документ, пожалуйста, отправьте сообщение на covex@lowlevel.cz.
Перевод данного документа: Dmitriy Khanzhin, jinn@altlinux.org, 2023.