MPlayer skin formátumÁttekintés
Igazából ennek nincs köze a skin formátumához, de tudnod kell, hogy
az MPlayernek
nincs beépített skin-je,
így legalább egy skin-nek telepítve kell
lennie, hogy használni tudd a GUI-t.Könyvtárak
Az alábbi könyvtárak kerülnek átvizsgálásra (sorrendben):
$(DATADIR)/skins/$(PREFIX)/share/mplayer/skins/~/.mplayer/skins/
Figyelj rá, hogy az első elérési út változhat az
MPlayer konfigurációjának megfelelően
(lásd a configure script
és kapcsolóit).
Minden skin a saját könyvtárába kerül telepítésre a fent felsorolt könyvtárakon
belül, például:
$(PREFIX)/share/mplayer/skins/default/KépformátumokA 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.
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á.
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$1lejátszási idő hh:mm:ss formátumban$2lejátszási idő mmmm:ss formátumban$3lejátszási idő hh formátumban (órák)$4lejátszási idő mm formátumban (percek)$5lejátszási idő ss formátumban (másodpercek)$6film hossza hh:mm:ss formátumban$7film hossza mmmm:ss formátumban$8film hossza h:mm:ss formátumban$vhangerő xxx.xx% formátumban$Vhangerő xxx.xx formátumban$bbalansz xxx.xx% formátumban$Bbalansz xxx.xx formátumban$$az $ karakter$aegy karakter az audió típusnak megfelelően (nincs: n,
mono: m, sztereo: t)$tsáv száma (a lejátszási listában)$ofájlnév$ffájlnév kisbetűsen$Ffájlnév nagybetűsen$T
egy karakter a folyam típusnak megfelelően (file: f,
Video CD: v, DVD: d,
URL: u)
$pa p karakter (ha a film lejátszás alatt van és a
betűtípusban van p karakter)$saz s karakter (ha a film meg van állítva movie és
a betűtípusban van s karakter)$eaz e karakter (ha a lejátszás szünetel és a
betűtípusban van e karakter)$xfilm szélessége$yfilm magassága$Chaszná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ólumplejátszássstopepillanatálljnnincs hangmmono hangtsztereó hangfa folyam egy fájlva folyam egy Video CDda folyam egy DVDua folyam egy URLGUI ü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ájlválasztóval)
evLoadAudioFile
Audió fájl betöltése (a fájlvá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.