mpv/DOCS/pl/skin.html

800 lines
31 KiB
HTML

<!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>