DiaCanvasItem details
-------------------

I think that some explanation about DiaCanvasItem and friends is needed (not
in the last place for myself ;-).

Introduction
----------
DiaCanvasItem is the base class for all objects that are applied to a DiaCanvas.
DiaCanvasItems are inherited from GObject and therefore have the abilities
for signals and data.

DiaCanvasItems are added in a tree like fashion. DiaCanvasGroup is a special
object that is mainly used to hold other DiaCanvasItems. This looks a lot like
GnomeCanvas and GNOME hackers are probably familiar with this way of working.
There are however quite a few differences between GnomeCanvas and the (to be)
DiaCanvas:

		GnomeCanvas			DiaCanvas
		----------------------------------------------------------
presentation	one window (view)		multiple views
targets		X/Libart/GnomePrint		X/Libart/PS/GnomePrint/SVG/...
rendering	two calls (one for X drawing	let GnomeCanvas handle that.
		and one for Libart drawing)
data/view	no data/view separation		data/view separation
grid						builtin grid
persistency					builtin saving (DiaPersistent)

To make it possible to use more views on the same data DiaCanvasViewItems
are introduced. These are small objects that hold view specific data (e.g.
if an object is selected, the cursor position for a text object and rendering
information).
  The abstract rendering interface makes it possible to draw to almost any
target using the same rendering code.

Rendering
-------
The best way canvas' can distinguish themselves is by fast rendering. A
canvas is considered good or bad by the user experience of redrawing.
In order to make rendering not any slower that the user is used to, the
rendering is completely in the hands of the GnomeCanvas. For every
DiaCanvasItem on the canvas, a DiaCanvasViewItem is created on the GnomeCanvas.
The DiaCanvasViewItems share as much as they can with the DiaCanvasItems.
Since rendering is not handled by the DiaCanvasItems, the DiacanvasItems only
have an update() function (which is only called if the object needs too).

Affine transformation
-------------------
To do even more fancy stuff DiaCanvas is depending on the Libart library by
Raph Levien. Libart is also used by GnomeCanvas and is the basis for the
anti-aliasing renderer. One of the neat things is the so called affine
transformation. This double[6] array allows us to scale, rotate, shear and
move the CanvasItem at once.

A CanvasItem is transformed relative to it's parent.
