Krita TODO list

This file is ordered by release. Regressions are under a separate heading.
Also: check bugs.kde.org.

Hackers:

Adrian      AP
Bart        BC
Boud        BR
Casper      CB
Cyrille     CY
Emanuele    EM
Sven        SV
Lukas       LT

Regressions from 1.x
=======================================================================

* Image


* UI

    * Progress reporting ( per layer )
    * Split view crashes

* Tools

* Filters

    Run filter test to see which filters are broken (or need a fixed test)

BR  * Make the bumpmap filter get the right layer on loading as adj. layer or filter mask.
    * all filters are extremely slow

* Paintops

BR  * Smudge op

* View Plugins

    * Histogram Docker needs to be reimplemented
    * Select all Opaque Pixels
    * Drop shadow crashes Krita in the tile manager

* Brushes

    * Sometimes not all brushes are loaded

Functionality that _should_ be in KOffice
=======================================================================

* Snapping guides (is in koffice, we need to use it, plus, cyrille's guided painting for freehand tools)
* Make autosave option
* Setting for autosave interval
* Setting for number of undo levels
* Add a toolbar the dockers can be docked into with just their tabs
* Temporary activation of pan tool with spacebar

2.0
=======================================================================

* Bugs

    * Filters that need access to the whole image do not work correctly with masks.
BR  * When changing the image size, the canvas doesn't realize that (change document
      size on canvas controller when image size changes)
    * Fix QPainter::restore: Unbalanced save/restore messages

* Image

    * Make recomposition threaded again
    * Make BCoppens' tile manager work (and without a global lock!)
    * Fix working with selected subset of channels everywhere
    * ??? A possible cause for the threadpool crashing issue is the fact that we throw
      QStrings across threads, and kDebug in threaded filters. Possible fix: use std::string
      in KisID and don't kDebug in filters. But that's all a long shot, hence the '?'
    * Fix gradient anti-aliasing
    * The fillpainter api is a mess: simplify to use less parameters and more getters and
      less overloading.

* UI

    * show both selection mask and global selection
    * Categorize the composite ops (show categories in combobox with a separator,
      require KDE4.1 for KCategorizedView(to be embedded in the combo box))
    * Add apply button to layer and image properties dialogs
    * Set a good default the default texture, gradient and brush and make the selector
      look good:
      ( Ronan)I have also correct the position of the maps on the buttons, put a simple
      middle-grey line around those textures and put a white BG behind the brush shape
      (really important for readability of the shape).
      http://www.ronanzeegers.com/krita-ui/newDefaultGradientTexture.png
    * Review all menu and remove unnecesserary duplicate of information like "Image > Image
      properties" to "Image > properties" or "Image > rotate > Rotate image ..." to
      "Image > rotate > Image..."
BR  * Implement a primary, secundary and tertiary paintop that get activated by mouse,
       ctrl+mouse and ctrl+shift+mouse
BR  * Fix flake layers: deletion of shapes
    * Divide the QPainter canvas' cached QImage into pyramided tiles.
    * Review "Scale to new Size" dialog. Add a keep aspect ratio switch
    * Create a "Change canvas size" dialog
BR  * make it possible to save and load masks (krita/ui/kra)
    * check if edit->clear and edit->delete can the combined

* Tools

    * Edit grid tool is not keyed to the right shapes yet
    * Edit perspective grid tool is not keyed to the right shapes yet
    * Krita needs to get its own toolbox, separately from the the KOffice toolbox (??? --
      depends on usability review)
    * The KOffice toolbox may need to become an ordinary toolbar: propose to KOffice ML.a (???
      -- depends on usability review)
BR  * Show no cursor option
    * Check painting of tool overlays (rubber bands, control points, temporary shapes etc)
      for all tools
    * Add icon for the measure tool
    * Add icon for the transform tool

* Filters

    * Filter dialog
        * The temporary filter mask does not take into account the global or local selection
        * Activate "Create Mask Effect" button
        * Fix the mask-based preview
    * Make filters work on a subset of channels

* Paintops

    * Filter paintop
        * fix painting with sharpen filter
        *  Small tiles: makes circles, otherwise effect is fun
BR  * Implement paintop presets and preset editor (necessary to make mixer canvas not break)
      Also: get http://filsd.deviantart.com/art/GIMP-possible-Defaut-set-92263636 as default 
      brush set.

* View Plugins

    * Integrate numerical input into the small colordocker
    * exif and other metadata editor
EM  * Paint mixer
    * Make scaling filter more user friendly by removing the combo and just
      presenting "fast" and "good"

* Import/Export

    * Proof-of-concept ORA filter
    * Save all annotations in .kra files
    * Save and load more information, gamma info etc.
    * Save a gradient created with autogradient

Post 2.0
=======================================================================

* Regressions from 1.x

* UI
    * Bird's eyeview docker: Hubipete started a KOffice-wide one, check status
      and make sure it's extensible with our own widgets (for exposure)
    * Rulers are uglier and have tab settings, which isn't relevant for Krita's layer shapes

* Tools
    * Magnetic Outline Tool has not been ported yet
    * Curve Paint is replaced by a flake-based curve tool, but that
      is not finished yet.
    * Perspective Transform Tool has not been ported yet
    * Brush outline cursor mode has been lost
    * select brush and eraser don't work (they should be either the
      vector-based flake tools for the vector selection or the ordinary
      paint tools for the raster selection)
    * mask selection visualisation is broken (the should be some general
      visualisation for masks)
    * use generic flake shape tool for moving and transforming masks and layers

* Filters

   * Cimg filter


* Colorspaces

    * LMS (is now dependent on OpenCTL)
    * Wet (may be deprecated definitively given EmanueleT's color work)


* Bugs

* Image

    * finish painterly overlay
    * physics filters for painterly overlays
    * Anti-aliased filling (requires some simple colorspace function to merge 2 Pixels)
    * Compress tiles, then swap the compressed tiles out (2-stage aging of old tiles)

* UI

    * add direction of light setting for mask visualisations
    * visualize wet mask
    * visualize height mask
    * visualize gravity mask
    * add scan plugin
    * make the resource popups tearable, so they can turn into dockers
    * show profiles using the lprof/digikam widget
    * add input profile combobox to the import image and scan dialogs
    * add export profile combobox to the export image and print dialogs
    * replace templates with workspaces? (Review the list of default templates,
      the current one are useless, user don't care about creating transparent
      images in rgb or cmyk or grayscale, they have a task they want to
      accomplish, so each template should be related to a task (like "painting"
      or "creating a black and white illustration" or a "photo montage" or an
      "hdr image")
    * Create opacity widget (One that grows more white or transparent (showing those
      gray blocks) based on the input)
    *  Make sure the printing is colormanaged (check X-PDF)
    * Investigate using Gutenprint to get printing on Cinepaint's level
    * Implement combobox in statusbar that switched between different types of info
      like memory consumption/swap consumption etc.
    * Add global response curve setting for tablet (replaces the old tablet
      settings that we cannot use anymore)

* Tools

    * Extend the crop tool to work as a canvas resize tool
    * Add way to switch between replace, add, subtract and intersect in the selection tools
      by pressing some key
    * Add slider that resizes the mean brush size. Also add on-canvas control for this,
      for instance using button-tilt or something like that
    * Implement fill-with-gradient for the Krita shape tools
    * Implement fill-strokeing using the current brush in various way
    * Crop tool:
        - Have presets in a combobox, for instance:
            - Web landscape (800x533px, 72 dpi)
            - Web portrait (533x800px, 72 dpi)
            - Print landscape 300 dpi. Make these presets saveable.
        -  Show autosnapping guides as hints for composition rules when cropping (gulden snede)
        - Fix interaction with guides
        - Implement keep aspect ratio
    * Transform tool: Implement gui, create cursors and update visitor for shearing. Maybe
      share the button with the default tool in flake?
    * Allow snapping to guides
    * Dodge and burn tool (see Dik Takken's email)
    * Make flake based curve and freehand vector tools create editable shapes that
      render with Krita brushes.

* Filters

    * Make set of filter categories extensible
    * Non photorealistic filters (for external plugin and 2.0)
    * Sharpen filter with settable sharpness. Look at digikam's code for this.
    * Make unsharp mask work as an adjustment layer: See:
        http://www.photo.net/bboard/q-and-a-fetch-msg.tcl?msg_id=3D000Qi5
        http://www.earthboundlight.com/phototips/unsharp-mask.html
        http://home.planet.nl/~astro.ccd.scholten/processing_E.htm
    * Colorize is not a perchannel adjustment: http://docs.gimp.org/en/gimp-tool-colorize.html.
      Make it also work as an adj. layer.
    * Soft glow filter: http://hans.breuer.org/gimp/pdb/plug_in.html#plug_in_softglow
    * Do levels similar to lightzone http://www.lightcrafts.com/products/lightzone/.
      Ask Alexandre Buisse how it should work, exactly. http://sonic.net/~rat/lightcrafts/
      for a Linux demo

* Paintops

    * implement paintops that take painterly overlays into account
    * Create architecture that lets paintop re-use the painting algorithm of other paintops
      without having to daisy-chain other paintops.
    * "bloat" and "pinch" paintop


* View Plugins

    * Gamut warning in all color selectors
    * white balance setting plugin
    * Improve support for working with LAB: Check http://www.ledet.com/margulis/articles.html
      and the notes in krita/doc on how to make LAB really useful.
    * allow float/double entry in color selectors
    * Variations dialog
    * History docker with slider and the option to selectively delete some undo/redo commands
    * Investigate if per layer history is a good idea
    * Create plugin that merges grayscale layers back into one color image.
    * Flipbook plugin: load a sequence of images (nameXXXX.ext) and keep them open
      to flip forward and backward. Save under a different nameXXXX.ext sequence.
      Contact ccherett (Chris Cherrett) for details

* Brushes

* Colorspaces

    * Make out-of-gamut visualisation
    * Indexed colorspaces

* Import/Export

    * ORA filter
    * XCF filter
    * PSD filter (there is a GPL library now, but the legal status of that
      library is uncertain)
    * Import photoshop brushes and palettes
    * CREATE swatch spec support
    * Saving 16 bit grayscale to jpeg silently converts to 8 bit grayscale
      (actually saving to both 8bits and 16bits jpeg with the same build is
      impossible with libjpeg)
    * OpenEXR:
        * Implement layers
        * Implement support for Blender multichannel, including full 32-bit float/int support
        * borrow the profile creation code from cinepaint
        * Add OpenEXR native format HDR YCbCr colourspaces

* OpenGL

    * Colour transformations using 3D textures
    * Implement glsl-based filters


* Other

    * a kimgio slave so other kde apps can show .kra images
    * a kimgio slave so other kde apps can show .ora images



Remarks by Enkhitan
=========================================================================================

*tablet & paint freely tool:

  - pressure for size is mapped to 0-200% of the size of the brush,
instead of 0-100% (it could be interesting to keep it as an option
though, to fake real soft brushes like chinese brushes, unless curves
settings for pressure comes back one day).
  - strokes are "cut" by borders of the canvas. (it's a Qt bug, tablet events are not tracked by the widget when the widget leave the canvas) (bug:162874 )
  - after painting for more than one hour, glitches appear in stroke,
and are followed soon after by a crash. These glitches are just in the
display, they are not saved in the document. They looks like the kind
you get when you video card is seriously overheating, or defectious (I
have a backtrace, console output, and screenshots, if needed). (bug:162149)

* filter paintop:

  - transparent pixels are replaced by black or white pixels, instead of
keeping their transparency (it is the case in 1.6 too, so I'm not sure
if it's a bug or missing feature, regular filters works well with
transparency, after all). (bug:162872)
   - some filters crash the app (small tiles,...)

*layers:
  - create a selection, copy, paste: the new layer is empty (but "paste
in a new image" works). (bug:162873)

*dockers/UI :

  - text input boxes (e.g. opacity, in the tool options docker) keep the
focus and catch pressed keys, even after having pressed the "enter" key.
(it also happens in karbon). (bug: 162875)


*shortcuts :

   - keyboard shorcuts don't works, except ctrl + key and Fxx ones (bug: 162876)
