Mercurial > mplayer.hg
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 <mayday@freemail.hu></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><nazwa pliku>.<rozszerzenie></code>, gdzie <code>png</code> i <code>PNG</code> są próbowane jako <code><rozszerzenie></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>' . . . '<code>end</code>', i w '<code>window = playbar</code>' . . '<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>' . . . '<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>' . . . '<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>