view DOCS/pl/skin.html @ 10847:98dc548dbf2d

pass stream header FCC
author michael
date Thu, 11 Sep 2003 00:16:33 +0000
parents 97fafb7eed88
children
line wrap: on
line source

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  <title>Tworzenie Skórek - MPlayer - Odtwarzacz Filmów dla Linuksa</title>
  <link rel="stylesheet" type="text/css" href="../default.css">
  <style type="text/css">
    em.note {color: green;
             font-style: normal;}
    em.warn {color: red;
             font-style: normal;}
    </style>
</head>

<body>

<h1>Dodate D - Format skórek MPlayera</h1>

<p>Celem tej dokumentacji jest opisanie formatu skór MPlayera. Informacje zawarte
  w tym dokumencie mogą być błędne, ponieważ:</p>

<ol type="a">
  <li>To nie ja napisałem GUI.</li>
  <li>GUI nie jest skończone.</li>
  <li>Mogę się mylić.</li>
</ol>

<p>Więc nie bądź zaskoczony jeżeli coś nie będzie działało w sposób w jaki zostało tutaj opisane.</p>

<p>Podziękowania dla <em>Zoltán Ponekker</em> za jego pomoc.</p>

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


<h2><a name="overview">D.1 Przedmowa</a></h2>

<p>To nie ma tak naprawdę żadnego związku z formatem skór, ale powinieneś wiedzieć,
  że MPlayer <B>nie</B> ma wbudowanej skórki, więc musisz <B>mieć zainstalowaną chociaż
  jedną skórę, aby mieć możliwość używania GUI.</B></p>


<h3><a name="directories">D.1.1 Katalogi</a></h3>

<p>Katalogi przeszukiwane przez MPlayera w poszukiwaniu skór to (w kolejności szukania):</p>

<pre>
    $(DATADIR)/Skin/
    $(PREFIX)/share/mplayer/Skin/
    ~/.mplayer/Skin/
</pre>

<p>Zauważ, że pierwsza ścieżka może być zależna od tego, jak MPlayer został skonfigurowany
  podczas kompilacji (zobacz argumenty <code>--prefix</code> i <code>--datadir</code>
  skryptu <code>configure</code>).</p>

<p>Każda skórka jest zainstalowana w swoim własnym katalogu znajdującym się w jednym
   z folderów wymienionych powyżej, na przykład:</p>

<pre>
    $(PREFIX)/share/mplayer/Skin/default/
</pre>


<h3><a name="images">D.1.2 Formaty obrazków</a></h3>

<p>Obrazki muszą to być PNG z głębią kolorów truecolor (24, albo 32 bity).</p>

<p>W głównym oknie i w pasku odtwarzania (zobacz niżej) możesz używać obrazków
  z 'przeźroczystością': obszary wypełnione przy użyciu koloru #FF00FF
  (<font color="#FF00FF">magenta</font>) są dla MPlayera w pełni przeźroczyste.
  Oznacza to, że możesz używać dowolnych kształtów okna głównego, jeżeli
  twój X serwer posiada rozszerzenie XShape.</p>


<h3><a name="components">D.1.3 Części skórki</a></h3>

<p>Skórki są całkowicie konfigurowalne (w przeciwieństwie np. do skór Winampa/XMMS)
  (chodzi o to, że możesz umieścić dowolny przycisk np. 'play' w dowolnym miejscu
  swojej skóry, format XMMSa i Winampa ma z góry ustalone położenie każdego elementu
  i nie można tego zmienić - przyp. tłumacza), więc tylko od ciebie zależy,
  czy stworzysz coś naprawdę fajnego.</p>

<p>Na dzień dzisiejszy są trzy okna do skonfigurowania: <a href="#mainwin">okno główne</a>
  (main window), <a href="#subwindow">okno ekranu</a> (subwindow),
  <a href="#mainwin">pasek odtwarzania</a> (playbar) oraz <a href="#skinmenu">menu skóry</a>
  (skin menu) (które może zostać uaktywnione poprzez naciśnięcie prawego przycisku myszy).</p>

<ul>
  <li><p><b>Okno główne</b> i/lub <b>pasek odtwarzania</b> to okno w którym kontrolujesz
    MPlayera. Tło tego okna jest obrazkiem. Różne elementy mogą (i muszą) być umieszczone
    w tym oknie: <em>przyciski</em> (buttons), <em>potencjometry</em> (suwaki, ang. potmeters, sliders)
    i <em>etykiety</em> (labels). Dla każdego elementu musisz określić jego pozycję oraz rozmiar.</p>

    <p><b>Przycisk</b> ma trzy fazy (wciśnięty, uwolniony oraz nieaktywny), więc ich obrazki
    muszą być podzielone na trzy części w pionie. Zobacz sekcję <a href="#main.button">przyciski</a>,
    aby uzyskać więcej informacji.</p>

    <p><b>Potencjometry</b> (zazwyczaj używane do określania pozycji filmu (seek bar) oraz do
    kontroli głośności/balansu dźwięku) mogą posiadać dowolną liczbę faz poprzez podzielenie
    jego obrazka na części, gdzie następna faza jest poniżej poprzedniej.
    Zobacz sekcję <a href="#main.hpotmeter">hpotmeter</a> i <a href="#main.potmeter">potmeter</a>,
    aby dowiedzieć się więcej na ten temat.</p>

    <p><b>Etykiety</b> są bardzo specyficzne: znaki służące do ich opisania są
    brane z poliku graficznego, a litery, które są w nim zawarte w pliku graficznym
    są opisane przez <a href="#fonts">plik opisujący fonty</a>. Jest to plik tekstowy,
    który określa pozycję x, y oraz rozmiar każdego symbolu znajdującego się w obrazku
    (a więc "plik graficzny z fontami" i "plik opisujący fonty" tworzą <em>razem</em> fonty).
    Zobacz <a href="#main.dlabel">dlabel</a> i <a href="#main.slabel">slabel</a>,
    po więcej szczegółów.</p>

    <p><em class="note"><b>Informacja:</b> wszystkie obrazki mogą posiadać przeźroczystość tak,
    jak opisano to w sekcji formaty <a href="#images">plików graficznych</a>. Jeżeli
    serwer X nie obsługuje rozszerzenia XShape, część oznaczona jako przezroczysta, będzie
    czarna. Jeżeli chcesz używać tej funkcji, szerokość obrazka tła głównego okna musi
    być podzielna przez 8.</em></p>
  </li>

  <li><b>Okno ekranu</b> - tutaj pojawia się film podczas odtwarzania. Może ono
    wyświetlać określony obrazek jeżeli nie jest w danym momencie odgrywany żaden film
    (to dość nudne mieć puste okno :-)) <em class=note><b>Informacja:</b> przeźroczystość
    jest tutaj <b>niedostępna</b>.</em></li>

  <li><p><b># menu skóry</b> to po prostu jeden ze sposobów do kontrolowania MPlayera
    poprzez polecenia z menu. Wymagane są tutaj dwa obrazki: pierwszy z nich jest
    podstawowym obrazkiem pokazującym menu w "normalnym" stanie, drugi natomiast jest
    używany do wyświetlania wybranych elementów. Kiedy aktywujesz menu pokazywany jest
    pierwszy obrazek. Kiedy najeżdżasz kursorem na którąś z pozycji, jej zaznaczenie
    jest kopiowane z drugiego obrazka na obszar menu znajdujący się pod wskaźnikiem myszy
    (a więc drugi obrazek nigdy nie jest pokazany w całości).</p>

    <p>Obszar menu znajdujący się pod kursorem jest zdefiniowany poprzez jego pozycję
     i rozmiar w obrazku (zobacz sekcję <a href="#skinmenu">menu skóry</a> aby dowiedzieć
     się więcej na ten temat).</p>
  </li>
</ul>

<p>Jest jeszcze jedna ważna rzecz, która nie została jeszcze wspomniana: dla przycisków,
  potencjometrów i obszarów menu, MPlayer musi wiedzieć co ma zrobić jeżeli zostaną one
  kliknięte. Zajmują się tym <a href="#guimsg">sygnały</a> (zdarzenia). Dla wszystkich
  tych elementów muszą być zdefiniowane sygnały, które mają zostać wywołane po naciśnięciu
  przycisku myszy.</p>


<h3><a name="files">D.1.4 Pliki</a></h3>

<p>Aby stworzyć skórę będziesz potrzebował następujących plików:</p>

<ul>
  <li>Plik konfiguracyjny o nazwie<a href="#skin">skin</a>, który informuje
    MPlayera w jaki sposób łączyć ze sobą poszczególne części skóry i co ma
    zrobić kiedy klikasz gdziesz w obszarze okna.</li>
  <li>Obrazek Tła do głównego okna.</li>
  <li>Obrazki dla elementów okna głównego (włączając w to jeden, albo więcej
    plików opisujących fonty potrzebnych do wyświetlania etykiet).</li>
  <li>Obrazek który ma być wyświetlony w oknie ekranu (opcjonalnie).</li>
  <li>Dwa obrazki do menu skóry (są one potrzebne tylko jeśli chcesz stworzyć takie menu).</li>
</ul>

<p>Poza plikiem konfiguracyjnym skóry, możesz nazwać wszystkie inne pliki
  jak tylko chcesz (ale pamiętaj, że plik opisujący fonty musi mieć rozszerzenie <code>.fnt</code>).</p>


<h2><a name="skinfile">D.2 Plik skin</a></h2>

<p>Jak wspomniano powyżej jest to plik konfigurujący skórę. Potrafi on rozpoznawać
  typy wierszy: wiersze komentarza rozpoczyna średnik, czyli '<code>;</code>'
  (przed nim mogą znajdować się tylko spacje, lub znaki tabulacji).</p>

<p>Plik podzielony jest na sekcję. Każda z nich opisuje poszczególny element
  skóry dla każdej z aplikacji i ma następującą postać:</p>

<table border="1" width="100%">
  <tr bgcolor="silver">
    <td>
<pre>
section = <i>section name</i>
.
.
.
end
</pre>
    </td>
  </tr>
</table>

<p>Na dzień dzisiejszy istnieje tylko jedna aplikacja, więc potrzebujesz tylko jednej sekcji:
   jej nazwa to <b>movieplayer</b> (odtwarzacz filmów).</p>

<p>W tej sekcji każde z okien jest opisane poprzez dany blok w taki sposób:</p>

<table border="1" width="100%">
  <tr bgcolor="silver">
    <td>
<pre>
window = <i>window name</i>
.
.
.
end
</pre>
    </td>
  </tr>
</table>

<p>gdzie <i>window name</i> może być jednym z następujących ciągów znaków:</p>

<ul>
  <li><b>main</b> - dla głównego okna</li>
  <li><b>sub</b> - dla okna ekranu</li>
  <li><b>menu</b> - dla menu skóry</li>
  <li><b>playbar</b> - pasek odtwarzania</li>
</ul>

<p>(wpisy sub i menu są opcjonalne - nie musisz tworzyć menu, ani dekorować
  okna ekranu jeżeli nie chcesz.)</p>

<p>W każdym z bloków możesz zdefiniować poszczególne elementy (items) dla danego
  okna w sposób przedstawiony poniżej:</p>

<dl>
  <dt><b><code>item = parameter</code></b></dt>
  <dd>Gdzie <code>item</code> jest ciągiem znaków identyfikującym typ danego
    elementu GUI, parametr jest numeryczną, lub tekstową wartością
    (lub listą wartości oddzieloną przecinkami).</dd>
</dl>

<p>Łącząc to wszystko ze sobą, uzyskujemy plik wyglądający mniej więcej tak:</p>

<table border="1" width="100%">
  <tr bgcolor="silver">
    <td>
<pre>
section = movieplayer
  window = main
  ; ... elementy dla okna głównego ...
  end
  
  window = sub
  ; ... elementy dla okna ekranu ...
  end
  
  window = menu
  ; ... elementy dla menu skóry ...
  end

  window = playbar
  ; ... elementy dla paska odtwarzania ...
  end
end
</pre>
    </td>
  </tr>
</table>

<p>Nazwa obrazk musi być podana bez żadnych głównych katalogów - obrazki są
  poszukiwane w katalogu ze <code>skórką</code>. Możesz (ale nie musisz) podać
  rozszerzenie plików. Jeżeli plik nie istnieje, MPlayer próbuje załadować plik
  <code>&lt;nazwa pliku&gt;.&lt;rozszerzenie&gt;</code>, gdzie <code>png</code>
  i <code>PNG</code> są próbowane jako <code>&lt;rozszerzenie&gt;</code> (w tej
  kolejności). Wykorzystany zostanie pierwszy pasujący plik.</p>

<p>Na koniec kilka słów o pozicjonowaniu. Główne okno i okno ekranu mogą
  być umieszczone w różnych narożnikach ekranu poprzez podanie parametrów
  <code>X</code> i <code>Y</code>. <code>0</code> jest górą lub lewą stroną,
  <code>-1</code> wyśrodkowuje, a <code>-2</code> jest dołem lub prawą stroną,
  jak pokazano na ilustracji:</p>

<pre>

(0, 0)----(-1, 0)----(-2, 0)
  |          |          |
  |          |          |
(0,-1)----(-1,-1)----(-2,-1)
  |          |          |
  |          |          |
(0,-2)----(-1,-2)----(-2,-2)

</pre>

<table border="1" cellpadding="5" width="100%">
  <tr bgcolor="#ffffcc">
    <td>Tutaj jest przykład, który powinien to wyjaśnić. Przypuśćmy, że masz obrazek
     o nazwie <code>main.png</code>, który używasz do głównego okna:
      <blockquote>
        <code>base = main, -1, -1</code>
      </blockquote>
      MPlayer próbuje załadować <code>main</code>, <code>main.png</code>,
      <code>main.PNG</code>.
    </td>
  </tr>
</table>


<h3><a name="mainwindow">D.2.1 Okno główne i pasek odtwarzania</a></h3>

<p>Poniżej możesz zobaczyć listę elementów, które mogą być użyte w bloku
  '<code>window = main</code>' .&nbsp;.&nbsp;. '<code>end</code>', i w
  '<code>window = playbar</code>' &nbsp;.&nbsp;. '<code>end</code>'.</p>

<dl>
  <dt><a name="main.base"><b><code>base = obrazek, X, Y</code></b></a></dt>
  <dd>Pozwala ci określić obrazek tła, który ma zostać użyty w głównym oknie.
Okno to pojawi się w określonej przez <code>x,y</code> pozycji na ekranie.
Okno to będzie rozmiarów obrazka tła.
    <div><em class="warn"><b>Informacja:</b> Te parametry narazie nie działają
      dla okna ekranu.</em></div>
    <div><em class="warn"><b>Ostrzeżenie:</b> przeźroczyste obszary w obrazku
      (kolor #FF00FF) pojawiają się jako czarny kolor w X serwerach, które nie
      obsługują rozszerzenia XShape.</em></div>
  </dd>

  <dt><a name="main.button"><b><code>button = obrazek, X, Y, szerokość, wysokość,
    sygnał</code></b></a></dt>
  <dd>Umieszcza przycisk o rozmiarze <code>szerokość</code> * <code>wysokość</code>
    na pozycji <code>X</code>,<code>Y</code>. Określony <code>sygnał</code> jest generowany,
    kiedy przycisk zostanie kliknięty. Obrazek określony przez <code>obrazek</code>
    musi być podzielony na trzy części umieszczone jedna pod drugą (podzielony według
    możliwych faz przycisku), w ten sposób:
<pre>
+------------+
| wciśnięty  |
+------------+
| uwolniony  |
+------------+
| nieaktywny |
+------------+
</pre>
  </dd>

  <dt><a name="main.decoration"><b><code>decoration = enable|disable</code></b>
    </a></dt>
  <dd>Włącza, lub wyłącza dekoracje okna (pasek tytułowy) twojego menadżera okien
    Domyślnie jest to <b>wyłączone</b>.
    <div><em class="warn"><b>Informacja:</b> Nie działa z oknem ekranu, opcja nie
    jest wymagana.</em></div>
  </dd>

  <dt><a name="main.hpotmeter"><b><code>hpotmeter = przycisk, szer_przycisku, wys_przycisku,
    fazy, liczbafaz, domyślna, X, Y, szerokość, wysokość, sygnał</code><br>
    <code>vpotmeter = przycisk, szer_przycisku, wys_przycisku, fazy, liczbafaz,
    domyślna, X, Y, szerokość, wysokość, sygnał</code></b></a></dt>
  <dd>Umieszcza poziomy (hpotmeter) lub pionowy (vpotmeter) potencjometr o rozmiarach
    <code>szerokość</code> * <code>wysokość</code>
    na pozycji <code>X</code>,<code>Y</code>. Obrazek może być podzielony na różne części
    dla różnych faz potencjometru (np. możesz mieć potencjometr głośności, który zmienia się
    z zielonego na czerwony podczas zmiany głośności z minimalnej do maksymalnej).
    <code>hpotmeter</code> może mieć przycisk który jest przesuwany w poziomie.

    <div>Parametry to:</div>

    <ul>
      <li><code>przycisk</code> - obrazek który ma być użyty jako suwak (musi mieć
        trzy części umieszczone jedna pod drugą, tak jak w przypadku
	<a href="#main.button">przycisku</a>)</li>
      <li><code>szer_przycisku</code>, <code>wys_przycisku</code> -rozmiar suwaka</li>
      <li><code>fazy</code> - obrazek, który ma być użyty dla różnych faz hpotencjometru.
        Specjalna wartość <code>NULL</code> może być użyta, jeżeli nie chcesz
        żadnego obrazka. Obrazek musi być podzielony w pionie na <code>liczbęfaz</code>,
	w ten sposób:
<pre>
+------------+
|  faza #1   |
+------------+
|  faza #2   |
+------------+
     ...
+------------+
|  faza #n   |
+------------+
</pre>
      </li>
      <li><code>liczbafaz</code> - liczba faz znajdująca się w obrazku
         z <code>fazami</code>
      <li><code>domyślna</code> - domyślna wartość dla hpotencjometru (w przedziale od
        0 do 100)</li>
      <li><code>X</code>, <code>Y</code> - pozycja hpotencjometru</li>
      <li><code>szerokość</code>, <code>wysokość</code> - szerokość i wysokość
       <code>hpotnecjometru</code></li>
      <li><code>sygnał</code> - sygnał który ma być wywołany, kiedy zmienia się wartość
        <code>hpotnecjometru</code></li>
    </ul>
  </dd>	

  <dt><a name="main.potmeter"><b><code>potmeter = fazy, liczbafaz, domyślna, X,
    Y, szerokość, wysokość, sygnał</code></b></a></dt>
    <dd><code>Potencjometr</code> bez suwaka. (Myślę, że chodzi tu o to żeby nim kręcić, ale
    reaguje on tylko na poziome przesuwanie.) Aby zobaczyć opis parametrów
    zobacz <a href="#main.hpotmeter">hpotmeter</a>. <code>fazy</code> mogą mieć wartość
    <code>NULL</code>, ale jest to bezużyteczne, jeżeli nie możesz zobaczyć gdzie znajduje
    się <code>potencjometr</code>.</dd>

  <dt><a name="main.font"><b><code>font = plikfontów, fontid</code></b></a></dt>
  <dd>Definiuje fonty. <code>fontfile</code> jest nazwą pliku opisującego fonty
    z rozszerzeniem <code>.fnt</code> <b>nie trzeba</b> tu określać rozszerzenia).
    <code>fontid</code> jest używany do odsyłania się do danego fonta (zobacz
    <a href="#main.dlabel">dlabel</a> i <a href="#main.slabel">slabel</a>).
    Możesz określić ponad 25 znaków.</dd>
  <dt><a name="main.slabel"><b><code>slabel = X, Y, fontid, "text"</code></b>
    </a></dt>
  <dd>
    Umieszcza statyczną etykietę na pozycji <code>X</code>,<code>Y</code>.
    <code>text</code> jest wyświetlany używając <code>fontid</code>. Text
    jest po prostu nieprzetworzonym ciągiem znaków (zmienne <code>$x</code>
    nie działają) który musi znajdować się w cudzysłowiu (" nie może być częścią
    tekstu). Etykieta jest wyświetlana używając <code>fontid</code>.</dd>

  <dt><a name="main.dlabel"><b><code>dlabel = X, Y, długość, align, fontid,
    "text"</code></b></a></dt>
  <dd>Umieszcza dynamiczne etykiety na pozycji <code>X</code>,<code>Y</code>.
    Etykieta nazywana jest dynamiczną, ponieważ tekst w niej jest regularnie
    odświeżany. Maksymalna długość etykiety jest ustalona przez <code>długość</code>
    przez
    label is called dynamic because its text is refreshed periodically. The
    maximum length of the label is given by <code>length</code> (jej wysokość
    jest wysokością fontów). Jeżeli tekst który ma być wyświetlony jest dłuższy
    od tej wartości, wtedy będzie on przewijany, w innym przypadku będzie on
    wyrównany do określonej przez <code>align</code> (wyrównanie) przestrzeni.
    <code>0</code> dla wyrównania do prawej, <code>1</code> dla wyśrodkowania,
    <code>2</code> dla wyrównania do lewej.<br>
    Tekst, który ma zostać wyświetlony jest określony przez <code>text</code>:
    musi być on opisany w cudzysłowiu (ale <code>"</code> nie może być częścią
    tekstu). Etykieta jest wyświetlana używając <code>fontid</code>. Możesz
    użyć poniższych zmiennych w tekście:

    <table align="center" border="1">
      <tr align="center"><th>Zmienna</th><th align="left">Znaczenie</th></tr>
      <tr><td align="center"><kbd>$1</kbd></td>
        <td>play time in <em>hh:mm:ss</em> format</td></tr>
      <tr><td align="center"><kbd>$2</kbd></td>
        <td>odtwarza czas w formacie <em>mmmm:ss</em></td></tr>
      <tr><td align="center"><kbd>$3</kbd></td>
        <td>odtwarza czas w formacie <em>hh</em> (godziny)</td></tr>
      <tr><td align="center"><kbd>$4</kbd></td>
        <td>odtwarza czas w formacie <em>mm</em> (minuty)</td></tr>
      <tr><td align="center"><kbd>$5</kbd></td>
        <td>odtwarza czas w formacie <em>ss</em> (sekundy)</td></tr>
      <tr><td align="center"><kbd>$6</kbd></td>
        <td>wyświetla długość filmu w formacie <em>hh:mm:ss</em> </td></tr>
      <tr><td align="center"><kbd>$7</kbd></td>
        <td>wyświetla długość filmu w formacie <em>mmmm:ss</em> </td></tr>
      <tr><td align="center"><kbd>$8</kbd></td>
        <td>odtwarza czas w formacie <em>h:mm:ss</em></td></tr>
      <tr><td align="center"><kbd>$v</kbd></td>
        <td>głośność w formacie <em>xxx.xx%</em></td></tr>
      <tr><td align="center"><kbd>$V</kbd></td>
        <td>głośność w formacie <em>xxx.x</em></td></tr>
      <tr><td align="center"><kbd>$b</kbd></td>
        <td>balans w formacie <em>xxx.xx%</em></td></tr>
      <tr><td align="center"><kbd>$B</kbd></td>
        <td>balans w formacie <em>xxx.x</em></td></tr>
      <tr><td align="center"><kbd>$$</kbd></td>
        <td>znak <kbd>$</kbd></td></tr>
      <tr><td align="center"><kbd>$a</kbd></td>
        <td>znak określający typ dźwięku (żaden: <code>n</code>,
	mono: <code>m</code>, stereo: <code>t</code>)</td></tr>
      <tr><td align="center"><kbd>$t</kbd></td>
        <td>Numer ścieżki (w playliście)</td></tr>
      <tr><td align="center"><kbd>$o</kbd></td>
        <td>>nazwa pliku</td></tr>
      <tr><td align="center"><kbd>$f</kbd></td>
        <td>nazwa pliku małymi literami</td></tr>
      <tr><td align="center"><kbd>$F</kbd></td>
        <td>nazwa pliku dużymi literami</td></tr>
      <tr><td align="center"><kbd>$T</kbd></td>
        <td>znak określający typ strumienia (plik: <code>f</code>,
          Video CD: <code>v</code>, DVD: <code>d</code>, URL: <code>u</code>)
          </td></tr>
      <tr><td align="center"><kbd>$p</kbd></td>
        <td>znak "p" (jeżeli film jest odgrywany i font ma określony symbol "p")</td></tr>
      <tr><td align="center"><kbd>$s</kbd></td>
        <td>znak "s" (jeżeli film jest zatrzymany i font ma określony symbol "s")</td></tr>
      <tr><td align="center"><kbd>$e</kbd></td>
        <td>znak "e" (jeżeli włączona jest pauza i font ma określony symbol "e")</td></tr>
      <tr><td align="center"><kbd>$x</kbd></td>
        <td>szerokość filmu</td></tr>
      <tr><td align="center"><kbd>$y</kbd></td>
        <td>wysokość filmu</td></tr>
      <tr><td align="center"><kbd>$C</kbd></td>
        <td>nazwa użytego kodeka</td></tr>
    </table>

    <em class="note"><b>Informacja:</b> Zmienne <kbd>$a</kbd>, <kbd>$T</kbd>,
    <kbd>$p</kbd>, <kbd>$s</kbd> i <kbd>$e</kbd> mają znaki które powinny być
    wyświetlane jako znaki specjalne (np. "e" jest symbolem pauzy wyglądającym
    zazwyczaj tak <code>||</code>). Powinieneś mieć fonty dla normalnych znaków
    i osobne dla znaków specjalnych. Zobacz sekcję <a href="#symbols">symbole</a>,
    aby dowiedzieć się więcej.</em>
  </dd>
</dl>


<h3><a name="subwindow">D.2.2 Okno ekranu</a></h3>

<p>Poniżej możesz zobaczyć listę elementów, które mogą być użyte w bloku
   '<code>window = sub</code>' .&nbsp;.&nbsp;. '<code>end</code>'.</p>

<dl>
  <dt><a name="sub.base"><b><code>base = obrazek, X, Y, szerokość, wysokość</code></b>
    </a></dt>
  <dd>Obrazek który ma być wyświetlony w tym oknie. Okno pojawi się w określonej przez
    ciebie pozycji <code>X</code>,<code>Y</code> na ekranie(<code>0,0</code>
    umieszcza obrazek w lewym górnym rogu). Możesz tu użyć także następujących
    wartości: <code>-1</code> dla wyśrodkowania, <code>-2</code> dla wyrównania
    do prawej (dla wartości <code>X</code>) i do dołu (dla wartości <code>Y</code>).
    Okno to będzie rozmiarów obrazka. <code>szerokość</code> i <code>wysokość</code>
    określa rozmiar okna. Te zmienne są opcjonalne (jeżeli ich nie będzie, okno będzie
    takich samych rozmiarów jak obrazek).</dd>

  <dt><a name="sub.background"><b><code>background = R, G, B</code></b></a></dt>
  <dd>Pozwala ci ustalić kolor tła. Jest to przydatne jeżeli obrazek jest mniejszy
    od okna. <code>R</code>, <code>G</code> i <code>B</code> określają czerwoną, zieloną
    i niebieską wartość koloru (każda z nich jest określona w przedziale od 0 do 255).</dd>
</dl>


<h3><a name="skinmenu">D.2.3 Menu Skóry</a></h3>

<p>Jak wspomnianow wcześniej, menu jest wyświtlane przy użyciu dwóch obrazków.
 Normalny stan menu jest brany z obrazka określonego jako <code>base</code>,
 podczas gdy zaznaczony obszar jest brany z obrazka określonego jako
 <code>selected</code>. Musisz zdefiniować pozycję i rozmiar każdego z elementów
 menu poprzez element <code>menu</code>.</p>

<p>Te elementy mogą zostać wykorzystane w bloku '<code>window = menu</code>'
  .&nbsp;.&nbsp;. '<code>end</code>'.</p>

<dl>
  <dt><a name="menu.base"><b><code>base = obrazek</code></b></a></dt>
  <dd>Obrazek pokazujący normalny stan menu.</dd>

  <dt><a name="menu.selected"><b><code>selected = obrazek</code></b></a></dt>
  <dd>Obrazek pokazujący zaznaczony stan menu.</dd>

  <dt><a name="menu.menu"><b><code>menu = X, Y, szerokość, wysokość, sygnał</code>
    </b></a></dt>
  <dd>Definiuje pozycję <code>X,Y</code> i rozmiar poszczególnych elementów menu
    w obrazku. <code>sygnał</code> jest sygnałem, który ma być uaktywniony, kiedy
    klikniesz tą pozycję.</dd>
</dl>


<h2><a name="fonts">D.3 Fonty</a></h2>

<p>Tak jak wspomniano w sekcji o częściach skóry, fonty są zdefiniowane przez
  obrazek i plik opisujący fonty. Możesz umieścić znaki w dowolnym
  miejscu obrazka, ale upewnij się, że ich pozycja i rozmiar są dokładnie
  określone w pliku opisującym fonty.</p>

<p>Plik opisujący fonty (z rozszerzeniem <code>.fnt</code>) może mieć linie komentarza
  rozpoczęte średnikiem '<code>;</code>'. Plik musi mieć tę linie w formacie:</p>

<dl>
  <dt><a name="font.image"><b><code>image = obrazek</code></b></a></dt>
  <dd>gdzie <code>obrazek</code> jest nazwą pliku w którym znajdują się fonty (nie
  musisz podawać rozszerzenia).</dd>

  <dt><a name="font.char"><b><code>"znak" = X, Y, szerokość, wysokość</code></b>
    </a></dt>
  <dd>Tutaj <code>X</code> i <code>Y</code> określają pozycję <code>znaku</code>
    w obrazku (<code>0,0</code> to lewy górny róg). <code>szerokość</code>
    i <code>wysokość</code> wymiary znaku w pikselach.</dd>
</dl>

<p>Poniżej możesz zobaczyć przykład definiujący znaki A, B, C znajdujące
  się w pliku <code>font.png</code>:</p>

<table width="100%" border="1">
  <tr bgcolor="silver">
    <td>
<pre>
; może być "font" zamiast "font.png".
image = font.png

; Trzy znaki są wystarczające, aby zademonstrować jak to działa. :-)
"A" =  0,0, 7,13
"B" =  7,0, 7,13
"C" = 14,0, 7,13
</pre>
    </td>
  </tr>
</table>


<h3><a name="symbols">D.3.1 Symbole</a></h3>

<p>Niektóre znaki mają specjalne znaczenia kiedy są zmiennymi używanymi w
<a href="#main.dlabel">dlabel</a>. Te znaki są wyświetlane jako symbole co oznacza, że
  kiedy odgrywasz strumień DVD, możesz wyświetlić fajne logo DVD zdefiniowane
  pod znakiem 'd'.</p>

<p>Poniższa tabelka zawiera wszystkie znaki, które mogą być wykorzystane
do wyświetlania symboli (i wymagają one osobnych fontów).</p>

<table align="center" border="1">
  <tr><th align="center">Znak</th><th align="left">Symbol</th></tr>
  <tr><td align="center"><kbd>p</kbd></td>
    <td align=left>odtwarzanie</td></tr>
  <tr><td align="center"><kbd>s</kbd></td>
    <td align=left>stop</td></tr>
  <tr><td align="center"><kbd>e</kbd></td>
    <td align=left>pauza</td></tr>
  <tr><td align="center"><kbd>n</kbd></td>
    <td align=left>bez dźwięku</td></tr>
  <tr><td align="center"><kbd>m</kbd></td>
    <td align=left>dźwięk mono</td></tr>
  <tr><td align="center"><kbd>t</kbd></td>
    <td align=left>dźwięk stereo</td></tr>
  <tr><td align="center"><kbd>f</kbd></td>
    <td align=left>strumień jest plikiem</td></tr>
  <tr><td align="center"><kbd>v</kbd></td>
    <td align=left>strumień to VideoCD</td></tr>
  <tr><td align="center"><kbd>d</kbd></td>
    <td align=left>strumień to DVD</td></tr>
  <tr><td align="center"><kbd>u</kbd></td>
    <td align="left">strumień to URL</td></tr>
</table>


<h2><a name="guimessages">D.4 Sygnały GUI</a></h2>

<p>Tutaj znajdują się sygnały które mogą zostać wywołane przez przyciski,
potencjometry i elementy menu.</p>

<p><em class="note"><b>Informacja:</b> Niektóre z sygnałów mogą działać nieprawidłowo
  (albo w ogóle nie działać). Jak wiesz, GUI jest ciągle w fazie rozwoju.</em></p>


<h3>Opcje odgrywania:</h3>

<blockquote>
  <dl>
    <dt><b>evNext</b></dt>
    <dd>Przeskakuje do następnej ścieżki z playlisty.</dd>

    <dt><b>evPause</b></dt>
    <dd>Wstrzymuje odgrywanie.</dd>

    <dt><b>evPauseSwitchToPlay</b></dt>
    <dd>Przełącza między sobą użuwając <code>evPlaySwitchToPause</code>.
      Może to zostać wykorzystane aby utworzyć jeden przycisk spełniający
      równocześnie funkcje odgrywania i pauzy. Oba sygnały powinny być
      przydzielone do przycisków wyświetlanych w tym samym miejscu w oknie.
      Ten sygnał wstrzymuje odtwarzanie i wyświetlany jest obrazek dla
      przycisku <code>evPlaySwitchToPause</code> (aby zaznaczyć, że ten przycisk
      może być wciśnięty, aby kontynuować odgrywanie).</dd>

    <dt><b>evPlay</b></dt>
    <dd>Rozpoczyna odgrywanie.</dd>

    <dt><b>evPlaySwitchToPause</b></dt>
    <dd>Przeciwieństwo <code>evPauseSwitchToPlay</code>. Ten sygnał rozpoczyna
     odgrywanie i wyświetlany jest obrazek dla przycisku <code>evPauseSwitchToPlay</code>
     (aby zaznaczyć, że ten przycisk może być wciśnięty, aby wstrzymać odgrywanie).</dd>

    <dt><b>evPrev</b></dt>
    <dd>Przeskakuje do poprzedniej ścieżki z playlisty.</dd>

    <dt><b>evStop</b></dt>
    <dd>Zatrzymuje odgrywanie.</dd>
  </dl>
</blockquote>


<h3>Przeszukiwanie:</h3>

<blockquote>
  <dl>
    <dt><b>evBackward10sec</b></dt>
    <dt><b>evBackward1min</b></dt>
    <dt><b>evBackward10min</b></dt>
    <dd>Przeskakuje w tył o 10 sekund / 1 minutę / 10 minut.</dd>

    <dt><b>evForward10sec</b></dt>
    <dt><b>evForward1min</b></dt>
    <dt><b>evForward10min</b></dt>
    <dd>Przeskakuje w przód o 10 sekund / 1 minutę / 10 minut.</dd>

    <dt><b>evSetMoviePosition</b></dt>
    <dd>Ustawia pozycję (może być zmieniane za pomocą suwaka; wykorzystywane są
      relatywne (0-100%) wartości potencjometru).</dd>
  </dl>
</blockquote>
  

<h3>Kontrola obrazu:</h3>

<blockquote>
  <dl>
    <dt><b>evDoubleSize</b></dt>
    <dd>Ustawia podwójny rozmiar okna z filmem.</dd>

    <dt><b>evFullScreen</b></dt>
    <dd>Włącza/wyłącza tryb pełnoekranowy.</dd>

    <dt><b>evNormalSize</b></dt>
    <dd>Ustawia oryginalny rozmiar okna z filmem.</dd>
  </dl>
</blockquote>


<h3>Kontrola Dźwięku:</h3>

<blockquote>
  <dl>
    <dt><b>evDecAudioBufDelay</b></dt>
    <dd>Zmniejsza opóźnienie buffera dźwięku.</dd>

    <dt><b>evDecBalance</b></dt>
    <dd>Zmniejsza balans.</dd>

    <dt><b>evDecVolume</b></dt>
    <dd>Zmniejsza głośność.</dd>

    <dt><b>evIncAudioBufDelay</b></dt>
    <dd>Zmniejsza opóźnienie buffera dźwięku.</dd>

    <dt><b>evIncBalance</b></dt>
    <dd>Zwiększa balans.</dd>

    <dt><b>evIncVolume</b></dt>
    <dd>Zwiększa głośność.</dd>

    <dt><b>evMute</b></dt>
    <dd>Wycisz/włącz dźwięk.</dd>

    <dt><b>evSetBalance</b></dt>
    <dd>Ustawia balans (może być używane przez suwak; wykorzystywane są relatywne
      (0-100%) wartości potencjometru).</dd>

    <dt><b>evSetVolume</b></dt>
    <dd>Ustawia głośność (może być używane przez suwak; wykorzystywane są relatywne
(0-100%) wartości potencjometru).</dd>
  </dl>
</blockquote>


<h3>Różne:</h3>

<blockquote>
  <dl>
    <dt><b>evAbout</b></dt>
    <dd>Otwiera okno "o programie".</dd>

    <dt><b>evDropSubtitle</b></dt>
    <dd>Wyłącza aktualnie używane napisy.</dd>

    <dt><b>evEqualizer</b></dt>
    <dd>Włącza/wyłącza equalizer.</dd>

    <dt><b>evExit</b></dt>
    <dd>Zamyka program.</dd>

    <dt><b>evIconify</b></dt>
    <dd>Minimalizuje okno.</dd>

    <dt><b>evLoad</b></dt>
    <dd>Wczytuje plik (poprzez otwarcie przeglądarki plików, w której możesz wybrać
      plik).</dd>

    <dt><b>evLoadPlay</b></dt>
    <dd>Robi dokładnie to samo co <code>evLoad</code> z tym, że po wczytaniu pliku
      automatycznie rozpoczyna jego odtwarzanie.</dd>

    <dt><b>evLoadSubtitle</b></dt>
    <dd>Wczytuje plik napisów (poprzez otwarcie przeglądarki plików)</dd>

    <dt><b>evLoadAudioFile</b></dt>
    <dd>Wczytuje plik z dźwiękiem (poprzez otwarcie przeglądarki plików)</dd>

    <dt><b>evNone</b></dt>
    <dd>Pusty sygnał, nic nie robi. (No może nie dotyczy to wersji CVS :-)).</dd>

    <dt><b>evPlayList</b></dt>
    <dd>Otwiera/zamyka okno playlisty.</dd>

    <dt><b>evPlayDVD</b></dt>
    <dd>Próbuje otworzyć dysk z podanej stacji DVD-ROM.</dd>

    <dt><b>evPlayVCD</b></dt>
    <dd>Próbuje otworzyć dysk z podanej stacji CD-ROM.</dd>

    <dt><b>evPreferences</b></dt>
    <dd>Otwiera okno preferencji.</dd>

    <dt><b>evSetAspect</b></dt>
    <dd>Ustawia stosunek obrazu (aspekt).</dd>

    <dt><b>evSetURL</b></dt>
    <dd>Wyświetla okno dialogowe, gdzie podaje się URL.</dd>

    <dt><b>evSkinBrowser</b></dt>
    <dd>Otwiera okno z przeglądarką skórek.</dd>
  </dl>
</blockquote>

</body>
</html>