Formát skinů <application>MPlayer</application>u Účel tohoto dokumentu je popis formátu skinu MPlayeru. Zde uvedené informace mohou být chybné, protože: Nejsem to já, kdo píše GUI. GUI není dokončeno. Mohu se mýlit. Takže nebuďte překvapeni, pokud něco nebude pracovat přesně tak, jak je to zde popsáno. Děkuji Zoltánu Ponekkerovi za jeho pomoc. András Mohari <mayday@freemail.hu> Přehled Nemá to sice nic společného s formátem skinu, ale měli byste vědět, že MPlayer nemá vestavěný skin, takže si musíte alespoň jeden skin nainstalovat, chcete-li používat GUI. Adresáře Adresáře prohledávané na skiny jsou (v tomto pořadí): $(DATADIR)/Skin/ $(PREFIX)/share/mplayer/Skin/ ~/.mplayer/Skin/ Poznamenejme, že první z cest se může lišit podle toho, jak je MPlayer zkonfigurován (viz volby configure skriptu a ). Každý skin je instalován do vlastního adresáře v některém z výše uvedených. Například: $(PREFIX)/share/mplayer/Skin/default/ Formáty obrázků Obrázky musí být truecolor (24 nebo 32 bpp) PNG. V hlavním okně a v přehrávači (viz níž) můžete použít obrázky s 'průhledností': Oblasti vyplněné barvou #FF00FF (magenta) jsou plně průhledné, pokud jsou zobrazovány MPlayerem. To znamená, že můžete mít tvarovaná okna, pokud má váš X server XShape rozšíření. Součásti skinu Skiny mají poměrně volný formát (narozdíl například od pevného formátu skinů Winampu/XMMS), takže je jen na vás, zda vytvoříte něco skvělého. V současnosti jsou zde čtyři okna, která můžete dekorovat: hlavní okno, podokno, ovládací panel a nabidka (tu lze aktivovat pravým myšítkem). MPlayer je ovládán v hlavním okně a/nebo v ovládacím panelu. Pozadím okna je obrázek. Následující součásti mohou (a musí) být umístěny v okně: tlačítka, potenciometry (šoupátka) a popisky. Každé součásti musíte nastavit pozici a velikost. A tlačítko má tři stavy (stisknuto, puštěno a zakázáno), proto musí být jeho obraz svisle rozdělen do tří částí. Detaily viz součást tlačítko. A potenciometr (hlavně používaný pro lištu převíjení a ovládání hlasitosti/stereováhy) může mít libovolný počet fází dělících jeho obraz na jednotlivé části pod sebou. Detaily viz hpotenciometr a potenciometr. Popisky jsou poněkud zvláštní: Znaky potřebné pro jejich vykreslení jsou brány z obrazového souboru a znaky v obrázku jsou popsány souborem popisu fontu. Tento (druhý) soubor je prostý textový soubor, který popisuje pozici x,y a velikost každého znaku v obrázku (obrázkový soubor a soubor popisu fontu spolu tvoří font). Detaily viz dlabel. Všechny obrázky mohou mít plnou průhlednost, jak je popsána v sekci o formátech obrázků. Pokud X server nepodporuje rozšíření XShape, budou průhledné části černé. Pokud byste chtěli využít tuto vlastnost, musí být šířka pozadí hlavního okna celočíselně dělitelná 8. Podokno je to okno, kde se zobrazuje film. Může v něm být zobrazen určený obrázek, pokud není načten žádný film (je docela únavné, pokud zde není nic :-)). Poznámka: průhlednost zde is není povolena. Nabídka je jen způsob, jak ovládat MPlayer položkami menu. Vyžadovány jsou dva obrázky: jeden z nich jako menu v normálním stavu a druhý se zvýrazněnými položkami. Když pak vyvoláte menu, je zobrazen první obrázek. Při pohybu myší přes položky, je zkopírována aktuálně vybraná položka z druhého obrázku přes ten první pod kursorem (druhý obrázek není nikdy zobrazen celý). Položka menu je definována svou pozicí a velikostí v obrázku (detaily viz sekce nabídka). Jednu důležitou věc jsme ještě nezmínili: Mají-li tlačítka, potenciometry a položky menu pracovat, musí MPlayer vědět, co má udělat, pokud je na ně kliknuto. To je zajištěno pomocí zpráv (událostí). Pro tyto členy tedy musíte definovat zprávy, které budou při kliku generovány. Soubory Pro výrobu skinu budete potřebovat následující: Konfigurační soubor jménem skin řekne MPlayeru, jak má dát jednotlivé části skinu dohromady a co udělat, kliknete-li někde v okně. Obrázek pozadí hlavního okna. Obrázky položek hlavního okna (včetně jednoho nebo více souborů s popisem fontu pro vykreslování popisek). Obrázek pro zobrazení v podokně (volitelný). Dva obrázky pro nabídku (ty jsou potřeba pouze pokud chcete vytvořit menu). S výjimkou konfiguračního souboru skinu si můžete pojmenovat ostatní soubory jak chcete (s tím, že vaše soubory s popisem fontu budou mít příponu .fnt). Soubor skin Jak jsme již řekli, je to konfigurační soubor skinu. Soubor je řádkově orientován; řádky s komentářem začínají znakem ';' (před ním jsou povoleny jen mezery a tabulátory). Soubor je složen ze sekcí. Každá sekce popisuje skin pro aplikaci a má následující formu: section = název cekce . . . end Zatím máme jen jednu aplikaci, takže potřebujete jen jednu sekci: její název je movieplayer. Uvnitř sekce je každé okno posáno blokem, který má následující formu: window = název okna . . . end kde název okna může být jeden z těchto řetězců: main - pro hlavní okno sub - pro podokno menu - pro nabídku playbar - ovládací panel (Bloky sub a menu jsou volitelné - nemusíte vytvářet nabídku nebo vyzdobit podokno.) Uvnitř window bloku můžete definovat každou položku okna řádkem v tomto tvaru: položka = parametr Kde položka je řetězec označující typ položky GUI a parametr je číselná nebo textová hodnota (nebo seznam hodnot oddělených čárkami). Dáte-li to všechno dohromady, celý soubor vypadá asi takto: section = movieplayer window = main ; ... položky hlavního okna ... end window = sub ; ... položky podokna ... end window = menu ; ... položky menu ... end window = playbar ; ... položky ovládacího panelu ... end end Jméno souboru s obrázkem musí být zadáno bez úvodních adresářů - obrázky jsou vyhledávány v adresáři Skin. Měli byste (ale nemusíte) zadat příponu souboru. Pokud soubor neexistuje, zkouší MPlayer načíst soubor <jméno>.<příp>, kdy jsou za <příp> zkoušeny přípony png a PNG (v tomto pořadí). Použitý bude první vyhovující soubor. Nakonec ještě pár slov k umísťování. Hlavní okno a podokno mohou být umístěny v různých rozích obrazovky zadáním souřadnic X a Y. 0 je nahoře nebo vlevo, -1 je střed a -2 je vpravo nebo dole, jak je vidět na obrázku: (0, 0)----(-1, 0)----(-2, 0) | | | | | | (0,-1)----(-1,-1)----(-2,-1) | | | | | | (0,-2)----(-1,-2)----(-2,-2) Aby bylo vše jasné, uvádíme příklad. Řekněme, že máte obrázek jménem main.png, který použijete pro hlavní okno: base = main, -1, -1 MPlayer zkusí načíst soubory main, main.png, main.PNG. Hlavní okno a ovládací panel Níže uvádíme seznam položek, které mohou být použity v blocích 'window = main' ... 'end', a 'window = playbar' ... 'end'. base = obrázek, X, Y Umožňuje nastavit obrázek pozadí hlavního okna. Okno bude vykresleno na zadaných souřadnicích X,Y na obrazovce a bude mít velikost obrázku. Tyto koordináty zatím nefungují pro okno display. Průhledné oblasti v obrázku (obarvené #FF00FF) budou černé na X serverech bez XShape rozšíření. Šířka obrázku musí být celočíselně dělitelná 8. button = obrázek, X, Y, šířka, výška, zpráva Umístí tlačítko rozměru šířka * výška na pozici X,Y. Zadaná zpráva je generována při kliku na tlačítko. Zadaný obrázek musí mít tři části pod sebou (odpovídající možným stavům tlačítka) takto: +------------+ | stisknuto | +------------+ | uvolněno | +------------+ | zakázáno | +------------+ decoration = enable|disable Zapne (enable) nebo vypne (disable) dekoraci hlavního okna, produkovanou okenním manažerem. Výchozí je disable. V okně display to nefunguje, není to potřeba. hpotmeter = tlačítko, tšířka, tvýška, fáze, počet_fází, výchozí, X, Y, šířka, výška, zpráva vpotmeter = tlačítko, tšířka, tvýška, fáze, počet_fází, výchozí, X, Y, šířka, výška, zpráva Umístí vodorovný (hpotmeter) nebo svislý (vpotmeter) potenciometr velikosti šířka * výška na pozici X,Y. Obrázek může být rozdělen do různých částí pro různé fáze potenciometru (Například můžete mít potenciometr pro nastavení hlasitosti, jehož dráha se barví ze zelené na červenou, jak se jeho hodnota mění od nejmenší do největší.). hpotmeter může mít táhlo, které může být vodorovně taženo. Význam parametrů: tlačítko - obrázek, ktrý se použije pro tlačítko (musí mít tři části pod sebou, stejně jako v případě tohoto tlačítka) tšířka, tvýška - velikost tlačítka fáze - obrázek použitý pro různé fáze hpotmetru. Pokud žádný obrázek nechcete, můžete použít speciální hodnotu NULL. Obrázek musí být rozdělen svisle na počet_fází částí takto: +------------+ | fáze #1 | +------------+ | fáze #2 | +------------+ ... +------------+ | fáze #n | +------------+ počet_fází - počet fází uložených v obrázku fáze výchozí - výchozí hodnota pro hpotmeter (v rozsahu 0100) X, Y - pozice pro hpotmeter šířka, výška - šířka a výška hpotmeteru zpráva - zpráva generovaná při změně hodnoty hpotmeteru potmeter = fáze, počet_fází, výchozí, X, Y, šířka, výška, zpráva hpotmeter bez tlačítka. (soudil bych, že byl míněn jako otočný, ale reaguje pouze na horizontální tažení.) Popis parametrů je stejný jako v hpotmeter. fáze mohou být NULL, ale je to vcelku k ničemu, jelikož nemůžete vidět, jak je nastaven potmeter. font = soubor_fontu, id_fontu Definuje font. soubor_fontu je jméno souboru popisu fontu s příponou .fnt (zde příponu nezadávejte). id_fontu je použit jako ukazatel na font (viz dlabel a slabel). Definováno může být více než 25 fontů. slabel = X, Y, id_fontu, "text" Umístí statický popisek na pozici X,Y. text je zobrazen fontem identifikovaným pomocí id_fontu. Text je surový řetězec ($x proměnné nefungují), který musí být uzavřen ve dvojitých uvozovkách (ale znak " nesmí být součástí textu). Popisek je zobrazen fontem identifikovaným pomocí id_fontu. dlabel = X, Y, délka, zarovnání, id_fontu, "text" Umístí dynamický popisek na pozici X,Y. Popisek je dynamický proto, že je jeho text periodicky obnovován. Maximální délka popisku je nastavena na délka (jeho výškou je výška znaku). Pokud je zobrazovaný text širší, pak bude rolován, jinak bude zarovnán do určeného prostoru podle hodnoty parametru zarovnání: 0 je zarovnání vpravo, 1 na střed, 2 vlevo. Text k zobrazení je zadán parametrem text: Musí být uzavřen do dvojitých uvozovek (ale znak " nesmí být součástí textu). Popisek je zobrazen fontem identifikovaným pomocí id_fontu. V textu můžete použít tyto proměnné: ProměnnáVýznam $1 čas přehrávání ve formátu hh:mm:ss $2 čas přehrávání ve formátu mmmm:ss $3 čas přehrávání ve formátu hh (hodiny) $4 čas přehrávání ve formátu mm (minuty) $5 čas přehrávání ve formátu ss (sekundy) $6 délka filmu ve formátu hh:mm:ss $7 délka filmu ve formátu mmmm:ss $8 čas přehrávání ve formátu h:mm:ss $v hlasitost ve formátu xxx.xx% $V hlasitost ve formátu xxx.xx $b stereováha ve formátu xxx.xx% $B stereováha ve formátu xxx.xx $$ znak $ $a znak podle typu audia (žádné: n, mono: m, stereo: t) $t číslo stopy (v playlistu) $o název souboru $f název souboru malými písmeny $F název souboru velkými písmeny $T znak podle typu datového proudu (soubor: f, Video CD: v, DVD: d, URL: u) $p znak p (pokud přehráváte soubor a font obsahuje znak p) $s znak s character (pokud přehráváte soubor a font obsahuje znak s) $e znak e (pokud je přehrávání pozastaveno a font obsahuje znak e) $x šířka filmu $y výška filmu $C název použitého kodeku Proměnné $a, $T, $p, $s a $e vracejí znaky, které by se měly zobrazit jako speciální symboly (například e je symbol pro pauzu, který obvykle vypadá asi takto ||). Měli byste mít font pro normální znaky a jiný font pro symboly. Pro více informací viz sekci symboly. Ovládací panel Následující vstupy mohou být použity v bloku 'window = sub' . . . 'end'. base = obrázek, X, Y, šířka, výška Obrázek, který bude zobrazen v okně. Okno se zobrazí na pozici zadané souřadnicemi X,Y na obrazovce (0,0 je levý horní roh). Můžete nastavit -1 pro střed a -2 pro vpravo (X) a dole (Y). Okno bude stejně velké jako obrázek. šířka a výška udávají velikost okna; jsou volitelné (pokud chybí, má okno rozměry shodné s obrázkem). background = R, G, B Umožňuje nastavit barvu pozadí. To je užitečné, pokud je obrázek menší než okno. R, G a B označují červenou, zelenou a modrou složku barvy (každá z nich je dekadická hodnota 0 až 255). Nabídka Jak již bylo dříve řečeno, nabídka je zobrazena pomocí dvou obrázků. Normální položky nabídky jsou brány z obrázku určeného položkou base, zatímco aktuálně zvolený vstup je brán z obrázku určeného položkou selected. Musíte definovat pozici a rozměr každé položky nabídky. Následující vstupy mohou být použity v bloku 'window = menu'. . .'end'. base = obrázek Obrázek normálních položek nabídky. selected = obrázek Obrázek nabídky kde jsou všechny položky vybrány. menu = X, Y, šířka, výška, zpráva Definuje pozici X,Y a rozměr položky nabídky v obrázku. zpráva je zpráva, generovaná jakmile je uvolněno tlačítko myši nad položkou. Fonty Jak jsme již zmínili v sekci o částech skinu, font je definován obrázkem a souborem popisu. Můžete rozmístit znaky v obrázku libovolně, ale ujistěte se, že je jejich velikost a pozice je uvedena v souboru popisu přesně. Soubor popisu fontu (s příponou .fnt) může obsahovat řádky s komentářem začínající ';'. Soubor musí obsahovat řádek ve formě image = obrázek Kde obrázek je název obrázku použitého pro font (nemusíte zadávat příponu). "char" = X, Y, šířka, výška Zde X a Y udávají pozici char znaku v obrázku (0,0 je levý horní roh). šířka a výška jsou rozměry znaku v pixelech. Tento příklad definuje znaky A, B, C s použítím font.png. ; Zde může být jen "font" místo "font.png". image = font.png ; Tři znaky pro ilustraci stačí :-) "A" = 0,0, 7,13 "B" = 7,0, 7,13 "C" = 14,0, 7,13 Symboly Některé znaky mají speciální význam, jsou-li vráceny některou z proměnných použitých v dlabel. Tyto znaky mají být zobrazovány jako symboly, takže mohou být zobrazeny věci jako pěkné DVD logo místo znaku 'd' pro DVD datový proud. Následující tabulka obsahuje znaky, které mohou být použity k zobrazení symbolů (a tudíž vyžadují odlišný font). ZnakSymbol pplay sstop epause nbez zvuku mmono zvuk tstereo zvuk fdatový proud je soubor vdatový proud je Video CD ddatový proud je DVD udatový proud je URL GUI zprávy Tyto zprávy mohou být generovány tlačítky, potenciometry a položkami nabídky. Některé zpráva nemusí pracovat podle očekávání (nebo vůbec). Jak víte, GUI je ve vývoji. Ovládání přehrávání: evNext Skočí na následující stopu v playlistu. evPause Tvoří přepínač společně s evPlaySwitchToPause. Ty mohou být použity k vytvoření tradičního play/pauza tlačítka. Obě zprávy by měly být přiřazeny tlačítkům umístěným na stejné pozici. Tato zpráva pozastaví přehrávání a zobrazen bude obrázek pro evPlaySwitchToPause talčítko (pro indikaci, že tlačítko může být stisknuto pro obnovení přehrávání). evPlay Zahájí přehrávání. evPlaySwitchToPause Protiklad evPauseSwitchToPlay. Tato zpráva zahájí přehrávání a zobrazí obrázek pro tlačítko evPauseSwitchToPlay (pro indikaci, že tlačítko může být stisknuto pro pozastavení přehrávání). evPrev Skočí na předchozí stopu v playlistu. evStop Zastaví přehrávání. Převíjení: evBackward10sec Převine zpět o 10 sekund. evBackward1min Převine zpět o 1 minutu. evBackward10min Převine zpět o 10 minut. evForward10sec Převine vpřed o 10 sekund. evForward1min Převine vpřed o 1 minutu. evForward10min Převine vpřed o 10 minut. evSetMoviePosition Převine na danou pozici (může být přiřazeno potenciometru; použije se relativní hodnota (0-100%) potenciometru). Ovládání videa: evHalfSize Nastaví velikost okna filmu na poloviční velikost. evDoubleSize Nastaví velikost okna filmu na dvojnásobnou velikost. evFullScreen Přepíná do celoobrazovkového režimu a zpět. evNormalSize Nastaví velikost okna na normální velikost. Ovládání zvuku: evDecAudioBufDelay Sníží zpoždění vyrovnávací paměti zvuku. evDecBalance Sníží hodnotu stereováhy. evDecVolume Sníží hlasitost. evIncAudioBufDelay Zvýší zpoždění vyrovnávací paměti zvuku. evIncBalance Zvýší hodnotu stereováhy. evIncVolume Zvýší hlasitost. evMute Vypne/zapne zvuk. evSetBalance Nastaví stereováhu (může být sdruženo s potenciometrem; použije se relativní hodnota potenciometru (0-100%)). evSetVolume Nastaví hlasitost (může být sdruženo s potenciometrem; použije se relativní hodnota potenciometru (0-100%)). Různé: evAbout Otevře okno o aplikaci. evDropSubtitle Vypne aktuálně použité titulky. evEqualizer Zapne/vypne ekvalizér. evExit Ukončí program. evIconify Minimalizuje okno. evLoad Otevře soubor (otevřením okna prohlížeče souborů, kde si soubor vyberete). evLoadPlay Stejné jako evLoad, ale navíc se okamžitě spustí přehrávání otevřeného souboru. evLoadSubtitle Otevře soubor s titulky (pomocí prohlížeče souborů) evLoadAudioFile Otevře soubor se zvukem (pomocí prohlížeče souborů) evNone Prázdná zpráva, nemá žádný efekt (možná s výjimkou CVS verzí :-)). evPlaylist Otevře/zavře okno playlistu. evPlayDVD Zkusí otevřít disk v zadané DVD-ROM mechanice. evPlayVCD Zkusí otevřít disk v zadané CD-ROM mechanice. evPreferences Otevře okno předvoleb. evSetAspect Nastaví poměr stran zobrazovaného obrázku. evSetURL Zobrazí dialogové okno pro volbu URL. evSkinBrowser Otevře okno voliče skinů.