Penguin

The Gimp ToolKit

gtk-logo-rgb.gif

The Gimp ToolKit was written as the foundation to carry TheGIMP. At the time, the only alternatives were Motif?, which has a very restrictive license, and Qt, which wasn't completely FreeSoftware either and is specifically targetted at C++. These were both deemed unacceptable for the reasons given, so a new ToolKit was created and released under the LGPL. It is nowadays known as just GTK and has become a familiar sight (see some screenshots). Even a Windows port has been written (see some screenshots). Another version called Cursed GTK now in development uses Curses instead of X11, which allows GUI applications to run on the console. The screenshots are rather reminiscent of Borland's !TurboVision? IDE for DOS...

It's the ToolKit of choice for most any serious GUI application on Linux and other Unixoid systems, such as Gnumeric, Evolution, or AbiWord. Still other applications developed with wider portability in mind use GTK as their default ToolKit on Linux; examples are Vim, Mozilla, and OpenOffice.org. Entire DesktopEnvironments like GNOME and XFce are built on top of GTK.

While it's written in C, it has bindings to many other languages. C++ was the first to get such a library, called gtkmm (for gtk--). There's also PyGTK for Python and Gtk2-Perl for Perl.

The Next Generation: GTK2

GTK2 is more than just another iteration of GTK. It is a major redesign that can require considerable modification of existing GTK-based SourceCode in order to build against GTK2. There are many good reasons to invest the effort.

  • The 2.x series is fully internationalized through full Unicode/multi-byte character support.
  • The new text rendering engine called Pango has no trouble with non-Latin languages and supports Xft? and FontConfig? integration, providing beautifully AntiAliasedFonts.
  • The ATK libraries support accessibility.
  • The list- and treeview widgets have been rewritten from the ground up following a ModelViewController? architecture, which can drastically reduce memory footprint and improve performance for large amounts of data. Performance has unfortunately actually suffered due to do design decisions taken in favour of greater flexibility, but optimizations for the common cases are being retrofitted as the code matures.