The visitor mechanism has changed slightly, too -- there's a visitAll function that can be pretty handy.
Note also that we're not storing the properties like visible, locked etc. hardcoded anymore, but in an extensible list. And it's possible to define a list of preferred properties and check for that. See for instance KisImage:189, where we check whether a layer is temporary.
XXX: Below this: design notes.
Selections can be visualized by two methods:
There needs to be a way to deactivate the add/subtract mode of selection
The selection which is global (but affects only the current layer) is shown somewhere special in the layer box. (a thumbnail of sorts). That thumbnail works as a drag and drop to exchange and create per layer selections.
The selections (and masks too) are "paint devices" in their own right from the users standpoint, so they can be painted on etc.
The paint and fill tools will work on the selections and masks, as will the special selection tools. XXX: interaction between global selection and effect/opacity masks?
We will have 3 concepts:
We will have both global and per layer selection. The global selection can be drag & dropped to a layer, where it will merge/replace/subtract with the layer selection mask, if present.
Effect mask and opacity mask: Opacity mask is an effect mask with an opacity filter. We will show these as separate things to the user.
Effect masks and opacity masks consists of a single-channel paint device, and a KisFilter. There can be more than one of them per layer. The result is written to a projection: this projection is then composited. The original layer pixels are not changed.
Users would prefer to have effect and opacity masks as two things, though: We should implement this ui-wise, which means the KisFilter that handles opacity can stay hidden. So: a "opacity mask" is just a special "effect mask" with a filter that manipulates transparency.
There will be any number of effects masks associated with a single layer. Adjustment Layers will stay the way they are right now.