I managed to get this patch to build with trunk yesterday, after some
struggling. I am only starting to understand what is going on here,
but I thought it might be useful to dash off a thumbnail review.
First, for readers who might not examine the patch in detail, it is
worth saying that this is a significant effort, representing several
months of work, and a design that has been thought out with a lot of
care. It is by no means a finished product, but it is already very
The general concept is to create something like a "pluggable brush".
The code sets up a "custom paintbrush tool", with a customizable paint
core. (The paint core is the set of C functions that render
brushmarks on the image.) The paint core is customized by registering
a set of "paint core modifiers". Each "modifier" inserts a gui-block
into the tool options, and includes C code for modifying the brush in
some way. When the user paints, all of the modifiers are applied in
sequence before the mark is finally made on the image.
In the patch, three modifiers are included: a "brush modifer", a
"blend modifier", and a "smooth modifier". The code for these is at
present added to app/paint, but the idea is eventually to make it
possible to add modifiers as "modules".
In Gimp, and other programs that use Glib, *modules* are
program-fragments that can be compiled separately from the main
application, and linked in dynamically while the program is running.
They differ from plug-ins in that once loaded they function as part of
the application, not as separate programs that communicate with the
application. The danger of modules is that if they crash, the whole
program crashes with them. The power is that they have complete
access to everything that Gimp can do. Currently Gimp does not use
modules very heavily: they show up mainly as color selectors, display
filters, and handlers for exotic types of input.
Adding modules to Gimp is easy in principle: you just place them in
the "modules" folder in your Gimp directory. There are very few Gimp
developers who have actually written a module, though, and it isn't
clear to me whether it is intrinsically more difficult than writing a
plug-in, or whether it simply lacks a good set of instructions and a
It's pretty clear that this code will not be ready for 2.6, which is
on a fast development track. In any case, the code looks very
promising, and I would favor getting the development process into SVN
as soon as possible, perhaps in a special branch dedicated for the
Gimp-developer mailing list