GTK+ provides support for user-interface customization via themes. Without recompiling either GTK+ or the application, a user can choose a new look for their applications by installing a new theme. A theme can either be simply a set of colors and pixmaps used by the existing drawing code or it can be a complete replacement of the functions used to draw widgets.
There are several concepts important in understanding how themes work in GTK+. A style is a set of information about how to draw a particular widget. It includes information about the colors, background pixmaps and fonts for the widget. A style also includes a pointer to a theme engine is a shared library with code for drawing the basic components of widgets. (Shadowed boxes, frames, arrows, check-button indicators, etc.).
The colors, fonts, and theme engine to use for the widgets of an application are configured in a resource file. The resource file may also contain theme-engine specific data. Finally, a theme is the combination of a resource file with any other files it needs, such as image files.
GNOME defines a standard file format for distributing unified themes; a theme file is a tarball containing a single subdirectory named for the theme. Inside this directory there is a README.html file and an icon in PNG format called ICON.png, and then subdirectories for each type of theme information. GTK+ theme information should be in a subdirectory called gtk, which should contain a resource file called gtkrc.