Help:Howto/Разработка скинов для Modern Contact List: Difference between revisions
Dart Raiden (talk | contribs) |
Dart Raiden (talk | contribs) No edit summary |
||
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Important|{{Todo|}} | {{TNT|Important|{{Todo|}} Некоторая информация может оказаться устаревшей.}} | ||
== Основные понятия == | == Основные понятия == | ||
Line 82: | Line 82: | ||
=== Описание объектов === | === Описание объектов === | ||
Скин состоит из нескольких частей. Первая из них описывает объекты. Объект описывается следующим образом: | |||
''$имя_объекта=sGlyph,тип_объекта,параметры,…'' | ''$имя_объекта=sGlyph,тип_объекта,параметры,…'' | ||
* имя_объкта – собственно имя объекта, используемое при ссылке из правил | * имя_объкта – собственно имя объекта, используемое при ссылке из правил | ||
* тип_объекта – один из типов ''Image'' или ''Solid'' | * тип_объекта – один из типов ''Image'' или ''Solid'' | ||
* параметры,… – перечень параметров порядок которых определяется в зависимости от типа объекта: | * параметры,… – перечень параметров порядок которых определяется в зависимости от типа объекта: | ||
для типа '''Solid''': | для типа '''Solid''': | ||
<br> | |||
''$имя_объекта=sGlyph,'''Solid''',RedValue,GreenValue,BlueValue,AlphaValue'' | ''$имя_объекта=sGlyph,'''Solid''',RedValue,GreenValue,BlueValue,AlphaValue'' | ||
для типа '''Image''': | для типа '''Image''': | ||
<br> | |||
''$имя_объекта=sGlyph,'''Image''',File_Name,Fit_Mode,Left,Top,Right,Bottom,AlphaValue'' | ''$имя_объекта=sGlyph,'''Image''',File_Name,Fit_Mode,Left,Top,Right,Bottom,AlphaValue'' | ||
где | где RedValue, GreenValue, BlueValue, AlphaValue – интенсивности соответственно красного, зеленого, синего и канала прозрачности. | ||
<br> | |||
File_Name – имя файла рисунка с расширением, без пути, сам рисунок должен находится в одноименной с описателем папке. | File_Name – имя файла рисунка с расширением, без пути, сам рисунок должен находится в одноименной с описателем папке. | ||
<br> | |||
Fit_Mode – один из режимов трансформации: StretchBoth, TileHorz, TileVert, TileBoth. | Fit_Mode – один из режимов трансформации: StretchBoth, TileHorz, TileVert, TileBoth. | ||
<br> | |||
Left, Top, Right, Bottom – поля трансформации. | Left, Top, Right, Bottom – поля трансформации. | ||
Примеры: | Примеры: | ||
<br> | |||
''$window=sGlyph,Image,back.bmp,TileBoth,1,1,1,1,150'' | ''$window=sGlyph,Image,back.bmp,TileBoth,1,1,1,1,150'' | ||
<br> | |||
''$closed_miranda_group=sGlyph,Solid,0,0,255,200'' | ''$closed_miranda_group=sGlyph,Solid,0,0,255,200'' | ||
Line 118: | Line 120: | ||
Примеры: | Примеры: | ||
<br> | |||
''@0=s$window:Main,ID=Background'' | ''@0=s$window:Main,ID=Background'' | ||
<br> | |||
''@1=s$closed_miranda_group:CL,ID=Row,Type=Group,Open^True,Name=Mir*a*'' | ''@1=s$closed_miranda_group:CL,ID=Row,Type=Group,Open^True,Name=Mir*a*'' | ||
Соответственно объект ''$window'' (рисунок back.bmp) будет нарисован если строка запроса будет содержать первым параметром ''«Main»'' и значение параметра ''«ID»'' будет равно ''«Background»''. | Соответственно объект ''$window'' (рисунок back.bmp) будет нарисован если строка запроса будет содержать первым параметром ''«Main»'' и значение параметра ''«ID»'' будет равно ''«Background»''. | ||
Объект ''$closed_miranda_group'' (заливка синим с прозрачностью 200) будет нарисован если зарос будет содержать первый параметр ''«CL»'', ''«ID»'' равным ''«Row»'', ''«Type»'' равным ''«Group»'', параметр ''«Open»'' НЕ равным ''«True»'' и параметр ''«Name»'' подходящим под маску ''«Mir*a*»'' (например | Объект ''$closed_miranda_group'' (заливка синим с прозрачностью 200) будет нарисован если зарос будет содержать первый параметр ''«CL»'', ''«ID»'' равным ''«Row»'', ''«Type»'' равным ''«Group»'', параметр ''«Open»'' НЕ равным ''«True»'' и параметр ''«Name»'' подходящим под маску ''«Mir*a*»'' (например «Miranda-NG»). | ||
=== Описание кнопок === | === Описание кнопок === | ||
Line 191: | Line 193: | ||
Info | Info | ||
|Тип строки списка контактов, группа, контакт, мета- или | |Тип строки списка контактов, группа, контакт, мета- или субконтакт, разделитель отключенных или информационный контакт (например «все контакты» на настройке «Игнорировать») | ||
|- | |- | ||
| | | | ||
Line 203: | Line 205: | ||
Last | Last | ||
|Положение группы/контакта в родительской группе. | |Положение группы/контакта в родительской группе. | ||
Для | Для субконтакта: GroupPos — положение родительского метаконтата в группе, SubPos — положение субконтакта в метаконтакте | ||
|- | |- | ||
| | | | ||
Line 214: | Line 216: | ||
|True | |True | ||
False | False | ||
|Развернутость, выбраннось, подсвеченность, | |Развернутость, выбраннось, подсвеченность, нечётность строки | ||
|- | |- | ||
| | | | ||
Line 245: | Line 247: | ||
HotTracking | HotTracking | ||
|После запроса на рисование фона под строкой идет дополнительный запрос на отрисовку: | |После запроса на рисование фона под строкой идет дополнительный запрос на отрисовку: нечетности, выделения и подсветки. | ||
|- | |- | ||
| colspan="2" |Module | | colspan="2" |Module | ||
Line 261: | Line 263: | ||
|0 | |0 | ||
1 | 1 | ||
|Кнопка может быть нажата | |Кнопка может быть нажата и подсвечена | ||
|} | |} | ||
[[Category: Howto]] | [[Category: Howto]] |
Latest revision as of 23:07, 14 December 2019
Основные понятия
В основу скин-движка положены следующие определения и понятия:
- объект — элемент скина. Все объекты скина создаются при загрузке модуля. Объект описывает что и каким образом необходимо нарисовать на соответствующий запрос.
- глиф (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 |
Кнопка может быть нажата и подсвечена |