<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Romain2Boss</id>
	<title>Inkscape Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Romain2Boss"/>
	<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/Special:Contributions/Romain2Boss"/>
	<updated>2026-05-09T18:31:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Dialog&amp;diff=89054</id>
		<title>Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Dialog&amp;diff=89054"/>
		<updated>2013-08-25T11:43:53Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Listing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By extension, a '''dialog''' in Inkscape vocabulary is any type of window, i.e. a set of widgets with an OS decoration, a title...&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
All dialogs are in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/dialog src/ui/dialog] (except for old dialogs).&lt;br /&gt;
&lt;br /&gt;
== Listing ==&lt;br /&gt;
&lt;br /&gt;
* [[About Dialog]]&lt;br /&gt;
* [[Align and Distribute Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::Behavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::DockBehavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::FloatingBehavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::CaligraphicProfileRename]]&lt;br /&gt;
* [[Close Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ColorItem]]&lt;br /&gt;
* [[Debug Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DesktopTracker]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DialogManager]]&lt;br /&gt;
* [[Document Metadatas Dialog]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/Document Metadata]]&lt;br /&gt;
* [[Document Properties Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ExtensionEditor]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ExtensionPanel]]&lt;br /&gt;
* [[Export Bitmap Dialog]]&lt;br /&gt;
** [[Export Bitmap Dialog Re-Design]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/Export Bitmap]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogBaseGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogBaseWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogOCALBase]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileImportFromOCALDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileListViewText]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialogImplGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialogImplGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialogImplWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialogImplWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileExportDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileExportDialogImpl]]&lt;br /&gt;
* [[Stroke Dialog]]&lt;br /&gt;
** [[Fill and Stroke Dialog Re-Design]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FilterEffectsDialog]]&lt;br /&gt;
* [[Find Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::GlyphsPanel]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::GuidelinePropertiesDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::IconPreviewPanel]]&lt;br /&gt;
* [[Image Properties Dialog]]&lt;br /&gt;
** [[Image properties dialog enhancements]]&lt;br /&gt;
* [[Inkscape Preferences Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::InputDialog]]&lt;br /&gt;
* [[Layer Dialog]]&lt;br /&gt;
* [[Layer Properties Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LayersPanel]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LivePathEffectEditor]]&lt;br /&gt;
* [[New Document Dialog]]&lt;br /&gt;
* [[Memory Dialog]]&lt;br /&gt;
* [[Messages Dialog]]&lt;br /&gt;
* [[OCAL Dialog]]&lt;br /&gt;
** [[OCAL Dialog Re-Design]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/OCAL]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::PanelDialogBase]]&lt;br /&gt;
* [[Print Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::PrintColorsPreviewDialog]]&lt;br /&gt;
* [[Script Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SvgFontsDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SVGPreview]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SwatchesPanel]]&lt;br /&gt;
* [[SymbolsDialog|Symbols Dialog]]&lt;br /&gt;
* [[Tablet Dialog]]&lt;br /&gt;
* [[Text Dialog]]&lt;br /&gt;
* [[Tile Dialog]]&lt;br /&gt;
* [[Trace Bitmap Dialog]]:&lt;br /&gt;
** [[Trace Bitmap Dialog Re-Design]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Transformation]]&lt;br /&gt;
* [[Undo History Dialog]]&lt;br /&gt;
&lt;br /&gt;
Dialogs that have not yet been rewritted can be found in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/dialogs src/dialogs].&lt;br /&gt;
&lt;br /&gt;
== Re-designs ==&lt;br /&gt;
&lt;br /&gt;
* [[Andrews Big Dialog Re-Design]]&lt;br /&gt;
* [[Andrews Big Dialog Re-Design/Embed or Link]]&lt;br /&gt;
* [[FindReplaceDialog]]&lt;br /&gt;
* [[DialogsReorganization]]&lt;br /&gt;
&lt;br /&gt;
== Create a new dialog ==&lt;br /&gt;
&lt;br /&gt;
Creating a new dialog requires the following steps:&lt;br /&gt;
&lt;br /&gt;
# Create a new dialog in ''src/ui/dialogs'' (you can find inspiration from the existing dialogs).&lt;br /&gt;
# Register your dialog in ''src/dialogs/dialog-manager.cpp''.&lt;br /&gt;
# In ''src/verbs.cpp'', create a new [[verb]] (new DialogVerb) and associate it (DialogVerb::perform) with the dialog's registered name to perform the appropriate action. Also include your dialog's header in the ''verbs.cpp'' file.&lt;br /&gt;
# If needed, map the new verb to the preferences (SPDesktop::show_dialogs() in ''src/desktop.cpp'').&lt;br /&gt;
# Call the dialog from the appropriate location with ''dt-&amp;gt;_dlg_mgr-&amp;gt;showDialog(&amp;quot;mydialog&amp;quot;)'', ''dt'' being the current ''SPDesktop''.&lt;br /&gt;
&lt;br /&gt;
[[Category:Dialogs]]&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Keyboard_profiles&amp;diff=89048</id>
		<title>Keyboard profiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Keyboard_profiles&amp;diff=89048"/>
		<updated>2013-08-25T11:28:33Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Several people suggested that making keyboard shortcuts user-configurable and providing &amp;quot;profiles&amp;quot; imitating other vector editors. There are currently four categories of shortcuts, and not all of them are equally easy to make user-configurable:&lt;br /&gt;
&lt;br /&gt;
* [[Verb|Global verbs]] (in shortcuts.cpp): these work everywhere (both in document and in dialogs) except text-editing dialog widgets. They switch tools, zoom, etc.; they should be easy to read from a config file.&lt;br /&gt;
&lt;br /&gt;
* Global context shortcuts (in event-context.cpp): these work in all tools but only within the document window. These are actions that make no sense without a document window, e.g. panning the canvas by ctrl-arrows. These are more tricky to make configurable.&lt;br /&gt;
&lt;br /&gt;
* Per-tool shortcuts (in select-context.cpp, node-context.cpp, etc): these are actions specific to the tool. They are difficult to make configurable, and moreover, many of the actions they trigger would have no exact match in other vector apps. &lt;br /&gt;
&lt;br /&gt;
* Widget shortcuts in dialogs, such as Tab for moving between widgets. I don't know how to change these, and anyway they are mostly standard enough so we don't need to bother with them.&lt;br /&gt;
&lt;br /&gt;
So perhaps as a first step, we can make global verbs configurable and see if this is sufficient to imitate other vector apps well enough. &lt;br /&gt;
&lt;br /&gt;
== What is to be done ==&lt;br /&gt;
&lt;br /&gt;
If you like this idea, you could already start working towards this. Please pick your favorite non-Inkscape vector app and make a list of its shortcuts and corresponding functions. Please also categorize each function into one of the following groups: &lt;br /&gt;
&lt;br /&gt;
1.  There is a corresponding function (with the same or different shortcut) in shortcuts.cpp (i.e. this is a global verb in Inkscape).&lt;br /&gt;
&lt;br /&gt;
2.  There is no such function in shortcuts.cpp but such a function is listed on the [[KeyboardShortcuts]] wiki page (which tracks all shortcuts currently implemented in Inkscape).&lt;br /&gt;
&lt;br /&gt;
3.  There's no such function in Inkscape, but it would be relatively straightforward to implement it. &lt;br /&gt;
&lt;br /&gt;
4.  There's no such function in Inkscape, and it's not clear how to implement it (i.e. we don't have such a tool, or palette, etc.). &lt;br /&gt;
&lt;br /&gt;
Please use Wiki for creating your lists. You can link your list pages from this page and from under &amp;quot;Interface discussions&amp;quot; on the Wiki front page.&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=HowToEditIcons&amp;diff=89042</id>
		<title>HowToEditIcons</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=HowToEditIcons&amp;diff=89042"/>
		<updated>2013-08-25T11:27:56Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BULIA SAYS:&lt;br /&gt;
&lt;br /&gt;
My opinion on the desirable icon style is here:&lt;br /&gt;
&lt;br /&gt;
[[IconsStyle]]&lt;br /&gt;
&lt;br /&gt;
Other than that, it's difficult to give advice. All I can say is that e.g. the group/ungroup and z-order icons are ugly and noisy, while the flip icons are OK. Icons IMHO must be simple and laconic, not &amp;quot;realistic&amp;quot; or &amp;quot;3D&amp;quot;. Just go on and try to draw something and we'll comment :)&lt;br /&gt;
&lt;br /&gt;
=== Procedure ===&lt;br /&gt;
&lt;br /&gt;
As for the procedure, draw new icons in share/icons/icons.svg, group each icon and assign an id to the group via the &amp;quot;item properties&amp;quot; dialog (you can also use the XML editor), and then you specify that id for the corresponding [[verb]] in verbs.cpp (the last component of each line of props[]).&lt;br /&gt;
&lt;br /&gt;
I'd like everyone who commits icons.svg to also make sure they have the following in ~/.inkscape/preferences.xml, before they save the file:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;group&lt;br /&gt;
      id=&amp;quot;svgoutput&amp;quot;&lt;br /&gt;
      usenamedcolors=&amp;quot;0&amp;quot;&lt;br /&gt;
      numericprecision=&amp;quot;7&amp;quot;&lt;br /&gt;
      minimumexponent=&amp;quot;-8&amp;quot;&lt;br /&gt;
      inlineattrs=&amp;quot;1&amp;quot;&lt;br /&gt;
      indent=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This makes quite a difference in file size, and for such time-critical file as this, every millisecond counts. Thanks!&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=EventContextGrab&amp;diff=89036</id>
		<title>EventContextGrab</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=EventContextGrab&amp;diff=89036"/>
		<updated>2013-08-25T11:27:29Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As first discussed in [[InkscapeTamed]], keyboard events are sent to the event context handlers (both global in event-context.c and tool-specific e.g. select-context.c) ONLY when the mouse is over the canvas. &lt;br /&gt;
&lt;br /&gt;
Simple experiment: move a shape by arrows. This works while the mouse cursor is over the document window but stops as soon as you move mouse away from it, even if the document window still has focus. [[Verb|Global verbs]] like + and - and ctrl-q always work. We cannot however make tool-specific shortcuts global verbs.&lt;br /&gt;
&lt;br /&gt;
* Mental writes:&lt;br /&gt;
&lt;br /&gt;
Grabbing focus between widgets is accomplished via&lt;br /&gt;
gtk_widget_grab_focus().  The widget will need to have the GTK_CAN_FOCUS&lt;br /&gt;
flag set, however. I've taken care of the latter half in desktop.c now (setting the&lt;br /&gt;
CAN_FOCUS widget flag).&lt;br /&gt;
&lt;br /&gt;
I guess what remains is just determining when it would be appropriate to&lt;br /&gt;
call gtk_widget_grab_focus() on the canvas widget.&lt;br /&gt;
&lt;br /&gt;
* bb writes:&lt;br /&gt;
&lt;br /&gt;
I cannot make it work. I added&lt;br /&gt;
 &lt;br /&gt;
 	gtk_widget_grab_focus (&amp;amp;(dtw-&amp;gt;canvas-&amp;gt;widget));&lt;br /&gt;
 &lt;br /&gt;
into sp_desktop_widget_new in desktop.c. For debugging, I also added&lt;br /&gt;
 &lt;br /&gt;
 	gtk_signal_connect (GTK_OBJECT (&amp;amp;(dtw-&amp;gt;canvas-&amp;gt;widget)), &amp;quot;event&amp;quot;, GTK_SIGNAL_FUNC (sp_canvas_event_handler), &amp;amp;(dtw-&amp;gt;canvas-&amp;gt;widget));&lt;br /&gt;
&lt;br /&gt;
and put some debug output into sp_canvas_event_handler. With or without the &lt;br /&gt;
grab, it looks like the canvas widget gets keypresses, but does not pass &lt;br /&gt;
them on to the event context. That is, it does pass it to the event context &lt;br /&gt;
but only when the mouse is within the canvas.&lt;br /&gt;
 &lt;br /&gt;
Maybe we need to grab focus on the event context, not on the canvas? But how &lt;br /&gt;
to do that? I think the event context is not a GTK widget.&lt;br /&gt;
&lt;br /&gt;
* Mental responds:&lt;br /&gt;
&lt;br /&gt;
Well, grab_focus() isn't like a window &amp;quot;grabbing&amp;quot; focus;&lt;br /&gt;
gtk_widget_grab_focus() is the normal mechanism for widgets handing&lt;br /&gt;
focus off to one another.&lt;br /&gt;
&lt;br /&gt;
_new() likely isn't the time to call it, because its effect is not&lt;br /&gt;
persistent.&lt;br /&gt;
&lt;br /&gt;
So it would need to be called e.g. when the canvas widget is clicked or&lt;br /&gt;
moused over or something like that.&lt;br /&gt;
&lt;br /&gt;
Thinking about it, I _believe_ (I will have to double-check) that&lt;br /&gt;
events are actually passed to the event context by the enclosing&lt;br /&gt;
[ventBox (GtkDesktopWidget is a descendant of GtkEventBox).&lt;br /&gt;
&lt;br /&gt;
* and then adds:&lt;br /&gt;
&lt;br /&gt;
Ick.&lt;br /&gt;
&lt;br /&gt;
To be honest I still don't totally understand how events are handed off&lt;br /&gt;
to event contexts in Sodipodi/Inkscape. :/&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Maybe we need to grab focus on the event context, not on the canvas? But how &lt;br /&gt;
&amp;gt; to do that? I think the event context is not a GTK widget.&lt;br /&gt;
&lt;br /&gt;
Well, ultimately _some_ widget must receive the events and passing them&lt;br /&gt;
on to the event context.  We need to figure out which widget that&lt;br /&gt;
is/should be.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
UPDATE: OK, I think I fixed that. Now the canvas always gets all keys, including arrows, space, esc etc. (i.e. not only global verb shortcuts) so long as the document window has focus. This closes a sore &amp;quot;known problem&amp;quot; from 0.36 release notes.&lt;br /&gt;
&lt;br /&gt;
I'm not sure if my fix is &amp;quot;correct&amp;quot; but it seems to work. Previously, event contexts received events only from the &amp;quot;acetate&amp;quot; item on the canvas (this is an invisible item covering the entire canvas), and this item obviously can only have focus when mouse is over it. We have tried putting event grab on the canvas widget, but this apparently did not affect the acetate which, not being a GTK widget, cannot have a grab. My solution is simply to call sp_desktop_root_handler() from within the sp_desktop_widget_event() handler (which receives all desktop widget events regardless of mouse position) but only for GDK_KEY_PRESS events and only if the desktop's canvas has no current item (because in that case, an item handler must be called instead of root handler, and I don't need to do that anyway because this can only happen when the mouse is over the canvas).&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki Attic]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Developer_manual&amp;diff=89030</id>
		<title>Developer manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Developer_manual&amp;diff=89030"/>
		<updated>2013-08-25T11:26:21Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Inkscape Developer’s Manual =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
For those of you just joining us, or who have been with us but are just&lt;br /&gt;
now getting the itch to work on Inkscape, I thought I’d give some tips&lt;br /&gt;
for how to get started working in the codebase based on our own&lt;br /&gt;
experiences.&lt;br /&gt;
&lt;br /&gt;
One of the first things most people wonder is “What should I work on?”.&lt;br /&gt;
As you may have already noticed, we generally don’t “assign” projects.&lt;br /&gt;
We figure there’s plenty more work to do than people to do it, so you&lt;br /&gt;
may as well work on something that you’re either interested in or that&lt;br /&gt;
adds something of benefit to you; that’s extra motivation to get your&lt;br /&gt;
own itches scratched.&lt;br /&gt;
&lt;br /&gt;
If you’re really stumped though, we keep a detailed [[Roadmap]] in wiki that&lt;br /&gt;
you’re welcome to browse through to look for ideas of things to work&lt;br /&gt;
on.  Tasks that do not have names beside them are open for anyone to&lt;br /&gt;
take; if you want to take ownership of a task, just put your name beside&lt;br /&gt;
it.  Feel free to add or reword tasks as needed, although try not to&lt;br /&gt;
load up the current milestone with tasks that aren’t critical for the&lt;br /&gt;
release.  Feel free to work on stuff that is several milestones down the&lt;br /&gt;
road; there’s rarely any problem with getting stuff done sooner than&lt;br /&gt;
planned.  ;-)&lt;br /&gt;
&lt;br /&gt;
We have a process for gaining SVN commit access.  The reason is that&lt;br /&gt;
while it is important that we keep access to the codebase open, we don’t&lt;br /&gt;
want to be crazy and leave it wide open to any random passer-by.  The&lt;br /&gt;
process is that we require that the person make two contributions&lt;br /&gt;
(patches, documentation, web collateral, etc.) and then make a request&lt;br /&gt;
to get account access.&lt;br /&gt;
&lt;br /&gt;
In general you won’t need SVN commit access in order to start doing&lt;br /&gt;
development, because you can work from an anonymous checkout and create&lt;br /&gt;
patches.  If you’ve not done this before, you’ll need to learn this&lt;br /&gt;
skill first (basically see docs for `svn diff`).&lt;br /&gt;
&lt;br /&gt;
When you first start hacking on Inkscape code, I wouldn’t recommend&lt;br /&gt;
taking an objective of implementing a specific feature, because you will&lt;br /&gt;
need some time to familiarize yourself with the codebase, and because&lt;br /&gt;
you won’t really know what features are going to be straightforward to&lt;br /&gt;
implement and which will be highly challenging.  Of course, if you have&lt;br /&gt;
the time and love adventures, this might be a fun way to go.&lt;br /&gt;
&lt;br /&gt;
There are four approaches that I’ve seen people effectively use in&lt;br /&gt;
getting into the codebase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Write code documentation.&amp;lt;/strong&amp;gt;  Some people who don’t mind adding&lt;br /&gt;
comments to code or writing docs find it useful to just go through&lt;br /&gt;
code they’re interested in working on and writing up what it does.&lt;br /&gt;
The codebase is in dire need of better docs, so this approach pays&lt;br /&gt;
dividends well into the future.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Fix bugs.&amp;lt;/strong&amp;gt;  Tracing down the cause of reported bugs is an effective&lt;br /&gt;
way to gain understanding of the codebase in small chunks.  Many&lt;br /&gt;
common bugs can be traced down and fixed in a matter of hours, and&lt;br /&gt;
often will identify some bit of code in need of refactoring or&lt;br /&gt;
extension.  Note that some of our older bugs are in the system&lt;br /&gt;
because they’re hard to fix, so you’ll want to work on the more&lt;br /&gt;
recent ones.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Chip in on a group effort.&amp;lt;/strong&amp;gt;  Occasionally we identify a major&lt;br /&gt;
refactoring effort (such as when we converted from C to C++), that&lt;br /&gt;
we encourage lots of people to help on, in the philosophy that many&lt;br /&gt;
hands makes short work.  This work tends to be pretty rote so is&lt;br /&gt;
not hard for new folks to get involved with; it just takes time.  We&lt;br /&gt;
generally have one of these kinds of efforts per release.  It&lt;br /&gt;
usually isn’t glamorous work, but in aggregate moves the codebase&lt;br /&gt;
forward in a major way.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Subsystem/module work.&amp;lt;/strong&amp;gt;  Some people want to get their hands in the&lt;br /&gt;
details quick, so take the approach of developing new code separate&lt;br /&gt;
from the codebase, to be integrated in later.  This generally tends&lt;br /&gt;
to take a larger time commitment than the other approaches, but can be&lt;br /&gt;
an effective approach in some circumstances.  We have a SVN module&lt;br /&gt;
called &amp;lt;code&amp;gt;experimental&amp;lt;/code&amp;gt; that you’re welcome to house your work until&lt;br /&gt;
it’s ready for prime time.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beyond that, you’re going to find the documentation for the Inkscape&lt;br /&gt;
code is pretty scarce.  We’ve worked on bits and pieces but&lt;br /&gt;
unfortunately the vast majority of the code is undocumented.  On the&lt;br /&gt;
plus side, often you can implement the stuff you care about after&lt;br /&gt;
learning only a limited portion of the codebase.&lt;br /&gt;
&lt;br /&gt;
I think you’d find Inkscape an enjoyable Open Source project to work on.&lt;br /&gt;
There’s a huge range of interesting and useful skills that can be&lt;br /&gt;
learned from it, plus the developers are great guys to participate with.&lt;br /&gt;
The project itself runs smoothly and puts a premium on keeping things&lt;br /&gt;
friendly and low-stress, so heated arguments are rare.  The users have&lt;br /&gt;
been great to work with and very appreciative of even small new features&lt;br /&gt;
and fixes.  Plus, since Inkscape is so visual in nature, it’s very cool&lt;br /&gt;
to see how your little changes make noticeable improvements to the app&lt;br /&gt;
overall.&lt;br /&gt;
&lt;br /&gt;
== C++ Reference ==&lt;br /&gt;
* FAQ (with answers) sheet. We strongly recommend that everyone read this site comprehensively. You should not need to bookmark it, it should be the first of the sites on your autocomplete list for &amp;lt;code&amp;gt;par&amp;lt;/code&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
http://www.parashift.com/c++-faq-lite/&lt;br /&gt;
&lt;br /&gt;
It is actually more in-depth than the name FAQ suggests.  Many experienced C++ programmers would benefit from it.&lt;br /&gt;
&lt;br /&gt;
* List of &amp;lt;s&amp;gt;[http://www.cs.helsinki.fi/u/vkarvone/2004s/cplusplus/errors.html schoolboy errors] (Broken Link)&amp;lt;/s&amp;gt;. None of these should appear in [http://en.wikipedia.org/wiki/Free/Libre/Open-Source_Software FLOSS] code.&lt;br /&gt;
&lt;br /&gt;
== Please use const ==&lt;br /&gt;
&lt;br /&gt;
Please be very aggressive in adding ''const'' to any code you write. It will help us understand code better and will prevent bugs from creeping in. It is very easy to remove ''const'' later on, but very hard to add it.&lt;br /&gt;
&lt;br /&gt;
''const'' can go on either side of a type. However once you get into references and pointers and such with C++, you generally read those from right-to-left. So it makes the code a little more legible if the ''const'' comes between the variable type and name.&lt;br /&gt;
&lt;br /&gt;
 int const foo;&lt;br /&gt;
 // RTL reading gives &amp;quot;foo is a constant int&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
And then:&lt;br /&gt;
&lt;br /&gt;
 int const &amp;amp; foo;&lt;br /&gt;
 // RTL reading gives &amp;quot;foo is a reference o a constant int&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 int const * foo;&lt;br /&gt;
 // RTL reading gives &amp;quot;foo is a pointer to a constant int&amp;quot;&lt;br /&gt;
&lt;br /&gt;
whereas:&lt;br /&gt;
&lt;br /&gt;
 int * const foo;&lt;br /&gt;
 // RTL reading gives &amp;quot;foo is a constant pointer to an int&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Read also:&lt;br /&gt;
* [http://www.cprogramming.com/tutorial/const_correctness.html Const Correctness]&lt;br /&gt;
* [http://yosefk.com/c++fqa/const.html Const Correctness]&lt;br /&gt;
&lt;br /&gt;
== Strings ==&lt;br /&gt;
Please make sure any user-visible strings are localizable.  This requires wrapping them with &amp;quot;_(&amp;quot; and &amp;quot;)&amp;quot;, like so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;quot;Select object&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
becomes&lt;br /&gt;
 &amp;lt;code&amp;gt;_(&amp;quot;Select object&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case the interpretation of the string may be ambiguous or may differ according to context, you can add a context prefix (that won't be displayed) in order to eliminate the ambiguity. &lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;quot;Ambiguous string&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
can then become&lt;br /&gt;
 &amp;lt;code&amp;gt;C_(&amp;quot;Context&amp;quot;, &amp;quot;Ambiguous string&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more complex things, please check the gettext/localization documentation.&lt;br /&gt;
See also http://library.gnome.org/devel/glib/unstable/glib-I18N.html&lt;br /&gt;
&lt;br /&gt;
== Implementing User Interface Changes ==&lt;br /&gt;
&lt;br /&gt;
[[UI improvements]] are enjoyable to work on because they produce visible changes in how Inkscape works.  These improvements are one of the most tangible ways to help improve how Inkscape works; thus, we strongly support new developers wishing to work in these areas.&lt;br /&gt;
&lt;br /&gt;
It is also very important to us that Inkscape presents an organized, productive, and easily discoverable interface to users.  Because of this it is important that new Inkscape UI developers work to ensure changes make Inkscape’s UI *more* consistent, *more* flexible, *more* cohesive, and so on.  We don’t have firm rules about what can and cannot done, in order to ensure plenty of freedom for innovation.  However, we can outline some general principles and guidelines that are important to keep in mind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Don’t please the artist—BE the artist.&amp;lt;/strong&amp;gt;  Many times UI is designed and created by programmers who “understand what the user wants”.  But in Inkscape we believe that the best requirements list is the list inside the user’s head.  Requirements docs, usability studies, and so on are very indirect ways of transferring this gut-level understanding from user to programmer.  We believe the best way to ensure this information is communicated clearly is for the user to BE the programmer.  Or, alternatively, for the programmer to BECOME a user.&lt;br /&gt;
&lt;br /&gt;
This is why we so strongly encourage users to get involved in coding, and why we so strongly encourage programmers to focus on the features that are most important to them personally.  This is also why it is absolutely critical to pay close attention to what users report when using a new feature—often they can tip you off to alternate designs that achieve the same result in a better way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Eliminate limitations.&amp;lt;/strong&amp;gt; Commercial software is often developed to fulfill feature requirement lists from a marketing department.  As such, it’s common to see the feature implemented to meet the requirement exactly, and no more.  However, especially with artistic software, art is often found outside what seems reasonable.  So when putting in a new feature, avoid the temptation to limit it to what you expect people to use it for—instead generalize it and open as many parameters as possible for tweaking, and let the artist decide what is reasonable.  That’s their job.  &lt;br /&gt;
&lt;br /&gt;
As an example, a drawing program might want to support the features “feather” and “drop shadow”.  Obviously, users need these important features.  Commercial software may well implement these as distinct features, each with their own UI controls.  However, these features are just special cases of the more general gaussian blur, and in Inkscape we implemented *that*.  With that in place, artists can do feathering and blur, &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; a variety of other effects.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that, as an open collaborative standard, SVG&lt;br /&gt;
necessarily has the same goals as Inkscape: a minimum set of&lt;br /&gt;
universal, well thought-out building blocks that can accommodate the&lt;br /&gt;
widest possible range of graphics and applications. Thus, simply by&lt;br /&gt;
following the SVG philosophy, Inkscape scores quite a few important&lt;br /&gt;
points over commercial software. Live clones, patterns that can be contain any&lt;br /&gt;
objects, layers that are essentially groups and can be easily&lt;br /&gt;
converted to/from groups.  These are all examples where the underlying&lt;br /&gt;
universality of SVG directly translates into extremely valuable user&lt;br /&gt;
features.&lt;br /&gt;
&lt;br /&gt;
== Implementing New SVG Features ==&lt;br /&gt;
&lt;br /&gt;
The most important way to help Inkscape is to implement a new SVG feature in it.  Our hope is to eventually support ALL SVG features, so if you can help check one off the list, it brings us close to the nirvana of 100% SVG compliance.  :-)&lt;br /&gt;
&lt;br /&gt;
Generally we find that implementation of an SVG feature goes through three discrete stages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Find the appropriate tags and attributes in the SVG spec&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Implement support for rendering files with these tags&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Implement support for UI controls to edit the tags&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 1 is mostly a research project.  Start by reading the SVG spec so you&lt;br /&gt;
can learn about the tag, the attributes that go with it, and so forth.&lt;br /&gt;
It is good practice to set up a page in the Wiki for storing your notes&lt;br /&gt;
as you do this process, so that in case you don’t make it to steps 2 and&lt;br /&gt;
3, then maybe someone else can benefit from your research.&lt;br /&gt;
&lt;br /&gt;
Step 2 is the fun part.  It helps to be comfortable with Inkscape internals&lt;br /&gt;
for this part.  Depending on the feature, it may require advanced&lt;br /&gt;
knowledge of transformation, rendering, document management, and so on.&lt;br /&gt;
For this part, just hand-edit an SVG file to put the tags in that you&lt;br /&gt;
found in step #1, and keep plugging away at the code until Inkscape&lt;br /&gt;
displays things as the specification dictates.  It can help to compare&lt;br /&gt;
your work with Batik, as we use that program as our reference&lt;br /&gt;
implementation.&lt;br /&gt;
&lt;br /&gt;
Step 3 is the most important stage. It is the point at which the&lt;br /&gt;
feature becomes available for users.  This step often requires knowledge&lt;br /&gt;
of Gtk+, for creating dialogs, widgets, menus, etc. for allowing the&lt;br /&gt;
user to edit the characteristics of the feature.  Be sure to listen to&lt;br /&gt;
feedback from other developers and users—especially if there are&lt;br /&gt;
different opinions.  It is hard to come up with UI that everyone can&lt;br /&gt;
agree on, but it is worth the work to achieve this—the more critique&lt;br /&gt;
your UI survives, the better loved the feature will be for future users.&lt;br /&gt;
&lt;br /&gt;
Looking through Inkscape’s history, these stages are often done by different people.  If you’re new to Inkscape, you may find working on stages 1 and 3 easiest, but there are many developers who can answer questions when you’re ready to dig into the internals, so don’t be afraid to ask questions!&lt;br /&gt;
&lt;br /&gt;
== Standards Compliance - Extension Namespaces ==&lt;br /&gt;
&lt;br /&gt;
* Only elements and attributes from our extension namespaces that ''do not affect rendering'' may be saved in SVG documents.&lt;br /&gt;
* Generally, this means that extension elements and attributes should only be used to provide UI hints.&lt;br /&gt;
* Extension elements and attributes should ''only'' be used where an existing facility provided by XML or SVG is not sufficient.&lt;br /&gt;
&lt;br /&gt;
== Global Verbs ==&lt;br /&gt;
&lt;br /&gt;
Here’s a readers’ digest summary of how Inkscape accelerators work:&lt;br /&gt;
&lt;br /&gt;
A global mapping between key combinations and integer [[verb]] IDs&lt;br /&gt;
(&amp;lt;code&amp;gt;sp_verb_t&amp;lt;/code&amp;gt;) is maintained in &amp;lt;code&amp;gt;shortcuts.cpp&amp;lt;/code&amp;gt;; these are registered using&lt;br /&gt;
&amp;lt;code&amp;gt;sp_shortcut_set()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Given an &amp;lt;code&amp;gt;sp_verb_t&amp;lt;/code&amp;gt; and an &amp;lt;code&amp;gt;SPView&amp;lt;/code&amp;gt;, you can get an SPAction which&lt;br /&gt;
represents that action in that view.  These mappings are currently&lt;br /&gt;
hard-coded in &amp;lt;code&amp;gt;verbs.cpp&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SPActions&amp;lt;/code&amp;gt; derive from &amp;lt;code&amp;gt;NRActiveObject&amp;lt;/code&amp;gt;, which putatively provides a&lt;br /&gt;
“lightweight” method of doing callbacks (vs &amp;lt;code&amp;gt;GObject&amp;lt;/code&amp;gt; signals).  I&lt;br /&gt;
don’t completely understand how it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SPActions&amp;lt;/code&amp;gt; also contain the label, image, etc, used for buttons and&lt;br /&gt;
menuitems.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sp_shortcut_invoke()&amp;lt;/code&amp;gt; looks up the &amp;lt;code&amp;gt;SPAction&amp;lt;/code&amp;gt; for a keypress and &amp;lt;code&amp;gt;SPView&amp;lt;/code&amp;gt; and&lt;br /&gt;
invokes it automatically. &amp;lt;code&amp;gt;SPEventContexts&amp;lt;/code&amp;gt; call it for keypresses that they do not handle themselves.&lt;br /&gt;
&lt;br /&gt;
== Garbage collection ==&lt;br /&gt;
&lt;br /&gt;
As you know, many automatic garbage collectors (like &amp;lt;code&amp;gt;libgc&amp;lt;/code&amp;gt;) only&lt;br /&gt;
free and recycle memory periodically.  This means you may have some&lt;br /&gt;
extra slush that could be freed, but hasn’t yet.&lt;br /&gt;
&lt;br /&gt;
There are other forces at work, though...&lt;br /&gt;
&lt;br /&gt;
Pretty much all allocators, whether automatic or not, whether the&lt;br /&gt;
system &amp;lt;code&amp;gt;malloc()&amp;lt;/code&amp;gt; or some custom allocator like &amp;lt;code&amp;gt;libgc&amp;lt;/code&amp;gt;’s, work the&lt;br /&gt;
same way:  they request large blocks of memory from the operating&lt;br /&gt;
system, then divvy those blocks into smaller ones internally to&lt;br /&gt;
satisfy application allocation requests.&lt;br /&gt;
&lt;br /&gt;
When an application frees memory, that memory is usually recycled&lt;br /&gt;
internally rather than returned to the OS immediately.  The reason&lt;br /&gt;
for this is that the large memory blocks acquired from the OS must&lt;br /&gt;
be completely unused before they can actually be freed.&lt;br /&gt;
&lt;br /&gt;
For example, let’s say an allocator acquires 16 8MB blocks from&lt;br /&gt;
the OS in response to 32768 4k application allocations...&lt;br /&gt;
&lt;br /&gt;
In a worst-case scenario, it’s possible that the application could&lt;br /&gt;
free 32752 of those 4k blocks but the remaining 16 4k just happen&lt;br /&gt;
to be distributed across the 16 8MB blocks requested from the OS.&lt;br /&gt;
&lt;br /&gt;
If that happens, from the application’s point of view it may only&lt;br /&gt;
have 64k allocated, but as far as the OS is concerned, it’s still&lt;br /&gt;
using 128MB!&lt;br /&gt;
&lt;br /&gt;
Note that this applies to nearly all allocators in common use.&lt;br /&gt;
&lt;br /&gt;
While it’s unusual for things to get quite that bad, memory&lt;br /&gt;
fragmentation is common enough that many popular allocators (for&lt;br /&gt;
example Perl’s) simply don’t bother trying to return memory to the&lt;br /&gt;
OS at all (the memory will still get forcibly reclaimed by the OS&lt;br /&gt;
when the process exits).&lt;br /&gt;
&lt;br /&gt;
[ FWIW, &amp;lt;code&amp;gt;libgc&amp;lt;/code&amp;gt;’s allocator is one of the ones that _does_ make an&lt;br /&gt;
effort to release memory to the OS, but it is limited by&lt;br /&gt;
fragmentation like any other ]&lt;br /&gt;
&lt;br /&gt;
Also note that for various reasons, the statistics you get from the&lt;br /&gt;
OS aren’t going to directly reflect the amount of heap-allocated&lt;br /&gt;
memory.  Be careful drawing conclusions from only looking at e.g.&lt;br /&gt;
the output of &amp;lt;code&amp;gt;top(1)&amp;lt;/code&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
(The worst thing is, due to the modern practice of&lt;br /&gt;
overcommitting memory, the OS may literally lie to an application&lt;br /&gt;
about the amount of memory it is being given, hoping the&lt;br /&gt;
application won’t really try to use it all.)&lt;br /&gt;
&lt;br /&gt;
The best approach to evaluating memory usage is if you can ask the&lt;br /&gt;
allocator for information on memory usage directly, as that matches&lt;br /&gt;
the world from the point of view of the application.&lt;br /&gt;
&lt;br /&gt;
leftover gradients/markers/patterns will get automatically cleaned up when the objects that use them are deleted.&lt;br /&gt;
&lt;br /&gt;
Caveats:&lt;br /&gt;
&lt;br /&gt;
* this only applies to such objects created with a build of Inkscape which post-dates this commit (June 7 2004) &amp;lt;!-- (2009?) - no, June 7 2004. The date was added in [http://wiki.inkscape.org/wiki/index.php?title=Developer_manual&amp;amp;diff=prev&amp;amp;oldid=1233 Revision as of 06:00, 7 June 2004] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* not all automatically-created objects will necessarily be collected; the code that creates them needs to be updated to set the correct collection policy&lt;br /&gt;
&lt;br /&gt;
* paint objects won’t get collected until another editing operation takes place, since &amp;lt;code&amp;gt;NRArenaShape&amp;lt;/code&amp;gt; currently holds onto an &amp;lt;code&amp;gt;SPStyle&amp;lt;/code&amp;gt; for too long&lt;br /&gt;
&lt;br /&gt;
Technical details:&lt;br /&gt;
&lt;br /&gt;
Assuming its collection policy permits it, an object will be collected&lt;br /&gt;
if neither it nor its descendants have any outstanding inter-document&lt;br /&gt;
URI references (nonzero &amp;lt;code&amp;gt;SPObject::hrefcount&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
There are two “policies” for collecting orphans:&lt;br /&gt;
&lt;br /&gt;
* “with-parent” - the object will only be collected if one of its ancestors is collected&lt;br /&gt;
&lt;br /&gt;
* “always” - the object is always collected if unused&lt;br /&gt;
&lt;br /&gt;
(a third policy might be “never”, which would necessarily also prevent&lt;br /&gt;
that object’s ancestors from ever being collected; I do not plan on&lt;br /&gt;
implementing it)&lt;br /&gt;
&lt;br /&gt;
The policy in effect is determined by the inkscape:collect attribute.&lt;br /&gt;
&lt;br /&gt;
Be careful with the “always” policy; it really only makes sense for&lt;br /&gt;
“private” objects that are indirectly created behind the scenes (e.g. by&lt;br /&gt;
selecting a fill or marker option in the GUI).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SPDocument&amp;lt;/code&amp;gt; manages a queue of objects to collect; &amp;lt;code&amp;gt;SPObject&amp;lt;/code&amp;gt; handles the machinery for actually queueing them when their &amp;lt;code&amp;gt;hrefcount&amp;lt;/code&amp;gt; falls (based on policy), and performing the actual collection (&amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;code&amp;gt;SPDocument::collectObjects()&amp;lt;/code&amp;gt; performs a collection pass. It’s currently only called from &amp;lt;code&amp;gt;sp_document_maybe_done()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Inkscape Experimental SVN ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;experimental&amp;lt;/code&amp;gt; module in Inkscape SVN is provided as a kind of “scratchpad” for &lt;br /&gt;
working up new ideas that aren’t quite ready for folding into the main codebase.&lt;br /&gt;
This includes architectural sketches, examples, experimental patchsets, tools &amp;amp; utilities, or&lt;br /&gt;
whatever else strikes the developer’s fancy.&lt;br /&gt;
&lt;br /&gt;
Please create a subdirectory within &amp;lt;code&amp;gt;experimental/&amp;lt;/code&amp;gt; for your work. You’re welcome to either post&lt;br /&gt;
the stuff at the top level or create a subdirectory for yourself.  Things linked in at the top level&lt;br /&gt;
should be considered fair game for other developers to collaborate on; items posted under&lt;br /&gt;
a developer’s username should be considered ask-first.  Same sort of idea as wiki.&lt;br /&gt;
&lt;br /&gt;
One of the principles behind this module is the idea of a shared working space.  Other developers&lt;br /&gt;
working in experimental can fairly easily see what others are working on in the tree, and perhaps&lt;br /&gt;
borrow or contribute ideas back and forth.   Since it is by definition not ‘production’ code, the &lt;br /&gt;
work may be incomplete or in a non-compileable state...and that’s okay.&lt;br /&gt;
&lt;br /&gt;
When an experiment has matured to the point of being actually useful, please move it out of&lt;br /&gt;
the experimental module to someplace more appropriate.  Alternatively, if the experimental work has become obsolete or irrelevant, please remove it so we can avoid having the experimental tree get too bulky.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Directory Organization ==&lt;br /&gt;
&lt;br /&gt;
=== Distribution / Packaging Files ===&lt;br /&gt;
&lt;br /&gt;
Files related to generation of distribution packages should go under inkscape/packaging, as follows:&lt;br /&gt;
                                                                                      &lt;br /&gt;
    inkscape/packaging/&lt;br /&gt;
                       common/&lt;br /&gt;
                       debian/&lt;br /&gt;
                       fedora/&lt;br /&gt;
                       fink/&lt;br /&gt;
                       mandrake/&lt;br /&gt;
                       suse/&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Share&amp;quot; Collateral ===&lt;br /&gt;
&lt;br /&gt;
A variety of items are installed in addition to the program itself, and placed into a &amp;lt;code&amp;gt;share&amp;lt;/code&amp;gt; directory structured as follows:&lt;br /&gt;
                                                                                      &lt;br /&gt;
    AUTHORS&lt;br /&gt;
    NEWS&lt;br /&gt;
    clipart/&lt;br /&gt;
    examples/&lt;br /&gt;
    extensions/&lt;br /&gt;
    fonts/&lt;br /&gt;
    gradients/&lt;br /&gt;
    icons/&lt;br /&gt;
    keyboards/&lt;br /&gt;
    markers/&lt;br /&gt;
    palettes/&lt;br /&gt;
    patterns/&lt;br /&gt;
    screens/&lt;br /&gt;
        about.svg&lt;br /&gt;
    templates/&lt;br /&gt;
    tutorials/&lt;br /&gt;
                                                                                      &lt;br /&gt;
In the SVN codebase, all of these are placed in &amp;lt;code&amp;gt;inkscape/share/&amp;lt;/code&amp;gt; (except &amp;lt;code&amp;gt;AUTHORS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NEWS&amp;lt;/code&amp;gt; which will be copied to share during installation.  The idea is that in theory, this entire tree structure can be copied into place on the user’s machine.  &lt;br /&gt;
&lt;br /&gt;
However, we need to provide the user some level of control over the installation.  They may wish to exclude some items, or may wish to augment the default install with some items external to the Inkscape package.  For example, they may wish to incorporate external clipart collections.  One approach would be to install symlinks in the given component directory to the external collection.  For example, if the flags package were to install into &amp;lt;code&amp;gt;/usr/share/flags-svg/&amp;lt;/code&amp;gt;, we’d just symlink there.&lt;br /&gt;
&lt;br /&gt;
=== Code modules ===&lt;br /&gt;
Several parts of the code were written in a modular way, and they have been&lt;br /&gt;
accordingly placed in subdirectories of &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;, while the main src directory&lt;br /&gt;
still contains the biggest part. To get a first overview of the modules, you&lt;br /&gt;
might want to have a look at these dependency graphs before you read deeper&lt;br /&gt;
into the source code (outside at the moment):&lt;br /&gt;
&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-debug.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-dialogs.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-display.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-io.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-libcroco.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-libnr.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-libnrtype.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-livarot.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-widgets.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-xml.svgz]&lt;br /&gt;
&lt;br /&gt;
These are not all modules! For questions about how to generate these graphs&lt;br /&gt;
with graph-includes, please [mailto:rwst@users.sf.net].&lt;br /&gt;
&lt;br /&gt;
Question on &amp;lt;code&amp;gt;.svgz&amp;lt;/code&amp;gt; files: Is the server sending the right &amp;lt;code&amp;gt;Content-Encoding:&amp;lt;/code&amp;gt; header?&lt;br /&gt;
This matters to Mozilla browsers in standards compliance mode! http://jwatt.org/svg/authoring/#server-configuration&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [[DirectoryReorgProposal]]&lt;br /&gt;
* [[InkscapeJanitors]]&lt;br /&gt;
* [[CompilingInkscape]]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
[http://advogato.org/article/51.html Software Quality]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Dialog&amp;diff=89024</id>
		<title>Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Dialog&amp;diff=89024"/>
		<updated>2013-08-25T11:24:33Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Created page with &amp;quot;By extension, a '''dialog''' in Inkscape vocabulary is any type of window, i.e. a set of widgets with an OS decoration, a title...  == Location ==  All dialogs are in [http://...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By extension, a '''dialog''' in Inkscape vocabulary is any type of window, i.e. a set of widgets with an OS decoration, a title...&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
All dialogs are in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/dialog src/ui/dialog] (except for old dialogs).&lt;br /&gt;
&lt;br /&gt;
== Listing ==&lt;br /&gt;
&lt;br /&gt;
* [[About Dialog]]: The ''About Inkscape'' dialog&lt;br /&gt;
* [[Align and Distribute Dialog]]: The ''Align and distribute'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::Behavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::DockBehavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::FloatingBehavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::CaligraphicProfileRename]]&lt;br /&gt;
* [[Close Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ColorItem]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DebugDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DesktopTracker]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DialogManager]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DocumentMetadata]]: The ''Document metadatas'' dialog&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/Document Metadata]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DocumentProperties]]: The ''Document properties'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ExtensionEditor]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ExtensionPanel]]&lt;br /&gt;
* [[Export Bitmap Dialog]]&lt;br /&gt;
** [[Export Bitmap Dialog Re-Design]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/Export Bitmap]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogBaseGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogBaseWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogOCALBase]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileImportFromOCALDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileListViewText]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialogImplGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialogImplGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialogImplWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialogImplWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileExportDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileExportDialogImpl]]&lt;br /&gt;
* [[Stroke Dialog]]&lt;br /&gt;
** [[Fill and Stroke Dialog Re-Design]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FilterEffectsDialog]]&lt;br /&gt;
* [[Find Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::GlyphsPanel]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::GuidelinePropertiesDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::IconPreviewPanel]]&lt;br /&gt;
* [[Image Properties Dialog]]&lt;br /&gt;
** [[Image properties dialog enhancements]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::InkscapePreferences]]: The ''Inkscape preferences'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::InputDialog]]&lt;br /&gt;
* [[Layer Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LayerPropertiesDialog]]: The ''Layer properties'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LayersPanel]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LivePathEffectEditor]]&lt;br /&gt;
* [[New Document Dialog]]&lt;br /&gt;
* [[Memory Dialog]]&lt;br /&gt;
* [[Messages Dialog]]&lt;br /&gt;
* [[OCAL Dialog]]&lt;br /&gt;
** [[OCAL Dialog Re-Design]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/OCAL]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::PanelDialogBase]]&lt;br /&gt;
* [[Print Dialog]]: The ''Print...'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::PrintColorsPreviewDialog]]&lt;br /&gt;
* [[Script Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SvgFontsDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SVGPreview]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SwatchesPanel]]&lt;br /&gt;
* [[SymbolsDialog|Symbols Dialog]]&lt;br /&gt;
* [[Tablet Dialog]]&lt;br /&gt;
* [[Text Dialog]]&lt;br /&gt;
* [[Tile Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::TraceDialog]]&lt;br /&gt;
** [[Trace Bitmap Dialog Re-Design]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Transformation]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::UndoHistory]]: The ''Undo history'' dialog&lt;br /&gt;
&lt;br /&gt;
Dialogs that have not yet been rewritted can be found in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/dialogs src/dialogs].&lt;br /&gt;
&lt;br /&gt;
== Re-designs ==&lt;br /&gt;
&lt;br /&gt;
* [[Andrews Big Dialog Re-Design]]&lt;br /&gt;
* [[Andrews Big Dialog Re-Design/Embed or Link]]&lt;br /&gt;
* [[FindReplaceDialog]]&lt;br /&gt;
* [[DialogsReorganization]]&lt;br /&gt;
&lt;br /&gt;
== Create a new dialog ==&lt;br /&gt;
&lt;br /&gt;
Creating a new dialog requires the following steps:&lt;br /&gt;
&lt;br /&gt;
# Create a new dialog in ''src/ui/dialogs'' (you can find inspiration from the existing dialogs).&lt;br /&gt;
# Register your dialog in ''src/dialogs/dialog-manager.cpp''.&lt;br /&gt;
# In ''src/verbs.cpp'', create a new [[verb]] (new DialogVerb) and associate it (DialogVerb::perform) with the dialog's registered name to perform the appropriate action. Also include your dialog's header in the ''verbs.cpp'' file.&lt;br /&gt;
# If needed, map the new verb to the preferences (SPDesktop::show_dialogs() in ''src/desktop.cpp'').&lt;br /&gt;
# Call the dialog from the appropriate location with ''dt-&amp;gt;_dlg_mgr-&amp;gt;showDialog(&amp;quot;mydialog&amp;quot;)'', ''dt'' being the current ''SPDesktop''.&lt;br /&gt;
&lt;br /&gt;
[[Category:Dialogs]]&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=User_Interface_Modules&amp;diff=89018</id>
		<title>User Interface Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=User_Interface_Modules&amp;diff=89018"/>
		<updated>2013-08-25T11:21:02Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Dialogs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Discussion and documentation about specific Inkscape dialogs, widgets, tools and more inside the [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/ src/ui] directory.&lt;br /&gt;
&lt;br /&gt;
== Dialogs ==&lt;br /&gt;
&lt;br /&gt;
See [[Dialog]].&lt;br /&gt;
&lt;br /&gt;
== Widgets ==&lt;br /&gt;
&lt;br /&gt;
Widgets are implemented in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/widget src/ui/widget].&lt;br /&gt;
&lt;br /&gt;
* [[Class Inkscape::UI::Widget::ColorPreview]]: A simple color preview widget, mainly used within a picker button&lt;br /&gt;
* [[Class Inkscape::UI::Widget::ProgressPannel]]&lt;br /&gt;
* [[Class Inkscape::UI::Widget::SpinButton]]: Widget that allows entry of simple math expressions (also units, when linked with UnitMenu), and allows entry of both '.' and ',' for the decimal, even when in numeric mode&lt;br /&gt;
* [[Class Inkscape::UI::Widget::SpinSlider]]: Groups an Gtk::HScale and a Inkscape::UI::Widget::SpinButton together using the same Adjustment&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Also a proposal for a [[Color Entry Widget|Color Entry]].&lt;br /&gt;
&lt;br /&gt;
== src/ui/tools ==&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Toolbars ==&lt;br /&gt;
&lt;br /&gt;
A '''toolbar''' is a set of graphical widgets put around the canvas to provide actions on objects, canvas or documents.&lt;br /&gt;
&lt;br /&gt;
See [[Toolbar]] page for more informations.&lt;br /&gt;
&lt;br /&gt;
== Menu ==&lt;br /&gt;
&lt;br /&gt;
See [[Menu]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecElectronicsCAD&amp;diff=88688</id>
		<title>SpecElectronicsCAD</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecElectronicsCAD&amp;diff=88688"/>
		<updated>2013-05-25T11:03:49Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Electronics CAD with Inkscape‒Missing functionality=&lt;br /&gt;
&lt;br /&gt;
Currently there is no ''nice'' open source electronics CAD tool. The largest&lt;br /&gt;
competitors are gEDA which I find awkward to use and KiCad which I find even&lt;br /&gt;
more awkward to use. Since a schematics editor is not much more than a&lt;br /&gt;
special-purpose flow graph editor and a PCB layout editor is in fact nothing&lt;br /&gt;
but a somewhat crippled vector graphics editor with some special-purpose&lt;br /&gt;
features added I think it is very promising to modify a general purpose vector&lt;br /&gt;
graphics editor to support the few special-purpose functions additionally&lt;br /&gt;
required by an electronics CAD tool.&lt;br /&gt;
&lt;br /&gt;
==Scenario==&lt;br /&gt;
The electronics CAD process mainly consists of two parts: Drawing the schematic&lt;br /&gt;
and PCB (Printed Circuit Board) layout. Normally, you will first draw a&lt;br /&gt;
schematic and base your PCB layout off that. However, from then on you will&lt;br /&gt;
frequently change the schematic and layout and want to have your chages in the&lt;br /&gt;
one represented in the other.&lt;br /&gt;
&lt;br /&gt;
A schematic is basically just a flow chart. The basic features are components&lt;br /&gt;
(symbols) taken from a library that are put on a grid (because you do not want&lt;br /&gt;
to mess around with a lot of manual aligning) and that are connected with wires&lt;br /&gt;
(represented by lines). Wires are always either vertical or horizontal and have&lt;br /&gt;
names for the signal the wire is carrying. Components have a list of attributes&lt;br /&gt;
(an unique id, value/voltage, part number, supplier etc.), some of which are&lt;br /&gt;
rendered on the schematic next to the component (normally these are id and value&lt;br /&gt;
or part number).  Finally, you want some function to place text anywhere for&lt;br /&gt;
comments.&lt;br /&gt;
&lt;br /&gt;
A PCB design in comparision is a little more complex. A printed circuit board is&lt;br /&gt;
a stack of plastic and copper foil. The copper foil is etched into such shapes&lt;br /&gt;
that when you solder components to it they are connected in just the right way.&lt;br /&gt;
There may be multiple layers of copper foil (up to more than 10) in more complex&lt;br /&gt;
designs. Two different layers of copper may be connected with a “via”, a small&lt;br /&gt;
hole whose inside surface is plated with metal. These vias may go all the way&lt;br /&gt;
from the top to the bottom of the board or just through a few layers in the&lt;br /&gt;
middle (the latter is more expensive but common in complicated designs). Similar&lt;br /&gt;
to vias, there are larger holes through which the leads of components may be&lt;br /&gt;
stuck for soldering.&lt;br /&gt;
&lt;br /&gt;
The outline of the PCB may be irregular, and the board may have slots, holes and&lt;br /&gt;
even grooves.&lt;br /&gt;
&lt;br /&gt;
Beyond the top- and bottommost copper layers, there are some special layers. On&lt;br /&gt;
each side there is a “solder mask” which is a varnish that protects any surface&lt;br /&gt;
that is not meant to be soldered on from dirt and oxidation (this makes the PCB&lt;br /&gt;
green or blue or red), and a “silk screen” layer which is a usually white paint&lt;br /&gt;
used to place human-readable markings with part numbers, ids, values, outlines&lt;br /&gt;
as well as comments, copyright notices etc. on the surface on the board.&lt;br /&gt;
&lt;br /&gt;
A very important feature of PCB layout programs is called “DRC” (design rule&lt;br /&gt;
checking). The most important of several possible design rule checks is that on&lt;br /&gt;
the PCB layout traces do no touch and there always is some clearance between&lt;br /&gt;
them.&lt;br /&gt;
&lt;br /&gt;
==Missing features==&lt;br /&gt;
===Hard===&lt;br /&gt;
* Extension of the Symbols code to an abstraction usable for components&lt;br /&gt;
** Auto reference generation (“C1”, “R17” etc.)&lt;br /&gt;
* Connectivity test/netlist generation/net names&lt;br /&gt;
* Trace routing tool with 45° outing&lt;br /&gt;
** This absolutely is a task for the graph connector tool&lt;br /&gt;
* Schematic ↔ PCB mapping (components added in the schematic are also added on the PCB, components (packages) on the PCB may be exchanged for other, compatible packages)&lt;br /&gt;
** To ease this, schematic and PCB layout could be placed on different layers of a single SVG file&lt;br /&gt;
&lt;br /&gt;
===Not so hard===&lt;br /&gt;
* Gnd/other plane fills&lt;br /&gt;
** I think there already is a live path effect for that&lt;br /&gt;
* Clearance calculation/DRC&lt;br /&gt;
** This naturally is part of the netlist generation&lt;br /&gt;
* PCB layers&lt;br /&gt;
** Can be implemented by SVG classes. When SVG 2.0 comes around, these can be assigned z-order attributes.&lt;br /&gt;
** Most other parts of Inkscape do not need to be aware of these classes, they only need special treatment when exporting to PCB formats.&lt;br /&gt;
** PCB layer classes are assigned when creating a component. Some kind of GUI would be nice for this.&lt;br /&gt;
* File format support&lt;br /&gt;
** old Eagle format&lt;br /&gt;
** new (XML-based) Eagle format&lt;br /&gt;
** Gerber&lt;br /&gt;
** gEDA&lt;br /&gt;
** KiCad&lt;br /&gt;
* Page frame templates → The actual frame can be realized as a drawing on a locked layer&lt;br /&gt;
** Auto-insertion of document properties into text fields → This looks like some pretty straight-forward placeholder replacement to me&lt;br /&gt;
*** ...and part numbers/values&lt;br /&gt;
* non-rectangular page outlines? → Probably, Inkscape's ''page'' abstraction will not even be used for the board outline (but instead a layer containing a polygon will be)&lt;br /&gt;
* distance measurement tool‒ ''This is very useful even outside of electronics''&lt;br /&gt;
* object highlighting → Some limited version of this already exists in form of these quickly disappearing red path visualizations&lt;br /&gt;
** Should appear on mouse hovering (perhaps with mod key)&lt;br /&gt;
** Should highlight the ''whole'' object, not just paths/fills/etc.&lt;br /&gt;
** Perhaps render the object transparent with increased brightness on top of everything else?&lt;br /&gt;
* transparent/desaturated “see-though” rendering of inactive layers&lt;br /&gt;
&lt;br /&gt;
==Connectivity testing/netlist generation==&lt;br /&gt;
===Algorithm overview===&lt;br /&gt;
* Select starting point&lt;br /&gt;
** Start with elements in descending net name priority: first human-set names, second everything derived from default pin names, third just make up names&lt;br /&gt;
* Find overlapping or touching elements&lt;br /&gt;
** Does not seem too complicated. Since the heavy lifting is done by 2geom this could be implemented in python.&lt;br /&gt;
** Propagate net names (via labelling new parts)‒this is basically flood fill&lt;br /&gt;
&lt;br /&gt;
===Net names===&lt;br /&gt;
* All pins/traces/planes ought to have net names&lt;br /&gt;
** Net names have a “priority” (an integer): 0 for auto-generated names, 100 for names derived frmo default pin names and 200 for manually-set names&lt;br /&gt;
* After propagating existing names, start assigning generated names to unnamed elements and propagate these&lt;br /&gt;
&lt;br /&gt;
===Starting points for the algorithm===&lt;br /&gt;
* Pins/pads, traces, planes&lt;br /&gt;
** Generate names for pins by using the default net name of the pin (“CLK”).  Check whether the name already exists in the document and if yes, append a number to the default net name (“CLK2”). Repeat until an unique name has been found.&lt;br /&gt;
* Find those by just iterating through the object tree → even pins should be found there despite them being part of a component&lt;br /&gt;
&lt;br /&gt;
===Dynamic updating===&lt;br /&gt;
* Dynamic updating should be the normal case. When something is removed, the connectivity of its former net has to be re-checked.&lt;br /&gt;
** If there is a netsplit, drop the old net name, then search the two net parts for two starting points for the aforementioned algorithm. If none are found, just use ''any'' element.&lt;br /&gt;
** If there is an addition to an existing net (and thus a name collision), do the obvious: Use the name with the higher priority&lt;br /&gt;
&lt;br /&gt;
==Component abstraction==&lt;br /&gt;
Inkscape's symbol functionality already supports most of this. &lt;br /&gt;
&lt;br /&gt;
===Component features===&lt;br /&gt;
# Like groups, components group objects together&lt;br /&gt;
# Components have some metadata/parameters associated with them&lt;br /&gt;
# The parts of a component may be on different PCB layers (i.e. be assigned different PCB layer classes)&lt;br /&gt;
# Components can have ''terminals'' or ''pins'' (for trace routing and netlist generation). This nicely maps to the ''point'' elements described in the SVG Connector draft&lt;br /&gt;
&lt;br /&gt;
===Required code===&lt;br /&gt;
* Python interface for parametric symbol generation&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[https://bitbucket.org/boldport/pcbmode PCBmodE]&lt;br /&gt;
&lt;br /&gt;
The [https://google-melange.appspot.com/gsoc/proposal/review/google/gsoc2013/jaseg/1 GSoC Proposal]&lt;br /&gt;
&lt;br /&gt;
The [http://dev.w3.org/SVG/modules/connector/SVGConnector.html SVG Connector draft]&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposals]]&lt;br /&gt;
[[Category:Specification]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=DirectoryReorgProposal&amp;diff=88682</id>
		<title>DirectoryReorgProposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=DirectoryReorgProposal&amp;diff=88682"/>
		<updated>2013-05-25T11:03:25Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Directory Reorganization Proposal ==&lt;br /&gt;
&lt;br /&gt;
[Iniitally proposed Feb 11, 2004 by B. Harrington on inkscape-devel@]&lt;br /&gt;
&lt;br /&gt;
=== Distribution / Packaging Files ===&lt;br /&gt;
&lt;br /&gt;
Presently, we have a number of files in the codebase related to&lt;br /&gt;
generation of distribution packages.  Some of these files are in the&lt;br /&gt;
root inkscape/ directory, others are in subdirs like inkscape/debian/.&lt;br /&gt;
                                                                                      &lt;br /&gt;
To head off potential clutter as Inkscape becomes supported on a wider&lt;br /&gt;
variety of systems, we should collect as many of these packaging files&lt;br /&gt;
as feasible into a subdir called inkscape/packaging/.&lt;br /&gt;
                                                                                      &lt;br /&gt;
Inside that directory would be distro-specific subdirs, plus a common&lt;br /&gt;
directory for shared scripts and collateral:&lt;br /&gt;
                                                                                      &lt;br /&gt;
    inkscape/packaging/&lt;br /&gt;
                       common/&lt;br /&gt;
                       debian/&lt;br /&gt;
                       fedora/&lt;br /&gt;
                       fink/&lt;br /&gt;
                       mandrake/&lt;br /&gt;
                       suse/&lt;br /&gt;
                                                                                      &lt;br /&gt;
&lt;br /&gt;
=== Config Files ===&lt;br /&gt;
&lt;br /&gt;
Currently we do not have global config files, but instead put the config&lt;br /&gt;
file in the user's home dir in ~/.inkscape/.  These are generated at&lt;br /&gt;
run-time by Inkscape itself, so the defaults are hard-coded into the&lt;br /&gt;
application, and can't be customized by the sysadmin except by editing&lt;br /&gt;
the appropriate header file and recompiling/repackaging the app.&lt;br /&gt;
                                                                                      &lt;br /&gt;
The correct approach for Linux apps is to have both user and global&lt;br /&gt;
configs, and to use the global as the default if the user does not yet&lt;br /&gt;
have a config file.  This way, site customizations are known (such as&lt;br /&gt;
the fact that its shared files are in /usr/share, vs. /usr/local/share,&lt;br /&gt;
vs. /opt/inkscape/share, etc.)&lt;br /&gt;
                                                                                      &lt;br /&gt;
The proposal is for Inkscape to establish its config file location in&lt;br /&gt;
/etc/inkscape/, and to place a global preferences.xml file there, as&lt;br /&gt;
well as any other config files we need later, like extensions.xml, etc.&lt;br /&gt;
                                                                                      &lt;br /&gt;
Ideally, the global config file would be loaded first, and then the user&lt;br /&gt;
config file &amp;quot;override&amp;quot; any portion of the global options.  This way the&lt;br /&gt;
user config file only needs to contain customizations, so that if we&lt;br /&gt;
choose to change the defaults in a future install, the user's config&lt;br /&gt;
files do not necessarily become invalid.&lt;br /&gt;
                                                                                      &lt;br /&gt;
Inside the CVS codebase, the default etc. files would be stored in&lt;br /&gt;
inkscape/etc/, instead of being produced by the application at runtime.&lt;br /&gt;
During installation, installation-specific parameters (such as alternate&lt;br /&gt;
paths for various files) will be substituted in appropriately.&lt;br /&gt;
&lt;br /&gt;
[Note:  There is a proposal to use GConf in favor of flat config files,&lt;br /&gt;
which would make this section of the proposal unnecessary.  -- Bryce]&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Share&amp;quot; Collateral ===&lt;br /&gt;
&lt;br /&gt;
Inkscape currently generates a /usr/local/share/inkscape/ directory&lt;br /&gt;
during install, and copies the contents of the codebase's icons/&lt;br /&gt;
directory to that location.&lt;br /&gt;
                                                                                      &lt;br /&gt;
We need more pieces of collateral installed, and need to do so in a more&lt;br /&gt;
organized manner.  The recommendation is to establish a set of subdirs&lt;br /&gt;
in /usr/local/share/inkscape/, as follows:&lt;br /&gt;
                                                                                      &lt;br /&gt;
    AUTHORS&lt;br /&gt;
    NEWS&lt;br /&gt;
    clipart/&lt;br /&gt;
    examples/&lt;br /&gt;
    extensions/&lt;br /&gt;
    fonts/&lt;br /&gt;
    gradients/&lt;br /&gt;
    icons/&lt;br /&gt;
    keyboards/&lt;br /&gt;
    markers/&lt;br /&gt;
    palettes/&lt;br /&gt;
    patterns/&lt;br /&gt;
    screens/&lt;br /&gt;
        about.svg&lt;br /&gt;
    templates/&lt;br /&gt;
    tutorials/&lt;br /&gt;
                                                                                      &lt;br /&gt;
This uses a flat hierarchy for the sake of simplicity.&lt;br /&gt;
                                                                                      &lt;br /&gt;
In the CVS codebase, all of these would be placed in inkscape/share/ (except AUTHORS and NEWS which will be copied to share).&lt;br /&gt;
This way, the installation script could be set up to recursively copy&lt;br /&gt;
everything in that directory to the target share directory, and we won't&lt;br /&gt;
need to specify each of the subdirs in that script, which will make&lt;br /&gt;
maintenance less hassle.&lt;br /&gt;
                                                                                      &lt;br /&gt;
For clipart, I think we definitely want to consider being able to tie in&lt;br /&gt;
with &amp;quot;external&amp;quot; clipart collections.  One way would be to simply put&lt;br /&gt;
symlinks in the clipart dir to those collections.  This way, if the&lt;br /&gt;
flags package were to install into /usr/share/flags-svg/, we'd just&lt;br /&gt;
symlink there.&lt;br /&gt;
                                                                                      &lt;br /&gt;
Possibly similarly for extensions.&lt;br /&gt;
                                                                                      &lt;br /&gt;
I think an argument could be made that the tutorials ought to be placed&lt;br /&gt;
somewhere under the /usr/doc/ or /usr/local/doc/ path, so I'm not 100%&lt;br /&gt;
certain of having the tutorials located here.&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposals]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Developer_manual&amp;diff=88442</id>
		<title>Developer manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Developer_manual&amp;diff=88442"/>
		<updated>2013-04-14T10:34:06Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add &amp;quot;Please use const&amp;quot; following a developper discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Inkscape Developer’s Manual =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
For those of you just joining us, or who have been with us but are just&lt;br /&gt;
now getting the itch to work on Inkscape, I thought I’d give some tips&lt;br /&gt;
for how to get started working in the codebase based on our own&lt;br /&gt;
experiences.&lt;br /&gt;
&lt;br /&gt;
One of the first things most people wonder is “What should I work on?”.&lt;br /&gt;
As you may have already noticed, we generally don’t “assign” projects.&lt;br /&gt;
We figure there’s plenty more work to do than people to do it, so you&lt;br /&gt;
may as well work on something that you’re either interested in or that&lt;br /&gt;
adds something of benefit to you; that’s extra motivation to get your&lt;br /&gt;
own itches scratched.&lt;br /&gt;
&lt;br /&gt;
If you’re really stumped though, we keep a detailed [[Roadmap]] in wiki that&lt;br /&gt;
you’re welcome to browse through to look for ideas of things to work&lt;br /&gt;
on.  Tasks that do not have names beside them are open for anyone to&lt;br /&gt;
take; if you want to take ownership of a task, just put your name beside&lt;br /&gt;
it.  Feel free to add or reword tasks as needed, although try not to&lt;br /&gt;
load up the current milestone with tasks that aren’t critical for the&lt;br /&gt;
release.  Feel free to work on stuff that is several milestones down the&lt;br /&gt;
road; there’s rarely any problem with getting stuff done sooner than&lt;br /&gt;
planned.  ;-)&lt;br /&gt;
&lt;br /&gt;
We have a process for gaining SVN commit access.  The reason is that&lt;br /&gt;
while it is important that we keep access to the codebase open, we don’t&lt;br /&gt;
want to be crazy and leave it wide open to any random passer-by.  The&lt;br /&gt;
process is that we require that the person make two contributions&lt;br /&gt;
(patches, documentation, web collateral, etc.) and then make a request&lt;br /&gt;
to get account access.&lt;br /&gt;
&lt;br /&gt;
In general you won’t need SVN commit access in order to start doing&lt;br /&gt;
development, because you can work from an anonymous checkout and create&lt;br /&gt;
patches.  If you’ve not done this before, you’ll need to learn this&lt;br /&gt;
skill first (basically see docs for `svn diff`).&lt;br /&gt;
&lt;br /&gt;
When you first start hacking on Inkscape code, I wouldn’t recommend&lt;br /&gt;
taking an objective of implementing a specific feature, because you will&lt;br /&gt;
need some time to familiarize yourself with the codebase, and because&lt;br /&gt;
you won’t really know what features are going to be straightforward to&lt;br /&gt;
implement and which will be highly challenging.  Of course, if you have&lt;br /&gt;
the time and love adventures, this might be a fun way to go.&lt;br /&gt;
&lt;br /&gt;
There are four approaches that I’ve seen people effectively use in&lt;br /&gt;
getting into the codebase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Write code documentation.&amp;lt;/strong&amp;gt;  Some people who don’t mind adding&lt;br /&gt;
comments to code or writing docs find it useful to just go through&lt;br /&gt;
code they’re interested in working on and writing up what it does.&lt;br /&gt;
The codebase is in dire need of better docs, so this approach pays&lt;br /&gt;
dividends well into the future.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Fix bugs.&amp;lt;/strong&amp;gt;  Tracing down the cause of reported bugs is an effective&lt;br /&gt;
way to gain understanding of the codebase in small chunks.  Many&lt;br /&gt;
common bugs can be traced down and fixed in a matter of hours, and&lt;br /&gt;
often will identify some bit of code in need of refactoring or&lt;br /&gt;
extension.  Note that some of our older bugs are in the system&lt;br /&gt;
because they’re hard to fix, so you’ll want to work on the more&lt;br /&gt;
recent ones.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Chip in on a group effort.&amp;lt;/strong&amp;gt;  Occasionally we identify a major&lt;br /&gt;
refactoring effort (such as when we converted from C to C++), that&lt;br /&gt;
we encourage lots of people to help on, in the philosophy that many&lt;br /&gt;
hands makes short work.  This work tends to be pretty rote so is&lt;br /&gt;
not hard for new folks to get involved with; it just takes time.  We&lt;br /&gt;
generally have one of these kinds of efforts per release.  It&lt;br /&gt;
usually isn’t glamorous work, but in aggregate moves the codebase&lt;br /&gt;
forward in a major way.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;Subsystem/module work.&amp;lt;/strong&amp;gt;  Some people want to get their hands in the&lt;br /&gt;
details quick, so take the approach of developing new code separate&lt;br /&gt;
from the codebase, to be integrated in later.  This generally tends&lt;br /&gt;
to take a larger time commitment than the other approaches, but can be&lt;br /&gt;
an effective approach in some circumstances.  We have a SVN module&lt;br /&gt;
called &amp;lt;code&amp;gt;experimental&amp;lt;/code&amp;gt; that you’re welcome to house your work until&lt;br /&gt;
it’s ready for prime time.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beyond that, you’re going to find the documentation for the Inkscape&lt;br /&gt;
code is pretty scarce.  We’ve worked on bits and pieces but&lt;br /&gt;
unfortunately the vast majority of the code is undocumented.  On the&lt;br /&gt;
plus side, often you can implement the stuff you care about after&lt;br /&gt;
learning only a limited portion of the codebase.&lt;br /&gt;
&lt;br /&gt;
I think you’d find Inkscape an enjoyable Open Source project to work on.&lt;br /&gt;
There’s a huge range of interesting and useful skills that can be&lt;br /&gt;
learned from it, plus the developers are great guys to participate with.&lt;br /&gt;
The project itself runs smoothly and puts a premium on keeping things&lt;br /&gt;
friendly and low-stress, so heated arguments are rare.  The users have&lt;br /&gt;
been great to work with and very appreciative of even small new features&lt;br /&gt;
and fixes.  Plus, since Inkscape is so visual in nature, it’s very cool&lt;br /&gt;
to see how your little changes make noticeable improvements to the app&lt;br /&gt;
overall.&lt;br /&gt;
&lt;br /&gt;
== C++ Reference ==&lt;br /&gt;
* FAQ (with answers) sheet. We strongly recommend that everyone read this site comprehensively. You should not need to bookmark it, it should be the first of the sites on your autocomplete list for &amp;lt;code&amp;gt;par&amp;lt;/code&amp;gt;!&lt;br /&gt;
&lt;br /&gt;
http://www.parashift.com/c++-faq-lite/&lt;br /&gt;
&lt;br /&gt;
It is actually more in-depth than the name FAQ suggests.  Many experienced C++ programmers would benefit from it.&lt;br /&gt;
&lt;br /&gt;
* List of &amp;lt;s&amp;gt;[http://www.cs.helsinki.fi/u/vkarvone/2004s/cplusplus/errors.html schoolboy errors] (Broken Link)&amp;lt;/s&amp;gt;. None of these should appear in [http://en.wikipedia.org/wiki/Free/Libre/Open-Source_Software FLOSS] code.&lt;br /&gt;
&lt;br /&gt;
== Please use const ==&lt;br /&gt;
&lt;br /&gt;
Please be very aggressive in adding ''const'' to any code you write. It will help us understand code better and will prevent bugs from creeping in. It is very easy to remove ''const'' later on, but very hard to add it.&lt;br /&gt;
&lt;br /&gt;
''const'' can go on either side of a type. However once you get into references and pointers and such with C++, you generally read those from right-to-left. So it makes the code a little more legible if the ''const'' comes between the variable type and name.&lt;br /&gt;
&lt;br /&gt;
 int const foo;&lt;br /&gt;
 // RTL reading gives &amp;quot;foo is a constant int&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
And then:&lt;br /&gt;
&lt;br /&gt;
 int const &amp;amp; foo;&lt;br /&gt;
 // RTL reading gives &amp;quot;foo is a reference o a constant int&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 int const * foo;&lt;br /&gt;
 // RTL reading gives &amp;quot;foo is a pointer to a constant int&amp;quot;&lt;br /&gt;
&lt;br /&gt;
whereas:&lt;br /&gt;
&lt;br /&gt;
 int * const foo;&lt;br /&gt;
 // RTL reading gives &amp;quot;foo is a constant pointer to an int&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Read also:&lt;br /&gt;
* [http://www.cprogramming.com/tutorial/const_correctness.html Const Correctness]&lt;br /&gt;
* [http://yosefk.com/c++fqa/const.html Const Correctness]&lt;br /&gt;
&lt;br /&gt;
== Strings ==&lt;br /&gt;
Please make sure any user-visible strings are localizable.  This requires wrapping them with &amp;quot;_(&amp;quot; and &amp;quot;)&amp;quot;, like so:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;quot;Select object&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
becomes&lt;br /&gt;
 &amp;lt;code&amp;gt;_(&amp;quot;Select object&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case the interpretation of the string may be ambiguous or may differ according to context, you can add a context prefix (that won't be displayed) in order to eliminate the ambiguity. &lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;quot;Ambiguous string&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
can then become&lt;br /&gt;
 &amp;lt;code&amp;gt;C_(&amp;quot;Context&amp;quot;, &amp;quot;Ambiguous string&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more complex things, please check the gettext/localization documentation.&lt;br /&gt;
See also http://library.gnome.org/devel/glib/unstable/glib-I18N.html&lt;br /&gt;
&lt;br /&gt;
== Implementing User Interface Changes ==&lt;br /&gt;
&lt;br /&gt;
[[UI improvements]] are enjoyable to work on because they produce visible changes in how Inkscape works.  These improvements are one of the most tangible ways to help improve how Inkscape works; thus, we strongly support new developers wishing to work in these areas.&lt;br /&gt;
&lt;br /&gt;
It is also very important to us that Inkscape presents an organized, productive, and easily discoverable interface to users.  Because of this it is important that new Inkscape UI developers work to ensure changes make Inkscape’s UI *more* consistent, *more* flexible, *more* cohesive, and so on.  We don’t have firm rules about what can and cannot done, in order to ensure plenty of freedom for innovation.  However, we can outline some general principles and guidelines that are important to keep in mind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Don’t please the artist—BE the artist.&amp;lt;/strong&amp;gt;  Many times UI is designed and created by programmers who “understand what the user wants”.  But in Inkscape we believe that the best requirements list is the list inside the user’s head.  Requirements docs, usability studies, and so on are very indirect ways of transferring this gut-level understanding from user to programmer.  We believe the best way to ensure this information is communicated clearly is for the user to BE the programmer.  Or, alternatively, for the programmer to BECOME a user.&lt;br /&gt;
&lt;br /&gt;
This is why we so strongly encourage users to get involved in coding, and why we so strongly encourage programmers to focus on the features that are most important to them personally.  This is also why it is absolutely critical to pay close attention to what users report when using a new feature—often they can tip you off to alternate designs that achieve the same result in a better way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Eliminate limitations.&amp;lt;/strong&amp;gt; Commercial software is often developed to fulfill feature requirement lists from a marketing department.  As such, it’s common to see the feature implemented to meet the requirement exactly, and no more.  However, especially with artistic software, art is often found outside what seems reasonable.  So when putting in a new feature, avoid the temptation to limit it to what you expect people to use it for—instead generalize it and open as many parameters as possible for tweaking, and let the artist decide what is reasonable.  That’s their job.  &lt;br /&gt;
&lt;br /&gt;
As an example, a drawing program might want to support the features “feather” and “drop shadow”.  Obviously, users need these important features.  Commercial software may well implement these as distinct features, each with their own UI controls.  However, these features are just special cases of the more general gaussian blur, and in Inkscape we implemented *that*.  With that in place, artists can do feathering and blur, &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; a variety of other effects.&lt;br /&gt;
&lt;br /&gt;
It is interesting to note that, as an open collaborative standard, SVG&lt;br /&gt;
necessarily has the same goals as Inkscape: a minimum set of&lt;br /&gt;
universal, well thought-out building blocks that can accommodate the&lt;br /&gt;
widest possible range of graphics and applications. Thus, simply by&lt;br /&gt;
following the SVG philosophy, Inkscape scores quite a few important&lt;br /&gt;
points over commercial software. Live clones, patterns that can be contain any&lt;br /&gt;
objects, layers that are essentially groups and can be easily&lt;br /&gt;
converted to/from groups.  These are all examples where the underlying&lt;br /&gt;
universality of SVG directly translates into extremely valuable user&lt;br /&gt;
features.&lt;br /&gt;
&lt;br /&gt;
== Implementing New SVG Features ==&lt;br /&gt;
&lt;br /&gt;
The most important way to help Inkscape is to implement a new SVG feature in it.  Our hope is to eventually support ALL SVG features, so if you can help check one off the list, it brings us close to the nirvana of 100% SVG compliance.  :-)&lt;br /&gt;
&lt;br /&gt;
Generally we find that implementation of an SVG feature goes through three discrete stages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Find the appropriate tags and attributes in the SVG spec&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Implement support for rendering files with these tags&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Implement support for UI controls to edit the tags&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 1 is mostly a research project.  Start by reading the SVG spec so you&lt;br /&gt;
can learn about the tag, the attributes that go with it, and so forth.&lt;br /&gt;
It is good practice to set up a page in the Wiki for storing your notes&lt;br /&gt;
as you do this process, so that in case you don’t make it to steps 2 and&lt;br /&gt;
3, then maybe someone else can benefit from your research.&lt;br /&gt;
&lt;br /&gt;
Step 2 is the fun part.  It helps to be comfortable with Inkscape internals&lt;br /&gt;
for this part.  Depending on the feature, it may require advanced&lt;br /&gt;
knowledge of transformation, rendering, document management, and so on.&lt;br /&gt;
For this part, just hand-edit an SVG file to put the tags in that you&lt;br /&gt;
found in step #1, and keep plugging away at the code until Inkscape&lt;br /&gt;
displays things as the specification dictates.  It can help to compare&lt;br /&gt;
your work with Batik, as we use that program as our reference&lt;br /&gt;
implementation.&lt;br /&gt;
&lt;br /&gt;
Step 3 is the most important stage. It is the point at which the&lt;br /&gt;
feature becomes available for users.  This step often requires knowledge&lt;br /&gt;
of Gtk+, for creating dialogs, widgets, menus, etc. for allowing the&lt;br /&gt;
user to edit the characteristics of the feature.  Be sure to listen to&lt;br /&gt;
feedback from other developers and users—especially if there are&lt;br /&gt;
different opinions.  It is hard to come up with UI that everyone can&lt;br /&gt;
agree on, but it is worth the work to achieve this—the more critique&lt;br /&gt;
your UI survives, the better loved the feature will be for future users.&lt;br /&gt;
&lt;br /&gt;
Looking through Inkscape’s history, these stages are often done by different people.  If you’re new to Inkscape, you may find working on stages 1 and 3 easiest, but there are many developers who can answer questions when you’re ready to dig into the internals, so don’t be afraid to ask questions!&lt;br /&gt;
&lt;br /&gt;
== Standards Compliance - Extension Namespaces ==&lt;br /&gt;
&lt;br /&gt;
* Only elements and attributes from our extension namespaces that ''do not affect rendering'' may be saved in SVG documents.&lt;br /&gt;
* Generally, this means that extension elements and attributes should only be used to provide UI hints.&lt;br /&gt;
* Extension elements and attributes should ''only'' be used where an existing facility provided by XML or SVG is not sufficient.&lt;br /&gt;
&lt;br /&gt;
== Global Verbs ==&lt;br /&gt;
&lt;br /&gt;
Here’s a readers’ digest summary of how Inkscape accelerators work:&lt;br /&gt;
&lt;br /&gt;
A global mapping between key combinations and integer verb IDs&lt;br /&gt;
(&amp;lt;code&amp;gt;sp_verb_t&amp;lt;/code&amp;gt;) is maintained in &amp;lt;code&amp;gt;shortcuts.cpp&amp;lt;/code&amp;gt;; these are registered using&lt;br /&gt;
&amp;lt;code&amp;gt;sp_shortcut_set()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Given an &amp;lt;code&amp;gt;sp_verb_t&amp;lt;/code&amp;gt; and an &amp;lt;code&amp;gt;SPView&amp;lt;/code&amp;gt;, you can get an SPAction which&lt;br /&gt;
represents that action in that view.  These mappings are currently&lt;br /&gt;
hard-coded in &amp;lt;code&amp;gt;verbs.cpp&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SPActions&amp;lt;/code&amp;gt; derive from &amp;lt;code&amp;gt;NRActiveObject&amp;lt;/code&amp;gt;, which putatively provides a&lt;br /&gt;
“lightweight” method of doing callbacks (vs &amp;lt;code&amp;gt;GObject&amp;lt;/code&amp;gt; signals).  I&lt;br /&gt;
don’t completely understand how it works.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SPActions&amp;lt;/code&amp;gt; also contain the label, image, etc, used for buttons and&lt;br /&gt;
menuitems.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sp_shortcut_invoke()&amp;lt;/code&amp;gt; looks up the &amp;lt;code&amp;gt;SPAction&amp;lt;/code&amp;gt; for a keypress and &amp;lt;code&amp;gt;SPView&amp;lt;/code&amp;gt; and&lt;br /&gt;
invokes it automatically. &amp;lt;code&amp;gt;SPEventContexts&amp;lt;/code&amp;gt; call it for keypresses that they do not handle themselves.&lt;br /&gt;
&lt;br /&gt;
== Garbage collection ==&lt;br /&gt;
&lt;br /&gt;
As you know, many automatic garbage collectors (like &amp;lt;code&amp;gt;libgc&amp;lt;/code&amp;gt;) only&lt;br /&gt;
free and recycle memory periodically.  This means you may have some&lt;br /&gt;
extra slush that could be freed, but hasn’t yet.&lt;br /&gt;
&lt;br /&gt;
There are other forces at work, though...&lt;br /&gt;
&lt;br /&gt;
Pretty much all allocators, whether automatic or not, whether the&lt;br /&gt;
system &amp;lt;code&amp;gt;malloc()&amp;lt;/code&amp;gt; or some custom allocator like &amp;lt;code&amp;gt;libgc&amp;lt;/code&amp;gt;’s, work the&lt;br /&gt;
same way:  they request large blocks of memory from the operating&lt;br /&gt;
system, then divvy those blocks into smaller ones internally to&lt;br /&gt;
satisfy application allocation requests.&lt;br /&gt;
&lt;br /&gt;
When an application frees memory, that memory is usually recycled&lt;br /&gt;
internally rather than returned to the OS immediately.  The reason&lt;br /&gt;
for this is that the large memory blocks acquired from the OS must&lt;br /&gt;
be completely unused before they can actually be freed.&lt;br /&gt;
&lt;br /&gt;
For example, let’s say an allocator acquires 16 8MB blocks from&lt;br /&gt;
the OS in response to 32768 4k application allocations...&lt;br /&gt;
&lt;br /&gt;
In a worst-case scenario, it’s possible that the application could&lt;br /&gt;
free 32752 of those 4k blocks but the remaining 16 4k just happen&lt;br /&gt;
to be distributed across the 16 8MB blocks requested from the OS.&lt;br /&gt;
&lt;br /&gt;
If that happens, from the application’s point of view it may only&lt;br /&gt;
have 64k allocated, but as far as the OS is concerned, it’s still&lt;br /&gt;
using 128MB!&lt;br /&gt;
&lt;br /&gt;
Note that this applies to nearly all allocators in common use.&lt;br /&gt;
&lt;br /&gt;
While it’s unusual for things to get quite that bad, memory&lt;br /&gt;
fragmentation is common enough that many popular allocators (for&lt;br /&gt;
example Perl’s) simply don’t bother trying to return memory to the&lt;br /&gt;
OS at all (the memory will still get forcibly reclaimed by the OS&lt;br /&gt;
when the process exits).&lt;br /&gt;
&lt;br /&gt;
[ FWIW, &amp;lt;code&amp;gt;libgc&amp;lt;/code&amp;gt;’s allocator is one of the ones that _does_ make an&lt;br /&gt;
effort to release memory to the OS, but it is limited by&lt;br /&gt;
fragmentation like any other ]&lt;br /&gt;
&lt;br /&gt;
Also note that for various reasons, the statistics you get from the&lt;br /&gt;
OS aren’t going to directly reflect the amount of heap-allocated&lt;br /&gt;
memory.  Be careful drawing conclusions from only looking at e.g.&lt;br /&gt;
the output of &amp;lt;code&amp;gt;top(1)&amp;lt;/code&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
(The worst thing is, due to the modern practice of&lt;br /&gt;
overcommitting memory, the OS may literally lie to an application&lt;br /&gt;
about the amount of memory it is being given, hoping the&lt;br /&gt;
application won’t really try to use it all.)&lt;br /&gt;
&lt;br /&gt;
The best approach to evaluating memory usage is if you can ask the&lt;br /&gt;
allocator for information on memory usage directly, as that matches&lt;br /&gt;
the world from the point of view of the application.&lt;br /&gt;
&lt;br /&gt;
leftover gradients/markers/patterns will get automatically cleaned up when the objects that use them are deleted.&lt;br /&gt;
&lt;br /&gt;
Caveats:&lt;br /&gt;
&lt;br /&gt;
* this only applies to such objects created with a build of Inkscape which post-dates this commit (June 7 2004) &amp;lt;!-- (2009?) - no, June 7 2004. The date was added in [http://wiki.inkscape.org/wiki/index.php?title=Developer_manual&amp;amp;diff=prev&amp;amp;oldid=1233 Revision as of 06:00, 7 June 2004] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* not all automatically-created objects will necessarily be collected; the code that creates them needs to be updated to set the correct collection policy&lt;br /&gt;
&lt;br /&gt;
* paint objects won’t get collected until another editing operation takes place, since &amp;lt;code&amp;gt;NRArenaShape&amp;lt;/code&amp;gt; currently holds onto an &amp;lt;code&amp;gt;SPStyle&amp;lt;/code&amp;gt; for too long&lt;br /&gt;
&lt;br /&gt;
Technical details:&lt;br /&gt;
&lt;br /&gt;
Assuming its collection policy permits it, an object will be collected&lt;br /&gt;
if neither it nor its descendants have any outstanding inter-document&lt;br /&gt;
URI references (nonzero &amp;lt;code&amp;gt;SPObject::hrefcount&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
There are two “policies” for collecting orphans:&lt;br /&gt;
&lt;br /&gt;
* “with-parent” - the object will only be collected if one of its ancestors is collected&lt;br /&gt;
&lt;br /&gt;
* “always” - the object is always collected if unused&lt;br /&gt;
&lt;br /&gt;
(a third policy might be “never”, which would necessarily also prevent&lt;br /&gt;
that object’s ancestors from ever being collected; I do not plan on&lt;br /&gt;
implementing it)&lt;br /&gt;
&lt;br /&gt;
The policy in effect is determined by the inkscape:collect attribute.&lt;br /&gt;
&lt;br /&gt;
Be careful with the “always” policy; it really only makes sense for&lt;br /&gt;
“private” objects that are indirectly created behind the scenes (e.g. by&lt;br /&gt;
selecting a fill or marker option in the GUI).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SPDocument&amp;lt;/code&amp;gt; manages a queue of objects to collect; &amp;lt;code&amp;gt;SPObject&amp;lt;/code&amp;gt; handles the machinery for actually queueing them when their &amp;lt;code&amp;gt;hrefcount&amp;lt;/code&amp;gt; falls (based on policy), and performing the actual collection (&amp;lt;code&amp;gt;delete&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;code&amp;gt;SPDocument::collectObjects()&amp;lt;/code&amp;gt; performs a collection pass. It’s currently only called from &amp;lt;code&amp;gt;sp_document_maybe_done()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Inkscape Experimental SVN ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;experimental&amp;lt;/code&amp;gt; module in Inkscape SVN is provided as a kind of “scratchpad” for &lt;br /&gt;
working up new ideas that aren’t quite ready for folding into the main codebase.&lt;br /&gt;
This includes architectural sketches, examples, experimental patchsets, tools &amp;amp; utilities, or&lt;br /&gt;
whatever else strikes the developer’s fancy.&lt;br /&gt;
&lt;br /&gt;
Please create a subdirectory within &amp;lt;code&amp;gt;experimental/&amp;lt;/code&amp;gt; for your work. You’re welcome to either post&lt;br /&gt;
the stuff at the top level or create a subdirectory for yourself.  Things linked in at the top level&lt;br /&gt;
should be considered fair game for other developers to collaborate on; items posted under&lt;br /&gt;
a developer’s username should be considered ask-first.  Same sort of idea as wiki.&lt;br /&gt;
&lt;br /&gt;
One of the principles behind this module is the idea of a shared working space.  Other developers&lt;br /&gt;
working in experimental can fairly easily see what others are working on in the tree, and perhaps&lt;br /&gt;
borrow or contribute ideas back and forth.   Since it is by definition not ‘production’ code, the &lt;br /&gt;
work may be incomplete or in a non-compileable state...and that’s okay.&lt;br /&gt;
&lt;br /&gt;
When an experiment has matured to the point of being actually useful, please move it out of&lt;br /&gt;
the experimental module to someplace more appropriate.  Alternatively, if the experimental work has become obsolete or irrelevant, please remove it so we can avoid having the experimental tree get too bulky.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Directory Organization ==&lt;br /&gt;
&lt;br /&gt;
=== Distribution / Packaging Files ===&lt;br /&gt;
&lt;br /&gt;
Files related to generation of distribution packages should go under inkscape/packaging, as follows:&lt;br /&gt;
                                                                                      &lt;br /&gt;
    inkscape/packaging/&lt;br /&gt;
                       common/&lt;br /&gt;
                       debian/&lt;br /&gt;
                       fedora/&lt;br /&gt;
                       fink/&lt;br /&gt;
                       mandrake/&lt;br /&gt;
                       suse/&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Share&amp;quot; Collateral ===&lt;br /&gt;
&lt;br /&gt;
A variety of items are installed in addition to the program itself, and placed into a &amp;lt;code&amp;gt;share&amp;lt;/code&amp;gt; directory structured as follows:&lt;br /&gt;
                                                                                      &lt;br /&gt;
    AUTHORS&lt;br /&gt;
    NEWS&lt;br /&gt;
    clipart/&lt;br /&gt;
    examples/&lt;br /&gt;
    extensions/&lt;br /&gt;
    fonts/&lt;br /&gt;
    gradients/&lt;br /&gt;
    icons/&lt;br /&gt;
    keyboards/&lt;br /&gt;
    markers/&lt;br /&gt;
    palettes/&lt;br /&gt;
    patterns/&lt;br /&gt;
    screens/&lt;br /&gt;
        about.svg&lt;br /&gt;
    templates/&lt;br /&gt;
    tutorials/&lt;br /&gt;
                                                                                      &lt;br /&gt;
In the SVN codebase, all of these are placed in &amp;lt;code&amp;gt;inkscape/share/&amp;lt;/code&amp;gt; (except &amp;lt;code&amp;gt;AUTHORS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NEWS&amp;lt;/code&amp;gt; which will be copied to share during installation.  The idea is that in theory, this entire tree structure can be copied into place on the user’s machine.  &lt;br /&gt;
&lt;br /&gt;
However, we need to provide the user some level of control over the installation.  They may wish to exclude some items, or may wish to augment the default install with some items external to the Inkscape package.  For example, they may wish to incorporate external clipart collections.  One approach would be to install symlinks in the given component directory to the external collection.  For example, if the flags package were to install into &amp;lt;code&amp;gt;/usr/share/flags-svg/&amp;lt;/code&amp;gt;, we’d just symlink there.&lt;br /&gt;
&lt;br /&gt;
=== Code modules ===&lt;br /&gt;
Several parts of the code were written in a modular way, and they have been&lt;br /&gt;
accordingly placed in subdirectories of &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;, while the main src directory&lt;br /&gt;
still contains the biggest part. To get a first overview of the modules, you&lt;br /&gt;
might want to have a look at these dependency graphs before you read deeper&lt;br /&gt;
into the source code (outside at the moment):&lt;br /&gt;
&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-debug.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-dialogs.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-display.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-io.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-libcroco.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-libnr.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-libnrtype.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-livarot.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-widgets.svgz]&lt;br /&gt;
[http://www.ark.in-berlin.de/gri-xml.svgz]&lt;br /&gt;
&lt;br /&gt;
These are not all modules! For questions about how to generate these graphs&lt;br /&gt;
with graph-includes, please [mailto:rwst@users.sf.net].&lt;br /&gt;
&lt;br /&gt;
Question on &amp;lt;code&amp;gt;.svgz&amp;lt;/code&amp;gt; files: Is the server sending the right &amp;lt;code&amp;gt;Content-Encoding:&amp;lt;/code&amp;gt; header?&lt;br /&gt;
This matters to Mozilla browsers in standards compliance mode! http://jwatt.org/svg/authoring/#server-configuration&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
* [[DirectoryReorgProposal]]&lt;br /&gt;
* [[InkscapeJanitors]]&lt;br /&gt;
* [[CompilingInkscape]]&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
[http://advogato.org/article/51.html Software Quality]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Color_Entry_Widget&amp;diff=88058</id>
		<title>Color Entry Widget</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Color_Entry_Widget&amp;diff=88058"/>
		<updated>2013-01-05T16:10:06Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Deal with full SVG 1.1 colors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the aims of this blueprint.&lt;br /&gt;
&lt;br /&gt;
== Deal with full SVG 1.1 colors ==&lt;br /&gt;
&lt;br /&gt;
The entry accepts colors as defined by the [http://www.w3.org/TR/SVG/color.html SVG 1.1 Specifications].&lt;br /&gt;
&lt;br /&gt;
SVG 1.1 colors do not handle alpha (it's stored in a separate attribute). We have three options:&lt;br /&gt;
&lt;br /&gt;
# Change nothing and keep displaying the alpha value with the color value by extanding the SVG specification (#RRGGBB =&amp;gt; RRGGBBAA, rgb(255, 255, 255) =&amp;gt; rgba(255, 255, 255, alpha)...).&lt;br /&gt;
# Do like many softwares and display the color in the entry without the alpha (which is displayed in it's own entry). This would probably need a widget rearrangement.&lt;br /&gt;
# Allow both: implement the SVG 1.1 specification (case 2) and keep case 1 as a preparation for SVG 2. This will allow inputs but, because Inkscape files are SVG 1.1, any loaded file will be displayed using case 2.&lt;br /&gt;
&lt;br /&gt;
The third case is proposed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ SVG 1.1 compliance matrix&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Input/Loaded color&lt;br /&gt;
! scope=col | SVG 1.1&lt;br /&gt;
! scope=col | Saved as&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#FF00AA&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#F0A&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
FF00AA&lt;br /&gt;
| |&lt;br /&gt;
No*&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
F0A&lt;br /&gt;
| |&lt;br /&gt;
No*&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#FF00AADD&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| |&lt;br /&gt;
No**&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
FF00AADD&lt;br /&gt;
| |&lt;br /&gt;
No*&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
rgb(255, 0, 170)&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
rgb(100%, 0%, 66%)&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
red&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;* Kept for historycal reasons&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** Kept for historycal reasons and as an hypotetical SVG 2 valid color format&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare SVG 2 ==&lt;br /&gt;
&lt;br /&gt;
Based on [http://www.w3.org/TR/SVG2/color.html SVG2]. The idea is to be more ''SVG 2 ready''.&lt;br /&gt;
&lt;br /&gt;
=== sRGB colors ===&lt;br /&gt;
&lt;br /&gt;
The HSL format is closed to RGB: no issue.&lt;br /&gt;
&lt;br /&gt;
Some color named are added: no issue.&lt;br /&gt;
&lt;br /&gt;
=== sRGB colors with alpha ===&lt;br /&gt;
&lt;br /&gt;
RGBA and HSLA are added: no issue.&lt;br /&gt;
&lt;br /&gt;
=== ICC and LAB colors ===&lt;br /&gt;
&lt;br /&gt;
To be implemented?&lt;br /&gt;
&lt;br /&gt;
== Keep the user value ==&lt;br /&gt;
&lt;br /&gt;
Colors are stored in the SVG file as specified by the user (i.e. no more forced conversions to hex values). However, for internal purposes, the colors can be stored and handled differently. This would mean having an internal color value (as now) and a display value.&lt;br /&gt;
&lt;br /&gt;
The color sets in the entry is (chronologically):&lt;br /&gt;
&lt;br /&gt;
# First, the color as written in the SVG file (if any)&lt;br /&gt;
# Then, if modified by the user (pasted or typed), the user value&lt;br /&gt;
# Then, if modified by the software (in case of multiple input widgets), the software value&lt;br /&gt;
&lt;br /&gt;
If the alpha is not part of the user input, Inkscape keep the previous one and will not append it in the entry.&lt;br /&gt;
&lt;br /&gt;
== Help the user ==&lt;br /&gt;
&lt;br /&gt;
If the text in the entry cannot be converted to a valid color, the entry changes it's appearance (red border?).&lt;br /&gt;
&lt;br /&gt;
If a color from the palette is dragged and dropped on the entry, it takes the color value.&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposals]]&lt;br /&gt;
[[Category:Widgets]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Color_Entry_Widget&amp;diff=88052</id>
		<title>Color Entry Widget</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Color_Entry_Widget&amp;diff=88052"/>
		<updated>2013-01-05T16:09:17Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Deal with full SVG 1.1 colors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the aims of this blueprint.&lt;br /&gt;
&lt;br /&gt;
== Deal with full SVG 1.1 colors ==&lt;br /&gt;
&lt;br /&gt;
The entry accepts colors as defined by the [http://www.w3.org/TR/SVG/color.html SVG 1.1 Specifications].&lt;br /&gt;
&lt;br /&gt;
SVG 1.1 colors do not handle alpha (it's stored in a separate attribute). We have three options:&lt;br /&gt;
&lt;br /&gt;
# Change nothing and keep displaying the alpha value with the color value by extanding the SVG specification (#RRGGBB =&amp;gt; RRGGBBAA, rgb(255, 255, 255) =&amp;gt; rgba(255, 255, 255, alpha)...).&lt;br /&gt;
# Do like many softwares and display the color in the entry without the alpha (which is displayed in it's own entry). This would probably need a widget rearrangement.&lt;br /&gt;
# Allow both: implement the SVG 1.1 specification (case 2) and keep case 1 as a preparation for SVG 2. This will allow inputs but, because Inkscape files are SVG 1.1, any loaded file will be displayed using case 2.&lt;br /&gt;
&lt;br /&gt;
The third case is proposed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ SVG 1.1 compliance matrix&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Input/Loaded color&lt;br /&gt;
! scope=col | SVG 1.1&lt;br /&gt;
! scope=col | Saved as&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#FF00AA&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#F0A&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
FF00AA&lt;br /&gt;
| |&lt;br /&gt;
No*&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
F0A&lt;br /&gt;
| |&lt;br /&gt;
No*&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#FF00AADD&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| |&lt;br /&gt;
No**&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
FF00AADD&lt;br /&gt;
| |&lt;br /&gt;
No**&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
rgb(255, 0, 170)&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
rgb(100%, 0%, 66%)&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
red&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;* Kept for historycal reasons&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;** Kept for historycal reasons and as an hypotetical SVG 2 valid color format&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare SVG 2 ==&lt;br /&gt;
&lt;br /&gt;
Based on [http://www.w3.org/TR/SVG2/color.html SVG2]. The idea is to be more ''SVG 2 ready''.&lt;br /&gt;
&lt;br /&gt;
=== sRGB colors ===&lt;br /&gt;
&lt;br /&gt;
The HSL format is closed to RGB: no issue.&lt;br /&gt;
&lt;br /&gt;
Some color named are added: no issue.&lt;br /&gt;
&lt;br /&gt;
=== sRGB colors with alpha ===&lt;br /&gt;
&lt;br /&gt;
RGBA and HSLA are added: no issue.&lt;br /&gt;
&lt;br /&gt;
=== ICC and LAB colors ===&lt;br /&gt;
&lt;br /&gt;
To be implemented?&lt;br /&gt;
&lt;br /&gt;
== Keep the user value ==&lt;br /&gt;
&lt;br /&gt;
Colors are stored in the SVG file as specified by the user (i.e. no more forced conversions to hex values). However, for internal purposes, the colors can be stored and handled differently. This would mean having an internal color value (as now) and a display value.&lt;br /&gt;
&lt;br /&gt;
The color sets in the entry is (chronologically):&lt;br /&gt;
&lt;br /&gt;
# First, the color as written in the SVG file (if any)&lt;br /&gt;
# Then, if modified by the user (pasted or typed), the user value&lt;br /&gt;
# Then, if modified by the software (in case of multiple input widgets), the software value&lt;br /&gt;
&lt;br /&gt;
If the alpha is not part of the user input, Inkscape keep the previous one and will not append it in the entry.&lt;br /&gt;
&lt;br /&gt;
== Help the user ==&lt;br /&gt;
&lt;br /&gt;
If the text in the entry cannot be converted to a valid color, the entry changes it's appearance (red border?).&lt;br /&gt;
&lt;br /&gt;
If a color from the palette is dragged and dropped on the entry, it takes the color value.&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposals]]&lt;br /&gt;
[[Category:Widgets]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Color_Entry_Widget&amp;diff=88046</id>
		<title>Color Entry Widget</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Color_Entry_Widget&amp;diff=88046"/>
		<updated>2013-01-05T12:18:08Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Deal with full SVG 1.1 colors */ Add a SVG 1.1 compliance matrix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the aims of this blueprint.&lt;br /&gt;
&lt;br /&gt;
== Deal with full SVG 1.1 colors ==&lt;br /&gt;
&lt;br /&gt;
The entry accepts colors as defined by the [http://www.w3.org/TR/SVG/color.html SVG 1.1 Specifications].&lt;br /&gt;
&lt;br /&gt;
SVG 1.1 colors do not handle alpha (it's stored in a separate attribute). We have three options:&lt;br /&gt;
&lt;br /&gt;
# Change nothing and keep displaying the alpha value with the color value by extanding the SVG specification (#RRGGBB =&amp;gt; RRGGBBAA, rgb(255, 255, 255) =&amp;gt; rgba(255, 255, 255, alpha)...).&lt;br /&gt;
# Do like many softwares and display the color in the entry without the alpha (which is displayed in it's own entry). This would probably need a widget rearrangement.&lt;br /&gt;
# Allow both: implement the SVG 1.1 specification (case 2) and keep case 1 as a preparation for SVG 2. This will allow inputs but, because Inkscape files are SVG 1.1, any loaded file will be displayed using case 2.&lt;br /&gt;
&lt;br /&gt;
The third case is proposed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; width=&amp;quot;80%&amp;quot;&lt;br /&gt;
|+ SVG 1.1 compliance matrix&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Input/Loaded color&lt;br /&gt;
! scope=col | SVG 1.1&lt;br /&gt;
! scope=col | Saved as&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#FF00AA&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
FF00AA&lt;br /&gt;
| |&lt;br /&gt;
No*&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#FF00AADD&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| |&lt;br /&gt;
No*&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
FF00AADD&lt;br /&gt;
| |&lt;br /&gt;
No*&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
rgb(255, 0, 170)&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
rgb(100%, 0%, 66%)&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
inherit&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| |&lt;br /&gt;
red&lt;br /&gt;
| |&lt;br /&gt;
Yes&lt;br /&gt;
| |&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;* Kept for historycal reasons&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare SVG 2 ==&lt;br /&gt;
&lt;br /&gt;
Based on [http://www.w3.org/TR/SVG2/color.html SVG2]. The idea is to be more ''SVG 2 ready''.&lt;br /&gt;
&lt;br /&gt;
=== sRGB colors ===&lt;br /&gt;
&lt;br /&gt;
The HSL format is closed to RGB: no issue.&lt;br /&gt;
&lt;br /&gt;
Some color named are added: no issue.&lt;br /&gt;
&lt;br /&gt;
=== sRGB colors with alpha ===&lt;br /&gt;
&lt;br /&gt;
RGBA and HSLA are added: no issue.&lt;br /&gt;
&lt;br /&gt;
=== ICC and LAB colors ===&lt;br /&gt;
&lt;br /&gt;
To be implemented?&lt;br /&gt;
&lt;br /&gt;
== Keep the user value ==&lt;br /&gt;
&lt;br /&gt;
Colors are stored in the SVG file as specified by the user (i.e. no more forced conversions to hex values). However, for internal purposes, the colors can be stored and handled differently. This would mean having an internal color value (as now) and a display value.&lt;br /&gt;
&lt;br /&gt;
The color sets in the entry is (chronologically):&lt;br /&gt;
&lt;br /&gt;
# First, the color as written in the SVG file (if any)&lt;br /&gt;
# Then, if modified by the user (pasted or typed), the user value&lt;br /&gt;
# Then, if modified by the software (in case of multiple input widgets), the software value&lt;br /&gt;
&lt;br /&gt;
If the alpha is not part of the user input, Inkscape keep the previous one and will not append it in the entry.&lt;br /&gt;
&lt;br /&gt;
== Help the user ==&lt;br /&gt;
&lt;br /&gt;
If the text in the entry cannot be converted to a valid color, the entry changes it's appearance (red border?).&lt;br /&gt;
&lt;br /&gt;
If a color from the palette is dragged and dropped on the entry, it takes the color value.&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposals]]&lt;br /&gt;
[[Category:Widgets]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Free_Desktop_Graphic_Suite&amp;diff=88004</id>
		<title>Free Desktop Graphic Suite</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Free_Desktop_Graphic_Suite&amp;diff=88004"/>
		<updated>2012-12-28T20:25:50Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Resources that can be shared: */ Link fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Common interface for graphic programs on the free desktop.&lt;br /&gt;
&lt;br /&gt;
Many artists use several applications in their workflow.&lt;br /&gt;
This includes using one program for photo editing, one for illustration and one for page layout.&lt;br /&gt;
To ease the user experience for someone using these apps, consistency in wording, looks and similar working tools needs to be adressed.&lt;br /&gt;
&lt;br /&gt;
The three programs that will be adressed are:&lt;br /&gt;
* GNU Image Manipulator Program aka GIMP (bitmap image editing)&lt;br /&gt;
* Inkscape (scalable graphics illustration) &lt;br /&gt;
* Scribus (page layout)&lt;br /&gt;
&lt;br /&gt;
== [[Common dialogs]] ==&lt;br /&gt;
&lt;br /&gt;
== [[Tool consistency]] ==&lt;br /&gt;
&lt;br /&gt;
== Resources that can be shared: ==&lt;br /&gt;
* Patterns (PNGs)&lt;br /&gt;
* Gradients (SVGs)&lt;br /&gt;
* Palettes (We need a standard here.) (suggestion: .xml format, based on .ai format (each text line with each colour name and its rgb, cmyk or whatever))&lt;br /&gt;
* Clipart (SVG/PNG)&lt;br /&gt;
:: We need some kind of universal, portable and standard svg rendering engine that can cope with InkscapeSvg. I think the ability to know that your source svg looks fine in the GIMP or several other programs on anyone else's computer would encourage people to use it a lot more (and would leapfrog the Adobe formats). It would also mean that when you used a vector image in another program you wouldn't have to rasterise it, so output would be better quality. [[User:Legio noctis|Legio noctis]] 14:56, 31 March 2010 (UTC) &lt;br /&gt;
* Icons&lt;br /&gt;
* Cursors &lt;br /&gt;
* Color Management&lt;br /&gt;
* Fonts&lt;br /&gt;
* Symbols&lt;br /&gt;
* Filters&lt;br /&gt;
&lt;br /&gt;
To help manage these resources it would probably be wise to try and incorporate some kind of Thumbnail Browser into any such suite.  Unfortunately there is no obvious choice of cross platform and open source Thumbnail browser.&lt;br /&gt;
&lt;br /&gt;
:: Could all the open source projects agree on one location to store all these resources or links to them e.g. &amp;lt;tt&amp;gt;~/.graphicsresources&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt; %appdata%\Graphic resources\&amp;lt;/tt&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
Could this system be turned into a new open source project/standard of its own? For example, say we called it something like 'Pixelshare', for lack of a graphic-y sounding name.  We could then say that every Pixelshare-supporting program makes sure that a &amp;lt;tt&amp;gt;Pixelshare resources&amp;lt;/tt&amp;gt; folder has been established. This would then contain a set directory structure, e.g. there could be a database (XML?) of the various programs/files/whatever is needed for efficient operation. For example:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
/cursors&amp;lt;br /&amp;gt;&lt;br /&gt;
/icons&amp;lt;br /&amp;gt;&lt;br /&gt;
/images&amp;lt;br /&amp;gt;&lt;br /&gt;
: /Inkscape&amp;lt;br /&amp;gt;&lt;br /&gt;
::...insert here either actual files, shortcuts to files or database of files...&amp;lt;br /&amp;gt;&lt;br /&gt;
: /GIMP&amp;lt;br /&amp;gt;&lt;br /&gt;
information.xml&amp;lt;br /&amp;gt;&lt;br /&gt;
/sound&amp;lt;br /&amp;gt;&lt;br /&gt;
/videos&amp;lt;br /&amp;gt;  &lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I suggest information.xml contains metadata about the programs, what they produce, formats etc, and the (potential) database inside the &amp;lt;tt&amp;gt;Inkscape&amp;lt;/tt&amp;gt; folder  actually contains information such as location of the image, when it was last opened, by what, created, by what, notes attached to it, whether it is a derivative of another file in the database etc.&lt;br /&gt;
&lt;br /&gt;
I will try to return to this page and expand on my ideas more solidly. Someone had a grand vision creating this page, and I don't want to see it come to nothing. [[User:Legio noctis|Legio noctis]] 18:27, 1 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== A file sharing toolbar ==&lt;br /&gt;
&lt;br /&gt;
Some mockups:&lt;br /&gt;
&lt;br /&gt;
Standard toolbar:&lt;br /&gt;
&lt;br /&gt;
[[File:Opengraphics_toolbar_mockup_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Toolbar with 'send to another application' menu open:&lt;br /&gt;
&lt;br /&gt;
[[File:Opengraphics_toolbar_mockup_2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Toolbar with 'my collections' menu open:&lt;br /&gt;
&lt;br /&gt;
[[File:Opengraphics_toolbar_mockup_3.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Mini toolbar:&lt;br /&gt;
&lt;br /&gt;
[[File:Opengraphics_toolbar_mockup_4.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Is this feasible? [[User:Legio noctis|Legio noctis]] 15:12, 31 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== [[Feature Requests]] ==&lt;br /&gt;
&lt;br /&gt;
There are many features in the GIMP that Inkscape will want to copy such as the Dock Widgets for managing Palettes.  &lt;br /&gt;
&lt;br /&gt;
There are also some enhancements to the GIMP like this [http://bugzilla.gnome.org/show_bug.cgi?id=133030 request for a standard toolbar] that would be helpful for Inkscape users.  &lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* [http://www.nabble.com/Desktop-f822.html Open Source Desktop Forum] - a large forum hosted by [http://www.nabble.com Nabble] on big open source desktop projects such as [http://www.nabble.com/Gnome-f1226.html Gnome], [http://www.nabble.com/Xfce-f830.html Xfce], [http://www.nabble.com/Rox-f827.html Rox], [http://www.nabble.com/Etoile-f823.html Etoile].&lt;br /&gt;
&lt;br /&gt;
* [http://software.newsforge.com/software/05/02/02/215259.shtml?tid=75&amp;amp;tid=131&amp;amp;tid=132 Article on free graphics software integration]&lt;br /&gt;
&lt;br /&gt;
* [http://www.osnews.com/story.php?news_id=9658 '''Achieving higher consistency between OSS graphics applications''' - Bryce Harringtons article on the issue]&lt;br /&gt;
&lt;br /&gt;
* [http://developer.gnome.org/projects/gup/hig/2.0/ Gnome Human Interface Guidelines]&lt;br /&gt;
&lt;br /&gt;
* [http://usability.kde.org/ KDE Usability project]&lt;br /&gt;
&lt;br /&gt;
* http://www.openusability.org/&lt;br /&gt;
&lt;br /&gt;
* http://www.freedesktop.org/&lt;br /&gt;
&lt;br /&gt;
* http://developer.gimp.org/standards.html&lt;br /&gt;
&lt;br /&gt;
* [http://www.freedesktop.org/wiki/Standards_2ficon_2dtheme_2dspec Unified icon spec on freedesktop.org]&lt;br /&gt;
&lt;br /&gt;
* http://openclipart.org/&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Discussion]]&lt;br /&gt;
[[Category:Needs Work]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Free_Desktop_Graphic_Suite&amp;diff=87998</id>
		<title>Free Desktop Graphic Suite</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Free_Desktop_Graphic_Suite&amp;diff=87998"/>
		<updated>2012-12-28T20:25:20Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* A file sharing toolbar */ Layout fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Common interface for graphic programs on the free desktop.&lt;br /&gt;
&lt;br /&gt;
Many artists use several applications in their workflow.&lt;br /&gt;
This includes using one program for photo editing, one for illustration and one for page layout.&lt;br /&gt;
To ease the user experience for someone using these apps, consistency in wording, looks and similar working tools needs to be adressed.&lt;br /&gt;
&lt;br /&gt;
The three programs that will be adressed are:&lt;br /&gt;
* GNU Image Manipulator Program aka GIMP (bitmap image editing)&lt;br /&gt;
* Inkscape (scalable graphics illustration) &lt;br /&gt;
* Scribus (page layout)&lt;br /&gt;
&lt;br /&gt;
== [[Common dialogs]] ==&lt;br /&gt;
&lt;br /&gt;
== [[Tool consistency]] ==&lt;br /&gt;
&lt;br /&gt;
== Resources that can be shared: ==&lt;br /&gt;
* Patterns (PNGs)&lt;br /&gt;
* Gradients (SVGs)&lt;br /&gt;
* Palettes (We need a standard here.) (suggestion: .xml format, based on .ai format (each text line with each colour name and its rgb, cmyk or whatever))&lt;br /&gt;
* Clipart (SVG[[/PNG]])&lt;br /&gt;
:: We need some kind of universal, portable and standard svg rendering engine that can cope with InkscapeSvg. I think the ability to know that your source svg looks fine in the GIMP or several other programs on anyone else's computer would encourage people to use it a lot more (and would leapfrog the Adobe formats). It would also mean that when you used a vector image in another program you wouldn't have to rasterise it, so output would be better quality. [[User:Legio noctis|Legio noctis]] 14:56, 31 March 2010 (UTC) &lt;br /&gt;
* Icons&lt;br /&gt;
* Cursors &lt;br /&gt;
* Color Management&lt;br /&gt;
* Fonts&lt;br /&gt;
* Symbols&lt;br /&gt;
* Filters&lt;br /&gt;
&lt;br /&gt;
To help manage these resources it would probably be wise to try and incorporate some kind of Thumbnail Browser into any such suite.  Unfortunately there is no obvious choice of cross platform and open source Thumbnail browser.&lt;br /&gt;
&lt;br /&gt;
:: Could all the open source projects agree on one location to store all these resources or links to them e.g. &amp;lt;tt&amp;gt;~/.graphicsresources&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt; %appdata%\Graphic resources\&amp;lt;/tt&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
Could this system be turned into a new open source project/standard of its own? For example, say we called it something like 'Pixelshare', for lack of a graphic-y sounding name.  We could then say that every Pixelshare-supporting program makes sure that a &amp;lt;tt&amp;gt;Pixelshare resources&amp;lt;/tt&amp;gt; folder has been established. This would then contain a set directory structure, e.g. there could be a database (XML?) of the various programs/files/whatever is needed for efficient operation. For example:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
/cursors&amp;lt;br /&amp;gt;&lt;br /&gt;
/icons&amp;lt;br /&amp;gt;&lt;br /&gt;
/images&amp;lt;br /&amp;gt;&lt;br /&gt;
: /Inkscape&amp;lt;br /&amp;gt;&lt;br /&gt;
::...insert here either actual files, shortcuts to files or database of files...&amp;lt;br /&amp;gt;&lt;br /&gt;
: /GIMP&amp;lt;br /&amp;gt;&lt;br /&gt;
information.xml&amp;lt;br /&amp;gt;&lt;br /&gt;
/sound&amp;lt;br /&amp;gt;&lt;br /&gt;
/videos&amp;lt;br /&amp;gt;  &lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I suggest information.xml contains metadata about the programs, what they produce, formats etc, and the (potential) database inside the &amp;lt;tt&amp;gt;Inkscape&amp;lt;/tt&amp;gt; folder  actually contains information such as location of the image, when it was last opened, by what, created, by what, notes attached to it, whether it is a derivative of another file in the database etc.&lt;br /&gt;
&lt;br /&gt;
I will try to return to this page and expand on my ideas more solidly. Someone had a grand vision creating this page, and I don't want to see it come to nothing. [[User:Legio noctis|Legio noctis]] 18:27, 1 April 2010 (UTC)&lt;br /&gt;
== A file sharing toolbar ==&lt;br /&gt;
&lt;br /&gt;
Some mockups:&lt;br /&gt;
&lt;br /&gt;
Standard toolbar:&lt;br /&gt;
&lt;br /&gt;
[[File:Opengraphics_toolbar_mockup_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Toolbar with 'send to another application' menu open:&lt;br /&gt;
&lt;br /&gt;
[[File:Opengraphics_toolbar_mockup_2.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Toolbar with 'my collections' menu open:&lt;br /&gt;
&lt;br /&gt;
[[File:Opengraphics_toolbar_mockup_3.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Mini toolbar:&lt;br /&gt;
&lt;br /&gt;
[[File:Opengraphics_toolbar_mockup_4.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Is this feasible? [[User:Legio noctis|Legio noctis]] 15:12, 31 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== [[Feature Requests]] ==&lt;br /&gt;
&lt;br /&gt;
There are many features in the GIMP that Inkscape will want to copy such as the Dock Widgets for managing Palettes.  &lt;br /&gt;
&lt;br /&gt;
There are also some enhancements to the GIMP like this [http://bugzilla.gnome.org/show_bug.cgi?id=133030 request for a standard toolbar] that would be helpful for Inkscape users.  &lt;br /&gt;
&lt;br /&gt;
'''Links'''&lt;br /&gt;
* [http://www.nabble.com/Desktop-f822.html Open Source Desktop Forum] - a large forum hosted by [http://www.nabble.com Nabble] on big open source desktop projects such as [http://www.nabble.com/Gnome-f1226.html Gnome], [http://www.nabble.com/Xfce-f830.html Xfce], [http://www.nabble.com/Rox-f827.html Rox], [http://www.nabble.com/Etoile-f823.html Etoile].&lt;br /&gt;
&lt;br /&gt;
* [http://software.newsforge.com/software/05/02/02/215259.shtml?tid=75&amp;amp;tid=131&amp;amp;tid=132 Article on free graphics software integration]&lt;br /&gt;
&lt;br /&gt;
* [http://www.osnews.com/story.php?news_id=9658 '''Achieving higher consistency between OSS graphics applications''' - Bryce Harringtons article on the issue]&lt;br /&gt;
&lt;br /&gt;
* [http://developer.gnome.org/projects/gup/hig/2.0/ Gnome Human Interface Guidelines]&lt;br /&gt;
&lt;br /&gt;
* [http://usability.kde.org/ KDE Usability project]&lt;br /&gt;
&lt;br /&gt;
* http://www.openusability.org/&lt;br /&gt;
&lt;br /&gt;
* http://www.freedesktop.org/&lt;br /&gt;
&lt;br /&gt;
* http://developer.gimp.org/standards.html&lt;br /&gt;
&lt;br /&gt;
* [http://www.freedesktop.org/wiki/Standards_2ficon_2dtheme_2dspec Unified icon spec on freedesktop.org]&lt;br /&gt;
&lt;br /&gt;
* http://openclipart.org/&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Discussion]]&lt;br /&gt;
[[Category:Needs Work]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CompilingSunSolaris&amp;diff=87992</id>
		<title>CompilingSunSolaris</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CompilingSunSolaris&amp;diff=87992"/>
		<updated>2012-12-28T20:23:45Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Link fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Compiling on Oracle/Sun Solaris =&lt;br /&gt;
&lt;br /&gt;
==Compiling version 0.48.1==&lt;br /&gt;
&lt;br /&gt;
here you can find how to build inkscape 0.48.1 on Solaris 10 (x86) 64 bit. &lt;br /&gt;
&lt;br /&gt;
* Chose a prefix path where to install independent of Solaris' own libraries. In my example --prefix=/usr/local is used for all tools&lt;br /&gt;
* build GNU make and install it into /usr/local/bin&lt;br /&gt;
* Build one of the newest versions of gcc (I built 4.5.1). Before that install the needed libraries gmp, mpfr, mpc also with --prefix=/usr/local. Build gcc. Re-build the gmp/mpfr/mpc. Re-build gcc. After that you should have no further dependencies to /usr/sfw/lib which is important&lt;br /&gt;
* Edit the gcc specs to get a clean compilation independent if you use -m64 or -m32. To achieve this have a look at the *link_arch section where to put in additional -R/usr/local/lib and -R/usr/local/lib/64 (gcc configured to use Sun's ld).&lt;br /&gt;
* build pkg-config with --prefix=/usr/local --libdir=/usr/local/lib/64 for the following packages&lt;br /&gt;
&lt;br /&gt;
For further installations I used a few environment variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export PATH=&amp;quot;/usr/local/bin:/usr/bin:/usr/ccs/bin&amp;quot;&lt;br /&gt;
export MAKE=/usr/local/bin/make&lt;br /&gt;
export CC=&amp;quot;gcc -m64&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;g++ -m64&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build and install the following packages with &lt;br /&gt;
''./configure --prefix=/usr/local --libdir=/usr/local/lib/64 --sysconfdir=/usr/local/etc/64 --enable-shared''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zlib-1.2.5&lt;br /&gt;
jpeg-6.2&lt;br /&gt;
gettext-0.17&lt;br /&gt;
libiconv-1.12&lt;br /&gt;
fontconfig-2.8.0&lt;br /&gt;
t1lib-5.1.0&lt;br /&gt;
freetype-2.4.4&lt;br /&gt;
render-0.8&lt;br /&gt;
libxrender-0.8.4&lt;br /&gt;
libpng-1.4.4 (cave: 1.5.x does not work with Inkscape!)&lt;br /&gt;
gsl-1.14&lt;br /&gt;
pixman-0.21.6&lt;br /&gt;
glib-2.28.3&lt;br /&gt;
glibmm-2.24.2&lt;br /&gt;
atk-1.32.0&lt;br /&gt;
pango-1.28.3&lt;br /&gt;
cairo-1.10.2 (rebuild pango after building cairo!!)&lt;br /&gt;
gtk+-2.24.3 (I avoided the very new version 3.....)&lt;br /&gt;
gdk-pixbuf-2.22.1&lt;br /&gt;
poppler-0.16.3 (use the additional flag --enable-xpdf-headers)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then make three small changes to inkscape's source:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
src/color-profile.cpp, line 8: Change &amp;quot;#include &amp;lt;sys/fcntl.h&amp;gt;&amp;quot; into &amp;quot;#include &amp;lt;fcntl.h&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
src/2geom/isnan.h, line 57: The mentioned &amp;quot;#include &amp;lt;cmath&amp;gt;&amp;quot; must be set&lt;br /&gt;
&lt;br /&gt;
src/2geom/convex-cover.cpp, line 36: include these two lines (ok, quick and dirty....):&lt;br /&gt;
#undef INFINITY&lt;br /&gt;
#define INFINITY (__builtin_inff())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now configure inkscape as described above. You should get a clean compile. --[[User:Reinhard|Reinhard]]&lt;br /&gt;
&lt;br /&gt;
==Compiling version 0.44==&lt;br /&gt;
&lt;br /&gt;
This documents the changes that I needed to make Inkscape compile with gcc 3.3.2 on Solaris 8.&lt;br /&gt;
&lt;br /&gt;
* install all hard dependencies&lt;br /&gt;
* provide a definition of ngettext (thread: http://thread.gmane.org/gmane.comp.graphics.inkscape.devel/15747/focus=15828)&lt;br /&gt;
* patch isfinite() like described here: http://opensolaris-br.org/osbr/index.php?option=com_content&amp;amp;task=view&amp;amp;id=34&amp;amp;Itemid=56&lt;br /&gt;
* src/dom/io/socket.cpp - FIONREAD undeclared: http://opendx.npaci.edu/mail/opendx-general/1999.06/msg00425.html (#include &amp;lt;sys/filio.h&amp;gt;)&lt;br /&gt;
* src/widgets/desktop-widget.cpp: replace round with rint&lt;br /&gt;
* src/trace/potrace/inkscape-potrace.cpp:288: error: `log2' undeclared (first use of this function)&lt;br /&gt;
:Add the following function to the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// from http://groups.google.de/group/comp.lang.c/msg/8ae70d02495768f5?dmode=source&amp;amp;hl=de&lt;br /&gt;
double log2(double x)&lt;br /&gt;
{&lt;br /&gt;
        static double ln2;&lt;br /&gt;
        if (ln2 == 0.0)&lt;br /&gt;
                ln2 = log (2.0);&lt;br /&gt;
&lt;br /&gt;
        return log (x) / ln2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Now stuck here (gc6.7, gcc version 3.3.2):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gc.cpp: In function `void Inkscape::GC::&amp;lt;unnamed&amp;gt;::do_init()':&lt;br /&gt;
gc.cpp:32: error: parse error before string constant&lt;br /&gt;
gc.cpp:32: error: `GC_noop1' undeclared (first use this function)&lt;br /&gt;
gc.cpp:32: error: (Each undeclared identifier is reported only once for each &lt;br /&gt;
   function it appears in.)&lt;br /&gt;
gmake[2]: *** [gc.o] Error 1&lt;br /&gt;
gmake[2]: Leaving directory `/home/marquardt/Tools/inkscape-0.44/src'&lt;br /&gt;
gmake[1]: *** [all-recursive] Error 1&lt;br /&gt;
gmake[1]: Leaving directory `/home/marquardt/Tools/inkscape-0.44'&lt;br /&gt;
gmake: *** [all] Error 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1516476&amp;amp;group_id=93438&amp;amp;atid=604306&lt;br /&gt;
&lt;br /&gt;
I got the following patch for &amp;quot;gc6.7/include/gc.h&amp;quot; from Hans Boehm which fixes these problems with gc6.7:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
947a948&lt;br /&gt;
&amp;gt;     extern int _end[], _etext[];&lt;br /&gt;
949,952c950&lt;br /&gt;
&amp;lt; #     define GC_INIT() { extern int _end[], _etext[]; \&lt;br /&gt;
&amp;lt; 		         extern &amp;quot;C&amp;quot; void GC_noop1(GC_word); \&lt;br /&gt;
&amp;lt; 		         GC_noop1((GC_word)_end); \&lt;br /&gt;
&amp;lt; 			 GC_noop1((GC_word)_etext); }&lt;br /&gt;
---&lt;br /&gt;
&amp;gt;       extern &amp;quot;C&amp;quot; void GC_noop1(GC_word);&lt;br /&gt;
954,956c952&lt;br /&gt;
&amp;lt; #     define GC_INIT() { extern int _end[], _etext[]; \&lt;br /&gt;
&amp;lt; 		         extern void GC_noop(); \&lt;br /&gt;
&amp;lt; 		         GC_noop(_end, _etext); }&lt;br /&gt;
---&lt;br /&gt;
&amp;gt;       void GC_noop1();&lt;br /&gt;
957a954,955&lt;br /&gt;
&amp;gt; #   define GC_INIT() { GC_noop1((GC_word)_end); \&lt;br /&gt;
&amp;gt; 		       GC_noop1((GC_word)_etext); }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With these changes, I got Inkscape running fine.&lt;br /&gt;
--[[User:Colin Marquardt|Colin Marquardt]]&lt;br /&gt;
&lt;br /&gt;
==Compiling a 0.39 snapshot==&lt;br /&gt;
&lt;br /&gt;
When trying to compile the CVS snapshot from 2004-05-27 with &lt;br /&gt;
gcc 3.3.2 on a &lt;br /&gt;
&amp;lt;nowiki&amp;gt;SunOS foo 5.8 Generic_108528-22 sun4u sparc SUNW,Sun-Fire-V240&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
machine, I had to fix a few things.&lt;br /&gt;
&lt;br /&gt;
First, I installed the following packages:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
autoconf-2.59&lt;br /&gt;
automake-1.8.3&lt;br /&gt;
intltool-0.30&lt;br /&gt;
expat-1.95.7&lt;br /&gt;
libpng-1.2.5&lt;br /&gt;
libsigc++-2.0.3&lt;br /&gt;
glib-2.4.2&lt;br /&gt;
glibmm-2.4.2&lt;br /&gt;
atk-1.7.0&lt;br /&gt;
render-0.8&lt;br /&gt;
xrender-0.8.3&lt;br /&gt;
xft-2.1.2&lt;br /&gt;
pango-1.4.0&lt;br /&gt;
gtk+-2.4.2&lt;br /&gt;
gtkmm-2.4.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I configured Inkscape with the following switches: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --prefix=/home/foo/Tools/ --includedir=/home/foo/Tools/include CPPFLAGS=-I/home/foo/Tools/include&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then &amp;quot;fix&amp;quot; stuff in the inkscape sources:&lt;br /&gt;
&lt;br /&gt;
Uncomment &amp;quot;@INTLTOOL_DESKTOP_RULE@&amp;quot; in Makefile.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;inttypes.h&amp;gt;, not &amp;lt;stdint.h&amp;gt; in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
src/display/sp-canvas.h,&lt;br /&gt;
src/livarot/DblLinked.h, &lt;br /&gt;
src/livarot/LivarotDefs.h, &lt;br /&gt;
src/livarot/AVL.h, &lt;br /&gt;
src/livarot/Shape.h, &lt;br /&gt;
src/livarot/ShapeUtils.h,&lt;br /&gt;
src/livarot/Ligne.h&lt;br /&gt;
src/livarot/AlphaLigne.h&lt;br /&gt;
src/livarot/BitLigne.h&lt;br /&gt;
src/livarot/MyMath.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(see&lt;br /&gt;
http://www.lns.cornell.edu/public/COMP/info/autoconf/Header-Portability.html)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Replace round() with rint() according to&lt;br /&gt;
http://news.gw.com/freebsd.gnome/1237 in&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
src/object-edit.cpp, &lt;br /&gt;
src/spiral-context.cpp&lt;br /&gt;
src/star-context.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fabsf() was undeclared (I just put in &amp;quot;fabs()&amp;quot;, not sure if this is&lt;br /&gt;
correct) in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
src/sp-shape.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(see&lt;br /&gt;
http://gcc.gnu.org/ml/java/2001-01/msg00465.html).&lt;br /&gt;
&lt;br /&gt;
Replaced fabsf(), floorf() and ceilf() with fabs(), floor() and ceil() in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
src/display/nr-arena-shape.cpp&lt;br /&gt;
src/display/canvas-bpath.cpp&lt;br /&gt;
src/display/sp-ctrlline.cpp&lt;br /&gt;
src/libnrtype/nr-rasterfont.cpp&lt;br /&gt;
src/livarot/AlphaLigne.cpp&lt;br /&gt;
src/livarot/BitLigne.cpp&lt;br /&gt;
src/livarot/Ligne.cpp&lt;br /&gt;
src/livarot/PathOutline.cpp&lt;br /&gt;
src/livarot/ShapeMisc.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
isfinite() is undeclared,  use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;ieeefp.h&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and finite() (see http://devrsrc1.external.hp.com/STKS/impacts/i61.html) in &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
src/display/bezier-utils.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need to include &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;ieeefp.h&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
src/libnr/nr-svp.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Missing strcasestr() used in libnrtype/nr-type-directory.cpp. I just &lt;br /&gt;
use the internal version for WIN32 given in the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
In file included from /home/foo/Tools/include/X11/extensions/Xrender.h:33,&lt;br /&gt;
                 from /home/foo/Tools/include/X11/Xft/Xft.h:47,&lt;br /&gt;
                 from libnrtype/nr-type-xft.cpp:16:&lt;br /&gt;
/usr/openwin/include/X11/Xutil.h:56: warning: ignoring #pragma ident &lt;br /&gt;
/usr/openwin/include/X11/Xutil.h:117: error: 'Bool' is used as a type, but is &lt;br /&gt;
   not defined as a type.&lt;br /&gt;
/usr/openwin/include/X11/Xutil.h:120: error: 'Pixmap' is used as a type, but is &lt;br /&gt;
   not defined as a type.&lt;br /&gt;
/usr/openwin/include/X11/Xutil.h:121: error: 'Window' is used as a type, but is &lt;br /&gt;
   not defined as a type.&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
etc. Fixed this by adding #include &amp;lt;X11/Xlib.h&amp;gt;&lt;br /&gt;
before including Xft.h in src/libnrtype/nr-type-xft.cpp.&lt;br /&gt;
&lt;br /&gt;
`bind_textdomain_codeset' undeclared in src/main.cpp and src/inkscape.cpp. Just copied the definition in that &lt;br /&gt;
file outside the ifdef.&lt;br /&gt;
&lt;br /&gt;
`fpresetsticky' undeclared (autoconf seems to have checks for it. Solaris has fpsetsticky() when ieeefp.h is included.)&lt;br /&gt;
&lt;br /&gt;
No rule for target inkscape.desktop - just created an empty rule.&lt;br /&gt;
&lt;br /&gt;
DONE! It runs on Solaris! Yay! :)&lt;br /&gt;
--Colin Marquardt&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
*[[Compiling Inkscape]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Animation-(Timeline)&amp;diff=87986</id>
		<title>Animation-(Timeline)</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Animation-(Timeline)&amp;diff=87986"/>
		<updated>2012-12-28T20:20:48Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Link fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DevDiscussion}}&lt;br /&gt;
[[Animation|Back to main page for animation]]&lt;br /&gt;
&lt;br /&gt;
=== User interface for timeline-based animation ===&lt;br /&gt;
&lt;br /&gt;
==== Existing animation programs (Free &amp;amp;amp; non-Free) ====&lt;br /&gt;
&lt;br /&gt;
Free (or Open Source)&lt;br /&gt;
&lt;br /&gt;
* [http://antimatter15.com/wp/ajax-animator/ Ajax Animator] is a FUNCTIONAL web-based (ajax) free-software clone of the flash interface, and uses a SVG based format for saving and compiling animations (http://osflash.org/ajaxanimator)&lt;br /&gt;
* QFlash is a FUNCTIONAL free-software mock-up of the Flash 4 interface, which can import SVG files but not edit them. (http://qflash.sourceforge.net) (last update 2009/07/17)&lt;br /&gt;
* F4l is a non-functional free-software mock-up of the Flash 4 interface.(http://f4l.sf.net/)&lt;br /&gt;
* [[LimSee2]] (http://wam.inrialpes.fr/software/limsee2/) is an excellent almost-free basis. (visible-source limited-use license)&lt;br /&gt;
* Spalah Flash (http://sourceforge.net/projects/spalah/) (not to be confused with Spalah CMS) &amp;quot;is a GTK2/GNOME2 based application for generating Macromedia SWF and [[W3C]] SVG animations.&amp;quot;  The GUI is today minimalist but the author is trying to integrate it with inkscape. See http://spalah.sourceforge.net/?p=25&lt;br /&gt;
* Jahshaka (http://www.jahshaka.com/) multi-platform QT animation program powered mostly by OpenGL (GPL)&lt;br /&gt;
* Ktoon (http://ktoon.net/) is a 2D Animation Toolkit designed by animators for animators, focused to the Cartoon Industry. (GPL)&lt;br /&gt;
* SMIL 2.1 player: http://www.cwi.nl/projects/Ambulant/distPlayer.html (GPL)&lt;br /&gt;
* [[Synfig]] &amp;lt;span style=&amp;quot;font-size:smaller&amp;quot;&amp;gt;([http://www.synfig.org/ link])&amp;lt;/span&amp;gt; is a film-quality 2D vector animation editor and renderer. It features image morphing between drawings and output animation that is resolution independent both visually and temporally. (GPL)&lt;br /&gt;
* Pencil (http://www.les-stooges.org/pascal/pencil/index.php?id=Home) vector and bitmap free animation package using Qt toolkit run on Ubuntu ([http://packages.ubuntu.com/search?keywords=pencil&amp;amp;searchon=names&amp;amp;suite=all&amp;amp;section=all reference]), Win32 (XP and works fine on wine), and MacOSX. Simple but already powerful basic animation. It uses blender like time line with multiple layers and Author plan to export SVG.&lt;br /&gt;
* Blender3D (http://blender.org/) is a 3d (eq. vector) animation program featuring  [http://wiki.blender.org/index.php/Manual/Animation_Basics key frame, motion curve, path animation] using [http://wiki.blender.org/index.php/Manual/Ipo_Curves_and_Keyframes interpolation (IPO) curve editing] combining with [http://wiki.blender.org/index.php/Manual/Shape_Keys shape keys] and  [http://wiki.blender.org/index.php/Manual/Animation/Lattice_Animation deforming by a lattice] (GPL)&lt;br /&gt;
* [http://gimp.org Gimp] the bitmap editor and it's included animation script for gif is really minimalistic and frame based&lt;br /&gt;
* [http://gimp.org Gimp-GAP] (Gimp Animation Plugin) is a gimp plugin has some good interfaces for managing movements of objects (menu video=&amp;gt;movepath), layer management and apply effects along animation. A powerful onionskin management, and notions of clip/storyboard, but could be slow in complex cases and slow computers.&lt;br /&gt;
* [http://www.thebest3d.com/dogwaffle/free/index.html PD1.2]  Free program for digital painting and limited animation&lt;br /&gt;
&lt;br /&gt;
Non-Free (Fee Based, or Proprietary)&lt;br /&gt;
&lt;br /&gt;
* CSS3 Animator + HTML5 - http://www.sencha.com/products/animator/&lt;br /&gt;
* [[PICMO]] - http://picmo.com/en/features.html&lt;br /&gt;
* [[MacromediaFlash|Adobe Flash]] (Formerly Macromedia Flash) is a good non-Free example.&lt;br /&gt;
* Ikivo Animator is a good non-Free example producing SVG Tiny animations (http://www.ikivo.com/animator/index.html)&lt;br /&gt;
* Macromedia Director prior to version MX had a different interface (http://www.rice.edu/fondren/erc/howto/director.html) which I prefer(ed) over Flash&lt;br /&gt;
* Anime Studio, formerly known as [[Moho]] (http://www.e-frontier.com/article/articleview/1913/1/793?sbss=793) a non-free example. (Written in Java.) Features skeletal animation ([http://www.e-frontier.com/article/articleview/1918/1/800?sbss=80х, unique bone rigging for 2D]) and automatic tweening of vector operations, [http://img.osnews.com/img/2547/moho4-rh.png view screenshot].&lt;br /&gt;
* Bob Sabiston's proprietary animation software http://www.flatblackfilms.com&lt;br /&gt;
* Powerpoint (http://office.microsoft.com) has an easy but basic interface. No flash killer, but some nice ideas.&lt;br /&gt;
* The Tab (http://www.the-tab.com/) Another non-free example that features elegant systems for parent-child animation and a very interesting feature that is designed for pseudo-3D camera moves.&lt;br /&gt;
* SVGDeveloper (http://www.perfectsvg.com/) is a non-free SVG authoring tool with animation support.&lt;br /&gt;
* [http://www.tvpaint.com TV Paint] is a non-free bitmap based compositing and animation package. It works with a timeline and layers. Notable feature is the onion skin &amp;quot;mixer&amp;quot;, which let's you adjust the brightness of multiple frames before and after the current one.&lt;br /&gt;
* [http://www.toonboom.com/ Toon Boom] is a non-free vector based frame by frame animation package. It simulates a lot of the tools familiar to traditional animators, such as a dope sheet, field charts and more. Has two modes, one for drawing &amp;quot;cells&amp;quot; and one for placing them in front of a virtual camera in basic 3D space.&lt;br /&gt;
* [http://www.thebest3d.com/ PD 2 through PD4]  A series non-free programs combining various capabilities for digital painting and animation.  The high end program allows creation of special effects&lt;br /&gt;
* Mewafilm ( http://www.mewatools.com/images/curveeditor_mainwindow.png , http://www.mewatools.com/screenshots.html )&lt;br /&gt;
&lt;br /&gt;
==== Fantavision example ====&lt;br /&gt;
Back in the '80's there was a program on Apple IIE (Amiga and MS-DOS too) called &amp;quot;Fantavision&amp;quot;. It allowed one to create vector artwork (although I didn't understand at the time that that was what it was called) and animations. It allowed one to create frames of animation where you manually repositioned, recolored, scaled, rotated etc. the objects from one frame to the next. However, it then automatically interpolated frames between the 2 frames (the number of interpolated frames was configurable) such that it create a smooth transition of the object moving from one frame to the other. The effect was very similiar to the &amp;quot;Morphing&amp;quot; effect for raster graphics (popularized in a Michael Jackson video, I believe). That is, the system calculated the trajectory of &amp;quot;Key Points&amp;quot; of the objects from one frame to the next.  This process is often called &amp;quot;Tweening&amp;quot; (a term used by Adobe Flash).  [[Sketch|Skencil]] (formerly known as [[Sketch]]) supports this functionality and describes it as &amp;quot;Blending&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
I guess what I'm saying is that I think a nice interface to create animations would be similiar. So to animate you would do the following:&lt;br /&gt;
&lt;br /&gt;
* Draw the initial SVG Image &lt;br /&gt;
&lt;br /&gt;
* Increment Frame (from say 1 to 20)&lt;br /&gt;
&lt;br /&gt;
* Reposition the elements in frame 20 (including scaling, color changes, adding removing objects, etc, etc, etc)&lt;br /&gt;
&lt;br /&gt;
* System would then calculate a trajectory for each key point from frame 1 to frame 20. Trajectories would be calculated for things like:&lt;br /&gt;
** Each &amp;quot;node&amp;quot; of an object&lt;br /&gt;
** Color &lt;br /&gt;
** Transformation Matrix&lt;br /&gt;
** etc&lt;br /&gt;
&lt;br /&gt;
* You could display/manipulate the trajectories (using the trajectory editor shown above by the original creator of this topic)&lt;br /&gt;
&lt;br /&gt;
* The system would then store the animations using SVG trajectories and the &amp;quot;Key Points&amp;quot; would be the frames you manually created&lt;br /&gt;
&lt;br /&gt;
:So, to create say a 100 frame animation, one might only need to manually create/modify 10 frames and the system would interpolate the additional frames as necessary.&lt;br /&gt;
&lt;br /&gt;
* Also, once the system interpolated frames it would allow you to manually modify the interpolated frames creating further &amp;quot;Key Points&amp;quot; and allow further refinement and interpolation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE: 3D apps such as blender also use a technique like this, which I think is most widely known as &amp;quot;keyframe animation&amp;quot; or simply &amp;quot;keyframing&amp;quot;.  However, many such systems tie the keys too closely to actual animation frames, and this creates problems when the frames-per-second rate changes.  Particularly in the case of vector apps which are not so low-level as bitmaps and animation frames, I would suggest that frames should be as abstract as possible.&lt;br /&gt;
&lt;br /&gt;
Having key positions in simple percentages of the total animation time might be a better solution.  This would also need to be a global/local system, of course: animated objects would have their own animation time specified when inserted into a larger document.  A character's walkcycle would end at 100%, but in the larger animation, it would perhaps only be 5% of the total time, yet repeating as the object moves across the screen.&lt;br /&gt;
&lt;br /&gt;
One issue with this abstraction of frames might be that important animation effects do not occur exactly within frames: small things could be mistimed, or simply missed altogether.  If you set the frame rate too low, this would be an obvious side effect, so it's not necessarily a problem&lt;br /&gt;
that Inkscape should try to fix.  On the other hand, a few things could be done to ease this.  For instance, &amp;quot;snapping&amp;quot; animation events to frames when exporting (thereby slightly altering the timing), or perhaps just warning that certain animation events are not visible at such a low frame rate.&lt;br /&gt;
&lt;br /&gt;
Of course, on the web, with SVG and DHTML, where most Inkscape animations will hopefully be used one day, frames are not an issue at all, and we just worry about keys in time :)&lt;br /&gt;
&lt;br /&gt;
ANOTHER NOTE: Interpolation does not necessarily occur along straight lines and linearly in time. Paths are already part of Inkscape, so points could move along paths; also the time-length graph can be something like a path, instead of a straight line.&lt;br /&gt;
&lt;br /&gt;
==== Jahshaka example ====&lt;br /&gt;
&lt;br /&gt;
I have used jahshaka for a small animation. This was my first real experience with animation. Thought rough, jahshaka is all about key frames and setting properties for those key frames.&lt;br /&gt;
&lt;br /&gt;
Things I liked&lt;br /&gt;
&lt;br /&gt;
* Key frames are on a per object basis&lt;br /&gt;
* When an object is selected you can quickly move from one key frame to another&lt;br /&gt;
* Property values for rotation can span beyond 0 and 360, permitting one to set three or more complete rotations within two key frames. I think this kind of feature could be used for all bounded values (like color, transparency and so on). Is this compatible with SVG or should it be an artifact?&lt;br /&gt;
* Representation of property values on a time line graph. This functionality was still not very usable, but being able to interact through that kind of object could be very useful (see below).&lt;br /&gt;
&lt;br /&gt;
Things that it lacks (and Inkscape shall have)&lt;br /&gt;
&lt;br /&gt;
* Possibility to copy animation properties from one object to another (say copy color animation, or whole animation).&lt;br /&gt;
* Possibility to modify a property value for all key frames at once (eg. translation of object for all key frames or a selected group). I think this could happen through the value = f(time) graph metioned above. You could select points (representing keyframes) and move them up (more), down (less), right (sooner). This graph could be organised by property set (color, position). I think this kind of graph would be very close to SVG animations tag.&lt;br /&gt;
* A macro that helps sets common effects (like blinking for example, or crossing the screen).&lt;br /&gt;
&lt;br /&gt;
==== Bob Sabiston Example ====&lt;br /&gt;
Bob Sabiston's animation software is an amazing vector-based package that stores line width within the points that make up a line -- derived from a tablet pen. usually in a simple stroke there could be a hundred data points storing width information. Then in the next keyframe, a line from a previous key is selected and re-drawn restricted to the same number of points. The software allows the points to be &amp;quot;repositioned&amp;quot; as you watch their previous locations be re-positioned. When you run out, the line ends automatically. This information is interpolated in tweening frames to change shape, width, and position, but retains the same number of data-points. See the film &amp;quot;Waking Life&amp;quot; for the making-of video for a demonstration. Also visit his website for examples of its capabilities converted to Flash. http://www.flatblackfilms.com&lt;br /&gt;
&lt;br /&gt;
==== Other thoughts ====&lt;br /&gt;
&lt;br /&gt;
Suggestion from someone else: working like [[CinePaint]] (compared with Gimp), with each frame independently from each svg document (working like this or providing this feature) - providing vectorial edition quality we can't get on apps like Macromedia Flash or any other (maybe [http://www.toonboomstudio.com/ ToonBoom] or Moho) - allowing us to make our work fast publish without further lack of quality.&lt;br /&gt;
(One more suggestion about it: being able to convert .swf to .svg sequence (or animated .sgv) and vice versa.)&lt;br /&gt;
&lt;br /&gt;
It is suggested that there be basically two modes: Local (Object) mode and Global mode. Below is a picture showing a very rough design of the local mode:&lt;br /&gt;
&lt;br /&gt;
http://www.inkscape.org/wiki_uploads/anim_gui1.png&lt;br /&gt;
&lt;br /&gt;
In local modes, all properties of the object editing will be shown on a timeline, and one can create and edit frame within the timeline. Then one may assign different value of that properties on different timeline, or make it change linearly, or nonlinearly :)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Animation support in Inkscape offers great new opportunities. Here are some points that I think are important to keep in mind when adding animation to the GUI:&lt;br /&gt;
&lt;br /&gt;
* ''Originality''&amp;lt;br&amp;gt;Don't do as other do - except it's the best way.&lt;br /&gt;
* ''Simplicity''&amp;lt;br&amp;gt;Animation should not stand in the way of the user. Only show as much as necessary to perform a certain task, and do things in the most natural way.&lt;br /&gt;
* ''SVG-Orientation''&amp;lt;br&amp;gt;SVG animation is different in some ways. The UI should reflect this, and not reassemble concepts of tools that just work differently. E.g.,&lt;br /&gt;
** SMIL animation has no concept of frames. So we don't need a frame-based timeline, but a time-based one.&lt;br /&gt;
** SMIL animation in general is to animation what vector graphics is to graphics: It's declarative and object oriented. So one doesn't animate a scene, one animates objects on a scene, etc.&lt;br /&gt;
* ''Coherence''&amp;lt;br&amp;gt;The animation UI should reassemble concepts that Inkscape users are already familiar with:&lt;br /&gt;
** Animation timelines can in some contexts be treated as paths that one can add points to (keyTimes). Or one can control animation timing with splines (keySplines).&lt;br /&gt;
&lt;br /&gt;
I composed a mockup that reflects the above mentioned characteristics to some extend:&lt;br /&gt;
http://www.uni-bremen.de/~felwert/inkscape/Animation01.html&lt;br /&gt;
&lt;br /&gt;
==== Powerpoint Example ====&lt;br /&gt;
You select an object and add types of animation. These are listed in the custom animation pane. They can be set to occur all at once, one at a time, onclick, with previous or after previous. A number appears next to each object in the editing window when the object has animation applied to it, representing the sequence of the animations. When an object has an Entrance type animation added to it as the first animation, it will not appear on screen until the timeline reaches this point. animations can be linked together to create quite complicated sequences.&lt;br /&gt;
&lt;br /&gt;
==== Onion Skinning ====&lt;br /&gt;
Onion skinning is a standard animator tool, previous or next frames (sometime both) are displayed under the current frame with differrent color, or less contrast, allowing to understand wich drawing the animator is actually working on, and wich frame is 1 step or 2 step before or after the actual frame.&lt;br /&gt;
&lt;br /&gt;
This can easily be implemented using transparency parameter of layer, and automatize selection of layers to be displayed, parameters following a specialized gui entries.&lt;br /&gt;
&lt;br /&gt;
Onionskin in gimp-GAP is a good example of what should be a minimal requirement. that is managin backword, forward and both direction onion skin, with variable visiblity increase decrease. Color changes on onionskinning could be another useful option to increase visiblity of different frames, as generally the onionskinning is done at the sketching animation step (meaning mostly grey  or black &amp;amp; white drawing)&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Onion-skinning Onion skinning on wikipedia].&lt;br /&gt;
&lt;br /&gt;
==== Interactive ====&lt;br /&gt;
I have started using svg to develop interactive displays.  Having used several other svg tools currently on the market, I am interested in a more generic implementation that doesn't have animation effects get in the way of interactive controls.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Playback of Construction Steps ====&lt;br /&gt;
We, at [http://www.classapart.org Class Apart] ( www.classapart.org ), plan to use Inkscape in a manner similar to the classroom whitebord to create taught lectures and record the screen in an mpeg movie. The problem is that raster based formats would take about 50 MB for an hour of content, and does not go very well with our unstated goal of getting a whole course on a cd or all courses of a semester on one dvd. It would be great if we could store the construction steps of the svg keyed against time while recording. Then while playback we can patch the svg dom with the steps as needed, using something similar to smil script. How does one go about implementing this? We could find some members willing to implement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Using Bones ====&lt;br /&gt;
Anime Studio (and all 3D animation software) uses bones to animate with. In Anime Studio you draw up a basic skeleton and then attach the drawing to the bones This is done automatically based on the distance between the bone and the points on the curve. You can then move, rotate or scale the bones to animate the characters. You can store these values per frame, and have the computer interpolate them. This is a much faster way to work than to interpolate the points on the drawing directly. 3D software is probably a better reference here than Anime Studio. Usefull features include:&lt;br /&gt;
* Weighting of individual points to bones&lt;br /&gt;
* Combining tweening and frame by frame animation. To create replaceable mouths, rotating heads and more. &lt;br /&gt;
* Inverse kinematics, to speed up animation. With it you can grab the hand of a character and have the arm follow, rather than rotate the upper arm and lower arm separately to move the hand.&lt;br /&gt;
* Constraining. Making one bone follow another, limiting the movement of a bone and so on.&lt;br /&gt;
* Graph/Curve editor. A time based editor with b-splines representing the individual move, rotate and scale transformations. This gives the animator great control over the animation.&lt;br /&gt;
&lt;br /&gt;
==== Drawing Frames ====&lt;br /&gt;
Toon Boom, Plastic Animation Paper, TV Paint, Animo and traditional 2D animation on paper, all use individual drawings per frame. This gives you by far the best control when doing character animation, but at the cost of a lot of work. Features that are needed for traditional 2D animation to work well include:&lt;br /&gt;
* Onion skinning, preferably multiple levels back and forward and adjustable transparency.&lt;br /&gt;
* Dope sheet or timeline where you can move frames back and forth and repeat/hold frames.&lt;br /&gt;
* Cut-outs, where you move a whole or part of a frame to a different position for tracing on another frame.&lt;br /&gt;
* Some way to do rough sketching. Plastic Animation Paper is a good example here, though it's bit map based. With a tablet it gives you pencil like feel when drawing, giving darker lines the harder you press. This helps the animator &amp;quot;find the line&amp;quot;. It should be possible to do in vectors if using a central line that stores the pressure along each point (width and/or opacity), rather than an outline.&lt;br /&gt;
Combining tweening animation and frame by frame animation can in many cases give the best results.&lt;br /&gt;
&lt;br /&gt;
==== SMIL Animation (SVG Animation) vs SMIL Timing and Sync ====&lt;br /&gt;
What should the scope of Inkscape's animation capabilities be?&lt;br /&gt;
Many people are talking about mimicking other software's ability to do frame-by-frame animation and cartoon animation (particularly Flash's).&lt;br /&gt;
&lt;br /&gt;
SVG inherits from [http://www.w3.org/TR/2005/REC-SMIL2-20051213/animation.html SMIL's &amp;quot;Animation&amp;quot; module], with a [http://www.w3.org/TR/SVG11/animate.html#RelationshipToSMILAnimation few added animation controls] for animating a path, transform, or animating along a path.&lt;br /&gt;
&lt;br /&gt;
SMIL's animation module however does not provide for elements to begin or end, although we can fake this by having elements initially invisible, and animating their visibility to 'true' during their lifespan.&lt;br /&gt;
&lt;br /&gt;
While this may be feasible for a few long animations (ie, scenes), will it work for someone attempting to do traditional 2D (even Flash-style) animation? Said hypothetical user, while they may take some advantage of shape and motion tweens, will also likely need to replace the entire drawing when elements of the drawing (characters et al) change their logical structure (a motion requiring a line to appear or disappear). If this is to be supported, Inkscape will need some VERY fast code for switching visibility on-and-off during previewing, as it may be considering the visibility of hundreds if not thousands of graphic elements at a time, to over  a dozen times per timeline-second.&lt;br /&gt;
&lt;br /&gt;
Will other SVG viewers be able to handle that, too, or is it a special use of SVG that's not central to the aim of Inkscape?&lt;br /&gt;
&lt;br /&gt;
[http://www.w3.org/TR/2005/REC-SMIL2-20051213/smil-timing.html SMIL's &amp;quot;Timing and Synchronization&amp;quot; module] supports elements that allow for massive numbers of sequential images or animation elements, as well as defining animation attributes for begin/end/duration timelines. While it's not part of the SVG spec, would this be something Inkscape should look into implementing, or even proposing as an addition in a revision of the SVG spec?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== A new idea I think ====&lt;br /&gt;
I can't let go of an idea I'll try to explain as clearly as possible. How about having Inkscape calculate frames in a certain resolution (say 1 to 28 a second) and depth (number of frames displayed) and displaying a number of subsequent frames in over or underlay (transparancy is possible, but eats time) with fading outline colours to depict passing time.&lt;br /&gt;
&lt;br /&gt;
You set either the framerate (calculated) and begin and end frame in time, or select from begin and end instances of an animate. Alternatively, selecting paths from a list and showing all objects following that path. That way you could (if hardware allows) browse through your animation and look for hiccups in its motion.&lt;br /&gt;
&lt;br /&gt;
The same interface depicting frame number could be used to display page numbers in a multi page document. Would be nice in combination with an object manager similar to Coreldraws, enabling to select an object in either defs and see what happens to it in the animation, a path or all USE, XLINK etc.&lt;br /&gt;
&lt;br /&gt;
Using some shifting switch to go forward and backwards in time to follow your animation (or mouse gesture, but button press would be more useful). That way you have a direct interaction with the user and the document.&lt;br /&gt;
&lt;br /&gt;
::I strongly disagree with a model, that bases on frames. SVG is and should be only time-dependent. Start-duration-end. --[[User:VonHalenbach|SvH]] 16:41, 28 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
====Custom Keytime-based Timeline====&lt;br /&gt;
&lt;br /&gt;
Not based on frames at all, although the ability to select a frames-per-second setting allows for a grid that could be used to emulate frame-based animation.  I posted the concept along with a mockup on the [[SpecSVGAnimation]] page.  (&amp;quot;An example of the third...&amp;quot; to the end of that section)&lt;br /&gt;
--[[User:JadeMatrix|JadeMatrix]] 16:32, 6 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::In the animation, frames are of no use. You only edit the moving objects in time and when you are ready, you let it render into a number of frames or define, how much frames per second you need. But that is all after the file is saved as svg. Then the rendering can start. Construction and rendering are two different things, which we don't want to mix up in this process. --[[User:VonHalenbach|SvH]] 16:49, 28 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Responded over at [[SpecSVGAnimation]].--[[User:JadeMatrix|JadeMatrix]] 04:43, 4 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== SVG-animation THE object-oriented approach to animation ==&lt;br /&gt;
SVG-animation is compared to a framebased movieeditor like comparing turbo pascal with c++. These are two different worlds or paradigms. You have to relearn your language, because you have to forget to think in frames. Every object, Line, Rectangle, Path has his own time and space. You could move everything on one single path or give every object a different path to move on. Or you could change the size or its color over time. SVG-animation is designed to get animation on mobile devices. Inkscape should focus on those for animation. We certainly need a global-timeline, on which all animated things get a colored representation (a color bar for each object) of their movement in time. There are already programs to render animated svg into a number of png's or animated png. Inkscape must only be conformant to the svg-standard. --[[User:VonHalenbach|SvH]] 17:13, 28 February 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Announcement_to_Sodipodi&amp;diff=87980</id>
		<title>Announcement to Sodipodi</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Announcement_to_Sodipodi&amp;diff=87980"/>
		<updated>2012-12-28T20:18:41Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Link fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Announcement to Sodipodi Project of the Inkscape Project ===&lt;br /&gt;
&lt;br /&gt;
Nathan, mental, Ted and myself have decided to embark on our own direction &lt;br /&gt;
with the Sodipodi codebase.  We have attempted to do this as part of the &lt;br /&gt;
Sodipodi project, but we believe we need to try out a new project structure&lt;br /&gt;
to have the freedom to be able to explore some approaches radically different&lt;br /&gt;
from Sodipodi.&lt;br /&gt;
&lt;br /&gt;
We have recently reworked the Sodipodi codebase to build with a C++ compiler and &lt;br /&gt;
renamed it 'Inkscape'.  We have also set up a project on Sourceforge and established a new&lt;br /&gt;
website at http://www.inkscape.org.  &lt;br /&gt;
&lt;br /&gt;
Our goal is the creation of a fully SVG-compliant 2D graphics editor:&lt;br /&gt;
   * Full SVG (plus XML, CSS2) compliance&lt;br /&gt;
   * Core written in C++&lt;br /&gt;
   * Gtk-based user interface following the standards set out in the GNOME HIG&lt;br /&gt;
   * Emphasis on a small core plus modular extensions for features (a la Mozilla Firebird)&lt;br /&gt;
   * Open, community-oriented development processes that welcomes experimentation&lt;br /&gt;
   * Baseline is the Sodipodi-Hydra codebase&lt;br /&gt;
   * Removal of dead code&lt;br /&gt;
&lt;br /&gt;
We are aiming specifically for a general purpose XML/SVG graphics editor, and as a consequence will emphasize features that tend to fall outside the Sodipodi target userbase.   We would like to welcome anyone who'd like to&lt;br /&gt;
do some experimentation to participate with us.  Subscribe at&lt;br /&gt;
http://lists.sourceforge.net/lists/listinfo/inkscape-devel&lt;br /&gt;
&lt;br /&gt;
We also intend to seek use of third-party libraries in preference to custom code (where reasonable); specifically, we are exploring Cairo (formerly Xr), libcroco, Pango, the core Gtk widgets, but also other existing and widespread facilities.  The extension architecture is partly intended to minimize library dependencies in the core.&lt;br /&gt;
&lt;br /&gt;
-- Bryce&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki Attic]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpellCheckForTextNodes&amp;diff=87974</id>
		<title>SpellCheckForTextNodes</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpellCheckForTextNodes&amp;diff=87974"/>
		<updated>2012-12-28T20:18:10Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Link fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
It is often desireable to spell check text nodes in an inkscape document. &lt;br /&gt;
&lt;br /&gt;
The stable release of inkscape currently (0.41) does not support this. You will have to open the xml in a text editor and search and spell check the text nodes there.&lt;br /&gt;
&lt;br /&gt;
The code in CVS (0.42pre) has support for spell check in that it marks misspelled words in the &amp;quot;Text&amp;quot; tab in the &amp;quot;Text and Font&amp;quot; dialog if you compile with [[WITH_GTKSPELL]]. It will then use gtkspell to check the text nodes. gtkspell seems to pick its language according to [[LC_MESSAGES]].  Thus, if you have [[LC_MESSAGES]]=fr_FR.UTF-8 in your environment it will presumably use &amp;quot;fr_FR&amp;quot; for spelling.&lt;br /&gt;
&lt;br /&gt;
The desired solution is for inkscape to use the xml:lang attribute of the text node to do the spell checking against the proper language.&lt;br /&gt;
&lt;br /&gt;
= Implementation =&lt;br /&gt;
&lt;br /&gt;
There are two ways to implement this:&lt;br /&gt;
&lt;br /&gt;
# allow one language per text element&lt;br /&gt;
# allow any number of languages per text element in that you let the user select a region in the text and define a language for that.&lt;br /&gt;
&lt;br /&gt;
There are two parts to an implementation:&lt;br /&gt;
&lt;br /&gt;
# an user interface to be able to set the xml:lang attribute for a text node&lt;br /&gt;
# make sure gtkspell makes use of this information for spell checking&lt;br /&gt;
&lt;br /&gt;
== User interface changes ==&lt;br /&gt;
&lt;br /&gt;
=== One language per text element ===&lt;br /&gt;
If you allow only one language per text element the ui is fairly straight forward. The Text and Font dialog would contain an element to specify the language for the current text element.&lt;br /&gt;
&lt;br /&gt;
The global language setting (the default language if you like) could be set in the Page tab of the document preferences dialog.&lt;br /&gt;
&lt;br /&gt;
=== Multiple languages per text element ===&lt;br /&gt;
If you allow setting the language for any selection of text you could maybe use a combo box or a combo box entry in the text tool bar where you could specify the language for the current selection (or for the current text element if there is no selection). This would also show the current language setting of the selected text element or the selected region.&lt;br /&gt;
&lt;br /&gt;
The global setting would again be in the document preferences dialog&lt;br /&gt;
&lt;br /&gt;
=== Which languages in the combo box ===&lt;br /&gt;
The question is which languages should the user be able to choose from in the combo box? This question has an impact on the widget choice: for given small set of languages the combo box makes most sense. For a big number of languages the combo box entry might make more sense. There is basically two arguments:&lt;br /&gt;
&lt;br /&gt;
* The user should only be able to choose from the installed dictionaries. Anything else doesn't make sense as she cannot do spell check for other languages anyway.&lt;br /&gt;
* The user should be able to choose from any existing language because this is a requirement for inkscape to claim to be a conforming svg authoring tool! (see http://www.w3.org/TR/WAI-WEBCONTENT/#gl-abbreviated-and-foreign)&lt;br /&gt;
&lt;br /&gt;
The combo box entry is not nice as it might confuse novice users (too much choice, possibility of non-valid entry) however to be conforming we probably need a combo box entry. [http://www.gtk.org/plan/2.6/ Gtk+ 2.6] has an improved [[GtkComboBox]] which can handle trees, so the languages could be set up in a tree where the first level would be the first character of the language (this should allow us to handle the many languages case gracefully without having to resort to manual entry of e.g. de_CH).&lt;br /&gt;
&lt;br /&gt;
=== Inheritance ===&lt;br /&gt;
&lt;br /&gt;
A more tricky part would be to allow for some kind of inheritance where you specify a default language and have the possibility to override this in specific text nodes. I would  suggest to leave this feature out for now.&lt;br /&gt;
&lt;br /&gt;
== Code changes ==&lt;br /&gt;
The second point seems to be fairly straight forward. There are some comments and a todo on how to do this in src/dialogs/text-edit.cpp (search for [[WITH_GTKSPELL]]) where it says:&lt;br /&gt;
&lt;br /&gt;
            /* todo: Use computed xml:lang attribute of relevant element, if present, to specify the&lt;br /&gt;
               language (either as 2nd arg of gtkspell_new_attach, or with explicit&lt;br /&gt;
               gtkspell_set_language call in; see advanced.c example in gtkspell docs).&lt;br /&gt;
               sp_text_edit_dialog_read_selection looks like a suitable place. */&lt;br /&gt;
&lt;br /&gt;
However it might be more desireable to set the [[GtkTextTags]] in sp_text_edit_dialog_read_selection. According to pjrm this seems to have the desired effect.&lt;br /&gt;
&lt;br /&gt;
It seems that pjrm has basically hacked up a solution for the second part but has apparently hit a bug in gtkspell where it apparently ignores the language info from language [[GtkTextTag]]'s in preference to querying locale (see the second irc log for all the details).&lt;br /&gt;
&lt;br /&gt;
= irc log =&lt;br /&gt;
&lt;br /&gt;
Here is the log of the chat on irc:&lt;br /&gt;
&lt;br /&gt;
 (11:15:23) egli: but I was wondering if there was a way to spell check the text objects?&lt;br /&gt;
 (11:17:06) egli: or in case it was not built in I was wondering how complicated it would be to add&lt;br /&gt;
 (11:18:02) [[SkoZombie]]: If you go to &amp;quot;Text and Font&amp;quot; and click on &amp;quot;Text&amp;quot; then it'll hilite possibly mispelt words&lt;br /&gt;
 (11:18:15) [[SkoZombie]]: but i'm runnong the latest CVS version, 0.41 (latest stable) might be different&lt;br /&gt;
 (11:18:27) egli: hm, let me check&lt;br /&gt;
 (11:21:26) egli: you are talking about the &amp;quot;Text&amp;quot; tab in the &amp;quot;Text and Font&amp;quot; Dialog, right? It doesn't hilight any words despite the fact that they are in german :-/. Yes this is 0.41&lt;br /&gt;
 (11:23:16) egli: I presume the UI should have a possibility to specify the language of a text object.&lt;br /&gt;
 (11:23:36) egli: I guess I'll need to check out CVS&lt;br /&gt;
 (11:23:41) egli: thanks [[SkoZombie]]&lt;br /&gt;
 (11:23:43) [[SkoZombie]]: it must be a 0.42pre feature&lt;br /&gt;
 (11:23:59) [[SkoZombie]]: sorry i can't be of more help, but yes, a spell checker would be a nice addition :)&lt;br /&gt;
 (11:24:32) egli: I'll see if I find time to look into it&lt;br /&gt;
 (11:28:28) ^-: [pjrm] spell checking may depend on having gtkspell and possibly related libraries installed.&lt;br /&gt;
 (11:28:38) ^-: [pjrm] and aspell&lt;br /&gt;
 (11:28:57) ^-: [pjrm] Is there any message on standard error?&lt;br /&gt;
 (11:30:30) ^-: [pjrm] gtkspell seems to pick its language according to [[LC_MESSAGES]].  Thus, I have [[LC_MESSAGES]]=fr_FR.UTF-8 in my environment, and I get “gtkspell error: aspell: No word lists can be found for the language &amp;quot;fr_FR&amp;quot;.” on stderr when I open the Text &amp;amp; Font dialog box.&lt;br /&gt;
 (11:31:31) ^-: [pjrm] (Of course inkscape ought to tell gtkspell what language to use according to xml:lang attributes, but that isn't implemented.)&lt;br /&gt;
 (11:33:21) ^-: [pjrm] Doesn't seem to be in 0.41.&lt;br /&gt;
 (11:33:41) ^-: [cornelius] does it requires to have gtkspell-devel installed while compilling inkscape?&lt;br /&gt;
 (11:33:47) ^-: [cornelius] *require&lt;br /&gt;
 (11:35:38) ^-: [pjrm] Looks like it: dialogs/text-edit.cpp has &amp;quot;#ifdef [[WITH_GTKSPELL]]&amp;quot;&lt;br /&gt;
 (11:36:06) ^-: [cornelius] ah ok, so that's why I don't have got it enabled :)&lt;br /&gt;
 (11:36:25) ^-: [pjrm] configure.ac tests  if pkg-config --exists gtkspell-2.0&lt;br /&gt;
 (11:37:30) ^-: [cornelius] /me will more look and less ask later&lt;br /&gt;
 (11:38:11) egli: pjrm: hm, you're saying that the svg:text node has a xml:lang attribute?&lt;br /&gt;
 (11:38:44) ^-: [pjrm] yes&lt;br /&gt;
 (11:39:01) egli: hm I don't see it if I open the xml editor&lt;br /&gt;
 (11:39:15) egli: do I have to add it manually for the moment?&lt;br /&gt;
 (11:39:22) ^-: [pjrm] yes&lt;br /&gt;
 (11:39:30) egli: ah :-)&lt;br /&gt;
 (11:39:30) ^-: [pjrm] was just about to say: &amp;quot;has&amp;quot; meaning &amp;quot;allows&amp;quot;&lt;br /&gt;
 (11:40:06) egli: so the spell check feature would require a gui which actually add the xml:lang attr to the text node?&lt;br /&gt;
 (11:40:45) ^-: [pjrm] well, as i say, inkscape doesn't yet look at xml:lang attributes.&lt;br /&gt;
 (11:41:51) egli: ok, I understand that, but in order to have spell check for different languages this would have to be implemented, correct?&lt;br /&gt;
 (11:41:52) ^-: [pjrm] I'm just saying that xml:lang attributes (if present) would be a better choice of language for the spell checker than querying the environment for the current user's chosen locale&lt;br /&gt;
 (11:42:05) egli: ok, yes, I agree&lt;br /&gt;
 (11:42:24) ^-: [pjrm] re &amp;quot;required&amp;quot;, you could always restart inkscape with a different locale :)&lt;br /&gt;
 (11:43:33) egli: hehe, my birth announcement was bilingual&lt;br /&gt;
 (11:44:06) Uraeus [~cschalle@core.fluendo.com] entered the room.&lt;br /&gt;
 (11:44:08) ^-: [pjrm] the comment in src/dialogs/text-edit.cpp (search for [[WITH_GTKSPELL]]) gives more detail on how to implement&lt;br /&gt;
 (11:45:36) ^-: [pjrm] it doesn't mention how to code the gui for controlling xml:lang attributes.  That's independent.  I don't think it's too hard, apart from the desirability of distinguishing between &amp;quot;unspecified, just inherit&amp;quot; and providing explicit value.&lt;br /&gt;
 (11:49:37) egli: ah, pjrm, you're making me curious, I'm checking out the source from CVS now&lt;br /&gt;
 (11:53:19) ^-: [pjrm] :)&lt;br /&gt;
 (11:54:08) egli: inkscape is the module I want, right?&lt;br /&gt;
 (11:55:31) ^-: [pjrm] yes&lt;br /&gt;
 (11:55:37) egli: ok&lt;br /&gt;
 (11:55:50) ^-: [pjrm] see also gtkspell docs&lt;br /&gt;
 (11:56:49) ^-: [pjrm] hmm, i wonder if it would suffice to copy xml:lang attributes into pango markup in the text widget&lt;br /&gt;
 (11:58:03) ^-: * basic has left: Replaced by new connection&lt;br /&gt;
 (12:01:46) egli: pjrm: I found the relevant code snippet. I'll have to look at the gtkspell docs&lt;br /&gt;
 (12:02:47) ^-: [pjrm] there's a gtk_text_buffer_insert_with_tags function we could probably use instead of gtk_text_buffer_set_text in sp_text_edit_dialog_read_selection&lt;br /&gt;
 (12:06:58) egli: ok, I'm totally new at this. You're outlining two ways now: either pango markup in the text widget or the gtk_text_buffer_insert_with_tags function. Or do they amount to the same&lt;br /&gt;
 (12:10:07) ^-: [pjrm] apparently one can't directly set pango markup&lt;br /&gt;
 (12:10:47) ^-: [pjrm] the [[GtkTextWidget]] converts its [[GtkTextTag]] stuff to pango stuff&lt;br /&gt;
 (12:11:07) ^-: [pjrm] (according to my brief glance at text_widget_internals.txt.gz just now)&lt;br /&gt;
 (12:11:56) ringerc left the room (quit: &amp;quot;oops, someone let the magic smoke out.&amp;quot;).&lt;br /&gt;
 (12:13:16) egli: ok, I want to put this stuff into the wiki so I do not forget. Where do I put this best? just create a new page in the wiki and link to it from the newfeatureProposals?&lt;br /&gt;
 (12:13:52) ^-: [pjrm] There's a feature request item in the tracker: see one of the buttons on the left of www.inkscape.org&lt;br /&gt;
 (12:17:17) egli: oh, this tracker thingy. I'd rather put this discussion into the wiki. But I dunno how the inkscape devs work&lt;br /&gt;
 (12:26:25) [[SkoZombie]]: egli: they can always remove it from the wiki if they think its inappropriate for whatever reason&lt;br /&gt;
 (12:26:59) egli: ok, thanks [[SkoZombie]]&lt;br /&gt;
 (12:55:07) ^-: [pjrm] Setting [[GtkTextTags]] seems to have the right effect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Updates again from irc:&lt;br /&gt;
&lt;br /&gt;
 (14:18:43) egli: I don't quite understand what pjrm means when he says &amp;quot;Setting [[GtkTextTags]] seems to have the right effect&amp;quot;. Does that mean he actually hacked up a solution that uses the xml:lang attribute for spell checking?&lt;br /&gt;
 (15:14:42) ^-: [pjrm_home] egli: When I said that, all I'd implemented was applying a single tag over the entire buffer with a hard-coded language code &amp;quot;fr_FR&amp;quot;.  When I ran inkscape in a C locale and typed text with mixed english &amp;amp; french, the english words were underlined as &amp;quot;misspelled&amp;quot;.&lt;br /&gt;
 (15:16:16) ^-: [pjrm_home] I've since coded a little more.  However, even if I could finish the feature tonight, I don't know whether it would be applied for 0.42 or not.&lt;br /&gt;
 (15:17:34) ^-: [pjrm_home] It's a nice touch, but it has a reasonable chance of introducing bugs (e.g. mismanaging memory, possibly even causing crash bugs), so it might be considered that the risk outweighs the goodness of this feature.&lt;br /&gt;
 (15:17:53) ^-: [pjrm_home] Of course it could go into cvs as soon as 0.42 were released, though.&lt;br /&gt;
 (15:17:56) egli: pjrm_home: you mean you applied the tag over the text buffer&lt;br /&gt;
 (15:18:11) ^-: [pjrm_home] yes, over the [[GtkTextBuffer]].&lt;br /&gt;
 (15:18:14) egli: ok&lt;br /&gt;
 (15:18:43) egli: why would it introduce bugs, just because you add a tag to the text buffer&lt;br /&gt;
 (15:20:26) ^-: [pjrm_home] the feature involves creating data structures to represent the different languages of different regions.  Also creating [[GtkTextTag]]'s and doing stuff with [[GtkTextIter]] objects and [[GtkTextTagTable]] and a few other things.&lt;br /&gt;
 (15:20:44) ^-: [pjrm_home] re the value of the feature: we have no gui to control xml:lang tags&lt;br /&gt;
 (15:21:35) ^-: [pjrm_home] thus it has fairly small value, so there doesn't have to be much risk for the risk to outweigh the benefit.&lt;br /&gt;
 (15:22:51) ^-: [pjrm_home] bryce suggests that we try to release fairly soon, in time for a certain conference.&lt;br /&gt;
 (15:23:21) ^-: [pjrm_home] bbyak: your opinion?&lt;br /&gt;
 (15:23:33) ^-: [bbyak] on what?&lt;br /&gt;
 (15:24:13) ^-: [pjrm_home] whether it's worthwhile having the spell checker choose language by xml:lang tags if present, rather than solely on user's locale as the current cvs does.&lt;br /&gt;
 (15:24:27) ^-: [pjrm_home] i mean, whether worthwhile doing this for 0.42&lt;br /&gt;
 (15:24:56) ^-: [bbyak] i think it may be safe enough for 0.42, as this feature is not much used anyway&lt;br /&gt;
 (15:25:06) ^-: [bbyak] afaik&lt;br /&gt;
 (15:29:40) egli: well I wasn't thinking of applying different xml:langs to different regions. I was more thinking of just having one xml:lang per node. This would go a long way towards usable spell checking. I do not need different langs for different regions (at least not now)&lt;br /&gt;
 (15:30:31) egli: if we just do that would it still be unsafe (as you do not need [[GtkTextIter]] if you only have one language per node) &lt;br /&gt;
 (15:32:17) ^-: [pjrm_home] by regions, i just meant &amp;quot;regions of the text&amp;quot;, as marked by e.g. &amp;lt;tspan&amp;gt; elements (or whatever other element, the code wouldn't care what element had the xml:lang tags)&lt;br /&gt;
 (15:32:32) ^-: [pjrm_home] what do you mean by node?&lt;br /&gt;
 (15:33:08) ^-: [pjrm_home] anyway, i'll see what I can come up with in the next hour or so.&lt;br /&gt;
 (15:35:44) egli: I might not have the correct terminology. I call the xml:text element in XML a &amp;quot;node&amp;quot;. From what I understand this corresponds to the element that I get when I insert a text object in inkscape&lt;br /&gt;
 (15:38:46) ^-: [pjrm_home] egli: correct terminology, but a &amp;lt;text&amp;gt; element [i take it you mean svg:text, btw] can contain children like &amp;lt;tspan&amp;gt;, and the text that gets put in the dialog box could include many different tspan elements' text.&lt;br /&gt;
 (15:38:55) egli: so I would attach the xml:lang attribute to the svg:text element as opposed to the svg:tspan&lt;br /&gt;
 (15:40:03) egli: [yes I mean svg:text]&lt;br /&gt;
 (15:42:13) egli: so you would want to allow for each tspan to have a separate xml:lang attribute. This would of course complicate things. It would also make the UI to enter the xml:lang attribute much more complicated. I would suggest to ignore xml:lang attributes on the tspan elements and only worry about xml:lang attributes of the svg:text element&lt;br /&gt;
 (15:43:46) egli: From a users point of view I can live with a few &amp;quot;misspelled&amp;quot; words if I have a few english words in my german document.&lt;br /&gt;
 (15:45:00) egli: However it would take me a long way if I could say this text is in english and that text is in german and have them spell checked properly. Say I'd have a bilingual flyer with german text on the left and english text on the right&lt;br /&gt;
 (15:45:05) ^-: [pjrm_home] re ui, it should be the same complication as setting bold attribute.&lt;br /&gt;
 (15:46:52) egli: pjrm_home: from what I can tell you can only set the bold on the svg:text node (at least in 0.41)&lt;br /&gt;
 (15:48:13) ^-: [bbyak] not so in 0.42&lt;br /&gt;
 (15:48:26) ^-: [bbyak] there's full support for styling text fragments now&lt;br /&gt;
 (15:53:48) ^-: [pjrm_home] the documentation for gtk_text_buffer_get_iter_at_offset claims that its offset is number of characters, but that seems unlikely to me: i'd have expected number of bytes.  Anyone know?&lt;br /&gt;
 (16:57:51) ^-: [pjrm_home] oh dear.  My previous test indicating that language [[GtkTextTag]]'s are respected, was faulty: apparently gtkspell is buggy in how it queries locale variables: [[LC_ALL]]=C doesn't override [[LC_MESSAGES]] for gtkspell.&lt;br /&gt;
 (16:58:23) egli: uh, are you sure?&lt;br /&gt;
 (16:58:40) ^-: [pjrm_home] So i incorrectly concluded that gtkspell got french from the [[GtkTextTag]], whereas in fact it got it from my [[LC_MESSAGES]] environment variable (which I thought was being ignored given I had [[LC_ALL]]=C).&lt;br /&gt;
 (17:01:56) ^-: [pjrm_home] I'm quite disappointed about that: having implemented xml:lang querying fairly quickly, only to find that gtkspell is ignoring my work :-( .&lt;br /&gt;
 (17:02:07) ^-: [pjrm_home] I should submit a bug report against gtkspell.&lt;br /&gt;
 (17:02:41) ^-: [pjrm_home] it seems reasonable for it to get language info from language [[GtkTextTag]]'s in preference to querying locale.&lt;br /&gt;
 (17:03:53) egli: hm, I was looking forward to spell checking :-/&lt;br /&gt;
 (17:04:15) ^-: [pjrm_home] Especially when it seems that its locale querying is wrong anyway (or at least different from gettext's behaviour)&lt;br /&gt;
 (17:07:26) ^-: [pjrm_home] Hey, I can trigger a crash by setting [[LC_MESSAGES]] to fr_FR.UTF-8 (or whatever other non-english UTF-8 locale) while having unset [[LC_CTYPE]].&lt;br /&gt;
 (17:08:04) ^-: [pjrm_home] seems to be throwing an exception from Glib::locale_from_utf8&lt;br /&gt;
 (17:08:41) ^-: [pjrm_home] [[SkoZombie]]: I usually have [[LC_MESSAGES]] set to french to help me learn french.&lt;br /&gt;
 (17:15:09) ^-: [pjrm_home] oh well, bed time now.  Night all.&lt;br /&gt;
 (17:15:34) sciboy: Good night =)&lt;br /&gt;
 (17:16:02) ^-: * pjrm_home has left: Déconnecté&lt;br /&gt;
&lt;br /&gt;
irc log of user interface for language selection discussion:&lt;br /&gt;
&lt;br /&gt;
 (09:04:56) egli: pjrm: I was wondering what happened to your spell check work. Did you get up the next day and have a brilliant idea what the problem with [[GtkText]] and [[GtkSpell]] could be?&lt;br /&gt;
 (09:05:44) egli: as this code is probably not going into cvs right now it might make sense to post it somewhere for people (like me :-) to look at and play with it&lt;br /&gt;
 (09:11:05) pjrm: egli: I can send you the diffs, but it's only to apply language [[GtkTextTag]]'s to the text buffer.  gktspell apparently doesn't honour those.&lt;br /&gt;
 (09:11:52) egli: pjrm: yes, I'd love to have the diffs. That'll let me play with it and do some more experimenting&lt;br /&gt;
 (09:12:00) pjrm: It might still be a good patch to apply anyway just to help pango and maybe screen readers (?), but the benefit for gtkspell will have to wait until gtkspell honours them.&lt;br /&gt;
 (09:12:27) pjrm: i'll be home in half an hour.&lt;br /&gt;
 (09:12:30) egli: I just cannot believe that gtkspell would have such a blatant bug&lt;br /&gt;
 (09:12:31) pjrm left the room (Déconnecté).&lt;br /&gt;
 (09:12:38) egli: it's used everywhere&lt;br /&gt;
 (09:26:35) pjrm_home [pmoulder@bowman.csse.monash.edu.au/Gaim] entered the room.&lt;br /&gt;
 (09:28:55) pjrm_home: presumably they just didn't expect to find language tags.&lt;br /&gt;
 (09:29:23) pjrm_home: e.g. the buffer i'm typing in in gaim wouldn't have language tags.&lt;br /&gt;
 (09:30:56) egli: &amp;quot;they didn't expect to find language tags&amp;quot;? Hm, the people behind [[GtkSpell]] are pretty smart, but then again nobody is perfect&lt;br /&gt;
 (09:31:22) egli: have to look into this and do some debugging&lt;br /&gt;
 (09:36:24) pjrm_home: Re putting something like the current patch into CVS: I hope to be able to extend it a bit such that e.g. bold sections get preserved when the user clicks Apply.&lt;br /&gt;
 (09:37:05) egli: ah that would be good too. Then I could work from CVS&lt;br /&gt;
 (09:38:12) pjrm_home: In current CVS, if you have some bits of the text with a different style (bold or whatever), then we don't keep track of that in the text edit box in Text &amp;amp; Font dialog, so clicking Apply will in effect discard markup.&lt;br /&gt;
 (09:38:46) pjrm_home: (Not too much of a bug given that ppl rarely use that Text tab, but would still be nice to do right.)&lt;br /&gt;
 (09:38:59) egli: uhh, I didn't notice that when playing around with it&lt;br /&gt;
 (09:39:54) egli: then again if we accept this limitation we could also go for the limitation that language settings can only be set per [[GtkText]] and not individual regions&lt;br /&gt;
 (09:39:57) pjrm_home: More controversially, we could attempt to translate inkscape style into [[GtkTextTag]] style.  Not too controversial for just the odd bold/italic word or two, but more questionable for font size or font face.&lt;br /&gt;
 (09:40:13) egli: from a user pov I think this is perfectly fine&lt;br /&gt;
 (09:40:37) pjrm_home: yes, that would be a good start.&lt;br /&gt;
 (09:41:07) egli: it would go a long way usability wise as I think it would cover the most common usecases&lt;br /&gt;
 (09:41:14) pjrm_home: yep&lt;br /&gt;
 (09:41:44) egli: I can accept that it would claim the odd misspelled word if I have one english word in a german text&lt;br /&gt;
 (09:42:56) egli: also from the ui pov it would be much simpler: just specify one language in the &amp;quot;Text and Font&amp;quot; dialog as opposed to be able to specify a language for each region&lt;br /&gt;
 (09:43:51) egli: how would the ui for changing the language of a selection in the text look like anyway?&lt;br /&gt;
 (09:44:43) egli: I can only think of how it is done in OO.o 1.1.x. Pretty unintuitive somewhere under the character format settings&lt;br /&gt;
 (09:50:09) pjrm_home: I'm not a user interface person.  I was thinking of a text field and tickbox on the Text &amp;amp; Font dialog box, where the field greys out when the checkbox isn't ticked.  I think there's a combo widget that allows selecting from a menu as a way of filling in the text box.&lt;br /&gt;
 (09:50:35) pjrm_home: The checkbox is to distinguish between inherit or not.&lt;br /&gt;
 (09:51:24) pjrm_home: The text field is because the set of allowable languages is infinite.  (Also more convenient than selecting from a menu, once you know the format.)&lt;br /&gt;
 (09:52:29) egli: I was thinking of just allowing for a combo widget which lets you specify a language or leave it at the default which would say &amp;quot;use document default&amp;quot;&lt;br /&gt;
 (09:52:48) egli: would it make sense to be able to enter the language manually?&lt;br /&gt;
 (09:53:09) pjrm_home: what do you mean manually?&lt;br /&gt;
 (09:53:17) pjrm_home: do you mean type as distinct from select from menu?&lt;br /&gt;
 (09:53:22) egli: I think the user should only be able to enter the languages for which she has spelling dictionaries installed&lt;br /&gt;
 (09:53:37) pjrm_home: it isn't just for spelling on the local machine&lt;br /&gt;
 (09:53:55) pjrm_home: e.g. it facilitates google searches&lt;br /&gt;
 (09:54:03) egli: by manually I mean enter free form text in a text field as opposed to choose a selection from a combo widget&lt;br /&gt;
 (09:54:24) pjrm_home: certainly it should be possible to enter free-form text.&lt;br /&gt;
 (09:54:40) egli: hm I don't understand that&lt;br /&gt;
 (09:54:56) egli: I just want to say that this text is in german&lt;br /&gt;
 (09:54:57) pjrm_home: I thought combo widget meant something that allows either free-form text or selecting from a menu&lt;br /&gt;
 (09:55:14) pjrm_home: then enter either de or de_DE or de_CH or select from a menu&lt;br /&gt;
 (09:55:36) egli: ah, again my terminology, I mean a widget where you can only select from predefined vaules&lt;br /&gt;
 (09:56:08) pjrm_home: let's call that a popup menu.  (Can someone here who does more gtk stuff fill us in on the standard gtk terms?)&lt;br /&gt;
 (09:56:23) egli: ok, sorry for the mixup&lt;br /&gt;
 (09:56:49) egli: evolution let's you choose the language in the composer&lt;br /&gt;
 (09:57:27) egli: and it uses user understandeable terms such as English (British) etc&lt;br /&gt;
 (09:58:17) egli: but what was the story with google searches. Why would you want that in the Text and font dialog?&lt;br /&gt;
 (09:58:54) pjrm_home: egli: It's good to have a menu available so that one doesn't need to know the right format, but it's also good to have text entry to allow less common languages, and because it's more convenient than selecting from a huge menu.&lt;br /&gt;
 (10:00:26) egli: ok, I see, but presumably the user only wants to see the languages for which she has spelling dicts, doesn't she?&lt;br /&gt;
 (10:01:31) egli: grandma tilly might be confused by a text box where she has to enter de_CH :-)&lt;br /&gt;
 (10:01:34) pjrm_home: languages with spelling dicts available could be at the top of the list for convenience, though sometimes one wants to specify the language correctly even when one doesn't have the appropriate spelling dictionary installed at present on the current machine&lt;br /&gt;
 (10:01:42) pjrm_home: grandma tilly can use the menu&lt;br /&gt;
 (10:01:47) egli: hehe&lt;br /&gt;
 (10:02:42) egli: I guess you do want to specify languages for which you don't have a dict, but that seems like a rare case&lt;br /&gt;
 (10:03:01) egli: very rare&lt;br /&gt;
 (10:03:56) pjrm_home: providing that possibility is i think one of the criteria for accessibility standards...  I'll have a look.&lt;br /&gt;
 (10:05:03) egli: maybe a question for the GNOME HIG people?&lt;br /&gt;
 (10:06:51) pjrm_home: re google: google provides the ability to show pages/images for a specified language, e.g. searching for prix only in english pages to avoid the common french word meaning price.&lt;br /&gt;
 (10:07:12) pjrm_home: e.g. searching for SVG images containing the word Grand Prix.&lt;br /&gt;
 (10:10:10) egli: ah, now I get it. As you attach the xml:lang tag it can help with google searches. Yes. I thought you want to initiate google searches from the inkscape Text and Font dialog :-)&lt;br /&gt;
 (10:10:43) pjrm_home: re &amp;quot;rare case&amp;quot;, providing the ability to specify the correct natural language is actually a requirement for inkscape to claim to be a conforming svg authoring tool!&lt;br /&gt;
 (10:10:48) pjrm_home: http://www.w3.org/TR/WAI-WEBCONTENT/#gl-abbreviated-and-foreign&lt;br /&gt;
 (10:11:32) pjrm_home: i'll need to check that, but it's certainly a priority one item for creating accessible documents.&lt;br /&gt;
 (10:12:42) pjrm_home: http://www.w3.org/TR/SVG11/access.html explains some of the relationship between svg conformance and accessibility&lt;br /&gt;
 (10:14:55) egli: ok, you have a point there :-). It just seems against the &amp;quot;just works&amp;quot; principle. Too many options, too much confusion&lt;br /&gt;
 (10:15:38) pjrm_home: I think guideline 1.1 and 1.2 at http://www.w3.org/TR/ATAG10/#gl-access-support indicate that this feature is a priority one guideline for authoring tools.&lt;br /&gt;
 (10:15:53) egli: maybe a possibility would be to cover the grandma tilly case with a popup menu and let the specialists enter any xml:lang with the xml editor&lt;br /&gt;
 (10:17:58) egli: I'm not saying we shouldn't let the user enter any language. I'm just arguing for an easy and intuitive way for the common case. Basically make easy things easy and hard things possible&lt;br /&gt;
 (10:17:59) pjrm_home: grandma tilly might be a bit of an extreme case, for whom it would be beneficial to hide options.  I for one would appreciate the convenience of having a text field as an alternative.&lt;br /&gt;
 (10:18:21) pjrm_home: i think providing the menu is enough to make things easy &amp;amp; intuitive.&lt;br /&gt;
 (10:18:34) egli: ah, yes, but you're not grandma tilly&lt;br /&gt;
 (10:18:42) pjrm_home: granted&lt;br /&gt;
 (10:18:52) egli: I guess I could live with the menu :-)&lt;br /&gt;
 (10:19:26) egli: grandma tilly won't notice that she could also enter text there&lt;br /&gt;
 (10:20:44) pjrm_home: for grandma tilly, i believe it would be an improvement to suppress the text field.  But for Andy Artist I'm not so sure; i'm inclined to think Andy would like the text field to be present so long as it doesn't cost too much space on the dialog box.&lt;br /&gt;
 (10:21:08) pjrm_home: Having an Other... entry in the menu is another approach&lt;br /&gt;
 (10:21:22) pjrm_home: that approach doesn't provide the convenience benefit though&lt;br /&gt;
 (10:22:02) egli: andy the artist could edit the in xml editor&lt;br /&gt;
 (10:22:27) egli: let me see how gimp handles this&lt;br /&gt;
 (10:23:16) pjrm_home: most of gimp's output formats don't represent text as text, so the ability to specify language isn't very relevant other than for spell checking&lt;br /&gt;
 (10:24:13) egli: ok, fair enough&lt;br /&gt;
 (10:24:50) egli: looks like you cannot even do spell checking in gimp 2.2.4&lt;br /&gt;
 (10:26:32) egli: I'll try to talk to my A Illustrator friend to find out how it is done there.&lt;br /&gt;
 (10:34:28) pjrm_home: also valuable is guessing the language automatically.  http://odur.let.rug.nl/~vannoord/TextCat/competitors.html has a few tools for this.  Checking in available spell checkers is an alternative.&lt;br /&gt;
 (10:36:46) egli: hah, now we're getting fancy. I'd go for the easy stuff first, e.g. just use available spell checkers. language recognition can always be added :-)&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Coding_Style&amp;diff=87968</id>
		<title>Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Coding_Style&amp;diff=87968"/>
		<updated>2012-12-28T20:16:23Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Link fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Inkscape Coding Style Discussion ==&lt;br /&gt;
&lt;br /&gt;
The official code style documentation is on the main website.&lt;br /&gt;
&amp;quot;http://www.inkscape.org/doc/coding_style.php&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This page is for discussing and working out changes and improvements to that document.  When concensus&lt;br /&gt;
is reached, the document can be updated in SVN in the inkscape_web module.&lt;br /&gt;
&lt;br /&gt;
=== Editor support ===&lt;br /&gt;
&lt;br /&gt;
Place the following at the end of source files to help emacsen &amp;amp;amp; vim users follow some of our guidelines automatically:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  Local Variables:&lt;br /&gt;
  mode:c++&lt;br /&gt;
  c-file-style:&amp;quot;stroustrup&amp;quot;&lt;br /&gt;
  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))&lt;br /&gt;
  indent-tabs-mode:nil&lt;br /&gt;
  fill-column:99&lt;br /&gt;
  End:&lt;br /&gt;
*/&lt;br /&gt;
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you've added those lines, close the file and re-open it for it to take effect.&lt;br /&gt;
&lt;br /&gt;
Then (for emacsen users), one can re-indent a region with C-M-\.&lt;br /&gt;
&lt;br /&gt;
=== camelCase v. Underscores ===&lt;br /&gt;
* The new coding standards require non-static member functions to be in pseudoCamelCase, and every other type of function to use underscores.&lt;br /&gt;
* The current codebase has very few real C++ objects, half of these objects (or more) seem to use underscores for their member functions, the other half seem to use pseudoCamelCase.&lt;br /&gt;
** Over-all, 95% of Inkscape's codebase uses underscores in function names (of course, 90% of the code is still C).&lt;br /&gt;
*** It seems underscores are what Inkscape developers are already used to.&lt;br /&gt;
&lt;br /&gt;
* I prefer CamelCase for type names (classes), exceptions, namespaces, and the like.  But pseudoCamelCase in member functions clutters the visual space; making types, exceptions, and namescapes stand out much less.   And it makes the code much harder (for me) to read.&lt;br /&gt;
&lt;br /&gt;
** This is a personal preference. I find CamelCase to be more legible and more concise, as it takes less space and thus allows for longer identifiers. [[User:JonCruz|JonCruz]]&lt;br /&gt;
&lt;br /&gt;
** Why is there this inconsistency with regard to function names in the new coding standard?&lt;br /&gt;
*** (I.e., why a few functions pseudoCamelCase, and everything else underscores?)&lt;br /&gt;
** Could all functions just use underscores?  (Like the current codebase, like Gtkmm, like Linux, like the C &amp;amp; C++ standard libraries, and like almost every other project out there?)&lt;br /&gt;
** Is static vs. non-static member functions really that big of an issue to warrant a change to pseudoCamelCase?&lt;br /&gt;
&lt;br /&gt;
* Hey, we're not programming in Java (or Qt) here!  This is C++, where underscore reigns supreme.&lt;br /&gt;
&lt;br /&gt;
** A key point here is the misconception that camel case is not a C/C++ thing. Many platforms used camel case, including the Microsoft Windows API, Apple Macintosh API, etc. [[User:JonCruz|JonCruz]]&lt;br /&gt;
&lt;br /&gt;
** CamelCase is also prevalent in many other &amp;quot;non-pc&amp;quot; languages such as Smalltalk.&lt;br /&gt;
&lt;br /&gt;
=== Underscore as first character of identifiers ===&lt;br /&gt;
* Please consider that the C++ standard reserves _* identifiers [17.4.3.1.2]: &amp;quot;Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace&amp;quot;.&lt;br /&gt;
* You can use a '''leading underscore for class members''' (variables of a class), to clearly mark them as a class member. This may prevent bugs: for example a temporary variable called 'curve' would hide an SPShape's '_curve' member if it did not have that leading underscore.&lt;br /&gt;
&lt;br /&gt;
=== Tabs and Alignment ===&lt;br /&gt;
&lt;br /&gt;
Inkscape code uses 4 spaces for indentation and '''no tabs anywhere'''.&lt;br /&gt;
&lt;br /&gt;
That's clear (not to mention sensible). However, on the mail Coding Style page it says this:&lt;br /&gt;
&lt;br /&gt;
    We have decided to use 4 spaces as a tab for the project.&lt;br /&gt;
&lt;br /&gt;
Calling it a &amp;quot;tab&amp;quot; (rather than something like &amp;quot;indentation amount&amp;quot;) is a little confusing, I think. It made me think that source files should have tab characters, but that the editor should be set up to interpret them as being 4 columns (i.e., taking you to the next multiple of 4 columns).&lt;br /&gt;
&lt;br /&gt;
=== Whitespace: Space between sigil and following token? ===&lt;br /&gt;
&lt;br /&gt;
I.e. do we write ‘&amp;lt;code&amp;gt;int&amp;amp;nbsp;*p&amp;lt;/code&amp;gt;’ or ‘&amp;lt;code&amp;gt;int&amp;amp;nbsp;*&amp;amp;nbsp;p&amp;lt;/code&amp;gt;’; ‘&amp;lt;code&amp;gt;int&amp;amp;nbsp;*f()&amp;lt;/code&amp;gt;’ or ‘&amp;lt;code&amp;gt;int&amp;amp;nbsp;*&amp;amp;nbsp;f()&amp;lt;/code&amp;gt;’; ‘&amp;lt;code&amp;gt;int&amp;amp;nbsp;*const&amp;amp;nbsp;p&amp;lt;/code&amp;gt;’ or ‘&amp;lt;code&amp;gt;int&amp;amp;nbsp;*&amp;amp;nbsp;const&amp;amp;nbsp;p&amp;lt;/code&amp;gt;’ ?&lt;br /&gt;
&lt;br /&gt;
Arguments in favour of no space:&lt;br /&gt;
&lt;br /&gt;
* Promotes better understanding of C/C++'s parsing rules for cases like ‘&amp;lt;code&amp;gt;int *a, b&amp;lt;/code&amp;gt;’: the sigil applies only to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; in that example, not to &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;.&lt;br /&gt;
** This argument is much less applicable to the case that the following identifier names a function: it is very rare for function prototypes to “syntactically share return types” that way; this rarity reduces the importance of knowing the meaning of ‘&amp;lt;code&amp;gt;int&amp;amp;nbsp;*&amp;amp;nbsp;a(),&amp;amp;nbsp;b()&amp;lt;/code&amp;gt;’.&lt;br /&gt;
* Less horizontal whitespace usage (reducing the chance of overflowing the available width or requiring a continuation line).&lt;br /&gt;
** However, note that overflow is rare for variable declarations; for function headers, continuation doesn't hinder understanding of the header in question, so the argument rather becomes one of taking up more lines, reducing how many statements are visible in one screenful.&lt;br /&gt;
* For the case of declarations inside function bodies (and other cases as well, to a lesser extent), ‘&amp;lt;code&amp;gt;Foo&amp;amp;nbsp;*&amp;amp;nbsp;foo&amp;lt;/code&amp;gt;’ is more easily mistaken for executable code (as distinct from a declaration) than ‘&amp;lt;code&amp;gt;Foo&amp;amp;nbsp;*foo&amp;lt;/code&amp;gt;’ is.&lt;br /&gt;
* Less typing.  (Minimal importance.)&lt;br /&gt;
&lt;br /&gt;
Arguments in favour of space:&lt;br /&gt;
&lt;br /&gt;
* For the cases where the following token is an identifier, improves the legibility of the identifier.  For cases where the following token is a cv-qualifier (‘const’, ‘volatile’), the space improves the legibility of the sigil.&lt;br /&gt;
&lt;br /&gt;
An additional issue is the relative prevalence of the approaches in existing code: this relates to either consistency or the cost of changing code (to the extent that changing is done manually).&lt;br /&gt;
&lt;br /&gt;
Before doing any counting, the impression of one developer [writing this] is that no-space is much more common, but with-space is far from unheard-of.  (It's valuable to get an informal impression as a defense against any deficiencies in simplistic automated counting: e.g. we ought to give more weight to code that's often looked at / changed than code that's less often looked at or changed, and should give more weight to code considered Inkscape code than imported code.)&lt;br /&gt;
&lt;br /&gt;
The results of a simplistic automated count confirm that: there are 28037 lines with the no-space style to 7204 lines with the with-space style, a ratio of about 3.9:1; or 1899 vs 746 (2.5:1) in .h files.  For the following-token-is-function-identifier case, the gap is narrower, at 1350 vs 792 (1.7:1).&lt;br /&gt;
&lt;br /&gt;
The simplistic automated count in question is:&lt;br /&gt;
&lt;br /&gt;
:find \( -name '*.h' -o -name '*.cpp' \) -type f -print0 |&lt;br /&gt;
::xargs -0 cat |tr '\t' ' ' |&lt;br /&gt;
::egrep -c '(void|int|unsigned|char|short|float|double|\&amp;lt;[A-Z][a-zA-Z0-9_]*)(( *const)? *[*&amp;amp;])+[a-zA-Z_]'&lt;br /&gt;
&lt;br /&gt;
for no-space, and inserting ‘ +’ before the final ‘[a-zA-Z_]’ for with-space.  (‘volatile’ is not used in Inkscape source code at the time of writing.)  For the following-token-is-function-identifier case, the final ‘[a-zA-Z_]’ was extended to ‘[a-zA-Z_][a-zA-Z0-9_]*&amp;amp;nbsp;*\(’.  Note that this means that both the no-space and with-space counts exclude Gnu-style function definition heads (where the return type is on a separate line).&lt;br /&gt;
&lt;br /&gt;
=== Brace Placement ===&lt;br /&gt;
&lt;br /&gt;
Arguments against &amp;quot;disco&amp;quot;/compact braces:&lt;br /&gt;
&lt;br /&gt;
* Make it hard to match braces visually.&lt;br /&gt;
&lt;br /&gt;
:Partial counter-argument: emacsen &amp;amp; vim each have brace-locating commands.  (Emacsen: C-M-u, C-M-n, C-M-p, C-M-d (up/next/prev/down); vim: `[ {', `] }'.)&lt;br /&gt;
&lt;br /&gt;
* The brace closes a block, not an if &amp;quot;statement&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:However, the block is intimately related to the if/for/while in ways that a normal block is not.&lt;br /&gt;
&lt;br /&gt;
=== Functions vs methods, i.e. member vs non-member functions ===&lt;br /&gt;
&lt;br /&gt;
* Information-hiding principle suggests that if a function doesn't need access to private variables then it's better not to make it a member function.&lt;br /&gt;
&lt;br /&gt;
** In more detail: when one wants to change some detain about a private variable, then one must look through everything that has access to that variable.  This is easier if there's less code that has access to the variable, e.g. if one uses non-member functions in preference to member-functions.&lt;br /&gt;
&lt;br /&gt;
* Virtual functions must of course be member functions.&lt;br /&gt;
&lt;br /&gt;
* Trivial getter/setter functions seem most natural as member functions.  (This is mostly a matter of style or tradition rather than technical reasons.)&lt;br /&gt;
** &amp;quot;barType getBar() const { return _bar; }&amp;quot; / &amp;quot;void setBar(barType x) { _bar = x; }&amp;quot; are trivial.  It's not clear how much else is to be considered trivial.&lt;br /&gt;
&lt;br /&gt;
* For things needing access to private variables, the requirement of the `friend' declaration for non-member functions is a cost: extra clutter in the class definition, requires updating for changes in the signature; and many of the arguments for non-member functions disappear.&lt;br /&gt;
&lt;br /&gt;
* Member functions must be declared in the class definition, which tends to require more recompilation because one can't use a separate header file.&lt;br /&gt;
&lt;br /&gt;
** Sometimes one can break the class into smaller, simpler classes if there are lots of member functions.&lt;br /&gt;
&lt;br /&gt;
* A related issue is that it's harder (impossible) to write private specializations (same name but subclass arguments): any specialization must be declared in the class definition too, so it isn't private other than through comments.&lt;br /&gt;
&lt;br /&gt;
* The shorter names typical of member functions are harder to search for.&lt;br /&gt;
&lt;br /&gt;
** (Counter-argument: this is a matter of custom, there's no technical reason why one can't use long names for member functions, or even short names for non-member functions.)&lt;br /&gt;
&lt;br /&gt;
** Someone has claimed that some tools do relatively well at finding the right version of a given name.  Can someone give examples of such a tool (and some comment as to how widely used that tool is or can be by our developers) ?&lt;br /&gt;
&lt;br /&gt;
* Pointers to member functions aren't as easily used as pointers to non-member functions.  (&amp;quot;unwieldy&amp;quot;, &amp;quot;heavy-weight&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
* Member functions can't be given static linkage.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;tt&amp;gt;static&amp;lt;/tt&amp;gt; vs anonymous namespaces for file-local functions/objects ===&lt;br /&gt;
&lt;br /&gt;
The current C++ standard marks this type of `&amp;lt;tt&amp;gt;static&amp;lt;/tt&amp;gt;' as deprecated, meaning &amp;quot;Normative for the current edition of the Standard, but not guaranteed to be part of the Standard in future revisions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
(Reference: Final Draft of the C++ standard, Annex D &amp;quot;Compatibility features&amp;quot;; and §7.3.1.1 &amp;quot;Unnamed namespaces&amp;quot;, ¶2.)&lt;br /&gt;
&lt;br /&gt;
However, g++ up to 3.4 (and possibly later) don't give anonymous-namespace names the same advantages given to static names:&lt;br /&gt;
&lt;br /&gt;
* Warning if the name isn't referenced (and hence unused).&lt;br /&gt;
* Optimizations when the function/object can't be used from other object files.&lt;br /&gt;
* Static linkage (relevant to analysis using nm).&lt;br /&gt;
&lt;br /&gt;
In addition, having a &amp;lt;tt&amp;gt;static&amp;lt;/tt&amp;gt; tag in the declaration itself makes it easier for the programmer to see that the name isn't referenced outside of this translation unit.&lt;br /&gt;
&lt;br /&gt;
Consequently, it is recommended that we use &amp;lt;tt&amp;gt;static&amp;lt;/tt&amp;gt; for names not referenced from other translation units.&lt;br /&gt;
&lt;br /&gt;
If and when we encounter a compiler that rejects `static' for objects in namespace scope, we can easily replace `&amp;lt;tt&amp;gt;static&amp;lt;/tt&amp;gt;' with `&amp;lt;tt&amp;gt;namespace {&amp;lt;/tt&amp;gt; ... &amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;'.&lt;br /&gt;
&lt;br /&gt;
=== What to put in what header file ===&lt;br /&gt;
&lt;br /&gt;
Reasons for change:&lt;br /&gt;
* Reduce compilation times (most important)&lt;br /&gt;
* Fix the mess of NR::Point, NR::Matrix etc. header files.  Less confusion as to what needs to be #included, or where to look for the definition of something (especially in the cases where tags-like programs don't help, e.g. if looking for something helpful for a known task rather than having a known name).&lt;br /&gt;
&lt;br /&gt;
What won't change:&lt;br /&gt;
* foo.h will still provide the same things it always has (unless you count things &amp;quot;accidentally&amp;quot; provided, which we hope to become less).  It's just that some content may be physically moved to a file that foo.h #includes.&lt;br /&gt;
&lt;br /&gt;
The issues are:&lt;br /&gt;
&lt;br /&gt;
* Ease for callers (what file/s to #include).  This is largely taken care of by having files that #include other header files, and in particular having the foo.h file as at present.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;I need to change the blah declaration/definition; what file do I edit?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Information we want ppl to be aware of.&lt;br /&gt;
&lt;br /&gt;
Definitions are handled by tags/idutils/global etc (though all of these tools have limitations in their ability to find the _right_ definition).&lt;br /&gt;
Declarations that are separate from the definition: [non-member] function declarations are the main case.  member functions (obviously kept in same physical file as their class definition); non-member functions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here are some types of things to be found in header files.  Whatever rules you hypothesize, check that the rules cover each of these cases.&lt;br /&gt;
&lt;br /&gt;
* class foo definition&lt;br /&gt;
* &amp;quot;class foo;&amp;quot; forward declarations&lt;br /&gt;
* struct foo_class (i.e. GObject &amp;quot;class&amp;quot;/vtable type)&lt;br /&gt;
* IS_FOO, FOO cast etc. macros&lt;br /&gt;
* ancilliary types (e.g. struct StopOnTrue for marshalling)&lt;br /&gt;
* enums&lt;br /&gt;
* relevant instantiations (traits etc.)&lt;br /&gt;
* foo_do_blah (declaration of function defined in .cpp file)&lt;br /&gt;
* inline function definitions&lt;br /&gt;
* should declaration &amp;amp; definition of inline functions go in different files (there are pros &amp;amp; cons)&lt;br /&gt;
* other constants, including #defines&lt;br /&gt;
* other macros.  Where is the line between &amp;quot;other macro&amp;quot; and &amp;quot;inline function&amp;quot; and IS_FOO macros?&lt;br /&gt;
&lt;br /&gt;
The physical placement of the IS_FOO etc. macros (as distinct from what header files &amp;quot;provide&amp;quot; them) isn't important: we never need to edit them, and they're relatively easy to find by either primitive tags-like programs or by grep.&lt;br /&gt;
* This unimportance-of-physical-location is reflected in the inconsistency of current practice, sometimes placing them with foo.h and sometimes in blah-forward.h.&lt;br /&gt;
* Exception to unimportance-of-physical-location: IS_FOO etc. should not be physically in the same header file as something that's &amp;quot;expensive&amp;quot; and unneeded by one or more translation units that need IS_FOO etc.  (&amp;quot;Expensive&amp;quot; in same sense as `amount' defined below in `Reducing compile times'.)&lt;br /&gt;
&lt;br /&gt;
The main thing for IS_FOO etc. is what header file(s) provide the macro.  Thankfully, this is easy in the common case: usually any function that needs the definition of IS_FOO also needs lots of other things relevant to the foo type, so would simply #include foo.h.&lt;br /&gt;
&lt;br /&gt;
Relevant properties of function declarations:&lt;br /&gt;
&lt;br /&gt;
* It is common to add or remove functions, or change the arguments.&lt;br /&gt;
&lt;br /&gt;
* Typically not found by tags-like programs.  E.g. neither `tags' nor `TAGS' files store the location of declarations (other than the definition).&lt;br /&gt;
&lt;br /&gt;
* Programmers want to know what functions (including methods, macros, inline things) are available (or rather &amp;quot;is there something that does blah&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
** Probably doxygen or the like is the best task for this, though we'd need to make it convenient to use.&lt;br /&gt;
&lt;br /&gt;
* Needed in advance of function definitions (whether in .cpp file or inline function definitions).  Not needed in advance by macro definitions per se (but needed in advance of function definitions where the macro is expanded).&lt;br /&gt;
&lt;br /&gt;
Inline function definitions:&lt;br /&gt;
&lt;br /&gt;
* Relatively expensive in compile time for translation units that don't use that inline function definition.&lt;br /&gt;
* Must come after (in the translation unit) all referenced declarations.  Sometimes this requires that it be outside of the class definition or in a separate file from related declarations.  (E.g. if foo.h and bar.h each provide an inline function definition that requires declarations provided by the other file.)&lt;br /&gt;
&lt;br /&gt;
Operator overloading:&lt;br /&gt;
&lt;br /&gt;
* Can be unclear whether to associate with the type of the left operand or the type of the right operand.&lt;br /&gt;
* We can simplify things for users of the function by having both left.h and right.h provide it (i.e. have both left.h and right.h #include it).  This suggests that it should be physically neither in left.h nor right.h (unless it's OK for left.h to pull in all of right.h or vice versa).&lt;br /&gt;
&lt;br /&gt;
Reducing compile times&lt;br /&gt;
&lt;br /&gt;
* For each translation unit U, reduce the amount of material that gets included by U and isn't needed by U.&lt;br /&gt;
** &amp;quot;Amount&amp;quot; is measured by cost: how often that material changes (causing a recompile), and how expensive it is to compile (e.g. inline function definitions).&lt;br /&gt;
&lt;br /&gt;
* In what circumstances does a translation unit include things that it doesn't need?&lt;br /&gt;
** Inline function definitions.&lt;br /&gt;
** Needs a function declaration but doesn't need the type definition.&lt;br /&gt;
*** A special [non-] case of this is needing a member function declaration.  Member function declarations can't be separated from their class definition.  See also `methods vs functions' above.&lt;br /&gt;
** Suppose that struct Foo has a `Bar _bar' member.  The translation unit may need to create Foo objects (and thus need the type definition of Bar to know its size), but not need to access _bar (so not needing anything from bar.h other than the type definition of Bar).&lt;br /&gt;
*** This is very common.  Common examples of Bar: SPShape, NR::Point/NR::Matrix.&lt;br /&gt;
** Needs some function declarations but not others.&lt;br /&gt;
** Needs some type forward declarations but not others.&lt;br /&gt;
** Comments are never needed for compilation.&lt;br /&gt;
** Definition of a marshaller is needed only by emitters.  However, it's difficult to separate the marshaller from the signal, and difficult to separate the signal from the definition of the containing type (SPDesktop, SPItem).&lt;br /&gt;
** Including the definition of a type when its declaration would suffice.&lt;br /&gt;
** Copy&amp;amp;paste of #include lines.&lt;br /&gt;
&lt;br /&gt;
* Ways of reducing the need for type definitions:&lt;br /&gt;
** Store just a pointer instead of the whole type.&lt;br /&gt;
** Provide a wrapper function (not inlined) for `new Foo'.&lt;br /&gt;
&lt;br /&gt;
==Preprocessor MACROS==&lt;br /&gt;
&lt;br /&gt;
Capitalizing or not?&lt;br /&gt;
&lt;br /&gt;
      # define IS_FINITE(_a) (std::isfinite(_a))&lt;br /&gt;
&lt;br /&gt;
===Arguments pro capitalizing===&lt;br /&gt;
* Macros don't have a namespace and can therefore easily clash with other names. This happened in the isFinite case. where we had across several files:&lt;br /&gt;
      #define isFinite(x) ...&lt;br /&gt;
      ...&lt;br /&gt;
      class Point {&lt;br /&gt;
            bool isFinite(int x)&lt;br /&gt;
      }&lt;br /&gt;
This obviously nameclashed, where a capitalized IS_FINITE would have never clashes as (I guess) nobody uses capitalized function names. Note that an inline function instead of macro would also have worked.&lt;br /&gt;
* Some macros can expand strangely (don't have good example now), so it is good that the user knows it does so.&lt;br /&gt;
* Note that it is often also possible to define an inline function instead of a macro!!! (which is a better solution?)&lt;br /&gt;
&lt;br /&gt;
===Arguments against capitalizing===&lt;br /&gt;
&lt;br /&gt;
== User Interface Coding Rules ==&lt;br /&gt;
&lt;br /&gt;
=== Complex User Interface Items and Containers (Dialogs, Panels, Frames...) ===&lt;br /&gt;
&lt;br /&gt;
* Each one have to be developped as a C++ class&lt;br /&gt;
* Declare all UI widgets that are used in the container as protected initialisation-time allocated members&lt;br /&gt;
 protected:&lt;br /&gt;
    Gtk::Label _anchorLabel;&lt;br /&gt;
* Initialize all widgets in the member initialization list of the container constructor&lt;br /&gt;
 MyDialog::MyDialog():&lt;br /&gt;
    _anchorLabel(_(&amp;quot;Look at this label&amp;quot;))&lt;br /&gt;
 {&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
=== Dialogs ===&lt;br /&gt;
&lt;br /&gt;
* Dialogs source codes have to be localized in src/ui/dialog/&lt;br /&gt;
* A dialog belongs to the namespace Inkscape::UI::Dialog&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
&lt;br /&gt;
* Widget source codes have to be localized in src/ui/widget/&lt;br /&gt;
* A widget belongs to the namespace Inkscape::UI::Widget&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Discussion]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=PDF_Bugs&amp;diff=87962</id>
		<title>PDF Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=PDF_Bugs&amp;diff=87962"/>
		<updated>2012-12-28T20:14:41Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Link fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bugs ==&lt;br /&gt;
&lt;br /&gt;
* Bug#1027699 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1027699&amp;amp;group_id=93438&amp;amp;atid=604306 imported EPS files are scaled to 80%]&lt;br /&gt;
* Bug#1051080 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1051080&amp;amp;group_id=93438&amp;amp;atid=604306 ill2svg missing text]&lt;br /&gt;
* Bug#1114254 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1114254&amp;amp;group_id=93438&amp;amp;atid=604306 cannot open/import eps files]&lt;br /&gt;
* Bug#1170322 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1170322&amp;amp;group_id=93438&amp;amp;atid=604306 Clippath does not work in PS export]&lt;br /&gt;
* Bug#1180226 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1180226&amp;amp;group_id=93438&amp;amp;atid=604306 Can't open .eps file.]&lt;br /&gt;
* Bug#1208874 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1208874&amp;amp;group_id=93438&amp;amp;atid=604306 pattern fills do not export to ps or eps]&lt;br /&gt;
* Bug#1222689 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1222689&amp;amp;group_id=93438&amp;amp;atid=604306 EPS export of non-ASCII text]&lt;br /&gt;
* Bug#1234678 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1234678&amp;amp;group_id=93438&amp;amp;atid=604306 PNG transparency lost after EPS-&amp;gt;PDF export]&lt;br /&gt;
* Bug#1237867 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1237867&amp;amp;group_id=93438&amp;amp;atid=604306 EPS export options issues]&lt;br /&gt;
* Bug#1239993 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1239993&amp;amp;group_id=93438&amp;amp;atid=604306 Importing problems in 0.42 pre2 on OSX]&lt;br /&gt;
* Bug#1246558 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1246558&amp;amp;group_id=93438&amp;amp;atid=604306 windows -export-text-to-path do not work]&lt;br /&gt;
* Bug#1247093 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1247093&amp;amp;group_id=93438&amp;amp;atid=604306 Export to PDF does not preserve the document size]&lt;br /&gt;
* Bug#1267081 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1267081&amp;amp;group_id=93438&amp;amp;atid=604306 imported images: no relative paths/wrong absolute path]&lt;br /&gt;
* Bug#1273753 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1273753&amp;amp;group_id=93438&amp;amp;atid=604306 Exporting EPS creates a too-wide picture]&lt;br /&gt;
* Bug#1275197 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1275197&amp;amp;group_id=93438&amp;amp;atid=604306 Hyphen too long in Postscript output]&lt;br /&gt;
* Bug#1302072 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1302072&amp;amp;group_id=93438&amp;amp;atid=604306 ill2svg imports incorrectly]&lt;br /&gt;
* Bug#1305178 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1305178&amp;amp;group_id=93438&amp;amp;atid=604306 export to eps problem with symbol and xrefs]&lt;br /&gt;
* Bug#1311015 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1311015&amp;amp;group_id=93438&amp;amp;atid=604306 Win32: stroke dashes disappear in eps files]&lt;br /&gt;
* Bug#1333035 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1333035&amp;amp;group_id=93438&amp;amp;atid=604306 EPS import: text items are corrupted]&lt;br /&gt;
* Bug#1373339 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1373339&amp;amp;group_id=93438&amp;amp;atid=604306 PS/EPS/PDF export wrong font name]&lt;br /&gt;
* Bug#1378123 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1378123&amp;amp;group_id=93438&amp;amp;atid=604306 EPS export: [[BoundingBox]] crops image (rounding issue?)]&lt;br /&gt;
&lt;br /&gt;
== RFEs ==&lt;br /&gt;
&lt;br /&gt;
* Rfe#864260 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=864260&amp;amp;group_id=93438&amp;amp;atid=604309 IMPORT/EXPORT: PDF]&lt;br /&gt;
* Rfe#957916 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=957916&amp;amp;group_id=93438&amp;amp;atid=604309 Import/Export Encapsulated [[PostScript]] format]&lt;br /&gt;
* Rfe#989220 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=989220&amp;amp;group_id=93438&amp;amp;atid=604309 How can i export to illustrator? Copy/paste inkscape/flashmx]&lt;br /&gt;
* Rfe#1055693 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1055693&amp;amp;group_id=93438&amp;amp;atid=604309 import, PS files drawing text using pstoedit]&lt;br /&gt;
* Rfe#1197549 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1197549&amp;amp;group_id=93438&amp;amp;atid=604309 Native PDF import for Inkscape, using Poppler]&lt;br /&gt;
* Rfe#1280894 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1280894&amp;amp;group_id=93438&amp;amp;atid=604309 Image Transparency Portion in PS/EPS]&lt;br /&gt;
* Rfe#1304728 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1304728&amp;amp;group_id=93438&amp;amp;atid=604309 More import and export formats needed (.eps,.fh9,.ai)]&lt;br /&gt;
* Rfe#1341467 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1341467&amp;amp;group_id=93438&amp;amp;atid=604309 Print vector graphics on pdf &amp;quot;software&amp;quot; printer]&lt;br /&gt;
* Rfe#1373349 -- [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1373349&amp;amp;group_id=93438&amp;amp;atid=604309 Option: Print to PDF]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Needs Work]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=NewTools&amp;diff=87956</id>
		<title>NewTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=NewTools&amp;diff=87956"/>
		<updated>2012-12-28T20:12:35Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Link fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=880120&amp;amp;group_id=93438&amp;amp;atid=604309 Cloud Tool] ===&lt;br /&gt;
&lt;br /&gt;
Any selected object or group of objects will have generated a &amp;quot;cloud&amp;quot; or&lt;br /&gt;
outline. Variables could include but not be limited to: distance between&lt;br /&gt;
original object and cloud, number of clouds, distance between original object&lt;br /&gt;
and each succeeding cloud, and so on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=880099&amp;amp;group_id=93438&amp;amp;atid=604309 Razor Tool] ===&lt;br /&gt;
&lt;br /&gt;
Any selected object or group of objects could be split along the line drawn by&lt;br /&gt;
the &amp;quot;razor&amp;quot; tool. This is essentially a combo of adding a node, breaking a line&lt;br /&gt;
at the node, inserting a line, and joining the resultant nodes. &lt;br /&gt;
Almost the same as scissor tool, but indeed very handy!&lt;br /&gt;
&lt;br /&gt;
=== [http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=880110&amp;amp;group_id=93438&amp;amp;atid=604309 Add/Subtract Nodes + Scissor Tool] ===&lt;br /&gt;
&lt;br /&gt;
==== ADD NODES ====&lt;br /&gt;
&lt;br /&gt;
Similar to most vector editing apps, we need a tool to&lt;br /&gt;
be able to click on a shape, and then add a new node&lt;br /&gt;
wherever the ADD tool clicks on a segment. This add&lt;br /&gt;
tool should be the node edit tool with a plus icon&lt;br /&gt;
located at the bottom right corner of the icon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SUBTRACT NODES ====&lt;br /&gt;
&lt;br /&gt;
Also we need a tool so that when one clicks on a point,&lt;br /&gt;
then that point is removed. I guess we already have it&lt;br /&gt;
so when a point is selected, one can hit the delete key&lt;br /&gt;
and that point is deleted and the shape remains. I&lt;br /&gt;
don't know how intuitive this is, and think there&lt;br /&gt;
should also be the node edit tool with a small minus&lt;br /&gt;
symbol on the icon that will do the same thing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== SCISSOR TOOL ====&lt;br /&gt;
&lt;br /&gt;
Related to the ADD/SUBTRACT Nodes is to select the&lt;br /&gt;
scissor tool from the node edit toolbar or primary&lt;br /&gt;
toolbar and be able to click anywhere on a shape's&lt;br /&gt;
segment and break the segment into two pieces where&lt;br /&gt;
this tool clicks on the line.&lt;br /&gt;
&lt;br /&gt;
==== SCALE, ROTATE TRANSFORMATION TOOL FOR MULTIPLE OBJECT PATH NODES OR POINTS ====&lt;br /&gt;
&lt;br /&gt;
Currently If you are in path node editing mode and selected more than one node, you cannot rotate or scale them (Only moving). &lt;br /&gt;
In vector world not everything done by simple moves. If you look at other tools you would see that this is a well implemented feature&lt;br /&gt;
in professional tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== INTERACTIVE PERSPECTIVE AND DEFORMATION TOOLS====&lt;br /&gt;
&lt;br /&gt;
I do not think we need to go into detail of why we would need interactive deformation tools :) They are very curicial elements for &lt;br /&gt;
vector logo-amblem design, illustration, pattern creation and layout designs etc. &lt;br /&gt;
&lt;br /&gt;
==== FLASH-LIKE PAINT TOOL ====&lt;br /&gt;
The user draws a 1-bit raster image with the mouse or stylus, when the mouse button is released, or the stylus is lifted, the raster image is vectorised (like the paintbucket tool) resulting in a slightly irregular 'painted' shape as opposed to the more uniform, neat look of the calligraphy tool. The technique automatically insures that there are no internal lines and the self intersections of the brush stroke are smooth.&lt;br /&gt;
&lt;br /&gt;
=== SHARD EDGED DYNAMIC/LINKED OFFSET ===&lt;br /&gt;
Right now Dynamic and linked offset always offset with a rounded edge. A mode that allows the sharp edges to be kept sharp would be useful.&lt;br /&gt;
&lt;br /&gt;
=== [https://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=908792&amp;amp;group_id=93438&amp;amp;atid=604309 Cloning/Spraypaint of Objects Tool] ===&lt;br /&gt;
&lt;br /&gt;
=== Variable Stroke Width Path===&lt;br /&gt;
this could be driven at each node, but a method for varying the stroke width along the path would be very useful.&lt;br /&gt;
&lt;br /&gt;
=== [[Intersection Tools]] ===&lt;br /&gt;
These are more intuitive implementations of the &amp;quot;Cut Path&amp;quot; tool. &lt;br /&gt;
Makes some vector graphic operations very easy to do.&lt;br /&gt;
&lt;br /&gt;
=== Dropbox ===&lt;br /&gt;
just storage area, when you put an object you don't want on your page but you don't want to delete.&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CorelDraw&amp;diff=87950</id>
		<title>CorelDraw</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CorelDraw&amp;diff=87950"/>
		<updated>2012-12-28T20:08:44Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Other Software Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please post links to screenshots and/or insights of this vector app. We must learn from others.&lt;br /&gt;
&lt;br /&gt;
[http://www.ex-astris-scientia.org/misc/software_test.htm Comparison] (from the point of view of technical drawing) of Corel Draw 9, iGrafx Designer and Adobe Illustrator 8.  Fairly detailed.  The comparison criteria paragraphs are also interesting in showing the features that the writer finds useful.&lt;br /&gt;
&lt;br /&gt;
Corel also provides Comparisions to other products on their website.  It does give an interesting idea of what they consider their own strengths and selling points to be (but you have to be very sceptical and take it with a fistfull of salt).  &lt;br /&gt;
&lt;br /&gt;
=== Screenshots ===&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Image:CorelDRAW.png Screenshot of [[CorelDraw]]] at Wikipedia. &lt;br /&gt;
&lt;br /&gt;
Please add more ...&lt;br /&gt;
&lt;br /&gt;
=== Corel Draw Plug-ins ===&lt;br /&gt;
&lt;br /&gt;
[http://www.painterscase.com/plugins/corelplugs1.html Plug-ins for Corel Draw ]&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
[http://www.coreldraw.com/ Official Corel Draw web site]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/CorelDraw Corel Draw page at Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Discussion]]&lt;br /&gt;
[[Category:Other Software]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Xara_X&amp;diff=87944</id>
		<title>Xara X</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Xara_X&amp;diff=87944"/>
		<updated>2012-12-28T20:07:37Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Other Software Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Features in Common =&lt;br /&gt;
*In brief: both are multi-platform and are protected by the GPL. Inkscape is free software; so is part of [http://xaraxtreme.org/ Xara Xtreme] 3 (the renderer part of Xara is still closed and binary-only) but not 4.&lt;br /&gt;
&lt;br /&gt;
= Inkscape Advantages = &lt;br /&gt;
&lt;br /&gt;
=== Fundamental ===&lt;br /&gt;
* completely free and open source (Xara Ltd. refuses to open-source its renderer library)&lt;br /&gt;
* open, text-based, XML-based standardized format (the [http://www.xara.com/support/docs/webformat/spec/ Xar File Format] is a published standard too, but not XML, and not widely adopted)&lt;br /&gt;
* scriptable (rich command line)&lt;br /&gt;
* extendable (perl/python extensions)&lt;br /&gt;
* more localisations&lt;br /&gt;
* ports for OSX and other Unixes, apart from Windows and Linux; all ports have the same functionality (Xara's Linux port is stagnating, only Windows version is being developed)&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
* smoother and more powerful bitmap tracer&lt;br /&gt;
* live XML tree editor&lt;br /&gt;
* gaussian blur (not the same as feathering; blurs everything, can be squeezed and rotated)&lt;br /&gt;
* other generic filters (turbulence, composite, displacement map, etc), ability to compose filter stacks&lt;br /&gt;
* live clones (copies that are linked to the original and update when it's changed)&lt;br /&gt;
* clone tiler (can be used for two-dimensional object scattering with randomization and coloring)&lt;br /&gt;
* tile tracing (tracing anything by a pattern of clones)&lt;br /&gt;
* unclumping (two-dimensional, incremental equidistant distribution of objects)&lt;br /&gt;
* randomizing object positions&lt;br /&gt;
* paint bucket tool to fill any bounded area with a path &lt;br /&gt;
* 3D box tool [not the same as Extrude that gives photorealistic rendering of individual objects; rather, this is a building block of coordinated 3D scenes]&lt;br /&gt;
* eraser tool&lt;br /&gt;
* tweak tool to push, inset, outset, roughen paths and to paint/jitter colors&lt;br /&gt;
* live path effects (pattern on path, sketch, various deformations, geometric constructions), stackable and applicable to groups &lt;br /&gt;
* Spiro splines (more convenient than Beziers)&lt;br /&gt;
* [http://www.openclipart.org/ Open Clip Art Library (OCAL)] integration [Xara can download stuff from its own site only]&lt;br /&gt;
* baseline snapping, alignment, distribution&lt;br /&gt;
* find dialog (find any object by type, style, id, etc)&lt;br /&gt;
* persistent per-object export hints (filename, resolution)&lt;br /&gt;
* export and conversions from command line, including batch export with GUI and commandline [Xara has batch export via GUI only, using Names gallery]&lt;br /&gt;
* command line query options to examine objects in a drawing&lt;br /&gt;
* command line access to verbs (commands) to automate tasks&lt;br /&gt;
* hierarchical layers, &amp;quot;enter group&amp;quot; command making it a temporary layer&lt;br /&gt;
* pattern fills from arbitrary objects; stock vector patterns&lt;br /&gt;
* gradients/patterns on stroke as well as fill&lt;br /&gt;
* gradient handles can be multiple-selected, selected by marquee, Alt+dragged to smoothly shape, copy/paste styled; gradient can be simplified to remove extra handles&lt;br /&gt;
* transform/not transform switch for patterns and gradients&lt;br /&gt;
* switch to preserve rounded rect corners in transforms&lt;br /&gt;
* scale/rotate/skew any number of objects separately, each around its own center&lt;br /&gt;
* numeric skew (both axes; by angle, %, displacement)&lt;br /&gt;
* editing transform matrix&lt;br /&gt;
* persistent per-object rotation centers&lt;br /&gt;
* pasting of size, width, height&lt;br /&gt;
* simplify-like deletion of nodes&lt;br /&gt;
* node sculpting&lt;br /&gt;
* symmetric nodes&lt;br /&gt;
* different star/polygon rounding (both Xara's and Inkscape's approaches have their advantages)&lt;br /&gt;
* randomized stars&lt;br /&gt;
* spirals&lt;br /&gt;
* easy segment and arc from ellipse&lt;br /&gt;
* the ability to combine color and transparency in a gradient&lt;br /&gt;
* linked offsets and text-on-path remain freely transformable&lt;br /&gt;
* convenient calligraphy pen (sensitive to tablet pressure/tilt, speed and direction, with tremor/wiggle)&lt;br /&gt;
* guided drawing, tracing background in calligraphic&lt;br /&gt;
* flowing text into arbitrary shapes, chaining, exclusion&lt;br /&gt;
* one-command removal of kerns from text&lt;br /&gt;
* rotating characters in text (including text on path)&lt;br /&gt;
* connector tool for diagrams&lt;br /&gt;
* automatic diagram layout &lt;br /&gt;
* removing overlaps&lt;br /&gt;
* extensions for paths: randomize, add nodes, swirl, fractal, function plotter and many others&lt;br /&gt;
* extensions for colors (inverse, more saturation, replace etc) and text (sentence case, randomize case, replace etc)&lt;br /&gt;
* extensions for rendering barcodes, function plotter, L-systems, and many others&lt;br /&gt;
* icon preview&lt;br /&gt;
* masks separate from fill&lt;br /&gt;
* vector import of PDF and CS AI (Xara either fails or imports by rasterization)&lt;br /&gt;
* autosave&lt;br /&gt;
&lt;br /&gt;
=== convenience ===&lt;br /&gt;
* overall, '''times''' more keyboard shortcuts than in xara&lt;br /&gt;
* a large part of all keys are configurable (including Xara emulation option) via an XML config file&lt;br /&gt;
* keys for canvas scrolling (with acceleration)&lt;br /&gt;
* keys for scaling and rotating (including pixel-size)&lt;br /&gt;
* keys for scaling and rotating (including pixel-size) of nodes, including scale/rotate of node groups&lt;br /&gt;
* keys for letterspacing, linespacing, kerning in text (including pixel-size)&lt;br /&gt;
* nodes can be moved with snapping along the adjacent straight line segments or their Bezier controls&lt;br /&gt;
* more snapping options, on-canvas snapping indicator&lt;br /&gt;
* gradient handles can merge and unmerge&lt;br /&gt;
* history of zooms (Xara has a single &amp;quot;previous zoom&amp;quot;)&lt;br /&gt;
* zooming by single key (+/-, without ctrl)&lt;br /&gt;
* any kind of zooming (including area) without tool switching&lt;br /&gt;
* &amp;quot;bounding box&amp;quot; per-object selection hints&lt;br /&gt;
* cursor changes over selectable objects&lt;br /&gt;
* node tool optionally highlights mouseovered paths&lt;br /&gt;
* more precision in editable numeric fields&lt;br /&gt;
&lt;br /&gt;
= Xara advantages =&lt;br /&gt;
&lt;br /&gt;
* fast renderer&lt;br /&gt;
* blends [Inkscape has limited path+style blending via Interpolate extension]&lt;br /&gt;
* envelopes, including curvilinear and perspective [Inkscape has non-interactive analog via Envelope and Perspective extensions; also non-perspective destructive distortions can be made via node sculpting or tweak tool]&lt;br /&gt;
* linked colors&lt;br /&gt;
* Pantone colors&lt;br /&gt;
* Photoshop plugins[[/Live]] effects&lt;br /&gt;
* integrated Picture Editor for embedded bitmaps&lt;br /&gt;
* brushes along path can be used for object scattering with randomization [Inkscape's pattern-along-path LPE has no randomization]&lt;br /&gt;
* variable stroke width, with selectable profiles or taken from pressure sensitivity [Inkscape can do this via pattern-along-path LPE]&lt;br /&gt;
* feathering objects' edges (not the same as blurring - only inward from edge, like a blurred transparency mask) [can be emulated in Inkscape via clone+blur+mask]&lt;br /&gt;
* more gradient types (conic, 4-point etc) [a limitation of the SVG specification, only linear and radial are defined]&lt;br /&gt;
* bevel tool (outer/inner; join types; size; light angle and elevation; flat/rounded/chiseled etc types (15 in total)) [some of this can be done in Inkscape via filters]&lt;br /&gt;
* &amp;quot;nav bar&amp;quot; tool for buttons (hidden in Xtreme)&lt;br /&gt;
* quick transparency gradients separate from fill [to some extent, can be emulated by SVG masks]&lt;br /&gt;
* gradient profiles [SVG limitation, in Inkscape can be approximated by multistage gradients]&lt;br /&gt;
* rainbow/alt-rainbow gradient options&lt;br /&gt;
* different star/polygon rounding (both Xara's and Inkscape's approaches have their advantages)&lt;br /&gt;
* some input and output formats that Inkscape does not support, including Flash; but not yet SVG&lt;br /&gt;
* non-AA display mode (note: anti-aliasing is _not_ a significant factor in the speed of Inkscape)&lt;br /&gt;
* linked stretching (autoscaling objects), e.g. stretching button to fit the text&lt;br /&gt;
&lt;br /&gt;
==3.2 features:==&lt;br /&gt;
* Integrates with external photo editors&lt;br /&gt;
* MS Word copy/paste&lt;br /&gt;
* RTF, raw photo import&lt;br /&gt;
** RTF import can be done via GTK APIs. Raw photo import should use dcraw, or code derived from dcraw.&lt;br /&gt;
* PDF-X export&lt;br /&gt;
* XPS import/export&lt;br /&gt;
** This a royalty-free XML-based PDF replacement format from Microsoft. There is FOSS support for it, i.e. in Okular for KDE4.&lt;br /&gt;
* Multipage&lt;br /&gt;
* Text tool: paragraph spacing, snapping to pixel grid, soft hyphens, smart quotes&lt;br /&gt;
* PSD import/export&lt;br /&gt;
** Would require reverse-engineering Photoshop, as there is no published specification&lt;br /&gt;
* Flash animations&lt;br /&gt;
* Color separations&lt;br /&gt;
** This means producing copies of the original image, each one containing one of the channels. This should probably be postponed after the Cairo move.&lt;br /&gt;
&lt;br /&gt;
==Version 4 features:==&lt;br /&gt;
&lt;br /&gt;
* 3D extrude tool with 3D rotation and lighting controls&lt;br /&gt;
* HTML export with images&lt;br /&gt;
* text flow around shapes&lt;br /&gt;
* text underline&lt;br /&gt;
* optional Adobe-like rubberband selection - objects that are touched by rect&lt;br /&gt;
* live selecting while dragging&lt;br /&gt;
* fonts grouped into families in Font list&lt;br /&gt;
* key shortcuts customizable&lt;br /&gt;
&lt;br /&gt;
= Per-feature comparison: =&lt;br /&gt;
&lt;br /&gt;
== Rectangle tool: ==&lt;br /&gt;
Xara:&lt;br /&gt;
* Corner curves must be the same on each side of a corner, but then stretch if the object is resized. The curvature units aren't either percentages or pixels...?&lt;br /&gt;
* Can create with rotation (&amp;quot;Radius creation&amp;quot; and &amp;quot;Diameter creation&amp;quot; options)&lt;br /&gt;
* Can edit centre X/Y numerically&lt;br /&gt;
* Can convert to ellipse by doubleclicking center&lt;br /&gt;
&lt;br /&gt;
Inkscape:&lt;br /&gt;
* Preview as-you-draw&lt;br /&gt;
* Corner radii only in absolute units&lt;br /&gt;
* A switch to preserve corner radii in scaling&lt;br /&gt;
&lt;br /&gt;
== Rotation centers: ==&lt;br /&gt;
Xara:&lt;br /&gt;
* BAD: looks like once you move a center of an object, ALL objects will use the same center!&lt;br /&gt;
* BAD: does not survive save/reload - all objects are reset to geometric centers. (In other words, the center seems to be the property of the Selector tool, not of objects!)&lt;br /&gt;
* with Ctrl, center snaps to corners/midsides&lt;br /&gt;
&lt;br /&gt;
Inkscape:&lt;br /&gt;
* Each object has its own center; if you want to rotate multiple objects around one center, just select them all (taking the object with the center first)&lt;br /&gt;
* Centers persist through save/reload&lt;br /&gt;
* Centers snap to edges and corners/midsides&lt;br /&gt;
&lt;br /&gt;
== Bitmap tracer: ==&lt;br /&gt;
Xara:&lt;br /&gt;
* BAD: all parameters are set in some relative values in the range 1..100, except for &amp;quot;number of passes&amp;quot; which does not correspond to anything quantifiable. There's no way I could find to set explicitly the number of colors.&lt;br /&gt;
* BAD: as a result, tracing a simple line art such as a two-color logo is nearly impossible. Xara almost always creates a bunch of dirt at the fringes due to antialiasing, and shapes get distorted a lot. The Monochrome option seems to be broken.&lt;br /&gt;
* BAD: for photos, there's no stacking option, so full-color traces come out very untidy. The shapes are also more distorted than in Inkscape. If you try to make them less distorted, they start getting pixelated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pen/shape editor tool: ==&lt;br /&gt;
Xara:&lt;br /&gt;
* with the pen tool you can drag curve and nodes (with snapping and closing) while the tool is active but, strangely, not node handles. with the shape editor tool the handles can be moved and new points also added&lt;br /&gt;
Inkscape:&lt;br /&gt;
* live preview of the next segment (exists in Xara when clicking/holding and dragging with the shape editor tool)&lt;br /&gt;
* you can create hor/vert straight line segments with Ctrl (the same in Xara but only with the shape editor tool)&lt;br /&gt;
* length/angle display in statusbar (again, in Xara only with the shape editor tool)&lt;br /&gt;
* you can easily create disconnected subpaths (starting with Shift)&lt;br /&gt;
&lt;br /&gt;
== Path simplification: ==&lt;br /&gt;
Xara:&lt;br /&gt;
* slider for the just-drawn freehand line (only), to refit both ways (looser or tighter) while it's still selected&lt;br /&gt;
* interactive 0-100% slider in Node tool, looser only but remembers setting while you have the same nodes selected lets you de-simplify back&lt;br /&gt;
* works on selected nodes (actually, ONLY works on selected nodes)&lt;br /&gt;
Inkscape:&lt;br /&gt;
* Ctrl+L works in any tool, smoothing incrementally with acceleration&lt;br /&gt;
* has wider range and works more gradually&lt;br /&gt;
* works on multiple objects, and on whole object without node selection&lt;br /&gt;
&lt;br /&gt;
= Screenshots =&lt;br /&gt;
&lt;br /&gt;
[http://www.xara.com/products/xarax/screenshots.asp Screenshots on the Xara site] Page mirror: [http://web.archive.org/*/http://www.xara.com/products/xarax/screenshots.asp Web Archive]&lt;br /&gt;
&lt;br /&gt;
[http://www.xara.com/products/xarax/screenshots/brushes.jpg Screenshot showing Xara Brushes]&lt;br /&gt;
&lt;br /&gt;
[http://www.xara.com/products/xarax/screenshots/Gallery.jpg Screenshot showing Xara Clipart Gallery]&lt;br /&gt;
&lt;br /&gt;
[http://www.xara.com/products/xarax/screenshots/55Chevy(outlines).jpg Screenshot of Xara depicting a Chevrolet Automobile]&lt;br /&gt;
[http://www.xara.com/products/xarax/screenshots/55Chevy(outlines).jpg Screenshot of Xara Wireframe View of Chevrolet Automobile]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
[http://www.xara.com/products/xarax/ official site]&lt;br /&gt;
&lt;br /&gt;
[http://www.xaraxone.com/ community site of artists]&lt;br /&gt;
&lt;br /&gt;
[http://xaraxtreme.org open source Xara Xtreme]&lt;br /&gt;
&lt;br /&gt;
[http://www.xara.com/support/docs/webformat/spec/ Xar File Format]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Xara_X Xara at Wikipedia]&lt;br /&gt;
&lt;br /&gt;
[http://www.talkgraphics.com/showthread.php?t=26337 A relevant thread on Talkgraphics]&lt;br /&gt;
&lt;br /&gt;
[http://www.talkgraphics.com/showthread.php?t=26742 Another relevant thread on Talkgraphics]&lt;br /&gt;
&lt;br /&gt;
[http://www.talkgraphics.com/showthread.php?t=31719 Yet another relevant thread on Talkgraphics]&lt;br /&gt;
&lt;br /&gt;
[[Category:Other Software]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Customizing_Inkscape&amp;diff=87938</id>
		<title>Customizing Inkscape</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Customizing_Inkscape&amp;diff=87938"/>
		<updated>2012-12-28T15:47:55Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Change keyboards shortcuts */ Add a list of predefined shortcuts files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Change keyboards shortcuts ==&lt;br /&gt;
&lt;br /&gt;
There is no user interface to customize shortcuts yet but you can edit ''&amp;lt;Inkscape install directory&amp;gt;share/keys/default.xml''.&lt;br /&gt;
&lt;br /&gt;
In order to share same shortcuts than other softwares, following configuration files are shipped with Inkscape (look at the ''&amp;lt;Inkscape install directory&amp;gt;share/keys/'' folder):&lt;br /&gt;
&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/keys/acd-canvas.xml acd-canvas.xml] for ACD System Canvas 11&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/keys/adobe-illustrator-cs2.xml adobe-illustrator-cs2.xml] for Adobe Illustrator CS2&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/keys/corel-draw-x4 corel-draw-x4] for Corel Draw X4&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/keys/macromedia-freehand-mx.xml macromedia-freehand-mx.xml] for Macromedia Freehand MX&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/keys/xara.xml xara.xml] for Xara X, Xara Xtreme and Xara LX&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/keys/zoner-draw.xml zoner-draw.xml] for Zoner Draw 5&lt;br /&gt;
&lt;br /&gt;
Moreover:&lt;br /&gt;
&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/keys/right-handed-illustration.xml right-handed-illustration.xml] is a configuration where the user draw with the right hand and want to access all shortcuts with the left one&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/keys/inkscape.xml inkscape.xml] is the default Inkscape shortcuts configuration file.&lt;br /&gt;
&lt;br /&gt;
== Change the user interface ==&lt;br /&gt;
&lt;br /&gt;
=== Change icons ===&lt;br /&gt;
&lt;br /&gt;
Icons are in all in an ''icnos.svg'' file located in ''&amp;lt;Inkscape install directory&amp;gt;\share\icons\''. It can be overwritted or modified by the user (be sure of what you do).&lt;br /&gt;
&lt;br /&gt;
Examples of existing ''icons.svg'':&lt;br /&gt;
&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/icons/icons.svg Default one] from the Inkscape repository&lt;br /&gt;
* A ''Tango Icon Set'' for Inkscape can be sent in the ''&amp;lt;Inkscape install directory&amp;gt;\share\icons\'' directory, you can rename it.&lt;br /&gt;
* [http://scnd101.deviantart.com/art/SimplyGrey-inkscape-theme-103497574 SimpleGrey inkscape theme] by Scnd101&lt;br /&gt;
&lt;br /&gt;
=== Change the theme/skin ===&lt;br /&gt;
&lt;br /&gt;
In GTK, a theme is defined in a '''gtkrc''' file. The Inkscape one is located in ''&amp;lt;Inkscape install directory&amp;gt;\etc\gtk-2.0''.&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Customizing_Inkscape&amp;diff=87932</id>
		<title>Customizing Inkscape</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Customizing_Inkscape&amp;diff=87932"/>
		<updated>2012-12-28T15:29:47Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Created page with &amp;quot;== Change keyboards shortcuts ==  There is no user interface to customize shortcuts yet but you can edit ''&amp;lt;Inkscape install directory&amp;gt;share/keys/default.xml''.  == Change the...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Change keyboards shortcuts ==&lt;br /&gt;
&lt;br /&gt;
There is no user interface to customize shortcuts yet but you can edit ''&amp;lt;Inkscape install directory&amp;gt;share/keys/default.xml''.&lt;br /&gt;
&lt;br /&gt;
== Change the user interface ==&lt;br /&gt;
&lt;br /&gt;
=== Change icons ===&lt;br /&gt;
&lt;br /&gt;
Icons are in all in an ''icnos.svg'' file located in ''&amp;lt;Inkscape install directory&amp;gt;\share\icons\''. It can be overwritted or modified by the user (be sure of what you do).&lt;br /&gt;
&lt;br /&gt;
Examples of existing ''icons.svg'':&lt;br /&gt;
&lt;br /&gt;
* [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/share/icons/icons.svg Default one] from the Inkscape repository&lt;br /&gt;
* A ''Tango Icon Set'' for Inkscape can be sent in the ''&amp;lt;Inkscape install directory&amp;gt;\share\icons\'' directory, you can rename it.&lt;br /&gt;
* [http://scnd101.deviantart.com/art/SimplyGrey-inkscape-theme-103497574 SimpleGrey inkscape theme] by Scnd101&lt;br /&gt;
&lt;br /&gt;
=== Change the theme/skin ===&lt;br /&gt;
&lt;br /&gt;
In GTK, a theme is defined in a '''gtkrc''' file. The Inkscape one is located in ''&amp;lt;Inkscape install directory&amp;gt;\etc\gtk-2.0''.&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Icons&amp;diff=87920</id>
		<title>Icons</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Icons&amp;diff=87920"/>
		<updated>2012-12-28T14:32:47Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Icons category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This pages is a collection of information regarding the implementation of icons inside of Inkscape.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Inkscape's interface makes extensive use of custom icons, and now provides a few mechanisms and different code to handle them. Over the years this area has seen distinct approaches taken, and has needs to move completely away from legacy approaches.&lt;br /&gt;
&lt;br /&gt;
Aside from the state of the code, this section also covers some of the details on themes and how to and and implement icons, along with some of the internal details and design issues related to the implementation.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Icon support in Inkscape has a long history and has accumulated a fair bit of cruft along the way. Originally the icons were custom widgets with all functionality shoved mainly into a single C source file. Standard GTK+ mechanisms had been originally avoided by a legacy design decree. However once the icon code was revisited that avoidance was dropped and work started (slightly sporadically) to move to standard GTK+ widgets and mechanisms. This includes the fact that the original SPIcon came from the GTK+ 1.x time frame, and predated GTK+ 2.x.&lt;br /&gt;
&lt;br /&gt;
=== SPIcon ===&lt;br /&gt;
&lt;br /&gt;
SPIcon was the original custom widget class used to represent icons, along with all the code needed to load the images to be used. A mix of pixmaps and then internally generated pixmaps from a common SVG was used.&lt;br /&gt;
&lt;br /&gt;
So two main aspects exist here. First is the widget class itself that draws a visible image. Second is the code to load and cache the images used. Keep in mind that a single icon name might be used for several different sized display widgets.&lt;br /&gt;
&lt;br /&gt;
=== Themeable Stock Icons ===&lt;br /&gt;
&lt;br /&gt;
[http://library.gnome.org/devel/gtk/stable/gtk-Themeable-Stock-Images.html Themeable Stock Images] were added to GTK+ with the major jump to GTK+ 2.0. Some nice features were that they allowed a program to as for '''''logical''''' size icons and get different physical size images depending on how the user's overall theme was configured, could manage those multiple sizes, could store extra info such as name, and could have extra varients including right-to-left vs. left-to-right versions.&lt;br /&gt;
&lt;br /&gt;
Probably the #1 usability item here is the support for '''''logical''''' sizes. So a program author can code in &amp;quot;get the menu-sized icon image&amp;quot; and get back a 16x16 image on one system, and get a 24x24 on a system with a high resolution display. ''OR'' the theme could also be set to return a 24x24 image for the low-res monitor in the cases where a '''''user''''' had eyesight that required a larger size.&lt;br /&gt;
&lt;br /&gt;
Some work was begun to migrate Inkscape to use Themeable Stock Images, but the APIs themselves did not take into account that a program might want to provide it's own '''''scalable''''' set if images... and thus much prerendering was needed.&lt;br /&gt;
&lt;br /&gt;
One of the more recent bits of coding on Themeable Stock Images support was to change things to not take the internal icons.svg versions, and instead fall to system icons when present. Much of this was done in coordination with Andreas Nilsson, Rodney Dawes Jakub Steiner and others to try to better support [http://tango.freedesktop.org/Tango_Desktop_Project Tango] and also the [http://tango.freedesktop.org/Standard_Icon_Naming_Specification Icon Naming Specification].&lt;br /&gt;
&lt;br /&gt;
In order to maximize user benefit, applications should share common icons for common tasks. [http://www.freedesktop.org/ freedestop.org] listed out [http://www.freedesktop.org/wiki/Specifications/icon-naming-spec names for core &amp;quot;office&amp;quot;] functionality, but graphics and media programs were left out.&lt;br /&gt;
&lt;br /&gt;
The intent was for authors of graphical and other artistic programs to list the common functionality needed and agree on names to use for the common concepts. This was the [http://tango.freedesktop.org/ArtLibreSet ArtLibreSet]. Unfortunately developers of other graphics projects did not care to share common icons, and Inkscape was one of the only ones to make suggestions.&lt;br /&gt;
&lt;br /&gt;
=== GtkIconTheme (named icons) ===&lt;br /&gt;
&lt;br /&gt;
[http://library.gnome.org/devel/gtk/stable/GtkIconTheme.html GtkIconTheme] was &lt;br /&gt;
added into GTK+ as of version 2.4. As to the difference from Themeable Stock Icons, the documentation mentions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;A good rule of thumb is that if there is a stock image for what you want to use, use it, otherwise use a named icon.&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Work was started in order to leverage GtkIconThem and it's &amp;quot;named icons&amp;quot; instead of custom Stock items, but has not quite been completed. One tricky aspect is that in order to manage a set of images for one icon at different sizes, it is still handy to place them into a stock object to hold them. However referencing them is not via stock ids, but rather name ids (which are different API calls for gtk widgets that use icons)&lt;br /&gt;
&lt;br /&gt;
The main &amp;quot;gotcha&amp;quot; or shortcoming is that the named icons of GtkIconTheme use '''''physical''''' size only, and not logical size. As themes are loaded and changed, sizes also change so may cause issues.&lt;br /&gt;
&lt;br /&gt;
=== XDG Base Directory Specification ===&lt;br /&gt;
&lt;br /&gt;
The [http://standards.freedesktop.org/basedir-spec/latest/index.html XDG Base Directory Specification] lists how to identify sets of directories to use as base points for asset and file loading and storage.&lt;br /&gt;
&lt;br /&gt;
GLib has [http://library.gnome.org/devel/glib/stable/glib-Miscellaneous-Utility-Functions.html supported this for some time], and among other things this allows an end user to switch config for applications at launch time, with the equivalent of an unlimited number of parallel installs with no conflicts and custom non-overlapping settings.&lt;br /&gt;
&lt;br /&gt;
Specifically to issues of icons, the documentation for [http://library.gnome.org/devel/glib/stable/glib-Miscellaneous-Utility-Functions.html#g-get-user-data-dir g_get_user_data_dir()] states:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Returns a base directory in which to access application data such as icons that is customized for a particular user. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One easily overlooked but '''''critical''''' aspect is that often users are not allowed to install things such as themes under /usr/, etc. In these cases installing into a user owned directory is an absolute must.&lt;br /&gt;
&lt;br /&gt;
=== Themable Application-specific Icons ===&lt;br /&gt;
&lt;br /&gt;
[http://live.gnome.org/ThemableAppSpecificIcons Themable Application-specific Icons] is a new ''proposed'' approach to allow for themeable icons specific to themselves without file and packaging conflicts.&lt;br /&gt;
&lt;br /&gt;
One key item to note is that this is a separate/additional step to the base GTK technical solutions of Themeable Stock Icons and named icons.&lt;br /&gt;
&lt;br /&gt;
Another point to consider is that the &amp;quot;${prefix}/share/&amp;lt;appname&amp;gt;&amp;quot; aspect of locations should be expanded in compliance with the [http://standards.freedesktop.org/basedir-spec/latest/index.html XDG Base Directory Specification].&lt;br /&gt;
&lt;br /&gt;
== Design Goals ==&lt;br /&gt;
&lt;br /&gt;
=== Usable ===&lt;br /&gt;
&lt;br /&gt;
=== Aesthetically Pleasing ===&lt;br /&gt;
&lt;br /&gt;
=== Themeable ===&lt;br /&gt;
&lt;br /&gt;
=== Simple ===&lt;br /&gt;
&lt;br /&gt;
=== Scalable ===&lt;br /&gt;
&lt;br /&gt;
== Current Code ==&lt;br /&gt;
&lt;br /&gt;
=== Debug Output ===&lt;br /&gt;
&lt;br /&gt;
Debugging flags can be set in preferences.xml to enable various debugging.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;group&lt;br /&gt;
       id=&amp;quot;icons&amp;quot;&lt;br /&gt;
       overlaySvg=&amp;quot;1&amp;quot;&lt;br /&gt;
       dumpDefault=&amp;quot;1&amp;quot;&lt;br /&gt;
       dumpSvg=&amp;quot;1&amp;quot;&lt;br /&gt;
       dumpGtk=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border = &amp;quot;1&amp;quot;&lt;br /&gt;
|Name||Result&lt;br /&gt;
|-&lt;br /&gt;
|overlaySvg&lt;br /&gt;
|Overlays internally rendered SVG icons with dots spaced 4x4. Very helpful to determine if icon blurring is due to rendering or due to being stretched to fit.&lt;br /&gt;
|-&lt;br /&gt;
|dumpDefault&lt;br /&gt;
|Dumps informational g_message data default icon sizes.&lt;br /&gt;
|-&lt;br /&gt;
|dumpSvg&lt;br /&gt;
|Dumps informational g_message data related to internally rendered SVG icons.&lt;br /&gt;
|-&lt;br /&gt;
|dumpGtk&lt;br /&gt;
|Dumps informational g_message data related to stock GTK icons.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Issues ===&lt;br /&gt;
&lt;br /&gt;
The following are a few screenshots of problems observed with icons on various platforms and in various situations. Having a visual representation can help with understanding the issue.&lt;br /&gt;
&lt;br /&gt;
==== Application Overriding System ====&lt;br /&gt;
&lt;br /&gt;
[[File:icon_comp1.png|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
This grab shows the independent &amp;quot;hicolor&amp;quot; icons on top, and the internal icons.svg icons on the bottom. In the case of independent icon case, they will override the system icons (rotate and flip in this case) on ''some'' versions of libs. In this particular case Inkscape itself is running on Ubuntu 8.10 and a high-visibility theme (so as to not be confused with our Tango icons).&lt;br /&gt;
&lt;br /&gt;
In the independent icons case, they are overriding the system icons. Thus they are not just being hooked in to the fallback resolution as the final case. In the icons.svg case the orange arrows from the system are coming through as intended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Icons Missing ====&lt;br /&gt;
&lt;br /&gt;
[[File:icon_comp2.png|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Also when running the application on an Ubuntu 8.10 box, it was seen that when the GTK+ theme was changed, the independent icons disappeared. The system-derived icons then came to be visible.&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Icons Missing from Menus ====&lt;br /&gt;
&lt;br /&gt;
[[File:icon_comp3.png|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
Also when running the application on an Ubuntu 8.10 box, it was seen that when the GTK+ theme was changed, the independent icons disappeared. The system-derived icons then came to be visible. This second screenshot show it occurring for the icons in the menus.&lt;br /&gt;
&lt;br /&gt;
== Needed Improvements ==&lt;br /&gt;
&lt;br /&gt;
== Themes ==&lt;br /&gt;
&lt;br /&gt;
=== Single SVG File ===&lt;br /&gt;
&lt;br /&gt;
[http://wiki.inkscape.org/wiki/index.php/ReleaseNotes042#Miscellaneous_usability Since Inkscape 0.42], icon themes could be installed by either changing the installed icons.svg or by installing a new&lt;br /&gt;
&lt;br /&gt;
A requested background rendering of icons was added [http://wiki.inkscape.org/wiki/index.php/ReleaseNotes044#Speed as of Inkscape 0.44], and was a definite boost to usability.&lt;br /&gt;
&lt;br /&gt;
If creating or editing an icons.svg file, it is recommended to do the following:&lt;br /&gt;
&lt;br /&gt;
1) Adding the following to your preferences.xml will save quite a bit when it comes to file size produced.&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;group&lt;br /&gt;
      id=&amp;quot;svgoutput&amp;quot;&lt;br /&gt;
      usenamedcolors=&amp;quot;0&amp;quot;&lt;br /&gt;
      numericprecision=&amp;quot;7&amp;quot;&lt;br /&gt;
      minimumexponent=&amp;quot;-8&amp;quot;&lt;br /&gt;
      inlineattrs=&amp;quot;1&amp;quot;&lt;br /&gt;
      indent=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Re-use/share gradients wherever possible.&lt;br /&gt;
&lt;br /&gt;
3) Run File&amp;gt;Vaccuum Defs before saving it.&lt;br /&gt;
&lt;br /&gt;
=== System and Single SVG ===&lt;br /&gt;
&lt;br /&gt;
Initially the single SVG file icons would be used for everything. Later changes allowed for any stock icons known to be drawn from the installed system theme and override the internal ones from icons.svg&lt;br /&gt;
&lt;br /&gt;
=== Fully Themeable ===&lt;br /&gt;
&lt;br /&gt;
-- details pending --&lt;br /&gt;
[[User:JonCruz|JonCruz]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
Also see [[ApplicationIcons]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Icons]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Application_icons&amp;diff=87914</id>
		<title>Application icons</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Application_icons&amp;diff=87914"/>
		<updated>2012-12-28T14:30:57Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Icons category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[TangoifiedIcons|Tangoified Inkscape Icon Set]]&lt;br /&gt;
*[[HowToEditIcons|How to Edit Icons]]&lt;br /&gt;
*[[IconsStyle|Icon Style]]&lt;br /&gt;
*&amp;lt;strike&amp;gt;[http://www.out-of-order.ca/inkscape-icon-tutorial/ A Beginner's tutorial on making icons in Inkscape]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*[http://developer.gnome.org/projects/gup/hig/2.0/icons.html Gnome HIG about icons]&lt;br /&gt;
*[http://developer.gnome.org/projects/gup/hig/2.0/design.html#Palette Colors for Gnome icons]&lt;br /&gt;
*&amp;lt;strike&amp;gt;[http://mmmaybe.gimp.org/tutorials/Creating_Icons/ &amp;quot;Creating Icons&amp;quot; tutorial from Jacub Steiner for GIMP]&amp;lt;/strike&amp;gt;&lt;br /&gt;
*[http://jimmac.musichall.cz/ikony.php3 Jacub Steiners icons]&lt;br /&gt;
*[http://placide.home.sapo.pt/inkscape.html Plácido Sousa's crispy icon theme]&lt;br /&gt;
*[http://www.freeiconsweb.com Free Icons Library]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Discussion]]&lt;br /&gt;
[[Category:Needs Work]]&lt;br /&gt;
[[Category:Icons]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Themable_icons&amp;diff=87908</id>
		<title>Themable icons</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Themable_icons&amp;diff=87908"/>
		<updated>2012-12-28T14:30:16Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Icons category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists the proposed icon names to be used by Inkscape when implementing Themable App Specific icons, described [http://live.gnome.org/ThemableAppSpecificIcons here].&lt;br /&gt;
&lt;br /&gt;
We'll only use three contexts from the [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html Icon Naming Specification]: Actions, Places, and Status.&lt;br /&gt;
&lt;br /&gt;
The ALS/INS column says whether the icon name is present in either the [http://tango.freedesktop.org/ArtLibreSet Art Libre set] or the [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html freedesktop.org Icon Naming Specification]. Ideally, it should be all green, but Inkscape requires a lot of special icons that may not be of much use to other applications.&lt;br /&gt;
&lt;br /&gt;
==Actions==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Icon name&lt;br /&gt;
!Description&lt;br /&gt;
!Icon&lt;br /&gt;
!Tango&lt;br /&gt;
![[Art Libre Set|ALS]]/[[Icon Naming Specification|INS]]?&lt;br /&gt;
|-&lt;br /&gt;
|align-horizontal-baseline&lt;br /&gt;
|Align text baseline anchors horizontally&lt;br /&gt;
|[[Image:text-align-baseline-horizontal.png]]&lt;br /&gt;
|[[Image:text-align-baseline-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-horizontal-center&lt;br /&gt;
|Align center lines of objects horizontally&lt;br /&gt;
|[[Image:align-center-horizontal.png]]&lt;br /&gt;
|[[Image:align-center-horizontal-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|align-horizontal-left&lt;br /&gt;
|Align left edges of objects&lt;br /&gt;
|[[Image:align-left.png]]&lt;br /&gt;
|[[Image:align-left-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-horizontal-left-to-anchor&lt;br /&gt;
|Align left edges of objects to the right edge of an anchor object&lt;br /&gt;
|[[Image:align-left-to-anchor.png]]&lt;br /&gt;
|[[Image:align-left-to-anchor-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-horizontal-right&lt;br /&gt;
|Align right edges of objects&lt;br /&gt;
|[[Image:align-right.png]]&lt;br /&gt;
|[[Image:align-right-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-horizontal-right-to-anchor&lt;br /&gt;
|Align right edges of object to the left edge of an anchor object&lt;br /&gt;
|[[Image:align-right-to-anchor.png]]&lt;br /&gt;
|[[Image:align-right-to-anchor-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-horizontal-node&lt;br /&gt;
|Align nodes horizontally&lt;br /&gt;
|[[Image:node-align-horizontal.png]]&lt;br /&gt;
|[[Image:node-align-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-vertical-baseline&lt;br /&gt;
|Align baselines of texts&lt;br /&gt;
|[[Image:text-align-baseline-vertical.png]]&lt;br /&gt;
|[[Image:text-align-baseline-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-vertical-bottom&lt;br /&gt;
|Align bottom edges of objects&lt;br /&gt;
|[[Image:align-bottom.png]]&lt;br /&gt;
|[[Image:align-bottom-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-vertical-bottom-to-anchor&lt;br /&gt;
|Align bottom edges of objects to the top edge of an anchor object&lt;br /&gt;
|[[Image:align-bottom-to-anchor.png]]&lt;br /&gt;
|[[Image:align-bottom-to-anchor-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-vertical-center&lt;br /&gt;
|Align center lines of objects vertically&lt;br /&gt;
|[[Image:align-center-vertical.png]]&lt;br /&gt;
|[[Image:align-center-vertical-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|align-vertical-node&lt;br /&gt;
|Align nodes vertically&lt;br /&gt;
|[[Image:node-align-vertical.png]]&lt;br /&gt;
|[[Image:node-align-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-vertical-top&lt;br /&gt;
|Align top edges of objects&lt;br /&gt;
|[[Image:align-top.png]]&lt;br /&gt;
|[[Image:align-top-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|align-vertical-top-to-anchor&lt;br /&gt;
|Align top edges of objects to the bottom edge of an anchor object&lt;br /&gt;
|[[Image:align-top-to-anchor.png]]&lt;br /&gt;
|[[Image:align-top-to-anchor-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|bitmap-trace&lt;br /&gt;
|Trace (vectorize) a bitmap&lt;br /&gt;
|[[Image:bitmap-trace.png]]&lt;br /&gt;
|[[Image:bitmap-trace-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|color-fill&lt;br /&gt;
|Paint Bucket tool&lt;br /&gt;
|[[Image:color-fill.png]]&lt;br /&gt;
|[[Image:color-fill-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|color-gradient&lt;br /&gt;
|Gradient tool&lt;br /&gt;
|[[Image:color-gradient.png]]&lt;br /&gt;
|[[Image:color-gradient-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|color-management&lt;br /&gt;
|Toggle color-managed view&lt;br /&gt;
|[[Image:view-manage-colors.png]]&lt;br /&gt;
|[[Image:color-management-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|color-picker&lt;br /&gt;
|Color Picker (Dropper) tool&lt;br /&gt;
|[[Image:color-picker.png]]&lt;br /&gt;
|[[Image:color-picker-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|distribute-graph-directed&lt;br /&gt;
|Neatly lay out the connector network as a directed graph&lt;br /&gt;
|[[Image:distribute-graph-directed.png]]&lt;br /&gt;
|[[Image:distribute-graph-directed-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-graph&lt;br /&gt;
|Neatly lay out the connector network as an undirected graph&lt;br /&gt;
|[[Image:distribute-graph.png]]&lt;br /&gt;
|[[Image:distribute-graph-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-horizontal-center&lt;br /&gt;
|Distribute the center lines of objects horizontally&lt;br /&gt;
|[[Image:distribute-horizontal-center.png]]&lt;br /&gt;
|[[Image:distribute-horizontal-center-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|distribute-horizontal-gaps&lt;br /&gt;
|Make horizontal gaps between objects equal&lt;br /&gt;
|[[Image:distribute-horizontal-gaps.png]]&lt;br /&gt;
|[[Image:distribute-horizontal-gaps-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-horizontal-left&lt;br /&gt;
|Distribute left edges of objects horizontally&lt;br /&gt;
|[[Image:distribute-horizontal-left.png]]&lt;br /&gt;
|[[Image:distribute-horizontal-left-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|distribute-horizontal-node&lt;br /&gt;
|Distribute nodes horizontally&lt;br /&gt;
|[[Image:node-distribute-horizontal.png]]&lt;br /&gt;
|[[Image:node-distribute-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-horizontal-right&lt;br /&gt;
|Distribute right edges of objects horizontally&lt;br /&gt;
|[[Image:distribute-horizontal-right.png]]&lt;br /&gt;
|[[Image:distribute-horizontal-right-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|distribute-randomize&lt;br /&gt;
|Place objects randomly&lt;br /&gt;
|[[Image:distribute-randomize.png]]&lt;br /&gt;
|[[Image:distribute-randomize-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-remove-overlaps&lt;br /&gt;
|Rearrange objects so that they don't overlap each other&lt;br /&gt;
|[[Image:distribute-remove-overlaps.png]]&lt;br /&gt;
|[[Image:distribute-remove-overlaps-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-unclump&lt;br /&gt;
|Rearrange objects so that they are equally spaced (center-to-center)&lt;br /&gt;
|[[Image:distribute-unclump.png]]&lt;br /&gt;
|[[Image:distribute-unclump-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-vertical-bottom&lt;br /&gt;
|Distribute bottom edges of objects vertically&lt;br /&gt;
|[[Image:distribute-vertical-bottom.png]]&lt;br /&gt;
|[[Image:distribute-vertical-bottom-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|distribute-vertical-center&lt;br /&gt;
|Distribute center lines of objects vertically&lt;br /&gt;
|[[Image:distribute-vertical-center.png]]&lt;br /&gt;
|[[Image:distribute-vertical-center-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|distribute-vertical-gaps&lt;br /&gt;
|Make vertical gaps between objects equal&lt;br /&gt;
|[[Image:distribute-vertical-gaps.png]]&lt;br /&gt;
|[[Image:distribute-vertical-gaps-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-vertical-node&lt;br /&gt;
|Distribute nodes vertically&lt;br /&gt;
|[[Image:node-distribute-vertical.png]]&lt;br /&gt;
|[[Image:node-distribute-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-vertical-top&lt;br /&gt;
|Distriute top edges of objects vertically&lt;br /&gt;
|[[Image:distribute-vertical-top.png]]&lt;br /&gt;
|[[Image:distribute-vertical-top-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|document-cleanup&lt;br /&gt;
|Remove unneeded definitions from the document (Vacuum Defs)&lt;br /&gt;
|[[Image:document-cleanup.png]]&lt;br /&gt;
|[[Image:document-cleanup-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|document-export-ocal&lt;br /&gt;
|Export the document to the Open Clip Art Library&lt;br /&gt;
|[[Image:document-export-ocal.png]]&lt;br /&gt;
|[[Image:document-export-ocal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|document-export&lt;br /&gt;
|Export the document as a different format&lt;br /&gt;
|[[Image:document-export.png]]&lt;br /&gt;
|[[Image:document-export-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|document-import-ocal&lt;br /&gt;
|Import a document from the Open Clip Art Library&lt;br /&gt;
|[[Image:document-import-ocal.png]]&lt;br /&gt;
|[[Image:document-import-ocal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|document-import&lt;br /&gt;
|Import a document or an image&lt;br /&gt;
|[[Image:document-import.png]]&lt;br /&gt;
|[[Image:document-import-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|document-metadata&lt;br /&gt;
|Edit the document's metadata&lt;br /&gt;
|[[Image:document-metadata.png]]&lt;br /&gt;
|[[Image:document-metadata-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-calligraphic&lt;br /&gt;
|Calligraphy tool&lt;br /&gt;
|[[Image:draw-calligraphic.png]]&lt;br /&gt;
|[[Image:draw-calligraphic-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|draw-connector&lt;br /&gt;
|Connector tool&lt;br /&gt;
|[[Image:draw-connector.png]]&lt;br /&gt;
|[[Image:draw-connector-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-cuboid&lt;br /&gt;
|3D Box tool&lt;br /&gt;
|[[Image:draw-cuboid.png]]&lt;br /&gt;
|[[Image:draw-cuboid-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-ellipse&lt;br /&gt;
|Ellipse tool&lt;br /&gt;
|[[Image:draw-ellipse.png]]&lt;br /&gt;
|[[Image:draw-ellipse-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|draw-eraser&lt;br /&gt;
|Eraser tool&lt;br /&gt;
|[[Image:draw-eraser.png]]&lt;br /&gt;
|[[Image:draw-eraser-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|draw-freehand&lt;br /&gt;
|Freehand tool (pencil)&lt;br /&gt;
|[[Image:draw-freehand.png]]&lt;br /&gt;
|[[Image:draw-freehand-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|draw-path&lt;br /&gt;
|Pen tool&lt;br /&gt;
|[[Image:draw-path.png]]&lt;br /&gt;
|[[Image:draw-path-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-polygon-star&lt;br /&gt;
|Polygon / Star tool&lt;br /&gt;
|[[Image:draw-polygon-star.png]]&lt;br /&gt;
|[[Image:draw-polygon-star-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-rectangle&lt;br /&gt;
|Rectangle tool&lt;br /&gt;
|[[Image:draw-rectangle.png]]&lt;br /&gt;
|[[Image:draw-rectangle-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|draw-spiral&lt;br /&gt;
|Spiral tool&lt;br /&gt;
|[[Image:draw-spiral.png]]&lt;br /&gt;
|[[Image:draw-spiral-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-text&lt;br /&gt;
|Text tool&lt;br /&gt;
|[[Image:draw-text.png]]&lt;br /&gt;
|[[Image:draw-text-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|edit-clone&lt;br /&gt;
|Clone an object&lt;br /&gt;
|[[Image:edit-clone.png]]&lt;br /&gt;
|[[Image:edit-clone-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-clone-unlink&lt;br /&gt;
|Unlink a clone&lt;br /&gt;
|[[Image:edit-clone-unlink.png]]&lt;br /&gt;
|[[Image:edit-clone-unlink-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-duplicate&lt;br /&gt;
|Duplicate an object&lt;br /&gt;
|[[Image:edit-duplicate.png]]&lt;br /&gt;
|[[Image:edit-duplicate-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-paste-in-place&lt;br /&gt;
|Paste clipboard in place&lt;br /&gt;
|[[Image:edit-paste-in-place.png]]&lt;br /&gt;
|[[Image:edit-paste-in-place-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-paste-style&lt;br /&gt;
|Paste the style of the objects on the clipboard&lt;br /&gt;
|[[Image:edit-paste-style.png]]&lt;br /&gt;
|[[Image:edit-paste-style-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-select-all-layers&lt;br /&gt;
|Select all objects in all layers&lt;br /&gt;
|[[Image:edit-select-all-layers.png]]&lt;br /&gt;
|[[Image:edit-select-all-layers-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-select-invert&lt;br /&gt;
|Invert selection&lt;br /&gt;
|[[Image:edit-select-invert.png]]&lt;br /&gt;
|[[Image:edit-select-invert-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-select-none&lt;br /&gt;
|Select nothing (deselect)&lt;br /&gt;
|[[Image:edit-select-none.png]]&lt;br /&gt;
|[[Image:edit-select-none-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-select-original&lt;br /&gt;
|Select the original of a clone&lt;br /&gt;
|[[Image:edit-select-original.png]]&lt;br /&gt;
|[[Image:edit-select-original-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|edit-undo-history&lt;br /&gt;
|View the undo history&lt;br /&gt;
|[[Image:edit-undo-history.png]]&lt;br /&gt;
|[[Image:edit-undo-history-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|format-text-direction-horizontal&lt;br /&gt;
|&lt;br /&gt;
|[[Image:text-direction-horizontal.png]]&lt;br /&gt;
|[[Image:text-direction-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|format-text-direction-vertical&lt;br /&gt;
|&lt;br /&gt;
|[[Image:text-direction-vertical.png]]&lt;br /&gt;
|[[Image:text-direction-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|help-keyboard-shortcuts&lt;br /&gt;
|Keyboard and mouse reference&lt;br /&gt;
|[[Image:help-keyboard-shortcuts.png]]&lt;br /&gt;
|[[Image:help-keyboard-shortcuts-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|help-contents&lt;br /&gt;
|Inkscape Manual&lt;br /&gt;
|[[Image:help-manual.png]]&lt;br /&gt;
|[[Image:help-manual-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|layer-bottom&lt;br /&gt;
|Move layer to the bottom&lt;br /&gt;
|[[Image:layer-bottom.png]]&lt;br /&gt;
|[[Image:layer-bottom-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|layer-delete&lt;br /&gt;
|Delete layer&lt;br /&gt;
|[[Image:layer-delete.png]]&lt;br /&gt;
|[[Image:layer-delete-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|layer-lower&lt;br /&gt;
|Move layer down&lt;br /&gt;
|[[Image:layer-lower.png]]&lt;br /&gt;
|[[Image:layer-lower-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|layer-new&lt;br /&gt;
|Create a new layer&lt;br /&gt;
|[[Image:layer-new.png]]&lt;br /&gt;
|[[Image:layer-new-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|layer-next&lt;br /&gt;
|Go to the layer below current&lt;br /&gt;
|[[Image:layer-next.png]]&lt;br /&gt;
|[[Image:layer-next-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|layer-previous&lt;br /&gt;
|Go to the layer above current&lt;br /&gt;
|[[Image:layer-previous.png]]&lt;br /&gt;
|[[Image:layer-previous-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|layer-raise&lt;br /&gt;
|Move layer up&lt;br /&gt;
|[[Image:layer-raise.png]]&lt;br /&gt;
|[[Image:layer-raise-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|layer-rename&lt;br /&gt;
|Rename the layer&lt;br /&gt;
|[[Image:layer-rename.png]]&lt;br /&gt;
|[[Image:layer-rename-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|layer-top&lt;br /&gt;
|Move layer to the top&lt;br /&gt;
|[[Image:layer-top.png]]&lt;br /&gt;
|[[Image:layer-top-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-add&lt;br /&gt;
|Add a node&lt;br /&gt;
|[[Image:node-add.png]]&lt;br /&gt;
|[[Image:node-add-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-break&lt;br /&gt;
|Split a node into two disjoint nodes&lt;br /&gt;
|[[Image:node-break.png]]&lt;br /&gt;
|[[Image:node-break-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-delete-segment&lt;br /&gt;
|Remove a path segment between two nodes&lt;br /&gt;
|[[Image:node-delete-segment.png]]&lt;br /&gt;
|[[Image:node-delete-segment-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-delete&lt;br /&gt;
|Delete a node&lt;br /&gt;
|[[Image:node-delete.png]]&lt;br /&gt;
|[[Image:node-delete-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-join-segment&lt;br /&gt;
|Create a path segment between two nodes&lt;br /&gt;
|[[Image:node-join-segment.png]]&lt;br /&gt;
|[[Image:node-join-segment-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-join&lt;br /&gt;
|Join two nodes into one&lt;br /&gt;
|[[Image:node-join.png]]&lt;br /&gt;
|[[Image:node-join-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-flip-horizontal&lt;br /&gt;
|Flip horizontally (mirror)&lt;br /&gt;
|[[Image:object-flip-horizontal.png]]&lt;br /&gt;
|[[Image:object-flip-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-flip-vertical&lt;br /&gt;
|Flip vertically&lt;br /&gt;
|[[Image:object-flip-vertical.png]]&lt;br /&gt;
|[[Image:object-flip-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-group&lt;br /&gt;
|Group selected objects&lt;br /&gt;
|[[Image:object-group.png]]&lt;br /&gt;
|[[Image:object-group-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-rotate-left&lt;br /&gt;
|Rotate 90⁰ counter-clockwise&lt;br /&gt;
|[[Image:object-rotate-left.png]]&lt;br /&gt;
|[[Image:object-rotate-left-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-rotate-right&lt;br /&gt;
|Rotate 90⁰ clockwise&lt;br /&gt;
|[[Image:object-rotate-right.png]]&lt;br /&gt;
|[[Image:object-rotate-right-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-to-path&lt;br /&gt;
|Convert object to path&lt;br /&gt;
|[[Image:object-to-path.png]]&lt;br /&gt;
|[[Image:object-to-path-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-attract&lt;br /&gt;
|Attract / repel objects (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-attract.png]]&lt;br /&gt;
|[[Image:object-tweak-attract-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-blur&lt;br /&gt;
|Blur objects  (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-blur.png]]&lt;br /&gt;
|[[Image:object-tweak-blur-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-duplicate&lt;br /&gt;
|Duplicate objects (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-duplicate.png]]&lt;br /&gt;
|[[Image:object-tweak-duplicate-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-jitter-color&lt;br /&gt;
|Jitter objects' colors (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-jitter-color.png]]&lt;br /&gt;
|[[Image:object-tweak-jitter-color-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-paint&lt;br /&gt;
|Paint objects with the tool's color (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-paint.png]]&lt;br /&gt;
|[[Image:object-tweak-paint-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-push&lt;br /&gt;
|Push / pull objects (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-push.png]]&lt;br /&gt;
|[[Image:object-tweak-push-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-randomize&lt;br /&gt;
|Randomly displace objects (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-randomize.png]]&lt;br /&gt;
|[[Image:object-tweak-randomize-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-rotate&lt;br /&gt;
|Rotate objects right / left (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-rotate.png]]&lt;br /&gt;
|[[Image:object-tweak-rotate-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-tweak-shrink&lt;br /&gt;
|Shrink / grow objects (Tweak tool)&lt;br /&gt;
|[[Image:object-tweak-shrink.png]]&lt;br /&gt;
|[[Image:object-tweak-shrink-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-ungroup&lt;br /&gt;
|Ungroup objects&lt;br /&gt;
|[[Image:object-ungroup.png]]&lt;br /&gt;
|[[Image:object-ungroup-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-break-apart&lt;br /&gt;
|Break disjoint parts of a path into separate paths&lt;br /&gt;
|[[Image:path-break-apart.png]]&lt;br /&gt;
|[[Image:path-break-apart-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-clip-edit&lt;br /&gt;
|Edit the clipping path of an object&lt;br /&gt;
|[[Image:path-clip-edit.png]]&lt;br /&gt;
|[[Image:path-clip-edit-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-combine&lt;br /&gt;
|Merge paths into one&lt;br /&gt;
|[[Image:path-combine.png]]&lt;br /&gt;
|[[Image:path-combine-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-cut&lt;br /&gt;
|Cut path&lt;br /&gt;
|[[Image:path-cut.png]]&lt;br /&gt;
|[[Image:path-cut-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-difference&lt;br /&gt;
|Subtract one path from another&lt;br /&gt;
|[[Image:path-difference.png]]&lt;br /&gt;
|[[Image:path-difference-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-division&lt;br /&gt;
|Divide path into disjoined parts where it intersects the second path&lt;br /&gt;
|[[Image:path-division.png]]&lt;br /&gt;
|[[Image:path-division-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-effect-parameter-next&lt;br /&gt;
|Select next path parameter of a path effect&lt;br /&gt;
|[[Image:path-effect-parameter-next.png]]&lt;br /&gt;
|[[Image:path-effect-parameter-next-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-exclusion&lt;br /&gt;
|Remove the common part of two paths&lt;br /&gt;
|[[Image:path-exclusion.png]]&lt;br /&gt;
|[[Image:path-exclusion-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-inset&lt;br /&gt;
|Inset a path&lt;br /&gt;
|[[Image:path-inset.png]]&lt;br /&gt;
|[[Image:path-inset-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-intersection&lt;br /&gt;
|Remove non-common parts of two paths&lt;br /&gt;
|[[Image:path-intersection.png]]&lt;br /&gt;
|[[Image:path-intersection-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-mask-edit&lt;br /&gt;
|Edit the masking path of an object&lt;br /&gt;
|[[Image:path-mask-edit.png]]&lt;br /&gt;
|[[Image:path-mask-edit-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-offset-dynamic&lt;br /&gt;
|Create an adjustable offset&lt;br /&gt;
|[[Image:path-offset-dynamic.png]]&lt;br /&gt;
|[[Image:path-offset-dynamic-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-offset-linked&lt;br /&gt;
|Create a linked offset that updates whenever the linked path changes&lt;br /&gt;
|[[Image:path-offset-linked.png]]&lt;br /&gt;
|[[Image:path-offset-linked-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-outset&lt;br /&gt;
|Outset a path&lt;br /&gt;
|[[Image:path-outset.png]]&lt;br /&gt;
|[[Image:path-outset-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-reverse&lt;br /&gt;
|Reverse the direction of the path&lt;br /&gt;
|[[Image:path-reverse.png]]&lt;br /&gt;
|[[Image:path-reverse-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-simplify&lt;br /&gt;
|Simplify the path&lt;br /&gt;
|[[Image:path-simplify.png]]&lt;br /&gt;
|[[Image:path-simplify-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-tweak-attract&lt;br /&gt;
|Attract / repel paths&lt;br /&gt;
|[[Image:path-tweak-attract.png]]&lt;br /&gt;
|[[Image:path-tweak-attract-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-tweak-push&lt;br /&gt;
|Push paths&lt;br /&gt;
|[[Image:path-tweak-push.png]]&lt;br /&gt;
|[[Image:path-tweak-push-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-tweak-roughen&lt;br /&gt;
|roughen paths&lt;br /&gt;
|[[Image:path-tweak-roughen.png]]&lt;br /&gt;
|[[Image:path-tweak-roughen-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-tweak-shrink&lt;br /&gt;
|Shrink / grow paths&lt;br /&gt;
|[[Image:path-tweak-shrink.png]]&lt;br /&gt;
|[[Image:path-tweak-shrink-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-union&lt;br /&gt;
|Union paths&lt;br /&gt;
|[[Image:path-union.png]]&lt;br /&gt;
|[[Image:path-union-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|rectangle-make-corners-sharp&lt;br /&gt;
|Remove rounded corners from a rectangle&lt;br /&gt;
|[[Image:rectangle-make-corners-sharp.png]]&lt;br /&gt;
|[[Image:rectangle-make-corners-sharp-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|selection-bottom&lt;br /&gt;
|Move selection to the bottom&lt;br /&gt;
|[[Image:selection-bottom.png]]&lt;br /&gt;
|[[Image:selection-bottom-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|selection-lower&lt;br /&gt;
|Move selection down&lt;br /&gt;
|[[Image:selection-lower.png]]&lt;br /&gt;
|[[Image:selection-lower-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|selection-make-bitmap-copy&lt;br /&gt;
|Create a bitmap copy of the selected objects&lt;br /&gt;
|[[Image:selection-make-bitmap-copy.png]]&lt;br /&gt;
|[[Image:selection-make-bitmap-copy-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|selection-move-to-layer-above&lt;br /&gt;
|Move the selection one layer up&lt;br /&gt;
|[[Image:selection-move-to-layer-above.png]]&lt;br /&gt;
|[[Image:selection-move-to-layer-above-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|selection-move-to-layer-below&lt;br /&gt;
|Move selection one layer down&lt;br /&gt;
|[[Image:selection-move-to-layer-below.png]]&lt;br /&gt;
|[[Image:selection-move-to-layer-below-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|selection-raise&lt;br /&gt;
|Move selection up&lt;br /&gt;
|[[Image:selection-raise.png]]&lt;br /&gt;
|[[Image:selection-raise-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|selection-top&lt;br /&gt;
|Move selection to the top&lt;br /&gt;
|[[Image:selection-top.png]]&lt;br /&gt;
|[[Image:selection-top-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|show-dialogs&lt;br /&gt;
|Show / hide dialogs&lt;br /&gt;
|[[Image:show-dialogs.png]]&lt;br /&gt;
|[[Image:show-dialogs-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|show-grid&lt;br /&gt;
|Toggle grid&lt;br /&gt;
|[[Image:show-grid.png]]&lt;br /&gt;
|[[Image:show-grid-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|show-guides&lt;br /&gt;
|Toggle guides&lt;br /&gt;
|[[Image:show-guides.png]]&lt;br /&gt;
|[[Image:show-guides-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|stroke-to-path&lt;br /&gt;
|Convert the object's stroke to a path&lt;br /&gt;
|[[Image:stroke-to-path.png]]&lt;br /&gt;
|[[Image:stroke-to-path-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|text-convert-to-regular&lt;br /&gt;
|Convert flowed text to regular text&lt;br /&gt;
|[[Image:text-convert-to-regular.png]]&lt;br /&gt;
|[[Image:text-convert-to-regular-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-horizontal-baseline&lt;br /&gt;
|Distribute text baseline anchors horizontally&lt;br /&gt;
|[[Image:text-distribute-baseline-horizontal.png]]&lt;br /&gt;
|[[Image:text-distribute-baseline-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|distribute-vertical-baseline&lt;br /&gt;
|Distribute text baseline anchors vertically&lt;br /&gt;
|[[Image:text-distribute-baseline-vertical.png]]&lt;br /&gt;
|[[Image:text-distribute-baseline-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|text-flow-into-frame&lt;br /&gt;
|Flow text into a path frame&lt;br /&gt;
|[[Image:text-flow-into-frame.png]]&lt;br /&gt;
|[[Image:text-flow-into-frame-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|text-put-on-path&lt;br /&gt;
|Put text on a path&lt;br /&gt;
|[[Image:text-put-on-path.png]]&lt;br /&gt;
|[[Image:text-put-on-path-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|text-remove-from-path&lt;br /&gt;
|Remove text from a path&lt;br /&gt;
|[[Image:text-remove-from-path.png]]&lt;br /&gt;
|[[Image:text-remove-from-path-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|text-unflow&lt;br /&gt;
|Remove text from a flow frame&lt;br /&gt;
|[[Image:text-unflow.png]]&lt;br /&gt;
|[[Image:text-unflow-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|text-unkern&lt;br /&gt;
|Remove manual kerning&lt;br /&gt;
|[[Image:text-unkern.png]]&lt;br /&gt;
|[[Image:text-unkern-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|tool-node-editor&lt;br /&gt;
|Node tool&lt;br /&gt;
|[[Image:tool-node-editor.png]]&lt;br /&gt;
|[[Image:tool-node-editor-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|tool-pointer&lt;br /&gt;
|Select tool&lt;br /&gt;
|[[Image:tool-pointer.png]]&lt;br /&gt;
|[[Image:tool-pointer-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|tool-tweak&lt;br /&gt;
|Tweak tool&lt;br /&gt;
|[[Image:tool-tweak.png]]&lt;br /&gt;
|[[Image:tool-tweak-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-move-horizontal&lt;br /&gt;
|Move object horizontally (Transform dialog)&lt;br /&gt;
|[[Image:transform-move-horizontal.png]]&lt;br /&gt;
|[[Image:transform-move-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-move-vertical&lt;br /&gt;
|Move object vertically (Transform dialog)&lt;br /&gt;
|[[Image:transform-move-vertical.png]]&lt;br /&gt;
|[[Image:transform-move-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-rotate&lt;br /&gt;
|Rotate an object (Transform dialog)&lt;br /&gt;
|[[Image:transform-rotate.png]]&lt;br /&gt;
|[[Image:transform-rotate-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|transform-scale-horizontal&lt;br /&gt;
|Scale an object horizontally (Transform dialog)&lt;br /&gt;
|[[Image:transform-scale-horizontal.png]]&lt;br /&gt;
|[[Image:transform-scale-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-scale-vertical&lt;br /&gt;
|Scale an object vertically (Transform dialog)&lt;br /&gt;
|[[Image:transform-scale-vertical.png]]&lt;br /&gt;
|[[Image:transform-scale-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-skew-horizontal&lt;br /&gt;
|Skew an object horizontally (Transform dialog)&lt;br /&gt;
|[[Image:transform-skew-horizontal.png]]&lt;br /&gt;
|[[Image:transform-skew-horizontal-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-skew-vertical&lt;br /&gt;
|Skew an object vertically (Transform dialog)&lt;br /&gt;
|[[Image:transform-skew-vertical.png]]&lt;br /&gt;
|[[Image:transform-skew-vertical-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|window-next&lt;br /&gt;
|Next window&lt;br /&gt;
|[[Image:window-next.png]]&lt;br /&gt;
|[[Image:window-next-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|window-previous&lt;br /&gt;
|Previous window&lt;br /&gt;
|[[Image:window-previous.png]]&lt;br /&gt;
|[[Image:window-previous-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|xml-attribute-delete&lt;br /&gt;
|Delete an XML attribute&lt;br /&gt;
|[[Image:xml-attribute-delete.png]]&lt;br /&gt;
|[[Image:xml-attribute-delete-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|xml-element-new&lt;br /&gt;
|Create an XML element node&lt;br /&gt;
|[[Image:xml-element-new.png]]&lt;br /&gt;
|[[Image:xml-element-new-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|xml-node-delete&lt;br /&gt;
|Delete an XML node&lt;br /&gt;
|[[Image:xml-node-delete.png]]&lt;br /&gt;
|[[Image:xml-node-delete-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|xml-node-duplicate&lt;br /&gt;
|Duplicate an XML node&lt;br /&gt;
|[[Image:xml-node-duplicate.png]]&lt;br /&gt;
|[[Image:xml-node-duplicate-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|xml-text-new&lt;br /&gt;
|Create an XML text node&lt;br /&gt;
|[[Image:xml-text-new.png]]&lt;br /&gt;
|[[Image:xml-text-new-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-double-size&lt;br /&gt;
|Zoom 2:1&lt;br /&gt;
|[[Image:zoom-double-size.png]]&lt;br /&gt;
|[[Image:zoom-double-size-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-fit-drawing&lt;br /&gt;
|Zoom to fit objects on the page&lt;br /&gt;
|[[Image:zoom-fit-drawing.png]]&lt;br /&gt;
|[[Image:zoom-fit-drawing-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-fit-page&lt;br /&gt;
|Zoom to fit page&lt;br /&gt;
|[[Image:zoom-fit-page.png]]&lt;br /&gt;
|[[Image:zoom-fit-page-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-fit-selection&lt;br /&gt;
|Zoom to fit selection&lt;br /&gt;
|[[Image:zoom-fit-selection.png]]&lt;br /&gt;
|[[Image:zoom-fit-selection-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-fit-width&lt;br /&gt;
|Zoom to fit the page's width&lt;br /&gt;
|[[Image:zoom-fit-width.png]]&lt;br /&gt;
|[[Image:zoom-fit-width-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-half-size&lt;br /&gt;
|Zoom 1:2&lt;br /&gt;
|[[Image:zoom-half-size.png]]&lt;br /&gt;
|[[Image:zoom-half-size-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-in&lt;br /&gt;
|Increase zoom&lt;br /&gt;
|[[Image:zoom-in.png]]&lt;br /&gt;
|[[Image:zoom-in-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-next&lt;br /&gt;
|Redo zoom&lt;br /&gt;
|[[Image:zoom-next.png]]&lt;br /&gt;
|[[Image:zoom-next-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-original&lt;br /&gt;
|Zoom 1:1&lt;br /&gt;
|[[Image:zoom-original.png]]&lt;br /&gt;
|[[Image:zoom-original-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-out&lt;br /&gt;
|Decrease zoom&lt;br /&gt;
|[[Image:zoom-out.png]]&lt;br /&gt;
|[[Image:zoom-out-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom-previous&lt;br /&gt;
|Undo zoom&lt;br /&gt;
|[[Image:zoom-previous.png]]&lt;br /&gt;
|[[Image:zoom-previous-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|zoom&lt;br /&gt;
|Zoom tool&lt;br /&gt;
|[[Image:zoom.png]]&lt;br /&gt;
|[[Image:zoom-tango.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Places==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Icon name&lt;br /&gt;
!Description&lt;br /&gt;
!Icon&lt;br /&gt;
!Tango&lt;br /&gt;
!ALS/INS?&lt;br /&gt;
|-&lt;br /&gt;
|dialog-align-and-distribute&lt;br /&gt;
|Align and Distribute dialog&lt;br /&gt;
|[[Image:dialog-align-and-distribute.png]]&lt;br /&gt;
|[[Image:dialog-align-and-distribute-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-fill-and-stroke&lt;br /&gt;
|Fill and Stroke dialog&lt;br /&gt;
|[[Image:dialog-fill-and-stroke.png]]&lt;br /&gt;
|[[Image:dialog-fill-and-stroke-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-icon-preview&lt;br /&gt;
|Icon Preview dialog&lt;br /&gt;
|[[Image:dialog-icon-preview.png]]&lt;br /&gt;
|[[Image:dialog-icon-preview-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-input-devices&lt;br /&gt;
|Input Devices dialog&lt;br /&gt;
|[[Image:dialog-input.png]]&lt;br /&gt;
|[[Image:dialog-input-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-layers&lt;br /&gt;
|Layers dialog&lt;br /&gt;
|[[Image:dialog-layers.png]]&lt;br /&gt;
|[[Image:dialog-layers-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-memory&lt;br /&gt;
|About Memory dialog&lt;br /&gt;
|[[Image:dialog-memory.png]]&lt;br /&gt;
|[[Image:dialog-memory-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-messages&lt;br /&gt;
|Messages dialog (message stack)&lt;br /&gt;
|[[Image:dialog-messages.png]]&lt;br /&gt;
|[[Image:dialog-messages-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-object-properties&lt;br /&gt;
|Object Properties dialog&lt;br /&gt;
|[[Image:dialog-object-properties.png]]&lt;br /&gt;
|[[Image:dialog-object-properties-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-rows-and-columns&lt;br /&gt;
|Rows and Columns dialog (grid arrange)&lt;br /&gt;
|[[Image:dialog-rows-and-columns.png]]&lt;br /&gt;
|[[Image:dialog-rows-and-columns-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-scripts&lt;br /&gt;
|Scripts dialog&lt;br /&gt;
|[[Image:dialog-scripts.png]]&lt;br /&gt;
|[[Image:dialog-scripts-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-text-and-font&lt;br /&gt;
|Text and Font dialog&lt;br /&gt;
|[[Image:dialog-text-and-font.png]]&lt;br /&gt;
|[[Image:dialog-text-and-font-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-tile-clones&lt;br /&gt;
|Create Tiled Clones dialog&lt;br /&gt;
|[[Image:dialog-tile-clones.png]]&lt;br /&gt;
|[[Image:dialog-tile-clones-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-transform&lt;br /&gt;
|Apply an arbitrary transformation to an object&lt;br /&gt;
|[[Image:object-transform.png]]&lt;br /&gt;
|[[Image:object-transform-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|dialog-xml-editor&lt;br /&gt;
|XML Editor dialog&lt;br /&gt;
|[[Image:dialog-xml-editor.png]]&lt;br /&gt;
|[[Image:dialog-xml-editor-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|grid-axonometric&lt;br /&gt;
|Axonometric grid&lt;br /&gt;
|[[Image:grid-axonometric.png]]&lt;br /&gt;
|[[Image:grid-axonometric-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|grid-rectangular&lt;br /&gt;
|Rectangular (XY) grid&lt;br /&gt;
|[[Image:grid-rectangular.png]]&lt;br /&gt;
|[[Image:grid-rectangular-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|guides&lt;br /&gt;
|&lt;br /&gt;
|[[Image:guides.png]]&lt;br /&gt;
|[[Image:show-guides-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-columns&lt;br /&gt;
|&lt;br /&gt;
|[[Image:object-columns.png]]&lt;br /&gt;
|[[Image:object-columns-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-rows&lt;br /&gt;
|&lt;br /&gt;
|[[Image:object-rows.png]]&lt;br /&gt;
|[[Image:object-rows-tango.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Status==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Icon name&lt;br /&gt;
!Description&lt;br /&gt;
!Icon&lt;br /&gt;
!Tango&lt;br /&gt;
!ALS/INS?&lt;br /&gt;
|-&lt;br /&gt;
|connector-avoid&lt;br /&gt;
|&lt;br /&gt;
|[[Image:connector-avoid.png]]&lt;br /&gt;
|[[Image:connector-avoid-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|connector-ignore&lt;br /&gt;
|&lt;br /&gt;
|[[Image:connector-ignore.png]]&lt;br /&gt;
|[[Image:connector-ignore-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-ellipse-arc&lt;br /&gt;
|Arc mode of the Ellipse tool&lt;br /&gt;
|[[Image:draw-ellipse-arc.png]]&lt;br /&gt;
|[[Image:draw-ellipse-arc-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-ellipse-segment&lt;br /&gt;
|Segment mode of the Ellipse tool&lt;br /&gt;
|[[Image:draw-ellipse-segment.png]]&lt;br /&gt;
|[[Image:draw-ellipse-segment-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-ellipse-whole&lt;br /&gt;
|Draw whole ellipses instead of arcs or segments&lt;br /&gt;
|[[Image:draw-ellipse-whole.png]]&lt;br /&gt;
|[[Image:draw-ellipse-whole-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-eraser-delete-objects&lt;br /&gt;
|&lt;br /&gt;
|[[Image:draw-eraser-delete-objects.png]]&lt;br /&gt;
|[[Image:draw-eraser-delete-objects-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-polygon&lt;br /&gt;
|Polygon mode of the Polygon tool&lt;br /&gt;
|[[Image:draw-polygon.png]]&lt;br /&gt;
|[[Image:draw-polygon-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|draw-star&lt;br /&gt;
|Star mode of the Polygon tool&lt;br /&gt;
|[[Image:draw-star.png]]&lt;br /&gt;
|[[Image:draw-star-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|draw-trace-background&lt;br /&gt;
|Trace background lightness with the stroke width&lt;br /&gt;
|[[Image:draw-trace-background.png]]&lt;br /&gt;
|[[Image:draw-trace-background-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-use-pressure&lt;br /&gt;
|Use pressure reading from tablet when drawing&lt;br /&gt;
|[[Image:draw-use-pressure.png]]&lt;br /&gt;
|[[Image:draw-use-pressure-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|draw-use-tilt&lt;br /&gt;
|Use tilt reading from the tablet when drawing&lt;br /&gt;
|[[Image:draw-use-tilt.png]]&lt;br /&gt;
|[[Image:draw-use-tilt-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|fill-rule-even-odd&lt;br /&gt;
|&lt;br /&gt;
|[[Image:fill-rule-even-odd.png]]&lt;br /&gt;
|[[Image:fill-rule-even-odd-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|fill-rule-nonzero&lt;br /&gt;
|&lt;br /&gt;
|[[Image:fill-rule-nonzero.png]]&lt;br /&gt;
|[[Image:fill-rule-nonzero-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-segment-curve&lt;br /&gt;
|&lt;br /&gt;
|[[Image:node-segment-curve.png]]&lt;br /&gt;
|[[Image:node-segment-curve-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-segment-line&lt;br /&gt;
|&lt;br /&gt;
|[[Image:node-segment-line.png]]&lt;br /&gt;
|[[Image:node-segment-line-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-type-auto-smooth&lt;br /&gt;
|&lt;br /&gt;
|[[Image:node-type-auto-smooth.png]]&lt;br /&gt;
|[[Image:node-type-auto-smooth-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-type-cusp&lt;br /&gt;
|&lt;br /&gt;
|[[Image:node-type-cusp.png]]&lt;br /&gt;
|[[Image:node-type-cusp-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-type-smooth&lt;br /&gt;
|&lt;br /&gt;
|[[Image:node-type-smooth.png]]&lt;br /&gt;
|[[Image:node-type-smooth-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|node-type-symmetric&lt;br /&gt;
|&lt;br /&gt;
|[[Image:node-type-symmetric.png]]&lt;br /&gt;
|[[Image:node-type-symmetric-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-fill&lt;br /&gt;
|&lt;br /&gt;
|[[Image:object-fill.png]]&lt;br /&gt;
|[[Image:object-fill-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-hidden&lt;br /&gt;
|Object or layer is invisible&lt;br /&gt;
|[[Image:object-hidden.png]]&lt;br /&gt;
|[[Image:object-hidden-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-locked&lt;br /&gt;
|Object or layer cannot be modified&lt;br /&gt;
|[[Image:object-locked.png]]&lt;br /&gt;
|[[Image:object-locked-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-stroke-style&lt;br /&gt;
|&lt;br /&gt;
|[[Image:object-stroke-style.png]]&lt;br /&gt;
|[[Image:object-stroke-style-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-stroke&lt;br /&gt;
|&lt;br /&gt;
|[[Image:object-stroke.png]]&lt;br /&gt;
|[[Image:object-stroke-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-unlocked&lt;br /&gt;
|Object or layer can be modified&lt;br /&gt;
|[[Image:object-unlocked.png]]&lt;br /&gt;
|[[Image:object-unlocked-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|object-visible&lt;br /&gt;
|Object or layer is visible&lt;br /&gt;
|[[Image:object-visible.png]]&lt;br /&gt;
|[[Image:object-visible-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|paint-gradient-linear&lt;br /&gt;
|&lt;br /&gt;
|[[Image:fill-gradient-linear.png]]&lt;br /&gt;
|[[Image:fill-gradient-linear-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|paint-gradient-radial&lt;br /&gt;
|&lt;br /&gt;
|[[Image:fill-gradient-radial.png]]&lt;br /&gt;
|[[Image:fill-gradient-radial-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|paint-none&lt;br /&gt;
|Paint is set to empty&lt;br /&gt;
|[[Image:fill-none.png]]&lt;br /&gt;
|[[Image:fill-none-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|paint-pattern&lt;br /&gt;
|Pattern paint&lt;br /&gt;
|[[Image:fill-pattern.png]]&lt;br /&gt;
|[[Image:fill-pattern-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|paint-solid&lt;br /&gt;
|Single color solid paint&lt;br /&gt;
|[[Image:fill-flat.png]]&lt;br /&gt;
|[[Image:fill-flat-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|paint-unknown&lt;br /&gt;
|Paint is inherited or unknown&lt;br /&gt;
|[[Image:fill-unknown.png]]&lt;br /&gt;
|[[Image:fill-unknown-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-mode-bezier&lt;br /&gt;
|&lt;br /&gt;
|[[Image:path-mode-bezier.png]]&lt;br /&gt;
|[[Image:path-mode-bezier-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-mode-polyline&lt;br /&gt;
|&lt;br /&gt;
|[[Image:path-mode-segments.png]]&lt;br /&gt;
|[[Image:path-mode-segments-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-mode-polyline-paraxial&lt;br /&gt;
|&lt;br /&gt;
|[[Image:path-mode-paraxial-segments.png]]&lt;br /&gt;
|[[Image:path-mode-paraxial-segments-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|path-mode-spiro&lt;br /&gt;
|&lt;br /&gt;
|[[Image:path-mode-spiro.png]]&lt;br /&gt;
|[[Image:path-mode-spiro-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|perspective-parallel&lt;br /&gt;
|Toggle whether an axis in a perspective has a vanishing point&lt;br /&gt;
|[[Image:perspective-parallel.png]]&lt;br /&gt;
|[[Image:perspective-parallel-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap&lt;br /&gt;
|Global snap toggle&lt;br /&gt;
|[[Image:snap.png]]&lt;br /&gt;
|[[Image:snap-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-bounding-box&lt;br /&gt;
|Toggle bounding box snapping&lt;br /&gt;
|[[Image:snap-bounding-box.png]]&lt;br /&gt;
|[[Image:snap-bounding-box-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-bounding-box-center&lt;br /&gt;
|Toggle snapping between bounding box centers&lt;br /&gt;
|[[Image:snap-bounding-box-center.png]]&lt;br /&gt;
|[[Image:snap-bounding-box-center-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-bounding-box-corners&lt;br /&gt;
|Toggle snapping between bounding box corners&lt;br /&gt;
|[[Image:snap-bounding-box-corners.png]]&lt;br /&gt;
|[[Image:snap-bounding-box-corners-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-bounding-box-edges&lt;br /&gt;
|Toggle snapping between bounding box edges&lt;br /&gt;
|[[Image:snap-bounding-box-edges.png]]&lt;br /&gt;
|[[Image:snap-bounding-box-edges-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-bounding-box-midpoints&lt;br /&gt;
|Toggle snapping between bounding box edge midpoints&lt;br /&gt;
|[[Image:snap-bounding-box-midpoints.png]]&lt;br /&gt;
|[[Image:snap-bounding-box-midpoints-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-grid-guide-intersections&lt;br /&gt;
|Toggle snapping to intersections between the grid and guides&lt;br /&gt;
|[[Image:snap-grid-guide-intersections.png]]&lt;br /&gt;
|[[Image:snap-grid-guide-intersections-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-nodes&lt;br /&gt;
|Toggle snapping nodes&lt;br /&gt;
|[[Image:snap-nodes.png]]&lt;br /&gt;
|[[Image:snap-nodes-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-nodes-center&lt;br /&gt;
|Toggle snapping nodes to centers of objects&lt;br /&gt;
|[[Image:snap-nodes-center.png]]&lt;br /&gt;
|[[Image:snap-nodes-center-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-nodes-cusp&lt;br /&gt;
|Toggle snapping nodes to cusp nodes&lt;br /&gt;
|[[Image:snap-nodes-cusp.png]]&lt;br /&gt;
|[[Image:snap-nodes-cusp-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-nodes-intersection&lt;br /&gt;
|Toggle snapping nodes to intersections&lt;br /&gt;
|[[Image:snap-nodes-intersection.png]]&lt;br /&gt;
|[[Image:snap-nodes-intersection-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-nodes-midpoint&lt;br /&gt;
|Toggle snapping nodes to edge midpoints&lt;br /&gt;
|[[Image:snap-nodes-midpoint.png]]&lt;br /&gt;
|[[Image:snap-nodes-midpoint-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-nodes-path&lt;br /&gt;
|Toggle snapping nodes to paths&lt;br /&gt;
|[[Image:snap-nodes-path.png]]&lt;br /&gt;
|[[Image:snap-nodes-path-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-nodes-rotation-center&lt;br /&gt;
|Toggle snapping nodes to rotation centers of objects&lt;br /&gt;
|[[Image:snap-nodes-rotation-center.png]]&lt;br /&gt;
|[[Image:snap-nodes-rotation-center-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-nodes-smooth&lt;br /&gt;
|Togle snapping nodes to smooth nodes&lt;br /&gt;
|[[Image:snap-nodes-smooth.png]]&lt;br /&gt;
|[[Image:snap-nodes-smooth-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|snap-page&lt;br /&gt;
|Toggle snapping to page border&lt;br /&gt;
|[[Image:snap-page.png]]&lt;br /&gt;
|[[Image:snap-page-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|stroke-cap-butt&lt;br /&gt;
|&lt;br /&gt;
|[[Image:stroke-cap-butt.png]]&lt;br /&gt;
|[[Image:stroke-cap-butt-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|stroke-cap-round&lt;br /&gt;
|&lt;br /&gt;
|[[Image:stroke-cap-round.png]]&lt;br /&gt;
|[[Image:stroke-cap-round-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|stroke-cap-square&lt;br /&gt;
|&lt;br /&gt;
|[[Image:stroke-cap-square.png]]&lt;br /&gt;
|[[Image:stroke-cap-square-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|stroke-join-bevel&lt;br /&gt;
|&lt;br /&gt;
|[[Image:stroke-join-bevel.png]]&lt;br /&gt;
|[[Image:stroke-join-bevel-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|stroke-join-miter&lt;br /&gt;
|&lt;br /&gt;
|[[Image:stroke-join-miter.png]]&lt;br /&gt;
|[[Image:stroke-join-miter-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|stroke-join-round&lt;br /&gt;
|&lt;br /&gt;
|[[Image:stroke-join-round.png]]&lt;br /&gt;
|[[Image:stroke-join-round-tango.png]]&lt;br /&gt;
|{{yes}}&lt;br /&gt;
|-&lt;br /&gt;
|transform-affect-gradient&lt;br /&gt;
|Transform gradients along with objects&lt;br /&gt;
|[[Image:transform-affect-gradient.png]]&lt;br /&gt;
|[[Image:transform-affect-gradient-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-affect-pattern&lt;br /&gt;
|Transform patterns along with objects&lt;br /&gt;
|[[Image:transform-affect-pattern.png]]&lt;br /&gt;
|[[Image:transform-affect-pattern-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-affect-rounded-corners&lt;br /&gt;
|Transform rounded corners along with rectangles&lt;br /&gt;
|[[Image:transform-affect-rounded-corners.png]]&lt;br /&gt;
|[[Image:transform-affect-rounded-corners-tango.png]]&lt;br /&gt;
|-&lt;br /&gt;
|transform-affect-stroke&lt;br /&gt;
|Scale stroke width when transforming&lt;br /&gt;
|[[Image:transform-affect-stroke.png]]&lt;br /&gt;
|[[Image:transform-affect-stroke-tango.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Icons]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=User_Interface_Modules&amp;diff=87902</id>
		<title>User Interface Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=User_Interface_Modules&amp;diff=87902"/>
		<updated>2012-12-26T15:18:17Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Dialogs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Discussion and documentation about specific Inkscape dialogs, widgets, tools and more inside the [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/ src/ui] directory.&lt;br /&gt;
&lt;br /&gt;
== Dialogs ==&lt;br /&gt;
&lt;br /&gt;
By extension, a '''dialog''' in Inkscape vocabulary is any type of window, i.e. a set of widgets with an OS decoration, a title...&lt;br /&gt;
&lt;br /&gt;
All dialogs are in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/dialog src/ui/dialog] (except for old dialogs).&lt;br /&gt;
&lt;br /&gt;
* [[About Dialog]]: The ''About Inkscape'' dialog&lt;br /&gt;
* [[Align and Distribute Dialog]]: The ''Align and distribute'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::Behavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::DockBehavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::FloatingBehavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::CaligraphicProfileRename]]&lt;br /&gt;
* [[Close Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ColorItem]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DebugDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DesktopTracker]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DialogManager]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DocumentMetadata]]: The ''Document metadatas'' dialog&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/Document Metadata]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DocumentProperties]]: The ''Document properties'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ExtensionEditor]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ExtensionPanel]]&lt;br /&gt;
* [[Export Bitmap Dialog]]&lt;br /&gt;
** [[Export Bitmap Dialog Re-Design]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/Export Bitmap]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogBaseGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogBaseWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogOCALBase]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileImportFromOCALDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileListViewText]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialogImplGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialogImplGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialogImplWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialogImplWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileExportDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileExportDialogImpl]]&lt;br /&gt;
* [[Stroke Dialog]]&lt;br /&gt;
** [[Fill and Stroke Dialog Re-Design]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FilterEffectsDialog]]&lt;br /&gt;
* [[Find Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::GlyphsPanel]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::GuidelinePropertiesDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::IconPreviewPanel]]&lt;br /&gt;
* [[Image Properties Dialog]]&lt;br /&gt;
** [[Image properties dialog enhancements]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::InkscapePreferences]]: The ''Inkscape preferences'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::InputDialog]]&lt;br /&gt;
* [[Layer Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LayerPropertiesDialog]]: The ''Layer properties'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LayersPanel]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LivePathEffectEditor]]&lt;br /&gt;
* [[New Document Dialog]]&lt;br /&gt;
* [[Memory Dialog]]&lt;br /&gt;
* [[Messages Dialog]]&lt;br /&gt;
* [[OCAL Dialog]]&lt;br /&gt;
** [[OCAL Dialog Re-Design]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/OCAL]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::PanelDialogBase]]&lt;br /&gt;
* [[Print Dialog]]: The ''Print...'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::PrintColorsPreviewDialog]]&lt;br /&gt;
* [[Script Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SvgFontsDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SVGPreview]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SwatchesPanel]]&lt;br /&gt;
* [[SymbolsDialog|Symbols Dialog]]&lt;br /&gt;
* [[Tablet Dialog]]&lt;br /&gt;
* [[Text Dialog]]&lt;br /&gt;
* [[Tile Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::TraceDialog]]&lt;br /&gt;
** [[Trace Bitmap Dialog Re-Design]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Transformation]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::UndoHistory]]: The ''Undo history'' dialog&lt;br /&gt;
&lt;br /&gt;
Dialogs that have not yet been rewritted can be found in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/dialogs src/dialogs].&lt;br /&gt;
&lt;br /&gt;
=== Others re-designs ===&lt;br /&gt;
&lt;br /&gt;
* [[Andrews Big Dialog Re-Design]]&lt;br /&gt;
* [[Andrews Big Dialog Re-Design/Embed or Link]]&lt;br /&gt;
* [[FindReplaceDialog]]&lt;br /&gt;
* [[DialogsReorganization]]&lt;br /&gt;
&lt;br /&gt;
== Widgets ==&lt;br /&gt;
&lt;br /&gt;
Widgets are implemented in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/widget src/ui/widget].&lt;br /&gt;
&lt;br /&gt;
* [[Class Inkscape::UI::Widget::ColorPreview]]: A simple color preview widget, mainly used within a picker button&lt;br /&gt;
* [[Class Inkscape::UI::Widget::ProgressPannel]]&lt;br /&gt;
* [[Class Inkscape::UI::Widget::SpinButton]]: Widget that allows entry of simple math expressions (also units, when linked with UnitMenu), and allows entry of both '.' and ',' for the decimal, even when in numeric mode&lt;br /&gt;
* [[Class Inkscape::UI::Widget::SpinSlider]]: Groups an Gtk::HScale and a Inkscape::UI::Widget::SpinButton together using the same Adjustment&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Also a proposal for a [[Color Entry Widget|Color Entry]].&lt;br /&gt;
&lt;br /&gt;
== src/ui/tools ==&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Toolbars ==&lt;br /&gt;
&lt;br /&gt;
A '''toolbar''' is a set of graphical widgets put around the canvas to provide actions on objects, canvas or documents.&lt;br /&gt;
&lt;br /&gt;
See [[Toolbar]] page for more informations.&lt;br /&gt;
&lt;br /&gt;
== Menu ==&lt;br /&gt;
&lt;br /&gt;
See [[Menu]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Gwyn&amp;diff=87896</id>
		<title>Gwyn</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Gwyn&amp;diff=87896"/>
		<updated>2012-12-26T15:05:06Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Galleries|Back to Galleries]]&lt;br /&gt;
&lt;br /&gt;
A drawing to test the possibilities of Inkscape&lt;br /&gt;
&lt;br /&gt;
upload:cellulare.png&lt;br /&gt;
&lt;br /&gt;
      Cellphone&lt;br /&gt;
&lt;br /&gt;
Original is approx 5cm x 11cm Inkscape svg; available for [http://inkscape.org/wiki_uploads/cellulare.svg download]. It displays well in ksvg but, predictably, is a mess in Scribus (fonts and multiple complex gradients).&lt;br /&gt;
&lt;br /&gt;
Here's a whimsical chip&lt;br /&gt;
&lt;br /&gt;
upload:Chip.png&lt;br /&gt;
&lt;br /&gt;
       Chip&lt;br /&gt;
&lt;br /&gt;
For some reason this one, although less complex, does not display well in ksvg (nor Scribus). Here's the [http://inkscape.org/wiki_uploads/Chip.svg source] for anyone who's interested.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pete Burrows (gwynsoft@tin.it)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Good work! The cellphone renders perfectly in Batik/Adobe, but the chip has a problem with fill-opacity on a gradient in 0.40 and in Batik/Adobe, due to a bug in 0.39. See Known Issues at http://inkscape.org/cgi-bin/wiki.pl?ReleaseNotes for more details and a workaround.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks for the comment. I tried the workaround and it worked well in both ksvg and Scribus, but showed up some other minor problems - looks like I'll have to try this one again... (looking forward to 0.40 in Gentoo).&lt;br /&gt;
&lt;br /&gt;
PB&lt;br /&gt;
&lt;br /&gt;
[[Category:Needs Work]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CompilingMandrake&amp;diff=87878</id>
		<title>CompilingMandrake</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CompilingMandrake&amp;diff=87878"/>
		<updated>2012-12-26T15:00:54Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Building RPM Package on Mandrakelinux 10.1 */ Links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Building RPM Package on Mandrakelinux 10.1 ==&lt;br /&gt;
&lt;br /&gt;
I did it with the src.rpm package available at sf.net.&lt;br /&gt;
The RPM rebuild process is pretty similar to compiling from source but first we need to satisfy the dependencies (the fastest way is Mandrakelinux's ''urpmi''):&lt;br /&gt;
&lt;br /&gt;
# download the [http://prdownloads.sourceforge.net/inkscape/inkscape-0.41-1.src.rpm?download download Inkscape's src.rpm] at sourceforge.net&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi gtk2-devel&amp;lt;/code&amp;gt; (Inkscape 0.41 needs gtk2-devel &amp;gt;= 2.4.0; use [http://easyurpmi.zarb.org/ urpmi source &amp;quot;main&amp;quot;] if you haven't got a CD/DVD with devel packages)&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libpng3&amp;lt;/code&amp;gt; (libpng &amp;gt;= 1.2 is needed)&lt;br /&gt;
# now the '''libgc 6.4+''' is needed. I didn't found or somewhat missed the [http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/ Hans Boehm's gc] package for mdk 10.1, so i downloaded and compiled it like this: &amp;lt;pre&amp;gt;./configure --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
su&lt;br /&gt;
make install&amp;lt;/pre&amp;gt; (in fact i used &amp;lt;code&amp;gt;checkinstall&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; and then &amp;lt;code&amp;gt;urpmi /usr/src/RPM/RPMS/i586/gc-6.4-1luc.i586.rpm&amp;lt;/code&amp;gt;)&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libxml2-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libxslt-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libsigc++2.0_0-devel&amp;lt;/code&amp;gt; (to be found at urpmi source &amp;quot;contrib&amp;quot;)&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libgtkmm2.4_1-devel&amp;lt;/code&amp;gt; (also urpmi source &amp;quot;contrib&amp;quot;)&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi popt-devel&amp;lt;/code&amp;gt; (urpmi source &amp;quot;main&amp;quot;)&lt;br /&gt;
# finally you can perform successfully: &amp;lt;code&amp;gt;rpm -rebuild inkscape-0.41-1.src.rpm&amp;lt;/code&amp;gt; (the resulting RPM package will be probably stored as &amp;lt;code&amp;gt;/usr/src/RPM/RPMS/i586/inkscape-0.41-1.i586.rpm&amp;lt;/code&amp;gt; according to your RPM settings)&lt;br /&gt;
&lt;br /&gt;
''luci''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Update by Chris Hill ubergeek at ubergeek dawt tv&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I had some success with this method, but a couple issues:&lt;br /&gt;
The RPM would die on build because of an 'unpacked file'. So I ended up adding this to the spec file in /usr/src/RPM/SPECS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;%define _unpackaged_files_terminate_build 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I had other dependencies that I could not resolve easily:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
        libgc.so.1 is needed by inkscape-0.42-0&lt;br /&gt;
&lt;br /&gt;
        perl(XML::XQL) is needed by inkscape-0.42-0&lt;br /&gt;
&lt;br /&gt;
        perl(XML::XQL::DOM) is needed by inkscape-0.42-0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
And I had indeed installed libgc, so I ended up installing with nodeps:&lt;br /&gt;
&lt;br /&gt;
rpm -ivh --nodeps inkscape-0.42-0.i586.rpm&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seems to be working fine (its so fast!!), but I might be missing perl/python support.&lt;br /&gt;
&lt;br /&gt;
The HTML needs to be removed.&lt;br /&gt;
[[Category:Developer Documentation]]&lt;br /&gt;
[[Category:Needs Work]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CompilingMandrake&amp;diff=87872</id>
		<title>CompilingMandrake</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CompilingMandrake&amp;diff=87872"/>
		<updated>2012-12-26T15:00:27Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Building RPM Package on Mandrakelinux 10.1 ==&lt;br /&gt;
&lt;br /&gt;
I did it with the src.rpm package available at sf.net.&lt;br /&gt;
The RPM rebuild process is pretty similar to compiling from source but first we need to satisfy the dependencies (the fastest way is Mandrakelinux's ''urpmi''):&lt;br /&gt;
&lt;br /&gt;
# download the [http://prdownloads.sourceforge.net/inkscape/inkscape-0.41-1.src.rpm?download download Inkscape's src.rpm] at sourceforge.net&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi gtk2-devel&amp;lt;/code&amp;gt; (Inkscape 0.41 needs gtk2-devel &amp;gt;= 2.4.0; use [http://easyurpmi.zarb.org/ urpmi source &amp;quot;main&amp;quot;] if you haven't got a CD/DVD with devel packages)&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libpng3&amp;lt;/code&amp;gt; (libpng &amp;gt;= 1.2 is needed)&lt;br /&gt;
# now the '''libgc 6.4+''' is needed. I didn't found or somewhat missed the [http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/ Hans Boehm's gc] package for mdk 10.1, so i downloaded and compiled it like this: &amp;lt;pre&amp;gt;./configure --prefix=/usr&lt;br /&gt;
make&lt;br /&gt;
su&lt;br /&gt;
make install&amp;lt;/pre&amp;gt; (in fact i used &amp;lt;code&amp;gt;checkinstall&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; and then &amp;lt;code&amp;gt;urpmi /usr/src[[/RPM/RPMS/i586/gc]]-6.4-1luc.i586.rpm&amp;lt;/code&amp;gt;)&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libxml2-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libxslt-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libsigc++2.0_0-devel&amp;lt;/code&amp;gt; (to be found at urpmi source &amp;quot;contrib&amp;quot;)&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi libgtkmm2.4_1-devel&amp;lt;/code&amp;gt; (also urpmi source &amp;quot;contrib&amp;quot;)&lt;br /&gt;
# &amp;lt;code&amp;gt;urpmi popt-devel&amp;lt;/code&amp;gt; (urpmi source &amp;quot;main&amp;quot;)&lt;br /&gt;
# finally you can perform successfully: &amp;lt;code&amp;gt;rpm -rebuild inkscape-0.41-1.src.rpm&amp;lt;/code&amp;gt; (the resulting RPM package will be probably stored as &amp;lt;code&amp;gt;/usr/src/RPM/RPMS/i586/inkscape-0.41-1.i586.rpm&amp;lt;/code&amp;gt; according to your RPM settings)&lt;br /&gt;
&lt;br /&gt;
''luci''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Update by Chris Hill ubergeek at ubergeek dawt tv&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I had some success with this method, but a couple issues:&lt;br /&gt;
The RPM would die on build because of an 'unpacked file'. So I ended up adding this to the spec file in /usr/src/RPM/SPECS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;%define _unpackaged_files_terminate_build 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I had other dependencies that I could not resolve easily:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
        libgc.so.1 is needed by inkscape-0.42-0&lt;br /&gt;
&lt;br /&gt;
        perl(XML::XQL) is needed by inkscape-0.42-0&lt;br /&gt;
&lt;br /&gt;
        perl(XML::XQL::DOM) is needed by inkscape-0.42-0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
And I had indeed installed libgc, so I ended up installing with nodeps:&lt;br /&gt;
&lt;br /&gt;
rpm -ivh --nodeps inkscape-0.42-0.i586.rpm&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seems to be working fine (its so fast!!), but I might be missing perl/python support.&lt;br /&gt;
&lt;br /&gt;
The HTML needs to be removed.&lt;br /&gt;
[[Category:Developer Documentation]]&lt;br /&gt;
[[Category:Needs Work]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=PresentationInkscapeOverview&amp;diff=87866</id>
		<title>PresentationInkscapeOverview</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=PresentationInkscapeOverview&amp;diff=87866"/>
		<updated>2012-12-26T14:55:20Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Inkscape: Open Source Scalable Vector Graphics Editor */ Links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Inkscape: Open Source Scalable Vector Graphics Editor ==&lt;br /&gt;
&lt;br /&gt;
* PUT YOUR NAME HERE&lt;br /&gt;
* PUT YOUR AFFILIATION HERE&lt;br /&gt;
&lt;br /&gt;
Inkscape is an open source SVG editor with capabilities similar to Illustrator, [[CorelDraw]], Visio, etc. Supported SVG features include basic shapes, paths, text, alpha blending, transforms, gradients, node editing, svg-to-png export, grouping, and more.&lt;br /&gt;
&lt;br /&gt;
Inkscape's main motivation is to provide the Open Source community with a fully XML, SVG, and CSS2 compliant SVG drawing tool. Additional planned work includes conversion of the codebase from C/Gtk to C++/Gtkmm, emphasizing a lightweight core with powerful features added through an extension mechanism, and establishment of a friendly, open, community-oriented development processes. &lt;br /&gt;
&lt;br /&gt;
In this presentation, Inkscape will be presented and the community development process discussed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
* Scalable Vector Graphics Editor -- Cross-Platform, Open Source, C++ codebase&lt;br /&gt;
* Started in November of 2003 from the [[SodiPodi/Gill]] codebase with 4 devs.&lt;br /&gt;
* Already grown to 10-20 developers by Spring 2004 &amp;amp; still growing&lt;br /&gt;
* This talk is going to be a technical introduction to the project.&lt;br /&gt;
&lt;br /&gt;
=== Scalable Vector Graphics (SVG) ===&lt;br /&gt;
* Like HTML, but for graphics.  XML standard for vector graphics&lt;br /&gt;
* Can write in a text editor using a straightforward &amp;amp; obvious syntax&lt;br /&gt;
* Vector vs. Raster&lt;br /&gt;
** Raster is an array of dots that &amp;quot;appear&amp;quot; to be shapes&lt;br /&gt;
*** Pro:  With sufficient resolution can be photo-realistic&lt;br /&gt;
*** Con:  Takes up lots of space even for simple geometric representations&lt;br /&gt;
*** Con:  Difficult to split into component pieces for further editing&lt;br /&gt;
** Vector is real 2D shapes&lt;br /&gt;
*** Pro:  Geometric representations scalable to any resolution&lt;br /&gt;
*** Pro:  Easy to edit component pieces&lt;br /&gt;
*** Con:  Difficult to do photo-realistic images at small file sizes&lt;br /&gt;
&lt;br /&gt;
=== Cross-Platform &amp;amp; Open Source ===&lt;br /&gt;
* Platforms include Linux/[[UNIX]], Mac OS X, Win32&lt;br /&gt;
* Open Source means:&lt;br /&gt;
** The source code is available for free to the whole world&lt;br /&gt;
** The development process is open to all to participate in and enjoy&lt;br /&gt;
&lt;br /&gt;
=== Uses of Inkscape ===&lt;br /&gt;
* Vector Art&lt;br /&gt;
* Symbology - Logos, Flags, Street Signs&lt;br /&gt;
* Webpage Graphics, Buttons, and Flourishes&lt;br /&gt;
* Visually Attractive Maps, Diagrams, and Technical Drawings&lt;br /&gt;
&lt;br /&gt;
=== Development Community/[[Process]] ===&lt;br /&gt;
* This is a collaborative open source program involving around 10-20 developers from all over the world.&lt;br /&gt;
* It uses the standard open source development process with some smoothed out concepts to make it even more effective.&lt;br /&gt;
* Patch first, discuss later&lt;br /&gt;
* low barrier for developer commit access to CVS&lt;br /&gt;
* uses sourceforge.net&lt;br /&gt;
* Uses Network of Social Software (the key to distributive writing/dev)&lt;br /&gt;
** Website&lt;br /&gt;
** CVS&lt;br /&gt;
** Wiki&lt;br /&gt;
** Mailing List(s) and E-mail&lt;br /&gt;
** Chat (jabber.org)&lt;br /&gt;
* Bus Factor of the project (It has a high one)&lt;br /&gt;
* more?&lt;br /&gt;
&lt;br /&gt;
=== Why is this important? ===&lt;br /&gt;
* In order to define this, one must decide to which community this is important.&lt;br /&gt;
* A production ready software does not exist in the GNU/[[Linux]] world.&lt;br /&gt;
** As you all would be concerned, this type of tool doesn't exist!&lt;br /&gt;
* Art Community&lt;br /&gt;
** It is free.&lt;br /&gt;
** It is high quality and production ready!&lt;br /&gt;
** Supports positive ideals!&lt;br /&gt;
*** Copyright is what it is, but we would like to see more opened up tools and codebases. Promotes development and honesty.&lt;br /&gt;
* Scientific Community&lt;br /&gt;
* Visualization Community&lt;br /&gt;
&lt;br /&gt;
=== Common Misconceptions (Low Hanging Fruit) ===&lt;br /&gt;
* Isn't this just an open source Illustrator?&lt;br /&gt;
* Isn't there X, Y, and Z projects that already do this?&lt;br /&gt;
* Open Source doesn't innovate, it only imitates&lt;br /&gt;
&lt;br /&gt;
=== Problems to be solved ===&lt;br /&gt;
* Not enough viewers&lt;br /&gt;
** solution: mozilla is pushing it&lt;br /&gt;
** solution: inkview&lt;br /&gt;
** solution: adobe svg is pushing hard!!!&lt;br /&gt;
* Our program is not fully compliant yet&lt;br /&gt;
** solution: need more developers and more integration&lt;br /&gt;
&lt;br /&gt;
=== Future ===&lt;br /&gt;
* extension system&lt;br /&gt;
** quicker development&lt;br /&gt;
** don't have to know as much about the internals&lt;br /&gt;
* networked editing (shared space)&lt;br /&gt;
* layers&lt;br /&gt;
* clipart.freedesktop.org&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Also Check the [[TufteStylePresentation]] ===&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=GeneralConferenceAbstract&amp;diff=87860</id>
		<title>GeneralConferenceAbstract</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=GeneralConferenceAbstract&amp;diff=87860"/>
		<updated>2012-12-26T14:54:53Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Overview of Inkscape, a Cross-Platform Open Source Scalable Vector Graphics Drawing Tool */ Links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview of Inkscape, a Cross-Platform Open Source Scalable Vector Graphics Drawing Tool ==&lt;br /&gt;
&lt;br /&gt;
Inkscape is a cross-platform open source Scalable Vector Graphics (SVG) drawing tool with capabilities similar to Illustrator, [[CorelDraw]], Visio, etc. Supported SVG features include basic shapes, paths, text, alpha blending, transforms, gradients, node editing, svg-to-png export, grouping, and more.&lt;br /&gt;
&lt;br /&gt;
Inkscape's main motivation is to provide the Open Source community with a fully XML, SVG, and CSS2 compliant SVG drawing tool. Additional planned work includes conversion of the codebase from C/Gtk to C++/Gtkmm, emphasizing a lightweight core with powerful features added through an extension mechanism, and establishment of a friendly, open, community-oriented development processes.&lt;br /&gt;
&lt;br /&gt;
In this presentation, Inkscape will be presented and the community development process discussed.&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=PressRelease041&amp;diff=87854</id>
		<title>PressRelease041</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=PressRelease041&amp;diff=87854"/>
		<updated>2012-12-26T14:54:33Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* About Inkscape */ Links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;subject line for email:  Announcing Inkscape 0.41 Release . www.inkscape.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Inkscape Announces 0.41 Release . www.inkscape.org =&lt;br /&gt;
&lt;br /&gt;
February 10, 2004 &amp;amp;mdash; The Inkscape community today announced the release of Inkscape 0.41, &amp;quot;A Cross-platform Open Source Vector Graphics (SVG) Drawing Tool.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Inkscape 0.41 focused on bug fixing.  With over 100 bugs fixed since the 0.40 release, this significantly strengthened Inkscape on Windows and support for international users.  With the help of countless users, Inkscape developers fixed several serious crashes, memory leaks and mis-features. The program is now noticeably snappier due to many user submitted bug reports.&lt;br /&gt;
&lt;br /&gt;
Inkscape 0.41 also adds two extremely powerful features. First, the black and white tracing functionality introduced in 0.40 has been improved to also allow conversion of color and grayscale images into vector graphics. Now Inkscape can convert photos, scanned artwork, and other drawn images into editable illustrations in the SVG format. Second, is the addition of a new clone tiler facility which creates patterns, tessellations, and other sorts of geometric tiling arrangements. This aids in the creation of a plethora of patterns and textures through an easy-to-use dialog.&lt;br /&gt;
&lt;br /&gt;
User requests and comments also stimulated a number of improvements to units handling, extensions, the Invert Selection command, layers selector, icon theming, and the addition of several new translations.&lt;br /&gt;
&lt;br /&gt;
A number of large scale changes are planned for the 0.42 release, including converting the user interface to use Gtkmm behind the scenes and the incorporation of a new Document Object Model (DOM) which will provide the core for implementing scripting. The Inkscape community will be busy implementing these changes for the next couple of months and they encourage people to submit bug reports, feature requests, and to contribute code. For more information and to download Inkscape 0.41, visit www.inkscape.org. Draw Freely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== About Inkscape ===&lt;br /&gt;
&lt;br /&gt;
Inkscape is an open source drawing tool that uses the [[W3C]] standard scalable vector graphics format (SVG). Some supported SVG features include basic shapes, paths, text, markers, clones, alpha blending, transforms, gradients, and grouping. In addition, Inkscape supports Creative Commons meta-data, node-editing, layers, complex path operations, text-on-path, and SVG XML editing. It also imports several formats like EPS, Postscript, JPEG, PNG, BMP, and TIFF and exports PNG as well as multiple vector-based formats.&lt;br /&gt;
&lt;br /&gt;
Inkscape's main motivation is to provide the Open Source community with a fully [[W3C]] compliant XML, SVG, and CSS2 drawing tool. Additional planned work includes conversion of the codebase from C/Gtk to C++/Gtkmm, emphasizing a lightweight core with powerful features added through an extension mechanism, and the establishment of a friendly, open, community-oriented development processes.&lt;br /&gt;
&lt;br /&gt;
[[Category:Marketing]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=ScriptingLanguages&amp;diff=87848</id>
		<title>ScriptingLanguages</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=ScriptingLanguages&amp;diff=87848"/>
		<updated>2012-12-26T14:53:31Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I believe that EMCAScript (which is basically the same as JS) is a very good addition as it is standardized by W3C and has a ready defined binding to SVG [http://http://www.w3.org/TR/SVG11/ecmascript-binding.html W3C Link to EMCAScript - SVG]. This would be a great shortcut to accessing the SVG structure for non XML geeks ;) &lt;br /&gt;
--[[User:Xpressivo|Xpressivo]] 15:55, 2 July 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Lilypond is a musical typesetter.  All of its internal structure is exported via scheme.  I think inkscape should aim for this as it has paid off for lilypond in reduced time in adding functionality and ease of tweaking.  My personal preference is python, being a language which sucks in new users at a phenominal rate, and provides the [http://www.boost.org/ Boost] [http://www.boost.org/libs/python/doc/index.html Seamless Python] integration.&lt;br /&gt;
&lt;br /&gt;
Scripting allows many more developers to contribute, and allows new ideas to be prototyped essentially on the spot.&lt;br /&gt;
&lt;br /&gt;
I think the core scripting interface should be relatively simple and language-neutral, like [[The_Gimp]]'s PDB, though object-oriented.  A slightly perverse idea might be to use the Ruby interpreter's excellent C API for this purpose.  But that's just one idea.&lt;br /&gt;
&lt;br /&gt;
Another great scripting language is called [http://www.lua.org Lua]: very small footprint, great flexibility, can be easily embedded into any C/C++ application without any strings attached (LGPL). [http://www.lua.org Lua] is being largely used for game development.  There are cases from Microsoft and Lucas Arts using it.&lt;br /&gt;
&lt;br /&gt;
Another idea is to start extending with [http://www.corba.org CORBA], while it is a bit combersome to start out with, we end up not having to support individual languages.  I think with a few examples of functionality implemented in those languages it would be easy for many people to pick up closely.  The list of supported languages for [http://www.gnome.org/projects/ORBit2/index.html ORBit] is pretty large, and something we could build on.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Corba's C++ binding is nasty, though, which IMO has a great deal to do with why it's not more prevalent.  I think, for the sake of bindings to other languages, all we really neede is a very thin wrapper layer that adds the necessary reflection facilities to C++'s in order for a language like Python or Ruby or whatever to generate bindings dynamically at runtime.&lt;br /&gt;
&lt;br /&gt;
Oh, and we need to draw the line at simple reflection stuff (class membership, class name, method names and prototypes), or else we really will end up reimplementing CORBA (badly) all over again...&lt;br /&gt;
&lt;br /&gt;
-- [[User:MenTaLguY|MenTaLguY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I think the key here is coming up with a way to load the modules in, independent of what language they are in - then lanuage bindings can grow and grow - but always be useful.  I'll start some more discussion on this in [[ModuleFormat]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Probably the best thing is to work on the concepts to be exposed. Once they are specified, then it's easy to implement the exposure in different languages.&lt;br /&gt;
&lt;br /&gt;
Of course, some decisions need to be made as to what to potentially support. This would apply to potential scripting languages and to potential features. Think of both the tasks to accomplish and of the languages to accomplish them in.&lt;br /&gt;
&lt;br /&gt;
For an example of the tasks/concepts, we could think of a raster paint program (like [[The Gimp]] or [[PhotoShop]]). These deal with raster images. Additionally, it's nice to be able to work on images with different numbers of channels, different bit-depths and different colorspaces. The [[PhotoShop]] &lt;br /&gt;
plugin API has supported all of this for years. Sadly, [[The Gimp]] did not at the begining. Thus problems with working in CMYK or in bit depths neede for Hollywood work both have been problematic for [[The Gimp]] and its plugins.&lt;br /&gt;
&lt;br /&gt;
Blocking future functionality, I think, is the main thing that Inkscape needs to avoid. As [[MenTaLguY]] has said, it's best if plugins were first-class citizens. So what needs to be exposed?&lt;br /&gt;
&lt;br /&gt;
Things off the top of my head:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-Document&lt;br /&gt;
  |-XML / parse tree&lt;br /&gt;
  |-view tree&lt;br /&gt;
&lt;br /&gt;
-UI Thingies / dialogs / user interaction&lt;br /&gt;
&lt;br /&gt;
-Utility calls / factories&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- [[User:JonCruz|JonCruz]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
More than one language to write extensions can help the development.&lt;br /&gt;
&lt;br /&gt;
The [http://www.mozilla.org/js/spidermonkey/ [[SpiderMonkey]]] is a great javascript engine, used by Mozilla web browser, and implements the [http://www.mozilla.org/js/language/js20/ [[JavaScript]] 2.0] specification.&lt;br /&gt;
&lt;br /&gt;
[[JavaScript]] is a easy language and is the defined language to animate SVG. With the powerfull 2.0 version we can do good extensions to Inkscape.&lt;br /&gt;
&lt;br /&gt;
The [[AST]] is a great idea to manipulate the SVG, but may we access in the same DOM used to [[DHTML]]. And it will be natural to DHTML scripters and developers.&lt;br /&gt;
&lt;br /&gt;
It's written in C, is fast and low weight. I'm waiting to write new effects to Inkscape with my prefered language! :-)&lt;br /&gt;
&lt;br /&gt;
-- [[User:AurelioAHeckert|AurelioAHeckert]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SubsystemRearchitecture&amp;diff=87842</id>
		<title>SubsystemRearchitecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SubsystemRearchitecture&amp;diff=87842"/>
		<updated>2012-12-26T14:52:45Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Subsystems Summary */ Links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{outdated}}&lt;br /&gt;
{{DevDiscussion}}&lt;br /&gt;
== Subsystems Summary ==&lt;br /&gt;
&lt;br /&gt;
 Namespace                  Link   Audience   Lib Name        Directory&lt;br /&gt;
 Inkscape::Document         C++    Internal   libinkdoc       src/document&lt;br /&gt;
 Inkscape::Extension        C++    Internal   libinkext       src/extension&lt;br /&gt;
 Inkscape::SVG::Object      C++    Internal   libinksvgobj    src/svg/object/&lt;br /&gt;
 Inkscape::UI               C++    Internal   libinkui        src/ui/&lt;br /&gt;
 Inkscape::UI::Dialogs      C++    Internal   libinkuidlg     src/ui/dialogs&lt;br /&gt;
 Inkscape::UI::Widgets      C++    Internal   libinkuiwdg     src/ui/widgets&lt;br /&gt;
 SVG::Canvas                C/C++  Community  libsvgcanvas    src/svgcanvas&lt;br /&gt;
 SVG::DOM                   C/C++  Community  libsvgdom       src/svgdom&lt;br /&gt;
&lt;br /&gt;
 Cairo                      C      (dep)      libcairo        (external)&lt;br /&gt;
 Pango                      C      (dep)      libpango        (external)&lt;br /&gt;
&lt;br /&gt;
== Descriptions of Proposed Subsystems ==&lt;br /&gt;
&lt;br /&gt;
Inkscape::Document - This is a high level wrapper for the application's&lt;br /&gt;
document model, and basically just subclasses SVG::DOM, adding some&lt;br /&gt;
Inkscape-specific aspects.&lt;br /&gt;
&lt;br /&gt;
Inkscape::Extension - This namespace encapsulates the various mechanisms&lt;br /&gt;
for extending the Inkscape application, including import/export&lt;br /&gt;
mechanisms, GUI plugins, stdin/stdout programs, language bindings, etc.&lt;br /&gt;
&lt;br /&gt;
Inkscape::SVG::Object - This will include SPObject and its children&lt;br /&gt;
&lt;br /&gt;
Inkscape::UI - Namespace for Inkscape-specific User Interface elements,&lt;br /&gt;
including view &amp;amp; controller aspects.&lt;br /&gt;
&lt;br /&gt;
Inkscape::UI::Dialogs - dialogs for Inkscape&lt;br /&gt;
&lt;br /&gt;
Inkscape::UI::Widgets - widgets that are particular to Inkscape; if they&lt;br /&gt;
seem to be of general use, they will be migrated into a separate library&lt;br /&gt;
to share with other applications in a more general fashion.&lt;br /&gt;
&lt;br /&gt;
SVG::Canvas - A distinct deliverable Inkscape provides to the Open&lt;br /&gt;
Source community for implementing an SVG-based drawing surface, for use&lt;br /&gt;
in other applications.  Initially will be made up of similar subsystems&lt;br /&gt;
shared with Inkscape but be a separate package, but ultimately should be&lt;br /&gt;
a packaged dependency of Inkscape.&lt;br /&gt;
&lt;br /&gt;
SVG::DOM - This is a Document Object Model for SVG documents.  It is the&lt;br /&gt;
key dependency for SVG::Canvas, and thus is also something Inkscape&lt;br /&gt;
provides externally to the Open Source community.  Internally, it is&lt;br /&gt;
implemented as a C++ class hierarchy, but externally can be linked to&lt;br /&gt;
using either C or C++ style linkage.  The externally presented API would&lt;br /&gt;
be standard DOM.&lt;br /&gt;
&lt;br /&gt;
Cairo - Switching to Cairo will occur late in the rearchitecturing&lt;br /&gt;
process.  We need to ensure Cairo provides the capabilities already&lt;br /&gt;
present in libnr.  Completing other areas of rearchitecting will help&lt;br /&gt;
get the codebase organized for conversion of it to Cairo, without&lt;br /&gt;
taking undue risk in adopting a different underlying renderer.&lt;br /&gt;
&lt;br /&gt;
Pango - Conversion to Pango from libnrtype may be worth doing earlier&lt;br /&gt;
than Cairo since the existing text system lacks many needed features,&lt;br /&gt;
however this will need to be researched in more depth to determine the&lt;br /&gt;
feasibility and cost/benefit.  Unless a clear benefit is identified to&lt;br /&gt;
performing the change early, we should conduct the change along with the&lt;br /&gt;
Cairoification.&lt;br /&gt;
&lt;br /&gt;
== Rearchitecturing Translation Map ==&lt;br /&gt;
&lt;br /&gt;
This shows how items in the [http://www.inkscape.org/doc/devdocs.php current block diagram] would be &lt;br /&gt;
converted into the new subsystem architecture.&lt;br /&gt;
&lt;br /&gt;
 Existing             Proposed&lt;br /&gt;
 GUI&lt;br /&gt;
   Dialogs       --&amp;gt;  Inkscape::UI::Dialogs&lt;br /&gt;
   Widgets       --&amp;gt;  Inkscape::UI::Widgets, [[GtkDrawmm]]&lt;br /&gt;
   XML Editor    --&amp;gt;  Inkscape::UI::Dialogs&lt;br /&gt;
 View            --&amp;gt;  Inkscape::UI&lt;br /&gt;
 SPAction        --&amp;gt;  Inkscape::UI&lt;br /&gt;
 verbs           --&amp;gt;  Inkscape::UI&lt;br /&gt;
 shortcuts       --&amp;gt;  Inkscape::UI&lt;br /&gt;
 SVG DOM         --&amp;gt;  Inkscape::Document, libsvgdom&lt;br /&gt;
 SVG Canvas      --&amp;gt;  libsvgcanvas&lt;br /&gt;
 Module          --&amp;gt;  Inkscape::Module&lt;br /&gt;
 Display         --&amp;gt;  Cairo&lt;br /&gt;
 libnr           --&amp;gt;  Cairo&lt;br /&gt;
 libnrtype       --&amp;gt;  Pango&lt;br /&gt;
 SPSVGView       --&amp;gt;  SVG::Canvas&lt;br /&gt;
 [[SPSVGViewWidget]] --&amp;gt;  SVG::Canvas&lt;br /&gt;
 src/svg/*       --&amp;gt;  eliminate&lt;br /&gt;
 SPObject        --&amp;gt;  Inkscape::SVG::Object   (and to /src/svg/object/)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 SPRepr -&amp;gt; Inkscape::XML::Node&lt;br /&gt;
 [[SPReprDoc]] -&amp;gt; Inkscape::XML::Document&lt;br /&gt;
 [[SPReprAttr]] -&amp;gt; Inkscape::XML::[[AttributeRecord]]&lt;br /&gt;
 [[SPReprAction]] -&amp;gt; Inkscape::XML::Event&lt;br /&gt;
 [[SPReprEventVector]] -&amp;gt; Inkscape::XML::[[NodeEventVector]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Category:Dialogs&amp;diff=87830</id>
		<title>Category:Dialogs</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Category:Dialogs&amp;diff=87830"/>
		<updated>2012-12-26T14:41:14Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Created page with &amp;quot;Category:User Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Category:Widgets&amp;diff=87824</id>
		<title>Category:Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Category:Widgets&amp;diff=87824"/>
		<updated>2012-12-26T14:41:04Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Created page with &amp;quot;Category:User Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CurrentColorWidget&amp;diff=87818</id>
		<title>CurrentColorWidget</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CurrentColorWidget&amp;diff=87818"/>
		<updated>2012-12-26T14:37:39Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As a first step towards color palette, each document window needs a current color widget. It may be placed e.g. in the bottom left corner instead of the &amp;quot;scale when resizing window&amp;quot; button which is to be removed (this must be a global setting in [[PreferencesDialog]]). Here's what we need to do:&lt;br /&gt;
&lt;br /&gt;
* The widget itself is just two small concentric rectangles; the inner displays fill color, the outer, stroke color. If there is transparency, a checkered background should show through. It must also display gradients and other fill types. (can we use a small arena for this, with the actual SVG template rendered with the current style?)&lt;br /&gt;
&lt;br /&gt;
* The widget reflects the current color of the fill and stroke, which are properties local to SPDesktop. It is stored as RGBA values (displaying patterns and gradients may be added later). The widget responds to the [[SetColorSignal]] to change its displayed color. &lt;br /&gt;
&lt;br /&gt;
* Click on the current color widget must bring up the fill&amp;amp;stroke dialog with fill tab. Shift+click must show the stroke tab.&lt;br /&gt;
&lt;br /&gt;
Also each desktop must store the current stroke style (or only width?). Show and make it selectable (drop-down) somewhere near the current color widget.&lt;br /&gt;
&lt;br /&gt;
[[Category:Needs Work]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SymbolsDialog&amp;diff=87812</id>
		<title>SymbolsDialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SymbolsDialog&amp;diff=87812"/>
		<updated>2012-12-26T14:33:42Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Dialogs Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=Symbols Dialog=&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
Allows copying and pasting symbols (&amp;lt;symbol&amp;gt; elements) from both the document being edited and from symbol libraries.&lt;br /&gt;
&lt;br /&gt;
== Use ==&lt;br /&gt;
&lt;br /&gt;
* Open ''Symbol dialog'':&lt;br /&gt;
** Object -&amp;gt; Symbol dialog..., or&lt;br /&gt;
** Ctrl-Shift-Y. (Note, the shortcut was used for Edit-&amp;gt;Undo. I am guessing that this shortcut is pretty unused.)&lt;br /&gt;
&lt;br /&gt;
* Select symbol set&lt;br /&gt;
&lt;br /&gt;
* Drag and drop symbol into document, or&lt;br /&gt;
* Copy and paste by&lt;br /&gt;
** Click on symbol to copy to clipboard&lt;br /&gt;
** Paste (Ctrl-V) to document.&lt;br /&gt;
&lt;br /&gt;
== Symbol Libraries ==&lt;br /&gt;
&lt;br /&gt;
Symbol libraries are sets of symbols located in one SVG document. Inkscape will look for libraries in the ''share/symbols'' directories (both system and personal). Any &amp;lt;symbol&amp;gt; elements defined in the &amp;lt;defs&amp;gt; section will be picked up. (&amp;lt;symbol&amp;gt; elements are allowed anywhere in an SVG document according to the spec, but Inkscape seems to have some trouble if they are not in the &amp;lt;defs&amp;gt; section.)&lt;br /&gt;
&lt;br /&gt;
In order to allow styling of symbols from within Inkscape, styling should be kept out of &amp;lt;symbol&amp;gt; elements as much as possible. It is then possible for a symbol to inherit the styling of the &amp;lt;use&amp;gt; element that references it. In order to provide a default style to a &amp;lt;symbol&amp;gt; one can either provide a general default style in the root &amp;lt;svg&amp;gt; element of the library or add a symbol specific default style by putting a style string in the  &amp;quot;inkscape:symbol-style&amp;quot; attribute inside the symbol element. When a symbol is selected in the Symbol dialog, the style will be added to the &amp;lt;use&amp;gt; element in the clipboard.&lt;br /&gt;
&lt;br /&gt;
Note that as a symbol library is an ordinary SVG file, one can also include documentation and/or sample diagrams in the same file.&lt;br /&gt;
&lt;br /&gt;
There are two sample sets of symbols, one with Logic symbols and with AIGA/DOT transportation symbols.&lt;br /&gt;
&lt;br /&gt;
Visio stencil files (.vss) can also be used as a source of symbols by dropping the files into the ''share/symbols'' directory (if libvisio has been linked in).&lt;br /&gt;
&lt;br /&gt;
== Editing Symbols ==&lt;br /&gt;
&lt;br /&gt;
Two commands are available to allow editing of symbols from within Inkscape:&lt;br /&gt;
&lt;br /&gt;
* '''Object-&amp;gt;Symbol to Group''':&lt;br /&gt;
&lt;br /&gt;
This converts the &amp;lt;symbol&amp;gt; referenced by the selected &amp;lt;use&amp;gt; element to a group located in the untransformed position of the symbol. The new group is left selected. Any &amp;lt;use&amp;gt; element (clone) that referenced the symbol should be left referencing the group. No default styling is applied to the group itself (since there is no &amp;lt;use&amp;gt; element to inherit it from).&lt;br /&gt;
&lt;br /&gt;
* '''Object-&amp;gt;Group to Symbol'''&lt;br /&gt;
&lt;br /&gt;
This converts a selected group to a &amp;lt;symbol&amp;gt; element. No &amp;lt;use&amp;gt; element is created. Any &amp;lt;use&amp;gt; elements that referenced the group will now reference the symbol. The new symbol can be selected in the Symbol dialog in the ''Current Document'' Symbol set. (You may need to unselect and then reselect the ''Current Document'' set to get the symbol to show.)&lt;br /&gt;
&lt;br /&gt;
A lot of alternative ways were tried to be able to round-trip symbols to groups and back. This method seemed the most straight forward and avoids issues with transforms and styling.&lt;br /&gt;
&lt;br /&gt;
Copying (Ctrl-C) and then pasting a symbol, or duplicating a symbol creates a new &amp;lt;use&amp;gt; element (clone) referencing the same symbol.&lt;br /&gt;
&lt;br /&gt;
To copy a &amp;lt;symbol&amp;gt; for creating a new &amp;lt;symbol&amp;gt;, first convert the symbol to a group, copy the group, edit the copied group, and convert both groups back to symbols (give the new group a useful &amp;quot;id&amp;quot; and &amp;quot;title&amp;quot; using the Object Properties dialog). &lt;br /&gt;
&lt;br /&gt;
== Bugs/Issues ==&lt;br /&gt;
&lt;br /&gt;
* Switching Desktop should switch Document Symbol set. (At the moment this is not an issue as each desktop gets its own Symbol dialog.)&lt;br /&gt;
* Symbol to Group/Group to Symbol should trigger an update to the symbols shown in the Symbol dialog when symbol set ''Current Document'' is selected.&lt;br /&gt;
* Editing a symbol should result in updating the image in the Symbol's dialog.&lt;br /&gt;
* Symbols have not been tested well inside Inkscape.&lt;br /&gt;
* Symbols referring to external elements (gradients, etc.) probably won't work.&lt;br /&gt;
* Symbols can have their own viewbox, this has not been tested.&lt;br /&gt;
* Inkscape gives the &amp;lt;use&amp;gt; element linking to a symbols a width and height of 1. This is incorrect and leads to rendering errors in other SVG renderers. Width and height (as well as x and y) should not be set unless explicitly given. This needs to be fixed. A work-around is to set overflow=&amp;quot;visible&amp;quot; in a &amp;lt;symbol&amp;gt;.&lt;br /&gt;
* &amp;quot;GLib-CRITICAL **: g_strsplit: assertion `string != NULL' failed&amp;quot; error occur often.&lt;br /&gt;
&lt;br /&gt;
== Future Enhancements ==&lt;br /&gt;
&lt;br /&gt;
* Generic symbols: It should be possible to extend the Symbol dialog to include &amp;lt;g&amp;gt; elements as well as &amp;lt;symbol&amp;gt; elements. A group could be marked as a symbol by adding an &amp;quot;inkscape:symbol&amp;quot; tag. In this way one can put place holders in for things like text:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;g role=&amp;quot;inkscape:symbol&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;symbol id=&amp;quot;wrapperBox&amp;quot;&amp;gt;...&amp;lt;/symbol&amp;gt;&lt;br /&gt;
 &amp;lt;text id=&amp;quot;label&amp;quot;&amp;gt;...&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/g&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Connectors: Symbols beg for the use of connectors. It would be easy to define connection points inside a symbol. The Logic symbols include extra nodes to make snapping of input/output lines to the correct places easier. These nodes would be better defined as connection points. Work on an [http://dev.w3.org/SVG/modules/connector/SVGConnector.html SVG Connector] proposal is in progress.&lt;br /&gt;
&lt;br /&gt;
[[Category:Dialogs]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=User_Interface_Modules&amp;diff=87806</id>
		<title>User Interface Modules</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=User_Interface_Modules&amp;diff=87806"/>
		<updated>2012-12-26T14:33:06Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: /* Dialogs */ Add Symbols Dialog&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Discussion and documentation about specific Inkscape dialogs, widgets, tools and more inside the [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/ src/ui] directory.&lt;br /&gt;
&lt;br /&gt;
== Dialogs ==&lt;br /&gt;
&lt;br /&gt;
By extension, a '''dialog''' in Inkscape vocabulary is any type of window, i.e. a set of widgets with an OS decoration, a title...&lt;br /&gt;
&lt;br /&gt;
All dialogs are in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/dialog src/ui/dialog] (except for old dialogs).&lt;br /&gt;
&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::AboutBox]]: The ''About Inkscape'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::AlignAndDistribute]]: The ''Align and distribute'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::Behavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::DockBehavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Behavior::FloatingBehavior]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::CaligraphicProfileRename]]&lt;br /&gt;
* [[Close Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ColorItem]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DebugDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DesktopTracker]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DialogManager]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DocumentMetadata]]: The ''Document metadatas'' dialog&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/Document Metadata]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::DocumentProperties]]: The ''Document properties'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ExtensionEditor]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ExtensionPanel]]&lt;br /&gt;
* [[Export Bitmap Dialog]]&lt;br /&gt;
** [[Export Bitmap Dialog Re-Design]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/Export Bitmap]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogBaseGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogBaseWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileDialogOCALBase]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileImportFromOCALDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileListViewText]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialogImplGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialogImplGtk]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileOpenDialogImplWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileSaveDialogImplWin32]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileExportDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FileExportDialogImpl]]&lt;br /&gt;
* [[Stroke Dialog]]&lt;br /&gt;
** [[Fill and Stroke Dialog Re-Design]]&lt;br /&gt;
** [[Class Inkscape::UI::Dialog::FillAndStroke]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::FilterEffectsDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Find]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::GlyphsPanel]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::GuidelinePropertiesDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::IconPreviewPanel]]&lt;br /&gt;
* [[Image Properties Dialog]]&lt;br /&gt;
** [[Image properties dialog enhancements]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::InkscapePreferences]]: The ''Inkscape preferences'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::InputDialog]]&lt;br /&gt;
* [[Layer Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LayerPropertiesDialog]]: The ''Layer properties'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LayersPanel]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::LivePathEffectEditor]]&lt;br /&gt;
* [[New Document Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Memory]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Messages]]&lt;br /&gt;
* [[OCAL Dialog]]&lt;br /&gt;
** [[OCAL Dialog Re-Design]]&lt;br /&gt;
** [[Andrews Big Dialog Re-Design/OCAL]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::PanelDialogBase]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Print]]: The ''Print...'' dialog&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::PrintColorsPreviewDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::ScriptDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SvgFontsDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SVGPreview]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::SwatchesPanel]]&lt;br /&gt;
* [[SymbolsDialog|Symbols Dialog]]&lt;br /&gt;
* [[Tablet Dialog]]&lt;br /&gt;
* [[Text Dialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::TileDialog]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::TraceDialog]]&lt;br /&gt;
** [[Trace Bitmap Dialog Re-Design]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::Transformation]]&lt;br /&gt;
* [[Class Inkscape::UI::Dialog::UndoHistory]]: The ''Undo history'' dialog&lt;br /&gt;
&lt;br /&gt;
Dialogs that have not yet been rewritted can be found in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/dialogs src/dialogs].&lt;br /&gt;
&lt;br /&gt;
=== Others re-designs ===&lt;br /&gt;
&lt;br /&gt;
* [[Andrews Big Dialog Re-Design]]&lt;br /&gt;
* [[Andrews Big Dialog Re-Design/Embed or Link]]&lt;br /&gt;
* [[FindReplaceDialog]]&lt;br /&gt;
* [[DialogsReorganization]]&lt;br /&gt;
&lt;br /&gt;
== Widgets ==&lt;br /&gt;
&lt;br /&gt;
Widgets are implemented in [http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/files/head%3A/src/ui/widget src/ui/widget].&lt;br /&gt;
&lt;br /&gt;
* [[Class Inkscape::UI::Widget::ColorPreview]]: A simple color preview widget, mainly used within a picker button&lt;br /&gt;
* [[Class Inkscape::UI::Widget::ProgressPannel]]&lt;br /&gt;
* [[Class Inkscape::UI::Widget::SpinButton]]: Widget that allows entry of simple math expressions (also units, when linked with UnitMenu), and allows entry of both '.' and ',' for the decimal, even when in numeric mode&lt;br /&gt;
* [[Class Inkscape::UI::Widget::SpinSlider]]: Groups an Gtk::HScale and a Inkscape::UI::Widget::SpinButton together using the same Adjustment&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Also a proposal for a [[Color Entry Widget|Color Entry]].&lt;br /&gt;
&lt;br /&gt;
== src/ui/tools ==&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Toolbars ==&lt;br /&gt;
&lt;br /&gt;
A '''toolbar''' is a set of graphical widgets put around the canvas to provide actions on objects, canvas or documents.&lt;br /&gt;
&lt;br /&gt;
See [[Toolbar]] page for more informations.&lt;br /&gt;
&lt;br /&gt;
== Menu ==&lt;br /&gt;
&lt;br /&gt;
See [[Menu]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Text_Dialog&amp;diff=87800</id>
		<title>Text Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Text_Dialog&amp;diff=87800"/>
		<updated>2012-12-26T14:31:06Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Dialogs Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;GIMP&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:text_gimp.png&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;Inkscape&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:text_inkscape.png&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;Scribus&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:text_scribus.png&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Andreas: Right now, only Scribus lets the user interact directly with the text. I belive a more direct text behavior is planned for Inkscape.&lt;br /&gt;
&lt;br /&gt;
[[Category:Dialogs]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Tablet_Dialog&amp;diff=87794</id>
		<title>Tablet Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Tablet_Dialog&amp;diff=87794"/>
		<updated>2012-12-26T14:30:54Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Dialogs Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Mock Up ==&lt;br /&gt;
More will come here soon, but I've got a rough half mock up of what the new dialog might look like:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Tablet_dialog_new.png]]&lt;br /&gt;
&lt;br /&gt;
== Current State ==&lt;br /&gt;
&lt;br /&gt;
Here is a snapshot of the progress on it as of March 9th. I'm planning on splitting between the hardware itself, and the configuration. The hardware tab will reflect the items actually attached to the computer, and the Configuration tab will have things like Screen/Window mode, key bindings, etc.&lt;br /&gt;
&lt;br /&gt;
[[Image:Dialog_progress.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Splitting those up should allow for the hardware to be set once, and then many different configurations set up for that one hardware set. The hardware tab will let me set the *real* number of buttons per device, since it appears that the drivers list a few more than are always there. Also this will be where to mark an eraser device as matching a stylus device to make up a single physical device.&lt;br /&gt;
&lt;br /&gt;
[[Category:Dialogs]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=New_Document_Dialog&amp;diff=87788</id>
		<title>New Document Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=New_Document_Dialog&amp;diff=87788"/>
		<updated>2012-12-26T14:30:41Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Dialogs Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;GIMP&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;Inkscape&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;Scribus&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:new_gimp.png&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Not Applicable&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:new_scribus.png&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Dialogs]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Layer_Dialog&amp;diff=87782</id>
		<title>Layer Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Layer_Dialog&amp;diff=87782"/>
		<updated>2012-12-26T14:30:28Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Dialogs Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Using the Layers dialog ==&lt;br /&gt;
&lt;br /&gt;
The Layers dialog controls all layer functions: adding new layers, renaming, deleting, arranging, toggling visibility and edit-locking and setting Blend mode and opacity.&lt;br /&gt;
&lt;br /&gt;
[[File:Layer_Dialog.png|200px|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
The Layers dialog can be opened by going to &amp;lt;tt&amp;gt;Layer &amp;gt; Layers...&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Most of the Layer functions are already available in this menu, including:&lt;br /&gt;
*add, duplicate, rename&lt;br /&gt;
*view one layer up/down&lt;br /&gt;
*move selection to layer up/down&lt;br /&gt;
*changing order of layers &lt;br /&gt;
*delete layer&lt;br /&gt;
&lt;br /&gt;
There is also a &amp;lt;tt&amp;gt;View Layers&amp;lt;/tt&amp;gt; shortcut button on the Commands Bar toolbar.&lt;br /&gt;
&lt;br /&gt;
== Work in progress ==&lt;br /&gt;
&lt;br /&gt;
== Suggestions for improvements ==&lt;br /&gt;
&lt;br /&gt;
=== Adobe Illustrator sublayers ===&lt;br /&gt;
It would be good to consider using sublayers like in Illustartor: http://upload.wikimedia.org/wikipedia/en/8/88/Adobe_illustrator_10.png --Host-216-229-237-115.public.southern.edu 15:27, 3 October 2005 &lt;br /&gt;
&lt;br /&gt;
=== drag&amp;amp;drop functionality with opened Layer Dialog ===&lt;br /&gt;
simply make a selection, open the layer dialog, drag the desired Layer on the selection and drop -&amp;gt; the selection is added to the desired Layer--[[User:Touringlonewulf|Touringlonewulf]] 11:28, 23 August 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== additional item in Layers menu ===&lt;br /&gt;
under &amp;quot;move selection up/down&amp;quot; the point: &amp;quot;move selection to layer&amp;quot; -&amp;gt; a new drop down opens, which shows all layers and another point &amp;quot;create new&amp;quot;. Now simply clicking in the drop down list on one layer will move the selection to that layer--[[User:Touringlonewulf|Touringlonewulf]] 11:28, 23 August 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== additional button in Layer Dialog Box ===&lt;br /&gt;
&amp;quot;import bitmap/svg into current layer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
*[[DocumentLayers]]&lt;br /&gt;
* [http://en.flossmanuals.net/Inkscape/Layers Floss Manuals User guide article on Layers in 0.47]&lt;br /&gt;
&lt;br /&gt;
[[Category:Dialogs]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Stroke_Dialog&amp;diff=87776</id>
		<title>Stroke Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Stroke_Dialog&amp;diff=87776"/>
		<updated>2012-12-26T14:30:12Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Code cleanup and add Dialogs Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;GIMP&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;Inkscape&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;Scribus&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:stroke_gimp.png&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center;&amp;quot;&amp;gt;[[Image:stroke_inkscape.png]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:stroke_scribus.png&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Inkscape stroke dialog is what I prefer to call a '''Palette''' and it is intened to be always left open and is deliberately compact.&lt;br /&gt;
&lt;br /&gt;
The GIMP uses a transient dialog which is quite different and follows the GNOME HIG rules for layout of that kind of dialog. This is a perfectly valid approach and for GIMP users. I dont think the stroke options are so important that they need a palette always open taking up space onscreen.&lt;br /&gt;
&lt;br /&gt;
It begs the question does inkscape need a Palette rather than a standard transient dialog?&lt;br /&gt;
&lt;br /&gt;
[[Category:Dialogs]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Close_Dialog&amp;diff=87770</id>
		<title>Close Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Close_Dialog&amp;diff=87770"/>
		<updated>2012-12-26T14:28:30Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Dialogs Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;GIMP&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;Inkscape&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;text-align: center; font-weight: bold;&amp;quot;&amp;gt;Scribus&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:closeimage_gimp.png&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:closeimage_inkscape.png&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;upload:closeimage_scribus.png&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Close dialog used in Inkscape is closest to what is specified in the Gnome Human Interface Guidelines.  &lt;br /&gt;
There has been some discussion on the Gnome list about trying to create a standard Close Dialog to try and get rid of this inconsistency that effects the whole of Gnome.  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Might be of interest: [http://live.gnome.org/UsabilityTeam_2fSaveConfirmationDialogs HIG compliance] (that page is really quite hard to read)&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Discussion]]&lt;br /&gt;
[[Category:Needs Work]]&lt;br /&gt;
[[Category:Dialogs]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Color_Entry_Widget&amp;diff=87764</id>
		<title>Color Entry Widget</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Color_Entry_Widget&amp;diff=87764"/>
		<updated>2012-12-26T14:21:28Z</updated>

		<summary type="html">&lt;p&gt;Romain2Boss: Add Summary and Prepare SVG2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the aims of this blueprint.&lt;br /&gt;
&lt;br /&gt;
== Deal with full SVG 1.1 colors ==&lt;br /&gt;
&lt;br /&gt;
The entry accepts colors as defined by the [http://www.w3.org/TR/SVG/color.html SVG 1.1 Specifications].&lt;br /&gt;
&lt;br /&gt;
SVG 1.1 colors do not handle alpha (it's stored in a separate attribute). We have three options:&lt;br /&gt;
&lt;br /&gt;
# Change nothing and keep displaying the alpha value with the color value by extanding the SVG specification (#RRGGBB =&amp;gt; RRGGBBAA, rgb(255, 255, 255) =&amp;gt; rgba(255, 255, 255, alpha)...).&lt;br /&gt;
# Do like many softwares and display the color in the entry without the alpha (which is displayed in it's own entry). This would probably need a widget rearrangement.&lt;br /&gt;
# Allow both: implement the SVG 1.1 specification (case 2) and keep case 1 as a preparation for SVG 2. This will allow inputs but, because Inkscape files are SVG 1.1, any loaded file will be displayed using case 2.&lt;br /&gt;
&lt;br /&gt;
The third case is proposed.&lt;br /&gt;
&lt;br /&gt;
== Prepare SVG 2 ==&lt;br /&gt;
&lt;br /&gt;
Based on [http://www.w3.org/TR/SVG2/color.html SVG2]. The idea is to be more ''SVG 2 ready''.&lt;br /&gt;
&lt;br /&gt;
=== sRGB colors ===&lt;br /&gt;
&lt;br /&gt;
The HSL format is closed to RGB: no issue.&lt;br /&gt;
&lt;br /&gt;
Some color named are added: no issue.&lt;br /&gt;
&lt;br /&gt;
=== sRGB colors with alpha ===&lt;br /&gt;
&lt;br /&gt;
RGBA and HSLA are added: no issue.&lt;br /&gt;
&lt;br /&gt;
=== ICC and LAB colors ===&lt;br /&gt;
&lt;br /&gt;
To be implemented?&lt;br /&gt;
&lt;br /&gt;
== Keep the user value ==&lt;br /&gt;
&lt;br /&gt;
Colors are stored in the SVG file as specified by the user (i.e. no more forced conversions to hex values). However, for internal purposes, the colors can be stored and handled differently. This would mean having an internal color value (as now) and a display value.&lt;br /&gt;
&lt;br /&gt;
The color sets in the entry is (chronologically):&lt;br /&gt;
&lt;br /&gt;
# First, the color as written in the SVG file (if any)&lt;br /&gt;
# Then, if modified by the user (pasted or typed), the user value&lt;br /&gt;
# Then, if modified by the software (in case of multiple input widgets), the software value&lt;br /&gt;
&lt;br /&gt;
If the alpha is not part of the user input, Inkscape keep the previous one and will not append it in the entry.&lt;br /&gt;
&lt;br /&gt;
== Help the user ==&lt;br /&gt;
&lt;br /&gt;
If the text in the entry cannot be converted to a valid color, the entry changes it's appearance (red border?).&lt;br /&gt;
&lt;br /&gt;
If a color from the palette is dragged and dropped on the entry, it takes the color value.&lt;br /&gt;
&lt;br /&gt;
[[Category:Proposals]]&lt;br /&gt;
[[Category:Widgets]]&lt;/div&gt;</summary>
		<author><name>Romain2Boss</name></author>
	</entry>
</feed>