Code

Connector tool: make connectors avoid the convex hull of shapes.
authorArcadie M. Cracan <acracan@gmail.com>
Sun, 27 Dec 2009 11:31:36 +0000 (13:31 +0200)
committerArcadie M. Cracan <acracan@gmail.com>
Sun, 27 Dec 2009 11:31:36 +0000 (13:31 +0200)
224 files changed:
.bzrignore
INSTALL
Makefile.am
README
README.osx [new file with mode: 0644]
build.xml
configure.ac
po/POTFILES.in
po/fr.po
po/inkscape.pot
po/ru.po
po/sk.po [changed mode: 0644->0755]
share/extensions/Barcode/EAN13.py
share/extensions/Barcode/EAN5.py [new file with mode: 0644]
share/extensions/Barcode/Makefile.am
share/extensions/Barcode/UPCA.py
share/extensions/Barcode/UPCE.py
share/extensions/Barcode/__init__.py
share/extensions/Makefile.am
share/extensions/embedimage.py
share/extensions/inkex.py
share/extensions/measure.py
share/extensions/render_alphabetsoup.py
share/extensions/render_barcode.inx
share/extensions/render_barcode_datamatrix.inx [new file with mode: 0644]
share/extensions/render_barcode_datamatrix.py [new file with mode: 0644]
share/extensions/wireframe_sphere.inx [new file with mode: 0644]
share/extensions/wireframe_sphere.py [new file with mode: 0644]
share/icons/Makefile.am
share/icons/application/16x16/Makefile.am [new file with mode: 0644]
share/icons/application/16x16/inkscape.png [new file with mode: 0644]
share/icons/application/22x22/Makefile.am [new file with mode: 0644]
share/icons/application/22x22/inkscape.png [new file with mode: 0644]
share/icons/application/24x24/Makefile.am [new file with mode: 0644]
share/icons/application/24x24/inkscape.png [new file with mode: 0644]
share/icons/application/256x256/Makefile.am [new file with mode: 0644]
share/icons/application/256x256/inkscape.png [new file with mode: 0644]
share/icons/application/32x32/Makefile.am [new file with mode: 0644]
share/icons/application/32x32/inkscape.png [new file with mode: 0644]
share/icons/application/48x48/Makefile.am [new file with mode: 0644]
share/icons/application/48x48/inkscape.png [new file with mode: 0644]
share/icons/application/Makefile.am [new file with mode: 0644]
share/icons/color-management-icon.png [new file with mode: 0644]
share/icons/out-of-gamut-icon.png [new file with mode: 0644]
share/icons/out-of-gamut-icon.svg [new file with mode: 0644]
share/icons/too-much-ink-icon.png [new file with mode: 0644]
share/icons/too-much-ink-icon.svg [new file with mode: 0644]
src/2geom/path-intersection.cpp
src/Makefile_insert
src/bind/javabind.cpp
src/box3d-context.cpp
src/box3d.cpp
src/box3d.h
src/color-profile.cpp
src/color-profile.h
src/color.cpp
src/color.h
src/connector-context.cpp
src/desktop-style.cpp
src/desktop.cpp
src/desktop.h
src/display/canvas-axonomgrid.cpp
src/display/canvas-axonomgrid.h
src/display/canvas-grid.cpp
src/display/canvas-grid.h
src/display/nr-arena-glyphs.cpp
src/display/nr-arena-item.cpp
src/display/nr-arena-shape.cpp
src/display/nr-arena.cpp
src/display/nr-arena.h
src/display/nr-filter-colormatrix.cpp
src/display/nr-filter-colormatrix.h
src/display/nr-filter-component-transfer.cpp
src/display/nr-filter-component-transfer.h
src/display/nr-filter-convolve-matrix.cpp
src/display/nr-filter-convolve-matrix.h
src/display/nr-filter-displacement-map.cpp
src/display/nr-filter-displacement-map.h
src/display/nr-filter-flood.cpp
src/display/nr-filter-flood.h
src/display/nr-filter-image.cpp
src/display/nr-filter-morphology.cpp
src/display/nr-filter-morphology.h
src/display/nr-filter-tile.cpp
src/display/nr-filter-tile.h
src/display/nr-filter-turbulence.cpp
src/display/nr-filter-turbulence.h
src/display/nr-svgfonts.cpp
src/display/nr-svgfonts.h
src/display/rendermode.h
src/document.cpp
src/document.h
src/dom/ucd.cpp
src/dom/util/ziptool.cpp
src/dropper-context.cpp
src/extension/dxf2svg/entities2elements.cpp
src/extension/internal/cairo-ps-out.cpp
src/extension/internal/cairo-render-context.h
src/extension/internal/emf-win32-inout.cpp
src/extension/internal/odf.cpp
src/extension/internal/pdfinput/pdf-input.cpp
src/extension/internal/pdfinput/svg-builder.cpp
src/filters/colormatrix.cpp
src/filters/componenttransfer-funcnode.cpp
src/filters/componenttransfer-funcnode.h
src/filters/convolvematrix.cpp
src/filters/convolvematrix.h
src/filters/flood.cpp
src/filters/flood.h
src/filters/image.cpp
src/filters/image.h
src/filters/morphology.cpp
src/filters/turbulence.cpp
src/filters/turbulence.h
src/gradient-drag.cpp
src/guide-snapper.cpp
src/guide-snapper.h
src/helper-fns.h
src/inkjar/jar.cpp
src/interface.cpp
src/libavoid/connector.cpp
src/libavoid/orthogonal.cpp
src/libavoid/router.cpp
src/libavoid/vpsc.cpp
src/libcroco/cr-cascade.c
src/libnr/Makefile_insert
src/libnr/nr-compose-transform.cpp
src/libnr/nr-compose.cpp
src/libnr/nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM.S [deleted file]
src/libnrtype/FontFactory.cpp
src/libnrtype/FontFactory.h
src/libnrtype/FontInstance.cpp
src/libnrtype/Layout-TNG-Input.cpp
src/libnrtype/Layout-TNG-OutIter.cpp
src/libnrtype/Layout-TNG.h
src/libnrtype/font-instance.h
src/libvpsc/pairingheap/.dirstamp [deleted file]
src/line-snapper.cpp
src/line-snapper.h
src/live_effects/lpe-extrude.cpp
src/live_effects/lpe-perspective_path.cpp
src/live_effects/lpe-recursiveskeleton.cpp
src/live_effects/lpe-rough-hatches.cpp
src/live_effects/lpe-ruler.cpp
src/live_effects/parameter/parameter.cpp
src/main.cpp
src/marker-test.h [new file with mode: 0644]
src/menus-skeleton.h
src/object-snapper.cpp
src/object-snapper.h
src/persp3d-reference.h
src/persp3d.cpp
src/persp3d.h
src/preferences-skeleton.h
src/print.cpp
src/selcue.cpp
src/selection-chemistry.cpp
src/selection.cpp
src/selection.h
src/snap.cpp
src/snap.h
src/snapped-curve.cpp
src/snapped-curve.h
src/snapped-line.cpp
src/snapped-line.h
src/snapped-point.cpp
src/snapped-point.h
src/snapper.h
src/sp-flowtext.cpp
src/sp-font-face.cpp
src/sp-font-face.h
src/sp-font.cpp
src/sp-font.h
src/sp-glyph-kerning.cpp
src/sp-glyph-kerning.h
src/sp-glyph.cpp
src/sp-glyph.h
src/sp-image.cpp
src/sp-item-group.cpp
src/sp-marker-loc.h
src/sp-missing-glyph.cpp
src/sp-missing-glyph.h
src/sp-namedview.cpp
src/sp-path.cpp
src/sp-script.cpp
src/sp-script.h
src/sp-text.cpp
src/spray-context.cpp
src/style.cpp
src/svg/svg-color.cpp
src/svg/svg-color.h
src/svg/svg-device-color.h [new file with mode: 0644]
src/svg/svg-length.cpp
src/text-context.cpp
src/text-editing.cpp
src/text-editing.h
src/transf_mat_3x4.cpp
src/ui/dialog/Makefile_insert
src/ui/dialog/dialog-manager.cpp
src/ui/dialog/document-properties.cpp
src/ui/dialog/filter-effects-dialog.cpp
src/ui/dialog/inkscape-preferences.cpp
src/ui/dialog/inkscape-preferences.h
src/ui/dialog/print-colors-preview-dialog.cpp [new file with mode: 0644]
src/ui/dialog/print-colors-preview-dialog.h [new file with mode: 0644]
src/ui/dialog/print.cpp
src/ui/dialog/spray-option.cpp
src/ui/dialog/spray-option.h
src/ui/dialog/svg-fonts-dialog.cpp
src/ui/dialog/svg-fonts-dialog.h
src/ui/dialog/swatches.cpp
src/ui/widget/spin-slider.cpp
src/vanishing-point.cpp
src/verbs.cpp
src/verbs.h
src/widgets/desktop-widget.cpp
src/widgets/icon.cpp
src/widgets/ruler.cpp
src/widgets/sp-color-icc-selector.cpp
src/widgets/sp-color-notebook.cpp
src/widgets/sp-color-notebook.h
src/widgets/sp-color-scales.cpp
src/widgets/sp-color-wheel-selector.cpp
src/widgets/toolbox.cpp

index d91367581e035bbffef23d98f71169deb47dd113..4202b334d93f36b1558fbd299a3b3c1eacd48c9d 100644 (file)
+./Info.plist
+./Makefile
+./aclocal.m4
+./autom4te.cache
+./build
+./compile
+./config.guess
+./config.h
+./config.h.in
+./config.log
+./config.status
+./config.status.lineno
+./config.sub
+./configure
+./depcomp
+./inkscape.1
+./inkscape.desktop
+./inkscape.fr.1
+./inkscape.spec
+./inkview.1
+./install
+./install-sh
+./intltool-extract.in
+./intltool-merge.in
+./intltool-update.in
+./missing
+./stamp-h1
+.deps
+.dirstamp
 Makefile.in
-aclocal.m4
-autom4te.cache
-build
-compile
-config.guess
-config.h.in
-config.sub
-configure
-depcomp
-install
-install-sh
-intltool-extract.in
-intltool-merge.in
-intltool-update.in
-missing
+doc/Makefile
 doc/Makefile.in
+packaging/autopackage/default.apspec
+po/*.gmo
+po/Makefile
 po/Makefile.in.in
+po/POTFILES
+po/stamp-it
+share/Makefile
 share/Makefile.in
+share/clipart/Makefile
 share/clipart/Makefile.in
+share/examples/Makefile
 share/examples/Makefile.in
-share/extensions/Makefile.in
+share/extensions/Barcode/Makefile
 share/extensions/Barcode/Makefile.in
+share/extensions/Makefile
+share/extensions/Makefile.in
+share/extensions/Poly3DObjects/Makefile
 share/extensions/Poly3DObjects/Makefile.in
+share/extensions/alphabet_soup/Makefile
 share/extensions/alphabet_soup/Makefile.in
+share/extensions/test/Makefile
+share/extensions/xaml2svg/Makefile
 share/extensions/xaml2svg/Makefile.in
+share/filters/Makefile
+share/filters/filters.svg.h
+share/fonts/Makefile
 share/fonts/Makefile.in
+share/gradients/Makefile
 share/gradients/Makefile.in
+share/icons/Makefile
 share/icons/Makefile.in
+share/icons/application/16x16/Makefile
+share/icons/application/22x22/Makefile
+share/icons/application/24x24/Makefile
+share/icons/application/256x256/Makefile
+share/icons/application/32x32/Makefile
+share/icons/application/48x48/Makefile
+share/icons/application/Makefile
+share/keys/Makefile
 share/keys/Makefile.in
+share/markers/Makefile
 share/markers/Makefile.in
+share/palettes/Makefile
 share/palettes/Makefile.in
+share/patterns/Makefile
 share/patterns/Makefile.in
+share/patterns/patterns.svg.h
+share/screens/Makefile
 share/screens/Makefile.in
+share/templates/Makefile
 share/templates/Makefile.in
+share/tutorials/Makefile
 share/tutorials/Makefile.in
+share/ui/Makefile
 share/ui/Makefile.in
+src/2geom/makefile
+src/Makefile
 src/Makefile.in
-share/filters/filters.svg.h
+src/algorithms/makefile
+src/application/makefile
+src/bind/makefile
+src/check-header-compile
+src/debug/makefile
+src/dialogs/makefile
+src/display/makefile
+src/dom/makefile
+src/extension/implementation/makefile
+src/extension/internal/makefile
+src/extension/makefile
+src/extension/script/makefile
+src/filters/makefile
+src/helper/makefile
+src/helper/sp-marshal.cpp
+src/helper/sp-marshal.h
+src/inkjar/makefile
+src/inkscape
+src/inkscape-version.cpp
+src/inkview
+src/io/makefile
+src/jabber_whiteboard/makefile
+src/libcroco/makefile
+src/libgdl/makefile
+src/libnr/makefile
+src/libnrtype/makefile
+src/livarot/makefile
+src/live_effects/makefile
+src/live_effects/parameter/makefile
+src/pedro/makefile
+src/removeoverlap/makefile
+src/svg/makefile
+src/trace/makefile
+src/traits/makefile
+src/ui/cache/makefile
+src/ui/dialog/makefile
+src/ui/makefile
+src/ui/view/makefile
+src/ui/widget/makefile
+src/util/makefile
+src/widgets/makefile
+src/xml/makefile
diff --git a/INSTALL b/INSTALL
index e7d5dad63d82769e36769c8181241d2bae508987..00618d80117433a06f14dcaad9170111a818a9c6 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -10,6 +10,9 @@ Basic Installation
    If you have problems compiling Inkscape, then see
 http://wiki.inkscape.org/wiki/index.php/CompilingInkscape .
 
+   If you are a Mac OS X user, please don't read on, keep to the wiki 
+pages instead: http://wiki.inkscape.org/wiki/index.php/CompilingMacOsX
+
    The remainder of this file gives generic installation instructions.
 
    The `configure' shell script attempts to guess correct values for
index 930bfa48bce93cd56a3c08e1df7c0358b9144be2..f07cf697990a270fe302944d432f2145fe9dc12e 100644 (file)
@@ -4,9 +4,6 @@ AUTOMAKE_OPTIONS = foreign
 
 SUBDIRS = src doc share po
 
-appicondir = $(datadir)/pixmaps
-appicon_DATA = inkscape.png
-
 Graphicsdir = $(datadir)/applications
 Graphics_in_files = inkscape.desktop.in
 Graphics_DATA = $(Graphics_in_files:.desktop.in=.desktop)
diff --git a/README b/README
index 8a7922c42c4a741f00cfe233ca7327fb86a00fd3..fde4001057c1ae3c850facdc4ae58697b0226a36 100644 (file)
--- a/README
+++ b/README
@@ -21,6 +21,10 @@ emphasizing a lightweight core with powerful features added through
 an extension mechanism, and the establishment of a friendly, open,
 community-oriented development processes.
 
+
+Basic Installation
+==================
+
 Inkscape uses the standard procedure for compilation and installation: 
 
   ./configure
@@ -32,6 +36,9 @@ the "./autogen.sh" command, which calls in turn a number of other
 programs such as automake and autoconf.  See INSTALL for more
 details. 
 
+For platform specific instructions please read the README file that
+is associated with that platform (e.g. for Mac OS X read README.osx)
+
 
 Required Dependencies
 =====================
diff --git a/README.osx b/README.osx
new file mode 100644 (file)
index 0000000..5013bbb
--- /dev/null
@@ -0,0 +1,15 @@
+Installation for Mac OS X users
+===============================
+
+We try to keep the Wiki pages on compiling Inkscape up-to-date and 
+comprehensive. It is here: 
+
+http://wiki.inkscape.org/wiki/index.php/CompilingMacOsX
+
+For a brief overview: 
+
+We suggest to use macports (http://macports.org) in order to achieve all
+the necessary components and libraries. Then there is a mighty tool called
+"osx-build.sh" in the packaging/macosx directory of the unpacked tarball.
+This script will do most of the work for you. 
+
index 2606a3210a8a39a5eb4b982361c10d365d94f127..99e221e64662e95b705b4300d8c5fe57c50dcb02 100644 (file)
--- a/build.xml
+++ b/build.xml
 ## P R O J E C T   :   I N K S C A P E
 ########################################################################
 -->
-<project name="Inkscape" default="dist-inkscape" basedir=".">
+<project name="Inkscape" default="dist-all" basedir=".">
     <description>
         Build file for the Inkscape SVG editor.  This file
         was written for GTK-2.10 on Win32, but it should work
         well for other types of builds with only minor adjustments.
-        Note that the default target is 'dist'.  You can execute other
+        Note that the default target is 'dist-all'.  You can execute other
         targets instead, by "btool {target}",  like  "btool compile", if
-        you want to save time.
+        you want to save time, or "dist-inkscape" if you don't want inkview.
     </description>
 
   <!-- set global properties for this build -->
             <include name="color-profile-test.h"/>
             <include name="dir-util-test.h"/>
             <include name="extract-uri-test.h"/>
+            <include name="marker-test.h"/>
             <include name="mod360-test.h"/>
             <include name="preferences-test.h"/>
             <include name="round-test.h"/>
index e34da61c5b0be609c20fddaef542ad56ca0e3d23..32990943b03eeb6eecf5ebebd97a0ddf76f80774 100644 (file)
@@ -33,6 +33,9 @@ AC_PROG_INTLTOOL(0.22)
 AC_HEADER_STDC
 INK_SVN_SNAPSHOT_BUILD
 
+dnl If automake 1.11 shave the output to look nice
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+
 dnl These next few lines are needed only while libcroco is in our source tree.
 AC_PROG_CC
 AM_PROG_CC_C_O
@@ -968,6 +971,13 @@ share/filters/Makefile
 share/fonts/Makefile
 share/gradients/Makefile
 share/icons/Makefile
+share/icons/application/Makefile
+share/icons/application/16x16/Makefile
+share/icons/application/22x22/Makefile
+share/icons/application/24x24/Makefile
+share/icons/application/32x32/Makefile
+share/icons/application/48x48/Makefile
+share/icons/application/256x256/Makefile
 share/keys/Makefile
 share/markers/Makefile
 share/palettes/Makefile
index 395a4a988051b47d66cb78bfa30e8825fbd8ac0d..14af5cfa7207207182d33b3a3e63fded688d9be2 100644 (file)
@@ -197,6 +197,7 @@ src/sp-text.cpp
 src/sp-tref.cpp
 src/sp-tspan.cpp
 src/sp-use.cpp
+src/spray-context.cpp
 src/star-context.cpp
 src/text-chemistry.cpp
 src/text-context.cpp
@@ -229,7 +230,9 @@ src/ui/dialog/memory.cpp
 src/ui/dialog/messages.cpp
 src/ui/dialog/ocaldialogs.cpp
 src/ui/dialog/print.cpp
+src/ui/dialog/print-colors-preview-dialog.cpp
 src/ui/dialog/scriptdialog.cpp
+src/ui/dialog/spray-option.cpp
 src/ui/dialog/svg-fonts-dialog.cpp
 src/ui/dialog/swatches.cpp
 src/ui/dialog/tile.cpp
@@ -376,6 +379,7 @@ share/extensions/web-transmit-att.py
 [type: gettext/xml] share/extensions/radiusrand.inx
 [type: gettext/xml] share/extensions/render_alphabetsoup.inx
 [type: gettext/xml] share/extensions/render_barcode.inx
+[type: gettext/xml] share/extensions/render_barcode_datamatrix.inx
 [type: gettext/xml] share/extensions/restack.inx
 [type: gettext/xml] share/extensions/rtree.inx
 [type: gettext/xml] share/extensions/rubberstretch.inx
@@ -402,6 +406,7 @@ share/extensions/web-transmit-att.py
 [type: gettext/xml] share/extensions/web-set-att.inx
 [type: gettext/xml] share/extensions/web-transmit-att.inx
 [type: gettext/xml] share/extensions/whirl.inx
+[type: gettext/xml] share/extensions/wireframe_sphere.inx
 [type: gettext/xml] share/extensions/wmf_input.inx
 [type: gettext/xml] share/extensions/wmf_output.inx
 [type: gettext/xml] share/extensions/xaml2svg.inx
index 5a370c1d056a0fd99142f038bdde4009197c8559..835bc824e7ad2d0a894a2b506eb91d15eb827f5f 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -17,8 +17,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inkscape\n"
 "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-10-15 12:45+0200\n"
-"PO-Revision-Date: 2009-10-15 19:29+0100\n"
+"POT-Creation-Date: 2009-12-08 06:25+0100\n"
+"PO-Revision-Date: 2009-12-09 17:46+0100\n"
 "Last-Translator: Nicolas Dufour <nicoduf@yahoo.fr>\n"
 "Language-Team:  <fr@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -400,8 +400,8 @@ msgstr "Détecte les bords de couleur verticaux dans les objets"
 
 #. Pencil
 #: ../share/filters/filters.svg.h:29
-#: ../src/ui/dialog/inkscape-preferences.cpp:486
-#: ../src/verbs.cpp:2516
+#: ../src/ui/dialog/inkscape-preferences.cpp:492
+#: ../src/verbs.cpp:2528
 msgid "Pencil"
 msgstr "Crayon"
 
@@ -1629,7 +1629,7 @@ msgstr "Bosselage spéculaire extrêmement flexible avec transparence"
 
 #: ../share/filters/filters.svg.h:162
 #: ../src/ui/dialog/align-and-distribute.cpp:920
-#: ../src/widgets/desktop-widget.cpp:1577
+#: ../src/widgets/desktop-widget.cpp:1576
 msgid "Drawing"
 msgstr "Dessin"
 
@@ -2298,46 +2298,45 @@ msgstr "Créer une boîte 3D"
 msgid "<b>3D Box</b>"
 msgstr "<b>Boîte 3D</b>"
 
-#: ../src/connector-context.cpp:526
+#: ../src/connector-context.cpp:766
 msgid "Creating new connector"
 msgstr "Création d'un nouveau connecteur"
 
-#: ../src/connector-context.cpp:775
+#: ../src/connector-context.cpp:1157
 msgid "Connector endpoint drag cancelled."
 msgstr "Déplacement de fin de connecteur annulé."
 
-#: ../src/connector-context.cpp:824
+#: ../src/connector-context.cpp:1188
+msgid "Connection point drag cancelled."
+msgstr "Déplacement du point de connexion annulé."
+
+#: ../src/connector-context.cpp:1306
 msgid "Reroute connector"
 msgstr "Rerouter un connecteur"
 
-#. Flush pending updates
-#: ../src/connector-context.cpp:988
+#: ../src/connector-context.cpp:1473
 msgid "Create connector"
 msgstr "Créer un connecteur"
 
-#: ../src/connector-context.cpp:1012
+#: ../src/connector-context.cpp:1496
 msgid "Finishing connector"
 msgstr "Tracé du connecteur terminé"
 
-#: ../src/connector-context.cpp:1154
-msgid "<b>Connection point</b>: click or drag to create a new connector"
-msgstr "<b>Point de connnection</b> : cliquer ou déplacer pour créer un nouveau connecteur"
-
-#: ../src/connector-context.cpp:1227
+#: ../src/connector-context.cpp:1784
 msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
 msgstr "<b>Fin de connecteur</b> : déplacer pour rerouter ou connecter à de nouvelles formes"
 
-#: ../src/connector-context.cpp:1339
+#: ../src/connector-context.cpp:1925
 msgid "Select <b>at least one non-connector object</b>."
 msgstr "Sélectionner <b>au moins un objet non connecteur</b>."
 
-#: ../src/connector-context.cpp:1344
-#: ../src/widgets/toolbox.cpp:6997
+#: ../src/connector-context.cpp:1930
+#: ../src/widgets/toolbox.cpp:7377
 msgid "Make connectors avoid selected objects"
 msgstr "Faire que les connecteurs évitent les objets sélectionnés"
 
-#: ../src/connector-context.cpp:1345
-#: ../src/widgets/toolbox.cpp:7007
+#: ../src/connector-context.cpp:1931
+#: ../src/widgets/toolbox.cpp:7387
 msgid "Make connectors ignore selected objects"
 msgstr "Faire que les connecteurs ignorent les objets sélectionnés"
 
@@ -2351,11 +2350,11 @@ msgstr "<b>Le calque courant est caché</b>. Le rendre visible pour pouvoir y de
 msgid "<b>Current layer is locked</b>. Unlock it to be able to draw on it."
 msgstr "<b>Le calque courant est verrouillé</b>. Le déverrouiller pour pouvoir y dessiner."
 
-#: ../src/desktop.cpp:828
+#: ../src/desktop.cpp:830
 msgid "No previous zoom."
 msgstr "Plus de zoom précédent."
 
-#: ../src/desktop.cpp:853
+#: ../src/desktop.cpp:855
 msgid "No next zoom."
 msgstr "Plus de zoom suivant."
 
@@ -2890,7 +2889,7 @@ msgstr "Capturer la couleur et l'opacité visibles"
 #: ../src/dialogs/clonetiler.cpp:2764
 #: ../src/extension/internal/bitmap/opacity.cpp:37
 #: ../src/extension/internal/bitmap/opacity.cpp:39
-#: ../src/widgets/toolbox.cpp:4326
+#: ../src/widgets/toolbox.cpp:4353
 #: ../share/extensions/interp_att_g.inx.h:12
 msgid "Opacity"
 msgstr "Opacité"
@@ -3091,17 +3090,17 @@ msgid "Reset all shifts, scales, rotates, opacity and color changes in the dialo
 msgstr "Remise à zéro de tous les décalages, redimensionnements, rotation et opacités dans la boîte de dialogue"
 
 #: ../src/dialogs/export.cpp:146
-#: ../src/verbs.cpp:2623
+#: ../src/verbs.cpp:2637
 msgid "_Page"
 msgstr "_Page"
 
 #: ../src/dialogs/export.cpp:146
-#: ../src/verbs.cpp:2627
+#: ../src/verbs.cpp:2641
 msgid "_Drawing"
 msgstr "_Dessin"
 
 #: ../src/dialogs/export.cpp:146
-#: ../src/verbs.cpp:2629
+#: ../src/verbs.cpp:2643
 msgid "_Selection"
 msgstr "_Sélection"
 
@@ -3146,7 +3145,7 @@ msgid "<big><b>Bitmap size</b></big>"
 msgstr "<big><b>Dimensions du bitmap</b></big>"
 
 #: ../src/dialogs/export.cpp:484
-#: ../src/ui/widget/page-sizer.cpp:210
+#: ../src/ui/widget/page-sizer.cpp:230
 msgid "_Width:"
 msgstr "_Largeur :"
 
@@ -3160,13 +3159,13 @@ msgid "dp_i"
 msgstr "_ppp"
 
 #: ../src/dialogs/export.cpp:498
-#: ../src/ui/widget/page-sizer.cpp:211
+#: ../src/ui/widget/page-sizer.cpp:231
 msgid "_Height:"
 msgstr "_Hauteur :"
 
 #: ../src/dialogs/export.cpp:509
-#: ../src/ui/dialog/inkscape-preferences.cpp:768
-#: ../src/ui/dialog/inkscape-preferences.cpp:1180
+#: ../src/ui/dialog/inkscape-preferences.cpp:784
+#: ../src/ui/dialog/inkscape-preferences.cpp:1196
 msgid "dpi"
 msgstr "ppp"
 
@@ -3345,7 +3344,7 @@ msgstr "Rechercher les chemins, lignes, polylignes"
 
 #: ../src/dialogs/find.cpp:593
 #: ../src/ui/dialog/find.cpp:75
-#: ../src/widgets/toolbox.cpp:2091
+#: ../src/widgets/toolbox.cpp:2118
 msgid "Paths"
 msgstr "Chemins"
 
@@ -3522,8 +3521,8 @@ msgstr "L'attribut id= (seuls les chiffres, lettres, et les caractères .-_: son
 
 #. Button for setting the object's id, label, title and description.
 #: ../src/dialogs/item-properties.cpp:143
-#: ../src/verbs.cpp:2486
-#: ../src/verbs.cpp:2492
+#: ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2502
 msgid "_Set"
 msgstr "_Définir"
 
@@ -3667,26 +3666,27 @@ msgstr "URL :"
 #: ../src/dialogs/object-attributes.cpp:51
 #: ../src/dialogs/object-attributes.cpp:59
 #: ../src/ui/dialog/guides.cpp:43
-#: ../src/ui/view/edit-widget.cpp:1074
+#: ../src/ui/view/edit-widget.cpp:1080
 #: ../src/widgets/desktop-widget.cpp:504
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X:"
 msgstr "X :"
 
 #: ../src/dialogs/object-attributes.cpp:52
 #: ../src/dialogs/object-attributes.cpp:60
 #: ../src/ui/dialog/guides.cpp:44
-#: ../src/ui/view/edit-widget.cpp:1075
+#: ../src/ui/view/edit-widget.cpp:1081
 #: ../src/widgets/desktop-widget.cpp:507
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y:"
 msgstr "Y :"
 
 #: ../src/dialogs/object-attributes.cpp:53
 #: ../src/dialogs/object-attributes.cpp:61
-#: ../src/widgets/toolbox.cpp:4124
-#: ../src/widgets/toolbox.cpp:4715
-#: ../src/widgets/toolbox.cpp:5734
+#: ../src/widgets/toolbox.cpp:4151
+#: ../src/widgets/toolbox.cpp:4475
+#: ../src/widgets/toolbox.cpp:4934
+#: ../src/widgets/toolbox.cpp:5953
 msgid "Width:"
 msgstr "Épaisseur :"
 
@@ -3802,12 +3802,12 @@ msgid "Justify lines"
 msgstr "Justifier les lignes"
 
 #: ../src/dialogs/text-edit.cpp:300
-#: ../src/widgets/toolbox.cpp:6804
+#: ../src/widgets/toolbox.cpp:7031
 msgid "Horizontal text"
 msgstr "Texte horizontal"
 
 #: ../src/dialogs/text-edit.cpp:314
-#: ../src/widgets/toolbox.cpp:6816
+#: ../src/widgets/toolbox.cpp:7043
 msgid "Vertical text"
 msgstr "Texte vertical"
 
@@ -3818,8 +3818,8 @@ msgstr "Espacement entre les lignes :"
 #. Text
 #: ../src/dialogs/text-edit.cpp:375
 #: ../src/selection-describer.cpp:69
-#: ../src/ui/dialog/inkscape-preferences.cpp:522
-#: ../src/verbs.cpp:2522
+#: ../src/ui/dialog/inkscape-preferences.cpp:528
+#: ../src/verbs.cpp:2534
 #: ../share/extensions/lorem_ipsum.inx.h:5
 #: ../share/extensions/render_alphabetsoup.inx.h:5
 #: ../share/extensions/text_braille.inx.h:2
@@ -3968,8 +3968,8 @@ msgstr "_Origine X :"
 
 #: ../src/display/canvas-axonomgrid.cpp:398
 #: ../src/display/canvas-grid.cpp:672
-#: ../src/ui/dialog/inkscape-preferences.cpp:978
-#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:994
+#: ../src/ui/dialog/inkscape-preferences.cpp:1015
 msgid "X coordinate of grid origin"
 msgstr "Coordonnée X de l'origine de la grille"
 
@@ -3980,8 +3980,8 @@ msgstr "O_rigine Y :"
 
 #: ../src/display/canvas-axonomgrid.cpp:400
 #: ../src/display/canvas-grid.cpp:674
-#: ../src/ui/dialog/inkscape-preferences.cpp:979
-#: ../src/ui/dialog/inkscape-preferences.cpp:1000
+#: ../src/ui/dialog/inkscape-preferences.cpp:995
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
 msgid "Y coordinate of grid origin"
 msgstr "Coordonnée Y de l'origine de la grille"
 
@@ -3991,29 +3991,29 @@ msgid "Spacing _Y:"
 msgstr "Espacement _Y :"
 
 #: ../src/display/canvas-axonomgrid.cpp:402
-#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:1018
 msgid "Base length of z-axis"
 msgstr "Longueur de base de l'axe z"
 
 #: ../src/display/canvas-axonomgrid.cpp:404
-#: ../src/ui/dialog/inkscape-preferences.cpp:1005
-#: ../src/widgets/toolbox.cpp:3422
+#: ../src/ui/dialog/inkscape-preferences.cpp:1021
+#: ../src/widgets/toolbox.cpp:3449
 msgid "Angle X:"
 msgstr "Angle X :"
 
 #: ../src/display/canvas-axonomgrid.cpp:404
-#: ../src/ui/dialog/inkscape-preferences.cpp:1005
+#: ../src/ui/dialog/inkscape-preferences.cpp:1021
 msgid "Angle of x-axis"
 msgstr "Angle de l'axe x"
 
 #: ../src/display/canvas-axonomgrid.cpp:406
-#: ../src/ui/dialog/inkscape-preferences.cpp:1006
-#: ../src/widgets/toolbox.cpp:3501
+#: ../src/ui/dialog/inkscape-preferences.cpp:1022
+#: ../src/widgets/toolbox.cpp:3528
 msgid "Angle Z:"
 msgstr "Angle Z :"
 
 #: ../src/display/canvas-axonomgrid.cpp:406
-#: ../src/ui/dialog/inkscape-preferences.cpp:1006
+#: ../src/ui/dialog/inkscape-preferences.cpp:1022
 msgid "Angle of z-axis"
 msgstr "Angle de l'axe z"
 
@@ -4098,12 +4098,12 @@ msgid "Spacing _X:"
 msgstr "Espacement _X :"
 
 #: ../src/display/canvas-grid.cpp:676
-#: ../src/ui/dialog/inkscape-preferences.cpp:982
+#: ../src/ui/dialog/inkscape-preferences.cpp:998
 msgid "Distance between vertical grid lines"
 msgstr "Distance entre les lignes verticales de la grille"
 
 #: ../src/display/canvas-grid.cpp:678
-#: ../src/ui/dialog/inkscape-preferences.cpp:983
+#: ../src/ui/dialog/inkscape-preferences.cpp:999
 msgid "Distance between horizontal grid lines"
 msgstr "Distance entre les lignes horizontales de la grille"
 
@@ -4284,7 +4284,7 @@ msgid "Quadrant point"
 msgstr "Point de quadrant"
 
 #: ../src/display/snap-indicator.cpp:196
-#: ../src/widgets/toolbox.cpp:6734
+#: ../src/widgets/toolbox.cpp:6961
 msgid "Center"
 msgstr "Centre"
 
@@ -4300,17 +4300,17 @@ msgstr "Ligne de base de texte"
 msgid " to "
 msgstr " à "
 
-#: ../src/document.cpp:445
+#: ../src/document.cpp:457
 #, c-format
 msgid "New document %d"
 msgstr "Nouveau document %d"
 
-#: ../src/document.cpp:477
+#: ../src/document.cpp:489
 #, c-format
 msgid "Memory document %d"
 msgstr "Document d'information %d"
 
-#: ../src/document.cpp:632
+#: ../src/document.cpp:644
 #, c-format
 msgid "Unnamed document %d"
 msgstr "Document sans nom %d"
@@ -4329,43 +4329,43 @@ msgstr "Fermeture de chemin."
 msgid "Draw path"
 msgstr "Dessiner un chemin"
 
-#: ../src/draw-context.cpp:866
+#: ../src/draw-context.cpp:867
 msgid "Creating single dot"
 msgstr "Création d'un point isolé"
 
-#: ../src/draw-context.cpp:867
+#: ../src/draw-context.cpp:868
 msgid "Create single dot"
 msgstr "Créer un point isolé"
 
 #. alpha of color under cursor, to show in the statusbar
 #. locale-sensitive printf is OK, since this goes to the UI, not into SVG
-#: ../src/dropper-context.cpp:302
+#: ../src/dropper-context.cpp:310
 #, c-format
 msgid " alpha %.3g"
 msgstr " alpha %.3g"
 
 #. where the color is picked, to show in the statusbar
-#: ../src/dropper-context.cpp:304
+#: ../src/dropper-context.cpp:312
 #, c-format
 msgid ", averaged with radius %d"
 msgstr ", valeur moyenne dans un rayon de %d"
 
-#: ../src/dropper-context.cpp:304
+#: ../src/dropper-context.cpp:312
 #, c-format
 msgid " under cursor"
 msgstr " sous le curseur"
 
 #. message, to show in the statusbar
-#: ../src/dropper-context.cpp:306
+#: ../src/dropper-context.cpp:314
 msgid "<b>Release mouse</b> to set color."
 msgstr "<b>Relâcher la souris</b> pour appliquer la couleur."
 
-#: ../src/dropper-context.cpp:306
-#: ../src/tools-switch.cpp:208
+#: ../src/dropper-context.cpp:314
+#: ../src/tools-switch.cpp:216
 msgid "<b>Click</b> to set fill, <b>Shift+click</b> to set stroke; <b>drag</b> to average color in area; with <b>Alt</b> to pick inverse color; <b>Ctrl+C</b> to copy the color under mouse to clipboard"
 msgstr "<b>Cliquer</b> pour appliquer au remplissage, <b>Maj+clic</b> pour appliquer au contour; <b>cliquer-déplacer</b> pour capturer la couleur moyenne sur une zone; à combiner avec <b>Alt</b> pour capturer la couleur inverse; <b>Ctrl+C</b> pour copier la couleur sous le curseur de la souris vers le presse-papiers "
 
-#: ../src/dropper-context.cpp:344
+#: ../src/dropper-context.cpp:352
 msgid "Set picked color"
 msgstr "Appliquer la couleur capturée"
 
@@ -4412,13 +4412,13 @@ msgstr "[Inchangé]"
 #. Edit
 #: ../src/event-log.cpp:264
 #: ../src/event-log.cpp:267
-#: ../src/verbs.cpp:2276
+#: ../src/verbs.cpp:2286
 msgid "_Undo"
 msgstr "Ann_uler"
 
 #: ../src/event-log.cpp:274
 #: ../src/event-log.cpp:278
-#: ../src/verbs.cpp:2278
+#: ../src/verbs.cpp:2288
 msgid "_Redo"
 msgstr "Réta_blir"
 
@@ -4560,8 +4560,9 @@ msgstr "Seuil adaptatif"
 #: ../src/libgdl/gdl-dock-placeholder.c:169
 #: ../src/live_effects/lpe-bendpath.cpp:56
 #: ../src/live_effects/lpe-patternalongpath.cpp:64
-#: ../src/widgets/toolbox.cpp:3095
-#: ../src/widgets/toolbox.cpp:4124
+#: ../src/widgets/toolbox.cpp:3122
+#: ../src/widgets/toolbox.cpp:4151
+#: ../src/widgets/toolbox.cpp:4475
 #: ../share/extensions/foldablebox.inx.h:9
 #: ../share/extensions/interp_att_g.inx.h:26
 msgid "Width"
@@ -4572,7 +4573,7 @@ msgstr "Largeur"
 #: ../src/extension/internal/bitmap/sample.cpp:41
 #: ../src/libgdl/gdl-dock.c:198
 #: ../src/libgdl/gdl-dock-placeholder.c:177
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 #: ../share/extensions/foldablebox.inx.h:4
 #: ../share/extensions/interp_att_g.inx.h:6
 msgid "Height"
@@ -4580,7 +4581,7 @@ msgstr "Hauteur"
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:42
 #: ../src/filter-enums.cpp:32
-#: ../src/live_effects/effect.cpp:96
+#: ../src/live_effects/effect.cpp:99
 #: ../src/live_effects/lpe-ruler.cpp:50
 msgid "Offset"
 msgstr "Offset"
@@ -4896,21 +4897,21 @@ msgstr "Ajuster TSV"
 #: ../src/flood-context.cpp:250
 #: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:237
-#: ../src/widgets/sp-color-scales.cpp:426
-#: ../src/widgets/sp-color-scales.cpp:427
-#: ../src/widgets/toolbox.cpp:4281
+#: ../src/widgets/sp-color-scales.cpp:438
+#: ../src/widgets/sp-color-scales.cpp:439
+#: ../src/widgets/toolbox.cpp:4308
 #: ../share/extensions/color_randomize.inx.h:2
 msgid "Hue"
 msgstr "Teinte"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:42
 #: ../src/flood-context.cpp:251
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:846
 #: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:237
-#: ../src/widgets/sp-color-scales.cpp:429
-#: ../src/widgets/sp-color-scales.cpp:430
-#: ../src/widgets/toolbox.cpp:4296
+#: ../src/widgets/sp-color-scales.cpp:441
+#: ../src/widgets/sp-color-scales.cpp:442
+#: ../src/widgets/toolbox.cpp:4323
 #: ../share/extensions/color_randomize.inx.h:5
 msgid "Saturation"
 msgstr "Saturation"
@@ -5251,7 +5252,7 @@ msgstr "Décalage vertical (px)"
 #: ../src/extension/internal/filter/filter.cpp:214
 #: ../src/extension/internal/filter/filter-file.cpp:148
 #: ../src/extension/internal/filter/snow.h:38
-#: ../src/ui/dialog/inkscape-preferences.cpp:733
+#: ../src/ui/dialog/inkscape-preferences.cpp:749
 msgid "Filters"
 msgstr "Filtres"
 
@@ -5518,15 +5519,15 @@ msgstr "Adobe Illustrator 9.0 et supérieur (*.ai)"
 msgid "Open files saved in Adobe Illustrator 9.0 and newer versions"
 msgstr "Ouvrir des fichiers créés avec Adobe Illustrator version 9.0 et les versions plus récentes"
 
-#: ../src/extension/internal/pov-out.cpp:688
+#: ../src/extension/internal/pov-out.cpp:700
 msgid "PovRay Output"
 msgstr "Sortie PovRay"
 
-#: ../src/extension/internal/pov-out.cpp:693
+#: ../src/extension/internal/pov-out.cpp:705
 msgid "PovRay (*.pov) (paths and shapes only)"
 msgstr "PovRay (*.pov) (chemins et formes seulement)"
 
-#: ../src/extension/internal/pov-out.cpp:694
+#: ../src/extension/internal/pov-out.cpp:706
 msgid "PovRay Raytracer File"
 msgstr "Fichier PovRay"
 
@@ -5633,7 +5634,7 @@ msgid "default.svg"
 msgstr "default.fr.svg"
 
 #: ../src/file.cpp:265
-#: ../src/file.cpp:1067
+#: ../src/file.cpp:1071
 #, c-format
 msgid "Failed to load the requested file %s"
 msgstr "Échec du chargement du fichier %s"
@@ -5703,7 +5704,7 @@ msgstr "Document enregistré."
 
 #. We are saving for the first time; create a unique default filename
 #: ../src/file.cpp:770
-#: ../src/file.cpp:1204
+#: ../src/file.cpp:1208
 #, c-format
 msgid "drawing%s"
 msgstr "dessin%s"
@@ -5726,28 +5727,28 @@ msgstr "Sélectionner le fichier dans lequel enregistrer une copie"
 msgid "Select file to save to"
 msgstr "Sélectionner le fichier dans lequel enregistrer"
 
-#: ../src/file.cpp:888
+#: ../src/file.cpp:892
 msgid "No changes need to be saved."
 msgstr "Aucun changement à enregistrer."
 
-#: ../src/file.cpp:905
+#: ../src/file.cpp:909
 msgid "Saving document..."
 msgstr "Enregistrement du document..."
 
-#: ../src/file.cpp:1064
+#: ../src/file.cpp:1068
 msgid "Import"
 msgstr "Importer"
 
-#: ../src/file.cpp:1114
+#: ../src/file.cpp:1118
 msgid "Select file to import"
 msgstr "Sélectionner un fichier à importer"
 
-#: ../src/file.cpp:1226
+#: ../src/file.cpp:1230
 msgid "Select file to export to"
 msgstr "Sélectionner un fichier vers lequel exporter"
 
-#: ../src/file.cpp:1469
-#: ../src/verbs.cpp:2265
+#: ../src/file.cpp:1473
+#: ../src/verbs.cpp:2275
 msgid "Import From Open Clip Art Library"
 msgstr "Importer depuis la bibliothèque Open Clip Art"
 
@@ -5869,7 +5870,7 @@ msgstr "Luminance vers opacité"
 
 #. File
 #: ../src/filter-enums.cpp:72
-#: ../src/verbs.cpp:2242
+#: ../src/verbs.cpp:2252
 msgid "Default"
 msgstr "Défaut"
 
@@ -5934,38 +5935,39 @@ msgstr "Retour à la ligne"
 #: ../src/ui/dialog/filter-effects-dialog.cpp:468
 #: ../src/ui/dialog/inkscape-preferences.cpp:259
 #: ../src/ui/dialog/inkscape-preferences.cpp:422
-#: ../src/ui/dialog/inkscape-preferences.cpp:554
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
-#: ../src/ui/dialog/inkscape-preferences.cpp:1216
-#: ../src/verbs.cpp:2239
+#: ../src/ui/dialog/inkscape-preferences.cpp:565
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
+#: ../src/ui/dialog/inkscape-preferences.cpp:1232
+#: ../src/verbs.cpp:2249
 #: ../src/widgets/stroke-style.cpp:765
-#: ../src/widgets/toolbox.cpp:3887
+#: ../src/widgets/toolbox.cpp:3914
 #: ../share/extensions/grid_polar.inx.h:16
 #: ../share/extensions/guides_creator.inx.h:15
+#: ../share/extensions/scour.inx.h:7
 msgid "None"
 msgstr "Aucun"
 
 #: ../src/filter-enums.cpp:102
 #: ../src/flood-context.cpp:247
 #: ../src/widgets/sp-color-icc-selector.cpp:234
-#: ../src/widgets/sp-color-scales.cpp:400
-#: ../src/widgets/sp-color-scales.cpp:401
+#: ../src/widgets/sp-color-scales.cpp:412
+#: ../src/widgets/sp-color-scales.cpp:413
 msgid "Red"
 msgstr "Rouge"
 
 #: ../src/filter-enums.cpp:103
 #: ../src/flood-context.cpp:248
 #: ../src/widgets/sp-color-icc-selector.cpp:234
-#: ../src/widgets/sp-color-scales.cpp:403
-#: ../src/widgets/sp-color-scales.cpp:404
+#: ../src/widgets/sp-color-scales.cpp:415
+#: ../src/widgets/sp-color-scales.cpp:416
 msgid "Green"
 msgstr "Vert"
 
 #: ../src/filter-enums.cpp:104
 #: ../src/flood-context.cpp:249
 #: ../src/widgets/sp-color-icc-selector.cpp:234
-#: ../src/widgets/sp-color-scales.cpp:406
-#: ../src/widgets/sp-color-scales.cpp:407
+#: ../src/widgets/sp-color-scales.cpp:418
+#: ../src/widgets/sp-color-scales.cpp:419
 msgid "Blue"
 msgstr "Bleu"
 
@@ -6004,15 +6006,15 @@ msgstr "Couleurs visibles"
 
 #: ../src/flood-context.cpp:252
 #: ../src/widgets/sp-color-icc-selector.cpp:237
-#: ../src/widgets/sp-color-scales.cpp:432
-#: ../src/widgets/sp-color-scales.cpp:433
-#: ../src/widgets/toolbox.cpp:4311
+#: ../src/widgets/sp-color-scales.cpp:444
+#: ../src/widgets/sp-color-scales.cpp:445
+#: ../src/widgets/toolbox.cpp:4338
 #: ../share/extensions/color_randomize.inx.h:3
 msgid "Lightness"
 msgstr "Luminosité"
 
 #: ../src/flood-context.cpp:265
-#: ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/ui/dialog/inkscape-preferences.cpp:1088
 msgid "Small"
 msgstr "Petit"
 
@@ -6021,7 +6023,7 @@ msgid "Medium"
 msgstr "Moyen"
 
 #: ../src/flood-context.cpp:267
-#: ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/ui/dialog/inkscape-preferences.cpp:1088
 msgid "Large"
 msgstr "Grand"
 
@@ -6259,10 +6261,10 @@ msgstr "Unité"
 #. Add the units menu.
 #: ../src/helper/units.cpp:37
 #: ../src/widgets/select-toolbar.cpp:504
-#: ../src/widgets/toolbox.cpp:1504
-#: ../src/widgets/toolbox.cpp:3156
-#: ../src/widgets/toolbox.cpp:5660
-#: ../src/widgets/toolbox.cpp:7203
+#: ../src/widgets/toolbox.cpp:1530
+#: ../src/widgets/toolbox.cpp:3183
+#: ../src/widgets/toolbox.cpp:5879
+#: ../src/widgets/toolbox.cpp:7635
 msgid "Units"
 msgstr "Unités"
 
@@ -6514,45 +6516,45 @@ msgstr "Afficher ou non la barre d'état (en bas de la fenêtre)"
 msgid "Verb \"%s\" Unknown"
 msgstr "Verbe « %s » inconnu"
 
-#: ../src/interface.cpp:995
+#: ../src/interface.cpp:998
 msgid "Open _Recent"
 msgstr "Documents _récents"
 
 #. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1096
+#: ../src/interface.cpp:1099
 #, c-format
 msgid "Enter group #%s"
 msgstr "Entrer dans le groupe #%s"
 
-#: ../src/interface.cpp:1107
+#: ../src/interface.cpp:1110
 msgid "Go to parent"
 msgstr "Sélectionner le parent"
 
-#: ../src/interface.cpp:1198
-#: ../src/interface.cpp:1284
-#: ../src/interface.cpp:1387
+#: ../src/interface.cpp:1201
+#: ../src/interface.cpp:1287
+#: ../src/interface.cpp:1390
 #: ../src/ui/widget/selected-style.cpp:468
 msgid "Drop color"
 msgstr "Déposer la couleur"
 
-#: ../src/interface.cpp:1237
-#: ../src/interface.cpp:1347
+#: ../src/interface.cpp:1240
+#: ../src/interface.cpp:1350
 msgid "Drop color on gradient"
 msgstr "Déposer la couleur dans le dégradé"
 
-#: ../src/interface.cpp:1400
+#: ../src/interface.cpp:1403
 msgid "Could not parse SVG data"
 msgstr "Impossible de parcourir les données SVG"
 
-#: ../src/interface.cpp:1439
+#: ../src/interface.cpp:1442
 msgid "Drop SVG"
 msgstr "Déposer un SVG"
 
-#: ../src/interface.cpp:1495
+#: ../src/interface.cpp:1498
 msgid "Drop bitmap image"
 msgstr "Déposer une image bitmap"
 
-#: ../src/interface.cpp:1587
+#: ../src/interface.cpp:1590
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do you want to replace it?</span>\n"
@@ -6564,7 +6566,7 @@ msgstr ""
 "\n"
 "Le fichier existe déjà dans « %s ». Le remplacer écrase son contenu."
 
-#: ../src/interface.cpp:1594
+#: ../src/interface.cpp:1597
 #: ../share/extensions/web-set-att.inx.h:5
 #: ../share/extensions/web-transmit-att.inx.h:5
 msgid "Replace"
@@ -6625,24 +6627,24 @@ msgstr "Échec de l'exécution du programme auxiliaire (%s)"
 msgid "Node or handle drag canceled."
 msgstr "Déplacement de nœud ou de poignée annulé."
 
-#: ../src/knotholder.cpp:134
+#: ../src/knotholder.cpp:135
 msgid "Change handle"
 msgstr "Modifier la poignée de nœud"
 
-#: ../src/knotholder.cpp:213
+#: ../src/knotholder.cpp:214
 msgid "Move handle"
 msgstr "Déplacer la poignée de nœud"
 
 #. TRANSLATORS: This refers to the pattern that's inside the object
-#: ../src/knotholder.cpp:234
+#: ../src/knotholder.cpp:235
 msgid "<b>Move</b> the pattern fill inside the object"
 msgstr "<b>Déplacer</b> le motif de remplissage à l'intérieur de l'objet"
 
-#: ../src/knotholder.cpp:237
+#: ../src/knotholder.cpp:238
 msgid "<b>Scale</b> the pattern fill; uniformly if with <b>Ctrl</b>"
 msgstr "<b>Redimensionner</b> le motif de remplissage ; uniformiser en maintenant la touche <b>Ctrl</b>"
 
-#: ../src/knotholder.cpp:240
+#: ../src/knotholder.cpp:241
 msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
 msgstr "<b>Tourner</b> le motif de remplissage; <b>Ctrl</b> pour tourner par incréments"
 
@@ -6663,8 +6665,8 @@ msgid "Dockbar style to show items on it"
 msgstr "Style de barre d'attache pour l'affichage de ses éléments"
 
 #: ../src/libgdl/gdl-dock.c:175
-#: ../src/ui/dialog/inkscape-preferences.cpp:549
-#: ../src/ui/dialog/inkscape-preferences.cpp:570
+#: ../src/ui/dialog/inkscape-preferences.cpp:560
+#: ../src/ui/dialog/inkscape-preferences.cpp:581
 msgid "Floating"
 msgstr "Flottant"
 
@@ -6860,7 +6862,7 @@ msgstr "Le nouveau contrôleur d'attache %p est automatique. Seuls les ojbets d'
 #: ../src/ui/dialog/align-and-distribute.cpp:919
 #: ../src/ui/dialog/document-properties.cpp:118
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1410
-#: ../src/widgets/desktop-widget.cpp:1573
+#: ../src/widgets/desktop-widget.cpp:1572
 msgid "Page"
 msgstr "Page"
 
@@ -6869,7 +6871,7 @@ msgid "The index of the current page"
 msgstr "L'index de la page courante"
 
 #: ../src/libgdl/gdl-dock-object.c:120
-#: ../src/ui/widget/page-sizer.cpp:217
+#: ../src/ui/widget/page-sizer.cpp:237
 msgid "Name"
 msgstr "Nom"
 
@@ -7015,153 +7017,158 @@ msgstr "Élément d'attache qui « possède » ce tablabel"
 msgid "Ignoring font without family that will crash Pango"
 msgstr "Ignorer les polices sans famille qui font planter Pango"
 
-#: ../src/live_effects/effect.cpp:86
+#: ../src/live_effects/effect.cpp:88
 msgid "doEffect stack test"
 msgstr "Test de la pile doEffect"
 
-#: ../src/live_effects/effect.cpp:87
+#: ../src/live_effects/effect.cpp:89
 msgid "Angle bisector"
 msgstr "Bissectrice"
 
 #. TRANSLATORS: boolean operations
-#: ../src/live_effects/effect.cpp:89
+#: ../src/live_effects/effect.cpp:91
 msgid "Boolops"
 msgstr "Opérations booléennes"
 
-#: ../src/live_effects/effect.cpp:90
+#: ../src/live_effects/effect.cpp:92
 msgid "Circle (by center and radius)"
 msgstr "Cercle (centre et rayon)"
 
-#: ../src/live_effects/effect.cpp:91
+#: ../src/live_effects/effect.cpp:93
 msgid "Circle by 3 points"
 msgstr "Cercle par trois points"
 
-#: ../src/live_effects/effect.cpp:92
+#: ../src/live_effects/effect.cpp:94
 msgid "Dynamic stroke"
 msgstr "Contour dynamique"
 
-#: ../src/live_effects/effect.cpp:93
+#: ../src/live_effects/effect.cpp:95
+#: ../share/extensions/extrude.inx.h:1
+msgid "Extrude"
+msgstr "Extrusion"
+
+#: ../src/live_effects/effect.cpp:96
 msgid "Lattice Deformation"
 msgstr "Déformation par grille"
 
-#: ../src/live_effects/effect.cpp:94
+#: ../src/live_effects/effect.cpp:97
 msgid "Line Segment"
 msgstr "Segment de ligne"
 
-#: ../src/live_effects/effect.cpp:95
+#: ../src/live_effects/effect.cpp:98
 msgid "Mirror symmetry"
 msgstr "Reflet miroir"
 
-#: ../src/live_effects/effect.cpp:97
+#: ../src/live_effects/effect.cpp:100
 msgid "Parallel"
 msgstr "Parallèle"
 
-#: ../src/live_effects/effect.cpp:98
+#: ../src/live_effects/effect.cpp:101
 msgid "Path length"
 msgstr "Longueur du chemin"
 
-#: ../src/live_effects/effect.cpp:99
+#: ../src/live_effects/effect.cpp:102
 msgid "Perpendicular bisector"
 msgstr "Médiatrice"
 
-#: ../src/live_effects/effect.cpp:100
+#: ../src/live_effects/effect.cpp:103
 msgid "Perspective path"
 msgstr "Perspective"
 
-#: ../src/live_effects/effect.cpp:101
+#: ../src/live_effects/effect.cpp:104
 msgid "Rotate copies"
 msgstr "Tourner les copies"
 
-#: ../src/live_effects/effect.cpp:102
+#: ../src/live_effects/effect.cpp:105
 msgid "Recursive skeleton"
 msgstr "Structure récursive"
 
-#: ../src/live_effects/effect.cpp:103
+#: ../src/live_effects/effect.cpp:106
 msgid "Tangent to curve"
 msgstr "Tangente à la courbe"
 
-#: ../src/live_effects/effect.cpp:104
+#: ../src/live_effects/effect.cpp:107
 msgid "Text label"
 msgstr "Étiquette de texte"
 
 #. 0.46
-#: ../src/live_effects/effect.cpp:107
+#: ../src/live_effects/effect.cpp:110
 msgid "Bend"
 msgstr "Courber"
 
-#: ../src/live_effects/effect.cpp:108
+#: ../src/live_effects/effect.cpp:111
 msgid "Gears"
 msgstr "Engrenages"
 
-#: ../src/live_effects/effect.cpp:109
+#: ../src/live_effects/effect.cpp:112
 msgid "Pattern Along Path"
 msgstr "Motif suivant un chemin"
 
 #. for historic reasons, this effect is called skeletal(strokes) in Inkscape:SVG
-#: ../src/live_effects/effect.cpp:110
+#: ../src/live_effects/effect.cpp:113
 msgid "Stitch Sub-Paths"
 msgstr "Relier les sous-chemins"
 
 #. 0.47
-#: ../src/live_effects/effect.cpp:112
+#: ../src/live_effects/effect.cpp:115
 msgid "VonKoch"
 msgstr "Von Koch"
 
-#: ../src/live_effects/effect.cpp:113
+#: ../src/live_effects/effect.cpp:116
 msgid "Knot"
 msgstr "Nœud"
 
-#: ../src/live_effects/effect.cpp:114
+#: ../src/live_effects/effect.cpp:117
 msgid "Construct grid"
 msgstr "Grille de conception"
 
-#: ../src/live_effects/effect.cpp:115
+#: ../src/live_effects/effect.cpp:118
 msgid "Spiro spline"
 msgstr "Spline spirographique"
 
-#: ../src/live_effects/effect.cpp:116
+#: ../src/live_effects/effect.cpp:119
 msgid "Envelope Deformation"
 msgstr "Déformation par enveloppe"
 
-#: ../src/live_effects/effect.cpp:117
+#: ../src/live_effects/effect.cpp:120
 msgid "Interpolate Sub-Paths"
 msgstr "Interpoler les sous-chemins"
 
-#: ../src/live_effects/effect.cpp:118
+#: ../src/live_effects/effect.cpp:121
 msgid "Hatches (rough)"
 msgstr "Hachures"
 
-#: ../src/live_effects/effect.cpp:119
+#: ../src/live_effects/effect.cpp:122
 msgid "Sketch"
 msgstr "Croquis"
 
-#: ../src/live_effects/effect.cpp:120
+#: ../src/live_effects/effect.cpp:123
 msgid "Ruler"
 msgstr "Règle"
 
-#: ../src/live_effects/effect.cpp:273
+#: ../src/live_effects/effect.cpp:279
 msgid "Is visible?"
 msgstr "Visible ?"
 
-#: ../src/live_effects/effect.cpp:273
+#: ../src/live_effects/effect.cpp:279
 msgid "If unchecked, the effect remains applied to the object but is temporarily disabled on canvas"
 msgstr "Si décochée, l'effet est appliqué à l'objet mais est temporairement désactivé sur la zone de travail"
 
-#: ../src/live_effects/effect.cpp:294
+#: ../src/live_effects/effect.cpp:300
 msgid "No effect"
 msgstr "Pas d'effet"
 
-#: ../src/live_effects/effect.cpp:341
+#: ../src/live_effects/effect.cpp:347
 #, c-format
 msgid "Please specify a parameter path for the LPE '%s' with %d mouse clicks"
 msgstr "Veuillez spécifier un chemin paramètre pour l'effet de chemin '%s' avec %d clics de souris"
 
-#: ../src/live_effects/effect.cpp:639
+#: ../src/live_effects/effect.cpp:645
 #, c-format
 msgid "Editing parameter <b>%s</b>."
 msgstr "Édition du paramètre <b>%s</b>."
 
-#: ../src/live_effects/effect.cpp:644
+#: ../src/live_effects/effect.cpp:650
 msgid "None of the applied path effect's parameters can be edited on-canvas."
 msgstr "Aucun des paramètres d'effet de chemin ne peuvent être modifiés sur la zone de travail."
 
@@ -7364,62 +7371,62 @@ msgid "If true, the spacing between intermediates is constant along the length o
 msgstr "Si vrai, l'espacement entre les intermédiaires est constant tout au long de la longueur du chemin. Si faux, la distance dépend du positionnement des nœuds de la trajectoire."
 
 #. initialise your parameters here:
-#: ../src/live_effects/lpe-knot.cpp:328
+#: ../src/live_effects/lpe-knot.cpp:329
 msgid "Fixed width"
 msgstr "Largeur de l'entrecroisement"
 
-#: ../src/live_effects/lpe-knot.cpp:328
+#: ../src/live_effects/lpe-knot.cpp:329
 msgid "Size of hidden region of lower string"
 msgstr "Taille de la partie masquée sur le tracé inférieur"
 
-#: ../src/live_effects/lpe-knot.cpp:329
+#: ../src/live_effects/lpe-knot.cpp:330
 msgid "In units of stroke width"
 msgstr "Proportionnellement à la largeur du trait"
 
-#: ../src/live_effects/lpe-knot.cpp:329
+#: ../src/live_effects/lpe-knot.cpp:330
 msgid "Consider 'Interruption width' as a ratio of stroke width"
 msgstr "La largeur de l'interruption est exprimée en proportion de l'épaisseur du trait"
 
-#: ../src/live_effects/lpe-knot.cpp:330
+#: ../src/live_effects/lpe-knot.cpp:331
 #: ../src/widgets/stroke-style.cpp:1093
 #: ../share/extensions/edge3d.inx.h:9
 msgid "Stroke width"
 msgstr "Épaisseur du contour"
 
-#: ../src/live_effects/lpe-knot.cpp:330
+#: ../src/live_effects/lpe-knot.cpp:331
 msgid "Add the stroke width to the interruption size"
 msgstr "Ajoute l'épaisseur du trait à la taille de l'interruption"
 
-#: ../src/live_effects/lpe-knot.cpp:331
+#: ../src/live_effects/lpe-knot.cpp:332
 msgid "Crossing path stroke width"
 msgstr "Épaisseur du trait croisant"
 
-#: ../src/live_effects/lpe-knot.cpp:331
+#: ../src/live_effects/lpe-knot.cpp:332
 msgid "Add crossed stroke width to the interruption size"
 msgstr "Ajoute l'épaisseur du trait croisé à la taille de l'interruption"
 
-#: ../src/live_effects/lpe-knot.cpp:332
+#: ../src/live_effects/lpe-knot.cpp:333
 msgid "Switcher size"
 msgstr "Taille du sélecteur"
 
-#: ../src/live_effects/lpe-knot.cpp:332
+#: ../src/live_effects/lpe-knot.cpp:333
 msgid "Orientation indicator/switcher size"
 msgstr "Le sélecteur précise l'orientation des croisements et permet de la changer (clic). Changer la sélection par cliquer-déplacer"
 
-#: ../src/live_effects/lpe-knot.cpp:333
+#: ../src/live_effects/lpe-knot.cpp:334
 msgid "Crossing Signs"
 msgstr "Signes de croisement"
 
-#: ../src/live_effects/lpe-knot.cpp:333
+#: ../src/live_effects/lpe-knot.cpp:334
 msgid "Crossings signs"
 msgstr "Signes de croisement"
 
-#: ../src/live_effects/lpe-knot.cpp:344
+#: ../src/live_effects/lpe-knot.cpp:345
 msgid "Drag to select a crossing, click to flip it"
 msgstr "Glisser pour sélectionner un croisement, cliquer pour le basculer"
 
 #. / @todo Is this the right verb?
-#: ../src/live_effects/lpe-knot.cpp:637
+#: ../src/live_effects/lpe-knot.cpp:638
 msgid "Change knot crossing"
 msgstr "Modifier le croisement du nœud"
 
@@ -7689,12 +7696,12 @@ msgid "Both"
 msgstr "Les deux"
 
 #: ../src/live_effects/lpe-ruler.cpp:35
-#: ../src/widgets/toolbox.cpp:5168
+#: ../src/widgets/toolbox.cpp:5387
 msgid "Start"
 msgstr "Début"
 
 #: ../src/live_effects/lpe-ruler.cpp:36
-#: ../src/widgets/toolbox.cpp:5181
+#: ../src/widgets/toolbox.cpp:5400
 msgid "End"
 msgstr "Fin"
 
@@ -7981,7 +7988,7 @@ msgstr "Coller le paramètre du chemin"
 msgid "Link path parameter to path"
 msgstr "Lier les paramètres de chemin au chemin"
 
-#: ../src/live_effects/parameter/point.cpp:90
+#: ../src/live_effects/parameter/point.cpp:91
 msgid "Change point parameter"
 msgstr "Modifier le paramètre de point"
 
@@ -8237,13 +8244,13 @@ msgstr "_Nouveau"
 #. TODO look at some dynamic option for changing the menu tree:
 #. "       <verb verb-id=\"DialogInput2\" />\n"
 #: ../src/menus-skeleton.h:49
-#: ../src/verbs.cpp:2488
-#: ../src/verbs.cpp:2494
+#: ../src/verbs.cpp:2498
+#: ../src/verbs.cpp:2504
 msgid "_Edit"
 msgstr "_Édition"
 
 #: ../src/menus-skeleton.h:59
-#: ../src/verbs.cpp:2288
+#: ../src/verbs.cpp:2298
 msgid "Paste Si_ze"
 msgstr "Coller les d_imensions"
 
@@ -8267,6 +8274,7 @@ msgstr "Mode d'_affichage"
 msgid "Show/Hide"
 msgstr "Afficher/cacher"
 
+#. "       <verb verb-id=\"DialogScript\" />\n"
 #. Not quite ready to be in the menus.
 #. "       <verb verb-id=\"FocusToggle\" />\n"
 #: ../src/menus-skeleton.h:139
@@ -8417,7 +8425,7 @@ msgid "Cannot find path between nodes."
 msgstr "Impossible de trouver un chemin entre les nœuds."
 
 #: ../src/nodepath.cpp:2804
-#: ../src/widgets/toolbox.cpp:1343
+#: ../src/widgets/toolbox.cpp:1369
 msgid "Delete segment"
 msgstr "Supprimer le segment"
 
@@ -8431,7 +8439,7 @@ msgid "Change node type"
 msgstr "Modifier le type de nœud"
 
 #: ../src/nodepath.cpp:3529
-#: ../src/widgets/toolbox.cpp:1300
+#: ../src/widgets/toolbox.cpp:1326
 msgid "Delete node"
 msgstr "Supprimer le nœud"
 
@@ -8774,7 +8782,7 @@ msgstr "Alterner les points de fuite"
 msgid "Toggle multiple vanishing points"
 msgstr "Alterner entre des points de fuite multiples"
 
-#: ../src/preferences.cpp:101
+#: ../src/preferences.cpp:129
 msgid "Inkscape will run with default settings, and new settings will not be saved. "
 msgstr ""
 "Inkscape va démarrer avec les préférences par défaut.\n"
@@ -8783,7 +8791,7 @@ msgstr ""
 #. the creation failed
 #. _reportError(Glib::ustring::compose(_("Cannot create profile directory %1."),
 #. Glib::filename_to_utf8(_prefs_dir)), not_saved);
-#: ../src/preferences.cpp:116
+#: ../src/preferences.cpp:144
 #, c-format
 msgid "Cannot create profile directory %s."
 msgstr "Impossible de créer le répertoire de profil %s."
@@ -8791,7 +8799,7 @@ msgstr "Impossible de créer le répertoire de profil %s."
 #. The profile dir is not actually a directory
 #. _reportError(Glib::ustring::compose(_("%1 is not a valid directory."),
 #. Glib::filename_to_utf8(_prefs_dir)), not_saved);
-#: ../src/preferences.cpp:134
+#: ../src/preferences.cpp:162
 #, c-format
 msgid "%s is not a valid directory."
 msgstr "%s n'est pas un répertoire valide."
@@ -8799,35 +8807,27 @@ msgstr "%s n'est pas un répertoire valide."
 #. The write failed.
 #. _reportError(Glib::ustring::compose(_("Failed to create the preferences file %1."),
 #. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:145
+#: ../src/preferences.cpp:173
 #, c-format
 msgid "Failed to create the preferences file %s."
 msgstr "Échec lors de la création du fichier du fichier de préférences %s."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 is not a regular file."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:163
+#: ../src/preferences.cpp:209
 #, c-format
 msgid "The preferences file %s is not a regular file."
 msgstr "%s n'est pas un fichier de préférences normal."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 could not be read."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:175
+#: ../src/preferences.cpp:219
 #, c-format
 msgid "The preferences file %s could not be read."
 msgstr "Le fichier de préférences %s n'a pas pu être lu."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 is not a valid XML document."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:188
+#: ../src/preferences.cpp:230
 #, c-format
 msgid "The preferences file %s is not a valid XML document."
 msgstr "Le fichier de préférences %s n'est pas un document XML valide."
 
-#. _reportError(Glib::ustring::compose(_("The file %1 is not a valid Inkscape preferences file."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:199
+#: ../src/preferences.cpp:239
 #, c-format
 msgid "The file %s is not a valid Inkscape preferences file."
 msgstr "%s n'est pas un fichier de préférences valide."
@@ -8996,7 +8996,7 @@ msgid "Extent or scope of this document."
 msgstr "Étendue ou portée de ce document."
 
 #: ../src/rdf.cpp:273
-#: ../src/ui/widget/page-sizer.cpp:219
+#: ../src/ui/widget/page-sizer.cpp:239
 msgid "Description"
 msgstr "Description"
 
@@ -9103,8 +9103,8 @@ msgstr "<b>Rien</b> n'a été supprimé."
 #: ../src/selection-chemistry.cpp:221
 #: ../src/text-context.cpp:995
 #: ../src/ui/dialog/swatches.cpp:471
-#: ../src/widgets/toolbox.cpp:1304
-#: ../src/widgets/toolbox.cpp:5752
+#: ../src/widgets/toolbox.cpp:1330
+#: ../src/widgets/toolbox.cpp:5971
 msgid "Delete"
 msgstr "Supprimer"
 
@@ -9134,7 +9134,7 @@ msgid "<b>No groups</b> to ungroup in the selection."
 msgstr "<b>Aucun groupe</b> à dégrouper dans la sélection."
 
 #: ../src/selection-chemistry.cpp:598
-#: ../src/sp-item-group.cpp:515
+#: ../src/sp-item-group.cpp:516
 msgid "Ungroup"
 msgstr "Dégrouper"
 
@@ -9436,17 +9436,17 @@ msgstr "Sélectionner un ou des <b>objet(s)</b> pour y ajuster la taille de la z
 
 #. Fit Page
 #: ../src/selection-chemistry.cpp:2944
-#: ../src/verbs.cpp:2723
+#: ../src/verbs.cpp:2739
 msgid "Fit Page to Selection"
 msgstr "Ajuster la page à la sélection"
 
 #: ../src/selection-chemistry.cpp:2969
-#: ../src/verbs.cpp:2725
+#: ../src/verbs.cpp:2741
 msgid "Fit Page to Drawing"
 msgstr "Ajuster la page au dessin"
 
 #: ../src/selection-chemistry.cpp:2985
-#: ../src/verbs.cpp:2727
+#: ../src/verbs.cpp:2743
 msgid "Fit Page to Selection or Drawing"
 msgstr "Ajuster la page à la sélection ou au dessin"
 
@@ -9461,12 +9461,12 @@ msgstr "Lien"
 msgid "Circle"
 msgstr "Cercle"
 
-#. ellipse
+#. Ellipse
 #: ../src/selection-describer.cpp:49
 #: ../src/selection-describer.cpp:76
-#: ../src/ui/dialog/inkscape-preferences.cpp:474
-#: ../src/verbs.cpp:2510
-#: ../src/widgets/toolbox.cpp:3890
+#: ../src/ui/dialog/inkscape-preferences.cpp:480
+#: ../src/verbs.cpp:2522
+#: ../src/widgets/toolbox.cpp:3917
 msgid "Ellipse"
 msgstr "Ellipse"
 
@@ -9483,7 +9483,7 @@ msgid "Path"
 msgstr "Chemin"
 
 #: ../src/selection-describer.cpp:61
-#: ../src/widgets/toolbox.cpp:2726
+#: ../src/widgets/toolbox.cpp:2753
 msgid "Polygon"
 msgstr "Polygone"
 
@@ -9493,15 +9493,15 @@ msgstr "Polyligne"
 
 #. Rectangle
 #: ../src/selection-describer.cpp:65
-#: ../src/ui/dialog/inkscape-preferences.cpp:464
-#: ../src/verbs.cpp:2506
+#: ../src/ui/dialog/inkscape-preferences.cpp:470
+#: ../src/verbs.cpp:2518
 msgid "Rectangle"
 msgstr "Rectangle"
 
 #. 3D box
 #: ../src/selection-describer.cpp:67
-#: ../src/ui/dialog/inkscape-preferences.cpp:469
-#: ../src/verbs.cpp:2508
+#: ../src/ui/dialog/inkscape-preferences.cpp:475
+#: ../src/verbs.cpp:2520
 msgid "3D Box"
 msgstr "Boîte 3D"
 
@@ -9516,18 +9516,18 @@ msgstr "Clone"
 msgid "Offset path"
 msgstr "Chemin offset"
 
-#. spiral
+#. Spiral
 #: ../src/selection-describer.cpp:80
-#: ../src/ui/dialog/inkscape-preferences.cpp:482
-#: ../src/verbs.cpp:2514
+#: ../src/ui/dialog/inkscape-preferences.cpp:488
+#: ../src/verbs.cpp:2526
 msgid "Spiral"
 msgstr "Spirale"
 
-#. star
+#. Star
 #: ../src/selection-describer.cpp:82
-#: ../src/ui/dialog/inkscape-preferences.cpp:478
-#: ../src/verbs.cpp:2512
-#: ../src/widgets/toolbox.cpp:2733
+#: ../src/ui/dialog/inkscape-preferences.cpp:484
+#: ../src/verbs.cpp:2524
+#: ../src/widgets/toolbox.cpp:2760
 msgid "Star"
 msgstr "Étoile"
 
@@ -9597,6 +9597,7 @@ msgstr "Utilisez <b>Maj+D</b> pour sélectionner le cadre"
 
 #. this is only used with 2 or more objects
 #: ../src/selection-describer.cpp:211
+#: ../src/spray-context.cpp:288
 #: ../src/tweak-context.cpp:202
 #, c-format
 msgid "<b>%i</b> object selected"
@@ -9704,7 +9705,7 @@ msgstr "Déplacer le <b>centre</b> en %s, %s"
 msgid "<b>Move</b> by %s, %s; with <b>Ctrl</b> to restrict to horizontal/vertical; with <b>Shift</b> to disable snapping"
 msgstr "<b>Déplacer</b> de %s, %s; <b>Ctrl</b> restreindre à l'horizontale/verticale; <b>Maj</b> désactiver le magnétisme"
 
-#: ../src/shape-editor.cpp:471
+#: ../src/shape-editor.cpp:472
 msgid "Drag curve"
 msgstr "Déplacer la courbe"
 
@@ -9786,16 +9787,16 @@ msgstr "horizontal, à %s"
 msgid "at %d degrees, through (%s,%s)"
 msgstr "à %d degrés, passe par (%s,%s)"
 
-#: ../src/sp-image.cpp:1128
+#: ../src/sp-image.cpp:1135
 msgid "embedded"
 msgstr "embarquée"
 
-#: ../src/sp-image.cpp:1136
+#: ../src/sp-image.cpp:1143
 #, c-format
 msgid "<b>Image with bad reference</b>: %s"
 msgstr "<b>Image avec une mauvaise référence</b> : %s"
 
-#: ../src/sp-image.cpp:1137
+#: ../src/sp-image.cpp:1144
 #, c-format
 msgid "<b>Image</b> %d &#215; %d: %s"
 msgstr "<b>Image</b> %d &#215; %d : %s"
@@ -9817,31 +9818,31 @@ msgstr "<b>Spirale</b> : rayon %s, angle %5g&#176;; avec <b>Ctrl</b> pour tourn
 msgid "Create spiral"
 msgstr "Créer une spirale"
 
-#: ../src/sp-item.cpp:1035
+#: ../src/sp-item.cpp:1039
 msgid "Object"
 msgstr "Objet"
 
-#: ../src/sp-item.cpp:1052
+#: ../src/sp-item.cpp:1056
 #, c-format
 msgid "%s; <i>clipped</i>"
 msgstr "%s; <i>découpé</i>"
 
-#: ../src/sp-item.cpp:1057
+#: ../src/sp-item.cpp:1061
 #, c-format
 msgid "%s; <i>masked</i>"
 msgstr "%s; <i>masqué</i>"
 
-#: ../src/sp-item.cpp:1065
+#: ../src/sp-item.cpp:1069
 #, c-format
 msgid "%s; <i>filtered (%s)</i>"
 msgstr "%s; <i>filtré (%s)</i>"
 
-#: ../src/sp-item.cpp:1067
+#: ../src/sp-item.cpp:1071
 #, c-format
 msgid "%s; <i>filtered</i>"
 msgstr "%s; <i>filtré</i>"
 
-#: ../src/sp-item-group.cpp:760
+#: ../src/sp-item-group.cpp:761
 #, c-format
 msgid "<b>Group</b> of <b>%d</b> object"
 msgid_plural "<b>Group</b> of <b>%d</b> objects"
@@ -9903,76 +9904,76 @@ msgstr "Un des objets n'est <b>pas un chemin</b>, impossible d'effectuer une op
 msgid "Select <b>stroked path(s)</b> to convert stroke to path."
 msgstr "Sélectionner des <b>chemin(s) avec contour</b> pour convertir les contours en chemins."
 
-#: ../src/splivarot.cpp:954
+#: ../src/splivarot.cpp:976
 msgid "Convert stroke to path"
 msgstr "Convertir un contour en chemin"
 
 #. TRANSLATORS: "to outline" means "to convert stroke to path"
-#: ../src/splivarot.cpp:957
+#: ../src/splivarot.cpp:979
 msgid "<b>No stroked paths</b> in the selection."
 msgstr "<b>Aucun chemin avec contour</b> dans la sélection."
 
-#: ../src/splivarot.cpp:1040
+#: ../src/splivarot.cpp:1062
 msgid "Selected object is <b>not a path</b>, cannot inset/outset."
 msgstr "L'objet sélectionné <b>n'est pas un chemin</b>, impossible de le contracter/dilater."
 
-#: ../src/splivarot.cpp:1159
-#: ../src/splivarot.cpp:1228
+#: ../src/splivarot.cpp:1181
+#: ../src/splivarot.cpp:1250
 msgid "Create linked offset"
 msgstr "Créer un objet offset lié"
 
-#: ../src/splivarot.cpp:1160
-#: ../src/splivarot.cpp:1229
+#: ../src/splivarot.cpp:1182
+#: ../src/splivarot.cpp:1251
 msgid "Create dynamic offset"
 msgstr "Créer un objet offset dynamique"
 
-#: ../src/splivarot.cpp:1254
+#: ../src/splivarot.cpp:1276
 msgid "Select <b>path(s)</b> to inset/outset."
 msgstr "Sélectionner des <b>chemin(s)</b> pour les contracter/dilater."
 
-#: ../src/splivarot.cpp:1472
+#: ../src/splivarot.cpp:1494
 msgid "Outset path"
 msgstr "Dilater le chemin"
 
-#: ../src/splivarot.cpp:1472
+#: ../src/splivarot.cpp:1494
 msgid "Inset path"
 msgstr "Contracter le chemin"
 
-#: ../src/splivarot.cpp:1474
+#: ../src/splivarot.cpp:1496
 msgid "<b>No paths</b> to inset/outset in the selection."
 msgstr "<b>Aucun chemin</b> à contracter/dilater dans la sélection."
 
-#: ../src/splivarot.cpp:1652
+#: ../src/splivarot.cpp:1674
 msgid "Simplifying paths (separately):"
 msgstr "Simplification individuelle des chemins"
 
-#: ../src/splivarot.cpp:1654
+#: ../src/splivarot.cpp:1676
 msgid "Simplifying paths:"
 msgstr "Simplification des chemins :"
 
-#: ../src/splivarot.cpp:1691
+#: ../src/splivarot.cpp:1713
 #, c-format
 msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
 msgstr "Simplification %s - <b>%d</b> chemins simplifiés sur <b>%d</b>..."
 
-#: ../src/splivarot.cpp:1703
+#: ../src/splivarot.cpp:1725
 #, c-format
 msgid "<b>%d</b> paths simplified."
 msgstr "Fait - <b>%d</b> chemins simplifiés."
 
-#: ../src/splivarot.cpp:1717
+#: ../src/splivarot.cpp:1739
 msgid "Select <b>path(s)</b> to simplify."
 msgstr "Sélectionner un ou des <b>chemin(s)</b> à simplifier."
 
-#: ../src/splivarot.cpp:1731
+#: ../src/splivarot.cpp:1753
 msgid "Simplify"
 msgstr "Simplifier"
 
-#: ../src/splivarot.cpp:1733
+#: ../src/splivarot.cpp:1755
 msgid "<b>No paths</b> to simplify in the selection."
 msgstr "<b>Aucun chemin</b> à simplifier dans la sélection."
 
-#: ../src/sp-lpe-item.cpp:348
+#: ../src/sp-lpe-item.cpp:363
 msgid "An exception occurred during execution of the Path Effect."
 msgstr "Exception pendant l'exécution de l'effet de chemin."
 
@@ -10099,6 +10100,50 @@ msgstr "<b>Clone</b> de : %s"
 msgid "<b>Orphaned clone</b>"
 msgstr "<b>Clone orphelin</b>"
 
+#: ../src/spray-context.cpp:290
+#: ../src/tweak-context.cpp:204
+#, c-format
+msgid "<b>Nothing</b> selected"
+msgstr "<b>Rien</b> n'a été sélectionné."
+
+#: ../src/spray-context.cpp:296
+#, c-format
+msgid "%s. Drag, click or scroll to spray <b>copies</b> of the initial selection"
+msgstr "%s. Cliquer-déplacer, cliquer ou défiler pour pulvériser des <b>copies</b> de la sélection initiale"
+
+#: ../src/spray-context.cpp:299
+#, c-format
+msgid "%s. Drag, click or scroll to spray <b>clones</b> of the initial selection"
+msgstr "%s. Cliquer-déplacer, cliquer ou défiler pour pulvériser des <b>clones</b> de la sélection initiale"
+
+#: ../src/spray-context.cpp:302
+#, c-format
+msgid "%s. Drag, click or scroll to spray in a <b>single path</b> of the initial selection"
+msgstr "%s. Cliquer-déplacer, cliquer ou défiler pour pulvériser dans un <b>chemin unique</b> la sélection initiale"
+
+#: ../src/spray-context.cpp:305
+#, c-format
+msgid "%s. Modify <b>spray</b> options"
+msgstr "%s. Modifier les options du  <b>pulvérisateur</b>"
+
+#: ../src/spray-context.cpp:917
+msgid "<b>Nothing selected!</b> Select objects to spray."
+msgstr "<b>Sélection vide !</b> Sélectionner les objets à pulvériser."
+
+#: ../src/spray-context.cpp:1025
+#: ../src/widgets/toolbox.cpp:4525
+msgid "Spray with copies"
+msgstr "Pulvérise avec des copies"
+
+#: ../src/spray-context.cpp:1029
+#: ../src/widgets/toolbox.cpp:4532
+msgid "Spray with clones"
+msgstr "Pulvérise avec des clones"
+
+#: ../src/spray-context.cpp:1033
+msgid "Spray in single path"
+msgstr "Pulvérisation par union des formes"
+
 #: ../src/star-context.cpp:333
 msgid "<b>Ctrl</b>: snap angle; keep rays radial"
 msgstr "<b>Ctrl</b> pour tourner par incréments; forcer la radialité des branches"
@@ -10135,7 +10180,7 @@ msgid "The flowed text(s) must be <b>visible</b> in order to be put on a path."
 msgstr "Le texte à mettre le long d'un chemin doit être <b>visible</b>."
 
 #: ../src/text-chemistry.cpp:192
-#: ../src/verbs.cpp:2364
+#: ../src/verbs.cpp:2374
 msgid "Put text on path"
 msgstr "Mettre le texte le long d'un chemin"
 
@@ -10148,7 +10193,7 @@ msgid "<b>No texts-on-paths</b> in the selection."
 msgstr "<b>Aucun texte le long d'un chemin</b> dans la sélection."
 
 #: ../src/text-chemistry.cpp:229
-#: ../src/verbs.cpp:2366
+#: ../src/verbs.cpp:2376
 msgid "Remove text from path"
 msgstr "Retirer le texte du chemin"
 
@@ -10323,7 +10368,7 @@ msgid "Type or edit text (%d characters); <b>Enter</b> to start new line."
 msgstr "Taper ou modifier le texte (%d caractères) ; <b>Entrée</b> pour commencer une nouvelle ligne."
 
 #: ../src/text-context.cpp:1612
-#: ../src/tools-switch.cpp:190
+#: ../src/tools-switch.cpp:198
 msgid "<b>Click</b> to select or create text, <b>drag</b> to create flowed text; then type."
 msgstr "<b>Cliquer</b> pour sélectionner ou créer un texte, <b>cliquer-déplacer</b> pour créer un texte encadré; puis taper le texte."
 
@@ -10335,67 +10380,71 @@ msgstr "Taper du texte"
 msgid "You cannot edit <b>cloned character data</b>."
 msgstr "Vous ne pouvez pas modifier des <b>données de caractères clonés</b>."
 
-#: ../src/tools-switch.cpp:130
+#: ../src/tools-switch.cpp:132
 msgid "To edit a path, <b>click</b>, <b>Shift+click</b>, or <b>drag around</b> nodes to select them, then <b>drag</b> nodes and handles. <b>Click</b> on an object to select."
 msgstr "Pour éditer un chemin, sélectionnez des nœuds par <b>cliquer</b>, <b>Maj+clic</b> ou <b>cliquer-déplacer</b>, puis déplacez les nœuds et/ou les poignées. <b>Cliquer</b> sur un objet pour le sélectionner."
 
-#: ../src/tools-switch.cpp:136
+#: ../src/tools-switch.cpp:138
 msgid "To tweak a path by pushing, select it and drag over it."
 msgstr "Pour perturber un chemin en le poussant, sélectionnez-le et faites glisser la souris dessus."
 
-#: ../src/tools-switch.cpp:142
+#: ../src/tools-switch.cpp:144
+msgid "To spray a path by pushing, select it and drag over it."
+msgstr "Pour pulvériser un chemin en le poussant, sélectionnez-le et faites glisser la souris dessus."
+
+#: ../src/tools-switch.cpp:150
 msgid "<b>Drag</b> to create a rectangle. <b>Drag controls</b> to round corners and resize. <b>Click</b> to select."
 msgstr "<b>Cliquer-déplacer</b> pour créer un rectangle. <b>Déplacer les poignées</b> pour arrondir les coins. <b>Cliquer</b> pour sélectionner."
 
-#: ../src/tools-switch.cpp:148
+#: ../src/tools-switch.cpp:156
 msgid "<b>Drag</b> to create a 3D box. <b>Drag controls</b> to resize in perspective. <b>Click</b> to select (with <b>Ctrl+Alt</b> for single faces)."
 msgstr "<b>Cliquer-déplacer</b> pour créer une boîte 3D. <b>Déplacer les poignées</b> pour redimensionner en perspective. <b>Cliquer</b> pour sélectionner (avec <b>Ctrl+Alt</b> pour sélectionner les faces)."
 
-#: ../src/tools-switch.cpp:154
+#: ../src/tools-switch.cpp:162
 msgid "<b>Drag</b> to create an ellipse. <b>Drag controls</b> to make an arc or segment. <b>Click</b> to select."
 msgstr "<b>Cliquer-déplacer</b> pour créer une ellipse. <b>Déplacer les poignées</b> pour faire des arcs ou des camemberts. <b>Cliquer</b> pour sélectionner."
 
-#: ../src/tools-switch.cpp:160
+#: ../src/tools-switch.cpp:168
 msgid "<b>Drag</b> to create a star. <b>Drag controls</b> to edit the star shape. <b>Click</b> to select."
 msgstr "<b>Cliquer-déplacer</b> pour créer une étoile. <b>Déplacer les poignées</b> pour éditer la forme de l'étoile. <b>Cliquer</b> pour sélectionner."
 
-#: ../src/tools-switch.cpp:166
+#: ../src/tools-switch.cpp:174
 msgid "<b>Drag</b> to create a spiral. <b>Drag controls</b> to edit the spiral shape. <b>Click</b> to select."
 msgstr "<b>Cliquer-déplacer</b> pour créer une spirale. <b>Déplacer les poignées</b> pour modifier la forme de la spirale. <b>Cliquer</b> pour sélectionner."
 
-#: ../src/tools-switch.cpp:172
+#: ../src/tools-switch.cpp:180
 msgid "<b>Drag</b> to create a freehand line. <b>Shift</b> appends to selected path, <b>Alt</b> activates sketch mode."
 msgstr "<b>Cliquer-déplacer</b> pour créer une ligne à main levée. <b>Maj</b> pour l'ajouter au chemin sélectionné. <b>Alt</b> pour activer le mode croquis."
 
-#: ../src/tools-switch.cpp:178
+#: ../src/tools-switch.cpp:186
 msgid "<b>Click</b> or <b>click and drag</b> to start a path; with <b>Shift</b> to append to selected path. <b>Ctrl+click</b> to create single dots (straight line modes only)."
 msgstr "<b>Cliquer</b> ou <b>cliquer-déplacer</b> pour commencer un chemin; <b>Maj</b> pour ajouter au chemin sélectionné; <b>Ctrl+clic</b> pour créer des points isolés (avec les modes lignes droites)."
 
-#: ../src/tools-switch.cpp:184
+#: ../src/tools-switch.cpp:192
 msgid "<b>Drag</b> to draw a calligraphic stroke; with <b>Ctrl</b> to track a guide path. <b>Arrow keys</b> adjust width (left/right) and angle (up/down)."
 msgstr "<b>Cliquer-déplacer</b> pour calligraphier; <b>Ctrl</b> pour suivre un guide. Les flèches <b>gauche</b>/<b>droite</b> ajustent la largeur de la plume, <b>haut</b>/<b>bas</b> son angle."
 
-#: ../src/tools-switch.cpp:196
+#: ../src/tools-switch.cpp:204
 msgid "<b>Drag</b> or <b>double click</b> to create a gradient on selected objects, <b>drag handles</b> to adjust gradients."
 msgstr "<b>Cliquer-déplacer</b> ou <b>double-cliquer</b>pour créer un dégradé sur les objets sélectionnés, <b>déplacer les poignées</b> pour ajuster les dégradés."
 
-#: ../src/tools-switch.cpp:202
+#: ../src/tools-switch.cpp:210
 msgid "<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to zoom out."
 msgstr "<b>Cliquer</b> ou <b>cliquer-déplacer</b> sur une zone pour zoommer, <b>Maj+clic</b> pour dézoommer."
 
-#: ../src/tools-switch.cpp:214
+#: ../src/tools-switch.cpp:222
 msgid "<b>Click and drag</b> between shapes to create a connector."
 msgstr "<b>Cliquer et déplacer</b> entre des formes pour créer un connecteur."
 
-#: ../src/tools-switch.cpp:220
+#: ../src/tools-switch.cpp:228
 msgid "<b>Click</b> to paint a bounded area, <b>Shift+click</b> to union the new fill with the current selection, <b>Ctrl+click</b> to change the clicked object's fill and stroke to the current setting."
 msgstr "<b>Cliquer</b> pour remplir une région bornée. <b>Maj+Clic</b> pour faire une union du remplissage avec la sélection courante, <b>Ctrl+Clic</b> pour changer le trait et le remplissage de l'objet désigné"
 
-#: ../src/tools-switch.cpp:226
+#: ../src/tools-switch.cpp:234
 msgid "<b>Drag</b> to erase."
 msgstr "<b>Cliquer-déplacer</b> pour effacer"
 
-#: ../src/tools-switch.cpp:232
+#: ../src/tools-switch.cpp:240
 msgid "Choose a subtool from the toolbar"
 msgstr "Sélectionner un outil secondaire dans la barre d'outils"
 
@@ -10450,11 +10499,6 @@ msgstr "Vectoriser un bitmap"
 msgid "Trace: Done. %ld nodes created"
 msgstr "Vectorisation effectuée. %ld nœuds créés."
 
-#: ../src/tweak-context.cpp:204
-#, c-format
-msgid "<b>Nothing</b> selected"
-msgstr "<b>Rien</b> n'a été sélectionné."
-
 #: ../src/tweak-context.cpp:210
 #, c-format
 msgid "%s. Drag to <b>move</b>."
@@ -10659,7 +10703,7 @@ msgstr "Créer un lien"
 
 #. "Ungroup"
 #: ../src/ui/context-menu.cpp:306
-#: ../src/verbs.cpp:2360
+#: ../src/verbs.cpp:2370
 msgid "_Ungroup"
 msgstr "_Dégrouper"
 
@@ -10777,12 +10821,15 @@ msgstr "V :"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:509
 #: ../src/ui/dialog/align-and-distribute.cpp:789
-#: ../src/widgets/toolbox.cpp:7068
+#: ../src/ui/dialog/spray-option.cpp:116
+#: ../src/ui/dialog/spray-option.cpp:194
+#: ../src/ui/dialog/spray-option.cpp:212
+#: ../src/widgets/toolbox.cpp:7475
 msgid "Remove overlaps"
 msgstr "Supprimer les chevauchements"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:540
-#: ../src/widgets/toolbox.cpp:6931
+#: ../src/widgets/toolbox.cpp:7265
 msgid "Arrange connector network"
 msgstr "Arranger le réseau de connecteurs"
 
@@ -10807,7 +10854,7 @@ msgid "Connector network layout"
 msgstr "Router un réseau de connecteurs"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:791
-#: ../src/widgets/toolbox.cpp:2083
+#: ../src/widgets/toolbox.cpp:2110
 msgid "Nodes"
 msgstr "Nœuds"
 
@@ -10828,7 +10875,7 @@ msgid "Align left edges"
 msgstr "Aligner les bords gauches"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:810
-msgid "Center objects horizontally"
+msgid "Center on vertical axis"
 msgstr "Centrer selon un axe vertical"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:813
@@ -10920,7 +10967,7 @@ msgid "Move objects as little as possible so that their bounding boxes do not ov
 msgstr "Déplacer les objets aussi peu que possible afin que leurs boîtes englobantes ne se chevauchent pas"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:893
-#: ../src/widgets/toolbox.cpp:7031
+#: ../src/widgets/toolbox.cpp:7436
 msgid "Nicely arrange selected connector network"
 msgstr "Dispose le réseau de connecteurs sélectionnés de façon agréable"
 
@@ -10960,7 +11007,7 @@ msgstr "Objet le plus petit"
 #: ../src/ui/dialog/align-and-distribute.cpp:921
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1414
 #: ../src/ui/dialog/icon-preview.cpp:178
-#: ../src/widgets/desktop-widget.cpp:1581
+#: ../src/widgets/desktop-widget.cpp:1580
 msgid "Selection"
 msgstr "Sélection"
 
@@ -10981,7 +11028,7 @@ msgstr "Nom du profil :"
 #.
 #. -----------
 #: ../src/ui/dialog/calligraphic-profile-rename.cpp:52
-#: ../src/ui/dialog/inkscape-preferences.cpp:1145
+#: ../src/ui/dialog/inkscape-preferences.cpp:1161
 msgid "Save"
 msgstr "Enregistrement"
 
@@ -11130,19 +11177,19 @@ msgid "Remove selected grid."
 msgstr "Supprimer la grille sélectionnée."
 
 #: ../src/ui/dialog/document-properties.cpp:119
-#: ../src/widgets/toolbox.cpp:2172
+#: ../src/widgets/toolbox.cpp:2199
 msgid "Guides"
 msgstr "Guides"
 
 #: ../src/ui/dialog/document-properties.cpp:120
-#: ../src/ui/dialog/inkscape-preferences.cpp:1014
-#: ../src/widgets/toolbox.cpp:2163
+#: ../src/ui/dialog/inkscape-preferences.cpp:1030
+#: ../src/widgets/toolbox.cpp:2190
 msgid "Grids"
 msgstr "Grilles"
 
 #: ../src/ui/dialog/document-properties.cpp:121
-#: ../src/verbs.cpp:2587
-#: ../src/widgets/toolbox.cpp:2028
+#: ../src/verbs.cpp:2601
+#: ../src/widgets/toolbox.cpp:2055
 msgid "Snap"
 msgstr "Magnétisme"
 
@@ -11263,62 +11310,62 @@ msgstr "Le répertoire des profils (%s) est indisponible."
 #. Inkscape::GC::release(defsRepr);
 #. inform the document, so we can undo
 #. Color Management
-#: ../src/ui/dialog/document-properties.cpp:451
-#: ../src/verbs.cpp:2739
+#: ../src/ui/dialog/document-properties.cpp:452
+#: ../src/verbs.cpp:2755
 msgid "Link Color Profile"
 msgstr "Lier un profil de couleurs"
 
-#: ../src/ui/dialog/document-properties.cpp:524
+#: ../src/ui/dialog/document-properties.cpp:525
 msgid "Remove linked color profile"
 msgstr "Supprimer le profil de couleur lié"
 
-#: ../src/ui/dialog/document-properties.cpp:538
+#: ../src/ui/dialog/document-properties.cpp:539
 msgid "<b>Linked Color Profiles:</b>"
 msgstr "<b>Profils de couleur liés :</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:540
+#: ../src/ui/dialog/document-properties.cpp:541
 msgid "<b>Available Color Profiles:</b>"
 msgstr "<b>Profils de couleur disponibles :</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:542
+#: ../src/ui/dialog/document-properties.cpp:543
 msgid "Link Profile"
 msgstr "Lier au profil"
 
-#: ../src/ui/dialog/document-properties.cpp:573
+#: ../src/ui/dialog/document-properties.cpp:574
 msgid "Profile Name"
 msgstr "Nom du profil"
 
-#: ../src/ui/dialog/document-properties.cpp:604
+#: ../src/ui/dialog/document-properties.cpp:605
 msgid "<b>External script files:</b>"
 msgstr "<b>Fichier de programmation externe :</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:606
+#: ../src/ui/dialog/document-properties.cpp:607
 #: ../src/ui/dialog/swatches.cpp:463
 msgid "Add"
 msgstr "Ajouter"
 
-#: ../src/ui/dialog/document-properties.cpp:629
+#: ../src/ui/dialog/document-properties.cpp:630
 msgid "Filename"
 msgstr "Nom du fichier"
 
 #. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:669
+#: ../src/ui/dialog/document-properties.cpp:670
 msgid "Add external script..."
 msgstr "Ajouter un programme externe..."
 
-#: ../src/ui/dialog/document-properties.cpp:693
+#: ../src/ui/dialog/document-properties.cpp:694
 msgid "Remove external script"
 msgstr "Supprimer un programme externe"
 
-#: ../src/ui/dialog/document-properties.cpp:774
+#: ../src/ui/dialog/document-properties.cpp:775
 msgid "<b>Creation</b>"
 msgstr " <b>Création</b> "
 
-#: ../src/ui/dialog/document-properties.cpp:775
+#: ../src/ui/dialog/document-properties.cpp:776
 msgid "<b>Defined grids</b>"
 msgstr "<b>Grilles définies</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:985
+#: ../src/ui/dialog/document-properties.cpp:986
 msgid "Remove grid"
 msgstr "Supprimer la grille"
 
@@ -11332,6 +11379,7 @@ msgstr "Information"
 #: ../share/extensions/dxf_outlines.inx.h:8
 #: ../share/extensions/lindenmayer.inx.h:23
 #: ../share/extensions/measure.inx.h:2
+#: ../share/extensions/scour.inx.h:4
 msgid "Help"
 msgstr "Aide"
 
@@ -11669,8 +11717,9 @@ msgid "Height of filter effects region"
 msgstr "Hauteur de la zone d'action du filtre"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2165
-#: ../src/widgets/toolbox.cpp:3859
-#: ../src/widgets/toolbox.cpp:4250
+#: ../src/widgets/toolbox.cpp:3886
+#: ../src/widgets/toolbox.cpp:4277
+#: ../src/widgets/toolbox.cpp:4545
 #: ../share/extensions/extrude.inx.h:4
 msgid "Mode:"
 msgstr "Mode :"
@@ -11842,7 +11891,7 @@ msgid "The whole filter region will be filled with this color."
 msgstr "Toute la région affectée par le filtre sera remplie avec cette couleur."
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2214
-#: ../src/widgets/toolbox.cpp:5299
+#: ../src/widgets/toolbox.cpp:5518
 msgid "Opacity:"
 msgstr "Opacité :"
 
@@ -12134,7 +12183,7 @@ msgstr "Vitesse du défilement automatique de la zone de travail lors que l'on t
 #: ../src/ui/dialog/tracedialog.cpp:420
 #: ../src/ui/dialog/tracedialog.cpp:453
 #: ../src/ui/dialog/tracedialog.cpp:596
-#: ../src/widgets/toolbox.cpp:7185
+#: ../src/widgets/toolbox.cpp:7617
 msgid "Threshold:"
 msgstr "Seuil :"
 
@@ -12486,533 +12535,561 @@ msgstr "Définit combien de temps le contour sera visible après son survol par
 
 #. Tweak
 #: ../src/ui/dialog/inkscape-preferences.cpp:447
-#: ../src/verbs.cpp:2504
+#: ../src/verbs.cpp:2514
 msgid "Tweak"
 msgstr "Ajuster"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:448
+#: ../src/ui/dialog/inkscape-preferences.cpp:454
 msgid "Paint objects with:"
 msgstr "Peindre les objets avec :"
 
-#. Zoom
+#. Spray
 #: ../src/ui/dialog/inkscape-preferences.cpp:453
-#: ../src/ui/view/edit-widget.cpp:1062
-#: ../src/verbs.cpp:2526
+#: ../src/verbs.cpp:2516
+msgid "Spray"
+msgstr "Pulvérisateur"
+
+#. Zoom
+#: ../src/ui/dialog/inkscape-preferences.cpp:459
+#: ../src/ui/view/edit-widget.cpp:1068
+#: ../src/verbs.cpp:2538
 #: ../src/widgets/desktop-widget.cpp:483
 msgid "Zoom"
 msgstr "Zoom"
 
 #. Shapes
-#: ../src/ui/dialog/inkscape-preferences.cpp:458
+#: ../src/ui/dialog/inkscape-preferences.cpp:464
 msgid "Shapes"
 msgstr "Formes"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:490
+#: ../src/ui/dialog/inkscape-preferences.cpp:496
 msgid "Sketch mode"
 msgstr "Mode croquis"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:492
+#: ../src/ui/dialog/inkscape-preferences.cpp:498
 msgid "If on, the sketch result will be the normal average of all sketches made, instead of averaging the old result with the new sketch."
 msgstr "Si coché, le résultat du croquis sera moyenné avec tous les autres croquis ; sinon, la moyenne sera effectuée entre l'ancien résultat et le nouveau croquis."
 
 #. Pen
-#: ../src/ui/dialog/inkscape-preferences.cpp:495
-#: ../src/verbs.cpp:2518
+#: ../src/ui/dialog/inkscape-preferences.cpp:501
+#: ../src/verbs.cpp:2530
 msgid "Pen"
 msgstr "Stylo"
 
 #. Calligraphy
-#: ../src/ui/dialog/inkscape-preferences.cpp:501
-#: ../src/verbs.cpp:2520
+#: ../src/ui/dialog/inkscape-preferences.cpp:507
+#: ../src/verbs.cpp:2532
 msgid "Calligraphy"
 msgstr "Plume calligraphique"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:505
+#: ../src/ui/dialog/inkscape-preferences.cpp:511
 msgid "If on, pen width is in absolute units (px) independent of zoom; otherwise pen width depends on zoom so that it looks the same at any zoom"
 msgstr "Si coché, la largeur de la plume est en unités absolues (px) indépendemment du zoom; sinon, la largeur de plume dépend du zoom afin de paraître la même quel que soit le zoom"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:507
+#: ../src/ui/dialog/inkscape-preferences.cpp:513
 msgid "If on, each newly created object will be selected (deselecting previous selection)"
 msgstr "Activer pour que les nouveaux objets soient automatiquement sélectionnés (à la place de l'ancienne sélection)"
 
 #. Paint Bucket
-#: ../src/ui/dialog/inkscape-preferences.cpp:509
-#: ../src/verbs.cpp:2532
+#: ../src/ui/dialog/inkscape-preferences.cpp:515
+#: ../src/verbs.cpp:2544
 msgid "Paint Bucket"
 msgstr "Remplissage au seau"
 
 #. Eraser
-#: ../src/ui/dialog/inkscape-preferences.cpp:514
-#: ../src/verbs.cpp:2536
+#: ../src/ui/dialog/inkscape-preferences.cpp:520
+#: ../src/verbs.cpp:2548
 msgid "Eraser"
 msgstr "Gomme"
 
 #. LPETool
-#: ../src/ui/dialog/inkscape-preferences.cpp:518
-#: ../src/verbs.cpp:2538
+#: ../src/ui/dialog/inkscape-preferences.cpp:524
+#: ../src/verbs.cpp:2550
 msgid "LPE Tool"
 msgstr "Outil effets de chemin en direct"
 
+#: ../src/ui/dialog/inkscape-preferences.cpp:533
+msgid "Show font samples in the drop-down list"
+msgstr "Afficher les échantillons de police dans la liste déroulante"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:534
+msgid "Show font samples alongside font names in the drop-down list in Text bar"
+msgstr "Affiche les échantillons de police à côté du nom dans la liste déroulante de la barre de texte"
+
 #. Gradient
-#: ../src/ui/dialog/inkscape-preferences.cpp:528
-#: ../src/verbs.cpp:2524
+#: ../src/ui/dialog/inkscape-preferences.cpp:539
+#: ../src/verbs.cpp:2536
 msgid "Gradient"
 msgstr "Dégradé"
 
 #. Connector
-#: ../src/ui/dialog/inkscape-preferences.cpp:532
-#: ../src/verbs.cpp:2530
+#: ../src/ui/dialog/inkscape-preferences.cpp:543
+#: ../src/verbs.cpp:2542
 msgid "Connector"
 msgstr "Connecteur"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:535
+#: ../src/ui/dialog/inkscape-preferences.cpp:546
 msgid "If on, connector attachment points will not be shown for text objects"
 msgstr "Si coché, les points d'accroche de connecteur ne sont pas montrés pour des objets texte"
 
 #. Dropper
-#: ../src/ui/dialog/inkscape-preferences.cpp:537
-#: ../src/verbs.cpp:2528
+#: ../src/ui/dialog/inkscape-preferences.cpp:548
+#: ../src/verbs.cpp:2540
 msgid "Dropper"
 msgstr "Pipette"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:544
+#: ../src/ui/dialog/inkscape-preferences.cpp:555
 msgid "Save and restore window geometry for each document"
 msgstr "Sauver et restaurer la géométrie de la fenêtre pour chaque document"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:545
+#: ../src/ui/dialog/inkscape-preferences.cpp:556
 msgid "Remember and use last window's geometry"
 msgstr "Mémoriser et utiliser la géométrie de la dernière fenêtre"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:546
+#: ../src/ui/dialog/inkscape-preferences.cpp:557
 msgid "Don't save window geometry"
 msgstr "Ne pas enregistrer la géométrie de la fenêtre"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:548
-#: ../src/ui/dialog/inkscape-preferences.cpp:568
+#: ../src/ui/dialog/inkscape-preferences.cpp:559
+#: ../src/ui/dialog/inkscape-preferences.cpp:579
 msgid "Dockable"
 msgstr "Attachable"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:551
+#: ../src/ui/dialog/inkscape-preferences.cpp:562
 msgid "Dialogs are hidden in taskbar"
 msgstr "Les dialogues sont cachés dans la barre des tâches"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:552
+#: ../src/ui/dialog/inkscape-preferences.cpp:563
 msgid "Zoom when window is resized"
 msgstr "Zoommer quand la fenêtre est redimensionnée"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:553
+#: ../src/ui/dialog/inkscape-preferences.cpp:564
 msgid "Show close button on dialogs"
 msgstr "Afficher un bouton de fermeture sur les dialogues"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:555
+#: ../src/ui/dialog/inkscape-preferences.cpp:566
 msgid "Normal"
 msgstr "Normal"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:556
+#: ../src/ui/dialog/inkscape-preferences.cpp:567
 msgid "Aggressive"
 msgstr "Agressif"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:558
+#: ../src/ui/dialog/inkscape-preferences.cpp:569
 msgid "Saving window geometry (size and position):"
 msgstr "Enregistrer la géométrie de la fenêtre (taille et position)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:560
+#: ../src/ui/dialog/inkscape-preferences.cpp:571
 msgid "Let the window manager determine placement of all windows"
 msgstr "Laisser le gestionnaire de fenêtre placer toutes les fenêtres"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:562
+#: ../src/ui/dialog/inkscape-preferences.cpp:573
 msgid "Remember and use the last window's geometry (saves geometry to user preferences)"
 msgstr "Mémoriser et utiliser la géométrie de la dernière fenêtre (enregistre la géométrie dans les préférences utilisateur)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:564
+#: ../src/ui/dialog/inkscape-preferences.cpp:575
 msgid "Save and restore window geometry for each document (saves geometry in the document)"
 msgstr "Sauver et restaurer la géométrie de la fenêtre pour chaque document (enregistre la géométrie avec le document)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:566
+#: ../src/ui/dialog/inkscape-preferences.cpp:577
 msgid "Dialog behavior (requires restart):"
 msgstr "Comportement des boîtes de dialogue (nécessite un redémarrage)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:573
+#: ../src/ui/dialog/inkscape-preferences.cpp:584
 msgid "Dialogs on top:"
 msgstr "Dialogues au-dessus de la fenêtre :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:576
+#: ../src/ui/dialog/inkscape-preferences.cpp:587
 msgid "Dialogs are treated as regular windows"
 msgstr "Les dialogues sont traités comme des fenêtres normales"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:578
+#: ../src/ui/dialog/inkscape-preferences.cpp:589
 msgid "Dialogs stay on top of document windows"
 msgstr "Les dialogues restent au-dessus des fenêtres de document"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:580
+#: ../src/ui/dialog/inkscape-preferences.cpp:591
 msgid "Same as Normal but may work better with some window managers"
 msgstr "Comme Normal, mais fonctionne peut-être mieux avec certains gestionnaires de fenêtres"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:584
+#: ../src/ui/dialog/inkscape-preferences.cpp:595
 msgid "Dialog Transparency:"
 msgstr "Transparence des boîtes de dialogue"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:586
+#: ../src/ui/dialog/inkscape-preferences.cpp:597
 msgid "Opacity when focused:"
 msgstr "Opacité lorsque la fenêtre est active :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:588
+#: ../src/ui/dialog/inkscape-preferences.cpp:599
 msgid "Opacity when unfocused:"
 msgstr "Opacité lorsque la fenêtre est inactive :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:590
+#: ../src/ui/dialog/inkscape-preferences.cpp:601
 msgid "Time of opacity change animation:"
 msgstr "Temps de transition :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:593
+#: ../src/ui/dialog/inkscape-preferences.cpp:604
 msgid "Miscellaneous:"
 msgstr "Divers"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:596
+#: ../src/ui/dialog/inkscape-preferences.cpp:607
 msgid "Whether dialog windows are to be hidden in the window manager taskbar"
 msgstr "Si coché, les boîtes de dialogue sont cachées dans la barre des tâches du gestionnaire de fenêtre"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:599
+#: ../src/ui/dialog/inkscape-preferences.cpp:610
 msgid "Zoom drawing when document window is resized, to keep the same area visible (this is the default which can be changed in any window using the button above the right scrollbar)"
 msgstr "Si coché, le dessin est rezoommé quand la fenêtre est redimensionnée, pour garder visible la même aire (c'est l'option par défaut qui peut être changée dans toute fenêtre en utilisant le boutton au dessus de la barre de défilement de droite)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:601
+#: ../src/ui/dialog/inkscape-preferences.cpp:612
 msgid "Whether dialog windows have a close button (requires restart)"
 msgstr "Si coché, les boîtes de dialogue ont un bouton de fermeture (nécessite un redémarrage)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:602
+#: ../src/ui/dialog/inkscape-preferences.cpp:613
 msgid "Windows"
 msgstr "Fenêtres"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:607
+#: ../src/ui/dialog/inkscape-preferences.cpp:618
 msgid "Move in parallel"
 msgstr "Sont déplacés en parallèle"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:609
+#: ../src/ui/dialog/inkscape-preferences.cpp:620
 msgid "Stay unmoved"
 msgstr "Ne bougent pas"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:611
+#: ../src/ui/dialog/inkscape-preferences.cpp:622
 msgid "Move according to transform"
 msgstr "Sont déplacés en fonction leurs transformations"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:613
+#: ../src/ui/dialog/inkscape-preferences.cpp:624
 msgid "Are unlinked"
 msgstr "Sont déliés"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:615
+#: ../src/ui/dialog/inkscape-preferences.cpp:626
 msgid "Are deleted"
 msgstr "Sont supprimés"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:618
+#: ../src/ui/dialog/inkscape-preferences.cpp:629
 msgid "When the original moves, its clones and linked offsets:"
 msgstr "Lorsque l'original est déplacé, ses clones et offsets liés :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:620
+#: ../src/ui/dialog/inkscape-preferences.cpp:631
 msgid "Clones are translated by the same vector as their original."
 msgstr "Les clones sont déplacés du même vecteur que leur original."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:622
+#: ../src/ui/dialog/inkscape-preferences.cpp:633
 msgid "Clones preserve their positions when their original is moved."
 msgstr "Les clones restent sur place quand leur original est déplacé."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:624
+#: ../src/ui/dialog/inkscape-preferences.cpp:635
 msgid "Each clone moves according to the value of its transform= attribute. For example, a rotated clone will move in a different direction than its original."
 msgstr "Chaque clone est déplacé en fonction de son attribut transform=. Par exemple, un clone qui a déjà été tourné sera déplacé dans une direction différente de celle de son original."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:625
+#: ../src/ui/dialog/inkscape-preferences.cpp:636
 msgid "When the original is deleted, its clones:"
 msgstr "Lors que l'original est supprimé, ses clones :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:627
+#: ../src/ui/dialog/inkscape-preferences.cpp:638
 msgid "Orphaned clones are converted to regular objects."
 msgstr "Les clones orphelins sont convertis en objets normaux."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:629
+#: ../src/ui/dialog/inkscape-preferences.cpp:640
 msgid "Orphaned clones are deleted along with their original."
 msgstr "Les clones orphelins sont supprimés en même temps que leur original."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:631
+#: ../src/ui/dialog/inkscape-preferences.cpp:642
 msgid "When duplicating original+clones:"
 msgstr "Lors de la duplication d'un original et de ses clones :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:633
+#: ../src/ui/dialog/inkscape-preferences.cpp:644
 msgid "Relink duplicated clones"
 msgstr "Relier les clones dupliqués"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:635
+#: ../src/ui/dialog/inkscape-preferences.cpp:646
 msgid "When duplicating a selection containing both a clone and its original (possibly in groups), relink the duplicated clone to the duplicated original instead of the old original"
 msgstr "Lorsque la sélection dupliquée contient un clone et son original (dans un groupe par exemple), relier le clone dupliqué à l'objet original dupliqué plutôt qu'à l'original initial"
 
 #. TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page
-#: ../src/ui/dialog/inkscape-preferences.cpp:638
+#: ../src/ui/dialog/inkscape-preferences.cpp:649
 msgid "Clones"
 msgstr "Clones"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:643
+#: ../src/ui/dialog/inkscape-preferences.cpp:654
 msgid "When applying, use the topmost selected object as clippath/mask"
 msgstr "Utiliser l'objet le plus haut comme chemin de découpe ou masque lors de l'application"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:645
+#: ../src/ui/dialog/inkscape-preferences.cpp:656
 msgid "Uncheck this to use the bottom selected object as the clipping path or mask"
 msgstr "Si décoché, l'objet le plus en-dessous de la sélection est utilisé comme chemin de découpe ou masque"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:646
+#: ../src/ui/dialog/inkscape-preferences.cpp:657
 msgid "Remove clippath/mask object after applying"
 msgstr "Supprimer le chemin de découpe ou le masque après application"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:648
+#: ../src/ui/dialog/inkscape-preferences.cpp:659
 msgid "After applying, remove the object used as the clipping path or mask from the drawing"
 msgstr "Si coché, le chemin de découpe ou masque est supprimé du dessin après avoir été appliqué"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:649
+#: ../src/ui/dialog/inkscape-preferences.cpp:660
 msgid "Clippaths and masks"
 msgstr "Chemins de découpe et masques"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:654
+#: ../src/ui/dialog/inkscape-preferences.cpp:665
 #: ../src/widgets/select-toolbar.cpp:544
 msgid "Scale stroke width"
 msgstr "Redimensionner l'épaisseur du contour"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:655
+#: ../src/ui/dialog/inkscape-preferences.cpp:666
 msgid "Scale rounded corners in rectangles"
 msgstr "Redimensionner les coins arrondis des rectangles"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:656
+#: ../src/ui/dialog/inkscape-preferences.cpp:667
 msgid "Transform gradients"
 msgstr "Transformer les dégradés"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:657
+#: ../src/ui/dialog/inkscape-preferences.cpp:668
 msgid "Transform patterns"
 msgstr "Transformer les motifs de remplissage"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:658
+#: ../src/ui/dialog/inkscape-preferences.cpp:669
 msgid "Optimized"
 msgstr "Optimisé"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:659
+#: ../src/ui/dialog/inkscape-preferences.cpp:670
 msgid "Preserved"
 msgstr "Préservé"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:662
+#: ../src/ui/dialog/inkscape-preferences.cpp:673
 #: ../src/widgets/select-toolbar.cpp:545
 msgid "When scaling objects, scale the stroke width by the same proportion"
 msgstr "Lors d'un redimensionnement des objets, préserver la proportion des épaisseurs des contours"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:664
+#: ../src/ui/dialog/inkscape-preferences.cpp:675
 #: ../src/widgets/select-toolbar.cpp:556
 msgid "When scaling rectangles, scale the radii of rounded corners"
 msgstr "Lors du redimensionnements d'un rectangle, préserver la proportion des rayons des coins arrondis"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:666
+#: ../src/ui/dialog/inkscape-preferences.cpp:677
 #: ../src/widgets/select-toolbar.cpp:567
 msgid "Move gradients (in fill or stroke) along with the objects"
 msgstr "Transformer les dégradés avec les objets (remplissage et contour)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:668
+#: ../src/ui/dialog/inkscape-preferences.cpp:679
 #: ../src/widgets/select-toolbar.cpp:578
 msgid "Move patterns (in fill or stroke) along with the objects"
 msgstr "Transformer les motifs de remplissage avec les objets (remplissage et contour)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:669
+#: ../src/ui/dialog/inkscape-preferences.cpp:680
 msgid "Store transformation:"
 msgstr "Enregistrement des transformations :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:671
+#: ../src/ui/dialog/inkscape-preferences.cpp:682
 msgid "If possible, apply transformation to objects without adding a transform= attribute"
 msgstr "Si possible, appliquer des transformations aux objets sans ajouter l'attribut transform="
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:673
+#: ../src/ui/dialog/inkscape-preferences.cpp:684
 msgid "Always store transformation as a transform= attribute on objects"
 msgstr "Toujours enregistrer les transformations dans l'attribut transform= des objets"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:675
+#: ../src/ui/dialog/inkscape-preferences.cpp:686
 msgid "Transforms"
 msgstr "Transformations"
 
 #. blur quality
 #. filter quality
-#: ../src/ui/dialog/inkscape-preferences.cpp:681
-#: ../src/ui/dialog/inkscape-preferences.cpp:705
+#: ../src/ui/dialog/inkscape-preferences.cpp:692
+#: ../src/ui/dialog/inkscape-preferences.cpp:716
 msgid "Best quality (slowest)"
 msgstr "Haute qualité (le plus lent)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:683
-#: ../src/ui/dialog/inkscape-preferences.cpp:707
+#: ../src/ui/dialog/inkscape-preferences.cpp:694
+#: ../src/ui/dialog/inkscape-preferences.cpp:718
 msgid "Better quality (slower)"
 msgstr "Bonne qualité (plus lent)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:685
-#: ../src/ui/dialog/inkscape-preferences.cpp:709
+#: ../src/ui/dialog/inkscape-preferences.cpp:696
+#: ../src/ui/dialog/inkscape-preferences.cpp:720
 msgid "Average quality"
 msgstr "Qualité moyenne"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:687
-#: ../src/ui/dialog/inkscape-preferences.cpp:711
+#: ../src/ui/dialog/inkscape-preferences.cpp:698
+#: ../src/ui/dialog/inkscape-preferences.cpp:722
 msgid "Lower quality (faster)"
 msgstr "Basse qualité (plus rapide)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:689
-#: ../src/ui/dialog/inkscape-preferences.cpp:713
+#: ../src/ui/dialog/inkscape-preferences.cpp:700
+#: ../src/ui/dialog/inkscape-preferences.cpp:724
 msgid "Lowest quality (fastest)"
 msgstr "Qualité médiocre (le plus rapide)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:692
+#: ../src/ui/dialog/inkscape-preferences.cpp:703
 msgid "Gaussian blur quality for display:"
 msgstr "Qualidé d'affichage du flou gaussien :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:694
-#: ../src/ui/dialog/inkscape-preferences.cpp:718
+#: ../src/ui/dialog/inkscape-preferences.cpp:705
+#: ../src/ui/dialog/inkscape-preferences.cpp:729
 msgid "Best quality, but display may be very slow at high zooms (bitmap export always uses best quality)"
 msgstr "La plus haute qualité, mais l'affichage peut être très lent pour des zooms importants (l'export en bitmap utilise toujours la plus haute qualité)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:696
-#: ../src/ui/dialog/inkscape-preferences.cpp:720
+#: ../src/ui/dialog/inkscape-preferences.cpp:707
+#: ../src/ui/dialog/inkscape-preferences.cpp:731
 msgid "Better quality, but slower display"
 msgstr "Meilleure qualité, mais affichage plus lent"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:698
-#: ../src/ui/dialog/inkscape-preferences.cpp:722
+#: ../src/ui/dialog/inkscape-preferences.cpp:709
+#: ../src/ui/dialog/inkscape-preferences.cpp:733
 msgid "Average quality, acceptable display speed"
 msgstr "Qualité moyenne, vitesse d'affichage acceptable"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:700
-#: ../src/ui/dialog/inkscape-preferences.cpp:724
+#: ../src/ui/dialog/inkscape-preferences.cpp:711
+#: ../src/ui/dialog/inkscape-preferences.cpp:735
 msgid "Lower quality (some artifacts), but display is faster"
 msgstr "Qualité plus faible (présence d'artefacts), mais affichage plus rapide"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:702
-#: ../src/ui/dialog/inkscape-preferences.cpp:726
+#: ../src/ui/dialog/inkscape-preferences.cpp:713
+#: ../src/ui/dialog/inkscape-preferences.cpp:737
 msgid "Lowest quality (considerable artifacts), but display is fastest"
 msgstr "La plus mauvaise qualité (nombreux artefacts), mais l'affichage est bien plus rapide"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:716
+#: ../src/ui/dialog/inkscape-preferences.cpp:727
 msgid "Filter effects quality for display:"
 msgstr "Qualité d'affichage des effets de filtre :"
 
 #. show infobox
-#: ../src/ui/dialog/inkscape-preferences.cpp:729
+#: ../src/ui/dialog/inkscape-preferences.cpp:740
 msgid "Show filter primitives infobox"
 msgstr "Affiche la boîte d'information des primitives de filtre"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:731
+#: ../src/ui/dialog/inkscape-preferences.cpp:742
 msgid "Show icons and descriptions for the filter primitives available at the filter effects dialog."
 msgstr "Afficher les icônes et les descriptions pour les primitives de filtre disponibles dans la boîte de dialogue des effets de filtre."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:739
+#: ../src/ui/dialog/inkscape-preferences.cpp:746
+msgid "Number of Threads:"
+msgstr "Nombre de threads :"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:746
+#: ../src/ui/dialog/inkscape-preferences.cpp:1302
+msgid "(requires restart)"
+msgstr "(nécessite un redémarrage)"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:747
+msgid "Configure number of processors/threads to use with rendering of gaussian blur."
+msgstr "Configure le nombre de processeurs/threads à utiliser pour le rendu du flou gaussien."
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:755
 msgid "Select in all layers"
 msgstr "Sélectionner dans tous les calques"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:740
+#: ../src/ui/dialog/inkscape-preferences.cpp:756
 msgid "Select only within current layer"
 msgstr "Sélectionner seulement dans le calque courant"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:741
+#: ../src/ui/dialog/inkscape-preferences.cpp:757
 msgid "Select in current layer and sublayers"
 msgstr "Sélectionner dans le calque courant et ses sous-calques"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:742
+#: ../src/ui/dialog/inkscape-preferences.cpp:758
 msgid "Ignore hidden objects and layers"
 msgstr "Ignorer les objets et calques cachés"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:743
+#: ../src/ui/dialog/inkscape-preferences.cpp:759
 msgid "Ignore locked objects and layers"
 msgstr "Ignorer les objets et calques verrouillés"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:744
+#: ../src/ui/dialog/inkscape-preferences.cpp:760
 msgid "Deselect upon layer change"
 msgstr "Désélectionner en changeant de calque"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:746
+#: ../src/ui/dialog/inkscape-preferences.cpp:762
 msgid "Ctrl+A, Tab, Shift+Tab:"
 msgstr "Ctrl+A, Tab, Maj+Tab :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:748
+#: ../src/ui/dialog/inkscape-preferences.cpp:764
 msgid "Make keyboard selection commands work on objects in all layers"
 msgstr "Les commandes de sélection au clavier s'appliquent aux objets dans tous les calques"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:750
+#: ../src/ui/dialog/inkscape-preferences.cpp:766
 msgid "Make keyboard selection commands work on objects in current layer only"
 msgstr "Les commandes de sélection au clavier s'appliquent seulement dans le calque courant"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:752
+#: ../src/ui/dialog/inkscape-preferences.cpp:768
 msgid "Make keyboard selection commands work on objects in current layer and all its sublayers"
 msgstr "Les commandes de sélection au clavier s'appliquent seulement dans le calque courant et dans ses sous-calques"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:754
+#: ../src/ui/dialog/inkscape-preferences.cpp:770
 msgid "Uncheck this to be able to select objects that are hidden (either by themselves or by being in a hidden layer)"
 msgstr "Si décoché, la sélection des objets cachés est possible (objets cachés isolés ou appartenant à calque caché)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:756
+#: ../src/ui/dialog/inkscape-preferences.cpp:772
 msgid "Uncheck this to be able to select objects that are locked (either by themselves or by being in a locked layer)"
 msgstr "Si décoché, la sélection des objets verrouillés est possible (objets verrouillés isolés ou appartenant à un calque verrouillé)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:759
+#: ../src/ui/dialog/inkscape-preferences.cpp:775
 msgid "Uncheck this to be able to keep the current objects selected when the current layer changes"
 msgstr "Si décoché, les objets sélectionnés restent sélectionnés lorsque vous passez du calque courant à un autre"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:761
+#: ../src/ui/dialog/inkscape-preferences.cpp:777
 msgid "Selecting"
 msgstr "Sélection"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:768
+#: ../src/ui/dialog/inkscape-preferences.cpp:784
 msgid "Default export resolution:"
 msgstr "Résolution par défaut d'exportation :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:769
+#: ../src/ui/dialog/inkscape-preferences.cpp:785
 msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
 msgstr "Résolution par défaut (point par pouce) dans la boîte de dialogue exporter"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:771
+#: ../src/ui/dialog/inkscape-preferences.cpp:787
 msgid "Open Clip Art Library Server Name:"
 msgstr "Nom du serveur de bibliothèque Open Clip Art :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:772
+#: ../src/ui/dialog/inkscape-preferences.cpp:788
 msgid "The server name of the Open Clip Art Library webdav server. It's used by the Import and Export to OCAL function."
 msgstr "Le nom du serveur webdav de la bibliothèque Open Clip Art. Il est utilisé par la fonction d'import et export vers OCAL."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:774
+#: ../src/ui/dialog/inkscape-preferences.cpp:790
 msgid "Open Clip Art Library Username:"
 msgstr "Nom d'utilisateur bibliothèque Open Clip Art :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:775
+#: ../src/ui/dialog/inkscape-preferences.cpp:791
 msgid "The username used to log into Open Clip Art Library."
 msgstr "Le nom d'utilisateur pour se connecter à la bibliothèque Open Clip Art."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:777
+#: ../src/ui/dialog/inkscape-preferences.cpp:793
 msgid "Open Clip Art Library Password:"
 msgstr "Mot de passe de la bibliothèque Open Clip Art :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:778
+#: ../src/ui/dialog/inkscape-preferences.cpp:794
 msgid "The password used to log into Open Clip Art Library."
 msgstr "Le mot de passe pour se connecter à la bibliothèque Open Clip Art."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:780
+#: ../src/ui/dialog/inkscape-preferences.cpp:796
 msgid "Import/Export"
 msgstr "Importer/Exporter"
 
 #. TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:846
 msgid "Perceptual"
 msgstr "Perceptif"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:846
 msgid "Relative Colorimetric"
 msgstr "Colorimétrie relative"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:846
 msgid "Absolute Colorimetric"
 msgstr "Colorimétrie absolue"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:834
+#: ../src/ui/dialog/inkscape-preferences.cpp:850
 msgid "(Note: Color management has been disabled in this build)"
 msgstr "(NB : les fonctionnalités colorimétriques sont désactivées dans cette version)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:838
+#: ../src/ui/dialog/inkscape-preferences.cpp:854
 msgid "Display adjustment"
 msgstr "Ajustement de l'affichage"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:848
+#: ../src/ui/dialog/inkscape-preferences.cpp:864
 #, c-format
 msgid ""
 "The ICC profile to use to calibrate display output.\n"
@@ -13021,795 +13098,791 @@ msgstr ""
 "Le profil ICC à utiliser pour calibrer l'affichage.\n"
 "Répertoires parcourus :%s"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:849
+#: ../src/ui/dialog/inkscape-preferences.cpp:865
 msgid "Display profile:"
 msgstr "Profil d'affichage :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:854
+#: ../src/ui/dialog/inkscape-preferences.cpp:870
 msgid "Retrieve profile from display"
 msgstr "Utiliser le profil proposé par le périphérique d'affichage."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:857
+#: ../src/ui/dialog/inkscape-preferences.cpp:873
 msgid "Retrieve profiles from those attached to displays via XICC."
 msgstr "Utiliser un profil parmi ceux correspondant aux périphériques d'affichage grâce à XICC."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:859
+#: ../src/ui/dialog/inkscape-preferences.cpp:875
 msgid "Retrieve profiles from those attached to displays."
 msgstr "Utiliser un profil parmi ceux correspondant aux périphériques d'affichage."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:864
+#: ../src/ui/dialog/inkscape-preferences.cpp:880
 msgid "Display rendering intent:"
 msgstr "Intention de rendu de l'affichage :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:865
-#: ../src/ui/dialog/inkscape-preferences.cpp:888
+#: ../src/ui/dialog/inkscape-preferences.cpp:881
+#: ../src/ui/dialog/inkscape-preferences.cpp:904
 msgid "The rendering intent to use to calibrate display output."
 msgstr "L'intention de rendu à utiliser pour calibrer la sortie de l'affichage."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:867
+#: ../src/ui/dialog/inkscape-preferences.cpp:883
 msgid "Proofing"
 msgstr "Gestion des couleurs"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:869
+#: ../src/ui/dialog/inkscape-preferences.cpp:885
 msgid "Simulate output on screen"
 msgstr "Simuler la sortie à l'écran"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:871
+#: ../src/ui/dialog/inkscape-preferences.cpp:887
 msgid "Simulates output of target device."
 msgstr "Simule la sortie du périphérique cible."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:873
+#: ../src/ui/dialog/inkscape-preferences.cpp:889
 msgid "Mark out of gamut colors"
 msgstr "Marquer les couleurs hors-gamut"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:875
+#: ../src/ui/dialog/inkscape-preferences.cpp:891
 msgid "Highlights colors that are out of gamut for the target device."
 msgstr "Mettre en exergue les couleurs qui sont en-dehors du gamut pour le périphérique cible."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:880
+#: ../src/ui/dialog/inkscape-preferences.cpp:896
 msgid "Out of gamut warning color:"
 msgstr "Couleur d'avertissement hors-gamut :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:881
+#: ../src/ui/dialog/inkscape-preferences.cpp:897
 msgid "Selects the color used for out of gamut warning."
 msgstr "La couleur utilisée pour prévenir des problèmes de gamut."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:883
+#: ../src/ui/dialog/inkscape-preferences.cpp:899
 msgid "Device profile:"
 msgstr "Profil du périphérique :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:884
+#: ../src/ui/dialog/inkscape-preferences.cpp:900
 msgid "The ICC profile to use to simulate device output."
 msgstr "Le profil ICC utilisé pour simuler la sortie du périphérique."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:887
+#: ../src/ui/dialog/inkscape-preferences.cpp:903
 msgid "Device rendering intent:"
 msgstr "Intention de rendu du périphérique :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:890
+#: ../src/ui/dialog/inkscape-preferences.cpp:906
 msgid "Black point compensation"
 msgstr "Compensation du point noir"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:892
+#: ../src/ui/dialog/inkscape-preferences.cpp:908
 msgid "Enables black point compensation."
 msgstr "Active la compensation du point noir."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:894
+#: ../src/ui/dialog/inkscape-preferences.cpp:910
 msgid "Preserve black"
 msgstr "Préserver le noir"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:899
+#: ../src/ui/dialog/inkscape-preferences.cpp:915
 msgid "(LittleCMS 1.15 or later required)"
 msgstr "(LittleCMS 1.15 ou version supérieure requis)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:901
+#: ../src/ui/dialog/inkscape-preferences.cpp:917
 msgid "Preserve K channel in CMYK -> CMYK transforms"
 msgstr "Préserver la composante N dans les transformaitons CMJN > CMJN"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:914
+#: ../src/ui/dialog/inkscape-preferences.cpp:930
 #: ../src/widgets/sp-color-icc-selector.cpp:306
 #: ../src/widgets/sp-color-icc-selector.cpp:579
 msgid "<none>"
 msgstr "<aucun>"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:959
+#: ../src/ui/dialog/inkscape-preferences.cpp:975
 msgid "Color management"
 msgstr "Gestion de la couleur"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:964
+#: ../src/ui/dialog/inkscape-preferences.cpp:980
 msgid "Major grid line emphasizing"
 msgstr "Mise en valeur de la grille principale"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:966
+#: ../src/ui/dialog/inkscape-preferences.cpp:982
 msgid "Don't emphasize gridlines when zoomed out"
 msgstr "Ne pas mettre en valeur les lignes de grille lors du dézoom"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:967
+#: ../src/ui/dialog/inkscape-preferences.cpp:983
 msgid "If set and zoomed out, the gridlines will be shown in normal color instead of major grid line color."
 msgstr "Si coché, lors du dézoom, les lignes de grille seront affichées en couleur normale plutôt qu'avec la couleur de grille principale."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:969
+#: ../src/ui/dialog/inkscape-preferences.cpp:985
 msgid "Default grid settings"
 msgstr "Réglages par défaut de la grille"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:975
-#: ../src/ui/dialog/inkscape-preferences.cpp:996
+#: ../src/ui/dialog/inkscape-preferences.cpp:991
+#: ../src/ui/dialog/inkscape-preferences.cpp:1012
 msgid "Grid units:"
 msgstr "Unités de la grille :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:978
-#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:994
+#: ../src/ui/dialog/inkscape-preferences.cpp:1015
 msgid "Origin X:"
 msgstr "Origine X :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:979
-#: ../src/ui/dialog/inkscape-preferences.cpp:1000
+#: ../src/ui/dialog/inkscape-preferences.cpp:995
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
 msgid "Origin Y:"
 msgstr "Origine Y :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:982
+#: ../src/ui/dialog/inkscape-preferences.cpp:998
 msgid "Spacing X:"
 msgstr "Espacement X :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:983
-#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:1018
 msgid "Spacing Y:"
 msgstr "Espacement Y :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:985
-#: ../src/ui/dialog/inkscape-preferences.cpp:986
-#: ../src/ui/dialog/inkscape-preferences.cpp:1007
-#: ../src/ui/dialog/inkscape-preferences.cpp:1008
+#: ../src/ui/dialog/inkscape-preferences.cpp:1001
+#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:1023
+#: ../src/ui/dialog/inkscape-preferences.cpp:1024
 msgid "Grid line color:"
 msgstr "Couleur de la grille :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:986
-#: ../src/ui/dialog/inkscape-preferences.cpp:1008
+#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:1024
 msgid "Color used for normal grid lines"
 msgstr "Sélectionner la couleur utilisée pour les lignes de la grille normale"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:987
-#: ../src/ui/dialog/inkscape-preferences.cpp:988
-#: ../src/ui/dialog/inkscape-preferences.cpp:1009
-#: ../src/ui/dialog/inkscape-preferences.cpp:1010
+#: ../src/ui/dialog/inkscape-preferences.cpp:1003
+#: ../src/ui/dialog/inkscape-preferences.cpp:1004
+#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+#: ../src/ui/dialog/inkscape-preferences.cpp:1026
 msgid "Major grid line color:"
 msgstr "Couleur de la grille principale :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:988
-#: ../src/ui/dialog/inkscape-preferences.cpp:1010
+#: ../src/ui/dialog/inkscape-preferences.cpp:1004
+#: ../src/ui/dialog/inkscape-preferences.cpp:1026
 msgid "Color used for major (highlighted) grid lines"
 msgstr "Couleur des lignes de la grille principale (mise en valeur)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:990
-#: ../src/ui/dialog/inkscape-preferences.cpp:1012
+#: ../src/ui/dialog/inkscape-preferences.cpp:1006
+#: ../src/ui/dialog/inkscape-preferences.cpp:1028
 msgid "Major grid line every:"
 msgstr "Grille principale toutes les :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:991
+#: ../src/ui/dialog/inkscape-preferences.cpp:1007
 msgid "Show dots instead of lines"
 msgstr "Afficher des points plutôt que des lignes"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:992
+#: ../src/ui/dialog/inkscape-preferences.cpp:1008
 msgid "If set, display dots at gridpoints instead of gridlines"
 msgstr "Cocher pour afficher des points aux intersections de la grille plutôt que des lignes"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1019
+#: ../src/ui/dialog/inkscape-preferences.cpp:1035
 msgid "Use named colors"
 msgstr "Utiliser les couleurs nommées"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1020
+#: ../src/ui/dialog/inkscape-preferences.cpp:1036
 msgid "If set, write the CSS name of the color when available (e.g. 'red' or 'magenta') instead of the numeric value"
 msgstr "Si coché, écrit le nom CSS de la couleur si elle est disponible (rouge ou magenta, par exemple) à la place de sa valeur numérique"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1022
+#: ../src/ui/dialog/inkscape-preferences.cpp:1038
 msgid "XML formatting"
 msgstr "Formatage XML"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1024
+#: ../src/ui/dialog/inkscape-preferences.cpp:1040
 msgid "Inline attributes"
 msgstr "Attributs en ligne"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+#: ../src/ui/dialog/inkscape-preferences.cpp:1041
 msgid "Put attributes on the same line as the element tag"
 msgstr "Place les attributs sur la même ligne que l'étiquette de l'élément"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+#: ../src/ui/dialog/inkscape-preferences.cpp:1044
 msgid "Indent, spaces:"
 msgstr "Distance d'indentation (en espaces) :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+#: ../src/ui/dialog/inkscape-preferences.cpp:1044
 msgid "The number of spaces to use for indenting nested elements; set to 0 for no indentation"
 msgstr "Le nombre d'espaces utilisés pour l'indentation d'éléments imbriqués ; définir à 0 pour désactiver l'indentation"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1030
+#: ../src/ui/dialog/inkscape-preferences.cpp:1046
 msgid "Path data"
 msgstr "Données de chemin"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1032
+#: ../src/ui/dialog/inkscape-preferences.cpp:1048
 msgid "Allow relative coordinates"
 msgstr "Autorise les coordonnées relatives"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1033
+#: ../src/ui/dialog/inkscape-preferences.cpp:1049
 msgid "If set, relative coordinates may be used in path data"
 msgstr "Si coché, les coordonnées relatives peuvent être utilisées dans les données du chemin"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1035
+#: ../src/ui/dialog/inkscape-preferences.cpp:1051
 msgid "Force repeat commands"
 msgstr "Imposer les commandes répétitives"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1036
+#: ../src/ui/dialog/inkscape-preferences.cpp:1052
 msgid "Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead of 'L 1,2 3,4')"
 msgstr "Si coché, impose la répétition de la même commande de chemin (écrit  'L 1,2 L 3,4' à la place de 'L 1,2 3,4')."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1038
+#: ../src/ui/dialog/inkscape-preferences.cpp:1054
 msgid "Numbers"
 msgstr "Nombres"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1041
+#: ../src/ui/dialog/inkscape-preferences.cpp:1057
 msgid "Numeric precision:"
 msgstr "Précision numérique :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1041
+#: ../src/ui/dialog/inkscape-preferences.cpp:1057
 msgid "How many digits to write after the decimal dot"
 msgstr "Combien de chiffres écrire après le point décimal"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1044
+#: ../src/ui/dialog/inkscape-preferences.cpp:1060
 msgid "Minimum exponent:"
 msgstr "Exposant minimum :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1044
+#: ../src/ui/dialog/inkscape-preferences.cpp:1060
 msgid "The smallest number written to SVG is 10 to the power of this exponent; anything smaller is written as zero."
 msgstr "La taille minimale d'un nombre écrite dans le SVG est 10 à la puissance de cet exposant ; les nombres plus petits s'écriront zéro."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1046
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "SVG output"
 msgstr "Sortie SVG"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "System default"
 msgstr "Valeur par défaut du système d'exploitation"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Albanian (sq)"
 msgstr "Albanais (sq)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Amharic (am)"
 msgstr "Amharique (am)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Arabic (ar)"
 msgstr "Arabe (ar)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Armenian (hy)"
 msgstr "Arménien (hy)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Azerbaijani (az)"
 msgstr "Azéri (az)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Basque (eu)"
 msgstr "Basque (eu)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Belarusian (be)"
 msgstr "Biélorusse (be)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Bulgarian (bg)"
 msgstr "Bulgare (bg)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Bengali (bn)"
 msgstr "Bengali (bn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Breton (br)"
 msgstr "Breton (br)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Catalan (ca)"
 msgstr "Catalan (ca)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Valencian Catalan (ca@valencia)"
 msgstr "Catalan Valencien (ca@valencia)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Chinese/China (zh_CN)"
 msgstr "Chinois/Chine (zh_CN)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Chinese/Taiwan (zh_TW)"
 msgstr "Chinois/Taïwan (zh_TW)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Croatian (hr)"
 msgstr "Croate (hr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Czech (cs)"
 msgstr "Tchèque (cs)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Danish (da)"
 msgstr "Danois (da)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Dutch (nl)"
 msgstr "Néerlandais (nl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Dzongkha (dz)"
 msgstr "Dzongkha (dz)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "German (de)"
 msgstr "Allemand (de)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Greek (el)"
 msgstr "Grec (el)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "English (en)"
 msgstr "Anglais (en)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "English/Australia (en_AU)"
 msgstr "Anglais/Australie (en_AU)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "English/Canada (en_CA)"
 msgstr "Anglais/Canada (en_CA)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "English/Great Britain (en_GB)"
 msgstr "Anglais/Grande-Bretagne (en_GB)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Pig Latin (en_US@piglatin)"
 msgstr "Pig Latin (en_US@piglatin)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Esperanto (eo)"
 msgstr "Espéranto (eo)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Estonian (et)"
 msgstr "Estonien (et)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Finnish (fi)"
 msgstr "Finnois (fi)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "French (fr)"
 msgstr "Français (fr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Irish (ga)"
 msgstr "Irlandais (ga)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Galician (gl)"
 msgstr "Galicien (gl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Hebrew (he)"
 msgstr "Hébreu (he)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Hungarian (hu)"
 msgstr "Hongrois (hu)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Indonesian (id)"
 msgstr "Indonésien (id)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Italian (it)"
 msgstr "Italien (it)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Japanese (ja)"
 msgstr "Japonais (ja)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Khmer (km)"
 msgstr "Khmer (km)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Kinyarwanda (rw)"
 msgstr "Kinyarouanda (rw)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Korean (ko)"
 msgstr "Coréen (ko)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Lithuanian (lt)"
 msgstr "Lituanien (lt)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Macedonian (mk)"
 msgstr "Macédonien (mk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Mongolian (mn)"
 msgstr "Mongol (mn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Nepali (ne)"
 msgstr "Népalais (ne)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Norwegian Bokmål (nb)"
 msgstr "Norvégien Bokmål (nb)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Norwegian Nynorsk (nn)"
 msgstr "Norvégien Nynorsk (nn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Panjabi (pa)"
 msgstr "Panjabi (pa)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Polish (pl)"
 msgstr "Polonais (pl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Portuguese (pt)"
 msgstr "Portugais (pt)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Portuguese/Brazil (pt_BR)"
 msgstr "Portugais/Brésil (pt_BR)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Romanian (ro)"
 msgstr "Roumain (ro)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Russian (ru)"
 msgstr "Russe (ru)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Serbian (sr)"
 msgstr "Serbe (sr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Serbian in Latin script (sr@latin)"
 msgstr "Serbe en alphabet latin (sr@latin)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Slovak (sk)"
 msgstr "Slovaque (sk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Slovenian (sl)"
 msgstr "Slovène (sl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Spanish (es)"
 msgstr "Espagnol (es)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Spanish/Mexico (es_MX)"
 msgstr "Espagnol/Mexique (es_MX)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Swedish (sv)"
 msgstr "Suédois (sv)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Thai (th)"
 msgstr "Thaï (th)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Turkish (tr)"
 msgstr "Turc (tr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Ukrainian (uk)"
 msgstr "Ukrainien (uk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Vietnamese (vi)"
 msgstr "Vietnamien (vi)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1069
+#: ../src/ui/dialog/inkscape-preferences.cpp:1085
 msgid "Language (requires restart):"
 msgstr "Langue (nécessite un redémarrage)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1070
+#: ../src/ui/dialog/inkscape-preferences.cpp:1086
 msgid "Set the language for menus and number formats"
 msgstr "Définit la langue pour les menus et les formats numériques"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/ui/dialog/inkscape-preferences.cpp:1088
 msgid "Smaller"
 msgstr "Minuscule"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1076
+#: ../src/ui/dialog/inkscape-preferences.cpp:1092
 msgid "Toolbox icon size"
 msgstr "Taille des icônes de la barre d'outils"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1077
+#: ../src/ui/dialog/inkscape-preferences.cpp:1093
 msgid "Set the size for the tool icons (requires restart)"
 msgstr "Définit la taille des icônes de la barre d'outils (nécessite un redémarrage)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1080
+#: ../src/ui/dialog/inkscape-preferences.cpp:1096
 msgid "Control bar icon size"
 msgstr "Taille des icônes de la barre de contrôle des outils"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1081
+#: ../src/ui/dialog/inkscape-preferences.cpp:1097
 msgid "Set the size for the icons in tools' control bars to use (requires restart)"
 msgstr "Définit la taille des icônes de la barre de contrôle des outils (nécessite un redémarrage)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1084
+#: ../src/ui/dialog/inkscape-preferences.cpp:1100
 msgid "Secondary toolbar icon size"
 msgstr "Taille des icônes de la barre d'outils secondaire"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1085
+#: ../src/ui/dialog/inkscape-preferences.cpp:1101
 msgid "Set the size for the icons in secondary toolbars to use (requires restart)"
 msgstr "Définit la taille des icônes de la barre d'outils secondaire (nécessite un redémarrage)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1088
+#: ../src/ui/dialog/inkscape-preferences.cpp:1104
 msgid "Work-around color sliders not drawing."
 msgstr "Contourner le non affichage des barres de défilement de couleur."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1090
+#: ../src/ui/dialog/inkscape-preferences.cpp:1106
 msgid "When on, will attempt to work around bugs in certain GTK themes drawing color sliders."
 msgstr "Si activé, essayera de contourner un bug d'affichage des barres de défilement de couleur lié à certains thèmes GTK."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1096
+#: ../src/ui/dialog/inkscape-preferences.cpp:1112
 msgid "Clear list"
 msgstr "Effacer la liste"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1101
+#: ../src/ui/dialog/inkscape-preferences.cpp:1117
 msgid "Maximum documents in Open Recent:"
 msgstr "Nombre maximum de documents récents :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1102
+#: ../src/ui/dialog/inkscape-preferences.cpp:1118
 msgid "Set the maximum length of the Open Recent list in the File menu, or clear the list"
 msgstr "Définit la longueur maximum de la liste « Documents récents » dans le menu « Fichier », ou efface la liste"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1105
+#: ../src/ui/dialog/inkscape-preferences.cpp:1121
 msgid "Zoom correction factor (in %):"
 msgstr "Niveau de correction du zoom (en %) :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1106
+#: ../src/ui/dialog/inkscape-preferences.cpp:1122
 msgid "Adjust the slider until the length of the ruler on your screen matches its real length. This information is used when zooming to 1:1, 1:2, etc., to display objects in their true sizes"
 msgstr "Ajuster le curseur pour faire correspondre la longueur de la règle sur l'écran avec sa vraie valeur. Cette information est utilisée lors des zoom de niveau 1:1, 1:2, etc. pour afficher les objets avec leur taille exacte"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1108
+#: ../src/ui/dialog/inkscape-preferences.cpp:1124
 msgid "Interface"
 msgstr "Interface"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1114
+#: ../src/ui/dialog/inkscape-preferences.cpp:1130
 msgid "Use current directory for \"Save As ...\""
 msgstr "« Enregistrer sous... » utilise le dossier courant "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1116
+#: ../src/ui/dialog/inkscape-preferences.cpp:1132
 msgid "When this option is on, the \"Save as...\" dialog will always open in the directory where the currently open document is. When it's off, it will open in the directory where you last saved a file using that dialog."
 msgstr "Lorsque cette option est active, la boîte de dialogue « Enregistrer sous... » s'ouvre toujours dans le dossier contenant le document actuellement ouvert. Si l'option est désactivée, elle ouvre alors le dernier dossier dans lequel un fichier a été enregistré avec cette boîte de dialogue."
 
 #. Autosave options
-#: ../src/ui/dialog/inkscape-preferences.cpp:1120
+#: ../src/ui/dialog/inkscape-preferences.cpp:1136
 msgid "Enable autosave (requires restart)"
 msgstr "Activer l'enregistrement automatique (nécessite un redémarrage)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1121
+#: ../src/ui/dialog/inkscape-preferences.cpp:1137
 msgid "Automatically save the current document(s) at a given interval, thus minimizing loss in case of a crash"
 msgstr "Enregistre automatiquement les documents en cours, à intervalle donné, pour diminuer les risques de perte de données en cas de plantage de l'application"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1123
+#: ../src/ui/dialog/inkscape-preferences.cpp:1139
 msgid "Interval (in minutes):"
 msgstr "Intervalle (en minutes) :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1123
+#: ../src/ui/dialog/inkscape-preferences.cpp:1139
 msgid "Interval (in minutes) at which document will be autosaved"
 msgstr "Définit l'intervalle (en minutes) auquel l'espace de travail sera enregistré automatiquement"
 
 #. TRANSLATORS: only translate "string" in "context|string".
 #. For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS
-#: ../src/ui/dialog/inkscape-preferences.cpp:1127
+#: ../src/ui/dialog/inkscape-preferences.cpp:1143
 msgid "filesystem|Path:"
 msgstr "Chemin :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1127
+#: ../src/ui/dialog/inkscape-preferences.cpp:1143
 msgid "The directory where autosaves will be written"
 msgstr "Définit l'emplacement des enregistrements automatiques"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1129
+#: ../src/ui/dialog/inkscape-preferences.cpp:1145
 msgid "Maximum number of autosaves:"
 msgstr "Nombre maximum d'enregistrements :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1129
+#: ../src/ui/dialog/inkscape-preferences.cpp:1145
 msgid "Maximum number of autosaved files; use this to limit the storage space used"
 msgstr "Nombre maximum d'enregistrements automatiques ; utiliser cette valeur pour limiter l'espace de stockage utilisé"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
 msgid "2x2"
 msgstr "2x2"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
 msgid "4x4"
 msgstr "4x4"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
 msgid "8x8"
 msgstr "8x8"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
 msgid "16x16"
 msgstr "16x16"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1155
+#: ../src/ui/dialog/inkscape-preferences.cpp:1171
 msgid "Oversample bitmaps:"
 msgstr "Sur-échantilloner les bitmaps :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1158
+#: ../src/ui/dialog/inkscape-preferences.cpp:1174
 msgid "Automatically reload bitmaps"
 msgstr "Recharger automatiquement les bitmaps"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1160
+#: ../src/ui/dialog/inkscape-preferences.cpp:1176
 msgid "Automatically reload linked images when file is changed on disk"
 msgstr "Active le rechargement automatique des images liées lorsqu'elles ont été modifiées sur le disque"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1174
+#: ../src/ui/dialog/inkscape-preferences.cpp:1190
 msgid "Bitmap editor:"
 msgstr "Éditeur de bitmap :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1180
+#: ../src/ui/dialog/inkscape-preferences.cpp:1196
 msgid "Resolution for Create Bitmap Copy:"
 msgstr "Résolution pour Créer une copie bitmap :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1181
+#: ../src/ui/dialog/inkscape-preferences.cpp:1197
 msgid "Resolution used by the Create Bitmap Copy command"
 msgstr "Résolution utilisée par la commande Créer une copie bitmap"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1183
+#: ../src/ui/dialog/inkscape-preferences.cpp:1199
 msgid "Bitmaps"
 msgstr "Bitmaps"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1235
+#: ../src/ui/dialog/inkscape-preferences.cpp:1251
 msgid "Language:"
 msgstr "Langue principale :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1236
+#: ../src/ui/dialog/inkscape-preferences.cpp:1252
 msgid "Set the main spell check language"
 msgstr "Définit la langue principale du correcteur orthographique"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1239
+#: ../src/ui/dialog/inkscape-preferences.cpp:1255
 msgid "Second language:"
 msgstr "Deuxième langue :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1240
+#: ../src/ui/dialog/inkscape-preferences.cpp:1256
 msgid "Set the second spell check language; checking will only stop on words unknown in ALL chosen languages"
 msgstr "Définit la deuxième langue du correcteur orthographique ; la vérification ne s'arrêtera que sur les mots inconnus de toutes les langues sélectionnées"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1243
+#: ../src/ui/dialog/inkscape-preferences.cpp:1259
 msgid "Third language:"
 msgstr "Troisième langue :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1244
+#: ../src/ui/dialog/inkscape-preferences.cpp:1260
 msgid "Set the third spell check language; checking will only stop on words unknown in ALL chosen languages"
 msgstr "Définit la troisième langue du correcteur orthographique ; la vérification ne s'arrêtera que sur les mots inconnus de toutes les langues sélectionnées"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1246
+#: ../src/ui/dialog/inkscape-preferences.cpp:1262
 msgid "Ignore words with digits"
 msgstr "Ignorer les mots contenant des chiffres"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1248
+#: ../src/ui/dialog/inkscape-preferences.cpp:1264
 msgid "Ignore words containing digits, such as \"R2D2\""
 msgstr "Ignorer les mots contenant des chiffres, comme « R2D2 »"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1250
+#: ../src/ui/dialog/inkscape-preferences.cpp:1266
 msgid "Ignore words in ALL CAPITALS"
 msgstr "Ignorer les mots tout en capitales"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1252
+#: ../src/ui/dialog/inkscape-preferences.cpp:1268
 msgid "Ignore words in all capitals, such as \"IUPAC\""
 msgstr "Ignorer les mots tout en capitales, comme « GNU »"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1254
+#: ../src/ui/dialog/inkscape-preferences.cpp:1270
 msgid "Spellcheck"
 msgstr "Vérification orthographique"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1273
+#: ../src/ui/dialog/inkscape-preferences.cpp:1289
 msgid "Add label comments to printing output"
 msgstr "Ajouter les labels de commentaires à l'impression"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1275
+#: ../src/ui/dialog/inkscape-preferences.cpp:1291
 msgid "When on, a comment will be added to the raw print output, marking the rendered output for an object with its label"
 msgstr "Si coché, un commentaire est ajouté à l'impression brute, signalant le rendu d'un objet avec son label"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1277
+#: ../src/ui/dialog/inkscape-preferences.cpp:1293
 msgid "Prevent sharing of gradient definitions"
 msgstr "Interdire le partage des définitions de dégradé"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1279
+#: ../src/ui/dialog/inkscape-preferences.cpp:1295
 msgid "When on, shared gradient definitions are automatically forked on change; uncheck to allow sharing of gradient definitions so that editing one object may affect other objects using the same gradient"
 msgstr "Si coché, les définitions communes de dégradés sont automatiquement dupliquées lors d'une modification; décocher pour autoriser le partage des définitions de dégradé de manière à ce que la modification d'un objet puisse affecter tous les objets utilisant le même dégradé"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1282
+#: ../src/ui/dialog/inkscape-preferences.cpp:1298
 msgid "Simplification threshold:"
 msgstr "Seuil de simplification :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1283
+#: ../src/ui/dialog/inkscape-preferences.cpp:1299
 msgid "How strong is the Node tool's Simplify command by default. If you invoke this command several times in quick succession, it will act more and more aggressively; invoking it again after a pause restores the default threshold."
 msgstr "Force par défaut de la commande Simplifier. En faisant appel à cette commande plusieurs fois de suite, elle agira de façon de plus en plus agressive ; un appel après une pause restaurera la valeur par défaut."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1286
+#: ../src/ui/dialog/inkscape-preferences.cpp:1302
 msgid "Latency skew:"
 msgstr "Décalage temporel :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1286
-msgid "(requires restart)"
-msgstr "(nécessite un redémarrage)"
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:1287
+#: ../src/ui/dialog/inkscape-preferences.cpp:1303
 msgid "Factor by which the event clock is skewed from the actual time (0.9766 on some systems)."
 msgstr "Facteur de décalage entre l'horloge de l'événement et le temps réel (0,9766 sur certain systèmes)."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1289
+#: ../src/ui/dialog/inkscape-preferences.cpp:1305
 msgid "Pre-render named icons"
 msgstr "Préafficher les icônes nommées"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1291
+#: ../src/ui/dialog/inkscape-preferences.cpp:1307
 msgid "When on, named icons will be rendered before displaying the ui. This is for working around bugs in GTK+ named icon notification"
 msgstr "Si coché, les icônes nommées sont rendues avant l'affichage de l'interface utilisateur. Il s'agit du contournement d'un bug sur la notification des icônes nommées dans GTK+."
 
 #. TRANSLATORS: following strings are paths in Inkscape preferences - Misc - System info
-#: ../src/ui/dialog/inkscape-preferences.cpp:1297
+#: ../src/ui/dialog/inkscape-preferences.cpp:1313
 msgid "User config: "
 msgstr "Configuration utilisateur : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1301
+#: ../src/ui/dialog/inkscape-preferences.cpp:1317
 msgid "User data: "
 msgstr "Données utilisateur : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1305
+#: ../src/ui/dialog/inkscape-preferences.cpp:1321
 msgid "User cache: "
 msgstr "Cache utilisateur : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1309
+#: ../src/ui/dialog/inkscape-preferences.cpp:1325
 msgid "System config: "
 msgstr "Configuration système : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1312
+#: ../src/ui/dialog/inkscape-preferences.cpp:1328
 msgid "System data: "
 msgstr "Données système : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1315
+#: ../src/ui/dialog/inkscape-preferences.cpp:1331
 msgid "PIXMAP: "
 msgstr "Pixmap : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1319
+#: ../src/ui/dialog/inkscape-preferences.cpp:1335
 msgid "DATA: "
 msgstr "Données : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1323
+#: ../src/ui/dialog/inkscape-preferences.cpp:1339
 msgid "UI: "
 msgstr "Interface utilisateur : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1332
+#: ../src/ui/dialog/inkscape-preferences.cpp:1348
 msgid "Icon theme: "
 msgstr "Thème d'icônes : "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1347
+#: ../src/ui/dialog/inkscape-preferences.cpp:1363
 msgid "System info"
 msgstr "Informations système"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1347
+#: ../src/ui/dialog/inkscape-preferences.cpp:1363
 msgid "General system information"
 msgstr "Informations générales"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1349
+#: ../src/ui/dialog/inkscape-preferences.cpp:1365
 msgid "Misc"
 msgstr "Divers"
 
@@ -13945,6 +14018,10 @@ msgstr "On ne peut sélectionner qu'un objet à la fois"
 msgid "Empty selection"
 msgstr "Sélection vide"
 
+#: ../src/ui/dialog/livepatheffect-editor.cpp:308
+msgid "Unknown effect"
+msgstr "Un effet inconnu est appliqué"
+
 #: ../src/ui/dialog/livepatheffect-editor.cpp:374
 msgid "Create and apply path effect"
 msgstr "Créer et appliquer un effet de chemin"
@@ -14088,8 +14165,95 @@ msgstr "Résultat"
 msgid "Errors"
 msgstr "Erreurs"
 
-#: ../src/ui/dialog/svg-fonts-dialog.cpp:121
-msgid "Set SVG Font attribute"
+#: ../src/ui/dialog/spray-option.cpp:154
+#: ../share/extensions/polyhedron_3d.inx.h:26
+msgid "Minimum"
+msgstr "Minimum"
+
+#: ../src/ui/dialog/spray-option.cpp:156
+msgid "Min"
+msgstr "Min"
+
+#: ../src/ui/dialog/spray-option.cpp:164
+#: ../share/extensions/polyhedron_3d.inx.h:24
+msgid "Maximum"
+msgstr "Maximum"
+
+#: ../src/ui/dialog/spray-option.cpp:166
+msgid "Max:"
+msgstr "Max :"
+
+#: ../src/ui/dialog/spray-option.cpp:245
+msgid "sprayOptions|Distribution"
+msgstr "Distribution"
+
+#: ../src/ui/dialog/spray-option.cpp:246
+msgid "sprayOptions|Cursor Options"
+msgstr "Options du curseur"
+
+#: ../src/ui/dialog/spray-option.cpp:247
+msgid "sprayOptions|Random Options"
+msgstr "Options aléatoires"
+
+#. ComboBoxText
+#: ../src/ui/dialog/spray-option.cpp:251
+#: ../src/ui/dialog/spray-option.cpp:260
+msgid "sprayOptions|Uniform"
+msgstr "Uniforme"
+
+#: ../src/ui/dialog/spray-option.cpp:252
+#: ../src/ui/dialog/spray-option.cpp:261
+msgid "sprayOptions|Gaussian"
+msgstr "Gaussienne"
+
+#: ../src/ui/dialog/spray-option.cpp:253
+msgid "sprayOptions|Distribution:"
+msgstr "Distribution :"
+
+#. Hbox Random
+#: ../src/ui/dialog/spray-option.cpp:277
+msgid "sprayOptions|Scale:"
+msgstr "Échelle :"
+
+#: ../src/ui/dialog/spray-option.cpp:277
+msgid "Apply a scale factor"
+msgstr "Appliquer un facteur d'échelle"
+
+#: ../src/ui/dialog/spray-option.cpp:278
+msgid "sprayOptions|Rotation:"
+msgstr "Rotation :"
+
+#: ../src/ui/dialog/spray-option.cpp:278
+msgid "Apply rotation"
+msgstr "Appliquer une totation"
+
+#. Hbox Cursor
+#: ../src/ui/dialog/spray-option.cpp:287
+msgid "sprayOptions|Ratio:"
+msgstr "Rapport :"
+
+#: ../src/ui/dialog/spray-option.cpp:287
+msgid "Eccentricity of the ellipse"
+msgstr "Excentricité de l'ellipse"
+
+#: ../src/ui/dialog/spray-option.cpp:288
+msgid "sprayOptions|Angle:"
+msgstr "Angle :"
+
+#: ../src/ui/dialog/spray-option.cpp:288
+msgid "Angle of the ellipse"
+msgstr "Angle de l'ellipse"
+
+#: ../src/ui/dialog/spray-option.cpp:289
+msgid "sprayOptions|Width:"
+msgstr "Largeur :"
+
+#: ../src/ui/dialog/spray-option.cpp:289
+msgid "Size of the ellipse"
+msgstr "Taille de l'ellipse"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:121
+msgid "Set SVG Font attribute"
 msgstr "Définir l'attribut de fonte SVG"
 
 #: ../src/ui/dialog/svg-fonts-dialog.cpp:174
@@ -14516,7 +14680,8 @@ msgstr "Passes multiples : crée un groupe de chemins"
 #. # end multiple scan
 #. ## end mode page
 #: ../src/ui/dialog/tracedialog.cpp:563
-#: ../src/widgets/toolbox.cpp:4249
+#: ../src/widgets/toolbox.cpp:4276
+#: ../src/widgets/toolbox.cpp:4544
 #: ../share/extensions/triangle.inx.h:9
 msgid "Mode"
 msgstr "Mode"
@@ -14568,6 +14733,7 @@ msgstr "Tolérance :"
 #: ../src/ui/dialog/tracedialog.cpp:623
 #: ../share/extensions/dxf_input.inx.h:11
 #: ../share/extensions/dxf_outlines.inx.h:9
+#: ../share/extensions/scour.inx.h:10
 msgid "Options"
 msgstr "Options"
 
@@ -14759,47 +14925,47 @@ msgstr "Appliquer la transformation à la sélection"
 msgid "Edit transformation matrix"
 msgstr "Éditer la matrice de transformation"
 
-#: ../src/ui/view/edit-widget.cpp:330
-#: ../src/ui/view/edit-widget.cpp:335
-#: ../src/ui/view/edit-widget.cpp:343
-#: ../src/ui/view/edit-widget.cpp:348
-#: ../src/ui/view/edit-widget.cpp:353
-#: ../src/ui/view/edit-widget.cpp:368
-#: ../src/ui/view/edit-widget.cpp:381
-#: ../src/ui/view/edit-widget.cpp:386
-#: ../src/ui/view/edit-widget.cpp:400
-#: ../src/ui/view/edit-widget.cpp:404
-#: ../src/ui/view/edit-widget.cpp:412
-#: ../src/ui/view/edit-widget.cpp:416
-#: ../src/ui/view/edit-widget.cpp:420
-#: ../src/ui/view/edit-widget.cpp:756
-#: ../src/ui/view/edit-widget.cpp:761
-#: ../src/ui/view/edit-widget.cpp:867
-#: ../src/ui/view/edit-widget.cpp:871
-#: ../src/ui/view/edit-widget.cpp:992
+#: ../src/ui/view/edit-widget.cpp:336
+#: ../src/ui/view/edit-widget.cpp:341
+#: ../src/ui/view/edit-widget.cpp:349
+#: ../src/ui/view/edit-widget.cpp:354
+#: ../src/ui/view/edit-widget.cpp:359
+#: ../src/ui/view/edit-widget.cpp:374
+#: ../src/ui/view/edit-widget.cpp:387
+#: ../src/ui/view/edit-widget.cpp:392
+#: ../src/ui/view/edit-widget.cpp:406
+#: ../src/ui/view/edit-widget.cpp:410
+#: ../src/ui/view/edit-widget.cpp:418
+#: ../src/ui/view/edit-widget.cpp:422
+#: ../src/ui/view/edit-widget.cpp:426
+#: ../src/ui/view/edit-widget.cpp:762
+#: ../src/ui/view/edit-widget.cpp:767
+#: ../src/ui/view/edit-widget.cpp:873
+#: ../src/ui/view/edit-widget.cpp:877
+#: ../src/ui/view/edit-widget.cpp:998
 msgid "PLACEHOLDER, do not translate"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1051
+#: ../src/ui/view/edit-widget.cpp:1057
 #: ../src/widgets/desktop-widget.cpp:379
 msgid "Zoom drawing if window size changes"
 msgstr "Zoomer le dessin si les dimensions de la fenêtre sont modifiées"
 
-#: ../src/ui/view/edit-widget.cpp:1072
+#: ../src/ui/view/edit-widget.cpp:1078
 #: ../src/widgets/desktop-widget.cpp:503
 msgid "Cursor coordinates"
 msgstr "Coordonnées du curseur"
 
-#: ../src/ui/view/edit-widget.cpp:1082
+#: ../src/ui/view/edit-widget.cpp:1088
 #: ../src/widgets/desktop-widget.cpp:518
 msgid "Z:"
 msgstr "Z :"
 
-#: ../src/ui/view/edit-widget.cpp:1089
+#: ../src/ui/view/edit-widget.cpp:1095
 msgid "<b>Welcome to Inkscape!</b> Use shape or drawing tools to create objects; use selector (arrow) to move or transform them."
 msgstr "<b>Bienvenue dans Inkscape !</b> Utilisez les outils de formes ou de dessin à main levée pour créer des objets; utilisez les sélecteurs (flèches) pour les déplacer ou les modifier."
 
-#: ../src/ui/view/edit-widget.cpp:1200
+#: ../src/ui/view/edit-widget.cpp:1206
 #: ../src/widgets/desktop-widget.cpp:838
 #, c-format
 msgid ""
@@ -14811,14 +14977,14 @@ msgstr ""
 "\n"
 "Si vous fermez sans enregistrer, vos modifications seront perdues."
 
-#: ../src/ui/view/edit-widget.cpp:1211
-#: ../src/ui/view/edit-widget.cpp:1259
+#: ../src/ui/view/edit-widget.cpp:1217
+#: ../src/ui/view/edit-widget.cpp:1265
 #: ../src/widgets/desktop-widget.cpp:845
 #: ../src/widgets/desktop-widget.cpp:902
 msgid "Close _without saving"
 msgstr "Fermer _sans enregistrer"
 
-#: ../src/ui/view/edit-widget.cpp:1247
+#: ../src/ui/view/edit-widget.cpp:1253
 #: ../src/widgets/desktop-widget.cpp:894
 #, c-format
 msgid ""
@@ -14830,7 +14996,7 @@ msgstr ""
 "\n"
 "Voulez-vous enregistrer ce fichier au format Inkscape SVG ?"
 
-#: ../src/ui/view/edit-widget.cpp:1262
+#: ../src/ui/view/edit-widget.cpp:1268
 #: ../src/widgets/desktop-widget.cpp:905
 msgid "_Save as SVG"
 msgstr "Enregi_strer comme SVG"
@@ -14877,48 +15043,48 @@ msgstr "Modifier le flou"
 msgid "Change opacity"
 msgstr "Modifier l'opacité"
 
-#: ../src/ui/widget/page-sizer.cpp:209
+#: ../src/ui/widget/page-sizer.cpp:229
 msgid "U_nits:"
 msgstr "U_nités :"
 
-#: ../src/ui/widget/page-sizer.cpp:210
+#: ../src/ui/widget/page-sizer.cpp:230
 msgid "Width of paper"
 msgstr "Largeur de papier"
 
-#: ../src/ui/widget/page-sizer.cpp:211
+#: ../src/ui/widget/page-sizer.cpp:231
 msgid "Height of paper"
 msgstr "Hauteur de papier"
 
-#: ../src/ui/widget/page-sizer.cpp:257
+#: ../src/ui/widget/page-sizer.cpp:277
 msgid "P_age size:"
 msgstr "Dimensions de la p_age :"
 
-#: ../src/ui/widget/page-sizer.cpp:265
+#: ../src/ui/widget/page-sizer.cpp:285
 msgid "Page orientation:"
 msgstr "Orientation de la page :"
 
-#: ../src/ui/widget/page-sizer.cpp:268
+#: ../src/ui/widget/page-sizer.cpp:288
 msgid "_Landscape"
 msgstr "Pa_ysage"
 
-#: ../src/ui/widget/page-sizer.cpp:273
+#: ../src/ui/widget/page-sizer.cpp:293
 msgid "_Portrait"
 msgstr "_Portrait"
 
 #. ## Set up custom size frame
-#: ../src/ui/widget/page-sizer.cpp:280
+#: ../src/ui/widget/page-sizer.cpp:300
 msgid "Custom size"
 msgstr "Dimensions personnalisées"
 
-#: ../src/ui/widget/page-sizer.cpp:293
+#: ../src/ui/widget/page-sizer.cpp:313
 msgid "_Fit page to selection"
 msgstr "A_juster la page à la sélection"
 
-#: ../src/ui/widget/page-sizer.cpp:294
+#: ../src/ui/widget/page-sizer.cpp:314
 msgid "Resize the page to fit the current selection, or the entire drawing if there is no selection"
 msgstr "Redimensionner la page pour l'ajuster à la sélection, ou au dessin entier s'il n'y a pas de sélection"
 
-#: ../src/ui/widget/page-sizer.cpp:357
+#: ../src/ui/widget/page-sizer.cpp:377
 msgid "Set page size"
 msgstr "Définir les dimensions de la page"
 
@@ -15198,8 +15364,8 @@ msgstr "Blanc"
 
 #: ../src/ui/widget/selected-style.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:238
-#: ../src/widgets/sp-color-scales.cpp:463
-#: ../src/widgets/sp-color-scales.cpp:464
+#: ../src/widgets/sp-color-scales.cpp:475
+#: ../src/widgets/sp-color-scales.cpp:476
 msgid "Black"
 msgstr "Noir"
 
@@ -15535,1723 +15701,1739 @@ msgstr "Retourner verticalement"
 #. TRANSLATORS: If you have translated the tutorial-basic.svg file to your language,
 #. then translate this string as "tutorial-basic.LANG.svg" (where LANG is your language
 #. code); otherwise leave as "tutorial-basic.svg".
-#: ../src/verbs.cpp:1912
+#: ../src/verbs.cpp:1922
 msgid "tutorial-basic.svg"
 msgstr "tutorial-basic.fr.svg"
 
 # Name of the displayed file (in Help > tutorials > ...). To be translated if the tutorial has been translated.
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1916
+#: ../src/verbs.cpp:1926
 msgid "tutorial-shapes.svg"
 msgstr "tutorial-shapes.fr.svg"
 
 # Name of the displayed file (in Help > tutorials > ...). To be translated if the tutorial has been translated.
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1920
+#: ../src/verbs.cpp:1930
 msgid "tutorial-advanced.svg"
 msgstr "tutorial-advanced.fr.svg"
 
 # Name of the displayed file (in Help > tutorials > ...). To be translated if the tutorial has been translated.
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1924
+#: ../src/verbs.cpp:1934
 msgid "tutorial-tracing.svg"
 msgstr "tutorial-tracing.fr.svg"
 
 # Name of the displayed file (in Help > tutorials > ...). To be translated if the tutorial has been translated.
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1928
+#: ../src/verbs.cpp:1938
 msgid "tutorial-calligraphy.svg"
 msgstr "tutorial-calligraphy.fr.svg"
 
 # Name of the displayed file (in Help > tutorials > ...). To be translated if the tutorial has been translated.
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1932
+#: ../src/verbs.cpp:1942
 msgid "tutorial-elements.svg"
 msgstr "tutorial-elements.fr.svg"
 
 # Name of the displayed file (in Help > tutorials > ...). To be translated if the tutorial has been translated.
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1936
+#: ../src/verbs.cpp:1946
 msgid "tutorial-tips.svg"
 msgstr "tutorial-tips.fr.svg"
 
-#: ../src/verbs.cpp:2212
-#: ../src/verbs.cpp:2731
+#: ../src/verbs.cpp:2222
+#: ../src/verbs.cpp:2747
 msgid "Unlock all objects in the current layer"
 msgstr "Déverrouiller tous les objets sur le calque courant"
 
-#: ../src/verbs.cpp:2216
-#: ../src/verbs.cpp:2733
+#: ../src/verbs.cpp:2226
+#: ../src/verbs.cpp:2749
 msgid "Unlock all objects in all layers"
 msgstr "Déverouiller tous les objets sur tous les calques"
 
-#: ../src/verbs.cpp:2220
-#: ../src/verbs.cpp:2735
+#: ../src/verbs.cpp:2230
+#: ../src/verbs.cpp:2751
 msgid "Unhide all objects in the current layer"
 msgstr "Montrer tous les objets sur le calque courant"
 
-#: ../src/verbs.cpp:2224
-#: ../src/verbs.cpp:2737
+#: ../src/verbs.cpp:2234
+#: ../src/verbs.cpp:2753
 msgid "Unhide all objects in all layers"
 msgstr "Montrer tous les objets sur tous les calques"
 
-#: ../src/verbs.cpp:2239
+#: ../src/verbs.cpp:2249
 msgid "Does nothing"
 msgstr "Ne fait rien"
 
-#: ../src/verbs.cpp:2242
+#: ../src/verbs.cpp:2252
 msgid "Create new document from the default template"
 msgstr "Créer un nouveau document depuis le modèle par défaut"
 
-#: ../src/verbs.cpp:2244
+#: ../src/verbs.cpp:2254
 msgid "_Open..."
 msgstr "_Ouvrir..."
 
-#: ../src/verbs.cpp:2245
+#: ../src/verbs.cpp:2255
 msgid "Open an existing document"
 msgstr "Ouvrir un document existant"
 
-#: ../src/verbs.cpp:2246
+#: ../src/verbs.cpp:2256
 msgid "Re_vert"
 msgstr "_Recharger"
 
-#: ../src/verbs.cpp:2247
+#: ../src/verbs.cpp:2257
 msgid "Revert to the last saved version of document (changes will be lost)"
 msgstr "Recharger le dernier enregistrement du document (les changements seront perdus)"
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2258
 msgid "_Save"
 msgstr "_Enregistrer"
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2258
 msgid "Save document"
 msgstr "Enregistrer le document"
 
-#: ../src/verbs.cpp:2250
+#: ../src/verbs.cpp:2260
 msgid "Save _As..."
 msgstr "Enregistrer _sous..."
 
-#: ../src/verbs.cpp:2251
+#: ../src/verbs.cpp:2261
 msgid "Save document under a new name"
 msgstr "Enregistrer le document sous un nouveau nom"
 
-#: ../src/verbs.cpp:2252
+#: ../src/verbs.cpp:2262
 msgid "Save a Cop_y..."
 msgstr "Enregistrer une cop_ie..."
 
-#: ../src/verbs.cpp:2253
+#: ../src/verbs.cpp:2263
 msgid "Save a copy of the document under a new name"
 msgstr "Enregistrer une copie du document sous un nouveau nom"
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2264
 msgid "_Print..."
 msgstr "Im_primer..."
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2264
 msgid "Print document"
 msgstr "Imprimer le document"
 
 #. TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions)
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2267
 msgid "Vac_uum Defs"
 msgstr "Nettoyer les De_fs"
 
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2267
 msgid "Remove unused definitions (such as gradients or clipping paths) from the &lt;defs&gt; of the document"
 msgstr "Retirer les définitions inutilisées (comme des dégradés ou des chemins de découpe) des &lt;defs&gt; du document"
 
-#: ../src/verbs.cpp:2259
+#: ../src/verbs.cpp:2269
 msgid "Print Previe_w"
 msgstr "A_perçu avant impression"
 
-#: ../src/verbs.cpp:2260
+#: ../src/verbs.cpp:2270
 msgid "Preview document printout"
 msgstr "Prévisualiser avant impression"
 
-#: ../src/verbs.cpp:2261
+#: ../src/verbs.cpp:2271
 msgid "_Import..."
 msgstr "_Importer..."
 
-#: ../src/verbs.cpp:2262
+#: ../src/verbs.cpp:2272
 msgid "Import a bitmap or SVG image into this document"
 msgstr "Importer une image SVG ou bitmap dans ce document"
 
-#: ../src/verbs.cpp:2263
+#: ../src/verbs.cpp:2273
 msgid "_Export Bitmap..."
 msgstr "E_xporter en bitmap..."
 
-#: ../src/verbs.cpp:2264
+#: ../src/verbs.cpp:2274
 msgid "Export this document or a selection as a bitmap image"
 msgstr "Exporter ce document ou la sélection en image bitmap"
 
-#: ../src/verbs.cpp:2265
+#: ../src/verbs.cpp:2275
 msgid "Import a document from Open Clip Art Library"
 msgstr "Importer un document depuis la bibliothèque Open Clip Art"
 
 #. new FileVerb(SP_VERB_FILE_EXPORT_TO_OCAL, "FileExportToOCAL", N_("Export To Open Clip Art Library"), N_("Export this document to Open Clip Art Library"), INKSCAPE_ICON_DOCUMENT_EXPORT_OCAL),
-#: ../src/verbs.cpp:2267
+#: ../src/verbs.cpp:2277
 msgid "N_ext Window"
 msgstr "Fenêtre _suivante"
 
-#: ../src/verbs.cpp:2268
+#: ../src/verbs.cpp:2278
 msgid "Switch to the next document window"
 msgstr "Passer à la fenêtre (document) suivante"
 
-#: ../src/verbs.cpp:2269
+#: ../src/verbs.cpp:2279
 msgid "P_revious Window"
 msgstr "Fenêtre _précédente"
 
-#: ../src/verbs.cpp:2270
+#: ../src/verbs.cpp:2280
 msgid "Switch to the previous document window"
 msgstr "Passer à la fenêtre (document) précédente"
 
-#: ../src/verbs.cpp:2271
+#: ../src/verbs.cpp:2281
 msgid "_Close"
 msgstr "_Fermer"
 
-#: ../src/verbs.cpp:2272
+#: ../src/verbs.cpp:2282
 msgid "Close this document window"
 msgstr "Fermer cette fenêtre document"
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2283
 msgid "_Quit"
 msgstr "_Quitter"
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2283
 msgid "Quit Inkscape"
 msgstr "Quitter Inkscape"
 
-#: ../src/verbs.cpp:2276
+#: ../src/verbs.cpp:2286
 msgid "Undo last action"
 msgstr "Annuler la dernière action"
 
-#: ../src/verbs.cpp:2279
+#: ../src/verbs.cpp:2289
 msgid "Do again the last undone action"
 msgstr "Refaire la dernière action annulée"
 
-#: ../src/verbs.cpp:2280
+#: ../src/verbs.cpp:2290
 msgid "Cu_t"
 msgstr "_Couper"
 
-#: ../src/verbs.cpp:2281
+#: ../src/verbs.cpp:2291
 msgid "Cut selection to clipboard"
 msgstr "Couper la sélection vers le presse-papiers"
 
-#: ../src/verbs.cpp:2282
+#: ../src/verbs.cpp:2292
 msgid "_Copy"
 msgstr "Co_pier"
 
-#: ../src/verbs.cpp:2283
+#: ../src/verbs.cpp:2293
 msgid "Copy selection to clipboard"
 msgstr "Copier la sélection vers le presse-papiers"
 
-#: ../src/verbs.cpp:2284
+#: ../src/verbs.cpp:2294
 msgid "_Paste"
 msgstr "C_oller"
 
-#: ../src/verbs.cpp:2285
+#: ../src/verbs.cpp:2295
 msgid "Paste objects from clipboard to mouse point, or paste text"
 msgstr "Coller les objets du presse-papiers sous le pointeur de souris, ou coller du texte"
 
-#: ../src/verbs.cpp:2286
+#: ../src/verbs.cpp:2296
 msgid "Paste _Style"
 msgstr "Coller le st_yle"
 
-#: ../src/verbs.cpp:2287
+#: ../src/verbs.cpp:2297
 msgid "Apply the style of the copied object to selection"
 msgstr "Appliquer le style de l'objet copié à la sélection"
 
-#: ../src/verbs.cpp:2289
+#: ../src/verbs.cpp:2299
 msgid "Scale selection to match the size of the copied object"
 msgstr "Redimensionner la sélection afin de correspondre aux dimensions de l'objet sélectionné"
 
-#: ../src/verbs.cpp:2290
+#: ../src/verbs.cpp:2300
 msgid "Paste _Width"
 msgstr "Coller la _largeur"
 
-#: ../src/verbs.cpp:2291
+#: ../src/verbs.cpp:2301
 msgid "Scale selection horizontally to match the width of the copied object"
 msgstr "Redimensionne horizontalement la sélection afin d'avoir la largeur de l'objet copié"
 
-#: ../src/verbs.cpp:2292
+#: ../src/verbs.cpp:2302
 msgid "Paste _Height"
 msgstr "Coller la _hauteur"
 
-#: ../src/verbs.cpp:2293
+#: ../src/verbs.cpp:2303
 msgid "Scale selection vertically to match the height of the copied object"
 msgstr "Redimensionne verticalement la sélection afin d'avoir la hauteur de l'objet copié"
 
-#: ../src/verbs.cpp:2294
+#: ../src/verbs.cpp:2304
 msgid "Paste Size Separately"
 msgstr "Coller les dimensions séparément"
 
-#: ../src/verbs.cpp:2295
+#: ../src/verbs.cpp:2305
 msgid "Scale each selected object to match the size of the copied object"
 msgstr "Redimensionner chaque objet sélectionné afin de correspondre aux dimensions de l'objet copié"
 
-#: ../src/verbs.cpp:2296
+#: ../src/verbs.cpp:2306
 msgid "Paste Width Separately"
 msgstr "Coller la largeur séparément"
 
-#: ../src/verbs.cpp:2297
+#: ../src/verbs.cpp:2307
 msgid "Scale each selected object horizontally to match the width of the copied object"
 msgstr "Redimensionner horizontalement chaque objet sélectionné afin de correspondre à la largeur de l'objet copié"
 
-#: ../src/verbs.cpp:2298
+#: ../src/verbs.cpp:2308
 msgid "Paste Height Separately"
 msgstr "Coller la hauteur séparément"
 
-#: ../src/verbs.cpp:2299
+#: ../src/verbs.cpp:2309
 msgid "Scale each selected object vertically to match the height of the copied object"
 msgstr "Redimensionner verticalement chaque objet sélectionné afin de correspondre à la hauteur de l'objet copié"
 
-#: ../src/verbs.cpp:2300
+#: ../src/verbs.cpp:2310
 msgid "Paste _In Place"
 msgstr "Coller sur pl_ace"
 
-#: ../src/verbs.cpp:2301
+#: ../src/verbs.cpp:2311
 msgid "Paste objects from clipboard to the original location"
 msgstr "Coller les objets du presse-papiers à leur emplacement d'origine"
 
-#: ../src/verbs.cpp:2302
+#: ../src/verbs.cpp:2312
 msgid "Paste Path _Effect"
 msgstr "Coller l'effet de chemin"
 
-#: ../src/verbs.cpp:2303
+#: ../src/verbs.cpp:2313
 msgid "Apply the path effect of the copied object to selection"
 msgstr "Appliquer l'effet de chemin de l'objet copié à la sélection"
 
-#: ../src/verbs.cpp:2304
+#: ../src/verbs.cpp:2314
 msgid "Remove Path _Effect"
 msgstr "Supprimer l'_effet de chemin"
 
-#: ../src/verbs.cpp:2305
+#: ../src/verbs.cpp:2315
 msgid "Remove any path effects from selected objects"
 msgstr "Retirer tous les effets de chemin de la sélection"
 
-#: ../src/verbs.cpp:2306
+#: ../src/verbs.cpp:2316
 msgid "Remove Filters"
 msgstr "Supprimer les filtres"
 
-#: ../src/verbs.cpp:2307
+#: ../src/verbs.cpp:2317
 msgid "Remove any filters from selected objects"
 msgstr "Retirer tous les filtres de la sélection"
 
-#: ../src/verbs.cpp:2308
+#: ../src/verbs.cpp:2318
 msgid "_Delete"
 msgstr "_Supprimer"
 
-#: ../src/verbs.cpp:2309
+#: ../src/verbs.cpp:2319
 msgid "Delete selection"
 msgstr "Supprimer la sélection"
 
-#: ../src/verbs.cpp:2310
+#: ../src/verbs.cpp:2320
 msgid "Duplic_ate"
 msgstr "Dupli_quer"
 
-#: ../src/verbs.cpp:2311
+#: ../src/verbs.cpp:2321
 msgid "Duplicate selected objects"
 msgstr "Dupliquer les objets sélectionnés"
 
-#: ../src/verbs.cpp:2312
+#: ../src/verbs.cpp:2322
 msgid "Create Clo_ne"
 msgstr "Créer un clo_ne"
 
-#: ../src/verbs.cpp:2313
+#: ../src/verbs.cpp:2323
 msgid "Create a clone (a copy linked to the original) of selected object"
 msgstr "Créer un clone (une copie liée à l'original) de l'objet sélectionné"
 
-#: ../src/verbs.cpp:2314
+#: ../src/verbs.cpp:2324
 msgid "Unlin_k Clone"
 msgstr "_Délier le clone"
 
-#: ../src/verbs.cpp:2315
+#: ../src/verbs.cpp:2325
 msgid "Cut the selected clones' links to the originals, turning them into standalone objects"
 msgstr "Couper le lien entre le clone sélectionné et son original, le transformant en objet indépendant"
 
-#: ../src/verbs.cpp:2316
+#: ../src/verbs.cpp:2326
 msgid "Relink to Copied"
 msgstr "Relier à la copie"
 
-#: ../src/verbs.cpp:2317
+#: ../src/verbs.cpp:2327
 msgid "Relink the selected clones to the object currently on the clipboard"
 msgstr "Relier les clones sélectionnés à l'objet actuellement placé dans le presse-papier"
 
-#: ../src/verbs.cpp:2318
+#: ../src/verbs.cpp:2328
 msgid "Select _Original"
 msgstr "Sélectionner l'_original"
 
-#: ../src/verbs.cpp:2319
+#: ../src/verbs.cpp:2329
 msgid "Select the object to which the selected clone is linked"
 msgstr "Sélectionner l'objet auquel le clone sélectionné est lié"
 
-#: ../src/verbs.cpp:2320
+#: ../src/verbs.cpp:2330
 msgid "Objects to _Marker"
 msgstr "Objets en _marqueur"
 
-#: ../src/verbs.cpp:2321
+#: ../src/verbs.cpp:2331
 msgid "Convert selection to a line marker"
 msgstr "Transforme la sélection en marqueur de ligne"
 
-#: ../src/verbs.cpp:2322
+#: ../src/verbs.cpp:2332
 msgid "Objects to Gu_ides"
 msgstr "Objets en gu_ides"
 
-#: ../src/verbs.cpp:2323
+#: ../src/verbs.cpp:2333
 msgid "Convert selected objects to a collection of guidelines aligned with their edges"
 msgstr "Convertir les objets sélectionnés en une collection de guides alignés avec leurs bords"
 
-#: ../src/verbs.cpp:2324
+#: ../src/verbs.cpp:2334
 msgid "Objects to Patter_n"
 msgstr "Objets en _motif"
 
-#: ../src/verbs.cpp:2325
+#: ../src/verbs.cpp:2335
 msgid "Convert selection to a rectangle with tiled pattern fill"
 msgstr "Convertir la sélection en rectangle rempli par ce motif"
 
-#: ../src/verbs.cpp:2326
+#: ../src/verbs.cpp:2336
 msgid "Pattern to _Objects"
 msgstr "Motif en _objets"
 
-#: ../src/verbs.cpp:2327
+#: ../src/verbs.cpp:2337
 msgid "Extract objects from a tiled pattern fill"
 msgstr "Extraire des objet(s) d'un motif de remplissage"
 
-#: ../src/verbs.cpp:2328
+#: ../src/verbs.cpp:2338
 msgid "Clea_r All"
 msgstr "Efface_r tout"
 
-#: ../src/verbs.cpp:2329
+#: ../src/verbs.cpp:2339
 msgid "Delete all objects from document"
 msgstr "Supprimer tous les objets du document"
 
-#: ../src/verbs.cpp:2330
+#: ../src/verbs.cpp:2340
 msgid "Select Al_l"
 msgstr "Sélectionner _tout"
 
-#: ../src/verbs.cpp:2331
+#: ../src/verbs.cpp:2341
 msgid "Select all objects or all nodes"
 msgstr "Sélectionner tous les objets ou tous les nœuds"
 
-#: ../src/verbs.cpp:2332
+#: ../src/verbs.cpp:2342
 msgid "Select All in All La_yers"
 msgstr "Tout s_électionner dans tous les calques"
 
-#: ../src/verbs.cpp:2333
+#: ../src/verbs.cpp:2343
 msgid "Select all objects in all visible and unlocked layers"
 msgstr "Sélectionner tous les objets dans tous les calques visibles et non verrouillés"
 
-#: ../src/verbs.cpp:2334
+#: ../src/verbs.cpp:2344
 msgid "In_vert Selection"
 msgstr "In_verser la sélection"
 
-#: ../src/verbs.cpp:2335
+#: ../src/verbs.cpp:2345
 msgid "Invert selection (unselect what is selected and select everything else)"
 msgstr "Inverser la sélection (désélectionner tout ce qui était sélectionné, et sélectionner tout le reste)"
 
-#: ../src/verbs.cpp:2336
+#: ../src/verbs.cpp:2346
 msgid "Invert in All Layers"
 msgstr "Inverser dans tous les calques"
 
-#: ../src/verbs.cpp:2337
+#: ../src/verbs.cpp:2347
 msgid "Invert selection in all visible and unlocked layers"
 msgstr "Inverser la sélection dans tous les calques visibles et non verrouillés"
 
-#: ../src/verbs.cpp:2338
+#: ../src/verbs.cpp:2348
 msgid "Select Next"
 msgstr "Sélectionner suivant"
 
-#: ../src/verbs.cpp:2339
+#: ../src/verbs.cpp:2349
 msgid "Select next object or node"
 msgstr "Sélectionner l'objet ou nœud suivant"
 
-#: ../src/verbs.cpp:2340
+#: ../src/verbs.cpp:2350
 msgid "Select Previous"
 msgstr "Sélectionner précédent"
 
-#: ../src/verbs.cpp:2341
+#: ../src/verbs.cpp:2351
 msgid "Select previous object or node"
 msgstr "Sélectionner l'objet ou nœud précédent"
 
-#: ../src/verbs.cpp:2342
+#: ../src/verbs.cpp:2352
 msgid "D_eselect"
 msgstr "_Désélectionner"
 
-#: ../src/verbs.cpp:2343
+#: ../src/verbs.cpp:2353
 msgid "Deselect any selected objects or nodes"
 msgstr "Désélectionner tous les objets ou nœuds"
 
-#: ../src/verbs.cpp:2344
+#: ../src/verbs.cpp:2354
 msgid "_Guides Around Page"
 msgstr "_Guides autour de la page"
 
-#: ../src/verbs.cpp:2345
+#: ../src/verbs.cpp:2355
 msgid "Create four guides aligned with the page borders"
 msgstr "Crée quatre guides alignés sur les bords de la page"
 
-#: ../src/verbs.cpp:2346
+#: ../src/verbs.cpp:2356
 msgid "Next Path Effect Parameter"
 msgstr "Paramètre suivant"
 
-#: ../src/verbs.cpp:2347
+#: ../src/verbs.cpp:2357
 msgid "Show next Path Effect parameter for editing"
 msgstr "Afficher le paramètre d'effet de chemin suivant pour le modifier"
 
 #. Selection
-#: ../src/verbs.cpp:2350
+#: ../src/verbs.cpp:2360
 msgid "Raise to _Top"
 msgstr "Monter au premier p_lan"
 
-#: ../src/verbs.cpp:2351
+#: ../src/verbs.cpp:2361
 msgid "Raise selection to top"
 msgstr "Monter la sélection au premier plan"
 
-#: ../src/verbs.cpp:2352
+#: ../src/verbs.cpp:2362
 msgid "Lower to _Bottom"
 msgstr "Descendre à l'arrière-pl_an"
 
-#: ../src/verbs.cpp:2353
+#: ../src/verbs.cpp:2363
 msgid "Lower selection to bottom"
 msgstr "Descendre la sélection à l'arrière-plan"
 
-#: ../src/verbs.cpp:2354
+#: ../src/verbs.cpp:2364
 msgid "_Raise"
 msgstr "_Monter"
 
-#: ../src/verbs.cpp:2355
+#: ../src/verbs.cpp:2365
 msgid "Raise selection one step"
 msgstr "Monter la sélection d'un cran"
 
-#: ../src/verbs.cpp:2356
+#: ../src/verbs.cpp:2366
 msgid "_Lower"
 msgstr "D_escendre"
 
-#: ../src/verbs.cpp:2357
+#: ../src/verbs.cpp:2367
 msgid "Lower selection one step"
 msgstr "Descendre la sélection d'un cran"
 
-#: ../src/verbs.cpp:2358
+#: ../src/verbs.cpp:2368
 msgid "_Group"
 msgstr "_Grouper"
 
-#: ../src/verbs.cpp:2359
+#: ../src/verbs.cpp:2369
 msgid "Group selected objects"
 msgstr "Grouper les objets sélectionnés"
 
-#: ../src/verbs.cpp:2361
+#: ../src/verbs.cpp:2371
 msgid "Ungroup selected groups"
 msgstr "Dégrouper les groupes sélectionnés"
 
-#: ../src/verbs.cpp:2363
+#: ../src/verbs.cpp:2373
 msgid "_Put on Path"
 msgstr "Mettre _suivant un chemin"
 
-#: ../src/verbs.cpp:2365
+#: ../src/verbs.cpp:2375
 msgid "_Remove from Path"
 msgstr "_Retirer du chemin"
 
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2377
 msgid "Remove Manual _Kerns"
 msgstr "Retirer les crénages _manuels"
 
 #. TRANSLATORS: "glyph": An image used in the visual representation of characters;
 #. roughly speaking, how a character looks. A font is a set of glyphs.
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2380
 msgid "Remove all manual kerns and glyph rotations from a text object"
 msgstr "Retirer les crénages manuels et rotations de glyphes d'un texte"
 
-#: ../src/verbs.cpp:2372
+#: ../src/verbs.cpp:2382
 msgid "_Union"
 msgstr "_Union"
 
-#: ../src/verbs.cpp:2373
+#: ../src/verbs.cpp:2383
 msgid "Create union of selected paths"
 msgstr "Créer l'union des chemins sélectionnés"
 
-#: ../src/verbs.cpp:2374
+#: ../src/verbs.cpp:2384
 msgid "_Intersection"
 msgstr "_Intersection"
 
-#: ../src/verbs.cpp:2375
+#: ../src/verbs.cpp:2385
 msgid "Create intersection of selected paths"
 msgstr "Créer l'intersection des chemins sélectionnés"
 
-#: ../src/verbs.cpp:2376
+#: ../src/verbs.cpp:2386
 msgid "_Difference"
 msgstr "_Différence"
 
-#: ../src/verbs.cpp:2377
+#: ../src/verbs.cpp:2387
 msgid "Create difference of selected paths (bottom minus top)"
 msgstr "Créer la différence des chemins sélectionnés (dessous moins dessus)"
 
-#: ../src/verbs.cpp:2378
+#: ../src/verbs.cpp:2388
 msgid "E_xclusion"
 msgstr "E_xclusion"
 
-#: ../src/verbs.cpp:2379
+#: ../src/verbs.cpp:2389
 msgid "Create exclusive OR of selected paths (those parts that belong to only one path)"
 msgstr "Créer un OU exclusif des chemins sélectionnés (seules les parties qui n'appartiennent qu'à un seul chemin)"
 
-#: ../src/verbs.cpp:2380
+#: ../src/verbs.cpp:2390
 msgid "Di_vision"
 msgstr "Di_vision"
 
-#: ../src/verbs.cpp:2381
+#: ../src/verbs.cpp:2391
 msgid "Cut the bottom path into pieces"
 msgstr "Couper le chemin du dessous en morceaux"
 
 #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
 #. Advanced tutorial for more info
-#: ../src/verbs.cpp:2384
+#: ../src/verbs.cpp:2394
 msgid "Cut _Path"
 msgstr "Décou_per le chemin"
 
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2395
 msgid "Cut the bottom path's stroke into pieces, removing fill"
 msgstr "Couper le contour du chemin du dessous, et supprimer son remplissage"
 
 #. TRANSLATORS: "outset": expand a shape by offsetting the object's path,
 #. i.e. by displacing it perpendicular to the path in each point.
 #. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2389
+#: ../src/verbs.cpp:2399
 msgid "Outs_et"
 msgstr "Dil_ater"
 
-#: ../src/verbs.cpp:2390
+#: ../src/verbs.cpp:2400
 msgid "Outset selected paths"
 msgstr "Dilater les chemins sélectionnés"
 
-#: ../src/verbs.cpp:2392
+#: ../src/verbs.cpp:2402
 msgid "O_utset Path by 1 px"
 msgstr "_Dilater le chemin de 1px"
 
-#: ../src/verbs.cpp:2393
+#: ../src/verbs.cpp:2403
 msgid "Outset selected paths by 1 px"
 msgstr "Dilater les chemins sélectionnés de 1px"
 
-#: ../src/verbs.cpp:2395
+#: ../src/verbs.cpp:2405
 msgid "O_utset Path by 10 px"
 msgstr "_Dilater le chemin de 10px"
 
-#: ../src/verbs.cpp:2396
+#: ../src/verbs.cpp:2406
 msgid "Outset selected paths by 10 px"
 msgstr "Dilater les chemins sélectionnés de 10px"
 
 #. TRANSLATORS: "inset": contract a shape by offsetting the object's path,
 #. i.e. by displacing it perpendicular to the path in each point.
 #. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2400
+#: ../src/verbs.cpp:2410
 msgid "I_nset"
 msgstr "Co_ntracter"
 
-#: ../src/verbs.cpp:2401
+#: ../src/verbs.cpp:2411
 msgid "Inset selected paths"
 msgstr "Contracter les chemins sélectionnés"
 
-#: ../src/verbs.cpp:2403
+#: ../src/verbs.cpp:2413
 msgid "I_nset Path by 1 px"
 msgstr "Co_ntracter le chemin de 1px"
 
-#: ../src/verbs.cpp:2404
+#: ../src/verbs.cpp:2414
 msgid "Inset selected paths by 1 px"
 msgstr "Contracter les chemins sélectionnés de 1px"
 
-#: ../src/verbs.cpp:2406
+#: ../src/verbs.cpp:2416
 msgid "I_nset Path by 10 px"
 msgstr "Co_ntracter le chemin de 10px"
 
-#: ../src/verbs.cpp:2407
+#: ../src/verbs.cpp:2417
 msgid "Inset selected paths by 10 px"
 msgstr "Contracter les chemins sélectionnés de 10px"
 
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2419
 msgid "D_ynamic Offset"
 msgstr "Offset d_ynamique"
 
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2419
 msgid "Create a dynamic offset object"
 msgstr "Créer un objet offset dynamique"
 
-#: ../src/verbs.cpp:2411
+#: ../src/verbs.cpp:2421
 msgid "_Linked Offset"
 msgstr "Offset _lié"
 
-#: ../src/verbs.cpp:2412
+#: ../src/verbs.cpp:2422
 msgid "Create a dynamic offset object linked to the original path"
 msgstr "Créer un objet offset dynamique lié au chemin original"
 
-#: ../src/verbs.cpp:2414
+#: ../src/verbs.cpp:2424
 msgid "_Stroke to Path"
 msgstr "_Contour en chemin"
 
-#: ../src/verbs.cpp:2415
+#: ../src/verbs.cpp:2425
 msgid "Convert selected object's stroke to paths"
 msgstr "Convertir les contours des objets sélectionnés en chemins"
 
-#: ../src/verbs.cpp:2416
+#: ../src/verbs.cpp:2426
 msgid "Si_mplify"
 msgstr "Si_mplifier"
 
-#: ../src/verbs.cpp:2417
+#: ../src/verbs.cpp:2427
 msgid "Simplify selected paths (remove extra nodes)"
 msgstr "Simplifier les chemins sélectionnés (supprimer des nœuds superflus)"
 
-#: ../src/verbs.cpp:2418
+#: ../src/verbs.cpp:2428
 msgid "_Reverse"
 msgstr "Invers_er"
 
-#: ../src/verbs.cpp:2419
+#: ../src/verbs.cpp:2429
 msgid "Reverse the direction of selected paths (useful for flipping markers)"
 msgstr "Inverser la direction des chemins sélectionnés (utile pour retourner des marqueurs)"
 
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2421
+#: ../src/verbs.cpp:2431
 msgid "_Trace Bitmap..."
 msgstr "Vec_toriser le bitmap..."
 
-#: ../src/verbs.cpp:2422
+#: ../src/verbs.cpp:2432
 msgid "Create one or more paths from a bitmap by tracing it"
 msgstr "Créer un ou plusieurs chemin en vectorisant un bitmap"
 
-#: ../src/verbs.cpp:2423
+#: ../src/verbs.cpp:2433
 msgid "_Make a Bitmap Copy"
 msgstr "Faire une copie bit_map"
 
-#: ../src/verbs.cpp:2424
+#: ../src/verbs.cpp:2434
 msgid "Export selection to a bitmap and insert it into document"
 msgstr "Exporter la sélection en bitmap et insérer celui-ci dans le document"
 
-#: ../src/verbs.cpp:2425
+#: ../src/verbs.cpp:2435
 msgid "_Combine"
 msgstr "Com_biner"
 
-#: ../src/verbs.cpp:2426
+#: ../src/verbs.cpp:2436
 msgid "Combine several paths into one"
 msgstr "Combiner plusieurs chemins en un seul"
 
 #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
 #. Advanced tutorial for more info
-#: ../src/verbs.cpp:2429
+#: ../src/verbs.cpp:2439
 msgid "Break _Apart"
 msgstr "Sépa_rer"
 
-#: ../src/verbs.cpp:2430
+#: ../src/verbs.cpp:2440
 msgid "Break selected paths into subpaths"
 msgstr "Séparer les chemins sélectionnés en sous-chemins"
 
-#: ../src/verbs.cpp:2431
+#: ../src/verbs.cpp:2441
 msgid "Rows and Columns..."
 msgstr "Lignes et colonnes..."
 
-#: ../src/verbs.cpp:2432
+#: ../src/verbs.cpp:2442
 msgid "Arrange selected objects in a table"
 msgstr "Arranger les objets sélectionnés dans une grille"
 
 #. Layer
-#: ../src/verbs.cpp:2434
+#: ../src/verbs.cpp:2444
 msgid "_Add Layer..."
 msgstr "_Ajouter un calque..."
 
-#: ../src/verbs.cpp:2435
+#: ../src/verbs.cpp:2445
 msgid "Create a new layer"
 msgstr "Créer un nouveau calque"
 
-#: ../src/verbs.cpp:2436
+#: ../src/verbs.cpp:2446
 msgid "Re_name Layer..."
 msgstr "Re_nommer le calque..."
 
-#: ../src/verbs.cpp:2437
+#: ../src/verbs.cpp:2447
 msgid "Rename the current layer"
 msgstr "Renommer le calque courant"
 
-#: ../src/verbs.cpp:2438
+#: ../src/verbs.cpp:2448
 msgid "Switch to Layer Abov_e"
 msgstr "Passer au calque supéri_eur"
 
-#: ../src/verbs.cpp:2439
+#: ../src/verbs.cpp:2449
 msgid "Switch to the layer above the current"
 msgstr "Passer au calque au-dessus du calque courant"
 
-#: ../src/verbs.cpp:2440
+#: ../src/verbs.cpp:2450
 msgid "Switch to Layer Belo_w"
 msgstr "Passer au calque inférie_ur"
 
-#: ../src/verbs.cpp:2441
+#: ../src/verbs.cpp:2451
 msgid "Switch to the layer below the current"
 msgstr "Passer au calque en-dessous du calque courant"
 
-#: ../src/verbs.cpp:2442
+#: ../src/verbs.cpp:2452
 msgid "Move Selection to Layer Abo_ve"
 msgstr "Déplacer la sélection au calque su_périeur"
 
-#: ../src/verbs.cpp:2443
+#: ../src/verbs.cpp:2453
 msgid "Move selection to the layer above the current"
 msgstr "Déplacer la sélection vers le calque au-dessus du calque courant"
 
-#: ../src/verbs.cpp:2444
+#: ../src/verbs.cpp:2454
 msgid "Move Selection to Layer Bel_ow"
 msgstr "Déplacer la sélection au calque in_férieur"
 
-#: ../src/verbs.cpp:2445
+#: ../src/verbs.cpp:2455
 msgid "Move selection to the layer below the current"
 msgstr "Déplacer la sélection vers le calque en-dessous du calque courant"
 
-#: ../src/verbs.cpp:2446
+#: ../src/verbs.cpp:2456
 msgid "Layer to _Top"
 msgstr "Calque au pre_mier plan"
 
-#: ../src/verbs.cpp:2447
+#: ../src/verbs.cpp:2457
 msgid "Raise the current layer to the top"
 msgstr "Monter le calque courant au premier plan"
 
-#: ../src/verbs.cpp:2448
+#: ../src/verbs.cpp:2458
 msgid "Layer to _Bottom"
 msgstr "Calque à l'a_rrière-plan"
 
-#: ../src/verbs.cpp:2449
+#: ../src/verbs.cpp:2459
 msgid "Lower the current layer to the bottom"
 msgstr "Descendre le calque courant à l'arrière-plan"
 
-#: ../src/verbs.cpp:2450
+#: ../src/verbs.cpp:2460
 msgid "_Raise Layer"
 msgstr "M_onter le calque"
 
-#: ../src/verbs.cpp:2451
+#: ../src/verbs.cpp:2461
 msgid "Raise the current layer"
 msgstr "Monter le calque courant"
 
-#: ../src/verbs.cpp:2452
+#: ../src/verbs.cpp:2462
 msgid "_Lower Layer"
 msgstr "Descen_dre le calque"
 
-#: ../src/verbs.cpp:2453
+#: ../src/verbs.cpp:2463
 msgid "Lower the current layer"
 msgstr "Descendre le calque courant"
 
-#: ../src/verbs.cpp:2454
+#: ../src/verbs.cpp:2464
 msgid "Duplicate Current Layer"
 msgstr "Dupliquer le calque courant"
 
-#: ../src/verbs.cpp:2455
+#: ../src/verbs.cpp:2465
 msgid "Duplicate an existing layer"
 msgstr "Dupliquer un calque existant"
 
-#: ../src/verbs.cpp:2456
+#: ../src/verbs.cpp:2466
 msgid "_Delete Current Layer"
 msgstr "_Supprimer le calque courant"
 
-#: ../src/verbs.cpp:2457
+#: ../src/verbs.cpp:2467
 msgid "Delete the current layer"
 msgstr "Supprimer le calque courant"
 
-#: ../src/verbs.cpp:2458
+#: ../src/verbs.cpp:2468
 msgid "_Show/hide other layers"
 msgstr "Afficher ou masquer les autres calques"
 
-#: ../src/verbs.cpp:2459
+#: ../src/verbs.cpp:2469
 msgid "Solo the current layer"
 msgstr "Afficher le calque courant uniquement"
 
 #. Object
-#: ../src/verbs.cpp:2462
+#: ../src/verbs.cpp:2472
 msgid "Rotate _90&#176; CW"
 msgstr "Tourner de _90&#176; dans le sens horaire"
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2465
+#: ../src/verbs.cpp:2475
 msgid "Rotate selection 90° clockwise"
 msgstr "Tourner la sélection de 90° dans le sens horaire"
 
-#: ../src/verbs.cpp:2466
+#: ../src/verbs.cpp:2476
 msgid "Rotate 9_0&#176; CCW"
 msgstr "Tourner de 9_0&#176; dans le sens anti-horaire"
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2469
+#: ../src/verbs.cpp:2479
 msgid "Rotate selection 90° counter-clockwise"
 msgstr "Tourner la sélection de 90° dans le sens anti-horaire"
 
-#: ../src/verbs.cpp:2470
+#: ../src/verbs.cpp:2480
 msgid "Remove _Transformations"
 msgstr "Retirer les _transformations"
 
-#: ../src/verbs.cpp:2471
+#: ../src/verbs.cpp:2481
 msgid "Remove transformations from object"
 msgstr "retirer les transformations de l'objet"
 
-#: ../src/verbs.cpp:2472
+#: ../src/verbs.cpp:2482
 msgid "_Object to Path"
 msgstr "_Objet en chemin"
 
-#: ../src/verbs.cpp:2473
+#: ../src/verbs.cpp:2483
 msgid "Convert selected object to path"
 msgstr "Convertir les objets sélectionnés en chemins"
 
-#: ../src/verbs.cpp:2474
+#: ../src/verbs.cpp:2484
 msgid "_Flow into Frame"
 msgstr "_Encadrer"
 
-#: ../src/verbs.cpp:2475
+#: ../src/verbs.cpp:2485
 msgid "Put text into a frame (path or shape), creating a flowed text linked to the frame object"
 msgstr "Placer du texte dans un cadre (chemin ou forme), créant un texte encadré lié à l'objet cadre"
 
-#: ../src/verbs.cpp:2476
+#: ../src/verbs.cpp:2486
 msgid "_Unflow"
 msgstr "_Désencadrer"
 
-#: ../src/verbs.cpp:2477
+#: ../src/verbs.cpp:2487
 msgid "Remove text from frame (creates a single-line text object)"
 msgstr "Retirer le texte du cadre (crée un objet texte d'une seule ligne)"
 
-#: ../src/verbs.cpp:2478
+#: ../src/verbs.cpp:2488
 msgid "_Convert to Text"
 msgstr "_Convertir en texte"
 
-#: ../src/verbs.cpp:2479
+#: ../src/verbs.cpp:2489
 msgid "Convert flowed text to regular text object (preserves appearance)"
 msgstr "Convertir du texte encadré en objet texte normal (en préservant l'apparence)"
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2491
 msgid "Flip _Horizontal"
 msgstr "Retourner _horizontalement"
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2491
 msgid "Flip selected objects horizontally"
 msgstr "Retourner horizontalement les objets sélectionnés"
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2494
 msgid "Flip _Vertical"
 msgstr "Retourner _verticalement"
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2494
 msgid "Flip selected objects vertically"
 msgstr "Retourner verticalement les objets sélectionnés"
 
-#: ../src/verbs.cpp:2487
+#: ../src/verbs.cpp:2497
 msgid "Apply mask to selection (using the topmost object as mask)"
 msgstr "Appliquer un masque à la sélection (en utilisant l'objet le plus au-dessus comme masque)"
 
-#: ../src/verbs.cpp:2489
+#: ../src/verbs.cpp:2499
 msgid "Edit mask"
 msgstr "Modifier le masque"
 
-#: ../src/verbs.cpp:2490
-#: ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2500
+#: ../src/verbs.cpp:2506
 msgid "_Release"
 msgstr "_Retirer"
 
-#: ../src/verbs.cpp:2491
+#: ../src/verbs.cpp:2501
 msgid "Remove mask from selection"
 msgstr "Retirer le masque de la sélection"
 
-#: ../src/verbs.cpp:2493
+#: ../src/verbs.cpp:2503
 msgid "Apply clipping path to selection (using the topmost object as clipping path)"
 msgstr "Appliquer un chemin de découpe à la sélection (en utilisant l'objet le plus au-dessus comme chemin de découpe)"
 
-#: ../src/verbs.cpp:2495
-#: ../src/widgets/toolbox.cpp:1446
+#: ../src/verbs.cpp:2505
+#: ../src/widgets/toolbox.cpp:1472
 msgid "Edit clipping path"
 msgstr "Modifier le chemin de découpe"
 
-#: ../src/verbs.cpp:2497
+#: ../src/verbs.cpp:2507
 msgid "Remove clipping path from selection"
 msgstr "Retirer le chemin de découpe de la sélection"
 
 #. Tools
-#: ../src/verbs.cpp:2500
+#: ../src/verbs.cpp:2510
 msgid "Select"
 msgstr "Sélectionner"
 
-#: ../src/verbs.cpp:2501
+#: ../src/verbs.cpp:2511
 msgid "Select and transform objects"
 msgstr "Sélectionner et transformer des objets"
 
-#: ../src/verbs.cpp:2502
+#: ../src/verbs.cpp:2512
 msgid "Node Edit"
 msgstr "Éditer les nœuds"
 
-#: ../src/verbs.cpp:2503
+#: ../src/verbs.cpp:2513
 msgid "Edit paths by nodes"
 msgstr "Éditer les nœuds ou les poignées de contrôle d'un chemin"
 
-#: ../src/verbs.cpp:2505
+#: ../src/verbs.cpp:2515
 msgid "Tweak objects by sculpting or painting"
 msgstr "Ajuster les objets en les sculptant ou en les peignant"
 
-#: ../src/verbs.cpp:2507
+#: ../src/verbs.cpp:2517
+msgid "Spray objects by sculpting or painting"
+msgstr "Pulvériser les objets en les sculptant ou en les peignant"
+
+#: ../src/verbs.cpp:2519
 msgid "Create rectangles and squares"
 msgstr "Créer des rectangles et des carrés"
 
-#: ../src/verbs.cpp:2509
+#: ../src/verbs.cpp:2521
 msgid "Create 3D boxes"
 msgstr "Créer une boîte 3D"
 
-#: ../src/verbs.cpp:2511
+#: ../src/verbs.cpp:2523
 msgid "Create circles, ellipses, and arcs"
 msgstr "Créer des cercles, des ellipses et des arcs"
 
-#: ../src/verbs.cpp:2513
+#: ../src/verbs.cpp:2525
 msgid "Create stars and polygons"
 msgstr "Créer des étoiles et des polygones"
 
-#: ../src/verbs.cpp:2515
+#: ../src/verbs.cpp:2527
 msgid "Create spirals"
 msgstr "Créer des spirales"
 
-#: ../src/verbs.cpp:2517
+#: ../src/verbs.cpp:2529
 msgid "Draw freehand lines"
 msgstr "Dessiner des lignes à main levée"
 
-#: ../src/verbs.cpp:2519
+#: ../src/verbs.cpp:2531
 msgid "Draw Bezier curves and straight lines"
 msgstr "Tracer des courbes de Bézier et des segments de droites"
 
-#: ../src/verbs.cpp:2521
+#: ../src/verbs.cpp:2533
 msgid "Draw calligraphic or brush strokes"
 msgstr "Créer un tracé calligraphique ou au pinceau"
 
-#: ../src/verbs.cpp:2523
+#: ../src/verbs.cpp:2535
 msgid "Create and edit text objects"
 msgstr "Créer et éditer des objets textes"
 
-#: ../src/verbs.cpp:2525
+#: ../src/verbs.cpp:2537
 msgid "Create and edit gradients"
 msgstr "Créer et éditer des dégradés"
 
-#: ../src/verbs.cpp:2527
+#: ../src/verbs.cpp:2539
 msgid "Zoom in or out"
 msgstr "(Dé)zoommer"
 
-#: ../src/verbs.cpp:2529
+#: ../src/verbs.cpp:2541
 msgid "Pick colors from image"
 msgstr "Capturer des couleurs depuis l'image"
 
-#: ../src/verbs.cpp:2531
+#: ../src/verbs.cpp:2543
 msgid "Create diagram connectors"
 msgstr "Créer des connecteurs"
 
-#: ../src/verbs.cpp:2533
+#: ../src/verbs.cpp:2545
 msgid "Fill bounded areas"
 msgstr "Remplir une zone bornée"
 
-#: ../src/verbs.cpp:2534
+#: ../src/verbs.cpp:2546
 msgid "LPE Edit"
 msgstr "Édition des effets de chemin en direct"
 
-#: ../src/verbs.cpp:2535
+#: ../src/verbs.cpp:2547
 msgid "Edit Path Effect parameters"
 msgstr "Modifier les paramètres des effets de chemin"
 
-#: ../src/verbs.cpp:2537
+#: ../src/verbs.cpp:2549
 msgid "Erase existing paths"
 msgstr "Effacer les chemins existants"
 
-#: ../src/verbs.cpp:2539
+#: ../src/verbs.cpp:2551
 msgid "Do geometric constructions"
 msgstr "Réalise des contructions géométriques"
 
 #. Tool prefs
-#: ../src/verbs.cpp:2541
+#: ../src/verbs.cpp:2553
 msgid "Selector Preferences"
 msgstr "Préférences du sélecteur"
 
-#: ../src/verbs.cpp:2542
+#: ../src/verbs.cpp:2554
 msgid "Open Preferences for the Selector tool"
 msgstr "Ouvrir les préférences de l'outil sélecteur"
 
-#: ../src/verbs.cpp:2543
+#: ../src/verbs.cpp:2555
 msgid "Node Tool Preferences"
 msgstr "Préférences des nœuds"
 
-#: ../src/verbs.cpp:2544
+#: ../src/verbs.cpp:2556
 msgid "Open Preferences for the Node tool"
 msgstr "Ouvrir les préférences de l'outil nœud"
 
 # flo: je ne suis pas certain du nom bidouillage, à changer si tu as mieux.
-#: ../src/verbs.cpp:2545
+#: ../src/verbs.cpp:2557
 msgid "Tweak Tool Preferences"
 msgstr "Préférences de l'outil d'ajustement"
 
-#: ../src/verbs.cpp:2546
+#: ../src/verbs.cpp:2558
 msgid "Open Preferences for the Tweak tool"
 msgstr "Ouvrir les préférences de l'outil d'ajustement"
 
-#: ../src/verbs.cpp:2547
+#: ../src/verbs.cpp:2559
+msgid "Spray Tool Preferences"
+msgstr "Préférences de l'outil pulvérisateur"
+
+#: ../src/verbs.cpp:2560
+msgid "Open Preferences for the Spray tool"
+msgstr "Ouvrir les préférences de l'outil pulvérisateur"
+
+#: ../src/verbs.cpp:2561
 msgid "Rectangle Preferences"
 msgstr "Préférences des rectangles"
 
-#: ../src/verbs.cpp:2548
+#: ../src/verbs.cpp:2562
 msgid "Open Preferences for the Rectangle tool"
 msgstr "Ouvrir les préférences de l'outil rectangle"
 
-#: ../src/verbs.cpp:2549
+#: ../src/verbs.cpp:2563
 msgid "3D Box Preferences"
 msgstr "Préférences des boîtes 3D"
 
-#: ../src/verbs.cpp:2550
+#: ../src/verbs.cpp:2564
 msgid "Open Preferences for the 3D Box tool"
 msgstr "Ouvrir les préférences de l'outil boîte 3D"
 
-#: ../src/verbs.cpp:2551
+#: ../src/verbs.cpp:2565
 msgid "Ellipse Preferences"
 msgstr "Préférences des ellipses"
 
-#: ../src/verbs.cpp:2552
+#: ../src/verbs.cpp:2566
 msgid "Open Preferences for the Ellipse tool"
 msgstr "Ouvrir les préférences de l'outil ellipse"
 
-#: ../src/verbs.cpp:2553
+#: ../src/verbs.cpp:2567
 msgid "Star Preferences"
 msgstr "Préférences des étoiles"
 
-#: ../src/verbs.cpp:2554
+#: ../src/verbs.cpp:2568
 msgid "Open Preferences for the Star tool"
 msgstr "Ouvrir les préférences de l'outil étoile"
 
-#: ../src/verbs.cpp:2555
+#: ../src/verbs.cpp:2569
 msgid "Spiral Preferences"
 msgstr "Préférences des spirales"
 
-#: ../src/verbs.cpp:2556
+#: ../src/verbs.cpp:2570
 msgid "Open Preferences for the Spiral tool"
 msgstr "Ouvrir les préférences de l'outil spirale"
 
-#: ../src/verbs.cpp:2557
+#: ../src/verbs.cpp:2571
 msgid "Pencil Preferences"
 msgstr "Préférences du crayon"
 
-#: ../src/verbs.cpp:2558
+#: ../src/verbs.cpp:2572
 msgid "Open Preferences for the Pencil tool"
 msgstr "Ouvrir les préférences de l'outil crayon"
 
-#: ../src/verbs.cpp:2559
+#: ../src/verbs.cpp:2573
 msgid "Pen Preferences"
 msgstr "Préférences du stylo"
 
-#: ../src/verbs.cpp:2560
+#: ../src/verbs.cpp:2574
 msgid "Open Preferences for the Pen tool"
 msgstr "Ouvrir les préférences de l'outil stylo"
 
-#: ../src/verbs.cpp:2561
+#: ../src/verbs.cpp:2575
 msgid "Calligraphic Preferences"
 msgstr "Préférences de la plume calligraphique"
 
-#: ../src/verbs.cpp:2562
+#: ../src/verbs.cpp:2576
 msgid "Open Preferences for the Calligraphy tool"
 msgstr "Ouvrir les préférences de la plume calligraphique"
 
-#: ../src/verbs.cpp:2563
+#: ../src/verbs.cpp:2577
 msgid "Text Preferences"
 msgstr "Préférences des textes"
 
-#: ../src/verbs.cpp:2564
+#: ../src/verbs.cpp:2578
 msgid "Open Preferences for the Text tool"
 msgstr "Ouvrir les préférences de l'outil texte"
 
-#: ../src/verbs.cpp:2565
+#: ../src/verbs.cpp:2579
 msgid "Gradient Preferences"
 msgstr "Préférences des dégradés"
 
-#: ../src/verbs.cpp:2566
+#: ../src/verbs.cpp:2580
 msgid "Open Preferences for the Gradient tool"
 msgstr "Ouvrir les préférences de l'outil de dégradé"
 
-#: ../src/verbs.cpp:2567
+#: ../src/verbs.cpp:2581
 msgid "Zoom Preferences"
 msgstr "Préférences du zoom"
 
-#: ../src/verbs.cpp:2568
+#: ../src/verbs.cpp:2582
 msgid "Open Preferences for the Zoom tool"
 msgstr "Ouvrir les préférences de l'outil zoom"
 
-#: ../src/verbs.cpp:2569
+#: ../src/verbs.cpp:2583
 msgid "Dropper Preferences"
 msgstr "Préférences de la pipette"
 
-#: ../src/verbs.cpp:2570
+#: ../src/verbs.cpp:2584
 msgid "Open Preferences for the Dropper tool"
 msgstr "Ouvrir les préférences de l'outil pipette"
 
-#: ../src/verbs.cpp:2571
+#: ../src/verbs.cpp:2585
 msgid "Connector Preferences"
 msgstr "Préférences des connecteurs"
 
-#: ../src/verbs.cpp:2572
+#: ../src/verbs.cpp:2586
 msgid "Open Preferences for the Connector tool"
 msgstr "Ouvrir les préférences de l'outil connecteur"
 
-#: ../src/verbs.cpp:2573
+#: ../src/verbs.cpp:2587
 msgid "Paint Bucket Preferences"
 msgstr "Préférences de remplissage au seau"
 
-#: ../src/verbs.cpp:2574
+#: ../src/verbs.cpp:2588
 msgid "Open Preferences for the Paint Bucket tool"
 msgstr "Ouvrir les préférences de l'outil de remplissage au seau"
 
-#: ../src/verbs.cpp:2575
+#: ../src/verbs.cpp:2589
 msgid "Eraser Preferences"
 msgstr "Préférences de la gomme"
 
-#: ../src/verbs.cpp:2576
+#: ../src/verbs.cpp:2590
 msgid "Open Preferences for the Eraser tool"
 msgstr "Ouvrir les préférences de l'outil gomme"
 
-#: ../src/verbs.cpp:2577
+#: ../src/verbs.cpp:2591
 msgid "LPE Tool Preferences"
 msgstr "Préférences de l'outil Effets de chemin en direct"
 
-#: ../src/verbs.cpp:2578
+#: ../src/verbs.cpp:2592
 msgid "Open Preferences for the LPETool tool"
 msgstr "Ouvrir les préférences de l'outil Effets de chemin en direct"
 
 #. Zoom/View
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2595
 msgid "Zoom In"
 msgstr "Zoommer"
 
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2595
 msgid "Zoom in"
 msgstr "Zoommer"
 
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2596
 msgid "Zoom Out"
 msgstr "Dézoommer"
 
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2596
 msgid "Zoom out"
 msgstr "Dézoommer"
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2597
 msgid "_Rulers"
 msgstr "_Règles"
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2597
 msgid "Show or hide the canvas rulers"
 msgstr "Afficher ou non les règles de la zone de travail"
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2598
 msgid "Scroll_bars"
 msgstr "_Barres de défilement"
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2598
 msgid "Show or hide the canvas scrollbars"
 msgstr "Afficher ou non les barres de défilement de la zone de travail"
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2599
 msgid "_Grid"
 msgstr "_Grille"
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2599
 msgid "Show or hide the grid"
 msgstr "Afficher ou non la grille"
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2600
 msgid "G_uides"
 msgstr "G_uides"
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2600
 msgid "Show or hide guides (drag from a ruler to create a guide)"
 msgstr "Afficher ou non les guides (pour créer un guide, effectuer un cliquer-déplacer depuis une règle)"
 
-#: ../src/verbs.cpp:2587
+#: ../src/verbs.cpp:2601
 msgid "Toggle snapping on or off"
 msgstr "Activer ou désactiver le magnétisme"
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2602
 msgid "Nex_t Zoom"
 msgstr "Zoom suivan_t"
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2602
 msgid "Next zoom (from the history of zooms)"
 msgstr "Zoom suivant (dans l'historique des zooms)"
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2604
 msgid "Pre_vious Zoom"
 msgstr "Zoom _précédent"
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2604
 msgid "Previous zoom (from the history of zooms)"
 msgstr "Zoom précédent (dans l'historique des zooms)"
 
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2606
 msgid "Zoom 1:_1"
 msgstr "Zoom 1:_1"
 
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2606
 msgid "Zoom to 1:1"
 msgstr "Zoommer à 1:1"
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2608
 msgid "Zoom 1:_2"
 msgstr "Zoom 1:_2"
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2608
 msgid "Zoom to 1:2"
 msgstr "Zoommer à 1:2"
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2610
 msgid "_Zoom 2:1"
 msgstr "_Zoom 2:1"
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2610
 msgid "Zoom to 2:1"
 msgstr "Zoommer à 2:1"
 
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2613
 msgid "_Fullscreen"
 msgstr "Plein _écran"
 
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2613
 msgid "Stretch this document window to full screen"
 msgstr "Afficher cette fenêtre (document) en plein écran"
 
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2616
 msgid "Toggle _Focus Mode"
 msgstr "Inverser le mode de _focus"
 
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2616
 msgid "Remove excess toolbars to focus on drawing"
 msgstr "Supprime les barres superflues pour se concentrer sur le dessin"
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2618
 msgid "Duplic_ate Window"
 msgstr "Dupliquer la _fenêtre"
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2618
 msgid "Open a new window with the same document"
 msgstr "Ouvrir une nouvelle fenêtre avec le même document"
 
-#: ../src/verbs.cpp:2606
+#: ../src/verbs.cpp:2620
 msgid "_New View Preview"
 msgstr "_Nouvel aperçu"
 
-#: ../src/verbs.cpp:2607
+#: ../src/verbs.cpp:2621
 msgid "New View Preview"
 msgstr "Nouvel aperçu"
 
 #. "view_new_preview"
-#: ../src/verbs.cpp:2609
+#: ../src/verbs.cpp:2623
 msgid "_Normal"
 msgstr "_Normal"
 
-#: ../src/verbs.cpp:2610
+#: ../src/verbs.cpp:2624
 msgid "Switch to normal display mode"
 msgstr "Passer en mode d'affichage normal"
 
-#: ../src/verbs.cpp:2611
+#: ../src/verbs.cpp:2625
 msgid "No _Filters"
 msgstr "Sans _filtre"
 
-#: ../src/verbs.cpp:2612
+#: ../src/verbs.cpp:2626
 msgid "Switch to normal display without filters"
 msgstr "Passer en mode d'affichage normal, sans filtre"
 
-#: ../src/verbs.cpp:2613
+#: ../src/verbs.cpp:2627
 msgid "_Outline"
 msgstr "_Contour"
 
-#: ../src/verbs.cpp:2614
+#: ../src/verbs.cpp:2628
 msgid "Switch to outline (wireframe) display mode"
 msgstr "Passer en mode d'affichage contour (fil de fer)"
 
-#: ../src/verbs.cpp:2615
+#: ../src/verbs.cpp:2629
 msgid "_Toggle"
 msgstr "Al_terner"
 
-#: ../src/verbs.cpp:2616
+#: ../src/verbs.cpp:2630
 msgid "Toggle between normal and outline display modes"
 msgstr "Alterner entre les modes d'affichage normal et contour"
 
-#: ../src/verbs.cpp:2618
+#: ../src/verbs.cpp:2632
 msgid "Color-managed view"
 msgstr "Affichage avec gestion des couleurs"
 
-#: ../src/verbs.cpp:2619
+#: ../src/verbs.cpp:2633
 msgid "Toggle color-managed display for this document window"
 msgstr "Alterner entre le mode d'affichage avec gestion des couleurs et le mode normal pour cette fenêtre de document"
 
-#: ../src/verbs.cpp:2621
+#: ../src/verbs.cpp:2635
 msgid "Ico_n Preview..."
 msgstr "Aperçu d'_icône..."
 
-#: ../src/verbs.cpp:2622
+#: ../src/verbs.cpp:2636
 msgid "Open a window to preview objects at different icon resolutions"
 msgstr "Ouvrir une fenêtre d'aperçu des objets en icônes à différentes résolutions"
 
-#: ../src/verbs.cpp:2624
+#: ../src/verbs.cpp:2638
 msgid "Zoom to fit page in window"
 msgstr "Ajuster la page à la fenêtre"
 
-#: ../src/verbs.cpp:2625
+#: ../src/verbs.cpp:2639
 msgid "Page _Width"
 msgstr "_Largeur de la page"
 
-#: ../src/verbs.cpp:2626
+#: ../src/verbs.cpp:2640
 msgid "Zoom to fit page width in window"
 msgstr "Zoomer pour ajuster la largeur de la page à la fenêtre"
 
-#: ../src/verbs.cpp:2628
+#: ../src/verbs.cpp:2642
 msgid "Zoom to fit drawing in window"
 msgstr "Zoomer pour ajuster le dessin à la fenêtre"
 
-#: ../src/verbs.cpp:2630
+#: ../src/verbs.cpp:2644
 msgid "Zoom to fit selection in window"
 msgstr "Zoomer pour ajuster la sélection à la fenêtre"
 
 #. Dialogs
-#: ../src/verbs.cpp:2633
+#: ../src/verbs.cpp:2647
 msgid "In_kscape Preferences..."
 msgstr "Préférences d'In_kscape..."
 
-#: ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2648
 msgid "Edit global Inkscape preferences"
 msgstr "Éditer les préférences globales d'Inkscape"
 
-#: ../src/verbs.cpp:2635
+#: ../src/verbs.cpp:2649
 msgid "_Document Properties..."
 msgstr "Propriétés du do_cument..."
 
-#: ../src/verbs.cpp:2636
+#: ../src/verbs.cpp:2650
 msgid "Edit properties of this document (to be saved with the document)"
 msgstr "Éditer les préférences du document (enregistrées avec celui-ci)"
 
-#: ../src/verbs.cpp:2637
+#: ../src/verbs.cpp:2651
 msgid "Document _Metadata..."
 msgstr "_Métadonnées du document..."
 
-#: ../src/verbs.cpp:2638
+#: ../src/verbs.cpp:2652
 msgid "Edit document metadata (to be saved with the document)"
 msgstr "Éditer les métadonnées du document (enregistrées avec celui-ci)"
 
-#: ../src/verbs.cpp:2639
+#: ../src/verbs.cpp:2653
 msgid "_Fill and Stroke..."
 msgstr "_Remplissage et contour..."
 
-#: ../src/verbs.cpp:2640
+#: ../src/verbs.cpp:2654
 msgid "Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
 msgstr "Éditer les couleurs de l'objet, ses dégradés, l'épaisseur de son contour, les têtes de flèches, les pointillés..."
 
 #. TRANSLATORS: "Swatches" means: color samples
-#: ../src/verbs.cpp:2642
+#: ../src/verbs.cpp:2656
 msgid "S_watches..."
 msgstr "_Palettes..."
 
-#: ../src/verbs.cpp:2643
+#: ../src/verbs.cpp:2657
 msgid "Select colors from a swatches palette"
 msgstr "Sélectionner des couleurs depuis une palette"
 
-#: ../src/verbs.cpp:2644
+#: ../src/verbs.cpp:2658
 msgid "Transfor_m..."
 msgstr "_Transformer..."
 
-#: ../src/verbs.cpp:2645
+#: ../src/verbs.cpp:2659
 msgid "Precisely control objects' transformations"
 msgstr "Contrôler précisément les transformations d'objets"
 
-#: ../src/verbs.cpp:2646
+#: ../src/verbs.cpp:2660
 msgid "_Align and Distribute..."
 msgstr "Aligner et distri_buer..."
 
-#: ../src/verbs.cpp:2647
+#: ../src/verbs.cpp:2661
 msgid "Align and distribute objects"
 msgstr "Aligner et distribuer des objets"
 
-#: ../src/verbs.cpp:2648
+#: ../src/verbs.cpp:2662
+msgid "_Spray options..."
+msgstr "Options du pulvéri_sateur..."
+
+#: ../src/verbs.cpp:2663
+msgid "Some options for the spray"
+msgstr "Options pour le pulvérisateur"
+
+#: ../src/verbs.cpp:2664
 msgid "Undo _History..."
 msgstr "_Historique des annulations"
 
-#: ../src/verbs.cpp:2649
+#: ../src/verbs.cpp:2665
 msgid "Undo History"
 msgstr "Historique des annulations"
 
-#: ../src/verbs.cpp:2650
+#: ../src/verbs.cpp:2666
 msgid "_Text and Font..."
 msgstr "_Texte et police..."
 
-#: ../src/verbs.cpp:2651
+#: ../src/verbs.cpp:2667
 msgid "View and select font family, font size and other text properties"
 msgstr "Voir et sélectionner une police, une taille de police et autres propriétés de texte"
 
-#: ../src/verbs.cpp:2652
+#: ../src/verbs.cpp:2668
 msgid "_XML Editor..."
 msgstr "Éditeur _XML..."
 
-#: ../src/verbs.cpp:2653
+#: ../src/verbs.cpp:2669
 msgid "View and edit the XML tree of the document"
 msgstr "Voir et éditer l'arbre XML du document"
 
-#: ../src/verbs.cpp:2654
+#: ../src/verbs.cpp:2670
 msgid "_Find..."
 msgstr "_Rechercher..."
 
-#: ../src/verbs.cpp:2655
+#: ../src/verbs.cpp:2671
 msgid "Find objects in document"
 msgstr "Rechercher des objets dans le document"
 
-#: ../src/verbs.cpp:2656
+#: ../src/verbs.cpp:2672
 msgid "Find and _Replace Text..."
 msgstr "Trouver et _remplacer le texte..."
 
-#: ../src/verbs.cpp:2657
+#: ../src/verbs.cpp:2673
 msgid "Find and replace text in document"
 msgstr "Rechercher et remplacer du texte dans le document"
 
-#: ../src/verbs.cpp:2658
+#: ../src/verbs.cpp:2674
 msgid "Check Spellin_g..."
 msgstr "Vérification ortho_graphique..."
 
-#: ../src/verbs.cpp:2659
+#: ../src/verbs.cpp:2675
 msgid "Check spelling of text in document"
 msgstr "Vérifier l'orthographe des texte du document"
 
-#: ../src/verbs.cpp:2660
+#: ../src/verbs.cpp:2676
 msgid "_Messages..."
 msgstr "_Messages..."
 
-#: ../src/verbs.cpp:2661
+#: ../src/verbs.cpp:2677
 msgid "View debug messages"
 msgstr "Voir les messages de débuggage"
 
-#: ../src/verbs.cpp:2662
+#: ../src/verbs.cpp:2678
 msgid "S_cripts..."
 msgstr "S_cripts..."
 
-#: ../src/verbs.cpp:2663
+#: ../src/verbs.cpp:2679
 msgid "Run scripts"
 msgstr "Exécuter des scripts"
 
-#: ../src/verbs.cpp:2664
+#: ../src/verbs.cpp:2680
 msgid "Show/Hide D_ialogs"
 msgstr "Afficher/cacher les boîtes de d_ialogue"
 
-#: ../src/verbs.cpp:2665
+#: ../src/verbs.cpp:2681
 msgid "Show or hide all open dialogs"
 msgstr "Afficher ou non les dialogues ouverts"
 
-#: ../src/verbs.cpp:2666
+#: ../src/verbs.cpp:2682
 msgid "Create Tiled Clones..."
 msgstr "Créer un pavage avec des clones..."
 
-#: ../src/verbs.cpp:2667
+#: ../src/verbs.cpp:2683
 msgid "Create multiple clones of selected object, arranging them into a pattern or scattering"
 msgstr "Créer des clones multiple d'un objet, et les arranger selon un motif ou les disperser"
 
-#: ../src/verbs.cpp:2668
+#: ../src/verbs.cpp:2684
 msgid "_Object Properties..."
 msgstr "Propriétés de l'_objet..."
 
-#: ../src/verbs.cpp:2669
+#: ../src/verbs.cpp:2685
 msgid "Edit the ID, locked and visible status, and other object properties"
 msgstr "Editer l'Id, les statuts de visibilité et de verrouillage et autres propriétés des objets"
 
-#: ../src/verbs.cpp:2672
-msgid "_Instant Messaging..."
-msgstr "Messagerie _Instantanée"
-
-#: ../src/verbs.cpp:2672
-msgid "Jabber Instant Messaging Client"
-msgstr "Client de messagerie instantanée Jabber"
-
-#: ../src/verbs.cpp:2674
+#. #ifdef WITH_INKBOARD
+#. new DialogVerb(SP_VERB_XMPP_CLIENT, "DialogXmppClient",
+#. N_("_Instant Messaging..."), N_("Jabber Instant Messaging Client"), NULL),
+#. #endif
+#: ../src/verbs.cpp:2690
 msgid "_Input Devices..."
 msgstr "Périp_hériques de saisie..."
 
-#: ../src/verbs.cpp:2675
-#: ../src/verbs.cpp:2677
+#: ../src/verbs.cpp:2691
+#: ../src/verbs.cpp:2693
 msgid "Configure extended input devices, such as a graphics tablet"
 msgstr "Configurer les périphériques de saisie étendus, comme une tablette graphique"
 
-#: ../src/verbs.cpp:2676
+#: ../src/verbs.cpp:2692
 msgid "_Input Devices (new)..."
 msgstr "Périphériques de saisie... (nouveau)"
 
-#: ../src/verbs.cpp:2678
+#: ../src/verbs.cpp:2694
 msgid "_Extensions..."
 msgstr "_Extensions..."
 
-#: ../src/verbs.cpp:2679
+#: ../src/verbs.cpp:2695
 msgid "Query information about extensions"
 msgstr "Demander des informations à propos des extensions"
 
-#: ../src/verbs.cpp:2680
+#: ../src/verbs.cpp:2696
 msgid "Layer_s..."
 msgstr "_Calques..."
 
-#: ../src/verbs.cpp:2681
+#: ../src/verbs.cpp:2697
 msgid "View Layers"
 msgstr "Afficher les calques"
 
-#: ../src/verbs.cpp:2682
+#: ../src/verbs.cpp:2698
 msgid "Path Effect Editor..."
 msgstr "Éditeur d'effets de chemin..."
 
-#: ../src/verbs.cpp:2683
+#: ../src/verbs.cpp:2699
 msgid "Manage, edit, and apply path effects"
 msgstr "Créer, modifier et appliquer des effets de chemin"
 
-#: ../src/verbs.cpp:2684
+#: ../src/verbs.cpp:2700
 msgid "Filter Editor..."
 msgstr "Éditeur de filtres..."
 
-#: ../src/verbs.cpp:2685
+#: ../src/verbs.cpp:2701
 msgid "Manage, edit, and apply SVG filters"
 msgstr "Gérer, modifier et appliquer des filtres SVG"
 
-#: ../src/verbs.cpp:2686
+#: ../src/verbs.cpp:2702
 msgid "SVG Font Editor..."
 msgstr "Éditeur de fontes SVG..."
 
-#: ../src/verbs.cpp:2687
+#: ../src/verbs.cpp:2703
 msgid "Edit SVG fonts"
 msgstr "Éditer les fontes SVG"
 
 #. Help
-#: ../src/verbs.cpp:2690
+#: ../src/verbs.cpp:2706
 msgid "About E_xtensions"
 msgstr "À propos des e_xtensions"
 
-#: ../src/verbs.cpp:2691
+#: ../src/verbs.cpp:2707
 msgid "Information on Inkscape extensions"
 msgstr "Information sur les extensions d'Inkscape"
 
-#: ../src/verbs.cpp:2692
+#: ../src/verbs.cpp:2708
 msgid "About _Memory"
 msgstr "Gestion _mémoire"
 
-#: ../src/verbs.cpp:2693
+#: ../src/verbs.cpp:2709
 msgid "Memory usage information"
 msgstr "Information sur l'utilisation de la mémoire"
 
-#: ../src/verbs.cpp:2694
+#: ../src/verbs.cpp:2710
 msgid "_About Inkscape"
 msgstr "À _propos d'Inkscape"
 
-#: ../src/verbs.cpp:2695
+#: ../src/verbs.cpp:2711
 msgid "Inkscape version, authors, license"
 msgstr "Version, auteurs et licence d'Inkscape"
 
 #. new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"),
 #. N_("Distribution terms"), /*"show_license"*/"inkscape_options"),
 #. Tutorials
-#: ../src/verbs.cpp:2700
+#: ../src/verbs.cpp:2716
 msgid "Inkscape: _Basic"
 msgstr "Inkscape : _basique"
 
-#: ../src/verbs.cpp:2701
+#: ../src/verbs.cpp:2717
 msgid "Getting started with Inkscape"
 msgstr "Premiers pas avec Inkscape"
 
 #. "tutorial_basic"
-#: ../src/verbs.cpp:2702
+#: ../src/verbs.cpp:2718
 msgid "Inkscape: _Shapes"
 msgstr "Inkscape : _formes"
 
-#: ../src/verbs.cpp:2703
+#: ../src/verbs.cpp:2719
 msgid "Using shape tools to create and edit shapes"
 msgstr "Utilisation des outils de formes pour créer et éditer des formes"
 
-#: ../src/verbs.cpp:2704
+#: ../src/verbs.cpp:2720
 msgid "Inkscape: _Advanced"
 msgstr "Inkscape : _avancé"
 
-#: ../src/verbs.cpp:2705
+#: ../src/verbs.cpp:2721
 msgid "Advanced Inkscape topics"
 msgstr "Sujets avancés d'Inkscape"
 
 #. "tutorial_advanced"
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2707
+#: ../src/verbs.cpp:2723
 msgid "Inkscape: T_racing"
 msgstr "Inkscape : _vectorisation"
 
-#: ../src/verbs.cpp:2708
+#: ../src/verbs.cpp:2724
 msgid "Using bitmap tracing"
 msgstr "Vectorisation de bitmap"
 
 #. "tutorial_tracing"
-#: ../src/verbs.cpp:2709
+#: ../src/verbs.cpp:2725
 msgid "Inkscape: _Calligraphy"
 msgstr "Inkscape : _calligraphie"
 
-#: ../src/verbs.cpp:2710
+#: ../src/verbs.cpp:2726
 msgid "Using the Calligraphy pen tool"
 msgstr "Utilisation de la plume calligraphique d'Inkscape"
 
-#: ../src/verbs.cpp:2711
+#: ../src/verbs.cpp:2727
 msgid "_Elements of Design"
 msgstr "Rudiments de _design"
 
-#: ../src/verbs.cpp:2712
+#: ../src/verbs.cpp:2728
 msgid "Principles of design in the tutorial form"
 msgstr "Rudiments de design sous forme de didacticiel"
 
 #. "tutorial_design"
-#: ../src/verbs.cpp:2713
+#: ../src/verbs.cpp:2729
 msgid "_Tips and Tricks"
 msgstr "_Trucs et astuces"
 
-#: ../src/verbs.cpp:2714
+#: ../src/verbs.cpp:2730
 msgid "Miscellaneous tips and tricks"
 msgstr "Divers trucs et astuces"
 
 #. "tutorial_tips"
 #. Effect -- renamed Extension
-#: ../src/verbs.cpp:2717
+#: ../src/verbs.cpp:2733
 msgid "Previous Extension"
 msgstr "Extension précédente"
 
-#: ../src/verbs.cpp:2718
+#: ../src/verbs.cpp:2734
 msgid "Repeat the last extension with the same settings"
 msgstr "Répéter la dernière extension avec les mêmes paramètres"
 
-#: ../src/verbs.cpp:2719
+#: ../src/verbs.cpp:2735
 msgid "Previous Extension Settings..."
 msgstr "Paramètres de l'extension précédente..."
 
-#: ../src/verbs.cpp:2720
+#: ../src/verbs.cpp:2736
 msgid "Repeat the last extension with new settings"
 msgstr "Répéter la dernière extension avec les nouveaux paramètres"
 
-#: ../src/verbs.cpp:2724
+#: ../src/verbs.cpp:2740
 msgid "Fit the page to the current selection"
 msgstr "Ajuster la page à la sélection courante"
 
-#: ../src/verbs.cpp:2726
+#: ../src/verbs.cpp:2742
 msgid "Fit the page to the drawing"
 msgstr "Ajuster la page au dessin"
 
-#: ../src/verbs.cpp:2728
+#: ../src/verbs.cpp:2744
 msgid "Fit the page to the current selection or the drawing if there is no selection"
 msgstr "Ajuster la page à la sélection courante ou au dessin s'il n'y a pas de sélection"
 
 #. LockAndHide
-#: ../src/verbs.cpp:2730
+#: ../src/verbs.cpp:2746
 msgid "Unlock All"
 msgstr "Déverrouiller tout"
 
-#: ../src/verbs.cpp:2732
+#: ../src/verbs.cpp:2748
 msgid "Unlock All in All Layers"
 msgstr "Tout déverouiller dans tous les calques"
 
-#: ../src/verbs.cpp:2734
+#: ../src/verbs.cpp:2750
 msgid "Unhide All"
 msgstr "Montrer tout"
 
-#: ../src/verbs.cpp:2736
+#: ../src/verbs.cpp:2752
 msgid "Unhide All in All Layers"
 msgstr "Tout montrer dans tous les calques"
 
-#: ../src/verbs.cpp:2740
+#: ../src/verbs.cpp:2756
 msgid "Link an ICC color profile"
 msgstr "Lier un profil de couleur ICC"
 
-#: ../src/verbs.cpp:2741
+#: ../src/verbs.cpp:2757
 msgid "Remove Color Profile"
 msgstr "Supprimer le profil de couleur"
 
-#: ../src/verbs.cpp:2742
+#: ../src/verbs.cpp:2758
 msgid "Remove a linked ICC color profile"
 msgstr "Supprimer un profil de couleur ICC lié"
 
@@ -17338,7 +17520,6 @@ msgstr "Taille de police :"
 #. * some representative characters that users of your locale will be
 #. * interested in.
 #: ../src/widgets/font-selector.cpp:641
-#: ../src/widgets/toolbox.cpp:6522
 msgid "AaBbCcIiPpQq12369$€¢?.;/()"
 msgstr "AaBbCcIiPpQq12369$€¢?.;/()"
 
@@ -17384,14 +17565,14 @@ msgid "Edit the stops of the gradient"
 msgstr "Éditer les stops du dégradé"
 
 #: ../src/widgets/gradient-toolbar.cpp:527
-#: ../src/widgets/toolbox.cpp:2630
-#: ../src/widgets/toolbox.cpp:2708
-#: ../src/widgets/toolbox.cpp:3039
-#: ../src/widgets/toolbox.cpp:3077
-#: ../src/widgets/toolbox.cpp:3692
-#: ../src/widgets/toolbox.cpp:3716
-#: ../src/widgets/toolbox.cpp:5130
-#: ../src/widgets/toolbox.cpp:5159
+#: ../src/widgets/toolbox.cpp:2657
+#: ../src/widgets/toolbox.cpp:2735
+#: ../src/widgets/toolbox.cpp:3066
+#: ../src/widgets/toolbox.cpp:3104
+#: ../src/widgets/toolbox.cpp:3719
+#: ../src/widgets/toolbox.cpp:3743
+#: ../src/widgets/toolbox.cpp:5349
+#: ../src/widgets/toolbox.cpp:5378
 msgid "<b>New:</b>"
 msgstr "<b>Créer :</b>"
 
@@ -17419,13 +17600,13 @@ msgstr "Appliquer le dégradé au contour"
 #. FIXME: implement averaging of all parameters for multiple selected
 #. gtk_label_set_markup(GTK_LABEL(l), _("<b>Average:</b>"));
 #: ../src/widgets/gradient-toolbar.cpp:610
-#: ../src/widgets/toolbox.cpp:2632
-#: ../src/widgets/toolbox.cpp:3047
-#: ../src/widgets/toolbox.cpp:3065
-#: ../src/widgets/toolbox.cpp:3694
-#: ../src/widgets/toolbox.cpp:3705
-#: ../src/widgets/toolbox.cpp:5133
-#: ../src/widgets/toolbox.cpp:5144
+#: ../src/widgets/toolbox.cpp:2659
+#: ../src/widgets/toolbox.cpp:3074
+#: ../src/widgets/toolbox.cpp:3092
+#: ../src/widgets/toolbox.cpp:3721
+#: ../src/widgets/toolbox.cpp:3732
+#: ../src/widgets/toolbox.cpp:5352
+#: ../src/widgets/toolbox.cpp:5363
 msgid "<b>Change:</b>"
 msgstr "<b>Modifier :</b>"
 
@@ -17668,67 +17849,67 @@ msgstr "CMS"
 
 # Red (in RGB)
 #: ../src/widgets/sp-color-icc-selector.cpp:220
-#: ../src/widgets/sp-color-scales.cpp:399
+#: ../src/widgets/sp-color-scales.cpp:411
 msgid "_R"
 msgstr "_R"
 
 # Green (in RGB)
 #: ../src/widgets/sp-color-icc-selector.cpp:220
 #: ../src/widgets/sp-color-icc-selector.cpp:221
-#: ../src/widgets/sp-color-scales.cpp:402
+#: ../src/widgets/sp-color-scales.cpp:414
 msgid "_G"
 msgstr "_V"
 
 # Blue (in RGB)
 #: ../src/widgets/sp-color-icc-selector.cpp:220
-#: ../src/widgets/sp-color-scales.cpp:405
+#: ../src/widgets/sp-color-scales.cpp:417
 msgid "_B"
 msgstr "_B"
 
 # Hue (in HSL)
 #: ../src/widgets/sp-color-icc-selector.cpp:222
 #: ../src/widgets/sp-color-icc-selector.cpp:223
-#: ../src/widgets/sp-color-scales.cpp:425
+#: ../src/widgets/sp-color-scales.cpp:437
 msgid "_H"
 msgstr "_T"
 
 # Saturation (in HSL)
 #: ../src/widgets/sp-color-icc-selector.cpp:222
 #: ../src/widgets/sp-color-icc-selector.cpp:223
-#: ../src/widgets/sp-color-scales.cpp:428
+#: ../src/widgets/sp-color-scales.cpp:440
 msgid "_S"
 msgstr "_S"
 
 # Luminosity (in HSL)
 #: ../src/widgets/sp-color-icc-selector.cpp:223
-#: ../src/widgets/sp-color-scales.cpp:431
+#: ../src/widgets/sp-color-scales.cpp:443
 msgid "_L"
 msgstr "_L"
 
 # Cyan (in CYMK)
 #: ../src/widgets/sp-color-icc-selector.cpp:224
 #: ../src/widgets/sp-color-icc-selector.cpp:225
-#: ../src/widgets/sp-color-scales.cpp:453
+#: ../src/widgets/sp-color-scales.cpp:465
 msgid "_C"
 msgstr "_C"
 
 # Magenta (in CYMK)
 #: ../src/widgets/sp-color-icc-selector.cpp:224
 #: ../src/widgets/sp-color-icc-selector.cpp:225
-#: ../src/widgets/sp-color-scales.cpp:456
+#: ../src/widgets/sp-color-scales.cpp:468
 msgid "_M"
 msgstr "_M"
 
 # Yellow (in CYMK)
 #: ../src/widgets/sp-color-icc-selector.cpp:224
 #: ../src/widgets/sp-color-icc-selector.cpp:225
-#: ../src/widgets/sp-color-scales.cpp:459
+#: ../src/widgets/sp-color-scales.cpp:471
 msgid "_Y"
 msgstr "_J"
 
 # BlacK (in CYMK)
 #: ../src/widgets/sp-color-icc-selector.cpp:224
-#: ../src/widgets/sp-color-scales.cpp:462
+#: ../src/widgets/sp-color-scales.cpp:474
 msgid "_K"
 msgstr "_N"
 
@@ -17738,22 +17919,22 @@ msgstr "Niveaux de gris"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:238
 #: ../src/widgets/sp-color-icc-selector.cpp:239
-#: ../src/widgets/sp-color-scales.cpp:454
-#: ../src/widgets/sp-color-scales.cpp:455
+#: ../src/widgets/sp-color-scales.cpp:466
+#: ../src/widgets/sp-color-scales.cpp:467
 msgid "Cyan"
 msgstr "Cyan"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:238
 #: ../src/widgets/sp-color-icc-selector.cpp:239
-#: ../src/widgets/sp-color-scales.cpp:457
-#: ../src/widgets/sp-color-scales.cpp:458
+#: ../src/widgets/sp-color-scales.cpp:469
+#: ../src/widgets/sp-color-scales.cpp:470
 msgid "Magenta"
 msgstr "Magenta"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:238
 #: ../src/widgets/sp-color-icc-selector.cpp:239
-#: ../src/widgets/sp-color-scales.cpp:460
-#: ../src/widgets/sp-color-scales.cpp:461
+#: ../src/widgets/sp-color-scales.cpp:472
+#: ../src/widgets/sp-color-scales.cpp:473
 msgid "Yellow"
 msgstr "Jaune"
 
@@ -17768,43 +17949,56 @@ msgstr "Fixer une valeur RVB de secours pour correspondre à la valeur icc-color
 # Alpha (opacity)
 #. Label
 #: ../src/widgets/sp-color-icc-selector.cpp:380
-#: ../src/widgets/sp-color-scales.cpp:408
-#: ../src/widgets/sp-color-scales.cpp:434
-#: ../src/widgets/sp-color-scales.cpp:465
-#: ../src/widgets/sp-color-wheel-selector.cpp:134
+#: ../src/widgets/sp-color-scales.cpp:420
+#: ../src/widgets/sp-color-scales.cpp:446
+#: ../src/widgets/sp-color-scales.cpp:477
+#: ../src/widgets/sp-color-wheel-selector.cpp:135
 msgid "_A"
 msgstr "_A"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:390
 #: ../src/widgets/sp-color-icc-selector.cpp:402
-#: ../src/widgets/sp-color-scales.cpp:409
-#: ../src/widgets/sp-color-scales.cpp:410
-#: ../src/widgets/sp-color-scales.cpp:435
-#: ../src/widgets/sp-color-scales.cpp:436
-#: ../src/widgets/sp-color-scales.cpp:466
-#: ../src/widgets/sp-color-scales.cpp:467
-#: ../src/widgets/sp-color-wheel-selector.cpp:144
-#: ../src/widgets/sp-color-wheel-selector.cpp:156
+#: ../src/widgets/sp-color-scales.cpp:421
+#: ../src/widgets/sp-color-scales.cpp:422
+#: ../src/widgets/sp-color-scales.cpp:447
+#: ../src/widgets/sp-color-scales.cpp:448
+#: ../src/widgets/sp-color-scales.cpp:478
+#: ../src/widgets/sp-color-scales.cpp:479
+#: ../src/widgets/sp-color-wheel-selector.cpp:145
+#: ../src/widgets/sp-color-wheel-selector.cpp:157
 msgid "Alpha (opacity)"
 msgstr "Alpha (opacité)"
 
-#: ../src/widgets/sp-color-notebook.cpp:330
+#: ../src/widgets/sp-color-notebook.cpp:339
+msgid "Color Managed"
+msgstr "Couleur gérée"
+
+#: ../src/widgets/sp-color-notebook.cpp:347
+msgid "Out of gamut!"
+msgstr "Hors gamut !"
+
+#: ../src/widgets/sp-color-notebook.cpp:355
+msgid "Too much ink!"
+msgstr "trop d'encre !"
+
+#. Create RGBA entry and color preview
+#: ../src/widgets/sp-color-notebook.cpp:362
 msgid "RGBA_:"
 msgstr "RVBA _:"
 
-#: ../src/widgets/sp-color-notebook.cpp:338
+#: ../src/widgets/sp-color-notebook.cpp:370
 msgid "Hexadecimal RGBA value of the color"
 msgstr "Valeur hexadécimale RVBA de la couleur"
 
-#: ../src/widgets/sp-color-scales.cpp:79
+#: ../src/widgets/sp-color-scales.cpp:81
 msgid "RGB"
 msgstr "RVB"
 
-#: ../src/widgets/sp-color-scales.cpp:79
+#: ../src/widgets/sp-color-scales.cpp:81
 msgid "HSL"
 msgstr "TSL"
 
-#: ../src/widgets/sp-color-scales.cpp:79
+#: ../src/widgets/sp-color-scales.cpp:81
 msgid "CMYK"
 msgstr "CMJN"
 
@@ -17812,7 +18006,7 @@ msgstr "CMJN"
 msgid "Unnamed"
 msgstr "Sans nom"
 
-#: ../src/widgets/sp-color-wheel-selector.cpp:61
+#: ../src/widgets/sp-color-wheel-selector.cpp:62
 msgid "Wheel"
 msgstr "Roue"
 
@@ -17956,1541 +18150,1704 @@ msgstr "Les marqueurs de fin sont dessinés sur le dernier nœud d'un chemin ou
 msgid "Set stroke style"
 msgstr "Appliquer un style de contour"
 
-#: ../src/widgets/toolbox.cpp:183
+#: ../src/widgets/toolbox.cpp:186
 msgid "Color/opacity used for color tweaking"
 msgstr "Couleur et opacités pour ajuster les couleurs"
 
-#: ../src/widgets/toolbox.cpp:187
+#: ../src/widgets/toolbox.cpp:188
+msgid "Color/opacity used for color spraying"
+msgstr "Couleur et opacités pour la pulvérisation de couleur"
+
+#: ../src/widgets/toolbox.cpp:192
 msgid "Style of new stars"
 msgstr "Style des nouvelles étoiles"
 
-#: ../src/widgets/toolbox.cpp:189
+#: ../src/widgets/toolbox.cpp:194
 msgid "Style of new rectangles"
 msgstr "Style des nouveaux rectangles"
 
-#: ../src/widgets/toolbox.cpp:191
+#: ../src/widgets/toolbox.cpp:196
 msgid "Style of new 3D boxes"
 msgstr "Style des nouvelles boîtes 3D"
 
-#: ../src/widgets/toolbox.cpp:193
+#: ../src/widgets/toolbox.cpp:198
 msgid "Style of new ellipses"
 msgstr "Style des nouvelles ellipses"
 
-#: ../src/widgets/toolbox.cpp:195
+#: ../src/widgets/toolbox.cpp:200
 msgid "Style of new spirals"
 msgstr "Style des nouvelles spirales"
 
-#: ../src/widgets/toolbox.cpp:197
+#: ../src/widgets/toolbox.cpp:202
 msgid "Style of new paths created by Pencil"
 msgstr "Style des chemins créés par le crayon"
 
-#: ../src/widgets/toolbox.cpp:199
+#: ../src/widgets/toolbox.cpp:204
 msgid "Style of new paths created by Pen"
 msgstr "Style des chemins créés par le stylo"
 
-#: ../src/widgets/toolbox.cpp:201
+#: ../src/widgets/toolbox.cpp:206
 msgid "Style of new calligraphic strokes"
 msgstr "Style des nouveaux tracés calligraphiques"
 
-#: ../src/widgets/toolbox.cpp:203
-#: ../src/widgets/toolbox.cpp:205
+#: ../src/widgets/toolbox.cpp:208
+#: ../src/widgets/toolbox.cpp:210
 msgid "TBD"
 msgstr "À définir"
 
-#: ../src/widgets/toolbox.cpp:215
+#: ../src/widgets/toolbox.cpp:220
 msgid "Style of Paint Bucket fill objects"
 msgstr "Style des objets créés par remplissage au seau"
 
-#: ../src/widgets/toolbox.cpp:1289
+#: ../src/widgets/toolbox.cpp:1315
 msgid "Insert node"
 msgstr "Insérer un nœud"
 
-#: ../src/widgets/toolbox.cpp:1290
+#: ../src/widgets/toolbox.cpp:1316
 msgid "Insert new nodes into selected segments"
 msgstr "Insérer de nouveaux nœuds aux milieux des segments sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1293
+#: ../src/widgets/toolbox.cpp:1319
 msgid "Insert"
 msgstr "Insérer"
 
-#: ../src/widgets/toolbox.cpp:1301
+#: ../src/widgets/toolbox.cpp:1327
 msgid "Delete selected nodes"
 msgstr "Supprimer les nœuds sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1311
+#: ../src/widgets/toolbox.cpp:1337
 msgid "Join endnodes"
 msgstr "Joindre les extrémités"
 
-#: ../src/widgets/toolbox.cpp:1312
+#: ../src/widgets/toolbox.cpp:1338
 msgid "Join selected endnodes"
 msgstr "Joindre les nœuds terminaux sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1315
+#: ../src/widgets/toolbox.cpp:1341
 msgid "Join"
 msgstr "Joindre"
 
-#: ../src/widgets/toolbox.cpp:1322
+#: ../src/widgets/toolbox.cpp:1348
 msgid "Break nodes"
 msgstr "Séparer les nœuds"
 
-#: ../src/widgets/toolbox.cpp:1323
+#: ../src/widgets/toolbox.cpp:1349
 msgid "Break path at selected nodes"
 msgstr "Briser le chemin aux nœuds sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1333
+#: ../src/widgets/toolbox.cpp:1359
 msgid "Join with segment"
 msgstr "Joindre par un segment"
 
-#: ../src/widgets/toolbox.cpp:1334
+#: ../src/widgets/toolbox.cpp:1360
 msgid "Join selected endnodes with a new segment"
 msgstr "Joindre les nœuds terminaux sélectionnés par un nouveau segment"
 
-#: ../src/widgets/toolbox.cpp:1344
+#: ../src/widgets/toolbox.cpp:1370
 msgid "Delete segment between two non-endpoint nodes"
 msgstr "Supprimer un segment entre deux nœuds non terminaux"
 
-#: ../src/widgets/toolbox.cpp:1353
+#: ../src/widgets/toolbox.cpp:1379
 msgid "Node Cusp"
 msgstr "Dur"
 
-#: ../src/widgets/toolbox.cpp:1354
+#: ../src/widgets/toolbox.cpp:1380
 msgid "Make selected nodes corner"
 msgstr "Rendre durs les nœuds sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1363
+#: ../src/widgets/toolbox.cpp:1389
 msgid "Node Smooth"
 msgstr "Doux"
 
-#: ../src/widgets/toolbox.cpp:1364
+#: ../src/widgets/toolbox.cpp:1390
 msgid "Make selected nodes smooth"
 msgstr "Rendre doux les nœuds sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1373
+#: ../src/widgets/toolbox.cpp:1399
 msgid "Node Symmetric"
 msgstr "Symétrique"
 
-#: ../src/widgets/toolbox.cpp:1374
+#: ../src/widgets/toolbox.cpp:1400
 msgid "Make selected nodes symmetric"
 msgstr "Rendre symétriques les nœuds sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1383
+#: ../src/widgets/toolbox.cpp:1409
 msgid "Node Auto"
 msgstr "Nœud automatique"
 
-#: ../src/widgets/toolbox.cpp:1384
+#: ../src/widgets/toolbox.cpp:1410
 msgid "Make selected nodes auto-smooth"
 msgstr "Rendre automatiques les nœuds sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1393
+#: ../src/widgets/toolbox.cpp:1419
 msgid "Node Line"
 msgstr "Rectiligne"
 
-#: ../src/widgets/toolbox.cpp:1394
+#: ../src/widgets/toolbox.cpp:1420
 msgid "Make selected segments lines"
 msgstr "Rendre rectilignes les segments sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1403
+#: ../src/widgets/toolbox.cpp:1429
 msgid "Node Curve"
 msgstr "Courbe"
 
-#: ../src/widgets/toolbox.cpp:1404
+#: ../src/widgets/toolbox.cpp:1430
 msgid "Make selected segments curves"
 msgstr "Rendre courbes les segments sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1413
+#: ../src/widgets/toolbox.cpp:1439
 msgid "Show Handles"
 msgstr "Afficher les poignées"
 
-#: ../src/widgets/toolbox.cpp:1414
+#: ../src/widgets/toolbox.cpp:1440
 msgid "Show the Bezier handles of selected nodes"
 msgstr "Afficher les poignées de Bézier des nœuds sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:1424
+#: ../src/widgets/toolbox.cpp:1450
 msgid "Show Outline"
 msgstr "Afficher le contour"
 
-#: ../src/widgets/toolbox.cpp:1425
+#: ../src/widgets/toolbox.cpp:1451
 msgid "Show the outline of the path"
 msgstr "Afficher le contour du chemin"
 
-#: ../src/widgets/toolbox.cpp:1435
+#: ../src/widgets/toolbox.cpp:1461
 msgid "Next path effect parameter"
 msgstr "Paramètre de l'effect de chemin suivant"
 
-#: ../src/widgets/toolbox.cpp:1436
+#: ../src/widgets/toolbox.cpp:1462
 msgid "Show next path effect parameter for editing"
 msgstr "Afficher le paramètre d'effet de chemin suivant pour le modifier"
 
-#: ../src/widgets/toolbox.cpp:1447
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Edit the clipping path of the object"
 msgstr "Modifier le chemin de découpe de l'objet"
 
-#: ../src/widgets/toolbox.cpp:1457
+#: ../src/widgets/toolbox.cpp:1483
 msgid "Edit mask path"
 msgstr "Modifier le chemin du masque"
 
-#: ../src/widgets/toolbox.cpp:1458
+#: ../src/widgets/toolbox.cpp:1484
 msgid "Edit the mask of the object"
 msgstr "Modifier le chemin du masque de l'objet"
 
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X coordinate:"
 msgstr "Coordonnée X :"
 
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X coordinate of selected node(s)"
 msgstr "Coordonnée X de la sélection"
 
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y coordinate:"
 msgstr "Coordonnée Y :"
 
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y coordinate of selected node(s)"
 msgstr "Coordonnée Y de la sélection"
 
-#: ../src/widgets/toolbox.cpp:2028
+#: ../src/widgets/toolbox.cpp:2055
 msgid "Enable snapping"
 msgstr "Activer le magnétisme"
 
-#: ../src/widgets/toolbox.cpp:2037
+#: ../src/widgets/toolbox.cpp:2064
 msgid "Bounding box"
 msgstr "Boîte englobante"
 
-#: ../src/widgets/toolbox.cpp:2037
+#: ../src/widgets/toolbox.cpp:2064
 msgid "Snap bounding box corners"
 msgstr "Aimanter aux coins des boîtes englobantes"
 
-#: ../src/widgets/toolbox.cpp:2046
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Bounding box edges"
 msgstr "Bords des boîtes englobantes"
 
-#: ../src/widgets/toolbox.cpp:2046
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Snap to edges of a bounding box"
 msgstr "Aimanter aux bords des boîtes englobantes"
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2082
 msgid "Bounding box corners"
 msgstr "Coins des boîtes englobantes"
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2082
 msgid "Snap to bounding box corners"
 msgstr "Aimanter aux coins des boîtes englobantes"
 
-#: ../src/widgets/toolbox.cpp:2064
+#: ../src/widgets/toolbox.cpp:2091
 msgid "BBox Edge Midpoints"
 msgstr "Milieux des bords de la boîte englobante"
 
-#: ../src/widgets/toolbox.cpp:2064
+#: ../src/widgets/toolbox.cpp:2091
 msgid "Snap from and to midpoints of bounding box edges"
 msgstr "Aimanter depuis et vers le milieu des bords des boîtes englobantes"
 
-#: ../src/widgets/toolbox.cpp:2074
+#: ../src/widgets/toolbox.cpp:2101
 msgid "BBox Centers"
 msgstr "Centre des boîtes englobantes"
 
-#: ../src/widgets/toolbox.cpp:2074
+#: ../src/widgets/toolbox.cpp:2101
 msgid "Snapping from and to centers of bounding boxes"
 msgstr "Aimanter depuis et vers le centre des boîtes englobantes"
 
-#: ../src/widgets/toolbox.cpp:2083
+#: ../src/widgets/toolbox.cpp:2110
 msgid "Snap nodes or handles"
 msgstr "Aimanter aux nœuds ou aux poignées"
 
-#: ../src/widgets/toolbox.cpp:2091
+#: ../src/widgets/toolbox.cpp:2118
 msgid "Snap to paths"
 msgstr "Aimanter aux chemins"
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2127
 msgid "Path intersections"
 msgstr "Intersections des chemins"
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2127
 msgid "Snap to path intersections"
 msgstr "Aimanter aux intersections des chemins"
 
-#: ../src/widgets/toolbox.cpp:2109
+#: ../src/widgets/toolbox.cpp:2136
 msgid "To nodes"
 msgstr "Aux nœuds"
 
-#: ../src/widgets/toolbox.cpp:2109
+#: ../src/widgets/toolbox.cpp:2136
 msgid "Snap to cusp nodes"
 msgstr "Aimanter aux nœuds durs"
 
-#: ../src/widgets/toolbox.cpp:2118
+#: ../src/widgets/toolbox.cpp:2145
 msgid "Smooth nodes"
 msgstr "Nœuds doux"
 
-#: ../src/widgets/toolbox.cpp:2118
+#: ../src/widgets/toolbox.cpp:2145
 msgid "Snap to smooth nodes"
 msgstr "Aimanter aux nœuds doux"
 
-#: ../src/widgets/toolbox.cpp:2127
+#: ../src/widgets/toolbox.cpp:2154
 msgid "Line Midpoints"
 msgstr "Milieu de ligne"
 
-#: ../src/widgets/toolbox.cpp:2127
+#: ../src/widgets/toolbox.cpp:2154
 msgid "Snap from and to midpoints of line segments"
 msgstr "Aimanter depuis et vers le milieu des segments"
 
-#: ../src/widgets/toolbox.cpp:2136
+#: ../src/widgets/toolbox.cpp:2163
 msgid "Object Centers"
 msgstr "Centres d'objet"
 
-#: ../src/widgets/toolbox.cpp:2136
+#: ../src/widgets/toolbox.cpp:2163
 msgid "Snap from and to centers of objects"
 msgstr "Aimanter depuis et vers le centre des objets"
 
-#: ../src/widgets/toolbox.cpp:2145
+#: ../src/widgets/toolbox.cpp:2172
 msgid "Rotation Centers"
 msgstr "Centres de rotation"
 
-#: ../src/widgets/toolbox.cpp:2145
+#: ../src/widgets/toolbox.cpp:2172
 msgid "Snap from and to an item's rotation center"
 msgstr "Aimanter depuis et vers le centre de rotation d'un objet"
 
-#: ../src/widgets/toolbox.cpp:2154
+#: ../src/widgets/toolbox.cpp:2181
 msgid "Page border"
 msgstr "Bords de la page"
 
-#: ../src/widgets/toolbox.cpp:2154
+#: ../src/widgets/toolbox.cpp:2181
 msgid "Snap to the page border"
 msgstr "Aimanter aux bords de la page"
 
-#: ../src/widgets/toolbox.cpp:2163
+#: ../src/widgets/toolbox.cpp:2190
 msgid "Snap to grids"
 msgstr "Aimanter aux grilles"
 
-#: ../src/widgets/toolbox.cpp:2172
+#: ../src/widgets/toolbox.cpp:2199
 msgid "Snap to guides"
 msgstr "Aimanter aux guides"
 
-#: ../src/widgets/toolbox.cpp:2377
+#: ../src/widgets/toolbox.cpp:2404
 msgid "Star: Change number of corners"
 msgstr "Étoile : modifier le nombre de sommets"
 
-#: ../src/widgets/toolbox.cpp:2422
+#: ../src/widgets/toolbox.cpp:2449
 msgid "Star: Change spoke ratio"
 msgstr "Étoile : modifier le ratio des rayons"
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2492
 msgid "Make polygon"
 msgstr "Transformer en polygone"
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2492
 msgid "Make star"
 msgstr "Transformer en étoile"
 
-#: ../src/widgets/toolbox.cpp:2501
+#: ../src/widgets/toolbox.cpp:2528
 msgid "Star: Change rounding"
 msgstr "Étoile : modifier l'arrondi"
 
-#: ../src/widgets/toolbox.cpp:2536
+#: ../src/widgets/toolbox.cpp:2563
 msgid "Star: Change randomization"
 msgstr "Étoile : modifier le hasard"
 
-#: ../src/widgets/toolbox.cpp:2727
+#: ../src/widgets/toolbox.cpp:2754
 msgid "Regular polygon (with one handle) instead of a star"
 msgstr "Polygone régulier (avec une poignée) au lieu d'une étoile"
 
-#: ../src/widgets/toolbox.cpp:2734
+#: ../src/widgets/toolbox.cpp:2761
 msgid "Star instead of a regular polygon (with one handle)"
 msgstr "Étoile au lieu d'un polygone régulier (avec une poignée)"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "triangle/tri-star"
 msgstr "triangle/étoile à trois branches"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "square/quad-star"
 msgstr "carré/étoile à quatre branches"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "pentagon/five-pointed star"
 msgstr "pentagone/étoile à cinq branches"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "hexagon/six-pointed star"
 msgstr "hexagone/étoile à six branches"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Corners"
 msgstr "Sommets"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Corners:"
 msgstr "Sommets :"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Number of corners of a polygon or star"
 msgstr "Nombre de sommets du polygone ou de l'étoile"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "thin-ray star"
 msgstr "étoile à branches fines"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "pentagram"
 msgstr "pentagramme"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "hexagram"
 msgstr "hexagramme"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "heptagram"
 msgstr "heptagramme"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "octagram"
 msgstr "octagramme"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "regular polygon"
 msgstr "polygone régulier"
 
-#: ../src/widgets/toolbox.cpp:2774
+#: ../src/widgets/toolbox.cpp:2801
 msgid "Spoke ratio"
 msgstr "Ratio des rayons"
 
-#: ../src/widgets/toolbox.cpp:2774
+#: ../src/widgets/toolbox.cpp:2801
 msgid "Spoke ratio:"
 msgstr "Ratio des rayons :"
 
 #. TRANSLATORS: Tip radius of a star is the distance from the center to the farthest handle.
 #. Base radius is the same for the closest handle.
-#: ../src/widgets/toolbox.cpp:2777
+#: ../src/widgets/toolbox.cpp:2804
 msgid "Base radius to tip radius ratio"
 msgstr "Rapport du rayon intérieur sur le rayon extérieur"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "stretched"
 msgstr "étiré"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "twisted"
 msgstr "tordu"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "slightly pinched"
 msgstr "légèrement pincé"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "NOT rounded"
 msgstr "PAS arrondi"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "slightly rounded"
 msgstr "léger arrondi"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "visibly rounded"
 msgstr "arrondi visible"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "well rounded"
 msgstr "bien arrondi"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "amply rounded"
 msgstr "largement arrondi"
 
-#: ../src/widgets/toolbox.cpp:2795
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2822
+#: ../src/widgets/toolbox.cpp:2837
 msgid "blown up"
 msgstr "gonflé"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "Rounded"
 msgstr "Arrondi"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "Rounded:"
 msgstr "Arrondi :"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "How much rounded are the corners (0 for sharp)"
 msgstr "Quantité d'arrondi des sommets (0 pour pointu)"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "NOT randomized"
 msgstr "PAS aléatoire"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "slightly irregular"
 msgstr "légérement irrégulier"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "visibly randomized"
 msgstr "sensiblement aléatoire"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "strongly randomized"
 msgstr "très aléatoire"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Randomized"
 msgstr "Aléatoire"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Randomized:"
 msgstr "Hasard :"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Scatter randomly the corners and angles"
 msgstr "Disperser aléatoirement les sommets et les angles"
 
-#: ../src/widgets/toolbox.cpp:2828
-#: ../src/widgets/toolbox.cpp:3767
-#: ../src/widgets/toolbox.cpp:4027
-#: ../src/widgets/toolbox.cpp:7249
+#: ../src/widgets/toolbox.cpp:2855
+#: ../src/widgets/toolbox.cpp:3794
+#: ../src/widgets/toolbox.cpp:4054
+#: ../src/widgets/toolbox.cpp:7681
 msgid "Defaults"
 msgstr "R-à-z"
 
-#: ../src/widgets/toolbox.cpp:2829
-#: ../src/widgets/toolbox.cpp:3768
+#: ../src/widgets/toolbox.cpp:2856
+#: ../src/widgets/toolbox.cpp:3795
 msgid "Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Restaurer les préférences de la forme par défaut (changez les valeurs par défaut dans Inkscape Préférences > Outils)"
 
-#: ../src/widgets/toolbox.cpp:2902
+#: ../src/widgets/toolbox.cpp:2929
 msgid "Change rectangle"
 msgstr "Modifier un rectangle"
 
-#: ../src/widgets/toolbox.cpp:3095
+#: ../src/widgets/toolbox.cpp:3122
 msgid "W:"
 msgstr "L :"
 
-#: ../src/widgets/toolbox.cpp:3095
+#: ../src/widgets/toolbox.cpp:3122
 msgid "Width of rectangle"
 msgstr "Largeur du rectangle"
 
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 msgid "H:"
 msgstr "H :"
 
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 msgid "Height of rectangle"
 msgstr "Hauteur du rectangle"
 
-#: ../src/widgets/toolbox.cpp:3126
-#: ../src/widgets/toolbox.cpp:3141
+#: ../src/widgets/toolbox.cpp:3153
+#: ../src/widgets/toolbox.cpp:3168
 msgid "not rounded"
 msgstr "pas d'arrondi"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Horizontal radius"
 msgstr "Rayon horizontal"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Rx:"
 msgstr "Rx :"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Horizontal radius of rounded corners"
 msgstr "Rayon horizontal des coins arrondis"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Vertical radius"
 msgstr "Rayon vertical"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Ry:"
 msgstr "Ry :"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Vertical radius of rounded corners"
 msgstr "Rayon vertical des coins arrondis"
 
-#: ../src/widgets/toolbox.cpp:3163
+#: ../src/widgets/toolbox.cpp:3190
 msgid "Not rounded"
 msgstr "Pas d'arrondi"
 
-#: ../src/widgets/toolbox.cpp:3164
+#: ../src/widgets/toolbox.cpp:3191
 msgid "Make corners sharp"
 msgstr "Rendre les coins pointus"
 
 # ligne d'horizon ?
 #. TODO: use the correct axis here, too
-#: ../src/widgets/toolbox.cpp:3352
+#: ../src/widgets/toolbox.cpp:3379
 msgid "3D Box: Change perspective (angle of infinite axis)"
 msgstr "Boîte 3D: changer la perspective (angle de ligne d'horizon)"
 
-#: ../src/widgets/toolbox.cpp:3422
+#: ../src/widgets/toolbox.cpp:3449
 msgid "Angle in X direction"
 msgstr "Angle dans la direction X"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3424
+#: ../src/widgets/toolbox.cpp:3451
 msgid "Angle of PLs in X direction"
 msgstr "Angle des lignes parallèles dans la direction X"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3446
+#: ../src/widgets/toolbox.cpp:3473
 msgid "State of VP in X direction"
 msgstr "État du point de fuite dans la direction X"
 
-#: ../src/widgets/toolbox.cpp:3447
+#: ../src/widgets/toolbox.cpp:3474
 msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Alterner le point de fuite dans la direction X entre « fini » et « infini » (=parallèles)"
 
-#: ../src/widgets/toolbox.cpp:3462
+#: ../src/widgets/toolbox.cpp:3489
 msgid "Angle in Y direction"
 msgstr "Angle dans la direction Y"
 
-#: ../src/widgets/toolbox.cpp:3462
+#: ../src/widgets/toolbox.cpp:3489
 msgid "Angle Y:"
 msgstr "Angle Y :"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3464
+#: ../src/widgets/toolbox.cpp:3491
 msgid "Angle of PLs in Y direction"
 msgstr "Angle des lignes parallèles dans la direction Y"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3485
+#: ../src/widgets/toolbox.cpp:3512
 msgid "State of VP in Y direction"
 msgstr "État du point de fuite dans la direction Y"
 
-#: ../src/widgets/toolbox.cpp:3486
+#: ../src/widgets/toolbox.cpp:3513
 msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Alterner le point de fuite dans la direction Y entre « fini » et « infini » (=parallèles)"
 
-#: ../src/widgets/toolbox.cpp:3501
+#: ../src/widgets/toolbox.cpp:3528
 msgid "Angle in Z direction"
 msgstr "Angle dans la direction Z"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3503
+#: ../src/widgets/toolbox.cpp:3530
 msgid "Angle of PLs in Z direction"
 msgstr "Angle des lignes parallèles dans la direction Z"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3524
+#: ../src/widgets/toolbox.cpp:3551
 msgid "State of VP in Z direction"
 msgstr "État du point de fuite dans la direction Z"
 
-#: ../src/widgets/toolbox.cpp:3525
+#: ../src/widgets/toolbox.cpp:3552
 msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Alterner le point de fuite dans la direction Z entre « fini » et « infini » (=parallèles)"
 
-#: ../src/widgets/toolbox.cpp:3583
+#: ../src/widgets/toolbox.cpp:3610
 msgid "Change spiral"
 msgstr "Modifier une spirale"
 
-#: ../src/widgets/toolbox.cpp:3724
+#: ../src/widgets/toolbox.cpp:3751
 msgid "just a curve"
 msgstr "juste une courbe"
 
-#: ../src/widgets/toolbox.cpp:3724
+#: ../src/widgets/toolbox.cpp:3751
 msgid "one full revolution"
 msgstr "une révolution complète"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Number of turns"
 msgstr "Nombre de tours"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Turns:"
 msgstr "Tours :"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Number of revolutions"
 msgstr "Nombre de révolutions"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "circle"
 msgstr "cercle"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "edge is much denser"
 msgstr "le bord est beaucoup plus dense"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "edge is denser"
 msgstr "le bord est plus dense"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "even"
 msgstr "égal"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "center is denser"
 msgstr "le centre est plus dense"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "center is much denser"
 msgstr "le centre est beaucoup plus dense"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "Divergence"
 msgstr "Divergence :"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "Divergence:"
 msgstr "Divergence :"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "How much denser/sparser are outer revolutions; 1 = uniform"
 msgstr "Densité de la révolution; 1 = uniforme"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts from center"
 msgstr "démarrer du centre"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts mid-way"
 msgstr "démarrer du milieu"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts near edge"
 msgstr "démarrer près du bord"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Inner radius"
 msgstr "Rayon intérieur :"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Inner radius:"
 msgstr "Rayon intérieur :"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Radius of the innermost revolution (relative to the spiral size)"
 msgstr "Rayon de la révolution intérieure (relatif aux dimensions de la spirale)"
 
-#: ../src/widgets/toolbox.cpp:3828
+#: ../src/widgets/toolbox.cpp:3855
 msgid "Bezier"
 msgstr "Bézier"
 
-#: ../src/widgets/toolbox.cpp:3829
+#: ../src/widgets/toolbox.cpp:3856
 msgid "Create regular Bezier path"
 msgstr "Créer un chemin de Bézier régulier"
 
-#: ../src/widgets/toolbox.cpp:3835
+#: ../src/widgets/toolbox.cpp:3862
 msgid "Spiro"
 msgstr "Spiro"
 
-#: ../src/widgets/toolbox.cpp:3836
+#: ../src/widgets/toolbox.cpp:3863
 msgid "Create Spiro path"
 msgstr "Créer un chemin spirographique"
 
-#: ../src/widgets/toolbox.cpp:3843
+#: ../src/widgets/toolbox.cpp:3870
 msgid "Zigzag"
 msgstr "Zigzag"
 
-#: ../src/widgets/toolbox.cpp:3844
+#: ../src/widgets/toolbox.cpp:3871
 msgid "Create a sequence of straight line segments"
 msgstr "Créer une séquence de segments de lignes droites"
 
-#: ../src/widgets/toolbox.cpp:3850
+#: ../src/widgets/toolbox.cpp:3877
 msgid "Paraxial"
 msgstr "Paraxial"
 
-#: ../src/widgets/toolbox.cpp:3851
+#: ../src/widgets/toolbox.cpp:3878
 msgid "Create a sequence of paraxial line segments"
 msgstr "Créer une séquence de segments de lignes paraxiales"
 
-#: ../src/widgets/toolbox.cpp:3859
+#: ../src/widgets/toolbox.cpp:3886
 msgid "Mode of new lines drawn by this tool"
 msgstr "Mode des nouvelles lignes dessinées avec cet outil"
 
-#: ../src/widgets/toolbox.cpp:3888
+#: ../src/widgets/toolbox.cpp:3915
 msgid "Triangle in"
 msgstr "Triangle décroissant"
 
-#: ../src/widgets/toolbox.cpp:3889
+#: ../src/widgets/toolbox.cpp:3916
 msgid "Triangle out"
 msgstr "Triangle croissant"
 
-#: ../src/widgets/toolbox.cpp:3891
+#: ../src/widgets/toolbox.cpp:3918
 msgid "From clipboard"
 msgstr "À partir du presse-papier"
 
-#: ../src/widgets/toolbox.cpp:3916
-#: ../src/widgets/toolbox.cpp:3917
+#: ../src/widgets/toolbox.cpp:3943
+#: ../src/widgets/toolbox.cpp:3944
 msgid "Shape:"
 msgstr "Forme :"
 
-#: ../src/widgets/toolbox.cpp:3916
+#: ../src/widgets/toolbox.cpp:3943
 msgid "Shape of new paths drawn by this tool"
 msgstr "Style des nouveaux chemins dessinés avec cet outil"
 
-#: ../src/widgets/toolbox.cpp:4001
+#: ../src/widgets/toolbox.cpp:4028
 msgid "(many nodes, rough)"
 msgstr "(nombreux nœuds, rugueux)"
 
-#: ../src/widgets/toolbox.cpp:4001
-#: ../src/widgets/toolbox.cpp:4121
-#: ../src/widgets/toolbox.cpp:4138
-#: ../src/widgets/toolbox.cpp:4341
-#: ../src/widgets/toolbox.cpp:4712
-#: ../src/widgets/toolbox.cpp:4745
-#: ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4028
+#: ../src/widgets/toolbox.cpp:4148
+#: ../src/widgets/toolbox.cpp:4165
+#: ../src/widgets/toolbox.cpp:4368
+#: ../src/widgets/toolbox.cpp:4472
+#: ../src/widgets/toolbox.cpp:4488
+#: ../src/widgets/toolbox.cpp:4504
+#: ../src/widgets/toolbox.cpp:4564
+#: ../src/widgets/toolbox.cpp:4931
+#: ../src/widgets/toolbox.cpp:4964
+#: ../src/widgets/toolbox.cpp:5950
 msgid "(default)"
 msgstr "(défaut)"
 
-#: ../src/widgets/toolbox.cpp:4001
+#: ../src/widgets/toolbox.cpp:4028
 msgid "(few nodes, smooth)"
 msgstr "(peu de nœuds, doux)"
 
-#: ../src/widgets/toolbox.cpp:4004
+#: ../src/widgets/toolbox.cpp:4031
 msgid "Smoothing:"
 msgstr "Lissage :"
 
-#: ../src/widgets/toolbox.cpp:4004
+#: ../src/widgets/toolbox.cpp:4031
 msgid "Smoothing: "
 msgstr "Lissage :"
 
-#: ../src/widgets/toolbox.cpp:4005
+#: ../src/widgets/toolbox.cpp:4032
 msgid "How much smoothing (simplifying) is applied to the line"
 msgstr "Quel niveau de lissage (simplification) est appliqué à la ligne"
 
-#: ../src/widgets/toolbox.cpp:4028
+#: ../src/widgets/toolbox.cpp:4055
 msgid "Reset pencil parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Restaurer les préférences du crayon par défaut (changez les valeurs par défaut dans Préférences d'Inkscape > Outils)"
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4121
+#: ../src/widgets/toolbox.cpp:4148
 msgid "(pinch tweak)"
 msgstr "(ajustement serré)"
 
-#: ../src/widgets/toolbox.cpp:4121
+#: ../src/widgets/toolbox.cpp:4148
 msgid "(broad tweak)"
 msgstr "(ajustement large)"
 
-#: ../src/widgets/toolbox.cpp:4124
+#: ../src/widgets/toolbox.cpp:4151
 msgid "The width of the tweak area (relative to the visible canvas area)"
 msgstr "Largeur de la zone d'ajustement (relativement à la zone de travail visible)"
 
 #. Force
-#: ../src/widgets/toolbox.cpp:4138
+#: ../src/widgets/toolbox.cpp:4165
 msgid "(minimum force)"
 msgstr "(force minimum)"
 
-#: ../src/widgets/toolbox.cpp:4138
+#: ../src/widgets/toolbox.cpp:4165
 msgid "(maximum force)"
 msgstr "(force maximum)"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "Force"
 msgstr "Force"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "Force:"
 msgstr "Force :"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "The force of the tweak action"
 msgstr "Force de l'action d'ajustement"
 
-#: ../src/widgets/toolbox.cpp:4159
+#: ../src/widgets/toolbox.cpp:4186
 msgid "Move mode"
 msgstr "Mode déplacement"
 
-#: ../src/widgets/toolbox.cpp:4160
+#: ../src/widgets/toolbox.cpp:4187
 msgid "Move objects in any direction"
 msgstr "Déplace la sélection dans la direction du curseur"
 
-#: ../src/widgets/toolbox.cpp:4166
+#: ../src/widgets/toolbox.cpp:4193
 msgid "Move in/out mode"
 msgstr "Mode rapprochement/éloignement"
 
-#: ../src/widgets/toolbox.cpp:4167
+#: ../src/widgets/toolbox.cpp:4194
 msgid "Move objects towards cursor; with Shift from cursor"
 msgstr "Déplace l'objet vers le curseur ; avec Maj, à l'encontre du curseur"
 
-#: ../src/widgets/toolbox.cpp:4173
+#: ../src/widgets/toolbox.cpp:4200
 msgid "Move jitter mode"
 msgstr "Mode déplacement aléatoire"
 
-#: ../src/widgets/toolbox.cpp:4174
+#: ../src/widgets/toolbox.cpp:4201
 msgid "Move objects in random directions"
 msgstr "Déplace la sélection dans une direction aléatoire"
 
-#: ../src/widgets/toolbox.cpp:4180
+#: ../src/widgets/toolbox.cpp:4207
 msgid "Scale mode"
 msgstr "Mode redimensionnement"
 
-#: ../src/widgets/toolbox.cpp:4181
+#: ../src/widgets/toolbox.cpp:4208
 msgid "Shrink objects, with Shift enlarge"
 msgstr "Rétrécir les objets, avec Maj. étirer"
 
-#: ../src/widgets/toolbox.cpp:4187
+#: ../src/widgets/toolbox.cpp:4214
 msgid "Rotate mode"
 msgstr "Mode rotation"
 
-#: ../src/widgets/toolbox.cpp:4188
+#: ../src/widgets/toolbox.cpp:4215
 msgid "Rotate objects, with Shift counterclockwise"
 msgstr "Applique une rotation dans le sens horaire ; avec Maj, le sens est inversé"
 
-#: ../src/widgets/toolbox.cpp:4194
+#: ../src/widgets/toolbox.cpp:4221
 msgid "Duplicate/delete mode"
 msgstr "Mode duplication/suppression"
 
-#: ../src/widgets/toolbox.cpp:4195
+#: ../src/widgets/toolbox.cpp:4222
 msgid "Duplicate objects, with Shift delete"
 msgstr "Duplique les objets ; avec Maj, efface"
 
-#: ../src/widgets/toolbox.cpp:4201
+#: ../src/widgets/toolbox.cpp:4228
 msgid "Push mode"
 msgstr "Mode poussée"
 
-#: ../src/widgets/toolbox.cpp:4202
+#: ../src/widgets/toolbox.cpp:4229
 msgid "Push parts of paths in any direction"
 msgstr "Pousse le chemin dans le sens du curseur"
 
-#: ../src/widgets/toolbox.cpp:4208
+#: ../src/widgets/toolbox.cpp:4235
 msgid "Shrink/grow mode"
 msgstr "Mode rétrécissement/élargissement"
 
-#: ../src/widgets/toolbox.cpp:4209
+#: ../src/widgets/toolbox.cpp:4236
 msgid "Shrink (inset) parts of paths; with Shift grow (outset)"
 msgstr "Rétrécit les chemins (contraction) ; avec Maj, élargit (dilatation)"
 
-#: ../src/widgets/toolbox.cpp:4215
+#: ../src/widgets/toolbox.cpp:4242
 msgid "Attract/repel mode"
 msgstr "Mode attraction/répulsion"
 
-#: ../src/widgets/toolbox.cpp:4216
+#: ../src/widgets/toolbox.cpp:4243
 msgid "Attract parts of paths towards cursor; with Shift from cursor"
 msgstr "Attire les chemins vers le curseur ; avec Maj, éloigne les chemins du curseur"
 
-#: ../src/widgets/toolbox.cpp:4222
+#: ../src/widgets/toolbox.cpp:4249
 msgid "Roughen mode"
 msgstr "Mode rugueux"
 
-#: ../src/widgets/toolbox.cpp:4223
+#: ../src/widgets/toolbox.cpp:4250
 msgid "Roughen parts of paths"
 msgstr "Rend les chemins plus rugueux"
 
-#: ../src/widgets/toolbox.cpp:4229
+#: ../src/widgets/toolbox.cpp:4256
 msgid "Color paint mode"
 msgstr "Mode peinture de couleur"
 
-#: ../src/widgets/toolbox.cpp:4230
+#: ../src/widgets/toolbox.cpp:4257
 msgid "Paint the tool's color upon selected objects"
 msgstr "Décaler la couleur des objets vers celle de l'outil"
 
-#: ../src/widgets/toolbox.cpp:4236
+#: ../src/widgets/toolbox.cpp:4263
 msgid "Color jitter mode"
 msgstr "Mode perturbation des couleurs"
 
-#: ../src/widgets/toolbox.cpp:4237
+#: ../src/widgets/toolbox.cpp:4264
 msgid "Jitter the colors of selected objects"
 msgstr "Perturber la couleur des objets sélectionnés"
 
-#: ../src/widgets/toolbox.cpp:4243
+#: ../src/widgets/toolbox.cpp:4270
 msgid "Blur mode"
 msgstr "Mode flou"
 
-#: ../src/widgets/toolbox.cpp:4244
+#: ../src/widgets/toolbox.cpp:4271
 msgid "Blur selected objects more; with Shift, blur less"
 msgstr "Ajoute du flou à la sélection ; avec Maj, retire du flou"
 
-#: ../src/widgets/toolbox.cpp:4271
+#: ../src/widgets/toolbox.cpp:4298
 msgid "Channels:"
 msgstr "Canaux :"
 
-#: ../src/widgets/toolbox.cpp:4282
+#: ../src/widgets/toolbox.cpp:4309
 msgid "In color mode, act on objects' hue"
 msgstr "En mode couleur, agit sur la teinte des objets"
 
 #. TRANSLATORS:  "H" here stands for hue
-#: ../src/widgets/toolbox.cpp:4286
+#: ../src/widgets/toolbox.cpp:4313
 msgid "H"
 msgstr "T"
 
-#: ../src/widgets/toolbox.cpp:4297
+#: ../src/widgets/toolbox.cpp:4324
 msgid "In color mode, act on objects' saturation"
 msgstr "En mode couleur, agit sur la saturation des objets"
 
 # Saturation (in HSL)
 #. TRANSLATORS: "S" here stands for Saturation
-#: ../src/widgets/toolbox.cpp:4301
+#: ../src/widgets/toolbox.cpp:4328
 msgid "S"
 msgstr "S"
 
-#: ../src/widgets/toolbox.cpp:4312
+#: ../src/widgets/toolbox.cpp:4339
 msgid "In color mode, act on objects' lightness"
 msgstr "En mode couleur, agit sur la luminosité des objets"
 
 # Luminosity (in HSL)
 #. TRANSLATORS: "L" here stands for Lightness
-#: ../src/widgets/toolbox.cpp:4316
+#: ../src/widgets/toolbox.cpp:4343
 msgid "L"
 msgstr "L"
 
-#: ../src/widgets/toolbox.cpp:4327
+#: ../src/widgets/toolbox.cpp:4354
 msgid "In color mode, act on objects' opacity"
 msgstr "En mode couleur, agit sur l'opacité des objets"
 
 # Opacity
 #. TRANSLATORS: "O" here stands for Opacity
-#: ../src/widgets/toolbox.cpp:4331
+#: ../src/widgets/toolbox.cpp:4358
 msgid "O"
 msgstr "O"
 
 #. Fidelity
-#: ../src/widgets/toolbox.cpp:4341
+#: ../src/widgets/toolbox.cpp:4368
 msgid "(rough, simplified)"
 msgstr "(grossier, simplifié)"
 
-#: ../src/widgets/toolbox.cpp:4341
+#: ../src/widgets/toolbox.cpp:4368
 msgid "(fine, but many nodes)"
 msgstr "(fin, mais avec beaucoup de nœuds)"
 
-#: ../src/widgets/toolbox.cpp:4344
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Fidelity"
 msgstr "Fidélité"
 
-#: ../src/widgets/toolbox.cpp:4344
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Fidelity:"
 msgstr "Fidélité:"
 
-#: ../src/widgets/toolbox.cpp:4345
+#: ../src/widgets/toolbox.cpp:4372
 msgid "Low fidelity simplifies paths; high fidelity preserves path features but may generate a lot of new nodes"
 msgstr "Une basse fidélité simplifie les chemins; Une haute fidélité préserve les propriétés des chemins mais peut ajouter de nombreux nœuds."
 
-#: ../src/widgets/toolbox.cpp:4362
-#: ../src/widgets/toolbox.cpp:4863
+#: ../src/widgets/toolbox.cpp:4389
+#: ../src/widgets/toolbox.cpp:4582
+#: ../src/widgets/toolbox.cpp:5082
 msgid "Pressure"
 msgstr "Pression"
 
-#: ../src/widgets/toolbox.cpp:4363
+#: ../src/widgets/toolbox.cpp:4390
 msgid "Use the pressure of the input device to alter the force of tweak action"
 msgstr "Utiliser la pression du périphérique d'entrée pour modifier la force de l'outil"
 
-#: ../src/widgets/toolbox.cpp:4543
+#. Width
+#: ../src/widgets/toolbox.cpp:4472
+msgid "(narrow spray)"
+msgstr " (pulvérisation étroite)"
+
+#: ../src/widgets/toolbox.cpp:4472
+msgid "(broad spray)"
+msgstr " (pulvérisation large)"
+
+#: ../src/widgets/toolbox.cpp:4475
+msgid "The width of the spray area (relative to the visible canvas area)"
+msgstr "Largeur de la zone de pulvérisation (relativement à la zone de travail visible)"
+
+#. Mean
+#: ../src/widgets/toolbox.cpp:4488
+msgid "(minimum mean)"
+msgstr "(moyenne minimale)"
+
+#: ../src/widgets/toolbox.cpp:4488
+msgid "(maximum mean)"
+msgstr "(moyenne maximale)"
+
+#: ../src/widgets/toolbox.cpp:4491
+#: ../share/extensions/polyhedron_3d.inx.h:25
+msgid "Mean"
+msgstr "Moyenne"
+
+#: ../src/widgets/toolbox.cpp:4491
+msgid "Mean:"
+msgstr "Moyenne :"
+
+#: ../src/widgets/toolbox.cpp:4491
+msgid "The mean of the spray action"
+msgstr "La moyenne de la pulvérisation"
+
+#. Standard_deviation
+#: ../src/widgets/toolbox.cpp:4504
+msgid "(minimum standard_deviation)"
+msgstr "(écart type minimum)"
+
+#: ../src/widgets/toolbox.cpp:4504
+msgid "(maximum standard_deviation)"
+msgstr "(écart type maximum)"
+
+# Saturation (in HSL)
+#: ../src/widgets/toolbox.cpp:4507
+msgid "SD"
+msgstr "Écart type"
+
+#: ../src/widgets/toolbox.cpp:4507
+msgid "SD:"
+msgstr "Écart type :"
+
+#: ../src/widgets/toolbox.cpp:4507
+msgid "The standard deviation of the spray action"
+msgstr "L'écart type de la pulvérisation"
+
+#: ../src/widgets/toolbox.cpp:4526
+msgid "Spray copies of the initial selection"
+msgstr "Pulvériser des copies de la sélection initiale"
+
+#: ../src/widgets/toolbox.cpp:4533
+msgid "Spray clones of the initial selection"
+msgstr "Pulvériser des clones de la sélection initiale"
+
+#: ../src/widgets/toolbox.cpp:4539
+msgid "Spray single path"
+msgstr "Pulvérisation par union des formes"
+
+#: ../src/widgets/toolbox.cpp:4540
+msgid "Spray objects in a single path"
+msgstr "Pulvérisation fusionnée en un chemin unique"
+
+#. Population
+#: ../src/widgets/toolbox.cpp:4564
+msgid "(low population)"
+msgstr "(faible population)"
+
+#: ../src/widgets/toolbox.cpp:4564
+msgid "(high population)"
+msgstr "(forte population)"
+
+#: ../src/widgets/toolbox.cpp:4567
+msgid "Population"
+msgstr "Population"
+
+#: ../src/widgets/toolbox.cpp:4567
+msgid "Population:"
+msgstr "Population :"
+
+#: ../src/widgets/toolbox.cpp:4568
+msgid "This setting adjusts the number of items sprayed"
+msgstr "Ce paramètre spécifie le nombre de d'éléments pulvérisés"
+
+#: ../src/widgets/toolbox.cpp:4583
+msgid "Use the pressure of the input device to alter the force of spray action"
+msgstr "Utiliser la pression du périphérique d'entrée pour modifier la force de pulvérisation"
+
+#: ../src/widgets/toolbox.cpp:4762
 msgid "No preset"
 msgstr "Aucune présélection"
 
-#: ../src/widgets/toolbox.cpp:4561
+#: ../src/widgets/toolbox.cpp:4780
 msgid "Save..."
 msgstr "Enregistrer sous..."
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4712
-#: ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4931
+#: ../src/widgets/toolbox.cpp:5950
 msgid "(hairline)"
 msgstr "(sans épaisseur)"
 
-#: ../src/widgets/toolbox.cpp:4712
-#: ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4931
+#: ../src/widgets/toolbox.cpp:5950
 msgid "(broad stroke)"
 msgstr " (trait large)"
 
-#: ../src/widgets/toolbox.cpp:4715
-#: ../src/widgets/toolbox.cpp:5734
+#: ../src/widgets/toolbox.cpp:4934
+#: ../src/widgets/toolbox.cpp:5953
 msgid "Pen Width"
 msgstr "Largeur du stylo"
 
-#: ../src/widgets/toolbox.cpp:4716
+#: ../src/widgets/toolbox.cpp:4935
 msgid "The width of the calligraphic pen (relative to the visible canvas area)"
 msgstr "Largeur de la plume (relativement à la zone de travail visible)"
 
 #. Thinning
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(speed blows up stroke)"
 msgstr "(la vitesse gonfle le trait)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(slight widening)"
 msgstr "(léger élargissement)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(constant width)"
 msgstr "(largeur constante)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(slight thinning, default)"
 msgstr "(léger amincissement, défaut)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(speed deflates stroke)"
 msgstr "(la vitesse affine le trait)"
 
-#: ../src/widgets/toolbox.cpp:4732
+#: ../src/widgets/toolbox.cpp:4951
 msgid "Stroke Thinning"
 msgstr "Affinnement du trait"
 
-#: ../src/widgets/toolbox.cpp:4732
+#: ../src/widgets/toolbox.cpp:4951
 msgid "Thinning:"
 msgstr "Mincissement :"
 
-#: ../src/widgets/toolbox.cpp:4733
+#: ../src/widgets/toolbox.cpp:4952
 msgid "How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 makes them broader, 0 makes width independent of velocity)"
 msgstr "Largeur du tracé en fonction de la vélocité. (>0 la vitesse du tracé diminue sa largeur, <0 l'augmente, 0 ne l'influence pas)"
 
 #. Angle
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(left edge up)"
 msgstr "(bord gauche vers le haut)"
 
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(horizontal)"
 msgstr "(horizontal)"
 
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(right edge up)"
 msgstr "(bord droit vers le haut)"
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4967
 msgid "Pen Angle"
 msgstr "Angle du stylo"
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4967
 msgid "Angle:"
 msgstr "Angle :"
 
-#: ../src/widgets/toolbox.cpp:4749
+#: ../src/widgets/toolbox.cpp:4968
 msgid "The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if fixation = 0)"
 msgstr "Angle de la plume (en degrés; 0 = horizontal; n'a pas d'effet si orientation = 0)"
 
 #. Fixation
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(perpendicular to stroke, \"brush\")"
 msgstr "(perpendiculaire au tracé, « pinceau »)"
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(almost fixed, default)"
 msgstr "(presque fixe, valeur par défaut)"
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(fixed by Angle, \"pen\")"
 msgstr "(fixé par un angle, « stylo »)"
 
-#: ../src/widgets/toolbox.cpp:4766
+#: ../src/widgets/toolbox.cpp:4985
 msgid "Fixation"
 msgstr "Fixité"
 
-#: ../src/widgets/toolbox.cpp:4766
+#: ../src/widgets/toolbox.cpp:4985
 msgid "Fixation:"
 msgstr "Fixité :"
 
-#: ../src/widgets/toolbox.cpp:4767
+#: ../src/widgets/toolbox.cpp:4986
 msgid "Angle behavior (0 = nib always perpendicular to stroke direction, 100 = fixed angle)"
 msgstr "Comportement de l'angle de la plume (0 = toujours perpendiculaire à la direction du tracé, 100 = invariant)"
 
 #. Cap Rounding
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(blunt caps, default)"
 msgstr "(terminaisons planes, défaut)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(slightly bulging)"
 msgstr "(légèrement bombées)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(approximately round)"
 msgstr "(approximativement arrondies)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(long protruding caps)"
 msgstr "(terminaisons très proéminentes)"
 
-#: ../src/widgets/toolbox.cpp:4783
+#: ../src/widgets/toolbox.cpp:5002
 msgid "Cap rounding"
 msgstr "Arrondi de la terminaison"
 
-#: ../src/widgets/toolbox.cpp:4783
+#: ../src/widgets/toolbox.cpp:5002
 msgid "Caps:"
 msgstr "Terminaisons :"
 
-#: ../src/widgets/toolbox.cpp:4784
+#: ../src/widgets/toolbox.cpp:5003
 msgid "Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = round caps)"
 msgstr "Augmenter ce paramètre pour que les extrémités du tracé soient plus proéminentes (0 = pas de terminaison, 1 = terminaison arrondie)"
 
 #. Tremor
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(smooth line)"
 msgstr "(ligne douce)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(slight tremor)"
 msgstr "(léger tremblement)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(noticeable tremor)"
 msgstr "(tremblement sensible)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(maximum tremor)"
 msgstr "(tremblement maximum)"
 
-#: ../src/widgets/toolbox.cpp:4799
+#: ../src/widgets/toolbox.cpp:5018
 msgid "Stroke Tremor"
 msgstr "Appliquer un tremblement au contour"
 
-#: ../src/widgets/toolbox.cpp:4799
+#: ../src/widgets/toolbox.cpp:5018
 msgid "Tremor:"
 msgstr "Tremblement :"
 
-#: ../src/widgets/toolbox.cpp:4800
+#: ../src/widgets/toolbox.cpp:5019
 msgid "Increase to make strokes rugged and trembling"
 msgstr "Augmenter ce paramètre pour rendre la plume tremblante et irrégulière"
 
 #. Wiggle
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(no wiggle)"
 msgstr "(pas d'agitation)"
 
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(slight deviation)"
 msgstr "(légères déviations)"
 
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(wild waves and curls)"
 msgstr "(grandes vagues et boucles)"
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:5036
 msgid "Pen Wiggle"
 msgstr "Agitation du stylo"
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:5036
 msgid "Wiggle:"
 msgstr "Agitation :"
 
-#: ../src/widgets/toolbox.cpp:4818
+#: ../src/widgets/toolbox.cpp:5037
 msgid "Increase to make the pen waver and wiggle"
 msgstr "Augmenter ce paramètre pour rendre la plume hésitante et agitée"
 
 #. Mass
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(no inertia)"
 msgstr "(aucune inertie)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(slight smoothing, default)"
 msgstr "(lissage léger, valeur par défaut)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(noticeable lagging)"
 msgstr "(retard sensible)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(maximum inertia)"
 msgstr "(inertie maximum)"
 
-#: ../src/widgets/toolbox.cpp:4834
+#: ../src/widgets/toolbox.cpp:5053
 msgid "Pen Mass"
 msgstr "Inertie du stylo"
 
-#: ../src/widgets/toolbox.cpp:4834
+#: ../src/widgets/toolbox.cpp:5053
 msgid "Mass:"
 msgstr "Inertie :"
 
-#: ../src/widgets/toolbox.cpp:4835
+#: ../src/widgets/toolbox.cpp:5054
 msgid "Increase to make the pen drag behind, as if slowed by inertia"
 msgstr "Augmenter ce paramètre pour que la plume traîne, ralentie par son inertie"
 
-#: ../src/widgets/toolbox.cpp:4850
+#: ../src/widgets/toolbox.cpp:5069
 msgid "Trace Background"
 msgstr "Tracer selon le fond"
 
-#: ../src/widgets/toolbox.cpp:4851
+#: ../src/widgets/toolbox.cpp:5070
 msgid "Trace the lightness of the background by the width of the pen (white - minimum width, black - maximum width)"
 msgstr "Imiter la luminosité du fond avec l'épaisseur du trait (blanc - trait fin, noir - trait épais)"
 
-#: ../src/widgets/toolbox.cpp:4864
+#: ../src/widgets/toolbox.cpp:5083
 msgid "Use the pressure of the input device to alter the width of the pen"
 msgstr "Utiliser la pression du périphérique d'entrée pour modifier la largeur de la plume"
 
-#: ../src/widgets/toolbox.cpp:4876
+#: ../src/widgets/toolbox.cpp:5095
 msgid "Tilt"
 msgstr "Inclinaison"
 
-#: ../src/widgets/toolbox.cpp:4877
+#: ../src/widgets/toolbox.cpp:5096
 msgid "Use the tilt of the input device to alter the angle of the pen's nib"
 msgstr "Utiliser l'inclinaison du périphérique d'entrée pour modifier l'angle de la plume"
 
-#: ../src/widgets/toolbox.cpp:4890
+#: ../src/widgets/toolbox.cpp:5109
 msgid "Choose a preset"
 msgstr "Aucune présélection"
 
-#: ../src/widgets/toolbox.cpp:4978
+#: ../src/widgets/toolbox.cpp:5197
 msgid "Arc: Change start/end"
 msgstr "Arc : déplacer début/fin"
 
-#: ../src/widgets/toolbox.cpp:5042
+#: ../src/widgets/toolbox.cpp:5261
 msgid "Arc: Change open/closed"
 msgstr "Arc : modifier ouvert/fermé"
 
-#: ../src/widgets/toolbox.cpp:5168
+#: ../src/widgets/toolbox.cpp:5387
 msgid "Start:"
 msgstr "Début :"
 
-#: ../src/widgets/toolbox.cpp:5169
+#: ../src/widgets/toolbox.cpp:5388
 msgid "The angle (in degrees) from the horizontal to the arc's start point"
 msgstr "Angle (en degrés) entre l'horizontale et le début de l'arc"
 
-#: ../src/widgets/toolbox.cpp:5181
+#: ../src/widgets/toolbox.cpp:5400
 msgid "End:"
 msgstr "Fin :"
 
-#: ../src/widgets/toolbox.cpp:5182
+#: ../src/widgets/toolbox.cpp:5401
 msgid "The angle (in degrees) from the horizontal to the arc's end point"
 msgstr "Angle (en degrés) entre l'horizontale et la fin de l'arc"
 
-#: ../src/widgets/toolbox.cpp:5198
+#: ../src/widgets/toolbox.cpp:5417
 msgid "Closed arc"
 msgstr "Arc fermé"
 
-#: ../src/widgets/toolbox.cpp:5199
+#: ../src/widgets/toolbox.cpp:5418
 msgid "Switch to segment (closed shape with two radii)"
 msgstr "Tracer un camembert (forme fermée entre deux rayons)"
 
-#: ../src/widgets/toolbox.cpp:5205
+#: ../src/widgets/toolbox.cpp:5424
 msgid "Open Arc"
 msgstr "Arc ouvert"
 
-#: ../src/widgets/toolbox.cpp:5206
+#: ../src/widgets/toolbox.cpp:5425
 msgid "Switch to arc (unclosed shape)"
 msgstr "Tracer un arc (courbe non fermée)"
 
-#: ../src/widgets/toolbox.cpp:5229
+#: ../src/widgets/toolbox.cpp:5448
 msgid "Make whole"
 msgstr "Refermer"
 
-#: ../src/widgets/toolbox.cpp:5230
+#: ../src/widgets/toolbox.cpp:5449
 msgid "Make the shape a whole ellipse, not arc or segment"
 msgstr "Transformer en ellipse pleine (pas un arc ou un camembert)"
 
-#: ../src/widgets/toolbox.cpp:5306
+#: ../src/widgets/toolbox.cpp:5525
 msgid "Pick opacity"
 msgstr "Capturer l'opacité"
 
-#: ../src/widgets/toolbox.cpp:5307
+#: ../src/widgets/toolbox.cpp:5526
 msgid "Pick both the color and the alpha (transparency) under cursor; otherwise, pick only the visible color premultiplied by alpha"
 msgstr "Capturer à la fois la couleur et l'alpha (opacité) sous le curseur; Sinon, ne capturer que la couleur visible prémultipliée par l'alpha"
 
-#: ../src/widgets/toolbox.cpp:5310
+#: ../src/widgets/toolbox.cpp:5529
 msgid "Pick"
 msgstr "Capturer"
 
-#: ../src/widgets/toolbox.cpp:5319
+#: ../src/widgets/toolbox.cpp:5538
 msgid "Assign opacity"
 msgstr "Appliquer l'opacité"
 
-#: ../src/widgets/toolbox.cpp:5320
+#: ../src/widgets/toolbox.cpp:5539
 msgid "If alpha was picked, assign it to selection as fill or stroke transparency"
 msgstr "Si l'alpha a été capturé, l'appliquer comme transparence de remplissage ou de contour à la sélection"
 
-#: ../src/widgets/toolbox.cpp:5323
+#: ../src/widgets/toolbox.cpp:5542
 msgid "Assign"
 msgstr "Appliquer"
 
-#: ../src/widgets/toolbox.cpp:5509
+#: ../src/widgets/toolbox.cpp:5728
 msgid "Closed"
 msgstr "Fermé"
 
-#: ../src/widgets/toolbox.cpp:5511
+#: ../src/widgets/toolbox.cpp:5730
 msgid "Open start"
 msgstr "Début ouvert"
 
-#: ../src/widgets/toolbox.cpp:5513
+#: ../src/widgets/toolbox.cpp:5732
 msgid "Open end"
 msgstr "Fin ouverte"
 
-#: ../src/widgets/toolbox.cpp:5515
+#: ../src/widgets/toolbox.cpp:5734
 msgid "Open both"
 msgstr "Les deux ouverts"
 
-#: ../src/widgets/toolbox.cpp:5574
+#: ../src/widgets/toolbox.cpp:5793
 msgid "All inactive"
 msgstr "Tout inactif"
 
-#: ../src/widgets/toolbox.cpp:5575
+#: ../src/widgets/toolbox.cpp:5794
 msgid "No geometric tool is active"
 msgstr "Aucun outil géométrique n'est actif"
 
-#: ../src/widgets/toolbox.cpp:5608
+#: ../src/widgets/toolbox.cpp:5827
 msgid "Show limiting bounding box"
 msgstr "Montrer la boîte englobante limite"
 
-#: ../src/widgets/toolbox.cpp:5609
+#: ../src/widgets/toolbox.cpp:5828
 msgid "Show bounding box (used to cut infinite lines)"
 msgstr "Affiche la boîte englobante (utilisé pour couper les lignes infinies)"
 
-#: ../src/widgets/toolbox.cpp:5620
+#: ../src/widgets/toolbox.cpp:5839
 msgid "Get limiting bounding box from selection"
 msgstr "Obtenir la boîte englobante limite à partir de la sélection"
 
-#: ../src/widgets/toolbox.cpp:5621
+#: ../src/widgets/toolbox.cpp:5840
 msgid "Set limiting bounding box (used to cut infinite lines) to the bounding box of current selection"
 msgstr "Définir la boîte englobante limite (utilisée pour couper les lignes infinies) à la boîte englobante de la sélection"
 
-#: ../src/widgets/toolbox.cpp:5633
+#: ../src/widgets/toolbox.cpp:5852
 msgid "Choose a line segment type"
 msgstr "Sélectionner un type de segment"
 
-#: ../src/widgets/toolbox.cpp:5649
+#: ../src/widgets/toolbox.cpp:5868
 msgid "Display measuring info"
 msgstr "Afficher les informations de mesure"
 
-#: ../src/widgets/toolbox.cpp:5650
+#: ../src/widgets/toolbox.cpp:5869
 msgid "Display measuring info for selected items"
 msgstr "Affiche les informations de mesure pour la sélection"
 
-#: ../src/widgets/toolbox.cpp:5670
+#: ../src/widgets/toolbox.cpp:5889
 msgid "Open LPE dialog"
 msgstr "Ouvrir la boîte de dialogue des effets de chemin"
 
-#: ../src/widgets/toolbox.cpp:5671
+#: ../src/widgets/toolbox.cpp:5890
 msgid "Open LPE dialog (to adapt parameters numerically)"
 msgstr "Ouvrir la boîte de dialogue des effets de chemin (pour adapter les paramètres numériquement)"
 
-#: ../src/widgets/toolbox.cpp:5735
+#: ../src/widgets/toolbox.cpp:5954
 msgid "The width of the eraser pen (relative to the visible canvas area)"
 msgstr "Largeur de la gomme (relativement à la zone de travail visible)"
 
-#: ../src/widgets/toolbox.cpp:5753
+#: ../src/widgets/toolbox.cpp:5972
 msgid "Delete objects touched by the eraser"
 msgstr "Effacer les objets en contact avec la gomme"
 
-#: ../src/widgets/toolbox.cpp:5759
+#: ../src/widgets/toolbox.cpp:5978
 msgid "Cut"
 msgstr "Couper"
 
-#: ../src/widgets/toolbox.cpp:5760
+#: ../src/widgets/toolbox.cpp:5979
 msgid "Cut out from objects"
 msgstr "Effacer une partie d'objet"
 
-#: ../src/widgets/toolbox.cpp:6104
+#: ../src/widgets/toolbox.cpp:6323
 msgid "Text: Change font family"
 msgstr "Texte : modifier la police"
 
-#: ../src/widgets/toolbox.cpp:6174
+#: ../src/widgets/toolbox.cpp:6393
 msgid "Text: Change alignment"
 msgstr "Texte : modifier l'alignement"
 
-#: ../src/widgets/toolbox.cpp:6278
+#: ../src/widgets/toolbox.cpp:6497
 msgid "Text: Change font style"
 msgstr "Texte : modifier le style de la police"
 
-#: ../src/widgets/toolbox.cpp:6325
+#: ../src/widgets/toolbox.cpp:6544
 msgid "Text: Change orientation"
 msgstr "Texte : modifier l'orientation"
 
-#: ../src/widgets/toolbox.cpp:6439
+#: ../src/widgets/toolbox.cpp:6658
 msgid "Text: Change font size"
 msgstr "Texte : modifier la taille de police"
 
-#: ../src/widgets/toolbox.cpp:6650
+#: ../src/widgets/toolbox.cpp:6877
 msgid "Select font family (Alt+X to access)"
 msgstr "Sélectionner une famille de police (Alt+X)"
 
-#: ../src/widgets/toolbox.cpp:6687
+#: ../src/widgets/toolbox.cpp:6914
 msgid "This font is currently not installed on your system. Inkscape will use the default font instead."
 msgstr "Cette police n'est pas installée sur votre système. Inkscape utilisera la police par défaut à la place"
 
-#: ../src/widgets/toolbox.cpp:6723
+#: ../src/widgets/toolbox.cpp:6950
 msgid "Align left"
 msgstr "Aligné à gauche"
 
-#: ../src/widgets/toolbox.cpp:6745
+#: ../src/widgets/toolbox.cpp:6972
 msgid "Align right"
 msgstr "Aligné à droite"
 
-#: ../src/widgets/toolbox.cpp:6756
+#: ../src/widgets/toolbox.cpp:6983
 msgid "Justify"
 msgstr "Justifiié"
 
-#: ../src/widgets/toolbox.cpp:6771
+#: ../src/widgets/toolbox.cpp:6998
 msgid "Bold"
 msgstr "Gras"
 
-#: ../src/widgets/toolbox.cpp:6782
+#: ../src/widgets/toolbox.cpp:7009
 msgid "Italic"
 msgstr "Italique"
 
-#: ../src/widgets/toolbox.cpp:6913
+#: ../src/widgets/toolbox.cpp:7148
+msgid "Set connector type: orthogonal"
+msgstr "Type de connecteur : orthogonal"
+
+#: ../src/widgets/toolbox.cpp:7148
+msgid "Set connector type: polyline"
+msgstr "Type de connecteur : polyligne"
+
+#: ../src/widgets/toolbox.cpp:7198
+msgid "Change connector curvature"
+msgstr "Modifier la courbure du connecteur"
+
+#: ../src/widgets/toolbox.cpp:7247
 msgid "Change connector spacing"
 msgstr "Modifier la marge des connecteurs"
 
-#: ../src/widgets/toolbox.cpp:6996
+#: ../src/widgets/toolbox.cpp:7361
+msgid "EditMode"
+msgstr "Moded'édition"
+
+#: ../src/widgets/toolbox.cpp:7362
+msgid "Switch between connection point editing and connector drawing mode"
+msgstr "Permuter entre le mode Édition de point de connexion et le mode Tracé de connecteur"
+
+#: ../src/widgets/toolbox.cpp:7376
 msgid "Avoid"
 msgstr "Éviter"
 
-#: ../src/widgets/toolbox.cpp:7006
+#: ../src/widgets/toolbox.cpp:7386
 msgid "Ignore"
 msgstr "Ignorer"
 
-#: ../src/widgets/toolbox.cpp:7018
+#: ../src/widgets/toolbox.cpp:7397
+msgid "Orthogonal"
+msgstr "Othogonal"
+
+#: ../src/widgets/toolbox.cpp:7398
+msgid "Make connector orthogonal or polyline"
+msgstr "Rend les connecteurs orthogonaux ou polylignes"
+
+#: ../src/widgets/toolbox.cpp:7412
+msgid "Connector Curvature"
+msgstr "Courbure du connecteur"
+
+#: ../src/widgets/toolbox.cpp:7412
+msgid "Curvature:"
+msgstr "Courbure :"
+
+#: ../src/widgets/toolbox.cpp:7413
+msgid "The amount of connectors curvature"
+msgstr "Quantité de courbure des connecteurs"
+
+#: ../src/widgets/toolbox.cpp:7423
 msgid "Connector Spacing"
 msgstr "Espacement des connecteurs"
 
-#: ../src/widgets/toolbox.cpp:7018
+#: ../src/widgets/toolbox.cpp:7423
 msgid "Spacing:"
 msgstr "Espacement :"
 
-#: ../src/widgets/toolbox.cpp:7019
+#: ../src/widgets/toolbox.cpp:7424
 msgid "The amount of space left around objects by auto-routing connectors"
 msgstr "Espace laissé autour des objets par les connecteurs routés automatiquement"
 
-#: ../src/widgets/toolbox.cpp:7030
+#: ../src/widgets/toolbox.cpp:7435
 msgid "Graph"
 msgstr "Graphe"
 
-#: ../src/widgets/toolbox.cpp:7040
+#: ../src/widgets/toolbox.cpp:7445
 msgid "Connector Length"
 msgstr "Longueur des connecteurs"
 
-#: ../src/widgets/toolbox.cpp:7040
+#: ../src/widgets/toolbox.cpp:7445
 msgid "Length:"
 msgstr "Longueur :"
 
-#: ../src/widgets/toolbox.cpp:7041
+#: ../src/widgets/toolbox.cpp:7446
 msgid "Ideal length for connectors when layout is applied"
 msgstr "Longueur idéale pour les connecteurs après routage"
 
-#: ../src/widgets/toolbox.cpp:7053
+#: ../src/widgets/toolbox.cpp:7458
 msgid "Downwards"
 msgstr "Vers le bas"
 
-#: ../src/widgets/toolbox.cpp:7054
+#: ../src/widgets/toolbox.cpp:7459
 msgid "Make connectors with end-markers (arrows) point downwards"
 msgstr "Faire que les connecteurs avec des marqueurs de fin (des flèches) pointent vers le bas"
 
-#: ../src/widgets/toolbox.cpp:7069
+#: ../src/widgets/toolbox.cpp:7476
 msgid "Do not allow overlapping shapes"
 msgstr "Ne pas permettre que deux formes se chevauchent"
 
-#: ../src/widgets/toolbox.cpp:7172
+#: ../src/widgets/toolbox.cpp:7491
+msgid "New connection point"
+msgstr "Nouveau point de connection"
+
+#: ../src/widgets/toolbox.cpp:7492
+msgid "Add a new connection point to the currently selected item"
+msgstr "Ajoute un nouveau point de connexion à l'élément sélectionné"
+
+#: ../src/widgets/toolbox.cpp:7503
+msgid "Remove connection point"
+msgstr "Supprimer le point de connection"
+
+#: ../src/widgets/toolbox.cpp:7504
+msgid "Remove the currently selected connection point"
+msgstr "Supprime le point de connexion sélectionné"
+
+#: ../src/widgets/toolbox.cpp:7604
 msgid "Fill by"
 msgstr "Type de remplissage"
 
-#: ../src/widgets/toolbox.cpp:7173
+#: ../src/widgets/toolbox.cpp:7605
 msgid "Fill by:"
 msgstr "Type de remplissage :"
 
-#: ../src/widgets/toolbox.cpp:7185
+#: ../src/widgets/toolbox.cpp:7617
 msgid "Fill Threshold"
 msgstr "Seuil de remplissage :"
 
-#: ../src/widgets/toolbox.cpp:7186
+#: ../src/widgets/toolbox.cpp:7618
 msgid "The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"
 msgstr "La différence maximale entre le pixel du clic et les pixels voisins pour qu'ils soient ajoutés dans le remplissage"
 
-#: ../src/widgets/toolbox.cpp:7211
+#: ../src/widgets/toolbox.cpp:7643
 msgid "Grow/shrink by"
 msgstr "Agrandir/rétrécir de"
 
-#: ../src/widgets/toolbox.cpp:7211
+#: ../src/widgets/toolbox.cpp:7643
 msgid "Grow/shrink by:"
 msgstr "Agrandir/rétrécir de :"
 
-#: ../src/widgets/toolbox.cpp:7212
+#: ../src/widgets/toolbox.cpp:7644
 msgid "The amount to grow (positive) or shrink (negative) the created fill path"
 msgstr "Agrandit (si positif) ou rétrécit (si négatif) de cette quantité le chemin créé par remplissage."
 
-#: ../src/widgets/toolbox.cpp:7237
+#: ../src/widgets/toolbox.cpp:7669
 msgid "Close gaps"
 msgstr "Combler les vides"
 
-#: ../src/widgets/toolbox.cpp:7238
+#: ../src/widgets/toolbox.cpp:7670
 msgid "Close gaps:"
 msgstr "Combler les vides :"
 
-#: ../src/widgets/toolbox.cpp:7250
+#: ../src/widgets/toolbox.cpp:7682
 msgid "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Restaurer les préférences par défaut de l'outil de remplissage au seau (changez les valeurs par défaut dans Inkscape Préférences > Outils)"
 
@@ -19557,11 +19914,11 @@ msgstr "Le module d'exportation _gpl.py nécessite PyXML. Veuillez en téléchar
 msgid "Unable to find image data."
 msgstr "Les données de l'image sont introuvables."
 
-#: ../share/extensions/inkex.py:66
+#: ../share/extensions/inkex.py:67
 msgid "The fantastic lxml wrapper for libxml2 is required by inkex.py and therefore this extension. Please download and install the latest version from http://cheeseshop.python.org/pypi/lxml/, or install it through your package manager by a command like: sudo apt-get install python-lxml"
 msgstr "La fantastique classe lxml pour libxml2 est nécessaire à inkex.py et par conséquent à cette extension. Veuillez en télécharger et installer la dernière version à partir du site http://cheeseshop.python.org/pypi/lxml/, ou l'installer directement avec votre gestionnaire de paquet avec une commande du type : sudo apt-get install python-lxml"
 
-#: ../share/extensions/inkex.py:222
+#: ../share/extensions/inkex.py:223
 #, python-format
 msgid "No matching node for expression: %s"
 msgstr "Aucun nœud ne correspond à l'expression : %s"
@@ -20279,10 +20636,6 @@ msgstr "Note : l'extension du fichier est ajoutée automatiquement"
 msgid "Path to save image"
 msgstr "Répertoire où enregistrer l'image"
 
-#: ../share/extensions/extrude.inx.h:1
-msgid "Extrude"
-msgstr "Extrusion"
-
 #: ../share/extensions/extrude.inx.h:3
 msgid "Lines"
 msgstr "Ligne"
@@ -21338,18 +21691,6 @@ msgstr "Position de la lumière sur l'axe Z"
 msgid "Load from file"
 msgstr "Charger depuis un fichier"
 
-#: ../share/extensions/polyhedron_3d.inx.h:24
-msgid "Maximum"
-msgstr "Maximum"
-
-#: ../share/extensions/polyhedron_3d.inx.h:25
-msgid "Mean"
-msgstr "Moyenne"
-
-#: ../share/extensions/polyhedron_3d.inx.h:26
-msgid "Minimum"
-msgstr "Minimum"
-
 #: ../share/extensions/polyhedron_3d.inx.h:27
 msgid "Model file"
 msgstr "Fichier modèle"
@@ -21662,17 +22003,85 @@ msgid "Strength (%):"
 msgstr "Force (%) :"
 
 #: ../share/extensions/scour.inx.h:1
+msgid "Embed rasters"
+msgstr "Incorporer les images"
+
+#: ../share/extensions/scour.inx.h:2
+msgid "Enable id stripping"
+msgstr "Supprimer les identifiants"
+
+#: ../share/extensions/scour.inx.h:3
+msgid "Group collapsing"
+msgstr "Réduire les groupes"
+
+#: ../share/extensions/scour.inx.h:5
+msgid "Indent"
+msgstr "Indentation"
+
+#: ../share/extensions/scour.inx.h:6
+msgid "Keep editor data"
+msgstr "Conserve les données d'édition"
+
+#: ../share/extensions/scour.inx.h:8
 msgid "Optimized SVG (*.svg)"
 msgstr "SVG optimisé (*.svg)"
 
-#: ../share/extensions/scour.inx.h:2
+#: ../share/extensions/scour.inx.h:9
 msgid "Optimized SVG Output"
 msgstr "Sortie SVG optimisé"
 
-#: ../share/extensions/scour.inx.h:3
+#: ../share/extensions/scour.inx.h:11
 msgid "Scalable Vector Graphics"
 msgstr "Scalable Vector Graphics"
 
+#: ../share/extensions/scour.inx.h:12
+msgid "Set precision"
+msgstr "Précision"
+
+#: ../share/extensions/scour.inx.h:13
+msgid "Simplify colors"
+msgstr "Simplifier les couleurs"
+
+#: ../share/extensions/scour.inx.h:14
+msgid "Space"
+msgstr "Espace"
+
+#: ../share/extensions/scour.inx.h:15
+msgid "Strip xml prolog"
+msgstr "Enlève le prologue xml"
+
+#: ../share/extensions/scour.inx.h:16
+msgid "Style to xml"
+msgstr "Style en XML"
+
+#: ../share/extensions/scour.inx.h:17
+msgid "Tab"
+msgstr "Tabulation"
+
+#: ../share/extensions/scour.inx.h:18
+msgid ""
+"This extension optimize the SVG file according to the following options:\n"
+"    * Simplify colors: convert all colors to #RRGGBB format.\n"
+"    * Style to xml: convert styles into XML attributes.\n"
+"    * Group collapsing: collapse &lt;g&gt; elements.\n"
+"    * Enable id stripping: remove all un-referenced ID attributes.\n"
+"    * Embed rasters: embed rasters as base64-encoded data.\n"
+"    * Keep editor data: don't remove Inkscape, Sodipodi or Adobe Illustrator elements and attributes.\n"
+"    * Strip xml prolog: don't output the xml prolog.\n"
+"    * Set precision: set number of significant digits (default: 5).\n"
+"    * Indent: indentation of the output: none, space, tab (default: space)."
+msgstr ""
+"Cette extension optimise le fichier SVG en fonction des options suivantes :\n"
+"    * Simplifier les couleurs : convertit toutes les couleurs au format #RRVVBB.\n"
+"    * Style en XML : convertit les styles en attributs XML.\n"
+"    * Réduire les groupes : réduit les éléments &lt;g&gt;.\n"
+"    * Supprimer les identifiants : supprime tous les attributs ID non référencés.\n"
+"    * Incorporer les images matricielles : incorpore les images matricielles sous la forme de données encodées en base 64.\n"
+"    * Conserver les données d'édition : ne supprime pas les éléments et attributs issus d'Inkcape, Sodipodi ou Adobe Illustrator.\n"
+"    * Supprimer le prologue xml : n'exporte pas le prologue xml.\n"
+"    * Précision : définit le nombre de chiffres significatifs (5 par défaut).\n"
+"    * Indentation : type d'indentation de l'exportation : aucune, espace ou tabulation (espace par défaut)."
+
 #: ../share/extensions/sk1_input.inx.h:1
 msgid "Open files saved in sK1 vector graphics editor"
 msgstr "Ouvrir des fichiers enregistrés avec l'éditeur de graphismes vectoriels sK1"
@@ -22187,6 +22596,42 @@ msgstr "Entrée métafichier Windows (*.wmf)"
 msgid "XAML Input"
 msgstr "Entrée XAML"
 
+#~ msgid "Uniform"
+#~ msgstr "Uniforme"
+#~ msgid "Gaussian   "
+#~ msgstr "Gaussienne"
+#~ msgid "Uniforme"
+#~ msgstr "Uniforme"
+#~ msgid "Gaussienne"
+#~ msgstr "Gaussienne"
+#~ msgid "Scale : "
+#~ msgstr "Échelle :"
+#~ msgid "Applique un facteur d'échelle"
+#~ msgstr "Applique un facteur d'échelle"
+#~ msgid "Rotation : "
+#~ msgstr "Rotation :"
+#~ msgid "Fait tourner"
+#~ msgstr "Fait tourner"
+#~ msgid "Ratio : "
+#~ msgstr "Rapport :"
+#~ msgid "Angle : "
+#~ msgstr "Angle :"
+#~ msgid "Width : "
+#~ msgstr "Épaisseur :"
+#~ msgid "Taille de l'ellipse"
+#~ msgstr "Taille de l'ellipse"
+#~ msgid "(pinch spray)"
+#~ msgstr "(pulvérisation serrée)"
+#~ msgid "<b>Connection point</b>: click or drag to create a new connector"
+#~ msgstr ""
+#~ "<b>Point de connnection</b> : cliquer ou déplacer pour créer un nouveau "
+#~ "connecteur"
+#~ msgid "Center objects horizontally"
+#~ msgstr "Centrer selon un axe vertical"
+#~ msgid "_Instant Messaging..."
+#~ msgstr "Messagerie _Instantanée"
+#~ msgid "Jabber Instant Messaging Client"
+#~ msgstr "Client de messagerie instantanée Jabber"
 #~ msgid ""
 #~ "The \"Save As ...\" dialog uses the current working directory for saving "
 #~ "(if the file was previously saved). If not previously saved, the most "
@@ -22907,8 +23352,6 @@ msgstr "Entrée XAML"
 #~ msgstr "A_jouter"
 #~ msgid "Freehand Shape"
 #~ msgstr "Forme à main levée"
-#~ msgid "Center on vertical axis"
-#~ msgstr "Centrer selon un axe vertical"
 #~ msgid "ca@valencia Valencian Catalan"
 #~ msgstr "ca@valencia Catalan ; valencien"
 #~ msgid "cs Czech"
@@ -23500,8 +23943,6 @@ msgstr "Entrée XAML"
 #~ "(nécessite un redémarrage)"
 #~ msgid "_Apply"
 #~ msgstr "_Appliquer"
-#~ msgid "Apply chosen effect to selection"
-#~ msgstr "Appliquer l'effet choisi à la sélection"
 #~ msgid "Tall"
 #~ msgstr "Haut"
 #~ msgid "Square"
@@ -23600,10 +24041,6 @@ msgstr "Entrée XAML"
 #~ msgid "Source:"
 #~ msgstr "Source"
 
-#, fuzzy
-#~ msgid "Relation:"
-#~ msgstr "Relation"
-
 #, fuzzy
 #~ msgid "Subject:"
 #~ msgstr "Objet"
index d48c15b38e442495f103574bfaf862ffa20351ce..ced8b271331b554adf32faf292c043deb1848a09 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-11-30 21:00+0100\n"
+"POT-Creation-Date: 2009-12-03 13:24+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -339,7 +339,7 @@ msgstr ""
 
 #. Pencil
 #: ../share/filters/filters.svg.h:29
-#: ../src/ui/dialog/inkscape-preferences.cpp:486 ../src/verbs.cpp:2516
+#: ../src/ui/dialog/inkscape-preferences.cpp:492 ../src/verbs.cpp:2528
 msgid "Pencil"
 msgstr ""
 
@@ -2209,44 +2209,43 @@ msgstr ""
 msgid "<b>3D Box</b>"
 msgstr ""
 
-#: ../src/connector-context.cpp:526
+#: ../src/connector-context.cpp:766
 msgid "Creating new connector"
 msgstr ""
 
-#: ../src/connector-context.cpp:775
+#: ../src/connector-context.cpp:1157
 msgid "Connector endpoint drag cancelled."
 msgstr ""
 
-#: ../src/connector-context.cpp:824
+#: ../src/connector-context.cpp:1188
+msgid "Connection point drag cancelled."
+msgstr ""
+
+#: ../src/connector-context.cpp:1306
 msgid "Reroute connector"
 msgstr ""
 
-#. Flush pending updates
-#: ../src/connector-context.cpp:988
+#: ../src/connector-context.cpp:1473
 msgid "Create connector"
 msgstr ""
 
-#: ../src/connector-context.cpp:1012
+#: ../src/connector-context.cpp:1496
 msgid "Finishing connector"
 msgstr ""
 
-#: ../src/connector-context.cpp:1154
-msgid "<b>Connection point</b>: click or drag to create a new connector"
-msgstr ""
-
-#: ../src/connector-context.cpp:1227
+#: ../src/connector-context.cpp:1784
 msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
 msgstr ""
 
-#: ../src/connector-context.cpp:1339
+#: ../src/connector-context.cpp:1925
 msgid "Select <b>at least one non-connector object</b>."
 msgstr ""
 
-#: ../src/connector-context.cpp:1344 ../src/widgets/toolbox.cpp:6997
+#: ../src/connector-context.cpp:1930 ../src/widgets/toolbox.cpp:7377
 msgid "Make connectors avoid selected objects"
 msgstr ""
 
-#: ../src/connector-context.cpp:1345 ../src/widgets/toolbox.cpp:7007
+#: ../src/connector-context.cpp:1931 ../src/widgets/toolbox.cpp:7387
 msgid "Make connectors ignore selected objects"
 msgstr ""
 
@@ -2791,7 +2790,7 @@ msgstr ""
 #: ../src/dialogs/clonetiler.cpp:2615 ../src/dialogs/clonetiler.cpp:2764
 #: ../src/extension/internal/bitmap/opacity.cpp:37
 #: ../src/extension/internal/bitmap/opacity.cpp:39
-#: ../src/widgets/toolbox.cpp:4326 ../share/extensions/interp_att_g.inx.h:12
+#: ../src/widgets/toolbox.cpp:4353 ../share/extensions/interp_att_g.inx.h:12
 msgid "Opacity"
 msgstr ""
 
@@ -2995,15 +2994,15 @@ msgid ""
 "to zero"
 msgstr ""
 
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2623
+#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2637
 msgid "_Page"
 msgstr ""
 
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2627
+#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2641
 msgid "_Drawing"
 msgstr ""
 
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2629
+#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2643
 msgid "_Selection"
 msgstr ""
 
@@ -3063,8 +3062,8 @@ msgstr ""
 msgid "_Height:"
 msgstr ""
 
-#: ../src/dialogs/export.cpp:509 ../src/ui/dialog/inkscape-preferences.cpp:768
-#: ../src/ui/dialog/inkscape-preferences.cpp:1180
+#: ../src/dialogs/export.cpp:509 ../src/ui/dialog/inkscape-preferences.cpp:779
+#: ../src/ui/dialog/inkscape-preferences.cpp:1191
 msgid "dpi"
 msgstr ""
 
@@ -3225,7 +3224,7 @@ msgid "Search paths, lines, polylines"
 msgstr ""
 
 #: ../src/dialogs/find.cpp:593 ../src/ui/dialog/find.cpp:75
-#: ../src/widgets/toolbox.cpp:2091
+#: ../src/widgets/toolbox.cpp:2118
 msgid "Paths"
 msgstr ""
 
@@ -3372,8 +3371,8 @@ msgid ""
 msgstr ""
 
 #. Button for setting the object's id, label, title and description.
-#: ../src/dialogs/item-properties.cpp:143 ../src/verbs.cpp:2486
-#: ../src/verbs.cpp:2492
+#: ../src/dialogs/item-properties.cpp:143 ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2502
 msgid "_Set"
 msgstr ""
 
@@ -3516,21 +3515,22 @@ msgstr ""
 
 #: ../src/dialogs/object-attributes.cpp:51
 #: ../src/dialogs/object-attributes.cpp:59 ../src/ui/dialog/guides.cpp:43
-#: ../src/ui/view/edit-widget.cpp:1074 ../src/widgets/desktop-widget.cpp:504
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/ui/view/edit-widget.cpp:1080 ../src/widgets/desktop-widget.cpp:504
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X:"
 msgstr ""
 
 #: ../src/dialogs/object-attributes.cpp:52
 #: ../src/dialogs/object-attributes.cpp:60 ../src/ui/dialog/guides.cpp:44
-#: ../src/ui/view/edit-widget.cpp:1075 ../src/widgets/desktop-widget.cpp:507
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/ui/view/edit-widget.cpp:1081 ../src/widgets/desktop-widget.cpp:507
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y:"
 msgstr ""
 
 #: ../src/dialogs/object-attributes.cpp:53
-#: ../src/dialogs/object-attributes.cpp:61 ../src/widgets/toolbox.cpp:4124
-#: ../src/widgets/toolbox.cpp:4715 ../src/widgets/toolbox.cpp:5734
+#: ../src/dialogs/object-attributes.cpp:61 ../src/widgets/toolbox.cpp:4151
+#: ../src/widgets/toolbox.cpp:4475 ../src/widgets/toolbox.cpp:4934
+#: ../src/widgets/toolbox.cpp:5953
 msgid "Width:"
 msgstr ""
 
@@ -3644,11 +3644,11 @@ msgstr ""
 msgid "Justify lines"
 msgstr ""
 
-#: ../src/dialogs/text-edit.cpp:300 ../src/widgets/toolbox.cpp:6804
+#: ../src/dialogs/text-edit.cpp:300 ../src/widgets/toolbox.cpp:7031
 msgid "Horizontal text"
 msgstr ""
 
-#: ../src/dialogs/text-edit.cpp:314 ../src/widgets/toolbox.cpp:6816
+#: ../src/dialogs/text-edit.cpp:314 ../src/widgets/toolbox.cpp:7043
 msgid "Vertical text"
 msgstr ""
 
@@ -3658,7 +3658,7 @@ msgstr ""
 
 #. Text
 #: ../src/dialogs/text-edit.cpp:375 ../src/selection-describer.cpp:69
-#: ../src/ui/dialog/inkscape-preferences.cpp:522 ../src/verbs.cpp:2522
+#: ../src/ui/dialog/inkscape-preferences.cpp:528 ../src/verbs.cpp:2534
 #: ../share/extensions/lorem_ipsum.inx.h:5
 #: ../share/extensions/render_alphabetsoup.inx.h:5
 #: ../share/extensions/text_braille.inx.h:2
@@ -3798,8 +3798,8 @@ msgid "_Origin X:"
 msgstr ""
 
 #: ../src/display/canvas-axonomgrid.cpp:398 ../src/display/canvas-grid.cpp:672
-#: ../src/ui/dialog/inkscape-preferences.cpp:978
-#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:989
+#: ../src/ui/dialog/inkscape-preferences.cpp:1010
 msgid "X coordinate of grid origin"
 msgstr ""
 
@@ -3808,8 +3808,8 @@ msgid "O_rigin Y:"
 msgstr ""
 
 #: ../src/display/canvas-axonomgrid.cpp:400 ../src/display/canvas-grid.cpp:674
-#: ../src/ui/dialog/inkscape-preferences.cpp:979
-#: ../src/ui/dialog/inkscape-preferences.cpp:1000
+#: ../src/ui/dialog/inkscape-preferences.cpp:990
+#: ../src/ui/dialog/inkscape-preferences.cpp:1011
 msgid "Y coordinate of grid origin"
 msgstr ""
 
@@ -3818,29 +3818,29 @@ msgid "Spacing _Y:"
 msgstr ""
 
 #: ../src/display/canvas-axonomgrid.cpp:402
-#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:1013
 msgid "Base length of z-axis"
 msgstr ""
 
 #: ../src/display/canvas-axonomgrid.cpp:404
-#: ../src/ui/dialog/inkscape-preferences.cpp:1005
-#: ../src/widgets/toolbox.cpp:3422
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
+#: ../src/widgets/toolbox.cpp:3449
 msgid "Angle X:"
 msgstr ""
 
 #: ../src/display/canvas-axonomgrid.cpp:404
-#: ../src/ui/dialog/inkscape-preferences.cpp:1005
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
 msgid "Angle of x-axis"
 msgstr ""
 
 #: ../src/display/canvas-axonomgrid.cpp:406
-#: ../src/ui/dialog/inkscape-preferences.cpp:1006
-#: ../src/widgets/toolbox.cpp:3501
+#: ../src/ui/dialog/inkscape-preferences.cpp:1017
+#: ../src/widgets/toolbox.cpp:3528
 msgid "Angle Z:"
 msgstr ""
 
 #: ../src/display/canvas-axonomgrid.cpp:406
-#: ../src/ui/dialog/inkscape-preferences.cpp:1006
+#: ../src/ui/dialog/inkscape-preferences.cpp:1017
 msgid "Angle of z-axis"
 msgstr ""
 
@@ -3923,12 +3923,12 @@ msgid "Spacing _X:"
 msgstr ""
 
 #: ../src/display/canvas-grid.cpp:676
-#: ../src/ui/dialog/inkscape-preferences.cpp:982
+#: ../src/ui/dialog/inkscape-preferences.cpp:993
 msgid "Distance between vertical grid lines"
 msgstr ""
 
 #: ../src/display/canvas-grid.cpp:678
-#: ../src/ui/dialog/inkscape-preferences.cpp:983
+#: ../src/ui/dialog/inkscape-preferences.cpp:994
 msgid "Distance between horizontal grid lines"
 msgstr ""
 
@@ -4106,7 +4106,7 @@ msgstr ""
 msgid "Quadrant point"
 msgstr ""
 
-#: ../src/display/snap-indicator.cpp:196 ../src/widgets/toolbox.cpp:6734
+#: ../src/display/snap-indicator.cpp:196 ../src/widgets/toolbox.cpp:6961
 msgid "Center"
 msgstr ""
 
@@ -4122,17 +4122,17 @@ msgstr ""
 msgid " to "
 msgstr ""
 
-#: ../src/document.cpp:445
+#: ../src/document.cpp:457
 #, c-format
 msgid "New document %d"
 msgstr ""
 
-#: ../src/document.cpp:477
+#: ../src/document.cpp:489
 #, c-format
 msgid "Memory document %d"
 msgstr ""
 
-#: ../src/document.cpp:632
+#: ../src/document.cpp:644
 #, c-format
 msgid "Unnamed document %d"
 msgstr ""
@@ -4182,7 +4182,7 @@ msgstr ""
 msgid "<b>Release mouse</b> to set color."
 msgstr ""
 
-#: ../src/dropper-context.cpp:306 ../src/tools-switch.cpp:208
+#: ../src/dropper-context.cpp:306 ../src/tools-switch.cpp:216
 msgid ""
 "<b>Click</b> to set fill, <b>Shift+click</b> to set stroke; <b>drag</b> to "
 "average color in area; with <b>Alt</b> to pick inverse color; <b>Ctrl+C</b> "
@@ -4235,11 +4235,11 @@ msgid "[Unchanged]"
 msgstr ""
 
 #. Edit
-#: ../src/event-log.cpp:264 ../src/event-log.cpp:267 ../src/verbs.cpp:2276
+#: ../src/event-log.cpp:264 ../src/event-log.cpp:267 ../src/verbs.cpp:2286
 msgid "_Undo"
 msgstr ""
 
-#: ../src/event-log.cpp:274 ../src/event-log.cpp:278 ../src/verbs.cpp:2278
+#: ../src/event-log.cpp:274 ../src/event-log.cpp:278 ../src/verbs.cpp:2288
 msgid "_Redo"
 msgstr ""
 
@@ -4390,8 +4390,8 @@ msgstr ""
 #: ../src/libgdl/gdl-dock-placeholder.c:169
 #: ../src/live_effects/lpe-bendpath.cpp:56
 #: ../src/live_effects/lpe-patternalongpath.cpp:64
-#: ../src/widgets/toolbox.cpp:3095 ../src/widgets/toolbox.cpp:4124
-#: ../share/extensions/foldablebox.inx.h:9
+#: ../src/widgets/toolbox.cpp:3122 ../src/widgets/toolbox.cpp:4151
+#: ../src/widgets/toolbox.cpp:4475 ../share/extensions/foldablebox.inx.h:9
 #: ../share/extensions/interp_att_g.inx.h:26
 msgid "Width"
 msgstr ""
@@ -4399,7 +4399,7 @@ msgstr ""
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:41
 #: ../src/extension/internal/bitmap/raise.cpp:42
 #: ../src/extension/internal/bitmap/sample.cpp:41 ../src/libgdl/gdl-dock.c:198
-#: ../src/libgdl/gdl-dock-placeholder.c:177 ../src/widgets/toolbox.cpp:3112
+#: ../src/libgdl/gdl-dock-placeholder.c:177 ../src/widgets/toolbox.cpp:3139
 #: ../share/extensions/foldablebox.inx.h:4
 #: ../share/extensions/interp_att_g.inx.h:6
 msgid "Height"
@@ -4727,17 +4727,17 @@ msgstr ""
 #: ../src/flood-context.cpp:250 ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:426
-#: ../src/widgets/sp-color-scales.cpp:427 ../src/widgets/toolbox.cpp:4281
+#: ../src/widgets/sp-color-scales.cpp:427 ../src/widgets/toolbox.cpp:4308
 #: ../share/extensions/color_randomize.inx.h:2
 msgid "Hue"
 msgstr ""
 
 #: ../src/extension/internal/bitmap/modulate.cpp:42
-#: ../src/flood-context.cpp:251 ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/flood-context.cpp:251 ../src/ui/dialog/inkscape-preferences.cpp:841
 #: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:429
-#: ../src/widgets/sp-color-scales.cpp:430 ../src/widgets/toolbox.cpp:4296
+#: ../src/widgets/sp-color-scales.cpp:430 ../src/widgets/toolbox.cpp:4323
 #: ../share/extensions/color_randomize.inx.h:5
 msgid "Saturation"
 msgstr ""
@@ -5086,7 +5086,7 @@ msgstr ""
 #: ../src/extension/internal/filter/filter.cpp:214
 #: ../src/extension/internal/filter/filter-file.cpp:148
 #: ../src/extension/internal/filter/snow.h:38
-#: ../src/ui/dialog/inkscape-preferences.cpp:733
+#: ../src/ui/dialog/inkscape-preferences.cpp:744
 msgid "Filters"
 msgstr ""
 
@@ -5576,7 +5576,7 @@ msgstr ""
 msgid "Select file to export to"
 msgstr ""
 
-#: ../src/file.cpp:1473 ../src/verbs.cpp:2265
+#: ../src/file.cpp:1473 ../src/verbs.cpp:2275
 msgid "Import From Open Clip Art Library"
 msgstr ""
 
@@ -5695,7 +5695,7 @@ msgid "Luminance to Alpha"
 msgstr ""
 
 #. File
-#: ../src/filter-enums.cpp:72 ../src/verbs.cpp:2242
+#: ../src/filter-enums.cpp:72 ../src/verbs.cpp:2252
 msgid "Default"
 msgstr ""
 
@@ -5758,10 +5758,10 @@ msgstr ""
 #: ../src/ui/dialog/filter-effects-dialog.cpp:468
 #: ../src/ui/dialog/inkscape-preferences.cpp:259
 #: ../src/ui/dialog/inkscape-preferences.cpp:422
-#: ../src/ui/dialog/inkscape-preferences.cpp:554
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
-#: ../src/ui/dialog/inkscape-preferences.cpp:1216 ../src/verbs.cpp:2239
-#: ../src/widgets/stroke-style.cpp:765 ../src/widgets/toolbox.cpp:3887
+#: ../src/ui/dialog/inkscape-preferences.cpp:565
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
+#: ../src/ui/dialog/inkscape-preferences.cpp:1227 ../src/verbs.cpp:2249
+#: ../src/widgets/stroke-style.cpp:765 ../src/widgets/toolbox.cpp:3914
 #: ../share/extensions/grid_polar.inx.h:16
 #: ../share/extensions/guides_creator.inx.h:15
 #: ../share/extensions/scour.inx.h:7
@@ -5823,12 +5823,12 @@ msgstr ""
 
 #: ../src/flood-context.cpp:252 ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:432
-#: ../src/widgets/sp-color-scales.cpp:433 ../src/widgets/toolbox.cpp:4311
+#: ../src/widgets/sp-color-scales.cpp:433 ../src/widgets/toolbox.cpp:4338
 #: ../share/extensions/color_randomize.inx.h:3
 msgid "Lightness"
 msgstr ""
 
-#: ../src/flood-context.cpp:265 ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/flood-context.cpp:265 ../src/ui/dialog/inkscape-preferences.cpp:1083
 msgid "Small"
 msgstr ""
 
@@ -5836,7 +5836,7 @@ msgstr ""
 msgid "Medium"
 msgstr ""
 
-#: ../src/flood-context.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/flood-context.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1083
 msgid "Large"
 msgstr ""
 
@@ -6073,8 +6073,8 @@ msgstr ""
 
 #. Add the units menu.
 #: ../src/helper/units.cpp:37 ../src/widgets/select-toolbar.cpp:504
-#: ../src/widgets/toolbox.cpp:1504 ../src/widgets/toolbox.cpp:3156
-#: ../src/widgets/toolbox.cpp:5660 ../src/widgets/toolbox.cpp:7203
+#: ../src/widgets/toolbox.cpp:1530 ../src/widgets/toolbox.cpp:3183
+#: ../src/widgets/toolbox.cpp:5879 ../src/widgets/toolbox.cpp:7635
 msgid "Units"
 msgstr ""
 
@@ -6321,42 +6321,42 @@ msgstr ""
 msgid "Verb \"%s\" Unknown"
 msgstr ""
 
-#: ../src/interface.cpp:995
+#: ../src/interface.cpp:998
 msgid "Open _Recent"
 msgstr ""
 
 #. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1096
+#: ../src/interface.cpp:1099
 #, c-format
 msgid "Enter group #%s"
 msgstr ""
 
-#: ../src/interface.cpp:1107
+#: ../src/interface.cpp:1110
 msgid "Go to parent"
 msgstr ""
 
-#: ../src/interface.cpp:1198 ../src/interface.cpp:1284
-#: ../src/interface.cpp:1387 ../src/ui/widget/selected-style.cpp:468
+#: ../src/interface.cpp:1201 ../src/interface.cpp:1287
+#: ../src/interface.cpp:1390 ../src/ui/widget/selected-style.cpp:468
 msgid "Drop color"
 msgstr ""
 
-#: ../src/interface.cpp:1237 ../src/interface.cpp:1347
+#: ../src/interface.cpp:1240 ../src/interface.cpp:1350
 msgid "Drop color on gradient"
 msgstr ""
 
-#: ../src/interface.cpp:1400
+#: ../src/interface.cpp:1403
 msgid "Could not parse SVG data"
 msgstr ""
 
-#: ../src/interface.cpp:1439
+#: ../src/interface.cpp:1442
 msgid "Drop SVG"
 msgstr ""
 
-#: ../src/interface.cpp:1495
+#: ../src/interface.cpp:1498
 msgid "Drop bitmap image"
 msgstr ""
 
-#: ../src/interface.cpp:1587
+#: ../src/interface.cpp:1590
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do "
@@ -6365,7 +6365,7 @@ msgid ""
 "The file already exists in \"%s\". Replacing it will overwrite its contents."
 msgstr ""
 
-#: ../src/interface.cpp:1594 ../share/extensions/web-set-att.inx.h:5
+#: ../src/interface.cpp:1597 ../share/extensions/web-set-att.inx.h:5
 #: ../share/extensions/web-transmit-att.inx.h:5
 msgid "Replace"
 msgstr ""
@@ -6456,8 +6456,8 @@ msgstr ""
 msgid "Dockbar style to show items on it"
 msgstr ""
 
-#: ../src/libgdl/gdl-dock.c:175 ../src/ui/dialog/inkscape-preferences.cpp:549
-#: ../src/ui/dialog/inkscape-preferences.cpp:570
+#: ../src/libgdl/gdl-dock.c:175 ../src/ui/dialog/inkscape-preferences.cpp:560
+#: ../src/ui/dialog/inkscape-preferences.cpp:581
 msgid "Floating"
 msgstr ""
 
@@ -7534,11 +7534,11 @@ msgstr ""
 msgid "Both"
 msgstr ""
 
-#: ../src/live_effects/lpe-ruler.cpp:35 ../src/widgets/toolbox.cpp:5168
+#: ../src/live_effects/lpe-ruler.cpp:35 ../src/widgets/toolbox.cpp:5387
 msgid "Start"
 msgstr ""
 
-#: ../src/live_effects/lpe-ruler.cpp:36 ../src/widgets/toolbox.cpp:5181
+#: ../src/live_effects/lpe-ruler.cpp:36 ../src/widgets/toolbox.cpp:5400
 msgid "End"
 msgstr ""
 
@@ -8088,11 +8088,11 @@ msgstr ""
 
 #. TODO look at some dynamic option for changing the menu tree:
 #. "       <verb verb-id=\"DialogInput2\" />\n"
-#: ../src/menus-skeleton.h:49 ../src/verbs.cpp:2488 ../src/verbs.cpp:2494
+#: ../src/menus-skeleton.h:49 ../src/verbs.cpp:2498 ../src/verbs.cpp:2504
 msgid "_Edit"
 msgstr ""
 
-#: ../src/menus-skeleton.h:59 ../src/verbs.cpp:2288
+#: ../src/menus-skeleton.h:59 ../src/verbs.cpp:2298
 msgid "Paste Si_ze"
 msgstr ""
 
@@ -8263,7 +8263,7 @@ msgstr ""
 msgid "Cannot find path between nodes."
 msgstr ""
 
-#: ../src/nodepath.cpp:2804 ../src/widgets/toolbox.cpp:1343
+#: ../src/nodepath.cpp:2804 ../src/widgets/toolbox.cpp:1369
 msgid "Delete segment"
 msgstr ""
 
@@ -8275,7 +8275,7 @@ msgstr ""
 msgid "Change node type"
 msgstr ""
 
-#: ../src/nodepath.cpp:3529 ../src/widgets/toolbox.cpp:1300
+#: ../src/nodepath.cpp:3529 ../src/widgets/toolbox.cpp:1326
 msgid "Delete node"
 msgstr ""
 
@@ -8999,8 +8999,8 @@ msgid "<b>Nothing</b> was deleted."
 msgstr ""
 
 #: ../src/selection-chemistry.cpp:221 ../src/text-context.cpp:995
-#: ../src/ui/dialog/swatches.cpp:471 ../src/widgets/toolbox.cpp:1304
-#: ../src/widgets/toolbox.cpp:5752
+#: ../src/ui/dialog/swatches.cpp:471 ../src/widgets/toolbox.cpp:1330
+#: ../src/widgets/toolbox.cpp:5971
 msgid "Delete"
 msgstr ""
 
@@ -9332,15 +9332,15 @@ msgid "Select <b>object(s)</b> to fit canvas to."
 msgstr ""
 
 #. Fit Page
-#: ../src/selection-chemistry.cpp:2944 ../src/verbs.cpp:2723
+#: ../src/selection-chemistry.cpp:2944 ../src/verbs.cpp:2739
 msgid "Fit Page to Selection"
 msgstr ""
 
-#: ../src/selection-chemistry.cpp:2969 ../src/verbs.cpp:2725
+#: ../src/selection-chemistry.cpp:2969 ../src/verbs.cpp:2741
 msgid "Fit Page to Drawing"
 msgstr ""
 
-#: ../src/selection-chemistry.cpp:2985 ../src/verbs.cpp:2727
+#: ../src/selection-chemistry.cpp:2985 ../src/verbs.cpp:2743
 msgid "Fit Page to Selection or Drawing"
 msgstr ""
 
@@ -9355,10 +9355,10 @@ msgstr ""
 msgid "Circle"
 msgstr ""
 
-#. ellipse
+#. Ellipse
 #: ../src/selection-describer.cpp:49 ../src/selection-describer.cpp:76
-#: ../src/ui/dialog/inkscape-preferences.cpp:474 ../src/verbs.cpp:2510
-#: ../src/widgets/toolbox.cpp:3890
+#: ../src/ui/dialog/inkscape-preferences.cpp:480 ../src/verbs.cpp:2522
+#: ../src/widgets/toolbox.cpp:3917
 msgid "Ellipse"
 msgstr ""
 
@@ -9374,7 +9374,7 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: ../src/selection-describer.cpp:61 ../src/widgets/toolbox.cpp:2726
+#: ../src/selection-describer.cpp:61 ../src/widgets/toolbox.cpp:2753
 msgid "Polygon"
 msgstr ""
 
@@ -9384,13 +9384,13 @@ msgstr ""
 
 #. Rectangle
 #: ../src/selection-describer.cpp:65
-#: ../src/ui/dialog/inkscape-preferences.cpp:464 ../src/verbs.cpp:2506
+#: ../src/ui/dialog/inkscape-preferences.cpp:470 ../src/verbs.cpp:2518
 msgid "Rectangle"
 msgstr ""
 
 #. 3D box
 #: ../src/selection-describer.cpp:67
-#: ../src/ui/dialog/inkscape-preferences.cpp:469 ../src/verbs.cpp:2508
+#: ../src/ui/dialog/inkscape-preferences.cpp:475 ../src/verbs.cpp:2520
 msgid "3D Box"
 msgstr ""
 
@@ -9405,16 +9405,16 @@ msgstr ""
 msgid "Offset path"
 msgstr ""
 
-#. spiral
+#. Spiral
 #: ../src/selection-describer.cpp:80
-#: ../src/ui/dialog/inkscape-preferences.cpp:482 ../src/verbs.cpp:2514
+#: ../src/ui/dialog/inkscape-preferences.cpp:488 ../src/verbs.cpp:2526
 msgid "Spiral"
 msgstr ""
 
-#. star
+#. Star
 #: ../src/selection-describer.cpp:82
-#: ../src/ui/dialog/inkscape-preferences.cpp:478 ../src/verbs.cpp:2512
-#: ../src/widgets/toolbox.cpp:2733
+#: ../src/ui/dialog/inkscape-preferences.cpp:484 ../src/verbs.cpp:2524
+#: ../src/widgets/toolbox.cpp:2760
 msgid "Star"
 msgstr ""
 
@@ -9716,26 +9716,26 @@ msgstr ""
 msgid "Create spiral"
 msgstr ""
 
-#: ../src/sp-item.cpp:1035
+#: ../src/sp-item.cpp:1039
 msgid "Object"
 msgstr ""
 
-#: ../src/sp-item.cpp:1052
+#: ../src/sp-item.cpp:1056
 #, c-format
 msgid "%s; <i>clipped</i>"
 msgstr ""
 
-#: ../src/sp-item.cpp:1057
+#: ../src/sp-item.cpp:1061
 #, c-format
 msgid "%s; <i>masked</i>"
 msgstr ""
 
-#: ../src/sp-item.cpp:1065
+#: ../src/sp-item.cpp:1069
 #, c-format
 msgid "%s; <i>filtered (%s)</i>"
 msgstr ""
 
-#: ../src/sp-item.cpp:1067
+#: ../src/sp-item.cpp:1071
 #, c-format
 msgid "%s; <i>filtered</i>"
 msgstr ""
@@ -10035,7 +10035,7 @@ msgstr ""
 msgid "The flowed text(s) must be <b>visible</b> in order to be put on a path."
 msgstr ""
 
-#: ../src/text-chemistry.cpp:192 ../src/verbs.cpp:2364
+#: ../src/text-chemistry.cpp:192 ../src/verbs.cpp:2374
 msgid "Put text on path"
 msgstr ""
 
@@ -10047,7 +10047,7 @@ msgstr ""
 msgid "<b>No texts-on-paths</b> in the selection."
 msgstr ""
 
-#: ../src/text-chemistry.cpp:229 ../src/verbs.cpp:2366
+#: ../src/text-chemistry.cpp:229 ../src/verbs.cpp:2376
 msgid "Remove text from path"
 msgstr ""
 
@@ -10226,7 +10226,7 @@ msgstr ""
 msgid "Type or edit text (%d characters); <b>Enter</b> to start new line."
 msgstr ""
 
-#: ../src/text-context.cpp:1612 ../src/tools-switch.cpp:190
+#: ../src/text-context.cpp:1612 ../src/tools-switch.cpp:198
 msgid ""
 "<b>Click</b> to select or create text, <b>drag</b> to create flowed text; "
 "then type."
@@ -10240,94 +10240,98 @@ msgstr ""
 msgid "You cannot edit <b>cloned character data</b>."
 msgstr ""
 
-#: ../src/tools-switch.cpp:130
+#: ../src/tools-switch.cpp:132
 msgid ""
 "To edit a path, <b>click</b>, <b>Shift+click</b>, or <b>drag around</b> "
 "nodes to select them, then <b>drag</b> nodes and handles. <b>Click</b> on an "
 "object to select."
 msgstr ""
 
-#: ../src/tools-switch.cpp:136
+#: ../src/tools-switch.cpp:138
 msgid "To tweak a path by pushing, select it and drag over it."
 msgstr ""
 
-#: ../src/tools-switch.cpp:142
+#: ../src/tools-switch.cpp:144
+msgid "To spray a path by pushing, select it and drag over it."
+msgstr ""
+
+#: ../src/tools-switch.cpp:150
 msgid ""
 "<b>Drag</b> to create a rectangle. <b>Drag controls</b> to round corners and "
 "resize. <b>Click</b> to select."
 msgstr ""
 
-#: ../src/tools-switch.cpp:148
+#: ../src/tools-switch.cpp:156
 msgid ""
 "<b>Drag</b> to create a 3D box. <b>Drag controls</b> to resize in "
 "perspective. <b>Click</b> to select (with <b>Ctrl+Alt</b> for single faces)."
 msgstr ""
 
-#: ../src/tools-switch.cpp:154
+#: ../src/tools-switch.cpp:162
 msgid ""
 "<b>Drag</b> to create an ellipse. <b>Drag controls</b> to make an arc or "
 "segment. <b>Click</b> to select."
 msgstr ""
 
-#: ../src/tools-switch.cpp:160
+#: ../src/tools-switch.cpp:168
 msgid ""
 "<b>Drag</b> to create a star. <b>Drag controls</b> to edit the star shape. "
 "<b>Click</b> to select."
 msgstr ""
 
-#: ../src/tools-switch.cpp:166
+#: ../src/tools-switch.cpp:174
 msgid ""
 "<b>Drag</b> to create a spiral. <b>Drag controls</b> to edit the spiral "
 "shape. <b>Click</b> to select."
 msgstr ""
 
-#: ../src/tools-switch.cpp:172
+#: ../src/tools-switch.cpp:180
 msgid ""
 "<b>Drag</b> to create a freehand line. <b>Shift</b> appends to selected "
 "path, <b>Alt</b> activates sketch mode."
 msgstr ""
 
-#: ../src/tools-switch.cpp:178
+#: ../src/tools-switch.cpp:186
 msgid ""
 "<b>Click</b> or <b>click and drag</b> to start a path; with <b>Shift</b> to "
 "append to selected path. <b>Ctrl+click</b> to create single dots (straight "
 "line modes only)."
 msgstr ""
 
-#: ../src/tools-switch.cpp:184
+#: ../src/tools-switch.cpp:192
 msgid ""
 "<b>Drag</b> to draw a calligraphic stroke; with <b>Ctrl</b> to track a guide "
 "path. <b>Arrow keys</b> adjust width (left/right) and angle (up/down)."
 msgstr ""
 
-#: ../src/tools-switch.cpp:196
+#: ../src/tools-switch.cpp:204
 msgid ""
 "<b>Drag</b> or <b>double click</b> to create a gradient on selected objects, "
 "<b>drag handles</b> to adjust gradients."
 msgstr ""
 
-#: ../src/tools-switch.cpp:202
+#: ../src/tools-switch.cpp:210
 msgid ""
 "<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to "
 "zoom out."
 msgstr ""
 
-#: ../src/tools-switch.cpp:214
+#: ../src/tools-switch.cpp:222
 msgid "<b>Click and drag</b> between shapes to create a connector."
 msgstr ""
 
-#: ../src/tools-switch.cpp:220
+#: ../src/tools-switch.cpp:228
 msgid ""
 "<b>Click</b> to paint a bounded area, <b>Shift+click</b> to union the new "
 "fill with the current selection, <b>Ctrl+click</b> to change the clicked "
 "object's fill and stroke to the current setting."
 msgstr ""
 
-#: ../src/tools-switch.cpp:226
+#: ../src/tools-switch.cpp:234
 msgid "<b>Drag</b> to erase."
 msgstr ""
 
-#: ../src/tools-switch.cpp:232
+#: ../src/tools-switch.cpp:240
 msgid "Choose a subtool from the toolbar"
 msgstr ""
 
@@ -10588,7 +10592,7 @@ msgid "Create link"
 msgstr ""
 
 #. "Ungroup"
-#: ../src/ui/context-menu.cpp:306 ../src/verbs.cpp:2360
+#: ../src/ui/context-menu.cpp:306 ../src/verbs.cpp:2370
 msgid "_Ungroup"
 msgstr ""
 
@@ -10697,12 +10701,12 @@ msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:509
 #: ../src/ui/dialog/align-and-distribute.cpp:789
-#: ../src/widgets/toolbox.cpp:7068
+#: ../src/widgets/toolbox.cpp:7475
 msgid "Remove overlaps"
 msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:540
-#: ../src/widgets/toolbox.cpp:6931
+#: ../src/widgets/toolbox.cpp:7265
 msgid "Arrange connector network"
 msgstr ""
 
@@ -10727,7 +10731,7 @@ msgid "Connector network layout"
 msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:791
-#: ../src/widgets/toolbox.cpp:2083
+#: ../src/widgets/toolbox.cpp:2110
 msgid "Nodes"
 msgstr ""
 
@@ -10842,7 +10846,7 @@ msgid ""
 msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:893
-#: ../src/widgets/toolbox.cpp:7031
+#: ../src/widgets/toolbox.cpp:7436
 msgid "Nicely arrange selected connector network"
 msgstr ""
 
@@ -10903,7 +10907,7 @@ msgstr ""
 #.
 #. -----------
 #: ../src/ui/dialog/calligraphic-profile-rename.cpp:52
-#: ../src/ui/dialog/inkscape-preferences.cpp:1145
+#: ../src/ui/dialog/inkscape-preferences.cpp:1156
 msgid "Save"
 msgstr ""
 
@@ -11054,18 +11058,18 @@ msgid "Remove selected grid."
 msgstr ""
 
 #: ../src/ui/dialog/document-properties.cpp:119
-#: ../src/widgets/toolbox.cpp:2172
+#: ../src/widgets/toolbox.cpp:2199
 msgid "Guides"
 msgstr ""
 
 #: ../src/ui/dialog/document-properties.cpp:120
-#: ../src/ui/dialog/inkscape-preferences.cpp:1014
-#: ../src/widgets/toolbox.cpp:2163
+#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+#: ../src/widgets/toolbox.cpp:2190
 msgid "Grids"
 msgstr ""
 
-#: ../src/ui/dialog/document-properties.cpp:121 ../src/verbs.cpp:2587
-#: ../src/widgets/toolbox.cpp:2028
+#: ../src/ui/dialog/document-properties.cpp:121 ../src/verbs.cpp:2601
+#: ../src/widgets/toolbox.cpp:2055
 msgid "Snap"
 msgstr ""
 
@@ -11192,7 +11196,7 @@ msgstr ""
 #. Inkscape::GC::release(defsRepr);
 #. inform the document, so we can undo
 #. Color Management
-#: ../src/ui/dialog/document-properties.cpp:451 ../src/verbs.cpp:2739
+#: ../src/ui/dialog/document-properties.cpp:451 ../src/verbs.cpp:2755
 msgid "Link Color Profile"
 msgstr ""
 
@@ -11604,8 +11608,8 @@ msgid "Height of filter effects region"
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2165
-#: ../src/widgets/toolbox.cpp:3859 ../src/widgets/toolbox.cpp:4250
-#: ../share/extensions/extrude.inx.h:4
+#: ../src/widgets/toolbox.cpp:3886 ../src/widgets/toolbox.cpp:4277
+#: ../src/widgets/toolbox.cpp:4545 ../share/extensions/extrude.inx.h:4
 msgid "Mode:"
 msgstr ""
 
@@ -11804,7 +11808,7 @@ msgid "The whole filter region will be filled with this color."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2214
-#: ../src/widgets/toolbox.cpp:5299
+#: ../src/widgets/toolbox.cpp:5518
 msgid "Opacity:"
 msgstr ""
 
@@ -12158,7 +12162,7 @@ msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:204
 #: ../src/ui/dialog/tracedialog.cpp:420 ../src/ui/dialog/tracedialog.cpp:453
-#: ../src/ui/dialog/tracedialog.cpp:596 ../src/widgets/toolbox.cpp:7185
+#: ../src/ui/dialog/tracedialog.cpp:596 ../src/widgets/toolbox.cpp:7617
 msgid "Threshold:"
 msgstr ""
 
@@ -12551,268 +12555,283 @@ msgid ""
 msgstr ""
 
 #. Tweak
-#: ../src/ui/dialog/inkscape-preferences.cpp:447 ../src/verbs.cpp:2504
+#: ../src/ui/dialog/inkscape-preferences.cpp:447 ../src/verbs.cpp:2514
 msgid "Tweak"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:448
+#: ../src/ui/dialog/inkscape-preferences.cpp:454
 msgid "Paint objects with:"
 msgstr ""
 
+#. Spray
+#: ../src/ui/dialog/inkscape-preferences.cpp:453 ../src/verbs.cpp:2516
+msgid "Spray"
+msgstr ""
+
 #. Zoom
-#: ../src/ui/dialog/inkscape-preferences.cpp:453
-#: ../src/ui/view/edit-widget.cpp:1062 ../src/verbs.cpp:2526
+#: ../src/ui/dialog/inkscape-preferences.cpp:459
+#: ../src/ui/view/edit-widget.cpp:1068 ../src/verbs.cpp:2538
 #: ../src/widgets/desktop-widget.cpp:483
 msgid "Zoom"
 msgstr ""
 
 #. Shapes
-#: ../src/ui/dialog/inkscape-preferences.cpp:458
+#: ../src/ui/dialog/inkscape-preferences.cpp:464
 msgid "Shapes"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:490
+#: ../src/ui/dialog/inkscape-preferences.cpp:496
 msgid "Sketch mode"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:492
+#: ../src/ui/dialog/inkscape-preferences.cpp:498
 msgid ""
 "If on, the sketch result will be the normal average of all sketches made, "
 "instead of averaging the old result with the new sketch."
 msgstr ""
 
 #. Pen
-#: ../src/ui/dialog/inkscape-preferences.cpp:495 ../src/verbs.cpp:2518
+#: ../src/ui/dialog/inkscape-preferences.cpp:501 ../src/verbs.cpp:2530
 msgid "Pen"
 msgstr ""
 
 #. Calligraphy
-#: ../src/ui/dialog/inkscape-preferences.cpp:501 ../src/verbs.cpp:2520
+#: ../src/ui/dialog/inkscape-preferences.cpp:507 ../src/verbs.cpp:2532
 msgid "Calligraphy"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:505
+#: ../src/ui/dialog/inkscape-preferences.cpp:511
 msgid ""
 "If on, pen width is in absolute units (px) independent of zoom; otherwise "
 "pen width depends on zoom so that it looks the same at any zoom"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:507
+#: ../src/ui/dialog/inkscape-preferences.cpp:513
 msgid ""
 "If on, each newly created object will be selected (deselecting previous "
 "selection)"
 msgstr ""
 
 #. Paint Bucket
-#: ../src/ui/dialog/inkscape-preferences.cpp:509 ../src/verbs.cpp:2532
+#: ../src/ui/dialog/inkscape-preferences.cpp:515 ../src/verbs.cpp:2544
 msgid "Paint Bucket"
 msgstr ""
 
 #. Eraser
-#: ../src/ui/dialog/inkscape-preferences.cpp:514 ../src/verbs.cpp:2536
+#: ../src/ui/dialog/inkscape-preferences.cpp:520 ../src/verbs.cpp:2548
 msgid "Eraser"
 msgstr ""
 
 #. LPETool
-#: ../src/ui/dialog/inkscape-preferences.cpp:518 ../src/verbs.cpp:2538
+#: ../src/ui/dialog/inkscape-preferences.cpp:524 ../src/verbs.cpp:2550
 msgid "LPE Tool"
 msgstr ""
 
+#: ../src/ui/dialog/inkscape-preferences.cpp:533
+msgid "Show font samples in the drop-down list"
+msgstr ""
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:534
+msgid ""
+"Show font samples alongside font names in the drop-down list in Text bar"
+msgstr ""
+
 #. Gradient
-#: ../src/ui/dialog/inkscape-preferences.cpp:528 ../src/verbs.cpp:2524
+#: ../src/ui/dialog/inkscape-preferences.cpp:539 ../src/verbs.cpp:2536
 msgid "Gradient"
 msgstr ""
 
 #. Connector
-#: ../src/ui/dialog/inkscape-preferences.cpp:532 ../src/verbs.cpp:2530
+#: ../src/ui/dialog/inkscape-preferences.cpp:543 ../src/verbs.cpp:2542
 msgid "Connector"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:535
+#: ../src/ui/dialog/inkscape-preferences.cpp:546
 msgid "If on, connector attachment points will not be shown for text objects"
 msgstr ""
 
 #. Dropper
-#: ../src/ui/dialog/inkscape-preferences.cpp:537 ../src/verbs.cpp:2528
+#: ../src/ui/dialog/inkscape-preferences.cpp:548 ../src/verbs.cpp:2540
 msgid "Dropper"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:544
+#: ../src/ui/dialog/inkscape-preferences.cpp:555
 msgid "Save and restore window geometry for each document"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:545
+#: ../src/ui/dialog/inkscape-preferences.cpp:556
 msgid "Remember and use last window's geometry"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:546
+#: ../src/ui/dialog/inkscape-preferences.cpp:557
 msgid "Don't save window geometry"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:548
-#: ../src/ui/dialog/inkscape-preferences.cpp:568
+#: ../src/ui/dialog/inkscape-preferences.cpp:559
+#: ../src/ui/dialog/inkscape-preferences.cpp:579
 msgid "Dockable"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:551
+#: ../src/ui/dialog/inkscape-preferences.cpp:562
 msgid "Dialogs are hidden in taskbar"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:552
+#: ../src/ui/dialog/inkscape-preferences.cpp:563
 msgid "Zoom when window is resized"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:553
+#: ../src/ui/dialog/inkscape-preferences.cpp:564
 msgid "Show close button on dialogs"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:555
+#: ../src/ui/dialog/inkscape-preferences.cpp:566
 msgid "Normal"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:556
+#: ../src/ui/dialog/inkscape-preferences.cpp:567
 msgid "Aggressive"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:558
+#: ../src/ui/dialog/inkscape-preferences.cpp:569
 msgid "Saving window geometry (size and position):"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:560
+#: ../src/ui/dialog/inkscape-preferences.cpp:571
 msgid "Let the window manager determine placement of all windows"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:562
+#: ../src/ui/dialog/inkscape-preferences.cpp:573
 msgid ""
 "Remember and use the last window's geometry (saves geometry to user "
 "preferences)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:564
+#: ../src/ui/dialog/inkscape-preferences.cpp:575
 msgid ""
 "Save and restore window geometry for each document (saves geometry in the "
 "document)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:566
+#: ../src/ui/dialog/inkscape-preferences.cpp:577
 msgid "Dialog behavior (requires restart):"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:573
+#: ../src/ui/dialog/inkscape-preferences.cpp:584
 msgid "Dialogs on top:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:576
+#: ../src/ui/dialog/inkscape-preferences.cpp:587
 msgid "Dialogs are treated as regular windows"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:578
+#: ../src/ui/dialog/inkscape-preferences.cpp:589
 msgid "Dialogs stay on top of document windows"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:580
+#: ../src/ui/dialog/inkscape-preferences.cpp:591
 msgid "Same as Normal but may work better with some window managers"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:584
+#: ../src/ui/dialog/inkscape-preferences.cpp:595
 msgid "Dialog Transparency:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:586
+#: ../src/ui/dialog/inkscape-preferences.cpp:597
 msgid "Opacity when focused:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:588
+#: ../src/ui/dialog/inkscape-preferences.cpp:599
 msgid "Opacity when unfocused:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:590
+#: ../src/ui/dialog/inkscape-preferences.cpp:601
 msgid "Time of opacity change animation:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:593
+#: ../src/ui/dialog/inkscape-preferences.cpp:604
 msgid "Miscellaneous:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:596
+#: ../src/ui/dialog/inkscape-preferences.cpp:607
 msgid "Whether dialog windows are to be hidden in the window manager taskbar"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:599
+#: ../src/ui/dialog/inkscape-preferences.cpp:610
 msgid ""
 "Zoom drawing when document window is resized, to keep the same area visible "
 "(this is the default which can be changed in any window using the button "
 "above the right scrollbar)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:601
+#: ../src/ui/dialog/inkscape-preferences.cpp:612
 msgid "Whether dialog windows have a close button (requires restart)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:602
+#: ../src/ui/dialog/inkscape-preferences.cpp:613
 msgid "Windows"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:607
+#: ../src/ui/dialog/inkscape-preferences.cpp:618
 msgid "Move in parallel"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:609
+#: ../src/ui/dialog/inkscape-preferences.cpp:620
 msgid "Stay unmoved"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:611
+#: ../src/ui/dialog/inkscape-preferences.cpp:622
 msgid "Move according to transform"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:613
+#: ../src/ui/dialog/inkscape-preferences.cpp:624
 msgid "Are unlinked"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:615
+#: ../src/ui/dialog/inkscape-preferences.cpp:626
 msgid "Are deleted"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:618
+#: ../src/ui/dialog/inkscape-preferences.cpp:629
 msgid "When the original moves, its clones and linked offsets:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:620
+#: ../src/ui/dialog/inkscape-preferences.cpp:631
 msgid "Clones are translated by the same vector as their original."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:622
+#: ../src/ui/dialog/inkscape-preferences.cpp:633
 msgid "Clones preserve their positions when their original is moved."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:624
+#: ../src/ui/dialog/inkscape-preferences.cpp:635
 msgid ""
 "Each clone moves according to the value of its transform= attribute. For "
 "example, a rotated clone will move in a different direction than its "
 "original."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:625
+#: ../src/ui/dialog/inkscape-preferences.cpp:636
 msgid "When the original is deleted, its clones:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:627
+#: ../src/ui/dialog/inkscape-preferences.cpp:638
 msgid "Orphaned clones are converted to regular objects."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:629
+#: ../src/ui/dialog/inkscape-preferences.cpp:640
 msgid "Orphaned clones are deleted along with their original."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:631
+#: ../src/ui/dialog/inkscape-preferences.cpp:642
 msgid "When duplicating original+clones:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:633
+#: ../src/ui/dialog/inkscape-preferences.cpp:644
 msgid "Relink duplicated clones"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:635
+#: ../src/ui/dialog/inkscape-preferences.cpp:646
 msgid ""
 "When duplicating a selection containing both a clone and its original "
 "(possibly in groups), relink the duplicated clone to the duplicated original "
@@ -12820,891 +12839,891 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page
-#: ../src/ui/dialog/inkscape-preferences.cpp:638
+#: ../src/ui/dialog/inkscape-preferences.cpp:649
 msgid "Clones"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:643
+#: ../src/ui/dialog/inkscape-preferences.cpp:654
 msgid "When applying, use the topmost selected object as clippath/mask"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:645
+#: ../src/ui/dialog/inkscape-preferences.cpp:656
 msgid ""
 "Uncheck this to use the bottom selected object as the clipping path or mask"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:646
+#: ../src/ui/dialog/inkscape-preferences.cpp:657
 msgid "Remove clippath/mask object after applying"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:648
+#: ../src/ui/dialog/inkscape-preferences.cpp:659
 msgid ""
 "After applying, remove the object used as the clipping path or mask from the "
 "drawing"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:649
+#: ../src/ui/dialog/inkscape-preferences.cpp:660
 msgid "Clippaths and masks"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:654
+#: ../src/ui/dialog/inkscape-preferences.cpp:665
 #: ../src/widgets/select-toolbar.cpp:544
 msgid "Scale stroke width"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:655
+#: ../src/ui/dialog/inkscape-preferences.cpp:666
 msgid "Scale rounded corners in rectangles"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:656
+#: ../src/ui/dialog/inkscape-preferences.cpp:667
 msgid "Transform gradients"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:657
+#: ../src/ui/dialog/inkscape-preferences.cpp:668
 msgid "Transform patterns"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:658
+#: ../src/ui/dialog/inkscape-preferences.cpp:669
 msgid "Optimized"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:659
+#: ../src/ui/dialog/inkscape-preferences.cpp:670
 msgid "Preserved"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:662
+#: ../src/ui/dialog/inkscape-preferences.cpp:673
 #: ../src/widgets/select-toolbar.cpp:545
 msgid "When scaling objects, scale the stroke width by the same proportion"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:664
+#: ../src/ui/dialog/inkscape-preferences.cpp:675
 #: ../src/widgets/select-toolbar.cpp:556
 msgid "When scaling rectangles, scale the radii of rounded corners"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:666
+#: ../src/ui/dialog/inkscape-preferences.cpp:677
 #: ../src/widgets/select-toolbar.cpp:567
 msgid "Move gradients (in fill or stroke) along with the objects"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:668
+#: ../src/ui/dialog/inkscape-preferences.cpp:679
 #: ../src/widgets/select-toolbar.cpp:578
 msgid "Move patterns (in fill or stroke) along with the objects"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:669
+#: ../src/ui/dialog/inkscape-preferences.cpp:680
 msgid "Store transformation:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:671
+#: ../src/ui/dialog/inkscape-preferences.cpp:682
 msgid ""
 "If possible, apply transformation to objects without adding a transform= "
 "attribute"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:673
+#: ../src/ui/dialog/inkscape-preferences.cpp:684
 msgid "Always store transformation as a transform= attribute on objects"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:675
+#: ../src/ui/dialog/inkscape-preferences.cpp:686
 msgid "Transforms"
 msgstr ""
 
 #. blur quality
 #. filter quality
-#: ../src/ui/dialog/inkscape-preferences.cpp:681
-#: ../src/ui/dialog/inkscape-preferences.cpp:705
+#: ../src/ui/dialog/inkscape-preferences.cpp:692
+#: ../src/ui/dialog/inkscape-preferences.cpp:716
 msgid "Best quality (slowest)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:683
-#: ../src/ui/dialog/inkscape-preferences.cpp:707
+#: ../src/ui/dialog/inkscape-preferences.cpp:694
+#: ../src/ui/dialog/inkscape-preferences.cpp:718
 msgid "Better quality (slower)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:685
-#: ../src/ui/dialog/inkscape-preferences.cpp:709
+#: ../src/ui/dialog/inkscape-preferences.cpp:696
+#: ../src/ui/dialog/inkscape-preferences.cpp:720
 msgid "Average quality"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:687
-#: ../src/ui/dialog/inkscape-preferences.cpp:711
+#: ../src/ui/dialog/inkscape-preferences.cpp:698
+#: ../src/ui/dialog/inkscape-preferences.cpp:722
 msgid "Lower quality (faster)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:689
-#: ../src/ui/dialog/inkscape-preferences.cpp:713
+#: ../src/ui/dialog/inkscape-preferences.cpp:700
+#: ../src/ui/dialog/inkscape-preferences.cpp:724
 msgid "Lowest quality (fastest)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:692
+#: ../src/ui/dialog/inkscape-preferences.cpp:703
 msgid "Gaussian blur quality for display:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:694
-#: ../src/ui/dialog/inkscape-preferences.cpp:718
+#: ../src/ui/dialog/inkscape-preferences.cpp:705
+#: ../src/ui/dialog/inkscape-preferences.cpp:729
 msgid ""
 "Best quality, but display may be very slow at high zooms (bitmap export "
 "always uses best quality)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:696
-#: ../src/ui/dialog/inkscape-preferences.cpp:720
+#: ../src/ui/dialog/inkscape-preferences.cpp:707
+#: ../src/ui/dialog/inkscape-preferences.cpp:731
 msgid "Better quality, but slower display"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:698
-#: ../src/ui/dialog/inkscape-preferences.cpp:722
+#: ../src/ui/dialog/inkscape-preferences.cpp:709
+#: ../src/ui/dialog/inkscape-preferences.cpp:733
 msgid "Average quality, acceptable display speed"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:700
-#: ../src/ui/dialog/inkscape-preferences.cpp:724
+#: ../src/ui/dialog/inkscape-preferences.cpp:711
+#: ../src/ui/dialog/inkscape-preferences.cpp:735
 msgid "Lower quality (some artifacts), but display is faster"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:702
-#: ../src/ui/dialog/inkscape-preferences.cpp:726
+#: ../src/ui/dialog/inkscape-preferences.cpp:713
+#: ../src/ui/dialog/inkscape-preferences.cpp:737
 msgid "Lowest quality (considerable artifacts), but display is fastest"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:716
+#: ../src/ui/dialog/inkscape-preferences.cpp:727
 msgid "Filter effects quality for display:"
 msgstr ""
 
 #. show infobox
-#: ../src/ui/dialog/inkscape-preferences.cpp:729
+#: ../src/ui/dialog/inkscape-preferences.cpp:740
 msgid "Show filter primitives infobox"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:731
+#: ../src/ui/dialog/inkscape-preferences.cpp:742
 msgid ""
 "Show icons and descriptions for the filter primitives available at the "
 "filter effects dialog."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:739
+#: ../src/ui/dialog/inkscape-preferences.cpp:750
 msgid "Select in all layers"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:740
+#: ../src/ui/dialog/inkscape-preferences.cpp:751
 msgid "Select only within current layer"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:741
+#: ../src/ui/dialog/inkscape-preferences.cpp:752
 msgid "Select in current layer and sublayers"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:742
+#: ../src/ui/dialog/inkscape-preferences.cpp:753
 msgid "Ignore hidden objects and layers"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:743
+#: ../src/ui/dialog/inkscape-preferences.cpp:754
 msgid "Ignore locked objects and layers"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:744
+#: ../src/ui/dialog/inkscape-preferences.cpp:755
 msgid "Deselect upon layer change"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:746
+#: ../src/ui/dialog/inkscape-preferences.cpp:757
 msgid "Ctrl+A, Tab, Shift+Tab:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:748
+#: ../src/ui/dialog/inkscape-preferences.cpp:759
 msgid "Make keyboard selection commands work on objects in all layers"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:750
+#: ../src/ui/dialog/inkscape-preferences.cpp:761
 msgid "Make keyboard selection commands work on objects in current layer only"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:752
+#: ../src/ui/dialog/inkscape-preferences.cpp:763
 msgid ""
 "Make keyboard selection commands work on objects in current layer and all "
 "its sublayers"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:754
+#: ../src/ui/dialog/inkscape-preferences.cpp:765
 msgid ""
 "Uncheck this to be able to select objects that are hidden (either by "
 "themselves or by being in a hidden layer)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:756
+#: ../src/ui/dialog/inkscape-preferences.cpp:767
 msgid ""
 "Uncheck this to be able to select objects that are locked (either by "
 "themselves or by being in a locked layer)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:759
+#: ../src/ui/dialog/inkscape-preferences.cpp:770
 msgid ""
 "Uncheck this to be able to keep the current objects selected when the "
 "current layer changes"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:761
+#: ../src/ui/dialog/inkscape-preferences.cpp:772
 msgid "Selecting"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:768
+#: ../src/ui/dialog/inkscape-preferences.cpp:779
 msgid "Default export resolution:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:769
+#: ../src/ui/dialog/inkscape-preferences.cpp:780
 msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:771
+#: ../src/ui/dialog/inkscape-preferences.cpp:782
 msgid "Open Clip Art Library Server Name:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:772
+#: ../src/ui/dialog/inkscape-preferences.cpp:783
 msgid ""
 "The server name of the Open Clip Art Library webdav server. It's used by the "
 "Import and Export to OCAL function."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:774
+#: ../src/ui/dialog/inkscape-preferences.cpp:785
 msgid "Open Clip Art Library Username:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:775
+#: ../src/ui/dialog/inkscape-preferences.cpp:786
 msgid "The username used to log into Open Clip Art Library."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:777
+#: ../src/ui/dialog/inkscape-preferences.cpp:788
 msgid "Open Clip Art Library Password:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:778
+#: ../src/ui/dialog/inkscape-preferences.cpp:789
 msgid "The password used to log into Open Clip Art Library."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:780
+#: ../src/ui/dialog/inkscape-preferences.cpp:791
 msgid "Import/Export"
 msgstr ""
 
 #. TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:841
 msgid "Perceptual"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:841
 msgid "Relative Colorimetric"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:841
 msgid "Absolute Colorimetric"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:834
+#: ../src/ui/dialog/inkscape-preferences.cpp:845
 msgid "(Note: Color management has been disabled in this build)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:838
+#: ../src/ui/dialog/inkscape-preferences.cpp:849
 msgid "Display adjustment"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:848
+#: ../src/ui/dialog/inkscape-preferences.cpp:859
 #, c-format
 msgid ""
 "The ICC profile to use to calibrate display output.\n"
 "Searched directories:%s"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:849
+#: ../src/ui/dialog/inkscape-preferences.cpp:860
 msgid "Display profile:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:854
+#: ../src/ui/dialog/inkscape-preferences.cpp:865
 msgid "Retrieve profile from display"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:857
+#: ../src/ui/dialog/inkscape-preferences.cpp:868
 msgid "Retrieve profiles from those attached to displays via XICC."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:859
+#: ../src/ui/dialog/inkscape-preferences.cpp:870
 msgid "Retrieve profiles from those attached to displays."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:864
+#: ../src/ui/dialog/inkscape-preferences.cpp:875
 msgid "Display rendering intent:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:865
-#: ../src/ui/dialog/inkscape-preferences.cpp:888
+#: ../src/ui/dialog/inkscape-preferences.cpp:876
+#: ../src/ui/dialog/inkscape-preferences.cpp:899
 msgid "The rendering intent to use to calibrate display output."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:867
+#: ../src/ui/dialog/inkscape-preferences.cpp:878
 msgid "Proofing"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:869
+#: ../src/ui/dialog/inkscape-preferences.cpp:880
 msgid "Simulate output on screen"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:871
+#: ../src/ui/dialog/inkscape-preferences.cpp:882
 msgid "Simulates output of target device."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:873
+#: ../src/ui/dialog/inkscape-preferences.cpp:884
 msgid "Mark out of gamut colors"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:875
+#: ../src/ui/dialog/inkscape-preferences.cpp:886
 msgid "Highlights colors that are out of gamut for the target device."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:880
+#: ../src/ui/dialog/inkscape-preferences.cpp:891
 msgid "Out of gamut warning color:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:881
+#: ../src/ui/dialog/inkscape-preferences.cpp:892
 msgid "Selects the color used for out of gamut warning."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:883
+#: ../src/ui/dialog/inkscape-preferences.cpp:894
 msgid "Device profile:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:884
+#: ../src/ui/dialog/inkscape-preferences.cpp:895
 msgid "The ICC profile to use to simulate device output."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:887
+#: ../src/ui/dialog/inkscape-preferences.cpp:898
 msgid "Device rendering intent:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:890
+#: ../src/ui/dialog/inkscape-preferences.cpp:901
 msgid "Black point compensation"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:892
+#: ../src/ui/dialog/inkscape-preferences.cpp:903
 msgid "Enables black point compensation."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:894
+#: ../src/ui/dialog/inkscape-preferences.cpp:905
 msgid "Preserve black"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:899
+#: ../src/ui/dialog/inkscape-preferences.cpp:910
 msgid "(LittleCMS 1.15 or later required)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:901
+#: ../src/ui/dialog/inkscape-preferences.cpp:912
 msgid "Preserve K channel in CMYK -> CMYK transforms"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:914
+#: ../src/ui/dialog/inkscape-preferences.cpp:925
 #: ../src/widgets/sp-color-icc-selector.cpp:306
 #: ../src/widgets/sp-color-icc-selector.cpp:579
 msgid "<none>"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:959
+#: ../src/ui/dialog/inkscape-preferences.cpp:970
 msgid "Color management"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:964
+#: ../src/ui/dialog/inkscape-preferences.cpp:975
 msgid "Major grid line emphasizing"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:966
+#: ../src/ui/dialog/inkscape-preferences.cpp:977
 msgid "Don't emphasize gridlines when zoomed out"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:967
+#: ../src/ui/dialog/inkscape-preferences.cpp:978
 msgid ""
 "If set and zoomed out, the gridlines will be shown in normal color instead "
 "of major grid line color."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:969
+#: ../src/ui/dialog/inkscape-preferences.cpp:980
 msgid "Default grid settings"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:975
-#: ../src/ui/dialog/inkscape-preferences.cpp:996
+#: ../src/ui/dialog/inkscape-preferences.cpp:986
+#: ../src/ui/dialog/inkscape-preferences.cpp:1007
 msgid "Grid units:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:978
-#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:989
+#: ../src/ui/dialog/inkscape-preferences.cpp:1010
 msgid "Origin X:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:979
-#: ../src/ui/dialog/inkscape-preferences.cpp:1000
+#: ../src/ui/dialog/inkscape-preferences.cpp:990
+#: ../src/ui/dialog/inkscape-preferences.cpp:1011
 msgid "Origin Y:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:982
+#: ../src/ui/dialog/inkscape-preferences.cpp:993
 msgid "Spacing X:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:983
-#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:994
+#: ../src/ui/dialog/inkscape-preferences.cpp:1013
 msgid "Spacing Y:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:985
-#: ../src/ui/dialog/inkscape-preferences.cpp:986
-#: ../src/ui/dialog/inkscape-preferences.cpp:1007
-#: ../src/ui/dialog/inkscape-preferences.cpp:1008
+#: ../src/ui/dialog/inkscape-preferences.cpp:996
+#: ../src/ui/dialog/inkscape-preferences.cpp:997
+#: ../src/ui/dialog/inkscape-preferences.cpp:1018
+#: ../src/ui/dialog/inkscape-preferences.cpp:1019
 msgid "Grid line color:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:986
-#: ../src/ui/dialog/inkscape-preferences.cpp:1008
+#: ../src/ui/dialog/inkscape-preferences.cpp:997
+#: ../src/ui/dialog/inkscape-preferences.cpp:1019
 msgid "Color used for normal grid lines"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:987
-#: ../src/ui/dialog/inkscape-preferences.cpp:988
-#: ../src/ui/dialog/inkscape-preferences.cpp:1009
-#: ../src/ui/dialog/inkscape-preferences.cpp:1010
+#: ../src/ui/dialog/inkscape-preferences.cpp:998
+#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:1020
+#: ../src/ui/dialog/inkscape-preferences.cpp:1021
 msgid "Major grid line color:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:988
-#: ../src/ui/dialog/inkscape-preferences.cpp:1010
+#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:1021
 msgid "Color used for major (highlighted) grid lines"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:990
-#: ../src/ui/dialog/inkscape-preferences.cpp:1012
+#: ../src/ui/dialog/inkscape-preferences.cpp:1001
+#: ../src/ui/dialog/inkscape-preferences.cpp:1023
 msgid "Major grid line every:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:991
+#: ../src/ui/dialog/inkscape-preferences.cpp:1002
 msgid "Show dots instead of lines"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:992
+#: ../src/ui/dialog/inkscape-preferences.cpp:1003
 msgid "If set, display dots at gridpoints instead of gridlines"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1019
+#: ../src/ui/dialog/inkscape-preferences.cpp:1030
 msgid "Use named colors"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1020
+#: ../src/ui/dialog/inkscape-preferences.cpp:1031
 msgid ""
 "If set, write the CSS name of the color when available (e.g. 'red' or "
 "'magenta') instead of the numeric value"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1022
+#: ../src/ui/dialog/inkscape-preferences.cpp:1033
 msgid "XML formatting"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1024
+#: ../src/ui/dialog/inkscape-preferences.cpp:1035
 msgid "Inline attributes"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+#: ../src/ui/dialog/inkscape-preferences.cpp:1036
 msgid "Put attributes on the same line as the element tag"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+#: ../src/ui/dialog/inkscape-preferences.cpp:1039
 msgid "Indent, spaces:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+#: ../src/ui/dialog/inkscape-preferences.cpp:1039
 msgid ""
 "The number of spaces to use for indenting nested elements; set to 0 for no "
 "indentation"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1030
+#: ../src/ui/dialog/inkscape-preferences.cpp:1041
 msgid "Path data"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1032
+#: ../src/ui/dialog/inkscape-preferences.cpp:1043
 msgid "Allow relative coordinates"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1033
+#: ../src/ui/dialog/inkscape-preferences.cpp:1044
 msgid "If set, relative coordinates may be used in path data"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1035
+#: ../src/ui/dialog/inkscape-preferences.cpp:1046
 msgid "Force repeat commands"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1036
+#: ../src/ui/dialog/inkscape-preferences.cpp:1047
 msgid ""
 "Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead "
 "of 'L 1,2 3,4')"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1038
+#: ../src/ui/dialog/inkscape-preferences.cpp:1049
 msgid "Numbers"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1041
+#: ../src/ui/dialog/inkscape-preferences.cpp:1052
 msgid "Numeric precision:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1041
+#: ../src/ui/dialog/inkscape-preferences.cpp:1052
 msgid "How many digits to write after the decimal dot"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1044
+#: ../src/ui/dialog/inkscape-preferences.cpp:1055
 msgid "Minimum exponent:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1044
+#: ../src/ui/dialog/inkscape-preferences.cpp:1055
 msgid ""
 "The smallest number written to SVG is 10 to the power of this exponent; "
 "anything smaller is written as zero."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1046
+#: ../src/ui/dialog/inkscape-preferences.cpp:1057
 msgid "SVG output"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "System default"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Albanian (sq)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Amharic (am)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Arabic (ar)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Armenian (hy)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Azerbaijani (az)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Basque (eu)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Belarusian (be)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Bulgarian (bg)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Bengali (bn)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Breton (br)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Catalan (ca)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Valencian Catalan (ca@valencia)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Chinese/China (zh_CN)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1064
 msgid "Chinese/Taiwan (zh_TW)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1064
 msgid "Croatian (hr)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1064
 msgid "Czech (cs)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "Danish (da)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "Dutch (nl)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "Dzongkha (dz)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "German (de)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "Greek (el)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "English (en)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "English/Australia (en_AU)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1066
 msgid "English/Canada (en_CA)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1066
 msgid "English/Great Britain (en_GB)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1066
 msgid "Pig Latin (en_US@piglatin)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Esperanto (eo)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Estonian (et)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Finnish (fi)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "French (fr)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Irish (ga)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Galician (gl)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Hebrew (he)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Hungarian (hu)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Indonesian (id)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Italian (it)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Japanese (ja)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Khmer (km)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Kinyarwanda (rw)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Korean (ko)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Lithuanian (lt)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Macedonian (mk)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Mongolian (mn)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Nepali (ne)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Norwegian Bokmål (nb)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Norwegian Nynorsk (nn)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Panjabi (pa)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Polish (pl)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Portuguese (pt)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Portuguese/Brazil (pt_BR)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Romanian (ro)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Russian (ru)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Serbian (sr)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Serbian in Latin script (sr@latin)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Slovak (sk)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Slovenian (sl)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Spanish (es)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Spanish/Mexico (es_MX)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Swedish (sv)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Thai (th)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Turkish (tr)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Ukrainian (uk)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Vietnamese (vi)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1069
+#: ../src/ui/dialog/inkscape-preferences.cpp:1080
 msgid "Language (requires restart):"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1070
+#: ../src/ui/dialog/inkscape-preferences.cpp:1081
 msgid "Set the language for menus and number formats"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/ui/dialog/inkscape-preferences.cpp:1083
 msgid "Smaller"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1076
+#: ../src/ui/dialog/inkscape-preferences.cpp:1087
 msgid "Toolbox icon size"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1077
+#: ../src/ui/dialog/inkscape-preferences.cpp:1088
 msgid "Set the size for the tool icons (requires restart)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1080
+#: ../src/ui/dialog/inkscape-preferences.cpp:1091
 msgid "Control bar icon size"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1081
+#: ../src/ui/dialog/inkscape-preferences.cpp:1092
 msgid ""
 "Set the size for the icons in tools' control bars to use (requires restart)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1084
+#: ../src/ui/dialog/inkscape-preferences.cpp:1095
 msgid "Secondary toolbar icon size"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1085
+#: ../src/ui/dialog/inkscape-preferences.cpp:1096
 msgid ""
 "Set the size for the icons in secondary toolbars to use (requires restart)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1088
+#: ../src/ui/dialog/inkscape-preferences.cpp:1099
 msgid "Work-around color sliders not drawing."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1090
+#: ../src/ui/dialog/inkscape-preferences.cpp:1101
 msgid ""
 "When on, will attempt to work around bugs in certain GTK themes drawing "
 "color sliders."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1096
+#: ../src/ui/dialog/inkscape-preferences.cpp:1107
 msgid "Clear list"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1101
+#: ../src/ui/dialog/inkscape-preferences.cpp:1112
 msgid "Maximum documents in Open Recent:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1102
+#: ../src/ui/dialog/inkscape-preferences.cpp:1113
 msgid ""
 "Set the maximum length of the Open Recent list in the File menu, or clear "
 "the list"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1105
+#: ../src/ui/dialog/inkscape-preferences.cpp:1116
 msgid "Zoom correction factor (in %):"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1106
+#: ../src/ui/dialog/inkscape-preferences.cpp:1117
 msgid ""
 "Adjust the slider until the length of the ruler on your screen matches its "
 "real length. This information is used when zooming to 1:1, 1:2, etc., to "
 "display objects in their true sizes"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1108
+#: ../src/ui/dialog/inkscape-preferences.cpp:1119
 msgid "Interface"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1114
+#: ../src/ui/dialog/inkscape-preferences.cpp:1125
 msgid "Use current directory for \"Save As ...\""
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1116
+#: ../src/ui/dialog/inkscape-preferences.cpp:1127
 msgid ""
 "When this option is on, the \"Save as...\" dialog will always open in the "
 "directory where the currently open document is. When it's off, it will open "
@@ -13712,237 +13731,237 @@ msgid ""
 msgstr ""
 
 #. Autosave options
-#: ../src/ui/dialog/inkscape-preferences.cpp:1120
+#: ../src/ui/dialog/inkscape-preferences.cpp:1131
 msgid "Enable autosave (requires restart)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1121
+#: ../src/ui/dialog/inkscape-preferences.cpp:1132
 msgid ""
 "Automatically save the current document(s) at a given interval, thus "
 "minimizing loss in case of a crash"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1123
+#: ../src/ui/dialog/inkscape-preferences.cpp:1134
 msgid "Interval (in minutes):"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1123
+#: ../src/ui/dialog/inkscape-preferences.cpp:1134
 msgid "Interval (in minutes) at which document will be autosaved"
 msgstr ""
 
 #. TRANSLATORS: only translate "string" in "context|string".
 #. For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS
-#: ../src/ui/dialog/inkscape-preferences.cpp:1127
+#: ../src/ui/dialog/inkscape-preferences.cpp:1138
 msgid "filesystem|Path:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1127
+#: ../src/ui/dialog/inkscape-preferences.cpp:1138
 msgid "The directory where autosaves will be written"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1129
+#: ../src/ui/dialog/inkscape-preferences.cpp:1140
 msgid "Maximum number of autosaves:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1129
+#: ../src/ui/dialog/inkscape-preferences.cpp:1140
 msgid ""
 "Maximum number of autosaved files; use this to limit the storage space used"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
 msgid "2x2"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
 msgid "4x4"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
 msgid "8x8"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
 msgid "16x16"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1155
+#: ../src/ui/dialog/inkscape-preferences.cpp:1166
 msgid "Oversample bitmaps:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1158
+#: ../src/ui/dialog/inkscape-preferences.cpp:1169
 msgid "Automatically reload bitmaps"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1160
+#: ../src/ui/dialog/inkscape-preferences.cpp:1171
 msgid "Automatically reload linked images when file is changed on disk"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1174
+#: ../src/ui/dialog/inkscape-preferences.cpp:1185
 msgid "Bitmap editor:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1180
+#: ../src/ui/dialog/inkscape-preferences.cpp:1191
 msgid "Resolution for Create Bitmap Copy:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1181
+#: ../src/ui/dialog/inkscape-preferences.cpp:1192
 msgid "Resolution used by the Create Bitmap Copy command"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1183
+#: ../src/ui/dialog/inkscape-preferences.cpp:1194
 msgid "Bitmaps"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1235
+#: ../src/ui/dialog/inkscape-preferences.cpp:1246
 msgid "Language:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1236
+#: ../src/ui/dialog/inkscape-preferences.cpp:1247
 msgid "Set the main spell check language"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1239
+#: ../src/ui/dialog/inkscape-preferences.cpp:1250
 msgid "Second language:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1240
+#: ../src/ui/dialog/inkscape-preferences.cpp:1251
 msgid ""
 "Set the second spell check language; checking will only stop on words "
 "unknown in ALL chosen languages"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1243
+#: ../src/ui/dialog/inkscape-preferences.cpp:1254
 msgid "Third language:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1244
+#: ../src/ui/dialog/inkscape-preferences.cpp:1255
 msgid ""
 "Set the third spell check language; checking will only stop on words unknown "
 "in ALL chosen languages"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1246
+#: ../src/ui/dialog/inkscape-preferences.cpp:1257
 msgid "Ignore words with digits"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1248
+#: ../src/ui/dialog/inkscape-preferences.cpp:1259
 msgid "Ignore words containing digits, such as \"R2D2\""
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1250
+#: ../src/ui/dialog/inkscape-preferences.cpp:1261
 msgid "Ignore words in ALL CAPITALS"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1252
+#: ../src/ui/dialog/inkscape-preferences.cpp:1263
 msgid "Ignore words in all capitals, such as \"IUPAC\""
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1254
+#: ../src/ui/dialog/inkscape-preferences.cpp:1265
 msgid "Spellcheck"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1273
+#: ../src/ui/dialog/inkscape-preferences.cpp:1284
 msgid "Add label comments to printing output"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1275
+#: ../src/ui/dialog/inkscape-preferences.cpp:1286
 msgid ""
 "When on, a comment will be added to the raw print output, marking the "
 "rendered output for an object with its label"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1277
+#: ../src/ui/dialog/inkscape-preferences.cpp:1288
 msgid "Prevent sharing of gradient definitions"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1279
+#: ../src/ui/dialog/inkscape-preferences.cpp:1290
 msgid ""
 "When on, shared gradient definitions are automatically forked on change; "
 "uncheck to allow sharing of gradient definitions so that editing one object "
 "may affect other objects using the same gradient"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1282
+#: ../src/ui/dialog/inkscape-preferences.cpp:1293
 msgid "Simplification threshold:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1283
+#: ../src/ui/dialog/inkscape-preferences.cpp:1294
 msgid ""
 "How strong is the Node tool's Simplify command by default. If you invoke "
 "this command several times in quick succession, it will act more and more "
 "aggressively; invoking it again after a pause restores the default threshold."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1286
+#: ../src/ui/dialog/inkscape-preferences.cpp:1297
 msgid "Latency skew:"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1286
+#: ../src/ui/dialog/inkscape-preferences.cpp:1297
 msgid "(requires restart)"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1287
+#: ../src/ui/dialog/inkscape-preferences.cpp:1298
 msgid ""
 "Factor by which the event clock is skewed from the actual time (0.9766 on "
 "some systems)."
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1289
+#: ../src/ui/dialog/inkscape-preferences.cpp:1300
 msgid "Pre-render named icons"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1291
+#: ../src/ui/dialog/inkscape-preferences.cpp:1302
 msgid ""
 "When on, named icons will be rendered before displaying the ui. This is for "
 "working around bugs in GTK+ named icon notification"
 msgstr ""
 
 #. TRANSLATORS: following strings are paths in Inkscape preferences - Misc - System info
-#: ../src/ui/dialog/inkscape-preferences.cpp:1297
+#: ../src/ui/dialog/inkscape-preferences.cpp:1308
 msgid "User config: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1301
+#: ../src/ui/dialog/inkscape-preferences.cpp:1312
 msgid "User data: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1305
+#: ../src/ui/dialog/inkscape-preferences.cpp:1316
 msgid "User cache: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1309
+#: ../src/ui/dialog/inkscape-preferences.cpp:1320
 msgid "System config: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1312
+#: ../src/ui/dialog/inkscape-preferences.cpp:1323
 msgid "System data: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1315
+#: ../src/ui/dialog/inkscape-preferences.cpp:1326
 msgid "PIXMAP: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1319
+#: ../src/ui/dialog/inkscape-preferences.cpp:1330
 msgid "DATA: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1323
+#: ../src/ui/dialog/inkscape-preferences.cpp:1334
 msgid "UI: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1332
+#: ../src/ui/dialog/inkscape-preferences.cpp:1343
 msgid "Icon theme: "
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1347
+#: ../src/ui/dialog/inkscape-preferences.cpp:1358
 msgid "System info"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1347
+#: ../src/ui/dialog/inkscape-preferences.cpp:1358
 msgid "General system information"
 msgstr ""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1349
+#: ../src/ui/dialog/inkscape-preferences.cpp:1360
 msgid "Misc"
 msgstr ""
 
@@ -14651,8 +14670,8 @@ msgstr ""
 
 #. # end multiple scan
 #. ## end mode page
-#: ../src/ui/dialog/tracedialog.cpp:563 ../src/widgets/toolbox.cpp:4249
-#: ../share/extensions/triangle.inx.h:9
+#: ../src/ui/dialog/tracedialog.cpp:563 ../src/widgets/toolbox.cpp:4276
+#: ../src/widgets/toolbox.cpp:4544 ../share/extensions/triangle.inx.h:9
 msgid "Mode"
 msgstr ""
 
@@ -14902,37 +14921,37 @@ msgstr ""
 msgid "Edit transformation matrix"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:330 ../src/ui/view/edit-widget.cpp:335
-#: ../src/ui/view/edit-widget.cpp:343 ../src/ui/view/edit-widget.cpp:348
-#: ../src/ui/view/edit-widget.cpp:353 ../src/ui/view/edit-widget.cpp:368
-#: ../src/ui/view/edit-widget.cpp:381 ../src/ui/view/edit-widget.cpp:386
-#: ../src/ui/view/edit-widget.cpp:400 ../src/ui/view/edit-widget.cpp:404
-#: ../src/ui/view/edit-widget.cpp:412 ../src/ui/view/edit-widget.cpp:416
-#: ../src/ui/view/edit-widget.cpp:420 ../src/ui/view/edit-widget.cpp:756
-#: ../src/ui/view/edit-widget.cpp:761 ../src/ui/view/edit-widget.cpp:867
-#: ../src/ui/view/edit-widget.cpp:871 ../src/ui/view/edit-widget.cpp:992
+#: ../src/ui/view/edit-widget.cpp:336 ../src/ui/view/edit-widget.cpp:341
+#: ../src/ui/view/edit-widget.cpp:349 ../src/ui/view/edit-widget.cpp:354
+#: ../src/ui/view/edit-widget.cpp:359 ../src/ui/view/edit-widget.cpp:374
+#: ../src/ui/view/edit-widget.cpp:387 ../src/ui/view/edit-widget.cpp:392
+#: ../src/ui/view/edit-widget.cpp:406 ../src/ui/view/edit-widget.cpp:410
+#: ../src/ui/view/edit-widget.cpp:418 ../src/ui/view/edit-widget.cpp:422
+#: ../src/ui/view/edit-widget.cpp:426 ../src/ui/view/edit-widget.cpp:762
+#: ../src/ui/view/edit-widget.cpp:767 ../src/ui/view/edit-widget.cpp:873
+#: ../src/ui/view/edit-widget.cpp:877 ../src/ui/view/edit-widget.cpp:998
 msgid "PLACEHOLDER, do not translate"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1051 ../src/widgets/desktop-widget.cpp:379
+#: ../src/ui/view/edit-widget.cpp:1057 ../src/widgets/desktop-widget.cpp:379
 msgid "Zoom drawing if window size changes"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1072 ../src/widgets/desktop-widget.cpp:503
+#: ../src/ui/view/edit-widget.cpp:1078 ../src/widgets/desktop-widget.cpp:503
 msgid "Cursor coordinates"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1082 ../src/widgets/desktop-widget.cpp:518
+#: ../src/ui/view/edit-widget.cpp:1088 ../src/widgets/desktop-widget.cpp:518
 msgid "Z:"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1089
+#: ../src/ui/view/edit-widget.cpp:1095
 msgid ""
 "<b>Welcome to Inkscape!</b> Use shape or drawing tools to create objects; "
 "use selector (arrow) to move or transform them."
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1200 ../src/widgets/desktop-widget.cpp:838
+#: ../src/ui/view/edit-widget.cpp:1206 ../src/widgets/desktop-widget.cpp:838
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">Save changes to document \"%s\" before "
@@ -14941,12 +14960,12 @@ msgid ""
 "If you close without saving, your changes will be discarded."
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1211 ../src/ui/view/edit-widget.cpp:1259
+#: ../src/ui/view/edit-widget.cpp:1217 ../src/ui/view/edit-widget.cpp:1265
 #: ../src/widgets/desktop-widget.cpp:845 ../src/widgets/desktop-widget.cpp:902
 msgid "Close _without saving"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1247 ../src/widgets/desktop-widget.cpp:894
+#: ../src/ui/view/edit-widget.cpp:1253 ../src/widgets/desktop-widget.cpp:894
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">The file \"%s\" was saved with a "
@@ -14955,7 +14974,7 @@ msgid ""
 "Do you want to save this file as an Inkscape SVG?"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1262 ../src/widgets/desktop-widget.cpp:905
+#: ../src/ui/view/edit-widget.cpp:1268 ../src/widgets/desktop-widget.cpp:905
 msgid "_Save as SVG"
 msgstr ""
 
@@ -15669,1519 +15688,1539 @@ msgstr ""
 #. TRANSLATORS: If you have translated the tutorial-basic.svg file to your language,
 #. then translate this string as "tutorial-basic.LANG.svg" (where LANG is your language
 #. code); otherwise leave as "tutorial-basic.svg".
-#: ../src/verbs.cpp:1912
+#: ../src/verbs.cpp:1922
 msgid "tutorial-basic.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1916
+#: ../src/verbs.cpp:1926
 msgid "tutorial-shapes.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1920
+#: ../src/verbs.cpp:1930
 msgid "tutorial-advanced.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1924
+#: ../src/verbs.cpp:1934
 msgid "tutorial-tracing.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1928
+#: ../src/verbs.cpp:1938
 msgid "tutorial-calligraphy.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1932
+#: ../src/verbs.cpp:1942
 msgid "tutorial-elements.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1936
+#: ../src/verbs.cpp:1946
 msgid "tutorial-tips.svg"
 msgstr ""
 
-#: ../src/verbs.cpp:2212 ../src/verbs.cpp:2731
+#: ../src/verbs.cpp:2222 ../src/verbs.cpp:2747
 msgid "Unlock all objects in the current layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2216 ../src/verbs.cpp:2733
+#: ../src/verbs.cpp:2226 ../src/verbs.cpp:2749
 msgid "Unlock all objects in all layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2220 ../src/verbs.cpp:2735
+#: ../src/verbs.cpp:2230 ../src/verbs.cpp:2751
 msgid "Unhide all objects in the current layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2224 ../src/verbs.cpp:2737
+#: ../src/verbs.cpp:2234 ../src/verbs.cpp:2753
 msgid "Unhide all objects in all layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2239
+#: ../src/verbs.cpp:2249
 msgid "Does nothing"
 msgstr ""
 
-#: ../src/verbs.cpp:2242
+#: ../src/verbs.cpp:2252
 msgid "Create new document from the default template"
 msgstr ""
 
-#: ../src/verbs.cpp:2244
+#: ../src/verbs.cpp:2254
 msgid "_Open..."
 msgstr ""
 
-#: ../src/verbs.cpp:2245
+#: ../src/verbs.cpp:2255
 msgid "Open an existing document"
 msgstr ""
 
-#: ../src/verbs.cpp:2246
+#: ../src/verbs.cpp:2256
 msgid "Re_vert"
 msgstr ""
 
-#: ../src/verbs.cpp:2247
+#: ../src/verbs.cpp:2257
 msgid "Revert to the last saved version of document (changes will be lost)"
 msgstr ""
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2258
 msgid "_Save"
 msgstr ""
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2258
 msgid "Save document"
 msgstr ""
 
-#: ../src/verbs.cpp:2250
+#: ../src/verbs.cpp:2260
 msgid "Save _As..."
 msgstr ""
 
-#: ../src/verbs.cpp:2251
+#: ../src/verbs.cpp:2261
 msgid "Save document under a new name"
 msgstr ""
 
-#: ../src/verbs.cpp:2252
+#: ../src/verbs.cpp:2262
 msgid "Save a Cop_y..."
 msgstr ""
 
-#: ../src/verbs.cpp:2253
+#: ../src/verbs.cpp:2263
 msgid "Save a copy of the document under a new name"
 msgstr ""
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2264
 msgid "_Print..."
 msgstr ""
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2264
 msgid "Print document"
 msgstr ""
 
 #. TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions)
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2267
 msgid "Vac_uum Defs"
 msgstr ""
 
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2267
 msgid ""
 "Remove unused definitions (such as gradients or clipping paths) from the &lt;"
 "defs&gt; of the document"
 msgstr ""
 
-#: ../src/verbs.cpp:2259
+#: ../src/verbs.cpp:2269
 msgid "Print Previe_w"
 msgstr ""
 
-#: ../src/verbs.cpp:2260
+#: ../src/verbs.cpp:2270
 msgid "Preview document printout"
 msgstr ""
 
-#: ../src/verbs.cpp:2261
+#: ../src/verbs.cpp:2271
 msgid "_Import..."
 msgstr ""
 
-#: ../src/verbs.cpp:2262
+#: ../src/verbs.cpp:2272
 msgid "Import a bitmap or SVG image into this document"
 msgstr ""
 
-#: ../src/verbs.cpp:2263
+#: ../src/verbs.cpp:2273
 msgid "_Export Bitmap..."
 msgstr ""
 
-#: ../src/verbs.cpp:2264
+#: ../src/verbs.cpp:2274
 msgid "Export this document or a selection as a bitmap image"
 msgstr ""
 
-#: ../src/verbs.cpp:2265
+#: ../src/verbs.cpp:2275
 msgid "Import a document from Open Clip Art Library"
 msgstr ""
 
 #. new FileVerb(SP_VERB_FILE_EXPORT_TO_OCAL, "FileExportToOCAL", N_("Export To Open Clip Art Library"), N_("Export this document to Open Clip Art Library"), INKSCAPE_ICON_DOCUMENT_EXPORT_OCAL),
-#: ../src/verbs.cpp:2267
+#: ../src/verbs.cpp:2277
 msgid "N_ext Window"
 msgstr ""
 
-#: ../src/verbs.cpp:2268
+#: ../src/verbs.cpp:2278
 msgid "Switch to the next document window"
 msgstr ""
 
-#: ../src/verbs.cpp:2269
+#: ../src/verbs.cpp:2279
 msgid "P_revious Window"
 msgstr ""
 
-#: ../src/verbs.cpp:2270
+#: ../src/verbs.cpp:2280
 msgid "Switch to the previous document window"
 msgstr ""
 
-#: ../src/verbs.cpp:2271
+#: ../src/verbs.cpp:2281
 msgid "_Close"
 msgstr ""
 
-#: ../src/verbs.cpp:2272
+#: ../src/verbs.cpp:2282
 msgid "Close this document window"
 msgstr ""
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2283
 msgid "_Quit"
 msgstr ""
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2283
 msgid "Quit Inkscape"
 msgstr ""
 
-#: ../src/verbs.cpp:2276
+#: ../src/verbs.cpp:2286
 msgid "Undo last action"
 msgstr ""
 
-#: ../src/verbs.cpp:2279
+#: ../src/verbs.cpp:2289
 msgid "Do again the last undone action"
 msgstr ""
 
-#: ../src/verbs.cpp:2280
+#: ../src/verbs.cpp:2290
 msgid "Cu_t"
 msgstr ""
 
-#: ../src/verbs.cpp:2281
+#: ../src/verbs.cpp:2291
 msgid "Cut selection to clipboard"
 msgstr ""
 
-#: ../src/verbs.cpp:2282
+#: ../src/verbs.cpp:2292
 msgid "_Copy"
 msgstr ""
 
-#: ../src/verbs.cpp:2283
+#: ../src/verbs.cpp:2293
 msgid "Copy selection to clipboard"
 msgstr ""
 
-#: ../src/verbs.cpp:2284
+#: ../src/verbs.cpp:2294
 msgid "_Paste"
 msgstr ""
 
-#: ../src/verbs.cpp:2285
+#: ../src/verbs.cpp:2295
 msgid "Paste objects from clipboard to mouse point, or paste text"
 msgstr ""
 
-#: ../src/verbs.cpp:2286
+#: ../src/verbs.cpp:2296
 msgid "Paste _Style"
 msgstr ""
 
-#: ../src/verbs.cpp:2287
+#: ../src/verbs.cpp:2297
 msgid "Apply the style of the copied object to selection"
 msgstr ""
 
-#: ../src/verbs.cpp:2289
+#: ../src/verbs.cpp:2299
 msgid "Scale selection to match the size of the copied object"
 msgstr ""
 
-#: ../src/verbs.cpp:2290
+#: ../src/verbs.cpp:2300
 msgid "Paste _Width"
 msgstr ""
 
-#: ../src/verbs.cpp:2291
+#: ../src/verbs.cpp:2301
 msgid "Scale selection horizontally to match the width of the copied object"
 msgstr ""
 
-#: ../src/verbs.cpp:2292
+#: ../src/verbs.cpp:2302
 msgid "Paste _Height"
 msgstr ""
 
-#: ../src/verbs.cpp:2293
+#: ../src/verbs.cpp:2303
 msgid "Scale selection vertically to match the height of the copied object"
 msgstr ""
 
-#: ../src/verbs.cpp:2294
+#: ../src/verbs.cpp:2304
 msgid "Paste Size Separately"
 msgstr ""
 
-#: ../src/verbs.cpp:2295
+#: ../src/verbs.cpp:2305
 msgid "Scale each selected object to match the size of the copied object"
 msgstr ""
 
-#: ../src/verbs.cpp:2296
+#: ../src/verbs.cpp:2306
 msgid "Paste Width Separately"
 msgstr ""
 
-#: ../src/verbs.cpp:2297
+#: ../src/verbs.cpp:2307
 msgid ""
 "Scale each selected object horizontally to match the width of the copied "
 "object"
 msgstr ""
 
-#: ../src/verbs.cpp:2298
+#: ../src/verbs.cpp:2308
 msgid "Paste Height Separately"
 msgstr ""
 
-#: ../src/verbs.cpp:2299
+#: ../src/verbs.cpp:2309
 msgid ""
 "Scale each selected object vertically to match the height of the copied "
 "object"
 msgstr ""
 
-#: ../src/verbs.cpp:2300
+#: ../src/verbs.cpp:2310
 msgid "Paste _In Place"
 msgstr ""
 
-#: ../src/verbs.cpp:2301
+#: ../src/verbs.cpp:2311
 msgid "Paste objects from clipboard to the original location"
 msgstr ""
 
-#: ../src/verbs.cpp:2302
+#: ../src/verbs.cpp:2312
 msgid "Paste Path _Effect"
 msgstr ""
 
-#: ../src/verbs.cpp:2303
+#: ../src/verbs.cpp:2313
 msgid "Apply the path effect of the copied object to selection"
 msgstr ""
 
-#: ../src/verbs.cpp:2304
+#: ../src/verbs.cpp:2314
 msgid "Remove Path _Effect"
 msgstr ""
 
-#: ../src/verbs.cpp:2305
+#: ../src/verbs.cpp:2315
 msgid "Remove any path effects from selected objects"
 msgstr ""
 
-#: ../src/verbs.cpp:2306
+#: ../src/verbs.cpp:2316
 msgid "Remove Filters"
 msgstr ""
 
-#: ../src/verbs.cpp:2307
+#: ../src/verbs.cpp:2317
 msgid "Remove any filters from selected objects"
 msgstr ""
 
-#: ../src/verbs.cpp:2308
+#: ../src/verbs.cpp:2318
 msgid "_Delete"
 msgstr ""
 
-#: ../src/verbs.cpp:2309
+#: ../src/verbs.cpp:2319
 msgid "Delete selection"
 msgstr ""
 
-#: ../src/verbs.cpp:2310
+#: ../src/verbs.cpp:2320
 msgid "Duplic_ate"
 msgstr ""
 
-#: ../src/verbs.cpp:2311
+#: ../src/verbs.cpp:2321
 msgid "Duplicate selected objects"
 msgstr ""
 
-#: ../src/verbs.cpp:2312
+#: ../src/verbs.cpp:2322
 msgid "Create Clo_ne"
 msgstr ""
 
-#: ../src/verbs.cpp:2313
+#: ../src/verbs.cpp:2323
 msgid "Create a clone (a copy linked to the original) of selected object"
 msgstr ""
 
-#: ../src/verbs.cpp:2314
+#: ../src/verbs.cpp:2324
 msgid "Unlin_k Clone"
 msgstr ""
 
-#: ../src/verbs.cpp:2315
+#: ../src/verbs.cpp:2325
 msgid ""
 "Cut the selected clones' links to the originals, turning them into "
 "standalone objects"
 msgstr ""
 
-#: ../src/verbs.cpp:2316
+#: ../src/verbs.cpp:2326
 msgid "Relink to Copied"
 msgstr ""
 
-#: ../src/verbs.cpp:2317
+#: ../src/verbs.cpp:2327
 msgid "Relink the selected clones to the object currently on the clipboard"
 msgstr ""
 
-#: ../src/verbs.cpp:2318
+#: ../src/verbs.cpp:2328
 msgid "Select _Original"
 msgstr ""
 
-#: ../src/verbs.cpp:2319
+#: ../src/verbs.cpp:2329
 msgid "Select the object to which the selected clone is linked"
 msgstr ""
 
-#: ../src/verbs.cpp:2320
+#: ../src/verbs.cpp:2330
 msgid "Objects to _Marker"
 msgstr ""
 
-#: ../src/verbs.cpp:2321
+#: ../src/verbs.cpp:2331
 msgid "Convert selection to a line marker"
 msgstr ""
 
-#: ../src/verbs.cpp:2322
+#: ../src/verbs.cpp:2332
 msgid "Objects to Gu_ides"
 msgstr ""
 
-#: ../src/verbs.cpp:2323
+#: ../src/verbs.cpp:2333
 msgid ""
 "Convert selected objects to a collection of guidelines aligned with their "
 "edges"
 msgstr ""
 
-#: ../src/verbs.cpp:2324
+#: ../src/verbs.cpp:2334
 msgid "Objects to Patter_n"
 msgstr ""
 
-#: ../src/verbs.cpp:2325
+#: ../src/verbs.cpp:2335
 msgid "Convert selection to a rectangle with tiled pattern fill"
 msgstr ""
 
-#: ../src/verbs.cpp:2326
+#: ../src/verbs.cpp:2336
 msgid "Pattern to _Objects"
 msgstr ""
 
-#: ../src/verbs.cpp:2327
+#: ../src/verbs.cpp:2337
 msgid "Extract objects from a tiled pattern fill"
 msgstr ""
 
-#: ../src/verbs.cpp:2328
+#: ../src/verbs.cpp:2338
 msgid "Clea_r All"
 msgstr ""
 
-#: ../src/verbs.cpp:2329
+#: ../src/verbs.cpp:2339
 msgid "Delete all objects from document"
 msgstr ""
 
-#: ../src/verbs.cpp:2330
+#: ../src/verbs.cpp:2340
 msgid "Select Al_l"
 msgstr ""
 
-#: ../src/verbs.cpp:2331
+#: ../src/verbs.cpp:2341
 msgid "Select all objects or all nodes"
 msgstr ""
 
-#: ../src/verbs.cpp:2332
+#: ../src/verbs.cpp:2342
 msgid "Select All in All La_yers"
 msgstr ""
 
-#: ../src/verbs.cpp:2333
+#: ../src/verbs.cpp:2343
 msgid "Select all objects in all visible and unlocked layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2334
+#: ../src/verbs.cpp:2344
 msgid "In_vert Selection"
 msgstr ""
 
-#: ../src/verbs.cpp:2335
+#: ../src/verbs.cpp:2345
 msgid "Invert selection (unselect what is selected and select everything else)"
 msgstr ""
 
-#: ../src/verbs.cpp:2336
+#: ../src/verbs.cpp:2346
 msgid "Invert in All Layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2337
+#: ../src/verbs.cpp:2347
 msgid "Invert selection in all visible and unlocked layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2338
+#: ../src/verbs.cpp:2348
 msgid "Select Next"
 msgstr ""
 
-#: ../src/verbs.cpp:2339
+#: ../src/verbs.cpp:2349
 msgid "Select next object or node"
 msgstr ""
 
-#: ../src/verbs.cpp:2340
+#: ../src/verbs.cpp:2350
 msgid "Select Previous"
 msgstr ""
 
-#: ../src/verbs.cpp:2341
+#: ../src/verbs.cpp:2351
 msgid "Select previous object or node"
 msgstr ""
 
-#: ../src/verbs.cpp:2342
+#: ../src/verbs.cpp:2352
 msgid "D_eselect"
 msgstr ""
 
-#: ../src/verbs.cpp:2343
+#: ../src/verbs.cpp:2353
 msgid "Deselect any selected objects or nodes"
 msgstr ""
 
-#: ../src/verbs.cpp:2344
+#: ../src/verbs.cpp:2354
 msgid "_Guides Around Page"
 msgstr ""
 
-#: ../src/verbs.cpp:2345
+#: ../src/verbs.cpp:2355
 msgid "Create four guides aligned with the page borders"
 msgstr ""
 
-#: ../src/verbs.cpp:2346
+#: ../src/verbs.cpp:2356
 msgid "Next Path Effect Parameter"
 msgstr ""
 
-#: ../src/verbs.cpp:2347
+#: ../src/verbs.cpp:2357
 msgid "Show next Path Effect parameter for editing"
 msgstr ""
 
 #. Selection
-#: ../src/verbs.cpp:2350
+#: ../src/verbs.cpp:2360
 msgid "Raise to _Top"
 msgstr ""
 
-#: ../src/verbs.cpp:2351
+#: ../src/verbs.cpp:2361
 msgid "Raise selection to top"
 msgstr ""
 
-#: ../src/verbs.cpp:2352
+#: ../src/verbs.cpp:2362
 msgid "Lower to _Bottom"
 msgstr ""
 
-#: ../src/verbs.cpp:2353
+#: ../src/verbs.cpp:2363
 msgid "Lower selection to bottom"
 msgstr ""
 
-#: ../src/verbs.cpp:2354
+#: ../src/verbs.cpp:2364
 msgid "_Raise"
 msgstr ""
 
-#: ../src/verbs.cpp:2355
+#: ../src/verbs.cpp:2365
 msgid "Raise selection one step"
 msgstr ""
 
-#: ../src/verbs.cpp:2356
+#: ../src/verbs.cpp:2366
 msgid "_Lower"
 msgstr ""
 
-#: ../src/verbs.cpp:2357
+#: ../src/verbs.cpp:2367
 msgid "Lower selection one step"
 msgstr ""
 
-#: ../src/verbs.cpp:2358
+#: ../src/verbs.cpp:2368
 msgid "_Group"
 msgstr ""
 
-#: ../src/verbs.cpp:2359
+#: ../src/verbs.cpp:2369
 msgid "Group selected objects"
 msgstr ""
 
-#: ../src/verbs.cpp:2361
+#: ../src/verbs.cpp:2371
 msgid "Ungroup selected groups"
 msgstr ""
 
-#: ../src/verbs.cpp:2363
+#: ../src/verbs.cpp:2373
 msgid "_Put on Path"
 msgstr ""
 
-#: ../src/verbs.cpp:2365
+#: ../src/verbs.cpp:2375
 msgid "_Remove from Path"
 msgstr ""
 
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2377
 msgid "Remove Manual _Kerns"
 msgstr ""
 
 #. TRANSLATORS: "glyph": An image used in the visual representation of characters;
 #. roughly speaking, how a character looks. A font is a set of glyphs.
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2380
 msgid "Remove all manual kerns and glyph rotations from a text object"
 msgstr ""
 
-#: ../src/verbs.cpp:2372
+#: ../src/verbs.cpp:2382
 msgid "_Union"
 msgstr ""
 
-#: ../src/verbs.cpp:2373
+#: ../src/verbs.cpp:2383
 msgid "Create union of selected paths"
 msgstr ""
 
-#: ../src/verbs.cpp:2374
+#: ../src/verbs.cpp:2384
 msgid "_Intersection"
 msgstr ""
 
-#: ../src/verbs.cpp:2375
+#: ../src/verbs.cpp:2385
 msgid "Create intersection of selected paths"
 msgstr ""
 
-#: ../src/verbs.cpp:2376
+#: ../src/verbs.cpp:2386
 msgid "_Difference"
 msgstr ""
 
-#: ../src/verbs.cpp:2377
+#: ../src/verbs.cpp:2387
 msgid "Create difference of selected paths (bottom minus top)"
 msgstr ""
 
-#: ../src/verbs.cpp:2378
+#: ../src/verbs.cpp:2388
 msgid "E_xclusion"
 msgstr ""
 
-#: ../src/verbs.cpp:2379
+#: ../src/verbs.cpp:2389
 msgid ""
 "Create exclusive OR of selected paths (those parts that belong to only one "
 "path)"
 msgstr ""
 
-#: ../src/verbs.cpp:2380
+#: ../src/verbs.cpp:2390
 msgid "Di_vision"
 msgstr ""
 
-#: ../src/verbs.cpp:2381
+#: ../src/verbs.cpp:2391
 msgid "Cut the bottom path into pieces"
 msgstr ""
 
 #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
 #. Advanced tutorial for more info
-#: ../src/verbs.cpp:2384
+#: ../src/verbs.cpp:2394
 msgid "Cut _Path"
 msgstr ""
 
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2395
 msgid "Cut the bottom path's stroke into pieces, removing fill"
 msgstr ""
 
 #. TRANSLATORS: "outset": expand a shape by offsetting the object's path,
 #. i.e. by displacing it perpendicular to the path in each point.
 #. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2389
+#: ../src/verbs.cpp:2399
 msgid "Outs_et"
 msgstr ""
 
-#: ../src/verbs.cpp:2390
+#: ../src/verbs.cpp:2400
 msgid "Outset selected paths"
 msgstr ""
 
-#: ../src/verbs.cpp:2392
+#: ../src/verbs.cpp:2402
 msgid "O_utset Path by 1 px"
 msgstr ""
 
-#: ../src/verbs.cpp:2393
+#: ../src/verbs.cpp:2403
 msgid "Outset selected paths by 1 px"
 msgstr ""
 
-#: ../src/verbs.cpp:2395
+#: ../src/verbs.cpp:2405
 msgid "O_utset Path by 10 px"
 msgstr ""
 
-#: ../src/verbs.cpp:2396
+#: ../src/verbs.cpp:2406
 msgid "Outset selected paths by 10 px"
 msgstr ""
 
 #. TRANSLATORS: "inset": contract a shape by offsetting the object's path,
 #. i.e. by displacing it perpendicular to the path in each point.
 #. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2400
+#: ../src/verbs.cpp:2410
 msgid "I_nset"
 msgstr ""
 
-#: ../src/verbs.cpp:2401
+#: ../src/verbs.cpp:2411
 msgid "Inset selected paths"
 msgstr ""
 
-#: ../src/verbs.cpp:2403
+#: ../src/verbs.cpp:2413
 msgid "I_nset Path by 1 px"
 msgstr ""
 
-#: ../src/verbs.cpp:2404
+#: ../src/verbs.cpp:2414
 msgid "Inset selected paths by 1 px"
 msgstr ""
 
-#: ../src/verbs.cpp:2406
+#: ../src/verbs.cpp:2416
 msgid "I_nset Path by 10 px"
 msgstr ""
 
-#: ../src/verbs.cpp:2407
+#: ../src/verbs.cpp:2417
 msgid "Inset selected paths by 10 px"
 msgstr ""
 
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2419
 msgid "D_ynamic Offset"
 msgstr ""
 
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2419
 msgid "Create a dynamic offset object"
 msgstr ""
 
-#: ../src/verbs.cpp:2411
+#: ../src/verbs.cpp:2421
 msgid "_Linked Offset"
 msgstr ""
 
-#: ../src/verbs.cpp:2412
+#: ../src/verbs.cpp:2422
 msgid "Create a dynamic offset object linked to the original path"
 msgstr ""
 
-#: ../src/verbs.cpp:2414
+#: ../src/verbs.cpp:2424
 msgid "_Stroke to Path"
 msgstr ""
 
-#: ../src/verbs.cpp:2415
+#: ../src/verbs.cpp:2425
 msgid "Convert selected object's stroke to paths"
 msgstr ""
 
-#: ../src/verbs.cpp:2416
+#: ../src/verbs.cpp:2426
 msgid "Si_mplify"
 msgstr ""
 
-#: ../src/verbs.cpp:2417
+#: ../src/verbs.cpp:2427
 msgid "Simplify selected paths (remove extra nodes)"
 msgstr ""
 
-#: ../src/verbs.cpp:2418
+#: ../src/verbs.cpp:2428
 msgid "_Reverse"
 msgstr ""
 
-#: ../src/verbs.cpp:2419
+#: ../src/verbs.cpp:2429
 msgid "Reverse the direction of selected paths (useful for flipping markers)"
 msgstr ""
 
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2421
+#: ../src/verbs.cpp:2431
 msgid "_Trace Bitmap..."
 msgstr ""
 
-#: ../src/verbs.cpp:2422
+#: ../src/verbs.cpp:2432
 msgid "Create one or more paths from a bitmap by tracing it"
 msgstr ""
 
-#: ../src/verbs.cpp:2423
+#: ../src/verbs.cpp:2433
 msgid "_Make a Bitmap Copy"
 msgstr ""
 
-#: ../src/verbs.cpp:2424
+#: ../src/verbs.cpp:2434
 msgid "Export selection to a bitmap and insert it into document"
 msgstr ""
 
-#: ../src/verbs.cpp:2425
+#: ../src/verbs.cpp:2435
 msgid "_Combine"
 msgstr ""
 
-#: ../src/verbs.cpp:2426
+#: ../src/verbs.cpp:2436
 msgid "Combine several paths into one"
 msgstr ""
 
 #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
 #. Advanced tutorial for more info
-#: ../src/verbs.cpp:2429
+#: ../src/verbs.cpp:2439
 msgid "Break _Apart"
 msgstr ""
 
-#: ../src/verbs.cpp:2430
+#: ../src/verbs.cpp:2440
 msgid "Break selected paths into subpaths"
 msgstr ""
 
-#: ../src/verbs.cpp:2431
+#: ../src/verbs.cpp:2441
 msgid "Rows and Columns..."
 msgstr ""
 
-#: ../src/verbs.cpp:2432
+#: ../src/verbs.cpp:2442
 msgid "Arrange selected objects in a table"
 msgstr ""
 
 #. Layer
-#: ../src/verbs.cpp:2434
+#: ../src/verbs.cpp:2444
 msgid "_Add Layer..."
 msgstr ""
 
-#: ../src/verbs.cpp:2435
+#: ../src/verbs.cpp:2445
 msgid "Create a new layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2436
+#: ../src/verbs.cpp:2446
 msgid "Re_name Layer..."
 msgstr ""
 
-#: ../src/verbs.cpp:2437
+#: ../src/verbs.cpp:2447
 msgid "Rename the current layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2438
+#: ../src/verbs.cpp:2448
 msgid "Switch to Layer Abov_e"
 msgstr ""
 
-#: ../src/verbs.cpp:2439
+#: ../src/verbs.cpp:2449
 msgid "Switch to the layer above the current"
 msgstr ""
 
-#: ../src/verbs.cpp:2440
+#: ../src/verbs.cpp:2450
 msgid "Switch to Layer Belo_w"
 msgstr ""
 
-#: ../src/verbs.cpp:2441
+#: ../src/verbs.cpp:2451
 msgid "Switch to the layer below the current"
 msgstr ""
 
-#: ../src/verbs.cpp:2442
+#: ../src/verbs.cpp:2452
 msgid "Move Selection to Layer Abo_ve"
 msgstr ""
 
-#: ../src/verbs.cpp:2443
+#: ../src/verbs.cpp:2453
 msgid "Move selection to the layer above the current"
 msgstr ""
 
-#: ../src/verbs.cpp:2444
+#: ../src/verbs.cpp:2454
 msgid "Move Selection to Layer Bel_ow"
 msgstr ""
 
-#: ../src/verbs.cpp:2445
+#: ../src/verbs.cpp:2455
 msgid "Move selection to the layer below the current"
 msgstr ""
 
-#: ../src/verbs.cpp:2446
+#: ../src/verbs.cpp:2456
 msgid "Layer to _Top"
 msgstr ""
 
-#: ../src/verbs.cpp:2447
+#: ../src/verbs.cpp:2457
 msgid "Raise the current layer to the top"
 msgstr ""
 
-#: ../src/verbs.cpp:2448
+#: ../src/verbs.cpp:2458
 msgid "Layer to _Bottom"
 msgstr ""
 
-#: ../src/verbs.cpp:2449
+#: ../src/verbs.cpp:2459
 msgid "Lower the current layer to the bottom"
 msgstr ""
 
-#: ../src/verbs.cpp:2450
+#: ../src/verbs.cpp:2460
 msgid "_Raise Layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2451
+#: ../src/verbs.cpp:2461
 msgid "Raise the current layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2452
+#: ../src/verbs.cpp:2462
 msgid "_Lower Layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2453
+#: ../src/verbs.cpp:2463
 msgid "Lower the current layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2454
+#: ../src/verbs.cpp:2464
 msgid "Duplicate Current Layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2455
+#: ../src/verbs.cpp:2465
 msgid "Duplicate an existing layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2456
+#: ../src/verbs.cpp:2466
 msgid "_Delete Current Layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2457
+#: ../src/verbs.cpp:2467
 msgid "Delete the current layer"
 msgstr ""
 
-#: ../src/verbs.cpp:2458
+#: ../src/verbs.cpp:2468
 msgid "_Show/hide other layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2459
+#: ../src/verbs.cpp:2469
 msgid "Solo the current layer"
 msgstr ""
 
 #. Object
-#: ../src/verbs.cpp:2462
+#: ../src/verbs.cpp:2472
 msgid "Rotate _90&#176; CW"
 msgstr ""
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2465
+#: ../src/verbs.cpp:2475
 msgid "Rotate selection 90° clockwise"
 msgstr ""
 
-#: ../src/verbs.cpp:2466
+#: ../src/verbs.cpp:2476
 msgid "Rotate 9_0&#176; CCW"
 msgstr ""
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2469
+#: ../src/verbs.cpp:2479
 msgid "Rotate selection 90° counter-clockwise"
 msgstr ""
 
-#: ../src/verbs.cpp:2470
+#: ../src/verbs.cpp:2480
 msgid "Remove _Transformations"
 msgstr ""
 
-#: ../src/verbs.cpp:2471
+#: ../src/verbs.cpp:2481
 msgid "Remove transformations from object"
 msgstr ""
 
-#: ../src/verbs.cpp:2472
+#: ../src/verbs.cpp:2482
 msgid "_Object to Path"
 msgstr ""
 
-#: ../src/verbs.cpp:2473
+#: ../src/verbs.cpp:2483
 msgid "Convert selected object to path"
 msgstr ""
 
-#: ../src/verbs.cpp:2474
+#: ../src/verbs.cpp:2484
 msgid "_Flow into Frame"
 msgstr ""
 
-#: ../src/verbs.cpp:2475
+#: ../src/verbs.cpp:2485
 msgid ""
 "Put text into a frame (path or shape), creating a flowed text linked to the "
 "frame object"
 msgstr ""
 
-#: ../src/verbs.cpp:2476
+#: ../src/verbs.cpp:2486
 msgid "_Unflow"
 msgstr ""
 
-#: ../src/verbs.cpp:2477
+#: ../src/verbs.cpp:2487
 msgid "Remove text from frame (creates a single-line text object)"
 msgstr ""
 
-#: ../src/verbs.cpp:2478
+#: ../src/verbs.cpp:2488
 msgid "_Convert to Text"
 msgstr ""
 
-#: ../src/verbs.cpp:2479
+#: ../src/verbs.cpp:2489
 msgid "Convert flowed text to regular text object (preserves appearance)"
 msgstr ""
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2491
 msgid "Flip _Horizontal"
 msgstr ""
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2491
 msgid "Flip selected objects horizontally"
 msgstr ""
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2494
 msgid "Flip _Vertical"
 msgstr ""
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2494
 msgid "Flip selected objects vertically"
 msgstr ""
 
-#: ../src/verbs.cpp:2487
+#: ../src/verbs.cpp:2497
 msgid "Apply mask to selection (using the topmost object as mask)"
 msgstr ""
 
-#: ../src/verbs.cpp:2489
+#: ../src/verbs.cpp:2499
 msgid "Edit mask"
 msgstr ""
 
-#: ../src/verbs.cpp:2490 ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2500 ../src/verbs.cpp:2506
 msgid "_Release"
 msgstr ""
 
-#: ../src/verbs.cpp:2491
+#: ../src/verbs.cpp:2501
 msgid "Remove mask from selection"
 msgstr ""
 
-#: ../src/verbs.cpp:2493
+#: ../src/verbs.cpp:2503
 msgid ""
 "Apply clipping path to selection (using the topmost object as clipping path)"
 msgstr ""
 
-#: ../src/verbs.cpp:2495 ../src/widgets/toolbox.cpp:1446
+#: ../src/verbs.cpp:2505 ../src/widgets/toolbox.cpp:1472
 msgid "Edit clipping path"
 msgstr ""
 
-#: ../src/verbs.cpp:2497
+#: ../src/verbs.cpp:2507
 msgid "Remove clipping path from selection"
 msgstr ""
 
 #. Tools
-#: ../src/verbs.cpp:2500
+#: ../src/verbs.cpp:2510
 msgid "Select"
 msgstr ""
 
-#: ../src/verbs.cpp:2501
+#: ../src/verbs.cpp:2511
 msgid "Select and transform objects"
 msgstr ""
 
-#: ../src/verbs.cpp:2502
+#: ../src/verbs.cpp:2512
 msgid "Node Edit"
 msgstr ""
 
-#: ../src/verbs.cpp:2503
+#: ../src/verbs.cpp:2513
 msgid "Edit paths by nodes"
 msgstr ""
 
-#: ../src/verbs.cpp:2505
+#: ../src/verbs.cpp:2515
 msgid "Tweak objects by sculpting or painting"
 msgstr ""
 
-#: ../src/verbs.cpp:2507
+#: ../src/verbs.cpp:2517
+msgid "Spray objects by sculpting or painting"
+msgstr ""
+
+#: ../src/verbs.cpp:2519
 msgid "Create rectangles and squares"
 msgstr ""
 
-#: ../src/verbs.cpp:2509
+#: ../src/verbs.cpp:2521
 msgid "Create 3D boxes"
 msgstr ""
 
-#: ../src/verbs.cpp:2511
+#: ../src/verbs.cpp:2523
 msgid "Create circles, ellipses, and arcs"
 msgstr ""
 
-#: ../src/verbs.cpp:2513
+#: ../src/verbs.cpp:2525
 msgid "Create stars and polygons"
 msgstr ""
 
-#: ../src/verbs.cpp:2515
+#: ../src/verbs.cpp:2527
 msgid "Create spirals"
 msgstr ""
 
-#: ../src/verbs.cpp:2517
+#: ../src/verbs.cpp:2529
 msgid "Draw freehand lines"
 msgstr ""
 
-#: ../src/verbs.cpp:2519
+#: ../src/verbs.cpp:2531
 msgid "Draw Bezier curves and straight lines"
 msgstr ""
 
-#: ../src/verbs.cpp:2521
+#: ../src/verbs.cpp:2533
 msgid "Draw calligraphic or brush strokes"
 msgstr ""
 
-#: ../src/verbs.cpp:2523
+#: ../src/verbs.cpp:2535
 msgid "Create and edit text objects"
 msgstr ""
 
-#: ../src/verbs.cpp:2525
+#: ../src/verbs.cpp:2537
 msgid "Create and edit gradients"
 msgstr ""
 
-#: ../src/verbs.cpp:2527
+#: ../src/verbs.cpp:2539
 msgid "Zoom in or out"
 msgstr ""
 
-#: ../src/verbs.cpp:2529
+#: ../src/verbs.cpp:2541
 msgid "Pick colors from image"
 msgstr ""
 
-#: ../src/verbs.cpp:2531
+#: ../src/verbs.cpp:2543
 msgid "Create diagram connectors"
 msgstr ""
 
-#: ../src/verbs.cpp:2533
+#: ../src/verbs.cpp:2545
 msgid "Fill bounded areas"
 msgstr ""
 
-#: ../src/verbs.cpp:2534
+#: ../src/verbs.cpp:2546
 msgid "LPE Edit"
 msgstr ""
 
-#: ../src/verbs.cpp:2535
+#: ../src/verbs.cpp:2547
 msgid "Edit Path Effect parameters"
 msgstr ""
 
-#: ../src/verbs.cpp:2537
+#: ../src/verbs.cpp:2549
 msgid "Erase existing paths"
 msgstr ""
 
-#: ../src/verbs.cpp:2539
+#: ../src/verbs.cpp:2551
 msgid "Do geometric constructions"
 msgstr ""
 
 #. Tool prefs
-#: ../src/verbs.cpp:2541
+#: ../src/verbs.cpp:2553
 msgid "Selector Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2542
+#: ../src/verbs.cpp:2554
 msgid "Open Preferences for the Selector tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2543
+#: ../src/verbs.cpp:2555
 msgid "Node Tool Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2544
+#: ../src/verbs.cpp:2556
 msgid "Open Preferences for the Node tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2545
+#: ../src/verbs.cpp:2557
 msgid "Tweak Tool Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2546
+#: ../src/verbs.cpp:2558
 msgid "Open Preferences for the Tweak tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2547
+#: ../src/verbs.cpp:2559
+msgid "Spray Tool Preferences"
+msgstr ""
+
+#: ../src/verbs.cpp:2560
+msgid "Open Preferences for the Spray tool"
+msgstr ""
+
+#: ../src/verbs.cpp:2561
 msgid "Rectangle Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2548
+#: ../src/verbs.cpp:2562
 msgid "Open Preferences for the Rectangle tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2549
+#: ../src/verbs.cpp:2563
 msgid "3D Box Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2550
+#: ../src/verbs.cpp:2564
 msgid "Open Preferences for the 3D Box tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2551
+#: ../src/verbs.cpp:2565
 msgid "Ellipse Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2552
+#: ../src/verbs.cpp:2566
 msgid "Open Preferences for the Ellipse tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2553
+#: ../src/verbs.cpp:2567
 msgid "Star Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2554
+#: ../src/verbs.cpp:2568
 msgid "Open Preferences for the Star tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2555
+#: ../src/verbs.cpp:2569
 msgid "Spiral Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2556
+#: ../src/verbs.cpp:2570
 msgid "Open Preferences for the Spiral tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2557
+#: ../src/verbs.cpp:2571
 msgid "Pencil Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2558
+#: ../src/verbs.cpp:2572
 msgid "Open Preferences for the Pencil tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2559
+#: ../src/verbs.cpp:2573
 msgid "Pen Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2560
+#: ../src/verbs.cpp:2574
 msgid "Open Preferences for the Pen tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2561
+#: ../src/verbs.cpp:2575
 msgid "Calligraphic Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2562
+#: ../src/verbs.cpp:2576
 msgid "Open Preferences for the Calligraphy tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2563
+#: ../src/verbs.cpp:2577
 msgid "Text Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2564
+#: ../src/verbs.cpp:2578
 msgid "Open Preferences for the Text tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2565
+#: ../src/verbs.cpp:2579
 msgid "Gradient Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2566
+#: ../src/verbs.cpp:2580
 msgid "Open Preferences for the Gradient tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2567
+#: ../src/verbs.cpp:2581
 msgid "Zoom Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2568
+#: ../src/verbs.cpp:2582
 msgid "Open Preferences for the Zoom tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2569
+#: ../src/verbs.cpp:2583
 msgid "Dropper Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2570
+#: ../src/verbs.cpp:2584
 msgid "Open Preferences for the Dropper tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2571
+#: ../src/verbs.cpp:2585
 msgid "Connector Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2572
+#: ../src/verbs.cpp:2586
 msgid "Open Preferences for the Connector tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2573
+#: ../src/verbs.cpp:2587
 msgid "Paint Bucket Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2574
+#: ../src/verbs.cpp:2588
 msgid "Open Preferences for the Paint Bucket tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2575
+#: ../src/verbs.cpp:2589
 msgid "Eraser Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2576
+#: ../src/verbs.cpp:2590
 msgid "Open Preferences for the Eraser tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2577
+#: ../src/verbs.cpp:2591
 msgid "LPE Tool Preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2578
+#: ../src/verbs.cpp:2592
 msgid "Open Preferences for the LPETool tool"
 msgstr ""
 
 #. Zoom/View
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2595
 msgid "Zoom In"
 msgstr ""
 
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2595
 msgid "Zoom in"
 msgstr ""
 
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2596
 msgid "Zoom Out"
 msgstr ""
 
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2596
 msgid "Zoom out"
 msgstr ""
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2597
 msgid "_Rulers"
 msgstr ""
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2597
 msgid "Show or hide the canvas rulers"
 msgstr ""
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2598
 msgid "Scroll_bars"
 msgstr ""
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2598
 msgid "Show or hide the canvas scrollbars"
 msgstr ""
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2599
 msgid "_Grid"
 msgstr ""
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2599
 msgid "Show or hide the grid"
 msgstr ""
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2600
 msgid "G_uides"
 msgstr ""
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2600
 msgid "Show or hide guides (drag from a ruler to create a guide)"
 msgstr ""
 
-#: ../src/verbs.cpp:2587
+#: ../src/verbs.cpp:2601
 msgid "Toggle snapping on or off"
 msgstr ""
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2602
 msgid "Nex_t Zoom"
 msgstr ""
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2602
 msgid "Next zoom (from the history of zooms)"
 msgstr ""
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2604
 msgid "Pre_vious Zoom"
 msgstr ""
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2604
 msgid "Previous zoom (from the history of zooms)"
 msgstr ""
 
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2606
 msgid "Zoom 1:_1"
 msgstr ""
 
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2606
 msgid "Zoom to 1:1"
 msgstr ""
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2608
 msgid "Zoom 1:_2"
 msgstr ""
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2608
 msgid "Zoom to 1:2"
 msgstr ""
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2610
 msgid "_Zoom 2:1"
 msgstr ""
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2610
 msgid "Zoom to 2:1"
 msgstr ""
 
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2613
 msgid "_Fullscreen"
 msgstr ""
 
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2613
 msgid "Stretch this document window to full screen"
 msgstr ""
 
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2616
 msgid "Toggle _Focus Mode"
 msgstr ""
 
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2616
 msgid "Remove excess toolbars to focus on drawing"
 msgstr ""
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2618
 msgid "Duplic_ate Window"
 msgstr ""
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2618
 msgid "Open a new window with the same document"
 msgstr ""
 
-#: ../src/verbs.cpp:2606
+#: ../src/verbs.cpp:2620
 msgid "_New View Preview"
 msgstr ""
 
-#: ../src/verbs.cpp:2607
+#: ../src/verbs.cpp:2621
 msgid "New View Preview"
 msgstr ""
 
 #. "view_new_preview"
-#: ../src/verbs.cpp:2609
+#: ../src/verbs.cpp:2623
 msgid "_Normal"
 msgstr ""
 
-#: ../src/verbs.cpp:2610
+#: ../src/verbs.cpp:2624
 msgid "Switch to normal display mode"
 msgstr ""
 
-#: ../src/verbs.cpp:2611
+#: ../src/verbs.cpp:2625
 msgid "No _Filters"
 msgstr ""
 
-#: ../src/verbs.cpp:2612
+#: ../src/verbs.cpp:2626
 msgid "Switch to normal display without filters"
 msgstr ""
 
-#: ../src/verbs.cpp:2613
+#: ../src/verbs.cpp:2627
 msgid "_Outline"
 msgstr ""
 
-#: ../src/verbs.cpp:2614
+#: ../src/verbs.cpp:2628
 msgid "Switch to outline (wireframe) display mode"
 msgstr ""
 
-#: ../src/verbs.cpp:2615
+#: ../src/verbs.cpp:2629
 msgid "_Toggle"
 msgstr ""
 
-#: ../src/verbs.cpp:2616
+#: ../src/verbs.cpp:2630
 msgid "Toggle between normal and outline display modes"
 msgstr ""
 
-#: ../src/verbs.cpp:2618
+#: ../src/verbs.cpp:2632
 msgid "Color-managed view"
 msgstr ""
 
-#: ../src/verbs.cpp:2619
+#: ../src/verbs.cpp:2633
 msgid "Toggle color-managed display for this document window"
 msgstr ""
 
-#: ../src/verbs.cpp:2621
+#: ../src/verbs.cpp:2635
 msgid "Ico_n Preview..."
 msgstr ""
 
-#: ../src/verbs.cpp:2622
+#: ../src/verbs.cpp:2636
 msgid "Open a window to preview objects at different icon resolutions"
 msgstr ""
 
-#: ../src/verbs.cpp:2624
+#: ../src/verbs.cpp:2638
 msgid "Zoom to fit page in window"
 msgstr ""
 
-#: ../src/verbs.cpp:2625
+#: ../src/verbs.cpp:2639
 msgid "Page _Width"
 msgstr ""
 
-#: ../src/verbs.cpp:2626
+#: ../src/verbs.cpp:2640
 msgid "Zoom to fit page width in window"
 msgstr ""
 
-#: ../src/verbs.cpp:2628
+#: ../src/verbs.cpp:2642
 msgid "Zoom to fit drawing in window"
 msgstr ""
 
-#: ../src/verbs.cpp:2630
+#: ../src/verbs.cpp:2644
 msgid "Zoom to fit selection in window"
 msgstr ""
 
 #. Dialogs
-#: ../src/verbs.cpp:2633
+#: ../src/verbs.cpp:2647
 msgid "In_kscape Preferences..."
 msgstr ""
 
-#: ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2648
 msgid "Edit global Inkscape preferences"
 msgstr ""
 
-#: ../src/verbs.cpp:2635
+#: ../src/verbs.cpp:2649
 msgid "_Document Properties..."
 msgstr ""
 
-#: ../src/verbs.cpp:2636
+#: ../src/verbs.cpp:2650
 msgid "Edit properties of this document (to be saved with the document)"
 msgstr ""
 
-#: ../src/verbs.cpp:2637
+#: ../src/verbs.cpp:2651
 msgid "Document _Metadata..."
 msgstr ""
 
-#: ../src/verbs.cpp:2638
+#: ../src/verbs.cpp:2652
 msgid "Edit document metadata (to be saved with the document)"
 msgstr ""
 
-#: ../src/verbs.cpp:2639
+#: ../src/verbs.cpp:2653
 msgid "_Fill and Stroke..."
 msgstr ""
 
-#: ../src/verbs.cpp:2640
+#: ../src/verbs.cpp:2654
 msgid ""
 "Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
 msgstr ""
 
 #. TRANSLATORS: "Swatches" means: color samples
-#: ../src/verbs.cpp:2642
+#: ../src/verbs.cpp:2656
 msgid "S_watches..."
 msgstr ""
 
-#: ../src/verbs.cpp:2643
+#: ../src/verbs.cpp:2657
 msgid "Select colors from a swatches palette"
 msgstr ""
 
-#: ../src/verbs.cpp:2644
+#: ../src/verbs.cpp:2658
 msgid "Transfor_m..."
 msgstr ""
 
-#: ../src/verbs.cpp:2645
+#: ../src/verbs.cpp:2659
 msgid "Precisely control objects' transformations"
 msgstr ""
 
-#: ../src/verbs.cpp:2646
-msgid "_Align and Distribute..."
+#: ../src/verbs.cpp:2660
+msgid "_Align and Distribute..."
+msgstr ""
+
+#: ../src/verbs.cpp:2661
+msgid "Align and distribute objects"
+msgstr ""
+
+#: ../src/verbs.cpp:2662
+msgid "_Spray options..."
 msgstr ""
 
-#: ../src/verbs.cpp:2647
-msgid "Align and distribute objects"
+#: ../src/verbs.cpp:2663
+msgid "Some options for the spray"
 msgstr ""
 
-#: ../src/verbs.cpp:2648
+#: ../src/verbs.cpp:2664
 msgid "Undo _History..."
 msgstr ""
 
-#: ../src/verbs.cpp:2649
+#: ../src/verbs.cpp:2665
 msgid "Undo History"
 msgstr ""
 
-#: ../src/verbs.cpp:2650
+#: ../src/verbs.cpp:2666
 msgid "_Text and Font..."
 msgstr ""
 
-#: ../src/verbs.cpp:2651
+#: ../src/verbs.cpp:2667
 msgid "View and select font family, font size and other text properties"
 msgstr ""
 
-#: ../src/verbs.cpp:2652
+#: ../src/verbs.cpp:2668
 msgid "_XML Editor..."
 msgstr ""
 
-#: ../src/verbs.cpp:2653
+#: ../src/verbs.cpp:2669
 msgid "View and edit the XML tree of the document"
 msgstr ""
 
-#: ../src/verbs.cpp:2654
+#: ../src/verbs.cpp:2670
 msgid "_Find..."
 msgstr ""
 
-#: ../src/verbs.cpp:2655
+#: ../src/verbs.cpp:2671
 msgid "Find objects in document"
 msgstr ""
 
-#: ../src/verbs.cpp:2656
+#: ../src/verbs.cpp:2672
 msgid "Find and _Replace Text..."
 msgstr ""
 
-#: ../src/verbs.cpp:2657
+#: ../src/verbs.cpp:2673
 msgid "Find and replace text in document"
 msgstr ""
 
-#: ../src/verbs.cpp:2658
+#: ../src/verbs.cpp:2674
 msgid "Check Spellin_g..."
 msgstr ""
 
-#: ../src/verbs.cpp:2659
+#: ../src/verbs.cpp:2675
 msgid "Check spelling of text in document"
 msgstr ""
 
-#: ../src/verbs.cpp:2660
+#: ../src/verbs.cpp:2676
 msgid "_Messages..."
 msgstr ""
 
-#: ../src/verbs.cpp:2661
+#: ../src/verbs.cpp:2677
 msgid "View debug messages"
 msgstr ""
 
-#: ../src/verbs.cpp:2662
+#: ../src/verbs.cpp:2678
 msgid "S_cripts..."
 msgstr ""
 
-#: ../src/verbs.cpp:2663
+#: ../src/verbs.cpp:2679
 msgid "Run scripts"
 msgstr ""
 
-#: ../src/verbs.cpp:2664
+#: ../src/verbs.cpp:2680
 msgid "Show/Hide D_ialogs"
 msgstr ""
 
-#: ../src/verbs.cpp:2665
+#: ../src/verbs.cpp:2681
 msgid "Show or hide all open dialogs"
 msgstr ""
 
-#: ../src/verbs.cpp:2666
+#: ../src/verbs.cpp:2682
 msgid "Create Tiled Clones..."
 msgstr ""
 
-#: ../src/verbs.cpp:2667
+#: ../src/verbs.cpp:2683
 msgid ""
 "Create multiple clones of selected object, arranging them into a pattern or "
 "scattering"
 msgstr ""
 
-#: ../src/verbs.cpp:2668
+#: ../src/verbs.cpp:2684
 msgid "_Object Properties..."
 msgstr ""
 
-#: ../src/verbs.cpp:2669
+#: ../src/verbs.cpp:2685
 msgid "Edit the ID, locked and visible status, and other object properties"
 msgstr ""
 
@@ -17189,204 +17228,204 @@ msgstr ""
 #. new DialogVerb(SP_VERB_XMPP_CLIENT, "DialogXmppClient",
 #. N_("_Instant Messaging..."), N_("Jabber Instant Messaging Client"), NULL),
 #. #endif
-#: ../src/verbs.cpp:2674
+#: ../src/verbs.cpp:2690
 msgid "_Input Devices..."
 msgstr ""
 
-#: ../src/verbs.cpp:2675 ../src/verbs.cpp:2677
+#: ../src/verbs.cpp:2691 ../src/verbs.cpp:2693
 msgid "Configure extended input devices, such as a graphics tablet"
 msgstr ""
 
-#: ../src/verbs.cpp:2676
+#: ../src/verbs.cpp:2692
 msgid "_Input Devices (new)..."
 msgstr ""
 
-#: ../src/verbs.cpp:2678
+#: ../src/verbs.cpp:2694
 msgid "_Extensions..."
 msgstr ""
 
-#: ../src/verbs.cpp:2679
+#: ../src/verbs.cpp:2695
 msgid "Query information about extensions"
 msgstr ""
 
-#: ../src/verbs.cpp:2680
+#: ../src/verbs.cpp:2696
 msgid "Layer_s..."
 msgstr ""
 
-#: ../src/verbs.cpp:2681
+#: ../src/verbs.cpp:2697
 msgid "View Layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2682
+#: ../src/verbs.cpp:2698
 msgid "Path Effect Editor..."
 msgstr ""
 
-#: ../src/verbs.cpp:2683
+#: ../src/verbs.cpp:2699
 msgid "Manage, edit, and apply path effects"
 msgstr ""
 
-#: ../src/verbs.cpp:2684
+#: ../src/verbs.cpp:2700
 msgid "Filter Editor..."
 msgstr ""
 
-#: ../src/verbs.cpp:2685
+#: ../src/verbs.cpp:2701
 msgid "Manage, edit, and apply SVG filters"
 msgstr ""
 
-#: ../src/verbs.cpp:2686
+#: ../src/verbs.cpp:2702
 msgid "SVG Font Editor..."
 msgstr ""
 
-#: ../src/verbs.cpp:2687
+#: ../src/verbs.cpp:2703
 msgid "Edit SVG fonts"
 msgstr ""
 
 #. Help
-#: ../src/verbs.cpp:2690
+#: ../src/verbs.cpp:2706
 msgid "About E_xtensions"
 msgstr ""
 
-#: ../src/verbs.cpp:2691
+#: ../src/verbs.cpp:2707
 msgid "Information on Inkscape extensions"
 msgstr ""
 
-#: ../src/verbs.cpp:2692
+#: ../src/verbs.cpp:2708
 msgid "About _Memory"
 msgstr ""
 
-#: ../src/verbs.cpp:2693
+#: ../src/verbs.cpp:2709
 msgid "Memory usage information"
 msgstr ""
 
-#: ../src/verbs.cpp:2694
+#: ../src/verbs.cpp:2710
 msgid "_About Inkscape"
 msgstr ""
 
-#: ../src/verbs.cpp:2695
+#: ../src/verbs.cpp:2711
 msgid "Inkscape version, authors, license"
 msgstr ""
 
 #. new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"),
 #. N_("Distribution terms"), /*"show_license"*/"inkscape_options"),
 #. Tutorials
-#: ../src/verbs.cpp:2700
+#: ../src/verbs.cpp:2716
 msgid "Inkscape: _Basic"
 msgstr ""
 
-#: ../src/verbs.cpp:2701
+#: ../src/verbs.cpp:2717
 msgid "Getting started with Inkscape"
 msgstr ""
 
 #. "tutorial_basic"
-#: ../src/verbs.cpp:2702
+#: ../src/verbs.cpp:2718
 msgid "Inkscape: _Shapes"
 msgstr ""
 
-#: ../src/verbs.cpp:2703
+#: ../src/verbs.cpp:2719
 msgid "Using shape tools to create and edit shapes"
 msgstr ""
 
-#: ../src/verbs.cpp:2704
+#: ../src/verbs.cpp:2720
 msgid "Inkscape: _Advanced"
 msgstr ""
 
-#: ../src/verbs.cpp:2705
+#: ../src/verbs.cpp:2721
 msgid "Advanced Inkscape topics"
 msgstr ""
 
 #. "tutorial_advanced"
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2707
+#: ../src/verbs.cpp:2723
 msgid "Inkscape: T_racing"
 msgstr ""
 
-#: ../src/verbs.cpp:2708
+#: ../src/verbs.cpp:2724
 msgid "Using bitmap tracing"
 msgstr ""
 
 #. "tutorial_tracing"
-#: ../src/verbs.cpp:2709
+#: ../src/verbs.cpp:2725
 msgid "Inkscape: _Calligraphy"
 msgstr ""
 
-#: ../src/verbs.cpp:2710
+#: ../src/verbs.cpp:2726
 msgid "Using the Calligraphy pen tool"
 msgstr ""
 
-#: ../src/verbs.cpp:2711
+#: ../src/verbs.cpp:2727
 msgid "_Elements of Design"
 msgstr ""
 
-#: ../src/verbs.cpp:2712
+#: ../src/verbs.cpp:2728
 msgid "Principles of design in the tutorial form"
 msgstr ""
 
 #. "tutorial_design"
-#: ../src/verbs.cpp:2713
+#: ../src/verbs.cpp:2729
 msgid "_Tips and Tricks"
 msgstr ""
 
-#: ../src/verbs.cpp:2714
+#: ../src/verbs.cpp:2730
 msgid "Miscellaneous tips and tricks"
 msgstr ""
 
 #. "tutorial_tips"
 #. Effect -- renamed Extension
-#: ../src/verbs.cpp:2717
+#: ../src/verbs.cpp:2733
 msgid "Previous Extension"
 msgstr ""
 
-#: ../src/verbs.cpp:2718
+#: ../src/verbs.cpp:2734
 msgid "Repeat the last extension with the same settings"
 msgstr ""
 
-#: ../src/verbs.cpp:2719
+#: ../src/verbs.cpp:2735
 msgid "Previous Extension Settings..."
 msgstr ""
 
-#: ../src/verbs.cpp:2720
+#: ../src/verbs.cpp:2736
 msgid "Repeat the last extension with new settings"
 msgstr ""
 
-#: ../src/verbs.cpp:2724
+#: ../src/verbs.cpp:2740
 msgid "Fit the page to the current selection"
 msgstr ""
 
-#: ../src/verbs.cpp:2726
+#: ../src/verbs.cpp:2742
 msgid "Fit the page to the drawing"
 msgstr ""
 
-#: ../src/verbs.cpp:2728
+#: ../src/verbs.cpp:2744
 msgid ""
 "Fit the page to the current selection or the drawing if there is no selection"
 msgstr ""
 
 #. LockAndHide
-#: ../src/verbs.cpp:2730
+#: ../src/verbs.cpp:2746
 msgid "Unlock All"
 msgstr ""
 
-#: ../src/verbs.cpp:2732
+#: ../src/verbs.cpp:2748
 msgid "Unlock All in All Layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2734
+#: ../src/verbs.cpp:2750
 msgid "Unhide All"
 msgstr ""
 
-#: ../src/verbs.cpp:2736
+#: ../src/verbs.cpp:2752
 msgid "Unhide All in All Layers"
 msgstr ""
 
-#: ../src/verbs.cpp:2740
+#: ../src/verbs.cpp:2756
 msgid "Link an ICC color profile"
 msgstr ""
 
-#: ../src/verbs.cpp:2741
+#: ../src/verbs.cpp:2757
 msgid "Remove Color Profile"
 msgstr ""
 
-#: ../src/verbs.cpp:2742
+#: ../src/verbs.cpp:2758
 msgid "Remove a linked ICC color profile"
 msgstr ""
 
@@ -17470,7 +17509,7 @@ msgstr ""
 #. * text has been entered) to get a preview of the font.  Choose
 #. * some representative characters that users of your locale will be
 #. * interested in.
-#: ../src/widgets/font-selector.cpp:641 ../src/widgets/toolbox.cpp:6522
+#: ../src/widgets/font-selector.cpp:641
 msgid "AaBbCcIiPpQq12369$€¢?.;/()"
 msgstr ""
 
@@ -17519,11 +17558,11 @@ msgstr ""
 msgid "Edit the stops of the gradient"
 msgstr ""
 
-#: ../src/widgets/gradient-toolbar.cpp:527 ../src/widgets/toolbox.cpp:2630
-#: ../src/widgets/toolbox.cpp:2708 ../src/widgets/toolbox.cpp:3039
-#: ../src/widgets/toolbox.cpp:3077 ../src/widgets/toolbox.cpp:3692
-#: ../src/widgets/toolbox.cpp:3716 ../src/widgets/toolbox.cpp:5130
-#: ../src/widgets/toolbox.cpp:5159
+#: ../src/widgets/gradient-toolbar.cpp:527 ../src/widgets/toolbox.cpp:2657
+#: ../src/widgets/toolbox.cpp:2735 ../src/widgets/toolbox.cpp:3066
+#: ../src/widgets/toolbox.cpp:3104 ../src/widgets/toolbox.cpp:3719
+#: ../src/widgets/toolbox.cpp:3743 ../src/widgets/toolbox.cpp:5349
+#: ../src/widgets/toolbox.cpp:5378
 msgid "<b>New:</b>"
 msgstr ""
 
@@ -17550,10 +17589,10 @@ msgstr ""
 
 #. FIXME: implement averaging of all parameters for multiple selected
 #. gtk_label_set_markup(GTK_LABEL(l), _("<b>Average:</b>"));
-#: ../src/widgets/gradient-toolbar.cpp:610 ../src/widgets/toolbox.cpp:2632
-#: ../src/widgets/toolbox.cpp:3047 ../src/widgets/toolbox.cpp:3065
-#: ../src/widgets/toolbox.cpp:3694 ../src/widgets/toolbox.cpp:3705
-#: ../src/widgets/toolbox.cpp:5133 ../src/widgets/toolbox.cpp:5144
+#: ../src/widgets/gradient-toolbar.cpp:610 ../src/widgets/toolbox.cpp:2659
+#: ../src/widgets/toolbox.cpp:3074 ../src/widgets/toolbox.cpp:3092
+#: ../src/widgets/toolbox.cpp:3721 ../src/widgets/toolbox.cpp:3732
+#: ../src/widgets/toolbox.cpp:5352 ../src/widgets/toolbox.cpp:5363
 msgid "<b>Change:</b>"
 msgstr ""
 
@@ -18088,1549 +18127,1708 @@ msgstr ""
 msgid "Set stroke style"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:183
+#: ../src/widgets/toolbox.cpp:186
 msgid "Color/opacity used for color tweaking"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:187
+#: ../src/widgets/toolbox.cpp:188
+msgid "Color/opacity used for color spraying"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:192
 msgid "Style of new stars"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:189
+#: ../src/widgets/toolbox.cpp:194
 msgid "Style of new rectangles"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:191
+#: ../src/widgets/toolbox.cpp:196
 msgid "Style of new 3D boxes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:193
+#: ../src/widgets/toolbox.cpp:198
 msgid "Style of new ellipses"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:195
+#: ../src/widgets/toolbox.cpp:200
 msgid "Style of new spirals"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:197
+#: ../src/widgets/toolbox.cpp:202
 msgid "Style of new paths created by Pencil"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:199
+#: ../src/widgets/toolbox.cpp:204
 msgid "Style of new paths created by Pen"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:201
+#: ../src/widgets/toolbox.cpp:206
 msgid "Style of new calligraphic strokes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:203 ../src/widgets/toolbox.cpp:205
+#: ../src/widgets/toolbox.cpp:208 ../src/widgets/toolbox.cpp:210
 msgid "TBD"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:215
+#: ../src/widgets/toolbox.cpp:220
 msgid "Style of Paint Bucket fill objects"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1289
+#: ../src/widgets/toolbox.cpp:1315
 msgid "Insert node"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1290
+#: ../src/widgets/toolbox.cpp:1316
 msgid "Insert new nodes into selected segments"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1293
+#: ../src/widgets/toolbox.cpp:1319
 msgid "Insert"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1301
+#: ../src/widgets/toolbox.cpp:1327
 msgid "Delete selected nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1311
+#: ../src/widgets/toolbox.cpp:1337
 msgid "Join endnodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1312
+#: ../src/widgets/toolbox.cpp:1338
 msgid "Join selected endnodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1315
+#: ../src/widgets/toolbox.cpp:1341
 msgid "Join"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1322
+#: ../src/widgets/toolbox.cpp:1348
 msgid "Break nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1323
+#: ../src/widgets/toolbox.cpp:1349
 msgid "Break path at selected nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1333
+#: ../src/widgets/toolbox.cpp:1359
 msgid "Join with segment"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1334
+#: ../src/widgets/toolbox.cpp:1360
 msgid "Join selected endnodes with a new segment"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1344
+#: ../src/widgets/toolbox.cpp:1370
 msgid "Delete segment between two non-endpoint nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1353
+#: ../src/widgets/toolbox.cpp:1379
 msgid "Node Cusp"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1354
+#: ../src/widgets/toolbox.cpp:1380
 msgid "Make selected nodes corner"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1363
+#: ../src/widgets/toolbox.cpp:1389
 msgid "Node Smooth"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1364
+#: ../src/widgets/toolbox.cpp:1390
 msgid "Make selected nodes smooth"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1373
+#: ../src/widgets/toolbox.cpp:1399
 msgid "Node Symmetric"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1374
+#: ../src/widgets/toolbox.cpp:1400
 msgid "Make selected nodes symmetric"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1383
+#: ../src/widgets/toolbox.cpp:1409
 msgid "Node Auto"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1384
+#: ../src/widgets/toolbox.cpp:1410
 msgid "Make selected nodes auto-smooth"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1393
+#: ../src/widgets/toolbox.cpp:1419
 msgid "Node Line"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1394
+#: ../src/widgets/toolbox.cpp:1420
 msgid "Make selected segments lines"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1403
+#: ../src/widgets/toolbox.cpp:1429
 msgid "Node Curve"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1404
+#: ../src/widgets/toolbox.cpp:1430
 msgid "Make selected segments curves"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1413
+#: ../src/widgets/toolbox.cpp:1439
 msgid "Show Handles"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1414
+#: ../src/widgets/toolbox.cpp:1440
 msgid "Show the Bezier handles of selected nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1424
+#: ../src/widgets/toolbox.cpp:1450
 msgid "Show Outline"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1425
+#: ../src/widgets/toolbox.cpp:1451
 msgid "Show the outline of the path"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1435
+#: ../src/widgets/toolbox.cpp:1461
 msgid "Next path effect parameter"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1436
+#: ../src/widgets/toolbox.cpp:1462
 msgid "Show next path effect parameter for editing"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1447
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Edit the clipping path of the object"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1457
+#: ../src/widgets/toolbox.cpp:1483
 msgid "Edit mask path"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1458
+#: ../src/widgets/toolbox.cpp:1484
 msgid "Edit the mask of the object"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X coordinate:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X coordinate of selected node(s)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y coordinate:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y coordinate of selected node(s)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2028
+#: ../src/widgets/toolbox.cpp:2055
 msgid "Enable snapping"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2037
+#: ../src/widgets/toolbox.cpp:2064
 msgid "Bounding box"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2037
+#: ../src/widgets/toolbox.cpp:2064
 msgid "Snap bounding box corners"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2046
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Bounding box edges"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2046
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Snap to edges of a bounding box"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2082
 msgid "Bounding box corners"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2082
 msgid "Snap to bounding box corners"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2064
+#: ../src/widgets/toolbox.cpp:2091
 msgid "BBox Edge Midpoints"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2064
+#: ../src/widgets/toolbox.cpp:2091
 msgid "Snap from and to midpoints of bounding box edges"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2074
+#: ../src/widgets/toolbox.cpp:2101
 msgid "BBox Centers"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2074
+#: ../src/widgets/toolbox.cpp:2101
 msgid "Snapping from and to centers of bounding boxes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2083
+#: ../src/widgets/toolbox.cpp:2110
 msgid "Snap nodes or handles"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2091
+#: ../src/widgets/toolbox.cpp:2118
 msgid "Snap to paths"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2127
 msgid "Path intersections"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2127
 msgid "Snap to path intersections"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2109
+#: ../src/widgets/toolbox.cpp:2136
 msgid "To nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2109
+#: ../src/widgets/toolbox.cpp:2136
 msgid "Snap to cusp nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2118
+#: ../src/widgets/toolbox.cpp:2145
 msgid "Smooth nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2118
+#: ../src/widgets/toolbox.cpp:2145
 msgid "Snap to smooth nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2127
+#: ../src/widgets/toolbox.cpp:2154
 msgid "Line Midpoints"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2127
+#: ../src/widgets/toolbox.cpp:2154
 msgid "Snap from and to midpoints of line segments"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2136
+#: ../src/widgets/toolbox.cpp:2163
 msgid "Object Centers"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2136
+#: ../src/widgets/toolbox.cpp:2163
 msgid "Snap from and to centers of objects"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2145
+#: ../src/widgets/toolbox.cpp:2172
 msgid "Rotation Centers"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2145
+#: ../src/widgets/toolbox.cpp:2172
 msgid "Snap from and to an item's rotation center"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2154
+#: ../src/widgets/toolbox.cpp:2181
 msgid "Page border"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2154
+#: ../src/widgets/toolbox.cpp:2181
 msgid "Snap to the page border"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2163
+#: ../src/widgets/toolbox.cpp:2190
 msgid "Snap to grids"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2172
+#: ../src/widgets/toolbox.cpp:2199
 msgid "Snap to guides"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2377
+#: ../src/widgets/toolbox.cpp:2404
 msgid "Star: Change number of corners"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2422
+#: ../src/widgets/toolbox.cpp:2449
 msgid "Star: Change spoke ratio"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2492
 msgid "Make polygon"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2492
 msgid "Make star"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2501
+#: ../src/widgets/toolbox.cpp:2528
 msgid "Star: Change rounding"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2536
+#: ../src/widgets/toolbox.cpp:2563
 msgid "Star: Change randomization"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2727
+#: ../src/widgets/toolbox.cpp:2754
 msgid "Regular polygon (with one handle) instead of a star"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2734
+#: ../src/widgets/toolbox.cpp:2761
 msgid "Star instead of a regular polygon (with one handle)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "triangle/tri-star"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "square/quad-star"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "pentagon/five-pointed star"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "hexagon/six-pointed star"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Corners"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Corners:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Number of corners of a polygon or star"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "thin-ray star"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "pentagram"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "hexagram"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "heptagram"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "octagram"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "regular polygon"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2774
+#: ../src/widgets/toolbox.cpp:2801
 msgid "Spoke ratio"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2774
+#: ../src/widgets/toolbox.cpp:2801
 msgid "Spoke ratio:"
 msgstr ""
 
 #. TRANSLATORS: Tip radius of a star is the distance from the center to the farthest handle.
 #. Base radius is the same for the closest handle.
-#: ../src/widgets/toolbox.cpp:2777
+#: ../src/widgets/toolbox.cpp:2804
 msgid "Base radius to tip radius ratio"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "stretched"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "twisted"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "slightly pinched"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "NOT rounded"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "slightly rounded"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "visibly rounded"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "well rounded"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "amply rounded"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2795 ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2822 ../src/widgets/toolbox.cpp:2837
 msgid "blown up"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "Rounded"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "Rounded:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "How much rounded are the corners (0 for sharp)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "NOT randomized"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "slightly irregular"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "visibly randomized"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "strongly randomized"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Randomized"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Randomized:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Scatter randomly the corners and angles"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2828 ../src/widgets/toolbox.cpp:3767
-#: ../src/widgets/toolbox.cpp:4027 ../src/widgets/toolbox.cpp:7249
+#: ../src/widgets/toolbox.cpp:2855 ../src/widgets/toolbox.cpp:3794
+#: ../src/widgets/toolbox.cpp:4054 ../src/widgets/toolbox.cpp:7681
 msgid "Defaults"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2829 ../src/widgets/toolbox.cpp:3768
+#: ../src/widgets/toolbox.cpp:2856 ../src/widgets/toolbox.cpp:3795
 msgid ""
 "Reset shape parameters to defaults (use Inkscape Preferences > Tools to "
 "change defaults)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2902
+#: ../src/widgets/toolbox.cpp:2929
 msgid "Change rectangle"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3095
+#: ../src/widgets/toolbox.cpp:3122
 msgid "W:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3095
+#: ../src/widgets/toolbox.cpp:3122
 msgid "Width of rectangle"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 msgid "H:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 msgid "Height of rectangle"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3126 ../src/widgets/toolbox.cpp:3141
+#: ../src/widgets/toolbox.cpp:3153 ../src/widgets/toolbox.cpp:3168
 msgid "not rounded"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Horizontal radius"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Rx:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Horizontal radius of rounded corners"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Vertical radius"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Ry:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Vertical radius of rounded corners"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3163
+#: ../src/widgets/toolbox.cpp:3190
 msgid "Not rounded"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3164
+#: ../src/widgets/toolbox.cpp:3191
 msgid "Make corners sharp"
 msgstr ""
 
 #. TODO: use the correct axis here, too
-#: ../src/widgets/toolbox.cpp:3352
+#: ../src/widgets/toolbox.cpp:3379
 msgid "3D Box: Change perspective (angle of infinite axis)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3422
+#: ../src/widgets/toolbox.cpp:3449
 msgid "Angle in X direction"
 msgstr ""
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3424
+#: ../src/widgets/toolbox.cpp:3451
 msgid "Angle of PLs in X direction"
 msgstr ""
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3446
+#: ../src/widgets/toolbox.cpp:3473
 msgid "State of VP in X direction"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3447
+#: ../src/widgets/toolbox.cpp:3474
 msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3462
+#: ../src/widgets/toolbox.cpp:3489
 msgid "Angle in Y direction"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3462
+#: ../src/widgets/toolbox.cpp:3489
 msgid "Angle Y:"
 msgstr ""
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3464
+#: ../src/widgets/toolbox.cpp:3491
 msgid "Angle of PLs in Y direction"
 msgstr ""
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3485
+#: ../src/widgets/toolbox.cpp:3512
 msgid "State of VP in Y direction"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3486
+#: ../src/widgets/toolbox.cpp:3513
 msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3501
+#: ../src/widgets/toolbox.cpp:3528
 msgid "Angle in Z direction"
 msgstr ""
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3503
+#: ../src/widgets/toolbox.cpp:3530
 msgid "Angle of PLs in Z direction"
 msgstr ""
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3524
+#: ../src/widgets/toolbox.cpp:3551
 msgid "State of VP in Z direction"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3525
+#: ../src/widgets/toolbox.cpp:3552
 msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3583
+#: ../src/widgets/toolbox.cpp:3610
 msgid "Change spiral"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3724
+#: ../src/widgets/toolbox.cpp:3751
 msgid "just a curve"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3724
+#: ../src/widgets/toolbox.cpp:3751
 msgid "one full revolution"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Number of turns"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Turns:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Number of revolutions"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "circle"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "edge is much denser"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "edge is denser"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "even"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "center is denser"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "center is much denser"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "Divergence"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "Divergence:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "How much denser/sparser are outer revolutions; 1 = uniform"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts from center"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts mid-way"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts near edge"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Inner radius"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Inner radius:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Radius of the innermost revolution (relative to the spiral size)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3828
+#: ../src/widgets/toolbox.cpp:3855
 msgid "Bezier"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3829
+#: ../src/widgets/toolbox.cpp:3856
 msgid "Create regular Bezier path"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3835
+#: ../src/widgets/toolbox.cpp:3862
 msgid "Spiro"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3836
+#: ../src/widgets/toolbox.cpp:3863
 msgid "Create Spiro path"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3843
+#: ../src/widgets/toolbox.cpp:3870
 msgid "Zigzag"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3844
+#: ../src/widgets/toolbox.cpp:3871
 msgid "Create a sequence of straight line segments"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3850
+#: ../src/widgets/toolbox.cpp:3877
 msgid "Paraxial"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3851
+#: ../src/widgets/toolbox.cpp:3878
 msgid "Create a sequence of paraxial line segments"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3859
+#: ../src/widgets/toolbox.cpp:3886
 msgid "Mode of new lines drawn by this tool"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3888
+#: ../src/widgets/toolbox.cpp:3915
 msgid "Triangle in"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3889
+#: ../src/widgets/toolbox.cpp:3916
 msgid "Triangle out"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3891
+#: ../src/widgets/toolbox.cpp:3918
 msgid "From clipboard"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3916 ../src/widgets/toolbox.cpp:3917
+#: ../src/widgets/toolbox.cpp:3943 ../src/widgets/toolbox.cpp:3944
 msgid "Shape:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3916
+#: ../src/widgets/toolbox.cpp:3943
 msgid "Shape of new paths drawn by this tool"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4001
+#: ../src/widgets/toolbox.cpp:4028
 msgid "(many nodes, rough)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4001 ../src/widgets/toolbox.cpp:4121
-#: ../src/widgets/toolbox.cpp:4138 ../src/widgets/toolbox.cpp:4341
-#: ../src/widgets/toolbox.cpp:4712 ../src/widgets/toolbox.cpp:4745
-#: ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4028 ../src/widgets/toolbox.cpp:4148
+#: ../src/widgets/toolbox.cpp:4165 ../src/widgets/toolbox.cpp:4368
+#: ../src/widgets/toolbox.cpp:4472 ../src/widgets/toolbox.cpp:4488
+#: ../src/widgets/toolbox.cpp:4504 ../src/widgets/toolbox.cpp:4564
+#: ../src/widgets/toolbox.cpp:4931 ../src/widgets/toolbox.cpp:4964
+#: ../src/widgets/toolbox.cpp:5950
 msgid "(default)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4001
+#: ../src/widgets/toolbox.cpp:4028
 msgid "(few nodes, smooth)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4004
+#: ../src/widgets/toolbox.cpp:4031
 msgid "Smoothing:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4004
+#: ../src/widgets/toolbox.cpp:4031
 msgid "Smoothing: "
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4005
+#: ../src/widgets/toolbox.cpp:4032
 msgid "How much smoothing (simplifying) is applied to the line"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4028
+#: ../src/widgets/toolbox.cpp:4055
 msgid ""
 "Reset pencil parameters to defaults (use Inkscape Preferences > Tools to "
 "change defaults)"
 msgstr ""
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4121
+#: ../src/widgets/toolbox.cpp:4148
 msgid "(pinch tweak)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4121
+#: ../src/widgets/toolbox.cpp:4148
 msgid "(broad tweak)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4124
+#: ../src/widgets/toolbox.cpp:4151
 msgid "The width of the tweak area (relative to the visible canvas area)"
 msgstr ""
 
 #. Force
-#: ../src/widgets/toolbox.cpp:4138
+#: ../src/widgets/toolbox.cpp:4165
 msgid "(minimum force)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4138
+#: ../src/widgets/toolbox.cpp:4165
 msgid "(maximum force)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "Force"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "Force:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "The force of the tweak action"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4159
+#: ../src/widgets/toolbox.cpp:4186
 msgid "Move mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4160
+#: ../src/widgets/toolbox.cpp:4187
 msgid "Move objects in any direction"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4166
+#: ../src/widgets/toolbox.cpp:4193
 msgid "Move in/out mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4167
+#: ../src/widgets/toolbox.cpp:4194
 msgid "Move objects towards cursor; with Shift from cursor"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4173
+#: ../src/widgets/toolbox.cpp:4200
 msgid "Move jitter mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4174
+#: ../src/widgets/toolbox.cpp:4201
 msgid "Move objects in random directions"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4180
+#: ../src/widgets/toolbox.cpp:4207
 msgid "Scale mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4181
+#: ../src/widgets/toolbox.cpp:4208
 msgid "Shrink objects, with Shift enlarge"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4187
+#: ../src/widgets/toolbox.cpp:4214
 msgid "Rotate mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4188
+#: ../src/widgets/toolbox.cpp:4215
 msgid "Rotate objects, with Shift counterclockwise"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4194
+#: ../src/widgets/toolbox.cpp:4221
 msgid "Duplicate/delete mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4195
+#: ../src/widgets/toolbox.cpp:4222
 msgid "Duplicate objects, with Shift delete"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4201
+#: ../src/widgets/toolbox.cpp:4228
 msgid "Push mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4202
+#: ../src/widgets/toolbox.cpp:4229
 msgid "Push parts of paths in any direction"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4208
+#: ../src/widgets/toolbox.cpp:4235
 msgid "Shrink/grow mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4209
+#: ../src/widgets/toolbox.cpp:4236
 msgid "Shrink (inset) parts of paths; with Shift grow (outset)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4215
+#: ../src/widgets/toolbox.cpp:4242
 msgid "Attract/repel mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4216
+#: ../src/widgets/toolbox.cpp:4243
 msgid "Attract parts of paths towards cursor; with Shift from cursor"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4222
+#: ../src/widgets/toolbox.cpp:4249
 msgid "Roughen mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4223
+#: ../src/widgets/toolbox.cpp:4250
 msgid "Roughen parts of paths"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4229
+#: ../src/widgets/toolbox.cpp:4256
 msgid "Color paint mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4230
+#: ../src/widgets/toolbox.cpp:4257
 msgid "Paint the tool's color upon selected objects"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4236
+#: ../src/widgets/toolbox.cpp:4263
 msgid "Color jitter mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4237
+#: ../src/widgets/toolbox.cpp:4264
 msgid "Jitter the colors of selected objects"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4243
+#: ../src/widgets/toolbox.cpp:4270
 msgid "Blur mode"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4244
+#: ../src/widgets/toolbox.cpp:4271
 msgid "Blur selected objects more; with Shift, blur less"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4271
+#: ../src/widgets/toolbox.cpp:4298
 msgid "Channels:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4282
+#: ../src/widgets/toolbox.cpp:4309
 msgid "In color mode, act on objects' hue"
 msgstr ""
 
 #. TRANSLATORS:  "H" here stands for hue
-#: ../src/widgets/toolbox.cpp:4286
+#: ../src/widgets/toolbox.cpp:4313
 msgid "H"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4297
+#: ../src/widgets/toolbox.cpp:4324
 msgid "In color mode, act on objects' saturation"
 msgstr ""
 
 #. TRANSLATORS: "S" here stands for Saturation
-#: ../src/widgets/toolbox.cpp:4301
+#: ../src/widgets/toolbox.cpp:4328
 msgid "S"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4312
+#: ../src/widgets/toolbox.cpp:4339
 msgid "In color mode, act on objects' lightness"
 msgstr ""
 
 #. TRANSLATORS: "L" here stands for Lightness
-#: ../src/widgets/toolbox.cpp:4316
+#: ../src/widgets/toolbox.cpp:4343
 msgid "L"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4327
+#: ../src/widgets/toolbox.cpp:4354
 msgid "In color mode, act on objects' opacity"
 msgstr ""
 
 #. TRANSLATORS: "O" here stands for Opacity
-#: ../src/widgets/toolbox.cpp:4331
+#: ../src/widgets/toolbox.cpp:4358
 msgid "O"
 msgstr ""
 
 #. Fidelity
-#: ../src/widgets/toolbox.cpp:4341
+#. Population
+#: ../src/widgets/toolbox.cpp:4368 ../src/widgets/toolbox.cpp:4564
 msgid "(rough, simplified)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4341
+#: ../src/widgets/toolbox.cpp:4368 ../src/widgets/toolbox.cpp:4564
 msgid "(fine, but many nodes)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4344
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Fidelity"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4344
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Fidelity:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4345
+#: ../src/widgets/toolbox.cpp:4372
 msgid ""
 "Low fidelity simplifies paths; high fidelity preserves path features but may "
 "generate a lot of new nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4362 ../src/widgets/toolbox.cpp:4863
+#: ../src/widgets/toolbox.cpp:4389 ../src/widgets/toolbox.cpp:4582
+#: ../src/widgets/toolbox.cpp:5082
 msgid "Pressure"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4363
+#: ../src/widgets/toolbox.cpp:4390
 msgid "Use the pressure of the input device to alter the force of tweak action"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4543
+#. Width
+#: ../src/widgets/toolbox.cpp:4472
+msgid "(pinch spray)"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4472
+msgid "(broad spray)"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4475
+msgid "The width of the spray area (relative to the visible canvas area)"
+msgstr ""
+
+#. Mean
+#: ../src/widgets/toolbox.cpp:4488
+msgid "(minimum mean)"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4488
+msgid "(maximum mean)"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4491 ../share/extensions/polyhedron_3d.inx.h:25
+msgid "Mean"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4491
+msgid "Mean:"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4491
+msgid "The mean of the spray action"
+msgstr ""
+
+#. Standard_deviation
+#: ../src/widgets/toolbox.cpp:4504
+msgid "(minimum standard_deviation)"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4504
+msgid "(maximum standard_deviation)"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4507
+msgid "SD"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4507
+msgid "SD:"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4507
+msgid "The standard deviation of the spray action"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4525
+msgid "Spray with copies"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4526
+msgid "Spray copies of the initial selection"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4532
+msgid "Spray with clones"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4533
+msgid "Spray clones of the initial selection"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4539
+msgid "Spray single path"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4540
+msgid "Spray objects in a single path"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4567
+msgid "Population"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4567
+msgid "Population:"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4568
+msgid "This setting adjusts the number of items sprayed"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4583
+msgid "Use the pressure of the input device to alter the force of spray action"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4762
 msgid "No preset"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4561
+#: ../src/widgets/toolbox.cpp:4780
 msgid "Save..."
 msgstr ""
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4712 ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4931 ../src/widgets/toolbox.cpp:5950
 msgid "(hairline)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4712 ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4931 ../src/widgets/toolbox.cpp:5950
 msgid "(broad stroke)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4715 ../src/widgets/toolbox.cpp:5734
+#: ../src/widgets/toolbox.cpp:4934 ../src/widgets/toolbox.cpp:5953
 msgid "Pen Width"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4716
+#: ../src/widgets/toolbox.cpp:4935
 msgid "The width of the calligraphic pen (relative to the visible canvas area)"
 msgstr ""
 
 #. Thinning
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(speed blows up stroke)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(slight widening)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(constant width)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(slight thinning, default)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(speed deflates stroke)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4732
+#: ../src/widgets/toolbox.cpp:4951
 msgid "Stroke Thinning"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4732
+#: ../src/widgets/toolbox.cpp:4951
 msgid "Thinning:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4733
+#: ../src/widgets/toolbox.cpp:4952
 msgid ""
 "How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 "
 "makes them broader, 0 makes width independent of velocity)"
 msgstr ""
 
 #. Angle
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(left edge up)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(horizontal)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(right edge up)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4967
 msgid "Pen Angle"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4967
 msgid "Angle:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4749
+#: ../src/widgets/toolbox.cpp:4968
 msgid ""
 "The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if "
 "fixation = 0)"
 msgstr ""
 
 #. Fixation
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(perpendicular to stroke, \"brush\")"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(almost fixed, default)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(fixed by Angle, \"pen\")"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4766
+#: ../src/widgets/toolbox.cpp:4985
 msgid "Fixation"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4766
+#: ../src/widgets/toolbox.cpp:4985
 msgid "Fixation:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4767
+#: ../src/widgets/toolbox.cpp:4986
 msgid ""
 "Angle behavior (0 = nib always perpendicular to stroke direction, 100 = "
 "fixed angle)"
 msgstr ""
 
 #. Cap Rounding
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(blunt caps, default)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(slightly bulging)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(approximately round)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(long protruding caps)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4783
+#: ../src/widgets/toolbox.cpp:5002
 msgid "Cap rounding"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4783
+#: ../src/widgets/toolbox.cpp:5002
 msgid "Caps:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4784
+#: ../src/widgets/toolbox.cpp:5003
 msgid ""
 "Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = "
 "round caps)"
 msgstr ""
 
 #. Tremor
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(smooth line)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(slight tremor)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(noticeable tremor)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(maximum tremor)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4799
+#: ../src/widgets/toolbox.cpp:5018
 msgid "Stroke Tremor"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4799
+#: ../src/widgets/toolbox.cpp:5018
 msgid "Tremor:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4800
+#: ../src/widgets/toolbox.cpp:5019
 msgid "Increase to make strokes rugged and trembling"
 msgstr ""
 
 #. Wiggle
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(no wiggle)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(slight deviation)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(wild waves and curls)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:5036
 msgid "Pen Wiggle"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:5036
 msgid "Wiggle:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4818
+#: ../src/widgets/toolbox.cpp:5037
 msgid "Increase to make the pen waver and wiggle"
 msgstr ""
 
 #. Mass
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(no inertia)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(slight smoothing, default)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(noticeable lagging)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(maximum inertia)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4834
+#: ../src/widgets/toolbox.cpp:5053
 msgid "Pen Mass"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4834
+#: ../src/widgets/toolbox.cpp:5053
 msgid "Mass:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4835
+#: ../src/widgets/toolbox.cpp:5054
 msgid "Increase to make the pen drag behind, as if slowed by inertia"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4850
+#: ../src/widgets/toolbox.cpp:5069
 msgid "Trace Background"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4851
+#: ../src/widgets/toolbox.cpp:5070
 msgid ""
 "Trace the lightness of the background by the width of the pen (white - "
 "minimum width, black - maximum width)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4864
+#: ../src/widgets/toolbox.cpp:5083
 msgid "Use the pressure of the input device to alter the width of the pen"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4876
+#: ../src/widgets/toolbox.cpp:5095
 msgid "Tilt"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4877
+#: ../src/widgets/toolbox.cpp:5096
 msgid "Use the tilt of the input device to alter the angle of the pen's nib"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4890
+#: ../src/widgets/toolbox.cpp:5109
 msgid "Choose a preset"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:4978
+#: ../src/widgets/toolbox.cpp:5197
 msgid "Arc: Change start/end"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5042
+#: ../src/widgets/toolbox.cpp:5261
 msgid "Arc: Change open/closed"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5168
+#: ../src/widgets/toolbox.cpp:5387
 msgid "Start:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5169
+#: ../src/widgets/toolbox.cpp:5388
 msgid "The angle (in degrees) from the horizontal to the arc's start point"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5181
+#: ../src/widgets/toolbox.cpp:5400
 msgid "End:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5182
+#: ../src/widgets/toolbox.cpp:5401
 msgid "The angle (in degrees) from the horizontal to the arc's end point"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5198
+#: ../src/widgets/toolbox.cpp:5417
 msgid "Closed arc"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5199
+#: ../src/widgets/toolbox.cpp:5418
 msgid "Switch to segment (closed shape with two radii)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5205
+#: ../src/widgets/toolbox.cpp:5424
 msgid "Open Arc"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5206
+#: ../src/widgets/toolbox.cpp:5425
 msgid "Switch to arc (unclosed shape)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5229
+#: ../src/widgets/toolbox.cpp:5448
 msgid "Make whole"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5230
+#: ../src/widgets/toolbox.cpp:5449
 msgid "Make the shape a whole ellipse, not arc or segment"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5306
+#: ../src/widgets/toolbox.cpp:5525
 msgid "Pick opacity"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5307
+#: ../src/widgets/toolbox.cpp:5526
 msgid ""
 "Pick both the color and the alpha (transparency) under cursor; otherwise, "
 "pick only the visible color premultiplied by alpha"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5310
+#: ../src/widgets/toolbox.cpp:5529
 msgid "Pick"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5319
+#: ../src/widgets/toolbox.cpp:5538
 msgid "Assign opacity"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5320
+#: ../src/widgets/toolbox.cpp:5539
 msgid ""
 "If alpha was picked, assign it to selection as fill or stroke transparency"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5323
+#: ../src/widgets/toolbox.cpp:5542
 msgid "Assign"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5509
+#: ../src/widgets/toolbox.cpp:5728
 msgid "Closed"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5511
+#: ../src/widgets/toolbox.cpp:5730
 msgid "Open start"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5513
+#: ../src/widgets/toolbox.cpp:5732
 msgid "Open end"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5515
+#: ../src/widgets/toolbox.cpp:5734
 msgid "Open both"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5574
+#: ../src/widgets/toolbox.cpp:5793
 msgid "All inactive"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5575
+#: ../src/widgets/toolbox.cpp:5794
 msgid "No geometric tool is active"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5608
+#: ../src/widgets/toolbox.cpp:5827
 msgid "Show limiting bounding box"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5609
+#: ../src/widgets/toolbox.cpp:5828
 msgid "Show bounding box (used to cut infinite lines)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5620
+#: ../src/widgets/toolbox.cpp:5839
 msgid "Get limiting bounding box from selection"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5621
+#: ../src/widgets/toolbox.cpp:5840
 msgid ""
 "Set limiting bounding box (used to cut infinite lines) to the bounding box "
 "of current selection"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5633
+#: ../src/widgets/toolbox.cpp:5852
 msgid "Choose a line segment type"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5649
+#: ../src/widgets/toolbox.cpp:5868
 msgid "Display measuring info"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5650
+#: ../src/widgets/toolbox.cpp:5869
 msgid "Display measuring info for selected items"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5670
+#: ../src/widgets/toolbox.cpp:5889
 msgid "Open LPE dialog"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5671
+#: ../src/widgets/toolbox.cpp:5890
 msgid "Open LPE dialog (to adapt parameters numerically)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5735
+#: ../src/widgets/toolbox.cpp:5954
 msgid "The width of the eraser pen (relative to the visible canvas area)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5753
+#: ../src/widgets/toolbox.cpp:5972
 msgid "Delete objects touched by the eraser"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5759
+#: ../src/widgets/toolbox.cpp:5978
 msgid "Cut"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5760
+#: ../src/widgets/toolbox.cpp:5979
 msgid "Cut out from objects"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6104
+#: ../src/widgets/toolbox.cpp:6323
 msgid "Text: Change font family"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6174
+#: ../src/widgets/toolbox.cpp:6393
 msgid "Text: Change alignment"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6278
+#: ../src/widgets/toolbox.cpp:6497
 msgid "Text: Change font style"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6325
+#: ../src/widgets/toolbox.cpp:6544
 msgid "Text: Change orientation"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6439
+#: ../src/widgets/toolbox.cpp:6658
 msgid "Text: Change font size"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6650
+#: ../src/widgets/toolbox.cpp:6877
 msgid "Select font family (Alt+X to access)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6687
+#: ../src/widgets/toolbox.cpp:6914
 msgid ""
 "This font is currently not installed on your system. Inkscape will use the "
 "default font instead."
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6723
+#: ../src/widgets/toolbox.cpp:6950
 msgid "Align left"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6745
+#: ../src/widgets/toolbox.cpp:6972
 msgid "Align right"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6756
+#: ../src/widgets/toolbox.cpp:6983
 msgid "Justify"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6771
+#: ../src/widgets/toolbox.cpp:6998
 msgid "Bold"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6782
+#: ../src/widgets/toolbox.cpp:7009
 msgid "Italic"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6913
+#: ../src/widgets/toolbox.cpp:7148
+msgid "Set connector type: orthogonal"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7148
+msgid "Set connector type: polyline"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7198
+msgid "Change connector curvature"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7247
 msgid "Change connector spacing"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:6996
+#: ../src/widgets/toolbox.cpp:7361
+msgid "EditMode"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7362
+msgid "Switch between connection point editing and connector drawing mode"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7376
 msgid "Avoid"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7006
+#: ../src/widgets/toolbox.cpp:7386
 msgid "Ignore"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7018
+#: ../src/widgets/toolbox.cpp:7397
+msgid "Orthogonal"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7398
+msgid "Make connector orthogonal or polyline"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7412
+msgid "Connector Curvature"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7412
+msgid "Curvature:"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7413
+msgid "The amount of connectors curvature"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7423
 msgid "Connector Spacing"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7018
+#: ../src/widgets/toolbox.cpp:7423
 msgid "Spacing:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7019
+#: ../src/widgets/toolbox.cpp:7424
 msgid "The amount of space left around objects by auto-routing connectors"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7030
+#: ../src/widgets/toolbox.cpp:7435
 msgid "Graph"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7040
+#: ../src/widgets/toolbox.cpp:7445
 msgid "Connector Length"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7040
+#: ../src/widgets/toolbox.cpp:7445
 msgid "Length:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7041
+#: ../src/widgets/toolbox.cpp:7446
 msgid "Ideal length for connectors when layout is applied"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7053
+#: ../src/widgets/toolbox.cpp:7458
 msgid "Downwards"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7054
+#: ../src/widgets/toolbox.cpp:7459
 msgid "Make connectors with end-markers (arrows) point downwards"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7069
+#: ../src/widgets/toolbox.cpp:7476
 msgid "Do not allow overlapping shapes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7172
+#: ../src/widgets/toolbox.cpp:7491
+msgid "New connection point"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7492
+msgid "Add a new connection point to the currently selected item"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7503
+msgid "Remove connection point"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7504
+msgid "Remove the currently selected connection point"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7604
 msgid "Fill by"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7173
+#: ../src/widgets/toolbox.cpp:7605
 msgid "Fill by:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7185
+#: ../src/widgets/toolbox.cpp:7617
 msgid "Fill Threshold"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7186
+#: ../src/widgets/toolbox.cpp:7618
 msgid ""
 "The maximum allowed difference between the clicked pixel and the neighboring "
 "pixels to be counted in the fill"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7211
+#: ../src/widgets/toolbox.cpp:7643
 msgid "Grow/shrink by"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7211
+#: ../src/widgets/toolbox.cpp:7643
 msgid "Grow/shrink by:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7212
+#: ../src/widgets/toolbox.cpp:7644
 msgid ""
 "The amount to grow (positive) or shrink (negative) the created fill path"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7237
+#: ../src/widgets/toolbox.cpp:7669
 msgid "Close gaps"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7238
+#: ../src/widgets/toolbox.cpp:7670
 msgid "Close gaps:"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:7250
+#: ../src/widgets/toolbox.cpp:7682
 msgid ""
 "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
 "to change defaults)"
@@ -21461,10 +21659,6 @@ msgstr ""
 msgid "Maximum"
 msgstr ""
 
-#: ../share/extensions/polyhedron_3d.inx.h:25
-msgid "Mean"
-msgstr ""
-
 #: ../share/extensions/polyhedron_3d.inx.h:26
 msgid "Minimum"
 msgstr ""
index a7154e48d5ef0c84c1b559092f1b25ecb82bb288..5ff2898209406945b1619432efeefbdf158ed1a5 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inkscape 0.47\n"
 "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-10-15 12:45+0200\n"
-"PO-Revision-Date: 2009-11-09 22:53+0300\n"
+"POT-Creation-Date: 2009-12-09 04:38+0300\n"
+"PO-Revision-Date: 2009-12-09 05:39+0300\n"
 "Last-Translator: Alexandre Prokoudine <alexandre.prokoudine@gmail.com>\n"
 "Language-Team: Russian <gnome-cyr@lists.gnome.org>\n"
 "MIME-Version: 1.0\n"
@@ -394,8 +394,8 @@ msgstr "Найти в объекте вертикальные цветные к
 
 #. Pencil
 #: ../share/filters/filters.svg.h:29
-#: ../src/ui/dialog/inkscape-preferences.cpp:486
-#: ../src/verbs.cpp:2516
+#: ../src/ui/dialog/inkscape-preferences.cpp:492
+#: ../src/verbs.cpp:2528
 msgid "Pencil"
 msgstr "Карандаш"
 
@@ -1623,7 +1623,7 @@ msgstr "В высшей степени настраиваемая отражаю
 
 #: ../share/filters/filters.svg.h:162
 #: ../src/ui/dialog/align-and-distribute.cpp:920
-#: ../src/widgets/desktop-widget.cpp:1577
+#: ../src/widgets/desktop-widget.cpp:1576
 msgid "Drawing"
 msgstr "Рисунок"
 
@@ -2292,46 +2292,46 @@ msgstr "Создание паралеллепипеда"
 msgid "<b>3D Box</b>"
 msgstr "<b>Параллелепипед</b>"
 
-#: ../src/connector-context.cpp:526
+#: ../src/connector-context.cpp:766
 msgid "Creating new connector"
 msgstr "Создается новая соединительная линия"
 
-#: ../src/connector-context.cpp:775
+#: ../src/connector-context.cpp:1157
 msgid "Connector endpoint drag cancelled."
 msgstr "Перемещение конечных точек соединительной линии отменено."
 
-#: ../src/connector-context.cpp:824
+#: ../src/connector-context.cpp:1188
+#, fuzzy
+msgid "Connection point drag cancelled."
+msgstr "Перемещение конечных точек соединительной линии отменено."
+
+#: ../src/connector-context.cpp:1306
 msgid "Reroute connector"
 msgstr "Объекты пересоединены"
 
-#. Flush pending updates
-#: ../src/connector-context.cpp:988
+#: ../src/connector-context.cpp:1473
 msgid "Create connector"
 msgstr "Создание соединительной линии"
 
-#: ../src/connector-context.cpp:1012
+#: ../src/connector-context.cpp:1496
 msgid "Finishing connector"
 msgstr "Соединительная линия закрывается"
 
-#: ../src/connector-context.cpp:1154
-msgid "<b>Connection point</b>: click or drag to create a new connector"
-msgstr "<b>Точка соединения</b>: щелкните мышкой или перетащите для создания новой соединительной линии"
-
-#: ../src/connector-context.cpp:1227
+#: ../src/connector-context.cpp:1784
 msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
 msgstr "<b>Конечная соединительная точка</b>: перетащите для пересоединения или соединения с новыми фигурами"
 
-#: ../src/connector-context.cpp:1339
+#: ../src/connector-context.cpp:1925
 msgid "Select <b>at least one non-connector object</b>."
 msgstr "Выделите <b>как минимум один объект (не соединительную линию)</b>."
 
-#: ../src/connector-context.cpp:1344
-#: ../src/widgets/toolbox.cpp:6997
+#: ../src/connector-context.cpp:1930
+#: ../src/widgets/toolbox.cpp:7377
 msgid "Make connectors avoid selected objects"
 msgstr "Линии обходят выделенные объекты"
 
-#: ../src/connector-context.cpp:1345
-#: ../src/widgets/toolbox.cpp:7007
+#: ../src/connector-context.cpp:1931
+#: ../src/widgets/toolbox.cpp:7387
 msgid "Make connectors ignore selected objects"
 msgstr "Линии игнорируют выделенные объекты"
 
@@ -2345,11 +2345,11 @@ msgstr "<b>Текущий слой скрыт</b>. Включите его по
 msgid "<b>Current layer is locked</b>. Unlock it to be able to draw on it."
 msgstr "<b>Текущий слой заперт</b>. Отоприте его, чтобы иметь возможность снова рисовать на нём."
 
-#: ../src/desktop.cpp:828
+#: ../src/desktop.cpp:830
 msgid "No previous zoom."
 msgstr "Нет предыдущего масштаба."
 
-#: ../src/desktop.cpp:853
+#: ../src/desktop.cpp:855
 msgid "No next zoom."
 msgstr "Нет следующего масштаба."
 
@@ -2926,7 +2926,7 @@ msgstr "Взять видимый цвет (без прозрачности) в
 #: ../src/dialogs/clonetiler.cpp:2764
 #: ../src/extension/internal/bitmap/opacity.cpp:37
 #: ../src/extension/internal/bitmap/opacity.cpp:39
-#: ../src/widgets/toolbox.cpp:4326
+#: ../src/widgets/toolbox.cpp:4353
 #: ../share/extensions/interp_att_g.inx.h:12
 msgid "Opacity"
 msgstr "Непрозрачность"
@@ -3130,17 +3130,17 @@ msgid "Reset all shifts, scales, rotates, opacity and color changes in the dialo
 msgstr "Обнулить все введенные значения смещения, масштабирования, поворотов, непрозрачности и цвета"
 
 #: ../src/dialogs/export.cpp:146
-#: ../src/verbs.cpp:2623
+#: ../src/verbs.cpp:2637
 msgid "_Page"
 msgstr "_Страница"
 
 #: ../src/dialogs/export.cpp:146
-#: ../src/verbs.cpp:2627
+#: ../src/verbs.cpp:2641
 msgid "_Drawing"
 msgstr "_Рисунок"
 
 #: ../src/dialogs/export.cpp:146
-#: ../src/verbs.cpp:2629
+#: ../src/verbs.cpp:2643
 msgid "_Selection"
 msgstr "_Выделение"
 
@@ -3185,7 +3185,7 @@ msgid "<big><b>Bitmap size</b></big>"
 msgstr "<big><b>Размер растрового изображения</b></big>"
 
 #: ../src/dialogs/export.cpp:484
-#: ../src/ui/widget/page-sizer.cpp:210
+#: ../src/ui/widget/page-sizer.cpp:230
 msgid "_Width:"
 msgstr "_Ширина:"
 
@@ -3199,13 +3199,13 @@ msgid "dp_i"
 msgstr "dp_i"
 
 #: ../src/dialogs/export.cpp:498
-#: ../src/ui/widget/page-sizer.cpp:211
+#: ../src/ui/widget/page-sizer.cpp:231
 msgid "_Height:"
 msgstr "_Высота:"
 
 #: ../src/dialogs/export.cpp:509
-#: ../src/ui/dialog/inkscape-preferences.cpp:768
-#: ../src/ui/dialog/inkscape-preferences.cpp:1180
+#: ../src/ui/dialog/inkscape-preferences.cpp:784
+#: ../src/ui/dialog/inkscape-preferences.cpp:1196
 msgid "dpi"
 msgstr "dpi"
 
@@ -3386,7 +3386,7 @@ msgstr "Искать в контурах, линиях, полилиниях"
 
 #: ../src/dialogs/find.cpp:593
 #: ../src/ui/dialog/find.cpp:75
-#: ../src/widgets/toolbox.cpp:2091
+#: ../src/widgets/toolbox.cpp:2118
 msgid "Paths"
 msgstr "Контуры"
 
@@ -3563,8 +3563,8 @@ msgstr "Атрибут id= (разрешены только латинские 
 
 #. Button for setting the object's id, label, title and description.
 #: ../src/dialogs/item-properties.cpp:143
-#: ../src/verbs.cpp:2486
-#: ../src/verbs.cpp:2492
+#: ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2502
 msgid "_Set"
 msgstr "_Установить"
 
@@ -3708,26 +3708,27 @@ msgstr "URL:"
 #: ../src/dialogs/object-attributes.cpp:51
 #: ../src/dialogs/object-attributes.cpp:59
 #: ../src/ui/dialog/guides.cpp:43
-#: ../src/ui/view/edit-widget.cpp:1074
+#: ../src/ui/view/edit-widget.cpp:1080
 #: ../src/widgets/desktop-widget.cpp:504
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X:"
 msgstr "X:"
 
 #: ../src/dialogs/object-attributes.cpp:52
 #: ../src/dialogs/object-attributes.cpp:60
 #: ../src/ui/dialog/guides.cpp:44
-#: ../src/ui/view/edit-widget.cpp:1075
+#: ../src/ui/view/edit-widget.cpp:1081
 #: ../src/widgets/desktop-widget.cpp:507
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y:"
 msgstr "Y:"
 
 #: ../src/dialogs/object-attributes.cpp:53
 #: ../src/dialogs/object-attributes.cpp:61
-#: ../src/widgets/toolbox.cpp:4124
-#: ../src/widgets/toolbox.cpp:4715
-#: ../src/widgets/toolbox.cpp:5734
+#: ../src/widgets/toolbox.cpp:4151
+#: ../src/widgets/toolbox.cpp:4475
+#: ../src/widgets/toolbox.cpp:4934
+#: ../src/widgets/toolbox.cpp:5953
 msgid "Width:"
 msgstr "Ширина:"
 
@@ -3843,12 +3844,12 @@ msgid "Justify lines"
 msgstr "Выключить строки по ширине"
 
 #: ../src/dialogs/text-edit.cpp:300
-#: ../src/widgets/toolbox.cpp:6804
+#: ../src/widgets/toolbox.cpp:7031
 msgid "Horizontal text"
 msgstr "Горизонтальный текст"
 
 #: ../src/dialogs/text-edit.cpp:314
-#: ../src/widgets/toolbox.cpp:6816
+#: ../src/widgets/toolbox.cpp:7043
 msgid "Vertical text"
 msgstr "Вертикальный текст"
 
@@ -3859,8 +3860,8 @@ msgstr "Интерлиньяж:"
 #. Text
 #: ../src/dialogs/text-edit.cpp:375
 #: ../src/selection-describer.cpp:69
-#: ../src/ui/dialog/inkscape-preferences.cpp:522
-#: ../src/verbs.cpp:2522
+#: ../src/ui/dialog/inkscape-preferences.cpp:528
+#: ../src/verbs.cpp:2534
 #: ../share/extensions/lorem_ipsum.inx.h:5
 #: ../share/extensions/render_alphabetsoup.inx.h:5
 #: ../share/extensions/text_braille.inx.h:2
@@ -4009,8 +4010,8 @@ msgstr "_Точка отсчёта по X:"
 
 #: ../src/display/canvas-axonomgrid.cpp:398
 #: ../src/display/canvas-grid.cpp:672
-#: ../src/ui/dialog/inkscape-preferences.cpp:978
-#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:994
+#: ../src/ui/dialog/inkscape-preferences.cpp:1015
 msgid "X coordinate of grid origin"
 msgstr "Координата начала отсчёта по оси X"
 
@@ -4021,8 +4022,8 @@ msgstr "Т_очка отсчёта по Y:"
 
 #: ../src/display/canvas-axonomgrid.cpp:400
 #: ../src/display/canvas-grid.cpp:674
-#: ../src/ui/dialog/inkscape-preferences.cpp:979
-#: ../src/ui/dialog/inkscape-preferences.cpp:1000
+#: ../src/ui/dialog/inkscape-preferences.cpp:995
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
 msgid "Y coordinate of grid origin"
 msgstr "Координата начала отсчёта по оси Y"
 
@@ -4032,29 +4033,29 @@ msgid "Spacing _Y:"
 msgstr "И_нтервал по Y:"
 
 #: ../src/display/canvas-axonomgrid.cpp:402
-#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:1018
 msgid "Base length of z-axis"
 msgstr "Основная длина оси Z"
 
 #: ../src/display/canvas-axonomgrid.cpp:404
-#: ../src/ui/dialog/inkscape-preferences.cpp:1005
-#: ../src/widgets/toolbox.cpp:3422
+#: ../src/ui/dialog/inkscape-preferences.cpp:1021
+#: ../src/widgets/toolbox.cpp:3449
 msgid "Angle X:"
 msgstr "Угол X:"
 
 #: ../src/display/canvas-axonomgrid.cpp:404
-#: ../src/ui/dialog/inkscape-preferences.cpp:1005
+#: ../src/ui/dialog/inkscape-preferences.cpp:1021
 msgid "Angle of x-axis"
 msgstr "Угол оси X"
 
 #: ../src/display/canvas-axonomgrid.cpp:406
-#: ../src/ui/dialog/inkscape-preferences.cpp:1006
-#: ../src/widgets/toolbox.cpp:3501
+#: ../src/ui/dialog/inkscape-preferences.cpp:1022
+#: ../src/widgets/toolbox.cpp:3528
 msgid "Angle Z:"
 msgstr "Угол Z:"
 
 #: ../src/display/canvas-axonomgrid.cpp:406
-#: ../src/ui/dialog/inkscape-preferences.cpp:1006
+#: ../src/ui/dialog/inkscape-preferences.cpp:1022
 msgid "Angle of z-axis"
 msgstr "Угол оси Z"
 
@@ -4139,12 +4140,12 @@ msgid "Spacing _X:"
 msgstr "_Интервал по X:"
 
 #: ../src/display/canvas-grid.cpp:676
-#: ../src/ui/dialog/inkscape-preferences.cpp:982
+#: ../src/ui/dialog/inkscape-preferences.cpp:998
 msgid "Distance between vertical grid lines"
 msgstr "Расстояние между вертикальными линиями сетки"
 
 #: ../src/display/canvas-grid.cpp:678
-#: ../src/ui/dialog/inkscape-preferences.cpp:983
+#: ../src/ui/dialog/inkscape-preferences.cpp:999
 msgid "Distance between horizontal grid lines"
 msgstr "Расстояние между горизонтальными линиями сетки"
 
@@ -4325,7 +4326,7 @@ msgid "Quadrant point"
 msgstr "Точка квадранта"
 
 #: ../src/display/snap-indicator.cpp:196
-#: ../src/widgets/toolbox.cpp:6734
+#: ../src/widgets/toolbox.cpp:6961
 msgid "Center"
 msgstr "Выключка по центру"
 
@@ -4341,17 +4342,17 @@ msgstr "Линия шрифта текста"
 msgid " to "
 msgstr " к "
 
-#: ../src/document.cpp:445
+#: ../src/document.cpp:457
 #, c-format
 msgid "New document %d"
 msgstr "Новый документ %d"
 
-#: ../src/document.cpp:477
+#: ../src/document.cpp:489
 #, c-format
 msgid "Memory document %d"
 msgstr "Документ в памяти %d"
 
-#: ../src/document.cpp:632
+#: ../src/document.cpp:644
 #, c-format
 msgid "Unnamed document %d"
 msgstr "Безымянный документ %d"
@@ -4370,43 +4371,43 @@ msgstr "Закрываем контур"
 msgid "Draw path"
 msgstr "Создание контура"
 
-#: ../src/draw-context.cpp:866
+#: ../src/draw-context.cpp:867
 msgid "Creating single dot"
 msgstr "Рисуется точка"
 
-#: ../src/draw-context.cpp:867
+#: ../src/draw-context.cpp:868
 msgid "Create single dot"
 msgstr "Рисование точки"
 
 #. alpha of color under cursor, to show in the statusbar
 #. locale-sensitive printf is OK, since this goes to the UI, not into SVG
-#: ../src/dropper-context.cpp:302
+#: ../src/dropper-context.cpp:310
 #, c-format
 msgid " alpha %.3g"
 msgstr " альфа %.3g"
 
 #. where the color is picked, to show in the statusbar
-#: ../src/dropper-context.cpp:304
+#: ../src/dropper-context.cpp:312
 #, c-format
 msgid ", averaged with radius %d"
 msgstr ", усредненный с радиусом %d"
 
-#: ../src/dropper-context.cpp:304
+#: ../src/dropper-context.cpp:312
 #, c-format
 msgid " under cursor"
 msgstr " под курсором"
 
 #. message, to show in the statusbar
-#: ../src/dropper-context.cpp:306
+#: ../src/dropper-context.cpp:314
 msgid "<b>Release mouse</b> to set color."
 msgstr "<b>Отпустите кнопку мыши</b> для установки цвета."
 
-#: ../src/dropper-context.cpp:306
-#: ../src/tools-switch.cpp:208
+#: ../src/dropper-context.cpp:314
+#: ../src/tools-switch.cpp:216
 msgid "<b>Click</b> to set fill, <b>Shift+click</b> to set stroke; <b>drag</b> to average color in area; with <b>Alt</b> to pick inverse color; <b>Ctrl+C</b> to copy the color under mouse to clipboard"
 msgstr "<b>Щелчок</b> меняет цвет заполнения, <b>Shift+щелчок</b> меняет цвет обводки. <b>Перетаскивание</b> вычисляет средний цвет области. <b>Alt</b> берет обратный цвет. <b>Ctrl+C</b> копирует в буфер цвет под курсором."
 
-#: ../src/dropper-context.cpp:344
+#: ../src/dropper-context.cpp:352
 msgid "Set picked color"
 msgstr "Использование снятого пипеткой цвета"
 
@@ -4453,13 +4454,13 @@ msgstr "[Без изменений]"
 #. Edit
 #: ../src/event-log.cpp:264
 #: ../src/event-log.cpp:267
-#: ../src/verbs.cpp:2276
+#: ../src/verbs.cpp:2286
 msgid "_Undo"
 msgstr "_Отменить"
 
 #: ../src/event-log.cpp:274
 #: ../src/event-log.cpp:278
-#: ../src/verbs.cpp:2278
+#: ../src/verbs.cpp:2288
 msgid "_Redo"
 msgstr "Ве_рнуть"
 
@@ -4601,8 +4602,9 @@ msgstr "Адаптивная постеризация"
 #: ../src/libgdl/gdl-dock-placeholder.c:169
 #: ../src/live_effects/lpe-bendpath.cpp:56
 #: ../src/live_effects/lpe-patternalongpath.cpp:64
-#: ../src/widgets/toolbox.cpp:3095
-#: ../src/widgets/toolbox.cpp:4124
+#: ../src/widgets/toolbox.cpp:3122
+#: ../src/widgets/toolbox.cpp:4151
+#: ../src/widgets/toolbox.cpp:4475
 #: ../share/extensions/foldablebox.inx.h:9
 #: ../share/extensions/interp_att_g.inx.h:26
 msgid "Width"
@@ -4613,7 +4615,7 @@ msgstr "Ширина"
 #: ../src/extension/internal/bitmap/sample.cpp:41
 #: ../src/libgdl/gdl-dock.c:198
 #: ../src/libgdl/gdl-dock-placeholder.c:177
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 #: ../share/extensions/foldablebox.inx.h:4
 #: ../share/extensions/interp_att_g.inx.h:6
 msgid "Height"
@@ -4621,7 +4623,7 @@ msgstr "Высота"
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:42
 #: ../src/filter-enums.cpp:32
-#: ../src/live_effects/effect.cpp:96
+#: ../src/live_effects/effect.cpp:99
 #: ../src/live_effects/lpe-ruler.cpp:50
 msgid "Offset"
 msgstr "Смещение"
@@ -4937,21 +4939,21 @@ msgstr "Коррекция в HSB"
 #: ../src/flood-context.cpp:250
 #: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:237
-#: ../src/widgets/sp-color-scales.cpp:426
-#: ../src/widgets/sp-color-scales.cpp:427
-#: ../src/widgets/toolbox.cpp:4281
+#: ../src/widgets/sp-color-scales.cpp:438
+#: ../src/widgets/sp-color-scales.cpp:439
+#: ../src/widgets/toolbox.cpp:4308
 #: ../share/extensions/color_randomize.inx.h:2
 msgid "Hue"
 msgstr "Тон"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:42
 #: ../src/flood-context.cpp:251
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:846
 #: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:237
-#: ../src/widgets/sp-color-scales.cpp:429
-#: ../src/widgets/sp-color-scales.cpp:430
-#: ../src/widgets/toolbox.cpp:4296
+#: ../src/widgets/sp-color-scales.cpp:441
+#: ../src/widgets/sp-color-scales.cpp:442
+#: ../src/widgets/toolbox.cpp:4323
 #: ../share/extensions/color_randomize.inx.h:5
 msgid "Saturation"
 msgstr "Насыщенность"
@@ -5292,7 +5294,7 @@ msgstr "Сдвиг по вертикали, px"
 #: ../src/extension/internal/filter/filter.cpp:214
 #: ../src/extension/internal/filter/filter-file.cpp:148
 #: ../src/extension/internal/filter/snow.h:38
-#: ../src/ui/dialog/inkscape-preferences.cpp:733
+#: ../src/ui/dialog/inkscape-preferences.cpp:749
 msgid "Filters"
 msgstr "Фильтры"
 
@@ -5559,15 +5561,15 @@ msgstr "Adobe Illustrator 9.0 и выше (*.ai)"
 msgid "Open files saved in Adobe Illustrator 9.0 and newer versions"
 msgstr "Открыть файлы, сохраненные в Adobe Illustrator 9.0 и более новых версиях"
 
-#: ../src/extension/internal/pov-out.cpp:688
+#: ../src/extension/internal/pov-out.cpp:700
 msgid "PovRay Output"
 msgstr "Экспорт в POV-Ray"
 
-#: ../src/extension/internal/pov-out.cpp:693
+#: ../src/extension/internal/pov-out.cpp:705
 msgid "PovRay (*.pov) (paths and shapes only)"
 msgstr "POV-Ray, только контуры и фигуры (*.pov)"
 
-#: ../src/extension/internal/pov-out.cpp:694
+#: ../src/extension/internal/pov-out.cpp:706
 msgid "PovRay Raytracer File"
 msgstr "Файл трассировщика лучей POV-Ray"
 
@@ -5674,7 +5676,7 @@ msgid "default.svg"
 msgstr "default.svg"
 
 #: ../src/file.cpp:265
-#: ../src/file.cpp:1067
+#: ../src/file.cpp:1071
 #, c-format
 msgid "Failed to load the requested file %s"
 msgstr "Не удалось загрузить запрошенный файл %s"
@@ -5745,7 +5747,7 @@ msgstr "Документ сохранен."
 
 #. We are saving for the first time; create a unique default filename
 #: ../src/file.cpp:770
-#: ../src/file.cpp:1204
+#: ../src/file.cpp:1208
 #, c-format
 msgid "drawing%s"
 msgstr "рисунок%s"
@@ -5768,28 +5770,28 @@ msgstr "Выберите файл для сохранения копии"
 msgid "Select file to save to"
 msgstr "Выберите файл для сохранения"
 
-#: ../src/file.cpp:888
+#: ../src/file.cpp:892
 msgid "No changes need to be saved."
 msgstr "Файл не был изменен. Сохранение не требуется."
 
-#: ../src/file.cpp:905
+#: ../src/file.cpp:909
 msgid "Saving document..."
 msgstr "Выполняется сохранение документа..."
 
-#: ../src/file.cpp:1064
+#: ../src/file.cpp:1068
 msgid "Import"
 msgstr "Импорт"
 
-#: ../src/file.cpp:1114
+#: ../src/file.cpp:1118
 msgid "Select file to import"
 msgstr "Выберите файл для импорта"
 
-#: ../src/file.cpp:1226
+#: ../src/file.cpp:1230
 msgid "Select file to export to"
 msgstr "Выберите файл для экспорта"
 
-#: ../src/file.cpp:1469
-#: ../src/verbs.cpp:2265
+#: ../src/file.cpp:1473
+#: ../src/verbs.cpp:2275
 msgid "Import From Open Clip Art Library"
 msgstr "Импортировать из Open Clip Art Library"
 
@@ -5911,7 +5913,7 @@ msgstr "Освещенность в альфа"
 
 #. File
 #: ../src/filter-enums.cpp:72
-#: ../src/verbs.cpp:2242
+#: ../src/verbs.cpp:2252
 msgid "Default"
 msgstr "По умолчанию"
 
@@ -5976,38 +5978,39 @@ msgstr "Крупнее"
 #: ../src/ui/dialog/filter-effects-dialog.cpp:468
 #: ../src/ui/dialog/inkscape-preferences.cpp:259
 #: ../src/ui/dialog/inkscape-preferences.cpp:422
-#: ../src/ui/dialog/inkscape-preferences.cpp:554
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
-#: ../src/ui/dialog/inkscape-preferences.cpp:1216
-#: ../src/verbs.cpp:2239
+#: ../src/ui/dialog/inkscape-preferences.cpp:565
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
+#: ../src/ui/dialog/inkscape-preferences.cpp:1232
+#: ../src/verbs.cpp:2249
 #: ../src/widgets/stroke-style.cpp:765
-#: ../src/widgets/toolbox.cpp:3887
+#: ../src/widgets/toolbox.cpp:3914
 #: ../share/extensions/grid_polar.inx.h:16
 #: ../share/extensions/guides_creator.inx.h:15
+#: ../share/extensions/scour.inx.h:7
 msgid "None"
 msgstr "Нет"
 
 #: ../src/filter-enums.cpp:102
 #: ../src/flood-context.cpp:247
 #: ../src/widgets/sp-color-icc-selector.cpp:234
-#: ../src/widgets/sp-color-scales.cpp:400
-#: ../src/widgets/sp-color-scales.cpp:401
+#: ../src/widgets/sp-color-scales.cpp:412
+#: ../src/widgets/sp-color-scales.cpp:413
 msgid "Red"
 msgstr "Красный"
 
 #: ../src/filter-enums.cpp:103
 #: ../src/flood-context.cpp:248
 #: ../src/widgets/sp-color-icc-selector.cpp:234
-#: ../src/widgets/sp-color-scales.cpp:403
-#: ../src/widgets/sp-color-scales.cpp:404
+#: ../src/widgets/sp-color-scales.cpp:415
+#: ../src/widgets/sp-color-scales.cpp:416
 msgid "Green"
 msgstr "Зеленый"
 
 #: ../src/filter-enums.cpp:104
 #: ../src/flood-context.cpp:249
 #: ../src/widgets/sp-color-icc-selector.cpp:234
-#: ../src/widgets/sp-color-scales.cpp:406
-#: ../src/widgets/sp-color-scales.cpp:407
+#: ../src/widgets/sp-color-scales.cpp:418
+#: ../src/widgets/sp-color-scales.cpp:419
 msgid "Blue"
 msgstr "Синий"
 
@@ -6046,15 +6049,15 @@ msgstr "Видимые цвета"
 
 #: ../src/flood-context.cpp:252
 #: ../src/widgets/sp-color-icc-selector.cpp:237
-#: ../src/widgets/sp-color-scales.cpp:432
-#: ../src/widgets/sp-color-scales.cpp:433
-#: ../src/widgets/toolbox.cpp:4311
+#: ../src/widgets/sp-color-scales.cpp:444
+#: ../src/widgets/sp-color-scales.cpp:445
+#: ../src/widgets/toolbox.cpp:4338
 #: ../share/extensions/color_randomize.inx.h:3
 msgid "Lightness"
 msgstr "Яркость"
 
 #: ../src/flood-context.cpp:265
-#: ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/ui/dialog/inkscape-preferences.cpp:1088
 msgid "Small"
 msgstr "Маленькие"
 
@@ -6063,7 +6066,7 @@ msgid "Medium"
 msgstr "Средние"
 
 #: ../src/flood-context.cpp:267
-#: ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/ui/dialog/inkscape-preferences.cpp:1088
 msgid "Large"
 msgstr "Большие"
 
@@ -6310,10 +6313,10 @@ msgstr "Единица измерения:"
 #. Add the units menu.
 #: ../src/helper/units.cpp:37
 #: ../src/widgets/select-toolbar.cpp:504
-#: ../src/widgets/toolbox.cpp:1504
-#: ../src/widgets/toolbox.cpp:3156
-#: ../src/widgets/toolbox.cpp:5660
-#: ../src/widgets/toolbox.cpp:7203
+#: ../src/widgets/toolbox.cpp:1530
+#: ../src/widgets/toolbox.cpp:3183
+#: ../src/widgets/toolbox.cpp:5879
+#: ../src/widgets/toolbox.cpp:7635
 msgid "Units"
 msgstr "Единицы"
 
@@ -6565,45 +6568,45 @@ msgstr "Показать/скрыть строку состояния (вниз
 msgid "Verb \"%s\" Unknown"
 msgstr "Глагол \"%s\" неизвестен"
 
-#: ../src/interface.cpp:995
+#: ../src/interface.cpp:998
 msgid "Open _Recent"
 msgstr "Открыть н_едавние"
 
 #. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1096
+#: ../src/interface.cpp:1099
 #, c-format
 msgid "Enter group #%s"
 msgstr "Войти в группу #%s"
 
-#: ../src/interface.cpp:1107
+#: ../src/interface.cpp:1110
 msgid "Go to parent"
 msgstr "На уровень выше"
 
-#: ../src/interface.cpp:1198
-#: ../src/interface.cpp:1284
-#: ../src/interface.cpp:1387
+#: ../src/interface.cpp:1201
+#: ../src/interface.cpp:1287
+#: ../src/interface.cpp:1390
 #: ../src/ui/widget/selected-style.cpp:468
 msgid "Drop color"
 msgstr "Перенос цвета"
 
-#: ../src/interface.cpp:1237
-#: ../src/interface.cpp:1347
+#: ../src/interface.cpp:1240
+#: ../src/interface.cpp:1350
 msgid "Drop color on gradient"
 msgstr "Перенос цвета на градиент"
 
-#: ../src/interface.cpp:1400
+#: ../src/interface.cpp:1403
 msgid "Could not parse SVG data"
 msgstr "Невозможно разобрать данные SVG"
 
-#: ../src/interface.cpp:1439
+#: ../src/interface.cpp:1442
 msgid "Drop SVG"
 msgstr "Drop SVG"
 
-#: ../src/interface.cpp:1495
+#: ../src/interface.cpp:1498
 msgid "Drop bitmap image"
 msgstr "Импорт растра"
 
-#: ../src/interface.cpp:1587
+#: ../src/interface.cpp:1590
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do you want to replace it?</span>\n"
@@ -6614,7 +6617,7 @@ msgstr ""
 "\n"
 "Этот файл уже есть в каталоге \"%s\". Замена перезапишет его содержание."
 
-#: ../src/interface.cpp:1594
+#: ../src/interface.cpp:1597
 #: ../share/extensions/web-set-att.inx.h:5
 #: ../share/extensions/web-transmit-att.inx.h:5
 msgid "Replace"
@@ -6673,24 +6676,24 @@ msgstr "Не удалось выполнить вспомогательную п
 msgid "Node or handle drag canceled."
 msgstr "Перемещение отменено."
 
-#: ../src/knotholder.cpp:134
+#: ../src/knotholder.cpp:135
 msgid "Change handle"
 msgstr "Смена рычага"
 
-#: ../src/knotholder.cpp:213
+#: ../src/knotholder.cpp:214
 msgid "Move handle"
 msgstr "Смещение рычага"
 
 #. TRANSLATORS: This refers to the pattern that's inside the object
-#: ../src/knotholder.cpp:234
+#: ../src/knotholder.cpp:235
 msgid "<b>Move</b> the pattern fill inside the object"
 msgstr "<b>Двигать</b> текстурную заливку внутри объекта"
 
-#: ../src/knotholder.cpp:237
+#: ../src/knotholder.cpp:238
 msgid "<b>Scale</b> the pattern fill; uniformly if with <b>Ctrl</b>"
 msgstr "<b>Масштабировать</b> текстурную заливку; с <b>Ctrl</b> — пропорционально"
 
-#: ../src/knotholder.cpp:240
+#: ../src/knotholder.cpp:241
 msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
 msgstr "<b>Вращать</b> текстурную заливку, <b>Ctrl</b> ограничивает угол"
 
@@ -6711,8 +6714,8 @@ msgid "Dockbar style to show items on it"
 msgstr "Dockbar style to show items on it"
 
 #: ../src/libgdl/gdl-dock.c:175
-#: ../src/ui/dialog/inkscape-preferences.cpp:549
-#: ../src/ui/dialog/inkscape-preferences.cpp:570
+#: ../src/ui/dialog/inkscape-preferences.cpp:560
+#: ../src/ui/dialog/inkscape-preferences.cpp:581
 msgid "Floating"
 msgstr "Свободно перемещаются по экрану"
 
@@ -6908,7 +6911,7 @@ msgstr "The new dock controller %p is automatic.  Only manual dock objects shoul
 #: ../src/ui/dialog/align-and-distribute.cpp:919
 #: ../src/ui/dialog/document-properties.cpp:118
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1410
-#: ../src/widgets/desktop-widget.cpp:1573
+#: ../src/widgets/desktop-widget.cpp:1572
 msgid "Page"
 msgstr "Страница"
 
@@ -6917,7 +6920,7 @@ msgid "The index of the current page"
 msgstr "Индекс текущей страницы"
 
 #: ../src/libgdl/gdl-dock-object.c:120
-#: ../src/ui/widget/page-sizer.cpp:217
+#: ../src/ui/widget/page-sizer.cpp:237
 msgid "Name"
 msgstr "Имя"
 
@@ -7063,153 +7066,158 @@ msgstr "Dockitem which 'owns' this tablabel"
 msgid "Ignoring font without family that will crash Pango"
 msgstr "Игнорирование шрифта без гарнитуры приведет к обрушиванию Pango"
 
-#: ../src/live_effects/effect.cpp:86
+#: ../src/live_effects/effect.cpp:88
 msgid "doEffect stack test"
 msgstr "Тест эффектов"
 
-#: ../src/live_effects/effect.cpp:87
+#: ../src/live_effects/effect.cpp:89
 msgid "Angle bisector"
 msgstr "Угловая биссектриса"
 
 #. TRANSLATORS: boolean operations
-#: ../src/live_effects/effect.cpp:89
+#: ../src/live_effects/effect.cpp:91
 msgid "Boolops"
 msgstr "Логические операции"
 
-#: ../src/live_effects/effect.cpp:90
+#: ../src/live_effects/effect.cpp:92
 msgid "Circle (by center and radius)"
 msgstr "Окружность (центр+радиус)"
 
-#: ../src/live_effects/effect.cpp:91
+#: ../src/live_effects/effect.cpp:93
 msgid "Circle by 3 points"
 msgstr "Окружность через три точки"
 
-#: ../src/live_effects/effect.cpp:92
+#: ../src/live_effects/effect.cpp:94
 msgid "Dynamic stroke"
 msgstr "Динамический штрих"
 
-#: ../src/live_effects/effect.cpp:93
+#: ../src/live_effects/effect.cpp:95
+#: ../share/extensions/extrude.inx.h:1
+msgid "Extrude"
+msgstr "Выдавливание"
+
+#: ../src/live_effects/effect.cpp:96
 msgid "Lattice Deformation"
 msgstr "Деформация по сетке"
 
-#: ../src/live_effects/effect.cpp:94
+#: ../src/live_effects/effect.cpp:97
 msgid "Line Segment"
 msgstr "Сегмент линии"
 
-#: ../src/live_effects/effect.cpp:95
+#: ../src/live_effects/effect.cpp:98
 msgid "Mirror symmetry"
 msgstr "Зеркальная симметрия"
 
-#: ../src/live_effects/effect.cpp:97
+#: ../src/live_effects/effect.cpp:100
 msgid "Parallel"
 msgstr "Параллель"
 
-#: ../src/live_effects/effect.cpp:98
+#: ../src/live_effects/effect.cpp:101
 msgid "Path length"
 msgstr "Длина контура"
 
-#: ../src/live_effects/effect.cpp:99
+#: ../src/live_effects/effect.cpp:102
 msgid "Perpendicular bisector"
 msgstr "Перпендикулярная биссектриса"
 
-#: ../src/live_effects/effect.cpp:100
+#: ../src/live_effects/effect.cpp:103
 msgid "Perspective path"
 msgstr "Контур в перспективе"
 
-#: ../src/live_effects/effect.cpp:101
+#: ../src/live_effects/effect.cpp:104
 msgid "Rotate copies"
 msgstr "Вращение копий"
 
-#: ../src/live_effects/effect.cpp:102
+#: ../src/live_effects/effect.cpp:105
 msgid "Recursive skeleton"
 msgstr "Рекурсивный скелет"
 
-#: ../src/live_effects/effect.cpp:103
+#: ../src/live_effects/effect.cpp:106
 msgid "Tangent to curve"
 msgstr "Касательная к кривой"
 
-#: ../src/live_effects/effect.cpp:104
+#: ../src/live_effects/effect.cpp:107
 msgid "Text label"
 msgstr "Текстовая метка"
 
 #. 0.46
-#: ../src/live_effects/effect.cpp:107
+#: ../src/live_effects/effect.cpp:110
 msgid "Bend"
 msgstr "Изгиб"
 
-#: ../src/live_effects/effect.cpp:108
+#: ../src/live_effects/effect.cpp:111
 msgid "Gears"
 msgstr "Шестеренка"
 
-#: ../src/live_effects/effect.cpp:109
+#: ../src/live_effects/effect.cpp:112
 msgid "Pattern Along Path"
 msgstr "Текстура по контуру"
 
 #. for historic reasons, this effect is called skeletal(strokes) in Inkscape:SVG
-#: ../src/live_effects/effect.cpp:110
+#: ../src/live_effects/effect.cpp:113
 msgid "Stitch Sub-Paths"
 msgstr "Сшивка субконтуров"
 
 #. 0.47
-#: ../src/live_effects/effect.cpp:112
+#: ../src/live_effects/effect.cpp:115
 msgid "VonKoch"
 msgstr "Фон Кох"
 
-#: ../src/live_effects/effect.cpp:113
+#: ../src/live_effects/effect.cpp:116
 msgid "Knot"
 msgstr "Кельтский узел"
 
-#: ../src/live_effects/effect.cpp:114
+#: ../src/live_effects/effect.cpp:117
 msgid "Construct grid"
 msgstr "Конструирование сетки"
 
-#: ../src/live_effects/effect.cpp:115
+#: ../src/live_effects/effect.cpp:118
 msgid "Spiro spline"
 msgstr "Кривая Спиро"
 
-#: ../src/live_effects/effect.cpp:116
+#: ../src/live_effects/effect.cpp:119
 msgid "Envelope Deformation"
 msgstr "Деформация по огибающей"
 
-#: ../src/live_effects/effect.cpp:117
+#: ../src/live_effects/effect.cpp:120
 msgid "Interpolate Sub-Paths"
 msgstr "Интерполяция субконтуров"
 
-#: ../src/live_effects/effect.cpp:118
+#: ../src/live_effects/effect.cpp:121
 msgid "Hatches (rough)"
 msgstr "Внутренняя штриховка"
 
-#: ../src/live_effects/effect.cpp:119
+#: ../src/live_effects/effect.cpp:122
 msgid "Sketch"
 msgstr "Карандашный набросок"
 
-#: ../src/live_effects/effect.cpp:120
+#: ../src/live_effects/effect.cpp:123
 msgid "Ruler"
 msgstr "Линейка"
 
-#: ../src/live_effects/effect.cpp:273
+#: ../src/live_effects/effect.cpp:279
 msgid "Is visible?"
 msgstr "Видимость эффекта"
 
-#: ../src/live_effects/effect.cpp:273
+#: ../src/live_effects/effect.cpp:279
 msgid "If unchecked, the effect remains applied to the object but is temporarily disabled on canvas"
 msgstr "Если флажок снят, эффект остается примененным, но не отображается на холсте"
 
-#: ../src/live_effects/effect.cpp:294
+#: ../src/live_effects/effect.cpp:300
 msgid "No effect"
 msgstr "Без эффекта"
 
-#: ../src/live_effects/effect.cpp:341
+#: ../src/live_effects/effect.cpp:347
 #, c-format
 msgid "Please specify a parameter path for the LPE '%s' with %d mouse clicks"
 msgstr "Укажите параметрический контур для LPE '%s' %d щелчками мышью"
 
-#: ../src/live_effects/effect.cpp:639
+#: ../src/live_effects/effect.cpp:645
 #, c-format
 msgid "Editing parameter <b>%s</b>."
 msgstr "Правка параметра <b>%s</b>."
 
-#: ../src/live_effects/effect.cpp:644
+#: ../src/live_effects/effect.cpp:650
 msgid "None of the applied path effect's parameters can be edited on-canvas."
 msgstr "Ни один из параметров примененного эффекта не может быть изменен на холсте."
 
@@ -7412,62 +7420,62 @@ msgid "If true, the spacing between intermediates is constant along the length o
 msgstr "Если включено, интервал между промежуточными фигурами не меняется на протяжении всего контура. Если выключено, расстояние меняется в зависимости от положения узлов на контуре траектории."
 
 #. initialise your parameters here:
-#: ../src/live_effects/lpe-knot.cpp:328
+#: ../src/live_effects/lpe-knot.cpp:329
 msgid "Fixed width"
 msgstr "Фиксированная толщина"
 
-#: ../src/live_effects/lpe-knot.cpp:328
+#: ../src/live_effects/lpe-knot.cpp:329
 msgid "Size of hidden region of lower string"
 msgstr "Размер скрываемой области нижней нити"
 
-#: ../src/live_effects/lpe-knot.cpp:329
+#: ../src/live_effects/lpe-knot.cpp:330
 msgid "In units of stroke width"
 msgstr "В единицах толщины обводки"
 
-#: ../src/live_effects/lpe-knot.cpp:329
+#: ../src/live_effects/lpe-knot.cpp:330
 msgid "Consider 'Interruption width' as a ratio of stroke width"
 msgstr "Считать толщину прерывания коэффициентом толщины штриха"
 
-#: ../src/live_effects/lpe-knot.cpp:330
+#: ../src/live_effects/lpe-knot.cpp:331
 #: ../src/widgets/stroke-style.cpp:1093
 #: ../share/extensions/edge3d.inx.h:9
 msgid "Stroke width"
 msgstr "Прибавить толщину обводки"
 
-#: ../src/live_effects/lpe-knot.cpp:330
+#: ../src/live_effects/lpe-knot.cpp:331
 msgid "Add the stroke width to the interruption size"
 msgstr "Добавить толщину обводки к толщине прерывания"
 
-#: ../src/live_effects/lpe-knot.cpp:331
+#: ../src/live_effects/lpe-knot.cpp:332
 msgid "Crossing path stroke width"
 msgstr "Прибавить толщину пересекающего контура"
 
-#: ../src/live_effects/lpe-knot.cpp:331
+#: ../src/live_effects/lpe-knot.cpp:332
 msgid "Add crossed stroke width to the interruption size"
 msgstr "Добавить толщину пересекающего контура к толщине прерывания"
 
-#: ../src/live_effects/lpe-knot.cpp:332
+#: ../src/live_effects/lpe-knot.cpp:333
 msgid "Switcher size"
 msgstr "Размер переключателя:"
 
-#: ../src/live_effects/lpe-knot.cpp:332
+#: ../src/live_effects/lpe-knot.cpp:333
 msgid "Orientation indicator/switcher size"
 msgstr "Размер индикатора-переключателя направления"
 
-#: ../src/live_effects/lpe-knot.cpp:333
+#: ../src/live_effects/lpe-knot.cpp:334
 msgid "Crossing Signs"
 msgstr "Знаки пересечения"
 
-#: ../src/live_effects/lpe-knot.cpp:333
+#: ../src/live_effects/lpe-knot.cpp:334
 msgid "Crossings signs"
 msgstr "Знаки пересечения"
 
-#: ../src/live_effects/lpe-knot.cpp:344
+#: ../src/live_effects/lpe-knot.cpp:345
 msgid "Drag to select a crossing, click to flip it"
 msgstr "Перетащите для выбора пересечения, щелчком измените его тип"
 
 #. / @todo Is this the right verb?
-#: ../src/live_effects/lpe-knot.cpp:637
+#: ../src/live_effects/lpe-knot.cpp:638
 msgid "Change knot crossing"
 msgstr "Смена типа пересечения"
 
@@ -7737,12 +7745,12 @@ msgid "Both"
 msgstr "Оба"
 
 #: ../src/live_effects/lpe-ruler.cpp:35
-#: ../src/widgets/toolbox.cpp:5168
+#: ../src/widgets/toolbox.cpp:5387
 msgid "Start"
 msgstr "Начало"
 
 #: ../src/live_effects/lpe-ruler.cpp:36
-#: ../src/widgets/toolbox.cpp:5181
+#: ../src/widgets/toolbox.cpp:5400
 msgid "End"
 msgstr "Конец"
 
@@ -8029,7 +8037,7 @@ msgstr "Вставить параметр контура"
 msgid "Link path parameter to path"
 msgstr "Связать параметр контура с контуром"
 
-#: ../src/live_effects/parameter/point.cpp:90
+#: ../src/live_effects/parameter/point.cpp:91
 msgid "Change point parameter"
 msgstr "Смена точечного параметра"
 
@@ -8285,13 +8293,13 @@ msgstr "_Создать"
 #. TODO look at some dynamic option for changing the menu tree:
 #. "       <verb verb-id=\"DialogInput2\" />\n"
 #: ../src/menus-skeleton.h:49
-#: ../src/verbs.cpp:2488
-#: ../src/verbs.cpp:2494
+#: ../src/verbs.cpp:2498
+#: ../src/verbs.cpp:2504
 msgid "_Edit"
 msgstr "_Правка"
 
 #: ../src/menus-skeleton.h:59
-#: ../src/verbs.cpp:2288
+#: ../src/verbs.cpp:2298
 msgid "Paste Si_ze"
 msgstr "Вставить _размер"
 
@@ -8315,6 +8323,7 @@ msgstr "Отобр_ажение"
 msgid "Show/Hide"
 msgstr "Показать или спрятать"
 
+#. "       <verb verb-id=\"DialogScript\" />\n"
 #. Not quite ready to be in the menus.
 #. "       <verb verb-id=\"FocusToggle\" />\n"
 #: ../src/menus-skeleton.h:139
@@ -8465,7 +8474,7 @@ msgid "Cannot find path between nodes."
 msgstr "Невозможно найти контур между узлами."
 
 #: ../src/nodepath.cpp:2804
-#: ../src/widgets/toolbox.cpp:1343
+#: ../src/widgets/toolbox.cpp:1369
 msgid "Delete segment"
 msgstr "Удаление сегмента"
 
@@ -8479,7 +8488,7 @@ msgid "Change node type"
 msgstr "Смена типа узла"
 
 #: ../src/nodepath.cpp:3529
-#: ../src/widgets/toolbox.cpp:1300
+#: ../src/widgets/toolbox.cpp:1326
 msgid "Delete node"
 msgstr "Удалить узел"
 
@@ -8826,7 +8835,7 @@ msgstr "Переключение точек схода"
 msgid "Toggle multiple vanishing points"
 msgstr "Переключение нескольких точек схода"
 
-#: ../src/preferences.cpp:101
+#: ../src/preferences.cpp:129
 msgid "Inkscape will run with default settings, and new settings will not be saved. "
 msgstr ""
 "Inkscape запустится с исходными настройками.\n"
@@ -8835,7 +8844,7 @@ msgstr ""
 #. the creation failed
 #. _reportError(Glib::ustring::compose(_("Cannot create profile directory %1."),
 #. Glib::filename_to_utf8(_prefs_dir)), not_saved);
-#: ../src/preferences.cpp:116
+#: ../src/preferences.cpp:144
 #, c-format
 msgid "Cannot create profile directory %s."
 msgstr "Невозможно создать каталог с профилем %s."
@@ -8843,7 +8852,7 @@ msgstr "Невозможно создать каталог с профилем %
 #. The profile dir is not actually a directory
 #. _reportError(Glib::ustring::compose(_("%1 is not a valid directory."),
 #. Glib::filename_to_utf8(_prefs_dir)), not_saved);
-#: ../src/preferences.cpp:134
+#: ../src/preferences.cpp:162
 #, c-format
 msgid "%s is not a valid directory."
 msgstr "%s в действительности не является каталогом."
@@ -8851,35 +8860,27 @@ msgstr "%s в действительности не является катал
 #. The write failed.
 #. _reportError(Glib::ustring::compose(_("Failed to create the preferences file %1."),
 #. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:145
+#: ../src/preferences.cpp:173
 #, c-format
 msgid "Failed to create the preferences file %s."
 msgstr "Не удалось загрузить файл параметров %s."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 is not a regular file."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:163
+#: ../src/preferences.cpp:209
 #, c-format
 msgid "The preferences file %s is not a regular file."
 msgstr "Файл параметров программы %s не является обычным файлом."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 could not be read."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:175
+#: ../src/preferences.cpp:219
 #, c-format
 msgid "The preferences file %s could not be read."
 msgstr "Не удалось прочитать файл параметров программы %s."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 is not a valid XML document."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:188
+#: ../src/preferences.cpp:230
 #, c-format
 msgid "The preferences file %s is not a valid XML document."
 msgstr "Файл параметров программы %s не является корректным документом XML."
 
-#. _reportError(Glib::ustring::compose(_("The file %1 is not a valid Inkscape preferences file."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:199
+#: ../src/preferences.cpp:239
 #, c-format
 msgid "The file %s is not a valid Inkscape preferences file."
 msgstr "%s не является корректным файлом параметров Inkscape."
@@ -9048,7 +9049,7 @@ msgid "Extent or scope of this document."
 msgstr "Охват или тематические рамки этого документа."
 
 #: ../src/rdf.cpp:273
-#: ../src/ui/widget/page-sizer.cpp:219
+#: ../src/ui/widget/page-sizer.cpp:239
 msgid "Description"
 msgstr "Описание"
 
@@ -9155,8 +9156,8 @@ msgstr "<b>Ничего</b> не удалено."
 #: ../src/selection-chemistry.cpp:221
 #: ../src/text-context.cpp:995
 #: ../src/ui/dialog/swatches.cpp:471
-#: ../src/widgets/toolbox.cpp:1304
-#: ../src/widgets/toolbox.cpp:5752
+#: ../src/widgets/toolbox.cpp:1330
+#: ../src/widgets/toolbox.cpp:5971
 msgid "Delete"
 msgstr "Удаление"
 
@@ -9186,7 +9187,7 @@ msgid "<b>No groups</b> to ungroup in the selection."
 msgstr "В выделении <b>нет групп</b> для разгруппирования."
 
 #: ../src/selection-chemistry.cpp:598
-#: ../src/sp-item-group.cpp:515
+#: ../src/sp-item-group.cpp:516
 msgid "Ungroup"
 msgstr "Разгруппировать"
 
@@ -9488,17 +9489,17 @@ msgstr "Выделите <b>объект</b>, по  размеру которо
 
 #. Fit Page
 #: ../src/selection-chemistry.cpp:2944
-#: ../src/verbs.cpp:2723
+#: ../src/verbs.cpp:2739
 msgid "Fit Page to Selection"
 msgstr "Cтраница до выделения"
 
 #: ../src/selection-chemistry.cpp:2969
-#: ../src/verbs.cpp:2725
+#: ../src/verbs.cpp:2741
 msgid "Fit Page to Drawing"
 msgstr "Откадрировать холст до рисунка"
 
 #: ../src/selection-chemistry.cpp:2985
-#: ../src/verbs.cpp:2727
+#: ../src/verbs.cpp:2743
 msgid "Fit Page to Selection or Drawing"
 msgstr "Откадрировать холст до выделения или рисунка"
 
@@ -9513,12 +9514,12 @@ msgstr "Ссылка"
 msgid "Circle"
 msgstr "Окружность"
 
-#. ellipse
+#. Ellipse
 #: ../src/selection-describer.cpp:49
 #: ../src/selection-describer.cpp:76
-#: ../src/ui/dialog/inkscape-preferences.cpp:474
-#: ../src/verbs.cpp:2510
-#: ../src/widgets/toolbox.cpp:3890
+#: ../src/ui/dialog/inkscape-preferences.cpp:480
+#: ../src/verbs.cpp:2522
+#: ../src/widgets/toolbox.cpp:3917
 msgid "Ellipse"
 msgstr "Эллипс"
 
@@ -9535,7 +9536,7 @@ msgid "Path"
 msgstr "Контур"
 
 #: ../src/selection-describer.cpp:61
-#: ../src/widgets/toolbox.cpp:2726
+#: ../src/widgets/toolbox.cpp:2753
 msgid "Polygon"
 msgstr "Многоугольник"
 
@@ -9545,15 +9546,15 @@ msgstr "Полилиния"
 
 #. Rectangle
 #: ../src/selection-describer.cpp:65
-#: ../src/ui/dialog/inkscape-preferences.cpp:464
-#: ../src/verbs.cpp:2506
+#: ../src/ui/dialog/inkscape-preferences.cpp:470
+#: ../src/verbs.cpp:2518
 msgid "Rectangle"
 msgstr "Прямоугольник"
 
 #. 3D box
 #: ../src/selection-describer.cpp:67
-#: ../src/ui/dialog/inkscape-preferences.cpp:469
-#: ../src/verbs.cpp:2508
+#: ../src/ui/dialog/inkscape-preferences.cpp:475
+#: ../src/verbs.cpp:2520
 msgid "3D Box"
 msgstr "Паралеллепипед"
 
@@ -9568,18 +9569,18 @@ msgstr "Клон"
 msgid "Offset path"
 msgstr "Растянутый контур"
 
-#. spiral
+#. Spiral
 #: ../src/selection-describer.cpp:80
-#: ../src/ui/dialog/inkscape-preferences.cpp:482
-#: ../src/verbs.cpp:2514
+#: ../src/ui/dialog/inkscape-preferences.cpp:488
+#: ../src/verbs.cpp:2526
 msgid "Spiral"
 msgstr "Спираль"
 
-#. star
+#. Star
 #: ../src/selection-describer.cpp:82
-#: ../src/ui/dialog/inkscape-preferences.cpp:478
-#: ../src/verbs.cpp:2512
-#: ../src/widgets/toolbox.cpp:2733
+#: ../src/ui/dialog/inkscape-preferences.cpp:484
+#: ../src/verbs.cpp:2524
+#: ../src/widgets/toolbox.cpp:2760
 msgid "Star"
 msgstr "Звезда"
 
@@ -9651,6 +9652,7 @@ msgstr "<b>Shift+D</b> выделяет блок"
 
 #. this is only used with 2 or more objects
 #: ../src/selection-describer.cpp:211
+#: ../src/spray-context.cpp:288
 #: ../src/tweak-context.cpp:202
 #, c-format
 msgid "<b>%i</b> object selected"
@@ -9763,7 +9765,7 @@ msgstr "Переместить <b>центр</b> в %s, %s"
 msgid "<b>Move</b> by %s, %s; with <b>Ctrl</b> to restrict to horizontal/vertical; with <b>Shift</b> to disable snapping"
 msgstr "<b>Перемещение</b> на %s, %s; с <b>Ctrl</b> только по горизонтали/вертикали; с <b>Shift</b> без прилипания"
 
-#: ../src/shape-editor.cpp:471
+#: ../src/shape-editor.cpp:472
 msgid "Drag curve"
 msgstr "Перетаскивание кривой"
 
@@ -9847,16 +9849,16 @@ msgstr "горизонтальная, в позиции %s"
 msgid "at %d degrees, through (%s,%s)"
 msgstr "под углом %d градусов, через (%s,%s)"
 
-#: ../src/sp-image.cpp:1128
+#: ../src/sp-image.cpp:1135
 msgid "embedded"
 msgstr "включенное"
 
-#: ../src/sp-image.cpp:1136
+#: ../src/sp-image.cpp:1143
 #, c-format
 msgid "<b>Image with bad reference</b>: %s"
 msgstr "<b>Изображение без ссылки</b>: %s"
 
-#: ../src/sp-image.cpp:1137
+#: ../src/sp-image.cpp:1144
 #, c-format
 msgid "<b>Image</b> %d &#215; %d: %s"
 msgstr "<b>Изображение</b> %d x %d: %s"
@@ -9878,31 +9880,31 @@ msgstr "<b>Спираль</b>: радиус %s, угол %5g&#176;; <b>Ctrl</b>
 msgid "Create spiral"
 msgstr "Создание спирали"
 
-#: ../src/sp-item.cpp:1035
+#: ../src/sp-item.cpp:1039
 msgid "Object"
 msgstr "Объект"
 
-#: ../src/sp-item.cpp:1052
+#: ../src/sp-item.cpp:1056
 #, c-format
 msgid "%s; <i>clipped</i>"
 msgstr "%s; <i>под обтравочным контуром</i>"
 
-#: ../src/sp-item.cpp:1057
+#: ../src/sp-item.cpp:1061
 #, c-format
 msgid "%s; <i>masked</i>"
 msgstr "%s; <i>маскирован</i>"
 
-#: ../src/sp-item.cpp:1065
+#: ../src/sp-item.cpp:1069
 #, c-format
 msgid "%s; <i>filtered (%s)</i>"
 msgstr "%s; <i>с фильтром (%s)</i>"
 
-#: ../src/sp-item.cpp:1067
+#: ../src/sp-item.cpp:1071
 #, c-format
 msgid "%s; <i>filtered</i>"
 msgstr "%s; <i>с фильтром</i>"
 
-#: ../src/sp-item-group.cpp:760
+#: ../src/sp-item-group.cpp:761
 #, c-format
 msgid "<b>Group</b> of <b>%d</b> object"
 msgid_plural "<b>Group</b> of <b>%d</b> objects"
@@ -9965,76 +9967,76 @@ msgstr "Один из объектов <b>не является контуром
 msgid "Select <b>stroked path(s)</b> to convert stroke to path."
 msgstr "Выделите <b>объекты с обводкой</b> для преобразования обводки в контур."
 
-#: ../src/splivarot.cpp:954
+#: ../src/splivarot.cpp:976
 msgid "Convert stroke to path"
 msgstr "Оконтуривание обводки"
 
 #. TRANSLATORS: "to outline" means "to convert stroke to path"
-#: ../src/splivarot.cpp:957
+#: ../src/splivarot.cpp:979
 msgid "<b>No stroked paths</b> in the selection."
 msgstr "В выделении <b>нет контуров с обводкой</b>."
 
-#: ../src/splivarot.cpp:1040
+#: ../src/splivarot.cpp:1062
 msgid "Selected object is <b>not a path</b>, cannot inset/outset."
 msgstr "Выделенный объект <b>не является контуром</b>, втяжка/растяжка невозможны."
 
-#: ../src/splivarot.cpp:1159
-#: ../src/splivarot.cpp:1228
+#: ../src/splivarot.cpp:1181
+#: ../src/splivarot.cpp:1250
 msgid "Create linked offset"
 msgstr "Создание связанной втяжки"
 
-#: ../src/splivarot.cpp:1160
-#: ../src/splivarot.cpp:1229
+#: ../src/splivarot.cpp:1182
+#: ../src/splivarot.cpp:1251
 msgid "Create dynamic offset"
 msgstr "Создание динамической втяжки"
 
-#: ../src/splivarot.cpp:1254
+#: ../src/splivarot.cpp:1276
 msgid "Select <b>path(s)</b> to inset/outset."
 msgstr "Выделите <b>контур</b> для втяжки/растяжки."
 
-#: ../src/splivarot.cpp:1472
+#: ../src/splivarot.cpp:1494
 msgid "Outset path"
 msgstr "Растяжка контура"
 
-#: ../src/splivarot.cpp:1472
+#: ../src/splivarot.cpp:1494
 msgid "Inset path"
 msgstr "Втяжка контура"
 
-#: ../src/splivarot.cpp:1474
+#: ../src/splivarot.cpp:1496
 msgid "<b>No paths</b> to inset/outset in the selection."
 msgstr "В выделении <b>нет контуров</b> для втяжки/растяжки."
 
-#: ../src/splivarot.cpp:1652
+#: ../src/splivarot.cpp:1674
 msgid "Simplifying paths (separately):"
 msgstr "Упрощение контуров (раздельно)"
 
-#: ../src/splivarot.cpp:1654
+#: ../src/splivarot.cpp:1676
 msgid "Simplifying paths:"
 msgstr "Упрощение контуров"
 
-#: ../src/splivarot.cpp:1691
+#: ../src/splivarot.cpp:1713
 #, c-format
 msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
 msgstr "%s: <b>%d</b> из <b>%d</b> контуров упрощено..."
 
-#: ../src/splivarot.cpp:1703
+#: ../src/splivarot.cpp:1725
 #, c-format
 msgid "<b>%d</b> paths simplified."
 msgstr "<b>%d</b> контуров упрощено."
 
-#: ../src/splivarot.cpp:1717
+#: ../src/splivarot.cpp:1739
 msgid "Select <b>path(s)</b> to simplify."
 msgstr "Выделите <b>контур(ы)</b> для упрощения."
 
-#: ../src/splivarot.cpp:1731
+#: ../src/splivarot.cpp:1753
 msgid "Simplify"
 msgstr "Упрощение контура"
 
-#: ../src/splivarot.cpp:1733
+#: ../src/splivarot.cpp:1755
 msgid "<b>No paths</b> to simplify in the selection."
 msgstr "В выделении <b>нет контуров</b> для упрощения."
 
-#: ../src/sp-lpe-item.cpp:348
+#: ../src/sp-lpe-item.cpp:363
 msgid "An exception occurred during execution of the Path Effect."
 msgstr "Прерывание при выполнении контурного эффекта"
 
@@ -10166,6 +10168,51 @@ msgstr "<b>Клон</b>: %s"
 msgid "<b>Orphaned clone</b>"
 msgstr "<b>Осиротевший клон</b>"
 
+#: ../src/spray-context.cpp:290
+#: ../src/tweak-context.cpp:204
+#, c-format
+msgid "<b>Nothing</b> selected"
+msgstr "<b>Ничего</b> не выделено"
+
+#: ../src/spray-context.cpp:296
+#, c-format
+msgid "%s. Drag, click or scroll to spray <b>copies</b> of the initial selection"
+msgstr ""
+
+#: ../src/spray-context.cpp:299
+#, c-format
+msgid "%s. Drag, click or scroll to spray <b>clones</b> of the initial selection"
+msgstr ""
+
+#: ../src/spray-context.cpp:302
+#, c-format
+msgid "%s. Drag, click or scroll to spray in a <b>single path</b> of the initial selection"
+msgstr ""
+
+#: ../src/spray-context.cpp:305
+#, c-format
+msgid "%s. Modify <b>spray</b> options"
+msgstr ""
+
+#: ../src/spray-context.cpp:917
+#, fuzzy
+msgid "<b>Nothing selected!</b> Select objects to spray."
+msgstr "<b>Ничего не выделено!</b> Выделите объект(ы) для коррекции."
+
+#: ../src/spray-context.cpp:1025
+#: ../src/widgets/toolbox.cpp:4525
+msgid "Spray with copies"
+msgstr "Распылять копии"
+
+#: ../src/spray-context.cpp:1029
+#: ../src/widgets/toolbox.cpp:4532
+msgid "Spray with clones"
+msgstr "Распылять клоны"
+
+#: ../src/spray-context.cpp:1033
+msgid "Spray in single path"
+msgstr "Распылять по одиночному контуру"
+
 #: ../src/star-context.cpp:333
 msgid "<b>Ctrl</b>: snap angle; keep rays radial"
 msgstr "<b>Ctrl</b>: ограничивать угол; лучи по радиусу без перекоса"
@@ -10202,7 +10249,7 @@ msgid "The flowed text(s) must be <b>visible</b> in order to be put on a path."
 msgstr "Заверстанный текст должен быть <b>видимым</b>, чтобы быть размещенным по контуру."
 
 #: ../src/text-chemistry.cpp:192
-#: ../src/verbs.cpp:2364
+#: ../src/verbs.cpp:2374
 msgid "Put text on path"
 msgstr "Разместить текст по контуру"
 
@@ -10215,7 +10262,7 @@ msgid "<b>No texts-on-paths</b> in the selection."
 msgstr "В выделении нет <b>текстов по контуру</b>."
 
 #: ../src/text-chemistry.cpp:229
-#: ../src/verbs.cpp:2366
+#: ../src/verbs.cpp:2376
 msgid "Remove text from path"
 msgstr "Снять текст с контура"
 
@@ -10390,7 +10437,7 @@ msgid "Type or edit text (%d characters); <b>Enter</b> to start new line."
 msgstr "Наберите или измените текст (%d символов); <b>Ввод</b> начинает новый абзац."
 
 #: ../src/text-context.cpp:1612
-#: ../src/tools-switch.cpp:190
+#: ../src/tools-switch.cpp:198
 msgid "<b>Click</b> to select or create text, <b>drag</b> to create flowed text; then type."
 msgstr "<b>Щелчок</b> выделяет или создает текст, <b>перетаскивание</b> создает текст в рамке; после этого можно набирать текст."
 
@@ -10402,67 +10449,72 @@ msgstr "Ввод текста"
 msgid "You cannot edit <b>cloned character data</b>."
 msgstr "Вы не можете редактировать <b>склонированный текст</b>."
 
-#: ../src/tools-switch.cpp:130
+#: ../src/tools-switch.cpp:132
 msgid "To edit a path, <b>click</b>, <b>Shift+click</b>, or <b>drag around</b> nodes to select them, then <b>drag</b> nodes and handles. <b>Click</b> on an object to select."
 msgstr "Для правки контура <b>щелчком</b>, <b>Shift+щелчком</b> или <b>обведением рамки</b> выделите узлы, затем <b>перетащите</b> узлы и рычаги. <b>Щелчок</b> по объекту выделяет его."
 
-#: ../src/tools-switch.cpp:136
+#: ../src/tools-switch.cpp:138
 msgid "To tweak a path by pushing, select it and drag over it."
 msgstr "Для коррекции контура толканием, выберите и проведите по нему мышью"
 
-#: ../src/tools-switch.cpp:142
+#: ../src/tools-switch.cpp:144
+#, fuzzy
+msgid "To spray a path by pushing, select it and drag over it."
+msgstr "Для коррекции контура толканием, выберите и проведите по нему мышью"
+
+#: ../src/tools-switch.cpp:150
 msgid "<b>Drag</b> to create a rectangle. <b>Drag controls</b> to round corners and resize. <b>Click</b> to select."
 msgstr "<b>Перетаскивание</b> рисует прямоугольник. <b>Перетаскивание ручек</b> меняет размер и закругляет углы. <b>Щелчок</b> по объекту выделяет его."
 
-#: ../src/tools-switch.cpp:148
+#: ../src/tools-switch.cpp:156
 msgid "<b>Drag</b> to create a 3D box. <b>Drag controls</b> to resize in perspective. <b>Click</b> to select (with <b>Ctrl+Alt</b> for single faces)."
 msgstr "<b>Перетаскивание</b> рисует параллелепипед. <b>Перетаскивание рычагов</b> меняет перспективу. <b>Щелчком</b> выделяются стороны объекта."
 
-#: ../src/tools-switch.cpp:154
+#: ../src/tools-switch.cpp:162
 msgid "<b>Drag</b> to create an ellipse. <b>Drag controls</b> to make an arc or segment. <b>Click</b> to select."
 msgstr "<b>Перетаскивание</b> рисует эллипс. <b>Перетаскивание ручек</b> делает дугу или сегмент. <b>Щелчок</b> по объекту выделяет его."
 
-#: ../src/tools-switch.cpp:160
+#: ../src/tools-switch.cpp:168
 msgid "<b>Drag</b> to create a star. <b>Drag controls</b> to edit the star shape. <b>Click</b> to select."
 msgstr "<b>Перетаскивание</b> рисует звезду. <b>Перетаскивание ручек</b> меняет ее форму. <b>Щелчок</b> по объекту выделяет его."
 
-#: ../src/tools-switch.cpp:166
+#: ../src/tools-switch.cpp:174
 msgid "<b>Drag</b> to create a spiral. <b>Drag controls</b> to edit the spiral shape. <b>Click</b> to select."
 msgstr "<b>Перетаскивание</b> рисует спираль. <b>Перетаскивание ручек</b> меняет ее форму. <b>Щелчок</b> по объекту выделяет его."
 
-#: ../src/tools-switch.cpp:172
+#: ../src/tools-switch.cpp:180
 msgid "<b>Drag</b> to create a freehand line. <b>Shift</b> appends to selected path, <b>Alt</b> activates sketch mode."
 msgstr "<b>Перетаскиванием</b> рисуется произвольная линия. <b>Shift</b> присоединяет линию к выделенному контуру, <b>Alt</b> активирует эскизный режим."
 
-#: ../src/tools-switch.cpp:178
+#: ../src/tools-switch.cpp:186
 msgid "<b>Click</b> or <b>click and drag</b> to start a path; with <b>Shift</b> to append to selected path. <b>Ctrl+click</b> to create single dots (straight line modes only)."
 msgstr "<b>Щелчок</b> и <b>щелчок с перетаскиванием</b> начинают контур. С <b>Shift</b> линия добавляется к выделенному контуру. <b>Ctrl+щелчок</b> рисует точку (только в режиме рисования прямых линий)."
 
-#: ../src/tools-switch.cpp:184
+#: ../src/tools-switch.cpp:192
 msgid "<b>Drag</b> to draw a calligraphic stroke; with <b>Ctrl</b> to track a guide path. <b>Arrow keys</b> adjust width (left/right) and angle (up/down)."
 msgstr "<b>Перетаскивание</b> рисует каллиграфический штрих; с <b>Ctrl</b> — отслеживание направляющего контура. <b>Клавиши-стрелки</b> меняют ширину (влево/вправо) и угол (вверх/вниз) пера."
 
-#: ../src/tools-switch.cpp:196
+#: ../src/tools-switch.cpp:204
 msgid "<b>Drag</b> or <b>double click</b> to create a gradient on selected objects, <b>drag handles</b> to adjust gradients."
 msgstr "Новый градиент для выделенного объекта создается <b>перетаскиванием</b> или <b>двойным щелчком</b> и корректируется <b>перетаскиванием за ручки</b>."
 
-#: ../src/tools-switch.cpp:202
+#: ../src/tools-switch.cpp:210
 msgid "<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to zoom out."
 msgstr "<b>Щелчок</b> или <b>обведение рамкой</b> приближают, <b>Shift+щелчок</b> отдаляет холст."
 
-#: ../src/tools-switch.cpp:214
+#: ../src/tools-switch.cpp:222
 msgid "<b>Click and drag</b> between shapes to create a connector."
 msgstr "<b>Щелчок с перетаскиванием</b> между фигурами создают линию соединения."
 
-#: ../src/tools-switch.cpp:220
+#: ../src/tools-switch.cpp:228
 msgid "<b>Click</b> to paint a bounded area, <b>Shift+click</b> to union the new fill with the current selection, <b>Ctrl+click</b> to change the clicked object's fill and stroke to the current setting."
 msgstr "<b>Щёлкните</b> для рисования замкнутой области, <b>Shift+щелчок</b> для объединения новой заливки с активным выделением, <b>Ctrl+щелчок</b> для смены заливки и обводки щелкнутого объекта до текущих параметров"
 
-#: ../src/tools-switch.cpp:226
+#: ../src/tools-switch.cpp:234
 msgid "<b>Drag</b> to erase."
 msgstr "Нажмите клавишу и <b>перетащите</b> курсор для стирания"
 
-#: ../src/tools-switch.cpp:232
+#: ../src/tools-switch.cpp:240
 msgid "Choose a subtool from the toolbar"
 msgstr "Выберите режим инструмента из его контекстной панели"
 
@@ -10517,11 +10569,6 @@ msgstr "Векторизация растра"
 msgid "Trace: Done. %ld nodes created"
 msgstr "Векторизация: Готово. Создано узлов: %ld"
 
-#: ../src/tweak-context.cpp:204
-#, c-format
-msgid "<b>Nothing</b> selected"
-msgstr "<b>Ничего</b> не выделено"
-
 #: ../src/tweak-context.cpp:210
 #, c-format
 msgid "%s. Drag to <b>move</b>."
@@ -10726,7 +10773,7 @@ msgstr "Создание ссылки"
 
 #. "Ungroup"
 #: ../src/ui/context-menu.cpp:306
-#: ../src/verbs.cpp:2360
+#: ../src/verbs.cpp:2370
 msgid "_Ungroup"
 msgstr "Разгр_уппировать"
 
@@ -10840,12 +10887,15 @@ msgstr "В:"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:509
 #: ../src/ui/dialog/align-and-distribute.cpp:789
-#: ../src/widgets/toolbox.cpp:7068
+#: ../src/ui/dialog/spray-option.cpp:116
+#: ../src/ui/dialog/spray-option.cpp:194
+#: ../src/ui/dialog/spray-option.cpp:212
+#: ../src/widgets/toolbox.cpp:7475
 msgid "Remove overlaps"
 msgstr "Убрать перекрытия"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:540
-#: ../src/widgets/toolbox.cpp:6931
+#: ../src/widgets/toolbox.cpp:7265
 msgid "Arrange connector network"
 msgstr "Гармоничная расстановка связанных объектов"
 
@@ -10870,7 +10920,7 @@ msgid "Connector network layout"
 msgstr "Внешний вид блок-схем"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:791
-#: ../src/widgets/toolbox.cpp:2083
+#: ../src/widgets/toolbox.cpp:2110
 msgid "Nodes"
 msgstr "Узлы"
 
@@ -10891,8 +10941,9 @@ msgid "Align left edges"
 msgstr "Выровнять левые края объектов"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:810
-msgid "Center objects horizontally"
-msgstr "Центрировать объекты по горизонтали"
+#, fuzzy
+msgid "Center on vertical axis"
+msgstr "Центрировать на горизонтальной оси"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:813
 msgid "Align right sides"
@@ -10983,7 +11034,7 @@ msgid "Move objects as little as possible so that their bounding boxes do not ov
 msgstr "Переместить объекты так, чтобы их рамки едва-едва не пересекались"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:893
-#: ../src/widgets/toolbox.cpp:7031
+#: ../src/widgets/toolbox.cpp:7436
 msgid "Nicely arrange selected connector network"
 msgstr "Гармонично расставить связанные коннектором объекты"
 
@@ -11023,7 +11074,7 @@ msgstr "Наименьший объект"
 #: ../src/ui/dialog/align-and-distribute.cpp:921
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1414
 #: ../src/ui/dialog/icon-preview.cpp:178
-#: ../src/widgets/desktop-widget.cpp:1581
+#: ../src/widgets/desktop-widget.cpp:1580
 msgid "Selection"
 msgstr "Выделение"
 
@@ -11044,7 +11095,7 @@ msgstr "Название профиля:"
 #.
 #. -----------
 #: ../src/ui/dialog/calligraphic-profile-rename.cpp:52
-#: ../src/ui/dialog/inkscape-preferences.cpp:1145
+#: ../src/ui/dialog/inkscape-preferences.cpp:1161
 msgid "Save"
 msgstr "Сохранить"
 
@@ -11193,19 +11244,19 @@ msgid "Remove selected grid."
 msgstr "Удалить выделенную сетку"
 
 #: ../src/ui/dialog/document-properties.cpp:119
-#: ../src/widgets/toolbox.cpp:2172
+#: ../src/widgets/toolbox.cpp:2199
 msgid "Guides"
 msgstr "Направляющие"
 
 #: ../src/ui/dialog/document-properties.cpp:120
-#: ../src/ui/dialog/inkscape-preferences.cpp:1014
-#: ../src/widgets/toolbox.cpp:2163
+#: ../src/ui/dialog/inkscape-preferences.cpp:1030
+#: ../src/widgets/toolbox.cpp:2190
 msgid "Grids"
 msgstr "Сетки"
 
 #: ../src/ui/dialog/document-properties.cpp:121
-#: ../src/verbs.cpp:2587
-#: ../src/widgets/toolbox.cpp:2028
+#: ../src/verbs.cpp:2601
+#: ../src/widgets/toolbox.cpp:2055
 msgid "Snap"
 msgstr "Прилипание"
 
@@ -11326,62 +11377,62 @@ msgstr "Каталог с профилями (%s) недоступен."
 #. Inkscape::GC::release(defsRepr);
 #. inform the document, so we can undo
 #. Color Management
-#: ../src/ui/dialog/document-properties.cpp:451
-#: ../src/verbs.cpp:2739
+#: ../src/ui/dialog/document-properties.cpp:452
+#: ../src/verbs.cpp:2755
 msgid "Link Color Profile"
 msgstr "Связать с цветовым профилем"
 
-#: ../src/ui/dialog/document-properties.cpp:524
+#: ../src/ui/dialog/document-properties.cpp:525
 msgid "Remove linked color profile"
 msgstr "Удалить связанный цветовой профиль"
 
-#: ../src/ui/dialog/document-properties.cpp:538
+#: ../src/ui/dialog/document-properties.cpp:539
 msgid "<b>Linked Color Profiles:</b>"
 msgstr "<b>Связанные цветовые профили:</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:540
+#: ../src/ui/dialog/document-properties.cpp:541
 msgid "<b>Available Color Profiles:</b>"
 msgstr "<b>Доступные цветовые профили:</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:542
+#: ../src/ui/dialog/document-properties.cpp:543
 msgid "Link Profile"
 msgstr "Связать с профилем"
 
-#: ../src/ui/dialog/document-properties.cpp:573
+#: ../src/ui/dialog/document-properties.cpp:574
 msgid "Profile Name"
 msgstr "Название профиля"
 
-#: ../src/ui/dialog/document-properties.cpp:604
+#: ../src/ui/dialog/document-properties.cpp:605
 msgid "<b>External script files:</b>"
 msgstr "<b>Внешние файлы сценариев:</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:606
+#: ../src/ui/dialog/document-properties.cpp:607
 #: ../src/ui/dialog/swatches.cpp:463
 msgid "Add"
 msgstr "Добавить"
 
-#: ../src/ui/dialog/document-properties.cpp:629
+#: ../src/ui/dialog/document-properties.cpp:630
 msgid "Filename"
 msgstr "Имя файла"
 
 #. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:669
+#: ../src/ui/dialog/document-properties.cpp:670
 msgid "Add external script..."
 msgstr "Добавить внешний сценарий"
 
-#: ../src/ui/dialog/document-properties.cpp:693
+#: ../src/ui/dialog/document-properties.cpp:694
 msgid "Remove external script"
 msgstr "Удалить внешний сценарий"
 
-#: ../src/ui/dialog/document-properties.cpp:774
+#: ../src/ui/dialog/document-properties.cpp:775
 msgid "<b>Creation</b>"
 msgstr "<b>Создание</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:775
+#: ../src/ui/dialog/document-properties.cpp:776
 msgid "<b>Defined grids</b>"
 msgstr "<b>Определённые пользователем сетки</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:985
+#: ../src/ui/dialog/document-properties.cpp:986
 msgid "Remove grid"
 msgstr "Удаление сетки"
 
@@ -11395,6 +11446,7 @@ msgstr "Информация"
 #: ../share/extensions/dxf_outlines.inx.h:8
 #: ../share/extensions/lindenmayer.inx.h:23
 #: ../share/extensions/measure.inx.h:2
+#: ../share/extensions/scour.inx.h:4
 msgid "Help"
 msgstr "Справка"
 
@@ -11732,8 +11784,9 @@ msgid "Height of filter effects region"
 msgstr "Высота области действия фильтра эффектов"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2165
-#: ../src/widgets/toolbox.cpp:3859
-#: ../src/widgets/toolbox.cpp:4250
+#: ../src/widgets/toolbox.cpp:3886
+#: ../src/widgets/toolbox.cpp:4277
+#: ../src/widgets/toolbox.cpp:4545
 #: ../share/extensions/extrude.inx.h:4
 msgid "Mode:"
 msgstr "Режим:"
@@ -11905,7 +11958,7 @@ msgid "The whole filter region will be filled with this color."
 msgstr "Вся область действия фильтра будет залита этим цветом"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2214
-#: ../src/widgets/toolbox.cpp:5299
+#: ../src/widgets/toolbox.cpp:5518
 msgid "Opacity:"
 msgstr "Непрозрачность:"
 
@@ -12203,7 +12256,7 @@ msgstr "С какой скоростью будет происходить пр
 #: ../src/ui/dialog/tracedialog.cpp:420
 #: ../src/ui/dialog/tracedialog.cpp:453
 #: ../src/ui/dialog/tracedialog.cpp:596
-#: ../src/widgets/toolbox.cpp:7185
+#: ../src/widgets/toolbox.cpp:7617
 msgid "Threshold:"
 msgstr "Порог:"
 
@@ -12564,533 +12617,561 @@ msgstr "Как долго (мс) должен подсвечиваться ко
 
 #. Tweak
 #: ../src/ui/dialog/inkscape-preferences.cpp:447
-#: ../src/verbs.cpp:2504
+#: ../src/verbs.cpp:2514
 msgid "Tweak"
 msgstr "Корректор"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:448
+#: ../src/ui/dialog/inkscape-preferences.cpp:454
 msgid "Paint objects with:"
 msgstr "Раскрашивать объекты:"
 
-#. Zoom
+#. Spray
 #: ../src/ui/dialog/inkscape-preferences.cpp:453
-#: ../src/ui/view/edit-widget.cpp:1062
-#: ../src/verbs.cpp:2526
+#: ../src/verbs.cpp:2516
+msgid "Spray"
+msgstr "Распылитель"
+
+#. Zoom
+#: ../src/ui/dialog/inkscape-preferences.cpp:459
+#: ../src/ui/view/edit-widget.cpp:1068
+#: ../src/verbs.cpp:2538
 #: ../src/widgets/desktop-widget.cpp:483
 msgid "Zoom"
 msgstr "Лупа"
 
 #. Shapes
-#: ../src/ui/dialog/inkscape-preferences.cpp:458
+#: ../src/ui/dialog/inkscape-preferences.cpp:464
 msgid "Shapes"
 msgstr "Фигуры"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:490
+#: ../src/ui/dialog/inkscape-preferences.cpp:496
 msgid "Sketch mode"
 msgstr "Эскизный режим"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:492
+#: ../src/ui/dialog/inkscape-preferences.cpp:498
 msgid "If on, the sketch result will be the normal average of all sketches made, instead of averaging the old result with the new sketch."
 msgstr "Если включено, результат штриховки будет усредненным значением всех сделанных штрихов, а не усредненным значением старого результата и новой штриховки."
 
 #. Pen
-#: ../src/ui/dialog/inkscape-preferences.cpp:495
-#: ../src/verbs.cpp:2518
+#: ../src/ui/dialog/inkscape-preferences.cpp:501
+#: ../src/verbs.cpp:2530
 msgid "Pen"
 msgstr "Перо"
 
 #. Calligraphy
-#: ../src/ui/dialog/inkscape-preferences.cpp:501
-#: ../src/verbs.cpp:2520
+#: ../src/ui/dialog/inkscape-preferences.cpp:507
+#: ../src/verbs.cpp:2532
 msgid "Calligraphy"
 msgstr "Каллиграфическое перо"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:505
+#: ../src/ui/dialog/inkscape-preferences.cpp:511
 msgid "If on, pen width is in absolute units (px) independent of zoom; otherwise pen width depends on zoom so that it looks the same at any zoom"
 msgstr "Если включено, толщина линии в абсолютных единицах (px) независима от масштаба; в противном случае толщина линии зависит от масштаба и выглядит одинаково при любом масштабе"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:507
+#: ../src/ui/dialog/inkscape-preferences.cpp:513
 msgid "If on, each newly created object will be selected (deselecting previous selection)"
 msgstr "Если включено, каждый новый объект будет автоматически выделяться (со сбросом предыдущего выделения)"
 
 #. Paint Bucket
-#: ../src/ui/dialog/inkscape-preferences.cpp:509
-#: ../src/verbs.cpp:2532
+#: ../src/ui/dialog/inkscape-preferences.cpp:515
+#: ../src/verbs.cpp:2544
 msgid "Paint Bucket"
 msgstr "Плоская заливка"
 
 #. Eraser
-#: ../src/ui/dialog/inkscape-preferences.cpp:514
-#: ../src/verbs.cpp:2536
+#: ../src/ui/dialog/inkscape-preferences.cpp:520
+#: ../src/verbs.cpp:2548
 msgid "Eraser"
 msgstr "Ластик"
 
 #. LPETool
-#: ../src/ui/dialog/inkscape-preferences.cpp:518
-#: ../src/verbs.cpp:2538
+#: ../src/ui/dialog/inkscape-preferences.cpp:524
+#: ../src/verbs.cpp:2550
 msgid "LPE Tool"
 msgstr "Геометрические конструкции"
 
+#: ../src/ui/dialog/inkscape-preferences.cpp:533
+msgid "Show font samples in the drop-down list"
+msgstr ""
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:534
+msgid "Show font samples alongside font names in the drop-down list in Text bar"
+msgstr ""
+
 #. Gradient
-#: ../src/ui/dialog/inkscape-preferences.cpp:528
-#: ../src/verbs.cpp:2524
+#: ../src/ui/dialog/inkscape-preferences.cpp:539
+#: ../src/verbs.cpp:2536
 msgid "Gradient"
 msgstr "Градиентная заливка"
 
 #. Connector
-#: ../src/ui/dialog/inkscape-preferences.cpp:532
-#: ../src/verbs.cpp:2530
+#: ../src/ui/dialog/inkscape-preferences.cpp:543
+#: ../src/verbs.cpp:2542
 msgid "Connector"
 msgstr "Соединительные линии"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:535
+#: ../src/ui/dialog/inkscape-preferences.cpp:546
 msgid "If on, connector attachment points will not be shown for text objects"
 msgstr "Если включено, точки соединения линиями не показываются на текстовых объектах"
 
 #. Dropper
-#: ../src/ui/dialog/inkscape-preferences.cpp:537
-#: ../src/verbs.cpp:2528
+#: ../src/ui/dialog/inkscape-preferences.cpp:548
+#: ../src/verbs.cpp:2540
 msgid "Dropper"
 msgstr "Пипетка"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:544
+#: ../src/ui/dialog/inkscape-preferences.cpp:555
 msgid "Save and restore window geometry for each document"
 msgstr "Запоминать и использовать геометрию окна для каждого документа"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:545
+#: ../src/ui/dialog/inkscape-preferences.cpp:556
 msgid "Remember and use last window's geometry"
 msgstr "Запоминать и использовать геометрию последнего окна"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:546
+#: ../src/ui/dialog/inkscape-preferences.cpp:557
 msgid "Don't save window geometry"
 msgstr "Не запоминать геометрию окон"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:548
-#: ../src/ui/dialog/inkscape-preferences.cpp:568
+#: ../src/ui/dialog/inkscape-preferences.cpp:559
+#: ../src/ui/dialog/inkscape-preferences.cpp:579
 msgid "Dockable"
 msgstr "Прикрепляются к правому краю окна"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:551
+#: ../src/ui/dialog/inkscape-preferences.cpp:562
 msgid "Dialogs are hidden in taskbar"
 msgstr "Диалоги не видны на панели задач"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:552
+#: ../src/ui/dialog/inkscape-preferences.cpp:563
 msgid "Zoom when window is resized"
 msgstr "Масштабировать рисунок при изменении размеров окна"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:553
+#: ../src/ui/dialog/inkscape-preferences.cpp:564
 msgid "Show close button on dialogs"
 msgstr "Показывать кнопку «Закрыть» во всех диалогах"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:555
+#: ../src/ui/dialog/inkscape-preferences.cpp:566
 msgid "Normal"
 msgstr "Нормальный"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:556
+#: ../src/ui/dialog/inkscape-preferences.cpp:567
 msgid "Aggressive"
 msgstr "Настойчивый"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:558
+#: ../src/ui/dialog/inkscape-preferences.cpp:569
 msgid "Saving window geometry (size and position):"
 msgstr "Запоминание геометрии окна (размера и положения)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:560
+#: ../src/ui/dialog/inkscape-preferences.cpp:571
 msgid "Let the window manager determine placement of all windows"
 msgstr "Пусть оконный менеджер сам определяет располжение окон"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:562
+#: ../src/ui/dialog/inkscape-preferences.cpp:573
 msgid "Remember and use the last window's geometry (saves geometry to user preferences)"
 msgstr "Запоминать (в параметрах программы) и использовать геометрию последнего окна"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:564
+#: ../src/ui/dialog/inkscape-preferences.cpp:575
 msgid "Save and restore window geometry for each document (saves geometry in the document)"
 msgstr "Запоминать (в параметрах документа) и использовать геометрию окна каждого документа"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:566
+#: ../src/ui/dialog/inkscape-preferences.cpp:577
 msgid "Dialog behavior (requires restart):"
 msgstr "Поведение диалогов (требует перезапуска программы)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:573
+#: ../src/ui/dialog/inkscape-preferences.cpp:584
 msgid "Dialogs on top:"
 msgstr "Способ размещения диалогов поверх окна:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:576
+#: ../src/ui/dialog/inkscape-preferences.cpp:587
 msgid "Dialogs are treated as regular windows"
 msgstr "Диалоги рассматриваются как обычные окна"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:578
+#: ../src/ui/dialog/inkscape-preferences.cpp:589
 msgid "Dialogs stay on top of document windows"
 msgstr "Диалоги остаются поверх окон с документами"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:580
+#: ../src/ui/dialog/inkscape-preferences.cpp:591
 msgid "Same as Normal but may work better with some window managers"
 msgstr "То же, что и «Нормальный», но может лучше работать с некоторыми оконными менеджерами"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:584
+#: ../src/ui/dialog/inkscape-preferences.cpp:595
 msgid "Dialog Transparency:"
 msgstr "Прозрачность диалога:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:586
+#: ../src/ui/dialog/inkscape-preferences.cpp:597
 msgid "Opacity when focused:"
 msgstr "Непрозрачность в фокусе:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:588
+#: ../src/ui/dialog/inkscape-preferences.cpp:599
 msgid "Opacity when unfocused:"
 msgstr "Непрозрачность вне фокуса:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:590
+#: ../src/ui/dialog/inkscape-preferences.cpp:601
 msgid "Time of opacity change animation:"
 msgstr "Длительность анимации:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:593
+#: ../src/ui/dialog/inkscape-preferences.cpp:604
 msgid "Miscellaneous:"
 msgstr "Прочие параметры:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:596
+#: ../src/ui/dialog/inkscape-preferences.cpp:607
 msgid "Whether dialog windows are to be hidden in the window manager taskbar"
 msgstr "Убирать ли диалоговые окна из панели задач оконного менеджера"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:599
+#: ../src/ui/dialog/inkscape-preferences.cpp:610
 msgid "Zoom drawing when document window is resized, to keep the same area visible (this is the default which can be changed in any window using the button above the right scrollbar)"
 msgstr "Масштабировать рисунок при изменении размеров окна, чтобы сохранить видимую область (для каждого окна это можно изменить с помощью кнопки над правой полосой прокрутки)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:601
+#: ../src/ui/dialog/inkscape-preferences.cpp:612
 msgid "Whether dialog windows have a close button (requires restart)"
 msgstr "Отображается ли в диалогах кнопка «Закрыть»"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:602
+#: ../src/ui/dialog/inkscape-preferences.cpp:613
 msgid "Windows"
 msgstr "Окна"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:607
+#: ../src/ui/dialog/inkscape-preferences.cpp:618
 msgid "Move in parallel"
 msgstr "Двигаются параллельно"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:609
+#: ../src/ui/dialog/inkscape-preferences.cpp:620
 msgid "Stay unmoved"
 msgstr "Остаются неподвижными"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:611
+#: ../src/ui/dialog/inkscape-preferences.cpp:622
 msgid "Move according to transform"
 msgstr "Двигаются в соответствии с transform="
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:613
+#: ../src/ui/dialog/inkscape-preferences.cpp:624
 msgid "Are unlinked"
 msgstr "Отсоединяются"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:615
+#: ../src/ui/dialog/inkscape-preferences.cpp:626
 msgid "Are deleted"
 msgstr "Удаляются"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:618
+#: ../src/ui/dialog/inkscape-preferences.cpp:629
 msgid "When the original moves, its clones and linked offsets:"
 msgstr "Когда перемещается оригинал, его клоны и потомки:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:620
+#: ../src/ui/dialog/inkscape-preferences.cpp:631
 msgid "Clones are translated by the same vector as their original."
 msgstr "Каждый клон сдвигается на тот же вектор, что и его оригинал."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:622
+#: ../src/ui/dialog/inkscape-preferences.cpp:633
 msgid "Clones preserve their positions when their original is moved."
 msgstr "Клоны остаются на месте, когда двигаются их оригиналы."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:624
+#: ../src/ui/dialog/inkscape-preferences.cpp:635
 msgid "Each clone moves according to the value of its transform= attribute. For example, a rotated clone will move in a different direction than its original."
 msgstr "Каждый клон двигается в соответствии со значением его атрибута transform=. Например, повернутый клон будет перемещаться в ином направлении, нежели его оригинал."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:625
+#: ../src/ui/dialog/inkscape-preferences.cpp:636
 msgid "When the original is deleted, its clones:"
 msgstr "Когда оригинал удаляется, его клоны:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:627
+#: ../src/ui/dialog/inkscape-preferences.cpp:638
 msgid "Orphaned clones are converted to regular objects."
 msgstr "Осиротевшие клоны преобразуются в обычные объекты."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:629
+#: ../src/ui/dialog/inkscape-preferences.cpp:640
 msgid "Orphaned clones are deleted along with their original."
 msgstr "Осиротевшие клоны удаляются вместе с их оригиналом."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:631
+#: ../src/ui/dialog/inkscape-preferences.cpp:642
 msgid "When duplicating original+clones:"
 msgstr "При дублировании оригиналов с клонами:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:633
+#: ../src/ui/dialog/inkscape-preferences.cpp:644
 msgid "Relink duplicated clones"
 msgstr "Повторно связывать продублированные клоны"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:635
+#: ../src/ui/dialog/inkscape-preferences.cpp:646
 msgid "When duplicating a selection containing both a clone and its original (possibly in groups), relink the duplicated clone to the duplicated original instead of the old original"
 msgstr "При дублировании выделения, содержащего как клон, так и оригинал (например, в группе), повторно связывать продублированный клон с продублированным оригиналом вместо первого оригинала."
 
 #. TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page
-#: ../src/ui/dialog/inkscape-preferences.cpp:638
+#: ../src/ui/dialog/inkscape-preferences.cpp:649
 msgid "Clones"
 msgstr "Клоны"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:643
+#: ../src/ui/dialog/inkscape-preferences.cpp:654
 msgid "When applying, use the topmost selected object as clippath/mask"
 msgstr "Верхний выбранный объект — обтравочный контур или маска"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:645
+#: ../src/ui/dialog/inkscape-preferences.cpp:656
 msgid "Uncheck this to use the bottom selected object as the clipping path or mask"
 msgstr "Отключите эту опцию, если хотите использовать в качестве обтравочного контура или маски самый нижний из выбранных объектов"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:646
+#: ../src/ui/dialog/inkscape-preferences.cpp:657
 msgid "Remove clippath/mask object after applying"
 msgstr "Убрать обтравочный контур или маску после применения"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:648
+#: ../src/ui/dialog/inkscape-preferences.cpp:659
 msgid "After applying, remove the object used as the clipping path or mask from the drawing"
 msgstr "По применении удалить из рисунка объект, использованный в качестве обтравочного контура или маски"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:649
+#: ../src/ui/dialog/inkscape-preferences.cpp:660
 msgid "Clippaths and masks"
 msgstr "Обтравочные контуры и маски"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:654
+#: ../src/ui/dialog/inkscape-preferences.cpp:665
 #: ../src/widgets/select-toolbar.cpp:544
 msgid "Scale stroke width"
 msgstr "Менять толщину обводки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:655
+#: ../src/ui/dialog/inkscape-preferences.cpp:666
 msgid "Scale rounded corners in rectangles"
 msgstr "Менять радиус закругленных углов"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:656
+#: ../src/ui/dialog/inkscape-preferences.cpp:667
 msgid "Transform gradients"
 msgstr "Трансформировать градиенты"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:657
+#: ../src/ui/dialog/inkscape-preferences.cpp:668
 msgid "Transform patterns"
 msgstr "Трансформировать текстуры"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:658
+#: ../src/ui/dialog/inkscape-preferences.cpp:669
 msgid "Optimized"
 msgstr "С оптимизацией"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:659
+#: ../src/ui/dialog/inkscape-preferences.cpp:670
 msgid "Preserved"
 msgstr "Без оптимизации"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:662
+#: ../src/ui/dialog/inkscape-preferences.cpp:673
 #: ../src/widgets/select-toolbar.cpp:545
 msgid "When scaling objects, scale the stroke width by the same proportion"
 msgstr "При изменении размера объектов менять в той же пропорции и толщину обводки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:664
+#: ../src/ui/dialog/inkscape-preferences.cpp:675
 #: ../src/widgets/select-toolbar.cpp:556
 msgid "When scaling rectangles, scale the radii of rounded corners"
 msgstr "При изменении размера прямоугольников менять в той же пропорции и радиус закруглённых углов"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:666
+#: ../src/ui/dialog/inkscape-preferences.cpp:677
 #: ../src/widgets/select-toolbar.cpp:567
 msgid "Move gradients (in fill or stroke) along with the objects"
 msgstr "Трансформировать градиенты (в заливке или обводке) вместе с объектом"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:668
+#: ../src/ui/dialog/inkscape-preferences.cpp:679
 #: ../src/widgets/select-toolbar.cpp:578
 msgid "Move patterns (in fill or stroke) along with the objects"
 msgstr "Трансформировать текстуры (в заливке или обводке) вместе с объектом"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:669
+#: ../src/ui/dialog/inkscape-preferences.cpp:680
 msgid "Store transformation:"
 msgstr "Сохранение трансформации:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:671
+#: ../src/ui/dialog/inkscape-preferences.cpp:682
 msgid "If possible, apply transformation to objects without adding a transform= attribute"
 msgstr "По возможности применять трансформацию к объектам без добавления атрибута transform="
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:673
+#: ../src/ui/dialog/inkscape-preferences.cpp:684
 msgid "Always store transformation as a transform= attribute on objects"
 msgstr "Всегда сохранять трансформацию в виде атрибута transform="
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:675
+#: ../src/ui/dialog/inkscape-preferences.cpp:686
 msgid "Transforms"
 msgstr "Трансформации"
 
 #. blur quality
 #. filter quality
-#: ../src/ui/dialog/inkscape-preferences.cpp:681
-#: ../src/ui/dialog/inkscape-preferences.cpp:705
+#: ../src/ui/dialog/inkscape-preferences.cpp:692
+#: ../src/ui/dialog/inkscape-preferences.cpp:716
 msgid "Best quality (slowest)"
 msgstr "Наилучшее качество (самая медленная отрисовка)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:683
-#: ../src/ui/dialog/inkscape-preferences.cpp:707
+#: ../src/ui/dialog/inkscape-preferences.cpp:694
+#: ../src/ui/dialog/inkscape-preferences.cpp:718
 msgid "Better quality (slower)"
 msgstr "Хорошее качество (медленная отрисовка)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:685
-#: ../src/ui/dialog/inkscape-preferences.cpp:709
+#: ../src/ui/dialog/inkscape-preferences.cpp:696
+#: ../src/ui/dialog/inkscape-preferences.cpp:720
 msgid "Average quality"
 msgstr "Среднее качество"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:687
-#: ../src/ui/dialog/inkscape-preferences.cpp:711
+#: ../src/ui/dialog/inkscape-preferences.cpp:698
+#: ../src/ui/dialog/inkscape-preferences.cpp:722
 msgid "Lower quality (faster)"
 msgstr "Низкое качество (быстрая отрисовка)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:689
-#: ../src/ui/dialog/inkscape-preferences.cpp:713
+#: ../src/ui/dialog/inkscape-preferences.cpp:700
+#: ../src/ui/dialog/inkscape-preferences.cpp:724
 msgid "Lowest quality (fastest)"
 msgstr "Самое низкое качество (самая быстрая отрисовка)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:692
+#: ../src/ui/dialog/inkscape-preferences.cpp:703
 msgid "Gaussian blur quality for display:"
 msgstr "Качество гауссова размывания при отображении:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:694
-#: ../src/ui/dialog/inkscape-preferences.cpp:718
+#: ../src/ui/dialog/inkscape-preferences.cpp:705
+#: ../src/ui/dialog/inkscape-preferences.cpp:729
 msgid "Best quality, but display may be very slow at high zooms (bitmap export always uses best quality)"
 msgstr "Наилучшее качество, но при большом масштабе отрисовка очень медленная (при экспорте качество остаётся максимальным)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:696
-#: ../src/ui/dialog/inkscape-preferences.cpp:720
+#: ../src/ui/dialog/inkscape-preferences.cpp:707
+#: ../src/ui/dialog/inkscape-preferences.cpp:731
 msgid "Better quality, but slower display"
 msgstr "Хорошее качество, но невысокая скорость"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:698
-#: ../src/ui/dialog/inkscape-preferences.cpp:722
+#: ../src/ui/dialog/inkscape-preferences.cpp:709
+#: ../src/ui/dialog/inkscape-preferences.cpp:733
 msgid "Average quality, acceptable display speed"
 msgstr "Среднее качество, приемлимая скорость отрисовки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:700
-#: ../src/ui/dialog/inkscape-preferences.cpp:724
+#: ../src/ui/dialog/inkscape-preferences.cpp:711
+#: ../src/ui/dialog/inkscape-preferences.cpp:735
 msgid "Lower quality (some artifacts), but display is faster"
 msgstr "Низкое качество с видимым артефактами, но быстрая отрисовка"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:702
-#: ../src/ui/dialog/inkscape-preferences.cpp:726
+#: ../src/ui/dialog/inkscape-preferences.cpp:713
+#: ../src/ui/dialog/inkscape-preferences.cpp:737
 msgid "Lowest quality (considerable artifacts), but display is fastest"
 msgstr "Очень низкое качество с достаточно заметными артефактами, но очень быстрая отрисовка"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:716
+#: ../src/ui/dialog/inkscape-preferences.cpp:727
 msgid "Filter effects quality for display:"
 msgstr "Качество фильтров эффектов при отображении:"
 
 #. show infobox
-#: ../src/ui/dialog/inkscape-preferences.cpp:729
+#: ../src/ui/dialog/inkscape-preferences.cpp:740
 msgid "Show filter primitives infobox"
 msgstr "Показывать справку по примитивам фильтра"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:731
+#: ../src/ui/dialog/inkscape-preferences.cpp:742
 msgid "Show icons and descriptions for the filter primitives available at the filter effects dialog."
 msgstr "Показывать значки и описания для каждого примитива фильтров в диалоге фильтров эффектов"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:739
+#: ../src/ui/dialog/inkscape-preferences.cpp:746
+msgid "Number of Threads:"
+msgstr "Количество потоков:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:746
+#: ../src/ui/dialog/inkscape-preferences.cpp:1302
+msgid "(requires restart)"
+msgstr "(требует перезапуска программы)"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:747
+msgid "Configure number of processors/threads to use with rendering of gaussian blur."
+msgstr ""
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:755
 msgid "Select in all layers"
 msgstr "Работают во всех слоях"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:740
+#: ../src/ui/dialog/inkscape-preferences.cpp:756
 msgid "Select only within current layer"
 msgstr "Работают только в текущем слое"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:741
+#: ../src/ui/dialog/inkscape-preferences.cpp:757
 msgid "Select in current layer and sublayers"
 msgstr "Работают только в текущем слое и субслоях"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:742
+#: ../src/ui/dialog/inkscape-preferences.cpp:758
 msgid "Ignore hidden objects and layers"
 msgstr "Игнорируют скрытые объекты и слои"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:743
+#: ../src/ui/dialog/inkscape-preferences.cpp:759
 msgid "Ignore locked objects and layers"
 msgstr "Игнорируют запертые объекты и слои"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:744
+#: ../src/ui/dialog/inkscape-preferences.cpp:760
 msgid "Deselect upon layer change"
 msgstr "Снять выделение при изменениях в слое"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:746
+#: ../src/ui/dialog/inkscape-preferences.cpp:762
 msgid "Ctrl+A, Tab, Shift+Tab:"
 msgstr "Ctrl+A, Tab, Shift+Tab:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:748
+#: ../src/ui/dialog/inkscape-preferences.cpp:764
 msgid "Make keyboard selection commands work on objects in all layers"
 msgstr "Команды выделения с клавиатуры работают во всех слоях."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:750
+#: ../src/ui/dialog/inkscape-preferences.cpp:766
 msgid "Make keyboard selection commands work on objects in current layer only"
 msgstr "Команды выделения с клавиатуры работают только в текущем слое."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:752
+#: ../src/ui/dialog/inkscape-preferences.cpp:768
 msgid "Make keyboard selection commands work on objects in current layer and all its sublayers"
 msgstr "Команды выделения с клавиатуры работают в текущем слое и всех его субслоях."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:754
+#: ../src/ui/dialog/inkscape-preferences.cpp:770
 msgid "Uncheck this to be able to select objects that are hidden (either by themselves or by being in a hidden layer)"
 msgstr "Отключите этот параметр, если хотите выделять скрытые объекты или объекты на скрытом слое"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:756
+#: ../src/ui/dialog/inkscape-preferences.cpp:772
 msgid "Uncheck this to be able to select objects that are locked (either by themselves or by being in a locked layer)"
 msgstr "Отключите эту опцию, если хотите выделять запертые объекты или объекты на запертом слое"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:759
+#: ../src/ui/dialog/inkscape-preferences.cpp:775
 msgid "Uncheck this to be able to keep the current objects selected when the current layer changes"
 msgstr "Отключите эту опцию, если хотите оставлять объекты выбранными при изменениях в текущем слое."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:761
+#: ../src/ui/dialog/inkscape-preferences.cpp:777
 msgid "Selecting"
 msgstr "Выделение"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:768
+#: ../src/ui/dialog/inkscape-preferences.cpp:784
 msgid "Default export resolution:"
 msgstr "Разрешение для экспорта:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:769
+#: ../src/ui/dialog/inkscape-preferences.cpp:785
 msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
 msgstr "Разрешение растра (в точках на дюйм) в диалоге экспорта по умолчанию"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:771
+#: ../src/ui/dialog/inkscape-preferences.cpp:787
 msgid "Open Clip Art Library Server Name:"
 msgstr "Сервер Open Clip Art Library:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:772
+#: ../src/ui/dialog/inkscape-preferences.cpp:788
 msgid "The server name of the Open Clip Art Library webdav server. It's used by the Import and Export to OCAL function."
 msgstr "Имя webdav-сервера Open Clip Art Library. Используется для функций импорта и экспорта в OCAL."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:774
+#: ../src/ui/dialog/inkscape-preferences.cpp:790
 msgid "Open Clip Art Library Username:"
 msgstr "Пользователь Open Clip Art Library:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:775
+#: ../src/ui/dialog/inkscape-preferences.cpp:791
 msgid "The username used to log into Open Clip Art Library."
 msgstr "Имя пользователя для авторизации на Open Clip Art Library."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:777
+#: ../src/ui/dialog/inkscape-preferences.cpp:793
 msgid "Open Clip Art Library Password:"
 msgstr "Пароль на Open Clip Art Library:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:778
+#: ../src/ui/dialog/inkscape-preferences.cpp:794
 msgid "The password used to log into Open Clip Art Library."
 msgstr "Пароль для авторизации на Open Clip Art Library."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:780
+#: ../src/ui/dialog/inkscape-preferences.cpp:796
 msgid "Import/Export"
 msgstr "Импорт/Экспорт"
 
 #. TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:846
 msgid "Perceptual"
 msgstr "Воспринимаемая"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:846
 msgid "Relative Colorimetric"
 msgstr "Относительная колориметрическая"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:846
 msgid "Absolute Colorimetric"
 msgstr "Абсолютная колориметрическая"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:834
+#: ../src/ui/dialog/inkscape-preferences.cpp:850
 msgid "(Note: Color management has been disabled in this build)"
 msgstr "(Примечание: в этой сборке управление цветом отключено)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:838
+#: ../src/ui/dialog/inkscape-preferences.cpp:854
 msgid "Display adjustment"
 msgstr "Коррекция вывода на монитор"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:848
+#: ../src/ui/dialog/inkscape-preferences.cpp:864
 #, c-format
 msgid ""
 "The ICC profile to use to calibrate display output.\n"
@@ -13099,795 +13180,791 @@ msgstr ""
 "Профиль ICC, используемый для коррекции вывода на дисплей.\n"
 "В этих каталогах ищутся профили: %s"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:849
+#: ../src/ui/dialog/inkscape-preferences.cpp:865
 msgid "Display profile:"
 msgstr "Профиль монитора:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:854
+#: ../src/ui/dialog/inkscape-preferences.cpp:870
 msgid "Retrieve profile from display"
 msgstr "Получать профиль от видеоподсистемы"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:857
+#: ../src/ui/dialog/inkscape-preferences.cpp:873
 msgid "Retrieve profiles from those attached to displays via XICC."
 msgstr "Использовать профиль, назначенный монитору через xicc."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:859
+#: ../src/ui/dialog/inkscape-preferences.cpp:875
 msgid "Retrieve profiles from those attached to displays."
 msgstr "Использовать профили, используемые видеподсистемой для каждого из мониторов"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:864
+#: ../src/ui/dialog/inkscape-preferences.cpp:880
 msgid "Display rendering intent:"
 msgstr "Цветопередача монитора:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:865
-#: ../src/ui/dialog/inkscape-preferences.cpp:888
+#: ../src/ui/dialog/inkscape-preferences.cpp:881
+#: ../src/ui/dialog/inkscape-preferences.cpp:904
 msgid "The rendering intent to use to calibrate display output."
 msgstr "Цветопередача выводимых на дисплей изображений"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:867
+#: ../src/ui/dialog/inkscape-preferences.cpp:883
 msgid "Proofing"
 msgstr "Цветопроба"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:869
+#: ../src/ui/dialog/inkscape-preferences.cpp:885
 msgid "Simulate output on screen"
 msgstr "Имитировать устройство вывода"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:871
+#: ../src/ui/dialog/inkscape-preferences.cpp:887
 msgid "Simulates output of target device."
 msgstr "Имитировать на экране устройство вывода"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:873
+#: ../src/ui/dialog/inkscape-preferences.cpp:889
 msgid "Mark out of gamut colors"
 msgstr "Помечать цвета вне цветового охвата"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:875
+#: ../src/ui/dialog/inkscape-preferences.cpp:891
 msgid "Highlights colors that are out of gamut for the target device."
 msgstr "Помечать цвета, выходящие за рамки цветового охвата для данного устройства"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:880
+#: ../src/ui/dialog/inkscape-preferences.cpp:896
 msgid "Out of gamut warning color:"
 msgstr "Цвета вне цветового охвата:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:881
+#: ../src/ui/dialog/inkscape-preferences.cpp:897
 msgid "Selects the color used for out of gamut warning."
 msgstr "Выберите цвет предупреждения о выходе за цветовой охват."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:883
+#: ../src/ui/dialog/inkscape-preferences.cpp:899
 msgid "Device profile:"
 msgstr "Профиль устройства вывода:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:884
+#: ../src/ui/dialog/inkscape-preferences.cpp:900
 msgid "The ICC profile to use to simulate device output."
 msgstr "ICC-профиль, используемый для имитации устройства вывода"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:887
+#: ../src/ui/dialog/inkscape-preferences.cpp:903
 msgid "Device rendering intent:"
 msgstr "Цветопередача устройства вывода:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:890
+#: ../src/ui/dialog/inkscape-preferences.cpp:906
 msgid "Black point compensation"
 msgstr "Использовать компенсацию черной точки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:892
+#: ../src/ui/dialog/inkscape-preferences.cpp:908
 msgid "Enables black point compensation."
 msgstr "Включить компенсацию черной точки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:894
+#: ../src/ui/dialog/inkscape-preferences.cpp:910
 msgid "Preserve black"
 msgstr "Сохранять черный цвет"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:899
+#: ../src/ui/dialog/inkscape-preferences.cpp:915
 msgid "(LittleCMS 1.15 or later required)"
 msgstr "(необходима библиотека LittleCMS версии 1.15 или новее)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:901
+#: ../src/ui/dialog/inkscape-preferences.cpp:917
 msgid "Preserve K channel in CMYK -> CMYK transforms"
 msgstr "Сохранять канал K при преобразованиях CMYK → CMYK"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:914
+#: ../src/ui/dialog/inkscape-preferences.cpp:930
 #: ../src/widgets/sp-color-icc-selector.cpp:306
 #: ../src/widgets/sp-color-icc-selector.cpp:579
 msgid "<none>"
 msgstr "<нет>"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:959
+#: ../src/ui/dialog/inkscape-preferences.cpp:975
 msgid "Color management"
 msgstr "Управление цветом"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:964
+#: ../src/ui/dialog/inkscape-preferences.cpp:980
 msgid "Major grid line emphasizing"
 msgstr "Выделение основной линии сетки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:966
+#: ../src/ui/dialog/inkscape-preferences.cpp:982
 msgid "Don't emphasize gridlines when zoomed out"
 msgstr "Не подчеркивать линии сетки на большом удалении"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:967
+#: ../src/ui/dialog/inkscape-preferences.cpp:983
 msgid "If set and zoomed out, the gridlines will be shown in normal color instead of major grid line color."
 msgstr "При просмотре на большом удалении основные линии сетки будут отображаться обычным цветом."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:969
+#: ../src/ui/dialog/inkscape-preferences.cpp:985
 msgid "Default grid settings"
 msgstr "Параметры сетки по умолчанию"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:975
-#: ../src/ui/dialog/inkscape-preferences.cpp:996
+#: ../src/ui/dialog/inkscape-preferences.cpp:991
+#: ../src/ui/dialog/inkscape-preferences.cpp:1012
 msgid "Grid units:"
 msgstr "Единицы сетки:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:978
-#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:994
+#: ../src/ui/dialog/inkscape-preferences.cpp:1015
 msgid "Origin X:"
 msgstr "Точка отсчета по X:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:979
-#: ../src/ui/dialog/inkscape-preferences.cpp:1000
+#: ../src/ui/dialog/inkscape-preferences.cpp:995
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
 msgid "Origin Y:"
 msgstr "Точка отсчета по Y:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:982
+#: ../src/ui/dialog/inkscape-preferences.cpp:998
 msgid "Spacing X:"
 msgstr "Интервал по X:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:983
-#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:1018
 msgid "Spacing Y:"
 msgstr "Интервал по Y:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:985
-#: ../src/ui/dialog/inkscape-preferences.cpp:986
-#: ../src/ui/dialog/inkscape-preferences.cpp:1007
-#: ../src/ui/dialog/inkscape-preferences.cpp:1008
+#: ../src/ui/dialog/inkscape-preferences.cpp:1001
+#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:1023
+#: ../src/ui/dialog/inkscape-preferences.cpp:1024
 msgid "Grid line color:"
 msgstr "Цвет обычных линий сетки:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:986
-#: ../src/ui/dialog/inkscape-preferences.cpp:1008
+#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:1024
 msgid "Color used for normal grid lines"
 msgstr "Цвет обычных линий сетки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:987
-#: ../src/ui/dialog/inkscape-preferences.cpp:988
-#: ../src/ui/dialog/inkscape-preferences.cpp:1009
-#: ../src/ui/dialog/inkscape-preferences.cpp:1010
+#: ../src/ui/dialog/inkscape-preferences.cpp:1003
+#: ../src/ui/dialog/inkscape-preferences.cpp:1004
+#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+#: ../src/ui/dialog/inkscape-preferences.cpp:1026
 msgid "Major grid line color:"
 msgstr "Цвет основных линий сетки:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:988
-#: ../src/ui/dialog/inkscape-preferences.cpp:1010
+#: ../src/ui/dialog/inkscape-preferences.cpp:1004
+#: ../src/ui/dialog/inkscape-preferences.cpp:1026
 msgid "Color used for major (highlighted) grid lines"
 msgstr "Цвет основных линий сетки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:990
-#: ../src/ui/dialog/inkscape-preferences.cpp:1012
+#: ../src/ui/dialog/inkscape-preferences.cpp:1006
+#: ../src/ui/dialog/inkscape-preferences.cpp:1028
 msgid "Major grid line every:"
 msgstr "Основная линия сетки каждые:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:991
+#: ../src/ui/dialog/inkscape-preferences.cpp:1007
 msgid "Show dots instead of lines"
 msgstr "Показывать точки вместо линий"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:992
+#: ../src/ui/dialog/inkscape-preferences.cpp:1008
 msgid "If set, display dots at gridpoints instead of gridlines"
 msgstr "Если включено, сетка отображается лишь точками пересечения ее линий, а не самими линиями"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1019
+#: ../src/ui/dialog/inkscape-preferences.cpp:1035
 msgid "Use named colors"
 msgstr "Использовать именованные цвета"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1020
+#: ../src/ui/dialog/inkscape-preferences.cpp:1036
 msgid "If set, write the CSS name of the color when available (e.g. 'red' or 'magenta') instead of the numeric value"
 msgstr "Если включено, записывать название цвета по CSS (например, 'red' или 'magenta') вместо числового значения"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1022
+#: ../src/ui/dialog/inkscape-preferences.cpp:1038
 msgid "XML formatting"
 msgstr "Форматирование XML"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1024
+#: ../src/ui/dialog/inkscape-preferences.cpp:1040
 msgid "Inline attributes"
 msgstr "Внутристрочные атрибуты"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+#: ../src/ui/dialog/inkscape-preferences.cpp:1041
 msgid "Put attributes on the same line as the element tag"
 msgstr "Атрибуты пишутся в той же строке, что и тэги элемента"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+#: ../src/ui/dialog/inkscape-preferences.cpp:1044
 msgid "Indent, spaces:"
 msgstr "Отступ в пробелах:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+#: ../src/ui/dialog/inkscape-preferences.cpp:1044
 msgid "The number of spaces to use for indenting nested elements; set to 0 for no indentation"
 msgstr "Количество пробелов, используемых для отступов вложенных элементов; ноль выключает отступы"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1030
+#: ../src/ui/dialog/inkscape-preferences.cpp:1046
 msgid "Path data"
 msgstr "Данные контуров"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1032
+#: ../src/ui/dialog/inkscape-preferences.cpp:1048
 msgid "Allow relative coordinates"
 msgstr "Разрешать относительные координаты"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1033
+#: ../src/ui/dialog/inkscape-preferences.cpp:1049
 msgid "If set, relative coordinates may be used in path data"
 msgstr "Если включено, в данных контура могут использоваться относительные координаты"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1035
+#: ../src/ui/dialog/inkscape-preferences.cpp:1051
 msgid "Force repeat commands"
 msgstr "Принудительно повторять команды"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1036
+#: ../src/ui/dialog/inkscape-preferences.cpp:1052
 msgid "Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead of 'L 1,2 3,4')"
 msgstr "Принудительно повторять команды контуров (например, 'L 1,2 L 3,4' вместо 'L 1,2 3,4')"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1038
+#: ../src/ui/dialog/inkscape-preferences.cpp:1054
 msgid "Numbers"
 msgstr "Числа"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1041
+#: ../src/ui/dialog/inkscape-preferences.cpp:1057
 msgid "Numeric precision:"
 msgstr "Точность чисел:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1041
+#: ../src/ui/dialog/inkscape-preferences.cpp:1057
 msgid "How many digits to write after the decimal dot"
 msgstr "Сколько цифр писать после десятичного разделителя"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1044
+#: ../src/ui/dialog/inkscape-preferences.cpp:1060
 msgid "Minimum exponent:"
 msgstr "Минимальная экспонента:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1044
+#: ../src/ui/dialog/inkscape-preferences.cpp:1060
 msgid "The smallest number written to SVG is 10 to the power of this exponent; anything smaller is written as zero."
 msgstr "Самое малое число, записываемое в файл SVG равно десяти в этой степени; всё, что меньше, записывается как ноль."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1046
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "SVG output"
 msgstr "Экспорт в SVG"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "System default"
 msgstr "Используемый системой"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Albanian (sq)"
 msgstr "Албанский (sq)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Amharic (am)"
 msgstr "Амхарский (am)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Arabic (ar)"
 msgstr "Арабский (ar)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Armenian (hy)"
 msgstr "Армянский (hy)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Azerbaijani (az)"
 msgstr "Азербайджанский (az)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Basque (eu)"
 msgstr "Баскский (eu)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Belarusian (be)"
 msgstr "Белорусский (be)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Bulgarian (bg)"
 msgstr "Болгарский (bg)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Bengali (bn)"
 msgstr "Бенгальский (bn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Breton (br)"
 msgstr "Бретонский (br)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Catalan (ca)"
 msgstr "Каталонский (ca)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Valencian Catalan (ca@valencia)"
 msgstr "Каталонский, Валенсия (ca@valencia)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Chinese/China (zh_CN)"
 msgstr "Китайский, Китай (zh_CN)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Chinese/Taiwan (zh_TW)"
 msgstr "Китайский, Тайвань (zh_TW)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Croatian (hr)"
 msgstr "Хорватский (hr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Czech (cs)"
 msgstr "Чешский (cs)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Danish (da)"
 msgstr "Датский (da)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Dutch (nl)"
 msgstr "Голландский (nl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Dzongkha (dz)"
 msgstr "Дзонг-кэ (dz)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "German (de)"
 msgstr "Немецкий (de)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Greek (el)"
 msgstr "Греческий (el)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "English (en)"
 msgstr "Английский (en)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "English/Australia (en_AU)"
 msgstr "Английский, Австралия (en_AU)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "English/Canada (en_CA)"
 msgstr "Английский, Канада (en_CA)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "English/Great Britain (en_GB)"
 msgstr "Английский, Великобритания (en_GB)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Pig Latin (en_US@piglatin)"
 msgstr "Поросячья латынь (en_US@piglatin)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Esperanto (eo)"
 msgstr "Эсперанто (eo)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Estonian (et)"
 msgstr "Эстонский (et)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Finnish (fi)"
 msgstr "Финский (fi)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "French (fr)"
 msgstr "Французский (fr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Irish (ga)"
 msgstr "Ирландский (ga)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Galician (gl)"
 msgstr "Галицийский (gl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Hebrew (he)"
 msgstr "Иврит (he)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Hungarian (hu)"
 msgstr "Венгерский (hu)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Indonesian (id)"
 msgstr "Индонезийский (id)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Italian (it)"
 msgstr "Итальянский (it)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Japanese (ja)"
 msgstr "Японский (ja)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Khmer (km)"
 msgstr "Кхмерский (km)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Kinyarwanda (rw)"
 msgstr "Руанда (rw)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Korean (ko)"
 msgstr "Корейский (ko)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Lithuanian (lt)"
 msgstr "Литовский (lt)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1074
 msgid "Macedonian (mk)"
 msgstr "Македонский (mk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Mongolian (mn)"
 msgstr "Монгольский (mn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Nepali (ne)"
 msgstr "Непальский (ne)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Norwegian Bokmål (nb)"
 msgstr "Норвежский, бокмол (nb)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Norwegian Nynorsk (nn)"
 msgstr "Норвежский, нюнорск (nn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1075
 msgid "Panjabi (pa)"
 msgstr "Пенджаби (pa)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Polish (pl)"
 msgstr "Польский (pl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Portuguese (pt)"
 msgstr "Португальский (pt)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Portuguese/Brazil (pt_BR)"
 msgstr "Португальский, Бразилия (pt_BR)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Romanian (ro)"
 msgstr "Румынский (ro)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1076
 msgid "Russian (ru)"
 msgstr "Русский (ru)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Serbian (sr)"
 msgstr "Сербский, кириллица (sr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Serbian in Latin script (sr@latin)"
 msgstr "Сербский, латиница (sr@latin)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Slovak (sk)"
 msgstr "Словацкий (sk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Slovenian (sl)"
 msgstr "Словенский (sl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Spanish (es)"
 msgstr "Испанский (es)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Spanish/Mexico (es_MX)"
 msgstr "Испанский, Мексика (es_MX)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Swedish (sv)"
 msgstr "Шведский (sv)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Thai (th)"
 msgstr "Тайский (th)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Turkish (tr)"
 msgstr "Турецкий (tr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Ukrainian (uk)"
 msgstr "Украинский (uk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1078
 msgid "Vietnamese (vi)"
 msgstr "Вьетнамский (vi)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1069
+#: ../src/ui/dialog/inkscape-preferences.cpp:1085
 msgid "Language (requires restart):"
 msgstr "Язык (нужен перезапуск):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1070
+#: ../src/ui/dialog/inkscape-preferences.cpp:1086
 msgid "Set the language for menus and number formats"
 msgstr "Укажите язык интерфейса и формата чисел"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/ui/dialog/inkscape-preferences.cpp:1088
 msgid "Smaller"
 msgstr "Еще меньше"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1076
+#: ../src/ui/dialog/inkscape-preferences.cpp:1092
 msgid "Toolbox icon size"
 msgstr "Значки панели инструментов:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1077
+#: ../src/ui/dialog/inkscape-preferences.cpp:1093
 msgid "Set the size for the tool icons (requires restart)"
 msgstr "Изменить размер значков в панели инструментов (требует перезапуска программы)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1080
+#: ../src/ui/dialog/inkscape-preferences.cpp:1096
 msgid "Control bar icon size"
 msgstr "Значки панели параметров:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1081
+#: ../src/ui/dialog/inkscape-preferences.cpp:1097
 msgid "Set the size for the icons in tools' control bars to use (requires restart)"
 msgstr "Изменить размер значков в панели команд (требует перезапуска программы)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1084
+#: ../src/ui/dialog/inkscape-preferences.cpp:1100
 msgid "Secondary toolbar icon size"
 msgstr "Второй размер значков:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1085
+#: ../src/ui/dialog/inkscape-preferences.cpp:1101
 msgid "Set the size for the icons in secondary toolbars to use (requires restart)"
 msgstr "Изменить размер значков в панели параметров инструментов (требует перезапуска программы)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1088
+#: ../src/ui/dialog/inkscape-preferences.cpp:1104
 msgid "Work-around color sliders not drawing."
 msgstr "Попытаться исправить ползунок альфа-канала"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1090
+#: ../src/ui/dialog/inkscape-preferences.cpp:1106
 msgid "When on, will attempt to work around bugs in certain GTK themes drawing color sliders."
 msgstr "При использовании некоторых тем GTK+ ползунок альфа-канал замирает на отметке 244. Inkscape может попытаться исправить это."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1096
+#: ../src/ui/dialog/inkscape-preferences.cpp:1112
 msgid "Clear list"
 msgstr "Очистить список"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1101
+#: ../src/ui/dialog/inkscape-preferences.cpp:1117
 msgid "Maximum documents in Open Recent:"
 msgstr "Недавних документов в меню:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1102
+#: ../src/ui/dialog/inkscape-preferences.cpp:1118
 msgid "Set the maximum length of the Open Recent list in the File menu, or clear the list"
 msgstr "Сколько недавно открывавшихся документов помнить"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1105
+#: ../src/ui/dialog/inkscape-preferences.cpp:1121
 msgid "Zoom correction factor (in %):"
 msgstr "Масштаб видимой страницы (%):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1106
+#: ../src/ui/dialog/inkscape-preferences.cpp:1122
 msgid "Adjust the slider until the length of the ruler on your screen matches its real length. This information is used when zooming to 1:1, 1:2, etc., to display objects in their true sizes"
 msgstr "Приложите к экрану линейку и перетащите ползунок до позиции, при которой деления на линейке и на экране совпадают. После этого масштаб отображения документа 1:1 будет соответствовать реальному."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1108
+#: ../src/ui/dialog/inkscape-preferences.cpp:1124
 msgid "Interface"
 msgstr "Интерфейс"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1114
+#: ../src/ui/dialog/inkscape-preferences.cpp:1130
 msgid "Use current directory for \"Save As ...\""
 msgstr "Использовать текущий каталог при сохранении файла под другим именем"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1116
+#: ../src/ui/dialog/inkscape-preferences.cpp:1132
 msgid "When this option is on, the \"Save as...\" dialog will always open in the directory where the currently open document is. When it's off, it will open in the directory where you last saved a file using that dialog."
 msgstr "Если включено, при сохранении файла под другим именем диалога всегда будет открываться в каталоге, где сохранён текущий файл. Если выключено, будет открываться каталог, в котором был в последний раз сохранён какой-либо файл."
 
 #. Autosave options
-#: ../src/ui/dialog/inkscape-preferences.cpp:1120
+#: ../src/ui/dialog/inkscape-preferences.cpp:1136
 msgid "Enable autosave (requires restart)"
 msgstr "Включить автосохранение (требует перезапуска программы)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1121
+#: ../src/ui/dialog/inkscape-preferences.cpp:1137
 msgid "Automatically save the current document(s) at a given interval, thus minimizing loss in case of a crash"
 msgstr "Автоматически сохранять текущий документ через заданный временной интервал, минимизируя риск потери данных"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1123
+#: ../src/ui/dialog/inkscape-preferences.cpp:1139
 msgid "Interval (in minutes):"
 msgstr "Интервал (в минутах):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1123
+#: ../src/ui/dialog/inkscape-preferences.cpp:1139
 msgid "Interval (in minutes) at which document will be autosaved"
 msgstr "Интервал в минутах, через который документ автоматически сохраняется"
 
 #. TRANSLATORS: only translate "string" in "context|string".
 #. For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS
-#: ../src/ui/dialog/inkscape-preferences.cpp:1127
+#: ../src/ui/dialog/inkscape-preferences.cpp:1143
 msgid "filesystem|Path:"
 msgstr "Путь:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1127
+#: ../src/ui/dialog/inkscape-preferences.cpp:1143
 msgid "The directory where autosaves will be written"
 msgstr "Каталог, в который записываются файлы автосохранения"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1129
+#: ../src/ui/dialog/inkscape-preferences.cpp:1145
 msgid "Maximum number of autosaves:"
 msgstr "Максимальное число автосохранений:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1129
+#: ../src/ui/dialog/inkscape-preferences.cpp:1145
 msgid "Maximum number of autosaved files; use this to limit the storage space used"
 msgstr "Максимальное число файлов автосохранения; используйте этот параметр для ограничения используемого дискового пространства"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
 msgid "2x2"
 msgstr "2×2"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
 msgid "4x4"
 msgstr "4×4"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
 msgid "8x8"
 msgstr "8×8"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1167
 msgid "16x16"
 msgstr "16×16"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1155
+#: ../src/ui/dialog/inkscape-preferences.cpp:1171
 msgid "Oversample bitmaps:"
 msgstr "Усреднять растр по точкам:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1158
+#: ../src/ui/dialog/inkscape-preferences.cpp:1174
 msgid "Automatically reload bitmaps"
 msgstr "Автоматически перезагружать растровые файлы"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1160
+#: ../src/ui/dialog/inkscape-preferences.cpp:1176
 msgid "Automatically reload linked images when file is changed on disk"
 msgstr "Автоматически заново загружать связанные изображения, когда они меняются на диске"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1174
+#: ../src/ui/dialog/inkscape-preferences.cpp:1190
 msgid "Bitmap editor:"
 msgstr "Редактор растровых файлов:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1180
+#: ../src/ui/dialog/inkscape-preferences.cpp:1196
 msgid "Resolution for Create Bitmap Copy:"
 msgstr "Разрешение растровой копии:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1181
+#: ../src/ui/dialog/inkscape-preferences.cpp:1197
 msgid "Resolution used by the Create Bitmap Copy command"
 msgstr "Разрешение растра при создании растровой копии выделения"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1183
+#: ../src/ui/dialog/inkscape-preferences.cpp:1199
 msgid "Bitmaps"
 msgstr "Растр"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1235
+#: ../src/ui/dialog/inkscape-preferences.cpp:1251
 msgid "Language:"
 msgstr "Язык:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1236
+#: ../src/ui/dialog/inkscape-preferences.cpp:1252
 msgid "Set the main spell check language"
 msgstr "Первый по важности язык для проверки орфографии"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1239
+#: ../src/ui/dialog/inkscape-preferences.cpp:1255
 msgid "Second language:"
 msgstr "Второй язык:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1240
+#: ../src/ui/dialog/inkscape-preferences.cpp:1256
 msgid "Set the second spell check language; checking will only stop on words unknown in ALL chosen languages"
 msgstr "Второй по важности язык для проверки орфографии; проверка завершится лишь в случае ненахождения слов во ВСЕХ выбранных языках."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1243
+#: ../src/ui/dialog/inkscape-preferences.cpp:1259
 msgid "Third language:"
 msgstr "Третий язык:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1244
+#: ../src/ui/dialog/inkscape-preferences.cpp:1260
 msgid "Set the third spell check language; checking will only stop on words unknown in ALL chosen languages"
 msgstr "Третий по важности язык для проверки орфографии; проверка завершится лишь в случае ненахождения слов во ВСЕХ выбранных языках."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1246
+#: ../src/ui/dialog/inkscape-preferences.cpp:1262
 msgid "Ignore words with digits"
 msgstr "Игнорировать слова с цифрами"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1248
+#: ../src/ui/dialog/inkscape-preferences.cpp:1264
 msgid "Ignore words containing digits, such as \"R2D2\""
 msgstr "Инорировать слова, содержащие цифры — например, \"R2D2\""
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1250
+#: ../src/ui/dialog/inkscape-preferences.cpp:1266
 msgid "Ignore words in ALL CAPITALS"
 msgstr "Игнорировать слова, написанные заглавными"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1252
+#: ../src/ui/dialog/inkscape-preferences.cpp:1268
 msgid "Ignore words in all capitals, such as \"IUPAC\""
 msgstr "Игнорировать слова, написанные заглавными — например, «НИИЧАВО»"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1254
+#: ../src/ui/dialog/inkscape-preferences.cpp:1270
 msgid "Spellcheck"
 msgstr "Проверка орфографии"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1273
+#: ../src/ui/dialog/inkscape-preferences.cpp:1289
 msgid "Add label comments to printing output"
 msgstr "Добавлять метки в виде комментариев при выводе на печать"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1275
+#: ../src/ui/dialog/inkscape-preferences.cpp:1291
 msgid "When on, a comment will be added to the raw print output, marking the rendered output for an object with its label"
 msgstr "С этой опцией при выводе на печать будут добавляться комментарии, содержащие метки для каждого объекта"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1277
+#: ../src/ui/dialog/inkscape-preferences.cpp:1293
 msgid "Prevent sharing of gradient definitions"
 msgstr "Не разделять определения градиентов между объектами"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1279
+#: ../src/ui/dialog/inkscape-preferences.cpp:1295
 msgid "When on, shared gradient definitions are automatically forked on change; uncheck to allow sharing of gradient definitions so that editing one object may affect other objects using the same gradient"
 msgstr "Если параметр включен, разделяемые определения (defs) градиентов при изменении копируются в новые; если выключен, определения разделяются между объектами, так что изменение градиента для одного объекта может сказаться на другом объекте."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1282
+#: ../src/ui/dialog/inkscape-preferences.cpp:1298
 msgid "Simplification threshold:"
 msgstr "Порог упрощения:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1283
+#: ../src/ui/dialog/inkscape-preferences.cpp:1299
 msgid "How strong is the Node tool's Simplify command by default. If you invoke this command several times in quick succession, it will act more and more aggressively; invoking it again after a pause restores the default threshold."
 msgstr "Степень упрощения по команде «Упростить». Если вызывать эту команду несколько раз подряд, она будет действовать с каждым разом все более агрессивно; чтобы вернуться к значению по умолчанию, сделайте паузу перед очередным вызовом команды."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1286
+#: ../src/ui/dialog/inkscape-preferences.cpp:1302
 msgid "Latency skew:"
 msgstr "Отклонение задержки:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1286
-msgid "(requires restart)"
-msgstr "(требует перезапуска программы)"
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:1287
+#: ../src/ui/dialog/inkscape-preferences.cpp:1303
 msgid "Factor by which the event clock is skewed from the actual time (0.9766 on some systems)."
 msgstr "Коэффициент, на который часы событий отклоняются от настоящего времени (0.9766 в некоторых системах)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1289
+#: ../src/ui/dialog/inkscape-preferences.cpp:1305
 msgid "Pre-render named icons"
 msgstr "Предварительно отрисовывать именованные значки"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1291
+#: ../src/ui/dialog/inkscape-preferences.cpp:1307
 msgid "When on, named icons will be rendered before displaying the ui. This is for working around bugs in GTK+ named icon notification"
 msgstr "Если включено, именованные значки будут отрисовываться перед отображением интерфейса. Это местечковое решение ошибки в GTK+, касающейся именованных значков."
 
 #. TRANSLATORS: following strings are paths in Inkscape preferences - Misc - System info
-#: ../src/ui/dialog/inkscape-preferences.cpp:1297
+#: ../src/ui/dialog/inkscape-preferences.cpp:1313
 msgid "User config: "
 msgstr "Пользовательская конфигурация:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1301
+#: ../src/ui/dialog/inkscape-preferences.cpp:1317
 msgid "User data: "
 msgstr "Данные пользователя:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1305
+#: ../src/ui/dialog/inkscape-preferences.cpp:1321
 msgid "User cache: "
 msgstr "Кэш пользователя:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1309
+#: ../src/ui/dialog/inkscape-preferences.cpp:1325
 msgid "System config: "
 msgstr "Конфигурация системы:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1312
+#: ../src/ui/dialog/inkscape-preferences.cpp:1328
 msgid "System data: "
 msgstr "Данные о системе"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1315
+#: ../src/ui/dialog/inkscape-preferences.cpp:1331
 msgid "PIXMAP: "
 msgstr "Значки:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1319
+#: ../src/ui/dialog/inkscape-preferences.cpp:1335
 msgid "DATA: "
 msgstr "Данные:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1323
+#: ../src/ui/dialog/inkscape-preferences.cpp:1339
 msgid "UI: "
 msgstr "Интерфейс:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1332
+#: ../src/ui/dialog/inkscape-preferences.cpp:1348
 msgid "Icon theme: "
 msgstr "Тема значков:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1347
+#: ../src/ui/dialog/inkscape-preferences.cpp:1363
 msgid "System info"
 msgstr "Информация о системе"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1347
+#: ../src/ui/dialog/inkscape-preferences.cpp:1363
 msgid "General system information"
 msgstr "Общая информация о системе"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1349
+#: ../src/ui/dialog/inkscape-preferences.cpp:1365
 msgid "Misc"
 msgstr "Прочее"
 
@@ -14023,6 +14100,10 @@ msgstr "Можно выбрать только один объект"
 msgid "Empty selection"
 msgstr "Выделение пусто"
 
+#: ../src/ui/dialog/livepatheffect-editor.cpp:308
+msgid "Unknown effect"
+msgstr "Неизвестный эффект"
+
 #: ../src/ui/dialog/livepatheffect-editor.cpp:374
 msgid "Create and apply path effect"
 msgstr "Создание контурного эффекта"
@@ -14170,6 +14251,95 @@ msgstr "Вывод"
 msgid "Errors"
 msgstr "Ошибки"
 
+#: ../src/ui/dialog/spray-option.cpp:154
+#: ../share/extensions/polyhedron_3d.inx.h:26
+msgid "Minimum"
+msgstr "Минимум"
+
+#: ../src/ui/dialog/spray-option.cpp:156
+msgid "Min"
+msgstr "Мин:"
+
+#: ../src/ui/dialog/spray-option.cpp:164
+#: ../share/extensions/polyhedron_3d.inx.h:24
+msgid "Maximum"
+msgstr "Максимум"
+
+#: ../src/ui/dialog/spray-option.cpp:166
+msgid "Max:"
+msgstr "Макс:"
+
+#: ../src/ui/dialog/spray-option.cpp:245
+msgid "sprayOptions|Distribution"
+msgstr "Распределение"
+
+#: ../src/ui/dialog/spray-option.cpp:246
+msgid "sprayOptions|Cursor Options"
+msgstr "Параметры указателя распылителя"
+
+#: ../src/ui/dialog/spray-option.cpp:247
+msgid "sprayOptions|Random Options"
+msgstr "Параметры случайности"
+
+#. ComboBoxText
+#: ../src/ui/dialog/spray-option.cpp:251
+#: ../src/ui/dialog/spray-option.cpp:260
+msgid "sprayOptions|Uniform"
+msgstr "Единообразное"
+
+#: ../src/ui/dialog/spray-option.cpp:252
+#: ../src/ui/dialog/spray-option.cpp:261
+msgid "sprayOptions|Gaussian"
+msgstr "По Гауссу"
+
+#: ../src/ui/dialog/spray-option.cpp:253
+msgid "sprayOptions|Distribution:"
+msgstr "Распределение:"
+
+#. Hbox Random
+#: ../src/ui/dialog/spray-option.cpp:277
+msgid "sprayOptions|Scale:"
+msgstr "Масштаб:"
+
+#: ../src/ui/dialog/spray-option.cpp:277
+#, fuzzy
+msgid "Apply a scale factor"
+msgstr "Свой коэфф. масштабирования:"
+
+#: ../src/ui/dialog/spray-option.cpp:278
+msgid "sprayOptions|Rotation:"
+msgstr "Вращение:"
+
+#: ../src/ui/dialog/spray-option.cpp:278
+#, fuzzy
+msgid "Apply rotation"
+msgstr "Видение"
+
+#. Hbox Cursor
+#: ../src/ui/dialog/spray-option.cpp:287
+msgid "sprayOptions|Ratio:"
+msgstr "Соотношение сторон:"
+
+#: ../src/ui/dialog/spray-option.cpp:287
+msgid "Eccentricity of the ellipse"
+msgstr "Эксцентриситет эллипса"
+
+#: ../src/ui/dialog/spray-option.cpp:288
+msgid "sprayOptions|Angle:"
+msgstr "Угол:"
+
+#: ../src/ui/dialog/spray-option.cpp:288
+msgid "Angle of the ellipse"
+msgstr "Угол наклона эллипса"
+
+#: ../src/ui/dialog/spray-option.cpp:289
+msgid "sprayOptions|Width:"
+msgstr "Ширина:"
+
+#: ../src/ui/dialog/spray-option.cpp:289
+msgid "Size of the ellipse"
+msgstr "Размер эллипса"
+
 #: ../src/ui/dialog/svg-fonts-dialog.cpp:121
 msgid "Set SVG Font attribute"
 msgstr "Установить атрибут SVG Font"
@@ -14600,7 +14770,8 @@ msgstr "Множественное сканирование: создаёт гр
 #. # end multiple scan
 #. ## end mode page
 #: ../src/ui/dialog/tracedialog.cpp:563
-#: ../src/widgets/toolbox.cpp:4249
+#: ../src/widgets/toolbox.cpp:4276
+#: ../src/widgets/toolbox.cpp:4544
 #: ../share/extensions/triangle.inx.h:9
 msgid "Mode"
 msgstr "Режим"
@@ -14652,6 +14823,7 @@ msgstr "Сглаживание:"
 #: ../src/ui/dialog/tracedialog.cpp:623
 #: ../share/extensions/dxf_input.inx.h:11
 #: ../share/extensions/dxf_outlines.inx.h:9
+#: ../share/extensions/scour.inx.h:10
 msgid "Options"
 msgstr "Параметры"
 
@@ -14843,47 +15015,47 @@ msgstr "Применить эти изменения к выбранному"
 msgid "Edit transformation matrix"
 msgstr "Правка матрицы преобразования"
 
-#: ../src/ui/view/edit-widget.cpp:330
-#: ../src/ui/view/edit-widget.cpp:335
-#: ../src/ui/view/edit-widget.cpp:343
-#: ../src/ui/view/edit-widget.cpp:348
-#: ../src/ui/view/edit-widget.cpp:353
-#: ../src/ui/view/edit-widget.cpp:368
-#: ../src/ui/view/edit-widget.cpp:381
-#: ../src/ui/view/edit-widget.cpp:386
-#: ../src/ui/view/edit-widget.cpp:400
-#: ../src/ui/view/edit-widget.cpp:404
-#: ../src/ui/view/edit-widget.cpp:412
-#: ../src/ui/view/edit-widget.cpp:416
-#: ../src/ui/view/edit-widget.cpp:420
-#: ../src/ui/view/edit-widget.cpp:756
-#: ../src/ui/view/edit-widget.cpp:761
-#: ../src/ui/view/edit-widget.cpp:867
-#: ../src/ui/view/edit-widget.cpp:871
-#: ../src/ui/view/edit-widget.cpp:992
+#: ../src/ui/view/edit-widget.cpp:336
+#: ../src/ui/view/edit-widget.cpp:341
+#: ../src/ui/view/edit-widget.cpp:349
+#: ../src/ui/view/edit-widget.cpp:354
+#: ../src/ui/view/edit-widget.cpp:359
+#: ../src/ui/view/edit-widget.cpp:374
+#: ../src/ui/view/edit-widget.cpp:387
+#: ../src/ui/view/edit-widget.cpp:392
+#: ../src/ui/view/edit-widget.cpp:406
+#: ../src/ui/view/edit-widget.cpp:410
+#: ../src/ui/view/edit-widget.cpp:418
+#: ../src/ui/view/edit-widget.cpp:422
+#: ../src/ui/view/edit-widget.cpp:426
+#: ../src/ui/view/edit-widget.cpp:762
+#: ../src/ui/view/edit-widget.cpp:767
+#: ../src/ui/view/edit-widget.cpp:873
+#: ../src/ui/view/edit-widget.cpp:877
+#: ../src/ui/view/edit-widget.cpp:998
 msgid "PLACEHOLDER, do not translate"
 msgstr "PLACEHOLDER, do not translate"
 
-#: ../src/ui/view/edit-widget.cpp:1051
+#: ../src/ui/view/edit-widget.cpp:1057
 #: ../src/widgets/desktop-widget.cpp:379
 msgid "Zoom drawing if window size changes"
 msgstr "Изменять масштаб при изменении размеров окна"
 
-#: ../src/ui/view/edit-widget.cpp:1072
+#: ../src/ui/view/edit-widget.cpp:1078
 #: ../src/widgets/desktop-widget.cpp:503
 msgid "Cursor coordinates"
 msgstr "Координаты курсора"
 
-#: ../src/ui/view/edit-widget.cpp:1082
+#: ../src/ui/view/edit-widget.cpp:1088
 #: ../src/widgets/desktop-widget.cpp:518
 msgid "Z:"
 msgstr "Z:"
 
-#: ../src/ui/view/edit-widget.cpp:1089
+#: ../src/ui/view/edit-widget.cpp:1095
 msgid "<b>Welcome to Inkscape!</b> Use shape or drawing tools to create objects; use selector (arrow) to move or transform them."
 msgstr "<b>Добро пожаловать в Inkscape!</b> Используйте инструменты фигур или рисования для создания объектов; используйте селектор (стрелку) для их перемещения и трансформации."
 
-#: ../src/ui/view/edit-widget.cpp:1200
+#: ../src/ui/view/edit-widget.cpp:1206
 #: ../src/widgets/desktop-widget.cpp:838
 #, c-format
 msgid ""
@@ -14895,14 +15067,14 @@ msgstr ""
 "\n"
 "Если вы закроете документ, не сохранив его, все изменения будут потеряны."
 
-#: ../src/ui/view/edit-widget.cpp:1211
-#: ../src/ui/view/edit-widget.cpp:1259
+#: ../src/ui/view/edit-widget.cpp:1217
+#: ../src/ui/view/edit-widget.cpp:1265
 #: ../src/widgets/desktop-widget.cpp:845
 #: ../src/widgets/desktop-widget.cpp:902
 msgid "Close _without saving"
 msgstr "_Не сохранять"
 
-#: ../src/ui/view/edit-widget.cpp:1247
+#: ../src/ui/view/edit-widget.cpp:1253
 #: ../src/widgets/desktop-widget.cpp:894
 #, c-format
 msgid ""
@@ -14914,7 +15086,7 @@ msgstr ""
 "\n"
 "Сохранить документ в формате Inkscape SVG?"
 
-#: ../src/ui/view/edit-widget.cpp:1262
+#: ../src/ui/view/edit-widget.cpp:1268
 #: ../src/widgets/desktop-widget.cpp:905
 msgid "_Save as SVG"
 msgstr "_Сохранить как SVG"
@@ -14961,48 +15133,48 @@ msgstr "Смена размывания"
 msgid "Change opacity"
 msgstr "Смена непрозрачности"
 
-#: ../src/ui/widget/page-sizer.cpp:209
+#: ../src/ui/widget/page-sizer.cpp:229
 msgid "U_nits:"
 msgstr "Едини_цы:"
 
-#: ../src/ui/widget/page-sizer.cpp:210
+#: ../src/ui/widget/page-sizer.cpp:230
 msgid "Width of paper"
 msgstr "Ширина бумаги"
 
-#: ../src/ui/widget/page-sizer.cpp:211
+#: ../src/ui/widget/page-sizer.cpp:231
 msgid "Height of paper"
 msgstr "Высота бумаги"
 
-#: ../src/ui/widget/page-sizer.cpp:257
+#: ../src/ui/widget/page-sizer.cpp:277
 msgid "P_age size:"
 msgstr "_Размер:"
 
-#: ../src/ui/widget/page-sizer.cpp:265
+#: ../src/ui/widget/page-sizer.cpp:285
 msgid "Page orientation:"
 msgstr "Ориентация холста:"
 
-#: ../src/ui/widget/page-sizer.cpp:268
+#: ../src/ui/widget/page-sizer.cpp:288
 msgid "_Landscape"
 msgstr "_Альбом"
 
-#: ../src/ui/widget/page-sizer.cpp:273
+#: ../src/ui/widget/page-sizer.cpp:293
 msgid "_Portrait"
 msgstr "П_ортрет"
 
 #. ## Set up custom size frame
-#: ../src/ui/widget/page-sizer.cpp:280
+#: ../src/ui/widget/page-sizer.cpp:300
 msgid "Custom size"
 msgstr "Другой размер"
 
-#: ../src/ui/widget/page-sizer.cpp:293
+#: ../src/ui/widget/page-sizer.cpp:313
 msgid "_Fit page to selection"
 msgstr "В выделение"
 
-#: ../src/ui/widget/page-sizer.cpp:294
+#: ../src/ui/widget/page-sizer.cpp:314
 msgid "Resize the page to fit the current selection, or the entire drawing if there is no selection"
 msgstr "Изменить размер страницы до размеров текущего выделения или всего рисунка, если выделения нет"
 
-#: ../src/ui/widget/page-sizer.cpp:357
+#: ../src/ui/widget/page-sizer.cpp:377
 msgid "Set page size"
 msgstr "Смена формата страницы"
 
@@ -15281,8 +15453,8 @@ msgstr "Белый"
 
 #: ../src/ui/widget/selected-style.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:238
-#: ../src/widgets/sp-color-scales.cpp:463
-#: ../src/widgets/sp-color-scales.cpp:464
+#: ../src/widgets/sp-color-scales.cpp:475
+#: ../src/widgets/sp-color-scales.cpp:476
 msgid "Black"
 msgstr "Черный"
 
@@ -15620,1716 +15792,1735 @@ msgstr "Отразить вертикально"
 #. TRANSLATORS: If you have translated the tutorial-basic.svg file to your language,
 #. then translate this string as "tutorial-basic.LANG.svg" (where LANG is your language
 #. code); otherwise leave as "tutorial-basic.svg".
-#: ../src/verbs.cpp:1912
+#: ../src/verbs.cpp:1922
 msgid "tutorial-basic.svg"
 msgstr "tutorial-basic.ru.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1916
+#: ../src/verbs.cpp:1926
 msgid "tutorial-shapes.svg"
 msgstr "tutorial-shapes.ru.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1920
+#: ../src/verbs.cpp:1930
 msgid "tutorial-advanced.svg"
 msgstr "tutorial-advanced.ru.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1924
+#: ../src/verbs.cpp:1934
 msgid "tutorial-tracing.svg"
 msgstr "tutorial-tracing.ru.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1928
+#: ../src/verbs.cpp:1938
 msgid "tutorial-calligraphy.svg"
 msgstr "tutorial-calligraphy.ru.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1932
+#: ../src/verbs.cpp:1942
 msgid "tutorial-elements.svg"
 msgstr "tutorial-elements.ru.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1936
+#: ../src/verbs.cpp:1946
 msgid "tutorial-tips.svg"
 msgstr "tutorial-tips.ru.svg"
 
-#: ../src/verbs.cpp:2212
-#: ../src/verbs.cpp:2731
+#: ../src/verbs.cpp:2222
+#: ../src/verbs.cpp:2747
 msgid "Unlock all objects in the current layer"
 msgstr "Отпереть все объекты в текущем слое"
 
-#: ../src/verbs.cpp:2216
-#: ../src/verbs.cpp:2733
+#: ../src/verbs.cpp:2226
+#: ../src/verbs.cpp:2749
 msgid "Unlock all objects in all layers"
 msgstr "Отпереть все объекты во всех слоях"
 
-#: ../src/verbs.cpp:2220
-#: ../src/verbs.cpp:2735
+#: ../src/verbs.cpp:2230
+#: ../src/verbs.cpp:2751
 msgid "Unhide all objects in the current layer"
 msgstr "Раскрыть все объекты в текущем слое"
 
-#: ../src/verbs.cpp:2224
-#: ../src/verbs.cpp:2737
+#: ../src/verbs.cpp:2234
+#: ../src/verbs.cpp:2753
 msgid "Unhide all objects in all layers"
 msgstr "Раскрыть все объекты во всех слоях"
 
-#: ../src/verbs.cpp:2239
+#: ../src/verbs.cpp:2249
 msgid "Does nothing"
 msgstr "Нет действий"
 
-#: ../src/verbs.cpp:2242
+#: ../src/verbs.cpp:2252
 msgid "Create new document from the default template"
 msgstr "Создать новый документ из стандартного шаблона"
 
-#: ../src/verbs.cpp:2244
+#: ../src/verbs.cpp:2254
 msgid "_Open..."
 msgstr "_Открыть..."
 
-#: ../src/verbs.cpp:2245
+#: ../src/verbs.cpp:2255
 msgid "Open an existing document"
 msgstr "Открыть существующий документ"
 
-#: ../src/verbs.cpp:2246
+#: ../src/verbs.cpp:2256
 msgid "Re_vert"
 msgstr "_Восстановить"
 
-#: ../src/verbs.cpp:2247
+#: ../src/verbs.cpp:2257
 msgid "Revert to the last saved version of document (changes will be lost)"
 msgstr "Вернуться к последней сохраненной версии документа (изменения будут потеряны)"
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2258
 msgid "_Save"
 msgstr "Со_хранить"
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2258
 msgid "Save document"
 msgstr "Сохранить документ"
 
-#: ../src/verbs.cpp:2250
+#: ../src/verbs.cpp:2260
 msgid "Save _As..."
 msgstr "Сохранить _как..."
 
-#: ../src/verbs.cpp:2251
+#: ../src/verbs.cpp:2261
 msgid "Save document under a new name"
 msgstr "Сохранить документ под другим именем"
 
-#: ../src/verbs.cpp:2252
+#: ../src/verbs.cpp:2262
 msgid "Save a Cop_y..."
 msgstr "Сохр_анить копию..."
 
-#: ../src/verbs.cpp:2253
+#: ../src/verbs.cpp:2263
 msgid "Save a copy of the document under a new name"
 msgstr "Сохранить копию документа под другим именем"
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2264
 msgid "_Print..."
 msgstr "На_печатать..."
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2264
 msgid "Print document"
 msgstr "Напечатать документ"
 
 #. TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions)
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2267
 msgid "Vac_uum Defs"
 msgstr "О_чистить defs"
 
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2267
 msgid "Remove unused definitions (such as gradients or clipping paths) from the &lt;defs&gt; of the document"
 msgstr "Убрать ненужное (например, градиенты или обтравочные контуры) из &lt;defs&gt; документа"
 
-#: ../src/verbs.cpp:2259
+#: ../src/verbs.cpp:2269
 msgid "Print Previe_w"
 msgstr "П_редпросмотр печати"
 
-#: ../src/verbs.cpp:2260
+#: ../src/verbs.cpp:2270
 msgid "Preview document printout"
 msgstr "Предварительный просмотр печати"
 
-#: ../src/verbs.cpp:2261
+#: ../src/verbs.cpp:2271
 msgid "_Import..."
 msgstr "_Импортировать..."
 
-#: ../src/verbs.cpp:2262
+#: ../src/verbs.cpp:2272
 msgid "Import a bitmap or SVG image into this document"
 msgstr "Импортировать растровое или SVG-изображение в документ"
 
-#: ../src/verbs.cpp:2263
+#: ../src/verbs.cpp:2273
 msgid "_Export Bitmap..."
 msgstr "_Экспортировать в растр..."
 
-#: ../src/verbs.cpp:2264
+#: ../src/verbs.cpp:2274
 msgid "Export this document or a selection as a bitmap image"
 msgstr "Экспортировать документ или выделенное в PNG"
 
-#: ../src/verbs.cpp:2265
+#: ../src/verbs.cpp:2275
 msgid "Import a document from Open Clip Art Library"
 msgstr "Импортировать документ из Open Clip Art Library"
 
 #. new FileVerb(SP_VERB_FILE_EXPORT_TO_OCAL, "FileExportToOCAL", N_("Export To Open Clip Art Library"), N_("Export this document to Open Clip Art Library"), INKSCAPE_ICON_DOCUMENT_EXPORT_OCAL),
-#: ../src/verbs.cpp:2267
+#: ../src/verbs.cpp:2277
 msgid "N_ext Window"
 msgstr "Сл_едующее окно"
 
-#: ../src/verbs.cpp:2268
+#: ../src/verbs.cpp:2278
 msgid "Switch to the next document window"
 msgstr "Переключиться в следующее окно документа"
 
-#: ../src/verbs.cpp:2269
+#: ../src/verbs.cpp:2279
 msgid "P_revious Window"
 msgstr "_Предыдущее окно"
 
-#: ../src/verbs.cpp:2270
+#: ../src/verbs.cpp:2280
 msgid "Switch to the previous document window"
 msgstr "Переключиться в предыдущее окно документа"
 
-#: ../src/verbs.cpp:2271
+#: ../src/verbs.cpp:2281
 msgid "_Close"
 msgstr "_Закрыть"
 
-#: ../src/verbs.cpp:2272
+#: ../src/verbs.cpp:2282
 msgid "Close this document window"
 msgstr "Закрыть это окно документа"
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2283
 msgid "_Quit"
 msgstr "В_ыход"
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2283
 msgid "Quit Inkscape"
 msgstr "Завершить работу с Inkscape"
 
-#: ../src/verbs.cpp:2276
+#: ../src/verbs.cpp:2286
 msgid "Undo last action"
 msgstr "Отменить последнее действие"
 
-#: ../src/verbs.cpp:2279
+#: ../src/verbs.cpp:2289
 msgid "Do again the last undone action"
 msgstr "Повторить последнее отменённое действие"
 
-#: ../src/verbs.cpp:2280
+#: ../src/verbs.cpp:2290
 msgid "Cu_t"
 msgstr "_Вырезать"
 
-#: ../src/verbs.cpp:2281
+#: ../src/verbs.cpp:2291
 msgid "Cut selection to clipboard"
 msgstr "Вырезать выделение в буфер обмена"
 
-#: ../src/verbs.cpp:2282
+#: ../src/verbs.cpp:2292
 msgid "_Copy"
 msgstr "С_копировать"
 
-#: ../src/verbs.cpp:2283
+#: ../src/verbs.cpp:2293
 msgid "Copy selection to clipboard"
 msgstr "Скопировать выделение в буфер обмена"
 
-#: ../src/verbs.cpp:2284
+#: ../src/verbs.cpp:2294
 msgid "_Paste"
 msgstr "Вст_авить"
 
-#: ../src/verbs.cpp:2285
+#: ../src/verbs.cpp:2295
 msgid "Paste objects from clipboard to mouse point, or paste text"
 msgstr "Вставить объект из буфера обмена под курсор, либо вставить текст"
 
-#: ../src/verbs.cpp:2286
+#: ../src/verbs.cpp:2296
 msgid "Paste _Style"
 msgstr "Вставить _стиль"
 
-#: ../src/verbs.cpp:2287
+#: ../src/verbs.cpp:2297
 msgid "Apply the style of the copied object to selection"
 msgstr "Применить стиль скопированного объекта к выделению"
 
-#: ../src/verbs.cpp:2289
+#: ../src/verbs.cpp:2299
 msgid "Scale selection to match the size of the copied object"
 msgstr "Отмасштабировать выделение до размеров скопированного объекта"
 
-#: ../src/verbs.cpp:2290
+#: ../src/verbs.cpp:2300
 msgid "Paste _Width"
 msgstr "Вставить _ширину"
 
-#: ../src/verbs.cpp:2291
+#: ../src/verbs.cpp:2301
 msgid "Scale selection horizontally to match the width of the copied object"
 msgstr "Отмасштабировать выделение по горизонтали до высоты скопированного объекта"
 
-#: ../src/verbs.cpp:2292
+#: ../src/verbs.cpp:2302
 msgid "Paste _Height"
 msgstr "Вставить _высоту"
 
-#: ../src/verbs.cpp:2293
+#: ../src/verbs.cpp:2303
 msgid "Scale selection vertically to match the height of the copied object"
 msgstr "Отмасштабировать выделение по вертикали до высоты скопированного объекта"
 
-#: ../src/verbs.cpp:2294
+#: ../src/verbs.cpp:2304
 msgid "Paste Size Separately"
 msgstr "Вставить размер раздельно"
 
-#: ../src/verbs.cpp:2295
+#: ../src/verbs.cpp:2305
 msgid "Scale each selected object to match the size of the copied object"
 msgstr "Отмасштабировать каждый выбранный объект до совпадения с размерами скопированного объекта"
 
-#: ../src/verbs.cpp:2296
+#: ../src/verbs.cpp:2306
 msgid "Paste Width Separately"
 msgstr "Вставить ширину раздельно"
 
-#: ../src/verbs.cpp:2297
+#: ../src/verbs.cpp:2307
 msgid "Scale each selected object horizontally to match the width of the copied object"
 msgstr "Отмасштабировать каждый выбранный объект по горизонтали до ширины скопированного объекта"
 
-#: ../src/verbs.cpp:2298
+#: ../src/verbs.cpp:2308
 msgid "Paste Height Separately"
 msgstr "Вставить высоту раздельно"
 
-#: ../src/verbs.cpp:2299
+#: ../src/verbs.cpp:2309
 msgid "Scale each selected object vertically to match the height of the copied object"
 msgstr "Отмасштабировать каждый выбранный объект по вертикали до высоты скопированного объекта"
 
-#: ../src/verbs.cpp:2300
+#: ../src/verbs.cpp:2310
 msgid "Paste _In Place"
 msgstr "Вставить на _место"
 
-#: ../src/verbs.cpp:2301
+#: ../src/verbs.cpp:2311
 msgid "Paste objects from clipboard to the original location"
 msgstr "Вставить объекты из буфера обмена в их исходное местоположение"
 
-#: ../src/verbs.cpp:2302
+#: ../src/verbs.cpp:2312
 msgid "Paste Path _Effect"
 msgstr "_Вставить контурный эффект"
 
-#: ../src/verbs.cpp:2303
+#: ../src/verbs.cpp:2313
 msgid "Apply the path effect of the copied object to selection"
 msgstr "Применить контурный эффект скопированного объекта к выделению"
 
-#: ../src/verbs.cpp:2304
+#: ../src/verbs.cpp:2314
 msgid "Remove Path _Effect"
 msgstr "_Удалить контурный эффект"
 
-#: ../src/verbs.cpp:2305
+#: ../src/verbs.cpp:2315
 msgid "Remove any path effects from selected objects"
 msgstr "Убрать все контурные эффекты из выделения"
 
-#: ../src/verbs.cpp:2306
+#: ../src/verbs.cpp:2316
 msgid "Remove Filters"
 msgstr "Снять фильтры"
 
-#: ../src/verbs.cpp:2307
+#: ../src/verbs.cpp:2317
 msgid "Remove any filters from selected objects"
 msgstr "Снять все фильтры с выделения"
 
-#: ../src/verbs.cpp:2308
+#: ../src/verbs.cpp:2318
 msgid "_Delete"
 msgstr "У_далить"
 
-#: ../src/verbs.cpp:2309
+#: ../src/verbs.cpp:2319
 msgid "Delete selection"
 msgstr "Удалить выделение"
 
-#: ../src/verbs.cpp:2310
+#: ../src/verbs.cpp:2320
 msgid "Duplic_ate"
 msgstr "Проду_блировать"
 
-#: ../src/verbs.cpp:2311
+#: ../src/verbs.cpp:2321
 msgid "Duplicate selected objects"
 msgstr "Продублировать выделенные объекты"
 
-#: ../src/verbs.cpp:2312
+#: ../src/verbs.cpp:2322
 msgid "Create Clo_ne"
 msgstr "Создать _клон"
 
-#: ../src/verbs.cpp:2313
+#: ../src/verbs.cpp:2323
 msgid "Create a clone (a copy linked to the original) of selected object"
 msgstr "Создать клон выделенного объекта (копию, связанную с оригиналом)"
 
-#: ../src/verbs.cpp:2314
+#: ../src/verbs.cpp:2324
 msgid "Unlin_k Clone"
 msgstr "О_тсоединить клон"
 
-#: ../src/verbs.cpp:2315
+#: ../src/verbs.cpp:2325
 msgid "Cut the selected clones' links to the originals, turning them into standalone objects"
 msgstr "Убрать ссылки клонов на их оригиналы, превратив клоны в самостоятельные объекты"
 
-#: ../src/verbs.cpp:2316
+#: ../src/verbs.cpp:2326
 msgid "Relink to Copied"
 msgstr "Связать с объектом в буфере обмена"
 
-#: ../src/verbs.cpp:2317
+#: ../src/verbs.cpp:2327
 msgid "Relink the selected clones to the object currently on the clipboard"
 msgstr "Заново связать выбранные клоны с объектом в буфере обмена"
 
-#: ../src/verbs.cpp:2318
+#: ../src/verbs.cpp:2328
 msgid "Select _Original"
 msgstr "Выделить _оригинал"
 
-#: ../src/verbs.cpp:2319
+#: ../src/verbs.cpp:2329
 msgid "Select the object to which the selected clone is linked"
 msgstr "Выделить объект, с которым связан клон"
 
-#: ../src/verbs.cpp:2320
+#: ../src/verbs.cpp:2330
 msgid "Objects to _Marker"
 msgstr "Объекты в м_аркер"
 
-#: ../src/verbs.cpp:2321
+#: ../src/verbs.cpp:2331
 msgid "Convert selection to a line marker"
 msgstr "Превратить выделение в маркер линий"
 
-#: ../src/verbs.cpp:2322
+#: ../src/verbs.cpp:2332
 msgid "Objects to Gu_ides"
 msgstr "Объ_екты в направляющие"
 
-#: ../src/verbs.cpp:2323
+#: ../src/verbs.cpp:2333
 msgid "Convert selected objects to a collection of guidelines aligned with their edges"
 msgstr "Превратить выбранные объекты в набор направляющих по краям объектов"
 
-#: ../src/verbs.cpp:2324
+#: ../src/verbs.cpp:2334
 msgid "Objects to Patter_n"
 msgstr "_Объект(ы) в текстуру"
 
-#: ../src/verbs.cpp:2325
+#: ../src/verbs.cpp:2335
 msgid "Convert selection to a rectangle with tiled pattern fill"
 msgstr "Преобразовать выделение в прямоугольник, заполненный текстурой"
 
-#: ../src/verbs.cpp:2326
+#: ../src/verbs.cpp:2336
 msgid "Pattern to _Objects"
 msgstr "_Текстуру в объект(ы)"
 
-#: ../src/verbs.cpp:2327
+#: ../src/verbs.cpp:2337
 msgid "Extract objects from a tiled pattern fill"
 msgstr "Извлечь объекты из текстурной заливки"
 
-#: ../src/verbs.cpp:2328
+#: ../src/verbs.cpp:2338
 msgid "Clea_r All"
 msgstr "О_чистить все"
 
-#: ../src/verbs.cpp:2329
+#: ../src/verbs.cpp:2339
 msgid "Delete all objects from document"
 msgstr "Удалить все объекты из документа"
 
-#: ../src/verbs.cpp:2330
+#: ../src/verbs.cpp:2340
 msgid "Select Al_l"
 msgstr "Выделить _все"
 
-#: ../src/verbs.cpp:2331
+#: ../src/verbs.cpp:2341
 msgid "Select all objects or all nodes"
 msgstr "Выделить все объекты или все узлы"
 
-#: ../src/verbs.cpp:2332
+#: ../src/verbs.cpp:2342
 msgid "Select All in All La_yers"
 msgstr "Выделить все во всех сло_ях"
 
-#: ../src/verbs.cpp:2333
+#: ../src/verbs.cpp:2343
 msgid "Select all objects in all visible and unlocked layers"
 msgstr "Выделить все объекты во всех видимых и незапертых слоях"
 
-#: ../src/verbs.cpp:2334
+#: ../src/verbs.cpp:2344
 msgid "In_vert Selection"
 msgstr "Инвертировать выделение"
 
-#: ../src/verbs.cpp:2335
+#: ../src/verbs.cpp:2345
 msgid "Invert selection (unselect what is selected and select everything else)"
 msgstr "Инвертировать выделение (выделить все кроме выделенного в настоящий момент)"
 
-#: ../src/verbs.cpp:2336
+#: ../src/verbs.cpp:2346
 msgid "Invert in All Layers"
 msgstr "Инвертировать во всех слоях"
 
-#: ../src/verbs.cpp:2337
+#: ../src/verbs.cpp:2347
 msgid "Invert selection in all visible and unlocked layers"
 msgstr "Инвертировать выделение во всех видимых и незапертых слоях"
 
-#: ../src/verbs.cpp:2338
+#: ../src/verbs.cpp:2348
 msgid "Select Next"
 msgstr "Выбрать следующий"
 
-#: ../src/verbs.cpp:2339
+#: ../src/verbs.cpp:2349
 msgid "Select next object or node"
 msgstr "Выбрать следующий объект или узел"
 
-#: ../src/verbs.cpp:2340
+#: ../src/verbs.cpp:2350
 msgid "Select Previous"
 msgstr "Выбрать предыдущий"
 
-#: ../src/verbs.cpp:2341
+#: ../src/verbs.cpp:2351
 msgid "Select previous object or node"
 msgstr "Выбрать предыдущий объект или узел"
 
-#: ../src/verbs.cpp:2342
+#: ../src/verbs.cpp:2352
 msgid "D_eselect"
 msgstr "Сн_ять выделение"
 
-#: ../src/verbs.cpp:2343
+#: ../src/verbs.cpp:2353
 msgid "Deselect any selected objects or nodes"
 msgstr "Снять выделение со всех объектов или узлов"
 
-#: ../src/verbs.cpp:2344
+#: ../src/verbs.cpp:2354
 msgid "_Guides Around Page"
 msgstr "На_правляющие вокруг страницы"
 
-#: ../src/verbs.cpp:2345
+#: ../src/verbs.cpp:2355
 msgid "Create four guides aligned with the page borders"
 msgstr "Создать четыре направляющие по краям страницы"
 
-#: ../src/verbs.cpp:2346
+#: ../src/verbs.cpp:2356
 msgid "Next Path Effect Parameter"
 msgstr "Следующий эффект динамического контура"
 
-#: ../src/verbs.cpp:2347
+#: ../src/verbs.cpp:2357
 msgid "Show next Path Effect parameter for editing"
 msgstr "Показать следующий редактируемый параметр динамического эффекта"
 
 #. Selection
-#: ../src/verbs.cpp:2350
+#: ../src/verbs.cpp:2360
 msgid "Raise to _Top"
 msgstr "Поднять на _передний план"
 
-#: ../src/verbs.cpp:2351
+#: ../src/verbs.cpp:2361
 msgid "Raise selection to top"
 msgstr "Поднять выделение на передний план"
 
-#: ../src/verbs.cpp:2352
+#: ../src/verbs.cpp:2362
 msgid "Lower to _Bottom"
 msgstr "Опустить на _задний план"
 
-#: ../src/verbs.cpp:2353
+#: ../src/verbs.cpp:2363
 msgid "Lower selection to bottom"
 msgstr "Опустить выделение на задний план"
 
-#: ../src/verbs.cpp:2354
+#: ../src/verbs.cpp:2364
 msgid "_Raise"
 msgstr "П_однять"
 
-#: ../src/verbs.cpp:2355
+#: ../src/verbs.cpp:2365
 msgid "Raise selection one step"
 msgstr "Поднять выделение на один уровень"
 
-#: ../src/verbs.cpp:2356
+#: ../src/verbs.cpp:2366
 msgid "_Lower"
 msgstr "Опу_стить"
 
-#: ../src/verbs.cpp:2357
+#: ../src/verbs.cpp:2367
 msgid "Lower selection one step"
 msgstr "Опустить выделение на один уровень"
 
-#: ../src/verbs.cpp:2358
+#: ../src/verbs.cpp:2368
 msgid "_Group"
 msgstr "С_группировать"
 
-#: ../src/verbs.cpp:2359
+#: ../src/verbs.cpp:2369
 msgid "Group selected objects"
 msgstr "Сгруппировать выделенные объекты"
 
-#: ../src/verbs.cpp:2361
+#: ../src/verbs.cpp:2371
 msgid "Ungroup selected groups"
 msgstr "Разгруппировать выделенные группы"
 
-#: ../src/verbs.cpp:2363
+#: ../src/verbs.cpp:2373
 msgid "_Put on Path"
 msgstr "_Разместить по контуру"
 
-#: ../src/verbs.cpp:2365
+#: ../src/verbs.cpp:2375
 msgid "_Remove from Path"
 msgstr "_Снять с контура"
 
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2377
 msgid "Remove Manual _Kerns"
 msgstr "Убрать ручной _кернинг"
 
 #. TRANSLATORS: "glyph": An image used in the visual representation of characters;
 #. roughly speaking, how a character looks. A font is a set of glyphs.
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2380
 msgid "Remove all manual kerns and glyph rotations from a text object"
 msgstr "Удалить из текста все вертикальные и горизонтальные керны и вращения"
 
-#: ../src/verbs.cpp:2372
+#: ../src/verbs.cpp:2382
 msgid "_Union"
 msgstr "С_умма"
 
-#: ../src/verbs.cpp:2373
+#: ../src/verbs.cpp:2383
 msgid "Create union of selected paths"
 msgstr "Создать один контур из всех выбранных"
 
-#: ../src/verbs.cpp:2374
+#: ../src/verbs.cpp:2384
 msgid "_Intersection"
 msgstr "_Пересечение"
 
-#: ../src/verbs.cpp:2375
+#: ../src/verbs.cpp:2385
 msgid "Create intersection of selected paths"
 msgstr "Создать пересечение выделенных контуров"
 
-#: ../src/verbs.cpp:2376
+#: ../src/verbs.cpp:2386
 msgid "_Difference"
 msgstr "_Разность"
 
-#: ../src/verbs.cpp:2377
+#: ../src/verbs.cpp:2387
 msgid "Create difference of selected paths (bottom minus top)"
 msgstr "Создать разность выделенных контуров (низ минус верх)"
 
-#: ../src/verbs.cpp:2378
+#: ../src/verbs.cpp:2388
 msgid "E_xclusion"
 msgstr "_Исключающее ИЛИ"
 
-#: ../src/verbs.cpp:2379
+#: ../src/verbs.cpp:2389
 msgid "Create exclusive OR of selected paths (those parts that belong to only one path)"
 msgstr "Создать Исключающее ИЛИ из выбранных контуров (части, принадлежащие только одному контуру)"
 
-#: ../src/verbs.cpp:2380
+#: ../src/verbs.cpp:2390
 msgid "Di_vision"
 msgstr "Р_азделить"
 
-#: ../src/verbs.cpp:2381
+#: ../src/verbs.cpp:2391
 msgid "Cut the bottom path into pieces"
 msgstr "Разделить нижний контур на части верхним"
 
 #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
 #. Advanced tutorial for more info
-#: ../src/verbs.cpp:2384
+#: ../src/verbs.cpp:2394
 msgid "Cut _Path"
 msgstr "Разр_езать контур"
 
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2395
 msgid "Cut the bottom path's stroke into pieces, removing fill"
 msgstr "Разрезать контур нижнего контура на части с удалением заливки"
 
 #. TRANSLATORS: "outset": expand a shape by offsetting the object's path,
 #. i.e. by displacing it perpendicular to the path in each point.
 #. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2389
+#: ../src/verbs.cpp:2399
 msgid "Outs_et"
 msgstr "Вы_тянуть"
 
-#: ../src/verbs.cpp:2390
+#: ../src/verbs.cpp:2400
 msgid "Outset selected paths"
 msgstr "Вытянуть выделенный контур"
 
-#: ../src/verbs.cpp:2392
+#: ../src/verbs.cpp:2402
 msgid "O_utset Path by 1 px"
 msgstr "_Вытянуть контур на 1 px"
 
-#: ../src/verbs.cpp:2393
+#: ../src/verbs.cpp:2403
 msgid "Outset selected paths by 1 px"
 msgstr "Вытянуть выделенный контур на 1 px"
 
-#: ../src/verbs.cpp:2395
+#: ../src/verbs.cpp:2405
 msgid "O_utset Path by 10 px"
 msgstr "_Вытянуть контур на 10 px"
 
-#: ../src/verbs.cpp:2396
+#: ../src/verbs.cpp:2406
 msgid "Outset selected paths by 10 px"
 msgstr "Вытянуть выделенный контур на 10 px"
 
 #. TRANSLATORS: "inset": contract a shape by offsetting the object's path,
 #. i.e. by displacing it perpendicular to the path in each point.
 #. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2400
+#: ../src/verbs.cpp:2410
 msgid "I_nset"
 msgstr "Втян_уть"
 
-#: ../src/verbs.cpp:2401
+#: ../src/verbs.cpp:2411
 msgid "Inset selected paths"
 msgstr "Втянуть выделенный контур"
 
-#: ../src/verbs.cpp:2403
+#: ../src/verbs.cpp:2413
 msgid "I_nset Path by 1 px"
 msgstr "Втян_уть контур на 1 px"
 
-#: ../src/verbs.cpp:2404
+#: ../src/verbs.cpp:2414
 msgid "Inset selected paths by 1 px"
 msgstr "Втянуть выделенный контур на 1 px"
 
-#: ../src/verbs.cpp:2406
+#: ../src/verbs.cpp:2416
 msgid "I_nset Path by 10 px"
 msgstr "Втян_уть контур на 10 px"
 
-#: ../src/verbs.cpp:2407
+#: ../src/verbs.cpp:2417
 msgid "Inset selected paths by 10 px"
 msgstr "Втянуть выделенный контур на 10 px"
 
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2419
 msgid "D_ynamic Offset"
 msgstr "_Динамическая втяжка"
 
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2419
 msgid "Create a dynamic offset object"
 msgstr "Создать объект, втяжку/растяжку которого можно менять динамически"
 
-#: ../src/verbs.cpp:2411
+#: ../src/verbs.cpp:2421
 msgid "_Linked Offset"
 msgstr "С_вязанная втяжка"
 
-#: ../src/verbs.cpp:2412
+#: ../src/verbs.cpp:2422
 msgid "Create a dynamic offset object linked to the original path"
 msgstr "Создать втяжку/растяжку, динамически связанную с исходным контуром"
 
-#: ../src/verbs.cpp:2414
+#: ../src/verbs.cpp:2424
 msgid "_Stroke to Path"
 msgstr "Оконтурить _обводку"
 
-#: ../src/verbs.cpp:2415
+#: ../src/verbs.cpp:2425
 msgid "Convert selected object's stroke to paths"
 msgstr "Преобразовать обводки выбранных объектов в контуры"
 
-#: ../src/verbs.cpp:2416
+#: ../src/verbs.cpp:2426
 msgid "Si_mplify"
 msgstr "_Упростить"
 
-#: ../src/verbs.cpp:2417
+#: ../src/verbs.cpp:2427
 msgid "Simplify selected paths (remove extra nodes)"
 msgstr "Упростить выделенные контуры удалением лишних узлов"
 
-#: ../src/verbs.cpp:2418
+#: ../src/verbs.cpp:2428
 msgid "_Reverse"
 msgstr "_Развернуть"
 
-#: ../src/verbs.cpp:2419
+#: ../src/verbs.cpp:2429
 msgid "Reverse the direction of selected paths (useful for flipping markers)"
 msgstr "Развернуть направление выделенных контуров; полезно для отражения маркеров"
 
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2421
+#: ../src/verbs.cpp:2431
 msgid "_Trace Bitmap..."
 msgstr "_Векторизовать растр..."
 
-#: ../src/verbs.cpp:2422
+#: ../src/verbs.cpp:2432
 msgid "Create one or more paths from a bitmap by tracing it"
 msgstr "Создать один или более контуров из растра, векторизовав его"
 
-#: ../src/verbs.cpp:2423
+#: ../src/verbs.cpp:2433
 msgid "_Make a Bitmap Copy"
 msgstr "_Сделать растровую копию"
 
-#: ../src/verbs.cpp:2424
+#: ../src/verbs.cpp:2434
 msgid "Export selection to a bitmap and insert it into document"
 msgstr "Экспортировать выделение в растр и вставить его в документ"
 
-#: ../src/verbs.cpp:2425
+#: ../src/verbs.cpp:2435
 msgid "_Combine"
 msgstr "_Объединить"
 
-#: ../src/verbs.cpp:2426
+#: ../src/verbs.cpp:2436
 msgid "Combine several paths into one"
 msgstr "Объединить несколько контуров в один"
 
 #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
 #. Advanced tutorial for more info
-#: ../src/verbs.cpp:2429
+#: ../src/verbs.cpp:2439
 msgid "Break _Apart"
 msgstr "_Разбить"
 
-#: ../src/verbs.cpp:2430
+#: ../src/verbs.cpp:2440
 msgid "Break selected paths into subpaths"
 msgstr "Разбить выделенные контуры на части"
 
-#: ../src/verbs.cpp:2431
+#: ../src/verbs.cpp:2441
 msgid "Rows and Columns..."
 msgstr "Расставить по сетке..."
 
-#: ../src/verbs.cpp:2432
+#: ../src/verbs.cpp:2442
 msgid "Arrange selected objects in a table"
 msgstr "Расставить выделенные объекты по сетке"
 
 #. Layer
-#: ../src/verbs.cpp:2434
+#: ../src/verbs.cpp:2444
 msgid "_Add Layer..."
 msgstr "_Новый слой..."
 
-#: ../src/verbs.cpp:2435
+#: ../src/verbs.cpp:2445
 msgid "Create a new layer"
 msgstr "Создать новый слой"
 
-#: ../src/verbs.cpp:2436
+#: ../src/verbs.cpp:2446
 msgid "Re_name Layer..."
 msgstr "_Переименовать слой..."
 
-#: ../src/verbs.cpp:2437
+#: ../src/verbs.cpp:2447
 msgid "Rename the current layer"
 msgstr "Переименовать текущий слой"
 
-#: ../src/verbs.cpp:2438
+#: ../src/verbs.cpp:2448
 msgid "Switch to Layer Abov_e"
 msgstr "Перейти на слой _выше"
 
-#: ../src/verbs.cpp:2439
+#: ../src/verbs.cpp:2449
 msgid "Switch to the layer above the current"
 msgstr "Перейти на слой, находящийся выше текущего"
 
-#: ../src/verbs.cpp:2440
+#: ../src/verbs.cpp:2450
 msgid "Switch to Layer Belo_w"
 msgstr "Перейти на слой _ниже"
 
-#: ../src/verbs.cpp:2441
+#: ../src/verbs.cpp:2451
 msgid "Switch to the layer below the current"
 msgstr "Перейти на слой, находящийся под текущим"
 
-#: ../src/verbs.cpp:2442
+#: ../src/verbs.cpp:2452
 msgid "Move Selection to Layer Abo_ve"
 msgstr "Перенести выделение в слой _выше"
 
-#: ../src/verbs.cpp:2443
+#: ../src/verbs.cpp:2453
 msgid "Move selection to the layer above the current"
 msgstr "Перенести выделение в слой над текущим слоем"
 
-#: ../src/verbs.cpp:2444
+#: ../src/verbs.cpp:2454
 msgid "Move Selection to Layer Bel_ow"
 msgstr "Перенести выделение в слой _ниже"
 
-#: ../src/verbs.cpp:2445
+#: ../src/verbs.cpp:2455
 msgid "Move selection to the layer below the current"
 msgstr "Перенести выделение в слой ниже текущего слоя"
 
-#: ../src/verbs.cpp:2446
+#: ../src/verbs.cpp:2456
 msgid "Layer to _Top"
 msgstr "Поднять до _верха"
 
-#: ../src/verbs.cpp:2447
+#: ../src/verbs.cpp:2457
 msgid "Raise the current layer to the top"
 msgstr "Поднять текущий слой на самый верх"
 
-#: ../src/verbs.cpp:2448
+#: ../src/verbs.cpp:2458
 msgid "Layer to _Bottom"
 msgstr "Опустить до _низа"
 
-#: ../src/verbs.cpp:2449
+#: ../src/verbs.cpp:2459
 msgid "Lower the current layer to the bottom"
 msgstr "Опустить текущий слой на самый низ"
 
-#: ../src/verbs.cpp:2450
+#: ../src/verbs.cpp:2460
 msgid "_Raise Layer"
 msgstr "П_однять слой"
 
-#: ../src/verbs.cpp:2451
+#: ../src/verbs.cpp:2461
 msgid "Raise the current layer"
 msgstr "Поднять текущий слой"
 
-#: ../src/verbs.cpp:2452
+#: ../src/verbs.cpp:2462
 msgid "_Lower Layer"
 msgstr "Опу_стить слой"
 
-#: ../src/verbs.cpp:2453
+#: ../src/verbs.cpp:2463
 msgid "Lower the current layer"
 msgstr "Опустить текущий слой"
 
-#: ../src/verbs.cpp:2454
+#: ../src/verbs.cpp:2464
 msgid "Duplicate Current Layer"
 msgstr "Продублировать активный слой"
 
-#: ../src/verbs.cpp:2455
+#: ../src/verbs.cpp:2465
 msgid "Duplicate an existing layer"
 msgstr "Дубликация активного слоя"
 
-#: ../src/verbs.cpp:2456
+#: ../src/verbs.cpp:2466
 msgid "_Delete Current Layer"
 msgstr "_Удалить текущий слой"
 
-#: ../src/verbs.cpp:2457
+#: ../src/verbs.cpp:2467
 msgid "Delete the current layer"
 msgstr "Удалить текущий слой"
 
-#: ../src/verbs.cpp:2458
+#: ../src/verbs.cpp:2468
 msgid "_Show/hide other layers"
 msgstr "_Показать/скрыть остальные слои"
 
-#: ../src/verbs.cpp:2459
+#: ../src/verbs.cpp:2469
 msgid "Solo the current layer"
 msgstr "Отображение только активного слоя"
 
 #. Object
-#: ../src/verbs.cpp:2462
+#: ../src/verbs.cpp:2472
 msgid "Rotate _90&#176; CW"
 msgstr "Повернуть на _90° по часовой стрелке"
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2465
+#: ../src/verbs.cpp:2475
 msgid "Rotate selection 90° clockwise"
 msgstr "Повернуть выделение на 90° по часовой стрелке"
 
-#: ../src/verbs.cpp:2466
+#: ../src/verbs.cpp:2476
 msgid "Rotate 9_0&#176; CCW"
 msgstr "Повернуть на 9_0° против часовой стрелки"
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2469
+#: ../src/verbs.cpp:2479
 msgid "Rotate selection 90° counter-clockwise"
 msgstr "Повернуть выделение на 90° против часовой стрелки"
 
-#: ../src/verbs.cpp:2470
+#: ../src/verbs.cpp:2480
 msgid "Remove _Transformations"
 msgstr "Убрать _трансформацию"
 
-#: ../src/verbs.cpp:2471
+#: ../src/verbs.cpp:2481
 msgid "Remove transformations from object"
 msgstr "Убрать преобразования объекта"
 
-#: ../src/verbs.cpp:2472
+#: ../src/verbs.cpp:2482
 msgid "_Object to Path"
 msgstr "_Оконтурить объект"
 
-#: ../src/verbs.cpp:2473
+#: ../src/verbs.cpp:2483
 msgid "Convert selected object to path"
 msgstr "Преобразовать выбранный объект в контур"
 
-#: ../src/verbs.cpp:2474
+#: ../src/verbs.cpp:2484
 msgid "_Flow into Frame"
 msgstr "_Заверстать в блок"
 
-#: ../src/verbs.cpp:2475
+#: ../src/verbs.cpp:2485
 msgid "Put text into a frame (path or shape), creating a flowed text linked to the frame object"
 msgstr "Заверстать текст в блок (контур или фигуру), создав перетекающий текст, связанный с объектом блока"
 
-#: ../src/verbs.cpp:2476
+#: ../src/verbs.cpp:2486
 msgid "_Unflow"
 msgstr "_Вынуть из блока"
 
-#: ../src/verbs.cpp:2477
+#: ../src/verbs.cpp:2487
 msgid "Remove text from frame (creates a single-line text object)"
 msgstr "Вынуть текст из блока, создав обычный текстовый объект в одну строку"
 
-#: ../src/verbs.cpp:2478
+#: ../src/verbs.cpp:2488
 msgid "_Convert to Text"
 msgstr "_Преобразовать в текст"
 
-#: ../src/verbs.cpp:2479
+#: ../src/verbs.cpp:2489
 msgid "Convert flowed text to regular text object (preserves appearance)"
 msgstr "Преобразовать текст, заверстанный в рамку, в обычный текст, сохранив форматирование"
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2491
 msgid "Flip _Horizontal"
 msgstr "Отразить _горизонтально"
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2491
 msgid "Flip selected objects horizontally"
 msgstr "Горизонтально отразить выбранные объекты"
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2494
 msgid "Flip _Vertical"
 msgstr "Отразить _вертикально"
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2494
 msgid "Flip selected objects vertically"
 msgstr "Вертикально отразить выбранные объекты"
 
-#: ../src/verbs.cpp:2487
+#: ../src/verbs.cpp:2497
 msgid "Apply mask to selection (using the topmost object as mask)"
 msgstr "Применить самый верхний объект выделения к нему как маску"
 
-#: ../src/verbs.cpp:2489
+#: ../src/verbs.cpp:2499
 msgid "Edit mask"
 msgstr "Изменить маску"
 
-#: ../src/verbs.cpp:2490
-#: ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2500
+#: ../src/verbs.cpp:2506
 msgid "_Release"
 msgstr "_Снять"
 
-#: ../src/verbs.cpp:2491
+#: ../src/verbs.cpp:2501
 msgid "Remove mask from selection"
 msgstr "Убрать маску из выделения"
 
-#: ../src/verbs.cpp:2493
+#: ../src/verbs.cpp:2503
 msgid "Apply clipping path to selection (using the topmost object as clipping path)"
 msgstr "Применить самый верхний объект выделения к нему как обтравочный контур"
 
-#: ../src/verbs.cpp:2495
-#: ../src/widgets/toolbox.cpp:1446
+#: ../src/verbs.cpp:2505
+#: ../src/widgets/toolbox.cpp:1472
 msgid "Edit clipping path"
 msgstr "Изменить обтравочный контур"
 
-#: ../src/verbs.cpp:2497
+#: ../src/verbs.cpp:2507
 msgid "Remove clipping path from selection"
 msgstr "Убрать обтравочный контур из выделения"
 
 #. Tools
-#: ../src/verbs.cpp:2500
+#: ../src/verbs.cpp:2510
 msgid "Select"
 msgstr "Селектор"
 
-#: ../src/verbs.cpp:2501
+#: ../src/verbs.cpp:2511
 msgid "Select and transform objects"
 msgstr "Выделять и трансформировать объекты"
 
-#: ../src/verbs.cpp:2502
+#: ../src/verbs.cpp:2512
 msgid "Node Edit"
 msgstr "Инструмент узлов"
 
-#: ../src/verbs.cpp:2503
+#: ../src/verbs.cpp:2513
 msgid "Edit paths by nodes"
 msgstr "Редактировать узлы контура или рычаги узлов"
 
-#: ../src/verbs.cpp:2505
+#: ../src/verbs.cpp:2515
 msgid "Tweak objects by sculpting or painting"
 msgstr "Корректировать объекты лепкой или раскрашиванием"
 
-#: ../src/verbs.cpp:2507
+#: ../src/verbs.cpp:2517
+#, fuzzy
+msgid "Spray objects by sculpting or painting"
+msgstr "Корректировать объекты лепкой или раскрашиванием"
+
+#: ../src/verbs.cpp:2519
 msgid "Create rectangles and squares"
 msgstr "Рисовать прямоугольники и квадраты"
 
-#: ../src/verbs.cpp:2509
+#: ../src/verbs.cpp:2521
 msgid "Create 3D boxes"
 msgstr "Рисовать паралеллепипеды в 3D"
 
-#: ../src/verbs.cpp:2511
+#: ../src/verbs.cpp:2523
 msgid "Create circles, ellipses, and arcs"
 msgstr "Рисовать круги, эллипсы и дуги"
 
-#: ../src/verbs.cpp:2513
+#: ../src/verbs.cpp:2525
 msgid "Create stars and polygons"
 msgstr "Рисовать звезды и многоугольники"
 
-#: ../src/verbs.cpp:2515
+#: ../src/verbs.cpp:2527
 msgid "Create spirals"
 msgstr "Рисовать спирали"
 
-#: ../src/verbs.cpp:2517
+#: ../src/verbs.cpp:2529
 msgid "Draw freehand lines"
 msgstr "Рисовать произвольные контуры"
 
-#: ../src/verbs.cpp:2519
+#: ../src/verbs.cpp:2531
 msgid "Draw Bezier curves and straight lines"
 msgstr "Рисовать кривые Безье и прямые линии"
 
-#: ../src/verbs.cpp:2521
+#: ../src/verbs.cpp:2533
 msgid "Draw calligraphic or brush strokes"
 msgstr "Рисовать каллиграфическим пером"
 
-#: ../src/verbs.cpp:2523
+#: ../src/verbs.cpp:2535
 msgid "Create and edit text objects"
 msgstr "Создавать и править текстовые объекты"
 
-#: ../src/verbs.cpp:2525
+#: ../src/verbs.cpp:2537
 msgid "Create and edit gradients"
 msgstr "Создавать и править градиенты"
 
-#: ../src/verbs.cpp:2527
+#: ../src/verbs.cpp:2539
 msgid "Zoom in or out"
 msgstr "Увеличивать или уменьшать отображение документа"
 
-#: ../src/verbs.cpp:2529
+#: ../src/verbs.cpp:2541
 msgid "Pick colors from image"
 msgstr "Брать усредненные цвета из изображений"
 
-#: ../src/verbs.cpp:2531
+#: ../src/verbs.cpp:2543
 msgid "Create diagram connectors"
 msgstr "Создавать соединительные линии в диаграммах"
 
-#: ../src/verbs.cpp:2533
+#: ../src/verbs.cpp:2545
 msgid "Fill bounded areas"
 msgstr "Заливать замкнутые области"
 
-#: ../src/verbs.cpp:2534
+#: ../src/verbs.cpp:2546
 msgid "LPE Edit"
 msgstr "Геометрические конструкции"
 
-#: ../src/verbs.cpp:2535
+#: ../src/verbs.cpp:2547
 msgid "Edit Path Effect parameters"
 msgstr "Редактирование параметров динамических контурных эффектов"
 
-#: ../src/verbs.cpp:2537
+#: ../src/verbs.cpp:2549
 msgid "Erase existing paths"
 msgstr "Удалять существующие объекты"
 
-#: ../src/verbs.cpp:2539
+#: ../src/verbs.cpp:2551
 msgid "Do geometric constructions"
 msgstr "Создавать геометрические построения"
 
 #. Tool prefs
-#: ../src/verbs.cpp:2541
+#: ../src/verbs.cpp:2553
 msgid "Selector Preferences"
 msgstr "Параметры селектора"
 
-#: ../src/verbs.cpp:2542
+#: ../src/verbs.cpp:2554
 msgid "Open Preferences for the Selector tool"
 msgstr "Открыть окно параметров селектора"
 
-#: ../src/verbs.cpp:2543
+#: ../src/verbs.cpp:2555
 msgid "Node Tool Preferences"
 msgstr "Параметры инструмента правки узлов"
 
-#: ../src/verbs.cpp:2544
+#: ../src/verbs.cpp:2556
 msgid "Open Preferences for the Node tool"
 msgstr "Открыть окно параметров инструмента для правки узлов"
 
-#: ../src/verbs.cpp:2545
+#: ../src/verbs.cpp:2557
 msgid "Tweak Tool Preferences"
 msgstr "Параметры инструмента коррекции"
 
-#: ../src/verbs.cpp:2546
+#: ../src/verbs.cpp:2558
 msgid "Open Preferences for the Tweak tool"
 msgstr "Открыть окно параметров корректора"
 
-#: ../src/verbs.cpp:2547
+#: ../src/verbs.cpp:2559
+msgid "Spray Tool Preferences"
+msgstr "Параметры распылителя"
+
+#: ../src/verbs.cpp:2560
+#, fuzzy
+msgid "Open Preferences for the Spray tool"
+msgstr "Открыть окно параметров инструмента для рисования спиралей"
+
+#: ../src/verbs.cpp:2561
 msgid "Rectangle Preferences"
 msgstr "Параметры прямоугольника"
 
-#: ../src/verbs.cpp:2548
+#: ../src/verbs.cpp:2562
 msgid "Open Preferences for the Rectangle tool"
 msgstr "Открыть окно параметров инструмента для рисования прямоугольников"
 
-#: ../src/verbs.cpp:2549
+#: ../src/verbs.cpp:2563
 msgid "3D Box Preferences"
 msgstr "Параметры паралеллепипеда"
 
-#: ../src/verbs.cpp:2550
+#: ../src/verbs.cpp:2564
 msgid "Open Preferences for the 3D Box tool"
 msgstr "Открыть окно параметров инструмента для рисования параллелепипедов"
 
-#: ../src/verbs.cpp:2551
+#: ../src/verbs.cpp:2565
 msgid "Ellipse Preferences"
 msgstr "Параметры эллипса"
 
-#: ../src/verbs.cpp:2552
+#: ../src/verbs.cpp:2566
 msgid "Open Preferences for the Ellipse tool"
 msgstr "Открыть окно параметров инструмента для рисования эллипсов"
 
-#: ../src/verbs.cpp:2553
+#: ../src/verbs.cpp:2567
 msgid "Star Preferences"
 msgstr "Параметры звезды"
 
-#: ../src/verbs.cpp:2554
+#: ../src/verbs.cpp:2568
 msgid "Open Preferences for the Star tool"
 msgstr "Открыть окно параметров инструмента для рисования звёзд"
 
-#: ../src/verbs.cpp:2555
+#: ../src/verbs.cpp:2569
 msgid "Spiral Preferences"
 msgstr "Параметры спирали"
 
-#: ../src/verbs.cpp:2556
+#: ../src/verbs.cpp:2570
 msgid "Open Preferences for the Spiral tool"
 msgstr "Открыть окно параметров инструмента для рисования спиралей"
 
-#: ../src/verbs.cpp:2557
+#: ../src/verbs.cpp:2571
 msgid "Pencil Preferences"
 msgstr "Параметры карандаша"
 
-#: ../src/verbs.cpp:2558
+#: ../src/verbs.cpp:2572
 msgid "Open Preferences for the Pencil tool"
 msgstr "Открыть окно параметров карандаша"
 
-#: ../src/verbs.cpp:2559
+#: ../src/verbs.cpp:2573
 msgid "Pen Preferences"
 msgstr "Параметры пера"
 
-#: ../src/verbs.cpp:2560
+#: ../src/verbs.cpp:2574
 msgid "Open Preferences for the Pen tool"
 msgstr "Открыть окно параметров пера"
 
-#: ../src/verbs.cpp:2561
+#: ../src/verbs.cpp:2575
 msgid "Calligraphic Preferences"
 msgstr "Параметры каллиграфического пера"
 
-#: ../src/verbs.cpp:2562
+#: ../src/verbs.cpp:2576
 msgid "Open Preferences for the Calligraphy tool"
 msgstr "Открыть окно параметров каллиграфического пера"
 
-#: ../src/verbs.cpp:2563
+#: ../src/verbs.cpp:2577
 msgid "Text Preferences"
 msgstr "Параметры текста"
 
-#: ../src/verbs.cpp:2564
+#: ../src/verbs.cpp:2578
 msgid "Open Preferences for the Text tool"
 msgstr "Открыть окно параметров инструмента для набора текста"
 
-#: ../src/verbs.cpp:2565
+#: ../src/verbs.cpp:2579
 msgid "Gradient Preferences"
 msgstr "Параметры градиентной заливки"
 
-#: ../src/verbs.cpp:2566
+#: ../src/verbs.cpp:2580
 msgid "Open Preferences for the Gradient tool"
 msgstr "Открыть окно параметров инструмента для градиентной заливки"
 
-#: ../src/verbs.cpp:2567
+#: ../src/verbs.cpp:2581
 msgid "Zoom Preferences"
 msgstr "Параметры лупы"
 
-#: ../src/verbs.cpp:2568
+#: ../src/verbs.cpp:2582
 msgid "Open Preferences for the Zoom tool"
 msgstr "Открыть окно параметров лупы"
 
-#: ../src/verbs.cpp:2569
+#: ../src/verbs.cpp:2583
 msgid "Dropper Preferences"
 msgstr "Параметры пипетки"
 
-#: ../src/verbs.cpp:2570
+#: ../src/verbs.cpp:2584
 msgid "Open Preferences for the Dropper tool"
 msgstr "Открыть окно параметров пипетки"
 
-#: ../src/verbs.cpp:2571
+#: ../src/verbs.cpp:2585
 msgid "Connector Preferences"
 msgstr "Параметры соединительных линий"
 
-#: ../src/verbs.cpp:2572
+#: ../src/verbs.cpp:2586
 msgid "Open Preferences for the Connector tool"
 msgstr "Открыть окно параметров соединительных линий"
 
-#: ../src/verbs.cpp:2573
+#: ../src/verbs.cpp:2587
 msgid "Paint Bucket Preferences"
 msgstr "Параметры инструмента плоской заливки"
 
-#: ../src/verbs.cpp:2574
+#: ../src/verbs.cpp:2588
 msgid "Open Preferences for the Paint Bucket tool"
 msgstr "Открыть окно параметров инструмента для плоской заливки"
 
-#: ../src/verbs.cpp:2575
+#: ../src/verbs.cpp:2589
 msgid "Eraser Preferences"
 msgstr "Параметры ластика"
 
-#: ../src/verbs.cpp:2576
+#: ../src/verbs.cpp:2590
 msgid "Open Preferences for the Eraser tool"
 msgstr "Открыть окно параметров ластика"
 
-#: ../src/verbs.cpp:2577
+#: ../src/verbs.cpp:2591
 msgid "LPE Tool Preferences"
 msgstr "Параметры инструмента для создания геометрических конструкций"
 
-#: ../src/verbs.cpp:2578
+#: ../src/verbs.cpp:2592
 msgid "Open Preferences for the LPETool tool"
 msgstr "Открыть окно параметров Inkscape для инструмента геометрических конструкций"
 
 #. Zoom/View
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2595
 msgid "Zoom In"
 msgstr "Увеличить"
 
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2595
 msgid "Zoom in"
 msgstr "Увеличить"
 
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2596
 msgid "Zoom Out"
 msgstr "Уменьшить"
 
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2596
 msgid "Zoom out"
 msgstr "Уменьшить"
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2597
 msgid "_Rulers"
 msgstr "_Линейки"
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2597
 msgid "Show or hide the canvas rulers"
 msgstr "Показать/скрыть линейки холста"
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2598
 msgid "Scroll_bars"
 msgstr "Полосы _прокрутки"
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2598
 msgid "Show or hide the canvas scrollbars"
 msgstr "Показать или скрыть полосы прокрутки холста"
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2599
 msgid "_Grid"
 msgstr "_Сетка"
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2599
 msgid "Show or hide the grid"
 msgstr "Показать или скрыть сетку"
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2600
 msgid "G_uides"
 msgstr "_Направляющие"
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2600
 msgid "Show or hide guides (drag from a ruler to create a guide)"
 msgstr "Показать или скрыть направляющие (создаваемые перетаскиванием с линейки)"
 
-#: ../src/verbs.cpp:2587
+#: ../src/verbs.cpp:2601
 msgid "Toggle snapping on or off"
 msgstr "Включить или выключить прилипание"
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2602
 msgid "Nex_t Zoom"
 msgstr "С_ледующий масштаб"
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2602
 msgid "Next zoom (from the history of zooms)"
 msgstr "Следующий масштаб (из истории масштабирования)"
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2604
 msgid "Pre_vious Zoom"
 msgstr "_Предыдущий масштаб"
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2604
 msgid "Previous zoom (from the history of zooms)"
 msgstr "Предыдущий масштаб (из истории масштабирования)"
 
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2606
 msgid "Zoom 1:_1"
 msgstr "Масштаб 1:_1"
 
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2606
 msgid "Zoom to 1:1"
 msgstr "Масштаб 1:1"
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2608
 msgid "Zoom 1:_2"
 msgstr "Масштаб 1:_2"
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2608
 msgid "Zoom to 1:2"
 msgstr "Масштаб 1:2"
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2610
 msgid "_Zoom 2:1"
 msgstr "_Масштаб 2:1"
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2610
 msgid "Zoom to 2:1"
 msgstr "Масштаб 2:1"
 
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2613
 msgid "_Fullscreen"
 msgstr "Во весь _экран"
 
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2613
 msgid "Stretch this document window to full screen"
 msgstr "Развернуть окно документа на весь экран"
 
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2616
 msgid "Toggle _Focus Mode"
 msgstr "Переключить режим _фокуса"
 
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2616
 msgid "Remove excess toolbars to focus on drawing"
 msgstr "Убрать избыточные панели инструментов, чтобы сконцентрироваться на рисунке"
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2618
 msgid "Duplic_ate Window"
 msgstr "Пов_торить окно"
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2618
 msgid "Open a new window with the same document"
 msgstr "Открыть новое окно с этим же документом"
 
-#: ../src/verbs.cpp:2606
+#: ../src/verbs.cpp:2620
 msgid "_New View Preview"
 msgstr "_Создать предварительный просмотр"
 
-#: ../src/verbs.cpp:2607
+#: ../src/verbs.cpp:2621
 msgid "New View Preview"
 msgstr "Создать новое окно предварительного просмотра"
 
 #. "view_new_preview"
-#: ../src/verbs.cpp:2609
+#: ../src/verbs.cpp:2623
 msgid "_Normal"
 msgstr "Об_ычное"
 
-#: ../src/verbs.cpp:2610
+#: ../src/verbs.cpp:2624
 msgid "Switch to normal display mode"
 msgstr "Переключиться на обычное отображение"
 
-#: ../src/verbs.cpp:2611
+#: ../src/verbs.cpp:2625
 msgid "No _Filters"
 msgstr "Б_ез фильтров"
 
-#: ../src/verbs.cpp:2612
+#: ../src/verbs.cpp:2626
 msgid "Switch to normal display without filters"
 msgstr "Переключиться на обычное отображение без фильтров"
 
-#: ../src/verbs.cpp:2613
+#: ../src/verbs.cpp:2627
 msgid "_Outline"
 msgstr "К_аркас"
 
-#: ../src/verbs.cpp:2614
+#: ../src/verbs.cpp:2628
 msgid "Switch to outline (wireframe) display mode"
 msgstr "Переключиться на отображение каркаса объектов"
 
-#: ../src/verbs.cpp:2615
+#: ../src/verbs.cpp:2629
 msgid "_Toggle"
 msgstr "_Переключиться"
 
-#: ../src/verbs.cpp:2616
+#: ../src/verbs.cpp:2630
 msgid "Toggle between normal and outline display modes"
 msgstr "Переключиться между нормальным и каркасным режимами отображения"
 
-#: ../src/verbs.cpp:2618
+#: ../src/verbs.cpp:2632
 msgid "Color-managed view"
 msgstr "Цветоуправляемое отображение"
 
-#: ../src/verbs.cpp:2619
+#: ../src/verbs.cpp:2633
 msgid "Toggle color-managed display for this document window"
 msgstr "Включить или выключить управление цветом для этого окна с документом"
 
-#: ../src/verbs.cpp:2621
+#: ../src/verbs.cpp:2635
 msgid "Ico_n Preview..."
 msgstr "Просмотреть как _значок"
 
-#: ../src/verbs.cpp:2622
+#: ../src/verbs.cpp:2636
 msgid "Open a window to preview objects at different icon resolutions"
 msgstr "Просмотреть выделение как значок разных размеров"
 
-#: ../src/verbs.cpp:2624
+#: ../src/verbs.cpp:2638
 msgid "Zoom to fit page in window"
 msgstr "Масштабировать так, чтобы целиком уместить страницу в окне"
 
-#: ../src/verbs.cpp:2625
+#: ../src/verbs.cpp:2639
 msgid "Page _Width"
 msgstr "_Ширина страницы"
 
-#: ../src/verbs.cpp:2626
+#: ../src/verbs.cpp:2640
 msgid "Zoom to fit page width in window"
 msgstr "Масштабировать так, чтобы уместить в окне страницу по ширине"
 
-#: ../src/verbs.cpp:2628
+#: ../src/verbs.cpp:2642
 msgid "Zoom to fit drawing in window"
 msgstr "Масштабировать так, чтобы целиком уместить рисунок в окне"
 
-#: ../src/verbs.cpp:2630
+#: ../src/verbs.cpp:2644
 msgid "Zoom to fit selection in window"
 msgstr "Масштабировать так, чтобы уместить в окне выделенную область"
 
 #. Dialogs
-#: ../src/verbs.cpp:2633
+#: ../src/verbs.cpp:2647
 msgid "In_kscape Preferences..."
 msgstr "Нас_троить Inkscape..."
 
-#: ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2648
 msgid "Edit global Inkscape preferences"
 msgstr "Изменить общие настройки Inkscape"
 
-#: ../src/verbs.cpp:2635
+#: ../src/verbs.cpp:2649
 msgid "_Document Properties..."
 msgstr "Свойства _документа..."
 
-#: ../src/verbs.cpp:2636
+#: ../src/verbs.cpp:2650
 msgid "Edit properties of this document (to be saved with the document)"
 msgstr "Изменить параметры этого документа, сохраняемые вместе с ним"
 
-#: ../src/verbs.cpp:2637
+#: ../src/verbs.cpp:2651
 msgid "Document _Metadata..."
 msgstr "_Метаданные документа..."
 
-#: ../src/verbs.cpp:2638
+#: ../src/verbs.cpp:2652
 msgid "Edit document metadata (to be saved with the document)"
 msgstr "Изменить сведения о документе, сохраняемые вместе с ним"
 
-#: ../src/verbs.cpp:2639
+#: ../src/verbs.cpp:2653
 msgid "_Fill and Stroke..."
 msgstr "_Заливка и обводка..."
 
-#: ../src/verbs.cpp:2640
+#: ../src/verbs.cpp:2654
 msgid "Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
 msgstr "Изменить заливку объекта, параметры обводки, маркеры и штриховку стрелок..."
 
 #. TRANSLATORS: "Swatches" means: color samples
-#: ../src/verbs.cpp:2642
+#: ../src/verbs.cpp:2656
 msgid "S_watches..."
 msgstr "Образцы _цветов..."
 
-#: ../src/verbs.cpp:2643
+#: ../src/verbs.cpp:2657
 msgid "Select colors from a swatches palette"
 msgstr "Выбрать цвет из палитры образцов"
 
-#: ../src/verbs.cpp:2644
+#: ../src/verbs.cpp:2658
 msgid "Transfor_m..."
 msgstr "Транс_формировать..."
 
-#: ../src/verbs.cpp:2645
+#: ../src/verbs.cpp:2659
 msgid "Precisely control objects' transformations"
 msgstr "Точно изменить текущий объект"
 
-#: ../src/verbs.cpp:2646
+#: ../src/verbs.cpp:2660
 msgid "_Align and Distribute..."
 msgstr "_Выровнять и расставить..."
 
-#: ../src/verbs.cpp:2647
+#: ../src/verbs.cpp:2661
 msgid "Align and distribute objects"
 msgstr "Выровнять и расставить объекты"
 
-#: ../src/verbs.cpp:2648
+#: ../src/verbs.cpp:2662
+msgid "_Spray options..."
+msgstr "П_араметры распылителя..."
+
+#: ../src/verbs.cpp:2663
+#, fuzzy
+msgid "Some options for the spray"
+msgstr "Показать очертания контура"
+
+#: ../src/verbs.cpp:2664
 msgid "Undo _History..."
 msgstr "_История действий..."
 
-#: ../src/verbs.cpp:2649
+#: ../src/verbs.cpp:2665
 msgid "Undo History"
 msgstr "История действий"
 
-#: ../src/verbs.cpp:2650
+#: ../src/verbs.cpp:2666
 msgid "_Text and Font..."
 msgstr "_Текст и шрифт..."
 
-#: ../src/verbs.cpp:2651
+#: ../src/verbs.cpp:2667
 msgid "View and select font family, font size and other text properties"
 msgstr "Просмотреть и выбрать гарнитуру, кегль и прочие характеристики текста"
 
-#: ../src/verbs.cpp:2652
+#: ../src/verbs.cpp:2668
 msgid "_XML Editor..."
 msgstr "Редактор _XML..."
 
-#: ../src/verbs.cpp:2653
+#: ../src/verbs.cpp:2669
 msgid "View and edit the XML tree of the document"
 msgstr "Просмотреть и изменить XML-дерево документа"
 
-#: ../src/verbs.cpp:2654
+#: ../src/verbs.cpp:2670
 msgid "_Find..."
 msgstr "_Найти..."
 
-#: ../src/verbs.cpp:2655
+#: ../src/verbs.cpp:2671
 msgid "Find objects in document"
 msgstr "Найти объекты в документе"
 
-#: ../src/verbs.cpp:2656
+#: ../src/verbs.cpp:2672
 msgid "Find and _Replace Text..."
 msgstr "_Найти и заменить текст..."
 
-#: ../src/verbs.cpp:2657
+#: ../src/verbs.cpp:2673
 msgid "Find and replace text in document"
 msgstr "Найти и заменить текст в документе"
 
-#: ../src/verbs.cpp:2658
+#: ../src/verbs.cpp:2674
 msgid "Check Spellin_g..."
 msgstr "Проверить _орфографию..."
 
-#: ../src/verbs.cpp:2659
+#: ../src/verbs.cpp:2675
 msgid "Check spelling of text in document"
 msgstr "Проверить правописание текста в документе"
 
-#: ../src/verbs.cpp:2660
+#: ../src/verbs.cpp:2676
 msgid "_Messages..."
 msgstr "_Сообщения..."
 
-#: ../src/verbs.cpp:2661
+#: ../src/verbs.cpp:2677
 msgid "View debug messages"
 msgstr "Просмотреть отладочные сообщения"
 
-#: ../src/verbs.cpp:2662
+#: ../src/verbs.cpp:2678
 msgid "S_cripts..."
 msgstr "С_ценарии..."
 
-#: ../src/verbs.cpp:2663
+#: ../src/verbs.cpp:2679
 msgid "Run scripts"
 msgstr "Выполнить сценарии"
 
-#: ../src/verbs.cpp:2664
+#: ../src/verbs.cpp:2680
 msgid "Show/Hide D_ialogs"
 msgstr "Показать/спря_тать диалоги"
 
-#: ../src/verbs.cpp:2665
+#: ../src/verbs.cpp:2681
 msgid "Show or hide all open dialogs"
 msgstr "Показать или скрыть все открытые диалоги"
 
-#: ../src/verbs.cpp:2666
+#: ../src/verbs.cpp:2682
 msgid "Create Tiled Clones..."
 msgstr "_Создать узор из клонов..."
 
-#: ../src/verbs.cpp:2667
+#: ../src/verbs.cpp:2683
 msgid "Create multiple clones of selected object, arranging them into a pattern or scattering"
 msgstr "Создать несколько клонов выделенного объекта, расставив их в текстуру или разбросав"
 
-#: ../src/verbs.cpp:2668
+#: ../src/verbs.cpp:2684
 msgid "_Object Properties..."
 msgstr "_Свойства объекта..."
 
-#: ../src/verbs.cpp:2669
+#: ../src/verbs.cpp:2685
 msgid "Edit the ID, locked and visible status, and other object properties"
 msgstr "Изменить ID, статус запертости и видимости, иные свойства объекта"
 
-#: ../src/verbs.cpp:2672
-msgid "_Instant Messaging..."
-msgstr "_Коллективное рисование..."
-
-#: ../src/verbs.cpp:2672
-msgid "Jabber Instant Messaging Client"
-msgstr "Клиент для коллективного рисования"
-
-#: ../src/verbs.cpp:2674
+#. #ifdef WITH_INKBOARD
+#. new DialogVerb(SP_VERB_XMPP_CLIENT, "DialogXmppClient",
+#. N_("_Instant Messaging..."), N_("Jabber Instant Messaging Client"), NULL),
+#. #endif
+#: ../src/verbs.cpp:2690
 msgid "_Input Devices..."
 msgstr "_Устройства ввода..."
 
-#: ../src/verbs.cpp:2675
-#: ../src/verbs.cpp:2677
+#: ../src/verbs.cpp:2691
+#: ../src/verbs.cpp:2693
 msgid "Configure extended input devices, such as a graphics tablet"
 msgstr "Настройка расширенных устройств ввода, таких как графический планшет"
 
-#: ../src/verbs.cpp:2676
+#: ../src/verbs.cpp:2692
 msgid "_Input Devices (new)..."
 msgstr "_Устройства ввода (новый диалог)..."
 
-#: ../src/verbs.cpp:2678
+#: ../src/verbs.cpp:2694
 msgid "_Extensions..."
 msgstr "_Расширения..."
 
-#: ../src/verbs.cpp:2679
+#: ../src/verbs.cpp:2695
 msgid "Query information about extensions"
 msgstr "Запросить информацию о расширениях"
 
-#: ../src/verbs.cpp:2680
+#: ../src/verbs.cpp:2696
 msgid "Layer_s..."
 msgstr "Сл_ои..."
 
-#: ../src/verbs.cpp:2681
+#: ../src/verbs.cpp:2697
 msgid "View Layers"
 msgstr "Открыть палитру слоёв"
 
-#: ../src/verbs.cpp:2682
+#: ../src/verbs.cpp:2698
 msgid "Path Effect Editor..."
 msgstr "Редактор контурных эффектов..."
 
-#: ../src/verbs.cpp:2683
+#: ../src/verbs.cpp:2699
 msgid "Manage, edit, and apply path effects"
 msgstr "Управление, редактирование и применение контурных эффектов"
 
-#: ../src/verbs.cpp:2684
+#: ../src/verbs.cpp:2700
 msgid "Filter Editor..."
 msgstr "Редактор фильтров..."
 
-#: ../src/verbs.cpp:2685
+#: ../src/verbs.cpp:2701
 msgid "Manage, edit, and apply SVG filters"
 msgstr "Управление, редактирование и применение фильтров SVG"
 
-#: ../src/verbs.cpp:2686
+#: ../src/verbs.cpp:2702
 msgid "SVG Font Editor..."
 msgstr "Редактор шрифтов SVG..."
 
-#: ../src/verbs.cpp:2687
+#: ../src/verbs.cpp:2703
 msgid "Edit SVG fonts"
 msgstr "Редактирование шрифтов SVG"
 
 #. Help
-#: ../src/verbs.cpp:2690
+#: ../src/verbs.cpp:2706
 msgid "About E_xtensions"
 msgstr "О р_асширениях"
 
-#: ../src/verbs.cpp:2691
+#: ../src/verbs.cpp:2707
 msgid "Information on Inkscape extensions"
 msgstr "Информация о расширениях Inkscape"
 
-#: ../src/verbs.cpp:2692
+#: ../src/verbs.cpp:2708
 msgid "About _Memory"
 msgstr "Об используемой _памяти"
 
-#: ../src/verbs.cpp:2693
+#: ../src/verbs.cpp:2709
 msgid "Memory usage information"
 msgstr "Информация об используемой памяти"
 
-#: ../src/verbs.cpp:2694
+#: ../src/verbs.cpp:2710
 msgid "_About Inkscape"
 msgstr "_О программе"
 
-#: ../src/verbs.cpp:2695
+#: ../src/verbs.cpp:2711
 msgid "Inkscape version, authors, license"
 msgstr "Версия Inkscape, авторы, лицензия"
 
 #. new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"),
 #. N_("Distribution terms"), /*"show_license"*/"inkscape_options"),
 #. Tutorials
-#: ../src/verbs.cpp:2700
+#: ../src/verbs.cpp:2716
 msgid "Inkscape: _Basic"
 msgstr "Inkscape: _Основы"
 
-#: ../src/verbs.cpp:2701
+#: ../src/verbs.cpp:2717
 msgid "Getting started with Inkscape"
 msgstr "Начинаем работу с Inkscape"
 
 #. "tutorial_basic"
-#: ../src/verbs.cpp:2702
+#: ../src/verbs.cpp:2718
 msgid "Inkscape: _Shapes"
 msgstr "Inkscape: _Фигуры"
 
-#: ../src/verbs.cpp:2703
+#: ../src/verbs.cpp:2719
 msgid "Using shape tools to create and edit shapes"
 msgstr "Использование инструментов рисования и редактирования фигур"
 
-#: ../src/verbs.cpp:2704
+#: ../src/verbs.cpp:2720
 msgid "Inkscape: _Advanced"
 msgstr "Inkscape: _Продвинутый курс"
 
-#: ../src/verbs.cpp:2705
+#: ../src/verbs.cpp:2721
 msgid "Advanced Inkscape topics"
 msgstr "Дополнительные темы по Inkscape"
 
 #. "tutorial_advanced"
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2707
+#: ../src/verbs.cpp:2723
 msgid "Inkscape: T_racing"
 msgstr "Inkscape: _Векторизация"
 
-#: ../src/verbs.cpp:2708
+#: ../src/verbs.cpp:2724
 msgid "Using bitmap tracing"
 msgstr "Использование векторизации"
 
 #. "tutorial_tracing"
-#: ../src/verbs.cpp:2709
+#: ../src/verbs.cpp:2725
 msgid "Inkscape: _Calligraphy"
 msgstr "Inkscape: _Каллиграфия"
 
-#: ../src/verbs.cpp:2710
+#: ../src/verbs.cpp:2726
 msgid "Using the Calligraphy pen tool"
 msgstr "Использование каллиграфического пера"
 
-#: ../src/verbs.cpp:2711
+#: ../src/verbs.cpp:2727
 msgid "_Elements of Design"
 msgstr "Основы _дизайна"
 
-#: ../src/verbs.cpp:2712
+#: ../src/verbs.cpp:2728
 msgid "Principles of design in the tutorial form"
 msgstr "Самоучитель по элементам дизайна в виде урока"
 
 #. "tutorial_design"
-#: ../src/verbs.cpp:2713
+#: ../src/verbs.cpp:2729
 msgid "_Tips and Tricks"
 msgstr "Inkscape: _Советы и хитрости"
 
-#: ../src/verbs.cpp:2714
+#: ../src/verbs.cpp:2730
 msgid "Miscellaneous tips and tricks"
 msgstr "Различные советы по использованию программы"
 
 #. "tutorial_tips"
 #. Effect -- renamed Extension
-#: ../src/verbs.cpp:2717
+#: ../src/verbs.cpp:2733
 msgid "Previous Extension"
 msgstr "Повторить выполнение"
 
-#: ../src/verbs.cpp:2718
+#: ../src/verbs.cpp:2734
 msgid "Repeat the last extension with the same settings"
 msgstr "Повторно выполнить последнее расширение с теми же параметрами"
 
-#: ../src/verbs.cpp:2719
+#: ../src/verbs.cpp:2735
 msgid "Previous Extension Settings..."
 msgstr "Повторить с изменениями..."
 
-#: ../src/verbs.cpp:2720
+#: ../src/verbs.cpp:2736
 msgid "Repeat the last extension with new settings"
 msgstr "Повторно выполнить последнее расширение с новыми параметрами"
 
-#: ../src/verbs.cpp:2724
+#: ../src/verbs.cpp:2740
 msgid "Fit the page to the current selection"
 msgstr "Откадрировать холст до текущего выделения"
 
-#: ../src/verbs.cpp:2726
+#: ../src/verbs.cpp:2742
 msgid "Fit the page to the drawing"
 msgstr "Откадрировать холст до рисунка"
 
-#: ../src/verbs.cpp:2728
+#: ../src/verbs.cpp:2744
 msgid "Fit the page to the current selection or the drawing if there is no selection"
 msgstr "Откадрировать холст до текущего выделения или рисунка, если ничего не выделено"
 
 #. LockAndHide
-#: ../src/verbs.cpp:2730
+#: ../src/verbs.cpp:2746
 msgid "Unlock All"
 msgstr "Отпереть все"
 
-#: ../src/verbs.cpp:2732
+#: ../src/verbs.cpp:2748
 msgid "Unlock All in All Layers"
 msgstr "Отпереть все во всех слоях"
 
-#: ../src/verbs.cpp:2734
+#: ../src/verbs.cpp:2750
 msgid "Unhide All"
 msgstr "Раскрыть все"
 
-#: ../src/verbs.cpp:2736
+#: ../src/verbs.cpp:2752
 msgid "Unhide All in All Layers"
 msgstr "Раскрыть все во всех слоях"
 
-#: ../src/verbs.cpp:2740
+#: ../src/verbs.cpp:2756
 msgid "Link an ICC color profile"
 msgstr "Связать с цветовым профилем ICC"
 
-#: ../src/verbs.cpp:2741
+#: ../src/verbs.cpp:2757
 msgid "Remove Color Profile"
 msgstr "Удалить цветовой профиль"
 
-#: ../src/verbs.cpp:2742
+#: ../src/verbs.cpp:2758
 msgid "Remove a linked ICC color profile"
 msgstr "Удалить связанный цветовой профиль ICC"
 
@@ -17414,7 +17605,6 @@ msgstr "Кегль шрифта:"
 #. * some representative characters that users of your locale will be
 #. * interested in.
 #: ../src/widgets/font-selector.cpp:641
-#: ../src/widgets/toolbox.cpp:6522
 msgid "AaBbCcIiPpQq12369$€¢?.;/()"
 msgstr "АаБбВвГгЁёФфЩщЯя$€¢?.;/()"
 
@@ -17460,14 +17650,14 @@ msgid "Edit the stops of the gradient"
 msgstr "Изменить опорные точки в градиенте"
 
 #: ../src/widgets/gradient-toolbar.cpp:527
-#: ../src/widgets/toolbox.cpp:2630
-#: ../src/widgets/toolbox.cpp:2708
-#: ../src/widgets/toolbox.cpp:3039
-#: ../src/widgets/toolbox.cpp:3077
-#: ../src/widgets/toolbox.cpp:3692
-#: ../src/widgets/toolbox.cpp:3716
-#: ../src/widgets/toolbox.cpp:5130
-#: ../src/widgets/toolbox.cpp:5159
+#: ../src/widgets/toolbox.cpp:2657
+#: ../src/widgets/toolbox.cpp:2735
+#: ../src/widgets/toolbox.cpp:3066
+#: ../src/widgets/toolbox.cpp:3104
+#: ../src/widgets/toolbox.cpp:3719
+#: ../src/widgets/toolbox.cpp:3743
+#: ../src/widgets/toolbox.cpp:5349
+#: ../src/widgets/toolbox.cpp:5378
 msgid "<b>New:</b>"
 msgstr "<b>Новый:</b>"
 
@@ -17495,13 +17685,13 @@ msgstr "Создать градиент в обводке"
 #. FIXME: implement averaging of all parameters for multiple selected
 #. gtk_label_set_markup(GTK_LABEL(l), _("<b>Average:</b>"));
 #: ../src/widgets/gradient-toolbar.cpp:610
-#: ../src/widgets/toolbox.cpp:2632
-#: ../src/widgets/toolbox.cpp:3047
-#: ../src/widgets/toolbox.cpp:3065
-#: ../src/widgets/toolbox.cpp:3694
-#: ../src/widgets/toolbox.cpp:3705
-#: ../src/widgets/toolbox.cpp:5133
-#: ../src/widgets/toolbox.cpp:5144
+#: ../src/widgets/toolbox.cpp:2659
+#: ../src/widgets/toolbox.cpp:3074
+#: ../src/widgets/toolbox.cpp:3092
+#: ../src/widgets/toolbox.cpp:3721
+#: ../src/widgets/toolbox.cpp:3732
+#: ../src/widgets/toolbox.cpp:5352
+#: ../src/widgets/toolbox.cpp:5363
 msgid "<b>Change:</b>"
 msgstr "<b>Менять:</b>"
 
@@ -17743,58 +17933,58 @@ msgid "CMS"
 msgstr "CMS"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:220
-#: ../src/widgets/sp-color-scales.cpp:399
+#: ../src/widgets/sp-color-scales.cpp:411
 msgid "_R"
 msgstr "_R"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:220
 #: ../src/widgets/sp-color-icc-selector.cpp:221
-#: ../src/widgets/sp-color-scales.cpp:402
+#: ../src/widgets/sp-color-scales.cpp:414
 msgid "_G"
 msgstr "_G"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:220
-#: ../src/widgets/sp-color-scales.cpp:405
+#: ../src/widgets/sp-color-scales.cpp:417
 msgid "_B"
 msgstr "_B"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:222
 #: ../src/widgets/sp-color-icc-selector.cpp:223
-#: ../src/widgets/sp-color-scales.cpp:425
+#: ../src/widgets/sp-color-scales.cpp:437
 msgid "_H"
 msgstr "_H"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:222
 #: ../src/widgets/sp-color-icc-selector.cpp:223
-#: ../src/widgets/sp-color-scales.cpp:428
+#: ../src/widgets/sp-color-scales.cpp:440
 msgid "_S"
 msgstr "_S"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:223
-#: ../src/widgets/sp-color-scales.cpp:431
+#: ../src/widgets/sp-color-scales.cpp:443
 msgid "_L"
 msgstr "_L"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:224
 #: ../src/widgets/sp-color-icc-selector.cpp:225
-#: ../src/widgets/sp-color-scales.cpp:453
+#: ../src/widgets/sp-color-scales.cpp:465
 msgid "_C"
 msgstr "_C"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:224
 #: ../src/widgets/sp-color-icc-selector.cpp:225
-#: ../src/widgets/sp-color-scales.cpp:456
+#: ../src/widgets/sp-color-scales.cpp:468
 msgid "_M"
 msgstr "_M"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:224
 #: ../src/widgets/sp-color-icc-selector.cpp:225
-#: ../src/widgets/sp-color-scales.cpp:459
+#: ../src/widgets/sp-color-scales.cpp:471
 msgid "_Y"
 msgstr "_Y"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:224
-#: ../src/widgets/sp-color-scales.cpp:462
+#: ../src/widgets/sp-color-scales.cpp:474
 msgid "_K"
 msgstr "_K"
 
@@ -17804,22 +17994,22 @@ msgstr "Серый"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:238
 #: ../src/widgets/sp-color-icc-selector.cpp:239
-#: ../src/widgets/sp-color-scales.cpp:454
-#: ../src/widgets/sp-color-scales.cpp:455
+#: ../src/widgets/sp-color-scales.cpp:466
+#: ../src/widgets/sp-color-scales.cpp:467
 msgid "Cyan"
 msgstr "Голубой"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:238
 #: ../src/widgets/sp-color-icc-selector.cpp:239
-#: ../src/widgets/sp-color-scales.cpp:457
-#: ../src/widgets/sp-color-scales.cpp:458
+#: ../src/widgets/sp-color-scales.cpp:469
+#: ../src/widgets/sp-color-scales.cpp:470
 msgid "Magenta"
 msgstr "Пурпурный"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:238
 #: ../src/widgets/sp-color-icc-selector.cpp:239
-#: ../src/widgets/sp-color-scales.cpp:460
-#: ../src/widgets/sp-color-scales.cpp:461
+#: ../src/widgets/sp-color-scales.cpp:472
+#: ../src/widgets/sp-color-scales.cpp:473
 msgid "Yellow"
 msgstr "Жёлтый"
 
@@ -17833,43 +18023,56 @@ msgstr "Исправить откат на RGB до совпадения со з
 
 #. Label
 #: ../src/widgets/sp-color-icc-selector.cpp:380
-#: ../src/widgets/sp-color-scales.cpp:408
-#: ../src/widgets/sp-color-scales.cpp:434
-#: ../src/widgets/sp-color-scales.cpp:465
-#: ../src/widgets/sp-color-wheel-selector.cpp:134
+#: ../src/widgets/sp-color-scales.cpp:420
+#: ../src/widgets/sp-color-scales.cpp:446
+#: ../src/widgets/sp-color-scales.cpp:477
+#: ../src/widgets/sp-color-wheel-selector.cpp:135
 msgid "_A"
 msgstr "_A"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:390
 #: ../src/widgets/sp-color-icc-selector.cpp:402
-#: ../src/widgets/sp-color-scales.cpp:409
-#: ../src/widgets/sp-color-scales.cpp:410
-#: ../src/widgets/sp-color-scales.cpp:435
-#: ../src/widgets/sp-color-scales.cpp:436
-#: ../src/widgets/sp-color-scales.cpp:466
-#: ../src/widgets/sp-color-scales.cpp:467
-#: ../src/widgets/sp-color-wheel-selector.cpp:144
-#: ../src/widgets/sp-color-wheel-selector.cpp:156
+#: ../src/widgets/sp-color-scales.cpp:421
+#: ../src/widgets/sp-color-scales.cpp:422
+#: ../src/widgets/sp-color-scales.cpp:447
+#: ../src/widgets/sp-color-scales.cpp:448
+#: ../src/widgets/sp-color-scales.cpp:478
+#: ../src/widgets/sp-color-scales.cpp:479
+#: ../src/widgets/sp-color-wheel-selector.cpp:145
+#: ../src/widgets/sp-color-wheel-selector.cpp:157
 msgid "Alpha (opacity)"
 msgstr "Альфа-канал (непрозрачность)"
 
-#: ../src/widgets/sp-color-notebook.cpp:330
+#: ../src/widgets/sp-color-notebook.cpp:339
+msgid "Color Managed"
+msgstr "С управлением цветом"
+
+#: ../src/widgets/sp-color-notebook.cpp:347
+msgid "Out of gamut!"
+msgstr "Вне цветового охвата!"
+
+#: ../src/widgets/sp-color-notebook.cpp:355
+msgid "Too much ink!"
+msgstr "Слишком много краски!"
+
+#. Create RGBA entry and color preview
+#: ../src/widgets/sp-color-notebook.cpp:362
 msgid "RGBA_:"
 msgstr "RGBA_:"
 
-#: ../src/widgets/sp-color-notebook.cpp:338
+#: ../src/widgets/sp-color-notebook.cpp:370
 msgid "Hexadecimal RGBA value of the color"
 msgstr "Шестнадцатеричное значение RGBA"
 
-#: ../src/widgets/sp-color-scales.cpp:79
+#: ../src/widgets/sp-color-scales.cpp:81
 msgid "RGB"
 msgstr "RGB"
 
-#: ../src/widgets/sp-color-scales.cpp:79
+#: ../src/widgets/sp-color-scales.cpp:81
 msgid "HSL"
 msgstr "HSL"
 
-#: ../src/widgets/sp-color-scales.cpp:79
+#: ../src/widgets/sp-color-scales.cpp:81
 msgid "CMYK"
 msgstr "CMYK"
 
@@ -17877,7 +18080,7 @@ msgstr "CMYK"
 msgid "Unnamed"
 msgstr "Безымянный"
 
-#: ../src/widgets/sp-color-wheel-selector.cpp:61
+#: ../src/widgets/sp-color-wheel-selector.cpp:62
 msgid "Wheel"
 msgstr "Круг"
 
@@ -18021,1537 +18224,1719 @@ msgstr "Маркеры конца рисуются в последнем узл
 msgid "Set stroke style"
 msgstr "Установка стиля обводки"
 
-#: ../src/widgets/toolbox.cpp:183
+#: ../src/widgets/toolbox.cpp:186
 msgid "Color/opacity used for color tweaking"
 msgstr "Цвет/непрозрачность, используемые для коррекции цвета"
 
-#: ../src/widgets/toolbox.cpp:187
+#: ../src/widgets/toolbox.cpp:188
+#, fuzzy
+msgid "Color/opacity used for color spraying"
+msgstr "Цвет/непрозрачность, используемые для коррекции цвета"
+
+#: ../src/widgets/toolbox.cpp:192
 msgid "Style of new stars"
 msgstr "Стиль новых звёзд"
 
-#: ../src/widgets/toolbox.cpp:189
+#: ../src/widgets/toolbox.cpp:194
 msgid "Style of new rectangles"
 msgstr "Стиль новых прямоугольников"
 
-#: ../src/widgets/toolbox.cpp:191
+#: ../src/widgets/toolbox.cpp:196
 msgid "Style of new 3D boxes"
 msgstr "Стиль новых параллелепипедов"
 
-#: ../src/widgets/toolbox.cpp:193
+#: ../src/widgets/toolbox.cpp:198
 msgid "Style of new ellipses"
 msgstr "Стиль новых эллипсов"
 
-#: ../src/widgets/toolbox.cpp:195
+#: ../src/widgets/toolbox.cpp:200
 msgid "Style of new spirals"
 msgstr "Стиль новых спиралей"
 
-#: ../src/widgets/toolbox.cpp:197
+#: ../src/widgets/toolbox.cpp:202
 msgid "Style of new paths created by Pencil"
 msgstr "Стиль новых контуров, созданных Карандашом"
 
-#: ../src/widgets/toolbox.cpp:199
+#: ../src/widgets/toolbox.cpp:204
 msgid "Style of new paths created by Pen"
 msgstr "Стиль новых контуров, созданных Пером"
 
-#: ../src/widgets/toolbox.cpp:201
+#: ../src/widgets/toolbox.cpp:206
 msgid "Style of new calligraphic strokes"
 msgstr "Стиль новых каллиграфических штрихов"
 
-#: ../src/widgets/toolbox.cpp:203
-#: ../src/widgets/toolbox.cpp:205
+#: ../src/widgets/toolbox.cpp:208
+#: ../src/widgets/toolbox.cpp:210
 msgid "TBD"
 msgstr "k"
 
-#: ../src/widgets/toolbox.cpp:215
+#: ../src/widgets/toolbox.cpp:220
 msgid "Style of Paint Bucket fill objects"
 msgstr "Стиль заливки новых объектов, созданных инструментом заливки"
 
-#: ../src/widgets/toolbox.cpp:1289
+#: ../src/widgets/toolbox.cpp:1315
 msgid "Insert node"
 msgstr "Вставка узла"
 
-#: ../src/widgets/toolbox.cpp:1290
+#: ../src/widgets/toolbox.cpp:1316
 msgid "Insert new nodes into selected segments"
 msgstr "Вставить новые узлы в выделенные сегменты"
 
-#: ../src/widgets/toolbox.cpp:1293
+#: ../src/widgets/toolbox.cpp:1319
 msgid "Insert"
 msgstr "Вставить"
 
-#: ../src/widgets/toolbox.cpp:1301
+#: ../src/widgets/toolbox.cpp:1327
 msgid "Delete selected nodes"
 msgstr "Удалить выделенные узлы"
 
-#: ../src/widgets/toolbox.cpp:1311
+#: ../src/widgets/toolbox.cpp:1337
 msgid "Join endnodes"
 msgstr "Соединение оконечных узлов"
 
-#: ../src/widgets/toolbox.cpp:1312
+#: ../src/widgets/toolbox.cpp:1338
 msgid "Join selected endnodes"
 msgstr "Соединить контуры по выделенным оконечным узлам"
 
-#: ../src/widgets/toolbox.cpp:1315
+#: ../src/widgets/toolbox.cpp:1341
 msgid "Join"
 msgstr "Соединение"
 
-#: ../src/widgets/toolbox.cpp:1322
+#: ../src/widgets/toolbox.cpp:1348
 msgid "Break nodes"
 msgstr "Разбить узлы"
 
-#: ../src/widgets/toolbox.cpp:1323
+#: ../src/widgets/toolbox.cpp:1349
 msgid "Break path at selected nodes"
 msgstr "Разорвать контур в выделенном узле"
 
-#: ../src/widgets/toolbox.cpp:1333
+#: ../src/widgets/toolbox.cpp:1359
 msgid "Join with segment"
 msgstr "Соединить узлы сегментом"
 
-#: ../src/widgets/toolbox.cpp:1334
+#: ../src/widgets/toolbox.cpp:1360
 msgid "Join selected endnodes with a new segment"
 msgstr "Соединить контуры по выделенным оконечным узлам новым сегментом"
 
-#: ../src/widgets/toolbox.cpp:1344
+#: ../src/widgets/toolbox.cpp:1370
 msgid "Delete segment between two non-endpoint nodes"
 msgstr "Удалить сегмент между двумя неоконечными узлами"
 
-#: ../src/widgets/toolbox.cpp:1353
+#: ../src/widgets/toolbox.cpp:1379
 msgid "Node Cusp"
 msgstr "Острые узлы"
 
-#: ../src/widgets/toolbox.cpp:1354
+#: ../src/widgets/toolbox.cpp:1380
 msgid "Make selected nodes corner"
 msgstr "Сделать выделенные узлы острыми"
 
-#: ../src/widgets/toolbox.cpp:1363
+#: ../src/widgets/toolbox.cpp:1389
 msgid "Node Smooth"
 msgstr "Гладкие узлы"
 
-#: ../src/widgets/toolbox.cpp:1364
+#: ../src/widgets/toolbox.cpp:1390
 msgid "Make selected nodes smooth"
 msgstr "Сделать выделенные узлы сглаженными"
 
-#: ../src/widgets/toolbox.cpp:1373
+#: ../src/widgets/toolbox.cpp:1399
 msgid "Node Symmetric"
 msgstr "Симметричные узлы"
 
-#: ../src/widgets/toolbox.cpp:1374
+#: ../src/widgets/toolbox.cpp:1400
 msgid "Make selected nodes symmetric"
 msgstr "Сделать выделенные узлы симметричными"
 
-#: ../src/widgets/toolbox.cpp:1383
+#: ../src/widgets/toolbox.cpp:1409
 msgid "Node Auto"
 msgstr "Автоматический узел"
 
-#: ../src/widgets/toolbox.cpp:1384
+#: ../src/widgets/toolbox.cpp:1410
 msgid "Make selected nodes auto-smooth"
 msgstr "Сделать выделенные узлы автоматически сглаженными"
 
-#: ../src/widgets/toolbox.cpp:1393
+#: ../src/widgets/toolbox.cpp:1419
 msgid "Node Line"
 msgstr "Линия по узлам"
 
-#: ../src/widgets/toolbox.cpp:1394
+#: ../src/widgets/toolbox.cpp:1420
 msgid "Make selected segments lines"
 msgstr "Сделать выделенные сегменты прямыми"
 
-#: ../src/widgets/toolbox.cpp:1403
+#: ../src/widgets/toolbox.cpp:1429
 msgid "Node Curve"
 msgstr "Кривая по узлам"
 
-#: ../src/widgets/toolbox.cpp:1404
+#: ../src/widgets/toolbox.cpp:1430
 msgid "Make selected segments curves"
 msgstr "Сделать выделенные сегменты кривыми"
 
-#: ../src/widgets/toolbox.cpp:1413
+#: ../src/widgets/toolbox.cpp:1439
 msgid "Show Handles"
 msgstr "Показывать рычаги"
 
-#: ../src/widgets/toolbox.cpp:1414
+#: ../src/widgets/toolbox.cpp:1440
 msgid "Show the Bezier handles of selected nodes"
 msgstr "Показывать рычаги выбранных узлов"
 
-#: ../src/widgets/toolbox.cpp:1424
+#: ../src/widgets/toolbox.cpp:1450
 msgid "Show Outline"
 msgstr "Показать контур"
 
-#: ../src/widgets/toolbox.cpp:1425
+#: ../src/widgets/toolbox.cpp:1451
 msgid "Show the outline of the path"
 msgstr "Показать очертания контура"
 
-#: ../src/widgets/toolbox.cpp:1435
+#: ../src/widgets/toolbox.cpp:1461
 msgid "Next path effect parameter"
 msgstr "Следующий параметр контурного эффекта"
 
-#: ../src/widgets/toolbox.cpp:1436
+#: ../src/widgets/toolbox.cpp:1462
 msgid "Show next path effect parameter for editing"
 msgstr "Показать следующий редактируемый параметр динамического эффекта"
 
-#: ../src/widgets/toolbox.cpp:1447
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Edit the clipping path of the object"
 msgstr "Изменить обтравочный контур объекта"
 
-#: ../src/widgets/toolbox.cpp:1457
+#: ../src/widgets/toolbox.cpp:1483
 msgid "Edit mask path"
 msgstr "Изменить контур маски"
 
-#: ../src/widgets/toolbox.cpp:1458
+#: ../src/widgets/toolbox.cpp:1484
 msgid "Edit the mask of the object"
 msgstr "Изменить маску объекта"
 
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X coordinate:"
 msgstr "Координата по X:"
 
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X coordinate of selected node(s)"
 msgstr "Координата X выбранных узлов"
 
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y coordinate:"
 msgstr "Координата по Y:"
 
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y coordinate of selected node(s)"
 msgstr "Координата Y выбранных узлов"
 
-#: ../src/widgets/toolbox.cpp:2028
+#: ../src/widgets/toolbox.cpp:2055
 msgid "Enable snapping"
 msgstr "Включить прилипание"
 
-#: ../src/widgets/toolbox.cpp:2037
+#: ../src/widgets/toolbox.cpp:2064
 msgid "Bounding box"
 msgstr "Площадка (BB)"
 
-#: ../src/widgets/toolbox.cpp:2037
+#: ../src/widgets/toolbox.cpp:2064
 msgid "Snap bounding box corners"
 msgstr "Прилипать к углам площадки"
 
-#: ../src/widgets/toolbox.cpp:2046
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Bounding box edges"
 msgstr "Края площадок"
 
-#: ../src/widgets/toolbox.cpp:2046
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Snap to edges of a bounding box"
 msgstr "Прилипать к краям площадки"
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2082
 msgid "Bounding box corners"
 msgstr "Углы площадок (BB)"
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2082
 msgid "Snap to bounding box corners"
 msgstr "Прилипать к углам площадки"
 
-#: ../src/widgets/toolbox.cpp:2064
+#: ../src/widgets/toolbox.cpp:2091
 msgid "BBox Edge Midpoints"
 msgstr "Средние точки сторон площадок"
 
-#: ../src/widgets/toolbox.cpp:2064
+#: ../src/widgets/toolbox.cpp:2091
 msgid "Snap from and to midpoints of bounding box edges"
 msgstr "Прилипать центром краев площадки и к нему"
 
-#: ../src/widgets/toolbox.cpp:2074
+#: ../src/widgets/toolbox.cpp:2101
 msgid "BBox Centers"
 msgstr "Центры площадок"
 
-#: ../src/widgets/toolbox.cpp:2074
+#: ../src/widgets/toolbox.cpp:2101
 msgid "Snapping from and to centers of bounding boxes"
 msgstr "Прилипать центрами площадок и к ним"
 
-#: ../src/widgets/toolbox.cpp:2083
+#: ../src/widgets/toolbox.cpp:2110
 msgid "Snap nodes or handles"
 msgstr "Прилипать узлам или их рычагами"
 
-#: ../src/widgets/toolbox.cpp:2091
+#: ../src/widgets/toolbox.cpp:2118
 msgid "Snap to paths"
 msgstr "Прилипать к контурам"
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2127
 msgid "Path intersections"
 msgstr "Пересечения контуров"
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2127
 msgid "Snap to path intersections"
 msgstr "Прилипать к пересечениям контуров"
 
-#: ../src/widgets/toolbox.cpp:2109
+#: ../src/widgets/toolbox.cpp:2136
 msgid "To nodes"
 msgstr "К узлам"
 
-#: ../src/widgets/toolbox.cpp:2109
+#: ../src/widgets/toolbox.cpp:2136
 msgid "Snap to cusp nodes"
 msgstr "Прилипать к острым узлам"
 
-#: ../src/widgets/toolbox.cpp:2118
+#: ../src/widgets/toolbox.cpp:2145
 msgid "Smooth nodes"
 msgstr "Сглаженные узлы"
 
-#: ../src/widgets/toolbox.cpp:2118
+#: ../src/widgets/toolbox.cpp:2145
 msgid "Snap to smooth nodes"
 msgstr "Прилипать к сглаженным узлам"
 
-#: ../src/widgets/toolbox.cpp:2127
+#: ../src/widgets/toolbox.cpp:2154
 msgid "Line Midpoints"
 msgstr "Средние точки линий"
 
-#: ../src/widgets/toolbox.cpp:2127
+#: ../src/widgets/toolbox.cpp:2154
 msgid "Snap from and to midpoints of line segments"
 msgstr "Прилипать средними точками линий и к таковым"
 
-#: ../src/widgets/toolbox.cpp:2136
+#: ../src/widgets/toolbox.cpp:2163
 msgid "Object Centers"
 msgstr "Центры объектов"
 
-#: ../src/widgets/toolbox.cpp:2136
+#: ../src/widgets/toolbox.cpp:2163
 msgid "Snap from and to centers of objects"
 msgstr "Прилипать центрами объектов и к ним"
 
-#: ../src/widgets/toolbox.cpp:2145
+#: ../src/widgets/toolbox.cpp:2172
 msgid "Rotation Centers"
 msgstr "Центры вращения"
 
-#: ../src/widgets/toolbox.cpp:2145
+#: ../src/widgets/toolbox.cpp:2172
 msgid "Snap from and to an item's rotation center"
 msgstr "Прилипать центром вращения и к нему"
 
-#: ../src/widgets/toolbox.cpp:2154
+#: ../src/widgets/toolbox.cpp:2181
 msgid "Page border"
 msgstr "Кайма холста"
 
-#: ../src/widgets/toolbox.cpp:2154
+#: ../src/widgets/toolbox.cpp:2181
 msgid "Snap to the page border"
 msgstr "Прилипать к краю страницы"
 
-#: ../src/widgets/toolbox.cpp:2163
+#: ../src/widgets/toolbox.cpp:2190
 msgid "Snap to grids"
 msgstr "Прилипать к сеткам"
 
-#: ../src/widgets/toolbox.cpp:2172
+#: ../src/widgets/toolbox.cpp:2199
 msgid "Snap to guides"
 msgstr "Прилипать к направляющим"
 
-#: ../src/widgets/toolbox.cpp:2377
+#: ../src/widgets/toolbox.cpp:2404
 msgid "Star: Change number of corners"
 msgstr "Смена количества лучей"
 
-#: ../src/widgets/toolbox.cpp:2422
+#: ../src/widgets/toolbox.cpp:2449
 msgid "Star: Change spoke ratio"
 msgstr "Смена отношения радиусов"
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2492
 msgid "Make polygon"
 msgstr "Звезда → многоугольник"
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2492
 msgid "Make star"
 msgstr "Многоугольник → звезда"
 
-#: ../src/widgets/toolbox.cpp:2501
+#: ../src/widgets/toolbox.cpp:2528
 msgid "Star: Change rounding"
 msgstr "Смена закругления"
 
-#: ../src/widgets/toolbox.cpp:2536
+#: ../src/widgets/toolbox.cpp:2563
 msgid "Star: Change randomization"
 msgstr "Смена случайности искажения"
 
-#: ../src/widgets/toolbox.cpp:2727
+#: ../src/widgets/toolbox.cpp:2754
 msgid "Regular polygon (with one handle) instead of a star"
 msgstr "Правильный многоугольник, а не звезда"
 
-#: ../src/widgets/toolbox.cpp:2734
+#: ../src/widgets/toolbox.cpp:2761
 msgid "Star instead of a regular polygon (with one handle)"
 msgstr "Звезда вместо обычного многоугольника (с одним рычагом)"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "triangle/tri-star"
 msgstr "треугольник/звезда с 3 лучами"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "square/quad-star"
 msgstr "квадрат/звезда с 4 лучами"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "pentagon/five-pointed star"
 msgstr "пятиугольник/звезда с 5 лучами"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "hexagon/six-pointed star"
 msgstr "шестиугольник/звезда с 6 лучами"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Corners"
 msgstr "Углы"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Corners:"
 msgstr "Углы:"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Number of corners of a polygon or star"
 msgstr "Количество вершин многоугольника или звезды"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "thin-ray star"
 msgstr "звезда с тонкими лучами"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "pentagram"
 msgstr "пентаграмма"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "hexagram"
 msgstr "гексаграмма"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "heptagram"
 msgstr "гептаграмма"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "octagram"
 msgstr "октограмма"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "regular polygon"
 msgstr "обычный многоугольник"
 
-#: ../src/widgets/toolbox.cpp:2774
+#: ../src/widgets/toolbox.cpp:2801
 msgid "Spoke ratio"
 msgstr "Отношение радиусов"
 
-#: ../src/widgets/toolbox.cpp:2774
+#: ../src/widgets/toolbox.cpp:2801
 msgid "Spoke ratio:"
 msgstr "Отношение радиусов:"
 
 #. TRANSLATORS: Tip radius of a star is the distance from the center to the farthest handle.
 #. Base radius is the same for the closest handle.
-#: ../src/widgets/toolbox.cpp:2777
+#: ../src/widgets/toolbox.cpp:2804
 msgid "Base radius to tip radius ratio"
 msgstr "Отношение радиусов основания и вершины луча"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "stretched"
 msgstr "растянуто"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "twisted"
 msgstr "извилисто"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "slightly pinched"
 msgstr "слегка прищемлено"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "NOT rounded"
 msgstr "БЕЗ закругления"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "slightly rounded"
 msgstr "небольшое закругление"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "visibly rounded"
 msgstr "заметное закругление"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "well rounded"
 msgstr "порядочное закругление"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "amply rounded"
 msgstr "изрядное закругление"
 
-#: ../src/widgets/toolbox.cpp:2795
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2822
+#: ../src/widgets/toolbox.cpp:2837
 msgid "blown up"
 msgstr "безумное"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "Rounded"
 msgstr "Закругление"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "Rounded:"
 msgstr "Закругление:"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "How much rounded are the corners (0 for sharp)"
 msgstr "Насколько сглажены углы (0 — острые)"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "NOT randomized"
 msgstr "без случайности"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "slightly irregular"
 msgstr "едва беспорядочно"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "visibly randomized"
 msgstr "заметная случайность"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "strongly randomized"
 msgstr "изрядная случайность"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Randomized"
 msgstr "Случайность"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Randomized:"
 msgstr "Искажение:"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Scatter randomly the corners and angles"
 msgstr "Случайным образом смещать вершины и вращать углы"
 
-#: ../src/widgets/toolbox.cpp:2828
-#: ../src/widgets/toolbox.cpp:3767
-#: ../src/widgets/toolbox.cpp:4027
-#: ../src/widgets/toolbox.cpp:7249
+#: ../src/widgets/toolbox.cpp:2855
+#: ../src/widgets/toolbox.cpp:3794
+#: ../src/widgets/toolbox.cpp:4054
+#: ../src/widgets/toolbox.cpp:7681
 msgid "Defaults"
 msgstr "По умолчанию"
 
-#: ../src/widgets/toolbox.cpp:2829
-#: ../src/widgets/toolbox.cpp:3768
+#: ../src/widgets/toolbox.cpp:2856
+#: ../src/widgets/toolbox.cpp:3795
 msgid "Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Сбросить параметры фигуры к значениям по умолчанию (параметры по умолчанию можно изменить в настройках Inkscape)"
 
-#: ../src/widgets/toolbox.cpp:2902
+#: ../src/widgets/toolbox.cpp:2929
 msgid "Change rectangle"
 msgstr "Удаление закругления"
 
-#: ../src/widgets/toolbox.cpp:3095
+#: ../src/widgets/toolbox.cpp:3122
 msgid "W:"
 msgstr "Ш:"
 
-#: ../src/widgets/toolbox.cpp:3095
+#: ../src/widgets/toolbox.cpp:3122
 msgid "Width of rectangle"
 msgstr "Ширина прямоугольника"
 
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 msgid "H:"
 msgstr "Г:"
 
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 msgid "Height of rectangle"
 msgstr "Высота прямоугольника"
 
-#: ../src/widgets/toolbox.cpp:3126
-#: ../src/widgets/toolbox.cpp:3141
+#: ../src/widgets/toolbox.cpp:3153
+#: ../src/widgets/toolbox.cpp:3168
 msgid "not rounded"
 msgstr "без закругления"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Horizontal radius"
 msgstr "Горизонтальный радиус"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Rx:"
 msgstr "Гор. радиус:"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Horizontal radius of rounded corners"
 msgstr "Горизонтальный радиус закругленных углов"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Vertical radius"
 msgstr "Вертикальный радиус"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Ry:"
 msgstr "Верт. радиус:"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Vertical radius of rounded corners"
 msgstr "Вертикальный радиус закругленных углов"
 
-#: ../src/widgets/toolbox.cpp:3163
+#: ../src/widgets/toolbox.cpp:3190
 msgid "Not rounded"
 msgstr "Не закруглён"
 
-#: ../src/widgets/toolbox.cpp:3164
+#: ../src/widgets/toolbox.cpp:3191
 msgid "Make corners sharp"
 msgstr "Убрать закругление углов"
 
 #. TODO: use the correct axis here, too
-#: ../src/widgets/toolbox.cpp:3352
+#: ../src/widgets/toolbox.cpp:3379
 msgid "3D Box: Change perspective (angle of infinite axis)"
 msgstr "Паралеллепипед: смена перспективы"
 
-#: ../src/widgets/toolbox.cpp:3422
+#: ../src/widgets/toolbox.cpp:3449
 msgid "Angle in X direction"
 msgstr "Угол в направлении X"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3424
+#: ../src/widgets/toolbox.cpp:3451
 msgid "Angle of PLs in X direction"
 msgstr "Угол ПЛ в направлении X"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3446
+#: ../src/widgets/toolbox.cpp:3473
 msgid "State of VP in X direction"
 msgstr "Состояние точек схода в направлении X"
 
-#: ../src/widgets/toolbox.cpp:3447
+#: ../src/widgets/toolbox.cpp:3474
 msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Переключить точку схода в направлении X между «конечной» и «бесконечной» (=параллельной)"
 
-#: ../src/widgets/toolbox.cpp:3462
+#: ../src/widgets/toolbox.cpp:3489
 msgid "Angle in Y direction"
 msgstr "Угол в направлении Y"
 
-#: ../src/widgets/toolbox.cpp:3462
+#: ../src/widgets/toolbox.cpp:3489
 msgid "Angle Y:"
 msgstr "Угол Y:"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3464
+#: ../src/widgets/toolbox.cpp:3491
 msgid "Angle of PLs in Y direction"
 msgstr "Угол ПЛ в направлении Y"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3485
+#: ../src/widgets/toolbox.cpp:3512
 msgid "State of VP in Y direction"
 msgstr "Состояние точек схода в направлении Y"
 
-#: ../src/widgets/toolbox.cpp:3486
+#: ../src/widgets/toolbox.cpp:3513
 msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Переключить точку схода в направлении Y между «конечной» и «бесконечной» (=параллельной)"
 
-#: ../src/widgets/toolbox.cpp:3501
+#: ../src/widgets/toolbox.cpp:3528
 msgid "Angle in Z direction"
 msgstr "Угол в направлении Z"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3503
+#: ../src/widgets/toolbox.cpp:3530
 msgid "Angle of PLs in Z direction"
 msgstr "Угол ПЛ в направлении Z"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3524
+#: ../src/widgets/toolbox.cpp:3551
 msgid "State of VP in Z direction"
 msgstr "Состояние точек схода в направлении Z"
 
-#: ../src/widgets/toolbox.cpp:3525
+#: ../src/widgets/toolbox.cpp:3552
 msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Переключить точку схода в направлении Z между «конечной» и «бесконечной» (=параллельной)"
 
-#: ../src/widgets/toolbox.cpp:3583
+#: ../src/widgets/toolbox.cpp:3610
 msgid "Change spiral"
 msgstr "Сброс изменений спирали"
 
-#: ../src/widgets/toolbox.cpp:3724
+#: ../src/widgets/toolbox.cpp:3751
 msgid "just a curve"
 msgstr "просто кривая"
 
-#: ../src/widgets/toolbox.cpp:3724
+#: ../src/widgets/toolbox.cpp:3751
 msgid "one full revolution"
 msgstr "один полный оборот"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Number of turns"
 msgstr "Количество поворотов"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Turns:"
 msgstr "Витков:"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Number of revolutions"
 msgstr "Количество витков"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "circle"
 msgstr "окружность"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "edge is much denser"
 msgstr "край намного плотнее"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "edge is denser"
 msgstr "центр плотнее"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "even"
 msgstr "ровная спираль"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "center is denser"
 msgstr "центр плотнее"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "center is much denser"
 msgstr "центр намного плотнее"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "Divergence"
 msgstr "Отклонение"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "Divergence:"
 msgstr "Нелинейность:"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "How much denser/sparser are outer revolutions; 1 = uniform"
 msgstr "Насколько постепенно увеличивать или уменьшать расстояния между витками; 1 = равномерно"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts from center"
 msgstr "начинается из центра"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts mid-way"
 msgstr "начинается с середины"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts near edge"
 msgstr "начинается с края"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Inner radius"
 msgstr "Внутренний радиус"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Inner radius:"
 msgstr "Внутренний радиус:"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Radius of the innermost revolution (relative to the spiral size)"
 msgstr "Радиус первого изнутри витка (относительно размера спирали)"
 
-#: ../src/widgets/toolbox.cpp:3828
+#: ../src/widgets/toolbox.cpp:3855
 msgid "Bezier"
 msgstr "Кривые Безье"
 
-#: ../src/widgets/toolbox.cpp:3829
+#: ../src/widgets/toolbox.cpp:3856
 msgid "Create regular Bezier path"
 msgstr "Рисовать кривую Безье"
 
-#: ../src/widgets/toolbox.cpp:3835
+#: ../src/widgets/toolbox.cpp:3862
 msgid "Spiro"
 msgstr "Кривые Спиро"
 
-#: ../src/widgets/toolbox.cpp:3836
+#: ../src/widgets/toolbox.cpp:3863
 msgid "Create Spiro path"
 msgstr "Рисовать кривую Спиро"
 
-#: ../src/widgets/toolbox.cpp:3843
+#: ../src/widgets/toolbox.cpp:3870
 msgid "Zigzag"
 msgstr "Зигзаги"
 
-#: ../src/widgets/toolbox.cpp:3844
+#: ../src/widgets/toolbox.cpp:3871
 msgid "Create a sequence of straight line segments"
 msgstr "Рисовать последовательность прямых отрезков"
 
-#: ../src/widgets/toolbox.cpp:3850
+#: ../src/widgets/toolbox.cpp:3877
 msgid "Paraxial"
 msgstr "Параксиальный режим"
 
-#: ../src/widgets/toolbox.cpp:3851
+#: ../src/widgets/toolbox.cpp:3878
 msgid "Create a sequence of paraxial line segments"
 msgstr "Рисовать последовательность прямых отрезков"
 
-#: ../src/widgets/toolbox.cpp:3859
+#: ../src/widgets/toolbox.cpp:3886
 msgid "Mode of new lines drawn by this tool"
 msgstr "Режим рисования новых контуров этим инструментом"
 
-#: ../src/widgets/toolbox.cpp:3888
+#: ../src/widgets/toolbox.cpp:3915
 msgid "Triangle in"
 msgstr "Угасание"
 
-#: ../src/widgets/toolbox.cpp:3889
+#: ../src/widgets/toolbox.cpp:3916
 msgid "Triangle out"
 msgstr "Нарастание"
 
-#: ../src/widgets/toolbox.cpp:3891
+#: ../src/widgets/toolbox.cpp:3918
 msgid "From clipboard"
 msgstr "Из буфера обмена"
 
-#: ../src/widgets/toolbox.cpp:3916
-#: ../src/widgets/toolbox.cpp:3917
+#: ../src/widgets/toolbox.cpp:3943
+#: ../src/widgets/toolbox.cpp:3944
 msgid "Shape:"
 msgstr "Форма:"
 
-#: ../src/widgets/toolbox.cpp:3916
+#: ../src/widgets/toolbox.cpp:3943
 msgid "Shape of new paths drawn by this tool"
 msgstr "Форма новых контуров, рисуемых этим инструментом"
 
-#: ../src/widgets/toolbox.cpp:4001
+#: ../src/widgets/toolbox.cpp:4028
 msgid "(many nodes, rough)"
 msgstr "(много узлов, грубые линии)"
 
-#: ../src/widgets/toolbox.cpp:4001
-#: ../src/widgets/toolbox.cpp:4121
-#: ../src/widgets/toolbox.cpp:4138
-#: ../src/widgets/toolbox.cpp:4341
-#: ../src/widgets/toolbox.cpp:4712
-#: ../src/widgets/toolbox.cpp:4745
-#: ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4028
+#: ../src/widgets/toolbox.cpp:4148
+#: ../src/widgets/toolbox.cpp:4165
+#: ../src/widgets/toolbox.cpp:4368
+#: ../src/widgets/toolbox.cpp:4472
+#: ../src/widgets/toolbox.cpp:4488
+#: ../src/widgets/toolbox.cpp:4504
+#: ../src/widgets/toolbox.cpp:4564
+#: ../src/widgets/toolbox.cpp:4931
+#: ../src/widgets/toolbox.cpp:4964
+#: ../src/widgets/toolbox.cpp:5950
 msgid "(default)"
 msgstr "(по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4001
+#: ../src/widgets/toolbox.cpp:4028
 msgid "(few nodes, smooth)"
 msgstr "(мало узлов, плавные линии)"
 
-#: ../src/widgets/toolbox.cpp:4004
+#: ../src/widgets/toolbox.cpp:4031
 msgid "Smoothing:"
 msgstr "Сглаживание:"
 
-#: ../src/widgets/toolbox.cpp:4004
+#: ../src/widgets/toolbox.cpp:4031
 msgid "Smoothing: "
 msgstr "Сглаживание:"
 
-#: ../src/widgets/toolbox.cpp:4005
+#: ../src/widgets/toolbox.cpp:4032
 msgid "How much smoothing (simplifying) is applied to the line"
 msgstr "Как сильно сглаживается (упрощается) рисуемая от руки линия"
 
-#: ../src/widgets/toolbox.cpp:4028
+#: ../src/widgets/toolbox.cpp:4055
 msgid "Reset pencil parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Сбросить параметры карандаша к значениям по умолчанию (параметры по умолчанию можно изменить в диалоге настройки Inkscape)"
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4121
+#: ../src/widgets/toolbox.cpp:4148
 msgid "(pinch tweak)"
 msgstr "(узкая кисть)"
 
-#: ../src/widgets/toolbox.cpp:4121
+#: ../src/widgets/toolbox.cpp:4148
 msgid "(broad tweak)"
 msgstr "(широкая кисть)"
 
-#: ../src/widgets/toolbox.cpp:4124
+#: ../src/widgets/toolbox.cpp:4151
 msgid "The width of the tweak area (relative to the visible canvas area)"
 msgstr "Ширина области коррекции (относительно видимой области холста)"
 
 #. Force
-#: ../src/widgets/toolbox.cpp:4138
+#: ../src/widgets/toolbox.cpp:4165
 msgid "(minimum force)"
 msgstr "(минимальная)"
 
-#: ../src/widgets/toolbox.cpp:4138
+#: ../src/widgets/toolbox.cpp:4165
 msgid "(maximum force)"
 msgstr "(максимальная)"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "Force"
 msgstr "Сила"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "Force:"
 msgstr "Сила:"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "The force of the tweak action"
 msgstr "Сила действия инструмента коррекции"
 
-#: ../src/widgets/toolbox.cpp:4159
+#: ../src/widgets/toolbox.cpp:4186
 msgid "Move mode"
 msgstr "Перемещение объектов"
 
-#: ../src/widgets/toolbox.cpp:4160
+#: ../src/widgets/toolbox.cpp:4187
 msgid "Move objects in any direction"
 msgstr "Перемещать объекты в любом направлении"
 
-#: ../src/widgets/toolbox.cpp:4166
+#: ../src/widgets/toolbox.cpp:4193
 msgid "Move in/out mode"
 msgstr "Приближение и отталкивание объектов"
 
-#: ../src/widgets/toolbox.cpp:4167
+#: ../src/widgets/toolbox.cpp:4194
 msgid "Move objects towards cursor; with Shift from cursor"
 msgstr "Перемещать объекты по направлению к курсору, с Shift — в направлении от курсора"
 
-#: ../src/widgets/toolbox.cpp:4173
+#: ../src/widgets/toolbox.cpp:4200
 msgid "Move jitter mode"
 msgstr "Случайное перемещение объектов"
 
-#: ../src/widgets/toolbox.cpp:4174
+#: ../src/widgets/toolbox.cpp:4201
 msgid "Move objects in random directions"
 msgstr "Перемещать объекты в случайных направлениях"
 
-#: ../src/widgets/toolbox.cpp:4180
+#: ../src/widgets/toolbox.cpp:4207
 msgid "Scale mode"
 msgstr "Масштабирование объектов"
 
-#: ../src/widgets/toolbox.cpp:4181
+#: ../src/widgets/toolbox.cpp:4208
 msgid "Shrink objects, with Shift enlarge"
 msgstr "Уменьшать объекты, с Shift — увеличивать"
 
-#: ../src/widgets/toolbox.cpp:4187
+#: ../src/widgets/toolbox.cpp:4214
 msgid "Rotate mode"
 msgstr "Вращение объектов"
 
-#: ../src/widgets/toolbox.cpp:4188
+#: ../src/widgets/toolbox.cpp:4215
 msgid "Rotate objects, with Shift counterclockwise"
 msgstr "Вращать объекты, с Shift — против часовой стрелки"
 
-#: ../src/widgets/toolbox.cpp:4194
+#: ../src/widgets/toolbox.cpp:4221
 msgid "Duplicate/delete mode"
 msgstr "Дублирование и удаление объектов"
 
-#: ../src/widgets/toolbox.cpp:4195
+#: ../src/widgets/toolbox.cpp:4222
 msgid "Duplicate objects, with Shift delete"
 msgstr "Дублировать объекты, с Shift — удалять"
 
-#: ../src/widgets/toolbox.cpp:4201
+#: ../src/widgets/toolbox.cpp:4228
 msgid "Push mode"
 msgstr "Толкание контуров"
 
-#: ../src/widgets/toolbox.cpp:4202
+#: ../src/widgets/toolbox.cpp:4229
 msgid "Push parts of paths in any direction"
 msgstr "Выталкивать части контуров"
 
-#: ../src/widgets/toolbox.cpp:4208
+#: ../src/widgets/toolbox.cpp:4235
 msgid "Shrink/grow mode"
 msgstr "Сокращение и наращивание объема контуров"
 
-#: ../src/widgets/toolbox.cpp:4209
+#: ../src/widgets/toolbox.cpp:4236
 msgid "Shrink (inset) parts of paths; with Shift grow (outset)"
 msgstr "Сокращать объем контуров (втягивать их), с Shift — наращивать его (раздувать контуры)"
 
-#: ../src/widgets/toolbox.cpp:4215
+#: ../src/widgets/toolbox.cpp:4242
 msgid "Attract/repel mode"
 msgstr "Притяжение и отталкивание контуров"
 
-#: ../src/widgets/toolbox.cpp:4216
+#: ../src/widgets/toolbox.cpp:4243
 msgid "Attract parts of paths towards cursor; with Shift from cursor"
 msgstr "Притягивать части контуров к курсору; с Shift — отталкивать их от курсора"
 
-#: ../src/widgets/toolbox.cpp:4222
+#: ../src/widgets/toolbox.cpp:4249
 msgid "Roughen mode"
 msgstr "Огрубление контуров"
 
-#: ../src/widgets/toolbox.cpp:4223
+#: ../src/widgets/toolbox.cpp:4250
 msgid "Roughen parts of paths"
 msgstr "Огрублять части контуров, рисовать заусенцы"
 
-#: ../src/widgets/toolbox.cpp:4229
+#: ../src/widgets/toolbox.cpp:4256
 msgid "Color paint mode"
 msgstr "Раскрашивание объектов"
 
-#: ../src/widgets/toolbox.cpp:4230
+#: ../src/widgets/toolbox.cpp:4257
 msgid "Paint the tool's color upon selected objects"
 msgstr "Рисовать цветом инструмента по выбранным объектам"
 
-#: ../src/widgets/toolbox.cpp:4236
+#: ../src/widgets/toolbox.cpp:4263
 msgid "Color jitter mode"
 msgstr "Перебор цветов для объектов"
 
-#: ../src/widgets/toolbox.cpp:4237
+#: ../src/widgets/toolbox.cpp:4264
 msgid "Jitter the colors of selected objects"
 msgstr "Перебирать цвета выделенных объектов"
 
-#: ../src/widgets/toolbox.cpp:4243
+#: ../src/widgets/toolbox.cpp:4270
 msgid "Blur mode"
 msgstr "Размывание"
 
-#: ../src/widgets/toolbox.cpp:4244
+#: ../src/widgets/toolbox.cpp:4271
 msgid "Blur selected objects more; with Shift, blur less"
 msgstr "Размывать объекты, с Shift — уменьшать размытость"
 
-#: ../src/widgets/toolbox.cpp:4271
+#: ../src/widgets/toolbox.cpp:4298
 msgid "Channels:"
 msgstr "Каналы:"
 
-#: ../src/widgets/toolbox.cpp:4282
+#: ../src/widgets/toolbox.cpp:4309
 msgid "In color mode, act on objects' hue"
 msgstr "В режиме изменения цвета влиять на тон объектов"
 
 #. TRANSLATORS:  "H" here stands for hue
-#: ../src/widgets/toolbox.cpp:4286
+#: ../src/widgets/toolbox.cpp:4313
 msgid "H"
 msgstr "H"
 
-#: ../src/widgets/toolbox.cpp:4297
+#: ../src/widgets/toolbox.cpp:4324
 msgid "In color mode, act on objects' saturation"
 msgstr "В режиме изменения цвета влиять на насыщенность объектов"
 
 #. TRANSLATORS: "S" here stands for Saturation
-#: ../src/widgets/toolbox.cpp:4301
+#: ../src/widgets/toolbox.cpp:4328
 msgid "S"
 msgstr "S"
 
-#: ../src/widgets/toolbox.cpp:4312
+#: ../src/widgets/toolbox.cpp:4339
 msgid "In color mode, act on objects' lightness"
 msgstr "В режиме изменения цвета влиять на яркость объектов"
 
 #. TRANSLATORS: "L" here stands for Lightness
-#: ../src/widgets/toolbox.cpp:4316
+#: ../src/widgets/toolbox.cpp:4343
 msgid "L"
 msgstr "L"
 
-#: ../src/widgets/toolbox.cpp:4327
+#: ../src/widgets/toolbox.cpp:4354
 msgid "In color mode, act on objects' opacity"
 msgstr "В режиме изменения цвета влиять на непрозрачность объектов"
 
 #. TRANSLATORS: "O" here stands for Opacity
-#: ../src/widgets/toolbox.cpp:4331
+#: ../src/widgets/toolbox.cpp:4358
 msgid "O"
 msgstr "O"
 
 #. Fidelity
-#: ../src/widgets/toolbox.cpp:4341
+#: ../src/widgets/toolbox.cpp:4368
 msgid "(rough, simplified)"
 msgstr "(грубо, упрощённо)"
 
-#: ../src/widgets/toolbox.cpp:4341
+#: ../src/widgets/toolbox.cpp:4368
 msgid "(fine, but many nodes)"
 msgstr "(точно, но много узлов)"
 
-#: ../src/widgets/toolbox.cpp:4344
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Fidelity"
 msgstr "Точность"
 
-#: ../src/widgets/toolbox.cpp:4344
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Fidelity:"
 msgstr "Точность:"
 
-#: ../src/widgets/toolbox.cpp:4345
+#: ../src/widgets/toolbox.cpp:4372
 msgid "Low fidelity simplifies paths; high fidelity preserves path features but may generate a lot of new nodes"
 msgstr "Низкая точность упрощает контуры; высокая точность сохраняет общую форму неизменной части контура, но добавляет новые узлы"
 
-#: ../src/widgets/toolbox.cpp:4362
-#: ../src/widgets/toolbox.cpp:4863
+#: ../src/widgets/toolbox.cpp:4389
+#: ../src/widgets/toolbox.cpp:4582
+#: ../src/widgets/toolbox.cpp:5082
 msgid "Pressure"
 msgstr "Нажим"
 
-#: ../src/widgets/toolbox.cpp:4363
+#: ../src/widgets/toolbox.cpp:4390
 msgid "Use the pressure of the input device to alter the force of tweak action"
 msgstr "Нажим устройства ввода изменяет силу корректирующего действия"
 
-#: ../src/widgets/toolbox.cpp:4543
+#. Width
+#: ../src/widgets/toolbox.cpp:4472
+#, fuzzy
+msgid "(narrow spray)"
+msgstr "Еще уже"
+
+#: ../src/widgets/toolbox.cpp:4472
+#, fuzzy
+msgid "(broad spray)"
+msgstr "(широкий штрих)"
+
+#: ../src/widgets/toolbox.cpp:4475
+#, fuzzy
+msgid "The width of the spray area (relative to the visible canvas area)"
+msgstr "Ширина области коррекции (относительно видимой области холста)"
+
+#. Mean
+#: ../src/widgets/toolbox.cpp:4488
+#, fuzzy
+msgid "(minimum mean)"
+msgstr "(минимальная)"
+
+#: ../src/widgets/toolbox.cpp:4488
+#, fuzzy
+msgid "(maximum mean)"
+msgstr "(максимальная инерция)"
+
+#: ../src/widgets/toolbox.cpp:4491
+#: ../share/extensions/polyhedron_3d.inx.h:25
+msgid "Mean"
+msgstr "Средняя величина"
+
+#: ../src/widgets/toolbox.cpp:4491
+#, fuzzy
+msgid "Mean:"
+msgstr "Средняя величина"
+
+#: ../src/widgets/toolbox.cpp:4491
+#, fuzzy
+msgid "The mean of the spray action"
+msgstr "Сила действия инструмента коррекции"
+
+#. Standard_deviation
+#: ../src/widgets/toolbox.cpp:4504
+#, fuzzy
+msgid "(minimum standard_deviation)"
+msgstr "Стандартное отклонение:"
+
+#: ../src/widgets/toolbox.cpp:4504
+#, fuzzy
+msgid "(maximum standard_deviation)"
+msgstr "Стандартное отклонение:"
+
+#: ../src/widgets/toolbox.cpp:4507
+#, fuzzy
+msgid "SD"
+msgstr "S"
+
+#: ../src/widgets/toolbox.cpp:4507
+#, fuzzy
+msgid "SD:"
+msgstr "ID"
+
+#: ../src/widgets/toolbox.cpp:4507
+#, fuzzy
+msgid "The standard deviation of the spray action"
+msgstr "Стандартное отклонение при размывании, выражается в процентах"
+
+#: ../src/widgets/toolbox.cpp:4526
+#, fuzzy
+msgid "Spray copies of the initial selection"
+msgstr "Прилипать к пересечениям контуров"
+
+#: ../src/widgets/toolbox.cpp:4533
+#, fuzzy
+msgid "Spray clones of the initial selection"
+msgstr "Создать узор из клонов выделенного объекта"
+
+#: ../src/widgets/toolbox.cpp:4539
+#, fuzzy
+msgid "Spray single path"
+msgstr "Удалять существующие объекты"
+
+#: ../src/widgets/toolbox.cpp:4540
+msgid "Spray objects in a single path"
+msgstr ""
+
+#. Population
+#: ../src/widgets/toolbox.cpp:4564
+msgid "(low population)"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4564
+#, fuzzy
+msgid "(high population)"
+msgstr "(легкое отклонение)"
+
+#: ../src/widgets/toolbox.cpp:4567
+msgid "Population"
+msgstr "Заполнение"
+
+#: ../src/widgets/toolbox.cpp:4567
+msgid "Population:"
+msgstr "Заполнение:"
+
+#: ../src/widgets/toolbox.cpp:4568
+msgid "This setting adjusts the number of items sprayed"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:4583
+#, fuzzy
+msgid "Use the pressure of the input device to alter the force of spray action"
+msgstr "Нажим устройства ввода изменяет силу корректирующего действия"
+
+#: ../src/widgets/toolbox.cpp:4762
 msgid "No preset"
 msgstr "Не выбрана"
 
-#: ../src/widgets/toolbox.cpp:4561
+#: ../src/widgets/toolbox.cpp:4780
 msgid "Save..."
 msgstr "Сохранить..."
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4712
-#: ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4931
+#: ../src/widgets/toolbox.cpp:5950
 msgid "(hairline)"
 msgstr "(волосок)"
 
-#: ../src/widgets/toolbox.cpp:4712
-#: ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4931
+#: ../src/widgets/toolbox.cpp:5950
 msgid "(broad stroke)"
 msgstr "(широкий штрих)"
 
-#: ../src/widgets/toolbox.cpp:4715
-#: ../src/widgets/toolbox.cpp:5734
+#: ../src/widgets/toolbox.cpp:4934
+#: ../src/widgets/toolbox.cpp:5953
 msgid "Pen Width"
 msgstr "Толщина пера"
 
-#: ../src/widgets/toolbox.cpp:4716
+#: ../src/widgets/toolbox.cpp:4935
 msgid "The width of the calligraphic pen (relative to the visible canvas area)"
 msgstr "Ширина каллиграфического пера (относительно видимой области холста)"
 
 #. Thinning
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(speed blows up stroke)"
 msgstr "(скорость утолщает штрих)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(slight widening)"
 msgstr "(легкое утолщение)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(constant width)"
 msgstr "(постоянная ширина)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(slight thinning, default)"
 msgstr "(легкое утоньшение, по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(speed deflates stroke)"
 msgstr "(скорость обнуляет штрих)"
 
-#: ../src/widgets/toolbox.cpp:4732
+#: ../src/widgets/toolbox.cpp:4951
 msgid "Stroke Thinning"
 msgstr "Утоньшение штриха"
 
-#: ../src/widgets/toolbox.cpp:4732
+#: ../src/widgets/toolbox.cpp:4951
 msgid "Thinning:"
 msgstr "Сужение:"
 
-#: ../src/widgets/toolbox.cpp:4733
+#: ../src/widgets/toolbox.cpp:4952
 msgid "How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 makes them broader, 0 makes width independent of velocity)"
 msgstr "Как сильно скорость сужает штрих (> 0: быстрые штрихи уже, < 0: быстрые штрихи шире; при 0 ширина штриха не зависит от скорости)"
 
 #. Angle
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(left edge up)"
 msgstr "(левый угол вверху)"
 
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(horizontal)"
 msgstr "(перо горизонтально)"
 
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(right edge up)"
 msgstr "(правый угол вверху)"
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4967
 msgid "Pen Angle"
 msgstr "Угол пера"
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4967
 msgid "Angle:"
 msgstr "Угол:"
 
-#: ../src/widgets/toolbox.cpp:4749
+#: ../src/widgets/toolbox.cpp:4968
 msgid "The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if fixation = 0)"
 msgstr "Угол пера (в градусах; 0 = горизонтально; при нулевой фиксации значения не имеет)"
 
 #. Fixation
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(perpendicular to stroke, \"brush\")"
 msgstr "(перпендикулярно штриху)"
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(almost fixed, default)"
 msgstr "(почти полная, значение по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(fixed by Angle, \"pen\")"
 msgstr "(угол зафиксирован)"
 
-#: ../src/widgets/toolbox.cpp:4766
+#: ../src/widgets/toolbox.cpp:4985
 msgid "Fixation"
 msgstr "Фиксация"
 
-#: ../src/widgets/toolbox.cpp:4766
+#: ../src/widgets/toolbox.cpp:4985
 msgid "Fixation:"
 msgstr "Фиксация:"
 
-#: ../src/widgets/toolbox.cpp:4767
+#: ../src/widgets/toolbox.cpp:4986
 msgid "Angle behavior (0 = nib always perpendicular to stroke direction, 100 = fixed angle)"
 msgstr "Фиксация угла (0 = перо всегда перпендикулярно направлению штриха, 100 = угол не меняется)"
 
 #. Cap Rounding
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(blunt caps, default)"
 msgstr "(плоские концы, значение по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(slightly bulging)"
 msgstr "(слегка закругленные)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(approximately round)"
 msgstr "(примерно круглые)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(long protruding caps)"
 msgstr "(округлые, далеко выдающиеся концы)"
 
-#: ../src/widgets/toolbox.cpp:4783
+#: ../src/widgets/toolbox.cpp:5002
 msgid "Cap rounding"
 msgstr "Закругление концов"
 
-#: ../src/widgets/toolbox.cpp:4783
+#: ../src/widgets/toolbox.cpp:5002
 msgid "Caps:"
 msgstr "Концы:"
 
-#: ../src/widgets/toolbox.cpp:4784
+#: ../src/widgets/toolbox.cpp:5003
 msgid "Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = round caps)"
 msgstr "Увеличение значения дает далеко выдающиеся концы (0=без концов, 1=округлые концы)"
 
 #. Tremor
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(smooth line)"
 msgstr "(гладкая линия)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(slight tremor)"
 msgstr "(легкое дрожание)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(noticeable tremor)"
 msgstr "(заметное дрожание)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(maximum tremor)"
 msgstr "(максимальное дрожание)"
 
-#: ../src/widgets/toolbox.cpp:4799
+#: ../src/widgets/toolbox.cpp:5018
 msgid "Stroke Tremor"
 msgstr "Дрожание штриха"
 
-#: ../src/widgets/toolbox.cpp:4799
+#: ../src/widgets/toolbox.cpp:5018
 msgid "Tremor:"
 msgstr "Дрожание:"
 
-#: ../src/widgets/toolbox.cpp:4800
+#: ../src/widgets/toolbox.cpp:5019
 msgid "Increase to make strokes rugged and trembling"
 msgstr "Увеличение значения делает штрихи дрожащими"
 
 #. Wiggle
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(no wiggle)"
 msgstr "(без виляния)"
 
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(slight deviation)"
 msgstr "(легкое отклонение)"
 
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(wild waves and curls)"
 msgstr "(сумасшедшее вихляние)"
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:5036
 msgid "Pen Wiggle"
 msgstr "Виляние пером"
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:5036
 msgid "Wiggle:"
 msgstr "Виляние:"
 
-#: ../src/widgets/toolbox.cpp:4818
+#: ../src/widgets/toolbox.cpp:5037
 msgid "Increase to make the pen waver and wiggle"
 msgstr "Увеличение значения делает штрихи виляющими"
 
 #. Mass
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(no inertia)"
 msgstr "(без инерции)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(slight smoothing, default)"
 msgstr "(легкое отставание, по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(noticeable lagging)"
 msgstr "(заметное отставание)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(maximum inertia)"
 msgstr "(максимальная инерция)"
 
-#: ../src/widgets/toolbox.cpp:4834
+#: ../src/widgets/toolbox.cpp:5053
 msgid "Pen Mass"
 msgstr "Масса пера"
 
-#: ../src/widgets/toolbox.cpp:4834
+#: ../src/widgets/toolbox.cpp:5053
 msgid "Mass:"
 msgstr "Масса:"
 
-#: ../src/widgets/toolbox.cpp:4835
+#: ../src/widgets/toolbox.cpp:5054
 msgid "Increase to make the pen drag behind, as if slowed by inertia"
 msgstr "Увеличение значения затормаживает перо, словно оно очень инертно"
 
-#: ../src/widgets/toolbox.cpp:4850
+#: ../src/widgets/toolbox.cpp:5069
 msgid "Trace Background"
 msgstr "Трассировать фон"
 
-#: ../src/widgets/toolbox.cpp:4851
+#: ../src/widgets/toolbox.cpp:5070
 msgid "Trace the lightness of the background by the width of the pen (white - minimum width, black - maximum width)"
 msgstr "Трассировать освещенность фона толщиной линии пера (белый — минимальная толщина, черный — максимальная толщина)"
 
-#: ../src/widgets/toolbox.cpp:4864
+#: ../src/widgets/toolbox.cpp:5083
 msgid "Use the pressure of the input device to alter the width of the pen"
 msgstr "Нажим (pressure) устройства ввода изменяет ширину пера"
 
-#: ../src/widgets/toolbox.cpp:4876
+#: ../src/widgets/toolbox.cpp:5095
 msgid "Tilt"
 msgstr "Наклон"
 
-#: ../src/widgets/toolbox.cpp:4877
+#: ../src/widgets/toolbox.cpp:5096
 msgid "Use the tilt of the input device to alter the angle of the pen's nib"
 msgstr "Наклон (tilt) устройства ввода изменяет угол пера"
 
-#: ../src/widgets/toolbox.cpp:4890
+#: ../src/widgets/toolbox.cpp:5109
 msgid "Choose a preset"
 msgstr "Выберите предустановку"
 
-#: ../src/widgets/toolbox.cpp:4978
+#: ../src/widgets/toolbox.cpp:5197
 msgid "Arc: Change start/end"
 msgstr "Дуга: изменить начало/конец"
 
-#: ../src/widgets/toolbox.cpp:5042
+#: ../src/widgets/toolbox.cpp:5261
 msgid "Arc: Change open/closed"
 msgstr "Дуга: Изменить открытость/закрытость"
 
-#: ../src/widgets/toolbox.cpp:5168
+#: ../src/widgets/toolbox.cpp:5387
 msgid "Start:"
 msgstr "Начало:"
 
-#: ../src/widgets/toolbox.cpp:5169
+#: ../src/widgets/toolbox.cpp:5388
 msgid "The angle (in degrees) from the horizontal to the arc's start point"
 msgstr "Угол (в градусах) от горизонтали до начальной точки дуги"
 
-#: ../src/widgets/toolbox.cpp:5181
+#: ../src/widgets/toolbox.cpp:5400
 msgid "End:"
 msgstr "Конец:"
 
-#: ../src/widgets/toolbox.cpp:5182
+#: ../src/widgets/toolbox.cpp:5401
 msgid "The angle (in degrees) from the horizontal to the arc's end point"
 msgstr "Угол (в градусах) от горизонтали до конечной точки дуги"
 
-#: ../src/widgets/toolbox.cpp:5198
+#: ../src/widgets/toolbox.cpp:5417
 msgid "Closed arc"
 msgstr "Закрытая дуга"
 
-#: ../src/widgets/toolbox.cpp:5199
+#: ../src/widgets/toolbox.cpp:5418
 msgid "Switch to segment (closed shape with two radii)"
 msgstr "Переключиться на сегмент (закрытый эллипс с двумя радиусами)"
 
-#: ../src/widgets/toolbox.cpp:5205
+#: ../src/widgets/toolbox.cpp:5424
 msgid "Open Arc"
 msgstr "Открытая дуга"
 
-#: ../src/widgets/toolbox.cpp:5206
+#: ../src/widgets/toolbox.cpp:5425
 msgid "Switch to arc (unclosed shape)"
 msgstr "Переключиться на дугу (незакрытый эллипс)"
 
-#: ../src/widgets/toolbox.cpp:5229
+#: ../src/widgets/toolbox.cpp:5448
 msgid "Make whole"
 msgstr "Сделать целым"
 
-#: ../src/widgets/toolbox.cpp:5230
+#: ../src/widgets/toolbox.cpp:5449
 msgid "Make the shape a whole ellipse, not arc or segment"
 msgstr "Сделать фигуру целым эллипсом, а не дугой или сегментом"
 
-#: ../src/widgets/toolbox.cpp:5306
+#: ../src/widgets/toolbox.cpp:5525
 msgid "Pick opacity"
 msgstr "Снять непрозрачность"
 
-#: ../src/widgets/toolbox.cpp:5307
+#: ../src/widgets/toolbox.cpp:5526
 msgid "Pick both the color and the alpha (transparency) under cursor; otherwise, pick only the visible color premultiplied by alpha"
 msgstr "Снимать значение альфа-канала (полупрозрачности) под курсором; если отключено, снимается только видимый цвет"
 
-#: ../src/widgets/toolbox.cpp:5310
+#: ../src/widgets/toolbox.cpp:5529
 msgid "Pick"
 msgstr "Снять"
 
-#: ../src/widgets/toolbox.cpp:5319
+#: ../src/widgets/toolbox.cpp:5538
 msgid "Assign opacity"
 msgstr "Назначить непрозрачность"
 
-#: ../src/widgets/toolbox.cpp:5320
+#: ../src/widgets/toolbox.cpp:5539
 msgid "If alpha was picked, assign it to selection as fill or stroke transparency"
 msgstr "Если полупрозрачность снята, назначать её заливке или обводке в выделении"
 
-#: ../src/widgets/toolbox.cpp:5323
+#: ../src/widgets/toolbox.cpp:5542
 msgid "Assign"
 msgstr "Назначить"
 
-#: ../src/widgets/toolbox.cpp:5509
+#: ../src/widgets/toolbox.cpp:5728
 msgid "Closed"
 msgstr "Закрытый"
 
-#: ../src/widgets/toolbox.cpp:5511
+#: ../src/widgets/toolbox.cpp:5730
 msgid "Open start"
 msgstr "С открытым началом"
 
-#: ../src/widgets/toolbox.cpp:5513
+#: ../src/widgets/toolbox.cpp:5732
 msgid "Open end"
 msgstr "С открытым концом"
 
-#: ../src/widgets/toolbox.cpp:5515
+#: ../src/widgets/toolbox.cpp:5734
 msgid "Open both"
 msgstr "Открыт с обеих сторон"
 
-#: ../src/widgets/toolbox.cpp:5574
+#: ../src/widgets/toolbox.cpp:5793
 msgid "All inactive"
 msgstr "Все неактивны"
 
-#: ../src/widgets/toolbox.cpp:5575
+#: ../src/widgets/toolbox.cpp:5794
 msgid "No geometric tool is active"
 msgstr "Ни один инструмент создания геометрических конструкций не выбран"
 
-#: ../src/widgets/toolbox.cpp:5608
+#: ../src/widgets/toolbox.cpp:5827
 msgid "Show limiting bounding box"
 msgstr "Показывать ограничивающую площадку (BB)"
 
-#: ../src/widgets/toolbox.cpp:5609
+#: ../src/widgets/toolbox.cpp:5828
 msgid "Show bounding box (used to cut infinite lines)"
 msgstr "Показывать площадку (для обрезания бесконечных линий)"
 
-#: ../src/widgets/toolbox.cpp:5620
+#: ../src/widgets/toolbox.cpp:5839
 msgid "Get limiting bounding box from selection"
 msgstr "Делать ограничивающую площадку (BB) из выделения"
 
-#: ../src/widgets/toolbox.cpp:5621
+#: ../src/widgets/toolbox.cpp:5840
 msgid "Set limiting bounding box (used to cut infinite lines) to the bounding box of current selection"
 msgstr "Создание и редактирование масштабируемой векторной графики в формате SVG"
 
-#: ../src/widgets/toolbox.cpp:5633
+#: ../src/widgets/toolbox.cpp:5852
 msgid "Choose a line segment type"
 msgstr "Выберите тип сегмента линии"
 
-#: ../src/widgets/toolbox.cpp:5649
+#: ../src/widgets/toolbox.cpp:5868
 msgid "Display measuring info"
 msgstr "Показывать данные измерений"
 
-#: ../src/widgets/toolbox.cpp:5650
+#: ../src/widgets/toolbox.cpp:5869
 msgid "Display measuring info for selected items"
 msgstr "Показывать измерения выбранных объектов"
 
-#: ../src/widgets/toolbox.cpp:5670
+#: ../src/widgets/toolbox.cpp:5889
 msgid "Open LPE dialog"
 msgstr "Открыть диалог LPE"
 
-#: ../src/widgets/toolbox.cpp:5671
+#: ../src/widgets/toolbox.cpp:5890
 msgid "Open LPE dialog (to adapt parameters numerically)"
 msgstr "Открыть диалог динамических контурных эффектов для ручного ввода параметров"
 
-#: ../src/widgets/toolbox.cpp:5735
+#: ../src/widgets/toolbox.cpp:5954
 msgid "The width of the eraser pen (relative to the visible canvas area)"
 msgstr "Толщина пера ластика (относительно видимой области холста)"
 
-#: ../src/widgets/toolbox.cpp:5753
+#: ../src/widgets/toolbox.cpp:5972
 msgid "Delete objects touched by the eraser"
 msgstr "Удалять объекты, которых коснулся ластик"
 
-#: ../src/widgets/toolbox.cpp:5759
+#: ../src/widgets/toolbox.cpp:5978
 msgid "Cut"
 msgstr "Вырезать"
 
-#: ../src/widgets/toolbox.cpp:5760
+#: ../src/widgets/toolbox.cpp:5979
 msgid "Cut out from objects"
 msgstr "Вырезать из объектов"
 
-#: ../src/widgets/toolbox.cpp:6104
+#: ../src/widgets/toolbox.cpp:6323
 msgid "Text: Change font family"
 msgstr "Текст: сменить гарнитуру"
 
-#: ../src/widgets/toolbox.cpp:6174
+#: ../src/widgets/toolbox.cpp:6393
 msgid "Text: Change alignment"
 msgstr "Текст: сменить выключку"
 
-#: ../src/widgets/toolbox.cpp:6278
+#: ../src/widgets/toolbox.cpp:6497
 msgid "Text: Change font style"
 msgstr "Текст: сменить начертание"
 
-#: ../src/widgets/toolbox.cpp:6325
+#: ../src/widgets/toolbox.cpp:6544
 msgid "Text: Change orientation"
 msgstr "Текст: сменить ориентацию"
 
-#: ../src/widgets/toolbox.cpp:6439
+#: ../src/widgets/toolbox.cpp:6658
 msgid "Text: Change font size"
 msgstr "Текст: сменить кегль"
 
-#: ../src/widgets/toolbox.cpp:6650
+#: ../src/widgets/toolbox.cpp:6877
 msgid "Select font family (Alt+X to access)"
 msgstr "Выбрать гарнитуру (также доступно по Alt+X)"
 
-#: ../src/widgets/toolbox.cpp:6687
+#: ../src/widgets/toolbox.cpp:6914
 msgid "This font is currently not installed on your system. Inkscape will use the default font instead."
 msgstr "Этот шрифт сейчас отсутствует в системе. Вместо него Inkscape использует шрифт по умолчанию."
 
-#: ../src/widgets/toolbox.cpp:6723
+#: ../src/widgets/toolbox.cpp:6950
 msgid "Align left"
 msgstr "Выключка влево"
 
-#: ../src/widgets/toolbox.cpp:6745
+#: ../src/widgets/toolbox.cpp:6972
 msgid "Align right"
 msgstr "Выключка вправо"
 
-#: ../src/widgets/toolbox.cpp:6756
+#: ../src/widgets/toolbox.cpp:6983
 msgid "Justify"
 msgstr "Выключка по ширине"
 
-#: ../src/widgets/toolbox.cpp:6771
+#: ../src/widgets/toolbox.cpp:6998
 msgid "Bold"
 msgstr "Полужирное"
 
-#: ../src/widgets/toolbox.cpp:6782
+#: ../src/widgets/toolbox.cpp:7009
 msgid "Italic"
 msgstr "Наклонное"
 
-#: ../src/widgets/toolbox.cpp:6913
+#: ../src/widgets/toolbox.cpp:7148
+msgid "Set connector type: orthogonal"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7148
+msgid "Set connector type: polyline"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7198
+#, fuzzy
+msgid "Change connector curvature"
+msgstr "Смена интервала соед. линии"
+
+#: ../src/widgets/toolbox.cpp:7247
 msgid "Change connector spacing"
 msgstr "Смена интервала соед. линии"
 
-#: ../src/widgets/toolbox.cpp:6996
+#: ../src/widgets/toolbox.cpp:7361
+#, fuzzy
+msgid "EditMode"
+msgstr "Режим краёв:"
+
+#: ../src/widgets/toolbox.cpp:7362
+msgid "Switch between connection point editing and connector drawing mode"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7376
 msgid "Avoid"
 msgstr "Избегать"
 
-#: ../src/widgets/toolbox.cpp:7006
+#: ../src/widgets/toolbox.cpp:7386
 msgid "Ignore"
 msgstr "Игнорировать"
 
-#: ../src/widgets/toolbox.cpp:7018
+#: ../src/widgets/toolbox.cpp:7397
+msgid "Orthogonal"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7398
+msgid "Make connector orthogonal or polyline"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7412
+msgid "Connector Curvature"
+msgstr "Кривизна соединительных линий"
+
+#: ../src/widgets/toolbox.cpp:7412
+msgid "Curvature:"
+msgstr "Кривизна:"
+
+#: ../src/widgets/toolbox.cpp:7413
+msgid "The amount of connectors curvature"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7423
 msgid "Connector Spacing"
 msgstr "Интервал линии соединения"
 
-#: ../src/widgets/toolbox.cpp:7018
+#: ../src/widgets/toolbox.cpp:7423
 msgid "Spacing:"
 msgstr "Интервал:"
 
-#: ../src/widgets/toolbox.cpp:7019
+#: ../src/widgets/toolbox.cpp:7424
 msgid "The amount of space left around objects by auto-routing connectors"
 msgstr "Оставшееся пространство вокруг объектов при автосоединении"
 
-#: ../src/widgets/toolbox.cpp:7030
+#: ../src/widgets/toolbox.cpp:7435
 msgid "Graph"
 msgstr "Граф"
 
-#: ../src/widgets/toolbox.cpp:7040
+#: ../src/widgets/toolbox.cpp:7445
 msgid "Connector Length"
 msgstr "Длина линии соединения"
 
-#: ../src/widgets/toolbox.cpp:7040
+#: ../src/widgets/toolbox.cpp:7445
 msgid "Length:"
 msgstr "Длина:"
 
-#: ../src/widgets/toolbox.cpp:7041
+#: ../src/widgets/toolbox.cpp:7446
 msgid "Ideal length for connectors when layout is applied"
 msgstr "Идеальная длина при использовании оптимизации внешнего вида линий соединения"
 
-#: ../src/widgets/toolbox.cpp:7053
+#: ../src/widgets/toolbox.cpp:7458
 msgid "Downwards"
 msgstr "Вниз"
 
-#: ../src/widgets/toolbox.cpp:7054
+#: ../src/widgets/toolbox.cpp:7459
 msgid "Make connectors with end-markers (arrows) point downwards"
 msgstr "Линии соединения со стрелками указывают вниз"
 
-#: ../src/widgets/toolbox.cpp:7069
+#: ../src/widgets/toolbox.cpp:7476
 msgid "Do not allow overlapping shapes"
 msgstr "Не допускать перекрытия фигур"
 
-#: ../src/widgets/toolbox.cpp:7172
+#: ../src/widgets/toolbox.cpp:7491
+msgid "New connection point"
+msgstr "Создать точку соединения"
+
+#: ../src/widgets/toolbox.cpp:7492
+msgid "Add a new connection point to the currently selected item"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7503
+msgid "Remove connection point"
+msgstr "Удалить точку соединения"
+
+#: ../src/widgets/toolbox.cpp:7504
+msgid "Remove the currently selected connection point"
+msgstr ""
+
+#: ../src/widgets/toolbox.cpp:7604
 msgid "Fill by"
 msgstr "Чем залить"
 
-#: ../src/widgets/toolbox.cpp:7173
+#: ../src/widgets/toolbox.cpp:7605
 msgid "Fill by:"
 msgstr "Чем залить:"
 
-#: ../src/widgets/toolbox.cpp:7185
+#: ../src/widgets/toolbox.cpp:7617
 msgid "Fill Threshold"
 msgstr "Порог заливки"
 
-#: ../src/widgets/toolbox.cpp:7186
+#: ../src/widgets/toolbox.cpp:7618
 msgid "The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"
 msgstr "Максимально допустимая разница между щелкнутым пикселом и соседними пикселами, попадающими в заливку"
 
-#: ../src/widgets/toolbox.cpp:7211
+#: ../src/widgets/toolbox.cpp:7643
 msgid "Grow/shrink by"
 msgstr "Увеличить/уменьшить на"
 
-#: ../src/widgets/toolbox.cpp:7211
+#: ../src/widgets/toolbox.cpp:7643
 msgid "Grow/shrink by:"
 msgstr "Увеличить/уменьшить на:"
 
-#: ../src/widgets/toolbox.cpp:7212
+#: ../src/widgets/toolbox.cpp:7644
 msgid "The amount to grow (positive) or shrink (negative) the created fill path"
 msgstr "Насколько увеличить (положительное число) или уменьшить (отрицательное число) создаваемый контур с заливкой"
 
-#: ../src/widgets/toolbox.cpp:7237
+#: ../src/widgets/toolbox.cpp:7669
 msgid "Close gaps"
 msgstr "Закрыть интервалы"
 
-#: ../src/widgets/toolbox.cpp:7238
+#: ../src/widgets/toolbox.cpp:7670
 msgid "Close gaps:"
 msgstr "Закрыть интервалы:"
 
-#: ../src/widgets/toolbox.cpp:7250
+#: ../src/widgets/toolbox.cpp:7682
 msgid "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Сбросить параметры заливки к значениям по умолчанию (параметры по умолчанию можно изменить через диалог настройки Inkscape)"
 
@@ -19618,11 +20003,11 @@ msgstr "Расширению export_gpl.py нужен PyXML.  Скачайте 
 msgid "Unable to find image data."
 msgstr "Не удалось найти растровые данные."
 
-#: ../share/extensions/inkex.py:66
+#: ../share/extensions/inkex.py:67
 msgid "The fantastic lxml wrapper for libxml2 is required by inkex.py and therefore this extension. Please download and install the latest version from http://cheeseshop.python.org/pypi/lxml/, or install it through your package manager by a command like: sudo apt-get install python-lxml"
 msgstr "Потрясающая обертка lxml для libxml2 требуется для inkex.py, а значит и для этого расширения. Скачайте и установить самую свежую версию с http://cheeseshop.python.org/pypi/lxml/, либо установите ее через пакетный менеджер командой наподобие: sudo apt-get install python-lxml"
 
-#: ../share/extensions/inkex.py:222
+#: ../share/extensions/inkex.py:223
 #, python-format
 msgid "No matching node for expression: %s"
 msgstr "Нет узла, подходящего условиям запроса: %s"
@@ -20346,10 +20731,6 @@ msgstr "Примечание: расширение файла добавляет
 msgid "Path to save image"
 msgstr "Путь для сохраняемого изображения"
 
-#: ../share/extensions/extrude.inx.h:1
-msgid "Extrude"
-msgstr "Выдавливание"
-
 #: ../share/extensions/extrude.inx.h:3
 msgid "Lines"
 msgstr "Линии"
@@ -21419,18 +21800,6 @@ msgstr "Свет по Y"
 msgid "Load from file"
 msgstr "Загрузить из файла"
 
-#: ../share/extensions/polyhedron_3d.inx.h:24
-msgid "Maximum"
-msgstr "Максимум"
-
-#: ../share/extensions/polyhedron_3d.inx.h:25
-msgid "Mean"
-msgstr "Средняя величина"
-
-#: ../share/extensions/polyhedron_3d.inx.h:26
-msgid "Minimum"
-msgstr "Минимум"
-
 #: ../share/extensions/polyhedron_3d.inx.h:27
 msgid "Model file"
 msgstr "Файл модели"
@@ -21743,17 +22112,83 @@ msgid "Strength (%):"
 msgstr "Сила (%):"
 
 #: ../share/extensions/scour.inx.h:1
+#, fuzzy
+msgid "Embed rasters"
+msgstr "Встроить все растровые изображения"
+
+#: ../share/extensions/scour.inx.h:2
+#, fuzzy
+msgid "Enable id stripping"
+msgstr "Включить прилипание"
+
+#: ../share/extensions/scour.inx.h:3
+msgid "Group collapsing"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:5
+#, fuzzy
+msgid "Indent"
+msgstr "Врезка"
+
+#: ../share/extensions/scour.inx.h:6
+msgid "Keep editor data"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:8
 msgid "Optimized SVG (*.svg)"
 msgstr "Оптимизированный SVG (*.svg)"
 
-#: ../share/extensions/scour.inx.h:2
+#: ../share/extensions/scour.inx.h:9
 msgid "Optimized SVG Output"
 msgstr "Экспорт в оптимизированный по размеру файла SVG"
 
-#: ../share/extensions/scour.inx.h:3
+#: ../share/extensions/scour.inx.h:11
 msgid "Scalable Vector Graphics"
 msgstr "Scalable Vector Graphics"
 
+#: ../share/extensions/scour.inx.h:12
+#, fuzzy
+msgid "Set precision"
+msgstr "Точность"
+
+#: ../share/extensions/scour.inx.h:13
+#, fuzzy
+msgid "Simplify colors"
+msgstr "Упрощение контура"
+
+#: ../share/extensions/scour.inx.h:14
+#, fuzzy
+msgid "Space"
+msgstr "Пятно"
+
+#: ../share/extensions/scour.inx.h:15
+msgid "Strip xml prolog"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:16
+#, fuzzy
+msgid "Style to xml"
+msgstr "_Стиль: "
+
+#: ../share/extensions/scour.inx.h:17
+#, fuzzy
+msgid "Tab"
+msgstr "Табличная функция"
+
+#: ../share/extensions/scour.inx.h:18
+msgid ""
+"This extension optimize the SVG file according to the following options:\n"
+"    * Simplify colors: convert all colors to #RRGGBB format.\n"
+"    * Style to xml: convert styles into XML attributes.\n"
+"    * Group collapsing: collapse &lt;g&gt; elements.\n"
+"    * Enable id stripping: remove all un-referenced ID attributes.\n"
+"    * Embed rasters: embed rasters as base64-encoded data.\n"
+"    * Keep editor data: don't remove Inkscape, Sodipodi or Adobe Illustrator elements and attributes.\n"
+"    * Strip xml prolog: don't output the xml prolog.\n"
+"    * Set precision: set number of significant digits (default: 5).\n"
+"    * Indent: indentation of the output: none, space, tab (default: space)."
+msgstr ""
+
 #: ../share/extensions/sk1_input.inx.h:1
 msgid "Open files saved in sK1 vector graphics editor"
 msgstr "Открыть файлы формате редактора векторной графики sK1"
@@ -22268,3 +22703,14 @@ msgstr "Импорт файлов Windows Metafile"
 msgid "XAML Input"
 msgstr "Импорт XAML"
 
+#~ msgid "<b>Connection point</b>: click or drag to create a new connector"
+#~ msgstr ""
+#~ "<b>Точка соединения</b>: щелкните мышкой или перетащите для создания "
+#~ "новой соединительной линии"
+#~ msgid "Center objects horizontally"
+#~ msgstr "Центрировать объекты по горизонтали"
+#~ msgid "_Instant Messaging..."
+#~ msgstr "_Коллективное рисование..."
+#~ msgid "Jabber Instant Messaging Client"
+#~ msgstr "Клиент для коллективного рисования"
+
old mode 100644 (file)
new mode 100755 (executable)
index 3343624..9aea127
--- a/po/sk.po
+++ b/po/sk.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inkscape\n"
 "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2009-10-15 12:45+0200\n"
-"PO-Revision-Date: 2009-10-16 10:18+0100\n"
+"POT-Creation-Date: 2009-12-03 13:24+0100\n"
+"PO-Revision-Date: 2009-12-05 01:37+0100\n"
 "Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
 "MIME-Version: 1.0\n"
@@ -346,7 +346,7 @@ msgstr "Zistiť zvislé farebné hrany v objekte"
 
 #. Pencil
 #: ../share/filters/filters.svg.h:29
-#: ../src/ui/dialog/inkscape-preferences.cpp:486 ../src/verbs.cpp:2516
+#: ../src/ui/dialog/inkscape-preferences.cpp:492 ../src/verbs.cpp:2528
 msgid "Pencil"
 msgstr "Ceruzka"
 
@@ -1545,7 +1545,7 @@ msgstr "Vysoko flexibilná hrča s priesvitnosťou"
 
 #: ../share/filters/filters.svg.h:162
 #: ../src/ui/dialog/align-and-distribute.cpp:920
-#: ../src/widgets/desktop-widget.cpp:1577
+#: ../src/widgets/desktop-widget.cpp:1576
 msgid "Drawing"
 msgstr "Kresba"
 
@@ -2255,47 +2255,45 @@ msgstr "Vytvoriť kváder"
 msgid "<b>3D Box</b>"
 msgstr "<b>Kváder</b>"
 
-#: ../src/connector-context.cpp:526
+#: ../src/connector-context.cpp:766
 msgid "Creating new connector"
 msgstr "Tvorba nového konektora"
 
-#: ../src/connector-context.cpp:775
+#: ../src/connector-context.cpp:1157
 msgid "Connector endpoint drag cancelled."
 msgstr "Ťahanie koncového bodu konektora zrušené."
 
-#: ../src/connector-context.cpp:824
+#: ../src/connector-context.cpp:1188
+msgid "Connection point drag cancelled."
+msgstr "Ťahanie prípojného bodu konektora zrušené."
+
+#: ../src/connector-context.cpp:1306
 msgid "Reroute connector"
 msgstr "Presmerovať konektor"
 
-#. Flush pending updates
-#: ../src/connector-context.cpp:988
+#: ../src/connector-context.cpp:1473
 msgid "Create connector"
 msgstr "Vytvoriť konektor"
 
-#: ../src/connector-context.cpp:1012
+#: ../src/connector-context.cpp:1496
 msgid "Finishing connector"
 msgstr "Dokončenie konektora"
 
-#: ../src/connector-context.cpp:1154
-msgid "<b>Connection point</b>: click or drag to create a new connector"
-msgstr ""
-"<b>Bod spojenia</b>: vytvorenie nového konektora kliknutím alebo ťahaním"
-
-#: ../src/connector-context.cpp:1227
+#: ../src/connector-context.cpp:1784
 msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
 msgstr ""
 "<b>Koncový bod konektora</b>: pripojenie k novým tvarom ťahaním alebo "
 "presmerovaním"
 
-#: ../src/connector-context.cpp:1339
+#: ../src/connector-context.cpp:1925
 msgid "Select <b>at least one non-connector object</b>."
 msgstr "Vyberte <b>najmenej jeden objekt, ktorý nie je konektorom</b>."
 
-#: ../src/connector-context.cpp:1344 ../src/widgets/toolbox.cpp:6997
+#: ../src/connector-context.cpp:1930 ../src/widgets/toolbox.cpp:7377
 msgid "Make connectors avoid selected objects"
 msgstr "Nech sa konektory vyhnú zvoleným objektom"
 
-#: ../src/connector-context.cpp:1345 ../src/widgets/toolbox.cpp:7007
+#: ../src/connector-context.cpp:1931 ../src/widgets/toolbox.cpp:7387
 msgid "Make connectors ignore selected objects"
 msgstr "Nech konektory ignorujú zvolené objekty"
 
@@ -2310,11 +2308,11 @@ msgstr ""
 "<b>Aktuálna vrstva je zamknutá</b>. Odomknite ju, aby ste na ňu mohli "
 "kresliť."
 
-#: ../src/desktop.cpp:828
+#: ../src/desktop.cpp:830
 msgid "No previous zoom."
 msgstr "Žiadne predchádzajúce zobrazenie."
 
-#: ../src/desktop.cpp:853
+#: ../src/desktop.cpp:855
 msgid "No next zoom."
 msgstr "Žiadne nasledujúce zobrazenie."
 
@@ -2858,7 +2856,7 @@ msgstr "Vybrať viditeľnú farbu a krytie"
 #: ../src/dialogs/clonetiler.cpp:2615 ../src/dialogs/clonetiler.cpp:2764
 #: ../src/extension/internal/bitmap/opacity.cpp:37
 #: ../src/extension/internal/bitmap/opacity.cpp:39
-#: ../src/widgets/toolbox.cpp:4326 ../share/extensions/interp_att_g.inx.h:12
+#: ../src/widgets/toolbox.cpp:4353 ../share/extensions/interp_att_g.inx.h:12
 msgid "Opacity"
 msgstr "Krytie"
 
@@ -3074,15 +3072,15 @@ msgid ""
 "to zero"
 msgstr "Znulovať zmeny posunutia, mierky, otočenia a farby v dialógu"
 
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2623
+#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2637
 msgid "_Page"
 msgstr "_Stránka"
 
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2627
+#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2641
 msgid "_Drawing"
 msgstr "_Kresba"
 
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2629
+#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2643
 msgid "_Selection"
 msgstr "_Výber"
 
@@ -3126,7 +3124,7 @@ msgstr "_Výška:"
 msgid "<big><b>Bitmap size</b></big>"
 msgstr "<big><b>Veľkosť bitmapy</b></big>"
 
-#: ../src/dialogs/export.cpp:484 ../src/ui/widget/page-sizer.cpp:210
+#: ../src/dialogs/export.cpp:484 ../src/ui/widget/page-sizer.cpp:230
 msgid "_Width:"
 msgstr "_Šírka:"
 
@@ -3138,12 +3136,12 @@ msgstr "bodov na"
 msgid "dp_i"
 msgstr "dp_i"
 
-#: ../src/dialogs/export.cpp:498 ../src/ui/widget/page-sizer.cpp:211
+#: ../src/dialogs/export.cpp:498 ../src/ui/widget/page-sizer.cpp:231
 msgid "_Height:"
 msgstr "_Výška:"
 
-#: ../src/dialogs/export.cpp:509 ../src/ui/dialog/inkscape-preferences.cpp:768
-#: ../src/ui/dialog/inkscape-preferences.cpp:1180
+#: ../src/dialogs/export.cpp:509 ../src/ui/dialog/inkscape-preferences.cpp:779
+#: ../src/ui/dialog/inkscape-preferences.cpp:1191
 msgid "dpi"
 msgstr "dpi"
 
@@ -3309,7 +3307,7 @@ msgid "Search paths, lines, polylines"
 msgstr "Hľadať cesty, čiary, lomené čiary"
 
 #: ../src/dialogs/find.cpp:593 ../src/ui/dialog/find.cpp:75
-#: ../src/widgets/toolbox.cpp:2091
+#: ../src/widgets/toolbox.cpp:2118
 msgid "Paths"
 msgstr "Cesty"
 
@@ -3458,8 +3456,8 @@ msgid ""
 msgstr "Atribút id= (sú povolené iba písmená, číslice a znaky .-_:)"
 
 #. Button for setting the object's id, label, title and description.
-#: ../src/dialogs/item-properties.cpp:143 ../src/verbs.cpp:2486
-#: ../src/verbs.cpp:2492
+#: ../src/dialogs/item-properties.cpp:143 ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2502
 msgid "_Set"
 msgstr "_Nastaviť"
 
@@ -3602,21 +3600,22 @@ msgstr "URL:"
 
 #: ../src/dialogs/object-attributes.cpp:51
 #: ../src/dialogs/object-attributes.cpp:59 ../src/ui/dialog/guides.cpp:43
-#: ../src/ui/view/edit-widget.cpp:1074 ../src/widgets/desktop-widget.cpp:504
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/ui/view/edit-widget.cpp:1080 ../src/widgets/desktop-widget.cpp:504
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X:"
 msgstr "X:"
 
 #: ../src/dialogs/object-attributes.cpp:52
 #: ../src/dialogs/object-attributes.cpp:60 ../src/ui/dialog/guides.cpp:44
-#: ../src/ui/view/edit-widget.cpp:1075 ../src/widgets/desktop-widget.cpp:507
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/ui/view/edit-widget.cpp:1081 ../src/widgets/desktop-widget.cpp:507
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y:"
 msgstr "Y:"
 
 #: ../src/dialogs/object-attributes.cpp:53
-#: ../src/dialogs/object-attributes.cpp:61 ../src/widgets/toolbox.cpp:4124
-#: ../src/widgets/toolbox.cpp:4715 ../src/widgets/toolbox.cpp:5734
+#: ../src/dialogs/object-attributes.cpp:61 ../src/widgets/toolbox.cpp:4151
+#: ../src/widgets/toolbox.cpp:4475 ../src/widgets/toolbox.cpp:4934
+#: ../src/widgets/toolbox.cpp:5953
 msgid "Width:"
 msgstr "Šírka:"
 
@@ -3730,11 +3729,11 @@ msgstr "Zarovnanie čiar doprava"
 msgid "Justify lines"
 msgstr "Zarovnanie čiar"
 
-#: ../src/dialogs/text-edit.cpp:300 ../src/widgets/toolbox.cpp:6804
+#: ../src/dialogs/text-edit.cpp:300 ../src/widgets/toolbox.cpp:7031
 msgid "Horizontal text"
 msgstr "Vodorovný text"
 
-#: ../src/dialogs/text-edit.cpp:314 ../src/widgets/toolbox.cpp:6816
+#: ../src/dialogs/text-edit.cpp:314 ../src/widgets/toolbox.cpp:7043
 msgid "Vertical text"
 msgstr "Zvislý text"
 
@@ -3744,7 +3743,7 @@ msgstr "Riadkovanie:"
 
 #. Text
 #: ../src/dialogs/text-edit.cpp:375 ../src/selection-describer.cpp:69
-#: ../src/ui/dialog/inkscape-preferences.cpp:522 ../src/verbs.cpp:2522
+#: ../src/ui/dialog/inkscape-preferences.cpp:528 ../src/verbs.cpp:2534
 #: ../share/extensions/lorem_ipsum.inx.h:5
 #: ../share/extensions/render_alphabetsoup.inx.h:5
 #: ../share/extensions/text_braille.inx.h:2
@@ -3886,8 +3885,8 @@ msgid "_Origin X:"
 msgstr "_Začiatok X:"
 
 #: ../src/display/canvas-axonomgrid.cpp:398 ../src/display/canvas-grid.cpp:672
-#: ../src/ui/dialog/inkscape-preferences.cpp:978
-#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:989
+#: ../src/ui/dialog/inkscape-preferences.cpp:1010
 msgid "X coordinate of grid origin"
 msgstr "X súradnica začiatku mriežky"
 
@@ -3896,8 +3895,8 @@ msgid "O_rigin Y:"
 msgstr "Z_ačiatok Y:"
 
 #: ../src/display/canvas-axonomgrid.cpp:400 ../src/display/canvas-grid.cpp:674
-#: ../src/ui/dialog/inkscape-preferences.cpp:979
-#: ../src/ui/dialog/inkscape-preferences.cpp:1000
+#: ../src/ui/dialog/inkscape-preferences.cpp:990
+#: ../src/ui/dialog/inkscape-preferences.cpp:1011
 msgid "Y coordinate of grid origin"
 msgstr "Y súradnica začiatku mriežky"
 
@@ -3906,29 +3905,29 @@ msgid "Spacing _Y:"
 msgstr "Rozostup _Y:"
 
 #: ../src/display/canvas-axonomgrid.cpp:402
-#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:1013
 msgid "Base length of z-axis"
 msgstr "Základná dĺžka osi z"
 
 #: ../src/display/canvas-axonomgrid.cpp:404
-#: ../src/ui/dialog/inkscape-preferences.cpp:1005
-#: ../src/widgets/toolbox.cpp:3422
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
+#: ../src/widgets/toolbox.cpp:3449
 msgid "Angle X:"
 msgstr "Uhol X:"
 
 #: ../src/display/canvas-axonomgrid.cpp:404
-#: ../src/ui/dialog/inkscape-preferences.cpp:1005
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
 msgid "Angle of x-axis"
 msgstr "Uhol osi x"
 
 #: ../src/display/canvas-axonomgrid.cpp:406
-#: ../src/ui/dialog/inkscape-preferences.cpp:1006
-#: ../src/widgets/toolbox.cpp:3501
+#: ../src/ui/dialog/inkscape-preferences.cpp:1017
+#: ../src/widgets/toolbox.cpp:3528
 msgid "Angle Z:"
 msgstr "Uhol Z:"
 
 #: ../src/display/canvas-axonomgrid.cpp:406
-#: ../src/ui/dialog/inkscape-preferences.cpp:1006
+#: ../src/ui/dialog/inkscape-preferences.cpp:1017
 msgid "Angle of z-axis"
 msgstr "Uhol osi z"
 
@@ -4017,12 +4016,12 @@ msgid "Spacing _X:"
 msgstr "Rozostup _X:"
 
 #: ../src/display/canvas-grid.cpp:676
-#: ../src/ui/dialog/inkscape-preferences.cpp:982
+#: ../src/ui/dialog/inkscape-preferences.cpp:993
 msgid "Distance between vertical grid lines"
 msgstr "Vzdialenosť medzi zvislými čiarami mriežky"
 
 #: ../src/display/canvas-grid.cpp:678
-#: ../src/ui/dialog/inkscape-preferences.cpp:983
+#: ../src/ui/dialog/inkscape-preferences.cpp:994
 msgid "Distance between horizontal grid lines"
 msgstr "Vzdialenosť medzi vodorovnými čiarami mriežky"
 
@@ -4201,7 +4200,7 @@ msgstr "roh konvexného plášťa"
 msgid "Quadrant point"
 msgstr "bod kvadrantu"
 
-#: ../src/display/snap-indicator.cpp:196 ../src/widgets/toolbox.cpp:6734
+#: ../src/display/snap-indicator.cpp:196 ../src/widgets/toolbox.cpp:6961
 msgid "Center"
 msgstr "Stred"
 
@@ -4217,17 +4216,17 @@ msgstr "Základne textu"
 msgid " to "
 msgstr " na "
 
-#: ../src/document.cpp:445
+#: ../src/document.cpp:457
 #, c-format
 msgid "New document %d"
 msgstr "Nový dokument %d"
 
-#: ../src/document.cpp:477
+#: ../src/document.cpp:489
 #, c-format
 msgid "Memory document %d"
 msgstr "Pamäťový dokument %d"
 
-#: ../src/document.cpp:632
+#: ../src/document.cpp:644
 #, c-format
 msgid "Unnamed document %d"
 msgstr "Dokument bez názvu %d"
@@ -4246,11 +4245,11 @@ msgstr "Uzatváranie cesty."
 msgid "Draw path"
 msgstr "Kresliť cestu"
 
-#: ../src/draw-context.cpp:866
+#: ../src/draw-context.cpp:867
 msgid "Creating single dot"
 msgstr "Tvorba jednotlivého bodu"
 
-#: ../src/draw-context.cpp:867
+#: ../src/draw-context.cpp:868
 msgid "Create single dot"
 msgstr "Vytvoriť jednotlivý bod"
 
@@ -4277,7 +4276,7 @@ msgstr " pod kurzorom"
 msgid "<b>Release mouse</b> to set color."
 msgstr "Farbu nastavíte <b>uvoľnením myši</b>."
 
-#: ../src/dropper-context.cpp:306 ../src/tools-switch.cpp:208
+#: ../src/dropper-context.cpp:306 ../src/tools-switch.cpp:216
 msgid ""
 "<b>Click</b> to set fill, <b>Shift+click</b> to set stroke; <b>drag</b> to "
 "average color in area; with <b>Alt</b> to pick inverse color; <b>Ctrl+C</b> "
@@ -4335,11 +4334,11 @@ msgid "[Unchanged]"
 msgstr "[Bez zmeny]"
 
 #. Edit
-#: ../src/event-log.cpp:264 ../src/event-log.cpp:267 ../src/verbs.cpp:2276
+#: ../src/event-log.cpp:264 ../src/event-log.cpp:267 ../src/verbs.cpp:2286
 msgid "_Undo"
 msgstr "_Vrátiť"
 
-#: ../src/event-log.cpp:274 ../src/event-log.cpp:278 ../src/verbs.cpp:2278
+#: ../src/event-log.cpp:274 ../src/event-log.cpp:278 ../src/verbs.cpp:2288
 msgid "_Redo"
 msgstr "_Opakovať vrátené"
 
@@ -4506,8 +4505,8 @@ msgstr "Adaptívny prah"
 #: ../src/libgdl/gdl-dock-placeholder.c:169
 #: ../src/live_effects/lpe-bendpath.cpp:56
 #: ../src/live_effects/lpe-patternalongpath.cpp:64
-#: ../src/widgets/toolbox.cpp:3095 ../src/widgets/toolbox.cpp:4124
-#: ../share/extensions/foldablebox.inx.h:9
+#: ../src/widgets/toolbox.cpp:3122 ../src/widgets/toolbox.cpp:4151
+#: ../src/widgets/toolbox.cpp:4475 ../share/extensions/foldablebox.inx.h:9
 #: ../share/extensions/interp_att_g.inx.h:26
 msgid "Width"
 msgstr "Šírka"
@@ -4515,14 +4514,14 @@ msgstr "Šírka"
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:41
 #: ../src/extension/internal/bitmap/raise.cpp:42
 #: ../src/extension/internal/bitmap/sample.cpp:41 ../src/libgdl/gdl-dock.c:198
-#: ../src/libgdl/gdl-dock-placeholder.c:177 ../src/widgets/toolbox.cpp:3112
+#: ../src/libgdl/gdl-dock-placeholder.c:177 ../src/widgets/toolbox.cpp:3139
 #: ../share/extensions/foldablebox.inx.h:4
 #: ../share/extensions/interp_att_g.inx.h:6
 msgid "Height"
 msgstr "Výška"
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:42
-#: ../src/filter-enums.cpp:32 ../src/live_effects/effect.cpp:96
+#: ../src/filter-enums.cpp:32 ../src/live_effects/effect.cpp:99
 #: ../src/live_effects/lpe-ruler.cpp:50
 msgid "Offset"
 msgstr "Posun"
@@ -4848,17 +4847,17 @@ msgstr "Doladiť HSB"
 #: ../src/flood-context.cpp:250 ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:426
-#: ../src/widgets/sp-color-scales.cpp:427 ../src/widgets/toolbox.cpp:4281
+#: ../src/widgets/sp-color-scales.cpp:427 ../src/widgets/toolbox.cpp:4308
 #: ../share/extensions/color_randomize.inx.h:2
 msgid "Hue"
 msgstr "Odtieň"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:42
-#: ../src/flood-context.cpp:251 ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/flood-context.cpp:251 ../src/ui/dialog/inkscape-preferences.cpp:841
 #: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:429
-#: ../src/widgets/sp-color-scales.cpp:430 ../src/widgets/toolbox.cpp:4296
+#: ../src/widgets/sp-color-scales.cpp:430 ../src/widgets/toolbox.cpp:4323
 #: ../share/extensions/color_randomize.inx.h:5
 msgid "Saturation"
 msgstr "Sýtosť"
@@ -5218,7 +5217,7 @@ msgstr "Vertikálny posun [px]"
 #: ../src/extension/internal/filter/filter.cpp:214
 #: ../src/extension/internal/filter/filter-file.cpp:148
 #: ../src/extension/internal/filter/snow.h:38
-#: ../src/ui/dialog/inkscape-preferences.cpp:733
+#: ../src/ui/dialog/inkscape-preferences.cpp:744
 msgid "Filters"
 msgstr "Filtre"
 
@@ -5486,15 +5485,15 @@ msgstr "Adobe Illustrator 9.0 a novší (*.ai)"
 msgid "Open files saved in Adobe Illustrator 9.0 and newer versions"
 msgstr "Otvoriť súbory uložené v Adobe Illustrator 9.0 alebo novšom"
 
-#: ../src/extension/internal/pov-out.cpp:688
+#: ../src/extension/internal/pov-out.cpp:700
 msgid "PovRay Output"
 msgstr "Výstup PovRay"
 
-#: ../src/extension/internal/pov-out.cpp:693
+#: ../src/extension/internal/pov-out.cpp:705
 msgid "PovRay (*.pov) (paths and shapes only)"
 msgstr "PovRay (*.pov) (iba cesty a tvary)"
 
-#: ../src/extension/internal/pov-out.cpp:694
+#: ../src/extension/internal/pov-out.cpp:706
 msgid "PovRay Raytracer File"
 msgstr "Súbor PovRay Raytracer"
 
@@ -5598,7 +5597,7 @@ msgstr "Autodetekcia formátu zlyhala. Súbor bude otvorený ako SVG."
 msgid "default.svg"
 msgstr "default.sk.svg"
 
-#: ../src/file.cpp:265 ../src/file.cpp:1067
+#: ../src/file.cpp:265 ../src/file.cpp:1071
 #, c-format
 msgid "Failed to load the requested file %s"
 msgstr "Nepodarilo sa načítať požadovaný súbor %s"
@@ -5674,7 +5673,7 @@ msgid "Document saved."
 msgstr "Dokument bol uložený."
 
 #. We are saving for the first time; create a unique default filename
-#: ../src/file.cpp:770 ../src/file.cpp:1204
+#: ../src/file.cpp:770 ../src/file.cpp:1208
 #, c-format
 msgid "drawing%s"
 msgstr "kresba%s"
@@ -5697,27 +5696,27 @@ msgstr "Voľba súboru na uloženie kópie"
 msgid "Select file to save to"
 msgstr "Voľba súboru na uloženie"
 
-#: ../src/file.cpp:888
+#: ../src/file.cpp:892
 msgid "No changes need to be saved."
 msgstr "Nie je potrebné uložiť žiadne zmeny."
 
-#: ../src/file.cpp:905
+#: ../src/file.cpp:909
 msgid "Saving document..."
 msgstr "Ukladá sa dokument..."
 
-#: ../src/file.cpp:1064
+#: ../src/file.cpp:1068
 msgid "Import"
 msgstr "Importovať"
 
-#: ../src/file.cpp:1114
+#: ../src/file.cpp:1118
 msgid "Select file to import"
 msgstr "Voľba súboru na importovanie"
 
-#: ../src/file.cpp:1226
+#: ../src/file.cpp:1230
 msgid "Select file to export to"
 msgstr "Voľba súboru na exportovanie"
 
-#: ../src/file.cpp:1469 ../src/verbs.cpp:2265
+#: ../src/file.cpp:1473 ../src/verbs.cpp:2275
 msgid "Import From Open Clip Art Library"
 msgstr "Importovať z knižnice Open Clip Art"
 
@@ -5836,7 +5835,7 @@ msgid "Luminance to Alpha"
 msgstr "Svetlosť na priesvitnosť"
 
 #. File
-#: ../src/filter-enums.cpp:72 ../src/verbs.cpp:2242
+#: ../src/filter-enums.cpp:72 ../src/verbs.cpp:2252
 msgid "Default"
 msgstr "Štandardné"
 
@@ -5899,12 +5898,13 @@ msgstr "Zalamovanie"
 #: ../src/ui/dialog/filter-effects-dialog.cpp:468
 #: ../src/ui/dialog/inkscape-preferences.cpp:259
 #: ../src/ui/dialog/inkscape-preferences.cpp:422
-#: ../src/ui/dialog/inkscape-preferences.cpp:554
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
-#: ../src/ui/dialog/inkscape-preferences.cpp:1216 ../src/verbs.cpp:2239
-#: ../src/widgets/stroke-style.cpp:765 ../src/widgets/toolbox.cpp:3887
+#: ../src/ui/dialog/inkscape-preferences.cpp:565
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
+#: ../src/ui/dialog/inkscape-preferences.cpp:1227 ../src/verbs.cpp:2249
+#: ../src/widgets/stroke-style.cpp:765 ../src/widgets/toolbox.cpp:3914
 #: ../share/extensions/grid_polar.inx.h:16
 #: ../share/extensions/guides_creator.inx.h:15
+#: ../share/extensions/scour.inx.h:7
 msgid "None"
 msgstr "Žiadny"
 
@@ -5963,12 +5963,12 @@ msgstr "Viditeľné farby"
 
 #: ../src/flood-context.cpp:252 ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:432
-#: ../src/widgets/sp-color-scales.cpp:433 ../src/widgets/toolbox.cpp:4311
+#: ../src/widgets/sp-color-scales.cpp:433 ../src/widgets/toolbox.cpp:4338
 #: ../share/extensions/color_randomize.inx.h:3
 msgid "Lightness"
 msgstr "Jas"
 
-#: ../src/flood-context.cpp:265 ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/flood-context.cpp:265 ../src/ui/dialog/inkscape-preferences.cpp:1083
 msgid "Small"
 msgstr "malý"
 
@@ -5976,7 +5976,7 @@ msgstr "malý"
 msgid "Medium"
 msgstr "stredný"
 
-#: ../src/flood-context.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/flood-context.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1083
 msgid "Large"
 msgstr "veľký"
 
@@ -6256,8 +6256,8 @@ msgstr "Jednotka"
 
 #. Add the units menu.
 #: ../src/helper/units.cpp:37 ../src/widgets/select-toolbar.cpp:504
-#: ../src/widgets/toolbox.cpp:1504 ../src/widgets/toolbox.cpp:3156
-#: ../src/widgets/toolbox.cpp:5660 ../src/widgets/toolbox.cpp:7203
+#: ../src/widgets/toolbox.cpp:1530 ../src/widgets/toolbox.cpp:3183
+#: ../src/widgets/toolbox.cpp:5879 ../src/widgets/toolbox.cpp:7635
 msgid "Units"
 msgstr "Jednotky"
 
@@ -6506,42 +6506,42 @@ msgstr "Zobrazí alebo skryje stavový panel (naspodku okna)"
 msgid "Verb \"%s\" Unknown"
 msgstr "Sloveso „%s“ neznáme"
 
-#: ../src/interface.cpp:995
+#: ../src/interface.cpp:998
 msgid "Open _Recent"
 msgstr "Otvoriť ne_dávne"
 
 #. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1096
+#: ../src/interface.cpp:1099
 #, c-format
 msgid "Enter group #%s"
 msgstr "Zadajte skupinu #%s"
 
-#: ../src/interface.cpp:1107
+#: ../src/interface.cpp:1110
 msgid "Go to parent"
 msgstr "O stupeň vyššie"
 
-#: ../src/interface.cpp:1198 ../src/interface.cpp:1284
-#: ../src/interface.cpp:1387 ../src/ui/widget/selected-style.cpp:468
+#: ../src/interface.cpp:1201 ../src/interface.cpp:1287
+#: ../src/interface.cpp:1390 ../src/ui/widget/selected-style.cpp:468
 msgid "Drop color"
 msgstr "Vynechať farbu"
 
-#: ../src/interface.cpp:1237 ../src/interface.cpp:1347
+#: ../src/interface.cpp:1240 ../src/interface.cpp:1350
 msgid "Drop color on gradient"
 msgstr "Pustiť farbu na farebný prechod"
 
-#: ../src/interface.cpp:1400
+#: ../src/interface.cpp:1403
 msgid "Could not parse SVG data"
 msgstr "Nie je možné analyzovať SVG dáta"
 
-#: ../src/interface.cpp:1439
+#: ../src/interface.cpp:1442
 msgid "Drop SVG"
 msgstr "Vypustiť SVG"
 
-#: ../src/interface.cpp:1495
+#: ../src/interface.cpp:1498
 msgid "Drop bitmap image"
 msgstr "Vynechať bitmapový obrázok"
 
-#: ../src/interface.cpp:1587
+#: ../src/interface.cpp:1590
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do "
@@ -6554,7 +6554,7 @@ msgstr ""
 "\n"
 "Súbor už existuje v „%s“. Jeho nahradením prepíšete jeho súčasný obsah."
 
-#: ../src/interface.cpp:1594 ../share/extensions/web-set-att.inx.h:5
+#: ../src/interface.cpp:1597 ../share/extensions/web-set-att.inx.h:5
 #: ../share/extensions/web-transmit-att.inx.h:5
 msgid "Replace"
 msgstr "Nahradiť"
@@ -6608,24 +6608,24 @@ msgstr "Nepodarilo sa spustiť pomocný program: %s"
 msgid "Node or handle drag canceled."
 msgstr "Ťahanie uzla alebo úchopu zrušené."
 
-#: ../src/knotholder.cpp:134
+#: ../src/knotholder.cpp:135
 msgid "Change handle"
 msgstr "Zmeniť úchop"
 
-#: ../src/knotholder.cpp:213
+#: ../src/knotholder.cpp:214
 msgid "Move handle"
 msgstr "Posunúť úchop"
 
 #. TRANSLATORS: This refers to the pattern that's inside the object
-#: ../src/knotholder.cpp:234
+#: ../src/knotholder.cpp:235
 msgid "<b>Move</b> the pattern fill inside the object"
 msgstr "<b>Presunúť</b> vzorku výplne dovnútra objektu"
 
-#: ../src/knotholder.cpp:237
+#: ../src/knotholder.cpp:238
 msgid "<b>Scale</b> the pattern fill; uniformly if with <b>Ctrl</b>"
 msgstr "Zmeniť <b>mierku</b> vzorky výplne; rovnomerne s <b>Ctrl</b>"
 
-#: ../src/knotholder.cpp:240
+#: ../src/knotholder.cpp:241
 msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
 msgstr "<b>Otočiť</b> vzorku výplne; s <b>Ctrl</b> prichytávanie k uhlu"
 
@@ -6646,8 +6646,8 @@ msgstr "Štýl doku"
 msgid "Dockbar style to show items on it"
 msgstr "Štýl pre zobrazovanie položiek panelu dokov"
 
-#: ../src/libgdl/gdl-dock.c:175 ../src/ui/dialog/inkscape-preferences.cpp:549
-#: ../src/ui/dialog/inkscape-preferences.cpp:570
+#: ../src/libgdl/gdl-dock.c:175 ../src/ui/dialog/inkscape-preferences.cpp:560
+#: ../src/ui/dialog/inkscape-preferences.cpp:581
 msgid "Floating"
 msgstr "Plávajúci"
 
@@ -6869,7 +6869,7 @@ msgstr ""
 #: ../src/ui/dialog/align-and-distribute.cpp:919
 #: ../src/ui/dialog/document-properties.cpp:118
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1410
-#: ../src/widgets/desktop-widget.cpp:1573
+#: ../src/widgets/desktop-widget.cpp:1572
 msgid "Page"
 msgstr "Stránka"
 
@@ -6877,7 +6877,7 @@ msgstr "Stránka"
 msgid "The index of the current page"
 msgstr "Index aktuálnej stránky"
 
-#: ../src/libgdl/gdl-dock-object.c:120 ../src/ui/widget/page-sizer.cpp:217
+#: ../src/libgdl/gdl-dock-object.c:120 ../src/ui/widget/page-sizer.cpp:237
 msgid "Name"
 msgstr "Meno"
 
@@ -7045,135 +7045,139 @@ msgstr "Položka doku, ktorá „vlastní“ tento názov záložky"
 msgid "Ignoring font without family that will crash Pango"
 msgstr "Ignoruje sa písmo bez rodiny, ktoré by spôsobilo pád Panga"
 
-#: ../src/live_effects/effect.cpp:86
+#: ../src/live_effects/effect.cpp:88
 msgid "doEffect stack test"
 msgstr "test zásobníka doEffect"
 
-#: ../src/live_effects/effect.cpp:87
+#: ../src/live_effects/effect.cpp:89
 msgid "Angle bisector"
 msgstr "Rozdelenie uhla"
 
 #. TRANSLATORS: boolean operations
-#: ../src/live_effects/effect.cpp:89
+#: ../src/live_effects/effect.cpp:91
 msgid "Boolops"
 msgstr "Booleovské operácie"
 
-#: ../src/live_effects/effect.cpp:90
+#: ../src/live_effects/effect.cpp:92
 msgid "Circle (by center and radius)"
 msgstr "Kružnica (podľa stredu a polomeru)"
 
-#: ../src/live_effects/effect.cpp:91
+#: ../src/live_effects/effect.cpp:93
 msgid "Circle by 3 points"
 msgstr "Kruh 3 bodov"
 
-#: ../src/live_effects/effect.cpp:92
+#: ../src/live_effects/effect.cpp:94
 msgid "Dynamic stroke"
 msgstr "Dynamický ťah"
 
-#: ../src/live_effects/effect.cpp:93
+#: ../src/live_effects/effect.cpp:95 ../share/extensions/extrude.inx.h:1
+msgid "Extrude"
+msgstr "Extrudovať"
+
+#: ../src/live_effects/effect.cpp:96
 msgid "Lattice Deformation"
 msgstr "Šalátová deformácia"
 
-#: ../src/live_effects/effect.cpp:94
+#: ../src/live_effects/effect.cpp:97
 msgid "Line Segment"
 msgstr "Segment úsečky"
 
-#: ../src/live_effects/effect.cpp:95
+#: ../src/live_effects/effect.cpp:98
 msgid "Mirror symmetry"
 msgstr "Zrkadlová symetria"
 
-#: ../src/live_effects/effect.cpp:97
+#: ../src/live_effects/effect.cpp:100
 msgid "Parallel"
 msgstr "Rovnobežne"
 
-#: ../src/live_effects/effect.cpp:98
+#: ../src/live_effects/effect.cpp:101
 msgid "Path length"
 msgstr "Dĺžka cesty"
 
-#: ../src/live_effects/effect.cpp:99
+#: ../src/live_effects/effect.cpp:102
 msgid "Perpendicular bisector"
 msgstr "Kolmé delenie"
 
-#: ../src/live_effects/effect.cpp:100
+#: ../src/live_effects/effect.cpp:103
 msgid "Perspective path"
 msgstr "Perspektíva cesty"
 
-#: ../src/live_effects/effect.cpp:101
+#: ../src/live_effects/effect.cpp:104
 msgid "Rotate copies"
 msgstr "Otáčať kópie"
 
-#: ../src/live_effects/effect.cpp:102
+#: ../src/live_effects/effect.cpp:105
 msgid "Recursive skeleton"
 msgstr "Rekurzívna kostra"
 
-#: ../src/live_effects/effect.cpp:103
+#: ../src/live_effects/effect.cpp:106
 msgid "Tangent to curve"
 msgstr "Dotyčnica krivky"
 
-#: ../src/live_effects/effect.cpp:104
+#: ../src/live_effects/effect.cpp:107
 msgid "Text label"
 msgstr "Textový štítok"
 
 #. 0.46
-#: ../src/live_effects/effect.cpp:107
+#: ../src/live_effects/effect.cpp:110
 msgid "Bend"
 msgstr "Ohnúť"
 
-#: ../src/live_effects/effect.cpp:108
+#: ../src/live_effects/effect.cpp:111
 msgid "Gears"
 msgstr "Ozubenie"
 
-#: ../src/live_effects/effect.cpp:109
+#: ../src/live_effects/effect.cpp:112
 msgid "Pattern Along Path"
 msgstr "Vzorka pozdĺž cesty"
 
 #. for historic reasons, this effect is called skeletal(strokes) in Inkscape:SVG
-#: ../src/live_effects/effect.cpp:110
+#: ../src/live_effects/effect.cpp:113
 msgid "Stitch Sub-Paths"
 msgstr "Zošiť podcesty"
 
 #. 0.47
-#: ../src/live_effects/effect.cpp:112
+#: ../src/live_effects/effect.cpp:115
 msgid "VonKoch"
 msgstr "VonKoch"
 
-#: ../src/live_effects/effect.cpp:113
+#: ../src/live_effects/effect.cpp:116
 msgid "Knot"
 msgstr "Uzol"
 
-#: ../src/live_effects/effect.cpp:114
+#: ../src/live_effects/effect.cpp:117
 msgid "Construct grid"
 msgstr "Zostrojiť mriežku"
 
-#: ../src/live_effects/effect.cpp:115
+#: ../src/live_effects/effect.cpp:118
 msgid "Spiro spline"
 msgstr "Špirálová drážka"
 
-#: ../src/live_effects/effect.cpp:116
+#: ../src/live_effects/effect.cpp:119
 msgid "Envelope Deformation"
 msgstr "Obálková deformácia"
 
-#: ../src/live_effects/effect.cpp:117
+#: ../src/live_effects/effect.cpp:120
 msgid "Interpolate Sub-Paths"
 msgstr "Interpolácia podciest"
 
-#: ../src/live_effects/effect.cpp:118
+#: ../src/live_effects/effect.cpp:121
 msgid "Hatches (rough)"
 msgstr "Šrafovanie (hrubé)"
 
-#: ../src/live_effects/effect.cpp:119
+#: ../src/live_effects/effect.cpp:122
 msgid "Sketch"
 msgstr "Skica"
 
-#: ../src/live_effects/effect.cpp:120
+#: ../src/live_effects/effect.cpp:123
 msgid "Ruler"
 msgstr "Pravítko"
 
-#: ../src/live_effects/effect.cpp:273
+#: ../src/live_effects/effect.cpp:279
 msgid "Is visible?"
 msgstr "Je viditeľný?"
 
-#: ../src/live_effects/effect.cpp:273
+#: ../src/live_effects/effect.cpp:279
 msgid ""
 "If unchecked, the effect remains applied to the object but is temporarily "
 "disabled on canvas"
@@ -7181,21 +7185,21 @@ msgstr ""
 "Ak nie je voľba nastavená, efekt zostane použitý na objekte, ale je dočasne "
 "vypnutý na plátne."
 
-#: ../src/live_effects/effect.cpp:294
+#: ../src/live_effects/effect.cpp:300
 msgid "No effect"
 msgstr "Žiadny efekt"
 
-#: ../src/live_effects/effect.cpp:341
+#: ../src/live_effects/effect.cpp:347
 #, c-format
 msgid "Please specify a parameter path for the LPE '%s' with %d mouse clicks"
 msgstr "Prosím, uveďte parameter cesty pre LPE „%s“ pomocou %d kliknutí myši"
 
-#: ../src/live_effects/effect.cpp:639
+#: ../src/live_effects/effect.cpp:645
 #, c-format
 msgid "Editing parameter <b>%s</b>."
 msgstr "Úprava parametra <b>%s</b>."
 
-#: ../src/live_effects/effect.cpp:644
+#: ../src/live_effects/effect.cpp:650
 msgid "None of the applied path effect's parameters can be edited on-canvas."
 msgstr "Žiadny z použitých parametrov cesty nie je možné upravovať na plátne."
 
@@ -7424,61 +7428,61 @@ msgstr ""
 "trajektórii cesty."
 
 #. initialise your parameters here:
-#: ../src/live_effects/lpe-knot.cpp:328
+#: ../src/live_effects/lpe-knot.cpp:329
 msgid "Fixed width"
 msgstr "Pevná šírka"
 
-#: ../src/live_effects/lpe-knot.cpp:328
+#: ../src/live_effects/lpe-knot.cpp:329
 msgid "Size of hidden region of lower string"
 msgstr "Veľkosť skrytej oblasti spodného reťazca"
 
-#: ../src/live_effects/lpe-knot.cpp:329
+#: ../src/live_effects/lpe-knot.cpp:330
 msgid "In units of stroke width"
 msgstr "V jednotkách šírky ťahu"
 
-#: ../src/live_effects/lpe-knot.cpp:329
+#: ../src/live_effects/lpe-knot.cpp:330
 msgid "Consider 'Interruption width' as a ratio of stroke width"
 msgstr "Považovať „Šírku prerušenia“ v pomere k šírke ťahu"
 
-#: ../src/live_effects/lpe-knot.cpp:330 ../src/widgets/stroke-style.cpp:1093
+#: ../src/live_effects/lpe-knot.cpp:331 ../src/widgets/stroke-style.cpp:1093
 #: ../share/extensions/edge3d.inx.h:9
 msgid "Stroke width"
 msgstr "Šírka ťahu"
 
-#: ../src/live_effects/lpe-knot.cpp:330
+#: ../src/live_effects/lpe-knot.cpp:331
 msgid "Add the stroke width to the interruption size"
 msgstr "Pridať šírku ťahu k šírke prerušenia"
 
-#: ../src/live_effects/lpe-knot.cpp:331
+#: ../src/live_effects/lpe-knot.cpp:332
 msgid "Crossing path stroke width"
 msgstr "Zmeniť šírku pretínajúcej cesty"
 
-#: ../src/live_effects/lpe-knot.cpp:331
+#: ../src/live_effects/lpe-knot.cpp:332
 msgid "Add crossed stroke width to the interruption size"
 msgstr "Pridať šírku pretínajúceho ťahu k šírke prerušenia"
 
-#: ../src/live_effects/lpe-knot.cpp:332
+#: ../src/live_effects/lpe-knot.cpp:333
 msgid "Switcher size"
 msgstr "Veľkosť prepínača"
 
-#: ../src/live_effects/lpe-knot.cpp:332
+#: ../src/live_effects/lpe-knot.cpp:333
 msgid "Orientation indicator/switcher size"
 msgstr "Indikátor orientácie/veľkosť prepínača"
 
-#: ../src/live_effects/lpe-knot.cpp:333
+#: ../src/live_effects/lpe-knot.cpp:334
 msgid "Crossing Signs"
 msgstr "Značky pretínania"
 
-#: ../src/live_effects/lpe-knot.cpp:333
+#: ../src/live_effects/lpe-knot.cpp:334
 msgid "Crossings signs"
 msgstr "Značky pretínania"
 
-#: ../src/live_effects/lpe-knot.cpp:344
+#: ../src/live_effects/lpe-knot.cpp:345
 msgid "Drag to select a crossing, click to flip it"
 msgstr "Ťahaním vyberte pretnutie, kliknutím ho obrátite"
 
 #. / @todo Is this the right verb?
-#: ../src/live_effects/lpe-knot.cpp:637
+#: ../src/live_effects/lpe-knot.cpp:638
 msgid "Change knot crossing"
 msgstr "Zmeniť pretínanie uzlov"
 
@@ -7780,11 +7784,11 @@ msgstr "Pravá"
 msgid "Both"
 msgstr "Obe"
 
-#: ../src/live_effects/lpe-ruler.cpp:35 ../src/widgets/toolbox.cpp:5168
+#: ../src/live_effects/lpe-ruler.cpp:35 ../src/widgets/toolbox.cpp:5387
 msgid "Start"
 msgstr "Začiatok"
 
-#: ../src/live_effects/lpe-ruler.cpp:36 ../src/widgets/toolbox.cpp:5181
+#: ../src/live_effects/lpe-ruler.cpp:36 ../src/widgets/toolbox.cpp:5400
 msgid "End"
 msgstr "Koniec"
 
@@ -8082,7 +8086,7 @@ msgstr "Vložiť parameter cesty"
 msgid "Link path parameter to path"
 msgstr "Pripojiť parameter cesty k ceste"
 
-#: ../src/live_effects/parameter/point.cpp:90
+#: ../src/live_effects/parameter/point.cpp:91
 msgid "Change point parameter"
 msgstr "Zmeniť parameter bodu"
 
@@ -8361,11 +8365,11 @@ msgstr "_Nové"
 
 #. TODO look at some dynamic option for changing the menu tree:
 #. "       <verb verb-id=\"DialogInput2\" />\n"
-#: ../src/menus-skeleton.h:49 ../src/verbs.cpp:2488 ../src/verbs.cpp:2494
+#: ../src/menus-skeleton.h:49 ../src/verbs.cpp:2498 ../src/verbs.cpp:2504
 msgid "_Edit"
 msgstr "_Upraviť"
 
-#: ../src/menus-skeleton.h:59 ../src/verbs.cpp:2288
+#: ../src/menus-skeleton.h:59 ../src/verbs.cpp:2298
 msgid "Paste Si_ze"
 msgstr "Vložiť v_eľkosť"
 
@@ -8389,6 +8393,7 @@ msgstr "_Zobrazovací režim"
 msgid "Show/Hide"
 msgstr "Zobraziť/skryť"
 
+#. "       <verb verb-id=\"DialogScript\" />\n"
 #. Not quite ready to be in the menus.
 #. "       <verb verb-id=\"FocusToggle\" />\n"
 #: ../src/menus-skeleton.h:139
@@ -8544,7 +8549,7 @@ msgstr ""
 msgid "Cannot find path between nodes."
 msgstr "Nie je možné nájsť cestu medzi uzlami."
 
-#: ../src/nodepath.cpp:2804 ../src/widgets/toolbox.cpp:1343
+#: ../src/nodepath.cpp:2804 ../src/widgets/toolbox.cpp:1369
 msgid "Delete segment"
 msgstr "Zmazať segment"
 
@@ -8556,7 +8561,7 @@ msgstr "Zmeniť typ segmentu"
 msgid "Change node type"
 msgstr "Zmeniť typ uzla"
 
-#: ../src/nodepath.cpp:3529 ../src/widgets/toolbox.cpp:1300
+#: ../src/nodepath.cpp:3529 ../src/widgets/toolbox.cpp:1326
 msgid "Delete node"
 msgstr "Zmazať uzol"
 
@@ -9007,7 +9012,7 @@ msgstr "Prepnúť spojnicu"
 msgid "Toggle multiple vanishing points"
 msgstr "Prepnúť viacero spojníc"
 
-#: ../src/preferences.cpp:101
+#: ../src/preferences.cpp:129
 msgid ""
 "Inkscape will run with default settings, and new settings will not be saved. "
 msgstr ""
@@ -9017,7 +9022,7 @@ msgstr ""
 #. the creation failed
 #. _reportError(Glib::ustring::compose(_("Cannot create profile directory %1."),
 #. Glib::filename_to_utf8(_prefs_dir)), not_saved);
-#: ../src/preferences.cpp:116
+#: ../src/preferences.cpp:144
 #, c-format
 msgid "Cannot create profile directory %s."
 msgstr "Nie je možné vytvoriť adresár profilu %s."
@@ -9025,7 +9030,7 @@ msgstr "Nie je možné vytvoriť adresár profilu %s."
 #. The profile dir is not actually a directory
 #. _reportError(Glib::ustring::compose(_("%1 is not a valid directory."),
 #. Glib::filename_to_utf8(_prefs_dir)), not_saved);
-#: ../src/preferences.cpp:134
+#: ../src/preferences.cpp:162
 #, c-format
 msgid "%s is not a valid directory."
 msgstr "%s nie je platný adresár."
@@ -9033,35 +9038,27 @@ msgstr "%s nie je platný adresár."
 #. The write failed.
 #. _reportError(Glib::ustring::compose(_("Failed to create the preferences file %1."),
 #. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:145
+#: ../src/preferences.cpp:173
 #, c-format
 msgid "Failed to create the preferences file %s."
 msgstr "Nepodarilo sa vytvoriť súbor s nastavením %s."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 is not a regular file."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:163
+#: ../src/preferences.cpp:209
 #, c-format
 msgid "The preferences file %s is not a regular file."
 msgstr "Súbor s nastavením %s nie je obyčajný súbor."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 could not be read."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:175
+#: ../src/preferences.cpp:219
 #, c-format
 msgid "The preferences file %s could not be read."
 msgstr "Súbor s nastavením %s nebolo možné prečítať."
 
-#. _reportError(Glib::ustring::compose(_("The preferences file %1 is not a valid XML document."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:188
+#: ../src/preferences.cpp:230
 #, c-format
 msgid "The preferences file %s is not a valid XML document."
 msgstr "Súbor nastavení %s nie je platný XML dokument."
 
-#. _reportError(Glib::ustring::compose(_("The file %1 is not a valid Inkscape preferences file."),
-#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
-#: ../src/preferences.cpp:199
+#: ../src/preferences.cpp:239
 #, c-format
 msgid "The file %s is not a valid Inkscape preferences file."
 msgstr "Súbor %s nie je platný súbor s nastavením Inkscape."
@@ -9239,7 +9236,7 @@ msgstr "Pokrytie"
 msgid "Extent or scope of this document."
 msgstr "Rozsah, pokrytie tohto dokumentu."
 
-#: ../src/rdf.cpp:273 ../src/ui/widget/page-sizer.cpp:219
+#: ../src/rdf.cpp:273 ../src/ui/widget/page-sizer.cpp:239
 msgid "Description"
 msgstr "Popis"
 
@@ -9379,8 +9376,8 @@ msgid "<b>Nothing</b> was deleted."
 msgstr "<b>Nič</b> nebolo zmazané."
 
 #: ../src/selection-chemistry.cpp:221 ../src/text-context.cpp:995
-#: ../src/ui/dialog/swatches.cpp:471 ../src/widgets/toolbox.cpp:1304
-#: ../src/widgets/toolbox.cpp:5752
+#: ../src/ui/dialog/swatches.cpp:471 ../src/widgets/toolbox.cpp:1330
+#: ../src/widgets/toolbox.cpp:5971
 msgid "Delete"
 msgstr "Zmazať"
 
@@ -9408,7 +9405,7 @@ msgstr "Vyberte <b>skupinu</b> na odstránenie zoskupenia."
 msgid "<b>No groups</b> to ungroup in the selection."
 msgstr "Vo výbere <b>nie sú objekty</b>, ktorým je možné zrušiť zoskupenie."
 
-#: ../src/selection-chemistry.cpp:598 ../src/sp-item-group.cpp:515
+#: ../src/selection-chemistry.cpp:598 ../src/sp-item-group.cpp:516
 msgid "Ungroup"
 msgstr "Zrušiť zoskupenie"
 
@@ -9729,15 +9726,15 @@ msgid "Select <b>object(s)</b> to fit canvas to."
 msgstr "Vyberte <b>objekt(y)</b>, ktorým sa má prispôsobiť plátno."
 
 #. Fit Page
-#: ../src/selection-chemistry.cpp:2944 ../src/verbs.cpp:2723
+#: ../src/selection-chemistry.cpp:2944 ../src/verbs.cpp:2739
 msgid "Fit Page to Selection"
 msgstr "Veľkosť strany podľa výberu"
 
-#: ../src/selection-chemistry.cpp:2969 ../src/verbs.cpp:2725
+#: ../src/selection-chemistry.cpp:2969 ../src/verbs.cpp:2741
 msgid "Fit Page to Drawing"
 msgstr "Veľkosť strany podľa kresby"
 
-#: ../src/selection-chemistry.cpp:2985 ../src/verbs.cpp:2727
+#: ../src/selection-chemistry.cpp:2985 ../src/verbs.cpp:2743
 msgid "Fit Page to Selection or Drawing"
 msgstr "Veľkosť strany podľa výberu alebo kresby"
 
@@ -9752,10 +9749,10 @@ msgstr "Odkaz"
 msgid "Circle"
 msgstr "Kruh"
 
-#. ellipse
+#. Ellipse
 #: ../src/selection-describer.cpp:49 ../src/selection-describer.cpp:76
-#: ../src/ui/dialog/inkscape-preferences.cpp:474 ../src/verbs.cpp:2510
-#: ../src/widgets/toolbox.cpp:3890
+#: ../src/ui/dialog/inkscape-preferences.cpp:480 ../src/verbs.cpp:2522
+#: ../src/widgets/toolbox.cpp:3917
 msgid "Ellipse"
 msgstr "Elipsa"
 
@@ -9771,7 +9768,7 @@ msgstr "Úsečka"
 msgid "Path"
 msgstr "Cesta"
 
-#: ../src/selection-describer.cpp:61 ../src/widgets/toolbox.cpp:2726
+#: ../src/selection-describer.cpp:61 ../src/widgets/toolbox.cpp:2753
 msgid "Polygon"
 msgstr "Mnohouholník"
 
@@ -9781,13 +9778,13 @@ msgstr "Lomená čiara"
 
 #. Rectangle
 #: ../src/selection-describer.cpp:65
-#: ../src/ui/dialog/inkscape-preferences.cpp:464 ../src/verbs.cpp:2506
+#: ../src/ui/dialog/inkscape-preferences.cpp:470 ../src/verbs.cpp:2518
 msgid "Rectangle"
 msgstr "Obdĺžnik"
 
 #. 3D box
 #: ../src/selection-describer.cpp:67
-#: ../src/ui/dialog/inkscape-preferences.cpp:469 ../src/verbs.cpp:2508
+#: ../src/ui/dialog/inkscape-preferences.cpp:475 ../src/verbs.cpp:2520
 msgid "3D Box"
 msgstr "Kváder"
 
@@ -9802,16 +9799,16 @@ msgstr "Klon"
 msgid "Offset path"
 msgstr "Posun cesty"
 
-#. spiral
+#. Spiral
 #: ../src/selection-describer.cpp:80
-#: ../src/ui/dialog/inkscape-preferences.cpp:482 ../src/verbs.cpp:2514
+#: ../src/ui/dialog/inkscape-preferences.cpp:488 ../src/verbs.cpp:2526
 msgid "Spiral"
 msgstr "Špirála"
 
-#. star
+#. Star
 #: ../src/selection-describer.cpp:82
-#: ../src/ui/dialog/inkscape-preferences.cpp:478 ../src/verbs.cpp:2512
-#: ../src/widgets/toolbox.cpp:2733
+#: ../src/ui/dialog/inkscape-preferences.cpp:484 ../src/verbs.cpp:2524
+#: ../src/widgets/toolbox.cpp:2760
 msgid "Star"
 msgstr "Hviezda"
 
@@ -10019,7 +10016,7 @@ msgstr ""
 "<b>Posun</b> o %s, %s; s <b>Ctrl</b> obmedzenie na iba vodorovné a zvislé; s "
 "<b>Shift</b> potlačenie prichytávania"
 
-#: ../src/shape-editor.cpp:471
+#: ../src/shape-editor.cpp:472
 msgid "Drag curve"
 msgstr "Ťahať krivku"
 
@@ -10140,31 +10137,31 @@ msgstr ""
 msgid "Create spiral"
 msgstr "Vytvorenie špirály"
 
-#: ../src/sp-item.cpp:1035
+#: ../src/sp-item.cpp:1039
 msgid "Object"
 msgstr "Objekt"
 
-#: ../src/sp-item.cpp:1052
+#: ../src/sp-item.cpp:1056
 #, c-format
 msgid "%s; <i>clipped</i>"
 msgstr "%s; <i>orezané</i>"
 
-#: ../src/sp-item.cpp:1057
+#: ../src/sp-item.cpp:1061
 #, c-format
 msgid "%s; <i>masked</i>"
 msgstr "%s; <i>maskované</i>"
 
-#: ../src/sp-item.cpp:1065
+#: ../src/sp-item.cpp:1069
 #, c-format
 msgid "%s; <i>filtered (%s)</i>"
 msgstr "%s; <i>odfiltrované (%s)</i>"
 
-#: ../src/sp-item.cpp:1067
+#: ../src/sp-item.cpp:1071
 #, c-format
 msgid "%s; <i>filtered</i>"
 msgstr "%s; <i>odfiltrované</i>"
 
-#: ../src/sp-item-group.cpp:760
+#: ../src/sp-item-group.cpp:761
 #, c-format
 msgid "<b>Group</b> of <b>%d</b> object"
 msgid_plural "<b>Group</b> of <b>%d</b> objects"
@@ -10234,74 +10231,74 @@ msgid "Select <b>stroked path(s)</b> to convert stroke to path."
 msgstr ""
 "Vyberte <b>cesty prevedené na ťah</b>, ktoré sa majú konvertovať na cestu."
 
-#: ../src/splivarot.cpp:954
+#: ../src/splivarot.cpp:976
 msgid "Convert stroke to path"
 msgstr "Konvertovať ťah na cestu"
 
 #. TRANSLATORS: "to outline" means "to convert stroke to path"
-#: ../src/splivarot.cpp:957
+#: ../src/splivarot.cpp:979
 msgid "<b>No stroked paths</b> in the selection."
 msgstr "Výber <b>neobsahuje žiadny ťah konvertovaný na cestu</b>."
 
-#: ../src/splivarot.cpp:1040
+#: ../src/splivarot.cpp:1062
 msgid "Selected object is <b>not a path</b>, cannot inset/outset."
 msgstr "Zvolený objekt <b>nie je cesta</b>, nie je možné ho posunúť dnu/von."
 
-#: ../src/splivarot.cpp:1159 ../src/splivarot.cpp:1228
+#: ../src/splivarot.cpp:1181 ../src/splivarot.cpp:1250
 msgid "Create linked offset"
 msgstr "Vytvoriť prepojený posun"
 
-#: ../src/splivarot.cpp:1160 ../src/splivarot.cpp:1229
+#: ../src/splivarot.cpp:1182 ../src/splivarot.cpp:1251
 msgid "Create dynamic offset"
 msgstr "Vytvoriť dynamický posun"
 
-#: ../src/splivarot.cpp:1254
+#: ../src/splivarot.cpp:1276
 msgid "Select <b>path(s)</b> to inset/outset."
 msgstr "Vybrať <b>cestu</b> na posun dnu/von."
 
-#: ../src/splivarot.cpp:1472
+#: ../src/splivarot.cpp:1494
 msgid "Outset path"
 msgstr "Posun cesty von"
 
-#: ../src/splivarot.cpp:1472
+#: ../src/splivarot.cpp:1494
 msgid "Inset path"
 msgstr "Posun cesty dnu"
 
-#: ../src/splivarot.cpp:1474
+#: ../src/splivarot.cpp:1496
 msgid "<b>No paths</b> to inset/outset in the selection."
 msgstr "Výber <b>neobsahuje cestu</b> na posun dnu/von."
 
-#: ../src/splivarot.cpp:1652
+#: ../src/splivarot.cpp:1674
 msgid "Simplifying paths (separately):"
 msgstr "Zjednodušenie ciest (oddelene):"
 
-#: ../src/splivarot.cpp:1654
+#: ../src/splivarot.cpp:1676
 msgid "Simplifying paths:"
 msgstr "Zjednodušujú sa cesty"
 
-#: ../src/splivarot.cpp:1691
+#: ../src/splivarot.cpp:1713
 #, c-format
 msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
 msgstr "%s <b>%d</b> z <b>%d</b> ciest bolo zjednodušených..."
 
-#: ../src/splivarot.cpp:1703
+#: ../src/splivarot.cpp:1725
 #, c-format
 msgid "<b>%d</b> paths simplified."
 msgstr "<b>%d</b> ciest bolo zjednodušených."
 
-#: ../src/splivarot.cpp:1717
+#: ../src/splivarot.cpp:1739
 msgid "Select <b>path(s)</b> to simplify."
 msgstr "Vybrať <b>cestu</b> na zjednodušenie."
 
-#: ../src/splivarot.cpp:1731
+#: ../src/splivarot.cpp:1753
 msgid "Simplify"
 msgstr "Zjednodušiť"
 
-#: ../src/splivarot.cpp:1733
+#: ../src/splivarot.cpp:1755
 msgid "<b>No paths</b> to simplify in the selection."
 msgstr "Výber <b>neobsahuje cesty</b>, ktoré je možné zjednodušiť."
 
-#: ../src/sp-lpe-item.cpp:348
+#: ../src/sp-lpe-item.cpp:363
 msgid "An exception occurred during execution of the Path Effect."
 msgstr "Počas vykonávania Efektu cesty sa vyskytla výnimka."
 
@@ -10479,7 +10476,7 @@ msgstr ""
 msgid "The flowed text(s) must be <b>visible</b> in order to be put on a path."
 msgstr "Textový tok musí byť <b>viditeľný</b> aby ho bolo možné dať na cestu."
 
-#: ../src/text-chemistry.cpp:192 ../src/verbs.cpp:2364
+#: ../src/text-chemistry.cpp:192 ../src/verbs.cpp:2374
 msgid "Put text on path"
 msgstr "Umiestniť text na cestu"
 
@@ -10491,7 +10488,7 @@ msgstr "Vybrať <b>text a cestu</b> na odstránenie z cesty."
 msgid "<b>No texts-on-paths</b> in the selection."
 msgstr "Výber <b>neobsahuje text na ceste</b>."
 
-#: ../src/text-chemistry.cpp:229 ../src/verbs.cpp:2366
+#: ../src/text-chemistry.cpp:229 ../src/verbs.cpp:2376
 msgid "Remove text from path"
 msgstr "Odstráni text z cesty"
 
@@ -10679,7 +10676,7 @@ msgid "Type or edit text (%d characters); <b>Enter</b> to start new line."
 msgstr ""
 "Napíšte alebo upravte text (%d znakov); <b>Enter</b> začne nový riadok."
 
-#: ../src/text-context.cpp:1612 ../src/tools-switch.cpp:190
+#: ../src/text-context.cpp:1612 ../src/tools-switch.cpp:198
 msgid ""
 "<b>Click</b> to select or create text, <b>drag</b> to create flowed text; "
 "then type."
@@ -10695,7 +10692,7 @@ msgstr "Napísať text"
 msgid "You cannot edit <b>cloned character data</b>."
 msgstr "Nemôžete upravovať <b>klonované znakové dáta</b>."
 
-#: ../src/tools-switch.cpp:130
+#: ../src/tools-switch.cpp:132
 msgid ""
 "To edit a path, <b>click</b>, <b>Shift+click</b>, or <b>drag around</b> "
 "nodes to select them, then <b>drag</b> nodes and handles. <b>Click</b> on an "
@@ -10705,11 +10702,16 @@ msgstr ""
 "b> alebo <b>ťahania okolo</b> uzlov, potom ťahaním za uzly a úchopy cestu "
 "zmeníte. <b>Kliknutie</b> na objekt ho vyberie."
 
-#: ../src/tools-switch.cpp:136
+#: ../src/tools-switch.cpp:138
 msgid "To tweak a path by pushing, select it and drag over it."
 msgstr "Cestu doladíte tlačením tak, že ju vyberiete a ťaháte ponad ňu myšou."
 
-#: ../src/tools-switch.cpp:142
+#: ../src/tools-switch.cpp:144
+msgid "To spray a path by pushing, select it and drag over it."
+msgstr ""
+"Cestu nasprejujete tlačením tak, že ju vyberiete a ťaháte ponad ňu myšou."
+
+#: ../src/tools-switch.cpp:150
 msgid ""
 "<b>Drag</b> to create a rectangle. <b>Drag controls</b> to round corners and "
 "resize. <b>Click</b> to select."
@@ -10717,7 +10719,7 @@ msgstr ""
 "<b>Ťahaním</b> vytvoríte obdĺžnik. <b>Ťahaním ovládacích prvkov</b> zaoblíte "
 "rohy a zmeníte veľkosť. <b>Kliknutím</b> vyberiete."
 
-#: ../src/tools-switch.cpp:148
+#: ../src/tools-switch.cpp:156
 msgid ""
 "<b>Drag</b> to create a 3D box. <b>Drag controls</b> to resize in "
 "perspective. <b>Click</b> to select (with <b>Ctrl+Alt</b> for single faces)."
@@ -10725,7 +10727,7 @@ msgstr ""
 "<b>Ťahaním</b> vytvoríte kváder. <b>Ťahaním úchopov</b> meníte veľkosť v "
 "perspektívnom pohľade (pomocou <b>Ctrl+Alt</b> len pre samostatné steny)."
 
-#: ../src/tools-switch.cpp:154
+#: ../src/tools-switch.cpp:162
 msgid ""
 "<b>Drag</b> to create an ellipse. <b>Drag controls</b> to make an arc or "
 "segment. <b>Click</b> to select."
@@ -10733,7 +10735,7 @@ msgstr ""
 "<b>Ťahaním</b> vytvoríte elipsu. <b>Ťahaním úchopov</b> vytvoríte oblúk "
 "alebo segment. <b>Kliknutím</b> vyberiete."
 
-#: ../src/tools-switch.cpp:160
+#: ../src/tools-switch.cpp:168
 msgid ""
 "<b>Drag</b> to create a star. <b>Drag controls</b> to edit the star shape. "
 "<b>Click</b> to select."
@@ -10741,7 +10743,7 @@ msgstr ""
 "<b>Ťahaním</b> vytvoríte hviezdu. <b>Ťahaním úchopov</b> upravíte tvar "
 "hviezdy. <b>Kliknutím</b> vyberiete."
 
-#: ../src/tools-switch.cpp:166
+#: ../src/tools-switch.cpp:174
 msgid ""
 "<b>Drag</b> to create a spiral. <b>Drag controls</b> to edit the spiral "
 "shape. <b>Click</b> to select."
@@ -10749,7 +10751,7 @@ msgstr ""
 "<b>Ťahaním</b> vytvoríte špirálu. <b>Ťahaním úchopov</b> upravíte tvar "
 "špirály. <b>Kliknutím</b> vyberiete."
 
-#: ../src/tools-switch.cpp:172
+#: ../src/tools-switch.cpp:180
 msgid ""
 "<b>Drag</b> to create a freehand line. <b>Shift</b> appends to selected "
 "path, <b>Alt</b> activates sketch mode."
@@ -10758,7 +10760,7 @@ msgstr ""
 "<b>Shift</b> pre pokračovanie vo vybranej ceste, <b>Alt</b> aktivuje režim "
 "skicy."
 
-#: ../src/tools-switch.cpp:178
+#: ../src/tools-switch.cpp:186
 msgid ""
 "<b>Click</b> or <b>click and drag</b> to start a path; with <b>Shift</b> to "
 "append to selected path. <b>Ctrl+click</b> to create single dots (straight "
@@ -10768,7 +10770,7 @@ msgstr ""
 "<b>Shift</b> pridáte k vybranej ceste. <b>Ctrl+kliknutím</b> vytvoríte "
 "jednotlivé bodky (iba režimy priamych čiar)."
 
-#: ../src/tools-switch.cpp:184
+#: ../src/tools-switch.cpp:192
 msgid ""
 "<b>Drag</b> to draw a calligraphic stroke; with <b>Ctrl</b> to track a guide "
 "path. <b>Arrow keys</b> adjust width (left/right) and angle (up/down)."
@@ -10777,7 +10779,7 @@ msgstr ""
 "vodidlo. Šípky <b>vľavo</b>/<b>vpravo</b> dolaďujú šírku, <b>nahor</b>/"
 "<b>nadol</b> upravujú uhol."
 
-#: ../src/tools-switch.cpp:196
+#: ../src/tools-switch.cpp:204
 msgid ""
 "<b>Drag</b> or <b>double click</b> to create a gradient on selected objects, "
 "<b>drag handles</b> to adjust gradients."
@@ -10785,7 +10787,7 @@ msgstr ""
 "<b>Ťahaním</b> alebo <b>dvojitým kliknutím</b> vytvoríte farebný prechod na "
 "vybraných objektoch. <b>Ťahaním úchopov</b> doladíte farebný prechod."
 
-#: ../src/tools-switch.cpp:202
+#: ../src/tools-switch.cpp:210
 msgid ""
 "<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to "
 "zoom out."
@@ -10793,11 +10795,11 @@ msgstr ""
 "<b>Kliknutím</b> alebo <b>ťahaním oblasti</b> priblížite, <b>Shift"
 "+kliknutím</b> oddialite."
 
-#: ../src/tools-switch.cpp:214
+#: ../src/tools-switch.cpp:222
 msgid "<b>Click and drag</b> between shapes to create a connector."
 msgstr "<b>Kliknutím a ťahaním</b> medzi tvarmi vytvoríte konektor."
 
-#: ../src/tools-switch.cpp:220
+#: ../src/tools-switch.cpp:228
 msgid ""
 "<b>Click</b> to paint a bounded area, <b>Shift+click</b> to union the new "
 "fill with the current selection, <b>Ctrl+click</b> to change the clicked "
@@ -10807,11 +10809,11 @@ msgstr ""
 "zjednotíte novú výplň s aktuálnym výberom, <b>Ctrl+kliknutím</b> zmeníte "
 "výplň a ťah objektu, na ktorý klikáte na aktuálne nastavenie."
 
-#: ../src/tools-switch.cpp:226
+#: ../src/tools-switch.cpp:234
 msgid "<b>Drag</b> to erase."
 msgstr "<b>Ťahaním</b> vymazať."
 
-#: ../src/tools-switch.cpp:232
+#: ../src/tools-switch.cpp:240
 msgid "Choose a subtool from the toolbar"
 msgstr "Vyberte podnástroj z panelu nástrojov"
 
@@ -11086,7 +11088,7 @@ msgid "Create link"
 msgstr "Vytvoriť odkaz"
 
 #. "Ungroup"
-#: ../src/ui/context-menu.cpp:306 ../src/verbs.cpp:2360
+#: ../src/ui/context-menu.cpp:306 ../src/verbs.cpp:2370
 msgid "_Ungroup"
 msgstr "Z_rušiť zoskupenie"
 
@@ -11197,12 +11199,12 @@ msgstr "Zvislá medzera:"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:509
 #: ../src/ui/dialog/align-and-distribute.cpp:789
-#: ../src/widgets/toolbox.cpp:7068
+#: ../src/widgets/toolbox.cpp:7475
 msgid "Remove overlaps"
 msgstr "Odstrániť presahy"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:540
-#: ../src/widgets/toolbox.cpp:6931
+#: ../src/widgets/toolbox.cpp:7265
 msgid "Arrange connector network"
 msgstr "Rozmiestniť sieť konektorov"
 
@@ -11227,7 +11229,7 @@ msgid "Connector network layout"
 msgstr "Rozloženie siete konektorov"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:791
-#: ../src/widgets/toolbox.cpp:2083
+#: ../src/widgets/toolbox.cpp:2110
 msgid "Nodes"
 msgstr "Uzly"
 
@@ -11248,8 +11250,8 @@ msgid "Align left edges"
 msgstr "Zarovnať ľavé strany"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:810
-msgid "Center objects horizontally"
-msgstr "Centrovať vybrané objekty vodorovne"
+msgid "Center on vertical axis"
+msgstr "Centrovať na zvislej osi"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:813
 msgid "Align right sides"
@@ -11343,7 +11345,7 @@ msgstr ""
 "Posunúť objekty tak málo ako sa dá, aby sa ich ohraničenia neprekrývali"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:893
-#: ../src/widgets/toolbox.cpp:7031
+#: ../src/widgets/toolbox.cpp:7436
 msgid "Nicely arrange selected connector network"
 msgstr "Pekne rozmiestniť zvolenú sieť konektorov"
 
@@ -11383,7 +11385,7 @@ msgstr "Najmenší objekt"
 #: ../src/ui/dialog/align-and-distribute.cpp:921
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1414
 #: ../src/ui/dialog/icon-preview.cpp:178
-#: ../src/widgets/desktop-widget.cpp:1581
+#: ../src/widgets/desktop-widget.cpp:1580
 msgid "Selection"
 msgstr "Výber"
 
@@ -11404,7 +11406,7 @@ msgstr "Názov profilu:"
 #.
 #. -----------
 #: ../src/ui/dialog/calligraphic-profile-rename.cpp:52
-#: ../src/ui/dialog/inkscape-preferences.cpp:1145
+#: ../src/ui/dialog/inkscape-preferences.cpp:1156
 msgid "Save"
 msgstr "Uložiť"
 
@@ -11561,18 +11563,18 @@ msgid "Remove selected grid."
 msgstr "Odstrániť vybranú mriežku."
 
 #: ../src/ui/dialog/document-properties.cpp:119
-#: ../src/widgets/toolbox.cpp:2172
+#: ../src/widgets/toolbox.cpp:2199
 msgid "Guides"
 msgstr "Vodidlá"
 
 #: ../src/ui/dialog/document-properties.cpp:120
-#: ../src/ui/dialog/inkscape-preferences.cpp:1014
-#: ../src/widgets/toolbox.cpp:2163
+#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+#: ../src/widgets/toolbox.cpp:2190
 msgid "Grids"
 msgstr "Mriežky"
 
-#: ../src/ui/dialog/document-properties.cpp:121 ../src/verbs.cpp:2587
-#: ../src/widgets/toolbox.cpp:2028
+#: ../src/ui/dialog/document-properties.cpp:121 ../src/verbs.cpp:2601
+#: ../src/widgets/toolbox.cpp:2055
 msgid "Snap"
 msgstr "Prichytávanie"
 
@@ -11708,7 +11710,7 @@ msgstr "Adresár farebných profilov (%s) je nedostupný."
 #. Inkscape::GC::release(defsRepr);
 #. inform the document, so we can undo
 #. Color Management
-#: ../src/ui/dialog/document-properties.cpp:451 ../src/verbs.cpp:2739
+#: ../src/ui/dialog/document-properties.cpp:451 ../src/verbs.cpp:2755
 msgid "Link Color Profile"
 msgstr "Pripojiť farebný profil"
 
@@ -11775,7 +11777,7 @@ msgstr "Informácie"
 #: ../share/extensions/dxf_input.inx.h:9
 #: ../share/extensions/dxf_outlines.inx.h:8
 #: ../share/extensions/lindenmayer.inx.h:23
-#: ../share/extensions/measure.inx.h:2
+#: ../share/extensions/measure.inx.h:2 ../share/extensions/scour.inx.h:4
 msgid "Help"
 msgstr "Pomocník"
 
@@ -12127,8 +12129,8 @@ msgid "Height of filter effects region"
 msgstr "Výška oblasti efektov filtra"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2165
-#: ../src/widgets/toolbox.cpp:3859 ../src/widgets/toolbox.cpp:4250
-#: ../share/extensions/extrude.inx.h:4
+#: ../src/widgets/toolbox.cpp:3886 ../src/widgets/toolbox.cpp:4277
+#: ../src/widgets/toolbox.cpp:4545 ../share/extensions/extrude.inx.h:4
 msgid "Mode:"
 msgstr "Režim:"
 
@@ -12354,7 +12356,7 @@ msgid "The whole filter region will be filled with this color."
 msgstr "Celá oblasť filtra sa zaplní touto farbou."
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2214
-#: ../src/widgets/toolbox.cpp:5299
+#: ../src/widgets/toolbox.cpp:5518
 msgid "Opacity:"
 msgstr "Krytie:"
 
@@ -12773,7 +12775,7 @@ msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:204
 #: ../src/ui/dialog/tracedialog.cpp:420 ../src/ui/dialog/tracedialog.cpp:453
-#: ../src/ui/dialog/tracedialog.cpp:596 ../src/widgets/toolbox.cpp:7185
+#: ../src/ui/dialog/tracedialog.cpp:596 ../src/widgets/toolbox.cpp:7617
 msgid "Threshold:"
 msgstr "Prah:"
 
@@ -13210,31 +13212,37 @@ msgstr ""
 "milisekundách). Hodnota 0 zobrazuje obrys až pokým myš neopustí cestu."
 
 #. Tweak
-#: ../src/ui/dialog/inkscape-preferences.cpp:447 ../src/verbs.cpp:2504
+#: ../src/ui/dialog/inkscape-preferences.cpp:447 ../src/verbs.cpp:2514
 msgid "Tweak"
 msgstr "Doladenie"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:448
+#: ../src/ui/dialog/inkscape-preferences.cpp:454
 msgid "Paint objects with:"
 msgstr "Vyfarbiť objekty s:"
 
+#. Spray
+#: ../src/ui/dialog/inkscape-preferences.cpp:453 ../src/verbs.cpp:2516
+msgid "Spray"
+msgstr "Sprej"
+
 #. Zoom
-#: ../src/ui/dialog/inkscape-preferences.cpp:453
-#: ../src/ui/view/edit-widget.cpp:1062 ../src/verbs.cpp:2526
+#: ../src/ui/dialog/inkscape-preferences.cpp:459
+#: ../src/ui/view/edit-widget.cpp:1068 ../src/verbs.cpp:2538
 #: ../src/widgets/desktop-widget.cpp:483
 msgid "Zoom"
 msgstr "Lupa"
 
 #. Shapes
-#: ../src/ui/dialog/inkscape-preferences.cpp:458
+#: ../src/ui/dialog/inkscape-preferences.cpp:464
 msgid "Shapes"
 msgstr "Tvary"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:490
+#: ../src/ui/dialog/inkscape-preferences.cpp:496
 msgid "Sketch mode"
 msgstr "Režim skice"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:492
+#: ../src/ui/dialog/inkscape-preferences.cpp:498
 msgid ""
 "If on, the sketch result will be the normal average of all sketches made, "
 "instead of averaging the old result with the new sketch."
@@ -13243,16 +13251,16 @@ msgstr ""
 "urobených skíc namiesto spriemerovania starého výsledku s novou skicou."
 
 #. Pen
-#: ../src/ui/dialog/inkscape-preferences.cpp:495 ../src/verbs.cpp:2518
+#: ../src/ui/dialog/inkscape-preferences.cpp:501 ../src/verbs.cpp:2530
 msgid "Pen"
 msgstr "Pero"
 
 #. Calligraphy
-#: ../src/ui/dialog/inkscape-preferences.cpp:501 ../src/verbs.cpp:2520
+#: ../src/ui/dialog/inkscape-preferences.cpp:507 ../src/verbs.cpp:2532
 msgid "Calligraphy"
 msgstr "Kaligrafická čiara"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:505
+#: ../src/ui/dialog/inkscape-preferences.cpp:511
 msgid ""
 "If on, pen width is in absolute units (px) independent of zoom; otherwise "
 "pen width depends on zoom so that it looks the same at any zoom"
@@ -13261,7 +13269,7 @@ msgstr ""
 "na mierke zobrazenia; inak hrúbka pera závisí na mierke zobrazenia tak, že "
 "je rovnaká pri každej mierke"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:507
+#: ../src/ui/dialog/inkscape-preferences.cpp:513
 msgid ""
 "If on, each newly created object will be selected (deselecting previous "
 "selection)"
@@ -13270,87 +13278,98 @@ msgstr ""
 "predchádzajúci výber)"
 
 #. Paint Bucket
-#: ../src/ui/dialog/inkscape-preferences.cpp:509 ../src/verbs.cpp:2532
+#: ../src/ui/dialog/inkscape-preferences.cpp:515 ../src/verbs.cpp:2544
 msgid "Paint Bucket"
 msgstr "Vedro s farbou"
 
 #. Eraser
-#: ../src/ui/dialog/inkscape-preferences.cpp:514 ../src/verbs.cpp:2536
+#: ../src/ui/dialog/inkscape-preferences.cpp:520 ../src/verbs.cpp:2548
 msgid "Eraser"
 msgstr "Guma"
 
 #. LPETool
-#: ../src/ui/dialog/inkscape-preferences.cpp:518 ../src/verbs.cpp:2538
+#: ../src/ui/dialog/inkscape-preferences.cpp:524 ../src/verbs.cpp:2550
 msgid "LPE Tool"
 msgstr "Nástroj efektov cesty"
 
+#: ../src/ui/dialog/inkscape-preferences.cpp:533
+msgid "Show font samples in the drop-down list"
+msgstr "Zobrazovať vzorky písiem v roletovom menu"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:534
+msgid ""
+"Show font samples alongside font names in the drop-down list in Text bar"
+msgstr ""
+"Zobrazovať vzorky písiem spolu s názvami písiem v roletovom menu v Textovom "
+"paneli"
+
 #. Gradient
-#: ../src/ui/dialog/inkscape-preferences.cpp:528 ../src/verbs.cpp:2524
+#: ../src/ui/dialog/inkscape-preferences.cpp:539 ../src/verbs.cpp:2536
 msgid "Gradient"
 msgstr "Lineárny prechod"
 
 #. Connector
-#: ../src/ui/dialog/inkscape-preferences.cpp:532 ../src/verbs.cpp:2530
+#: ../src/ui/dialog/inkscape-preferences.cpp:543 ../src/verbs.cpp:2542
 msgid "Connector"
 msgstr "Konektor"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:535
+#: ../src/ui/dialog/inkscape-preferences.cpp:546
 msgid "If on, connector attachment points will not be shown for text objects"
 msgstr ""
 "Ak je voľba zapnutá, spojovacie body konektora sa nezobrazia pre textové "
 "objekty"
 
 #. Dropper
-#: ../src/ui/dialog/inkscape-preferences.cpp:537 ../src/verbs.cpp:2528
+#: ../src/ui/dialog/inkscape-preferences.cpp:548 ../src/verbs.cpp:2540
 msgid "Dropper"
 msgstr "Pipeta"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:544
+#: ../src/ui/dialog/inkscape-preferences.cpp:555
 msgid "Save and restore window geometry for each document"
 msgstr "Uložiť a obnoviť geometriu okna pre každý dokument"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:545
+#: ../src/ui/dialog/inkscape-preferences.cpp:556
 msgid "Remember and use last window's geometry"
 msgstr "Zapamätať si a použiť poslednú geometriu okien"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:546
+#: ../src/ui/dialog/inkscape-preferences.cpp:557
 msgid "Don't save window geometry"
 msgstr "Neukladať geometriu okien"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:548
-#: ../src/ui/dialog/inkscape-preferences.cpp:568
+#: ../src/ui/dialog/inkscape-preferences.cpp:559
+#: ../src/ui/dialog/inkscape-preferences.cpp:579
 msgid "Dockable"
 msgstr "Ukotviteľné"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:551
+#: ../src/ui/dialog/inkscape-preferences.cpp:562
 msgid "Dialogs are hidden in taskbar"
 msgstr "Dialógy sú skryté v paneli úloh"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:552
+#: ../src/ui/dialog/inkscape-preferences.cpp:563
 msgid "Zoom when window is resized"
 msgstr "Zmena mierky zobrazenia  pri zmene veľkosti okna"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:553
+#: ../src/ui/dialog/inkscape-preferences.cpp:564
 msgid "Show close button on dialogs"
 msgstr "Zobraziť tlačidlá zatvoriť na dialógoch"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:555
+#: ../src/ui/dialog/inkscape-preferences.cpp:566
 msgid "Normal"
 msgstr "Normálne"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:556
+#: ../src/ui/dialog/inkscape-preferences.cpp:567
 msgid "Aggressive"
 msgstr "Agresívne"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:558
+#: ../src/ui/dialog/inkscape-preferences.cpp:569
 msgid "Saving window geometry (size and position):"
 msgstr "Uložiť geometriu okien (veľkosť a polohu):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:560
+#: ../src/ui/dialog/inkscape-preferences.cpp:571
 msgid "Let the window manager determine placement of all windows"
 msgstr "Nechať správcu okien určiť umiestnenie všetkých okien"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:562
+#: ../src/ui/dialog/inkscape-preferences.cpp:573
 msgid ""
 "Remember and use the last window's geometry (saves geometry to user "
 "preferences)"
@@ -13358,7 +13377,7 @@ msgstr ""
 "Pamätať si a používať poslednú geometriu okna (ukladá geometriu v "
 "používateľských nastaveniach)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:564
+#: ../src/ui/dialog/inkscape-preferences.cpp:575
 msgid ""
 "Save and restore window geometry for each document (saves geometry in the "
 "document)"
@@ -13366,52 +13385,52 @@ msgstr ""
 "Uložiť a obnoviť geometriu okna pre každý dokument (ukladá geometriu v "
 "dokumente)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:566
+#: ../src/ui/dialog/inkscape-preferences.cpp:577
 msgid "Dialog behavior (requires restart):"
 msgstr "Správanie dialógov (vyžaduje reštart)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:573
+#: ../src/ui/dialog/inkscape-preferences.cpp:584
 msgid "Dialogs on top:"
 msgstr "Dialógy na vrchu:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:576
+#: ../src/ui/dialog/inkscape-preferences.cpp:587
 msgid "Dialogs are treated as regular windows"
 msgstr "Dialógy sa považujú za bežné okná"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:578
+#: ../src/ui/dialog/inkscape-preferences.cpp:589
 msgid "Dialogs stay on top of document windows"
 msgstr "Dialógy zostávajú na vrchu okien dokumentov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:580
+#: ../src/ui/dialog/inkscape-preferences.cpp:591
 msgid "Same as Normal but may work better with some window managers"
 msgstr ""
 "To isté ako Normálne, ale môže lepšie fungovať s niektorými správcami okien"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:584
+#: ../src/ui/dialog/inkscape-preferences.cpp:595
 msgid "Dialog Transparency:"
 msgstr "Priesvitnosť dialógu:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:586
+#: ../src/ui/dialog/inkscape-preferences.cpp:597
 msgid "Opacity when focused:"
 msgstr "Krytie pri zameraní:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:588
+#: ../src/ui/dialog/inkscape-preferences.cpp:599
 msgid "Opacity when unfocused:"
 msgstr "Krytie keď nie je zamerané:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:590
+#: ../src/ui/dialog/inkscape-preferences.cpp:601
 msgid "Time of opacity change animation:"
 msgstr "Trvanie animácie zmeny krytia:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:593
+#: ../src/ui/dialog/inkscape-preferences.cpp:604
 msgid "Miscellaneous:"
 msgstr "Rôzne:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:596
+#: ../src/ui/dialog/inkscape-preferences.cpp:607
 msgid "Whether dialog windows are to be hidden in the window manager taskbar"
 msgstr "Či je možné okná dialógov skryť v pracovných úlohách správcu okien"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:599
+#: ../src/ui/dialog/inkscape-preferences.cpp:610
 msgid ""
 "Zoom drawing when document window is resized, to keep the same area visible "
 "(this is the default which can be changed in any window using the button "
@@ -13421,47 +13440,47 @@ msgstr ""
 "zobrazená rovnaká oblasť (toto je štandard, ktorý je možné zmeniť v "
 "ktoromkoľvek okne pomocou lupy nad posuvníkmi)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:601
+#: ../src/ui/dialog/inkscape-preferences.cpp:612
 msgid "Whether dialog windows have a close button (requires restart)"
 msgstr "Či dialógové okná majú tlačidlo „zatvoriť“ (vyžaduje reštart)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:602
+#: ../src/ui/dialog/inkscape-preferences.cpp:613
 msgid "Windows"
 msgstr "Okná"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:607
+#: ../src/ui/dialog/inkscape-preferences.cpp:618
 msgid "Move in parallel"
 msgstr "sa posúvajú paralelne"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:609
+#: ../src/ui/dialog/inkscape-preferences.cpp:620
 msgid "Stay unmoved"
 msgstr "zostanú nepohnuté"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:611
+#: ../src/ui/dialog/inkscape-preferences.cpp:622
 msgid "Move according to transform"
 msgstr "sa posúvajú podľa transformácie"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:613
+#: ../src/ui/dialog/inkscape-preferences.cpp:624
 msgid "Are unlinked"
 msgstr "sa odpoja"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:615
+#: ../src/ui/dialog/inkscape-preferences.cpp:626
 msgid "Are deleted"
 msgstr "sú zmazané"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:618
+#: ../src/ui/dialog/inkscape-preferences.cpp:629
 msgid "When the original moves, its clones and linked offsets:"
 msgstr "Keď sa posunie originál, jeho klony a prepojené posuny:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:620
+#: ../src/ui/dialog/inkscape-preferences.cpp:631
 msgid "Clones are translated by the same vector as their original."
 msgstr "Klony sú posunuté rovnakým vektorom ako ich originál."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:622
+#: ../src/ui/dialog/inkscape-preferences.cpp:633
 msgid "Clones preserve their positions when their original is moved."
 msgstr "Klony si zachovajú svoju pozíciu, keď sa originál premiestni."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:624
+#: ../src/ui/dialog/inkscape-preferences.cpp:635
 msgid ""
 "Each clone moves according to the value of its transform= attribute. For "
 "example, a rotated clone will move in a different direction than its "
@@ -13470,27 +13489,27 @@ msgstr ""
 "Každý klon sa posúva podľa hodnoty jeho atribútu transform=. Napríklad "
 "otočený klon sa posunie iným smerom ako jeho originál."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:625
+#: ../src/ui/dialog/inkscape-preferences.cpp:636
 msgid "When the original is deleted, its clones:"
 msgstr "Keď je originál zmazaný, jeho klony:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:627
+#: ../src/ui/dialog/inkscape-preferences.cpp:638
 msgid "Orphaned clones are converted to regular objects."
 msgstr "Osirotené klony sa skonvertujú na regulárne objekty."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:629
+#: ../src/ui/dialog/inkscape-preferences.cpp:640
 msgid "Orphaned clones are deleted along with their original."
 msgstr "Osirotené klony sú odstránené spolu so svojím originálom."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:631
+#: ../src/ui/dialog/inkscape-preferences.cpp:642
 msgid "When duplicating original+clones:"
 msgstr "Pri duplikovaní originálu+klonov:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:633
+#: ../src/ui/dialog/inkscape-preferences.cpp:644
 msgid "Relink duplicated clones"
 msgstr "Znovu pripojiť duplicitné klony"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:635
+#: ../src/ui/dialog/inkscape-preferences.cpp:646
 msgid ""
 "When duplicating a selection containing both a clone and its original "
 "(possibly in groups), relink the duplicated clone to the duplicated original "
@@ -13501,90 +13520,90 @@ msgstr ""
 "originálu namiesto originálu:"
 
 #. TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page
-#: ../src/ui/dialog/inkscape-preferences.cpp:638
+#: ../src/ui/dialog/inkscape-preferences.cpp:649
 msgid "Clones"
 msgstr "Klony"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:643
+#: ../src/ui/dialog/inkscape-preferences.cpp:654
 msgid "When applying, use the topmost selected object as clippath/mask"
 msgstr ""
 "Pri použití zmien použiť najvrchnejší vybraný objekt ako orezávaciu cestu "
 "alebo masku"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:645
+#: ../src/ui/dialog/inkscape-preferences.cpp:656
 msgid ""
 "Uncheck this to use the bottom selected object as the clipping path or mask"
 msgstr ""
 "Odznačte túto voľbu, aby sa použil spodný vybraný objekt ako orezávacia "
 "cesta alebo maska"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:646
+#: ../src/ui/dialog/inkscape-preferences.cpp:657
 msgid "Remove clippath/mask object after applying"
 msgstr "Odstrániť objekt orezávacej cesty/masky po použití"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:648
+#: ../src/ui/dialog/inkscape-preferences.cpp:659
 msgid ""
 "After applying, remove the object used as the clipping path or mask from the "
 "drawing"
 msgstr ""
 "Po použití odstráni z kresby objekt použitý ako orezávacia cesta či maska"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:649
+#: ../src/ui/dialog/inkscape-preferences.cpp:660
 msgid "Clippaths and masks"
 msgstr "Orezávacie cesty a masky:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:654
+#: ../src/ui/dialog/inkscape-preferences.cpp:665
 #: ../src/widgets/select-toolbar.cpp:544
 msgid "Scale stroke width"
 msgstr "Zmeniť mierku šírky ťahu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:655
+#: ../src/ui/dialog/inkscape-preferences.cpp:666
 msgid "Scale rounded corners in rectangles"
 msgstr "Zmeniť mierku zaoblených rohov v pravouholníkoch"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:656
+#: ../src/ui/dialog/inkscape-preferences.cpp:667
 msgid "Transform gradients"
 msgstr "Transformácia prechodov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:657
+#: ../src/ui/dialog/inkscape-preferences.cpp:668
 msgid "Transform patterns"
 msgstr "Transformácia vzoriek"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:658
+#: ../src/ui/dialog/inkscape-preferences.cpp:669
 msgid "Optimized"
 msgstr "Optimalizované"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:659
+#: ../src/ui/dialog/inkscape-preferences.cpp:670
 msgid "Preserved"
 msgstr "Zachované"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:662
+#: ../src/ui/dialog/inkscape-preferences.cpp:673
 #: ../src/widgets/select-toolbar.cpp:545
 msgid "When scaling objects, scale the stroke width by the same proportion"
 msgstr "Keď sa mení mierka objektov, rovnakou mierou sa mení aj šírka ťahu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:664
+#: ../src/ui/dialog/inkscape-preferences.cpp:675
 #: ../src/widgets/select-toolbar.cpp:556
 msgid "When scaling rectangles, scale the radii of rounded corners"
 msgstr ""
 "Keď sa mení mierka pravouholníkov, rovnakou mierou sa mení aj polomer "
 "zaokrúhlenia rohov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:666
+#: ../src/ui/dialog/inkscape-preferences.cpp:677
 #: ../src/widgets/select-toolbar.cpp:567
 msgid "Move gradients (in fill or stroke) along with the objects"
 msgstr "Presúvať prechody (vo výplni a ťahu) spolu s objektami"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:668
+#: ../src/ui/dialog/inkscape-preferences.cpp:679
 #: ../src/widgets/select-toolbar.cpp:578
 msgid "Move patterns (in fill or stroke) along with the objects"
 msgstr "Presúvať vzorky (vo výplni a ťahu) spolu s objektami"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:669
+#: ../src/ui/dialog/inkscape-preferences.cpp:680
 msgid "Store transformation:"
 msgstr "Uložiť transformáciu:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:671
+#: ../src/ui/dialog/inkscape-preferences.cpp:682
 msgid ""
 "If possible, apply transformation to objects without adding a transform= "
 "attribute"
@@ -13592,47 +13611,47 @@ msgstr ""
 "Ak je možné, tak použiť transformáciu na objekt bez pridania atribútu "
 "transform="
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:673
+#: ../src/ui/dialog/inkscape-preferences.cpp:684
 msgid "Always store transformation as a transform= attribute on objects"
 msgstr "Vždy uložiť transformáciu ako atribút objektu transform="
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:675
+#: ../src/ui/dialog/inkscape-preferences.cpp:686
 msgid "Transforms"
 msgstr "Transformácie"
 
 #. blur quality
 #. filter quality
-#: ../src/ui/dialog/inkscape-preferences.cpp:681
-#: ../src/ui/dialog/inkscape-preferences.cpp:705
+#: ../src/ui/dialog/inkscape-preferences.cpp:692
+#: ../src/ui/dialog/inkscape-preferences.cpp:716
 msgid "Best quality (slowest)"
 msgstr "Najlepšia kvalita (najpomalšie)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:683
-#: ../src/ui/dialog/inkscape-preferences.cpp:707
+#: ../src/ui/dialog/inkscape-preferences.cpp:694
+#: ../src/ui/dialog/inkscape-preferences.cpp:718
 msgid "Better quality (slower)"
 msgstr "Lepšia kvalita (pomalšie)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:685
-#: ../src/ui/dialog/inkscape-preferences.cpp:709
+#: ../src/ui/dialog/inkscape-preferences.cpp:696
+#: ../src/ui/dialog/inkscape-preferences.cpp:720
 msgid "Average quality"
 msgstr "Stredná kvalita"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:687
-#: ../src/ui/dialog/inkscape-preferences.cpp:711
+#: ../src/ui/dialog/inkscape-preferences.cpp:698
+#: ../src/ui/dialog/inkscape-preferences.cpp:722
 msgid "Lower quality (faster)"
 msgstr "Nižšia kvalita (rýchlejšie)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:689
-#: ../src/ui/dialog/inkscape-preferences.cpp:713
+#: ../src/ui/dialog/inkscape-preferences.cpp:700
+#: ../src/ui/dialog/inkscape-preferences.cpp:724
 msgid "Lowest quality (fastest)"
 msgstr "Najnižšia kvalita (rýchlejšie)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:692
+#: ../src/ui/dialog/inkscape-preferences.cpp:703
 msgid "Gaussian blur quality for display:"
 msgstr "Kvalita zobrazenia gaussovského rozostrenia:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:694
-#: ../src/ui/dialog/inkscape-preferences.cpp:718
+#: ../src/ui/dialog/inkscape-preferences.cpp:705
+#: ../src/ui/dialog/inkscape-preferences.cpp:729
 msgid ""
 "Best quality, but display may be very slow at high zooms (bitmap export "
 "always uses best quality)"
@@ -13640,37 +13659,37 @@ msgstr ""
 "Najlepšia kvalita, ale pri veľkom priblížení môže byť zobrazenie veľmi "
 "pomalé  (export bitmáp používa vždy najlepšiu kvalitu)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:696
-#: ../src/ui/dialog/inkscape-preferences.cpp:720
+#: ../src/ui/dialog/inkscape-preferences.cpp:707
+#: ../src/ui/dialog/inkscape-preferences.cpp:731
 msgid "Better quality, but slower display"
 msgstr "Lepšia kvalita, ale pomalšie zobrazovanie"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:698
-#: ../src/ui/dialog/inkscape-preferences.cpp:722
+#: ../src/ui/dialog/inkscape-preferences.cpp:709
+#: ../src/ui/dialog/inkscape-preferences.cpp:733
 msgid "Average quality, acceptable display speed"
 msgstr "Priemerná kvalita, prijateľná rýchlosť zobrazovania"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:700
-#: ../src/ui/dialog/inkscape-preferences.cpp:724
+#: ../src/ui/dialog/inkscape-preferences.cpp:711
+#: ../src/ui/dialog/inkscape-preferences.cpp:735
 msgid "Lower quality (some artifacts), but display is faster"
 msgstr ""
 "Nižšia kvalita (môžu sa vyskytnúť artefakty), ale zobrazovanie je rýchlejšie"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:702
-#: ../src/ui/dialog/inkscape-preferences.cpp:726
+#: ../src/ui/dialog/inkscape-preferences.cpp:713
+#: ../src/ui/dialog/inkscape-preferences.cpp:737
 msgid "Lowest quality (considerable artifacts), but display is fastest"
 msgstr "Najnižšia kvalita (značné artefakty), ale najrýchlejšie zobrazovanie"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:716
+#: ../src/ui/dialog/inkscape-preferences.cpp:727
 msgid "Filter effects quality for display:"
 msgstr "Kvalita zobrazenia efektov filtra:"
 
 #. show infobox
-#: ../src/ui/dialog/inkscape-preferences.cpp:729
+#: ../src/ui/dialog/inkscape-preferences.cpp:740
 msgid "Show filter primitives infobox"
 msgstr "Zobraziť informačná dialóg primitív filtra"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:731
+#: ../src/ui/dialog/inkscape-preferences.cpp:742
 msgid ""
 "Show icons and descriptions for the filter primitives available at the "
 "filter effects dialog."
@@ -13678,47 +13697,47 @@ msgstr ""
 "Zobrazovať ikony a popisy primitív filtra dostupných v dialógu efektov "
 "filtra."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:739
+#: ../src/ui/dialog/inkscape-preferences.cpp:750
 msgid "Select in all layers"
 msgstr "Vybrať vo všetkých vrstvách"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:740
+#: ../src/ui/dialog/inkscape-preferences.cpp:751
 msgid "Select only within current layer"
 msgstr "Vyberať len v aktuálnej vrstve"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:741
+#: ../src/ui/dialog/inkscape-preferences.cpp:752
 msgid "Select in current layer and sublayers"
 msgstr "Vyberať v aktuálnej vrstve a podvrstvách"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:742
+#: ../src/ui/dialog/inkscape-preferences.cpp:753
 msgid "Ignore hidden objects and layers"
 msgstr "Ignorovať skryté objekty a vrstvy"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:743
+#: ../src/ui/dialog/inkscape-preferences.cpp:754
 msgid "Ignore locked objects and layers"
 msgstr "Ignorovať zamknuté objekty a vrstvy"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:744
+#: ../src/ui/dialog/inkscape-preferences.cpp:755
 msgid "Deselect upon layer change"
 msgstr "Zrušiť výber pri zmene vrstvy"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:746
+#: ../src/ui/dialog/inkscape-preferences.cpp:757
 msgid "Ctrl+A, Tab, Shift+Tab:"
 msgstr "Ctrl+A, Tab, Shift+Tab:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:748
+#: ../src/ui/dialog/inkscape-preferences.cpp:759
 msgid "Make keyboard selection commands work on objects in all layers"
 msgstr ""
 "Nech príkazy výberu pomocou klávesnice fungujú na objektoch vo všetkých "
 "vrstvách"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:750
+#: ../src/ui/dialog/inkscape-preferences.cpp:761
 msgid "Make keyboard selection commands work on objects in current layer only"
 msgstr ""
 "Nech príkazy výberu pomocou klávesnice fungujú na objektoch iba z aktuálnej "
 "vrstvy"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:752
+#: ../src/ui/dialog/inkscape-preferences.cpp:763
 msgid ""
 "Make keyboard selection commands work on objects in current layer and all "
 "its sublayers"
@@ -13726,7 +13745,7 @@ msgstr ""
 "Nech príkazy výberu pomocou klávesnice fungujú na objektoch iba z aktuálnej "
 "vrstvy a jej podvrstiev"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:754
+#: ../src/ui/dialog/inkscape-preferences.cpp:765
 msgid ""
 "Uncheck this to be able to select objects that are hidden (either by "
 "themselves or by being in a hidden layer)"
@@ -13734,7 +13753,7 @@ msgstr ""
 "Odznačením tejto voľby umožníte výber objektov, ktoré sú skryté (buď samé "
 "alebo tým, že sú v skrytej skupine či vrstve)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:756
+#: ../src/ui/dialog/inkscape-preferences.cpp:767
 msgid ""
 "Uncheck this to be able to select objects that are locked (either by "
 "themselves or by being in a locked layer)"
@@ -13742,7 +13761,7 @@ msgstr ""
 "Odznačením tejto voľby umožníte výber objektov, ktoré sú zamknuté (buď samé "
 "alebo tým, že sú v zamknutej skupine či vrstve)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:759
+#: ../src/ui/dialog/inkscape-preferences.cpp:770
 msgid ""
 "Uncheck this to be able to keep the current objects selected when the "
 "current layer changes"
@@ -13750,23 +13769,23 @@ msgstr ""
 "Odznačením tejto voľby umožníte zachovať aktuálny výber objektov aj po zmene "
 "aktuálnej vrstvy"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:761
+#: ../src/ui/dialog/inkscape-preferences.cpp:772
 msgid "Selecting"
 msgstr "Výber"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:768
+#: ../src/ui/dialog/inkscape-preferences.cpp:779
 msgid "Default export resolution:"
 msgstr "Štandardné rozlíšenie pre export:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:769
+#: ../src/ui/dialog/inkscape-preferences.cpp:780
 msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
 msgstr "Štandardné rozlíšenie bitmapy (v bodoch na palec) v exportnom dialógu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:771
+#: ../src/ui/dialog/inkscape-preferences.cpp:782
 msgid "Open Clip Art Library Server Name:"
 msgstr "Názov servera Open Clip Art:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:772
+#: ../src/ui/dialog/inkscape-preferences.cpp:783
 msgid ""
 "The server name of the Open Clip Art Library webdav server. It's used by the "
 "Import and Export to OCAL function."
@@ -13774,50 +13793,50 @@ msgstr ""
 "Názov WebDAV servera  knižnice Open Clip Art. Využíva ho funkcia Import/"
 "Export do OCAL."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:774
+#: ../src/ui/dialog/inkscape-preferences.cpp:785
 msgid "Open Clip Art Library Username:"
 msgstr "Používateľské meno do Open Clip Art:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:775
+#: ../src/ui/dialog/inkscape-preferences.cpp:786
 msgid "The username used to log into Open Clip Art Library."
 msgstr ""
 "Používateľské meno, ktoré používate pre prihlásenie sa do knižnice Open Clip "
 "Art."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:777
+#: ../src/ui/dialog/inkscape-preferences.cpp:788
 msgid "Open Clip Art Library Password:"
 msgstr "Heslo do Open Clip Art:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:778
+#: ../src/ui/dialog/inkscape-preferences.cpp:789
 msgid "The password used to log into Open Clip Art Library."
 msgstr "Heslo, ktoré používate pre prihlásenie sa do knižnice Open Clip Art."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:780
+#: ../src/ui/dialog/inkscape-preferences.cpp:791
 msgid "Import/Export"
 msgstr "Import/export"
 
 #. TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:841
 msgid "Perceptual"
 msgstr "Perceptuálny"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:841
 msgid "Relative Colorimetric"
 msgstr "Relatívny kolorimetrický"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:830
+#: ../src/ui/dialog/inkscape-preferences.cpp:841
 msgid "Absolute Colorimetric"
 msgstr "Absolútna kolorimetrická"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:834
+#: ../src/ui/dialog/inkscape-preferences.cpp:845
 msgid "(Note: Color management has been disabled in this build)"
 msgstr "(Pozn.: Správa farieb bola v tomto zostavení vypnutá)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:838
+#: ../src/ui/dialog/inkscape-preferences.cpp:849
 msgid "Display adjustment"
 msgstr "Nastavenie displeja"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:848
+#: ../src/ui/dialog/inkscape-preferences.cpp:859
 #, c-format
 msgid ""
 "The ICC profile to use to calibrate display output.\n"
@@ -13826,111 +13845,111 @@ msgstr ""
 "ICC profil použitý na kalibráciu výstupu displeja.\n"
 "Prehľadané adresáre: %s"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:849
+#: ../src/ui/dialog/inkscape-preferences.cpp:860
 msgid "Display profile:"
 msgstr "Zobrazovací profil:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:854
+#: ../src/ui/dialog/inkscape-preferences.cpp:865
 msgid "Retrieve profile from display"
 msgstr "Získať profil z displeja"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:857
+#: ../src/ui/dialog/inkscape-preferences.cpp:868
 msgid "Retrieve profiles from those attached to displays via XICC."
 msgstr ""
 "Získať profil z tých, ktoré sú pripojené k displeju prostredníctvom XICC."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:859
+#: ../src/ui/dialog/inkscape-preferences.cpp:870
 msgid "Retrieve profiles from those attached to displays."
 msgstr "Získať profil z tých, ktoré sú pripojené k displejom."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:864
+#: ../src/ui/dialog/inkscape-preferences.cpp:875
 msgid "Display rendering intent:"
 msgstr "Zobrazovací zámer displeja:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:865
-#: ../src/ui/dialog/inkscape-preferences.cpp:888
+#: ../src/ui/dialog/inkscape-preferences.cpp:876
+#: ../src/ui/dialog/inkscape-preferences.cpp:899
 msgid "The rendering intent to use to calibrate display output."
 msgstr "Vykresľovací zámer, ktorý sa má použiť na kalibráciu výstupu displeja."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:867
+#: ../src/ui/dialog/inkscape-preferences.cpp:878
 msgid "Proofing"
 msgstr "Kontrola"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:869
+#: ../src/ui/dialog/inkscape-preferences.cpp:880
 msgid "Simulate output on screen"
 msgstr "Simulovať výstup na obrazovku"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:871
+#: ../src/ui/dialog/inkscape-preferences.cpp:882
 msgid "Simulates output of target device."
 msgstr "Simulovať výstup na cieľové zariadenie."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:873
+#: ../src/ui/dialog/inkscape-preferences.cpp:884
 msgid "Mark out of gamut colors"
 msgstr "Vyznačiť farby mimo gamut"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:875
+#: ../src/ui/dialog/inkscape-preferences.cpp:886
 msgid "Highlights colors that are out of gamut for the target device."
 msgstr "Zvýrazní farby, ktoré sú na cieľovom zariadení mimo gamut."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:880
+#: ../src/ui/dialog/inkscape-preferences.cpp:891
 msgid "Out of gamut warning color:"
 msgstr "Farba varovania mimo gamut:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:881
+#: ../src/ui/dialog/inkscape-preferences.cpp:892
 msgid "Selects the color used for out of gamut warning."
 msgstr "Určuje farbu, ktorá sa použije pre upozornenie mimo gamut."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:883
+#: ../src/ui/dialog/inkscape-preferences.cpp:894
 msgid "Device profile:"
 msgstr "Profil zariadenia:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:884
+#: ../src/ui/dialog/inkscape-preferences.cpp:895
 msgid "The ICC profile to use to simulate device output."
 msgstr "ICC profil, ktorý sa má použiť na simuláciu cieľového zariadenia."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:887
+#: ../src/ui/dialog/inkscape-preferences.cpp:898
 msgid "Device rendering intent:"
 msgstr "Zobrazovací zámer zariadenia:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:890
+#: ../src/ui/dialog/inkscape-preferences.cpp:901
 msgid "Black point compensation"
 msgstr "Kompenzácia čierneho bodu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:892
+#: ../src/ui/dialog/inkscape-preferences.cpp:903
 msgid "Enables black point compensation."
 msgstr "Zapína kompenzáciu čierneho bodu."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:894
+#: ../src/ui/dialog/inkscape-preferences.cpp:905
 msgid "Preserve black"
 msgstr "Zachovať čiernu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:899
+#: ../src/ui/dialog/inkscape-preferences.cpp:910
 msgid "(LittleCMS 1.15 or later required)"
 msgstr "(Vyžaduje sa LittleCMS 1.15)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:901
+#: ../src/ui/dialog/inkscape-preferences.cpp:912
 msgid "Preserve K channel in CMYK -> CMYK transforms"
 msgstr "Zachovávať K kanál pri transformáciách CMYK -> CMYK"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:914
+#: ../src/ui/dialog/inkscape-preferences.cpp:925
 #: ../src/widgets/sp-color-icc-selector.cpp:306
 #: ../src/widgets/sp-color-icc-selector.cpp:579
 msgid "<none>"
 msgstr "<žiadne>"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:959
+#: ../src/ui/dialog/inkscape-preferences.cpp:970
 msgid "Color management"
 msgstr "Správa farieb"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:964
+#: ../src/ui/dialog/inkscape-preferences.cpp:975
 msgid "Major grid line emphasizing"
 msgstr "Zvýrazňovanie hlavných čiar mriežky"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:966
+#: ../src/ui/dialog/inkscape-preferences.cpp:977
 msgid "Don't emphasize gridlines when zoomed out"
 msgstr "Nezvýrazňovať čiary mriežky pri oddialení"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:967
+#: ../src/ui/dialog/inkscape-preferences.cpp:978
 msgid ""
 "If set and zoomed out, the gridlines will be shown in normal color instead "
 "of major grid line color."
@@ -13938,78 +13957,78 @@ msgstr ""
 "Ak je voľba nastavená, pri oddialení sa čiary mriežky zobrazia bežnou farbou "
 "namiesto použitia farby hlavnej čiary mriežky."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:969
+#: ../src/ui/dialog/inkscape-preferences.cpp:980
 msgid "Default grid settings"
 msgstr "Štandardné nastavenie mriežky"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:975
-#: ../src/ui/dialog/inkscape-preferences.cpp:996
+#: ../src/ui/dialog/inkscape-preferences.cpp:986
+#: ../src/ui/dialog/inkscape-preferences.cpp:1007
 msgid "Grid units:"
 msgstr "Jednotky mriežky:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:978
-#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:989
+#: ../src/ui/dialog/inkscape-preferences.cpp:1010
 msgid "Origin X:"
 msgstr "Začiatok X:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:979
-#: ../src/ui/dialog/inkscape-preferences.cpp:1000
+#: ../src/ui/dialog/inkscape-preferences.cpp:990
+#: ../src/ui/dialog/inkscape-preferences.cpp:1011
 msgid "Origin Y:"
 msgstr "Začiatok Y:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:982
+#: ../src/ui/dialog/inkscape-preferences.cpp:993
 msgid "Spacing X:"
 msgstr "Rozostup X:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:983
-#: ../src/ui/dialog/inkscape-preferences.cpp:1002
+#: ../src/ui/dialog/inkscape-preferences.cpp:994
+#: ../src/ui/dialog/inkscape-preferences.cpp:1013
 msgid "Spacing Y:"
 msgstr "Rozostup Y:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:985
-#: ../src/ui/dialog/inkscape-preferences.cpp:986
-#: ../src/ui/dialog/inkscape-preferences.cpp:1007
-#: ../src/ui/dialog/inkscape-preferences.cpp:1008
+#: ../src/ui/dialog/inkscape-preferences.cpp:996
+#: ../src/ui/dialog/inkscape-preferences.cpp:997
+#: ../src/ui/dialog/inkscape-preferences.cpp:1018
+#: ../src/ui/dialog/inkscape-preferences.cpp:1019
 msgid "Grid line color:"
 msgstr "Farba čiar mriežky:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:986
-#: ../src/ui/dialog/inkscape-preferences.cpp:1008
+#: ../src/ui/dialog/inkscape-preferences.cpp:997
+#: ../src/ui/dialog/inkscape-preferences.cpp:1019
 msgid "Color used for normal grid lines"
 msgstr "Farbu pre bežné čiary mriežky"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:987
-#: ../src/ui/dialog/inkscape-preferences.cpp:988
-#: ../src/ui/dialog/inkscape-preferences.cpp:1009
-#: ../src/ui/dialog/inkscape-preferences.cpp:1010
+#: ../src/ui/dialog/inkscape-preferences.cpp:998
+#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:1020
+#: ../src/ui/dialog/inkscape-preferences.cpp:1021
 msgid "Major grid line color:"
 msgstr "Farba_hlavnej čiary mriežky:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:988
-#: ../src/ui/dialog/inkscape-preferences.cpp:1010
+#: ../src/ui/dialog/inkscape-preferences.cpp:999
+#: ../src/ui/dialog/inkscape-preferences.cpp:1021
 msgid "Color used for major (highlighted) grid lines"
 msgstr "Farba hlavných (zvýraznených) čiar mriežky"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:990
-#: ../src/ui/dialog/inkscape-preferences.cpp:1012
+#: ../src/ui/dialog/inkscape-preferences.cpp:1001
+#: ../src/ui/dialog/inkscape-preferences.cpp:1023
 msgid "Major grid line every:"
 msgstr "Hlavná čiara mriežky každých:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:991
+#: ../src/ui/dialog/inkscape-preferences.cpp:1002
 msgid "Show dots instead of lines"
 msgstr "Zobraziť body namiesto čiar"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:992
+#: ../src/ui/dialog/inkscape-preferences.cpp:1003
 msgid "If set, display dots at gridpoints instead of gridlines"
 msgstr ""
 "Ak je voľba nastavená, zobrazí bodky priesečníkov mriežky namiesto čiar "
 "mriežky"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1019
+#: ../src/ui/dialog/inkscape-preferences.cpp:1030
 msgid "Use named colors"
 msgstr "Použiť pomenované farby"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1020
+#: ../src/ui/dialog/inkscape-preferences.cpp:1031
 msgid ""
 "If set, write the CSS name of the color when available (e.g. 'red' or "
 "'magenta') instead of the numeric value"
@@ -14017,23 +14036,23 @@ msgstr ""
 "Ak je voľba nastavená, vypíše CSS názov farby ak existuje (napr. „red“ alebo "
 "„magenta“) namiesto jej číselnej hodnoty."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1022
+#: ../src/ui/dialog/inkscape-preferences.cpp:1033
 msgid "XML formatting"
 msgstr "Formátovanie XML"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1024
+#: ../src/ui/dialog/inkscape-preferences.cpp:1035
 msgid "Inline attributes"
 msgstr "Inline atribúty"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+#: ../src/ui/dialog/inkscape-preferences.cpp:1036
 msgid "Put attributes on the same line as the element tag"
 msgstr "Dať atribúty na rovnaký riadok ako značku elementu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+#: ../src/ui/dialog/inkscape-preferences.cpp:1039
 msgid "Indent, spaces:"
 msgstr "Odsadenie, medzery:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+#: ../src/ui/dialog/inkscape-preferences.cpp:1039
 msgid ""
 "The number of spaces to use for indenting nested elements; set to 0 for no "
 "indentation"
@@ -14041,24 +14060,24 @@ msgstr ""
 "Počet medzier, ktoré sa použijú na odsadenie vnorených prvkov. 0 znamená bez "
 "odsadenia."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1030
+#: ../src/ui/dialog/inkscape-preferences.cpp:1041
 msgid "Path data"
 msgstr "Údaje cesty"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1032
+#: ../src/ui/dialog/inkscape-preferences.cpp:1043
 msgid "Allow relative coordinates"
 msgstr "Povoliť relatívne súradnice"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1033
+#: ../src/ui/dialog/inkscape-preferences.cpp:1044
 msgid "If set, relative coordinates may be used in path data"
 msgstr ""
 "Ak je voľba nastavená, v údajoch cesty možno použiť relatívne súradnice"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1035
+#: ../src/ui/dialog/inkscape-preferences.cpp:1046
 msgid "Force repeat commands"
 msgstr "Vynútiť opakovanie príkazov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1036
+#: ../src/ui/dialog/inkscape-preferences.cpp:1047
 msgid ""
 "Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead "
 "of 'L 1,2 3,4')"
@@ -14066,23 +14085,23 @@ msgstr ""
 "Vynútiť opakovanie rovnakého príkazu (napr. výstup „L 1,2 L 3,4“ namiesto „L "
 "1,2 3,4“)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1038
+#: ../src/ui/dialog/inkscape-preferences.cpp:1049
 msgid "Numbers"
 msgstr "Čísla"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1041
+#: ../src/ui/dialog/inkscape-preferences.cpp:1052
 msgid "Numeric precision:"
 msgstr "Číselná presnosť:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1041
+#: ../src/ui/dialog/inkscape-preferences.cpp:1052
 msgid "How many digits to write after the decimal dot"
 msgstr "Koľko číslic za desatinnou čiarkou uvádzať"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1044
+#: ../src/ui/dialog/inkscape-preferences.cpp:1055
 msgid "Minimum exponent:"
 msgstr "Minimálny exponent:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1044
+#: ../src/ui/dialog/inkscape-preferences.cpp:1055
 msgid ""
 "The smallest number written to SVG is 10 to the power of this exponent; "
 "anything smaller is written as zero."
@@ -14090,310 +14109,310 @@ msgstr ""
 "Minimálna veľkosť čísla (10 umocnené týmto exponentom), ktorá sa zapíše SVG, "
 "menšie čísla sa zapíšu ako 0."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1046
+#: ../src/ui/dialog/inkscape-preferences.cpp:1057
 msgid "SVG output"
 msgstr "Výstup SVG"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "System default"
 msgstr "Štandardné hodnoty systému"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Albanian (sq)"
 msgstr "albánčina (sq)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Amharic (am)"
 msgstr "amharčina (am)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Arabic (ar)"
 msgstr "arabčina (ar)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Armenian (hy)"
 msgstr "arménčina (hy)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Azerbaijani (az)"
 msgstr "azerbajdžančina (az)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Basque (eu)"
 msgstr "baskičtina (eu)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1051
+#: ../src/ui/dialog/inkscape-preferences.cpp:1062
 msgid "Belarusian (be)"
 msgstr "bieloruština (be)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Bulgarian (bg)"
 msgstr "bulharčina (bg)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Bengali (bn)"
 msgstr "bengálčina (bn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Breton (br)"
 msgstr "bretónčina (br)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Catalan (ca)"
 msgstr "katalánčina (ca)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Valencian Catalan (ca@valencia)"
 msgstr "valencijčina (ca@valencia)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1052
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
 msgid "Chinese/China (zh_CN)"
 msgstr "čínština (Čína) (zh_CN)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1064
 msgid "Chinese/Taiwan (zh_TW)"
 msgstr "čínština (Taiwan) (zh_TW)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1064
 msgid "Croatian (hr)"
 msgstr "chorvátčina (hr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1053
+#: ../src/ui/dialog/inkscape-preferences.cpp:1064
 msgid "Czech (cs)"
 msgstr "čeština (cs)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "Danish (da)"
 msgstr "dánčina (da)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "Dutch (nl)"
 msgstr "holandčina (nl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "Dzongkha (dz)"
 msgstr "dzongkä (dz)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "German (de)"
 msgstr "nemčina (de)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "Greek (el)"
 msgstr "gréčtina (el)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "English (en)"
 msgstr "angličtina (en)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/ui/dialog/inkscape-preferences.cpp:1065
 msgid "English/Australia (en_AU)"
 msgstr "angličtina (Austrália) (en_AU)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1066
 msgid "English/Canada (en_CA)"
 msgstr "angličtina (Kanada) (en_CA)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1066
 msgid "English/Great Britain (en_GB)"
 msgstr "angličtina (Spojené kráľovstvo) (en_GB)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1055
+#: ../src/ui/dialog/inkscape-preferences.cpp:1066
 msgid "Pig Latin (en_US@piglatin)"
 msgstr "pig latin (en_US@piglatin)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Esperanto (eo)"
 msgstr "esperanto (eo)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Estonian (et)"
 msgstr "estónčina (et)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1056
+#: ../src/ui/dialog/inkscape-preferences.cpp:1067
 msgid "Finnish (fi)"
 msgstr "fínčina (fi)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "French (fr)"
 msgstr "francúzština (fr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Irish (ga)"
 msgstr "írčina (ga)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Galician (gl)"
 msgstr "galícijčina (gl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Hebrew (he)"
 msgstr "hebrejčina (he)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1057
+#: ../src/ui/dialog/inkscape-preferences.cpp:1068
 msgid "Hungarian (hu)"
 msgstr "maďarčina (hu)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Indonesian (id)"
 msgstr "indonézština (id)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Italian (it)"
 msgstr "taliančina (it)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Japanese (ja)"
 msgstr "japončina (ja)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Khmer (km)"
 msgstr "khmérčina (km)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Kinyarwanda (rw)"
 msgstr "rwandčina (rw)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Korean (ko)"
 msgstr "kórejčina (ko)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Lithuanian (lt)"
 msgstr "litovčina (lt)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+#: ../src/ui/dialog/inkscape-preferences.cpp:1069
 msgid "Macedonian (mk)"
 msgstr "macedónčina (mk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Mongolian (mn)"
 msgstr "mongolčina (mn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Nepali (ne)"
 msgstr "nepálčina (ne)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Norwegian Bokmål (nb)"
 msgstr "nórsky bokmål (nb)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Norwegian Nynorsk (nn)"
 msgstr "nórsky nynorsk (nn)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1059
+#: ../src/ui/dialog/inkscape-preferences.cpp:1070
 msgid "Panjabi (pa)"
 msgstr "pandžábčina (pa)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Polish (pl)"
 msgstr "poľština (pl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Portuguese (pt)"
 msgstr "portugalčina (pt)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Portuguese/Brazil (pt_BR)"
 msgstr "portugalčina (Brazília) (pt_BR)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Romanian (ro)"
 msgstr "rumunčina (ro)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1060
+#: ../src/ui/dialog/inkscape-preferences.cpp:1071
 msgid "Russian (ru)"
 msgstr "ruština (ru)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Serbian (sr)"
 msgstr "srbčina (sr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Serbian in Latin script (sr@latin)"
 msgstr "srbčina v latinke (sr@latin)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Slovak (sk)"
 msgstr "slovenčina (sk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Slovenian (sl)"
 msgstr "slovinčina (sl)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Spanish (es)"
 msgstr "španielčina (es)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1061
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
 msgid "Spanish/Mexico (es_MX)"
 msgstr "španielčina (Mexiko) (es_MX)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Swedish (sv)"
 msgstr "švédčina (sv)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Thai (th)"
 msgstr "thajčina (th)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Turkish (tr)"
 msgstr "turečtina (tr)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Ukrainian (uk)"
 msgstr "ukrajinčina (uk)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1062
+#: ../src/ui/dialog/inkscape-preferences.cpp:1073
 msgid "Vietnamese (vi)"
 msgstr "vietnamčina (vi)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1069
+#: ../src/ui/dialog/inkscape-preferences.cpp:1080
 msgid "Language (requires restart):"
 msgstr "Jazyk (vyžaduje reštart)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1070
+#: ../src/ui/dialog/inkscape-preferences.cpp:1081
 msgid "Set the language for menus and number formats"
 msgstr "Nastaviť jazyk menu a formát čísel"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/ui/dialog/inkscape-preferences.cpp:1083
 msgid "Smaller"
 msgstr "Menší"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1076
+#: ../src/ui/dialog/inkscape-preferences.cpp:1087
 msgid "Toolbox icon size"
 msgstr "Veľkosť ikon panelu nástrojov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1077
+#: ../src/ui/dialog/inkscape-preferences.cpp:1088
 msgid "Set the size for the tool icons (requires restart)"
 msgstr "Nastavenie veľkosti ikon nástrojov (vyžaduje reštart)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1080
+#: ../src/ui/dialog/inkscape-preferences.cpp:1091
 msgid "Control bar icon size"
 msgstr "Veľkosť ikon ovládacieho panelu nástrojov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1081
+#: ../src/ui/dialog/inkscape-preferences.cpp:1092
 msgid ""
 "Set the size for the icons in tools' control bars to use (requires restart)"
 msgstr "Nastaviť veľkosť ikon ovládacieho panelu nástrojov (vyžaduje reštart)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1084
+#: ../src/ui/dialog/inkscape-preferences.cpp:1095
 msgid "Secondary toolbar icon size"
 msgstr "Veľkosť ikon sekundárneho panelu nástrojov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1085
+#: ../src/ui/dialog/inkscape-preferences.cpp:1096
 msgid ""
 "Set the size for the icons in secondary toolbars to use (requires restart)"
 msgstr ""
 "Nastaviť veľkosť ikon v sekundárnom paneli nástrojov (vyžaduje reštart)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1088
+#: ../src/ui/dialog/inkscape-preferences.cpp:1099
 msgid "Work-around color sliders not drawing."
 msgstr "Obídenie chyby nefungujúcich posuvníkov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1090
+#: ../src/ui/dialog/inkscape-preferences.cpp:1101
 msgid ""
 "When on, will attempt to work around bugs in certain GTK themes drawing "
 "color sliders."
@@ -14401,15 +14420,15 @@ msgstr ""
 "Ak je táto voľba zapnutá, Inkscape sa pokúsi pri vykresľovaní posuvníkov "
 "obísť chyby v niektorých témach GTK."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1096
+#: ../src/ui/dialog/inkscape-preferences.cpp:1107
 msgid "Clear list"
 msgstr "Vyčistiť zoznam"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1101
+#: ../src/ui/dialog/inkscape-preferences.cpp:1112
 msgid "Maximum documents in Open Recent:"
 msgstr "Max. počet Nedávnych dokumentov:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1102
+#: ../src/ui/dialog/inkscape-preferences.cpp:1113
 msgid ""
 "Set the maximum length of the Open Recent list in the File menu, or clear "
 "the list"
@@ -14417,11 +14436,11 @@ msgstr ""
 "Nastavenie maximálnej dĺžky zoznamu naposledy otvorených súborov v ponuke "
 "Súbor alebo vyčistenie zoznamu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1105
+#: ../src/ui/dialog/inkscape-preferences.cpp:1116
 msgid "Zoom correction factor (in %):"
 msgstr "Koeficient korekcie zmeny mierky (in %):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1106
+#: ../src/ui/dialog/inkscape-preferences.cpp:1117
 msgid ""
 "Adjust the slider until the length of the ruler on your screen matches its "
 "real length. This information is used when zooming to 1:1, 1:2, etc., to "
@@ -14431,15 +14450,15 @@ msgstr ""
 "skutočnej dĺžke. Táto informácia sa použije pri zmene mierky na 1:1, 1:2 "
 "atď. a na zobrazovanie objektov v ich skutočnej veľkosti."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1108
+#: ../src/ui/dialog/inkscape-preferences.cpp:1119
 msgid "Interface"
 msgstr "Rozhranie"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1114
+#: ../src/ui/dialog/inkscape-preferences.cpp:1125
 msgid "Use current directory for \"Save As ...\""
 msgstr "Použiť aktuálny adresár pre „Uložiť ako...“"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1116
+#: ../src/ui/dialog/inkscape-preferences.cpp:1127
 msgid ""
 "When this option is on, the \"Save as...\" dialog will always open in the "
 "directory where the currently open document is. When it's off, it will open "
@@ -14450,11 +14469,11 @@ msgstr ""
 "nachádza posledný súbor, ktorý ste týmto dialógom uložili."
 
 #. Autosave options
-#: ../src/ui/dialog/inkscape-preferences.cpp:1120
+#: ../src/ui/dialog/inkscape-preferences.cpp:1131
 msgid "Enable autosave (requires restart)"
 msgstr "Zapnúť automatické ukladanie (vyžaduje reštart)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1121
+#: ../src/ui/dialog/inkscape-preferences.cpp:1132
 msgid ""
 "Automatically save the current document(s) at a given interval, thus "
 "minimizing loss in case of a crash"
@@ -14462,11 +14481,11 @@ msgstr ""
 "Automatické ukladanie aktuálneho dokumentu na disk v danom intervale, čím sa "
 "minimalizuje strata pri havárii programu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1123
+#: ../src/ui/dialog/inkscape-preferences.cpp:1134
 msgid "Interval (in minutes):"
 msgstr "Interval (v minútach):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1123
+#: ../src/ui/dialog/inkscape-preferences.cpp:1134
 msgid "Interval (in minutes) at which document will be autosaved"
 msgstr ""
 "Nastavuje interval (v minútach), v ktorom sa bude dokument automaticky "
@@ -14474,84 +14493,84 @@ msgstr ""
 
 #. TRANSLATORS: only translate "string" in "context|string".
 #. For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS
-#: ../src/ui/dialog/inkscape-preferences.cpp:1127
+#: ../src/ui/dialog/inkscape-preferences.cpp:1138
 msgid "filesystem|Path:"
 msgstr "filesystem|Cesta:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1127
+#: ../src/ui/dialog/inkscape-preferences.cpp:1138
 msgid "The directory where autosaves will be written"
 msgstr "Nastavuje adresár, kam sa budú zapisovať automaticky uložené dokumenty"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1129
+#: ../src/ui/dialog/inkscape-preferences.cpp:1140
 msgid "Maximum number of autosaves:"
 msgstr "Max. počet automatických uložení:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1129
+#: ../src/ui/dialog/inkscape-preferences.cpp:1140
 msgid ""
 "Maximum number of autosaved files; use this to limit the storage space used"
 msgstr ""
 "Maximálny počet automaticky uložených súborov; toto obmedzenie použite na "
 "kontrolu nad použitým úložným priestorom"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
 msgid "2x2"
 msgstr "2x2"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
 msgid "4x4"
 msgstr "4x4"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
 msgid "8x8"
 msgstr "8x8"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1151
+#: ../src/ui/dialog/inkscape-preferences.cpp:1162
 msgid "16x16"
 msgstr "16x16"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1155
+#: ../src/ui/dialog/inkscape-preferences.cpp:1166
 msgid "Oversample bitmaps:"
 msgstr "Prevzorkovanie bitmáp:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1158
+#: ../src/ui/dialog/inkscape-preferences.cpp:1169
 msgid "Automatically reload bitmaps"
 msgstr "Automaticky znova načítavať bitmapy"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1160
+#: ../src/ui/dialog/inkscape-preferences.cpp:1171
 msgid "Automatically reload linked images when file is changed on disk"
 msgstr ""
 "Zapína automatické znovunačítavanie odkazovaných obrázkov, keď sa na disku "
 "zmenia"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1174
+#: ../src/ui/dialog/inkscape-preferences.cpp:1185
 msgid "Bitmap editor:"
 msgstr "Editor bitmáp:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1180
+#: ../src/ui/dialog/inkscape-preferences.cpp:1191
 msgid "Resolution for Create Bitmap Copy:"
 msgstr "Rozlíšenie pre Vytvoriť bitmapovú kópiu:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1181
+#: ../src/ui/dialog/inkscape-preferences.cpp:1192
 msgid "Resolution used by the Create Bitmap Copy command"
 msgstr "Rozlíšenie, ktoré použije príkaz Vytvoriť bitmapovú kópiu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1183
+#: ../src/ui/dialog/inkscape-preferences.cpp:1194
 msgid "Bitmaps"
 msgstr "Bitmapy"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1235
+#: ../src/ui/dialog/inkscape-preferences.cpp:1246
 msgid "Language:"
 msgstr "Jazyk:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1236
+#: ../src/ui/dialog/inkscape-preferences.cpp:1247
 msgid "Set the main spell check language"
 msgstr "Nastaviť hlavný jazyk kontroly pravopisu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1239
+#: ../src/ui/dialog/inkscape-preferences.cpp:1250
 msgid "Second language:"
 msgstr "Druhý jazyk:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1240
+#: ../src/ui/dialog/inkscape-preferences.cpp:1251
 msgid ""
 "Set the second spell check language; checking will only stop on words "
 "unknown in ALL chosen languages"
@@ -14559,11 +14578,11 @@ msgstr ""
 "Nastaviť druhý jazyk kontroly pravopisu; kontrola sa zastaví iba na slovách "
 "nenájdených v ŽIADNOM z vybraných jazykov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1243
+#: ../src/ui/dialog/inkscape-preferences.cpp:1254
 msgid "Third language:"
 msgstr "Tretí jazyk:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1244
+#: ../src/ui/dialog/inkscape-preferences.cpp:1255
 msgid ""
 "Set the third spell check language; checking will only stop on words unknown "
 "in ALL chosen languages"
@@ -14571,31 +14590,31 @@ msgstr ""
 "Nastaviť tretí jazyk kontroly pravopisu; kontrola sa zastaví iba na slovách "
 "nenájdených v ŽIADNOM z vybraných jazykov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1246
+#: ../src/ui/dialog/inkscape-preferences.cpp:1257
 msgid "Ignore words with digits"
 msgstr "Ignorovať slová s číslicami"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1248
+#: ../src/ui/dialog/inkscape-preferences.cpp:1259
 msgid "Ignore words containing digits, such as \"R2D2\""
 msgstr "Ignorovať slová obsahujúce číslice ako napr. „R2D2“"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1250
+#: ../src/ui/dialog/inkscape-preferences.cpp:1261
 msgid "Ignore words in ALL CAPITALS"
 msgstr "Ignorovať slová VEĽKÝMI PÍSMENAMI"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1252
+#: ../src/ui/dialog/inkscape-preferences.cpp:1263
 msgid "Ignore words in all capitals, such as \"IUPAC\""
 msgstr "Ignorovať slová písané veľkými písmenami ako „IUPAC“"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1254
+#: ../src/ui/dialog/inkscape-preferences.cpp:1265
 msgid "Spellcheck"
 msgstr "Kontrola pravopisu"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1273
+#: ../src/ui/dialog/inkscape-preferences.cpp:1284
 msgid "Add label comments to printing output"
 msgstr "Pridať komentár na štítku na tlačový výstup"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1275
+#: ../src/ui/dialog/inkscape-preferences.cpp:1286
 msgid ""
 "When on, a comment will be added to the raw print output, marking the "
 "rendered output for an object with its label"
@@ -14603,11 +14622,11 @@ msgstr ""
 "Ak je voľba zapnutá, komentár (štítok) označí vykreslený výstup objektu v "
 "hrubom výstupe pre tlač"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1277
+#: ../src/ui/dialog/inkscape-preferences.cpp:1288
 msgid "Prevent sharing of gradient definitions"
 msgstr "Zabrániť zdieľaniu definícií farebných prechodov"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1279
+#: ../src/ui/dialog/inkscape-preferences.cpp:1290
 msgid ""
 "When on, shared gradient definitions are automatically forked on change; "
 "uncheck to allow sharing of gradient definitions so that editing one object "
@@ -14618,11 +14637,11 @@ msgstr ""
 "povolené, takže úprava jedného objektu môže ovplyvniť ostatné objekty, ktoré "
 "používajú rovnaký farebný prechod"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1282
+#: ../src/ui/dialog/inkscape-preferences.cpp:1293
 msgid "Simplification threshold:"
 msgstr "Prah zjednodušenia"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1283
+#: ../src/ui/dialog/inkscape-preferences.cpp:1294
 msgid ""
 "How strong is the Node tool's Simplify command by default. If you invoke "
 "this command several times in quick succession, it will act more and more "
@@ -14632,15 +14651,15 @@ msgstr ""
 "tento príkaz niekoľkokrát rýchlo za sebou, bude sa správať viac a viac "
 "agresívne; vyvolanie po pauze obnoví štandardný prah."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1286
+#: ../src/ui/dialog/inkscape-preferences.cpp:1297
 msgid "Latency skew:"
 msgstr "Posun času:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1286
+#: ../src/ui/dialog/inkscape-preferences.cpp:1297
 msgid "(requires restart)"
 msgstr "(vyžaduje reštart)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1287
+#: ../src/ui/dialog/inkscape-preferences.cpp:1298
 msgid ""
 "Factor by which the event clock is skewed from the actual time (0.9766 on "
 "some systems)."
@@ -14648,11 +14667,11 @@ msgstr ""
 "O koľko sú hodiny udalosti posunuté od skutočného času (na niektorých "
 "systémoch 0,9766)."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1289
+#: ../src/ui/dialog/inkscape-preferences.cpp:1300
 msgid "Pre-render named icons"
 msgstr "Predvykresliť pomenované ikony"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1291
+#: ../src/ui/dialog/inkscape-preferences.cpp:1302
 msgid ""
 "When on, named icons will be rendered before displaying the ui. This is for "
 "working around bugs in GTK+ named icon notification"
@@ -14662,51 +14681,51 @@ msgstr ""
 "pomenovaných ikon"
 
 #. TRANSLATORS: following strings are paths in Inkscape preferences - Misc - System info
-#: ../src/ui/dialog/inkscape-preferences.cpp:1297
+#: ../src/ui/dialog/inkscape-preferences.cpp:1308
 msgid "User config: "
 msgstr "Používateľská konfigurácia: "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1301
+#: ../src/ui/dialog/inkscape-preferences.cpp:1312
 msgid "User data: "
 msgstr "Údaje používateľa:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1305
+#: ../src/ui/dialog/inkscape-preferences.cpp:1316
 msgid "User cache: "
 msgstr "Vyrovnávacia pamäť používateľa:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1309
+#: ../src/ui/dialog/inkscape-preferences.cpp:1320
 msgid "System config: "
 msgstr "Konfigurácia systému:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1312
+#: ../src/ui/dialog/inkscape-preferences.cpp:1323
 msgid "System data: "
 msgstr "Údaje systému:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1315
+#: ../src/ui/dialog/inkscape-preferences.cpp:1326
 msgid "PIXMAP: "
 msgstr "Obraz. mapy: "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1319
+#: ../src/ui/dialog/inkscape-preferences.cpp:1330
 msgid "DATA: "
 msgstr "Údaje: "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1323
+#: ../src/ui/dialog/inkscape-preferences.cpp:1334
 msgid "UI: "
 msgstr "Rozhranie: "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1332
+#: ../src/ui/dialog/inkscape-preferences.cpp:1343
 msgid "Icon theme: "
 msgstr "Téma ikon: "
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1347
+#: ../src/ui/dialog/inkscape-preferences.cpp:1358
 msgid "System info"
 msgstr "Informácie o systéme"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1347
+#: ../src/ui/dialog/inkscape-preferences.cpp:1358
 msgid "General system information"
 msgstr "Všeobecné informácie o systéme"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1349
+#: ../src/ui/dialog/inkscape-preferences.cpp:1360
 msgid "Misc"
 msgstr "Rôzne"
 
@@ -14838,6 +14857,10 @@ msgstr "je možné vybrať iba jednu položku"
 msgid "Empty selection"
 msgstr "Prázdny výber"
 
+#: ../src/ui/dialog/livepatheffect-editor.cpp:308
+msgid "Unknown effect"
+msgstr "Neznámy efekt"
+
 #: ../src/ui/dialog/livepatheffect-editor.cpp:374
 msgid "Create and apply path effect"
 msgstr "Vytvoriť a použiť efekt cesty"
@@ -15419,8 +15442,8 @@ msgstr "Viaceré skeny: vytvorí skupinu ciest"
 
 #. # end multiple scan
 #. ## end mode page
-#: ../src/ui/dialog/tracedialog.cpp:563 ../src/widgets/toolbox.cpp:4249
-#: ../share/extensions/triangle.inx.h:9
+#: ../src/ui/dialog/tracedialog.cpp:563 ../src/widgets/toolbox.cpp:4276
+#: ../src/widgets/toolbox.cpp:4544 ../share/extensions/triangle.inx.h:9
 msgid "Mode"
 msgstr "Režim"
 
@@ -15475,7 +15498,7 @@ msgstr "Tolerancia:"
 #. ## end option page
 #: ../src/ui/dialog/tracedialog.cpp:617 ../src/ui/dialog/tracedialog.cpp:623
 #: ../share/extensions/dxf_input.inx.h:11
-#: ../share/extensions/dxf_outlines.inx.h:9
+#: ../share/extensions/dxf_outlines.inx.h:9 ../share/extensions/scour.inx.h:10
 msgid "Options"
 msgstr "Možnosti"
 
@@ -15691,31 +15714,31 @@ msgstr "Použiť transformáciu na výber"
 msgid "Edit transformation matrix"
 msgstr "Upraviť transformačnú maticu"
 
-#: ../src/ui/view/edit-widget.cpp:330 ../src/ui/view/edit-widget.cpp:335
-#: ../src/ui/view/edit-widget.cpp:343 ../src/ui/view/edit-widget.cpp:348
-#: ../src/ui/view/edit-widget.cpp:353 ../src/ui/view/edit-widget.cpp:368
-#: ../src/ui/view/edit-widget.cpp:381 ../src/ui/view/edit-widget.cpp:386
-#: ../src/ui/view/edit-widget.cpp:400 ../src/ui/view/edit-widget.cpp:404
-#: ../src/ui/view/edit-widget.cpp:412 ../src/ui/view/edit-widget.cpp:416
-#: ../src/ui/view/edit-widget.cpp:420 ../src/ui/view/edit-widget.cpp:756
-#: ../src/ui/view/edit-widget.cpp:761 ../src/ui/view/edit-widget.cpp:867
-#: ../src/ui/view/edit-widget.cpp:871 ../src/ui/view/edit-widget.cpp:992
+#: ../src/ui/view/edit-widget.cpp:336 ../src/ui/view/edit-widget.cpp:341
+#: ../src/ui/view/edit-widget.cpp:349 ../src/ui/view/edit-widget.cpp:354
+#: ../src/ui/view/edit-widget.cpp:359 ../src/ui/view/edit-widget.cpp:374
+#: ../src/ui/view/edit-widget.cpp:387 ../src/ui/view/edit-widget.cpp:392
+#: ../src/ui/view/edit-widget.cpp:406 ../src/ui/view/edit-widget.cpp:410
+#: ../src/ui/view/edit-widget.cpp:418 ../src/ui/view/edit-widget.cpp:422
+#: ../src/ui/view/edit-widget.cpp:426 ../src/ui/view/edit-widget.cpp:762
+#: ../src/ui/view/edit-widget.cpp:767 ../src/ui/view/edit-widget.cpp:873
+#: ../src/ui/view/edit-widget.cpp:877 ../src/ui/view/edit-widget.cpp:998
 msgid "PLACEHOLDER, do not translate"
 msgstr "PLACEHOLDER, do not translate"
 
-#: ../src/ui/view/edit-widget.cpp:1051 ../src/widgets/desktop-widget.cpp:379
+#: ../src/ui/view/edit-widget.cpp:1057 ../src/widgets/desktop-widget.cpp:379
 msgid "Zoom drawing if window size changes"
 msgstr "Zmeniť mierku zobrazenia, ak sa mení veľkosť okna"
 
-#: ../src/ui/view/edit-widget.cpp:1072 ../src/widgets/desktop-widget.cpp:503
+#: ../src/ui/view/edit-widget.cpp:1078 ../src/widgets/desktop-widget.cpp:503
 msgid "Cursor coordinates"
 msgstr "Súradnice kurzoru"
 
-#: ../src/ui/view/edit-widget.cpp:1082 ../src/widgets/desktop-widget.cpp:518
+#: ../src/ui/view/edit-widget.cpp:1088 ../src/widgets/desktop-widget.cpp:518
 msgid "Z:"
 msgstr "Z:"
 
-#: ../src/ui/view/edit-widget.cpp:1089
+#: ../src/ui/view/edit-widget.cpp:1095
 msgid ""
 "<b>Welcome to Inkscape!</b> Use shape or drawing tools to create objects; "
 "use selector (arrow) to move or transform them."
@@ -15723,7 +15746,7 @@ msgstr ""
 "<b>Vitajte v Inkscape!</b> Použite dostupné nástroje na vytvorenie tvarov "
 "alebo objektov; použite Výber (šípku) na ich presun a transformáciu."
 
-#: ../src/ui/view/edit-widget.cpp:1200 ../src/widgets/desktop-widget.cpp:838
+#: ../src/ui/view/edit-widget.cpp:1206 ../src/widgets/desktop-widget.cpp:838
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">Save changes to document \"%s\" before "
@@ -15736,12 +15759,12 @@ msgstr ""
 "\n"
 "Ak skončíte bez uloženia, vaše zmeny sa nezachovajú."
 
-#: ../src/ui/view/edit-widget.cpp:1211 ../src/ui/view/edit-widget.cpp:1259
+#: ../src/ui/view/edit-widget.cpp:1217 ../src/ui/view/edit-widget.cpp:1265
 #: ../src/widgets/desktop-widget.cpp:845 ../src/widgets/desktop-widget.cpp:902
 msgid "Close _without saving"
 msgstr "Zatvoriť _bez uloženia"
 
-#: ../src/ui/view/edit-widget.cpp:1247 ../src/widgets/desktop-widget.cpp:894
+#: ../src/ui/view/edit-widget.cpp:1253 ../src/widgets/desktop-widget.cpp:894
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">The file \"%s\" was saved with a "
@@ -15754,7 +15777,7 @@ msgstr ""
 "\n"
 "Chcete uložiť tento súbor ako Inkscape SVG?"
 
-#: ../src/ui/view/edit-widget.cpp:1262 ../src/widgets/desktop-widget.cpp:905
+#: ../src/ui/view/edit-widget.cpp:1268 ../src/widgets/desktop-widget.cpp:905
 msgid "_Save as SVG"
 msgstr "_Uložiť ako SVG"
 
@@ -15800,44 +15823,44 @@ msgstr "Zmeniť rozostrenie"
 msgid "Change opacity"
 msgstr "Zmeniť krytie"
 
-#: ../src/ui/widget/page-sizer.cpp:209
+#: ../src/ui/widget/page-sizer.cpp:229
 msgid "U_nits:"
 msgstr "_Jednotky:"
 
-#: ../src/ui/widget/page-sizer.cpp:210
+#: ../src/ui/widget/page-sizer.cpp:230
 msgid "Width of paper"
 msgstr "Šírka papiera"
 
-#: ../src/ui/widget/page-sizer.cpp:211
+#: ../src/ui/widget/page-sizer.cpp:231
 msgid "Height of paper"
 msgstr "Výška papiera"
 
-#: ../src/ui/widget/page-sizer.cpp:257
+#: ../src/ui/widget/page-sizer.cpp:277
 msgid "P_age size:"
 msgstr "_Veľkosť stránky:"
 
-#: ../src/ui/widget/page-sizer.cpp:265
+#: ../src/ui/widget/page-sizer.cpp:285
 msgid "Page orientation:"
 msgstr "Orientácia stránky:"
 
-#: ../src/ui/widget/page-sizer.cpp:268
+#: ../src/ui/widget/page-sizer.cpp:288
 msgid "_Landscape"
 msgstr "_Krajinka"
 
-#: ../src/ui/widget/page-sizer.cpp:273
+#: ../src/ui/widget/page-sizer.cpp:293
 msgid "_Portrait"
 msgstr "_Portrét"
 
 #. ## Set up custom size frame
-#: ../src/ui/widget/page-sizer.cpp:280
+#: ../src/ui/widget/page-sizer.cpp:300
 msgid "Custom size"
 msgstr "Vlastná veľkosť"
 
-#: ../src/ui/widget/page-sizer.cpp:293
+#: ../src/ui/widget/page-sizer.cpp:313
 msgid "_Fit page to selection"
 msgstr "_Veľkosť strany podľa výberu"
 
-#: ../src/ui/widget/page-sizer.cpp:294
+#: ../src/ui/widget/page-sizer.cpp:314
 msgid ""
 "Resize the page to fit the current selection, or the entire drawing if there "
 "is no selection"
@@ -15845,7 +15868,7 @@ msgstr ""
 "Zmeniť veľkosť stránky podľa súčasného výberu alebo celej kresby ak nie je "
 "nič vybrané"
 
-#: ../src/ui/widget/page-sizer.cpp:357
+#: ../src/ui/widget/page-sizer.cpp:377
 msgid "Set page size"
 msgstr "Nastaviť veľkosť stránky:"
 
@@ -16505,118 +16528,118 @@ msgstr "Preklopiť zvisle"
 #. TRANSLATORS: If you have translated the tutorial-basic.svg file to your language,
 #. then translate this string as "tutorial-basic.LANG.svg" (where LANG is your language
 #. code); otherwise leave as "tutorial-basic.svg".
-#: ../src/verbs.cpp:1912
+#: ../src/verbs.cpp:1922
 msgid "tutorial-basic.svg"
 msgstr "tutorial-basic.sk.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1916
+#: ../src/verbs.cpp:1926
 msgid "tutorial-shapes.svg"
 msgstr "tutorial-shapes.sk.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1920
+#: ../src/verbs.cpp:1930
 msgid "tutorial-advanced.svg"
 msgstr "tutorial-advanced.sk.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1924
+#: ../src/verbs.cpp:1934
 msgid "tutorial-tracing.svg"
 msgstr "tutorial-tracing.sk.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1928
+#: ../src/verbs.cpp:1938
 msgid "tutorial-calligraphy.svg"
 msgstr "tutorial-calligraphy.sk.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1932
+#: ../src/verbs.cpp:1942
 msgid "tutorial-elements.svg"
 msgstr "tutorial-elements.sk.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1936
+#: ../src/verbs.cpp:1946
 msgid "tutorial-tips.svg"
 msgstr "tutorial-tips.sk.svg"
 
-#: ../src/verbs.cpp:2212 ../src/verbs.cpp:2731
+#: ../src/verbs.cpp:2222 ../src/verbs.cpp:2747
 msgid "Unlock all objects in the current layer"
 msgstr "Odomknúť všetky objekty v aktuálnej vrstve"
 
-#: ../src/verbs.cpp:2216 ../src/verbs.cpp:2733
+#: ../src/verbs.cpp:2226 ../src/verbs.cpp:2749
 msgid "Unlock all objects in all layers"
 msgstr "Odomknúť všetky objekty vo všetkých vrstvách"
 
-#: ../src/verbs.cpp:2220 ../src/verbs.cpp:2735
+#: ../src/verbs.cpp:2230 ../src/verbs.cpp:2751
 msgid "Unhide all objects in the current layer"
 msgstr "Odkryť všetky objekty v aktuálnej vrstve"
 
-#: ../src/verbs.cpp:2224 ../src/verbs.cpp:2737
+#: ../src/verbs.cpp:2234 ../src/verbs.cpp:2753
 msgid "Unhide all objects in all layers"
 msgstr "Odkryť všetky objekty vo všetkých vrstvách"
 
-#: ../src/verbs.cpp:2239
+#: ../src/verbs.cpp:2249
 msgid "Does nothing"
 msgstr "Nerobí nič"
 
-#: ../src/verbs.cpp:2242
+#: ../src/verbs.cpp:2252
 msgid "Create new document from the default template"
 msgstr "Vytvorí nový dokument zo štandardnej šablóny"
 
-#: ../src/verbs.cpp:2244
+#: ../src/verbs.cpp:2254
 msgid "_Open..."
 msgstr "_Otvoriť..."
 
-#: ../src/verbs.cpp:2245
+#: ../src/verbs.cpp:2255
 msgid "Open an existing document"
 msgstr "Otvorí existujúci dokument"
 
-#: ../src/verbs.cpp:2246
+#: ../src/verbs.cpp:2256
 msgid "Re_vert"
 msgstr "_Vrátiť"
 
-#: ../src/verbs.cpp:2247
+#: ../src/verbs.cpp:2257
 msgid "Revert to the last saved version of document (changes will be lost)"
 msgstr "Načíta poslednú uloženú verziu dokumentu (zmeny budú stratené)"
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2258
 msgid "_Save"
 msgstr "_Uložiť"
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2258
 msgid "Save document"
 msgstr "Uloží dokument"
 
-#: ../src/verbs.cpp:2250
+#: ../src/verbs.cpp:2260
 msgid "Save _As..."
 msgstr "Uložiť ako..."
 
-#: ../src/verbs.cpp:2251
+#: ../src/verbs.cpp:2261
 msgid "Save document under a new name"
 msgstr "Uloží dokument pod novým názvom"
 
-#: ../src/verbs.cpp:2252
+#: ../src/verbs.cpp:2262
 msgid "Save a Cop_y..."
 msgstr "Uložiť kópiu..."
 
-#: ../src/verbs.cpp:2253
+#: ../src/verbs.cpp:2263
 msgid "Save a copy of the document under a new name"
 msgstr "Uloží kópiu dokumentu pod novým názvom"
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2264
 msgid "_Print..."
 msgstr "_Tlačiť..."
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2264
 msgid "Print document"
 msgstr "Vytlačí dokument"
 
 #. TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions)
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2267
 msgid "Vac_uum Defs"
 msgstr "_Vyčistiť definície"
 
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2267
 msgid ""
 "Remove unused definitions (such as gradients or clipping paths) from the &lt;"
 "defs&gt; of the document"
@@ -16624,144 +16647,144 @@ msgstr ""
 "Odstráni nepotrebné definície (ako farebné prechody alebo orezávacie cesty) "
 "zo sekcie &lt;defs&gt; dokumentu"
 
-#: ../src/verbs.cpp:2259
+#: ../src/verbs.cpp:2269
 msgid "Print Previe_w"
 msgstr "Ukážka pred tlačou"
 
-#: ../src/verbs.cpp:2260
+#: ../src/verbs.cpp:2270
 msgid "Preview document printout"
 msgstr "Zobrazí náhľad na dokument pred tlačou"
 
-#: ../src/verbs.cpp:2261
+#: ../src/verbs.cpp:2271
 msgid "_Import..."
 msgstr "_Importovať..."
 
-#: ../src/verbs.cpp:2262
+#: ../src/verbs.cpp:2272
 msgid "Import a bitmap or SVG image into this document"
 msgstr "Importuje bitmapu alebo SVG obrázok do dokumentu"
 
-#: ../src/verbs.cpp:2263
+#: ../src/verbs.cpp:2273
 msgid "_Export Bitmap..."
 msgstr "_Exportovať bitmapu..."
 
-#: ../src/verbs.cpp:2264
+#: ../src/verbs.cpp:2274
 msgid "Export this document or a selection as a bitmap image"
 msgstr "Exportuje dokument alebo výber ako bitmapový obrázok"
 
-#: ../src/verbs.cpp:2265
+#: ../src/verbs.cpp:2275
 msgid "Import a document from Open Clip Art Library"
 msgstr "Importovať dokument z knižnice Open Clip Art"
 
 #. new FileVerb(SP_VERB_FILE_EXPORT_TO_OCAL, "FileExportToOCAL", N_("Export To Open Clip Art Library"), N_("Export this document to Open Clip Art Library"), INKSCAPE_ICON_DOCUMENT_EXPORT_OCAL),
-#: ../src/verbs.cpp:2267
+#: ../src/verbs.cpp:2277
 msgid "N_ext Window"
 msgstr "Nasl_edujúce okno"
 
-#: ../src/verbs.cpp:2268
+#: ../src/verbs.cpp:2278
 msgid "Switch to the next document window"
 msgstr "Prepne do nasledujúceho okna"
 
-#: ../src/verbs.cpp:2269
+#: ../src/verbs.cpp:2279
 msgid "P_revious Window"
 msgstr "Predchádzajúce okno"
 
-#: ../src/verbs.cpp:2270
+#: ../src/verbs.cpp:2280
 msgid "Switch to the previous document window"
 msgstr "Prepne do predchádzajúceho okna dokumentu"
 
-#: ../src/verbs.cpp:2271
+#: ../src/verbs.cpp:2281
 msgid "_Close"
 msgstr "_Zatvoriť"
 
-#: ../src/verbs.cpp:2272
+#: ../src/verbs.cpp:2282
 msgid "Close this document window"
 msgstr "Zatvorí toto okno dokumentu"
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2283
 msgid "_Quit"
 msgstr "_Koniec"
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2283
 msgid "Quit Inkscape"
 msgstr "Ukončí Inkscape"
 
-#: ../src/verbs.cpp:2276
+#: ../src/verbs.cpp:2286
 msgid "Undo last action"
 msgstr "Vrátiť poslednú činnosť"
 
-#: ../src/verbs.cpp:2279
+#: ../src/verbs.cpp:2289
 msgid "Do again the last undone action"
 msgstr "Zopakuje poslednú vrátenú činnosť"
 
-#: ../src/verbs.cpp:2280
+#: ../src/verbs.cpp:2290
 msgid "Cu_t"
 msgstr "Vys_trihnúť"
 
-#: ../src/verbs.cpp:2281
+#: ../src/verbs.cpp:2291
 msgid "Cut selection to clipboard"
 msgstr "Vystrihne výber do schránky"
 
-#: ../src/verbs.cpp:2282
+#: ../src/verbs.cpp:2292
 msgid "_Copy"
 msgstr "_Kopírovať"
 
-#: ../src/verbs.cpp:2283
+#: ../src/verbs.cpp:2293
 msgid "Copy selection to clipboard"
 msgstr "Skopíruje výber do schránky"
 
-#: ../src/verbs.cpp:2284
+#: ../src/verbs.cpp:2294
 msgid "_Paste"
 msgstr "_Vložiť"
 
-#: ../src/verbs.cpp:2285
+#: ../src/verbs.cpp:2295
 msgid "Paste objects from clipboard to mouse point, or paste text"
 msgstr "Vloží objekty zo schránky na miesto pod myšou alebo vloží text"
 
-#: ../src/verbs.cpp:2286
+#: ../src/verbs.cpp:2296
 msgid "Paste _Style"
 msgstr "Vložiť š_týl"
 
-#: ../src/verbs.cpp:2287
+#: ../src/verbs.cpp:2297
 msgid "Apply the style of the copied object to selection"
 msgstr "Použije štýl kopírovaných objektov na výber"
 
-#: ../src/verbs.cpp:2289
+#: ../src/verbs.cpp:2299
 msgid "Scale selection to match the size of the copied object"
 msgstr "Zmení mierku výberu aby sa zhodoval s veľkosťou kopírovaného objektu"
 
-#: ../src/verbs.cpp:2290
+#: ../src/verbs.cpp:2300
 msgid "Paste _Width"
 msgstr "Vložiť _šírku"
 
-#: ../src/verbs.cpp:2291
+#: ../src/verbs.cpp:2301
 msgid "Scale selection horizontally to match the width of the copied object"
 msgstr ""
 "Zmení mierku výberu vodorovne aby sa zhodoval s šírkou kopírovaného objektu"
 
-#: ../src/verbs.cpp:2292
+#: ../src/verbs.cpp:2302
 msgid "Paste _Height"
 msgstr "Vložiť _výšku"
 
-#: ../src/verbs.cpp:2293
+#: ../src/verbs.cpp:2303
 msgid "Scale selection vertically to match the height of the copied object"
 msgstr ""
 "Zmení mierku výberu zvisle aby sa zhodoval s výškou kopírovaného objektu"
 
-#: ../src/verbs.cpp:2294
+#: ../src/verbs.cpp:2304
 msgid "Paste Size Separately"
 msgstr "Vložiť veľkosť samostatne"
 
-#: ../src/verbs.cpp:2295
+#: ../src/verbs.cpp:2305
 msgid "Scale each selected object to match the size of the copied object"
 msgstr ""
 "Zmení mierku každého vybraného objektu aby sa zhodoval s veľkosťou "
 "kopírovaného objektu"
 
-#: ../src/verbs.cpp:2296
+#: ../src/verbs.cpp:2306
 msgid "Paste Width Separately"
 msgstr "Vložiť šírku samostatne"
 
-#: ../src/verbs.cpp:2297
+#: ../src/verbs.cpp:2307
 msgid ""
 "Scale each selected object horizontally to match the width of the copied "
 "object"
@@ -16769,11 +16792,11 @@ msgstr ""
 "Zmení mierku každého zvoleného objektu vodorovne, aby sa zhodoval s šírkou "
 "kopírovaného objektu"
 
-#: ../src/verbs.cpp:2298
+#: ../src/verbs.cpp:2308
 msgid "Paste Height Separately"
 msgstr "Vložiť výšku samostatne"
 
-#: ../src/verbs.cpp:2299
+#: ../src/verbs.cpp:2309
 msgid ""
 "Scale each selected object vertically to match the height of the copied "
 "object"
@@ -16781,296 +16804,296 @@ msgstr ""
 "Zmení mierku každého zvoleného objektu zvisle, aby sa zhodoval s výškou "
 "kopírovaného objektu"
 
-#: ../src/verbs.cpp:2300
+#: ../src/verbs.cpp:2310
 msgid "Paste _In Place"
 msgstr "Vložiť na m_iesto"
 
-#: ../src/verbs.cpp:2301
+#: ../src/verbs.cpp:2311
 msgid "Paste objects from clipboard to the original location"
 msgstr "Prilepí objekty zo schránky na pôvodné umiestnenie"
 
-#: ../src/verbs.cpp:2302
+#: ../src/verbs.cpp:2312
 msgid "Paste Path _Effect"
 msgstr "Vložiť _efekt cesty"
 
-#: ../src/verbs.cpp:2303
+#: ../src/verbs.cpp:2313
 msgid "Apply the path effect of the copied object to selection"
 msgstr "Použije efekt cesty kopírovaných objektov na výber"
 
-#: ../src/verbs.cpp:2304
+#: ../src/verbs.cpp:2314
 msgid "Remove Path _Effect"
 msgstr "Odstrániť _efekt cesty"
 
-#: ../src/verbs.cpp:2305
+#: ../src/verbs.cpp:2315
 msgid "Remove any path effects from selected objects"
 msgstr "Odstrániť všetky efekty cesty z vybraných objektov"
 
-#: ../src/verbs.cpp:2306
+#: ../src/verbs.cpp:2316
 msgid "Remove Filters"
 msgstr "Odstrániť filtre"
 
-#: ../src/verbs.cpp:2307
+#: ../src/verbs.cpp:2317
 msgid "Remove any filters from selected objects"
 msgstr "Odstráni všetky filtre z vybraných objektov"
 
-#: ../src/verbs.cpp:2308
+#: ../src/verbs.cpp:2318
 msgid "_Delete"
 msgstr "_Zmazať"
 
-#: ../src/verbs.cpp:2309
+#: ../src/verbs.cpp:2319
 msgid "Delete selection"
 msgstr "Zmaže výber"
 
-#: ../src/verbs.cpp:2310
+#: ../src/verbs.cpp:2320
 msgid "Duplic_ate"
 msgstr "_Duplikovať"
 
-#: ../src/verbs.cpp:2311
+#: ../src/verbs.cpp:2321
 msgid "Duplicate selected objects"
 msgstr "Duplikuje vybrané objekty"
 
-#: ../src/verbs.cpp:2312
+#: ../src/verbs.cpp:2322
 msgid "Create Clo_ne"
 msgstr "Vytvoriť klo_n"
 
-#: ../src/verbs.cpp:2313
+#: ../src/verbs.cpp:2323
 msgid "Create a clone (a copy linked to the original) of selected object"
 msgstr "Vytvorí klon (kópiu prepojenú na originá) objektu"
 
-#: ../src/verbs.cpp:2314
+#: ../src/verbs.cpp:2324
 msgid "Unlin_k Clone"
 msgstr "Odpojiť _klon"
 
-#: ../src/verbs.cpp:2315
+#: ../src/verbs.cpp:2325
 msgid ""
 "Cut the selected clones' links to the originals, turning them into "
 "standalone objects"
 msgstr ""
 "Preťať prepojenia klonu na jeho originál, čím sa stane samostatným objektom"
 
-#: ../src/verbs.cpp:2316
+#: ../src/verbs.cpp:2326
 msgid "Relink to Copied"
 msgstr "Znova pripojiť skopírované"
 
-#: ../src/verbs.cpp:2317
+#: ../src/verbs.cpp:2327
 msgid "Relink the selected clones to the object currently on the clipboard"
 msgstr ""
 "Znova pripojí skopírované klony k objektu, ktorý je momentálne v schránke"
 
-#: ../src/verbs.cpp:2318
+#: ../src/verbs.cpp:2328
 msgid "Select _Original"
 msgstr "Vybrať _originál"
 
-#: ../src/verbs.cpp:2319
+#: ../src/verbs.cpp:2329
 msgid "Select the object to which the selected clone is linked"
 msgstr "Vyberie objekt, na ktorý je klon prepojený"
 
-#: ../src/verbs.cpp:2320
+#: ../src/verbs.cpp:2330
 msgid "Objects to _Marker"
 msgstr "Objekty na _zakončenie čiary"
 
-#: ../src/verbs.cpp:2321
+#: ../src/verbs.cpp:2331
 msgid "Convert selection to a line marker"
 msgstr "Konvertovať výber na zakončenie čiary"
 
-#: ../src/verbs.cpp:2322
+#: ../src/verbs.cpp:2332
 msgid "Objects to Gu_ides"
 msgstr "Objekty na _vodidlá"
 
-#: ../src/verbs.cpp:2323
+#: ../src/verbs.cpp:2333
 msgid ""
 "Convert selected objects to a collection of guidelines aligned with their "
 "edges"
 msgstr "Previesť vybrané objekty na zbierku vodidiel zarovnaných po hranách"
 
-#: ../src/verbs.cpp:2324
+#: ../src/verbs.cpp:2334
 msgid "Objects to Patter_n"
 msgstr "O_bjekty na vzorku"
 
-#: ../src/verbs.cpp:2325
+#: ../src/verbs.cpp:2335
 msgid "Convert selection to a rectangle with tiled pattern fill"
 msgstr "Skonvertuje výber na obdĺžnik vyplnený vzorkou"
 
-#: ../src/verbs.cpp:2326
+#: ../src/verbs.cpp:2336
 msgid "Pattern to _Objects"
 msgstr "Vzorku na _objekty"
 
-#: ../src/verbs.cpp:2327
+#: ../src/verbs.cpp:2337
 msgid "Extract objects from a tiled pattern fill"
 msgstr "Extrahuje objekty z dláždenej vzorkovej výplne"
 
-#: ../src/verbs.cpp:2328
+#: ../src/verbs.cpp:2338
 msgid "Clea_r All"
 msgstr "Všetko z_mazať"
 
-#: ../src/verbs.cpp:2329
+#: ../src/verbs.cpp:2339
 msgid "Delete all objects from document"
 msgstr "Zmaže všetky objekty z dokumentu"
 
-#: ../src/verbs.cpp:2330
+#: ../src/verbs.cpp:2340
 msgid "Select Al_l"
 msgstr "Vybrať _všetko"
 
-#: ../src/verbs.cpp:2331
+#: ../src/verbs.cpp:2341
 msgid "Select all objects or all nodes"
 msgstr "Vyberie všetky objekty alebo všetky uzly"
 
-#: ../src/verbs.cpp:2332
+#: ../src/verbs.cpp:2342
 msgid "Select All in All La_yers"
 msgstr "Vybrať všetky vo všetkých v_rstvách"
 
-#: ../src/verbs.cpp:2333
+#: ../src/verbs.cpp:2343
 msgid "Select all objects in all visible and unlocked layers"
 msgstr "Vyberie všetky objekty vo všetkých viditeľných a nezamknutých vrstvách"
 
-#: ../src/verbs.cpp:2334
+#: ../src/verbs.cpp:2344
 msgid "In_vert Selection"
 msgstr "In_vertovať výber"
 
-#: ../src/verbs.cpp:2335
+#: ../src/verbs.cpp:2345
 msgid "Invert selection (unselect what is selected and select everything else)"
 msgstr "Invertuje výber (zruší súčasný výber a vyberie všetko ostatné)"
 
-#: ../src/verbs.cpp:2336
+#: ../src/verbs.cpp:2346
 msgid "Invert in All Layers"
 msgstr "Invertovať vo všetkých vrstvách"
 
-#: ../src/verbs.cpp:2337
+#: ../src/verbs.cpp:2347
 msgid "Invert selection in all visible and unlocked layers"
 msgstr "Invertuje výber vo všetkých viditeľných a odomknutých vrstvách"
 
-#: ../src/verbs.cpp:2338
+#: ../src/verbs.cpp:2348
 msgid "Select Next"
 msgstr "Vybrať nasledovný"
 
-#: ../src/verbs.cpp:2339
+#: ../src/verbs.cpp:2349
 msgid "Select next object or node"
 msgstr "Vyberie nasledovný objekt alebo uzol"
 
-#: ../src/verbs.cpp:2340
+#: ../src/verbs.cpp:2350
 msgid "Select Previous"
 msgstr "Vybrať predchádzajúci"
 
-#: ../src/verbs.cpp:2341
+#: ../src/verbs.cpp:2351
 msgid "Select previous object or node"
 msgstr "Vyberie predchádzajúci objekt alebo uzol"
 
-#: ../src/verbs.cpp:2342
+#: ../src/verbs.cpp:2352
 msgid "D_eselect"
 msgstr "Odzn_ačiť"
 
-#: ../src/verbs.cpp:2343
+#: ../src/verbs.cpp:2353
 msgid "Deselect any selected objects or nodes"
 msgstr "Zruší výber zvolených objektov"
 
-#: ../src/verbs.cpp:2344
+#: ../src/verbs.cpp:2354
 msgid "_Guides Around Page"
 msgstr "_Vodidlá okolo stránky"
 
-#: ../src/verbs.cpp:2345
+#: ../src/verbs.cpp:2355
 msgid "Create four guides aligned with the page borders"
 msgstr "Vytvorí štyri vodidlá zarovnané s okrajmi stránky"
 
-#: ../src/verbs.cpp:2346
+#: ../src/verbs.cpp:2356
 msgid "Next Path Effect Parameter"
 msgstr "Parameter efektu ďalšej cesty"
 
-#: ../src/verbs.cpp:2347
+#: ../src/verbs.cpp:2357
 msgid "Show next Path Effect parameter for editing"
 msgstr "Zobraziť na úpravu ďalší parameter Efektu cesty"
 
 #. Selection
-#: ../src/verbs.cpp:2350
+#: ../src/verbs.cpp:2360
 msgid "Raise to _Top"
 msgstr "_Presunúť na vrchol"
 
-#: ../src/verbs.cpp:2351
+#: ../src/verbs.cpp:2361
 msgid "Raise selection to top"
 msgstr "Presunie výber na najvyššiu úroveň"
 
-#: ../src/verbs.cpp:2352
+#: ../src/verbs.cpp:2362
 msgid "Lower to _Bottom"
 msgstr "P_resunúť výber na spodok"
 
-#: ../src/verbs.cpp:2353
+#: ../src/verbs.cpp:2363
 msgid "Lower selection to bottom"
 msgstr "Presunie výber na najnižšiu úroveň"
 
-#: ../src/verbs.cpp:2354
+#: ../src/verbs.cpp:2364
 msgid "_Raise"
 msgstr "P_resunúť vyššie"
 
-#: ../src/verbs.cpp:2355
+#: ../src/verbs.cpp:2365
 msgid "Raise selection one step"
 msgstr "Presunie výber o jednu úroveň vyššie"
 
-#: ../src/verbs.cpp:2356
+#: ../src/verbs.cpp:2366
 msgid "_Lower"
 msgstr "Presu_núť nižšie"
 
-#: ../src/verbs.cpp:2357
+#: ../src/verbs.cpp:2367
 msgid "Lower selection one step"
 msgstr "Presunie výber o jednu úroveň nižšie"
 
-#: ../src/verbs.cpp:2358
+#: ../src/verbs.cpp:2368
 msgid "_Group"
 msgstr "_Zoskupiť"
 
-#: ../src/verbs.cpp:2359
+#: ../src/verbs.cpp:2369
 msgid "Group selected objects"
 msgstr "Zoskupí zvolené objekty"
 
-#: ../src/verbs.cpp:2361
+#: ../src/verbs.cpp:2371
 msgid "Ungroup selected groups"
 msgstr "Zruší zoskupenie výberu"
 
-#: ../src/verbs.cpp:2363
+#: ../src/verbs.cpp:2373
 msgid "_Put on Path"
 msgstr "Umiestniť na _cestu"
 
-#: ../src/verbs.cpp:2365
+#: ../src/verbs.cpp:2375
 msgid "_Remove from Path"
 msgstr "Odst_rániť z cesty"
 
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2377
 msgid "Remove Manual _Kerns"
 msgstr "Odstrániť manuálny „_kerning“"
 
 #. TRANSLATORS: "glyph": An image used in the visual representation of characters;
 #. roughly speaking, how a character looks. A font is a set of glyphs.
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2380
 msgid "Remove all manual kerns and glyph rotations from a text object"
 msgstr "Odstráni manuálny kerning a rotácie symbolov z textového objektu"
 
-#: ../src/verbs.cpp:2372
+#: ../src/verbs.cpp:2382
 msgid "_Union"
 msgstr "Z_jednotenie"
 
-#: ../src/verbs.cpp:2373
+#: ../src/verbs.cpp:2383
 msgid "Create union of selected paths"
 msgstr "Vytvorí zjednotenie zvolených ciest"
 
-#: ../src/verbs.cpp:2374
+#: ../src/verbs.cpp:2384
 msgid "_Intersection"
 msgstr "Pr_ienik"
 
-#: ../src/verbs.cpp:2375
+#: ../src/verbs.cpp:2385
 msgid "Create intersection of selected paths"
 msgstr "Vytvorí prienik zvolených ciest"
 
-#: ../src/verbs.cpp:2376
+#: ../src/verbs.cpp:2386
 msgid "_Difference"
 msgstr "Roz_diel"
 
-#: ../src/verbs.cpp:2377
+#: ../src/verbs.cpp:2387
 msgid "Create difference of selected paths (bottom minus top)"
 msgstr "Vytvorí rozdiel zvolených ciest (nižší objekt mínus vyšší)"
 
-#: ../src/verbs.cpp:2378
+#: ../src/verbs.cpp:2388
 msgid "E_xclusion"
 msgstr "_Vylúčenie"
 
-#: ../src/verbs.cpp:2379
+#: ../src/verbs.cpp:2389
 msgid ""
 "Create exclusive OR of selected paths (those parts that belong to only one "
 "path)"
@@ -17078,309 +17101,309 @@ msgstr ""
 "Vytvorí „zvláštne alebo“ (XOR) vybraných ciest (časti, ktoré patria iba "
 "jednej ceste)"
 
-#: ../src/verbs.cpp:2380
+#: ../src/verbs.cpp:2390
 msgid "Di_vision"
 msgstr "Ro_zdelenie"
 
-#: ../src/verbs.cpp:2381
+#: ../src/verbs.cpp:2391
 msgid "Cut the bottom path into pieces"
 msgstr "Rozdelí spodnú cestu na časti"
 
 #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
 #. Advanced tutorial for more info
-#: ../src/verbs.cpp:2384
+#: ../src/verbs.cpp:2394
 msgid "Cut _Path"
 msgstr "Orezať _cestu"
 
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2395
 msgid "Cut the bottom path's stroke into pieces, removing fill"
 msgstr "Oreže ťah spodnej cesty na časti, odstráni výplň"
 
 #. TRANSLATORS: "outset": expand a shape by offsetting the object's path,
 #. i.e. by displacing it perpendicular to the path in each point.
 #. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2389
+#: ../src/verbs.cpp:2399
 msgid "Outs_et"
 msgstr "Posunúť _von"
 
-#: ../src/verbs.cpp:2390
+#: ../src/verbs.cpp:2400
 msgid "Outset selected paths"
 msgstr "Posunie zvolené cesty smerom von"
 
-#: ../src/verbs.cpp:2392
+#: ../src/verbs.cpp:2402
 msgid "O_utset Path by 1 px"
 msgstr "Pos_unúť zvolené cesty o 1 bod von"
 
-#: ../src/verbs.cpp:2393
+#: ../src/verbs.cpp:2403
 msgid "Outset selected paths by 1 px"
 msgstr "Posunie zvolené cesty o 1 bod von"
 
-#: ../src/verbs.cpp:2395
+#: ../src/verbs.cpp:2405
 msgid "O_utset Path by 10 px"
 msgstr "Posunúť zvolené cesty von o 10 bodov"
 
-#: ../src/verbs.cpp:2396
+#: ../src/verbs.cpp:2406
 msgid "Outset selected paths by 10 px"
 msgstr "Pos_unie zvolené cesty von o 10 bodov"
 
 #. TRANSLATORS: "inset": contract a shape by offsetting the object's path,
 #. i.e. by displacing it perpendicular to the path in each point.
 #. See also the Advanced Tutorial for explanation.
-#: ../src/verbs.cpp:2400
+#: ../src/verbs.cpp:2410
 msgid "I_nset"
 msgstr "Posu_núť dnu"
 
-#: ../src/verbs.cpp:2401
+#: ../src/verbs.cpp:2411
 msgid "Inset selected paths"
 msgstr "Posunie zvolené cesty dnu"
 
-#: ../src/verbs.cpp:2403
+#: ../src/verbs.cpp:2413
 msgid "I_nset Path by 1 px"
 msgstr "Posunúť zvolené cesty dnu o _1 bod"
 
-#: ../src/verbs.cpp:2404
+#: ../src/verbs.cpp:2414
 msgid "Inset selected paths by 1 px"
 msgstr "Posunie zvolené cesty dnu o 1 bod"
 
-#: ../src/verbs.cpp:2406
+#: ../src/verbs.cpp:2416
 msgid "I_nset Path by 10 px"
 msgstr "Posunúť zvolené cesty dnu o 1_0 bodov"
 
-#: ../src/verbs.cpp:2407
+#: ../src/verbs.cpp:2417
 msgid "Inset selected paths by 10 px"
 msgstr "Posunie zvolené cesty dnu o 10 bodov"
 
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2419
 msgid "D_ynamic Offset"
 msgstr "D_ynamický posun"
 
-#: ../src/verbs.cpp:2409
+#: ../src/verbs.cpp:2419
 msgid "Create a dynamic offset object"
 msgstr "Vytvorí dynamický posun objektu"
 
-#: ../src/verbs.cpp:2411
+#: ../src/verbs.cpp:2421
 msgid "_Linked Offset"
 msgstr "_Prepojený posun"
 
-#: ../src/verbs.cpp:2412
+#: ../src/verbs.cpp:2422
 msgid "Create a dynamic offset object linked to the original path"
 msgstr "Vytvorí dynamický posun objektu prepojený na originálnu cestu"
 
-#: ../src/verbs.cpp:2414
+#: ../src/verbs.cpp:2424
 msgid "_Stroke to Path"
 msgstr "Ťah na ce_stu"
 
-#: ../src/verbs.cpp:2415
+#: ../src/verbs.cpp:2425
 msgid "Convert selected object's stroke to paths"
 msgstr "Skonvertuje ťah zvoleného objektu na cestu"
 
-#: ../src/verbs.cpp:2416
+#: ../src/verbs.cpp:2426
 msgid "Si_mplify"
 msgstr "Zj_ednodušiť"
 
-#: ../src/verbs.cpp:2417
+#: ../src/verbs.cpp:2427
 msgid "Simplify selected paths (remove extra nodes)"
 msgstr "Zjednoduší vybrané cesty (odstráni nadbytočné uzly)"
 
-#: ../src/verbs.cpp:2418
+#: ../src/verbs.cpp:2428
 msgid "_Reverse"
 msgstr "_Obrátiť smer"
 
-#: ../src/verbs.cpp:2419
+#: ../src/verbs.cpp:2429
 msgid "Reverse the direction of selected paths (useful for flipping markers)"
 msgstr ""
 "Obráti smer zvolených ciest (vhodné pre preklápanie značiek zakončenia čiar)"
 
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2421
+#: ../src/verbs.cpp:2431
 msgid "_Trace Bitmap..."
 msgstr "_Vektorizovať bitmapu..."
 
-#: ../src/verbs.cpp:2422
+#: ../src/verbs.cpp:2432
 msgid "Create one or more paths from a bitmap by tracing it"
 msgstr "Vytvorí jednu alebo viac ciest z bitmapy jej vektorizáciou"
 
-#: ../src/verbs.cpp:2423
+#: ../src/verbs.cpp:2433
 msgid "_Make a Bitmap Copy"
 msgstr "Vytvoriť bit_mapovú kópiu"
 
-#: ../src/verbs.cpp:2424
+#: ../src/verbs.cpp:2434
 msgid "Export selection to a bitmap and insert it into document"
 msgstr "Exportuje výber do bitmapy alebo vložiť do dokumentu"
 
-#: ../src/verbs.cpp:2425
+#: ../src/verbs.cpp:2435
 msgid "_Combine"
 msgstr "_Kombinovať"
 
-#: ../src/verbs.cpp:2426
+#: ../src/verbs.cpp:2436
 msgid "Combine several paths into one"
 msgstr "Skombinuje niekoľko ciest do jednej"
 
 #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the
 #. Advanced tutorial for more info
-#: ../src/verbs.cpp:2429
+#: ../src/verbs.cpp:2439
 msgid "Break _Apart"
 msgstr "_Rozdeliť na časti"
 
-#: ../src/verbs.cpp:2430
+#: ../src/verbs.cpp:2440
 msgid "Break selected paths into subpaths"
 msgstr "Rozdelí vybrané cesty na podcesty"
 
-#: ../src/verbs.cpp:2431
+#: ../src/verbs.cpp:2441
 msgid "Rows and Columns..."
 msgstr "Riadky a stĺpce..."
 
-#: ../src/verbs.cpp:2432
+#: ../src/verbs.cpp:2442
 msgid "Arrange selected objects in a table"
 msgstr "Rozmiestni zvolené objekty do vzoru mriežky (tabuľky)"
 
 #. Layer
-#: ../src/verbs.cpp:2434
+#: ../src/verbs.cpp:2444
 msgid "_Add Layer..."
 msgstr "_Nová vrstva..."
 
-#: ../src/verbs.cpp:2435
+#: ../src/verbs.cpp:2445
 msgid "Create a new layer"
 msgstr "Vytvorí novú vrstvu"
 
-#: ../src/verbs.cpp:2436
+#: ../src/verbs.cpp:2446
 msgid "Re_name Layer..."
 msgstr "Preme_novať vrstvu..."
 
-#: ../src/verbs.cpp:2437
+#: ../src/verbs.cpp:2447
 msgid "Rename the current layer"
 msgstr "Premenuje aktuálnu vrstvu"
 
-#: ../src/verbs.cpp:2438
+#: ../src/verbs.cpp:2448
 msgid "Switch to Layer Abov_e"
 msgstr "Prepnúť do nasledujúcej vrstvy"
 
-#: ../src/verbs.cpp:2439
+#: ../src/verbs.cpp:2449
 msgid "Switch to the layer above the current"
 msgstr "Prepne do nasledujúcej vrstvy v dokumente"
 
-#: ../src/verbs.cpp:2440
+#: ../src/verbs.cpp:2450
 msgid "Switch to Layer Belo_w"
 msgstr "Prepnúť do nasledujúcej vrstvy"
 
-#: ../src/verbs.cpp:2441
+#: ../src/verbs.cpp:2451
 msgid "Switch to the layer below the current"
 msgstr "Prepne do nasledujúcej vrstvy v dokumente"
 
-#: ../src/verbs.cpp:2442
+#: ../src/verbs.cpp:2452
 msgid "Move Selection to Layer Abo_ve"
 msgstr "Presunie výber o úroveň _vyššie"
 
-#: ../src/verbs.cpp:2443
+#: ../src/verbs.cpp:2453
 msgid "Move selection to the layer above the current"
 msgstr "Presunie výber do predchádzajúcej vrstvy"
 
-#: ../src/verbs.cpp:2444
+#: ../src/verbs.cpp:2454
 msgid "Move Selection to Layer Bel_ow"
 msgstr "Presunúť výber o úroveň _nižšie"
 
-#: ../src/verbs.cpp:2445
+#: ../src/verbs.cpp:2455
 msgid "Move selection to the layer below the current"
 msgstr "Presunie výber do nasledovnej vrstvy"
 
-#: ../src/verbs.cpp:2446
+#: ../src/verbs.cpp:2456
 msgid "Layer to _Top"
 msgstr "Umiestniť vrs_tvu navrch"
 
-#: ../src/verbs.cpp:2447
+#: ../src/verbs.cpp:2457
 msgid "Raise the current layer to the top"
 msgstr "Presunie aktuálnu vrstvu navrch"
 
-#: ../src/verbs.cpp:2448
+#: ../src/verbs.cpp:2458
 msgid "Layer to _Bottom"
 msgstr "Umiestniť vrstvu _naspodok"
 
-#: ../src/verbs.cpp:2449
+#: ../src/verbs.cpp:2459
 msgid "Lower the current layer to the bottom"
 msgstr "Presunie aktuálnu vrstvu naspodok"
 
-#: ../src/verbs.cpp:2450
+#: ../src/verbs.cpp:2460
 msgid "_Raise Layer"
 msgstr "_Zdvihnúť vrstvu"
 
-#: ../src/verbs.cpp:2451
+#: ../src/verbs.cpp:2461
 msgid "Raise the current layer"
 msgstr "Presunie aktuálnu vrstvu o úroveň vyššie"
 
-#: ../src/verbs.cpp:2452
+#: ../src/verbs.cpp:2462
 msgid "_Lower Layer"
 msgstr "Z_nížiť vrstvu"
 
-#: ../src/verbs.cpp:2453
+#: ../src/verbs.cpp:2463
 msgid "Lower the current layer"
 msgstr "Presunie aktuálnu vrstvu o úroveň nižšie"
 
-#: ../src/verbs.cpp:2454
+#: ../src/verbs.cpp:2464
 msgid "Duplicate Current Layer"
 msgstr "Duplikovať aktuálnu vrstvu"
 
-#: ../src/verbs.cpp:2455
+#: ../src/verbs.cpp:2465
 msgid "Duplicate an existing layer"
 msgstr "Duplikovať existujúcu vrstvu"
 
-#: ../src/verbs.cpp:2456
+#: ../src/verbs.cpp:2466
 msgid "_Delete Current Layer"
 msgstr "O_dstrániť aktuálnu vrstvu"
 
-#: ../src/verbs.cpp:2457
+#: ../src/verbs.cpp:2467
 msgid "Delete the current layer"
 msgstr "Odstráni aktuálnu vrstvu"
 
-#: ../src/verbs.cpp:2458
+#: ../src/verbs.cpp:2468
 msgid "_Show/hide other layers"
 msgstr "_Zobraziť/skryť iné vrstvy"
 
-#: ../src/verbs.cpp:2459
+#: ../src/verbs.cpp:2469
 msgid "Solo the current layer"
 msgstr "Prepne viditeľnosť iba na aktuálnu vrstvu alebo na všetky vrstvy"
 
 #. Object
-#: ../src/verbs.cpp:2462
+#: ../src/verbs.cpp:2472
 msgid "Rotate _90&#176; CW"
 msgstr "Otočiť o +_90 stupňov"
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2465
+#: ../src/verbs.cpp:2475
 msgid "Rotate selection 90° clockwise"
 msgstr "Otočí výber 90° v smere hodinových ručičiek"
 
-#: ../src/verbs.cpp:2466
+#: ../src/verbs.cpp:2476
 msgid "Rotate 9_0&#176; CCW"
 msgstr "Otočiť o -_90 stupňov"
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2469
+#: ../src/verbs.cpp:2479
 msgid "Rotate selection 90° counter-clockwise"
 msgstr "Otočí výber 90° proti smeru hodinových ručičiek"
 
-#: ../src/verbs.cpp:2470
+#: ../src/verbs.cpp:2480
 msgid "Remove _Transformations"
 msgstr "Odstrániť _transformáciu"
 
-#: ../src/verbs.cpp:2471
+#: ../src/verbs.cpp:2481
 msgid "Remove transformations from object"
 msgstr "Odstráni transformácie z objektu"
 
-#: ../src/verbs.cpp:2472
+#: ../src/verbs.cpp:2482
 msgid "_Object to Path"
 msgstr "_Objekt na cestu"
 
-#: ../src/verbs.cpp:2473
+#: ../src/verbs.cpp:2483
 msgid "Convert selected object to path"
 msgstr "Skonvertuje zvolený objekt na cestu"
 
-#: ../src/verbs.cpp:2474
+#: ../src/verbs.cpp:2484
 msgid "_Flow into Frame"
 msgstr "_Tok textu do rámca"
 
-#: ../src/verbs.cpp:2475
+#: ../src/verbs.cpp:2485
 msgid ""
 "Put text into a frame (path or shape), creating a flowed text linked to the "
 "frame object"
@@ -17388,544 +17411,556 @@ msgstr ""
 "Umiestni text do rámca (cesta alebo tvar), čím sa vytvorí textový tok "
 "spojený s rámcom objektu"
 
-#: ../src/verbs.cpp:2476
+#: ../src/verbs.cpp:2486
 msgid "_Unflow"
 msgstr "Zr_ušiť tok textu"
 
-#: ../src/verbs.cpp:2477
+#: ../src/verbs.cpp:2487
 msgid "Remove text from frame (creates a single-line text object)"
 msgstr "Odstráni text z rámca (vytvorí objekt s jediným riadkom textu)"
 
-#: ../src/verbs.cpp:2478
+#: ../src/verbs.cpp:2488
 msgid "_Convert to Text"
 msgstr "_Konvertovať na text"
 
-#: ../src/verbs.cpp:2479
+#: ../src/verbs.cpp:2489
 msgid "Convert flowed text to regular text object (preserves appearance)"
 msgstr "Skonvertuje textový tok na bežný textový objekt (zachová vzhľad)"
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2491
 msgid "Flip _Horizontal"
 msgstr "Preklopiť v_odorovne"
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2491
 msgid "Flip selected objects horizontally"
 msgstr "Preklopí vybrané objekty vodorovne"
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2494
 msgid "Flip _Vertical"
 msgstr "Preklopiť z_visle"
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2494
 msgid "Flip selected objects vertically"
 msgstr "Preklopí vybrané objekty zvisle"
 
-#: ../src/verbs.cpp:2487
+#: ../src/verbs.cpp:2497
 msgid "Apply mask to selection (using the topmost object as mask)"
 msgstr "Použije masku na výber (použije najvrchnejší objekt ako masku)"
 
-#: ../src/verbs.cpp:2489
+#: ../src/verbs.cpp:2499
 msgid "Edit mask"
 msgstr "Upraviť masku"
 
-#: ../src/verbs.cpp:2490 ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2500 ../src/verbs.cpp:2506
 msgid "_Release"
 msgstr "_Uvoľniť"
 
-#: ../src/verbs.cpp:2491
+#: ../src/verbs.cpp:2501
 msgid "Remove mask from selection"
 msgstr "Odstráni masku z výberu"
 
-#: ../src/verbs.cpp:2493
+#: ../src/verbs.cpp:2503
 msgid ""
 "Apply clipping path to selection (using the topmost object as clipping path)"
 msgstr ""
 "Použije orezávaciu cestu na výber (použije najvrchnejší objekt ako "
 "orezávaciu cestu)"
 
-#: ../src/verbs.cpp:2495 ../src/widgets/toolbox.cpp:1446
+#: ../src/verbs.cpp:2505 ../src/widgets/toolbox.cpp:1472
 msgid "Edit clipping path"
 msgstr "Upraviť orezávaciu cestu"
 
-#: ../src/verbs.cpp:2497
+#: ../src/verbs.cpp:2507
 msgid "Remove clipping path from selection"
 msgstr "Odstráni orezávaciu cestu z výberu"
 
 #. Tools
-#: ../src/verbs.cpp:2500
+#: ../src/verbs.cpp:2510
 msgid "Select"
 msgstr "Vybrať"
 
-#: ../src/verbs.cpp:2501
+#: ../src/verbs.cpp:2511
 msgid "Select and transform objects"
 msgstr "Výber a transformácia objektov"
 
-#: ../src/verbs.cpp:2502
+#: ../src/verbs.cpp:2512
 msgid "Node Edit"
 msgstr "Upraviť uzol"
 
-#: ../src/verbs.cpp:2503
+#: ../src/verbs.cpp:2513
 msgid "Edit paths by nodes"
 msgstr "Upraviť uzly cesty"
 
-#: ../src/verbs.cpp:2505
+#: ../src/verbs.cpp:2515
 msgid "Tweak objects by sculpting or painting"
 msgstr "Doladiť objekty sochárstvom alebo maľovaním"
 
-#: ../src/verbs.cpp:2507
+#: ../src/verbs.cpp:2517
+msgid "Spray objects by sculpting or painting"
+msgstr "Sprejovať objekty sochárstvom alebo maľovaním"
+
+#: ../src/verbs.cpp:2519
 msgid "Create rectangles and squares"
 msgstr "Vytvorenie obdĺžnikov a štvorcov"
 
-#: ../src/verbs.cpp:2509
+#: ../src/verbs.cpp:2521
 msgid "Create 3D boxes"
 msgstr "Vytvoriť kvádre"
 
-#: ../src/verbs.cpp:2511
+#: ../src/verbs.cpp:2523
 msgid "Create circles, ellipses, and arcs"
 msgstr "Vytvorenie kruhov, elíps a oblúkov"
 
-#: ../src/verbs.cpp:2513
+#: ../src/verbs.cpp:2525
 msgid "Create stars and polygons"
 msgstr "Vytvorenie hviezd a mnohouholníkov"
 
-#: ../src/verbs.cpp:2515
+#: ../src/verbs.cpp:2527
 msgid "Create spirals"
 msgstr "Vytvorenie špirál"
 
-#: ../src/verbs.cpp:2517
+#: ../src/verbs.cpp:2529
 msgid "Draw freehand lines"
 msgstr "Kreslenie voľnou rukou"
 
-#: ../src/verbs.cpp:2519
+#: ../src/verbs.cpp:2531
 msgid "Draw Bezier curves and straight lines"
 msgstr "Kreslenie bézierovych čiar a priamych čiar"
 
-#: ../src/verbs.cpp:2521
+#: ../src/verbs.cpp:2533
 msgid "Draw calligraphic or brush strokes"
 msgstr "Kresliť kaligrafický ťah alebo ťah štetca"
 
-#: ../src/verbs.cpp:2523
+#: ../src/verbs.cpp:2535
 msgid "Create and edit text objects"
 msgstr "Vytvorenie a úprava textových objektov"
 
-#: ../src/verbs.cpp:2525
+#: ../src/verbs.cpp:2537
 msgid "Create and edit gradients"
 msgstr "Vytvorenie a úprava farebných prechodov"
 
-#: ../src/verbs.cpp:2527
+#: ../src/verbs.cpp:2539
 msgid "Zoom in or out"
 msgstr "Priblížiť alebo oddialiť"
 
-#: ../src/verbs.cpp:2529
+#: ../src/verbs.cpp:2541
 msgid "Pick colors from image"
 msgstr "Vybrať farby z obrázka"
 
-#: ../src/verbs.cpp:2531
+#: ../src/verbs.cpp:2543
 msgid "Create diagram connectors"
 msgstr "Vytvoriť konektory diagramu"
 
-#: ../src/verbs.cpp:2533
+#: ../src/verbs.cpp:2545
 msgid "Fill bounded areas"
 msgstr "Vyplniť ohraničené oblasti"
 
-#: ../src/verbs.cpp:2534
+#: ../src/verbs.cpp:2546
 msgid "LPE Edit"
 msgstr "Upraviť efekty cesty"
 
-#: ../src/verbs.cpp:2535
+#: ../src/verbs.cpp:2547
 msgid "Edit Path Effect parameters"
 msgstr "Upraviť parametre efektu cesty"
 
-#: ../src/verbs.cpp:2537
+#: ../src/verbs.cpp:2549
 msgid "Erase existing paths"
 msgstr "Zmazať existujúce cesty"
 
-#: ../src/verbs.cpp:2539
+#: ../src/verbs.cpp:2551
 msgid "Do geometric constructions"
 msgstr "Vytvárať geometrické konštrukcie"
 
 #. Tool prefs
-#: ../src/verbs.cpp:2541
+#: ../src/verbs.cpp:2553
 msgid "Selector Preferences"
 msgstr "Nastavenie Výberu"
 
-#: ../src/verbs.cpp:2542
+#: ../src/verbs.cpp:2554
 msgid "Open Preferences for the Selector tool"
 msgstr "Otvorí Nastavenia pre nástroj Výber"
 
-#: ../src/verbs.cpp:2543
+#: ../src/verbs.cpp:2555
 msgid "Node Tool Preferences"
 msgstr "Nastavenie nástroja s uzlami"
 
-#: ../src/verbs.cpp:2544
+#: ../src/verbs.cpp:2556
 msgid "Open Preferences for the Node tool"
 msgstr "Otvorí Nastavenia pre nástroj  Uzol"
 
-#: ../src/verbs.cpp:2545
+#: ../src/verbs.cpp:2557
 msgid "Tweak Tool Preferences"
 msgstr "Nastavenie nástroja Ladenie"
 
-#: ../src/verbs.cpp:2546
+#: ../src/verbs.cpp:2558
 msgid "Open Preferences for the Tweak tool"
 msgstr "Otvorí Nastavenia pre nástroj Ladenie"
 
-#: ../src/verbs.cpp:2547
+#: ../src/verbs.cpp:2559
+msgid "Spray Tool Preferences"
+msgstr "Nastavenia nástroja Sprej"
+
+#: ../src/verbs.cpp:2560
+msgid "Open Preferences for the Spray tool"
+msgstr "Otvorí Nastavenia pre nástroj Sprej"
+
+#: ../src/verbs.cpp:2561
 msgid "Rectangle Preferences"
 msgstr "Nastavenia obdĺžnika"
 
-#: ../src/verbs.cpp:2548
+#: ../src/verbs.cpp:2562
 msgid "Open Preferences for the Rectangle tool"
 msgstr "Otvorí Nastavenia pre nástroj Obdĺžnik"
 
-#: ../src/verbs.cpp:2549
+#: ../src/verbs.cpp:2563
 msgid "3D Box Preferences"
 msgstr "Nastavenia kvádra"
 
-#: ../src/verbs.cpp:2550
+#: ../src/verbs.cpp:2564
 msgid "Open Preferences for the 3D Box tool"
 msgstr "Otvorí Nastavenia pre nástroj Kváder"
 
-#: ../src/verbs.cpp:2551
+#: ../src/verbs.cpp:2565
 msgid "Ellipse Preferences"
 msgstr "Nastavenia elipsy"
 
-#: ../src/verbs.cpp:2552
+#: ../src/verbs.cpp:2566
 msgid "Open Preferences for the Ellipse tool"
 msgstr "Otvorí Nastavenia pre nástroj Elipsa"
 
-#: ../src/verbs.cpp:2553
+#: ../src/verbs.cpp:2567
 msgid "Star Preferences"
 msgstr "Nastavenia hviezdy"
 
-#: ../src/verbs.cpp:2554
+#: ../src/verbs.cpp:2568
 msgid "Open Preferences for the Star tool"
 msgstr "Otvorí Nastavenia pre nástroj Hviezda"
 
-#: ../src/verbs.cpp:2555
+#: ../src/verbs.cpp:2569
 msgid "Spiral Preferences"
 msgstr "Nastavenia špirály"
 
-#: ../src/verbs.cpp:2556
+#: ../src/verbs.cpp:2570
 msgid "Open Preferences for the Spiral tool"
 msgstr "Otvorí Nastavenia pre nástroj Špirála"
 
-#: ../src/verbs.cpp:2557
+#: ../src/verbs.cpp:2571
 msgid "Pencil Preferences"
 msgstr "Nastavenia ceruzky"
 
-#: ../src/verbs.cpp:2558
+#: ../src/verbs.cpp:2572
 msgid "Open Preferences for the Pencil tool"
 msgstr "Otvorí Nastavenia pre nástroj Ceruzka"
 
-#: ../src/verbs.cpp:2559
+#: ../src/verbs.cpp:2573
 msgid "Pen Preferences"
 msgstr "Nastavenia pera"
 
-#: ../src/verbs.cpp:2560
+#: ../src/verbs.cpp:2574
 msgid "Open Preferences for the Pen tool"
 msgstr "Otvorí Nastavenia pre nástroj Pero"
 
-#: ../src/verbs.cpp:2561
+#: ../src/verbs.cpp:2575
 msgid "Calligraphic Preferences"
 msgstr "Nastavenia kaligrafickej čiary"
 
-#: ../src/verbs.cpp:2562
+#: ../src/verbs.cpp:2576
 msgid "Open Preferences for the Calligraphy tool"
 msgstr "Otvorí Nastavenia pre nástroj Kaligrafické pero"
 
-#: ../src/verbs.cpp:2563
+#: ../src/verbs.cpp:2577
 msgid "Text Preferences"
 msgstr "Nastavenie textu"
 
-#: ../src/verbs.cpp:2564
+#: ../src/verbs.cpp:2578
 msgid "Open Preferences for the Text tool"
 msgstr "Otvorí Nastavenia pre nástroj Text"
 
-#: ../src/verbs.cpp:2565
+#: ../src/verbs.cpp:2579
 msgid "Gradient Preferences"
 msgstr "Nastavenia Farebného prechodu"
 
-#: ../src/verbs.cpp:2566
+#: ../src/verbs.cpp:2580
 msgid "Open Preferences for the Gradient tool"
 msgstr "Otvorí Nastavenia pre nástroj Farebný prechod"
 
-#: ../src/verbs.cpp:2567
+#: ../src/verbs.cpp:2581
 msgid "Zoom Preferences"
 msgstr "Nastavenie zmeny mierky zobrazenia"
 
-#: ../src/verbs.cpp:2568
+#: ../src/verbs.cpp:2582
 msgid "Open Preferences for the Zoom tool"
 msgstr "Otvorí Nastavenia pre nástroj Zmena mierky"
 
-#: ../src/verbs.cpp:2569
+#: ../src/verbs.cpp:2583
 msgid "Dropper Preferences"
 msgstr "Nastavenie kvapkadla"
 
-#: ../src/verbs.cpp:2570
+#: ../src/verbs.cpp:2584
 msgid "Open Preferences for the Dropper tool"
 msgstr "Otvorí Nastavenia pre nástroj Kvapkadlo"
 
-#: ../src/verbs.cpp:2571
+#: ../src/verbs.cpp:2585
 msgid "Connector Preferences"
 msgstr "Nastavenie pre nástroj Konektor"
 
-#: ../src/verbs.cpp:2572
+#: ../src/verbs.cpp:2586
 msgid "Open Preferences for the Connector tool"
 msgstr "Otvorí Nastavenia pre nástroj Konektor"
 
-#: ../src/verbs.cpp:2573
+#: ../src/verbs.cpp:2587
 msgid "Paint Bucket Preferences"
 msgstr "Nastavenia Vedra s farbou"
 
-#: ../src/verbs.cpp:2574
+#: ../src/verbs.cpp:2588
 msgid "Open Preferences for the Paint Bucket tool"
 msgstr "Otvorí Nastavenia pre nástroj Vedro s farbou"
 
-#: ../src/verbs.cpp:2575
+#: ../src/verbs.cpp:2589
 msgid "Eraser Preferences"
 msgstr "Nastavenia gumy"
 
-#: ../src/verbs.cpp:2576
+#: ../src/verbs.cpp:2590
 msgid "Open Preferences for the Eraser tool"
 msgstr "Otvorí Nastavenia nástroja Guma"
 
-#: ../src/verbs.cpp:2577
+#: ../src/verbs.cpp:2591
 msgid "LPE Tool Preferences"
 msgstr "Nastavenie nástroja efektov cesty"
 
-#: ../src/verbs.cpp:2578
+#: ../src/verbs.cpp:2592
 msgid "Open Preferences for the LPETool tool"
 msgstr "Otvorí Nastavenie nástroja efektov cesty"
 
 #. Zoom/View
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2595
 msgid "Zoom In"
 msgstr "Priblížiť"
 
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2595
 msgid "Zoom in"
 msgstr "Priblíži zobrazenie"
 
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2596
 msgid "Zoom Out"
 msgstr "Oddialiť"
 
-#: ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2596
 msgid "Zoom out"
 msgstr "Oddiali zobrazenie"
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2597
 msgid "_Rulers"
 msgstr "_Pravítka"
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2597
 msgid "Show or hide the canvas rulers"
 msgstr "Zobrazí alebo skryje pravítka plátna"
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2598
 msgid "Scroll_bars"
 msgstr "Po_suvníky"
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2598
 msgid "Show or hide the canvas scrollbars"
 msgstr "Zobrazí alebo skryje posuvníky plátna"
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2599
 msgid "_Grid"
 msgstr "M_riežka"
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2599
 msgid "Show or hide the grid"
 msgstr "Zobrazí alebo skrje mriežku"
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2600
 msgid "G_uides"
 msgstr "_Vodidlá"
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2600
 msgid "Show or hide guides (drag from a ruler to create a guide)"
 msgstr "Zobrazí alebo skryje vodidlá (vodidlo vytvoríte ťahaním z pravítka)"
 
-#: ../src/verbs.cpp:2587
+#: ../src/verbs.cpp:2601
 msgid "Toggle snapping on or off"
 msgstr "Prepnúť prichytávanie"
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2602
 msgid "Nex_t Zoom"
 msgstr "Nasledujúca ve_ľkosť"
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2602
 msgid "Next zoom (from the history of zooms)"
 msgstr ""
 "Nasledujúca veľkosť mierky zobrazenia (podľa histórie zmien mierky "
 "zobrazenia)"
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2604
 msgid "Pre_vious Zoom"
 msgstr "Predchádzajúca veľkosť"
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2604
 msgid "Previous zoom (from the history of zooms)"
 msgstr ""
 "Predchádzajúca veľkosť mierky zobrazenia (podľa histórie zmien mierky "
 "zobrazenia)"
 
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2606
 msgid "Zoom 1:_1"
 msgstr "Mierka 1:_1"
 
-#: ../src/verbs.cpp:2592
+#: ../src/verbs.cpp:2606
 msgid "Zoom to 1:1"
 msgstr "Mierka 1:1"
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2608
 msgid "Zoom 1:_2"
 msgstr "Mierka 1:_2"
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2608
 msgid "Zoom to 1:2"
 msgstr "Mierka 1:2"
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2610
 msgid "_Zoom 2:1"
 msgstr "_Mierka 2:1"
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2610
 msgid "Zoom to 2:1"
 msgstr "Mierka 2:1"
 
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2613
 msgid "_Fullscreen"
 msgstr "Na _celú obrazovku"
 
-#: ../src/verbs.cpp:2599
+#: ../src/verbs.cpp:2613
 msgid "Stretch this document window to full screen"
 msgstr "Roztiahne okno tohoto dokumentu na celú obrazovku"
 
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2616
 msgid "Toggle _Focus Mode"
 msgstr "Prepnúť režim _zamerania"
 
-#: ../src/verbs.cpp:2602
+#: ../src/verbs.cpp:2616
 msgid "Remove excess toolbars to focus on drawing"
 msgstr ""
 "Odstrániť nadbytočné panely nástroje aby sa dalo sústrediť na kreslenie"
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2618
 msgid "Duplic_ate Window"
 msgstr "Duplikov_ať okno"
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2618
 msgid "Open a new window with the same document"
 msgstr "Otvorí nové okno s rovnakým dokumentom"
 
-#: ../src/verbs.cpp:2606
+#: ../src/verbs.cpp:2620
 msgid "_New View Preview"
 msgstr "_Nové zobrazenie náhľadu"
 
-#: ../src/verbs.cpp:2607
+#: ../src/verbs.cpp:2621
 msgid "New View Preview"
 msgstr "Nové zobrazenie náhľadu"
 
 #. "view_new_preview"
-#: ../src/verbs.cpp:2609
+#: ../src/verbs.cpp:2623
 msgid "_Normal"
 msgstr "_Normálne"
 
-#: ../src/verbs.cpp:2610
+#: ../src/verbs.cpp:2624
 msgid "Switch to normal display mode"
 msgstr "Prepne do normálneho zobrazovacieho režimu"
 
-#: ../src/verbs.cpp:2611
+#: ../src/verbs.cpp:2625
 msgid "No _Filters"
 msgstr "Žiadne _filtre"
 
-#: ../src/verbs.cpp:2612
+#: ../src/verbs.cpp:2626
 msgid "Switch to normal display without filters"
 msgstr "Prepne do normálneho zobrazovacieho režimu bez filtrov"
 
-#: ../src/verbs.cpp:2613
+#: ../src/verbs.cpp:2627
 msgid "_Outline"
 msgstr "_Obrys"
 
-#: ../src/verbs.cpp:2614
+#: ../src/verbs.cpp:2628
 msgid "Switch to outline (wireframe) display mode"
 msgstr "Prepne do režimu zobrazovania obrysov (drôtený model)"
 
-#: ../src/verbs.cpp:2615
+#: ../src/verbs.cpp:2629
 msgid "_Toggle"
 msgstr "_Prepnutie"
 
-#: ../src/verbs.cpp:2616
+#: ../src/verbs.cpp:2630
 msgid "Toggle between normal and outline display modes"
 msgstr "Prepína medzi normálnym režimom a zobrazením obrysov"
 
-#: ../src/verbs.cpp:2618
+#: ../src/verbs.cpp:2632
 msgid "Color-managed view"
 msgstr "Zobrazenie so správou farieb"
 
-#: ../src/verbs.cpp:2619
+#: ../src/verbs.cpp:2633
 msgid "Toggle color-managed display for this document window"
 msgstr "Prepne zobrazenie so správou farieb tohto okna dokumentu"
 
-#: ../src/verbs.cpp:2621
+#: ../src/verbs.cpp:2635
 msgid "Ico_n Preview..."
 msgstr "Náhľad iko_ny..."
 
-#: ../src/verbs.cpp:2622
+#: ../src/verbs.cpp:2636
 msgid "Open a window to preview objects at different icon resolutions"
 msgstr "Otvorí okno pre náhľad objektov pri rozličných rozlíšeniach ikon"
 
-#: ../src/verbs.cpp:2624
+#: ../src/verbs.cpp:2638
 msgid "Zoom to fit page in window"
 msgstr "Zmení veľkosť mierky zobrazenia tak, aby sa strana zmestila do okna"
 
-#: ../src/verbs.cpp:2625
+#: ../src/verbs.cpp:2639
 msgid "Page _Width"
 msgstr "_Šírka strany"
 
-#: ../src/verbs.cpp:2626
+#: ../src/verbs.cpp:2640
 msgid "Zoom to fit page width in window"
 msgstr "Zmení veľkosť mierky zobrazenia podľa šírky strany"
 
-#: ../src/verbs.cpp:2628
+#: ../src/verbs.cpp:2642
 msgid "Zoom to fit drawing in window"
 msgstr "Zmení veľkosť mierky zobrazenia tak, aby sa kresba zmestila do okna"
 
-#: ../src/verbs.cpp:2630
+#: ../src/verbs.cpp:2644
 msgid "Zoom to fit selection in window"
 msgstr "Zmení veľkosť mierky zobrazenia tak, aby sa výber zmestil do okna"
 
 #. Dialogs
-#: ../src/verbs.cpp:2633
+#: ../src/verbs.cpp:2647
 msgid "In_kscape Preferences..."
 msgstr "Nastavenia In_kscape..."
 
-#: ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2648
 msgid "Edit global Inkscape preferences"
 msgstr "Upravovať globálne nastavenia Inkscape"
 
-#: ../src/verbs.cpp:2635
+#: ../src/verbs.cpp:2649
 msgid "_Document Properties..."
 msgstr "_Vlastnosti dokumentu..."
 
-#: ../src/verbs.cpp:2636
+#: ../src/verbs.cpp:2650
 msgid "Edit properties of this document (to be saved with the document)"
 msgstr "Upravovať vlastnosti dokumentu (uložia sa s dokumentom)"
 
-#: ../src/verbs.cpp:2637
+#: ../src/verbs.cpp:2651
 msgid "Document _Metadata..."
 msgstr "_Metadáta dokumentu..."
 
-#: ../src/verbs.cpp:2638
+#: ../src/verbs.cpp:2652
 msgid "Edit document metadata (to be saved with the document)"
 msgstr "Upravovať metadáta dokumentu (uložia sa s dokumentom)"
 
-#: ../src/verbs.cpp:2639
+#: ../src/verbs.cpp:2653
 msgid "_Fill and Stroke..."
 msgstr "Výp_lň a ťah..."
 
-#: ../src/verbs.cpp:2640
+#: ../src/verbs.cpp:2654
 msgid ""
 "Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
 msgstr ""
@@ -17933,107 +17968,115 @@ msgstr ""
 "objektov"
 
 #. TRANSLATORS: "Swatches" means: color samples
-#: ../src/verbs.cpp:2642
+#: ../src/verbs.cpp:2656
 msgid "S_watches..."
 msgstr "Vzorkovník..."
 
-#: ../src/verbs.cpp:2643
+#: ../src/verbs.cpp:2657
 msgid "Select colors from a swatches palette"
 msgstr "Nastaviť farby zo vzorkovníka"
 
-#: ../src/verbs.cpp:2644
+#: ../src/verbs.cpp:2658
 msgid "Transfor_m..."
 msgstr "Transfor_mácia..."
 
-#: ../src/verbs.cpp:2645
+#: ../src/verbs.cpp:2659
 msgid "Precisely control objects' transformations"
 msgstr "Vykonať precízne transformácie objektov"
 
-#: ../src/verbs.cpp:2646
+#: ../src/verbs.cpp:2660
 msgid "_Align and Distribute..."
 msgstr "Z_arovnanie a umiestnenie..."
 
-#: ../src/verbs.cpp:2647
+#: ../src/verbs.cpp:2661
 msgid "Align and distribute objects"
 msgstr "Zarovná a rozmiestni objekty"
 
-#: ../src/verbs.cpp:2648
+#: ../src/verbs.cpp:2662
+msgid "_Spray options..."
+msgstr "Možnosti _spreja..."
+
+#: ../src/verbs.cpp:2663
+msgid "Some options for the spray"
+msgstr "Zobraziť možnosti Spreja"
+
+#: ../src/verbs.cpp:2664
 msgid "Undo _History..."
 msgstr "_História vrátení..."
 
-#: ../src/verbs.cpp:2649
+#: ../src/verbs.cpp:2665
 msgid "Undo History"
 msgstr "História vrátení"
 
-#: ../src/verbs.cpp:2650
+#: ../src/verbs.cpp:2666
 msgid "_Text and Font..."
 msgstr "Text a pís_mo..."
 
-#: ../src/verbs.cpp:2651
+#: ../src/verbs.cpp:2667
 msgid "View and select font family, font size and other text properties"
 msgstr "Zobraziť a vybrať rodinu písma, veľkosť písma a iné vlastnosti textu"
 
-#: ../src/verbs.cpp:2652
+#: ../src/verbs.cpp:2668
 msgid "_XML Editor..."
 msgstr "_XML editor..."
 
-#: ../src/verbs.cpp:2653
+#: ../src/verbs.cpp:2669
 msgid "View and edit the XML tree of the document"
 msgstr "Zobraziť a upravovať XML strom dokumentu"
 
-#: ../src/verbs.cpp:2654
+#: ../src/verbs.cpp:2670
 msgid "_Find..."
 msgstr "_Hľadať..."
 
-#: ../src/verbs.cpp:2655
+#: ../src/verbs.cpp:2671
 msgid "Find objects in document"
 msgstr "Vyhľadá objekty v dokumente"
 
-#: ../src/verbs.cpp:2656
+#: ../src/verbs.cpp:2672
 msgid "Find and _Replace Text..."
 msgstr "Nájsť a nahr_radiť text..."
 
-#: ../src/verbs.cpp:2657
+#: ../src/verbs.cpp:2673
 msgid "Find and replace text in document"
 msgstr "Vyhľadá a nahradí text v dokumente"
 
-#: ../src/verbs.cpp:2658
+#: ../src/verbs.cpp:2674
 msgid "Check Spellin_g..."
 msgstr "_Skontrolovať pravopis..."
 
-#: ../src/verbs.cpp:2659
+#: ../src/verbs.cpp:2675
 msgid "Check spelling of text in document"
 msgstr "Skontrolovať pravopis textu v dokumente"
 
-#: ../src/verbs.cpp:2660
+#: ../src/verbs.cpp:2676
 msgid "_Messages..."
 msgstr "Sprá_vy..."
 
-#: ../src/verbs.cpp:2661
+#: ../src/verbs.cpp:2677
 msgid "View debug messages"
 msgstr "Zobrazí ladiace informácie"
 
-#: ../src/verbs.cpp:2662
+#: ../src/verbs.cpp:2678
 msgid "S_cripts..."
 msgstr "_Skripty..."
 
-#: ../src/verbs.cpp:2663
+#: ../src/verbs.cpp:2679
 msgid "Run scripts"
 msgstr "Spustiť skripty"
 
-#: ../src/verbs.cpp:2664
+#: ../src/verbs.cpp:2680
 msgid "Show/Hide D_ialogs"
 msgstr "Zobraziť/skryť d_ialógy"
 
-#: ../src/verbs.cpp:2665
+#: ../src/verbs.cpp:2681
 msgid "Show or hide all open dialogs"
 msgstr "Zobrazí alebo skryje všetky aktívne dialógy"
 
-#: ../src/verbs.cpp:2666
+#: ../src/verbs.cpp:2682
 msgid "Create Tiled Clones..."
 msgstr "Vytvoriť dlaždicové klony..."
 
-#: ../src/verbs.cpp:2667
+#: ../src/verbs.cpp:2683
 msgid ""
 "Create multiple clones of selected object, arranging them into a pattern or "
 "scattering"
@@ -18041,221 +18084,217 @@ msgstr ""
 "Vytvoriť viaceré klony vybraného objektu a zoradiť ich do vzoru alebo "
 "rozptýliť"
 
-#: ../src/verbs.cpp:2668
+#: ../src/verbs.cpp:2684
 msgid "_Object Properties..."
 msgstr "Vlastnosti objektu..."
 
-#: ../src/verbs.cpp:2669
+#: ../src/verbs.cpp:2685
 msgid "Edit the ID, locked and visible status, and other object properties"
 msgstr "Upravovať ID, stav zamknutý alebo viditeľný a iné vlastnosti objektu"
 
-#: ../src/verbs.cpp:2672
-msgid "_Instant Messaging..."
-msgstr "Sprá_vy..."
-
-#: ../src/verbs.cpp:2672
-msgid "Jabber Instant Messaging Client"
-msgstr "Klient Jabber pre správy"
-
-#: ../src/verbs.cpp:2674
+#. #ifdef WITH_INKBOARD
+#. new DialogVerb(SP_VERB_XMPP_CLIENT, "DialogXmppClient",
+#. N_("_Instant Messaging..."), N_("Jabber Instant Messaging Client"), NULL),
+#. #endif
+#: ../src/verbs.cpp:2690
 msgid "_Input Devices..."
 msgstr "Vstupné _zariadenia..."
 
-#: ../src/verbs.cpp:2675 ../src/verbs.cpp:2677
+#: ../src/verbs.cpp:2691 ../src/verbs.cpp:2693
 msgid "Configure extended input devices, such as a graphics tablet"
 msgstr "Konfigurovať rozšírené vstupné zariadenia ako grafický tablet"
 
-#: ../src/verbs.cpp:2676
+#: ../src/verbs.cpp:2692
 msgid "_Input Devices (new)..."
 msgstr "_Vstupné zariadenia (nové)..."
 
-#: ../src/verbs.cpp:2678
+#: ../src/verbs.cpp:2694
 msgid "_Extensions..."
 msgstr "_Rozšírenia..."
 
-#: ../src/verbs.cpp:2679
+#: ../src/verbs.cpp:2695
 msgid "Query information about extensions"
 msgstr "Získať informácie o rozšíreniach"
 
-#: ../src/verbs.cpp:2680
+#: ../src/verbs.cpp:2696
 msgid "Layer_s..."
 msgstr "Vr_stvy..."
 
-#: ../src/verbs.cpp:2681
+#: ../src/verbs.cpp:2697
 msgid "View Layers"
 msgstr "Zobrazí vrstvy"
 
-#: ../src/verbs.cpp:2682
+#: ../src/verbs.cpp:2698
 msgid "Path Effect Editor..."
 msgstr "Editor efektov ciest..."
 
-#: ../src/verbs.cpp:2683
+#: ../src/verbs.cpp:2699
 msgid "Manage, edit, and apply path effects"
 msgstr "Spravovať, tvoriť a používať efekty cesty"
 
-#: ../src/verbs.cpp:2684
+#: ../src/verbs.cpp:2700
 msgid "Filter Editor..."
 msgstr "Editor filtrov..."
 
-#: ../src/verbs.cpp:2685
+#: ../src/verbs.cpp:2701
 msgid "Manage, edit, and apply SVG filters"
 msgstr "Spravovať, tvoriť a používať efekty SVG"
 
-#: ../src/verbs.cpp:2686
+#: ../src/verbs.cpp:2702
 msgid "SVG Font Editor..."
 msgstr "Editor SVG písiem..."
 
-#: ../src/verbs.cpp:2687
+#: ../src/verbs.cpp:2703
 msgid "Edit SVG fonts"
 msgstr "Spravovať SVG písma"
 
 #. Help
-#: ../src/verbs.cpp:2690
+#: ../src/verbs.cpp:2706
 msgid "About E_xtensions"
 msgstr "O _rozšíreniach"
 
-#: ../src/verbs.cpp:2691
+#: ../src/verbs.cpp:2707
 msgid "Information on Inkscape extensions"
 msgstr "Informácie o rozšíreniach Inkscape"
 
-#: ../src/verbs.cpp:2692
+#: ../src/verbs.cpp:2708
 msgid "About _Memory"
 msgstr "O _pamäti"
 
-#: ../src/verbs.cpp:2693
+#: ../src/verbs.cpp:2709
 msgid "Memory usage information"
 msgstr "Informácie o využití pamäte"
 
-#: ../src/verbs.cpp:2694
+#: ../src/verbs.cpp:2710
 msgid "_About Inkscape"
 msgstr "_O Inkscape"
 
-#: ../src/verbs.cpp:2695
+#: ../src/verbs.cpp:2711
 msgid "Inkscape version, authors, license"
 msgstr "Verzia, autori, licencia Inkscape"
 
 #. new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"),
 #. N_("Distribution terms"), /*"show_license"*/"inkscape_options"),
 #. Tutorials
-#: ../src/verbs.cpp:2700
+#: ../src/verbs.cpp:2716
 msgid "Inkscape: _Basic"
 msgstr "Inkscape: _Základy"
 
-#: ../src/verbs.cpp:2701
+#: ../src/verbs.cpp:2717
 msgid "Getting started with Inkscape"
 msgstr "Úvod do Inkscape"
 
 #. "tutorial_basic"
-#: ../src/verbs.cpp:2702
+#: ../src/verbs.cpp:2718
 msgid "Inkscape: _Shapes"
 msgstr "Inkscape: _Tvary"
 
-#: ../src/verbs.cpp:2703
+#: ../src/verbs.cpp:2719
 msgid "Using shape tools to create and edit shapes"
 msgstr "Používanie nástrojov na tvorbu a úpravu tvarov"
 
-#: ../src/verbs.cpp:2704
+#: ../src/verbs.cpp:2720
 msgid "Inkscape: _Advanced"
 msgstr "Inkscape: _Pokročilé"
 
-#: ../src/verbs.cpp:2705
+#: ../src/verbs.cpp:2721
 msgid "Advanced Inkscape topics"
 msgstr "Pokročilé témy Inkscape"
 
 #. "tutorial_advanced"
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2707
+#: ../src/verbs.cpp:2723
 msgid "Inkscape: T_racing"
 msgstr "Inkscape: _Vektorizácia"
 
-#: ../src/verbs.cpp:2708
+#: ../src/verbs.cpp:2724
 msgid "Using bitmap tracing"
 msgstr "Používanie vektorizácie bitmáp"
 
 #. "tutorial_tracing"
-#: ../src/verbs.cpp:2709
+#: ../src/verbs.cpp:2725
 msgid "Inkscape: _Calligraphy"
 msgstr "Inkscape: _Kaligrafia"
 
-#: ../src/verbs.cpp:2710
+#: ../src/verbs.cpp:2726
 msgid "Using the Calligraphy pen tool"
 msgstr "Používanie kaligrafického pera"
 
-#: ../src/verbs.cpp:2711
+#: ../src/verbs.cpp:2727
 msgid "_Elements of Design"
 msgstr "_Prvky návrhu"
 
-#: ../src/verbs.cpp:2712
+#: ../src/verbs.cpp:2728
 msgid "Principles of design in the tutorial form"
 msgstr "Princípy návrhu vo forme návodu"
 
 #. "tutorial_design"
-#: ../src/verbs.cpp:2713
+#: ../src/verbs.cpp:2729
 msgid "_Tips and Tricks"
 msgstr "_Tipy a triky"
 
-#: ../src/verbs.cpp:2714
+#: ../src/verbs.cpp:2730
 msgid "Miscellaneous tips and tricks"
 msgstr "Rôzne tipy a triky"
 
 #. "tutorial_tips"
 #. Effect -- renamed Extension
-#: ../src/verbs.cpp:2717
+#: ../src/verbs.cpp:2733
 msgid "Previous Extension"
 msgstr "Predošlé rozšírenie"
 
-#: ../src/verbs.cpp:2718
+#: ../src/verbs.cpp:2734
 msgid "Repeat the last extension with the same settings"
 msgstr "Zopakovať posledný efekt rozšírenia s rovnakými nastaveniami"
 
-#: ../src/verbs.cpp:2719
+#: ../src/verbs.cpp:2735
 msgid "Previous Extension Settings..."
 msgstr "Nastavenia predošlého rozšírenia..."
 
-#: ../src/verbs.cpp:2720
+#: ../src/verbs.cpp:2736
 msgid "Repeat the last extension with new settings"
 msgstr "Zopakovať posledný efekt rozšírenia s novými nastaveniami"
 
-#: ../src/verbs.cpp:2724
+#: ../src/verbs.cpp:2740
 msgid "Fit the page to the current selection"
 msgstr "Veľkosť strany podľa aktuálneho výberu"
 
-#: ../src/verbs.cpp:2726
+#: ../src/verbs.cpp:2742
 msgid "Fit the page to the drawing"
 msgstr "Veľkosť strany podľa kresby"
 
-#: ../src/verbs.cpp:2728
+#: ../src/verbs.cpp:2744
 msgid ""
 "Fit the page to the current selection or the drawing if there is no selection"
 msgstr ""
 "Prispôsobiť stránku súčasnému výberu alebo kresbe ak nie je nič vybrané"
 
 #. LockAndHide
-#: ../src/verbs.cpp:2730
+#: ../src/verbs.cpp:2746
 msgid "Unlock All"
 msgstr "Odomknúť všetko"
 
-#: ../src/verbs.cpp:2732
+#: ../src/verbs.cpp:2748
 msgid "Unlock All in All Layers"
 msgstr "Odomknúť všetko vo všetkých v_rstvách"
 
-#: ../src/verbs.cpp:2734
+#: ../src/verbs.cpp:2750
 msgid "Unhide All"
 msgstr "Odkryť všetko"
 
-#: ../src/verbs.cpp:2736
+#: ../src/verbs.cpp:2752
 msgid "Unhide All in All Layers"
 msgstr "Odkryť všetko vo všetkých vrstvách"
 
-#: ../src/verbs.cpp:2740
+#: ../src/verbs.cpp:2756
 msgid "Link an ICC color profile"
 msgstr "Pripojiť farebný profil ICC"
 
-#: ../src/verbs.cpp:2741
+#: ../src/verbs.cpp:2757
 msgid "Remove Color Profile"
 msgstr "Odstrániť farebný profil"
 
-#: ../src/verbs.cpp:2742
+#: ../src/verbs.cpp:2758
 msgid "Remove a linked ICC color profile"
 msgstr "Odstrániť farebný profil ICC"
 
@@ -18341,7 +18380,7 @@ msgstr "Veľkosť písma:"
 #. * text has been entered) to get a preview of the font.  Choose
 #. * some representative characters that users of your locale will be
 #. * interested in.
-#: ../src/widgets/font-selector.cpp:641 ../src/widgets/toolbox.cpp:6522
+#: ../src/widgets/font-selector.cpp:641
 msgid "AaBbCcIiPpQq12369$€¢?.;/()"
 msgstr "AaBbCcIiPpQqžšťď12368$€¢?.;/()"
 
@@ -18394,11 +18433,11 @@ msgstr "<small>Viaceré farebné prechody</small>"
 msgid "Edit the stops of the gradient"
 msgstr "Upraviť priehradky farebného prechodu"
 
-#: ../src/widgets/gradient-toolbar.cpp:527 ../src/widgets/toolbox.cpp:2630
-#: ../src/widgets/toolbox.cpp:2708 ../src/widgets/toolbox.cpp:3039
-#: ../src/widgets/toolbox.cpp:3077 ../src/widgets/toolbox.cpp:3692
-#: ../src/widgets/toolbox.cpp:3716 ../src/widgets/toolbox.cpp:5130
-#: ../src/widgets/toolbox.cpp:5159
+#: ../src/widgets/gradient-toolbar.cpp:527 ../src/widgets/toolbox.cpp:2657
+#: ../src/widgets/toolbox.cpp:2735 ../src/widgets/toolbox.cpp:3066
+#: ../src/widgets/toolbox.cpp:3104 ../src/widgets/toolbox.cpp:3719
+#: ../src/widgets/toolbox.cpp:3743 ../src/widgets/toolbox.cpp:5349
+#: ../src/widgets/toolbox.cpp:5378
 msgid "<b>New:</b>"
 msgstr "<b>Nový:</b>"
 
@@ -18425,10 +18464,10 @@ msgstr "Vytvoriť farebný prechod v ťahu"
 
 #. FIXME: implement averaging of all parameters for multiple selected
 #. gtk_label_set_markup(GTK_LABEL(l), _("<b>Average:</b>"));
-#: ../src/widgets/gradient-toolbar.cpp:610 ../src/widgets/toolbox.cpp:2632
-#: ../src/widgets/toolbox.cpp:3047 ../src/widgets/toolbox.cpp:3065
-#: ../src/widgets/toolbox.cpp:3694 ../src/widgets/toolbox.cpp:3705
-#: ../src/widgets/toolbox.cpp:5133 ../src/widgets/toolbox.cpp:5144
+#: ../src/widgets/gradient-toolbar.cpp:610 ../src/widgets/toolbox.cpp:2659
+#: ../src/widgets/toolbox.cpp:3074 ../src/widgets/toolbox.cpp:3092
+#: ../src/widgets/toolbox.cpp:3721 ../src/widgets/toolbox.cpp:3732
+#: ../src/widgets/toolbox.cpp:5352 ../src/widgets/toolbox.cpp:5363
 msgid "<b>Change:</b>"
 msgstr "<b>Zmeniť:</b>"
 
@@ -18985,494 +19024,498 @@ msgstr "Koncové značky  sa kreslia na poslednom uzle cesty alebo tvaru"
 msgid "Set stroke style"
 msgstr "Nastaviť štýl ťahu"
 
-#: ../src/widgets/toolbox.cpp:183
+#: ../src/widgets/toolbox.cpp:186
 msgid "Color/opacity used for color tweaking"
 msgstr "Farba/krytie použité pre ladenie farieb"
 
-#: ../src/widgets/toolbox.cpp:187
+#: ../src/widgets/toolbox.cpp:188
+msgid "Color/opacity used for color spraying"
+msgstr "Farba/krytie použité pre sprejovanie farieb"
+
+#: ../src/widgets/toolbox.cpp:192
 msgid "Style of new stars"
 msgstr "Štýl nových hviezd"
 
-#: ../src/widgets/toolbox.cpp:189
+#: ../src/widgets/toolbox.cpp:194
 msgid "Style of new rectangles"
 msgstr "Štýl nového obdĺžnika"
 
-#: ../src/widgets/toolbox.cpp:191
+#: ../src/widgets/toolbox.cpp:196
 msgid "Style of new 3D boxes"
 msgstr "Štýl nového kvádra"
 
-#: ../src/widgets/toolbox.cpp:193
+#: ../src/widgets/toolbox.cpp:198
 msgid "Style of new ellipses"
 msgstr "Štýl nových elíps"
 
-#: ../src/widgets/toolbox.cpp:195
+#: ../src/widgets/toolbox.cpp:200
 msgid "Style of new spirals"
 msgstr "Štýl nových špirál"
 
-#: ../src/widgets/toolbox.cpp:197
+#: ../src/widgets/toolbox.cpp:202
 msgid "Style of new paths created by Pencil"
 msgstr "Štýl nových ciest vytvorených Ceruzkou"
 
-#: ../src/widgets/toolbox.cpp:199
+#: ../src/widgets/toolbox.cpp:204
 msgid "Style of new paths created by Pen"
 msgstr "Štýl nových ciest vytvorených Perom"
 
-#: ../src/widgets/toolbox.cpp:201
+#: ../src/widgets/toolbox.cpp:206
 msgid "Style of new calligraphic strokes"
 msgstr "Štýl nového kaligrafického ťahu"
 
-#: ../src/widgets/toolbox.cpp:203 ../src/widgets/toolbox.cpp:205
+#: ../src/widgets/toolbox.cpp:208 ../src/widgets/toolbox.cpp:210
 msgid "TBD"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:215
+#: ../src/widgets/toolbox.cpp:220
 msgid "Style of Paint Bucket fill objects"
 msgstr "Štýl výplne objektov pomocou Vedra s farbou"
 
-#: ../src/widgets/toolbox.cpp:1289
+#: ../src/widgets/toolbox.cpp:1315
 msgid "Insert node"
 msgstr "Vložiť uzol"
 
-#: ../src/widgets/toolbox.cpp:1290
+#: ../src/widgets/toolbox.cpp:1316
 msgid "Insert new nodes into selected segments"
 msgstr "Vložiť nové uzly do vybraných segmentov"
 
-#: ../src/widgets/toolbox.cpp:1293
+#: ../src/widgets/toolbox.cpp:1319
 msgid "Insert"
 msgstr "Vložiť"
 
-#: ../src/widgets/toolbox.cpp:1301
+#: ../src/widgets/toolbox.cpp:1327
 msgid "Delete selected nodes"
 msgstr "Zmazať zvolené uzly"
 
-#: ../src/widgets/toolbox.cpp:1311
+#: ../src/widgets/toolbox.cpp:1337
 msgid "Join endnodes"
 msgstr "Spojiť koncové uzly"
 
-#: ../src/widgets/toolbox.cpp:1312
+#: ../src/widgets/toolbox.cpp:1338
 msgid "Join selected endnodes"
 msgstr "Spojiť vybrané koncové uzly"
 
-#: ../src/widgets/toolbox.cpp:1315
+#: ../src/widgets/toolbox.cpp:1341
 msgid "Join"
 msgstr "Spojiť"
 
-#: ../src/widgets/toolbox.cpp:1322
+#: ../src/widgets/toolbox.cpp:1348
 msgid "Break nodes"
 msgstr "Rozdeliť uzly"
 
-#: ../src/widgets/toolbox.cpp:1323
+#: ../src/widgets/toolbox.cpp:1349
 msgid "Break path at selected nodes"
 msgstr "Rozdeliť cestu v zvolenom uzle"
 
-#: ../src/widgets/toolbox.cpp:1333
+#: ../src/widgets/toolbox.cpp:1359
 msgid "Join with segment"
 msgstr "Spojiť s úsekom"
 
-#: ../src/widgets/toolbox.cpp:1334
+#: ../src/widgets/toolbox.cpp:1360
 msgid "Join selected endnodes with a new segment"
 msgstr "Spojiť vybrané koncové uzly novým segmentom"
 
-#: ../src/widgets/toolbox.cpp:1344
+#: ../src/widgets/toolbox.cpp:1370
 msgid "Delete segment between two non-endpoint nodes"
 msgstr "Zmazať úsek medzi dvomi vnútornými uzlami"
 
-#: ../src/widgets/toolbox.cpp:1353
+#: ../src/widgets/toolbox.cpp:1379
 msgid "Node Cusp"
 msgstr "Hrot v uzle"
 
-#: ../src/widgets/toolbox.cpp:1354
+#: ../src/widgets/toolbox.cpp:1380
 msgid "Make selected nodes corner"
 msgstr "Konvertovať vybrané uzly na rohy"
 
-#: ../src/widgets/toolbox.cpp:1363
+#: ../src/widgets/toolbox.cpp:1389
 msgid "Node Smooth"
 msgstr "Hladká v uzle"
 
-#: ../src/widgets/toolbox.cpp:1364
+#: ../src/widgets/toolbox.cpp:1390
 msgid "Make selected nodes smooth"
 msgstr "Konvertovať vybrané uzly na rovné"
 
-#: ../src/widgets/toolbox.cpp:1373
+#: ../src/widgets/toolbox.cpp:1399
 msgid "Node Symmetric"
 msgstr "Symetrická v uzle"
 
-#: ../src/widgets/toolbox.cpp:1374
+#: ../src/widgets/toolbox.cpp:1400
 msgid "Make selected nodes symmetric"
 msgstr "Urobiť zvolené uzly symetrickými"
 
-#: ../src/widgets/toolbox.cpp:1383
+#: ../src/widgets/toolbox.cpp:1409
 msgid "Node Auto"
 msgstr "Auto uzol"
 
-#: ../src/widgets/toolbox.cpp:1384
+#: ../src/widgets/toolbox.cpp:1410
 msgid "Make selected nodes auto-smooth"
 msgstr "Konvertovať vybrané uzly automaticky na hladké"
 
-#: ../src/widgets/toolbox.cpp:1393
+#: ../src/widgets/toolbox.cpp:1419
 msgid "Node Line"
 msgstr "Čiara s uzlami"
 
-#: ../src/widgets/toolbox.cpp:1394
+#: ../src/widgets/toolbox.cpp:1420
 msgid "Make selected segments lines"
 msgstr "Konvertovať vybrané segmenty na čiary"
 
-#: ../src/widgets/toolbox.cpp:1403
+#: ../src/widgets/toolbox.cpp:1429
 msgid "Node Curve"
 msgstr "Krivka s uzlami"
 
-#: ../src/widgets/toolbox.cpp:1404
+#: ../src/widgets/toolbox.cpp:1430
 msgid "Make selected segments curves"
 msgstr "Konvertovať vybrané segmenty na krivky"
 
-#: ../src/widgets/toolbox.cpp:1413
+#: ../src/widgets/toolbox.cpp:1439
 msgid "Show Handles"
 msgstr "Zobraziť úchopy"
 
-#: ../src/widgets/toolbox.cpp:1414
+#: ../src/widgets/toolbox.cpp:1440
 msgid "Show the Bezier handles of selected nodes"
 msgstr "Zobraziť bézierove úchopy vybraných uzlov"
 
-#: ../src/widgets/toolbox.cpp:1424
+#: ../src/widgets/toolbox.cpp:1450
 msgid "Show Outline"
 msgstr "Zobraziť obrys"
 
-#: ../src/widgets/toolbox.cpp:1425
+#: ../src/widgets/toolbox.cpp:1451
 msgid "Show the outline of the path"
 msgstr "Zobraziť obrys cesty"
 
-#: ../src/widgets/toolbox.cpp:1435
+#: ../src/widgets/toolbox.cpp:1461
 msgid "Next path effect parameter"
 msgstr "Ďalší parameter efektu cesty"
 
-#: ../src/widgets/toolbox.cpp:1436
+#: ../src/widgets/toolbox.cpp:1462
 msgid "Show next path effect parameter for editing"
 msgstr "Zobraziť na úpravu ďalší parameter efektu cesty"
 
-#: ../src/widgets/toolbox.cpp:1447
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Edit the clipping path of the object"
 msgstr "Upraviť orezávaciu cestu objektu"
 
-#: ../src/widgets/toolbox.cpp:1457
+#: ../src/widgets/toolbox.cpp:1483
 msgid "Edit mask path"
 msgstr "Upraviť masku cesty"
 
-#: ../src/widgets/toolbox.cpp:1458
+#: ../src/widgets/toolbox.cpp:1484
 msgid "Edit the mask of the object"
 msgstr "Upraviť masku objektu"
 
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X coordinate:"
 msgstr "Súradnica X:"
 
-#: ../src/widgets/toolbox.cpp:1472
+#: ../src/widgets/toolbox.cpp:1498
 msgid "X coordinate of selected node(s)"
 msgstr "Súradnica X vybraných uzlov"
 
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y coordinate:"
 msgstr "Súradnica Y:"
 
-#: ../src/widgets/toolbox.cpp:1490
+#: ../src/widgets/toolbox.cpp:1516
 msgid "Y coordinate of selected node(s)"
 msgstr "Súradnica Y vybraných uzlov"
 
-#: ../src/widgets/toolbox.cpp:2028
+#: ../src/widgets/toolbox.cpp:2055
 msgid "Enable snapping"
 msgstr "Zapnúť prichytávanie"
 
-#: ../src/widgets/toolbox.cpp:2037
+#: ../src/widgets/toolbox.cpp:2064
 msgid "Bounding box"
 msgstr "Ohraničenie"
 
-#: ../src/widgets/toolbox.cpp:2037
+#: ../src/widgets/toolbox.cpp:2064
 msgid "Snap bounding box corners"
 msgstr "Prichytávať k rohom ohraničenia"
 
-#: ../src/widgets/toolbox.cpp:2046
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Bounding box edges"
 msgstr "Okraje ohraničenia"
 
-#: ../src/widgets/toolbox.cpp:2046
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Snap to edges of a bounding box"
 msgstr "Prichytávať k okrajom ohraničenia"
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2082
 msgid "Bounding box corners"
 msgstr "Rohy ohraničenia"
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2082
 msgid "Snap to bounding box corners"
 msgstr "Prichytávať k rohom ohraničenia"
 
-#: ../src/widgets/toolbox.cpp:2064
+#: ../src/widgets/toolbox.cpp:2091
 msgid "BBox Edge Midpoints"
 msgstr "Stredy hrán ohraničenia"
 
-#: ../src/widgets/toolbox.cpp:2064
+#: ../src/widgets/toolbox.cpp:2091
 msgid "Snap from and to midpoints of bounding box edges"
 msgstr "Prichytávať k stredom okrajov ohraničenia"
 
-#: ../src/widgets/toolbox.cpp:2074
+#: ../src/widgets/toolbox.cpp:2101
 msgid "BBox Centers"
 msgstr "Stredy ohraničení"
 
-#: ../src/widgets/toolbox.cpp:2074
+#: ../src/widgets/toolbox.cpp:2101
 msgid "Snapping from and to centers of bounding boxes"
 msgstr "Prichytávanie k stredom okrajov ohraničenia"
 
-#: ../src/widgets/toolbox.cpp:2083
+#: ../src/widgets/toolbox.cpp:2110
 msgid "Snap nodes or handles"
 msgstr "Prichytávať uzly alebo úchopy"
 
-#: ../src/widgets/toolbox.cpp:2091
+#: ../src/widgets/toolbox.cpp:2118
 msgid "Snap to paths"
 msgstr "Prichytávať k cestám"
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2127
 msgid "Path intersections"
 msgstr "Priesečníky ciest"
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2127
 msgid "Snap to path intersections"
 msgstr "Prichytávať k priesečníkom ciest"
 
-#: ../src/widgets/toolbox.cpp:2109
+#: ../src/widgets/toolbox.cpp:2136
 msgid "To nodes"
 msgstr "K uzlom"
 
-#: ../src/widgets/toolbox.cpp:2109
+#: ../src/widgets/toolbox.cpp:2136
 msgid "Snap to cusp nodes"
 msgstr "Prichytávať k uzlom hrotového ovládania"
 
-#: ../src/widgets/toolbox.cpp:2118
+#: ../src/widgets/toolbox.cpp:2145
 msgid "Smooth nodes"
 msgstr "Hladké uzly"
 
-#: ../src/widgets/toolbox.cpp:2118
+#: ../src/widgets/toolbox.cpp:2145
 msgid "Snap to smooth nodes"
 msgstr "Prichytávať k hladkým uzlom"
 
-#: ../src/widgets/toolbox.cpp:2127
+#: ../src/widgets/toolbox.cpp:2154
 msgid "Line Midpoints"
 msgstr "Stredy úsečiek"
 
-#: ../src/widgets/toolbox.cpp:2127
+#: ../src/widgets/toolbox.cpp:2154
 msgid "Snap from and to midpoints of line segments"
 msgstr "Prichytávať k stredom úsečiek"
 
-#: ../src/widgets/toolbox.cpp:2136
+#: ../src/widgets/toolbox.cpp:2163
 msgid "Object Centers"
 msgstr "Stredy objektov"
 
-#: ../src/widgets/toolbox.cpp:2136
+#: ../src/widgets/toolbox.cpp:2163
 msgid "Snap from and to centers of objects"
 msgstr "Prichytávať k stredom objektov"
 
-#: ../src/widgets/toolbox.cpp:2145
+#: ../src/widgets/toolbox.cpp:2172
 msgid "Rotation Centers"
 msgstr "Stredy _rotácie"
 
-#: ../src/widgets/toolbox.cpp:2145
+#: ../src/widgets/toolbox.cpp:2172
 msgid "Snap from and to an item's rotation center"
 msgstr "Prichytávať k stredom otáčania objektov"
 
-#: ../src/widgets/toolbox.cpp:2154
+#: ../src/widgets/toolbox.cpp:2181
 msgid "Page border"
 msgstr "Okraj stránky"
 
-#: ../src/widgets/toolbox.cpp:2154
+#: ../src/widgets/toolbox.cpp:2181
 msgid "Snap to the page border"
 msgstr "Prichytávať k okraju stránky"
 
-#: ../src/widgets/toolbox.cpp:2163
+#: ../src/widgets/toolbox.cpp:2190
 msgid "Snap to grids"
 msgstr "Prichytávať k mriežkam"
 
-#: ../src/widgets/toolbox.cpp:2172
+#: ../src/widgets/toolbox.cpp:2199
 msgid "Snap to guides"
 msgstr "Prichytávať k vodidlám"
 
-#: ../src/widgets/toolbox.cpp:2377
+#: ../src/widgets/toolbox.cpp:2404
 msgid "Star: Change number of corners"
 msgstr "Hviezda: Zmeniť počet rohov"
 
-#: ../src/widgets/toolbox.cpp:2422
+#: ../src/widgets/toolbox.cpp:2449
 msgid "Star: Change spoke ratio"
 msgstr "Hviezda: Zmeniť pomer lúčov"
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2492
 msgid "Make polygon"
 msgstr "Vytvoriť mnohouholník"
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2492
 msgid "Make star"
 msgstr "Vytvoriť hviezdu"
 
-#: ../src/widgets/toolbox.cpp:2501
+#: ../src/widgets/toolbox.cpp:2528
 msgid "Star: Change rounding"
 msgstr "Hviezda: Zmeniť zaoblenie"
 
-#: ../src/widgets/toolbox.cpp:2536
+#: ../src/widgets/toolbox.cpp:2563
 msgid "Star: Change randomization"
 msgstr "Hviezda: Zmeniť náhodnosť"
 
-#: ../src/widgets/toolbox.cpp:2727
+#: ../src/widgets/toolbox.cpp:2754
 msgid "Regular polygon (with one handle) instead of a star"
 msgstr "Pravidelný mnohouholník (s jedným úchopom) namiesto hviezdy"
 
-#: ../src/widgets/toolbox.cpp:2734
+#: ../src/widgets/toolbox.cpp:2761
 msgid "Star instead of a regular polygon (with one handle)"
 msgstr "Hviezda namiesto pravidelného mnohouholníka (s jedným úchopom)"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "triangle/tri-star"
 msgstr "trojuholník/trojcípa hviezda"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "square/quad-star"
 msgstr "štvorec/štvorcípa hviezda"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "pentagon/five-pointed star"
 msgstr "päťuholník/päťcípa hviezda"
 
-#: ../src/widgets/toolbox.cpp:2755
+#: ../src/widgets/toolbox.cpp:2782
 msgid "hexagon/six-pointed star"
 msgstr "šesťuholník/šesťcípa hviezda"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Corners"
 msgstr "Rohy"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Corners:"
 msgstr "Rohy:"
 
-#: ../src/widgets/toolbox.cpp:2758
+#: ../src/widgets/toolbox.cpp:2785
 msgid "Number of corners of a polygon or star"
 msgstr "Počet rohov mnohouholníka alebo hviezdy"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "thin-ray star"
 msgstr "hviezda s tenkými lúčmi"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "pentagram"
 msgstr "päťuholník"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "hexagram"
 msgstr "šesťuholník"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "heptagram"
 msgstr "sedemuholník"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "octagram"
 msgstr "osemuholník"
 
-#: ../src/widgets/toolbox.cpp:2771
+#: ../src/widgets/toolbox.cpp:2798
 msgid "regular polygon"
 msgstr "pravidelný mnohouholník"
 
-#: ../src/widgets/toolbox.cpp:2774
+#: ../src/widgets/toolbox.cpp:2801
 msgid "Spoke ratio"
 msgstr "Pomer lúčov"
 
-#: ../src/widgets/toolbox.cpp:2774
+#: ../src/widgets/toolbox.cpp:2801
 msgid "Spoke ratio:"
 msgstr "Koeficient lúčov:"
 
 #. TRANSLATORS: Tip radius of a star is the distance from the center to the farthest handle.
 #. Base radius is the same for the closest handle.
-#: ../src/widgets/toolbox.cpp:2777
+#: ../src/widgets/toolbox.cpp:2804
 msgid "Base radius to tip radius ratio"
 msgstr "Koeficient polomeru základne k polomeru vrcholu"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "stretched"
 msgstr "natiahnutý"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "twisted"
 msgstr "skrútený"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "slightly pinched"
 msgstr "(mierne zúžené)"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "NOT rounded"
 msgstr "NIE zaoblené"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "slightly rounded"
 msgstr "mierne zaoblené"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "visibly rounded"
 msgstr "viditeľne zaoblené"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "well rounded"
 msgstr "dosť zaoblené"
 
-#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2822
 msgid "amply rounded"
 msgstr "hojne zaoblené"
 
-#: ../src/widgets/toolbox.cpp:2795 ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2822 ../src/widgets/toolbox.cpp:2837
 msgid "blown up"
 msgstr "nafúknutý"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "Rounded"
 msgstr "Zaoblené"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "Rounded:"
 msgstr "Zaoblenie:"
 
-#: ../src/widgets/toolbox.cpp:2798
+#: ../src/widgets/toolbox.cpp:2825
 msgid "How much rounded are the corners (0 for sharp)"
 msgstr "Aké okrúhle sú rohy (0 sú ostré)"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "NOT randomized"
 msgstr "NIE náhodné"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "slightly irregular"
 msgstr "mierne nepravidelné"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "visibly randomized"
 msgstr "viditeľne náhodné"
 
-#: ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2837
 msgid "strongly randomized"
 msgstr "veľmi náhodné"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Randomized"
 msgstr "Náhodné"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Randomized:"
 msgstr "Náhodnosť:"
 
-#: ../src/widgets/toolbox.cpp:2813
+#: ../src/widgets/toolbox.cpp:2840
 msgid "Scatter randomly the corners and angles"
 msgstr "Náhodne rozptýliť rohy a uhly"
 
-#: ../src/widgets/toolbox.cpp:2828 ../src/widgets/toolbox.cpp:3767
-#: ../src/widgets/toolbox.cpp:4027 ../src/widgets/toolbox.cpp:7249
+#: ../src/widgets/toolbox.cpp:2855 ../src/widgets/toolbox.cpp:3794
+#: ../src/widgets/toolbox.cpp:4054 ../src/widgets/toolbox.cpp:7681
 msgid "Defaults"
 msgstr "Štandardné"
 
-#: ../src/widgets/toolbox.cpp:2829 ../src/widgets/toolbox.cpp:3768
+#: ../src/widgets/toolbox.cpp:2856 ../src/widgets/toolbox.cpp:3795
 msgid ""
 "Reset shape parameters to defaults (use Inkscape Preferences > Tools to "
 "change defaults)"
@@ -19480,296 +19523,298 @@ msgstr ""
 "Nastaviť parametre tvaru na štandardné hodnoty (použite Nastavenia Inkscape "
 "> Nástroje na zmenu štandardných hodnôt)"
 
-#: ../src/widgets/toolbox.cpp:2902
+#: ../src/widgets/toolbox.cpp:2929
 msgid "Change rectangle"
 msgstr "Zmena obdĺžnika"
 
-#: ../src/widgets/toolbox.cpp:3095
+#: ../src/widgets/toolbox.cpp:3122
 msgid "W:"
 msgstr "W:"
 
-#: ../src/widgets/toolbox.cpp:3095
+#: ../src/widgets/toolbox.cpp:3122
 msgid "Width of rectangle"
 msgstr "Šírka obdĺžnika"
 
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 msgid "H:"
 msgstr "Vodorovná medzera:"
 
-#: ../src/widgets/toolbox.cpp:3112
+#: ../src/widgets/toolbox.cpp:3139
 msgid "Height of rectangle"
 msgstr "Výška obdĺžnika"
 
-#: ../src/widgets/toolbox.cpp:3126 ../src/widgets/toolbox.cpp:3141
+#: ../src/widgets/toolbox.cpp:3153 ../src/widgets/toolbox.cpp:3168
 msgid "not rounded"
 msgstr "nezaoblený"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Horizontal radius"
 msgstr "Vodorovný polomer"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Rx:"
 msgstr "Rx:"
 
-#: ../src/widgets/toolbox.cpp:3129
+#: ../src/widgets/toolbox.cpp:3156
 msgid "Horizontal radius of rounded corners"
 msgstr "Vodorovný polomer zaokrúhlenia rohov"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Vertical radius"
 msgstr "Zvislý polomer"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Ry:"
 msgstr "Ry:"
 
-#: ../src/widgets/toolbox.cpp:3144
+#: ../src/widgets/toolbox.cpp:3171
 msgid "Vertical radius of rounded corners"
 msgstr "Zvislý polomer zaokrúhlenia rohov"
 
-#: ../src/widgets/toolbox.cpp:3163
+#: ../src/widgets/toolbox.cpp:3190
 msgid "Not rounded"
 msgstr "Nezaoblený"
 
-#: ../src/widgets/toolbox.cpp:3164
+#: ../src/widgets/toolbox.cpp:3191
 msgid "Make corners sharp"
 msgstr "Vytvoriť ostré rohy"
 
 #. TODO: use the correct axis here, too
-#: ../src/widgets/toolbox.cpp:3352
+#: ../src/widgets/toolbox.cpp:3379
 msgid "3D Box: Change perspective (angle of infinite axis)"
 msgstr "Kváder: Zmeniť perspektívu (uhol nekonečnej osi)"
 
-#: ../src/widgets/toolbox.cpp:3422
+#: ../src/widgets/toolbox.cpp:3449
 msgid "Angle in X direction"
 msgstr "Uhol v smere X"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3424
+#: ../src/widgets/toolbox.cpp:3451
 msgid "Angle of PLs in X direction"
 msgstr "Uhol paralel v smere X"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3446
+#: ../src/widgets/toolbox.cpp:3473
 msgid "State of VP in X direction"
 msgstr "Stav spojnice v smere X"
 
-#: ../src/widgets/toolbox.cpp:3447
+#: ../src/widgets/toolbox.cpp:3474
 msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 "Prepnúť spojnicu v smere X medzi „konečným“ a „nekonečným“ (=rovnobežné)"
 
-#: ../src/widgets/toolbox.cpp:3462
+#: ../src/widgets/toolbox.cpp:3489
 msgid "Angle in Y direction"
 msgstr "Uhol v smere Y"
 
-#: ../src/widgets/toolbox.cpp:3462
+#: ../src/widgets/toolbox.cpp:3489
 msgid "Angle Y:"
 msgstr "Uhol Y:"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3464
+#: ../src/widgets/toolbox.cpp:3491
 msgid "Angle of PLs in Y direction"
 msgstr "Uhol paralel v smere Y"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3485
+#: ../src/widgets/toolbox.cpp:3512
 msgid "State of VP in Y direction"
 msgstr "Stav spojnice v smere Y"
 
-#: ../src/widgets/toolbox.cpp:3486
+#: ../src/widgets/toolbox.cpp:3513
 msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 "Prepnúť spojnicu v smere Y medzi „konečným“ a „nekonečným“ (=rovnobežné)"
 
-#: ../src/widgets/toolbox.cpp:3501
+#: ../src/widgets/toolbox.cpp:3528
 msgid "Angle in Z direction"
 msgstr "Uhol v smere Z"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3503
+#: ../src/widgets/toolbox.cpp:3530
 msgid "Angle of PLs in Z direction"
 msgstr "Uhol paralel v smere Z"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3524
+#: ../src/widgets/toolbox.cpp:3551
 msgid "State of VP in Z direction"
 msgstr "Stav spojnice v smere Z"
 
-#: ../src/widgets/toolbox.cpp:3525
+#: ../src/widgets/toolbox.cpp:3552
 msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 "Prepnúť spojnicu v smere Z medzi „konečným“ a „nekonečným“ (=rovnobežné)"
 
-#: ../src/widgets/toolbox.cpp:3583
+#: ../src/widgets/toolbox.cpp:3610
 msgid "Change spiral"
 msgstr "Zmena špirály"
 
-#: ../src/widgets/toolbox.cpp:3724
+#: ../src/widgets/toolbox.cpp:3751
 msgid "just a curve"
 msgstr "iba krivka"
 
-#: ../src/widgets/toolbox.cpp:3724
+#: ../src/widgets/toolbox.cpp:3751
 msgid "one full revolution"
 msgstr "jedna celá otáčka"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Number of turns"
 msgstr "Počet otáčok"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Turns:"
 msgstr "Otočenia:"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3754
 msgid "Number of revolutions"
 msgstr "Počet otáčok"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "circle"
 msgstr "kruh"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "edge is much denser"
 msgstr "okraj je oveľa hustejší"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "edge is denser"
 msgstr "okraj je hustejší"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "even"
 msgstr "párny"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "center is denser"
 msgstr "stred je hustejší"
 
-#: ../src/widgets/toolbox.cpp:3738
+#: ../src/widgets/toolbox.cpp:3765
 msgid "center is much denser"
 msgstr "stred je oveľa hustejší"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "Divergence"
 msgstr "Divergencia"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "Divergence:"
 msgstr "Divergencia:"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3768
 msgid "How much denser/sparser are outer revolutions; 1 = uniform"
 msgstr "O koľko hustejšie/redšie sú vonkajšie otáčky; 1 = rovnomerné"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts from center"
 msgstr "začína od stredu"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts mid-way"
 msgstr "začína na polceste"
 
-#: ../src/widgets/toolbox.cpp:3752
+#: ../src/widgets/toolbox.cpp:3779
 msgid "starts near edge"
 msgstr "začína blízko okraja"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Inner radius"
 msgstr "Vnútorný polomer"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Inner radius:"
 msgstr "Vnútorný polomer:"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3782
 msgid "Radius of the innermost revolution (relative to the spiral size)"
 msgstr "Polomer najvnútornejšej revolúcie (relatívne k veľkosti špirály)"
 
-#: ../src/widgets/toolbox.cpp:3828
+#: ../src/widgets/toolbox.cpp:3855
 msgid "Bezier"
 msgstr "Bézier"
 
-#: ../src/widgets/toolbox.cpp:3829
+#: ../src/widgets/toolbox.cpp:3856
 msgid "Create regular Bezier path"
 msgstr "Tvorba Bézierovej cesty"
 
-#: ../src/widgets/toolbox.cpp:3835
+#: ../src/widgets/toolbox.cpp:3862
 msgid "Spiro"
 msgstr "Špirála"
 
-#: ../src/widgets/toolbox.cpp:3836
+#: ../src/widgets/toolbox.cpp:3863
 msgid "Create Spiro path"
 msgstr "Vytvorenie špirály"
 
-#: ../src/widgets/toolbox.cpp:3843
+#: ../src/widgets/toolbox.cpp:3870
 msgid "Zigzag"
 msgstr "Cikcak"
 
-#: ../src/widgets/toolbox.cpp:3844
+#: ../src/widgets/toolbox.cpp:3871
 msgid "Create a sequence of straight line segments"
 msgstr "Vytvoriť postupnosť priamych úsečiek"
 
-#: ../src/widgets/toolbox.cpp:3850
+#: ../src/widgets/toolbox.cpp:3877
 msgid "Paraxial"
 msgstr "Paraxiálna"
 
-#: ../src/widgets/toolbox.cpp:3851
+#: ../src/widgets/toolbox.cpp:3878
 msgid "Create a sequence of paraxial line segments"
 msgstr "Vytvoriť postupnosť paraxiálnych úsečiek"
 
-#: ../src/widgets/toolbox.cpp:3859
+#: ../src/widgets/toolbox.cpp:3886
 msgid "Mode of new lines drawn by this tool"
 msgstr "Režim nových čiar nakreslených týmto nástrojom"
 
-#: ../src/widgets/toolbox.cpp:3888
+#: ../src/widgets/toolbox.cpp:3915
 msgid "Triangle in"
 msgstr "Trojuholník dnu"
 
-#: ../src/widgets/toolbox.cpp:3889
+#: ../src/widgets/toolbox.cpp:3916
 msgid "Triangle out"
 msgstr "Trojuholník von"
 
-#: ../src/widgets/toolbox.cpp:3891
+#: ../src/widgets/toolbox.cpp:3918
 msgid "From clipboard"
 msgstr "Zo schránky"
 
-#: ../src/widgets/toolbox.cpp:3916 ../src/widgets/toolbox.cpp:3917
+#: ../src/widgets/toolbox.cpp:3943 ../src/widgets/toolbox.cpp:3944
 msgid "Shape:"
 msgstr "Tvar:"
 
-#: ../src/widgets/toolbox.cpp:3916
+#: ../src/widgets/toolbox.cpp:3943
 msgid "Shape of new paths drawn by this tool"
 msgstr "Tvar nových čiar nakreslených týmto nástrojom"
 
-#: ../src/widgets/toolbox.cpp:4001
+#: ../src/widgets/toolbox.cpp:4028
 msgid "(many nodes, rough)"
 msgstr "(veľa uzlov, drsné)"
 
-#: ../src/widgets/toolbox.cpp:4001 ../src/widgets/toolbox.cpp:4121
-#: ../src/widgets/toolbox.cpp:4138 ../src/widgets/toolbox.cpp:4341
-#: ../src/widgets/toolbox.cpp:4712 ../src/widgets/toolbox.cpp:4745
-#: ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4028 ../src/widgets/toolbox.cpp:4148
+#: ../src/widgets/toolbox.cpp:4165 ../src/widgets/toolbox.cpp:4368
+#: ../src/widgets/toolbox.cpp:4472 ../src/widgets/toolbox.cpp:4488
+#: ../src/widgets/toolbox.cpp:4504 ../src/widgets/toolbox.cpp:4564
+#: ../src/widgets/toolbox.cpp:4931 ../src/widgets/toolbox.cpp:4964
+#: ../src/widgets/toolbox.cpp:5950
 msgid "(default)"
 msgstr "(štandardné)"
 
-#: ../src/widgets/toolbox.cpp:4001
+#: ../src/widgets/toolbox.cpp:4028
 msgid "(few nodes, smooth)"
 msgstr "(málo uzlov, hladké)"
 
-#: ../src/widgets/toolbox.cpp:4004
+#: ../src/widgets/toolbox.cpp:4031
 msgid "Smoothing:"
 msgstr "Vyhladzovanie:"
 
-#: ../src/widgets/toolbox.cpp:4004
+#: ../src/widgets/toolbox.cpp:4031
 msgid "Smoothing: "
 msgstr "Vyhladzovanie:"
 
-#: ../src/widgets/toolbox.cpp:4005
+#: ../src/widgets/toolbox.cpp:4032
 msgid "How much smoothing (simplifying) is applied to the line"
 msgstr "Aké množstvo vyhladzovania (zjednodušenia) cesty sa použije"
 
-#: ../src/widgets/toolbox.cpp:4028
+#: ../src/widgets/toolbox.cpp:4055
 msgid ""
 "Reset pencil parameters to defaults (use Inkscape Preferences > Tools to "
 "change defaults)"
@@ -19778,202 +19823,203 @@ msgstr ""
 "> Nástroje na zmenu štandardných hodnôt)"
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4121
+#: ../src/widgets/toolbox.cpp:4148
 msgid "(pinch tweak)"
 msgstr "(ladenie potiahnutím)"
 
-#: ../src/widgets/toolbox.cpp:4121
+#: ../src/widgets/toolbox.cpp:4148
 msgid "(broad tweak)"
 msgstr "(široké ladenie)"
 
-#: ../src/widgets/toolbox.cpp:4124
+#: ../src/widgets/toolbox.cpp:4151
 msgid "The width of the tweak area (relative to the visible canvas area)"
 msgstr "Šírka plochy ladenia (v pomere k ploche viditeľného plátna)"
 
 #. Force
-#: ../src/widgets/toolbox.cpp:4138
+#: ../src/widgets/toolbox.cpp:4165
 msgid "(minimum force)"
 msgstr "(maximálna sila)"
 
-#: ../src/widgets/toolbox.cpp:4138
+#: ../src/widgets/toolbox.cpp:4165
 msgid "(maximum force)"
 msgstr "(maximálna sila)"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "Force"
 msgstr "Sila"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "Force:"
 msgstr "Sila:"
 
-#: ../src/widgets/toolbox.cpp:4141
+#: ../src/widgets/toolbox.cpp:4168
 msgid "The force of the tweak action"
 msgstr "Sila ladenia"
 
-#: ../src/widgets/toolbox.cpp:4159
+#: ../src/widgets/toolbox.cpp:4186
 msgid "Move mode"
 msgstr "Režim presunu"
 
-#: ../src/widgets/toolbox.cpp:4160
+#: ../src/widgets/toolbox.cpp:4187
 msgid "Move objects in any direction"
 msgstr "Posúvať objekty ľubovoľným smerom"
 
-#: ../src/widgets/toolbox.cpp:4166
+#: ../src/widgets/toolbox.cpp:4193
 msgid "Move in/out mode"
 msgstr "Režim posúvania dnu/von"
 
-#: ../src/widgets/toolbox.cpp:4167
+#: ../src/widgets/toolbox.cpp:4194
 msgid "Move objects towards cursor; with Shift from cursor"
 msgstr "Posunúť objekty ku kurzoru; s klávesom Shift od kurzora"
 
-#: ../src/widgets/toolbox.cpp:4173
+#: ../src/widgets/toolbox.cpp:4200
 msgid "Move jitter mode"
 msgstr "Režim variácie posúvania"
 
-#: ../src/widgets/toolbox.cpp:4174
+#: ../src/widgets/toolbox.cpp:4201
 msgid "Move objects in random directions"
 msgstr "Posúvať objekty náhodným smerom"
 
-#: ../src/widgets/toolbox.cpp:4180
+#: ../src/widgets/toolbox.cpp:4207
 msgid "Scale mode"
 msgstr "Režim mierky"
 
-#: ../src/widgets/toolbox.cpp:4181
+#: ../src/widgets/toolbox.cpp:4208
 msgid "Shrink objects, with Shift enlarge"
 msgstr "Zmršťovanie objektov, s klávesom Shift rozťahovanie"
 
-#: ../src/widgets/toolbox.cpp:4187
+#: ../src/widgets/toolbox.cpp:4214
 msgid "Rotate mode"
 msgstr "Režim otáčania"
 
-#: ../src/widgets/toolbox.cpp:4188
+#: ../src/widgets/toolbox.cpp:4215
 msgid "Rotate objects, with Shift counterclockwise"
 msgstr "Otáčanie objektov, s klávesom Shift proti smeru hodinových ručičiek"
 
-#: ../src/widgets/toolbox.cpp:4194
+#: ../src/widgets/toolbox.cpp:4221
 msgid "Duplicate/delete mode"
 msgstr "Režim duplikovania/mazania"
 
-#: ../src/widgets/toolbox.cpp:4195
+#: ../src/widgets/toolbox.cpp:4222
 msgid "Duplicate objects, with Shift delete"
 msgstr "Duplikovať všetky objekty, s klávesom Shift zmazať"
 
-#: ../src/widgets/toolbox.cpp:4201
+#: ../src/widgets/toolbox.cpp:4228
 msgid "Push mode"
 msgstr "Režim tlačenia"
 
-#: ../src/widgets/toolbox.cpp:4202
+#: ../src/widgets/toolbox.cpp:4229
 msgid "Push parts of paths in any direction"
 msgstr "Tlačiť časti ciest ľubovoľným smerom"
 
-#: ../src/widgets/toolbox.cpp:4208
+#: ../src/widgets/toolbox.cpp:4235
 msgid "Shrink/grow mode"
 msgstr "Režim zmrštenia/roztiahnutia"
 
-#: ../src/widgets/toolbox.cpp:4209
+#: ../src/widgets/toolbox.cpp:4236
 msgid "Shrink (inset) parts of paths; with Shift grow (outset)"
 msgstr ""
 "Zmrštiť (posunúť dnu) časti ciest; s klávesom Shift roztiahnuť (posunúť von)"
 
-#: ../src/widgets/toolbox.cpp:4215
+#: ../src/widgets/toolbox.cpp:4242
 msgid "Attract/repel mode"
 msgstr "Režim priťahovania/odpudzovania"
 
-#: ../src/widgets/toolbox.cpp:4216
+#: ../src/widgets/toolbox.cpp:4243
 msgid "Attract parts of paths towards cursor; with Shift from cursor"
 msgstr "Priťahovať časti ciest smerom ku kurzoru; s klávesom Shift od kurzora"
 
-#: ../src/widgets/toolbox.cpp:4222
+#: ../src/widgets/toolbox.cpp:4249
 msgid "Roughen mode"
 msgstr "Režim zdrsnenia"
 
-#: ../src/widgets/toolbox.cpp:4223
+#: ../src/widgets/toolbox.cpp:4250
 msgid "Roughen parts of paths"
 msgstr "Zdrsňovať časti ciest"
 
-#: ../src/widgets/toolbox.cpp:4229
+#: ../src/widgets/toolbox.cpp:4256
 msgid "Color paint mode"
 msgstr "Farba režimu maľovania"
 
-#: ../src/widgets/toolbox.cpp:4230
+#: ../src/widgets/toolbox.cpp:4257
 msgid "Paint the tool's color upon selected objects"
 msgstr "Na zvolené objekty maľovať farbou pera"
 
-#: ../src/widgets/toolbox.cpp:4236
+#: ../src/widgets/toolbox.cpp:4263
 msgid "Color jitter mode"
 msgstr "Režim variácie farieb"
 
-#: ../src/widgets/toolbox.cpp:4237
+#: ../src/widgets/toolbox.cpp:4264
 msgid "Jitter the colors of selected objects"
 msgstr "Variácie farieb vybraných objektov"
 
-#: ../src/widgets/toolbox.cpp:4243
+#: ../src/widgets/toolbox.cpp:4270
 msgid "Blur mode"
 msgstr "Režim rozostrenia"
 
-#: ../src/widgets/toolbox.cpp:4244
+#: ../src/widgets/toolbox.cpp:4271
 msgid "Blur selected objects more; with Shift, blur less"
 msgstr "Rozostriť vybrané objekty viac; so stlačeným Shift rozostriť menej"
 
-#: ../src/widgets/toolbox.cpp:4271
+#: ../src/widgets/toolbox.cpp:4298
 msgid "Channels:"
 msgstr "Kanály:"
 
-#: ../src/widgets/toolbox.cpp:4282
+#: ../src/widgets/toolbox.cpp:4309
 msgid "In color mode, act on objects' hue"
 msgstr "V režime farieb vykonať zmeny odtieňa objektu"
 
 #. TRANSLATORS:  "H" here stands for hue
-#: ../src/widgets/toolbox.cpp:4286
+#: ../src/widgets/toolbox.cpp:4313
 msgid "H"
 msgstr "H"
 
-#: ../src/widgets/toolbox.cpp:4297
+#: ../src/widgets/toolbox.cpp:4324
 msgid "In color mode, act on objects' saturation"
 msgstr "V režime farieb vykonať zmeny sýtosti objektu"
 
 #. TRANSLATORS: "S" here stands for Saturation
-#: ../src/widgets/toolbox.cpp:4301
+#: ../src/widgets/toolbox.cpp:4328
 msgid "S"
 msgstr "S"
 
-#: ../src/widgets/toolbox.cpp:4312
+#: ../src/widgets/toolbox.cpp:4339
 msgid "In color mode, act on objects' lightness"
 msgstr "V režime farieb vykonať zmeny jasu objektu"
 
 #. TRANSLATORS: "L" here stands for Lightness
-#: ../src/widgets/toolbox.cpp:4316
+#: ../src/widgets/toolbox.cpp:4343
 msgid "L"
 msgstr "L"
 
-#: ../src/widgets/toolbox.cpp:4327
+#: ../src/widgets/toolbox.cpp:4354
 msgid "In color mode, act on objects' opacity"
 msgstr "V režime farieb vykonať zmeny priesvitnosti objektu"
 
 #. TRANSLATORS: "O" here stands for Opacity
-#: ../src/widgets/toolbox.cpp:4331
+#: ../src/widgets/toolbox.cpp:4358
 msgid "O"
 msgstr "O"
 
 #. Fidelity
-#: ../src/widgets/toolbox.cpp:4341
+#. Population
+#: ../src/widgets/toolbox.cpp:4368 ../src/widgets/toolbox.cpp:4564
 msgid "(rough, simplified)"
 msgstr "(hrubá, zjednodušená)"
 
-#: ../src/widgets/toolbox.cpp:4341
+#: ../src/widgets/toolbox.cpp:4368 ../src/widgets/toolbox.cpp:4564
 msgid "(fine, but many nodes)"
 msgstr "(jemná, ale s množstvom uzlov)"
 
-#: ../src/widgets/toolbox.cpp:4344
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Fidelity"
 msgstr "Vernosť"
 
-#: ../src/widgets/toolbox.cpp:4344
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Fidelity:"
 msgstr "Vernosť:"
 
-#: ../src/widgets/toolbox.cpp:4345
+#: ../src/widgets/toolbox.cpp:4372
 msgid ""
 "Low fidelity simplifies paths; high fidelity preserves path features but may "
 "generate a lot of new nodes"
@@ -19981,69 +20027,165 @@ msgstr ""
 "Nízka vernosť zjednodušuje cesty; vysoká vernosť zachováva všetky vlastnosti "
 "cesty, ale môže vytvoriť množstvo nových uzlov"
 
-#: ../src/widgets/toolbox.cpp:4362 ../src/widgets/toolbox.cpp:4863
+#: ../src/widgets/toolbox.cpp:4389 ../src/widgets/toolbox.cpp:4582
+#: ../src/widgets/toolbox.cpp:5082
 msgid "Pressure"
 msgstr "Tlak"
 
-#: ../src/widgets/toolbox.cpp:4363
+#: ../src/widgets/toolbox.cpp:4390
 msgid "Use the pressure of the input device to alter the force of tweak action"
 msgstr "Použiť tlak vstupného zariadenia na zmenu sily činnosti ladenia"
 
-#: ../src/widgets/toolbox.cpp:4543
+#. Width
+#: ../src/widgets/toolbox.cpp:4472
+msgid "(pinch spray)"
+msgstr "(úzka stopa spreja)"
+
+#: ../src/widgets/toolbox.cpp:4472
+msgid "(broad spray)"
+msgstr "(široká stopa spreja)"
+
+#: ../src/widgets/toolbox.cpp:4475
+msgid "The width of the spray area (relative to the visible canvas area)"
+msgstr "Šírka plochy spreja (v pomere k ploche viditeľného plátna)"
+
+#. Mean
+#: ../src/widgets/toolbox.cpp:4488
+msgid "(minimum mean)"
+msgstr "(minimálny stred)"
+
+#: ../src/widgets/toolbox.cpp:4488
+msgid "(maximum mean)"
+msgstr "(maximálny stred)"
+
+#: ../src/widgets/toolbox.cpp:4491 ../share/extensions/polyhedron_3d.inx.h:25
+msgid "Mean"
+msgstr "Stred"
+
+#: ../src/widgets/toolbox.cpp:4491
+msgid "Mean:"
+msgstr "Stred:"
+
+#: ../src/widgets/toolbox.cpp:4491
+msgid "The mean of the spray action"
+msgstr "Stred operácie sprejovania"
+
+#. Standard_deviation
+#: ../src/widgets/toolbox.cpp:4504
+msgid "(minimum standard_deviation)"
+msgstr "(minimálna štandardná odchýlka)"
+
+#: ../src/widgets/toolbox.cpp:4504
+msgid "(maximum standard_deviation)"
+msgstr "(maximálna štandardná odchýlka)"
+
+#: ../src/widgets/toolbox.cpp:4507
+msgid "SD"
+msgstr "ŠO"
+
+#: ../src/widgets/toolbox.cpp:4507
+msgid "SD:"
+msgstr "ŠO:"
+
+#: ../src/widgets/toolbox.cpp:4507
+msgid "The standard deviation of the spray action"
+msgstr "Štandardná odchýlka operácie prejovanie"
+
+#: ../src/widgets/toolbox.cpp:4525
+msgid "Spray with copies"
+msgstr "Sprejovanie s kópiami"
+
+#: ../src/widgets/toolbox.cpp:4526
+msgid "Spray copies of the initial selection"
+msgstr "Sprejovať kópie pôvodného výberu"
+
+#: ../src/widgets/toolbox.cpp:4532
+msgid "Spray with clones"
+msgstr "Sprejovanie s klonmi"
+
+#: ../src/widgets/toolbox.cpp:4533
+msgid "Spray clones of the initial selection"
+msgstr "Sprejovať klony pôvodného výberu"
+
+#: ../src/widgets/toolbox.cpp:4539
+msgid "Spray single path"
+msgstr "Sprejovať jedinú cestu"
+
+#: ../src/widgets/toolbox.cpp:4540
+msgid "Spray objects in a single path"
+msgstr "Sprejovať objekty v jedinej ceste"
+
+#: ../src/widgets/toolbox.cpp:4567
+msgid "Population"
+msgstr "Vyplnenie"
+
+#: ../src/widgets/toolbox.cpp:4567
+msgid "Population:"
+msgstr "Vyplnenie:"
+
+#: ../src/widgets/toolbox.cpp:4568
+msgid "This setting adjusts the number of items sprayed"
+msgstr "Toto nastavenie ovplyvňuje počet sprejovaných položiek"
+
+#: ../src/widgets/toolbox.cpp:4583
+msgid "Use the pressure of the input device to alter the force of spray action"
+msgstr "Použiť tlak vstupného zariadenia na zmenu sily činnosti sprejovania"
+
+#: ../src/widgets/toolbox.cpp:4762
 msgid "No preset"
 msgstr "Bez predvoľby"
 
-#: ../src/widgets/toolbox.cpp:4561
+#: ../src/widgets/toolbox.cpp:4780
 msgid "Save..."
 msgstr "Uložiť..."
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4712 ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4931 ../src/widgets/toolbox.cpp:5950
 msgid "(hairline)"
 msgstr "(hrúbka vlasu)"
 
-#: ../src/widgets/toolbox.cpp:4712 ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4931 ../src/widgets/toolbox.cpp:5950
 msgid "(broad stroke)"
 msgstr "(široký ťah)"
 
-#: ../src/widgets/toolbox.cpp:4715 ../src/widgets/toolbox.cpp:5734
+#: ../src/widgets/toolbox.cpp:4934 ../src/widgets/toolbox.cpp:5953
 msgid "Pen Width"
 msgstr "Šírka pera"
 
-#: ../src/widgets/toolbox.cpp:4716
+#: ../src/widgets/toolbox.cpp:4935
 msgid "The width of the calligraphic pen (relative to the visible canvas area)"
 msgstr "Šírka kaligrafického pera (v pomere k ploche viditeľného plátna)"
 
 #. Thinning
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(speed blows up stroke)"
 msgstr "(rýchlosť zväčšuje ťah)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(slight widening)"
 msgstr "(mierne rozšírenie)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(constant width)"
 msgstr "(nemenná šírka)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(slight thinning, default)"
 msgstr "(mierne stenčenie, štandardné)"
 
-#: ../src/widgets/toolbox.cpp:4729
+#: ../src/widgets/toolbox.cpp:4948
 msgid "(speed deflates stroke)"
 msgstr "(rýchlosť redukuje ťah)"
 
-#: ../src/widgets/toolbox.cpp:4732
+#: ../src/widgets/toolbox.cpp:4951
 msgid "Stroke Thinning"
 msgstr "Stenčovanie ťahu"
 
-#: ../src/widgets/toolbox.cpp:4732
+#: ../src/widgets/toolbox.cpp:4951
 msgid "Thinning:"
 msgstr "Stenčovanie:"
 
-#: ../src/widgets/toolbox.cpp:4733
+#: ../src/widgets/toolbox.cpp:4952
 msgid ""
 "How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 "
 "makes them broader, 0 makes width independent of velocity)"
@@ -20052,27 +20194,27 @@ msgstr ""
 "širšími, 0 robí hrúbku nezávislou od rýchlosti)"
 
 #. Angle
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(left edge up)"
 msgstr "(ľavý okraj hore)"
 
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(horizontal)"
 msgstr "(vodorovne)"
 
-#: ../src/widgets/toolbox.cpp:4745
+#: ../src/widgets/toolbox.cpp:4964
 msgid "(right edge up)"
 msgstr "(pravý okraj hore)"
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4967
 msgid "Pen Angle"
 msgstr "Uhol pera"
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4967
 msgid "Angle:"
 msgstr "Uhol:"
 
-#: ../src/widgets/toolbox.cpp:4749
+#: ../src/widgets/toolbox.cpp:4968
 msgid ""
 "The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if "
 "fixation = 0)"
@@ -20080,27 +20222,27 @@ msgstr ""
 "Uhol hrotu pera (v stupňoch; 0 = vodorovný; nemá účinok pri fixácii = 0)"
 
 #. Fixation
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(perpendicular to stroke, \"brush\")"
 msgstr "(kolmé na ťah, „štetec“)"
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(almost fixed, default)"
 msgstr "(takmer pevné, štandardné)"
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:4982
 msgid "(fixed by Angle, \"pen\")"
 msgstr "(pevné podľa Uhla, „pero“)"
 
-#: ../src/widgets/toolbox.cpp:4766
+#: ../src/widgets/toolbox.cpp:4985
 msgid "Fixation"
 msgstr "Fixácia"
 
-#: ../src/widgets/toolbox.cpp:4766
+#: ../src/widgets/toolbox.cpp:4985
 msgid "Fixation:"
 msgstr "Fixácie:"
 
-#: ../src/widgets/toolbox.cpp:4767
+#: ../src/widgets/toolbox.cpp:4986
 msgid ""
 "Angle behavior (0 = nib always perpendicular to stroke direction, 100 = "
 "fixed angle)"
@@ -20108,31 +20250,31 @@ msgstr ""
 "Správanie uhlov (0 = hrot je vždy kolmý na smer ťahu, 100 = pevný uhol)"
 
 #. Cap Rounding
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(blunt caps, default)"
 msgstr "(tupé konce, štandardné)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(slightly bulging)"
 msgstr "(mierne vyduté)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(approximately round)"
 msgstr "(približne okrúhle)"
 
-#: ../src/widgets/toolbox.cpp:4779
+#: ../src/widgets/toolbox.cpp:4998
 msgid "(long protruding caps)"
 msgstr "(dlhé, prečnievajúce zakončenia)"
 
-#: ../src/widgets/toolbox.cpp:4783
+#: ../src/widgets/toolbox.cpp:5002
 msgid "Cap rounding"
 msgstr "Zaoblenie zakončenia"
 
-#: ../src/widgets/toolbox.cpp:4783
+#: ../src/widgets/toolbox.cpp:5002
 msgid "Caps:"
 msgstr "Zakončenie:"
 
-#: ../src/widgets/toolbox.cpp:4784
+#: ../src/widgets/toolbox.cpp:5003
 msgid ""
 "Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = "
 "round caps)"
@@ -20141,93 +20283,93 @@ msgstr ""
 "= oblé zakončenia)"
 
 #. Tremor
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(smooth line)"
 msgstr "(hladká čiara)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(slight tremor)"
 msgstr "(ľahké záchvevy)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(noticeable tremor)"
 msgstr "(citeľné záchvevy)"
 
-#: ../src/widgets/toolbox.cpp:4796
+#: ../src/widgets/toolbox.cpp:5015
 msgid "(maximum tremor)"
 msgstr "(maximálne záchvevy)"
 
-#: ../src/widgets/toolbox.cpp:4799
+#: ../src/widgets/toolbox.cpp:5018
 msgid "Stroke Tremor"
 msgstr "Chvenie ťahu"
 
-#: ../src/widgets/toolbox.cpp:4799
+#: ../src/widgets/toolbox.cpp:5018
 msgid "Tremor:"
 msgstr "Chvenie:"
 
-#: ../src/widgets/toolbox.cpp:4800
+#: ../src/widgets/toolbox.cpp:5019
 msgid "Increase to make strokes rugged and trembling"
 msgstr "Zväčšite aby boli ťahy drsné a rozochvené"
 
 #. Wiggle
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(no wiggle)"
 msgstr "(bez chvenia)"
 
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(slight deviation)"
 msgstr "(mierna odchýlka)"
 
-#: ../src/widgets/toolbox.cpp:4814
+#: ../src/widgets/toolbox.cpp:5033
 msgid "(wild waves and curls)"
 msgstr "(divoké vlny a kučery)"
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:5036
 msgid "Pen Wiggle"
 msgstr "Chvenie pera"
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:5036
 msgid "Wiggle:"
 msgstr "Krútenie:"
 
-#: ../src/widgets/toolbox.cpp:4818
+#: ../src/widgets/toolbox.cpp:5037
 msgid "Increase to make the pen waver and wiggle"
 msgstr "Zväčšite aby pero kmitalo a triaslo sa"
 
 #. Mass
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(no inertia)"
 msgstr "(bez zotrvačnosti)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(slight smoothing, default)"
 msgstr "(ľahké vyhladzovanie, štandardné)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(noticeable lagging)"
 msgstr "(citeľné oneskorenie)"
 
-#: ../src/widgets/toolbox.cpp:4831
+#: ../src/widgets/toolbox.cpp:5050
 msgid "(maximum inertia)"
 msgstr "(maximálna zotrvačnosť)"
 
-#: ../src/widgets/toolbox.cpp:4834
+#: ../src/widgets/toolbox.cpp:5053
 msgid "Pen Mass"
 msgstr "Hmotnosť pera"
 
-#: ../src/widgets/toolbox.cpp:4834
+#: ../src/widgets/toolbox.cpp:5053
 msgid "Mass:"
 msgstr "Hmota:"
 
-#: ../src/widgets/toolbox.cpp:4835
+#: ../src/widgets/toolbox.cpp:5054
 msgid "Increase to make the pen drag behind, as if slowed by inertia"
 msgstr "Zväčšite, aby sa pero oneskorovalo akoby ho spomaľovala zotrvačnosť"
 
-#: ../src/widgets/toolbox.cpp:4850
+#: ../src/widgets/toolbox.cpp:5069
 msgid "Trace Background"
 msgstr "Vektorizácia pozadia"
 
-#: ../src/widgets/toolbox.cpp:4851
+#: ../src/widgets/toolbox.cpp:5070
 msgid ""
 "Trace the lightness of the background by the width of the pen (white - "
 "minimum width, black - maximum width)"
@@ -20235,75 +20377,75 @@ msgstr ""
 "Vektorizovať svetlosť pozadia ako šírku pera (biele - minimálna šírka, "
 "čierne - maximálna šírka)"
 
-#: ../src/widgets/toolbox.cpp:4864
+#: ../src/widgets/toolbox.cpp:5083
 msgid "Use the pressure of the input device to alter the width of the pen"
 msgstr "Použiť tlak vstupného zariadenia na zmenu šírky pera"
 
-#: ../src/widgets/toolbox.cpp:4876
+#: ../src/widgets/toolbox.cpp:5095
 msgid "Tilt"
 msgstr "Sklon"
 
-#: ../src/widgets/toolbox.cpp:4877
+#: ../src/widgets/toolbox.cpp:5096
 msgid "Use the tilt of the input device to alter the angle of the pen's nib"
 msgstr "Použiť sklon vstupného zariadenia na zmenu uhla hrotu pera"
 
-#: ../src/widgets/toolbox.cpp:4890
+#: ../src/widgets/toolbox.cpp:5109
 msgid "Choose a preset"
 msgstr "Vyberte predvoľbu"
 
-#: ../src/widgets/toolbox.cpp:4978
+#: ../src/widgets/toolbox.cpp:5197
 msgid "Arc: Change start/end"
 msgstr "Oblúk: Zmeniť začiatok/koniec"
 
-#: ../src/widgets/toolbox.cpp:5042
+#: ../src/widgets/toolbox.cpp:5261
 msgid "Arc: Change open/closed"
 msgstr "Oblúk: Zmeniť otvorený/zatvorený"
 
-#: ../src/widgets/toolbox.cpp:5168
+#: ../src/widgets/toolbox.cpp:5387
 msgid "Start:"
 msgstr "Začiatok:"
 
-#: ../src/widgets/toolbox.cpp:5169
+#: ../src/widgets/toolbox.cpp:5388
 msgid "The angle (in degrees) from the horizontal to the arc's start point"
 msgstr "Uhol (v stupňoch) z vodorovného počiatočného bodu oblúka"
 
-#: ../src/widgets/toolbox.cpp:5181
+#: ../src/widgets/toolbox.cpp:5400
 msgid "End:"
 msgstr "Koniec:"
 
-#: ../src/widgets/toolbox.cpp:5182
+#: ../src/widgets/toolbox.cpp:5401
 msgid "The angle (in degrees) from the horizontal to the arc's end point"
 msgstr "Uhol (v stupňoch) z vodorovného koncového bodu oblúka"
 
-#: ../src/widgets/toolbox.cpp:5198
+#: ../src/widgets/toolbox.cpp:5417
 msgid "Closed arc"
 msgstr "Zatvorený oblúk"
 
-#: ../src/widgets/toolbox.cpp:5199
+#: ../src/widgets/toolbox.cpp:5418
 msgid "Switch to segment (closed shape with two radii)"
 msgstr "Prepnúť na segment (uzavretý tvar s dvoma polomermi)"
 
-#: ../src/widgets/toolbox.cpp:5205
+#: ../src/widgets/toolbox.cpp:5424
 msgid "Open Arc"
 msgstr "Otvorený oblúk"
 
-#: ../src/widgets/toolbox.cpp:5206
+#: ../src/widgets/toolbox.cpp:5425
 msgid "Switch to arc (unclosed shape)"
 msgstr "Prepnúť na oblúk (nezatvorený tvar)"
 
-#: ../src/widgets/toolbox.cpp:5229
+#: ../src/widgets/toolbox.cpp:5448
 msgid "Make whole"
 msgstr "Vytvoriť celok"
 
-#: ../src/widgets/toolbox.cpp:5230
+#: ../src/widgets/toolbox.cpp:5449
 msgid "Make the shape a whole ellipse, not arc or segment"
 msgstr "Vytvoriť tvar celej elipsy, nie oblúk alebo segment"
 
-#: ../src/widgets/toolbox.cpp:5306
+#: ../src/widgets/toolbox.cpp:5525
 msgid "Pick opacity"
 msgstr "Vybrať krytie"
 
-#: ../src/widgets/toolbox.cpp:5307
+#: ../src/widgets/toolbox.cpp:5526
 msgid ""
 "Pick both the color and the alpha (transparency) under cursor; otherwise, "
 "pick only the visible color premultiplied by alpha"
@@ -20311,61 +20453,61 @@ msgstr ""
 "Vybrať farbu aj alfu (priehľadnosť) pod kurzorom; inak vybrať iba viditeľnú "
 "farbu prednásobenú alfou"
 
-#: ../src/widgets/toolbox.cpp:5310
+#: ../src/widgets/toolbox.cpp:5529
 msgid "Pick"
 msgstr "Vybrať"
 
-#: ../src/widgets/toolbox.cpp:5319
+#: ../src/widgets/toolbox.cpp:5538
 msgid "Assign opacity"
 msgstr "Priradiť krytie"
 
-#: ../src/widgets/toolbox.cpp:5320
+#: ../src/widgets/toolbox.cpp:5539
 msgid ""
 "If alpha was picked, assign it to selection as fill or stroke transparency"
 msgstr ""
 "Ak bola vybraná alfa, priraďte ju výberu ako priehľadnosť výplne alebo ťahu"
 
-#: ../src/widgets/toolbox.cpp:5323
+#: ../src/widgets/toolbox.cpp:5542
 msgid "Assign"
 msgstr "Priradiť"
 
-#: ../src/widgets/toolbox.cpp:5509
+#: ../src/widgets/toolbox.cpp:5728
 msgid "Closed"
 msgstr "Zatvorená"
 
-#: ../src/widgets/toolbox.cpp:5511
+#: ../src/widgets/toolbox.cpp:5730
 msgid "Open start"
 msgstr "Otvorený začiatok"
 
-#: ../src/widgets/toolbox.cpp:5513
+#: ../src/widgets/toolbox.cpp:5732
 msgid "Open end"
 msgstr "Otvorený koniec"
 
-#: ../src/widgets/toolbox.cpp:5515
+#: ../src/widgets/toolbox.cpp:5734
 msgid "Open both"
 msgstr "Otvoriť obe"
 
-#: ../src/widgets/toolbox.cpp:5574
+#: ../src/widgets/toolbox.cpp:5793
 msgid "All inactive"
 msgstr "Všetky neaktívne"
 
-#: ../src/widgets/toolbox.cpp:5575
+#: ../src/widgets/toolbox.cpp:5794
 msgid "No geometric tool is active"
 msgstr "Nie je aktívny žiadny geometrický nástroj"
 
-#: ../src/widgets/toolbox.cpp:5608
+#: ../src/widgets/toolbox.cpp:5827
 msgid "Show limiting bounding box"
 msgstr "Zobraziť limitné ohraničenie"
 
-#: ../src/widgets/toolbox.cpp:5609
+#: ../src/widgets/toolbox.cpp:5828
 msgid "Show bounding box (used to cut infinite lines)"
 msgstr "Zobraziť ohraničenie (používa sa na orezanie nekonečných čiar)"
 
-#: ../src/widgets/toolbox.cpp:5620
+#: ../src/widgets/toolbox.cpp:5839
 msgid "Get limiting bounding box from selection"
 msgstr "Zistiť z výberu limitné ohraničenie"
 
-#: ../src/widgets/toolbox.cpp:5621
+#: ../src/widgets/toolbox.cpp:5840
 msgid ""
 "Set limiting bounding box (used to cut infinite lines) to the bounding box "
 "of current selection"
@@ -20373,67 +20515,67 @@ msgstr ""
 "Nastaviť limitné ohraničenie (používa sa na orezanie nekonečných čiar) na "
 "ohraničenie aktuálneho výberu"
 
-#: ../src/widgets/toolbox.cpp:5633
+#: ../src/widgets/toolbox.cpp:5852
 msgid "Choose a line segment type"
 msgstr "Vyberte typ čiarového segmentu"
 
-#: ../src/widgets/toolbox.cpp:5649
+#: ../src/widgets/toolbox.cpp:5868
 msgid "Display measuring info"
 msgstr "Zobraziť meracie informácie"
 
-#: ../src/widgets/toolbox.cpp:5650
+#: ../src/widgets/toolbox.cpp:5869
 msgid "Display measuring info for selected items"
 msgstr "Zobraziť meracie informácie o vybraných položkách"
 
-#: ../src/widgets/toolbox.cpp:5670
+#: ../src/widgets/toolbox.cpp:5889
 msgid "Open LPE dialog"
 msgstr "Otvoriť dialóg Živých ciest"
 
-#: ../src/widgets/toolbox.cpp:5671
+#: ../src/widgets/toolbox.cpp:5890
 msgid "Open LPE dialog (to adapt parameters numerically)"
 msgstr "Otvoriť dialóg Živých ciest (na numerické prispôsobenie parametrov)"
 
-#: ../src/widgets/toolbox.cpp:5735
+#: ../src/widgets/toolbox.cpp:5954
 msgid "The width of the eraser pen (relative to the visible canvas area)"
 msgstr "Šírka gumy (v pomere k ploche viditeľného plátna)"
 
-#: ../src/widgets/toolbox.cpp:5753
+#: ../src/widgets/toolbox.cpp:5972
 msgid "Delete objects touched by the eraser"
 msgstr "Zmazať objekty, ktorých sa dotkne guma"
 
-#: ../src/widgets/toolbox.cpp:5759
+#: ../src/widgets/toolbox.cpp:5978
 msgid "Cut"
 msgstr "Vystrihnúť"
 
-#: ../src/widgets/toolbox.cpp:5760
+#: ../src/widgets/toolbox.cpp:5979
 msgid "Cut out from objects"
 msgstr "Vystrihnúť z objektov"
 
-#: ../src/widgets/toolbox.cpp:6104
+#: ../src/widgets/toolbox.cpp:6323
 msgid "Text: Change font family"
 msgstr "Text: Zmeniť rodinu písma"
 
-#: ../src/widgets/toolbox.cpp:6174
+#: ../src/widgets/toolbox.cpp:6393
 msgid "Text: Change alignment"
 msgstr "Text: Zmeniť zarovnanie"
 
-#: ../src/widgets/toolbox.cpp:6278
+#: ../src/widgets/toolbox.cpp:6497
 msgid "Text: Change font style"
 msgstr "Text: Zmeniť štýl písma"
 
-#: ../src/widgets/toolbox.cpp:6325
+#: ../src/widgets/toolbox.cpp:6544
 msgid "Text: Change orientation"
 msgstr "Text: Zmeniť orientáciu"
 
-#: ../src/widgets/toolbox.cpp:6439
+#: ../src/widgets/toolbox.cpp:6658
 msgid "Text: Change font size"
 msgstr "Text: Zmeniť veľkosť písma"
 
-#: ../src/widgets/toolbox.cpp:6650
+#: ../src/widgets/toolbox.cpp:6877
 msgid "Select font family (Alt+X to access)"
 msgstr "Vybrať rodinu písma (prístup pomocou Alt+X)"
 
-#: ../src/widgets/toolbox.cpp:6687
+#: ../src/widgets/toolbox.cpp:6914
 msgid ""
 "This font is currently not installed on your system. Inkscape will use the "
 "default font instead."
@@ -20441,91 +20583,147 @@ msgstr ""
 "Toto písmo momentálne nie je vo vašom systéme nainštalované. Inkscape "
 "namiesto toho použije štandardné písmo."
 
-#: ../src/widgets/toolbox.cpp:6723
+#: ../src/widgets/toolbox.cpp:6950
 msgid "Align left"
 msgstr "Zarovnanie doľava"
 
-#: ../src/widgets/toolbox.cpp:6745
+#: ../src/widgets/toolbox.cpp:6972
 msgid "Align right"
 msgstr "Zarovnanie doprava"
 
-#: ../src/widgets/toolbox.cpp:6756
+#: ../src/widgets/toolbox.cpp:6983
 msgid "Justify"
 msgstr "Zarovnanie do bloku"
 
-#: ../src/widgets/toolbox.cpp:6771
+#: ../src/widgets/toolbox.cpp:6998
 msgid "Bold"
 msgstr "Tučné"
 
-#: ../src/widgets/toolbox.cpp:6782
+#: ../src/widgets/toolbox.cpp:7009
 msgid "Italic"
 msgstr "Kurzíva"
 
-#: ../src/widgets/toolbox.cpp:6913
+#: ../src/widgets/toolbox.cpp:7148
+msgid "Set connector type: orthogonal"
+msgstr "Nastaviť typ konektora: ortogonálny"
+
+#: ../src/widgets/toolbox.cpp:7148
+msgid "Set connector type: polyline"
+msgstr "Nastaviť typ konektora: lomená čiara"
+
+#: ../src/widgets/toolbox.cpp:7198
+msgid "Change connector curvature"
+msgstr "Zmeniť zakrivenie konektorov"
+
+#: ../src/widgets/toolbox.cpp:7247
 msgid "Change connector spacing"
 msgstr "Zmeniť rozostup konektorov"
 
-#: ../src/widgets/toolbox.cpp:6996
+#: ../src/widgets/toolbox.cpp:7361
+msgid "EditMode"
+msgstr "RežimÚprav"
+
+#: ../src/widgets/toolbox.cpp:7362
+msgid "Switch between connection point editing and connector drawing mode"
+msgstr "Prepnúť medzi režimom úpravy bodov pripojenia a kreslenia konektorov"
+
+#: ../src/widgets/toolbox.cpp:7376
 msgid "Avoid"
 msgstr "Vyhnúť sa"
 
-#: ../src/widgets/toolbox.cpp:7006
+#: ../src/widgets/toolbox.cpp:7386
 msgid "Ignore"
 msgstr "Ignorovať"
 
-#: ../src/widgets/toolbox.cpp:7018
+#: ../src/widgets/toolbox.cpp:7397
+msgid "Orthogonal"
+msgstr "Ortogonálny"
+
+#: ../src/widgets/toolbox.cpp:7398
+msgid "Make connector orthogonal or polyline"
+msgstr "Nastaviť konektor na ortogonálny alebo lomenú čiaru"
+
+#: ../src/widgets/toolbox.cpp:7412
+msgid "Connector Curvature"
+msgstr "Zakrivenie konektora"
+
+#: ../src/widgets/toolbox.cpp:7412
+msgid "Curvature:"
+msgstr "Zakrivenie:"
+
+#: ../src/widgets/toolbox.cpp:7413
+msgid "The amount of connectors curvature"
+msgstr "Veľkosť zakrivenia konektorov"
+
+#: ../src/widgets/toolbox.cpp:7423
 msgid "Connector Spacing"
 msgstr "Rozostup konektorov"
 
-#: ../src/widgets/toolbox.cpp:7018
+#: ../src/widgets/toolbox.cpp:7423
 msgid "Spacing:"
 msgstr "Rozostup:"
 
-#: ../src/widgets/toolbox.cpp:7019
+#: ../src/widgets/toolbox.cpp:7424
 msgid "The amount of space left around objects by auto-routing connectors"
 msgstr "Množstvo priestoru, ktorý zanechávajú objekty autorotáciou konektorov"
 
-#: ../src/widgets/toolbox.cpp:7030
+#: ../src/widgets/toolbox.cpp:7435
 msgid "Graph"
 msgstr "Graf"
 
-#: ../src/widgets/toolbox.cpp:7040
+#: ../src/widgets/toolbox.cpp:7445
 msgid "Connector Length"
 msgstr "Dĺžka konektorov"
 
-#: ../src/widgets/toolbox.cpp:7040
+#: ../src/widgets/toolbox.cpp:7445
 msgid "Length:"
 msgstr "Dĺžka:"
 
-#: ../src/widgets/toolbox.cpp:7041
+#: ../src/widgets/toolbox.cpp:7446
 msgid "Ideal length for connectors when layout is applied"
 msgstr "Ideálna dĺžka konektorov, keď je použité rozloženie"
 
-#: ../src/widgets/toolbox.cpp:7053
+#: ../src/widgets/toolbox.cpp:7458
 msgid "Downwards"
 msgstr "Smerom dolu"
 
-#: ../src/widgets/toolbox.cpp:7054
+#: ../src/widgets/toolbox.cpp:7459
 msgid "Make connectors with end-markers (arrows) point downwards"
 msgstr "Nech konektory so značkami zakončenia čiar (šípkami) ukazujú nadol"
 
-#: ../src/widgets/toolbox.cpp:7069
+#: ../src/widgets/toolbox.cpp:7476
 msgid "Do not allow overlapping shapes"
 msgstr "Nepovoliť prelínajúce sa tvary"
 
-#: ../src/widgets/toolbox.cpp:7172
+#: ../src/widgets/toolbox.cpp:7491
+msgid "New connection point"
+msgstr "Nový prípojný bod"
+
+#: ../src/widgets/toolbox.cpp:7492
+msgid "Add a new connection point to the currently selected item"
+msgstr "Pridať momentálne vybranej položke nový prípojný bod"
+
+#: ../src/widgets/toolbox.cpp:7503
+msgid "Remove connection point"
+msgstr "Odstrániť prípojný bod"
+
+#: ../src/widgets/toolbox.cpp:7504
+msgid "Remove the currently selected connection point"
+msgstr "Odstrániť momentálne vybraný prípojný bod"
+
+#: ../src/widgets/toolbox.cpp:7604
 msgid "Fill by"
 msgstr "Vyplniť čím"
 
-#: ../src/widgets/toolbox.cpp:7173
+#: ../src/widgets/toolbox.cpp:7605
 msgid "Fill by:"
 msgstr "Vyplniť čím:"
 
-#: ../src/widgets/toolbox.cpp:7185
+#: ../src/widgets/toolbox.cpp:7617
 msgid "Fill Threshold"
 msgstr "Prah výplne"
 
-#: ../src/widgets/toolbox.cpp:7186
+#: ../src/widgets/toolbox.cpp:7618
 msgid ""
 "The maximum allowed difference between the clicked pixel and the neighboring "
 "pixels to be counted in the fill"
@@ -20533,29 +20731,29 @@ msgstr ""
 "Maximálny povolený rozdiel medzi pixelom, na ktorý sa kliklo a susednými "
 "pixelmi, ktoré sa majú počítať do výplne"
 
-#: ../src/widgets/toolbox.cpp:7211
+#: ../src/widgets/toolbox.cpp:7643
 msgid "Grow/shrink by"
 msgstr "Zväčšiť/zmenšiť o"
 
-#: ../src/widgets/toolbox.cpp:7211
+#: ../src/widgets/toolbox.cpp:7643
 msgid "Grow/shrink by:"
 msgstr "Zväčšiť/zmenšiť o:"
 
-#: ../src/widgets/toolbox.cpp:7212
+#: ../src/widgets/toolbox.cpp:7644
 msgid ""
 "The amount to grow (positive) or shrink (negative) the created fill path"
 msgstr ""
 "O koľko zväčšiť (kladné číslo) alebo zmenšiť (záporné) vytvorenú cestu výplne"
 
-#: ../src/widgets/toolbox.cpp:7237
+#: ../src/widgets/toolbox.cpp:7669
 msgid "Close gaps"
 msgstr "Zatvoriť medzery"
 
-#: ../src/widgets/toolbox.cpp:7238
+#: ../src/widgets/toolbox.cpp:7670
 msgid "Close gaps:"
 msgstr "Blízke medzery:"
 
-#: ../src/widgets/toolbox.cpp:7250
+#: ../src/widgets/toolbox.cpp:7682
 msgid ""
 "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
 "to change defaults)"
@@ -21425,10 +21623,6 @@ msgstr "Pozn.: Rozšírenie názvu súboru sa pridá automaticky"
 msgid "Path to save image"
 msgstr "Cesta k ukladanému obrázku"
 
-#: ../share/extensions/extrude.inx.h:1
-msgid "Extrude"
-msgstr "Extrudovať"
-
 #: ../share/extensions/extrude.inx.h:3
 msgid "Lines"
 msgstr "Úsečky"
@@ -22539,10 +22733,6 @@ msgstr "Načítať zo súboru"
 msgid "Maximum"
 msgstr "Maximum"
 
-#: ../share/extensions/polyhedron_3d.inx.h:25
-msgid "Mean"
-msgstr "Stred"
-
 #: ../share/extensions/polyhedron_3d.inx.h:26
 msgid "Minimum"
 msgstr "Minimum"
@@ -22863,17 +23053,89 @@ msgid "Strength (%):"
 msgstr "Sila (%)"
 
 #: ../share/extensions/scour.inx.h:1
+msgid "Embed rasters"
+msgstr "Vkladať rastre"
+
+#: ../share/extensions/scour.inx.h:2
+msgid "Enable id stripping"
+msgstr "Zapnúť zahadzovanie ID"
+
+#: ../share/extensions/scour.inx.h:3
+msgid "Group collapsing"
+msgstr "Zbalenie skupiny"
+
+#: ../share/extensions/scour.inx.h:5
+msgid "Indent"
+msgstr "Odsadenie"
+
+#: ../share/extensions/scour.inx.h:6
+msgid "Keep editor data"
+msgstr "Ponechať údaje editora"
+
+#: ../share/extensions/scour.inx.h:8
 msgid "Optimized SVG (*.svg)"
 msgstr "Optimalizované SVG (*.svg)"
 
-#: ../share/extensions/scour.inx.h:2
+#: ../share/extensions/scour.inx.h:9
 msgid "Optimized SVG Output"
 msgstr "Optimalizovaný výstup SVG"
 
-#: ../share/extensions/scour.inx.h:3
+#: ../share/extensions/scour.inx.h:11
 msgid "Scalable Vector Graphics"
 msgstr "Scalable Vector Graphic"
 
+#: ../share/extensions/scour.inx.h:12
+msgid "Set precision"
+msgstr "Nastavenie presnosti"
+
+#: ../share/extensions/scour.inx.h:13
+msgid "Simplify colors"
+msgstr "Zjednodušenie farieb"
+
+#: ../share/extensions/scour.inx.h:14
+msgid "Space"
+msgstr "Priestor"
+
+#: ../share/extensions/scour.inx.h:15
+msgid "Strip xml prolog"
+msgstr "Zahodiť XML prológ"
+
+#: ../share/extensions/scour.inx.h:16
+msgid "Style to xml"
+msgstr "Štýl na XML"
+
+#: ../share/extensions/scour.inx.h:17
+msgid "Tab"
+msgstr "Tabulátor"
+
+#: ../share/extensions/scour.inx.h:18
+msgid ""
+"This extension optimize the SVG file according to the following options:\n"
+"    * Simplify colors: convert all colors to #RRGGBB format.\n"
+"    * Style to xml: convert styles into XML attributes.\n"
+"    * Group collapsing: collapse &lt;g&gt; elements.\n"
+"    * Enable id stripping: remove all un-referenced ID attributes.\n"
+"    * Embed rasters: embed rasters as base64-encoded data.\n"
+"    * Keep editor data: don't remove Inkscape, Sodipodi or Adobe Illustrator "
+"elements and attributes.\n"
+"    * Strip xml prolog: don't output the xml prolog.\n"
+"    * Set precision: set number of significant digits (default: 5).\n"
+"    * Indent: indentation of the output: none, space, tab (default: space)."
+msgstr ""
+"Toto rozšírenie optimalizuje SVG súbor podľa nasledovných volieb:\n"
+"    * Zjednodušenie farieb: prevedie všetky farby do formátu #RRGGBB.\n"
+"    * Štýl na XML: prevedie štýly na atribúty XML.\n"
+"    * Zbalenie skupiny: zbalí značky &lt;g&gt;.\n"
+"    * Zapnúť zahadzovanie ID: odstráni všetky atribúty ID, na ktoré "
+"neexistuje odkaz.\n"
+"    * Vnoriť rastre: vkladá rastre v tvare dát zakódovaných pomocou base64.\n"
+"    * Ponechať údaje editora: neodstraňovať značky a atribúty Inkscape, "
+"Sodipodi a Adobe Illustrator.\n"
+"    * Zahodiť XML prológ: nezapisovať XML prológ.\n"
+"    * Nastaviť presnosť: nastaviť počet významných číslic (predvolené: 5).\n"
+"    * Zarovnanie: zarovnanie výstupu: žiadne, medzery, tabulátory "
+"(predvolené: medzery)."
+
 #: ../share/extensions/sk1_input.inx.h:1
 msgid "Open files saved in sK1 vector graphics editor"
 msgstr "Otvoriť súbory uložené vo vektorovom grafickom editore sK1"
@@ -23418,6 +23680,19 @@ msgstr "Vstup Windows Metasúbor"
 msgid "XAML Input"
 msgstr "Vstup XAML"
 
+#~ msgid "<b>Connection point</b>: click or drag to create a new connector"
+#~ msgstr ""
+#~ "<b>Bod spojenia</b>: vytvorenie nového konektora kliknutím alebo ťahaním"
+
+#~ msgid "Center objects horizontally"
+#~ msgstr "Centrovať vybrané objekty vodorovne"
+
+#~ msgid "_Instant Messaging..."
+#~ msgstr "Sprá_vy..."
+
+#~ msgid "Jabber Instant Messaging Client"
+#~ msgstr "Klient Jabber pre správy"
+
 #~ msgid "Error saving a temporary copy"
 #~ msgstr "Chyba pri ukladaní dočasnej kópie."
 
@@ -24281,9 +24556,6 @@ msgstr "Vstup XAML"
 #~ msgid "Effe_cts"
 #~ msgstr "_Efekty"
 
-#~ msgid "Center on vertical axis"
-#~ msgstr "Centrovať na zvislej osi"
-
 #~ msgid "ca@valencia Valencian Catalan"
 #~ msgstr "ca@valencia valencijčina"
 
@@ -24907,9 +25179,6 @@ msgstr "Vstup XAML"
 #~ msgid "_Apply"
 #~ msgstr "_Použiť"
 
-#~ msgid "Apply chosen effect to selection"
-#~ msgstr "Použiť zvolený efekt na výber"
-
 # TODO: check
 #~ msgid "Tall"
 #~ msgstr "Vysoký"
index 3450893fc19cf5a25b2809f81f21d8bc6fc456b3..c79b7749d68840869b906addafbf21a0418cfc3a 100644 (file)
@@ -42,8 +42,8 @@ class Object(Barcode):
                if len(number) == 12:
                        number = number + self.getChecksum(number)
                else:
-                       if not self.varifyChecksum(number):
-                               sys.stderr.write("EAN13 Checksum not correct for this barcode, omit last charicter to generate new checksum.\n")
+                       if not self.verifyChecksum(number):
+                               sys.stderr.write("EAN13 Checksum not correct for this barcode, omit last character to generate new checksum.\n")
                                return
 
                result = result + guardBar
@@ -83,9 +83,9 @@ class Object(Barcode):
 
                return str(z)
 
-       def varifyChecksum(self, number):
-               new = self.getChecksum(number[:12])
-               existing = number[12]
+       def verifyChecksum(self, number):
+               new = self.getChecksum(number[:-1])
+               existing = number[-1]
                return new == existing
 
        def getStyle(self, index):
diff --git a/share/extensions/Barcode/EAN5.py b/share/extensions/Barcode/EAN5.py
new file mode 100644 (file)
index 0000000..9113566
--- /dev/null
@@ -0,0 +1,67 @@
+''' 
+Copyright (C) 2007 Martin Owens 
+Copyright (C) 2009 Aaron C Spike 
+
+Thanks to Lineaire Chez of Inkbar ( www.inkbar.lineaire.net ) 
+
+This program is free software; you can redistribute it and/or modify 
+it under the terms of the GNU General Public License as published by 
+the Free Software Foundation; either version 2 of the License, or 
+(at your option) any later version. 
+
+This program is distributed in the hope that it will be useful, 
+but WITHOUT ANY WARRANTY; without even the implied warranty of 
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
+GNU General Public License for more details. 
+
+You should have received a copy of the GNU General Public License 
+along with this program; if not, write to the Free Software 
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+'''
+
+from Base import Barcode
+import sys
+
+mapLeftFamily = [
+    [ "0001101","0011001","0010011","0111101","0100011","0110001","0101111","0111011","0110111","0001011" ], #L
+    [ "0100111","0110011","0011011","0100001","0011101","0111001","0000101","0010001","0001001","0010111" ], #G
+]
+mapFamily  = [ '11000','10100','10010','10001','01100','00110','00011','01010','01001','00101' ]
+
+startBar = '01011';
+sepBar = '01';
+
+class Object(Barcode):
+    def encode(self, number):
+        result = []
+        self.x += 110.0             # horizontal offset so it does not overlap EAN13
+        self.y -= self.height + 5   # move the text to the top
+        if len(number) != 5 or not number.isdigit():
+            sys.stderr.write("Can not encode '" + number + "' into EAN5 Barcode, Size must be 5 numbers only\n")
+            return
+
+        check = self.getChecksum(number)
+        family = mapFamily[check]
+
+        for i in range(5):
+            mapLeft = mapLeftFamily[int(family[i])]
+            result.append(mapLeft[int(number[i])])
+
+        self.label = number[0]
+        for i in range(1,5):
+            self.label += ' ' + number[i]
+        self.inclabel = self.label
+        return startBar + '01'.join(result)
+
+    def getChecksum(self, number):
+        return sum([int(n)*int(m) for n,m in zip(number, '39393')]) % 10
+
+    def getStyle(self, index):
+        result = { 'width' : '1', 'top' : int(self.y) + self.height + 5 + int(self.fontSize()), 'write' : True }
+        if index==0: # White Space
+            result['write'] = False
+        elif index==1: # Black Bar
+            result['height'] = int(self.height)
+        elif index==2: # Guide Bar
+            result['height'] = int(self.height) + 5
+        return result
index 338c01c10545b4b5470e0cd512e011285c21ac62..fd5f1663b9fe3547c070ca9956964d3acf09f876 100644 (file)
@@ -9,6 +9,7 @@ barcode_SCRIPTS = \
        Code93.py \
        EAN13.py \
        EAN8.py \
+       EAN5.py \
        __init__.py \
        RM4CC.py \
        UPCA.py \
index b67d0830b5d28ead0a1d568ed1f3a2550d6a9b09..89c97eed6e478916cc4cb935902d2761c4217e77 100644 (file)
@@ -33,8 +33,8 @@ class Object(EAN13.Object):
                if len(number) == 11:
                        number = number + self.getChecksum(number)
                else:
-                       if not self.varifyChecksum(number):
-                               sys.stderr.write("EAN13 Checksum not correct for this barcode, omit last charicter to generate new checksum.\n")
+                       if not self.verifyChecksum(number):
+                               sys.stderr.write("UPC-A Checksum not correct for this barcode, omit last character to generate new checksum.\n")
                                return
 
                result = result + guardBar
index 0ad51868041dee20d6154b398626977f1f1205e7..b41e94e8c9d3019146f5099d68e18cbe687a3494 100644 (file)
@@ -47,8 +47,8 @@ class Object(EAN13.Object):
                if not echeck:
                        echeck = self.getChecksum(number)
                else:
-                       if not self.varifyChecksum(number + echeck):
-                               sys.stderr.write("UPC-E Checksum not correct for this barcode, omit last charicter to generate new checksum.\n")
+                       if not self.verifyChecksum(number + echeck):
+                               sys.stderr.write("UPC-E Checksum not correct for this barcode, omit last character to generate new checksum.\n")
                                return
 
                number = self.ConvertAtoE(number)
index a455c3b7c9ee10c6ca37bf929f25ab69910456ed..b2257ebcbdb84b737ac79608ea5443e5c74d6863 100644 (file)
@@ -74,6 +74,9 @@ def getBarcode(format, param={}):
                elif format in ['ean13', 'ucc13','jan']:
                        import EAN13
                        return EAN13.Object(param)
+               elif format == 'ean5':
+                       import EAN5
+                       return EAN5.Object(param)
                elif format in ['ean8', 'ucc8']:
                        import EAN8
                        return EAN8.Object(param)
index 14238ad31f61c838e7969f55d76edd98cb7f7747..1650923e07350b9afad5c7afa1f91d5e08bf7507 100644 (file)
@@ -96,6 +96,7 @@ extensions = \
        radiusrand.py \
        restack.py \
        render_barcode.py \
+       render_barcode_datamatrix.py \
        render_alphabetsoup.py \
        render_alphabetsoup_config.py \
        rtree.py \
@@ -131,6 +132,7 @@ extensions = \
        web-set-att.py \
        web-transmit-att.py \
        whirl.py \
+       wireframe_sphere.py \
        wmf_output.py \
        yocto_css.py
 
@@ -222,6 +224,7 @@ modules = \
        ps_input.inx \
        radiusrand.inx \
        render_barcode.inx \
+       render_barcode_datamatrix.inx \
        render_alphabetsoup.inx \
        restack.inx \
        rubberstretch.inx \
@@ -249,6 +252,7 @@ modules = \
        web-set-att.inx \
        web-transmit-att.inx \
        whirl.inx \
+       wireframe_sphere.inx \
        wmf_input.inx \
        wmf_output.inx \
        xaml2svg.inx
index 16439223b9cc79ebbd2127a3088ca4900833c119..f73ceb358dfac505d7bf2462156afba243e616ed 100644 (file)
@@ -56,9 +56,8 @@ class Embedder(inkex.Effect):
         if xlink is None or xlink[:5] != 'data:':
             absref=node.get(inkex.addNS('absref','sodipodi'))
             url=urlparse.urlparse(xlink)
-            href=urllib.unquote(url.path)
-            if os.name == 'nt' and href[0] == '/':
-                href = href[1:]
+            href=urllib.url2pathname(url.path)
+            
             path=''
             #path selection strategy:
             # 1. href if absolute
@@ -70,6 +69,8 @@ class Embedder(inkex.Effect):
                 if (absref != None):
                     path=absref
 
+            path=unicode(path, "utf-8")
+
             if (not os.path.isfile(path)):
                 inkex.errormsg(_('No xlink:href or sodipodi:absref attributes found, or they do not point to an existing file! Unable to embed image.'))
                 if path:
index b7e3e0e63f5bdb34f378d1c58a6e05735cba7424..1a70c25d6e9e94bacb0c19e4f991108a677a4b94 100755 (executable)
@@ -38,7 +38,8 @@ u'xml'      :u'http://www.w3.org/XML/1998/namespace'
 }
 
 #a dictionary of unit to user unit conversion factors
-uuconv = {'in':90.0, 'pt':1.25, 'px':1, 'mm':3.5433070866, 'cm':35.433070866, 'pc':15.0}
+uuconv = {'in':90.0, 'pt':1.25, 'px':1, 'mm':3.5433070866, 'cm':35.433070866, 'm':3543.3070866,
+          'km':3543307.0866, 'pc':15.0, 'yd':3240 , 'ft':1080}
 def unittouu(string):
     '''Returns userunits given a string representation of units in another system'''
     unit = re.compile('(%s)$' % '|'.join(uuconv.keys()))
@@ -83,7 +84,7 @@ def errormsg(msg):
          ...
          inkex.errormsg(_("This extension requires two selected paths."))
     """
-    sys.stderr.write((str(msg) + "\n").encode("UTF-8"))
+    sys.stderr.write((unicode(msg) + "\n").encode("UTF-8"))
 
 def check_inkbool(option, opt, value):
     if str(value).capitalize() == 'True':
index 8eacd40c602f245105e085502c9858437a6f099b..68586530be826887cfe7b656130ba10375838a6f 100644 (file)
@@ -126,28 +126,7 @@ class Length(inkex.Effect):
                 p = cubicsuperpath.parsePath(node.get('d'))
                 num = 1
                 slengths, stotal = csplength(p)
-                ''' Wio: Umrechnung in unit '''
-                if self.options.unit=="mm":
-                    factor=25.4/90.0        # px->mm
-                elif self.options.unit=="pt":
-                    factor=0.80             # px->pt
-                elif self.options.unit=="cm":
-                    factor=25.4/900.0       # px->cm
-                elif self.options.unit=="m":
-                    factor=25.4/90000.0     # px->m
-                elif self.options.unit=="km":
-                    factor=25.4/90000000.0  # px->km
-                elif self.options.unit=="in":
-                    factor=1.0/90.0         # px->in
-                elif self.options.unit=="ft":
-                    factor=1.0/90.0/12.0    # px->ft
-                elif self.options.unit=="yd":
-                    factor=1.0/90.0/36.0    # px->yd
-                else :
-                    ''' Default unit is px'''
-                    factor=1
-                    self.options.unit="px"
-                    
+                factor = 1.0/inkex.unittouu('1'+self.options.unit)
                 # Format the length as string
                 lenstr = locale.format("%(len)25."+str(prec)+"f",{'len':round(stotal*factor*self.options.scale,prec)}).strip()
                 self.addTextOnPath(self.group,0, 0,lenstr+' '+self.options.unit, id, self.options.offset)
index 6bc38459b70863d1c65270dde23f97827f1bd255..7e400932813a070fdb30d6ecb58d13fd7c62dfa8 100644 (file)
-#!/usr/bin/env python 
-'''
-Copyright (C) 2001-2002 Matt Chisholm matt@theory.org
-Copyright (C) 2008 Joel Holdsworth joel@airwebreathe.org.uk
-    for AP
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-'''
-
-import copy
-import inkex
-import simplestyle
-import math
-import cmath
-import string
-import random
-import render_alphabetsoup_config
-import bezmisc
-import simplepath
-import os
-import sys
-
-syntax   = render_alphabetsoup_config.syntax
-alphabet = render_alphabetsoup_config.alphabet
-units  = render_alphabetsoup_config.units
-font    = render_alphabetsoup_config.font
-
-# Loads a super-path from a given SVG file
-def loadPath( svgPath ):
-       extensionDir = os.path.normpath(
-                           os.path.join( os.getcwd(), os.path.dirname(__file__) )
-                         )
-       # __file__ is better then sys.argv[0] because this file may be a module
-       # for another one.
-       tree = inkex.etree.parse( extensionDir + "/" + svgPath )
-       root = tree.getroot()
-       pathElement = root.find('{http://www.w3.org/2000/svg}path')
-       if pathElement == None:
-               return None, 0, 0
-       d = pathElement.get("d")
-       width = float(root.get("width"))
-       height = float(root.get("height"))
-       return simplepath.parsePath(d), width, height # Currently we only support a single path
-
-def combinePaths( pathA, pathB ):
-       if pathA == None and pathB == None:
-               return None
-       elif pathA == None:
-               return pathB
-       elif pathB == None:
-               return pathA
-       else:
-               return pathA + pathB
-
-def flipLeftRight( sp, width ):
-       for cmd,params in sp:
-               defs = simplepath.pathdefs[cmd]
-               for i in range(defs[1]):
-                       if defs[3][i] == 'x':
-                               params[i] = width - params[i]
-
-def flipTopBottom( sp, height ):
-       for cmd,params in sp:
-               defs = simplepath.pathdefs[cmd]
-               for i in range(defs[1]):
-                       if defs[3][i] == 'y':
-                               params[i] = height - params[i]
-
-def solveQuadratic(a, b, c):
-       det = b*b - 4.0*a*c
-       if det >= 0: # real roots
-               sdet = math.sqrt(det)
-       else: # complex roots
-               sdet = cmath.sqrt(det)
-       return (-b + sdet) / (2*a), (-b - sdet) / (2*a)
-
-def cbrt(x): 
-       if x >= 0:
-               return x**(1.0/3.0)
-       else:
-               return -((-x)**(1.0/3.0))
-
-def findRealRoots(a,b,c,d):
-       if a != 0:
-               a, b, c, d = 1, b/float(a), c/float(a), d/float(a)      # Divide through by a
-               t = b / 3.0
-               p, q = c - 3 * t**2, d - c * t + 2 * t**3
-               u, v = solveQuadratic(1, q, -(p/3.0)**3)
-               if type(u) == type(0j):                 # Complex Cubic Root
-                       r = math.sqrt(u.real**2 + u.imag**2)
-                       w = math.atan2(u.imag, u.real)
-                       y1 = 2 * cbrt(r) * math.cos(w / 3.0)
-               else:           # Complex Real Root
-                       y1 = cbrt(u) + cbrt(v)
-               
-               y2, y3 = solveQuadratic(1, y1, p + y1**2)
-
-               if type(y2) == type(0j):        # Are y2 and y3 complex?
-                       return [y1 - t]
-               return [y1 - t, y2 - t, y3 - t]
-       elif b != 0:
-               det=c*c - 4.0*b*d
-               if det >= 0:
-                       return [(-c + math.sqrt(det))/(2.0*b),(-c - math.sqrt(det))/(2.0*b)]
-       elif c != 0:
-               return [-d/c]
-       return []
-
-def getPathBoundingBox( sp ):
-       
-       box = None
-       last = None
-       lostctrl = None
-
-       for cmd,params in sp:
-
-               segmentBox = None
-
-               if cmd == 'M':
-                       # A move cannot contribute to the bounding box
-                       last = params[:]
-                       lastctrl = params[:]
-               elif cmd == 'L':
-                       if last:
-                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))
-                       last = params[:]
-                       lastctrl = params[:]
-               elif cmd == 'C':
-                       if last:                
-                               segmentBox = (min(params[4], last[0]), max(params[4], last[0]), min(params[5], last[1]), max(params[5], last[1]))
-                               
-                               bx0, by0 = last[:]
-                               bx1, by1, bx2, by2, bx3, by3 = params[:]
-
-                               # Compute the x limits
-                               a = (-bx0 + 3*bx1 - 3*bx2 + bx3)*3
-                               b = (3*bx0 - 6*bx1  + 3*bx2)*2
-                               c = (-3*bx0 + 3*bx1)
-                               ts = findRealRoots(0, a, b, c)
-                               for t in ts:
-                                       if t >= 0 and t <= 1:           
-                                               x = (-bx0 + 3*bx1 - 3*bx2 + bx3)*(t**3) + \
-                                                       (3*bx0 - 6*bx1 + 3*bx2)*(t**2) + \
-                                                       (-3*bx0 + 3*bx1)*t + \
-                                                       bx0
-                                               segmentBox = (min(segmentBox[0], x), max(segmentBox[1], x), segmentBox[2], segmentBox[3])
-
-                               # Compute the y limits
-                               a = (-by0 + 3*by1 - 3*by2 + by3)*3
-                               b = (3*by0 - 6*by1  + 3*by2)*2
-                               c = (-3*by0 + 3*by1)
-                               ts = findRealRoots(0, a, b, c)
-                               for t in ts:
-                                       if t >= 0 and t <= 1:           
-                                               y = (-by0 + 3*by1 - 3*by2 + by3)*(t**3) + \
-                                                       (3*by0 - 6*by1 + 3*by2)*(t**2) + \
-                                                       (-3*by0 + 3*by1)*t + \
-                                                       by0
-                                               segmentBox = (segmentBox[0], segmentBox[1], min(segmentBox[2], y), max(segmentBox[3], y))
-
-                       last = params[-2:]
-                       lastctrl = params[2:4]
-
-               elif cmd == 'Q':
-                       # Provisional
-                       if last:
-                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))
-                       last = params[-2:]
-                       lastctrl = params[2:4]
-
-               elif cmd == 'A':
-                       # Provisional
-                       if last:
-                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))
-                       last = params[-2:]
-                       lastctrl = params[2:4]
-
-               if segmentBox:
-                       if box:
-                               box = (min(segmentBox[0],box[0]), max(segmentBox[1],box[1]), min(segmentBox[2],box[2]), max(segmentBox[3],box[3]))
-                       else:
-                               box = segmentBox                        
-       return box
-
-def mxfm( image, width, height, stack ):                                                               # returns possibly transformed image
-       tbimage = image 
-       if ( stack[0] == "-" ):                                                   # top-bottom flip
-               flipTopBottom(tbimage, height)
-               stack.pop( 0 )
-
-       lrimage = tbimage
-       if ( stack[0] == "|" ):                                                   # left-right flip
-               flipLeftRight(tbimage, width)
-               stack.pop( 0 )
-       return lrimage
-
-def comparerule( rule, nodes ):                                                  # compare node list to nodes in rule
-       for i in range( 0, len(nodes)):                                   # range( a, b ) = (a, a+1, a+2 ... b-2, b-1)
-               if (nodes[i] == rule[i][0]):
-                       pass
-               else: return 0
-       return 1
-
-def findrule( state, nodes ):                                                  # find the rule which generated this subtree
-       ruleset = syntax[state][1]
-       nodelen = len(nodes)
-       for rule in ruleset:
-               rulelen = len(rule)
-               if ((rulelen == nodelen) and (comparerule( rule, nodes ))):
-                       return rule
-       return 
-
-def generate( state ):                                                            # generate a random tree (in stack form)
-       stack  = [ state ]
-       if ( len(syntax[state]) == 1 ):                                         # if this is a stop symbol
-               return stack
-       else:
-               stack.append( "[" )
-               path = random.randint(0, (len(syntax[state][1])-1)) # choose randomly from next states
-               for symbol in syntax[state][1][path]:                   # recurse down each non-terminal
-                       if ( symbol != 0 ):                                               # 0 denotes end of list ###
-                               substack = generate( symbol[0] )                 # get subtree
-                               for elt in substack:       
-                                       stack.append( elt )
-                               if (symbol[3]):stack.append( "-" )         # top-bottom flip
-                               if (symbol[4]):stack.append( "|" )         # left-right flip
-                       #else:
-                               #inkex.debug("found end of list in generate( state =", state, ")") # this should be deprecated/never happen
-               stack.append("]")
-               return stack
-
-def draw( stack ):                                                                        # draw a character based on a tree stack
-       state = stack.pop(0)
-       #print state,
-
-       image, width, height = loadPath( font+syntax[state][0] )                  # load the image
-       if (stack[0] != "["):                                                           # terminal stack element
-               if (len(syntax[state]) == 1):                                     # this state is a terminal node
-                       return image, width, height
-               else:
-                       substack = generate( state )                             # generate random substack
-                       return draw( substack )                                   # draw random substack
-       else:
-               #inkex.debug("[")
-               stack.pop(0)
-               images = []                                                               # list of daughter images
-               nodes  = []                                                               # list of daughter names
-               while (stack[0] != "]"):                                         # for all nodes in stack
-                       newstate = stack[0]                                       # the new state
-                       newimage, width, height = draw( stack )                          # draw the daughter state
-                       if (newimage):
-                               tfimage = mxfm( newimage, width, height, stack )        # maybe transform daughter state
-                               images.append( [tfimage, width, height] )                        # list of daughter images
-                               nodes.append( newstate )                         # list of daughter nodes
-                       else:
-                               #inkex.debug(("recurse on",newstate,"failed")) # this should never happen
-                               return None, 0, 0
-               rule = findrule( state, nodes )                   # find the rule for this subtree
-
-               for i in range( 0, len(images)):
-                       currimg, width, height = images[i]
-
-                       if currimg:
-                               #box = getPathBoundingBox(currimg)
-                               dx = rule[i][1]*units
-                               dy = rule[i][2]*units
-                               #newbox = ((box[0]+dx),(box[1]+dy),(box[2]+dx),(box[3]+dy))
-                               simplepath.translatePath(currimg, dx, dy)
-                               image = combinePaths( image, currimg )
-
-               stack.pop( 0 )
-               return image, width, height
-
-def draw_crop_scale( stack, zoom ):                                                    # draw, crop and scale letter image
-       image, width, height = draw(stack)
-       bbox = getPathBoundingBox(image)                        
-       simplepath.translatePath(image, -bbox[0], 0)    
-       simplepath.scalePath(image, zoom/units, zoom/units)
-       return image, bbox[1] - bbox[0], bbox[3] - bbox[2]
-
-def randomize_input_string( str, zoom ):                                          # generate list of images based on input string
-       imagelist = []
-
-       for i in range(0,len(str)):
-               char = str[i]
-               #if ( re.match("[a-zA-Z0-9?]", char)):
-               if ( alphabet.has_key(char)):
-                       if ((i > 0) and (char == str[i-1])):             # if this letter matches previous letter
-                               imagelist.append(imagelist[len(stack)-1])# make them the same image
-                       else:                                                                           # generate image for letter
-                               stack = string.split( alphabet[char][random.randint(0,(len(alphabet[char])-1))] , "." )
-                               #stack = string.split( alphabet[char][random.randint(0,(len(alphabet[char])-2))] , "." ) 
-                               imagelist.append( draw_crop_scale( stack, zoom ))
-               elif( char == " "):                                                       # add a " " space to the image list
-                       imagelist.append( " " )
-               else:                                                                                   # this character is not in config.alphabet, skip it
-                       print "bad character", char 
-       return imagelist
-
-def optikern( image, width, zoom ):                                   # optical kerning algorithm
-       left  = []
-       right = []
-
-       for i in range( 0, 36 ):
-               y = 0.5 * (i + 0.5) * zoom
-               xmin = None
-               xmax = None
-
-               for cmd,params in image:
-
-                       segmentBox = None
-
-                       if cmd == 'M':
-                               # A move cannot contribute to the bounding box
-                               last = params[:]
-                               lastctrl = params[:]
-                       elif cmd == 'L':
-                               if (y >= last[1] and y <= params[1]) or (y >= params[1] and y <= last[1]):
-                                       if params[0] == last[0]:
-                                               x = params[0]
-                                       else:
-                                               a = (params[1] - last[1]) / (params[0] - last[0])
-                                               b = last[1] - a * last[0]
-                                               if a != 0:
-                                                       x = (y - b) / a
-                                               else: x = None
-                                       
-                                       if x:
-                                               if xmin == None or x < xmin: xmin = x
-                                               if xmax == None or x > xmax: xmax = x
-
-                               last = params[:]
-                               lastctrl = params[:]
-                       elif cmd == 'C':
-                               if last:                
-                                       bx0, by0 = last[:]
-                                       bx1, by1, bx2, by2, bx3, by3 = params[:]
-
-                                       d = by0 - y
-                                       c = -3*by0 + 3*by1
-                                       b = 3*by0 - 6*by1 + 3*by2
-                                       a = -by0 + 3*by1 - 3*by2 + by3
-                                       
-                                       ts = findRealRoots(a, b, c, d)
-
-                                       for t in ts:
-                                               if t >= 0 and t <= 1:           
-                                                       x = (-bx0 + 3*bx1 - 3*bx2 + bx3)*(t**3) + \
-                                                               (3*bx0 - 6*bx1 + 3*bx2)*(t**2) + \
-                                                               (-3*bx0 + 3*bx1)*t + \
-                                                               bx0
-                                                       if xmin == None or x < xmin: xmin = x
-                                                       if xmax == None or x > xmax: xmax = x
-
-                               last = params[-2:]
-                               lastctrl = params[2:4]
-
-                       elif cmd == 'Q':
-                               # Quadratic beziers are ignored
-                               last = params[-2:]
-                               lastctrl = params[2:4]
-
-                       elif cmd == 'A':
-                               # Arcs are ignored
-                               last = params[-2:]
-                               lastctrl = params[2:4]
-
-
-               if xmin != None and xmax != None:
-                       left.append( xmin )                        # distance from left edge of region to left edge of bbox
-                       right.append( width - xmax )               # distance from right edge of region to right edge of bbox
-               else:
-                       left.append(  width )
-                       right.append( width )
-
-       return (left, right)
-
-def layoutstring( imagelist, zoom ):                                    # layout string of letter-images using optical kerning
-       kernlist  = []
-       length = zoom
-       for entry in imagelist:
-               if (entry == " "):                                                         # leaving room for " " space characters
-                       length = length + (zoom * render_alphabetsoup_config.space)
-               else:
-                       image, width, height = entry
-                       length = length + width + zoom   # add letter length to overall length
-                       kernlist.append( optikern(image, width, zoom) )            # append kerning data for this image 
-
-       workspace = None
-
-       position = zoom
-       for i in range(0, len(kernlist)):
-               while(imagelist[i] == " "):
-                       position = position + (zoom * render_alphabetsoup_config.space )
-                       imagelist.pop(i)
-               image, width, height = imagelist[i]
-
-               # set the kerning
-               if i == 0: kern = 0                                               # for first image, kerning is zero
-               else:
-                       kerncompare = []                                                         # kerning comparison array
-                       for j in range( 0, len(kernlist[i][0])):
-                               kerncompare.append( kernlist[i][0][j]+kernlist[i-1][1][j] )
-                       kern = min( kerncompare )
-
-               position = position - kern                                         # move position back by kern amount
-               thisimage = copy.deepcopy(image)                
-               simplepath.translatePath(thisimage, position, 0)
-               workspace = combinePaths(workspace, thisimage)
-               position = position + width + zoom      # advance position by letter width
-
-       return workspace
-
-class AlphabetSoup(inkex.Effect):
-       def __init__(self):
-               inkex.Effect.__init__(self)
-               self.OptionParser.add_option("-t", "--text",
-                                               action="store", type="string", 
-                                               dest="text", default="Inkscape",
-                                               help="The text for alphabet soup")
-               self.OptionParser.add_option("-z", "--zoom",
-                                               action="store", type="float", 
-                                               dest="zoom", default="8.0",
-                                               help="The zoom on the output graphics")
-               self.OptionParser.add_option("-s", "--seed",
-                                               action="store", type="int", 
-                                               dest="seed", default="0",
-                                               help="The random seed for the soup")
-
-       def effect(self):
-               zoom = self.options.zoom
-               random.seed(self.options.seed)
-
-               imagelist = randomize_input_string(self.options.text, zoom)
-               image = layoutstring( imagelist, zoom )
-
-               if image:
-                       s = { 'stroke': 'none', 'fill': '#000000' }
-
-                       new = inkex.etree.Element(inkex.addNS('path','svg'))
-                       new.set('style', simplestyle.formatStyle(s))
-
-                       new.set('d', simplepath.formatPath(image))
-                       self.current_layer.append(new)
-
-if __name__ == '__main__':
-    e = AlphabetSoup()
-    e.affect()
-
+#!/usr/bin/env python \r
+'''\r
+Copyright (C) 2001-2002 Matt Chisholm matt@theory.org\r
+Copyright (C) 2008 Joel Holdsworth joel@airwebreathe.org.uk\r
+    for AP\r
+\r
+This program is free software; you can redistribute it and/or modify\r
+it under the terms of the GNU General Public License as published by\r
+the Free Software Foundation; either version 2 of the License, or\r
+(at your option) any later version.\r
+\r
+This program is distributed in the hope that it will be useful,\r
+but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+GNU General Public License for more details.\r
+\r
+You should have received a copy of the GNU General Public License\r
+along with this program; if not, write to the Free Software\r
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+'''\r
+\r
+import copy\r
+import inkex\r
+import simplestyle\r
+import math\r
+import cmath\r
+import string\r
+import random\r
+import render_alphabetsoup_config\r
+import bezmisc\r
+import simplepath\r
+import os\r
+import sys\r
+import gettext\r
+_ = gettext.gettext\r
+\r
+syntax   = render_alphabetsoup_config.syntax\r
+alphabet = render_alphabetsoup_config.alphabet\r
+units  = render_alphabetsoup_config.units\r
+font    = render_alphabetsoup_config.font\r
+\r
+# Loads a super-path from a given SVG file\r
+def loadPath( svgPath ):\r
+       extensionDir = os.path.normpath(\r
+                           os.path.join( os.getcwd(), os.path.dirname(__file__) )\r
+                         )\r
+       # __file__ is better then sys.argv[0] because this file may be a module\r
+       # for another one.\r
+       tree = inkex.etree.parse( extensionDir + "/" + svgPath )\r
+       root = tree.getroot()\r
+       pathElement = root.find('{http://www.w3.org/2000/svg}path')\r
+       if pathElement == None:\r
+               return None, 0, 0\r
+       d = pathElement.get("d")\r
+       width = float(root.get("width"))\r
+       height = float(root.get("height"))\r
+       return simplepath.parsePath(d), width, height # Currently we only support a single path\r
+\r
+def combinePaths( pathA, pathB ):\r
+       if pathA == None and pathB == None:\r
+               return None\r
+       elif pathA == None:\r
+               return pathB\r
+       elif pathB == None:\r
+               return pathA\r
+       else:\r
+               return pathA + pathB\r
+\r
+def flipLeftRight( sp, width ):\r
+       for cmd,params in sp:\r
+               defs = simplepath.pathdefs[cmd]\r
+               for i in range(defs[1]):\r
+                       if defs[3][i] == 'x':\r
+                               params[i] = width - params[i]\r
+\r
+def flipTopBottom( sp, height ):\r
+       for cmd,params in sp:\r
+               defs = simplepath.pathdefs[cmd]\r
+               for i in range(defs[1]):\r
+                       if defs[3][i] == 'y':\r
+                               params[i] = height - params[i]\r
+\r
+def solveQuadratic(a, b, c):\r
+       det = b*b - 4.0*a*c\r
+       if det >= 0: # real roots\r
+               sdet = math.sqrt(det)\r
+       else: # complex roots\r
+               sdet = cmath.sqrt(det)\r
+       return (-b + sdet) / (2*a), (-b - sdet) / (2*a)\r
+\r
+def cbrt(x): \r
+       if x >= 0:\r
+               return x**(1.0/3.0)\r
+       else:\r
+               return -((-x)**(1.0/3.0))\r
+\r
+def findRealRoots(a,b,c,d):\r
+       if a != 0:\r
+               a, b, c, d = 1, b/float(a), c/float(a), d/float(a)      # Divide through by a\r
+               t = b / 3.0\r
+               p, q = c - 3 * t**2, d - c * t + 2 * t**3\r
+               u, v = solveQuadratic(1, q, -(p/3.0)**3)\r
+               if type(u) == type(0j):                 # Complex Cubic Root\r
+                       r = math.sqrt(u.real**2 + u.imag**2)\r
+                       w = math.atan2(u.imag, u.real)\r
+                       y1 = 2 * cbrt(r) * math.cos(w / 3.0)\r
+               else:           # Complex Real Root\r
+                       y1 = cbrt(u) + cbrt(v)\r
+               \r
+               y2, y3 = solveQuadratic(1, y1, p + y1**2)\r
+\r
+               if type(y2) == type(0j):        # Are y2 and y3 complex?\r
+                       return [y1 - t]\r
+               return [y1 - t, y2 - t, y3 - t]\r
+       elif b != 0:\r
+               det=c*c - 4.0*b*d\r
+               if det >= 0:\r
+                       return [(-c + math.sqrt(det))/(2.0*b),(-c - math.sqrt(det))/(2.0*b)]\r
+       elif c != 0:\r
+               return [-d/c]\r
+       return []\r
+\r
+def getPathBoundingBox( sp ):\r
+       \r
+       box = None\r
+       last = None\r
+       lostctrl = None\r
+\r
+       for cmd,params in sp:\r
+\r
+               segmentBox = None\r
+\r
+               if cmd == 'M':\r
+                       # A move cannot contribute to the bounding box\r
+                       last = params[:]\r
+                       lastctrl = params[:]\r
+               elif cmd == 'L':\r
+                       if last:\r
+                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))\r
+                       last = params[:]\r
+                       lastctrl = params[:]\r
+               elif cmd == 'C':\r
+                       if last:                \r
+                               segmentBox = (min(params[4], last[0]), max(params[4], last[0]), min(params[5], last[1]), max(params[5], last[1]))\r
+                               \r
+                               bx0, by0 = last[:]\r
+                               bx1, by1, bx2, by2, bx3, by3 = params[:]\r
+\r
+                               # Compute the x limits\r
+                               a = (-bx0 + 3*bx1 - 3*bx2 + bx3)*3\r
+                               b = (3*bx0 - 6*bx1  + 3*bx2)*2\r
+                               c = (-3*bx0 + 3*bx1)\r
+                               ts = findRealRoots(0, a, b, c)\r
+                               for t in ts:\r
+                                       if t >= 0 and t <= 1:           \r
+                                               x = (-bx0 + 3*bx1 - 3*bx2 + bx3)*(t**3) + \\r
+                                                       (3*bx0 - 6*bx1 + 3*bx2)*(t**2) + \\r
+                                                       (-3*bx0 + 3*bx1)*t + \\r
+                                                       bx0\r
+                                               segmentBox = (min(segmentBox[0], x), max(segmentBox[1], x), segmentBox[2], segmentBox[3])\r
+\r
+                               # Compute the y limits\r
+                               a = (-by0 + 3*by1 - 3*by2 + by3)*3\r
+                               b = (3*by0 - 6*by1  + 3*by2)*2\r
+                               c = (-3*by0 + 3*by1)\r
+                               ts = findRealRoots(0, a, b, c)\r
+                               for t in ts:\r
+                                       if t >= 0 and t <= 1:           \r
+                                               y = (-by0 + 3*by1 - 3*by2 + by3)*(t**3) + \\r
+                                                       (3*by0 - 6*by1 + 3*by2)*(t**2) + \\r
+                                                       (-3*by0 + 3*by1)*t + \\r
+                                                       by0\r
+                                               segmentBox = (segmentBox[0], segmentBox[1], min(segmentBox[2], y), max(segmentBox[3], y))\r
+\r
+                       last = params[-2:]\r
+                       lastctrl = params[2:4]\r
+\r
+               elif cmd == 'Q':\r
+                       # Provisional\r
+                       if last:\r
+                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))\r
+                       last = params[-2:]\r
+                       lastctrl = params[2:4]\r
+\r
+               elif cmd == 'A':\r
+                       # Provisional\r
+                       if last:\r
+                               segmentBox = (min(params[0], last[0]), max(params[0], last[0]), min(params[1], last[1]), max(params[1], last[1]))\r
+                       last = params[-2:]\r
+                       lastctrl = params[2:4]\r
+\r
+               if segmentBox:\r
+                       if box:\r
+                               box = (min(segmentBox[0],box[0]), max(segmentBox[1],box[1]), min(segmentBox[2],box[2]), max(segmentBox[3],box[3]))\r
+                       else:\r
+                               box = segmentBox                        \r
+       return box\r
+\r
+def mxfm( image, width, height, stack ):                                                               # returns possibly transformed image\r
+       tbimage = image \r
+       if ( stack[0] == "-" ):                                                   # top-bottom flip\r
+               flipTopBottom(tbimage, height)\r
+               stack.pop( 0 )\r
+\r
+       lrimage = tbimage\r
+       if ( stack[0] == "|" ):                                                   # left-right flip\r
+               flipLeftRight(tbimage, width)\r
+               stack.pop( 0 )\r
+       return lrimage\r
+\r
+def comparerule( rule, nodes ):                                                  # compare node list to nodes in rule\r
+       for i in range( 0, len(nodes)):                                   # range( a, b ) = (a, a+1, a+2 ... b-2, b-1)\r
+               if (nodes[i] == rule[i][0]):\r
+                       pass\r
+               else: return 0\r
+       return 1\r
+\r
+def findrule( state, nodes ):                                                  # find the rule which generated this subtree\r
+       ruleset = syntax[state][1]\r
+       nodelen = len(nodes)\r
+       for rule in ruleset:\r
+               rulelen = len(rule)\r
+               if ((rulelen == nodelen) and (comparerule( rule, nodes ))):\r
+                       return rule\r
+       return \r
+\r
+def generate( state ):                                                            # generate a random tree (in stack form)\r
+       stack  = [ state ]\r
+       if ( len(syntax[state]) == 1 ):                                         # if this is a stop symbol\r
+               return stack\r
+       else:\r
+               stack.append( "[" )\r
+               path = random.randint(0, (len(syntax[state][1])-1)) # choose randomly from next states\r
+               for symbol in syntax[state][1][path]:                   # recurse down each non-terminal\r
+                       if ( symbol != 0 ):                                               # 0 denotes end of list ###\r
+                               substack = generate( symbol[0] )                 # get subtree\r
+                               for elt in substack:       \r
+                                       stack.append( elt )\r
+                               if (symbol[3]):stack.append( "-" )         # top-bottom flip\r
+                               if (symbol[4]):stack.append( "|" )         # left-right flip\r
+                       #else:\r
+                               #inkex.debug("found end of list in generate( state =", state, ")") # this should be deprecated/never happen\r
+               stack.append("]")\r
+               return stack\r
+\r
+def draw( stack ):                                                                        # draw a character based on a tree stack\r
+       state = stack.pop(0)\r
+       #print state,\r
+\r
+       image, width, height = loadPath( font+syntax[state][0] )                  # load the image\r
+       if (stack[0] != "["):                                                           # terminal stack element\r
+               if (len(syntax[state]) == 1):                                     # this state is a terminal node\r
+                       return image, width, height\r
+               else:\r
+                       substack = generate( state )                             # generate random substack\r
+                       return draw( substack )                                   # draw random substack\r
+       else:\r
+               #inkex.debug("[")\r
+               stack.pop(0)\r
+               images = []                                                               # list of daughter images\r
+               nodes  = []                                                               # list of daughter names\r
+               while (stack[0] != "]"):                                         # for all nodes in stack\r
+                       newstate = stack[0]                                       # the new state\r
+                       newimage, width, height = draw( stack )                          # draw the daughter state\r
+                       if (newimage):\r
+                               tfimage = mxfm( newimage, width, height, stack )        # maybe transform daughter state\r
+                               images.append( [tfimage, width, height] )                        # list of daughter images\r
+                               nodes.append( newstate )                         # list of daughter nodes\r
+                       else:\r
+                               #inkex.debug(("recurse on",newstate,"failed")) # this should never happen\r
+                               return None, 0, 0\r
+               rule = findrule( state, nodes )                   # find the rule for this subtree\r
+\r
+               for i in range( 0, len(images)):\r
+                       currimg, width, height = images[i]\r
+\r
+                       if currimg:\r
+                               #box = getPathBoundingBox(currimg)\r
+                               dx = rule[i][1]*units\r
+                               dy = rule[i][2]*units\r
+                               #newbox = ((box[0]+dx),(box[1]+dy),(box[2]+dx),(box[3]+dy))\r
+                               simplepath.translatePath(currimg, dx, dy)\r
+                               image = combinePaths( image, currimg )\r
+\r
+               stack.pop( 0 )\r
+               return image, width, height\r
+\r
+def draw_crop_scale( stack, zoom ):                                                    # draw, crop and scale letter image\r
+       image, width, height = draw(stack)\r
+       bbox = getPathBoundingBox(image)                        \r
+       simplepath.translatePath(image, -bbox[0], 0)    \r
+       simplepath.scalePath(image, zoom/units, zoom/units)\r
+       return image, bbox[1] - bbox[0], bbox[3] - bbox[2]\r
+\r
+def randomize_input_string( str, zoom ):                                          # generate list of images based on input string\r
+       imagelist = []\r
+\r
+       for i in range(0,len(str)):\r
+               char = str[i]\r
+               #if ( re.match("[a-zA-Z0-9?]", char)):\r
+               if ( alphabet.has_key(char)):\r
+                       if ((i > 0) and (char == str[i-1])):             # if this letter matches previous letter\r
+                               imagelist.append(imagelist[len(stack)-1])# make them the same image\r
+                       else:                                                                           # generate image for letter\r
+                               stack = string.split( alphabet[char][random.randint(0,(len(alphabet[char])-1))] , "." )\r
+                               #stack = string.split( alphabet[char][random.randint(0,(len(alphabet[char])-2))] , "." ) \r
+                               imagelist.append( draw_crop_scale( stack, zoom ))\r
+               elif( char == " "):                                                       # add a " " space to the image list\r
+                       imagelist.append( " " )\r
+               else:                                                                                   # this character is not in config.alphabet, skip it\r
+                       inkex.errormsg(_("bad character") + " = 0x%x" % ord(char))\r
+       return imagelist\r
+\r
+def optikern( image, width, zoom ):                                   # optical kerning algorithm\r
+       left  = []\r
+       right = []\r
+\r
+       for i in range( 0, 36 ):\r
+               y = 0.5 * (i + 0.5) * zoom\r
+               xmin = None\r
+               xmax = None\r
+\r
+               for cmd,params in image:\r
+\r
+                       segmentBox = None\r
+\r
+                       if cmd == 'M':\r
+                               # A move cannot contribute to the bounding box\r
+                               last = params[:]\r
+                               lastctrl = params[:]\r
+                       elif cmd == 'L':\r
+                               if (y >= last[1] and y <= params[1]) or (y >= params[1] and y <= last[1]):\r
+                                       if params[0] == last[0]:\r
+                                               x = params[0]\r
+                                       else:\r
+                                               a = (params[1] - last[1]) / (params[0] - last[0])\r
+                                               b = last[1] - a * last[0]\r
+                                               if a != 0:\r
+                                                       x = (y - b) / a\r
+                                               else: x = None\r
+                                       \r
+                                       if x:\r
+                                               if xmin == None or x < xmin: xmin = x\r
+                                               if xmax == None or x > xmax: xmax = x\r
+\r
+                               last = params[:]\r
+                               lastctrl = params[:]\r
+                       elif cmd == 'C':\r
+                               if last:                \r
+                                       bx0, by0 = last[:]\r
+                                       bx1, by1, bx2, by2, bx3, by3 = params[:]\r
+\r
+                                       d = by0 - y\r
+                                       c = -3*by0 + 3*by1\r
+                                       b = 3*by0 - 6*by1 + 3*by2\r
+                                       a = -by0 + 3*by1 - 3*by2 + by3\r
+                                       \r
+                                       ts = findRealRoots(a, b, c, d)\r
+\r
+                                       for t in ts:\r
+                                               if t >= 0 and t <= 1:           \r
+                                                       x = (-bx0 + 3*bx1 - 3*bx2 + bx3)*(t**3) + \\r
+                                                               (3*bx0 - 6*bx1 + 3*bx2)*(t**2) + \\r
+                                                               (-3*bx0 + 3*bx1)*t + \\r
+                                                               bx0\r
+                                                       if xmin == None or x < xmin: xmin = x\r
+                                                       if xmax == None or x > xmax: xmax = x\r
+\r
+                               last = params[-2:]\r
+                               lastctrl = params[2:4]\r
+\r
+                       elif cmd == 'Q':\r
+                               # Quadratic beziers are ignored\r
+                               last = params[-2:]\r
+                               lastctrl = params[2:4]\r
+\r
+                       elif cmd == 'A':\r
+                               # Arcs are ignored\r
+                               last = params[-2:]\r
+                               lastctrl = params[2:4]\r
+\r
+\r
+               if xmin != None and xmax != None:\r
+                       left.append( xmin )                        # distance from left edge of region to left edge of bbox\r
+                       right.append( width - xmax )               # distance from right edge of region to right edge of bbox\r
+               else:\r
+                       left.append(  width )\r
+                       right.append( width )\r
+\r
+       return (left, right)\r
+\r
+def layoutstring( imagelist, zoom ):                                    # layout string of letter-images using optical kerning\r
+       kernlist  = []\r
+       length = zoom\r
+       for entry in imagelist:\r
+               if (entry == " "):                                                         # leaving room for " " space characters\r
+                       length = length + (zoom * render_alphabetsoup_config.space)\r
+               else:\r
+                       image, width, height = entry\r
+                       length = length + width + zoom   # add letter length to overall length\r
+                       kernlist.append( optikern(image, width, zoom) )            # append kerning data for this image \r
+\r
+       workspace = None\r
+\r
+       position = zoom\r
+       for i in range(0, len(kernlist)):\r
+               while(imagelist[i] == " "):\r
+                       position = position + (zoom * render_alphabetsoup_config.space )\r
+                       imagelist.pop(i)\r
+               image, width, height = imagelist[i]\r
+\r
+               # set the kerning\r
+               if i == 0: kern = 0                                               # for first image, kerning is zero\r
+               else:\r
+                       kerncompare = []                                                         # kerning comparison array\r
+                       for j in range( 0, len(kernlist[i][0])):\r
+                               kerncompare.append( kernlist[i][0][j]+kernlist[i-1][1][j] )\r
+                       kern = min( kerncompare )\r
+\r
+               position = position - kern                                         # move position back by kern amount\r
+               thisimage = copy.deepcopy(image)                \r
+               simplepath.translatePath(thisimage, position, 0)\r
+               workspace = combinePaths(workspace, thisimage)\r
+               position = position + width + zoom      # advance position by letter width\r
+\r
+       return workspace\r
+\r
+class AlphabetSoup(inkex.Effect):\r
+       def __init__(self):\r
+               inkex.Effect.__init__(self)\r
+               self.OptionParser.add_option("-t", "--text",\r
+                                               action="store", type="string", \r
+                                               dest="text", default="Inkscape",\r
+                                               help="The text for alphabet soup")\r
+               self.OptionParser.add_option("-z", "--zoom",\r
+                                               action="store", type="float", \r
+                                               dest="zoom", default="8.0",\r
+                                               help="The zoom on the output graphics")\r
+               self.OptionParser.add_option("-s", "--seed",\r
+                                               action="store", type="int", \r
+                                               dest="seed", default="0",\r
+                                               help="The random seed for the soup")\r
+\r
+       def effect(self):\r
+               zoom = self.options.zoom\r
+               random.seed(self.options.seed)\r
+\r
+               imagelist = randomize_input_string(self.options.text, zoom)\r
+               image = layoutstring( imagelist, zoom )\r
+\r
+               if image:\r
+                       s = { 'stroke': 'none', 'fill': '#000000' }\r
+\r
+                       new = inkex.etree.Element(inkex.addNS('path','svg'))\r
+                       new.set('style', simplestyle.formatStyle(s))\r
+\r
+                       new.set('d', simplepath.formatPath(image))\r
+                       self.current_layer.append(new)\r
+\r
+if __name__ == '__main__':\r
+    e = AlphabetSoup()\r
+    e.affect()\r
+\r
index 610c8bf19fcca24d178f575150ca05845c40e71b..91dd1bbe434cdf60e8a6b2fb4724d40bb0f117be 100644 (file)
@@ -1,29 +1,30 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
-  <_name>Barcode</_name>
-  <id>org.inkscape.render.barcode</id>
-  <dependency type="executable" location="extensions">inkex.py</dependency>
-  <dependency type="executable" location="extensions">render_barcode.py</dependency>
-  <param name="type" type="enum" _gui-text="Barcode Type:">
-    <item value="ean8">EAN8</item>
-    <item value="ean13">EAN13</item>
-    <item value="upca">UPC-A</item>
-    <item value="upce">UPC-E</item>
-    <item value="code39">Code39</item>
-    <item value="code39ext">Code39Ext</item>
-    <item value="code93">Code93</item>
-    <item value="code128">Code128</item>
-    <item value="rm4scc">RM4CC / RM4SCC</item>
-  </param>
-  <param name="text" type="string" _gui-text="Barcode Data:"></param>
-  <param name="height" type="int" _gui-text="Bar Height:" min="20" max="80">30</param>
-  <effect>
-    <object-type>all</object-type>
-    <effects-menu>
-      <submenu _name="Render"/>
-    </effects-menu>
-  </effect>
-  <script>
-    <command reldir="extensions" interpreter="python">render_barcode.py</command>
-  </script>
+       <_name>Barcode</_name>
+       <id>org.inkscape.render.barcode</id>
+       <dependency type="executable" location="extensions">inkex.py</dependency>
+       <dependency type="executable" location="extensions">render_barcode.py</dependency>
+       <param name="type" type="enum" _gui-text="Barcode Type:">
+               <item value="ean8">EAN8</item>
+               <item value="ean13">EAN13</item>
+               <item value="ean5">EAN5</item>
+               <item value="upca">UPC-A</item>
+               <item value="upce">UPC-E</item>
+               <item value="code39">Code39</item>
+               <item value="code39ext">Code39Ext</item>
+               <item value="code93">Code93</item>
+               <item value="code128">Code128</item>
+               <item value="rm4scc">RM4CC / RM4SCC</item>
+       </param>
+       <param name="text" type="string" _gui-text="Barcode Data:"></param>
+       <param name="height" type="int" _gui-text="Bar Height:" min="20" max="80">30</param>
+       <effect>
+               <object-type>all</object-type>
+               <effects-menu>
+                       <submenu _name="Render"/>
+               </effects-menu>
+       </effect>
+       <script>
+               <command reldir="extensions" interpreter="python">render_barcode.py</command>
+       </script>
 </inkscape-extension>
diff --git a/share/extensions/render_barcode_datamatrix.inx b/share/extensions/render_barcode_datamatrix.inx
new file mode 100644 (file)
index 0000000..ea2aa47
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+       <_name>Barcode - Datamatrix</_name>
+       <id>il.datamatrix</id>
+       <dependency type="executable" location="extensions">render_barcode_datamatrix.py</dependency>
+       <dependency type="executable" location="extensions">inkex.py</dependency>
+       <param name="text" type="string" _gui-text="Text">Inkscape</param>
+       <param name="rows" type="int" min="8" max="144" _gui-text="Rows">10</param>
+       <param name="cols" type="int" min="10" max="144" _gui-text="Cols">10</param>
+       <param name="size" type="int" min="1" max="1000" _gui-text="Square Size / px">4</param>
+       <effect>
+               <object-type>all</object-type>
+               <effects-menu>
+                       <submenu _name="Render"/>
+               </effects-menu>
+       </effect>
+       <script>
+               <command reldir="extensions" interpreter="python">render_barcode_datamatrix.py</command>
+       </script>
+</inkscape-extension>
diff --git a/share/extensions/render_barcode_datamatrix.py b/share/extensions/render_barcode_datamatrix.py
new file mode 100644 (file)
index 0000000..5db552d
--- /dev/null
@@ -0,0 +1,654 @@
+#!/usr/bin/env python 
+# -*- coding: UTF-8 -*-
+'''
+Copyright (C) 2009 John Beard john.j.beard@gmail.com
+
+######DESCRIPTION######
+
+This extension renders a DataMatrix 2D barcode, as specified in
+BS ISO/IEC 16022:2006. Only ECC200 codes are considered, as these are the only
+ones recommended for an "open" system.
+
+The size of the DataMatrix is variable between 10x10 to 144x144
+
+The absolute size of the DataMatrix modules (the little squares) is also
+variable.
+
+If more data is given than can be contained in one DataMatrix,
+more than one DataMatrices will be produced.
+
+Text is encoded as ASCII (the standard provides for other options, but these are
+not implemented). Consecutive digits are encoded in a compressed form, halving 
+the space required to store them.
+
+The basis processing flow is;
+    * Convert input string to codewords (modified ASCII and compressed digits)
+    * Split codewords into blocks of the right size for Reed-Solomon coding
+    * Interleave the blocks if required
+    * Apply Reed-Solomon coding
+    * De-interleave the blocks if required
+    * Place the codewords into the matrix bit by bit
+    * Render the modules in the matrix as squares
+
+######LICENCE#######
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+######VERSION HISTORY#####
+    Ver.       Date                       Notes
+    
+    0.50    2009-10-25  Full functionality, up to 144x144.
+                        ASCII and compressed digit encoding only.
+'''
+
+import inkex, simplestyle
+
+import gettext
+_ = gettext.gettext
+    
+#ENCODING ROUTINES ===================================================
+#   Take an input string and convert it to a sequence (or sequences)
+#   of codewords as specified in ISO/IEC 16022:2006 (section 5.2.3)
+#=====================================================================
+    
+#create a 2d list corresponding to the 1's and 0s of the DataMatrix
+def encode(text, (nrow, ncol) ):
+    #retreive the parameters of this size of DataMatrix
+    data_nrow, data_ncol, reg_row, reg_col, nd, nc, inter = get_parameters( nrow, ncol )
+
+    if not ((nrow == 144) and (ncol == 144)):   #we have a regular datamatrix
+        size144 = False
+    else: #special handling will be required by get_codewords()
+        size144 = True
+        
+    #generate the codewords including padding and ECC
+    codewords = get_codewords( text, nd, nc, inter, size144 )
+    
+    # break up into separate arrays if more than one DataMatrix is needed
+    module_arrays = []
+    for codeword_stream in codewords:  #for each datamatrix
+        bit_array = place_bits(codeword_stream, (data_nrow*reg_row, data_ncol*reg_col)) #place the codewords' bits across the array as modules
+        module_arrays.append(add_finder_pattern( bit_array, data_nrow, data_ncol, reg_row, reg_col )) #add finder patterns around the modules
+    
+    return module_arrays
+
+#return parameters for the selected datamatrix size
+#   data_nrow   number of rows in each data region
+#   data_ncol   number of cols in each data region
+#   reg_row     number of rows of data regions
+#   reg_col     number of cols of data regions
+#   nd          number of data codewords per reed-solomon block
+#   nc          number of ECC codewords per reed-solomon block
+#   inter       number of interleaved Reed-Solomon blocks
+def get_parameters(nrow, ncol):
+
+    #SQUARE SYMBOLS
+    if ( nrow ==  10 and ncol ==  10 ):
+        return  8,  8, 1, 1, 3, 5, 1
+    elif ( nrow ==  12 and ncol ==  12 ):
+        return 10, 10, 1, 1, 5, 7, 1
+    elif ( nrow ==  14 and ncol ==  14 ):
+        return 12, 12, 1, 1, 8, 10, 1
+    elif ( nrow ==  16 and ncol ==  16 ):
+        return 14, 14, 1, 1, 12, 12, 1
+    elif ( nrow ==  18 and ncol ==  18 ):
+        return 16, 16, 1, 1, 18, 14, 1
+    elif ( nrow ==  20 and ncol ==  20 ):
+        return 18, 18, 1, 1, 22, 18, 1
+    elif ( nrow ==  22 and ncol ==  22 ):
+        return 18, 18, 1, 1, 30, 20, 1
+    elif ( nrow ==  24 and ncol ==  24 ):
+        return 22, 22, 1, 1, 36, 24, 1
+    elif ( nrow ==  26 and ncol ==  26 ):
+        return 24, 24, 1, 1, 44, 28, 1
+    elif ( nrow ==  32 and ncol ==  32 ):
+        return 14, 14, 2, 2, 62, 36, 1
+    elif ( nrow ==  36 and ncol ==  36 ):
+        return 16, 16, 2, 2, 86, 42, 1
+    elif ( nrow ==  40 and ncol ==  40):
+        return 18, 18, 2, 2, 114, 48, 1
+    elif ( nrow ==  44 and ncol ==  44):
+        return 20, 20, 2, 2, 144, 56, 1
+    elif ( nrow ==  48 and ncol ==  48 ):
+        return 22, 22, 2, 2, 174, 68, 1
+        
+    elif ( nrow ==  52 and ncol ==  52 ):
+        return 24, 24, 2, 2, 102, 42, 2
+    elif ( nrow ==  64 and ncol ==  64 ):
+        return 16, 16, 4, 4, 140, 56, 2
+        
+    elif ( nrow ==  72 and ncol ==  72 ):
+        return 16, 16, 4, 4, 92, 36, 4
+    elif ( nrow ==  80 and ncol ==  80 ):
+        return 18, 18, 4, 4, 114, 48, 4
+    elif ( nrow ==  88 and ncol ==  88 ):
+        return 20, 20, 4, 4, 144, 56, 4
+    elif ( nrow ==  96 and ncol ==  96 ):
+        return 22, 22, 4, 4, 174, 68, 4
+        
+    elif ( nrow ==  104 and ncol ==  104 ):
+        return 24, 24, 4, 4, 136, 56, 6    
+    elif ( nrow ==  120 and ncol ==  120):
+        return 18, 18, 6, 6, 175, 68, 6
+        
+    elif ( nrow ==  132 and ncol ==  132):
+        return 20, 20, 6, 6, 163, 62, 8
+        
+    elif (nrow == 144 and ncol == 144):
+        return 22, 22, 6, 6, 0, 0, 0        #there are two separate sections of the data matrix with
+                                            #different interleaving and reed-solomon parameters.
+                                            #this will be handled separately
+    
+    #RECTANGULAR SYMBOLS
+    elif ( nrow ==  8 and ncol ==  18 ):
+        return  6, 16, 1, 1, 5, 7, 1
+    elif ( nrow ==  8 and ncol ==  32 ):
+        return  6, 14, 1, 2, 10, 11, 1
+    elif ( nrow ==  12 and ncol ==  26 ):
+        return  10, 24, 1, 1, 16, 14, 1
+    elif ( nrow ==  12 and ncol ==  36 ):
+        return  10, 16, 1, 2, 22, 18, 1
+    elif ( nrow ==  16 and ncol ==  36 ):
+        return  14, 16, 1, 2, 32, 24, 1
+    elif ( nrow ==  16 and ncol ==  48 ):
+        return  14, 22, 1, 2, 49, 28, 1
+    
+    #RETURN ERROR
+    else:
+        inkex.errormsg(_('Unrecognised DataMatrix size'))
+    
+    return None
+    
+# CODEWORD STREAM GENERATION =========================================
+#take the text input and return the codewords,
+#including the Reed-Solomon error-correcting codes.
+#=====================================================================
+
+def get_codewords( text, nd, nc, inter, size144 ):
+    #convert the data to the codewords
+    data = encode_to_ascii( text )
+    
+    if not size144:    #render a "normal" datamatrix
+        data_blocks = partition_data(data, nd*inter)  #partition into data blocks of length nd*inter -> inter Reed-Solomon block
+    
+        data_blocks = interleave( data_blocks, inter)   # interleave consecutive inter blocks if required
+    
+        data_blocks = reed_solomon(data_blocks, nd, nc) #generate and append the Reed-Solomon codewords
+    
+        data_blocks = combine_interleaved(data_blocks, inter, nd, nc, False)  #concatenate Reed-Solomon blocks bound for the same datamatrix
+        
+    else: #we have a 144x144 datamatrix
+        data_blocks = partition_data(data, 1558) #partition the data into datamtrix-sized chunks (1558 =156*8 + 155*2 )
+        
+        for i in range(len(data_blocks)):  #for each datamtrix
+            
+            
+            inter = 8
+            nd = 156
+            nc = 62
+            block1 = data_blocks[i][0:156*8]
+            block1 = interleave( [block1], inter)   # interleave into 8 blocks
+            block1 = reed_solomon(block1, nd, nc) #generate and append the Reed-Solomon codewords
+            
+            inter = 2
+            nd = 155
+            nc = 62
+            block2 = data_blocks[i][156*8:]
+            block2 = interleave( [block2], inter)   # interleave into 2 blocks
+            block2 = reed_solomon(block2, nd, nc) #generate and append the Reed-Solomon codewords
+            
+            blocks = block1
+            blocks.extend(block2)
+                
+            blocks = combine_interleaved(blocks, 10, nd, nc, True)  
+            
+            data_blocks[i] = blocks[0]
+
+        
+    return data_blocks
+    
+
+#Takes a codeword stream and splits up into "inter" blocks.
+#eg interleave( [1,2,3,4,5,6], 2 ) -> [1,3,5], [2,4,6]
+def interleave( blocks, inter):
+
+    if inter == 1:       # if we don't have to interleave, just return the blocks
+        return blocks
+    else:
+        result = []
+        for block in blocks:    #for each codeword block in the stream
+            block_length = len(block)/inter    #length of each interleaved block
+            inter_blocks = [[0] * block_length for i in xrange(inter)]   #the interleaved blocks
+            
+            for i in range(block_length):   #for each element in the interleaved blocks
+                for j in range(inter):       #for each interleaved block
+                    inter_blocks[j][i] = block[ i*inter + j ]
+            
+            result.extend(inter_blocks) #add the interleaved blocks to the output
+        
+        return result
+        
+#Combine interleaved blocks into the groups for the same datamatrix
+#
+#e.g combine_interleaved( [[d1, d3, d5, e1, e3, e5], [d2, d4, d6, e2, e4, e6]], 2, 3, 3 )
+#   --> [[d1, d2, d3, d4, d5, d6, e1, e2, e3, e4, e5, e6]]
+def combine_interleaved( blocks, inter, nd, nc, size144):
+    if inter == 1:  #the blocks aren't interleaved
+        return blocks
+    else:
+        result = []
+        for i in range( len(blocks) / inter ):  #for each group of "inter" blocks -> one full datamatrix
+            data_codewords = [] #interleaved data blocks
+            
+            if size144:
+                nd_range = 1558 #1558 = 156*8 + 155*2
+                nc_range = 620   #620 = 62*8 + 62*2
+            else:
+                nd_range = nd*inter
+                nc_range = nc*inter
+            
+            for j in range(nd_range):  #for each codeword in the final list
+                data_codewords.append( blocks[i*inter + j%inter][j/inter] )
+
+            for j in range(nc_range):  #for each block, add the ecc codewords
+                data_codewords.append( blocks[i*inter + j%inter][nd + j/inter] )
+
+            result.append(data_codewords)
+        return result
+    
+#checks if an ASCII character is a digit from 0 - 9
+def is_digit( char ):
+    
+    if ord(char) >= 48 and ord(char) <= 57:
+        return True
+    else:
+        return False
+    
+def encode_to_ascii( text):
+
+    ascii = []
+    i = 0
+    while i < len(text):
+        #check for double digits
+        if is_digit( text[i] ) and ( i < len(text)-1) and is_digit( text[i+1] ):   #if the next char is also a digit
+            
+            codeword = int( text[i] + text[i+1] ) + 130
+            ascii.append( codeword )
+            i = i + 2   #move on 2 characters
+        else: #encode as a normal ascii, 
+            ascii.append( ord(text[i] ) + 1 ) #codeword is ASCII value + 1 (ISO 16022:2006 5.2.3)
+            i = i + 1   #next character
+            
+    return ascii
+
+    
+#partition data into blocks of the appropriate size to suit the
+#Reed-Solomon block being used.
+#e.g. partition_data([1,2,3,4,5], 3) -> [[1,2,3],[4,5,PAD]]
+def partition_data( data , rs_data):
+
+    PAD_VAL = 129        # PAD codeword (ISO 16022:2006 5.2.3)
+    data_blocks = []
+    i = 0
+    while i < len(data):
+        if len(data) >= i+rs_data:  #we have a whole block in our data
+            data_blocks.append( data[i:i+rs_data] )
+            i = i + rs_data
+        else:   #pad out with the pad codeword
+            data_block = data[i:len(data)] #add any remaining data
+            pad_pos = len(data)
+            padded = False
+            while len(data_block) < rs_data:#and then pad with randomised pad codewords
+                if not padded:
+                    data_block.append( PAD_VAL ) #add a normal pad codeword
+                    padded = True
+                else:
+                    data_block.append( randomise_pad_253( PAD_VAL, pad_pos) )
+                pad_pos = pad_pos + 1
+            data_blocks.append( data_block)
+            break
+            
+    return data_blocks
+    
+#Pad character randomisation, to prevent regular patterns appearing
+#in the data matrix
+def randomise_pad_253(pad_value, pad_position ):
+    pseudo_random_number = ( ( 149 * pad_position ) % 253 )+ 1 
+    randomised = pad_value + pseudo_random_number
+    if ( randomised <= 254 ):
+        return randomised
+    else:
+        return randomised - 254
+        
+# REED-SOLOMON ENCODING ROUTINES =====================================
+    
+# "prod(x,y,log,alog,gf)" returns the product "x" times "y"
+def prod(x, y, log, alog, gf):
+    
+    if ( x==0 or y==0):
+        return 0
+    else:
+        result = alog[ ( log[x] + log[y] ) % (gf - 1) ]
+        return result
+
+# generate the log & antilog lists:
+def gen_log_alog(gf, pp):
+    log = [0]*gf
+    alog = [0]*gf
+
+    log[0] = 1-gf
+    alog[0] = 1
+    
+    for i in range(1,gf):
+        alog[i] = alog[i-1] * 2
+        
+        if (alog[i] >= gf):
+            alog[i] = alog[i] ^ pp
+            
+        log[alog[i]] = i 
+        
+    return log, alog
+    
+# generate the generator polynomial coefficients:
+def gen_poly_coeffs(nc, log, alog, gf):
+    c = [0] * (nc+1)
+    c[0] = 1
+
+    for i in range(1,nc+1):
+        c[i] = c[i-1] 
+        
+        j = i-1
+        while j >= 1:
+            c[j] = c[j-1] ^ prod(c[j],alog[i],log,alog,gf)
+            j = j - 1
+        
+        c[0] = prod(c[0],alog[i],log,alog,gf)
+        
+    return c
+    
+# "ReedSolomon(wd,nd,nc)" takes "nd" data codeword values in wd[]
+# and adds on "nc" check codewords, all within GF(gf) where "gf" is a
+# power of 2 and "pp" is the value of its prime modulus polynomial */ 
+def reed_solomon(data, nd, nc):
+    #parameters of the polynomial arithmetic
+    gf = 256  #operating on 8-bit codewords -> Galois field = 2^8 = 256
+    pp = 301  #prime modulus polynomial for ECC-200 is 0b100101101 = 301 (ISO 16022:2006 5.7.1)
+    
+    log, alog = gen_log_alog(gf,pp)
+    c = gen_poly_coeffs(nc, log, alog, gf)
+
+    for block in data: #for each block of data codewords
+
+        block.extend( [0]*(nc+1) ) #extend to make space for the error codewords
+        
+        #generate "nc" checkwords in the list block
+        for i in range(0, nd):
+            k = block[nd] ^ block[i]
+            
+            for j in range(0,nc):
+                block[nd+j] = block[nd+j+1] ^ prod(k,c[nc-j-1],log, alog,gf)
+                
+        block.pop()
+
+    return data
+    
+#MODULE PLACEMENT ROUTINES===========================================
+#   These routines take a steam of codewords, and place them into the
+#   DataMatrix in accordance with Annex F of BS ISO/IEC 16022:2006
+
+# bit() returns the bit'th bit of the byte
+def bit(byte, bit):
+    #the MSB is bit 1, LSB is bit 8
+    return ( byte >> (8-bit) ) %2
+    
+# "module" places a given bit with appropriate wrapping within array
+def module(array, nrow, ncol, row, col, bit) :
+    if (row < 0) :
+        row = row + nrow
+        col = col + 4 - ((nrow+4)%8)
+        
+    if (col < 0):
+        col = col + ncol
+        row = row + 4 - ((ncol+4)%8) 
+
+    array[row][col] = bit
+
+def corner1(array, nrow, ncol, char): 
+    module(array, nrow, ncol, nrow-1, 0,      bit(char,1)); 
+    module(array, nrow, ncol, nrow-1, 1,      bit(char,2)); 
+    module(array, nrow, ncol, nrow-1, 2,      bit(char,3)); 
+    module(array, nrow, ncol, 0,      ncol-2, bit(char,4)); 
+    module(array, nrow, ncol, 0,      ncol-1, bit(char,5)); 
+    module(array, nrow, ncol, 1,      ncol-1, bit(char,6)); 
+    module(array, nrow, ncol, 2,      ncol-1, bit(char,7)); 
+    module(array, nrow, ncol, 3,      ncol-1, bit(char,8)); 
+
+def corner2(array, nrow, ncol, char):
+    module(array, nrow, ncol, nrow-3, 0,      bit(char,1)); 
+    module(array, nrow, ncol, nrow-2, 0,      bit(char,2)); 
+    module(array, nrow, ncol, nrow-1, 0,      bit(char,3)); 
+    module(array, nrow, ncol, 0,      ncol-4, bit(char,4)); 
+    module(array, nrow, ncol, 0,      ncol-3, bit(char,5)); 
+    module(array, nrow, ncol, 0,      ncol-2, bit(char,6)); 
+    module(array, nrow, ncol, 0,      ncol-1, bit(char,7)); 
+    module(array, nrow, ncol, 1,      ncol-1, bit(char,8)); 
+
+def corner3(array, nrow, ncol, char):
+    module(array, nrow, ncol, nrow-3, 0,      bit(char,1)); 
+    module(array, nrow, ncol, nrow-2, 0,      bit(char,2)); 
+    module(array, nrow, ncol, nrow-1, 0,      bit(char,3)); 
+    module(array, nrow, ncol, 0,      ncol-2, bit(char,4)); 
+    module(array, nrow, ncol, 0,      ncol-1, bit(char,5)); 
+    module(array, nrow, ncol, 1,      ncol-1, bit(char,6)); 
+    module(array, nrow, ncol, 2,      ncol-1, bit(char,7)); 
+    module(array, nrow, ncol, 3,      ncol-1, bit(char,8)); 
+
+def corner4(array, nrow, ncol, char):
+    module(array, nrow, ncol, nrow-1, 0,      bit(char,1)); 
+    module(array, nrow, ncol, nrow-1, ncol-1, bit(char,2)); 
+    module(array, nrow, ncol, 0,      ncol-3, bit(char,3)); 
+    module(array, nrow, ncol, 0,      ncol-2, bit(char,4)); 
+    module(array, nrow, ncol, 0,      ncol-1, bit(char,5)); 
+    module(array, nrow, ncol, 1,      ncol-3, bit(char,6)); 
+    module(array, nrow, ncol, 1,      ncol-2, bit(char,7)); 
+    module(array, nrow, ncol, 1,      ncol-1, bit(char,8));
+    
+#"utah" places the 8 bits of a utah-shaped symbol character in ECC200
+def utah(array, nrow, ncol, row, col, char):
+    module(array, nrow, ncol,row-2, col-2, bit(char,1))
+    module(array, nrow, ncol,row-2, col-1, bit(char,2))
+    module(array, nrow, ncol,row-1, col-2, bit(char,3))
+    module(array, nrow, ncol,row-1, col-1, bit(char,4))
+    module(array, nrow, ncol,row-1, col,   bit(char,5))
+    module(array, nrow, ncol,row,   col-2, bit(char,6))
+    module(array, nrow, ncol,row,   col-1, bit(char,7))
+    module(array, nrow, ncol,row,   col,   bit(char,8))
+
+#"place_bits" fills an nrow x ncol array with the bits from the 
+# codewords in data. 
+def place_bits(data, (nrow, ncol)): 
+# First, fill the array[] with invalid entries */ 
+    INVALID = 2
+    array = [[INVALID] * ncol for i in xrange(nrow)]   #initialise and fill with -1's (invalid value)
+# Starting in the correct location for character #1, bit 8,...
+    char = 0
+    row = 4
+    col = 0
+    while True:
+    
+    #first check for one of the special corner cases, then... 
+        if ((row == nrow) and (col == 0)):
+            corner1(array, nrow, ncol, data[char])
+            char = char + 1
+        if ((row == nrow-2) and (col == 0) and (ncol%4)) :
+            corner2(array, nrow, ncol, data[char])
+            char = char + 1
+        if ((row == nrow-2) and (col == 0) and (ncol%8 == 4)):
+            corner3(array, nrow, ncol, data[char])
+            char = char + 1
+        if ((row == nrow+4) and (col == 2) and ((ncol%8) == 0)):
+            corner4(array, nrow, ncol, data[char])
+            char = char + 1
+        
+        #sweep upward diagonally, inserting successive characters,...
+        while True:
+            if ((row < nrow) and (col >= 0) and (array[row][col] == INVALID)) :
+                utah(array, nrow, ncol,row,col,data[char])
+                char = char+1
+            row = row - 2
+            col = col + 2
+            
+            if not((row >= 0) and (col < ncol)):
+                break
+            
+        row = row + 1
+        col = col + 3 
+                
+        # & then sweep downward diagonally, inserting successive characters,...
+        while True:
+            if ((row >= 0) and (col < ncol) and (array[row][col] == INVALID)) :
+                utah(array, nrow, ncol,row,col,data[char])
+                char = char + 1
+            row = row + 2
+            col = col - 2 
+        
+            if not((row < nrow) and (col >= 0)):
+                break
+        
+        row = row + 3
+        col = col + 1
+        
+        #... until the entire array is scanned
+        if not((row < nrow) or (col < ncol)):
+            break
+
+    # Lastly, if the lower righthand corner is untouched, fill in fixed pattern */ 
+    if (array[nrow-1][ncol-1] == INVALID): 
+        array[nrow-1][ncol-2] = 0
+        array[nrow-1][ncol-1] = 1
+        array[nrow-2][ncol-1] = 0
+        array[nrow-2][ncol-2] = 1
+
+    return array    #return the array of 1's and 0's
+    
+    
+def add_finder_pattern( array, data_nrow, data_ncol, reg_row, reg_col ):
+
+    #get the total size of the datamatrix
+    nrow = (data_nrow+2) * reg_row
+    ncol = (data_ncol+2) * reg_col
+
+    datamatrix = [[0] * ncol for i in xrange(nrow)]   #initialise and fill with 0's
+    
+    for i in range( reg_col ):    #for each column of data regions
+        for j in range(nrow):
+            datamatrix[j][i*(data_ncol+2)] = 1  #vertical black bar on left
+            datamatrix[j][i*(data_ncol+2)+data_ncol+1] = (j)%2 # alternating blocks
+            
+    for i in range( reg_row):   # for each row of data regions
+        for j in range(ncol):
+            datamatrix[i*(data_nrow+2)+data_nrow+1][j] = 1  #horizontal black bar at bottom
+            datamatrix[i*(data_nrow+2)][j] = (j+1)%2 # alternating blocks
+            
+    for i in range( data_nrow*reg_row ):
+        for j in range( data_ncol* reg_col ):
+            dest_col = j + 1 + 2*(j/(data_ncol)) #offset by 1, plus two for every addition block
+            dest_row = i + 1 + 2*(i/(data_nrow))
+            
+            datamatrix[dest_row][dest_col] = array[i][j]    #transfer from the plain bit array
+            
+    return datamatrix
+    
+#RENDERING ROUTINES ==================================================
+#   Take the array of 1's and 0's and render as a series of black
+#   squares. A binary 1 is a filled square
+#=====================================================================
+
+#SVG element generation routine
+def draw_SVG_square((w,h), (x,y), parent):
+
+    style = {   'stroke'        : 'none',
+                'width'         : '1',
+                'fill'          : '#000000'
+            }
+                
+    attribs = {
+        'style'     :simplestyle.formatStyle(style),
+        'height'    : str(h),
+        'width'     : str(w),
+        'x'         : str(x),
+        'y'         : str(y)
+            }
+    circ = inkex.etree.SubElement(parent, inkex.addNS('rect','svg'), attribs )
+    
+#turn a 2D array of 1's and 0's into a set of black squares
+def render_data_matrix( module_arrays, size, spacing, parent):
+    
+    for i in range(len(module_arrays)): #for each data matrix
+    
+        height = len(module_arrays[i])
+        width  = len(module_arrays[i][0] )
+        
+        for y in range(height):     #loop over all the modules in the datamatrix
+            for x in range(width):
+                
+                if module_arrays[i][y][x] == 1: #A binary 1 is a filled square
+                    draw_SVG_square((size,size), (x*size + i*spacing,y*size), parent)
+                elif module_arrays[i][y][x] != 0: #we have an invalid bit value
+                    inkex.errormsg(_('Invalid bit value, this is a bug!'))
+    
+class DataMatrix(inkex.Effect):
+    def __init__(self):
+        inkex.Effect.__init__(self)
+        
+        #PARSE OPTIONS
+        self.OptionParser.add_option("--text",
+            action="store", type="string",
+            dest="TEXT", default='Inkscape')
+        self.OptionParser.add_option("--rows",
+            action="store", type="int",
+            dest="ROWS", default=10)
+        self.OptionParser.add_option("--cols",
+            action="store", type="int",
+            dest="COLS", default=10)
+        self.OptionParser.add_option("--size",
+            action="store", type="int",
+            dest="SIZE", default=4)
+            
+    def effect(self):
+        
+        so = self.options
+        
+        if so.TEXT == '':  #abort if converting blank text
+            inkex.errormsg(_('Please enter an input string'))
+        else:
+        
+            #INKSCAPE GROUP TO CONTAIN EVERYTHING
+            
+            centre = self.view_center   #Put in in the centre of the current view
+            grp_transform = 'translate' + str( centre )
+            grp_name = 'DataMatrix'
+            grp_attribs = {inkex.addNS('label','inkscape'):grp_name,
+                           'transform':grp_transform }
+            grp = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs)#the group to put everything in
+            
+            #GENERATE THE DATAMATRIX
+            encoded = encode( so.TEXT, (so.ROWS, so.COLS) ) #get the pattern of squares
+            render_data_matrix( encoded, so.SIZE, so.COLS*so.SIZE*1.5, grp )    # generate the SVG elements
+            
+if __name__ == '__main__':
+    e = DataMatrix()
+    e.affect()
+
+# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99
diff --git a/share/extensions/wireframe_sphere.inx b/share/extensions/wireframe_sphere.inx
new file mode 100644 (file)
index 0000000..733ba8e
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+       <_name>Wireframe Sphere</_name>
+       <id>il.wireframesphere</id>
+       <dependency type="executable" location="extensions">wireframe_sphere.py</dependency>
+       <dependency type="executable" location="extensions">inkex.py</dependency>
+       <dependency type="executable" location="extensions">simplestyle.py</dependency>
+       <dependency type="executable" location="extensions">simpletransform.py</dependency>
+       <param name="num_lat" type="int" min="0" max="1000" _gui-text="Lines of latitude">19</param>
+       <param name="num_long" type="int" min="0" max="1000" _gui-text="Lines of longitude">24</param>
+       <param name="tilt" type="float" min="-90" max="90" _gui-text="Tilt [deg]">35</param>
+       <param name="rotation" type="float" min="0" max="360" _gui-text="Rotation [deg]">4</param>
+       <param name="radius" type="float" min="1" max="1000" _gui-text="Radius [px]">100.0</param>
+       <param name="hide_back" type="boolean" _gui-text="Hide lines behind the sphere">false</param>
+       <effect>
+               <object-type>all</object-type>
+               <effects-menu>
+                       <submenu _name="Render"/>
+               </effects-menu>
+       </effect>
+       <script>
+               <command reldir="extensions" interpreter="python">wireframe_sphere.py</command>
+       </script>
+</inkscape-extension>
diff --git a/share/extensions/wireframe_sphere.py b/share/extensions/wireframe_sphere.py
new file mode 100644 (file)
index 0000000..ec7e9ea
--- /dev/null
@@ -0,0 +1,220 @@
+#!/usr/bin/env python 
+# -*- coding: UTF-8 -*-
+'''
+Copyright (C) 2009 John Beard john.j.beard@gmail.com
+
+######DESCRIPTION######
+
+This extension renders a wireframe sphere constructed from lines of latitude
+and lines of longitude.
+
+The number of lines of latitude and longitude is independently variable. Lines 
+of latitude and longtude are in separate subgroups. The whole figure is also in
+its own group.
+
+The whole sphere can be tilted towards or away from the veiwer by a given 
+number of degrees. If the whole sphere is then rotated normally in Inkscape,
+any position can be acheived.
+
+There is an option to hide the lines at the back of the sphere, as if the 
+sphere were opaque.
+    #FIXME: Lines of latitude only have an approximation of the function needed
+            to hide the back portion. If you can derive the proper equation,
+            please add it in.
+            Line of longitude have the exact method already.
+            Workaround: Use the Inkscape ellipse tool to edit the start and end
+            points of the lines of latitude to end at the horizon circle.
+            
+           
+#TODO:  Add support for odd numbers of lines of longitude. This means breaking
+        the line at the poles, and having two half ellipses for each line.
+        The angles at which the ellipse arcs pass the poles are not constant and
+        need to be derived before this can be implemented.
+#TODO:  Add support for prolate and oblate spheroids
+
+######LICENCE#######
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+######VERSION HISTORY#####
+    Ver.       Date                       Notes
+    
+    0.10    2009-10-25  First version. Basic spheres supported.
+                        Hidden lines of latitude still not properly calculated.
+                        Prolate and oblate spheroids not considered.
+'''
+
+import inkex, simplestyle
+
+import gettext
+_ = gettext.gettext
+
+from math import *
+
+#SVG OUTPUT FUNCTIONS ================================================
+def draw_SVG_ellipse((rx, ry), (cx, cy), parent, start_end=(0,2*pi),transform='' ):
+
+    style = {   'stroke'        : '#000000',
+                'width'         : '1',
+                'fill'          : 'none'            }
+    circ_attribs = {'style':simplestyle.formatStyle(style),
+        inkex.addNS('cx','sodipodi')        :str(cx),
+        inkex.addNS('cy','sodipodi')        :str(cy),
+        inkex.addNS('rx','sodipodi')        :str(rx),
+        inkex.addNS('ry','sodipodi')        :str(ry),
+        inkex.addNS('start','sodipodi')     :str(start_end[0]),
+        inkex.addNS('end','sodipodi')       :str(start_end[1]),
+        inkex.addNS('open','sodipodi')      :'true',    #all ellipse sectors we will draw are open
+        inkex.addNS('type','sodipodi')      :'arc',
+        'transform'                         :transform
+        
+            }
+    circ = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), circ_attribs )
+    
+class Wireframe_Sphere(inkex.Effect):
+    def __init__(self):
+        inkex.Effect.__init__(self)
+        
+        #PARSE OPTIONS
+        self.OptionParser.add_option("--num_lat",
+            action="store", type="int",
+            dest="NUM_LAT", default=19)
+        self.OptionParser.add_option("--num_long",
+            action="store", type="int",
+            dest="NUM_LONG", default=24)
+        self.OptionParser.add_option("--radius",
+            action="store", type="float", 
+            dest="RADIUS", default=100.0)
+        self.OptionParser.add_option("--tilt",
+            action="store", type="float",
+            dest="TILT", default=35.0)
+        self.OptionParser.add_option("--rotation",
+            action="store", type="float",
+            dest="ROT_OFFSET", default=4)
+        self.OptionParser.add_option("--hide_back",
+            action="store", type="inkbool", 
+            dest="HIDE_BACK", default=False)
+            
+    def effect(self):
+        
+        so = self.options
+        
+        #PARAMETER PROCESSING
+        
+        if so.NUM_LONG % 2 != 0: #lines of longitude are odd : abort
+            inkex.errormsg(_('Please enter an even number of lines of longitude.'))
+        else:
+            if so.TILT < 0:            # if the tilt is backwards
+                flip = ' scale(1, -1)' # apply a vertical flip to the whole sphere
+            else:
+                flip = '' #no flip
+
+            so.TILT       =  abs(so.TILT)*(pi/180)  #Convert to radians
+            so.ROT_OFFSET = so.ROT_OFFSET*(pi/180)  #Convert to radians
+            
+            EPSILON = 0.001 #add a tiny value to the ellipse radii, so that if we get a zero radius, the ellipse still shows up as a line
+
+            #INKSCAPE GROUP TO CONTAIN EVERYTHING
+            
+            centre = self.view_center   #Put in in the centre of the current view
+            grp_transform = 'translate' + str( centre ) + flip
+            grp_name = 'WireframeSphere'
+            grp_attribs = {inkex.addNS('label','inkscape'):grp_name,
+                           'transform':grp_transform }
+            grp = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs)#the group to put everything in
+            
+            #LINES OF LONGITUDE
+            
+            if so.NUM_LONG > 0:      #only process longitudes if we actually want some
+                
+                #GROUP FOR THE LINES OF LONGITUDE
+                grp_name = 'Lines of Longitude'
+                grp_attribs = {inkex.addNS('label','inkscape'):grp_name}
+                grp_long = inkex.etree.SubElement(grp, 'g', grp_attribs)
+                
+                delta_long = 360.0/so.NUM_LONG      #angle between neighbouring lines of longitude in degrees
+                
+                for i in range(0,so.NUM_LONG/2):
+                    long_angle = so.ROT_OFFSET + (i*delta_long)*(pi/180.0); #The longitude of this particular line in radians
+                    width      = so.RADIUS * cos(long_angle)
+                    height     = so.RADIUS * sin(long_angle) * sin(so.TILT)       #the rise is scaled by the sine of the tilt
+                    length     = sqrt(width*width+height*height)  #by pythagorean theorem
+                    inverse    = sin(acos(length/so.RADIUS))
+                    
+                    minorRad   = so.RADIUS * inverse
+                    minorRad=minorRad + EPSILON
+                    
+                    #calculate the rotation of the ellipse to get it to pass through the pole (in degrees)
+                    rotation = atan(height/width)*(180.0/pi)
+                    transform = "rotate("+str(rotation)+')' #generate the transform string
+                    #the rotation will be applied about the group centre (the centre of the sphere)
+                    
+                    # remove the hidden side of the ellipses if required
+                    # this is always exactly half the ellipse, but we need to find out which half
+                    start_end = (0, 2*pi)   #Default start and end angles -> full ellipse
+                    if so.HIDE_BACK:
+                        if long_angle <= pi/2:           #cut out the half ellispse that is hidden
+                            start_end = (pi/2, 3*pi/2)
+                        else:
+                            start_end = (3*pi/2, pi/2)
+                    
+                    #finally, draw the line of longitude
+                    #the centre is always at the centre of the sphere
+                    draw_SVG_ellipse( ( minorRad, so.RADIUS ), (0,0), grp_long , start_end,transform)
+                
+            # LINES OF LATITUDE
+            if so.NUM_LAT > 0:
+            
+                #GROUP FOR THE LINES OF LATITUDE
+                grp_name = 'Lines of Latitude'
+                grp_attribs = {inkex.addNS('label','inkscape'):grp_name}
+                grp_lat = inkex.etree.SubElement(grp, 'g', grp_attribs)
+                
+                
+                so.NUM_LAT = so.NUM_LAT + 1     #Account for the fact that we loop over N-1 elements
+                delta_lat = 180.0/so.NUM_LAT    #Angle between the line of latitude (subtended at the centre)
+                
+                for i in range(1,so.NUM_LAT):
+                    lat_angle=((delta_lat*i)*(pi/180))            #The angle of this line of latitude (from a pole)
+                    
+                    majorRad=so.RADIUS*sin(lat_angle)                 #The width of the LoLat (no change due to projection)
+                    minorRad=so.RADIUS*sin(lat_angle) * sin(so.TILT)     #The projected height of the line of latitude
+                    minorRad=minorRad + EPSILON
+                    
+                    cy=so.RADIUS*cos(lat_angle) * cos(so.TILT) #The projected y position of the LoLat
+                    cx=0                                    #The x position is just the center of the sphere
+                    
+                    if so.HIDE_BACK:
+                        if lat_angle > so.TILT:                     #this LoLat is partially or fully visible
+                            if lat_angle > pi-so.TILT:               #this LoLat is fully visible
+                                draw_SVG_ellipse((majorRad, minorRad), (cx,cy), grp_lat)
+                            else: #this LoLat is partially visible
+                                
+                                proportion = -(acos( (lat_angle - pi/2)/(pi/2 - so.TILT)) )/pi + 1 #this is a dirty hacky approximation
+                                #FIXME: if you can work out the right way to do this, please do it
+                                start_end = ( pi/2 - proportion*pi, pi/2 + proportion*pi ) #make the start and end angles (mirror image around pi/2)
+                                draw_SVG_ellipse((majorRad, minorRad), (cx,cy), grp_lat, start_end)
+                            
+                    else: #just draw the full lines of latitude
+                        draw_SVG_ellipse((majorRad, minorRad), (cx,cy), grp_lat)
+            
+        
+            #THE HORIZON CIRCLE
+            draw_SVG_ellipse((so.RADIUS, so.RADIUS), (0,0), grp) #circle, centred on the sphere centre
+            
+if __name__ == '__main__':
+    e = Wireframe_Sphere()
+    e.affect()
+
+# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99
index e39174833ba753db09552c7c54c804d85e3784dc..59c55948da4ef35ae2af37d09f45500dee4672b6 100644 (file)
@@ -1,6 +1,13 @@
+SUBDIRS = application
+
 iconsdir = $(datadir)/inkscape/icons
 
 pixmaps = \
+       too-much-ink-icon.png \
+       too-much-ink-icon.svg \
+       out-of-gamut-icon.png \
+       out-of-gamut-icon.svg \
+       color-management-icon.png \
        remove-color.png \
        remove-color.svg \
     ticotico.jpg \
diff --git a/share/icons/application/16x16/Makefile.am b/share/icons/application/16x16/Makefile.am
new file mode 100644 (file)
index 0000000..a87c2cb
--- /dev/null
@@ -0,0 +1,5 @@
+icondir = $(datadir)/icons/hicolor/16x16/apps
+icon_DATA = inkscape.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/share/icons/application/16x16/inkscape.png b/share/icons/application/16x16/inkscape.png
new file mode 100644 (file)
index 0000000..e4aed92
Binary files /dev/null and b/share/icons/application/16x16/inkscape.png differ
diff --git a/share/icons/application/22x22/Makefile.am b/share/icons/application/22x22/Makefile.am
new file mode 100644 (file)
index 0000000..8beeed3
--- /dev/null
@@ -0,0 +1,5 @@
+icondir = $(datadir)/icons/hicolor/22x22/apps
+icon_DATA = inkscape.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/share/icons/application/22x22/inkscape.png b/share/icons/application/22x22/inkscape.png
new file mode 100644 (file)
index 0000000..b1adda0
Binary files /dev/null and b/share/icons/application/22x22/inkscape.png differ
diff --git a/share/icons/application/24x24/Makefile.am b/share/icons/application/24x24/Makefile.am
new file mode 100644 (file)
index 0000000..8fc9b59
--- /dev/null
@@ -0,0 +1,5 @@
+icondir = $(datadir)/icons/hicolor/24x24/apps
+icon_DATA = inkscape.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/share/icons/application/24x24/inkscape.png b/share/icons/application/24x24/inkscape.png
new file mode 100644 (file)
index 0000000..4c2cded
Binary files /dev/null and b/share/icons/application/24x24/inkscape.png differ
diff --git a/share/icons/application/256x256/Makefile.am b/share/icons/application/256x256/Makefile.am
new file mode 100644 (file)
index 0000000..34969a4
--- /dev/null
@@ -0,0 +1,5 @@
+icondir = $(datadir)/icons/hicolor/256x256/apps
+icon_DATA = inkscape.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/share/icons/application/256x256/inkscape.png b/share/icons/application/256x256/inkscape.png
new file mode 100644 (file)
index 0000000..76e07fb
Binary files /dev/null and b/share/icons/application/256x256/inkscape.png differ
diff --git a/share/icons/application/32x32/Makefile.am b/share/icons/application/32x32/Makefile.am
new file mode 100644 (file)
index 0000000..cdccebd
--- /dev/null
@@ -0,0 +1,5 @@
+icondir = $(datadir)/icons/hicolor/32x32/apps
+icon_DATA = inkscape.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/share/icons/application/32x32/inkscape.png b/share/icons/application/32x32/inkscape.png
new file mode 100644 (file)
index 0000000..aa445e4
Binary files /dev/null and b/share/icons/application/32x32/inkscape.png differ
diff --git a/share/icons/application/48x48/Makefile.am b/share/icons/application/48x48/Makefile.am
new file mode 100644 (file)
index 0000000..ffa5c1a
--- /dev/null
@@ -0,0 +1,5 @@
+icondir = $(datadir)/icons/hicolor/48x48/apps
+icon_DATA = inkscape.png
+
+EXTRA_DIST = $(icon_DATA)
+
diff --git a/share/icons/application/48x48/inkscape.png b/share/icons/application/48x48/inkscape.png
new file mode 100644 (file)
index 0000000..668acfd
Binary files /dev/null and b/share/icons/application/48x48/inkscape.png differ
diff --git a/share/icons/application/Makefile.am b/share/icons/application/Makefile.am
new file mode 100644 (file)
index 0000000..0e9bb7d
--- /dev/null
@@ -0,0 +1,15 @@
+SUBDIRS = 16x16 22x22 24x24 32x32 48x48 256x256
+
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
+
+install-data-hook: update-icon-cache
+uninstall-hook: update-icon-cache
+
+update-icon-cache:
+       @-if test -z "$(DESTDIR)"; then \
+       echo "Updating Gtk icon cache."; \
+       $(gtk_update_icon_cache); \
+       else \
+       echo "*** Icon cache not updated. After (un)install, run this:"; \
+       echo "*** $(gtk_update_icon_cache)"; \
+       fi 
diff --git a/share/icons/color-management-icon.png b/share/icons/color-management-icon.png
new file mode 100644 (file)
index 0000000..469ccd7
Binary files /dev/null and b/share/icons/color-management-icon.png differ
diff --git a/share/icons/out-of-gamut-icon.png b/share/icons/out-of-gamut-icon.png
new file mode 100644 (file)
index 0000000..1e96a95
Binary files /dev/null and b/share/icons/out-of-gamut-icon.png differ
diff --git a/share/icons/out-of-gamut-icon.svg b/share/icons/out-of-gamut-icon.svg
new file mode 100644 (file)
index 0000000..4fb1711
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   width="249.50522"
+   height="249.50523"
+   id="svg2">
+  <defs
+     id="defs4" />
+  <g
+     transform="translate(-218.10454,-476.18098)"
+     id="layer1">
+    <path
+       d="m 462.85715,600.93359 c 0,66.27417 -53.72583,120 -120,120 -66.27417,0 -120,-53.72583 -120,-120 0,-66.27417 53.72583,-120 120,-120 66.27417,0 120,53.72583 120,120 z m 182.9912,0 c 0,167.33742 -135.65378,302.99121 -302.9912,302.99121 -167.33743,0 -302.991208,-135.65379 -302.991208,-302.99121 0,-167.33742 135.653778,-302.9912 302.991208,-302.9912 167.33742,0 302.9912,135.65378 302.9912,302.9912 z"
+       transform="matrix(0.3960511,0,0,0.3960511,207.0682,362.93318)"
+       id="path2818"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/share/icons/too-much-ink-icon.png b/share/icons/too-much-ink-icon.png
new file mode 100644 (file)
index 0000000..14fed03
Binary files /dev/null and b/share/icons/too-much-ink-icon.png differ
diff --git a/share/icons/too-much-ink-icon.svg b/share/icons/too-much-ink-icon.svg
new file mode 100644 (file)
index 0000000..a2f6884
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="249.50522"
+   height="249.50523"
+   id="svg2"
+   inkscape:version="0.47+devel"
+   sodipodi:docname="too-much-ink-icon.svg"
+   inkscape:export-filename="/home/felipe/devel/bzr-inkscape/inkscape/share/icons/too-much-ink-icon.png"
+   inkscape:export-xdpi="5.6999998"
+   inkscape:export-ydpi="5.6999998">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1024"
+     inkscape:window-height="693"
+     id="namedview6"
+     showgrid="false"
+     inkscape:zoom="0.33866729"
+     inkscape:cx="194.49558"
+     inkscape:cy="191.55723"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 124.75262 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="249.50522 : 124.75262 : 1"
+       inkscape:persp3d-origin="124.75261 : 83.168411 : 1"
+       id="perspective10" />
+  </defs>
+  <g
+     transform="translate(-218.10454,-476.18098)"
+     id="layer1" />
+  <path
+     id="path2988"
+     style="fill:#200e13;fill-opacity:0.96862745;fill-rule:evenodd;stroke:#20241d;stroke-width:5.49399996000000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+     d="m 44.205845,53.627099 c 6.538205,8.776404 7.179182,14.929511 7.184639,20.799914 0.0043,4.681179 -10.770356,1.897693 -15.869168,-0.2132 -7.694024,-3.185304 -15.824487,-9.784438 -17.689511,-16.915388 -1.158352,-4.428985 0.749479,-10.229203 5.19903,-11.623732 6.495074,-2.035617 16.872258,2.176709 21.17501,7.952406 z M 30.008964,205.99522 c 9.10047,-17.44806 19.580437,-23.91826 30.209061,-29.20542 8.475488,-4.21608 14.636139,14.03423 16.113709,23.38441 2.229628,14.10927 -1.271148,31.92641 -12.249789,41.06491 -6.81876,5.67586 -19.309578,8.10365 -26.46219,2.85474 -10.440776,-7.6619 -13.599752,-26.61618 -7.610791,-38.09864 z M 173.64367,123.09593 c 1.4357,-39.91444 54.53677,19.12723 69.59235,-3.63891 8.93961,-13.51796 5.32456,-38.561425 -7.86464,-47.97932 -9.68684,-6.916994 -50.66722,5.557227 -60.7695,-0.737512 -18.8117,-11.721606 7.93318,-34.929939 -8.70266,-49.576607 -24.86167,-21.88894402 -44.62485,-21.29438502 -68.539321,1.625623 -15.178156,14.546991 10.871641,22.047341 3.192441,41.61827 -10.607154,27.033004 -39.063593,8.120474 -45.546174,36.427236 -4.104651,17.9233 1.357147,48.93421 19.081937,53.82552 13.316852,3.6749 13.818475,-22.5941 38.882527,-4.90635 25.06405,17.68776 4.4552,41.49178 10.10048,65.11007 5.64529,23.61827 22.84904,17.71636 35.42061,15.11786 15.97666,-3.30232 11.12595,-30.4217 33.70881,-33.39655 22.58287,-2.97487 16.69776,21.8648 41.58646,-0.63804 41.60195,-37.61392 -49.85797,-50.12848 -60.14333,-72.85127 l 10e-6,-2e-5 z" />
+</svg>
index b2d5ceabb7a79d63f275f6805f6377e69c1c2c77..2e4eba519c77c18b1e35a4b18d4657f017a9434c 100644 (file)
@@ -41,16 +41,16 @@ int winding(Path const &path, Point p) {
     starting = false;
     Rect bounds = *(iter->boundsFast());
     Coord x = p[X], y = p[Y];
-    
+
     if(x > bounds.right() || !bounds[Y].contains(y)) continue; //ray doesn't intersect box
-    
+
     Point final = iter->finalPoint();
     Point initial = iter->initialPoint();
     Cmp final_to_ray = cmp(final[Y], y);
     Cmp initial_to_ray = cmp(initial[Y], y);
-    
+
     // if y is included, these will have opposite values, giving order.
-    Cmp c = cmp(final_to_ray, initial_to_ray); 
+    Cmp c = cmp(final_to_ray, initial_to_ray);
     if(x < bounds.left()) {
         // ray goes through bbox
         // winding delta determined by position of endpoints
@@ -100,7 +100,7 @@ int winding(Path const &path, Point p) {
         //Looks like it looped, which means everything's flat
         return 0;
     }
-    
+
     cont:(void)0;
   }
   return wind;
@@ -118,7 +118,7 @@ bool path_direction(Path const &p) {
     double x = p.initialPoint()[X];
     Cmp res = cmp(p[0].finalPoint()[Y], y);
     goto doh;
-    for(unsigned i = 1; i <= p.size(); i++) {
+    for(unsigned i = 1; i < p.size(); i++) {
         Cmp final_to_ray = cmp(p[i].finalPoint()[Y], y);
         Cmp initial_to_ray = cmp(p[i].initialPoint()[Y], y);
         // if y is included, these will have opposite values, giving order.
@@ -135,10 +135,10 @@ bool path_direction(Path const &p) {
         } else if(final_to_ray == EQUAL_TO) goto doh;
     }
     return res < 0;
-    
+
     doh:
         //Otherwise fallback on area
-        
+
         Piecewise<D2<SBasis> > pw = p.toPwSb();
         double area;
         Point centre;
@@ -214,36 +214,34 @@ intersect_polish_f (const gsl_vector * x, void *params,
 {
     const double x0 = gsl_vector_get (x, 0);
     const double x1 = gsl_vector_get (x, 1);
-     
-    Geom::Point dx = ((struct rparams *) params)->A(x0) - 
+
+    Geom::Point dx = ((struct rparams *) params)->A(x0) -
         ((struct rparams *) params)->B(x1);
-     
+
     gsl_vector_set (f, 0, dx[0]);
     gsl_vector_set (f, 1, dx[1]);
-     
+
     return GSL_SUCCESS;
 }
 #endif
 
-static void 
+static void
 intersect_polish_root (Curve const &A, double &s,
                        Curve const &B, double &t) {
-    int status;
-    size_t iter = 0;
     std::vector<Point> as, bs;
     as = A.pointAndDerivatives(s, 2);
     bs = B.pointAndDerivatives(t, 2);
     Point F = as[0] - bs[0];
     double best = dot(F, F);
-    
+
     for(int i = 0; i < 4; i++) {
-        
+
         /**
            we want to solve
            J*(x1 - x0) = f(x0)
-           
+
            |dA(s)[0]  -dB(t)[0]|  (X1 - X0) = A(s) - B(t)
-           |dA(s)[1]  -dB(t)[1]| 
+           |dA(s)[1]  -dB(t)[1]|
         **/
 
         // We're using the standard transformation matricies, which is numerically rather poor.  Much better to solve the equation using elimination.
@@ -259,7 +257,7 @@ intersect_polish_root (Curve const &A, double &s,
         else if (ns>1) ns=1;
         if (nt<0) nt=0;
         else if (nt>1) nt=1;
-        
+
         as = A.pointAndDerivatives(ns, 2);
         bs = B.pointAndDerivatives(nt, 2);
         F = as[0] - bs[0];
@@ -277,33 +275,35 @@ intersect_polish_root (Curve const &A, double &s,
         const size_t n = 2;
         struct rparams p = {A, B};
         gsl_multiroot_function f = {&intersect_polish_f, n, &p};
-     
+
         double x_init[2] = {s, t};
         gsl_vector *x = gsl_vector_alloc (n);
-     
+
         gsl_vector_set (x, 0, x_init[0]);
         gsl_vector_set (x, 1, x_init[1]);
-     
+
         const gsl_multiroot_fsolver_type *T = gsl_multiroot_fsolver_hybrids;
         gsl_multiroot_fsolver *sol = gsl_multiroot_fsolver_alloc (T, 2);
         gsl_multiroot_fsolver_set (sol, &f, x);
-     
+
+        int status = 0;
+        size_t iter = 0;
         do
         {
             iter++;
             status = gsl_multiroot_fsolver_iterate (sol);
-     
+
             if (status)   /* check if solver is stuck */
                 break;
-     
+
             status =
                 gsl_multiroot_test_residual (sol->f, 1e-12);
         }
         while (status == GSL_CONTINUE && iter < 1000);
-    
+
         s = gsl_vector_get (sol->x, 0);
         t = gsl_vector_get (sol->x, 1);
-    
+
         gsl_multiroot_fsolver_free (sol);
         gsl_vector_free (x);
     }
@@ -315,7 +315,7 @@ intersect_polish_root (Curve const &A, double &s,
  * It passes in the curves, time intervals, and keeps track of depth, while
  * returning the results through the Crossings parameter.
  */
-void pair_intersect(Curve const & A, double Al, double Ah, 
+void pair_intersect(Curve const & A, double Al, double Ah,
                     Curve const & B, double Bl, double Bh,
                     Crossings &ret,  unsigned depth = 0) {
    // std::cout << depth << "(" << Al << ", " << Ah << ")\n";
@@ -324,15 +324,15 @@ void pair_intersect(Curve const & A, double Al, double Ah,
 
     OptRect Br = B.boundsLocal(Interval(Bl, Bh));
     if (!Br) return;
-    
+
     if(! Ar->intersects(*Br)) return;
-    
+
     //Checks the general linearity of the function
-    if((depth > 12)) { // || (A.boundsLocal(Interval(Al, Ah), 1).maxExtent() < 0.1 
+    if((depth > 12)) { // || (A.boundsLocal(Interval(Al, Ah), 1).maxExtent() < 0.1
                     //&&  B.boundsLocal(Interval(Bl, Bh), 1).maxExtent() < 0.1)) {
         double tA, tB, c;
-        if(linear_intersect(A.pointAt(Al), A.pointAt(Ah), 
-                            B.pointAt(Bl), B.pointAt(Bh), 
+        if(linear_intersect(A.pointAt(Al), A.pointAt(Ah),
+                            B.pointAt(Bl), B.pointAt(Bh),
                             tA, tB, c)) {
             tA = tA * (Ah - Al) + Al;
             tB = tB * (Bh - Bl) + Bl;
@@ -385,8 +385,8 @@ void mono_intersect(Curve const &A, double Al, double Ah,
 
     if(depth > 12 || (Ar.maxExtent() < tol && Ar.maxExtent() < tol)) {
         double tA, tB, c;
-        if(linear_intersect(A.pointAt(Al), A.pointAt(Ah), 
-                            B.pointAt(Bl), B.pointAt(Bh), 
+        if(linear_intersect(A.pointAt(Al), A.pointAt(Ah),
+                            B.pointAt(Bl), B.pointAt(Bh),
                             tA, tB, c)) {
             tA = tA * (Ah - Al) + Al;
             tB = tB * (Bh - Bl) + Bl;
@@ -483,9 +483,9 @@ std::vector<double> offset_doubles(std::vector<double> const &x, double offs) {
 std::vector<double> path_mono_splits(Path const &p) {
     std::vector<double> ret;
     if(p.empty()) return ret;
-    
+
     bool pdx=2, pdy=2;  //Previous derivative direction
-    for(unsigned i = 0; i <= p.size(); i++) {
+    for(unsigned i = 0; i < p.size(); i++) {
         std::vector<double> spl = offset_doubles(curve_mono_splits(p[i]), i);
         bool dx = p[i].initialPoint()[X] > (spl.empty()? p[i].finalPoint()[X] :
                                                          p.valueAt(spl.front(), X));
@@ -502,7 +502,7 @@ std::vector<double> path_mono_splits(Path const &p) {
 }
 
 /**
- * Applies path_mono_splits to multiple paths, and returns the results such that 
+ * Applies path_mono_splits to multiple paths, and returns the results such that
  * time-set i corresponds to Path i.
  */
 std::vector<std::vector<double> > paths_mono_splits(std::vector<Path> const &ps) {
@@ -541,14 +541,14 @@ CrossingSet MonoCrosser::crossings(std::vector<Path> const &a, std::vector<Path>
     if(b.empty()) return CrossingSet(a.size(), Crossings());
     CrossingSet results(a.size() + b.size(), Crossings());
     if(a.empty()) return results;
-    
+
     std::vector<std::vector<double> > splits_a = paths_mono_splits(a), splits_b = paths_mono_splits(b);
     std::vector<std::vector<Rect> > bounds_a = split_bounds(a, splits_a), bounds_b = split_bounds(b, splits_b);
-    
-    std::vector<Rect> bounds_a_union, bounds_b_union; 
+
+    std::vector<Rect> bounds_a_union, bounds_b_union;
     for(unsigned i = 0; i < bounds_a.size(); i++) bounds_a_union.push_back(union_list(bounds_a[i]));
     for(unsigned i = 0; i < bounds_b.size(); i++) bounds_b_union.push_back(union_list(bounds_b[i]));
-    
+
     std::vector<std::vector<unsigned> > cull = sweep_bounds(bounds_a_union, bounds_b_union);
     Crossings n;
     for(unsigned i = 0; i < cull.size(); i++) {
@@ -556,7 +556,7 @@ CrossingSet MonoCrosser::crossings(std::vector<Path> const &a, std::vector<Path>
             unsigned j = cull[i][jx];
             unsigned jc = j + a.size();
             Crossings res;
-            
+
             //Sweep of the monotonic portions
             std::vector<std::vector<unsigned> > cull2 = sweep_bounds(bounds_a[i], bounds_b[j]);
             for(unsigned k = 0; k < cull2.size(); k++) {
@@ -567,9 +567,9 @@ CrossingSet MonoCrosser::crossings(std::vector<Path> const &a, std::vector<Path>
                               res, .1);
                 }
             }
-            
+
             for(unsigned k = 0; k < res.size(); k++) { res[k].a = i; res[k].b = jc; }
-            
+
             merge_crossings(results[i], res, i);
             merge_crossings(results[i], res, jc);
         }
@@ -583,22 +583,22 @@ CrossingSet MonoCrosser::crossings(std::vector<Path> const &a, std::vector<Path>
 CrossingSet crossings_among(std::vector<Path> const &p) {
     CrossingSet results(p.size(), Crossings());
     if(p.empty()) return results;
-    
+
     std::vector<std::vector<double> > splits = paths_mono_splits(p);
     std::vector<std::vector<Rect> > prs = split_bounds(p, splits);
     std::vector<Rect> rs;
     for(unsigned i = 0; i < prs.size(); i++) rs.push_back(union_list(prs[i]));
-    
+
     std::vector<std::vector<unsigned> > cull = sweep_bounds(rs);
-    
+
     //we actually want to do the self-intersections, so add em in:
     for(unsigned i = 0; i < cull.size(); i++) cull[i].push_back(i);
-    
+
     for(unsigned i = 0; i < cull.size(); i++) {
         for(unsigned jx = 0; jx < cull[i].size(); jx++) {
             unsigned j = cull[i][jx];
             Crossings res;
-            
+
             //Sweep of the monotonic portions
             std::vector<std::vector<unsigned> > cull2 = sweep_bounds(prs[i], prs[j]);
             for(unsigned k = 0; k < cull2.size(); k++) {
@@ -609,14 +609,14 @@ CrossingSet crossings_among(std::vector<Path> const &p) {
                               res, .1);
                 }
             }
-            
+
             for(unsigned k = 0; k < res.size(); k++) { res[k].a = i; res[k].b = j; }
-            
+
             merge_crossings(results[i], res, i);
             merge_crossings(results[j], res, j);
         }
     }
-    
+
     return results;
 }
 */
@@ -635,7 +635,7 @@ Crossings curve_self_crossings(Curve const &a) {
 }
 
 /*
-void mono_curve_intersect(Curve const & A, double Al, double Ah, 
+void mono_curve_intersect(Curve const & A, double Al, double Ah,
                           Curve const & B, double Bl, double Bh,
                           Crossings &ret,  unsigned depth=0) {
    // std::cout << depth << "(" << Al << ", " << Ah << ")\n";
@@ -643,9 +643,9 @@ void mono_curve_intersect(Curve const & A, double Al, double Ah,
           B0 = B.pointAt(Bl), B1 = B.pointAt(Bh);
     //inline code that this implies? (without rect/interval construction)
     if(!Rect(A0, A1).intersects(Rect(B0, B1)) || A0 == A1 || B0 == B1) return;
-     
+
     //Checks the general linearity of the function
-    if((depth > 12) || (A.boundsLocal(Interval(Al, Ah), 1).maxExtent() < 0.1 
+    if((depth > 12) || (A.boundsLocal(Interval(Al, Ah), 1).maxExtent() < 0.1
                     &&  B.boundsLocal(Interval(Bl, Bh), 1).maxExtent() < 0.1)) {
         double tA, tB, c;
         if(linear_intersect(A0, A1, B0, B1, tA, tB, c)) {
@@ -705,7 +705,7 @@ Crossings path_self_crossings(Path const &p) {
         for(unsigned jx = 0; jx < cull[i].size(); jx++) {
             unsigned j = cull[i][jx];
             res.clear();
-            
+
             std::vector<std::vector<unsigned> > cull2 = sweep_bounds(bnds[i], bnds[j]);
             for(unsigned k = 0; k < cull2.size(); k++) {
                 for(unsigned lx = 0; lx < cull2[k].size(); lx++) {
@@ -713,7 +713,7 @@ Crossings path_self_crossings(Path const &p) {
                     mono_curve_intersect(p[i], spl[i][k-1], spl[i][k], p[j], spl[j][l-1], spl[j][l], res);
                 }
             }
-            
+
             //if(fabs(int(i)-j) == 1 || fabs(int(i)-j) == p.size()-1) {
                 Crossings res2;
                 for(unsigned k = 0; k < res.size(); k++) {
@@ -742,7 +742,7 @@ Crossings self_crossings(Path const &p) {
             unsigned j = cull[i][jx];
             res.clear();
             pair_intersect(p[i], 0, 1, p[j], 0, 1, res);
-            
+
             //if(fabs(int(i)-j) == 1 || fabs(int(i)-j) == p.size()-1) {
                 Crossings res2;
                 for(unsigned k = 0; k < res.size(); k++) {
@@ -767,9 +767,9 @@ void flip_crossings(Crossings &crs) {
 CrossingSet crossings_among(std::vector<Path> const &p) {
     CrossingSet results(p.size(), Crossings());
     if(p.empty()) return results;
-    
+
     SimpleCrosser cc;
-    
+
     std::vector<std::vector<unsigned> > cull = sweep_bounds(bounds(p));
     for(unsigned i = 0; i < cull.size(); i++) {
         Crossings res = self_crossings(p[i]);
@@ -779,7 +779,7 @@ CrossingSet crossings_among(std::vector<Path> const &p) {
         merge_crossings(results[i], res, i);
         for(unsigned jx = 0; jx < cull[i].size(); jx++) {
             unsigned j = cull[i][jx];
-            
+
             Crossings res = cc.crossings(p[i], p[j]);
             for(unsigned k = 0; k < res.size(); k++) { res[k].a = i; res[k].b = j; }
             merge_crossings(results[i], res, i);
index da49187bacb5dd840bb07828e54ada293a3e9c6c..b32889f65278492e839a2153b9ddd4eb3a3d0d3e 100644 (file)
@@ -271,6 +271,7 @@ CXXTEST_TESTSUITES +=                       \
        $(srcdir)/color-profile-test.h  \
        $(srcdir)/dir-util-test.h       \
        $(srcdir)/extract-uri-test.h    \
+       $(srcdir)/marker-test.h         \
        $(srcdir)/mod360-test.h         \
        $(srcdir)/round-test.h          \
        $(srcdir)/preferences-test.h    \
index f7022584f73624bfa6a28a9603369856afd9632d..6dc8c9a9bb2b24d1615c0f3abfbd1a03d57f2a5d 100644 (file)
@@ -1010,6 +1010,7 @@ bool JavaBinderyImpl::callStatic(int type,
             default:
                 {
                 err("Unknown value type: %d", v.getType());
+                delete [] jvals;
                 return false;
                 }
             }
@@ -1057,7 +1058,7 @@ bool JavaBinderyImpl::callStatic(int type,
             return false;
             }
         }
-    delete jvals;
+    delete [] jvals;
     String errStr = getException();
     if (errStr.size()>0)
         {
@@ -1131,6 +1132,7 @@ bool JavaBinderyImpl::callInstance(
             default:
                 {
                 err("Unknown value type: %d", v.getType());
+                delete [] jvals;
                 return false;
                 }
             }
@@ -1178,7 +1180,7 @@ bool JavaBinderyImpl::callInstance(
             return false;
             }
         }
-    delete jvals;
+    delete [] jvals;
     String errStr = getException();
     if (errStr.size()>0)
         {
index e3476deb3a00aec82ab547d3c56a08e73a504fd0..c8fbfa8779ff27500679337568fa9df97b53de25 100644 (file)
@@ -123,16 +123,17 @@ static void sp_box3d_context_init(Box3DContext *box3d_context)
 
 static void sp_box3d_context_finish(SPEventContext *ec)
 {
-       Box3DContext *bc = SP_BOX3D_CONTEXT(ec);
-       SPDesktop *desktop = ec->desktop;
+    Box3DContext *bc = SP_BOX3D_CONTEXT(ec);
+    SPDesktop *desktop = ec->desktop;
 
-       sp_canvas_item_ungrab(SP_CANVAS_ITEM(desktop->acetate), GDK_CURRENT_TIME);
-       sp_box3d_finish(bc);
+    sp_canvas_item_ungrab(SP_CANVAS_ITEM(desktop->acetate), GDK_CURRENT_TIME);
+    sp_box3d_finish(bc);
     bc->sel_changed_connection.disconnect();
+//    sp_repr_remove_listener_by_data(cc->active_shape_repr, cc);
 
     if (((SPEventContextClass *) parent_class)->finish) {
-               ((SPEventContextClass *) parent_class)->finish(ec);
-       }
+        ((SPEventContextClass *) parent_class)->finish(ec);
+    }
 }
 
 
@@ -179,13 +180,14 @@ static void sp_box3d_context_selection_changed(Inkscape::Selection *selection, g
 
     if (selection->perspList().size() == 1) {
         // selecting a single box changes the current perspective
-        ec->desktop->doc()->current_persp3d = selection->perspList().front();
+        ec->desktop->doc()->setCurrentPersp3D(selection->perspList().front());
     }
 }
 
-/* create a default perspective in document defs if none is present
-   (can happen after 'vacuum defs' or when a pre-0.46 file is opened) */
-static void sp_box3d_context_check_for_persp_in_defs(SPDocument *document) {
+/* Create a default perspective in document defs if none is present (which can happen, among other
+ * circumstances, after 'vacuum defs' or when a pre-0.46 file is opened).
+ */
+static void sp_box3d_context_ensure_persp_in_defs(SPDocument *document) {
     SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
 
     bool has_persp = false;
@@ -197,7 +199,7 @@ static void sp_box3d_context_check_for_persp_in_defs(SPDocument *document) {
     }
 
     if (!has_persp) {
-        document->current_persp3d = persp3d_create_xml_element (document);
+        document->setCurrentPersp3D(persp3d_create_xml_element (document));
     }
 }
 
@@ -209,8 +211,6 @@ static void sp_box3d_context_setup(SPEventContext *ec)
         ((SPEventContextClass *) parent_class)->setup(ec);
     }
 
-    sp_box3d_context_check_for_persp_in_defs(sp_desktop_document (ec->desktop));
-
     ec->shape_editor = new ShapeEditor(ec->desktop);
 
     SPItem *item = sp_desktop_selection(ec->desktop)->singleItem();
@@ -267,13 +267,13 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
     static bool dragging;
 
     SPDesktop *desktop = event_context->desktop;
+    SPDocument *document = sp_desktop_document (desktop);
     Inkscape::Selection *selection = sp_desktop_selection (desktop);
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     int const snaps = prefs->getInt("/options/rotationsnapsperpi/value", 12);
 
     Box3DContext *bc = SP_BOX3D_CONTEXT(event_context);
-    g_assert (SP_ACTIVE_DOCUMENT->current_persp3d);
-    Persp3D *cur_persp = SP_ACTIVE_DOCUMENT->current_persp3d;
+    Persp3D *cur_persp = document->getCurrentPersp3D();
 
     event_context->tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
 
@@ -300,8 +300,14 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
             bc->drag_ptB = from_2geom(button_dt);
             bc->drag_ptC = from_2geom(button_dt);
 
+            // This can happen after saving when the last remaining perspective was purged and must be recreated.
+            if (!cur_persp) {
+                sp_box3d_context_ensure_persp_in_defs(document);
+                cur_persp = document->getCurrentPersp3D();
+            }
+
             /* Projective preimages of clicked point under current perspective */
-            bc->drag_origin_proj = cur_persp->tmat.preimage (from_2geom(button_dt), 0, Proj::Z);
+            bc->drag_origin_proj = cur_persp->perspective_impl->tmat.preimage (from_2geom(button_dt), 0, Proj::Z);
             bc->drag_ptB_proj = bc->drag_origin_proj;
             bc->drag_ptC_proj = bc->drag_origin_proj;
             bc->drag_ptC_proj.normalize();
@@ -355,7 +361,7 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
                bc->drag_ptB = from_2geom(motion_dt);
                bc->drag_ptC = from_2geom(motion_dt);
 
-                bc->drag_ptB_proj = cur_persp->tmat.preimage (from_2geom(motion_dt), 0, Proj::Z);
+                bc->drag_ptB_proj = cur_persp->perspective_impl->tmat.preimage (from_2geom(motion_dt), 0, Proj::Z);
                 bc->drag_ptC_proj = bc->drag_ptB_proj;
                 bc->drag_ptC_proj.normalize();
                 bc->drag_ptC_proj[Proj::Z] = 0.25;
@@ -364,16 +370,16 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
                 // perspective line from drag_ptB to vanishing point Y.
                 if (!bc->ctrl_dragged) {
                     /* snapping */
-                    Box3D::PerspectiveLine pline (bc->drag_ptB, Proj::Z, SP_ACTIVE_DOCUMENT->current_persp3d);
+                    Box3D::PerspectiveLine pline (bc->drag_ptB, Proj::Z, document->getCurrentPersp3D());
                     bc->drag_ptC = pline.closest_to (from_2geom(motion_dt));
 
                     bc->drag_ptB_proj.normalize();
-                    bc->drag_ptC_proj = cur_persp->tmat.preimage (bc->drag_ptC, bc->drag_ptB_proj[Proj::X], Proj::X);
+                    bc->drag_ptC_proj = cur_persp->perspective_impl->tmat.preimage (bc->drag_ptC, bc->drag_ptB_proj[Proj::X], Proj::X);
                 } else {
                     bc->drag_ptC = from_2geom(motion_dt);
 
                     bc->drag_ptB_proj.normalize();
-                    bc->drag_ptC_proj = cur_persp->tmat.preimage (from_2geom(motion_dt), bc->drag_ptB_proj[Proj::X], Proj::X);
+                    bc->drag_ptC_proj = cur_persp->perspective_impl->tmat.preimage (from_2geom(motion_dt), bc->drag_ptB_proj[Proj::X], Proj::X);
                 }
                 Geom::Point pt2g = to_2geom(bc->drag_ptC);
                 m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, pt2g, Inkscape::SNAPSOURCE_HANDLE);
@@ -424,43 +430,43 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
             break;
 
         case GDK_bracketright:
-            persp3d_rotate_VP (inkscape_active_document()->current_persp3d, Proj::X, -180/snaps, MOD__ALT);
-            sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX,
+            persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::X, -180/snaps, MOD__ALT);
+            sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
                              _("Change perspective (angle of PLs)"));
             ret = true;
             break;
 
         case GDK_bracketleft:
-            persp3d_rotate_VP (inkscape_active_document()->current_persp3d, Proj::X, 180/snaps, MOD__ALT);
-            sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX,
+            persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::X, 180/snaps, MOD__ALT);
+            sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
                              _("Change perspective (angle of PLs)"));
             ret = true;
             break;
 
         case GDK_parenright:
-            persp3d_rotate_VP (inkscape_active_document()->current_persp3d, Proj::Y, -180/snaps, MOD__ALT);
-            sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX,
+            persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::Y, -180/snaps, MOD__ALT);
+            sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
                              _("Change perspective (angle of PLs)"));
             ret = true;
             break;
 
         case GDK_parenleft:
-            persp3d_rotate_VP (inkscape_active_document()->current_persp3d, Proj::Y, 180/snaps, MOD__ALT);
-            sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX,
+            persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::Y, 180/snaps, MOD__ALT);
+            sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
                              _("Change perspective (angle of PLs)"));
             ret = true;
             break;
 
         case GDK_braceright:
-            persp3d_rotate_VP (inkscape_active_document()->current_persp3d, Proj::Z, -180/snaps, MOD__ALT);
-            sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX,
+            persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::Z, -180/snaps, MOD__ALT);
+            sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
                              _("Change perspective (angle of PLs)"));
             ret = true;
             break;
 
         case GDK_braceleft:
-            persp3d_rotate_VP (inkscape_active_document()->current_persp3d, Proj::Z, 180/snaps, MOD__ALT);
-            sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX,
+            persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::Z, 180/snaps, MOD__ALT);
+            sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
                              _("Change perspective (angle of PLs)"));
             ret = true;
             break;
@@ -468,7 +474,7 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
         /* TODO: what is this???
         case GDK_O:
             if (MOD__CTRL && MOD__SHIFT) {
-                Box3D::create_canvas_point(persp3d_get_VP(inkscape_active_document()->current_persp3d, Proj::W).affine(),
+                Box3D::create_canvas_point(persp3d_get_VP(document()->getCurrentPersp3D(), Proj::W).affine(),
                                            6, 0xff00ff00);
             }
             ret = true;
@@ -483,6 +489,16 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
             }
             break;
 
+        case GDK_p:
+        case GDK_P:
+            if (MOD__SHIFT_ONLY) {
+                if (document->getCurrentPersp3D()) {
+                    persp3d_print_debugging_info (document->getCurrentPersp3D());
+                }
+                ret = true;
+            }
+            break;
+
         case GDK_x:
         case GDK_X:
             if (MOD__ALT_ONLY) {
@@ -598,7 +614,7 @@ static void sp_box3d_drag(Box3DContext &bc, guint /*state*/)
 
         // TODO: It would be nice to show the VPs during dragging, but since there is no selection
         //       at this point (only after finishing the box), we must do this "manually"
-        /**** bc._vpdrag->updateDraggers(); ****/
+        /* bc._vpdrag->updateDraggers(); */
 
         sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 5);
     }
@@ -631,7 +647,7 @@ static void sp_box3d_finish(Box3DContext *bc)
     if ( bc->item != NULL ) {
         SPDesktop * desktop = SP_EVENT_CONTEXT_DESKTOP(bc);
         SPDocument *doc = sp_desktop_document(desktop);
-        if (!doc || !doc->current_persp3d)
+        if (!doc || !doc->getCurrentPersp3D())
             return;
 
         SPBox3D *box = SP_BOX3D(bc->item);
index 93efa5c35183589ea7e604066d7afb9d93e8b52d..aa2dc55e36cad3b833b26d9c1a17108f68d68c13 100644 (file)
@@ -127,10 +127,8 @@ box3d_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
     // TODO: Create/link to the correct perspective
 
     SPDocument *doc = SP_OBJECT_DOCUMENT(box);
-    if (!doc) {
-        g_print ("No document for the box!!!!\n");
+    if (!doc)
         return;
-    }
 
     box->persp_ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(box3d_ref_changed), box));
 
@@ -150,13 +148,33 @@ box3d_release(SPObject *object)
     if (box->persp_href) {
         g_free(box->persp_href);
     }
+
+    // We have to store this here because the Persp3DReference gets destroyed below, but we need to
+    // access it to call persp3d_remove_box(), which cannot be called earlier because the reference
+    // needs to be destroyed first.
+    Persp3D *persp = box3d_get_perspective(box);
+
     if (box->persp_ref) {
         box->persp_ref->detach();
         delete box->persp_ref;
         box->persp_ref = NULL;
     }
 
-    //persp3d_remove_box (box3d_get_perspective(box), box);
+    if (persp) {
+        persp3d_remove_box (persp, box);
+        /*
+        // TODO: This deletes a perspective when the last box referring to it is gone. Eventually,
+        // it would be nice to have this but currently it crashes when undoing/redoing box deletion
+        // Reason: When redoing a box deletion, the associated perspective is deleted twice, first
+        // by the following code and then again by the redo mechanism! Perhaps we should perform
+        // deletion of the perspective from another location "outside" the undo/redo mechanism?
+        if (persp->perspective_impl->boxes.empty()) {
+            SPDocument *doc = SP_OBJECT_DOCUMENT(box);
+            persp->deleteObject();
+            doc->setCurrentPersp3D(persp3d_document_first_persp(doc));
+        }
+        */
+    }
 
     if (((SPObjectClass *) parent_class)->release)
         ((SPObjectClass *) parent_class)->release(object);
@@ -226,16 +244,10 @@ box3d_ref_changed(SPObject *old_ref, SPObject *ref, SPBox3D *box)
     if (old_ref) {
         sp_signal_disconnect_by_data(old_ref, box);
         persp3d_remove_box (SP_PERSP3D(old_ref), box);
-        /* Note: This sometimes leads to attempts to remove boxes twice from the list of selected/transformed
-           boxes in a perspectives, but this should be uncritical. */
-        persp3d_remove_box_transform (SP_PERSP3D(old_ref), box);
     }
     if ( SP_IS_PERSP3D(ref) && ref != box ) // FIXME: Comparisons sane?
     {
         persp3d_add_box (SP_PERSP3D(ref), box);
-        /* Note: This sometimes leads to attempts to add boxes twice to the list of selected/transformed
-           boxes in a perspectives, but this should be uncritical. */
-        persp3d_add_box_transform (SP_PERSP3D(ref), box);
     }
 }
 
@@ -278,7 +290,7 @@ static Inkscape::XML::Node *box3d_write(SPObject *object, Inkscape::XML::Documen
                 repr->setAttribute("inkscape:perspectiveID", uri_string);
                 g_free(uri_string);
             } else {
-                Inkscape::XML::Node *persp_repr = SP_OBJECT_REPR(doc->current_persp3d);
+                Inkscape::XML::Node *persp_repr = SP_OBJECT_REPR(doc->getCurrentPersp3D());
                 const gchar *persp_id = persp_repr->attribute("id");
                 gchar *href = g_strdup_printf("#%s", persp_id);
                 repr->setAttribute("inkscape:perspectiveID", href);
@@ -331,37 +343,8 @@ box3d_set_transform(SPItem *item, Geom::Matrix const &xform)
 {
     SPBox3D *box = SP_BOX3D(item);
 
-    /* check whether we need to unlink any boxes from their perspectives */
-    Persp3D *persp = box3d_get_perspective(box);
-    Persp3D *transf_persp;
-
-    if (sp_desktop_document(inkscape_active_desktop()) == SP_OBJECT_DOCUMENT(item) && 
-        !persp3d_has_all_boxes_in_selection (persp)) {
-        std::list<SPBox3D *> selboxes = sp_desktop_selection(inkscape_active_desktop())->box3DList();
-
-        /* create a new perspective as a copy of the current one and link the selected boxes to it */
-        transf_persp = persp3d_create_xml_element (SP_OBJECT_DOCUMENT(persp), persp);
-
-        for (std::list<SPBox3D *>::iterator b = selboxes.begin(); b != selboxes.end(); ++b) {
-            box3d_switch_perspectives(*b, persp, transf_persp);
-        }
-    } else {
-        transf_persp = persp;
-    }
-
-    /* only transform the perspective once, even if it has several selected boxes */
-    if(!persp3d_was_transformed (transf_persp)) {
-        /* concatenate the affine transformation with the perspective mapping; this
-           function also triggers repr updates of boxes and the perspective itself */
-        persp3d_apply_affine_transformation(transf_persp, xform);
-    }
-
-    box3d_mark_transformed(box);
-
-    if (persp3d_all_transformed(transf_persp)) {
-        /* all boxes were transformed; make perspective sensitive for further transformations */
-        persp3d_unset_transforms(transf_persp);
-    }
+    // We don't apply the transform to the box directly but instead to its perspective (which is
+    // done in sp_selection_apply_affine). Here we only adjust strokes, patterns, etc.
 
     Geom::Matrix ret(Geom::Matrix(xform).without_translation());
     gdouble const sw = hypot(ret[0], ret[1]);
@@ -412,9 +395,9 @@ box3d_get_corner_screen (SPBox3D const *box, guint id, bool item_coords) {
     }
     Geom::Matrix const i2d (sp_item_i2d_affine (SP_ITEM(box)));
     if (item_coords) {
-        return box3d_get_perspective(box)->tmat.image(proj_corner).affine() * i2d.inverse();
+        return box3d_get_perspective(box)->perspective_impl->tmat.image(proj_corner).affine() * i2d.inverse();
     } else {
-        return box3d_get_perspective(box)->tmat.image(proj_corner).affine();
+        return box3d_get_perspective(box)->perspective_impl->tmat.image(proj_corner).affine();
     }
 }
 
@@ -435,7 +418,7 @@ box3d_get_center_screen (SPBox3D *box) {
         return Geom::Point (NR_HUGE, NR_HUGE);
     }
     Geom::Matrix const i2d (sp_item_i2d_affine (SP_ITEM(box)));
-    return box3d_get_perspective(box)->tmat.image(proj_center).affine() * i2d.inverse();
+    return box3d_get_perspective(box)->perspective_impl->tmat.image(proj_center).affine() * i2d.inverse();
 }
 
 /*
@@ -461,13 +444,13 @@ box3d_snap (SPBox3D *box, int id, Proj::Pt3 const &pt_proj, Proj::Pt3 const &sta
     Proj::Pt3 D_proj (x_coord,          y_coord + diff_y, z_coord, 1.0);
     Proj::Pt3 E_proj (x_coord - diff_x, y_coord + diff_y, z_coord, 1.0);
 
-    Persp3D *persp = box3d_get_perspective(box);
-    Geom::Point A = persp->tmat.image(A_proj).affine();
-    Geom::Point B = persp->tmat.image(B_proj).affine();
-    Geom::Point C = persp->tmat.image(C_proj).affine();
-    Geom::Point D = persp->tmat.image(D_proj).affine();
-    Geom::Point E = persp->tmat.image(E_proj).affine();
-    Geom::Point pt = persp->tmat.image(pt_proj).affine();
+    Persp3DImpl *persp_impl = box3d_get_perspective(box)->perspective_impl;
+    Geom::Point A = persp_impl->tmat.image(A_proj).affine();
+    Geom::Point B = persp_impl->tmat.image(B_proj).affine();
+    Geom::Point C = persp_impl->tmat.image(C_proj).affine();
+    Geom::Point D = persp_impl->tmat.image(D_proj).affine();
+    Geom::Point E = persp_impl->tmat.image(E_proj).affine();
+    Geom::Point pt = persp_impl->tmat.image(pt_proj).affine();
 
     // TODO: Replace these lines between corners with lines from a corner to a vanishing point
     //       (this might help to prevent rounding errors if the box is small)
@@ -523,7 +506,7 @@ box3d_snap (SPBox3D *box, int id, Proj::Pt3 const &pt_proj, Proj::Pt3 const &sta
         remember_snap_index = snap_index;
         result = snap_pts[snap_index];
     }
-    return box3d_get_perspective(box)->tmat.preimage (result, z_coord, Proj::Z);
+    return box3d_get_perspective(box)->perspective_impl->tmat.preimage (result, z_coord, Proj::Z);
 }
 
 void
@@ -535,8 +518,9 @@ box3d_set_corner (SPBox3D *box, const guint id, Geom::Point const &new_pos, cons
 
     /* update corners 0 and 7 according to which handle was moved and to the axes of movement */
     if (!(movement & Box3D::Z)) {
-        Proj::Pt3 pt_proj (box3d_get_perspective(box)->tmat.preimage (new_pos, (id < 4) ? box->orig_corner0[Proj::Z] :
-                                                                      box->orig_corner7[Proj::Z], Proj::Z));
+        Persp3DImpl *persp_impl = box3d_get_perspective(box)->perspective_impl;
+        Proj::Pt3 pt_proj (persp_impl->tmat.preimage (new_pos, (id < 4) ? box->orig_corner0[Proj::Z] :
+                                                      box->orig_corner7[Proj::Z], Proj::Z));
         if (constrained) {
             pt_proj = box3d_snap (box, id, pt_proj, box3d_get_proj_corner (id, box->save_corner0, box->save_corner7));
         }
@@ -553,13 +537,14 @@ box3d_set_corner (SPBox3D *box, const guint id, Geom::Point const &new_pos, cons
                                        1.0);
     } else {
         Persp3D *persp = box3d_get_perspective(box);
-        Box3D::PerspectiveLine pl(persp->tmat.image(
+        Persp3DImpl *persp_impl = box3d_get_perspective(box)->perspective_impl;
+        Box3D::PerspectiveLine pl(persp_impl->tmat.image(
                                       box3d_get_proj_corner (id, box->save_corner0, box->save_corner7)).affine(),
                                   Proj::Z, persp);
         Geom::Point new_pos_snapped(pl.closest_to(new_pos));
-        Proj::Pt3 pt_proj (persp->tmat.preimage (new_pos_snapped,
-                                          box3d_get_proj_corner (box, id)[(movement & Box3D::Y) ? Proj::X : Proj::Y],
-                                          (movement & Box3D::Y) ? Proj::X : Proj::Y));
+        Proj::Pt3 pt_proj (persp_impl->tmat.preimage (new_pos_snapped,
+                                      box3d_get_proj_corner (box, id)[(movement & Box3D::Y) ? Proj::X : Proj::Y],
+                                                      (movement & Box3D::Y) ? Proj::X : Proj::Y));
         bool corner0_move_x = !(id & Box3D::X) && (movement & Box3D::X);
         bool corner0_move_y = !(id & Box3D::Y) && (movement & Box3D::Y);
         bool corner7_move_x =  (id & Box3D::X) && (movement & Box3D::X);
@@ -590,9 +575,9 @@ void box3d_set_center (SPBox3D *box, Geom::Point const &new_pos, Geom::Point con
         double radx = (box->orig_corner7[Proj::X] - box->orig_corner0[Proj::X]) / 2;
         double rady = (box->orig_corner7[Proj::Y] - box->orig_corner0[Proj::Y]) / 2;
 
-        Proj::Pt3 pt_proj (persp->tmat.preimage (new_pos, coord, Proj::Z));
+        Proj::Pt3 pt_proj (persp->perspective_impl->tmat.preimage (new_pos, coord, Proj::Z));
         if (constrained) {
-            Proj::Pt3 old_pos_proj (persp->tmat.preimage (old_pos, coord, Proj::Z));
+            Proj::Pt3 old_pos_proj (persp->perspective_impl->tmat.preimage (old_pos, coord, Proj::Z));
             old_pos_proj.normalize();
             pt_proj = box3d_snap (box, -1, pt_proj, old_pos_proj);
         }
@@ -612,7 +597,7 @@ void box3d_set_center (SPBox3D *box, Geom::Point const &new_pos, Geom::Point con
 
         Box3D::PerspectiveLine pl(old_pos, Proj::Z, persp);
         Geom::Point new_pos_snapped(pl.closest_to(new_pos));
-        Proj::Pt3 pt_proj (persp->tmat.preimage (new_pos_snapped, coord, Proj::X));
+        Proj::Pt3 pt_proj (persp->perspective_impl->tmat.preimage (new_pos_snapped, coord, Proj::X));
 
         /* normalizing pt_proj is essential because we want to mingle affine coordinates */
         pt_proj.normalize();
@@ -636,6 +621,7 @@ void box3d_corners_for_PLs (const SPBox3D * box, Proj::Axis axis,
 {
     Persp3D *persp = box3d_get_perspective(box);
     g_return_if_fail (persp);
+    Persp3DImpl *persp_impl = persp->perspective_impl;
     //box->orig_corner0.normalize();
     //box->orig_corner7.normalize();
     double coord = (box->orig_corner0[axis] > box->orig_corner7[axis]) ?
@@ -666,10 +652,10 @@ void box3d_corners_for_PLs (const SPBox3D * box, Proj::Axis axis,
         default:
             return;
     }
-    corner1 = persp->tmat.image(c1).affine();
-    corner2 = persp->tmat.image(c2).affine();
-    corner3 = persp->tmat.image(c3).affine();
-    corner4 = persp->tmat.image(c4).affine();
+    corner1 = persp_impl->tmat.image(c1).affine();
+    corner2 = persp_impl->tmat.image(c2).affine();
+    corner3 = persp_impl->tmat.image(c3).affine();
+    corner4 = persp_impl->tmat.image(c4).affine();
 }
 
 /* Auxiliary function: Checks whether the half-line from A to B crosses the line segment joining C and D */
@@ -1027,7 +1013,7 @@ box3d_recompute_z_orders (SPBox3D *box) {
     Geom::Point dirs[3];
     for (int i = 0; i < 3; ++i) {
         dirs[i] = persp3d_get_PL_dir_from_pt(persp, c3, Box3D::toProj(Box3D::axes[i]));
-        if (persp3d_VP_is_finite(persp, Proj::axes[i])) {
+        if (persp3d_VP_is_finite(persp->perspective_impl, Proj::axes[i])) {
             num_finite++;
             axis_finite = Box3D::axes[i];
         } else {
@@ -1212,7 +1198,7 @@ box3d_pt_lies_in_PL_sector (SPBox3D const *box, Geom::Point const &pt, int id1,
     Geom::Point c2(box3d_get_corner_screen(box, id2, false));
 
     int ret = 0;
-    if (persp3d_VP_is_finite(persp, Box3D::toProj(axis))) {
+    if (persp3d_VP_is_finite(persp->perspective_impl, Box3D::toProj(axis))) {
         Geom::Point vp(persp3d_get_VP(persp, Box3D::toProj(axis)).affine());
         Geom::Point v1(c1 - vp);
         Geom::Point v2(c2 - vp);
@@ -1239,7 +1225,7 @@ int
 box3d_VP_lies_in_PL_sector (SPBox3D const *box, Proj::Axis vpdir, int id1, int id2, Box3D::Axis axis) {
     Persp3D *persp = box3d_get_perspective(box);
 
-    if (!persp3d_VP_is_finite(persp, vpdir)) {
+    if (!persp3d_VP_is_finite(persp->perspective_impl, vpdir)) {
         return 0;
     } else {
         return box3d_pt_lies_in_PL_sector(box, persp3d_get_VP(persp, vpdir).affine(), id1, id2, axis);
@@ -1302,31 +1288,6 @@ box3d_check_for_swapped_coords(SPBox3D *box) {
     box3d_exchange_coords(box);
 }
 
-void
-box3d_add_to_selection(SPBox3D *box) {
-    Persp3D *persp = box3d_get_perspective(box);
-    g_return_if_fail(persp);
-    persp3d_add_box_transform(persp, box);
-}
-
-void
-box3d_remove_from_selection(SPBox3D *box) {
-    Persp3D *persp = box3d_get_perspective(box);
-    if (!persp) {
-        /* this can happen if a box is deleted through undo and the persp_ref is already detached;
-           should we rebuild the boxes of each perspective in this case or is it safe to leave it alone? */
-        return;
-    }
-    persp3d_remove_box_transform(persp, box);
-}
-
-void
-box3d_mark_transformed(SPBox3D *box) {
-    Persp3D *persp = box3d_get_perspective(box);
-    g_return_if_fail(persp);
-    persp3d_set_box_transformed(persp, box, true);
-}
-
 static void
 box3d_extract_boxes_rec(SPObject *obj, std::list<SPBox3D *> &boxes) {
     if (SP_IS_BOX3D(obj)) {
@@ -1360,16 +1321,13 @@ box3d_switch_perspectives(SPBox3D *box, Persp3D *old_persp, Persp3D *new_persp,
         Geom::Point corner0_screen = box3d_get_corner_screen(box, 0, false);
         Geom::Point corner7_screen = box3d_get_corner_screen(box, 7, false);
 
-        box->orig_corner0 = new_persp->tmat.preimage(corner0_screen, z0, Proj::Z);
-        box->orig_corner7 = new_persp->tmat.preimage(corner7_screen, z7, Proj::Z);
+        box->orig_corner0 = new_persp->perspective_impl->tmat.preimage(corner0_screen, z0, Proj::Z);
+        box->orig_corner7 = new_persp->perspective_impl->tmat.preimage(corner7_screen, z7, Proj::Z);
     }
 
     persp3d_remove_box (old_persp, box);
     persp3d_add_box (new_persp, box);
 
-    persp3d_remove_box_transform (old_persp, box);
-    persp3d_add_box_transform (new_persp, box);
-
     gchar *href = g_strdup_printf("#%s", SP_OBJECT_REPR(new_persp)->attribute("id"));
     SP_OBJECT_REPR(box)->setAttribute("inkscape:perspectiveID", href);
     g_free(href);
index b6d962a3c924375ca6c6b3daa34df8c0e4dc53a7..9f2e1d78e8ac33210b80d30c5abaa56969600911 100644 (file)
@@ -70,10 +70,6 @@ int box3d_VP_lies_in_PL_sector (SPBox3D const *box, Proj::Axis vpdir, int id1, i
 void box3d_relabel_corners(SPBox3D *box);
 void box3d_check_for_swapped_coords(SPBox3D *box);
 
-void box3d_add_to_selection(SPBox3D *box);
-void box3d_remove_from_selection(SPBox3D *box);
-void box3d_mark_transformed(SPBox3D *box);
-
 std::list<SPBox3D *> box3d_extract_boxes(SPObject *obj);
 
 Persp3D *box3d_get_perspective(SPBox3D const *box);
index 4b13073165b088e5b208e44e60c9b42ae6566bfb..310a37356fead70a3c521c44f8d599fed5533b7c 100644 (file)
@@ -2,7 +2,7 @@
 # include "config.h"
 #endif
 
-//#define DEBUG_LCMS
+#define DEBUG_LCMS
 
 #include <glib/gstdio.h>
 #include <sys/fcntl.h>
@@ -23,6 +23,7 @@
 #endif
 
 #include "xml/repr.h"
+#include "color.h"
 #include "color-profile.h"
 #include "color-profile-fns.h"
 #include "attributes.h"
@@ -50,7 +51,7 @@ static cmsHPROFILE colorprofile_get_proof_profile_handle();
 
 #ifdef DEBUG_LCMS
 extern guint update_in_progress;
-#define DEBUG_MESSAGE(key, ...) \
+#define DEBUG_MESSAGE_SCISLAC(key, ...) \
 {\
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();\
     bool dump = prefs->getBool(Glib::ustring("/options/scislac/") + #key);\
@@ -76,6 +77,13 @@ extern guint update_in_progress;
         gtk_widget_show_all( dialog );\
     }\
 }
+
+
+#define DEBUG_MESSAGE(key, ...)\
+{\
+    g_message( __VA_ARGS__ );\
+}
+
 #endif // DEBUG_LCMS
 
 static SPObjectClass *cprof_parent_class;
@@ -91,6 +99,15 @@ cmsHPROFILE ColorProfile::getSRGBProfile() {
     return _sRGBProf;
 }
 
+cmsHPROFILE ColorProfile::_NullProf = 0;
+
+cmsHPROFILE ColorProfile::getNULLProfile() {
+    if ( !_NullProf ) {
+        _NullProf = cmsCreateNULLProfile();
+    }
+    return _NullProf;
+}
+
 #endif // ENABLE_LCMS
 
 /**
@@ -151,6 +168,7 @@ void ColorProfile::init( ColorProfile *cprof )
     cprof->_profileSpace = icSigRgbData;
     cprof->_transf = 0;
     cprof->_revTransf = 0;
+    cprof->_gamutTransf = 0;
 #endif // ENABLE_LCMS
 }
 
@@ -204,6 +222,10 @@ void ColorProfile::_clearProfile()
         cmsDeleteTransform( _revTransf );
         _revTransf = 0;
     }
+    if ( _gamutTransf ) {
+        cmsDeleteTransform( _gamutTransf );
+        _gamutTransf = 0;
+    }
     if ( profHandle ) {
         cmsCloseProfile( profHandle );
         profHandle = 0;
@@ -508,6 +530,32 @@ cmsHTRANSFORM ColorProfile::getTransfFromSRGB8()
     return _revTransf;
 }
 
+cmsHTRANSFORM ColorProfile::getTransfGamutCheck()
+{
+    if ( !_gamutTransf ) {
+        _gamutTransf = cmsCreateProofingTransform(getSRGBProfile(), TYPE_RGBA_8, getNULLProfile(), TYPE_GRAY_8, profHandle, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, (cmsFLAGS_GAMUTCHECK|cmsFLAGS_SOFTPROOFING));
+    }
+    return _gamutTransf;
+}
+
+bool ColorProfile::GamutCheck(SPColor color){
+    BYTE outofgamut = 0;
+    
+    guint32 val = color.toRGBA32(0);
+    guchar check_color[4] = {
+        SP_RGBA32_R_U(val),
+        SP_RGBA32_G_U(val),
+        SP_RGBA32_B_U(val),
+        255};
+
+    int alarm_r, alarm_g, alarm_b;
+    cmsGetAlarmCodes(&alarm_r, &alarm_g, &alarm_b);
+    cmsSetAlarmCodes(255, 255, 255);
+    cmsDoTransform(ColorProfile::getTransfGamutCheck(), &check_color, &outofgamut, 1);
+    cmsSetAlarmCodes(alarm_r, alarm_g, alarm_b);
+    return (outofgamut == 255);
+}
+
 
 #include <io/sys.h>
 
index 2e57e7ef0221b3b813b00dca270d4df2dbabf84a..40d0d769871f89e96974493f7662ab156767695a 100644 (file)
@@ -36,11 +36,15 @@ struct ColorProfile : public SPObject {
     static std::list<Glib::ustring> getProfileDirs();
 #if ENABLE_LCMS
     static cmsHPROFILE getSRGBProfile();
+    static cmsHPROFILE getNULLProfile();
 
     icColorSpaceSignature getColorSpace() const {return _profileSpace;}
     icProfileClassSignature getProfileClass() const {return _profileClass;}
     cmsHTRANSFORM getTransfToSRGB8();
     cmsHTRANSFORM getTransfFromSRGB8();
+    cmsHTRANSFORM getTransfGamutCheck();
+    bool GamutCheck(SPColor color);
+
 #endif // ENABLE_LCMS
 
     gchar* href;
@@ -64,11 +68,13 @@ private:
     void _clearProfile();
 
     static cmsHPROFILE _sRGBProf;
+    static cmsHPROFILE _NullProf;
 
     icProfileClassSignature _profileClass;
     icColorSpaceSignature _profileSpace;
     cmsHTRANSFORM _transf;
     cmsHTRANSFORM _revTransf;
+    cmsHTRANSFORM _gamutTransf;
 #endif // ENABLE_LCMS
 };
 
index b16d9950fec134755ad423e89656ba60dd7f4333..07c15ff15d9cb8d3ab16bb6119420b56b0955e12 100644 (file)
@@ -17,6 +17,7 @@
 #include <math.h>
 #include "color.h"
 #include "svg/svg-icc-color.h"
+#include "svg/svg-device-color.h"
 #include "svg/svg-color.h"
 
 #include "svg/css-ostringstream.h"
@@ -29,7 +30,8 @@ static bool profileMatches( SVGICCColor const* first, SVGICCColor const* second
 #define PROFILE_EPSILON 0.00000001
 
 SPColor::SPColor() :
-    icc(0)
+    icc(0),
+    device(0)
 {
     v.c[0] = 0;
     v.c[1] = 0;
@@ -37,19 +39,22 @@ SPColor::SPColor() :
 }
 
 SPColor::SPColor( SPColor const& other ) :
-    icc(0)
+    icc(0),
+    device(0)
 {
     *this = other;
 }
 
 SPColor::SPColor( float r, float g, float b ) :
-    icc(0)
+    icc(0),
+    device(0)
 {
     set( r, g, b );
 }
 
 SPColor::SPColor( guint32 value ) :
-    icc(0)
+    icc(0),
+    device(0)
 {
     set( value );
 }
@@ -57,20 +62,29 @@ SPColor::SPColor( guint32 value ) :
 SPColor::~SPColor()
 {
     delete icc;
+    delete device;
     icc = 0;
+    device = 0;
 }
 
 
 SPColor& SPColor::operator= (SPColor const& other)
 {
-    SVGICCColor* tmp = other.icc ? new SVGICCColor(*other.icc) : 0;
+    SVGICCColor* tmp_icc = other.icc ? new SVGICCColor(*other.icc) : 0;
+    SVGDeviceColor* tmp_device = other.device ? new SVGDeviceColor(*other.device) : 0;
+
     v.c[0] = other.v.c[0];
     v.c[1] = other.v.c[1];
     v.c[2] = other.v.c[2];
     if ( icc ) {
         delete icc;
     }
-    icc = tmp;
+    icc = tmp_icc;
+
+    if ( device ) {
+        delete device;
+    }
+    device = tmp_device;
 
     return *this;
 }
@@ -86,6 +100,7 @@ bool SPColor::operator == (SPColor const& other) const
         && (v.c[2] != other.v.c[2]);
 
     match &= profileMatches( icc, other.icc );
+//TODO?:    match &= devicecolorMatches( device, other.device );
 
     return match;
 }
@@ -204,6 +219,38 @@ std::string SPColor::toString() const
         css << ')';
     }
 
+    if ( device && device->type != DEVICE_COLOR_INVALID) {
+        if ( !css.str().empty() ) {
+            css << " ";
+        }
+
+        switch(device->type){
+            case DEVICE_GRAY:
+                css << "device-gray(";
+                break;
+            case DEVICE_RGB:
+                css << "device-rgb(";
+                break;
+            case DEVICE_CMYK:
+                css << "device-cmyk(";
+                break;
+            case DEVICE_NCHANNEL:
+                css << "device-nchannel(";
+                break;
+            case DEVICE_COLOR_INVALID:
+                //should not be reached
+                break;
+        }
+
+        for (vector<double>::const_iterator i(device->colors.begin()),
+                 iEnd(device->colors.end());
+             i != iEnd; ++i) {
+            if (i!=device->colors.begin()) css << ", ";
+            css << *i;
+        }
+        css << ')';
+    }
+
     return css.str();
 }
 
index bebeaec60b4e188bb2dbe7ae8514c6fbb8858b01..7fd351360e23ff25068356fd3ae9851dd8e94e46 100644 (file)
@@ -34,6 +34,7 @@
 #define SP_RGBA32_F_COMPOSE(r,g,b,a) SP_RGBA32_U_COMPOSE (SP_COLOR_F_TO_U (r), SP_COLOR_F_TO_U (g), SP_COLOR_F_TO_U (b), SP_COLOR_F_TO_U (a))
 
 struct SVGICCColor;
+struct SVGDeviceColor;
 
 /**
  * An RGB color with optional icc-color part
@@ -59,6 +60,7 @@ struct SPColor {
     std::string toString() const;
 
     SVGICCColor* icc;
+    SVGDeviceColor* device;
     union {
         float c[3];
     } v;
index 307d59d1f5f2efad35e2068b78e710424d0b71f3..c5c23a734bd919e7a04a39d6da88e286d90d9a8e 100644 (file)
 #include "connector-context.h"
 #include "pixmaps/cursor-connector.xpm"
 #include "pixmaps/cursor-node.xpm"
-#include "pixmaps/cursor-node-m.xpm"
-#include "pixmaps/cursor-node-d.xpm"
+//#include "pixmaps/cursor-node-m.xpm"
+//#include "pixmaps/cursor-node-d.xpm"
 #include "xml/node-event-vector.h"
 #include "xml/repr.h"
 #include "svg/svg.h"
index c8782051bef6772088cef4d5b985488a00f16381..2afcd610958061c993ea5ee53304a946cadd41ba 100644 (file)
@@ -44,6 +44,7 @@
 
 #include "desktop-style.h"
 #include "svg/svg-icc-color.h"
+#include "svg/svg-device-color.h"
 #include "box3d-side.h"
 
 /**
@@ -432,6 +433,8 @@ objects_query_fillstroke (GSList *objects, SPStyle *style_res, bool const isfill
     paint_res->set = TRUE;
 
     SVGICCColor* iccColor = 0;
+    SVGDeviceColor* devColor = 0;
+
     bool iccSeen = false;
     gfloat c[4];
     c[0] = c[1] = c[2] = c[3] = 0.0;
@@ -529,6 +532,23 @@ objects_query_fillstroke (GSList *objects, SPStyle *style_res, bool const isfill
             c[1] += d[1];
             c[2] += d[2];
             c[3] += SP_SCALE24_TO_FLOAT (isfill? style->fill_opacity.value : style->stroke_opacity.value);
+
+            // average device color
+            unsigned int it;
+            if (i==objects /*if this is the first object in the GList*/
+                && paint->value.color.device){
+                devColor = new SVGDeviceColor(*paint->value.color.device);
+                for (it=0; it < paint->value.color.device->colors.size(); it++){
+                    devColor->colors[it] = 0;
+                }
+            }
+
+            if (devColor && paint->value.color.device && paint->value.color.device->type == devColor->type){
+                for (it=0; it < paint->value.color.device->colors.size(); it++){
+                    devColor->colors[it] += paint->value.color.device->colors[it];
+                }
+            }
+
             num ++;
         }
 
@@ -568,6 +588,14 @@ objects_query_fillstroke (GSList *objects, SPStyle *style_res, bool const isfill
             paint_res->value.color.icc = tmp;
         }
 
+        // divide and store the device-color
+        if (devColor){
+            for (unsigned int it=0; it < devColor->colors.size(); it++){
+                devColor->colors[it] /= num;
+            }
+            paint_res->value.color.device = devColor;
+        }
+
         if (num > 1) {
             if (same_color)
                 return QUERY_STYLE_MULTIPLE_SAME;
index 319a0d407e35d252e31d96fc97f3c05e8f45ac62..0e4d4caf3d1f4b7904a47c7196bf73f179794294 100644 (file)
@@ -458,6 +458,9 @@ void SPDesktop::displayModeToggle() {
         _setDisplayMode(Inkscape::RENDERMODE_OUTLINE);
         break;
     case Inkscape::RENDERMODE_OUTLINE:
+        _setDisplayMode(Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW);
+        break;
+    case Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW:
     default:
         _setDisplayMode(Inkscape::RENDERMODE_NORMAL);
     }
index cfb977425318cdb4ccb371a265dd09055572eae6..a02a31034e5a07369a60d246b865d96594e25c38 100644 (file)
@@ -201,6 +201,9 @@ struct SPDesktop : public Inkscape::UI::View::View
     void setDisplayModeOutline() {
         _setDisplayMode(Inkscape::RENDERMODE_OUTLINE);
     }
+    void setDisplayModePrintColorsPreview() {
+        _setDisplayMode(Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW);
+    }
     void displayModeToggle();
     Inkscape::RenderMode _display_mode;
     Inkscape::RenderMode getMode() const { return _display_mode; }
index a92e7cf5bb993f758afd88e609cb3b5b8b211c10..ee05cd01cd011c6591301a6eb445e693a7a39e3c 100644 (file)
@@ -359,9 +359,9 @@ CanvasAxonomGrid::readRepr()
     }
 
     if ( (value = repr->attribute("snapvisiblegridlinesonly")) ) {
-               g_assert(snapper != NULL);
-               snapper->setSnapVisibleOnly(strcmp(value,"false") != 0 && strcmp(value, "0") != 0);
-       }
+        g_assert(snapper != NULL);
+        snapper->setSnapVisibleOnly(strcmp(value,"false") != 0 && strcmp(value, "0") != 0);
+    }
 
     for (GSList *l = canvasitems; l != NULL; l = l->next) {
         sp_canvas_item_request_update ( SP_CANVAS_ITEM(l->data) );
@@ -671,9 +671,9 @@ CanvasAxonomGridSnapper::CanvasAxonomGridSnapper(CanvasAxonomGrid *grid, SnapMan
  */
 Geom::Coord CanvasAxonomGridSnapper::getSnapperTolerance() const
 {
-       SPDesktop const *dt = _snapmanager->getDesktop();
-       double const zoom =  dt ? dt->current_zoom() : 1;
-       return _snapmanager->snapprefs.getGridTolerance() / zoom;
+    SPDesktop const *dt = _snapmanager->getDesktop();
+    double const zoom =  dt ? dt->current_zoom() : 1;
+    return _snapmanager->snapprefs.getGridTolerance() / zoom;
 }
 
 bool CanvasAxonomGridSnapper::getSnapperAlwaysSnap() const
@@ -694,22 +694,22 @@ CanvasAxonomGridSnapper::_getSnapLines(Geom::Point const &p) const
     double spacing_v;
 
     if (getSnapVisibleOnly()) {
-               // Only snapping to visible grid lines
-               spacing_h = grid->spacing_ylines; // this is the spacing of the visible grid lines measured in screen pixels
-               spacing_v = grid->lyw; // vertical
-               // convert screen pixels to px
-               // FIXME: after we switch to snapping dist in screen pixels, this will be unnecessary
-               SPDesktop const *dt = _snapmanager->getDesktop();
-               if (dt) {
-                       spacing_h /= dt->current_zoom();
-                       spacing_v /= dt->current_zoom();
-               }
-       } else {
-               // Snapping to any grid line, whether it's visible or not
-               spacing_h = grid->lengthy  /(grid->tan_angle[X] + grid->tan_angle[Z]);
-               spacing_v = grid->lengthy;
-
-       }
+        // Only snapping to visible grid lines
+        spacing_h = grid->spacing_ylines; // this is the spacing of the visible grid lines measured in screen pixels
+        spacing_v = grid->lyw; // vertical
+        // convert screen pixels to px
+        // FIXME: after we switch to snapping dist in screen pixels, this will be unnecessary
+        SPDesktop const *dt = _snapmanager->getDesktop();
+        if (dt) {
+            spacing_h /= dt->current_zoom();
+            spacing_v /= dt->current_zoom();
+        }
+    } else {
+        // Snapping to any grid line, whether it's visible or not
+        spacing_h = grid->lengthy  /(grid->tan_angle[X] + grid->tan_angle[Z]);
+        spacing_v = grid->lengthy;
+
+    }
 
     // In an axonometric grid, any point will be surrounded by 6 grid lines:
     // - 2 vertical grid lines, one left and one right from the point
@@ -746,18 +746,18 @@ CanvasAxonomGridSnapper::_getSnapLines(Geom::Point const &p) const
     Geom::Point p_x(0, y_proj_along_x_max);
     Geom::Line line_x(p_x, p_x + vers_x);
     Geom::Point p_z(0, y_proj_along_z_max);
-       Geom::Line line_z(p_z, p_z + vers_z);
+    Geom::Line line_z(p_z, p_z + vers_z);
 
     Geom::OptCrossing inters = Geom::OptCrossing(); // empty by default
-       try
-       {
-               inters = Geom::intersection(line_x, line_z);
-       }
-       catch (Geom::InfiniteSolutions e)
-       {
-               // We're probably dealing with parallel lines; this is useless!
-               return s;
-       }
+    try
+    {
+        inters = Geom::intersection(line_x, line_z);
+    }
+    catch (Geom::InfiniteSolutions e)
+    {
+        // We're probably dealing with parallel lines; this is useless!
+        return s;
+    }
 
     // Determine which half of the parallelogram to use
     bool use_left_half = true;
@@ -765,7 +765,7 @@ CanvasAxonomGridSnapper::_getSnapLines(Geom::Point const &p) const
 
     if (inters) {
         Geom::Point inters_pt = line_x.pointAt((*inters).ta);
-       use_left_half = (p[Geom::X] - grid->origin[Geom::X]) < inters_pt[Geom::X];
+        use_left_half = (p[Geom::X] - grid->origin[Geom::X]) < inters_pt[Geom::X];
         use_right_half = !use_left_half;
     }
 
@@ -786,16 +786,16 @@ CanvasAxonomGridSnapper::_getSnapLines(Geom::Point const &p) const
     return s;
 }
 
-void CanvasAxonomGridSnapper::_addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, Geom::Point const normal_to_line, Geom::Point const point_on_line) const
+void CanvasAxonomGridSnapper::_addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num, Geom::Point const normal_to_line, Geom::Point const point_on_line) const
 {
-    SnappedLine dummy = SnappedLine(snapped_point, snapped_distance, source, Inkscape::SNAPTARGET_GRID, getSnapperTolerance(), getSnapperAlwaysSnap(), normal_to_line, point_on_line);
+    SnappedLine dummy = SnappedLine(snapped_point, snapped_distance, source, source_num, Inkscape::SNAPTARGET_GRID, getSnapperTolerance(), getSnapperAlwaysSnap(), normal_to_line, point_on_line);
     sc.grid_lines.push_back(dummy);
 }
 
-void CanvasAxonomGridSnapper::_addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source) const
+void CanvasAxonomGridSnapper::_addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const
 {
-       SnappedPoint dummy = SnappedPoint(snapped_point, source, Inkscape::SNAPTARGET_GRID, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
-       sc.points.push_back(dummy);
+    SnappedPoint dummy = SnappedPoint(snapped_point, source, source_num, Inkscape::SNAPTARGET_GRID, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
+    sc.points.push_back(dummy);
 }
 
 bool CanvasAxonomGridSnapper::ThisSnapperMightSnap() const
index e36804d7c409d60b125fac8fc99fcc55e17c857b..4b1cd48340ccec5215131c0e88084b5281283364 100644 (file)
@@ -78,8 +78,8 @@ public:
 
 private:
     LineList _getSnapLines(Geom::Point const &p) const;
-    void _addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, Geom::Point const normal_to_line, const Geom::Point point_on_line) const;
-    void _addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source) const;
+    void _addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num, Geom::Point const normal_to_line, const Geom::Point point_on_line) const;
+    void _addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const;
 
     CanvasAxonomGrid *grid;
 };
index 5037c0375a695e2d093023505a4613cdbe1c27b2..3532c504a73954f30666174de8e3c0f033774f9c 100644 (file)
@@ -635,9 +635,9 @@ CanvasXYGrid::readRepr()
     }
 
     if ( (value = repr->attribute("snapvisiblegridlinesonly")) ) {
-               g_assert(snapper != NULL);
-               snapper->setSnapVisibleOnly(strcmp(value,"false") != 0 && strcmp(value, "0") != 0);
-       }
+        g_assert(snapper != NULL);
+        snapper->setSnapVisibleOnly(strcmp(value,"false") != 0 && strcmp(value, "0") != 0);
+    }
 
     for (GSList *l = canvasitems; l != NULL; l = l->next) {
         sp_canvas_item_request_update ( SP_CANVAS_ITEM(l->data) );
@@ -972,9 +972,9 @@ CanvasXYGridSnapper::CanvasXYGridSnapper(CanvasXYGrid *grid, SnapManager *sm, Ge
  */
 Geom::Coord CanvasXYGridSnapper::getSnapperTolerance() const
 {
-       SPDesktop const *dt = _snapmanager->getDesktop();
-       double const zoom =  dt ? dt->current_zoom() : 1;
-       return _snapmanager->snapprefs.getGridTolerance() / zoom;
+    SPDesktop const *dt = _snapmanager->getDesktop();
+    double const zoom =  dt ? dt->current_zoom() : 1;
+    return _snapmanager->snapprefs.getGridTolerance() / zoom;
 }
 
 bool CanvasXYGridSnapper::getSnapperAlwaysSnap() const
@@ -993,20 +993,20 @@ CanvasXYGridSnapper::_getSnapLines(Geom::Point const &p) const
 
     for (unsigned int i = 0; i < 2; ++i) {
 
-       double spacing;
-
-       if (getSnapVisibleOnly()) {
-               // Only snapping to visible grid lines
-               spacing = grid->sw[i]; // this is the spacing of the visible grid lines measured in screen pixels
-                       // convert screen pixels to px
-                       // FIXME: after we switch to snapping dist in screen pixels, this will be unnecessary
-                       SPDesktop const *dt = _snapmanager->getDesktop();
-               if (dt) {
-                       spacing /= dt->current_zoom();
-               }
+        double spacing;
+
+        if (getSnapVisibleOnly()) {
+            // Only snapping to visible grid lines
+            spacing = grid->sw[i]; // this is the spacing of the visible grid lines measured in screen pixels
+            // convert screen pixels to px
+            // FIXME: after we switch to snapping dist in screen pixels, this will be unnecessary
+            SPDesktop const *dt = _snapmanager->getDesktop();
+            if (dt) {
+                spacing /= dt->current_zoom();
+            }
         } else {
-               // Snapping to any grid line, whether it's visible or not
-               spacing = grid->spacing[i];
+            // Snapping to any grid line, whether it's visible or not
+            spacing = grid->spacing[i];
         }
 
         Geom::Coord rounded;
@@ -1024,16 +1024,16 @@ CanvasXYGridSnapper::_getSnapLines(Geom::Point const &p) const
     return s;
 }
 
-void CanvasXYGridSnapper::_addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance,  SnapSourceType const &source, Geom::Point const normal_to_line, Geom::Point const point_on_line) const
+void CanvasXYGridSnapper::_addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance,  SnapSourceType const &source, long source_num, Geom::Point const normal_to_line, Geom::Point const point_on_line) const
 {
-    SnappedLine dummy = SnappedLine(snapped_point, snapped_distance, source, Inkscape::SNAPTARGET_GRID, getSnapperTolerance(), getSnapperAlwaysSnap(), normal_to_line, point_on_line);
+    SnappedLine dummy = SnappedLine(snapped_point, snapped_distance, source, source_num, Inkscape::SNAPTARGET_GRID, getSnapperTolerance(), getSnapperAlwaysSnap(), normal_to_line, point_on_line);
     sc.grid_lines.push_back(dummy);
 }
 
-void CanvasXYGridSnapper::_addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source) const
+void CanvasXYGridSnapper::_addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const
 {
-       SnappedPoint dummy = SnappedPoint(snapped_point, source, Inkscape::SNAPTARGET_GRID, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
-       sc.points.push_back(dummy);
+    SnappedPoint dummy = SnappedPoint(snapped_point, source, source_num, Inkscape::SNAPTARGET_GRID, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
+    sc.points.push_back(dummy);
 }
 
 /**
index 58cfbf735d63b9a5cdb9a32c9ca987fe02b863fd..daf28c15c4fcf62e9b63a21bb1d7e984df309fb0 100644 (file)
@@ -166,8 +166,8 @@ public:
 
 private:
     LineList _getSnapLines(Geom::Point const &p) const;
-    void _addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance,  SnapSourceType const &source, Geom::Point const normal_to_line, const Geom::Point point_on_line) const;
-    void _addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source) const;
+    void _addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance,  SnapSourceType const &source, long source_num, Geom::Point const normal_to_line, const Geom::Point point_on_line) const;
+    void _addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const;
     CanvasXYGrid *grid;
 };
 
index 429f1ed32c186c7f61481eccf68a731ab6ff2b91..db09229156bdcbed9a2ddca0aa851981275ed8f6 100644 (file)
@@ -444,6 +444,7 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi
     SPStyle const *style = ggroup->style;
 
     guint ret = item->state;
+    bool print_colors_preview = (item->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW);
 
     if (item->arena->rendermode == Inkscape::RENDERMODE_OUTLINE) {
 
@@ -511,6 +512,10 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi
             } else {
                 rgba = style->fill.value.color.toRGBA32( SP_SCALE24_TO_FLOAT(style->fill_opacity.value) );
             }
+
+            if (print_colors_preview)
+                nr_arena_separate_color_plates(&rgba);
+
             nr_blit_pixblock_mask_rgba32(pb, &m, rgba);
             pb->empty = FALSE;
         }
@@ -551,6 +556,10 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi
             } else {
                 rgba = style->stroke.value.color.toRGBA32( SP_SCALE24_TO_FLOAT(style->stroke_opacity.value) );
             }
+
+            if (print_colors_preview)
+                nr_arena_separate_color_plates(&rgba);
+
             nr_blit_pixblock_mask_rgba32(pb, &m, rgba);
             pb->empty = FALSE;
         } else {
index bdab5b479507d8dc9305063a87ab6305d00a039e..b80df727340113407243f4f3424d698645115135 100644 (file)
@@ -312,7 +312,9 @@ nr_arena_item_invoke_render (cairo_t *ct, NRArenaItem *item, NRRectL const *area
                              NRPixBlock *pb, unsigned int flags)
 {
    bool outline = (item->arena->rendermode == Inkscape::RENDERMODE_OUTLINE);
-    bool filter = (item->arena->rendermode == Inkscape::RENDERMODE_NORMAL);
+    bool filter = (item->arena->rendermode != Inkscape::RENDERMODE_OUTLINE &&
+                   item->arena->rendermode != Inkscape::RENDERMODE_NO_FILTERS);
+    bool print_colors = (item->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW);
 
     nr_return_val_if_fail (item != NULL, NR_ARENA_ITEM_STATE_INVALID);
     nr_return_val_if_fail (NR_IS_ARENA_ITEM (item),
index 96ea76cbef83f14dc6d97c96d437e43dacab1fac..e2a9e958064128a00df160849ce4fba434611b56 100644 (file)
@@ -35,6 +35,7 @@
 #include "display/nr-filter.h"
 #include <typeinfo>
 #include <cairo.h>
+#include "preferences.h"
 
 #include <glib.h>
 #include "svg/svg.h"
@@ -831,7 +832,6 @@ cairo_arena_shape_render_stroke(NRArenaItem *item, NRRectL *area, NRPixBlock *pb
     pb->empty = FALSE;
 }
 
-
 /**
  * Renders the item.  Markers are just composed into the parent buffer.
  */
@@ -844,6 +844,7 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock
     if (!shape->style) return item->state;
 
     bool outline = (NR_ARENA_ITEM(shape)->arena->rendermode == Inkscape::RENDERMODE_OUTLINE);
+    bool print_colors_preview = (NR_ARENA_ITEM(shape)->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW);
 
     if (outline) { // cairo outline rendering
 
@@ -874,6 +875,7 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock
     }
 
     SPStyle const *style = shape->style;
+
     if (shape->fill_shp) {
         NRPixBlock m;
         guint32 rgba;
@@ -893,12 +895,18 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock
         if (shape->_fill.paint.type() == NRArenaShape::Paint::NONE) {
             // do not render fill in any way
         } else if (shape->_fill.paint.type() == NRArenaShape::Paint::COLOR) {
+
+            const SPColor* fill_color = &shape->_fill.paint.color();
             if ( item->render_opacity ) {
-                rgba = shape->_fill.paint.color().toRGBA32( shape->_fill.opacity *
-                                                            SP_SCALE24_TO_FLOAT(style->opacity.value) );
+                rgba = fill_color->toRGBA32( shape->_fill.opacity *
+                                        SP_SCALE24_TO_FLOAT(style->opacity.value) );
             } else {
-                rgba = shape->_fill.paint.color().toRGBA32( shape->_fill.opacity );
+                rgba = fill_color->toRGBA32( shape->_fill.opacity );
             }
+
+            if (print_colors_preview)
+                nr_arena_separate_color_plates(&rgba);
+
             nr_blit_pixblock_mask_rgba32(pb, &m, rgba);
             pb->empty = FALSE;
         } else if (shape->_fill.paint.type() == NRArenaShape::Paint::SERVER) {
@@ -929,14 +937,19 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock
         nr_pixblock_render_shape_mask_or(m, shape->stroke_shp);
         m.empty = FALSE;
 
-            if ( item->render_opacity ) {
-                rgba = shape->_stroke.paint.color().toRGBA32( shape->_stroke.opacity *
-                                                              SP_SCALE24_TO_FLOAT(style->opacity.value) );
-            } else {
-                rgba = shape->_stroke.paint.color().toRGBA32( shape->_stroke.opacity );
-            }
-            nr_blit_pixblock_mask_rgba32(pb, &m, rgba);
-            pb->empty = FALSE;
+        const SPColor* stroke_color = &shape->_stroke.paint.color();
+        if ( item->render_opacity ) {
+            rgba = stroke_color->toRGBA32( shape->_stroke.opacity *
+                                    SP_SCALE24_TO_FLOAT(style->opacity.value) );
+        } else {
+            rgba = stroke_color->toRGBA32( shape->_stroke.opacity );
+        }
+
+        if (print_colors_preview)
+            nr_arena_separate_color_plates(&rgba);
+
+        nr_blit_pixblock_mask_rgba32(pb, &m, rgba);
+        pb->empty = FALSE;
 
         nr_pixblock_release(&m);
 
index 74e0f409c85525ef0d96468c63d2605efa44aafd..33870a11839648b9e5608930dd7f4d49f3dbc09f 100644 (file)
@@ -18,6 +18,7 @@
 #include "nr-filter-types.h"
 #include <libnr/nr-blit.h>
 #include "preferences.h"
+#include "color.h"
 
 static void nr_arena_class_init (NRArenaClass *klass);
 static void nr_arena_init (NRArena *arena);
@@ -181,6 +182,29 @@ nr_arena_set_renderoffscreen (NRArena *arena)
 
 }
 
+#define FLOAT_TO_UINT8(f) (int(f*255))
+#define RGBA_R(v) ((v) >> 24)
+#define RGBA_G(v) (((v) >> 16) & 0xff)
+#define RGBA_B(v) (((v) >> 8) & 0xff)
+#define RGBA_A(v) ((v) & 0xff)
+
+void nr_arena_separate_color_plates(guint32* rgba){
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    bool render_cyan = prefs->getBool("/options/printcolorspreview/cyan", true);
+    bool render_magenta = prefs->getBool("/options/printcolorspreview/magenta", true);
+    bool render_yellow = prefs->getBool("/options/printcolorspreview/yellow", true);
+    bool render_black = prefs->getBool("/options/printcolorspreview/black", true);
+
+    float rgb_v[3];
+    float cmyk_v[4];
+    sp_color_rgb_to_cmyk_floatv (cmyk_v, RGBA_R(*rgba)/256.0, RGBA_G(*rgba)/256.0, RGBA_B(*rgba)/256.0); 
+    sp_color_cmyk_to_rgb_floatv (rgb_v, render_cyan ? cmyk_v[0] : 0,
+                                        render_magenta ? cmyk_v[1] : 0,
+                                        render_yellow ? cmyk_v[2] : 0,
+                                        render_black ? cmyk_v[3] : 0);
+    *rgba = (FLOAT_TO_UINT8(rgb_v[0])<<24) + (FLOAT_TO_UINT8(rgb_v[1])<<16) + (FLOAT_TO_UINT8(rgb_v[2])<<8) + 0xff;
+}
+
 /*
   Local Variables:
   mode:c++
index 1c091b7c76eb9aafc025b15bf6fdc197a9dac8d3..d2f9dc24655fcee9a71328e601ea15e5c58ed905 100644 (file)
@@ -64,4 +64,6 @@ void nr_arena_set_renderoffscreen (NRArena *arena);
 
 void nr_arena_render_paintserver_fill (NRPixBlock *pb, NRRectL *area, SPPainter *painter, float opacity, NRPixBlock *mask);
 
+void nr_arena_separate_color_plates(guint32* rgba);
+
 #endif
index 66fb196cb9740a42a71c0a27e0a3dca8f45143e1..0b24649a99a9f1e122dffa8d147a59717329841c 100644 (file)
@@ -2,7 +2,7 @@
  * feColorMatrix filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   Jasper van de Gronde <th.v.d.gronde@hccnet.nl>
  *
  * Copyright (C) 2007 authors
index 1c331a5b0ee46b4bea48fcd133f00a4e93550198..47b454c535c98d5ef4a9aa7b8ab05f1b95339d96 100644 (file)
@@ -5,7 +5,7 @@
  * feColorMatrix filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index 87f87c95ab981b4c34ac920648ddb7b6eda2d99c..ab9990360635342e80b80b61cf3968fc5ab5fc09 100644 (file)
@@ -2,7 +2,7 @@
  * feComponentTransfer filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   Jasper van de Gronde <th.v.d.gronde@hccnet.nl>
  *
  * Copyright (C) 2007 authors
index 3d8be272e058fa44e3c20744962aea957ff61882..eb76bd54392d7bb73f3b846fa6bdee29a7cb0fb6 100644 (file)
@@ -5,7 +5,7 @@
  * feComponentTransfer filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index e9f7e7dfe14436fc82e5f9d2128a7fe1e02e9d6f..fc88102d82bfdf24fac71108de3912b3719f586f 100644 (file)
@@ -2,7 +2,7 @@
  * feConvolveMatrix filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   Jasper van de Gronde <th.v.d.gronde@hccnet.nl>
  *
  * Copyright (C) 2007,2009 authors
@@ -41,7 +41,7 @@ static inline void convolve2D_XY(unsigned int const x, unsigned int const y, uns
     unsigned int jEnd   = X_UPPER ? width+targetX-x : orderX;
 
     for (unsigned int i=iBegin; i<iEnd; i++){
-        for (int j=jBegin; j<jEnd; j++){
+        for (unsigned int j=jBegin; j<jEnd; j++){
             unsigned int index = 4*( x - targetX + j + width*(y - targetY + i) );
             unsigned int kernel_index = orderX-j-1 + orderX*(orderY-i-1);
             double k = PREMULTIPLIED ? kernel[kernel_index] : in_data[index+3] * kernel[kernel_index];
index d7a04a7669a704c24f6b9442fea7367e5ed58571..e7416f9cca2e89a970a8c11da8d9aa5ca7b0d500 100644 (file)
@@ -5,7 +5,7 @@
  * feConvolveMatrix filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index 869a184ac082bcee257071ee7033d2472499e437..4de5e658cd3909a111ca661f1eeaaf77894abe0c 100644 (file)
@@ -2,7 +2,7 @@
  * feDisplacementMap filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index 180030c855302280b10a7b9a7fe58a456aeeef23..bb15b77a3c200c8a2cd98c122de61716390ea28e 100644 (file)
@@ -5,7 +5,7 @@
  * feDisplacementMap filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index 026cbce169b01b8376aa428b24c397da17992e52..1d804f96912ffdfd6ee77c40a38b5b14a6530e2a 100644 (file)
@@ -2,15 +2,21 @@
  * feFlood filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "display/nr-filter-flood.h"
 #include "display/nr-filter-utils.h"
+#include "svg/svg-icc-color.h"
+#include "svg/svg-color.h"
 
 namespace Inkscape {
 namespace Filters {
@@ -26,6 +32,7 @@ FilterFlood::~FilterFlood()
 {}
 
 int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) {
+g_message("rendering feflood");
     NRPixBlock *in = slot.get(_input);
     if (!in) {
         g_warning("Missing source image for feFlood (in=%d)", _input);
@@ -43,12 +50,18 @@ int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) {
                            true);
 
     unsigned char *out_data = NR_PIXBLOCK_PX(out);
-
     unsigned char r,g,b,a;
-    r = CLAMP_D_TO_U8((color >> 24) % 256);
-    g = CLAMP_D_TO_U8((color >> 16) % 256);
-    b = CLAMP_D_TO_U8((color >>  8) % 256);
-    a = CLAMP_D_TO_U8(opacity*255);
+
+
+        r = CLAMP_D_TO_U8((color >> 24) % 256);
+        g = CLAMP_D_TO_U8((color >> 16) % 256);
+        b = CLAMP_D_TO_U8((color >>  8) % 256);
+        a = CLAMP_D_TO_U8(opacity*255);
+
+#if ENABLE_LCMS
+        icc_color_to_sRGB(icc, &r, &g, &b);
+g_message("result: r:%d g:%d b:%d", r, g, b);
+#endif //ENABLE_LCMS
 
     for(i=0; i < 4*in_h*in_w; i+=4){
             out_data[i]=r;
@@ -70,6 +83,10 @@ void FilterFlood::set_opacity(double o) {
     opacity = o;
 }
 
+void FilterFlood::set_icc(SVGICCColor *icc_color) {
+    icc = icc_color;
+}
+
 void FilterFlood::area_enlarge(NRRectL &/*area*/, Geom::Matrix const &/*trans*/)
 {
 }
index 9e6a53abb55dbf6e9364089d1bfb235413358f1e..98c374bbd0b558c3c46d12b945614cdb3b93c6db 100644 (file)
@@ -5,7 +5,7 @@
  * feFlood filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
@@ -15,6 +15,7 @@
 #include "display/nr-filter-primitive.h"
 #include "display/nr-filter-slot.h"
 #include "display/nr-filter-units.h"
+#include "svg/svg-color.h"
 
 namespace Inkscape {
 namespace Filters {
@@ -27,11 +28,13 @@ public:
     
     virtual void set_opacity(double o);
     virtual void set_color(guint32 c);
+    virtual void set_icc(SVGICCColor *icc_color);
     virtual int render(FilterSlot &slot, FilterUnits const &units);
     virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans);
 private:
     double opacity;
     guint32 color;
+    SVGICCColor *icc;
 };
 
 } /* namespace Filters */
index 2b799f8d26d3116979f0a47f8ab80179540549d1..4ad6982f369ddbd8c1fa5ab4d54510cb3d24d8b7 100644 (file)
@@ -2,7 +2,7 @@
  * feImage filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   Tavmjong Bah <tavmjong@free.fr>
  *
  * Copyright (C) 2007 authors
index 2df3ff807433a204186e4c3dfa741af1765d72eb..2582987512fed3472507972758c6c60da4f8a0d0 100644 (file)
@@ -2,7 +2,7 @@
  * feMorphology filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index 1d3e16be3ec4727ecf0f009a1ec00925c5ac75a4..16ccad5e60ae4333e2136f0efc0a007d1f2e65f1 100644 (file)
@@ -5,7 +5,7 @@
  * feMorphology filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index 53399eba29467cbef52c39350a73ae76ee7133bc..898db9f5352b15c65bec088472efee326033a241 100644 (file)
@@ -2,7 +2,7 @@
  * feTile filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index ea826dfd7326ffdb3cf259e77a01b4b4cf4f2552..5a6a5a78c4198722b73f848264f7fab9c485345f 100644 (file)
@@ -5,7 +5,7 @@
  * feTile filter primitive renderer
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 authors
  *
index a91db3d56132d34977cf93c0e92e04381bbc9263..8d22b180d8170b2f4e1531c8fd108b053f3aa4dd 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Authors:
  *   World Wide Web Consortium <http://www.w3.org/>
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * This file has a considerable amount of code adapted from
  *  the W3C SVG filter specs, available at:
index b12e6395a1122878554feaa775cb92ec790689c3..b841cc37fc73c352f0f052feed208f136f0d7374 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Authors:
  *   World Wide Web Consortium <http://www.w3.org/>
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   Niko Kiirala <niko@kiirala.com>
  *
  * This file has a considerable amount of code adapted from
index 2d71504d215db4ee013c9015e5b19711636fd9ae..7a0db664ac322e6ac13ffd79de07760c2ad6f3a3 100644 (file)
@@ -4,7 +4,7 @@
  * SVGFonts rendering implementation
  *
  * Authors:
- *    Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *    Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Felipe C. da S. Sanches
  *
index ebf5ad08b059e42d2eb9bb9b4b471c764d02d088..ddf4ba327a98d4b4d7583b0c0cece94ec7b65b8f 100644 (file)
@@ -5,7 +5,7 @@
  * SVGFonts rendering headear
  *
  * Authors:
- *    Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *    Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Felipe C. da S. Sanches
  *
index 1b59ae9bbdf92e4cef3976ae6ad978230b5f6c12..abcdb3db43e66c869a0623f15dc6f0b343c309b8 100644 (file)
@@ -12,7 +12,8 @@ namespace Inkscape {
 enum RenderMode {
     RENDERMODE_NORMAL,
     RENDERMODE_NO_FILTERS,
-    RENDERMODE_OUTLINE
+    RENDERMODE_OUTLINE,
+    RENDERMODE_PRINT_COLORS_PREVIEW
 };
 
 }
index a3ad6f7beb1486a4bc236e6d0ff44213b2d89ef5..3104ade288663e40d9b79b41266dceb9ca224419 100644 (file)
@@ -97,10 +97,9 @@ SPDocument::SPDocument() :
     rerouting_handler_id(0),
     profileManager(0), // deferred until after other initialization
     router(new Avoid::Router(Avoid::PolyLineRouting|Avoid::OrthogonalRouting)),
-    perspectives(0),
-    current_persp3d(0),
     _collection_queue(0),
-    oldSignalsConnected(false)
+    oldSignalsConnected(false),
+    current_persp3d(0)
 {
     // Penalise libavoid for choosing paths with needless extra segments.
     // This results in much better looking orthogonal connector paths.
@@ -216,26 +215,43 @@ SPDocument::~SPDocument() {
     //delete this->_whiteboard_session_manager;
 }
 
-void SPDocument::add_persp3d (Persp3D * const /*persp*/)
-{
-    SPDefs *defs = SP_ROOT(this->root)->defs;
-    for (SPObject *i = sp_object_first_child(SP_OBJECT(defs)); i != NULL; i = SP_OBJECT_NEXT(i) ) {
-        if (SP_IS_PERSP3D(i)) {
-            g_print ("Encountered a Persp3D in defs\n");
-        }
+Persp3D *
+SPDocument::getCurrentPersp3D() {
+    // Check if current_persp3d is still valid
+    std::vector<Persp3D*> plist;
+    getPerspectivesInDefs(plist);
+    for (unsigned int i = 0; i < plist.size(); ++i) {
+        if (current_persp3d == plist[i])
+            return current_persp3d;
     }
 
-    g_print ("Adding Persp3D to defs\n");
-    persp3d_create_xml_element (this);
+    // If not, return the first perspective in defs (which may be NULL of none exists)
+    current_persp3d = persp3d_document_first_persp (this);
+
+    return current_persp3d;
 }
 
-void SPDocument::remove_persp3d (Persp3D * const /*persp*/)
-{
-    // TODO: Delete the repr, maybe perform a check if any boxes are still linked to the perspective.
-    //       Anything else?
-    g_print ("Please implement deletion of perspectives here.\n");
+Persp3DImpl *
+SPDocument::getCurrentPersp3DImpl() {
+    return current_persp3d_impl;
 }
 
+void
+SPDocument::setCurrentPersp3D(Persp3D * const persp) {
+    current_persp3d = persp;
+    //current_persp3d_impl = persp->perspective_impl;
+}
+
+void
+SPDocument::getPerspectivesInDefs(std::vector<Persp3D*> &list) {
+    SPDefs *defs = SP_ROOT(this->root)->defs;
+    for (SPObject *i = sp_object_first_child(SP_OBJECT(defs)); i != NULL; i = SP_OBJECT_NEXT(i) ) {
+        if (SP_IS_PERSP3D(i))
+            list.push_back(SP_PERSP3D(i));
+    }
+}
+
+/**
 void SPDocument::initialize_current_persp3d()
 {
     this->current_persp3d = persp3d_document_first_persp(this);
@@ -243,6 +259,7 @@ void SPDocument::initialize_current_persp3d()
         this->current_persp3d = persp3d_create_xml_element(this);
     }
 }
+**/
 
 unsigned long SPDocument::serial() const {
     return priv->serial;
@@ -390,10 +407,14 @@ sp_document_create(Inkscape::XML::Document *rdoc,
         inkscape_ref();
     }
 
-    // Remark: Here, we used to create a "currentpersp3d" element in the document defs.
-    // But this is probably a bad idea since we need to adapt it for every change of selection, which will
-    // completely clutter the undo history. Maybe rather save it to prefs on exit and re-read it on startup?
-    document->initialize_current_persp3d();
+    // Check if the document already has a perspective (e.g., when opening an existing
+    // document). If not, create a new one and set it as the current perspective.
+    document->setCurrentPersp3D(persp3d_document_first_persp(document));
+    if (!document->getCurrentPersp3D()) {
+        //document->setCurrentPersp3D(persp3d_create_xml_element (document));
+        Persp3DImpl *persp_impl = new Persp3DImpl();
+        document->setCurrentPersp3DImpl(persp_impl);
+    }
 
     sp_document_set_undo_sensitive(document, true);
 
@@ -746,11 +767,13 @@ SPDocument::emitReconstructionFinish(void)
 {
     // printf("Finishing Reconstruction\n");
     priv->_reconstruction_finish_signal.emit();
-    
+
+/**    
     // Reference to the old persp3d object is invalid after reconstruction.
     initialize_current_persp3d();
     
     return;
+**/
 }
 
 sigc::connection SPDocument::connectCommit(SPDocument::CommitSignal::slot_type slot)
index 06174c265f593b402151200b2fcb2e6a221f6c26..e83c37a968a2d4584cd020ed5173d70752aa7207 100644 (file)
@@ -55,6 +55,7 @@ namespace Inkscape {
 
 class SP3DBox;
 class Persp3D;
+class Persp3DImpl;
 
 namespace Proj {
     class TransfMat3x4;
@@ -107,17 +108,26 @@ struct SPDocument : public Inkscape::GC::Managed<>,
     // Instance of the connector router
     Avoid::Router *router;
 
-    GSList *perspectives;
-
-    Persp3D *current_persp3d; // "currently active" perspective (e.g., newly created boxes are attached to this one)
-
     GSList *_collection_queue;
 
     bool oldSignalsConnected;
 
-    void add_persp3d(Persp3D * const persp);
-    void remove_persp3d(Persp3D * const persp);
-    void initialize_current_persp3d();
+    void setCurrentPersp3D(Persp3D * const persp);
+    inline void setCurrentPersp3DImpl(Persp3DImpl * const persp_impl) { current_persp3d_impl = persp_impl; }
+    /*
+     * getCurrentPersp3D returns current_persp3d (if non-NULL) or the first
+     * perspective in the defs. If no perspective exists, returns NULL.
+     */
+    Persp3D * getCurrentPersp3D();
+    Persp3DImpl * getCurrentPersp3DImpl();
+    void getPerspectivesInDefs(std::vector<Persp3D*> &list);
+    unsigned int numPerspectivesInDefs() {
+        std::vector<Persp3D*> list;
+        getPerspectivesInDefs(list);
+        return list.size();
+    }
+
+    //void initialize_current_persp3d();
 
     sigc::connection connectModified(ModifiedSignal::slot_type slot);
     sigc::connection connectURISet(URISetSignal::slot_type slot);
@@ -155,6 +165,9 @@ private:
     SPDocument(SPDocument const &); // no copy
     void operator=(SPDocument const &); // no assign
 
+    Persp3D *current_persp3d; /**< Currently 'active' perspective (to which, e.g., newly created boxes are attached) */
+    Persp3DImpl *current_persp3d_impl;
+
 public:
     sigc::connection connectReconstructionStart(ReconstructionStart::slot_type slot);
     sigc::connection connectReconstructionFinish(ReconstructionFinish::slot_type slot);
index 3747334d2b0861f682993c12dbfe47714520e02d..f9c36ad19b4921133ca551f832e0e2a71c48a75a 100644 (file)
@@ -2514,11 +2514,12 @@ int uni_to_title(int ch)
 
 int uni_block(int ch)
 {
-    int ret;
-    UcdBlockData *entry;
-    for (entry = ucd_blocks, ret=0 ; entry->name ; entry++, ret++)
-        if (ch >= entry->low && ch <= entry->high)
+    int ret = 0;
+    for (UcdBlockData *entry = ucd_blocks; entry->name ; entry++, ret++) {
+        if ((ch >= entry->low) && (ch <= entry->high)) {
             return ret;
+        }
+    }
     return UCD_BLOCK_NO_BLOCK;
 }
 
index 40f456bd6c146da3ca011ef1e65a59edc54b4436..1e915ab0a4160fcdb31b16ddcf117d89ce2cf776 100644 (file)
@@ -2207,6 +2207,7 @@ ZipEntry *ZipFile::addFile(const std::string &fileName,
     ZipEntry *ze = new ZipEntry();
     if (!ze->readFile(fileName, comment))
         {
+        delete ze;
         return NULL;
         }
     entries.push_back(ze);
index aa17ea8597a960a570aad2767670bdbdd17a0ada..5415fdc80fb050af4193d3c11cab77911811b5b9 100644 (file)
@@ -142,6 +142,16 @@ static void sp_dropper_context_finish(SPEventContext *ec)
 }
 
 
+/**
+ * Returns the current dropper context icc-color.
+ */
+SPColor* sp_dropper_context_get_icc_color(SPEventContext */*ec*/)
+{
+    //TODO: implement-me!
+
+    return 0; // At least we will cause a clean crash, instead of random corruption.
+}
+
 /**
  * Returns the current dropper context color.
  */
index cf42dac32f406483177b29fb8f81dedeb6bf912f..ab160e2653de38561a92ce9952ac462a761a42b9 100644 (file)
@@ -80,7 +80,7 @@ void pline2svg(polyline pline, int type, int precision, char * units, double sca
        // 2 is pline2polygon
        
        
-       char delim[1];
+       char delim[2];
        double mag_bulge = 0;
        double prev_mag_bulge = 0;
        
@@ -185,7 +185,7 @@ void lwpline2svg(lwpolyline pline, int type, int precision, char * units, double
        // 2 is pline2polygon
        
        
-       char delim[1];
+       char delim[2];
        double mag_bulge = 0;
        double prev_mag_bulge = 0;
        
index 9ac19326f1969ae6c2ed13e932b4367809dd30c1..737bb2885a25cdcd6e261dd5a318a8694d4556af 100644 (file)
@@ -42,22 +42,22 @@ namespace Inkscape {
 namespace Extension {
 namespace Internal {
 
-bool
-CairoPsOutput::check (Inkscape::Extension::Extension * module)
+bool CairoPsOutput::check (Inkscape::Extension::Extension * /*module*/)
 {
-       if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PS))
-               return FALSE;
-
-       return TRUE;
+    if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PS)) {
+        return FALSE;
+    } else {
+        return TRUE;
+    }
 }
 
-bool
-CairoEpsOutput::check (Inkscape::Extension::Extension * module)
+bool CairoEpsOutput::check (Inkscape::Extension::Extension * /*module*/)
 {
-       if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_EPS))
-               return FALSE;
-
-       return TRUE;
+    if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_EPS)) {
+        return FALSE;
+    } else {
+        return TRUE;
+    }
 }
 
 static bool
index e6f2d698ed433673e0a1555c9296a8448d7a841f..a1f902457302c4fada849f0483398de680d8f253 100644 (file)
@@ -71,12 +71,12 @@ public:
     CairoRenderer *getRenderer(void) const;
     cairo_t *getCairoContext(void) const;
 
-    typedef enum CairoRenderMode {
+    enum CairoRenderMode {
         RENDER_MODE_NORMAL,
         RENDER_MODE_CLIP
     };
 
-    typedef enum CairoClipMode {
+    enum CairoClipMode {
         CLIP_MODE_PATH,
         CLIP_MODE_MASK
     };
index f400a36497008c5da1080c66f3c81cd6f5e13b21..9d25f3a7f17bba28443e4e6b7bd78b8eff7f8cc5 100644 (file)
@@ -127,6 +127,7 @@ emf_print_document_to_file(SPDocument *doc, gchar const *filename)
     /* Print document */
     ret = mod->begin(doc);
     if (ret) {
+        g_free(oldoutput);
         throw Inkscape::Extension::Output::save_failed();
     }
     sp_item_invoke_print(mod->base, &context);
index cc8489302d2c73da43173e14eba0be3fc2a49f19..46e0361ce5740941dc444a00dfa0f66fe675ad8d 100644 (file)
@@ -795,8 +795,8 @@ void SingularValueDecomposition::calculate()
          }
       }
 
-    delete e;
-    delete work;
+    delete [] e;
+    delete [] work;
 
 }
 
index c2d417f2c03d750dbcb3e54983fab76f92aca3d8..ba00fe3435e82bcadeedac8c6ee42f32afaed8bb 100644 (file)
@@ -734,6 +734,7 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
     delete builder;
     g_free(docname);
     delete pdf_doc;
+    delete dlg;
 
     // Restore undo
     sp_document_set_undo_sensitive(doc, saved);
index 00bd8fa4d8df9e00b2f09492381cd60b99cdd275..b9583545fb3ed237f0b336769b625aa775e5f11f 100644 (file)
@@ -1536,7 +1536,7 @@ Inkscape::XML::Node *SvgBuilder::_createImage(Stream *str, int width, int height
             }
             png_write_row(png_ptr, (png_bytep)buffer);
         }
-        delete buffer;
+        delete [] buffer;
     } else if (color_map) {
         image_stream = new ImageStream(str, width,
                                        color_map->getNumPixelComps(),
@@ -1575,7 +1575,7 @@ Inkscape::XML::Node *SvgBuilder::_createImage(Stream *str, int width, int height
                 png_write_row(png_ptr, (png_bytep)buffer);
             }
         }
-        delete buffer;
+        delete [] buffer;
 
     } else {    // A colormap must be provided, so quit
         png_destroy_write_struct(&png_ptr, &info_ptr);
index 55cfcbeb78ed20c6b0833d2210e592a536bc9f01..3f60ea05cc778c0147cca5e59d77f6f7d49c0d0f 100644 (file)
@@ -6,7 +6,7 @@
  */
 /*
  * Authors:
- *   Felipe Sanches <felipe.sanches@gmail.com>
+ *   Felipe Sanches <juca@members.fsf.org>
  *   hugo Rodrigues <haa.rodrigues@gmail.com>
  *
  * Copyright (C) 2007 Felipe C. da S. Sanches
index e66f85e70b8399b99d94637519fa90ca0e929297..8edb9cf2d3df096bb21d314dd0fe11f11432995b 100644 (file)
@@ -7,7 +7,7 @@
  * Authors:
  *   Hugo Rodrigues <haa.rodrigues@gmail.com>
  *   Niko Kiirala <niko@kiirala.com>
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2006, 2007, 2008 Authors
  *
index 4db6ab785dcfc8c7c4ddb546fbba230d0f116b93..52873f6d32516b39c8ec4b0c2deac36a47eac888 100644 (file)
@@ -8,7 +8,7 @@
  * Authors:
  *   Hugo Rodrigues <haa.rodrigues@gmail.com>
  *   Niko Kiirala <niko@kiirala.com>
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2006,2007 Authors
  *
index 3e1c36f0ad994afd8f6d3cc3edfc88a174a658c4..6440f340aad7a84fc32e9e70858148d36483d44f 100644 (file)
@@ -6,7 +6,7 @@
  */
 /*
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   hugo Rodrigues <haa.rodrigues@gmail.com>
  *
  * Copyright (C) 2006 Hugo Rodrigues
index beb5fad756dd414382773ac9033d8bb40878935e..1e854504094b9e7e9d944c8d4576ef8f22e1c1d5 100644 (file)
@@ -6,7 +6,7 @@
  */
 /*
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   Hugo Rodrigues <haa.rodrigues@gmail.com>
  *
  * Copyright (C) 2006 Hugo Rodrigues
index 625e35d42bf765183611c38561bbe824d25e3258..221b0daf22b84aa31ac1203329fa3ff5834e65bc 100644 (file)
 # include "config.h"
 #endif
 
+#include "strneq.h"
+
 #include "attributes.h"
 #include "svg/svg.h"
 #include "flood.h"
 #include "xml/repr.h"
 #include "helper-fns.h"
-#include "svg/svg-color.h"
 
 /* FeFlood base class */
 
@@ -79,6 +80,7 @@ static void
 sp_feFlood_init(SPFeFlood *feFlood)
 {
     feFlood->opacity = 1;
+    feFlood->icc = NULL;
 }
 
 /**
@@ -120,16 +122,34 @@ sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value)
     gchar *end_ptr = NULL;
     guint32 read_color;
     double read_num;
+    bool dirty = false;
     
     switch(key) {
        /*DEAL WITH SETTING ATTRIBUTES HERE*/
         case SP_PROP_FLOOD_COLOR:
             cend_ptr = NULL;
             read_color = sp_svg_read_color(value, &cend_ptr, 0xffffffff);
+
             if (cend_ptr && read_color != feFlood->color){
                 feFlood->color = read_color;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+                dirty=true;
+            }
+
+            if (cend_ptr){
+                while (g_ascii_isspace(*cend_ptr)) {
+                    ++cend_ptr;
+                }
+                if (strneq(cend_ptr, "icc-color(", 10)) {
+                    if (!feFlood->icc) feFlood->icc = new SVGICCColor();
+                    if ( ! sp_svg_read_icc_color( cend_ptr, feFlood->icc ) ) {
+                        delete feFlood->icc;
+                        feFlood->icc = NULL;
+                    }
+                    dirty = true;
+                }
             }
+            if (dirty)
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
         case SP_PROP_FLOOD_OPACITY:
             if (value) {
@@ -208,6 +228,7 @@ static void sp_feFlood_build_renderer(SPFilterPrimitive *primitive, Inkscape::Fi
     
     nr_flood->set_opacity(sp_flood->opacity);
     nr_flood->set_color(sp_flood->color);
+    nr_flood->set_icc(sp_flood->icc);
 }
 
 
index 046c0e868872387cf027fb83e18eb6511b17fb8d..f386e2cd47f56b1509fa5e9904e6e30d42e1cb20 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "sp-filter.h"
 #include "flood-fns.h"
+#include "svg/svg-icc-color.h"
 
 #include "display/nr-filter.h"
 #include "display/nr-filter-flood.h"
@@ -25,6 +26,7 @@ class SPFeFloodClass;
 struct SPFeFlood : public SPFilterPrimitive {
     /** FLOOD ATTRIBUTES HERE */
     guint32 color;
+    SVGICCColor *icc;
     double opacity;
 };
 
index d8e5a417f60d22e10999c88cd6135b621e7ce235..eb6dfc22a906aed44076d2a96c264437b613d959 100644 (file)
@@ -6,7 +6,7 @@
  */
 /*
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   hugo Rodrigues <haa.rodrigues@gmail.com>
  *
  * Copyright (C) 2007 Felipe Sanches
@@ -43,8 +43,7 @@ static void sp_feImage_build_renderer(SPFilterPrimitive *primitive, Inkscape::Fi
 
 static SPFilterPrimitiveClass *feImage_parent_class;
 
-GType
-sp_feImage_get_type()
+GType sp_feImage_get_type()
 {
     static GType feImage_type = 0;
 
@@ -64,8 +63,7 @@ sp_feImage_get_type()
     return feImage_type;
 }
 
-static void
-sp_feImage_class_init(SPFeImageClass *klass)
+static void sp_feImage_class_init(SPFeImageClass *klass)
 {
     SPObjectClass *sp_object_class = (SPObjectClass *)klass;
     SPFilterPrimitiveClass * sp_primitive_class = (SPFilterPrimitiveClass *)klass;
@@ -81,8 +79,7 @@ sp_feImage_class_init(SPFeImageClass *klass)
     sp_primitive_class->build_renderer = sp_feImage_build_renderer;
 }
 
-static void
-sp_feImage_init(SPFeImage */*feImage*/)
+static void sp_feImage_init(SPFeImage */*feImage*/)
 {
 }
 
@@ -91,8 +88,7 @@ sp_feImage_init(SPFeImage */*feImage*/)
  * our name must be associated with a repr via "sp_object_type_register".  Best done through
  * sp-object-repr.cpp's repr_name_entries array.
  */
-static void
-sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+static void sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
 {
     // Save document reference so we can load images with relative paths.
     SPFeImage *feImage = SP_FEIMAGE(object);
@@ -115,8 +111,7 @@ sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *re
 /**
  * Drops any allocated memory.
  */
-static void
-sp_feImage_release(SPObject *object)
+static void sp_feImage_release(SPObject *object)
 {
     SPFeImage *feImage = SP_FEIMAGE(object);
     feImage->_image_modified_connection.disconnect();
@@ -127,14 +122,12 @@ sp_feImage_release(SPObject *object)
         ((SPObjectClass *) feImage_parent_class)->release(object);
 }
 
-static void
-sp_feImage_elem_modified(SPObject* /*href*/, guint /*flags*/, SPObject* obj)
+static void sp_feImage_elem_modified(SPObject* /*href*/, guint /*flags*/, SPObject* obj)
 {
     obj->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
 }
 
-static void
-sp_feImage_href_modified(SPObject* old_elem, SPObject* new_elem, SPObject* obj)
+static void sp_feImage_href_modified(SPObject* /*old_elem*/, SPObject* new_elem, SPObject* obj)
 {
     SPFeImage *feImage = SP_FEIMAGE(obj);
     feImage->_image_modified_connection.disconnect();
@@ -151,8 +144,7 @@ sp_feImage_href_modified(SPObject* old_elem, SPObject* new_elem, SPObject* obj)
 /**
  * Sets a specific value in the SPFeImage.
  */
-static void
-sp_feImage_set(SPObject *object, unsigned int key, gchar const *value)
+static void sp_feImage_set(SPObject *object, unsigned int key, gchar const *value)
 {
     SPFeImage *feImage = SP_FEIMAGE(object);
     (void)feImage;
@@ -221,8 +213,7 @@ sp_feImage_set(SPObject *object, unsigned int key, gchar const *value)
 /**
  * Receives update notifications.
  */
-static void
-sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags)
+static void sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags)
 {
 
     if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
@@ -239,8 +230,7 @@ sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags)
 /**
  * Writes its settings to an incoming repr object, if any.
  */
-static Inkscape::XML::Node *
-sp_feImage_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node * sp_feImage_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
 {
     /* TODO: Don't just clone, but create a new repr node and write all
      * relevant values into it */
index 7207918e12923a93014c9881003edaab46cbdec8..78e719ac7bffd9aa12f92f7a761e0684c1c98977 100644 (file)
@@ -6,7 +6,7 @@
  */
 /*
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   Hugo Rodrigues <haa.rodrigues@gmail.com>
  *
  * Copyright (C) 2006 Hugo Rodrigues
index 9a34bbccba3634a472dd93a342099160608ecdf6..1530dae8c33ffb7ce784c0bc6b6dae7e40af55f2 100644 (file)
@@ -6,7 +6,7 @@
  */
 /*
  * Authors:
- *   Felipe Sanches <felipe.sanches@gmail.com>
+ *   Felipe Sanches <juca@members.fsf.org>
  *   Hugo Rodrigues <haa.rodrigues@gmail.com>
  *
  * Copyright (C) 2006 Hugo Rodrigues
index f3c1430565863e1e7882517b0bbd2a3c5c357005..eed056eccc4ad5ce4100457d061b5e07f5170b17 100644 (file)
@@ -6,7 +6,7 @@
  */
 /*
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   hugo Rodrigues <haa.rodrigues@gmail.com>
  *
  * Copyright (C) 2007 Felipe Sanches
index 5edf678a74292ca9aa81bc09778563a4fdfcda7c..792a6181a72d3d08b51d54d1837d77641eb3743a 100644 (file)
@@ -6,7 +6,7 @@
  */
 /*
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *   Hugo Rodrigues <haa.rodrigues@gmail.com>
  *
  * Copyright (C) 2006 Hugo Rodrigues
index c16ed2456548e33f7adcc5a72d874835ca79b1d1..e61bd95527212f795b3a0824156637b4b1f0b5ef 100644 (file)
@@ -609,7 +609,7 @@ gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, guint state, gp
                 dist = fabs(p[Geom::Y] - dragger->parent->hor_levels[i]);
                 if (dist < snap_dist) {
                     p[Geom::Y] = dragger->parent->hor_levels[i];
-                    s = Inkscape::SnappedPoint(p, Inkscape::SNAPSOURCE_HANDLE, Inkscape::SNAPTARGET_GRADIENTS_PARENT_BBOX, dist, snap_dist, false, false);
+                    s = Inkscape::SnappedPoint(p, Inkscape::SNAPSOURCE_HANDLE, 0, Inkscape::SNAPTARGET_GRADIENTS_PARENT_BBOX, dist, snap_dist, false, false);
                     was_snapped = true;
                     sp_knot_moveto (knot, p);
                 }
@@ -618,7 +618,7 @@ gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, guint state, gp
                 dist = fabs(p[Geom::X] - dragger->parent->vert_levels[i]);
                 if (dist < snap_dist) {
                     p[Geom::X] = dragger->parent->vert_levels[i];
-                    s = Inkscape::SnappedPoint(p, Inkscape::SNAPSOURCE_HANDLE, Inkscape::SNAPTARGET_GRADIENTS_PARENT_BBOX, dist, snap_dist, false, false);
+                    s = Inkscape::SnappedPoint(p, Inkscape::SNAPSOURCE_HANDLE, 0, Inkscape::SNAPTARGET_GRADIENTS_PARENT_BBOX, dist, snap_dist, false, false);
                     was_snapped = true;
                     sp_knot_moveto (knot, p);
                 }
index 5cf97958a299390600e3c2eb0bda64dfbb301a80..9121e3ee20df852d4bb0bd15242a7ddddb58064e 100644 (file)
@@ -68,22 +68,22 @@ bool Inkscape::GuideSnapper::ThisSnapperMightSnap() const
     return (_snap_enabled && _snapmanager->snapprefs.getSnapToGuides() && _snapmanager->getNamedView()->showguides);
 }
 
-void Inkscape::GuideSnapper::_addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, Geom::Point const normal_to_line, Geom::Point const point_on_line) const
+void Inkscape::GuideSnapper::_addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num, Geom::Point const normal_to_line, Geom::Point const point_on_line) const
 {
-    SnappedLine dummy = SnappedLine(snapped_point, snapped_distance, source, Inkscape::SNAPTARGET_GUIDE, getSnapperTolerance(), getSnapperAlwaysSnap(), normal_to_line, point_on_line);
+    SnappedLine dummy = SnappedLine(snapped_point, snapped_distance, source, source_num, Inkscape::SNAPTARGET_GUIDE, getSnapperTolerance(), getSnapperAlwaysSnap(), normal_to_line, point_on_line);
     sc.guide_lines.push_back(dummy);
 }
 
-void Inkscape::GuideSnapper::_addSnappedLinesOrigin(SnappedConstraints &sc, Geom::Point const origin, Geom::Coord const snapped_distance, SnapSourceType const &source) const
+void Inkscape::GuideSnapper::_addSnappedLinesOrigin(SnappedConstraints &sc, Geom::Point const origin, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const
 {
-    SnappedPoint dummy = SnappedPoint(origin, source, Inkscape::SNAPTARGET_GUIDE_ORIGIN, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
+    SnappedPoint dummy = SnappedPoint(origin, source, source_num, Inkscape::SNAPTARGET_GUIDE_ORIGIN, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
     sc.points.push_back(dummy);
 }
 
 
-void Inkscape::GuideSnapper::_addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source) const
+void Inkscape::GuideSnapper::_addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const
 {
-    SnappedPoint dummy = SnappedPoint(snapped_point, source, Inkscape::SNAPTARGET_GUIDE, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
+    SnappedPoint dummy = SnappedPoint(snapped_point, source, source_num, Inkscape::SNAPTARGET_GUIDE, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
     sc.points.push_back(dummy);
 }
 
index 1dc602f72075df6b00a904237c1e1efff5d05cb5..5adac6e2220951ef6d39d31ad27c3825002e18c7 100644 (file)
@@ -30,13 +30,13 @@ public:
     bool ThisSnapperMightSnap() const;
 
     Geom::Coord getSnapperTolerance() const; //returns the tolerance of the snapper in screen pixels (i.e. independent of zoom)
-       bool getSnapperAlwaysSnap() const; //if true, then the snapper will always snap, regardless of its tolerance
+    bool getSnapperAlwaysSnap() const; //if true, then the snapper will always snap, regardless of its tolerance
 
 private:
     LineList _getSnapLines(Geom::Point const &p) const;
-    void _addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance,  SnapSourceType const &source, Geom::Point const normal_to_line, Geom::Point const point_on_line) const;
-    void _addSnappedLinesOrigin(SnappedConstraints &sc, Geom::Point const origin, Geom::Coord const snapped_distance, SnapSourceType const &source) const;
-    void _addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source) const;
+    void _addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance,  SnapSourceType const &source, long source_num, Geom::Point const normal_to_line, Geom::Point const point_on_line) const;
+    void _addSnappedLinesOrigin(SnappedConstraints &sc, Geom::Point const origin, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const;
+    void _addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const;
 };
 
 }
index d2a6c9b22bc971d48e2efee119764ccaad0c2397..2c2db92c46a87005a1f5b79529c4351bfda9f51b 100644 (file)
@@ -5,7 +5,7 @@
  * Some helper functions
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  *
  * Copyright (C) 2006 Hugo Rodrigues
index d53901de5be5b67e4b7f7d460ab4df294ce83d5f..6897cb317de0fe0ab9e45eec444159e484f39951 100644 (file)
@@ -66,7 +66,7 @@ namespace Inkjar {
 
 JarFile::JarFile(gchar const*new_filename)
 {
-    _filename = strdup(new_filename);
+    _filename = g_strdup(new_filename);
     _last_filename = NULL;
     fd = -1;
 }
@@ -75,7 +75,7 @@ JarFile::JarFile(gchar const*new_filename)
 //       use strdup
 gchar *JarFile::get_last_filename() const
 {
-    return (_last_filename != NULL ? strdup(_last_filename) : NULL);
+    return (_last_filename != NULL ? g_strdup(_last_filename) : NULL);
 }
 
 JarFile::~JarFile()
@@ -445,11 +445,11 @@ JarFile& JarFile::operator=(JarFile const& rhs)
     if (_filename == NULL)
        _filename = NULL;
     else
-       _filename = strdup(rhs._filename);
+       _filename = g_strdup(rhs._filename);
     if (_last_filename == NULL)
        _last_filename = NULL;
     else 
-       _last_filename = strdup(rhs._last_filename);
+       _last_filename = g_strdup(rhs._last_filename);
     fd = rhs.fd;
     
     return *this;
index 415593b7885ba76dbe76fb259af0cd718708bb4e..b29b91d18ec549badd524a56672d056865e466f5 100644 (file)
@@ -703,6 +703,8 @@ update_view_menu(GtkWidget *widget, GdkEventExpose */*event*/, gpointer user_dat
        new_state = mode == Inkscape::RENDERMODE_NO_FILTERS;
     } else if (!strcmp(action->id, "ViewModeOutline")) {
        new_state = mode == Inkscape::RENDERMODE_OUTLINE;
+    } else if (!strcmp(action->id, "ViewModePrintColorsPreview")) {
+       new_state = mode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW;
     } else {
        g_warning("update_view_menu does not handle this verb");
     }
index d9088dfe712f7a13875e9be7306d44f3fd84a434..3dbd941a49fcbf983d837b14d1cc66b4b220cac5 100644 (file)
@@ -586,7 +586,7 @@ Router *ConnRef::router(void) const
 }
 
 
-bool ConnRef::generatePath(Point p0, Point p1)
+bool ConnRef::generatePath(Point /*p0*/, Point /*p1*/)
 {
     // XXX Code to determine when connectors really need to be rerouted
     //     does not yet work for orthogonal connectors.
index 747fd1f86f137e5909431b385b3ba1c54458a187..4a7b0af2d39309c521deca07140334e5aaceef36 100644 (file)
  * See the file LICENSE.LGPL distributed with the library.
  *
  * Licensees holding a valid commercial license may use this file in
- * accordance with the commercial license agreement provided with the 
+ * accordance with the commercial license agreement provided with the
  * library.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  *
  * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>
 */
@@ -52,11 +52,11 @@ static const size_t XDIM = 0;
 static const size_t YDIM = 1;
 
 
-class ShiftSegment 
+class ShiftSegment
 {
     public:
         // For shiftable segments.
-        ShiftSegment(ConnRef *conn, const size_t low, const size_t high, 
+        ShiftSegment(ConnRef *conn, const size_t low, const size_t high,
                 bool isSBend, const size_t dim, double minLim, double maxLim)
             : connRef(conn),
               indexLow(low),
@@ -69,8 +69,9 @@ class ShiftSegment
               maxSpaceLimit(maxLim)
         {
         }
+
         // For fixed segments.
-        ShiftSegment(ConnRef *conn, const size_t low, const size_t high, 
+        ShiftSegment(ConnRef *conn, const size_t low, const size_t high,
                 const size_t dim)
             : connRef(conn),
               indexLow(low),
@@ -84,23 +85,28 @@ class ShiftSegment
             minSpaceLimit = lowPoint()[dim];
             maxSpaceLimit = lowPoint()[dim];
         }
+
         Point& lowPoint(void)
         {
             return connRef->displayRoute().ps[indexLow];
         }
+
         Point& highPoint(void)
         {
             return connRef->displayRoute().ps[indexHigh];
         }
+
         const Point& lowPoint(void) const
         {
             return connRef->displayRoute().ps[indexLow];
         }
-        const Point& highPoint(void) const 
+
+        const Point& highPoint(void) const
         {
             return connRef->displayRoute().ps[indexHigh];
         }
-        const int fixedOrder(bool& isFixed) const
+
+        int fixedOrder(bool& isFixed) const
         {
             if (fixed)
             {
@@ -117,7 +123,8 @@ class ShiftSegment
             }
             return 0;
         }
-        const int order(void) const
+
+        int order(void) const
         {
             if (lowC())
             {
@@ -129,17 +136,19 @@ class ShiftSegment
             }
             return 0;
         }
+
         bool operator<(const ShiftSegment& rhs) const
         {
             const Point& lowPt = lowPoint();
             const Point& rhsLowPt = rhs.lowPoint();
-            
+
             if (lowPt[dimension] != rhsLowPt[dimension])
             {
                 return lowPt[dimension] < rhsLowPt[dimension];
             }
             return this < &rhs;
         }
+
         // This counts segments that are colliear and share an endpoint as
         // overlapping.  This allows them to be nudged apart where possible.
         bool overlapsWith(const ShiftSegment& rhs, const size_t dim) const
@@ -171,7 +180,7 @@ class ShiftSegment
         double minSpaceLimit;
         double maxSpaceLimit;
     private:
-        const bool lowC(void) const
+        bool lowC(void) const
         {
             // This is true if this is a cBend and its adjoining points
             // are at lower positions.
@@ -181,7 +190,8 @@ class ShiftSegment
             }
             return false;
         }
-        const bool highC(void) const
+
+        bool highC(void) const
         {
             // This is true if this is a cBend and its adjoining points
             // are at higher positions.
@@ -204,7 +214,7 @@ struct Node;
 struct CmpNodePos { bool operator()(const Node* u, const Node* v) const; };
 
 typedef std::set<Node*,CmpNodePos> NodeSet;
-struct Node 
+struct Node
 {
     ShapeRef *v;
     VertInf *c;
@@ -221,10 +231,10 @@ struct Node
           pos(p),
           firstAbove(NULL),
           firstBelow(NULL)
-    {   
+    {
         //COLA_ASSERT(r->width()<1e40);
         v->polygon().getBoundingRect(&min[0], &min[1], &max[0], &max[1]);
-    }   
+    }
     Node(VertInf *c, const double p)
         : v(NULL),
           c(c),
@@ -235,7 +245,7 @@ struct Node
     {
         min[0] = max[0] = c->point.x;
         min[1] = max[1] = c->point.y;
-    }   
+    }
     Node(ShiftSegment *ss, const double p)
         : v(NULL),
           c(NULL),
@@ -246,8 +256,8 @@ struct Node
     {
         // These values shouldn't ever be used, so they don't matter.
         min[0] = max[0] = min[1] = max[1] = 0;
-    }   
-    ~Node() 
+    }
+    ~Node()
     {
     }
     // Find the first Node above in the scanline that is a shape edge,
@@ -260,7 +270,7 @@ struct Node
         {
             curr = curr->firstAbove;
         }
-       
+
         if (curr)
         {
             return curr->max[dim];
@@ -277,14 +287,14 @@ struct Node
         {
             curr = curr->firstBelow;
         }
-        
+
         if (curr)
         {
             return curr->min[dim];
         }
         return DBL_MAX;
     }
-    // Mark all connector segments above in the scanline as being able 
+    // Mark all connector segments above in the scanline as being able
     // to see to this shape edge.
     void markShiftSegmentsAbove(size_t dim)
     {
@@ -293,13 +303,13 @@ struct Node
         {
             if (curr->ss && (curr->pos <= min[dim]))
             {
-                curr->ss->maxSpaceLimit = 
+                curr->ss->maxSpaceLimit =
                         std::min(min[dim], curr->ss->maxSpaceLimit);
             }
             curr = curr->firstAbove;
         }
     }
-    // Mark all connector segments below in the scanline as being able 
+    // Mark all connector segments below in the scanline as being able
     // to see to this shape edge.
     void markShiftSegmentsBelow(size_t dim)
     {
@@ -308,7 +318,7 @@ struct Node
         {
             if (curr->ss && (curr->pos >= max[dim]))
             {
-                curr->ss->minSpaceLimit = 
+                curr->ss->minSpaceLimit =
                         std::max(max[dim], curr->ss->minSpaceLimit);
             }
             curr = curr->firstBelow;
@@ -320,8 +330,8 @@ struct Node
         bool clearVisibility = true;
         firstAbovePos = -DBL_MAX;
         firstBelowPos = DBL_MAX;
-        // We start looking left from the right side of the shape, 
-        // and vice versa. 
+        // We start looking left from the right side of the shape,
+        // and vice versa.
         lastAbovePos = max[dim];
         lastBelowPos = min[dim];
 
@@ -353,7 +363,7 @@ struct Node
             }
             curr = curr->firstAbove;
         }
-        
+
         // Find the first blocking edge below this point.  Don't count the
         // edges as we are travelling out of shapes we are inside, but then
         // mark clearVisibility as false.
@@ -385,35 +395,35 @@ struct Node
 
         return clearVisibility;
     }
-    double firstPointAbove(size_t dim) 
-    { 
-        Node *curr = firstAbove; 
-        while (curr && (curr->max[dim] >= pos)) 
-        { 
-            curr = curr->firstAbove; 
-        } 
-        
-        if (curr) 
-        { 
-            return curr->max[dim]; 
-        } 
-        return -DBL_MAX; 
-    } 
-    double firstPointBelow(size_t dim) 
-    { 
-        Node *curr = firstBelow; 
-        while (curr && (curr->min[dim] <= pos)) 
-        { 
-            curr = curr->firstBelow; 
-        } 
-         
-        if (curr) 
-        { 
-            return curr->min[dim]; 
-        } 
-        return DBL_MAX; 
-    } 
-    // This is a bit inefficient, but we won't need to do it once we have 
+    double firstPointAbove(size_t dim)
+    {
+        Node *curr = firstAbove;
+        while (curr && (curr->max[dim] >= pos))
+        {
+            curr = curr->firstAbove;
+        }
+
+        if (curr)
+        {
+            return curr->max[dim];
+        }
+        return -DBL_MAX;
+    }
+    double firstPointBelow(size_t dim)
+    {
+        Node *curr = firstBelow;
+        while (curr && (curr->min[dim] <= pos))
+        {
+            curr = curr->firstBelow;
+        }
+
+        if (curr)
+        {
+            return curr->min[dim];
+        }
+        return DBL_MAX;
+    }
+    // This is a bit inefficient, but we won't need to do it once we have
     // connection points.
     bool isInsideShape(size_t dimension)
     {
@@ -436,17 +446,17 @@ struct Node
 };
 
 
-bool CmpNodePos::operator() (const Node* u, const Node* v) const 
+bool CmpNodePos::operator() (const Node* u, const Node* v) const
 {
-    if (u->pos != v->pos) 
+    if (u->pos != v->pos)
     {
         return u->pos < v->pos;
     }
-    
+
     // Use the pointers to the base objects to differentiate them.
-    void *up = (u->v) ? (void *) u->v : 
+    void *up = (u->v) ? (void *) u->v :
             ((u->c) ? (void *) u->c : (void *) u->ss);
-    void *vp = (v->v) ? (void *) v->v : 
+    void *vp = (v->v) ? (void *) v->v :
             ((v->c) ? (void *) v->c : (void *) v->ss);
     return up < vp;
 }
@@ -456,7 +466,7 @@ bool CmpNodePos::operator() (const Node* u, const Node* v) const
 typedef enum {
     Open = 1,
     SegOpen = 2,
-    ConnPoint = 3, 
+    ConnPoint = 3,
     SegClose = 4,
     Close = 5
 } EventType;
@@ -464,7 +474,7 @@ typedef enum {
 
 struct Event
 {
-    Event(EventType t, Node *v, double p) 
+    Event(EventType t, Node *v, double p)
         : type(t),
           v(v),
           pos(p)
@@ -496,7 +506,7 @@ int compare_events(const void *a, const void *b)
 
 
 // Returns a bitfield of the direction of visibility (in this dimension)
-// made up of ConnDirDown (for visibility towards lower position values) 
+// made up of ConnDirDown (for visibility towards lower position values)
 // and ConnDirUp (for visibility towards higher position values).
 //
 static ConnDirFlags getPosVertInfDirection(VertInf *v, size_t dim)
@@ -526,13 +536,13 @@ static ConnDirFlags getPosVertInfDirection(VertInf *v, size_t dim)
         }
         else if (dirs == ConnDirDown)
         {
-            // For libavoid the Y-axis points downwards, so in terms of 
+            // For libavoid the Y-axis points downwards, so in terms of
             // smaller or larger position values, Down is Up and vice versa.
             return ConnDirUp;
         }
         else if (dirs == ConnDirUp)
         {
-            // For libavoid the Y-axis points downwards, so in terms of 
+            // For libavoid the Y-axis points downwards, so in terms of
             // smaller or larger position values, Down is Up and vice versa.
             return ConnDirDown;
         }
@@ -551,8 +561,8 @@ struct PosVertInf
           dir(d)
     {
     }
-    
-    bool operator<(const PosVertInf& rhs) const 
+
+    bool operator<(const PosVertInf& rhs) const
     {
         if (pos != rhs.pos)
         {
@@ -565,7 +575,7 @@ struct PosVertInf
     VertInf *vert;
 
     // A bitfield marking the direction of visibility (in this dimension)
-    // made up of ConnDirDown (for visibility towards lower position values) 
+    // made up of ConnDirDown (for visibility towards lower position values)
     // and ConnDirUp (for visibility towards higher position values).
     //
     ConnDirFlags dir;
@@ -573,7 +583,7 @@ struct PosVertInf
 
 
 struct CmpVertInf
-{ 
+{
     bool operator()(const VertInf* u, const VertInf* v) const
     {
         // Comparator for VertSet, an ordered set of VertInf pointers.
@@ -596,17 +606,17 @@ struct CmpVertInf
 
 typedef std::set<VertInf *, CmpVertInf> VertSet;
 
-// A set of points to break the line segment, 
+// A set of points to break the line segment,
 // along with vertices for these points.
 typedef std::set<PosVertInf> BreakpointSet;
 
-// Temporary structure used to store the possible horizontal visibility 
+// Temporary structure used to store the possible horizontal visibility
 // lines arising from the vertical sweep.
-class LineSegment 
+class LineSegment
 {
 public:
-    LineSegment(const double& b, const double& f, const double& p, 
-            bool ss = false, VertInf *bvi = NULL, VertInf *fvi = NULL)
+    LineSegment(const double& b, const double& f, const double& p,
+                bool /*ss*/ = false, VertInf *bvi = NULL, VertInf *fvi = NULL)
         : begin(b),
           finish(f),
           pos(p),
@@ -623,6 +633,7 @@ public:
             vertInfs.insert(fvi);
         }
     }
+
     LineSegment(const double& bf, const double& p, VertInf *bfvi = NULL)
         : begin(bf),
           finish(bf),
@@ -634,9 +645,9 @@ public:
             vertInfs.insert(bfvi);
         }
     }
+
     // Order by begin, pos, finish.
-    bool operator<(const LineSegment& rhs) const 
+    bool operator<(const LineSegment& rhs) const
     {
         if (begin != rhs.begin)
         {
@@ -662,7 +673,7 @@ public:
             // Lines are exactly equal.
             return true;
         }
-        
+
         if (pos == rhs.pos)
         {
             if (((begin >= rhs.begin) && (begin <= rhs.finish)) ||
@@ -681,7 +692,7 @@ public:
         finish = std::max(finish, segment.finish);
         vertInfs.insert(segment.vertInfs.begin(), segment.vertInfs.end());
     }
-    
+
     VertInf *beginVertInf(void) const
     {
         if (vertInfs.empty())
@@ -750,12 +761,12 @@ public:
         }
     }
 
-    // Converts a section of the points list to a set of breakPoints.  
+    // Converts a section of the points list to a set of breakPoints.
     // Returns the first of the intersection points occuring at finishPos.
-    VertSet::iterator addSegmentsUpTo(Router *router, double finishPos)
+    VertSet::iterator addSegmentsUpTo(Router */*router*/, double finishPos)
     {
         VertSet::iterator firstIntersectionPt = vertInfs.end();
-        for (VertSet::iterator vert = vertInfs.begin(); 
+        for (VertSet::iterator vert = vertInfs.begin();
                 vert != vertInfs.end(); ++vert)
         {
             if ((*vert)->point.x > finishPos)
@@ -763,11 +774,11 @@ public:
                 // We're done.
                 break;
             }
-            
+
             breakPoints.insert(PosVertInf((*vert)->point.x, (*vert),
                         getPosVertInfDirection(*vert, XDIM)));
 
-            if ((firstIntersectionPt == vertInfs.end()) && 
+            if ((firstIntersectionPt == vertInfs.end()) &&
                     ((*vert)->point.x == finishPos))
             {
                 firstIntersectionPt = vert;
@@ -777,22 +788,22 @@ public:
         return firstIntersectionPt;
     }
 
-    // Add visibility edge(s) for this segment.  There may be multiple if 
+    // Add visibility edge(s) for this segment.  There may be multiple if
     // one of the endpoints is shared by multiple connector endpoints.
     void addEdgeHorizontal(Router *router)
     {
         commitBegin(router);
         commitFinish(router);
-        
+
         addSegmentsUpTo(router, finish);
     }
 
     // Add visibility edge(s) for this segment up until an intersection.
     // Then, move the segment beginning to the intersection point, so we
     // later only consider the remainder of the segment.
-    // There may be multiple segments added to the graph if the beginning 
+    // There may be multiple segments added to the graph if the beginning
     // endpoint of the segment is shared by multiple connector endpoints.
-    VertSet addEdgeHorizontalTillIntersection(Router *router, 
+    VertSet addEdgeHorizontalTillIntersection(Router *router,
             LineSegment& vertLine)
     {
         VertSet intersectionSet;
@@ -801,14 +812,14 @@ public:
 
         // Does a vertex already exist for this point.
         commitPositionX(router, vertLine.pos);
-   
-        // Generate segments and set end iterator to the first point 
+
+        // Generate segments and set end iterator to the first point
         // at the intersection position.
         VertSet::iterator restBegin = addSegmentsUpTo(router, vertLine.pos);
 
         // Add the intersections points to intersectionSet.
         VertSet::iterator restEnd = restBegin;
-        while ((restEnd != vertInfs.end()) && 
+        while ((restEnd != vertInfs.end()) &&
                 (*restEnd)->point.x == vertLine.pos)
         {
             ++restEnd;
@@ -821,7 +832,7 @@ public:
 
         return intersectionSet;
     }
-                
+
     // Insert vertical breakpoints.
     void insertBreakpointsBegin(Router *router, LineSegment& vertLine)
     {
@@ -841,7 +852,7 @@ public:
         {
             if ((*v)->point.x == begin)
             {
-                vertLine.breakPoints.insert(PosVertInf(pos, *v, 
+                vertLine.breakPoints.insert(PosVertInf(pos, *v,
                         getPosVertInfDirection(*v, YDIM)));
             }
         }
@@ -911,7 +922,7 @@ public:
                 {
                     // Here we have a pair of two endpoints that are both
                     // connector endpoints and both are inside a shape.
-                    
+
                     // Give vert visibility back to the first non-connector
                     // endpoint vertex (i.e., the side of the shape).
                     BreakpointSet::iterator side = last;
@@ -926,16 +937,16 @@ public:
                     bool canSeeDown = (vert->dir & ConnDirDown);
                     if (canSeeDown && side->vert->id.isShape)
                     {
-                        EdgeInf *edge = new 
+                        EdgeInf *edge = new
                                 EdgeInf(side->vert, vert->vert, orthogonal);
-                        edge->setDist(vert->vert->point[dim] - 
+                        edge->setDist(vert->vert->point[dim] -
                                 side->vert->point[dim]);
                     }
 
                     // Give last visibility back to the first non-connector
                     // endpoint vertex (i.e., the side of the shape).
                     side = vert;
-                    while ((side != breakPoints.end()) && 
+                    while ((side != breakPoints.end()) &&
                             !side->vert->id.isShape)
                     {
                         ++side;
@@ -943,17 +954,17 @@ public:
                     bool canSeeUp = (last->dir & ConnDirUp);
                     if (canSeeUp && (side != breakPoints.end()))
                     {
-                        EdgeInf *edge = new 
+                        EdgeInf *edge = new
                                 EdgeInf(last->vert, side->vert, orthogonal);
-                        edge->setDist(side->vert->point[dim] - 
+                        edge->setDist(side->vert->point[dim] -
                                 last->vert->point[dim]);
                     }
                 }
-                
+
                 // The normal case.
                 //
-                // Note: It's okay to give two connector endpoints visbility 
-                // here since we only consider the partner endpoint as a 
+                // Note: It's okay to give two connector endpoints visbility
+                // here since we only consider the partner endpoint as a
                 // candidate while searching if it is the other endpoint of
                 // the connector in question.
                 //
@@ -968,9 +979,9 @@ public:
                 }
                 if (generateEdge)
                 {
-                    EdgeInf *edge = 
+                    EdgeInf *edge =
                             new EdgeInf(last->vert, vert->vert, orthogonal);
-                    edge->setDist(vert->vert->point[dim] - 
+                    edge->setDist(vert->vert->point[dim] -
                             last->vert->point[dim]);
                 }
 
@@ -997,12 +1008,12 @@ public:
     double finish;
     double pos;
     bool shapeSide;
-    
+
     VertSet vertInfs;
     BreakpointSet breakPoints;
 private:
-       // MSVC wants to generate the assignment operator and the default 
-       // constructor, but fails.  Therefore we declare them private and 
+       // MSVC wants to generate the assignment operator and the default
+       // constructor, but fails.  Therefore we declare them private and
        // don't implement them.
     LineSegment & operator=(LineSegment const &);
     LineSegment();
@@ -1032,7 +1043,7 @@ class SegmentListWrapper
                     }
                     else
                     {
-                        // This is the first overlapping segment, so just 
+                        // This is the first overlapping segment, so just
                         // merge the new segment with this one.
                         curr->mergeVertInfs(segment);
                         found = curr;
@@ -1061,7 +1072,7 @@ class SegmentListWrapper
 // Given a router instance and a set of possible horizontal segments, and a
 // possible vertical visibility segment, compute and add edges to the
 // orthogonal visibility graph for all the visibility edges.
-static void intersectSegments(Router *router, SegmentList& segments, 
+static void intersectSegments(Router *router, SegmentList& segments,
         LineSegment& vertLine)
 {
     COLA_ASSERT(vertLine.beginVertInf() == NULL);
@@ -1104,9 +1115,9 @@ static void intersectSegments(Router *router, SegmentList& segments,
             {
                 // Add horizontal visibility segment.
                 horiLine.addEdgeHorizontal(router);
-            
+
                 horiLine.insertBreakpointsFinish(router, vertLine);
-                
+
                 size_t dim = XDIM; // x-dimension
                 horiLine.generateVisibilityEdgesFromBreakpointSet(router, dim);
 
@@ -1123,7 +1134,7 @@ static void intersectSegments(Router *router, SegmentList& segments,
             if (inVertSegRegion)
             {
                 // Add horizontal visibility segment.
-                VertSet intersectionVerts = 
+                VertSet intersectionVerts =
                         horiLine.addEdgeHorizontalTillIntersection(
                             router, vertLine);
 
@@ -1144,16 +1155,16 @@ static void intersectSegments(Router *router, SegmentList& segments,
 }
 
 
-// Processes an event for the vertical sweep used for computing the static 
-// orthogonal visibility graph.  This adds possible visibility sgments to 
+// Processes an event for the vertical sweep used for computing the static
+// orthogonal visibility graph.  This adds possible visibility sgments to
 // the segments list.
 // The first pass is adding the event to the scanline, the second is for
 // processing the event and the third for removing it from the scanline.
-static void processEventVert(Router *router, NodeSet& scanline, 
+static void processEventVert(Router *router, NodeSet& scanline,
         SegmentListWrapper& segments, Event *e, unsigned int pass)
 {
     Node *v = e->v;
-    
+
     if ( ((pass == 1) && (e->type == Open)) ||
          ((pass == 2) && (e->type == ConnPoint)) )
     {
@@ -1163,21 +1174,21 @@ static void processEventVert(Router *router, NodeSet& scanline,
 
         NodeSet::iterator it = v->iter;
         // Work out neighbours
-        if (it != scanline.begin()) 
+        if (it != scanline.begin())
         {
             Node *u = *(--it);
             v->firstAbove = u;
             u->firstBelow = v;
         }
         it = v->iter;
-        if (++it != scanline.end()) 
+        if (++it != scanline.end())
         {
             Node *u = *it;
             v->firstBelow = u;
             u->firstAbove = v;
         }
     }
-    
+
     if (pass == 2)
     {
         if ((e->type == Open) || (e->type == Close))
@@ -1198,18 +1209,18 @@ static void processEventVert(Router *router, NodeSet& scanline,
             if (minLimitMax >= maxLimitMin)
             {
                 // Insert possible visibility segments.
-                VertInf *vI1 = new VertInf(router, dummyOrthogID, 
+                VertInf *vI1 = new VertInf(router, dummyOrthogID,
                             Point(minShape, lineY));
-                VertInf *vI2 = new VertInf(router, dummyOrthogID, 
+                VertInf *vI2 = new VertInf(router, dummyOrthogID,
                             Point(maxShape, lineY));
-                
+
                 // There are no overlapping shapes, so give full visibility.
                 if (minLimit < minShape)
                 {
                     segments.insert(LineSegment(minLimit, minShape, lineY,
                                 true, NULL, vI1));
                 }
-                segments.insert(LineSegment(minShape, maxShape, lineY, 
+                segments.insert(LineSegment(minShape, maxShape, lineY,
                             true, vI1, vI2));
                 if (maxShape < maxLimit)
                 {
@@ -1245,12 +1256,12 @@ static void processEventVert(Router *router, NodeSet& scanline,
             LineSegment *line1 = NULL, *line2 = NULL;
             if (!inShape || (centreVert->visDirections & ConnDirLeft))
             {
-                line1 = segments.insert(LineSegment(minLimit, cp.x, e->pos, 
+                line1 = segments.insert(LineSegment(minLimit, cp.x, e->pos,
                         true, NULL, centreVert));
             }
             if (!inShape || (centreVert->visDirections & ConnDirRight))
             {
-                line2 = segments.insert(LineSegment(cp.x, maxLimit, e->pos, 
+                line2 = segments.insert(LineSegment(cp.x, maxLimit, e->pos,
                         true, centreVert, NULL));
             }
             if (!line1 && !line2)
@@ -1258,7 +1269,7 @@ static void processEventVert(Router *router, NodeSet& scanline,
                 // Add a point segment for the centre point.
                 segments.insert(LineSegment(cp.x, e->pos, centreVert));
             }
-            
+
             if (!inShape)
             {
                 // This is not contained within a shape so add a normal
@@ -1279,13 +1290,13 @@ static void processEventVert(Router *router, NodeSet& scanline,
             }
         }
     }
-    
+
     if ( ((pass == 3) && (e->type == Close)) ||
          ((pass == 2) && (e->type == ConnPoint)) )
     {
         // Clean up neighbour pointers.
         Node *l = v->firstAbove, *r = v->firstBelow;
-        if (l != NULL) 
+        if (l != NULL)
         {
             l->firstBelow = v->firstBelow;
         }
@@ -1310,16 +1321,16 @@ static void processEventVert(Router *router, NodeSet& scanline,
 }
 
 
-// Processes an event for the vertical sweep used for computing the static 
-// orthogonal visibility graph.  This adds possible visibility sgments to 
+// Processes an event for the vertical sweep used for computing the static
+// orthogonal visibility graph.  This adds possible visibility sgments to
 // the segments list.
 // The first pass is adding the event to the scanline, the second is for
 // processing the event and the third for removing it from the scanline.
-static void processEventHori(Router *router, NodeSet& scanline, 
+static void processEventHori(Router */*router*/, NodeSet& scanline,
         SegmentListWrapper& segments, Event *e, unsigned int pass)
 {
     Node *v = e->v;
-    
+
     if ( ((pass == 1) && (e->type == Open)) ||
          ((pass == 2) && (e->type == ConnPoint)) )
     {
@@ -1329,21 +1340,21 @@ static void processEventHori(Router *router, NodeSet& scanline,
 
         NodeSet::iterator it = v->iter;
         // Work out neighbours
-        if (it != scanline.begin()) 
+        if (it != scanline.begin())
         {
             Node *u = *(--it);
             v->firstAbove = u;
             u->firstBelow = v;
         }
         it = v->iter;
-        if (++it != scanline.end()) 
+        if (++it != scanline.end())
         {
             Node *u = *it;
             v->firstBelow = u;
             u->firstAbove = v;
         }
     }
-    
+
     if (pass == 2)
     {
         if ((e->type == Open) || (e->type == Close))
@@ -1370,13 +1381,13 @@ static void processEventHori(Router *router, NodeSet& scanline,
             {
                 if ((minLimitMax > minLimit) && (minLimitMax >= minShape))
                 {
-                    LineSegment vertSeg = 
+                    LineSegment vertSeg =
                             LineSegment(minLimit, minLimitMax, lineX);
                     segments.insert(vertSeg);
                 }
                 if ((maxLimitMin < maxLimit) && (maxLimitMin <= maxShape))
                 {
-                    LineSegment vertSeg = 
+                    LineSegment vertSeg =
                             LineSegment(maxLimitMin, maxLimit, lineX);
                     segments.insert(vertSeg);
                 }
@@ -1392,7 +1403,7 @@ static void processEventHori(Router *router, NodeSet& scanline,
             double minLimit = v->firstPointAbove(1);
             double maxLimit = v->firstPointBelow(1);
             bool inShape = v->isInsideShape(1);
-            
+
             if (!inShape || (centreVert->visDirections & ConnDirUp))
             {
                 segments.insert(LineSegment(minLimit, cp.y, e->pos));
@@ -1403,13 +1414,13 @@ static void processEventHori(Router *router, NodeSet& scanline,
             }
         }
     }
-    
+
     if ( ((pass == 3) && (e->type == Close)) ||
          ((pass == 2) && (e->type == ConnPoint)) )
     {
         // Clean up neighbour pointers.
         Node *l = v->firstAbove, *r = v->firstBelow;
-        if (l != NULL) 
+        if (l != NULL)
         {
             l->firstBelow = v->firstBelow;
         }
@@ -1455,8 +1466,8 @@ extern void generateStaticOrthogonalVisGraph(Router *router)
 
         ++shRefIt;
     }
-    for (VertInf *curr = router->vertices.connsBegin(); 
-            curr && (curr != router->vertices.shapesBegin()); 
+    for (VertInf *curr = router->vertices.connsBegin();
+            curr && (curr != router->vertices.shapesBegin());
             curr = curr->lstNext)
     {
         Point& point = curr->point;
@@ -1485,7 +1496,7 @@ extern void generateStaticOrthogonalVisGraph(Router *router)
             {
                 for (unsigned j = posStartIndex; j < posFinishIndex; ++j)
                 {
-                    processEventVert(router, scanline, segments, 
+                    processEventVert(router, scanline, segments,
                             events[j], pass);
                 }
             }
@@ -1500,7 +1511,7 @@ extern void generateStaticOrthogonalVisGraph(Router *router)
             posStartIndex = i;
         }
 
-        // Do the first sweep event handling -- building the correct 
+        // Do the first sweep event handling -- building the correct
         // structure of the scanline.
         const int pass = 1;
         processEventVert(router, scanline, segments, events[i], pass);
@@ -1529,8 +1540,8 @@ extern void generateStaticOrthogonalVisGraph(Router *router)
 
         ++shRefIt;
     }
-    for (VertInf *curr = router->vertices.connsBegin(); 
-            curr && (curr != router->vertices.shapesBegin()); 
+    for (VertInf *curr = router->vertices.connsBegin();
+            curr && (curr != router->vertices.shapesBegin());
             curr = curr->lstNext)
     {
         Point& point = curr->point;
@@ -1555,11 +1566,11 @@ extern void generateStaticOrthogonalVisGraph(Router *router)
             {
                 for (unsigned j = posStartIndex; j < posFinishIndex; ++j)
                 {
-                    processEventHori(router, scanline, vertSegments, 
+                    processEventHori(router, scanline, vertSegments,
                             events[j], pass);
                 }
             }
-            
+
             // Process the merged line segments.
             vertSegments.list().sort();
             for (SegmentList::iterator curr = vertSegments.list().begin();
@@ -1579,7 +1590,7 @@ extern void generateStaticOrthogonalVisGraph(Router *router)
             posStartIndex = i;
         }
 
-        // Do the first sweep event handling -- building the correct 
+        // Do the first sweep event handling -- building the correct
         // structure of the scanline.
         const int pass = 1;
         processEventHori(router, scanline, vertSegments, events[i], pass);
@@ -1593,13 +1604,13 @@ extern void generateStaticOrthogonalVisGraph(Router *router)
 
     // Add portions of the horizontal line that are after the final vertical
     // position we considered.
-    for (SegmentList::iterator it = segments.list().begin(); 
+    for (SegmentList::iterator it = segments.list().begin();
             it != segments.list().end(); )
     {
         LineSegment& horiLine = *it;
 
         horiLine.addEdgeHorizontal(router);
-        
+
         size_t dim = XDIM; // x-dimension
         horiLine.generateVisibilityEdgesFromBreakpointSet(router, dim);
 
@@ -1615,20 +1626,20 @@ extern void generateStaticOrthogonalVisGraph(Router *router)
 
 
 
-// Processes sweep events used to determine each horizontal and vertical 
-// line segment in a connector's channel of visibility.  
+// Processes sweep events used to determine each horizontal and vertical
+// line segment in a connector's channel of visibility.
 // Four calls to this function are made at each position by the scanline:
 //   1) Handle all Close event processing.
 //   2) Remove Close event objects from the scanline.
 //   3) Add Open event objects to the scanline.
 //   4) Handle all Open event processing.
 //
-static void processShiftEvent(Router *router, NodeSet& scanline, 
-        ShiftSegmentList& segments, Event *e, size_t dim,
-        unsigned int pass)
+static void processShiftEvent(Router */*router*/, NodeSet& scanline,
+                              ShiftSegmentList& /*segments*/, Event *e, size_t dim,
+                              unsigned int pass)
 {
     Node *v = e->v;
-    
+
     if ( ((pass == 3) && (e->type == Open)) ||
          ((pass == 3) && (e->type == SegOpen)) )
     {
@@ -1638,21 +1649,21 @@ static void processShiftEvent(Router *router, NodeSet& scanline,
 
         NodeSet::iterator it = v->iter;
         // Work out neighbours
-        if (it != scanline.begin()) 
+        if (it != scanline.begin())
         {
             Node *u = *(--it);
             v->firstAbove = u;
             u->firstBelow = v;
         }
         it = v->iter;
-        if (++it != scanline.end()) 
+        if (++it != scanline.end())
         {
             Node *u = *it;
             v->firstBelow = u;
             u->firstAbove = v;
         }
     }
-    
+
     if ( ((pass == 4) && (e->type == Open)) ||
          ((pass == 4) && (e->type == SegOpen)) ||
          ((pass == 1) && (e->type == SegClose)) ||
@@ -1664,9 +1675,9 @@ static void processShiftEvent(Router *router, NodeSet& scanline,
             double minLimit = v->firstObstacleAbove(dim);
             double maxLimit = v->firstObstacleBelow(dim);
 
-            v->ss->minSpaceLimit = 
+            v->ss->minSpaceLimit =
                     std::max(minLimit, v->ss->minSpaceLimit);
-            v->ss->maxSpaceLimit = 
+            v->ss->maxSpaceLimit =
                     std::min(maxLimit, v->ss->maxSpaceLimit);
         }
         else
@@ -1675,13 +1686,13 @@ static void processShiftEvent(Router *router, NodeSet& scanline,
             v->markShiftSegmentsBelow(dim);
         }
     }
-    
+
     if ( ((pass == 2) && (e->type == SegClose)) ||
          ((pass == 2) && (e->type == Close)) )
     {
         // Clean up neighbour pointers.
         Node *l = v->firstAbove, *r = v->firstBelow;
-        if (l != NULL) 
+        if (l != NULL)
         {
             l->firstBelow = v->firstBelow;
         }
@@ -1698,7 +1709,7 @@ static void processShiftEvent(Router *router, NodeSet& scanline,
 }
 
 
-static void buildOrthogonalChannelInfo(Router *router, 
+static void buildOrthogonalChannelInfo(Router *router,
         const size_t dim, ShiftSegmentList& segmentList)
 {
     if (router->routingPenalty(segmentPenalty) == 0)
@@ -1710,15 +1721,15 @@ static void buildOrthogonalChannelInfo(Router *router,
 
     size_t altDim = (dim + 1) % 2;
     // For each connector.
-    for (ConnRefList::const_iterator curr = router->connRefs.begin(); 
-            curr != router->connRefs.end(); ++curr) 
+    for (ConnRefList::const_iterator curr = router->connRefs.begin();
+            curr != router->connRefs.end(); ++curr)
     {
         if ((*curr)->routingType() != ConnType_Orthogonal)
         {
             continue;
         }
         Polygon& displayRoute = (*curr)->displayRoute();
-        // Determine all line segments that we are interested in shifting. 
+        // Determine all line segments that we are interested in shifting.
         // We don't consider the first or last segment of a path.
         for (size_t i = 1; i < displayRoute.size(); ++i)
         {
@@ -1732,12 +1743,12 @@ static void buildOrthogonalChannelInfo(Router *router,
                     indexLow = i;
                     indexHigh = i - 1;
                 }
-                COLA_ASSERT(displayRoute.at(indexLow)[altDim] < 
+                COLA_ASSERT(displayRoute.at(indexLow)[altDim] <
                         displayRoute.at(indexHigh)[altDim]);
 
                 if ((i == 1) || ((i + 1) == displayRoute.size()))
                 {
-                    // The first and last segment of a connector can't be 
+                    // The first and last segment of a connector can't be
                     // shifted.  We call them fixed segments.  Note: this
                     // will change if we later allow connection channels.
                     segmentList.push_back(
@@ -1753,15 +1764,15 @@ static void buildOrthogonalChannelInfo(Router *router,
                 double prevPos = displayRoute.ps[i - 2][dim];
                 double nextPos = displayRoute.ps[i + 1][dim];
                 if (((prevPos < displayRoute.ps[i][dim]) &&
-                     (nextPos > displayRoute.ps[i][dim])) 
+                     (nextPos > displayRoute.ps[i][dim]))
                      ||
                     ((prevPos > displayRoute.ps[i][dim]) &&
                      (nextPos < displayRoute.ps[i][dim])) )
                 {
                     isSBend = true;
 
-                    // Determine limits if the s-bend is not due to an 
-                    // obstacle.  In this case we need to limit the channel 
+                    // Determine limits if the s-bend is not due to an
+                    // obstacle.  In this case we need to limit the channel
                     // to the span of the adjoining segments to this one.
                     if ((prevPos < displayRoute.ps[i][dim]) &&
                         (nextPos > displayRoute.ps[i][dim]))
@@ -1778,7 +1789,7 @@ static void buildOrthogonalChannelInfo(Router *router,
                 else
                 {
                     // isCBend: Both adjoining segments are in the same
-                    // direction.  We indicate this for later by setting 
+                    // direction.  We indicate this for later by setting
                     // the maxLim or minLim to the segment position.
                     if (prevPos < displayRoute.ps[i][dim])
                     {
@@ -1790,7 +1801,7 @@ static void buildOrthogonalChannelInfo(Router *router,
                     }
                 }
 
-                segmentList.push_back(ShiftSegment(*curr, indexLow, 
+                segmentList.push_back(ShiftSegment(*curr, indexLow,
                             indexHigh, isSBend, dim, minLim, maxLim));
             }
         }
@@ -1800,7 +1811,7 @@ static void buildOrthogonalChannelInfo(Router *router,
         // There are no segments, so we can just return now.
         return;
     }
-    
+
     // Do a sweep and shift these segments.
     const size_t n = router->shapeRefs.size();
     const size_t cpn = segmentList.size();
@@ -1821,7 +1832,7 @@ static void buildOrthogonalChannelInfo(Router *router,
 
         ++shRefIt;
     }
-    for (ShiftSegmentList::iterator curr = segmentList.begin(); 
+    for (ShiftSegmentList::iterator curr = segmentList.begin();
             curr != segmentList.end(); ++curr)
     {
         const Point& lowPt = curr->lowPoint();
@@ -1853,7 +1864,7 @@ static void buildOrthogonalChannelInfo(Router *router,
             {
                 for (unsigned j = posStartIndex; j < posFinishIndex; ++j)
                 {
-                    processShiftEvent(router, scanline, segmentList, events[j], 
+                    processShiftEvent(router, scanline, segmentList, events[j],
                             dim, pass);
                 }
             }
@@ -1868,7 +1879,7 @@ static void buildOrthogonalChannelInfo(Router *router,
             posStartIndex = i;
         }
 
-        // Do the first sweep event handling -- building the correct 
+        // Do the first sweep event handling -- building the correct
         // structure of the scanline.
         const int pass = 1;
         processShiftEvent(router, scanline, segmentList, events[i],
@@ -1886,8 +1897,8 @@ static void buildOrthogonalChannelInfo(Router *router,
 static void simplifyOrthogonalRoutes(Router *router)
 {
     // Simplify routes.
-    for (ConnRefList::const_iterator curr = router->connRefs.begin(); 
-            curr != router->connRefs.end(); ++curr) 
+    for (ConnRefList::const_iterator curr = router->connRefs.begin();
+            curr != router->connRefs.end(); ++curr)
     {
         if ((*curr)->routingType() != ConnType_Orthogonal)
         {
@@ -1898,7 +1909,7 @@ static void simplifyOrthogonalRoutes(Router *router)
 }
 
 
-static void buildOrthogonalNudgingOrderInfo(Router *router, 
+static void buildOrthogonalNudgingOrderInfo(Router *router,
         PtOrderMap& pointOrders)
 {
     // Simplify routes.
@@ -1907,46 +1918,46 @@ static void buildOrthogonalNudgingOrderInfo(Router *router,
     int crossingsN = 0;
 
     // Do segment splitting.
-    for (ConnRefList::const_iterator curr = router->connRefs.begin(); 
-            curr != router->connRefs.end(); ++curr) 
+    for (ConnRefList::const_iterator curr = router->connRefs.begin();
+            curr != router->connRefs.end(); ++curr)
     {
         if ((*curr)->routingType() != ConnType_Orthogonal)
         {
             continue;
         }
         ConnRef *conn = *curr;
-        
-        for (ConnRefList::const_iterator curr2 = router->connRefs.begin(); 
-                curr2 != router->connRefs.end(); ++curr2) 
+
+        for (ConnRefList::const_iterator curr2 = router->connRefs.begin();
+                curr2 != router->connRefs.end(); ++curr2)
         {
             if ((*curr2)->routingType() != ConnType_Orthogonal)
             {
                 continue;
             }
             ConnRef *conn2 = *curr2;
-            
+
             if (conn == conn2)
             {
                 continue;
             }
-            
+
             Avoid::Polygon& route = conn->displayRoute();
             Avoid::Polygon& route2 = conn2->displayRoute();
             splitBranchingSegments(route2, true, route);
         }
     }
 
-    for (ConnRefList::const_iterator curr = router->connRefs.begin(); 
-            curr != router->connRefs.end(); ++curr) 
+    for (ConnRefList::const_iterator curr = router->connRefs.begin();
+            curr != router->connRefs.end(); ++curr)
     {
         if ((*curr)->routingType() != ConnType_Orthogonal)
         {
             continue;
         }
         ConnRef *conn = *curr;
-        
-        for (ConnRefList::const_iterator curr2 = curr; 
-                curr2 != router->connRefs.end(); ++curr2) 
+
+        for (ConnRefList::const_iterator curr2 = curr;
+                curr2 != router->connRefs.end(); ++curr2)
         {
             if ((*curr2)->routingType() != ConnType_Orthogonal)
             {
@@ -1958,7 +1969,7 @@ static void buildOrthogonalNudgingOrderInfo(Router *router,
             {
                 continue;
             }
-            
+
             Avoid::Polygon& route = conn->displayRoute();
             Avoid::Polygon& route2 = conn2->displayRoute();
             bool checkForBranchingSegments = false;
@@ -1966,8 +1977,8 @@ static void buildOrthogonalNudgingOrderInfo(Router *router,
             for (size_t i = 1; i < route.size(); ++i)
             {
                 const bool finalSegment = ((i + 1) == route.size());
-                crossings += countRealCrossings(route2, true, route, i, 
-                        checkForBranchingSegments, finalSegment, NULL, 
+                crossings += countRealCrossings(route2, true, route, i,
+                        checkForBranchingSegments, finalSegment, NULL,
                         &pointOrders, conn2, conn).first;
             }
             if (crossings > 0)
@@ -1976,7 +1987,7 @@ static void buildOrthogonalNudgingOrderInfo(Router *router,
             }
         }
     }
-    
+
     // Sort the point orders.
     PtOrderMap::iterator finish = pointOrders.end();
     for (PtOrderMap::iterator it = pointOrders.begin(); it != finish; ++it)
@@ -1992,7 +2003,7 @@ static void buildOrthogonalNudgingOrderInfo(Router *router,
 }
 
 
-class CmpLineOrder 
+class CmpLineOrder
 {
     public:
         CmpLineOrder(PtOrderMap& ord, const size_t dim)
@@ -2007,11 +2018,11 @@ class CmpLineOrder
             {
                 *comparable = true;
             }
-            Point lhsLow  = lhs.lowPoint(); 
-            Point rhsLow  = rhs.lowPoint(); 
+            Point lhsLow  = lhs.lowPoint();
+            Point rhsLow  = rhs.lowPoint();
 #ifndef NDEBUG
-            const Point& lhsHigh = lhs.highPoint(); 
-            const Point& rhsHigh = rhs.highPoint(); 
+            const Point& lhsHigh = lhs.highPoint();
+            const Point& rhsHigh = rhs.highPoint();
 #endif
             size_t altDim = (dimension + 1) % 2;
 
@@ -2022,9 +2033,9 @@ class CmpLineOrder
             {
                 return lhsLow[dimension] < rhsLow[dimension];
             }
-            
-            // If one of these is fixed, then determine order based on 
-            // fixed segment, that is, order so the fixed segment doesn't 
+
+            // If one of these is fixed, then determine order based on
+            // fixed segment, that is, order so the fixed segment doesn't
             // block movement.
             bool oneIsFixed = false;
             const int lhsFixedOrder = lhs.fixedOrder(oneIsFixed);
@@ -2034,8 +2045,8 @@ class CmpLineOrder
                 return lhsFixedOrder < rhsFixedOrder;
             }
 
-            // C-bends that did not have a clear order with s-bends might 
-            // not have a good ordering here, so compare their order in 
+            // C-bends that did not have a clear order with s-bends might
+            // not have a good ordering here, so compare their order in
             // terms of C-bend direction and S-bends and use that if it
             // differs for the two segments.
             const int lhsOrder = lhs.order();
@@ -2056,7 +2067,7 @@ class CmpLineOrder
             {
                 // A value for rhsPos or lhsPos mean the points are not directly
                 // comparable, meaning they are at the same position but cannot
-                // overlap (they are just collinear.  The relative order for 
+                // overlap (they are just collinear.  The relative order for
                 // these segments is not important since we do not constrain
                 // them against each other.
                 //COLA_ASSERT(lhs.overlapsWith(rhs, dimension) == false);
@@ -2076,13 +2087,13 @@ class CmpLineOrder
 };
 
 
-// We can use the normaal sort algorithm for lists since it is not possible 
-// to comapre all elements, but there will be an ordering defined between 
-// most of the elements.  Hence we order these, using insertion sort, and 
-// the case of them not being able to be compared is handled by not setting 
+// We can use the normaal sort algorithm for lists since it is not possible
+// to comapre all elements, but there will be an ordering defined between
+// most of the elements.  Hence we order these, using insertion sort, and
+// the case of them not being able to be compared is handled by not setting
 // up any constraints between such segments when doing the nudging.
 //
-static ShiftSegmentList linesort(ShiftSegmentList origList, 
+static ShiftSegmentList linesort(ShiftSegmentList origList,
         CmpLineOrder& comparison)
 {
     ShiftSegmentList resultList;
@@ -2119,7 +2130,7 @@ static ShiftSegmentList linesort(ShiftSegmentList origList,
 typedef std::list<ShiftSegment *> ShiftSegmentPtrList;
 
 
-static void nudgeOrthogonalRoutes(Router *router, size_t dimension, 
+static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
         PtOrderMap& pointOrders, ShiftSegmentList& segmentList)
 {
     // Do the actual nudging.
@@ -2160,7 +2171,7 @@ static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
         }
         CmpLineOrder lineSortComp(pointOrders, dimension);
         currentRegion = linesort(currentRegion, lineSortComp);
-        
+
         if (currentRegion.size() == 1)
         {
             // Save creating the solver instance if there is just one
@@ -2188,7 +2199,7 @@ static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
                 currSegment != currentRegion.end(); ++currSegment)
         {
             Point& lowPt = currSegment->lowPoint();
-            
+
             // Create a solver variable for the position of this segment.
             int varID = freeID;
             double idealPos = lowPt[dimension];
@@ -2197,7 +2208,7 @@ static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
             {
                 COLA_ASSERT(currSegment->minSpaceLimit > -CHANNEL_MAX);
                 COLA_ASSERT(currSegment->maxSpaceLimit < CHANNEL_MAX);
-                
+
                 // For s-bends, take the middle as ideal.
                 idealPos = currSegment->minSpaceLimit +
                         ((currSegment->maxSpaceLimit -
@@ -2211,7 +2222,7 @@ static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
             }
             else
             {
-                // Set a higher weight for c-bends to stop them sometimes 
+                // Set a higher weight for c-bends to stop them sometimes
                 // getting pushed out into channels by more-free connectors
                 // to the "inner" side of them.
                 weight = strongWeight;
@@ -2234,10 +2245,10 @@ static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
                 if (currSegment->overlapsWith(*prevSeg, dimension) &&
                         (!(currSegment->fixed) || !(prevSeg->fixed)))
                 {
-                    // If there is a previous segment to the left that 
-                    // could overlap this in the shift direction, then 
+                    // If there is a previous segment to the left that
+                    // could overlap this in the shift direction, then
                     // constrain the two segments to be separated.
-                    // Though don't add the constraint if both the 
+                    // Though don't add the constraint if both the
                     // segments are fixed in place.
                     cs.push_back(new Constraint(prevVar, vs[index],
                             router->orthogonalNudgeDistance()));
@@ -2251,21 +2262,21 @@ static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
 
             if (!currSegment->fixed)
             {
-                // If this segment sees a channel boundary to its left, 
+                // If this segment sees a channel boundary to its left,
                 // then constrain its placement as such.
                 if (currSegment->minSpaceLimit > -CHANNEL_MAX)
                 {
-                    vs.push_back(new Variable(fixedID, 
+                    vs.push_back(new Variable(fixedID,
                                 currSegment->minSpaceLimit, fixedWeight));
-                    cs.push_back(new Constraint(vs[vs.size() - 1], vs[index], 
+                    cs.push_back(new Constraint(vs[vs.size() - 1], vs[index],
                                 0.0));
                 }
-                
-                // If this segment sees a channel boundary to its right, 
+
+                // If this segment sees a channel boundary to its right,
                 // then constrain its placement as such.
                 if (currSegment->maxSpaceLimit < CHANNEL_MAX)
                 {
-                    vs.push_back(new Variable(fixedID, 
+                    vs.push_back(new Variable(fixedID,
                                 currSegment->maxSpaceLimit, fixedWeight));
                     cs.push_back(new Constraint(vs[index], vs[vs.size() - 1],
                                 0.0));
@@ -2281,7 +2292,7 @@ static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
         IncSolver f(vs,cs);
         f.solve();
         bool satisfied = true;
-        for (size_t i = 0; i < vs.size(); ++i) 
+        for (size_t i = 0; i < vs.size(); ++i)
         {
             if (vs[i]->id == fixedID)
             {
@@ -2323,7 +2334,7 @@ extern void improveOrthogonalRoutes(Router *router)
     {
         // Build nudging info.
         // XXX: We need to build the point orders separately in each
-        //      dimension since things move.  There is probably a more 
+        //      dimension since things move.  There is probably a more
         //      efficient way to do this.
         PtOrderMap pointOrders;
         buildOrthogonalNudgingOrderInfo(router, pointOrders);
index 754c464b4a8098a7b8deb7045906ed0284c4f1f7..ab13a981be39f9727fe63f71854398270acb74ea 100644 (file)
  * See the file LICENSE.LGPL distributed with the library.
  *
  * Licensees holding a valid commercial license may use this file in
- * accordance with the commercial license agreement provided with the 
+ * accordance with the commercial license agreement provided with the
  * library.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  *
  * Author(s):   Michael Wybrow <mjwybrow@users.sourceforge.net>
 */
@@ -73,7 +73,7 @@ class ActionInfo {
         }
         ShapeRef *shape(void) const
         {
-            COLA_ASSERT((type == ShapeMove) || (type == ShapeAdd) || 
+            COLA_ASSERT((type == ShapeMove) || (type == ShapeAdd) ||
                     (type == ShapeRemove));
             return (static_cast<ShapeRef *> (objPtr));
         }
@@ -189,8 +189,8 @@ void Router::modifyConnector(ConnRef *conn, const unsigned int type,
         const ConnEnd& connEnd)
 {
     ActionInfo modInfo(ConnChange, conn);
-    
-    ActionInfoList::iterator found = 
+
+    ActionInfoList::iterator found =
             find(actionList.begin(), actionList.end(), modInfo);
     if (found == actionList.end())
     {
@@ -212,8 +212,8 @@ void Router::modifyConnector(ConnRef *conn, const unsigned int type,
 void Router::modifyConnector(ConnRef *conn)
 {
     ActionInfo modInfo(ConnChange, conn);
-    
-    ActionInfoList::iterator found = 
+
+    ActionInfoList::iterator found =
             find(actionList.begin(), actionList.end(), modInfo);
     if (found == actionList.end())
     {
@@ -231,7 +231,7 @@ void Router::removeQueuedConnectorActions(ConnRef *conn)
 {
     ActionInfo modInfo(ConnChange, conn);
 
-    ActionInfoList::iterator found = 
+    ActionInfoList::iterator found =
             find(actionList.begin(), actionList.end(), modInfo);
     if (found != actionList.end())
     {
@@ -245,14 +245,14 @@ void Router::addShape(ShapeRef *shape)
     // There shouldn't be remove events or move events for the same shape
     // already in the action list.
     // XXX: Possibly we could handle this by ordering them intelligently.
-    COLA_ASSERT(find(actionList.begin(), actionList.end(), 
+    COLA_ASSERT(find(actionList.begin(), actionList.end(),
                 ActionInfo(ShapeRemove, shape)) == actionList.end());
-    COLA_ASSERT(find(actionList.begin(), actionList.end(), 
+    COLA_ASSERT(find(actionList.begin(), actionList.end(),
                 ActionInfo(ShapeMove, shape)) == actionList.end());
 
     ActionInfo addInfo(ShapeAdd, shape);
-    
-    ActionInfoList::iterator found = 
+
+    ActionInfoList::iterator found =
             find(actionList.begin(), actionList.end(), addInfo);
     if (found == actionList.end())
     {
@@ -268,14 +268,14 @@ void Router::addShape(ShapeRef *shape)
 
 void Router::removeShape(ShapeRef *shape)
 {
-    // There shouldn't be add events events for the same shape already 
+    // There shouldn't be add events events for the same shape already
     // in the action list.
     // XXX: Possibly we could handle this by ordering them intelligently.
-    COLA_ASSERT(find(actionList.begin(), actionList.end(), 
+    COLA_ASSERT(find(actionList.begin(), actionList.end(),
                 ActionInfo(ShapeAdd, shape)) == actionList.end());
 
     // Delete any ShapeMove entries for this shape in the action list.
-    ActionInfoList::iterator found = find(actionList.begin(), 
+    ActionInfoList::iterator found = find(actionList.begin(),
             actionList.end(), ActionInfo(ShapeMove, shape));
     if (found != actionList.end())
     {
@@ -306,16 +306,16 @@ void Router::moveShape(ShapeRef *shape, const double xDiff, const double yDiff)
 }
 
 
-void Router::moveShape(ShapeRef *shape, const Polygon& newPoly, 
+void Router::moveShape(ShapeRef *shape, const Polygon& newPoly,
         const bool first_move)
 {
     // There shouldn't be remove events or add events for the same shape
     // already in the action list.
     // XXX: Possibly we could handle this by ordering them intelligently.
-    COLA_ASSERT(find(actionList.begin(), actionList.end(), 
+    COLA_ASSERT(find(actionList.begin(), actionList.end(),
                 ActionInfo(ShapeRemove, shape)) == actionList.end());
-    
-    if (find(actionList.begin(), actionList.end(), 
+
+    if (find(actionList.begin(), actionList.end(),
                 ActionInfo(ShapeAdd, shape)) != actionList.end())
     {
         // The Add is enough, no need for the Move action too.
@@ -325,7 +325,7 @@ void Router::moveShape(ShapeRef *shape, const Polygon& newPoly,
     ActionInfo moveInfo(ShapeMove, shape, newPoly, first_move);
     // Sanely cope with the case where the user requests moving the same
     // shape multiple times before rerouting connectors.
-    ActionInfoList::iterator found = 
+    ActionInfoList::iterator found =
             find(actionList.begin(), actionList.end(), moveInfo);
 
     if (found != actionList.end())
@@ -339,7 +339,7 @@ void Router::moveShape(ShapeRef *shape, const Polygon& newPoly,
         // leave the firstMove setting alone.
         found->newPoly = newPoly;
     }
-    else 
+    else
     {
         actionList.push_back(moveInfo);
     }
@@ -380,7 +380,7 @@ void Router::destroyOrthogonalVisGraph(void)
 
 void Router::regenerateStaticBuiltGraph(void)
 {
-    // Here we do talks involved in updating the static-built visibility 
+    // Here we do talks involved in updating the static-built visibility
     // graph (if necessary) before we do any routing.
     if (_staticGraphInvalidated)
     {
@@ -391,7 +391,7 @@ void Router::regenerateStaticBuiltGraph(void)
             timers.Register(tmOrthogGraph, timerStart);
             // Regenerate a new visibility graph.
             generateStaticOrthogonalVisGraph(this);
-            
+
             timers.Stop();
         }
         _staticGraphInvalidated = false;
@@ -401,11 +401,11 @@ void Router::regenerateStaticBuiltGraph(void)
 
 bool Router::shapeInQueuedActionList(ShapeRef *shape) const
 {
-    bool foundAdd = find(actionList.begin(), actionList.end(), 
+    bool foundAdd = find(actionList.begin(), actionList.end(),
                 ActionInfo(ShapeAdd, shape)) != actionList.end();
-    bool foundRem = find(actionList.begin(), actionList.end(), 
+    bool foundRem = find(actionList.begin(), actionList.end(),
                 ActionInfo(ShapeRemove, shape)) != actionList.end();
-    bool foundMove = find(actionList.begin(), actionList.end(), 
+    bool foundMove = find(actionList.begin(), actionList.end(),
                 ActionInfo(ShapeMove, shape)) != actionList.end();
 
     return (foundAdd || foundRem || foundMove);
@@ -456,21 +456,21 @@ bool Router::processTransaction(void)
 
         // o  Remove entries related to this shape's vertices
         shape->removeFromGraph();
-        
+
         if (SelectiveReroute && (!isMove || notPartialTime || first_move))
         {
             markConnectors(shape);
         }
 
         adjustContainsWithDel(pid);
-        
+
         // Ignore this shape for visibility.
         // XXX: We don't really need to do this if we're not using Partial
         //      Feedback.  Without this the blocked edges still route
         //      around the shape until it leaves the connector.
         shape->makeInactive();
     }
-    
+
     if (seenShapeMovesOrDeletes && _polyLineRouting)
     {
         if (InvisibilityGrph)
@@ -478,7 +478,7 @@ bool Router::processTransaction(void)
             for (curr = actionList.begin(); curr != finish; ++curr)
             {
                 ActionInfo& actInf = *curr;
-                if (!((actInf.type == ShapeRemove) || 
+                if (!((actInf.type == ShapeRemove) ||
                             (actInf.type == ShapeMove)))
                 {
                     // Not a move or remove action, so don't do anything.
@@ -513,7 +513,7 @@ bool Router::processTransaction(void)
 
         // Restore this shape for visibility.
         shape->makeActive();
-        
+
         if (isMove)
         {
             shape->setNewPoly(newPoly);
@@ -559,7 +559,7 @@ bool Router::processTransaction(void)
     }
     // Clear the actionList.
     actionList.clear();
-    
+
     _staticGraphInvalidated = true;
     rerouteAndCallbackConnectors();
 
@@ -570,7 +570,7 @@ bool Router::processTransaction(void)
 void Router::addCluster(ClusterRef *cluster)
 {
     cluster->makeActive();
-    
+
     unsigned int pid = cluster->id();
     ReferencingPolygon& poly = cluster->polygon();
 
@@ -581,9 +581,9 @@ void Router::addCluster(ClusterRef *cluster)
 void Router::delCluster(ClusterRef *cluster)
 {
     cluster->makeInactive();
-    
+
     unsigned int pid = cluster->id();
-    
+
     adjustClustersWithDel(pid);
 }
 
@@ -605,9 +605,9 @@ unsigned int Router::assignId(const unsigned int suggestedId)
 {
     // If the suggestedId is zero, then we assign the object the next
     // smallest unassigned ID, otherwise we trust the ID given is unique.
-    unsigned int assignedId = (suggestedId == 0) ? 
+    unsigned int assignedId = (suggestedId == 0) ?
             (_largestAssignedId + 1) : suggestedId;
-    
+
     // Have the router record if this ID is larger than the _largestAssignedId.
     _largestAssignedId = std::max(_largestAssignedId, assignedId);
 
@@ -619,17 +619,17 @@ unsigned int Router::assignId(const unsigned int suggestedId)
 
 
     // Returns whether the given ID is unique among all objects known by the
-    // router.  Outputs a warning if the ID is found ore than once. 
+    // router.  Outputs a warning if the ID is found ore than once.
     // It is expected this is only going to be called from assertions while
     // debugging, so efficiency is not an issue and we just iterate over all
     // objects.
-bool Router::idIsUnique(const unsigned int id) const 
+bool Router::idIsUnique(const unsigned int id) const
 {
     unsigned int count = 0;
 
     // Examine shapes.
-    for (ShapeRefList::const_iterator i = shapeRefs.begin(); 
-            i != shapeRefs.end(); ++i) 
+    for (ShapeRefList::const_iterator i = shapeRefs.begin();
+            i != shapeRefs.end(); ++i)
     {
         if ((*i)->id() == id)
         {
@@ -638,8 +638,8 @@ bool Router::idIsUnique(const unsigned int id) const
     }
 
     // Examine connectors.
-    for (ConnRefList::const_iterator i = connRefs.begin(); 
-            i != connRefs.end(); ++i) 
+    for (ConnRefList::const_iterator i = connRefs.begin();
+            i != connRefs.end(); ++i)
     {
         if ((*i)->id() == id)
         {
@@ -648,8 +648,8 @@ bool Router::idIsUnique(const unsigned int id) const
     }
 
     // Examine clusters.
-    for (ClusterRefList::const_iterator i = clusterRefs.begin(); 
-            i != clusterRefs.end(); ++i) 
+    for (ClusterRefList::const_iterator i = clusterRefs.begin();
+            i != clusterRefs.end(); ++i)
     {
         if ((*i)->id() == id)
         {
@@ -679,13 +679,13 @@ void Router::attachedConns(IntList &conns, const unsigned int shapeId,
         const unsigned int type)
 {
     ConnRefList::const_iterator fin = connRefs.end();
-    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i) 
+    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i)
     {
-        if ((type & runningTo) && ((*i)->_dstId == shapeId)) 
+        if ((type & runningTo) && ((*i)->_dstId == shapeId))
         {
             conns.push_back((*i)->_id);
         }
-        else if ((type & runningFrom) && ((*i)->_srcId == shapeId)) 
+        else if ((type & runningFrom) && ((*i)->_srcId == shapeId))
         {
             conns.push_back((*i)->_id);
         }
@@ -699,9 +699,9 @@ void Router::attachedShapes(IntList &shapes, const unsigned int shapeId,
         const unsigned int type)
 {
     ConnRefList::const_iterator fin = connRefs.end();
-    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i) 
+    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i)
     {
-        if ((type & runningTo) && ((*i)->_dstId == shapeId)) 
+        if ((type & runningTo) && ((*i)->_dstId == shapeId))
         {
             if ((*i)->_srcId != 0)
             {
@@ -709,7 +709,7 @@ void Router::attachedShapes(IntList &shapes, const unsigned int shapeId,
                 shapes.push_back((*i)->_srcId);
             }
         }
-        else if ((type & runningFrom) && ((*i)->_srcId == shapeId)) 
+        else if ((type & runningFrom) && ((*i)->_srcId == shapeId))
         {
             if ((*i)->_dstId != 0)
             {
@@ -721,19 +721,19 @@ void Router::attachedShapes(IntList &shapes, const unsigned int shapeId,
 }
 
 
-    // It's intended this function is called after visibility changes 
-    // resulting from shape movement have happened.  It will alert 
+    // It's intended this function is called after visibility changes
+    // resulting from shape movement have happened.  It will alert
     // rerouted connectors (via a callback) that they need to be redrawn.
 void Router::rerouteAndCallbackConnectors(void)
 {
     std::set<ConnRef *> reroutedConns;
     ConnRefList::const_iterator fin = connRefs.end();
-    
-    // Updating the orthogonal visibility graph if necessary. 
+
+    // Updating the orthogonal visibility graph if necessary.
     regenerateStaticBuiltGraph();
 
     timers.Register(tmOrthogRoute, timerStart);
-    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i) 
+    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i)
     {
         (*i)->_needs_repaint = false;
         bool rerouted = (*i)->generatePath();
@@ -751,7 +751,7 @@ void Router::rerouteAndCallbackConnectors(void)
     improveOrthogonalRoutes(this);
 
     // Alert connectors that they need redrawing.
-    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i) 
+    for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i)
     {
         (*i)->_needs_repaint = true;
         (*i)->performCallback();
@@ -770,18 +770,18 @@ void Router::improveCrossings(void)
         // No penalties, return.
         return;
     }
-    
+
     // Find crossings and reroute connectors.
     _inCrossingPenaltyReroutingStage = true;
     ConnRefSet crossingConns;
     ConnRefList::iterator fin = connRefs.end();
-    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) 
+    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i)
     {
         Avoid::Polygon& iRoute = (*i)->routeRef();
         ConnRefList::iterator j = i;
-        for (++j; j != fin; ++j) 
+        for (++j; j != fin; ++j)
         {
-            if ((crossingConns.find(*i) != crossingConns.end()) && 
+            if ((crossingConns.find(*i) != crossingConns.end()) &&
                     (crossingConns.find(*j) != crossingConns.end()))
             {
                 // We already know both these have crossings.
@@ -795,13 +795,13 @@ void Router::improveCrossings(void)
             {
                 const bool finalSegment = ((jInd + 1) == jRoute.size());
                 CrossingsInfoPair crossingInfo = countRealCrossings(
-                        iRoute, true, jRoute, jInd, false, 
+                        iRoute, true, jRoute, jInd, false,
                         finalSegment, NULL, NULL, *i, *j);
-                
-                if ((shared_path_penalty > 0) && 
-                    (crossingInfo.second & CROSSING_SHARES_PATH) && 
-                    (crossingInfo.second & CROSSING_SHARES_FIXED_SEGMENT) && 
-                    !(crossingInfo.second & CROSSING_SHARES_PATH_AT_END)) 
+
+                if ((shared_path_penalty > 0) &&
+                    (crossingInfo.second & CROSSING_SHARES_PATH) &&
+                    (crossingInfo.second & CROSSING_SHARES_FIXED_SEGMENT) &&
+                    !(crossingInfo.second & CROSSING_SHARES_PATH_AT_END))
                 {
                     // We are penalising fixedSharedPaths and there is a
                     // fixedSharedPath.
@@ -823,7 +823,7 @@ void Router::improveCrossings(void)
         }
     }
 
-    for (ConnRefSet::iterator i = crossingConns.begin(); 
+    for (ConnRefSet::iterator i = crossingConns.begin();
             i != crossingConns.end(); ++i)
     {
         ConnRef *conn = *i;
@@ -831,7 +831,7 @@ void Router::improveCrossings(void)
         // XXX: Could we free these routes here for extra savings?
         // conn->freeRoutes();
     }
-    for (ConnRefSet::iterator i = crossingConns.begin(); 
+    for (ConnRefSet::iterator i = crossingConns.begin();
             i != crossingConns.end(); ++i)
     {
         ConnRef *conn = *i;
@@ -862,9 +862,9 @@ void Router::newBlockingShape(const Polygon& poly, int pid)
             bool blocked = false;
 
             bool countBorder = false;
-            bool ep_in_poly1 = !(eID1.isShape) ? 
+            bool ep_in_poly1 = !(eID1.isShape) ?
                     inPoly(poly, e1, countBorder) : false;
-            bool ep_in_poly2 = !(eID2.isShape) ? 
+            bool ep_in_poly2 = !(eID2.isShape) ?
                     inPoly(poly, e2, countBorder) : false;
             if (ep_in_poly1 || ep_in_poly2)
             {
@@ -879,7 +879,7 @@ void Router::newBlockingShape(const Polygon& poly, int pid)
                 size_t pt_n = (pt_i == (poly.size() - 1)) ? 0 : pt_i + 1;
                 const Point& pi = poly.ps[pt_i];
                 const Point& pn = poly.ps[pt_n];
-                if (segmentShapeIntersect(e1, e2, pi, pn, 
+                if (segmentShapeIntersect(e1, e2, pi, pn,
                         seenIntersectionAtEndpoint))
                 {
                     blocked = true;
@@ -983,7 +983,7 @@ void Router::generateContains(VertInf *pt)
 
     // Computer enclosing Clusters
     ClusterRefList::const_iterator clFinish = clusterRefs.end();
-    for (ClusterRefList::const_iterator i = clusterRefs.begin(); 
+    for (ClusterRefList::const_iterator i = clusterRefs.begin();
             i != clFinish; ++i)
     {
         if (inPolyGen((*i)->polygon(), pt->point))
@@ -994,7 +994,7 @@ void Router::generateContains(VertInf *pt)
 }
 
 
-void Router::adjustClustersWithAdd(const PolygonInterface& poly, 
+void Router::adjustClustersWithAdd(const PolygonInterface& poly,
         const int p_cluster)
 {
     for (VertInf *k = vertices.connsBegin(); k != vertices.shapesBegin();
@@ -1422,11 +1422,11 @@ static void reduceRange(double& val)
 bool Router::existsOrthogonalPathOverlap(void)
 {
     ConnRefList::iterator fin = connRefs.end();
-    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) 
+    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i)
     {
         Avoid::Polygon iRoute = (*i)->displayRoute();
         ConnRefList::iterator j = i;
-        for (++j; j != fin; ++j) 
+        for (++j; j != fin; ++j)
         {
             // Determine if this pair overlap
             Avoid::Polygon jRoute = (*j)->displayRoute();
@@ -1435,12 +1435,12 @@ bool Router::existsOrthogonalPathOverlap(void)
             {
                 const bool finalSegment = ((jInd + 1) == jRoute.size());
                 CrossingsInfoPair crossingInfo = countRealCrossings(
-                        iRoute, true, jRoute, jInd, true, 
+                        iRoute, true, jRoute, jInd, true,
                         finalSegment, NULL, NULL, *i, *j);
-                
-                if ((crossingInfo.second & CROSSING_SHARES_PATH) && 
-                    (crossingInfo.second & CROSSING_SHARES_FIXED_SEGMENT) && 
-                    !(crossingInfo.second & CROSSING_SHARES_PATH_AT_END)) 
+
+                if ((crossingInfo.second & CROSSING_SHARES_PATH) &&
+                    (crossingInfo.second & CROSSING_SHARES_FIXED_SEGMENT) &&
+                    !(crossingInfo.second & CROSSING_SHARES_PATH_AT_END))
                 {
                     // We looking for fixedSharedPaths and there is a
                     // fixedSharedPath.
@@ -1456,11 +1456,11 @@ bool Router::existsOrthogonalPathOverlap(void)
 bool Router::existsOrthogonalTouchingCorners(void)
 {
     ConnRefList::iterator fin = connRefs.end();
-    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) 
+    for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i)
     {
         Avoid::Polygon iRoute = (*i)->displayRoute();
         ConnRefList::iterator j = i;
-        for (++j; j != fin; ++j) 
+        for (++j; j != fin; ++j)
         {
             // Determine if this pair overlap
             Avoid::Polygon jRoute = (*j)->displayRoute();
@@ -1469,10 +1469,10 @@ bool Router::existsOrthogonalTouchingCorners(void)
             {
                 const bool finalSegment = ((jInd + 1) == jRoute.size());
                 CrossingsInfoPair crossingInfo = countRealCrossings(
-                        iRoute, true, jRoute, jInd, true, 
+                        iRoute, true, jRoute, jInd, true,
                         finalSegment, NULL, NULL, *i, *j);
-                
-                if (crossingInfo.second & CROSSING_TOUCHES) 
+
+                if (crossingInfo.second & CROSSING_TOUCHES)
                 {
                     return true;
                 }
@@ -1514,7 +1514,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
 
         reduceRange(p.x);
         reduceRange(p.y);
-        
+
         if (p.x > -LIMIT)
         {
             minX = std::min(minX, p.x);
@@ -1550,8 +1550,8 @@ void Router::outputInstanceToSVG(std::string instanceName)
     fprintf(fp, "            PolyLineRouting | OrthogonalRouting);\n");
     for (size_t p = 0; p < lastPenaltyMarker; ++p)
     {
-        fprintf(fp, "    router->setRoutingPenalty((PenaltyType)%lu, %g);\n", 
-                p, _routingPenalties[p]);
+        fprintf(fp, "    router->setRoutingPenalty((PenaltyType)%lu, %g);\n",
+                static_cast<long unsigned int>(p), _routingPenalties[p]);
     }
     fprintf(fp, "    router->setOrthogonalNudgeDistance(%g);\n\n",
             orthogonalNudgeDistance());
@@ -1559,12 +1559,12 @@ void Router::outputInstanceToSVG(std::string instanceName)
     while (shRefIt != shapeRefs.end())
     {
         ShapeRef *shRef = *shRefIt;
-        fprintf(fp, "    Polygon poly%u(%lu);\n", 
-                shRef->id(), shRef->polygon().size());
+        fprintf(fp, "    Polygon poly%u(%lu);\n",
+                shRef->id(), static_cast<long unsigned int>(shRef->polygon().size()));
         for (size_t i = 0; i < shRef->polygon().size(); ++i)
         {
-            fprintf(fp, "    poly%u.ps[%lu] = Point(%g, %g);\n", 
-                    shRef->id(), i, shRef->polygon().at(i).x,
+            fprintf(fp, "    poly%u.ps[%lu] = Point(%g, %g);\n",
+                    shRef->id(), static_cast<long unsigned int>(i), shRef->polygon().at(i).x,
                     shRef->polygon().at(i).y);
         }
         fprintf(fp, "    ShapeRef *shapeRef%u = new ShapeRef(router, poly%u, "
@@ -1594,7 +1594,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
             fprintf(fp, "    connRef%u->setDestEndpoint(dstPt%u);\n",
                     connRef->id(), connRef->id());
         }
-        fprintf(fp, "    connRef%u->setRoutingType((ConnType)%u);\n\n", 
+        fprintf(fp, "    connRef%u->setRoutingType((ConnType)%u);\n\n",
                 connRef->id(), connRef->routingType());
         ++revConnRefIt;
     }
@@ -1605,20 +1605,20 @@ void Router::outputInstanceToSVG(std::string instanceName)
     fprintf(fp, "};\n");
     fprintf(fp, "-->\n");
 
-    
+
     fprintf(fp, "<g inkscape:groupmode=\"layer\" "
             "inkscape:label=\"ShapesPoly\">\n");
     shRefIt = shapeRefs.begin();
     while (shRefIt != shapeRefs.end())
     {
         ShapeRef *shRef = *shRefIt;
-    
+
         fprintf(fp, "<path id=\"poly-%u\" style=\"stroke-width: 1px; "
-                "stroke: black; fill: blue; fill-opacity: 0.3;\" d=\"", 
+                "stroke: black; fill: blue; fill-opacity: 0.3;\" d=\"",
                 shRef->id());
         for (size_t i = 0; i < shRef->polygon().size(); ++i)
         {
-            fprintf(fp, "%c %g,%g ", ((i == 0) ? 'M' : 'L'), 
+            fprintf(fp, "%c %g,%g ", ((i == 0) ? 'M' : 'L'),
                     shRef->polygon().at(i).x, shRef->polygon().at(i).y);
         }
         fprintf(fp, "Z\" />\n");
@@ -1635,7 +1635,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
         ShapeRef *shRef = *shRefIt;
         double minX, minY, maxX, maxY;
         shRef->polygon().getBoundingRect(&minX, &minY, &maxX, &maxY);
-    
+
         fprintf(fp, "<rect id=\"rect-%u\" x=\"%g\" y=\"%g\" width=\"%g\" height=\"%g\" "
                 "style=\"stroke-width: 1px; stroke: black; fill: blue; fill-opacity: 0.3;\" />\n",
                 shRef->id(), minX, minY, maxX - minX, maxY - minY);
@@ -1664,16 +1664,16 @@ void Router::outputInstanceToSVG(std::string instanceName)
         std::pair<Point, Point> ptpair = t->points();
         Point p1 = ptpair.first;
         Point p2 = ptpair.second;
-        
+
         reduceRange(p1.x);
         reduceRange(p1.y);
         reduceRange(p2.x);
         reduceRange(p2.y);
-        
+
         fprintf(fp, "<path d=\"M %g,%g L %g,%g\" "
-                "style=\"fill: none; stroke: %s; stroke-width: 1px;\" />\n", 
+                "style=\"fill: none; stroke: %s; stroke-width: 1px;\" />\n",
                 p1.x, p1.y, p2.x, p2.y,
-                (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" : 
+                (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" :
                 "red");
     }
     fprintf(fp, "</g>\n");
@@ -1694,16 +1694,16 @@ void Router::outputInstanceToSVG(std::string instanceName)
         std::pair<Point, Point> ptpair = t->points();
         Point p1 = ptpair.first;
         Point p2 = ptpair.second;
-        
+
         reduceRange(p1.x);
         reduceRange(p1.y);
         reduceRange(p2.x);
         reduceRange(p2.y);
-        
+
         fprintf(fp, "<path d=\"M %g,%g L %g,%g\" "
-                "style=\"fill: none; stroke: %s; stroke-width: 1px;\" />\n", 
+                "style=\"fill: none; stroke: %s; stroke-width: 1px;\" />\n",
                 p1.x, p1.y, p2.x, p2.y,
-                (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" : 
+                (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" :
                 "red");
     }
     fprintf(fp, "</g>\n");
@@ -1718,18 +1718,18 @@ void Router::outputInstanceToSVG(std::string instanceName)
         std::pair<Point, Point> ptpair = t->points();
         Point p1 = ptpair.first;
         Point p2 = ptpair.second;
-        
+
         reduceRange(p1.x);
         reduceRange(p1.y);
         reduceRange(p2.x);
         reduceRange(p2.y);
-        
+
         std::pair<VertID, VertID> ids = t->ids();
 
         fprintf(fp, "<path d=\"M %g,%g L %g,%g\" "
-                "style=\"fill: none; stroke: %s; stroke-width: 1px;\" />\n", 
+                "style=\"fill: none; stroke: %s; stroke-width: 1px;\" />\n",
                 p1.x, p1.y, p2.x, p2.y,
-                (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" : 
+                (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" :
                 "red");
     }
     fprintf(fp, "</g>\n");
@@ -1742,7 +1742,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
     while (connRefIt != connRefs.end())
     {
         ConnRef *connRef = *connRefIt;
-    
+
         PolyLine route = connRef->route();
         if (!route.empty())
         {
@@ -1762,7 +1762,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
             fprintf(fp, "style=\"fill: none; stroke: black; "
                     "stroke-width: 1px;\" />\n");
         }
-        
+
         ++connRefIt;
     }
     fprintf(fp, "</g>\n");
@@ -1775,7 +1775,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
     while (connRefIt != connRefs.end())
     {
         ConnRef *connRef = *connRefIt;
-    
+
         PolyLine route = connRef->displayRoute().curvedPolyline(8);
         if (!route.empty())
         {
@@ -1785,7 +1785,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
             {
                 if (route.ts[i] == 'C')
                 {
-                    fprintf(fp, "%c %g,%g %g,%g %g,%g", route.ts[i], 
+                    fprintf(fp, "%c %g,%g %g,%g %g,%g", route.ts[i],
                             route.ps[i].x, route.ps[i].y,
                             route.ps[i+1].x, route.ps[i+1].y,
                             route.ps[i+2].x, route.ps[i+2].y);
@@ -1793,7 +1793,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
                 }
                 else
                 {
-                    fprintf(fp, "%c %g,%g ", route.ts[i], 
+                    fprintf(fp, "%c %g,%g ", route.ts[i],
                             route.ps[i].x, route.ps[i].y);
                 }
             }
@@ -1807,7 +1807,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
             fprintf(fp, "style=\"fill: none; stroke: black; "
                     "stroke-width: 1px;\" />\n");
         }
-        
+
         ++connRefIt;
     }
     fprintf(fp, "</g>\n");
@@ -1820,7 +1820,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
     while (connRefIt != connRefs.end())
     {
         ConnRef *connRef = *connRefIt;
-    
+
         PolyLine route = connRef->displayRoute();
         if (!route.empty())
         {
@@ -1840,7 +1840,7 @@ void Router::outputInstanceToSVG(std::string instanceName)
             fprintf(fp, "style=\"fill: none; stroke: black; "
                     "stroke-width: 1px;\" />\n");
         }
-        
+
         ++connRefIt;
     }
     fprintf(fp, "</g>\n");
index c9a072375e5cc658db8b9a679360409e90a0bea6..19d360375d2f1c466659654faf35030b198d3604 100644 (file)
  * See the file LICENSE.LGPL distributed with the library.
  *
  * Licensees holding a valid commercial license may use this file in
- * accordance with the commercial license agreement provided with the 
+ * accordance with the commercial license agreement provided with the
  * library.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  *
  * Author(s):   Tim Dwyer  <Tim.Dwyer@csse.monash.edu.au>
  *
@@ -52,11 +52,11 @@ namespace Avoid {
 static const double ZERO_UPPERBOUND=-1e-10;
 static const double LAGRANGIAN_TOLERANCE=-1e-4;
 
-IncSolver::IncSolver(vector<Variable*> const &vs, vector<Constraint *> const &cs) 
-    : m(cs.size()), 
-      cs(cs), 
-      n(vs.size()), 
-      vs(vs) 
+IncSolver::IncSolver(vector<Variable*> const &vs, vector<Constraint *> const &cs)
+    : m(cs.size()),
+      cs(cs),
+      n(vs.size()),
+      vs(vs)
 {
     for(unsigned i=0;i<n;++i) {
         vs[i]->in.clear();
@@ -232,7 +232,7 @@ bool IncSolver::solve() {
 #endif
     }
     copyResult();
-    return bs->size()!=n; 
+    return bs->size()!=n;
 }
 /*
  * incremental version of satisfy that allows refinement after blocks are
@@ -244,8 +244,8 @@ bool IncSolver::solve() {
  *
  * Note: there is a special case to handle when the most violated constraint
  * is between two variables in the same block.  Then, we must split the block
- * over an active constraint between the two variables.  We choose the 
- * constraint with the most negative lagrangian multiplier. 
+ * over an active constraint between the two variables.  We choose the
+ * constraint with the most negative lagrangian multiplier.
  */
 bool IncSolver::satisfy() {
 #ifdef LIBVPSC_LOGGING
@@ -256,8 +256,8 @@ bool IncSolver::satisfy() {
     //long splitCtr = 0;
     Constraint* v = NULL;
     //CBuffer buffer(inactive);
-    while((v=mostViolated(inactive))
-            &&(v->equality || v->slack() < ZERO_UPPERBOUND && !v->active)) 
+    while((v = mostViolated(inactive))
+          && (v->equality || ((v->slack() < ZERO_UPPERBOUND) && !v->active)))
     {
         COLA_ASSERT(!v->active);
         Block *lb = v->left->block, *rb = v->right->block;
@@ -411,7 +411,7 @@ Constraint* IncSolver::mostViolated(Constraints &l) {
         Constraint *c=*i;
         double slack = c->slack();
         if(c->equality || slack < minSlack) {
-            minSlack=slack;    
+            minSlack=slack;
             v=c;
             deletePoint=i;
             if(c->equality) break;
@@ -421,7 +421,8 @@ Constraint* IncSolver::mostViolated(Constraints &l) {
     // move the last element over the deletePoint and resize
     // downwards.  There is always at least 1 element in the
     // vector because of search.
-    if(deletePoint != end && (minSlack < ZERO_UPPERBOUND && !v->active || v->equality)) {
+    // TODO check this logic and add parens:
+    if((deletePoint != end) && ((minSlack < ZERO_UPPERBOUND) && !v->active || v->equality)) {
         *deletePoint = l[l.size()-1];
         l.resize(l.size()-1);
     }
@@ -457,7 +458,7 @@ Blocks::~Blocks(void)
 }
 
 /*
- * returns a list of variables with total ordering determined by the constraint 
+ * returns a list of variables with total ordering determined by the constraint
  * DAG
  */
 list<Variable*> *Blocks::totalOrder() {
@@ -482,7 +483,7 @@ void Blocks::dfsVisit(Variable *v, list<Variable*> *order) {
         if(!c->right->visited) {
             dfsVisit(c->right, order);
         }
-    }    
+    }
 #ifdef LIBVPSC_LOGGING
     ofstream f(LOGFILE,ios::app);
     f<<"  order="<<*v<<endl;
@@ -493,7 +494,7 @@ void Blocks::dfsVisit(Variable *v, list<Variable*> *order) {
  * Processes incoming constraints, most violated to least, merging with the
  * neighbouring (left) block until no more violated constraints are found
  */
-void Blocks::mergeLeft(Block *r) {    
+void Blocks::mergeLeft(Block *r) {
 #ifdef LIBVPSC_LOGGING
     ofstream f(LOGFILE,ios::app);
     f<<"mergeLeft called on "<<*r<<endl;
@@ -506,7 +507,7 @@ void Blocks::mergeLeft(Block *r) {
         f<<"mergeLeft on constraint: "<<*c<<endl;
 #endif
         r->deleteMinInConstraint();
-        Block *l = c->left->block;        
+        Block *l = c->left->block;
         if (l->in==NULL) l->setUpInConstraints();
         double dist = c->right->offset - c->left->offset - c->gap;
         if (r->vars->size() < l->vars->size()) {
@@ -519,22 +520,22 @@ void Blocks::mergeLeft(Block *r) {
         r->timeStamp=blockTimeCtr;
         removeBlock(l);
         c=r->findMinInConstraint();
-    }        
+    }
 #ifdef LIBVPSC_LOGGING
     f<<"merged "<<*r<<endl;
 #endif
-}    
+}
 /*
  * Symmetrical to mergeLeft
  */
-void Blocks::mergeRight(Block *l) {    
+void Blocks::mergeRight(Block *l) {
 #ifdef LIBVPSC_LOGGING
     ofstream f(LOGFILE,ios::app);
     f<<"mergeRight called on "<<*l<<endl;
-#endif    
+#endif
     l->setUpOutConstraints();
     Constraint *c = l->findMinOutConstraint();
-    while (c != NULL && c->slack()<0) {        
+    while (c != NULL && c->slack()<0) {
 #ifdef LIBVPSC_LOGGING
         f<<"mergeRight on constraint: "<<*c<<endl;
 #endif
@@ -550,7 +551,7 @@ void Blocks::mergeRight(Block *l) {
         l->mergeOut(r);
         removeBlock(r);
         c=l->findMinOutConstraint();
-    }    
+    }
 #ifdef LIBVPSC_LOGGING
     f<<"merged "<<*l<<endl;
 #endif
@@ -618,7 +619,7 @@ void PositionStats::addVariable(Variable* v) {
     /*
 #ifdef LIBVPSC_LOGGING
     ofstream f(LOGFILE,ios::app);
-    f << "adding v[" << v->id << "], blockscale=" << scale << ", despos=" 
+    f << "adding v[" << v->id << "], blockscale=" << scale << ", despos="
       << v->desiredPosition << ", ai=" << ai << ", bi=" << bi
       << ", AB=" << AB << ", AD=" << AD << ", A2=" << A2;
 #endif
@@ -692,12 +693,12 @@ void Block::setUpConstraintHeap(Heap* &h,bool in) {
         for (Cit j=cs->begin();j!=cs->end();++j) {
             Constraint *c=*j;
             c->timeStamp=blockTimeCtr;
-            if (c->left->block != this && in || c->right->block != this && !in) {
+            if (((c->left->block != this) && in) || ((c->right->block != this) && !in)) {
                 h->push(c);
             }
         }
     }
-}    
+}
 Block* Block::merge(Block* b, Constraint* c) {
 #ifdef LIBVPSC_LOGGING
     ofstream f(LOGFILE,ios::app);
@@ -772,7 +773,7 @@ void Block::mergeIn(Block *b) {
     f<<"  merged heap: "<<*in<<endl;
 #endif
 }
-void Block::mergeOut(Block *b) {    
+void Block::mergeOut(Block *b) {
     findMinOutConstraint();
     b->findMinOutConstraint();
     while (!b->out->empty())
@@ -904,21 +905,21 @@ double Block::compute_dfdv(Variable* const v, Variable* const u) {
 }
 
 // The top level v and r are variables between which we want to find the
-// constraint with the smallest lm.  
+// constraint with the smallest lm.
 // Similarly, m is initially NULL and is only assigned a value if the next
 // variable to be visited is r or if a possible min constraint is returned from
 // a nested call (rather than NULL).
 // Then, the search for the m with minimum lm occurs as we return from
-// the recursion (checking only constraints traversed left-to-right 
+// the recursion (checking only constraints traversed left-to-right
 // in order to avoid creating any new violations).
 // We also do not consider equality constraints as potential split points
 bool Block::split_path(
-    Variable* r, 
-    Variable* const v, 
-    Variable* const u, 
+    Variable* r,
+    Variable* const v,
+    Variable* const u,
     Constraint* &m,
     bool desperation=false
-    ) 
+    )
 {
     for(Cit it(v->in.begin());it!=v->in.end();++it) {
         Constraint *c=*it;
@@ -963,43 +964,43 @@ bool Block::split_path(
 }
 /*
 Block::Pair Block::compute_dfdv_between(
-        Variable* r, Variable* const v, Variable* const u, 
+        Variable* r, Variable* const v, Variable* const u,
         const Direction dir = NONE, bool changedDirection = false) {
     double dfdv=v->weight*(v->position() - v->desiredPosition);
     Constraint *m=NULL;
     for(Cit it(v->in.begin());it!=v->in.end();++it) {
         Constraint *c=*it;
         if(canFollowLeft(c,u)) {
-            if(dir==RIGHT) { 
-                changedDirection = true; 
+            if(dir==RIGHT) {
+                changedDirection = true;
             }
             if(c->left==r) {
                        r=NULL;
-                    if(!c->equality) m=c; 
+                    if(!c->equality) m=c;
             }
             Pair p=compute_dfdv_between(r,c->left,v,
                     LEFT,changedDirection);
             dfdv -= c->lm = -p.first;
-            if(r && p.second) 
+            if(r && p.second)
                 m = p.second;
         }
     }
     for(Cit it(v->out.begin());it!=v->out.end();++it) {
         Constraint *c=*it;
         if(canFollowRight(c,u)) {
-            if(dir==LEFT) { 
-                changedDirection = true; 
+            if(dir==LEFT) {
+                changedDirection = true;
             }
             if(c->right==r) {
-                       r=NULL; 
-                    if(!c->equality) m=c; 
+                       r=NULL;
+                    if(!c->equality) m=c;
             }
             Pair p=compute_dfdv_between(r,c->right,v,
                     RIGHT,changedDirection);
             dfdv += c->lm = p.first;
-            if(r && p.second) 
-                m = changedDirection && !c->equality && c->lm < p.second->lm 
-                    ? c 
+            if(r && p.second)
+                m = changedDirection && !c->equality && c->lm < p.second->lm
+                    ? c
                     : p.second;
         }
     }
@@ -1084,7 +1085,7 @@ Constraint *Block::findMinLMBetween(Variable* const lv, Variable* const rv) {
     return min_lm;
 }
 
-// populates block b by traversing the active constraint tree adding variables as they're 
+// populates block b by traversing the active constraint tree adding variables as they're
 // visited.  Starts from variable v and does not backtrack over variable u.
 void Block::populateSplitBlock(Block *b, Variable* v, Variable const* u) {
     b->addVariable(v);
@@ -1093,7 +1094,7 @@ void Block::populateSplitBlock(Block *b, Variable* v, Variable const* u) {
             populateSplitBlock(b, (*c)->left, v);
     }
     for (Cit c=v->out.begin();c!=v->out.end();++c) {
-        if (canFollowRight(*c,u)) 
+        if (canFollowRight(*c,u))
             populateSplitBlock(b, (*c)->right, v);
     }
 }
@@ -1225,7 +1226,7 @@ Constraint::Constraint(Variable *left, Variable *right, double gap, bool equalit
     //right->in.push_back(this);
 }
 Constraint::~Constraint() {
-    // see constructor: the following is just way too slow.  
+    // see constructor: the following is just way too slow.
     // Better to create a
     // new DAG on demand than maintain the lists dynamically.
     //Constraints::iterator i;
@@ -1238,10 +1239,10 @@ Constraint::~Constraint() {
     //}
     //right->in.erase(i);
 }
-double Constraint::slack() const { 
+double Constraint::slack() const {
     return unsatisfiable ? DBL_MAX
-           : right->scale * right->position() 
-         - gap - left->scale * left->position(); 
+           : right->scale * right->position()
+         - gap - left->scale * left->position();
 }
 std::ostream& operator <<(std::ostream &os, const Constraint &c)
 {
@@ -1269,11 +1270,11 @@ std::ostream& operator <<(std::ostream &os, const Constraint &c)
 bool CompareConstraints::operator() (
     Constraint *const &l, Constraint *const &r
 ) const {
-    double const sl = 
+    double const sl =
         l->left->block->timeStamp > l->timeStamp
         ||l->left->block==l->right->block
         ?-DBL_MAX:l->slack();
-    double const sr = 
+    double const sr =
         r->left->block->timeStamp > r->timeStamp
         ||r->left->block==r->right->block
         ?-DBL_MAX:r->slack();
index f389fc746af756533f509cdfc098ad56dee7eaa5..7fef86c4a3516773fc02644558d3b37654c82f80 100644 (file)
@@ -70,6 +70,7 @@ cr_cascade_new (CRStyleSheet * a_author_sheet,
 
         PRIVATE (result) = (CRCascadePriv *)g_try_malloc (sizeof (CRCascadePriv));
         if (!PRIVATE (result)) {
+                g_free(result);
                 cr_utils_trace_info ("Out of memory");
                 return NULL;
         }
index 5cd2717be6525cd5edf1a0c6ad09a689178ddaa3..4b19028f9293d14b9d378678f88decd858b0a0e2 100644 (file)
@@ -5,7 +5,6 @@ libnr_mmx_sources =     \
        libnr/have_mmx.S        \
        libnr/nr_mmx_R8G8B8A8_P_EMPTY_A8_RGBAP.S        \
        libnr/nr_mmx_R8G8B8A8_P_R8G8B8A8_P_A8_RGBAP.S   \
-       libnr/nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM.S       \
        libnr/nr_mmx_R8G8B8_R8G8B8_R8G8B8A8_P.S
 endif
 
index afc8fd987b40d0dc9c4bde8cb2c1d98be5892d48..6e03faf2ff7a48a1c0a329c03a84533319fdd1e7 100644 (file)
 #include "nr-pixops.h"
 #include "nr-matrix.h"
 
-
-#ifdef WITH_MMX
+/*#ifdef WITH_MMX
 #ifdef __cplusplus
 extern "C" {
-#endif /* __cplusplus */
-/* fixme: */
-int nr_have_mmx (void);
-void nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (unsigned char *px, int w, int h, int rs,
-                                                         const unsigned char *spx, int sw, int sh, int srs,
-                                                         const long *FFd2s, unsigned int alpha);
-void nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n (unsigned char *px, int w, int h, int rs,
-                                                         const unsigned char *spx, int sw, int sh, int srs,
-                                                         const long *FFd2s, const long *FF_S, unsigned int alpha, int dbits);
+#endif // __cplusplus
+/ * fixme: * /
+/ *int nr_have_mmx (void);
 #define NR_PIXOPS_MMX (1 && nr_have_mmx ())
 #ifdef __cplusplus
 }
 #endif //__cplusplus
 #endif
+*/
 
 /* fixme: Implement missing (Lauris) */
 /* fixme: PREMUL colors before calculating average (Lauris) */
 
 /* Fixed point precision */
 #define FBITS 12
+#define FBITS_HP 18 // In some places we need a higher precision
 
 void nr_R8G8B8A8_N_EMPTY_R8G8B8A8_N_TRANSFORM (unsigned char *px, int w, int h, int rs,
                                               const unsigned char *spx, int sw, int sh, int srs,
@@ -168,10 +163,10 @@ void nr_R8G8B8A8_N_R8G8B8A8_N_R8G8B8A8_P_TRANSFORM (unsigned char *px, int w, in
 static void
 nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (unsigned char *px, int w, int h, int rs,
                                                 const unsigned char *spx, int sw, int sh, int srs,
-                                                const long *FFd2s, unsigned int alpha)
+                                                const long long *FFd2s, unsigned int alpha)
 {
-       unsigned char *d0;
-       int FFsx0, FFsy0;
+    unsigned char *d0;
+       long long FFsx0, FFsy0;
        int x, y;
 
        d0 = px;
@@ -180,15 +175,15 @@ nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (unsigned char *px, int w, int h
 
        for (y = 0; y < h; y++) {
                unsigned char *d;
-               long FFsx, FFsy;
+               long long FFsx, FFsy;
                d = d0;
                FFsx = FFsx0;
                FFsy = FFsy0;
                for (x = 0; x < w; x++) {
                        long sx, sy;
-                       sx = FFsx >> FBITS;
+                       sx = long(FFsx >> FBITS_HP);
                        if ((sx >= 0) && (sx < sw)) {
-                               sy = FFsy >> FBITS;
+                               sy = long(FFsy >> FBITS_HP);
                                if ((sy >= 0) && (sy < sh)) {
                                        const unsigned char *s;
                                        unsigned int a;
@@ -224,11 +219,11 @@ nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (unsigned char *px, int w, int h
 static void
 nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n (unsigned char *px, int w, int h, int rs,
                                                 const unsigned char *spx, int sw, int sh, int srs,
-                                                const long *FFd2s, const long *FF_S, unsigned int alpha, int dbits)
+                                                const long long *FFd2s, const long *FF_S, unsigned int alpha, int dbits)
 {
        int size;
        unsigned char *d0;
-       int FFsx0, FFsy0;
+       long long FFsx0, FFsy0;
        int x, y;
 
        size = (1 << dbits);
@@ -242,7 +237,7 @@ nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n (unsigned char *px, int w, int h
 
        for (y = 0; y < h; y++) {
                unsigned char *d;
-               long FFsx, FFsy;
+               long long FFsx, FFsy;
                d = d0;
                FFsx = FFsx0;
                FFsy = FFsy0;
@@ -252,9 +247,9 @@ nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n (unsigned char *px, int w, int h
                        r = g = b = a = 0;
                        for (i = 0; i < size; i++) {
                                long sx, sy;
-                               sx = (FFsx + FF_S[2 * i]) >> FBITS;
+                               sx = (long (FFsx >> (FBITS_HP - FBITS)) + FF_S[2 * i]) >> FBITS;
                                if ((sx >= 0) && (sx < sw)) {
-                                       sy = (FFsy + FF_S[2 * i + 1]) >> FBITS;
+                                       sy = (long (FFsy >> (FBITS_HP - FBITS)) + FF_S[2 * i + 1]) >> FBITS;
                                        if ((sy >= 0) && (sy < sh)) {
                                                const unsigned char *s;
                                                unsigned int ca;
@@ -302,6 +297,7 @@ void nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM (unsigned char *px, int w, in
 {
        int dbits;
        long FFd2s[6];
+       long long FFd2s_HP[6]; // with higher precision
        int i;
 
        if (alpha == 0) return;
@@ -310,17 +306,11 @@ void nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM (unsigned char *px, int w, in
 
        for (i = 0; i < 6; i++) {
                FFd2s[i] = (long) (d2s[i] * (1 << FBITS) + 0.5);
+               FFd2s_HP[i] = (long long) (d2s[i] * (1 << FBITS_HP) + 0.5);;
        }
 
        if (dbits == 0) {
-#ifdef WITH_MMX
-               if (NR_PIXOPS_MMX) {
-                       /* WARNING: MMX composer REQUIRES w > 0 and h > 0 */
-                       nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (px, w, h, rs, spx, sw, sh, srs, FFd2s, alpha);
-                       return;
-               }
-#endif
-               nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (px, w, h, rs, spx, sw, sh, srs, FFd2s, alpha);
+               nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0 (px, w, h, rs, spx, sw, sh, srs, FFd2s_HP, alpha);
        } else {
                int xsize, ysize;
                long FFs_x_x_S, FFs_x_y_S, FFs_y_x_S, FFs_y_y_S;
@@ -344,14 +334,7 @@ void nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM (unsigned char *px, int w, in
                        }
                }
 
-#ifdef WITH_MMX
-               if (NR_PIXOPS_MMX) {
-                       /* WARNING: MMX composer REQUIRES w > 0 and h > 0 */
-                       nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n (px, w, h, rs, spx, sw, sh, srs, FFd2s, FF_S, alpha, dbits);
-                       return;
-               }
-#endif
-               nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n (px, w, h, rs, spx, sw, sh, srs, FFd2s, FF_S, alpha, dbits);
+               nr_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n (px, w, h, rs, spx, sw, sh, srs, FFd2s_HP, FF_S, alpha, dbits);
        }
 }
 
index 3b99678e26b40255080f69d65f685be95e78284f..74f9d036b49feee1466dd44ff36a8c946fa165a2 100644 (file)
@@ -773,6 +773,7 @@ nr_R8G8B8A8_P_EMPTY_A8_RGBA32 (unsigned char *px, int w, int h, int rs, const un
                c[3] = a;
                /* WARNING: MMX composer REQUIRES w > 0 and h > 0 */
                nr_mmx_R8G8B8A8_P_EMPTY_A8_RGBAP (px, w, h, rs, mpx, mrs, c);
+               // This mmx optimized code is approx. 2x faster than the non-optimized code below (Measured by Diederik van Lierop, 2009-12-17)
                return;
        }
 #endif
diff --git a/src/libnr/nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM.S b/src/libnr/nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM.S
deleted file mode 100644 (file)
index e30056a..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-       .file   "nr-compose-transform.c"
-
-# Ensure Inkscape is execshield protected
-       .section .note.GNU-stack
-       .previous
-       
-       .text
-       .align 2
-.globl nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0
-       .type   nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0,@function
-
-/*
- * This code is in public domain
- *
- */
-
-nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0:
-       pushl   %ebp
-       movl    %esp, %ebp
-       pushl   %ebx
-       subl    $48, %esp
-       pushl   %edi
-       pushl   %esi
-
-/* Load %mm7 with [0 0 0 0] */
-       movl    $0, %eax
-       movd    %eax, %mm7
-
-/* Load %mm6 with [128 128 128 128] */
-       movl    $0x80808080, %eax
-       movd    %eax, %mm6
-       punpcklbw %mm7, %mm6
-
-/* Load %mm5 with [255 255 255 255] */
-       movl    $0xffffffff, %eax
-       movd    %eax, %mm5
-       punpcklbw %mm7, %mm5
-
-/* Load %mm0 with [a a a a] */
-       movzbl  44(%ebp), %eax
-       movd    %eax, %mm0
-       punpcklwd %mm0, %mm0
-       punpckldq %mm0, %mm0
-
-       movl    8(%ebp), %eax
-       movl    %eax, -8(%ebp)
-       movl    40(%ebp), %eax
-       addl    $16, %eax
-       movl    (%eax), %eax
-       movl    %eax, -12(%ebp)
-       movl    40(%ebp), %eax
-       addl    $20, %eax
-       movl    (%eax), %eax
-       movl    %eax, -16(%ebp)
-       movl    $0, -24(%ebp)
-.L29:
-       movl    -24(%ebp), %eax
-       cmpl    16(%ebp), %eax
-       jl      .L32
-       jmp     .L28
-.L32:
-       movl    -8(%ebp), %edi
-
-       movl    -12(%ebp), %eax
-       movl    %eax, %esi
-       movl    -16(%ebp), %eax
-       movl    %eax, -36(%ebp)
-
-       movl    12(%ebp), %ebx
-.for_x_0:
-
-       movl    %esi, %ecx
-       cmpl    $0, %ecx
-       js      .clip_0
-       sarl    $12, %ecx
-       cmpl    28(%ebp), %ecx
-       jge     .clip_0
-       shll    $2, %ecx
-
-       movl    -36(%ebp), %eax
-       cmpl    $0, %eax
-       js      .clip_0
-       sarl    $12, %eax
-       cmpl    32(%ebp), %eax
-       jge     .clip_0
-       imull   36(%ebp), %eax
-
-       addl    %ecx, %eax
-       addl    24(%ebp), %eax
-
-/* Fg -> %mm1 */
-       movl    (%eax), %eax
-       testl   $0xff000000, %eax
-       jz      .clip_0
-       movd    %eax, %mm1
-       punpcklbw %mm7, %mm1
-
-/* [a a a 255] -> %mm3 */
-       shrl    $24, %eax
-       movl    $0x10101, %edx
-       mull    %edx
-       orl     $0xff000000, %eax
-       movd    %eax, %mm3
-       punpcklbw %mm7, %mm3
-
-/* [Fg * a] -> mm1 */
-       pmullw  %mm3, %mm1
-       paddw   %mm6, %mm1
-       movq    %mm1, %mm4
-       psrlw   $8, %mm4
-       paddw   %mm4, %mm1
-       psrlw   $8, %mm1
-
-/* Multiply by alpha */
-       pmullw  %mm0, %mm1
-       paddw   %mm6, %mm1
-       movq    %mm1, %mm4
-       psrlw   $8, %mm4
-       paddw   %mm4, %mm1
-       psrlw   $8, %mm1
-
-/* [255 - FgA] -> mm2 */
-       movq    %mm1, %mm2
-       punpckhwd %mm2, %mm2
-       punpckhdq %mm2, %mm2
-       pxor    %mm5, %mm2
-
-/* Bg -> mm3 */
-       movd    (%edi), %mm3
-       punpcklbw %mm7, %mm3
-
-/* Fg + ((255 - FgA) * Bg) / 255 */
-
-       pmullw  %mm2, %mm3
-       paddw   %mm6, %mm3
-       movq    %mm3, %mm4
-       psrlw   $8, %mm4
-       paddw   %mm4, %mm3
-       psrlw   $8, %mm3
-       paddw   %mm1, %mm3
-
-/* Store pixel */
-       packuswb %mm3, %mm3
-       movd    %mm3, (%edi)
-
-.clip_0:
-.L37:
-       movl    40(%ebp), %ecx
-       movl    (%ecx), %edx
-       addl    %edx, %esi
-       movl    4(%ecx), %edx
-       addl    %edx, -36(%ebp)
-
-       addl    $4, %edi
-
-       decl    %ebx
-       jnz     .for_x_0
-
-.L34:
-       movl    8(%ecx), %edx
-       addl    %edx, -12(%ebp)
-       movl    12(%ecx), %edx
-       addl    %edx, -16(%ebp)
-
-       movl    20(%ebp), %edx
-       leal    -8(%ebp), %eax
-       addl    %edx, (%eax)
-       leal    -24(%ebp), %eax
-       incl    (%eax)
-       jmp     .L29
-.L28:
-       emms
-       popl    %esi
-       popl    %edi
-       addl    $48, %esp
-       popl    %ebx
-       popl    %ebp
-       ret
-.Lfe2:
-       .size   nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0,.Lfe2-nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_0
-
-/*
- *
- *     dbits   52(%ebp)
- *     alpha   48(%ebp)
- *     FF_S    44(%ebp)
- *
- *     d       -32(%ebp) -> %edi
- *     i       -60(%ebp) -> %esi
- *     sx      -64(%ebp) -> %ebx
- *     sy      -68(%ebp)
- *     s       -72(%ebp)
- *
- *     %mm0    a a a a
- *     %mm1    FgA
- *     %mm2    SumFgA
- *     %mm3    a a a 255
- *     %mm4
-*/
-
-       .align 2
-.globl nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n
-       .type   nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n,@function
-nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n:
-       pushl   %ebp
-       movl    %esp, %ebp
-       pushl   %ebx
-       subl    $72, %esp
-       pushl   %edi
-       pushl   %esi
-
-/* Load %mm7 with [0 0 0 0] */
-       movl    $0, %eax
-       movd    %eax, %mm7
-
-/* Load %mm6 with [128 128 128 128] */
-       movl    $0x80808080, %eax
-       movd    %eax, %mm6
-       punpcklbw %mm7, %mm6
-
-/* Load %mm5 with [255 255 255 255] */
-       movl    $0xffffffff, %eax
-       movd    %eax, %mm5
-       punpcklbw %mm7, %mm5
-
-/* Load %mm0 with [a a a a] */
-       movzbl  48(%ebp), %eax
-       movd    %eax, %mm0
-       punpcklwd %mm0, %mm0
-       punpckldq %mm0, %mm0
-
-       movl    $1, %eax
-       movzbl  52(%ebp), %ecx
-       sall    %cl, %eax
-       movl    %eax, -8(%ebp)
-       movl    8(%ebp), %eax
-       movl    %eax, -12(%ebp)
-       movl    40(%ebp), %eax
-       addl    $16, %eax
-       movl    (%eax), %eax
-       movl    %eax, -16(%ebp)
-       movl    40(%ebp), %eax
-       addl    $20, %eax
-       movl    (%eax), %eax
-       movl    %eax, -20(%ebp)
-       movl    $0, -28(%ebp)
-.L44:
-       movl    -28(%ebp), %eax
-       cmpl    16(%ebp), %eax
-       jl      .L47
-       jmp     .exit_n
-.L47:
-       movl    -12(%ebp), %eax
-       movl    %eax, -32(%ebp)
-       movl    -16(%ebp), %eax
-       movl    %eax, -36(%ebp)
-       movl    -20(%ebp), %eax
-       movl    %eax, -40(%ebp)
-       movl    $0, -24(%ebp)
-.L48:
-       movl    -24(%ebp), %eax
-       cmpl    12(%ebp), %eax
-       jl      .L51
-       jmp     .L49
-.L51:
-
-/* Zero accumulator */
-       movq    %mm7, %mm2
-
-/* Set i to dptr (size - 1) */
-       movl    -8(%ebp), %esi
-       sub     $1, %esi
-       shll    $3, %esi
-
-       movl    44(%ebp), %edi
-       movl    -36(%ebp), %ecx
-
-.for_i_n:
-       movl    (%edi,%esi), %ebx
-       addl    %ecx, %ebx
-/* Test negative before shift */
-       cmpl    $0, %ebx
-       js      .next_i_n
-       sarl    $12, %ebx
-       cmpl    28(%ebp), %ebx
-       jge     .next_i_n
-/* We multiply sx by 4 here */
-       shll    $2, %ebx
-
-       movl    4(%edi,%esi), %eax
-       addl    -40(%ebp), %eax
-/* Test negative before shift */
-       cmpl    $0, %eax
-       js      .next_i_n
-       sarl    $12, %eax
-       cmpl    32(%ebp), %eax
-       jge     .next_i_n
-/* We multiply sy by srs here */
-       imull   36(%ebp), %eax
-
-       addl    %ebx, %eax
-       addl    24(%ebp), %eax
-
-/* Fg -> %mm1 */
-       movl    (%eax), %eax
-       testl   $0xff000000, %eax
-       jz      .next_i_n
-       movd    %eax, %mm1
-       punpcklbw %mm7, %mm1
-
-/* [a a a 255] -> %mm3 */
-       shrl    $24, %eax
-       movl    $0x10101, %edx
-       mull    %edx
-       orl     $0xff000000, %eax
-       movd    %eax, %mm3
-       punpcklbw %mm7, %mm3
-
-/* [Fg * a] -> mm1 */
-       pmullw  %mm3, %mm1
-       paddw   %mm6, %mm1
-       movq    %mm1, %mm4
-       psrlw   $8, %mm4
-       paddw   %mm4, %mm1
-       psrlw   $8, %mm1
-
-/* Add to accumulator */
-       paddw   %mm1, %mm2
-
-.next_i_n:
-       subl    $8, %esi
-       jnb     .for_i_n
-
-/* Divide components by sample size */
-       movd    52(%ebp), %mm3
-       psrlw   %mm3, %mm2
-
-/* Multiply by alpha */
-       pmullw  %mm0, %mm2
-       paddw   %mm6, %mm2
-       movq    %mm2, %mm4
-       psrlw   $8, %mm4
-       paddw   %mm4, %mm2
-       psrlw   $8, %mm2
-
-/* [255 - FgA] -> mm1 */
-       movq    %mm2, %mm1
-       punpckhwd %mm1, %mm1
-       punpckhdq %mm1, %mm1
-       pxor    %mm5, %mm1
-
-       movl    -32(%ebp), %edi
-/* Bg -> mm3 */
-       movd    (%edi), %mm3
-       punpcklbw %mm7, %mm3
-
-/* Fg + ((255 - FgA) * Bg) / 255 */
-
-       pmullw  %mm1, %mm3
-       paddw   %mm6, %mm3
-       movq    %mm3, %mm4
-       psrlw   $8, %mm4
-       paddw   %mm4, %mm3
-       psrlw   $8, %mm3
-       paddw   %mm2, %mm3
-
-/* Store pixel */
-       packuswb %mm3, %mm3
-       movd    %mm3, (%edi)
-
-.L58:
-       movl    40(%ebp), %eax
-       movl    (%eax), %edx
-       leal    -36(%ebp), %eax
-       addl    %edx, (%eax)
-       movl    40(%ebp), %eax
-       addl    $4, %eax
-       movl    (%eax), %edx
-       leal    -40(%ebp), %eax
-       addl    %edx, (%eax)
-       leal    -32(%ebp), %eax
-       addl    $4, (%eax)
-       leal    -24(%ebp), %eax
-       incl    (%eax)
-       jmp     .L48
-.L49:
-       movl    40(%ebp), %eax
-       addl    $8, %eax
-       movl    (%eax), %edx
-       leal    -16(%ebp), %eax
-       addl    %edx, (%eax)
-       movl    40(%ebp), %eax
-       addl    $12, %eax
-       movl    (%eax), %edx
-       leal    -20(%ebp), %eax
-       addl    %edx, (%eax)
-       movl    20(%ebp), %edx
-       leal    -12(%ebp), %eax
-       addl    %edx, (%eax)
-       leal    -28(%ebp), %eax
-       incl    (%eax)
-       jmp     .L44
-
-.exit_n:
-       emms
-       popl    %esi
-       popl    %edi
-       addl    $72, %esp
-       popl    %ebx
-       popl    %ebp
-       ret
-.Lfe3:
-       .size   nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n,.Lfe3-nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM_n
-       .ident  "GCC: (GNU) 3.2"
index fec9316b98a7aa3e3493e0fd9ca77133aa5c02cd..1f85ee5ca7c39e2cac79ade09a814c66b2c541f6 100644 (file)
 /* Freetype2 */
 # include <pango/pangoft2.h>
 
+#include <ext/hash_map>
+
+
+typedef __gnu_cxx::hash_map<PangoFontDescription*, font_instance*, font_descr_hash, font_descr_equal> FaceMapType;
 
 // need to avoid using the size field
 size_t font_descr_hash::operator()( PangoFontDescription *const &x) const {
@@ -299,20 +303,25 @@ font_factory *font_factory::Default(void)
     return lUsine;
 }
 
-font_factory::font_factory(void)
-{
-    fontSize = 512;
-    nbEnt = 0;
-    maxEnt = 32;
-    ents = (font_entry*)g_malloc(maxEnt*sizeof(font_entry));
+font_factory::font_factory(void) :
+    nbEnt(0),
+    maxEnt(32),
+    ents(static_cast<font_entry*>(g_malloc(maxEnt*sizeof(font_entry)))),
 
 #ifdef USE_PANGO_WIN32
-    hScreenDC = pango_win32_get_dc();
-    fontServer = pango_win32_font_map_for_display();
-    fontContext = pango_win32_get_context();
-    pangoFontCache = pango_win32_font_map_get_font_cache(fontServer);
+    fontServer(pango_win32_font_map_for_display()),
+    fontContext(pango_win32_get_context()),
+    pangoFontCache(pango_win32_font_map_get_font_cache(fontServer)),
+    hScreenDC(pango_win32_get_dc()),
+#else
+    fontServer(pango_ft2_font_map_new()),
+    fontContext(0),
+#endif
+    fontSize(512),
+    loadedPtr(new FaceMapType())
+{
+#ifdef USE_PANGO_WIN32
 #else
-    fontServer = pango_ft2_font_map_new();
     pango_ft2_font_map_set_resolution((PangoFT2FontMap*)fontServer, 72, 72);
     fontContext = pango_ft2_font_map_create_context((PangoFT2FontMap*)fontServer);
     pango_ft2_font_map_set_default_substitute((PangoFT2FontMap*)fontServer,FactorySubstituteFunc,this,NULL);
@@ -321,6 +330,11 @@ font_factory::font_factory(void)
 
 font_factory::~font_factory(void)
 {
+    if (loadedPtr) {
+        FaceMapType* tmp = static_cast<FaceMapType*>(loadedPtr);
+        loadedPtr = 0;
+    }
+
     for (int i = 0;i < nbEnt;i++) ents[i].f->Unref();
     if ( ents ) g_free(ents);
 
@@ -793,6 +807,7 @@ font_instance *font_factory::Face(PangoFontDescription *descr, bool canFail)
 
     font_instance *res = NULL;
 
+    FaceMapType& loadedFaces = *static_cast<FaceMapType*>(loadedPtr);
     if ( loadedFaces.find(descr) == loadedFaces.end() ) {
         // not yet loaded
         PangoFont *nFace = NULL;
@@ -849,8 +864,9 @@ font_instance *font_factory::Face(PangoFontDescription *descr, bool canFail)
         res->Ref();
         AddInCache(res);
     }
-    if(res)
-       res->InitTheFace();
+    if (res) {
+        res->InitTheFace();
+    }
     return res;
 }
 
@@ -924,15 +940,18 @@ font_instance *font_factory::Face(char const *family, NRTypePosDef apos)
 
 void font_factory::UnrefFace(font_instance *who)
 {
-    if ( who == NULL ) return;
-    if ( loadedFaces.find(who->descr) == loadedFaces.end() ) {
-        // not found
-        char *tc = pango_font_description_to_string(who->descr);
-        g_warning("unrefFace %p=%s: failed\n",who,tc);
-        g_free(tc);
-    } else {
-        loadedFaces.erase(loadedFaces.find(who->descr));
-        //                     printf("unrefFace %p: success\n",who);
+    if ( who ) {
+        FaceMapType& loadedFaces = *static_cast<FaceMapType*>(loadedPtr);
+
+        if ( loadedFaces.find(who->descr) == loadedFaces.end() ) {
+            // not found
+            char *tc = pango_font_description_to_string(who->descr);
+            g_warning("unrefFace %p=%s: failed\n",who,tc);
+            g_free(tc);
+        } else {
+            loadedFaces.erase(loadedFaces.find(who->descr));
+            //                 printf("unrefFace %p: success\n",who);
+        }
     }
 }
 
index 9f4b31a2e5c776f967d85ef1e7ccec5412a24f4a..8d85bcf3e88e3127181c604ef0b9b6edb2717aba 100644 (file)
@@ -11,7 +11,6 @@
 
 #include <functional>
 #include <algorithm>
-#include <ext/hash_map>
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -84,31 +83,29 @@ public:
     double fontSize; /**< The huge fontsize used as workaround for hinting.
                       *   Different between freetype and win32. */
 
-    __gnu_cxx::hash_map<PangoFontDescription*, font_instance*, font_descr_hash, font_descr_equal> loadedFaces;
-
     font_factory();
     virtual ~font_factory();
 
     /// Returns the default font_factory.
     static font_factory*  Default();
-    
+
     /// Constructs a pango string for use with the fontStringMap (see below)
     Glib::ustring         ConstructFontSpecification(PangoFontDescription *font);
     Glib::ustring         ConstructFontSpecification(font_instance *font);
-    
+
     /// Returns strings to be used in the UI for family and face (or "style" as the column is labeled)
     Glib::ustring         GetUIFamilyString(PangoFontDescription const *fontDescr);
     Glib::ustring         GetUIStyleString(PangoFontDescription const *fontDescr);
-    
+
     /// Modifiers for the font specification (returns new font specification)
     Glib::ustring         ReplaceFontSpecificationFamily(const Glib::ustring & fontSpec, const Glib::ustring & newFamily);
     Glib::ustring         FontSpecificationSetItalic(const Glib::ustring & fontSpec, bool turnOn);
     Glib::ustring         FontSpecificationSetBold(const Glib::ustring & fontSpec, bool turnOn);
-    
+
     // Gathers all strings needed for UI while storing pango information in
     // fontInstanceMap and fontStringMap
     void                  GetUIFamiliesAndStyles(FamilyToStylesMap *map);
-    
+
     /// Retrieve a font_instance from a style object, first trying to use the font-specification, the CSS information
     font_instance*        FaceFromStyle(SPStyle const *style);
 
@@ -129,17 +126,19 @@ public:
 
     // internal
     void                  AddInCache(font_instance *who);
-    
+
 private:
+    void*                 loadedPtr;
+
     // These two maps are used for translating between what's in the UI and a pango
     // font description.  This is necessary because Pango cannot always
     // reproduce these structures from the names it gave us in the first place.
-    
+
     // Key: A string produced by font_factory::ConstructFontSpecification
     // Value: The associated PangoFontDescription
     typedef std::map<Glib::ustring, PangoFontDescription *> PangoStringToDescrMap;
     PangoStringToDescrMap fontInstanceMap;
-    
+
     // Key: Family name in UI + Style name in UI
     // Value: The associated string that should be produced with font_factory::ConstructFontSpecification
     typedef std::map<Glib::ustring, Glib::ustring> UIStringToPangoStringMap;
index e1413b46e788a87f9f90832c551aeec169d4e614..f34a230c1f05ac09b2d984ed1cb0660431649b67 100644 (file)
 # include FT_TRUETYPE_TABLES_H
 # include <pango/pangoft2.h>
 
+#include <ext/hash_map>
+
+
+// the various raster_font in use at a given time are held in a hash_map whose indices are the
+// styles, hence the 2 following 'classes'
+struct font_style_hash : public std::unary_function<font_style, size_t> {
+    size_t operator()(font_style const &x) const;
+};
+
+struct font_style_equal : public std::binary_function<font_style, font_style, bool> {
+    bool operator()(font_style const &a, font_style const &b);
+};
+
+
+typedef __gnu_cxx::hash_map<font_style, raster_font*, font_style_hash, font_style_equal> StyleMap;
+
 
 
 size_t  font_style_hash::operator()(const font_style &x) const {
@@ -155,36 +171,61 @@ static int ft2_cubic_to(FREETYPE_VECTOR *control1, FREETYPE_VECTOR *control2, FR
  *
  */
 
-font_instance::font_instance(void)
+font_instance::font_instance(void) :
+    pFont(0),
+    descr(0),
+    refCount(0),
+    daddy(0),
+    nbGlyph(0),
+    maxGlyph(0),
+    glyphs(0),
+    loadedPtr(new StyleMap()),
+    theFace(0)
 {
-       //printf("font instance born\n");
-       descr=NULL;
-       pFont=NULL;
-       refCount=0;
-       daddy=NULL;
-       nbGlyph=maxGlyph=0;
-       glyphs=NULL;
-       theFace=NULL;
+    //printf("font instance born\n");
 }
 
 font_instance::~font_instance(void)
 {
-       if ( daddy ) daddy->UnrefFace(this);
-       //printf("font instance death\n");
-       if ( pFont ) g_object_unref(pFont);
-       pFont=NULL;
-       if ( descr ) pango_font_description_free(descr);
-       descr=NULL;
-       //      if ( theFace ) FT_Done_Face(theFace); // owned by pFont. don't touch
-       theFace=NULL;
-
-       for (int i=0;i<nbGlyph;i++) {
-               if ( glyphs[i].outline ) delete glyphs[i].outline;
-        if ( glyphs[i].pathvector ) delete glyphs[i].pathvector;
-       }
-       if ( glyphs ) free(glyphs);
-       nbGlyph=maxGlyph=0;
-       glyphs=NULL;
+    if ( loadedPtr ) {
+        StyleMap* tmp = static_cast<StyleMap*>(loadedPtr);
+        delete tmp;
+        loadedPtr = 0;
+    }
+
+    if ( daddy ) {
+        daddy->UnrefFace(this);
+        daddy = 0;
+    }
+
+    //printf("font instance death\n");
+    if ( pFont ) {
+        g_object_unref(pFont);
+        pFont = 0;
+    }
+
+    if ( descr ) {
+        pango_font_description_free(descr);
+        descr = 0;
+    }
+
+    // if ( theFace ) FT_Done_Face(theFace); // owned by pFont. don't touch
+    theFace = 0;
+
+    for (int i=0;i<nbGlyph;i++) {
+        if ( glyphs[i].outline ) {
+            delete glyphs[i].outline;
+        }
+        if ( glyphs[i].pathvector ) {
+            delete glyphs[i].pathvector;
+        }
+    }
+    if ( glyphs ) {
+        free(glyphs);
+        glyphs = 0;
+    }
+    nbGlyph = 0;
+    maxGlyph = 0;
 }
 
 void font_instance::Ref(void)
@@ -728,7 +769,8 @@ raster_font* font_instance::RasterFont(const font_style &inStyle)
                nStyle.dashes=(double*)malloc(nStyle.nbDash*sizeof(double));
                memcpy(nStyle.dashes,savDashes,nStyle.nbDash*sizeof(double));
        }
-       if ( loadedStyles.find(nStyle) == loadedStyles.end() ) {
+        StyleMap& loadedStyles = *static_cast<StyleMap*>(loadedPtr);
+        if ( loadedStyles.find(nStyle) == loadedStyles.end() ) {
                 raster_font *nR = new raster_font(nStyle);
                nR->Ref();
                nR->daddy=this;
@@ -746,15 +788,17 @@ raster_font* font_instance::RasterFont(const font_style &inStyle)
 
 void font_instance::RemoveRasterFont(raster_font* who)
 {
-       if ( who == NULL ) return;
-       if ( loadedStyles.find(who->style) == loadedStyles.end() ) {
-               //g_print("RemoveRasterFont failed \n");
-               // not found
-       } else {
-               loadedStyles.erase(loadedStyles.find(who->style));
-               //g_print("RemoveRasterFont\n");
-               Unref();
-       }
+    if ( who ) {
+        StyleMap& loadedStyles = *static_cast<StyleMap*>(loadedPtr);
+        if ( loadedStyles.find(who->style) == loadedStyles.end() ) {
+            //g_print("RemoveRasterFont failed \n");
+            // not found
+        } else {
+            loadedStyles.erase(loadedStyles.find(who->style));
+            //g_print("RemoveRasterFont\n");
+            Unref();
+        }
+    }
 }
 
 
index 2ee0051a4b80fd544a24670bd16db3d32cd6ac5f..33371ab1008928e1ff4751cc7054e2f224995fe8 100644 (file)
 #include "style.h"
 #include "svg/svg-length.h"
 #include "sp-object.h"
+#include "sp-string.h"
 #include "FontFactory.h"
 
+#include "text-editing.h" // for inputTruncated()
+
 namespace Inkscape {
 namespace Text {
 
@@ -321,5 +324,71 @@ Layout::InputStreamTextSource::~InputStreamTextSource()
     sp_style_unref(style);
 }
 
+bool
+Layout::inputTruncated() const
+{
+       if (!inputExists())
+               return false;
+
+       // Find out the SPObject to which the last visible character corresponds:
+       Layout::iterator last = end();
+       if (last == begin()) {
+           // FIXME: this returns a wrong "not truncated" when a flowtext is entirely
+           // truncated, so there are no visible characters. But how can I find out the
+           // originator SPObject without having anything to do getSourceOfCharacter
+           // from?
+               return false; 
+       }
+       last.prevCharacter();
+       void *source;
+       Glib::ustring::iterator offset;
+       getSourceOfCharacter(last, &source, &offset);
+       SPObject *obj = SP_OBJECT(source);
+
+       // if that is SPString, see if it has further characters beyond the last visible
+       if (obj && SP_IS_STRING(obj)) {
+               Glib::ustring::iterator offset_next = offset;
+               offset_next ++;
+               if (offset_next != SP_STRING(obj)->string.end()) {
+                       // truncated: source SPString has next char
+                       return true;
+               }
+       }
+
+       // otherwise, see if the SPObject at end() or any of its text-tree ancestors
+       // (excluding top-level SPText or SPFlowText) have a text-tree next sibling with
+       // visible text
+       if (obj) {
+               for (SPObject *ascend = obj; 
+                                ascend && (is_part_of_text_subtree (ascend) && !is_top_level_text_object(ascend));
+                                ascend = SP_OBJECT_PARENT(ascend)) {
+                       if (SP_OBJECT_NEXT(ascend)) {
+                               SPObject *next = SP_OBJECT_NEXT(ascend);
+                               if (next && is_part_of_text_subtree(next) && has_visible_text(next)) {
+                                       // truncated: source text object has next text sibling
+                                       return true;
+                               }
+                       }
+               }
+       }
+
+       // the above works for flowed text, but not for text on path.
+       // so now, we also check if the last of the _characters, if coming from a TEXT_SOURCE,
+       // has in_glyph different from -1
+       unsigned last_char = _characters.size() - 1;
+       unsigned span_index = _characters[last_char].in_span;
+       Glib::ustring::const_iterator iter_char = _spans[span_index].input_stream_first_character;
+
+       if (_input_stream[_spans[span_index].in_input_stream_item]->Type() == TEXT_SOURCE) {
+               if (_characters[last_char].in_glyph == -1) {
+                       //truncated: last char has no glyph
+                       return true;
+               }
+       }
+
+       // not truncated
+       return false;
+}
+
 }//namespace Text
 }//namespace Inkscape
index 0fc061bfc38f0c33f763edd37fc3a912ae634b80..f4e8e4031f6cc84cc958e4324d474663dc136fd1 100644 (file)
@@ -221,6 +221,31 @@ Geom::Point Layout::characterAnchorPoint(iterator const &it) const
     }
 }
 
+boost::optional<Geom::Point> Layout::baselineAnchorPoint() const
+{
+    iterator pos = this->begin();
+    Geom::Point left_pt = this->characterAnchorPoint(pos);
+    pos.thisEndOfLine();
+    Geom::Point right_pt = this->characterAnchorPoint(pos);
+    Geom::Point mid_pt = (left_pt + right_pt)/2;
+
+    switch (this->paragraphAlignment(pos)) {
+        case LEFT:
+        case FULL:
+            return left_pt;
+            break;
+        case CENTER:
+            return mid_pt;
+            break;
+        case RIGHT:
+            return right_pt;
+            break;
+        default:
+            return boost::optional<Geom::Point>();
+            break;
+    }
+}
+
 Geom::Point Layout::chunkAnchorPoint(iterator const &it) const
 {
     unsigned chunk_index;
@@ -705,7 +730,7 @@ bool Layout::iterator::nextLineCursor(int n)
     unsigned line_index = _parent_layout->_characters[_char_index].chunk(_parent_layout).in_line;
     if (line_index == _parent_layout->_lines.size() - 1) 
         return false; // nowhere to go
-               else
+    else
         n = MIN (n, static_cast<int>(_parent_layout->_lines.size() - 1 - line_index));
     if (_parent_layout->_lines[line_index + n].in_shape != _parent_layout->_lines[line_index].in_shape) {
         // switching between shapes: adjust the stored x to compensate
@@ -728,7 +753,7 @@ bool Layout::iterator::prevLineCursor(int n)
         line_index = _parent_layout->_characters[_char_index].chunk(_parent_layout).in_line;
     if (line_index == 0) 
         return false; // nowhere to go
-               else 
+    else
         n = MIN (n, static_cast<int>(line_index));
     if (_parent_layout->_lines[line_index - n].in_shape != _parent_layout->_lines[line_index].in_shape) {
         // switching between shapes: adjust the stored x to compensate
index 19680b140a56a0cfc2c7b3ba9fea7c2c400c6118..05b5103fcc1407442063b9e3db7f7eba023c86c5 100644 (file)
@@ -212,6 +212,8 @@ public:
     bool inputExists() const
         {return !_input_stream.empty();}
 
+    bool inputTruncated() const;
+
     /** adds a new piece of text to the end of the current list of text to
     be processed. This method can only add text of a consistent style.
     To add lots of different styles, call it lots of times.
@@ -480,6 +482,10 @@ public:
     /** For latin text, the left side of the character, on the baseline */
     Geom::Point characterAnchorPoint(iterator const &it) const;
 
+    /** For left aligned text, the leftmost end of the baseline
+    For rightmost text, the rightmost... you probably got it by now ;-)*/
+    boost::optional<Geom::Point> baselineAnchorPoint() const;
+
     /** This is that value to apply to the x,y attributes of tspan role=line
     elements, and hence it takes alignment into account. */
     Geom::Point chunkAnchorPoint(iterator const &it) const;
index 4209a20af68c723c41daabd6867857cb0b62ee8b..521c9a42428db3f94884c7cee1352b4d095404de 100644 (file)
@@ -1,7 +1,6 @@
 #ifndef SEEN_LIBNRTYPE_FONT_INSTANCE_H
 #define SEEN_LIBNRTYPE_FONT_INSTANCE_H
 
-#include <ext/hash_map>
 #include <map>
 #include <pango/pango-types.h>
 #include <pango/pango-font.h>
 #include <2geom/d2.h>
 
 // the font_instance are the template of several raster_font; they provide metrics and outlines
-// that are drawn by the raster_font, so the raster_font needs info relative to the way the 
+// that are drawn by the raster_font, so the raster_font needs info relative to the way the
 // font need to be drawn. note that fontsize is a scale factor in the transform matrix
 // of the style
-// the various raster_font in use at a given time are held in a hash_map whose indices are the
-// styles, hence the 2 following 'classes'
-struct font_style_hash : public std::unary_function<font_style, size_t> {
-    size_t operator()(font_style const &x) const;
-};
-
-struct font_style_equal : public std::binary_function<font_style, font_style, bool> {
-    bool operator()(font_style const &a, font_style const &b);
-};
-
 class font_instance {
 public:
-       // hashmap to get the raster_font for a given style
-    __gnu_cxx::hash_map<font_style, raster_font*, font_style_hash, font_style_equal>     loadedStyles;
-       // the real source of the font
+    // the real source of the font
     PangoFont*            pFont;
-               // depending on the rendering backend, different temporary data
+    // depending on the rendering backend, different temporary data
 
-               // that's the font's fingerprint; this particular PangoFontDescription gives the entry at which this font_instance
-               // resides in the font_factory loadedFaces hash_map
+    // that's the font's fingerprint; this particular PangoFontDescription gives the entry at which this font_instance
+    // resides in the font_factory loadedFaces hash_map
     PangoFontDescription* descr;
-               // refcount
+    // refcount
     int                   refCount;
-               // font_factory owning this font_instance
+    // font_factory owning this font_instance
     font_factory*         daddy;
 
     // common glyph definitions for all the rasterfonts
@@ -58,38 +45,38 @@ public:
 
     bool                 IsOutlineFont(void); // utility
     void                 InstallFace(PangoFont* iFace); // utility; should reset the pFont field if loading failed
-                                       // in case the PangoFont is a bitmap font, for example. that way, the calling function 
-                                       // will be able to check the validity of the font before installing it in loadedFaces
+    // in case the PangoFont is a bitmap font, for example. that way, the calling function
+    // will be able to check the validity of the font before installing it in loadedFaces
     void                 InitTheFace();
 
     int                  MapUnicodeChar(gunichar c); // calls the relevant unicode->glyph index function
     void                 LoadGlyph(int glyph_id);    // the main backend-dependent function
-                                       // loads the given glyph's info
-               
-               // nota: all coordinates returned by these functions are on a [0..1] scale; you need to multiply 
-               // by the fontsize to get the real sizes
+    // loads the given glyph's info
+
+    // nota: all coordinates returned by these functions are on a [0..1] scale; you need to multiply
+    // by the fontsize to get the real sizes
     Path*                Outline(int glyph_id, Path *copyInto=NULL);
-                                       // queries the outline of the glyph (in livarot Path form), and copies it into copyInto instead
-                                       // of allocating a new Path if copyInto != NULL
+    // queries the outline of the glyph (in livarot Path form), and copies it into copyInto instead
+    // of allocating a new Path if copyInto != NULL
     Geom::PathVector*    PathVector(int glyph_id);
                          // returns the 2geom-type pathvector for this glyph. no refcounting needed, it's deallocated when the font_instance dies
     double               Advance(int glyph_id, bool vertical);
-                                       // nominal advance of the font.
+    // nominal advance of the font.
     bool                 FontMetrics(double &ascent, double &descent, double &leading);
     bool                 FontSlope(double &run, double &rise);
                                 // for generating slanted cursors for oblique fonts
     Geom::OptRect             BBox(int glyph_id);
 
-               // creates a rasterfont for the given style
+    // creates a rasterfont for the given style
     raster_font*         RasterFont(Geom::Matrix const &trs, double stroke_width,
                                     bool vertical = false, JoinType stroke_join = join_straight,
                                     ButtType stroke_cap = butt_straight, float miter_limit = 4.0);
-               // the dashes array in iStyle is copied
+    // the dashes array in iStyle is copied
     raster_font*         RasterFont(font_style const &iStyle);
-               // private use: tells the font_instance that the raster_font 'who' has died
+    // private use: tells the font_instance that the raster_font 'who' has died
     void                 RemoveRasterFont(raster_font *who);
 
-               // attribute queries
+    // attribute queries
     unsigned             Name(gchar *str, unsigned size);
     unsigned             PSName(gchar *str, unsigned size);
     unsigned             Family(gchar *str, unsigned size);
@@ -98,10 +85,13 @@ public:
 private:
     void                 FreeTheFace();
 
+    // hashmap to get the raster_font for a given style
+    void*                loadedPtr; // Pointer to a hash_map. Moved into .cpp to not expose use of __gnu_cxx extension.
+
 #ifdef USE_PANGO_WIN32
     HFONT                 theFace;
 #else
-    FT_Face               theFace; 
+    FT_Face               theFace;
                 // it's a pointer in fact; no worries to ref/unref it, pango does its magic
                 // as long as pFont is valid, theFace is too
 #endif
diff --git a/src/libvpsc/pairingheap/.dirstamp b/src/libvpsc/pairingheap/.dirstamp
deleted file mode 100644 (file)
index e69de29..0000000
index 5d5a772809d10163018394d3c8a7ea0b0028466f..31fa07515293bc77a2bdb2069eb2dc822e0d6292 100644 (file)
@@ -25,7 +25,7 @@ void Inkscape::LineSnapper::freeSnap(SnappedConstraints &sc,
                                                     Inkscape::SnapPreferences::PointType const &t,
                                                     Geom::Point const &p,
                                                     SnapSourceType const &source_type,
-                                                    bool const &/*f*/,
+                                                    long source_num,
                                                     Geom::OptRect const &/*bbox_to_snap*/,
                                                     std::vector<SPItem const *> const */*it*/,
                                                     std::vector<std::pair<Geom::Point, int> > */*unselected_nodes*/) const
@@ -49,13 +49,13 @@ void Inkscape::LineSnapper::freeSnap(SnappedConstraints &sc,
         Geom::Coord const dist = Geom::L2(p_proj - p);
         //Store any line that's within snapping range
         if (dist < getSnapperTolerance()) {
-            _addSnappedLine(sc, p_proj, dist, source_type, i->first, i->second);
+            _addSnappedLine(sc, p_proj, dist, source_type, source_num, i->first, i->second);
             // For any line that's within range, we will also look at it's "point on line" p1. For guides
             // this point coincides with its origin; for grids this is of no use, but we cannot
             // discern between grids and guides here
             Geom::Coord const dist_p1 = Geom::L2(p1 - p);
             if (dist_p1 < getSnapperTolerance()) {
-                _addSnappedLinesOrigin(sc, p1, dist_p1, source_type);
+                _addSnappedLinesOrigin(sc, p1, dist_p1, source_type, source_num);
                 // Only relevant for guides; grids don't have an origin per line
                 // Therefore _addSnappedLinesOrigin() will only be implemented for guides
             }
@@ -69,7 +69,7 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc,
                                                Inkscape::SnapPreferences::PointType const &t,
                                                Geom::Point const &p,
                                                SnapSourceType const &source_type,
-                                               bool const &/*f*/,
+                                               long source_num,
                                                Geom::OptRect const &/*bbox_to_snap*/,
                                                ConstraintLine const &c,
                                                std::vector<SPItem const *> const */*it*/) const
@@ -112,13 +112,13 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc,
                     // This snappoint is therefore fully constrained, so there's no need
                     // to look for additional intersections; just return the snapped point
                     // and forget about the line
-                    _addSnappedPoint(sc, t, dist, source_type);
+                    _addSnappedPoint(sc, t, dist, source_type, source_num);
                     // For any line that's within range, we will also look at it's "point on line" p1. For guides
                     // this point coincides with its origin; for grids this is of no use, but we cannot
                     // discern between grids and guides here
                     Geom::Coord const dist_p1 = Geom::L2(p1 - p);
                     if (dist_p1 < getSnapperTolerance()) {
-                        _addSnappedLinesOrigin(sc, p1, dist_p1, source_type);
+                        _addSnappedLinesOrigin(sc, p1, dist_p1, source_type, source_num);
                         // Only relevant for guides; grids don't have an origin per line
                         // Therefore _addSnappedLinesOrigin() will only be implemented for guides
                     }
@@ -130,7 +130,7 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc,
 
 // Will only be overridden in the guide-snapper class, because grid lines don't have an origin; the
 // grid-snapper classes will use this default empty method
-void Inkscape::LineSnapper::_addSnappedLinesOrigin(SnappedConstraints &/*sc*/, Geom::Point const /*origin*/, Geom::Coord const /*snapped_distance*/, SnapSourceType const &/*source_type*/) const
+void Inkscape::LineSnapper::_addSnappedLinesOrigin(SnappedConstraints &/*sc*/, Geom::Point const /*origin*/, Geom::Coord const /*snapped_distance*/, SnapSourceType const &/*source_type*/, long /*source_num*/) const
 {
 }
 
index 4ad08a99f95fe1f73ab8dbeb739569a32caadd23..af36b8330126cf5331e1b942122118b9f6008aa2 100644 (file)
@@ -28,7 +28,7 @@ public:
                    Inkscape::SnapPreferences::PointType const &t,
                    Geom::Point const &p,
                    SnapSourceType const &source_type,
-                   bool const &first_point,
+                   long source_num,
                    Geom::OptRect const &bbox_to_snap,
                    std::vector<SPItem const *> const *it,
                    std::vector<std::pair<Geom::Point, int> > *unselected_nodes) const;
@@ -37,7 +37,7 @@ public:
                           Inkscape::SnapPreferences::PointType const &t,
                           Geom::Point const &p,
                           SnapSourceType const &source_type,
-                          bool const &first_point,
+                          long source_num,
                           Geom::OptRect const &bbox_to_snap,
                           ConstraintLine const &c,
                           std::vector<SPItem const *> const *it) const;
@@ -54,12 +54,12 @@ private:
    */
   virtual LineList _getSnapLines(Geom::Point const &p) const = 0;
 
-  virtual void _addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, Geom::Point const normal_to_line, Geom::Point const point_on_line) const = 0;
+  virtual void _addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num, Geom::Point const normal_to_line, Geom::Point const point_on_line) const = 0;
 
   // Will only be implemented for guide lines, because grid lines don't have an origin
-  virtual void _addSnappedLinesOrigin(SnappedConstraints &sc, Geom::Point const origin, Geom::Coord const snapped_distance, SnapSourceType const &source) const;
+  virtual void _addSnappedLinesOrigin(SnappedConstraints &sc, Geom::Point const origin, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const;
 
-  virtual void _addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source) const = 0;
+  virtual void _addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, long source_num) const = 0;
 };
 
 }
index 93ab60fc56a939015b0816a813b999de45998627..af933eae6939689ec087aad1a006900353e34d76 100644 (file)
@@ -73,6 +73,7 @@ LPEExtrude::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2
         return pwd2_out;
     }
 
+    default:
     case 1: {
         Piecewise<D2<SBasis> > pwd2_out;
         bool closed_path = are_near(pwd2_in.firstValue(), pwd2_in.lastValue());
index 091a4d9ae2b90deee7799e0d840862ce45f42660..3d18318c5c53ff0bbe899e2a5cd3e40e0e312ec1 100644 (file)
@@ -58,7 +58,7 @@ LPEPerspectivePath::LPEPerspectivePath(LivePathEffectObject *lpeobject) :
 
     Persp3D *persp = persp3d_document_first_persp(inkscape_active_document());
 
-    Proj::TransfMat3x4 pmat = persp->tmat;
+    Proj::TransfMat3x4 pmat = persp->perspective_impl->tmat;
 
     pmat.copy_tmat(tmat);
 }
index 3cbac5829babe66aee719e8f419c668c4903c9b4..50a3bfb6cf41b1e4d3d737a30cbfdc4c1a0da8d0 100644 (file)
@@ -1,6 +1,6 @@
 #define INKSCAPE_LPE_RECURSIVESKELETON_CPP
 /** \file
- * @brief 
+ * @brief
  *
  * Inspired by Hofstadter's 'Goedel Escher Bach', chapter V.
  */
@@ -52,7 +52,6 @@ LPERecursiveSkeleton::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > co
     std::vector<Piecewise<D2<SBasis> > > pre_output;
 
     double prop_scale = 1.0;
-    double fuse_tolerance = 0;
 
     D2<Piecewise<SBasis> > patternd2 = make_cuts_independent(pwd2_in);
     Piecewise<SBasis> x0 = false /*vertical_pattern.get_value()*/ ? Piecewise<SBasis>(patternd2[1]) : Piecewise<SBasis>(patternd2[0]);
@@ -95,9 +94,10 @@ LPERecursiveSkeleton::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > co
 
             double scaling = 1;
             scaling = (uskeleton.domain().extent() - toffset)/pattBndsX->extent();
-            
+
+            // TODO investigate why pattWidth is not being used:
             double pattWidth = pattBndsX->extent() * scaling;
-            
+
             if (scaling != 1.0) {
                 x*=scaling;
             }
index bcfd0f3736d845bc544f928169d9429e06b65fe7..228857ebf86f99cfe63ef229b2075c97882fcd87 100644 (file)
@@ -94,7 +94,7 @@ public:
     LevelsCrossings(std::vector<std::vector<double> > const &times,
                     Piecewise<D2<SBasis> > const &f,
                     Piecewise<SBasis> const &dx){
-        
+
         for (unsigned i=0; i<times.size(); i++){
             LevelCrossings lcs;
             for (unsigned j=0; j<times[i].size(); j++){
@@ -158,7 +158,7 @@ public:
         }
     }
     //set indexes to point to the next point in the "snake walk"
-    //follow_level's meaning: 
+    //follow_level's meaning:
     //  0=yes upward
     //  1=no, last move was upward,
     //  2=yes downward
@@ -181,7 +181,7 @@ public:
             direction += 1;
             return;
         }
-        double t = (*this)[level][idx].t;
+        //double t = (*this)[level][idx].t;
         double sign = ((*this)[level][idx].sign ? 1 : -1);
         //---double next_t = t;
         //level += 1;
@@ -288,13 +288,13 @@ LPERoughHatches::~LPERoughHatches()
 
 }
 
-Geom::Piecewise<Geom::D2<Geom::SBasis> > 
+Geom::Piecewise<Geom::D2<Geom::SBasis> >
 LPERoughHatches::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_in){
 
     //std::cout<<"doEffect_pwd2:\n";
 
     Piecewise<D2<SBasis> > result;
-    
+
     Piecewise<D2<SBasis> > transformed_pwd2_in = pwd2_in;
     Point start = pwd2_in.segs.front().at0();
     Point end = pwd2_in.segs.back().at1();
@@ -324,11 +324,11 @@ LPERoughHatches::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const &
     Matrix mat(-hatches_dir[Y], hatches_dir[X], hatches_dir[X], hatches_dir[Y],0,0);
     transformed_pwd2_in = transformed_pwd2_in * mat;
     transformed_org *= mat;
-        
+
     std::vector<std::vector<Point> > snakePoints;
     snakePoints = linearSnake(transformed_pwd2_in, transformed_org);
     if ( snakePoints.size() > 0 ){
-        Piecewise<D2<SBasis> >smthSnake = smoothSnake(snakePoints); 
+        Piecewise<D2<SBasis> >smthSnake = smoothSnake(snakePoints);
         smthSnake = smthSnake*mat.inverse();
         if (do_bend.get_value()){
             smthSnake = smthSnake*bend_mat;
@@ -354,7 +354,7 @@ LPERoughHatches::generateLevels(Interval const &domain, double x_org){
     while (x < domain.max()){
         result.push_back(x);
         double rdm = 1;
-        if (dist_rdm.get_value() != 0) 
+        if (dist_rdm.get_value() != 0)
             rdm = 1.+ double((2*dist_rdm - dist_rdm.get_value()))/100.;
         x+= step*rdm;
         step*=scale;//(1.+double(growth));
@@ -366,7 +366,7 @@ LPERoughHatches::generateLevels(Interval const &domain, double x_org){
 //-------------------------------------------------------
 // Walk through the intersections to create linear hatches
 //-------------------------------------------------------
-std::vector<std::vector<Point> > 
+std::vector<std::vector<Point> >
 LPERoughHatches::linearSnake(Piecewise<D2<SBasis> > const &f, Point const &org){
 
     //std::cout<<"linearSnake:\n";
@@ -401,14 +401,14 @@ LPERoughHatches::linearSnake(Piecewise<D2<SBasis> > const &f, Point const &org){
 
     unsigned i,j;
     lscs.findFirstUnused(i,j);
-    
+
     std::vector<Point> result_component;
     int n = int((range->min()-org[X])/hatch_dist);
-    
-    while ( i < lscs.size() ){ 
+
+    while ( i < lscs.size() ){
         int dir = 0;
         //switch orientation of first segment according to starting point.
-        if (i % 2 == n%2 && j < lscs[i].size()-1 && !lscs[i][j].used){
+        if ((i % 2 == n % 2) && ((j + 1) < lscs[i].size()) && !lscs[i][j].used){
             j += 1;
             dir = 2;
         }
@@ -428,7 +428,7 @@ LPERoughHatches::linearSnake(Piecewise<D2<SBasis> > const &f, Point const &org){
 //-------------------------------------------------------
 // Smooth the linear hatches according to params...
 //-------------------------------------------------------
-Piecewise<D2<SBasis> > 
+Piecewise<D2<SBasis> >
 LPERoughHatches::smoothSnake(std::vector<std::vector<Point> > const &linearSnake){
 
     Piecewise<D2<SBasis> > result;
@@ -444,7 +444,7 @@ LPERoughHatches::smoothSnake(std::vector<std::vector<Point> > const &linearSnake
             Geom::Path res_comp_top(last_pt);
             Geom::Path res_comp_bot(last_pt);
             unsigned i=1;
-            //bool is_top = true;//Inversion here; due to downward y? 
+            //bool is_top = true;//Inversion here; due to downward y?
             bool is_top = ( linearSnake[comp][0][Y] < linearSnake[comp][1][Y] );
 
             while( i+1<linearSnake[comp].size() ){
@@ -454,18 +454,18 @@ LPERoughHatches::smoothSnake(std::vector<std::vector<Point> > const &linearSnake
                 double scale_in = (is_top ? scale_tf : scale_bf );
                 double scale_out = (is_top ? scale_tb : scale_bb );
                 if (is_top){
-                    if (top_edge_variation.get_value() != 0) 
+                    if (top_edge_variation.get_value() != 0)
                         new_pt[Y] += double(top_edge_variation)-top_edge_variation.get_value()/2.;
-                    if (top_tgt_variation.get_value() != 0) 
+                    if (top_tgt_variation.get_value() != 0)
                         new_pt[X] += double(top_tgt_variation)-top_tgt_variation.get_value()/2.;
                     if (top_smth_variation.get_value() != 0) {
                         scale_in*=(100.-double(top_smth_variation))/100.;
                         scale_out*=(100.-double(top_smth_variation))/100.;
                     }
                 }else{
-                    if (bot_edge_variation.get_value() != 0) 
+                    if (bot_edge_variation.get_value() != 0)
                         new_pt[Y] += double(bot_edge_variation)-bot_edge_variation.get_value()/2.;
-                    if (bot_tgt_variation.get_value() != 0) 
+                    if (bot_tgt_variation.get_value() != 0)
                         new_pt[X] += double(bot_tgt_variation)-bot_tgt_variation.get_value()/2.;
                     if (bot_smth_variation.get_value() != 0) {
                         scale_in*=(100.-double(bot_smth_variation))/100.;
@@ -474,7 +474,7 @@ LPERoughHatches::smoothSnake(std::vector<std::vector<Point> > const &linearSnake
                 }
                 Point new_hdle_in  = new_pt + (pt0-pt1) * (scale_in /2.);
                 Point new_hdle_out = new_pt - (pt0-pt1) * (scale_out/2.);
-                
+
                 if ( fat_output.get_value() ){
                     //double scaled_width = double((is_top ? stroke_width_top : stroke_width_bot))/(pt1[X]-pt0[X]);
                     double scaled_width = 1./(pt1[X]-pt0[X]);
@@ -494,7 +494,7 @@ LPERoughHatches::smoothSnake(std::vector<std::vector<Point> > const &linearSnake
                     //TODO: find a good way to handle limit cases (small smthness, large stroke).
                     //if (inside_hdle_in[X]  > inside[X]) inside_hdle_in = inside;
                     //if (inside_hdle_out[X] < inside[X]) inside_hdle_out = inside;
-                    
+
                     if (is_top){
                         res_comp_top.appendNew<CubicBezier>(last_top_hdle,new_hdle_in,new_pt);
                         res_comp_bot.appendNew<CubicBezier>(last_bot_hdle,inside_hdle_in,inside);
@@ -509,7 +509,7 @@ LPERoughHatches::smoothSnake(std::vector<std::vector<Point> > const &linearSnake
                 }else{
                     res_comp.appendNew<CubicBezier>(last_hdle,new_hdle_in,new_pt);
                 }
-            
+
                 last_hdle = new_hdle_out;
                 i+=2;
                 is_top = !is_top;
@@ -525,7 +525,7 @@ LPERoughHatches::smoothSnake(std::vector<std::vector<Point> > const &linearSnake
             if ( fat_output.get_value() ){
                 res_comp = res_comp_bot;
                 res_comp.append(res_comp_top.reverse(),Geom::Path::STITCH_DISCONTINUOUS);
-            }    
+            }
             result.concat(res_comp.toPwSb());
         }
     }
index 80970fd8a5cd43f8a250d7600a75da372293d215..35c9ea69535f278bd0dbad1cc90225f40fe80d79 100644 (file)
@@ -40,8 +40,8 @@ static const Util::EnumDataConverter<BorderMarkType> BorderMarkTypeConverter(Bor
 
 LPERuler::LPERuler(LivePathEffectObject *lpeobject) :
     Effect(lpeobject),
-    unit(_("Unit"), _("Unit"), "unit", &wr, this),
     mark_distance(_("Mark distance"), _("Distance between successive ruler marks"), "mark_distance", &wr, this, 20.0),
+    unit(_("Unit"), _("Unit"), "unit", &wr, this),
     mark_length(_("Major length"), _("Length of major ruler marks"), "mark_length", &wr, this, 14.0),
     minor_mark_length(_("Minor length"), _("Length of minor ruler marks"), "minor_mark_length", &wr, this, 7.0),
     major_mark_steps(_("Major steps"), _("Draw a major mark every ... steps"), "major_mark_steps", &wr, this, 5),
index a8ea157440505cf24f268e82bd5324801dc86064..57d583ba6a362ef82f3ffa2f2d3270aee6a36af4 100644 (file)
@@ -32,9 +32,9 @@ Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip,
       param_wr(wr),
       param_label(label),
       oncanvas_editable(false),
+      widget_is_visible(true),
       param_tooltip(tip),
-      param_effect(effect),
-      widget_is_visible(true)
+      param_effect(effect)
 {
 }
 
index f96d99e11e29a8dcffd545131f6364b397ab4ad8..75e882e998672a27bebcbd7087b3f2205c75424d 100644 (file)
@@ -566,8 +566,12 @@ main(int argc, char **argv)
     // TODO these should use xxxW() calls explicitly and convert UTF-16 <--> UTF-8
     SetCurrentDirectory(homedir.c_str());
     _win32_set_inkscape_env(homedir);
-    RegistryTool rt;
-    rt.setPathInfo();
+    // Don't touch the registry (works fine without it) for Inkscape Portable
+    gchar const *val = g_getenv("INKSCAPE_PORTABLE_PROFILE_DIR");
+    if (!val) {
+        RegistryTool rt;
+        rt.setPathInfo();
+    }
 #endif
 
     // Prevents errors like "Unable to wrap GdkPixbuf..." (in nr-filter-image.cpp for example)
diff --git a/src/marker-test.h b/src/marker-test.h
new file mode 100644 (file)
index 0000000..5b84dcc
--- /dev/null
@@ -0,0 +1,39 @@
+/** @file
+ * @brief Unit tests for SVG marker handling
+ */
+/* Authors:
+ *   Johan Engelen <goejendaagh@zonnet.nl>
+ *
+ * This file is released into the public domain.
+ */
+
+#include <cxxtest/TestSuite.h>
+
+#include "sp-marker-loc.h"
+
+class MarkerTest : public CxxTest::TestSuite
+{
+public:
+
+    void testMarkerLoc()
+    {
+        // code depends on these *exact* values, so check them here.
+        TS_ASSERT_EQUALS(SP_MARKER_LOC, 0);
+        TS_ASSERT_EQUALS(SP_MARKER_LOC_START, 1);
+        TS_ASSERT_EQUALS(SP_MARKER_LOC_MID, 2);
+        TS_ASSERT_EQUALS(SP_MARKER_LOC_END, 3);
+        TS_ASSERT_EQUALS(SP_MARKER_LOC_QTY, 4);
+    }
+
+};
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index d7a18f2112f840ef916c4a5c9091a59f46f5c333..aeb6500bf4c958782e2d8f962f4bfc939e3bf272 100644 (file)
@@ -40,8 +40,7 @@ static char const menus_skeleton[] =
 "       <verb verb-id=\"DialogMetadata\" />\n"
 "       <verb verb-id=\"DialogPreferences\" />\n"
 "       <verb verb-id=\"DialogInput\" />\n"
-// TODO look at some dynamic option for changing the menu tree:
-//"       <verb verb-id=\"DialogInput2\" />\n"
+"       <verb verb-id=\"DialogInput2\" />\n"
 "       <separator/>\n"
 "       <verb verb-id=\"FileClose\" />\n"
 "       <verb verb-id=\"FileQuit\" />\n"
@@ -110,6 +109,8 @@ static char const menus_skeleton[] =
 "         <verb verb-id=\"ViewModeNormal\" radio=\"yes\" default=\"yes\"/>\n"
 "         <verb verb-id=\"ViewModeNoFilters\" radio=\"yes\"/>\n"
 "         <verb verb-id=\"ViewModeOutline\" radio=\"yes\"/>\n"
+"         <verb verb-id=\"ViewModePrintColorsPreview\" radio=\"yes\"/>\n"
+"         <verb verb-id=\"DialogPrintColorsPreview\" />\n"
 "       </submenu>\n"
 "       <separator/>\n"
 "       <verb verb-id=\"ToggleGrid\" />\n"
index 22d438c1ebeca020be06482e057d9f85b387e248..88c2607822d16ddb0af335940992f9019902ab50 100644 (file)
@@ -67,9 +67,9 @@ Inkscape::ObjectSnapper::~ObjectSnapper()
  */
 Geom::Coord Inkscape::ObjectSnapper::getSnapperTolerance() const
 {
-       SPDesktop const *dt = _snapmanager->getDesktop();
-       double const zoom =  dt ? dt->current_zoom() : 1;
-       return _snapmanager->snapprefs.getObjectTolerance() / zoom;
+    SPDesktop const *dt = _snapmanager->getDesktop();
+    double const zoom =  dt ? dt->current_zoom() : 1;
+    return _snapmanager->snapprefs.getObjectTolerance() / zoom;
 }
 
 bool Inkscape::ObjectSnapper::getSnapperAlwaysSnap() const
@@ -81,7 +81,6 @@ bool Inkscape::ObjectSnapper::getSnapperAlwaysSnap() const
  *  Find all items within snapping range.
  *  \param parent Pointer to the document's root, or to a clipped path or mask object
  *  \param it List of items to ignore
- *  \param first_point If true then this point is the first one from a whole bunch of points
  *  \param bbox_to_snap Bounding box hulling the whole bunch of points, all from the same selection and having the same transformation
  *  \param DimensionToSnap Snap in X, Y, or both directions.
  */
@@ -173,7 +172,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent,
 
 
 void Inkscape::ObjectSnapper::_collectNodes(Inkscape::SnapPreferences::PointType const &t,
-                                         bool const &first_point) const
+                                            bool const &first_point) const
 {
     // Now, let's first collect all points to snap to. If we have a whole bunch of points to snap,
     // e.g. when translating an item using the selector tool, then we will only do this for the
@@ -212,47 +211,47 @@ void Inkscape::ObjectSnapper::_collectNodes(Inkscape::SnapPreferences::PointType
             g_return_if_fail(root_item);
 
             //Collect all nodes so we can snap to them
-                       if (p_is_a_node || !(_snapmanager->snapprefs.getStrictSnapping() && !p_is_a_node) || p_is_a_guide) {
-                               // Note: there are two ways in which intersections are considered:
-                               // Method 1: Intersections are calculated for each shape individually, for both the
-                               //           snap source and snap target (see sp_shape_snappoints)
-                               // Method 2: Intersections are calculated for each curve or line that we've snapped to, i.e. only for
-                               //           the target (see the intersect() method in the SnappedCurve and SnappedLine classes)
-                               // Some differences:
-                               // - Method 1 doesn't find intersections within a set of multiple objects
-                               // - Method 2 only works for targets
-                               // When considering intersections as snap targets:
-                               // - Method 1 only works when snapping to nodes, whereas
-                               // - Method 2 only works when snapping to paths
-                               // - There will be performance differences too!
-                               // If both methods are being used simultaneously, then this might lead to duplicate targets!
-
-                               // Well, here we will be looking for snap TARGETS. Both methods can therefore be used.
-                               // When snapping to paths, we will get a collection of snapped lines and snapped curves. findBestSnap() will
-                               // go hunting for intersections (but only when asked to in the prefs of course). In that case we can just
-                               // temporarily block the intersections in sp_item_snappoints, we don't need duplicates. If we're not snapping to
-                               // paths though but only to item nodes then we should still look for the intersections in sp_item_snappoints()
-                               bool old_pref = _snapmanager->snapprefs.getSnapIntersectionCS();
-                               if (_snapmanager->snapprefs.getSnapToItemPath()) {
-                                       _snapmanager->snapprefs.setSnapIntersectionCS(false);
-                               }
-
-                               sp_item_snappoints(root_item, true, *_points_to_snap_to, &_snapmanager->snapprefs);
-
-                               if (_snapmanager->snapprefs.getSnapToItemPath()) {
-                                       _snapmanager->snapprefs.setSnapIntersectionCS(old_pref);
-                               }
-                       }
+            if (p_is_a_node || !(_snapmanager->snapprefs.getStrictSnapping() && !p_is_a_node) || p_is_a_guide) {
+                // Note: there are two ways in which intersections are considered:
+                // Method 1: Intersections are calculated for each shape individually, for both the
+                //           snap source and snap target (see sp_shape_snappoints)
+                // Method 2: Intersections are calculated for each curve or line that we've snapped to, i.e. only for
+                //           the target (see the intersect() method in the SnappedCurve and SnappedLine classes)
+                // Some differences:
+                // - Method 1 doesn't find intersections within a set of multiple objects
+                // - Method 2 only works for targets
+                // When considering intersections as snap targets:
+                // - Method 1 only works when snapping to nodes, whereas
+                // - Method 2 only works when snapping to paths
+                // - There will be performance differences too!
+                // If both methods are being used simultaneously, then this might lead to duplicate targets!
+
+                // Well, here we will be looking for snap TARGETS. Both methods can therefore be used.
+                // When snapping to paths, we will get a collection of snapped lines and snapped curves. findBestSnap() will
+                // go hunting for intersections (but only when asked to in the prefs of course). In that case we can just
+                // temporarily block the intersections in sp_item_snappoints, we don't need duplicates. If we're not snapping to
+                // paths though but only to item nodes then we should still look for the intersections in sp_item_snappoints()
+                bool old_pref = _snapmanager->snapprefs.getSnapIntersectionCS();
+                if (_snapmanager->snapprefs.getSnapToItemPath()) {
+                    _snapmanager->snapprefs.setSnapIntersectionCS(false);
+                }
+
+                sp_item_snappoints(root_item, true, *_points_to_snap_to, &_snapmanager->snapprefs);
+
+                if (_snapmanager->snapprefs.getSnapToItemPath()) {
+                    _snapmanager->snapprefs.setSnapIntersectionCS(old_pref);
+                }
+            }
 
             //Collect the bounding box's corners so we can snap to them
-                       if (p_is_a_bbox || !(_snapmanager->snapprefs.getStrictSnapping() && !p_is_a_bbox) || p_is_a_guide) {
-                               // Discard the bbox of a clipped path / mask, because we don't want to snap to both the bbox
-                               // of the item AND the bbox of the clipping path at the same time
-                               if (!(*i).clip_or_mask) {
-                                       Geom::OptRect b = sp_item_bbox_desktop(root_item, bbox_type);
-                                       getBBoxPoints(b, _points_to_snap_to, true, _snapmanager->snapprefs.getSnapToBBoxNode(), _snapmanager->snapprefs.getSnapBBoxEdgeMidpoints(), _snapmanager->snapprefs.getSnapBBoxMidpoints());
-                               }
-                       }
+            if (p_is_a_bbox || !(_snapmanager->snapprefs.getStrictSnapping() && !p_is_a_bbox) || p_is_a_guide) {
+                // Discard the bbox of a clipped path / mask, because we don't want to snap to both the bbox
+                // of the item AND the bbox of the clipping path at the same time
+                if (!(*i).clip_or_mask) {
+                    Geom::OptRect b = sp_item_bbox_desktop(root_item, bbox_type);
+                    getBBoxPoints(b, _points_to_snap_to, true, _snapmanager->snapprefs.getSnapToBBoxNode(), _snapmanager->snapprefs.getSnapBBoxEdgeMidpoints(), _snapmanager->snapprefs.getSnapBBoxMidpoints());
+                }
+            }
         }
     }
 }
@@ -261,12 +260,12 @@ void Inkscape::ObjectSnapper::_snapNodes(SnappedConstraints &sc,
                                          Inkscape::SnapPreferences::PointType const &t,
                                          Geom::Point const &p,
                                          SnapSourceType const &source_type,
-                                         bool const &first_point,
+                                         long source_num,
                                          std::vector<std::pair<Geom::Point, int> > *unselected_nodes) const
 {
     // Iterate through all nodes, find out which one is the closest to p, and snap to it!
 
-    _collectNodes(t, first_point);
+    _collectNodes(t, source_num == 0);
 
     if (unselected_nodes != NULL) {
         _points_to_snap_to->insert(_points_to_snap_to->end(), unselected_nodes->begin(), unselected_nodes->end());
@@ -278,7 +277,7 @@ void Inkscape::ObjectSnapper::_snapNodes(SnappedConstraints &sc,
     for (std::vector<std::pair<Geom::Point, int> >::const_iterator k = _points_to_snap_to->begin(); k != _points_to_snap_to->end(); k++) {
         Geom::Coord dist = Geom::L2((*k).first - p);
         if (dist < getSnapperTolerance() && dist < s.getSnapDistance()) {
-            s = SnappedPoint((*k).first, source_type, static_cast<Inkscape::SnapTargetType>((*k).second), dist, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
+            s = SnappedPoint((*k).first, source_type, source_num, static_cast<Inkscape::SnapTargetType>((*k).second), dist, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
             success = true;
         }
     }
@@ -298,10 +297,10 @@ void Inkscape::ObjectSnapper::_snapTranslatingGuideToNodes(SnappedConstraints &s
 
     // Although we won't snap to paths here (which would give us under constrained snaps) we can still snap to intersections of paths.
     if (_snapmanager->snapprefs.getSnapToItemPath() || _snapmanager->snapprefs.getSnapToBBoxPath() || _snapmanager->snapprefs.getSnapToPageBorder()) {
-       _collectPaths(t, true);
-       _snapPaths(sc, t, p, SNAPSOURCE_GUIDE, true, NULL, NULL);
-       // The paths themselves should be discarded in findBestSnap(), as we should only snap to their intersections
-       }
+        _collectPaths(t, true);
+        _snapPaths(sc, t, p, SNAPSOURCE_GUIDE, 0, NULL, NULL);
+        // The paths themselves should be discarded in findBestSnap(), as we should only snap to their intersections
+    }
 
     SnappedPoint s;
 
@@ -313,7 +312,7 @@ void Inkscape::ObjectSnapper::_snapTranslatingGuideToNodes(SnappedConstraints &s
         Geom::Coord dist = Geom::L2((*k).first - p_proj); // distance from node to the guide
         Geom::Coord dist2 = Geom::L2(p - p_proj); // distance from projection of node on the guide, to the mouse location
         if ((dist < tol && dist2 < tol) || getSnapperAlwaysSnap()) {
-            s = SnappedPoint((*k).first, SNAPSOURCE_GUIDE, static_cast<Inkscape::SnapTargetType>((*k).second), dist, tol, getSnapperAlwaysSnap(), true);
+            s = SnappedPoint((*k).first, SNAPSOURCE_GUIDE, 0, static_cast<Inkscape::SnapTargetType>((*k).second), dist, tol, getSnapperAlwaysSnap(), true);
             sc.points.push_back(s);
         }
     }
@@ -428,11 +427,11 @@ void Inkscape::ObjectSnapper::_snapPaths(SnappedConstraints &sc,
                                      Inkscape::SnapPreferences::PointType const &t,
                                      Geom::Point const &p,
                                      SnapSourceType const &source_type,
-                                     bool const &first_point,
+                                     long source_num,
                                      std::vector<std::pair<Geom::Point, int> > *unselected_nodes,
                                      SPPath const *selected_path) const
 {
-    _collectPaths(t, first_point);
+    _collectPaths(t, source_num == 0);
     // Now we can finally do the real snapping, using the paths collected above
 
     g_assert(_snapmanager->getDesktop() != NULL);
@@ -440,7 +439,7 @@ void Inkscape::ObjectSnapper::_snapPaths(SnappedConstraints &sc,
 
     bool const node_tool_active = _snapmanager->snapprefs.getSnapToItemPath() && selected_path != NULL;
 
-    if (first_point) {
+    if (source_num == 0) {
         /* findCandidates() is used for snapping to both paths and nodes. It ignores the path that is
          * currently being edited, because that path requires special care: when snapping to nodes
          * only the unselected nodes of that path should be considered, and these will be passed on separately.
@@ -503,7 +502,7 @@ void Inkscape::ObjectSnapper::_snapPaths(SnappedConstraints &sc,
                 if (!being_edited || (c1 && c2)) {
                     Geom::Coord const dist = Geom::distance(sp_doc, p_doc);
                     if (dist < getSnapperTolerance()) {
-                        sc.curves.push_back(Inkscape::SnappedCurve(sp_dt, dist, getSnapperTolerance(), getSnapperAlwaysSnap(), false, curve, source_type, it_p->second));
+                        sc.curves.push_back(Inkscape::SnappedCurve(sp_dt, dist, getSnapperTolerance(), getSnapperAlwaysSnap(), false, curve, source_type, source_num, it_p->second));
                     }
                 }
             }
@@ -535,11 +534,11 @@ void Inkscape::ObjectSnapper::_snapPathsConstrained(SnappedConstraints &sc,
                                      Inkscape::SnapPreferences::PointType const &t,
                                      Geom::Point const &p,
                                      SnapSourceType const source_type,
-                                     bool const &first_point,
+                                     long source_num,
                                      ConstraintLine const &c) const
 {
 
-    _collectPaths(t, first_point);
+    _collectPaths(t, source_num == 0);
 
     // Now we can finally do the real snapping, using the paths collected above
 
@@ -577,7 +576,7 @@ void Inkscape::ObjectSnapper::_snapPathsConstrained(SnappedConstraints &sc,
                         // When it's within snapping range, then return it
                         // (within snapping range == between p_min_on_cl and p_max_on_cl == 0 < ta < 1)
                         Geom::Coord dist = Geom::L2(_snapmanager->getDesktop()->dt2doc(p_proj_on_cl) - p_inters);
-                        SnappedPoint s(_snapmanager->getDesktop()->doc2dt(p_inters), source_type, k->second, dist, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
+                        SnappedPoint s(_snapmanager->getDesktop()->doc2dt(p_inters), source_type, source_num, k->second, dist, getSnapperTolerance(), getSnapperAlwaysSnap(), true);
                         sc.points.push_back(s);
                     }
                 }
@@ -591,7 +590,7 @@ void Inkscape::ObjectSnapper::freeSnap(SnappedConstraints &sc,
                                             Inkscape::SnapPreferences::PointType const &t,
                                             Geom::Point const &p,
                                             SnapSourceType const &source_type,
-                                            bool const &first_point,
+                                            long source_num,
                                             Geom::OptRect const &bbox_to_snap,
                                             std::vector<SPItem const *> const *it,
                                             std::vector<std::pair<Geom::Point, int> > *unselected_nodes) const
@@ -601,17 +600,17 @@ void Inkscape::ObjectSnapper::freeSnap(SnappedConstraints &sc,
     }
 
     /* Get a list of all the SPItems that we will try to snap to */
-    if (first_point) {
+    if (source_num == 0) {
         Geom::Rect const local_bbox_to_snap = bbox_to_snap ? *bbox_to_snap : Geom::Rect(p, p);
-        _findCandidates(sp_document_root(_snapmanager->getDocument()), it, first_point, local_bbox_to_snap, TRANSL_SNAP_XY, false, Geom::identity());
+        _findCandidates(sp_document_root(_snapmanager->getDocument()), it, source_num == 0, local_bbox_to_snap, TRANSL_SNAP_XY, false, Geom::identity());
     }
 
     if (_snapmanager->snapprefs.getSnapToItemNode() || _snapmanager->snapprefs.getSnapSmoothNodes()
-       || _snapmanager->snapprefs.getSnapToBBoxNode() || _snapmanager->snapprefs.getSnapToPageBorder()
-               || _snapmanager->snapprefs.getSnapLineMidpoints() || _snapmanager->snapprefs.getSnapObjectMidpoints()
-               || _snapmanager->snapprefs.getSnapBBoxEdgeMidpoints() || _snapmanager->snapprefs.getSnapBBoxMidpoints()
-               || _snapmanager->snapprefs.getIncludeItemCenter()) {
-        _snapNodes(sc, t, p, source_type, first_point, unselected_nodes);
+        || _snapmanager->snapprefs.getSnapToBBoxNode() || _snapmanager->snapprefs.getSnapToPageBorder()
+        || _snapmanager->snapprefs.getSnapLineMidpoints() || _snapmanager->snapprefs.getSnapObjectMidpoints()
+        || _snapmanager->snapprefs.getSnapBBoxEdgeMidpoints() || _snapmanager->snapprefs.getSnapBBoxMidpoints()
+        || _snapmanager->snapprefs.getIncludeItemCenter()) {
+        _snapNodes(sc, t, p, source_type, source_num, unselected_nodes);
     }
 
     if (_snapmanager->snapprefs.getSnapToItemPath() || _snapmanager->snapprefs.getSnapToBBoxPath() || _snapmanager->snapprefs.getSnapToPageBorder()) {
@@ -625,13 +624,13 @@ void Inkscape::ObjectSnapper::freeSnap(SnappedConstraints &sc,
             SPPath *path = NULL;
             if (it != NULL) {
                 if (it->size() == 1 && SP_IS_PATH(*it->begin())) {
-                                       path = SP_PATH(*it->begin());
+                    path = SP_PATH(*it->begin());
                 } // else: *it->begin() might be a SPGroup, e.g. when editing a LPE of text that has been converted to a group of paths
                 // as reported in bug #356743. In that case we can just ignore it, i.e. not snap to this item
             }
-            _snapPaths(sc, t, p, source_type, first_point, unselected_nodes, path);
+            _snapPaths(sc, t, p, source_type, source_num, unselected_nodes, path);
         } else {
-            _snapPaths(sc, t, p, source_type, first_point, NULL, NULL);
+            _snapPaths(sc, t, p, source_type, source_num, NULL, NULL);
         }
     }
 }
@@ -640,7 +639,7 @@ void Inkscape::ObjectSnapper::constrainedSnap( SnappedConstraints &sc,
                                                   Inkscape::SnapPreferences::PointType const &t,
                                                   Geom::Point const &p,
                                                   SnapSourceType const &source_type,
-                                                  bool const &first_point,
+                                                  long source_num,
                                                   Geom::OptRect const &bbox_to_snap,
                                                   ConstraintLine const &c,
                                                   std::vector<SPItem const *> const *it) const
@@ -650,9 +649,9 @@ void Inkscape::ObjectSnapper::constrainedSnap( SnappedConstraints &sc,
     }
 
     /* Get a list of all the SPItems that we will try to snap to */
-    if (first_point) {
+    if (source_num == 0) {
         Geom::Rect const local_bbox_to_snap = bbox_to_snap ? *bbox_to_snap : Geom::Rect(p, p);
-        _findCandidates(sp_document_root(_snapmanager->getDocument()), it, first_point, local_bbox_to_snap, TRANSL_SNAP_XY, false, Geom::identity());
+        _findCandidates(sp_document_root(_snapmanager->getDocument()), it, source_num == 0, local_bbox_to_snap, TRANSL_SNAP_XY, false, Geom::identity());
     }
 
     // A constrained snap, is a snap in only one degree of freedom (specified by the constraint line).
@@ -665,7 +664,7 @@ void Inkscape::ObjectSnapper::constrainedSnap( SnappedConstraints &sc,
     // so we will more or less snap to them anyhow.
 
     if (_snapmanager->snapprefs.getSnapToItemPath() || _snapmanager->snapprefs.getSnapToBBoxPath() || _snapmanager->snapprefs.getSnapToPageBorder()) {
-        _snapPathsConstrained(sc, t, p, source_type, first_point, c);
+        _snapPathsConstrained(sc, t, p, source_type, 0, c);
     }
 }
 
@@ -723,13 +722,13 @@ void Inkscape::ObjectSnapper::guideConstrainedSnap(SnappedConstraints &sc,
 bool Inkscape::ObjectSnapper::ThisSnapperMightSnap() const
 {
     bool snap_to_something = _snapmanager->snapprefs.getSnapToItemPath()
-                                               || _snapmanager->snapprefs.getSnapToItemNode()
-                                               || _snapmanager->snapprefs.getSnapToBBoxPath()
-                                               || _snapmanager->snapprefs.getSnapToBBoxNode()
-                                               || _snapmanager->snapprefs.getSnapToPageBorder()
-                                               || _snapmanager->snapprefs.getSnapLineMidpoints() || _snapmanager->snapprefs.getSnapObjectMidpoints()
-                                               || _snapmanager->snapprefs.getSnapBBoxEdgeMidpoints() || _snapmanager->snapprefs.getSnapBBoxMidpoints()
-                                               || _snapmanager->snapprefs.getIncludeItemCenter();
+                        || _snapmanager->snapprefs.getSnapToItemNode()
+                        || _snapmanager->snapprefs.getSnapToBBoxPath()
+                        || _snapmanager->snapprefs.getSnapToBBoxNode()
+                        || _snapmanager->snapprefs.getSnapToPageBorder()
+                        || _snapmanager->snapprefs.getSnapLineMidpoints() || _snapmanager->snapprefs.getSnapObjectMidpoints()
+                        || _snapmanager->snapprefs.getSnapBBoxEdgeMidpoints() || _snapmanager->snapprefs.getSnapBBoxMidpoints()
+                        || _snapmanager->snapprefs.getIncludeItemCenter();
 
     return (_snap_enabled && _snapmanager->snapprefs.getSnapModeBBoxOrNodes() && snap_to_something);
 }
@@ -737,12 +736,12 @@ bool Inkscape::ObjectSnapper::ThisSnapperMightSnap() const
 bool Inkscape::ObjectSnapper::GuidesMightSnap() const // almost the same as ThisSnapperMightSnap above, but only looking at points (and not paths)
 {
     bool snap_to_something = _snapmanager->snapprefs.getSnapToItemNode()
-                                               || _snapmanager->snapprefs.getSnapToPageBorder()
-                                               || (_snapmanager->snapprefs.getSnapModeBBox() && _snapmanager->snapprefs.getSnapToBBoxNode())
-                                               || (_snapmanager->snapprefs.getSnapModeBBox() && (_snapmanager->snapprefs.getSnapBBoxEdgeMidpoints() || _snapmanager->snapprefs.getSnapBBoxMidpoints()))
-                                               || (_snapmanager->snapprefs.getSnapModeNode() && (_snapmanager->snapprefs.getSnapLineMidpoints() || _snapmanager->snapprefs.getSnapObjectMidpoints()))
-                                               || (_snapmanager->snapprefs.getSnapModeNode() && _snapmanager->snapprefs.getIncludeItemCenter())
-                                               || (_snapmanager->snapprefs.getSnapModeNode() && (_snapmanager->snapprefs.getSnapToItemPath() && _snapmanager->snapprefs.getSnapIntersectionCS()));
+                        || _snapmanager->snapprefs.getSnapToPageBorder()
+                        || (_snapmanager->snapprefs.getSnapModeBBox() && _snapmanager->snapprefs.getSnapToBBoxNode())
+                        || (_snapmanager->snapprefs.getSnapModeBBox() && (_snapmanager->snapprefs.getSnapBBoxEdgeMidpoints() || _snapmanager->snapprefs.getSnapBBoxMidpoints()))
+                        || (_snapmanager->snapprefs.getSnapModeNode() && (_snapmanager->snapprefs.getSnapLineMidpoints() || _snapmanager->snapprefs.getSnapObjectMidpoints()))
+                        || (_snapmanager->snapprefs.getSnapModeNode() && _snapmanager->snapprefs.getIncludeItemCenter())
+                        || (_snapmanager->snapprefs.getSnapModeNode() && (_snapmanager->snapprefs.getSnapToItemPath() && _snapmanager->snapprefs.getSnapIntersectionCS()));
 
     return (_snap_enabled && _snapmanager->snapprefs.getSnapModeGuide() && snap_to_something);
 }
@@ -784,21 +783,21 @@ void Inkscape::ObjectSnapper::_getBorderNodes(std::vector<std::pair<Geom::Point,
 
 void Inkscape::getBBoxPoints(Geom::OptRect const bbox, std::vector<std::pair<Geom::Point, int> > *points, bool const isTarget, bool const includeCorners, bool const includeLineMidpoints, bool const includeObjectMidpoints)
 {
-       if (bbox) {
-               // collect the corners of the bounding box
-               for ( unsigned k = 0 ; k < 4 ; k++ ) {
-                       if (includeCorners) {
-                               points->push_back(std::make_pair((bbox->corner(k)), isTarget ? int(Inkscape::SNAPTARGET_BBOX_CORNER) : int(Inkscape::SNAPSOURCE_BBOX_CORNER)));
-                       }
-                       // optionally, collect the midpoints of the bounding box's edges too
-                       if (includeLineMidpoints) {
-                               points->push_back(std::make_pair((bbox->corner(k) + bbox->corner((k+1) % 4))/2, isTarget ? int(Inkscape::SNAPTARGET_BBOX_EDGE_MIDPOINT) : int(Inkscape::SNAPSOURCE_BBOX_EDGE_MIDPOINT)));
-                       }
-               }
-               if (includeObjectMidpoints) {
-                       points->push_back(std::make_pair(bbox->midpoint(), isTarget ? int(Inkscape::SNAPTARGET_BBOX_MIDPOINT) : int(Inkscape::SNAPSOURCE_BBOX_MIDPOINT)));
-               }
-       }
+    if (bbox) {
+        // collect the corners of the bounding box
+        for ( unsigned k = 0 ; k < 4 ; k++ ) {
+            if (includeCorners) {
+                points->push_back(std::make_pair((bbox->corner(k)), isTarget ? int(Inkscape::SNAPTARGET_BBOX_CORNER) : int(Inkscape::SNAPSOURCE_BBOX_CORNER)));
+            }
+            // optionally, collect the midpoints of the bounding box's edges too
+            if (includeLineMidpoints) {
+                points->push_back(std::make_pair((bbox->corner(k) + bbox->corner((k+1) % 4))/2, isTarget ? int(Inkscape::SNAPTARGET_BBOX_EDGE_MIDPOINT) : int(Inkscape::SNAPSOURCE_BBOX_EDGE_MIDPOINT)));
+            }
+        }
+        if (includeObjectMidpoints) {
+            points->push_back(std::make_pair(bbox->midpoint(), isTarget ? int(Inkscape::SNAPTARGET_BBOX_MIDPOINT) : int(Inkscape::SNAPSOURCE_BBOX_MIDPOINT)));
+        }
+    }
 }
 
 /*
index baa60a096fdc392049dfb48664aad4bb3563c8cb..2fcafb79a106b03112ff6864b8ea72a9fd1f3e06 100644 (file)
@@ -46,47 +46,47 @@ class ObjectSnapper : public Snapper
 {
 
 public:
-       ObjectSnapper(SnapManager *sm, Geom::Coord const d);
+    ObjectSnapper(SnapManager *sm, Geom::Coord const d);
     ~ObjectSnapper();
 
-       enum DimensionToSnap {
-               GUIDE_TRANSL_SNAP_X, // For snapping a vertical guide (normal in the X-direction) to objects,
-               GUIDE_TRANSL_SNAP_Y, // For snapping a horizontal guide (normal in the Y-direction) to objects
-               ANGLED_GUIDE_TRANSL_SNAP, // For snapping an angled guide, while translating it accross the desktop
-               TRANSL_SNAP_XY}; // All other cases; for snapping to objects, other than guides
-
-       void guideFreeSnap(SnappedConstraints &sc,
-                                  Geom::Point const &p,
-                                  Geom::Point const &guide_normal) const;
-
-       void guideConstrainedSnap(SnappedConstraints &sc,
-                                          Geom::Point const &p,
-                                          Geom::Point const &guide_normal,
-                                          ConstraintLine const &c) const;
-
-       bool ThisSnapperMightSnap() const;
-       bool GuidesMightSnap() const;
-
-       Geom::Coord getSnapperTolerance() const; //returns the tolerance of the snapper in screen pixels (i.e. independent of zoom)
-       bool getSnapperAlwaysSnap() const; //if true, then the snapper will always snap, regardless of its tolerance
-
-       void freeSnap(SnappedConstraints &sc,
-                                 Inkscape::SnapPreferences::PointType const &t,
-                                 Geom::Point const &p,
-                                 SnapSourceType const &source_type,
-                                 bool const &first_point,
-                                 Geom::OptRect const &bbox_to_snap,
-                                 std::vector<SPItem const *> const *it,
-                                 std::vector<std::pair<Geom::Point, int> > *unselected_nodes) const;
-
-       void constrainedSnap(SnappedConstraints &sc,
-                                 Inkscape::SnapPreferences::PointType const &t,
-                                 Geom::Point const &p,
-                                 SnapSourceType const &source_type,
-                                 bool const &first_point,
-                                 Geom::OptRect const &bbox_to_snap,
-                                 ConstraintLine const &c,
-                                 std::vector<SPItem const *> const *it) const;
+    enum DimensionToSnap {
+        GUIDE_TRANSL_SNAP_X, // For snapping a vertical guide (normal in the X-direction) to objects,
+        GUIDE_TRANSL_SNAP_Y, // For snapping a horizontal guide (normal in the Y-direction) to objects
+        ANGLED_GUIDE_TRANSL_SNAP, // For snapping an angled guide, while translating it accross the desktop
+        TRANSL_SNAP_XY}; // All other cases; for snapping to objects, other than guides
+
+    void guideFreeSnap(SnappedConstraints &sc,
+                   Geom::Point const &p,
+                   Geom::Point const &guide_normal) const;
+
+    void guideConstrainedSnap(SnappedConstraints &sc,
+                       Geom::Point const &p,
+                       Geom::Point const &guide_normal,
+                       ConstraintLine const &c) const;
+
+    bool ThisSnapperMightSnap() const;
+    bool GuidesMightSnap() const;
+
+    Geom::Coord getSnapperTolerance() const; //returns the tolerance of the snapper in screen pixels (i.e. independent of zoom)
+    bool getSnapperAlwaysSnap() const; //if true, then the snapper will always snap, regardless of its tolerance
+
+    void freeSnap(SnappedConstraints &sc,
+                  Inkscape::SnapPreferences::PointType const &t,
+                  Geom::Point const &p,
+                  SnapSourceType const &source_type,
+                  long source_num,
+                  Geom::OptRect const &bbox_to_snap,
+                  std::vector<SPItem const *> const *it,
+                  std::vector<std::pair<Geom::Point, int> > *unselected_nodes) const;
+
+    void constrainedSnap(SnappedConstraints &sc,
+                  Inkscape::SnapPreferences::PointType const &t,
+                  Geom::Point const &p,
+                  SnapSourceType const &source_type,
+                  long source_num,
+                  Geom::OptRect const &bbox_to_snap,
+                  ConstraintLine const &c,
+                  std::vector<SPItem const *> const *it) const;
 
 private:
     //store some lists of candidates, points and paths, so we don't have to rebuild them for each point we want to snap
@@ -106,7 +106,7 @@ private:
                       Inkscape::SnapPreferences::PointType const &t,
                       Geom::Point const &p, // in desktop coordinates
                       SnapSourceType const &source_type,
-                      bool const &first_point,
+                      long source_num,
                       std::vector<std::pair<Geom::Point, int> > *unselected_nodes) const; // in desktop coordinates
 
     void _snapTranslatingGuideToNodes(SnappedConstraints &sc,
@@ -119,9 +119,9 @@ private:
 
     void _snapPaths(SnappedConstraints &sc,
                       Inkscape::SnapPreferences::PointType const &t,
-                      Geom::Point const &p,    // in desktop coordinates
+                      Geom::Point const &p,    // in desktop coordinates
                       SnapSourceType const &source_type,
-                      bool const &first_point,
+                      long source_num,
                       std::vector<std::pair<Geom::Point, int> > *unselected_nodes, // in desktop coordinates
                       SPPath const *selected_path) const;
 
@@ -129,7 +129,7 @@ private:
                  Inkscape::SnapPreferences::PointType const &t,
                  Geom::Point const &p, // in desktop coordinates
                  SnapSourceType const source_type,
-                                bool const &first_point,
+                 long source_num,
                  ConstraintLine const &c) const;
 
     bool isUnselectedNode(Geom::Point const &point, std::vector<std::pair<Geom::Point, int> > const *unselected_nodes) const;
index 43b0e82b1f5431899b2c55b6f8b6f5190f6e2c62..7c2ce31bf6136bf5996d2603239e41eaa3d31e2e 100644 (file)
@@ -12,9 +12,9 @@
 
 #include "uri-references.h"
 #include <sigc++/sigc++.h>
+#include "persp3d.h"
 
 class SPObject;
-class Persp3D;
 
 namespace Inkscape {
 namespace XML {
@@ -28,7 +28,7 @@ public:
     ~Persp3DReference();
 
     Persp3D *getObject() const {
-        return (Persp3D *)URIReference::getObject();
+        return SP_PERSP3D(URIReference::getObject());
     }
 
     SPObject *owner;
index 916e9f25f421fe071452b070e4088abfb2cf9bdf..6a697ec9b5e1d9893ed76b787144abc608c8bb50 100644 (file)
@@ -24,7 +24,7 @@
 #include <glibmm/i18n.h>
 
 static void persp3d_class_init(Persp3DClass *klass);
-static void persp3d_init(Persp3D *stop);
+static void persp3d_init(Persp3D *persp);
 
 static void persp3d_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
 static void persp3d_release(SPObject *object);
@@ -34,10 +34,22 @@ static Inkscape::XML::Node *persp3d_write(SPObject *object, Inkscape::XML::Docum
 
 static void persp3d_on_repr_attr_changed (Inkscape::XML::Node * repr, const gchar *key, const gchar *oldval, const gchar *newval, bool is_interactive, void * data);
 
+static void persp3d_update_with_point (Persp3DImpl *persp_impl, Proj::Axis const axis, Proj::Pt2 const &new_image);
+static gchar * persp3d_pt_to_str (Persp3DImpl *persp_impl, Proj::Axis const axis);
+
 static SPObjectClass *persp3d_parent_class;
 
 static int global_counter = 0;
 
+/* Constructor/destructor for the internal class */
+
+Persp3DImpl::Persp3DImpl() {
+    tmat = Proj::TransfMat3x4 ();
+    document = NULL;
+
+    my_counter = global_counter++;
+}
+
 /**
  * Registers Persp3d class and returns its type.
  */
@@ -91,13 +103,7 @@ static void persp3d_class_init(Persp3DClass *klass)
 static void
 persp3d_init(Persp3D *persp)
 {
-    persp->tmat = Proj::TransfMat3x4 ();
-
-    persp->boxes_transformed = new std::map<SPBox3D *, bool>;
-    persp->boxes_transformed->clear();
-    persp->document = NULL;
-
-    persp->my_counter = global_counter++;
+    persp->perspective_impl = new Persp3DImpl();
 }
 
 /**
@@ -124,8 +130,8 @@ static void persp3d_build(SPObject *object, SPDocument *document, Inkscape::XML:
  * Virtual release of Persp3D members before destruction.
  */
 static void persp3d_release(SPObject *object) {
-    Persp3D *persp = SP_PERSP3D (object);
-    delete persp->boxes_transformed;
+    Persp3D *persp = SP_PERSP3D(object);
+    delete persp->perspective_impl;
     SP_OBJECT_REPR(object)->removeListenerByData(object);
 }
 
@@ -138,34 +144,34 @@ static void persp3d_release(SPObject *object) {
 static void
 persp3d_set(SPObject *object, unsigned key, gchar const *value)
 {
-    Persp3D *persp = SP_PERSP3D (object);
+    Persp3DImpl *persp_impl = SP_PERSP3D(object)->perspective_impl;
 
     switch (key) {
         case SP_ATTR_INKSCAPE_PERSP3D_VP_X: {
             if (value) {
                 Proj::Pt2 new_image (value);
-                persp3d_update_with_point (persp, Proj::X, new_image);
+                persp3d_update_with_point (persp_impl, Proj::X, new_image);
             }
             break;
         }
         case SP_ATTR_INKSCAPE_PERSP3D_VP_Y: {
             if (value) {
                 Proj::Pt2 new_image (value);
-                persp3d_update_with_point (persp, Proj::Y, new_image);
+                persp3d_update_with_point (persp_impl, Proj::Y, new_image);
                 break;
             }
         }
         case SP_ATTR_INKSCAPE_PERSP3D_VP_Z: {
             if (value) {
                 Proj::Pt2 new_image (value);
-                persp3d_update_with_point (persp, Proj::Z, new_image);
+                persp3d_update_with_point (persp_impl, Proj::Z, new_image);
                 break;
             }
         }
         case SP_ATTR_INKSCAPE_PERSP3D_ORIGIN: {
             if (value) {
                 Proj::Pt2 new_image (value);
-                persp3d_update_with_point (persp, Proj::W, new_image);
+                persp3d_update_with_point (persp_impl, Proj::W, new_image);
                 break;
             }
         }
@@ -201,36 +207,40 @@ persp3d_update(SPObject *object, SPCtx *ctx, guint flags)
 }
 
 Persp3D *
-persp3d_create_xml_element (SPDocument *document, Persp3D *dup) {// if dup is given, copy the attributes over
+persp3d_create_xml_element (SPDocument *document, Persp3DImpl *dup) {// if dup is given, copy the attributes over
     SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
     Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
     Inkscape::XML::Node *repr;
-    if (dup) {
-        repr = SP_OBJECT_REPR(dup)->duplicate (xml_doc);
-    } else {
-        /* if no perspective is given, create a default one */
-        repr = xml_doc->createElement("inkscape:perspective");
-        repr->setAttribute("sodipodi:type", "inkscape:persp3d");
 
-        Proj::Pt2 proj_vp_x = Proj::Pt2 (0.0, sp_document_height(document)/2, 1.0);
-        Proj::Pt2 proj_vp_y = Proj::Pt2 (  0.0,1000.0, 0.0);
-        Proj::Pt2 proj_vp_z = Proj::Pt2 (sp_document_width(document), sp_document_height(document)/2, 1.0);
-        Proj::Pt2 proj_origin = Proj::Pt2 (sp_document_width(document)/2, sp_document_height(document)/3, 1.0);
+    /* if no perspective is given, create a default one */
+    repr = xml_doc->createElement("inkscape:perspective");
+    repr->setAttribute("sodipodi:type", "inkscape:persp3d");
 
-        gchar *str = NULL;
-        str = proj_vp_x.coord_string();
-        repr->setAttribute("inkscape:vp_x", str);
-        g_free (str);
-        str = proj_vp_y.coord_string();
-        repr->setAttribute("inkscape:vp_y", str);
-        g_free (str);
-        str = proj_vp_z.coord_string();
-        repr->setAttribute("inkscape:vp_z", str);
-        g_free (str);
-        str = proj_origin.coord_string();
-        repr->setAttribute("inkscape:persp3d-origin", str);
-        g_free (str);
-    }
+    Proj::Pt2 proj_vp_x = Proj::Pt2 (0.0, sp_document_height(document)/2, 1.0);
+    Proj::Pt2 proj_vp_y = Proj::Pt2 (0.0, 1000.0, 0.0);
+    Proj::Pt2 proj_vp_z = Proj::Pt2 (sp_document_width(document), sp_document_height(document)/2, 1.0);
+    Proj::Pt2 proj_origin = Proj::Pt2 (sp_document_width(document)/2, sp_document_height(document)/3, 1.0);
+
+    if (dup) {
+        proj_vp_x = dup->tmat.column (Proj::X);
+        proj_vp_y = dup->tmat.column (Proj::Y);
+        proj_vp_z = dup->tmat.column (Proj::Z);
+        proj_origin = dup->tmat.column (Proj::W);
+    }
+
+    gchar *str = NULL;
+    str = proj_vp_x.coord_string();
+    repr->setAttribute("inkscape:vp_x", str);
+    g_free (str);
+    str = proj_vp_y.coord_string();
+    repr->setAttribute("inkscape:vp_y", str);
+    g_free (str);
+    str = proj_vp_z.coord_string();
+    repr->setAttribute("inkscape:vp_z", str);
+    g_free (str);
+    str = proj_origin.coord_string();
+    repr->setAttribute("inkscape:persp3d-origin", str);
+    g_free (str);
 
     /* Append the new persp3d to defs */
     SP_OBJECT_REPR(defs)->addChild(repr, NULL);
@@ -258,7 +268,7 @@ persp3d_document_first_persp (SPDocument *document) {
 static Inkscape::XML::Node *
 persp3d_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
 {
-    Persp3D *persp = SP_PERSP3D(object);
+    Persp3DImpl *persp_impl = SP_PERSP3D(object)->perspective_impl;
 
     if ((flags & SP_OBJECT_WRITE_BUILD & SP_OBJECT_WRITE_EXT) && !repr) {
         // this is where we end up when saving as plain SVG (also in other circumstances?);
@@ -268,16 +278,16 @@ persp3d_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML:
 
     if (flags & SP_OBJECT_WRITE_EXT) {
         gchar *str = NULL; // FIXME: Should this be freed each time we set an attribute or only in the end or at all?
-        str = persp3d_pt_to_str (persp, Proj::X);
+        str = persp3d_pt_to_str (persp_impl, Proj::X);
         repr->setAttribute("inkscape:vp_x", str);
 
-        str = persp3d_pt_to_str (persp, Proj::Y);
+        str = persp3d_pt_to_str (persp_impl, Proj::Y);
         repr->setAttribute("inkscape:vp_y", str);
 
-        str = persp3d_pt_to_str (persp, Proj::Z);
+        str = persp3d_pt_to_str (persp_impl, Proj::Z);
         repr->setAttribute("inkscape:vp_z", str);
 
-        str = persp3d_pt_to_str (persp, Proj::W);
+        str = persp3d_pt_to_str (persp_impl, Proj::W);
         repr->setAttribute("inkscape:persp3d-origin", str);
     }
 
@@ -289,7 +299,7 @@ persp3d_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML:
 
 /* convenience wrapper around persp3d_get_finite_dir() and persp3d_get_infinite_dir() */
 Geom::Point persp3d_get_PL_dir_from_pt (Persp3D *persp, Geom::Point const &pt, Proj::Axis axis) {
-    if (persp3d_VP_is_finite(persp, axis)) {
+    if (persp3d_VP_is_finite(persp->perspective_impl, axis)) {
         return persp3d_get_finite_dir(persp, pt, axis);
     } else {
         return persp3d_get_infinite_dir(persp, axis);
@@ -314,17 +324,17 @@ persp3d_get_infinite_dir (Persp3D *persp, Proj::Axis axis) {
 
 double
 persp3d_get_infinite_angle (Persp3D *persp, Proj::Axis axis) {
-    return persp->tmat.get_infinite_angle(axis);
+    return persp->perspective_impl->tmat.get_infinite_angle(axis);
 }
 
 bool
-persp3d_VP_is_finite (Persp3D *persp, Proj::Axis axis) {
-    return persp->tmat.has_finite_image(axis);
+persp3d_VP_is_finite (Persp3DImpl *persp_impl, Proj::Axis axis) {
+    return persp_impl->tmat.has_finite_image(axis);
 }
 
 void
 persp3d_toggle_VP (Persp3D *persp, Proj::Axis axis, bool set_undo) {
-    persp->tmat.toggle_finite(axis);
+    persp->perspective_impl->tmat.toggle_finite(axis);
     // FIXME: Remove this repr update and rely on vp_drag_sel_modified() to do this for us
     //        On the other hand, vp_drag_sel_modified() would update all boxes;
     //        here we can confine ourselves to the boxes of this particular perspective.
@@ -348,7 +358,7 @@ persp3d_toggle_VPs (std::list<Persp3D *> p, Proj::Axis axis) {
 
 void
 persp3d_set_VP_state (Persp3D *persp, Proj::Axis axis, Proj::VPState state) {
-    if (persp3d_VP_is_finite(persp, axis) != (state == Proj::VP_FINITE)) {
+    if (persp3d_VP_is_finite(persp->perspective_impl, axis) != (state == Proj::VP_FINITE)) {
         persp3d_toggle_VP(persp, axis);
     }
 }
@@ -356,62 +366,67 @@ persp3d_set_VP_state (Persp3D *persp, Proj::Axis axis, Proj::VPState state) {
 void
 persp3d_rotate_VP (Persp3D *persp, Proj::Axis axis, double angle, bool alt_pressed) { // angle is in degrees
     // FIXME: Most of this functionality should be moved to trans_mat_3x4.(h|cpp)
-    if (persp->tmat.has_finite_image(axis)) {
+    if (persp->perspective_impl->tmat.has_finite_image(axis)) {
         // don't rotate anything for finite VPs
         return;
     }
-    Proj::Pt2 v_dir_proj (persp->tmat.column(axis));
+    Proj::Pt2 v_dir_proj (persp->perspective_impl->tmat.column(axis));
     Geom::Point v_dir (v_dir_proj[0], v_dir_proj[1]);
     double a = Geom::atan2 (v_dir) * 180/M_PI;
     a += alt_pressed ? 0.5 * ((angle > 0 ) - (angle < 0)) : angle; // the r.h.s. yields +/-0.5 or angle
-    persp->tmat.set_infinite_direction (axis, a);
+    persp->perspective_impl->tmat.set_infinite_direction (axis, a);
 
     persp3d_update_box_reprs (persp);
     SP_OBJECT(persp)->updateRepr(SP_OBJECT_WRITE_EXT);
 }
 
 void
-persp3d_update_with_point (Persp3D *persp, Proj::Axis const axis, Proj::Pt2 const &new_image) {
-    persp->tmat.set_image_pt (axis, new_image);
+persp3d_update_with_point (Persp3DImpl *persp_impl, Proj::Axis const axis, Proj::Pt2 const &new_image) {
+    persp_impl->tmat.set_image_pt (axis, new_image);
 }
 
 void
 persp3d_apply_affine_transformation (Persp3D *persp, Geom::Matrix const &xform) {
-    persp->tmat *= xform;
+    persp->perspective_impl->tmat *= xform;
     persp3d_update_box_reprs(persp);
     SP_OBJECT(persp)->updateRepr(SP_OBJECT_WRITE_EXT);
 }
 
 gchar *
-persp3d_pt_to_str (Persp3D *persp, Proj::Axis const axis)
+persp3d_pt_to_str (Persp3DImpl *persp_impl, Proj::Axis const axis)
 {
-    return persp->tmat.pt_to_str(axis);
+    return persp_impl->tmat.pt_to_str(axis);
 }
 
 void
 persp3d_add_box (Persp3D *persp, SPBox3D *box) {
+    Persp3DImpl *persp_impl = persp->perspective_impl;
+
     if (!box) {
         return;
     }
-    if (std::find (persp->boxes.begin(), persp->boxes.end(), box) != persp->boxes.end()) {
+    if (std::find (persp_impl->boxes.begin(), persp_impl->boxes.end(), box) != persp_impl->boxes.end()) {
         return;
     }
-    persp->boxes.push_back(box);
+    persp_impl->boxes.push_back(box);
 }
 
 void
 persp3d_remove_box (Persp3D *persp, SPBox3D *box) {
-    std::vector<SPBox3D *>::iterator i = std::find (persp->boxes.begin(), persp->boxes.end(), box);
-    if (i != persp->boxes.end()) {
-        persp->boxes.erase(i);
-    }
+    Persp3DImpl *persp_impl = persp->perspective_impl;
+
+    std::vector<SPBox3D *>::iterator i = std::find (persp_impl->boxes.begin(), persp_impl->boxes.end(), box);
+    if (i != persp_impl->boxes.end())
+        persp_impl->boxes.erase(i);
 }
 
 bool
 persp3d_has_box (Persp3D *persp, SPBox3D *box) {
+    Persp3DImpl *persp_impl = persp->perspective_impl;
+
     // FIXME: For some reason, std::find() does not seem to compare pointers "correctly" (or do we need to
     //        provide a proper comparison function?), so we manually traverse the list.
-    for (std::vector<SPBox3D *>::iterator i = persp->boxes.begin(); i != persp->boxes.end(); ++i) {
+    for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) {
         if ((*i) == box) {
             return true;
         }
@@ -420,86 +435,27 @@ persp3d_has_box (Persp3D *persp, SPBox3D *box) {
 }
 
 void
-persp3d_add_box_transform (Persp3D *persp, SPBox3D *box) {
-    std::map<SPBox3D *, bool>::iterator i = persp->boxes_transformed->find(box);
-    if (i != persp->boxes_transformed->end() && (*i).second == true) {
-        g_print ("Warning! In %s (%d): trying to add transform status for box %d twice when it's already listed as true.\n", SP_OBJECT_REPR(persp)->attribute("id"), persp->my_counter, box->my_counter);
-        return;
-    }
-    (*persp->boxes_transformed)[box] = false;
-}
-
-void
-persp3d_remove_box_transform (Persp3D *persp, SPBox3D *box) {
-    persp->boxes_transformed->erase(box);
-}
+persp3d_update_box_displays (Persp3D *persp) {
+    Persp3DImpl *persp_impl = persp->perspective_impl;
 
-void
-persp3d_set_box_transformed (Persp3D *persp, SPBox3D *box, bool transformed) {
-    if (persp->boxes_transformed->find(box) == persp->boxes_transformed->end()) {
-        g_print ("Warning! In %s (%d): trying to set transform status for box %d, but it is not listed in the perspective!! Aborting.\n",
-                 SP_OBJECT_REPR(persp)->attribute("id"), persp->my_counter,
-                 box->my_counter);
+    if (persp_impl->boxes.empty())
         return;
-    }
-
-    (*persp->boxes_transformed)[box] = transformed;
-}
-
-bool
-persp3d_was_transformed (Persp3D *persp) {
-    if (persp->boxes_transformed->size() == 1) {
-        /* either the transform has not been applied to the single box associated to this perspective yet
-           or the transform was already reset; in both cases we need to return false because upcoming
-           transforms need to be applied */
-        (*persp->boxes_transformed->begin()).second = false; // make sure the box is marked as untransformed (in case more boxes are added later)
-        return false;
-    }
-
-    for (std::map<SPBox3D *, bool>::iterator i = persp->boxes_transformed->begin();
-         i != persp->boxes_transformed->end(); ++i) {
-        if ((*i).second == true) {
-            // at least one of the boxes in the perspective has already been transformed;
-            return true;
-        }
-    }
-    return false; // all boxes in the perspective are still untransformed; a pending transformation should be applied
-}
-
-bool
-persp3d_all_transformed(Persp3D *persp) {
-    for (std::map<SPBox3D *, bool>::iterator i = persp->boxes_transformed->begin();
-         i != persp->boxes_transformed->end(); ++i) {
-        if ((*i).second == false) {
-            return false;
-        }
-    }
-    return true;
-}
-
-void
-persp3d_unset_transforms(Persp3D *persp) {
-    for (std::map<SPBox3D *, bool>::iterator i = persp->boxes_transformed->begin();
-         i != persp->boxes_transformed->end(); ++i) {
-        (*i).second = false;
+    for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) {
+        box3d_position_set(*i);
     }
 }
 
 void
-persp3d_update_box_displays (Persp3D *persp) {
-    if (persp->boxes.empty())
+persp3d_update_box_reprs (Persp3D *persp) {
+    if (!persp) {
+        // Hmm, is it an error if this happens?
         return;
-    for (std::vector<SPBox3D *>::iterator i = persp->boxes.begin(); i != persp->boxes.end(); ++i) {
-        box3d_position_set(*i);
     }
-}
+    Persp3DImpl *persp_impl = persp->perspective_impl;
 
-void
-persp3d_update_box_reprs (Persp3D *persp) {
-    if (persp->boxes.empty())
+    if (persp_impl->boxes.empty())
         return;
-    for (std::vector<SPBox3D *>::iterator i = persp->boxes.begin(); i != persp->boxes.end(); ++i) {
+    for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) {
         SP_OBJECT(*i)->updateRepr(SP_OBJECT_WRITE_EXT);
         box3d_set_z_orders(*i);
     }
@@ -507,9 +463,11 @@ persp3d_update_box_reprs (Persp3D *persp) {
 
 void
 persp3d_update_z_orders (Persp3D *persp) {
-    if (persp->boxes.empty())
+    Persp3DImpl *persp_impl = persp->perspective_impl;
+
+    if (persp_impl->boxes.empty())
         return;
-    for (std::vector<SPBox3D *>::iterator i = persp->boxes.begin(); i != persp->boxes.end(); ++i) {
+    for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) {
         box3d_set_z_orders(*i);
     }
 }
@@ -519,8 +477,10 @@ persp3d_update_z_orders (Persp3D *persp) {
 //        obsolete. We should do this.
 std::list<SPBox3D *>
 persp3d_list_of_boxes(Persp3D *persp) {
+    Persp3DImpl *persp_impl = persp->perspective_impl;
+
     std::list<SPBox3D *> bx_lst;
-    for (std::vector<SPBox3D *>::iterator i = persp->boxes.begin(); i != persp->boxes.end(); ++i) {
+    for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) {
         bx_lst.push_back(*i);
     }
     return bx_lst;
@@ -529,7 +489,7 @@ persp3d_list_of_boxes(Persp3D *persp) {
 bool
 persp3d_perspectives_coincide(const Persp3D *lhs, const Persp3D *rhs)
 {
-    return lhs->tmat == rhs->tmat;
+    return lhs->perspective_impl->tmat == rhs->perspective_impl->tmat;
 }
 
 void
@@ -566,10 +526,12 @@ persp3d_on_repr_attr_changed ( Inkscape::XML::Node * /*repr*/,
 
 /* checks whether all boxes linked to this perspective are currently selected */
 bool
-persp3d_has_all_boxes_in_selection (Persp3D *persp) {
-    std::list<SPBox3D *> selboxes = sp_desktop_selection(inkscape_active_desktop())->box3DList();
+persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::Selection *selection) {
+    Persp3DImpl *persp_impl = persp->perspective_impl;
+
+    std::list<SPBox3D *> selboxes = selection->box3DList();
 
-    for (std::vector<SPBox3D *>::iterator i = persp->boxes.begin(); i != persp->boxes.end(); ++i) {
+    for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) {
         if (std::find(selboxes.begin(), selboxes.end(), *i) == selboxes.end()) {
             // we have an unselected box in the perspective
             return false;
@@ -578,62 +540,12 @@ persp3d_has_all_boxes_in_selection (Persp3D *persp) {
     return true;
 }
 
-/**
- * For each perspective having a box in \a selection, determine all its unselected boxes.
- */
-// TODO: Check where we can use pass-by-reference (or so) instead of recreating all the lists afresh.
-std::map<Persp3D *, std::list<SPBox3D *> >
-persp3d_unselected_boxes(Inkscape::Selection *selection) {
-    std::list<Persp3D *> plist = selection->perspList();
-    std::map<Persp3D *, std::list<SPBox3D *> > punsel;
-
-    std::list<Persp3D *>::iterator i;
-    std::vector<SPBox3D *>::iterator j;
-    // for all perspectives in the list ...
-    for (i = plist.begin(); i != plist.end(); ++i) {
-        Persp3D *persp = *i;
-        // ... and each box associated to it ...
-        for (j = persp->boxes.begin(); j != persp->boxes.end(); ++j) {
-            SPBox3D *box = *j;
-            // ... check whether it is unselected, and if so add it to the list
-            if (persp->boxes_transformed->find(box) == persp->boxes_transformed->end()) {
-                punsel[persp].push_back(box);
-            }
-        }
-    }
-    return punsel;
-}
-
-/**
- * Split all perspectives with a box in \a selection by moving their unselected boxes to newly
- * created perspectives.
- */
-void
-persp3d_split_perspectives_according_to_selection(Inkscape::Selection *selection) {
-    std::map<Persp3D *, std::list<SPBox3D *> > punsel = persp3d_unselected_boxes(selection);
-
-    std::map<Persp3D *, std::list<SPBox3D *> >::iterator i;
-    std::list<SPBox3D *>::iterator j;
-    // for all perspectives in the list ...
-    for (i = punsel.begin(); i != punsel.end(); ++i) {
-        Persp3D *persp = (*i).first;
-        // ... if the perspective has unselected boxes ...
-        if (!(*i).second.empty()) {
-            // create a new perspective and move these boxes over
-            Persp3D * new_persp = persp3d_create_xml_element (SP_OBJECT_DOCUMENT(persp), persp);
-            for (j = (*i).second.begin(); j != (*i).second.end(); ++j) {
-                SPBox3D *box = *j;
-                box3d_switch_perspectives(box, persp, new_persp);
-            }
-        }
-    }
-}
-
 /* some debugging stuff follows */
 
 void
 persp3d_print_debugging_info (Persp3D *persp) {
-    g_print ("=== Info for Persp3D %d ===\n", persp->my_counter);
+    Persp3DImpl *persp_impl = persp->perspective_impl;
+    g_print ("=== Info for Persp3D %d ===\n", persp_impl->my_counter);
     gchar * cstr;
     for (int i = 0; i < 4; ++i) {
         cstr = persp3d_get_VP(persp, Proj::axes[i]).coord_string();
@@ -645,8 +557,8 @@ persp3d_print_debugging_info (Persp3D *persp) {
     g_free(cstr);
 
     g_print ("  Boxes: ");
-    for (std::vector<SPBox3D *>::iterator i = persp->boxes.begin(); i != persp->boxes.end(); ++i) {
-        g_print ("%d (%d)  ", (*i)->my_counter, box3d_get_perspective(*i)->my_counter);
+    for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) {
+        g_print ("%d (%d)  ", (*i)->my_counter, box3d_get_perspective(*i)->perspective_impl->my_counter);
     }
     g_print ("\n");
     g_print ("========================\n");
@@ -674,16 +586,23 @@ persp3d_print_all_selected() {
 
     for (std::list<Persp3D *>::iterator j = sel_persps.begin(); j != sel_persps.end(); ++j) {
         Persp3D *persp = SP_PERSP3D(*j);
-        g_print ("  %s (%d):  ", SP_OBJECT_REPR(persp)->attribute("id"), persp->my_counter);
-        for (std::map<SPBox3D *, bool>::iterator i = persp->boxes_transformed->begin();
-             i != persp->boxes_transformed->end(); ++i) {
-            g_print ("<%d,%d> ", (*i).first->my_counter, (*i).second);
+        Persp3DImpl *persp_impl = persp->perspective_impl;
+        g_print ("  %s (%d):  ", SP_OBJECT_REPR(persp)->attribute("id"), persp->perspective_impl->my_counter);
+        for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin();
+             i != persp_impl->boxes.end(); ++i) {
+            g_print ("%d ", (*i)->my_counter);
         }
         g_print ("\n");
     }
     g_print ("======================================\n\n");
  }
 
+void print_current_persp3d(gchar *func_name, Persp3D *persp) {
+    g_print ("%s: current_persp3d is now %s\n",
+             func_name,
+             persp ? SP_OBJECT_REPR(persp)->attribute("id") : "NULL");
+}
+
 /*
   Local Variables:
   mode:c++
index 79bec0232c5372465266a04e90924ade2e8e1481..62cc586ef15496c3fff523fc707e16e77ecedae8 100644 (file)
 class SPBox3D;
 class Box3DContext;
 
-struct Persp3D : public SPObject {
+class Persp3DImpl {
+public:
+    Persp3DImpl();
+
+//private:
     Proj::TransfMat3x4 tmat;
 
     // Also write the list of boxes into the xml repr and vice versa link boxes to their persp3d?
     std::vector<SPBox3D *> boxes;
-    std::map<SPBox3D *, bool>* boxes_transformed; // TODO: eventually we should merge this with 'boxes'
-    SPDocument *document; // should this rather be the SPDesktop?
+    SPDocument *document;
 
     // for debugging only
     int my_counter;
+
+//    friend class Persp3D;
+};
+
+struct Persp3D : public SPObject {
+    Persp3DImpl *perspective_impl;
 };
 
 struct Persp3DClass {
@@ -54,52 +63,43 @@ inline Persp3D * persp3d_get_from_repr (Inkscape::XML::Node *repr) {
     return SP_PERSP3D(SP_ACTIVE_DOCUMENT->getObjectByRepr(repr));
 }
 inline Proj::Pt2 persp3d_get_VP (Persp3D *persp, Proj::Axis axis) {
-    return persp->tmat.column(axis);
+    return persp->perspective_impl->tmat.column(axis);
 }
 Geom::Point persp3d_get_PL_dir_from_pt (Persp3D *persp, Geom::Point const &pt, Proj::Axis axis); // convenience wrapper around the following two
 Geom::Point persp3d_get_finite_dir (Persp3D *persp, Geom::Point const &pt, Proj::Axis axis);
 Geom::Point persp3d_get_infinite_dir (Persp3D *persp, Proj::Axis axis);
 double persp3d_get_infinite_angle (Persp3D *persp, Proj::Axis axis);
-bool persp3d_VP_is_finite (Persp3D *persp, Proj::Axis axis);
+bool persp3d_VP_is_finite (Persp3DImpl *persp_impl, Proj::Axis axis);
 void persp3d_toggle_VP (Persp3D *persp, Proj::Axis axis, bool set_undo = true);
 void persp3d_toggle_VPs (std::list<Persp3D *>, Proj::Axis axis);
 void persp3d_set_VP_state (Persp3D *persp, Proj::Axis axis, Proj::VPState state);
 void persp3d_rotate_VP (Persp3D *persp, Proj::Axis axis, double angle, bool alt_pressed); // angle is in degrees
-void persp3d_update_with_point (Persp3D *persp, Proj::Axis const axis, Proj::Pt2 const &new_image);
 void persp3d_apply_affine_transformation (Persp3D *persp, Geom::Matrix const &xform);
-gchar * persp3d_pt_to_str (Persp3D *persp, Proj::Axis const axis);
 
 void persp3d_add_box (Persp3D *persp, SPBox3D *box);
 void persp3d_remove_box (Persp3D *persp, SPBox3D *box);
 bool persp3d_has_box (Persp3D *persp, SPBox3D *box);
 
-void persp3d_add_box_transform (Persp3D *persp, SPBox3D *box);
-void persp3d_remove_box_transform (Persp3D *persp, SPBox3D *box);
-void persp3d_set_box_transformed (Persp3D *persp, SPBox3D *box, bool transformed = true);
-bool persp3d_was_transformed (Persp3D *persp);
-bool persp3d_all_transformed(Persp3D *persp);
-void persp3d_unset_transforms(Persp3D *persp);
-
 void persp3d_update_box_displays (Persp3D *persp);
 void persp3d_update_box_reprs (Persp3D *persp);
 void persp3d_update_z_orders (Persp3D *persp);
-inline unsigned int persp3d_num_boxes (Persp3D *persp) { return persp->boxes.size(); }
+inline unsigned int persp3d_num_boxes (Persp3D *persp) { return persp->perspective_impl->boxes.size(); }
 std::list<SPBox3D *> persp3d_list_of_boxes(Persp3D *persp);
 
 bool persp3d_perspectives_coincide(const Persp3D *lhs, const Persp3D *rhs);
 void persp3d_absorb(Persp3D *persp1, Persp3D *persp2);
 
-Persp3D * persp3d_create_xml_element (SPDocument *document, Persp3D *dup = NULL);
+Persp3D * persp3d_create_xml_element (SPDocument *document, Persp3DImpl *dup = NULL);
 Persp3D * persp3d_document_first_persp (SPDocument *document);
 
-bool persp3d_has_all_boxes_in_selection (Persp3D *persp);
-std::map<Persp3D *, std::list<SPBox3D *> > persp3d_unselected_boxes(Inkscape::Selection *selection);
-void persp3d_split_perspectives_according_to_selection(Inkscape::Selection *selection);
+bool persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::Selection *selection);
 
 void persp3d_print_debugging_info (Persp3D *persp);
 void persp3d_print_debugging_info_all(SPDocument *doc);
 void persp3d_print_all_selected();
 
+void print_current_persp3d(gchar *func_name, Persp3D *persp);
+
 #endif /* __PERSP3D_H__ */
 
 /*
index 70d1140bab4f9dbc069b76d19fc38fd84dead008..4e5291bafd74a34f6b642ba9af96634738bd4243 100644 (file)
@@ -340,6 +340,7 @@ static char const preferences_skeleton[] =
 "    </group>\n"
 "    <group id=\"workarounds\"\n"
 "           colorsontop=\"0\"/>\n"
+"    <group id=\"threading\" numthreads=\"1\"/>\n"
 "  </group>\n"
 "\n"
 "  <group id=\"extensions\">"
index 044dffe345102d60d107d37b61756d11cf7827de..ed9b8d19c4a5c011a8d9aa555e30dc9ff9afa9d9 100644 (file)
@@ -130,6 +130,7 @@ sp_print_document(Gtk::Window& parentWindow, SPDocument *doc)
     SPItem      *base = SP_ITEM(sp_document_root(doc));
     NRArena    *arena = NRArena::create();
     unsigned int dkey = sp_item_display_key_new(1);
+    // TODO investigate why we are grabbing root and then ignoring it.
     NRArenaItem *root = sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY);
 
     // Run print dialog
index 714daaa7ea980da371a87faa0c8d07d09fd5c8ae..8756524dd6b37c01078f93f0c96ae3d82414057d 100644 (file)
@@ -181,18 +181,20 @@ void Inkscape::SelCue::_newTextBaselines()
         if (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item)) { // visualize baseline
             Inkscape::Text::Layout const *layout = te_get_layout(item);
             if (layout != NULL && layout->outputExists()) {
-                Geom::Point a = layout->characterAnchorPoint(layout->begin()) * sp_item_i2d_affine(item);
-                baseline_point = sp_canvas_item_new(sp_desktop_controls(_desktop), SP_TYPE_CTRL,
-                                                    "mode", SP_CTRL_MODE_XOR,
-                                                    "size", 4.0,
-                                                    "filled", 0,
-                                                    "stroked", 1,
-                                                    "stroke_color", 0x000000ff,
-                                                    NULL);
-
-                sp_canvas_item_show(baseline_point);
-                SP_CTRL(baseline_point)->moveto(a);
-                sp_canvas_item_move_to_z(baseline_point, 0);
+                boost::optional<Geom::Point> pt = layout->baselineAnchorPoint();
+                if (pt) {
+                    baseline_point = sp_canvas_item_new(sp_desktop_controls(_desktop), SP_TYPE_CTRL,
+                        "mode", SP_CTRL_MODE_XOR,
+                        "size", 4.0,
+                        "filled", 0,
+                        "stroked", 1,
+                        "stroke_color", 0x000000ff,
+                        NULL);
+
+                    sp_canvas_item_show(baseline_point);
+                    SP_CTRL(baseline_point)->moveto((*pt) * sp_item_i2d_affine(item));
+                    sp_canvas_item_move_to_z(baseline_point, 0);
+                }
             }
         }
 
index e55bba2a5926079ef2e3a2fd99f300d7b8e791c2..31e899d8a34c703866ae9dbc40c6b51244fdb8dc 100644 (file)
@@ -76,6 +76,7 @@
 #include "helper/units.h"
 #include "sp-item.h"
 #include "box3d.h"
+#include "persp3d.h"
 #include "unit-constants.h"
 #include "xml/simple-document.h"
 #include "sp-filter-reference.h"
@@ -1171,7 +1172,6 @@ selection_contains_both_clone_and_original(Inkscape::Selection *selection)
     return clone_with_original;
 }
 
-
 /** Apply matrix to the selection.  \a set_i2d is normally true, which means objects are in the
 original transform, synced with their reprs, and need to jump to the new transform in one go. A
 value of set_i2d==false is only used by seltrans when it's dragging objects live (not outlines); in
@@ -1183,6 +1183,29 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons
     if (selection->isEmpty())
         return;
 
+    // For each perspective with a box in selection, check whether all boxes are selected and
+    // unlink all non-selected boxes.
+    Persp3D *persp;
+    Persp3D *transf_persp;
+    std::list<Persp3D *> plist = selection->perspList();
+    for (std::list<Persp3D *>::iterator i = plist.begin(); i != plist.end(); ++i) {
+        persp = (Persp3D *) (*i);
+
+        if (!persp3d_has_all_boxes_in_selection (persp, selection)) {
+            std::list<SPBox3D *> selboxes = selection->box3DList(persp);
+
+            // create a new perspective as a copy of the current one and link the selected boxes to it
+            transf_persp = persp3d_create_xml_element (SP_OBJECT_DOCUMENT(persp), persp->perspective_impl);
+
+            for (std::list<SPBox3D *>::iterator b = selboxes.begin(); b != selboxes.end(); ++b)
+                box3d_switch_perspectives(*b, persp, transf_persp);
+        } else {
+            transf_persp = persp;
+        }
+
+        persp3d_apply_affine_transformation(transf_persp, affine);
+    }
+
     for (GSList const *l = selection->itemList(); l != NULL; l = l->next) {
         SPItem *item = SP_ITEM(l->data);
 
index 4d92a18df77948f7de0620a8609566eb9e33075e..828a96968f6e1217f09335e96cfbe36894f5a829 100644 (file)
@@ -162,24 +162,12 @@ void Selection::add(SPObject *obj, bool persist_selection_context/* = false */)
     _emitChanged(persist_selection_context);
 }
 
-void Selection::add_box_perspective(SPBox3D *box) {
-    Persp3D *persp = box3d_get_perspective(box);
-    std::map<Persp3D *, unsigned int>::iterator p = _persps.find(persp);
-    if (p != _persps.end()) {
-        (*p).second++;
-    } else {
-        _persps[persp] = 1;
-    }
-}
-
 void Selection::add_3D_boxes_recursively(SPObject *obj) {
     std::list<SPBox3D *> boxes = box3d_extract_boxes(obj);
 
     for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) {
         SPBox3D *box = *i;
-        box3d_add_to_selection(box);
         _3dboxes.push_back(box);
-        add_box_perspective(box);
     }
 }
 
@@ -220,33 +208,17 @@ void Selection::remove(SPObject *obj) {
     _emitChanged();
 }
 
-void Selection::remove_box_perspective(SPBox3D *box) {
-    Persp3D *persp = box3d_get_perspective(box);
-    std::map<Persp3D *, unsigned int>::iterator p = _persps.find(persp);
-    if (p == _persps.end()) {
-        g_print ("Warning! Trying to remove unselected perspective from selection!\n");
-        return;
-    }
-    if ((*p).second > 1) {
-        _persps[persp]--;
-    } else {
-        _persps.erase(p);
-    }
-}
-
 void Selection::remove_3D_boxes_recursively(SPObject *obj) {
     std::list<SPBox3D *> boxes = box3d_extract_boxes(obj);
 
     for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) {
         SPBox3D *box = *i;
-        box3d_remove_from_selection(box);
         std::list<SPBox3D *>::iterator b = std::find(_3dboxes.begin(), _3dboxes.end(), box);
         if (b == _3dboxes.end()) {
             g_print ("Warning! Trying to remove unselected box from selection.\n");
             return;
         }
         _3dboxes.erase(b);
-        remove_box_perspective(box);
     }
 }
 
@@ -344,14 +316,27 @@ GSList const *Selection::reprList() {
 
 std::list<Persp3D *> const Selection::perspList() {
     std::list<Persp3D *> pl;
-    for (std::map<Persp3D *, unsigned int>::iterator p = _persps.begin(); p != _persps.end(); ++p) {
-        pl.push_back((*p).first);
+    for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) {
+        Persp3D *persp = box3d_get_perspective(*i);
+        if (std::find(pl.begin(), pl.end(), persp) == pl.end())
+            pl.push_back(persp);
     }
     return pl;
 }
 
-std::list<SPBox3D *> const Selection::box3DList() {
-    return _3dboxes;
+std::list<SPBox3D *> const Selection::box3DList(Persp3D *persp) {
+    std::list<SPBox3D *> boxes;
+    if (persp) {
+        SPBox3D *box;
+        for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) {
+            box = *i;
+            if (persp == box3d_get_perspective(box))
+                boxes.push_back(box);
+        }
+    } else {
+        boxes = _3dboxes;
+    }
+    return boxes;
 }
 
 SPObject *Selection::single() {
index ecb1ef45e5399780cbe4812bf52a1bb18b6517ce..5e035fb60e3dde7cdc3c23cff953b9b549693b39 100644 (file)
@@ -229,11 +229,14 @@ public:
     ///      method for that
     GSList const *reprList();
 
-    /* list of all perspectives which have a 3D box in the current selection
+    /** @brief Returns a list of all perspectives which have a 3D box in the current selection
        (these may also be nested in groups) */
     std::list<Persp3D *> const perspList();
 
-    std::list<SPBox3D *> const box3DList();
+    /** @brief Returns a list of all 3D boxes in the current selection which are associated to @c
+       persp. If @c pers is @c NULL, return all selected boxes.
+    */
+    std::list<SPBox3D *> const box3DList(Persp3D *persp = NULL);
 
     /** @brief Returns the number of layers in which there are selected objects */
     guint numberOfLayers();
@@ -351,7 +354,6 @@ private:
     void remove_box_perspective(SPBox3D *box);
     void remove_3D_boxes_recursively(SPObject *obj);
 
-    std::map<Persp3D *, unsigned int> _persps;
     std::list<SPBox3D *> _3dboxes;
 
     GC::soft_ptr<SPDesktop> _desktop;
index 545607889c48e13f21da41c2e05150b2028be135..2e38e4f146d9db8bc610ff049e10cb93e82ce35b 100644 (file)
@@ -164,18 +164,18 @@ bool SnapManager::gridSnapperMightSnap() const
  *  \param point_type Category of points to which the source point belongs: node, guide or bounding box
  *  \param p Current position of the snap source; will be overwritten by the position of the snap target if snapping has occurred
  *  \param source_type Detailed description of the source type, will be used by the snap indicator
- *  \param first_point If true then this point is the first one from a set of points, all from the same selection and having the same transformation
+ *  \param source_num Sequence number of the source point within the set of points that is to be snapped. Starting at zero
  *  \param bbox_to_snap Bounding box hulling the set of points, all from the same selection and having the same transformation
  */
 
 void SnapManager::freeSnapReturnByRef(Inkscape::SnapPreferences::PointType point_type,
                                       Geom::Point &p,
                                       Inkscape::SnapSourceType const source_type,
-                                      bool first_point,
+                                      long source_num,
                                       Geom::OptRect const &bbox_to_snap) const
 {
     //TODO: PointType and source_type are somewhat redundant; can't we get rid of the point_type parameter?
-    Inkscape::SnappedPoint const s = freeSnap(point_type, p, source_type, first_point, bbox_to_snap);
+    Inkscape::SnappedPoint const s = freeSnap(point_type, p, source_type, source_num, bbox_to_snap);
     s.getPoint(p);
 }
 
@@ -194,7 +194,7 @@ void SnapManager::freeSnapReturnByRef(Inkscape::SnapPreferences::PointType point
  *  \param point_type Category of points to which the source point belongs: node, guide or bounding box
  *  \param p Current position of the snap source
  *  \param source_type Detailed description of the source type, will be used by the snap indicator
- *  \param first_point If true then this point is the first one from a set of points, all from the same selection and having the same transformation
+ *  \param source_num Sequence number of the source point within the set of points that is to be snapped. Starting at zero
  *  \param bbox_to_snap Bounding box hulling the set of points, all from the same selection and having the same transformation
  *  \return An instance of the SnappedPoint class, which holds data on the snap source, snap target, and various metrics
  */
@@ -203,11 +203,11 @@ void SnapManager::freeSnapReturnByRef(Inkscape::SnapPreferences::PointType point
 Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::SnapPreferences::PointType point_type,
                                              Geom::Point const &p,
                                              Inkscape::SnapSourceType const &source_type,
-                                             bool first_point,
+                                             long source_num,
                                              Geom::OptRect const &bbox_to_snap) const
 {
-       if (!someSnapperMightSnap()) {
-        return Inkscape::SnappedPoint(p, source_type, Inkscape::SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false);
+    if (!someSnapperMightSnap()) {
+        return Inkscape::SnappedPoint(p, source_type, 0, Inkscape::SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false);
     }
 
     std::vector<SPItem const *> *items_to_ignore;
@@ -224,7 +224,7 @@ Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::SnapPreferences::PointTyp
     SnapperList const snappers = getSnappers();
 
     for (SnapperList::const_iterator i = snappers.begin(); i != snappers.end(); i++) {
-        (*i)->freeSnap(sc, point_type, p, source_type, first_point, bbox_to_snap, items_to_ignore, _unselected_nodes);
+        (*i)->freeSnap(sc, point_type, p, source_type, source_num, bbox_to_snap, items_to_ignore, _unselected_nodes);
     }
 
     if (_item_to_ignore) {
@@ -280,7 +280,7 @@ Geom::Point SnapManager::multipleOfGridPitch(Geom::Point const &t) const
                 Geom::Point const t_offset = t + grid->origin;
                 SnappedConstraints sc;
                 // Only the first three parameters are being used for grid snappers
-                snapper->freeSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_NODE, t_offset, Inkscape::SNAPSOURCE_UNDEFINED, TRUE, Geom::OptRect(), NULL, NULL);
+                snapper->freeSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_NODE, t_offset, Inkscape::SNAPSOURCE_UNDEFINED, 0, Geom::OptRect(), NULL, NULL);
                 // Find the best snap for this grid, including intersections of the grid-lines
                 Inkscape::SnappedPoint s = findBestSnap(t_offset, Inkscape::SNAPSOURCE_UNDEFINED, sc, false);
                 if (s.getSnapped() && (s.getSnapDistance() < nearest_distance)) {
@@ -323,7 +323,7 @@ Geom::Point SnapManager::multipleOfGridPitch(Geom::Point const &t) const
  *  \param p Current position of the snap source; will be overwritten by the position of the snap target if snapping has occurred
  *  \param source_type Detailed description of the source type, will be used by the snap indicator
  *  \param constraint The direction or line along which snapping must occur
- *  \param first_point If true then this point is the first one from a set of points, all from the same selection and having the same transformation
+ *  \param source_num Sequence number of the source point within the set of points that is to be snapped. Starting at zero
  *  \param bbox_to_snap Bounding box hulling the set of points, all from the same selection and having the same transformation
  */
 
@@ -331,10 +331,10 @@ void SnapManager::constrainedSnapReturnByRef(Inkscape::SnapPreferences::PointTyp
                                              Geom::Point &p,
                                              Inkscape::SnapSourceType const source_type,
                                              Inkscape::Snapper::ConstraintLine const &constraint,
-                                             bool first_point,
+                                             long source_num,
                                              Geom::OptRect const &bbox_to_snap) const
 {
-    Inkscape::SnappedPoint const s = constrainedSnap(point_type, p, source_type, constraint, first_point, bbox_to_snap);
+    Inkscape::SnappedPoint const s = constrainedSnap(point_type, p, source_type, constraint, source_num, bbox_to_snap);
     s.getPoint(p);
 }
 
@@ -353,7 +353,7 @@ void SnapManager::constrainedSnapReturnByRef(Inkscape::SnapPreferences::PointTyp
  *  \param p Current position of the snap source
  *  \param source_type Detailed description of the source type, will be used by the snap indicator
  *  \param constraint The direction or line along which snapping must occur
- *  \param first_point If true then this point is the first one from a set of points, all from the same selection and having the same transformation
+ *  \param source_num Sequence number of the source point within the set of points that is to be snapped. Starting at zero
  *  \param bbox_to_snap Bounding box hulling the set of points, all from the same selection and having the same transformation
  */
 
@@ -361,11 +361,11 @@ Inkscape::SnappedPoint SnapManager::constrainedSnap(Inkscape::SnapPreferences::P
                                                     Geom::Point const &p,
                                                     Inkscape::SnapSourceType const &source_type,
                                                     Inkscape::Snapper::ConstraintLine const &constraint,
-                                                    bool first_point,
+                                                    long source_num,
                                                     Geom::OptRect const &bbox_to_snap) const
 {
     if (!someSnapperMightSnap()) {
-        return Inkscape::SnappedPoint(p, source_type, Inkscape::SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false);
+        return Inkscape::SnappedPoint(p, source_type, 0, Inkscape::SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false);
     }
 
     std::vector<SPItem const *> *items_to_ignore;
@@ -386,7 +386,7 @@ Inkscape::SnappedPoint SnapManager::constrainedSnap(Inkscape::SnapPreferences::P
     SnappedConstraints sc;
     SnapperList const snappers = getSnappers();
     for (SnapperList::const_iterator i = snappers.begin(); i != snappers.end(); i++) {
-        (*i)->constrainedSnap(sc, point_type, pp, source_type, first_point, bbox_to_snap, constraint, items_to_ignore);
+        (*i)->constrainedSnap(sc, point_type, pp, source_type, source_num, bbox_to_snap, constraint, items_to_ignore);
     }
 
     if (_item_to_ignore) {
@@ -420,7 +420,7 @@ void SnapManager::guideFreeSnap(Geom::Point &p, Geom::Point const &guide_normal,
 
     Inkscape::SnapSourceType source_type = Inkscape::SNAPSOURCE_GUIDE_ORIGIN;
     if (drag_type == SP_DRAG_ROTATE) {
-       source_type = Inkscape::SNAPSOURCE_GUIDE;
+        source_type = Inkscape::SNAPSOURCE_GUIDE;
     }
 
     // Snap to nodes
@@ -432,9 +432,9 @@ void SnapManager::guideFreeSnap(Geom::Point &p, Geom::Point const &guide_normal,
     // Snap to guides & grid lines
     SnapperList snappers = getGridSnappers();
     snappers.push_back(&guide);
-       for (SnapperList::const_iterator i = snappers.begin(); i != snappers.end(); i++) {
-               (*i)->freeSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_GUIDE, p, source_type, true, Geom::OptRect(), NULL, NULL);
-       }
+    for (SnapperList::const_iterator i = snappers.begin(); i != snappers.end(); i++) {
+        (*i)->freeSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_GUIDE, p, source_type, 0, Geom::OptRect(), NULL, NULL);
+    }
 
     // Snap to intersections of curves, but not to the curves themselves! (see _snapTranslatingGuideToNodes in object-snapper.cpp)
     Inkscape::SnappedPoint const s = findBestSnap(p, source_type, sc, false, true);
@@ -458,7 +458,7 @@ void SnapManager::guideFreeSnap(Geom::Point &p, Geom::Point const &guide_normal,
 
 void SnapManager::guideConstrainedSnap(Geom::Point &p, SPGuide const &guideline) const
 {
-       if (!snapprefs.getSnapEnabledGlobally() || snapprefs.getSnapPostponedGlobally()) {
+    if (!snapprefs.getSnapEnabledGlobally() || snapprefs.getSnapPostponedGlobally()) {
         return;
     }
 
@@ -472,15 +472,15 @@ void SnapManager::guideConstrainedSnap(Geom::Point &p, SPGuide const &guideline)
     SnappedConstraints sc;
     Inkscape::Snapper::ConstraintLine cl(guideline.point_on_line, Geom::rot90(guideline.normal_to_line));
     if (object.ThisSnapperMightSnap()) {
-        object.constrainedSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_GUIDE, p, source_type, true, Geom::OptRect(), cl, NULL);
+        object.constrainedSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_GUIDE, p, source_type, 0, Geom::OptRect(), cl, NULL);
     }
 
     // Snap to guides & grid lines
-       SnapperList snappers = getGridSnappers();
-       snappers.push_back(&guide);
-       for (SnapperList::const_iterator i = snappers.begin(); i != snappers.end(); i++) {
-               (*i)->constrainedSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_GUIDE, p, source_type, true, Geom::OptRect(), cl, NULL);
-       }
+    SnapperList snappers = getGridSnappers();
+    snappers.push_back(&guide);
+    for (SnapperList::const_iterator i = snappers.begin(); i != snappers.end(); i++) {
+        (*i)->constrainedSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_GUIDE, p, source_type, 0, Geom::OptRect(), cl, NULL);
+    }
 
     Inkscape::SnappedPoint const s = findBestSnap(p, source_type, sc, false);
     s.getPoint(p);
@@ -566,6 +566,7 @@ Inkscape::SnappedPoint SnapManager::_snapTransformed(
     g_assert(best_snapped_point.getAtIntersection() == false);
 
     std::vector<std::pair<Geom::Point, int> >::const_iterator j = transformed_points.begin();
+    long source_num = 0;
 
     // std::cout << std::endl;
     for (std::vector<std::pair<Geom::Point, int> >::const_iterator i = points.begin(); i != points.end(); i++) {
@@ -593,7 +594,7 @@ Inkscape::SnappedPoint SnapManager::_snapTransformed(
             if (transformation_type == SCALE && !uniform) {
                 g_warning("Non-uniform constrained scaling is not supported!");
             }
-            snapped_point = constrainedSnap(type, (*j).first, static_cast<Inkscape::SnapSourceType>((*j).second), dedicated_constraint, i == points.begin(), bbox);
+            snapped_point = constrainedSnap(type, (*j).first, static_cast<Inkscape::SnapSourceType>((*j).second), dedicated_constraint, source_num, bbox);
         } else {
             bool const c1 = fabs(b[Geom::X]) < 1e-6;
             bool const c2 = fabs(b[Geom::Y]) < 1e-6;
@@ -602,9 +603,9 @@ Inkscape::SnappedPoint SnapManager::_snapTransformed(
                 // move in that specific direction; therefore it should only snap in that direction, otherwise
                 // we will get snapped points with an invalid transformation
                 dedicated_constraint = Inkscape::Snapper::ConstraintLine(origin, component_vectors[c1]);
-                snapped_point = constrainedSnap(type, (*j).first, static_cast<Inkscape::SnapSourceType>((*j).second), dedicated_constraint, i == points.begin(), bbox);
+                snapped_point = constrainedSnap(type, (*j).first, static_cast<Inkscape::SnapSourceType>((*j).second), dedicated_constraint, source_num, bbox);
             } else {
-                snapped_point = freeSnap(type, (*j).first, static_cast<Inkscape::SnapSourceType>((*j).second), i == points.begin(), bbox);
+                snapped_point = freeSnap(type, (*j).first, static_cast<Inkscape::SnapSourceType>((*j).second), source_num, bbox);
             }
         }
         // std::cout << "dist = " << snapped_point.getSnapDistance() << std::endl;
@@ -715,6 +716,7 @@ Inkscape::SnappedPoint SnapManager::_snapTransformed(
         }
 
         j++;
+        source_num++;
     }
 
     Geom::Coord best_metric;
@@ -917,10 +919,10 @@ Inkscape::SnappedPoint SnapManager::constrainedSnapSkew(Inkscape::SnapPreference
  */
 
 Inkscape::SnappedPoint SnapManager::findBestSnap(Geom::Point const &p,
-                                                                                            Inkscape::SnapSourceType const source_type,
-                                                                                            SnappedConstraints &sc,
-                                                                                            bool constrained,
-                                                                                            bool noCurves) const
+                                                 Inkscape::SnapSourceType const source_type,
+                                                 SnappedConstraints &sc,
+                                                 bool constrained,
+                                                 bool noCurves) const
 {
 
     /*
@@ -943,10 +945,10 @@ Inkscape::SnappedPoint SnapManager::findBestSnap(Geom::Point const &p,
 
     // search for the closest snapped curve
     if (!noCurves) {
-               Inkscape::SnappedCurve closestCurve;
-               if (getClosestCurve(sc.curves, closestCurve)) {
-                       sp_list.push_back(Inkscape::SnappedPoint(closestCurve));
-               }
+        Inkscape::SnappedCurve closestCurve;
+        if (getClosestCurve(sc.curves, closestCurve)) {
+            sp_list.push_back(Inkscape::SnappedPoint(closestCurve));
+        }
     }
 
     if (snapprefs.getSnapIntersectionCS()) {
@@ -1005,7 +1007,7 @@ Inkscape::SnappedPoint SnapManager::findBestSnap(Geom::Point const &p,
     }
 
     // now let's see which snapped point gets a thumbs up
-    Inkscape::SnappedPoint bestSnappedPoint = Inkscape::SnappedPoint(p, Inkscape::SNAPSOURCE_UNDEFINED, Inkscape::SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false);
+    Inkscape::SnappedPoint bestSnappedPoint = Inkscape::SnappedPoint(p, Inkscape::SNAPSOURCE_UNDEFINED, 0, Inkscape::SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false);
     // std::cout << "Finding the best snap..." << std::endl;
     for (std::list<Inkscape::SnappedPoint>::const_iterator i = sp_list.begin(); i != sp_list.end(); i++) {
         // first find out if this snapped point is within snapping range
index e621bdb605334cb1b1e0fa4619368d2c09ca69f4..a3e463092cc4f8b1ddd570257db0c6073a9dd0df 100644 (file)
@@ -52,14 +52,14 @@ class SPNamedView;
 class SnapManager
 {
 public:
-       enum Transformation {
+    enum Transformation {
         TRANSLATION,
         SCALE,
         STRETCH,
         SKEW
     };
 
-       SnapManager(SPNamedView const *v);
+    SnapManager(SPNamedView const *v);
 
     typedef std::list<const Inkscape::Snapper*> SnapperList;
 
@@ -67,30 +67,30 @@ public:
     bool gridSnapperMightSnap() const;
 
     void setup(SPDesktop const *desktop,
-                       bool snapindicator = true,
-                       SPItem const *item_to_ignore = NULL,
-                       std::vector<std::pair<Geom::Point, int> > *unselected_nodes = NULL,
-                       SPGuide *guide_to_ignore = NULL);
+            bool snapindicator = true,
+            SPItem const *item_to_ignore = NULL,
+            std::vector<std::pair<Geom::Point, int> > *unselected_nodes = NULL,
+            SPGuide *guide_to_ignore = NULL);
 
     void setup(SPDesktop const *desktop,
-               bool snapindicator,
-               std::vector<SPItem const *> &items_to_ignore,
-               std::vector<std::pair<Geom::Point, int> > *unselected_nodes = NULL,
-               SPGuide *guide_to_ignore = NULL);
+            bool snapindicator,
+            std::vector<SPItem const *> &items_to_ignore,
+            std::vector<std::pair<Geom::Point, int> > *unselected_nodes = NULL,
+            SPGuide *guide_to_ignore = NULL);
 
     // freeSnapReturnByRef() is preferred over freeSnap(), because it only returns a
     // point if snapping has occurred (by overwriting p); otherwise p is untouched
     void freeSnapReturnByRef(Inkscape::SnapPreferences::PointType point_type,
-                                                       Geom::Point &p,
-                                                       Inkscape::SnapSourceType const source_type,
-                                                       bool first_point = true,
-                                                       Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const;
+                                Geom::Point &p,
+                                Inkscape::SnapSourceType const source_type,
+                                long source_num = 0,
+                                Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const;
 
 
     Inkscape::SnappedPoint freeSnap(Inkscape::SnapPreferences::PointType point_type,
-                                                                       Geom::Point const &p,
-                                                           Inkscape::SnapSourceType const &source_type,
-                                       bool first_point = true,
+                                    Geom::Point const &p,
+                                    Inkscape::SnapSourceType const &source_type,
+                                    long source_num = 0,
                                     Geom::OptRect const &bbox_to_snap = Geom::OptRect() ) const;
 
     Geom::Point multipleOfGridPitch(Geom::Point const &t) const;
@@ -98,17 +98,17 @@ public:
     // constrainedSnapReturnByRef() is preferred over constrainedSnap(), because it only returns a
     // point, by overwriting p, if snapping has occurred; otherwise p is untouched
     void constrainedSnapReturnByRef(Inkscape::SnapPreferences::PointType point_type,
-                                                                       Geom::Point &p,
-                                                                       Inkscape::SnapSourceType const source_type,
-                                                                       Inkscape::Snapper::ConstraintLine const &constraint,
-                                                                       bool first_point = true,
-                                                                       Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const;
+                                    Geom::Point &p,
+                                    Inkscape::SnapSourceType const source_type,
+                                    Inkscape::Snapper::ConstraintLine const &constraint,
+                                    long source_num = 0,
+                                    Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const;
 
     Inkscape::SnappedPoint constrainedSnap(Inkscape::SnapPreferences::PointType point_type,
-                                                                                  Geom::Point const &p,
-                                                                                  Inkscape::SnapSourceType const &source_type,
-                                                                                  Inkscape::Snapper::ConstraintLine const &constraint,
-                                                                                  bool first_point = true,
+                                           Geom::Point const &p,
+                                           Inkscape::SnapSourceType const &source_type,
+                                           Inkscape::Snapper::ConstraintLine const &constraint,
+                                           long source_num = 0,
                                            Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const;
 
     void guideFreeSnap(Geom::Point &p, Geom::Point const &guide_normal, SPGuideDragType drag_type) const;
index 4da2d4c7d5601aaf8699bcb23249f8b5a58501ca..33403863869525231c775f17e9580ed2a378190e 100644 (file)
@@ -12,7 +12,7 @@
 #include <2geom/crossing.h>
 #include <2geom/path-intersection.h>
 
-Inkscape::SnappedCurve::SnappedCurve(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, Geom::Coord const &snapped_tolerance, bool const &always_snap, bool const &fully_constrained, Geom::Curve const *curve, SnapSourceType source, SnapTargetType target)
+Inkscape::SnappedCurve::SnappedCurve(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, Geom::Coord const &snapped_tolerance, bool const &always_snap, bool const &fully_constrained, Geom::Curve const *curve, SnapSourceType source, long source_num, SnapTargetType target)
 {
     _distance = snapped_distance;
     _tolerance = std::max(snapped_tolerance, 1.0);
@@ -25,6 +25,7 @@ Inkscape::SnappedCurve::SnappedCurve(Geom::Point const &snapped_point, Geom::Coo
     _at_intersection = false;
     _fully_constrained = fully_constrained;
     _source = source;
+    _source_num = source_num;
     _target = target;
 }
 
@@ -41,6 +42,7 @@ Inkscape::SnappedCurve::SnappedCurve()
     _at_intersection = false;
     _fully_constrained = false;
     _source = SNAPSOURCE_UNDEFINED;
+    _source_num = 0;
     _target = SNAPTARGET_UNDEFINED;
 }
 
@@ -83,12 +85,12 @@ Inkscape::SnappedPoint Inkscape::SnappedCurve::intersect(SnappedCurve const &cur
         // TODO: Investigate whether it is possible to use document coordinates everywhere
         // in the snapper code. Only the mouse position should be in desktop coordinates, I guess.
         // All paths are already in document coords and we are certainly not going to change THAT.
-        return SnappedPoint(best_p, Inkscape::SNAPSOURCE_UNDEFINED, Inkscape::SNAPTARGET_PATH_INTERSECTION, primaryDist, primaryC->getTolerance(), primaryC->getAlwaysSnap(), true, true,
+        return SnappedPoint(best_p, Inkscape::SNAPSOURCE_UNDEFINED, primaryC->getSourceNum(), Inkscape::SNAPTARGET_PATH_INTERSECTION, primaryDist, primaryC->getTolerance(), primaryC->getAlwaysSnap(), true, true,
                 secondaryDist, secondaryC->getTolerance(), secondaryC->getAlwaysSnap());
     }
 
     // No intersection
-    return SnappedPoint(Geom::Point(NR_HUGE, NR_HUGE), SNAPSOURCE_UNDEFINED, SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false, false, NR_HUGE, 0, false);
+    return SnappedPoint(Geom::Point(NR_HUGE, NR_HUGE), SNAPSOURCE_UNDEFINED, 0, SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false, false, NR_HUGE, 0, false);
 }
 
 // search for the closest snapped line
index 0a1fe243134760a08997b7ea21416a8b91a94ce1..4eea6e7342e64f5a864a354855c4123b148d7562 100644 (file)
@@ -24,7 +24,7 @@ class SnappedCurve : public SnappedPoint
 {
 public:
     SnappedCurve();
-    SnappedCurve(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, Geom::Coord const &snapped_tolerance, bool const &always_snap, bool const &fully_constrained, Geom::Curve const *curve, SnapSourceType source, SnapTargetType target);
+    SnappedCurve(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, Geom::Coord const &snapped_tolerance, bool const &always_snap, bool const &fully_constrained, Geom::Curve const *curve, SnapSourceType source, long source_num, SnapTargetType target);
     ~SnappedCurve();
     Inkscape::SnappedPoint intersect(SnappedCurve const &curve, Geom::Point const &p, Geom::Matrix dt2doc) const; //intersect with another SnappedCurve
 
index 3ebbeaf70d3962e5b38baa4bdbe06249707d1ba5..9dde22a4e1f675e25ea5a9336f01dcacc4dfdf7c 100644 (file)
 #include "snapped-line.h"
 #include <2geom/line.h>
 
-Inkscape::SnappedLineSegment::SnappedLineSegment(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, SnapTargetType const &target, Geom::Coord const &snapped_tolerance, bool const &always_snap, Geom::Point const &start_point_of_line, Geom::Point const &end_point_of_line)
+Inkscape::SnappedLineSegment::SnappedLineSegment(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &snapped_tolerance, bool const &always_snap, Geom::Point const &start_point_of_line, Geom::Point const &end_point_of_line)
     : _start_point_of_line(start_point_of_line), _end_point_of_line(end_point_of_line)
 {
     _point = snapped_point;
     _source = source;
-       _target = target;
+    _source_num = source_num;
+    _target = target;
     _distance = snapped_distance;
     _tolerance = std::max(snapped_tolerance, 1.0);
     _always_snap = always_snap;
@@ -32,7 +33,8 @@ Inkscape::SnappedLineSegment::SnappedLineSegment()
     _end_point_of_line = Geom::Point(0,0);
     _point = Geom::Point(0,0);
     _source = SNAPSOURCE_UNDEFINED;
-       _target = SNAPTARGET_UNDEFINED;
+    _source_num = 0;
+    _target = SNAPTARGET_UNDEFINED;
     _distance = NR_HUGE;
     _tolerance = 1;
     _always_snap = false;
@@ -50,19 +52,19 @@ Inkscape::SnappedLineSegment::~SnappedLineSegment()
 Inkscape::SnappedPoint Inkscape::SnappedLineSegment::intersect(SnappedLineSegment const &line) const
 {
     Geom::OptCrossing inters = Geom::OptCrossing(); // empty by default
-       try
-       {
-               inters = Geom::intersection(getLineSegment(), line.getLineSegment());
-       }
-       catch (Geom::InfiniteSolutions e)
-       {
-               // We're probably dealing with parallel lines, so they don't really cross
-               inters = Geom::OptCrossing();
-       }
+    try
+    {
+        inters = Geom::intersection(getLineSegment(), line.getLineSegment());
+    }
+    catch (Geom::InfiniteSolutions e)
+    {
+        // We're probably dealing with parallel lines, so they don't really cross
+        inters = Geom::OptCrossing();
+    }
 
     if (inters) {
         Geom::Point inters_pt = getLineSegment().pointAt((*inters).ta);
-       /* If a snapper has been told to "always snap", then this one should be preferred
+        /* If a snapper has been told to "always snap", then this one should be preferred
          * over the other, if that other one has not been told so. (The preferred snapper
          * will be labeled "primary" below)
         */
@@ -78,22 +80,23 @@ Inkscape::SnappedPoint Inkscape::SnappedLineSegment::intersect(SnappedLineSegmen
         Inkscape::SnappedLineSegment const *secondarySLS = use_this_as_primary ? &line : this;
         Geom::Coord primaryDist = use_this_as_primary ? Geom::L2(inters_pt - this->getPoint()) : Geom::L2(inters_pt - line.getPoint());
         Geom::Coord secondaryDist = use_this_as_primary ? Geom::L2(inters_pt - line.getPoint()) : Geom::L2(inters_pt - this->getPoint());
-        return SnappedPoint(inters_pt, SNAPSOURCE_UNDEFINED, SNAPTARGET_PATH_INTERSECTION, primaryDist, primarySLS->getTolerance(), primarySLS->getAlwaysSnap(), true, true,
+        return SnappedPoint(inters_pt, SNAPSOURCE_UNDEFINED, primarySLS->getSourceNum(), SNAPTARGET_PATH_INTERSECTION, primaryDist, primarySLS->getTolerance(), primarySLS->getAlwaysSnap(), true, true,
                                           secondaryDist, secondarySLS->getTolerance(), secondarySLS->getAlwaysSnap());
     }
 
     // No intersection
-    return SnappedPoint(Geom::Point(NR_HUGE, NR_HUGE), SNAPSOURCE_UNDEFINED, SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false, false, NR_HUGE, 0, false);
+    return SnappedPoint(Geom::Point(NR_HUGE, NR_HUGE), SNAPSOURCE_UNDEFINED, 0, SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false, false, NR_HUGE, 0, false);
 };
 
 
 
-Inkscape::SnappedLine::SnappedLine(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, SnapTargetType const &target, Geom::Coord const &snapped_tolerance, bool const &always_snap, Geom::Point const &normal_to_line, Geom::Point const &point_on_line)
+Inkscape::SnappedLine::SnappedLine(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &snapped_tolerance, bool const &always_snap, Geom::Point const &normal_to_line, Geom::Point const &point_on_line)
     : _normal_to_line(normal_to_line), _point_on_line(point_on_line)
 {
-       _source = source;
-       _target = target;
-       _distance = snapped_distance;
+    _source = source;
+    _source_num = source_num;
+    _target = target;
+    _distance = snapped_distance;
     _tolerance = std::max(snapped_tolerance, 1.0);
     _always_snap = always_snap;
     _second_distance = NR_HUGE;
@@ -108,7 +111,8 @@ Inkscape::SnappedLine::SnappedLine()
     _normal_to_line = Geom::Point(0,0);
     _point_on_line = Geom::Point(0,0);
     _source = SNAPSOURCE_UNDEFINED;
-       _target = SNAPTARGET_UNDEFINED;
+    _source_num = 0;
+    _target = SNAPTARGET_UNDEFINED;
     _distance = NR_HUGE;
     _tolerance = 1;
     _always_snap = false;
@@ -130,19 +134,19 @@ Inkscape::SnappedPoint Inkscape::SnappedLine::intersect(SnappedLine const &line)
     // The point of intersection should be considered for snapping, but might be outside the snapping range
 
     Geom::OptCrossing inters = Geom::OptCrossing(); // empty by default
-       try
-       {
-               inters = Geom::intersection(getLine(), line.getLine());
-       }
-       catch (Geom::InfiniteSolutions e)
-       {
-               // We're probably dealing with parallel lines, so they don't really cross
-               inters = Geom::OptCrossing();
-       }
+    try
+    {
+        inters = Geom::intersection(getLine(), line.getLine());
+    }
+    catch (Geom::InfiniteSolutions e)
+    {
+        // We're probably dealing with parallel lines, so they don't really cross
+        inters = Geom::OptCrossing();
+    }
 
     if (inters) {
-       Geom::Point inters_pt = getLine().pointAt((*inters).ta);
-       /* If a snapper has been told to "always snap", then this one should be preferred
+        Geom::Point inters_pt = getLine().pointAt((*inters).ta);
+        /* If a snapper has been told to "always snap", then this one should be preferred
          * over the other, if that other one has not been told so. (The preferred snapper
          * will be labelled "primary" below)
         */
@@ -157,14 +161,14 @@ Inkscape::SnappedPoint Inkscape::SnappedLine::intersect(SnappedLine const &line)
         Inkscape::SnappedLine const *secondarySL = use_this_as_primary ? &line : this;
         Geom::Coord primaryDist = use_this_as_primary ? Geom::L2(inters_pt - this->getPoint()) : Geom::L2(inters_pt - line.getPoint());
         Geom::Coord secondaryDist = use_this_as_primary ? Geom::L2(inters_pt - line.getPoint()) : Geom::L2(inters_pt - this->getPoint());
-        return SnappedPoint(inters_pt, Inkscape::SNAPSOURCE_UNDEFINED, Inkscape::SNAPTARGET_UNDEFINED, primaryDist, primarySL->getTolerance(), primarySL->getAlwaysSnap(), true, true,
+        return SnappedPoint(inters_pt, Inkscape::SNAPSOURCE_UNDEFINED, primarySL->getSourceNum(), Inkscape::SNAPTARGET_UNDEFINED, primaryDist, primarySL->getTolerance(), primarySL->getAlwaysSnap(), true, true,
                                           secondaryDist, secondarySL->getTolerance(), secondarySL->getAlwaysSnap());
         // The type of the snap target is yet undefined, as we cannot tell whether
         // we're snapping to grid or the guide lines; must be set by on a higher level
     }
 
     // No intersection
-    return SnappedPoint(Geom::Point(NR_HUGE, NR_HUGE), SNAPSOURCE_UNDEFINED, SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false, false, NR_HUGE, 0, false);
+    return SnappedPoint(Geom::Point(NR_HUGE, NR_HUGE), SNAPSOURCE_UNDEFINED, 0, SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false, false, NR_HUGE, 0, false);
 }
 
 // search for the closest snapped line segment
index 3dec432e7eff4e119a01f1695f6be1d41bdf152b..b95e7a7dff3d9f5884718b31fbe5e92ec8f11ce8 100644 (file)
@@ -23,7 +23,7 @@ class SnappedLineSegment : public SnappedPoint
 {
 public:
     SnappedLineSegment();
-    SnappedLineSegment(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, SnapTargetType const &target, Geom::Coord const &snapped_tolerance,bool const &always_snap, Geom::Point const &start_point_of_line, Geom::Point const &end_point_of_line);
+    SnappedLineSegment(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &snapped_tolerance,bool const &always_snap, Geom::Point const &start_point_of_line, Geom::Point const &end_point_of_line);
     ~SnappedLineSegment();
     Inkscape::SnappedPoint intersect(SnappedLineSegment const &line) const; //intersect with another SnappedLineSegment
     Geom::LineSegment getLineSegment() const {return Geom::LineSegment(_start_point_of_line, _end_point_of_line);}
@@ -39,7 +39,7 @@ class SnappedLine : public SnappedPoint
 {
 public:
     SnappedLine();
-    SnappedLine(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, SnapTargetType const &target, Geom::Coord const &snapped_tolerance, bool const &always_snap, Geom::Point const &normal_to_line, Geom::Point const &point_on_line);
+    SnappedLine(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &snapped_tolerance, bool const &always_snap, Geom::Point const &normal_to_line, Geom::Point const &point_on_line);
     ~SnappedLine();
     Inkscape::SnappedPoint intersect(SnappedLine const &line) const; //intersect with another SnappedLine
     // This line is described by this equation:
index 2d028c6d78eb441b264e18b8a30f342577d630cb..102e761b9ef2cadcb319ab0dcd7d64fe205d89da 100644 (file)
@@ -14,8 +14,8 @@
 #include "preferences.h"
 
 // overloaded constructor
-Inkscape::SnappedPoint::SnappedPoint(Geom::Point const &p, SnapSourceType const &source, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &fully_constrained)
-    : _point(p), _source(source), _target(target), _distance(d), _tolerance(std::max(t,1.0)), _always_snap(a)
+Inkscape::SnappedPoint::SnappedPoint(Geom::Point const &p, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &fully_constrained)
+    : _point(p), _source(source), _source_num(source_num), _target(target), _distance(d), _tolerance(std::max(t,1.0)), _always_snap(a)
 {
     // tolerance should never be smaller than 1 px, as it is used for normalization in isOtherSnapBetter. We don't want a division by zero.
     _at_intersection = false;
@@ -27,8 +27,8 @@ Inkscape::SnappedPoint::SnappedPoint(Geom::Point const &p, SnapSourceType const
     _pointer_distance = NR_HUGE;
 }
 
-Inkscape::SnappedPoint::SnappedPoint(Geom::Point const &p, SnapSourceType const &source, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &at_intersection, bool const &fully_constrained, Geom::Coord const &d2, Geom::Coord const &t2, bool const &a2)
-    : _point(p), _source(source), _target(target), _at_intersection(at_intersection), _fully_constrained(fully_constrained), _distance(d), _tolerance(std::max(t,1.0)), _always_snap(a),
+Inkscape::SnappedPoint::SnappedPoint(Geom::Point const &p, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &at_intersection, bool const &fully_constrained, Geom::Coord const &d2, Geom::Coord const &t2, bool const &a2)
+    : _point(p), _source(source), _source_num(source_num), _target(target), _at_intersection(at_intersection), _fully_constrained(fully_constrained), _distance(d), _tolerance(std::max(t,1.0)), _always_snap(a),
     _second_distance(d2), _second_tolerance(std::max(t2,1.0)), _second_always_snap(a2)
 {
     // tolerance should never be smaller than 1 px, as it is used for normalization in
@@ -41,6 +41,7 @@ Inkscape::SnappedPoint::SnappedPoint()
 {
     _point = Geom::Point(0,0);
     _source = SNAPSOURCE_UNDEFINED,
+    _source_num = 0,
     _target = SNAPTARGET_UNDEFINED,
     _at_intersection = false;
     _fully_constrained = false;
@@ -73,7 +74,7 @@ bool getClosestSP(std::list<Inkscape::SnappedPoint> &list, Inkscape::SnappedPoin
     bool success = false;
 
     for (std::list<Inkscape::SnappedPoint>::const_iterator i = list.begin(); i != list.end(); i++) {
-       if ((i == list.begin()) || (*i).getSnapDistance() < result.getSnapDistance()) {
+        if ((i == list.begin()) || (*i).getSnapDistance() < result.getSnapDistance()) {
             result = *i;
             success = true;
         }
@@ -93,9 +94,9 @@ bool Inkscape::SnappedPoint::isOtherSnapBetter(Inkscape::SnappedPoint const &oth
     // (both the snap distance and the pointer distance are measured in document pixels, not in screen pixels)
     if (weighted) {
 
-       Geom::Coord const dist_pointer_other = other_one.getPointerDistance();
-       Geom::Coord const dist_pointer_this = getPointerDistance();
-       // Weight factor: controls which node should be preferred for snapping, which is either
+        Geom::Coord const dist_pointer_other = other_one.getPointerDistance();
+        Geom::Coord const dist_pointer_this = getPointerDistance();
+        // Weight factor: controls which node should be preferred for snapping, which is either
         // the node with the closest snap (w = 0), or the node closest to the mousepointer (w = 1)
         Inkscape::Preferences *prefs = Inkscape::Preferences::get();
         double w = prefs->getDoubleLimited("/options/snapweight/value", 0.5, 0, 1);
@@ -103,21 +104,21 @@ bool Inkscape::SnappedPoint::isOtherSnapBetter(Inkscape::SnappedPoint const &oth
             w = 1;
         }
         if (w > 0) {
-               if (!(w == 1 && dist_pointer_this == dist_pointer_other)) {
-                       // When accounting for the distance to the mouse pointer, then at least one of the snapped points should
-                               // have that distance set. If not, then this is a bug. Either "weighted" must be set to false, or the
-                               // mouse pointer distance must be set.
-                               g_assert(dist_pointer_this != NR_HUGE || dist_pointer_other != NR_HUGE);
-                               // The snap distance will always be smaller than the tolerance set for the snapper. The pointer distance can
-                               // however be very large. To compare these in a fair way, we will have to normalize these metrics first
-                               // The closest pointer distance will be normalized to 1.0; the other one will be > 1.0
-                               // The snap distance will be normalized to 1.0 if it's equal to the snapper tolerance
-                               double const norm_p = std::min(dist_pointer_this, dist_pointer_other);
-                               double const norm_t_other = std::min(50.0, other_one.getTolerance());
-                               double const norm_t_this = std::min(50.0, getTolerance());
-                               dist_other = w * dist_pointer_other / norm_p + (1-w) * dist_other / norm_t_other;
-                               dist_this = w * dist_pointer_this / norm_p + (1-w) * dist_this / norm_t_this;
-               }
+            if (!(w == 1 && dist_pointer_this == dist_pointer_other)) {
+                // When accounting for the distance to the mouse pointer, then at least one of the snapped points should
+                // have that distance set. If not, then this is a bug. Either "weighted" must be set to false, or the
+                // mouse pointer distance must be set.
+                g_assert(dist_pointer_this != NR_HUGE || dist_pointer_other != NR_HUGE);
+                // The snap distance will always be smaller than the tolerance set for the snapper. The pointer distance can
+                // however be very large. To compare these in a fair way, we will have to normalize these metrics first
+                // The closest pointer distance will be normalized to 1.0; the other one will be > 1.0
+                // The snap distance will be normalized to 1.0 if it's equal to the snapper tolerance
+                double const norm_p = std::min(dist_pointer_this, dist_pointer_other);
+                double const norm_t_other = std::min(50.0, other_one.getTolerance());
+                double const norm_t_this = std::min(50.0, getTolerance());
+                dist_other = w * dist_pointer_other / norm_p + (1-w) * dist_other / norm_t_other;
+                dist_this = w * dist_pointer_this / norm_p + (1-w) * dist_this / norm_t_this;
+            }
         }
     }
 
index 70d16b0be10be3c586aac58469e8f5065df6751a..70d353a7366ca2a28f94f8f8352f05a4c1d50e91 100644 (file)
@@ -78,8 +78,8 @@ class SnappedPoint
 
 public:
     SnappedPoint();
-    SnappedPoint(Geom::Point const &p, SnapSourceType const &source, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &at_intersection, bool const &fully_constrained, Geom::Coord const &d2, Geom::Coord const &t2, bool const &a2);
-    SnappedPoint(Geom::Point const &p, SnapSourceType const &source, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &fully_constrained);
+    SnappedPoint(Geom::Point const &p, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &at_intersection, bool const &fully_constrained, Geom::Coord const &d2, Geom::Coord const &t2, bool const &a2);
+    SnappedPoint(Geom::Point const &p, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &fully_constrained);
     ~SnappedPoint();
 
     Geom::Coord getSnapDistance() const {return _distance;}
@@ -115,13 +115,15 @@ public:
     void setTarget(SnapTargetType const target) {_target = target;}
     SnapTargetType getTarget() const {return _target;}
     void setSource(SnapSourceType const source) {_source = source;}
-       SnapSourceType getSource() const {return _source;}
+    SnapSourceType getSource() const {return _source;}
+    long getSourceNum() const {return _source_num;}
 
     bool isOtherSnapBetter(SnappedPoint const &other_one, bool weighted) const;
 
     /*void dump() const {
         std::cout << "_point              = " << _point << std::endl;
         std::cout << "_source             = " << _source << std::endl;
+        std::cout << "_source_num         = " << _source_num << std::endl;
         std::cout << "_target             = " << _target << std::endl;
         std::cout << "_at_intersection    = " << _at_intersection << std::endl;
         std::cout << "_fully_constrained  = " << _fully_constrained << std::endl;
@@ -138,6 +140,7 @@ public:
 protected:
     Geom::Point _point; // Location of the snapped point
     SnapSourceType _source; // Describes what snapped
+    long _source_num; // Sequence number of the source point that snapped, if that point is part of a set of points. (starting at zero)
     SnapTargetType _target; // Describes to what we've snapped to
     bool _at_intersection; // If true, the snapped point is at an intersection
     bool _fully_constrained; // When snapping for example to a node, then the snap will be "fully constrained".
@@ -153,7 +156,7 @@ protected:
     bool _always_snap;
 
     /* If the snapped point is at an intersection of e.g. two lines, then this is
-       the distance to the fartest line */
+       the distance to the farthest line */
     Geom::Coord _second_distance;
     /* The snapping tolerance in screen pixels (depends on zoom)*/
     Geom::Coord _second_tolerance;
index 110b3d36ad5292fa721e1db7e55b76af01c5ce19..dcc0fbb8146499662c2a49794a7298b9ce80057d 100644 (file)
@@ -39,9 +39,9 @@ namespace Inkscape
 class Snapper
 {
 public:
-       Snapper() {}
-       Snapper(SnapManager *sm, ::Geom::Coord const t);
-       virtual ~Snapper() {}
+    Snapper() {}
+    Snapper(SnapManager *sm, ::Geom::Coord const t);
+    virtual ~Snapper() {}
 
     virtual Geom::Coord getSnapperTolerance() const = 0; //returns the tolerance of the snapper in screen pixels (i.e. independent of zoom)
     virtual bool getSnapperAlwaysSnap() const = 0; //if true, then the snapper will always snap, regardless of its tolerance
@@ -53,7 +53,7 @@ public:
 
     // These four methods are only used for grids, for which snapping can be enabled individually
     void setEnabled(bool s);
-       void setSnapVisibleOnly(bool s);
+    void setSnapVisibleOnly(bool s);
     bool getEnabled() const {return _snap_enabled;}
     bool getSnapVisibleOnly() const {return _snap_visible_only;}
 
@@ -61,7 +61,7 @@ public:
                           SnapPreferences::PointType const &/*t*/,
                           Geom::Point const &/*p*/,
                           SnapSourceType const &/*source_type*/,
-                          bool const &/*first_point*/,
+                          long /*source_num*/,
                           Geom::OptRect const &/*bbox_to_snap*/,
                           std::vector<SPItem const *> const */*it*/,
                           std::vector<std::pair<Geom::Point, int> > */*unselected_nodes*/) const {};
@@ -90,9 +90,9 @@ public:
         }
 
         Geom::Point projection(Geom::Point const &p) const { // returns the projection of p on this constraintline
-               Geom::Point const p1_on_cl = _has_point ? _point : p;
-                       Geom::Point const p2_on_cl = p1_on_cl + _direction;
-               return Geom::projection(p, Geom::Line(p1_on_cl, p2_on_cl));
+            Geom::Point const p1_on_cl = _has_point ? _point : p;
+            Geom::Point const p2_on_cl = p1_on_cl + _direction;
+            return Geom::projection(p, Geom::Line(p1_on_cl, p2_on_cl));
         }
 
     private:
@@ -103,20 +103,20 @@ public:
     };
 
     virtual void constrainedSnap(SnappedConstraints &/*sc*/,
-                                                        SnapPreferences::PointType const &/*t*/,
+                                 SnapPreferences::PointType const &/*t*/,
                                  Geom::Point const &/*p*/,
                                  SnapSourceType const &/*source_type*/,
-                                 bool const &/*first_point*/,
+                                 long /*source_num*/,
                                  Geom::OptRect const &/*bbox_to_snap*/,
                                  ConstraintLine const &/*c*/,
                                  std::vector<SPItem const *> const */*it*/) const {};
 
 protected:
-       SnapManager *_snapmanager;
+    SnapManager *_snapmanager;
 
-       // This is only used for grids, for which snapping can be enabled individually
-       bool _snap_enabled; ///< true if this snapper is enabled, otherwise false
-       bool _snap_visible_only;
+    // This is only used for grids, for which snapping can be enabled individually
+    bool _snap_enabled; ///< true if this snapper is enabled, otherwise false
+    bool _snap_visible_only;
 };
 
 }
index 6af2f7169eaf3c9eb34ed451470c0d9ee4fa0aa1..e4259e52ca9bb0f3adf9a8cc63f5d26f49975147 100644 (file)
@@ -372,10 +372,16 @@ static gchar *sp_flowtext_description(SPItem *item)
 {
     Inkscape::Text::Layout const &layout = SP_FLOWTEXT(item)->layout;
     int const nChars = layout.iteratorToCharIndex(layout.end());
+
+    char *trunc = "";
+    if (layout.inputTruncated()) {
+        trunc = _(" [truncated]");
+    }
+
     if (SP_FLOWTEXT(item)->has_internal_frame())
-        return g_strdup_printf(ngettext("<b>Flowed text</b> (%d character)", "<b>Flowed text</b> (%d characters)", nChars), nChars);
+        return g_strdup_printf(ngettext("<b>Flowed text</b> (%d character%s)", "<b>Flowed text</b> (%d characters%s)", nChars), nChars, trunc);
     else
-        return g_strdup_printf(ngettext("<b>Linked flowed text</b> (%d character)", "<b>Linked flowed text</b> (%d characters)", nChars), nChars);
+        return g_strdup_printf(ngettext("<b>Linked flowed text</b> (%d character%s)", "<b>Linked flowed text</b> (%d characters%s)", nChars), nChars, trunc);
 }
 
 static NRArenaItem *
index 1ec6f4601b90e3a389e7c09c215af002eea7aa6d..704985b8cf5ae9932a0f6d6afe0e21b8c37b0c11 100644 (file)
@@ -13,7 +13,7 @@
  * http://www.w3.org/TR/SVG/fonts.html#FontFaceElement
  *
  * Author:
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008, Felipe C. da S. Sanches
  *
index 8fe1c752f448d37e0791e77edffeef44f33ca9fc..e492ba0913cadf96463d2fe332b7192a56ded2e1 100644 (file)
@@ -14,7 +14,7 @@
  * http://www.w3.org/TR/SVG/fonts.html#FontFaceElement
  *
  * Authors:
- *    Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *    Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Felipe C. da S. Sanches
  *
index 75fb186383a56bb64449f01852d9e6c409329762..de272c72faf86eeaa27a7fe6c70104626db52404 100644 (file)
@@ -8,7 +8,7 @@
  * SVG <font> element implementation
  *
  * Author:
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008, Felipe C. da S. Sanches
  *
index fad7ead42bbdfb3568f549f3e7effd3237154c4f..a0f895a520b7ee5f787b80d4fb157c2394b58c41 100644 (file)
@@ -9,7 +9,7 @@
  * SVG <font> element implementation
  *
  * Authors:
- *    Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *    Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Felipe C. da S. Sanches
  *
index 6d08f212cea1318cb9ad2a6037dc06aadca59072..872efc853cc709c4b235baf49da828ee4d189842 100644 (file)
@@ -10,7 +10,7 @@
  * W3C SVG 1.1 spec, page 476, section 20.7
  *
  * Author:
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008, Felipe C. da S. Sanches
  *
index ec0866c2c2b57db9be988b3b8e1c32063623befb..ce9b4bb15e9638df58bb8d3911af66392ab80df8 100644 (file)
@@ -10,7 +10,7 @@
  * SVG <hkern> and <vkern> elements implementation
  *
  * Authors:
- *    Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *    Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Felipe C. da S. Sanches
  *
index 8af78a0aaf55111113cd1f056e2a98ac5036b454..37e266da046e17f9b89a669c4d45c6ede30da13a 100644 (file)
@@ -9,7 +9,7 @@
  * SVG <glyph> element implementation
  *
  * Author:
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008, Felipe C. da S. Sanches
  *
index 8c35a3a8342531de4a18e42a6c5644e2c7f48a26..316204c23bf4eac2db5ec3700647ad3eb760db05 100644 (file)
@@ -10,7 +10,7 @@
  * SVG <glyph> element implementation
  *
  * Authors:
- *    Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *    Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Felipe C. da S. Sanches
  *
index 65aad1e2d097a30f0e20df76275becc1ce5386c0..e3f70814269a6b1f1672995bbd927f5a86be4ebd 100644 (file)
 #include "color-profile.h"
 //#define DEBUG_LCMS
 #ifdef DEBUG_LCMS
+
+
+#define DEBUG_MESSAGE(key, ...)\
+{\
+    g_message( __VA_ARGS__ );\
+}
+
 #include "preferences.h"
 #include <gtk/gtkmessagedialog.h>
 #endif // DEBUG_LCMS
@@ -105,7 +112,7 @@ extern "C"
 
 #ifdef DEBUG_LCMS
 extern guint update_in_progress;
-#define DEBUG_MESSAGE(key, ...) \
+#define DEBUG_MESSAGE_SCISLAC(key, ...) \
 {\
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();\
     bool dump = prefs->getBool("/options/scislac/" #key);\
index 7ac7880a79d0e17a9653a6212d09aba2e84fa479..3845be23219b8ceb8e51a69cafa1f403e42dd6ff 100644 (file)
@@ -67,7 +67,6 @@ static void sp_group_set(SPObject *object, unsigned key, char const *value);
 static void sp_group_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags);
 static void sp_group_print (SPItem * item, SPPrintContext *ctx);
 static gchar * sp_group_description (SPItem * item);
-static Geom::Matrix sp_group_set_transform(SPItem *item, Geom::Matrix const &xform);
 static NRArenaItem *sp_group_show (SPItem *item, NRArena *arena, unsigned int key, unsigned int flags);
 static void sp_group_hide (SPItem * item, unsigned int key);
 static void sp_group_snappoints (SPItem const *item, bool const target, SnapPointsWithType &p, Inkscape::SnapPreferences const *snapprefs);
@@ -129,7 +128,6 @@ sp_group_class_init (SPGroupClass *klass)
     item_class->bbox = sp_group_bbox;
     item_class->print = sp_group_print;
     item_class->description = sp_group_description;
-        item_class->set_transform = sp_group_set_transform;
     item_class->show = sp_group_show;
     item_class->hide = sp_group_hide;
     item_class->snappoints = sp_group_snappoints;
@@ -291,24 +289,6 @@ static gchar * sp_group_description (SPItem * item)
     return SP_GROUP(item)->group->getDescription();
 }
 
-static Geom::Matrix
-sp_group_set_transform(SPItem *item, Geom::Matrix const &xform)
-{
-    Inkscape::Selection *selection = sp_desktop_selection(inkscape_active_desktop());
-    persp3d_split_perspectives_according_to_selection(selection);
-
-    Geom::Matrix last_trans;
-    sp_svg_transform_read(SP_OBJECT_REPR(item)->attribute("transform"), &last_trans);
-    Geom::Matrix inc_trans = last_trans.inverse()*xform;
-
-    std::list<Persp3D *> plist = selection->perspList();
-    for (std::list<Persp3D *>::iterator i = plist.begin(); i != plist.end(); ++i) {
-        persp3d_apply_affine_transformation(*i, inc_trans);
-    }
-
-    return xform;
-}
-
 static void sp_group_set(SPObject *object, unsigned key, char const *value) {
     SPGroup *group = SP_GROUP(object);
 
index 98cab3746450da5a274243c05fa7f19ab084aa36..b6877e5aacc672d0f515465f53014ae323e270dc 100644 (file)
@@ -5,6 +5,8 @@
  * These enums are to allow us to have 4-element arrays that represent a set of marker locations
  * (all, start, mid, and end).  This allows us to iterate through the array in places where we need
  * to do a process across all of the markers, instead of separate code stanzas for each.
+ *
+ * IMPORTANT:  the code assumes that the locations have the values as written below! so don't change the values!!!
  */
 enum SPMarkerLoc {
     SP_MARKER_LOC = 0,
index ffc29a71ed45ff9c622f15d02c069d57d5343b71..d25a5f8126933e384618f4fa9648f9b7bd15f36e 100644 (file)
@@ -9,7 +9,7 @@
  * SVG <missing-glyph> element implementation
  *
  * Author:
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008, Felipe C. da S. Sanches
  *
index 2a4cfde079d6abede378cad92fef7862321383fc..0b3f7436020bd9b20bee76134ea7695a82e6c0f1 100644 (file)
@@ -10,7 +10,7 @@
  * SVG <missing-glyph> element implementation
  *
  * Authors:
- *    Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *    Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Felipe C. da S. Sanches
  *
index 47720c5d64f12fb9409e1f74aa7a537b457d0fe8..9b72a41578492440ac2257540e8a4caf893b2f5a 100644 (file)
@@ -304,6 +304,7 @@ static void sp_namedview_release(SPObject *object)
 static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *value)
 {
     SPNamedView *nv = SP_NAMEDVIEW(object);
+    // TODO investigate why we grab this and then never use it
     SPUnit const &px = sp_unit_get_by_id(SP_UNIT_PX);
 
     switch (key) {
index 2120ddd6493069cd7158127515b5ef99b7ff32d2..bbcb25356a28289f14d58f1485b574fb6d92ac7d 100644 (file)
@@ -295,6 +295,7 @@ sp_path_set(SPObject *object, unsigned int key, gchar const *value)
             object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
             break;
         case SP_ATTR_CONNECTOR_TYPE:
+        case SP_ATTR_CONNECTOR_CURVATURE:
         case SP_ATTR_CONNECTION_START:
         case SP_ATTR_CONNECTION_END:
             path->connEndPair.setAttr(key, value);
index a4013245003c339ea3b91e47e177921cdfae84e7..ad41b8021dc2d2a73eb23ccdea9f58e2e41b0223 100644 (file)
@@ -4,7 +4,7 @@
  * SVG <script> implementation
  *
  * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 authors
  *
index fa1906052d816d81c597da1d26762b9e98f06e90..127eeedf7b9c5420e6c861052ac30ec34b323a80 100644 (file)
@@ -5,7 +5,7 @@
  * SVG <script> implementation
  *
  * Author:
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Author
  *
index 0d3fd791b58f813b10ab94ceb0cedff731276adf..b45f8cbb607d3a67d6aac7f7f39bc2384364a0d1 100644 (file)
@@ -421,20 +421,30 @@ sp_text_description(SPItem *item)
 
     GString *xs = SP_PX_TO_METRIC_STRING(style->font_size.computed, sp_desktop_namedview(SP_ACTIVE_DESKTOP)->getDefaultMetric());
 
+    char *trunc = "";
+    Inkscape::Text::Layout const *layout = te_get_layout((SPItem *) item);
+    if (layout && layout->inputTruncated()) {
+        trunc = _(" [truncated]");
+    }
+
     char *ret = ( SP_IS_TEXT_TEXTPATH(item)
-                  ? g_strdup_printf(_("<b>Text on path</b> (%s, %s)"), n, xs->str)
-                  : g_strdup_printf(_("<b>Text</b> (%s, %s)"), n, xs->str) );
+                  ? g_strdup_printf(_("<b>Text on path</b>%s (%s, %s)"), trunc, n, xs->str)
+                  : g_strdup_printf(_("<b>Text</b>%s (%s, %s)"), trunc, n, xs->str) );
     g_free(n);
     return ret;
 }
 
 static void sp_text_snappoints(SPItem const *item, bool const target, SnapPointsWithType &p, Inkscape::SnapPreferences const */*snapprefs*/)
 {
-    // the baseline anchor of the first char
+    // Choose a point on the baseline for snapping from or to, with the horizontal position
+    // of this point depending on the text alignment (left vs. right)
     Inkscape::Text::Layout const *layout = te_get_layout((SPItem *) item);
-    if(layout != NULL) {
-        int type = target ? int(Inkscape::SNAPTARGET_TEXT_BASELINE) : int(Inkscape::SNAPSOURCE_TEXT_BASELINE);
-       p.push_back(std::make_pair(layout->characterAnchorPoint(layout->begin()) * sp_item_i2d_affine(item), type));
+    if (layout != NULL && layout->outputExists()) {
+        boost::optional<Geom::Point> pt = layout->baselineAnchorPoint();
+        if (pt) {
+            int type = target ? int(Inkscape::SNAPTARGET_TEXT_BASELINE) : int(Inkscape::SNAPSOURCE_TEXT_BASELINE);
+            p.push_back(std::make_pair((*pt) * sp_item_i2d_affine(item), type));
+        }
     }
 }
 
index 71dc9648a7f7092be73209618afd409c705b517b..585b24c44800f29442a5e22adceadbe86b3c3bf0 100644 (file)
@@ -6,7 +6,7 @@
  * Authors:
  *   Pierre-Antoine MARC
  *   Pierre CACLIN
- *   Aurel-Aimé MARMION   
+ *   Aurel-Aimé MARMION
  *   Julien LERAY
  *   Benoît LAVORATA
  *   Vincent MONTAGNE
 #include "desktop-style.h"
 #include "message-context.h"
 #include "pixmaps/cursor-spray.xpm"
-#include "pixmaps/cursor-spray-move.xpm"
-#include "pixmaps/cursor-thin.xpm"
-#include "pixmaps/cursor-thicken.xpm"
-#include "pixmaps/cursor-attract.xpm"
-#include "pixmaps/cursor-repel.xpm"
-#include "pixmaps/cursor-push.xpm"
-#include "pixmaps/cursor-roughen.xpm"
-#include "pixmaps/cursor-color.xpm"
+//#include "pixmaps/cursor-spray-move.xpm"
+//#include "pixmaps/cursor-thin.xpm"
+//#include "pixmaps/cursor-thicken.xpm"
+//#include "pixmaps/cursor-attract.xpm"
+//#include "pixmaps/cursor-repel.xpm"
+//#include "pixmaps/cursor-push.xpm"
+//#include "pixmaps/cursor-roughen.xpm"
+//#include "pixmaps/cursor-color.xpm"
 #include <boost/optional.hpp>
 #include "libnr/nr-matrix-ops.h"
 #include "libnr/nr-scale-translate-ops.h"
@@ -74,7 +74,7 @@
 #include "display/canvas-arena.h"
 #include "display/curve.h"
 #include "livarot/Shape.h"
-#include <2geom/isnan.h>        
+#include <2geom/isnan.h>
 #include <2geom/transforms.h>
 #include "preferences.h"
 #include "style.h"
@@ -104,7 +104,7 @@ static void sp_spray_context_setup(SPEventContext *ec);
 static void sp_spray_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val);
 static gint sp_spray_context_root_handler(SPEventContext *ec, GdkEvent *event);
 
-static SPEventContextClass *parent_class;
+static SPEventContextClass *parent_class = 0;
 
 
 
@@ -143,8 +143,7 @@ double NormalDistribution(double mu,double sigma)
 
 //Fin de la création de NormalDistribution
 
-GtkType
-sp_spray_context_get_type(void)
+GtkType sp_spray_context_get_type(void)
 {
     static GType type = 0;
     if (!type) {
@@ -163,8 +162,7 @@ sp_spray_context_get_type(void)
     return type;
 }
 
-static void
-sp_spray_context_class_init(SPSprayContextClass *klass)
+static void sp_spray_context_class_init(SPSprayContextClass *klass)
 {
     GObjectClass *object_class = (GObjectClass *) klass;
     SPEventContextClass *event_context_class = (SPEventContextClass *) klass;
@@ -177,9 +175,9 @@ sp_spray_context_class_init(SPSprayContextClass *klass)
     event_context_class->set = sp_spray_context_set;
     event_context_class->root_handler = sp_spray_context_root_handler;
 }
+
 /*Method to rotate items*/
-void
-sp_spray_rotate_rel(Geom::Point c,SPDesktop *desktop,SPItem *item, Geom::Rotate const &rotation)
+void sp_spray_rotate_rel(Geom::Point c,SPDesktop */*desktop*/,SPItem *item, Geom::Rotate const &rotation)
 {
 
     Geom::Point center = c;
@@ -197,23 +195,23 @@ sp_spray_rotate_rel(Geom::Point c,SPDesktop *desktop,SPItem *item, Geom::Rotate
         item->updateRepr();
     }
 }
+
 /*Method to scale items*/
-void
-sp_spray_scale_rel (Geom::Point c, SPDesktop *desktop, SPItem *item, Geom::Scale  const &scale)
+void sp_spray_scale_rel(Geom::Point c, SPDesktop */*desktop*/, SPItem *item, Geom::Scale  const &scale)
 {
-        Geom::Translate const s(c); 
+        Geom::Translate const s(c);
+
 
-        
         sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * s.inverse() * scale * s  );
         sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform);
 
 
 }
-static void
-sp_spray_context_init(SPSprayContext *tc)
-{   
+
+static void sp_spray_context_init(SPSprayContext *tc)
+{
    SPEventContext *event_context = SP_EVENT_CONTEXT(tc);
-    
+
 
 
     event_context->cursor_shape = cursor_spray_xpm;
@@ -247,8 +245,7 @@ sp_spray_context_init(SPSprayContext *tc)
     new (&tc->style_set_connection) sigc::connection();
 }
 
-static void
-sp_spray_context_dispose(GObject *object)
+static void sp_spray_context_dispose(GObject *object)
 {
     SPSprayContext *tc = SP_SPRAY_CONTEXT(object);
 
@@ -267,7 +264,7 @@ sp_spray_context_dispose(GObject *object)
     G_OBJECT_CLASS(parent_class)->dispose(object);
 }
 
-bool is_transform_modes (gint mode)
+bool is_transform_modes(gint mode)
 {
     return (mode == SPRAY_MODE_COPY ||
             mode == SPRAY_MODE_CLONE ||
@@ -275,8 +272,7 @@ bool is_transform_modes (gint mode)
             mode == SPRAY_OPTION);
 }
 
-void
-sp_spray_update_cursor (SPSprayContext *tc, bool with_shift)
+void sp_spray_update_cursor(SPSprayContext *tc, bool /*with_shift*/)
 {
    SPEventContext *event_context = SP_EVENT_CONTEXT(tc);
    SPDesktop *desktop = event_context->desktop;
@@ -309,8 +305,7 @@ sp_spray_update_cursor (SPSprayContext *tc, bool with_shift)
    g_free(sel_message);
 }
 
-static void
-sp_spray_context_setup(SPEventContext *ec)
+static void sp_spray_context_setup(SPEventContext *ec)
 {
     SPSprayContext *tc = SP_SPRAY_CONTEXT(ec);
 
@@ -338,7 +333,7 @@ sp_spray_context_setup(SPEventContext *ec)
 
     tc->_message_context = new Inkscape::MessageContext((ec->desktop)->messageStack());
 
-    sp_event_context_read(ec, "distrib");    
+    sp_event_context_read(ec, "distrib");
     sp_event_context_read(ec, "width");
     sp_event_context_read(ec, "ratio");
     sp_event_context_read(ec, "tilt");
@@ -372,21 +367,20 @@ sp_spray_context_setup(SPEventContext *ec)
     }
 }
 
-static void
-sp_spray_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
+static void sp_spray_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
 {
     SPSprayContext *tc = SP_SPRAY_CONTEXT(ec);
     Glib::ustring path = val->getEntryName();
 
     if (path == "width") {
-        tc->width = CLAMP(val->getDouble(0.1), -1000.0, 1000.0);
+        tc->width = 0.01 * CLAMP(val->getInt(10), 1, 100);
     } else if (path == "mode") {
         tc->mode = val->getInt();
         sp_spray_update_cursor(tc, false);
     } else if (path == "distribution") {
         tc->distrib = val->getInt(1);
     } else if (path == "population") {
-        tc->population = CLAMP(val->getDouble(), 0.0, 1.0);
+        tc->population = 0.01 * CLAMP(val->getInt(10), 1, 100);
      } else if (path == "tilt") {
         tc->tilt = CLAMP(val->getDouble(0.1), 0, 1000.0);
      } else if (path == "ratio") {
@@ -398,13 +392,13 @@ sp_spray_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
     } else if (path == "rot_max") {
         tc->rot_max = CLAMP(val->getDouble(0), 0, 10.0);
     } else if (path == "scale_min") {
-        tc->scale_min = CLAMP(val->getDouble(1.0), 0, 10.0);    
+        tc->scale_min = CLAMP(val->getDouble(1.0), 0, 10.0);
     } else if (path == "scale_max") {
         tc->scale_max = CLAMP(val->getDouble(1.0), 0, 10.0);
     } else if (path == "mean") {
-        tc->mean = CLAMP(val->getDouble(1.0), 0, 1.0);
+        tc->mean = 0.01 * CLAMP(val->getInt(10), 1, 100);
     } else if (path == "standard_deviation") {
-        tc->standard_deviation = CLAMP(val->getDouble(1.0), 0, 1.0);
+        tc->standard_deviation = 0.01 * CLAMP(val->getInt(10), 1, 100);
     } else if (path == "usepressure") {
         tc->usepressure = val->getBool();
     } else if (path == "doh") {
@@ -418,8 +412,7 @@ sp_spray_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
     }
 }
 
-static void
-sp_spray_extinput(SPSprayContext *tc, GdkEvent *event)
+static void sp_spray_extinput(SPSprayContext *tc, GdkEvent *event)
 {
     if (gdk_event_get_axis (event, GDK_AXIS_PRESSURE, &tc->pressure))
         tc->pressure = CLAMP (tc->pressure, TC_MIN_PRESSURE, TC_MAX_PRESSURE);
@@ -427,8 +420,7 @@ sp_spray_extinput(SPSprayContext *tc, GdkEvent *event)
         tc->pressure = TC_DEFAULT_PRESSURE;
 }
 
-double
-get_dilate_radius (SPSprayContext *tc)
+double get_dilate_radius(SPSprayContext *tc)
 {
 
     return 250 * tc->width/SP_EVENT_CONTEXT(tc)->desktop->current_zoom();
@@ -436,8 +428,7 @@ get_dilate_radius (SPSprayContext *tc)
 
 }
 
-double
-get_path_force (SPSprayContext *tc)
+double get_path_force(SPSprayContext *tc)
 {
     double force = 8 * (tc->usepressure? tc->pressure : TC_DEFAULT_PRESSURE)
         /sqrt(SP_EVENT_CONTEXT(tc)->desktop->current_zoom());
@@ -447,33 +438,28 @@ get_path_force (SPSprayContext *tc)
     return force * tc->force;
 }
 
-double
-get_path_mean (SPSprayContext *tc)
+double get_path_mean(SPSprayContext *tc)
 {
     return tc->mean;
 }
 
-double
-get_path_standard_deviation (SPSprayContext *tc)
+double get_path_standard_deviation(SPSprayContext *tc)
 {
     return tc->standard_deviation;
 }
 
-double
-get_move_force (SPSprayContext *tc)
+double get_move_force(SPSprayContext *tc)
 {
     double force = (tc->usepressure? tc->pressure : TC_DEFAULT_PRESSURE);
     return force * tc->force;
 }
 
-double
-get_move_mean (SPSprayContext *tc)
+double get_move_mean(SPSprayContext *tc)
 {
     return tc->mean;
 }
 
-double
-get_move_standard_deviation (SPSprayContext *tc)
+double get_move_standard_deviation(SPSprayContext *tc)
 {
     return tc->standard_deviation;
 }
@@ -511,8 +497,26 @@ while(!((r_temp>=0)&&(r_temp<=1)))
 
 
 
-bool
-sp_spray_dilate_recursive (SPDesktop *desktop, Inkscape::Selection *selection, SPItem *item, Geom::Point p, Geom::Point vector, gint mode, double radius, double force, double population, double &scale, double scale_min, double scale_max, bool reverse, double mean, double standard_deviation, double ratio,double tilt, double rot_min, double rot_max, gint _distrib )
+bool sp_spray_dilate_recursive(SPDesktop *desktop,
+                               Inkscape::Selection *selection,
+                               SPItem *item,
+                               Geom::Point p,
+                               Geom::Point /*vector*/,
+                               gint mode,
+                               double radius,
+                               double /*force*/,
+                               double population,
+                               double &scale,
+                               double scale_min,
+                               double scale_max,
+                               bool /*reverse*/,
+                               double mean,
+                               double standard_deviation,
+                               double ratio,
+                               double tilt,
+                               double rot_min,
+                               double rot_max,
+                               gint _distrib )
 {
 
 
@@ -551,13 +555,13 @@ sp_spray_dilate_recursive (SPDesktop *desktop, Inkscape::Selection *selection, S
 
             Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
             if (a) {
-                double dr; double dp; 
+                double dr; double dp;
                 random_position(dr,dp,mean,standard_deviation,_distrib);
                 dr=dr*radius;
                 double _fid = g_random_double_range(0,1);
                 SPItem *item_copied;
-                double angle = g_random_double_range(rot_min, rot_max);                
-                double _scale = g_random_double_range(scale_min, scale_max);  
+                double angle = g_random_double_range(rot_min, rot_max);
+                double _scale = g_random_double_range(scale_min, scale_max);
                 if(_fid<=population)
                 {
                           // duplicate
@@ -571,17 +575,17 @@ sp_spray_dilate_recursive (SPDesktop *desktop, Inkscape::Selection *selection, S
                             SPObject *new_obj = doc->getObjectByRepr(copy);
                             item_copied = (SPItem *) new_obj;   //convertion object->item
                             Geom::Point center=item->getCenter();
-                            sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(_scale,_scale));  
-                            sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(scale,scale));   
-                            
-                            sp_spray_rotate_rel(center,desktop,item_copied, Geom::Rotate(angle));                             
+                            sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(_scale,_scale));
+                            sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(scale,scale));
+
+                            sp_spray_rotate_rel(center,desktop,item_copied, Geom::Rotate(angle));
                             Geom::Point move = (Geom::Point(cos(tilt)*cos(dp)*dr/(1-ratio)+sin(tilt)*sin(dp)*dr/(1+ratio),-sin(tilt)*cos(dp)*dr/(1-ratio)+cos(tilt)*sin(dp)*dr/(1+ratio)))+(p-a->midpoint());//Move the cursor p
                             sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));
 
 
-                   
-                         
-                            
+
+
+
                         did = true;
                         }
             }
@@ -623,8 +627,8 @@ sp_spray_dilate_recursive (SPDesktop *desktop, Inkscape::Selection *selection, S
                 random_position(dr,dp,mean,standard_deviation,_distrib);
                 dr=dr*radius;
                 double _fid = g_random_double_range(0,1);
-                double angle = (g_random_double_range(rot_min, rot_max)); 
-                double _scale = g_random_double_range(scale_min, scale_max);  
+                double angle = (g_random_double_range(rot_min, rot_max));
+                double _scale = g_random_double_range(scale_min, scale_max);
                 if (i==2) {
                     Inkscape::XML::Node *copy1 = old_repr->duplicate(xml_doc);
                     parent->appendChild(copy1);
@@ -640,11 +644,11 @@ sp_spray_dilate_recursive (SPDesktop *desktop, Inkscape::Selection *selection, S
                     parent->appendChild(copy2);
                     SPObject *new_obj2 = doc->getObjectByRepr(copy2);
                     item_copied = (SPItem *) new_obj2;
-                    
-                    Geom::Point move = (Geom::Point(cos(tilt)*cos(dp)*dr/(1-ratio)+sin(tilt)*sin(dp)*dr/(1+ratio),-sin(tilt)*cos(dp)*dr/(1-ratio)+cos(tilt)*sin(dp)*dr/(1+ratio)))+(p-a->midpoint());//Move around the cursor                          
+
+                    Geom::Point move = (Geom::Point(cos(tilt)*cos(dp)*dr/(1-ratio)+sin(tilt)*sin(dp)*dr/(1+ratio),-sin(tilt)*cos(dp)*dr/(1-ratio)+cos(tilt)*sin(dp)*dr/(1+ratio)))+(p-a->midpoint());//Move around the cursor
 
                             Geom::Point center=Pere->getCenter();
-                            sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(_scale,_scale));     
+                            sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(_scale,_scale));
                             sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(scale,scale));
                             sp_spray_rotate_rel(center,desktop,item_copied, Geom::Rotate(angle));
                             sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));
@@ -661,10 +665,10 @@ sp_spray_dilate_recursive (SPDesktop *desktop, Inkscape::Selection *selection, S
 
             }
         } else if (mode == SPRAY_MODE_CLONE) {
-         
+
         Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
                 if (a) {
-                double dr; double dp; 
+                double dr; double dp;
                 random_position(dr,dp,mean,standard_deviation,_distrib);
                 dr=dr*radius;
                 double _fid = g_random_double_range(0,1);
@@ -673,7 +677,7 @@ sp_spray_dilate_recursive (SPDesktop *desktop, Inkscape::Selection *selection, S
 
         if(_fid<=population)
                 {
-                            SPItem *item_copied; 
+                            SPItem *item_copied;
                             SPDocument *doc = SP_OBJECT_DOCUMENT(item);
                             Inkscape::XML::Document* xml_doc = sp_document_repr_doc(doc);
                             Inkscape::XML::Node *old_repr = SP_OBJECT_REPR(item);
@@ -683,33 +687,43 @@ sp_spray_dilate_recursive (SPDesktop *desktop, Inkscape::Selection *selection, S
                             Inkscape::XML::Node *clone = xml_doc->createElement("svg:use");
                             parent->appendChild(clone); //Ajout du clone à la liste d'enfants du père (selection initiale
                             clone->setAttribute("xlink:href", g_strdup_printf("#%s", old_repr->attribute("id")), false); //Génère le lien entre les attributs du père et du fils
-                            
-                            SPObject *clone_object = doc->getObjectByRepr(clone); 
+
+                            SPObject *clone_object = doc->getObjectByRepr(clone);
                             item_copied = (SPItem *) clone_object;//conversion object->item
                               Geom::Point center=item->getCenter();
-                            sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(_scale,_scale));     
+                            sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(_scale,_scale));
                             sp_spray_scale_rel(center,desktop,item_copied, Geom::Scale(scale,scale));
-                            sp_spray_rotate_rel(center,desktop,item_copied, Geom::Rotate(angle)); 
+                            sp_spray_rotate_rel(center,desktop,item_copied, Geom::Rotate(angle));
                             Geom::Point move = (Geom::Point(cos(tilt)*cos(dp)*dr/(1-ratio)+sin(tilt)*sin(dp)*dr/(1+ratio),-sin(tilt)*cos(dp)*dr/(1-ratio)+cos(tilt)*sin(dp)*dr/(1+ratio)))+(p-a->midpoint());
-                            sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));                               
+                            sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));
 
                             Inkscape::GC::release(clone);
 
                             did = true;
                 } }}
                 return did;
-               
+
 }
 
 
-bool
-sp_spray_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
-                          guint32 fill_goal, bool do_fill,
-                          guint32 stroke_goal, bool do_stroke,
-                          float opacity_goal, bool do_opacity,
-                          bool do_blur, bool reverse,
-                          Geom::Point p, double radius, double force,
-                          bool do_h, bool do_s, bool do_l, bool do_o)
+bool sp_spray_color_recursive(guint /*mode*/,
+                              SPItem */*item*/,
+                              SPItem */*item_at_point*/,
+                              guint32 /*fill_goal*/,
+                              bool /*do_fill*/,
+                              guint32 /*stroke_goal*/,
+                              bool /*do_stroke*/,
+                              float /*opacity_goal*/,
+                              bool /*do_opacity*/,
+                              bool /*do_blur*/,
+                              bool /*reverse*/,
+                              Geom::Point /*p*/,
+                              double /*radius*/,
+                              double /*force*/,
+                              bool /*do_h*/,
+                              bool /*do_s*/,
+                              bool /*do_l*/,
+                              bool /*do_o*/)
 {
     bool did = false;
 
@@ -717,8 +731,7 @@ sp_spray_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
 }
 
 
-bool
-sp_spray_dilate (SPSprayContext *tc, Geom::Point event_p, Geom::Point p, Geom::Point vector, bool reverse)
+bool sp_spray_dilate(SPSprayContext *tc, Geom::Point /*event_p*/, Geom::Point p, Geom::Point vector, bool reverse)
 {
     Inkscape::Selection *selection = sp_desktop_selection(SP_EVENT_CONTEXT(tc)->desktop);
     SPDesktop *desktop = SP_EVENT_CONTEXT(tc)->desktop;
@@ -815,8 +828,7 @@ sp_spray_dilate (SPSprayContext *tc, Geom::Point event_p, Geom::Point p, Geom::P
     return did;
 }
 
-void
-sp_spray_update_area (SPSprayContext *tc)
+void sp_spray_update_area(SPSprayContext *tc)
 {
         double radius = get_dilate_radius(tc);
         Geom::Matrix const sm ( Geom::Scale(radius/(1-tc->ratio), radius/(1+tc->ratio)) );
@@ -824,8 +836,7 @@ sp_spray_update_area (SPSprayContext *tc)
         sp_canvas_item_show(tc->dilate_area);
 }
 
-void
-sp_spray_switch_mode (SPSprayContext *tc, gint mode, bool with_shift)
+void sp_spray_switch_mode(SPSprayContext *tc, gint mode, bool with_shift)
 {
     SP_EVENT_CONTEXT(tc)->desktop->setToolboxSelectOneValue ("spray_tool_mode", mode); //sélectionne le bouton numéro "mode"
     // need to set explicitly, because the prefs may not have changed by the previous
@@ -833,8 +844,7 @@ sp_spray_switch_mode (SPSprayContext *tc, gint mode, bool with_shift)
     sp_spray_update_cursor (tc, with_shift);
 }
 
-void
-sp_spray_switch_mode_temporarily (SPSprayContext *tc, gint mode, bool with_shift)
+void sp_spray_switch_mode_temporarily(SPSprayContext *tc, gint mode, bool with_shift)
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
    // Juggling about so that prefs have the old value but tc->mode and the button show new mode:
@@ -847,8 +857,7 @@ sp_spray_switch_mode_temporarily (SPSprayContext *tc, gint mode, bool with_shift
    sp_spray_update_cursor (tc, with_shift);
 }
 
-gint
-sp_spray_context_root_handler(SPEventContext *event_context,
+gint sp_spray_context_root_handler(SPEventContext *event_context,
                                   GdkEvent *event)
 {
     SPSprayContext *tc = SP_SPRAY_CONTEXT(event_context);
@@ -922,7 +931,7 @@ sp_spray_context_root_handler(SPEventContext *event_context,
                 sp_spray_dilate (tc, motion_w, motion_doc, motion_doc - tc->last_push, event->button.state & GDK_SHIFT_MASK? true : false);
                 //tc->last_push = motion_doc;
                 tc->has_dilated = true;
-               
+
                 // it's slow, so prevent clogging up with events
                 gobble_motion_events(GDK_BUTTON1_MASK);
                 return TRUE;
@@ -942,7 +951,7 @@ sp_spray_context_root_handler(SPEventContext *event_context,
                   Geom::Point const scroll_w(event->button.x,event->button.y);
                   Geom::Point const scroll_dt = desktop->point();;
                   Geom::Point motion_doc(desktop->dt2doc(scroll_dt));
-                       switch (event->scroll.direction) 
+                       switch (event->scroll.direction)
                        {
                          case GDK_SCROLL_UP:
                            {
@@ -957,16 +966,16 @@ sp_spray_context_root_handler(SPEventContext *event_context,
                                    tc->is_dilating = true;
                                    tc->has_dilated = false;
                                    if(tc->is_dilating && !event_context->space_panning)
+
                                                         sp_spray_dilate (tc, scroll_w, desktop->dt2doc(scroll_dt), Geom::Point(0,0),false);
 
 
+
                                    tc->has_dilated=true;
                                    tc->population=temp;
 
                                    desktop->setToolboxAdjustmentValue ("population", tc->population * 100);
-                                    
+
                                    ret = TRUE;
                            }
                                break;
@@ -1042,17 +1051,17 @@ case GDK_SCROLL_LEFT:
 case GDK_j:  if (MOD__SHIFT_ONLY) {
                 sp_spray_switch_mode(tc, SPRAY_MODE_COPY, MOD__SHIFT);
                 ret = TRUE;
-            }   
+            }
 case GDK_J: if (MOD__SHIFT_ONLY) {
                 sp_spray_switch_mode(tc, SPRAY_MODE_COPY, MOD__SHIFT);
                 ret = TRUE;
             }
-                
+
 break;
         case GDK_m:
         case GDK_M:
         case GDK_0:
-        
+
             break;
         case GDK_i:
         case GDK_I:
@@ -1065,12 +1074,12 @@ break;
                 ret = TRUE;
             }
 break;
-   
+
         case GDK_l: if (MOD__SHIFT_ONLY) {
                 sp_spray_switch_mode(tc, SPRAY_MODE_CLONE, MOD__SHIFT);
                 ret = TRUE;
             }
-            
+
         case GDK_L:
  if (MOD__SHIFT_ONLY) {
                 sp_spray_switch_mode(tc, SPRAY_MODE_CLONE, MOD__SHIFT);
index 0b946f3488ede5da9b9bcabcb56ced53586c2889..111018c2a5df104a246b449010c05cd3f8d3010b 100644 (file)
@@ -28,6 +28,7 @@
 #include "svg/svg.h"
 #include "svg/svg-color.h"
 #include "svg/svg-icc-color.h"
+#include "svg/svg-device-color.h"
 
 #include "display/canvas-bpath.h"
 #include "attributes.h"
@@ -3184,6 +3185,17 @@ sp_style_read_ipaint(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocume
                     }
                     paint->value.color.icc = tmp;
                 }
+                if (strneq(str, "device-gray(", 12) ||
+                    strneq(str, "device-rgb(", 11) ||
+                    strneq(str, "device-cmyk(", 12) ||
+                    strneq(str, "device-nchannel(", 16)) {
+                    SVGDeviceColor* tmp = new SVGDeviceColor();
+                    if ( ! sp_svg_read_device_color( str, &str, tmp ) ) {
+                        delete tmp;
+                        tmp = 0;
+                    }
+                    paint->value.color.device = tmp;
+                }
             }
         }
     }
index a8e24c311acfa4dfd099e4ff946e20ebec4b2e63..7d43b68eef18d75c2e82c6f7d4e967ceb1f2ee95 100644 (file)
 #include "preferences.h"
 #include "svg-color.h"
 #include "svg-icc-color.h"
+#include "svg-device-color.h"
+
+#if ENABLE_LCMS
+#include <lcms.h>
+#include "color.h"
+#include "color-profile.h"
+#include "document.h"
+#include "inkscape.h"
+#include "profile-manager.h"
+#endif // ENABLE_LCMS
 
 using std::sprintf;
 
@@ -341,9 +351,9 @@ sp_svg_read_color(gchar const *str, gchar const **end_ptr, guint32 dfl)
      * this check wrapper. */
     gchar const *end = str;
     guint32 const ret = internal_sp_svg_read_color(str, &end, dfl);
-    assert(ret == dfl && end == str
+    assert(((ret == dfl) && (end == str))
            || (((ret & 0xff) == 0)
-               && str < end));
+               && (str < end)));
     if (str < end) {
         gchar *buf = (gchar *) g_malloc(end + 1 - str);
         memcpy(buf, str, end - str);
@@ -454,6 +464,42 @@ sp_svg_create_color_hash()
     return colors;
 }
 
+#if ENABLE_LCMS
+//helper function borrowed from src/widgets/sp-color-icc-selector.cpp:
+void getThings( DWORD space, gchar const**& namers, gchar const**& tippies, guint const*& scalies );
+
+void icc_color_to_sRGB(SVGICCColor* icc, guchar* r, guchar* g, guchar* b){
+    guchar color_out[4];
+    guchar color_in[4];
+    if (icc){
+g_message("profile name: %s", icc->colorProfile.c_str());
+        Inkscape::ColorProfile* prof = SP_ACTIVE_DOCUMENT->profileManager->find(icc->colorProfile.c_str());
+        if ( prof ) {
+            cmsHTRANSFORM trans = prof->getTransfToSRGB8();
+            if ( trans ) {
+                gchar const** names = 0;
+                gchar const** tips = 0;
+                guint const* scales = 0;
+                getThings( prof->getColorSpace(), names, tips, scales );
+
+                guint count = _cmsChannelsOf( prof->getColorSpace() );
+                if (count>4) count=4; //do we need it? Should we allow an arbitrary number of color values? Or should we limit to a maximum? (max==4?)
+                for (guint i=0;i<count; i++){
+                    color_in[i] = (guchar) ((((gdouble)icc->colors[i])*256.0) * (gdouble)scales[i]);
+g_message("input[%d]: %d",i, color_in[i]);
+                }
+
+                cmsDoTransform( trans, color_in, color_out, 1 );
+g_message("transform to sRGB done");
+            }
+            *r = color_out[0];
+            *g = color_out[1];
+            *b = color_out[2];
+        }
+    }
+}
+#endif //ENABLE_LCMS
+
 /*
  * Some discussion at http://markmail.org/message/bhfvdfptt25kgtmj
  * Allowed ASCII first characters:  ':', 'A'-'Z', '_', 'a'-'z'
@@ -536,7 +582,7 @@ bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor
             while ( g_ascii_isspace(*str) ) {
                 str++;
             }
-            good &= *str == ')';
+            good &= (*str == ')');
         }
     }
 
@@ -554,6 +600,117 @@ bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor
     return good;
 }
 
+
+bool sp_svg_read_icc_color( gchar const *str, SVGICCColor* dest )
+{
+    return sp_svg_read_icc_color(str, NULL, dest);
+}
+
+bool sp_svg_read_device_color( gchar const *str, gchar const **end_ptr, SVGDeviceColor* dest)
+{
+    bool good = true;
+    unsigned int max_colors;
+
+    if ( end_ptr ) {
+        *end_ptr = str;
+    }
+    if ( dest ) {
+        dest->colors.clear();
+    }
+
+    if ( !str ) {
+        // invalid input
+        good = false;
+    } else {
+        while ( g_ascii_isspace(*str) ) {
+            str++;
+        }
+
+        dest->type = DEVICE_COLOR_INVALID;
+        if (strneq( str, "device-gray(", 12 )){
+                dest->type = DEVICE_GRAY;
+                max_colors=1;
+                str += 12;
+        }
+
+        if (strneq( str, "device-rgb(", 11 )){
+                dest->type = DEVICE_RGB;
+                max_colors=3;
+                str += 11;
+        }
+
+        if (strneq( str, "device-cmyk(", 12 )){
+                dest->type = DEVICE_CMYK;
+                max_colors=4;
+                str += 12;
+        }
+
+        if (strneq( str, "device-nchannel(", 16 )){
+                dest->type = DEVICE_NCHANNEL;
+                max_colors=0;
+                str += 16;
+        }
+
+        if ( dest->type != DEVICE_COLOR_INVALID ) {
+            while ( g_ascii_isspace(*str) ) {
+                str++;
+            }
+
+            while ( *str && *str != ')' ) {
+                if ( g_ascii_isdigit(*str) || *str == '.' || *str == '-' || *str == '+') {
+                    gchar* endPtr = 0;
+                    gdouble dbl = g_ascii_strtod( str, &endPtr );
+                    if ( !errno ) {
+                        if ( dest ) {
+                            dest->colors.push_back( dbl );
+                        }
+                        str = endPtr;
+                    } else {
+                        good = false;
+                        break;
+                    }
+
+                    while ( g_ascii_isspace(*str) || *str == ',' ) {
+                        str++;
+                    }
+                } else {
+                    break;
+                }
+            }
+        }
+
+        // We need to have ended on a closing parenthesis
+        if ( good ) {
+            while ( g_ascii_isspace(*str) ) {
+                str++;
+            }
+            good &= (*str == ')');
+        }
+    }
+
+    if ( dest->colors.size() == 0) good=false;
+    if ( dest->type != DEVICE_NCHANNEL && (dest->colors.size() != max_colors)) good=false;
+
+    if ( good ) {
+        if ( end_ptr ) {
+            *end_ptr = str;
+        }
+    } else {
+        if ( dest ) {
+            dest->type = DEVICE_COLOR_INVALID;
+            dest->colors.clear();
+        }
+    }
+
+    return good;
+}
+
+
+bool sp_svg_read_device_color( gchar const *str, SVGDeviceColor* dest)
+{
+    return sp_svg_read_device_color(str, NULL, dest);
+}
+
 /*
   Local Variables:
   mode:c++
index 692c1dd009c6c8d7c0bb6bffbdac4f0e8108ae72..f4e534652abbf650bd0acbb6e461af3ae8461622 100644 (file)
@@ -4,12 +4,16 @@
 #include <glib/gtypes.h>
 
 class SVGICCColor;
+class SVGDeviceColor;
 
 guint32 sp_svg_read_color(gchar const *str, unsigned int dfl);
 guint32 sp_svg_read_color(gchar const *str, gchar const **end_ptr, guint32 def);
 void sp_svg_write_color(char *buf, unsigned int buflen, unsigned int rgba32);
 
 bool sp_svg_read_icc_color( gchar const *str, gchar const **end_ptr, SVGICCColor* dest );
-
+bool sp_svg_read_icc_color( gchar const *str, SVGICCColor* dest );
+bool sp_svg_read_device_color( gchar const *str, gchar const **end_ptr, SVGDeviceColor* dest );
+bool sp_svg_read_device_color( gchar const *str, SVGDeviceColor* dest );
+void icc_color_to_sRGB(SVGICCColor* dest, guchar* r, guchar* g, guchar* b);
 
 #endif /* !SVG_SVG_COLOR_H_SEEN */
diff --git a/src/svg/svg-device-color.h b/src/svg/svg-device-color.h
new file mode 100644 (file)
index 0000000..305133e
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef SVG_DEVICE_COLOR_H_SEEN
+#define SVG_DEVICE_COLOR_H_SEEN
+
+#include <string>
+#include <vector>
+
+typedef enum {DEVICE_COLOR_INVALID, DEVICE_GRAY, DEVICE_RGB, DEVICE_CMYK, DEVICE_NCHANNEL} SVGDeviceColorType;
+
+struct SVGDeviceColor {
+    SVGDeviceColorType type;
+    std::vector<double> colors;
+};
+
+
+#endif /* !SVG_DEVICE_COLOR_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 942f74d46af3b324c7fddb5a49a6b78a9a7388da..94f1cf312c5ec4943ba35aa0b66e7db773dd0719 100644 (file)
@@ -64,6 +64,7 @@ unsigned int sp_svg_number_read_d(gchar const *str, double *val)
     return 1;
 }
 
+// TODO must add a buffer length parameter for safety:
 static unsigned int sp_svg_number_write_ui(gchar *buf, unsigned int val)
 {
     unsigned int i = 0;
index e6f4f083b2945b006b0496707f328f5204255aac..fc28dc8e473bd66244e1e294b5ed31447e5cb193 100644 (file)
@@ -425,11 +425,18 @@ sp_text_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEve
             // find out item under mouse, disregarding groups
             item_ungrouped = desktop->item_at_point(Geom::Point(event->button.x, event->button.y), TRUE);
             if (SP_IS_TEXT(item_ungrouped) || SP_IS_FLOWTEXT(item_ungrouped)) {
-                sp_canvas_item_show(tc->indicator);
+
+                Inkscape::Text::Layout const *layout = te_get_layout(item_ungrouped);
+                if (layout->inputTruncated()) {
+                    SP_CTRLRECT(tc->indicator)->setColor(0xff0000ff, false, 0);
+                } else {
+                    SP_CTRLRECT(tc->indicator)->setColor(0x0000ff7f, false, 0);
+                }
                 Geom::OptRect ibbox = sp_item_bbox_desktop(item_ungrouped);
                 if (ibbox) {
                     SP_CTRLRECT(tc->indicator)->setRectangle(*ibbox);
                 }
+                sp_canvas_item_show(tc->indicator);
 
                 event_context->cursor_shape = cursor_text_insert_xpm;
                 event_context->hot_x = 7;
@@ -1590,18 +1597,30 @@ sp_text_context_update_cursor(SPTextContext *tc,  bool scroll_to_see)
 
         Inkscape::Text::Layout const *layout = te_get_layout(tc->text);
         int const nChars = layout->iteratorToCharIndex(layout->end());
+        char *trunc = "";
+        bool truncated = false;
+        if (layout->inputTruncated()) {
+            truncated = true;
+            trunc = _(" [truncated]");
+        }
         if (SP_IS_FLOWTEXT(tc->text)) {
             SPItem *frame = SP_FLOWTEXT(tc->text)->get_frame (NULL); // first frame only
             if (frame) {
+                if (truncated) {
+                    SP_CTRLRECT(tc->frame)->setColor(0xff0000ff, false, 0);
+                } else {
+                    SP_CTRLRECT(tc->frame)->setColor(0x0000ff7f, false, 0);
+                }
                 sp_canvas_item_show(tc->frame);
                 Geom::OptRect frame_bbox = sp_item_bbox_desktop(frame);
                 if (frame_bbox) {
                     SP_CTRLRECT(tc->frame)->setRectangle(*frame_bbox);
                 }
             }
-            SP_EVENT_CONTEXT(tc)->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("Type or edit flowed text (%d characters); <b>Enter</b> to start new paragraph."), nChars);
+
+            SP_EVENT_CONTEXT(tc)->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("Type or edit flowed text (%d characters%s); <b>Enter</b> to start new paragraph."), nChars, trunc);
         } else {
-            SP_EVENT_CONTEXT(tc)->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("Type or edit text (%d characters); <b>Enter</b> to start new line."), nChars);
+            SP_EVENT_CONTEXT(tc)->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("Type or edit text (%d characters%s); <b>Enter</b> to start new line."), nChars, trunc);
         }
 
     } else {
index 2bdee4c102a643ff8302d7142fd8c8113a35cadc..e93ebdffada702e11ceb028c2c4a4f9c91b96bb9 100644 (file)
@@ -1843,6 +1843,37 @@ void sp_te_apply_style(SPItem *text, Inkscape::Text::Layout::iterator const &sta
     text->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
 }
 
+bool is_part_of_text_subtree (SPObject *obj)
+{
+    return (SP_IS_TSPAN(obj) 
+            || SP_IS_TEXT(obj) 
+            || SP_IS_FLOWTEXT(obj)
+            || SP_IS_FLOWTSPAN(obj)
+            || SP_IS_FLOWDIV(obj)
+            || SP_IS_FLOWPARA(obj)
+            || SP_IS_FLOWLINE(obj)
+            || SP_IS_FLOWREGIONBREAK(obj));
+}
+
+bool is_top_level_text_object (SPObject *obj)
+{
+    return (SP_IS_TEXT(obj) 
+            || SP_IS_FLOWTEXT(obj));
+}
+
+bool has_visible_text (SPObject *obj)
+{
+    if (SP_IS_STRING(obj) && !SP_STRING(obj)->string.empty()) 
+        return true; // maybe we should also check that it's not all whitespace?
+
+    for (SPObject const *child = obj->firstChild() ; child ; child = SP_OBJECT_NEXT(child)) {
+        if (has_visible_text((SPObject *) child))
+            return true;
+    }
+
+    return false;
+}
+
 /*
   Local Variables:
   mode:c++
index 83ddae77fc6e74781c8d9c78a79491e30170704e..7e845dbc905dff38e9d6d1b93ee341de6f727261 100644 (file)
@@ -59,4 +59,8 @@ void sp_te_adjust_tspan_letterspacing_screen(SPItem *text, Inkscape::Text::Layou
 void sp_te_adjust_linespacing_screen(SPItem *text, Inkscape::Text::Layout::iterator const &start, Inkscape::Text::Layout::iterator const &end, SPDesktop *desktop, gdouble by);
 void sp_te_apply_style(SPItem *text, Inkscape::Text::Layout::iterator const &start, Inkscape::Text::Layout::iterator const &end, SPCSSAttr const *css);
 
+bool is_part_of_text_subtree (SPObject *obj);
+bool is_top_level_text_object (SPObject *obj);
+bool has_visible_text (SPObject *obj);
+
 #endif
index b7cd278d4febfdf28b665b89629655843bcdb180..6b49dc44aa70a8f6cdaf41a0156202721ae833bc 100644 (file)
@@ -115,6 +115,7 @@ TransfMat3x4::pt_to_str (Proj::Axis axis) {
     return g_strdup(os.str().c_str());
 }
 
+/* Check for equality (with a small tolerance epsilon) */
 bool
 TransfMat3x4::operator==(const TransfMat3x4 &rhs) const
 {
@@ -129,29 +130,16 @@ TransfMat3x4::operator==(const TransfMat3x4 &rhs) const
     return true;
 }
 
-/* multiply a projective matrix by an affine matrix */
+/* Multiply a projective matrix by an affine matrix (by only multiplying the 'affine part' of the
+ * projective matrix) */
 TransfMat3x4
 TransfMat3x4::operator*(Geom::Matrix const &A) const {
     TransfMat3x4 ret;
 
-    // Is it safe to always use the currently active document?
-    double h = sp_document_height(inkscape_active_document());
-
-    /*
-     * Note: The strange multiplication involving the document height is due to the buggy
-     *       intertwining of SVG and document coordinates. Essentially, what we do is first
-     *       convert from "real-world" to SVG coordinates, then apply the transformation A
-     *       (by multiplying with the Geom::Matrix) and then convert back from SVG to real-world
-     *       coordinates. Maybe there is even a more Inkscape-ish way to achieve this?
-     *       Once Inkscape has gotton rid of the two different coordiate systems, we can change
-     *       this function to an ordinary matrix multiplication.
-     */
     for (int j = 0; j < 4; ++j) {
-        ret.tmat[0][j] = A[0]*tmat[0][j] + A[2]*(h*tmat[2][j] - tmat[1][j]) + A[4]*tmat[2][j];
-        ret.tmat[1][j] = A[1]*tmat[0][j] + A[3]*(h*tmat[2][j] - tmat[1][j]) + A[5]*tmat[2][j];
+        ret.tmat[0][j] = A[0]*tmat[0][j] + A[2]*tmat[1][j] + A[4]*tmat[2][j];
+        ret.tmat[1][j] = A[1]*tmat[0][j] + A[3]*tmat[1][j] + A[5]*tmat[2][j];
         ret.tmat[2][j] = tmat[2][j];
-
-        ret.tmat[1][j] = h*ret.tmat[2][j] - ret.tmat[1][j]; // switch back from SVG to desktop coordinates
     }
 
     return ret;
index fd1b073943e1192b58e7e9f63d2acd76d46466a0..fac5bad8001cd975d82fd03824ba243ac4f4f478 100644 (file)
@@ -71,6 +71,8 @@ ink_common_sources +=         \
        ui/dialog/panel-dialog.h                \
        ui/dialog/print.cpp                     \
        ui/dialog/print.h                       \
+       ui/dialog/print-colors-preview-dialog.cpp               \
+       ui/dialog/print-colors-preview-dialog.h         \
        ui/dialog/scriptdialog.cpp              \
        ui/dialog/scriptdialog.h                \
        ui/dialog/spray-option.cpp              \
index 7f853bedcdd17b75034ed3ea5026fa1d719205b8..2116d46c3dff3335fe8d1eea4c1f81e185ac53b2 100644 (file)
@@ -41,6 +41,7 @@
 #include "ui/dialog/floating-behavior.h"
 #include "ui/dialog/dock-behavior.h"
 #include "ui/dialog/spray-option.h"
+#include "ui/dialog/print-colors-preview-dialog.h"
 #include "preferences.h"
 
 #ifdef ENABLE_SVG_FONTS
@@ -102,6 +103,7 @@ DialogManager::DialogManager() {
         registerFactory("LivePathEffect",      &create<LivePathEffectEditor, FloatingBehavior>);
         registerFactory("Memory",              &create<Memory,               FloatingBehavior>);
         registerFactory("Messages",            &create<Messages,             FloatingBehavior>);
+        registerFactory("PrintColorsPreviewDialog",      &create<PrintColorsPreviewDialog,       FloatingBehavior>);
         registerFactory("Script",              &create<ScriptDialog,         FloatingBehavior>);
 #ifdef ENABLE_SVG_FONTS
         registerFactory("SvgFontsDialog",      &create<SvgFontsDialog,       FloatingBehavior>);
@@ -129,6 +131,7 @@ DialogManager::DialogManager() {
         registerFactory("LivePathEffect",      &create<LivePathEffectEditor, DockBehavior>);
         registerFactory("Memory",              &create<Memory,               DockBehavior>);
         registerFactory("Messages",            &create<Messages,             DockBehavior>);
+        registerFactory("PrintColorsPreviewDialog",      &create<PrintColorsPreviewDialog,       DockBehavior>);
         registerFactory("Script",              &create<ScriptDialog,         DockBehavior>);
 #ifdef ENABLE_SVG_FONTS
         registerFactory("SvgFontsDialog",      &create<SvgFontsDialog,       DockBehavior>);
index 7e31b874a71969c1f434ab1128fb881b734c5c30..982fb341536b8e07b9d1abbd4129fc4fc0f283f9 100644 (file)
@@ -414,7 +414,8 @@ static void sanitizeName( Glib::ustring& str )
     }
 }
 
-void DocumentProperties::linkSelectedProfile()
+void
+DocumentProperties::linkSelectedProfile()
 {
 //store this profile in the SVG document (create <color-profile> element in the XML)
     // TODO remove use of 'active' desktop
index c7f5050468bff6e89ea208e5d4b9d6cb9b3c7f96..1345ffe550ac898d6b6934c5b00dcdc24f479f01 100644 (file)
@@ -4,7 +4,7 @@
 /* Authors:
  *   Nicholas Bishop <nicholasbishop@gmail.org>
  *   Rodrigo Kumpera <kumpera@gmail.com>
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 Authors
  *
index b217f8695ce37eeea8e168f6ce4b070baf41273a..90516063c766727762f20559331893bd44a9f676 100644 (file)
@@ -741,6 +741,11 @@ void InkscapePreferences::initPageFilters()
     _page_filters.add_line(true, "", _show_filters_info_box, "",
                         _("Show icons and descriptions for the filter primitives available at the filter effects dialog."));
 
+    /* threaded blur */ //related comments/widgets/functions should be renamed and option should be moved elsewhere when inkscape is fully multi-threaded
+    _filter_multi_threaded.init("/options/threading/numthreads", 1.0, 8.0, 1.0, 2.0, 4.0, true, false);
+    _page_filters.add_line( false, _("Number of Threads:"), _filter_multi_threaded, _("(requires restart)"),
+                           _("Configure number of processors/threads to use with rendering of gaussian blur."), false);
+
     this->AddPage(_page_filters, _("Filters"), PREFS_PAGE_FILTERS);
 }
 
index 705e7a352007dbab597699dd38939da6f93a0174..16e62df59b70461914da10921fbb081357b27f37 100644 (file)
@@ -171,6 +171,7 @@ protected:
     PrefRadioButton _blur_quality_best, _blur_quality_better, _blur_quality_normal, _blur_quality_worse, _blur_quality_worst;
     PrefRadioButton _filter_quality_best, _filter_quality_better, _filter_quality_normal, _filter_quality_worse, _filter_quality_worst;
     PrefCheckButton _show_filters_info_box;
+    PrefSpinButton  _filter_multi_threaded;
 
     PrefCheckButton _trans_scale_stroke, _trans_scale_corner, _trans_gradient,_trans_pattern;
     PrefRadioButton _trans_optimized, _trans_preserved;
diff --git a/src/ui/dialog/print-colors-preview-dialog.cpp b/src/ui/dialog/print-colors-preview-dialog.cpp
new file mode 100644 (file)
index 0000000..f4d83c2
--- /dev/null
@@ -0,0 +1,100 @@
+/** @file
+ * @brief Print Colors Preview dialog - implementation
+ */
+/* Authors:
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
+ *
+ * Copyright (C) 2009 Authors
+ * Released under GNU GPLv2 (or later).  Read the file 'COPYING' for more information.
+ */
+
+#include "desktop.h"
+#include "print-colors-preview-dialog.h"
+#include "preferences.h"
+#include <glibmm/i18n.h>
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+//Yes, I know we shouldn't hardcode CMYK. This class needs to be refactored
+// in order to accomodate spot colors and color components defined using 
+// ICC colors. --Juca
+
+void PrintColorsPreviewDialog::toggle_cyan(){
+  Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+  prefs->setBool("/options/printcolorspreview/cyan", cyan->get_active());
+
+  SPDesktop *desktop = getDesktop();
+  desktop->setDisplayModePrintColorsPreview();
+}
+
+void PrintColorsPreviewDialog::toggle_magenta(){
+  Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+  prefs->setBool("/options/printcolorspreview/magenta", magenta->get_active());
+
+  SPDesktop *desktop = getDesktop();
+  desktop->setDisplayModePrintColorsPreview();
+}
+
+void PrintColorsPreviewDialog::toggle_yellow(){
+  Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+  prefs->setBool("/options/printcolorspreview/yellow", yellow->get_active());
+
+  SPDesktop *desktop = getDesktop();
+  desktop->setDisplayModePrintColorsPreview();
+}
+
+void PrintColorsPreviewDialog::toggle_black(){
+  Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+  prefs->setBool("/options/printcolorspreview/black", black->get_active());
+
+  SPDesktop *desktop = getDesktop();
+  desktop->setDisplayModePrintColorsPreview();
+}
+
+PrintColorsPreviewDialog::PrintColorsPreviewDialog()
+ : UI::Widget::Panel("", "/dialogs/printcolorspreview", SP_VERB_DIALOG_PRINT_COLORS_PREVIEW)
+{
+    Gtk::VBox* vbox = Gtk::manage(new Gtk::VBox());
+
+    cyan = new Gtk::ToggleButton(_("Cyan"));
+    vbox->pack_start( *cyan, false, false );
+//    tips.set_tip((*cyan), _("Render cyan separation"));
+    cyan->signal_clicked().connect( sigc::mem_fun(*this, &PrintColorsPreviewDialog::toggle_cyan) );
+
+    magenta = new Gtk::ToggleButton(_("Magenta"));
+    vbox->pack_start( *magenta, false, false );
+//    tips.set_tip((*magenta), _("Render magenta separation"));
+    magenta->signal_clicked().connect( sigc::mem_fun(*this, &PrintColorsPreviewDialog::toggle_magenta) );
+
+    yellow = new Gtk::ToggleButton(_("Yellow"));
+    vbox->pack_start( *yellow, false, false );
+//    tips.set_tip((*yellow), _("Render yellow separation"));
+    yellow->signal_clicked().connect( sigc::mem_fun(*this, &PrintColorsPreviewDialog::toggle_yellow) );
+
+    black = new Gtk::ToggleButton(_("Black"));
+    vbox->pack_start( *black, false, false );
+//    tips.set_tip((*black), _("Render black separation"));
+    black->signal_clicked().connect( sigc::mem_fun(*this, &PrintColorsPreviewDialog::toggle_black) );
+
+    gint val;
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    val = prefs->getBool("/options/printcolorspreview/cyan");
+    cyan->set_active( val != 0 );
+    val = prefs->getBool("/options/printcolorspreview/magenta");
+    magenta->set_active( val != 0 );
+    val = prefs->getBool("/options/printcolorspreview/yellow");
+    yellow->set_active( val != 0 );
+    val = prefs->getBool("/options/printcolorspreview/black");
+    black->set_active( val != 0 );
+
+    _getContents()->add(*vbox);
+    _getContents()->show_all();
+}
+
+PrintColorsPreviewDialog::~PrintColorsPreviewDialog(){}
+
+} // namespace Dialog
+} // namespace UI
+} // namespace Inkscape
diff --git a/src/ui/dialog/print-colors-preview-dialog.h b/src/ui/dialog/print-colors-preview-dialog.h
new file mode 100644 (file)
index 0000000..2469085
--- /dev/null
@@ -0,0 +1,48 @@
+/** @file
+ * @brief Print Colors Preview dialog
+ */
+/* Authors:
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
+ *
+ * Copyright (C) 2009 Authors
+ * Released under GNU GPLv2 (or later).  Read the file 'COPYING' for more information.
+ */
+
+#ifndef INKSCAPE_UI_DIALOG_PRINT_COLORS_PREVIEW_H
+#define INKSCAPE_UI_DIALOG_PRINT_COLORS_PREVIEW_H
+
+#include "ui/widget/panel.h"
+#include "verbs.h"
+
+#include <gtkmm.h>
+#include <gtkmm/box.h>
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+class PrintColorsPreviewDialog : public UI::Widget::Panel {
+public:
+    PrintColorsPreviewDialog();
+    ~PrintColorsPreviewDialog();
+
+    static PrintColorsPreviewDialog &getInstance()
+    { return *new PrintColorsPreviewDialog(); }
+
+private:
+    void toggle_cyan();
+    void toggle_magenta();
+    void toggle_yellow();
+    void toggle_black();
+
+    Gtk::ToggleButton* cyan;
+    Gtk::ToggleButton* magenta;
+    Gtk::ToggleButton* yellow;
+    Gtk::ToggleButton* black;
+};
+
+} // namespace Dialog
+} // namespace UI
+} // namespace Inkscape
+
+#endif //#ifndef INKSCAPE_UI_PRINT_COLORS_PREVIEW_H
index f9db265d66b1a6f3319f9dcb7363b055bf333c14..60cab06a27c1aacf804525344fba880600368387 100644 (file)
 
 
 
-static void
-draw_page (GtkPrintOperation *operation,
-           GtkPrintContext   *context,
-           gint               /*page_nr*/,
-           gpointer           user_data)
+static void draw_page(
+#ifdef WIN32
+                      GtkPrintOperation *operation,
+#else
+                      GtkPrintOperation *,
+#endif
+                      GtkPrintContext   *context,
+                      gint               /*page_nr*/,
+                      gpointer           user_data)
 {
     struct workaround_gtkmm *junk = (struct workaround_gtkmm*)user_data;
     //printf("%s %d\n",__FUNCTION__, page_nr);
index 8bfe455fa6293e016f1a54aedbcddc079aa7d849..a9e037381184578ccd53d22615f89bed50a20636 100644 (file)
 #include "graphlayout/graphlayout.h"
 #include "inkscape.h"
 #include "macros.h"
-#include "node-context.h" 
+#include "node-context.h"
 #include "preferences.h"
 #include "removeoverlap/removeoverlap.h"
 #include "selection.h"
-#include "shape-editor.h" 
+#include "shape-editor.h"
 #include "sp-flowtext.h"
 #include "sp-item-transform.h"
 #include "sp-text.h"
@@ -43,21 +43,22 @@ namespace Dialog {
 class Action {
 public:
     Action(const Glib::ustring &id,
-           const Glib::ustring &tiptext,
-           guint row, guint column,
+           const Glib::ustring &/*tiptext*/,
+           guint /*row*/,
+           guint /*column*/,
            Gtk::Table &parent,
-           Gtk::Tooltips &tooltips,
+           Gtk::Tooltips &/*tooltips*/,
            SprayOptionClass &dialog):
         _dialog(dialog),
         _id(id),
         _parent(parent) {}
-    
+
     virtual ~Action(){}
     virtual void on_button_click(){}
     SprayOptionClass &_dialog;
-    
+
 private :
-    
+
     Glib::ustring _id;
     Gtk::Table &_parent;
 };
@@ -85,7 +86,7 @@ public:
             dialog._Table().set_col_spacings(3);
 
             double increm = ((double)_max - (double)_min)/10;
-            double val_ini = ((double)_max + (double)_min)/2;            
+            double val_ini = ((double)_max + (double)_min)/2;
             _Gap.set_digits(1);
             _Gap.set_size_request(60, -1);
             _Gap.set_increments(increm , 0);
@@ -102,14 +103,14 @@ public:
 
     virtual void on_button_click(){
         if (!_dialog.getDesktop()) return;
-              
+
         Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-        
+
         prefs->setDouble(_pref_path, SP_VERB_CONTEXT_SPRAY);
-       
+
         double const Gap = _Gap.get_value();
-        
-         
+
+
         prefs->setDouble(_pref_path, Gap);
 
         sp_document_done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_CONTEXT_SPRAY,
@@ -117,7 +118,7 @@ public:
     }
 
 
-};    
+};
 
 class ActionF : public Action {
 private:
@@ -143,7 +144,7 @@ public:
         {
             dialog.F_Table().set_col_spacings(3);
 
-            _Label.set_label(id);            
+            _Label.set_label(id);
 
             _Gap1.set_digits(1);
             _Gap1.set_size_request(60, -1);
@@ -152,7 +153,7 @@ public:
             _Gap1.set_value(1);
             dialog.tooltips().set_tip(_Gap1,
                                   _("Minimum"));
-        
+
             _Label1.set_label(Q_("Min"));
 
             _Gap2.set_digits(1);
@@ -162,11 +163,11 @@ public:
             _Gap2.set_value(1);
             dialog.tooltips().set_tip(_Gap2,
                                   _("Maximum"));
-        
+
             _Label2.set_label(_("Max:"));
-            
+
             _Gap1.signal_changed().connect(sigc::mem_fun(*this, &ActionF::on_button_click));
-            _Gap2.signal_changed().connect(sigc::mem_fun(*this, &ActionF::on_button_click)); 
+            _Gap2.signal_changed().connect(sigc::mem_fun(*this, &ActionF::on_button_click));
 
             dialog.F_Table().attach(_Label, column, column+1, row, row+1, Gtk::FILL, Gtk::FILL);
             dialog.F_Table().attach(_Label1, column+1, column+2, row, row+1, Gtk::FILL, Gtk::FILL);
@@ -178,15 +179,15 @@ public:
 
     virtual void on_button_click(){
         if (!_dialog.getDesktop()) return;
-              
+
         Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-        
+
         prefs->setDouble(_pref1_path, SP_VERB_CONTEXT_SPRAY);
         prefs->setDouble(_pref2_path, SP_VERB_CONTEXT_SPRAY);
-       
+
         double const Gap1 = _Gap1.get_value();
         double const Gap2 = _Gap2.get_value();
-                 
+
         prefs->setDouble(_pref1_path, Gap1);
         prefs->setDouble(_pref2_path, Gap2);
 
@@ -195,21 +196,21 @@ public:
     }
 
 
-};    
+};
 
 
 
 void SprayOptionClass::combo_action() {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     cout<<"combo.get_active_row_number = "<<_combo.get_active_row_number()<<endl;
-        
+
     int const distrib = _combo.get_active_row_number();
-                 
+
     prefs->setInt("/tools/spray/distribution", distrib);
-       
+
 
     sp_document_done(sp_desktop_document(this->getDesktop()), SP_VERB_CONTEXT_SPRAY,
-                         _("Remove overlaps"));    
+                         _("Remove overlaps"));
 
 }
 
@@ -217,11 +218,9 @@ void SprayOptionClass::combo_action() {
 
 
 void SprayOptionClass::action() {
-    int r=1;    
-    for (list<Action *>::iterator it = _actionList.begin();
-         it != _actionList.end();
-         it ++)
+    for (list<Action *>::iterator it = _actionList.begin(); it != _actionList.end(); ++it) {
         (*it)->on_button_click();
+    }
     combo_action();
 }
 
@@ -242,24 +241,41 @@ void on_selection_changed(Inkscape::Application */*inkscape*/, Inkscape::Selecti
 
 SprayOptionClass::SprayOptionClass()
     : UI::Widget::Panel ("", "/dialogs/spray", SP_VERB_DIALOG_SPRAY_OPTION),
-      _distributionFrame(_("Distribution")),
-      _Frame(_("Cursor Options")),
-      _FFrame(_("Random Options")),
+      _actionList(),
+      _distributionFrame(Q_("sprayOptions|Distribution")),
+      _Frame(Q_("sprayOptions|Cursor Options")),
+      _FFrame(Q_("sprayOptions|Random Options")),
+      _distributionTable(),
       _gaussianTable(1, 5, false),
       _ETable(3,2,false),
       _FTable(2,5,false),
-      _unifLabel(_("Uniform")),
-      _gaussLabel(_("Gaussian   ")),
-      _anchorLabel(_("Distribution : "))
-      
+      _anchorBox(),
+      _unifBox(),
+      _gaussianBox(),
+      _HBox(),
+      _FHBox(),
+      _BoutonBox(),
+      _distributionBox(),
+      _VBox(),
+      _FVBox(),
+      _ActionBox(),
+      _anchorLabel(Q_("sprayOptions|Distribution:")),
+      _unifLabel(Q_("sprayOptions|Uniform")),
+      _gaussLabel(Q_("sprayOptions|Gaussian")),
+      _Label(),
+      _FLabel(),
+      _unif(),
+      _gauss(),
+      _combo(),
+      _tooltips()
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
 
     //ComboBoxText
 
-    _combo.append_text(_("Uniforme"));
-    _combo.append_text(_("Gaussienne"));
-    
+    _combo.append_text(Q_("sprayOptions|Uniform"));
+    _combo.append_text(Q_("sprayOptions|Gaussian"));
+
     _combo.set_active(prefs->getInt("/tools/spray/distribution", 1));
     _combo.signal_changed().connect(sigc::mem_fun(*this, &SprayOptionClass::combo_action));
 
@@ -274,19 +290,19 @@ SprayOptionClass::SprayOptionClass()
 
 
     //Hbox Random
-    addFButton(_("Scale : ") ,_("Applique un facteur d'échelle"), 0, 0, "/tools/spray/scale_min","/tools/spray/scale_max");
-    addFButton(_("Rotation : ") ,_("Fait tourner"), 1, 0, "/tools/spray/rot_min","/tools/spray/rot_max");
+    addFButton(Q_("sprayOptions|Scale:") ,_("Apply a scale factor"), 0, 0, "/tools/spray/scale_min","/tools/spray/scale_max");
+    addFButton(Q_("sprayOptions|Rotation:") ,_("Apply rotation"), 1, 0, "/tools/spray/rot_min","/tools/spray/rot_max");
     _FHBox.pack_start(_FLabel);
     _FHBox.pack_start(_FTable);
 
     //Implementation dans la Vbox Cursor
     _FVBox.pack_start(_FHBox);
-    _FFrame.add(_FVBox);    
+    _FFrame.add(_FVBox);
 
     //Hbox Cursor
-    addEButton(_("Ratio : ") ,_("Excentricité de l'ellipse"), 0, 0, 0, 1,"/tools/spray/ratio");
-    addEButton(_("Angle : ") ,_("Angle de l'ellipse"), 1, 0, 0, 5,"/tools/spray/tilt");
-    addEButton(_("Width : ") ,_("Taille de l'ellipse"), 2, 0, 0, 1,"/tools/spray/width");
+    addEButton(Q_("sprayOptions|Ratio:") ,_("Eccentricity of the ellipse"), 0, 0, 0, 1,"/tools/spray/ratio");
+    addEButton(Q_("sprayOptions|Angle:") ,_("Angle of the ellipse"), 1, 0, 0, 5,"/tools/spray/tilt");
+    addEButton(Q_("sprayOptions|Width:") ,_("Size of the ellipse"), 2, 0, 0, 1,"/tools/spray/width");
     _HBox.pack_start(_Label);
     _HBox.pack_start(_ETable);
 
@@ -297,26 +313,26 @@ SprayOptionClass::SprayOptionClass()
     Gtk::Box *contents = _getContents();
     contents->set_spacing(4);
 
-    
-    
 
-    
+
+
+
 
     // Crée dans l'ordre suivant les différentes Frames (cadres de réglages)
 
     contents->pack_start(_distributionFrame, true, true);
-    contents->pack_start(_FFrame, true, true);    
+    contents->pack_start(_FFrame, true, true);
     contents->pack_start(_Frame, true, true);
-    
-    
+
+
 
     // Connect to the global selection change, to invalidate cached randomize_bbox
     g_signal_connect (G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (on_selection_changed), this);
     randomize_bbox = Geom::OptRect();
 
     show_all_children();
-    
-    
+
+
 
 }
 
@@ -342,7 +358,7 @@ void SprayOptionClass::addEButton(const Glib::ustring &id,
                 const Glib::ustring &tiptext,
                 guint row, guint column,
                 guint min, guint max,
-                Glib::ustring const &pref_path) 
+                Glib::ustring const &pref_path)
 {
         _actionList.push_back( new ActionE(id, tiptext,row, column,*this,min ,max, pref_path ));
 }
@@ -351,7 +367,7 @@ void SprayOptionClass::addFButton(const Glib::ustring &id,
                 const Glib::ustring &tiptext,
                 guint row, guint column,
                 Glib::ustring const &pref1_path,
-                Glib::ustring const &pref2_path) 
+                Glib::ustring const &pref2_path)
 {
         _actionList.push_back( new ActionF(id, tiptext,row, column,*this,pref1_path, pref2_path ));
 }
index 75dfe1e35b9760eed756581fe6032b45a82d10b8..42090a120cf0d76e29d426a870ef0bde08f3f421 100644 (file)
 #include "graphlayout/graphlayout.h"
 #include "inkscape.h"
 #include "macros.h"
-#include "node-context.h" 
+#include "node-context.h"
 #include "preferences.h"
 #include "removeoverlap/removeoverlap.h"
 #include "selection.h"
-#include "shape-editor.h" 
+#include "shape-editor.h"
 #include "sp-flowtext.h"
 #include "sp-item-transform.h"
 #include "sp-text.h"
@@ -71,19 +71,19 @@ private:
 
     SprayOptionClass(SprayOptionClass const &d);
     SprayOptionClass& operator=(SprayOptionClass const &d);
-    
+
 public:
     SprayOptionClass();
-    virtual ~SprayOptionClass();   
+    virtual ~SprayOptionClass();
     void test() {    cout<<"appel de test !!"<<endl;  }
     static SprayOptionClass &getInstance() { return *new SprayOptionClass(); }
 
-    
+
     Gtk::Table &_Table(){return _ETable;}
     Gtk::Table &F_Table(){return _FTable;}
     Gtk::Tooltips &tooltips(){return _tooltips;}
     void action();
-    void combo_action(); 
+    void combo_action();
     Geom::OptRect randomize_bbox;
 
     SprayOptionClass &get_SprayOptionClass();
@@ -97,17 +97,32 @@ protected:
                 const Glib::ustring &pref1_path, const Glib::ustring &pref2_path);
 
     std::list<Action *> _actionList;
-    Gtk::Frame _distributionFrame,  _Frame, _FFrame ;
-    Gtk::Table _distributionTable, _gaussianTable, _ETable, _FTable;
+    Gtk::Frame _distributionFrame;
+    Gtk::Frame _Frame;
+    Gtk::Frame _FFrame;
+    Gtk::Table _distributionTable;
+    Gtk::Table _gaussianTable;
+    Gtk::Table _ETable;
+    Gtk::Table _FTable;
     Gtk::HBox _anchorBox;
-    Gtk::HBox _unifBox, _gaussianBox, _HBox, _FHBox, _BoutonBox;
-    Gtk::VBox _distributionBox,  _VBox, _FVBox, _ActionBox;
+    Gtk::HBox _unifBox;
+    Gtk::HBox _gaussianBox;
+    Gtk::HBox _HBox;
+    Gtk::HBox _FHBox;
+    Gtk::HBox _BoutonBox;
+    Gtk::VBox _distributionBox;
+    Gtk::VBox  _VBox;
+    Gtk::VBox _FVBox;
+    Gtk::VBox _ActionBox;
     Gtk::Label _anchorLabel;
-    Gtk::Label _unifLabel, _gaussLabel, _Label, _FLabel;
-    Gtk::CheckButton _unif, _gauss;
+    Gtk::Label _unifLabel;
+    Gtk::Label _gaussLabel;
+    Gtk::Label _Label;
+    Gtk::Label _FLabel;
+    Gtk::CheckButton _unif;
+    Gtk::CheckButton _gauss;
     Gtk::ComboBoxText _combo;
     Gtk::Tooltips _tooltips;
-
 };
 
 
index 5f86196b1f71e88994d912cc3160f54127d86232..cb22e029b099f91016a8992b48343c11ff80ff2c 100644 (file)
@@ -2,7 +2,7 @@
  * @brief SVG Fonts dialog - implementation
  */
 /* Authors:
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Authors
  * Released under GNU GPLv2 (or later).  Read the file 'COPYING' for more information.
index e6042ed4299488420fbc24660cc2d849a8c5b88b..e819187a1dceb2e61074fa18f931950a76049dc1 100644 (file)
@@ -2,7 +2,7 @@
  * @brief SVG Fonts dialog
  */
 /* Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2008 Authors
  * Released under GNU GPLv2 (or later).  Read the file 'COPYING' for more information.
index 1f708e3de3534c1c84f8387ecc391d7da91c0f2b..450d4202daba194d596ae011fc5dad035a80a7d8 100644 (file)
@@ -47,7 +47,7 @@
 #include "display/nr-plain-stuff.h"
 #include "sp-gradient-reference.h"
 
-//#define USE_DOCUMENT_PALETTE 1
+#define USE_DOCUMENT_PALETTE 1
 
 namespace Inkscape {
 namespace UI {
index b610c1ee687ba3dc0d1cc30f40f86ab87fd1288a..e3e73a51f81e08d93ece9d30e262b64cac90f92e 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Author:
  *   Nicholas Bishop <nicholasbishop@gmail.com>
- *   Felipe C. da S. Sanches <felipe.sanches@gmail.com>
+ *   Felipe C. da S. Sanches <juca@members.fsf.org>
  *
  * Copyright (C) 2007 Author
  *
index ab46b21a6c955ee8c69fead5af637fa15cad043d..78ceec4671178a2bf4fb33535d7f0137eeab7af4 100644 (file)
@@ -103,7 +103,7 @@ vp_knot_moved_handler (SPKnot */*knot*/, Geom::Point const *ppointer, guint stat
                 sel_boxes = (*vp)->selectedBoxes(sp_desktop_selection(inkscape_active_desktop()));
 
                 // we create a new perspective ...
-                Persp3D *new_persp = persp3d_create_xml_element (dragger->parent->document, old_persp);
+                Persp3D *new_persp = persp3d_create_xml_element (dragger->parent->document, old_persp->perspective_impl);
 
                 /* ... unlink the boxes from the old one and
                    FIXME: We need to unlink the _un_selected boxes of each VP so that
@@ -230,7 +230,7 @@ unsigned int VanishingPoint::global_counter = 0;
 void
 VanishingPoint::set_pos(Proj::Pt2 const &pt) {
     g_return_if_fail (_persp);
-    _persp->tmat.set_image_pt (_axis, pt);
+    _persp->perspective_impl->tmat.set_image_pt (_axis, pt);
 }
 
 std::list<SPBox3D *>
index 56b63e95eb2bd305796789ec0e7556284285f7a5..6f86c3ccee1a1d16066dc66db85c49b2bb44feb4 100644 (file)
@@ -1749,6 +1749,9 @@ ZoomVerb::perform(SPAction *action, void *data, void */*pdata*/)
         case SP_VERB_VIEW_MODE_OUTLINE:
             dt->setDisplayModeOutline();
             break;
+        case SP_VERB_VIEW_MODE_PRINT_COLORS_PREVIEW:
+            dt->setDisplayModePrintColorsPreview();
+            break;
         case SP_VERB_VIEW_MODE_TOGGLE:
             dt->displayModeToggle();
             break;
@@ -1871,6 +1874,9 @@ DialogVerb::perform(SPAction *action, void *data, void */*pdata*/)
         case SP_VERB_DIALOG_SVG_FONTS:
             dt->_dlg_mgr->showDialog("SvgFontsDialog");
             break;
+        case SP_VERB_DIALOG_PRINT_COLORS_PREVIEW:
+            dt->_dlg_mgr->showDialog("PrintColorsPreviewDialog");
+            break;
         default:
             break;
     }
@@ -2626,6 +2632,8 @@ Verb *Verb::_base_verbs[] = {
                  N_("Switch to normal display without filters"), NULL),
     new ZoomVerb(SP_VERB_VIEW_MODE_OUTLINE, "ViewModeOutline", N_("_Outline"),
                  N_("Switch to outline (wireframe) display mode"), NULL),
+    new ZoomVerb(SP_VERB_VIEW_MODE_PRINT_COLORS_PREVIEW, "ViewModePrintColorsPreview", N_("_Print Colors Preview"),
+                 N_("Switch to print colors preview mode"), NULL),
     new ZoomVerb(SP_VERB_VIEW_MODE_TOGGLE, "ViewModeToggle", N_("_Toggle"),
                  N_("Toggle between normal and outline display modes"), NULL),
 
@@ -2701,6 +2709,8 @@ Verb *Verb::_base_verbs[] = {
                    N_("Manage, edit, and apply SVG filters"), NULL),
     new DialogVerb(SP_VERB_DIALOG_SVG_FONTS, "DialogSVGFonts", N_("SVG Font Editor..."),
                    N_("Edit SVG fonts"), NULL),
+    new DialogVerb(SP_VERB_DIALOG_PRINT_COLORS_PREVIEW, "DialogPrintColorsPreview", N_("Print Colors..."),
+                   N_("Select which color separations to render in Print Colors Preview rendermode"), NULL),
 
     /* Help */
     new HelpVerb(SP_VERB_HELP_ABOUT_EXTENSIONS, "HelpAboutExtensions", N_("About E_xtensions"),
index 3ea2fdee89f908a6767e52816c96b46d0da75f51..d0abcdca28ef53ac834dfa90e0da8bc0bf850be7 100644 (file)
@@ -214,6 +214,7 @@ enum {
     SP_VERB_VIEW_MODE_NORMAL,
     SP_VERB_VIEW_MODE_NO_FILTERS,
     SP_VERB_VIEW_MODE_OUTLINE,
+    SP_VERB_VIEW_MODE_PRINT_COLORS_PREVIEW,
     SP_VERB_VIEW_MODE_TOGGLE,
     SP_VERB_VIEW_CMS_TOGGLE,
     SP_VERB_VIEW_ICON_PREVIEW,
@@ -251,6 +252,7 @@ enum {
     SP_VERB_DIALOG_LIVE_PATH_EFFECT,
     SP_VERB_DIALOG_FILTER_EFFECTS,
     SP_VERB_DIALOG_SVG_FONTS,
+    SP_VERB_DIALOG_PRINT_COLORS_PREVIEW,
     /* Help */
     SP_VERB_HELP_ABOUT_EXTENSIONS,
     SP_VERB_HELP_MEMORY,
index e3bf1ae9c5efecb60323a6052b7f4e1f4760d246..b63992afe9a8ff22d0528533ffc0326f20646251 100644 (file)
@@ -613,12 +613,20 @@ SPDesktopWidget::updateTitle(gchar const* uri)
         if (this->desktop->number > 1) {
             if (this->desktop->getMode() == Inkscape::RENDERMODE_OUTLINE) {
                 g_string_printf (name, _("%s: %d (outline) - Inkscape"), fname, this->desktop->number);
+            } else if (this->desktop->getMode() == Inkscape::RENDERMODE_NO_FILTERS) {
+                g_string_printf (name, _("%s: %d (no filters) - Inkscape"), fname, this->desktop->number);
+            } else if (this->desktop->getMode() == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW) {
+                g_string_printf (name, _("%s: %d (print colors preview) - Inkscape"), fname, this->desktop->number);
             } else {
                 g_string_printf (name, _("%s: %d - Inkscape"), fname, this->desktop->number);
             }
         } else {
             if (this->desktop->getMode() == Inkscape::RENDERMODE_OUTLINE) {
                 g_string_printf (name, _("%s (outline) - Inkscape"), fname);
+            } else if (this->desktop->getMode() == Inkscape::RENDERMODE_NO_FILTERS) {
+                g_string_printf (name, _("%s (no filters) - Inkscape"), fname);
+            } else if (this->desktop->getMode() == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW) {
+                g_string_printf (name, _("%s (print colors preview) - Inkscape"), fname);
             } else {
                 g_string_printf (name, _("%s - Inkscape"), fname);
             }
index 5824b102c9dd8551b7462437187b9ec3942eeecd..743502d2702365012d3b57919caee5fb8afb990e 100644 (file)
@@ -714,7 +714,7 @@ int sp_icon_get_phys_size(int size)
     static int lastSys[Inkscape::ICON_SIZE_DECORATION + 1];
     static int vals[Inkscape::ICON_SIZE_DECORATION + 1];
 
-    size = CLAMP( size, GTK_ICON_SIZE_MENU, Inkscape::ICON_SIZE_DECORATION );
+    size = CLAMP( size, static_cast<int>(GTK_ICON_SIZE_MENU), static_cast<int>(Inkscape::ICON_SIZE_DECORATION) );
 
     if ( !sizeMapDone ) {
         injectCustomSize();
index c90b55e734e79c917cb057df7da84994e26ce2ae..c70d969919edc3db03797f2635e22ffd61032be2 100644 (file)
@@ -727,6 +727,7 @@ sp_vruler_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
 // code, those warnings are actually desired. They say "Hey! Fix this". We
 // definitely don't want to hide/ignore them. --JonCruz
 
+// TODO address const/non-const gchar* issue:
 /// Ruler metrics.
 static GtkRulerMetric const sp_ruler_metrics[] = {
   // NOTE: the order of records in this struct must correspond to the SPMetric enum.
index a10d2380ca192cc418f8ef2b3603b816173432e3..3b4b6b7114fa1effaa8383a959f83c5c49d9c78e 100644 (file)
 #include "inkscape.h"
 #include "profile-manager.h"
 
-#define noDEBUG_LCMS
+#define DEBUG_LCMS
 
 #if ENABLE_LCMS
 #include "color-profile-fns.h"
 #include "color-profile.h"
-//#define DEBUG_LCMS
+
 #ifdef DEBUG_LCMS
 #include "preferences.h"
 #include <gtk/gtkmessagedialog.h>
@@ -603,7 +603,7 @@ void ColorICCSelector::_profilesChanged( std::string const & name )
 void ColorICCSelector::_colorChanged()
 {
     _updating = TRUE;
-//     sp_color_icc_set_color( SP_COLOR_ICC( _icc ), &color );
+     //sp_color_icc_set_color( SP_COLOR_ICC( _icc ), &color );
 
 #ifdef DEBUG_LCMS
     g_message( "/^^^^^^^^^  %p::_colorChanged(%08x:%s)", this,
index 779895de43bf1524401217284ae1259e9b07e034..3ba39dd30aae8e8854756450399962e97a01f48b 100644 (file)
 #include "sp-color-scales.h"
 #include "sp-color-icc-selector.h"
 #include "sp-color-wheel-selector.h"
+#include "svg/svg-icc-color.h"
+#include "../inkscape.h"
+#include "../document.h"
+#include "../profile-manager.h"
 
 struct SPColorNotebookTracker {
        const gchar* name;
@@ -324,9 +328,37 @@ void ColorNotebook::init()
 
        row++;
 
-       /* Create RGBA entry and color preview */
        GtkWidget *rgbabox = gtk_hbox_new (FALSE, 0);
 
+#if ENABLE_LCMS
+       /* Create color management icons */
+        _box_colormanaged = gtk_event_box_new ();
+        GtkWidget *colormanaged = gtk_image_new_from_icon_name ("color-management-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
+        gtk_container_add (GTK_CONTAINER (_box_colormanaged), colormanaged);
+        GtkTooltips *tooltips_colormanaged = gtk_tooltips_new ();
+        gtk_tooltips_set_tip (tooltips_colormanaged, _box_colormanaged, _("Color Managed"), "");
+        gtk_widget_set_sensitive (_box_colormanaged, false);
+       gtk_box_pack_start(GTK_BOX(rgbabox), _box_colormanaged, FALSE, FALSE, 2);
+
+        _box_outofgamut = gtk_event_box_new ();
+        GtkWidget *outofgamut = gtk_image_new_from_icon_name ("out-of-gamut-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
+        gtk_container_add (GTK_CONTAINER (_box_outofgamut), outofgamut);
+        GtkTooltips *tooltips_outofgamut = gtk_tooltips_new ();
+        gtk_tooltips_set_tip (tooltips_outofgamut, _box_outofgamut, _("Out of gamut!"), "");
+        gtk_widget_set_sensitive (_box_outofgamut, false);
+       gtk_box_pack_start(GTK_BOX(rgbabox), _box_outofgamut, FALSE, FALSE, 2);
+
+        _box_toomuchink = gtk_event_box_new ();
+        GtkWidget *toomuchink = gtk_image_new_from_icon_name ("too-much-ink-icon", GTK_ICON_SIZE_SMALL_TOOLBAR);
+        gtk_container_add (GTK_CONTAINER (_box_toomuchink), toomuchink);
+        GtkTooltips *tooltips_toomuchink = gtk_tooltips_new ();
+        gtk_tooltips_set_tip (tooltips_toomuchink, _box_toomuchink, _("Too much ink!"), "");
+        gtk_widget_set_sensitive (_box_toomuchink, false);
+       gtk_box_pack_start(GTK_BOX(rgbabox), _box_toomuchink, FALSE, FALSE, 2);
+
+#endif //ENABLE_LCMS
+
+       /* Create RGBA entry and color preview */
        _rgbal = gtk_label_new_with_mnemonic (_("RGBA_:"));
        gtk_misc_set_alignment (GTK_MISC (_rgbal), 1.0, 0.5);
        gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2);
@@ -341,7 +373,13 @@ void ColorNotebook::init()
 
        sp_set_font_size_smaller (rgbabox);
        gtk_widget_show_all (rgbabox);
-       gtk_table_attach (GTK_TABLE (table), rgbabox, 1, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD);
+
+#if ENABLE_LCMS
+        //the "too much ink" icon is initially hidden
+        gtk_widget_hide(GTK_WIDGET(_box_toomuchink));
+#endif //ENABLE_LCMS
+
+        gtk_table_attach (GTK_TABLE (table), rgbabox, 0, 2, row, row + 1, GTK_FILL, GTK_SHRINK, XPAD, YPAD);
 
 #ifdef SPCS_PREVIEW
        _p = sp_color_preview_new (0xffffffff);
@@ -485,6 +523,40 @@ void ColorNotebook::_updateRgbaEntry( const SPColor& color, gfloat alpha )
 {
     g_return_if_fail( ( 0.0 <= alpha ) && ( alpha <= 1.0 ) );
 
+#if ENABLE_LCMS    
+    /* update color management icon*/
+    gtk_widget_set_sensitive (_box_colormanaged, color.icc != NULL);
+
+    /* update out-of-gamut icon */
+    gtk_widget_set_sensitive (_box_outofgamut, false);
+    if (color.icc){
+        Inkscape::ColorProfile* target_profile = SP_ACTIVE_DOCUMENT->profileManager->find(color.icc->colorProfile.c_str());
+        if ( target_profile )
+            gtk_widget_set_sensitive (_box_outofgamut, target_profile->GamutCheck(color));
+    }
+
+    /* update too-much-ink icon */
+    gtk_widget_set_sensitive (_box_toomuchink, false);
+    if (color.icc){
+        Inkscape::ColorProfile* prof = SP_ACTIVE_DOCUMENT->profileManager->find(color.icc->colorProfile.c_str());
+        if (prof->getColorSpace() == icSigCmykData || prof->getColorSpace() == icSigCmyData){
+            gtk_widget_show(GTK_WIDGET(_box_toomuchink));
+            double ink_sum = 0;
+            for (unsigned int i=0; i<color.icc->colors.size(); i++){
+                ink_sum += color.icc->colors[i];
+            }
+
+            /* Some literature states that when the sum of paint values exceed 320%, it is considered to be a satured color,
+                which means the paper can get too wet due to an excessive ammount of ink. This may lead to several issues
+                such as misalignment and poor quality of printing in general.*/
+            if ( ink_sum > 3.2 )
+                gtk_widget_set_sensitive (_box_toomuchink, true);
+        } else {
+            gtk_widget_hide(GTK_WIDGET(_box_toomuchink));
+        }
+    }
+#endif //ENABLE_LCMS
+
     if ( !_updatingrgba )
     {
         gchar s[32];
index bf6fb1002edd28152a32cd32b18a8b5ed56b5b6d..5eb29ac7357d3a15c65b7b5d5ecf2f5cefe6f93a 100644 (file)
@@ -61,6 +61,9 @@ protected:
     gulong _entryId;
     GtkWidget *_book;
     GtkWidget *_rgbal, *_rgbae; /* RGBA entry */
+#if ENABLE_LCMS
+    GtkWidget *_box_outofgamut, *_box_colormanaged, *_box_toomuchink;
+#endif //ENABLE_LCMS
     GtkWidget *_p; /* Color preview */
     GtkWidget *_btn;
     GtkWidget *_popup;
index cf06247e7393906f9b90276bde679c8fdf907655..e41b81e5c327f0724f5e165de7ce3653ee12c1e0 100644 (file)
@@ -10,6 +10,8 @@
 #include <glibmm/i18n.h>
 #include "../dialogs/dialog-events.h"
 #include "sp-color-scales.h"
+#include "svg/svg-icc-color.h"
+#include "svg/svg-device-color.h"
 
 #define CSC_CHANNEL_R (1 << 0)
 #define CSC_CHANNEL_G (1 << 1)
@@ -230,6 +232,12 @@ void ColorScales::_recalcColor( gboolean changing )
         case SP_COLOR_SCALES_MODE_CMYK:
         {
             _getCmykaFloatv( c );
+            color.device = new SVGDeviceColor();
+            color.device->type=DEVICE_CMYK;
+            color.device->colors.clear();
+            for (int i=0;i<4;i++){
+              color.device->colors.push_back(c[i]);
+            }
 
             float rgb[3];
             sp_color_cmyk_to_rgb_floatv( rgb, c[0], c[1], c[2], c[3] );
@@ -241,6 +249,10 @@ void ColorScales::_recalcColor( gboolean changing )
             g_warning ("file %s: line %d: Illegal color selector mode %d", __FILE__, __LINE__, _mode);
             break;
         }
+
+        /* Preserve ICC */
+        color.icc = _color.icc ? new SVGICCColor(*_color.icc) : 0;
+
         _updateInternals( color, alpha, _dragging );
     }
     else
@@ -470,11 +482,20 @@ void ColorScales::setMode(SPColorScalesMode mode)
                gtk_widget_show (_s[4]);
                gtk_widget_show (_b[4]);
                _updating = TRUE;
-               sp_color_rgb_to_cmyk_floatv (c, rgba[0], rgba[1], rgba[2]);
-               setScaled( _a[0], c[0] );
-               setScaled( _a[1], c[1] );
-               setScaled( _a[2], c[2] );
-               setScaled( _a[3], c[3] );
+
+    if (_color.device && _color.device->type == DEVICE_CMYK){
+                 setScaled( _a[0], _color.device->colors[0] );
+                 setScaled( _a[1], _color.device->colors[1] );
+                 setScaled( _a[2], _color.device->colors[2] );
+                 setScaled( _a[3], _color.device->colors[3] );
+    } else {
+      //If we still dont have a device-color, convert from rbga
+                 sp_color_rgb_to_cmyk_floatv (c, rgba[0], rgba[1], rgba[2]);
+                 setScaled( _a[0], c[0] );
+                 setScaled( _a[1], c[1] );
+                 setScaled( _a[2], c[2] );
+                 setScaled( _a[3], c[3] );
+    }
                setScaled( _a[4], rgba[3] );
                _updating = FALSE;
                _updateSliders( CSC_CHANNELS_ALL );
index 174b071f972680d3a55be23dacd430500e3b1ecf..6012f4e2004ebdb02d320c448c3d429c245e8dc0 100644 (file)
@@ -10,7 +10,8 @@
 #include "../dialogs/dialog-events.h"
 #include "sp-color-wheel-selector.h"
 #include "sp-color-scales.h"
-
+#include "sp-color-icc-selector.h"
+#include "../svg/svg-icc-color.h"
 
 G_BEGIN_DECLS
 
@@ -205,6 +206,11 @@ sp_color_wheel_selector_new (void)
 
 /* Helpers for setting color value */
 
+static void preserve_icc(SPColor *color, SPColorWheelSelector *cs){
+    ColorSelector* selector = (ColorSelector*)(SP_COLOR_SELECTOR(cs)->base);
+    color->icc = selector->getColor().icc ? new SVGICCColor(*selector->getColor().icc) : 0;
+}
+
 void ColorWheelSelector::_colorChanged()
 {
 #ifdef DUMP_CHANGE_INFO
@@ -237,6 +243,7 @@ void ColorWheelSelector::_adjustmentChanged( GtkAdjustment *adjustment, SPColorW
 
     wheelSelector->_updating = TRUE;
 
+    preserve_icc(&wheelSelector->_color, cs);
     wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
 
     wheelSelector->_updating = FALSE;
@@ -249,6 +256,8 @@ void ColorWheelSelector::_sliderGrabbed( SPColorSlider *slider, SPColorWheelSele
     if (!wheelSelector->_dragging) {
         wheelSelector->_dragging = TRUE;
         wheelSelector->_grabbed();
+
+        preserve_icc(&wheelSelector->_color, cs);
         wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
     }
 }
@@ -260,6 +269,8 @@ void ColorWheelSelector::_sliderReleased( SPColorSlider *slider, SPColorWheelSel
     if (wheelSelector->_dragging) {
         wheelSelector->_dragging = FALSE;
         wheelSelector->_released();
+
+        preserve_icc(&wheelSelector->_color, cs);
         wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
     }
 }
@@ -269,6 +280,7 @@ void ColorWheelSelector::_sliderChanged( SPColorSlider *slider, SPColorWheelSele
     (void)slider;
     ColorWheelSelector* wheelSelector = (ColorWheelSelector*)(SP_COLOR_SELECTOR(cs)->base);
 
+    preserve_icc(&wheelSelector->_color, cs);
     wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
 }
 
@@ -285,6 +297,7 @@ void ColorWheelSelector::_wheelChanged( SPColorWheel *wheel, SPColorWheelSelecto
 
     sp_color_slider_set_colors (SP_COLOR_SLIDER(wheelSelector->_slider), start, mid, end);
 
+    preserve_icc(&color, cs);
     wheelSelector->_updateInternals( color, wheelSelector->_alpha, sp_color_wheel_is_adjusting( wheel ) );
 }
 
index b10c60c7916ca59fbf8c08f72b0bec6c69057bc2..02cd0b47803a8ae65620a290f8939b47c4a78384 100644 (file)
@@ -926,11 +926,11 @@ sp_commands_toolbox_new()
 GtkWidget *
 sp_snap_toolbox_new()
 {
-       GtkWidget *tb = gtk_vbox_new(FALSE, 0);
-       gtk_box_set_spacing(GTK_BOX(tb), AUX_SPACING);
-       g_object_set_data(G_OBJECT(tb), "desktop", NULL);
+    GtkWidget *tb = gtk_vbox_new(FALSE, 0);
+    gtk_box_set_spacing(GTK_BOX(tb), AUX_SPACING);
+    g_object_set_data(G_OBJECT(tb), "desktop", NULL);
 
-       //GtkWidget *tb = gtk_toolbar_new();
+    //GtkWidget *tb = gtk_toolbar_new();
     //g_object_set_data(G_OBJECT(tb), "desktop", NULL);
 
     gtk_widget_set_sensitive(tb, FALSE);
@@ -1904,314 +1904,314 @@ update_commands_toolbox(SPDesktop */*desktop*/, SPEventContext */*eventcontext*/
 
 void toggle_snap_callback (GtkToggleAction *act, gpointer data) { //data points to the toolbox
 
-       if (g_object_get_data(G_OBJECT(data), "freeze" )) {
-               return;
-       }
-
-       gpointer ptr = g_object_get_data(G_OBJECT(data), "desktop");
-       g_assert(ptr != NULL);
-
-       SPDesktop *dt = reinterpret_cast<SPDesktop*>(ptr);
-       SPNamedView *nv = sp_desktop_namedview(dt);
-       SPDocument *doc = SP_OBJECT_DOCUMENT(nv);
-
-       if (dt == NULL || nv == NULL) {
-               g_warning("No desktop or namedview specified (in toggle_snap_callback)!");
-               return;
-       }
-
-       Inkscape::XML::Node *repr = SP_OBJECT_REPR(nv);
-
-       if (repr == NULL) {
-               g_warning("This namedview doesn't have a xml representation attached!");
-               return;
-       }
-
-       bool saved = sp_document_get_undo_sensitive(doc);
-       sp_document_set_undo_sensitive(doc, false);
-
-       bool v = false;
-       SPAttributeEnum attr = (SPAttributeEnum) GPOINTER_TO_INT(g_object_get_data(G_OBJECT(act), "SP_ATTR_INKSCAPE"));
-
-       switch (attr) {
-       case SP_ATTR_INKSCAPE_SNAP_GLOBAL:
-               dt->toggleSnapGlobal();
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_BBOX:
-               v = nv->snap_manager.snapprefs.getSnapModeBBox();
-               sp_repr_set_boolean(repr, "inkscape:snap-bbox", !v);
-               break;
-       case SP_ATTR_INKSCAPE_BBOX_PATHS:
-               v = nv->snap_manager.snapprefs.getSnapToBBoxPath();
-               sp_repr_set_boolean(repr, "inkscape:bbox-paths", !v);
-               break;
-       case SP_ATTR_INKSCAPE_BBOX_NODES:
-               v = nv->snap_manager.snapprefs.getSnapToBBoxNode();
-               sp_repr_set_boolean(repr, "inkscape:bbox-nodes", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_NODES:
-               v = nv->snap_manager.snapprefs.getSnapModeNode();
-               sp_repr_set_boolean(repr, "inkscape:snap-nodes", !v);
-               break;
-       case SP_ATTR_INKSCAPE_OBJECT_PATHS:
-               v = nv->snap_manager.snapprefs.getSnapToItemPath();
-               sp_repr_set_boolean(repr, "inkscape:object-paths", !v);
-               break;
-       case SP_ATTR_INKSCAPE_OBJECT_NODES:
-               v = nv->snap_manager.snapprefs.getSnapToItemNode();
-               sp_repr_set_boolean(repr, "inkscape:object-nodes", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_SMOOTH_NODES:
-               v = nv->snap_manager.snapprefs.getSnapSmoothNodes();
-               sp_repr_set_boolean(repr, "inkscape:snap-smooth-nodes", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_INTERS_PATHS:
-               v = nv->snap_manager.snapprefs.getSnapIntersectionCS();
-               sp_repr_set_boolean(repr, "inkscape:snap-intersection-paths", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_CENTER:
-               v = nv->snap_manager.snapprefs.getIncludeItemCenter();
-               sp_repr_set_boolean(repr, "inkscape:snap-center", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_GRIDS:
-               v = nv->snap_manager.snapprefs.getSnapToGrids();
-               sp_repr_set_boolean(repr, "inkscape:snap-grids", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_TO_GUIDES:
-               v = nv->snap_manager.snapprefs.getSnapToGuides();
-               sp_repr_set_boolean(repr, "inkscape:snap-to-guides", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_PAGE:
-               v = nv->snap_manager.snapprefs.getSnapToPageBorder();
-               sp_repr_set_boolean(repr, "inkscape:snap-page", !v);
-               break;
-       /*case SP_ATTR_INKSCAPE_SNAP_INTERS_GRIDGUIDE:
-               v = nv->snap_manager.snapprefs.getSnapIntersectionGG();
-               sp_repr_set_boolean(repr, "inkscape:snap-intersection-grid-guide", !v);
-               break;*/
-       case SP_ATTR_INKSCAPE_SNAP_LINE_MIDPOINTS:
-               v = nv->snap_manager.snapprefs.getSnapLineMidpoints();
-               sp_repr_set_boolean(repr, "inkscape:snap-midpoints", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_OBJECT_MIDPOINTS:
-               v = nv->snap_manager.snapprefs.getSnapObjectMidpoints();
-               sp_repr_set_boolean(repr, "inkscape:snap-object-midpoints", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_BBOX_EDGE_MIDPOINTS:
-               v = nv->snap_manager.snapprefs.getSnapBBoxEdgeMidpoints();
-               sp_repr_set_boolean(repr, "inkscape:snap-bbox-edge-midpoints", !v);
-               break;
-       case SP_ATTR_INKSCAPE_SNAP_BBOX_MIDPOINTS:
-               v = nv->snap_manager.snapprefs.getSnapBBoxMidpoints();
-               sp_repr_set_boolean(repr, "inkscape:snap-bbox-midpoints", !v);
-               break;
-       default:
-               g_warning("toggle_snap_callback has been called with an ID for which no action has been defined");
-               break;
-       }
-
-       // The snapping preferences are stored in the document, and therefore toggling makes the document dirty
-       doc->setModifiedSinceSave();
-
-       sp_document_set_undo_sensitive(doc, saved);
+    if (g_object_get_data(G_OBJECT(data), "freeze" )) {
+        return;
+    }
+
+    gpointer ptr = g_object_get_data(G_OBJECT(data), "desktop");
+    g_assert(ptr != NULL);
+
+    SPDesktop *dt = reinterpret_cast<SPDesktop*>(ptr);
+    SPNamedView *nv = sp_desktop_namedview(dt);
+    SPDocument *doc = SP_OBJECT_DOCUMENT(nv);
+
+    if (dt == NULL || nv == NULL) {
+        g_warning("No desktop or namedview specified (in toggle_snap_callback)!");
+        return;
+    }
+
+    Inkscape::XML::Node *repr = SP_OBJECT_REPR(nv);
+
+    if (repr == NULL) {
+        g_warning("This namedview doesn't have a xml representation attached!");
+        return;
+    }
+
+    bool saved = sp_document_get_undo_sensitive(doc);
+    sp_document_set_undo_sensitive(doc, false);
+
+    bool v = false;
+    SPAttributeEnum attr = (SPAttributeEnum) GPOINTER_TO_INT(g_object_get_data(G_OBJECT(act), "SP_ATTR_INKSCAPE"));
+
+    switch (attr) {
+        case SP_ATTR_INKSCAPE_SNAP_GLOBAL:
+            dt->toggleSnapGlobal();
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_BBOX:
+            v = nv->snap_manager.snapprefs.getSnapModeBBox();
+            sp_repr_set_boolean(repr, "inkscape:snap-bbox", !v);
+            break;
+        case SP_ATTR_INKSCAPE_BBOX_PATHS:
+            v = nv->snap_manager.snapprefs.getSnapToBBoxPath();
+            sp_repr_set_boolean(repr, "inkscape:bbox-paths", !v);
+            break;
+        case SP_ATTR_INKSCAPE_BBOX_NODES:
+            v = nv->snap_manager.snapprefs.getSnapToBBoxNode();
+            sp_repr_set_boolean(repr, "inkscape:bbox-nodes", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_NODES:
+            v = nv->snap_manager.snapprefs.getSnapModeNode();
+            sp_repr_set_boolean(repr, "inkscape:snap-nodes", !v);
+            break;
+        case SP_ATTR_INKSCAPE_OBJECT_PATHS:
+            v = nv->snap_manager.snapprefs.getSnapToItemPath();
+            sp_repr_set_boolean(repr, "inkscape:object-paths", !v);
+            break;
+        case SP_ATTR_INKSCAPE_OBJECT_NODES:
+            v = nv->snap_manager.snapprefs.getSnapToItemNode();
+            sp_repr_set_boolean(repr, "inkscape:object-nodes", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_SMOOTH_NODES:
+            v = nv->snap_manager.snapprefs.getSnapSmoothNodes();
+            sp_repr_set_boolean(repr, "inkscape:snap-smooth-nodes", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_INTERS_PATHS:
+            v = nv->snap_manager.snapprefs.getSnapIntersectionCS();
+            sp_repr_set_boolean(repr, "inkscape:snap-intersection-paths", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_CENTER:
+            v = nv->snap_manager.snapprefs.getIncludeItemCenter();
+            sp_repr_set_boolean(repr, "inkscape:snap-center", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_GRIDS:
+            v = nv->snap_manager.snapprefs.getSnapToGrids();
+            sp_repr_set_boolean(repr, "inkscape:snap-grids", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_TO_GUIDES:
+            v = nv->snap_manager.snapprefs.getSnapToGuides();
+            sp_repr_set_boolean(repr, "inkscape:snap-to-guides", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_PAGE:
+            v = nv->snap_manager.snapprefs.getSnapToPageBorder();
+            sp_repr_set_boolean(repr, "inkscape:snap-page", !v);
+            break;
+            /*case SP_ATTR_INKSCAPE_SNAP_INTERS_GRIDGUIDE:
+              v = nv->snap_manager.snapprefs.getSnapIntersectionGG();
+              sp_repr_set_boolean(repr, "inkscape:snap-intersection-grid-guide", !v);
+              break;*/
+        case SP_ATTR_INKSCAPE_SNAP_LINE_MIDPOINTS:
+            v = nv->snap_manager.snapprefs.getSnapLineMidpoints();
+            sp_repr_set_boolean(repr, "inkscape:snap-midpoints", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_OBJECT_MIDPOINTS:
+            v = nv->snap_manager.snapprefs.getSnapObjectMidpoints();
+            sp_repr_set_boolean(repr, "inkscape:snap-object-midpoints", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_BBOX_EDGE_MIDPOINTS:
+            v = nv->snap_manager.snapprefs.getSnapBBoxEdgeMidpoints();
+            sp_repr_set_boolean(repr, "inkscape:snap-bbox-edge-midpoints", !v);
+            break;
+        case SP_ATTR_INKSCAPE_SNAP_BBOX_MIDPOINTS:
+            v = nv->snap_manager.snapprefs.getSnapBBoxMidpoints();
+            sp_repr_set_boolean(repr, "inkscape:snap-bbox-midpoints", !v);
+            break;
+        default:
+            g_warning("toggle_snap_callback has been called with an ID for which no action has been defined");
+            break;
+    }
+
+    // The snapping preferences are stored in the document, and therefore toggling makes the document dirty
+    doc->setModifiedSinceSave();
+
+    sp_document_set_undo_sensitive(doc, saved);
 }
 
 void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
 {
-       Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-       Glib::RefPtr<Gtk::ActionGroup> mainActions = create_or_fetch_actions(desktop);
-
-       gchar const * descr =
-               "<ui>"
-               "  <toolbar name='SnapToolbar'>"
-               "    <toolitem action='ToggleSnapGlobal' />"
-                       "    <separator />"
-                       "    <toolitem action='ToggleSnapFromBBoxCorner' />"
-                       "    <toolitem action='ToggleSnapToBBoxPath' />"
-                       "    <toolitem action='ToggleSnapToBBoxNode' />"
-                       "    <toolitem action='ToggleSnapToFromBBoxEdgeMidpoints' />"
-                       "    <toolitem action='ToggleSnapToFromBBoxCenters' />"
-                       "    <separator />"
-                       "    <toolitem action='ToggleSnapFromNode' />"
-                       "    <toolitem action='ToggleSnapToItemPath' />"
-                       "    <toolitem action='ToggleSnapToPathIntersections' />"
-                       "    <toolitem action='ToggleSnapToItemNode' />"
-                       "    <toolitem action='ToggleSnapToSmoothNodes' />"
-                       "    <toolitem action='ToggleSnapToFromLineMidpoints' />"
-                       "    <toolitem action='ToggleSnapToFromObjectCenters' />"
-                       "    <toolitem action='ToggleSnapToFromRotationCenter' />"
-                       "    <separator />"
-                       "    <toolitem action='ToggleSnapToPageBorder' />"
-                       "    <toolitem action='ToggleSnapToGrids' />"
-                       "    <toolitem action='ToggleSnapToGuides' />"
-                 //"    <toolitem action='ToggleSnapToGridGuideIntersections' />"
-                       "  </toolbar>"
-               "</ui>";
-
-       Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapGlobal",
-                   _("Snap"), _("Enable snapping"), INKSCAPE_ICON_SNAP, secondarySize,
-                   SP_ATTR_INKSCAPE_SNAP_GLOBAL);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapFromBBoxCorner",
-                   _("Bounding box"), _("Snap bounding box corners"), INKSCAPE_ICON_SNAP_BOUNDING_BOX,
-                   secondarySize, SP_ATTR_INKSCAPE_SNAP_BBOX);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToBBoxPath",
-                   _("Bounding box edges"), _("Snap to edges of a bounding box"),
-                   INKSCAPE_ICON_SNAP_BOUNDING_BOX_EDGES, secondarySize, SP_ATTR_INKSCAPE_BBOX_PATHS);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToBBoxNode",
-                   _("Bounding box corners"), _("Snap to bounding box corners"),
-                   INKSCAPE_ICON_SNAP_BOUNDING_BOX_CORNERS, secondarySize, SP_ATTR_INKSCAPE_BBOX_NODES);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromBBoxEdgeMidpoints",
-                   _("BBox Edge Midpoints"), _("Snap from and to midpoints of bounding box edges"),
-                   INKSCAPE_ICON_SNAP_BOUNDING_BOX_MIDPOINTS, secondarySize,
-                   SP_ATTR_INKSCAPE_SNAP_BBOX_EDGE_MIDPOINTS);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromBBoxCenters",
-                   _("BBox Centers"), _("Snapping from and to centers of bounding boxes"),
-                   INKSCAPE_ICON_SNAP_BOUNDING_BOX_CENTER, secondarySize, SP_ATTR_INKSCAPE_SNAP_BBOX_MIDPOINTS);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapFromNode",
-                   _("Nodes"), _("Snap nodes or handles"), INKSCAPE_ICON_SNAP_NODES, secondarySize, SP_ATTR_INKSCAPE_SNAP_NODES);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToItemPath",
-                   _("Paths"), _("Snap to paths"), INKSCAPE_ICON_SNAP_NODES_PATH, secondarySize,
-                   SP_ATTR_INKSCAPE_OBJECT_PATHS);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToPathIntersections",
-                   _("Path intersections"), _("Snap to path intersections"),
-                   INKSCAPE_ICON_SNAP_NODES_INTERSECTION, secondarySize, SP_ATTR_INKSCAPE_SNAP_INTERS_PATHS);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToItemNode",
-                   _("To nodes"), _("Snap to cusp nodes"), INKSCAPE_ICON_SNAP_NODES_CUSP, secondarySize,
-                   SP_ATTR_INKSCAPE_OBJECT_NODES);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToSmoothNodes",
-                   _("Smooth nodes"), _("Snap to smooth nodes"), INKSCAPE_ICON_SNAP_NODES_SMOOTH,
-                   secondarySize, SP_ATTR_INKSCAPE_SNAP_SMOOTH_NODES);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromLineMidpoints",
-                   _("Line Midpoints"), _("Snap from and to midpoints of line segments"),
-                   INKSCAPE_ICON_SNAP_NODES_MIDPOINT, secondarySize, SP_ATTR_INKSCAPE_SNAP_LINE_MIDPOINTS);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromObjectCenters",
-                   _("Object Centers"), _("Snap from and to centers of objects"),
-                   INKSCAPE_ICON_SNAP_NODES_CENTER, secondarySize, SP_ATTR_INKSCAPE_SNAP_OBJECT_MIDPOINTS);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromRotationCenter",
-                   _("Rotation Centers"), _("Snap from and to an item's rotation center"),
-                   INKSCAPE_ICON_SNAP_NODES_ROTATION_CENTER, secondarySize, SP_ATTR_INKSCAPE_SNAP_CENTER);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToPageBorder",
-                   _("Page border"), _("Snap to the page border"), INKSCAPE_ICON_SNAP_PAGE,
-                   secondarySize, SP_ATTR_INKSCAPE_SNAP_PAGE);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToGrids",
-                   _("Grids"), _("Snap to grids"), INKSCAPE_ICON_GRID_RECTANGULAR, secondarySize,
-                   SP_ATTR_INKSCAPE_SNAP_GRIDS);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       {
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToGuides",
-                   _("Guides"), _("Snap to guides"), INKSCAPE_ICON_GUIDES, secondarySize,
-                   SP_ATTR_INKSCAPE_SNAP_TO_GUIDES);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }
-
-       /*{
-               InkToggleAction* act = ink_toggle_action_new("ToggleSnapToGridGuideIntersections",
-                   _("Grid/guide intersections"), _("Snap to intersections of a grid with a guide"),
-                   INKSCAPE_ICON_SNAP_GRID_GUIDE_INTERSECTIONS, secondarySize,
-                   SP_ATTR_INKSCAPE_SNAP_INTERS_GRIDGUIDE);
-
-               gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
-               g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
-       }*/
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    Glib::RefPtr<Gtk::ActionGroup> mainActions = create_or_fetch_actions(desktop);
+
+    gchar const * descr =
+        "<ui>"
+        "  <toolbar name='SnapToolbar'>"
+        "    <toolitem action='ToggleSnapGlobal' />"
+        "    <separator />"
+        "    <toolitem action='ToggleSnapFromBBoxCorner' />"
+        "    <toolitem action='ToggleSnapToBBoxPath' />"
+        "    <toolitem action='ToggleSnapToBBoxNode' />"
+        "    <toolitem action='ToggleSnapToFromBBoxEdgeMidpoints' />"
+        "    <toolitem action='ToggleSnapToFromBBoxCenters' />"
+        "    <separator />"
+        "    <toolitem action='ToggleSnapFromNode' />"
+        "    <toolitem action='ToggleSnapToItemPath' />"
+        "    <toolitem action='ToggleSnapToPathIntersections' />"
+        "    <toolitem action='ToggleSnapToItemNode' />"
+        "    <toolitem action='ToggleSnapToSmoothNodes' />"
+        "    <toolitem action='ToggleSnapToFromLineMidpoints' />"
+        "    <toolitem action='ToggleSnapToFromObjectCenters' />"
+        "    <toolitem action='ToggleSnapToFromRotationCenter' />"
+        "    <separator />"
+        "    <toolitem action='ToggleSnapToPageBorder' />"
+        "    <toolitem action='ToggleSnapToGrids' />"
+        "    <toolitem action='ToggleSnapToGuides' />"
+        //"    <toolitem action='ToggleSnapToGridGuideIntersections' />"
+        "  </toolbar>"
+        "</ui>";
+
+    Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapGlobal",
+                                                     _("Snap"), _("Enable snapping"), INKSCAPE_ICON_SNAP, secondarySize,
+                                                     SP_ATTR_INKSCAPE_SNAP_GLOBAL);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapFromBBoxCorner",
+                                                     _("Bounding box"), _("Snap bounding box corners"), INKSCAPE_ICON_SNAP_BOUNDING_BOX,
+                                                     secondarySize, SP_ATTR_INKSCAPE_SNAP_BBOX);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToBBoxPath",
+                                                     _("Bounding box edges"), _("Snap to edges of a bounding box"),
+                                                     INKSCAPE_ICON_SNAP_BOUNDING_BOX_EDGES, secondarySize, SP_ATTR_INKSCAPE_BBOX_PATHS);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToBBoxNode",
+                                                     _("Bounding box corners"), _("Snap to bounding box corners"),
+                                                     INKSCAPE_ICON_SNAP_BOUNDING_BOX_CORNERS, secondarySize, SP_ATTR_INKSCAPE_BBOX_NODES);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromBBoxEdgeMidpoints",
+                                                     _("BBox Edge Midpoints"), _("Snap from and to midpoints of bounding box edges"),
+                                                     INKSCAPE_ICON_SNAP_BOUNDING_BOX_MIDPOINTS, secondarySize,
+                                                     SP_ATTR_INKSCAPE_SNAP_BBOX_EDGE_MIDPOINTS);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromBBoxCenters",
+                                                     _("BBox Centers"), _("Snapping from and to centers of bounding boxes"),
+                                                     INKSCAPE_ICON_SNAP_BOUNDING_BOX_CENTER, secondarySize, SP_ATTR_INKSCAPE_SNAP_BBOX_MIDPOINTS);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapFromNode",
+                                                     _("Nodes"), _("Snap nodes or handles"), INKSCAPE_ICON_SNAP_NODES, secondarySize, SP_ATTR_INKSCAPE_SNAP_NODES);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToItemPath",
+                                                     _("Paths"), _("Snap to paths"), INKSCAPE_ICON_SNAP_NODES_PATH, secondarySize,
+                                                     SP_ATTR_INKSCAPE_OBJECT_PATHS);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToPathIntersections",
+                                                     _("Path intersections"), _("Snap to path intersections"),
+                                                     INKSCAPE_ICON_SNAP_NODES_INTERSECTION, secondarySize, SP_ATTR_INKSCAPE_SNAP_INTERS_PATHS);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToItemNode",
+                                                     _("To nodes"), _("Snap to cusp nodes"), INKSCAPE_ICON_SNAP_NODES_CUSP, secondarySize,
+                                                     SP_ATTR_INKSCAPE_OBJECT_NODES);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToSmoothNodes",
+                                                     _("Smooth nodes"), _("Snap to smooth nodes"), INKSCAPE_ICON_SNAP_NODES_SMOOTH,
+                                                     secondarySize, SP_ATTR_INKSCAPE_SNAP_SMOOTH_NODES);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromLineMidpoints",
+                                                     _("Line Midpoints"), _("Snap from and to midpoints of line segments"),
+                                                     INKSCAPE_ICON_SNAP_NODES_MIDPOINT, secondarySize, SP_ATTR_INKSCAPE_SNAP_LINE_MIDPOINTS);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromObjectCenters",
+                                                     _("Object Centers"), _("Snap from and to centers of objects"),
+                                                     INKSCAPE_ICON_SNAP_NODES_CENTER, secondarySize, SP_ATTR_INKSCAPE_SNAP_OBJECT_MIDPOINTS);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToFromRotationCenter",
+                                                     _("Rotation Centers"), _("Snap from and to an item's rotation center"),
+                                                     INKSCAPE_ICON_SNAP_NODES_ROTATION_CENTER, secondarySize, SP_ATTR_INKSCAPE_SNAP_CENTER);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToPageBorder",
+                                                     _("Page border"), _("Snap to the page border"), INKSCAPE_ICON_SNAP_PAGE,
+                                                     secondarySize, SP_ATTR_INKSCAPE_SNAP_PAGE);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToGrids",
+                                                     _("Grids"), _("Snap to grids"), INKSCAPE_ICON_GRID_RECTANGULAR, secondarySize,
+                                                     SP_ATTR_INKSCAPE_SNAP_GRIDS);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    {
+        InkToggleAction* act = ink_toggle_action_new("ToggleSnapToGuides",
+                                                     _("Guides"), _("Snap to guides"), INKSCAPE_ICON_GUIDES, secondarySize,
+                                                     SP_ATTR_INKSCAPE_SNAP_TO_GUIDES);
+
+        gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+        g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+    }
+
+    /*{
+      InkToggleAction* act = ink_toggle_action_new("ToggleSnapToGridGuideIntersections",
+      _("Grid/guide intersections"), _("Snap to intersections of a grid with a guide"),
+      INKSCAPE_ICON_SNAP_GRID_GUIDE_INTERSECTIONS, secondarySize,
+      SP_ATTR_INKSCAPE_SNAP_INTERS_GRIDGUIDE);
+
+      gtk_action_group_add_action( mainActions->gobj(), GTK_ACTION( act ) );
+      g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_snap_callback), toolbox );
+      }*/
 
     GtkUIManager* mgr = gtk_ui_manager_new();
     GError* errVal = 0;
@@ -2243,94 +2243,94 @@ void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
 
 void update_snap_toolbox(SPDesktop *desktop, SPEventContext */*eventcontext*/, GtkWidget *toolbox)
 {
-       g_assert(desktop != NULL);
-       g_assert(toolbox != NULL);
-
-       SPNamedView *nv = sp_desktop_namedview(desktop);
-       if (nv == NULL) {
-               g_warning("Namedview cannot be retrieved (in update_snap_toolbox)!");
-               return;
-       }
-
-       Glib::RefPtr<Gtk::ActionGroup> mainActions = create_or_fetch_actions(desktop);
-
-       Glib::RefPtr<Gtk::Action> act1 = mainActions->get_action("ToggleSnapGlobal");
-       Glib::RefPtr<Gtk::Action> act2 = mainActions->get_action("ToggleSnapFromBBoxCorner");
-       Glib::RefPtr<Gtk::Action> act3 = mainActions->get_action("ToggleSnapToBBoxPath");
-       Glib::RefPtr<Gtk::Action> act4 = mainActions->get_action("ToggleSnapToBBoxNode");
-       Glib::RefPtr<Gtk::Action> act4b = mainActions->get_action("ToggleSnapToFromBBoxEdgeMidpoints");
-       Glib::RefPtr<Gtk::Action> act4c = mainActions->get_action("ToggleSnapToFromBBoxCenters");
-       Glib::RefPtr<Gtk::Action> act5 = mainActions->get_action("ToggleSnapFromNode");
-       Glib::RefPtr<Gtk::Action> act6 = mainActions->get_action("ToggleSnapToItemPath");
-       Glib::RefPtr<Gtk::Action> act6b = mainActions->get_action("ToggleSnapToPathIntersections");
-       Glib::RefPtr<Gtk::Action> act7 = mainActions->get_action("ToggleSnapToItemNode");
-       Glib::RefPtr<Gtk::Action> act8 = mainActions->get_action("ToggleSnapToSmoothNodes");
-       Glib::RefPtr<Gtk::Action> act9 = mainActions->get_action("ToggleSnapToFromLineMidpoints");
-       Glib::RefPtr<Gtk::Action> act10 = mainActions->get_action("ToggleSnapToFromObjectCenters");
-       Glib::RefPtr<Gtk::Action> act11 = mainActions->get_action("ToggleSnapToFromRotationCenter");
-       Glib::RefPtr<Gtk::Action> act12 = mainActions->get_action("ToggleSnapToPageBorder");
-       //Glib::RefPtr<Gtk::Action> act13 = mainActions->get_action("ToggleSnapToGridGuideIntersections");
-       Glib::RefPtr<Gtk::Action> act14 = mainActions->get_action("ToggleSnapToGrids");
-       Glib::RefPtr<Gtk::Action> act15 = mainActions->get_action("ToggleSnapToGuides");
-
-
-       if (!act1) {
-               return; // The snap actions haven't been defined yet (might be the case during startup)
-       }
-
-       // The ..._set_active calls below will toggle the buttons, but this shouldn't lead to
-       // changes in our document because we're only updating the UI;
-       // Setting the "freeze" parameter to true will block the code in toggle_snap_callback()
-       g_object_set_data(G_OBJECT(toolbox), "freeze", GINT_TO_POINTER(TRUE));
-
-       bool const c1 = nv->snap_manager.snapprefs.getSnapEnabledGlobally();
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act1->gobj()), c1);
-
-       bool const c2 = nv->snap_manager.snapprefs.getSnapModeBBox();
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act2->gobj()), c2);
-       gtk_action_set_sensitive(GTK_ACTION(act2->gobj()), c1);
-
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act3->gobj()), nv->snap_manager.snapprefs.getSnapToBBoxPath());
-       gtk_action_set_sensitive(GTK_ACTION(act3->gobj()), c1 && c2);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act4->gobj()), nv->snap_manager.snapprefs.getSnapToBBoxNode());
-       gtk_action_set_sensitive(GTK_ACTION(act4->gobj()), c1 && c2);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act4b->gobj()), nv->snap_manager.snapprefs.getSnapBBoxEdgeMidpoints());
-       gtk_action_set_sensitive(GTK_ACTION(act4b->gobj()), c1 && c2);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act4c->gobj()), nv->snap_manager.snapprefs.getSnapBBoxMidpoints());
-       gtk_action_set_sensitive(GTK_ACTION(act4c->gobj()), c1 && c2);
-
-       bool const c3 = nv->snap_manager.snapprefs.getSnapModeNode();
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act5->gobj()), c3);
-       gtk_action_set_sensitive(GTK_ACTION(act5->gobj()), c1);
-
-       bool const c4 = nv->snap_manager.snapprefs.getSnapToItemPath();
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act6->gobj()), c4);
-       gtk_action_set_sensitive(GTK_ACTION(act6->gobj()), c1 && c3);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act6b->gobj()), nv->snap_manager.snapprefs.getSnapIntersectionCS());
-       gtk_action_set_sensitive(GTK_ACTION(act6b->gobj()), c1 && c3 && c4);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act7->gobj()), nv->snap_manager.snapprefs.getSnapToItemNode());
-       gtk_action_set_sensitive(GTK_ACTION(act7->gobj()), c1 && c3);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act8->gobj()), nv->snap_manager.snapprefs.getSnapSmoothNodes());
-       gtk_action_set_sensitive(GTK_ACTION(act8->gobj()), c1 && c3);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act9->gobj()), nv->snap_manager.snapprefs.getSnapLineMidpoints());
-       gtk_action_set_sensitive(GTK_ACTION(act9->gobj()), c1 && c3);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act10->gobj()), nv->snap_manager.snapprefs.getSnapObjectMidpoints());
-       gtk_action_set_sensitive(GTK_ACTION(act10->gobj()), c1 && c3);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act11->gobj()), nv->snap_manager.snapprefs.getIncludeItemCenter());
-       gtk_action_set_sensitive(GTK_ACTION(act11->gobj()), c1 && c3);
-
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act12->gobj()), nv->snap_manager.snapprefs.getSnapToPageBorder());
-       gtk_action_set_sensitive(GTK_ACTION(act12->gobj()), c1);
-       //gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act13->gobj()), nv->snap_manager.snapprefs.getSnapIntersectionGG());
-       //gtk_action_set_sensitive(GTK_ACTION(act13->gobj()), c1);
-
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act14->gobj()), nv->snap_manager.snapprefs.getSnapToGrids());
-       gtk_action_set_sensitive(GTK_ACTION(act14->gobj()), c1);
-       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act15->gobj()), nv->snap_manager.snapprefs.getSnapToGuides());
-       gtk_action_set_sensitive(GTK_ACTION(act15->gobj()), c1);
-
-
-       g_object_set_data(G_OBJECT(toolbox), "freeze", GINT_TO_POINTER(FALSE)); // unfreeze (see above)
+    g_assert(desktop != NULL);
+    g_assert(toolbox != NULL);
+
+    SPNamedView *nv = sp_desktop_namedview(desktop);
+    if (nv == NULL) {
+        g_warning("Namedview cannot be retrieved (in update_snap_toolbox)!");
+        return;
+    }
+
+    Glib::RefPtr<Gtk::ActionGroup> mainActions = create_or_fetch_actions(desktop);
+
+    Glib::RefPtr<Gtk::Action> act1 = mainActions->get_action("ToggleSnapGlobal");
+    Glib::RefPtr<Gtk::Action> act2 = mainActions->get_action("ToggleSnapFromBBoxCorner");
+    Glib::RefPtr<Gtk::Action> act3 = mainActions->get_action("ToggleSnapToBBoxPath");
+    Glib::RefPtr<Gtk::Action> act4 = mainActions->get_action("ToggleSnapToBBoxNode");
+    Glib::RefPtr<Gtk::Action> act4b = mainActions->get_action("ToggleSnapToFromBBoxEdgeMidpoints");
+    Glib::RefPtr<Gtk::Action> act4c = mainActions->get_action("ToggleSnapToFromBBoxCenters");
+    Glib::RefPtr<Gtk::Action> act5 = mainActions->get_action("ToggleSnapFromNode");
+    Glib::RefPtr<Gtk::Action> act6 = mainActions->get_action("ToggleSnapToItemPath");
+    Glib::RefPtr<Gtk::Action> act6b = mainActions->get_action("ToggleSnapToPathIntersections");
+    Glib::RefPtr<Gtk::Action> act7 = mainActions->get_action("ToggleSnapToItemNode");
+    Glib::RefPtr<Gtk::Action> act8 = mainActions->get_action("ToggleSnapToSmoothNodes");
+    Glib::RefPtr<Gtk::Action> act9 = mainActions->get_action("ToggleSnapToFromLineMidpoints");
+    Glib::RefPtr<Gtk::Action> act10 = mainActions->get_action("ToggleSnapToFromObjectCenters");
+    Glib::RefPtr<Gtk::Action> act11 = mainActions->get_action("ToggleSnapToFromRotationCenter");
+    Glib::RefPtr<Gtk::Action> act12 = mainActions->get_action("ToggleSnapToPageBorder");
+    //Glib::RefPtr<Gtk::Action> act13 = mainActions->get_action("ToggleSnapToGridGuideIntersections");
+    Glib::RefPtr<Gtk::Action> act14 = mainActions->get_action("ToggleSnapToGrids");
+    Glib::RefPtr<Gtk::Action> act15 = mainActions->get_action("ToggleSnapToGuides");
+
+
+    if (!act1) {
+        return; // The snap actions haven't been defined yet (might be the case during startup)
+    }
+
+    // The ..._set_active calls below will toggle the buttons, but this shouldn't lead to
+    // changes in our document because we're only updating the UI;
+    // Setting the "freeze" parameter to true will block the code in toggle_snap_callback()
+    g_object_set_data(G_OBJECT(toolbox), "freeze", GINT_TO_POINTER(TRUE));
+
+    bool const c1 = nv->snap_manager.snapprefs.getSnapEnabledGlobally();
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act1->gobj()), c1);
+
+    bool const c2 = nv->snap_manager.snapprefs.getSnapModeBBox();
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act2->gobj()), c2);
+    gtk_action_set_sensitive(GTK_ACTION(act2->gobj()), c1);
+
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act3->gobj()), nv->snap_manager.snapprefs.getSnapToBBoxPath());
+    gtk_action_set_sensitive(GTK_ACTION(act3->gobj()), c1 && c2);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act4->gobj()), nv->snap_manager.snapprefs.getSnapToBBoxNode());
+    gtk_action_set_sensitive(GTK_ACTION(act4->gobj()), c1 && c2);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act4b->gobj()), nv->snap_manager.snapprefs.getSnapBBoxEdgeMidpoints());
+    gtk_action_set_sensitive(GTK_ACTION(act4b->gobj()), c1 && c2);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act4c->gobj()), nv->snap_manager.snapprefs.getSnapBBoxMidpoints());
+    gtk_action_set_sensitive(GTK_ACTION(act4c->gobj()), c1 && c2);
+
+    bool const c3 = nv->snap_manager.snapprefs.getSnapModeNode();
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act5->gobj()), c3);
+    gtk_action_set_sensitive(GTK_ACTION(act5->gobj()), c1);
+
+    bool const c4 = nv->snap_manager.snapprefs.getSnapToItemPath();
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act6->gobj()), c4);
+    gtk_action_set_sensitive(GTK_ACTION(act6->gobj()), c1 && c3);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act6b->gobj()), nv->snap_manager.snapprefs.getSnapIntersectionCS());
+    gtk_action_set_sensitive(GTK_ACTION(act6b->gobj()), c1 && c3 && c4);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act7->gobj()), nv->snap_manager.snapprefs.getSnapToItemNode());
+    gtk_action_set_sensitive(GTK_ACTION(act7->gobj()), c1 && c3);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act8->gobj()), nv->snap_manager.snapprefs.getSnapSmoothNodes());
+    gtk_action_set_sensitive(GTK_ACTION(act8->gobj()), c1 && c3);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act9->gobj()), nv->snap_manager.snapprefs.getSnapLineMidpoints());
+    gtk_action_set_sensitive(GTK_ACTION(act9->gobj()), c1 && c3);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act10->gobj()), nv->snap_manager.snapprefs.getSnapObjectMidpoints());
+    gtk_action_set_sensitive(GTK_ACTION(act10->gobj()), c1 && c3);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act11->gobj()), nv->snap_manager.snapprefs.getIncludeItemCenter());
+    gtk_action_set_sensitive(GTK_ACTION(act11->gobj()), c1 && c3);
+
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act12->gobj()), nv->snap_manager.snapprefs.getSnapToPageBorder());
+    gtk_action_set_sensitive(GTK_ACTION(act12->gobj()), c1);
+    //gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act13->gobj()), nv->snap_manager.snapprefs.getSnapIntersectionGG());
+    //gtk_action_set_sensitive(GTK_ACTION(act13->gobj()), c1);
+
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act14->gobj()), nv->snap_manager.snapprefs.getSnapToGrids());
+    gtk_action_set_sensitive(GTK_ACTION(act14->gobj()), c1);
+    gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act15->gobj()), nv->snap_manager.snapprefs.getSnapToGuides());
+    gtk_action_set_sensitive(GTK_ACTION(act15->gobj()), c1);
+
+
+    g_object_set_data(G_OBJECT(toolbox), "freeze", GINT_TO_POINTER(FALSE)); // unfreeze (see above)
 }
 
 void show_aux_toolbox(GtkWidget *toolbox_toplevel)
@@ -2412,8 +2412,8 @@ static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GObject *dataKl
 
     if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
         if (!IS_NAN(adj->value)) {
-                       Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-                       prefs->setDouble("/tools/shapes/star/proportion", adj->value);
+            Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+            prefs->setDouble("/tools/shapes/star/proportion", adj->value);
         }
     }
 
@@ -3226,7 +3226,7 @@ box3d_set_button_and_adjustment(Persp3D *persp, Proj::Axis axis,
     // TODO: Take all selected perspectives into account but don't touch the state button if not all of them
     //       have the same state (otherwise a call to box3d_vp_z_state_changed() is triggered and the states
     //       are reset).
-    bool is_infinite = !persp3d_VP_is_finite(persp, axis);
+    bool is_infinite = !persp3d_VP_is_finite(persp->perspective_impl, axis);
 
     if (is_infinite) {
         gtk_toggle_action_set_active(tact, TRUE);
@@ -3254,6 +3254,10 @@ box3d_resync_toolbar(Inkscape::XML::Node *persp_repr, GObject *data) {
     GtkAction *act = 0;
     GtkToggleAction *tact = 0;
     Persp3D *persp = persp3d_get_from_repr(persp_repr);
+    if (!persp) {
+        // Hmm, is it an error if this happens?
+        return;
+    }
     {
         adj = GTK_ADJUSTMENT(gtk_object_get_data(GTK_OBJECT(tbl), "box3d_angle_x"));
         act = GTK_ACTION(g_object_get_data(G_OBJECT(tbl), "box3d_angle_x_action"));
@@ -3340,7 +3344,7 @@ box3d_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl)
             sp_repr_synthesize_events(persp_repr, &box3d_persp_tb_repr_events, tbl);
         }
 
-        inkscape_active_document()->current_persp3d = persp3d_get_from_repr(persp_repr);
+        inkscape_active_document()->setCurrentPersp3D(persp3d_get_from_repr(persp_repr));
         Inkscape::Preferences *prefs = Inkscape::Preferences::get();
         prefs->setString("/tools/shapes/3dbox/persp", persp_repr->attribute("id"));
 
@@ -3364,7 +3368,6 @@ box3d_angle_value_changed(GtkAdjustment *adj, GObject *dataKludge, Proj::Axis ax
     // in turn, prevent listener from responding
     g_object_set_data(dataKludge, "freeze", GINT_TO_POINTER(TRUE));
 
-    //Persp3D *persp = document->current_persp3d;
     std::list<Persp3D *> sel_persps = sp_desktop_selection(desktop)->perspList();
     if (sel_persps.empty()) {
         // this can happen when the document is created; we silently ignore it
@@ -3372,7 +3375,7 @@ box3d_angle_value_changed(GtkAdjustment *adj, GObject *dataKludge, Proj::Axis ax
     }
     Persp3D *persp = sel_persps.front();
 
-    persp->tmat.set_infinite_direction (axis, adj->value);
+    persp->perspective_impl->tmat.set_infinite_direction (axis, adj->value);
     SP_OBJECT(persp)->updateRepr();
 
     // TODO: use the correct axis here, too
@@ -3435,7 +3438,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     EgeAdjustmentAction* eact = 0;
     SPDocument *document = sp_desktop_document (desktop);
-    Persp3D *persp = document->current_persp3d;
+    Persp3DImpl *persp_impl = document->getCurrentPersp3DImpl();
 
     EgeAdjustmentAction* box3d_angle_x = 0;
     EgeAdjustmentAction* box3d_angle_y = 0;
@@ -3459,7 +3462,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
         box3d_angle_x = eact;
     }
 
-    if (!persp3d_VP_is_finite(persp, Proj::X)) {
+    if (!persp3d_VP_is_finite(persp_impl, Proj::X)) {
         gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
     } else {
         gtk_action_set_sensitive( GTK_ACTION(eact), FALSE );
@@ -3499,7 +3502,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
         box3d_angle_y = eact;
     }
 
-    if (!persp3d_VP_is_finite(persp, Proj::Y)) {
+    if (!persp3d_VP_is_finite(persp_impl, Proj::Y)) {
         gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
     } else {
         gtk_action_set_sensitive( GTK_ACTION(eact), FALSE );
@@ -3538,7 +3541,7 @@ static void box3d_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions,
         box3d_angle_z = eact;
     }
 
-    if (!persp3d_VP_is_finite(persp, Proj::Z)) {
+    if (!persp3d_VP_is_finite(persp_impl, Proj::Z)) {
         gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
     } else {
         gtk_action_set_sensitive( GTK_ACTION(eact), FALSE );
@@ -3988,6 +3991,7 @@ sp_pencil_tb_tolerance_value_changed(GtkAdjustment *adj, GObject *tbl)
     g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
 }
 
+/*
 class PencilToleranceObserver : public Inkscape::Preferences::Observer {
 public:
     PencilToleranceObserver(Glib::ustring const &path, GObject *x) : Observer(path), _obj(x)
@@ -3996,7 +4000,7 @@ public:
     }
     virtual ~PencilToleranceObserver() {
         if (g_object_get_data(_obj, "prefobserver") == this) {
-               g_object_set_data(_obj, "prefobserver", NULL);
+            g_object_set_data(_obj, "prefobserver", NULL);
         }
     }
     virtual void notify(Inkscape::Preferences::Entry const &val) {
@@ -4015,7 +4019,7 @@ public:
 private:
     GObject *_obj;
 };
-
+*/
 
 static void sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
 {
@@ -4040,9 +4044,6 @@ static void sp_pencil_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActio
                                          1, 2);
         ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
-
-        PencilToleranceObserver *obs =
-            new PencilToleranceObserver("/tools/freehand/pencil/tolerance", G_OBJECT(holder));
     }
 
     /* advanced shape options */
@@ -4408,11 +4409,13 @@ static void sp_spray_width_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
     prefs->setDouble( "/tools/spray/width", adj->value );
 }
 
-static void sp_spray_force_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
+/*
+static void sp_spray_force_value_changed( GtkAdjustment * / *adj* /, GObject * / *tbl* / )
 {
     //Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     //prefs->setDouble( "/tools/spray/force", adj->value * 0.01 );
 }
+*/
 
 static void sp_spray_mean_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
 {
@@ -4432,7 +4435,7 @@ static void sp_spray_pressure_state_changed( GtkToggleAction *act, gpointer /*da
     prefs->setBool("/tools/spray/usepressure", gtk_toggle_action_get_active(act));
 }
 
-static void sp_spray_mode_changed( EgeSelectOneAction *act, GObject *tbl )
+static void sp_spray_mode_changed( EgeSelectOneAction *act, GObject */*tbl*/ )
 {
     int mode = ege_select_one_action_get_active( act );
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -4469,15 +4472,15 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
 
     {
         /* Width */
-        gchar const* labels[] = {_("(pinch spray)"), 0, 0, 0, _("(default)"), 0, 0, 0, 0, _("(broad spray)")};
+        gchar const* labels[] = {_("(narrow spray)"), 0, 0, 0, _("(default)"), 0, 0, 0, 0, _("(broad spray)")};
         gdouble values[] = {1, 3, 5, 10, 15, 20, 30, 50, 75, 100};
         EgeAdjustmentAction *eact = create_adjustment_action( "SprayWidthAction",
                                                               _("Width"), _("Width:"), _("The width of the spray area (relative to the visible canvas area)"),
                                                               "/tools/spray/width", 15,
                                                               GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "altx-spray",
-                                                              1, 100, 1.0, 0.0,
+                                                              1, 100, 1.0, 10.0,
                                                               labels, values, G_N_ELEMENTS(labels),
-                                                              sp_spray_width_value_changed,  0.01, 0, 100 );
+                                                              sp_spray_width_value_changed,  1, 0 );
         ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
         gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
@@ -4491,9 +4494,9 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
                                                               _("Mean"), _("Mean:"), _("The mean of the spray action"),
                                                               "/tools/spray/mean", 20,
                                                               GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "spray-mean",
-                                                              1, 100, 1.0, 0.0,
+                                                              1, 100, 1.0, 10.0,
                                                               labels, values, G_N_ELEMENTS(labels),
-                                                              sp_spray_mean_value_changed,  0.01, 0, 100 );
+                                                              sp_spray_mean_value_changed,  1, 0 );
         ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
         gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
@@ -4507,9 +4510,9 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
                                                               _("SD"), _("SD:"), _("The standard deviation of the spray action"),
                                                               "/tools/spray/standard_deviation", 20,
                                                               GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "spray-standard_deviation",
-                                                              1, 100, 1.0, 0.0,
+                                                              1, 100, 1.0, 10.0,
                                                               labels, values, G_N_ELEMENTS(labels),
-                                                              sp_spray_standard_deviation_value_changed,  0.01, 0, 100 );
+                                                              sp_spray_standard_deviation_value_changed,  1, 0 );
         ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
         gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
@@ -4561,7 +4564,7 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
     }
 
     {   /* Population */
-        gchar const* labels[] = {_("(rough, simplified)"), 0, 0, _("(default)"), 0, 0, _("(fine, but many nodes)")};
+        gchar const* labels[] = {_("(low population)"), 0, 0, _("(default)"), 0, 0, _("(high population)")};
         gdouble values[] = {10, 25, 35, 50, 60, 80, 100};
         EgeAdjustmentAction *eact = create_adjustment_action( "SprayPopulationAction",
                                                               _("Population"), _("Population:"),
@@ -4570,7 +4573,7 @@ static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
                                                               GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "spray-population",
                                                               1, 100, 1.0, 10.0,
                                                               labels, values, G_N_ELEMENTS(labels),
-                                                              sp_spray_population_value_changed,  0.01, 0, 100 );
+                                                              sp_spray_population_value_changed,  1, 0 );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
         gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
         g_object_set_data( holder, "spray_population", eact );
@@ -4637,9 +4640,9 @@ static void update_presets_list (GObject *tbl)
                     }
                 }
             }
-       }
+        }
 
-       if (match) {
+        if (match) {
             // newly added item is at the same index as the
             // save command, so we need to change twice for it to take effect
             ege_select_one_action_set_active(sel, 0);
@@ -4768,7 +4771,7 @@ static void sp_dcc_build_presets_list(GObject *tbl)
     int ii=1;
 
     for (std::vector<Glib::ustring>::iterator i = presets.begin(); i != presets.end(); ++i) {
-       GtkTreeIter iter;
+        GtkTreeIter iter;
         Glib::ustring preset_name = prefs->getString(*i + "/name");
         gtk_list_store_append( model, &iter );
         gtk_list_store_set( model, &iter, 0, _(preset_name.data()), 1, ii++, -1 );
@@ -4820,12 +4823,12 @@ static void sp_dcc_save_profile (GtkWidget */*widget*/, GObject *tbl)
 
     int temp_index = 0;
     for (std::vector<Glib::ustring>::iterator i = presets.begin(); i != presets.end(); ++i, ++temp_index) {
-       Glib::ustring name = prefs->getString(*i + "/name");
-       if (!name.empty() && profile_name == name) {
-           new_index = temp_index;
+        Glib::ustring name = prefs->getString(*i + "/name");
+        if (!name.empty() && profile_name == name) {
+            new_index = temp_index;
             save_path = *i;
             break;
-       }
+        }
     }
 
     if (new_index == -1) {
@@ -4937,7 +4940,7 @@ static void sp_calligraphy_toolbox_prep(SPDesktop *desktop, GtkActionGroup* main
                                                               GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "altx-calligraphy",
                                                               1, 100, 1.0, 10.0,
                                                               labels, values, G_N_ELEMENTS(labels),
-                                                              sp_ddc_width_value_changed,  1, 0);
+                                                              sp_ddc_width_value_changed,  1, 0 );
         ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT );
         gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
         gtk_action_set_sensitive( GTK_ACTION(eact), TRUE );
@@ -6063,9 +6066,9 @@ sp_text_toolbox_selection_changed (Inkscape::Selection */*selection*/, GObject *
     if (result_family == QUERY_STYLE_NOTHING || result_style == QUERY_STYLE_NOTHING || result_numbers == QUERY_STYLE_NOTHING) {
         // there are no texts in selection, read from prefs
 
-           sp_style_read_from_prefs(query, "/tools/text");
+        sp_style_read_from_prefs(query, "/tools/text");
 
-           if (g_object_get_data(tbl, "text_style_from_prefs")) {
+        if (g_object_get_data(tbl, "text_style_from_prefs")) {
             // do not reset the toolbar style from prefs if we already did it last time
             sp_style_unref(query);
             g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
@@ -6216,7 +6219,7 @@ sp_text_toolbox_selection_modified (Inkscape::Selection *selection, guint /*flag
 }
 
 void
-sp_text_toolbox_subselection_changed (gpointer /*dragger*/, GObject *tbl)
+sp_text_toolbox_subselection_changed (gpointer /*tc*/, GObject *tbl)
 {
     sp_text_toolbox_selection_changed (NULL, tbl);
 }
@@ -6342,8 +6345,85 @@ sp_text_toolbox_anchoring_toggled (GtkRadioButton   *button,
     int prop = GPOINTER_TO_INT(data);
 
     SPDesktop *desktop = SP_ACTIVE_DESKTOP;
-    SPCSSAttr *css = sp_repr_css_attr_new ();
 
+    // move the x of all texts to preserve the same bbox
+    Inkscape::Selection *selection = sp_desktop_selection(desktop);
+    for (GSList const *items = selection->itemList(); items != NULL; items = items->next) {
+        if (SP_IS_TEXT((SPItem *) items->data)) {
+            SPItem *item = SP_ITEM(items->data);
+
+            unsigned writing_mode = SP_OBJECT_STYLE(item)->writing_mode.value;
+            // below, variable names suggest horizontal move, but we check the writing direction
+            // and move in the corresponding axis
+            int axis;
+            if (writing_mode == SP_CSS_WRITING_MODE_LR_TB || writing_mode == SP_CSS_WRITING_MODE_RL_TB) {
+                axis = NR::X;
+            } else {
+                axis = NR::Y;
+            }
+
+            Geom::OptRect bbox
+                  = item->getBounds(Geom::identity(), SPItem::GEOMETRIC_BBOX);
+            if (!bbox)
+                continue;
+            double width = bbox->dimensions()[axis];
+            // If you want to align within some frame, other than the text's own bbox, calculate
+            // the left and right (or top and bottom for tb text) slacks of the text inside that
+            // frame (currently unused)
+            double left_slack = 0;
+            double right_slack = 0;
+            unsigned old_align = SP_OBJECT_STYLE(item)->text_align.value;
+            double move = 0;
+            if (old_align == SP_CSS_TEXT_ALIGN_START || old_align == SP_CSS_TEXT_ALIGN_LEFT) {
+                switch (prop) {
+                    case 0:
+                        move = -left_slack;
+                        break;
+                    case 1:
+                        move = width/2 + (right_slack - left_slack)/2;
+                        break;
+                    case 2:
+                        move = width + right_slack;
+                        break;
+                }
+            } else if (old_align == SP_CSS_TEXT_ALIGN_CENTER) {
+                switch (prop) {
+                    case 0:
+                        move = -width/2 - left_slack;
+                        break;
+                    case 1:
+                        move = (right_slack - left_slack)/2;
+                        break;
+                    case 2:
+                        move = width/2 + right_slack;
+                        break;
+                }
+            } else if (old_align == SP_CSS_TEXT_ALIGN_END || old_align == SP_CSS_TEXT_ALIGN_RIGHT) {
+                switch (prop) {
+                    case 0:
+                        move = -width - left_slack;
+                        break;
+                    case 1:
+                        move = -width/2 + (right_slack - left_slack)/2;
+                        break;
+                    case 2:
+                        move = right_slack;
+                        break;
+                }
+            }
+            Geom::Point XY = SP_TEXT(item)->attributes.firstXY();
+            if (axis == NR::X) {
+                XY = XY + Geom::Point (move, 0);
+            } else {
+                XY = XY + Geom::Point (0, move);
+            }
+            SP_TEXT(item)->attributes.setFirstXY(XY);
+            SP_OBJECT(item)->updateRepr();
+            SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+        }
+    }
+
+    SPCSSAttr *css = sp_repr_css_attr_new ();
     switch (prop)
     {
         case 0:
@@ -6382,8 +6462,8 @@ sp_text_toolbox_anchoring_toggled (GtkRadioButton   *button,
     // If querying returned nothing, read the style from the text tool prefs (default style for new texts)
     if (result_numbers == QUERY_STYLE_NOTHING)
     {
-       Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-       prefs->mergeStyle("/tools/text/style", css);
+        Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+        prefs->mergeStyle("/tools/text/style", css);
     }
 
     sp_style_unref(query);
@@ -6486,8 +6566,8 @@ sp_text_toolbox_style_toggled (GtkToggleButton  *button,
     // If querying returned nothing, read the style from the text tool prefs (default style for new texts)
     if (result_fontspec == QUERY_STYLE_NOTHING)
     {
-       Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-       prefs->mergeStyle("/tools/text/style", css);
+        Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+        prefs->mergeStyle("/tools/text/style", css);
     }
 
     sp_style_unref(query);
@@ -6536,7 +6616,7 @@ sp_text_toolbox_orientation_toggled (GtkRadioButton  *button,
     if (result_numbers == QUERY_STYLE_NOTHING)
     {
         Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-       prefs->mergeStyle("/tools/text/style", css);
+        prefs->mergeStyle("/tools/text/style", css);
     }
 
     sp_desktop_set_style (desktop, css, true, true);
@@ -6571,7 +6651,7 @@ sp_text_toolbox_family_keypress (GtkWidget */*w*/, GdkEventKey *event, GObject *
 }
 
 gboolean
-sp_text_toolbox_family_list_keypress (GtkWidget *w, GdkEventKey *event, GObject */*tbl*/)
+sp_text_toolbox_family_list_keypress (GtkWidget */*w*/, GdkEventKey *event, GObject */*tbl*/)
 {
     SPDesktop *desktop = SP_ACTIVE_DESKTOP;
     if (!desktop) return FALSE;
@@ -6648,7 +6728,7 @@ sp_text_toolbox_size_changed  (GtkComboBox *cbox,
     if (result_numbers == QUERY_STYLE_NOTHING)
     {
         Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-       prefs->mergeStyle("/tools/text/style", css);
+        prefs->mergeStyle("/tools/text/style", css);
     }
 
     sp_style_unref(query);
@@ -6759,14 +6839,14 @@ cell_data_func  (GtkCellLayout */*cell_layout*/,
     g_free(family_escaped);
 }
 
-gboolean            text_toolbox_completion_match_selected    (GtkEntryCompletion *widget,
-                                                        GtkTreeModel       *model,
-                                                        GtkTreeIter        *iter,
-                                                        GObject *tbl)
+gboolean text_toolbox_completion_match_selected(GtkEntryCompletion */*widget*/,
+                                                GtkTreeModel       *model,
+                                                GtkTreeIter        *iter,
+                                                GObject            *tbl)
 {
     // We intercept this signal so as to fire family_changed at once (without it, you'd have to
     // press Enter again after choosing a completion)
-    gchar *family;
+    gchar *family = 0;
     gtk_tree_model_get(model, iter, 0, &family, -1);
 
     GtkEntry *entry = GTK_ENTRY (g_object_get_data (G_OBJECT (tbl), "family-entry"));
@@ -6799,9 +6879,9 @@ cbe_add_completion (GtkComboBoxEntry *cbe, GObject *tbl){
     g_object_unref(completion);
 }
 
-void        sp_text_toolbox_family_popnotify          (GtkComboBox *widget,
-                                                       void *property,
-                                                        GObject *tbl)
+void sp_text_toolbox_family_popnotify(GtkComboBox *widget,
+                                      void */*property*/,
+                                      GObject *tbl)
 {
   // while the drop-down is open, we disable font family changing, reenabling it only when it closes
 
@@ -7109,7 +7189,7 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl
     {
         return;
     }
-    
+
 
     // quit if run by the _changed callbacks
     if (g_object_get_data( tbl, "freeze" )) {
@@ -7160,7 +7240,7 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
     {
         return;
     }
-    
+
 
     // quit if run by the _changed callbacks
     if (g_object_get_data( tbl, "freeze" )) {
@@ -7280,7 +7360,7 @@ static void sp_nooverlaps_graph_layout_toggled( GtkToggleAction* act, GtkObject
 }
 
 
-static void connector_length_changed(GtkAdjustment *adj, GObject* tbl)
+static void connector_length_changed(GtkAdjustment *adj, GObject* /*tbl*/)
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     prefs->setDouble("/tools/connector/length", adj->value);
@@ -7495,9 +7575,9 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
         g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_connector_new_connection_point), holder );
         gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
     }
-    
+
     // Remove selected connection point button
-    
+
     {
         InkAction* inky = ink_action_new( "ConnectorRemoveConnPointAction",
                                           _("Remove connection point"),
@@ -7507,7 +7587,7 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
         g_signal_connect_after( G_OBJECT(inky), "activate", G_CALLBACK(sp_connector_remove_connection_point), holder );
         gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
     }
-    
+
 
     // Code to watch for changes to the connector-spacing attribute in
     // the XML.