The Wayback Machine - https://web.archive.org/web/20090522232120/http://developer.gnome.org:80/doc/whitepapers/libroadmap/

GNOME 1.0 Library Roadmap

by Michael Fulbright

Red Hat, Inc.
Abstract

The GNOME desktop environment is built on top of numerous support libraries which handle the many tasks expected of a modern desktop. Using these libraries, the developer can build a fully integrated application that fits into the GNOME desktop seamlessly. This document provides a guide to the function and relationships among these libraries.


Basic GNOME Libraries

Table 1. GNOME Libraries

Library NameFunction
libaudiofileReads common audio file formats
libgdk_imlibLoads and manipulates image formats
libgtkGIMP Toolkit, widget used in GNOME
libgnomeGNOME utility functions
libgnomeuiGNOME UI utility functions
libglibString functions, hashes, lists, etc
libgdkLower level drawing toolkit
libesdClient interface to esound daemon

Modern desktop applications demand a wide variety of services from the underlying application framework. In addition to the expectations of a widget set, programmers need tools to access and display audio and image information as well.

libaudiofile. The libaudiofile library can read a wide variety of audio file formats (AIFF, AIFC, WAV, and NeXT/Sun au). Once samples have been loaded using libaudiofile, libesd routines are available to play these samples via the Esound sound daemon. The Esound sound daemon allows several processes to access the sound hardware simultaneously. Esound is required because the Linux kernel does not allow multiple process access. Esound also supports sound over a network. Sound samples can be preloaded into Esound for later playback, which signifcantly reduces latency on network connections since the sample does not have to be repeatedly sent over the wire.

libgdk_imlib. GUI applications require extensive use of images to create a friendly and comfortable user interface. Traditionally it has been difficult to load all the common graphic file formats into X11 applications. The libbgdk_imlib library addresses this issue by providing convenient and powerful functions to load multiple file formats (JPEG, GIF, TIFF, PNG, XPM, PPM, PGM, PBM, and BMP). These files are converted to an internal 24 bit RGB representation, and utility functions exist to scale as well as render from 24 bit RGB to a variety of other color depths (with dithering if desired). Input image files are cached internally by libbgdk_imlib to improve performance in applications which repeatedly use images.

libgtk. The libgtk library is the GIMP toolkit library. It is a professional quality widget set which, in many ways, is superior to other widget sets. GNOME applications are written entirely using libgtk for all GUI elements (buttons, menus, scrollbars, etc).

libgnome. The libgnome library provides many utility routines related to the GNOME desktop environment. Among the capabilities provided are config file support for applications to store persistent data, support for metadata (data attached to file objects, like the icon to display for a particular file type), and support for loading help documents into the GNOME help browser. An interface is also provided so GNOME applications can talk to the GNOME session manager. Finally, routines exist to configure how different mime-types are handled by GNOME and the GNOME file manager.

libgnomeui. GNOME applications use the libgnomeui library extensively. This library contains toolkit extensions to the GTK+ widget set. Users can easily create dialog boxes, and message boxes, as well as menubars, toolbars, and status lines. An extensive array of stock icons is provided for the programmer's use in dialogs, menu entries, and buttons.

Because all GNOME applications will use libgnomeui to create these common GUI elements, visual consistency is guaranteed. Another important capability provided is the GNOME canvas, which allows painless creation of complex interfaces. Similar in many ways to the Tk canvas, the GNOME canvas provides a framework to create address books, calendar applications, and spreadsheets.