Roadmap update proposal
(WORK IN PROGRESS)
This is a proposal to update the roadmap at Roadmap. The current one is not very useful, because it has become a wishlist of miscellaneous things that do not have any planning or design behind them. Moreover, planning for a specific release doesn't look like a good idea, because frequently no one steps up to implement a given feature. Therefore relaxing the roadmap into three broad categories: short term, medium term and long term goals - might be a good idea.
This list is a start for discussion and is by no means official.
Short term goals (should be done for next release)
|Goal||Description||Status, implementors||Relevant files|
|Kill livarot||Remove the livarot library in favor of 2geom; extend 2geom where necessary||Some boolops and offset code ready in 2geom, though not yet used in Inkscape||splivarot.cpp|
|Color storage in preferences||Preferences should store color values as human-readable hex rather than bogus integer numbers||Not started||preferences.cpp|
|Document settings framework||A more robust and easy to use way to store per-document settings. On the XML side, it should store everything in an <inkscape:document-settings> element with sub-elements for page settings, snap settings, etc. On the application side, it should expose an API similar to Inkscape::Preferences. Some implementation details could be shared.||Not started; Per-document settings are stored in the legacy SPNamedView class||sp-namedview.cpp, preferences.cpp|
|Better export dialog||The export dialog should allow exporting to any format, including vector formats and all bitmap formats supported by GdkPixbuf. The Save dialog should be reduced to only include roundtrip-capable formats (e.g. saving in this format and then loading the document back should result in the same SVG representation).||Not started|
Medium term goals (2-3 releases)
|Kill SPCurve||Remove SPCurve in favor of Geom::PathVector; provide all necessary operations in 2geom||2geom side almost ready, Inkscape side not started||display/curve.cpp|
|Signal review||Remove the emitting object parameter from all signals, and convert the code that needs a reference or pointer to the emitting object to sigc::bind.
See Using libsigc++ signals for an overview of signals.
|not started||For example, selection.cpp and desktop.cpp|
|Windows Metafile support||Support saving in WMF and EMF on all platforms; use this code to support directly copying and pasting between Word/OpenOffice and Inkscape||System-wide clipboard done; EMF save support is Windows-only||ui/clipboard.cpp, extension/internal/emf-win32-inout.cpp|
|Cairo-based renderer||Replace as much of libnr with Cairo as reasonably possible||Outline mode already uses Cairo||display/ directory|
|Use Gtk::Action||Attempt to replace Verbs with Gtk::Actions, using one derived class per verb, preferably along with a system of dynamically registering new actions from extensions and tools; Use Gtk::UIManager to build all menus and toolbars; remove SPAction, InkAction, etc.||Actions are used internally for example in widgets/toolbox.cpp, but overall this area remains a mess||verbs.cpp, interface.cpp, widgets/toolbox.cpp|
|Tools refactoring||Port event contexts to C++ and rename to "tools"; augment with clipboard handlers and UI hooks to get rid of the toolbox.cpp monstrosity||Initial design of the internal architecture as part of GSoC2009 node tool rewrite; External tool API not started||*-context.cpp, widgets/select-toolbar.cpp, widgets/toolbox.cpp|
Long term goals (unknown)
|Better memory management||Remove the Boehm garbage collector; use smart pointers and clear ownership semantics (like Boost pointer containers) where appropriate; create tutorials on running Inkscape under Valgrind to catch memory leaks||Not started||gc-*.cpp|
|Better documentation||Document all important areas of Inkscape codebase: object tree, undo stack, XML tree, renderer, custom widgets, etc. Write developer tutorials on working with them.||Reasonably good documentation for the XML tree and the preferences subsystem, but most areas undocumented||all|
|Full SVG 1.1 support||Provide support for all features of the SVG 1.1 standard||?||all|
|Inkcore||Separate reusable UI, XML, object tree, and renderer components into libraries reusable by other applications||Currently there are lots of interdependencies and nothing can be separated||?|