[Previous] [Next] [Up] [Contents] [Feedback]

1. Allgemeines


Geschichtliches

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:

- Ada95
- C++
- Dylan
- Eiffel
- Guile
- Haskell
- JavaScript
- Objective C
- Objective Caml
- Objective Label
- Pascal
- Perl
- Pike
- Python
- TOM

- 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.


[Previous] [Next] [Up] [Contents] [Feedback]