<application>MPlayer</application> skin formátum Áttekintés Skin komponensek A Skin-ek eléggé szabad formátumúak (nem mint például a Winamp/XMMS, fix formátumú skin-jei), tehát csak rajtad múlik, hogy valami igazán nagyot alkoss. Jelenleg négy ablak van, amit dekorálni kell: a fő ablak, az alablak, a playbar és a skin menü (ami jobb kattintással aktiválható). A fő ablak és/vagy a playbar az, ahol vezérelheted az MPlayert. Az ablak háttere egy kép. Ebbe az ablakba különböző elemeket lehet (és kell) tenni: gombok, potméterek (csúszkák) és címkék. Minden egyes elemnek meg kell adnod a pozícióját és a méretét. Egy gombnak három állása van (lenyomott, felengedett, letiltott), így a képe függőlegesen három részre van osztva. Lásd a gomb elemet a részletekért. Egy potmeternek (főként a kereső sáv és a hangerő/balansz állító) bármennyi fázisa lehet a képének egymás alatti tetszőleges feldarabolásával. Lásd a hpotmetert és potmetert a részletekért. A címkék egy kicsit különlegesek: A megrajzolásukhoz szükséges karaktereket egy kép fájlból nyerjük és a képen lévő karaktereket egy betű leíró fájl írja le. Ez utóbbi egy sima szöveges fájl, ami megadja minden egyes betű x, y pozícióját és méretét a képen (a kép fájl és a hozzátartozó betű leíró fájl együtt alkot egy betűtípust). Lásd a dlabelt és az slabelt a részletekért. Az összes kép lehet teljes transzparens is, amint az a kép formátumokról szóló részben le van írva. Ha az X szerver nem támogatja az XShape kiterjesztést, a transzparensként megjelölt részek feketék lesznek. Ha használni akarod ezt a tulajdonságot, a fő ablak háttérképének 8-cal oszthatónak kell lennie. Az alablak az, ahol a film megjelenik. Egy megadott képet tud megjeleníteni, ha nincs film betöltve (elég unalmas egy üres ablak :-)) Megjegyzés: a transzparens kép nem megengedett itt. A skin menü csak az MPlayer vezérlésének egy módja menüpontok segítségével. Két kép kell a menühöz: az egyik a legjobb kép, ami a menüt mutatja normál állapotában, a másik a kiválasztott pont megjelenítésére lesz felhasználva. Ha kinyitod a menüt, az első kép látszódik. Ha az egeret az egyik menüpont fölé viszed, az aktuálisan kiválasztott pont bemásolódik a második képről az egér mutató alatti területre (a második képet soha sem lehet látni egészében). Egy menüpontot a képen lévő poziciója és a mérete határoz meg (lásd a skin menü részt). Van egy fontos dolog, amiről eddig nem beszéltünk: a gombokhoz, potméterekhez és menüpontokhoz tartozóan az MPlayer tudnia kell, hogy mit csináljon, ha rákattintanak. Ez üzenetekkel (eseményekkel) van megvalósítva. Minden elemhez meg kell adnod, hogy milyen üzenetet generál, amikor kattintanak rá. Képformátumok A képeknek truecolor-os (24 vagy 32 bpp) PNG-knek kell lenniük. A fő ablakban és a playbar-on (lásd lejjebb) használhatsz transzparens képeket: Az #FF00FF (bíborvörös) színnel feltöltött területek teljesen transzparensek lesznek, ha az MPlayer-rel nézed. Ez azt jelenti, hogy formázott ablakjaid is lehetnek, ha az X szerverednek van XShape kiterjesztése. Fájlok A következő fájlokra lesz szükséges, hogy el tudj készíteni egy skin-t: A konfigurációs fájl, aminek skin a neve, megmondja az MPlayernek, hogyan rakja össze a skin különböző részeit és hogy mit tegyen ha valahol kattintanak az ablakban. A fő ablak háttérképe. A fő ablakban lévő elemek képe (beleértve egy vagy több betű leíró fájlt, ami a címkék megrajzolásához kell). Az alablakban megjelenítendő kép (opcionális). Két kép a skin menünek (csak akkor szükséges, ha menüt akarsz csinálni). A skin konfigurációs fájl kivételével a többi fájlt úgy nevezed el, ahogy csak akarod (de jegyezd meg, hogy a betű leíró fájlnak .fnt kiterjesztéssel kell rendelkeznie). A skin fájl Amint fentebb már említettem, ez a skin konfigurációs fájl. Sor-orientált; a megjegyzést tartalmazó sorok egy ';' karakterrel kezdődnek (csak szóközök és tab-ok lehetnek a ';' előtt). A fájl szekciókból áll. Minden szekció a skin egy alkalmazását írja le a következő formában: section = szekció neve . . . end Jelenleg csak egy alkalmazás van, vagyis csak egy szekciót kell készítened: a neve movieplayer. Ebben a szekcióban minden ablakot egy blokk ír le a következő formában: window = ablak neve . . . end Ahol az ablak neve ezen karakterláncok valamelyike lehet: main - a főablak esetében sub - az alablak esetében menu - a skin menü esetében playbar - a playbar esetében (Az alablak és menü blokkok opcionálisak - nem kötelező menüt készítened vagy kidekorálni az alablakot.) Egy ablak blokkon belül az ablak minden elemét definiálhatod, egyet egy sorban, ebbe a formában: item = parameter Ahol az item egy karakterlánc, ami azonosítja az adott típusú GUI elemet, a parameter pedig egy numerikus vagy szöveges érték (vagy értékek listája vesszővel elválasztva). A fentieket összerakva a teljes fájl valahogy így néz ki: section = movieplayer window = main ; ... főablak elemei ... end window = sub ; ... alablak elemei ... end window = menu ; ... menü elemei ... end window = playbar ; ... playbar elemei ... end end Egy kép fájl nevét a hozzá vezető útvonal nélkül kell megadni - a képeknek a skins könyvtárban kell lenniük. A fájl kiterjesztését megadhatod (de nem kötelező). Ha a fájl nem létezik, az MPlayer megpróbálja betölteni a <filename>.<ext> fájlt, ahol png és PNG kerül az <ext> helyére (ebben a sorrendben). Az első megtalált fájlt fogja használni. Egy példa a tisztánlátáshoz. Tegyük fel, hogy van egy main.png nevű fájlod, amit a fő ablakhoz használsz: base = main, -1, -1 Az MPlayer megpróbálja betölteni a main, main.png, main.PNG fájlokat. Végül pár szó a pozícionálásról. A fő ablak és az alablak a képernyő különböző sarkaiba helyezhető az X és Y koordináták megadásával. A 0 fent vagy bal oldalt van, a -1 középen és a -2 jobb oldalt vagy lent, ahogy az itt is látható: (0, 0)----(-1, 0)----(-2, 0) | | | | | | (0,-1)----(-1,-1)----(-2,-1) | | | | | | (0,-2)----(-1,-2)----(-2,-2) Fő ablak és a playbar A következő bejegyzések használhatóak a 'window = main' ... 'end', és a 'window = playbar' ... 'end' blokkokban. base = image, X, Y Megadhatod vele a fő ablakban használt háttérképet. Az ablak a megadott X, Y pozícióban fog megjelenni a képernyőn. Az ablak mérete a kép méretével lesz azonos. Ezek a koordináták jelenleg nem működnek a megjelenítő ablak esetében. A kép transzparens részei (#FF00FF színű) feketeként jelenik meg az XShape kiterjesztés nélküli X szerverek esetében. A kép szélességének 8-cal oszthatónak kell lennie. button = image, X, Y, width, height, message Egy width * height méretű gomb megjelenítése az X, Y pozícióban. A megadott message üzenet akkor generálódik, amikor a gombot megnyomják. Az image által megadott képnek három részt kell tartalmaznia egymás alatt (a gomb állapotainak megfelelően), így: +-------------+ | benyomott | +-------------+ | felengedett | +-------------+ | letiltott | +-------------+ decoration = enable|disable Engedélyezi vagy letiltja a főablakban az ablakkezelő dekorációját. Alapértelmezetten disable. Ez nem működik a megjelenítő ablakban, nincs rá szükség. hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message vpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message Egy vízszintes (hpotmeter) vagy függőleges (vpotmeter) potméter megjelenítése width * height méretben az X, Y pozícióban. A kép több különböző részre osztható a potméter különböző fázisainak megfelelően (például lehet egy pot-od a hangerő szabályozásához, ami zöldből pirosba vált, ahogy az értéke változik a minimumtól a maximumig). A hpotmeter-nek lehet egy gombja is, amit vízszintesen lehet húzni. A paraméterek: button - a gombként használt kép (három részt kell tartalmaznia egymás alatt, mint a gomb esetében) bwidth, bheight - a gomb mérete phases - a hpotmeter különböző fázisaiban használt kép neve. Speciális értékként a NULL is használható, ha nem akarsz ilyen képet. A képet függőlegesen numphases részre kell felosztani így: +------------+ | 1. fázis | +------------+ | 2. fázis | +------------+ ... +------------+ | n. fázis | +------------+ numphases - a phases képen lévő fázisok száma default - a hpotmeter alapértelmezett értéke (0 és 100 között) X, Y - a hpotmeter pozíciója width, height - a hpotmeter szélessége és magassága message - az üzenet, ami a hpotmeter értékének megváltozásakor generálódik potmeter = phases, numphases, default, X, Y, width, height, message Egy hpotmeter gomb nélkül. (Gondolom a megfordítása volt az eredeti cél, de csak a vízszintes vonszolásra reagál.) A paraméterek leírását lásd a hpotmeter-nél. A phases lehet NULL, de ez eléggé haszontalan, mivel akkor nem látod, hogy a potmeter hova van állítva. font = fontfile, fontid Egy betűt definiál. A fontfile a betű leíró fájl neve egy .fnt kiterjesztéssel (a kiterjesztést ne add meg itt). A fontid-t a betűre történő hivatkozásokhoz lehet használni (lásd dlabel és slabel). 25 betűt lehet definiálni. slabel = X, Y, fontid, "text" Egy statikus címkét tesz ki az X, Y pozícióba. A text szöveget jeleníti meg a fontid-vel azonosított betűtípussal. A szöveg egyszerű karakterlánc (az $x változók nem működnek) amit dupla idézőjelek közé kell írni (de a " karakter nem lehet a szöveg része). A címke a fontid-vel azonosított betűtípussal jelenik meg. dlabel = X, Y, length, align, fontid, "text" Egy dinamikus címkét tesz ki az X, Y pozícióba. A címke azért dinamikus, mert a szövege periódikusan frissül. A címke maximum hosszát a length szabályozza (a magassága egy karakter magasságával egyezik meg). Ha a megjelenítendő szöveg szélesebb ennél, scrollozva lesz, különben az align paraméter által megadott módon pozícionálódik: 0 jobbra, 1 középre, 2 balra igazítva. A megjelenítendő szöveget a text adja meg: dupla idézőjelek közé kell írni (de a " karakter nem lehet része a szövegnek). A címke a fontid által meghatározott betűtípussal jelenik meg. A szövegben a következő változókat használhatod: VáltozóJelentés $1 lejátszási idő hh:mm:ss formátumban $2 lejátszási idő mmmm:ss formátumban $3 lejátszási idő hh formátumban (órák) $4 lejátszási idő mm formátumban (percek) $5 lejátszási idő ss formátumban (másodpercek) $6 film hossza hh:mm:ss formátumban $7 film hossza mmmm:ss formátumban $8 film hossza h:mm:ss formátumban $v hangerő xxx.xx% formátumban $V hangerő xxx.xx formátumban $b balansz xxx.xx% formátumban $B balansz xxx.xx formátumban $$ az $ karakter $a egy karakter az audió típusnak megfelelően (nincs: n, mono: m, sztereo: t) $t sáv száma (a lejátszási listában) $o fájlnév $f fájlnév kisbetűsen $F fájlnév nagybetűsen $T egy karakter a folyam típusnak megfelelően (file: f, Video CD: v, DVD: d, URL: u) $p a p karakter (ha a film lejátszás alatt van és a betűtípusban van p karakter) $s az s karakter (ha a film meg van állítva movie és a betűtípusban van s karakter) $e az e karakter (ha a lejátszás szünetel és a betűtípusban van e karakter) $x film szélessége $y film magassága $C használt codec neve Az $a, $T, $p, $s és $e változók mind karakterekkel térnek vissza, amiket speciális szimbólumként kell megjeleníteni (például az e a pillanatállj szimbóluma, ami általában valami ilyesmi: ||). Szükséged lesz egy normál karaktereket tartalmazó betűtípusra és egy másikra a szimbólumokhoz. Lásd a szimbólumokról szóló részt a további információkért. Alablak A következő bejegyzések használhatóak a 'window = sub' . . . 'end' blokkban. base = image, X, Y, width, height Az ablakban megjelenítendő kép. Az ablak a megadott X, Y pozícióban jelenik meg a képernyőn (0,0 a bal felső sarok). A -1 a középre, a -2 a jobbra (X) és le (Y) igazítást jelenti. Az ablak akkora lesz, amekkora a kép. A width és a height az ablak méretét írják elő, opcionálisak (ha hiányoznak, az ablak ugyan akkora méretű lesz, mint a kép). background = R, G, B Beállíthatod vele a háttér színét. Hasznos, ha a kép kisebb, mint az ablak mérete. Az R, G és B a szín vörös, zöld és kék komponensét adja meg (mindegyik decimális szám 0-tól 255-ig). Skin menü Amint korábban már említettem, a menü két kép segítségével kerül megjelenítésre. A normál menü bejegyzések a base elemmel megadott képen láthatóak, míg az épp aktuálisan kiválasztott elem megjelenítése a selected elemről történik. Meg kell adnod minden egyes menüpont pozícióját és méretét. A következő bejegyzések használhatóak a 'window = menu'. . .'end' blokkban. base = image A normál menüpontokat tartalmazó kép. selected = image Az összes menüpontot kiválasztva ábrázoló kép. menu = X, Y, width, height, message Megadja egy menüelem X, Y pozícióját és a méretét a képen. A message egy üzenet, ami az egérgomb menüponton történő felengedésekor generálódik. Betűk Amint azt már a skin elemeiről szóló részben is említettem, egy betűtípust egy kép és egy leíró fájl alkot. A karaktereket bárhová teheted a képen, de győződj meg róla, hogy a pozíciójuk és a méretük pontosan meg van adva a leíró fájlban. A betű leíró fájl (az .fnt kiterjesztéssel) tartalmazhat megjegyzéseket, melyek ';'-vel kezdődő sorokban kapnak helyet. A fájlban kell, hogy szerepeljenek az alábbi sorok: image = image Ahol az image a betűhöz használt kép fájl neve (nem kell megadnod a kiterjesztést). "char" = X, Y, width, height Itt az X és az Y a char karakter pozícióját adja meg a képen (0,0 a bal felső sarok). A width és a height a karakter méretei pixelben. Ez a példa az A, B, C karaktereket definiálja a font.png felhasználásával. ; Lehet "font" is a "font.png" helyett. image = font.png ; Három karakter elég a bemutatáshoz :-) "A" = 0,0, 7,13 "B" = 7,0, 7,13 "C" = 14,0, 7,13 Szimbólumok Néhány karakternek speciális jelentése van, ha dlabel-ben használva valamelyik változó tér vissza vele. Ezeket a karaktereket szimbólumokként kell megjeleníteni, így például egy szép DVD logó jelenhet meg a 'd' karakter helyett egy DVD folyam esetén. Az alábbi táblázat a szimbólumként megjeleníthető (és így külön betűtípust igénylő) karaktereket tartalmazza. KarakterSzimbólum plejátszás sstop epillanatállj nnincs hang mmono hang tsztereó hang fa folyam egy fájl va folyam egy Video CD da folyam egy DVD ua folyam egy URL GUI üzenetek Az alábbi üzeneteket generálják a gombok, potméterek és menüpontok. Lejátszás vezérlése: evNext ugrás a következő sávra a lejátszási listában. evPause Párt alkot az evPlaySwitchToPause-val. Egy általános lejátszás/szünet gomb készítéséhez használhatóak fel. Mind a két üzenetet egy olyan gombhoz kell hozzárendelni, ami teljesen ugyan ott jelenik meg az ablakban. Ez az üzenet megállítja a lejátszást és megjelenteti az evPlaySwitchToPause gombhoz tartozó képet (jelezve ezzel, hogy a gombot meg lehet nyomni a lejátszás folytatásához). evPlay Lejátszás elindítása. evPlaySwitchToPause Az evPauseSwitchToPlay ellentéte. Ez az üzenet elkezdi a lejátszást és megjelenteti az evPauseSwitchToPlay gomb képét (jelezve ezzel, hogy a gombot meg lehet nyomni a lejátszás megállításához). evPrev Az előző sávra ugrik a lejátszási listában. evStop Lejátszás megállítása. Seeking: evBackward10sec Visszalépés 10 másodperccel. evBackward1min Visszalépés 1 perccel. evBackward10min Visszalépés 10 perccel. evForward10sec Előrelépés 10 másodperccel. evForward1min Előrelépés 1 perccel. evForward10min Előrelépés 10 perccel. evSetMoviePosition Ugrás a pozícióhoz (potméter tudja használni; a potméter relatív értékét (0-100%) használja). Videó vezérlés: evHalfSize Film ablak méretének felezése. evDoubleSize Film ablak méretének duplázása. evFullScreen Teljes képernyős mód be-/kikapcsolása. evNormalSize Film ablak normál méretének beállítása. Audió vezérlés: evDecAudioBufDelay Audió buffer késleltetésének csökkentése. evDecBalance Balansz csökkentése. evDecVolume Hangerő csökkentése. evIncAudioBufDelay Audió buffer késleltetésének növelése. evIncBalance Balansz növelése. evIncVolume Hangerő növelése. evMute Hang ki-/bekapcsolása. evSetBalance Balansz beállítása (potméter tudja használni; a potméter relatív értékét (0-100%) használja). evSetVolume Hangerő beállítása (potméter tudja használni; a potméter relatív értékét (0-100%) használja). Vegyes: evAbout Programinformációs ablak megnyitása. evDropSubtitle Aktuálisan használt felirat letiltása. evEqualizer Equalizer be-/kikapcsolása. evExit Kilépés a programból. evIconify Ablak összecsukása kis méretűvé. evLoad Fájl betöltése (a fájl böngésző ablak megnyitásával, ahol kiválaszthatod a fájlt). evLoadPlay Ugyan azt csinálja, mint az evLoad, de automatikusan elkezdi lejátszani a fájlt, miután betöltötte. evLoadSubtitle Felirat fájl betöltése (a fájl választóval) evLoadAudioFile Audió fájl betöltése (a fájl választóval) evNone Üres üzenet, nincs hatása (kivéve talán a Subversion verziót :-)). evPlaylist Lejátszási lista ablak megnyitása/becsukása. evPlayDVD Megpróbálja megnyitni az adott DVD-ROM meghajtóban lévő lemezt. evPlayVCD Megpróbálja megnyitni az adott CD-ROM meghajtóban lévő lemezt. evPreferences Megnyitja a beállítások ablakot. evSetAspect Beállítja a megjelenített kép arányát. evSetURL Megjeleníti az URL dialógus ablakot. evSkinBrowser Megnyitja a skin böngésző ablakot. Minőségi skin-ek készítése Tehát végigolvastad az MPlayer GUI-jához történő skin készítés leírását, megtettél minden tőled telhetőt a Gimppel és el szeretnéd küldeni nekünk a skin-ed? Olvass még egy kicsit tovább, hogy elkerüld a gyakori hibákat és minőségi skin-t tudj készíteni. Szeretnénk, ha a skin-ek, amit beveszünk a listánkba, megfelelnének bizonyos minőségi elvárásoknak. Ezen kívül van még pár dolog, amivel a mi életünket könnyítheted meg. Példaként nézd meg a a Blue skin-t, az teljesíti az összes lent felsorolt kritériumot az 1.5-ös verzió óta. Minden skin-nek tartalmaznia kell egy README fájlt, ami tartalmazza az információkat rólad, a szerzőről, a szerzői jogi és licensz figyelmeztetéseket és bármi mást, amit még bele akarsz írni. Ha szeretnél changelog-ot, ez a fájl jó hely neki. Kell lennie egy VERSION fájlnak, melyben semmi más nincs, csak a skin verziószáma egyetlen egy sorban (pl. 1.0). A vízszintes és függőleges irányítókon (csúszkák a hangerőnek és a pozíciónak) a gombjuk középpontjának pontosan középen kell lennie, a csúszka felénél. A gombot mindkét irányban ki kell tudni húzni a csúszka végéig, de azon túl nem. A skin elemeit megfelelő méretűnek kell deklarálni a skin fájlban. Ha nem így van, akkor kattintani tudsz pl. a gombon kívül és mégis megnyomod vagy egy területen belül kattintasz és nem lesz hatása. A skin fájlnak jól formázottnak kell lennie és nem tartalmazhat tab-okat. A jól formázottság azt jelenti, hogy a számoknak szépen oszlopokban kell lenniük.