====== Плагин foo_title ======
[[http://www.fi.muni.cz/~xplasil/foo_title.html|Оригинал]] (англ.)
**foo_title** - это мой компонент для foobar2000. При написании foo_title мною ставилась цель создать панель, которая бы всегда находилась в верхней части экрана (как окно winamp в режиме windowshade). Компонент поддерживает шкуры (скины) и написан на С# (и частично С++/CLI для связи с плеером, конечно). Поэтому Вам понадобится .NET Framework 2.0.
===== Скачать =====
[[https://sourceforge.net/project/showfiles.php?group_id=178279|Плагин можно взять здесь]]. Дистрибутив также включает 2 моих скина. Актуальная версия - 0.6 от 1 августа 2006 года.
[[http://www.hydrogenaudio.org/forums/index.php?showtopic=46619|Множество готовых шкур на HydrogenAudio]]
и на [[http://foobar2000.ru/forum/index.php/topic,557.0.html|Foobar2000.ru]]
===== Скриншоты =====
{{http://www.fi.muni.cz/~xplasil/images/foo_title/screen1.png}}
===== Что нового? =====
Во-первых, компонент был портирован на версию плеера 0.9 и он не будет работать со старыми релизами. Я переписал огромное количество кода.
* Прозрачность для шкур. Благодаря классу PerPixelAlphaForm Rui Godinho Lopes, компонент теперь поддерживает прозрачные шкуры с несколькими слоями
* Окно с настройками. Теперь Вы можете настроить все свойства в окне (Display->foo_title), хотя их пока не мого :)
* Перезагрузка шкуры без перезагрузки плеера. Без этого было плохо :-)
* Поддержка новых элементов. Обложка, прокручивающийся текст и кнопки
* Компонент стал проще и теперь ещё сильнее привязан к .NET. Это должно положительно сказаться на его стабильности
===== Изменения в версии 0.6 =====
* поддержка жирности и курсива для текста, переписан текстовый слой
* исправлена ошибка, когда компонент не загружался в случае запуска плеера не из своей директории (fooManagedWrapper)
* добавлена функция сохранения положения окна
* исправлена ошибка, связанная с показом обложек из папки, название которой включает символы юникода
* список шкур обновляется при открытии окна настроек
* исправлена ошибка с заполняющими изображениями, когда они лишь частично перекрывали панель
* теперь при нажатии на A-tab вы не увидите иконку окна
* добавлена опция показа панели (при свёрнутом главном окне, неактивном главном окне и постоянное отображение панели)
* используется интерфейс 32-разрядных Windows-приложений для отображения поверх всех окон
* теперь текст обновляется нажатии на кнопки "стоп" и "пауза"
* добавлена поддержка текста по умолчанию, отображающегося в момент, когда ни одна композиция не проигрывается
* появилась возможность устанавливать параметры выравнивания для прокручивающегося текста в том случае, когда его длина меньше размера слоя
* поддержка изменения прозрачности при наведении курсора мыши
* исправлены мелкие ошибки
Все изменения обратно совместимы и все Ваши шкуры будут работать и с версией 0.6.
===== Инсталляция =====
Инсталляция теперь предельно проста. Вам нужно переписать файлы из архива в папку с плеером: библиотеки должны находится в папке с компонентами, а шкуры с папке ''<папка плеера>\foo_title''.
===== Создание шкур =====
Шкуры foo_title состоят из одного XML файла и нескольких изображений. XML файл описывает, где и какие изображения отображать. Типы поддерживаемых изображений определяются .NET Framework - BMP, JPEG, PNG (для прозрачных изображений) и возможно некоторые другие.
Каждая шкура располагается в отдельной папке внутри папки ''foo_title''. В каждой папке должен находится файл skin.xml со следующей структурой.
==== Структура файла XML ====
Основной элемент - это шкура. У него есть следующие атрибуты:
* **author (автор)** - автор шкуры. Эта информация нигде не отображается, просто бывает интересно знать, чью шкуру ты используешь.
* **name (имя)** - название шкуры. Довольно бесполезный атрибут.
* **width (ширина)** - исходная ширина окна. Хотя ширина устанавливается автоматически.
* **height (длина)** - исходная длина окна, но она также устанавливается автоматически.
Таким образом начало XML файла должно выглядеть следующим образом:
Основной элемент содержит один или более слоев. Каждый слой может в свою очередь содержать еще несколько подслоев. Поэтому это не слой в обычном смысле, так как он может включать другие слои.
У каждого слоя есть элемент геометрии, который определяет позицию, размер и поведение слоя при изменении его размера.
Код одного слоя выглядит примерно так:
Атрибут "**name**" имеет информативный характер, в то время как атрибут "**type**" более важен. Он определяет способ отображения содержимого. Но об этом чуть позже.
==== Геометрия слоя ====
У каждого слоя есть своя геометрия, которая определяет его позицию и размер в пределах основного слоя. Существует 2 типа геометрии.
=== full ===
Слой занимает все пространство основного слоя. Тип "**full**" требует наличия элемента "**padding**" (заполнение) со следующими атрибутами: ''left'', ''top'', ''right'', ''bottom''. Эти атрибуты определяют позицию заполняемой зоны в пределах основного слоя. Например:
=== absolute (абсолютный) ===
Слой имеет постоянный абсолютный размер. У него есть позиционный подэлемент с аттрибутами ''x'', ''y'' и ''align'' (выравнивание). Атрибут ''align'' может принимать значения ''left'' и ''right''. Аттрибуты ''x'' и ''y'' задают позицию слоя по отношению к его выравниванию.
Например:
{{http://www.fi.muni.cz/~xplasil/images/foo_title/layers2.png}}
Например: тип геометрии красного слоя - "**full**", все атрибуты элемента ''padding'' установлены в "0", кроме ''right'', значение которого равно примерно ''60''. Он содержит другой слой с типом геометрии "''full''" (зеленого цвета) с большими значениями атрибутов ''top'' и ''right'' и маленькими ''left'' и ''bottom padding''. Если менять размер основного (белый) слоя, другие слои с типом геометрии "''full''" будут автоматически менять свои размеры. Синий слой имеет абсолютный тип геометрии ("''absolute''") и свой размер он менять не будет. Атрибут ''align'' для этого слоя установлен в значение "''right''".
==== Типы слоёв ====
Теперь, когда Вы поняли (я надеюсь), как располагать и изменять размер слоёв, мы посмотрим, что же они могут содержать.
Существуют следующие типы слоёв:
=== Слой "заполненный-изображениями" (fill-images) ===
Содержит 3 изображения, которые рисуются один за другим для более качественного изменения размера. Одна картинка для левой стороны, одна по центру и ещё одна справа.
Центральная картинка имеет логический атрибут "''repeat''" (повторять), который может принимать значения "''true''" или "''false''", в зависимости от того, хотите ли Вы, чтобы картинка повторялась или была растянута.
=== Слой с текстом (text) ===
Этот тип слоя отображает текст и код его выглядит примерно так:
foobar2000
атрибут "''spacing''" - это пространство между левой и правой надписями. Атрибут "''color''" задаёт цвет похожим на HTML способом. Первые 2 числа - это альфа слой. Как Вы могли заметить, текстовый слой использует коды плеера (title formatting) и это единственный слой, который может изменять размер шкуры. Это делается в соответствии с шириной текста. Геометрия слоя должна иметь значение "''full''" для того, чтобы работала эта функция.
Теперь Вы можете задавать параметры шрифта, его размера, курсива и жирности для обеих надписей и элемента "''contents''". Его содержимое принимается как текст по умолчанию и может быть переопределён при помощи элемента "''label''". В примере, указанном выше, левая надпись будет иметь следующие параметры: шрифт Tahoma, размер 8, курсив.
Слой "''contents''" может также иметь элемент defaultText, который отображается, когда проигрывание остановлено.
=== Слой "Прокручивающийся-текст" (scrolling-text) ===
Прокручивающийся текст - это почти то же самое, что и нормальный текст, кроме следующего:
* он может иметь только один элемент
* теперь Вы можете задать выравнивание текста, если он короче размера слоя. Просто впишите "''left''" или "''right''" или "''center''" в значение аттрибута ''position'' элемента "''label''".
* он не меняет размер шкуры
* у него есть ещё 2 дополнительных аттрибута: "''speed''", который задаёт скорость скриллинга (советую значение "50") и "''pause''" в мс, который определяет задержку, когда текст достигает одной из своих границ. Советую - "1000".
=== Слой с "абсолютными-изображениями" (absolute-images) ===
Отображает изображения растянутые на весь слой, одно накладывается на другое.
=== Слой с "анимацией" (animation) ===
Проигрывает анимацию растянутую на весь слой.
=== Слой с обложкой альбома (album-art) ===
Этот слой отображает обложку альбома. Каждый пользователь может задать имена файлов с обложками альбомов. Также существует один подэлемент, задающий картинку "''nocover''".
noAlbumArt.png
=== Слой с кнопками (buttons) ===
Этот слой создаёт кнопку с присваиваемой ей функцией. Её определяет подэлемент "''action''". Вы можете выбрать любую команду из главного меню плеера, такую как Play. Такие подэлементы как ''normalImg'', ''overImg'', ''downImg'' определяют изображения кнопок в нормальном состоянии, при наведении курсора и при нажатии.
Next
Вы можете использовать файлы XML моих шкур как пособие и "почву" для Ваших собственных шкур.
~~DISCUSSION~~