<?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=Pjrm</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=Pjrm"/>
	<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/Special:Contributions/Pjrm"/>
	<updated>2026-04-08T14:33:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&amp;diff=40664</id>
		<title>Tracking Dependencies</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&amp;diff=40664"/>
		<updated>2008-12-17T06:08:57Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: /* Distros */ Minor: Correct wording for other operating systems&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(stub contents in need of filling out)&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
We need help getting our basic lib dependencies listed out and kept up to date. Also we need to track which versions of which distros have the needed dependencies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get glib and GTK+ dependencies figured out, people can go through the API documentation and look for the 'since' entries saying when calls were added. Then look for those calls in our source. Voila! we'll have base minimum dependencies figured out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Libs ==&lt;br /&gt;
&lt;br /&gt;
C++ bindings are not included, since their required versions match those of the C counterparts.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Library&lt;br /&gt;
! v 0.45&lt;br /&gt;
! v 0.46&lt;br /&gt;
! v 0.47&lt;br /&gt;
|-&lt;br /&gt;
| Boehm-GC&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Cairo&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| GDK&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Glib&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 2.16&lt;br /&gt;
|-&lt;br /&gt;
| GTK+&lt;br /&gt;
| 2.8&lt;br /&gt;
| 2.10&lt;br /&gt;
| 2.12&lt;br /&gt;
|-&lt;br /&gt;
| GNU Scientific Library&lt;br /&gt;
| X&lt;br /&gt;
| X&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| LittleCMS&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 1.13&lt;br /&gt;
|-&lt;br /&gt;
| libxml&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 2.6.11&lt;br /&gt;
|-&lt;br /&gt;
| libxslt&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 1.0.15&lt;br /&gt;
|-&lt;br /&gt;
| Pango&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Poppler&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 0.5.9&lt;br /&gt;
|-&lt;br /&gt;
| libsigc++&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 2.0.12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Functions Used ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function&lt;br /&gt;
! Lib&lt;br /&gt;
! Since&lt;br /&gt;
! Required&lt;br /&gt;
|-&lt;br /&gt;
| g_timeout_add_seconds&lt;br /&gt;
| Glib&lt;br /&gt;
| 2.14&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Distros ==&lt;br /&gt;
&lt;br /&gt;
Note: This table is not relevant to Windows and (non-fink) MacOS X, where we ship the desired version with Inkscape.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Distro&lt;br /&gt;
! cairo&lt;br /&gt;
! glib&lt;br /&gt;
! gtk+&lt;br /&gt;
! pango&lt;br /&gt;
|-&lt;br /&gt;
| Fedora 7&lt;br /&gt;
| ?&lt;br /&gt;
| 2.12&lt;br /&gt;
| 2.10.14&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Fedora 8&lt;br /&gt;
| ?&lt;br /&gt;
| 2.14&lt;br /&gt;
| 2.12.8&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Fedora 9&lt;br /&gt;
| ?&lt;br /&gt;
| 2.16&lt;br /&gt;
| 2.12.10&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Open SuSE 10.3&lt;br /&gt;
| 1.4.14&lt;br /&gt;
| 2.14.1&lt;br /&gt;
| 2.12.0&lt;br /&gt;
| 1.18.2&lt;br /&gt;
|-&lt;br /&gt;
| Open SuSE 11.0&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 2.12.9&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| Ubuntu 7.10 (Gutsy)&lt;br /&gt;
| 1.4.10&lt;br /&gt;
| 2.14.1&lt;br /&gt;
| 2.12.0&lt;br /&gt;
| 1.18.3&lt;br /&gt;
|-&lt;br /&gt;
| Ubuntu 8.04 LTS (Hardy)&lt;br /&gt;
| 1.6.0&lt;br /&gt;
| 2.16.6&lt;br /&gt;
| 2.12.9&lt;br /&gt;
| 1.20.5&lt;br /&gt;
|-&lt;br /&gt;
| Ubuntu 8.10 (Intrepid)&lt;br /&gt;
| 1.8.0&lt;br /&gt;
| 2.18.2&lt;br /&gt;
| 2.14.4&lt;br /&gt;
| 1.22.1&lt;br /&gt;
|-&lt;br /&gt;
| Xandros&lt;br /&gt;
| 1.2.4&lt;br /&gt;
| 2.12.4&lt;br /&gt;
| 2.8.20&lt;br /&gt;
| 1.14.8&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Coding_Style&amp;diff=32524</id>
		<title>Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Coding_Style&amp;diff=32524"/>
		<updated>2008-07-14T13:48:14Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: /* Whitespace: Space between sigil and following token? */ Expand &amp;quot;looks like code&amp;quot; argument to apply to other cases too, as suggested by Johan['s friend].&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;
=== crazyCamelCase 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 coures, 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;
** 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;
=== 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;
&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;
=== 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;
[[Category:Developer Discussion]]&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Coding_Style&amp;diff=32474</id>
		<title>Coding Style</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Coding_Style&amp;diff=32474"/>
		<updated>2008-07-14T12:41:58Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: New section, discussing spacing after sigil&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;
=== crazyCamelCase 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 coures, 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;
** 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;
=== 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;
&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;
=== 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: ‘&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;
[[Category:Developer Discussion]]&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Release_notes/0.47&amp;diff=27704</id>
		<title>Release notes/0.47</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Release_notes/0.47&amp;diff=27704"/>
		<updated>2008-04-12T11:14:47Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: /* Notable bug fixes and effect changes */ query comment about changing old files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Inkscape 0.47=&lt;br /&gt;
'''(not released yet)'''&lt;br /&gt;
&lt;br /&gt;
=Tools=&lt;br /&gt;
&lt;br /&gt;
==Node tool==&lt;br /&gt;
&lt;br /&gt;
* [helper path display, flashing - johan]&lt;br /&gt;
* The Node tool can now edit '''clipping paths''' and '''masks''' of objects on canvas, without releasing them. If the selected object has a clipping path and mask, the corresponding buttons on the controls bar of the tool will be enabled; pressing these buttons will display the editable paths or handles of the clippath or mask. A clipping path is stroked green, a mask is stroked blue (the same colors as those used for them in Outline mode).&lt;br /&gt;
* Snapping has been improved (more details in Snapping below)&lt;br /&gt;
* When dragging a node '''handle with Ctrl''', it now snaps not only to the 15 degree increments starting from 0 and to the original handle direction, but also to the direction of the '''opposite handle''' (if it exists) or of the '''opposite line segment''' (if it is a straight line).&lt;br /&gt;
&lt;br /&gt;
==Calligraphy tool ==&lt;br /&gt;
Added 4 preset buttons for dip, pen, brush and reed in the toolbox. Clicking one button sets the calligraphic tool with the matching presets.&lt;br /&gt;
&lt;br /&gt;
=Live path effects=&lt;br /&gt;
== Notable bug fixes and effect changes==&lt;br /&gt;
We try to refrain from changing the behavior of LPE's, because it will change graphics in old files¹.  But when an effect is really broken, we have to fix it.&lt;br /&gt;
&lt;br /&gt;
[¹ fixme: Shouldn't the above say &amp;quot;it will change editing behaviour in old files&amp;quot; ?  If it changes the appearance, then that's a bug: inkscape should always save SVG that represents the appearance, and should display according to the SVG rather than any inkscape:blah annotations.  --pjrm]&lt;br /&gt;
&lt;br /&gt;
* The Pattern Along Path effect used to stretch the pattern across discontinuities. This has been fixed; now it treats a discontinuous path as a group of continuous paths and applied the effect separately to each.&lt;br /&gt;
&lt;br /&gt;
==New effects==&lt;br /&gt;
[new: sketch, von koch, knot]&lt;br /&gt;
&lt;br /&gt;
* Perspective paths: Draw an arbitrary path as if viewed in perspective. This is work in progress. Known limitations (among others): It can only use the first perspective that exists in the document defs, and the perspective cannot be adapted interactively yet (the effect must be removed and reapplied after modifying the perspective).&lt;br /&gt;
&lt;br /&gt;
* '''Spiro splines''' are a novel way of defining curvilinear paths [http://www.levien.com/spiro/ developed by Raph Levien]. Recently, Spiro support was added to the FontForge font editor, and now it is available in Inkscape too. It takes some getting used to, but for certain tasks Spiros have a clear advantage over Bezier curves.&lt;br /&gt;
&lt;br /&gt;
:A Spiro path is defined by a sequence of points, but unlike a regular path with Bezier curves, all Spiro points lie on the path and there are no off-path handles. The curvature of the path is defined entirely by the positions of the points and their types. The path behaves very similar to a springy rod which is forced to pass through the given points and which uses the minimum possible curvature to satisfy the requirement. As such, it feels quite natural and the resulting path is very smooth - with the kind of smoothness you can achieve with Beziers only after much tweaking. &lt;br /&gt;
&lt;br /&gt;
:To create a Spiro path, select any path and assign the &amp;quot;Spiro spline&amp;quot; path effect to it. There are no parameters. Each node of your path becomes a point of a Spiro path, depending on the type of node:&lt;br /&gt;
&lt;br /&gt;
:* Smooth nodes (those with two collinear Bezier handles) become curve points of the Spiro path; such points bend the curve but must remain smooth. Note that the length or direction of the Bezier handles of the source path is ignored; the only thing that matters is that the node is smooth.&lt;br /&gt;
&lt;br /&gt;
:* Cusp nodes of the source path become corner points of the Spiro path. Between two corner points, the path is always a straight line. &lt;br /&gt;
&lt;br /&gt;
:* Half-smooth nodes - those with one Bezier handle collinear with a straight line segment on the other hand - become &amp;quot;left&amp;quot; or &amp;quot;right&amp;quot; points on the Spiro path which behave exactly the same: they sit between a straight line and a curve and enforce that these two segments join smoothly without a cusp. &lt;br /&gt;
&lt;br /&gt;
:Note that what matters is the actual collinearity of a node's handles, regardless of the node type that the node has in the Node tool; for example, if a cusp (diamond-shaped) node has collinear handles, it will become a curve point of the Spiro path. For creating half-smooth nodes, use Ctrl+dragging of the node handle to make it snap to the direction of the straight line segment on the other side, or press Shift+S to lock it to that direction.&lt;br /&gt;
&lt;br /&gt;
:Some configurations of points do not converge and produce wild loop and spirals instead of a smooth curve. According to Raph, &amp;quot;The spline solver in this release is _not_ numerically robust. When you start drawing random points, you'll quickly run into divergence. However, &amp;quot;sensible&amp;quot; plates based on real fonts usually converge.&amp;quot; Avoid too sharp changes in direction between points to prevent divergence. Hopefully, the robustness of the algorithm will be improved in future releases.&lt;br /&gt;
&lt;br /&gt;
:For now, to edit Spiro paths viewing the result in real time, you have to use the Node tool. The Pen tool does not yet allow you to preview a Spiro as you draw, although you can paste the Spiro effect on the path and see the result as soon as the path is finalized. You can always use the Node tool to continue a Spiro path by duplicating and dragging away its end nodes. Also, when you have a Spiro path selected, you can add a new subpath to it with Pen or Pencil if you start drawing with Shift.&lt;br /&gt;
&lt;br /&gt;
==New features==&lt;br /&gt;
* The '''Paste Path Effect''' command is enabled to assign the path effect of the clipboard to any number of paths, going recursively into groups if necessary.&lt;br /&gt;
&lt;br /&gt;
* A new command, '''Remove path effect''' removes any path effects from all selected objects, going recursively into groups if necessary. &lt;br /&gt;
&lt;br /&gt;
* Along with the commands to open the path effects dialog and to paste path effects, the three commands were collected in a submenu under Path menu.&lt;br /&gt;
&lt;br /&gt;
* Live path effects can now be assigned to the sides of a 3D box (use Ctrl+click to select individual sides).&lt;br /&gt;
&lt;br /&gt;
* The Pen and Pencil tools now correctly work with paths with LPEs: you can continue such a path or add a new subpath to it by drawing with Shift, all preserving the effect applied to it.&lt;br /&gt;
&lt;br /&gt;
* Path type parameters can now link to existing shapes &amp;lt;b&amp;gt;and text&amp;lt;/b&amp;gt;, like clones do. Now it is possible to use text as input for the Pattern Along Path effect for example!&lt;br /&gt;
&lt;br /&gt;
==Live Path Effect for groups==&lt;br /&gt;
&lt;br /&gt;
LPE can now be assigned to a group. For most LPE, the effect is applied recursively but for Bend Path the result is more powerful : the distortion applies on the whole group. &lt;br /&gt;
&lt;br /&gt;
*Original path of the group can as usual be edited by double-clicking. &lt;br /&gt;
*It applies recursively, this means that a LPE can be assigned to groups of groups &lt;br /&gt;
*The Effect can be applied definitively with &amp;quot;Convert Object to path&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Import/Export=&lt;br /&gt;
==Corel DRAW files import==&lt;br /&gt;
&lt;br /&gt;
Now Inkscape can import more Corel DRAW files of following types:&lt;br /&gt;
&lt;br /&gt;
* Corel DRAW Compressed Exchange files (CCX)&lt;br /&gt;
* Corel DRAW 7-X4 Template files (CDT)&lt;br /&gt;
* Corel DRAW Presentation Exchange files (CMX)&lt;br /&gt;
&lt;br /&gt;
Text objects are not supported as of UniConvertor 1.1.1.&lt;br /&gt;
&lt;br /&gt;
==sK1 files import==&lt;br /&gt;
&lt;br /&gt;
Inkscape uses UniConvertor to import sK1 files. Text objects are not supported as of UniConvertor 1.1.1.&lt;br /&gt;
&lt;br /&gt;
==CGM import==&lt;br /&gt;
&lt;br /&gt;
Inkscape uses UniConvertor to import Computer Graphics Metafile (CGM) files. Text objects are not supported as of UniConvertor 1.1.1.&lt;br /&gt;
&lt;br /&gt;
==PDF export==&lt;br /&gt;
&lt;br /&gt;
With PDF export, it is now possible to make the PDF page the size of the entire drawing, instead of the same as SVG page as before by the &amp;quot;Export drawing, not page&amp;quot; checkbox in PDF export options. Also, you can export a single object from a complex document to PDF if you specify the ID of that object in the &amp;quot;Limit export to the object with ID&amp;quot; field; the page of such PDF will be the same size as the bounding box of that object and will show only that object (all others will be hidden).&lt;br /&gt;
&lt;br /&gt;
The same capabilities are available from the command line by using &amp;lt;code&amp;gt;--export-area-drawing&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--export-id=ID&amp;lt;/code&amp;gt; parameters with &amp;lt;code&amp;gt;--export-pdf&amp;lt;/code&amp;gt; (previously, they only worked for PNG export).&lt;br /&gt;
&lt;br /&gt;
=Extension effects=&lt;br /&gt;
==New and improved effects==&lt;br /&gt;
&lt;br /&gt;
* The new '''Text &amp;gt; Convert to Braille''' extension recodes English (or just Latin letters) text to [http://en.wikipedia.org/wiki/Braille Braille] code created for visually impaired people.&lt;br /&gt;
* The new '''Render &amp;gt; Alphabet Soup''' extension is a vector rework of Matt Chrisholm's GPLed script [http://www.theory.org/artprojects/alphabetsoup/main.html]. Alphabet Soup randomly mashes glyph-elements together to make exotic looking text.&lt;br /&gt;
&lt;br /&gt;
=SVG output=&lt;br /&gt;
&lt;br /&gt;
==Optimized CSS properties==&lt;br /&gt;
&lt;br /&gt;
As a file size optimization, Inkscape does not write into SVG some of the stroke properties if the object has stroke:none and some of the fill properties when it has fill:none. The only situation where this might affect you is if you remove stroke from an object and then turn it back on - the object will get the default stroke instead of the same it had before. &lt;br /&gt;
&lt;br /&gt;
Also, in manually-edited SVG where a parent group has no stroke but sets some stroke properties to be inherited by its descendants, you will need to set stroke property to other than none on the group, and suppress inheritance with stroke:none on those children that don't need it.&lt;br /&gt;
&lt;br /&gt;
Specifically, if stroke:none, the following properties do not get written to SVG:&lt;br /&gt;
&lt;br /&gt;
 stroke-width&lt;br /&gt;
 stroke-linecap&lt;br /&gt;
 stroke-linejoin&lt;br /&gt;
 stroke-miterlimit&lt;br /&gt;
 stroke-opacity&lt;br /&gt;
 stroke-dasharray&lt;br /&gt;
 stroke-dashoffset&lt;br /&gt;
&lt;br /&gt;
Note that this does not include marker properties, which means you can still have markers on a path without visible stroke.&lt;br /&gt;
&lt;br /&gt;
If fill:none, the following properties do not get written to SVG:&lt;br /&gt;
&lt;br /&gt;
 fill-opacity&lt;br /&gt;
 fill-rule&lt;br /&gt;
&lt;br /&gt;
==Optimized path data==&lt;br /&gt;
&lt;br /&gt;
In this version, the size of the path data written in the &amp;lt;code&amp;gt;d=&amp;lt;/code&amp;gt; attribute of &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; elements is reduced by about 10%. Inkscape generates the shortest possible path strings by avoiding repeated operators and using relative coordinates (when it helps).&lt;br /&gt;
&lt;br /&gt;
This is controlled by the following attributes in &amp;lt;code&amp;gt;group id=&amp;quot;svgoutput&amp;quot;&amp;lt;/code&amp;gt; in your preferences.xml file:&lt;br /&gt;
&lt;br /&gt;
* allowrelativecoordinates (default 1) to switch relative coordinates on (1) or off (0)&lt;br /&gt;
* forcerepeatcommands (default 0) to force repeating operators (1) or allow use of the more compact representation without repeated operators (0)&lt;br /&gt;
&lt;br /&gt;
=User interface=&lt;br /&gt;
==Filters can be disabled==&lt;br /&gt;
In order to facilitate editing documents that use lots of SVG filter effects, filter effects can now be disabled for a particular document window by selecting '''View|Display mode|No Filters''' from its menu.  This provides an intermediate step between &amp;quot;normal&amp;quot; and &amp;quot;outline&amp;quot; view modes.&lt;br /&gt;
&lt;br /&gt;
The Toggle view command in the Display mode submenu (Ctrl+keypad 5) toggles between the outline view and either regular or no-filters view, depending on which was used most recent.&lt;br /&gt;
&lt;br /&gt;
==Native file dialogs for Windows==&lt;br /&gt;
The windows builds of inkscape now have Windows-native file dialogs to keep consistency with other windows applications.&lt;br /&gt;
&lt;br /&gt;
==Clipboard enhancements==&lt;br /&gt;
&lt;br /&gt;
The clipboard used by Inkscape is now system-wide instead of being confined to a single instance of the application. Copied elements are exported to the clipboard using all the available output formats. SVG data can be pasted into other applications supporting one of Inkscape's output formats, and SVG data provided by other applications can be pasted into Inkscape.&lt;br /&gt;
&lt;br /&gt;
If you copy a string that can be interpreted as a hexadecimal color specification, i.e. 2f7ab4 or #014522b0, and then paste it into Inkscape, the fill of the selected objects will change to the given color. This is especially useful when working with HTML pages.&lt;br /&gt;
&lt;br /&gt;
==Masks and clipping paths==&lt;br /&gt;
&lt;br /&gt;
[editable in node tool - johan]&lt;br /&gt;
&lt;br /&gt;
==Stroke width changeable by dragging==&lt;br /&gt;
&lt;br /&gt;
[bbyak]&lt;br /&gt;
&lt;br /&gt;
==Enhanced Tablet Support==&lt;br /&gt;
&lt;br /&gt;
===Input device tool switching===&lt;br /&gt;
&lt;br /&gt;
Tablets and other input devices that report separate hardware are now recognized and current tool and/or settings can be set to switch in response to the physical tool being used.&lt;br /&gt;
&lt;br /&gt;
===Extended input device configuration===&lt;br /&gt;
&lt;br /&gt;
The stock Input Devices dialog has been replaced with a completely redone version that provides a more useful representation of settings. It also contains a simple area for testing different inputs of different devices.&lt;br /&gt;
&lt;br /&gt;
Additionally hardware setup itself has been separated from general settings to allow for easier dynamic switching of settings appropriate to the task at hand.&lt;br /&gt;
&lt;br /&gt;
==Dropper tool==&lt;br /&gt;
&lt;br /&gt;
The confusing icons on buttons in the controls bar of the Dropper tool (pick/assign opacity) are replaced by text labels.&lt;br /&gt;
&lt;br /&gt;
=Grids, guides, snapping=&lt;br /&gt;
&lt;br /&gt;
==Guides==&lt;br /&gt;
&lt;br /&gt;
There is now an option to treat groups as single objects during conversion to guides (as opposed to converting each object inside the group separately).&lt;br /&gt;
&lt;br /&gt;
==Snapping==&lt;br /&gt;
Snapping has been implemented or improved in these areas:&lt;br /&gt;
* The '''node tool''' now snaps to any unselected node (cusp or smooth) within the path that's being edited, and to cusp nodes of other paths. It also snaps to the path itself, but only to the stationary segments in between two unselected nodes.&lt;br /&gt;
* The object snapper now also allows to snap to the '''page border'''&lt;br /&gt;
&lt;br /&gt;
=Notable bug fixes=&lt;br /&gt;
&lt;br /&gt;
* The '''visual bounding box''' (which is the default bounding box type used by Inkscape) of an object with a filter applied now includes the expanded area of the filter. For '''single blur filter''' (such as the blur you apply with a slider in the Fill and Stroke dialog), this expands the bounding box by 2.4*radius; although theoretically, blur is infinite, this is the distance at which the opacity of the object drops below the perceptibility threshold of our renderer. For all other filters, the area is expanded by the relative amounts you specify on the &amp;quot;Filter general settings&amp;quot; tab of the Filter Effects dialog.&lt;br /&gt;
&lt;br /&gt;
:Only visual bounding box is affected; if you use geometric bounding box, you will notice no change in most cases. However, the Export bitmap dialog always uses the visual bbox for selection export area; this means that you can now export a blurred object to bitmap without any clipping of the blur.&lt;br /&gt;
&lt;br /&gt;
= Previous releases =&lt;br /&gt;
&lt;br /&gt;
* [[ReleaseNotes046]]&lt;br /&gt;
* [[ReleaseNotes045]]&lt;br /&gt;
* [[ReleaseNotes044]]&lt;br /&gt;
* [[ReleaseNotes043]]&lt;br /&gt;
* [[ReleaseNotes042]]&lt;br /&gt;
* [[ReleaseNotes041]]&lt;br /&gt;
* [[ReleaseNotes040]]&lt;br /&gt;
* [[ReleaseNotes039]]&lt;br /&gt;
* [[ReleaseNotes038]]&lt;br /&gt;
* [[ReleaseNotes037]]&lt;br /&gt;
* [[ReleaseNotes036]]&lt;br /&gt;
* [[ReleaseNotes035]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Marketing]]&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Script_extensions&amp;diff=14621</id>
		<title>Script extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Script_extensions&amp;diff=14621"/>
		<updated>2007-05-15T11:21:12Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: info on how to script Inkscape&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Note: This page concerns using scripting languages to create new Inkscape functionality.  To access Inkscape functionality from scripting languages (i.e. to script Inkscape), see the Inkscape man page (especially in the development version or v0.46 or later, which provide --select and --verb options), or see the work in the src/extension/script directory of Inkscape source.]&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
Inkscape provides the ability for its functionality to be extended using traditional unix scripts.  By this, we mean a program that takes in a stream of data through standard in, and then outputs that data on standard out.  This is a very easy way to expand Inkscape, and provide custom functionality, without learning the internals of Inkscape.  Plus, there are SVG read and writing libraries out there for almost any language, and the rest of them all have XML support (which is really what you probably want to use anyway).  This HOWTO discusses the ends and outs of writing one of these scripts and getting it to work with the Inkscape core functionality. &lt;br /&gt;
&lt;br /&gt;
=== Types of scripts ===&lt;br /&gt;
&lt;br /&gt;
There are three functions that added with a script:&lt;br /&gt;
&lt;br /&gt;
* Input, providing translation from a file format to SVG&lt;br /&gt;
* Output, providing translation from SVG to a format&lt;br /&gt;
* Effect, taking in SVG, changing it, and then outputing SVG&lt;br /&gt;
&lt;br /&gt;
While all of these are very similar in the scripting interface, there are slight differences between them.&lt;br /&gt;
&lt;br /&gt;
=== Interaction ===&lt;br /&gt;
&lt;br /&gt;
It is important for a script author to understand how Inkscape and scripts communicate.&lt;br /&gt;
&lt;br /&gt;
(interpreter)? your_script (--param=value)* /path/to/input[[/SVGfile]] | inkscape&lt;br /&gt;
&lt;br /&gt;
Inkscape runs your script (optionally with an interpreter) passing it any number of parameters in long gnu style. The final argument is the name of the temporary svg file your script should read. After processing, the script should return the modified svg file to inkscape on STDOUT.&lt;br /&gt;
&lt;br /&gt;
=== Important Tips ===&lt;br /&gt;
&lt;br /&gt;
* Receive the inkscape arguments.&lt;br /&gt;
* Clear temp files if it creates one.&lt;br /&gt;
* Write full changed SVG to the default output.&lt;br /&gt;
* Don't break an xml:space=&amp;quot;preserve&amp;quot; area.&lt;br /&gt;
* Send error text to the error output and help the user.&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
In order for Inkscape to make use of an external script or program, you must describe that script to inkscape using an INX file. See the inkscape share directory for examples. The INX file allows the author to:&lt;br /&gt;
* label strings for translation &lt;br /&gt;
* define parameters&lt;br /&gt;
* chain extensions&lt;br /&gt;
Please see [[MakingAnINX]] for help creating an INX file for your script.&lt;br /&gt;
&lt;br /&gt;
==== Parameters ====&lt;br /&gt;
The INX file describes which parameters the extension needs. Inkscape will prompt the user with a UI to fill out these parameters before the extension is called. Each parameter will be passed through the commandline as &amp;quot;--paramname=paramvalue&amp;quot;. Eg. if you have described a string parameter with name 'string1' in the INX file, Inkscape will present a textbox to the user. When the user fills in &amp;quot;text&amp;quot; and presses OK, it will pass '--string1=&amp;quot;text&amp;quot;' to the program specified by the &amp;lt;command&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
There are several types of parameters that can be requested by the INX description:&lt;br /&gt;
&lt;br /&gt;
* Boolean&lt;br /&gt;
* Int&lt;br /&gt;
* Float&lt;br /&gt;
* String&lt;br /&gt;
* Description&lt;br /&gt;
* Enum&lt;br /&gt;
* Notebook&lt;br /&gt;
* Option group (radio buttons)&lt;br /&gt;
&lt;br /&gt;
=== Installing ===&lt;br /&gt;
&lt;br /&gt;
Installing is as simple as copying the script (unless it resides in your path) and its INX file to the inkscape/share/extensions (home/.inkscape/extensions) directory. (If you install a script in your home directory be sure to copy the dependencies.)&lt;br /&gt;
&lt;br /&gt;
If you are looking to use scripts that have already been written, the most difficult part will likely be the installation. Since scripts are  seperate programs they may have any number of dependencies that are not included with inkscape. Currently, the best way to find missing dependencies is by reading the error messages produced by running the script from the command line.&lt;br /&gt;
&lt;br /&gt;
=== See Also ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.ekips.org/comp/inkscape/extending.php#ignorance| Aarons website] describing his path to learning how scripting extensions work. '''VERY OUT-OF-DATE'''&lt;br /&gt;
&lt;br /&gt;
*[[MakingAnINX]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Release_notes/0.44&amp;diff=6524</id>
		<title>Release notes/0.44</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Release_notes/0.44&amp;diff=6524"/>
		<updated>2006-05-28T06:18:02Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: /* Extensions */ Grammar: Move full-sentence parenthesis to separate sentence.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Inkscape 0.44: overview ==&lt;br /&gt;
&lt;br /&gt;
Inkscape 0.44 is bigger and better than ever. Some highlights:&lt;br /&gt;
&lt;br /&gt;
* Layers dialog&lt;br /&gt;
&lt;br /&gt;
* Outline mode, many performance improvements&lt;br /&gt;
&lt;br /&gt;
* Native PDF export with transparency&lt;br /&gt;
&lt;br /&gt;
* Clipping and masking support&lt;br /&gt;
&lt;br /&gt;
* Configurable keyboard shortcuts, including Xara X emulation&lt;br /&gt;
&lt;br /&gt;
* Docked color palette in the editing window&lt;br /&gt;
&lt;br /&gt;
* Interactive indicator of the style of selection in the statusbar&lt;br /&gt;
&lt;br /&gt;
* Innovative &amp;quot;node sculpting&amp;quot; and other improvements in Node tool&lt;br /&gt;
&lt;br /&gt;
* Extensions are enabled by default and work on both Linux and Windows&lt;br /&gt;
&lt;br /&gt;
* Better SVG support: &amp;lt;switch&amp;gt; element, ICC color profiles for images&lt;br /&gt;
&lt;br /&gt;
* Persistent rotation centers, Paste Size command&lt;br /&gt;
&lt;br /&gt;
* Redesigned preferences dialogs, new icons, rearranged menus, many cosmetic improvements&lt;br /&gt;
&lt;br /&gt;
* Hundreds of bugfixes and smaller features&lt;br /&gt;
&lt;br /&gt;
* Not directly related to Inkscape, but important nevertheless: since our last release, [http://www.mozilla.com/firefox/ Firefox 1.5] was released with SVG support enabled by default. This means that you can now view any Inkscape document right in your Firefox window without any format conversions or installing any plugins!&lt;br /&gt;
&lt;br /&gt;
= Performance =&lt;br /&gt;
&lt;br /&gt;
== Outline mode ==&lt;br /&gt;
&lt;br /&gt;
An Outline (&amp;quot;wireframe&amp;quot;) display mode is implemented. Use the &amp;lt;i&amp;gt;View &amp;gt; Display Mode &amp;gt; Outline&amp;lt;/i&amp;gt; to activate it. In this mode:&lt;br /&gt;
&lt;br /&gt;
* all paths and shapes are rendered as &amp;lt;b&amp;gt;inverse&amp;lt;/b&amp;gt; (black on light background and vice versa) &amp;lt;b&amp;gt;outlines&amp;lt;/b&amp;gt; of constant width (1 screen pixel regardless of zoom), without fill;&lt;br /&gt;
&lt;br /&gt;
* text is painted by inverse fill, without stroke; &lt;br /&gt;
&lt;br /&gt;
* bitmaps are shown as is;&lt;br /&gt;
&lt;br /&gt;
* any opacity and gradients are ignored.&lt;br /&gt;
&lt;br /&gt;
The outline mode is usually not drastically faster than regular mode (usually 10% to 50% faster), and in some special cases it may even be slower. However, the value of the outline mode is not only in its speed; it is a good way to get an idea of the structure and objects of your document, and it is convenient for precision node editing and for finding &amp;quot;stray objects&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== Speed ==&lt;br /&gt;
&lt;br /&gt;
In addition to the Outline mode which makes it much easier to work with complex drawings, this version of Inkscape also provides significant speed improvements in many areas.&lt;br /&gt;
&lt;br /&gt;
* Thanks to &amp;lt;b&amp;gt;optimizations in the renderer&amp;lt;/b&amp;gt;, Inkscape's screen redraw is &amp;lt;b&amp;gt;faster by at least 10%&amp;lt;/b&amp;gt;, and in some cases (such as complex stroked/dashed paths at high zooms) &amp;lt;b&amp;gt;up to three times faster&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Optimizations in the Node tool&amp;lt;/b&amp;gt; resulted in noticeable speed gains for node editing. Thus, switching to and from the Node tool (with a path selected), as well as selecting nodes in that tool, are now &amp;lt;b&amp;gt;at least ten times faster&amp;lt;/b&amp;gt; than before. Other operations, including curve and node dragging and move/scale/rotate operations on multiple selected nodes, are much faster as well. This is especially important when working with complex paths; with these optimizations, paths containing several thousand nodes, though still slow, are much more usable.&lt;br /&gt;
&lt;br /&gt;
* An optimization in the attribute setting method made operations such as moving multiple objects with arrow keys at least &amp;lt;b&amp;gt;30% faster&amp;lt;/b&amp;gt; compared to 0.43. This is especially noticeable when you are moving clones selected together with their original (e.g. a clone tiling), in which case Inkscape now works &amp;lt;b&amp;gt;three to four times faster&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Interface icons&amp;lt;/b&amp;gt; are now rendered in the background (from SVG source in &amp;lt;code&amp;gt;share/icons/icons.svg&amp;lt;/code&amp;gt;) when Inkscape is idle, rather than waiting for all the icons in a menu to render the first time you pull it up. This eliminates the annoying delay when opening menus for the first time.&lt;br /&gt;
&lt;br /&gt;
* Previously, zooming in to view a small portion of a path (especially big and complex path), there was a very noticeable slowdown and memory use increased dramatically. We optimized the renderer to &amp;lt;b&amp;gt;only process the visible part of a path&amp;lt;/b&amp;gt;, and as a result the rendering speed is now almost the same at any zoom up to the maximum, providing up to 10-40 times speedup compared to the previous version (the closer is the zoom, the greater is the gain).&lt;br /&gt;
&lt;br /&gt;
= Interface =&lt;br /&gt;
&lt;br /&gt;
== Layers dialog ==&lt;br /&gt;
&lt;br /&gt;
* Ctrl+Shift+L [joncruz, mental]&lt;br /&gt;
&lt;br /&gt;
== Selected style indicator ==&lt;br /&gt;
&lt;br /&gt;
A new control in the left end of the statusbar lets you quickly view and change the &amp;lt;b&amp;gt;fill and stroke of the selected objects&amp;lt;/b&amp;gt;. When you have a text selection in Text tool or a gradient handle selected in the Gradient tool, this indicator displays and changes the style of the text fragment or gradient stop, instead of the entire object (it's the same behavior as the Fill&amp;amp;amp;Stroke dialog.)&lt;br /&gt;
&lt;br /&gt;
* The two indicators, labelled &amp;lt;b&amp;gt;F:&amp;lt;/b&amp;gt; (top) and &amp;lt;b&amp;gt;S:&amp;lt;/b&amp;gt; (bottom), display fill and stroke of the selected object(s) correspondingly. (For gradient handles, they always display the same style.)&lt;br /&gt;
&lt;br /&gt;
* Each fill/stroke indicator can display either a &amp;lt;b&amp;gt;color+opacity swatch&amp;lt;/b&amp;gt; (the opacity shown here is the fill opacity or stroke opacity, not the master opacity) or a text label specifying &amp;lt;b&amp;gt;N/A&amp;lt;/b&amp;gt; (nothing selected), &amp;lt;b&amp;gt;None&amp;lt;/b&amp;gt; (no fill/stroke), &amp;lt;b&amp;gt;Unset&amp;lt;/b&amp;gt; (unset fill/stroke), &amp;lt;b&amp;gt;L Gradient&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;R Gradient&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Pattern&amp;lt;/b&amp;gt; (corresponding fill/stroke types), or &amp;lt;b&amp;gt;Different&amp;lt;/b&amp;gt; (selected objects have different fill/stroke types).&lt;br /&gt;
&lt;br /&gt;
* Additionally, each indicator may be accompanied by one of two flags, &amp;lt;b&amp;gt;m&amp;lt;/b&amp;gt; (&amp;quot;multiple&amp;quot;, meaning there are two or more objects all with the same fill/stroke) or &amp;lt;b&amp;gt;a&amp;lt;/b&amp;gt; (&amp;quot;averaged&amp;quot;, meaning there are two or more objects with different flat colors in fill/stroke, and the indicator shows the average of these colors).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Left-click&amp;lt;/b&amp;gt; on an indicator opens or activates the Fill&amp;amp;Stroke dialog with the corresponding tab (Fill or Stroke) active.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Right-click&amp;lt;/b&amp;gt; on an indicator opens a popup menu with the following items:&lt;br /&gt;
** &amp;lt;b&amp;gt;Edit fill/stroke...&amp;lt;/b&amp;gt;: Opens or activates the Fill&amp;amp;Stroke dialog with the corresponding tab selected. (Same as left-click.)&lt;br /&gt;
** &amp;lt;b&amp;gt;Last set color&amp;lt;/b&amp;gt;: Applies to the selected objects the fill/stroke color that was last applied to anythig.&lt;br /&gt;
** &amp;lt;b&amp;gt;Last selected color&amp;lt;/b&amp;gt;: Applies to the selected objects the fill/stroke color that was last displayed in this indicator. (Allows you to easily copy fill/stroke color between objects: select source, select destination, apply &amp;quot;last selected color&amp;quot;.)&lt;br /&gt;
**  &amp;lt;b&amp;gt;Invert&amp;lt;/b&amp;gt;: Sets the fill or stroke to the inverse of the current color (does not affect opacity).&lt;br /&gt;
**  &amp;lt;b&amp;gt;White&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Black&amp;lt;/b&amp;gt;: Sets the fill or stroke to the corresponding color (fully opaque).&lt;br /&gt;
** &amp;lt;b&amp;gt;Copy color&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Paste color&amp;lt;/b&amp;gt;: Copies or pastes the fill or stroke color (when it's color) to/from the system clipboard, as text in the &amp;lt;code&amp;gt;#rrggbb&amp;lt;/code&amp;gt; hex format.&lt;br /&gt;
** &amp;lt;b&amp;gt;Swap fill and stroke&amp;lt;/b&amp;gt;: Exchanges fill and stroke (both their types and colors, if any). &lt;br /&gt;
** &amp;lt;b&amp;gt;Make fill/stroke opaque&amp;lt;/b&amp;gt;: Removes fill or stroke transparency (not master transparency!).&lt;br /&gt;
** &amp;lt;b&amp;gt;Unset fill/stroke&amp;lt;/b&amp;gt;: Unsets fill or stroke from selected objects.&lt;br /&gt;
** &amp;lt;b&amp;gt;Remove fill/stroke&amp;lt;/b&amp;gt;: Removes fill or stroke from the selected objects.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Middle-click&amp;lt;/b&amp;gt; on a fill/stroke indicator removes fill/stroke from selected objects; if it is already removed (i.e. if the indicator displays &amp;quot;None&amp;quot;), it does the same as the &amp;quot;Last set color&amp;quot; command from the popup menu.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Drag and Drop&amp;lt;/b&amp;gt; of colors onto a fil/stroke indicator sets the fill and stroke of the selected object(s) correspondingly.&lt;br /&gt;
&lt;br /&gt;
* The Stroke indicator also displays the &amp;lt;b&amp;gt;stroke width&amp;lt;/b&amp;gt; of selection (averaged if there are multiple objects selected with different stroke widths), located to the right of the stroke color/transparency swatch. Left-clicking on it opens the Fill&amp;amp;Stroke dialog with the Stroke Style tab selected. Right-clicking on it opens a popup menu which allows you to choose the units for displaying the stroke width, as well as choose one of the presets to assign to selection.&lt;br /&gt;
&lt;br /&gt;
* To the right of the fill/stroke indicators, the &amp;lt;b&amp;gt;Opacity&amp;lt;/b&amp;gt; numeric field (labelled &amp;quot;O:&amp;quot;) shows and allows you to change the master opacity of the selected object (or the averaged opacity of several selected objects). &amp;lt;b&amp;gt;Right-clicking &amp;lt;/b&amp;gt; the numeric field opens a popup menu with preset opacity levels. &amp;lt;b&amp;gt;Middle-clicking&amp;lt;/b&amp;gt; on the &amp;quot;O:&amp;quot; label cycles the opacity through the values of 0 (transparent), 0.5, and 1 (opaque).&lt;br /&gt;
&lt;br /&gt;
The zoom field and the cursor coordinates indicator have been rearranged for compactness and moved to the right end of the statusbar. There's also a window resize handle added at the very end of the statusbar.&lt;br /&gt;
&lt;br /&gt;
== Tool style indicators ==&lt;br /&gt;
&lt;br /&gt;
For each object-creating tool (shapes, Pen/Pencil, Calligraphic, Text), the Controls bar (above the canvas) now includes a &amp;lt;b&amp;gt;style indicator&amp;lt;/b&amp;gt; on the right. This indicator shows you which style the newly created object will have. The indicator correctly displays whichever style the tool is set to use - the global &amp;quot;last set&amp;quot; style or that tool's fixed style. For example, clicking on a palette swatch (even with nothing selected) changes the &amp;quot;last set&amp;quot; color and, if your tool is set to use the last set color, its indicator is updated, giving you an idea of your &amp;quot;brush&amp;quot; before you start to draw.&lt;br /&gt;
&lt;br /&gt;
== Controls bar for the Text tool ==&lt;br /&gt;
&lt;br /&gt;
[deadchip]&lt;br /&gt;
&lt;br /&gt;
== Docked color palette ==&lt;br /&gt;
&lt;br /&gt;
* Previously, color swatches could only be used from a floating palette (Ctrl+Shift+W). Now the color swatches palette is embedded in the main UI, at the bottom of the window between the canvas and the statusbar. It is enabled by default; use &amp;lt;i&amp;gt;View &amp;gt; Show/Hide &amp;gt; Palette&amp;lt;/i&amp;gt; to enable or disable it. The docked palette has the same functionality as the floating one; use a button in the top right corner to access the swatches menu.&lt;br /&gt;
&lt;br /&gt;
* All standard sizes of the swatches (Tiny, Small, Medium, Large, Huge) are made &amp;lt;b&amp;gt;smaller&amp;lt;/b&amp;gt; overall.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Wrap&amp;lt;/b&amp;gt; option (off by default) in the swatches menu converts the palette from a single row into a frame 2 or 3 rows high, for better access to colors in large palettes.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Drag and Drop&amp;lt;/b&amp;gt; of &amp;lt;b&amp;gt;colors&amp;lt;/b&amp;gt; has been enabled.&lt;br /&gt;
** Dragging colors from a palette shows a live swatch of the color being dragged under cursor.&lt;br /&gt;
** Drag and Drop of colors onto the selected style indicator in the statusbar sets the fill or stroke of the selected object(s).&lt;br /&gt;
** Colors can be &amp;lt;b&amp;gt;dropped&amp;lt;/b&amp;gt; directly on to objects on canvas to set their &amp;lt;b&amp;gt;fill&amp;lt;/b&amp;gt;, or &amp;lt;b&amp;gt;shift+dropped&amp;lt;/b&amp;gt; to set their &amp;lt;b&amp;gt;stroke&amp;lt;/b&amp;gt;. This affects only the object you drop the color on, regardless of whether that object is selected or not.&lt;br /&gt;
** Colors can be dragged to and from other applications.&lt;br /&gt;
&lt;br /&gt;
* The new &amp;lt;b&amp;gt;Inkscape default&amp;lt;/b&amp;gt; color palette was added. It contains a range of grays, standard HTML named colors, and a full range of colors sorted by their HSL values (475 colors overall). It is generated by a Python script which is available from Inkscape SVN in share/palettes.&lt;br /&gt;
&lt;br /&gt;
* A number of &amp;lt;b&amp;gt;specialized color palettes&amp;lt;/b&amp;gt;, useful in color-coordinated projects, was borrowed from GIMP: Reds, Greens, Blues, Gold, Royal, Khaki, Hilite, and Topographic.&lt;br /&gt;
&lt;br /&gt;
== Inkscape Preferences dialog ==&lt;br /&gt;
&lt;br /&gt;
Not only was the Inkscape Preferences dialog completely rewritten and redesigned, it is now also &amp;lt;b&amp;gt;fully GNOME-HIG compliant&amp;lt;/b&amp;gt;. Numerous &amp;lt;b&amp;gt;bugs&amp;lt;/b&amp;gt; were taken care of with the rewrite. As a new feature, the &amp;lt;b&amp;gt;Simplify threshold&amp;lt;/b&amp;gt; can now be set with more precision.&lt;br /&gt;
&lt;br /&gt;
== Document Properties / Metadata dialogs ==&lt;br /&gt;
&lt;br /&gt;
* The Document Preferences dialog is now named &amp;lt;b&amp;gt;Document Properties&amp;lt;/b&amp;gt;, and it was split in two: metadata were extracted into the &amp;lt;b&amp;gt;Document Metadata&amp;lt;/b&amp;gt; dialog; metadata widgets are now also spread over two pages.&lt;br /&gt;
&lt;br /&gt;
* A button was added to &amp;lt;b&amp;gt;fit the canvas to the current selection&amp;lt;/b&amp;gt; or, if there's no selection, to the entire drawing. The button resizes the canvas and, if necessary, moves the drawing into place. It is now very easy to size the canvas to an illustration after it is ready.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;New controls&amp;lt;/b&amp;gt;: the new object snapping features required their own property widgets, and you can set the snapping sensitivity with a slider, or let it snap regardless of distance (grid only).&lt;br /&gt;
&lt;br /&gt;
* Rearrangements within &amp;lt;b&amp;gt;Document Properties&amp;lt;/b&amp;gt;: everything snapping-related was collected on one page; Grid and Guide widgets are on their own, the same page. For better HIG compliance, all widgets were categorized; especially the widgets on the Page page were completely rearranged in the General/Format/Border categories.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Bug fixes&amp;lt;/b&amp;gt;: grayed out license URI had too low contrast, so it's no longer grayed out; the proprietary license didn't clean the license URI; spinbuttons had no tooltips, and minor grid quirks were removed; data was not updated when a new file replaced another in the same window.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;HIG compliance&amp;lt;/b&amp;gt;: much work went into that, and now only a few details are missing from full Gnome-HIG compliance.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Updated Creative Commons Licenses&amp;lt;/b&amp;gt;: Updated CC licenses to the latest 2.5 versions by default in the license tab of the metadata dialog.&lt;br /&gt;
&lt;br /&gt;
== Menus ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Zoom&amp;lt;/b&amp;gt; commands in the View menu are moved to a submenu; the &amp;lt;i&amp;gt;Zoom In&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;Zoom Out&amp;lt;/i&amp;gt; commands are added to that submenu.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Clone&amp;lt;/b&amp;gt; commands are moved into a submenu in Edit menu and given more descriptive names and tips.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Pattern&amp;lt;/b&amp;gt; commands (&amp;lt;i&amp;gt;Objects to Pattern&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;Pattern to Objects&amp;lt;/i&amp;gt;) are moved into a submenu in Object menu, under the new Clip and Mask submenus.&lt;br /&gt;
&lt;br /&gt;
* The contents of the &amp;lt;b&amp;gt;Effects menu&amp;lt;/b&amp;gt; are categorized into submenus, and several effects are renamed to use more intuitive names. &lt;br /&gt;
&lt;br /&gt;
== Statusbar ==&lt;br /&gt;
&lt;br /&gt;
* In Selector, for multiple selected objects, the statusbar now reports their types. For example, if 5 groups are selected, it displays&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;5&amp;lt;/b&amp;gt; objects of type &amp;lt;b&amp;gt;Group&amp;lt;/b&amp;gt; in layer &amp;lt;b&amp;gt;LayerName&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:instead of just &amp;quot;5 objects selected&amp;quot; as before. If there are up to 3 types in the selection, they will be listed, for example:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;5&amp;lt;/b&amp;gt; objects of types &amp;lt;b&amp;gt;Group&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Path&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Rectangle&amp;lt;/b&amp;gt; in layer &amp;lt;b&amp;gt;LayerName&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:The order of the list will correspond to the order in which the objects were added to selection. If there are 4 or more types in selection, only the number of types is reported, for example:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;5&amp;lt;/b&amp;gt; objects of &amp;lt;b&amp;gt;4&amp;lt;/b&amp;gt; types in layer &amp;lt;b&amp;gt;LayerName&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* In Selector, objects selected in groups are now identified as such, and the group ID is given, for example:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;Rectangle&amp;lt;/b&amp;gt; in group &amp;lt;i&amp;gt;g212&amp;lt;/i&amp;gt; (layer &amp;lt;b&amp;gt;content&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
:If selected objects have different parents within one layer (for example, if one is selected in a group and another outside it), the number of parents is reported:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; objects of types &amp;lt;b&amp;gt;Rectangle&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Path&amp;lt;/b&amp;gt; in &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; parents (layer &amp;lt;b&amp;gt;content&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
:If objects are in different layers, only the number of layers is reported since this also implies different parents:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; objects of types &amp;lt;b&amp;gt;Rectangle&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Path&amp;lt;/b&amp;gt; in &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; layers&lt;br /&gt;
&lt;br /&gt;
* In Node tool, if your node selection includes nodes from different subpaths, statusbar reports the number of subpaths with selection and the total number of subpaths, for example:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; of &amp;lt;b&amp;gt;195&amp;lt;/b&amp;gt; nodes selected in &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; of &amp;lt;b&amp;gt;36&amp;lt;/b&amp;gt; subpaths.&lt;br /&gt;
&lt;br /&gt;
* The contents of the statusbar message are now duplicated as a &amp;lt;b&amp;gt;tooltip&amp;lt;/b&amp;gt; that is shown when you hover the mouse over the statusbar. [TODO: need to strip markup from the tooltips.] &lt;br /&gt;
&lt;br /&gt;
* The statusbar text is now no longer just cut off if there is insufficient room, but an ellipsis (...) is inserted at the end to show there's more (only with Gtk 2.6 and newer).&lt;br /&gt;
&lt;br /&gt;
== Theme ==&lt;br /&gt;
&lt;br /&gt;
* Inkscape has a &amp;lt;b&amp;gt;new default icon set&amp;lt;/b&amp;gt; titled &amp;quot;Crispy&amp;quot; provided by Andre Sousa. The new icons are intended to add a more professional and cohesive look to our application, as well as to make the functions the icons represent more self-evident.&lt;br /&gt;
&lt;br /&gt;
* [new mouse cursors are coloured and antialiased - scislac]&lt;br /&gt;
&lt;br /&gt;
= Clipping and masking =&lt;br /&gt;
&lt;br /&gt;
Inkscape now provides some UI for using &amp;lt;b&amp;gt;clipping paths and masks&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Any object can be non-destructively intersected with a path (called a &amp;lt;i&amp;gt;clipping path&amp;lt;/i&amp;gt;) so that only the intersected portion of the object is visible. &lt;br /&gt;
** &amp;lt;b&amp;gt;To apply clipping&amp;lt;/b&amp;gt;, select the objects to be clipped and the clipping path object, make sure the clipping path is above the other objects in z-order, and do &amp;lt;i&amp;gt;Object &amp;gt; Clip &amp;gt; Set&amp;lt;/i&amp;gt;.&lt;br /&gt;
** You can &amp;lt;b&amp;gt;transform, edit, or style&amp;lt;/b&amp;gt; the clipped objects as usual. The clipping remains applied and transforms together with each clipped object.&lt;br /&gt;
** To &amp;lt;b&amp;gt;remove the clipping&amp;lt;/b&amp;gt;, do &amp;lt;i&amp;gt;Object &amp;gt; Clip &amp;gt; Release&amp;lt;/i&amp;gt;. The clipping path is returned to the drawing as a regular object; it is inserted on top of the unclipped object in z-order. &lt;br /&gt;
&lt;br /&gt;
* Any object can be non-destructively masked by another object (called &amp;lt;i&amp;gt;mask&amp;lt;/i&amp;gt;) so that: the mask's black or transparent areas become fully transparent in the masked object; mask's opaque white areas become fully opaque; and all intermediate colors translate into intermediate levels of opacity in the masked object. This allows you to apply, for example, arbitrary transparency gradients to objects.&lt;br /&gt;
** To &amp;lt;b&amp;gt;apply a mask&amp;lt;/b&amp;gt;, select the objects to be masked and the mask object, make sure the mask is above the other objects in z-order, and do &amp;lt;i&amp;gt;Object &amp;gt; Mask &amp;gt; Set&amp;lt;/i&amp;gt;.&lt;br /&gt;
** You can &amp;lt;b&amp;gt;transform, edit, or style&amp;lt;/b&amp;gt; the masked objects as usual. The mask remains applied and transforms together with each masked object.&lt;br /&gt;
** To &amp;lt;b&amp;gt;remove the masking&amp;lt;/b&amp;gt;, do &amp;lt;i&amp;gt;Object &amp;gt; Mask &amp;gt; Release&amp;lt;/i&amp;gt;. The mask is returned to the drawing as a regular object; it is inserted on top of the unmasked object in z-order. &lt;br /&gt;
&lt;br /&gt;
* Objects with clippath show their bounding box intersected with the bounding box of the clippath, instead of the original unclipped bbox as before. (However, this does not apply to objects without clippath of their own which are clipped by being inside a clipped group.)&lt;br /&gt;
&lt;br /&gt;
* Clipped or masked objects display &amp;quot;&amp;lt;i&amp;gt;clipped&amp;lt;/i&amp;gt;&amp;quot; or &amp;quot;&amp;lt;i&amp;gt;masked&amp;lt;/i&amp;gt;&amp;quot;, correspondingly, in their statusbar descriptions.&lt;br /&gt;
&lt;br /&gt;
* Although Inkscape had render-only support for clipping paths and masks for quite some time, in this release we fixed a number of bugs which may affect the display of your documents using clippaths or masks.&lt;br /&gt;
** Clippaths and masks with objectBoundingBox units are now shown correctly upon loading of the document.&lt;br /&gt;
** Clippaths without fill didn't work, this is now fixed.&lt;br /&gt;
** Objects with clippaths or masks are correctly copied/pasted between documents.&lt;br /&gt;
&lt;br /&gt;
= SVG conformance =&lt;br /&gt;
&lt;br /&gt;
== Color profile support ==&lt;br /&gt;
&lt;br /&gt;
Inkscape now includes base ICC profile functionality. If compiled with LittleCMS support (if you run &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;--enable-lcms&amp;lt;/code&amp;gt; switch), Inkscape passes the [http://www.w3.org/Graphics/SVG/Test/20030813/htmlframe/full-color-prof-01-f.html ICC color profile test] by W3C. The &amp;amp;lt;color-profile&amp;amp;gt; element has been implemented along with the &amp;quot;color-profile&amp;quot; attribute for &amp;amp;lt;image&amp;amp;gt; elements.&lt;br /&gt;
&lt;br /&gt;
== &amp;amp;lt;switch&amp;amp;gt; support ==&lt;br /&gt;
&lt;br /&gt;
Rendering support for SVG 1.1's '''Conditional Processing Module''' has been implemented, including ''switch'' element, ''requiredFeatures'', ''requiredExtensions'', ''systemLanguage'' attributes. Inkscape passes the Conditional processing tests ([http://www.w3.org/Graphics/SVG/Test/20030813/htmlframe/full-struct-cond-01-t.html] and [http://www.w3.org/Graphics/SVG/Test/20030813/htmlframe/full-struct-cond-02-t.html]) by W3C.&lt;br /&gt;
&lt;br /&gt;
== SVG output ==&lt;br /&gt;
&lt;br /&gt;
* In Inkscape's SVG documents, &amp;lt;b&amp;gt;colors&amp;lt;/b&amp;gt; are now expressed by name (‘white’) or three-digit form (‘&amp;lt;tt&amp;gt;#f3c&amp;lt;/tt&amp;gt;’) when possible.&lt;br /&gt;
&lt;br /&gt;
* The numeric values in &amp;lt;code&amp;gt;transform&amp;lt;/code&amp;gt; attributes are written without insignificant trailing zeros, and anything less than that 1e-8 by absolute value (usually caused by rounding errors) is written as 0 to reduce clutter.&lt;br /&gt;
&lt;br /&gt;
= Transformations =&lt;br /&gt;
&lt;br /&gt;
== Transform dialog ==&lt;br /&gt;
&lt;br /&gt;
Fixes and improvements in the Transform dialog (Ctrl+Shift+M):&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Apply to each object separately&amp;lt;/b&amp;gt; checkbox is added, allowing you to scale/rotate/skew each selected object by the same amount, around that object's center. When off (by default), the selection is transformed as a whole. The status of this checkbox is remembered across sessions. (It has no effect on Move and Matrix tabs).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Clear&amp;lt;/b&amp;gt; button resets the values on the current tab to defaults.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Scale&amp;lt;/b&amp;gt; tab now allows you to specify horizontal or vertical size increments in percentage or absolute units. Also, there's a &amp;lt;b&amp;gt;Scale proportionally&amp;lt;/b&amp;gt; checkbox which ensures that scaling preserves the width/height ratio. (If you are scaling several objects proportionally with &amp;quot;Apply to each object separately&amp;quot;, you can only use the % unit to specify the scaling; otherwise each object's scale increments will have the width/height ratio of the entire selection, not of that specific object.)&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Skew&amp;lt;/b&amp;gt; tab can now specify the skew as an &amp;lt;b&amp;gt;absolute displacement&amp;lt;/b&amp;gt; (e.g. for horizontal skewing of a rectangle, that means the shift of the top rectangle side relative to the bottom), as &amp;lt;b&amp;gt;percentage displacement&amp;lt;/b&amp;gt; (e.g. a 1% horizontal skew of a rectangle means shifting the top side by 1% of the rectangle height), or as an &amp;lt;b&amp;gt;angle&amp;lt;/b&amp;gt; (e.g. horizontal skew by 15 degrees results in the sides of a rectangle being rotated to that angle, while the top and bottom remain horizontal).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Matrix&amp;lt;/b&amp;gt; tab (previously called &amp;quot;Transform&amp;quot;) can either edit the current &amp;lt;code&amp;gt;transform=&amp;lt;/code&amp;gt; matrix of an object, or post-multiply the &amp;lt;code&amp;gt;transform=&amp;lt;/code&amp;gt; with the matrix you specify, depending on the &amp;lt;b&amp;gt;Edit current matrix&amp;lt;/b&amp;gt; checkbox. (As it is now redundant, the transformation matrix in the Object Properties dialog is removed.)&lt;br /&gt;
&lt;br /&gt;
* The dialog now correctly &amp;lt;b&amp;gt;watches selection changes&amp;lt;/b&amp;gt; in the active document window and updates its values accordingly.&lt;br /&gt;
&lt;br /&gt;
* The layout of the dialog is simplified, tooltips and mnemonics added for better usability.&lt;br /&gt;
&lt;br /&gt;
* Many bugs are fixed, especially in value conversions between units.&lt;br /&gt;
&lt;br /&gt;
== Persistent rotation centers ==&lt;br /&gt;
&lt;br /&gt;
* The position of the center (axis) of rotation and skewing used by Selector is now &amp;lt;b&amp;gt;remembered&amp;lt;/b&amp;gt; for all objects and restored when you select those objects again (even after saving and reopening the document). When you move or scale an object, its rotation center is moved or scaled too, so its position relative to the object always remains the same unless you move it explicitly.&lt;br /&gt;
&lt;br /&gt;
* When you have several objects selected, they use the rotation center of the &amp;lt;b&amp;gt;first selected object&amp;lt;/b&amp;gt;. If the first object does not have center set (i.e. if it's in a default central position), then several objects will rotate around the geometric center of their common bounding box (as before).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Shift+click&amp;lt;/b&amp;gt; on the rotation center resets it back to the center of the object's box.&lt;br /&gt;
&lt;br /&gt;
* Consequently, dragging the rotation center is now &amp;lt;b&amp;gt;an undoable action&amp;lt;/b&amp;gt;; you can press Ctrl+Z to undo the drag.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Keyboard rotation&amp;lt;/b&amp;gt; by [, ] keys with various modifiers, as well as the Rotate tab in the &amp;lt;b&amp;gt;Transform dialog&amp;lt;/b&amp;gt;, work around the selected object's rotation center (for multi-object selection, the rotation center of the first selected object).&lt;br /&gt;
&lt;br /&gt;
* Rotation centers are &amp;lt;b&amp;gt;preserved&amp;lt;/b&amp;gt; when duplicating, cloning (including clone tiler), grouping/ungrouping, and converting to path.&lt;br /&gt;
&lt;br /&gt;
[TODO: &lt;br /&gt;
- make it work smartly for groups: if a group has center not set, return the center of the first object inside group with the center set&lt;br /&gt;
&lt;br /&gt;
- a separate tab in the Transform dialog, with 9 buttons in the square grid (for setting it to object's corners, sides, and center) as well as x/y fields for setting center to any position&lt;br /&gt;
&lt;br /&gt;
- make center snap to grid/guides/objects and to other centers&lt;br /&gt;
&lt;br /&gt;
- make objects snap with their center to grid/guides/objects]&lt;br /&gt;
&lt;br /&gt;
== Pasting size ==&lt;br /&gt;
&lt;br /&gt;
A number of commands are added to easily scale selected objects to match the size of the object(s) previously copied to the clipboard. They are all in the Paste Size submenu in Edit menu:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Paste Size&amp;lt;/b&amp;gt; scales the whole selection to match the overall size of the clipboard object(s).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Paste Width&amp;lt;/b&amp;gt;/&amp;lt;b&amp;gt;Paste Height&amp;lt;/b&amp;gt; scale the whole selection horizontally/vertically so that it matches the width/height of the clipboard object(s). These commands honor the scale ratio lock on the Selector controls bar (between W and H fields), so that when that lock is pressed, the other dimension of the selected object is scaled in the same proportion; otherwise the other dimension is unchanged.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Paste Size Separately&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Paste Width Separately&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Paste Height Separately&amp;lt;/b&amp;gt; work similarly to the above described commands, except that they scale &amp;lt;i&amp;gt;each selected object&amp;lt;/i&amp;gt; separately to make it match the size/width/height of the clipboard object(s).&lt;br /&gt;
&lt;br /&gt;
= Tools =&lt;br /&gt;
&lt;br /&gt;
== Node tool ==&lt;br /&gt;
&lt;br /&gt;
=== Node sculpting ===&lt;br /&gt;
&lt;br /&gt;
An entirely new way of manipulating paths in Node tool is added in this version: Node sculpting. Normally, when you have several nodes selected and you drag one of them, all selected nodes move by the same amount. Now, if you &amp;lt;b&amp;gt;Alt-drag&amp;lt;/b&amp;gt; one of the selected nodes, only that node is fully displaced; other selected nodes are moved less than the full amount, so that those farthest from the drag point remain stationary. This is similar to &amp;quot;proportional editing&amp;quot; or &amp;quot;soft selection&amp;quot; in 3D editors such as Blender.&lt;br /&gt;
&lt;br /&gt;
So, for example, if you select several nodes on a straight line and Alt+drag the middle selected node, the path will bend into a &amp;lt;b&amp;gt;smooth bell-like curve&amp;lt;/b&amp;gt;. Nodes' handles are also adjusted correspondingly to keep the overall shape smooth and natural. (If you don't have enough nodes on a path fragment that you want to reshape in this way, just select the end nodes of that fragment and press &amp;lt;b&amp;gt;Ins&amp;lt;/b&amp;gt; a few times to populate it with nodes.)&lt;br /&gt;
&lt;br /&gt;
Moreover, node sculpting is &amp;lt;b&amp;gt;sensitive to pressure&amp;lt;/b&amp;gt; of your tablet pen. If you press slightly, your curve will have a narrow sharp tip (i.e. the nearest neighbors of your dragged node will move only a bit); if you press hard, the curve's tip will be wide and blunt (i.e. the nearest neighbors will move almost as much as the dragged node). (Hint: to stop dragging without losing your shape, first release Alt and then lift the tip of the pen.)&lt;br /&gt;
&lt;br /&gt;
There are many possible applications of the sculpting technique. To take a simple example, selecting all nodes of an ellipse-like shape and Alt+dragging one of them will smoothly and naturally stretch and skew the entire shape in any direction. Doing the same to a complex path, such as star or spiral, will twist and punch it without destroying its intricate structure - this is the way to get squashed or self-intersecting stars, eccentric spirals and other shapes not easily doable before. Selecting only part of all nodes allows you to smoothly reshape parts of the figure without disturbing the rest.&lt;br /&gt;
&lt;br /&gt;
When applied to text converted to path, node sculpting is a fun and easy way to twist, bend and distort it, achieving effects similar to &amp;quot;perspective envelope&amp;quot; or &amp;quot;curvilinear envelope&amp;quot; in other programs - but in a more powerful and flexible way. For example, by selecting all or part of the text's nodes and Alt-dragging, you can not only make a wavy banner out of a paragraph of text, but also apply a &amp;quot;magnifying lens&amp;quot;-like effect to any word in the middle. &lt;br /&gt;
&lt;br /&gt;
Especially useful node sculpting is for complex natural paths, such as calligraphic strokes or bitmap traces, where you often want to do large-scale pushes and bends without destroying the small-scale features. Things like making a calligraphic stroke narrower in one place and wider in another, or changing the proportions, extending the ear or flattening the nose of a head - all this is now much faster and more natural to do using sculpting. It is also a new way to &amp;lt;i&amp;gt;create&amp;lt;/i&amp;gt; new paths, too - starting from en ellipse with added nodes, it takes just a few Alt+drags to tweak it into a silhouette of a head, or a map of Australia, or an Inkscape logo!&lt;br /&gt;
&lt;br /&gt;
Some examples are shown on the screenshot: [[http://www.inkscape.org/screenshots/gallery/inkscape-0.44-nodesculpting.png]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Show handles&amp;quot; toggle ===&lt;br /&gt;
&lt;br /&gt;
The Controls bar for the Nodes tool now includes a toggle button which controls whether Bezier handles are shown on selected nodes (on by default). Selecting and dragging nodes on node-dense paths in zoom-out (e.g. for node sculpting) may be extremely difficult without hiding the handles, as it's hard to pick a node and not a handle when handles are shown.&lt;br /&gt;
&lt;br /&gt;
=== New deletion behavior ===&lt;br /&gt;
&lt;br /&gt;
* In Node tool, &amp;lt;b&amp;gt;deleting node(s)&amp;lt;/b&amp;gt; by Del/Backspace keys or by Ctrl+Alt+clicking a node now &amp;lt;b&amp;gt;tries to preserve, as much as possible, the current shape of the path&amp;lt;/b&amp;gt;. This means that the nodes adjacent to those being deleted have their handles adjusted to approximate the form that the path had before deletion. For example, if you Ctrl+Alt+click a path twice, once to add a new node and then to delete it, the path will not change at all (or change very slightly). The old deletion behavior without adjusting handles is still available via &amp;lt;b&amp;gt;Ctrl+Del&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;Ctrl+Backspace&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Preserving positions of nodes and handles ===&lt;br /&gt;
&lt;br /&gt;
* When you &amp;lt;b&amp;gt;switch the type&amp;lt;/b&amp;gt; of the selected node to Smooth or Symmetric by pressing Shift+S/Shift+Y, you can now &amp;lt;b&amp;gt;preserve the position&amp;lt;/b&amp;gt; of one of the two handles by hovering your mouse over it, so that only the other handle is rotated/scaled to match.&lt;br /&gt;
&lt;br /&gt;
* Similarly, when you &amp;lt;b&amp;gt;join endnodes&amp;lt;/b&amp;gt; by pressing Shift+J, you can &amp;lt;b&amp;gt;preserve the position&amp;lt;/b&amp;gt; of one of the two nodes by hovering your mouse over it, so that only the other node is moved. &lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; key &amp;lt;b&amp;gt;inverts node selection&amp;lt;/b&amp;gt; in the current subpath(s) (i.e. subpaths with at least one selected node); &amp;lt;b&amp;gt;Alt+!&amp;lt;/b&amp;gt; inverts in the entire path. (This is similar to how these keys work in Selector, with current subpath(s) instead of the current layer.)&lt;br /&gt;
&lt;br /&gt;
* The keyboard shortcut for &amp;quot;Make selected segments curves&amp;quot; in Node tool is changed from Shift+K to &amp;lt;b&amp;gt;Shift+U&amp;lt;/b&amp;gt; for better mnemonics.&lt;br /&gt;
&lt;br /&gt;
== Calligraphic pen ==&lt;br /&gt;
&lt;br /&gt;
* Even when using a graphics tablet with pressure sensitivity, the Calligraphy pen's strokes often look too smooth and artificial. To enable a more natural look, the new &amp;lt;b&amp;gt;Tremor&amp;lt;/b&amp;gt; parameter is added to the Calligraphy tool in this version. Adjustable in the Controls bar from 0.0 to 1.0, it will affect your strokes producing anything from slight unevenness to wild blotches and splotches. This significantly expands the creative range of the tool.&lt;br /&gt;
&lt;br /&gt;
* In all previous versions, pen width depended on zoom in such a way that the strokes &amp;lt;i&amp;gt;appeared&amp;lt;/i&amp;gt; the same visible width at any zoom, but were in fact narrower at zoom-in and wider at zoom-out. This behavior makes sense if you want to keep the same &amp;quot;feel&amp;quot; of the pen regardless of zoom; for example, if you zoomed in to make a small fix to your drawing, it's natural that your pen becomes physically smaller but feels the same to you. So, this behavior is kept as the default, but now we also added an alternative mode where your &amp;lt;b&amp;gt;pen width is constant in absolute units&amp;lt;/b&amp;gt; regardless of zoom. To switch to this mode, use the checkbox on the tool's Preferences page (you can open it by double-clicking the tool button).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Width&amp;lt;/b&amp;gt; field in the tool's controls bar now changes &amp;lt;b&amp;gt;from 1 to 100&amp;lt;/b&amp;gt;, which corresponds to the range from 0.01 to 1.0 in the previous version. If the &amp;quot;width in absolute units&amp;quot; mode is turned on, the value in this fields gives the width of the stroke in px units. In the default mode, the value of 100 gives 100px wide strokes only at 100% zoom, and strokes are correspondingly narrower or wider at other zoom levels.&lt;br /&gt;
&lt;br /&gt;
* A new preferences option for the Calligraphic tool, &amp;lt;b&amp;gt;Keep selected&amp;lt;/b&amp;gt;, controls whether the newly created object remains selected after you finish drawing it. If you turn it off (by default it's on) and set the tool to using Last Set color, you can easily choose a new color by clicking on the palette without having to worry if this will change the color of the stroke you just created. (Watch the tool style indicator at the right end of the Controls bar for the style of the next stroke you will draw.)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Esc&amp;lt;/b&amp;gt; deselects selected objects in Calligraphic, as in most other tools.&lt;br /&gt;
&lt;br /&gt;
* The stroke you're drawing is now shown, while you're drawing it, with the correct color and opacity that it will eventually have, instead of always black as before.&lt;br /&gt;
&lt;br /&gt;
* On a new Inkscape installation, this tool now uses the last set style by default instead of the fixed black as before (this is changeable in the Inkscape Preferences for the tool).&lt;br /&gt;
&lt;br /&gt;
== Pen tool ==&lt;br /&gt;
&lt;br /&gt;
* While drawing a path, you can now &amp;lt;b&amp;gt;move the last node you created&amp;lt;/b&amp;gt; by the same keys as in Node tool - that is, arrows, with Shift (for 10x displacement) or Alt (screen pixel displacement) modifiers. &lt;br /&gt;
&lt;br /&gt;
* Also, you can switch the not-yet-finalized (red) segment of the path being drawn from curve to line (&amp;lt;b&amp;gt;Shift+L&amp;lt;/b&amp;gt;) or back to curve (&amp;lt;b&amp;gt;Shift+U&amp;lt;/b&amp;gt;), again the same shortcuts as in the Node tool.&lt;br /&gt;
&lt;br /&gt;
* By popular demand, if a new path is being drawn but not yet finished, &amp;lt;b&amp;gt;Ctrl+Z cancels&amp;lt;/b&amp;gt; that unfinished path (i.e. does the same as Esc), instead of undoing the previous action.&lt;br /&gt;
&lt;br /&gt;
* In Pen tool, &amp;lt;b&amp;gt;Del&amp;lt;/b&amp;gt; works the same as Backspace to delete the last created point on the unfinished path.&lt;br /&gt;
&lt;br /&gt;
= Connectors and automatic layout =&lt;br /&gt;
&lt;br /&gt;
* There have been numerous bugfixes and several improvements to the behaviour of &amp;lt;b&amp;gt;connectors&amp;lt;/b&amp;gt; and the &amp;lt;b&amp;gt;connector tool&amp;lt;/b&amp;gt;:&lt;br /&gt;
** Connectors moved as part of a selection will now stay attached to other objects in the selection, rather than becoming detached from them.&lt;br /&gt;
** By default, the Connector tool will not attach connectors to text objects.  There is a new checkbox in the connector preferences to control this setting.&lt;br /&gt;
** The &amp;lt;b&amp;gt;margins around avoided shapes&amp;lt;/b&amp;gt; (used for autorouting connectors) can now be adjusted via the &amp;quot;Spacing&amp;quot; control on the controls bar.&lt;br /&gt;
&lt;br /&gt;
* Automatic Diagram Layout - A new button is available in the alignment and distribution dialogue that performs automatic layout of diagrams involving a network of shapes and connectors.  Layout is accomplished using force-directed graph layout based on the Kamada-Kawai algorithm.  This algorithm treats edges as if they are springs such that the distance between nodes will be proportional to the path length---number of connectors---between them.  Disconnected components (where not every shape is connected) will be arranged around the circumference of a circle.&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;lt;b&amp;gt;Remove Overlaps&amp;lt;/b&amp;gt; button to move the selected objects enough that they don't overlap each other.  A minimum spacing between the boundaries of objects can be specifiedTogether with the automatic layout tool, described above, this should be a significant addition to Inkscape's usability for diagramming. [Consider expanding this, comparing with existing Unclump and Distribute edge-to-edge buttons. - pjrm]&lt;br /&gt;
&lt;br /&gt;
= Selective tracing with SIOX =&lt;br /&gt;
&lt;br /&gt;
[ishmal]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Snapping =&lt;br /&gt;
&lt;br /&gt;
* [object snap - carl]&lt;br /&gt;
&lt;br /&gt;
* [highlight - mtou]&lt;br /&gt;
&lt;br /&gt;
* [only to visible gridlines - mtou]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Guidelines&amp;lt;/b&amp;gt; are made easier to pick: now you don't need to position mouse &amp;lt;i&amp;gt;exactly&amp;lt;/i&amp;gt; over a guideline to activate it, instead there's a small position tolerance (1 screen pixel on each side of the guideline).&lt;br /&gt;
&lt;br /&gt;
= Sublayers =&lt;br /&gt;
&lt;br /&gt;
Previously, it was only possible to make a group a temporary sublayer by entering that group. Now Inkscape supports creating and using true persistent sublayers within a layer.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Add layer&amp;lt;/b&amp;gt; dialog allows you to place the new layer above, below, or inside the current layer.&lt;br /&gt;
&lt;br /&gt;
* Extended &amp;quot;Select All&amp;quot; option - now there is an option for &amp;quot;Select All&amp;quot; and TAB browsing to work in current layer with its sublayers.&lt;br /&gt;
&lt;br /&gt;
= Extensions =&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Effects menu is now always on&amp;lt;/b&amp;gt;, it's no longer an &amp;quot;experimental feature&amp;quot;.  The preference setting to enable the menu has been removed.&lt;br /&gt;
&lt;br /&gt;
* Python extensions (which includes almost all currently available extensions) &amp;lt;b&amp;gt;work on Windows out of the box&amp;lt;/b&amp;gt;, using a copy of Python shipping with Inkscape. The only minor inconvenience is that when an effect is launched, you get an empty console window that stays on while the effect is doing its work.  (Don't close that window, it will disappear by itself when the effect is finished.)&lt;br /&gt;
&lt;br /&gt;
* A new Python effect, &amp;lt;b&amp;gt;Render &amp;gt; LaTeX formula&amp;lt;/b&amp;gt;, allows you to type in any LaTeX formula and get a vector object with the TeX rendition of this formula inserted into your document. You need to have &amp;lt;b&amp;gt;latex&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;dvips&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;pstoedit&amp;lt;/b&amp;gt; installed and in PATH for this to work.&lt;br /&gt;
&lt;br /&gt;
* A new Python effect, &amp;lt;b&amp;gt;Flatten Path&amp;lt;/b&amp;gt;, flattens paths in the current selection, approximating each path with a polyline whose segments meet the specified criteria for flatness.&lt;br /&gt;
&lt;br /&gt;
* A new Python effect, &amp;lt;b&amp;gt;Measure Path&amp;lt;/b&amp;gt;, attaches a text label to each path in the selection giving the length of that path (in px units).&lt;br /&gt;
&lt;br /&gt;
* The Radius Randomize effect has a new parameter which enables &amp;lt;b&amp;gt;normal distribution&amp;lt;/b&amp;gt; of random displacements instead of uniform as before, which gives a more natural feel to the randomized path.&lt;br /&gt;
&lt;br /&gt;
* INX files now have the ability to hold more information.  This includes tooltips and descriptions of the extensions.  These are all also translatable.&lt;br /&gt;
&lt;br /&gt;
= Formats =&lt;br /&gt;
&lt;br /&gt;
* Inkscape's &amp;lt;b&amp;gt;PDF export&amp;lt;/b&amp;gt; is now native (i.e. does not require any external applications) and &amp;lt;b&amp;gt;supports transparency&amp;lt;/b&amp;gt;, including gradients with transparency. This replaced the old export extension that required Ghostscript and worked via Postscript, losing any transparency. The new PDF export is still immature; in particular it does not handle text, so you should check &amp;quot;Convert text to path&amp;quot; on the export options dialog. Other things not yet supported include: gradients on stroke; eccentric elliptic gradients; patterns, masks, and clipping paths; embedded images.&lt;br /&gt;
&lt;br /&gt;
* [save zip with images - mipmip] collects the svg file and all linked images into a zip archive for distribution.&lt;br /&gt;
&lt;br /&gt;
* An output format for &amp;lt;b&amp;gt;desktop cutting plotters&amp;lt;/b&amp;gt;, such as the Wishblade and Craftrobo, was added. This format is a very minimalist DXF file with appropriate scaling and translation applied. This output format should not be expected to operate as a generalized DXF output.&lt;br /&gt;
&lt;br /&gt;
* [xfig]&lt;br /&gt;
&lt;br /&gt;
* [odg - ishmal]&lt;br /&gt;
&lt;br /&gt;
* The new &amp;lt;b&amp;gt;XCF output extension&amp;lt;/b&amp;gt; exports all top-level elements (i.e. layers and objects directly under root) as PNGs and assembles them into an XCF for procesing in the Gimp. Requires Python, PyXML and Gimp. Gimp 2.2.x or above must be in the path and be named &amp;lt;code&amp;gt;gimp&amp;lt;/code&amp;gt;. A version of Inkscape 0.44 or above must be accessible from the path. Does not function in Windows.&lt;br /&gt;
&lt;br /&gt;
= Configurable keyboard =&lt;br /&gt;
&lt;br /&gt;
Inkscape's &amp;lt;b&amp;gt;keyboard shortcuts are now configurable!&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
At this time, not all Inkscape actions can have their shortcuts customized. However, the majority of actions, including everything you see in the menus, are already configurable, and we're working on making more actions configurable. &lt;br /&gt;
&lt;br /&gt;
On startup, Inkscape reads its keyboard shortcuts from &amp;lt;code&amp;gt;share/keys/default.xml&amp;lt;/code&amp;gt;. That file is a copy of &amp;lt;code&amp;gt;inkscape.xml&amp;lt;/code&amp;gt; in the same directory, which also contains keyboard emulation profiles for other vector editors:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;xara.xml&amp;lt;/code&amp;gt;: Xara X/Xara Xtreme/Xara LX keys&lt;br /&gt;
&lt;br /&gt;
You can copy any of these over default.xml to use that profile. In all profiles, those keys which are not used by the corresponding program still have their Inkscape bindings. If you can contribute a profile for some vector editor that we don't yet have, we will appreciate that. The files have a simple XML-based format described in &amp;lt;code&amp;gt;inkscape.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can also &amp;lt;b&amp;gt;customize some of your keybindings&amp;lt;/b&amp;gt; without overwriting the main &amp;lt;code&amp;gt;default.xml&amp;lt;/code&amp;gt;. If your profile directory (&amp;lt;code&amp;gt;~/.inkscape&amp;lt;/code&amp;gt; on Linux) contains a &amp;lt;code&amp;gt;keys&amp;lt;/code&amp;gt; subdirectory with a &amp;lt;code&amp;gt;default.xml&amp;lt;/code&amp;gt; file, the keybindings from that file will overlay (i.e. add to, and override in case of a conflict) the default bindings. The format of your own &amp;lt;code&amp;gt;default.xml&amp;lt;/code&amp;gt; is the same as that of the main &amp;lt;code&amp;gt;default.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous shortcuts =&lt;br /&gt;
&lt;br /&gt;
* Now you can use &amp;lt;b&amp;gt;Shift+middle button drag&amp;lt;/b&amp;gt;, in any tool, to zoom into an area. This works the same as simple drag in Zoom tool, but is faster because it does not require switching away from your current tool. Together with &amp;lt;b&amp;gt;middle button drag&amp;lt;/b&amp;gt; (panning), &amp;lt;b&amp;gt;middle button click&amp;lt;/b&amp;gt; (zoom in) and &amp;lt;b&amp;gt;Shift+middle button click&amp;lt;/b&amp;gt; (zoom out), this completes the set of canvas navigation shortcuts available in any tool or context.&lt;br /&gt;
&lt;br /&gt;
* In Gradient tool, &amp;lt;b&amp;gt;Shift+R reverses the gradient definition&amp;lt;/b&amp;gt; (i.e. mirrors the stop positions) without moving the gradient handles. For example, an elliptic gradient with blue center and red periphery becomes red in the center and blue in the periphery. This works on the gradient(s) of the currently selected gradient handle or, if no handle is selected, on all selected objects' gradients. (Compare with the Node tool where Shift+R reverses the direction of the selected path.) This is especially convenient for elliptic gradients which, unlike linear, you cannot simply rotate by 180 degrees for the same result.&lt;br /&gt;
&lt;br /&gt;
* In Selector, &amp;lt;b&amp;gt;Ctrl+Enter&amp;lt;/b&amp;gt; enters the selected group (making it a temporary layer). &amp;lt;b&amp;gt;Ctrl+Backspace&amp;lt;/b&amp;gt; leaves the current layer and goes one layer up in the hierarchy (but not to root).&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous improvements =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Document templates&amp;lt;/b&amp;gt; (listed in &amp;lt;i&amp;gt;File &amp;amp;gt; New&amp;lt;/i&amp;gt;) are now first searched in the &amp;lt;code&amp;gt;templates&amp;lt;/code&amp;gt; subdirectory of the user's profile directory (on Linux it's &amp;lt;code&amp;gt;~/.inkscape/templates&amp;lt;/code&amp;gt;), then in the system-wide Inkscape templates directory. This allows you to add your own templates on top of the list of standard templates, as well as override the default template with your own one (the &amp;lt;code&amp;gt;default.svg&amp;lt;/code&amp;gt; in the profile directory has priority over the system-wide one).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Converting stroke to path&amp;lt;/b&amp;gt; now correctly processes dashed strokes. For paths with markers, this command now creates a group containing the stroke converted to path and all its markers as independent objects (i.e. they are not markers anymore, but instead you can easily transform them or paint them any color, as a workaround for the &amp;quot;markers don't take the color of the stroke&amp;quot; bug).&lt;br /&gt;
&lt;br /&gt;
* When toggling one of the &amp;quot;transform with object&amp;quot; buttons (for stroke width, rounded rectangle corners, gradients, or patterns), a &amp;lt;b&amp;gt;message&amp;lt;/b&amp;gt; is displayed in the statusbar explaining what has changed in the program's behavior. Hopefully this will reduce the number of complaints from users who had accidentally toggled one of these and were surprised by the result.&lt;br /&gt;
&lt;br /&gt;
* Whole thousands above 2000 in the rulers are now displayed as &amp;lt;b&amp;gt;2k, 3k, 4k&amp;lt;/b&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
* In the Document Preferences dialog, the new object style for each tool is now shown as a &amp;lt;b&amp;gt;style swatch&amp;lt;/b&amp;gt; (displaying fill/stroke colors and opacity, stroke width, and master opacity), similar in design to the selected style indicator in the statusbar.&lt;br /&gt;
&lt;br /&gt;
* In the Grid Arrange dialog, row/column spacing can now be negative. &lt;br /&gt;
&lt;br /&gt;
* The installation default is now to scale the &amp;lt;b&amp;gt;rounded rectangle corners&amp;lt;/b&amp;gt; with the rectangles themselves (the previous default mode, still available as an option, was to keep rounding radii unchanged when scaling rectangles). &lt;br /&gt;
&lt;br /&gt;
* Added a new &amp;lt;code&amp;gt;--export-area-canvas&amp;lt;/code&amp;gt; command line parameter that causes the exported PNG to contain the full canvas. This option as well as &amp;lt;code&amp;gt;--export-area-drawing&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--export-area&amp;lt;/code&amp;gt; can now be used along with &amp;lt;code&amp;gt;--export-id&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--export-id-only&amp;lt;/code&amp;gt; for greater flexibility.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;--query-*&amp;lt;/code&amp;gt; command line parameters now return the true SVG bounding box of the object instead of the Inkscape coordinate system bbox (with inverted Y axis). The new behavior makes more sense for scripting use of Inkscape.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;dpi&amp;lt;/b&amp;gt; value in the Export dialog has had its range extended; now possible values are from 0.01 to 100000. &lt;br /&gt;
&lt;br /&gt;
* Individual &amp;lt;b&amp;gt;&amp;amp;lt;tspan&amp;amp;gt;s&amp;lt;/b&amp;gt; within text objects (including line tspans) can now be selected via the XML editor to view their bounding boxes (though per SVG, you cannot transform them). Also, you can use the &amp;lt;code&amp;gt;--query-*&amp;lt;/code&amp;gt; command line parameters to find out the bounding boxes of tspans from a script. (Individual strings within or between tspans are still not selectable, and they cannot have an ID for querying anyway.)&lt;br /&gt;
&lt;br /&gt;
* The placeholder image which is shown when a bitmap file was no longer accessible reads now &amp;quot;&amp;lt;b&amp;gt;Linked image not found&amp;lt;/b&amp;gt;&amp;quot; instead of the confusing &amp;quot;Broken image&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Cloning multiple selected objects&amp;lt;/b&amp;gt; now works as expected (i.e. each selected object is cloned separately, similar to the Duplicate command). Previously you could only clone a single selected object. &lt;br /&gt;
&lt;br /&gt;
* The separate &amp;quot;license&amp;quot; and &amp;quot;contributors&amp;quot; dialogs have been merged into tabs  on the About dialog.  The about dialog now correctly sizes itself to fit the size of the splash SVG (while remaining resizable), and the rendering area is now cropped to the correct aspect ratio when the dialog is resized.  The dialog also now displays the build information in the upper right corner.&lt;br /&gt;
&lt;br /&gt;
* [new cursors - scislac]&lt;br /&gt;
&lt;br /&gt;
* In the Transform dialog / Rotate tab, the icon was flipped horizontally to be in line with the direction of positive rotation; the change was applied to the default (now crispy) and legacy icon sets.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;scale ratio lock button&amp;lt;/b&amp;gt; on the Selector controls bar shows a closed lock when pressed and open lock otherwise (same as the layer lock in the statusbar).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt; button on Export dialog now opens the new file chooser, same as those used by Open and Save.&lt;br /&gt;
&lt;br /&gt;
* A new &amp;lt;b&amp;gt;RazorWire&amp;lt;/b&amp;gt; path marker was added. By applying it as a mid-marker you can get a good approximation of a razor wire.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous bugfixes =&lt;br /&gt;
&lt;br /&gt;
* Reading a document with an &amp;lt;b&amp;gt;incorrect namespace URI&amp;lt;/b&amp;gt; not only did not cause Inkscape to complain, but could also &amp;quot;pollute&amp;quot; Inkscape's internal namespace table, resulting in an &amp;quot;infection&amp;quot; of subsequently saved documents by the incorrect namespace. This is now fixed, but as a result, documents with incorrect namespace URIs will no longer load. You will have to edit them in a text editor to fix the namespaces. &lt;br /&gt;
&lt;br /&gt;
* With newer versions of GTK, &amp;lt;b&amp;gt;dragging with graphics tablet pen&amp;lt;/b&amp;gt; did not work in some tools and contexts (in particular, in Node and Rectangle tools). This is fixed.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Scaling of objects with stroke&amp;lt;/b&amp;gt; in Selector used to cause undesired shifts of the scaled object, as well as scaling it in the dimension which was intended to remain untouched (e.g. slight change in width when you scale only height). All these problems are now fixed, both for interactive scaling by mouse and for numeric scaling via the Controls bar, and for both values of the &amp;quot;Scale stroke with objects&amp;quot; option. Among other things, this means that stroked objects no longer lose snapping on scale, and that the &amp;quot;Default scale origin&amp;quot; option in the Selector tool preferences finally works as designed. Caveat: There may still be problems if you scale a selection that contains objects with different stroke widths.&lt;br /&gt;
&lt;br /&gt;
* Scaling of stroke now works for objects that didn't specify stroke-width; before, they always ended up with the default 1px stroke.&lt;br /&gt;
&lt;br /&gt;
* The bounding box for text and flowed text objects did not include stroke width.  This has been fixed.&lt;br /&gt;
&lt;br /&gt;
* Stroke miterlimit on text objects was misinterpreted in absolute units instead of multiplies of stroke width (resulting in miter joins rendered as bevel). &lt;br /&gt;
&lt;br /&gt;
* The unfinished path in Pen tool is now cancelled, not finalized, when you switch away from the Pen tool. Apart from being more intuitively correct, this also fixes a crash when you quit Inkscape with the unfinished path in Pen tool.&lt;br /&gt;
&lt;br /&gt;
* Fonts on Win32 now use the native font mapper, meaning that Inkscape's font list is the same as other Windows programs, and the (potentially) very long delay experienced when using fonts for the first time in each session is gone.&lt;br /&gt;
&lt;br /&gt;
* Setting dash pattern was broken for transformed objects, and copy/paste of style with dash pattern did not apply correctly to objects with transforms.&lt;br /&gt;
&lt;br /&gt;
* An error caused a complete extra screen redraw after each zoom operation. That is, after you press &amp;quot;+&amp;quot; in a complex drawing, Inkscape redraws, but for some time after that it remains still unresponsive because it does that second redraw (invisibly for you, i.e. nothing changes on the screen). This is fixed.&lt;br /&gt;
&lt;br /&gt;
* Gradient rendering was off by one pixel, which often resulted in visibly wrong gradient rendering for small objects or in zoom-out. &lt;br /&gt;
&lt;br /&gt;
* The SVG path parser could not handle fractional numbers with the initial dot. &lt;br /&gt;
&lt;br /&gt;
* Several pattern rendering bugs are fixed, discovered by working with SVG files exported from Adobe Illustrator.&lt;br /&gt;
&lt;br /&gt;
* Inkscape on Mac OS X will now notice fonts in your ~/Library/Fonts directory, in addition to the other standard places.&lt;br /&gt;
&lt;br /&gt;
* Inkscape couldn't be compiled with libxml versions &amp;lt;= 2.6.9, and we now bumped the requirements from 2.6.0 up to &amp;lt;b&amp;gt;libxml &amp;gt;= 2.6.11&amp;lt;/b&amp;gt;, which is the earliest you can get officially, anyway.&lt;br /&gt;
&lt;br /&gt;
* Inkscape no longer crashes when presented with a defective inx file for extensions.&lt;br /&gt;
&lt;br /&gt;
* More document memory is now freed when documents are closed.&lt;br /&gt;
&lt;br /&gt;
* EPS output now correctly includes an %%EOF footer.&lt;br /&gt;
&lt;br /&gt;
* There was a regression in 0.43 that caused several minor, though annoying bugs; knots and handles remained highlighted after the mouse was released, and the rubberband selection rectangle stayed visible if the selection was ended over a node while in the node tool.  This regression has been fixed.         &lt;br /&gt;
&lt;br /&gt;
* The connector routing code would previously sometimes confuse objects between multiple documents resulting in strange routing behaviour.  This has been fixed.&lt;br /&gt;
&lt;br /&gt;
* There existed a bug in 0.43's Inkboard code that allowed a malicious outsider to very easily disrupt an Inkboard session.  This has been fixed.&lt;br /&gt;
&lt;br /&gt;
* There existed a bug in 0.43's Inkboard code that would cause deadlocks in the case that two users attempted to invite each other at the same time (see bug #[https://sourceforge.net/tracker/?func=detail&amp;amp;atid=604306&amp;amp;aid=1352522&amp;amp;group_id=93438 1352522] for further details).  This should be fixed, although the fix has not been widely tested.&lt;br /&gt;
&lt;br /&gt;
* There existed a bug in 0.43's Inkboard code that would cause session invitations to not appear on the invitee's screen.  This was the result of a mistake in handling GDK modifier flags, and has been fixed.&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
* INX files (containing the UI of the external effects) now allow the user visible strings to be translated.  This means that effect dialogs, file type selections, and extension names can all be translated by translators.&lt;br /&gt;
&lt;br /&gt;
= Internal =&lt;br /&gt;
&lt;br /&gt;
* The Document Properties Dialog code was completely gtkmmified, which lead to dramatic reduction of code size due to usage of widget objects. The used widget objects should be reusable by other dialogs, too, and the code is much more readable.&lt;br /&gt;
&lt;br /&gt;
* Work on optimizing includes in all cpp files started, using the purgeincludes tool specifically written for that purpose, and ended with 40% of include lines removed!&lt;br /&gt;
&lt;br /&gt;
= Known problems =&lt;br /&gt;
&lt;br /&gt;
=== Namespaces may need fixing ===&lt;br /&gt;
&lt;br /&gt;
* Previous versions of inkscape sometimes silently saved documents with &amp;lt;b&amp;gt;wrong namespace URIs&amp;lt;/b&amp;gt;.  This has been fixed, but such corrupted documents will no longer load successfully.  Such documents may require their namespace declarations to be fixed by hand.&lt;br /&gt;
&lt;br /&gt;
=== Beware of defective themes on Linux ===&lt;br /&gt;
&lt;br /&gt;
* Inkscape and other Gtk programs can crash on any Linux, when the &amp;lt;b&amp;gt;gtk2-engines-smooth / libsmooth&amp;lt;/b&amp;gt; package is installed. We have filed a bug against libsmooth which is now in gtk-engine and part of gnome. Removing the package resolves the problem, however, but it would be nice if you as affected user would inform the gtk-engines maintainers of the problem. See especially http://bugzilla.gnome.org/show_bug.cgi?id=312115 (thanks to Thomas Wood)&lt;br /&gt;
* A similar crash happens if the &amp;lt;b&amp;gt;KDE Baghira&amp;lt;/b&amp;gt; theme or the package &amp;lt;b&amp;gt;gtk_qt_engine&amp;lt;/b&amp;gt; are installed. If you experience Inkscape crashes on KDE, please try to install a different theme from Baghira, or uninstall the gtk_qt_engine package from your system. Both problems also affect older versions of Inkscape.&lt;br /&gt;
&lt;br /&gt;
= Previous releases =&lt;br /&gt;
&lt;br /&gt;
* ReleaseNotes043 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes043)&lt;br /&gt;
* ReleaseNotes042 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes042)&lt;br /&gt;
* ReleaseNotes041 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes041)&lt;br /&gt;
* ReleaseNotes040 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes040)&lt;br /&gt;
* ReleaseNotes039 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes039)&lt;br /&gt;
* ReleaseNotes038 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes038)&lt;br /&gt;
* ReleaseNotes037 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes037)&lt;br /&gt;
* ReleaseNotes036 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes036)&lt;br /&gt;
* ReleaseNotes035 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes035)&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Release_notes/0.44&amp;diff=6523</id>
		<title>Release notes/0.44</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Release_notes/0.44&amp;diff=6523"/>
		<updated>2006-05-28T06:13:48Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: /* Sublayers */ Grammar: no apostrophe in possessive &amp;quot;its&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Inkscape 0.44: overview ==&lt;br /&gt;
&lt;br /&gt;
Inkscape 0.44 is bigger and better than ever. Some highlights:&lt;br /&gt;
&lt;br /&gt;
* Layers dialog&lt;br /&gt;
&lt;br /&gt;
* Outline mode, many performance improvements&lt;br /&gt;
&lt;br /&gt;
* Native PDF export with transparency&lt;br /&gt;
&lt;br /&gt;
* Clipping and masking support&lt;br /&gt;
&lt;br /&gt;
* Configurable keyboard shortcuts, including Xara X emulation&lt;br /&gt;
&lt;br /&gt;
* Docked color palette in the editing window&lt;br /&gt;
&lt;br /&gt;
* Interactive indicator of the style of selection in the statusbar&lt;br /&gt;
&lt;br /&gt;
* Innovative &amp;quot;node sculpting&amp;quot; and other improvements in Node tool&lt;br /&gt;
&lt;br /&gt;
* Extensions are enabled by default and work on both Linux and Windows&lt;br /&gt;
&lt;br /&gt;
* Better SVG support: &amp;lt;switch&amp;gt; element, ICC color profiles for images&lt;br /&gt;
&lt;br /&gt;
* Persistent rotation centers, Paste Size command&lt;br /&gt;
&lt;br /&gt;
* Redesigned preferences dialogs, new icons, rearranged menus, many cosmetic improvements&lt;br /&gt;
&lt;br /&gt;
* Hundreds of bugfixes and smaller features&lt;br /&gt;
&lt;br /&gt;
* Not directly related to Inkscape, but important nevertheless: since our last release, [http://www.mozilla.com/firefox/ Firefox 1.5] was released with SVG support enabled by default. This means that you can now view any Inkscape document right in your Firefox window without any format conversions or installing any plugins!&lt;br /&gt;
&lt;br /&gt;
= Performance =&lt;br /&gt;
&lt;br /&gt;
== Outline mode ==&lt;br /&gt;
&lt;br /&gt;
An Outline (&amp;quot;wireframe&amp;quot;) display mode is implemented. Use the &amp;lt;i&amp;gt;View &amp;gt; Display Mode &amp;gt; Outline&amp;lt;/i&amp;gt; to activate it. In this mode:&lt;br /&gt;
&lt;br /&gt;
* all paths and shapes are rendered as &amp;lt;b&amp;gt;inverse&amp;lt;/b&amp;gt; (black on light background and vice versa) &amp;lt;b&amp;gt;outlines&amp;lt;/b&amp;gt; of constant width (1 screen pixel regardless of zoom), without fill;&lt;br /&gt;
&lt;br /&gt;
* text is painted by inverse fill, without stroke; &lt;br /&gt;
&lt;br /&gt;
* bitmaps are shown as is;&lt;br /&gt;
&lt;br /&gt;
* any opacity and gradients are ignored.&lt;br /&gt;
&lt;br /&gt;
The outline mode is usually not drastically faster than regular mode (usually 10% to 50% faster), and in some special cases it may even be slower. However, the value of the outline mode is not only in its speed; it is a good way to get an idea of the structure and objects of your document, and it is convenient for precision node editing and for finding &amp;quot;stray objects&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== Speed ==&lt;br /&gt;
&lt;br /&gt;
In addition to the Outline mode which makes it much easier to work with complex drawings, this version of Inkscape also provides significant speed improvements in many areas.&lt;br /&gt;
&lt;br /&gt;
* Thanks to &amp;lt;b&amp;gt;optimizations in the renderer&amp;lt;/b&amp;gt;, Inkscape's screen redraw is &amp;lt;b&amp;gt;faster by at least 10%&amp;lt;/b&amp;gt;, and in some cases (such as complex stroked/dashed paths at high zooms) &amp;lt;b&amp;gt;up to three times faster&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Optimizations in the Node tool&amp;lt;/b&amp;gt; resulted in noticeable speed gains for node editing. Thus, switching to and from the Node tool (with a path selected), as well as selecting nodes in that tool, are now &amp;lt;b&amp;gt;at least ten times faster&amp;lt;/b&amp;gt; than before. Other operations, including curve and node dragging and move/scale/rotate operations on multiple selected nodes, are much faster as well. This is especially important when working with complex paths; with these optimizations, paths containing several thousand nodes, though still slow, are much more usable.&lt;br /&gt;
&lt;br /&gt;
* An optimization in the attribute setting method made operations such as moving multiple objects with arrow keys at least &amp;lt;b&amp;gt;30% faster&amp;lt;/b&amp;gt; compared to 0.43. This is especially noticeable when you are moving clones selected together with their original (e.g. a clone tiling), in which case Inkscape now works &amp;lt;b&amp;gt;three to four times faster&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Interface icons&amp;lt;/b&amp;gt; are now rendered in the background (from SVG source in &amp;lt;code&amp;gt;share/icons/icons.svg&amp;lt;/code&amp;gt;) when Inkscape is idle, rather than waiting for all the icons in a menu to render the first time you pull it up. This eliminates the annoying delay when opening menus for the first time.&lt;br /&gt;
&lt;br /&gt;
* Previously, zooming in to view a small portion of a path (especially big and complex path), there was a very noticeable slowdown and memory use increased dramatically. We optimized the renderer to &amp;lt;b&amp;gt;only process the visible part of a path&amp;lt;/b&amp;gt;, and as a result the rendering speed is now almost the same at any zoom up to the maximum, providing up to 10-40 times speedup compared to the previous version (the closer is the zoom, the greater is the gain).&lt;br /&gt;
&lt;br /&gt;
= Interface =&lt;br /&gt;
&lt;br /&gt;
== Layers dialog ==&lt;br /&gt;
&lt;br /&gt;
* Ctrl+Shift+L [joncruz, mental]&lt;br /&gt;
&lt;br /&gt;
== Selected style indicator ==&lt;br /&gt;
&lt;br /&gt;
A new control in the left end of the statusbar lets you quickly view and change the &amp;lt;b&amp;gt;fill and stroke of the selected objects&amp;lt;/b&amp;gt;. When you have a text selection in Text tool or a gradient handle selected in the Gradient tool, this indicator displays and changes the style of the text fragment or gradient stop, instead of the entire object (it's the same behavior as the Fill&amp;amp;amp;Stroke dialog.)&lt;br /&gt;
&lt;br /&gt;
* The two indicators, labelled &amp;lt;b&amp;gt;F:&amp;lt;/b&amp;gt; (top) and &amp;lt;b&amp;gt;S:&amp;lt;/b&amp;gt; (bottom), display fill and stroke of the selected object(s) correspondingly. (For gradient handles, they always display the same style.)&lt;br /&gt;
&lt;br /&gt;
* Each fill/stroke indicator can display either a &amp;lt;b&amp;gt;color+opacity swatch&amp;lt;/b&amp;gt; (the opacity shown here is the fill opacity or stroke opacity, not the master opacity) or a text label specifying &amp;lt;b&amp;gt;N/A&amp;lt;/b&amp;gt; (nothing selected), &amp;lt;b&amp;gt;None&amp;lt;/b&amp;gt; (no fill/stroke), &amp;lt;b&amp;gt;Unset&amp;lt;/b&amp;gt; (unset fill/stroke), &amp;lt;b&amp;gt;L Gradient&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;R Gradient&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Pattern&amp;lt;/b&amp;gt; (corresponding fill/stroke types), or &amp;lt;b&amp;gt;Different&amp;lt;/b&amp;gt; (selected objects have different fill/stroke types).&lt;br /&gt;
&lt;br /&gt;
* Additionally, each indicator may be accompanied by one of two flags, &amp;lt;b&amp;gt;m&amp;lt;/b&amp;gt; (&amp;quot;multiple&amp;quot;, meaning there are two or more objects all with the same fill/stroke) or &amp;lt;b&amp;gt;a&amp;lt;/b&amp;gt; (&amp;quot;averaged&amp;quot;, meaning there are two or more objects with different flat colors in fill/stroke, and the indicator shows the average of these colors).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Left-click&amp;lt;/b&amp;gt; on an indicator opens or activates the Fill&amp;amp;Stroke dialog with the corresponding tab (Fill or Stroke) active.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Right-click&amp;lt;/b&amp;gt; on an indicator opens a popup menu with the following items:&lt;br /&gt;
** &amp;lt;b&amp;gt;Edit fill/stroke...&amp;lt;/b&amp;gt;: Opens or activates the Fill&amp;amp;Stroke dialog with the corresponding tab selected. (Same as left-click.)&lt;br /&gt;
** &amp;lt;b&amp;gt;Last set color&amp;lt;/b&amp;gt;: Applies to the selected objects the fill/stroke color that was last applied to anythig.&lt;br /&gt;
** &amp;lt;b&amp;gt;Last selected color&amp;lt;/b&amp;gt;: Applies to the selected objects the fill/stroke color that was last displayed in this indicator. (Allows you to easily copy fill/stroke color between objects: select source, select destination, apply &amp;quot;last selected color&amp;quot;.)&lt;br /&gt;
**  &amp;lt;b&amp;gt;Invert&amp;lt;/b&amp;gt;: Sets the fill or stroke to the inverse of the current color (does not affect opacity).&lt;br /&gt;
**  &amp;lt;b&amp;gt;White&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Black&amp;lt;/b&amp;gt;: Sets the fill or stroke to the corresponding color (fully opaque).&lt;br /&gt;
** &amp;lt;b&amp;gt;Copy color&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Paste color&amp;lt;/b&amp;gt;: Copies or pastes the fill or stroke color (when it's color) to/from the system clipboard, as text in the &amp;lt;code&amp;gt;#rrggbb&amp;lt;/code&amp;gt; hex format.&lt;br /&gt;
** &amp;lt;b&amp;gt;Swap fill and stroke&amp;lt;/b&amp;gt;: Exchanges fill and stroke (both their types and colors, if any). &lt;br /&gt;
** &amp;lt;b&amp;gt;Make fill/stroke opaque&amp;lt;/b&amp;gt;: Removes fill or stroke transparency (not master transparency!).&lt;br /&gt;
** &amp;lt;b&amp;gt;Unset fill/stroke&amp;lt;/b&amp;gt;: Unsets fill or stroke from selected objects.&lt;br /&gt;
** &amp;lt;b&amp;gt;Remove fill/stroke&amp;lt;/b&amp;gt;: Removes fill or stroke from the selected objects.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Middle-click&amp;lt;/b&amp;gt; on a fill/stroke indicator removes fill/stroke from selected objects; if it is already removed (i.e. if the indicator displays &amp;quot;None&amp;quot;), it does the same as the &amp;quot;Last set color&amp;quot; command from the popup menu.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Drag and Drop&amp;lt;/b&amp;gt; of colors onto a fil/stroke indicator sets the fill and stroke of the selected object(s) correspondingly.&lt;br /&gt;
&lt;br /&gt;
* The Stroke indicator also displays the &amp;lt;b&amp;gt;stroke width&amp;lt;/b&amp;gt; of selection (averaged if there are multiple objects selected with different stroke widths), located to the right of the stroke color/transparency swatch. Left-clicking on it opens the Fill&amp;amp;Stroke dialog with the Stroke Style tab selected. Right-clicking on it opens a popup menu which allows you to choose the units for displaying the stroke width, as well as choose one of the presets to assign to selection.&lt;br /&gt;
&lt;br /&gt;
* To the right of the fill/stroke indicators, the &amp;lt;b&amp;gt;Opacity&amp;lt;/b&amp;gt; numeric field (labelled &amp;quot;O:&amp;quot;) shows and allows you to change the master opacity of the selected object (or the averaged opacity of several selected objects). &amp;lt;b&amp;gt;Right-clicking &amp;lt;/b&amp;gt; the numeric field opens a popup menu with preset opacity levels. &amp;lt;b&amp;gt;Middle-clicking&amp;lt;/b&amp;gt; on the &amp;quot;O:&amp;quot; label cycles the opacity through the values of 0 (transparent), 0.5, and 1 (opaque).&lt;br /&gt;
&lt;br /&gt;
The zoom field and the cursor coordinates indicator have been rearranged for compactness and moved to the right end of the statusbar. There's also a window resize handle added at the very end of the statusbar.&lt;br /&gt;
&lt;br /&gt;
== Tool style indicators ==&lt;br /&gt;
&lt;br /&gt;
For each object-creating tool (shapes, Pen/Pencil, Calligraphic, Text), the Controls bar (above the canvas) now includes a &amp;lt;b&amp;gt;style indicator&amp;lt;/b&amp;gt; on the right. This indicator shows you which style the newly created object will have. The indicator correctly displays whichever style the tool is set to use - the global &amp;quot;last set&amp;quot; style or that tool's fixed style. For example, clicking on a palette swatch (even with nothing selected) changes the &amp;quot;last set&amp;quot; color and, if your tool is set to use the last set color, its indicator is updated, giving you an idea of your &amp;quot;brush&amp;quot; before you start to draw.&lt;br /&gt;
&lt;br /&gt;
== Controls bar for the Text tool ==&lt;br /&gt;
&lt;br /&gt;
[deadchip]&lt;br /&gt;
&lt;br /&gt;
== Docked color palette ==&lt;br /&gt;
&lt;br /&gt;
* Previously, color swatches could only be used from a floating palette (Ctrl+Shift+W). Now the color swatches palette is embedded in the main UI, at the bottom of the window between the canvas and the statusbar. It is enabled by default; use &amp;lt;i&amp;gt;View &amp;gt; Show/Hide &amp;gt; Palette&amp;lt;/i&amp;gt; to enable or disable it. The docked palette has the same functionality as the floating one; use a button in the top right corner to access the swatches menu.&lt;br /&gt;
&lt;br /&gt;
* All standard sizes of the swatches (Tiny, Small, Medium, Large, Huge) are made &amp;lt;b&amp;gt;smaller&amp;lt;/b&amp;gt; overall.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Wrap&amp;lt;/b&amp;gt; option (off by default) in the swatches menu converts the palette from a single row into a frame 2 or 3 rows high, for better access to colors in large palettes.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Drag and Drop&amp;lt;/b&amp;gt; of &amp;lt;b&amp;gt;colors&amp;lt;/b&amp;gt; has been enabled.&lt;br /&gt;
** Dragging colors from a palette shows a live swatch of the color being dragged under cursor.&lt;br /&gt;
** Drag and Drop of colors onto the selected style indicator in the statusbar sets the fill or stroke of the selected object(s).&lt;br /&gt;
** Colors can be &amp;lt;b&amp;gt;dropped&amp;lt;/b&amp;gt; directly on to objects on canvas to set their &amp;lt;b&amp;gt;fill&amp;lt;/b&amp;gt;, or &amp;lt;b&amp;gt;shift+dropped&amp;lt;/b&amp;gt; to set their &amp;lt;b&amp;gt;stroke&amp;lt;/b&amp;gt;. This affects only the object you drop the color on, regardless of whether that object is selected or not.&lt;br /&gt;
** Colors can be dragged to and from other applications.&lt;br /&gt;
&lt;br /&gt;
* The new &amp;lt;b&amp;gt;Inkscape default&amp;lt;/b&amp;gt; color palette was added. It contains a range of grays, standard HTML named colors, and a full range of colors sorted by their HSL values (475 colors overall). It is generated by a Python script which is available from Inkscape SVN in share/palettes.&lt;br /&gt;
&lt;br /&gt;
* A number of &amp;lt;b&amp;gt;specialized color palettes&amp;lt;/b&amp;gt;, useful in color-coordinated projects, was borrowed from GIMP: Reds, Greens, Blues, Gold, Royal, Khaki, Hilite, and Topographic.&lt;br /&gt;
&lt;br /&gt;
== Inkscape Preferences dialog ==&lt;br /&gt;
&lt;br /&gt;
Not only was the Inkscape Preferences dialog completely rewritten and redesigned, it is now also &amp;lt;b&amp;gt;fully GNOME-HIG compliant&amp;lt;/b&amp;gt;. Numerous &amp;lt;b&amp;gt;bugs&amp;lt;/b&amp;gt; were taken care of with the rewrite. As a new feature, the &amp;lt;b&amp;gt;Simplify threshold&amp;lt;/b&amp;gt; can now be set with more precision.&lt;br /&gt;
&lt;br /&gt;
== Document Properties / Metadata dialogs ==&lt;br /&gt;
&lt;br /&gt;
* The Document Preferences dialog is now named &amp;lt;b&amp;gt;Document Properties&amp;lt;/b&amp;gt;, and it was split in two: metadata were extracted into the &amp;lt;b&amp;gt;Document Metadata&amp;lt;/b&amp;gt; dialog; metadata widgets are now also spread over two pages.&lt;br /&gt;
&lt;br /&gt;
* A button was added to &amp;lt;b&amp;gt;fit the canvas to the current selection&amp;lt;/b&amp;gt; or, if there's no selection, to the entire drawing. The button resizes the canvas and, if necessary, moves the drawing into place. It is now very easy to size the canvas to an illustration after it is ready.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;New controls&amp;lt;/b&amp;gt;: the new object snapping features required their own property widgets, and you can set the snapping sensitivity with a slider, or let it snap regardless of distance (grid only).&lt;br /&gt;
&lt;br /&gt;
* Rearrangements within &amp;lt;b&amp;gt;Document Properties&amp;lt;/b&amp;gt;: everything snapping-related was collected on one page; Grid and Guide widgets are on their own, the same page. For better HIG compliance, all widgets were categorized; especially the widgets on the Page page were completely rearranged in the General/Format/Border categories.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Bug fixes&amp;lt;/b&amp;gt;: grayed out license URI had too low contrast, so it's no longer grayed out; the proprietary license didn't clean the license URI; spinbuttons had no tooltips, and minor grid quirks were removed; data was not updated when a new file replaced another in the same window.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;HIG compliance&amp;lt;/b&amp;gt;: much work went into that, and now only a few details are missing from full Gnome-HIG compliance.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Updated Creative Commons Licenses&amp;lt;/b&amp;gt;: Updated CC licenses to the latest 2.5 versions by default in the license tab of the metadata dialog.&lt;br /&gt;
&lt;br /&gt;
== Menus ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Zoom&amp;lt;/b&amp;gt; commands in the View menu are moved to a submenu; the &amp;lt;i&amp;gt;Zoom In&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;Zoom Out&amp;lt;/i&amp;gt; commands are added to that submenu.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Clone&amp;lt;/b&amp;gt; commands are moved into a submenu in Edit menu and given more descriptive names and tips.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Pattern&amp;lt;/b&amp;gt; commands (&amp;lt;i&amp;gt;Objects to Pattern&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;Pattern to Objects&amp;lt;/i&amp;gt;) are moved into a submenu in Object menu, under the new Clip and Mask submenus.&lt;br /&gt;
&lt;br /&gt;
* The contents of the &amp;lt;b&amp;gt;Effects menu&amp;lt;/b&amp;gt; are categorized into submenus, and several effects are renamed to use more intuitive names. &lt;br /&gt;
&lt;br /&gt;
== Statusbar ==&lt;br /&gt;
&lt;br /&gt;
* In Selector, for multiple selected objects, the statusbar now reports their types. For example, if 5 groups are selected, it displays&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;5&amp;lt;/b&amp;gt; objects of type &amp;lt;b&amp;gt;Group&amp;lt;/b&amp;gt; in layer &amp;lt;b&amp;gt;LayerName&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:instead of just &amp;quot;5 objects selected&amp;quot; as before. If there are up to 3 types in the selection, they will be listed, for example:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;5&amp;lt;/b&amp;gt; objects of types &amp;lt;b&amp;gt;Group&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Path&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Rectangle&amp;lt;/b&amp;gt; in layer &amp;lt;b&amp;gt;LayerName&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:The order of the list will correspond to the order in which the objects were added to selection. If there are 4 or more types in selection, only the number of types is reported, for example:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;5&amp;lt;/b&amp;gt; objects of &amp;lt;b&amp;gt;4&amp;lt;/b&amp;gt; types in layer &amp;lt;b&amp;gt;LayerName&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* In Selector, objects selected in groups are now identified as such, and the group ID is given, for example:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;Rectangle&amp;lt;/b&amp;gt; in group &amp;lt;i&amp;gt;g212&amp;lt;/i&amp;gt; (layer &amp;lt;b&amp;gt;content&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
:If selected objects have different parents within one layer (for example, if one is selected in a group and another outside it), the number of parents is reported:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; objects of types &amp;lt;b&amp;gt;Rectangle&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Path&amp;lt;/b&amp;gt; in &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; parents (layer &amp;lt;b&amp;gt;content&amp;lt;/b&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
:If objects are in different layers, only the number of layers is reported since this also implies different parents:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; objects of types &amp;lt;b&amp;gt;Rectangle&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Path&amp;lt;/b&amp;gt; in &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; layers&lt;br /&gt;
&lt;br /&gt;
* In Node tool, if your node selection includes nodes from different subpaths, statusbar reports the number of subpaths with selection and the total number of subpaths, for example:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; of &amp;lt;b&amp;gt;195&amp;lt;/b&amp;gt; nodes selected in &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt; of &amp;lt;b&amp;gt;36&amp;lt;/b&amp;gt; subpaths.&lt;br /&gt;
&lt;br /&gt;
* The contents of the statusbar message are now duplicated as a &amp;lt;b&amp;gt;tooltip&amp;lt;/b&amp;gt; that is shown when you hover the mouse over the statusbar. [TODO: need to strip markup from the tooltips.] &lt;br /&gt;
&lt;br /&gt;
* The statusbar text is now no longer just cut off if there is insufficient room, but an ellipsis (...) is inserted at the end to show there's more (only with Gtk 2.6 and newer).&lt;br /&gt;
&lt;br /&gt;
== Theme ==&lt;br /&gt;
&lt;br /&gt;
* Inkscape has a &amp;lt;b&amp;gt;new default icon set&amp;lt;/b&amp;gt; titled &amp;quot;Crispy&amp;quot; provided by Andre Sousa. The new icons are intended to add a more professional and cohesive look to our application, as well as to make the functions the icons represent more self-evident.&lt;br /&gt;
&lt;br /&gt;
* [new mouse cursors are coloured and antialiased - scislac]&lt;br /&gt;
&lt;br /&gt;
= Clipping and masking =&lt;br /&gt;
&lt;br /&gt;
Inkscape now provides some UI for using &amp;lt;b&amp;gt;clipping paths and masks&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* Any object can be non-destructively intersected with a path (called a &amp;lt;i&amp;gt;clipping path&amp;lt;/i&amp;gt;) so that only the intersected portion of the object is visible. &lt;br /&gt;
** &amp;lt;b&amp;gt;To apply clipping&amp;lt;/b&amp;gt;, select the objects to be clipped and the clipping path object, make sure the clipping path is above the other objects in z-order, and do &amp;lt;i&amp;gt;Object &amp;gt; Clip &amp;gt; Set&amp;lt;/i&amp;gt;.&lt;br /&gt;
** You can &amp;lt;b&amp;gt;transform, edit, or style&amp;lt;/b&amp;gt; the clipped objects as usual. The clipping remains applied and transforms together with each clipped object.&lt;br /&gt;
** To &amp;lt;b&amp;gt;remove the clipping&amp;lt;/b&amp;gt;, do &amp;lt;i&amp;gt;Object &amp;gt; Clip &amp;gt; Release&amp;lt;/i&amp;gt;. The clipping path is returned to the drawing as a regular object; it is inserted on top of the unclipped object in z-order. &lt;br /&gt;
&lt;br /&gt;
* Any object can be non-destructively masked by another object (called &amp;lt;i&amp;gt;mask&amp;lt;/i&amp;gt;) so that: the mask's black or transparent areas become fully transparent in the masked object; mask's opaque white areas become fully opaque; and all intermediate colors translate into intermediate levels of opacity in the masked object. This allows you to apply, for example, arbitrary transparency gradients to objects.&lt;br /&gt;
** To &amp;lt;b&amp;gt;apply a mask&amp;lt;/b&amp;gt;, select the objects to be masked and the mask object, make sure the mask is above the other objects in z-order, and do &amp;lt;i&amp;gt;Object &amp;gt; Mask &amp;gt; Set&amp;lt;/i&amp;gt;.&lt;br /&gt;
** You can &amp;lt;b&amp;gt;transform, edit, or style&amp;lt;/b&amp;gt; the masked objects as usual. The mask remains applied and transforms together with each masked object.&lt;br /&gt;
** To &amp;lt;b&amp;gt;remove the masking&amp;lt;/b&amp;gt;, do &amp;lt;i&amp;gt;Object &amp;gt; Mask &amp;gt; Release&amp;lt;/i&amp;gt;. The mask is returned to the drawing as a regular object; it is inserted on top of the unmasked object in z-order. &lt;br /&gt;
&lt;br /&gt;
* Objects with clippath show their bounding box intersected with the bounding box of the clippath, instead of the original unclipped bbox as before. (However, this does not apply to objects without clippath of their own which are clipped by being inside a clipped group.)&lt;br /&gt;
&lt;br /&gt;
* Clipped or masked objects display &amp;quot;&amp;lt;i&amp;gt;clipped&amp;lt;/i&amp;gt;&amp;quot; or &amp;quot;&amp;lt;i&amp;gt;masked&amp;lt;/i&amp;gt;&amp;quot;, correspondingly, in their statusbar descriptions.&lt;br /&gt;
&lt;br /&gt;
* Although Inkscape had render-only support for clipping paths and masks for quite some time, in this release we fixed a number of bugs which may affect the display of your documents using clippaths or masks.&lt;br /&gt;
** Clippaths and masks with objectBoundingBox units are now shown correctly upon loading of the document.&lt;br /&gt;
** Clippaths without fill didn't work, this is now fixed.&lt;br /&gt;
** Objects with clippaths or masks are correctly copied/pasted between documents.&lt;br /&gt;
&lt;br /&gt;
= SVG conformance =&lt;br /&gt;
&lt;br /&gt;
== Color profile support ==&lt;br /&gt;
&lt;br /&gt;
Inkscape now includes base ICC profile functionality. If compiled with LittleCMS support (if you run &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;--enable-lcms&amp;lt;/code&amp;gt; switch), Inkscape passes the [http://www.w3.org/Graphics/SVG/Test/20030813/htmlframe/full-color-prof-01-f.html ICC color profile test] by W3C. The &amp;amp;lt;color-profile&amp;amp;gt; element has been implemented along with the &amp;quot;color-profile&amp;quot; attribute for &amp;amp;lt;image&amp;amp;gt; elements.&lt;br /&gt;
&lt;br /&gt;
== &amp;amp;lt;switch&amp;amp;gt; support ==&lt;br /&gt;
&lt;br /&gt;
Rendering support for SVG 1.1's '''Conditional Processing Module''' has been implemented, including ''switch'' element, ''requiredFeatures'', ''requiredExtensions'', ''systemLanguage'' attributes. Inkscape passes the Conditional processing tests ([http://www.w3.org/Graphics/SVG/Test/20030813/htmlframe/full-struct-cond-01-t.html] and [http://www.w3.org/Graphics/SVG/Test/20030813/htmlframe/full-struct-cond-02-t.html]) by W3C.&lt;br /&gt;
&lt;br /&gt;
== SVG output ==&lt;br /&gt;
&lt;br /&gt;
* In Inkscape's SVG documents, &amp;lt;b&amp;gt;colors&amp;lt;/b&amp;gt; are now expressed by name (‘white’) or three-digit form (‘&amp;lt;tt&amp;gt;#f3c&amp;lt;/tt&amp;gt;’) when possible.&lt;br /&gt;
&lt;br /&gt;
* The numeric values in &amp;lt;code&amp;gt;transform&amp;lt;/code&amp;gt; attributes are written without insignificant trailing zeros, and anything less than that 1e-8 by absolute value (usually caused by rounding errors) is written as 0 to reduce clutter.&lt;br /&gt;
&lt;br /&gt;
= Transformations =&lt;br /&gt;
&lt;br /&gt;
== Transform dialog ==&lt;br /&gt;
&lt;br /&gt;
Fixes and improvements in the Transform dialog (Ctrl+Shift+M):&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Apply to each object separately&amp;lt;/b&amp;gt; checkbox is added, allowing you to scale/rotate/skew each selected object by the same amount, around that object's center. When off (by default), the selection is transformed as a whole. The status of this checkbox is remembered across sessions. (It has no effect on Move and Matrix tabs).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Clear&amp;lt;/b&amp;gt; button resets the values on the current tab to defaults.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Scale&amp;lt;/b&amp;gt; tab now allows you to specify horizontal or vertical size increments in percentage or absolute units. Also, there's a &amp;lt;b&amp;gt;Scale proportionally&amp;lt;/b&amp;gt; checkbox which ensures that scaling preserves the width/height ratio. (If you are scaling several objects proportionally with &amp;quot;Apply to each object separately&amp;quot;, you can only use the % unit to specify the scaling; otherwise each object's scale increments will have the width/height ratio of the entire selection, not of that specific object.)&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Skew&amp;lt;/b&amp;gt; tab can now specify the skew as an &amp;lt;b&amp;gt;absolute displacement&amp;lt;/b&amp;gt; (e.g. for horizontal skewing of a rectangle, that means the shift of the top rectangle side relative to the bottom), as &amp;lt;b&amp;gt;percentage displacement&amp;lt;/b&amp;gt; (e.g. a 1% horizontal skew of a rectangle means shifting the top side by 1% of the rectangle height), or as an &amp;lt;b&amp;gt;angle&amp;lt;/b&amp;gt; (e.g. horizontal skew by 15 degrees results in the sides of a rectangle being rotated to that angle, while the top and bottom remain horizontal).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Matrix&amp;lt;/b&amp;gt; tab (previously called &amp;quot;Transform&amp;quot;) can either edit the current &amp;lt;code&amp;gt;transform=&amp;lt;/code&amp;gt; matrix of an object, or post-multiply the &amp;lt;code&amp;gt;transform=&amp;lt;/code&amp;gt; with the matrix you specify, depending on the &amp;lt;b&amp;gt;Edit current matrix&amp;lt;/b&amp;gt; checkbox. (As it is now redundant, the transformation matrix in the Object Properties dialog is removed.)&lt;br /&gt;
&lt;br /&gt;
* The dialog now correctly &amp;lt;b&amp;gt;watches selection changes&amp;lt;/b&amp;gt; in the active document window and updates its values accordingly.&lt;br /&gt;
&lt;br /&gt;
* The layout of the dialog is simplified, tooltips and mnemonics added for better usability.&lt;br /&gt;
&lt;br /&gt;
* Many bugs are fixed, especially in value conversions between units.&lt;br /&gt;
&lt;br /&gt;
== Persistent rotation centers ==&lt;br /&gt;
&lt;br /&gt;
* The position of the center (axis) of rotation and skewing used by Selector is now &amp;lt;b&amp;gt;remembered&amp;lt;/b&amp;gt; for all objects and restored when you select those objects again (even after saving and reopening the document). When you move or scale an object, its rotation center is moved or scaled too, so its position relative to the object always remains the same unless you move it explicitly.&lt;br /&gt;
&lt;br /&gt;
* When you have several objects selected, they use the rotation center of the &amp;lt;b&amp;gt;first selected object&amp;lt;/b&amp;gt;. If the first object does not have center set (i.e. if it's in a default central position), then several objects will rotate around the geometric center of their common bounding box (as before).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Shift+click&amp;lt;/b&amp;gt; on the rotation center resets it back to the center of the object's box.&lt;br /&gt;
&lt;br /&gt;
* Consequently, dragging the rotation center is now &amp;lt;b&amp;gt;an undoable action&amp;lt;/b&amp;gt;; you can press Ctrl+Z to undo the drag.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Keyboard rotation&amp;lt;/b&amp;gt; by [, ] keys with various modifiers, as well as the Rotate tab in the &amp;lt;b&amp;gt;Transform dialog&amp;lt;/b&amp;gt;, work around the selected object's rotation center (for multi-object selection, the rotation center of the first selected object).&lt;br /&gt;
&lt;br /&gt;
* Rotation centers are &amp;lt;b&amp;gt;preserved&amp;lt;/b&amp;gt; when duplicating, cloning (including clone tiler), grouping/ungrouping, and converting to path.&lt;br /&gt;
&lt;br /&gt;
[TODO: &lt;br /&gt;
- make it work smartly for groups: if a group has center not set, return the center of the first object inside group with the center set&lt;br /&gt;
&lt;br /&gt;
- a separate tab in the Transform dialog, with 9 buttons in the square grid (for setting it to object's corners, sides, and center) as well as x/y fields for setting center to any position&lt;br /&gt;
&lt;br /&gt;
- make center snap to grid/guides/objects and to other centers&lt;br /&gt;
&lt;br /&gt;
- make objects snap with their center to grid/guides/objects]&lt;br /&gt;
&lt;br /&gt;
== Pasting size ==&lt;br /&gt;
&lt;br /&gt;
A number of commands are added to easily scale selected objects to match the size of the object(s) previously copied to the clipboard. They are all in the Paste Size submenu in Edit menu:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Paste Size&amp;lt;/b&amp;gt; scales the whole selection to match the overall size of the clipboard object(s).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Paste Width&amp;lt;/b&amp;gt;/&amp;lt;b&amp;gt;Paste Height&amp;lt;/b&amp;gt; scale the whole selection horizontally/vertically so that it matches the width/height of the clipboard object(s). These commands honor the scale ratio lock on the Selector controls bar (between W and H fields), so that when that lock is pressed, the other dimension of the selected object is scaled in the same proportion; otherwise the other dimension is unchanged.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Paste Size Separately&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Paste Width Separately&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Paste Height Separately&amp;lt;/b&amp;gt; work similarly to the above described commands, except that they scale &amp;lt;i&amp;gt;each selected object&amp;lt;/i&amp;gt; separately to make it match the size/width/height of the clipboard object(s).&lt;br /&gt;
&lt;br /&gt;
= Tools =&lt;br /&gt;
&lt;br /&gt;
== Node tool ==&lt;br /&gt;
&lt;br /&gt;
=== Node sculpting ===&lt;br /&gt;
&lt;br /&gt;
An entirely new way of manipulating paths in Node tool is added in this version: Node sculpting. Normally, when you have several nodes selected and you drag one of them, all selected nodes move by the same amount. Now, if you &amp;lt;b&amp;gt;Alt-drag&amp;lt;/b&amp;gt; one of the selected nodes, only that node is fully displaced; other selected nodes are moved less than the full amount, so that those farthest from the drag point remain stationary. This is similar to &amp;quot;proportional editing&amp;quot; or &amp;quot;soft selection&amp;quot; in 3D editors such as Blender.&lt;br /&gt;
&lt;br /&gt;
So, for example, if you select several nodes on a straight line and Alt+drag the middle selected node, the path will bend into a &amp;lt;b&amp;gt;smooth bell-like curve&amp;lt;/b&amp;gt;. Nodes' handles are also adjusted correspondingly to keep the overall shape smooth and natural. (If you don't have enough nodes on a path fragment that you want to reshape in this way, just select the end nodes of that fragment and press &amp;lt;b&amp;gt;Ins&amp;lt;/b&amp;gt; a few times to populate it with nodes.)&lt;br /&gt;
&lt;br /&gt;
Moreover, node sculpting is &amp;lt;b&amp;gt;sensitive to pressure&amp;lt;/b&amp;gt; of your tablet pen. If you press slightly, your curve will have a narrow sharp tip (i.e. the nearest neighbors of your dragged node will move only a bit); if you press hard, the curve's tip will be wide and blunt (i.e. the nearest neighbors will move almost as much as the dragged node). (Hint: to stop dragging without losing your shape, first release Alt and then lift the tip of the pen.)&lt;br /&gt;
&lt;br /&gt;
There are many possible applications of the sculpting technique. To take a simple example, selecting all nodes of an ellipse-like shape and Alt+dragging one of them will smoothly and naturally stretch and skew the entire shape in any direction. Doing the same to a complex path, such as star or spiral, will twist and punch it without destroying its intricate structure - this is the way to get squashed or self-intersecting stars, eccentric spirals and other shapes not easily doable before. Selecting only part of all nodes allows you to smoothly reshape parts of the figure without disturbing the rest.&lt;br /&gt;
&lt;br /&gt;
When applied to text converted to path, node sculpting is a fun and easy way to twist, bend and distort it, achieving effects similar to &amp;quot;perspective envelope&amp;quot; or &amp;quot;curvilinear envelope&amp;quot; in other programs - but in a more powerful and flexible way. For example, by selecting all or part of the text's nodes and Alt-dragging, you can not only make a wavy banner out of a paragraph of text, but also apply a &amp;quot;magnifying lens&amp;quot;-like effect to any word in the middle. &lt;br /&gt;
&lt;br /&gt;
Especially useful node sculpting is for complex natural paths, such as calligraphic strokes or bitmap traces, where you often want to do large-scale pushes and bends without destroying the small-scale features. Things like making a calligraphic stroke narrower in one place and wider in another, or changing the proportions, extending the ear or flattening the nose of a head - all this is now much faster and more natural to do using sculpting. It is also a new way to &amp;lt;i&amp;gt;create&amp;lt;/i&amp;gt; new paths, too - starting from en ellipse with added nodes, it takes just a few Alt+drags to tweak it into a silhouette of a head, or a map of Australia, or an Inkscape logo!&lt;br /&gt;
&lt;br /&gt;
Some examples are shown on the screenshot: [[http://www.inkscape.org/screenshots/gallery/inkscape-0.44-nodesculpting.png]].&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Show handles&amp;quot; toggle ===&lt;br /&gt;
&lt;br /&gt;
The Controls bar for the Nodes tool now includes a toggle button which controls whether Bezier handles are shown on selected nodes (on by default). Selecting and dragging nodes on node-dense paths in zoom-out (e.g. for node sculpting) may be extremely difficult without hiding the handles, as it's hard to pick a node and not a handle when handles are shown.&lt;br /&gt;
&lt;br /&gt;
=== New deletion behavior ===&lt;br /&gt;
&lt;br /&gt;
* In Node tool, &amp;lt;b&amp;gt;deleting node(s)&amp;lt;/b&amp;gt; by Del/Backspace keys or by Ctrl+Alt+clicking a node now &amp;lt;b&amp;gt;tries to preserve, as much as possible, the current shape of the path&amp;lt;/b&amp;gt;. This means that the nodes adjacent to those being deleted have their handles adjusted to approximate the form that the path had before deletion. For example, if you Ctrl+Alt+click a path twice, once to add a new node and then to delete it, the path will not change at all (or change very slightly). The old deletion behavior without adjusting handles is still available via &amp;lt;b&amp;gt;Ctrl+Del&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;Ctrl+Backspace&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Preserving positions of nodes and handles ===&lt;br /&gt;
&lt;br /&gt;
* When you &amp;lt;b&amp;gt;switch the type&amp;lt;/b&amp;gt; of the selected node to Smooth or Symmetric by pressing Shift+S/Shift+Y, you can now &amp;lt;b&amp;gt;preserve the position&amp;lt;/b&amp;gt; of one of the two handles by hovering your mouse over it, so that only the other handle is rotated/scaled to match.&lt;br /&gt;
&lt;br /&gt;
* Similarly, when you &amp;lt;b&amp;gt;join endnodes&amp;lt;/b&amp;gt; by pressing Shift+J, you can &amp;lt;b&amp;gt;preserve the position&amp;lt;/b&amp;gt; of one of the two nodes by hovering your mouse over it, so that only the other node is moved. &lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; key &amp;lt;b&amp;gt;inverts node selection&amp;lt;/b&amp;gt; in the current subpath(s) (i.e. subpaths with at least one selected node); &amp;lt;b&amp;gt;Alt+!&amp;lt;/b&amp;gt; inverts in the entire path. (This is similar to how these keys work in Selector, with current subpath(s) instead of the current layer.)&lt;br /&gt;
&lt;br /&gt;
* The keyboard shortcut for &amp;quot;Make selected segments curves&amp;quot; in Node tool is changed from Shift+K to &amp;lt;b&amp;gt;Shift+U&amp;lt;/b&amp;gt; for better mnemonics.&lt;br /&gt;
&lt;br /&gt;
== Calligraphic pen ==&lt;br /&gt;
&lt;br /&gt;
* Even when using a graphics tablet with pressure sensitivity, the Calligraphy pen's strokes often look too smooth and artificial. To enable a more natural look, the new &amp;lt;b&amp;gt;Tremor&amp;lt;/b&amp;gt; parameter is added to the Calligraphy tool in this version. Adjustable in the Controls bar from 0.0 to 1.0, it will affect your strokes producing anything from slight unevenness to wild blotches and splotches. This significantly expands the creative range of the tool.&lt;br /&gt;
&lt;br /&gt;
* In all previous versions, pen width depended on zoom in such a way that the strokes &amp;lt;i&amp;gt;appeared&amp;lt;/i&amp;gt; the same visible width at any zoom, but were in fact narrower at zoom-in and wider at zoom-out. This behavior makes sense if you want to keep the same &amp;quot;feel&amp;quot; of the pen regardless of zoom; for example, if you zoomed in to make a small fix to your drawing, it's natural that your pen becomes physically smaller but feels the same to you. So, this behavior is kept as the default, but now we also added an alternative mode where your &amp;lt;b&amp;gt;pen width is constant in absolute units&amp;lt;/b&amp;gt; regardless of zoom. To switch to this mode, use the checkbox on the tool's Preferences page (you can open it by double-clicking the tool button).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Width&amp;lt;/b&amp;gt; field in the tool's controls bar now changes &amp;lt;b&amp;gt;from 1 to 100&amp;lt;/b&amp;gt;, which corresponds to the range from 0.01 to 1.0 in the previous version. If the &amp;quot;width in absolute units&amp;quot; mode is turned on, the value in this fields gives the width of the stroke in px units. In the default mode, the value of 100 gives 100px wide strokes only at 100% zoom, and strokes are correspondingly narrower or wider at other zoom levels.&lt;br /&gt;
&lt;br /&gt;
* A new preferences option for the Calligraphic tool, &amp;lt;b&amp;gt;Keep selected&amp;lt;/b&amp;gt;, controls whether the newly created object remains selected after you finish drawing it. If you turn it off (by default it's on) and set the tool to using Last Set color, you can easily choose a new color by clicking on the palette without having to worry if this will change the color of the stroke you just created. (Watch the tool style indicator at the right end of the Controls bar for the style of the next stroke you will draw.)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Esc&amp;lt;/b&amp;gt; deselects selected objects in Calligraphic, as in most other tools.&lt;br /&gt;
&lt;br /&gt;
* The stroke you're drawing is now shown, while you're drawing it, with the correct color and opacity that it will eventually have, instead of always black as before.&lt;br /&gt;
&lt;br /&gt;
* On a new Inkscape installation, this tool now uses the last set style by default instead of the fixed black as before (this is changeable in the Inkscape Preferences for the tool).&lt;br /&gt;
&lt;br /&gt;
== Pen tool ==&lt;br /&gt;
&lt;br /&gt;
* While drawing a path, you can now &amp;lt;b&amp;gt;move the last node you created&amp;lt;/b&amp;gt; by the same keys as in Node tool - that is, arrows, with Shift (for 10x displacement) or Alt (screen pixel displacement) modifiers. &lt;br /&gt;
&lt;br /&gt;
* Also, you can switch the not-yet-finalized (red) segment of the path being drawn from curve to line (&amp;lt;b&amp;gt;Shift+L&amp;lt;/b&amp;gt;) or back to curve (&amp;lt;b&amp;gt;Shift+U&amp;lt;/b&amp;gt;), again the same shortcuts as in the Node tool.&lt;br /&gt;
&lt;br /&gt;
* By popular demand, if a new path is being drawn but not yet finished, &amp;lt;b&amp;gt;Ctrl+Z cancels&amp;lt;/b&amp;gt; that unfinished path (i.e. does the same as Esc), instead of undoing the previous action.&lt;br /&gt;
&lt;br /&gt;
* In Pen tool, &amp;lt;b&amp;gt;Del&amp;lt;/b&amp;gt; works the same as Backspace to delete the last created point on the unfinished path.&lt;br /&gt;
&lt;br /&gt;
= Connectors and automatic layout =&lt;br /&gt;
&lt;br /&gt;
* There have been numerous bugfixes and several improvements to the behaviour of &amp;lt;b&amp;gt;connectors&amp;lt;/b&amp;gt; and the &amp;lt;b&amp;gt;connector tool&amp;lt;/b&amp;gt;:&lt;br /&gt;
** Connectors moved as part of a selection will now stay attached to other objects in the selection, rather than becoming detached from them.&lt;br /&gt;
** By default, the Connector tool will not attach connectors to text objects.  There is a new checkbox in the connector preferences to control this setting.&lt;br /&gt;
** The &amp;lt;b&amp;gt;margins around avoided shapes&amp;lt;/b&amp;gt; (used for autorouting connectors) can now be adjusted via the &amp;quot;Spacing&amp;quot; control on the controls bar.&lt;br /&gt;
&lt;br /&gt;
* Automatic Diagram Layout - A new button is available in the alignment and distribution dialogue that performs automatic layout of diagrams involving a network of shapes and connectors.  Layout is accomplished using force-directed graph layout based on the Kamada-Kawai algorithm.  This algorithm treats edges as if they are springs such that the distance between nodes will be proportional to the path length---number of connectors---between them.  Disconnected components (where not every shape is connected) will be arranged around the circumference of a circle.&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;lt;b&amp;gt;Remove Overlaps&amp;lt;/b&amp;gt; button to move the selected objects enough that they don't overlap each other.  A minimum spacing between the boundaries of objects can be specifiedTogether with the automatic layout tool, described above, this should be a significant addition to Inkscape's usability for diagramming. [Consider expanding this, comparing with existing Unclump and Distribute edge-to-edge buttons. - pjrm]&lt;br /&gt;
&lt;br /&gt;
= Selective tracing with SIOX =&lt;br /&gt;
&lt;br /&gt;
[ishmal]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Snapping =&lt;br /&gt;
&lt;br /&gt;
* [object snap - carl]&lt;br /&gt;
&lt;br /&gt;
* [highlight - mtou]&lt;br /&gt;
&lt;br /&gt;
* [only to visible gridlines - mtou]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Guidelines&amp;lt;/b&amp;gt; are made easier to pick: now you don't need to position mouse &amp;lt;i&amp;gt;exactly&amp;lt;/i&amp;gt; over a guideline to activate it, instead there's a small position tolerance (1 screen pixel on each side of the guideline).&lt;br /&gt;
&lt;br /&gt;
= Sublayers =&lt;br /&gt;
&lt;br /&gt;
Previously, it was only possible to make a group a temporary sublayer by entering that group. Now Inkscape supports creating and using true persistent sublayers within a layer.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Add layer&amp;lt;/b&amp;gt; dialog allows you to place the new layer above, below, or inside the current layer.&lt;br /&gt;
&lt;br /&gt;
* Extended &amp;quot;Select All&amp;quot; option - now there is an option for &amp;quot;Select All&amp;quot; and TAB browsing to work in current layer with its sublayers.&lt;br /&gt;
&lt;br /&gt;
= Extensions =&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Effects menu is now always on&amp;lt;/b&amp;gt;, it's no longer an &amp;quot;experimental feature&amp;quot;.  The preference setting to enable the menu has been removed.&lt;br /&gt;
&lt;br /&gt;
* Python extensions (which includes almost all currently available extensions) &amp;lt;b&amp;gt;work on Windows out of the box&amp;lt;/b&amp;gt;, using a copy of Python shipping with Inkscape. The only minor inconvenience is that when an effect is launched, you get an empty console window that stays on while the effect is doing its work (don't close that window, it will disappear by itself when the effect is finished).&lt;br /&gt;
&lt;br /&gt;
* A new Python effect, &amp;lt;b&amp;gt;Render &amp;gt; LaTeX formula&amp;lt;/b&amp;gt;, allows you to type in any LaTeX formula and get a vector object with the TeX rendition of this formula inserted into your document. You need to have &amp;lt;b&amp;gt;latex&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;dvips&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;pstoedit&amp;lt;/b&amp;gt; installed and in PATH for this to work.&lt;br /&gt;
&lt;br /&gt;
* A new Python effect, &amp;lt;b&amp;gt;Flatten Path&amp;lt;/b&amp;gt;, flattens paths in the current selection, approximating each path with a polyline whose segments meet the specified criteria for flatness.&lt;br /&gt;
&lt;br /&gt;
* A new Python effect, &amp;lt;b&amp;gt;Measure Path&amp;lt;/b&amp;gt;, attaches a text label to each path in the selection giving the length of that path (in px units).&lt;br /&gt;
&lt;br /&gt;
* The Radius Randomize effect has a new parameter which enables &amp;lt;b&amp;gt;normal distribution&amp;lt;/b&amp;gt; of random displacements instead of uniform as before, which gives a more natural feel to the randomized path.&lt;br /&gt;
&lt;br /&gt;
* INX files now have the ability to hold more information.  This includes tooltips and descriptions of the extensions.  These are all also translatable.&lt;br /&gt;
&lt;br /&gt;
= Formats =&lt;br /&gt;
&lt;br /&gt;
* Inkscape's &amp;lt;b&amp;gt;PDF export&amp;lt;/b&amp;gt; is now native (i.e. does not require any external applications) and &amp;lt;b&amp;gt;supports transparency&amp;lt;/b&amp;gt;, including gradients with transparency. This replaced the old export extension that required Ghostscript and worked via Postscript, losing any transparency. The new PDF export is still immature; in particular it does not handle text, so you should check &amp;quot;Convert text to path&amp;quot; on the export options dialog. Other things not yet supported include: gradients on stroke; eccentric elliptic gradients; patterns, masks, and clipping paths; embedded images.&lt;br /&gt;
&lt;br /&gt;
* [save zip with images - mipmip] collects the svg file and all linked images into a zip archive for distribution.&lt;br /&gt;
&lt;br /&gt;
* An output format for &amp;lt;b&amp;gt;desktop cutting plotters&amp;lt;/b&amp;gt;, such as the Wishblade and Craftrobo, was added. This format is a very minimalist DXF file with appropriate scaling and translation applied. This output format should not be expected to operate as a generalized DXF output.&lt;br /&gt;
&lt;br /&gt;
* [xfig]&lt;br /&gt;
&lt;br /&gt;
* [odg - ishmal]&lt;br /&gt;
&lt;br /&gt;
* The new &amp;lt;b&amp;gt;XCF output extension&amp;lt;/b&amp;gt; exports all top-level elements (i.e. layers and objects directly under root) as PNGs and assembles them into an XCF for procesing in the Gimp. Requires Python, PyXML and Gimp. Gimp 2.2.x or above must be in the path and be named &amp;lt;code&amp;gt;gimp&amp;lt;/code&amp;gt;. A version of Inkscape 0.44 or above must be accessible from the path. Does not function in Windows.&lt;br /&gt;
&lt;br /&gt;
= Configurable keyboard =&lt;br /&gt;
&lt;br /&gt;
Inkscape's &amp;lt;b&amp;gt;keyboard shortcuts are now configurable!&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
At this time, not all Inkscape actions can have their shortcuts customized. However, the majority of actions, including everything you see in the menus, are already configurable, and we're working on making more actions configurable. &lt;br /&gt;
&lt;br /&gt;
On startup, Inkscape reads its keyboard shortcuts from &amp;lt;code&amp;gt;share/keys/default.xml&amp;lt;/code&amp;gt;. That file is a copy of &amp;lt;code&amp;gt;inkscape.xml&amp;lt;/code&amp;gt; in the same directory, which also contains keyboard emulation profiles for other vector editors:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;xara.xml&amp;lt;/code&amp;gt;: Xara X/Xara Xtreme/Xara LX keys&lt;br /&gt;
&lt;br /&gt;
You can copy any of these over default.xml to use that profile. In all profiles, those keys which are not used by the corresponding program still have their Inkscape bindings. If you can contribute a profile for some vector editor that we don't yet have, we will appreciate that. The files have a simple XML-based format described in &amp;lt;code&amp;gt;inkscape.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can also &amp;lt;b&amp;gt;customize some of your keybindings&amp;lt;/b&amp;gt; without overwriting the main &amp;lt;code&amp;gt;default.xml&amp;lt;/code&amp;gt;. If your profile directory (&amp;lt;code&amp;gt;~/.inkscape&amp;lt;/code&amp;gt; on Linux) contains a &amp;lt;code&amp;gt;keys&amp;lt;/code&amp;gt; subdirectory with a &amp;lt;code&amp;gt;default.xml&amp;lt;/code&amp;gt; file, the keybindings from that file will overlay (i.e. add to, and override in case of a conflict) the default bindings. The format of your own &amp;lt;code&amp;gt;default.xml&amp;lt;/code&amp;gt; is the same as that of the main &amp;lt;code&amp;gt;default.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous shortcuts =&lt;br /&gt;
&lt;br /&gt;
* Now you can use &amp;lt;b&amp;gt;Shift+middle button drag&amp;lt;/b&amp;gt;, in any tool, to zoom into an area. This works the same as simple drag in Zoom tool, but is faster because it does not require switching away from your current tool. Together with &amp;lt;b&amp;gt;middle button drag&amp;lt;/b&amp;gt; (panning), &amp;lt;b&amp;gt;middle button click&amp;lt;/b&amp;gt; (zoom in) and &amp;lt;b&amp;gt;Shift+middle button click&amp;lt;/b&amp;gt; (zoom out), this completes the set of canvas navigation shortcuts available in any tool or context.&lt;br /&gt;
&lt;br /&gt;
* In Gradient tool, &amp;lt;b&amp;gt;Shift+R reverses the gradient definition&amp;lt;/b&amp;gt; (i.e. mirrors the stop positions) without moving the gradient handles. For example, an elliptic gradient with blue center and red periphery becomes red in the center and blue in the periphery. This works on the gradient(s) of the currently selected gradient handle or, if no handle is selected, on all selected objects' gradients. (Compare with the Node tool where Shift+R reverses the direction of the selected path.) This is especially convenient for elliptic gradients which, unlike linear, you cannot simply rotate by 180 degrees for the same result.&lt;br /&gt;
&lt;br /&gt;
* In Selector, &amp;lt;b&amp;gt;Ctrl+Enter&amp;lt;/b&amp;gt; enters the selected group (making it a temporary layer). &amp;lt;b&amp;gt;Ctrl+Backspace&amp;lt;/b&amp;gt; leaves the current layer and goes one layer up in the hierarchy (but not to root).&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous improvements =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Document templates&amp;lt;/b&amp;gt; (listed in &amp;lt;i&amp;gt;File &amp;amp;gt; New&amp;lt;/i&amp;gt;) are now first searched in the &amp;lt;code&amp;gt;templates&amp;lt;/code&amp;gt; subdirectory of the user's profile directory (on Linux it's &amp;lt;code&amp;gt;~/.inkscape/templates&amp;lt;/code&amp;gt;), then in the system-wide Inkscape templates directory. This allows you to add your own templates on top of the list of standard templates, as well as override the default template with your own one (the &amp;lt;code&amp;gt;default.svg&amp;lt;/code&amp;gt; in the profile directory has priority over the system-wide one).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Converting stroke to path&amp;lt;/b&amp;gt; now correctly processes dashed strokes. For paths with markers, this command now creates a group containing the stroke converted to path and all its markers as independent objects (i.e. they are not markers anymore, but instead you can easily transform them or paint them any color, as a workaround for the &amp;quot;markers don't take the color of the stroke&amp;quot; bug).&lt;br /&gt;
&lt;br /&gt;
* When toggling one of the &amp;quot;transform with object&amp;quot; buttons (for stroke width, rounded rectangle corners, gradients, or patterns), a &amp;lt;b&amp;gt;message&amp;lt;/b&amp;gt; is displayed in the statusbar explaining what has changed in the program's behavior. Hopefully this will reduce the number of complaints from users who had accidentally toggled one of these and were surprised by the result.&lt;br /&gt;
&lt;br /&gt;
* Whole thousands above 2000 in the rulers are now displayed as &amp;lt;b&amp;gt;2k, 3k, 4k&amp;lt;/b&amp;gt; etc.&lt;br /&gt;
&lt;br /&gt;
* In the Document Preferences dialog, the new object style for each tool is now shown as a &amp;lt;b&amp;gt;style swatch&amp;lt;/b&amp;gt; (displaying fill/stroke colors and opacity, stroke width, and master opacity), similar in design to the selected style indicator in the statusbar.&lt;br /&gt;
&lt;br /&gt;
* In the Grid Arrange dialog, row/column spacing can now be negative. &lt;br /&gt;
&lt;br /&gt;
* The installation default is now to scale the &amp;lt;b&amp;gt;rounded rectangle corners&amp;lt;/b&amp;gt; with the rectangles themselves (the previous default mode, still available as an option, was to keep rounding radii unchanged when scaling rectangles). &lt;br /&gt;
&lt;br /&gt;
* Added a new &amp;lt;code&amp;gt;--export-area-canvas&amp;lt;/code&amp;gt; command line parameter that causes the exported PNG to contain the full canvas. This option as well as &amp;lt;code&amp;gt;--export-area-drawing&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--export-area&amp;lt;/code&amp;gt; can now be used along with &amp;lt;code&amp;gt;--export-id&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;--export-id-only&amp;lt;/code&amp;gt; for greater flexibility.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;--query-*&amp;lt;/code&amp;gt; command line parameters now return the true SVG bounding box of the object instead of the Inkscape coordinate system bbox (with inverted Y axis). The new behavior makes more sense for scripting use of Inkscape.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;dpi&amp;lt;/b&amp;gt; value in the Export dialog has had its range extended; now possible values are from 0.01 to 100000. &lt;br /&gt;
&lt;br /&gt;
* Individual &amp;lt;b&amp;gt;&amp;amp;lt;tspan&amp;amp;gt;s&amp;lt;/b&amp;gt; within text objects (including line tspans) can now be selected via the XML editor to view their bounding boxes (though per SVG, you cannot transform them). Also, you can use the &amp;lt;code&amp;gt;--query-*&amp;lt;/code&amp;gt; command line parameters to find out the bounding boxes of tspans from a script. (Individual strings within or between tspans are still not selectable, and they cannot have an ID for querying anyway.)&lt;br /&gt;
&lt;br /&gt;
* The placeholder image which is shown when a bitmap file was no longer accessible reads now &amp;quot;&amp;lt;b&amp;gt;Linked image not found&amp;lt;/b&amp;gt;&amp;quot; instead of the confusing &amp;quot;Broken image&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Cloning multiple selected objects&amp;lt;/b&amp;gt; now works as expected (i.e. each selected object is cloned separately, similar to the Duplicate command). Previously you could only clone a single selected object. &lt;br /&gt;
&lt;br /&gt;
* The separate &amp;quot;license&amp;quot; and &amp;quot;contributors&amp;quot; dialogs have been merged into tabs  on the About dialog.  The about dialog now correctly sizes itself to fit the size of the splash SVG (while remaining resizable), and the rendering area is now cropped to the correct aspect ratio when the dialog is resized.  The dialog also now displays the build information in the upper right corner.&lt;br /&gt;
&lt;br /&gt;
* [new cursors - scislac]&lt;br /&gt;
&lt;br /&gt;
* In the Transform dialog / Rotate tab, the icon was flipped horizontally to be in line with the direction of positive rotation; the change was applied to the default (now crispy) and legacy icon sets.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;scale ratio lock button&amp;lt;/b&amp;gt; on the Selector controls bar shows a closed lock when pressed and open lock otherwise (same as the layer lock in the statusbar).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt; button on Export dialog now opens the new file chooser, same as those used by Open and Save.&lt;br /&gt;
&lt;br /&gt;
* A new &amp;lt;b&amp;gt;RazorWire&amp;lt;/b&amp;gt; path marker was added. By applying it as a mid-marker you can get a good approximation of a razor wire.&lt;br /&gt;
&lt;br /&gt;
= Miscellaneous bugfixes =&lt;br /&gt;
&lt;br /&gt;
* Reading a document with an &amp;lt;b&amp;gt;incorrect namespace URI&amp;lt;/b&amp;gt; not only did not cause Inkscape to complain, but could also &amp;quot;pollute&amp;quot; Inkscape's internal namespace table, resulting in an &amp;quot;infection&amp;quot; of subsequently saved documents by the incorrect namespace. This is now fixed, but as a result, documents with incorrect namespace URIs will no longer load. You will have to edit them in a text editor to fix the namespaces. &lt;br /&gt;
&lt;br /&gt;
* With newer versions of GTK, &amp;lt;b&amp;gt;dragging with graphics tablet pen&amp;lt;/b&amp;gt; did not work in some tools and contexts (in particular, in Node and Rectangle tools). This is fixed.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Scaling of objects with stroke&amp;lt;/b&amp;gt; in Selector used to cause undesired shifts of the scaled object, as well as scaling it in the dimension which was intended to remain untouched (e.g. slight change in width when you scale only height). All these problems are now fixed, both for interactive scaling by mouse and for numeric scaling via the Controls bar, and for both values of the &amp;quot;Scale stroke with objects&amp;quot; option. Among other things, this means that stroked objects no longer lose snapping on scale, and that the &amp;quot;Default scale origin&amp;quot; option in the Selector tool preferences finally works as designed. Caveat: There may still be problems if you scale a selection that contains objects with different stroke widths.&lt;br /&gt;
&lt;br /&gt;
* Scaling of stroke now works for objects that didn't specify stroke-width; before, they always ended up with the default 1px stroke.&lt;br /&gt;
&lt;br /&gt;
* The bounding box for text and flowed text objects did not include stroke width.  This has been fixed.&lt;br /&gt;
&lt;br /&gt;
* Stroke miterlimit on text objects was misinterpreted in absolute units instead of multiplies of stroke width (resulting in miter joins rendered as bevel). &lt;br /&gt;
&lt;br /&gt;
* The unfinished path in Pen tool is now cancelled, not finalized, when you switch away from the Pen tool. Apart from being more intuitively correct, this also fixes a crash when you quit Inkscape with the unfinished path in Pen tool.&lt;br /&gt;
&lt;br /&gt;
* Fonts on Win32 now use the native font mapper, meaning that Inkscape's font list is the same as other Windows programs, and the (potentially) very long delay experienced when using fonts for the first time in each session is gone.&lt;br /&gt;
&lt;br /&gt;
* Setting dash pattern was broken for transformed objects, and copy/paste of style with dash pattern did not apply correctly to objects with transforms.&lt;br /&gt;
&lt;br /&gt;
* An error caused a complete extra screen redraw after each zoom operation. That is, after you press &amp;quot;+&amp;quot; in a complex drawing, Inkscape redraws, but for some time after that it remains still unresponsive because it does that second redraw (invisibly for you, i.e. nothing changes on the screen). This is fixed.&lt;br /&gt;
&lt;br /&gt;
* Gradient rendering was off by one pixel, which often resulted in visibly wrong gradient rendering for small objects or in zoom-out. &lt;br /&gt;
&lt;br /&gt;
* The SVG path parser could not handle fractional numbers with the initial dot. &lt;br /&gt;
&lt;br /&gt;
* Several pattern rendering bugs are fixed, discovered by working with SVG files exported from Adobe Illustrator.&lt;br /&gt;
&lt;br /&gt;
* Inkscape on Mac OS X will now notice fonts in your ~/Library/Fonts directory, in addition to the other standard places.&lt;br /&gt;
&lt;br /&gt;
* Inkscape couldn't be compiled with libxml versions &amp;lt;= 2.6.9, and we now bumped the requirements from 2.6.0 up to &amp;lt;b&amp;gt;libxml &amp;gt;= 2.6.11&amp;lt;/b&amp;gt;, which is the earliest you can get officially, anyway.&lt;br /&gt;
&lt;br /&gt;
* Inkscape no longer crashes when presented with a defective inx file for extensions.&lt;br /&gt;
&lt;br /&gt;
* More document memory is now freed when documents are closed.&lt;br /&gt;
&lt;br /&gt;
* EPS output now correctly includes an %%EOF footer.&lt;br /&gt;
&lt;br /&gt;
* There was a regression in 0.43 that caused several minor, though annoying bugs; knots and handles remained highlighted after the mouse was released, and the rubberband selection rectangle stayed visible if the selection was ended over a node while in the node tool.  This regression has been fixed.         &lt;br /&gt;
&lt;br /&gt;
* The connector routing code would previously sometimes confuse objects between multiple documents resulting in strange routing behaviour.  This has been fixed.&lt;br /&gt;
&lt;br /&gt;
* There existed a bug in 0.43's Inkboard code that allowed a malicious outsider to very easily disrupt an Inkboard session.  This has been fixed.&lt;br /&gt;
&lt;br /&gt;
* There existed a bug in 0.43's Inkboard code that would cause deadlocks in the case that two users attempted to invite each other at the same time (see bug #[https://sourceforge.net/tracker/?func=detail&amp;amp;atid=604306&amp;amp;aid=1352522&amp;amp;group_id=93438 1352522] for further details).  This should be fixed, although the fix has not been widely tested.&lt;br /&gt;
&lt;br /&gt;
* There existed a bug in 0.43's Inkboard code that would cause session invitations to not appear on the invitee's screen.  This was the result of a mistake in handling GDK modifier flags, and has been fixed.&lt;br /&gt;
&lt;br /&gt;
= Translations =&lt;br /&gt;
&lt;br /&gt;
* INX files (containing the UI of the external effects) now allow the user visible strings to be translated.  This means that effect dialogs, file type selections, and extension names can all be translated by translators.&lt;br /&gt;
&lt;br /&gt;
= Internal =&lt;br /&gt;
&lt;br /&gt;
* The Document Properties Dialog code was completely gtkmmified, which lead to dramatic reduction of code size due to usage of widget objects. The used widget objects should be reusable by other dialogs, too, and the code is much more readable.&lt;br /&gt;
&lt;br /&gt;
* Work on optimizing includes in all cpp files started, using the purgeincludes tool specifically written for that purpose, and ended with 40% of include lines removed!&lt;br /&gt;
&lt;br /&gt;
= Known problems =&lt;br /&gt;
&lt;br /&gt;
=== Namespaces may need fixing ===&lt;br /&gt;
&lt;br /&gt;
* Previous versions of inkscape sometimes silently saved documents with &amp;lt;b&amp;gt;wrong namespace URIs&amp;lt;/b&amp;gt;.  This has been fixed, but such corrupted documents will no longer load successfully.  Such documents may require their namespace declarations to be fixed by hand.&lt;br /&gt;
&lt;br /&gt;
=== Beware of defective themes on Linux ===&lt;br /&gt;
&lt;br /&gt;
* Inkscape and other Gtk programs can crash on any Linux, when the &amp;lt;b&amp;gt;gtk2-engines-smooth / libsmooth&amp;lt;/b&amp;gt; package is installed. We have filed a bug against libsmooth which is now in gtk-engine and part of gnome. Removing the package resolves the problem, however, but it would be nice if you as affected user would inform the gtk-engines maintainers of the problem. See especially http://bugzilla.gnome.org/show_bug.cgi?id=312115 (thanks to Thomas Wood)&lt;br /&gt;
* A similar crash happens if the &amp;lt;b&amp;gt;KDE Baghira&amp;lt;/b&amp;gt; theme or the package &amp;lt;b&amp;gt;gtk_qt_engine&amp;lt;/b&amp;gt; are installed. If you experience Inkscape crashes on KDE, please try to install a different theme from Baghira, or uninstall the gtk_qt_engine package from your system. Both problems also affect older versions of Inkscape.&lt;br /&gt;
&lt;br /&gt;
= Previous releases =&lt;br /&gt;
&lt;br /&gt;
* ReleaseNotes043 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes043)&lt;br /&gt;
* ReleaseNotes042 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes042)&lt;br /&gt;
* ReleaseNotes041 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes041)&lt;br /&gt;
* ReleaseNotes040 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes040)&lt;br /&gt;
* ReleaseNotes039 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes039)&lt;br /&gt;
* ReleaseNotes038 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes038)&lt;br /&gt;
* ReleaseNotes037 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes037)&lt;br /&gt;
* ReleaseNotes036 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes036)&lt;br /&gt;
* ReleaseNotes035 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes035)&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Google_Summer_of_Code_2006&amp;diff=6480</id>
		<title>Google Summer of Code 2006</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Google_Summer_of_Code_2006&amp;diff=6480"/>
		<updated>2006-05-19T11:48:17Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: Correct statement of existing CSS support.  Nominate mentor.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== SOC 2006 ===&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/soc/ Google] has been kind enough to invite Inkscape to participate as a mentoring organization in the Summer of Code 2006.  The students and developers had a lot of fun last year, and resulted in some _great_ additions to the software, so we are very enthused about this year.&lt;br /&gt;
&lt;br /&gt;
Below is a list of ideas that Inkscape developers think might make good projects.  Please do not let this list constrain you; if you have a good idea beyond what is listed we'd love to see it!&lt;br /&gt;
&lt;br /&gt;
Also, we would strongly encourage students to contact us on the Inkscape developer's list prior to submitting your proposal.  This gives us a chance to get to know you and to give you feedback that will strengthen your proposal.&lt;br /&gt;
&lt;br /&gt;
To submit a proposal, [https://www.google.com/accounts/NewAccount sign up] for a Google Account, and then log in to the [http://code.google.com/soc/ Summer of Code] site.&lt;br /&gt;
&lt;br /&gt;
== Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== A.  PDF Export Extension ===&lt;br /&gt;
&lt;br /&gt;
PDF is the most important graphic document interchange format, but Inkscape's current capability is woefully inadequate (we export to postscript and use ps2pdf).  This project would focus on establishing a solid solution to this need.&lt;br /&gt;
&lt;br /&gt;
An implementation approach for this would be to create a new Inkscape extension, &amp;quot;crs2pdf&amp;quot;, which links to the [http://cairographics.org/ Cairo] library for [http://www.cairographics.org/manual/cairo-PDF-Surfaces.html PDF rendering] capability, and to [http://scratchcomputing.com/projects/vectorsection Vector Section] for parsing the SVG into CRS.&lt;br /&gt;
&lt;br /&gt;
This work may also require making some alterations to Cairo and/or VectorSection to improve the quality of the throughput.&lt;br /&gt;
&lt;br /&gt;
The tool must successfully convert at least half of the about screens used in Inkscape versions 0.35-0.44.  Major kudos if you can convert all of them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  [[EricWilhelm]]&lt;br /&gt;
&lt;br /&gt;
=== B.  EPS Import ===&lt;br /&gt;
&lt;br /&gt;
While SVG is becoming a common format for exchanging data between graphics programs, EPS is currently much more common.  Inkscape's current EPS support is flakey and poorly maintained.  The plan is to switch to use of Scribus' EPS Import Library.&lt;br /&gt;
&lt;br /&gt;
This project would involve creating a new Inkscape extension, &amp;quot;eps2crs&amp;quot;, which links to Scribus' EPS import library and exports into the [http://scratchcomputing.com/projects/vectorsection Vector Section] CRS format.&lt;br /&gt;
&lt;br /&gt;
This work may also require making some alterations to the Scribus PDF library and/or VectorSection to improve the quality of the throughput.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  [[EricWilhelm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== C.  Memory Optimization ===&lt;br /&gt;
&lt;br /&gt;
Inkscape is a bit heavy in its memory use, and is tough to use on computers with limited RAM.  This project would seek to analyze and understand Inkscape's memory usage, identify and correct major memory leaks, and decrease memory usage for typical cases by a nontrivial amount.  Ultimately, the project should result in Inkscape running smoothly on lower RAM systems than currently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  MentalGuy&lt;br /&gt;
&lt;br /&gt;
=== D.  Inkboard Portability ===&lt;br /&gt;
&lt;br /&gt;
Last year we had a successful project to integrate the SVG online whiteboard capability, called Inkboard, into Inkscape.  Unfortunately, it does not work on Windows, so many users are missing out on this capability.&lt;br /&gt;
&lt;br /&gt;
This work may involve [http://svn.sourceforge.net/viewcvs.cgi/inkscape/inkscape/branches/INKBOARD_PEDRO/src/jabber_whiteboard/protocol/ formalizing and extending the Inkboard communication protocol] and [http://svn.sourceforge.net/viewcvs.cgi/inkscape/inkscape/branches/INKBOARD_PEDRO/src/jabber_whiteboard/ working on the INKBOARD_PEDRO branch])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  Ted&lt;br /&gt;
&lt;br /&gt;
=== E.  New Grids ===&lt;br /&gt;
&lt;br /&gt;
Inkscape currently has square grids that can be snapped to.  Extend this to allow other kinds of grids:  Perspective, hex, iso, etc.&lt;br /&gt;
&lt;br /&gt;
This will involve modifying the grid code to support the ability to have multiple kinds of grids, implementing at least 3 new grids, and adding the UI elements to allow users to make use of them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  TBD&lt;br /&gt;
&lt;br /&gt;
=== F.  SVG Filters ===&lt;br /&gt;
&lt;br /&gt;
Filters are a very important SVG capability, that allows giving special features to drawing objects, including shadows, blurs, etc.  Inkscape currently does not support this capability, but it's high on the list of desires.&lt;br /&gt;
&lt;br /&gt;
This project would consist of two parts: (1) adding a SPObject for filters and CSS support for referencing them; (2) adding renderer support for doing the actual filter effects when rendering. Completing this project requires implementing at least one filter, 'Gaussian blur' as a proof of concept.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt; Bulia&lt;br /&gt;
&lt;br /&gt;
=== G.  Adding bitmap capabilities to Inkscape ===&lt;br /&gt;
&lt;br /&gt;
While the purpose of Inkscape is to be a vector editor, design in the real world requires dealing with bitmaps too. Inkscape can import the bitmaps, and have them as full canvas objects, but there is no significant bitmap operations in Inkscape. While there is no reason for Inkscape to replicate the functionality of The GIMP, it would be desirable to have a few simple operations available from Inkscape.&lt;br /&gt;
&lt;br /&gt;
This project will use the Inkscape extensions system to add a series of bitmap effects. The majority of the effects will be achieved through the integration of the ImageMagick bitmap handling libraries.  GIMP may be another source.  These effects can then be run on bitmap graphics within Inkscape.&lt;br /&gt;
&lt;br /&gt;
The work should be encapsulated in such a way that in theory, other vector graphics applications (such as Xara), could also use the work.  However, for the scope of this project we only require demonstration of the capabilities in Inkscape.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Project Timeline:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implement first effect. This involves building Inkscape, linking in ImageMagick and getting one effect written (6 weeks)&lt;br /&gt;
* Implement remaining effects within ImageMagick (3 weeks)&lt;br /&gt;
* Build a test suite for operations and complete all Doxygen documentation of code (3 weeks)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  Ted&lt;br /&gt;
&lt;br /&gt;
=== H.  Inkscape / GIMP Bitmap Editing Integration ===&lt;br /&gt;
&lt;br /&gt;
Currently, you can embed raster/bitmap images into Inkscape drawings, but editing them is a bit of a hassle because Inkscape isn't really &amp;quot;aware&amp;quot; of external bitmap editing tools.&lt;br /&gt;
&lt;br /&gt;
This project would seek to correct this by modifying inkscape's image embedding code to interoperate more directly with external bitmap programs.  For instance, there would be an &amp;quot;open external editor&amp;quot; command that could be used when one or more bitmap images are selected.  Another idea would be to include some common bitmap modification commands from the external program, that can be run entirely within Inkscape.  A third idea is drag and drop of selections from the bitmap editor to Inkscape, and SVG selections from Inkscape to the bitmap tool.&lt;br /&gt;
&lt;br /&gt;
As a proof of concept, the result should demonstrate this interoperability with GIMP.  Note that the code should be developed such that in theory it should work with any bitmap editor, but we would only require demonstration of working with GIMP.&lt;br /&gt;
&lt;br /&gt;
Also see:  http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=862655&amp;amp;group_id=93438&amp;amp;atid=604309&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  TBD&lt;br /&gt;
&lt;br /&gt;
=== I.  Text Tool Improvements ===&lt;br /&gt;
&lt;br /&gt;
Inkscape's text tool is handy, but still lacks many of the niceties that users would like.  This project would seek to address this by implementing various improvements that users have requested.&lt;br /&gt;
&lt;br /&gt;
Some ideas for improvements:&lt;br /&gt;
* Make flowed text respect the default style of the text tool&lt;br /&gt;
* when flowing a text which already contains line breaks, provide a way for the line breaks to be conserved.&lt;br /&gt;
* when the style selected in the the Text and Font dialog is applied it erases any other style applied to some part of the text (like italics on some words, bold on others...), it would also be better to keep them where appropriate. &lt;br /&gt;
* Search through the Inkscape RFE list for other text and font improvement ideas&lt;br /&gt;
&lt;br /&gt;
See: http://valessio.ul-jb.org/projetos/inkscape/inkscribus.htm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt; TBD&lt;br /&gt;
&lt;br /&gt;
=== J.  Color Adjustment Dialog ===&lt;br /&gt;
&lt;br /&gt;
Currently, it is possible to select, say, 12 objects in the drawing and set them to the same color/gradient/pattern.  This project would go a step further, allowing multiple objects of differing color to have aspects of their color (such as brightness/contrast, HSL, etc.) altered, and to operate on vector objects with different fill styles (flat, gradient, or pattern fills), and to bitmaps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  Bulia&lt;br /&gt;
&lt;br /&gt;
=== K.  External CSS Support ===&lt;br /&gt;
&lt;br /&gt;
Inkscape currently has good support for inline CSS, and limited read-only support for an internal stylesheet in a &amp;lt;style&amp;gt; element, and no support for external stylesheets.  Support for editing non-inline CSS would allow better expressiveness and adaptation, and smaller SVG files, and better support for SVG generated by other programs that use non-inline CSS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt; Peter Moulder&lt;br /&gt;
&lt;br /&gt;
=== L.  Bucket fill tool  ===&lt;br /&gt;
&lt;br /&gt;
This feature provides a new tool that generates a vector object with the desired color.  This would allow, for example, the artist to draw a set of intersecting lines, and paint the blank spaces in between.&lt;br /&gt;
&lt;br /&gt;
Two approaches have been proposed:  The first would render the current image to a in-memory bitmap, perform a flood-fill (borrow the algorithm e.g. from Gimp), then trace the result and insert the resulting vector object into the drawing.  The second would strive to detect the surrounding vector objects and perform a boolean path operation to construct a matching shape with the desired fill.  Both approaches have their pros and cons; please select either and explain why you wish to do it that way, and how you would do it.  &lt;br /&gt;
&lt;br /&gt;
More discussion is available here:  http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1123138&amp;amp;group_id=93438&amp;amp;atid=604309&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  Bulia&lt;br /&gt;
&lt;br /&gt;
=== M.  Justified Text ===&lt;br /&gt;
&lt;br /&gt;
The lack of this feature is perhaps one of the reasons why Inkscape is currently unusable for many applications. Justified text is very useful, and is currently missing. Justification options to offer might be some subset of those proposed at http://www.w3.org/TR/css3-text/.&lt;br /&gt;
&lt;br /&gt;
One reasonable starting point if you want to support text-in-shape and TeX-like line-breaking and hyphenation is the work of the Monash University group, who have a command-line tool that can justify some small subset of XHTML, and fit into a shape that can grow/shrink in a user-defined way to fit the text, and produces SVG output: http://bowman.csse.monash.edu.au/~pmoulder/text-in-shape.tar.gz.  A disadvantage of this starting point is that the tool was not designed with editing in mind.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Peter Moulder&lt;br /&gt;
&lt;br /&gt;
== Additional Ideas ==&lt;br /&gt;
&lt;br /&gt;
* SVG support in OpenOffice (not exactly Inkscape development, but would allow Inkscape users to paste in art rather than having to export to png and really promote usuage of Inkscape). Not to mention eliminating all those duplicate svg/png image files!&lt;br /&gt;
&lt;br /&gt;
* More potrace/SIOX/etc. style features/development&lt;br /&gt;
&lt;br /&gt;
* Extending the online InkscapeSVG stuff - might be very cool for sharing sketches, etc&lt;br /&gt;
&lt;br /&gt;
* Building a public whiteboard server for Inkscape users, with a web site of its own, user galleries, interest groups, scheduled drawathons, connections to OCAL, etc.&lt;br /&gt;
&lt;br /&gt;
* Skeletal Strokes and Effect Lines - A few links: Our wiki page on Expression [[http://wiki.inkscape.org/wiki/index.php/Expression]], Technical papers on Skeletal Strokes [[http://portal.acm.org/citation.cfm?id=192186]], Examples - [[http://northlite.50megs.com/expr/effectlines.htm]], [[http://www.wa.commufa.jp/~ksg/p_pfwp5_cgf.htm]], [[http://personal-computer-tutor.com/abc4/v36/sara36.htm]].&lt;br /&gt;
&lt;br /&gt;
* Improve the functionality and ease of use of the python effects API (see my proposal in the [[ImprovingPythonExtensionAPI]] page )&lt;br /&gt;
&lt;br /&gt;
* Standalone palette editor&lt;br /&gt;
&lt;br /&gt;
* Converter from Visio to VectorSection's CRS format&lt;br /&gt;
&lt;br /&gt;
* Converter from CorelDraw (CDR) to VectorSection's CRS format&lt;br /&gt;
&lt;br /&gt;
* Converter enhancements for VectorSection (dxf2rzp, rzp2dxf, rzp2crs, crs2rzp, etc.)&lt;br /&gt;
&lt;br /&gt;
* Converter from Flash (SWF) to VectorSection's CRS format&lt;br /&gt;
&lt;br /&gt;
* Implementation of scissors and razor tools. Yes, these blunt tools are so necessary to quickly cut paths.&lt;br /&gt;
&lt;br /&gt;
* Add user profiles (some nice graphical interface) to store different sets of default metadata that can be used quickly&lt;br /&gt;
&lt;br /&gt;
* upgrade the metadata and licensing dialogs with more options and general licenses checking (upgrade cc license selection to using web services&lt;br /&gt;
&lt;br /&gt;
* Advanced grade tool. Each node of a shape could have a different color. Inkscape fills in with a complex grade.&lt;br /&gt;
&lt;br /&gt;
* Begin work on adding animation features to inkscape. If animated SVG is to ever truely compete with Macromedia Flash, then we'll need a good editor to create them with ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SOC 2005 ===&lt;br /&gt;
* [[SOC Accepted Proposals]]&lt;br /&gt;
* [[SOC Writing Project Proposals]]&lt;br /&gt;
* [[SOC Selection Criteria]]&lt;br /&gt;
* [[SOC Original Project Prompts]]&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Google_Summer_of_Code_2006&amp;diff=6479</id>
		<title>Google Summer of Code 2006</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Google_Summer_of_Code_2006&amp;diff=6479"/>
		<updated>2006-05-19T11:38:25Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: Link to existing work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== SOC 2006 ===&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/soc/ Google] has been kind enough to invite Inkscape to participate as a mentoring organization in the Summer of Code 2006.  The students and developers had a lot of fun last year, and resulted in some _great_ additions to the software, so we are very enthused about this year.&lt;br /&gt;
&lt;br /&gt;
Below is a list of ideas that Inkscape developers think might make good projects.  Please do not let this list constrain you; if you have a good idea beyond what is listed we'd love to see it!&lt;br /&gt;
&lt;br /&gt;
Also, we would strongly encourage students to contact us on the Inkscape developer's list prior to submitting your proposal.  This gives us a chance to get to know you and to give you feedback that will strengthen your proposal.&lt;br /&gt;
&lt;br /&gt;
To submit a proposal, [https://www.google.com/accounts/NewAccount sign up] for a Google Account, and then log in to the [http://code.google.com/soc/ Summer of Code] site.&lt;br /&gt;
&lt;br /&gt;
== Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
=== A.  PDF Export Extension ===&lt;br /&gt;
&lt;br /&gt;
PDF is the most important graphic document interchange format, but Inkscape's current capability is woefully inadequate (we export to postscript and use ps2pdf).  This project would focus on establishing a solid solution to this need.&lt;br /&gt;
&lt;br /&gt;
An implementation approach for this would be to create a new Inkscape extension, &amp;quot;crs2pdf&amp;quot;, which links to the [http://cairographics.org/ Cairo] library for [http://www.cairographics.org/manual/cairo-PDF-Surfaces.html PDF rendering] capability, and to [http://scratchcomputing.com/projects/vectorsection Vector Section] for parsing the SVG into CRS.&lt;br /&gt;
&lt;br /&gt;
This work may also require making some alterations to Cairo and/or VectorSection to improve the quality of the throughput.&lt;br /&gt;
&lt;br /&gt;
The tool must successfully convert at least half of the about screens used in Inkscape versions 0.35-0.44.  Major kudos if you can convert all of them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  [[EricWilhelm]]&lt;br /&gt;
&lt;br /&gt;
=== B.  EPS Import ===&lt;br /&gt;
&lt;br /&gt;
While SVG is becoming a common format for exchanging data between graphics programs, EPS is currently much more common.  Inkscape's current EPS support is flakey and poorly maintained.  The plan is to switch to use of Scribus' EPS Import Library.&lt;br /&gt;
&lt;br /&gt;
This project would involve creating a new Inkscape extension, &amp;quot;eps2crs&amp;quot;, which links to Scribus' EPS import library and exports into the [http://scratchcomputing.com/projects/vectorsection Vector Section] CRS format.&lt;br /&gt;
&lt;br /&gt;
This work may also require making some alterations to the Scribus PDF library and/or VectorSection to improve the quality of the throughput.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  [[EricWilhelm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== C.  Memory Optimization ===&lt;br /&gt;
&lt;br /&gt;
Inkscape is a bit heavy in its memory use, and is tough to use on computers with limited RAM.  This project would seek to analyze and understand Inkscape's memory usage, identify and correct major memory leaks, and decrease memory usage for typical cases by a nontrivial amount.  Ultimately, the project should result in Inkscape running smoothly on lower RAM systems than currently.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  MentalGuy&lt;br /&gt;
&lt;br /&gt;
=== D.  Inkboard Portability ===&lt;br /&gt;
&lt;br /&gt;
Last year we had a successful project to integrate the SVG online whiteboard capability, called Inkboard, into Inkscape.  Unfortunately, it does not work on Windows, so many users are missing out on this capability.&lt;br /&gt;
&lt;br /&gt;
This work may involve [http://svn.sourceforge.net/viewcvs.cgi/inkscape/inkscape/branches/INKBOARD_PEDRO/src/jabber_whiteboard/protocol/ formalizing and extending the Inkboard communication protocol] and [http://svn.sourceforge.net/viewcvs.cgi/inkscape/inkscape/branches/INKBOARD_PEDRO/src/jabber_whiteboard/ working on the INKBOARD_PEDRO branch])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  Ted&lt;br /&gt;
&lt;br /&gt;
=== E.  New Grids ===&lt;br /&gt;
&lt;br /&gt;
Inkscape currently has square grids that can be snapped to.  Extend this to allow other kinds of grids:  Perspective, hex, iso, etc.&lt;br /&gt;
&lt;br /&gt;
This will involve modifying the grid code to support the ability to have multiple kinds of grids, implementing at least 3 new grids, and adding the UI elements to allow users to make use of them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  TBD&lt;br /&gt;
&lt;br /&gt;
=== F.  SVG Filters ===&lt;br /&gt;
&lt;br /&gt;
Filters are a very important SVG capability, that allows giving special features to drawing objects, including shadows, blurs, etc.  Inkscape currently does not support this capability, but it's high on the list of desires.&lt;br /&gt;
&lt;br /&gt;
This project would consist of two parts: (1) adding a SPObject for filters and CSS support for referencing them; (2) adding renderer support for doing the actual filter effects when rendering. Completing this project requires implementing at least one filter, 'Gaussian blur' as a proof of concept.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt; Bulia&lt;br /&gt;
&lt;br /&gt;
=== G.  Adding bitmap capabilities to Inkscape ===&lt;br /&gt;
&lt;br /&gt;
While the purpose of Inkscape is to be a vector editor, design in the real world requires dealing with bitmaps too. Inkscape can import the bitmaps, and have them as full canvas objects, but there is no significant bitmap operations in Inkscape. While there is no reason for Inkscape to replicate the functionality of The GIMP, it would be desirable to have a few simple operations available from Inkscape.&lt;br /&gt;
&lt;br /&gt;
This project will use the Inkscape extensions system to add a series of bitmap effects. The majority of the effects will be achieved through the integration of the ImageMagick bitmap handling libraries.  GIMP may be another source.  These effects can then be run on bitmap graphics within Inkscape.&lt;br /&gt;
&lt;br /&gt;
The work should be encapsulated in such a way that in theory, other vector graphics applications (such as Xara), could also use the work.  However, for the scope of this project we only require demonstration of the capabilities in Inkscape.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Project Timeline:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Implement first effect. This involves building Inkscape, linking in ImageMagick and getting one effect written (6 weeks)&lt;br /&gt;
* Implement remaining effects within ImageMagick (3 weeks)&lt;br /&gt;
* Build a test suite for operations and complete all Doxygen documentation of code (3 weeks)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  Ted&lt;br /&gt;
&lt;br /&gt;
=== H.  Inkscape / GIMP Bitmap Editing Integration ===&lt;br /&gt;
&lt;br /&gt;
Currently, you can embed raster/bitmap images into Inkscape drawings, but editing them is a bit of a hassle because Inkscape isn't really &amp;quot;aware&amp;quot; of external bitmap editing tools.&lt;br /&gt;
&lt;br /&gt;
This project would seek to correct this by modifying inkscape's image embedding code to interoperate more directly with external bitmap programs.  For instance, there would be an &amp;quot;open external editor&amp;quot; command that could be used when one or more bitmap images are selected.  Another idea would be to include some common bitmap modification commands from the external program, that can be run entirely within Inkscape.  A third idea is drag and drop of selections from the bitmap editor to Inkscape, and SVG selections from Inkscape to the bitmap tool.&lt;br /&gt;
&lt;br /&gt;
As a proof of concept, the result should demonstrate this interoperability with GIMP.  Note that the code should be developed such that in theory it should work with any bitmap editor, but we would only require demonstration of working with GIMP.&lt;br /&gt;
&lt;br /&gt;
Also see:  http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=862655&amp;amp;group_id=93438&amp;amp;atid=604309&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  TBD&lt;br /&gt;
&lt;br /&gt;
=== I.  Text Tool Improvements ===&lt;br /&gt;
&lt;br /&gt;
Inkscape's text tool is handy, but still lacks many of the niceties that users would like.  This project would seek to address this by implementing various improvements that users have requested.&lt;br /&gt;
&lt;br /&gt;
Some ideas for improvements:&lt;br /&gt;
* Make flowed text respect the default style of the text tool&lt;br /&gt;
* when flowing a text which already contains line breaks, provide a way for the line breaks to be conserved.&lt;br /&gt;
* when the style selected in the the Text and Font dialog is applied it erases any other style applied to some part of the text (like italics on some words, bold on others...), it would also be better to keep them where appropriate. &lt;br /&gt;
* Search through the Inkscape RFE list for other text and font improvement ideas&lt;br /&gt;
&lt;br /&gt;
See: http://valessio.ul-jb.org/projetos/inkscape/inkscribus.htm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt; TBD&lt;br /&gt;
&lt;br /&gt;
=== J.  Color Adjustment Dialog ===&lt;br /&gt;
&lt;br /&gt;
Currently, it is possible to select, say, 12 objects in the drawing and set them to the same color/gradient/pattern.  This project would go a step further, allowing multiple objects of differing color to have aspects of their color (such as brightness/contrast, HSL, etc.) altered, and to operate on vector objects with different fill styles (flat, gradient, or pattern fills), and to bitmaps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  Bulia&lt;br /&gt;
&lt;br /&gt;
=== K.  External CSS Support ===&lt;br /&gt;
&lt;br /&gt;
Inkscape currently supports inline CSS, but real support for editing non-inline CSS would allow for great functionality when storing style elements in the document head or an external file. Implemengting this would help prevent a lot of duplication of css and will greatly improve our ability to use SVG generated by other programs that use non-inline CSS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt; TBD&lt;br /&gt;
&lt;br /&gt;
=== L.  Bucket fill tool  ===&lt;br /&gt;
&lt;br /&gt;
This feature provides a new tool that generates a vector object with the desired color.  This would allow, for example, the artist to draw a set of intersecting lines, and paint the blank spaces in between.&lt;br /&gt;
&lt;br /&gt;
Two approaches have been proposed:  The first would render the current image to a in-memory bitmap, perform a flood-fill (borrow the algorithm e.g. from Gimp), then trace the result and insert the resulting vector object into the drawing.  The second would strive to detect the surrounding vector objects and perform a boolean path operation to construct a matching shape with the desired fill.  Both approaches have their pros and cons; please select either and explain why you wish to do it that way, and how you would do it.  &lt;br /&gt;
&lt;br /&gt;
More discussion is available here:  http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1123138&amp;amp;group_id=93438&amp;amp;atid=604309&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Mentor:&amp;lt;/b&amp;gt;  Bulia&lt;br /&gt;
&lt;br /&gt;
=== M.  Justified Text ===&lt;br /&gt;
&lt;br /&gt;
The lack of this feature is perhaps one of the reasons why Inkscape is currently unusable for many applications. Justified text is very useful, and is currently missing. Justification options to offer might be some subset of those proposed at http://www.w3.org/TR/css3-text/.&lt;br /&gt;
&lt;br /&gt;
One reasonable starting point if you want to support text-in-shape and TeX-like line-breaking and hyphenation is the work of the Monash University group, who have a command-line tool that can justify some small subset of XHTML, and fit into a shape that can grow/shrink in a user-defined way to fit the text, and produces SVG output: http://bowman.csse.monash.edu.au/~pmoulder/text-in-shape.tar.gz.  A disadvantage of this starting point is that the tool was not designed with editing in mind.&lt;br /&gt;
&lt;br /&gt;
'''Mentor:''' Peter Moulder&lt;br /&gt;
&lt;br /&gt;
== Additional Ideas ==&lt;br /&gt;
&lt;br /&gt;
* SVG support in OpenOffice (not exactly Inkscape development, but would allow Inkscape users to paste in art rather than having to export to png and really promote usuage of Inkscape). Not to mention eliminating all those duplicate svg/png image files!&lt;br /&gt;
&lt;br /&gt;
* More potrace/SIOX/etc. style features/development&lt;br /&gt;
&lt;br /&gt;
* Extending the online InkscapeSVG stuff - might be very cool for sharing sketches, etc&lt;br /&gt;
&lt;br /&gt;
* Building a public whiteboard server for Inkscape users, with a web site of its own, user galleries, interest groups, scheduled drawathons, connections to OCAL, etc.&lt;br /&gt;
&lt;br /&gt;
* Skeletal Strokes and Effect Lines - A few links: Our wiki page on Expression [[http://wiki.inkscape.org/wiki/index.php/Expression]], Technical papers on Skeletal Strokes [[http://portal.acm.org/citation.cfm?id=192186]], Examples - [[http://northlite.50megs.com/expr/effectlines.htm]], [[http://www.wa.commufa.jp/~ksg/p_pfwp5_cgf.htm]], [[http://personal-computer-tutor.com/abc4/v36/sara36.htm]].&lt;br /&gt;
&lt;br /&gt;
* Improve the functionality and ease of use of the python effects API (see my proposal in the [[ImprovingPythonExtensionAPI]] page )&lt;br /&gt;
&lt;br /&gt;
* Standalone palette editor&lt;br /&gt;
&lt;br /&gt;
* Converter from Visio to VectorSection's CRS format&lt;br /&gt;
&lt;br /&gt;
* Converter from CorelDraw (CDR) to VectorSection's CRS format&lt;br /&gt;
&lt;br /&gt;
* Converter enhancements for VectorSection (dxf2rzp, rzp2dxf, rzp2crs, crs2rzp, etc.)&lt;br /&gt;
&lt;br /&gt;
* Converter from Flash (SWF) to VectorSection's CRS format&lt;br /&gt;
&lt;br /&gt;
* Implementation of scissors and razor tools. Yes, these blunt tools are so necessary to quickly cut paths.&lt;br /&gt;
&lt;br /&gt;
* Add user profiles (some nice graphical interface) to store different sets of default metadata that can be used quickly&lt;br /&gt;
&lt;br /&gt;
* upgrade the metadata and licensing dialogs with more options and general licenses checking (upgrade cc license selection to using web services&lt;br /&gt;
&lt;br /&gt;
* Advanced grade tool. Each node of a shape could have a different color. Inkscape fills in with a complex grade.&lt;br /&gt;
&lt;br /&gt;
* Begin work on adding animation features to inkscape. If animated SVG is to ever truely compete with Macromedia Flash, then we'll need a good editor to create them with ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SOC 2005 ===&lt;br /&gt;
* [[SOC Accepted Proposals]]&lt;br /&gt;
* [[SOC Writing Project Proposals]]&lt;br /&gt;
* [[SOC Selection Criteria]]&lt;br /&gt;
* [[SOC Original Project Prompts]]&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Color_management&amp;diff=6076</id>
		<title>Color management</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Color_management&amp;diff=6076"/>
		<updated>2006-03-22T07:49:48Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: Implementation: new subsection Profile Database&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Inkscape's Color User Interface ===&lt;br /&gt;
* [[CurrentColorWidget]]&lt;br /&gt;
* [[ColourPicker]]&lt;br /&gt;
* [[ColorPalette]]&lt;br /&gt;
&lt;br /&gt;
=== What is &amp;quot;Color&amp;quot;? ===&lt;br /&gt;
&lt;br /&gt;
That is a very good question. In Inkscape, color is basically RGB value triplets. But in order to get precise, and to enable the same color to be seen on different computers, the general idea of [http://en2.wikipedia.org/wiki/Color_space colorspaces] comes into play.&lt;br /&gt;
&lt;br /&gt;
A common colorspace for the internet is [http://www.w3.org/Graphics/Color/sRGB.html sRGB]. SVG defaults to sRGB.&lt;br /&gt;
&lt;br /&gt;
Then there is CMYK. Of course, this is not a single colorspace, but needs to be specified per output device, inks, media, viewing conditions, etc.&lt;br /&gt;
&lt;br /&gt;
And then there are [http://www.ps.missouri.edu/PS2/support/TutorialFolder/ColorTutorial/ColorTutorial2.html spot colors]. Many designers (and thus users of vector art packages) often specify spot colors that are precise matches from a book, such as [http://en.wikipedia.org/wiki/Pantone Pantone] named colors. The main thing about these is that they are supposed to be fixed single colors of a known appearance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So, off hand it seems that it would be good if Inkscape would support:&lt;br /&gt;
*sRGB color&lt;br /&gt;
*spot color&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*colorspace definition&lt;br /&gt;
&lt;br /&gt;
There are two different problems: firstly, displaying a composite image composed of several spot colours.  This is easy - just represent the spot colours with their rgb approximations.  The only work is at the interface and colour lookup phase - implementing schemes or palettes solves this straight off.  The second problem is generating postscript or png with the colours separated correctly.  This is hard.&lt;br /&gt;
&lt;br /&gt;
=== Color Management ====&lt;br /&gt;
For Inkscape to be accepted in the print world, there must be good reliable support for both RGBA and CMYK color spaces. At the moment, the easiest way to get Inkscape SVG into CMYK color spaces is via import into Scribus or using Acrobat Distiller on Win32. Export to eps and conversion using perl script pscol from http://dionysos.mpch-mainz.mpg.de/~joeckel/pscol/ is also possible.&lt;br /&gt;
&lt;br /&gt;
Scribus and [[The_Gimp]] both use littlecms for a color mangement module for doing &amp;quot;soft previews&amp;quot; of RGBA color into a CMYK (print) space. At some point, adding color management support should be discussed.&lt;br /&gt;
&lt;br /&gt;
There is a list just starting on freedesktop.org on this topic. Details to be announced soon.&lt;br /&gt;
&lt;br /&gt;
Adding support for littlecms means we match color output across devices (like Apple's inkscape) like scanner &amp;gt; digital camera &amp;gt; app &amp;gt; monitor &amp;gt; print, and also, both [[The_Gimp]] and Scribus use littlecms.&lt;br /&gt;
&lt;br /&gt;
[[LittleCMS]] also has its own VERY ACCURATE COLOR CONVERSION ROUTINES!!! I know we were discussing this awhile back when the new color palette was being built.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
We can store the CYMK and RGB approximations side-by-side in the CSS, using SVG's ICC color support and a selected CYMK ICC profile.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 fill: #ff0000 icc-color(blah, 0.0, 1.0, 1.0, 0.0);&lt;br /&gt;
&lt;br /&gt;
Where &amp;quot;blah&amp;quot; would be bound to some CYMK color profile.  (SVG specifies &amp;quot;sRGB&amp;quot; to be bound to standard sRGB profile, but there is seemingly no &amp;quot;standard&amp;quot; CYMK profile.  So we may need to be able to use a device-specific one.)&lt;br /&gt;
&lt;br /&gt;
Of course our CSS infrastructure alone would need some radical changes before it would deal well with this well.&lt;br /&gt;
:&amp;lt;i&amp;gt;What changes do you have in mind?  Below are the changes I'm aware of, but these aren't particularly radical. --pjrm&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SPIPaint ====&lt;br /&gt;
See http://www.w3.org/TR/SVG11/painting.html#SpecifyingPaint for what SPIPaint will eventually need to support; and see http://www.w3.org/TR/SVG11/painting.html#InterfaceSVGPaint for the DOM interface (and http://www.w3.org/TR/SVG11/idl.html for its base interface SVGColor): the DOM interface might be good to copy from.&lt;br /&gt;
&lt;br /&gt;
A minimal change would be adding to SPIPaint a pointer to an ICC color struct, which might have the same field names as interface SVGICCColor (in http://www.w3.org/TR/SVG11/idl.html).&lt;br /&gt;
&lt;br /&gt;
==== Profile Database ====&lt;br /&gt;
Fill/stroke paints that mention an icc color reference a color-profile by name.&lt;br /&gt;
We thus need a mapping from name to color profile.&lt;br /&gt;
This mapping is to be populated by handlers for the &amp;amp;lt;color-profile&amp;amp;gt; element and the &amp;lt;tt&amp;gt;@color-profile&amp;lt;/tt&amp;gt; CSS at-rule.  However, note that these handlers also need to cope with the user changing or deleting that element/stylesheet; and that there can be multiple purported definitions for a given name (in which case the last one wins).  I think we want a doubly-linked list of definitions, and then we re-create the mapping (hashtable or whatever) in full when the list changes.  (We don't expect the list to contain many entries, so it's cheap to rescan the whole list.)  The &amp;amp;lt;color-profile&amp;amp;gt; element object should then include a pointer into that list, and I suppose that stylesheet objects should include multiple pointers into the list (given that stylesheets can contain arbitrarily many &amp;lt;tt&amp;gt;@color-profile&amp;lt;/tt&amp;gt; at-rules).  (The reason for storing a pointer rather than just storing the name is to allow for duplicate names in the list.)&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.w3.org/TR/SVGPrint/#devcolor SVG Print mentions color issues], including expected color support in SVG 1.2&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Color_management&amp;diff=6075</id>
		<title>Color management</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Color_management&amp;diff=6075"/>
		<updated>2006-03-22T07:28:26Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: Describe SPIPaint changes needed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Inkscape's Color User Interface ===&lt;br /&gt;
* [[CurrentColorWidget]]&lt;br /&gt;
* [[ColourPicker]]&lt;br /&gt;
* [[ColorPalette]]&lt;br /&gt;
&lt;br /&gt;
=== What is &amp;quot;Color&amp;quot;? ===&lt;br /&gt;
&lt;br /&gt;
That is a very good question. In Inkscape, color is basically RGB value triplets. But in order to get precise, and to enable the same color to be seen on different computers, the general idea of [http://en2.wikipedia.org/wiki/Color_space colorspaces] comes into play.&lt;br /&gt;
&lt;br /&gt;
A common colorspace for the internet is [http://www.w3.org/Graphics/Color/sRGB.html sRGB]. SVG defaults to sRGB.&lt;br /&gt;
&lt;br /&gt;
Then there is CMYK. Of course, this is not a single colorspace, but needs to be specified per output device, inks, media, viewing conditions, etc.&lt;br /&gt;
&lt;br /&gt;
And then there are [http://www.ps.missouri.edu/PS2/support/TutorialFolder/ColorTutorial/ColorTutorial2.html spot colors]. Many designers (and thus users of vector art packages) often specify spot colors that are precise matches from a book, such as [http://en.wikipedia.org/wiki/Pantone Pantone] named colors. The main thing about these is that they are supposed to be fixed single colors of a known appearance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So, off hand it seems that it would be good if Inkscape would support:&lt;br /&gt;
*sRGB color&lt;br /&gt;
*spot color&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*colorspace definition&lt;br /&gt;
&lt;br /&gt;
There are two different problems: firstly, displaying a composite image composed of several spot colours.  This is easy - just represent the spot colours with their rgb approximations.  The only work is at the interface and colour lookup phase - implementing schemes or palettes solves this straight off.  The second problem is generating postscript or png with the colours separated correctly.  This is hard.&lt;br /&gt;
&lt;br /&gt;
=== Color Management ====&lt;br /&gt;
For Inkscape to be accepted in the print world, there must be good reliable support for both RGBA and CMYK color spaces. At the moment, the easiest way to get Inkscape SVG into CMYK color spaces is via import into Scribus or using Acrobat Distiller on Win32. Export to eps and conversion using perl script pscol from http://dionysos.mpch-mainz.mpg.de/~joeckel/pscol/ is also possible.&lt;br /&gt;
&lt;br /&gt;
Scribus and [[The_Gimp]] both use littlecms for a color mangement module for doing &amp;quot;soft previews&amp;quot; of RGBA color into a CMYK (print) space. At some point, adding color management support should be discussed.&lt;br /&gt;
&lt;br /&gt;
There is a list just starting on freedesktop.org on this topic. Details to be announced soon.&lt;br /&gt;
&lt;br /&gt;
Adding support for littlecms means we match color output across devices (like Apple's inkscape) like scanner &amp;gt; digital camera &amp;gt; app &amp;gt; monitor &amp;gt; print, and also, both [[The_Gimp]] and Scribus use littlecms.&lt;br /&gt;
&lt;br /&gt;
[[LittleCMS]] also has its own VERY ACCURATE COLOR CONVERSION ROUTINES!!! I know we were discussing this awhile back when the new color palette was being built.&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
We can store the CYMK and RGB approximations side-by-side in the CSS, using SVG's ICC color support and a selected CYMK ICC profile.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 fill: #ff0000 icc-color(blah, 0.0, 1.0, 1.0, 0.0);&lt;br /&gt;
&lt;br /&gt;
Where &amp;quot;blah&amp;quot; would be bound to some CYMK color profile.  (SVG specifies &amp;quot;sRGB&amp;quot; to be bound to standard sRGB profile, but there is seemingly no &amp;quot;standard&amp;quot; CYMK profile.  So we may need to be able to use a device-specific one.)&lt;br /&gt;
&lt;br /&gt;
Of course our CSS infrastructure alone would need some radical changes before it would deal well with this well.&lt;br /&gt;
:&amp;lt;i&amp;gt;What changes do you have in mind?  Below are the changes I'm aware of, but these aren't particularly radical. --pjrm&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SPIPaint ====&lt;br /&gt;
See http://www.w3.org/TR/SVG11/painting.html#SpecifyingPaint for what SPIPaint will eventually need to support; and see http://www.w3.org/TR/SVG11/painting.html#InterfaceSVGPaint for the DOM interface (and http://www.w3.org/TR/SVG11/idl.html for its base interface SVGColor): the DOM interface might be good to copy from.&lt;br /&gt;
&lt;br /&gt;
A minimal change would be adding to SPIPaint a pointer to an ICC color struct, which might have the same field names as interface SVGICCColor (in http://www.w3.org/TR/SVG11/idl.html).&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.w3.org/TR/SVGPrint/#devcolor SVG Print mentions color issues], including expected color support in SVG 1.2&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=OpenDraw&amp;diff=6019</id>
		<title>OpenDraw</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=OpenDraw&amp;diff=6019"/>
		<updated>2006-03-13T12:22:47Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: Mention graph layout functionality in inkscape&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please post links to screenshots and/or insights of this vector graphics application.&lt;br /&gt;
We must learn from others.&lt;br /&gt;
&lt;br /&gt;
[[OpenDraw]] currently has more features than [[Inkscape]]:&lt;br /&gt;
&lt;br /&gt;
* Better support for 3D.&lt;br /&gt;
* Better import/export capability. &lt;br /&gt;
* &amp;quot;Convert to&amp;quot;, convert objects to and from Paths and other object can be very useful (please rephrase this)&lt;br /&gt;
* Export to Portable Document Format (PDF)&lt;br /&gt;
* Integration with the rest of a Suite has the advantage of getting [[OpenDraw]] in the door as well as providing other side benefits. &lt;br /&gt;
* Very intuitive editing of grouped objects (without ungrouping them). Double-clicking the group blurs the other objects, allowing in-group editing. &lt;br /&gt;
* (Please add to this list, I gather there are many others.)&lt;br /&gt;
&lt;br /&gt;
Nevertheless, there are some areas where it's better to use Inkscape:&lt;br /&gt;
&lt;br /&gt;
* [http://graphics.openoffice.org/svg/svg.htm SVG support] (Openoffice has some support for exporting SVG).  &lt;br /&gt;
* Spirals, stars &amp;amp; calligraphy pen are fairly unique to [[Inkscape]] and [[SodiPodi]] ([[JascWebDraw]] also has includes spirals).&lt;br /&gt;
* Apparently [[OpenDraw]] can't fill curves with a gradient or pattern.&lt;br /&gt;
* [[OpenDraw]] doesn't have mid-markers, only end markers (arrow heads).&lt;br /&gt;
* &amp;quot;Simplify curve&amp;quot; missing from [[OpenDraw]] (unique to Inkscape?)&lt;br /&gt;
* [[OpenDraw]] has only 3 boolean operations.&lt;br /&gt;
* Inkscape does better at text-on-path.  It seems that [[OpenDraw]] requires converting text to curve first, so one can't edit the text after putting it on a curve.&lt;br /&gt;
* Inset/outset (unique to inkscape? Not unique [[MacromediaFreehand]] does it better)&lt;br /&gt;
* Graph layout: automatic connector routing, node overlap removal, and graph layout functions (0.43+devel) are probably better in Inkscape than OpenDraw.  (Indeed, does OpenDraw have any of these, other than a simple Distribute command?)&lt;br /&gt;
* Patterns in Inkscape (SVG) aren't restricted to bitmaps.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
&lt;br /&gt;
Presentation on [[OpenDraw]]: http://www.openoffice.org/product/draw.html&lt;br /&gt;
&lt;br /&gt;
[[OpenDraw]] tutorials (among many others):&lt;br /&gt;
* http://www.linuxgraphic.org/section2d/articles/startoff/index.html&lt;br /&gt;
* http://www2.ac-rennes.fr/crdp/29/ie/aides/imgnum/vectoriel-draw/vectoriel-draw.htm&lt;br /&gt;
&lt;br /&gt;
=== License ===&lt;br /&gt;
&lt;br /&gt;
[[OpenDraw]] is available under [http://www.openoffice.org/license.html various licenses]&lt;br /&gt;
&lt;br /&gt;
* Public Document License (PDL) &lt;br /&gt;
* GNU General Public License (GPL)&lt;br /&gt;
* GNU Lesser General Public License (LGPL)&lt;br /&gt;
* Sun Industry Standards Source License (SISSL).  Deprecated, LGPL is used instead.&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Release_notes/0.44&amp;diff=6018</id>
		<title>Release notes/0.44</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Release_notes/0.44&amp;diff=6018"/>
		<updated>2006-03-13T11:12:18Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: Mention change in writing colours.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Inkscape 0.44 =&lt;br /&gt;
&lt;br /&gt;
== In brief ==&lt;br /&gt;
&lt;br /&gt;
Bigger and better.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Outline mode ==&lt;br /&gt;
&lt;br /&gt;
An Outline (&amp;quot;wireframe&amp;quot;) display mode is implemented. Use the &amp;lt;i&amp;gt;View &amp;gt; Display Mode &amp;gt; Outline&amp;lt;/i&amp;gt; to activate it. In this mode:&lt;br /&gt;
&lt;br /&gt;
* all paths and shapes are rendered as &amp;lt;b&amp;gt;inverse&amp;lt;/b&amp;gt; (black on light background and vice versa) &amp;lt;b&amp;gt;outlines&amp;lt;/b&amp;gt; of constant width (1 screen pixel regardless of zoom), without fill;&lt;br /&gt;
&lt;br /&gt;
* text is painted by inverse fill, without stroke; &lt;br /&gt;
&lt;br /&gt;
* bitmaps are shown as is;&lt;br /&gt;
&lt;br /&gt;
* any opacity and gradients are ignored.&lt;br /&gt;
&lt;br /&gt;
The outline mode is usually not drastically faster than regular mode (usually 10% to 50% faster), and in some special cases it may even be slower. However, the value of the outline mode is not only in its speed; it is a good way to get an idea of the structure and objects of your document, and it is convenient for precision node editing and for finding &amp;quot;stray objects&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== Selected style indicator ==&lt;br /&gt;
&lt;br /&gt;
A new control in the left end of the statusbar lets you quickly view and change the &amp;lt;b&amp;gt;fill and stroke of the selected objects&amp;lt;/b&amp;gt;. When you have a text selection in Text tool or a gradient handle selected in the Gradient tool, this indicator displays and changes the style of the text fragment or gradient stop, instead of the entire object (it's the same behavior as the Fill&amp;amp;amp;Stroke dialog.)&lt;br /&gt;
&lt;br /&gt;
* The two indicators, labelled &amp;lt;b&amp;gt;F:&amp;lt;/b&amp;gt; (top) and &amp;lt;b&amp;gt;S:&amp;lt;/b&amp;gt; (bottom), display fill and stroke of the selected object(s) correspondingly. (For gradient handles, they always display the same style.)&lt;br /&gt;
&lt;br /&gt;
* Each fill/stroke indicator can display either a &amp;lt;b&amp;gt;color+opacity swatch&amp;lt;/b&amp;gt; (the opacity shown here is the fill opacity or stroke opacity, not the master opacity) or a text label specifying &amp;lt;b&amp;gt;N/A&amp;lt;/b&amp;gt; (nothing selected), &amp;lt;b&amp;gt;None&amp;lt;/b&amp;gt; (no fill/stroke), &amp;lt;b&amp;gt;Unset&amp;lt;/b&amp;gt; (unset fill/stroke), &amp;lt;b&amp;gt;L Gradient&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;R Gradient&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Pattern&amp;lt;/b&amp;gt; (corresponding fill/stroke types), or &amp;lt;b&amp;gt;Different&amp;lt;/b&amp;gt; (selected objects have different fill/stroke types).&lt;br /&gt;
&lt;br /&gt;
* Additionally, each indicator may be accompanied by one of two flags, &amp;lt;b&amp;gt;m&amp;lt;/b&amp;gt; (&amp;quot;multiple&amp;quot;, meaning there are two or more objects all with the same fill/stroke) or &amp;lt;b&amp;gt;a&amp;lt;/b&amp;gt; (&amp;quot;averaged&amp;quot;, meaning there are two or more objects with different flat colors in fill/stroke, and the indicator shows the average of these colors).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Left-click&amp;lt;/b&amp;gt; on an indicator opens or activates the Fill&amp;amp;Stroke dialog with the corresponding tab (Fill or Stroke) active.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Right-click&amp;lt;/b&amp;gt; on an indicator opens a popup menu with the following items:&lt;br /&gt;
** &amp;lt;b&amp;gt;Edit fill/stroke...&amp;lt;/b&amp;gt;: Opens or activates the Fill&amp;amp;Stroke dialog with the corresponding tab selected. (Same as left-click.)&lt;br /&gt;
** &amp;lt;b&amp;gt;Last set color&amp;lt;/b&amp;gt;: Applies to the selected objects the fill/stroke color that was last applied to anythig.&lt;br /&gt;
** &amp;lt;b&amp;gt;Last selected color&amp;lt;/b&amp;gt;: Applies to the selected objects the fill/stroke color that was last displayed in this indicator. (Allows you to easily copy fill/stroke color between objects: select source, select destination, apply &amp;quot;last selected color&amp;quot;.)&lt;br /&gt;
**  &amp;lt;b&amp;gt;Invert&amp;lt;/b&amp;gt;: Sets the fill or stroke to the inverse of the current color (does not affect opacity).&lt;br /&gt;
**  &amp;lt;b&amp;gt;White&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Black&amp;lt;/b&amp;gt;: Sets the fill or stroke to the corresponding color (fully opaque).&lt;br /&gt;
** &amp;lt;b&amp;gt;Copy color&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Paste color&amp;lt;/b&amp;gt;: Copies or pastes the fill or stroke color (when it's color) to/from the system clipboard, as text in the &amp;lt;code&amp;gt;#rrggbb&amp;lt;/code&amp;gt; hex format.&lt;br /&gt;
** &amp;lt;b&amp;gt;Swap fill and stroke&amp;lt;/b&amp;gt;: Exchanges fill and stroke (both their types and colors, if any). &lt;br /&gt;
** &amp;lt;b&amp;gt;Make fill/stroke opaque&amp;lt;/b&amp;gt;: Removes fill or stroke transparency (not master transparency!).&lt;br /&gt;
** &amp;lt;b&amp;gt;Unset fill/stroke&amp;lt;/b&amp;gt;: Unsets fill or stroke from selected objects.&lt;br /&gt;
** &amp;lt;b&amp;gt;Remove fill/stroke&amp;lt;/b&amp;gt;: Removes fill or stroke from the selected objects.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Middle-click&amp;lt;/b&amp;gt; on a fill/stroke indicator removes fill/stroke from selected objects; if it is already removed (i.e. if the indicator displays &amp;quot;None&amp;quot;), it does the same as the &amp;quot;Last set color&amp;quot; command from the popup menu.&lt;br /&gt;
&lt;br /&gt;
* The Stroke indicator also displays the &amp;lt;b&amp;gt;stroke width&amp;lt;/b&amp;gt; of selection (averaged if there are multiple objects selected with different stroke widths), located to the right of the stroke color/transparency swatch. Left-clicking on it opens the Fill&amp;amp;Stroke dialog with the Stroke Style tab selected. Right-clicking on it opens a popup menu which allows you to choose the units for displaying the stroke width, as well as choose one of the presets to assign to selection.&lt;br /&gt;
&lt;br /&gt;
* To the right of the fill/stroke indicators, the &amp;lt;b&amp;gt;Opacity&amp;lt;/b&amp;gt; numeric field (labelled &amp;quot;O:&amp;quot;) shows and allows you to change the master opacity of the selected object (or the averaged opacity of several selected objects). &amp;lt;b&amp;gt;Right-clicking &amp;lt;/b&amp;gt; the numeric field opens a popup menu with preset opacity levels. &amp;lt;b&amp;gt;Middle-clicking&amp;lt;/b&amp;gt; on the &amp;quot;O:&amp;quot; label cycles the opacity through the values of 0 (transparent), 0.5, and 1 (opaque).&lt;br /&gt;
&lt;br /&gt;
The zoom field and the cursor coordinates indicator have been rearranged for compactness and moved to the right end of the statusbar. There's also a window resize handle added at the very end of the statusbar.&lt;br /&gt;
&lt;br /&gt;
== Color palette ==&lt;br /&gt;
&lt;br /&gt;
[joncruz]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Transform dialog ==&lt;br /&gt;
&lt;br /&gt;
Fixes and improvements in the Transform dialog (Ctrl+Shift+M):&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Apply to each object separately&amp;lt;/b&amp;gt; checkbox is added, allowing you to scale/rotate/skew each selected object by the same amount, around that object's center. When off (by default), the selection is transformed as a whole. The status of this checkbox is remembered across sessions. (It has no effect on Move and Matrix tabs).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Clear&amp;lt;/b&amp;gt; button resets the values on the current tab to defaults.&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Scale&amp;lt;/b&amp;gt; tab now allows you to specify horizontal or vertical size increments in percentage or absolute units. Also, there's a &amp;lt;b&amp;gt;Scale proportionally&amp;lt;/b&amp;gt; checkbox which ensures that scaling preserves the width/height ratio. (If you are scaling several objects proportionally with &amp;quot;Apply to each object separately&amp;quot;, you can only use the % unit to specify the scaling; otherwise each object's scale increments will have the width/height ratio of the entire selection, not of that specific object.)&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Skew&amp;lt;/b&amp;gt; tab can now specify the skew as an &amp;lt;b&amp;gt;absolute displacement&amp;lt;/b&amp;gt; (e.g. for horizontal skewing of a rectangle, that means the shift of the top rectangle side relative to the bottom), as &amp;lt;b&amp;gt;percentage displacement&amp;lt;/b&amp;gt; (e.g. a 1% horizontal skew of a rectangle means shifting the top side by 1% of the rectangle height), or as an &amp;lt;b&amp;gt;angle&amp;lt;/b&amp;gt; (e.g. horizontal skew by 15 degrees results in the sides of a rectangle being rotated to that angle, while the top and bottom remain horizontal).&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;b&amp;gt;Matrix&amp;lt;/b&amp;gt; tab (previously called &amp;quot;Transform&amp;quot;) can either edit the current &amp;lt;code&amp;gt;transform=&amp;lt;/code&amp;gt; matrix of an object, or post-multiply the &amp;lt;code&amp;gt;transform=&amp;lt;/code&amp;gt; with the matrix you specify, depending on the &amp;lt;b&amp;gt;Edit current matrix&amp;lt;/b&amp;gt; checkbox. (As it is now redundant, the transformation matrix in the Object Properties dialog is removed.)&lt;br /&gt;
&lt;br /&gt;
* The dialog now correctly &amp;lt;b&amp;gt;watches selection changes&amp;lt;/b&amp;gt; in the active document window and updates its values accordingly.&lt;br /&gt;
&lt;br /&gt;
* The layout of the dialog is simplified, tooltips and mnemonics added for better usability.&lt;br /&gt;
&lt;br /&gt;
* Many bugs are fixed, especially in value conversions between units.&lt;br /&gt;
&lt;br /&gt;
== Remembering the rotation center ==&lt;br /&gt;
&lt;br /&gt;
* The position of the center (axis) of rotation and skewing used by Selector is now &amp;lt;b&amp;gt;remembered&amp;lt;/b&amp;gt; for all objects and is restored when you select those objects again (even after save and reload). When you move or scale an object, its rotation center is moved or scaled too, so its position relative to the object always remains the same.&lt;br /&gt;
&lt;br /&gt;
* When you have several objects selected, they use the rotation focus of the &amp;lt;b&amp;gt;first selected object&amp;lt;/b&amp;gt;. If the first object does not have center set (i.e. if it's in a default central position), then several objects will rotate around the center of their common bounding box.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Shift+click&amp;lt;/b&amp;gt; on the rotation center resets it back to the center of the object's box.&lt;br /&gt;
&lt;br /&gt;
* Consequently, dragging the transformation center is now an undoable action; you can press Ctrl+Z to undo the drag.&lt;br /&gt;
&lt;br /&gt;
[TODO: &lt;br /&gt;
&lt;br /&gt;
- make use of this in keyboard transforms and Transform dialog; &lt;br /&gt;
&lt;br /&gt;
- make it work smartly for groups: if a group has center not set, return the center of the first object inside group with the center set&lt;br /&gt;
&lt;br /&gt;
- a separate tab in the Transform dialog, with 9 buttons in the square grid (for setting it to object's corners, sides, and center) as well as x/y fields for setting center to any position&lt;br /&gt;
&lt;br /&gt;
- make center snap to grid/guides/objects and to other centers&lt;br /&gt;
&lt;br /&gt;
- make objects snap with their center to grid/guides/objects]&lt;br /&gt;
&lt;br /&gt;
== Align &amp;amp;amp; Distribute dialog: remove overlaps ==&lt;br /&gt;
&lt;br /&gt;
* There is a new button to move the selected objects enough that they don't overlap each other.&lt;br /&gt;
This should be a significant addition to Inkscape's usability for diagramming.&lt;br /&gt;
&lt;br /&gt;
[Consider expanding this, comparing with existing Unclump and Distribute edge-to-edge buttons.]&lt;br /&gt;
&lt;br /&gt;
== Document Properties / Metadata dialogs ==&lt;br /&gt;
&lt;br /&gt;
* The Document Preferences dialog is now named &amp;lt;b&amp;gt;Document Properties&amp;lt;/b&amp;gt;, and it was split in two: metadata were extracted into the &amp;lt;b&amp;gt;Document Metadata&amp;lt;/b&amp;gt; dialog; metadata widgets are now also spread over two pages.&lt;br /&gt;
&lt;br /&gt;
* New controls: the new object snapping features required their own property widgets, and you can set the snapping sensitivity with a slider, or let it snap regardless of distance.&lt;br /&gt;
&lt;br /&gt;
* Rearrangements within Document Properties: everything snapping related was collected on one page; Grid and Guide widgets are on their own, the same page. Due to HIG compliance, all widgets were categorized; especially the widgets on the Page page were completely rearranged in the General/Format/Border categories.&lt;br /&gt;
&lt;br /&gt;
* Bug fixes: grayed out license URI had too low contrast, so it's no longer grayed out; the proprietary license didn't clean the license uri; spinbuttons had no tooltips, and minor grid quirks were removed; data was not updated when a new file replaced another in the same window.&lt;br /&gt;
&lt;br /&gt;
* HIG compliance: much work went into, and now only a few details are missing from full Gnome-HIG compliance.&lt;br /&gt;
&lt;br /&gt;
== Keyboard profiles ==&lt;br /&gt;
&lt;br /&gt;
[mental]&lt;br /&gt;
&lt;br /&gt;
== Path effects ==&lt;br /&gt;
&lt;br /&gt;
[acspike]&lt;br /&gt;
&lt;br /&gt;
== Snapping ==&lt;br /&gt;
&lt;br /&gt;
* [object snap - carl]&lt;br /&gt;
&lt;br /&gt;
* [highlight - mtou]&lt;br /&gt;
&lt;br /&gt;
* [only to visible gridlines - mtou]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Guidelines&amp;lt;/b&amp;gt; are made easier to pick: now you don't need to position mouse &amp;lt;i&amp;gt;exactly&amp;lt;/i&amp;gt; over a guideline to activate it, instead there's a small position tolerance (1 screen pixel on each side of the guideline).&lt;br /&gt;
&lt;br /&gt;
== Connectors ==&lt;br /&gt;
&lt;br /&gt;
* The buffer around avoided shapes (used for autorouting connectors) can now be adjusted via the &amp;quot;Spacing&amp;quot; control on the Connector toolbar.&lt;br /&gt;
&lt;br /&gt;
== Important bugfixes ==&lt;br /&gt;
* inkscape couldn't be compiled with libxml versions &amp;lt;= 2.6.9, and we now bumped the requirements from 2.6.0 up to libxml &amp;gt;= 2.6.11, which is the earliest you can get officially, anyway.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Scaling of objects with stroke&amp;lt;/b&amp;gt; in Selector used to cause undesired shifts of the scaled object, as well as scaling it in the dimension which was intended to remain untouched (e.g. slight change in width when you scale only height). All these problems are now fixed, both for interactive scaling by mouse and for numeric scaling via the Controls bar, and for both values of the &amp;quot;Scale stroke with objects&amp;quot; option. Among other things, this means that stroked objects no longer lose snapping on scale, and that the &amp;quot;Default scale origin&amp;quot; option in the Selector tool preferences finally works as designed. Caveat: There may still be problems if you scale a selection that contains objects with different stroke widths.&lt;br /&gt;
&lt;br /&gt;
* Bounding box for text objects did not include stroke width.&lt;br /&gt;
&lt;br /&gt;
* Stroke miterlimit on text objects was misinterpreted in absolute units instead of multiplies of stroke width (resulting in miter joins rendered as bevel). &lt;br /&gt;
&lt;br /&gt;
* [win32 font backend - cyreve]&lt;br /&gt;
&lt;br /&gt;
* Setting dash pattern was broken for transformed objects, and copy/paste of style with dash pattern did not apply correctly to objects with transforms.&lt;br /&gt;
&lt;br /&gt;
* An error caused a complete extra screen redraw after each zoom operation. That is, after you press &amp;quot;+&amp;quot; in a complex drawing, Inkscape redraws, but for some time after that it remains still unresponsive because it does that second redraw (invisibly for you, i.e. nothing changes on the screen). This is fixed.&lt;br /&gt;
&lt;br /&gt;
* Gradient rendering was off by one pixel, which often resulted in visibly wrong gradient rendering for small objects or in zoom-out. &lt;br /&gt;
&lt;br /&gt;
* The SVG path parser could not handle fractional numbers with the initial dot. &lt;br /&gt;
&lt;br /&gt;
* Several pattern rendering bugs are fixed, discovered by working with SVG files exported from Adobe Illustrator.&lt;br /&gt;
&lt;br /&gt;
* Inkscape on Mac OS X will now notice fonts in your ~/Library/Fonts directory, in addition to the other standard places.&lt;br /&gt;
&lt;br /&gt;
* Scaling of stroke didn't work for objects that didn't specify stroke-width and thus had the default 1px stroke.&lt;br /&gt;
&lt;br /&gt;
* Inkscape no longer crashes when presented with a defect inx file for extensions.&lt;br /&gt;
&lt;br /&gt;
* There was a regression in 0.43 that caused several minor, though annoying bugs; knots and handles remained highlighted after the mouse was released, and the rubberband selection rectangle stayed visible if the selection was ended over a node while in the node tool.  This regression has been fixed.         &lt;br /&gt;
&lt;br /&gt;
* The connector routing code would previously sometimes confuse objects between multiple documents resulting in strange routing behaviour.  This has been fixed.&lt;br /&gt;
&lt;br /&gt;
== Misc improvements ==&lt;br /&gt;
&lt;br /&gt;
* Now you can use &amp;lt;b&amp;gt;Shift+middle button drag&amp;lt;/b&amp;gt; in any tool to zoom into an area. This works the same as simple drag in Zoom tool, but is faster because it does not require switching away from your current tool. Together with &amp;lt;b&amp;gt;middle button drag&amp;lt;/b&amp;gt; (panning), &amp;lt;b&amp;gt;middle button click&amp;lt;/b&amp;gt; (zoom in) and &amp;lt;b&amp;gt;Shift+middle button click&amp;lt;/b&amp;gt; (zoom out), this completes the set of canvas navigation shortcuts available in any tool or context.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Document templates&amp;lt;/b&amp;gt; (listed in &amp;lt;i&amp;gt;File &amp;amp;gt; New&amp;lt;/i&amp;gt;) are now first searched in the &amp;lt;code&amp;gt;templates&amp;lt;/code&amp;gt; subdirectory of the user's profile directory (on Linux it's &amp;lt;code&amp;gt;~/.inkscape/templates&amp;lt;/code&amp;gt;), then in the system-wide Inkscape templates directory. This allows you to add your own templates on top of the list of standard templates, as well as override the default template with your own one (the &amp;lt;code&amp;gt;default.svg&amp;lt;/code&amp;gt; in the profile directory has priority over the system-wide one).&lt;br /&gt;
&lt;br /&gt;
* In Gradient tool, &amp;lt;b&amp;gt;Shift+R reverses the gradient definition&amp;lt;/b&amp;gt; (i.e. mirrors the stop positions) without moving the gradient handles. For example, an elliptic gradient with blue center and red periphery becomes red in the center and blue in the periphery. This works on the gradient(s) of the currently selected gradient handle or, if no handle is selected, on all selected objects' gradients. (Compare with the Node tool where Shift+R reverses the direction of the selected path.) This is especially convenient for elliptic gradients which, unlike linear, you cannot simply rotate by 180 degrees for the same result.&lt;br /&gt;
&lt;br /&gt;
* When toggling one of the &amp;quot;transform with object&amp;quot; buttons (for stroke width, rounded rectangle corners, gradients, or patterns), a message is displayed in the statusbar explaining what has changed in the program's behavior.&lt;br /&gt;
&lt;br /&gt;
* Zoom commands in the View menu are moved to a submenu; the Zoom In and Zoom Out commands are added to that submenu.&lt;br /&gt;
&lt;br /&gt;
* The contents of the &amp;lt;b&amp;gt;statusbar message&amp;lt;/b&amp;gt; are now duplicated as a &amp;lt;b&amp;gt;tooltip&amp;lt;/b&amp;gt; that is shown when you hover the mouse over the statusbar. [TODO: need to strip &amp;lt;b&amp;gt;&amp;lt;/b&amp;gt; from the tooltips.] Also, the status bar text is now no longer just cut off if there is no room but, at the end position, ellipses (...) are inserted to show there's more (only with Gtk 2.6 and newer).&lt;br /&gt;
&lt;br /&gt;
* Whole thousands above 2000 in the rulers are now displayed as 2k, 3k, 4k etc.&lt;br /&gt;
&lt;br /&gt;
* By popular demand, &amp;lt;b&amp;gt;in Pen tool&amp;lt;/b&amp;gt;, if a new path is being drawn but not yet finished, &amp;lt;b&amp;gt;Ctrl+Z cancels&amp;lt;/b&amp;gt; that unfinished path (i.e. does the same as Esc), instead of undoing the previous action.&lt;br /&gt;
&lt;br /&gt;
* In Pen tool, &amp;lt;b&amp;gt;Del&amp;lt;/b&amp;gt; works the same as Backspace to delete the last created point on the unfinished path.&lt;br /&gt;
&lt;br /&gt;
* In Node tool, the &amp;lt;b&amp;gt;!&amp;lt;/b&amp;gt; key &amp;lt;b&amp;gt;inverts node selection&amp;lt;/b&amp;gt; in the current subpath(s) (i.e. subpaths with at least one selected node); &amp;lt;b&amp;gt;Alt+!&amp;lt;/b&amp;gt; inverts in the entire path. (This is similar to how these keys work in Selector, with current subpath(s) instead of the current layer.)&lt;br /&gt;
&lt;br /&gt;
* The keyboard shortcut for &amp;quot;Make selected segments curves&amp;quot; in Node tool is changed from Shift+K to &amp;lt;b&amp;gt;Shift+U&amp;lt;/b&amp;gt; for better mnemonics.&lt;br /&gt;
&lt;br /&gt;
* In Calligraphic tool, &amp;lt;b&amp;gt;Esc&amp;lt;/b&amp;gt; deselects as in most other tools.&lt;br /&gt;
&lt;br /&gt;
* In Selector, &amp;lt;b&amp;gt;Ctrl+Enter&amp;lt;/b&amp;gt; enters the selected group (making it a temporary layer). &amp;lt;b&amp;gt;Ctrl+Backspace&amp;lt;/b&amp;gt; leaves the current layer and goes one layer up in the hierarchy (but not to root).&lt;br /&gt;
&lt;br /&gt;
* In the Document Preferences dialog, the new object style for each tool is now shown as a style swatch (displaying fill/stroke colors and opacity, stroke width, and master opacity), similar in design to the selected style indicator in the statusbar.&lt;br /&gt;
&lt;br /&gt;
* Simplify threshold in Inkscape Preferences can now be set with more precision.&lt;br /&gt;
&lt;br /&gt;
* [pen tool keys - bb]&lt;br /&gt;
&lt;br /&gt;
* In the Grid Arrange dialog, row/column spacing can now be negative. &lt;br /&gt;
&lt;br /&gt;
* The installation default is now scaling rounded rectangle corners with the rectangles. &lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;--query-*&amp;lt;/code&amp;gt; command line parameters now return the true SVG bounding box of the object instead of the Inkscape coordinate system bbox (with inverted Y axis). The new behavior makes more sense for scripting use of Inkscape.&lt;br /&gt;
&lt;br /&gt;
* Individual &amp;amp;lt;tspan&amp;amp;gt;s within text objects (including line tspans) can now be selected via the XML editor to view their bounding boxes (though per SVG, you cannot transform them). Also, you can use the &amp;lt;code&amp;gt;--query-*&amp;lt;/code&amp;gt; command line parameters to find out the bounding boxes of tspans from a script. (Individual strings within or between tspans are still not selectable, and they cannot have an ID for querying anyway.)&lt;br /&gt;
&lt;br /&gt;
* Objects with clippath show the correct clipped bounding box, instead of the original unclipped bbox as before. (However, this does not apply to objects without clippath of their own which are clipped by being inside a clipped group.)&lt;br /&gt;
&lt;br /&gt;
* The contents of the Effects menu are categorized into submenus, and several effects are renamed to more intuitive names. &lt;br /&gt;
&lt;br /&gt;
* The placeholder image which is shown when a bitmap file was no longer accessible reads now &amp;quot;Linked image not found&amp;quot; instead of the confusing &amp;quot;Broken image&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* [save zip with images - acspike?]&lt;br /&gt;
&lt;br /&gt;
* [about dialog redesign - mental]&lt;br /&gt;
&lt;br /&gt;
* [icons prerendering - joncruz, mental]&lt;br /&gt;
&lt;br /&gt;
* [extensions on windows - ishmal]&lt;br /&gt;
&lt;br /&gt;
* [new icons?]&lt;br /&gt;
&lt;br /&gt;
* [python extensions to work out of the box on windows? - ishmal]&lt;br /&gt;
&lt;br /&gt;
* [new cursors - scislac]&lt;br /&gt;
&lt;br /&gt;
* Added and output format for Destop Cutting Plotters, like the Wishblade and Craftrobo. This format is a very minimalist DXF file with appropriate scaling and translation applied. This output format should not be expected to operate as a generalized DXF output.&lt;br /&gt;
&lt;br /&gt;
* In the Transform dialog / Rotate tab, the icon was flipped horizontally to be in line with the direction of positive rotation; the change was applied to the default and crispy icon sets.&lt;br /&gt;
&lt;br /&gt;
== SVG Output ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Colors&amp;lt;/b&amp;gt; are now expressed by name (‘white’) or three-digit form (‘&amp;lt;tt&amp;gt;#f3c&amp;lt;/tt&amp;gt;’) when possible.&lt;br /&gt;
&lt;br /&gt;
== Speed ==&lt;br /&gt;
&lt;br /&gt;
* Thanks to optimizations in the renderer, Inkscape's screen redraw is &amp;lt;b&amp;gt;faster by at least 10%&amp;lt;/b&amp;gt;, and in some cases (such as complex stroked/dashed paths at high zooms) &amp;lt;b&amp;gt;up to three times faster&amp;lt;/b&amp;gt;. &lt;br /&gt;
* An optimization in the attribute setting method made operations such as moving objects on the canvas at least &amp;lt;b&amp;gt;30% faster&amp;lt;/b&amp;gt; compared to 0.43. This is especially noticeable when you are moving clones selected together with their original (e.g. a clone tiling), in which case Inkscape now works &amp;lt;b&amp;gt;three to four times faster&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
* INX files (containing the UI of the external effects) now allow the user visible strings to be translated.  This means that effect dialogs, file type selections, and extension names can all be translated by translators.&lt;br /&gt;
&lt;br /&gt;
== Internal ==&lt;br /&gt;
&lt;br /&gt;
* The Document Properties Dialog code was completely gtkmmified, which lead to dramatic reduction of code size due to usage of widget objects. The used widget objects should be reusable by other dialogs, too, and the code is much more readable.&lt;br /&gt;
&lt;br /&gt;
* Work on optimizing includes in all cpp files started, using the purgeincludes tool specifically written for that purpose, and ended with 40% of include lines removed!&lt;br /&gt;
&lt;br /&gt;
== Known problems ==&lt;br /&gt;
&lt;br /&gt;
=== Beware: defect themes on Linux ===&lt;br /&gt;
&lt;br /&gt;
* Inkscape and other Gtk programs can crash on any Linux, when the gtk2-engines-smooth / libsmooth package is installed. We have filed a bug against libsmooth which is now in gtk-engine and part of gnome. Removing the package resolves the problem, however, but it would be nice if you as affected user would inform the gtk-engines maintainers of the problem. See especially http://bugzilla.gnome.org/show_bug.cgi?id=312115 (thanks to Thomas Wood)&lt;br /&gt;
* A similar crash happens if the KDE Baghira theme or the package gtk_qt_engine are installed. If you experience Inkscape crashes on KDE, please try to install a different theme from Baghira, or uninstall the gtk_qt_engine package from your system. Both problems also affect older versions of Inkscape.&lt;br /&gt;
&lt;br /&gt;
== Previous releases ==&lt;br /&gt;
&lt;br /&gt;
* ReleaseNotes043 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes043)&lt;br /&gt;
* ReleaseNotes042 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes042)&lt;br /&gt;
* ReleaseNotes041 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes041)&lt;br /&gt;
* ReleaseNotes040 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes040)&lt;br /&gt;
* ReleaseNotes039 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes039)&lt;br /&gt;
* ReleaseNotes038 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes038)&lt;br /&gt;
* ReleaseNotes037 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes037)&lt;br /&gt;
* ReleaseNotes036 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes036)&lt;br /&gt;
* ReleaseNotes035 (http://wiki.inkscape.org/wiki/index.php/ReleaseNotes035)&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SVG_Tiny_Compliance&amp;diff=6013</id>
		<title>SVG Tiny Compliance</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SVG_Tiny_Compliance&amp;diff=6013"/>
		<updated>2006-03-11T06:31:32Z</updated>

		<summary type="html">&lt;p&gt;Pjrm: Revert last two spam-adding revisions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It'd be a nice feather in the cap to be able to declare full compliance to one of the SVG specs.  SVG Tiny is a good thing to aim for.  A number of developers have voiced support for trying to achieve this.&lt;br /&gt;
&lt;br /&gt;
As a first glance without looking much at either the spec or inkscape&lt;br /&gt;
source, I believe we need the following: don't rely on style attributes&lt;br /&gt;
working (use fill=... attributes); switch; SVG fonts; animation.&lt;br /&gt;
&lt;br /&gt;
In more detail:&lt;br /&gt;
&lt;br /&gt;
Styling:&lt;br /&gt;
* We must write `fill=&amp;quot;...&amp;quot; etc. attributes instead of using style=&amp;quot;fill:...&amp;quot;.  (I.e. when writing SVG Tiny documents, we must not use style attributes -- or at least use only &amp;quot;redundant&amp;quot; style attributes if that's easier to implement.)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;switch&amp;amp;gt;:&lt;br /&gt;
* Minimum requirement is that we render it correctly (e.g. as a viewer would, showing just one child).  Interface for viewing other branches would be nice (perhaps a non-modal dialog box listing the children named by their requiredFeatures, requiredExtensions and systemLanguage attributes.  The layers dialog box may be a good base.&lt;br /&gt;
&lt;br /&gt;
SVG fonts: font, font-face, font-face-src, font-face-name, missing-glyph, glyph:&lt;br /&gt;
* massifr has started work on this.  He's still new to inkscape source code, so could use guidance.&lt;br /&gt;
&lt;br /&gt;
Anchors (&amp;amp;lt;a&amp;amp;gt;):&lt;br /&gt;
* Especially relevant to Inkview.  Inkscape can create &amp;lt;a&amp;gt; elements with right-click on an existing item, and has a textual dialog box for filling in attribute values (object-attributes.cpp).  We have a &amp;quot;follow link&amp;quot; item in the contextual menu, but it does nothing (object-ui.cpp:sp_anchor_link_follow).&lt;br /&gt;
&lt;br /&gt;
Animation: animate, animateColor, animateMotion, animateTransform, mpath, set:&lt;br /&gt;
* My reading is that we can't claim to support all of SVG Tiny without supporting animation.&lt;br /&gt;
* See [[Animation-(Timeline)]] for implementation notes.&lt;br /&gt;
&lt;br /&gt;
(&amp;amp;lt;foreignObject&amp;amp;gt;: I believe we don't need to do anything to support the foreignObject element.  We already have the property of not discarding unrecognized elements like foreignObject and its children.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Looking back at the full SVG (1.1) spec, is Inkscape already able to claim to be a &amp;quot;[http://www.w3.org/TR/SVG11/conform.html#ConformingSVGGenerators Conforming SVG Generator]&amp;quot;, for which I think lack of animation/filtering features would not be a problem (it seems to me that it doesn't matter what features you support, as long the generated file is valid SVG) but compliance with the Priority 1 accessibility guidelines from the &amp;quot;[http://www.w3.org/TR/ATAG10/ Authoring Tool Accessibility Guidelines 1.0]&amp;quot; would be necessary.  http://www.w3.org/TR/SVG11/access.html outlines how accessibility applies to SVG.  Some low-hanging fruit would be better support for [http://www.w3.org/TR/SVG11/struct.html#TitleElement &amp;lt;tt&amp;gt;title&amp;lt;/tt&amp;gt;] and [http://www.w3.org/TR/SVG11/struct.html#DescElement &amp;lt;tt&amp;gt;desc&amp;lt;/tt&amp;gt;] elements (e.g. from the Object Properties dialog box) and the [http://www.w3.org/TR/REC-xml/#sec-lang-tag &amp;lt;tt&amp;gt;xml:lang&amp;lt;/tt&amp;gt;] attribute for text spans (whose initial implementation could be as simple as a textbox in the Text&amp;amp;amp;Font dialog box).&lt;br /&gt;
&lt;br /&gt;
We would not, however, be able to claim to be a &amp;quot;[http://www.w3.org/TR/SVG11/conform.html#ConformingSVGInterpreters Conforming Static SVG Interpreter]&amp;quot; or &amp;quot;[http://www.w3.org/TR/SVG11/conform.html#ConformingSVGViewers Conforming Static SVG Viewer]&amp;quot; until [http://www.w3.org/TR/SVG11/feature.html#SVG-static more features] were supported, e.g. filters and SVG fonts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Research ===&lt;br /&gt;
&lt;br /&gt;
* Check out all these [http://svg.org/special/svg_phones phones] that use svg now!!!&lt;br /&gt;
* Check out [[Beatware Mobile Designer]]&lt;/div&gt;</summary>
		<author><name>Pjrm</name></author>
	</entry>
</feed>