view DOCS/xml/pl/skin.xml @ 18715:30d7ddf08889

Fix window position when changing videos while in fullscreen and for window managers that modify position on Map. Oked by Alexander Strasser.
author reimar
date Thu, 15 Jun 2006 08:00:37 +0000
parents 9a5a62f480e6
children 87d755e003e7
line wrap: on
line source

<?xml version="1.0" encoding="iso-8859-2"?>
<!-- synced with 1.12 -->
<appendix id="skin">
<title>Format skórki <application>MPlayera</application></title>
<para>
Celem tego dokumentu jest opisanie formatu skórki
<application>MPlayera</application>.
Informacje zawarte tutaj mogą być niedokładne, ponieważ:
<orderedlist>
<listitem><para>To nie ja napisałem GUI.</para></listitem>
<listitem><para>GUI nie jest ukończone.</para></listitem>
<listitem><para>Mogę się mylić.</para></listitem>
</orderedlist>
A więc nie bądź zaskoczony, jeśli coś nie będzie działać tak, jak przedstawiono
to tutaj.
</para>

<para>Podziękowania dla <emphasis>Zoltána Ponekkera</emphasis> za jego
pomoc.</para>

<para><emphasis>András Mohari &lt;mayday@freemail.hu&gt;</emphasis></para>

<sect1 id="skin-overview">
<title>Wstęp</title>
<para>
W zasadzie nie ma to żadnego związku z formatem skórki, ale powinieneś
wiedzieć, że <application>MPlayer</application> <emphasis role="bold">nie</emphasis>
ma wbudowanej skórki, w związku z tym <emphasis role="bold"> co najmniej
jedna skórka musi być zainstalowana, abyś miał możliwość korzystania z GUI.</emphasis>
</para>

<sect2 id="skin-overview-directories">
<title>Katalogi</title>
<para>
Skórki są szukane w następujących katalogach (w kolejności):
<orderedlist>
<listitem><para>
<filename class="directory">$(DATADIR)/skins/</filename>
</para></listitem>
<listitem><para>
<filename class="directory">$(PREFIX)/share/mplayer/skins/</filename>
</para></listitem>
<listitem><para>
<filename class="directory">~/.mplayer/skins/</filename>
</para></listitem>
</orderedlist>
</para>

<para>
Zauważ, że pierwsza ścieżka może się różnić, w zależności od sposobu w jaki
<application>MPlayer</application> został skonfigurowany
(zobacz argumenty <option>--prefix</option> oraz <option>--datadir</option>
w skrypcie <command>configure</command>).
</para>

<para>
Każda skórka jest instalowana w swoim własnym katalogu, w jednej z wyżej
wymienionych lokacji, na przykład:
<screen>$(PREFIX)/share/mplayer/skins/default/</screen>
</para>
</sect2>

<sect2 id="skin-overview-formats">
<title>Formaty obrazków</title>
<para>Obrazki muszą być zapisane w formacie PNG (paleta truecolor - 24 lub 32 bpp).</para>
<para>
W głównym oknie oraz na panelu odtwarzania (zobacz niżej) możesz użyć
obrazków z 'przezroczystością': obszary wypełnione kolorem #FF00FF (magenta) są
w pełni przezroczyste dla <application>MPlayera</application>. Oznacza to, że
możesz mieć okna o różnych kształtach jeśli Twój X Server ma rozszerzenie
XShape.
</para>
</sect2>

<sect2 id="skin-overview-components">
<title>Składniki skórki</title>
<para>
Skórki są całkowicie konfigurowalne (w odróżnieniu od skórek np. 
<application>Winampa</application>/<application>XMMS</application>),
a więc zależy to wyłącznie od Ciebie, czy stworzysz coś wspaniałego.
</para>

<para>
W chwili obecnej mamy cztery okna, które można ozdobić:
<link linkend="skin-file-main">okno główne (main window)</link>,
<link linkend="skin-file-subwindow">okno ekranu (subwindow)</link>,
<link linkend="skin-file-main">panel odtwarzania (playbar)</link>,
<link linkend="skin-file-menu">menu skórki (skin menu)</link> (które może być
aktywowane prawym przyciskiem myszy).

<itemizedlist>
<listitem><para>
  <emphasis role="bold">Okno główne</emphasis> i/lub
  <emphasis role="bold">panel odtwarzania</emphasis> to miejsca, gdzie możesz
  sterować <application>MPlayerem</application>.
  Tłem tego okna jest obrazek. Różne elementy mogą (i muszą) być umieszczone
  w tym oknie: <emphasis>przyciski</emphasis>, <emphasis>potencjometry</emphasis>
  (suwaki) i <emphasis>etykiety</emphasis>. Dla każdego elementu musisz określić
  ich pozycję oraz rozmiar.
</para><para>
   <emphasis role="bold">Przycisk</emphasis> ma trzy stany (wciśnięty,
   zwolniony, nieaktywny), zatem jego obrazki muszą być podzielone na trzy
   części w pionie. Zobacz sekcję <link linkend="skin-button">button</link>, by
   dowiedzieć się więcej.
</para><para>
  <emphasis role="bold">Potencjometr (suwak)</emphasis> (wykorzystywany głównie
  jako pasek przewijania i kontrolka głośności/balansu) może składać się z
  każdej liczby stanów poprzez podzielenie jego obrazka na wiele części, z
  których jedna jest pod drugą. Zobacz
  <link linkend="skin-hpotmeter">hpotmeter</link> oraz
  <link linkend="skin-potmeter">potmeter</link>, by dowiedzieć się więcej.
</para><para>
  <emphasis role="bold">Etykiety</emphasis> są nieco specyficzne: Znaki
  potrzebne do ich narysowania są pobierane z pliku graficznego, a znaki
  umieszczone w pliku graficznym są opisane przez
  <link linkend="skin-fonts">plik opisu czcionek</link>. Jest to plik, który za
  pomocą czystego tekstu określa współrzędne x, y oraz wielkość każdego znaku
  umieszczonego na obrazku (plik graficzny i jego plik opisu tworzą
  <emphasis>razem</emphasis> czcionkę).
  Zobacz <link linkend="skin-dlabel">dlabel</link>
  oraz <link linkend="skin-slabel">slabel</link>, by dowiedzieć się więcej.
</para>
<note><para>Wszystkie obrazki mogą być całkowicie przezroczyste - tak, jak to
opisano w sekcji <link linkend="skin-overview-formats">formaty plików
graficznych</link>. Jeżeli X Server nie obsługuje rozszerzenia XShape, to
elementy oznaczone jako przezroczyste będą czarne. Jeśli chciałbyś wykorzystać
taką możliwość, szerokość obrazka tła głównego okna musi być podzielna przez 8.
</para></note>
</listitem>

<listitem><para>
  <emphasis role="bold">Okno ekranu</emphasis> to miejsce, gdzie odtwarzany jest
  film. Może ono wyświetlać określony obrazek, jeśli żaden film nie jest uruchomiony
  (to dość nudne mieć puste okno :-)) <emphasis role="bold">Uwaga:</emphasis>
  przezroczystość <emphasis role="bold">nie jest</emphasis> tutaj dostępna.
</para></listitem>

<listitem><para>
  <emphasis role="bold">Menu skórki</emphasis> to po prostu jeden ze sposobów na
  kontrolowanie <application>MPlayera</application> poprzez wpisy w menu. Dwa
  obrazki są do tego potrzebne: pierwszy z nich jest obrazkiem podstawowym,
  który pokazuje zwykły stan menu, drugi zaś służy do wyświetlenia zaznaczonych
  obszarów. Gdy uaktywnisz menu, zostanie pokazany pierwszy obrazek. Jeśli
  przesuniesz mysz nad któryś z jego wpisów, wówczas zaznaczony element jest
  kopiowany z drugiego obrazka w miejsce, na które wskazuje kursor myszy (drugi
  obrazek nigdy nie jest wyświetlany w całości).
</para><para>
 Wpis w menu jest określony przez jego pozycję oraz rozmiar na obrazku (zobacz
 sekcję <link linkend="skin-file-menu">menu skórki</link> by dowiedzieć się
 więcej).
</para></listitem>
</itemizedlist>
</para>

<para>
  Jedna ważna sprawa, która nie została jeszcze powiedziana:
  <application>MPlayer</application> musi wiedzieć co zrobić w momencie
  kliknięcia na przyciski, potencjometry i wpisy w menu, aby zadziałały. Zostało
  to zrobione za pomocą <link linkend="skin-gui">sygnałów</link> (zdarzeń). Dla
  tych elementów musisz zdefiniować sygnały, które mają być wysłane podczas
  kliknięcia na nie.
</para>
</sect2>

<sect2 id="skin-files">
<title>Pliki</title>
<para>
Potrzebujesz następujących plików do stworzenia skórki:
<itemizedlist>
<listitem><para>
  Plik konfiguracyjny o nazwie <link linkend="skin-file">skin</link> mówi
  <application>MPlayerowi</application> jak połączyć różne części skórki
  w jedną całość i co zrobić, gdy kliknie się gdzieś na obszarze okna.
</para></listitem>
<listitem><para>
  Plik graficzny tła w oknie głównym.
</para></listitem>
<listitem><para>
  Obrazki dla elementów w głównym oknie (zawierające jeden lub
  więcej plików opisu czcionek potrzebnych do rysowania etykiet).
</para></listitem>
<listitem><para>
  Obrazek wyświetlany w oknie ekranu (opcjonalnie)
</para></listitem>
<listitem><para>
  Dwa obrazki dla menu skórki (potrzebne są tylko wtedy, gdy chcesz stworzyć
  takie menu).
</para></listitem>
</itemizedlist>
  Za wyjątkiem pliku konfiguracyjnego skórki, możesz nazwać wszystkie pliki
  tak, jak tego chcesz (ale weź pod uwagę, że pliki opisu czcionek muszą mieć
  rozszerzenie <filename>.fnt</filename> ).
</para>
</sect2>
</sect1>

<sect1 id="skin-file">
<title>Plik skin</title>
<para>
Jak zostało powiedziane wcześniej, plik ten jest plikiem konfigurującym skórkę.
Obsługuje różne rodzaje wierszy; komentarze zaczynają wiersz znakiem
'<literal>;</literal>' (tylko spacje i znaki tabulacji są dopuszczone przed
'<literal>;</literal>').
</para>

<para>
Plik podzielony jest na sekcje. Każda sekcja opisuje skórkę dla każdej
aplikacji i ma następującą formę:

<programlisting>
section = <replaceable>nazwa sekcji</replaceable>
.
.
.
end
</programlisting>
</para>

<para>
Obecnie jest tylko jedna aplikacja, a więc potrzebujesz tylko jedną sekcję
'section' - jej nazwa to <emphasis role="bold">movieplayer</emphasis>.
</para>

<para>
Wewnątrz tej sekcji każde z okien jest opisane przez blok następującej postaci:
<programlisting>
window = <replaceable>nazwa okna</replaceable>
.
.
.
end
</programlisting>
</para>

<para>
gdzie <replaceable>nazwa okna</replaceable> może być jednym z poniższych łańcuchów:
<itemizedlist>
<listitem><para><emphasis role="bold">main</emphasis> - dla okna głównego</para></listitem>
<listitem><para><emphasis role="bold">sub</emphasis> - dla okna ekranu</para></listitem>
<listitem><para><emphasis role="bold">menu</emphasis> - dla menu skórki</para></listitem>
<listitem><para><emphasis role="bold">playbar</emphasis> - dla panelu odtwarzania</para></listitem>
</itemizedlist>
</para>

<para>
(Bloki sub i menu są opcjonalne - nie musisz tworzyć menu czy elementów skórki
dla okna ekranu)
</para>

<para>
Wewnątrz bloku 'window' możesz definiować każdy element okna, wpisując linijkę
tej postaci: <programlisting>item = parametr</programlisting>
Gdzie <literal>item</literal> jest łańcuchem, kóry identyfikuje typ elementu
GUI, <literal>parametr</literal> jest wartością numeryczną lub tekstową (lub
listą takich wartości oddzielonych od siebie znakiem przecinka).
</para>

<para>
Złożenie powyższych elementów razem tworzy plik, który wygląda mniej więcej tak:
<programlisting>
section = movieplayer
  window = main
  ; ... elementy okna głównego ...
  end

  window = sub
  ; ... elementy okna ekranu ...
  end

  window = menu
  ; ... elementy menu skórki ...
  end

  window = playbar
  ; ... elementy panelu odtwarzania ...
  end
end
</programlisting>
</para>

<para>
Nazwa pliku graficznego musi zostać podana bez żadnych nazw katalogów - obrazki
są szukane w katalogu <filename class="directory">skins</filename>.
Możesz (ale nie musisz) określić rozszerzenia tego pliku. Jeśli plik taki nie
istnieje, <application>MPlayer</application>
spróbuje wczytać plik <filename>&lt;nazwa pliku&gt;.&lt;rozszerzenie&gt;</filename>,
gdzie <literal>png</literal> oraz <literal>PNG</literal> są brane jako
<filename>&lt;rozszerzenie&gt;</filename> (w tej właśnie kolejności). Pierwszy
pasujący plik będzie użyty.
</para>

<para>
Na koniec kilka słów na temat pozycjonowania. Okno główne oraz okno ekranu możesz
umieścić w różnych narożnikach ekranu poprzez ustawienie współrzędnych
<literal>X</literal> i <literal>Y</literal>. <literal>0</literal> to góra lub
lewa strona, <literal>-1</literal> to środek, <literal>-2</literal> to strona
prawa, lub dół, tak jak przedstawiono na poniższej ilustracji:
</para>
<informalfigure>
<screen>
(0, 0)----(-1, 0)----(-2, 0)
  |          |          |
  |          |          |
(0,-1)----(-1,-1)----(-2,-1)
  |          |          |
  |          |          |
(0,-2)----(-1,-2)----(-2,-2)
</screen>
</informalfigure>

<para>
Oto przykład wyjaśniający to lepiej. Przypuśćmy, że masz obrazek nazwany
<filename>main.png</filename>, który został użyty dla okna głównego:
<programlisting>base = main, -1, -1</programlisting>
<application>MPlayer</application> spróbuje wczytać pliki
<filename>main</filename>, <filename>main.png</filename>,
<filename>main.PNG</filename>.
</para>


<sect2 id="skin-file-main">
<title>Okno główne i panel odtwarzania</title>
<para>
Poniżej znajduje się lista wpisów, które mogą być użyte w blokach
'<literal>window = main</literal>'...'<literal>end</literal>'
oraz '<literal>window = playbar</literal>' ... '<literal>end</literal>'.
</para>

<variablelist>
<varlistentry>
  <term><literal>
  <anchor id="skin-main-base"/>base = obrazek, X, Y
  </literal></term>
  <listitem><para>
  Możesz określić obrazek tła, który będzie używany w oknie głównym.
  Okno będzie widoczne na ekranie na współrzędnych <literal>X, Y</literal>. Okno
  będzie wielkości tego obrazka.
    </para>
    <note><para>Współrzędne te nie działają na razie dla okna ekranu.</para></note>
    <warning><para>Obszary przezroczystości obrazka (kolor #FF00FF) będą
    widoczne jako czarne pod X serwerami niemającymi rozszerzenia
    XShape. Szerokość obrazka musi być podzielna przez 8.</para></warning>
    </listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-button"/>button = obrazek, X, Y, szerokość, wysokość, sygnał
  </literal></term>
  <listitem><para>
Umieści przycisk o rozmiarze <literal>szerokość</literal> *
<literal>wysokość</literal> na pozycji <literal>X</literal>,
<literal>Y</literal>. Określony <literal>sygnał</literal> jest generowany
podczas kliknięcia na przycisk. Obrazek ten opisany przez
<literal>obrazek</literal> musi składać się z trzech części jedna pod drugą
(stosownie do możliwych stanów przycisku), w ten oto sposób:
</para>
<informalfigure>
<screen>
+---------------+
|  wciśnięty    |
+---------------+
|  zwolniony    |
+---------------+
| nieaktywny    |
+---------------+
</screen>
</informalfigure>
  </listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-decoration"/>decoration = enable|disable (włączona|wyłączona)
  </literal></term>
  <listitem><para>
Włącza lub wyłącza dekorację menedżera okna w oknie głównym.
Domyślnie jest <emphasis role="bold">wyłączona</emphasis>.
    </para>
    <note><para>Nie działa to w oknie ekranu, gdyż nie ma takiej potrzeby.</para></note>
  </listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-hpotmeter"/>hpotmeter = przycisk, szer_przycisku, wys_przycisku, faza, liczba_faz, domyślny, X, Y, szerokość, wysokość, sygnał
  </literal></term>
  <listitem><para>

    </para></listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-vpotmeter"/>vpotmeter = przycisk, szer_przycisku, wys_przycisku, fazy, liczba_faz, domyślny, X, Y, szerokość, wysokość, sygnał
  </literal></term>
  <listitem><para>
Umieszcza poziomo (hpotmeter) lub pionowo (vpotmeter) suwak o rozmiarze
<literal>szerokość</literal> * <literal>wysokość</literal> i pozycji
<literal>X,Y</literal>. Obrazek może być podzielony na różne części dla różnych
faz suwaka (np. możesz mieć suwak głośności, który w zależności od położenia
zmienia kolor z zielonego (minimum) na czerwony (maksimum)).
<literal>hpotmeter</literal> może być przyciskiem umieszczonym poziomo.
Jego parametry to:
    </para>
    <itemizedlist>
    <listitem><para><literal>przycisk</literal> - obrazek użyty do przycisku
    (musi posiadać trzy części jedna pod drugą tak, jak w przypadku
    <link linkend="skin-button">przycisku</link>)
    </para></listitem>
    <listitem><para><literal>szer_przycisku</literal>,<literal>wys_przycisku</literal> - wielkość przycisku
    </para></listitem>
   <listitem><para><literal>fazy</literal> - obrazek używany do określenie faz
   dla hpotmeter. Wartość specjalna <literal>NULL</literal> może być użyta,
   jeśli nie chcesz żadnego obrazka. Obrazek musi być podzielony w pionie
   na fragmenty <literal>poszczególnych faz</literal> tak, jak poniżej:
    </para>
<informalfigure>
<screen>
+------------+
|  faza #1   |
+------------+
|  faza #2   |
+------------+
     ...
+------------+
|  faza #n   |
+------------+
</screen>

</informalfigure>
    </listitem>
    <listitem><para><literal>liczba_faz</literal> - liczba faz znajdująca się na obrazku z <literal>fazami</literal>
    </para></listitem>
    <listitem><para><literal>domyślny</literal> - domyślne ustawienie dla hpotmeter
    (zakres od <literal>0</literal> do <literal>100</literal>)
    </para></listitem>
    <listitem><para><literal>X</literal>,<literal>Y</literal> - pozycja dla hpotmeter
    </para></listitem>
    <listitem><para><literal>szerokość</literal>,<literal>wysokość</literal> - szerokość i wysokość dla
  <literal>hpotmeter</literal>
    </para></listitem>
    <listitem><para><literal>sygnał</literal> - sygnał generowany podczas zmiany wartości <literal>hpotmeter</literal>
    </para></listitem>
    </itemizedlist>

    </listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-potmeter"/>potmeter = fazy, liczba_faz, domyślny, X, Y, szerokość, wysokość, sygnał
  </literal></term>
  <listitem><para>
<literal>hpotmeter</literal> bez przycisku. (domyślam się, że chodzi o to, aby
nim kręcić, ale reaguje on tylko na poziome przesuwanie). Opis parametrów znajdziesz w części o
<link linkend="skin-hpotmeter">hpotmeter</link>.
Parametr <literal>fazy</literal> może mieć wartość <literal>NULL</literal>, ale
jest to zupełnie bezużyteczne, gdyż nie widać wtedy położenia potencjometru.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-font"/>font = plik_czcionek, id_czcionki
  </literal></term>
  <listitem><para>
Definiuje czcionkę. <literal>plik_czcionek</literal> jest nazwą pliku opisu
czcionki z rozszerzeniem <filename>.fnt</filename> (nie podawaj rozszerzenia w
tym miejscu). <literal>id_czcionki</literal> jest używany do wskazywania
konkretnej czcionki (zobacz <link linkend="skin-dlabel">dlabel</link>
oraz <link linkend="skin-slabel">slabel</link>). Można zdefiniować do 25
czcionek.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-slabel"/>slabel = X, Y, id_czcionki, &quot;tekst&quot;
  </literal></term>
  <listitem><para>
Umieszcza statyczną etykietę w pozycji <literal>X,Y</literal>.
<literal>tekst</literal> jest wyświetlany za pomocą czcionki wskazywanych przez
<literal>id_czcionki</literal>. Tekst jest po prostu zwykłym łańcuchem znaków
(zmienne <literal>$x</literal> nie działają), któru musi być umieszczony
pomiędzy podwójnym cudzysłowem (znak &quot; nie może być częścią tekstu).
Etykieta wyświetlana jest za pomocą czcionki, na którą wskazuje
<literal>id_czcionki</literal>.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-dlabel"/>dlabel = X, Y, długość, wyrównanie, id_czcionki, &quot;tekst&quot;
  </literal></term>
  <listitem>
<para>
Umieszcza dynamiczną etykietę w pozycji <literal>X,Y</literal>. Etykieta jest
nazywana dynamiczną, ponieważ jej tekst jest cyklicznie odświeżany. Maksymalną
długość etykiety określa parametr <literal>długość</literal> (jej wysokość
określa wysokość czcionki). Jeśli tekst jest szerszy niż zdefiniowana długość,
będzie on przewijany, w przeciwnym wypadku będzie wyrównany w miejscu określonym
przez wartość parametru <literal>wyrównanie</literal>: <literal>0</literal>
oznacza do prawej, <literal>1</literal> to wyśrodkowanie, <literal>2</literal>
to wyrównanie do lewej.
</para>
<para>
Wyświetlany tekst jest określony przez zmienną <literal>tekst</literal>: musi
być zawarty pomiędzy podwójnymi cudzysłowami (znak &quot; nie może być częścią
tekstu). Etykieta wyświetlana jest za pomocą czcionki, na którą wskazuje
parametr <literal>id_czcionki</literal>. Możesz użyć następujących zmiennych w
tekście:
</para>

<informaltable>
<tgroup cols="2">
<thead>
  <row><entry>Zmienna</entry><entry>Znaczenie</entry></row>
</thead>
<tbody>
<row>
<entry>$1</entry>
<entry>czas odtwarzania w formacie <emphasis>hh:mm:ss</emphasis></entry>
</row>
<row>
<entry>$2</entry>
<entry>czas odtwarzania w formacie <emphasis>mmmm:ss</emphasis></entry>
</row>
<row>
<entry>$3</entry>
<entry>czas odtwarzania w formacie (godziny) <emphasis>hh</emphasis></entry>
</row>
<row>
<entry>$4</entry>
<entry>czas odtwarzania w formacie (minuty) <emphasis>mm</emphasis></entry>
</row>
<row>
<entry>$5</entry>
<entry>czas odtwarzania w formacie (sekundy) <emphasis>ss</emphasis></entry>
</row>
<row>
<entry>$6</entry>
<entry>długość filmu w formacie <emphasis>hh:mm:ss</emphasis></entry>
</row>
<row>
<entry>$7</entry>
<entry>długość filmu w formacie <emphasis>mmmm:ss</emphasis></entry>
</row>
<row>
<entry>$8</entry>
<entry>długość filmu w formacie<emphasis>h:mm:ss</emphasis></entry>
</row>
<row>
<entry>$v</entry>
<entry>format głośności w %<emphasis>xxx.xx</emphasis></entry>
</row>
<row>
<entry>$V</entry>
<entry>format głośności <emphasis>xxx.xx</emphasis> format</entry>
</row>
<row>
<entry>$b</entry>
<entry>format balansu w %<emphasis>xxx.xx</emphasis></entry>
</row>
<row>
<entry>$B</entry>
<entry>format balansu <emphasis>xxx.xx</emphasis></entry>
</row>
<row>
<entry>$$</entry>
<entry>znak $</entry>
</row>
<row>
<entry>$a</entry>
<entry>oznaczenie zgodne z rodzajem typu pliku audio (nic: <literal>n</literal>,
mono: <literal>m</literal>, stereo: <literal>t</literal>)</entry>
</row>
<row>
<entry>$t</entry>
<entry>numer ścieżki (na liście odtwarzania)</entry>
</row>
<row>
<entry>$o</entry>
<entry>nazwa pliku</entry>
</row>
<row>
<entry>$f</entry>
<entry>nazwa pliku pisana małymi literami</entry>
</row>
<row>
<entry>$F</entry>
<entry>nazwa pliku pisana wielkimi literami</entry>
</row>
<row>
<entry>$T</entry>
<entry>oznaczenie zgodne z rodzajem strumienia (plik: <literal>f</literal>,
Video CD: <literal>v</literal>, DVD: <literal>d</literal>, URL: <literal>u</literal>)</entry>
</row>
<row>
<entry>$p</entry>
<entry>znak <keycap>p</keycap> (gdy film jest odtwarzany i czcionka ma znak <keycap>p</keycap>)</entry>
</row>
<row>
<entry>$s</entry>
<entry>znak <keycap>s</keycap> (gdy film jest zatrzymany i czcionka ma znak <keycap>s</keycap>)</entry>
</row>
<row>
<entry>$e</entry>
<entry>znak <keycap>e</keycap> (gdy film jest wstrzymany (pauza) i czcionka ma znak <keycap>e</keycap>)
</entry>
</row>
<row>
<entry>$x</entry>
<entry>rozdzielczość filmu (szerokość)</entry>
</row>
<row>
<entry>$y</entry>
<entry>rozdzielczość filmu (wysokość)</entry>
</row>
<row>
<entry>$C</entry>
<entry>nazwa używanego kodeka</entry>
</row>

</tbody>
</tgroup>
</informaltable>
</listitem>

</varlistentry>
</variablelist>

<note><para>
Zmienne <literal>$a, $T, $p, $s</literal> oraz <literal>$e</literal>
zwracają znaki, które powinny być wyświetlane jako znaki specjalne (na przykład
<keycap>e</keycap> jest symbolem pauzy, która z reguły wygląda mniej więcej tak
||). Powinieneś mieć czcionkę dla zwykłych znaków oraz osobną czcionkę dla symboli.
Zobacz sekcję na temat <link linkend="skin-fonts-symbols">symboli</link>,
by dowiedzieć się więcej.
</para></note>
</sect2>

<sect2 id="skin-file-subwindow">
<title>Okno ekranu</title>
<para>
Poniższe wpisy mogą być użyte w bloku
'<literal>window = sub</literal>' . . . '<literal>end</literal>' .
</para>

<variablelist>
<varlistentry>
  <term><literal>
  <anchor id="skin-sub-base"/>base = obrazek, X, Y, szerokość, wysokość
  </literal></term>
  <listitem><para>
Wyświetla obrazek w oknie. Okno będzie widoczne na ekranie w miejscu oznaczonym
przez współrzędne <literal>X</literal>, <literal>Y</literal>
(<literal>0,0</literal> to lewy górny narożnik). Możesz użyć
<literal>-1</literal> dla środka, <literal>-2</literal> dla prawej strony
(<literal>X</literal>) i dołu (<literal>Y</literal>). Okno będzie mieć wielkość
obrazka. <literal>szerokość</literal> oraz <literal>wysokość</literal> oznaczają
wielkość okna; są one opcjonalne (jeśli nie są określone, okno będzie wielkości
takiej, jak obrazek).</para></listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-background"/>background = R, G, B
  </literal></term>
  <listitem><para>
  Pozwala ustawić kolor tła. Jest to użyteczne jeśli obrazek jest mniejszy niż
  okno. <literal>R</literal>, <literal>G</literal> oraz <literal>B</literal>
  określają składniki kolorów czerwonego, zielonego i niebieskiego (każdy z nich
  jest reprezentowany przez liczbę dziesiętną w zakresie od 0 do
  255).</para></listitem>
</varlistentry>
</variablelist>
</sect2>

<sect2 id="skin-file-menu">
<title>Menu skórki</title>
<para>
Jak wspomniano wcześniej, menu jest wyświetlane przy użyciu dwóch obrazków.
Zwykłe obszary menu są pobierane z obrazka określonego przez element
<literal>base</literal>, podczas gdy obszary zaznaczone są pobierane z obrazka
wskazywanego przez element <literal>selected</literal>. Musisz zdefiniować
pozycję i rozmiar każdego obszaru menu poprzez element menu.
</para>

<para>
Poniższe wpisy mogą być użyte w bloku:
'<literal>window = menu</literal>'. . .'<literal>end</literal>' .
</para>

<variablelist>
<varlistentry>
  <term><literal>
  <anchor id="skin-menu-base"/>base = obrazek
  </literal></term>
  <listitem><para>
Obrazek dla zwykłych obszarów menu.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-selected"/>selected = obrazek
  </literal></term>
  <listitem><para>
Obrazek pokazujący w menu wszystkie zaznaczone obszary.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><literal>
  <anchor id="skin-menu"/>menu = X, Y, szerokość, wysokość, sygnał
  </literal></term>
  <listitem><para>
Definiuje pozycję i rozmiar obszarów menu na obrazku przy pomocy
<literal>X,Y</literal>. <literal>sygnał</literal> to zdarzenie wygenerowane
podczas zwolnienia przycisku myszy nad obszarem.
    </para></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>

<sect1 id="skin-fonts">
<title>Czcionki</title>
<para>
Jak wspomniano w sekcji na temat fragmentów skórki, czcionka jest definiowana
przez obrazek i plik opisujący. Możesz umieścić znaki gdziekolwiek na obrazku,
ale miej pewność, żeich pozycja i rozmiar jest dokładnie podana w pliku
opisującym.
</para>

<para>
Plik opisujący czcionkę (o rozszerzeniu <filename>.fnt</filename>) może posiadać
linie komentarzy zaczynające się znakiem '<literal>;</literal>'. Plik musi
zawierać linie w postaci:
<anchor id="skin-font-image"/>
<programlisting>image = <replaceable>obrazek</replaceable></programlisting>
Gdzie <literal><replaceable>obrazek</replaceable></literal> jest nazwą pliku
graficznego, który zawiera czcionkę (nie musisz dopisywać jego rozszerzenia).
<anchor id="skin-font-char"/>
<programlisting>&quot;char&quot; = X, Y, szerokość, wysokość</programlisting>
<literal>X</literal> oraz <literal>Y</literal> określają pozycję znaku
<literal>char</literal> na obrazku (<literal>0,0</literal> to górny lewy narożnik).
<literal>szerokość</literal> i <literal>wysokość</literal> to rozmiar znaku
w pikselach.
</para>

<para>
Przykład: definiujemy znaki A, B, C przy użyciu pliku <filename>font.png</filename>.
<programlisting>
; Może być &quot;font&quot; zamiast &quot;font.png&quot;.
image = font.png

; Trzy znaki wystarczą do tej demonstracji :-)
&quot;A&quot; =  0,0, 7,13
&quot;B&quot; =  7,0, 7,13
&quot;C&quot; = 14,0, 7,13
</programlisting>
</para>

<sect2 id="skin-fonts-symbols">
<title>Znaki specjalne (symbole)</title>
<para>
Niektóre znaki mają specjalne znaczenie, gdy są zwracane przez pewne zmienne
używane w <link linkend="skin-dlabel">dlabel</link>. Znaki te mogą być
wyświetlane jako symbole w ten sposób, że np. podczas odtwarzania strumienia DVD
widoczne jest ładne logo zamiast znaku '<literal>d</literal>'.
</para>
<para>
Poniższa tablica zawiera znaki używane do wyświetlania symboli (wymagają one
oddzielnych czcionek).
</para>

<informaltable>
<tgroup cols="2">
<thead>
  <row><entry>Znak</entry><entry>Symbol</entry></row>
</thead>
<tbody>
<row><entry><keycap>p</keycap></entry><entry>odtwarzanie</entry></row>
<row><entry><keycap>s</keycap></entry><entry>stop</entry></row>
<row><entry><keycap>e</keycap></entry><entry>pauza</entry></row>
<row><entry><keycap>n</keycap></entry><entry>bez dźwięku</entry></row>
<row><entry><keycap>m</keycap></entry><entry>dźwięk mono</entry></row>
<row><entry><keycap>t</keycap></entry><entry>dźwięk stereo</entry></row>
<row><entry><keycap>f</keycap></entry><entry>strumień z pliku</entry></row>
<row><entry><keycap>v</keycap></entry><entry>strumień z Video CD</entry></row>
<row><entry><keycap>d</keycap></entry><entry>strumień z DVD</entry></row>
<row><entry><keycap>u</keycap></entry><entry>strumień z URL</entry></row>
</tbody>
</tgroup>
</informaltable>
</sect2>
</sect1>

<sect1 id="skin-gui">
<title>Sygnały GUI</title>
<para>
Tutaj znajdują się sygnały, które mogą być generowane przez przyciski, suwaki
i elementy menu.
</para>
<note><para>
Niektóre sygnały mogą nie działać w oczekiwany sposób (lub nie działać w ogóle).
Jak wiadomo, GUI jest jeszcze w fazie rozwoju.
</para></note>

<variablelist>
<title>Kontrola odtwarzania :</title>
<varlistentry>
  <term><emphasis role="bold">evNext</emphasis></term>
  <listitem><para>
Przejdź do następnej pozycji na liście odtwarzania.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evPause</emphasis></term>
  <listitem><para>
  Tworzy przełącznik razem z <literal>evPlaySwitchToPause</literal>.
  Mogą być użyte do utworzenia wspólnego przycisku odtwarzania/pauzy.
  Oba sygnały powinny być powiązane z przyciskami wyświetlonymi na tej samej
  pozycji w oknie. Sygnał ten wstrzymuje odtwarzanie i wyświetla  obrazek dla
  przycisku <literal>evPlaySwitchToPause</literal> (aby zaznaczyć,
  że przycisk ten może być użyty do kontynuowania odtwarzania).
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evPlay</emphasis></term>
  <listitem><para>
Rozpocznij odtwarzanie.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evPlaySwitchToPause</emphasis></term>
  <listitem><para>
Przeciwieństwo <literal>evPauseSwitchToPlay</literal>. Ten sygnał zaczyna
odtwarzanie oraz wyświetla obrazek dla przycisku
<literal>evPauseSwitchToPlay</literal> (aby zaznaczyć, że przycisk ten może być
użyty ponownie do wstrzymania odtwarzania).
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evPrev</emphasis></term>
  <listitem><para>
Przejdź do poprzedniej pozycji na liście odtwarzania.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evStop</emphasis></term>
  <listitem><para>
Zatrzymaj odtwarzanie.
    </para></listitem>
</varlistentry>
</variablelist>

<variablelist>
<title>Przewijanie:</title>
<varlistentry>
  <term><emphasis role="bold">evBackward10sec</emphasis></term>
  <listitem><para>
Przewiń do tyłu o 10 sekund.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evBackward1min</emphasis></term>
  <listitem><para>
Przewiń do tyłu o 1 minutę.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evBackward10min</emphasis></term>
  <listitem><para>
Przewiń do tyłu o 10 minut.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evForward10sec</emphasis></term>
  <listitem><para>
Przewiń do przodu o 10 sekund.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evForward1min</emphasis></term>
  <listitem><para>
Przewiń do przodu o 1 minutę.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evForward10min</emphasis></term>
  <listitem><para>
Przewiń do przodu o 10 minut..
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evSetMoviePosition</emphasis></term>
  <listitem><para>
Przewiń do pozycji (może być wykorzystane przez suwak;
użyte są względne wartości (0-100%) suwaka).
    </para></listitem>
</varlistentry>
</variablelist>

<variablelist>
<title>Kontrola video:</title>
<varlistentry>
  <term><emphasis role="bold">evHalfSize</emphasis></term>
  <listitem><para>
Ustawia okno filmu na połowę rozmiaru.
    </para></listitem>
</varlistentry>
<varlistentry>
  <term><emphasis role="bold">evDoubleSize</emphasis></term>
  <listitem><para>
Ustaw podwójny rozmiar okna z filmem.
    </para></listitem>
</varlistentry>
<varlistentry>
  <term><emphasis role="bold">evFullScreen</emphasis></term>
  <listitem><para>
Włącz/wyłącz tryb pełnoekranowy.
    </para></listitem>
</varlistentry>
<varlistentry>
  <term><emphasis role="bold">evNormalSize</emphasis></term>
  <listitem><para>
Ustaw typowy rozmiar okna z filmem.
    </para></listitem>
</varlistentry>
</variablelist>

<variablelist>
<title>Kontrola dźwięku:</title>
<varlistentry>
  <term><emphasis role="bold">evDecAudioBufDelay</emphasis></term>
  <listitem><para>
Zmniejsz opóźnienie bufora dźwięku.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evDecBalance</emphasis></term>
  <listitem><para>
Zmniejsz balans.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evDecVolume</emphasis></term>
  <listitem><para>
Zmniejsz głośność
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evIncAudioBufDelay</emphasis></term>
  <listitem><para>
Zwiększ opóźnienie bufora dźwięku.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evIncBalance</emphasis></term>
  <listitem><para>
Zwiększ balans.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evIncVolume</emphasis></term>
  <listitem><para>
Zwiększ głośność.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evMute</emphasis></term>
  <listitem><para>
Wycisz/przywróć dźwięk.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evSetBalance</emphasis></term>
  <listitem><para>
Ustawi balans (może być używane przez suwak;
używana jest wartość względna (0-100%)).
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evSetVolume</emphasis></term>
  <listitem><para>
Ustaw głośność (może być używane przez suwak;
używana jest wartość względna (0-100%)).
    </para></listitem>
</varlistentry>
</variablelist>

<variablelist>
<title>Różne:</title>
<varlistentry>
  <term><emphasis role="bold">evAbout</emphasis></term>
  <listitem><para>
Otwórz okno "o programie".
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evDropSubtitle</emphasis></term>
  <listitem><para>
Wyłącz aktualnie używane napisy.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evEqualizer</emphasis></term>
  <listitem><para>
Włącz/wyłącz korektor.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evExit</emphasis></term>
  <listitem><para>
Wyłącz program.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evIconify</emphasis></term>
  <listitem><para>
Minimalizuj okno.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evLoad</emphasis></term>
  <listitem><para>
Wczytaj plik (poprzez otwarcie okna przeglądarki plików, gdzie możesz wybrać
plik).
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evLoadPlay</emphasis></term>
  <listitem><para>
Tto samo co <literal>evLoad</literal>, ale zacznij automatycznie odtwarzać
zaraz po wyborze pliku.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evLoadSubtitle</emphasis></term>
  <listitem><para>
Wczytaj plik z napisami (z przeglądarki plików).
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evLoadAudioFile</emphasis></term>
  <listitem><para>
Wczytaj plik dźwiękowy (z przeglądarki plików).
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evNone</emphasis></term>
  <listitem><para>
Sygnał pusty - nic nie robi (może za wyjątkiem wersji z CVS:-)).
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evPlaylist</emphasis></term>
  <listitem><para>
Otwórz/zamknij okno listy odtwarzania.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evPlayDVD</emphasis></term>
  <listitem><para>
Spróbuj odczytać płytę ze wskazanego czytnika DVD.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evPlayVCD</emphasis></term>
  <listitem><para>
Spróbuj odczytać płytę ze wskazanego czytnika CD.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evPreferences</emphasis></term>
  <listitem><para>
Otwórz okno z ustawieniami.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evSetAspect</emphasis></term>
  <listitem><para>
Ustaw proporcje obrazu.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evSetURL</emphasis></term>
  <listitem><para>
Wyświetl okienko dialogowe URL.
    </para></listitem>
</varlistentry>

<varlistentry>
  <term><emphasis role="bold">evSkinBrowser</emphasis></term>
  <listitem><para>
Otwórz okno przeglądarki skórek.
    </para></listitem>
</varlistentry>
</variablelist>

</sect1>

</appendix>