Login
Newsletter
Werbung

Sa, 18. Juli 2009, 00:00

Das Disko-Framework

Toolkit für Set-Top-Boxen und Touch-Screen-Terminals

Einführung

Disko ist ein Toolkit, mit dem sich ansprechende GUI-Applikationen umsetzen lassen, und das für den Einsatz in Set-Top-Boxen und Touch-Screen-Terminals konzipiert ist. Die Idee hinter Disko ist, Multimedia-Bibliotheken wie Xine oder GStreamer und ein GUI-Toolkit, das mehr Funktionalität als die herkömmlichen Media-Player-Oberflächen bietet, miteinander zu verbinden. Die grafische Ausgabe läuft entweder per DirectFB, direkt auf dem Linux-Framebuffer, oder auf X11. Das GUI-Toolkit in Disko lässt sich relativ einfach per XML layouten. So lassen sich saubere Model-View-Controller-Konzepte umsetzen, was es später sehr einfach macht, Skin- und/oder Themefähigkeiten in verschiedensten Applikationen zu nutzen. Um einen genaueren Eindruck von Disko und dessen Möglichkeiten zu bekommen, empfiehlt es sich, einen Blick auf die Projekte Morphine.TV oder 23p zu werfen. Weitergehende Informationen können natürlich auch auf der Disko-Homepage nachgelesen werden.

Vorgeschichte

Die Idee, die Disko zugrunde liegt, ist die Erstellung eines optisch ansprechenden Mediacenters für Linux. Damals bereits existierende Ansätze, wie VDR oder MythTV, entsprachen diesem Anspruch nicht. Außerdem hatten wir den Wunsch, uns auch etwas mehr mit dem Bereich von Embedded-Linux auseinanderzusetzen. Die Entwicklung an Morphine.TV startete mit viel Elan, und schnell waren die erste Ergebnisse zu sehen. Nach ungefähr einem halben Jahr mussten wir allerdings feststellen, dass wir den Komplexitätsgrad einer solchen Entwicklung stark unterschätzt hatten und der Quellcode schon in der Entwicklungsphase einen schwer erweiterbaren Zustand annahm. Wir begannen also noch einmal bei Null und starteten diesmal mit der Entwicklung eines Frameworks, das einer Applikation wie Morphine.TV zugrunde liegen sollte, um einen erneuten Wildwuchs zu vermeiden. Disko war geboren. Inzwischen liegt Disko in der Version 1.5 vor, und 1.6 steht in den Startlöchern. Leider nimmt die Entwicklung an Disko so viel Zeit in Anspruch, dass die Entwicklung an Morphine.TV viel zu kurz kommt.

Vorbereitungen

Da die letzte Disko-Veröffentlichung leider schon wieder einige Monate her ist, sollte man momentan zum Start mit Disko den Entwicklungszweig nutzen. Der Download des Quellcodes erfolgt dabei aus dem aus dem öffentlichen git-Repositorium:

git clone git://www.diskohq.org/disko.git

Zur Installation von Disko wird die Build-Umgebung SCons verwendet. Mögliche Optionen für die Kommandozeile können mit

scons help

aufgelistet werden. Soll die GStreamer-Unterstützung installiert werden, folgen Sie bitte dem Tutorial auf diskohq.org.

Die erste Applikation

Um einen möglichst schnellen Einblick in Disko zu ermöglichen, werden wir nun versuchen, anhand einer Beispielapplikation die grundlegenden Bestandteile und Mechanismen zu verdeutlichen. In diesem ersten Beispiel soll eine kleine Mediaplayer-Applikation erstellt werden, die einen Videostream darstellt und darüber ein transparentes Textfenster einblendet.

Initialisierung

Die Initialisierung konfiguriert Disko hinsichtlich der Umgebung, in der es laufen soll. Um die Dinge einfach zu gestalten, nehmen wir hier der Einfachheit halber eine X11-Umgebung an. Um Disko zu initialisieren, wird die Funktion mmsinit() genutzt. Diese Funktion lädt die zum Starten der Applikation benötigten Informationen. Eine wichtige Eigenschaft stellen hierbei die MMSINIT_FLAGS dar. Sie werden genutzt, um die Disko-Subsysteme festzulegen, die für die Applikation gebraucht werden, z.B. Grafik, Fenster, Plugins, Events, Inputs oder Themes. In diesem Beispiel begrenzen wir die Initialisierung auf das Window-System, das natürlich automatisch auch das Grafik-System berührt. Dieses System erinnert nicht ganz zu unrecht an die Initialisierung der libSDL.

Konfigurations-Dateien

Für eine erfolgreiche Initialisierung von Disko werden auch einige Dateien benötigt: die Konfigurations-Datei diskorc.xml, die Input-Mapping-Datei inputmap.xml und die Theme-Datei theme.xml. Für theme.xml und inputmap.xml ist es in diesem Beispiel nur wichtig, dass sie vorhanden sind. Beide müssen nur mit einem leeren Root-Tag, beziehungsweise erstellt werden.

Die eigentliche Applikations-Konfiguration muss mit den entsprechenden Parametern für die Umgebung versehen werden. Eine Beispiel-Konfiguration für eine X11-Umgebung findet sich in den Disko-Tutorials.

Fensterkunde

Nachdem die Initialisierung erfolgreich durchgeführt worden ist, wird als erstes ein Window benötigt. Ein Window ist grundsätzlich erst einmal nur ein logischer Container, der andere grafische Elemente enthält, die in Disko als Widgets bezeichnet werden. Solche Windows können angezeigt bzw. versteckt und überall auf dem Bildschirm platziert werden. Eine Besonderheit von Disko ist die festgelegte z-Order für diese Windows; das bedeutet, dass es drei Klassen von Windows gibt: Root-, Main- und Popup-Windows.

Rootwindows liegen im Hintergrund, Mainwindows darüber, und Popupwindows liegen auf der obersten Ebene. Bei Root- und Mainwindows kann jeweils nur ein Window zur selben Zeit angezeigt werden. Das Window-System sorgt durch einen Verdrängungsmechanismus dafür, dass ein Window richtig ersetzt wird, wenn ein anderes Window der gleiche Klasse angezeigt werden soll. Das ermöglicht es unabhängig arbeitenden Plugins, ihre Windows auf dem Bildschirm anzuzeigen, ohne dabei ein entsprechendes Durcheinander anzurichten.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung