summaryrefslogtreecommitdiffstats
path: root/DOCS/pl/skin.html
blob: 83a103857a4d6b542c9510ecace99300e25d8be2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
<!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.&