brushes and brush engines

Boudewijn Rempt boud at valdyas.org
Tue Mar 18 14:03:42 CET 2008


Ok... This started because I wanted to clean up the tablet settings
for the brush/smudge paintop a biti and started coding an extensible
paintop settings dropdown to replace the current size/opacity/darken
toolbar. Then we discussed confusing naming on irc and I suddenly hit
by a flash of lightning.

Current situation:

* KisBrush and friends: determine the "tip", "stamp", "footprint" or
  "dab" for some paintops. There is always one active KisBrush, even
  though the paintop may not use it at all. Brushes are selected from
  a tabbed drop-down from a toolbar.

* KisPaintop: these are the actual brush engines. Krita can have many
  different brush engines. Some use brushes, others are procedural.
  Paintops can have settings that can be saved and loaded, kind of
  presets, but that are currently not visualized in the gui. Paintops are
  selected from a combobox and the settings are visualized in a toolbar.

Proposal:

* Rename KisBrush to KisStamp, KisTip or KisBrushTip. All derived classes
  follow suit.

* Rename KisPaintop to KisBrushEngine. All derived classes follow suit.

* Extend KisBrushEngineSettings (former KisPaintopSettings) with the name
  of the associated paintop and parameters like the KisBrushTip instance.

* Remove the current brush button from the toolbar

* Replace it with a toolbar showing five active "presets" -- a preset is a
  KisBrushopSettings instance.

* For applicable KisBrushEngines, the settings include a particular
  KisBrushTip. KisBrushTip is no longer an independent canvas resource.

* Add a dropdown that can be used to manage presets for a KisBrushEngine

* Include a nice selection of default presets.

* Instead of an active paintop, use an active preset. Add a secondary
  and tertiary active preset that can be selected using ctrl+freehand and
  shift-freehand (or something like that) Which preset from the
  selection-of-five is primary, secondary and tertiary can be determined
  by click+modifier on the toolbar.

* The presets can be saved and will be loaded on startup again

* additionally, the preset selection buttons will allow on-the-fly
  changing of the current preset through a drop-down button that shows the 
  same page as the preset manager/designer

Advantages:

* our code becomes less confusing: I'm getting tired of having to explain
  the different between KisBrush and KisPaintop.

* the ui becomes less confusing when using paintops that don't use brushes

* it becomes easier to quickly switch between paintops while working.

Difficulties:

* a unique graphical representation of a preset for the toolbox:
  perhaps brush engine icon + a small stroke? That would make the present buttons
  fairly wide.  And I think it's essential to show more than one brush
  preset at one time in the toolbar.

* We want to have only one collection of brush tips shared by all
  brush engines that use brush tips. Besides, the autobrush brush tip is used outside
  the brush engines, too.

* We'll look more like Photoshop than like Corel Painter after this
change.

Implementation:

I'll have to make some changes in the canvas resource provider,
the control box and add gui classes to implement the preset
designer/manager. I've got already some code for that.

By the way:

It looks like the "hang" when using darken and the tablet is caused by
the darken color transform somehow being really, really slow


Boudewijn



More information about the kimageshop mailing list