summaryrefslogtreecommitdiffstats
path: root/krita/doc/DESIGN.obsolete
diff options
context:
space:
mode:
Diffstat (limited to 'krita/doc/DESIGN.obsolete')
-rw-r--r--krita/doc/DESIGN.obsolete179
1 files changed, 179 insertions, 0 deletions
diff --git a/krita/doc/DESIGN.obsolete b/krita/doc/DESIGN.obsolete
new file mode 100644
index 00000000..f3fd1631
--- /dev/null
+++ b/krita/doc/DESIGN.obsolete
@@ -0,0 +1,179 @@
+A Perspective on Krita's Design
+
+ Krita's codebase has been through as many changes as the app's name
+ itself. It started with KImageShop (hence the 'kis' prefix one finds
+ everwhere, and which would have been unnessary had Krita used
+ namespaces, one fancies), then became Krayon to end up as Krita. The
+ stated design goal was to create a application geared towards the
+ more artistic user; the kind of user who settles down with his
+ tablet to create a spot of Art. It ended up as a Gimp-clone, a Kimp,
+ so to say.
+
+ This document was the basis for a discussion on the krita mailinglist:
+ http://lists.kde.org/?l=kde-kimageshop&m=106530035202770&w=2. See the
+ answer for some answers to the questions at the end.
+
+Design Patterns
+
+ Patrick Julien restructured Krita to use a lot design patterns. Krita
+ appears to have a very solid base for blasting pixels to the screen,
+ zooming, selecting and moving. These are what I recognize as his
+ changes:
+
+ * Change brushes handling to a generic Mediator pattern
+ (kis_resource_mediator). Resources are brush shapes,
+ patterns (and colours, too?) Patrick intended a Flyweight
+ here.
+
+ * The composite pattern is used in paint devices, layers, channels,
+ etc. (What about masks?)
+
+ * Change colourspace handling to a Strategy pattern
+ (strategy/kis_strategy_color)
+
+ * Change moving chunks of painting to a Strategy pattern
+ (strategy/kis_strategy_move)
+
+ * kis_factory points towards a Factory pattern Creates the
+ pluginserver and resourceserver.
+
+ * Tools are created by a Factory pattern (but it isn't
+ dynamic yet): kis_tool_factory. Tools are intended to
+ become kparts.
+
+ * There's the start of a Memento pattern for tools, but it
+ doesn't seem to be used (kis_tool_memento). It was an
+ experiment that didn't pan out.
+
+ * The Builder pattern is used to do conversion to and/or
+ from ImageMagick. I guess this is used for importing
+ images in other file-formats than .krita. An idea at one
+ was to use Koffice filters, but that didn't work because
+ images are rather different from other office documents.
+
+ * Flyweight pattern used for background tiles.
+ kis_background.
+
+ * Nameserver. Perhaps not a pattern -- at least not one
+ with an obvious GOF name. Appears to be computing a
+ number for new layers and new documents.
+
+ * kis_render. Interface implemented by kis_paint_device
+ and kis_image.
+
+ * Rename kisTool to kisToolInterface -- but the file is
+ still called kis_tool. (This is intentional, and should
+ be kept in the style guide.)
+
+ * Addition of kis_types. Defines shared pointer pointers
+ to core krita objects: image, paintdevice, channel,
+ mask, layer etc.
+
+ * Tile architecture. There's Mediator and a Singleton
+ pattern here at least. This stuff seems to work, doesn't
+ need hacking at the moment.
+
+ * Visitor pattern used to flatten an image or merge
+ layers. Merging exposes a funny bug where the tiles
+ are re-arranged in an interesting mosaic pattern.
+
+
+User interface
+
+ Krita uses a fairly ugly side-panel to collect what are palettes
+ in other applications. I would prefer dockable, attachable
+ palettes myself. Doesn't KDE have a lib for that already?
+
+
+ ui/labels
+
+ These classes are used in the statusbar.
+
+ ui
+
+ The dialogs appear to be created by hand, not with Qt
+ Designer. Besides, many are inoperational.
+
+ other
+
+ The canvas, rules and sidebar panels are defined here, too,
+ nicely separated.
+
+Tools
+
+ Working: select_rectangular, test, zoom, colorpicker, paste, move
+
+ Not working: airbrush, brush, colorchanger (no idea what it should
+ do), ellipse, eraser, fill, line, pen, polygon, polyline,
+ rectangle, select_contiguous, select_elliptical, select_freehand,
+ select_polygonal, stamp
+
+ Missing tools: convolve, smear, smudge, whirl, charcoal, chalk,
+ oils, clone, select_by_colour
+
+Plugins
+
+ The single plugin example has been present in krita since about day
+ one, as far as I can see. It doesn't show anything about what one
+ can do with plugins.
+
+ To judge from the code in kis_plugin_server, it never got beyond
+ an idea. (kdDebug() << "hallo\n"...)
+
+ (This code should be removed.)
+
+ImageMagick
+
+ There still appear to be some dependencies upon ImageMagick (builder
+ subdir). What are these for, and should they stay? Is it for
+ importing/exporting foreign file formats?
+
+Undo/Redo
+
+ Undo and Redo make use of the standard KDE mechanism, which I don't
+ really understand either.
+
+
+Obsolete files
+
+ The following files appear to be unused:
+
+ core/helper/kis_timer
+ core/helper/kis_scopedlock (Replaced with QMutexlocker)
+ core/kis_krayon (was predecessor of kis_resource)
+ core/kis_mask
+ core/kis_util
+ ui/kis_krayon_widget
+
+Random head-scratchings
+
+
+ - Why the QUANTUM redefinition: the number of bits per channel,
+ 8 for 32-bit colour, 16 for 64-bit colour.
+
+ - is_mask unimplemented? What was it meant to do, or is it an
+ interface?
+
+ - nameserver presents unique numbers for new layers and images.
+
+ - what does 'upscale' do? in 8 bit/channel color mode, upscale
+ doesn't do anything. However, downscale and upscale in > 8 bit,
+ this is needed to covert the color for the actual display
+ rendering, i.e. X, etc, only do 8 bit color. Using this
+ everywhere you work on color will keep krita color channel
+ bit depth independent.
+
+
+ - Is KisVector only used in obsolete tools?
+
+ - I take it that the two tests that are present in krita/test
+ are obsolete?
+
+ - what with the dummmmmy.cc?
+
+ - which bits of the krita/ui files are still relevant?
+
+ - kis_selection.h needs to be included to compile code that
+ uses kis_paint_device, and I wonder why.
+
+ - what is paint-offset?