Das ursprünglich an Tk [1] und klassischen Unix-GUIs angelehnte Erscheinungsbild hat sich im Dialog mit den großen GTK+ nutzenden Projekten wie Gimp und Gnome sichtbar weiterentwickelt. Auch die Architektur, die jetzt die Vektorgrafik-Bibliothek Cairo zum Zeichnen verwendet, hat sich seither erheblich verändert. Das führt dazu, dass viele Klassen aus Kompatibilitätsgründen existieren, aber kaum Verwendung finden. Beispielsweise löst der »GtkFileChooser« die »GtkFileSelection« ab.
Aus Entwicklerperspektive steht der Anlauf zu GTK+ 3.0 somit im Zeichen der Notwendigkeit, die historischen Hinterlassenschaften in den Bibliotheken aufzuräumen. Nach Jahren der Diskussion, ob GTK+ 3.0 und vor allem Gnome 3.0 das Gewesene fortschreiben oder revolutionär Neues bringen sollen, hat sich zumindest bei der grafischen Plattform der Evolutionsgedanke durchgesetzt: GTK+ 3.0 hat zum Ziel, die losen Fäden aus über sieben Jahren Entwicklungszeit aufzulesen, es soll die etablierte Architektur nicht umwerfen. Mehr noch als um bloßes Ballastabwerfen geht es darum, die Bibliotheken für die Zukunft fit zu machen, also in erster Linie wartbarer.
Knackt beim Öffnen
Das bedeutet auch, dass Entwickler das API von GTK+ 3.0 jetzt schon verwenden können: Es entspricht dem um alle Kompatibilitätszugeständnisse bereinigten API der demnächst anstehenden Version 2.20 (siehe Kasten "Versionen im Wandel"). Code, der nach Abschalten der Kompatibilität und Einschalten der Objektversiegelung unter 2.20 funktioniert, sollte also auch unter 3.0 laufen.
|
Seit der letzten großen GTK+-Release 2.0 vom Frühjahr 2002 hat es neun abwärtskompatible Versionssprünge gegeben, zuletzt im September 2009 auf Nummer 2.18 [3]. Auf der nächsten stabilen GTK+ 2.20 soll Gnome 3.0 aufsetzen. Es erscheint statt des planmäßig anstehenden Gnome 2.30 oder, wenn das QA-Team es für angebracht hält, erst anstelle 2.32 [4].
Bei GTK+ gibt es zusätzlich den Entwicklerbranch 2.90, der auf die nächste Hauptversion 3.0 hinarbeitet. Deren API entspricht dem von 2.20, hat aber weniger Ballast und beherrscht Objektversiegelung. Das erste darauf basierende Gnome soll nach derzeitigem Plan die Nummer 3.2 tragen.
|
Unter Abschalten der Kompatibilität ist die Definition des Makros »DISABLE_DEPRECATED« zu verstehen. Die Objektversiegelung ist neu: Das Makro »GSEAL_ENABLE« aktiviert sie und bewirkt, dass alle direkten Zugriffe auf Objekte zu Compilerfehlern führen. Damit stellt das API sicher, dass zum Beispiel ein Datenfeld nicht mehr auf folgende Weise zugänglich ist:
Bar *bar = foo->bar;
In Zukunft dient hierzu folgende Lesefunktion:
Bar *bar = foo_get_bar(foo);
Die dadurch nötigen Änderungen lassen sich zwar mit dem Clang-basierten Werkzeug »gtk-rewriter« [2] automatisieren, doch ist dessen Wartungszustand etwas unklar. Das API von GTK+ 3.0 - und letztlich aller Bibliotheken in der G-Welt - soll damit, wie es sich in der objektorientierten Programmierung auch gehört, nur noch aus Methoden respektive Funktionen bestehen, die sich über Eigenschaften ansprechen lassen. Das macht es künftig einfacher, die internen Datenstrukturen neu zu organisieren. Und das wiederum legt den Grundstein für neue Funktionen in Version 3.0 und den folgenden.
Geheime Rezeptur
Ein wenig mehr als bloße Aufräumarbeit geht aber doch vor sich. Unauffällig, aber von großer Wirkung sind die in GTK+ 2.18 eingeführten Client-seitigen Fenster. Damit sind Fenster im Sinne der X11-Terminologie gemeint, also rechteckige Bereiche, in denen Programme zeichnen und die Ereignisse erhalten können. GTK+ verwaltet diese Fensterstrukturen nicht mehr als X-Fenster im X-Server, sondern weitgehend auf der Client-Seite. Im Idealfall beansprucht eine Anwendung also nur noch ein X-Fenster, in dem das GTK+-Backend GDK (Gimp Drawing Kit, [5]) Zeichnungen erstellt und Ereignisse verarbeitet.
Abgesehen von besserer Performance durch weniger Kommunikation mit dem X-Server und reduziertem Flackern eröffnet dies die elegante Möglichkeit, in unsichtbare Fenster zu zeichnen (Off-screen windows), beispielsweise um Widgets auf Canvases zu legen oder sie geometrisch zu transformieren. Auch Systeme, deren X-Server kein Compositing unterstützt, können damit transparente Elementen darstellen. Und ganz nebenbei lässt sich der Grafikcode von GTK+ auch noch besser portieren.