Die frühen Versionen von GIMP (GNU Image Manipulation Program) verwendeten als Basis für das User Interface die Motif Bibliothek der OSF. Nachdem im Laufe der Zeit die Motif-Programmierung immer unangenehmer wurde, entstand bei den Autoren die Idee, ein eigenes Toolkit - zunächst nur für GIMP - zu entwickeln.
Wesentliche Designziele dabei waren:
- Quellcode frei verfügbar
- einfache Programmierung
- klein, effizient und flexibel
- gute Debugging-Möglichkeiten
- optisch an Motif angelehnt
Die ersten Versionen (von Peter Mattis, Spencer Kimball und Josh MacDonald) enthielten noch keine Objekt-Orientierung und nur einen einfachen Callback-Mechanismus. Inzwischen hat sich allerdings viel getan und GTK bildet inzwischen die Grundlage für GNOME und eine große Zahl von weiteren Software-Projekten für X11.
GTK selbst ist in der Programmiersprache C implementiert, verwendet jetzt aber ein stark objekt-orientiertes Programmiermodell.
Warum C und nicht ...?
Im Prizip läßt sich Objekt-Orientierung in (fast) jeder Sprache verwenden, allerdings muß man eventuell einiges an Handarbeit investieren (dazu später mehr). Ein Beispiel dafür befindet sich in der OOP-Vorlesung.
Nachteile:
- bei der Implementierung sind einige "Konventionen" zu beachten
- viele explizite Casts (zu Oberklassen) erforderlich
- Handarbeit bei der Erstellung eigener Klassen
Vorteile:
- leicht zu erlernen (C kann eigentlich fast jeder...)
- Vermeidung von "ideologischen Konflikten" bei Auswahl der Programmiersprache
- C-Bibliotheken können von praktisch jeder Sprache aus verwendet werden
Komponenten
Für die Beispiele in diesem Vortrag habe ich im wesentlichen die folgenden Komponenten verwendet:
- GTK: das Gimp Toolkit
- GDK: das Gtk Drawing Kit
- GLIB: die "G" Libray
- Glade: ein User Interface Builder
- libglade, libxml: einige Hilfsbibliotheken
- GTKstep: ein UI-Modul für GTK
Architektur
Das folgende Diagramm zeigt die grundlegende Architektur:
Die gestrichelt gezeichneten Komponenten sind optional.
Die Komponenten, die direkt zum GTK gehören, sind gelb markiert.
Besonderheiten
Einige Dinge fallen auf:
- Zwischen den Applikationen und den GTK-Bibliotheken kann es eine zusätzliche Schicht geben, die eine Programmier-Schnittstelle in einer anderen Sprache als C zur Verfügung stellt. Damit lassen sich viele der oben erwähnten Nachteile eliminieren.
Zur Zeit existieren solche "language bindings" für:
- Die grafische Darstellung der UI-Komponenten (bei X11 "Widgets" genannt) kann durch dynamisch geladene Module ("theme engines") beinahe beliebig variiert werden.
Hier ein kleines Beispiel dazu:
Default UI
GTKstep
- Für eine Portierung auf eine andere Plattform (wie z.B. Windows) muß nur der untere Teil im Diagramm angepaßt werden (GDK und GLIB), die eigentliche GTK-Bibliothek ist damit Plattform-unabhängig.
Es gibt GDK-Implementierungen für X11 und Win32, eine Version für BeOS ist gerade in Entwicklung.