Mercurial > mplayer.hg
view DOCS/xml/pl/skin.xml @ 23067:3c89c681e0d6
Readd an explicit rule for Objective C files. Apparently only Apple's fork of
GNU Make has an implicit rule for Objective C.
author | diego |
---|---|
date | Sun, 22 Apr 2007 20:16:29 +0000 |
parents | 655565aafbe4 |
children | 0f1b5b68af32 |
line wrap: on
line source
<?xml version="1.0" encoding="utf-8"?> <!-- synced with r19081 --> <!-- Opiekun: Flex --> <appendix id="skin"> <title>Format skórki <application>MPlayera</application></title> <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><nazwa pliku>.<rozszerzenie></filename>, gdzie <literal>png</literal> oraz <literal>PNG</literal> są brane jako <filename><rozszerzenie></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, "tekst" </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 " 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, "tekst" </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 " 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>"char" = 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ć "font" zamiast "font.png". image = font.png ; Trzy znaki wystarczą do tej demonstracji :-) "A" = 0,0, 7,13 "B" = 7,0, 7,13 "C" = 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> <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 Subversion:-)). </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> <sect1 id="skin-quality"> <title>Tworzenie dobrych skórek</title> <para> Wygląda na to, że przeczytałeś o tworzeniu skórek dla GUI <application>MPlayera</application>, dałeś z siebie wszystko używając <application>Gimpa</application> i chciałbyś umieścić u nas swoją skórkę? Zapoznaj się z kilkoma wytycznymi, żeby uniknąć najczęstszych pomyłek i stworzyć skórkę wysokiej jakości. </para> <para> Chcemy aby skórki, które dodajemy do naszego repozytorium, spełniały określone standardy jakości. Istnieje również kilka rzeczy, które możesz zrobić, żeby ułatwić sobie życie. </para> <para> Jako wzorzec możesz wziąć skórkę <systemitem>Blue</systemitem>, od wersji 1.5 spełnia one wszystkie wymienione niżej kryteria. </para> <itemizedlist> <listitem><para>Do każdej skórki powinien być dołączony plik <filename>README</filename> zawierający informacje o tobie, czyli autorze, prawach autorskich i licencji i wszystkie inne informacje, które zechcesz dodać. Jeżeli chcesz prowadzić listę zmian, ten plik jest na to dobrym miejscem.</para></listitem> <listitem><para>Należy dodać plik <filename>VERSION</filename> zawierający tylko i wyłącznie wersję skórki zapisaną w jednej linii (np. 1.0) </para></listitem> <listitem><para>Poziome i pionowe kontrolki (suwaki do zmiany głośności albo pozycji) powinny mieć gałki prawidłowo wycentrowane na środku suwaka. Powinno się dać przesunąć gałkę na oba końce suwaka, ale nie poza jego obszar.</para></listitem> <listitem><para>Elementy skórki powinny mieć prawidłowo zadeklarowane rozmiary w pliku skórki. W przeciwnym wypadku możliwe będzie kliknięcie poza obszarem np. przycisku i jego naciśnięcia lub kliknięcie wewnątrz obszaru przycisku i nie naciśnięcie go. </para></listitem> <listitem><para>Plik <filename>skin</filename> powinien być ładnie sformatowany i nie powinien zawierać tabulacji. Ładnie sformatowany, czyli taki w którym numery są ładnie ustawione w kolumnach.</para></listitem> </itemizedlist> </sect1> </appendix>