Help:Howto/Разработка скинов для Modern Contact List: Difference between revisions
Dart Raiden (talk | contribs) |
Dart Raiden (talk | contribs) |
||
Line 82: | Line 82: | ||
=== Описание объектов === | === Описание объектов === | ||
Скин состоит из нескольких частей. Первая из них описывает объекты. Объект описывается следующим образом: | |||
''$имя_объекта=sGlyph,тип_объекта,параметры,…'' | ''$имя_объекта=sGlyph,тип_объекта,параметры,…'' |
Revision as of 14:48, 28 July 2018
Основные понятия
В основу скин-движка положены следующие определения и понятия:
- объект — элемент скина. Все объекты скина создаются при загрузке модуля. Объект описывает что и каким образом необходимо нарисовать на соответствующий запрос.
- глиф (glyph) — некоторый рисунок. В настоящий момент поддерживаются форматы BMP, JPG и PNG (c прозрачностью). Размеры глифа определяются размерами рисунка. Изображение глифа загружается в память только при первой попытке нарисовать его и остаётся в памяти до выгрузки модуля или загрузки нового скина.
- правило — строка с условиями отбора объекта.
- запрос — требование нарисовать соответствующий объект, который удовлетворяет запрашиваемой строке в соответствии с правилами в определённом месте и с указанными размерами.
Алгоритм работы
Принцип работы следующий:
- При необходимости нарисовать некоторый объект окна, модуль формирует запрос. Запрос содержит координаты прямоугольника, в котором необходимо нарисовать объект. Но наиболее важным параметром является «строка запроса».
- Получив запрос, движок ищет в списке первое правило, под которое подойдёт переданная строка запроса и выбирает соответствующий найденному правилу объект.
- Если найденный объект относится к типу «сплошная заливка» то в ответ на запрос указанный рисунок заполняется соответствующим цветом и прозрачностью. Если же объект является глифом, то прямоугольник заполняется трансформированным по размерам до размеров требуемого прямоугольника глифом.
Правила и строки запросов, принцип отбора объектов
Правило состоит из следующих частей:
- Порядковый номер правила
- Имя соответствующего правилу объекта
- Набор параметров правила разделённые запятыми
Каждый параметр состоит из
- имени параметра
- условия (соответствует (=) и не соответствует (^)).
- проверяемого значения параметра
Строка запроса имеет те же части, что и правила, за исключением порядкового номера.
Строка запроса и правило считаются подходящими друг другу если:
- Все параметры правила есть в запросе.
- Все значения параметров правила с условием «соответствует (=)» соответствуют значениям этих параметров в запросе, а также все значения параметров правила с условием «не соответствует (^)» не соответствуют значениям этих параметров в запросе.
Значение параметра правила может быть задано в виде маски содержащей символы: «*» — любое количество (в том числе и отсутствие) любых символов и «?» — один любой символ. Длина имён параметров и значений не могут превышать 24 символа. Значения не могут содержать знак «запятая» (заменяется на «точка»). Имена параметров и их значения чувствительны к регистру букв. Имя первого параметра не указывается и всегда равно «Module».
Масштабирование (трансформация) глифов
Рассмотрим следующий пример. Необходимо нарисовать глиф размером 70х70 в прямоугольнике размером 100х100. Зададим ширину четырех полей для глифа: лево, верх, право и низ.
Эти поля делят рисунок глифа на 9 частей:
- 4 угла
- 4 края
- центр
При трансформации:
- Угловые части глифа рисуются в прямоугольнике назначения «как есть» без изменений размеров.
- Краевые части рисуются масштабированными в соответствии с заданным режимом вдоль своего края. Перпендикулярный к краю размер не изменяется.
- Центр масштабируется по обоим направлениям.
После трансформации (режим StretchBoth):
Режимов трансформации четыре:
- StretchBoth – растянуть по обоим направлениям.
- TileHorz – мозаика по горизонтали, растянуть по вертикали.
- TileVert – мозаика по вертикали, растянуть по горизонтали.
- TileBoth – мозаика по обоим направлениям.
Формат скина
Скин представляет собой совокупность файла описания скина (.msf) и папки с необходимыми графическими ресурсами. Имя папки должно быть таким же, как и имя файла описателя без расширения. Внутри файла описателя ссылки на графические ресурсы идут без указания путей.
Файл описатель имеет структуру полностью аналогичную ini файлам. Все описания могут быть напрямую импортированы в базу. Формат файла следующий:
[имя_секции_базы данных] ; комментарий ;комментарий КлючСекции=#Значение КлючСекции2=#Значение2
Здесь вместо знака «#» подразумевается указание одного из типов значения ключа:
- «b» - BYTE – один байт
- «w» - WORD – слово, два байта
- «d» - DWORD – двойное слово, четыре байта
- «s» - STRING – произвольная текстовая строка
Все данные об объектах скина хранятся в секции базы данных [ModernSkin] в ключах строкового типа.
Описание объектов
Скин состоит из нескольких частей. Первая из них описывает объекты. Объект описывается следующим образом:
$имя_объекта=sGlyph,тип_объекта,параметры,…
- имя_объкта – собственно имя объекта, используемое при ссылке из правил.
- тип_объекта – один из типов Image или Solid
- параметры,… – перечень параметров порядок которых определяется в зависимости от типа объекта:
для типа Solid: $имя_объекта=sGlyph,Solid,RedValue,GreenValue,BlueValue,AlphaValue
для типа Image: $имя_объекта=sGlyph,Image,File_Name,Fit_Mode,Left,Top,Right,Bottom,AlphaValue
где : RedValue, GreenValue, BlueValue, AlphaValue – интенсивности соответственно красного, Зеленого, Синего и канала прозрачности.
File_Name – имя файла рисунка с расширением, без пути, сам рисунок должен находится в одноименной с описателем папке.
Fit_Mode – один из режимов трансформации: StretchBoth, TileHorz, TileVert, TileBoth.
Left, Top, Right, Bottom – поля трансформации.
Примеры:
$window=sGlyph,Image,back.bmp,TileBoth,1,1,1,1,150
$closed_miranda_group=sGlyph,Solid,0,0,255,200
Описание правил
Вторая часть описывает правила. Правило описывается следующим образом:
@номер_правила=s$имя_объекта:знач_парам_Module,имя_парам=значение,имя_парам^значение …
Здесь: номер_правила – число. Номера правил должны начинаться с 0 и идти без пропусков.
Примеры:
@0=s$window:Main,ID=Background
@1=s$closed_miranda_group:CL,ID=Row,Type=Group,Open^True,Name=Mir*a*
Соответственно объект $window (рисунок back.bmp) будет нарисован если строка запроса будет содержать первым параметром «Main» и значение параметра «ID» будет равно «Background».
Объект $closed_miranda_group (заливка синим с прозрачностью 200) будет нарисован если зарос будет содержать первый параметр «CL», «ID» равным «Row», «Type» равным «Group», параметр «Open» НЕ равным «True» и параметр «Name» подходящим под маску «Mir*a*» (например Miranda-NG).
Описание кнопок
Третья часть описывает кнопки
; Format is (Push type): #name=sPush,ServiceNameToCall,fromLeft,fromTop,fromRight,fromBottom,TopLeftCornerRelativeTo,BottomRightCornerRelativeTo,MinWindowWidth,MinWindowHeigh,HintText
Таблица имен и значений параметров формируемых модулем
Параметр | Допустимые значения | Описание | |
---|---|---|---|
Module | Main | Основные объекты окна | |
ID | Background
StatusBar FrameCaption |
Фон окна
Фон статусной строки Фон заголовка фрейма | |
ID | ScrollBar | Полоса прокрутки | |
Part | Back
UpLineButton |
Элементы полосы прокрутки: фон, кнопки вверх и вниз, ползунок | |
DownLineButton
Thumb |
|||
Module | CL | Объекты списка | |
ID | Row | Модуль формирует запрос на рисование каждой строки списка контактов с ключом ID=Row | |
Type | Group
Contact MetaContact SubContact Divider Info |
Тип строки списка контактов, группа, контакт, мета- или суб-контакт, разделитель отключенных или информационный контакт (например «все контакты» на настройке «Игнорировать») | |
GroupPos
SubPos |
First
First-Single Middle Last |
Положение группы/контакта в родительской группе.
Для суб-контакта: GroupPos положение родительского мета- контата в группе, SubPos положене суб-контакта в мета-контакте | |
Open
Selected Hot Odd |
True
False |
Развернутость, выбраннось, подсвеченность, нечетность строки | |
Index
Indent |
Number | Номер строки в списке
Уровень вложения | |
Status | OFFLINE
ONLINE … |
Статус контакта | |
Protocol
Name GroupName |
text | Имена протокола, текст строки и имя родительской группы (запятая заменяется на точку). | |
ID | GreyAlternate
Selection HotTracking |
После запроса на рисование фона под строкой идет дополнительный запрос на отрисовку: Нечетности, Выделения и Подсветки. | |
Module | MButton | Модуль кнопок | |
ID | text | Имя кнопки (без знака #) | |
Down
Hovered |
0
1 |
Кнопка может быть нажата, и подсвечена |