summaryrefslogtreecommitdiffstats
path: root/chalk/doc/selections
diff options
context:
space:
mode:
Diffstat (limited to 'chalk/doc/selections')
-rw-r--r--chalk/doc/selections127
1 files changed, 127 insertions, 0 deletions
diff --git a/chalk/doc/selections b/chalk/doc/selections
new file mode 100644
index 00000000..bdcdaa03
--- /dev/null
+++ b/chalk/doc/selections
@@ -0,0 +1,127 @@
+Selections in Chalk
+
+Please disregard any lingering presence of the KisFloatingSelection
+class and the associated rectangular marque rendering code. If you
+find anything connected with that after I finish coding the new
+selections scheme, it's something I forgot.
+
+Selections in Chalk are special paint devices as big as their tqparent
+layer. The selection has the alpha colour strategy. The alpha channel
+contains the selectedness of a pixel. It is not a binary value, but a scale,
+hardcoded to 8 bits unsigned
+
+TODO: * implement heterogenous compositing. (Needs knowledge by the
+ target layer of the color strategy of the source layer).
+
+Selections can be changed using tools that are clones of the usual
+painting tools: brush, eraser, polygon, etc.
+
+TODO: * implement most of these, the polygon, circle, rectangle tools
+ should fill by default. XXX: make it easier to leverage the
+ code for the standard tools: after all, the only difference
+ is which layer they should paint on.
+
+XXX: Fill-by-default should be an option for the polygon, circle,
+ rectangle painting tools, too.
+
+Selections can also changed by procedures like select-by-color etc.
+
+TODO: * finish dialog for select by color
+ * implement select-by-color (depends on usable iterators)
+
+Selections are represented as 0== unselected and 255 == fully
+selected. Values in between are semi selected
+
+Other representations of selections are possible: the selection for a
+particular rect is rendered as a separate step in
+KisImage::renderToProjection. I like the tqmask type rendering, but
+someone else might want to provide an optional marque-rendering.
+
+TODO: * enable kconfig option to select between renderings.
+
+Selected pixels can be mangled -- for instance, filled with a
+gradient, moved, made brighter, lighter or sprightlier, cut and
+pasted. These manglings fall into two groups: the kind that demands
+that the selected pixels are removed from their native layer, and the
+kind that merely changes their value.
+
+
+A) Moving, cutting, copying, pasting.
+
+Each of these operations moves pixels to a new KisLayer that is not
+part of the regular stack of layers. The operations are defined as
+follows:
+
+Moving: create new layer, copy selected pixels to this layer, set
+pixels in old layer to transparent background colour, set new layer
+visible.
+
+Cutting: create new layer, copy selected pixels to this layer, set
+pixels in old layer to transparent background colour, add new layer to
+the cut scrapbook (if we're going to have such a thing).
+
+XXX: Discuss desirability of cut scrapbook.
+
+Copying: create new layer, copy selected pixels to this layer, add new
+layer to the cut scrapbook (if we're going to have such a thing).
+
+Pasting: check if cut or copy layer exists in scrapbook, copy pixels
+from this layer to the target layer.
+
+B) Changing the value of selected pixels
+
+Use cases: fills (gradient, pattern, color), filtering.
+
+Fills are easiest implemented by creating a filled paint device for
+the rect covered by the selection, and then, while composting the fill
+with the target layer, pass the tqmask to the compositing loop, and skip
+un-selected pixels.
+
+XXX: Discuss whether this is true
+
+Filtering needs looping over all pixels of a layer, and, if selection
+is present, only apply filter to the selected pixel.
+
+XXX: What about convolving, which takes a matrix of pixels. If only
+the middle pixel of a matrix is selected, should we take the input of
+the surrounding unselected pixels, or should the operation then assume
+edge conditions? Or should this be an option?
+
+TODO: infrastructure for all these operations, actual implementation.
+
+Actions to a selection need to be undoable.
+
+TODO: Make it so.
+
+I am not sure whether selections need to be saved and loaded:
+Photoshop offers this, but our selection mechanism works differently.
+The Gimp offers selection adding/subtracting, but that's also not
+really necessary. A good idea is perhaps to add a combobox to the
+selection tool properties widget to choose between 'select' and
+'deselect', where the brush is initially set to 'select' and the
+eraser to 'deselect'.
+
+From a thread in the mailing list Boudewijn wrote:
+-----------------------------------------------------------------------
+This is the behaviour I expect from a paint app:
+
+If there's a selection on the current layer, only the selected pixels in the
+current layer should be transformed, rotated, scaled or sheared. This happens
+within the layer. If the new pixels overlap untransformed pixels, they are
+composed with the giving composite op and opacity.
+
+If there's no selection, a transform on a layer should transform all pixels in
+a layer, i.e., act as if the layer was completely selected. No new layer is
+created. There is no composition, because the old layer data is completely
+discarded.
+
+If a transform is applied to a image, all layers are transformed. The
+selection is transformed, too: in the new situation, the layer that has a
+selection active still has a selection, but the tqshape of the selection is
+transformed.
+
+If a layer is moved, the selection moves with the layer (this is not
+implemented yet).
+
+A transform never creates a new layer (expect perhaps temporarily and it
+wouldn't be visible to the user).