Painting with brushes

:.,I don't know anything, nada, zilch, noppes about writing paint applications. So
when I started working on Chalk, I felt I needed examples. I used the following
sources:

* The old Chalk brush code (http://webcvs.kde.org/cgi-bin/cvsweb.cgi/koffice/chalk/tools/kis_tool_brush.cpp?rev=1.58&content-type=text/x-cvsweb-markup)
* Peter Jodda's Perico (http://software.jodda.de/perico.html)
* The source of the Gimp (both current and 0.99.11 -- the oldest version I could find) (http://www.gimp.org)
* David Hodson's article on Gimp brushes (http://members.ozemail.com.au/~hodsond/gimpbrush.html)
* Raph Levien's article on Gimp brushes (http://www.levien.com/gimp/brush-arch.html)

Chalk uses the gimp's brush file formats: .gbr and .gih, for singe
and pipeline brushes, respectively. These brushes contain one or more
grayscale or rgba images. If the image is grayscale, the gray image is
intended to be used as an alpha mask: each gray level corresponds to
a certain alpha level, and when painting the current painting colour
is composited in the image with this level as its alpha component. The
image brushes should be masked -- i.e., these are coloured images placed
on a white background. The white background should be made transparent,
and then the brush image can be composited onto our image.

This is currently only half supported: I make masks of everything,
partly because I like that better, partly because until very recently
there was no way of making out the difference between gray and rgb
brushes because KisBrush didn't remember that bit of data.

Making the initial mask of a brush is however by now pretty well done; the next
problem is painting with those masks.

Here we have two situations, one easy, one difficult. The easy one is the single
mouse click. If the user clicks or taps with his stylus, we can composite the 
mask or the image at the pixel position of the mouse click.

The difficult situation is drawing a line. This line needs to be antialiased.

