This is a planning idea for new PaintCore for GIMP 2.8 or beyond.
1: The "Why?".
Current paint core is just not flexible enough and migration to GEGL based
paint core is planned anyway. So why not do the best possible paint core
since we are redoing it anyway?
2: What is the goal?
In general: Best possible digital "painting" tools. That should NOT include
any natural painting things like watercolor emulation or alike but full
featured tool for use on digital medium for image processing, touch-up etc.
What does the above mean?
* Easily extensible framework for creation of painting tools
* Fully dynamic painting, meaning that every adjustable aspect is user input
* Easily distributable paint tool presets that allow a the complete tool
context to be saved and loaded either on same or different machine
How I see that happening?
Event handler for paint tools.
This is a very important bit for fully featured tools. All devices have
some dynamic properties that are useful in painting on the digital canvas.
* Mice have velocity(and acceleration), cheap tablets add pressure, more
expensive ones may add even more axis.
* All movement has direction
* Purely calculated axis like random can be extremely useful.
* Paint tools want events at a constant distance or at a constant
distance AND rate.
Devices will never provide exactly what is needed so adjustment is
required. The extra events need to be discarded and events that are missing
interpolated. The method of interpolation depends on the axis in question.
So event handler should:
* be able to handle a number of device axis and apply per device curves
* support calculated axis based on what device provides and also support
applying device curves
* support a dynamic selection of arbitrary purely calculated axis
(random, iterator, sin, cos, sawtooth, box);
* be able to deliver constant distance and constant rate events
Paint core should provide framework for interacting with the canvas,
controlling the event handler and the saving and loading of paint tool
contexts as Paintbrushes, Erasers, Sponges etc with previews. Paint core
should also facilitate curves based mapping of event handler axis to tool
parameters. All paint tools expose parameters that may be mapped to any axis
event handler can provide.
Brush tool: Simple painting tool, support for all current brush formats
is a must. Must support at least scaling and rotation of brushes.
Airbrush tool: Almost the same as brush tool but orders constant rate of
events from event handler.
etc tools: Use paint tool framework, only the paint action itself
That's just my Idea for the step two of my last piece from a while ago on
brushes in GIMP.
Sven, Pippin, Peter, everybody - comments?
Gimp-developer mailing list