MPlayer SkinformatÜberblick
Es hat nicht wirklich etwas mit dem Skinformat zu tun, aber du solltest
wissen, dass MPlayerkeinen
eingebauten Skin besitzt, also muß 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).
Jeder 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 Abspilleiste (siehe unten) kannst du Bilder
mit 'Transparenz' verwenden: Mit der Farbe #FF00FF (Magenta) gefüllte Bereiche
sind beim Betrachten mit MPlayer voll transparent.
Die 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
Abspielleise und das
Skin-Menü (das durch einen
Rechtsklick aktiviert werden kann).
Das Hauptfenster und/oder die
Abspielleise befindet sich dort, wo du
MPlayer kontrollieren kannst. Der Hintergrund
des Fensters ist ein 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.
Ein Button besitzt drei Zustände (gedrückt,
losgelassen, deaktiviert), deshalb muss seine Grafik vertikal in drei Teile
getrennt werden. Siehe Eintrag Button
mit mehr Details.
Ein Potentiometer (hauptsächlich für
die Suchleiste und die Lautstärke-/Balance-Regler) kann eine beliebige
Anzahl von Phasen by dividing its Grafik
into different parts below each other. See
hpotmeter and
Potentiometer for details.
Labels sind ein wenig speziell: Die Zeichen,
die manzu ihrer Darzustellung benötigt, werden von einer Grafikdatei, und
die Zeichen in der Grafik werden 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 fpr 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
iat (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 des gewählten Einträge verwendet.
Wenn due 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).
Rin 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 einen Skin zu bauen:
Die Konfigurationsdatei genannt skin erzählt
MPlayer, wie er 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 want
ein Menü erzeugst).
Mit Ausnahme der skin-Konfigurationsdatei, kannst du die anderen Dateien
benenne, 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-Zeichen
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 Strings sein
kann:
main - für das Hauptfenstersub - für das Unterfenstermenu - für das Skin-Menüplaybar - Abspielleise
(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 in dieser Form definieren:
item = parameter
Wobei item ein String ist, der 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ürs Hauptfenster ...
end
window = sub
; ... Elemente fürs Unterfenster ...
end
window = menu
; ... Elemente fürs Menü ...
end
window = playbar
; ... Elemente für die Abspielleise ...
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 Erweiterungder Datei spezifizieren.
Existiert die Datei nicht, versucht MPlayer die
<dateiname>.<ext> zu laden, wobwei
png und PNG als
<ext> (Erweiterung) versucht 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 für das Hauptfenster nutzt:
base = main, -1, -1MPlayer versucht, die Dateien
main,
main.png,
main.PNG
zu laden.
Hauptfenster und Abspielleise
Unten steht eine Liste von Einträgen, die in den Blöcken
'window = main' ... 'end',
und the '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
sein Wert sich vom Minimum zum Mmaximum ä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
de 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
in vertikal numphases Teile wie folgt aufgeteilt werden:
+------------+
| phase #1 |
+------------+
| phase #2 |
+------------+
...
+------------+
| phase #n |
+------------+
numphases - Anzahl der Phasen, die in der
phases-Grafik untergebracht sind
default - Standard Wert fürs 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
(geib hier keine Erweiterung an).
fontid wird verwendet, um auf die Schrift zu verweisen
(siehe dlabel
und slabel). Bis zu 25 Schrift 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
align-Parameters 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.
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 Stream-Typen 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 angehallten 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.
width und height
kennzeichnen die Größe des Fensters; sie sind optional (wenn sie fehlen, hat
das Fenster die selbe 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 Dzimalzahl 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, width, height, message
Definiert die Position X,Y und die Größe eines Menüeintrags
innerhalb der Grafik. message 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,
sodass Sachen 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.
Einige der Meldungen funktionieren vielleicht nicht wie erwartet
(oder vielleicht auch gar nicht).
Wie du weißt, befindet sich das GUI in der Entwicklung.
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 der selben Position inerhalb 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 Sound an/aus (Mute/Unmute).
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 das selbe 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.
Herstellung von Qualitätsskins
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 häufige Irrtümer zu
vermeiden und produiere einen hochwertigen Skin.
Wir wollen dass Skins, die wir in unser Repository eingefügt werden,
zu bestimmten Qualitätsstandars konform sind. Es gibt auch vieles, das
du tun kannst, um 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 ankommen, die Iformationen über
dich, den Autor, Copyright- und Licenzanmerkungen und alles, was du
sonst noch anfügen willst, enthält.
Willst du einen 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 Regglers 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.