			  On making Gimp OO

This document outlines the ideas of the conversion to using the GTK
object system in gimp core.

The basic problem with gimp's internals is that it is _old_. Some of
the stuff dates from the 0.54 era, before layers, before GTK. This has 
caused the current source to be what some people call a "mess". You
don't want to hear what the other people call it.

Some of the main problems are that there are far, far too many headers 
included everywhere. That is, encapsulation doesn't work. This causes
nasty dependencies, and doesn't exactly do good for compile times,
either. In addition, there are too much integer ids on objects. These
should only be used for pdb, and even there there'd probably be better 
ways of passing them. The gtk object system will better facilitate
data hiding and encapsulation.

Then there are the tools. The tools have a primitive object hierarchy, 
but it is a mess when compared to gtk's system. Restructuring the
tools will make the world a better place, and new tools easier to
implement.

GTK's object system has many other features that will make gimp
programming easier, the chief one being signals. When gimp's images
and displays have signals that you can connect callbacks to, different 
components of the program will be better able to keep up with the
state of things.

Also, having all types in the gimp core use a standard object system
will make it easier to export these types as CORBA objects when the
time comes for that.


Some guidelines:

Everything should be as modular and independent as possible. Core
image manipulation classes should have no hard-coded relations with an 
"UI". There should be no global variables in the classes.

All gimp classes should derive from GimpObject. This is just in case
we need some common debugging functionality or something.

For a future locking system, and just for code clarity, things should
be made const correct. That is, if a function doesn't modify an
object, it should take a pointer to a const object. 


