C.2. Plik skin
Poprzedni | Dodatek C. Format skórki MPlayera | Następny

## C.2. Plik skin

Jak zostało powiedziane wcześniej, plik ten jest plikiem konfigurującym skórkę. Obsługuje różne rodzaje wierszy; komentarze zaczynają wiersz znakiem '`;`' (tylko spacje i znaki tabulacji są dopuszczone przed '`;`').

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

    section = nazwa sekcji
    .
    .
    .
    end

Obecnie jest tylko jedna aplikacja, a więc potrzebujesz tylko jedną sekcję 'section' - jej nazwa to movieplayer.

Wewnątrz tej sekcji każde z okien jest opisane przez blok następującej postaci:

    window = nazwa okna
    .
    .
    .
    end

gdzie `nazwa okna` może być jednym z poniższych łańcuchów:

- main - dla okna głównego

- sub - dla okna ekranu

- menu - dla menu skórki

- playbar - dla panelu odtwarzania

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

Wewnątrz bloku 'window' możesz definiować każdy element okna, wpisując linijkę tej postaci:

    item = parametr

Gdzie `item` jest łańcuchem, kóry identyfikuje typ elementu GUI, `parametr` jest wartością numeryczną lub tekstową (lub listą takich wartości oddzielonych od siebie znakiem przecinka).

Złożenie powyższych elementów razem tworzy plik, który wygląda mniej więcej tak:

    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

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

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 `X` i `Y`. `0` to góra lub lewa strona, `-1` to środek, `-2` to strona prawa, lub dół, tak jak przedstawiono na poniższej ilustracji:

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

Oto przykład wyjaśniający to lepiej. Przypuśćmy, że masz obrazek nazwany `main.png`, który został użyty dla okna głównego:

    base = main, -1, -1

MPlayer spróbuje wczytać pliki `main`, `main.png`, `main.PNG`.

### C.2.1. Okno główne i panel odtwarzania

Poniżej znajduje się lista wpisów, które mogą być użyte w blokach '`window = main`'...'`end`' oraz '`window = playbar`' ... '`end`'.

`base = obrazek, X, Y`

  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 `X, Y`. Okno będzie wielkości tego obrazka.

  ### Notatka

  Współrzędne te nie działają na razie dla okna ekranu.

  ### Ostrzeżenie

  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.

`button = obrazek, X, Y, szerokość, wysokość, sygnał`

  Umieści przycisk o rozmiarze `szerokość` * `wysokość` na pozycji `X`, `Y`. Określony `sygnał` jest generowany podczas kliknięcia na przycisk. Obrazek ten opisany przez `obrazek` musi składać się z trzech części jedna pod drugą (stosownie do możliwych stanów przycisku), w ten oto sposób:

      +---------------+
      |  wciśnięty    |
      +---------------+
      |  zwolniony    |
      +---------------+
      | nieaktywny    |
      +---------------+

`decoration = enable|disable (włączona|wyłączona)`

  Włącza lub wyłącza dekorację menedżera okna w oknie głównym. Domyślnie jest wyłączona.

  ### Notatka

  Nie działa to w oknie ekranu, gdyż nie ma takiej potrzeby.

`hpotmeter = przycisk, szer_przycisku, wys_przycisku, faza, liczba_faz, domyślny, X, Y, szerokość, wysokość, sygnał`

`vpotmeter = przycisk, szer_przycisku, wys_przycisku, fazy, liczba_faz, domyślny, X, Y, szerokość, wysokość, sygnał`

  Umieszcza poziomo (hpotmeter) lub pionowo (vpotmeter) suwak o rozmiarze `szerokość` * `wysokość` i pozycji `X,Y`. 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)). `hpotmeter` może być przyciskiem umieszczonym poziomo. Jego parametry to:

  - `przycisk` - obrazek użyty do przycisku (musi posiadać trzy części jedna pod drugą tak, jak w przypadku przycisku)

  - `szer_przycisku`,`wys_przycisku` - wielkość przycisku

  - `fazy` - obrazek używany do określenie faz dla hpotmeter. Wartość specjalna `NULL` może być użyta, jeśli nie chcesz żadnego obrazka. Obrazek musi być podzielony w pionie na fragmenty `poszczególnych faz` tak, jak poniżej:

        +------------+
        |  faza #1   |
        +------------+
        |  faza #2   |
        +------------+
             ...
        +------------+
        |  faza #n   |
        +------------+

  - `liczba_faz` - liczba faz znajdująca się na obrazku z `fazami`

  - `domyślny` - domyślne ustawienie dla hpotmeter (zakres od `0` do `100`)

  - `X`,`Y` - pozycja dla hpotmeter

  - `szerokość`,`wysokość` - szerokość i wysokość dla `hpotmeter`

  - `sygnał` - sygnał generowany podczas zmiany wartości `hpotmeter`

`potmeter = fazy, liczba_faz, domyślny, X, Y, szerokość, wysokość, sygnał`

  `hpotmeter` 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 hpotmeter. Parametr `fazy` może mieć wartość `NULL`, ale jest to zupełnie bezużyteczne, gdyż nie widać wtedy położenia potencjometru.

`font = plik_czcionek, id_czcionki`

  Definiuje czcionkę. `plik_czcionek` jest nazwą pliku opisu czcionki z rozszerzeniem `.fnt` (nie podawaj rozszerzenia w tym miejscu). `id_czcionki` jest używany do wskazywania konkretnej czcionki (zobacz dlabel oraz slabel). Można zdefiniować do 25 czcionek.

`slabel = X, Y, id_czcionki, "tekst"`

  Umieszcza statyczną etykietę w pozycji `X,Y`. `tekst` jest wyświetlany za pomocą czcionki wskazywanych przez `id_czcionki`. Tekst jest po prostu zwykłym łańcuchem znaków (zmienne `$x` 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 `id_czcionki`.

`dlabel = X, Y, długość, wyrównanie, id_czcionki, "tekst"`

  Umieszcza dynamiczną etykietę w pozycji `X,Y`. Etykieta jest nazywana dynamiczną, ponieważ jej tekst jest cyklicznie odświeżany. Maksymalną długość etykiety określa parametr `długość` (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 `wyrównanie`: `0` oznacza do prawej, `1` to wyśrodkowanie, `2` to wyrównanie do lewej.

  Wyświetlany tekst jest określony przez zmienną `tekst`: 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 `id_czcionki`. Możesz użyć następujących zmiennych w tekście:

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

### Notatka

Zmienne `$a, $T, $p, $s` oraz `$e` zwracają znaki, które powinny być wyświetlane jako znaki specjalne (na przykład e 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 symboli, by dowiedzieć się więcej.

### C.2.2. Okno ekranu

Poniższe wpisy mogą być użyte w bloku '`window = sub`' . . . '`end`' .

`base = obrazek, X, Y, szerokość, wysokość`

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

`background = R, G, B`

  Pozwala ustawić kolor tła. Jest to użyteczne jeśli obrazek jest mniejszy niż okno. `R`, `G` oraz `B` 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).

### C.2.3. Menu skórki

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 `base`, podczas gdy obszary zaznaczone są pobierane z obrazka wskazywanego przez element `selected`. Musisz zdefiniować pozycję i rozmiar każdego obszaru menu poprzez element menu.

Poniższe wpisy mogą być użyte w bloku: '`window = menu`'. . .'`end`' .

`base = obrazek`

  Obrazek dla zwykłych obszarów menu.

`selected = obrazek`

  Obrazek pokazujący w menu wszystkie zaznaczone obszary.

`menu = X, Y, szerokość, wysokość, sygnał`

  Definiuje pozycję i rozmiar obszarów menu na obrazku przy pomocy `X,Y`. `sygnał` to zdarzenie wygenerowane podczas zwolnienia przycisku myszy nad obszarem.

Poprzedni | Początek rozdziału | Następny
C.1. Wstęp | Spis treści | C.3. Czcionki