MPlayers SkinformatÜberblick
Es hat nicht wirklich etwas mit dem Skinformat zu tun, aber du solltest
wissen, dass MPlayerkein
eingebautes Skin besitzt, also muss zumindest ein Skin
installiert sein, damit das GUI verwendet werden kann.Verzeichnisse
Die nach Skins durchsuchten Verzeichnisse sind (der Reihe nach):
$(DATADIR)/skins/$(PREFIX)/share/mplayer/skins/~/.mplayer/skins/
Beachte, dass der erste Pfad je nach Art der
MPlayer-Konfiguration variieren kann
(siehe Argumente und
des configure-Scripts).
Jedes Skin wird in sein eigenes Verzeichnis unterhalb einem der oben
aufgeführten Verzeichnisse installiert, zum Beispiel:
$(PREFIX)/share/mplayer/skins/default/Bildformate
Die Bilder müssen Truecolor-PNGs sein (24 oder 32 bpp).
Im Hauptfenster und in der Abspielleiste (siehe unten) kannst du Bilder
mit 'Transparenz' verwenden: Mit der Farbe #FF00FF (Magenta) gefüllte Bereiche
sind beim Betrachten mit MPlayer voll transparent.
Dies bedeutet, dass du sogar Formfenster haben kannst, wenn dein X-Server die
XShape-Extension besitzt.
Skin-Komponenten
Skins sind ziemlich frei im Format (im Unterschied zu den Skins mit festem
Format von Winamp/XMMS
zum Beispiel), somit liegt es an dir, einen tollen zu kreieren.
Zur Zeit sind vier Fenster zu dekorieren: das
Hauptfenster, das
Unterfenster, die
Abspielleitse und das
Skin-Menü (das durch einen
Rechtsklick aktiviert werden kann).
Das Hauptfenster und/oder die
Abspielleiste befindet sich dort, wo du
MPlayer kontrollieren kannst. Der Hintergrund
des Fensters ist eine Grafik.
Ins Fenster können (und müssen) diverse Elemente platziert werden:
Buttons, Potentiometer (Schieberegler)
und Labels.
Für jedes Element musst du dessen Position und Größe angeben.
Ein Button besitzt drei Zustände (gedrückt,
losgelassen, deaktiviert), deshalb muss seine Grafik vertikal in drei Teile
getrennt werden. Siehe Eintrag Button
für mehr Details.
Ein Potentiometer (hauptsächlich für
die Suchleiste und die Lautstärke-/Balance-Regler) kann durch die Aufteilung
der Grafik in verschiedene untereinander liegende Teile
eine beliebige Anzahl von Phasen haben. Siehe
hpotmeter und
potmeter für Details.
Labels sind ein wenig speziell: Die Zeichen,
die man zu ihrer Darstellung benötigt, werden von einer Grafikdatei und
die Zeichen in der Grafik durch eine
Schrift-Beschreibungsdatei festgelegt.
Letztere ist eine Volltextdatei, welche die x-,y-Position und Größe jedes
Zeichens in der Grafik beschreibt (die Grafikdatei und ihre
Schrift-Beschreibungsdatei bilden zusammen eine Schrift).
Siehe
dlabel
und
slabel für Details.
Alle Grafiken können wie im Abschnitt über die
Grafikformate erklärt
volle Transparenz besitzen. Wenn der X-Server keine XShape-Extension
unterstützt, werden die als transparent markierten Teile schwarz.
Wenn du dieses Feature gerne nutzen möchtest, muss die Breite der
Hintergrundgrafik des Hauptfensters durch 8 teilbar sein.
Das Unterfenster ist dort, wo der Film
erscheint. Es kann eine festgelegte Grafik anzeigen, wenn kein Film geladen
ist (es ist ziemlich langweilig, ein leeres Fenster vor sich zu haben :-))
Beachte: Transparenz ist hier
nicht erlaubt.
Das Skin-Menü ist ganz einfach ein
Weg, MPlayer mittels der Menüeinträge zu
kontrollieren. Zwei Grafiken sind für das Menü erforderlich:
eine davon ist die Basisgrafik, die den Normalzustand des Menüs darstellt,
die andere wird zur Anzeige der gewählten Einträge verwendet.
Wenn du das Menü aufklappst, wird die erste Grafik angezeigt. Bewegst du
die Maus über die Menüeinträge, wird der aktuell gewählte Eintrag aus der
zweiten Grafik über den Menüeintrag unterhalb des Mauszeigers kopiert
(die zweite Grafik wird nie als ganzes angezeigt).
Ein Menüeintrag wird definiert durch seine Position und Größe innerhalb
der Grafik (sieh nach mehr Details im Abschnitt über das
Skin-Menü).
Eine wichtige Sache wurde noch nicht aufgeführt: Damit Buttons, Potentiometer und
Menüeinträge funktionieren, muss MPlayer wissen, was
er machen soll, wenn sie angeklickt werden.
Dies geschieht mittels Meldungen (Ereignisse).
Für diese Elemente musst du die beim Klick auf sie zu generierenden Meldungen
definieren.
Dateien
Du benötigst folgende Dateien, um ein Skin zu bauen:
Die Konfigurationsdatei genannt skin erzählt
MPlayer, wie unterschiedliche Teile des Skins
zusammengefügt werden und was er tun soll, wenn du irgendwo innerhalb des Fenster
hinklickst.
Die Hintergrundgrafik fürs Hauptfenster.
Grafiken für die Elemente im Hauptfenster (einschließlich einer oder mehrerer
Schrift-Beschreibungsdateien zum Zeichnen der Labels).
Die Grafik, die im Unterfenster angezeigt werden soll (optional).
Zwei Grafiken für das Skin-Menü (sie werden nur gebraucht, wenn du
ein Menü erzeugen möchtest).
Mit Ausnahme der skin-Konfigurationsdatei kannst du die anderen Dateien
benennen, wie es dir beliebt (beachte aber, dass Schrift-Beschreibungsdateien
eine .fnt-Erweiterung besitzen müssen).
Die skin-Datei
Wie oben erwähnt, ist dies die skin-Konfigurationsdatei. Sie ist
Zeilen-orientiert;
Kommentarzeilen beginnen mit einem ';' Semikolon
am Zeilenanfang (es sind nur Leer- und Tabulator-Zeichen vor dem
';' erlaubt).
Die Datei ist in Abschnitte unterteilt. Jeder Abschnitt beschreibt den Skin
für eine Anwendung und besitzt folgende Form:
section = Abschnittsname
.
.
.
end
Zur Zeit gibt es nur eine Anwendung, somit brauchst du nur einen Abschnitt:
Sein Name ist movieplayer.
Innerhalb dieses Abschnitts wird jedes Fenster durch einen Block folgender
Form beschrieben:
window = Fenstername
.
.
.
end
wobei Fenstername einer dieser Zeichenketten sein
kann:
main - für das Hauptfenstersub - für das Unterfenstermenu - für das Skin-Menüplaybar - Abspielleiste
(Die sub- und menu-Blöcke sind optional - du musst kein Menü erzeugen oder
das Unterfenster dekorieren.)
Innerhalb des Fensterblocks kannst du jedes Element für das Fenster durch eine
Zeile dieser Form definieren:
Element = Parameter
Wobei Element eine Zeichenkette ist, die den Typ des GUI-Elements
identifiziert, Parameter ist ein numerischer oder textueller
Wert (oder eine Liste Komma-getrennter Werte).
Fügt man nun das oben genannte zusammen, sieht die komplette Datei etwa so aus:
section = movieplayer
window = main
; ... Elemente für das Hauptfenster ...
end
window = sub
; ... Elemente für das Unterfenster ...
end
window = menu
; ... Elemente für das Menü ...
end
window = playbar
; ... Elemente für die Abspielleiste ...
end
end
Der Name einer Grafikdatei muss ohne führende Pfadangaben angegeben werden -
Grafiken werden im Verzeichnis skins
gesucht.
Du kannst (musst aber nicht) die Erweiterung der Datei spezifizieren.
Existiert die Datei nicht, versucht MPlayer die Datei
<Dateiname>.<ext> zu laden, wobei
png und PNG als
<ext> (Erweiterung) probiert werden
(in dieser Reihenfolge). Die erste zutreffende Datei wird verwendet.
Zum Schluss einige Worte zur Positionierung.
Hauptfenster und Unterfenster können in verschiedenen Ecken des Bilschirms
über die X- und Y-Koordinaten
platziert werden. 0 ist oben oder links,
-1 bedeutet zentriert und -2 ist
rechts oder unten, wie in dieser Illustration gezeigt:
(0, 0)----(-1, 0)----(-2, 0)
| | |
| | |
(0,-1)----(-1,-1)----(-2,-1)
| | |
| | |
(0,-2)----(-1,-2)----(-2,-2)
Hier ein Beispiel, um es zu verdeutlichen. Angenommen, du hast eine Grafik
mit Namen main.png, die du für das Hauptfenster nutzt:
base = main, -1, -1MPlayer versucht, die Dateien
main,
main.png,
main.PNG
zu laden.
Hauptfenster und Abspielleiste
Unten steht eine Liste von Einträgen, die in den Blöcken
'window = main' ... 'end',
und 'window = playbar' ... 'end'
genutzt werden können.
base = image, X, Y
Lässt dich die Hintergrundgrafik fürs Hauptfenster spezifizieren.
Das Fenster wird an der angegebenen Position X,Y auf
dem Bildschirm erscheinen. Es wird die Größe der Grafik besitzen.
Diese Koordinaten funktionieren im Moment nicht beim Anzeigefenster.
Transparente Bereiche innerhalb der Grafik (mit der Farbe #FF00FF) erscheinen
auf X-Servern ohne die XShape-Extension schwarz. Die Breite der Grafik muss
durch 8 teilbar sein.
button = image, X, Y, width, height, message
Platziere einen Button mit der Größe width * height
an Position X,Y. Die angegebene message wird
erzeugt, wenn der Button angeklickt wird. Die mittels image
festgelegte Grafik muss drei untereinander liegende Teile aufweisen (entsprechend
der möglichen Zustände des Buttons), etwa so:
+---------------+
| gedrückt |
+---------------+
| losgelassen |
+---------------+
| deaktiviert |
+---------------+
decoration = enable|disable
Aktiviere oder deaktiviere die Fenstermanager-Dekoration des Hauptfensters.
Standard ist disable.
Dies funktioniert nicht beim Anzeigefenster, dort braucht man es nicht.
hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
vpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
Platziere einen horizontal (hpotmeter) oder vertikal (vpotmeter) Potentiometer mit
der Größe width * height an Position
X,Y. Die Grafik kann in unterschiedliche Teile für die
verschiedenen Phasen des Potentiometers aufgeteilt werden (du kannst zum Beispiel
eines für die Lautstärkeregelung haben, das von rot nach grün wechselt, während sich
sein Wert vom Minimum zum Maximum ändert.).
hpotmeter kann einen Button besitzen, der horizontal gezogen
werden kann. Die Parameter sind:
button - die für den Button zu verwendende
Grafik (muss drei untereinander liegende Teile aufweisen, wie im Fall des
Buttons)
bwidth, bheight - Größe
des Buttons
phases - die für die verschiedenen Phasen
zu verwendende Grafik des hpotmeter. Ein spezieller Wert von NULL
kann benutzt werden, wenn du keine solche Grafik anwenden willst. Die Grafik muss
vertikal in numphases Teile wie folgt aufgeteilt werden:
+------------+
| phase #1 |
+------------+
| phase #2 |
+------------+
...
+------------+
| phase #n |
+------------+
numphases - Anzahl der Phasen, die in der
phases-Grafik untergebracht sind
default - Standardwert für hpotmeter
(im Bereich 0 bis 100)
X, Y - Position fürs hpotmeter
width, height - Breite und Höhe
des hpotmetermessage - die Meldung, die erzeugt werden soll,
wenn der Wert des hpotmeter geändert wird
potmeter = phases, numphases, default, X, Y, width, height, message
Ein hpotmeter ohne einen Button. (ich schätze, es ist dazu
bestimmt, herumgedreht zu werden, reagiert aber nur auf horizontales Ziehen.)
Eine Beschreibung der Parameter findest du unter
hpotmeter.
phases können NULL sein, dies ist aber ziemlich
sinnlos, da du nicht sehen kannst, wo das Potentiometer hingesetzt
wurde.
font = fontfile, fontid
Definiert eine Schrift. fontfile ist der Name der
Schrift-Beschreibungsdatei mit der Erweiterung .fnt
(gieb hier keine Erweiterung an).
fontid wird verwendet, um auf die Schrift zu verweisen
(siehe dlabel
und slabel). Bis zu 25 Schriften können
definiert werden.
slabel = X, Y, fontid, "text"
Platziere ein statisches Label an Position X,Y.
text wird mittels der identifizierten
fontid angezeigt. Der Text ist einfach ein
eine Ausgangszeichenkette ($x-Variablen funktionieren nicht),
eingeschlossen von doppelten Anführungszeichen (das "-Zeichen kann jedoch
nicht Teil des Textes sein).
Das Label wird mittels der über die fontid identifizierten
Schrift angezeigt.
dlabel = X, Y, length, align, fontid, "text"
Platziere ein dynamisches Label an Position X,Y.
Das Label wird als dynamisch bezeichnet, weil sein Text periodisch
aktualisiert wird. Die Maximallänge des Labels wird mit dem
Wert length vorgegeben (seine Höhe ist die der
Zeichen).
Wird der anzuzeigende Text breiter als dieser Wert, wird er gescrollt,
andernfalls wird er innerhalb des Mittels des Wertes des vom
align-Parameter festgelegten Zwischenraums ausgerichtet:
0 steht für rechts,
1 steht für zentriert,
2 steht für links.
Der anzuzeigende Text wird mit text festgelegt:
Er muss zwischen doppelten Anführungszeichen stehen (das "-Zeichen kann jedoch
nicht Teil des Textes sein).
Das Label wird mittels der über die fontid identifizierten
Schrift angezeigt.
Du kannst folgende Variablen im Text verwenden:
VariableBedeutung$1Abspieldauer im hh:mm:ss-Format$2Abspieldauer im mmmm:ss-Format$3Abspieldauer im hh-Format (Stunden)$4Abspieldauer im mm-Format (Minuten)$5Abspieldauer im ss-Format (Sekunden)$6Filmlänge im hh:mm:ss-Format$7Filmlänge im mmmm:ss-Format$8Abspieldauer im h:mm:ss-Format$vLautstärke im xxx.xx%-Format$VLautstärke im xxx.xx-Format$bBalance im xxx.xx%-Format$BBalance in xxx.xx-Format$$das $-Zeichen$aein dem Audio-Typ entsprechendes Zeichen (Nichts: n,
Mono: m, Stereo: t)$tTrack-Nummer (in der Playliste)$oDateiname$fDateiname in kleinbuchstaben$FDateiname in GROSSBUCHSTABEN$TEin dem Streamtyp entsprechendes Zeichen (Datei: f,
Video-CD: v, DVD: d, URL: u)$pDas p-Zeichen (wenn ein Film abgespielt wird und die Schrift
das Zeichen p enthält)$sDas s-Zeichen (wenn ein Film angehalten wird und die Schrift
das Zeichen s enthält)$eDas e-Zeichen (wenn ein Film pausiert wird und die Schrift
das Zeichen e enthält)$xFilmbreite$yFilmhöhe$CName des verwendeten Codecs
Die Variablen $a, $T, $p, $s und $e
geben alle Zeichen zurück, die als spezielle Symbole angezeigt werden sollen
(zum Beispiel steht e für das Pause-Symbol, welches gewöhnlich
etwa so || aussieht).
Du solltest eine Schrift für normale Zeichen und eine weitere Schrift für
Symbole haben. Schau in den Abschnitt über
Symbole
für mehr Informationen.
Unterfenster
Die folgenden Einträge können in diesem Block verwendet werden
'window = sub' . . . 'end'.
base = image, X, Y, Breite, Hoehe
Die im Fenster anzuzeigende Grafik. Das Fenster wird an der angegebenen
Position X,Y auf dem Bildschirm erscheinen
(0,0 ist die obere linke Ecke).
Du kannst -1 für zentriert und -2
für rechts (X) und unten (Y) festlegen.
Das Fenster wird so groß sein wie die Grafik.
Breite und Höhe
kennzeichnen die Größe des Fensters; sie sind optional (wenn sie fehlen, hat
das Fenster dieselbe Größe wie die Grafik).
background = R, G, B
Lässt dich die Hintergrundfarbe setzen. Dies ist von Nutzen, wenn die Grafik
kleiner ist als das Fenster.
R, G und B
spezifizieren die Rot-, Grün- und Blau-Komponenten der Farbe (jede davon ist
eine Dezimalzahl von 0 bis 255).
Skin-Menü
Wie bereits zuvor erwähnt, wird das Menü mittels zweier Grafiken dargestellt.
Normale Menüeinträge werden aus der Grafik entnommen, die durch das Element
base festgelegt sind, während der aktuell gewählte Eintrag
aus der Grafik entnommen wird, die durch das Element selected
spezifiziert wurde. Du musst Position und Größe jedes Menüeintrags mittels des
Elements menu definieren.
Die folgenden Einträge können im Block
'window = menu'. . .'end' genutzt werden.
base = image
Die Grafik für normale Menüeinträge.
selected = image
Die Grafik, die das Menü mit allen gewählten Einträgen anzeigt.
menu = X, Y, Breite, Höhe, Nachricht
Definiert die Position X,Y und die Größe eines Menüeintrags
innerhalb der Grafik. Nachricht ist die Meldung, die erzeugt
werden soll, wenn die Maustaste über dem Eintrag losgelassen wird.
Schriften
Wie im Abschnitt über die Skin-Teile beschrieben, wird eine Schrift durch eine
Grafik und eine Beschreibungsdatei definiert. Du kannst die Zeichen irgendwo
innerhalb der Grafik platzieren, aber stell sicher, dass Position und Größe
der Zeichen in der Beschreibungsdatei exakt angegeben sind.
Die Schrift-Beschreibungsdatei (mit Erweiterung .fnt)
kann mit ';' beginnende Kommentarzeilen enthalten.
Die Datei muss eine Zeile in der Form enthalten
image = image
Wobei image der Name der für
die Schrift anzuwendenden Grafikdatei ist (du musst keine Erweiterung angeben).
"char" = X, Y, width, hight
Hier legen X und Y die Position des
char-Zeichens innerhalb der Grafik fest
(0,0 steht für die obere linke Ecke).
width und height sind die Maße der
Zeichen in Pixel.
Dieses Beispiel definiert die Zeichen A, B, C unter Anwendung von
font.png.
; Kann eine "Schrift" anstatt "font.png" sein.
image = font.png
; Drei Zeichen reichen zu Demonstrationszwecken :-)
"A" = 0,0, 7,13
"B" = 7,0, 7,13
"C" = 14,0, 7,13
Symbole
Einige Zeichen haben spezielle Bedeutungen, wenn sie von bestimmten
Variablen in dlabel zurückgegeben
werden. Diese Zeichen sind dazu gedacht, als Symbole angezeigt zu werden,
so dass Dinge wie ein hübsches DVD-Logo an Stelle des Zeichens
'd' für einen DVD-Stream angezeigt werden können.
Die folgende Tabelle listet alle Zeichen auf, die zum Anzeigen von
Symbolen genutzt werden können (und daher eine andere Schrift benötigen).
ZeichenSymbolpPlaysStopePausenKein SoundmMono-SoundtStereo-SoundfStream ist eine DateivStream ist eine Video-CDdStream ist eine DVDuStream ist eine URLGUI-Meldungen
Dies sind die Meldungen, die von Buttons, Potentiometern und
Menüeinträgen generiert werden können.
Playback-Kontrolle:evNext
Springe zum nächsten Track in der Playliste.
evPause
Formt einen Schalter zusammen mit evPlaySwitchToPause.
Sie können dazu benutzt werden, einen gebräuchlichen Play/Pause-Button
zu bekommen. Beide Meldungen sollten den Buttons zugewiesen werden, die
an genau derselben Position innerhalb des Fensters dargestellt werden.
Diese Meldung pausiert das Abspielen und die Grafik für den
evPlaySwitchToPause-Button wird gezeigt
(um anzudeuten, dass der Button zum Fortsetzen des Abspielens gedrückt
werden kann).
evPlay
Starte das Abspielen.
evPlaySwitchToPause
Das Gegenteil von evPauseSwitchToPlay. Diese Meldung
startet das Abspielen und die Grafik für den
evPauseSwitchToPlay-Button wird angezeigt
(um anzudeuten, dass der Button zum Pausieren des Abspielvorgangs gedrückt
werden kann).
evPrev
Springe zum vorherigen Track in der Playliste.
evStop
Stoppe das Abspielen.
Springen:evBackward10sec
Springe 10 Sekunden rückwärts.
evBackward1min
Springe 1 Minute rückwärts.
evBackward10min
Springe 10 Minuten rückwärts.
evForward10sec
Springe 10 Sekunden vorwärts.
evForward1min
Springe 1 Minute vorwärts.
evForward10min
Springe 10 Minuten vorwärts.
evSetMoviePosition
Springe zu Position (kann von einem Potentiometer genutzt werden;
mit dem relativen Wert (0-100%) des Potentiometers).
Video-Kontrolle:evHalfSize
Setze das Filmfenster auf halbe Größe.
evDoubleSize
Setze das Filmfenster auf doppelte Größe.
evFullScreen
Schalte Vollbildmodus an/aus.
evNormalSize
Setze das Filmfenster auf normale Größe.
Audio-Kontrolle:evDecAudioBufDelay
Verringere die Verzögerung des Audiopuffers.
evDecBalance
Verringere die Balance.
evDecVolume
Verringere die Lautstärke.
evIncAudioBufDelay
Erhöhe die Verzögerung des Audiopuffers.
evIncBalance
Erhöhe die Balance.
evIncVolume
Erhöhe die Lautstärke.
evMute
Schalte den Ton an/aus.
evSetBalance
Setze die Balance (kann von einem Potentiometer genutzt werden;
mit dem relativen Wert (0-100%) des Potentiometers).
evSetVolume
Setze die Lautstärke(kann von einem Potentiometer genutzt werden;
mit dem relativen Wert (0-100%) des Potentiometers).
Verschiedenes:evAbout
Öffne das About-Fenster.
evDropSubtitle
Deaktiviert den aktuell verwendeten Untertitel.
evEqualizer
Schaltet den Equalizer an/aus.
evExit
Schließe das Programm.
evIconify
Minimiere das Fenster zu einem Symbol.
evLoad
Lade eine Datei (durch Öffnen des Datei-Browser-Fensters,
in dem du die Datei wählen kannst).
evLoadPlay
Macht dasselbe wie evLoad, es startet jedoch
das Abspielen nach dem Laden der Datei automatisch.
evLoadSubtitle
Lädt eine Untertiteldatei (mit dem Dateiwähler)
evLoadAudioFile
Lädt eine Audio-Datei (mit dem Dateiwähler)
evNone
Leere Meldung, besitzt keinen Effekt (außer vielleicht in Subversion-Versionen :-)).
evPlaylist
Öffne/schließe das Playlisten-Fenster.
evPlayDVD
Versucht die DVD im angegebenen DVD-ROM-Laufwerk zu öffnen.
evPlayVCD
Versucht die VCD im angegebenen CD-ROM-Laufwerk zu öffnen.
evPreferences
Öffne das Einstellungsfenster.
evSetAspect
Setzt das angezeigte Grafikseitenverhältnis.
evSetURL
Zeigt das URL-Dialog-Fenster.
evSkinBrowser
Öffne das Skin-Browser-Fenster.
Erstellen von qualitativen Skins
Jetzt hast du dich über das Herstellen eines Skins für das
MPlayer-GUI informiert, in
Gimp dein bestes gegeben und willst
deinen Skin an uns schicken?
Lies weiter, dann findest du einige Vorgaben dafür, wie häufige Irrtümer
vermieden und hochqualitative Skins erstellt werden können.
Wir wollen, dass Skins, die wir in unser Repository einfügen,
bestimmten Qualitätsstandards entsprechen. Du kannst auch vieles
dazutun, uns das Leben leichter zu machen.
Als ein Beispiel kannst du dir den Blue-Skin
ansehen. Er genügt seit Version 1.5 allen unten aufgelisteten Kriterien.
Jeder Skin sollte mit einer
README-Datei kommen, die Informationen über
dich, den Autor, Copyright- und Lizenzanmerkungen und alles, was du
sonst noch anfügen willst, enthält.
Willst du ein Changelog, ist diese Datei ein geeigneter Ort dafür.
Es sollte eine Datei namens VERSION
mit nicht mehr als der Versionsnummer des Skins in einer einzigen
Zeile geben (z.B. 1.0).
Horizontale und vertikale Regler (wie die für Lautstärke
oder Position) sollten die Mitte des Knaufs sauber in der Mitte
des Reglers zentriert haben. Es sollte möglich sein, den Knauf
an beide Enden des Reglers zu bewegen, jedoch nicht darüber hinaus.
Für Skin-Elemente sollten die richtigen Größen in der skin-Datei
deklariert sein. Ist dies nicht der Fall, kannst du außerhalb
z.B. eines Buttons klicken und trotzdem einen Klick innerhalb
seiner Fläche auslösen und diesen dennoch nicht auslösen.
Die skin-Datei sollte sauber
aussehen und keine Tabs enthalten. Mit sauber aussehen ist
gemeint, dass die Zahlen ordentlich in Reihe stehen.