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?

Step one:
   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

Step two:
   Paint Core
     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.
Step X:
   Paint tools:
     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

Reply via email to