Merge svn changes up to r28366
[mplayer.git] / DOCS / xml / ru / skin.xml
blobbf64804894b974251a2c95e9b94487a5c730024d
1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- synced with r21612 -->
3 <appendix id="skin">
4 <title>Формат скинов <application>MPlayer</application></title>
6 <sect1 id="skin-overview">
7 <title>Обзор</title>
9 <para>
10 На самом деле с форматом скинов уже нет необходимости что-либо делать, но вам
11 следует знать, что <application>MPlayer</application> 
12 <emphasis role="bold">не имеет</emphasis> встроенного скина, так что 
13 <emphasis role="bold">как минимум один скин должен быть установлен, для 
14 возможности использовать GUI.</emphasis>
15 </para>
17 <!-- ********** -->
19 <sect2 id="skin-overview-directories">
20 <title>Каталоги</title>
21 <para>
22 Скины ищутся в следующих каталогах (по порядку):
23 <orderedlist>
24 <listitem><para>
25   <filename class="directory">$(DATADIR)/skins/</filename>
26 </para></listitem>
27 <listitem><para>
28   <filename class="directory">$(PREFIX)/share/mplayer/skins/</filename>
29 </para></listitem>
30 <listitem><para>
31   <filename class="directory">~/.mplayer/skins/</filename>
32 </para></listitem>
33 </orderedlist>
34 </para>
36 <para>
37 Имейте в виду, что первый путь может меняться в соответствии с конфигурацией
38 <application>MPlayer</application> (смотрите аргументы скрипта
39 <command>configure</command> <option>--prefix</option> и <option>--datadir</option>).
40 </para>
42 <para>
43 Каждый скин устанавливается в его собственный подкаталог, в одном из указанных выше
44 каталогов, например:
45 <screen>$(PREFIX)/share/mplayer/skins/default/</screen>
46 </para>
47 </sect2>
49 <!-- ********** -->
51 <sect2 id="skin-overview-formats">
52 <title>Форматы изображений</title>
53 <para>Изображениями должны быть truecolor (24 или 32 бит/пиксел) PNG.</para>
54 <para>
55 В главном окне и полосе воспроизведения (смотрите ниже) можно использовать
56 изображения с 'прозрачностью': Области, заполненные цветом #FF00FF (magenta) полностью
57 прозрачны при просмотре программой <application>MPlayer</application>. Это значит, что
58 если ваш X сервер поддерживает расширение XShape, вы сможете получить даже 
59 окна произвольной формы.
60 </para>
61 </sect2>
63 <sect2 id="skin-overview-components">
64 <title>Компоненты скина</title>
65 <para>
66 Скины имеют достаточно свободный формат (в отличие,например, от скинов
67 <application>Winamp</application>/<application>XMMS</application>,
68 имеющих формат фиксированный), так что зависит исключительно от вас, выйдет ли
69 у вас что-то грандиозное.
70 </para>
72 <para>
73 В данный момент могут быть оформлены четыре окна: 
74 <link linkend="skin-file-main">главное окно</link>, 
75 <link linkend="skin-file-subwindow">вспомогательное окно</link>, 
76 <link linkend="skin-file-main">полоса воспроизведения</link>, and the
77 <link linkend="skin-file-menu">меню со скинами</link> (активирующееся правым щелчком
78 мыши).
80 <itemizedlist>
81 <listitem>
82   <para>
83   <emphasis role="bold">Главное окно</emphasis> и/или 
84   <emphasis role="bold">полоса воспроизведения</emphasis> - те, через которые вы
85   управляете <application>MPlayer</application>. Фон окна - это изображение.
86   Различные элементы могут (и должны) размещаться в окне: 
87   <emphasis>кнопки</emphasis>,   <emphasis>ползунки</emphasis> и 
88   <emphasis>надписи</emphasis>.
89   Для каждого элемента должен быть задан размер и положение.
90   </para>
91   
92   <para>
93   <emphasis role="bold">Кнопка</emphasis> имеет три состояния (нажата, отпущена,
94   отключена), таким образом, ее изображение должно быть разделено вертикально на три части. 
95   Смотрите элемент <link linkend="skin-button">кнопка</link> для подробностей.
96   </para>
97   
98   <para>
99   <emphasis role="bold">Ползунок</emphasis> (в основном используется для полосы перемещения
100   и управления громкостью/балансом) может иметь любое количество положений, задаваемых делением
101   его изображения на различные части одна под другой. Смотрите
102   <link linkend="skin-hpotmeter">hpotmeter</link> и
103   <link linkend="skin-potmeter">potmeter</link> для подробностей.
104   </para>
105   
106   <para>
107   <emphasis role="bold">Надписи</emphasis> чуть особеннее: Символы, необходимые для их
108   отрисовки, берутся из графического файла, и задаются
109   <link linkend="skin-fonts">файлом описания шрифта</link>.
110   Последний - это текстовый файл, указывающий x,y положения и размер каждого символа 
111   в файле с изображением (файл изображения и файл описания шрифта 
112   <emphasis>вместе</emphasis> формируют шрифт). Смотрите 
113   <link linkend="skin-dlabel">dlabel</link>
114   и <link linkend="skin-slabel">slabel</link> для подробностей.
115   </para>
117   <note><para>Все изображения могут быть полностью прозрачными, как описано в разделе, 
118   посвященном <link linkend="skin-overview-formats">форматам изображений</link>. Если X 
119   сервер не поддерживает расширение XShape, части, помеченные как прозрачные, будут черными.
120   Если вам нравится использовать эту возможность, ширина фона главного окна должна 
121   делиться на 8.
122   </para></note>
123 </listitem>
125 <listitem><para>
126   <emphasis role="bold">Вспомогательное окно</emphasis>  - это то, где появляется фильм. 
127   Оно может отображать указанную картинку, если  никакого фильма не загружено (пустое окно 
128   немного надоедает :-)) <emphasis role="bold">Замечание:</emphasis> прозрачность здесь
129   <emphasis role="bold">не допускается</emphasis>.
130 </para></listitem>
132 <listitem>
133   <para>
134   <emphasis role="bold">Меню со скинами</emphasis> - всего лишь способ управлять 
135   <application>MPlayer</application> в понятиях элементов меню. Для меню требуются 
136   два изображения: одно из них - основное, показывает меню в обычном режиме,
137   другое используется для отображения выбранных элементов. Когда появляется меню, 
138   отображается первое. Если вы перемещаете мышь над элементами меню,
139   выбранный элемент копируется из второго изображения поверх элемента меню под указателем мыши
140   (второе изображение никогда не отображается целиком).
141   </para>
142   <para>
143   Элемент меню определяется его позицией и размером изображения (смотрите раздел,
144   посвященный <link linkend="skin-file-menu">меню со скинами</link> для подробностей).
145   </para>
146 </listitem>
147 </itemizedlist>
148 </para>
150 <para>
151 Важная вещь, не упомянутая выше: Чтобы работали кнопки, ползунки и элементы меню,
152 <application>MPlayer</application> должен знать, что делать, если на них 
153 щелкнули мышью. Это делается при помощи <link linkend="skin-gui">сообщений</link>
154 (событий). Для этих элементов вы должны определить сообщения, генерируемые, когда
155 на них щелкают мышью.
156 </para>
157 </sect2>
159 <!-- ********** -->
161 <sect2 id="skin-files">
162 <title>Файлы</title>
163 <para>
164 Вам нужны следующие файлы для создания скина:
165 <itemizedlist>
166 <listitem><para>
167   Файл конфигурации, называющийся <link linkend="skin-file">skin</link> говорит
168   <application>MPlayer</application> как совместить разные части скина воедино,
169   и что делать, если производится щелчок где-нибудь в окне.
170 </para></listitem>
171 <listitem><para>
172   Фоновое изображение главного окна.
173 </para></listitem>
174 <listitem><para>
175   Изображения элементов главного окна (включая один или более файлов описания шрифтов, 
176   необходимых для отрисовки надписей.
177 </para></listitem>
178 <listitem><para>
179   Изображение, показываемое во вспомогательном окне (необязательно).
180 </para></listitem>
181 <listitem><para>
182   Два изображения для меню со скинами (нужны, только если вы хотите создавать меню).
183 </para></listitem>
184 </itemizedlist>
185   Все файлы, за исключением skin, могут быть названы так, как вам захочется
186   (но заметьте, что файлы описания шрифтов должны иметь расширение 
187   a <filename>.fnt</filename>).
188 </para>
189 </sect2>
190 </sect1>
193 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
196 <sect1 id="skin-file">
197 <title>Файл skin</title>
198 <para>
199 Как описано выше, это файл конфигурации скина. он строчно-орентирован:
200 строки комментариев начинаются с символа '<literal>;</literal>' в начале 
201 строки (только пробелы и табуляция допускается перед символом '<literal>;</literal>').
202 </para>
204 <para>
205 Файл создается из разделов. Каждый описывает скин для приложения и 
206 имеет следующую форму:
207 <programlisting>
208 section = <replaceable>название раздела</replaceable>
213 </programlisting>
214 </para>
216 <para>
217 В данный момент приложение одно, так что вам потребуется только один раздел: его название 
218 <emphasis role="bold">movieplayer</emphasis>.
219 </para>
221 <para>
222 В пределах раздела каждое окно описывается блоком следующей структуры:
223 <programlisting>
224 window = <replaceable>название окна</replaceable>
229 </programlisting>
230 </para>
232 <para>
233 где  <replaceable>название окна</replaceable> может быть одной из этих строк:
234 <itemizedlist>
235 <listitem><para>
236   <emphasis role="bold">main</emphasis> - главное окно
237 </para></listitem>
238 <listitem><para>
239   <emphasis role="bold">sub</emphasis> - вспомогательное окно
240 </para></listitem>
241 <listitem><para>
242   <emphasis role="bold">menu</emphasis> - меню со скинами
243 </para></listitem>
244 <listitem><para>
245   <emphasis role="bold">playbar</emphasis> - полоса воспроизведения
246 </para></listitem>
247 </itemizedlist>
248 </para>
250 <para>
251 (Блоки sub и menu опциональные - необязательно создавать меню или оформлять вспомогательное
252 окно.)
253 </para>
255 <para>
256 В пределах блока window вы можете описать каждый элемент окна строкой в следующем формате:
257 <programlisting>item = parameter</programlisting>
258 Где <literal>item</literal> - это строка, определяющая тип элемента GUI,
259 <literal>parameter</literal> - числовое или текстовое значение (или список значений, разделенных
260 запятой).
261 </para>
263 <para>
264 Если собрать все вместе, файл целиком будет выглядеть примерно так:
265 <programlisting>
266 section = movieplayer
267   window = main
268   ; ... items for main window ...
269   end
271   window = sub
272   ; ... items for subwindow ...
273   end
275   window = menu
276   ; ... items for menu ...
277   end
279   window = playbar
280   ; ... items for playbar ...
281   end
283 </programlisting>
284 </para>
286 <para>
287 Название файла с изображением  должно указываться без лидирующих каталогов - 
288 изображения ищутся в каталоге <filename class="directory">skins</filename>.
289 Вы можете (но не обязаны) указать расширение файла. Если файл не существует,
290 <application>MPlayer</application> пытается загрузить файл
291 <filename>&lt;filename&gt;.&lt;ext&gt;</filename>, где <literal>png</literal>
292 и <literal>PNG</literal> пробуются вместо <filename>&lt;ext&gt;</filename>
293 (в этом порядке). Будет использоваться первый найденный файл.
294 </para>
296 <para>
297 Вот пример, чтобы было понятнее. Предположим вы имеете изображение, называющееся
298 <filename>main.png</filename>, которое используете для главного окна:
299 <programlisting>base = main, -1, -1</programlisting>
300 <application>MPlayer</application> пытается загрузить файлы <filename>main</filename>,
301 <filename>main.png</filename>, <filename>main.PNG</filename>.
302 </para>
304 <para>
305 И наконец несколько слов о позиционировании. Главное и вспомогательное окна могут
306 быть размещены в разных углах экрана указанием <literal>X</literal> и
307 <literal>Y</literal> координат. <literal>0</literal> -  это верхний и левый край,
308 <literal>-1</literal> - центр и <literal>-2</literal> - правый или нижний, как
309 указано на иллюстрации:
310 <informalfigure>
311 <screen>
312 (0, 0)----(-1, 0)----(-2, 0)
313   |          |          |
314   |          |          |
315 (0,-1)----(-1,-1)----(-2,-1)
316   |          |          |
317   |          |          |
318 (0,-2)----(-1,-2)----(-2,-2)
319 </screen>
320 </informalfigure>
321 </para>
323 <!-- ********** -->
325 <sect2 id="skin-file-main">
326 <title>Главное окно и полоса воспроизведения</title>
327 <para>
328 Ниже  - список элементов, которые можно указывать в
329 '<literal>window = main</literal>' ... '<literal>end</literal>',
330 и '<literal>window = playbar</literal>' ... '<literal>end</literal>'
331 блоках.
332 </para>
334 <variablelist>
335 <varlistentry>
336   <term><literal>
337   <anchor id="skin-main-base"/>base = image, X, Y
338   </literal></term>
339   <listitem>
340   <para>
341   Позволяет вам указать фоновое изображение, используемое в главном окне.  
342   Окно будет появляться в указанной <literal>X,Y</literal> позиции на экране и
343   иметь размер изображения.
344   </para>
345   <note><para>
346   Эти координаты пока не работают для окна отображения.
347   </para></note>
348   <warning><para>Прозрачные регионы в изображении (цвет #FF00FF) станут черными
349   на X сервере без расширения XShape. Ширина картинки должна делиться
350   на 8.</para></warning>
351   </listitem>
352 </varlistentry>
354 <varlistentry>
355   <term><literal>
356   <anchor id="skin-button"/>button = image, X, Y, width, height, message
357   </literal></term>
358   <listitem>
359   <para>
360   Размещает кнопку размера <literal>width</literal> * <literal>height</literal> на
361   позиции <literal>X,Y</literal>. Указанное сообщение <literal>message</literal> 
362   генерируется при щелчке на кнопку. Изображение <literal>image</literal>,
363   должно иметь три части одна ниже другой (в соответствии с возможными состояниями
364   кнопки), как здесь:
365   </para>
366   <informalfigure>
367   <screen>
368 +------------+
369 |  нажата    |
370 +------------+
371 |  отпущена  |
372 +------------+
373 |  отключена |
374 +------------+<!--
375   --></screen>
376   </informalfigure>
377   </listitem>
378 </varlistentry>
380 <varlistentry>
381   <term><literal>
382   <anchor id="skin-decoration"/>decoration = enable|disable
383   </literal></term>
384   <listitem>
385   <para>
386   Включает или выключает декорации главного окна, осуществляемые window manager . По-умолчанию 
387   <emphasis role="bold">disable</emphasis>.
388   </para>
389   <note><para>
390   Это не работает для окна отображения, в этом нет надобности.
391   </para></note>
392   </listitem>
393 </varlistentry>
395 <varlistentry>
396   <term><literal>
397   <anchor id="skin-hpotmeter"/>hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
398   </literal></term>
399   <listitem><para>
400   </para></listitem>
401 </varlistentry>
403 <varlistentry>
404   <term><literal>
405   <anchor id="skin-vpotmeter"/>vpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
406   </literal></term>
407   <listitem><para>
408   Размещает горизонтальный (hpotmeter) или вертикальный (vpotmeter) ползунок размера
409   <literal>width</literal> * <literal>height</literal> на позиции 
410   <literal>X,Y</literal>. Изображение может быть разделено на разные части для
411   указания различных положений ползунка (например, вы можете иметь регулятор для 
412   управления громкостью звука, изменяющийся с красного на зеленый при изменении его
413   уровня с минимального на максимальный.). <literal>hpotmeter</literal> может иметь
414   кнопку, которую можно таскать горизонтально. Параметры:
415   <itemizedlist>
416   <listitem><para>
417     <literal>button</literal> - изображение, используемое для 
418     кнопки (должно иметь три части одна под другой, как в случае 
419     <link linkend="skin-button">кнопки</link>)
420   </para></listitem>
421   <listitem><para>
422     <literal>bwidth</literal>, <literal>bheight</literal> - размер кнопки
423   </para></listitem>
424   <listitem><para>
425     <literal>phases</literal> - изображение, используемое для 
426     различных положений hpotmeter. Специальное значение <literal>NULL</literal>
427     может использоваться, если подобное изображение вам не нужно. Изображение
428     должно быть разделено вертикально на 
429     <literal>numphases</literal> частей, как указано ниже:
430     <informalfigure><screen>
431 +--------------+
432 | положение #1 |
433 +--------------+
434 | положение #2 |
435 +--------------+
436      ...
437 +--------------+
438 | положение #n |
439 +--------------+<!--
440     --></screen></informalfigure>
441   </para></listitem>
442   <listitem><para>
443     <literal>numphases</literal> - количество положений в изображении
444     <literal>phases</literal>
445   </para></listitem>
446   <listitem><para>
447     <literal>default</literal> - положение hpotmeter по-умолчанию
448     (в диапазоне от <literal>0</literal> до <literal>100</literal>)
449   </para></listitem>
450   <listitem><para>
451     <literal>X</literal>, <literal>Y</literal> - позиция hpotmeter
452     </para></listitem>
453   <listitem><para>
454     <literal>width</literal>, <literal>height</literal> - ширина и высота
455     <literal>hpotmeter</literal>
456   </para></listitem>
457   <listitem><para>
458     <literal>message</literal> - сообщение, генерируемое  при изменении значения
459     <literal>hpotmeter</literal>
460   </para></listitem>
461   </itemizedlist>
462   </para></listitem>
463 </varlistentry>
465 <varlistentry>
466   <term><literal>
467   <anchor id="skin-potmeter"/>potmeter = phases, numphases, default, X, Y, width, height, message
468   </literal></term>
469   <listitem><para>
470   <literal>hpotmeter</literal> без кнопки. 
471   (Я предполагаю, что это означает повернутый вокруг,
472   но он реагирует только на перетаскивание по горизонтали.) Для описания параметров смотрите 
473   <link linkend="skin-hpotmeter">hpotmeter</link>.
474   <literal>phases</literal> может быть равен <literal>NULL</literal>, но это совершенно 
475   бесполезно, поскольку вы не сможете определить в каком положении 
476   находится <literal>potmeter</literal>.
477   </para></listitem>
478 </varlistentry>
480 <varlistentry>
481   <term><literal>
482   <anchor id="skin-font"/>font = fontfile, fontid
483   </literal></term>
484   <listitem><para>
485   Определяет шрифт. <literal>fontfile</literal> - это название файла описания шрифта 
486   с расширением <filename>.fnt</filename> (не указывайте расширение здесь).
487   <literal>fontid</literal> используется для ссылки на шрифт 
488   (смотрите <link linkend="skin-dlabel">dlabel</link> и 
489   <link linkend="skin-slabel">slabel</link>). Может быть определено до 25 шрифтов.
490   </para></listitem>
491 </varlistentry>
493 <varlistentry>
494   <term><literal>
495   <anchor id="skin-slabel"/>slabel = X, Y, fontid, "text"
496   </literal></term>
497   <listitem><para>
498   Размещает  статическую метку на позиции <literal>X,Y</literal>. <literal>text</literal>
499   отображается, используя шрифт, определенный по <literal>fontid</literal>. 
500   Текст - просто обычная строка (<literal>$x</literal> переменные не работают), которая должна
501   быть заключена в двойные кавычки (но символ " не может быть частью текста). 
502   Метка отображается, используя шрифт определенный по <literal>fontid</literal>.
503   </para></listitem>
504 </varlistentry>
506 <varlistentry>
507   <term><literal>
508   <anchor id="skin-dlabel"/>dlabel = X, Y, length, align, fontid, "text"
509   </literal></term>
510   <listitem>
511   <para>
512   Размещает динамическую метку на позиции <literal>X,Y</literal>. Метка зовется 
513   динамической, потому что ее текст периодически обновляется. Максимальная длина 
514   метки задается параметром <literal>length</literal> (ее высота равна высоте символа).
515   Если отображаемый текст шире этого значения, он будет скроллироваться,
516   иначе он выравнивается в пределах указанного пространства в соответствии со
517   значением параметра 
518   <literal>align</literal>: <literal>0</literal> - вправо,
519   <literal>1</literal> - по центру, <literal>2</literal> - влево.
520   </para>
521   <para>
522   Отображаемый текст задается параметром <literal>text</literal>: Он должен быть
523   заключен в двойные кавычки (но символ " не может быть частью текста).
524   Метка отображается, используя шрифт, определяемый по <literal>fontid</literal>. 
525   Вы можете использовать следующие переменные в тексте:
526   </para>
528   <informaltable>
529   <tgroup cols="2">
530   <thead>
531     <row><entry>Переменная</entry><entry>Значение</entry></row>
532   </thead>
533   <tbody>
534   <row>
535     <entry>$1</entry>
536     <entry>время воспроизведения в формате <emphasis>чч:мм:сс</emphasis></entry>
537   </row>
538   <row>
539     <entry>$2</entry>
540     <entry>время воспроизведения в формате <emphasis>мммм:сс</emphasis></entry>
541   </row>
542   <row>
543     <entry>$3</entry>
544     <entry>время воспроизведения формате <emphasis>чч</emphasis>(часы)</entry>
545   </row>
546   <row>
547     <entry>$4</entry>
548     <entry>время воспроизведения в формате <emphasis>мм</emphasis>(минуты)</entry>
549   </row>
550   <row>
551     <entry>$5</entry>
552     <entry>время воспроизведения в формате <emphasis>сс</emphasis>(секунды)</entry>
553   </row>
554   <row>
555     <entry>$6</entry>
556     <entry>длительность фильма в формате <emphasis>чч:мм:сс</emphasis></entry>
557   </row>
558   <row>
559     <entry>$7</entry>
560     <entry>длительность фильма в формате <emphasis>мммм:сс</emphasis></entry>
561   </row>
562   <row>
563     <entry>$8</entry>
564     <entry>время воспроизведения формате <emphasis>ч:мм:сс</emphasis></entry>
565   </row>
566   <row>
567     <entry>$v</entry>
568     <entry>кромкость в формате <emphasis>xxx.xx</emphasis>%</entry>
569   </row>
570   <row>
571     <entry>$V</entry>
572     <entry>кромкость в формате <emphasis>xxx.xx</emphasis></entry>
573   </row>
574   <row>
575     <entry>$b</entry>
576     <entry>баланс в формате <emphasis>xxx.xx</emphasis>%</entry>
577   </row>
578   <row>
579     <entry>$B</entry>
580     <entry>баланс в формате <emphasis>xxx.xx</emphasis></entry>
581   </row>
582   <row>
583     <entry>$$</entry>
584     <entry>символ $</entry>
585   </row>
586   <row>
587     <entry>$a</entry>
588     <entry>символ ,соответствующий типу звука (нет: <literal>n</literal>,
589     моно: <literal>m</literal>, стерео: <literal>t</literal>)</entry>
590   </row>
591   <row>
592     <entry>$t</entry>
593     <entry>номер дорожки (в плейлисте)</entry>
594   </row>
595   <row>
596     <entry>$o</entry>
597     <entry>имя файла</entry>
598   </row>
599   <row>
600     <entry>$f</entry>
601     <entry>имя файла в нижнем регистре</entry>
602   </row>
603   <row>
604     <entry>$F</entry>
605     <entry>имя файла в верхнем регистре</entry>
606   </row>
607   <row>
608     <entry>$T</entry>
609     <entry>
610     символ, соответствующий типу потока (файл: <literal>f</literal>,
611     Video CD: <literal>v</literal>, DVD: <literal>d</literal>, 
612     URL: <literal>u</literal>)
613     </entry>
614   </row>
615   <row>
616     <entry>$p</entry>
617     <entry>
618     символ <keycap>p</keycap> (если фильм воспроизводится и шрифт имеет 
619     символ <keycap>p</keycap>)
620     </entry>
621   </row>
622   <row>
623     <entry>$s</entry>
624     <entry>
625     символ <keycap>s</keycap> (если фильм остановлен и шрифт имеет 
626     символ <keycap>s</keycap>)
627     </entry>
628   </row>
629   <row>
630     <entry>$e</entry>
631     <entry>
632     символ <keycap>e</keycap> (если фильм на паузе и шрифт имеет 
633     символ <keycap>e</keycap>)
634     </entry>
635   </row>
636   <row>
637     <entry>$x</entry>
638     <entry>ширина фильма</entry>
639   </row>
640   <row>
641     <entry>$y</entry>
642     <entry>высота фильма</entry>
643   </row>
644   <row>
645     <entry>$C</entry>
646     <entry>название используемого кодека</entry>
647   </row>
648   </tbody>
649   </tgroup>
650   </informaltable>
652   <note><para>
653   Переменные <literal>$a, $T, $p, $s</literal> и <literal>$e</literal> все
654   возвращают символы, которые должны быть отображены в качестве специальных значков
655   (например, <keycap>e</keycap> - для значка паузы, который обычно выглядит как ||). 
656   Вы должны иметь шрифт для обычных символов и отличающийся шрифт для значков.
657   Смотрите раздел о <link linkend="skin-fonts-symbols">значках</link>
658   для дополнительной информации.
659   </para></note>
660   </listitem>
661 </varlistentry>
662 </variablelist>
663 </sect2>
665 <!-- ********** -->
667 <sect2 id="skin-file-subwindow">
668 <title>Вспомогательное окно</title>
669 <para>
670 Следующие элементы могут быть использованы в блоке
671 '<literal>window = sub</literal>' . . . '<literal>end</literal>' .
672 </para>
674 <variablelist>
675 <varlistentry>
676   <term><literal>
677   <anchor id="skin-sub-base"/>base = image, X, Y, width, height
678   </literal></term>
679   <listitem><para>
680   Изображение, отображаемое в окне. Окно будет появляться в указанной позиции 
681   <literal>X,Y</literal> экрана (<literal>0,0</literal> - верхний левый угол). 
682   Вы можете указать <literal>-1</literal> для центра и <literal>-2</literal>
683   для правого (<literal>X</literal>) и нижнего (<literal>Y</literal>) края. 
684   Окно будет того же размера, что и изображение. <literal>width</literal> и 
685   <literal>height</literal> означают размер окна; они необязательны
686   (если отсутствуют, окно будет иметь те же размеры, что и изображение).
687   </para></listitem>
688 </varlistentry>
690 <varlistentry>
691   <term><literal>
692   <anchor id="skin-background"/>background = R, G, B
693   </literal></term>
694   <listitem><para>
695   Позволяет указать цвет фона. Это полезно, если изображение меньше окна. 
696   <literal>R</literal>, <literal>G</literal> и <literal>B</literal>
697   указывают красную, зеленую и синюю составляющие цвета (каждое из них -
698   десятичное число от 0 до 255).
699   </para></listitem>
700 </varlistentry>
701 </variablelist>
702 </sect2>
704 <!-- ********** -->
706 <sect2 id="skin-file-menu">
707 <title>Меню со скинами</title>
708 <para>
709 Как было описано выше, меню отображается при помощи двух картинок. Нормальные
710 элементы меню берутся из изображения, указанного элементом <literal>base</literal>,
711 в то время как выделенный в данный момент элемент берется  из изображения,
712 указанного элементом <literal>selected</literal>. Вы должны определить позицию и
713 размер каждого элемента меню.
714 </para>
716 <para>
717 Следующие элементы можно использовать в блоке 
718 '<literal>window = menu</literal>'. . .'<literal>end</literal>'.
719 </para>
721 <variablelist>
722 <varlistentry>
723   <term><literal>
724   <anchor id="skin-menu-base"/>base = image
725   </literal></term>
726   <listitem><para>
727   Изображение для нормальных элементов меню.
728   </para></listitem>
729 </varlistentry>
731 <varlistentry>
732   <term><literal>
733   <anchor id="skin-selected"/>selected = image
734   </literal></term>
735   <listitem><para>
736   Изображение, показывающее меню со всеми выделенными элементами.
737   </para></listitem>
738 </varlistentry>
740 <varlistentry>
741   <term><literal>
742   <anchor id="skin-menu"/>menu = X, Y, width, height, message
743   </literal></term>
744   <listitem><para>
745   Определяет позицию <literal>X,Y</literal> и размер элемента меню в изображении.
746   <literal>message</literal> - это сообщение, генерируемое, когда кнопка мыши будет отпущена 
747   над элементом меню.
748   </para></listitem>
749 </varlistentry>
750 </variablelist>
751 </sect2>
752 </sect1>
755 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
758 <sect1 id="skin-fonts">
759 <title>Шрифты</title>
760 <para>
761 Как описано в разделе, посвященному частям скина, шрифт определяется
762 изображением и файлом описания. Вы можете поместить символы в любое место изображения,
763 но будьте уверены, что их позиция и размер точно указаны в файле описания.
764 </para>
766 <para>
767 Файл описания шрифта (с расширением <filename>.fnt</filename>) может иметь комментарии,
768 начинающиеся с '<literal>;</literal>'. Файл должен иметь строку вида
769 <anchor id="skin-font-image"/>
770 <programlisting>image = <replaceable>image</replaceable></programlisting>,
771 где <literal><replaceable>image</replaceable></literal> - это название 
772 файла с изображением, используемым для шрифта (расширение указывать необязательно).
773 <anchor id="skin-font-char"/>
774 <programlisting>"char" = X, Y, width, height</programlisting>
775 Здесь <literal>X</literal> и <literal>Y</literal> указывают позицию символа 
776 <literal>char</literal> в изображении (<literal>0,0</literal> - верхний левый угол),
777 <literal>width</literal> и <literal>height</literal> - размеры символа в пикселах.
778 </para>
780 <para>
781 Этот пример определяет символы  A, B, C, используя <filename>font.png</filename>.
782 <programlisting>
783 ; Can be "font" instead of "font.png".
784 image = font.png
786 ; Three characters are enough for demonstration purposes :-)
787 "A" =  0,0, 7,13
788 "B" =  7,0, 7,13
789 "C" = 14,0, 7,13
790 </programlisting>
791 </para>
793 <!-- ********** -->
795 <sect2 id="skin-fonts-symbols">
796 <title>Значки</title>
798 <para>
799 Некоторые символы имеют специальное значение, когда возвращаются некоторыми переменными,
800 используемыми в <link linkend="skin-dlabel">dlabel</link>. Подразумевается, что эти символы
801 должны отображаться в виде значков, так для DVD потока можно отображать значок
802 красивого логотипа DVD вместо символа '<literal>d</literal>'.
803 </para>
804 <para>
805 Следующая таблица содержит список всех символов, которые могут использоваться для
806 отображения значков (и поэтому требуют другой шрифт).
807 </para>
809 <informaltable>
810 <tgroup cols="2">
811 <thead>
812   <row><entry>Символ</entry><entry>Значок</entry></row>
813 </thead>
814 <tbody>
815   <row><entry><keycap>p</keycap></entry><entry>воспроизведение</entry></row>
816   <row><entry><keycap>s</keycap></entry><entry>стоп</entry></row>
817   <row><entry><keycap>e</keycap></entry><entry>пауза</entry></row>
818   <row><entry><keycap>n</keycap></entry><entry>без звука</entry></row>
819   <row><entry><keycap>m</keycap></entry><entry>звук моно</entry></row>
820   <row><entry><keycap>t</keycap></entry><entry>звук стерео</entry></row>
821   <row><entry><keycap>f</keycap></entry><entry>файл</entry></row>
822   <row><entry><keycap>v</keycap></entry><entry>Video CD</entry></row>
823   <row><entry><keycap>d</keycap></entry><entry>DVD</entry></row>
824   <row><entry><keycap>u</keycap></entry><entry>URL</entry></row>
825 </tbody>
826 </tgroup>
827 </informaltable>
828 </sect2>
829 </sect1>
832 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
835 <sect1 id="skin-gui">
836 <title>GUI сообщения</title>
837 <para>
838 Это сообщения, которые могут генерироваться кнопками, ползунками и элементами меню.
839 </para>
841 <variablelist>
842 <title>Управление воспроизведением:</title>
843 <varlistentry>
844   <term><emphasis role="bold">evNext</emphasis></term>
845   <listitem><para>
846   Переход к следующему элементу списка воспроизведения.
847   </para></listitem>
848 </varlistentry>
850 <varlistentry>
851   <term><emphasis role="bold">evPause</emphasis></term>
852   <listitem><para>
853   Вместе с <literal>evPlaySwitchToPause</literal> формирует переключатель паузы.
854   Может быть использовано для общей кнопки воспроизведение/пауза. Оба сообщения
855   должны быть назначены кнопкам, находящимся практически в одной точке окна.
856   Это сообщение ставит воспроизведение на паузу и показывает изображение кнопки с
857   назначенным сообщением <literal>evPlaySwitchToPause</literal> 
858   (чтобы показать, что кнопка может быть нажата для продолжения воспроизведения).
859   </para></listitem>
860 </varlistentry>
862 <varlistentry>
863   <term><emphasis role="bold">evPlay</emphasis></term>
864   <listitem><para>
865   Старт воспроизведения.
866   </para></listitem>
867 </varlistentry>
869 <varlistentry>
870   <term><emphasis role="bold">evPlaySwitchToPause</emphasis></term>
871   <listitem><para>
872   Противоположность <literal>evPauseSwitchToPlay</literal>. Это сообщение 
873   запускает воспроизведение и показывает изображение кнопки с
874   назначенным сообщением <literal>evPauseSwitchToPlay</literal>
875   (чтобы показать, что кнопка может быть нажата для включения паузы).
876   </para></listitem>
877 </varlistentry>
879 <varlistentry>
880   <term><emphasis role="bold">evPrev</emphasis></term>
881   <listitem><para>
882   Переход к предыдущему элементу списка воспроизведения.
883   </para></listitem>
884 </varlistentry>
886 <varlistentry>
887   <term><emphasis role="bold">evStop</emphasis></term>
888   <listitem><para>
889   Останавливает воспроизведение.
890   </para></listitem>
891 </varlistentry>
892 </variablelist>
894 <variablelist>
895 <title>Перемещение:</title>
896 <varlistentry>
897   <term><emphasis role="bold">evBackward10sec</emphasis></term>
898   <listitem><para>
899   Перемещение назад на 10 секунд.
900   </para></listitem>
901 </varlistentry>
903 <varlistentry>
904   <term><emphasis role="bold">evBackward1min</emphasis></term>
905   <listitem><para>
906   Перемещение назад на 1 минуту.
907   </para></listitem>
908 </varlistentry>
910 <varlistentry>
911   <term><emphasis role="bold">evBackward10min</emphasis></term>
912   <listitem><para>
913   Перемещение назад на 10 минут.
914   </para></listitem>
915 </varlistentry>
917 <varlistentry>
918   <term><emphasis role="bold">evForward10sec</emphasis></term>
919   <listitem><para>
920   Перемещение вперед на 10 секунд.
921   </para></listitem>
922 </varlistentry>
924 <varlistentry>
925   <term><emphasis role="bold">evForward1min</emphasis></term>
926   <listitem><para>
927   Перемещение вперед на 1 минуту.
928   </para></listitem>
929 </varlistentry>
931 <varlistentry>
932   <term><emphasis role="bold">evForward10min</emphasis></term>
933   <listitem><para>
934   Перемещение вперед на 10 минут.
935   </para></listitem>
936 </varlistentry>
938 <varlistentry>
939   <term><emphasis role="bold">evSetMoviePosition</emphasis></term>
940   <listitem><para>
941   Перемещается к позиции (может использоваться ползунком; 
942   используется относительное (0-100%) положение ползунка).
943   </para></listitem>
944 </varlistentry>
945 </variablelist>
947 <variablelist>
948 <title>Управление видео:</title>
949 <varlistentry>
950   <term><emphasis role="bold">evHalfSize</emphasis></term>
951   <listitem><para>
952   Установить половинный размер окна.
953   </para></listitem>
954 </varlistentry>
955 <varlistentry>
956   <term><emphasis role="bold">evDoubleSize</emphasis></term>
957   <listitem><para>
958   Установить двойной размер окна.
959   </para></listitem>
960 </varlistentry>
961 <varlistentry>
962   <term><emphasis role="bold">evFullScreen</emphasis></term>
963   <listitem><para>
964   Включить/выключить полноэкранный режим.
965   </para></listitem>
966 </varlistentry>
967 <varlistentry>
968   <term><emphasis role="bold">evNormalSize</emphasis></term>
969   <listitem><para>
970   Установить нормальный размер окна.
971   </para></listitem>
972 </varlistentry>
973 </variablelist>
975 <variablelist>
976 <title>Управление звуком:</title>
977 <varlistentry>
978   <term><emphasis role="bold">evDecAudioBufDelay</emphasis></term>
979   <listitem><para>
980   Уменьшить задержку буфера звука.
981   </para></listitem>
982 </varlistentry>
984 <varlistentry>
985   <term><emphasis role="bold">evDecBalance</emphasis></term>
986   <listitem><para>
987   Уменьшить баланс.
988   </para></listitem>
989 </varlistentry>
991 <varlistentry>
992   <term><emphasis role="bold">evDecVolume</emphasis></term>
993   <listitem><para>
994   Уменьшить громкость.
995   </para></listitem>
996 </varlistentry>
998 <varlistentry>
999   <term><emphasis role="bold">evIncAudioBufDelay</emphasis></term>
1000   <listitem><para>
1001   Увеличить задержку буфера звука.
1002   </para></listitem>
1003 </varlistentry>
1005 <varlistentry>
1006   <term><emphasis role="bold">evIncBalance</emphasis></term>
1007   <listitem><para>
1008   Увеличить баланс.
1009   </para></listitem>
1010 </varlistentry>
1012 <varlistentry>
1013   <term><emphasis role="bold">evIncVolume</emphasis></term>
1014   <listitem><para>
1015   Увеличить громкость.
1016   </para></listitem>
1017 </varlistentry>
1019 <varlistentry>
1020   <term><emphasis role="bold">evMute</emphasis></term>
1021   <listitem><para>
1022   Выключить/включить звук.
1023   </para></listitem>
1024 </varlistentry>
1026 <varlistentry>
1027   <term><emphasis role="bold">evSetBalance</emphasis></term>
1028   <listitem><para>
1029   Установить баланс (может использоваться ползунком;
1030   используется относительное (0-100%) значение ползунка),
1031   </para></listitem>
1032 </varlistentry>
1034 <varlistentry>
1035   <term><emphasis role="bold">evSetVolume</emphasis></term>
1036   <listitem><para>
1037   Установить громкость (может использоваться ползунком;
1038   используется относительное (0-100%) значение ползунка),
1039   </para></listitem>
1040 </varlistentry>
1041 </variablelist>
1043 <variablelist>
1044 <title>Разное:</title>
1045 <varlistentry>
1046   <term><emphasis role="bold">evAbout</emphasis></term>
1047   <listitem><para>
1048   Открыть окно 'О программе'.
1049   </para></listitem>
1050 </varlistentry>
1052 <varlistentry>
1053   <term><emphasis role="bold">evDropSubtitle</emphasis></term>
1054   <listitem><para>
1055   Отключает субтитры, использующиеся в данный момент.
1056   </para></listitem>
1057 </varlistentry>
1059 <varlistentry>
1060   <term><emphasis role="bold">evEqualizer</emphasis></term>
1061   <listitem><para>
1062   Включает/выключает эквалайзер.
1063   </para></listitem>
1064 </varlistentry>
1066 <varlistentry>
1067   <term><emphasis role="bold">evExit</emphasis></term>
1068   <listitem><para>
1069   Выход из программы.
1070   </para></listitem>
1071 </varlistentry>
1073 <varlistentry>
1074   <term><emphasis role="bold">evIconify</emphasis></term>
1075   <listitem><para>
1076   Сворачивает окно в иконку.
1077   </para></listitem>
1078 </varlistentry>
1080 <varlistentry>
1081   <term><emphasis role="bold">evLoad</emphasis></term>
1082   <listitem><para>
1083   Открывает файл (открывая окно навигации, в котором вы можете выбрать файл).
1084   </para></listitem>
1085 </varlistentry>
1087 <varlistentry>
1088   <term><emphasis role="bold">evLoadPlay</emphasis></term>
1089   <listitem><para>
1090   Делает то же, что и <literal>evLoad</literal>, но запускает вопроизведение файла 
1091   автоматически после его загрузки.
1092   </para></listitem>
1093 </varlistentry>
1095 <varlistentry>
1096   <term><emphasis role="bold">evLoadSubtitle</emphasis></term>
1097   <listitem><para>
1098   Загружает файл с субтитрами (с диалогом выбора файла).
1099   </para></listitem>
1100 </varlistentry>
1102 <varlistentry>
1103   <term><emphasis role="bold">evLoadAudioFile</emphasis></term>
1104   <listitem><para>
1105   Загружает звуковой файл (с диалогом выбора файла).
1106   </para></listitem>
1107 </varlistentry>
1109 <varlistentry>
1110   <term><emphasis role="bold">evNone</emphasis></term>
1111   <listitem><para>
1112   Пустое сообщение, не имеет действий (за исключением, возможно, Subversion версий :-)).
1113   </para></listitem>
1114 </varlistentry>
1116 <varlistentry>
1117   <term><emphasis role="bold">evPlaylist</emphasis></term>
1118   <listitem><para>
1119   Открывае/закрывает окно со списком воспроизведения.
1120   </para></listitem>
1121 </varlistentry>
1123 <varlistentry>
1124   <term><emphasis role="bold">evPlayDVD</emphasis></term>
1125   <listitem><para>
1126   Пытается открыть диск в указанном устройстве DVD-ROM.
1127   </para></listitem>
1128 </varlistentry>
1130 <varlistentry>
1131   <term><emphasis role="bold">evPlayVCD</emphasis></term>
1132   <listitem><para>
1133   Пытается открыть диск в указанном устройстве CD-ROM.
1134   </para></listitem>
1135 </varlistentry>
1137 <varlistentry>
1138   <term><emphasis role="bold">evPreferences</emphasis></term>
1139   <listitem><para>
1140   Открывает окно с настройками.
1141   </para></listitem>
1142 </varlistentry>
1144 <varlistentry>
1145   <term><emphasis role="bold">evSetAspect</emphasis></term>
1146   <listitem><para>
1147   Включает показ пропорций изображения.
1148   </para></listitem>
1149 </varlistentry>
1151 <varlistentry>
1152   <term><emphasis role="bold">evSetURL</emphasis></term>
1153   <listitem><para>
1154   Отображает диалог ввода URL.
1155   </para></listitem>
1156 </varlistentry>
1158 <varlistentry>
1159   <term><emphasis role="bold">evSkinBrowser</emphasis></term>
1160   <listitem><para>
1161   Открывает окно навигации по скинам.
1162   </para></listitem>
1163 </varlistentry>
1164 </variablelist>
1165 </sect1>
1168 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
1171 <sect1 id="skin-quality">
1172 <title>Создание качественного скина</title>
1174 <para>
1175 Итак, вы прочитали о создании скина для
1176 <application>MPlayer</application> GUI, прекрасно нарисовали все в
1177 <application>Gimp</application> и желаете отправить скин нам?
1178 Прочтите некоторые руководства для избежания основных ошибок и 
1179 создания высококачественного скина.
1180 </para>
1182 <para>
1183 Мы хотим, чтобы скины, добавляемые нами в репозиторий, удовлетворяли 
1184 некоторым стандартам качества. Есть также несколько вещей,
1185 сделающих вашу жизнь проще.
1186 </para>
1188 <para>
1189 В качестве примера можете посмотреть на скин <systemitem>Blue</systemitem>,
1190 начиная с версии 1.5, он удовлетворяет всем критериям, указанным ниже.
1191 </para>
1193 <itemizedlist>
1194   <listitem><para>
1195   Каждый скин должна идти с файлом 
1196   <filename>README</filename>, содержащим информацию о вас, авторе,
1197   правах на копирование, лицензионным уведомлением и всем другим,
1198   что вам захочется добавить. Если хотите иметь историю изменений, то 
1199   этот файл - хорошее место для нее.
1200   </para></listitem>
1202   <listitem><para>
1203   Должен быть файл <filename>VERSION</filename>,
1204   содержащий только номер версии скина в одной строке
1205   (например 1.0).
1206   </para></listitem>
1208   <listitem><para>
1209   Горизонтальные и вертикальные элементы управления 
1210   (такие как ползунки громкости или положения) должны иметь
1211   кнопку-ползунок точно отцентрированную по центру самого ползунка. 
1212   Должно быть возможно двигать кнопку к обоим концам ползунка,
1213   но не выходить за них.
1214   </para></listitem>
1216   <listitem><para>
1217   Элементы скина должны иметь правильные размеры,
1218   указанные в файле skin. Если это не так, вы сможете щелкнуть, например,
1219   мимо кнопки и все равно она сработает, или наоборот кликнуть на нее,
1220   не вызвав никакого действия.
1221   </para></listitem>
1223   <listitem><para>
1224   Файл <filename>skin</filename> должен быть набран аккуратно
1225   и не должен содержать символов табуляции. Аккуратно набран означает,
1226   что числа должны выравниваться стройно в столбцы.
1227   </para></listitem>
1228 </itemizedlist>
1230 </sect1>
1231 </appendix>