[x] Optimize WidgetCanvas scrollbars to fit all widgets
[x] Connections do not render properly when WidgetCanvas is scrolled. Probably related to different size req for different overlays
[x] Do not insert new vertex when clicking in WidgetCanvas
[x] Image processor selector should be visible when WidgetCanvas viewport is scrolled
[x] Horizontal-only overflow does not complete WidgetCanvas size update
[x] Adjust size of ImageProcessor selector (ListBox)
[x] Add error handling framework
[x] Make empty and duplicated layer/palette names an input error
[x] Item name validation (empty string should be invalid)
[x] Allow preview without rerendering all nodes
[x] Improve performance when paining. Layer transformation should not require updating filter graph. When painting on layer a, nothing has do be done for layer b (transformations + filters).
[x] Determine palette size (Will probably use 16 colors)
[x] Add convenience API to modify current layer
[x] Cleanup mapping between PortType InputPortType and OutputPortType. Can we use std::reference_wrapper for OutputPortType?
[x] Fix out-of-gamut colors in viewport (currently, the program may crash if a value is out of range).
[x] Verify range of size parameters (min value should depend on layer size)
[x] Multithreaded filtergraph
[x] Tweak hue wrapping for the entire "color wheel"
[x] Short key for "Select image processor" dialog
[x] Double-clicking on image processor should add it
[x] Short keys for switching between windows
[x] Use document size as default value when creating images and new documents
[x] Bug: (Race) Window decorations are not always present when computing window size
[x] Correct initial workspace layout when creating a new document
[x] Add option to reset workspace layout
[x] Save window locations in Workspace
[x] Make all image processors are scale invariant (Currently, it is not. See #5)
[x] Short keys for switching color
[x] Make some improvements to image editor #7
[x] Document class should remember "project" directory
[x] Add separate class for Workspace, so workspace data can be ignored from batch render job
[x] Do compositing in filter graph
[x] Node placement in graph when inserting node without having any coordinates
[x] Use log scale for aspect ratio controls
[x] Add "Render to image" option
[x] Implement supersampling when rendering to file.
[x] Updates to palette must update viewport. PaletteViewEventHandler needs callback to AppWindow. Trigger on colorPiecker confirm positive.
[x] Visual difference between different port types
[x] Replace Memblock with typed unique_ptr
[x] Replace MakeEnumTuple with features from libenum
[x] Remove unused files
[x] Add support for "uniforms" in filter graph
[x] Make palette usable with weights from filter graph. Requires uniform support.
[x] Add global exposure control
[x] Limit layer/canvas width or height to be less than 2^16. Reason: To avoid any wraparound when computing image sizes
[x] Improve selected layer outline
[x] Place node copies at the correct position
[x] Add brightness and contrast filters (see #3)
[x] Import
[x] Export
[x] Save document
[x] Open document
[x] Save palettes for reuse
[x] Clean-up menu handler interfaces
[x] Improve bounding box API (and usage?)
[x] All intensity sliders should be logarithmic
[x] Make sure all exception handlers show a message box
[x] Do not fail when loading files with missing imgproc, or inconsistent connections
[x] Create startup dialog box
[x] Write documentation
[x] Implement all menu options
[x] Command-line utility to be used when rendering image
[x] Add multiple make targets (debug, release etc)
This is a list of tasks to complete