summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2009-12-21 16:37:12 +0000
committerTed Gould <ted@gould.cx>2009-12-21 16:37:12 +0000
commit752a8f90d3442cdaa4689ba6de4b911ca4fda514 (patch)
tree5e0739ec9bd2ac9cbdd2a2343859f89e02dae181
parentMerging in from trunk (diff)
parentUpdating the READMEs to better handle OSX. (diff)
downloadinkscape-752a8f90d3442cdaa4689ba6de4b911ca4fda514.tar.gz
inkscape-752a8f90d3442cdaa4689ba6de4b911ca4fda514.zip
Updating to current trunk
(bzr r8254.1.38)
-rw-r--r--.bzrignore127
-rw-r--r--AUTHORS7
-rw-r--r--CMakeLists.txt2
-rw-r--r--INSTALL3
-rw-r--r--Makefile.am4
-rw-r--r--NEWS2
-rw-r--r--README7
-rw-r--r--README.osx15
-rw-r--r--build-lx.xml2
-rw-r--r--build.xml22
-rw-r--r--configure.ac12
-rw-r--r--packaging/win32/inkscape.nsi15
-rw-r--r--po/POTFILES.in3
-rw-r--r--po/POTFILES.skip2
-rw-r--r--po/de.po5531
-rw-r--r--po/fr.po3661
-rw-r--r--po/inkscape.pot3151
-rw-r--r--po/nl.po39
-rw-r--r--po/ru.po3656
-rwxr-xr-x[-rw-r--r--]po/sk.po3191
-rw-r--r--share/extensions/Barcode/EAN13.py10
-rw-r--r--share/extensions/Barcode/UPCA.py4
-rw-r--r--share/extensions/Barcode/UPCE.py4
-rw-r--r--share/extensions/embedimage.py7
-rwxr-xr-xshare/extensions/gimp_xcf.py14
-rwxr-xr-xshare/extensions/inkex.py5
-rw-r--r--share/extensions/measure.py23
-rw-r--r--share/extensions/render_alphabetsoup.py924
-rwxr-xr-xshare/extensions/scour.inkscape.py53
-rw-r--r--share/extensions/scour.inx29
-rw-r--r--share/icons/Makefile.am7
-rw-r--r--share/icons/application/16x16/Makefile.am5
-rw-r--r--share/icons/application/16x16/inkscape.pngbin0 -> 989 bytes
-rw-r--r--share/icons/application/22x22/Makefile.am5
-rw-r--r--share/icons/application/22x22/inkscape.pngbin0 -> 1452 bytes
-rw-r--r--share/icons/application/24x24/Makefile.am5
-rw-r--r--share/icons/application/24x24/inkscape.pngbin0 -> 1473 bytes
-rw-r--r--share/icons/application/256x256/Makefile.am5
-rw-r--r--share/icons/application/256x256/inkscape.pngbin0 -> 40270 bytes
-rw-r--r--share/icons/application/32x32/Makefile.am5
-rw-r--r--share/icons/application/32x32/inkscape.pngbin0 -> 2155 bytes
-rw-r--r--share/icons/application/48x48/Makefile.am5
-rw-r--r--share/icons/application/48x48/inkscape.pngbin0 -> 3818 bytes
-rw-r--r--share/icons/application/Makefile.am15
-rw-r--r--share/icons/color-management-icon.pngbin0 -> 2720 bytes
-rw-r--r--share/icons/icons.svg1086
-rw-r--r--share/icons/out-of-gamut-icon.pngbin0 -> 1016 bytes
-rw-r--r--share/icons/out-of-gamut-icon.svg22
-rw-r--r--share/icons/too-much-ink-icon.pngbin0 -> 655 bytes
-rw-r--r--share/icons/too-much-ink-icon.svg70
-rw-r--r--src/2geom/path-intersection.cpp126
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/Makefile.am2
-rw-r--r--src/Makefile_insert3
-rw-r--r--src/attributes.cpp2
-rw-r--r--src/attributes.h2
-rw-r--r--src/bind/javabind.cpp6
-rw-r--r--src/color-profile.cpp52
-rw-r--r--src/color-profile.h6
-rw-r--r--src/color.cpp59
-rw-r--r--src/color.h2
-rw-r--r--src/conn-avoid-ref.cpp425
-rw-r--r--src/conn-avoid-ref.h16
-rw-r--r--src/connection-points.cpp37
-rw-r--r--src/connection-points.h70
-rw-r--r--src/connector-context.cpp1188
-rw-r--r--src/connector-context.h30
-rw-r--r--src/desktop-style.cpp28
-rw-r--r--src/desktop.cpp3
-rw-r--r--src/desktop.h3
-rw-r--r--src/display/nr-arena-glyphs.cpp9
-rw-r--r--src/display/nr-arena-item.cpp4
-rw-r--r--src/display/nr-arena-shape.cpp37
-rw-r--r--src/display/nr-arena.cpp24
-rw-r--r--src/display/nr-arena.h2
-rw-r--r--src/display/nr-filter-colormatrix.cpp2
-rw-r--r--src/display/nr-filter-colormatrix.h2
-rw-r--r--src/display/nr-filter-component-transfer.cpp2
-rw-r--r--src/display/nr-filter-component-transfer.h2
-rw-r--r--src/display/nr-filter-convolve-matrix.cpp4
-rw-r--r--src/display/nr-filter-convolve-matrix.h2
-rw-r--r--src/display/nr-filter-displacement-map.cpp2
-rw-r--r--src/display/nr-filter-displacement-map.h2
-rw-r--r--src/display/nr-filter-flood.cpp29
-rw-r--r--src/display/nr-filter-flood.h5
-rw-r--r--src/display/nr-filter-image.cpp2
-rw-r--r--src/display/nr-filter-morphology.cpp2
-rw-r--r--src/display/nr-filter-morphology.h2
-rw-r--r--src/display/nr-filter-tile.cpp2
-rw-r--r--src/display/nr-filter-tile.h2
-rw-r--r--src/display/nr-filter-turbulence.cpp2
-rw-r--r--src/display/nr-filter-turbulence.h2
-rw-r--r--src/display/nr-svgfonts.cpp2
-rw-r--r--src/display/nr-svgfonts.h2
-rw-r--r--src/display/rendermode.h3
-rw-r--r--src/document.cpp98
-rw-r--r--src/document.h3
-rw-r--r--src/dom/ucd.cpp9
-rw-r--r--src/dom/util/ziptool.cpp1
-rw-r--r--src/dropper-context.cpp10
-rw-r--r--src/extension/dxf2svg/entities2elements.cpp4
-rw-r--r--src/extension/internal/cairo-ps-out.cpp24
-rw-r--r--src/extension/internal/cairo-render-context.h4
-rw-r--r--src/extension/internal/emf-win32-inout.cpp1
-rw-r--r--src/extension/internal/odf.cpp4
-rw-r--r--src/extension/internal/pdfinput/pdf-input.cpp1
-rw-r--r--src/extension/internal/pdfinput/svg-builder.cpp4
-rw-r--r--src/filters/colormatrix.cpp2
-rw-r--r--src/filters/componenttransfer-funcnode.cpp2
-rw-r--r--src/filters/componenttransfer-funcnode.h2
-rw-r--r--src/filters/convolvematrix.cpp2
-rw-r--r--src/filters/convolvematrix.h2
-rw-r--r--src/filters/flood.cpp25
-rw-r--r--src/filters/flood.h2
-rw-r--r--src/filters/image.cpp32
-rw-r--r--src/filters/image.h2
-rw-r--r--src/filters/morphology.cpp2
-rw-r--r--src/filters/turbulence.cpp2
-rw-r--r--src/filters/turbulence.h2
-rw-r--r--src/graphlayout/graphlayout.cpp1
-rw-r--r--src/helper-fns.h2
-rw-r--r--src/inkjar/jar.cpp8
-rw-r--r--src/inkscape.rc10
-rw-r--r--src/inkview.rc10
-rw-r--r--src/interface.cpp5
-rw-r--r--src/libavoid/CMakeLists.txt2
-rw-r--r--src/libavoid/Makefile_insert14
-rw-r--r--src/libavoid/assertions.h49
-rw-r--r--src/libavoid/connector.cpp1695
-rw-r--r--src/libavoid/connector.h380
-rw-r--r--src/libavoid/debug.h19
-rw-r--r--src/libavoid/geometry.cpp241
-rw-r--r--src/libavoid/geometry.h47
-rw-r--r--src/libavoid/geomtypes.cpp548
-rw-r--r--src/libavoid/geomtypes.h284
-rw-r--r--src/libavoid/graph.cpp379
-rw-r--r--src/libavoid/graph.h37
-rw-r--r--src/libavoid/libavoid.h25
-rw-r--r--src/libavoid/makefile17
-rw-r--r--src/libavoid/makepath.cpp899
-rw-r--r--src/libavoid/makepath.h17
-rw-r--r--src/libavoid/orthogonal.cpp2354
-rw-r--r--src/libavoid/orthogonal.h39
-rw-r--r--src/libavoid/polyutil.cpp92
-rw-r--r--src/libavoid/polyutil.h41
-rw-r--r--src/libavoid/region.cpp858
-rw-r--r--src/libavoid/region.h81
-rw-r--r--src/libavoid/router.cpp1547
-rw-r--r--src/libavoid/router.h331
-rw-r--r--src/libavoid/shape.cpp112
-rw-r--r--src/libavoid/shape.h77
-rw-r--r--src/libavoid/static.cpp105
-rw-r--r--src/libavoid/static.h42
-rw-r--r--src/libavoid/timer.cpp53
-rw-r--r--src/libavoid/timer.h47
-rw-r--r--src/libavoid/vertices.cpp212
-rw-r--r--src/libavoid/vertices.h59
-rw-r--r--src/libavoid/viscluster.cpp96
-rw-r--r--src/libavoid/viscluster.h67
-rw-r--r--src/libavoid/visibility.cpp579
-rw-r--r--src/libavoid/visibility.h21
-rw-r--r--src/libavoid/vpsc.cpp1301
-rw-r--r--src/libavoid/vpsc.h255
-rw-r--r--src/libcroco/cr-cascade.c1
-rw-r--r--src/libnr/Makefile_insert1
-rw-r--r--src/libnr/nr-compose-transform.cpp59
-rw-r--r--src/libnr/nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM.S414
-rw-r--r--src/libnrtype/Layout-TNG-Input.cpp69
-rw-r--r--src/libnrtype/Layout-TNG-OutIter.cpp29
-rw-r--r--src/libnrtype/Layout-TNG.h6
-rw-r--r--src/libvpsc/pairingheap/.dirstamp0
-rw-r--r--src/live_effects/lpe-extrude.cpp1
-rw-r--r--src/live_effects/lpe-recursiveskeleton.cpp8
-rw-r--r--src/live_effects/lpe-rough-hatches.cpp46
-rw-r--r--src/live_effects/lpe-ruler.cpp2
-rw-r--r--src/live_effects/parameter/parameter.cpp4
-rw-r--r--src/main.cpp8
-rw-r--r--src/marker-test.h39
-rw-r--r--src/menus-skeleton.h5
-rw-r--r--src/pixmaps/cursor-spray-move.xpm38
-rw-r--r--src/pixmaps/cursor-spray.xpm38
-rw-r--r--src/preferences-skeleton.h3
-rw-r--r--src/print.cpp1
-rw-r--r--src/selcue.cpp26
-rw-r--r--src/sp-conn-end-pair.cpp248
-rw-r--r--src/sp-conn-end-pair.h22
-rw-r--r--src/sp-conn-end.cpp331
-rw-r--r--src/sp-conn-end.h18
-rw-r--r--src/sp-flowtext.cpp10
-rw-r--r--src/sp-font-face.cpp2
-rw-r--r--src/sp-font-face.h2
-rw-r--r--src/sp-font.cpp2
-rw-r--r--src/sp-font.h2
-rw-r--r--src/sp-glyph-kerning.cpp2
-rw-r--r--src/sp-glyph-kerning.h2
-rw-r--r--src/sp-glyph.cpp2
-rw-r--r--src/sp-glyph.h2
-rw-r--r--src/sp-image.cpp9
-rw-r--r--src/sp-item.cpp4
-rw-r--r--src/sp-marker-loc.h2
-rw-r--r--src/sp-missing-glyph.cpp2
-rw-r--r--src/sp-missing-glyph.h2
-rw-r--r--src/sp-namedview.cpp1
-rw-r--r--src/sp-path.cpp1
-rw-r--r--src/sp-script.cpp2
-rw-r--r--src/sp-script.h2
-rw-r--r--src/sp-text.cpp22
-rw-r--r--src/spray-context.cpp1208
-rw-r--r--src/spray-context.h125
-rw-r--r--src/style.cpp12
-rw-r--r--src/svg/stringstream.cpp25
-rw-r--r--src/svg/stringstream.h7
-rw-r--r--src/svg/svg-color.cpp161
-rw-r--r--src/svg/svg-color.h6
-rw-r--r--src/svg/svg-device-color.h26
-rw-r--r--src/svg/svg-length.cpp1
-rw-r--r--src/text-context.cpp25
-rw-r--r--src/text-editing.cpp31
-rw-r--r--src/text-editing.h4
-rw-r--r--src/tools-switch.cpp8
-rw-r--r--src/tools-switch.h1
-rw-r--r--src/ui/dialog/Makefile_insert4
-rw-r--r--src/ui/dialog/align-and-distribute.cpp2
-rw-r--r--src/ui/dialog/dialog-manager.cpp9
-rw-r--r--src/ui/dialog/document-properties.cpp3
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp2
-rw-r--r--src/ui/dialog/inkscape-preferences.cpp22
-rw-r--r--src/ui/dialog/inkscape-preferences.h4
-rw-r--r--src/ui/dialog/print-colors-preview-dialog.cpp100
-rw-r--r--src/ui/dialog/print-colors-preview-dialog.h48
-rw-r--r--src/ui/dialog/print.cpp14
-rw-r--r--src/ui/dialog/spray-option.cpp397
-rw-r--r--src/ui/dialog/spray-option.h145
-rw-r--r--src/ui/dialog/svg-fonts-dialog.cpp2
-rw-r--r--src/ui/dialog/svg-fonts-dialog.h2
-rw-r--r--src/ui/dialog/swatches.cpp2
-rw-r--r--src/ui/icon-names.h18
-rw-r--r--src/ui/view/edit-widget.cpp6
-rw-r--r--src/ui/view/edit-widget.h1
-rw-r--r--src/ui/widget/page-sizer.cpp20
-rw-r--r--src/ui/widget/spin-slider.cpp2
-rw-r--r--src/verbs.cpp26
-rw-r--r--src/verbs.h5
-rw-r--r--src/widgets/desktop-widget.cpp8
-rw-r--r--src/widgets/icon.cpp2
-rw-r--r--src/widgets/ruler.cpp1
-rw-r--r--src/widgets/sp-color-icc-selector.cpp6
-rw-r--r--src/widgets/sp-color-notebook.cpp74
-rw-r--r--src/widgets/sp-color-notebook.h3
-rw-r--r--src/widgets/sp-color-scales.cpp31
-rw-r--r--src/widgets/sp-color-wheel-selector.cpp15
-rw-r--r--src/widgets/toolbox.cpp496
252 files changed, 27415 insertions, 14448 deletions
diff --git a/.bzrignore b/.bzrignore
index d91367581..4202b334d 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -1,39 +1,132 @@
+./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/AUTHORS b/AUTHORS
index fcea87043..d498ff98a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,5 +1,6 @@
Maximilian Albert
Josh Andler
+Pierre Barbry-Blot
Jean-François Barraud
Bill Baxter
John Bintz
@@ -17,6 +18,7 @@ Marcus Brubaker
Luca Bruno
Nicu Buculei
Bulia Byak
+Pierre Caclin
Ian Caldwell
Gail Carmichael
Ed Catmur
@@ -76,11 +78,15 @@ Jason Kivlighn
Adrian Knoth
Krzysztof Kosiński
Petr Kovar
+Benoît Lavorata
+Julien Leray
Raph Levien
Diederik van Lierop
Nicklas Lindgren
Vitaly Lipatov
Ivan Louette
+Pierre-Antoine Marc
+Aurel-Aimé Marmion
Colin Marquardt
Dmitry G. Mastrukov
Matiphas
@@ -88,6 +94,7 @@ Michael Meeks
Federico Mena
MenTaLguY
Aubanel Monnier
+Vincent Montagne
Tim Mooney
Derek P. Moore
Peter Moulder
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1b8053a02..c92c1e25d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
PROJECT(inkscape)
-SET(INKSCAPE_VERSION 0.46+devel)
+SET(INKSCAPE_VERSION 0.47+devel)
SET(PROJECT_NAME inkscape)
CMAKE_MINIMUM_REQUIRED(VERSION 2.4.6)
SET(CMAKE_INCLUDE_CURRENT_DIR TRUE)
diff --git a/INSTALL b/INSTALL
index e7d5dad63..00618d801 100644
--- 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
diff --git a/Makefile.am b/Makefile.am
index 2d3b8f004..f07cf6979 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -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)
@@ -185,7 +182,6 @@ EXTRA_DIST = \
packaging/win32/welcomefinish.bmp \
packaging/win32/welcomefinish.svg \
packaging/win32/portable/help.html \
- packaging/win32/portable/portable.7z \
packaging/win32/portable/readme.packaging.txt \
packaging/win32/portable/App/readme.txt \
packaging/win32/portable/App/AppInfo/appicon.ico \
diff --git a/NEWS b/NEWS
index e919c7486..043d2c10f 100644
--- a/NEWS
+++ b/NEWS
@@ -1 +1 @@
-Inkscape 0.47 pre-release. More here later.
+Inkscape 0.48 pre-release. More here later.
diff --git a/README b/README
index 8a7922c42..fde400105 100644
--- 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
index 000000000..5013bbb62
--- /dev/null
+++ b/README.osx
@@ -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.
+
diff --git a/build-lx.xml b/build-lx.xml
index 5f33638eb..8841fe3a9 100644
--- a/build-lx.xml
+++ b/build-lx.xml
@@ -39,7 +39,7 @@
</description>
<!-- set global properties for this build -->
- <property name="version" value="0.46+devel"/>
+ <property name="version" value="0.47+devel"/>
<property name="src" location="src"/>
<property name="lib" location="lib"/>
<property name="build" location="build"/>
diff --git a/build.xml b/build.xml
index 16443dfc2..99e221e64 100644
--- a/build.xml
+++ b/build.xml
@@ -31,18 +31,18 @@
## 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 -->
- <property name="version" value="0.46+devel"/>
+ <property name="version" value="0.47+devel"/>
<property name="src" location="src"/>
<property name="lib" location="lib"/>
<property name="build" location="build"/>
@@ -101,10 +101,15 @@
<copy file="${src}/helper/sp-marshal.cpp.mingw"
tofile="${src}/helper/sp-marshal.cpp"/>
- <makefile file="${src}/inkscape-version.cpp">
+ <!--makefile file="${src}/inkscape-version.cpp">
namespace Inkscape {
char const *version_string = "${version} ${svn.revision}";
}
+ </makefile-->
+ <makefile file="${src}/inkscape-version.cpp">
+ namespace Inkscape {
+ char const *version_string = "${version}";
+ }
</makefile>
<makefile file="config.h">
#ifndef _CONFIG_H_
@@ -183,7 +188,7 @@
#define ENABLE_SVG_FONTS 1
/* Do we want experimental, unsupported, unguaranteed, etc., LivePathEffects enabled? */
- // #define LPE_ENABLE_TEST_EFFECTS 1
+ #define LPE_ENABLE_TEST_EFFECTS 1
#define HAVE_ASPELL 1
@@ -207,6 +212,7 @@
<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"/>
@@ -471,7 +477,7 @@
stripcommand="${archutil}strip"
objcopycommand="${archutil}objcopy">
<flags>
- -mwindows
+ -mconsole
-mthreads
</flags>
<fileset dir="${build}">
@@ -528,7 +534,7 @@
stripcommand="${archutil}strip"
objcopycommand="${archutil}objcopy">
<flags>
- -mwindows
+ -mconsole
-mthreads
</flags>
<fileset dir="${build}">
diff --git a/configure.ac b/configure.ac
index 5e7c9aa31..4db84a1d3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -7,7 +7,7 @@ AC_PREREQ(2.53)
# `dpkg --compare-versions'. (ii) We don't always know what the next
# version is going to be called until about the time we release it
# (whereas we always know what the previous version was called).
-AC_INIT(inkscape, 0.46+devel)
+AC_INIT(inkscape, 0.47+devel)
AC_CANONICAL_HOST
AC_CONFIG_SRCDIR([src/main.cpp])
@@ -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
@@ -981,6 +984,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
diff --git a/packaging/win32/inkscape.nsi b/packaging/win32/inkscape.nsi
index 9b840f550..651ba3cb2 100644
--- a/packaging/win32/inkscape.nsi
+++ b/packaging/win32/inkscape.nsi
@@ -7,8 +7,9 @@
; DEFINES
; #######################################
!define PRODUCT_NAME "Inkscape"
-!define PRODUCT_VERSION "0.46+devel"
-!define PRODUCT_REVISION 1
+!define PRODUCT_VERSION "0.47+devel"
+!define PRODUCT_REVISION 3
+!define PRODUCT_VERSION_4 "0.47.0.3"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
;!define DUMMYINSTALL ; Define this to make it build quickly, not including any of the files or code in the sections, for quick testing of features of the installer and development thereof.
@@ -128,6 +129,16 @@ OutFile "Inkscape-${PRODUCT_VERSION}-${PRODUCT_REVISION}.exe"
InstallDir "$PROGRAMFILES\Inkscape"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
+VIProductVersion "${PRODUCT_VERSION_4}"
+VIAddVersionKey ProductName "${PRODUCT_NAME}"
+VIAddVersionKey Comments "Licensed under the GNU GPL"
+VIAddVersionKey CompanyName "inkscape.org"
+VIAddVersionKey LegalCopyright "© 2009 Inkscape"
+VIAddVersionKey FileDescription "${PRODUCT_NAME}"
+VIAddVersionKey FileVersion "${PRODUCT_VERSION_4}"
+VIAddVersionKey ProductVersion "${PRODUCT_VERSION_4}"
+VIAddVersionKey InternalName "${PRODUCT_NAME}"
+
Var askMultiUser
Var filename
Var MultiUser
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 395a4a988..a619ccfa1 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -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
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index 1aaf436dc..172578154 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -20,10 +20,12 @@ src/live_effects/lpe-path_length.cpp
src/live_effects/lpe-perp_bisector.cpp
src/live_effects/lpe-perspective_path.cpp
src/live_effects/lpe-recursiveskeleton.cpp
+src/live_effects/lpe-skeleton.cpp
src/live_effects/lpe-tangent_to_curve.cpp
src/live_effects/lpe-test-doEffect-stack.cpp
src/live_effects/lpe-text_label.cpp
src/lpe-tool-context.cpp
+src/ui/dialog/session-player.cpp
src/ui/dialog/whiteboard-connect.cpp
src/ui/dialog/whiteboard-sharewithchat.cpp
src/ui/dialog/whiteboard-sharewithuser.cpp
diff --git a/po/de.po b/po/de.po
index 2f3cd1f5e..ae0fcfdc9 100644
--- a/po/de.po
+++ b/po/de.po
@@ -18,7 +18,7 @@ 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-11-02 01:21+0100\n"
+"PO-Revision-Date: 2009-11-18 21:28+0100\n"
"Last-Translator: Uwe Schoeler <uschoeler@yahoo.de>\n"
"Language-Team: <de@li.org>\n"
"MIME-Version: 1.0\n"
@@ -50,11 +50,16 @@ msgstr "Vektorgrafik-Editor"
msgid "Matte jelly"
msgstr "Mattes Gelee"
-#: ../share/filters/filters.svg.h:2 ../share/filters/filters.svg.h:10
-#: ../share/filters/filters.svg.h:107 ../share/filters/filters.svg.h:109
-#: ../share/filters/filters.svg.h:115 ../share/filters/filters.svg.h:116
-#: ../share/filters/filters.svg.h:118 ../share/filters/filters.svg.h:122
-#: ../share/filters/filters.svg.h:167 ../share/filters/filters.svg.h:206
+#: ../share/filters/filters.svg.h:2
+#: ../share/filters/filters.svg.h:10
+#: ../share/filters/filters.svg.h:107
+#: ../share/filters/filters.svg.h:109
+#: ../share/filters/filters.svg.h:115
+#: ../share/filters/filters.svg.h:116
+#: ../share/filters/filters.svg.h:118
+#: ../share/filters/filters.svg.h:122
+#: ../share/filters/filters.svg.h:167
+#: ../share/filters/filters.svg.h:206
msgid "ABCs"
msgstr "ABCs"
@@ -66,17 +71,28 @@ msgstr "Aufgewölbte, matte Gelee-Abdeckung"
msgid "Smart jelly"
msgstr "schmuckes Gelee"
-#: ../share/filters/filters.svg.h:3 ../share/filters/filters.svg.h:4
-#: ../share/filters/filters.svg.h:9 ../share/filters/filters.svg.h:14
-#: ../share/filters/filters.svg.h:15 ../share/filters/filters.svg.h:39
-#: ../share/filters/filters.svg.h:48 ../share/filters/filters.svg.h:49
-#: ../share/filters/filters.svg.h:50 ../share/filters/filters.svg.h:51
-#: ../share/filters/filters.svg.h:54 ../share/filters/filters.svg.h:56
-#: ../share/filters/filters.svg.h:69 ../share/filters/filters.svg.h:71
-#: ../share/filters/filters.svg.h:89 ../share/filters/filters.svg.h:101
-#: ../share/filters/filters.svg.h:102 ../share/filters/filters.svg.h:207
-#: ../share/filters/filters.svg.h:208 ../share/filters/filters.svg.h:209
-#: ../share/filters/filters.svg.h:210 ../share/filters/filters.svg.h:211
+#: ../share/filters/filters.svg.h:3
+#: ../share/filters/filters.svg.h:4
+#: ../share/filters/filters.svg.h:9
+#: ../share/filters/filters.svg.h:14
+#: ../share/filters/filters.svg.h:15
+#: ../share/filters/filters.svg.h:39
+#: ../share/filters/filters.svg.h:48
+#: ../share/filters/filters.svg.h:49
+#: ../share/filters/filters.svg.h:50
+#: ../share/filters/filters.svg.h:51
+#: ../share/filters/filters.svg.h:54
+#: ../share/filters/filters.svg.h:56
+#: ../share/filters/filters.svg.h:69
+#: ../share/filters/filters.svg.h:71
+#: ../share/filters/filters.svg.h:89
+#: ../share/filters/filters.svg.h:101
+#: ../share/filters/filters.svg.h:102
+#: ../share/filters/filters.svg.h:207
+#: ../share/filters/filters.svg.h:208
+#: ../share/filters/filters.svg.h:209
+#: ../share/filters/filters.svg.h:210
+#: ../share/filters/filters.svg.h:211
msgid "Bevels"
msgstr "Wölbung"
@@ -96,32 +112,28 @@ msgstr "Glatte abgerundete Aufwölbung mit metallischer Oberfläche"
msgid "Motion blur, horizontal"
msgstr "Horizontale Bewegungsunschärfe"
-#: ../share/filters/filters.svg.h:5 ../share/filters/filters.svg.h:6
-#: ../share/filters/filters.svg.h:7 ../share/filters/filters.svg.h:57
-#: ../share/filters/filters.svg.h:94 ../share/filters/filters.svg.h:108
-#: ../share/filters/filters.svg.h:111 ../share/filters/filters.svg.h:159
+#: ../share/filters/filters.svg.h:5
+#: ../share/filters/filters.svg.h:6
+#: ../share/filters/filters.svg.h:7
+#: ../share/filters/filters.svg.h:57
+#: ../share/filters/filters.svg.h:94
+#: ../share/filters/filters.svg.h:108
+#: ../share/filters/filters.svg.h:111
+#: ../share/filters/filters.svg.h:159
msgid "Blurs"
msgstr "Unschärfe"
#: ../share/filters/filters.svg.h:5
-msgid ""
-"Blur as if the object flies horizontally; adjust Standard Deviation to vary "
-"force"
-msgstr ""
-"Verwischen wie bei schneller horizontaler Bewegung; Stärke mit "
-"Standardabweichung festlegen"
+msgid "Blur as if the object flies horizontally; adjust Standard Deviation to vary force"
+msgstr "Verwischen wie bei schneller horizontaler Bewegung; Stärke mit Standardabweichung festlegen"
#: ../share/filters/filters.svg.h:6
msgid "Motion blur, vertical"
msgstr "Bewegungsunschärfe, Vertikal"
#: ../share/filters/filters.svg.h:6
-msgid ""
-"Blur as if the object flies vertically; adjust Standard Deviation to vary "
-"force"
-msgstr ""
-"Verwischen wie bei schneller vertikaler Bewegung; Stärke mit "
-"Standardabweichung festlegen"
+msgid "Blur as if the object flies vertically; adjust Standard Deviation to vary force"
+msgstr "Verwischen wie bei schneller vertikaler Bewegung; Stärke mit Standardabweichung festlegen"
# to check
#: ../share/filters/filters.svg.h:7
@@ -136,11 +148,16 @@ msgstr "Kanten sind leicht ausgefranst"
msgid "Cutout"
msgstr "Ausschneiden"
-#: ../share/filters/filters.svg.h:8 ../share/filters/filters.svg.h:40
-#: ../share/filters/filters.svg.h:85 ../share/filters/filters.svg.h:95
-#: ../share/filters/filters.svg.h:119 ../share/filters/filters.svg.h:169
-#: ../share/filters/filters.svg.h:170 ../share/filters/filters.svg.h:171
-#: ../share/filters/filters.svg.h:176 ../share/filters/filters.svg.h:214
+#: ../share/filters/filters.svg.h:8
+#: ../share/filters/filters.svg.h:40
+#: ../share/filters/filters.svg.h:85
+#: ../share/filters/filters.svg.h:95
+#: ../share/filters/filters.svg.h:119
+#: ../share/filters/filters.svg.h:169
+#: ../share/filters/filters.svg.h:170
+#: ../share/filters/filters.svg.h:171
+#: ../share/filters/filters.svg.h:176
+#: ../share/filters/filters.svg.h:214
#: ../src/extension/internal/filter/drop-shadow.h:45
#: ../src/extension/internal/filter/drop-shadow.h:100
msgid "Shadows and Glows"
@@ -170,14 +187,22 @@ msgstr "Kanten und Fläche leicht aufrauhen"
msgid "Rubber stamp"
msgstr "Stempel"
-#: ../share/filters/filters.svg.h:11 ../share/filters/filters.svg.h:17
-#: ../share/filters/filters.svg.h:18 ../share/filters/filters.svg.h:19
-#: ../share/filters/filters.svg.h:21 ../share/filters/filters.svg.h:22
-#: ../share/filters/filters.svg.h:36 ../share/filters/filters.svg.h:37
-#: ../share/filters/filters.svg.h:38 ../share/filters/filters.svg.h:90
-#: ../share/filters/filters.svg.h:113 ../share/filters/filters.svg.h:114
-#: ../share/filters/filters.svg.h:117 ../share/filters/filters.svg.h:150
-#: ../share/filters/filters.svg.h:154 ../share/filters/filters.svg.h:183
+#: ../share/filters/filters.svg.h:11
+#: ../share/filters/filters.svg.h:17
+#: ../share/filters/filters.svg.h:18
+#: ../share/filters/filters.svg.h:19
+#: ../share/filters/filters.svg.h:21
+#: ../share/filters/filters.svg.h:22
+#: ../share/filters/filters.svg.h:36
+#: ../share/filters/filters.svg.h:37
+#: ../share/filters/filters.svg.h:38
+#: ../share/filters/filters.svg.h:90
+#: ../share/filters/filters.svg.h:113
+#: ../share/filters/filters.svg.h:114
+#: ../share/filters/filters.svg.h:117
+#: ../share/filters/filters.svg.h:150
+#: ../share/filters/filters.svg.h:154
+#: ../share/filters/filters.svg.h:183
#: ../share/filters/filters.svg.h:217
msgid "Overlays"
msgstr "Deckschichten"
@@ -190,8 +215,10 @@ msgstr "Zufällige weiße Flecken im Inneren"
msgid "Ink bleed"
msgstr "Auslaufende Farben"
-#: ../share/filters/filters.svg.h:12 ../share/filters/filters.svg.h:13
-#: ../share/filters/filters.svg.h:41 ../share/filters/filters.svg.h:166
+#: ../share/filters/filters.svg.h:12
+#: ../share/filters/filters.svg.h:13
+#: ../share/filters/filters.svg.h:41
+#: ../share/filters/filters.svg.h:166
msgid "Protrusions"
msgstr "Anlagerungen"
@@ -227,10 +254,14 @@ msgstr "Erhöhte Kanten mit Einbeulung"
msgid "Ripple"
msgstr "Riffel"
-#: ../share/filters/filters.svg.h:16 ../share/filters/filters.svg.h:43
-#: ../share/filters/filters.svg.h:106 ../share/filters/filters.svg.h:110
-#: ../share/filters/filters.svg.h:112 ../share/filters/filters.svg.h:128
-#: ../share/filters/filters.svg.h:173 ../share/filters/filters.svg.h:194
+#: ../share/filters/filters.svg.h:16
+#: ../share/filters/filters.svg.h:43
+#: ../share/filters/filters.svg.h:106
+#: ../share/filters/filters.svg.h:110
+#: ../share/filters/filters.svg.h:112
+#: ../share/filters/filters.svg.h:128
+#: ../share/filters/filters.svg.h:173
+#: ../share/filters/filters.svg.h:194
msgid "Distort"
msgstr "Verzerren"
@@ -266,13 +297,20 @@ msgstr "Flockenartige weiße Flecken"
msgid "Leopard fur"
msgstr "Leopardenfell"
-#: ../share/filters/filters.svg.h:20 ../share/filters/filters.svg.h:58
-#: ../share/filters/filters.svg.h:59 ../share/filters/filters.svg.h:60
-#: ../share/filters/filters.svg.h:62 ../share/filters/filters.svg.h:67
-#: ../share/filters/filters.svg.h:78 ../share/filters/filters.svg.h:79
-#: ../share/filters/filters.svg.h:80 ../share/filters/filters.svg.h:82
-#: ../share/filters/filters.svg.h:136 ../share/filters/filters.svg.h:151
-#: ../share/filters/filters.svg.h:152 ../share/filters/filters.svg.h:153
+#: ../share/filters/filters.svg.h:20
+#: ../share/filters/filters.svg.h:58
+#: ../share/filters/filters.svg.h:59
+#: ../share/filters/filters.svg.h:60
+#: ../share/filters/filters.svg.h:62
+#: ../share/filters/filters.svg.h:67
+#: ../share/filters/filters.svg.h:78
+#: ../share/filters/filters.svg.h:79
+#: ../share/filters/filters.svg.h:80
+#: ../share/filters/filters.svg.h:82
+#: ../share/filters/filters.svg.h:136
+#: ../share/filters/filters.svg.h:151
+#: ../share/filters/filters.svg.h:152
+#: ../share/filters/filters.svg.h:153
msgid "Materials"
msgstr "Materialien"
@@ -286,8 +324,7 @@ msgstr "Zebra"
#: ../share/filters/filters.svg.h:21
msgid "Irregular vertical dark stripes (loses object's own color)"
-msgstr ""
-"Unregelmäßige vertikale, dunkle Streifen (ursprüngliche Farbe geht verloren)"
+msgstr "Unregelmäßige vertikale, dunkle Streifen (ursprüngliche Farbe geht verloren)"
#: ../share/filters/filters.svg.h:22
msgid "Clouds"
@@ -302,13 +339,20 @@ msgstr "Vereinzelte luftig-leichte, weiße Wolken"
msgid "Sharpen"
msgstr "Schärfen"
-#: ../share/filters/filters.svg.h:23 ../share/filters/filters.svg.h:24
-#: ../share/filters/filters.svg.h:25 ../share/filters/filters.svg.h:26
-#: ../share/filters/filters.svg.h:27 ../share/filters/filters.svg.h:28
-#: ../share/filters/filters.svg.h:29 ../share/filters/filters.svg.h:30
-#: ../share/filters/filters.svg.h:34 ../share/filters/filters.svg.h:100
-#: ../share/filters/filters.svg.h:160 ../share/filters/filters.svg.h:162
-#: ../share/filters/filters.svg.h:175 ../share/filters/filters.svg.h:190
+#: ../share/filters/filters.svg.h:23
+#: ../share/filters/filters.svg.h:24
+#: ../share/filters/filters.svg.h:25
+#: ../share/filters/filters.svg.h:26
+#: ../share/filters/filters.svg.h:27
+#: ../share/filters/filters.svg.h:28
+#: ../share/filters/filters.svg.h:29
+#: ../share/filters/filters.svg.h:30
+#: ../share/filters/filters.svg.h:34
+#: ../share/filters/filters.svg.h:100
+#: ../share/filters/filters.svg.h:160
+#: ../share/filters/filters.svg.h:162
+#: ../share/filters/filters.svg.h:175
+#: ../share/filters/filters.svg.h:190
msgid "Image effects"
msgstr "Bild-Effekte"
@@ -358,7 +402,8 @@ msgstr "Vertikale Farbkanten im Objekt erkennen"
#. Pencil
#: ../share/filters/filters.svg.h:29
-#: ../src/ui/dialog/inkscape-preferences.cpp:486 ../src/verbs.cpp:2516
+#: ../src/ui/dialog/inkscape-preferences.cpp:486
+#: ../src/verbs.cpp:2516
msgid "Pencil"
msgstr "Malwerkzeug (Freihand)"
@@ -379,14 +424,22 @@ msgstr "Farbkanten im Objekt erkennen und in Blau nachzeichnen"
msgid "Desaturate"
msgstr "Entsättigen"
-#: ../share/filters/filters.svg.h:31 ../share/filters/filters.svg.h:32
-#: ../share/filters/filters.svg.h:33 ../share/filters/filters.svg.h:72
-#: ../share/filters/filters.svg.h:91 ../share/filters/filters.svg.h:98
-#: ../share/filters/filters.svg.h:99 ../share/filters/filters.svg.h:157
-#: ../share/filters/filters.svg.h:174 ../share/filters/filters.svg.h:196
-#: ../share/filters/filters.svg.h:205 ../share/filters/filters.svg.h:215
-#: ../share/filters/filters.svg.h:218 ../share/filters/filters.svg.h:219
-#: ../src/dialogs/clonetiler.cpp:2607 ../src/dialogs/clonetiler.cpp:2754
+#: ../share/filters/filters.svg.h:31
+#: ../share/filters/filters.svg.h:32
+#: ../share/filters/filters.svg.h:33
+#: ../share/filters/filters.svg.h:72
+#: ../share/filters/filters.svg.h:91
+#: ../share/filters/filters.svg.h:98
+#: ../share/filters/filters.svg.h:99
+#: ../share/filters/filters.svg.h:157
+#: ../share/filters/filters.svg.h:174
+#: ../share/filters/filters.svg.h:196
+#: ../share/filters/filters.svg.h:205
+#: ../share/filters/filters.svg.h:215
+#: ../share/filters/filters.svg.h:218
+#: ../share/filters/filters.svg.h:219
+#: ../src/dialogs/clonetiler.cpp:2607
+#: ../src/dialogs/clonetiler.cpp:2754
#: ../src/extension/internal/bitmap/colorize.cpp:51
#: ../share/extensions/color_brighter.inx.h:2
#: ../share/extensions/color_custom.inx.h:2
@@ -414,7 +467,8 @@ msgstr "Farbe"
msgid "Render in shades of gray by reducing saturation to zero"
msgstr "Durch Löschen der Sättigung in Graustufen zeichnen"
-#: ../share/filters/filters.svg.h:32 ../src/ui/widget/selected-style.cpp:228
+#: ../share/filters/filters.svg.h:32
+#: ../src/ui/widget/selected-style.cpp:228
msgid "Invert"
msgstr "Invertieren"
@@ -442,17 +496,28 @@ msgstr "Imitiere gealterte Fotografie"
msgid "Organic"
msgstr "Organisch"
-#: ../share/filters/filters.svg.h:35 ../share/filters/filters.svg.h:42
-#: ../share/filters/filters.svg.h:45 ../share/filters/filters.svg.h:61
-#: ../share/filters/filters.svg.h:63 ../share/filters/filters.svg.h:64
-#: ../share/filters/filters.svg.h:81 ../share/filters/filters.svg.h:83
-#: ../share/filters/filters.svg.h:84 ../share/filters/filters.svg.h:125
-#: ../share/filters/filters.svg.h:126 ../share/filters/filters.svg.h:127
-#: ../share/filters/filters.svg.h:130 ../share/filters/filters.svg.h:131
-#: ../share/filters/filters.svg.h:132 ../share/filters/filters.svg.h:133
-#: ../share/filters/filters.svg.h:134 ../share/filters/filters.svg.h:135
-#: ../share/filters/filters.svg.h:155 ../share/filters/filters.svg.h:172
-#: ../share/filters/filters.svg.h:181 ../share/filters/filters.svg.h:187
+#: ../share/filters/filters.svg.h:35
+#: ../share/filters/filters.svg.h:42
+#: ../share/filters/filters.svg.h:45
+#: ../share/filters/filters.svg.h:61
+#: ../share/filters/filters.svg.h:63
+#: ../share/filters/filters.svg.h:64
+#: ../share/filters/filters.svg.h:81
+#: ../share/filters/filters.svg.h:83
+#: ../share/filters/filters.svg.h:84
+#: ../share/filters/filters.svg.h:125
+#: ../share/filters/filters.svg.h:126
+#: ../share/filters/filters.svg.h:127
+#: ../share/filters/filters.svg.h:130
+#: ../share/filters/filters.svg.h:131
+#: ../share/filters/filters.svg.h:132
+#: ../share/filters/filters.svg.h:133
+#: ../share/filters/filters.svg.h:134
+#: ../share/filters/filters.svg.h:135
+#: ../share/filters/filters.svg.h:155
+#: ../share/filters/filters.svg.h:172
+#: ../share/filters/filters.svg.h:181
+#: ../share/filters/filters.svg.h:187
#: ../share/filters/filters.svg.h:200
msgid "Textures"
msgstr "Texturen"
@@ -530,24 +595,32 @@ msgstr "Van Gogh Gemälde-Effekt für Bilder"
msgid "HSL Bumps"
msgstr "HSL Rauhigkeit"
-#: ../share/filters/filters.svg.h:44 ../share/filters/filters.svg.h:46
-#: ../share/filters/filters.svg.h:97 ../share/filters/filters.svg.h:120
-#: ../share/filters/filters.svg.h:121 ../share/filters/filters.svg.h:123
-#: ../share/filters/filters.svg.h:124 ../share/filters/filters.svg.h:161
-#: ../share/filters/filters.svg.h:163 ../share/filters/filters.svg.h:180
-#: ../share/filters/filters.svg.h:182 ../share/filters/filters.svg.h:184
-#: ../share/filters/filters.svg.h:185 ../share/filters/filters.svg.h:192
-#: ../share/filters/filters.svg.h:201 ../share/filters/filters.svg.h:202
-#: ../share/filters/filters.svg.h:203 ../share/filters/filters.svg.h:212
-#: ../share/filters/filters.svg.h:213 ../share/filters/filters.svg.h:216
+#: ../share/filters/filters.svg.h:44
+#: ../share/filters/filters.svg.h:46
+#: ../share/filters/filters.svg.h:97
+#: ../share/filters/filters.svg.h:120
+#: ../share/filters/filters.svg.h:121
+#: ../share/filters/filters.svg.h:123
+#: ../share/filters/filters.svg.h:124
+#: ../share/filters/filters.svg.h:161
+#: ../share/filters/filters.svg.h:163
+#: ../share/filters/filters.svg.h:180
+#: ../share/filters/filters.svg.h:182
+#: ../share/filters/filters.svg.h:184
+#: ../share/filters/filters.svg.h:185
+#: ../share/filters/filters.svg.h:192
+#: ../share/filters/filters.svg.h:201
+#: ../share/filters/filters.svg.h:202
+#: ../share/filters/filters.svg.h:203
+#: ../share/filters/filters.svg.h:212
+#: ../share/filters/filters.svg.h:213
+#: ../share/filters/filters.svg.h:216
msgid "Bumps"
msgstr "Raue Texturen"
#: ../share/filters/filters.svg.h:44
msgid "Highly flexible bump combining diffuse and specular lightings"
-msgstr ""
-"Hochflexible Oberflächenstruktur kombiniert mit diffuser und direkter "
-"Beleuchtung"
+msgstr "Hochflexible Oberflächenstruktur kombiniert mit diffuser und direkter Beleuchtung"
#: ../share/filters/filters.svg.h:45
msgid "Cracked glass"
@@ -569,9 +642,12 @@ msgstr "Flexibler Bläscheneffekt mit etwas Versatz"
msgid "Glowing bubble"
msgstr "Blase mit Lichthof"
-#: ../share/filters/filters.svg.h:47 ../share/filters/filters.svg.h:52
-#: ../share/filters/filters.svg.h:53 ../share/filters/filters.svg.h:65
-#: ../share/filters/filters.svg.h:66 ../share/filters/filters.svg.h:68
+#: ../share/filters/filters.svg.h:47
+#: ../share/filters/filters.svg.h:52
+#: ../share/filters/filters.svg.h:53
+#: ../share/filters/filters.svg.h:65
+#: ../share/filters/filters.svg.h:66
+#: ../share/filters/filters.svg.h:68
#: ../share/filters/filters.svg.h:70
msgid "Ridges"
msgstr "Grat"
@@ -641,8 +717,10 @@ msgstr "Glühendes Metall"
msgid "Leaves"
msgstr "Laub"
-#: ../share/filters/filters.svg.h:55 ../share/filters/filters.svg.h:77
-#: ../share/filters/filters.svg.h:86 ../share/extensions/pathscatter.inx.h:10
+#: ../share/filters/filters.svg.h:55
+#: ../share/filters/filters.svg.h:77
+#: ../share/filters/filters.svg.h:86
+#: ../share/extensions/pathscatter.inx.h:10
msgid "Scatter"
msgstr "Streuung"
@@ -672,9 +750,7 @@ msgstr "Schimmerndes Bienenwachs"
#: ../share/filters/filters.svg.h:58
msgid "Waxy texture which keeps its iridescence through color fill change"
-msgstr ""
-"Wachsähnliche Textur, die ihren schimmernden Effekt durch Änderung der "
-"Farbfüllung erhält"
+msgstr "Wachsähnliche Textur, die ihren schimmernden Effekt durch Änderung der Farbfüllung erhält"
#: ../share/filters/filters.svg.h:59
msgid "Eroded metal"
@@ -745,11 +821,8 @@ msgid "Metallized paint"
msgstr "Metalliclack"
#: ../share/filters/filters.svg.h:67
-msgid ""
-"Metallized effect with a soft lighting, slightly translucent at the edges"
-msgstr ""
-"Metallischer Effekt mit weicher Beleuchtung, leicht durchscheinend an den "
-"Kanten "
+msgid "Metallized effect with a soft lighting, slightly translucent at the edges"
+msgstr "Metallischer Effekt mit weicher Beleuchtung, leicht durchscheinend an den Kanten "
#: ../share/filters/filters.svg.h:68
msgid "Dragee"
@@ -790,20 +863,24 @@ msgstr "Einfärben"
#: ../share/filters/filters.svg.h:72
msgid "Blend image or object with a flood color and set lightness and contrast"
-msgstr ""
-"Tönt das Bild oder Objekt mit einer Füllfarbe und setzt Helligkeit und "
-"Kontrast"
+msgstr "Tönt das Bild oder Objekt mit einer Füllfarbe und setzt Helligkeit und Kontrast"
#: ../share/filters/filters.svg.h:73
msgid "Parallel hollow"
msgstr "Hohlkehle"
-#: ../share/filters/filters.svg.h:73 ../share/filters/filters.svg.h:74
-#: ../share/filters/filters.svg.h:75 ../share/filters/filters.svg.h:76
-#: ../share/filters/filters.svg.h:87 ../share/filters/filters.svg.h:88
-#: ../share/filters/filters.svg.h:92 ../share/filters/filters.svg.h:93
-#: ../share/filters/filters.svg.h:96 ../share/filters/filters.svg.h:105
-#: ../share/filters/filters.svg.h:129 ../share/filters/filters.svg.h:168
+#: ../share/filters/filters.svg.h:73
+#: ../share/filters/filters.svg.h:74
+#: ../share/filters/filters.svg.h:75
+#: ../share/filters/filters.svg.h:76
+#: ../share/filters/filters.svg.h:87
+#: ../share/filters/filters.svg.h:88
+#: ../share/filters/filters.svg.h:92
+#: ../share/filters/filters.svg.h:93
+#: ../share/filters/filters.svg.h:96
+#: ../share/filters/filters.svg.h:105
+#: ../share/filters/filters.svg.h:129
+#: ../share/filters/filters.svg.h:168
#: ../src/filter-enums.cpp:31
msgid "Morphology"
msgstr "Morphologie"
@@ -890,19 +967,15 @@ msgstr "rauhes Papier"
#: ../share/filters/filters.svg.h:83
msgid "Aquarelle paper effect which can be used for pictures as for objects"
-msgstr ""
-"Aquarellpapier-Effekt, der für Bilder wie für Objekte verwendet werden kann"
+msgstr "Aquarellpapier-Effekt, der für Bilder wie für Objekte verwendet werden kann"
#: ../share/filters/filters.svg.h:84
msgid "Rough and glossy"
msgstr "Rauh und Glänzend"
#: ../share/filters/filters.svg.h:84
-msgid ""
-"Crumpled glossy paper effect which can be used for pictures as for objects"
-msgstr ""
-"Zerknittertes-Glanzpapier-Effekt, der für Bilder wie für Objekte verwendet "
-"werden kann"
+msgid "Crumpled glossy paper effect which can be used for pictures as for objects"
+msgstr "Zerknittertes-Glanzpapier-Effekt, der für Bilder wie für Objekte verwendet werden kann"
#: ../share/filters/filters.svg.h:85
msgid "In and Out"
@@ -942,11 +1015,8 @@ msgid "Electronic microscopy"
msgstr "Elektronenmikroskop"
#: ../share/filters/filters.svg.h:89
-msgid ""
-"Bevel, crude light, discoloration and glow like in electronic microscopy"
-msgstr ""
-"Kantenschatten, hartes Licht, Ausbleichen und Überstrahlen wie in der "
-"Elektronenmikroskopie"
+msgid "Bevel, crude light, discoloration and glow like in electronic microscopy"
+msgstr "Kantenschatten, hartes Licht, Ausbleichen und Überstrahlen wie in der Elektronenmikroskopie"
#: ../share/filters/filters.svg.h:90
msgid "Tartan"
@@ -986,8 +1056,7 @@ msgstr "Schick unscharf"
#: ../share/filters/filters.svg.h:94
msgid "Smooth colorized contour which allows desaturation and hue rotation"
-msgstr ""
-"Weiche gefärbte Kontur mit Möglichkeit der Entsättigung und Farbwertrotation"
+msgstr "Weiche gefärbte Kontur mit Möglichkeit der Entsättigung und Farbwertrotation"
#: ../share/filters/filters.svg.h:95
msgid "Glow"
@@ -1027,12 +1096,8 @@ msgid "Moonarize"
msgstr "Lunarisieren"
#: ../share/filters/filters.svg.h:99
-msgid ""
-"An effect between solarize and invert which often preserves sky and water "
-"lights"
-msgstr ""
-"Ein Effekt zwischen Solarisierung und Invertierung, der oft Himmel- und "
-"Wasserlichter erhält"
+msgid "An effect between solarize and invert which often preserves sky and water lights"
+msgstr "Ein Effekt zwischen Solarisierung und Invertierung, der oft Himmel- und Wasserlichter erhält"
#: ../share/filters/filters.svg.h:100
msgid "Soft focus lens"
@@ -1062,12 +1127,18 @@ msgstr "Bleiglasfester-Effekt mit Beleuchtung von unten"
msgid "HSL Bumps alpha"
msgstr "HSL Rauigkeit, Alpha"
-#: ../share/filters/filters.svg.h:103 ../share/filters/filters.svg.h:104
-#: ../share/filters/filters.svg.h:164 ../share/filters/filters.svg.h:165
-#: ../share/filters/filters.svg.h:177 ../share/filters/filters.svg.h:178
-#: ../share/filters/filters.svg.h:179 ../share/filters/filters.svg.h:186
-#: ../share/filters/filters.svg.h:188 ../share/filters/filters.svg.h:189
-#: ../share/filters/filters.svg.h:191 ../share/filters/filters.svg.h:193
+#: ../share/filters/filters.svg.h:103
+#: ../share/filters/filters.svg.h:104
+#: ../share/filters/filters.svg.h:164
+#: ../share/filters/filters.svg.h:165
+#: ../share/filters/filters.svg.h:177
+#: ../share/filters/filters.svg.h:178
+#: ../share/filters/filters.svg.h:179
+#: ../share/filters/filters.svg.h:186
+#: ../share/filters/filters.svg.h:188
+#: ../share/filters/filters.svg.h:189
+#: ../share/filters/filters.svg.h:191
+#: ../share/filters/filters.svg.h:193
#: ../share/filters/filters.svg.h:204
msgid "Image effects, transparent"
msgstr "Bild-Effekte, transparenz"
@@ -1089,17 +1160,17 @@ msgid "Smooth edges"
msgstr "Weiche Kanten"
#: ../share/filters/filters.svg.h:105
-msgid ""
-"Smooth the outside of shapes and pictures without altering their contents"
+msgid "Smooth the outside of shapes and pictures without altering their contents"
msgstr "Konturen und Bilderränder glätten, ohne ihren Inhalt zu verändern"
-#: ../share/filters/filters.svg.h:106 ../share/filters/filters.svg.h:128
+#: ../share/filters/filters.svg.h:106
+#: ../share/filters/filters.svg.h:128
msgid "Torn edges"
msgstr "Ausgerissene Kanten"
-#: ../share/filters/filters.svg.h:106 ../share/filters/filters.svg.h:128
-msgid ""
-"Displace the outside of shapes and pictures without altering their content"
+#: ../share/filters/filters.svg.h:106
+#: ../share/filters/filters.svg.h:128
+msgid "Displace the outside of shapes and pictures without altering their content"
msgstr "Das Äußere von Formen und Bildern verschieben, ohne Inhalt zu ändern"
#: ../share/filters/filters.svg.h:107
@@ -1122,7 +1193,8 @@ msgstr "Inhalt des Objekts verwischen, Umriss beibehalten"
msgid "Specular light"
msgstr "Glänzende Wölbung"
-#: ../share/filters/filters.svg.h:109 ../share/filters/filters.svg.h:211
+#: ../share/filters/filters.svg.h:109
+#: ../share/filters/filters.svg.h:211
msgid "Basic specular bevel to use for building textures"
msgstr "Einfache reflektierende Wölbung um Texturen zu entwickeln"
@@ -1139,12 +1211,8 @@ msgid "Evanescent"
msgstr "Schwindend"
#: ../share/filters/filters.svg.h:111
-msgid ""
-"Blur the contents of objects, preserving the outline and adding progressive "
-"transparency at edges"
-msgstr ""
-"Inhalt des Objekts verwischen, Umriss beibehalten und zu den Kanten "
-"anwachsende Transparenz hinzufügen"
+msgid "Blur the contents of objects, preserving the outline and adding progressive transparency at edges"
+msgstr "Inhalt des Objekts verwischen, Umriss beibehalten und zu den Kanten anwachsende Transparenz hinzufügen"
#: ../share/filters/filters.svg.h:112
msgid "Chalk and sponge"
@@ -1191,8 +1259,7 @@ msgid "Garden of Delights"
msgstr "Garten der Lust"
#: ../share/filters/filters.svg.h:117
-msgid ""
-"Phantasmagorical turbulent wisps, like Hieronymus Bosch's Garden of Delights"
+msgid "Phantasmagorical turbulent wisps, like Hieronymus Bosch's Garden of Delights"
msgstr "Phantasmagorische Wolkenfetzen, wie bei Hieronymus Bosch"
#: ../share/filters/filters.svg.h:118
@@ -1216,8 +1283,7 @@ msgid "HSL Bumps, matte"
msgstr "HSL Rauigkeit, matt"
#: ../share/filters/filters.svg.h:120
-msgid ""
-"Same as HSL bumps but with a diffuse reflection instead of a specular one"
+msgid "Same as HSL bumps but with a diffuse reflection instead of a specular one"
msgstr "Wie HSL Rauigkeit mit diffuser Reflexion (statt glänzender)"
#: ../share/filters/filters.svg.h:121
@@ -1234,8 +1300,7 @@ msgstr "Einfache Unschärfe"
#: ../share/filters/filters.svg.h:122
msgid "Simple Gaussian blur, same as the blur slider in Fill and Stroke dialog"
-msgstr ""
-"Einfacher gaußscher Weichzeichner, wie im \"Füllung und Kontur\"-Dialog"
+msgstr "Einfacher gaußscher Weichzeichner, wie im \"Füllung und Kontur\"-Dialog"
#: ../share/filters/filters.svg.h:123
msgid "Bubbly Bumps, matte"
@@ -1251,12 +1316,8 @@ msgid "Emboss"
msgstr "Kanten hervorheben"
#: ../share/filters/filters.svg.h:124
-msgid ""
-"Emboss effect : Colors of the original images are preserved or modified by "
-"Blend"
-msgstr ""
-"Prägeeffekt: Farben des Originals werden beibehalten oder durch Blend "
-"modifiziert"
+msgid "Emboss effect : Colors of the original images are preserved or modified by Blend"
+msgstr "Prägeeffekt: Farben des Originals werden beibehalten oder durch Blend modifiziert"
#: ../share/filters/filters.svg.h:125
msgid "Blotting paper"
@@ -1311,10 +1372,8 @@ msgid "Felt"
msgstr "Filz"
#: ../share/filters/filters.svg.h:132
-msgid ""
-"Felt like texture with color turbulence and slightly darker at the edges"
-msgstr ""
-"Filzartige Textur mit verwirbelten Farben, an den Kanten leicht dunkler"
+msgid "Felt like texture with color turbulence and slightly darker at the edges"
+msgstr "Filzartige Textur mit verwirbelten Farben, an den Kanten leicht dunkler"
#: ../share/filters/filters.svg.h:133
msgid "Ink paint"
@@ -1352,13 +1411,20 @@ msgstr "Heller polierter unebener Metallguss, einfärbbar"
msgid "Comics draft"
msgstr "Comicskizze"
-#: ../share/filters/filters.svg.h:137 ../share/filters/filters.svg.h:138
-#: ../share/filters/filters.svg.h:139 ../share/filters/filters.svg.h:140
-#: ../share/filters/filters.svg.h:141 ../share/filters/filters.svg.h:142
-#: ../share/filters/filters.svg.h:143 ../share/filters/filters.svg.h:144
-#: ../share/filters/filters.svg.h:145 ../share/filters/filters.svg.h:146
-#: ../share/filters/filters.svg.h:147 ../share/filters/filters.svg.h:148
-#: ../share/filters/filters.svg.h:149 ../share/filters/filters.svg.h:156
+#: ../share/filters/filters.svg.h:137
+#: ../share/filters/filters.svg.h:138
+#: ../share/filters/filters.svg.h:139
+#: ../share/filters/filters.svg.h:140
+#: ../share/filters/filters.svg.h:141
+#: ../share/filters/filters.svg.h:142
+#: ../share/filters/filters.svg.h:143
+#: ../share/filters/filters.svg.h:144
+#: ../share/filters/filters.svg.h:145
+#: ../share/filters/filters.svg.h:146
+#: ../share/filters/filters.svg.h:147
+#: ../share/filters/filters.svg.h:148
+#: ../share/filters/filters.svg.h:149
+#: ../share/filters/filters.svg.h:156
msgid "Non realistic 3D shaders"
msgstr "Übersteigerte Schattierungen"
@@ -1531,8 +1597,10 @@ msgstr "Helle Bereiche werden schwarz"
msgid "Light eraser"
msgstr "Helligkeits radierer"
-#: ../share/filters/filters.svg.h:158 ../share/filters/filters.svg.h:195
-#: ../share/filters/filters.svg.h:197 ../share/filters/filters.svg.h:198
+#: ../share/filters/filters.svg.h:158
+#: ../share/filters/filters.svg.h:195
+#: ../share/filters/filters.svg.h:197
+#: ../share/filters/filters.svg.h:198
#: ../share/filters/filters.svg.h:199
msgid "Transparency utilities"
msgstr "Transparenz-Werkzeuge"
@@ -1573,12 +1641,8 @@ msgid "Drawing"
msgstr "Zeichnung"
#: ../share/filters/filters.svg.h:162
-msgid ""
-"Give lead pencil or chromolithography or engraving or other effects to "
-"images and material filled objects"
-msgstr ""
-"Versieht Bilder oder gefüllte Objekte mit Bleigriffel-, Farblithografie-, "
-"Gravur- oder anderen Effekten"
+msgid "Give lead pencil or chromolithography or engraving or other effects to images and material filled objects"
+msgstr "Versieht Bilder oder gefüllte Objekte mit Bleigriffel-, Farblithografie-, Gravur- oder anderen Effekten"
#: ../share/filters/filters.svg.h:163
msgid "Velvet Bumps"
@@ -1602,17 +1666,14 @@ msgstr "Alpha zeichnen, Farbe"
#: ../share/filters/filters.svg.h:165
msgid "Gives a transparent color fill effect to bitmaps and materials"
-msgstr ""
-"Versieht Bitmaps und Materialien mit einem transparenten Farbfülleffekt"
+msgstr "Versieht Bitmaps und Materialien mit einem transparenten Farbfülleffekt"
#: ../share/filters/filters.svg.h:166
msgid "Chewing gum"
msgstr "Kaugummi"
#: ../share/filters/filters.svg.h:166
-msgid ""
-"Creates colorizable blotches which smoothly flow over the edges of the lines "
-"at their crossings"
+msgid "Creates colorizable blotches which smoothly flow over the edges of the lines at their crossings"
msgstr "Erzeugt farbige Kleckse, die weich über innere Strukturen fließen"
#: ../share/filters/filters.svg.h:167
@@ -1645,9 +1706,7 @@ msgstr "Licht und Schatten"
#: ../share/filters/filters.svg.h:170
msgid "Darkens the edge with an inner blur and adds a flexible glow"
-msgstr ""
-"Betont die Kante mit innenliegender Unschärfe und fügt flexiblen Lichthof "
-"hinzu"
+msgstr "Betont die Kante mit innenliegender Unschärfe und fügt flexiblen Lichthof hinzu"
#: ../share/filters/filters.svg.h:171
msgid "Darken edges"
@@ -1718,8 +1777,7 @@ msgid "Smear transparency"
msgstr "Verschmierte Transparenz"
#: ../share/filters/filters.svg.h:179
-msgid ""
-"Paint objects with a transparent turbulence which turns around color edges"
+msgid "Paint objects with a transparent turbulence which turns around color edges"
msgstr "Versieht Objekte mit Transparenzturbulenz um Farbkanten"
#: ../share/filters/filters.svg.h:180
@@ -1743,12 +1801,8 @@ msgid "Embossed leather"
msgstr "geprägtes Leder"
#: ../share/filters/filters.svg.h:182
-msgid ""
-"Combine a HSL edges detection bump with a leathery or woody and colorizable "
-"texture"
-msgstr ""
-"Kombiniert Kantenerkennung im HSL-Farbraum mit einer ledrigen oder "
-"holzähnlichen Textur"
+msgid "Combine a HSL edges detection bump with a leathery or woody and colorizable texture"
+msgstr "Kombiniert Kantenerkennung im HSL-Farbraum mit einer ledrigen oder holzähnlichen Textur"
#: ../share/filters/filters.svg.h:183
msgid "Carnaval"
@@ -1763,23 +1817,16 @@ msgid "Plastify"
msgstr "Weich machen"
#: ../share/filters/filters.svg.h:184
-msgid ""
-"HSL edges detection bump with a wavy reflective surface effect and variable "
-"crumple"
-msgstr ""
-"Kantenerkennung im HSL-Farbraum mit dem Effekt einer reflektierenden "
-"Oberfläche einstellbarer Welligkeit "
+msgid "HSL edges detection bump with a wavy reflective surface effect and variable crumple"
+msgstr "Kantenerkennung im HSL-Farbraum mit dem Effekt einer reflektierenden Oberfläche einstellbarer Welligkeit "
#: ../share/filters/filters.svg.h:185
msgid "Plaster"
msgstr "Gips"
#: ../share/filters/filters.svg.h:185
-msgid ""
-"Combine a HSL edges detection bump with a matte and crumpled surface effect"
-msgstr ""
-"Kombiniert Kantenerkennung im HSL-Farbraum mit einem matten, knittrigen "
-"Oberflächeneffekt"
+msgid "Combine a HSL edges detection bump with a matte and crumpled surface effect"
+msgstr "Kombiniert Kantenerkennung im HSL-Farbraum mit einem matten, knittrigen Oberflächeneffekt"
#: ../share/filters/filters.svg.h:186
msgid "Rough transparency"
@@ -1812,8 +1859,7 @@ msgstr "Alpha Zeichnung, flüssig"
# Meint "fluid drawing" tatsächlich etwas wie Wasserfarbenmalerei?
#: ../share/filters/filters.svg.h:189
msgid "Gives a transparent fluid drawing effect with rough line and filling"
-msgstr ""
-"Erzeugt einen transparenten Wasserfarbeneffekt mit rohen Linien und Füllung"
+msgstr "Erzeugt einen transparenten Wasserfarbeneffekt mit rohen Linien und Füllung"
#: ../share/filters/filters.svg.h:190
msgid "Liquid drawing"
@@ -1821,9 +1867,7 @@ msgstr "Flüssige Zeichnung"
#: ../share/filters/filters.svg.h:190
msgid "Gives a fluid and wavy expressionist drawing effect to images"
-msgstr ""
-"Versieht Bilder mit einem expressionistischem Ausdruck (fließende, wellige "
-"Formen)"
+msgstr "Versieht Bilder mit einem expressionistischem Ausdruck (fließende, wellige Formen)"
#: ../share/filters/filters.svg.h:191
msgid "Marbled ink"
@@ -1846,8 +1890,7 @@ msgid "Alpha engraving B"
msgstr "Alphagravur B"
#: ../share/filters/filters.svg.h:193
-msgid ""
-"Gives a controllable roughness engraving effect to bitmaps and materials"
+msgid "Gives a controllable roughness engraving effect to bitmaps and materials"
msgstr "Erzeugt eine einstellbare raue Oberfläche auf Materialien und Bildern "
#: ../share/filters/filters.svg.h:194
@@ -1896,11 +1939,8 @@ msgid "Saturation map"
msgstr "Sättigungskarte"
#: ../share/filters/filters.svg.h:199
-msgid ""
-"Creates an approximative semi-transparent and colorizable image of the "
-"saturation levels"
-msgstr ""
-"Erzeugt ein ungefähr halbtransparentes einfärbbares Bild der Sättigungspegel"
+msgid "Creates an approximative semi-transparent and colorizable image of the saturation levels"
+msgstr "Erzeugt ein ungefähr halbtransparentes einfärbbares Bild der Sättigungspegel"
#: ../share/filters/filters.svg.h:200
msgid "Riddled"
@@ -1955,9 +1995,7 @@ msgid "Clean edges"
msgstr "Saubere Kanten"
#: ../share/filters/filters.svg.h:206
-msgid ""
-"Removes or decreases glows and jaggeries around objects edges after applying "
-"some filters"
+msgid "Removes or decreases glows and jaggeries around objects edges after applying some filters"
msgstr "Entfernt oder vermindert Dreckeffekte nach Anwendung mehrer Filter"
#: ../share/filters/filters.svg.h:207
@@ -2002,20 +2040,15 @@ msgstr "Alufolie"
#: ../share/filters/filters.svg.h:212
msgid "Metallic foil effect combining two lighting types and variable crumple"
-msgstr ""
-"Alufolieneffekt mit zwei Beleuchtungsarten und einstellbarer Knittrigkeit"
+msgstr "Alufolieneffekt mit zwei Beleuchtungsarten und einstellbarer Knittrigkeit"
#: ../share/filters/filters.svg.h:213
msgid "Copper and chocolate"
msgstr "Kupfer und Schokolade"
#: ../share/filters/filters.svg.h:213
-msgid ""
-"Specular bump which can be easily converted from metallic to molded plastic "
-"effects"
-msgstr ""
-"Glänzende Oberflächenstruktur, die leicht von metallischen zu Geschmolzenes-"
-"Plastik-Effekten wechseln kann"
+msgid "Specular bump which can be easily converted from metallic to molded plastic effects"
+msgstr "Glänzende Oberflächenstruktur, die leicht von metallischen zu Geschmolzenes-Plastik-Effekten wechseln kann"
#: ../share/filters/filters.svg.h:214
msgid "Inner Glow"
@@ -2040,8 +2073,7 @@ msgstr "Holzschnitt"
#: ../share/filters/filters.svg.h:216
msgid "Bumps effect with a bevel, color flood and complex lighting"
-msgstr ""
-"Oberflächenstruktur mit Wölbung, Farbfüllung und komplexer Beleuchtung "
+msgstr "Oberflächenstruktur mit Wölbung, Farbfüllung und komplexer Beleuchtung "
#: ../share/filters/filters.svg.h:217
msgid "Growing cells"
@@ -2065,8 +2097,7 @@ msgstr "Drei-Farben-Palette"
#: ../share/filters/filters.svg.h:219
msgid "Create a tritone palette with hue selectable by flood"
-msgstr ""
-"Erzeugt eine Drei-Farben-Palette mit durch Füllfarbe definierten Farbton"
+msgstr "Erzeugt eine Drei-Farben-Palette mit durch Füllfarbe definierten Farbton"
#: ../share/patterns/patterns.svg.h:2
msgid "Stripes 1:1"
@@ -2233,41 +2264,34 @@ msgid "Old paint (bitmap)"
msgstr "Alte Farbe (Bitmap)"
#: ../src/arc-context.cpp:319
-msgid ""
-"<b>Ctrl</b>: make circle or integer-ratio ellipse, snap arc/segment angle"
-msgstr ""
-"<b>Strg</b>: Kreis oder Ellipse mit ganzzahligem Höhen-/Breitenverhältnis "
-"erzeugen, Winkel vom Bogen/Kreissegment einrasten"
+msgid "<b>Ctrl</b>: make circle or integer-ratio ellipse, snap arc/segment angle"
+msgstr "<b>Strg</b>: Kreis oder Ellipse mit ganzzahligem Höhen-/Breitenverhältnis erzeugen, Winkel vom Bogen/Kreissegment einrasten"
-#: ../src/arc-context.cpp:320 ../src/rect-context.cpp:362
+#: ../src/arc-context.cpp:320
+#: ../src/rect-context.cpp:362
msgid "<b>Shift</b>: draw around the starting point"
msgstr "<b>Umschalt</b>: Um Mittelpunkt zeichnen"
#: ../src/arc-context.cpp:471
#, c-format
-msgid ""
-"<b>Ellipse</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</b> "
-"to draw around the starting point"
-msgstr ""
-"<b>Ellipse</b>: %s &#215; %s (festes Achsenverhältnis %d:%d); <b>Umschalt</"
-"b> zeichnet um Startpunkt"
+msgid "<b>Ellipse</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</b> to draw around the starting point"
+msgstr "<b>Ellipse</b>: %s &#215; %s (festes Achsenverhältnis %d:%d); <b>Umschalt</b> zeichnet um Startpunkt"
#: ../src/arc-context.cpp:473
#, c-format
-msgid ""
-"<b>Ellipse</b>: %s &#215; %s; with <b>Ctrl</b> to make square or integer-"
-"ratio ellipse; with <b>Shift</b> to draw around the starting point"
-msgstr ""
-"<b>Ellipse</b>: %s &#215; %s; <b>Strg</b> drücken für ganzzahliges "
-"Verhältnis der Radien; <b>Umschalt</b> zeichnet um Startpunkt"
+msgid "<b>Ellipse</b>: %s &#215; %s; with <b>Ctrl</b> to make square or integer-ratio ellipse; with <b>Shift</b> to draw around the starting point"
+msgstr "<b>Ellipse</b>: %s &#215; %s; <b>Strg</b> drücken für ganzzahliges Verhältnis der Radien; <b>Umschalt</b> zeichnet um Startpunkt"
#: ../src/arc-context.cpp:499
msgid "Create ellipse"
msgstr "Ellipse erzeugen"
-#: ../src/box3d-context.cpp:429 ../src/box3d-context.cpp:436
-#: ../src/box3d-context.cpp:443 ../src/box3d-context.cpp:450
-#: ../src/box3d-context.cpp:457 ../src/box3d-context.cpp:464
+#: ../src/box3d-context.cpp:429
+#: ../src/box3d-context.cpp:436
+#: ../src/box3d-context.cpp:443
+#: ../src/box3d-context.cpp:450
+#: ../src/box3d-context.cpp:457
+#: ../src/box3d-context.cpp:464
msgid "Change perspective (angle of PLs)"
msgstr "Perspektive ändern (Winkel der Perspektivlinien)"
@@ -2309,35 +2333,33 @@ msgstr "Beende Objektverbinder"
#: ../src/connector-context.cpp:1154
msgid "<b>Connection point</b>: click or drag to create a new connector"
-msgstr ""
-"<b>Verbindungspunkt</b>: klicken oder ziehen, um einen neuen Objektverbinder "
-"zu erzeugen"
+msgstr "<b>Verbindungspunkt</b>: klicken oder ziehen, um einen neuen Objektverbinder zu erzeugen"
#: ../src/connector-context.cpp:1227
msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
-msgstr ""
-"<b>Objektverbinder-Endpunkt</b>: ziehen, um neu zu verlegen oder mit neuen "
-"Formen zu verbinden"
+msgstr "<b>Objektverbinder-Endpunkt</b>: ziehen, um neu zu verlegen oder mit neuen Formen zu verbinden"
#: ../src/connector-context.cpp:1339
msgid "Select <b>at least one non-connector object</b>."
msgstr "<b>Mindestens ein Objekt</b> auswählen, das kein Objektverbinder ist."
-#: ../src/connector-context.cpp:1344 ../src/widgets/toolbox.cpp:6997
+#: ../src/connector-context.cpp:1344
+#: ../src/widgets/toolbox.cpp:6997
msgid "Make connectors avoid selected objects"
msgstr "Objektverbinder weichen den ausgewählten Objekten aus"
-#: ../src/connector-context.cpp:1345 ../src/widgets/toolbox.cpp:7007
+#: ../src/connector-context.cpp:1345
+#: ../src/widgets/toolbox.cpp:7007
msgid "Make connectors ignore selected objects"
msgstr "Objektverbinder ignorieren die ausgewählten Objekte"
-#: ../src/context-fns.cpp:36 ../src/context-fns.cpp:65
+#: ../src/context-fns.cpp:36
+#: ../src/context-fns.cpp:65
msgid "<b>Current layer is hidden</b>. Unhide it to be able to draw on it."
-msgstr ""
-"<b>Aktuelle Ebene ist ausgeblendet</b>. Sichtbar schalten, um darauf zu "
-"zeichnen."
+msgstr "<b>Aktuelle Ebene ist ausgeblendet</b>. Sichtbar schalten, um darauf zu zeichnen."
-#: ../src/context-fns.cpp:42 ../src/context-fns.cpp:71
+#: ../src/context-fns.cpp:42
+#: ../src/context-fns.cpp:71
msgid "<b>Current layer is locked</b>. Unlock it to be able to draw on it."
msgstr "<b>Aktuelle Ebene ist gesperrt</b>. Entsperren, um darauf zu zeichnen."
@@ -2357,7 +2379,8 @@ msgstr "Führungslinie erzeugen"
msgid "Move guide"
msgstr "Führungslinie verschieben"
-#: ../src/desktop-events.cpp:398 ../src/desktop-events.cpp:445
+#: ../src/desktop-events.cpp:398
+#: ../src/desktop-events.cpp:445
#: ../src/ui/dialog/guides.cpp:125
msgid "Delete guide"
msgstr "Führungslinie löschen"
@@ -2400,17 +2423,14 @@ msgstr "<b>Ein Objekt</b> auswählen, dessen gekachelte Klone entfernt werden."
msgid "Delete tiled clones"
msgstr "Gekachelte Klone löschen"
-#: ../src/dialogs/clonetiler.cpp:1097 ../src/selection-chemistry.cpp:1883
+#: ../src/dialogs/clonetiler.cpp:1097
+#: ../src/selection-chemistry.cpp:1883
msgid "Select an <b>object</b> to clone."
msgstr "Zu klonendes <b>Objekt</b> auswählen."
#: ../src/dialogs/clonetiler.cpp:1103
-msgid ""
-"If you want to clone several objects, <b>group</b> them and <b>clone the "
-"group</b>."
-msgstr ""
-"Wenn mehrere Objekte geklont werden sollen, sollten sie <b>gruppiert</b> und "
-"dann <b>die Gruppe geklont</b> werden."
+msgid "If you want to clone several objects, <b>group</b> them and <b>clone the group</b>."
+msgstr "Wenn mehrere Objekte geklont werden sollen, sollten sie <b>gruppiert</b> und dann <b>die Gruppe geklont</b> werden."
#: ../src/dialogs/clonetiler.cpp:1112
msgid "<small>Creating tiled clones...</small>"
@@ -2563,25 +2583,26 @@ msgstr "Vertikale Verschiebung pro Spalte (in % der Kachelhöhe)"
msgid "Randomize the vertical shift by this percentage"
msgstr "Zufällige vertikale Verschiebung um diesen Prozentsatz"
-#: ../src/dialogs/clonetiler.cpp:2027 ../src/dialogs/clonetiler.cpp:2175
+#: ../src/dialogs/clonetiler.cpp:2027
+#: ../src/dialogs/clonetiler.cpp:2175
msgid "<b>Exponent:</b>"
msgstr "<b>Exponent:</b>"
#: ../src/dialogs/clonetiler.cpp:2034
msgid "Whether rows are spaced evenly (1), converge (<1) or diverge (>1)"
-msgstr ""
-"Reihenabstände bleiben gleich (1), laufen zusammen (<1) oder auseinander (>1)"
+msgstr "Reihenabstände bleiben gleich (1), laufen zusammen (<1) oder auseinander (>1)"
#: ../src/dialogs/clonetiler.cpp:2041
msgid "Whether columns are spaced evenly (1), converge (<1) or diverge (>1)"
-msgstr ""
-"Spaltenabstände bleiben gleich (1), laufen zusammen (<1) oder auseinander "
-"(>1)"
+msgstr "Spaltenabstände bleiben gleich (1), laufen zusammen (<1) oder auseinander (>1)"
#. TRANSLATORS: "Alternate" is a verb here
-#: ../src/dialogs/clonetiler.cpp:2049 ../src/dialogs/clonetiler.cpp:2219
-#: ../src/dialogs/clonetiler.cpp:2296 ../src/dialogs/clonetiler.cpp:2372
-#: ../src/dialogs/clonetiler.cpp:2421 ../src/dialogs/clonetiler.cpp:2552
+#: ../src/dialogs/clonetiler.cpp:2049
+#: ../src/dialogs/clonetiler.cpp:2219
+#: ../src/dialogs/clonetiler.cpp:2296
+#: ../src/dialogs/clonetiler.cpp:2372
+#: ../src/dialogs/clonetiler.cpp:2421
+#: ../src/dialogs/clonetiler.cpp:2552
msgid "<small>Alternate:</small>"
msgstr "<small>Abwechseln:</small>"
@@ -2594,7 +2615,8 @@ msgid "Alternate the sign of shifts for each column"
msgstr "Vorzeichenumkehrung der Verschiebungen für jede Spalte"
#. TRANSLATORS: "Cumulate" is a verb here
-#: ../src/dialogs/clonetiler.cpp:2067 ../src/dialogs/clonetiler.cpp:2237
+#: ../src/dialogs/clonetiler.cpp:2067
+#: ../src/dialogs/clonetiler.cpp:2237
#: ../src/dialogs/clonetiler.cpp:2314
msgid "<small>Cumulate:</small>"
msgstr "<small>Anhäufen:</small>"
@@ -2662,26 +2684,20 @@ msgstr "Vertikale Skalierung um diesen Prozentsatz zufällig verändern"
#: ../src/dialogs/clonetiler.cpp:2182
msgid "Whether row scaling is uniform (1), converge (<1) or diverge (>1)"
-msgstr ""
-"Reihenabstände bleiben gleich (1), laufen zusammen (<1) oder vergrößern sich "
-"(>1)"
+msgstr "Reihenabstände bleiben gleich (1), laufen zusammen (<1) oder vergrößern sich (>1)"
#: ../src/dialogs/clonetiler.cpp:2189
msgid "Whether column scaling is uniform (1), converge (<1) or diverge (>1)"
-msgstr ""
-"Spaltenabstände bleiben gleich (1), laufen zusammen (<1) oder vergrößern "
-"sich (>1)"
+msgstr "Spaltenabstände bleiben gleich (1), laufen zusammen (<1) oder vergrößern sich (>1)"
#: ../src/dialogs/clonetiler.cpp:2197
msgid "<b>Base:</b>"
msgstr "<b>Basis:</b>"
-#: ../src/dialogs/clonetiler.cpp:2204 ../src/dialogs/clonetiler.cpp:2211
-msgid ""
-"Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"
-msgstr ""
-"Basis einer logarithmischen Spirale: 0 - nicht benutzt, (<1) - konvergent, "
-"(>1) - divergent"
+#: ../src/dialogs/clonetiler.cpp:2204
+#: ../src/dialogs/clonetiler.cpp:2211
+msgid "Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"
+msgstr "Basis einer logarithmischen Spirale: 0 - nicht benutzt, (<1) - konvergent, (>1) - divergent"
#: ../src/dialogs/clonetiler.cpp:2225
msgid "Alternate the sign of scales for each row"
@@ -2772,13 +2788,11 @@ msgstr "<b>Ausblenden:</b>"
#: ../src/dialogs/clonetiler.cpp:2399
msgid "Decrease tile opacity by this percentage for each row"
-msgstr ""
-"Verringern der Deckkraft der Kacheln um diesen Prozentsatz für jede Reihe"
+msgstr "Verringern der Deckkraft der Kacheln um diesen Prozentsatz für jede Reihe"
#: ../src/dialogs/clonetiler.cpp:2406
msgid "Decrease tile opacity by this percentage for each column"
-msgstr ""
-"Verringern der Deckkraft der Kacheln um diesen Prozentsatz für jede Spalte"
+msgstr "Verringern der Deckkraft der Kacheln um diesen Prozentsatz für jede Spalte"
#: ../src/dialogs/clonetiler.cpp:2413
msgid "Randomize the tile opacity by this percentage"
@@ -2805,12 +2819,8 @@ msgid "Initial color of tiled clones"
msgstr "Ursprüngliche Farbe der gekachelten Klone"
#: ../src/dialogs/clonetiler.cpp:2449
-msgid ""
-"Initial color for clones (works only if the original has unset fill or "
-"stroke)"
-msgstr ""
-"Ursprüngliche Farbe der Klone (Füllung oder Kontur des Originals dürfen "
-"nicht gesetzt sein )"
+msgid "Initial color for clones (works only if the original has unset fill or stroke)"
+msgstr "Ursprüngliche Farbe der Klone (Füllung oder Kontur des Originals dürfen nicht gesetzt sein )"
# !!!
#: ../src/dialogs/clonetiler.cpp:2464
@@ -2836,13 +2846,11 @@ msgstr "<b>S:</b>"
#: ../src/dialogs/clonetiler.cpp:2501
msgid "Change the color saturation by this percentage for each row"
-msgstr ""
-"Farbsättigung der Kacheln um diesen Prozentsatz für jede Reihe verändern"
+msgstr "Farbsättigung der Kacheln um diesen Prozentsatz für jede Reihe verändern"
#: ../src/dialogs/clonetiler.cpp:2508
msgid "Change the color saturation by this percentage for each column"
-msgstr ""
-"Farbsättigung der Kacheln um diesen Prozentsatz für jede Spalte verändern"
+msgstr "Farbsättigung der Kacheln um diesen Prozentsatz für jede Spalte verändern"
#: ../src/dialogs/clonetiler.cpp:2515
msgid "Randomize the color saturation by this percentage"
@@ -2882,12 +2890,8 @@ msgid "Trace the drawing under the tiles"
msgstr "Zeichnung unter den Kacheln vektorisieren"
#: ../src/dialogs/clonetiler.cpp:2582
-msgid ""
-"For each clone, pick a value from the drawing in that clone's location and "
-"apply it to the clone"
-msgstr ""
-"Für jeden Klon den entsprechenden Wert an dessen Stelle aus der Zeichnung "
-"anwenden"
+msgid "For each clone, pick a value from the drawing in that clone's location and apply it to the clone"
+msgstr "Für jeden Klon den entsprechenden Wert an dessen Stelle aus der Zeichnung anwenden"
#: ../src/dialogs/clonetiler.cpp:2596
msgid "1. Pick from the drawing:"
@@ -2897,10 +2901,12 @@ msgstr "1. Von der Zeichnung übernehmen:"
msgid "Pick the visible color and opacity"
msgstr "Sichtbare Farbe und Deckkraft übernehmen"
-#: ../src/dialogs/clonetiler.cpp:2615 ../src/dialogs/clonetiler.cpp:2764
+#: ../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:4326
+#: ../share/extensions/interp_att_g.inx.h:12
msgid "Opacity"
msgstr "Deckkraft"
@@ -2972,9 +2978,7 @@ msgstr "Gammakorrektur:"
#: ../src/dialogs/clonetiler.cpp:2695
msgid "Shift the mid-range of the picked value upwards (>0) or downwards (<0)"
-msgstr ""
-"Mittenbereich des übernommenen Wertes verschieben; nach oben (>0) oder unten "
-"(<0)"
+msgstr "Mittenbereich des übernommenen Wertes verschieben; nach oben (>0) oder unten (<0)"
#: ../src/dialogs/clonetiler.cpp:2702
msgid "Randomize:"
@@ -3001,12 +3005,8 @@ msgid "Presence"
msgstr "Anwesenheit"
#: ../src/dialogs/clonetiler.cpp:2737
-msgid ""
-"Each clone is created with the probability determined by the picked value in "
-"that point"
-msgstr ""
-"Jeder Klon wird mit der Wahrscheinlichkeit erzeugt, welche sich aus dem Wert "
-"an dieser Stelle ergibt"
+msgid "Each clone is created with the probability determined by the picked value in that point"
+msgstr "Jeder Klon wird mit der Wahrscheinlichkeit erzeugt, welche sich aus dem Wert an dieser Stelle ergibt"
#: ../src/dialogs/clonetiler.cpp:2744
msgid "Size"
@@ -3017,17 +3017,12 @@ msgid "Each clone's size is determined by the picked value in that point"
msgstr "Die jeweilige Größe der Klone hängt vom Wert an diesem Punkt ab"
#: ../src/dialogs/clonetiler.cpp:2757
-msgid ""
-"Each clone is painted by the picked color (the original must have unset fill "
-"or stroke)"
-msgstr ""
-"Jeder Klon wird in der übernommenen Farbe gezeichnet (Füllung oder Kontur "
-"des Originals dürfen nicht gesetzt sein)"
+msgid "Each clone is painted by the picked color (the original must have unset fill or stroke)"
+msgstr "Jeder Klon wird in der übernommenen Farbe gezeichnet (Füllung oder Kontur des Originals dürfen nicht gesetzt sein)"
#: ../src/dialogs/clonetiler.cpp:2767
msgid "Each clone's opacity is determined by the picked value in that point"
-msgstr ""
-"Die Deckkraft jedes Klons wird durch den Wert an dieser Stelle bestimmt"
+msgstr "Die Deckkraft jedes Klons wird durch den Wert an dieser Stelle bestimmt"
#: ../src/dialogs/clonetiler.cpp:2794
msgid "How many rows in the tiling"
@@ -3066,12 +3061,8 @@ msgid "Use saved size and position of the tile"
msgstr "Gespeicherte Größe und Position der Kachel verwenden"
#: ../src/dialogs/clonetiler.cpp:2914
-msgid ""
-"Pretend that the size and position of the tile are the same as the last time "
-"you tiled it (if any), instead of using the current size"
-msgstr ""
-"Anstelle der aktuellen Größe die letzte Position und Größe der Kachel/"
-"Musterfüllung vorgeben"
+msgid "Pretend that the size and position of the tile are the same as the last time you tiled it (if any), instead of using the current size"
+msgstr "Anstelle der aktuellen Größe die letzte Position und Größe der Kachel/Musterfüllung vorgeben"
#: ../src/dialogs/clonetiler.cpp:2938
msgid " <b>_Create</b> "
@@ -3092,9 +3083,7 @@ msgstr " Entkl_umpen "
#: ../src/dialogs/clonetiler.cpp:2956
msgid "Spread out clones to reduce clumping; can be applied repeatedly"
-msgstr ""
-"Klone gleichmäßiger verteilen, um das Verklumpen zu verringern; mehrmals "
-"anwendbar"
+msgstr "Klone gleichmäßiger verteilen, um das Verklumpen zu verringern; mehrmals anwendbar"
#: ../src/dialogs/clonetiler.cpp:2962
msgid " Re_move "
@@ -3102,9 +3091,7 @@ msgstr " _Entfernen "
#: ../src/dialogs/clonetiler.cpp:2963
msgid "Remove existing tiled clones of the selected object (siblings only)"
-msgstr ""
-"Vorhandene gekachelte Klone des ausgewählten Objektes entfernen (nur "
-"Geschwister)"
+msgstr "Vorhandene gekachelte Klone des ausgewählten Objektes entfernen (nur Geschwister)"
#: ../src/dialogs/clonetiler.cpp:2979
msgid " R_eset "
@@ -3112,22 +3099,21 @@ msgstr " _Zurücksetzen "
#. TRANSLATORS: "change" is a noun here
#: ../src/dialogs/clonetiler.cpp:2981
-msgid ""
-"Reset all shifts, scales, rotates, opacity and color changes in the dialog "
-"to zero"
-msgstr ""
-"Rücksetzen aller Verschiebungen, Skalierungen, Rotationen und Deckkraft- und "
-"Farbanpassungen im Dialogfenster"
+msgid "Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"
+msgstr "Rücksetzen aller Verschiebungen, Skalierungen, Rotationen und Deckkraft- und Farbanpassungen im Dialogfenster"
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2623
+#: ../src/dialogs/export.cpp:146
+#: ../src/verbs.cpp:2623
msgid "_Page"
msgstr "_Seite"
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2627
+#: ../src/dialogs/export.cpp:146
+#: ../src/verbs.cpp:2627
msgid "_Drawing"
msgstr "_Zeichnung"
-#: ../src/dialogs/export.cpp:146 ../src/verbs.cpp:2629
+#: ../src/dialogs/export.cpp:146
+#: ../src/verbs.cpp:2629
msgid "_Selection"
msgstr "_Auswahl"
@@ -3171,11 +3157,13 @@ msgstr "Höhe:"
msgid "<big><b>Bitmap size</b></big>"
msgstr "<big><b>Bitmap-Größe</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:210
msgid "_Width:"
msgstr "_Breite:"
-#: ../src/dialogs/export.cpp:484 ../src/dialogs/export.cpp:498
+#: ../src/dialogs/export.cpp:484
+#: ../src/dialogs/export.cpp:498
msgid "pixels at"
msgstr "Pixel bei"
@@ -3183,11 +3171,13 @@ msgstr "Pixel bei"
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:211
msgid "_Height:"
msgstr "_Höhe:"
-#: ../src/dialogs/export.cpp:509 ../src/ui/dialog/inkscape-preferences.cpp:768
+#: ../src/dialogs/export.cpp:509
+#: ../src/ui/dialog/inkscape-preferences.cpp:768
#: ../src/ui/dialog/inkscape-preferences.cpp:1180
msgid "dpi"
msgstr "dpi"
@@ -3207,13 +3197,8 @@ msgstr "Alle gewählten Objekte auf einmal exportieren"
# !!! "export hints" are not clear to the user I guess
#: ../src/dialogs/export.cpp:623
-msgid ""
-"Export each selected object into its own PNG file, using export hints if any "
-"(caution, overwrites without asking!)"
-msgstr ""
-"Exportiere jedes gewählte Objekt in eine eigene PNG-Datei, unter "
-"Berücksichtigung von Exporthinweisen, wenn vorhanden (Vorsicht, überschreibt "
-"ohne Warnung!)"
+msgid "Export each selected object into its own PNG file, using export hints if any (caution, overwrites without asking!)"
+msgstr "Exportiere jedes gewählte Objekt in eine eigene PNG-Datei, unter Berücksichtigung von Exporthinweisen, wenn vorhanden (Vorsicht, überschreibt ohne Warnung!)"
#: ../src/dialogs/export.cpp:631
msgid "Hide all except selected"
@@ -3247,7 +3232,8 @@ msgstr "Exportieren läuft"
msgid "Exporting %d files"
msgstr "Exportiere %d Dateien"
-#: ../src/dialogs/export.cpp:1145 ../src/dialogs/export.cpp:1222
+#: ../src/dialogs/export.cpp:1145
+#: ../src/dialogs/export.cpp:1222
#, c-format
msgid "Could not export to filename %s.\n"
msgstr "Konnte nicht als Datei %s exportieren.\n"
@@ -3270,27 +3256,32 @@ msgstr "Das Verzeichnis %s existiert nicht oder ist kein Verzeichnis.\n"
msgid "Exporting %s (%lu x %lu)"
msgstr "Exportiere %s (%lu × %lu)"
-#: ../src/dialogs/export.cpp:1331 ../src/dialogs/export.cpp:1366
+#: ../src/dialogs/export.cpp:1331
+#: ../src/dialogs/export.cpp:1366
msgid "Select a filename for exporting"
msgstr "Wählen Sie einen Namen für die zu exportierende Datei"
#. TRANSLATORS: "%s" is replaced with "exact" or "partial" when this string is displayed
-#: ../src/dialogs/find.cpp:362 ../src/ui/dialog/find.cpp:437
+#: ../src/dialogs/find.cpp:362
+#: ../src/ui/dialog/find.cpp:437
#, c-format
msgid "<b>%d</b> object found (out of <b>%d</b>), %s match."
msgid_plural "<b>%d</b> objects found (out of <b>%d</b>), %s match."
msgstr[0] "<b>%d</b> (von <b>%d</b>) Objekt gefunden, %s passend."
msgstr[1] "<b>%d</b> (von <b>%d</b>) Objekten gefunden, %s passend."
-#: ../src/dialogs/find.cpp:365 ../src/ui/dialog/find.cpp:440
+#: ../src/dialogs/find.cpp:365
+#: ../src/ui/dialog/find.cpp:440
msgid "exact"
msgstr "exakt"
-#: ../src/dialogs/find.cpp:365 ../src/ui/dialog/find.cpp:440
+#: ../src/dialogs/find.cpp:365
+#: ../src/ui/dialog/find.cpp:440
msgid "partial"
msgstr "teilweise"
-#: ../src/dialogs/find.cpp:372 ../src/ui/dialog/find.cpp:447
+#: ../src/dialogs/find.cpp:372
+#: ../src/ui/dialog/find.cpp:447
msgid "No objects found"
msgstr "Keine Objekte gefunden"
@@ -3298,196 +3289,235 @@ msgstr "Keine Objekte gefunden"
msgid "T_ype: "
msgstr "T_yp: "
-#: ../src/dialogs/find.cpp:537 ../src/ui/dialog/find.cpp:69
+#: ../src/dialogs/find.cpp:537
+#: ../src/ui/dialog/find.cpp:69
msgid "Search in all object types"
msgstr "Alle Objekttypen durchsuchen"
-#: ../src/dialogs/find.cpp:537 ../src/ui/dialog/find.cpp:69
+#: ../src/dialogs/find.cpp:537
+#: ../src/ui/dialog/find.cpp:69
msgid "All types"
msgstr "Alle Typen"
-#: ../src/dialogs/find.cpp:548 ../src/ui/dialog/find.cpp:70
+#: ../src/dialogs/find.cpp:548
+#: ../src/ui/dialog/find.cpp:70
msgid "Search all shapes"
msgstr "Alle Formen durchsuchen"
-#: ../src/dialogs/find.cpp:548 ../src/ui/dialog/find.cpp:70
+#: ../src/dialogs/find.cpp:548
+#: ../src/ui/dialog/find.cpp:70
msgid "All shapes"
msgstr "Alle Formen"
-#: ../src/dialogs/find.cpp:565 ../src/ui/dialog/find.cpp:71
+#: ../src/dialogs/find.cpp:565
+#: ../src/ui/dialog/find.cpp:71
msgid "Search rectangles"
msgstr "Rechtecke durchsuchen"
-#: ../src/dialogs/find.cpp:565 ../src/ui/dialog/find.cpp:71
+#: ../src/dialogs/find.cpp:565
+#: ../src/ui/dialog/find.cpp:71
msgid "Rectangles"
msgstr "Rechtecke"
-#: ../src/dialogs/find.cpp:570 ../src/ui/dialog/find.cpp:72
+#: ../src/dialogs/find.cpp:570
+#: ../src/ui/dialog/find.cpp:72
msgid "Search ellipses, arcs, circles"
msgstr "Ellipsen, Bögen und Kreise durchsuchen"
-#: ../src/dialogs/find.cpp:570 ../src/ui/dialog/find.cpp:72
+#: ../src/dialogs/find.cpp:570
+#: ../src/ui/dialog/find.cpp:72
msgid "Ellipses"
msgstr "Ellipsen"
-#: ../src/dialogs/find.cpp:575 ../src/ui/dialog/find.cpp:73
+#: ../src/dialogs/find.cpp:575
+#: ../src/ui/dialog/find.cpp:73
msgid "Search stars and polygons"
msgstr "Sterne und Polygone suchen"
-#: ../src/dialogs/find.cpp:575 ../src/ui/dialog/find.cpp:73
+#: ../src/dialogs/find.cpp:575
+#: ../src/ui/dialog/find.cpp:73
msgid "Stars"
msgstr "Sterne"
-#: ../src/dialogs/find.cpp:580 ../src/ui/dialog/find.cpp:74
+#: ../src/dialogs/find.cpp:580
+#: ../src/ui/dialog/find.cpp:74
msgid "Search spirals"
msgstr "Spiralen durchsuchen"
-#: ../src/dialogs/find.cpp:580 ../src/ui/dialog/find.cpp:74
+#: ../src/dialogs/find.cpp:580
+#: ../src/ui/dialog/find.cpp:74
msgid "Spirals"
msgstr "Spiralen"
#. TRANSLATORS: polyline is a set of connected straight line segments
#. http://www.w3.org/TR/SVG11/shapes.html#PolylineElement
-#: ../src/dialogs/find.cpp:593 ../src/ui/dialog/find.cpp:75
+#: ../src/dialogs/find.cpp:593
+#: ../src/ui/dialog/find.cpp:75
msgid "Search paths, lines, polylines"
msgstr "Pfade, Linien oder Linienzüge suchen"
-#: ../src/dialogs/find.cpp:593 ../src/ui/dialog/find.cpp:75
+#: ../src/dialogs/find.cpp:593
+#: ../src/ui/dialog/find.cpp:75
#: ../src/widgets/toolbox.cpp:2091
msgid "Paths"
msgstr "Pfade"
-#: ../src/dialogs/find.cpp:598 ../src/ui/dialog/find.cpp:76
+#: ../src/dialogs/find.cpp:598
+#: ../src/ui/dialog/find.cpp:76
msgid "Search text objects"
msgstr "Textobjekte durchsuchen"
-#: ../src/dialogs/find.cpp:598 ../src/ui/dialog/find.cpp:76
+#: ../src/dialogs/find.cpp:598
+#: ../src/ui/dialog/find.cpp:76
msgid "Texts"
msgstr "Texte"
-#: ../src/dialogs/find.cpp:603 ../src/ui/dialog/find.cpp:77
+#: ../src/dialogs/find.cpp:603
+#: ../src/ui/dialog/find.cpp:77
msgid "Search groups"
msgstr "Gruppen durchsuchen"
-#: ../src/dialogs/find.cpp:603 ../src/ui/dialog/find.cpp:77
+#: ../src/dialogs/find.cpp:603
+#: ../src/ui/dialog/find.cpp:77
msgid "Groups"
msgstr "Gruppen"
-#: ../src/dialogs/find.cpp:608 ../src/ui/dialog/find.cpp:82
+#: ../src/dialogs/find.cpp:608
+#: ../src/ui/dialog/find.cpp:82
msgid "Search clones"
msgstr "Klone durchsuchen"
#. 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
#. "Clones" is a noun indicating type of object to find
-#: ../src/dialogs/find.cpp:612 ../src/ui/dialog/find.cpp:82
+#: ../src/dialogs/find.cpp:612
+#: ../src/ui/dialog/find.cpp:82
msgid "find|Clones"
msgstr "Klone"
-#: ../src/dialogs/find.cpp:617 ../src/ui/dialog/find.cpp:83
+#: ../src/dialogs/find.cpp:617
+#: ../src/ui/dialog/find.cpp:83
msgid "Search images"
msgstr "Bilder durchsuchen"
-#: ../src/dialogs/find.cpp:617 ../src/ui/dialog/find.cpp:83
+#: ../src/dialogs/find.cpp:617
+#: ../src/ui/dialog/find.cpp:83
#: ../share/extensions/embedimage.inx.h:3
#: ../share/extensions/extractimage.inx.h:2
msgid "Images"
msgstr "Bilder"
-#: ../src/dialogs/find.cpp:622 ../src/ui/dialog/find.cpp:84
+#: ../src/dialogs/find.cpp:622
+#: ../src/ui/dialog/find.cpp:84
msgid "Search offset objects"
msgstr "Objekte mit Versatz finden"
-#: ../src/dialogs/find.cpp:622 ../src/ui/dialog/find.cpp:84
+#: ../src/dialogs/find.cpp:622
+#: ../src/ui/dialog/find.cpp:84
msgid "Offsets"
msgstr "Versatz"
-#: ../src/dialogs/find.cpp:687 ../src/ui/dialog/find.cpp:60
+#: ../src/dialogs/find.cpp:687
+#: ../src/ui/dialog/find.cpp:60
msgid "_Text: "
msgstr "_Text: "
-#: ../src/dialogs/find.cpp:687 ../src/ui/dialog/find.cpp:60
+#: ../src/dialogs/find.cpp:687
+#: ../src/ui/dialog/find.cpp:60
msgid "Find objects by their text content (exact or partial match)"
-msgstr ""
-"Objekte nach ihrem Textinhalt finden (exakte oder partielle Übereinstimmung)"
+msgstr "Objekte nach ihrem Textinhalt finden (exakte oder partielle Übereinstimmung)"
-#: ../src/dialogs/find.cpp:688 ../src/ui/dialog/find.cpp:61
+#: ../src/dialogs/find.cpp:688
+#: ../src/ui/dialog/find.cpp:61
msgid "_ID: "
msgstr "_Kennung: "
-#: ../src/dialogs/find.cpp:688 ../src/ui/dialog/find.cpp:61
+#: ../src/dialogs/find.cpp:688
+#: ../src/ui/dialog/find.cpp:61
msgid "Find objects by the value of the id attribute (exact or partial match)"
-msgstr ""
-"Objekte nach dem Wert ihres id-Attributs finden (exakte oder partielle "
-"Übereinstimmung)"
+msgstr "Objekte nach dem Wert ihres id-Attributs finden (exakte oder partielle Übereinstimmung)"
-#: ../src/dialogs/find.cpp:689 ../src/ui/dialog/find.cpp:62
+#: ../src/dialogs/find.cpp:689
+#: ../src/ui/dialog/find.cpp:62
msgid "_Style: "
msgstr "_Stil: "
-#: ../src/dialogs/find.cpp:689 ../src/ui/dialog/find.cpp:62
-msgid ""
-"Find objects by the value of the style attribute (exact or partial match)"
-msgstr ""
-"Objekte nach ihren Stilen finden (exakte oder teilweise Übereinstimmung)"
+#: ../src/dialogs/find.cpp:689
+#: ../src/ui/dialog/find.cpp:62
+msgid "Find objects by the value of the style attribute (exact or partial match)"
+msgstr "Objekte nach ihren Stilen finden (exakte oder teilweise Übereinstimmung)"
-#: ../src/dialogs/find.cpp:690 ../src/ui/dialog/find.cpp:63
+#: ../src/dialogs/find.cpp:690
+#: ../src/ui/dialog/find.cpp:63
msgid "_Attribute: "
msgstr "_Attribut: "
-#: ../src/dialogs/find.cpp:690 ../src/ui/dialog/find.cpp:63
+#: ../src/dialogs/find.cpp:690
+#: ../src/ui/dialog/find.cpp:63
msgid "Find objects by the name of an attribute (exact or partial match)"
-msgstr ""
-"Objekte nach Attributnamen finden (exakte oder partielle Übereinstimmung)"
+msgstr "Objekte nach Attributnamen finden (exakte oder partielle Übereinstimmung)"
-#: ../src/dialogs/find.cpp:704 ../src/ui/dialog/find.cpp:64
+#: ../src/dialogs/find.cpp:704
+#: ../src/ui/dialog/find.cpp:64
msgid "Search in s_election"
msgstr "_Auswahl durchsuchen"
-#: ../src/dialogs/find.cpp:708 ../src/ui/dialog/find.cpp:64
+#: ../src/dialogs/find.cpp:708
+#: ../src/ui/dialog/find.cpp:64
msgid "Limit search to the current selection"
msgstr "Suche auf aktuelle Auswahl beschränken"
-#: ../src/dialogs/find.cpp:713 ../src/ui/dialog/find.cpp:65
+#: ../src/dialogs/find.cpp:713
+#: ../src/ui/dialog/find.cpp:65
msgid "Search in current _layer"
msgstr "In aktueller _Ebene suchen"
-#: ../src/dialogs/find.cpp:717 ../src/ui/dialog/find.cpp:65
+#: ../src/dialogs/find.cpp:717
+#: ../src/ui/dialog/find.cpp:65
msgid "Limit search to the current layer"
msgstr "Suche auf aktuelle Ebene beschränken"
-#: ../src/dialogs/find.cpp:722 ../src/ui/dialog/find.cpp:66
+#: ../src/dialogs/find.cpp:722
+#: ../src/ui/dialog/find.cpp:66
msgid "Include _hidden"
msgstr "Einschließlich _Ausgeblendete"
-#: ../src/dialogs/find.cpp:726 ../src/ui/dialog/find.cpp:66
+#: ../src/dialogs/find.cpp:726
+#: ../src/ui/dialog/find.cpp:66
msgid "Include hidden objects in search"
msgstr "Ausgeblendete Objekte bei Suche berücksichtigen"
-#: ../src/dialogs/find.cpp:731 ../src/ui/dialog/find.cpp:67
+#: ../src/dialogs/find.cpp:731
+#: ../src/ui/dialog/find.cpp:67
msgid "Include l_ocked"
msgstr "Einschließlich _Gesperrte"
-#: ../src/dialogs/find.cpp:735 ../src/ui/dialog/find.cpp:67
+#: ../src/dialogs/find.cpp:735
+#: ../src/ui/dialog/find.cpp:67
msgid "Include locked objects in search"
msgstr "Gesperrte Objekte bei Suche berücksichtigen"
#. TRANSLATORS: "Clear" is a verb here
-#: ../src/dialogs/find.cpp:746 ../src/ui/dialog/debug.cpp:75
-#: ../src/ui/dialog/find.cpp:86 ../src/ui/dialog/messages.cpp:53
+#: ../src/dialogs/find.cpp:746
+#: ../src/ui/dialog/debug.cpp:75
+#: ../src/ui/dialog/find.cpp:86
+#: ../src/ui/dialog/messages.cpp:53
#: ../src/ui/dialog/scriptdialog.cpp:209
msgid "_Clear"
msgstr "_Leeren"
-#: ../src/dialogs/find.cpp:746 ../src/ui/dialog/find.cpp:86
+#: ../src/dialogs/find.cpp:746
+#: ../src/ui/dialog/find.cpp:86
msgid "Clear values"
msgstr "Werte zurücksetzen"
-#: ../src/dialogs/find.cpp:747 ../src/ui/dialog/find.cpp:87
+#: ../src/dialogs/find.cpp:747
+#: ../src/ui/dialog/find.cpp:87
msgid "_Find"
msgstr "_Suchen"
-#: ../src/dialogs/find.cpp:747 ../src/ui/dialog/find.cpp:87
+#: ../src/dialogs/find.cpp:747
+#: ../src/ui/dialog/find.cpp:87
msgid "Select objects matching all of the fields you filled in"
msgstr "Wähle Objekte aus, die zu allen angegebene Feldern passen"
@@ -3500,14 +3530,12 @@ msgid "_Id"
msgstr "_ID-Kennung"
#: ../src/dialogs/item-properties.cpp:129
-msgid ""
-"The id= attribute (only letters, digits, and the characters .-_: allowed)"
-msgstr ""
-"Das Kennungsattribut \"id=\" (nur Buchstaben, Ziffern und die Zeichen \".-_:"
-"\" zulässig)"
+msgid "The id= attribute (only letters, digits, and the characters .-_: allowed)"
+msgstr "Das Kennungsattribut \"id=\" (nur Buchstaben, Ziffern und die Zeichen \".-_:\" zulässig)"
#. Button for setting the object's id, label, title and description.
-#: ../src/dialogs/item-properties.cpp:143 ../src/verbs.cpp:2486
+#: ../src/dialogs/item-properties.cpp:143
+#: ../src/verbs.cpp:2486
#: ../src/verbs.cpp:2492
msgid "_Set"
msgstr "_Setzen"
@@ -3650,22 +3678,28 @@ msgid "URL:"
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/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
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/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
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:4124
+#: ../src/widgets/toolbox.cpp:4715
+#: ../src/widgets/toolbox.cpp:5734
msgid "Width:"
msgstr "Breite:"
@@ -3760,7 +3794,8 @@ msgstr "Überprüfung starten"
msgid "Font"
msgstr "Schrift"
-#: ../src/dialogs/text-edit.cpp:221 ../share/extensions/svgcalendar.inx.h:12
+#: ../src/dialogs/text-edit.cpp:221
+#: ../share/extensions/svgcalendar.inx.h:12
msgid "Layout"
msgstr "Ausrichtung"
@@ -3781,11 +3816,13 @@ msgstr "Zeilen rechts ausrichten"
msgid "Justify lines"
msgstr "Blocksatz"
-#: ../src/dialogs/text-edit.cpp:300 ../src/widgets/toolbox.cpp:6804
+#: ../src/dialogs/text-edit.cpp:300
+#: ../src/widgets/toolbox.cpp:6804
msgid "Horizontal text"
msgstr "Horizontale Textausrichtung"
-#: ../src/dialogs/text-edit.cpp:314 ../src/widgets/toolbox.cpp:6816
+#: ../src/dialogs/text-edit.cpp:314
+#: ../src/widgets/toolbox.cpp:6816
msgid "Vertical text"
msgstr "Vertikale Textausrichtung"
@@ -3794,8 +3831,10 @@ msgid "Line spacing:"
msgstr "Zeilenabstand:"
#. Text
-#: ../src/dialogs/text-edit.cpp:375 ../src/selection-describer.cpp:69
-#: ../src/ui/dialog/inkscape-preferences.cpp:522 ../src/verbs.cpp:2522
+#: ../src/dialogs/text-edit.cpp:375
+#: ../src/selection-describer.cpp:69
+#: ../src/ui/dialog/inkscape-preferences.cpp:522
+#: ../src/verbs.cpp:2522
#: ../share/extensions/lorem_ipsum.inx.h:5
#: ../share/extensions/render_alphabetsoup.inx.h:5
#: ../share/extensions/text_braille.inx.h:2
@@ -3813,7 +3852,8 @@ msgstr "Text"
msgid "Set as default"
msgstr "Zur Vorgabe machen"
-#: ../src/dialogs/text-edit.cpp:665 ../src/text-context.cpp:1493
+#: ../src/dialogs/text-edit.cpp:665
+#: ../src/text-context.cpp:1493
msgid "Set text style"
msgstr "Textstil setzen"
@@ -3827,12 +3867,8 @@ msgstr "<b>Klick</b> auf Attribut zum Bearbeiten."
#: ../src/dialogs/xml-tree.cpp:167
#, c-format
-msgid ""
-"Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to "
-"commit changes."
-msgstr ""
-"Attribut <b>%s</b> ausgewählt. <b>Strg+Eingabe</b> schließt ab und übernimmt "
-"Änderungen."
+msgid "Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to commit changes."
+msgstr "Attribut <b>%s</b> ausgewählt. <b>Strg+Eingabe</b> schließt ab und übernimmt Änderungen."
#: ../src/dialogs/xml-tree.cpp:263
msgid "Drag to reorder nodes"
@@ -3846,7 +3882,8 @@ msgstr "Neuer Elementknoten"
msgid "New text node"
msgstr "Neuer Textknoten"
-#: ../src/dialogs/xml-tree.cpp:326 ../src/dialogs/xml-tree.cpp:1409
+#: ../src/dialogs/xml-tree.cpp:326
+#: ../src/dialogs/xml-tree.cpp:1409
#: ../src/nodepath.cpp:2249
msgid "Duplicate node"
msgstr "Knoten duplizieren"
@@ -3855,23 +3892,28 @@ msgstr "Knoten duplizieren"
msgid "nodeAsInXMLdialogTooltip|Delete node"
msgstr "Knoten löschen"
-#: ../src/dialogs/xml-tree.cpp:363 ../src/dialogs/xml-tree.cpp:1571
+#: ../src/dialogs/xml-tree.cpp:363
+#: ../src/dialogs/xml-tree.cpp:1571
msgid "Unindent node"
msgstr "Einrückung des Knotens verringern"
-#: ../src/dialogs/xml-tree.cpp:378 ../src/dialogs/xml-tree.cpp:1550
+#: ../src/dialogs/xml-tree.cpp:378
+#: ../src/dialogs/xml-tree.cpp:1550
msgid "Indent node"
msgstr "Knoten einrücken"
-#: ../src/dialogs/xml-tree.cpp:390 ../src/dialogs/xml-tree.cpp:1503
+#: ../src/dialogs/xml-tree.cpp:390
+#: ../src/dialogs/xml-tree.cpp:1503
msgid "Raise node"
msgstr "Knoten anheben"
-#: ../src/dialogs/xml-tree.cpp:402 ../src/dialogs/xml-tree.cpp:1520
+#: ../src/dialogs/xml-tree.cpp:402
+#: ../src/dialogs/xml-tree.cpp:1520
msgid "Lower node"
msgstr "Knoten absenken"
-#: ../src/dialogs/xml-tree.cpp:447 ../src/dialogs/xml-tree.cpp:1444
+#: ../src/dialogs/xml-tree.cpp:447
+#: ../src/dialogs/xml-tree.cpp:1444
msgid "Delete attribute"
msgstr "Attribut löschen"
@@ -3881,7 +3923,8 @@ msgid "Attribute name"
msgstr "Attributname"
#. TRANSLATORS: "Set" is a verb here
-#: ../src/dialogs/xml-tree.cpp:512 ../src/widgets/sp-attribute-widget.cpp:158
+#: ../src/dialogs/xml-tree.cpp:512
+#: ../src/widgets/sp-attribute-widget.cpp:158
#: ../src/widgets/sp-attribute-widget.cpp:765
msgid "Set attribute"
msgstr "Attribut festlegen"
@@ -3928,31 +3971,37 @@ msgstr "Knoten löschen"
msgid "Change attribute"
msgstr "Attribut ändern"
-#: ../src/display/canvas-axonomgrid.cpp:396 ../src/display/canvas-grid.cpp:670
+#: ../src/display/canvas-axonomgrid.cpp:396
+#: ../src/display/canvas-grid.cpp:670
msgid "Grid _units:"
msgstr "Gitter-Raster_einheiten:"
-#: ../src/display/canvas-axonomgrid.cpp:398 ../src/display/canvas-grid.cpp:672
+#: ../src/display/canvas-axonomgrid.cpp:398
+#: ../src/display/canvas-grid.cpp:672
msgid "_Origin X:"
msgstr "_Ursprung X:"
-#: ../src/display/canvas-axonomgrid.cpp:398 ../src/display/canvas-grid.cpp:672
+#: ../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
msgid "X coordinate of grid origin"
msgstr "X-Koordinate des Gitterursprungs"
-#: ../src/display/canvas-axonomgrid.cpp:400 ../src/display/canvas-grid.cpp:674
+#: ../src/display/canvas-axonomgrid.cpp:400
+#: ../src/display/canvas-grid.cpp:674
msgid "O_rigin Y:"
msgstr "U_rsprung Y:"
-#: ../src/display/canvas-axonomgrid.cpp:400 ../src/display/canvas-grid.cpp:674
+#: ../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
msgid "Y coordinate of grid origin"
msgstr "Y-Koordinate des Gitterursprungs"
-#: ../src/display/canvas-axonomgrid.cpp:402 ../src/display/canvas-grid.cpp:678
+#: ../src/display/canvas-axonomgrid.cpp:402
+#: ../src/display/canvas-grid.cpp:678
msgid "Spacing _Y:"
msgstr "Abstand _Y:"
@@ -3983,35 +4032,43 @@ msgstr "Winkel Z:"
msgid "Angle of z-axis"
msgstr "Winkel der Z-Achse"
-#: ../src/display/canvas-axonomgrid.cpp:410 ../src/display/canvas-grid.cpp:682
+#: ../src/display/canvas-axonomgrid.cpp:410
+#: ../src/display/canvas-grid.cpp:682
msgid "Grid line _color:"
msgstr "_Farbe der Gitterlinien:"
-#: ../src/display/canvas-axonomgrid.cpp:410 ../src/display/canvas-grid.cpp:682
+#: ../src/display/canvas-axonomgrid.cpp:410
+#: ../src/display/canvas-grid.cpp:682
msgid "Grid line color"
msgstr "Farbe der Gitterlinien"
-#: ../src/display/canvas-axonomgrid.cpp:410 ../src/display/canvas-grid.cpp:682
+#: ../src/display/canvas-axonomgrid.cpp:410
+#: ../src/display/canvas-grid.cpp:682
msgid "Color of grid lines"
msgstr "Farbe der Gitterlinien"
-#: ../src/display/canvas-axonomgrid.cpp:415 ../src/display/canvas-grid.cpp:687
+#: ../src/display/canvas-axonomgrid.cpp:415
+#: ../src/display/canvas-grid.cpp:687
msgid "Ma_jor grid line color:"
msgstr "Farbe der _dicken Gitterlinien:"
-#: ../src/display/canvas-axonomgrid.cpp:415 ../src/display/canvas-grid.cpp:687
+#: ../src/display/canvas-axonomgrid.cpp:415
+#: ../src/display/canvas-grid.cpp:687
msgid "Major grid line color"
msgstr "Farbe der dicken Gitterlinien"
-#: ../src/display/canvas-axonomgrid.cpp:416 ../src/display/canvas-grid.cpp:688
+#: ../src/display/canvas-axonomgrid.cpp:416
+#: ../src/display/canvas-grid.cpp:688
msgid "Color of the major (highlighted) grid lines"
msgstr "Farbe der dicken (hervorgehobenen) Gitterlinien"
-#: ../src/display/canvas-axonomgrid.cpp:420 ../src/display/canvas-grid.cpp:692
+#: ../src/display/canvas-axonomgrid.cpp:420
+#: ../src/display/canvas-grid.cpp:692
msgid "_Major grid line every:"
msgstr "D_icke Gitterlinien alle:"
-#: ../src/display/canvas-axonomgrid.cpp:420 ../src/display/canvas-grid.cpp:692
+#: ../src/display/canvas-axonomgrid.cpp:420
+#: ../src/display/canvas-grid.cpp:692
msgid "lines"
msgstr "Linien"
@@ -4032,36 +4089,24 @@ msgid "_Enabled"
msgstr "_Eingeschaltet"
#: ../src/display/canvas-grid.cpp:325
-msgid ""
-"Determines whether to snap to this grid or not. Can be 'on' for invisible "
-"grids."
-msgstr ""
-"Legt fest, ob an diesem Raster eingerastet werden soll. Kann auch für "
-"unsichtbare Gitter gesetzt sein."
+msgid "Determines whether to snap to this grid or not. Can be 'on' for invisible grids."
+msgstr "Legt fest, ob an diesem Raster eingerastet werden soll. Kann auch für unsichtbare Gitter gesetzt sein."
#: ../src/display/canvas-grid.cpp:329
msgid "Snap to visible _grid lines only"
msgstr "Nur an sichtbaren _Gitternlinien einrasten"
#: ../src/display/canvas-grid.cpp:330
-msgid ""
-"When zoomed out, not all grid lines will be displayed. Only the visible ones "
-"will be snapped to"
-msgstr ""
-"Nicht alle Gitterlinien werden dargestellt, wenn stark heraus gezoomt wird. "
-"Nur auf Sichtbare wird eingerastet."
+msgid "When zoomed out, not all grid lines will be displayed. Only the visible ones will be snapped to"
+msgstr "Nicht alle Gitterlinien werden dargestellt, wenn stark heraus gezoomt wird. Nur auf Sichtbare wird eingerastet."
#: ../src/display/canvas-grid.cpp:334
msgid "_Visible"
msgstr "Sichtbar"
#: ../src/display/canvas-grid.cpp:335
-msgid ""
-"Determines whether the grid is displayed or not. Objects are still snapped "
-"to invisible grids."
-msgstr ""
-"Legt fest, ob das Raster angezeigt werden soll. Objekte rasten auch an "
-"unsichtbaren Gittern ein."
+msgid "Determines whether the grid is displayed or not. Objects are still snapped to invisible grids."
+msgstr "Legt fest, ob das Raster angezeigt werden soll. Objekte rasten auch an unsichtbaren Gittern ein."
#: ../src/display/canvas-grid.cpp:676
msgid "Spacing _X:"
@@ -4086,8 +4131,10 @@ msgid "If set, displays dots at gridpoints instead of gridlines"
msgstr "Wenn gesetzt, Punkte an Gitterpunkten anstelle Gitterlinien verwenden"
#. TRANSLATORS: undefined target for snapping
-#: ../src/display/snap-indicator.cpp:60 ../src/display/snap-indicator.cpp:63
-#: ../src/display/snap-indicator.cpp:148 ../src/display/snap-indicator.cpp:151
+#: ../src/display/snap-indicator.cpp:60
+#: ../src/display/snap-indicator.cpp:63
+#: ../src/display/snap-indicator.cpp:148
+#: ../src/display/snap-indicator.cpp:151
msgid "UNDEFINED"
msgstr "UNBESTIMMT"
@@ -4251,7 +4298,8 @@ msgstr "Konvexe Hülllinienecke"
msgid "Quadrant point"
msgstr "Quadrantenpunkt"
-#: ../src/display/snap-indicator.cpp:196 ../src/widgets/toolbox.cpp:6734
+#: ../src/display/snap-indicator.cpp:196
+#: ../src/widgets/toolbox.cpp:6734
msgid "Center"
msgstr "Zentrieren"
@@ -4327,26 +4375,18 @@ msgstr " unter Zeiger"
msgid "<b>Release mouse</b> to set color."
msgstr "<b>Maustaste loslassen</b>, um die Farbe zu übernehmen."
-#: ../src/dropper-context.cpp:306 ../src/tools-switch.cpp:208
-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>Klick</b> setzt Füllfarbe, <b>Umschalt+Klick</b> setzt Linienfarbe; "
-"<b>Ziehen</b> - Durchschnittsfarbe im Gebiet. <b>Strg+C</b> - Farbe nach "
-"Zwischenablage"
+#: ../src/dropper-context.cpp:306
+#: ../src/tools-switch.cpp:208
+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>Klick</b> setzt Füllfarbe, <b>Umschalt+Klick</b> setzt Linienfarbe; <b>Ziehen</b> - Durchschnittsfarbe im Gebiet. <b>Strg+C</b> - Farbe nach Zwischenablage"
#: ../src/dropper-context.cpp:344
msgid "Set picked color"
msgstr "Übernommene Farbe setzen"
#: ../src/dyna-draw-context.cpp:615
-msgid ""
-"<b>Guide path selected</b>; start drawing along the guide with <b>Ctrl</b>"
-msgstr ""
-"<b>Führungspfad ausgewählt</b>; starte Zeichnen entlang der Führung mit "
-"<b>Strg</b>"
+msgid "<b>Guide path selected</b>; start drawing along the guide with <b>Ctrl</b>"
+msgstr "<b>Führungspfad ausgewählt</b>; starte Zeichnen entlang der Führung mit <b>Strg</b>"
#: ../src/dyna-draw-context.cpp:617
msgid "<b>Select a guide path</b> to track with <b>Ctrl</b>"
@@ -4385,12 +4425,16 @@ msgid "[Unchanged]"
msgstr "[Unverändert]"
#. 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:2276
msgid "_Undo"
msgstr "_Rückgängig"
# !!! "Wiederholen" wird evtl. spaeter fuer "repeat" gebraucht
-#: ../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:2278
msgid "_Redo"
msgstr "_Wiederherstellen"
@@ -4421,19 +4465,13 @@ msgstr " (Keine Einstellungen)"
#. This is some filler text, needs to change before relase
#: ../src/extension/error-file.cpp:53
msgid ""
-"<span weight=\"bold\" size=\"larger\">One or more extensions failed to load</"
-"span>\n"
+"<span weight=\"bold\" size=\"larger\">One or more extensions failed to load</span>\n"
"\n"
-"The failed extensions have been skipped. Inkscape will continue to run "
-"normally but those extensions will be unavailable. For details to "
-"troubleshoot this problem, please refer to the error log located at: "
+"The failed extensions have been skipped. Inkscape will continue to run normally but those extensions will be unavailable. For details to troubleshoot this problem, please refer to the error log located at: "
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Eine oder mehrere Erweiterungen "
-"konnten nicht geladen werden.</span>\n"
+"<span weight=\"bold\" size=\"larger\">Eine oder mehrere Erweiterungen konnten nicht geladen werden.</span>\n"
"\n"
-"Nicht verfügbare Eweiterungen wurden ausgelassen. Inkscape setzt seinen "
-"normalen Ablauf fort, doch diese Erweiterungen können nicht benutzt werden. "
-"Details zum Beheben des Problems finden sich in der Logdatei unter: "
+"Nicht verfügbare Eweiterungen wurden ausgelassen. Inkscape setzt seinen normalen Ablauf fort, doch diese Erweiterungen können nicht benutzt werden. Details zum Beheben des Problems finden sich in der Logdatei unter: "
#: ../src/extension/error-file.cpp:63
msgid "Show dialog on startup"
@@ -4447,13 +4485,8 @@ msgstr "»%s« arbeitet, bitte warten…"
#. static int i = 0;
#. std::cout << "Checking module[" << i++ << "]: " << name << std::endl;
#: ../src/extension/extension.cpp:252
-msgid ""
-" This is caused by an improper .inx file for this extension. An improper ."
-"inx file could have been caused by a faulty installation of Inkscape."
-msgstr ""
-" Dies wurde durch eine fehlerhafte .inx Datei dieser Erweiterung verursacht. "
-"Eine fehlerhafte .inx Datei kann Folge einer Fehlinstallation von Inkscape "
-"sein."
+msgid " This is caused by an improper .inx file for this extension. An improper .inx file could have been caused by a faulty installation of Inkscape."
+msgstr " Dies wurde durch eine fehlerhafte .inx Datei dieser Erweiterung verursacht. Eine fehlerhafte .inx Datei kann Folge einer Fehlinstallation von Inkscape sein."
#: ../src/extension/extension.cpp:255
msgid "an ID was not defined for it."
@@ -4514,24 +4547,12 @@ msgid "Deactivated"
msgstr "Deaktiviert"
#: ../src/extension/extension.cpp:756
-msgid ""
-"Currently there is no help available for this Extension. Please look on the "
-"Inkscape website or ask on the mailing lists if you have questions regarding "
-"this extension."
-msgstr ""
-"Für diese Erweiterung ist zur Zeit keine Hilfe verfügbar. Besuchen Sie die "
-"Inkscape Webseite oder wenden Sie sich an die Mailing List wenn Sie Fragen "
-"bezüglich dieser Erweiterung haben."
+msgid "Currently there is no help available for this Extension. Please look on the Inkscape website or ask on the mailing lists if you have questions regarding this extension."
+msgstr "Für diese Erweiterung ist zur Zeit keine Hilfe verfügbar. Besuchen Sie die Inkscape Webseite oder wenden Sie sich an die Mailing List wenn Sie Fragen bezüglich dieser Erweiterung haben."
#: ../src/extension/implementation/script.cpp:1060
-msgid ""
-"Inkscape has received additional data from the script executed. The script "
-"did not return an error, but this may indicate the results will not be as "
-"expected."
-msgstr ""
-"Das aufgerufene Skript hat zusätzliche Daten an Inkscape übergeben. Es wurde "
-"keine Fehlermeldung vom Skript zurückgegeben, doch das Resultat ist "
-"möglicherweise unbrauchbar."
+msgid "Inkscape has received additional data from the script executed. The script did not return an error, but this may indicate the results will not be as expected."
+msgstr "Das aufgerufene Skript hat zusätzliche Daten an Inkscape übergeben. Es wurde keine Fehlermeldung vom Skript zurückgegeben, doch das Resultat ist möglicherweise unbrauchbar."
#: ../src/extension/init.cpp:274
msgid "Null external module directory name. Modules will not be loaded."
@@ -4540,12 +4561,8 @@ msgstr "Modulverzeichnis ist nicht verfügbar. Module werden nicht geladen."
#: ../src/extension/init.cpp:288
#: ../src/extension/internal/filter/filter-file.cpp:56
#, c-format
-msgid ""
-"Modules directory (%s) is unavailable. External modules in that directory "
-"will not be loaded."
-msgstr ""
-"Das Modulverzeichnis (%s) ist nicht verfügbar. Externe Module in diesem "
-"Verzeichnis werden nicht geladen."
+msgid "Modules directory (%s) is unavailable. External modules in that directory will not be loaded."
+msgstr "Das Modulverzeichnis (%s) ist nicht verfügbar. Externe Module in diesem Verzeichnis werden nicht geladen."
#: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:38
msgid "Adaptive Threshold"
@@ -4554,11 +4571,13 @@ msgstr "Adaptiver Schwellwert"
#: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:40
#: ../src/extension/internal/bitmap/raise.cpp:41
#: ../src/extension/internal/bitmap/sample.cpp:40
-#: ../src/extension/internal/bluredge.cpp:136 ../src/libgdl/gdl-dock.c:190
+#: ../src/extension/internal/bluredge.cpp:136
+#: ../src/libgdl/gdl-dock.c:190
#: ../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:3095
+#: ../src/widgets/toolbox.cpp:4124
#: ../share/extensions/foldablebox.inx.h:9
#: ../share/extensions/interp_att_g.inx.h:26
msgid "Width"
@@ -4566,15 +4585,18 @@ msgstr "Breite"
#: ../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/extension/internal/bitmap/sample.cpp:41
+#: ../src/libgdl/gdl-dock.c:198
+#: ../src/libgdl/gdl-dock-placeholder.c:177
+#: ../src/widgets/toolbox.cpp:3112
#: ../share/extensions/foldablebox.inx.h:4
#: ../share/extensions/interp_att_g.inx.h:6
msgid "Height"
msgstr "Höhe"
#: ../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:96
#: ../src/live_effects/lpe-ruler.cpp:50
msgid "Offset"
msgstr "Versatz"
@@ -4625,7 +4647,8 @@ msgstr "Wende adaptiven Schwellwert auf ausgewählte(s) Bitmap(s) an"
msgid "Add Noise"
msgstr "Rauschen hinzufügen"
-#: ../src/extension/internal/bitmap/addNoise.cpp:46 ../src/rdf.cpp:238
+#: ../src/extension/internal/bitmap/addNoise.cpp:46
+#: ../src/rdf.cpp:238
msgid "Type"
msgstr "Typ"
@@ -4802,9 +4825,7 @@ msgstr "Betone Kanten der ausgewählten Bilder."
#: ../src/extension/internal/bitmap/emboss.cpp:46
msgid "Emboss selected bitmap(s) -- highlight edges with 3D effect."
-msgstr ""
-"Kanten in Ausgewählten Bitmaps herausheben -- Hebt Kanten mit einem 3D-"
-"Effekt hervor."
+msgstr "Kanten in Ausgewählten Bitmaps herausheben -- Hebt Kanten mit einem 3D-Effekt hervor."
#: ../src/extension/internal/bitmap/enhance.cpp:34
msgid "Enhance"
@@ -4865,56 +4886,48 @@ msgid "Gamma Correction"
msgstr "Gammakorrektur"
#: ../src/extension/internal/bitmap/levelChannel.cpp:72
-msgid ""
-"Level the specified channel of selected bitmap(s) by scaling values falling "
-"between the given ranges to the full color range."
-msgstr ""
-"Bestimmten Kanal in ausgewählten Bitmaps angleichen, indem Werte im "
-"angegebenen Bereich zum vollen Farbumfang hochskaliert werden."
+msgid "Level the specified channel of selected bitmap(s) by scaling values falling between the given ranges to the full color range."
+msgstr "Bestimmten Kanal in ausgewählten Bitmaps angleichen, indem Werte im angegebenen Bereich zum vollen Farbumfang hochskaliert werden."
#: ../src/extension/internal/bitmap/level.cpp:40
msgid "Level"
msgstr "Ebene"
#: ../src/extension/internal/bitmap/level.cpp:50
-msgid ""
-"Level selected bitmap(s) by scaling values falling between the given ranges "
-"to the full color range."
-msgstr ""
-"Ausgewählte Bitmap(s) angleichen, in dem Werte im angegebenen Bereich auf "
-"die volle Farbskala abgebildet werden"
+msgid "Level selected bitmap(s) by scaling values falling between the given ranges to the full color range."
+msgstr "Ausgewählte Bitmap(s) angleichen, in dem Werte im angegebenen Bereich auf die volle Farbskala abgebildet werden"
#: ../src/extension/internal/bitmap/medianFilter.cpp:36
msgid "Median"
msgstr "Zentralwert"
#: ../src/extension/internal/bitmap/medianFilter.cpp:44
-msgid ""
-"Replace each pixel component with the median color in a circular "
-"neighborhood."
-msgstr ""
-"Jede Pixelkomponente mit dem Zentralwert aus einer kreisförmigen Umgebung "
-"ersetzen"
+msgid "Replace each pixel component with the median color in a circular neighborhood."
+msgstr "Jede Pixelkomponente mit dem Zentralwert aus einer kreisförmigen Umgebung ersetzen"
#: ../src/extension/internal/bitmap/modulate.cpp:39
msgid "HSB Adjust"
msgstr "HSB anpassen"
#: ../src/extension/internal/bitmap/modulate.cpp:41
-#: ../src/flood-context.cpp:250 ../src/widgets/sp-color-icc-selector.cpp:236
+#: ../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:4281
#: ../share/extensions/color_randomize.inx.h:2
msgid "Hue"
msgstr "Farbton"
#: ../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:830
#: ../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:4296
#: ../share/extensions/color_randomize.inx.h:5
msgid "Saturation"
msgstr "Sättigung"
@@ -4924,8 +4937,7 @@ msgid "Brightness"
msgstr "Helligkeit"
#: ../src/extension/internal/bitmap/modulate.cpp:49
-msgid ""
-"Adjust the amount of hue, saturation, and brightness in selected bitmap(s)"
+msgid "Adjust the amount of hue, saturation, and brightness in selected bitmap(s)"
msgstr "Farbwert, Sättigung und Helligkeit in ausgewählten Bitmaps anpassen"
#: ../src/extension/internal/bitmap/negate.cpp:35
@@ -4941,12 +4953,8 @@ msgid "Normalize"
msgstr "Normalisieren"
#: ../src/extension/internal/bitmap/normalize.cpp:42
-msgid ""
-"Normalize selected bitmap(s), expanding color range to the full possible "
-"range of color."
-msgstr ""
-"Normalisiert die ausgewählten Bitmaps, streckt das Farbspektrum auf die "
-"volle Breite."
+msgid "Normalize selected bitmap(s), expanding color range to the full possible range of color."
+msgstr "Normalisiert die ausgewählten Bitmaps, streckt das Farbspektrum auf die volle Breite."
#: ../src/extension/internal/bitmap/oilPaint.cpp:36
msgid "Oil Paint"
@@ -4954,8 +4962,7 @@ msgstr "Ölgemälde"
#: ../src/extension/internal/bitmap/oilPaint.cpp:44
msgid "Stylize selected bitmap(s) so that they appear to be painted with oils."
-msgstr ""
-"Lässt ausgewählte Bitmap(s) aussehen, als ob sie mit Ölfarbe gemalt seien."
+msgstr "Lässt ausgewählte Bitmap(s) aussehen, als ob sie mit Ölfarbe gemalt seien."
#: ../src/extension/internal/bitmap/opacity.cpp:45
msgid "Modify opacity channel(s) of selected bitmap(s)."
@@ -4970,12 +4977,8 @@ msgid "Raised"
msgstr "Angehoben"
#: ../src/extension/internal/bitmap/raise.cpp:49
-msgid ""
-"Alter lightness the edges of selected bitmap(s) to create a raised "
-"appearance."
-msgstr ""
-"Helligkeit von Farbkanten in ausgewählten Bitmap(s) anpassen, um den "
-"Anschein herausgehobener Ecken zu erwecken."
+msgid "Alter lightness the edges of selected bitmap(s) to create a raised appearance."
+msgstr "Helligkeit von Farbkanten in ausgewählten Bitmap(s) anpassen, um den Anschein herausgehobener Ecken zu erwecken."
#: ../src/extension/internal/bitmap/reduceNoise.cpp:39
msgid "Reduce Noise"
@@ -4987,8 +4990,7 @@ msgid "Order"
msgstr "Ordnung"
#: ../src/extension/internal/bitmap/reduceNoise.cpp:47
-msgid ""
-"Reduce noise in selected bitmap(s) using a noise peak elimination filter."
+msgid "Reduce noise in selected bitmap(s) using a noise peak elimination filter."
msgstr "Rauschen in ausgewählten Bitmaps durch Rauschspitzenfilter verringern"
#: ../src/extension/internal/bitmap/sample.cpp:38
@@ -4996,11 +4998,8 @@ msgid "Resample"
msgstr "Auflösung ändern"
#: ../src/extension/internal/bitmap/sample.cpp:47
-msgid ""
-"Alter the resolution of selected image by resizing it to the given pixel size"
-msgstr ""
-"Ändert die Auflösung des ausgewählten Bitmaps, indem es auf die gegebene "
-"Größe skaliert wird."
+msgid "Alter the resolution of selected image by resizing it to the given pixel size"
+msgstr "Ändert die Auflösung des ausgewählten Bitmaps, indem es auf die gegebene Größe skaliert wird."
#: ../src/extension/internal/bitmap/shade.cpp:39
msgid "Shade"
@@ -5037,12 +5036,8 @@ msgid "Dither"
msgstr "Zittern"
#: ../src/extension/internal/bitmap/spread.cpp:44
-msgid ""
-"Randomly scatter pixels in selected bitmap(s), within the given radius of "
-"the original position"
-msgstr ""
-"Verteilt die Pixel in ausgewählten Bitmap(s) zufällig im angegebenen Radius "
-"um den Ursprung."
+msgid "Randomly scatter pixels in selected bitmap(s), within the given radius of the original position"
+msgstr "Verteilt die Pixel in ausgewählten Bitmap(s) zufällig im angegebenen Radius um den Ursprung."
#: ../src/extension/internal/bitmap/swirl.cpp:36
msgid "Swirl"
@@ -5109,7 +5104,8 @@ msgid "Number of inset/outset copies of the object to make"
msgstr "Anzahl der geschrumpften/erweiterten Kopien des Objekts"
#: ../src/extension/internal/bluredge.cpp:141
-#: ../share/extensions/extrude.inx.h:2 ../share/extensions/interp.inx.h:3
+#: ../share/extensions/extrude.inx.h:2
+#: ../share/extensions/interp.inx.h:3
#: ../share/extensions/motion.inx.h:2
#: ../share/extensions/pathalongpath.inx.h:4
#: ../share/extensions/pathscatter.inx.h:5
@@ -5330,7 +5326,8 @@ msgstr "GIMP-Farbverlauf (*.ggr)"
msgid "Gradients used in GIMP"
msgstr "Farbverläufe von GIMP"
-#: ../src/extension/internal/grid.cpp:192 ../src/ui/widget/panel.cpp:112
+#: ../src/extension/internal/grid.cpp:192
+#: ../src/ui/widget/panel.cpp:112
msgid "Grid"
msgstr "Gitter"
@@ -5358,7 +5355,8 @@ msgstr "Vertikaler Versatz"
#: ../share/extensions/draw_from_triangle.inx.h:30
#: ../share/extensions/eqtexsvg.inx.h:3
#: ../share/extensions/foldablebox.inx.h:6
-#: ../share/extensions/funcplot.inx.h:13 ../share/extensions/gears.inx.h:5
+#: ../share/extensions/funcplot.inx.h:13
+#: ../share/extensions/gears.inx.h:5
#: ../share/extensions/grid_cartesian.inx.h:15
#: ../share/extensions/grid_polar.inx.h:18
#: ../share/extensions/guides_creator.inx.h:17
@@ -5369,7 +5367,8 @@ msgstr "Vertikaler Versatz"
#: ../share/extensions/printing-marks.inx.h:14
#: ../share/extensions/render_alphabetsoup.inx.h:3
#: ../share/extensions/render_barcode.inx.h:5
-#: ../share/extensions/rtree.inx.h:4 ../share/extensions/spirograph.inx.h:6
+#: ../share/extensions/rtree.inx.h:4
+#: ../share/extensions/spirograph.inx.h:6
#: ../share/extensions/svgcalendar.inx.h:22
#: ../share/extensions/triangle.inx.h:10
msgid "Render"
@@ -5465,12 +5464,8 @@ msgid "Precision of approximating gradient meshes:"
msgstr "Präzision zur Annäherung an gradient meshes:"
#: ../src/extension/internal/pdfinput/pdf-input.cpp:107
-msgid ""
-"<b>Note</b>: setting the precision too high may result in a large SVG file "
-"and slow performance."
-msgstr ""
-"<b>Hinweis</b>: Die Präzision zu hoch einzustellen kann zu einem großen SVG "
-"und schlechter Performance führen."
+msgid "<b>Note</b>: setting the precision too high may result in a large SVG file and slow performance."
+msgstr "<b>Hinweis</b>: Die Präzision zu hoch einzustellen kann zu einem großen SVG und schlechter Performance führen."
#: ../src/extension/internal/pdfinput/pdf-input.cpp:112
#: ../src/extension/internal/pdfinput/pdf-input.cpp:393
@@ -5593,7 +5588,8 @@ msgstr "Scalable-Vector-Graphics-Format wie vom W3C definiert"
msgid "SVGZ Input"
msgstr "SVGZ einlesen"
-#: ../src/extension/internal/svgz.cpp:53 ../src/extension/internal/svgz.cpp:67
+#: ../src/extension/internal/svgz.cpp:53
+#: ../src/extension/internal/svgz.cpp:67
msgid "Compressed Inkscape SVG (*.svgz)"
msgstr "Komprimiertes Inkscape-SVG (*.svgz)"
@@ -5601,7 +5597,8 @@ msgstr "Komprimiertes Inkscape-SVG (*.svgz)"
msgid "SVG file format compressed with GZip"
msgstr "SVG-Dateiformat, mit GZip komprimiert"
-#: ../src/extension/internal/svgz.cpp:62 ../src/extension/internal/svgz.cpp:76
+#: ../src/extension/internal/svgz.cpp:62
+#: ../src/extension/internal/svgz.cpp:76
msgid "SVGZ Output"
msgstr "SVGZ-Ausgabe"
@@ -5647,15 +5644,14 @@ msgstr "Ist Vorschau des Effekts auf Leinwand aktiv?"
#. sp_ui_error_dialog(_("Format autodetect failed. The file is being opened as SVG."));
#: ../src/extension/system.cpp:107
msgid "Format autodetect failed. The file is being opened as SVG."
-msgstr ""
-"Die automatische Ermittlung des Formats ist fehlgeschlagen. Die Datei wird "
-"als SVG-Dokument geöffnet."
+msgstr "Die automatische Ermittlung des Formats ist fehlgeschlagen. Die Datei wird als SVG-Dokument geöffnet."
#: ../src/file.cpp:147
msgid "default.svg"
msgstr "default.de.svg"
-#: ../src/file.cpp:265 ../src/file.cpp:1067
+#: ../src/file.cpp:265
+#: ../src/file.cpp:1067
#, c-format
msgid "Failed to load the requested file %s"
msgstr "Laden der gewünschten Datei %s fehlgeschlagen"
@@ -5667,9 +5663,7 @@ msgstr "Dokument noch nicht gespeichtert. Kann nicht zurücksetzen."
#: ../src/file.cpp:296
#, c-format
msgid "Changes will be lost! Are you sure you want to reload document %s?"
-msgstr ""
-"Änderungen gehen verloren! Sind Sie sicher, dass Sie das Dokument %s erneut "
-"laden möchten?"
+msgstr "Änderungen gehen verloren! Sind Sie sicher, dass Sie das Dokument %s erneut laden möchten?"
#: ../src/file.cpp:325
msgid "Document reverted."
@@ -5700,25 +5694,21 @@ msgstr "Keine überflüssigen Elemente in &lt;defs&gt;."
#: ../src/file.cpp:605
#, c-format
-msgid ""
-"No Inkscape extension found to save document (%s). This may have been "
-"caused by an unknown filename extension."
-msgstr ""
-"Keine vorhandene Erweiterung von Inkscape kann das Dokument (%s) sichern. "
-"Dies Ursache dafür ist möglicherweise eine unbekannte Dateinamenendung."
-
-#: ../src/file.cpp:606 ../src/file.cpp:614 ../src/file.cpp:622
-#: ../src/file.cpp:628 ../src/file.cpp:633
+msgid "No Inkscape extension found to save document (%s). This may have been caused by an unknown filename extension."
+msgstr "Keine vorhandene Erweiterung von Inkscape kann das Dokument (%s) sichern. Dies Ursache dafür ist möglicherweise eine unbekannte Dateinamenendung."
+
+#: ../src/file.cpp:606
+#: ../src/file.cpp:614
+#: ../src/file.cpp:622
+#: ../src/file.cpp:628
+#: ../src/file.cpp:633
msgid "Document not saved."
msgstr "Dokument wurde nicht gespeichert."
#: ../src/file.cpp:613
#, c-format
-msgid ""
-"File %s is write protected. Please remove write protection and try again."
-msgstr ""
-"Datei %s ist schreibgeschützt! Bitte entfernen Sie den Schreibschutz und "
-"versuchen es dann erneut."
+msgid "File %s is write protected. Please remove write protection and try again."
+msgstr "Datei %s ist schreibgeschützt! Bitte entfernen Sie den Schreibschutz und versuchen es dann erneut."
#: ../src/file.cpp:621
#, c-format
@@ -5730,7 +5720,8 @@ msgid "Document saved."
msgstr "Dokument wurde gespeichert."
#. 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:1204
#, c-format
msgid "drawing%s"
msgstr "Zeichnung%s"
@@ -5773,7 +5764,8 @@ msgstr "Wählen Sie die zu importierende Datei"
msgid "Select file to export to"
msgstr "Wählen Sie die Datei, in die exportiert werden soll"
-#: ../src/file.cpp:1469 ../src/verbs.cpp:2265
+#: ../src/file.cpp:1469
+#: ../src/verbs.cpp:2265
msgid "Import From Open Clip Art Library"
msgstr "Import aus der Open Clip Art Library"
@@ -5809,7 +5801,8 @@ msgstr "Versatzkarte"
msgid "Flood"
msgstr "Füllen"
-#: ../src/filter-enums.cpp:29 ../src/selection-describer.cpp:55
+#: ../src/filter-enums.cpp:29
+#: ../src/selection-describer.cpp:55
msgid "Image"
msgstr "Bild"
@@ -5826,7 +5819,8 @@ msgid "Tile"
msgstr "Kachelfüllung"
# CHECK
-#: ../src/filter-enums.cpp:35 ../src/filter-enums.cpp:119
+#: ../src/filter-enums.cpp:35
+#: ../src/filter-enums.cpp:119
msgid "Turbulence"
msgstr "Turbulenz"
@@ -5893,7 +5887,8 @@ msgid "Luminance to Alpha"
msgstr "Leuchtkraft zu Alpha"
#. File
-#: ../src/filter-enums.cpp:72 ../src/verbs.cpp:2242
+#: ../src/filter-enums.cpp:72
+#: ../src/verbs.cpp:2242
msgid "Default"
msgstr "Vorgabe"
@@ -5942,7 +5937,8 @@ msgstr "Linie"
msgid "Gamma"
msgstr "Gamma"
-#: ../src/filter-enums.cpp:94 ../src/selection-chemistry.cpp:316
+#: ../src/filter-enums.cpp:94
+#: ../src/selection-chemistry.cpp:316
#: ../src/widgets/gradient-selector.cpp:139
msgid "Duplicate"
msgstr "Duplizieren"
@@ -5952,7 +5948,8 @@ msgid "Wrap"
msgstr "Umbrechen"
# CHECK
-#: ../src/filter-enums.cpp:96 ../src/flood-context.cpp:264
+#: ../src/filter-enums.cpp:96
+#: ../src/flood-context.cpp:264
#: ../src/live_effects/lpe-ruler.cpp:34
#: ../src/ui/dialog/document-properties.cpp:327
#: ../src/ui/dialog/filter-effects-dialog.cpp:468
@@ -5960,35 +5957,41 @@ msgstr "Umbrechen"
#: ../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:1216
+#: ../src/verbs.cpp:2239
+#: ../src/widgets/stroke-style.cpp:765
+#: ../src/widgets/toolbox.cpp:3887
#: ../share/extensions/grid_polar.inx.h:16
#: ../share/extensions/guides_creator.inx.h:15
msgid "None"
msgstr "Deaktiviert"
-#: ../src/filter-enums.cpp:102 ../src/flood-context.cpp:247
+#: ../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
msgid "Red"
msgstr "Rot"
-#: ../src/filter-enums.cpp:103 ../src/flood-context.cpp:248
+#: ../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
msgid "Green"
msgstr "Grün"
-#: ../src/filter-enums.cpp:104 ../src/flood-context.cpp:249
+#: ../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
msgid "Blue"
msgstr "Blau"
-#: ../src/filter-enums.cpp:105 ../src/flood-context.cpp:253
+#: ../src/filter-enums.cpp:105
+#: ../src/flood-context.cpp:253
msgid "Alpha"
msgstr "Alpha"
@@ -6020,14 +6023,17 @@ msgstr "Spotlight"
msgid "Visible Colors"
msgstr "Sichtbare Farben"
-#: ../src/flood-context.cpp:252 ../src/widgets/sp-color-icc-selector.cpp:237
+#: ../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:4311
#: ../share/extensions/color_randomize.inx.h:3
msgid "Lightness"
msgstr "Helligkeit"
-#: ../src/flood-context.cpp:265 ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/flood-context.cpp:265
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
msgid "Small"
msgstr "Klein"
@@ -6035,7 +6041,8 @@ msgstr "Klein"
msgid "Medium"
msgstr "Mittel"
-#: ../src/flood-context.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1072
+#: ../src/flood-context.cpp:267
+#: ../src/ui/dialog/inkscape-preferences.cpp:1072
msgid "Large"
msgstr "Groß"
@@ -6045,16 +6052,10 @@ msgstr "<b>Zu viel Schrumpfung</b>, das Ergebnis ist leer."
#: ../src/flood-context.cpp:509
#, c-format
-msgid ""
-"Area filled, path with <b>%d</b> node created and unioned with selection."
-msgid_plural ""
-"Area filled, path with <b>%d</b> nodes created and unioned with selection."
-msgstr[0] ""
-"Gebiet gefüllt, Pfad mit <b>%d</b> Knoten erzeugt und mit der Auswahl "
-"vereinigt."
-msgstr[1] ""
-"Gebiet gefüllt, Pfad mit <b>%d</b> Knoten erzeugt und mit der Auswahl "
-"vereinigt."
+msgid "Area filled, path with <b>%d</b> node created and unioned with selection."
+msgid_plural "Area filled, path with <b>%d</b> nodes created and unioned with selection."
+msgstr[0] "Gebiet gefüllt, Pfad mit <b>%d</b> Knoten erzeugt und mit der Auswahl vereinigt."
+msgstr[1] "Gebiet gefüllt, Pfad mit <b>%d</b> Knoten erzeugt und mit der Auswahl vereinigt."
#: ../src/flood-context.cpp:513
#, c-format
@@ -6063,20 +6064,17 @@ msgid_plural "Area filled, path with <b>%d</b> nodes created."
msgstr[0] "Gebiet gefüllt, Pfad mit <b>%d</b> Knoten erzeugt."
msgstr[1] "Gebiet gefüllt, Pfad mit <b>%d</b> Knoten erzeugt."
-#: ../src/flood-context.cpp:785 ../src/flood-context.cpp:1099
+#: ../src/flood-context.cpp:785
+#: ../src/flood-context.cpp:1099
msgid "<b>Area is not bounded</b>, cannot fill."
msgstr "<b>Gebiet ist nicht abgegrenzt</b>, kann nicht füllen."
#: ../src/flood-context.cpp:1104
-msgid ""
-"<b>Only the visible part of the bounded area was filled.</b> If you want to "
-"fill all of the area, undo, zoom out, and fill again."
-msgstr ""
-"<b>Nur der sichtbare Teil des abgegrenzten Gebiets wurde gefüllt.</b> Wenn "
-"Sie das gesamte Gebiet füllen wollen, dann machen Sie rückgängig, zoomen "
-"heraus, und füllen Sie noch einmal."
+msgid "<b>Only the visible part of the bounded area was filled.</b> If you want to fill all of the area, undo, zoom out, and fill again."
+msgstr "<b>Nur der sichtbare Teil des abgegrenzten Gebiets wurde gefüllt.</b> Wenn Sie das gesamte Gebiet füllen wollen, dann machen Sie rückgängig, zoomen heraus, und füllen Sie noch einmal."
-#: ../src/flood-context.cpp:1122 ../src/flood-context.cpp:1282
+#: ../src/flood-context.cpp:1122
+#: ../src/flood-context.cpp:1282
msgid "Fill bounded area"
msgstr "Fülle abgegrenztes Gebiet"
@@ -6086,39 +6084,46 @@ msgstr "Stil auf Objekte anwenden"
#: ../src/flood-context.cpp:1201
msgid "<b>Draw over</b> areas to add to fill, hold <b>Alt</b> for touch fill"
-msgstr ""
-"<b>Zeichne über</b> Gebieten um zur Füllung hinzuzufügen, <b>Alt</b> für "
-"Füllen durch Berührung"
+msgstr "<b>Zeichne über</b> Gebieten um zur Füllung hinzuzufügen, <b>Alt</b> für Füllen durch Berührung"
-#: ../src/gradient-context.cpp:132 ../src/gradient-drag.cpp:75
+#: ../src/gradient-context.cpp:132
+#: ../src/gradient-drag.cpp:75
msgid "Linear gradient <b>start</b>"
msgstr "<b>Anfang</b> des linearen Farbverlaufs"
#. POINT_LG_BEGIN
-#: ../src/gradient-context.cpp:133 ../src/gradient-drag.cpp:76
+#: ../src/gradient-context.cpp:133
+#: ../src/gradient-drag.cpp:76
msgid "Linear gradient <b>end</b>"
msgstr "<b>Ende</b> des linearen Farbverlaufs"
-#: ../src/gradient-context.cpp:134 ../src/gradient-drag.cpp:77
+#: ../src/gradient-context.cpp:134
+#: ../src/gradient-drag.cpp:77
msgid "Linear gradient <b>mid stop</b>"
msgstr "<b>Zwischenfarbe</b> des linearen Farbverlaufs"
-#: ../src/gradient-context.cpp:135 ../src/gradient-drag.cpp:78
+#: ../src/gradient-context.cpp:135
+#: ../src/gradient-drag.cpp:78
msgid "Radial gradient <b>center</b>"
msgstr "<b>Zentrum</b> des radialen Farbverlaufs"
-#: ../src/gradient-context.cpp:136 ../src/gradient-context.cpp:137
-#: ../src/gradient-drag.cpp:79 ../src/gradient-drag.cpp:80
+#: ../src/gradient-context.cpp:136
+#: ../src/gradient-context.cpp:137
+#: ../src/gradient-drag.cpp:79
+#: ../src/gradient-drag.cpp:80
msgid "Radial gradient <b>radius</b>"
msgstr "<b>Radius</b> des radialen Farbverlaufs"
-#: ../src/gradient-context.cpp:138 ../src/gradient-drag.cpp:81
+#: ../src/gradient-context.cpp:138
+#: ../src/gradient-drag.cpp:81
msgid "Radial gradient <b>focus</b>"
msgstr "<b>Fokus</b> des radialen Farbverlaufs"
#. POINT_RG_FOCUS
-#: ../src/gradient-context.cpp:139 ../src/gradient-context.cpp:140
-#: ../src/gradient-drag.cpp:82 ../src/gradient-drag.cpp:83
+#: ../src/gradient-context.cpp:139
+#: ../src/gradient-context.cpp:140
+#: ../src/gradient-drag.cpp:82
+#: ../src/gradient-drag.cpp:83
msgid "Radial gradient <b>mid stop</b>"
msgstr "<b>Zwischenfarbe</b> des radialen Farbverlaufs"
@@ -6129,7 +6134,8 @@ msgid "%s selected"
msgstr "%s ausgewählt"
#. TRANSLATORS: Mind the space in front. This is part of a compound message
-#: ../src/gradient-context.cpp:167 ../src/gradient-context.cpp:176
+#: ../src/gradient-context.cpp:167
+#: ../src/gradient-context.cpp:176
#, c-format
msgid " out of %d gradient handle"
msgid_plural " out of %d gradient handles"
@@ -6137,7 +6143,8 @@ msgstr[0] " von %d Farbverlaufs-Anfasser gewählt"
msgstr[1] " von %d Farbverlaufs-Anfassern gewählt"
#. TRANSLATORS: Mind the space in front. (Refers to gradient handles selected). This is part of a compound message
-#: ../src/gradient-context.cpp:168 ../src/gradient-context.cpp:177
+#: ../src/gradient-context.cpp:168
+#: ../src/gradient-context.cpp:177
#: ../src/gradient-context.cpp:184
#, c-format
msgid " on %d selected object"
@@ -6148,14 +6155,10 @@ msgstr[1] "auf %d gewählte Objekte"
#. TRANSLATORS: This is a part of a compound message (out of two more indicating: grandint handle count & object count)
#: ../src/gradient-context.cpp:174
#, c-format
-msgid ""
-"One handle merging %d stop (drag with <b>Shift</b> to separate) selected"
-msgid_plural ""
-"One handle merging %d stops (drag with <b>Shift</b> to separate) selected"
+msgid "One handle merging %d stop (drag with <b>Shift</b> to separate) selected"
+msgid_plural "One handle merging %d stops (drag with <b>Shift</b> to separate) selected"
msgstr[0] "Ein Anfasser für %d Endknoten"
-msgstr[1] ""
-"Ein Anfasser für %d zusammenliegende Endknoten (<b>Umschalt + Ziehen</b> "
-"trennt)"
+msgstr[1] "Ein Anfasser für %d zusammenliegende Endknoten (<b>Umschalt + Ziehen</b> trennt)"
#. TRANSLATORS: The plural refers to number of selected gradient handles. This is part of a compound message (part two indicates selected object count)
#: ../src/gradient-context.cpp:182
@@ -6169,14 +6172,12 @@ msgstr[1] "<b>%d</b> Verlaufs-Handles von %d ausgewählt"
#: ../src/gradient-context.cpp:189
#, c-format
msgid "<b>No</b> gradient handles selected out of %d on %d selected object"
-msgid_plural ""
-"<b>No</b> gradient handles selected out of %d on %d selected objects"
-msgstr[0] ""
-"<b>Kein</b> Verlaufs-Handle von %d ausgewählt bei %d markiertem Objekt"
-msgstr[1] ""
-"<b>Keine</b> Verlaufs-Handles von %d ausgewählt bei %d markierten Objekten"
-
-#: ../src/gradient-context.cpp:389 ../src/gradient-context.cpp:482
+msgid_plural "<b>No</b> gradient handles selected out of %d on %d selected objects"
+msgstr[0] "<b>Kein</b> Verlaufs-Handle von %d ausgewählt bei %d markiertem Objekt"
+msgstr[1] "<b>Keine</b> Verlaufs-Handles von %d ausgewählt bei %d markierten Objekten"
+
+#: ../src/gradient-context.cpp:389
+#: ../src/gradient-context.cpp:482
#: ../src/widgets/gradient-vector.cpp:744
msgid "Add gradient stop"
msgstr "Zwischenfarbe zum Farbverlauf hinzufügen"
@@ -6224,55 +6225,37 @@ msgstr "Farbverlaufs-Anfasser vereinigen"
msgid "Move gradient handle"
msgstr "Farbverlaufs-Anfasser verschieben"
-#: ../src/gradient-drag.cpp:965 ../src/widgets/gradient-vector.cpp:776
+#: ../src/gradient-drag.cpp:965
+#: ../src/widgets/gradient-vector.cpp:776
msgid "Delete gradient stop"
msgstr "Zwischenfarbe des Farbverlaufs löschen"
#: ../src/gradient-drag.cpp:1129
#, c-format
-msgid ""
-"%s %d for: %s%s; drag with <b>Ctrl</b> to snap offset; click with <b>Ctrl"
-"+Alt</b> to delete stop"
-msgstr ""
-"%s %d für %s%s; Ziehen mit <b>Strg</b> rastet Versatz ein, Klick mit <b>Strg"
-"+Alt</b> löscht Zwischenfarbe"
+msgid "%s %d for: %s%s; drag with <b>Ctrl</b> to snap offset; click with <b>Ctrl+Alt</b> to delete stop"
+msgstr "%s %d für %s%s; Ziehen mit <b>Strg</b> rastet Versatz ein, Klick mit <b>Strg+Alt</b> löscht Zwischenfarbe"
-#: ../src/gradient-drag.cpp:1133 ../src/gradient-drag.cpp:1140
+#: ../src/gradient-drag.cpp:1133
+#: ../src/gradient-drag.cpp:1140
msgid " (stroke)"
msgstr " (Kontur)"
#: ../src/gradient-drag.cpp:1137
#, c-format
-msgid ""
-"%s for: %s%s; drag with <b>Ctrl</b> to snap angle, with <b>Ctrl+Alt</b> to "
-"preserve angle, with <b>Ctrl+Shift</b> to scale around center"
-msgstr ""
-"%s für %s%s; Ziehen mit <b>Strg</b> rastet Winkel ein, Ziehen mit <b>Strg"
-"+Alt</b> behält Winkel bei; <b>Strg+Umschalt</b> skaliert um den Mittelpunkt"
+msgid "%s for: %s%s; drag with <b>Ctrl</b> to snap angle, with <b>Ctrl+Alt</b> to preserve angle, with <b>Ctrl+Shift</b> to scale around center"
+msgstr "%s für %s%s; Ziehen mit <b>Strg</b> rastet Winkel ein, Ziehen mit <b>Strg+Alt</b> behält Winkel bei; <b>Strg+Umschalt</b> skaliert um den Mittelpunkt"
#: ../src/gradient-drag.cpp:1145
#, c-format
-msgid ""
-"Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to "
-"separate focus"
-msgstr ""
-"<b>Zentrum</b> und <b>Fokus</b> des radialen Farbverlaufs; Ziehen mit "
-"<b>Umschalt</b>, um den Fokus einzeln zu bewegen"
+msgid "Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to separate focus"
+msgstr "<b>Zentrum</b> und <b>Fokus</b> des radialen Farbverlaufs; Ziehen mit <b>Umschalt</b>, um den Fokus einzeln zu bewegen"
#: ../src/gradient-drag.cpp:1148
#, c-format
-msgid ""
-"Gradient point shared by <b>%d</b> gradient; drag with <b>Shift</b> to "
-"separate"
-msgid_plural ""
-"Gradient point shared by <b>%d</b> gradients; drag with <b>Shift</b> to "
-"separate"
-msgstr[0] ""
-"Farbverlaufspunkt ist <b>%d</b> weiteren Farbverlauf zugewiesen. Ziehen mit "
-"<b>Umschalt</b> trennt die Zuweisung"
-msgstr[1] ""
-"Farbverlaufspunkt ist <b>%d</b> weiteren Farbverläufen zugewiesen. Ziehen "
-"mit <b>Umschalt</b> trennt die Zuweisung"
+msgid "Gradient point shared by <b>%d</b> gradient; drag with <b>Shift</b> to separate"
+msgid_plural "Gradient point shared by <b>%d</b> gradients; drag with <b>Shift</b> to separate"
+msgstr[0] "Farbverlaufspunkt ist <b>%d</b> weiteren Farbverlauf zugewiesen. Ziehen mit <b>Umschalt</b> trennt die Zuweisung"
+msgstr[1] "Farbverlaufspunkt ist <b>%d</b> weiteren Farbverläufen zugewiesen. Ziehen mit <b>Umschalt</b> trennt die Zuweisung"
#: ../src/gradient-drag.cpp:1823
msgid "Move gradient handle(s)"
@@ -6286,7 +6269,8 @@ msgstr "Zwischenfarbe(n) des Farbverlaufs verschieben"
msgid "Delete gradient stop(s)"
msgstr "Zwischenfarbe(n) des Farbverlaufs löschen"
-#: ../src/helper/units.cpp:37 ../src/live_effects/lpe-ruler.cpp:43
+#: ../src/helper/units.cpp:37
+#: ../src/live_effects/lpe-ruler.cpp:43
#: ../share/extensions/foldablebox.inx.h:8
#: ../share/extensions/interp_att_g.inx.h:24
#: ../share/extensions/printing-marks.inx.h:19
@@ -6294,9 +6278,12 @@ msgid "Unit"
msgstr "Einheit"
#. 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/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
msgid "Units"
msgstr "Einheiten"
@@ -6304,11 +6291,13 @@ msgstr "Einheiten"
msgid "Point"
msgstr "Punkt"
-#: ../src/helper/units.cpp:38 ../src/ui/widget/selected-style.cpp:293
+#: ../src/helper/units.cpp:38
+#: ../src/ui/widget/selected-style.cpp:293
msgid "pt"
msgstr "pt"
-#: ../src/helper/units.cpp:38 ../share/extensions/perfectboundcover.inx.h:15
+#: ../src/helper/units.cpp:38
+#: ../share/extensions/perfectboundcover.inx.h:15
msgid "Points"
msgstr "Punkte"
@@ -6336,7 +6325,8 @@ msgstr "PC"
msgid "Pixel"
msgstr "Pixel"
-#: ../src/helper/units.cpp:40 ../src/ui/dialog/inkscape-preferences.cpp:246
+#: ../src/helper/units.cpp:40
+#: ../src/ui/dialog/inkscape-preferences.cpp:246
#: ../src/ui/dialog/inkscape-preferences.cpp:250
#: ../src/ui/dialog/inkscape-preferences.cpp:253
#: ../src/ui/widget/selected-style.cpp:289
@@ -6352,11 +6342,13 @@ msgid "Px"
msgstr "Px"
#. You can add new elements from this point forward
-#: ../src/helper/units.cpp:42 ../share/extensions/straightseg.inx.h:3
+#: ../src/helper/units.cpp:42
+#: ../share/extensions/straightseg.inx.h:3
msgid "Percent"
msgstr "Prozent"
-#: ../src/helper/units.cpp:42 ../src/ui/dialog/inkscape-preferences.cpp:266
+#: ../src/helper/units.cpp:42
+#: ../src/ui/dialog/inkscape-preferences.cpp:266
msgid "%"
msgstr "%"
@@ -6368,7 +6360,8 @@ msgstr "Prozent"
msgid "Millimeter"
msgstr "Millimeter"
-#: ../src/helper/units.cpp:43 ../src/ui/widget/selected-style.cpp:297
+#: ../src/helper/units.cpp:43
+#: ../src/ui/widget/selected-style.cpp:297
msgid "mm"
msgstr "mm"
@@ -6458,16 +6451,13 @@ msgstr "Dokument wird automatisch gespeichert…"
#: ../src/inkscape.cpp:399
msgid "Autosave failed! Could not find inkscape extension to save document."
-msgstr ""
-"Automatisches Speichern fehlgeschlagen! Inkscape-Endung konnte nicht "
-"gefunden werden."
+msgstr "Automatisches Speichern fehlgeschlagen! Inkscape-Endung konnte nicht gefunden werden."
-#: ../src/inkscape.cpp:402 ../src/inkscape.cpp:409
+#: ../src/inkscape.cpp:402
+#: ../src/inkscape.cpp:409
#, c-format
msgid "Autosave failed! File %s could not be saved."
-msgstr ""
-"Automatisches Speichern fehlgeschlagen! Datei %s konnte nicht gespeichert "
-"werden."
+msgstr "Automatisches Speichern fehlgeschlagen! Datei %s konnte nicht gespeichert werden."
#: ../src/inkscape.cpp:424
msgid "Autosave complete."
@@ -6480,22 +6470,15 @@ msgstr "Unbenanntes Dokument"
#. Show nice dialog box
#: ../src/inkscape.cpp:691
msgid "Inkscape encountered an internal error and will close now.\n"
-msgstr ""
-"Inkscape ist auf einen internen Fehler gestoßen und wird nun geschlossen.\n"
+msgstr "Inkscape ist auf einen internen Fehler gestoßen und wird nun geschlossen.\n"
#: ../src/inkscape.cpp:692
-msgid ""
-"Automatic backups of unsaved documents were done to the following "
-"locations:\n"
-msgstr ""
-"Unter folgenden Speicherorten wurden automatische Sicherungskopien nicht "
-"gespeicherter Dokumente angelegt:\n"
+msgid "Automatic backups of unsaved documents were done to the following locations:\n"
+msgstr "Unter folgenden Speicherorten wurden automatische Sicherungskopien nicht gespeicherter Dokumente angelegt:\n"
#: ../src/inkscape.cpp:693
msgid "Automatic backup of the following documents failed:\n"
-msgstr ""
-"Anlegen von automatischen Sicherungskopien folgender Dokumente "
-"fehlgeschlagen:\n"
+msgstr "Anlegen von automatischen Sicherungskopien folgender Dokumente fehlgeschlagen:\n"
#. sp_ui_menu_append_check_item_from_verb(m, view, _("_Menu"), _("Show or hide the menu bar"), "menu",
#. checkitem_toggled, checkitem_update, 0);
@@ -6567,12 +6550,15 @@ msgid "Go to parent"
msgstr "Zum übergeordneten Objekt gehen"
# !!! correct?
-#: ../src/interface.cpp:1198 ../src/interface.cpp:1284
-#: ../src/interface.cpp:1387 ../src/ui/widget/selected-style.cpp:468
+#: ../src/interface.cpp:1198
+#: ../src/interface.cpp:1284
+#: ../src/interface.cpp:1387
+#: ../src/ui/widget/selected-style.cpp:468
msgid "Drop color"
msgstr "Farbe ablegen"
-#: ../src/interface.cpp:1237 ../src/interface.cpp:1347
+#: ../src/interface.cpp:1237
+#: ../src/interface.cpp:1347
msgid "Drop color on gradient"
msgstr "Keine Zwischenfarben im Farbverlauf"
@@ -6591,24 +6577,23 @@ msgstr "Bitmap-Bild ablegen"
#: ../src/interface.cpp:1587
#, c-format
msgid ""
-"<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do "
-"you want to replace it?</span>\n"
+"<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do you want to replace it?</span>\n"
"\n"
"The file already exists in \"%s\". Replacing it will overwrite its contents."
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Eine Datei namens »%s« existiert "
-"bereits. Soll sie ersetzt werden?</span>\n"
+"<span weight=\"bold\" size=\"larger\">Eine Datei namens »%s« existiert bereits. Soll sie ersetzt werden?</span>\n"
"\n"
-"Die Datei existiert bereits in »%s«. Sie zu ersetzen wird ihren Inhalt "
-"überschreiben."
+"Die Datei existiert bereits in »%s«. Sie zu ersetzen wird ihren Inhalt überschreiben."
-#: ../src/interface.cpp:1594 ../share/extensions/web-set-att.inx.h:5
+#: ../src/interface.cpp:1594
+#: ../share/extensions/web-set-att.inx.h:5
#: ../share/extensions/web-transmit-att.inx.h:5
msgid "Replace"
msgstr "Ersetzen"
# !!
-#: ../src/io/sys.cpp:446 ../src/io/sys.cpp:454
+#: ../src/io/sys.cpp:446
+#: ../src/io/sys.cpp:454
#, c-format
msgid "Failed to read from child pipe (%s)"
msgstr "Fehler beim Lesen vom Kanal des Kindprozeßes (%s)"
@@ -6620,7 +6605,8 @@ msgstr ""
"Kann nicht in Verzeichnis '%s' wechseln.\n"
"%s"
-#: ../src/io/sys.cpp:484 ../src/io/sys.cpp:710
+#: ../src/io/sys.cpp:484
+#: ../src/io/sys.cpp:710
#, c-format
msgid "Failed to execute child process (%s)"
msgstr "Kindprozeß (%s) kann nicht ausgeführt werden."
@@ -6630,12 +6616,14 @@ msgstr "Kindprozeß (%s) kann nicht ausgeführt werden."
msgid "Invalid program name: %s"
msgstr "Ungültiger Programmname: %s"
-#: ../src/io/sys.cpp:667 ../src/io/sys.cpp:956
+#: ../src/io/sys.cpp:667
+#: ../src/io/sys.cpp:956
#, c-format
msgid "Invalid string in argument vector at %d: %s"
msgstr "Ungültige Zeichenkette in Vektorargument bei %d: %s"
-#: ../src/io/sys.cpp:678 ../src/io/sys.cpp:971
+#: ../src/io/sys.cpp:678
+#: ../src/io/sys.cpp:971
#, c-format
msgid "Invalid string in environment: %s"
msgstr "Ungültiger String in der Umgebung: %s"
@@ -6675,8 +6663,7 @@ msgstr "<b>Bewegen des Füllmusters</b> innerhalb des Objektes"
#: ../src/knotholder.cpp:237
msgid "<b>Scale</b> the pattern fill; uniformly if with <b>Ctrl</b>"
-msgstr ""
-"Einheitliches <b>Skalieren</b> des Füllmusters; gleichmäßig durch <b>STRG</b>"
+msgstr "Einheitliches <b>Skalieren</b> des Füllmusters; gleichmäßig durch <b>STRG</b>"
#: ../src/knotholder.cpp:240
msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
@@ -6700,7 +6687,8 @@ msgstr "Stil de Dockleiste"
msgid "Dockbar style to show items on it"
msgstr "Stil, in dem Objekte auf der Dockleiste gezeigt werden"
-#: ../src/libgdl/gdl-dock.c:175 ../src/ui/dialog/inkscape-preferences.cpp:549
+#: ../src/libgdl/gdl-dock.c:175
+#: ../src/ui/dialog/inkscape-preferences.cpp:549
#: ../src/ui/dialog/inkscape-preferences.cpp:570
msgid "Floating"
msgstr "Schwebend."
@@ -6709,7 +6697,8 @@ msgstr "Schwebend."
msgid "Whether the dock is floating in its own window"
msgstr "Schwebt Leiste in eigenem Fenster?"
-#: ../src/libgdl/gdl-dock.c:183 ../src/libgdl/gdl-dock-master.c:144
+#: ../src/libgdl/gdl-dock.c:183
+#: ../src/libgdl/gdl-dock-master.c:144
msgid "Default title"
msgstr "Vorgegebener Titel"
@@ -6760,30 +6749,24 @@ msgstr "Größe änderbar"
#: ../src/libgdl/gdl-dock-item.c:304
msgid "If set, the dock item can be resized when docked in a panel"
-msgstr ""
-"Wenn gewählt, kann das in einer Schaltfläche gedockte Objekt vergrößert/-"
-"kleinert werden"
+msgstr "Wenn gewählt, kann das in einer Schaltfläche gedockte Objekt vergrößert/-kleinert werden"
#: ../src/libgdl/gdl-dock-item.c:311
msgid "Item behavior"
msgstr "Verhalten"
#: ../src/libgdl/gdl-dock-item.c:312
-msgid ""
-"General behavior for the dock item (i.e. whether it can float, if it's "
-"locked, etc.)"
-msgstr ""
-"Allgemeines Verhalten des Dock-Objekts (z. B. ob es schweben kann, es "
-"gesperrt ist, etc.)"
+msgid "General behavior for the dock item (i.e. whether it can float, if it's locked, etc.)"
+msgstr "Allgemeines Verhalten des Dock-Objekts (z. B. ob es schweben kann, es gesperrt ist, etc.)"
-#: ../src/libgdl/gdl-dock-item.c:320 ../src/libgdl/gdl-dock-master.c:151
+#: ../src/libgdl/gdl-dock-item.c:320
+#: ../src/libgdl/gdl-dock-master.c:151
msgid "Locked"
msgstr "Gesperrt"
# Was meint hier "grip"?
#: ../src/libgdl/gdl-dock-item.c:321
-msgid ""
-"If set, the dock item cannot be dragged around and it doesn't show a grip"
+msgid "If set, the dock item cannot be dragged around and it doesn't show a grip"
msgstr "Wenn gewählt, kann das Dock-Objekt nicht gezogen werden"
#: ../src/libgdl/gdl-dock-item.c:329
@@ -6804,24 +6787,18 @@ msgstr "Bevorzugte Höhe für das Andock-Item"
#: ../src/libgdl/gdl-dock-item.c:616
#, c-format
-msgid ""
-"You can't add a dock object (%p of type %s) inside a %s. Use a GdlDock or "
-"some other compound dock object."
+msgid "You can't add a dock object (%p of type %s) inside a %s. Use a GdlDock or some other compound dock object."
msgstr ""
-"Ein Dock-Objekt (%p vom Typ %s) kann nicht innerhalb von %s hinzugefügt "
-"werden.\n"
+"Ein Dock-Objekt (%p vom Typ %s) kann nicht innerhalb von %s hinzugefügt werden.\n"
"GdlDock oder anderes zusammengesetztes Objekt verwenden!"
#: ../src/libgdl/gdl-dock-item.c:623
#, c-format
-msgid ""
-"Attempting to add a widget with type %s to a %s, but it can only contain one "
-"widget at a time; it already contains a widget of type %s"
-msgstr ""
-"Versuch, ein Widget vom Typ %s zu %s hinzu zu fügen, das aber nur ein Widget "
-"enthalten darf und schon eines vom Typ %s enthält."
+msgid "Attempting to add a widget with type %s to a %s, but it can only contain one widget at a time; it already contains a widget of type %s"
+msgstr "Versuch, ein Widget vom Typ %s zu %s hinzu zu fügen, das aber nur ein Widget enthalten darf und schon eines vom Typ %s enthält."
-#: ../src/libgdl/gdl-dock-item.c:1345 ../src/libgdl/gdl-dock-item.c:1390
+#: ../src/libgdl/gdl-dock-item.c:1345
+#: ../src/libgdl/gdl-dock-item.c:1390
#, c-format
msgid "Unsupported docking strategy %s in dock object of type %s"
msgstr "Nicht unterstützte Andockstrategie %s im Dock-Objekt des Typs %s"
@@ -6878,18 +6855,16 @@ msgid "Default title for newly created floating docks"
msgstr "Vorgabetitel für neu erstellte schwebende Docks"
#: ../src/libgdl/gdl-dock-master.c:152
-msgid ""
-"If is set to 1, all the dock items bound to the master are locked; if it's "
-"0, all are unlocked; -1 indicates inconsistency among the items"
-msgstr ""
-"Wenn zu 1 gesetzt, werden alle Dock-Objekte an Hauptobjekt gebunden; zu 0 "
-"sind alle ungebunden; -1 weist auf Inkonsistenzen zwischen den Objekten hin"
+msgid "If is set to 1, all the dock items bound to the master are locked; if it's 0, all are unlocked; -1 indicates inconsistency among the items"
+msgstr "Wenn zu 1 gesetzt, werden alle Dock-Objekte an Hauptobjekt gebunden; zu 0 sind alle ungebunden; -1 weist auf Inkonsistenzen zwischen den Objekten hin"
-#: ../src/libgdl/gdl-dock-master.c:160 ../src/libgdl/gdl-switcher.c:706
+#: ../src/libgdl/gdl-dock-master.c:160
+#: ../src/libgdl/gdl-switcher.c:706
msgid "Switcher Style"
msgstr "Stil des Umschalters"
-#: ../src/libgdl/gdl-dock-master.c:161 ../src/libgdl/gdl-switcher.c:707
+#: ../src/libgdl/gdl-dock-master.c:161
+#: ../src/libgdl/gdl-switcher.c:707
msgid "Switcher buttons style"
msgstr "Stil des Umschalters"
@@ -6898,30 +6873,18 @@ msgid "Expand direction"
msgstr "Richtung der Expansion"
#: ../src/libgdl/gdl-dock-master.c:169
-msgid ""
-"Allow the master's dock items to expand their container dock objects in the "
-"given direction"
-msgstr ""
-"Erlaubt Hauptdocks die beinhalteten Dock-Objekte in die gegebene Richtung zu "
-"erweitern"
+msgid "Allow the master's dock items to expand their container dock objects in the given direction"
+msgstr "Erlaubt Hauptdocks die beinhalteten Dock-Objekte in die gegebene Richtung zu erweitern"
#: ../src/libgdl/gdl-dock-master.c:796
#, c-format
-msgid ""
-"master %p: unable to add object %p[%s] to the hash. There already is an "
-"item with that name (%p)."
-msgstr ""
-"Hauptobjekt %p: Hinzufügen von Objekt %p[%s] zum Hash nicht möglich. Es "
-"existiert schon ein Objekt mit diesem Namen (%p)."
+msgid "master %p: unable to add object %p[%s] to the hash. There already is an item with that name (%p)."
+msgstr "Hauptobjekt %p: Hinzufügen von Objekt %p[%s] zum Hash nicht möglich. Es existiert schon ein Objekt mit diesem Namen (%p)."
#: ../src/libgdl/gdl-dock-master.c:969
#, c-format
-msgid ""
-"The new dock controller %p is automatic. Only manual dock objects should be "
-"named controller."
-msgstr ""
-"Die neue Docksteuerung %p ist automatisch. Nur manuelle Dockobjekte sollten "
-"Steuerung heissen."
+msgid "The new dock controller %p is automatic. Only manual dock objects should be named controller."
+msgstr "Die neue Docksteuerung %p ist automatisch. Nur manuelle Dockobjekte sollten Steuerung heissen."
#: ../src/libgdl/gdl-dock-notebook.c:134
#: ../src/ui/dialog/align-and-distribute.cpp:919
@@ -6935,7 +6898,8 @@ msgstr "Seite"
msgid "The index of the current page"
msgstr "Aktuelle Seitenzahl"
-#: ../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:217
msgid "Name"
msgstr "Name"
@@ -6977,36 +6941,23 @@ msgstr "Hauptdock, an das dieses Dock-Objekt gebunden ist."
#: ../src/libgdl/gdl-dock-object.c:434
#, c-format
-msgid ""
-"Call to gdl_dock_object_dock in a dock object %p (object type is %s) which "
-"hasn't implemented this method"
-msgstr ""
-"Aufruf von gdl_dock_object_dock in einem Dock-Objekt %p (des Typs %s) ist "
-"nicht implementiert"
+msgid "Call to gdl_dock_object_dock in a dock object %p (object type is %s) which hasn't implemented this method"
+msgstr "Aufruf von gdl_dock_object_dock in einem Dock-Objekt %p (des Typs %s) ist nicht implementiert"
#: ../src/libgdl/gdl-dock-object.c:563
#, c-format
-msgid ""
-"Dock operation requested in a non-bound object %p. The application might "
-"crash"
-msgstr ""
-"Andockoperation in ungebundenem Objekt %p gestartet. Die Anwendung kann "
-"abstürzen."
+msgid "Dock operation requested in a non-bound object %p. The application might crash"
+msgstr "Andockoperation in ungebundenem Objekt %p gestartet. Die Anwendung kann abstürzen."
#: ../src/libgdl/gdl-dock-object.c:570
#, c-format
msgid "Cannot dock %p to %p because they belong to different masters"
-msgstr ""
-"Kann %p nicht an %p andocken, da sie zu unterschiedlichen Hauptobjekten "
-"gehören."
+msgstr "Kann %p nicht an %p andocken, da sie zu unterschiedlichen Hauptobjekten gehören."
#: ../src/libgdl/gdl-dock-object.c:612
#, c-format
-msgid ""
-"Attempt to bind to %p an already bound dock object %p (current master: %p)"
-msgstr ""
-"Versuch, %p an ein schon gebundenes Objekt %p anzubinden (gehört momentan zu "
-"%p)"
+msgid "Attempt to bind to %p an already bound dock object %p (current master: %p)"
+msgstr "Versuch, %p an ein schon gebundenes Objekt %p anzubinden (gehört momentan zu %p)"
#: ../src/libgdl/gdl-dock-paned.c:132
msgid "Position"
@@ -7021,12 +6972,8 @@ msgid "Sticky"
msgstr "klebrig"
#: ../src/libgdl/gdl-dock-placeholder.c:144
-msgid ""
-"Whether the placeholder will stick to its host or move up the hierarchy when "
-"the host is redocked"
-msgstr ""
-"Ob der Platzhalter bei erneutem Andocken des Wirtes bei diesem bleibt oder "
-"in der Hierarchie aufsteigt"
+msgid "Whether the placeholder will stick to its host or move up the hierarchy when the host is redocked"
+msgstr "Ob der Platzhalter bei erneutem Andocken des Wirtes bei diesem bleibt oder in der Hierarchie aufsteigt"
#: ../src/libgdl/gdl-dock-placeholder.c:151
msgid "Host"
@@ -7041,12 +6988,8 @@ msgid "Next placement"
msgstr "Nächste Platzierung"
#: ../src/libgdl/gdl-dock-placeholder.c:160
-msgid ""
-"The position an item will be docked to our host if a request is made to dock "
-"to us"
-msgstr ""
-"Die Position, an der ein neues Objekt im Falle eine Andockversuchs an "
-"unserem Wirt andockt."
+msgid "The position an item will be docked to our host if a request is made to dock to us"
+msgstr "Die Position, an der ein neues Objekt im Falle eine Andockversuchs an unserem Wirt andockt."
#: ../src/libgdl/gdl-dock-placeholder.c:170
msgid "Width for the widget when it's attached to the placeholder"
@@ -7087,18 +7030,13 @@ msgstr "Versuch, ein Objekt an einen ungebundenen Platzhalter anzudocken"
#: ../src/libgdl/gdl-dock-placeholder.c:618
#, c-format
msgid "Got a detach signal from an object (%p) who is not our host %p"
-msgstr ""
-"Bekomme ein Abkopplungssignal von einem Objekt (%p), das nicht unser Wirt %p "
-"ist."
+msgstr "Bekomme ein Abkopplungssignal von einem Objekt (%p), das nicht unser Wirt %p ist."
# Weiter von "Wirt" (=host) zu sprechen scheint konsistenter, als neue child/parent-Terminologie
#: ../src/libgdl/gdl-dock-placeholder.c:643
#, c-format
-msgid ""
-"Something weird happened while getting the child placement for %p from "
-"parent %p"
-msgstr ""
-"Unerwartete Störung während der Erfragung der Platzierung von %p von Wirt %p"
+msgid "Something weird happened while getting the child placement for %p from parent %p"
+msgstr "Unerwartete Störung während der Erfragung der Platzierung von %p von Wirt %p"
#: ../src/libgdl/gdl-dock-tablabel.c:129
msgid "Dockitem which 'owns' this tablabel"
@@ -7106,9 +7044,7 @@ msgstr "Dock-Objekt, dem dieser Tabbezeichner \"gehört\"."
#: ../src/libnrtype/FontFactory.cpp:806
msgid "Ignoring font without family that will crash Pango"
-msgstr ""
-"Schrift ohne zugehörige Schriftfamilie wird ignoriert, damit Pango nicht "
-"abstürzt"
+msgstr "Schrift ohne zugehörige Schriftfamilie wird ignoriert, damit Pango nicht abstürzt"
#: ../src/live_effects/effect.cpp:86
msgid "doEffect stack test"
@@ -7239,12 +7175,8 @@ msgid "Is visible?"
msgstr "Sichtbar?"
#: ../src/live_effects/effect.cpp:273
-msgid ""
-"If unchecked, the effect remains applied to the object but is temporarily "
-"disabled on canvas"
-msgstr ""
-"Wenn die Option deaktiviert ist, wird der Effekt auf das Objekt angewendet, "
-"jedoch temporär ausgeblendet."
+msgid "If unchecked, the effect remains applied to the object but is temporarily disabled on canvas"
+msgstr "Wenn die Option deaktiviert ist, wird der Effekt auf das Objekt angewendet, jedoch temporär ausgeblendet."
#: ../src/live_effects/effect.cpp:294
msgid "No effect"
@@ -7253,9 +7185,7 @@ msgstr "Kein Effekt"
#: ../src/live_effects/effect.cpp:341
#, c-format
msgid "Please specify a parameter path for the LPE '%s' with %d mouse clicks"
-msgstr ""
-"Bitte spezifizieren Sie einen Parameterpfad für den Pfadeffekt \"%s\" mit %d "
-"Mausklicks. "
+msgstr "Bitte spezifizieren Sie einen Parameterpfad für den Pfadeffekt \"%s\" mit %d Mausklicks. "
#: ../src/live_effects/effect.cpp:639
#, c-format
@@ -7264,9 +7194,7 @@ msgstr "Editiere Parameter <b>%s</b>."
#: ../src/live_effects/effect.cpp:644
msgid "None of the applied path effect's parameters can be edited on-canvas."
-msgstr ""
-"Keine Parameter der auf den Pfad angewandten Effekte können auf der "
-"Zeichenfläche verändert werden."
+msgstr "Keine Parameter der auf den Pfad angewandten Effekte können auf der Zeichenfläche verändert werden."
#: ../src/live_effects/lpe-bendpath.cpp:55
msgid "Bend path"
@@ -7295,8 +7223,7 @@ msgstr "Originalpfad ist vertikal"
#: ../src/live_effects/lpe-bendpath.cpp:58
msgid "Rotates the original 90 degrees, before bending it along the bend path"
-msgstr ""
-"Rotiert das Original um 90 Grad bevor es entlang des Pfades gebogen wird"
+msgstr "Rotiert das Original um 90 Grad bevor es entlang des Pfades gebogen wird"
#: ../src/live_effects/lpe-constructgrid.cpp:28
msgid "Size X"
@@ -7336,48 +7263,32 @@ msgstr "Start der Kanten Abweichung"
# Hier "stitches" etwa Kopien? Was ist dieser Effekt?
#: ../src/live_effects/lpe-curvestitch.cpp:44
-msgid ""
-"The amount of random jitter to move the start points of the stitches inside "
-"& outside the guide path"
-msgstr ""
-"Mittlere Größe der Abstände, um die die Startpunkte der Kopien inner- und "
-"ausserhalb des Pfades versetzt werden."
+msgid "The amount of random jitter to move the start points of the stitches inside & outside the guide path"
+msgstr "Mittlere Größe der Abstände, um die die Startpunkte der Kopien inner- und ausserhalb des Pfades versetzt werden."
#: ../src/live_effects/lpe-curvestitch.cpp:45
msgid "Start spacing variance"
msgstr "Start der Abstands-Abweichung"
#: ../src/live_effects/lpe-curvestitch.cpp:45
-msgid ""
-"The amount of random shifting to move the start points of the stitches back "
-"& forth along the guide path"
-msgstr ""
-"Mittlere Größe der Abstände, um die die Startpunkte der Kopien entlang des "
-"Führungspfades versetzt werden."
+msgid "The amount of random shifting to move the start points of the stitches back & forth along the guide path"
+msgstr "Mittlere Größe der Abstände, um die die Startpunkte der Kopien entlang des Führungspfades versetzt werden."
#: ../src/live_effects/lpe-curvestitch.cpp:46
msgid "End edge variance"
msgstr "Ende der Kanten Abweichung"
#: ../src/live_effects/lpe-curvestitch.cpp:46
-msgid ""
-"The amount of randomness that moves the end points of the stitches inside & "
-"outside the guide path"
-msgstr ""
-"Mittlere Größe der Abstände, um die die Endpunkte der Kopien inner- und "
-"außerhalb des Führungspfades versetzt werden."
+msgid "The amount of randomness that moves the end points of the stitches inside & outside the guide path"
+msgstr "Mittlere Größe der Abstände, um die die Endpunkte der Kopien inner- und außerhalb des Führungspfades versetzt werden."
#: ../src/live_effects/lpe-curvestitch.cpp:47
msgid "End spacing variance"
msgstr "Ende der Abstands-Abweichung"
#: ../src/live_effects/lpe-curvestitch.cpp:47
-msgid ""
-"The amount of random shifting to move the end points of the stitches back & "
-"forth along the guide path"
-msgstr ""
-"Mittlere Größe der Abstände, um die die Endpunkte der Kopien entlang des "
-"Führungspfades versetzt werden."
+msgid "The amount of random shifting to move the end points of the stitches back & forth along the guide path"
+msgstr "Mittlere Größe der Abstände, um die die Endpunkte der Kopien entlang des Führungspfades versetzt werden."
#: ../src/live_effects/lpe-curvestitch.cpp:48
msgid "Scale width"
@@ -7456,9 +7367,7 @@ msgid "Phi"
msgstr "Phi"
#: ../src/live_effects/lpe-gears.cpp:213
-msgid ""
-"Tooth pressure angle (typically 20-25 deg). The ratio of teeth not in "
-"contact."
+msgid "Tooth pressure angle (typically 20-25 deg). The ratio of teeth not in contact."
msgstr "Zahnflankenwinkel (typ. 20-25°)."
#: ../src/live_effects/lpe-interpolate.cpp:30
@@ -7483,14 +7392,8 @@ msgid "Equidistant spacing"
msgstr "Gleiche Abstände"
#: ../src/live_effects/lpe-interpolate.cpp:32
-msgid ""
-"If true, the spacing between intermediates is constant along the length of "
-"the path. If false, the distance depends on the location of the nodes of the "
-"trajectory path."
-msgstr ""
-"Falls gesetzt ist der Abstand zwischen zwei Interpolationen konstant entlang "
-"des Pfades. Falls nicht gesetzt hängt der Abstand von der Position der "
-"Knoten des Trajektorienpfades ab."
+msgid "If true, the spacing between intermediates is constant along the length of the path. If false, the distance depends on the location of the nodes of the trajectory path."
+msgstr "Falls gesetzt ist der Abstand zwischen zwei Interpolationen konstant entlang des Pfades. Falls nicht gesetzt hängt der Abstand von der Position der Knoten des Trajektorienpfades ab."
#. initialise your parameters here:
#: ../src/live_effects/lpe-knot.cpp:328
@@ -7509,7 +7412,8 @@ msgstr "In Einheiten der Strichbreite"
msgid "Consider 'Interruption width' as a ratio of stroke width"
msgstr "\"Unterbrechungsbreite\" in Vielfachen der Strichbreite"
-#: ../src/live_effects/lpe-knot.cpp:330 ../src/widgets/stroke-style.cpp:1093
+#: ../src/live_effects/lpe-knot.cpp:330
+#: ../src/widgets/stroke-style.cpp:1093
#: ../share/extensions/edge3d.inx.h:9
msgid "Stroke width"
msgstr "Breite der Kontur"
@@ -7601,12 +7505,8 @@ msgstr "Abstand"
#: ../src/live_effects/lpe-patternalongpath.cpp:70
#, no-c-format
-msgid ""
-"Space between copies of the pattern. Negative values allowed, but are "
-"limited to -90% of pattern width."
-msgstr ""
-"Abstand zwischen den Kopien. Negative Werte bis -90% der Musterbreite sind "
-"erlaubt."
+msgid "Space between copies of the pattern. Negative values allowed, but are limited to -90% of pattern width."
+msgstr "Abstand zwischen den Kopien. Negative Werte bis -90% der Musterbreite sind erlaubt."
#: ../src/live_effects/lpe-patternalongpath.cpp:72
#: ../share/extensions/pathalongpath.inx.h:5
@@ -7625,12 +7525,8 @@ msgid "Offsets in unit of pattern size"
msgstr "Versatz in der Einheit der Mustergröße"
#: ../src/live_effects/lpe-patternalongpath.cpp:75
-msgid ""
-"Spacing, tangential and normal offset are expressed as a ratio of width/"
-"height"
-msgstr ""
-"Abstände sowie tangentialer und radialer Versatz sind als Verhältnis Breite/"
-"Höhe gegeben."
+msgid "Spacing, tangential and normal offset are expressed as a ratio of width/height"
+msgstr "Abstände sowie tangentialer und radialer Versatz sind als Verhältnis Breite/Höhe gegeben."
#: ../src/live_effects/lpe-patternalongpath.cpp:77
#: ../share/extensions/pathalongpath.inx.h:7
@@ -7648,8 +7544,7 @@ msgstr "Beieinanderliegende Enden verschmelzen"
#: ../src/live_effects/lpe-patternalongpath.cpp:79
msgid "Fuse ends closer than this number. 0 means don't fuse."
-msgstr ""
-"Verschmelze Enden näher zusammen als diese Zahl. 0 für keine Verschmelzung."
+msgstr "Verschmelze Enden näher zusammen als diese Zahl. 0 für keine Verschmelzung."
#: ../src/live_effects/lpe-rough-hatches.cpp:226
msgid "Frequency randomness"
@@ -7673,48 +7568,32 @@ msgid "Half-turns smoothness: 1st side, in"
msgstr "Weichheit der Umkehrpunkte: 1. Seite, einlaufend"
#: ../src/live_effects/lpe-rough-hatches.cpp:229
-msgid ""
-"Set smoothness/sharpness of path when reaching a 'bottom' half-turn. "
-"0=sharp, 1=default"
-msgstr ""
-"Wählt Glattheit des Pfades bei Einlaufen in \"unteren\" Wendepunkt. 0=spitz, "
-"1=Vorgabe"
+msgid "Set smoothness/sharpness of path when reaching a 'bottom' half-turn. 0=sharp, 1=default"
+msgstr "Wählt Glattheit des Pfades bei Einlaufen in \"unteren\" Wendepunkt. 0=spitz, 1=Vorgabe"
#: ../src/live_effects/lpe-rough-hatches.cpp:230
msgid "1st side, out"
msgstr "1. Seite, außen"
#: ../src/live_effects/lpe-rough-hatches.cpp:230
-msgid ""
-"Set smoothness/sharpness of path when leaving a 'bottom' half-turn. 0=sharp, "
-"1=default"
-msgstr ""
-"Wählt Glattheit des Pfades bei Auslaufen aus \"unterem\" Wendepunkt. "
-"0=spitz, 1=Vorgabe"
+msgid "Set smoothness/sharpness of path when leaving a 'bottom' half-turn. 0=sharp, 1=default"
+msgstr "Wählt Glattheit des Pfades bei Auslaufen aus \"unterem\" Wendepunkt. 0=spitz, 1=Vorgabe"
#: ../src/live_effects/lpe-rough-hatches.cpp:231
msgid "2nd side, in"
msgstr "2. Seite, innen"
#: ../src/live_effects/lpe-rough-hatches.cpp:231
-msgid ""
-"Set smoothness/sharpness of path when reaching a 'top' half-turn. 0=sharp, "
-"1=default"
-msgstr ""
-"Wählt Glattheit des Pfades bei Einlaufen in \"oberen\" Wendepunkt. 0=spitz, "
-"1=Vorgabe"
+msgid "Set smoothness/sharpness of path when reaching a 'top' half-turn. 0=sharp, 1=default"
+msgstr "Wählt Glattheit des Pfades bei Einlaufen in \"oberen\" Wendepunkt. 0=spitz, 1=Vorgabe"
#: ../src/live_effects/lpe-rough-hatches.cpp:232
msgid "2nd side, out"
msgstr "2. Seite, außen"
#: ../src/live_effects/lpe-rough-hatches.cpp:232
-msgid ""
-"Set smoothness/sharpness of path when leaving a 'top' half-turn. 0=sharp, "
-"1=default"
-msgstr ""
-"Wählt Glattheit des Pfades bei Auslaufen aus \"oberen\" Wendepunkt. 0=spitz, "
-"1=Vorgabe"
+msgid "Set smoothness/sharpness of path when leaving a 'top' half-turn. 0=sharp, 1=default"
+msgstr "Wählt Glattheit des Pfades bei Auslaufen aus \"oberen\" Wendepunkt. 0=spitz, 1=Vorgabe"
#: ../src/live_effects/lpe-rough-hatches.cpp:233
msgid "Magnitude jitter: 1st side"
@@ -7722,9 +7601,7 @@ msgstr "Ausmaß Schwankung: 1. Seite"
#: ../src/live_effects/lpe-rough-hatches.cpp:233
msgid "Randomly moves 'bottom' half-turns to produce magnitude variations."
-msgstr ""
-"Verschiebt zufällig \"untere\" Wendepunkte, um Änderung der Amplitude zu "
-"erreichen."
+msgstr "Verschiebt zufällig \"untere\" Wendepunkte, um Änderung der Amplitude zu erreichen."
#: ../src/live_effects/lpe-rough-hatches.cpp:234
#: ../src/live_effects/lpe-rough-hatches.cpp:236
@@ -7734,29 +7611,19 @@ msgstr "2. Seite"
#: ../src/live_effects/lpe-rough-hatches.cpp:234
msgid "Randomly moves 'top' half-turns to produce magnitude variations."
-msgstr ""
-"Verschiebt zufällig \"obere\" Wendepunkte, um Änderung der Amplitude zu "
-"erreichen."
+msgstr "Verschiebt zufällig \"obere\" Wendepunkte, um Änderung der Amplitude zu erreichen."
#: ../src/live_effects/lpe-rough-hatches.cpp:235
msgid "Parallelism jitter: 1st side"
msgstr "Parallelität Schwankung: 1. Seite"
#: ../src/live_effects/lpe-rough-hatches.cpp:235
-msgid ""
-"Add direction randomness by moving 'bottom' half-turns tangentially to the "
-"boundary."
-msgstr ""
-"Ändert Richtung zufällig, in dem \"untere\" Wendepunkte tangential zur "
-"Begrenzung bewegt werden."
+msgid "Add direction randomness by moving 'bottom' half-turns tangentially to the boundary."
+msgstr "Ändert Richtung zufällig, in dem \"untere\" Wendepunkte tangential zur Begrenzung bewegt werden."
#: ../src/live_effects/lpe-rough-hatches.cpp:236
-msgid ""
-"Add direction randomness by randomly moving 'top' half-turns tangentially to "
-"the boundary."
-msgstr ""
-"Ändert Richtung zufällig, in dem \"obere\" Wendepunkte tangential zur "
-"Begrenzung bewegt werden."
+msgid "Add direction randomness by randomly moving 'top' half-turns tangentially to the boundary."
+msgstr "Ändert Richtung zufällig, in dem \"obere\" Wendepunkte tangential zur Begrenzung bewegt werden."
#: ../src/live_effects/lpe-rough-hatches.cpp:237
msgid "Variance: 1st side"
@@ -7835,30 +7702,31 @@ msgid "Global bending"
msgstr "Globale Wölbung"
#: ../src/live_effects/lpe-rough-hatches.cpp:251
-msgid ""
-"Relative position to a reference point defines global bending direction and "
-"amount"
-msgstr ""
-"Die relative Position bezüglich eines Referenzpunktes bestimmt Richtung und "
-"Stärke der globalen Krümmung. "
+msgid "Relative position to a reference point defines global bending direction and amount"
+msgstr "Die relative Position bezüglich eines Referenzpunktes bestimmt Richtung und Stärke der globalen Krümmung. "
-#: ../src/live_effects/lpe-ruler.cpp:27 ../share/extensions/restack.inx.h:7
+#: ../src/live_effects/lpe-ruler.cpp:27
+#: ../share/extensions/restack.inx.h:7
msgid "Left"
msgstr "Links"
-#: ../src/live_effects/lpe-ruler.cpp:28 ../share/extensions/restack.inx.h:14
+#: ../src/live_effects/lpe-ruler.cpp:28
+#: ../share/extensions/restack.inx.h:14
msgid "Right"
msgstr "Rechts"
-#: ../src/live_effects/lpe-ruler.cpp:29 ../src/live_effects/lpe-ruler.cpp:37
+#: ../src/live_effects/lpe-ruler.cpp:29
+#: ../src/live_effects/lpe-ruler.cpp:37
msgid "Both"
msgstr "Beide"
-#: ../src/live_effects/lpe-ruler.cpp:35 ../src/widgets/toolbox.cpp:5168
+#: ../src/live_effects/lpe-ruler.cpp:35
+#: ../src/widgets/toolbox.cpp:5168
msgid "Start"
msgstr "Anfang"
-#: ../src/live_effects/lpe-ruler.cpp:36 ../src/widgets/toolbox.cpp:5181
+#: ../src/live_effects/lpe-ruler.cpp:36
+#: ../src/widgets/toolbox.cpp:5181
msgid "End"
msgstr "Ende"
@@ -7954,9 +7822,7 @@ msgstr "Max. Überlappung"
#: ../src/live_effects/lpe-sketch.cpp:41
msgid "How much successive strokes should overlap (relative to maximum length)"
-msgstr ""
-"Wie viele erfolgreich gezeichnete Striche sollen überlappen (relativ zur "
-"max. Länge)"
+msgstr "Wie viele erfolgreich gezeichnete Striche sollen überlappen (relativ zur max. Länge)"
#: ../src/live_effects/lpe-sketch.cpp:42
msgid "Overlap variation"
@@ -7971,12 +7837,8 @@ msgid "Max. end tolerance"
msgstr "Max. Endtoleranz"
#: ../src/live_effects/lpe-sketch.cpp:45
-msgid ""
-"Maximum distance between ends of original and approximating paths (relative "
-"to maximum length)"
-msgstr ""
-"Maximale Distanz zwischen dem Ende der originalen und durschnittlichen Pfade "
-"(relativ zur max. Länge)"
+msgid "Maximum distance between ends of original and approximating paths (relative to maximum length)"
+msgstr "Maximale Distanz zwischen dem Ende der originalen und durschnittlichen Pfade (relativ zur max. Länge)"
#: ../src/live_effects/lpe-sketch.cpp:46
msgid "Average offset"
@@ -8010,20 +7872,18 @@ msgstr "Konstruktionslinien"
msgid "How many construction lines (tangents) to draw"
msgstr "Wie viele Konstruktionslinien (Tangenten) gezeichnet werden sollen"
-#: ../src/live_effects/lpe-sketch.cpp:55 ../src/selection-chemistry.cpp:1516
-#: ../src/seltrans.cpp:531 ../src/ui/dialog/transformation.cpp:738
+#: ../src/live_effects/lpe-sketch.cpp:55
+#: ../src/selection-chemistry.cpp:1516
+#: ../src/seltrans.cpp:531
+#: ../src/ui/dialog/transformation.cpp:738
#: ../share/extensions/interp_att_g.inx.h:16
#: ../share/extensions/render_alphabetsoup.inx.h:4
msgid "Scale"
msgstr "Skalieren"
#: ../src/live_effects/lpe-sketch.cpp:56
-msgid ""
-"Scale factor relating curvature and length of construction lines (try "
-"5*offset)"
-msgstr ""
-"Skalierungsfaktor im Bezug auf Krümmung und Länge der Konstruktionslinien "
-"(Versuchen Sie 5*Versatz)"
+msgid "Scale factor relating curvature and length of construction lines (try 5*offset)"
+msgstr "Skalierungsfaktor im Bezug auf Krümmung und Länge der Konstruktionslinien (Versuchen Sie 5*Versatz)"
#: ../src/live_effects/lpe-sketch.cpp:57
msgid "Max. length"
@@ -8047,9 +7907,7 @@ msgstr "Zufällige Platzierung"
#: ../src/live_effects/lpe-sketch.cpp:59
msgid "0: evenly distributed construction lines, 1: purely random placement"
-msgstr ""
-"0: gleichmäßig verteilte Konstruktionslinien, 1: absolut zufällige "
-"Platzierung"
+msgstr "0: gleichmäßig verteilte Konstruktionslinien, 1: absolut zufällige Platzierung"
# !!! maybe use "verbinden"
#: ../src/live_effects/lpe-sketch.cpp:61
@@ -8089,12 +7947,8 @@ msgid "Use uniform transforms only"
msgstr "Nur uniforme Transformationen verwenden"
#: ../src/live_effects/lpe-vonkoch.cpp:49
-msgid ""
-"2 consecutive segments are used to reverse/preserve orientation only "
-"(otherwise, they define a general transform)."
-msgstr ""
-"Zwei aufeinander folgende Segmente klappen nur die Orientierung um "
-"(ansonsten definieren sie eine generelle Transformation)"
+msgid "2 consecutive segments are used to reverse/preserve orientation only (otherwise, they define a general transform)."
+msgstr "Zwei aufeinander folgende Segmente klappen nur die Orientierung um (ansonsten definieren sie eine generelle Transformation)"
#: ../src/live_effects/lpe-vonkoch.cpp:50
msgid "Draw all generations"
@@ -8179,9 +8033,7 @@ msgstr "Einheiten-Parameter ändern"
#: ../src/main-cmdlineact.cpp:49
#, c-format
msgid "Unable to find verb ID '%s' specified on the command line.\n"
-msgstr ""
-"Kann Verben-Kennung »%s«, die per Kommandozeile übergeben wurde, nicht "
-"finden.\n"
+msgstr "Kann Verben-Kennung »%s«, die per Kommandozeile übergeben wurde, nicht finden.\n"
#: ../src/main-cmdlineact.cpp:61
#, c-format
@@ -8198,50 +8050,43 @@ msgstr "X-Server nicht verwenden (Dateien nur mittels Konsole verarbeiten)"
#: ../src/main.cpp:275
msgid "Try to use X server (even if $DISPLAY is not set)"
-msgstr ""
-"Versuche, den X-Server zu verwenden (auch wenn die Umgebungsvariable "
-"»$DISPLAY« nicht gesetzt wurde)"
+msgstr "Versuche, den X-Server zu verwenden (auch wenn die Umgebungsvariable »$DISPLAY« nicht gesetzt wurde)"
#: ../src/main.cpp:280
msgid "Open specified document(s) (option string may be excluded)"
-msgstr ""
-"Angegebene Dokumente öffnen (Optionszeichenkette muss nicht übergeben werden)"
-
-#: ../src/main.cpp:281 ../src/main.cpp:286 ../src/main.cpp:291
-#: ../src/main.cpp:358 ../src/main.cpp:363 ../src/main.cpp:368
-#: ../src/main.cpp:373 ../src/main.cpp:379
+msgstr "Angegebene Dokumente öffnen (Optionszeichenkette muss nicht übergeben werden)"
+
+#: ../src/main.cpp:281
+#: ../src/main.cpp:286
+#: ../src/main.cpp:291
+#: ../src/main.cpp:358
+#: ../src/main.cpp:363
+#: ../src/main.cpp:368
+#: ../src/main.cpp:373
+#: ../src/main.cpp:379
msgid "FILENAME"
msgstr "DATEINAME"
#: ../src/main.cpp:285
msgid "Print document(s) to specified output file (use '| program' for pipe)"
-msgstr ""
-"Dokumente in angegebene Ausgabedatei drucken (verwenden Sie »| Programm« zur "
-"Weiterleitung)"
+msgstr "Dokumente in angegebene Ausgabedatei drucken (verwenden Sie »| Programm« zur Weiterleitung)"
#: ../src/main.cpp:290
msgid "Export document to a PNG file"
msgstr "Das Dokument in eine PNG-Datei exportieren"
#: ../src/main.cpp:295
-msgid ""
-"Resolution for exporting to bitmap and for rasterization of filters in PS/"
-"EPS/PDF (default 90)"
-msgstr ""
-"Auflösung beim Exportieren von Bitmaps und Rasterisierung von Filtern in PS/"
-"EPS/PDF (Vorgabe ist 90)"
+msgid "Resolution for exporting to bitmap and for rasterization of filters in PS/EPS/PDF (default 90)"
+msgstr "Auflösung beim Exportieren von Bitmaps und Rasterisierung von Filtern in PS/EPS/PDF (Vorgabe ist 90)"
-#: ../src/main.cpp:296 ../src/ui/widget/rendering-options.cpp:43
+#: ../src/main.cpp:296
+#: ../src/ui/widget/rendering-options.cpp:43
msgid "DPI"
msgstr "DPI"
#: ../src/main.cpp:300
-msgid ""
-"Exported area in SVG user units (default is the page; 0,0 is lower-left "
-"corner)"
-msgstr ""
-"Exportierter Bereich in SVG-Benutzereinheiten (Vorgabe: gesamte "
-"Zeichenfläche, »0,0« ist die untere linke Ecke)"
+msgid "Exported area in SVG user units (default is the page; 0,0 is lower-left corner)"
+msgstr "Exportierter Bereich in SVG-Benutzereinheiten (Vorgabe: gesamte Zeichenfläche, »0,0« ist die untere linke Ecke)"
#: ../src/main.cpp:301
msgid "x0:y0:x1:y1"
@@ -8249,20 +8094,15 @@ msgstr "X0:Y0:X1:Y1"
#: ../src/main.cpp:305
msgid "Exported area is the entire drawing (not page)"
-msgstr ""
-"Exportierter Bereich ist die gesamte Zeichnung, nicht die Zeichenfläche"
+msgstr "Exportierter Bereich ist die gesamte Zeichnung, nicht die Zeichenfläche"
#: ../src/main.cpp:310
msgid "Exported area is the entire page"
msgstr "Exportierter Bereich ist die gesamte Zeichenfläche"
#: ../src/main.cpp:315
-msgid ""
-"Snap the bitmap export area outwards to the nearest integer values (in SVG "
-"user units)"
-msgstr ""
-"Die Fläche für den Export einer Bitmap nach außen auf die nächsten "
-"Ganzzahlen aufrunden (in SVG-Benutzereinheiten)"
+msgid "Snap the bitmap export area outwards to the nearest integer values (in SVG user units)"
+msgstr "Die Fläche für den Export einer Bitmap nach außen auf die nächsten Ganzzahlen aufrunden (in SVG-Benutzereinheiten)"
#: ../src/main.cpp:320
msgid "The width of exported bitmap in pixels (overrides export-dpi)"
@@ -8284,30 +8124,24 @@ msgstr "HÖHE"
msgid "The ID of the object to export"
msgstr "Kennung des zu exportierenden Objektes"
-#: ../src/main.cpp:331 ../src/main.cpp:424
+#: ../src/main.cpp:331
+#: ../src/main.cpp:424
msgid "ID"
msgstr "Kennung"
#. TRANSLATORS: this means: "Only export the object whose id is given in --export-id".
#. See "man inkscape" for details.
#: ../src/main.cpp:337
-msgid ""
-"Export just the object with export-id, hide all others (only with export-id)"
-msgstr ""
-"Nur das Objekt mit der angegebenen Export-ID exportieren, alle anderen "
-"auslassen"
+msgid "Export just the object with export-id, hide all others (only with export-id)"
+msgstr "Nur das Objekt mit der angegebenen Export-ID exportieren, alle anderen auslassen"
#: ../src/main.cpp:342
msgid "Use stored filename and DPI hints when exporting (only with export-id)"
-msgstr ""
-"Verwende gespeicherten Dateinamen und DPI-Hinweise zum Exportieren (nur mit "
-"Export-ID)"
+msgstr "Verwende gespeicherten Dateinamen und DPI-Hinweise zum Exportieren (nur mit Export-ID)"
#: ../src/main.cpp:347
msgid "Background color of exported bitmap (any SVG-supported color string)"
-msgstr ""
-"Hintergrundfarbe der exportierten Bitmap (jede von SVG unterstützte "
-"Farbzeichenkette)"
+msgstr "Hintergrundfarbe der exportierten Bitmap (jede von SVG unterstützte Farbzeichenkette)"
#: ../src/main.cpp:348
msgid "COLOR"
@@ -8315,8 +8149,7 @@ msgstr "FARBE"
#: ../src/main.cpp:352
msgid "Background opacity of exported bitmap (either 0.0 to 1.0, or 1 to 255)"
-msgstr ""
-"Hintergrunddeckkraft der exportierten Bitmap (0,0 bis 1,0 oder 1 bis 255)"
+msgstr "Hintergrunddeckkraft der exportierten Bitmap (0,0 bis 1,0 oder 1 bis 255)"
#: ../src/main.cpp:353
msgid "VALUE"
@@ -8324,9 +8157,7 @@ msgstr "WERT"
#: ../src/main.cpp:357
msgid "Export document to plain SVG file (no sodipodi or inkscape namespaces)"
-msgstr ""
-"Dokument in reine SVG-Datei exportieren (ohne Sodipodi- oder Inkscape-"
-"Namensräume)"
+msgstr "Dokument in reine SVG-Datei exportieren (ohne Sodipodi- oder Inkscape-Namensräume)"
#: ../src/main.cpp:362
msgid "Export document to a PS file"
@@ -8349,45 +8180,28 @@ msgid "Convert text object to paths on export (PS, EPS, PDF)"
msgstr "Textelemente beim PS-/EPS-/PDF-Export in Pfade umwandeln "
#: ../src/main.cpp:389
-msgid ""
-"Render filtered objects without filters, instead of rasterizing (PS, EPS, "
-"PDF)"
+msgid "Render filtered objects without filters, instead of rasterizing (PS, EPS, PDF)"
msgstr "Objekte ohne Filter zeichnen, statt Rasterisierung (PS, EPS, PDF)"
#. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
#: ../src/main.cpp:395
-msgid ""
-"Query the X coordinate of the drawing or, if specified, of the object with --"
-"query-id"
-msgstr ""
-"Abfragen der X-Koordinate der Zeichnung oder des mit --query-id angegebenen "
-"Objektes"
+msgid "Query the X coordinate of the drawing or, if specified, of the object with --query-id"
+msgstr "Abfragen der X-Koordinate der Zeichnung oder des mit --query-id angegebenen Objektes"
#. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
#: ../src/main.cpp:401
-msgid ""
-"Query the Y coordinate of the drawing or, if specified, of the object with --"
-"query-id"
-msgstr ""
-"Abfragen der Y-Koordinate der Zeichnung oder des mit --query-id angegebenen "
-"Objektes"
+msgid "Query the Y coordinate of the drawing or, if specified, of the object with --query-id"
+msgstr "Abfragen der Y-Koordinate der Zeichnung oder des mit --query-id angegebenen Objektes"
#. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
#: ../src/main.cpp:407
-msgid ""
-"Query the width of the drawing or, if specified, of the object with --query-"
-"id"
-msgstr ""
-"Abfragen der Breite der Zeichnung oder des mit --query-id angegebenen "
-"Objektes"
+msgid "Query the width of the drawing or, if specified, of the object with --query-id"
+msgstr "Abfragen der Breite der Zeichnung oder des mit --query-id angegebenen Objektes"
#. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
#: ../src/main.cpp:413
-msgid ""
-"Query the height of the drawing or, if specified, of the object with --query-"
-"id"
-msgstr ""
-"Abfragen der Höhe der Zeichnung oder des mit --query-id angegebenen Objektes"
+msgid "Query the height of the drawing or, if specified, of the object with --query-id"
+msgstr "Abfragen der Höhe der Zeichnung oder des mit --query-id angegebenen Objektes"
#: ../src/main.cpp:418
msgid "List id,x,y,w,h for all objects"
@@ -8430,7 +8244,8 @@ msgstr "OBJECT-ID"
msgid "Start Inkscape in interactive shell mode."
msgstr "Inkscape in interaktivem Konsolenmodus starten."
-#: ../src/main.cpp:762 ../src/main.cpp:1088
+#: ../src/main.cpp:762
+#: ../src/main.cpp:1088
msgid ""
"[OPTIONS...] [FILE...]\n"
"\n"
@@ -8441,8 +8256,10 @@ msgstr ""
"Verfügbare Optionen:"
#. ## Add a menu for clear()
-#: ../src/menus-skeleton.h:16 ../src/ui/dialog/debug.cpp:74
-#: ../src/ui/dialog/messages.cpp:52 ../src/ui/dialog/scriptdialog.cpp:208
+#: ../src/menus-skeleton.h:16
+#: ../src/ui/dialog/debug.cpp:74
+#: ../src/ui/dialog/messages.cpp:52
+#: ../src/ui/dialog/scriptdialog.cpp:208
msgid "_File"
msgstr "_Datei"
@@ -8452,11 +8269,14 @@ msgstr "_Neu"
#. 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:2488
+#: ../src/verbs.cpp:2494
msgid "_Edit"
msgstr "_Bearbeiten"
-#: ../src/menus-skeleton.h:59 ../src/verbs.cpp:2288
+#: ../src/menus-skeleton.h:59
+#: ../src/verbs.cpp:2288
msgid "Paste Si_ze"
msgstr "_Größe einfügen"
@@ -8532,52 +8352,42 @@ msgid "Tutorials"
msgstr "Einführungen"
#: ../src/node-context.cpp:228
-msgid ""
-"<b>Ctrl</b>: toggle node type, snap handle angle, move hor/vert; <b>Ctrl"
-"+Alt</b>: move along handles"
-msgstr ""
-"<b>Strg</b>: Art des Knotens umschalten, Winkel der Anfasser einrasten, nur "
-"horizontale/vertikale Verschiebung;<b>Strg+Alt</b>: entlang der Anfasser "
-"verschieben"
+msgid "<b>Ctrl</b>: toggle node type, snap handle angle, move hor/vert; <b>Ctrl+Alt</b>: move along handles"
+msgstr "<b>Strg</b>: Art des Knotens umschalten, Winkel der Anfasser einrasten, nur horizontale/vertikale Verschiebung;<b>Strg+Alt</b>: entlang der Anfasser verschieben"
#: ../src/node-context.cpp:229
-msgid ""
-"<b>Shift</b>: toggle node selection, disable snapping, rotate both handles"
-msgstr ""
-"<b>Umschalt</b>: Knotenauswahl umschalten, Einrasten deaktivieren, beide "
-"Anfasser rotieren"
+msgid "<b>Shift</b>: toggle node selection, disable snapping, rotate both handles"
+msgstr "<b>Umschalt</b>: Knotenauswahl umschalten, Einrasten deaktivieren, beide Anfasser rotieren"
#: ../src/node-context.cpp:230
msgid "<b>Alt</b>: lock handle length; <b>Ctrl+Alt</b>: move along handles"
-msgstr ""
-"<b>Alt</b>: Anfasserlänge fixieren; <b>Strg+Alt</b>: Entlang der Anfasser "
-"verschieben"
+msgstr "<b>Alt</b>: Anfasserlänge fixieren; <b>Strg+Alt</b>: Entlang der Anfasser verschieben"
-#: ../src/nodepath.cpp:755 ../src/seltrans.cpp:624
+#: ../src/nodepath.cpp:755
+#: ../src/seltrans.cpp:624
msgid "Stamp"
msgstr "Stempeln"
-#: ../src/nodepath.cpp:1671 ../src/nodepath.cpp:1697
+#: ../src/nodepath.cpp:1671
+#: ../src/nodepath.cpp:1697
msgid "Move nodes vertically"
msgstr "Knoten vertikal verschieben"
-#: ../src/nodepath.cpp:1673 ../src/nodepath.cpp:1699
+#: ../src/nodepath.cpp:1673
+#: ../src/nodepath.cpp:1699
msgid "Move nodes horizontally"
msgstr "Knoten horizontal verschieben"
-#: ../src/nodepath.cpp:1675 ../src/nodepath.cpp:1701 ../src/nodepath.cpp:1716
+#: ../src/nodepath.cpp:1675
+#: ../src/nodepath.cpp:1701
+#: ../src/nodepath.cpp:1716
#: ../src/nodepath.cpp:3625
msgid "Move nodes"
msgstr "Knoten verschieben"
#: ../src/nodepath.cpp:1754
-msgid ""
-"<b>Node handle</b>: drag to shape the curve; with <b>Ctrl</b> to snap angle; "
-"with <b>Alt</b> to lock length; with <b>Shift</b> to rotate both handles"
-msgstr ""
-"<b>Knotenanfasser</b>. Ziehen verändert den Kurvenverlauf; <b>Strg</b> "
-"rastet den Winkel ein; <b>Alt</b> behält den Abstand zum Knoten bei; "
-"<b>Umschalt</b> rotiert beide Anfasser symmetrisch"
+msgid "<b>Node handle</b>: drag to shape the curve; with <b>Ctrl</b> to snap angle; with <b>Alt</b> to lock length; with <b>Shift</b> to rotate both handles"
+msgstr "<b>Knotenanfasser</b>. Ziehen verändert den Kurvenverlauf; <b>Strg</b> rastet den Winkel ein; <b>Alt</b> behält den Abstand zum Knoten bei; <b>Umschalt</b> rotiert beide Anfasser symmetrisch"
#: ../src/nodepath.cpp:1924
msgid "Align nodes"
@@ -8592,7 +8402,8 @@ msgstr "Knoten ausgleichen"
msgid "Add nodes"
msgstr "Mehrere Knoten hinzufügen"
-#: ../src/nodepath.cpp:2026 ../src/nodepath.cpp:2128
+#: ../src/nodepath.cpp:2026
+#: ../src/nodepath.cpp:2128
msgid "Add node"
msgstr "Knoten hinzufügen"
@@ -8616,12 +8427,14 @@ msgstr "Unterpfad mit einem Segment schliessen"
msgid "Join nodes by segment"
msgstr "Knoten durch Segment verbinden"
-#: ../src/nodepath.cpp:2431 ../src/nodepath.cpp:2446
+#: ../src/nodepath.cpp:2431
+#: ../src/nodepath.cpp:2446
msgid "To join, you must have <b>two endnodes</b> selected."
-msgstr ""
-"Zum Verbinden der Pfade müssen <b>zwei Endpunkte</b> (Knoten) angewählt sein."
+msgstr "Zum Verbinden der Pfade müssen <b>zwei Endpunkte</b> (Knoten) angewählt sein."
-#: ../src/nodepath.cpp:2603 ../src/nodepath.cpp:2639 ../src/nodepath.cpp:2643
+#: ../src/nodepath.cpp:2603
+#: ../src/nodepath.cpp:2639
+#: ../src/nodepath.cpp:2643
msgid "Delete nodes"
msgstr "Knoten löschen"
@@ -8629,19 +8442,17 @@ msgstr "Knoten löschen"
msgid "Delete nodes preserving shape"
msgstr "Knoten löschen, Form beibehalten"
-#: ../src/nodepath.cpp:2662 ../src/nodepath.cpp:2676
-msgid ""
-"Select <b>two non-endpoint nodes</b> on a path between which to delete "
-"segments."
-msgstr ""
-"Zwei Knoten wählen, <b>die keine Knoten am Anfang oder Ende sein dürfen</b>, "
-"um einen Pfadabschnitt zu löschen."
+#: ../src/nodepath.cpp:2662
+#: ../src/nodepath.cpp:2676
+msgid "Select <b>two non-endpoint nodes</b> on a path between which to delete segments."
+msgstr "Zwei Knoten wählen, <b>die keine Knoten am Anfang oder Ende sein dürfen</b>, um einen Pfadabschnitt zu löschen."
#: ../src/nodepath.cpp:2772
msgid "Cannot find path between nodes."
msgstr "Kein Pfad zwischen den Knoten."
-#: ../src/nodepath.cpp:2804 ../src/widgets/toolbox.cpp:1343
+#: ../src/nodepath.cpp:2804
+#: ../src/widgets/toolbox.cpp:1343
msgid "Delete segment"
msgstr "Segment löschen"
@@ -8649,11 +8460,13 @@ msgstr "Segment löschen"
msgid "Change segment type"
msgstr "Segmenttyp ändern"
-#: ../src/nodepath.cpp:2842 ../src/nodepath.cpp:3579
+#: ../src/nodepath.cpp:2842
+#: ../src/nodepath.cpp:3579
msgid "Change node type"
msgstr "Knotentyp ändern"
-#: ../src/nodepath.cpp:3529 ../src/widgets/toolbox.cpp:1300
+#: ../src/nodepath.cpp:3529
+#: ../src/widgets/toolbox.cpp:1300
msgid "Delete node"
msgstr "Knoten löschen"
@@ -8667,14 +8480,8 @@ msgstr "Knotenanfasser verschieben"
#: ../src/nodepath.cpp:4111
#, c-format
-msgid ""
-"<b>Node handle</b>: angle %0.2f&#176;, length %s; with <b>Ctrl</b> to snap "
-"angle; with <b>Alt</b> to lock length; with <b>Shift</b> to rotate both "
-"handles"
-msgstr ""
-"<b>Knotenanfasser</b>: Winkel %0.2f&#176;, Länge %s; <b>Strg</b> rastet den "
-"Winkel ein; <b>Alt</b> behält den Abstand zum Knoten bei; <b>Umschalt</b> "
-"rotiert beide Anfasser"
+msgid "<b>Node handle</b>: angle %0.2f&#176;, length %s; with <b>Ctrl</b> to snap angle; with <b>Alt</b> to lock length; with <b>Shift</b> to rotate both handles"
+msgstr "<b>Knotenanfasser</b>: Winkel %0.2f&#176;, Länge %s; <b>Strg</b> rastet den Winkel ein; <b>Alt</b> behält den Abstand zum Knoten bei; <b>Umschalt</b> rotiert beide Anfasser"
#: ../src/nodepath.cpp:4305
msgid "Rotate nodes"
@@ -8682,9 +8489,7 @@ msgstr "Knoten rotieren"
#: ../src/nodepath.cpp:4420
msgid "Cannot scale nodes when all are at the same location."
-msgstr ""
-"Skalieren der Knoten nicht möglich, wenn sich diese alle an der gleichen "
-"Stelle befinden."
+msgstr "Skalieren der Knoten nicht möglich, wenn sich diese alle an der gleichen Stelle befinden."
#: ../src/nodepath.cpp:4446
msgid "Scale nodes"
@@ -8695,12 +8500,8 @@ msgid "Flip nodes"
msgstr "Knoten umkehren"
#: ../src/nodepath.cpp:4659
-msgid ""
-"<b>Node</b>: drag to edit the path; with <b>Ctrl</b> to snap to horizontal/"
-"vertical; with <b>Ctrl+Alt</b> to snap to handles' directions"
-msgstr ""
-"<b>Knotenanfasser</b>. Ziehen verändert den Kurvenverlauf; <b>Strg</b> "
-"rastet horizontal/vertikal ein; <b>Strg+Alt</b> rastet die Anfasser ein"
+msgid "<b>Node</b>: drag to edit the path; with <b>Ctrl</b> to snap to horizontal/vertical; with <b>Ctrl+Alt</b> to snap to handles' directions"
+msgstr "<b>Knotenanfasser</b>. Ziehen verändert den Kurvenverlauf; <b>Strg</b> rastet horizontal/vertikal ein; <b>Strg+Alt</b> rastet die Anfasser ein"
#. TRANSLATORS: "end" is an adjective here (NOT a verb)
#: ../src/nodepath.cpp:4892
@@ -8728,56 +8529,35 @@ msgstr "symmetrisch"
#. TRANSLATORS: "end" is an adjective here (NOT a verb)
#: ../src/nodepath.cpp:4910
msgid "end node, handle retracted (drag with <b>Shift</b> to extend)"
-msgstr ""
-"Anfasser des Endknotens sind eingezogen (<b>Ziehen+Umschalt</b> zieht sie "
-"heraus)"
+msgstr "Anfasser des Endknotens sind eingezogen (<b>Ziehen+Umschalt</b> zieht sie heraus)"
#: ../src/nodepath.cpp:4912
msgid "one handle retracted (drag with <b>Shift</b> to extend)"
-msgstr ""
-"Ein Anfasser des Endknotens ist eingezogen (<b>Ziehen+Umschalt</b> zieht ihn "
-"heraus)"
+msgstr "Ein Anfasser des Endknotens ist eingezogen (<b>Ziehen+Umschalt</b> zieht ihn heraus)"
#: ../src/nodepath.cpp:4915
msgid "both handles retracted (drag with <b>Shift</b> to extend)"
-msgstr ""
-"Beide Anfasser des Endknotens sind eingezogen (<b>Ziehen+Umschalt</b> zieht "
-"sie heraus)"
+msgstr "Beide Anfasser des Endknotens sind eingezogen (<b>Ziehen+Umschalt</b> zieht sie heraus)"
#: ../src/nodepath.cpp:4927
-msgid ""
-"<b>Drag</b> nodes or node handles; <b>Alt+drag</b> nodes to sculpt; "
-"<b>arrow</b> keys to move nodes, <b>&lt; &gt;</b> to scale, <b>[ ]</b> to "
-"rotate"
-msgstr ""
-"Knoten oder Anfasser <b>ziehen</b>; <b>Alt+Ziehen</b> zum weichen Verformen; "
-"<b>Pfeiltasten</b> verschieben die Knoten; <b>&lt; &gt;</b> skalieren, <b>[ ]"
-"</b> rotieren"
+msgid "<b>Drag</b> nodes or node handles; <b>Alt+drag</b> nodes to sculpt; <b>arrow</b> keys to move nodes, <b>&lt; &gt;</b> to scale, <b>[ ]</b> to rotate"
+msgstr "Knoten oder Anfasser <b>ziehen</b>; <b>Alt+Ziehen</b> zum weichen Verformen; <b>Pfeiltasten</b> verschieben die Knoten; <b>&lt; &gt;</b> skalieren, <b>[ ]</b> rotieren"
#: ../src/nodepath.cpp:4928
msgid "<b>Drag</b> the node or its handles; <b>arrow</b> keys to move the node"
-msgstr ""
-"Knoten oder seine Anfasser <b>ziehen</b>; <b>Pfeiltasten</b> verschieben den "
-"Knoten"
+msgstr "Knoten oder seine Anfasser <b>ziehen</b>; <b>Pfeiltasten</b> verschieben den Knoten"
-#: ../src/nodepath.cpp:4954 ../src/nodepath.cpp:4966
+#: ../src/nodepath.cpp:4954
+#: ../src/nodepath.cpp:4966
msgid "Select a single object to edit its nodes or handles."
msgstr "Einzelnes Objekt zum Bearbeiten der Knoten und Anfasser auswählen."
#: ../src/nodepath.cpp:4958
#, c-format
-msgid ""
-"<b>0</b> out of <b>%i</b> node selected. <b>Click</b>, <b>Shift+click</b>, "
-"or <b>drag around</b> nodes to select."
-msgid_plural ""
-"<b>0</b> out of <b>%i</b> nodes selected. <b>Click</b>, <b>Shift+click</b>, "
-"or <b>drag around</b> nodes to select."
-msgstr[0] ""
-"<b>0</b> von <b>%i</b> Knoten ausgewählt. <b>Klick</b>, <b>Umschalt+Klick</"
-"b>, oder <b>Ziehen</b> wählt Knoten aus."
-msgstr[1] ""
-"<b>0</b> von <b>%i</b> Knoten ausgewählt. <b>Klick</b>, <b>Umschalt+Klick</"
-"b>, oder <b>Ziehen</b> wählt Knoten aus."
+msgid "<b>0</b> out of <b>%i</b> node selected. <b>Click</b>, <b>Shift+click</b>, or <b>drag around</b> nodes to select."
+msgid_plural "<b>0</b> out of <b>%i</b> nodes selected. <b>Click</b>, <b>Shift+click</b>, or <b>drag around</b> nodes to select."
+msgstr[0] "<b>0</b> von <b>%i</b> Knoten ausgewählt. <b>Klick</b>, <b>Umschalt+Klick</b>, oder <b>Ziehen</b> wählt Knoten aus."
+msgstr[1] "<b>0</b> von <b>%i</b> Knoten ausgewählt. <b>Klick</b>, <b>Umschalt+Klick</b>, oder <b>Ziehen</b> wählt Knoten aus."
#: ../src/nodepath.cpp:4964
msgid "Drag the handles of the object to modify it."
@@ -8792,16 +8572,10 @@ msgstr[1] "<b>%i</b> von <b>%i</b> Knoten ausgewählt; %s. %s."
#: ../src/nodepath.cpp:4979
#, c-format
-msgid ""
-"<b>%i</b> of <b>%i</b> node selected in <b>%i</b> of <b>%i</b> subpaths. %s."
-msgid_plural ""
-"<b>%i</b> of <b>%i</b> nodes selected in <b>%i</b> of <b>%i</b> subpaths. %s."
-msgstr[0] ""
-"<b>%i</b> von <b>%i</b> Knoten in <b>%i</b> von <b>%i</b> Unterpfaden "
-"ausgewählt. %s."
-msgstr[1] ""
-"<b>%i</b> von <b>%i</b> Knoten in <b>%i</b> von <b>%i</b> Unterpfaden "
-"ausgewählt. %s."
+msgid "<b>%i</b> of <b>%i</b> node selected in <b>%i</b> of <b>%i</b> subpaths. %s."
+msgid_plural "<b>%i</b> of <b>%i</b> nodes selected in <b>%i</b> of <b>%i</b> subpaths. %s."
+msgstr[0] "<b>%i</b> von <b>%i</b> Knoten in <b>%i</b> von <b>%i</b> Unterpfaden ausgewählt. %s."
+msgstr[1] "<b>%i</b> von <b>%i</b> Knoten in <b>%i</b> von <b>%i</b> Unterpfaden ausgewählt. %s."
#: ../src/nodepath.cpp:4985
#, c-format
@@ -8811,46 +8585,31 @@ msgstr[0] "<b>%i</b> von <b>%i</b> Knoten ausgewählt. %s."
msgstr[1] "<b>%i</b> von <b>%i</b> Knoten ausgewählt. %s."
#: ../src/object-edit.cpp:439
-msgid ""
-"Adjust the <b>horizontal rounding</b> radius; with <b>Ctrl</b> to make the "
-"vertical radius the same"
-msgstr ""
-"Radius der <b>horizontalen Rundung</b> anpassen; <b>Strg</b> setzt vertikale "
-"und horizontale Rundung gleich"
+msgid "Adjust the <b>horizontal rounding</b> radius; with <b>Ctrl</b> to make the vertical radius the same"
+msgstr "Radius der <b>horizontalen Rundung</b> anpassen; <b>Strg</b> setzt vertikale und horizontale Rundung gleich"
#: ../src/object-edit.cpp:443
-msgid ""
-"Adjust the <b>vertical rounding</b> radius; with <b>Ctrl</b> to make the "
-"horizontal radius the same"
-msgstr ""
-"Radius der <b>vertikalen Rundung</b> anpassen; <b>Strg</b> setzt vertikale "
-"und horizontale Rundung gleich"
-
-#: ../src/object-edit.cpp:447 ../src/object-edit.cpp:451
-msgid ""
-"Adjust the <b>width and height</b> of the rectangle; with <b>Ctrl</b> to "
-"lock ratio or stretch in one dimension only"
-msgstr ""
-"<b>Höhe/Breite</b> des Rechtecks anpassen; <b>Strg</b> um Seitenverhältnis "
-"bei zu behalten oder nur in eine Richtung zu strecken"
-
-#: ../src/object-edit.cpp:685 ../src/object-edit.cpp:688
-#: ../src/object-edit.cpp:691 ../src/object-edit.cpp:694
-msgid ""
-"Resize box in X/Y direction; with <b>Shift</b> along the Z axis; with "
-"<b>Ctrl</b> to constrain to the directions of edges or diagonals"
-msgstr ""
-"Größe der Box in X/Y-Richtung ändern; mit <b>Umschalt</b> entlang der Z-"
-"Achse; Mit <b>Strg</b> auf Richtung der Seiten oder Diagonalen beschränkt"
-
-#: ../src/object-edit.cpp:697 ../src/object-edit.cpp:700
-#: ../src/object-edit.cpp:703 ../src/object-edit.cpp:706
-msgid ""
-"Resize box along the Z axis; with <b>Shift</b> in X/Y direction; with "
-"<b>Ctrl</b> to constrain to the directions of edges or diagonals"
-msgstr ""
-"Größe der Box entlang der Z-Achse ändern; mit <b>Umschalt</b> in X/Y-"
-"Richtung; Mit <b>Strg</b> auf Richtung der Seiten und Diagonalen beschränkt"
+msgid "Adjust the <b>vertical rounding</b> radius; with <b>Ctrl</b> to make the horizontal radius the same"
+msgstr "Radius der <b>vertikalen Rundung</b> anpassen; <b>Strg</b> setzt vertikale und horizontale Rundung gleich"
+
+#: ../src/object-edit.cpp:447
+#: ../src/object-edit.cpp:451
+msgid "Adjust the <b>width and height</b> of the rectangle; with <b>Ctrl</b> to lock ratio or stretch in one dimension only"
+msgstr "<b>Höhe/Breite</b> des Rechtecks anpassen; <b>Strg</b> um Seitenverhältnis bei zu behalten oder nur in eine Richtung zu strecken"
+
+#: ../src/object-edit.cpp:685
+#: ../src/object-edit.cpp:688
+#: ../src/object-edit.cpp:691
+#: ../src/object-edit.cpp:694
+msgid "Resize box in X/Y direction; with <b>Shift</b> along the Z axis; with <b>Ctrl</b> to constrain to the directions of edges or diagonals"
+msgstr "Größe der Box in X/Y-Richtung ändern; mit <b>Umschalt</b> entlang der Z-Achse; Mit <b>Strg</b> auf Richtung der Seiten oder Diagonalen beschränkt"
+
+#: ../src/object-edit.cpp:697
+#: ../src/object-edit.cpp:700
+#: ../src/object-edit.cpp:703
+#: ../src/object-edit.cpp:706
+msgid "Resize box along the Z axis; with <b>Shift</b> in X/Y direction; with <b>Ctrl</b> to constrain to the directions of edges or diagonals"
+msgstr "Größe der Box entlang der Z-Achse ändern; mit <b>Umschalt</b> in X/Y-Richtung; Mit <b>Strg</b> auf Richtung der Seiten und Diagonalen beschränkt"
#: ../src/object-edit.cpp:709
msgid "Move the box in perspective"
@@ -8858,66 +8617,35 @@ msgstr "Bewegen der Box in der Perspektive"
#: ../src/object-edit.cpp:927
msgid "Adjust ellipse <b>width</b>, with <b>Ctrl</b> to make circle"
-msgstr ""
-"<b>Höhe/Breite</b> der Ellipse anpassen; <b>Strg</b> erzeugt einen Kreis"
+msgstr "<b>Höhe/Breite</b> der Ellipse anpassen; <b>Strg</b> erzeugt einen Kreis"
#: ../src/object-edit.cpp:930
msgid "Adjust ellipse <b>height</b>, with <b>Ctrl</b> to make circle"
msgstr "<b>Höhe</b> der Ellipse anpassen; <b>Strg</b> erzeugt einen Kreis"
#: ../src/object-edit.cpp:933
-msgid ""
-"Position the <b>start point</b> of the arc or segment; with <b>Ctrl</b> to "
-"snap angle; drag <b>inside</b> the ellipse for arc, <b>outside</b> for "
-"segment"
-msgstr ""
-"<b>Anfangspunkt</b> des Bogens oder Kreissegments setzen; <b>Strg</b> rastet "
-"den Winkel ein; ziehen <b>innerhalb</b> der Ellipse erzeugt einen Kreisbogen "
-"- <b>außerhalb</b> ein Kreissegment"
+msgid "Position the <b>start point</b> of the arc or segment; with <b>Ctrl</b> to snap angle; drag <b>inside</b> the ellipse for arc, <b>outside</b> for segment"
+msgstr "<b>Anfangspunkt</b> des Bogens oder Kreissegments setzen; <b>Strg</b> rastet den Winkel ein; ziehen <b>innerhalb</b> der Ellipse erzeugt einen Kreisbogen - <b>außerhalb</b> ein Kreissegment"
#: ../src/object-edit.cpp:937
-msgid ""
-"Position the <b>end point</b> of the arc or segment; with <b>Ctrl</b> to "
-"snap angle; drag <b>inside</b> the ellipse for arc, <b>outside</b> for "
-"segment"
-msgstr ""
-"<b>Endpunkt</b> des Bogens/Kreissegments setzen; <b>Strg</b> rastet Winkel "
-"ein; Ziehen <b>innerhalb</b> der Ellipse erzeugt einen Kreisbogen - "
-"<b>außerhalb</b> ein Kreissegment"
+msgid "Position the <b>end point</b> of the arc or segment; with <b>Ctrl</b> to snap angle; drag <b>inside</b> the ellipse for arc, <b>outside</b> for segment"
+msgstr "<b>Endpunkt</b> des Bogens/Kreissegments setzen; <b>Strg</b> rastet Winkel ein; Ziehen <b>innerhalb</b> der Ellipse erzeugt einen Kreisbogen - <b>außerhalb</b> ein Kreissegment"
#: ../src/object-edit.cpp:1076
-msgid ""
-"Adjust the <b>tip radius</b> of the star or polygon; with <b>Shift</b> to "
-"round; with <b>Alt</b> to randomize"
-msgstr ""
-"<b>Spitzen</b> des Sterns oder Polygons anpassen; <b>Umschalt</b> rundet ab; "
-"<b>Alt</b> verändert nach Zufall"
+msgid "Adjust the <b>tip radius</b> of the star or polygon; with <b>Shift</b> to round; with <b>Alt</b> to randomize"
+msgstr "<b>Spitzen</b> des Sterns oder Polygons anpassen; <b>Umschalt</b> rundet ab; <b>Alt</b> verändert nach Zufall"
#: ../src/object-edit.cpp:1083
-msgid ""
-"Adjust the <b>base radius</b> of the star; with <b>Ctrl</b> to keep star "
-"rays radial (no skew); with <b>Shift</b> to round; with <b>Alt</b> to "
-"randomize"
-msgstr ""
-"<b>Innenradius</b> des Sterns anpassen; <b>Strg</b> erhält radiale "
-"Ausrichtung der Spitzen; <b>Umschalt</b> rundet; <b>Alt</b> verändert "
-"zufällig"
+msgid "Adjust the <b>base radius</b> of the star; with <b>Ctrl</b> to keep star rays radial (no skew); with <b>Shift</b> to round; with <b>Alt</b> to randomize"
+msgstr "<b>Innenradius</b> des Sterns anpassen; <b>Strg</b> erhält radiale Ausrichtung der Spitzen; <b>Umschalt</b> rundet; <b>Alt</b> verändert zufällig"
#: ../src/object-edit.cpp:1272
-msgid ""
-"Roll/unroll the spiral from <b>inside</b>; with <b>Ctrl</b> to snap angle; "
-"with <b>Alt</b> to converge/diverge"
-msgstr ""
-"Spirale von <b>innen</b> einrollen/ausrollen; Winkel mit <b>Strg</b> "
-"einrasten; <b>Alt</b> konvergiert/divergiert"
+msgid "Roll/unroll the spiral from <b>inside</b>; with <b>Ctrl</b> to snap angle; with <b>Alt</b> to converge/diverge"
+msgstr "Spirale von <b>innen</b> einrollen/ausrollen; Winkel mit <b>Strg</b> einrasten; <b>Alt</b> konvergiert/divergiert"
#: ../src/object-edit.cpp:1275
-msgid ""
-"Roll/unroll the spiral from <b>outside</b>; with <b>Ctrl</b> to snap angle; "
-"with <b>Shift</b> to scale/rotate"
-msgstr ""
-"Spirale von <b>außen</b> ausrollen/einrollen; Winkel mit <b>Strg</b> "
-"einrasten; <b>Umschalt</b> skaliert/rotiert"
+msgid "Roll/unroll the spiral from <b>outside</b>; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to scale/rotate"
+msgstr "Spirale von <b>außen</b> ausrollen/einrollen; Winkel mit <b>Strg</b> einrasten; <b>Umschalt</b> skaliert/rotiert"
#: ../src/object-edit.cpp:1319
msgid "Adjust the <b>offset distance</b>"
@@ -8973,9 +8701,7 @@ msgstr "Objekt in Pfad umwandeln"
#: ../src/path-chemistry.cpp:315
msgid "<b>No objects</b> to convert to path in the selection."
-msgstr ""
-"<b>Keine Objekte</b> ausgewählt, die in einen Pfad umgewandelt werden "
-"könnten."
+msgstr "<b>Keine Objekte</b> ausgewählt, die in einen Pfad umgewandelt werden könnten."
#: ../src/path-chemistry.cpp:551
msgid "Select <b>path(s)</b> to reverse."
@@ -8994,15 +8720,18 @@ msgid "<b>No paths</b> to reverse in the selection."
msgstr "Die Auswahl enthält <b>keine Pfade</b> zum Umkehren."
# !!! make singular and plural forms
-#: ../src/pencil-context.cpp:269 ../src/pen-context.cpp:493
+#: ../src/pencil-context.cpp:269
+#: ../src/pen-context.cpp:493
msgid "Continuing selected path"
msgstr "Gewählten Pfad verlängern"
-#: ../src/pencil-context.cpp:277 ../src/pen-context.cpp:503
+#: ../src/pencil-context.cpp:277
+#: ../src/pen-context.cpp:503
msgid "Creating new path"
msgstr "Erzeuge neuen Pfad"
-#: ../src/pencil-context.cpp:280 ../src/pen-context.cpp:505
+#: ../src/pencil-context.cpp:280
+#: ../src/pen-context.cpp:505
msgid "Appending to selected path"
msgstr "Zu ausgewähltem Pfad hinzufügen"
@@ -9024,17 +8753,14 @@ msgstr "<b>Ziehen</b>, um den Pfad von diesem Punkt aus fortzusetzen."
msgid "Finishing freehand"
msgstr "Fertig mit Freihandlinien"
-#: ../src/pencil-context.cpp:522 ../src/pen-context.cpp:253
+#: ../src/pencil-context.cpp:522
+#: ../src/pen-context.cpp:253
msgid "Drawing cancelled"
msgstr "Zeichnen abgebrochen"
#: ../src/pencil-context.cpp:572
-msgid ""
-"<b>Sketch mode</b>: holding <b>Alt</b> interpolates between sketched paths. "
-"Release <b>Alt</b> to finalize."
-msgstr ""
-"<b>Skizzenmodus</b>: Halten von <b>Alt</b> interpoliert zwischen skizzierten "
-"Pfaden. Zum Beenden <b>Alt</b> loslassen."
+msgid "<b>Sketch mode</b>: holding <b>Alt</b> interpolates between sketched paths. Release <b>Alt</b> to finalize."
+msgstr "<b>Skizzenmodus</b>: Halten von <b>Alt</b> interpoliert zwischen skizzierten Pfaden. Zum Beenden <b>Alt</b> loslassen."
# !!!
#: ../src/pencil-context.cpp:600
@@ -9046,56 +8772,33 @@ msgid "<b>Click</b> or <b>click and drag</b> to close and finish the path."
msgstr "<b>Klick</b> oder <b>Klick und Ziehen</b>, um den Pfad abzuschließen."
#: ../src/pen-context.cpp:672
-msgid ""
-"<b>Click</b> or <b>click and drag</b> to continue the path from this point."
-msgstr ""
-"<b>Klick</b> oder <b>Klick und Ziehen</b>, um den Pfad von diesem Punkt aus "
-"fortzusetzen."
+msgid "<b>Click</b> or <b>click and drag</b> to continue the path from this point."
+msgstr "<b>Klick</b> oder <b>Klick und Ziehen</b>, um den Pfad von diesem Punkt aus fortzusetzen."
#: ../src/pen-context.cpp:1266
#, c-format
-msgid ""
-"<b>Curve segment</b>: angle %3.2f&#176;, distance %s; with <b>Ctrl</b> to "
-"snap angle, <b>Enter</b> to finish the path"
-msgstr ""
-"<b>Kurvensegment</b>: Winkel %3.2f&#176;, Abstand %s; <b>Strg</b> rastet den "
-"Winkel ein; <b>Eingabe</b> schließt den Pfad ab"
+msgid "<b>Curve segment</b>: angle %3.2f&#176;, distance %s; with <b>Ctrl</b> to snap angle, <b>Enter</b> to finish the path"
+msgstr "<b>Kurvensegment</b>: Winkel %3.2f&#176;, Abstand %s; <b>Strg</b> rastet den Winkel ein; <b>Eingabe</b> schließt den Pfad ab"
#: ../src/pen-context.cpp:1267
#, c-format
-msgid ""
-"<b>Line segment</b>: angle %3.2f&#176;, distance %s; with <b>Ctrl</b> to "
-"snap angle, <b>Enter</b> to finish the path"
-msgstr ""
-"<b>Liniensegment</b>: Winkel %3.2f&#176;, Abstand %s; <b>Strg</b> rastet den "
-"Winkel ein; <b>Eingabe</b> schließt den Pfad ab"
+msgid "<b>Line segment</b>: angle %3.2f&#176;, distance %s; with <b>Ctrl</b> to snap angle, <b>Enter</b> to finish the path"
+msgstr "<b>Liniensegment</b>: Winkel %3.2f&#176;, Abstand %s; <b>Strg</b> rastet den Winkel ein; <b>Eingabe</b> schließt den Pfad ab"
#: ../src/pen-context.cpp:1285
#, c-format
-msgid ""
-"<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap "
-"angle"
-msgstr ""
-"<b>Kurvenanfasser</b>: Winkel %3.2f°; Länge %s; Winkel mit <b>Strg</b> "
-"einrasten"
+msgid "<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap angle"
+msgstr "<b>Kurvenanfasser</b>: Winkel %3.2f°; Länge %s; Winkel mit <b>Strg</b> einrasten"
#: ../src/pen-context.cpp:1307
#, c-format
-msgid ""
-"<b>Curve handle, symmetric</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</"
-"b> to snap angle, with <b>Shift</b> to move this handle only"
-msgstr ""
-"<b>Symmetrischer Kurvenanfasser</b>: Winkel %3.2f&#176;, Länge %s; <b>Strg</"
-"b> rastet den Winkel ein; <b>Umschalt</b> bewegt nur diesen Anfasser"
+msgid "<b>Curve handle, symmetric</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap angle, with <b>Shift</b> to move this handle only"
+msgstr "<b>Symmetrischer Kurvenanfasser</b>: Winkel %3.2f&#176;, Länge %s; <b>Strg</b> rastet den Winkel ein; <b>Umschalt</b> bewegt nur diesen Anfasser"
#: ../src/pen-context.cpp:1308
#, c-format
-msgid ""
-"<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap "
-"angle, with <b>Shift</b> to move this handle only"
-msgstr ""
-"<b>Kurvenanfasser</b>: Winkel %3.2f&#176;, Länge %s; <b>Strg</b> rastet den "
-"Winkel ein; <b>Umschalt</b> bewegt nur diesen Anfasser"
+msgid "<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap angle, with <b>Shift</b> to move this handle only"
+msgstr "<b>Kurvenanfasser</b>: Winkel %3.2f&#176;, Länge %s; <b>Strg</b> rastet den Winkel ein; <b>Umschalt</b> bewegt nur diesen Anfasser"
# not sure here -cm-
#: ../src/pen-context.cpp:1355
@@ -9111,8 +8814,7 @@ msgid "Toggle multiple vanishing points"
msgstr "Multiple Fluchtpunkte umschalten"
#: ../src/preferences.cpp:101
-msgid ""
-"Inkscape will run with default settings, and new settings will not be saved. "
+msgid "Inkscape will run with default settings, and new settings will not be saved. "
msgstr ""
"Inkscape läuft mit den Vorgabeeinstellungen.\n"
"Neue Einstellungen werden nicht gespeichert."
@@ -9212,8 +8914,7 @@ msgstr "CC-Namensnennung-NichtKommerziell"
#: ../src/rdf.cpp:192
msgid "CC Attribution-NonCommercial-ShareAlike"
-msgstr ""
-"CC-Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen"
+msgstr "CC-Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen"
#: ../src/rdf.cpp:197
msgid "CC Attribution-NonCommercial-NoDerivs"
@@ -9245,8 +8946,7 @@ msgstr "Datum"
#: ../src/rdf.cpp:233
msgid "Date associated with the creation of this document (YYYY-MM-DD)."
-msgstr ""
-"Datum, das mit der Erstellung dieses Dokuments assoziiert ist (JJJJ-MM-TT)."
+msgstr "Datum, das mit der Erstellung dieses Dokuments assoziiert ist (JJJJ-MM-TT)."
#: ../src/rdf.cpp:235
msgid "Format"
@@ -9254,8 +8954,7 @@ msgstr "Format"
#: ../src/rdf.cpp:236
msgid "The physical or digital manifestation of this document (MIME type)."
-msgstr ""
-"Die physische oder digitale Erscheinungsform dieses Dokuments (MIME-Typ)."
+msgstr "Die physische oder digitale Erscheinungsform dieses Dokuments (MIME-Typ)."
#: ../src/rdf.cpp:239
msgid "Type of document (DCMI Type)."
@@ -9267,22 +8966,16 @@ msgid "Creator"
msgstr "Autor/Urheber"
#: ../src/rdf.cpp:243
-msgid ""
-"Name of entity primarily responsible for making the content of this document."
-msgstr ""
-"Name der Person oder Organisation, die hauptsächlich für die Erstellung des "
-"Dokumenteninhalts verantwortlich ist."
+msgid "Name of entity primarily responsible for making the content of this document."
+msgstr "Name der Person oder Organisation, die hauptsächlich für die Erstellung des Dokumenteninhalts verantwortlich ist."
#: ../src/rdf.cpp:245
msgid "Rights"
msgstr "Rechte"
#: ../src/rdf.cpp:246
-msgid ""
-"Name of entity with rights to the Intellectual Property of this document."
-msgstr ""
-"Name der Person oder Organisation, welche die Urheberrechte (Intellectual "
-"Property) an diesem Dokument hält."
+msgid "Name of entity with rights to the Intellectual Property of this document."
+msgstr "Name der Person oder Organisation, welche die Urheberrechte (Intellectual Property) an diesem Dokument hält."
#: ../src/rdf.cpp:248
msgid "Publisher"
@@ -9290,9 +8983,7 @@ msgstr "Herausgeber"
#: ../src/rdf.cpp:249
msgid "Name of entity responsible for making this document available."
-msgstr ""
-"Name der Person oder Organisation, die für die Verfügbarmachung des "
-"Dokuments verantwortlich ist."
+msgstr "Name der Person oder Organisation, die für die Verfügbarmachung des Dokuments verantwortlich ist."
#: ../src/rdf.cpp:252
msgid "Identifier"
@@ -9302,7 +8993,8 @@ msgstr "Identifikator"
msgid "Unique URI to reference this document."
msgstr "Eindeutige URI, um dieses Dokument zu referenzieren."
-#: ../src/rdf.cpp:255 ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1438
+#: ../src/rdf.cpp:255
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1438
msgid "Source"
msgstr "Quelle"
@@ -9324,23 +9016,16 @@ msgstr "Sprache"
# !!! pull parenthesis inside sentenc
#: ../src/rdf.cpp:262
-msgid ""
-"Two-letter language tag with optional subtags for the language of this "
-"document. (e.g. 'en-GB')"
-msgstr ""
-"Zweibuchstabiges Sprachsymbol mit optionalen Untersymbolen für die Sprache "
-"dieses Dokuments (z.B. »de-CH«)"
+msgid "Two-letter language tag with optional subtags for the language of this document. (e.g. 'en-GB')"
+msgstr "Zweibuchstabiges Sprachsymbol mit optionalen Untersymbolen für die Sprache dieses Dokuments (z.B. »de-CH«)"
#: ../src/rdf.cpp:264
msgid "Keywords"
msgstr "Schlagworte"
#: ../src/rdf.cpp:265
-msgid ""
-"The topic of this document as comma-separated key words, phrases, or "
-"classifications."
-msgstr ""
-"Das Thema dieses Dokuments als Schlagworte, Phrasen oder Klassifikation."
+msgid "The topic of this document as comma-separated key words, phrases, or classifications."
+msgstr "Das Thema dieses Dokuments als Schlagworte, Phrasen oder Klassifikation."
# !!! not the best translation
#. TRANSLATORS: "Coverage": the spatial or temporal characteristics of the content.
@@ -9353,7 +9038,8 @@ msgstr "Abdeckung"
msgid "Extent or scope of this document."
msgstr "Umfang oder Abdeckungsbereich dieses Dokuments."
-#: ../src/rdf.cpp:273 ../src/ui/widget/page-sizer.cpp:219
+#: ../src/rdf.cpp:273
+#: ../src/ui/widget/page-sizer.cpp:219
msgid "Description"
msgstr "Beschreibung"
@@ -9367,12 +9053,8 @@ msgid "Contributors"
msgstr "Mitwirkende"
#: ../src/rdf.cpp:279
-msgid ""
-"Names of entities responsible for making contributions to the content of "
-"this document."
-msgstr ""
-"Namen von Personen oder Organisationen, die am Inhalt dieses Dokuments "
-"mitgewirkt haben."
+msgid "Names of entities responsible for making contributions to the content of this document."
+msgstr "Namen von Personen oder Organisationen, die am Inhalt dieses Dokuments mitgewirkt haben."
#. TRANSLATORS: URL to a page that defines the license for the document
#: ../src/rdf.cpp:283
@@ -9382,9 +9064,7 @@ msgstr "URI"
#. TRANSLATORS: this is where you put a URL to a page that defines the license
#: ../src/rdf.cpp:285
msgid "URI to this document's license's namespace definition."
-msgstr ""
-"URI, unter dem die Lizenzdefinition (license namespace) dieses Dokuments zu "
-"finden ist."
+msgstr "URI, unter dem die Lizenzdefinition (license namespace) dieses Dokuments zu finden ist."
#. TRANSLATORS: fragment of XML representing the license of the document
#: ../src/rdf.cpp:289
@@ -9396,48 +9076,28 @@ msgid "XML fragment for the RDF 'License' section."
msgstr "XML-Fragment für den RDF-Abschnitt »Lizenz«."
#: ../src/rect-context.cpp:361
-msgid ""
-"<b>Ctrl</b>: make square or integer-ratio rect, lock a rounded corner "
-"circular"
-msgstr ""
-"<b>Strg</b>: Quadrat oder Rechteck mit ganzzahligem Kanten-Längenverhältnis, "
-"abgerundete Kanten mit einheitlichen Radien"
+msgid "<b>Ctrl</b>: make square or integer-ratio rect, lock a rounded corner circular"
+msgstr "<b>Strg</b>: Quadrat oder Rechteck mit ganzzahligem Kanten-Längenverhältnis, abgerundete Kanten mit einheitlichen Radien"
#: ../src/rect-context.cpp:508
#, c-format
-msgid ""
-"<b>Rectangle</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</"
-"b> to draw around the starting point"
-msgstr ""
-"<b>Rechteck</b>: %s × %s (beschränkt auf Seitenverhältnis %d:%d); "
-"<b>Umschalt</b> - Rechteck vom Zentrum aus zeichnen"
+msgid "<b>Rectangle</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</b> to draw around the starting point"
+msgstr "<b>Rechteck</b>: %s × %s (beschränkt auf Seitenverhältnis %d:%d); <b>Umschalt</b> - Rechteck vom Zentrum aus zeichnen"
#: ../src/rect-context.cpp:511
#, c-format
-msgid ""
-"<b>Rectangle</b>: %s &#215; %s (constrained to golden ratio 1.618 : 1); with "
-"<b>Shift</b> to draw around the starting point"
-msgstr ""
-"<b>Rechteck</b>: %s × %s (beschränkt auf Goldenen Schnitt 1,618 : 1); "
-"<b>Umschalt</b> - Rechteck vom Zentrum aus zeichnen"
+msgid "<b>Rectangle</b>: %s &#215; %s (constrained to golden ratio 1.618 : 1); with <b>Shift</b> to draw around the starting point"
+msgstr "<b>Rechteck</b>: %s × %s (beschränkt auf Goldenen Schnitt 1,618 : 1); <b>Umschalt</b> - Rechteck vom Zentrum aus zeichnen"
#: ../src/rect-context.cpp:513
#, c-format
-msgid ""
-"<b>Rectangle</b>: %s &#215; %s (constrained to golden ratio 1 : 1.618); with "
-"<b>Shift</b> to draw around the starting point"
-msgstr ""
-"<b>Rechteck</b>: %s × %s (beschränkt auf Goldenen Schnitt 1 : 1,618); "
-"<b>Umschalt</b> - Rechteck vom Zentrum aus zeichnen"
+msgid "<b>Rectangle</b>: %s &#215; %s (constrained to golden ratio 1 : 1.618); with <b>Shift</b> to draw around the starting point"
+msgstr "<b>Rechteck</b>: %s × %s (beschränkt auf Goldenen Schnitt 1 : 1,618); <b>Umschalt</b> - Rechteck vom Zentrum aus zeichnen"
#: ../src/rect-context.cpp:517
#, c-format
-msgid ""
-"<b>Rectangle</b>: %s &#215; %s; with <b>Ctrl</b> to make square or integer-"
-"ratio rectangle; with <b>Shift</b> to draw around the starting point"
-msgstr ""
-"<b>Rechteck</b>: %s × %s; <b>Strg</b> erzeugt Quadrat oder ganzzahliges "
-"Höhen/Breitenverhältnis; <b>Umschalt</b> - Rechteck vom Zentrum aus zeichnen"
+msgid "<b>Rectangle</b>: %s &#215; %s; with <b>Ctrl</b> to make square or integer-ratio rectangle; with <b>Shift</b> to draw around the starting point"
+msgstr "<b>Rechteck</b>: %s × %s; <b>Strg</b> erzeugt Quadrat oder ganzzahliges Höhen/Breitenverhältnis; <b>Umschalt</b> - Rechteck vom Zentrum aus zeichnen"
#: ../src/rect-context.cpp:542
msgid "Create rectangle"
@@ -9454,39 +9114,24 @@ msgid "Selection canceled."
msgstr "Auswahl abgebrochen."
#: ../src/select-context.cpp:555
-msgid ""
-"<b>Draw over</b> objects to select them; release <b>Alt</b> to switch to "
-"rubberband selection"
-msgstr ""
-"<b>Zeichnen über</b> Objekten wählt sie aus; <b>Alt</b> loslassen, um mit "
-"Gummiband auszuwählen"
+msgid "<b>Draw over</b> objects to select them; release <b>Alt</b> to switch to rubberband selection"
+msgstr "<b>Zeichnen über</b> Objekten wählt sie aus; <b>Alt</b> loslassen, um mit Gummiband auszuwählen"
#: ../src/select-context.cpp:557
-msgid ""
-"<b>Drag around</b> objects to select them; press <b>Alt</b> to switch to "
-"touch selection"
-msgstr ""
-"<b>Ziehen um</b> Objekte wählt sie aus; <b>Alt</b> drücken, um durch "
-"Berührung auszuwählen"
+msgid "<b>Drag around</b> objects to select them; press <b>Alt</b> to switch to touch selection"
+msgstr "<b>Ziehen um</b> Objekte wählt sie aus; <b>Alt</b> drücken, um durch Berührung auszuwählen"
#: ../src/select-context.cpp:721
msgid "<b>Ctrl</b>: click to select in groups; drag to move hor/vert"
-msgstr ""
-"<b>Strg</b>: Klick um in Gruppierung auszuwählen; Ziehen um horizontal/"
-"vertikal bewegen"
+msgstr "<b>Strg</b>: Klick um in Gruppierung auszuwählen; Ziehen um horizontal/vertikal bewegen"
#: ../src/select-context.cpp:722
msgid "<b>Shift</b>: click to toggle select; drag for rubberband selection"
-msgstr ""
-"<b>Umschalt</b>: Klick um Auswahl aktivieren/deaktivieren, Ziehen für "
-"Gummiband-Auswahl"
+msgstr "<b>Umschalt</b>: Klick um Auswahl aktivieren/deaktivieren, Ziehen für Gummiband-Auswahl"
#: ../src/select-context.cpp:723
-msgid ""
-"<b>Alt</b>: click to select under; drag to move selected or select by touch"
-msgstr ""
-"<b>Alt</b>: Klick um verdeckte Objekte auswählen; Ziehen um gewähltes Objekt "
-"zu verschieben oder durch Berühren auszuwählen"
+msgid "<b>Alt</b>: click to select under; drag to move selected or select by touch"
+msgstr "<b>Alt</b>: Klick um verdeckte Objekte auswählen; Ziehen um gewähltes Objekt zu verschieben oder durch Berühren auszuwählen"
#: ../src/select-context.cpp:898
msgid "Selected object is not a group. Cannot enter."
@@ -9500,8 +9145,10 @@ msgstr "Text löschen"
msgid "<b>Nothing</b> was deleted."
msgstr "Es wurde <b>nichts</b> gelöscht."
-#: ../src/selection-chemistry.cpp:221 ../src/text-context.cpp:995
-#: ../src/ui/dialog/swatches.cpp:471 ../src/widgets/toolbox.cpp:1304
+#: ../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
msgid "Delete"
msgstr "Löschen"
@@ -9518,20 +9165,21 @@ msgstr "Alles löschen"
msgid "Select <b>some objects</b> to group."
msgstr "<b>Einige Objekte</b> zum Gruppieren auswählen."
-#: ../src/selection-chemistry.cpp:537 ../src/selection-describer.cpp:53
+#: ../src/selection-chemistry.cpp:537
+#: ../src/selection-describer.cpp:53
msgid "Group"
msgstr "Gruppieren"
#: ../src/selection-chemistry.cpp:551
msgid "Select a <b>group</b> to ungroup."
-msgstr ""
-"Eine <b>Gruppe</b> auswählen, deren Gruppierung aufgehoben werden soll."
+msgstr "Eine <b>Gruppe</b> auswählen, deren Gruppierung aufgehoben werden soll."
#: ../src/selection-chemistry.cpp:592
msgid "<b>No groups</b> to ungroup in the selection."
msgstr "<b>Keine Gruppe</b> zum Aufheben in dieser Auswahl."
-#: ../src/selection-chemistry.cpp:598 ../src/sp-item-group.cpp:515
+#: ../src/selection-chemistry.cpp:598
+#: ../src/sp-item-group.cpp:515
msgid "Ungroup"
msgstr "Gruppierung aufheben"
@@ -9539,13 +9187,12 @@ msgstr "Gruppierung aufheben"
msgid "Select <b>object(s)</b> to raise."
msgstr "<b>Objekte</b> zum Anheben auswählen."
-#: ../src/selection-chemistry.cpp:694 ../src/selection-chemistry.cpp:756
-#: ../src/selection-chemistry.cpp:790 ../src/selection-chemistry.cpp:854
-msgid ""
-"You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
-msgstr ""
-"Objekte aus <b>verschiedenen Gruppen</b> oder <b>Ebenen</b> können nicht "
-"angehoben oder abgesenkt werden."
+#: ../src/selection-chemistry.cpp:694
+#: ../src/selection-chemistry.cpp:756
+#: ../src/selection-chemistry.cpp:790
+#: ../src/selection-chemistry.cpp:854
+msgid "You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
+msgstr "Objekte aus <b>verschiedenen Gruppen</b> oder <b>Ebenen</b> können nicht angehoben oder abgesenkt werden."
#. 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
@@ -9556,8 +9203,7 @@ msgstr "Anheben"
#: ../src/selection-chemistry.cpp:748
msgid "Select <b>object(s)</b> to raise to top."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, die in den Vordergrund angehoben werden sollen."
+msgstr "<b>Objekt(e)</b> auswählen, die in den Vordergrund angehoben werden sollen."
#: ../src/selection-chemistry.cpp:771
msgid "Raise to top"
@@ -9573,9 +9219,7 @@ msgstr "Absenken"
#: ../src/selection-chemistry.cpp:846
msgid "Select <b>object(s)</b> to lower to bottom."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, die ganz in den Hintergrund abgesenkt werden "
-"sollen."
+msgstr "<b>Objekt(e)</b> auswählen, die ganz in den Hintergrund abgesenkt werden sollen."
#: ../src/selection-chemistry.cpp:881
msgid "Lower to bottom"
@@ -9630,9 +9274,7 @@ msgstr "Größe getrennt einfügen"
#: ../src/selection-chemistry.cpp:1050
msgid "Select <b>object(s)</b> to move to the layer above."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, welche eine Ebene weiter nach oben verschoben "
-"werden sollen."
+msgstr "<b>Objekt(e)</b> auswählen, welche eine Ebene weiter nach oben verschoben werden sollen."
#: ../src/selection-chemistry.cpp:1076
msgid "Raise to next layer"
@@ -9644,9 +9286,7 @@ msgstr "Keine weiteren Ebenen über dieser."
#: ../src/selection-chemistry.cpp:1095
msgid "Select <b>object(s)</b> to move to the layer below."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, welche in die Ebene darunter verschoben werden "
-"sollen."
+msgstr "<b>Objekt(e)</b> auswählen, welche in die Ebene darunter verschoben werden sollen."
#: ../src/selection-chemistry.cpp:1121
msgid "Lower to previous layer"
@@ -9668,7 +9308,8 @@ msgstr "Um 90&#176; entgegen Uhrzeigersinn rotieren"
msgid "Rotate 90&#176; CW"
msgstr "Um 90&#176; im Uhrzeigersinn rotieren"
-#: ../src/selection-chemistry.cpp:1439 ../src/seltrans.cpp:534
+#: ../src/selection-chemistry.cpp:1439
+#: ../src/seltrans.cpp:534
#: ../src/ui/dialog/transformation.cpp:760
msgid "Rotate"
msgstr "Drehen"
@@ -9689,8 +9330,10 @@ msgstr "Vertikal verschieben"
msgid "Move horizontally"
msgstr "Horizontal verschieben"
-#: ../src/selection-chemistry.cpp:1562 ../src/selection-chemistry.cpp:1588
-#: ../src/seltrans.cpp:528 ../src/ui/dialog/transformation.cpp:681
+#: ../src/selection-chemistry.cpp:1562
+#: ../src/selection-chemistry.cpp:1588
+#: ../src/seltrans.cpp:528
+#: ../src/ui/dialog/transformation.cpp:681
msgid "Move"
msgstr "Verschieben"
@@ -9728,9 +9371,7 @@ msgstr "Kopiert ein <b>Objekt</b> in die Ablage als Elter für Klone."
#: ../src/selection-chemistry.cpp:1966
msgid "<b>No clones to relink</b> in the selection."
-msgstr ""
-"<b>Keine Klone</b> in der Auswahl, deren Verknüpfung erneut gesetzt werden "
-"kann."
+msgstr "<b>Keine Klone</b> in der Auswahl, deren Verknüpfung erneut gesetzt werden kann."
#: ../src/selection-chemistry.cpp:1969
msgid "Relink clone"
@@ -9742,44 +9383,27 @@ msgstr "<b>Klon</b> auswählen, dessen Verknüpfung aufgehoben werden soll."
#: ../src/selection-chemistry.cpp:2032
msgid "<b>No clones to unlink</b> in the selection."
-msgstr ""
-"<b>Keine Klone</b> in der Auswahl, deren Verknüpfung aufgehoben werden kann."
+msgstr "<b>Keine Klone</b> in der Auswahl, deren Verknüpfung aufgehoben werden kann."
#: ../src/selection-chemistry.cpp:2036
msgid "Unlink clone"
msgstr "Klonverbindung auftrennen"
#: ../src/selection-chemistry.cpp:2049
-msgid ""
-"Select a <b>clone</b> to go to its original. Select a <b>linked offset</b> "
-"to go to its source. Select a <b>text on path</b> to go to the path. Select "
-"a <b>flowed text</b> to go to its frame."
-msgstr ""
-"<b>Klon</b> auswählen, um das Original zu finden. <b>Verbundenen Versatz</b> "
-"auswählen, um das Ausgangsobjekt zu finden. <b>Textpfad</b> auswählen, um "
-"den Ausgangspfad zu finden. <b>Fließtextpfad</b> auswählen, um seinen Rahmen "
-"zu finden."
+msgid "Select a <b>clone</b> to go to its original. Select a <b>linked offset</b> to go to its source. Select a <b>text on path</b> to go to the path. Select a <b>flowed text</b> to go to its frame."
+msgstr "<b>Klon</b> auswählen, um das Original zu finden. <b>Verbundenen Versatz</b> auswählen, um das Ausgangsobjekt zu finden. <b>Textpfad</b> auswählen, um den Ausgangspfad zu finden. <b>Fließtextpfad</b> auswählen, um seinen Rahmen zu finden."
#: ../src/selection-chemistry.cpp:2072
-msgid ""
-"<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, "
-"flowed text?)"
-msgstr ""
-"Gesuchtes Objekt <b>nicht gefunden</b> - vielleicht ist der Klon, der "
-"verbundene Versatz, der Textpfad oder der Fließtext verwaist?"
+msgid "<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, flowed text?)"
+msgstr "Gesuchtes Objekt <b>nicht gefunden</b> - vielleicht ist der Klon, der verbundene Versatz, der Textpfad oder der Fließtext verwaist?"
#: ../src/selection-chemistry.cpp:2078
-msgid ""
-"The object you're trying to select is <b>not visible</b> (it is in &lt;"
-"defs&gt;)"
-msgstr ""
-"Dieses Objekt kann nicht ausgewählt werden - es ist <b>unsichtbar</b> und "
-"befindet sich in &lt;defs&gt;"
+msgid "The object you're trying to select is <b>not visible</b> (it is in &lt;defs&gt;)"
+msgstr "Dieses Objekt kann nicht ausgewählt werden - es ist <b>unsichtbar</b> und befindet sich in &lt;defs&gt;"
#: ../src/selection-chemistry.cpp:2124
msgid "Select <b>object(s)</b> to convert to marker."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, die in ein Füllmuster umgewandelt werden sollen."
+msgstr "<b>Objekt(e)</b> auswählen, die in ein Füllmuster umgewandelt werden sollen."
#: ../src/selection-chemistry.cpp:2192
msgid "Objects to marker"
@@ -9795,8 +9419,7 @@ msgstr "Objekte in Führungslinien umwandeln"
#: ../src/selection-chemistry.cpp:2248
msgid "Select <b>object(s)</b> to convert to pattern."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, die in ein Füllmuster umgewandelt werden sollen."
+msgstr "<b>Objekt(e)</b> auswählen, die in ein Füllmuster umgewandelt werden sollen."
#: ../src/selection-chemistry.cpp:2336
msgid "Objects to pattern"
@@ -9804,8 +9427,7 @@ msgstr "Objekte in Füllmuster umwandeln"
#: ../src/selection-chemistry.cpp:2352
msgid "Select an <b>object with pattern fill</b> to extract objects from."
-msgstr ""
-"Ein <b>Objekt mit Musterfüllung</b> auswählen, um die Füllung zu extrahieren."
+msgstr "Ein <b>Objekt mit Musterfüllung</b> auswählen, um die Füllung zu extrahieren."
#: ../src/selection-chemistry.cpp:2405
msgid "<b>No pattern fills</b> in the selection."
@@ -9829,15 +9451,11 @@ msgstr "Bitmap erstellen"
#: ../src/selection-chemistry.cpp:2708
msgid "Select <b>object(s)</b> to create clippath or mask from."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, um Ausschneidepfad oder Maskierung daraus zu "
-"erzeugen."
+msgstr "<b>Objekt(e)</b> auswählen, um Ausschneidepfad oder Maskierung daraus zu erzeugen."
#: ../src/selection-chemistry.cpp:2711
msgid "Select mask object and <b>object(s)</b> to apply clippath or mask to."
-msgstr ""
-"Maskierungsobjekt und <b>Objekt(e)</b> auswählen, um Ausschneidepfad oder "
-"Maskierung darauf anzuwenden."
+msgstr "Maskierungsobjekt und <b>Objekt(e)</b> auswählen, um Ausschneidepfad oder Maskierung darauf anzuwenden."
#: ../src/selection-chemistry.cpp:2818
msgid "Set clipping path"
@@ -9849,9 +9467,7 @@ msgstr "Maskierung setzen"
#: ../src/selection-chemistry.cpp:2833
msgid "Select <b>object(s)</b> to remove clippath or mask from."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, um Ausschneidepfad oder Maskierung davon zu "
-"entfernen."
+msgstr "<b>Objekt(e)</b> auswählen, um Ausschneidepfad oder Maskierung davon zu entfernen."
#: ../src/selection-chemistry.cpp:2906
msgid "Release clipping path"
@@ -9863,19 +9479,21 @@ msgstr "Maskierung entfernen"
#: ../src/selection-chemistry.cpp:2924
msgid "Select <b>object(s)</b> to fit canvas to."
-msgstr ""
-"<b>Objekt(e)</b> auswählen, auf die die Leinwand angepasst werden soll."
+msgstr "<b>Objekt(e)</b> auswählen, auf die die Leinwand angepasst werden soll."
#. Fit Page
-#: ../src/selection-chemistry.cpp:2944 ../src/verbs.cpp:2723
+#: ../src/selection-chemistry.cpp:2944
+#: ../src/verbs.cpp:2723
msgid "Fit Page to Selection"
msgstr "Seite in Auswahl einpassen"
-#: ../src/selection-chemistry.cpp:2969 ../src/verbs.cpp:2725
+#: ../src/selection-chemistry.cpp:2969
+#: ../src/verbs.cpp:2725
msgid "Fit Page to Drawing"
msgstr "Seite in Zeichnungsgröße einpassen"
-#: ../src/selection-chemistry.cpp:2985 ../src/verbs.cpp:2727
+#: ../src/selection-chemistry.cpp:2985
+#: ../src/verbs.cpp:2727
msgid "Fit Page to Selection or Drawing"
msgstr "Seite in Auswahl oder ganze Zeichnung einpassen"
@@ -9892,8 +9510,10 @@ msgid "Circle"
msgstr "Kreis"
#. ellipse
-#: ../src/selection-describer.cpp:49 ../src/selection-describer.cpp:76
-#: ../src/ui/dialog/inkscape-preferences.cpp:474 ../src/verbs.cpp:2510
+#: ../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
msgid "Ellipse"
msgstr "Ellipse"
@@ -9910,7 +9530,8 @@ msgstr "Linie"
msgid "Path"
msgstr "Pfad"
-#: ../src/selection-describer.cpp:61 ../src/widgets/toolbox.cpp:2726
+#: ../src/selection-describer.cpp:61
+#: ../src/widgets/toolbox.cpp:2726
msgid "Polygon"
msgstr "Polygon"
@@ -9920,13 +9541,15 @@ msgstr "Linienzug"
#. Rectangle
#: ../src/selection-describer.cpp:65
-#: ../src/ui/dialog/inkscape-preferences.cpp:464 ../src/verbs.cpp:2506
+#: ../src/ui/dialog/inkscape-preferences.cpp:464
+#: ../src/verbs.cpp:2506
msgid "Rectangle"
msgstr "Rechteck"
#. 3D box
#: ../src/selection-describer.cpp:67
-#: ../src/ui/dialog/inkscape-preferences.cpp:469 ../src/verbs.cpp:2508
+#: ../src/ui/dialog/inkscape-preferences.cpp:469
+#: ../src/verbs.cpp:2508
msgid "3D Box"
msgstr "3D-Box"
@@ -9944,29 +9567,27 @@ msgstr "Pfadversatz"
#. spiral
#: ../src/selection-describer.cpp:80
-#: ../src/ui/dialog/inkscape-preferences.cpp:482 ../src/verbs.cpp:2514
+#: ../src/ui/dialog/inkscape-preferences.cpp:482
+#: ../src/verbs.cpp:2514
msgid "Spiral"
msgstr "Spirale"
#. star
#: ../src/selection-describer.cpp:82
-#: ../src/ui/dialog/inkscape-preferences.cpp:478 ../src/verbs.cpp:2512
+#: ../src/ui/dialog/inkscape-preferences.cpp:478
+#: ../src/verbs.cpp:2512
#: ../src/widgets/toolbox.cpp:2733
msgid "Star"
msgstr "Stern"
#: ../src/selection-describer.cpp:128
msgid "Click selection to toggle scale/rotation handles"
-msgstr ""
-"Klicken Sie auf die Auswahl, um zwischen Skalieren und Rotieren umzuschalten"
+msgstr "Klicken Sie auf die Auswahl, um zwischen Skalieren und Rotieren umzuschalten"
#. no items
#: ../src/selection-describer.cpp:130
-msgid ""
-"No objects selected. Click, Shift+click, or drag around objects to select."
-msgstr ""
-"Keine Objekte ausgewählt. Klick, Umschalt+Klick, oder Ziehen um Objekte "
-"auszuwählen."
+msgid "No objects selected. Click, Shift+click, or drag around objects to select."
+msgstr "Keine Objekte ausgewählt. Klick, Umschalt+Klick, oder Ziehen um Objekte auszuwählen."
#: ../src/selection-describer.cpp:139
msgid "root"
@@ -10025,7 +9646,8 @@ msgid "Use <b>Shift+D</b> to look up frame"
msgstr "<b>Umschalt+D</b> zum Finden des Rahmens verwenden"
#. this is only used with 2 or more objects
-#: ../src/selection-describer.cpp:211 ../src/tweak-context.cpp:202
+#: ../src/selection-describer.cpp:211
+#: ../src/tweak-context.cpp:202
#, c-format
msgid "<b>%i</b> object selected"
msgid_plural "<b>%i</b> objects selected"
@@ -10069,7 +9691,8 @@ msgstr[1] "<b>%i</b> Objekte mit <b>%i</b> Typen"
msgid "%s%s. %s."
msgstr "%s%s. %s."
-#: ../src/seltrans.cpp:537 ../src/ui/dialog/transformation.cpp:819
+#: ../src/seltrans.cpp:537
+#: ../src/ui/dialog/transformation.cpp:819
msgid "Skew"
msgstr "Scheren"
@@ -10078,55 +9701,34 @@ msgid "Set center"
msgstr "Mittelpunkt setzen"
#: ../src/seltrans.cpp:646
-msgid ""
-"<b>Center</b> of rotation and skewing: drag to reposition; scaling with "
-"Shift also uses this center"
-msgstr ""
-"<b>Mittelpunkt</b> für Drehen und Scheren: <b>Ziehen</b> verschiebt den "
-"Mittelpunkt; Skalieren mit <b>Umschalt</b> verwendet diesen Mittelpunkt"
+msgid "<b>Center</b> of rotation and skewing: drag to reposition; scaling with Shift also uses this center"
+msgstr "<b>Mittelpunkt</b> für Drehen und Scheren: <b>Ziehen</b> verschiebt den Mittelpunkt; Skalieren mit <b>Umschalt</b> verwendet diesen Mittelpunkt"
#: ../src/seltrans.cpp:673
-msgid ""
-"<b>Squeeze or stretch</b> selection; with <b>Ctrl</b> to scale uniformly; "
-"with <b>Shift</b> to scale around rotation center"
-msgstr ""
-"<b>Verzerren</b> der Auswahl; <b>Strg</b> behält Höhen-/Breitenverhältnis "
-"bei; <b>Umschalt</b> skaliert um den Rotationsmittelpunkt"
+msgid "<b>Squeeze or stretch</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</b> to scale around rotation center"
+msgstr "<b>Verzerren</b> der Auswahl; <b>Strg</b> behält Höhen-/Breitenverhältnis bei; <b>Umschalt</b> skaliert um den Rotationsmittelpunkt"
#: ../src/seltrans.cpp:674
-msgid ""
-"<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</"
-"b> to scale around rotation center"
-msgstr ""
-"<b>Skalieren</b> der Auswahl; <b>Strg</b> behält Höhen-/Breitenverhältnis "
-"bei; <b>Umschalt</b> skaliert um den Rotationsmittelpunkt"
+msgid "<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</b> to scale around rotation center"
+msgstr "<b>Skalieren</b> der Auswahl; <b>Strg</b> behält Höhen-/Breitenverhältnis bei; <b>Umschalt</b> skaliert um den Rotationsmittelpunkt"
#: ../src/seltrans.cpp:678
-msgid ""
-"<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to "
-"skew around the opposite side"
-msgstr ""
-"<b>Scheren</b> der Auswahl; Winkel mit <b>Strg</b> einrasten; <b>Umschalt</"
-"b> schert entlang der gegenüberliegenden Seite"
+msgid "<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to skew around the opposite side"
+msgstr "<b>Scheren</b> der Auswahl; Winkel mit <b>Strg</b> einrasten; <b>Umschalt</b> schert entlang der gegenüberliegenden Seite"
#: ../src/seltrans.cpp:679
-msgid ""
-"<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> "
-"to rotate around the opposite corner"
-msgstr ""
-"<b>Drehen</b> der Auswahl; Winkel mit <b>Strg</b> einrasten; <b>Umschalt</b> "
-"dreht entlang der gegenüberliegenden Seite"
+msgid "<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to rotate around the opposite corner"
+msgstr "<b>Drehen</b> der Auswahl; Winkel mit <b>Strg</b> einrasten; <b>Umschalt</b> dreht entlang der gegenüberliegenden Seite"
#: ../src/seltrans.cpp:813
msgid "Reset center"
msgstr "Mittelpunkt zurücksetzen"
-#: ../src/seltrans.cpp:1058 ../src/seltrans.cpp:1157
+#: ../src/seltrans.cpp:1058
+#: ../src/seltrans.cpp:1157
#, c-format
msgid "<b>Scale</b>: %0.2f%% x %0.2f%%; with <b>Ctrl</b> to lock ratio"
-msgstr ""
-"<b>Skalierung</b>: %0.2f%% × %0.2f%%; Höhen-/Breitenverhältnis mit <b>Strg</"
-"b> beibehalten"
+msgstr "<b>Skalierung</b>: %0.2f%% × %0.2f%%; Höhen-/Breitenverhältnis mit <b>Strg</b> beibehalten"
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
@@ -10149,12 +9751,8 @@ msgstr "<b>Mittelpunkt</b> verschieben nach %s, %s"
#: ../src/seltrans.cpp:1541
#, c-format
-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>Verschieben</b> um %s, %s; mit <b>Strg</b> nur horizontale/vertikale "
-"Verschiebung; <b>Umschalt</b> deaktiviert Einrasten."
+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>Verschieben</b> um %s, %s; mit <b>Strg</b> nur horizontale/vertikale Verschiebung; <b>Umschalt</b> deaktiviert Einrasten."
#: ../src/shape-editor.cpp:471
msgid "Drag curve"
@@ -10170,7 +9768,8 @@ msgid "<b>Link</b> without URI"
msgstr "<b>Verknüpfung</b> ohne URI"
# !!!
-#: ../src/sp-ellipse.cpp:502 ../src/sp-ellipse.cpp:879
+#: ../src/sp-ellipse.cpp:502
+#: ../src/sp-ellipse.cpp:879
msgid "<b>Ellipse</b>"
msgstr "<b>Ellipse</b>"
@@ -10223,12 +9822,8 @@ msgid "Guides Around Page"
msgstr "Führungslinien an Seitenrändern"
#: ../src/sp-guide.cpp:421
-msgid ""
-"<b>Shift+drag</b> to rotate, <b>Ctrl+drag</b> to move origin, <b>Del</b> to "
-"delete"
-msgstr ""
-"<b>Umschalt+Ziehen</b> rotiert, <b>Strg+Ziehen</b> bewegt Ursprung, <b>Entf</"
-"b> löscht."
+msgid "<b>Shift+drag</b> to rotate, <b>Ctrl+drag</b> to move origin, <b>Del</b> to delete"
+msgstr "<b>Umschalt+Ziehen</b> rotiert, <b>Strg+Ziehen</b> bewegt Ursprung, <b>Entf</b> löscht."
#: ../src/sp-guide.cpp:426
#, c-format
@@ -10269,10 +9864,8 @@ msgstr "<b>Alt</b>: Radius der Spirale einrasten"
#: ../src/spiral-context.cpp:453
#, c-format
-msgid ""
-"<b>Spiral</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
-msgstr ""
-"<b>Spirale</b>: Radius %s, Winkel %5g&#176;; Winkel mit <b>Strg</b> einrasten"
+msgid "<b>Spiral</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
+msgstr "<b>Spirale</b>: Radius %s, Winkel %5g&#176;; Winkel mit <b>Strg</b> einrasten"
#: ../src/spiral-context.cpp:479
msgid "Create spiral"
@@ -10314,7 +9907,8 @@ msgstr[1] "<b>Gruppe</b> von <b>%d</b> Objekten"
msgid "<b>Line</b>"
msgstr "<b>Linie</b>"
-#: ../src/splivarot.cpp:66 ../src/splivarot.cpp:72
+#: ../src/splivarot.cpp:66
+#: ../src/splivarot.cpp:72
msgid "Union"
msgstr "Vereinigung"
@@ -10322,7 +9916,8 @@ msgstr "Vereinigung"
msgid "Intersection"
msgstr "Überschneidung"
-#: ../src/splivarot.cpp:84 ../src/splivarot.cpp:90
+#: ../src/splivarot.cpp:84
+#: ../src/splivarot.cpp:90
msgid "Difference"
msgstr "Differenz"
@@ -10340,43 +9935,28 @@ msgstr "Pfad zerschneiden"
#: ../src/splivarot.cpp:121
msgid "Select <b>at least 2 paths</b> to perform a boolean operation."
-msgstr ""
-"Wählen Sie <b>mindestens 2 Pfade</b> aus, um eine boole'sche Operation "
-"auszuführen."
+msgstr "Wählen Sie <b>mindestens 2 Pfade</b> aus, um eine boole'sche Operation auszuführen."
#: ../src/splivarot.cpp:125
msgid "Select <b>at least 1 path</b> to perform a boolean union."
-msgstr ""
-"Wählen Sie <b>mindestens 1 Pfad</b> aus, um eine boole'sche Vereinigung "
-"auszuführen."
+msgstr "Wählen Sie <b>mindestens 1 Pfad</b> aus, um eine boole'sche Vereinigung auszuführen."
#: ../src/splivarot.cpp:131
-msgid ""
-"Select <b>exactly 2 paths</b> to perform difference, division, or path cut."
-msgstr ""
-"Wählen Sie <b>genau 2 Pfade</b> aus, um eine Differenz-, XOR-, Dvisions- "
-"oder Pfadzuschneideoperation auszuführen."
+msgid "Select <b>exactly 2 paths</b> to perform difference, division, or path cut."
+msgstr "Wählen Sie <b>genau 2 Pfade</b> aus, um eine Differenz-, XOR-, Dvisions- oder Pfadzuschneideoperation auszuführen."
-#: ../src/splivarot.cpp:147 ../src/splivarot.cpp:162
-msgid ""
-"Unable to determine the <b>z-order</b> of the objects selected for "
-"difference, XOR, division, or path cut."
-msgstr ""
-"Die <b>Z-Tiefe</b> der ausgewählten Objekte konnte nicht für die Differenz-, "
-"XOR-, Division- oder Pfadzuschneideoperation ermittelt werden."
+#: ../src/splivarot.cpp:147
+#: ../src/splivarot.cpp:162
+msgid "Unable to determine the <b>z-order</b> of the objects selected for difference, XOR, division, or path cut."
+msgstr "Die <b>Z-Tiefe</b> der ausgewählten Objekte konnte nicht für die Differenz-, XOR-, Division- oder Pfadzuschneideoperation ermittelt werden."
#: ../src/splivarot.cpp:192
-msgid ""
-"One of the objects is <b>not a path</b>, cannot perform boolean operation."
-msgstr ""
-"Eines der ausgewählten Objekte ist <b>kein Pfad</b>. Boole'sche Operation "
-"wird nicht ausgeführt."
+msgid "One of the objects is <b>not a path</b>, cannot perform boolean operation."
+msgstr "Eines der ausgewählten Objekte ist <b>kein Pfad</b>. Boole'sche Operation wird nicht ausgeführt."
#: ../src/splivarot.cpp:633
msgid "Select <b>stroked path(s)</b> to convert stroke to path."
-msgstr ""
-"<b>Pfade mit Kontur</b> auswählen, um die Konturlinie in einen Pfad "
-"umzuwandeln."
+msgstr "<b>Pfade mit Kontur</b> auswählen, um die Konturlinie in einen Pfad umzuwandeln."
#: ../src/splivarot.cpp:954
msgid "Convert stroke to path"
@@ -10389,15 +9969,15 @@ msgstr "<b>Keine Pfade mit Konturlinien</b> in der Auswahl."
#: ../src/splivarot.cpp:1040
msgid "Selected object is <b>not a path</b>, cannot inset/outset."
-msgstr ""
-"Ausgewähltes Objekt ist <b>kein Pfad</b> - kann es nicht schrumpfen/"
-"erweitern."
+msgstr "Ausgewähltes Objekt ist <b>kein Pfad</b> - kann es nicht schrumpfen/erweitern."
-#: ../src/splivarot.cpp:1159 ../src/splivarot.cpp:1228
+#: ../src/splivarot.cpp:1159
+#: ../src/splivarot.cpp:1228
msgid "Create linked offset"
msgstr "Verbundenen Versatz erzeugen"
-#: ../src/splivarot.cpp:1160 ../src/splivarot.cpp:1229
+#: ../src/splivarot.cpp:1160
+#: ../src/splivarot.cpp:1229
msgid "Create dynamic offset"
msgstr "Dynamischen Versatz erzeugen"
@@ -10457,11 +10037,13 @@ msgstr "Beim ausführen des Pfad-Effektes ist ein Fehler aufgetreten."
msgid "<b>Linked offset</b>, %s by %f pt"
msgstr "<b>Verknüpfter Versatz</b>, %s um %f pt"
-#: ../src/sp-offset.cpp:427 ../src/sp-offset.cpp:431
+#: ../src/sp-offset.cpp:427
+#: ../src/sp-offset.cpp:431
msgid "outset"
msgstr "erweitert"
-#: ../src/sp-offset.cpp:427 ../src/sp-offset.cpp:431
+#: ../src/sp-offset.cpp:427
+#: ../src/sp-offset.cpp:431
msgid "inset"
msgstr "geschrumpft"
@@ -10585,16 +10167,13 @@ msgstr "<b>Strg</b>: Winkel einrasten; Strahlen bleiben radial ausgerichtet"
#: ../src/star-context.cpp:464
#, c-format
-msgid ""
-"<b>Polygon</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
-msgstr ""
-"<b>Polygon</b>: Radius %s, Winkel %5g°; Winkel mit <b>Strg</b> einrasten"
+msgid "<b>Polygon</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
+msgstr "<b>Polygon</b>: Radius %s, Winkel %5g°; Winkel mit <b>Strg</b> einrasten"
#: ../src/star-context.cpp:465
#, c-format
msgid "<b>Star</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
-msgstr ""
-"<b>Stern</b>: Radius %s, Winkel %5g&#176;; Winkel mit <b>Strg</b> einrasten"
+msgstr "<b>Stern</b>: Radius %s, Winkel %5g&#176;; Winkel mit <b>Strg</b> einrasten"
#: ../src/star-context.cpp:494
msgid "Create star"
@@ -10605,28 +10184,20 @@ msgid "Select <b>a text and a path</b> to put text on path."
msgstr "Einen <b>Text und Pfad</b> auswählen, um Text an Pfad auszurichten."
#: ../src/text-chemistry.cpp:109
-msgid ""
-"This text object is <b>already put on a path</b>. Remove it from the path "
-"first. Use <b>Shift+D</b> to look up its path."
-msgstr ""
-"Dieses Textobjekt ist <b>schon einem Pfad zugewiesen</b>. Bitte erst vom "
-"Pfad trennen. <b>Umschalt+D</b> zeigt den Pfad an."
+msgid "This text object is <b>already put on a path</b>. Remove it from the path first. Use <b>Shift+D</b> to look up its path."
+msgstr "Dieses Textobjekt ist <b>schon einem Pfad zugewiesen</b>. Bitte erst vom Pfad trennen. <b>Umschalt+D</b> zeigt den Pfad an."
#. rect is the only SPShape which is not <path> yet, and thus SVG forbids us from putting text on it
#: ../src/text-chemistry.cpp:115
-msgid ""
-"You cannot put text on a rectangle in this version. Convert rectangle to "
-"path first."
-msgstr ""
-"Fließtext auf einem Rechteck in dieser Version noch nicht unterstützt. "
-"Rechteck vorerst in einen Pfad umwandeln."
+msgid "You cannot put text on a rectangle in this version. Convert rectangle to path first."
+msgstr "Fließtext auf einem Rechteck in dieser Version noch nicht unterstützt. Rechteck vorerst in einen Pfad umwandeln."
#: ../src/text-chemistry.cpp:125
msgid "The flowed text(s) must be <b>visible</b> in order to be put on a path."
-msgstr ""
-"Der Fließtext muss <b>sichtbar</b> sein, um einem Pfad zugewiesen zu werden."
+msgstr "Der Fließtext muss <b>sichtbar</b> sein, um einem Pfad zugewiesen zu werden."
-#: ../src/text-chemistry.cpp:192 ../src/verbs.cpp:2364
+#: ../src/text-chemistry.cpp:192
+#: ../src/verbs.cpp:2364
msgid "Put text on path"
msgstr "Text an Pfad ausrichten"
@@ -10638,11 +10209,13 @@ msgstr "Einen <b>Text-Pfad</b> zum Trennen vom Pfad auswählen."
msgid "<b>No texts-on-paths</b> in the selection."
msgstr "<b>Kein Text-Pfad</b> in der Auswahl vorhanden."
-#: ../src/text-chemistry.cpp:229 ../src/verbs.cpp:2366
+#: ../src/text-chemistry.cpp:229
+#: ../src/verbs.cpp:2366
msgid "Remove text from path"
msgstr "Text wird von Pfad getrennt"
-#: ../src/text-chemistry.cpp:269 ../src/text-chemistry.cpp:290
+#: ../src/text-chemistry.cpp:269
+#: ../src/text-chemistry.cpp:290
msgid "Select <b>text(s)</b> to remove kerns from."
msgstr "<b>Text</b> auswählen, um Kerning zu entfernen."
@@ -10651,12 +10224,8 @@ msgid "Remove manual kerns"
msgstr "Manuelle Unterschneidungen entfernen"
#: ../src/text-chemistry.cpp:313
-msgid ""
-"Select <b>a text</b> and one or more <b>paths or shapes</b> to flow text "
-"into frame."
-msgstr ""
-"Einen <b>Text</b> und <b>Pfad</b> oder <b>Form</b> zum Erzeugen eines "
-"Fließtextes auswählen."
+msgid "Select <b>a text</b> and one or more <b>paths or shapes</b> to flow text into frame."
+msgstr "Einen <b>Text</b> und <b>Pfad</b> oder <b>Form</b> zum Erzeugen eines Fließtextes auswählen."
#: ../src/text-chemistry.cpp:381
msgid "Flow text into shape"
@@ -10676,8 +10245,7 @@ msgstr "<b>Fließtext</b> zum Umwandeln auswählen."
#: ../src/text-chemistry.cpp:507
msgid "The flowed text(s) must be <b>visible</b> in order to be converted."
-msgstr ""
-"Der Fließtext muss <b>sichtbar</b> sein, um umgewandelt werden zu können."
+msgstr "Der Fließtext muss <b>sichtbar</b> sein, um umgewandelt werden zu können."
#: ../src/text-chemistry.cpp:535
msgid "Convert flowed text to text"
@@ -10689,16 +10257,11 @@ msgstr "<b>Kein Fließtext</b> zum Umwandeln in der Auswahl."
#: ../src/text-context.cpp:441
msgid "<b>Click</b> to edit the text, <b>drag</b> to select part of the text."
-msgstr ""
-"<b>Klick</b> zum Ändern des Textes, <b>Ziehen</b>, um einen Teil des Textes "
-"zu ändern."
+msgstr "<b>Klick</b> zum Ändern des Textes, <b>Ziehen</b>, um einen Teil des Textes zu ändern."
#: ../src/text-context.cpp:443
-msgid ""
-"<b>Click</b> to edit the flowed text, <b>drag</b> to select part of the text."
-msgstr ""
-"<b>Klick</b> zum Ändern des Fließtextes, <b>Ziehen</b>, um einen Teil des "
-"Textes zu ändern."
+msgid "<b>Click</b> to edit the flowed text, <b>drag</b> to select part of the text."
+msgstr "<b>Klick</b> zum Ändern des Fließtextes, <b>Ziehen</b>, um einen Teil des Textes zu ändern."
#: ../src/text-context.cpp:498
msgid "Create text"
@@ -10717,7 +10280,8 @@ msgstr "Unicode-Zeichen einfügen"
msgid "Unicode (<b>Enter</b> to finish): %s: %s"
msgstr "Unicode (<b>Eingabe</b> zum Abschliessen): %s: %s"
-#: ../src/text-context.cpp:574 ../src/text-context.cpp:849
+#: ../src/text-context.cpp:574
+#: ../src/text-context.cpp:849
msgid "Unicode (<b>Enter</b> to finish): "
msgstr "Unicode (<b>Eingabe</b> zum Abschliessen): "
@@ -10739,12 +10303,8 @@ msgid "Create flowed text"
msgstr "Fließtext erstellen"
#: ../src/text-context.cpp:698
-msgid ""
-"The frame is <b>too small</b> for the current font size. Flowed text not "
-"created."
-msgstr ""
-"Der Rahmen ist <b>zu klein</b> für die aktuelle Schriftgröße. Der Fließtext "
-"wurde nicht erzeugt."
+msgid "The frame is <b>too small</b> for the current font size. Flowed text not created."
+msgstr "Der Rahmen ist <b>zu klein</b> für die aktuelle Schriftgröße. Der Fließtext wurde nicht erzeugt."
#: ../src/text-context.cpp:834
msgid "No-break space"
@@ -10816,26 +10376,18 @@ msgstr "Text einfügen"
#: ../src/text-context.cpp:1602
#, c-format
-msgid ""
-"Type or edit flowed text (%d characters); <b>Enter</b> to start new "
-"paragraph."
-msgstr ""
-"Fließtext schreiben (%d Zeichen); <b>Eingabe</b>, um einen neuen Absatz zu "
-"beginnen."
+msgid "Type or edit flowed text (%d characters); <b>Enter</b> to start new paragraph."
+msgstr "Fließtext schreiben (%d Zeichen); <b>Eingabe</b>, um einen neuen Absatz zu beginnen."
#: ../src/text-context.cpp:1604
#, c-format
msgid "Type or edit text (%d characters); <b>Enter</b> to start new line."
-msgstr ""
-"Text schreiben (%d Zeichen); <b>Eingabe</b>, um eine neue Zeile zu beginnen."
+msgstr "Text schreiben (%d Zeichen); <b>Eingabe</b>, um eine neue Zeile zu beginnen."
-#: ../src/text-context.cpp:1612 ../src/tools-switch.cpp:190
-msgid ""
-"<b>Click</b> to select or create text, <b>drag</b> to create flowed text; "
-"then type."
-msgstr ""
-"Zum Auswählen oder Erstellen eines Textobjekts <b>klicken</b>, <b>Ziehen</b> "
-"um Fließtext zu erstellen; anschließend schreiben."
+#: ../src/text-context.cpp:1612
+#: ../src/tools-switch.cpp:190
+msgid "<b>Click</b> to select or create text, <b>drag</b> to create flowed text; then type."
+msgstr "Zum Auswählen oder Erstellen eines Textobjekts <b>klicken</b>, <b>Ziehen</b> um Fließtext zu erstellen; anschließend schreiben."
#: ../src/text-context.cpp:1722
msgid "Type text"
@@ -10846,117 +10398,60 @@ msgid "You cannot edit <b>cloned character data</b>."
msgstr "<b>Geklonte Zeichendaten</b> können nicht editiert werden."
#: ../src/tools-switch.cpp:130
-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 ""
-"Um einen Pfad zu bearbeiten, auf Knoten <b>klicken</b>, <b>Umschalt+Klick</"
-"b> oder <b>Ziehen</b> um Knoten auszuwählen, dann Knoten oder Anfasser "
-"<b>ziehen</b>. Ganzes Objekt durch <b>Klick</b> auswählen."
+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 "Um einen Pfad zu bearbeiten, auf Knoten <b>klicken</b>, <b>Umschalt+Klick</b> oder <b>Ziehen</b> um Knoten auszuwählen, dann Knoten oder Anfasser <b>ziehen</b>. Ganzes Objekt durch <b>Klick</b> auswählen."
#: ../src/tools-switch.cpp:136
msgid "To tweak a path by pushing, select it and drag over it."
-msgstr ""
-"Um eine Pfadform zu justieren, selektieren Sie diesen und ziehen über ihn."
+msgstr "Um eine Pfadform zu justieren, selektieren Sie diesen und ziehen über ihn."
#: ../src/tools-switch.cpp:142
-msgid ""
-"<b>Drag</b> to create a rectangle. <b>Drag controls</b> to round corners and "
-"resize. <b>Click</b> to select."
-msgstr ""
-"<b>Ziehen</b> erstellt ein Rechteck. <b>Anfasser ziehen</b> rundet Ecken ab "
-"und ändert Größe. <b>Klick</b> wählt aus."
+msgid "<b>Drag</b> to create a rectangle. <b>Drag controls</b> to round corners and resize. <b>Click</b> to select."
+msgstr "<b>Ziehen</b> erstellt ein Rechteck. <b>Anfasser ziehen</b> rundet Ecken ab und ändert Größe. <b>Klick</b> wählt aus."
#: ../src/tools-switch.cpp:148
-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>Ziehen</b> erstellt eine 3D-Box. <b>Anfasser ziehen</b> für "
-"perspektivische Größenänderung. <b>Klick</b> wählt aus (mit <b>Strg+Alt</b> "
-"für einzelne Flächen)."
+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>Ziehen</b> erstellt eine 3D-Box. <b>Anfasser ziehen</b> für perspektivische Größenänderung. <b>Klick</b> wählt aus (mit <b>Strg+Alt</b> für einzelne Flächen)."
#: ../src/tools-switch.cpp:154
-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>Ziehen</b> erstellt eine Ellipse. <b>Anfasser ziehen</b> erzeugt Bogen "
-"oder Kreissegment. <b>Klick</b> wählt aus."
+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>Ziehen</b> erstellt eine Ellipse. <b>Anfasser ziehen</b> erzeugt Bogen oder Kreissegment. <b>Klick</b> wählt aus."
#: ../src/tools-switch.cpp:160
-msgid ""
-"<b>Drag</b> to create a star. <b>Drag controls</b> to edit the star shape. "
-"<b>Click</b> to select."
-msgstr ""
-"<b>Ziehen</b> erstellt einen Stern. <b>Anfasser ziehen</b> bearbeitet Form. "
-"<b>Klick</b> wählt aus."
+msgid "<b>Drag</b> to create a star. <b>Drag controls</b> to edit the star shape. <b>Click</b> to select."
+msgstr "<b>Ziehen</b> erstellt einen Stern. <b>Anfasser ziehen</b> bearbeitet Form. <b>Klick</b> wählt aus."
#: ../src/tools-switch.cpp:166
-msgid ""
-"<b>Drag</b> to create a spiral. <b>Drag controls</b> to edit the spiral "
-"shape. <b>Click</b> to select."
-msgstr ""
-"<b>Ziehen</b> erstellt eine Spirale. <b>Anfasser ziehen</b> bearbeitet die "
-"Form. <b>Klick</b> wählt aus."
+msgid "<b>Drag</b> to create a spiral. <b>Drag controls</b> to edit the spiral shape. <b>Click</b> to select."
+msgstr "<b>Ziehen</b> erstellt eine Spirale. <b>Anfasser ziehen</b> bearbeitet die Form. <b>Klick</b> wählt aus."
#: ../src/tools-switch.cpp:172
-msgid ""
-"<b>Drag</b> to create a freehand line. <b>Shift</b> appends to selected "
-"path, <b>Alt</b> activates sketch mode."
-msgstr ""
-"<b>Ziehen</b> erzeugt eine Freihandlinie. <b>Umschalt</b> erweitert "
-"ausgewählten Pfad. <b>Alt</b> wechselt in Skizzenmodus."
+msgid "<b>Drag</b> to create a freehand line. <b>Shift</b> appends to selected path, <b>Alt</b> activates sketch mode."
+msgstr "<b>Ziehen</b> erzeugt eine Freihandlinie. <b>Umschalt</b> erweitert ausgewählten Pfad. <b>Alt</b> wechselt in Skizzenmodus."
#: ../src/tools-switch.cpp:178
-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>Klick</b> oder <b>Klick und Ziehen</b> beginnt einen Pfad; <b>Umschalt</"
-"b> hängt an ausgewählten Pfad an. <b>Strg+Klick</b> erzeugt einzelne Punkte."
+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>Klick</b> oder <b>Klick und Ziehen</b> beginnt einen Pfad; <b>Umschalt</b> hängt an ausgewählten Pfad an. <b>Strg+Klick</b> erzeugt einzelne Punkte."
#: ../src/tools-switch.cpp:184
-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>Ziehen</b>, um kalligrafische Linien zu zeichnen; <b>Ctrl</b> mit "
-"Führungspfad. <b>Pfeiltasten</b> verändern Breite (links/rechts) und Winkel "
-"(hoch/runter)."
+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>Ziehen</b>, um kalligrafische Linien zu zeichnen; <b>Ctrl</b> mit Führungspfad. <b>Pfeiltasten</b> verändern Breite (links/rechts) und Winkel (hoch/runter)."
#: ../src/tools-switch.cpp:196
-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>Ziehen</b> oder <b>Doppelklicken</b> erzeugt Farbverlauf für gewählte "
-"Objekte, <b>Anfasser ziehen</b> verändert Farbverlauf."
+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>Ziehen</b> oder <b>Doppelklicken</b> erzeugt Farbverlauf für gewählte Objekte, <b>Anfasser ziehen</b> verändert Farbverlauf."
#: ../src/tools-switch.cpp:202
-msgid ""
-"<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to "
-"zoom out."
-msgstr ""
-"<b>Klick</b> oder <b>Rechteck</b> aufziehen vergrößert die Ansicht, "
-"<b>Umschalt+Klick</b> verkleinert."
+msgid "<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to zoom out."
+msgstr "<b>Klick</b> oder <b>Rechteck</b> aufziehen vergrößert die Ansicht, <b>Umschalt+Klick</b> verkleinert."
#: ../src/tools-switch.cpp:214
msgid "<b>Click and drag</b> between shapes to create a connector."
msgstr "<b>Klick und Ziehen</b> zwischen Formen erzeugt einen Objektverbinder."
#: ../src/tools-switch.cpp:220
-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>Klick</b> um ein abgegrenztes Gebiet füllen, <b>Umschalt+Klick</b> um die "
-"neue Füllung mit der aktuellen Auswahl zu vereinigen, <b>Strg+Klick</b> um "
-"Füllung und Kontur des geklickten Objekts zur aktuellen Einstellung zu "
-"ändern."
+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>Klick</b> um ein abgegrenztes Gebiet füllen, <b>Umschalt+Klick</b> um die neue Füllung mit der aktuellen Auswahl zu vereinigen, <b>Strg+Klick</b> um Füllung und Kontur des geklickten Objekts zur aktuellen Einstellung zu ändern."
#: ../src/tools-switch.cpp:226
msgid "<b>Drag</b> to erase."
@@ -10972,8 +10467,10 @@ msgstr "Wählen Sie ein Werkzeug aus der Werkzeugleiste"
msgid "Trace: %d. %ld nodes"
msgstr "Vektorisieren: %d. %ld Knoten"
-#: ../src/trace/trace.cpp:71 ../src/trace/trace.cpp:136
-#: ../src/trace/trace.cpp:144 ../src/trace/trace.cpp:243
+#: ../src/trace/trace.cpp:71
+#: ../src/trace/trace.cpp:136
+#: ../src/trace/trace.cpp:144
+#: ../src/trace/trace.cpp:243
msgid "Select an <b>image</b> to trace"
msgstr "<b>Bild</b> zum Vektorisieren auswählen"
@@ -11028,9 +10525,7 @@ msgstr "%s. Ziehen zum <b>verschieben</b>."
#: ../src/tweak-context.cpp:214
#, c-format
msgid "%s. Drag or click to <b>move in</b>; with Shift to <b>move out</b>."
-msgstr ""
-"%s. Ziehen oder Klicken zum <b>verschieben hinein </b>; mit Umschalttaste "
-"zum <b>verschieben hinaus</b>."
+msgstr "%s. Ziehen oder Klicken zum <b>verschieben hinein </b>; mit Umschalttaste zum <b>verschieben hinaus</b>."
#: ../src/tweak-context.cpp:218
#, c-format
@@ -11040,25 +10535,17 @@ msgstr "%s. Ziehen oder Klicken zum <b>zufälligen verschieben</b>."
#: ../src/tweak-context.cpp:222
#, c-format
msgid "%s. Drag or click to <b>scale down</b>; with Shift to <b>scale up</b>."
-msgstr ""
-"%s. Ziehen oder Klicken zum <b>kleiner skalieren</b>; mit Umschalttaste zum "
-"<b>größer skalieren</b>."
+msgstr "%s. Ziehen oder Klicken zum <b>kleiner skalieren</b>; mit Umschalttaste zum <b>größer skalieren</b>."
#: ../src/tweak-context.cpp:226
#, c-format
-msgid ""
-"%s. Drag or click to <b>rotate clockwise</b>; with Shift, "
-"<b>counterclockwise</b>."
-msgstr ""
-"%s. Ziehen oder Klicken zum <b>Drehen im Uhrzeigersinn</b>; mit "
-"Umschalttaste zum <b>gegen den Uhrzeigersinn</b>."
+msgid "%s. Drag or click to <b>rotate clockwise</b>; with Shift, <b>counterclockwise</b>."
+msgstr "%s. Ziehen oder Klicken zum <b>Drehen im Uhrzeigersinn</b>; mit Umschalttaste zum <b>gegen den Uhrzeigersinn</b>."
#: ../src/tweak-context.cpp:230
#, c-format
msgid "%s. Drag or click to <b>duplicate</b>; with Shift, <b>delete</b>."
-msgstr ""
-"%s. Ziehen oder Klicken zum <b>Duplizieren</b>; mit Umschalttaste zum "
-"<b>Löschen</b>."
+msgstr "%s. Ziehen oder Klicken zum <b>Duplizieren</b>; mit Umschalttaste zum <b>Löschen</b>."
#: ../src/tweak-context.cpp:234
#, c-format
@@ -11068,16 +10555,12 @@ msgstr "%s. Ziehen zum <b> Schieben der Pfade</b>."
#: ../src/tweak-context.cpp:238
#, c-format
msgid "%s. Drag or click to <b>inset paths</b>; with Shift to <b>outset</b>."
-msgstr ""
-"%s. Ziehen oder Klicken <b>zieht</b> Pfade <b>zusammen</b>; mit Umschalt "
-"<b>schiebt sie auseinander</b>."
+msgstr "%s. Ziehen oder Klicken <b>zieht</b> Pfade <b>zusammen</b>; mit Umschalt <b>schiebt sie auseinander</b>."
#: ../src/tweak-context.cpp:246
#, c-format
msgid "%s. Drag or click to <b>attract paths</b>; with Shift to <b>repel</b>."
-msgstr ""
-"%s. Ziehen oder Klicken <b>zieht Pfade an</b>; mit Umschalt <b>stößt es sie "
-"ab</b>."
+msgstr "%s. Ziehen oder Klicken <b>zieht Pfade an</b>; mit Umschalt <b>stößt es sie ab</b>."
#: ../src/tweak-context.cpp:254
#, c-format
@@ -11096,11 +10579,8 @@ msgstr "%s. Ziehen oder Klicken um <b>Farben zufällig zu setzen</b>."
#: ../src/tweak-context.cpp:266
#, c-format
-msgid ""
-"%s. Drag or click to <b>increase blur</b>; with Shift to <b>decrease</b>."
-msgstr ""
-"%s. Ziehen oder Klicken um <b>Weichheit zu erhöhen</b>; mit Shift "
-"<b>verringern</b>."
+msgid "%s. Drag or click to <b>increase blur</b>; with Shift to <b>decrease</b>."
+msgstr "%s. Ziehen oder Klicken um <b>Weichheit zu erhöhen</b>; mit Shift <b>verringern</b>."
#: ../src/tweak-context.cpp:1223
msgid "<b>Nothing selected!</b> Select objects to tweak."
@@ -11164,7 +10644,8 @@ msgstr "Unschärfe-Justage"
msgid "Nothing was copied."
msgstr "Es wurde nichts kopiert."
-#: ../src/ui/clipboard.cpp:318 ../src/ui/clipboard.cpp:520
+#: ../src/ui/clipboard.cpp:318
+#: ../src/ui/clipboard.cpp:520
#: ../src/ui/clipboard.cpp:544
msgid "Nothing on the clipboard."
msgstr "Es ist nichts in der Zwischenablage."
@@ -11173,7 +10654,8 @@ msgstr "Es ist nichts in der Zwischenablage."
msgid "Select <b>object(s)</b> to paste style to."
msgstr "Objekt(e) auswählen, um Stil darauf anzuwenden."
-#: ../src/ui/clipboard.cpp:385 ../src/ui/clipboard.cpp:403
+#: ../src/ui/clipboard.cpp:385
+#: ../src/ui/clipboard.cpp:403
msgid "No style on the clipboard."
msgstr "Kein Stil in der Zwischenablage."
@@ -11194,7 +10676,8 @@ msgstr "<b>Objekt(e)</b> auswählen, um den Pfad-Effekt einzufügen."
msgid "No effect on the clipboard."
msgstr "Kein Effekt in der Zwischenablage."
-#: ../src/ui/clipboard.cpp:527 ../src/ui/clipboard.cpp:554
+#: ../src/ui/clipboard.cpp:527
+#: ../src/ui/clipboard.cpp:554
msgid "Clipboard does not contain a path."
msgstr "Die Zwischenablage enthält keinen Pfad."
@@ -11238,7 +10721,8 @@ msgid "Create link"
msgstr "Verknüpfung erzeugen"
#. "Ungroup"
-#: ../src/ui/context-menu.cpp:306 ../src/verbs.cpp:2360
+#: ../src/ui/context-menu.cpp:306
+#: ../src/verbs.cpp:2360
msgid "_Ungroup"
msgstr "Grupp_ierung aufheben"
@@ -11341,8 +10825,7 @@ msgstr "Verteilen"
#: ../src/ui/dialog/align-and-distribute.cpp:466
msgid "Minimum horizontal gap (in px units) between bounding boxes"
-msgstr ""
-"Minimaler horizontaler Abstand (in px-Einheiten) zwischen Umrandungsboxen"
+msgstr "Minimaler horizontaler Abstand (in px-Einheiten) zwischen Umrandungsboxen"
#. 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
@@ -11353,8 +10836,7 @@ msgstr "H:"
#: ../src/ui/dialog/align-and-distribute.cpp:478
msgid "Minimum vertical gap (in px units) between bounding boxes"
-msgstr ""
-"Minimaler vertikaler Abstand (in px-Einheiten) zwischen Umrandungsboxen"
+msgstr "Minimaler vertikaler Abstand (in px-Einheiten) zwischen Umrandungsboxen"
#. TRANSLATORS: Vertical gap
#: ../src/ui/dialog/align-and-distribute.cpp:480
@@ -11502,12 +10984,8 @@ msgid "Unclump objects: try to equalize edge-to-edge distances"
msgstr "Objekte entklumpen: Versuche, die Zwischenabstände anzugleichen"
#: ../src/ui/dialog/align-and-distribute.cpp:889
-msgid ""
-"Move objects as little as possible so that their bounding boxes do not "
-"overlap"
-msgstr ""
-"Objekte gerade so weit bewegen, dass sich ihre Umrandungsboxen nicht mehr "
-"überlappen"
+msgid "Move objects as little as possible so that their bounding boxes do not overlap"
+msgstr "Objekte gerade so weit bewegen, dass sich ihre Umrandungsboxen nicht mehr überlappen"
#: ../src/ui/dialog/align-and-distribute.cpp:893
#: ../src/widgets/toolbox.cpp:7031
@@ -11579,11 +11057,13 @@ msgstr "_Speichern"
msgid "Messages"
msgstr "Meldungen"
-#: ../src/ui/dialog/debug.cpp:77 ../src/ui/dialog/messages.cpp:55
+#: ../src/ui/dialog/debug.cpp:77
+#: ../src/ui/dialog/messages.cpp:55
msgid "Capture log messages"
msgstr "Fehlerprotokoll mitschreiben"
-#: ../src/ui/dialog/debug.cpp:79 ../src/ui/dialog/messages.cpp:57
+#: ../src/ui/dialog/debug.cpp:79
+#: ../src/ui/dialog/messages.cpp:57
msgid "Release log messages"
msgstr "Fehlerprotokoll verwerfen"
@@ -11627,9 +11107,7 @@ msgstr "Rand_schatten anzeigen"
#: ../src/ui/dialog/document-properties.cpp:92
msgid "If set, page border shows a shadow on its right and lower side"
-msgstr ""
-"Wenn gesetzt, dann zeigt der Seitenrand einen Schatten an der rechten und "
-"unteren Seite"
+msgstr "Wenn gesetzt, dann zeigt der Seitenrand einen Schatten an der rechten und unteren Seite"
#: ../src/ui/dialog/document-properties.cpp:93
msgid "Back_ground:"
@@ -11640,11 +11118,8 @@ msgid "Background color"
msgstr "Hintergrundfarbe"
#: ../src/ui/dialog/document-properties.cpp:93
-msgid ""
-"Color and transparency of the page background (also used for bitmap export)"
-msgstr ""
-"Farbe und Transparenz der Zeichenfläche (wird auch beim Exportieren "
-"verwendet)"
+msgid "Color and transparency of the page background (also used for bitmap export)"
+msgstr "Farbe und Transparenz der Zeichenfläche (wird auch beim Exportieren verwendet)"
#: ../src/ui/dialog/document-properties.cpp:94
msgid "Border _color:"
@@ -11677,15 +11152,8 @@ msgid "_Snap guides while dragging"
msgstr "An Führungslinien während dem Ziehen _einrasten"
#: ../src/ui/dialog/document-properties.cpp:100
-msgid ""
-"While dragging a guide, snap to object nodes or bounding box corners ('Snap "
-"to nodes' or 'snap to bounding box corners' must be enabled; only a small "
-"part of the guide near the cursor will snap)"
-msgstr ""
-"Während des Ziehens einer Führungslinie rastet diese an Objekt-Knoten oder "
-"Ecken von Umrandungskästen ein (\"An Knoten einrasten\" oder \"An "
-"Umrandungsecken einrasten\" muss aktiviert sein; nur ein kleiner Teil um den "
-"Mauszeiger wird einrasten)"
+msgid "While dragging a guide, snap to object nodes or bounding box corners ('Snap to nodes' or 'snap to bounding box corners' must be enabled; only a small part of the guide near the cursor will snap)"
+msgstr "Während des Ziehens einer Führungslinie rastet diese an Objekt-Knoten oder Ecken von Umrandungskästen ein (\"An Knoten einrasten\" oder \"An Umrandungsecken einrasten\" muss aktiviert sein; nur ein kleiner Teil um den Mauszeiger wird einrasten)"
#: ../src/ui/dialog/document-properties.cpp:102
msgid "Guide co_lor:"
@@ -11741,7 +11209,8 @@ msgstr "Führungslinien"
msgid "Grids"
msgstr "Gitter"
-#: ../src/ui/dialog/document-properties.cpp:121 ../src/verbs.cpp:2587
+#: ../src/ui/dialog/document-properties.cpp:121
+#: ../src/verbs.cpp:2587
#: ../src/widgets/toolbox.cpp:2028
msgid "Snap"
msgstr "Einrasten"
@@ -11794,17 +11263,11 @@ msgstr "Einrastabstand in Bildschirmpixeln, um an Objekten einzurasten"
#: ../src/ui/dialog/document-properties.cpp:273
msgid "Always snap to objects, regardless of their distance"
-msgstr ""
-"Wenn gesetzt, dann rasten Objekte am nahesten Objekt ein, unabhängig von der "
-"Entfernung"
+msgstr "Wenn gesetzt, dann rasten Objekte am nahesten Objekt ein, unabhängig von der Entfernung"
#: ../src/ui/dialog/document-properties.cpp:274
-msgid ""
-"If set, objects only snap to another object when it's within the range "
-"specified below"
-msgstr ""
-"Nur an anderen Objekten einrasten, wenn diese innerhalb der unten "
-"definierten Reichweite sind."
+msgid "If set, objects only snap to another object when it's within the range specified below"
+msgstr "Nur an anderen Objekten einrasten, wenn diese innerhalb der unten definierten Reichweite sind."
#. Options for snapping to grids
#: ../src/ui/dialog/document-properties.cpp:278
@@ -11821,17 +11284,11 @@ msgstr "Einrastabstand in Bildschirmpixeln, um in das Gitter einzurasten"
#: ../src/ui/dialog/document-properties.cpp:279
msgid "Always snap to grids, regardless of the distance"
-msgstr ""
-"Wenn gesetzt, dann rasten Objekte an der nahesten Gitterslinie ein, "
-"unabhängig von der Entfernung"
+msgstr "Wenn gesetzt, dann rasten Objekte an der nahesten Gitterslinie ein, unabhängig von der Entfernung"
#: ../src/ui/dialog/document-properties.cpp:280
-msgid ""
-"If set, objects only snap to a grid line when it's within the range "
-"specified below"
-msgstr ""
-"Nur an Gitterlinien einrasten, wenn diese innerhalb der unten definierten "
-"Reichweite sind."
+msgid "If set, objects only snap to a grid line when it's within the range specified below"
+msgstr "Nur an Gitterlinien einrasten, wenn diese innerhalb der unten definierten Reichweite sind."
#. Options for snapping to guides
#: ../src/ui/dialog/document-properties.cpp:284
@@ -11848,17 +11305,11 @@ msgstr "Einrastabstand in Bildschirmpixeln, um an Führungslinien einzurasten"
#: ../src/ui/dialog/document-properties.cpp:285
msgid "Always snap to guides, regardless of the distance"
-msgstr ""
-"Objekte rasten immer an der nächsten Führungslinie ein, unabhängig von der "
-"Entfernung"
+msgstr "Objekte rasten immer an der nächsten Führungslinie ein, unabhängig von der Entfernung"
#: ../src/ui/dialog/document-properties.cpp:286
-msgid ""
-"If set, objects only snap to a guide when it's within the range specified "
-"below"
-msgstr ""
-"Nur an Führungslinien einrasten, wenn diese innerhalb der unten definierten "
-"Reichweite sind."
+msgid "If set, objects only snap to a guide when it's within the range specified below"
+msgstr "Nur an Führungslinien einrasten, wenn diese innerhalb der unten definierten Reichweite sind."
#: ../src/ui/dialog/document-properties.cpp:290
msgid "<b>Snap to objects</b>"
@@ -11885,7 +11336,8 @@ msgstr "Verzeichnis der Farbprofile (%s) nicht auffindbar."
#. 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:2739
msgid "Link Color Profile"
msgstr "Farb-Profil verknüpfen"
@@ -12102,16 +11554,8 @@ msgstr "_Muster der Kontur"
#. TRANSLATORS: this dialog is accessible via menu Filters - Filter editor
#: ../src/ui/dialog/filter-effects-dialog.cpp:465
-msgid ""
-"This matrix determines a linear transform on color space. Each line affects "
-"one of the color components. Each column determines how much of each color "
-"component from the input is passed to the output. The last column does not "
-"depend on input colors, so can be used to adjust a constant component value."
-msgstr ""
-"Diese Matrix definiert eine lineare Transformation im Farbraum. Jede Zeile "
-"wirkt auf eine der Farbkomponenten des Ausgangs, jede Spalte bestimmt den "
-"Einfluß der jeweiligen Eingangskomponente. Die letzte Spalte gibt einen "
-"konstanten Grundwert der Ausgangskomponenten vor. "
+msgid "This matrix determines a linear transform on color space. Each line affects one of the color components. Each column determines how much of each color component from the input is passed to the output. The last column does not depend on input colors, so can be used to adjust a constant component value."
+msgstr "Diese Matrix definiert eine lineare Transformation im Farbraum. Jede Zeile wirkt auf eine der Farbkomponenten des Ausgangs, jede Spalte bestimmt den Einfluß der jeweiligen Eingangskomponente. Die letzte Spalte gibt einen konstanten Grundwert der Ausgangskomponenten vor. "
#: ../src/ui/dialog/filter-effects-dialog.cpp:575
msgid "Image File"
@@ -12190,12 +11634,8 @@ msgid "Cone Angle"
msgstr "Konuswinkel"
#: ../src/ui/dialog/filter-effects-dialog.cpp:968
-msgid ""
-"This is the angle between the spot light axis (i.e. the axis between the "
-"light source and the point to which it is pointing at) and the spot light "
-"cone. No light is projected outside this cone."
-msgstr ""
-"Öffnungswinkel des Lichtkonus. Außerhalb des Konus gibt es kein Licht. "
+msgid "This is the angle between the spot light axis (i.e. the axis between the light source and the point to which it is pointing at) and the spot light cone. No light is projected outside this cone."
+msgstr "Öffnungswinkel des Lichtkonus. Außerhalb des Konus gibt es kein Licht. "
#: ../src/ui/dialog/filter-effects-dialog.cpp:1029
msgid "New light source"
@@ -12267,7 +11707,7 @@ msgstr "Kein Filter gewählt"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2104
msgid "Effect parameters"
-msgstr "<b>Effektparameter</b>"
+msgstr "Effektparameter"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2105
msgid "Filter General Settings"
@@ -12302,22 +11742,15 @@ msgid "Height of filter effects region"
msgstr "Höhe des Filtereffekts"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2165
-#: ../src/widgets/toolbox.cpp:3859 ../src/widgets/toolbox.cpp:4250
+#: ../src/widgets/toolbox.cpp:3859
+#: ../src/widgets/toolbox.cpp:4250
#: ../share/extensions/extrude.inx.h:4
msgid "Mode:"
msgstr "Modus:"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2168
-msgid ""
-"Indicates the type of matrix operation. The keyword 'matrix' indicates that "
-"a full 5x4 matrix of values will be provided. The other keywords represent "
-"convenience shortcuts to allow commonly used color operations to be "
-"performed without specifying a complete matrix."
-msgstr ""
-"Gibt den Typ der Matrix vor. Das Schlüsselwort \"matrix\" erzwingt eine "
-"volle 5x4-Wertematrix, während andere Schlüsselwörter bequeme Abkürzungen "
-"für oft verwendete Farboperationen bereitstellen, ohne eine komplette Matrix "
-"angeben zu müssen."
+msgid "Indicates the type of matrix operation. The keyword 'matrix' indicates that a full 5x4 matrix of values will be provided. The other keywords represent convenience shortcuts to allow commonly used color operations to be performed without specifying a complete matrix."
+msgstr "Gibt den Typ der Matrix vor. Das Schlüsselwort \"matrix\" erzwingt eine volle 5x4-Wertematrix, während andere Schlüsselwörter bequeme Abkürzungen für oft verwendete Farboperationen bereitstellen, ohne eine komplette Matrix angeben zu müssen."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2169
msgid "Value(s):"
@@ -12336,14 +11769,8 @@ msgstr "K1:"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2185
#: ../src/ui/dialog/filter-effects-dialog.cpp:2186
#: ../src/ui/dialog/filter-effects-dialog.cpp:2187
-msgid ""
-"If the arithmetic operation is chosen, each result pixel is computed using "
-"the formula k1*i1*i2 + k2*i1 + k3*i2 + k4 where i1 and i2 are the pixel "
-"values of the first and second inputs respectively."
-msgstr ""
-"Bei gewählter Arithmetischer Verknüpfung wird jeder Zielbildpunkt durch die "
-"Formel k1*i1*i2 + k2*i1 + k3*i2 + k4 berechnet, wobei i1 und i2 die Werte "
-"der Eingangsbildpunkte sind."
+msgid "If the arithmetic operation is chosen, each result pixel is computed using the formula k1*i1*i2 + k2*i1 + k3*i2 + k4 where i1 and i2 are the pixel values of the first and second inputs respectively."
+msgstr "Bei gewählter Arithmetischer Verknüpfung wird jeder Zielbildpunkt durch die Formel k1*i1*i2 + k2*i1 + k3*i2 + k4 berechnet, wobei i1 und i2 die Werte der Eingangsbildpunkte sind."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2185
msgid "K2:"
@@ -12371,20 +11798,12 @@ msgid "height of the convolve matrix"
msgstr "Höhe der Faltungsmatrix"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2191
-msgid ""
-"X coordinate of the target point in the convolve matrix. The convolution is "
-"applied to pixels around this point."
-msgstr ""
-"X-Koordinate des Zielpunktes der Faltung. Die Faltungsmatrix wirkt auf Pixel "
-"um diesen Punkt herum."
+msgid "X coordinate of the target point in the convolve matrix. The convolution is applied to pixels around this point."
+msgstr "X-Koordinate des Zielpunktes der Faltung. Die Faltungsmatrix wirkt auf Pixel um diesen Punkt herum."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2191
-msgid ""
-"Y coordinate of the target point in the convolve matrix. The convolution is "
-"applied to pixels around this point."
-msgstr ""
-"Y-Koordinate des Zielpunktes der Faltung. Die Faltungsmatrix wirkt auf Pixel "
-"um diesen Punkt herum."
+msgid "Y coordinate of the target point in the convolve matrix. The convolution is applied to pixels around this point."
+msgstr "Y-Koordinate des Zielpunktes der Faltung. Die Faltungsmatrix wirkt auf Pixel um diesen Punkt herum."
#. TRANSLATORS: for info on "Kernel", see http://en.wikipedia.org/wiki/Kernel_(matrix)
#: ../src/ui/dialog/filter-effects-dialog.cpp:2193
@@ -12392,62 +11811,32 @@ msgid "Kernel:"
msgstr "Faltungsmatrix:"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2193
-msgid ""
-"This matrix describes the convolve operation that is applied to the input "
-"image in order to calculate the pixel colors at the output. Different "
-"arrangements of values in this matrix result in various possible visual "
-"effects. An identity matrix would lead to a motion blur effect (parallel to "
-"the matrix diagonal) while a matrix filled with a constant non-zero value "
-"would lead to a common blur effect."
-msgstr ""
-"Diese Matrize beschreibt die Faltungsoperation, die auf das Eingangsbild "
-"angewendet wird, um die Pixelfarben im Ausgang zu erhalten. Verschiedene "
-"Anordnungen der Werte in der Matrix resultieren in unterschiedlichen "
-"visuellen Effekten. Die 1-Matrix ergibt einen Bewegungsunschärfe-Effekt "
-"(entlang der Richtung der Matrixdiagonalen), während eine Matrix mit "
-"konstanten Einträgen eine isotrope Unschärfe erzeugt."
+msgid "This matrix describes the convolve operation that is applied to the input image in order to calculate the pixel colors at the output. Different arrangements of values in this matrix result in various possible visual effects. An identity matrix would lead to a motion blur effect (parallel to the matrix diagonal) while a matrix filled with a constant non-zero value would lead to a common blur effect."
+msgstr "Diese Matrize beschreibt die Faltungsoperation, die auf das Eingangsbild angewendet wird, um die Pixelfarben im Ausgang zu erhalten. Verschiedene Anordnungen der Werte in der Matrix resultieren in unterschiedlichen visuellen Effekten. Die 1-Matrix ergibt einen Bewegungsunschärfe-Effekt (entlang der Richtung der Matrixdiagonalen), während eine Matrix mit konstanten Einträgen eine isotrope Unschärfe erzeugt."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2195
msgid "Divisor:"
msgstr "Teiler:"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2195
-msgid ""
-"After applying the kernelMatrix to the input image to yield a number, that "
-"number is divided by divisor to yield the final destination color value. A "
-"divisor that is the sum of all the matrix values tends to have an evening "
-"effect on the overall color intensity of the result."
-msgstr ""
-"Durch diesen Wert wird das Ergebnis der Faltung angewendet auf das "
-"Eingangsbild geteilt, um den endgültigen Farbwert des Ausgangspixels zu "
-"erhalten. Ist der Divisor die Summe der Matrixeinträge, so wird das Ergebnis "
-"eine gemittelte Farbintensität aufweisen."
+msgid "After applying the kernelMatrix to the input image to yield a number, that number is divided by divisor to yield the final destination color value. A divisor that is the sum of all the matrix values tends to have an evening effect on the overall color intensity of the result."
+msgstr "Durch diesen Wert wird das Ergebnis der Faltung angewendet auf das Eingangsbild geteilt, um den endgültigen Farbwert des Ausgangspixels zu erhalten. Ist der Divisor die Summe der Matrixeinträge, so wird das Ergebnis eine gemittelte Farbintensität aufweisen."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2196
msgid "Bias:"
msgstr "Grundwert:"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2196
-msgid ""
-"This value is added to each component. This is useful to define a constant "
-"value as the zero response of the filter."
-msgstr ""
-"Dieser Wert wird zu jeder Komponente hinzu addiert. Dies ergibt eine "
-"Grundantwort des Filters bei leerer Eingabe."
+msgid "This value is added to each component. This is useful to define a constant value as the zero response of the filter."
+msgstr "Dieser Wert wird zu jeder Komponente hinzu addiert. Dies ergibt eine Grundantwort des Filters bei leerer Eingabe."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2197
msgid "Edge Mode:"
msgstr "Kanten-Modus:"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2197
-msgid ""
-"Determines how to extend the input image as necessary with color values so "
-"that the matrix operations can be applied when the kernel is positioned at "
-"or near the edge of the input image."
-msgstr ""
-"Legt fest, wie das Eingabebild durch künstliche Farbwerte über die Ränder "
-"erweitert wird, damit die Faltungsmatrix bis an die Kanten des Originals "
-"angewendet werden kann."
+msgid "Determines how to extend the input image as necessary with color values so that the matrix operations can be applied when the kernel is positioned at or near the edge of the input image."
+msgstr "Legt fest, wie das Eingabebild durch künstliche Farbwerte über die Ränder erweitert wird, damit die Faltungsmatrix bis an die Kanten des Originals angewendet werden kann."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2198
msgid "Preserve Alpha"
@@ -12455,9 +11844,7 @@ msgstr "Alphawert beibehalten"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2198
msgid "If set, the alpha channel won't be altered by this filter primitive."
-msgstr ""
-"Wenn gesetzt, wird der Alphakanal von diesem Filterbaustein nicht "
-"beeinflusst."
+msgstr "Wenn gesetzt, wird der Alphakanal von diesem Filterbaustein nicht beeinflusst."
#. default: white
#: ../src/ui/dialog/filter-effects-dialog.cpp:2201
@@ -12476,12 +11863,8 @@ msgstr "Oberflächenskalierung:"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2202
#: ../src/ui/dialog/filter-effects-dialog.cpp:2235
-msgid ""
-"This value amplifies the heights of the bump map defined by the input alpha "
-"channel"
-msgstr ""
-"Dieser Wert multipliziert die Oberflächenstruktur, die aus dem Alphakanal "
-"der Eingabe gewonnen wird."
+msgid "This value amplifies the heights of the bump map defined by the input alpha channel"
+msgstr "Dieser Wert multipliziert die Oberflächenstruktur, die aus dem Alphakanal der Eingabe gewonnen wird."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2203
#: ../src/ui/dialog/filter-effects-dialog.cpp:2236
@@ -12590,9 +11973,7 @@ msgid "Exponent for specular term, larger is more \"shiny\"."
msgstr "Exponent bestimmt Glanzlicht, größer ist \"glänzender\""
#: ../src/ui/dialog/filter-effects-dialog.cpp:2246
-msgid ""
-"Indicates whether the filter primitive should perform a noise or turbulence "
-"function."
+msgid "Indicates whether the filter primitive should perform a noise or turbulence function."
msgstr "Zeigt an, ob der Filterbaustein Rauschen oder Turbulenz erzeugt."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2247
@@ -12616,175 +11997,68 @@ msgid "Add filter primitive"
msgstr "Filterbaustein hinzufügen"
#: ../src/ui/dialog/filter-effects-dialog.cpp:2278
-msgid ""
-"The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, "
-"multiply, darken and lighten."
-msgstr ""
-"Der <b>Mischen</b> Filterbaustein sieht 4 Bild-Misch-Modi vor: Screen, "
-"Multiplizieren, Verdunkeln und Aufhellen."
+msgid "The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, multiply, darken and lighten."
+msgstr "Der <b>Mischen</b> Filterbaustein sieht 4 Bild-Misch-Modi vor: Screen, Multiplizieren, Verdunkeln und Aufhellen."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2282
-msgid ""
-"The <b>feColorMatrix</b> filter primitive applies a matrix transformation to "
-"color of each rendered pixel. This allows for effects like turning object to "
-"grayscale, modifying color saturation and changing color hue."
-msgstr ""
-"Der Filterbaustein <b>Farbmatrix</b> wendet eine Matrix-Transformation auf "
-"die Farben der gerenderten Pixel an. Dies erlaubt Effekte wie Umwandeln in "
-"Graustufen, Modifizieren der Sättigung und Änderung des Farbwerts."
+msgid "The <b>feColorMatrix</b> filter primitive applies a matrix transformation to color of each rendered pixel. This allows for effects like turning object to grayscale, modifying color saturation and changing color hue."
+msgstr "Der Filterbaustein <b>Farbmatrix</b> wendet eine Matrix-Transformation auf die Farben der gerenderten Pixel an. Dies erlaubt Effekte wie Umwandeln in Graustufen, Modifizieren der Sättigung und Änderung des Farbwerts."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2286
-msgid ""
-"The <b>feComponentTransfer</b> filter primitive manipulates the input's "
-"color components (red, green, blue, and alpha) according to particular "
-"transfer functions, allowing operations like brightness and contrast "
-"adjustment, color balance, and thresholding."
-msgstr ""
-"Der Filterbaustein <b>Komponententransfer</b> beeinflusst die "
-"Farbkomponenten des Eingangs (rot, grün, blau und alpha) gemäß "
-"festzulegender Transferfunktionen. Dies erlaubt Operationen wie Helligkeits- "
-"und Kontrasteinstellung, Farbbalance und Schwellenwerte."
+msgid "The <b>feComponentTransfer</b> filter primitive manipulates the input's color components (red, green, blue, and alpha) according to particular transfer functions, allowing operations like brightness and contrast adjustment, color balance, and thresholding."
+msgstr "Der Filterbaustein <b>Komponententransfer</b> beeinflusst die Farbkomponenten des Eingangs (rot, grün, blau und alpha) gemäß festzulegender Transferfunktionen. Dies erlaubt Operationen wie Helligkeits- und Kontrasteinstellung, Farbbalance und Schwellenwerte."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2290
-msgid ""
-"The <b>feComposite</b> filter primitive composites two images using one of "
-"the Porter-Duff blending modes or the arithmetic mode described in SVG "
-"standard. Porter-Duff blending modes are essentially logical operations "
-"between the corresponding pixel values of the images."
-msgstr ""
-"Der Filterbaustein <b>Kombinieren</b> kombiniert zwei Bilder mittels einer "
-"der Porter-Duff-Misch-Modi oder dem arithmetischen Modus, wie sie im SVG-"
-"Standard beschrieben sind. Die Porter-Duff-Misch-Modi bestehen im "
-"Wesentlichen aus logischen Operationen zwischen den korrespondierenden Pixel-"
-"Werten der Bilder."
+msgid "The <b>feComposite</b> filter primitive composites two images using one of the Porter-Duff blending modes or the arithmetic mode described in SVG standard. Porter-Duff blending modes are essentially logical operations between the corresponding pixel values of the images."
+msgstr "Der Filterbaustein <b>Kombinieren</b> kombiniert zwei Bilder mittels einer der Porter-Duff-Misch-Modi oder dem arithmetischen Modus, wie sie im SVG-Standard beschrieben sind. Die Porter-Duff-Misch-Modi bestehen im Wesentlichen aus logischen Operationen zwischen den korrespondierenden Pixel-Werten der Bilder."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2294
-msgid ""
-"The <b>feConvolveMatrix</b> lets you specify a Convolution to be applied on "
-"the image. Common effects created using convolution matrices are blur, "
-"sharpening, embossing and edge detection. Note that while gaussian blur can "
-"be created using this filter primitive, the special gaussian blur primitive "
-"is faster and resolution-independent."
-msgstr ""
-"Bei dem Filterbaustein <b>Faltungsmatrix</b> können Sie eine Faltung "
-"spezifizieren, die auf das Bild angewendet wird. Mögliche Ergebnisse sind "
-"Weichzeichnen, Schärfen, Prägen und Kantenerkennung. Achtung: Zwar kann der "
-"gleiche Effekt wie mit dem Gaußschen Weichzeichner erreicht werden, "
-"allerdings ist der spezialisierte Effekt schneller und von der Auflösung "
-"unabhängig. "
+msgid "The <b>feConvolveMatrix</b> lets you specify a Convolution to be applied on the image. Common effects created using convolution matrices are blur, sharpening, embossing and edge detection. Note that while gaussian blur can be created using this filter primitive, the special gaussian blur primitive is faster and resolution-independent."
+msgstr "Bei dem Filterbaustein <b>Faltungsmatrix</b> können Sie eine Faltung spezifizieren, die auf das Bild angewendet wird. Mögliche Ergebnisse sind Weichzeichnen, Schärfen, Prägen und Kantenerkennung. Achtung: Zwar kann der gleiche Effekt wie mit dem Gaußschen Weichzeichner erreicht werden, allerdings ist der spezialisierte Effekt schneller und von der Auflösung unabhängig. "
#: ../src/ui/dialog/filter-effects-dialog.cpp:2298
-msgid ""
-"The <b>feDiffuseLighting</b> and feSpecularLighting filter primitives create "
-"\"embossed\" shadings. The input's alpha channel is used to provide depth "
-"information: higher opacity areas are raised toward the viewer and lower "
-"opacity areas recede away from the viewer."
-msgstr ""
-"Die Filterbausteine <b>DiffuseBeleuchtung</b> und Punktlichtbeleuchtung "
-"erzeugen \"Relief-Schattierungen\". Der Alphakanal des Eingangs wird "
-"verwendet, um Höheninformationen zu erhalten: opakere Gebiete werden "
-"angehoben, weniger opake abgesenkt."
+msgid "The <b>feDiffuseLighting</b> and feSpecularLighting filter primitives create \"embossed\" shadings. The input's alpha channel is used to provide depth information: higher opacity areas are raised toward the viewer and lower opacity areas recede away from the viewer."
+msgstr "Die Filterbausteine <b>DiffuseBeleuchtung</b> und Punktlichtbeleuchtung erzeugen \"Relief-Schattierungen\". Der Alphakanal des Eingangs wird verwendet, um Höheninformationen zu erhalten: opakere Gebiete werden angehoben, weniger opake abgesenkt."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2302
-msgid ""
-"The <b>feDisplacementMap</b> filter primitive displaces the pixels in the "
-"first input using the second input as a displacement map, that shows from "
-"how far the pixel should come from. Classical examples are whirl and pinch "
-"effects."
-msgstr ""
-"Der Filterbaustein <b>VersatzKarte</b> verschiebt die Pixel des ersten "
-"Eingangs unter Verwendung des zweiten Eingangs als Versatzkarte. Letztere "
-"definiert, woher die Pixel kommen sollen. Klassische Beispiele sind Wirbel- "
-"und Quetscheffekte."
+msgid "The <b>feDisplacementMap</b> filter primitive displaces the pixels in the first input using the second input as a displacement map, that shows from how far the pixel should come from. Classical examples are whirl and pinch effects."
+msgstr "Der Filterbaustein <b>VersatzKarte</b> verschiebt die Pixel des ersten Eingangs unter Verwendung des zweiten Eingangs als Versatzkarte. Letztere definiert, woher die Pixel kommen sollen. Klassische Beispiele sind Wirbel- und Quetscheffekte."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2306
-msgid ""
-"The <b>feFlood</b> filter primitive fills the region with a given color and "
-"opacity. It is usually used as an input to other filters to apply color to "
-"a graphic."
-msgstr ""
-"Der Filterbaustein <b>Füllung</b> füllt einen Bereich mit vorgegebener Farbe "
-"und Opazität. Normalerweise wird dies als Eingang für andere Filter "
-"verwendet, um so Farben ins Spiel zu bringen."
+msgid "The <b>feFlood</b> filter primitive fills the region with a given color and opacity. It is usually used as an input to other filters to apply color to a graphic."
+msgstr "Der Filterbaustein <b>Füllung</b> füllt einen Bereich mit vorgegebener Farbe und Opazität. Normalerweise wird dies als Eingang für andere Filter verwendet, um so Farben ins Spiel zu bringen."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2310
-msgid ""
-"The <b>feGaussianBlur</b> filter primitive uniformly blurs its input. It is "
-"commonly used together with feOffset to create a drop shadow effect."
-msgstr ""
-"Der Filterbaustein <b>Gaußscher Weichzeichner</b> zeichnet die Quelle weich. "
-"Er wird normalerweise zusammen mit dem Filterbaustein Versatz benutzt, um "
-"abgesetzte Schatten zu erzeugen."
+msgid "The <b>feGaussianBlur</b> filter primitive uniformly blurs its input. It is commonly used together with feOffset to create a drop shadow effect."
+msgstr "Der Filterbaustein <b>Gaußscher Weichzeichner</b> zeichnet die Quelle weich. Er wird normalerweise zusammen mit dem Filterbaustein Versatz benutzt, um abgesetzte Schatten zu erzeugen."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2314
-msgid ""
-"The <b>feImage</b> filter primitive fills the region with an external image "
-"or another part of the document."
-msgstr ""
-"Der Filterbaustein <b>Bild</b> füllt eine Region mit einem externen Bild "
-"oder einem anderen Teil des Dokuments."
+msgid "The <b>feImage</b> filter primitive fills the region with an external image or another part of the document."
+msgstr "Der Filterbaustein <b>Bild</b> füllt eine Region mit einem externen Bild oder einem anderen Teil des Dokuments."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2318
-msgid ""
-"The <b>feMerge</b> filter primitive composites several temporary images "
-"inside the filter primitive to a single image. It uses normal alpha "
-"compositing for this. This is equivalent to using several feBlend primitives "
-"in 'normal' mode or several feComposite primitives in 'over' mode."
-msgstr ""
-"Der Filterbaustein <b>Verschmelzen</b> führt mehrere einzelne Bilder unter "
-"Verwendung des Alphakanals zu einem einzigen zusammen. Dies ist äquivalent "
-"zu den Bausteinen Überblenden im Normalmodus oder Verbund im \"Überlagern\"-"
-"Modus."
+msgid "The <b>feMerge</b> filter primitive composites several temporary images inside the filter primitive to a single image. It uses normal alpha compositing for this. This is equivalent to using several feBlend primitives in 'normal' mode or several feComposite primitives in 'over' mode."
+msgstr "Der Filterbaustein <b>Verschmelzen</b> führt mehrere einzelne Bilder unter Verwendung des Alphakanals zu einem einzigen zusammen. Dies ist äquivalent zu den Bausteinen Überblenden im Normalmodus oder Verbund im \"Überlagern\"-Modus."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2322
-msgid ""
-"The <b>feMorphology</b> filter primitive provides erode and dilate effects. "
-"For single-color objects erode makes the object thinner and dilate makes it "
-"thicker."
-msgstr ""
-"Der Filterbaustein <b>Morphologie</b> stellt die Effekte \"Erodieren\" und "
-"\"Weiten\" zur Verfügung. Für einfarbige Objekte wirkt \"Erodieren\" "
-"ausdünnend und \"Weiten\" verdickend."
+msgid "The <b>feMorphology</b> filter primitive provides erode and dilate effects. For single-color objects erode makes the object thinner and dilate makes it thicker."
+msgstr "Der Filterbaustein <b>Morphologie</b> stellt die Effekte \"Erodieren\" und \"Weiten\" zur Verfügung. Für einfarbige Objekte wirkt \"Erodieren\" ausdünnend und \"Weiten\" verdickend."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2326
-msgid ""
-"The <b>feOffset</b> filter primitive offsets the image by an user-defined "
-"amount. For example, this is useful for drop shadows, where the shadow is in "
-"a slightly different position than the actual object."
-msgstr ""
-"Der Filterbaustein <b>Versatz</b> verschiebt das Bild um einen "
-"benutzerdefinierten Betrag. Dies ist z. B. für abgesetzte Schatten nützlich, "
-"die sich an einer leicht anderen Position als das eigentliche Objekt "
-"befinden."
+msgid "The <b>feOffset</b> filter primitive offsets the image by an user-defined amount. For example, this is useful for drop shadows, where the shadow is in a slightly different position than the actual object."
+msgstr "Der Filterbaustein <b>Versatz</b> verschiebt das Bild um einen benutzerdefinierten Betrag. Dies ist z. B. für abgesetzte Schatten nützlich, die sich an einer leicht anderen Position als das eigentliche Objekt befinden."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2330
-msgid ""
-"The feDiffuseLighting and <b>feSpecularLighting</b> filter primitives create "
-"\"embossed\" shadings. The input's alpha channel is used to provide depth "
-"information: higher opacity areas are raised toward the viewer and lower "
-"opacity areas recede away from the viewer."
-msgstr ""
-"Die Filterbausteine DiffuseBeleuchtung und <b>Punktlichtbeleuchtung</b> "
-"erzeugen \"geprägte\" Schattierungen. Der Alphakanal des Eingangs wird "
-"verwendet, um Höheninformationen zu erhalten: opakere Gebiete werden "
-"angehoben, weniger opake abgesenkt."
+msgid "The feDiffuseLighting and <b>feSpecularLighting</b> filter primitives create \"embossed\" shadings. The input's alpha channel is used to provide depth information: higher opacity areas are raised toward the viewer and lower opacity areas recede away from the viewer."
+msgstr "Die Filterbausteine DiffuseBeleuchtung und <b>Punktlichtbeleuchtung</b> erzeugen \"geprägte\" Schattierungen. Der Alphakanal des Eingangs wird verwendet, um Höheninformationen zu erhalten: opakere Gebiete werden angehoben, weniger opake abgesenkt."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2334
-msgid ""
-"The <b>feTile</b> filter primitive tiles a region with its input graphic"
-msgstr ""
-"Der Filterbaustein <b>Kacheln</b> belegt einen Bereich mit Kopien einer "
-"Graphik."
+msgid "The <b>feTile</b> filter primitive tiles a region with its input graphic"
+msgstr "Der Filterbaustein <b>Kacheln</b> belegt einen Bereich mit Kopien einer Graphik."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2338
-msgid ""
-"The <b>feTurbulence</b> filter primitive renders Perlin noise. This kind of "
-"noise is useful in simulating several nature phenomena like clouds, fire and "
-"smoke and in generating complex textures like marble or granite."
-msgstr ""
-"Der Filterbaustein <b>Turbulenz</b> zeichnet Perlin-Rauschen. Diese Art von "
-"Rauschen kann verwendet werden, um natürliche Phänomene wie Wolken, Feuer "
-"oder Rauch, sowie komplexe Texturen wie Marmor oder Granit nachzubilden."
+msgid "The <b>feTurbulence</b> filter primitive renders Perlin noise. This kind of noise is useful in simulating several nature phenomena like clouds, fire and smoke and in generating complex textures like marble or granite."
+msgstr "Der Filterbaustein <b>Turbulenz</b> zeichnet Perlin-Rauschen. Diese Art von Rauschen kann verwendet werden, um natürliche Phänomene wie Wolken, Feuer oder Rauch, sowie komplexe Texturen wie Marmor oder Granit nachzubilden."
#: ../src/ui/dialog/filter-effects-dialog.cpp:2357
msgid "Duplicate filter primitive"
@@ -12858,48 +12132,32 @@ msgid "pixels"
msgstr "Pixel"
#: ../src/ui/dialog/inkscape-preferences.cpp:172
-msgid ""
-"How close on the screen you need to be to an object to be able to grab it "
-"with mouse (in screen pixels)"
-msgstr ""
-"Mindestentfernung des Mauszeigers zu einem Objekt, um es zu erfassen (in "
-"Pixeln)"
+msgid "How close on the screen you need to be to an object to be able to grab it with mouse (in screen pixels)"
+msgstr "Mindestentfernung des Mauszeigers zu einem Objekt, um es zu erfassen (in Pixeln)"
#: ../src/ui/dialog/inkscape-preferences.cpp:174
msgid "Click/drag threshold:"
msgstr "Schwellwert für Klicken/Ziehen:"
#: ../src/ui/dialog/inkscape-preferences.cpp:175
-msgid ""
-"Maximum mouse drag (in screen pixels) which is considered a click, not a drag"
-msgstr ""
-"Maximale Bewegung des Zeigers (in Pixeln), bei der noch Klicken statt Ziehen "
-"interpretiert wird"
+msgid "Maximum mouse drag (in screen pixels) which is considered a click, not a drag"
+msgstr "Maximale Bewegung des Zeigers (in Pixeln), bei der noch Klicken statt Ziehen interpretiert wird"
#: ../src/ui/dialog/inkscape-preferences.cpp:177
msgid "Use pressure-sensitive tablet (requires restart)"
msgstr "Druckempfindliches Grafiktablett verwenden (erfordert Neustart)"
#: ../src/ui/dialog/inkscape-preferences.cpp:179
-msgid ""
-"Use the capabilities of a tablet or other pressure-sensitive device. Disable "
-"this only if you have problems with the tablet (you can still use it as a "
-"mouse)"
-msgstr ""
-"Die Möglichkeiten eines Grafiktabletts oder anderen druckempfindlichen "
-"Geräts verwenden. Schalten Sie dies nur aus, wenn Sie Probleme mit dem Gerät "
-"haben (Sie können es immer noch als Maus verwenden)."
+msgid "Use the capabilities of a tablet or other pressure-sensitive device. Disable this only if you have problems with the tablet (you can still use it as a mouse)"
+msgstr "Die Möglichkeiten eines Grafiktabletts oder anderen druckempfindlichen Geräts verwenden. Schalten Sie dies nur aus, wenn Sie Probleme mit dem Gerät haben (Sie können es immer noch als Maus verwenden)."
#: ../src/ui/dialog/inkscape-preferences.cpp:181
msgid "Switch tool based on tablet device (requires restart)"
msgstr "Wechsel Werkzeug abhängig von Tablett-Werkzeug (erfordert Neustart)"
#: ../src/ui/dialog/inkscape-preferences.cpp:183
-msgid ""
-"Change tool as different devices are used on the tablet (pen, eraser, mouse)"
-msgstr ""
-"Wechselt das Werkzeug wenn auf dem Grafiktablett ein anderes Gerät verwendet "
-"wird (Stift, Radierer, Maus)"
+msgid "Change tool as different devices are used on the tablet (pen, eraser, mouse)"
+msgstr "Wechselt das Werkzeug wenn auf dem Grafiktablett ein anderes Gerät verwendet wird (Stift, Radierer, Maus)"
#: ../src/ui/dialog/inkscape-preferences.cpp:188
msgid "Scrolling"
@@ -12910,12 +12168,8 @@ msgid "Mouse wheel scrolls by:"
msgstr "Mausrad rollt um:"
#: ../src/ui/dialog/inkscape-preferences.cpp:191
-msgid ""
-"One mouse wheel notch scrolls by this distance in screen pixels "
-"(horizontally with Shift)"
-msgstr ""
-"Eine Stufe des Maus-Rades rollt um die angegebene Distanz in Pixeln "
-"(horizontal mit Umschalttaste)"
+msgid "One mouse wheel notch scrolls by this distance in screen pixels (horizontally with Shift)"
+msgstr "Eine Stufe des Maus-Rades rollt um die angegebene Distanz in Pixeln (horizontal mit Umschalttaste)"
#: ../src/ui/dialog/inkscape-preferences.cpp:192
msgid "Ctrl+arrows"
@@ -12934,12 +12188,8 @@ msgid "Acceleration:"
msgstr "Beschleunigung:"
#: ../src/ui/dialog/inkscape-preferences.cpp:198
-msgid ""
-"Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no "
-"acceleration)"
-msgstr ""
-"Drücken von Strg+Pfeiltaste erhöht zunehmend die Rollgeschwindigkeit (0 "
-"bedeutet »keine Beschleunigung«)"
+msgid "Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no acceleration)"
+msgstr "Drücken von Strg+Pfeiltaste erhöht zunehmend die Rollgeschwindigkeit (0 bedeutet »keine Beschleunigung«)"
#: ../src/ui/dialog/inkscape-preferences.cpp:199
msgid "Autoscrolling"
@@ -12950,54 +12200,36 @@ msgid "Speed:"
msgstr "Geschwindigkeit:"
#: ../src/ui/dialog/inkscape-preferences.cpp:202
-msgid ""
-"How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn "
-"autoscroll off)"
-msgstr ""
-"Geschwindigkeit mit der die Arbeitsfläche verschoben wird, wenn der Zeiger "
-"ihren Rand überschreitet (0: Autorollen ist deaktiviert)"
+msgid "How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn autoscroll off)"
+msgstr "Geschwindigkeit mit der die Arbeitsfläche verschoben wird, wenn der Zeiger ihren Rand überschreitet (0: Autorollen ist deaktiviert)"
#: ../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:420
+#: ../src/ui/dialog/tracedialog.cpp:453
+#: ../src/ui/dialog/tracedialog.cpp:596
+#: ../src/widgets/toolbox.cpp:7185
msgid "Threshold:"
msgstr "Schwellwert:"
#: ../src/ui/dialog/inkscape-preferences.cpp:205
-msgid ""
-"How far (in screen pixels) you need to be from the canvas edge to trigger "
-"autoscroll; positive is outside the canvas, negative is within the canvas"
-msgstr ""
-"Pixelabstand des Mauszeigers zum Rand der Arbeitsfläche, bei der das "
-"Autorollen aktiv ist: positive Werte liegen außerhalb, negative Werte "
-"innerhalb der Arbeitsfläche"
+msgid "How far (in screen pixels) you need to be from the canvas edge to trigger autoscroll; positive is outside the canvas, negative is within the canvas"
+msgstr "Pixelabstand des Mauszeigers zum Rand der Arbeitsfläche, bei der das Autorollen aktiv ist: positive Werte liegen außerhalb, negative Werte innerhalb der Arbeitsfläche"
#: ../src/ui/dialog/inkscape-preferences.cpp:206
msgid "Left mouse button pans when Space is pressed"
msgstr "Die linke Maustaste verschiebt, wenn die Leertaste gedrückt ist."
#: ../src/ui/dialog/inkscape-preferences.cpp:208
-msgid ""
-"When on, pressing and holding Space and dragging with left mouse button pans "
-"canvas (as in Adobe Illustrator). When off, Space temporarily switches to "
-"Selector tool (default)."
-msgstr ""
-"Bei gedrückter Leertaste kann mit der Linke Maustaste die Dokumentenansicht "
-"verschoben werden (wie in Adobe Illustrator). Wenn dies nicht aktiviert ist "
-"kann mit der Leertaste kurzzeitig zum Auswahlwerkzeug gewechselt werden "
-"(Voreinstellung)"
+msgid "When on, pressing and holding Space and dragging with left mouse button pans canvas (as in Adobe Illustrator). When off, Space temporarily switches to Selector tool (default)."
+msgstr "Bei gedrückter Leertaste kann mit der Linke Maustaste die Dokumentenansicht verschoben werden (wie in Adobe Illustrator). Wenn dies nicht aktiviert ist kann mit der Leertaste kurzzeitig zum Auswahlwerkzeug gewechselt werden (Voreinstellung)"
#: ../src/ui/dialog/inkscape-preferences.cpp:209
msgid "Mouse wheel zooms by default"
msgstr "Standardmäßig zoomt das Mausrad"
#: ../src/ui/dialog/inkscape-preferences.cpp:211
-msgid ""
-"When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when "
-"off, it zooms with Ctrl and scrolls without Ctrl."
-msgstr ""
-"Wenn aktiviert kann mit dem Mausrad die Ansicht vergrößert/verkleinert "
-"werden. Ist dies deaktiviert benötigt man dazu Strg+Mausrad. "
+msgid "When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when off, it zooms with Ctrl and scrolls without Ctrl."
+msgstr "Wenn aktiviert kann mit dem Mausrad die Ansicht vergrößert/verkleinert werden. Ist dies deaktiviert benötigt man dazu Strg+Mausrad. "
#: ../src/ui/dialog/inkscape-preferences.cpp:217
msgid "Enable snap indicator"
@@ -13005,60 +12237,39 @@ msgstr "Einrast-Indikator aktivieren"
#: ../src/ui/dialog/inkscape-preferences.cpp:219
msgid "After snapping, a symbol is drawn at the point that has snapped"
-msgstr ""
-"Nach dem Einrasten wird ein Symbol an der Stelle, die einrastete, gezeichnet."
+msgstr "Nach dem Einrasten wird ein Symbol an der Stelle, die einrastete, gezeichnet."
#: ../src/ui/dialog/inkscape-preferences.cpp:222
msgid "Delay (in ms):"
msgstr "Verzögerung (in msec):"
#: ../src/ui/dialog/inkscape-preferences.cpp:223
-msgid ""
-"Postpone snapping as long as the mouse is moving, and then wait an "
-"additional fraction of a second. This additional delay is specified here. "
-"When set to zero or to a very small number, snapping will be immediate."
-msgstr ""
-"Unterdrückt das Einrasten, so lange sich die Maus bewegt plus einen "
-"zusätzlichen Sekundenbruchteil. Diese additive Verzögerung wird hier "
-"festgelegt. Ist sie sehr klein, passiert das Einrasten sofort."
+msgid "Postpone snapping as long as the mouse is moving, and then wait an additional fraction of a second. This additional delay is specified here. When set to zero or to a very small number, snapping will be immediate."
+msgstr "Unterdrückt das Einrasten, so lange sich die Maus bewegt plus einen zusätzlichen Sekundenbruchteil. Diese additive Verzögerung wird hier festgelegt. Ist sie sehr klein, passiert das Einrasten sofort."
#: ../src/ui/dialog/inkscape-preferences.cpp:225
msgid "Only snap the node closest to the pointer"
msgstr "Nur an dem Knoten einrasten, der dem Zeiger am nähesten ist."
#: ../src/ui/dialog/inkscape-preferences.cpp:227
-msgid ""
-"Only try to snap the node that is initially closest to the mouse pointer"
-msgstr ""
-"Nur versuchen an dem Knoten einzurasten, der dem Mauszeiger zu Beginn am "
-"nächsten ist."
+msgid "Only try to snap the node that is initially closest to the mouse pointer"
+msgstr "Nur versuchen an dem Knoten einzurasten, der dem Mauszeiger zu Beginn am nächsten ist."
#: ../src/ui/dialog/inkscape-preferences.cpp:230
msgid "Weight factor:"
msgstr "Gewichtsfaktor:"
#: ../src/ui/dialog/inkscape-preferences.cpp:231
-msgid ""
-"When multiple snap solutions are found, then Inkscape can either prefer the "
-"closest transformation (when set to 0), or prefer the node that was "
-"initially the closest to the pointer (when set to 1)"
-msgstr ""
-"Wurden mehrere Einrastmöglichkeiten gefunden, kann Inkscape die näheste "
-"Transformation anwenden (wenn auf 0 gesetzt) oder am Knoten, der dem "
-"Mauszeiger am nähesten ist (wenn auf 1 gesetzt) einrasten."
+msgid "When multiple snap solutions are found, then Inkscape can either prefer the closest transformation (when set to 0), or prefer the node that was initially the closest to the pointer (when set to 1)"
+msgstr "Wurden mehrere Einrastmöglichkeiten gefunden, kann Inkscape die näheste Transformation anwenden (wenn auf 0 gesetzt) oder am Knoten, der dem Mauszeiger am nähesten ist (wenn auf 1 gesetzt) einrasten."
#: ../src/ui/dialog/inkscape-preferences.cpp:233
msgid "Snap the mouse pointer when dragging a constrained knot"
msgstr "Rastet den Mauszeiger ein, wenn ein festgesetzter Knoten gezogen wird."
#: ../src/ui/dialog/inkscape-preferences.cpp:235
-msgid ""
-"When dragging a knot along a constraint line, then snap the position of the "
-"mouse pointer instead of snapping the projection of the knot onto the "
-"constraint line"
-msgstr ""
-"Wird ein Knoten entlang einer festgesetzten Linie gezogen, dann rastet der "
-"Mauszeiger statt der Projektion des Knotens auf der Linie ein."
+msgid "When dragging a knot along a constraint line, then snap the position of the mouse pointer instead of snapping the projection of the knot onto the constraint line"
+msgstr "Wird ein Knoten entlang einer festgesetzten Linie gezogen, dann rastet der Mauszeiger statt der Projektion des Knotens auf der Linie ein."
#: ../src/ui/dialog/inkscape-preferences.cpp:237
msgid "Snapping"
@@ -13070,12 +12281,8 @@ msgid "Arrow keys move by:"
msgstr "Pfeiltasten bewegen um:"
#: ../src/ui/dialog/inkscape-preferences.cpp:247
-msgid ""
-"Pressing an arrow key moves selected object(s) or node(s) by this distance "
-"(in px units)"
-msgstr ""
-"Drücken einer Pfeiltaste verschiebt die ausgewählten Elemente (Objekte oder "
-"Knoten) um diese Entfernung (in SVG-Pixeln)"
+msgid "Pressing an arrow key moves selected object(s) or node(s) by this distance (in px units)"
+msgstr "Drücken einer Pfeiltaste verschiebt die ausgewählten Elemente (Objekte oder Knoten) um diese Entfernung (in SVG-Pixeln)"
#. defaultscale is limited to 1000 in select-context.cpp: use the same limit here
#: ../src/ui/dialog/inkscape-preferences.cpp:250
@@ -13083,36 +12290,24 @@ msgid "> and < scale by:"
msgstr "> und < skalieren um:"
#: ../src/ui/dialog/inkscape-preferences.cpp:251
-msgid ""
-"Pressing > or < scales selection up or down by this increment (in px units)"
-msgstr ""
-"Drücken von > oder < skaliert die ausgewählten Elemente um diesen Wert "
-"größer oder kleiner (in SVG-Pixeln) "
+msgid "Pressing > or < scales selection up or down by this increment (in px units)"
+msgstr "Drücken von > oder < skaliert die ausgewählten Elemente um diesen Wert größer oder kleiner (in SVG-Pixeln) "
#: ../src/ui/dialog/inkscape-preferences.cpp:253
msgid "Inset/Outset by:"
msgstr "Schrumpfen/Erweitern um:"
#: ../src/ui/dialog/inkscape-preferences.cpp:254
-msgid ""
-"Inset and Outset commands displace the path by this distance (in px units)"
-msgstr ""
-"Schrumpfungs- und Erweiterungsbefehle verändern den Pfad um diese Distanz "
-"(in SVG-Pixeln)"
+msgid "Inset and Outset commands displace the path by this distance (in px units)"
+msgstr "Schrumpfungs- und Erweiterungsbefehle verändern den Pfad um diese Distanz (in SVG-Pixeln)"
#: ../src/ui/dialog/inkscape-preferences.cpp:255
msgid "Compass-like display of angles"
msgstr "Anzeige von Winkeln wie bei einem Kompaß"
#: ../src/ui/dialog/inkscape-preferences.cpp:257
-msgid ""
-"When on, angles are displayed with 0 at north, 0 to 360 range, positive "
-"clockwise; otherwise with 0 at east, -180 to 180 range, positive "
-"counterclockwise"
-msgstr ""
-"Aktiviert bedeutet, dass Winkel mit 0 für Norden dargestellt werden, Bereich "
-"0 bis 360, positiv im Uhrzeigersinn; anderenfalls mit 0 für Osten, Bereich -"
-"180 bis 180, positiv entgegen dem Uhrzeigersinn"
+msgid "When on, angles are displayed with 0 at north, 0 to 360 range, positive clockwise; otherwise with 0 at east, -180 to 180 range, positive counterclockwise"
+msgstr "Aktiviert bedeutet, dass Winkel mit 0 für Norden dargestellt werden, Bereich 0 bis 360, positiv im Uhrzeigersinn; anderenfalls mit 0 für Osten, Bereich -180 bis 180, positiv entgegen dem Uhrzeigersinn"
# !!! need %s
#: ../src/ui/dialog/inkscape-preferences.cpp:263
@@ -13124,24 +12319,16 @@ msgid "degrees"
msgstr "Grad"
#: ../src/ui/dialog/inkscape-preferences.cpp:264
-msgid ""
-"Rotating with Ctrl pressed snaps every that much degrees; also, pressing "
-"[ or ] rotates by this amount"
-msgstr ""
-"Rotation mit gedrückter Strg-Taste lässt das Objekt mit dieser Gradrastung "
-"einrasten; die Tasten [ oder ] haben den gleichen Effekt"
+msgid "Rotating with Ctrl pressed snaps every that much degrees; also, pressing [ or ] rotates by this amount"
+msgstr "Rotation mit gedrückter Strg-Taste lässt das Objekt mit dieser Gradrastung einrasten; die Tasten [ oder ] haben den gleichen Effekt"
#: ../src/ui/dialog/inkscape-preferences.cpp:266
msgid "Zoom in/out by:"
msgstr "Zoomfaktor vergrößern/verkleinern um:"
#: ../src/ui/dialog/inkscape-preferences.cpp:267
-msgid ""
-"Zoom tool click, +/- keys, and middle click zoom in and out by this "
-"multiplier"
-msgstr ""
-"Mit dem Zoomwerkzeug klicken, die + oder - Taste drücken, oder die mittlere "
-"Maustaste betätigen, damit sich die Zoomgröße um diesen Faktor ändert"
+msgid "Zoom tool click, +/- keys, and middle click zoom in and out by this multiplier"
+msgstr "Mit dem Zoomwerkzeug klicken, die + oder - Taste drücken, oder die mittlere Maustaste betätigen, damit sich die Zoomgröße um diesen Faktor ändert"
#: ../src/ui/dialog/inkscape-preferences.cpp:273
msgid "Show selection cue"
@@ -13149,11 +12336,8 @@ msgstr "Auswahlmarkierung anzeigen"
# !!! Frage? Passiv formulieren?
#: ../src/ui/dialog/inkscape-preferences.cpp:274
-msgid ""
-"Whether selected objects display a selection cue (the same as in selector)"
-msgstr ""
-"Sind die ausgewählten Objekte visuell hervorgehoben (wie beim "
-"Auswahlwerkzeug) "
+msgid "Whether selected objects display a selection cue (the same as in selector)"
+msgstr "Sind die ausgewählten Objekte visuell hervorgehoben (wie beim Auswahlwerkzeug) "
#: ../src/ui/dialog/inkscape-preferences.cpp:280
msgid "Enable gradient editing"
@@ -13168,12 +12352,8 @@ msgid "Conversion to guides uses edges instead of bounding box"
msgstr "Umwandlung zu Führungslinien nutzt Ecken anstelle von Umrandungsboxen"
#: ../src/ui/dialog/inkscape-preferences.cpp:287
-msgid ""
-"Converting an object to guides places these along the object's true edges "
-"(imitating the object's shape), not along the bounding box."
-msgstr ""
-"Wird ein Objekt zu Führungslinien umgewandelt, so gelten die tatsächlichen "
-"Umrisse des Objekts, nicht die rechteckige Umrandung."
+msgid "Converting an object to guides places these along the object's true edges (imitating the object's shape), not along the bounding box."
+msgstr "Wird ein Objekt zu Führungslinien umgewandelt, so gelten die tatsächlichen Umrisse des Objekts, nicht die rechteckige Umrandung."
#: ../src/ui/dialog/inkscape-preferences.cpp:294
msgid "Ctrl+click dot size:"
@@ -13185,21 +12365,15 @@ msgstr "(Faktor zur Kontur)"
#: ../src/ui/dialog/inkscape-preferences.cpp:295
msgid "Size of dots created with Ctrl+click (relative to current stroke width)"
-msgstr ""
-"Größe der Punkte, die durch Strg+Klick erzeugt werden (Relativ zur aktuellen "
-"Strichdicke)"
+msgstr "Größe der Punkte, die durch Strg+Klick erzeugt werden (Relativ zur aktuellen Strichdicke)"
#: ../src/ui/dialog/inkscape-preferences.cpp:310
msgid "<b>No objects selected</b> to take the style from."
msgstr "<b>Objekte auswählen</b>, um Stil zu übernehmen."
#: ../src/ui/dialog/inkscape-preferences.cpp:319
-msgid ""
-"<b>More than one object selected.</b> Cannot take style from multiple "
-"objects."
-msgstr ""
-"<b>Mehr als ein Objekt ausgewählt.</b> Ein Stil kann nicht von mehreren "
-"Objekten übernommen werden."
+msgid "<b>More than one object selected.</b> Cannot take style from multiple objects."
+msgstr "<b>Mehr als ein Objekt ausgewählt.</b> Ein Stil kann nicht von mehreren Objekten übernommen werden."
#: ../src/ui/dialog/inkscape-preferences.cpp:352
msgid "Create new objects with:"
@@ -13218,12 +12392,8 @@ msgid "This tool's own style:"
msgstr "Stilvorgaben für dieses Werkzeug:"
#: ../src/ui/dialog/inkscape-preferences.cpp:365
-msgid ""
-"Each tool may store its own style to apply to the newly created objects. Use "
-"the button below to set it."
-msgstr ""
-"Werkzeuge können eigene Stilvorgaben behalten, die auf neu erzeugte Objekte "
-"angewendet werden. Stilvorgabe mit dem unteren Knopf festlegen."
+msgid "Each tool may store its own style to apply to the newly created objects. Use the button below to set it."
+msgstr "Werkzeuge können eigene Stilvorgaben behalten, die auf neu erzeugte Objekte angewendet werden. Stilvorgabe mit dem unteren Knopf festlegen."
#. style swatch
#: ../src/ui/dialog/inkscape-preferences.cpp:369
@@ -13236,9 +12406,7 @@ msgstr "Stilvorgaben für dieses Werkzeug für neue Objekte:"
#: ../src/ui/dialog/inkscape-preferences.cpp:381
msgid "Remember the style of the (first) selected object as this tool's style"
-msgstr ""
-"Stil des (ersten) ausgewählten Objektes zur Vorgabe für dieses Werkzeug "
-"machen"
+msgstr "Stil des (ersten) ausgewählten Objektes zur Vorgabe für dieses Werkzeug machen"
#: ../src/ui/dialog/inkscape-preferences.cpp:386
msgid "Tools"
@@ -13254,9 +12422,7 @@ msgstr "Visuelle Umrandungsbox"
#: ../src/ui/dialog/inkscape-preferences.cpp:392
msgid "This bounding box includes stroke width, markers, filter margins, etc."
-msgstr ""
-"Diese Umrandungsbox berücksichtigt Strichbreiten, Markierungen, Filterränder "
-"usw."
+msgstr "Diese Umrandungsbox berücksichtigt Strichbreiten, Markierungen, Filterränder usw."
#: ../src/ui/dialog/inkscape-preferences.cpp:393
msgid "Geometric bounding box"
@@ -13275,9 +12441,7 @@ msgid "Keep objects after conversion to guides"
msgstr "Behalte Objekte nach Umwandlung in Führungslinien"
#: ../src/ui/dialog/inkscape-preferences.cpp:400
-msgid ""
-"When converting an object to guides, don't delete the object after the "
-"conversion."
+msgid "When converting an object to guides, don't delete the object after the conversion."
msgstr "Objekt bleibt erhalten, wenn es in Führungslinien umgewandelt wird."
#: ../src/ui/dialog/inkscape-preferences.cpp:401
@@ -13285,12 +12449,8 @@ msgid "Treat groups as a single object"
msgstr "Behandle Gruppen als Einzelobjekte"
#: ../src/ui/dialog/inkscape-preferences.cpp:403
-msgid ""
-"Treat groups as a single object during conversion to guides rather than "
-"converting each child separately."
-msgstr ""
-"Gruppen werden als Ganzes (statt der Einzelteile) zu Führungslinien "
-"umgewandelt."
+msgid "Treat groups as a single object during conversion to guides rather than converting each child separately."
+msgstr "Gruppen werden als Ganzes (statt der Einzelteile) zu Führungslinien umgewandelt."
#: ../src/ui/dialog/inkscape-preferences.cpp:405
msgid "Average all sketches"
@@ -13347,9 +12507,7 @@ msgstr "Markierung"
#: ../src/ui/dialog/inkscape-preferences.cpp:427
msgid "Each selected object has a diamond mark in the top left corner"
-msgstr ""
-"Jedes ausgewählte Objekt hat eine diamantförmige Markierung in der linken "
-"oberen Ecke"
+msgstr "Jedes ausgewählte Objekt hat eine diamantförmige Markierung in der linken oberen Ecke"
#: ../src/ui/dialog/inkscape-preferences.cpp:428
msgid "Box"
@@ -13357,8 +12515,7 @@ msgstr "Umschließendes Rechteck"
#: ../src/ui/dialog/inkscape-preferences.cpp:430
msgid "Each selected object displays its bounding box"
-msgstr ""
-"Jedes gewählte Objekt zeigt sein umschließendes Rechteck (Umrandungsbox)"
+msgstr "Jedes gewählte Objekt zeigt sein umschließendes Rechteck (Umrandungsbox)"
#. Node
#: ../src/ui/dialog/inkscape-preferences.cpp:433
@@ -13384,9 +12541,7 @@ msgstr "Entwurf bei Mausberührung anzeigen"
#: ../src/ui/dialog/inkscape-preferences.cpp:440
msgid "When hovering over a path, briefly flash its outline."
-msgstr ""
-"Wenn die Maus über den Pfad bewegt wird, wird dessen Entwurfspfad kurz "
-"angezeigt."
+msgstr "Wenn die Maus über den Pfad bewegt wird, wird dessen Entwurfspfad kurz angezeigt."
#: ../src/ui/dialog/inkscape-preferences.cpp:441
msgid "Suppress path outline flash when one path selected"
@@ -13394,24 +12549,19 @@ msgstr "Pfad-Hervorhebung wird unterdrückt, wenn nur ein Pfad gewählt ist."
#: ../src/ui/dialog/inkscape-preferences.cpp:442
msgid "If a path is selected, do not continue flashing path outlines."
-msgstr ""
-"Wird ein Pfad selektiert, so wird die Hervorhebung des Umrisses beendet."
+msgstr "Wird ein Pfad selektiert, so wird die Hervorhebung des Umrisses beendet."
#: ../src/ui/dialog/inkscape-preferences.cpp:444
msgid "Flash time"
msgstr "Anzeigedauer"
#: ../src/ui/dialog/inkscape-preferences.cpp:444
-msgid ""
-"Specifies how long the path outline will be visible after a mouse-over (in "
-"milliseconds). Specify 0 to have the outline shown until mouse leaves the "
-"path."
-msgstr ""
-"Bestimmt die Dauer der Pfad anzeige (in Millisekunden). Bei 0 wird der "
-"Entwurfspfad angezeigt bis die Maus den Bereich verlassen hat."
+msgid "Specifies how long the path outline will be visible after a mouse-over (in milliseconds). Specify 0 to have the outline shown until mouse leaves the path."
+msgstr "Bestimmt die Dauer der Pfad anzeige (in Millisekunden). Bei 0 wird der Entwurfspfad angezeigt bis die Maus den Bereich verlassen hat."
#. Tweak
-#: ../src/ui/dialog/inkscape-preferences.cpp:447 ../src/verbs.cpp:2504
+#: ../src/ui/dialog/inkscape-preferences.cpp:447
+#: ../src/verbs.cpp:2504
msgid "Tweak"
msgstr "Modellieren"
@@ -13421,7 +12571,8 @@ msgstr "Objekte erstellen mit:"
#. Zoom
#: ../src/ui/dialog/inkscape-preferences.cpp:453
-#: ../src/ui/view/edit-widget.cpp:1062 ../src/verbs.cpp:2526
+#: ../src/ui/view/edit-widget.cpp:1062
+#: ../src/verbs.cpp:2526
#: ../src/widgets/desktop-widget.cpp:483
msgid "Zoom"
msgstr "Zoomfaktor"
@@ -13436,74 +12587,67 @@ msgid "Sketch mode"
msgstr "Freihandmodus"
#: ../src/ui/dialog/inkscape-preferences.cpp:492
-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 ""
-"Wenn gewählt, dann ist das Resultat das Mittel aus allen Skizzen, statt das "
-"alte Ergebnis mit der neuen Skizze zu mitteln."
+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 "Wenn gewählt, dann ist das Resultat das Mittel aus allen Skizzen, statt das alte Ergebnis mit der neuen Skizze zu mitteln."
#. Pen
-#: ../src/ui/dialog/inkscape-preferences.cpp:495 ../src/verbs.cpp:2518
+#: ../src/ui/dialog/inkscape-preferences.cpp:495
+#: ../src/verbs.cpp:2518
msgid "Pen"
msgstr "Füller (Linien & Bézierkurven)"
#. Calligraphy
-#: ../src/ui/dialog/inkscape-preferences.cpp:501 ../src/verbs.cpp:2520
+#: ../src/ui/dialog/inkscape-preferences.cpp:501
+#: ../src/verbs.cpp:2520
msgid "Calligraphy"
msgstr "Kalligrafie"
#: ../src/ui/dialog/inkscape-preferences.cpp:505
-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 ""
-"Wenn eingeschaltet, dann ist die Stiftbreite in absoluten Einheiten (px) "
-"unabhängig vom Zoom; ansonsten hängt die Stiftbreite vom Zoom ab, so dass "
-"sie bei jeder Zoomeinstellung gleich aussieht"
+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 "Wenn eingeschaltet, dann ist die Stiftbreite in absoluten Einheiten (px) unabhängig vom Zoom; ansonsten hängt die Stiftbreite vom Zoom ab, so dass sie bei jeder Zoomeinstellung gleich aussieht"
#: ../src/ui/dialog/inkscape-preferences.cpp:507
-msgid ""
-"If on, each newly created object will be selected (deselecting previous "
-"selection)"
-msgstr ""
-"Wenn eingeschaltet, dann wird jedes neu erzeugte Objekt ausgewählt "
-"(vorherige Auswahl ist nicht mehr aktiv)"
+msgid "If on, each newly created object will be selected (deselecting previous selection)"
+msgstr "Wenn eingeschaltet, dann wird jedes neu erzeugte Objekt ausgewählt (vorherige Auswahl ist nicht mehr aktiv)"
#. Paint Bucket
-#: ../src/ui/dialog/inkscape-preferences.cpp:509 ../src/verbs.cpp:2532
+#: ../src/ui/dialog/inkscape-preferences.cpp:509
+#: ../src/verbs.cpp:2532
msgid "Paint Bucket"
msgstr "Farbeimer"
# Name des Effekte-submenü, das alle Bitmap-Effekte beinhaltet.
#. Eraser
-#: ../src/ui/dialog/inkscape-preferences.cpp:514 ../src/verbs.cpp:2536
+#: ../src/ui/dialog/inkscape-preferences.cpp:514
+#: ../src/verbs.cpp:2536
msgid "Eraser"
msgstr "Radierer"
#. LPETool
-#: ../src/ui/dialog/inkscape-preferences.cpp:518 ../src/verbs.cpp:2538
+#: ../src/ui/dialog/inkscape-preferences.cpp:518
+#: ../src/verbs.cpp:2538
msgid "LPE Tool"
msgstr "LPE-Werkzeug"
#. Gradient
-#: ../src/ui/dialog/inkscape-preferences.cpp:528 ../src/verbs.cpp:2524
+#: ../src/ui/dialog/inkscape-preferences.cpp:528
+#: ../src/verbs.cpp:2524
msgid "Gradient"
msgstr "Farbverlauf"
#. Connector
-#: ../src/ui/dialog/inkscape-preferences.cpp:532 ../src/verbs.cpp:2530
+#: ../src/ui/dialog/inkscape-preferences.cpp:532
+#: ../src/verbs.cpp:2530
msgid "Connector"
msgstr "Objektverbinder"
#: ../src/ui/dialog/inkscape-preferences.cpp:535
msgid "If on, connector attachment points will not be shown for text objects"
-msgstr ""
-"Wenn eingeschaltet, dann werden die Einrastpunkte nicht für Textobjekte "
-"angezeigt"
+msgstr "Wenn eingeschaltet, dann werden die Einrastpunkte nicht für Textobjekte angezeigt"
#. Dropper
-#: ../src/ui/dialog/inkscape-preferences.cpp:537 ../src/verbs.cpp:2528
+#: ../src/ui/dialog/inkscape-preferences.cpp:537
+#: ../src/verbs.cpp:2528
msgid "Dropper"
msgstr "Farbpipette"
@@ -13553,20 +12697,12 @@ msgid "Let the window manager determine placement of all windows"
msgstr "Dem Fenstermanager die Platzierung aller Fenster entscheiden lassen"
#: ../src/ui/dialog/inkscape-preferences.cpp:562
-msgid ""
-"Remember and use the last window's geometry (saves geometry to user "
-"preferences)"
-msgstr ""
-"Geometrie des letzten Fensters merken und verwenden (speichert Geometrie in "
-"Benutzereinstellungen)"
+msgid "Remember and use the last window's geometry (saves geometry to user preferences)"
+msgstr "Geometrie des letzten Fensters merken und verwenden (speichert Geometrie in Benutzereinstellungen)"
#: ../src/ui/dialog/inkscape-preferences.cpp:564
-msgid ""
-"Save and restore window geometry for each document (saves geometry in the "
-"document)"
-msgstr ""
-"Fenstergeometrie für jedes Dokument speichern und wiederherstellen "
-"(speichert Geometrie im Dokument)"
+msgid "Save and restore window geometry for each document (saves geometry in the document)"
+msgstr "Fenstergeometrie für jedes Dokument speichern und wiederherstellen (speichert Geometrie im Dokument)"
#: ../src/ui/dialog/inkscape-preferences.cpp:566
msgid "Dialog behavior (requires restart):"
@@ -13586,8 +12722,7 @@ msgstr "Dialoge bleiben vor Dokumentenfenstern"
#: ../src/ui/dialog/inkscape-preferences.cpp:580
msgid "Same as Normal but may work better with some window managers"
-msgstr ""
-"Wie »Normal«, aber funktioniert evtl. besser mit manchen Fenstermanagern"
+msgstr "Wie »Normal«, aber funktioniert evtl. besser mit manchen Fenstermanagern"
#: ../src/ui/dialog/inkscape-preferences.cpp:584
msgid "Dialog Transparency:"
@@ -13614,14 +12749,8 @@ msgid "Whether dialog windows are to be hidden in the window manager taskbar"
msgstr "Sollen Dialogfenster in der Fensterliste nicht angezeigt werden?"
#: ../src/ui/dialog/inkscape-preferences.cpp:599
-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 ""
-"Darstellungsgröße des Dokuments anpassen, wenn sich die Fenstergröße ändert "
-"- der selbe Bereich bleibt sichtbar (Vorgabe, die in jedem Fenster mit dem "
-"Knopf über dem rechten Rollbalken geändert wird)"
+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 "Darstellungsgröße des Dokuments anpassen, wenn sich die Fenstergröße ändert - der selbe Bereich bleibt sichtbar (Vorgabe, die in jedem Fenster mit dem Knopf über dem rechten Rollbalken geändert wird)"
#: ../src/ui/dialog/inkscape-preferences.cpp:601
msgid "Whether dialog windows have a close button (requires restart)"
@@ -13661,18 +12790,11 @@ msgstr "Klone werden mit demselben Vektor wie das Original verschoben."
#: ../src/ui/dialog/inkscape-preferences.cpp:622
msgid "Clones preserve their positions when their original is moved."
-msgstr ""
-"Klone bleiben an ihren Positionen, während das Original verschoben wird."
+msgstr "Klone bleiben an ihren Positionen, während das Original verschoben wird."
#: ../src/ui/dialog/inkscape-preferences.cpp:624
-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 ""
-"Jeder Klon verschiebt sich entsprechend des Wertes seines transform=-"
-"Attributs. Ein rotierter Klon wird sich zum Beispiel in eine andere Richtung "
-"als das Original drehen."
+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 "Jeder Klon verschiebt sich entsprechend des Wertes seines transform=-Attributs. Ein rotierter Klon wird sich zum Beispiel in eine andere Richtung als das Original drehen."
#: ../src/ui/dialog/inkscape-preferences.cpp:625
msgid "When the original is deleted, its clones:"
@@ -13695,14 +12817,8 @@ msgid "Relink duplicated clones"
msgstr "Duplizierte Klone neu verbinden"
#: ../src/ui/dialog/inkscape-preferences.cpp:635
-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 ""
-"Wenn eine Auswahl kopiert wird in der Klone und dessen Originale enthalten "
-"sind verbinde die kopierten Klone mit den kopierten Originalen anstatt mit "
-"den alten Originalen."
+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 "Wenn eine Auswahl kopiert wird in der Klone und dessen Originale enthalten sind verbinde die kopierten Klone mit den kopierten Originalen anstatt mit den alten Originalen."
#. TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page
#: ../src/ui/dialog/inkscape-preferences.cpp:638
@@ -13711,28 +12827,19 @@ msgstr "Klone"
#: ../src/ui/dialog/inkscape-preferences.cpp:643
msgid "When applying, use the topmost selected object as clippath/mask"
-msgstr ""
-"Verwende das oberste ausgewählte Objekt beim Anwenden als Ausschneidepfad "
-"oder Maskierung"
+msgstr "Verwende das oberste ausgewählte Objekt beim Anwenden als Ausschneidepfad oder Maskierung"
#: ../src/ui/dialog/inkscape-preferences.cpp:645
-msgid ""
-"Uncheck this to use the bottom selected object as the clipping path or mask"
-msgstr ""
-"Nicht auswählen, um das unterste ausgewählte Objekt als Ausschneidepfad oder "
-"Maskierung zu verwenden"
+msgid "Uncheck this to use the bottom selected object as the clipping path or mask"
+msgstr "Nicht auswählen, um das unterste ausgewählte Objekt als Ausschneidepfad oder Maskierung zu verwenden"
#: ../src/ui/dialog/inkscape-preferences.cpp:646
msgid "Remove clippath/mask object after applying"
msgstr "Ausschneidepfad oder Maskierungsobjekt nach dem Anwenden entfernen"
#: ../src/ui/dialog/inkscape-preferences.cpp:648
-msgid ""
-"After applying, remove the object used as the clipping path or mask from the "
-"drawing"
-msgstr ""
-"Entferne das Objekt von der Zeichnung, welches als Ausschneidepfad oder "
-"Maskierung verwendet wird, nach dem Anwenden"
+msgid "After applying, remove the object used as the clipping path or mask from the drawing"
+msgstr "Entferne das Objekt von der Zeichnung, welches als Ausschneidepfad oder Maskierung verwendet wird, nach dem Anwenden"
#: ../src/ui/dialog/inkscape-preferences.cpp:649
msgid "Clippaths and masks"
@@ -13766,41 +12873,30 @@ msgstr "Beibehalten"
#: ../src/ui/dialog/inkscape-preferences.cpp:662
#: ../src/widgets/select-toolbar.cpp:545
msgid "When scaling objects, scale the stroke width by the same proportion"
-msgstr ""
-"Wenn Objekte skaliert werden, dann wird die Breite der Kontur ebenso "
-"skaliert."
+msgstr "Wenn Objekte skaliert werden, dann wird die Breite der Kontur ebenso skaliert."
#: ../src/ui/dialog/inkscape-preferences.cpp:664
#: ../src/widgets/select-toolbar.cpp:556
msgid "When scaling rectangles, scale the radii of rounded corners"
-msgstr ""
-"Wenn Rechtecke skaliert werden, dann werden die Radien von abgerundeten "
-"Ecken ebenso mitskaliert."
+msgstr "Wenn Rechtecke skaliert werden, dann werden die Radien von abgerundeten Ecken ebenso mitskaliert."
#: ../src/ui/dialog/inkscape-preferences.cpp:666
#: ../src/widgets/select-toolbar.cpp:567
msgid "Move gradients (in fill or stroke) along with the objects"
-msgstr ""
-"Farbverläufe (in Füllung oder Konturen) zusammen mit den Objekten "
-"transformieren"
+msgstr "Farbverläufe (in Füllung oder Konturen) zusammen mit den Objekten transformieren"
#: ../src/ui/dialog/inkscape-preferences.cpp:668
#: ../src/widgets/select-toolbar.cpp:578
msgid "Move patterns (in fill or stroke) along with the objects"
-msgstr ""
-"Muster (in Füllung oder Konturen) zusammen mit den Objekten transformieren"
+msgstr "Muster (in Füllung oder Konturen) zusammen mit den Objekten transformieren"
#: ../src/ui/dialog/inkscape-preferences.cpp:669
msgid "Store transformation:"
msgstr "Transformation speichern:"
#: ../src/ui/dialog/inkscape-preferences.cpp:671
-msgid ""
-"If possible, apply transformation to objects without adding a transform= "
-"attribute"
-msgstr ""
-"Wenn möglich, dann werden Transformationen auf Objekte angewendet, ohne ein "
-"transform=-Attribut hinzuzufügen."
+msgid "If possible, apply transformation to objects without adding a transform= attribute"
+msgstr "Wenn möglich, dann werden Transformationen auf Objekte angewendet, ohne ein transform=-Attribut hinzuzufügen."
#: ../src/ui/dialog/inkscape-preferences.cpp:673
msgid "Always store transformation as a transform= attribute on objects"
@@ -13843,12 +12939,8 @@ msgstr "Anzeige Qualität des Gaußschen Weichzeichners:"
#: ../src/ui/dialog/inkscape-preferences.cpp:694
#: ../src/ui/dialog/inkscape-preferences.cpp:718
-msgid ""
-"Best quality, but display may be very slow at high zooms (bitmap export "
-"always uses best quality)"
-msgstr ""
-"Beste Qualität, aber die Anzeige kann bei hohen Zoomstufen sehr langsam sein "
-"(Bitmap-Export verwendet immer diese Einstellung)"
+msgid "Best quality, but display may be very slow at high zooms (bitmap export always uses best quality)"
+msgstr "Beste Qualität, aber die Anzeige kann bei hohen Zoomstufen sehr langsam sein (Bitmap-Export verwendet immer diese Einstellung)"
#: ../src/ui/dialog/inkscape-preferences.cpp:696
#: ../src/ui/dialog/inkscape-preferences.cpp:720
@@ -13880,12 +12972,8 @@ msgid "Show filter primitives infobox"
msgstr "Zeigt Informationen zu den Filterbausteinen"
#: ../src/ui/dialog/inkscape-preferences.cpp:731
-msgid ""
-"Show icons and descriptions for the filter primitives available at the "
-"filter effects dialog."
-msgstr ""
-"Zeigt Symbole und Beschreibungen für die verfügbaren Filterbausteine im "
-"Filtereffektdialog."
+msgid "Show icons and descriptions for the filter primitives available at the filter effects dialog."
+msgstr "Zeigt Symbole und Beschreibungen für die verfügbaren Filterbausteine im Filtereffektdialog."
#: ../src/ui/dialog/inkscape-preferences.cpp:739
msgid "Select in all layers"
@@ -13921,40 +13009,23 @@ msgstr "Tastaturkommandos zur Auswahl wirken auf Objekte aller Ebenen"
#: ../src/ui/dialog/inkscape-preferences.cpp:750
msgid "Make keyboard selection commands work on objects in current layer only"
-msgstr ""
-"Tastaturkommandos zur Auswahl wirken nur auf Objekte in der aktuellen Ebene"
+msgstr "Tastaturkommandos zur Auswahl wirken nur auf Objekte in der aktuellen Ebene"
#: ../src/ui/dialog/inkscape-preferences.cpp:752
-msgid ""
-"Make keyboard selection commands work on objects in current layer and all "
-"its sublayers"
-msgstr ""
-"Tastaturkommandos zur Auswahl wirken auf Objekte in der aktuellen Ebene und "
-"aller ihrer Unterebenen"
+msgid "Make keyboard selection commands work on objects in current layer and all its sublayers"
+msgstr "Tastaturkommandos zur Auswahl wirken auf Objekte in der aktuellen Ebene und aller ihrer Unterebenen"
#: ../src/ui/dialog/inkscape-preferences.cpp:754
-msgid ""
-"Uncheck this to be able to select objects that are hidden (either by "
-"themselves or by being in a hidden layer)"
-msgstr ""
-"Dieses abwählen, damit ausgeblendete Objekte ausgewählt werden können (gilt "
-"auch für Objekte in ausgeblendeten Ebenen/Gruppierungen)"
+msgid "Uncheck this to be able to select objects that are hidden (either by themselves or by being in a hidden layer)"
+msgstr "Dieses abwählen, damit ausgeblendete Objekte ausgewählt werden können (gilt auch für Objekte in ausgeblendeten Ebenen/Gruppierungen)"
#: ../src/ui/dialog/inkscape-preferences.cpp:756
-msgid ""
-"Uncheck this to be able to select objects that are locked (either by "
-"themselves or by being in a locked layer)"
-msgstr ""
-"Dieses abwählen damit gesperrte Objekte ausgewählt werden können (gilt auch "
-"für Objekte in gesperrten Ebenen/Gruppierungen)"
+msgid "Uncheck this to be able to select objects that are locked (either by themselves or by being in a locked layer)"
+msgstr "Dieses abwählen damit gesperrte Objekte ausgewählt werden können (gilt auch für Objekte in gesperrten Ebenen/Gruppierungen)"
#: ../src/ui/dialog/inkscape-preferences.cpp:759
-msgid ""
-"Uncheck this to be able to keep the current objects selected when the "
-"current layer changes"
-msgstr ""
-"Dieses abwählen um Objekte ausgewählt zu lassen, wenn die aktuelle Ebene "
-"geändert wird"
+msgid "Uncheck this to be able to keep the current objects selected when the current layer changes"
+msgstr "Dieses abwählen um Objekte ausgewählt zu lassen, wenn die aktuelle Ebene geändert wird"
#: ../src/ui/dialog/inkscape-preferences.cpp:761
msgid "Selecting"
@@ -13966,20 +13037,15 @@ msgstr "Bevorzugte Auflösung für das Exportieren:"
#: ../src/ui/dialog/inkscape-preferences.cpp:769
msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
-msgstr ""
-"Bevorzugte Auflösung der Bitmap (Punkte pro Zoll) im Exportieren-Dialog"
+msgstr "Bevorzugte Auflösung der Bitmap (Punkte pro Zoll) im Exportieren-Dialog"
#: ../src/ui/dialog/inkscape-preferences.cpp:771
msgid "Open Clip Art Library Server Name:"
msgstr "Open Clip Art Library Servername:"
#: ../src/ui/dialog/inkscape-preferences.cpp:772
-msgid ""
-"The server name of the Open Clip Art Library webdav server. It's used by the "
-"Import and Export to OCAL function."
-msgstr ""
-"Der Servername des \"Open Clip Art Library\" Webdav Servers. Dieser wird "
-"beim Im- und Export zur OCAL verwendet."
+msgid "The server name of the Open Clip Art Library webdav server. It's used by the Import and Export to OCAL function."
+msgstr "Der Servername des \"Open Clip Art Library\" Webdav Servers. Dieser wird beim Im- und Export zur OCAL verwendet."
#: ../src/ui/dialog/inkscape-preferences.cpp:774
msgid "Open Clip Art Library Username:"
@@ -14054,8 +13120,7 @@ msgstr "Anzeigenversatz"
#: ../src/ui/dialog/inkscape-preferences.cpp:865
#: ../src/ui/dialog/inkscape-preferences.cpp:888
msgid "The rendering intent to use to calibrate display output."
-msgstr ""
-"Geräte-Wiedergabe-Bedeutung wird genutzt, um die Ausgabe zu kalibrieren."
+msgstr "Geräte-Wiedergabe-Bedeutung wird genutzt, um die Ausgabe zu kalibrieren."
#: ../src/ui/dialog/inkscape-preferences.cpp:867
msgid "Proofing"
@@ -14137,12 +13202,8 @@ msgid "Don't emphasize gridlines when zoomed out"
msgstr "Keine Betonung der Gitterlinien beim herauszoomen"
#: ../src/ui/dialog/inkscape-preferences.cpp:967
-msgid ""
-"If set and zoomed out, the gridlines will be shown in normal color instead "
-"of major grid line color."
-msgstr ""
-"Gitterlinien werden in der normalen statt der Hauptgitterlinienfarbe "
-"gezeichnet, wenn die Ansicht herausgezoomt ist."
+msgid "If set and zoomed out, the gridlines will be shown in normal color instead of major grid line color."
+msgstr "Gitterlinien werden in der normalen statt der Hauptgitterlinienfarbe gezeichnet, wenn die Ansicht herausgezoomt ist."
#: ../src/ui/dialog/inkscape-preferences.cpp:969
msgid "Default grid settings"
@@ -14214,12 +13275,8 @@ msgid "Use named colors"
msgstr "Benutze Farbnamen"
#: ../src/ui/dialog/inkscape-preferences.cpp:1020
-msgid ""
-"If set, write the CSS name of the color when available (e.g. 'red' or "
-"'magenta') instead of the numeric value"
-msgstr ""
-"Benutzt, wenn möglich, die CSS-Farbnamen (z.B. 'red', 'magenta') anstelle "
-"von nummerischen Werten."
+msgid "If set, write the CSS name of the color when available (e.g. 'red' or 'magenta') instead of the numeric value"
+msgstr "Benutzt, wenn möglich, die CSS-Farbnamen (z.B. 'red', 'magenta') anstelle von nummerischen Werten."
#: ../src/ui/dialog/inkscape-preferences.cpp:1022
msgid "XML formatting"
@@ -14238,12 +13295,8 @@ msgid "Indent, spaces:"
msgstr "Einrücken:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1028
-msgid ""
-"The number of spaces to use for indenting nested elements; set to 0 for no "
-"indentation"
-msgstr ""
-"Die Anzahl an Leerstellen die zum einrücken untergeordneter Elemente genutzt "
-"werden soll. Mit 0 werden keine Leerstellen eingefügt."
+msgid "The number of spaces to use for indenting nested elements; set to 0 for no indentation"
+msgstr "Die Anzahl an Leerstellen die zum einrücken untergeordneter Elemente genutzt werden soll. Mit 0 werden keine Leerstellen eingefügt."
#: ../src/ui/dialog/inkscape-preferences.cpp:1030
msgid "Path data"
@@ -14255,20 +13308,15 @@ msgstr "Relative Koordinaten erlauben."
#: ../src/ui/dialog/inkscape-preferences.cpp:1033
msgid "If set, relative coordinates may be used in path data"
-msgstr ""
-"Wenn gesetzt können relative Koordinaten als Pfaddaten verwendet werden."
+msgstr "Wenn gesetzt können relative Koordinaten als Pfaddaten verwendet werden."
#: ../src/ui/dialog/inkscape-preferences.cpp:1035
msgid "Force repeat commands"
msgstr "Erzwinge Kommandowiederholung"
#: ../src/ui/dialog/inkscape-preferences.cpp:1036
-msgid ""
-"Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead "
-"of 'L 1,2 3,4')"
-msgstr ""
-"Erzwingt die Wiederholung von Pfad-Kommandos (z.B. 'L 1,2 L 3,4' anstatt 'L "
-"1,2 3,4')"
+msgid "Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead of 'L 1,2 3,4')"
+msgstr "Erzwingt die Wiederholung von Pfad-Kommandos (z.B. 'L 1,2 L 3,4' anstatt 'L 1,2 3,4')"
#: ../src/ui/dialog/inkscape-preferences.cpp:1038
msgid "Numbers"
@@ -14287,12 +13335,8 @@ msgid "Minimum exponent:"
msgstr "Mindestgröße:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1044
-msgid ""
-"The smallest number written to SVG is 10 to the power of this exponent; "
-"anything smaller is written as zero."
-msgstr ""
-"Alle Zahlen die kleiner als 10 hoch diesen Exponenten sind, werden als 0 in "
-"SVG Dateien geschrieben."
+msgid "The smallest number written to SVG is 10 to the power of this exponent; anything smaller is written as zero."
+msgstr "Alle Zahlen die kleiner als 10 hoch diesen Exponenten sind, werden als 0 in SVG Dateien geschrieben."
#: ../src/ui/dialog/inkscape-preferences.cpp:1046
msgid "SVG output"
@@ -14580,11 +13624,8 @@ msgid "Control bar icon size"
msgstr "Symbolgröße in Werkzeugleiste"
#: ../src/ui/dialog/inkscape-preferences.cpp:1081
-msgid ""
-"Set the size for the icons in tools' control bars to use (requires restart)"
-msgstr ""
-"Bestimmt die Größe der Piktogramme auf der Werkzeugleiste (erfordert "
-"Neustart)"
+msgid "Set the size for the icons in tools' control bars to use (requires restart)"
+msgstr "Bestimmt die Größe der Piktogramme auf der Werkzeugleiste (erfordert Neustart)"
# !!! called "Commands Bar" in other places
#: ../src/ui/dialog/inkscape-preferences.cpp:1084
@@ -14592,23 +13633,16 @@ msgid "Secondary toolbar icon size"
msgstr "Symbolgröße in zweiter Werkzeugleiste"
#: ../src/ui/dialog/inkscape-preferences.cpp:1085
-msgid ""
-"Set the size for the icons in secondary toolbars to use (requires restart)"
-msgstr ""
-"Bestimmt die Größe der Piktogramme in untergeordneten Werkzeugleisten "
-"(erfordert Neustart)"
+msgid "Set the size for the icons in secondary toolbars to use (requires restart)"
+msgstr "Bestimmt die Größe der Piktogramme in untergeordneten Werkzeugleisten (erfordert Neustart)"
#: ../src/ui/dialog/inkscape-preferences.cpp:1088
msgid "Work-around color sliders not drawing."
msgstr "Abhilfe für nicht gezeichnete Farb-Schieberegler"
#: ../src/ui/dialog/inkscape-preferences.cpp:1090
-msgid ""
-"When on, will attempt to work around bugs in certain GTK themes drawing "
-"color sliders."
-msgstr ""
-"Wenn gewählt, wird versucht, den Fehler bzgl. nicht gezeichneter Farb-"
-"Schieberegler in manchen GTK-Themen zu umgehen."
+msgid "When on, will attempt to work around bugs in certain GTK themes drawing color sliders."
+msgstr "Wenn gewählt, wird versucht, den Fehler bzgl. nicht gezeichneter Farb-Schieberegler in manchen GTK-Themen zu umgehen."
#: ../src/ui/dialog/inkscape-preferences.cpp:1096
msgid "Clear list"
@@ -14619,25 +13653,16 @@ msgid "Maximum documents in Open Recent:"
msgstr "Länge der \"letzte Dokumente\"-Liste:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1102
-msgid ""
-"Set the maximum length of the Open Recent list in the File menu, or clear "
-"the list"
-msgstr ""
-"Die maximale Länge der Liste zuletzt geöffneter Dokumente im Menü »Datei«"
+msgid "Set the maximum length of the Open Recent list in the File menu, or clear the list"
+msgstr "Die maximale Länge der Liste zuletzt geöffneter Dokumente im Menü »Datei«"
#: ../src/ui/dialog/inkscape-preferences.cpp:1105
msgid "Zoom correction factor (in %):"
msgstr "Zoom Korrektur (in %)"
#: ../src/ui/dialog/inkscape-preferences.cpp:1106
-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 ""
-"Verschieben Sie den Schieberegler, bis die Länge der Maßbandes auf ihrem "
-"Bildschirm der echten Größe entspricht. Diese Information wird genutzt, um "
-"beim Zoom auf 1:1, 1:2, usw. das Objekt in realistischen Größen darzustellen."
+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 "Verschieben Sie den Schieberegler, bis die Länge der Maßbandes auf ihrem Bildschirm der echten Größe entspricht. Diese Information wird genutzt, um beim Zoom auf 1:1, 1:2, usw. das Objekt in realistischen Größen darzustellen."
#: ../src/ui/dialog/inkscape-preferences.cpp:1108
msgid "Interface"
@@ -14648,15 +13673,8 @@ msgid "Use current directory for \"Save As ...\""
msgstr "Verwende aktuelles Verzeichnis für \"Speichern unter...\""
#: ../src/ui/dialog/inkscape-preferences.cpp:1116
-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 ""
-"Wenn diese Option aktiviert ist, wird der \"Speichern unter\"-Dialog immer "
-"das Verzeichnis öffnen, in dem das aktuell offene Dokument liegt. Ist sie "
-"deaktiviert, wird das Verzeichnis der letzten Speicherung über diesen Dialog "
-"geöffnet."
+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 "Wenn diese Option aktiviert ist, wird der \"Speichern unter\"-Dialog immer das Verzeichnis öffnen, in dem das aktuell offene Dokument liegt. Ist sie deaktiviert, wird das Verzeichnis der letzten Speicherung über diesen Dialog geöffnet."
#. Autosave options
#: ../src/ui/dialog/inkscape-preferences.cpp:1120
@@ -14664,12 +13682,8 @@ msgid "Enable autosave (requires restart)"
msgstr "Automatisches Speichern (erfordert Neustart)"
#: ../src/ui/dialog/inkscape-preferences.cpp:1121
-msgid ""
-"Automatically save the current document(s) at a given interval, thus "
-"minimizing loss in case of a crash"
-msgstr ""
-"Speichert das Dokument in bestimmten Zeitabständen. Dadurch kann der "
-"Verlust, der durch Programmabstürze entsteht, verringert werden."
+msgid "Automatically save the current document(s) at a given interval, thus minimizing loss in case of a crash"
+msgstr "Speichert das Dokument in bestimmten Zeitabständen. Dadurch kann der Verlust, der durch Programmabstürze entsteht, verringert werden."
#: ../src/ui/dialog/inkscape-preferences.cpp:1123
msgid "Interval (in minutes):"
@@ -14677,9 +13691,7 @@ msgstr "Zeitabstand (in Minuten):"
#: ../src/ui/dialog/inkscape-preferences.cpp:1123
msgid "Interval (in minutes) at which document will be autosaved"
-msgstr ""
-"In diesen Zeitabständen (in Minuten) wird das Dokument automatisch "
-"gespeichert."
+msgstr "In diesen Zeitabständen (in Minuten) wird das Dokument automatisch gespeichert."
#. 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
@@ -14696,11 +13708,8 @@ msgid "Maximum number of autosaves:"
msgstr "Maximale Anzahl an Sicherungen:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1129
-msgid ""
-"Maximum number of autosaved files; use this to limit the storage space used"
-msgstr ""
-"Maximale Anzahl an Sicherungsdateien. Hiermit läßt sich der genutzte "
-"Speicherplatz einschränken."
+msgid "Maximum number of autosaved files; use this to limit the storage space used"
+msgstr "Maximale Anzahl an Sicherungsdateien. Hiermit läßt sich der genutzte Speicherplatz einschränken."
#: ../src/ui/dialog/inkscape-preferences.cpp:1151
msgid "2x2"
@@ -14759,24 +13768,16 @@ msgid "Second language:"
msgstr "Zweite Sprache:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1240
-msgid ""
-"Set the second spell check language; checking will only stop on words "
-"unknown in ALL chosen languages"
-msgstr ""
-"Setzen der zweiten Sprache der Rechtschreibprüfung; die Prüfung stoppt nur "
-"bei Wörtern, die in allen ausgewählten Sprachen unbekannt sind."
+msgid "Set the second spell check language; checking will only stop on words unknown in ALL chosen languages"
+msgstr "Setzen der zweiten Sprache der Rechtschreibprüfung; die Prüfung stoppt nur bei Wörtern, die in allen ausgewählten Sprachen unbekannt sind."
#: ../src/ui/dialog/inkscape-preferences.cpp:1243
msgid "Third language:"
msgstr "Dritte Sprache:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1244
-msgid ""
-"Set the third spell check language; checking will only stop on words unknown "
-"in ALL chosen languages"
-msgstr ""
-"Setzen der dritten Sprache der Rechtschreibprüfung; die Prüfung stoppt nur "
-"bei Wörtern, die in allen ausgewählten Sprachen unbekannt sind."
+msgid "Set the third spell check language; checking will only stop on words unknown in ALL chosen languages"
+msgstr "Setzen der dritten Sprache der Rechtschreibprüfung; die Prüfung stoppt nur bei Wörtern, die in allen ausgewählten Sprachen unbekannt sind."
#: ../src/ui/dialog/inkscape-preferences.cpp:1246
msgid "Ignore words with digits"
@@ -14803,9 +13804,7 @@ msgid "Add label comments to printing output"
msgstr "Beim Ausdruck Bezeichnerkommentare mitdrucken"
#: ../src/ui/dialog/inkscape-preferences.cpp:1275
-msgid ""
-"When on, a comment will be added to the raw print output, marking the "
-"rendered output for an object with its label"
+msgid "When on, a comment will be added to the raw print output, marking the rendered output for an object with its label"
msgstr ""
"Diese Option fügt der unbehandelten Druckausgabe einen Kommentar hinzu.\n"
"Das zu druckende Objekt wird mit einem Bezeichner markiert."
@@ -14815,28 +13814,16 @@ msgid "Prevent sharing of gradient definitions"
msgstr "Keine gemeinsamen Verlaufdefinitionen "
#: ../src/ui/dialog/inkscape-preferences.cpp:1279
-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 ""
-"Wenn aktiviert werden gemeinsam genutzte Verläufe automatisch aufgeteilt, "
-"sobald einer geändert wird. Andernfalls werden bei der Änderung eines "
-"Verlaufes sämtliche Objekte mit dem gleichen Verlauf ebenfalls geändert."
+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 "Wenn aktiviert werden gemeinsam genutzte Verläufe automatisch aufgeteilt, sobald einer geändert wird. Andernfalls werden bei der Änderung eines Verlaufes sämtliche Objekte mit dem gleichen Verlauf ebenfalls geändert."
#: ../src/ui/dialog/inkscape-preferences.cpp:1282
msgid "Simplification threshold:"
msgstr "Schwellwert für Vereinfachungen:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1283
-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 ""
-"Vorgabeschwelle der Vereinfachung im Knotenwerkzeug. Wird diese Operation "
-"mehrmals schnell hintereinander ausgeführt, erhöht sich die Stärke; kurze "
-"Pause dazwischen setzt den Schwellwert zurück."
+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 "Vorgabeschwelle der Vereinfachung im Knotenwerkzeug. Wird diese Operation mehrmals schnell hintereinander ausgeführt, erhöht sich die Stärke; kurze Pause dazwischen setzt den Schwellwert zurück."
#: ../src/ui/dialog/inkscape-preferences.cpp:1286
msgid "Latency skew:"
@@ -14847,24 +13834,16 @@ msgid "(requires restart)"
msgstr "(erfordert Neustart)"
#: ../src/ui/dialog/inkscape-preferences.cpp:1287
-msgid ""
-"Factor by which the event clock is skewed from the actual time (0.9766 on "
-"some systems)."
-msgstr ""
-"Faktor, um den die Ereigniszeit gegenüber der Systemzeit verlangsamt wird "
-"(0,9766 auf manchen Systemen)"
+msgid "Factor by which the event clock is skewed from the actual time (0.9766 on some systems)."
+msgstr "Faktor, um den die Ereigniszeit gegenüber der Systemzeit verlangsamt wird (0,9766 auf manchen Systemen)"
#: ../src/ui/dialog/inkscape-preferences.cpp:1289
msgid "Pre-render named icons"
msgstr "Symbole mit Namen im Voraus rendern"
#: ../src/ui/dialog/inkscape-preferences.cpp:1291
-msgid ""
-"When on, named icons will be rendered before displaying the ui. This is for "
-"working around bugs in GTK+ named icon notification"
-msgstr ""
-"Benannte Icons werden gerendert, bevor die Benutzeroberfläche dargestellt "
-"wird. Damit werden Fehler in der GTK+-Hinweisen zu benannten Icons umgangen."
+msgid "When on, named icons will be rendered before displaying the ui. This is for working around bugs in GTK+ named icon notification"
+msgstr "Benannte Icons werden gerendert, bevor die Benutzeroberfläche dargestellt wird. Damit werden Fehler in der GTK+-Hinweisen zu benannten Icons umgangen."
#. TRANSLATORS: following strings are paths in Inkscape preferences - Misc - System info
#: ../src/ui/dialog/inkscape-preferences.cpp:1297
@@ -14968,19 +13947,23 @@ msgstr "_Hinzufügen"
msgid "New layer created."
msgstr "Neue Ebene angelegt."
-#: ../src/ui/dialog/layers.cpp:495 ../src/ui/widget/layer-selector.cpp:595
+#: ../src/ui/dialog/layers.cpp:495
+#: ../src/ui/widget/layer-selector.cpp:595
msgid "Unhide layer"
msgstr "Ebene einblenden"
-#: ../src/ui/dialog/layers.cpp:495 ../src/ui/widget/layer-selector.cpp:595
+#: ../src/ui/dialog/layers.cpp:495
+#: ../src/ui/widget/layer-selector.cpp:595
msgid "Hide layer"
msgstr "Ebene ausblenden"
-#: ../src/ui/dialog/layers.cpp:506 ../src/ui/widget/layer-selector.cpp:587
+#: ../src/ui/dialog/layers.cpp:506
+#: ../src/ui/widget/layer-selector.cpp:587
msgid "Lock layer"
msgstr "Ebene sperren"
-#: ../src/ui/dialog/layers.cpp:506 ../src/ui/widget/layer-selector.cpp:587
+#: ../src/ui/dialog/layers.cpp:506
+#: ../src/ui/widget/layer-selector.cpp:587
msgid "Unlock layer"
msgstr "Ebene entsperren"
@@ -15085,8 +14068,10 @@ msgstr "Ungenutzt; reserviert"
msgid "Total"
msgstr "Gesamt"
-#: ../src/ui/dialog/memory.cpp:139 ../src/ui/dialog/memory.cpp:145
-#: ../src/ui/dialog/memory.cpp:152 ../src/ui/dialog/memory.cpp:184
+#: ../src/ui/dialog/memory.cpp:139
+#: ../src/ui/dialog/memory.cpp:145
+#: ../src/ui/dialog/memory.cpp:152
+#: ../src/ui/dialog/memory.cpp:184
msgid "Unknown"
msgstr "Unbekannt"
@@ -15103,25 +14088,16 @@ msgid "Ready."
msgstr "Bereit."
#: ../src/ui/dialog/messages.cpp:74
-msgid ""
-"Enable log display by setting dialogs.debug 'redirect' attribute to 1 in "
-"preferences.xml"
-msgstr ""
-"Log-Anzeige aktivieren durch Setzen des Attributes <b>redirect</b> von "
-"<b>dialogs.debug</b> auf <b>1</b> in preferences.xml"
+msgid "Enable log display by setting dialogs.debug 'redirect' attribute to 1 in preferences.xml"
+msgstr "Log-Anzeige aktivieren durch Setzen des Attributes <b>redirect</b> von <b>dialogs.debug</b> auf <b>1</b> in preferences.xml"
#: ../src/ui/dialog/ocaldialogs.cpp:422
msgid "Error while reading the Open Clip Art RSS feed"
msgstr "Fehler beim Lesen des Open Clip Art RSS Feeds"
#: ../src/ui/dialog/ocaldialogs.cpp:461
-msgid ""
-"Failed to receive the Open Clip Art Library RSS feed. Verify if the server "
-"name is correct in Configuration->Import/Export (e.g.: openclipart.org)"
-msgstr ""
-"Konnte den Open Clip Art Library RSS Feed nicht empfangen. Stelle sicher, "
-"dass der Servername in Konfiguration -> Import/Export richtig ist (z.B. "
-"openclipart.org)"
+msgid "Failed to receive the Open Clip Art Library RSS feed. Verify if the server name is correct in Configuration->Import/Export (e.g.: openclipart.org)"
+msgstr "Konnte den Open Clip Art Library RSS Feed nicht empfangen. Stelle sicher, dass der Servername in Konfiguration -> Import/Export richtig ist (z.B. openclipart.org)"
#: ../src/ui/dialog/ocaldialogs.cpp:475
msgid "Server supplied malformed Clip Art feed"
@@ -15364,11 +14340,8 @@ msgstr "Textvorschau:"
#: ../src/ui/dialog/swatches.cpp:331
#, c-format
-msgid ""
-"Color: <b>%s</b>; <b>Click</b> to set fill, <b>Shift+click</b> to set stroke"
-msgstr ""
-"Farbe: <b>%s</b>; <b>Klick</b> setzt die Füllung, <b>Shift+Klick</b> legt "
-"die Konturfarbe fest"
+msgid "Color: <b>%s</b>; <b>Click</b> to set fill, <b>Shift+click</b> to set stroke"
+msgstr "Farbe: <b>%s</b>; <b>Klick</b> setzt die Füllung, <b>Shift+Klick</b> legt die Konturfarbe fest"
#. TRANSLATORS: An item in context menu on a colour in the swatches
#: ../src/ui/dialog/swatches.cpp:442
@@ -15380,7 +14353,8 @@ msgstr "Füllung festlegen"
msgid "Set stroke"
msgstr "Kontur festlegen"
-#: ../src/ui/dialog/swatches.cpp:476 ../src/widgets/gradient-selector.cpp:144
+#: ../src/ui/dialog/swatches.cpp:476
+#: ../src/widgets/gradient-selector.cpp:144
#: ../src/widgets/gradient-toolbar.cpp:466
msgid "Edit..."
msgstr "Bearbeiten…"
@@ -15442,12 +14416,12 @@ msgstr "Gleiche Höhe"
#: ../src/ui/dialog/tile.cpp:674
msgid "If not set, each row has the height of the tallest object in it"
-msgstr ""
-"Wenn nicht gesetzt, dann hat jede Zeile die Höhe seines größten Objektes"
+msgstr "Wenn nicht gesetzt, dann hat jede Zeile die Höhe seines größten Objektes"
#. #### Radio buttons to control vertical alignment ####
#. #### Radio buttons to control horizontal alignment ####
-#: ../src/ui/dialog/tile.cpp:680 ../src/ui/dialog/tile.cpp:750
+#: ../src/ui/dialog/tile.cpp:680
+#: ../src/ui/dialog/tile.cpp:750
msgid "Align:"
msgstr "Ausrichten:"
@@ -15466,9 +14440,7 @@ msgstr "Gleiche Breite"
#: ../src/ui/dialog/tile.cpp:743
msgid "If not set, each column has the width of the widest object in it"
-msgstr ""
-"Wenn nicht gesetzt, dann hat jede Spalte die Breite seines breitesten "
-"Objektes"
+msgstr "Wenn nicht gesetzt, dann hat jede Spalte die Breite seines breitesten Objektes"
#. #### Radio buttons to control spacing manually or to fit selection bbox ####
#: ../src/ui/dialog/tile.cpp:789
@@ -15529,9 +14501,7 @@ msgstr "Mit optimaler Kantenerkennung vektorisieren (Algorithmus von J. Canny)"
#: ../src/ui/dialog/tracedialog.cpp:451
msgid "Brightness cutoff for adjacent pixels (determines edge thickness)"
-msgstr ""
-"Schwellwert des Helligkeitswerts bei angrenzenden Pixeln (bestimmt "
-"Kantenbreite)"
+msgstr "Schwellwert des Helligkeitswerts bei angrenzenden Pixeln (bestimmt Kantenbreite)"
#. quantization
#. TRANSLATORS: Color Quantization: the process of reducing the number
@@ -15612,12 +14582,8 @@ msgid "Stack scans"
msgstr "Scans stapeln"
#: ../src/ui/dialog/tracedialog.cpp:542
-msgid ""
-"Stack scans on top of one another (no gaps) instead of tiling (usually with "
-"gaps)"
-msgstr ""
-"Scans übereinander stapeln (ohne Zwischenräume) anstatt zu kacheln (meist "
-"mit Zwischenräumen)"
+msgid "Stack scans on top of one another (no gaps) instead of tiling (usually with gaps)"
+msgstr "Scans übereinander stapeln (ohne Zwischenräume) anstatt zu kacheln (meist mit Zwischenräumen)"
#: ../src/ui/dialog/tracedialog.cpp:545
msgid "Remove background"
@@ -15633,7 +14599,8 @@ msgstr "Mehrfache Scans: Gruppen von Pfaden erzeugen"
#. # end multiple scan
#. ## end mode page
-#: ../src/ui/dialog/tracedialog.cpp:563 ../src/widgets/toolbox.cpp:4249
+#: ../src/ui/dialog/tracedialog.cpp:563
+#: ../src/widgets/toolbox.cpp:4249
#: ../share/extensions/triangle.inx.h:9
msgid "Mode"
msgstr "Modus"
@@ -15670,16 +14637,11 @@ msgstr "Pfade optimieren"
#: ../src/ui/dialog/tracedialog.cpp:602
msgid "Try to optimize paths by joining adjacent Bezier curve segments"
-msgstr ""
-"Versuchen, Pfade durch Verbinden von Bézierkurvenabschnitten zu optimieren"
+msgstr "Versuchen, Pfade durch Verbinden von Bézierkurvenabschnitten zu optimieren"
#: ../src/ui/dialog/tracedialog.cpp:610
-msgid ""
-"Increase this to reduce the number of nodes in the trace by more aggressive "
-"optimization"
-msgstr ""
-"Erhöhen, um die Anzahl der Knoten in der Vektorisierung durch aggressivere "
-"Optimierung zu reduzieren"
+msgid "Increase this to reduce the number of nodes in the trace by more aggressive optimization"
+msgstr "Erhöhen, um die Anzahl der Knoten in der Vektorisierung durch aggressivere Optimierung zu reduzieren"
# CHECK
#: ../src/ui/dialog/tracedialog.cpp:611
@@ -15687,7 +14649,8 @@ msgid "Tolerance:"
msgstr "Toleranz:"
#. ## end option page
-#: ../src/ui/dialog/tracedialog.cpp:617 ../src/ui/dialog/tracedialog.cpp:623
+#: ../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
msgid "Options"
@@ -15720,8 +14683,7 @@ msgstr "Auswahl des Vordergrunds mittels SIOX"
#: ../src/ui/dialog/tracedialog.cpp:647
msgid "Cover the area you want to select as the foreground"
-msgstr ""
-"Übermalen Sie den Teil des Bildes, den Sie als Vordergrund auswählen möchten"
+msgstr "Übermalen Sie den Teil des Bildes, den Sie als Vordergrund auswählen möchten"
#. ## preview
#: ../src/ui/dialog/tracedialog.cpp:652
@@ -15729,12 +14691,8 @@ msgid "Update"
msgstr "Aktualisieren"
#: ../src/ui/dialog/tracedialog.cpp:658
-msgid ""
-"Preview the intermediate bitmap with the current settings, without actual "
-"tracing"
-msgstr ""
-"Vorschau der Zwischen-Bitmap mit den aktuellen Einstellungen, ohne "
-"tatsächlich zu vektorisieren"
+msgid "Preview the intermediate bitmap with the current settings, without actual tracing"
+msgstr "Vorschau der Zwischen-Bitmap mit den aktuellen Einstellungen, ohne tatsächlich zu vektorisieren"
#: ../src/ui/dialog/tracedialog.cpp:662
msgid "Preview"
@@ -15791,20 +14749,12 @@ msgid "Rotation angle (positive = counterclockwise)"
msgstr "Drehwinkel (positiv = gegen den Uhrzeigersinn)"
#: ../src/ui/dialog/transformation.cpp:92
-msgid ""
-"Horizontal skew angle (positive = counterclockwise), or absolute "
-"displacement, or percentage displacement"
-msgstr ""
-"Horizontaler Scherwinkel (positiv = gegen den Uhrzeigersinn), oder absolute "
-"oder prozentuale Verschiebung"
+msgid "Horizontal skew angle (positive = counterclockwise), or absolute displacement, or percentage displacement"
+msgstr "Horizontaler Scherwinkel (positiv = gegen den Uhrzeigersinn), oder absolute oder prozentuale Verschiebung"
#: ../src/ui/dialog/transformation.cpp:94
-msgid ""
-"Vertical skew angle (positive = counterclockwise), or absolute displacement, "
-"or percentage displacement"
-msgstr ""
-"Vertikaler Scherwinkel (positiv = gegen den Uhrzeigersinn), oder absolute "
-"oder prozentuale Verschiebung"
+msgid "Vertical skew angle (positive = counterclockwise), or absolute displacement, or percentage displacement"
+msgstr "Vertikaler Scherwinkel (positiv = gegen den Uhrzeigersinn), oder absolute oder prozentuale Verschiebung"
#: ../src/ui/dialog/transformation.cpp:97
msgid "Transformation matrix element A"
@@ -15835,12 +14785,8 @@ msgid "Rela_tive move"
msgstr "_Relative Bewegung"
#: ../src/ui/dialog/transformation.cpp:104
-msgid ""
-"Add the specified relative displacement to the current position; otherwise, "
-"edit the current absolute position directly"
-msgstr ""
-"Die angegebene relative Verschiebung zur aktuellen Position hinzuaddieren; "
-"anderenfalls die aktuelle absolute Position direkt ändern"
+msgid "Add the specified relative displacement to the current position; otherwise, edit the current absolute position directly"
+msgstr "Die angegebene relative Verschiebung zur aktuellen Position hinzuaddieren; anderenfalls die aktuelle absolute Position direkt ändern"
#: ../src/ui/dialog/transformation.cpp:105
msgid "Scale proportionally"
@@ -15855,24 +14801,16 @@ msgid "Apply to each _object separately"
msgstr "Auf jedes _Objekt getrennt anwenden"
#: ../src/ui/dialog/transformation.cpp:106
-msgid ""
-"Apply the scale/rotate/skew to each selected object separately; otherwise, "
-"transform the selection as a whole"
-msgstr ""
-"Skalierung/Drehung/Scherung auf jedes ausgewählte Objekt getrennt anwenden; "
-"anderenfalls auf die gesamte Auswahl anwenden"
+msgid "Apply the scale/rotate/skew to each selected object separately; otherwise, transform the selection as a whole"
+msgstr "Skalierung/Drehung/Scherung auf jedes ausgewählte Objekt getrennt anwenden; anderenfalls auf die gesamte Auswahl anwenden"
#: ../src/ui/dialog/transformation.cpp:107
msgid "Edit c_urrent matrix"
msgstr "_Aktuelle Matrix bearbeiten"
#: ../src/ui/dialog/transformation.cpp:107
-msgid ""
-"Edit the current transform= matrix; otherwise, post-multiply transform= by "
-"this matrix"
-msgstr ""
-"Die aktuelle transform=-Matrix bearbeiten; andernfalls transform= hinterher "
-"mit dieser Matrix multiplizieren"
+msgid "Edit the current transform= matrix; otherwise, post-multiply transform= by this matrix"
+msgstr "Die aktuelle transform=-Matrix bearbeiten; andernfalls transform= hinterher mit dieser Matrix multiplizieren"
#: ../src/ui/dialog/transformation.cpp:117
msgid "_Move"
@@ -15906,71 +14844,79 @@ msgstr "Transformation auf Auswahl anwenden"
msgid "Edit transformation matrix"
msgstr "Abbildungsmatrix ändern"
-#: ../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: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
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:1051
+#: ../src/widgets/desktop-widget.cpp:379
msgid "Zoom drawing if window size changes"
msgstr "Zeichnungsgröße mit Fenstergröße verändern"
-#: ../src/ui/view/edit-widget.cpp:1072 ../src/widgets/desktop-widget.cpp:503
+#: ../src/ui/view/edit-widget.cpp:1072
+#: ../src/widgets/desktop-widget.cpp:503
msgid "Cursor coordinates"
msgstr "Zeigerkoordinaten"
-#: ../src/ui/view/edit-widget.cpp:1082 ../src/widgets/desktop-widget.cpp:518
+#: ../src/ui/view/edit-widget.cpp:1082
+#: ../src/widgets/desktop-widget.cpp:518
msgid "Z:"
msgstr "Z:"
#: ../src/ui/view/edit-widget.cpp:1089
-msgid ""
-"<b>Welcome to Inkscape!</b> Use shape or drawing tools to create objects; "
-"use selector (arrow) to move or transform them."
-msgstr ""
-"<b>Willkommen bei Inkscape!</b> Nutzen Sie Formen- und Zeichenwerkzeuge, um "
-"Objekte zu erstellen; das Auswahlwerkzeug (Pfeil) verschiebt und bearbeitet "
-"sie."
+msgid "<b>Welcome to Inkscape!</b> Use shape or drawing tools to create objects; use selector (arrow) to move or transform them."
+msgstr "<b>Willkommen bei Inkscape!</b> Nutzen Sie Formen- und Zeichenwerkzeuge, um Objekte zu erstellen; das Auswahlwerkzeug (Pfeil) verschiebt und bearbeitet sie."
-#: ../src/ui/view/edit-widget.cpp:1200 ../src/widgets/desktop-widget.cpp:838
+#: ../src/ui/view/edit-widget.cpp:1200
+#: ../src/widgets/desktop-widget.cpp:838
#, c-format
msgid ""
-"<span weight=\"bold\" size=\"larger\">Save changes to document \"%s\" before "
-"closing?</span>\n"
+"<span weight=\"bold\" size=\"larger\">Save changes to document \"%s\" before closing?</span>\n"
"\n"
"If you close without saving, your changes will be discarded."
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Änderungen an Dokument »%s« vor dem "
-"Schließen speichern?</span>\n"
+"<span weight=\"bold\" size=\"larger\">Änderungen an Dokument »%s« vor dem Schließen speichern?</span>\n"
"\n"
"Wenn Sie schließen, ohne zu speichern, dann gehen Ihre Änderungen verloren."
-#: ../src/ui/view/edit-widget.cpp:1211 ../src/ui/view/edit-widget.cpp:1259
-#: ../src/widgets/desktop-widget.cpp:845 ../src/widgets/desktop-widget.cpp:902
+#: ../src/ui/view/edit-widget.cpp:1211
+#: ../src/ui/view/edit-widget.cpp:1259
+#: ../src/widgets/desktop-widget.cpp:845
+#: ../src/widgets/desktop-widget.cpp:902
msgid "Close _without saving"
msgstr "Schließen, _ohne zu speichern"
-#: ../src/ui/view/edit-widget.cpp:1247 ../src/widgets/desktop-widget.cpp:894
+#: ../src/ui/view/edit-widget.cpp:1247
+#: ../src/widgets/desktop-widget.cpp:894
#, c-format
msgid ""
-"<span weight=\"bold\" size=\"larger\">The file \"%s\" was saved with a "
-"format (%s) that may cause data loss!</span>\n"
+"<span weight=\"bold\" size=\"larger\">The file \"%s\" was saved with a format (%s) that may cause data loss!</span>\n"
"\n"
"Do you want to save this file as an Inkscape SVG?"
msgstr ""
-"<span weight=\"bold\" size=\"larger\">Das Dokument \"%s\" wurde in einem "
-"möglicherweise verlustbehafteten Format (%s) gespeichert!</span>\n"
+"<span weight=\"bold\" size=\"larger\">Das Dokument \"%s\" wurde in einem möglicherweise verlustbehafteten Format (%s) gespeichert!</span>\n"
"\n"
"Möchten Sie das Dokument als ein Inkscape SVG speichern?"
-#: ../src/ui/view/edit-widget.cpp:1262 ../src/widgets/desktop-widget.cpp:905
+#: ../src/ui/view/edit-widget.cpp:1262
+#: ../src/widgets/desktop-widget.cpp:905
msgid "_Save as SVG"
msgstr "Als _SVG speichern"
@@ -16054,12 +15000,8 @@ msgid "_Fit page to selection"
msgstr "Seite in Auswahl ein_passen"
#: ../src/ui/widget/page-sizer.cpp:294
-msgid ""
-"Resize the page to fit the current selection, or the entire drawing if there "
-"is no selection"
-msgstr ""
-"Seitengröße verändern, so daß sie auf die aktuelle Auswahl passt, oder auf "
-"die ganze Zeichnung, wenn keine Auswahl existiert"
+msgid "Resize the page to fit the current selection, or the entire drawing if there is no selection"
+msgstr "Seitengröße verändern, so daß sie auf die aktuelle Auswahl passt, oder auf die ganze Zeichnung, wenn keine Auswahl existiert"
#: ../src/ui/widget/page-sizer.cpp:357
msgid "Set page size"
@@ -16138,12 +15080,8 @@ msgid "swatches|Wrap"
msgstr "Mehrzeilig"
#: ../src/ui/widget/random.cpp:123
-msgid ""
-"Reseed the random number generator; this creates a different sequence of "
-"random numbers."
-msgstr ""
-"Zufallsgenerator neu impfen; dies führt zu einer geänderten Sequenz von "
-"Pseudozufallszahlen."
+msgid "Reseed the random number generator; this creates a different sequence of random numbers."
+msgstr "Zufallsgenerator neu impfen; dies führt zu einer geänderten Sequenz von Pseudozufallszahlen."
#: ../src/ui/widget/rendering-options.cpp:39
msgid "Backend"
@@ -16166,24 +15104,12 @@ msgid "Preferred resolution of rendering, in dots per inch."
msgstr "Bevorzugte Auflösung der Bitmap (dpi)"
#: ../src/ui/widget/rendering-options.cpp:52
-msgid ""
-"Render using Cairo vector operations. The resulting image is usually "
-"smaller in file size and can be arbitrarily scaled, but some filter effects "
-"will not be correctly rendered."
-msgstr ""
-"PDF-Vektoroperatoren verwenden. Das resultierende Bild hat normalerweise "
-"eine kleinere Dateigröße und kann beliebig skaliert werden, Muster gehen "
-"jedoch verloren."
+msgid "Render using Cairo vector operations. The resulting image is usually smaller in file size and can be arbitrarily scaled, but some filter effects will not be correctly rendered."
+msgstr "PDF-Vektoroperatoren verwenden. Das resultierende Bild hat normalerweise eine kleinere Dateigröße und kann beliebig skaliert werden, Muster gehen jedoch verloren."
#: ../src/ui/widget/rendering-options.cpp:57
-msgid ""
-"Render everything as bitmap. The resulting image is usually larger in file "
-"size and cannot be arbitrarily scaled without quality loss, but all objects "
-"will be rendered exactly as displayed."
-msgstr ""
-"Alles als Bitmap ausdrucken. Das resultierende Bild ist (normalerweise) "
-"größer und die Qualität hängt vom Zoomfaktor ab, die Zeichnung wird jedoch "
-"identisch zur angezeigten ausgegeben."
+msgid "Render everything as bitmap. The resulting image is usually larger in file size and cannot be arbitrarily scaled without quality loss, but all objects will be rendered exactly as displayed."
+msgstr "Alles als Bitmap ausdrucken. Das resultierende Bild ist (normalerweise) größer und die Qualität hängt vom Zoomfaktor ab, die Zeichnung wird jedoch identisch zur angezeigten ausgegeben."
#: ../src/ui/widget/selected-style.cpp:112
#: ../src/ui/widget/style-swatch.cpp:117
@@ -16226,12 +15152,14 @@ msgid "No stroke"
msgstr "Keine Kontur"
#: ../src/ui/widget/selected-style.cpp:166
-#: ../src/ui/widget/style-swatch.cpp:277 ../src/widgets/paint-selector.cpp:189
+#: ../src/ui/widget/style-swatch.cpp:277
+#: ../src/widgets/paint-selector.cpp:189
msgid "Pattern"
msgstr "Muster"
#: ../src/ui/widget/selected-style.cpp:169
-#: ../src/ui/widget/style-swatch.cpp:279 ../src/widgets/paint-selector.cpp:997
+#: ../src/ui/widget/style-swatch.cpp:279
+#: ../src/widgets/paint-selector.cpp:997
msgid "Pattern fill"
msgstr "Füllmuster"
@@ -16291,14 +15219,16 @@ msgstr "<b>Ungesetzt</b>"
#: ../src/ui/widget/selected-style.cpp:199
#: ../src/ui/widget/selected-style.cpp:257
#: ../src/ui/widget/selected-style.cpp:499
-#: ../src/ui/widget/style-swatch.cpp:303 ../src/widgets/fill-style.cpp:528
+#: ../src/ui/widget/style-swatch.cpp:303
+#: ../src/widgets/fill-style.cpp:528
msgid "Unset fill"
msgstr "Füllung aufheben"
#: ../src/ui/widget/selected-style.cpp:199
#: ../src/ui/widget/selected-style.cpp:257
#: ../src/ui/widget/selected-style.cpp:515
-#: ../src/ui/widget/style-swatch.cpp:303 ../src/widgets/stroke-style.cpp:462
+#: ../src/ui/widget/style-swatch.cpp:303
+#: ../src/widgets/stroke-style.cpp:462
msgid "Unset stroke"
msgstr "Kontur aufheben"
@@ -16389,12 +15319,14 @@ msgid "Make stroke opaque"
msgstr "Kontur undurchsichtig machen"
#: ../src/ui/widget/selected-style.cpp:261
-#: ../src/ui/widget/selected-style.cpp:481 ../src/widgets/fill-style.cpp:385
+#: ../src/ui/widget/selected-style.cpp:481
+#: ../src/widgets/fill-style.cpp:385
msgid "Remove fill"
msgstr "Füllung entfernen"
#: ../src/ui/widget/selected-style.cpp:261
-#: ../src/ui/widget/selected-style.cpp:490 ../src/widgets/stroke-style.cpp:336
+#: ../src/ui/widget/selected-style.cpp:490
+#: ../src/widgets/stroke-style.cpp:336
msgid "Remove stroke"
msgstr "Kontur entfernen"
@@ -16482,12 +15414,8 @@ msgstr "Sättigung anpassen"
#: ../src/ui/widget/selected-style.cpp:1280
#, c-format
-msgid ""
-"Adjusting <b>saturation</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with "
-"<b>Ctrl</b> to adjust lightness, without modifiers to adjust hue"
-msgstr ""
-"<b>Sättigung</b> eingestellt: vorher %.3g, jetzt <b>%.3g</b> (Diff. %.3g); "
-"mit <b>Strg</b> wird Helligkeit, ohne Zusatztaste Farbwert angepasst"
+msgid "Adjusting <b>saturation</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with <b>Ctrl</b> to adjust lightness, without modifiers to adjust hue"
+msgstr "<b>Sättigung</b> eingestellt: vorher %.3g, jetzt <b>%.3g</b> (Diff. %.3g); mit <b>Strg</b> wird Helligkeit, ohne Zusatztaste Farbwert angepasst"
#: ../src/ui/widget/selected-style.cpp:1284
msgid "Adjust lightness"
@@ -16495,12 +15423,8 @@ msgstr "Helligkeit anpassen"
#: ../src/ui/widget/selected-style.cpp:1286
#, c-format
-msgid ""
-"Adjusting <b>lightness</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with "
-"<b>Shift</b> to adjust saturation, without modifiers to adjust hue"
-msgstr ""
-"<b>Helligkeit</b> eingestellt: vorher %.3g, jetzt <b>%.3g</b> (Diff. %.3g); "
-"mit <b>Umschalt</b> wird Sättigung, ohne Zusatztaste Farbwert angepasst"
+msgid "Adjusting <b>lightness</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with <b>Shift</b> to adjust saturation, without modifiers to adjust hue"
+msgstr "<b>Helligkeit</b> eingestellt: vorher %.3g, jetzt <b>%.3g</b> (Diff. %.3g); mit <b>Umschalt</b> wird Sättigung, ohne Zusatztaste Farbwert angepasst"
#: ../src/ui/widget/selected-style.cpp:1290
msgid "Adjust hue"
@@ -16508,12 +15432,8 @@ msgstr "Farbton anpassen"
#: ../src/ui/widget/selected-style.cpp:1292
#, c-format
-msgid ""
-"Adjusting <b>hue</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with <b>Shift</"
-"b> to adjust saturation, with <b>Ctrl</b> to adjust lightness"
-msgstr ""
-"<b>Farbwert</b> eingestellt: vorher %.3g, jetzt <b>%.3g</b> (Diff. %.3g); "
-"mit <b>Umschalt</b> wird Sättigung, mit <b>Strg</b> Helligkeit angepasst"
+msgid "Adjusting <b>hue</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with <b>Shift</b> to adjust saturation, with <b>Ctrl</b> to adjust lightness"
+msgstr "<b>Farbwert</b> eingestellt: vorher %.3g, jetzt <b>%.3g</b> (Diff. %.3g); mit <b>Umschalt</b> wird Sättigung, mit <b>Strg</b> Helligkeit angepasst"
#: ../src/ui/widget/selected-style.cpp:1401
#: ../src/ui/widget/selected-style.cpp:1415
@@ -16523,8 +15443,7 @@ msgstr "Breite der Konturlinie"
#: ../src/ui/widget/selected-style.cpp:1402
#, c-format
msgid "Adjusting <b>stroke width</b>: was %.3g, now <b>%.3g</b> (diff %.3g)"
-msgstr ""
-"<b>Strichbreite</b> eingestellt: vorher %.3g, jetzt <b>%.3g</b> (Diff. %.3g)"
+msgstr "<b>Strichbreite</b> eingestellt: vorher %.3g, jetzt <b>%.3g</b> (Diff. %.3g)"
#. 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
@@ -16586,37 +15505,25 @@ msgstr "3D-Box: Fluchtpunkt verschieben"
#: ../src/vanishing-point.cpp:305
#, c-format
msgid "<b>Finite</b> vanishing point shared by <b>%d</b> box"
-msgid_plural ""
-"<b>Finite</b> vanishing point shared by <b>%d</b> boxes; drag with <b>Shift</"
-"b> to separate selected box(es)"
+msgid_plural "<b>Finite</b> vanishing point shared by <b>%d</b> boxes; drag with <b>Shift</b> to separate selected box(es)"
msgstr[0] "<b>Endlicher</b> Fluchtpunkt benutzt von <b>%d</b> Box."
-msgstr[1] ""
-"<b>Endlicher</b> Fluchtpunkt benutzt von <b>%d</b> Boxen; Ziehen mit "
-"<b>Umschalttaste</b> zum Separieren der markierten Boxen"
+msgstr[1] "<b>Endlicher</b> Fluchtpunkt benutzt von <b>%d</b> Boxen; Ziehen mit <b>Umschalttaste</b> zum Separieren der markierten Boxen"
#. This won't make sense any more when infinite VPs are not shown on the canvas,
#. but currently we update the status message anyway
#: ../src/vanishing-point.cpp:312
#, c-format
msgid "<b>Infinite</b> vanishing point shared by <b>%d</b> box"
-msgid_plural ""
-"<b>Infinite</b> vanishing point shared by <b>%d</b> boxes; drag with "
-"<b>Shift</b> to separate selected box(es)"
+msgid_plural "<b>Infinite</b> vanishing point shared by <b>%d</b> boxes; drag with <b>Shift</b> to separate selected box(es)"
msgstr[0] "<b>Unendlicher</b> Fluchtpunkt benutzt von <b>%d</b> Box"
-msgstr[1] ""
-"<b>Unendlicher</b> Fluchtpunkt benutzt von <b>%d</b> Boxen; Ziehen mit "
-"<b>Umschalttaste</b> zum Separieren der markierten Boxen"
+msgstr[1] "<b>Unendlicher</b> Fluchtpunkt benutzt von <b>%d</b> Boxen; Ziehen mit <b>Umschalttaste</b> zum Separieren der markierten Boxen"
#: ../src/vanishing-point.cpp:320
#, c-format
-msgid ""
-"shared by <b>%d</b> box; drag with <b>Shift</b> to separate selected box(es)"
-msgid_plural ""
-"shared by <b>%d</b> boxes; drag with <b>Shift</b> to separate selected box"
-"(es)"
+msgid "shared by <b>%d</b> box; drag with <b>Shift</b> to separate selected box(es)"
+msgid_plural "shared by <b>%d</b> boxes; drag with <b>Shift</b> to separate selected box(es)"
msgstr[0] "<b>%d</b> Quader zugewiesen. "
-msgstr[1] ""
-"<b>%d</b> Quadern zugewiesen. <b>Umschalt+Ziehen</b> trennt die Quader."
+msgstr[1] "<b>%d</b> Quadern zugewiesen. <b>Umschalt+Ziehen</b> trennt die Quader."
#: ../src/verbs.cpp:1140
msgid "Switch to next layer"
@@ -16642,12 +15549,15 @@ msgstr "Zur vorherigen Ebene gewechselt."
msgid "Cannot go before first layer."
msgstr "Kann nicht vor erste Ebene wechseln."
-#: ../src/verbs.cpp:1172 ../src/verbs.cpp:1268 ../src/verbs.cpp:1300
+#: ../src/verbs.cpp:1172
+#: ../src/verbs.cpp:1268
+#: ../src/verbs.cpp:1300
#: ../src/verbs.cpp:1306
msgid "No current layer."
msgstr "Keine aktuelle Ebene."
-#: ../src/verbs.cpp:1201 ../src/verbs.cpp:1205
+#: ../src/verbs.cpp:1201
+#: ../src/verbs.cpp:1205
#, c-format
msgid "Raised layer <b>%s</b>."
msgstr "Ebene <b>%s</b> angehoben."
@@ -16660,7 +15570,8 @@ msgstr "Ebene nach ganz oben"
msgid "Raise layer"
msgstr "Ebene anheben"
-#: ../src/verbs.cpp:1209 ../src/verbs.cpp:1213
+#: ../src/verbs.cpp:1209
+#: ../src/verbs.cpp:1213
#, c-format
msgid "Lowered layer <b>%s</b>."
msgstr "Ebene <b>%s</b> abgesenkt."
@@ -16677,7 +15588,8 @@ msgstr "Ebene absenken"
msgid "Cannot move layer any further."
msgstr "Kann Ebene nicht weiter verschieben."
-#: ../src/verbs.cpp:1237 ../src/verbs.cpp:1255
+#: ../src/verbs.cpp:1237
+#: ../src/verbs.cpp:1255
#, c-format
msgid "%s copy"
msgstr "%s Kopie"
@@ -16749,19 +15661,23 @@ msgstr "tutorial-elements.de.svg"
msgid "tutorial-tips.svg"
msgstr "tutorial-tips.de.svg"
-#: ../src/verbs.cpp:2212 ../src/verbs.cpp:2731
+#: ../src/verbs.cpp:2212
+#: ../src/verbs.cpp:2731
msgid "Unlock all objects in the current layer"
msgstr "Alle Objekte in der aktuellen Ebene entsperren"
-#: ../src/verbs.cpp:2216 ../src/verbs.cpp:2733
+#: ../src/verbs.cpp:2216
+#: ../src/verbs.cpp:2733
msgid "Unlock all objects in all layers"
msgstr "Alle Objekte in allen Ebenen entsperren"
-#: ../src/verbs.cpp:2220 ../src/verbs.cpp:2735
+#: ../src/verbs.cpp:2220
+#: ../src/verbs.cpp:2735
msgid "Unhide all objects in the current layer"
msgstr "Alle Objekte in der aktuellen Ebene einblenden"
-#: ../src/verbs.cpp:2224 ../src/verbs.cpp:2737
+#: ../src/verbs.cpp:2224
+#: ../src/verbs.cpp:2737
msgid "Unhide all objects in all layers"
msgstr "Alle Objekte in allen Ebenen einblenden"
@@ -16787,9 +15703,7 @@ msgstr "_Zurücksetzen"
#: ../src/verbs.cpp:2247
msgid "Revert to the last saved version of document (changes will be lost)"
-msgstr ""
-"Das Dokument auf die zuletzt gespeicherte Version zurücksetzen (Änderungen "
-"gehen verloren)"
+msgstr "Das Dokument auf die zuletzt gespeicherte Version zurücksetzen (Änderungen gehen verloren)"
#: ../src/verbs.cpp:2248
msgid "_Save"
@@ -16829,12 +15743,8 @@ msgid "Vac_uum Defs"
msgstr "Leere Defs _aufräumen"
#: ../src/verbs.cpp:2257
-msgid ""
-"Remove unused definitions (such as gradients or clipping paths) from the &lt;"
-"defs&gt; of the document"
-msgstr ""
-"Unbenutzte vordefinierte Elemente (z.B. Farbverläufe oder Ausschneidepfade) "
-"aus den &lt;defs&gt; des Dokuments entfernen"
+msgid "Remove unused definitions (such as gradients or clipping paths) from the &lt;defs&gt; of the document"
+msgstr "Unbenutzte vordefinierte Elemente (z.B. Farbverläufe oder Ausschneidepfade) aus den &lt;defs&gt; des Dokuments entfernen"
#: ../src/verbs.cpp:2259
msgid "Print Previe_w"
@@ -16928,9 +15838,7 @@ msgstr "E_infügen"
#: ../src/verbs.cpp:2285
msgid "Paste objects from clipboard to mouse point, or paste text"
-msgstr ""
-"Objekte aus der Zwischenablage an der Mausposition einfügen, oder Text "
-"einfügen"
+msgstr "Objekte aus der Zwischenablage an der Mausposition einfügen, oder Text einfügen"
#: ../src/verbs.cpp:2286
msgid "Paste _Style"
@@ -16973,23 +15881,16 @@ msgid "Paste Width Separately"
msgstr "Breite getrennt einfügen"
#: ../src/verbs.cpp:2297
-msgid ""
-"Scale each selected object horizontally to match the width of the copied "
-"object"
-msgstr ""
-"Jedes ausgewählte Objekt horizontal auf Breite des kopierten Objekts "
-"skalieren"
+msgid "Scale each selected object horizontally to match the width of the copied object"
+msgstr "Jedes ausgewählte Objekt horizontal auf Breite des kopierten Objekts skalieren"
#: ../src/verbs.cpp:2298
msgid "Paste Height Separately"
msgstr "Höhe getrennt einfügen"
#: ../src/verbs.cpp:2299
-msgid ""
-"Scale each selected object vertically to match the height of the copied "
-"object"
-msgstr ""
-"Jedes ausgewählte Objekt vertikal auf Höhe des kopierten Objekts skalieren"
+msgid "Scale each selected object vertically to match the height of the copied object"
+msgstr "Jedes ausgewählte Objekt vertikal auf Höhe des kopierten Objekts skalieren"
# !!! translation is a bit clumsy...
#: ../src/verbs.cpp:2300
@@ -17046,21 +15947,15 @@ msgstr "_Klon erzeugen"
#: ../src/verbs.cpp:2313
msgid "Create a clone (a copy linked to the original) of selected object"
-msgstr ""
-"Einen Klon des gewählten Objekts erstellen (die Kopie ist mit dem Original "
-"verbunden)"
+msgstr "Einen Klon des gewählten Objekts erstellen (die Kopie ist mit dem Original verbunden)"
#: ../src/verbs.cpp:2314
msgid "Unlin_k Clone"
msgstr "Klonverbindung auf_trennen"
#: ../src/verbs.cpp:2315
-msgid ""
-"Cut the selected clones' links to the originals, turning them into "
-"standalone objects"
-msgstr ""
-"Die Verbindung des Klons zu seinem Original auftrennen, so daß ein "
-"selbständiges Objekt entsteht"
+msgid "Cut the selected clones' links to the originals, turning them into standalone objects"
+msgstr "Die Verbindung des Klons zu seinem Original auftrennen, so daß ein selbständiges Objekt entsteht"
#: ../src/verbs.cpp:2316
msgid "Relink to Copied"
@@ -17091,12 +15986,8 @@ msgid "Objects to Gu_ides"
msgstr "Objekte in Führungslinien umwandeln"
#: ../src/verbs.cpp:2323
-msgid ""
-"Convert selected objects to a collection of guidelines aligned with their "
-"edges"
-msgstr ""
-"Ausgewählte Objekte in eine Sammlung von Führungslinien entlang ihrer Kanten "
-"umwandeln"
+msgid "Convert selected objects to a collection of guidelines aligned with their edges"
+msgstr "Ausgewählte Objekte in eine Sammlung von Führungslinien entlang ihrer Kanten umwandeln"
#: ../src/verbs.cpp:2324
msgid "Objects to Patter_n"
@@ -17144,9 +16035,7 @@ msgstr "Auswahl _umkehren"
#: ../src/verbs.cpp:2335
msgid "Invert selection (unselect what is selected and select everything else)"
-msgstr ""
-"Auswahl invertieren (alle ausgewählten Objekte deselektieren und alle "
-"anderen auswählen)"
+msgstr "Auswahl invertieren (alle ausgewählten Objekte deselektieren und alle anderen auswählen)"
#: ../src/verbs.cpp:2336
msgid "Invert in All Layers"
@@ -17257,9 +16146,7 @@ msgstr "Manuelle _Unterschneidungen entfernen"
#. roughly speaking, how a character looks. A font is a set of glyphs.
#: ../src/verbs.cpp:2370
msgid "Remove all manual kerns and glyph rotations from a text object"
-msgstr ""
-"Alle manuellen Unterschneidungen und Rotationen von einem Textobjekt "
-"entfernen"
+msgstr "Alle manuellen Unterschneidungen und Rotationen von einem Textobjekt entfernen"
#: ../src/verbs.cpp:2372
msgid "_Union"
@@ -17290,12 +16177,8 @@ msgid "E_xclusion"
msgstr "E_xklusiv-Oder (Ausschluss)"
#: ../src/verbs.cpp:2379
-msgid ""
-"Create exclusive OR of selected paths (those parts that belong to only one "
-"path)"
-msgstr ""
-"Exklusiv-ODER der ausgewählen Pfade erzeugen (die Teile, die nur zu einem "
-"Pfad gehören)"
+msgid "Create exclusive OR of selected paths (those parts that belong to only one path)"
+msgstr "Exklusiv-ODER der ausgewählen Pfade erzeugen (die Teile, die nur zu einem Pfad gehören)"
#: ../src/verbs.cpp:2380
msgid "Di_vision"
@@ -17313,8 +16196,7 @@ msgstr "Pfad _zerschneiden"
#: ../src/verbs.cpp:2385
msgid "Cut the bottom path's stroke into pieces, removing fill"
-msgstr ""
-"Kontur des untenliegenden Pfads in Teile zerschneiden, Füllung wird entfernt"
+msgstr "Kontur des untenliegenden Pfads in Teile zerschneiden, Füllung wird entfernt"
#. TRANSLATORS: "outset": expand a shape by offsetting the object's path,
#. i.e. by displacing it perpendicular to the path in each point.
@@ -17385,9 +16267,7 @@ msgstr "Ver_bundener Versatz"
#: ../src/verbs.cpp:2412
msgid "Create a dynamic offset object linked to the original path"
-msgstr ""
-"Dynamischen Versatz am Objekt erstellen. Verknüpfung zum originalen Pfad "
-"bleibt bestehen."
+msgstr "Dynamischen Versatz am Objekt erstellen. Verknüpfung zum originalen Pfad bleibt bestehen."
#: ../src/verbs.cpp:2414
msgid "_Stroke to Path"
@@ -17411,8 +16291,7 @@ msgstr "_Richtung umkehren"
#: ../src/verbs.cpp:2419
msgid "Reverse the direction of selected paths (useful for flipping markers)"
-msgstr ""
-"Richtung der gewählten Pfade umkehren (nützlich, um Markierungen umzukehren)"
+msgstr "Richtung der gewählten Pfade umkehren (nützlich, um Markierungen umzukehren)"
#. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
#: ../src/verbs.cpp:2421
@@ -17606,12 +16485,8 @@ msgid "_Flow into Frame"
msgstr "Umbruch an Form _anpassen"
#: ../src/verbs.cpp:2475
-msgid ""
-"Put text into a frame (path or shape), creating a flowed text linked to the "
-"frame object"
-msgstr ""
-"Text in einen Rahmen setzen (Pfad oder Form), so daß ein mit seinem Rahmen "
-"verbundener Fließtext erzeugt wird"
+msgid "Put text into a frame (path or shape), creating a flowed text linked to the frame object"
+msgstr "Text in einen Rahmen setzen (Pfad oder Form), so daß ein mit seinem Rahmen verbundener Fließtext erzeugt wird"
#: ../src/verbs.cpp:2476
msgid "_Unflow"
@@ -17647,14 +16522,14 @@ msgstr "Ausgewählte Objekte vertikal umkehren"
#: ../src/verbs.cpp:2487
msgid "Apply mask to selection (using the topmost object as mask)"
-msgstr ""
-"Maskierung auf Auswahl anwenden (oberstes Objekt als Maskierung verwenden)"
+msgstr "Maskierung auf Auswahl anwenden (oberstes Objekt als Maskierung verwenden)"
#: ../src/verbs.cpp:2489
msgid "Edit mask"
msgstr "Maskierung bearbeiten"
-#: ../src/verbs.cpp:2490 ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2490
+#: ../src/verbs.cpp:2496
msgid "_Release"
msgstr "_Entfernen"
@@ -17663,13 +16538,11 @@ msgid "Remove mask from selection"
msgstr "Maskierung von Auswahl entfernen"
#: ../src/verbs.cpp:2493
-msgid ""
-"Apply clipping path to selection (using the topmost object as clipping path)"
-msgstr ""
-"Ausschneidepfad auf Auswahl anwenden (oberstes Objekt als Ausschneidepfad "
-"verwenden)"
+msgid "Apply clipping path to selection (using the topmost object as clipping path)"
+msgstr "Ausschneidepfad auf Auswahl anwenden (oberstes Objekt als Ausschneidepfad verwenden)"
-#: ../src/verbs.cpp:2495 ../src/widgets/toolbox.cpp:1446
+#: ../src/verbs.cpp:2495
+#: ../src/widgets/toolbox.cpp:1446
msgid "Edit clipping path"
msgstr "Ausschneidepfad bearbeiten"
@@ -17970,9 +16843,7 @@ msgstr "_Führungslinien"
#: ../src/verbs.cpp:2586
msgid "Show or hide guides (drag from a ruler to create a guide)"
-msgstr ""
-"Führungslinien zeigen oder verstecken (von einem Lineal ziehen, um eine "
-"Führungslinie zu erzeugen)"
+msgstr "Führungslinien zeigen oder verstecken (von einem Lineal ziehen, um eine Führungslinie zu erzeugen)"
#: ../src/verbs.cpp:2587
msgid "Toggle snapping on or off"
@@ -17992,8 +16863,7 @@ msgstr "_Vorheriger Zoomfaktor"
#: ../src/verbs.cpp:2590
msgid "Previous zoom (from the history of zooms)"
-msgstr ""
-"Den vorherigen Zoomfaktor einstellen (aus der Liste bisheriger Faktoren)"
+msgstr "Den vorherigen Zoomfaktor einstellen (aus der Liste bisheriger Faktoren)"
#: ../src/verbs.cpp:2592
msgid "Zoom 1:_1"
@@ -18100,9 +16970,7 @@ msgstr "_Icon-Vorschaufenster…"
#: ../src/verbs.cpp:2622
msgid "Open a window to preview objects at different icon resolutions"
-msgstr ""
-"Vorschaufenster öffnen, um Elemente bei verschiedenen Icon-Auflösungsstufen "
-"zu sehen"
+msgstr "Vorschaufenster öffnen, um Elemente bei verschiedenen Icon-Auflösungsstufen zu sehen"
#: ../src/verbs.cpp:2624
msgid "Zoom to fit page in window"
@@ -18154,10 +17022,8 @@ msgid "_Fill and Stroke..."
msgstr "Füllung und _Kontur…"
#: ../src/verbs.cpp:2640
-msgid ""
-"Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
-msgstr ""
-"Objektfarben, Farbverläufe, Strichbreiten, Pfeile, Strichmuster usw. ändern"
+msgid "Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
+msgstr "Objektfarben, Farbverläufe, Strichbreiten, Pfeile, Strichmuster usw. ändern"
#. TRANSLATORS: "Swatches" means: color samples
#: ../src/verbs.cpp:2642
@@ -18198,8 +17064,7 @@ msgstr "_Schrift und Text…"
#: ../src/verbs.cpp:2651
msgid "View and select font family, font size and other text properties"
-msgstr ""
-"Schriftfamilie, Schriftgröße und andere Texteigenschaften ansehen und ändern"
+msgstr "Schriftfamilie, Schriftgröße und andere Texteigenschaften ansehen und ändern"
#: ../src/verbs.cpp:2652
msgid "_XML Editor..."
@@ -18262,12 +17127,8 @@ msgid "Create Tiled Clones..."
msgstr "Gekachelte Klone erzeugen…"
#: ../src/verbs.cpp:2667
-msgid ""
-"Create multiple clones of selected object, arranging them into a pattern or "
-"scattering"
-msgstr ""
-"Mehrere Klone des gewählten Objekts erstellen, die in einem Muster oder "
-"verstreut angeordnet sind"
+msgid "Create multiple clones of selected object, arranging them into a pattern or scattering"
+msgstr "Mehrere Klone des gewählten Objekts erstellen, die in einem Muster oder verstreut angeordnet sind"
#: ../src/verbs.cpp:2668
msgid "_Object Properties..."
@@ -18275,8 +17136,7 @@ msgstr "Objekt_eigenschaften…"
#: ../src/verbs.cpp:2669
msgid "Edit the ID, locked and visible status, and other object properties"
-msgstr ""
-"Kennung, Status (gesperrt, sichtbar) und andere Objekteigenschaften ändern"
+msgstr "Kennung, Status (gesperrt, sichtbar) und andere Objekteigenschaften ändern"
#: ../src/verbs.cpp:2672
msgid "_Instant Messaging..."
@@ -18290,7 +17150,8 @@ msgstr "Jabber-Instant-Messaging-Client"
msgid "_Input Devices..."
msgstr "_Eingabegeräte…"
-#: ../src/verbs.cpp:2675 ../src/verbs.cpp:2677
+#: ../src/verbs.cpp:2675
+#: ../src/verbs.cpp:2677
msgid "Configure extended input devices, such as a graphics tablet"
msgstr "Erweiterte Eingabegeräte konfigurieren, wie z.B. Grafiktabletts"
@@ -18456,11 +17317,8 @@ msgid "Fit the page to the drawing"
msgstr "Die Seite in die Zeichnungsgröße einpassen"
#: ../src/verbs.cpp:2728
-msgid ""
-"Fit the page to the current selection or the drawing if there is no selection"
-msgstr ""
-"Die Seite in die aktuelle Auswahl einpassen (oder die ganze Zeichnung, wenn "
-"es keine Auswahl gibt)"
+msgid "Fit the page to the current selection or the drawing if there is no selection"
+msgstr "Die Seite in die aktuelle Auswahl einpassen (oder die ganze Zeichnung, wenn es keine Auswahl gibt)"
# !!! mnemonics
#. LockAndHide
@@ -18503,12 +17361,8 @@ msgstr "Versatz des Musters"
#. display the initial welcome message in the statusbar
#: ../src/widgets/desktop-widget.cpp:551
-msgid ""
-"<b>Welcome to Inkscape!</b> Use shape or freehand tools to create objects; "
-"use selector (arrow) to move or transform them."
-msgstr ""
-"<b>Willkommen zu Inkscape!</b> Formen- und Freihandwerkzeuge erstellen "
-"Objekte; das Auswahlwerkzeug (Pfeil) verschiebt und bearbeitet."
+msgid "<b>Welcome to Inkscape!</b> Use shape or freehand tools to create objects; use selector (arrow) to move or transform them."
+msgstr "<b>Willkommen zu Inkscape!</b> Formen- und Freihandwerkzeuge erstellen Objekte; das Auswahlwerkzeug (Pfeil) verschiebt und bearbeitet."
#: ../src/widgets/desktop-widget.cpp:615
#, c-format
@@ -18531,7 +17385,8 @@ msgid "%s - Inkscape"
msgstr "%s - Inkscape"
# CHECK
-#: ../src/widgets/ege-paint-def.cpp:70 ../src/widgets/ege-paint-def.cpp:92
+#: ../src/widgets/ege-paint-def.cpp:70
+#: ../src/widgets/ege-paint-def.cpp:92
#: ../src/widgets/gradient-selector.cpp:167
msgid "none"
msgstr "deaktiviert"
@@ -18544,7 +17399,8 @@ msgstr "entfernen"
msgid "Change fill rule"
msgstr "Füllungsregel ändern"
-#: ../src/widgets/fill-style.cpp:323 ../src/widgets/fill-style.cpp:397
+#: ../src/widgets/fill-style.cpp:323
+#: ../src/widgets/fill-style.cpp:397
msgid "Set fill color"
msgstr "Füllungsfarbe setzen"
@@ -18576,22 +17432,15 @@ msgstr "Schriftgröße:"
#. * 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
+#: ../src/widgets/toolbox.cpp:6522
msgid "AaBbCcIiPpQq12369$€¢?.;/()"
msgstr "AaBbCcIiPpQqÄäÖöÜüß012369€¢?&.;/|()„“»«"
#. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/pservers.html#LinearGradientSpreadMethodAttribute
#: ../src/widgets/gradient-selector.cpp:161
-msgid ""
-"Whether to fill with flat color beyond the ends of the gradient vector "
-"(spreadMethod=\"pad\"), or repeat the gradient in the same direction "
-"(spreadMethod=\"repeat\"), or repeat the gradient in alternating opposite "
-"directions (spreadMethod=\"reflect\")"
-msgstr ""
-"Füllung entweder mit einfacher Farbe außerhalb des Farbverlaufsvektors "
-"(spreadMethod=\"pad\"), mit Wiederholung des Farbverlaufs in die gleiche "
-"Richtung (spreadMethod=\"repeat\"), oder Wiederholung in abwechselnd "
-"entgegengesetzte Richtungen (spreadMethod=\"reflect\")"
+msgid "Whether to fill with flat color beyond the ends of the gradient vector (spreadMethod=\"pad\"), or repeat the gradient in the same direction (spreadMethod=\"repeat\"), or repeat the gradient in alternating opposite directions (spreadMethod=\"reflect\")"
+msgstr "Füllung entweder mit einfacher Farbe außerhalb des Farbverlaufsvektors (spreadMethod=\"pad\"), mit Wiederholung des Farbverlaufs in die gleiche Richtung (spreadMethod=\"repeat\"), oder Wiederholung in abwechselnd entgegengesetzte Richtungen (spreadMethod=\"reflect\")"
#: ../src/widgets/gradient-selector.cpp:171
msgid "reflected"
@@ -18630,10 +17479,14 @@ msgid "Edit the stops of the gradient"
msgstr "Zwischenfarbe des Farbverlaufs bearbeiten"
# !!!
-#: ../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/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
msgid "<b>New:</b>"
msgstr "<b>Neu:</b>"
@@ -18663,15 +17516,20 @@ msgstr "Farbverlauf für die Kontur erzeugen"
# !!!
#. 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: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
msgid "<b>Change:</b>"
msgstr "<b>Ändern:</b>"
#: ../src/widgets/gradient-vector.cpp:270
-#: ../src/widgets/paint-selector.cpp:885 ../src/widgets/stroke-style.cpp:820
+#: ../src/widgets/paint-selector.cpp:885
+#: ../src/widgets/stroke-style.cpp:820
msgid "No document selected"
msgstr "Kein Dokument gewählt"
@@ -18727,19 +17585,23 @@ msgstr "Farbverlaufs-Editor"
msgid "Change gradient stop color"
msgstr "Zwischenfarbe des Farbverlaufs ändern"
-#: ../src/widgets/paint-selector.cpp:181 ../src/widgets/paint-selector.cpp:564
+#: ../src/widgets/paint-selector.cpp:181
+#: ../src/widgets/paint-selector.cpp:564
msgid "No paint"
msgstr "Nicht zeichnen"
-#: ../src/widgets/paint-selector.cpp:183 ../src/widgets/paint-selector.cpp:636
+#: ../src/widgets/paint-selector.cpp:183
+#: ../src/widgets/paint-selector.cpp:636
msgid "Flat color"
msgstr "Einfache Farbe"
-#: ../src/widgets/paint-selector.cpp:185 ../src/widgets/paint-selector.cpp:707
+#: ../src/widgets/paint-selector.cpp:185
+#: ../src/widgets/paint-selector.cpp:707
msgid "Linear gradient"
msgstr "Linearer Farbverlauf"
-#: ../src/widgets/paint-selector.cpp:187 ../src/widgets/paint-selector.cpp:710
+#: ../src/widgets/paint-selector.cpp:187
+#: ../src/widgets/paint-selector.cpp:710
msgid "Radial gradient"
msgstr "Radialer Farbverlauf"
@@ -18749,20 +17611,13 @@ msgstr "Farbe nicht setzen (damit sie nicht übernommen/vererbt werden kann)"
#. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty
#: ../src/widgets/paint-selector.cpp:203
-msgid ""
-"Any path self-intersections or subpaths create holes in the fill (fill-rule: "
-"evenodd)"
-msgstr ""
-"Überschneidungen desselben Pfades oder mit eingefügten Pfaden erzeugen "
-"Löcher (Füllregel: evenodd)"
+msgid "Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)"
+msgstr "Überschneidungen desselben Pfades oder mit eingefügten Pfaden erzeugen Löcher (Füllregel: evenodd)"
#. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty
#: ../src/widgets/paint-selector.cpp:214
-msgid ""
-"Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)"
-msgstr ""
-"Vollständiges Füllen, außer ein eingefügter Pfad läuft entgegengesetzt "
-"(Füllregel: nonzero)"
+msgid "Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)"
+msgstr "Vollständiges Füllen, außer ein eingefügter Pfad läuft entgegengesetzt (Füllregel: nonzero)"
#: ../src/widgets/paint-selector.cpp:531
msgid "No objects"
@@ -18777,14 +17632,8 @@ msgid "Paint is undefined"
msgstr "Farbe ist undefiniert"
#: ../src/widgets/paint-selector.cpp:984
-msgid ""
-"Use the <b>Node tool</b> to adjust position, scale, and rotation of the "
-"pattern on canvas. Use <b>Object &gt; Pattern &gt; Objects to Pattern</b> to "
-"create a new pattern from selection."
-msgstr ""
-"Benutzen Sie das <b>Knotenwerkzeug</b> um Position Winkel und Größe des "
-"Musters anzupassen. Mit <b>Objekt » Füllmuster » Objekte in Füllmuster "
-"umwandeln</b> lassen sich neue Füllmuster von ausgewählten Objekten erzeugen."
+msgid "Use the <b>Node tool</b> to adjust position, scale, and rotation of the pattern on canvas. Use <b>Object &gt; Pattern &gt; Objects to Pattern</b> to create a new pattern from selection."
+msgstr "Benutzen Sie das <b>Knotenwerkzeug</b> um Position Winkel und Größe des Musters anzupassen. Mit <b>Objekt » Füllmuster » Objekte in Füllmuster umwandeln</b> lassen sich neue Füllmuster von ausgewählten Objekten erzeugen."
#: ../src/widgets/select-toolbar.cpp:247
msgid "Transform by toolbar"
@@ -18792,63 +17641,35 @@ msgstr "Mittels Werkzeugleiste transformieren"
#: ../src/widgets/select-toolbar.cpp:304
msgid "Now <b>stroke width</b> is <b>scaled</b> when objects are scaled."
-msgstr ""
-"<b>Breite der Kontur</b> wird nun <b>skaliert</b>, wenn Objekte skaliert "
-"werden."
+msgstr "<b>Breite der Kontur</b> wird nun <b>skaliert</b>, wenn Objekte skaliert werden."
#: ../src/widgets/select-toolbar.cpp:306
msgid "Now <b>stroke width</b> is <b>not scaled</b> when objects are scaled."
-msgstr ""
-"<b>Breite der Kontur</b> wird nun <b>nicht skaliert</b>, wenn Objekte "
-"skaliert werden."
+msgstr "<b>Breite der Kontur</b> wird nun <b>nicht skaliert</b>, wenn Objekte skaliert werden."
#: ../src/widgets/select-toolbar.cpp:317
-msgid ""
-"Now <b>rounded rectangle corners</b> are <b>scaled</b> when rectangles are "
-"scaled."
-msgstr ""
-"<b>Ecken abgerundeter Rechtecke</b> werden nun <b>mitskaliert</b>, wenn "
-"Objekte skaliert werden."
+msgid "Now <b>rounded rectangle corners</b> are <b>scaled</b> when rectangles are scaled."
+msgstr "<b>Ecken abgerundeter Rechtecke</b> werden nun <b>mitskaliert</b>, wenn Objekte skaliert werden."
#: ../src/widgets/select-toolbar.cpp:319
-msgid ""
-"Now <b>rounded rectangle corners</b> are <b>not scaled</b> when rectangles "
-"are scaled."
-msgstr ""
-"<b>Ecken abgerundeter Rechtecke</b> werden nun <b>nicht mitskaliert</b>, "
-"wenn Objekte skaliert werden."
+msgid "Now <b>rounded rectangle corners</b> are <b>not scaled</b> when rectangles are scaled."
+msgstr "<b>Ecken abgerundeter Rechtecke</b> werden nun <b>nicht mitskaliert</b>, wenn Objekte skaliert werden."
#: ../src/widgets/select-toolbar.cpp:330
-msgid ""
-"Now <b>gradients</b> are <b>transformed</b> along with their objects when "
-"those are transformed (moved, scaled, rotated, or skewed)."
-msgstr ""
-"<b>Farbverläufe</b> werden nun mit ihren Objekten <b>transformiert</b>, wenn "
-"diese transformiert werden (bewegt, skaliert, gedreht oder geschert)."
+msgid "Now <b>gradients</b> are <b>transformed</b> along with their objects when those are transformed (moved, scaled, rotated, or skewed)."
+msgstr "<b>Farbverläufe</b> werden nun mit ihren Objekten <b>transformiert</b>, wenn diese transformiert werden (bewegt, skaliert, gedreht oder geschert)."
#: ../src/widgets/select-toolbar.cpp:332
-msgid ""
-"Now <b>gradients</b> remain <b>fixed</b> when objects are transformed "
-"(moved, scaled, rotated, or skewed)."
-msgstr ""
-"<b>Farbverläufe</b> bleiben nun <b>unverändert</b>, wenn Objekte "
-"transformiert werden (bewegt, skaliert, gedreht oder geschert)."
+msgid "Now <b>gradients</b> remain <b>fixed</b> when objects are transformed (moved, scaled, rotated, or skewed)."
+msgstr "<b>Farbverläufe</b> bleiben nun <b>unverändert</b>, wenn Objekte transformiert werden (bewegt, skaliert, gedreht oder geschert)."
#: ../src/widgets/select-toolbar.cpp:343
-msgid ""
-"Now <b>patterns</b> are <b>transformed</b> along with their objects when "
-"those are transformed (moved, scaled, rotated, or skewed)."
-msgstr ""
-"<b>Muster</b> werden nun mit ihren Objekten <b>transformiert</b>, wenn diese "
-"transformiert werden (bewegt, skaliert, gedreht oder geschert)."
+msgid "Now <b>patterns</b> are <b>transformed</b> along with their objects when those are transformed (moved, scaled, rotated, or skewed)."
+msgstr "<b>Muster</b> werden nun mit ihren Objekten <b>transformiert</b>, wenn diese transformiert werden (bewegt, skaliert, gedreht oder geschert)."
#: ../src/widgets/select-toolbar.cpp:345
-msgid ""
-"Now <b>patterns</b> remain <b>fixed</b> when objects are transformed (moved, "
-"scaled, rotated, or skewed)."
-msgstr ""
-"<b>Muster</b> bleiben nun <b>unverändert</b>, wenn Objekte transformiert "
-"werden (bewegt, skaliert, gedreht oder geschert)."
+msgid "Now <b>patterns</b> remain <b>fixed</b> when objects are transformed (moved, scaled, rotated, or skewed)."
+msgstr "<b>Muster</b> bleiben nun <b>unverändert</b>, wenn Objekte transformiert werden (bewegt, skaliert, gedreht oder geschert)."
#. four spinbuttons
#. TRANSLATORS: only translate "string" in "context|string".
@@ -18921,12 +17742,8 @@ msgstr "Auswirkung:"
# Rechteck-Ecken?! Das geht noch besser!
#: ../src/widgets/select-toolbar.cpp:536
-msgid ""
-"Control whether or not to scale stroke widths, scale rectangle corners, "
-"transform gradient fills, and transform pattern fills with the object"
-msgstr ""
-"Wählt, ob Strichbreiten, Rechteck-Ecken, Gradienten- und Musterfüllungen mit "
-"dem Objekt skaliert werden."
+msgid "Control whether or not to scale stroke widths, scale rectangle corners, transform gradient fills, and transform pattern fills with the object"
+msgstr "Wählt, ob Strichbreiten, Rechteck-Ecken, Gradienten- und Musterfüllungen mit dem Objekt skaliert werden."
#: ../src/widgets/select-toolbar.cpp:555
msgid "Scale rounded corners"
@@ -19102,7 +17919,8 @@ msgstr "Wert"
msgid "Type text in a text node"
msgstr "Text in einem Text-Knoten tippen"
-#: ../src/widgets/stroke-style.cpp:286 ../src/widgets/stroke-style.cpp:345
+#: ../src/widgets/stroke-style.cpp:286
+#: ../src/widgets/stroke-style.cpp:345
msgid "Set stroke color"
msgstr "Farbe der Kontur setzen"
@@ -19205,21 +18023,15 @@ msgstr "Anfangsmarkierung:"
#: ../src/widgets/stroke-style.cpp:1234
msgid "Start Markers are drawn on the first node of a path or shape"
-msgstr ""
-"Startmakierungen werden am ersten Knoten eines Pfades oder einer Form "
-"gezeichnet."
+msgstr "Startmakierungen werden am ersten Knoten eines Pfades oder einer Form gezeichnet."
#: ../src/widgets/stroke-style.cpp:1243
msgid "Mid Markers:"
msgstr "Markierungen dazwischen:"
#: ../src/widgets/stroke-style.cpp:1245
-msgid ""
-"Mid Markers are drawn on every node of a path or shape except the first and "
-"last nodes"
-msgstr ""
-"Mittenmarkierungen werden auf jedem Knoten entlang eines Pfades - außer dem "
-"ersten und letzten - gezeichnet."
+msgid "Mid Markers are drawn on every node of a path or shape except the first and last nodes"
+msgstr "Mittenmarkierungen werden auf jedem Knoten entlang eines Pfades - außer dem ersten und letzten - gezeichnet."
#: ../src/widgets/stroke-style.cpp:1254
msgid "End Markers:"
@@ -19227,11 +18039,10 @@ msgstr "Endmarkierungen:"
#: ../src/widgets/stroke-style.cpp:1256
msgid "End Markers are drawn on the last node of a path or shape"
-msgstr ""
-"Endmarkierungen werden auf dem ersten und letzten Knoten eines Pfades oder "
-"einer Form gezeichnet."
+msgstr "Endmarkierungen werden auf dem ersten und letzten Knoten eines Pfades oder einer Form gezeichnet."
-#: ../src/widgets/stroke-style.cpp:1605 ../src/widgets/stroke-style.cpp:1701
+#: ../src/widgets/stroke-style.cpp:1605
+#: ../src/widgets/stroke-style.cpp:1701
msgid "Set stroke style"
msgstr "Stil der Kontur setzen"
@@ -19271,7 +18082,8 @@ msgstr "Stil von neuen Pfaden (Zeichenwerkzeug)"
msgid "Style of new calligraphic strokes"
msgstr "Stil von neuen kalligrafischen Strichen"
-#: ../src/widgets/toolbox.cpp:203 ../src/widgets/toolbox.cpp:205
+#: ../src/widgets/toolbox.cpp:203
+#: ../src/widgets/toolbox.cpp:205
msgid "TBD"
msgstr "\"Beschreibung fehlt noch!\""
@@ -19674,7 +18486,8 @@ msgstr "gut abgerundet"
msgid "amply rounded"
msgstr "reichlich abgerundet"
-#: ../src/widgets/toolbox.cpp:2795 ../src/widgets/toolbox.cpp:2810
+#: ../src/widgets/toolbox.cpp:2795
+#: ../src/widgets/toolbox.cpp:2810
msgid "blown up"
msgstr "aufgebläht"
@@ -19718,18 +18531,17 @@ msgstr "Zufallsänderung:"
msgid "Scatter randomly the corners and angles"
msgstr "Zufällige Variationen der Ecken und Winkel"
-#: ../src/widgets/toolbox.cpp:2828 ../src/widgets/toolbox.cpp:3767
-#: ../src/widgets/toolbox.cpp:4027 ../src/widgets/toolbox.cpp:7249
+#: ../src/widgets/toolbox.cpp:2828
+#: ../src/widgets/toolbox.cpp:3767
+#: ../src/widgets/toolbox.cpp:4027
+#: ../src/widgets/toolbox.cpp:7249
msgid "Defaults"
msgstr "Vorgaben"
-#: ../src/widgets/toolbox.cpp:2829 ../src/widgets/toolbox.cpp:3768
-msgid ""
-"Reset shape parameters to defaults (use Inkscape Preferences > Tools to "
-"change defaults)"
-msgstr ""
-"Die Parameter der Formen auf Vorgabewerte zurücksetzen (Menü Datei » "
-"Inkscape-Einstellungen » Werkzeuge, um die Vorgabeeinstellungen zu ändern)"
+#: ../src/widgets/toolbox.cpp:2829
+#: ../src/widgets/toolbox.cpp:3768
+msgid "Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
+msgstr "Die Parameter der Formen auf Vorgabewerte zurücksetzen (Menü Datei » Inkscape-Einstellungen » Werkzeuge, um die Vorgabeeinstellungen zu ändern)"
#: ../src/widgets/toolbox.cpp:2902
msgid "Change rectangle"
@@ -19751,7 +18563,8 @@ msgstr "H:"
msgid "Height of rectangle"
msgstr "Höhe des Rechtecks"
-#: ../src/widgets/toolbox.cpp:3126 ../src/widgets/toolbox.cpp:3141
+#: ../src/widgets/toolbox.cpp:3126
+#: ../src/widgets/toolbox.cpp:3141
msgid "not rounded"
msgstr "Nicht abgerundet"
@@ -19808,9 +18621,7 @@ msgstr "Fluchtpunktstatus in X-Richtung"
#: ../src/widgets/toolbox.cpp:3447
msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
-msgstr ""
-"Fluchtpunkt in X-Richtung zwischen 'endlich' und 'unendlich' (=parallel) "
-"umschalten"
+msgstr "Fluchtpunkt in X-Richtung zwischen 'endlich' und 'unendlich' (=parallel) umschalten"
#: ../src/widgets/toolbox.cpp:3462
msgid "Angle in Y direction"
@@ -19832,9 +18643,7 @@ msgstr "Fluchtpunktstatus in Y-Richtung"
#: ../src/widgets/toolbox.cpp:3486
msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
-msgstr ""
-"Fluchtpunkt in Y-richtung zwischen 'endlich' und 'unendlich' (=parallel) "
-"umschalten"
+msgstr "Fluchtpunkt in Y-richtung zwischen 'endlich' und 'unendlich' (=parallel) umschalten"
#: ../src/widgets/toolbox.cpp:3501
msgid "Angle in Z direction"
@@ -19852,9 +18661,7 @@ msgstr "Fluchtpunktstatus in Z-Richtung"
#: ../src/widgets/toolbox.cpp:3525
msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
-msgstr ""
-"Fluchtpunkt in Z-Richtung zwischen 'endlich' und 'unendlich' (=parallel) "
-"umschalten"
+msgstr "Fluchtpunkt in Z-Richtung zwischen 'endlich' und 'unendlich' (=parallel) umschalten"
#: ../src/widgets/toolbox.cpp:3583
msgid "Change spiral"
@@ -19988,7 +18795,8 @@ msgstr "Dreieck Ende"
msgid "From clipboard"
msgstr "Aus Zwischenablage"
-#: ../src/widgets/toolbox.cpp:3916 ../src/widgets/toolbox.cpp:3917
+#: ../src/widgets/toolbox.cpp:3916
+#: ../src/widgets/toolbox.cpp:3917
msgid "Shape:"
msgstr "Form:"
@@ -20000,9 +18808,12 @@ msgstr "Stil von neuen Pfaden mit diesem Werkzeug"
msgid "(many nodes, rough)"
msgstr "(viele Knoten, grob)"
-#: ../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: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
msgid "(default)"
msgstr "(Vorgabe)"
@@ -20024,12 +18835,8 @@ msgid "How much smoothing (simplifying) is applied to the line"
msgstr "Wie stark die Linie geglättet (vereinfacht) wird"
#: ../src/widgets/toolbox.cpp:4028
-msgid ""
-"Reset pencil parameters to defaults (use Inkscape Preferences > Tools to "
-"change defaults)"
-msgstr ""
-"Die Parameter des Stiftes auf Vorgabewerte zurücksetzen (Menü Datei » "
-"Inkscape-Einstellungen » Werkzeuge, um die Grundeinstellungen zu ändern)"
+msgid "Reset pencil parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
+msgstr "Die Parameter des Stiftes auf Vorgabewerte zurücksetzen (Menü Datei » Inkscape-Einstellungen » Werkzeuge, um die Grundeinstellungen zu ändern)"
#. Width
#: ../src/widgets/toolbox.cpp:4121
@@ -20135,8 +18942,7 @@ msgstr "Anziehen-/Abstoßenmodus"
#: ../src/widgets/toolbox.cpp:4216
msgid "Attract parts of paths towards cursor; with Shift from cursor"
-msgstr ""
-"Teile von Pfaden werden vom Zeiger angezogen oder mit Umschalt abgestoßen"
+msgstr "Teile von Pfaden werden vom Zeiger angezogen oder mit Umschalt abgestoßen"
#: ../src/widgets/toolbox.cpp:4222
msgid "Roughen mode"
@@ -20228,22 +19034,17 @@ msgid "Fidelity:"
msgstr "Genauigkeit:"
#: ../src/widgets/toolbox.cpp:4345
-msgid ""
-"Low fidelity simplifies paths; high fidelity preserves path features but may "
-"generate a lot of new nodes"
-msgstr ""
-"Geringere Originaltreue vereinfacht den Pfad. Ein hoher Wert erhält die "
-"Pfadstruktur, erzeugt aber viele neuen Knoten"
+msgid "Low fidelity simplifies paths; high fidelity preserves path features but may generate a lot of new nodes"
+msgstr "Geringere Originaltreue vereinfacht den Pfad. Ein hoher Wert erhält die Pfadstruktur, erzeugt aber viele neuen Knoten"
-#: ../src/widgets/toolbox.cpp:4362 ../src/widgets/toolbox.cpp:4863
+#: ../src/widgets/toolbox.cpp:4362
+#: ../src/widgets/toolbox.cpp:4863
msgid "Pressure"
msgstr "Druck"
#: ../src/widgets/toolbox.cpp:4363
msgid "Use the pressure of the input device to alter the force of tweak action"
-msgstr ""
-"Druckempfindlichkeit des Eingabegeräts benutzen, um die Kraft der "
-"Anpassungsaktion zu bestimmen"
+msgstr "Druckempfindlichkeit des Eingabegeräts benutzen, um die Kraft der Anpassungsaktion zu bestimmen"
#: ../src/widgets/toolbox.cpp:4543
msgid "No preset"
@@ -20254,23 +19055,24 @@ msgid "Save..."
msgstr "Speichern…"
#. Width
-#: ../src/widgets/toolbox.cpp:4712 ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4712
+#: ../src/widgets/toolbox.cpp:5731
msgid "(hairline)"
msgstr "(Haarline)"
-#: ../src/widgets/toolbox.cpp:4712 ../src/widgets/toolbox.cpp:5731
+#: ../src/widgets/toolbox.cpp:4712
+#: ../src/widgets/toolbox.cpp:5731
msgid "(broad stroke)"
msgstr "(breiter Strich)"
-#: ../src/widgets/toolbox.cpp:4715 ../src/widgets/toolbox.cpp:5734
+#: ../src/widgets/toolbox.cpp:4715
+#: ../src/widgets/toolbox.cpp:5734
msgid "Pen Width"
msgstr "Stiftbreite"
#: ../src/widgets/toolbox.cpp:4716
msgid "The width of the calligraphic pen (relative to the visible canvas area)"
-msgstr ""
-"Breite des kalligrafischen Füllers (relativ zum sichtbaren "
-"Dokumentausschnitt)"
+msgstr "Breite des kalligrafischen Füllers (relativ zum sichtbaren Dokumentausschnitt)"
#. Thinning
#: ../src/widgets/toolbox.cpp:4729
@@ -20302,12 +19104,8 @@ msgid "Thinning:"
msgstr "Ausdünnung:"
#: ../src/widgets/toolbox.cpp:4733
-msgid ""
-"How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 "
-"makes them broader, 0 makes width independent of velocity)"
-msgstr ""
-"Einfluss der Strichgeschwindigkeit auf die Linienbreite (> 0 macht schnelle "
-"Strichzüge dünner, < 0 breiter, 0 unabhängig von der Geschwindigkeit)"
+msgid "How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 makes them broader, 0 makes width independent of velocity)"
+msgstr "Einfluss der Strichgeschwindigkeit auf die Linienbreite (> 0 macht schnelle Strichzüge dünner, < 0 breiter, 0 unabhängig von der Geschwindigkeit)"
#. Angle
#: ../src/widgets/toolbox.cpp:4745
@@ -20331,12 +19129,8 @@ msgid "Angle:"
msgstr "Winkel:"
#: ../src/widgets/toolbox.cpp:4749
-msgid ""
-"The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if "
-"fixation = 0)"
-msgstr ""
-"Winkel der Stiftspitze (in Grad; 0 = horizontal; kein Einfluss, wenn "
-"Fixierung: 0)"
+msgid "The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if fixation = 0)"
+msgstr "Winkel der Stiftspitze (in Grad; 0 = horizontal; kein Einfluss, wenn Fixierung: 0)"
#. Fixation
#: ../src/widgets/toolbox.cpp:4763
@@ -20360,12 +19154,8 @@ msgid "Fixation:"
msgstr "Fixierung:"
#: ../src/widgets/toolbox.cpp:4767
-msgid ""
-"Angle behavior (0 = nib always perpendicular to stroke direction, 100 = "
-"fixed angle)"
-msgstr ""
-"Winkelverhalten (0 = Stift immer senkrecht zur Strichrichtung, 100 = fester "
-"Winkel)"
+msgid "Angle behavior (0 = nib always perpendicular to stroke direction, 100 = fixed angle)"
+msgstr "Winkelverhalten (0 = Stift immer senkrecht zur Strichrichtung, 100 = fester Winkel)"
#. Cap Rounding
#: ../src/widgets/toolbox.cpp:4779
@@ -20394,12 +19184,8 @@ msgstr "Linienenden:"
# !!! check
#: ../src/widgets/toolbox.cpp:4784
-msgid ""
-"Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = "
-"round caps)"
-msgstr ""
-"Erhöhen, um die Enden an Linien mehr hervorstehen zu lassen (0 = kein "
-"Abschluss, 1 = runder Abschluss)"
+msgid "Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = round caps)"
+msgstr "Erhöhen, um die Enden an Linien mehr hervorstehen zu lassen (0 = kein Abschluss, 1 = runder Abschluss)"
#. Tremor
#: ../src/widgets/toolbox.cpp:4796
@@ -20490,18 +19276,12 @@ msgid "Trace Background"
msgstr "Hintergrund verfolgen"
#: ../src/widgets/toolbox.cpp:4851
-msgid ""
-"Trace the lightness of the background by the width of the pen (white - "
-"minimum width, black - maximum width)"
-msgstr ""
-"Der Helligkeit des Hintergrunds mit der Breite des Stifts folgen (weiß - "
-"minimale Breite, schwarz - maximale Breite)"
+msgid "Trace the lightness of the background by the width of the pen (white - minimum width, black - maximum width)"
+msgstr "Der Helligkeit des Hintergrunds mit der Breite des Stifts folgen (weiß - minimale Breite, schwarz - maximale Breite)"
#: ../src/widgets/toolbox.cpp:4864
msgid "Use the pressure of the input device to alter the width of the pen"
-msgstr ""
-"Druckempfindlichkeit des Eingabegeräts benutzen, um die Strichbreite des "
-"Füllers zu beeinflussen"
+msgstr "Druckempfindlichkeit des Eingabegeräts benutzen, um die Strichbreite des Füllers zu beeinflussen"
#: ../src/widgets/toolbox.cpp:4876
msgid "Tilt"
@@ -20509,9 +19289,7 @@ msgstr "Neigung"
#: ../src/widgets/toolbox.cpp:4877
msgid "Use the tilt of the input device to alter the angle of the pen's nib"
-msgstr ""
-"Neigungsempfindlichkeit des Eingabegeräts benutzen, um den Winkel der "
-"Füllerspitze zu beeinflussen"
+msgstr "Neigungsempfindlichkeit des Eingabegeräts benutzen, um den Winkel der Füllerspitze zu beeinflussen"
#: ../src/widgets/toolbox.cpp:4890
msgid "Choose a preset"
@@ -20531,8 +19309,7 @@ msgstr "Anfang:"
#: ../src/widgets/toolbox.cpp:5169
msgid "The angle (in degrees) from the horizontal to the arc's start point"
-msgstr ""
-"Der Winkel (in Grad) von der Horizontalen bis zum Startpunkt des Bogens"
+msgstr "Der Winkel (in Grad) von der Horizontalen bis zum Startpunkt des Bogens"
#: ../src/widgets/toolbox.cpp:5181
msgid "End:"
@@ -20571,12 +19348,8 @@ msgid "Pick opacity"
msgstr "Wähle Transparenz"
#: ../src/widgets/toolbox.cpp:5307
-msgid ""
-"Pick both the color and the alpha (transparency) under cursor; otherwise, "
-"pick only the visible color premultiplied by alpha"
-msgstr ""
-"Farbe und Transparenz unter dem Cursor übernehmen; ansonsten nur die "
-"sichtbare Farbe mit dem Transparenzwert vormultipliziert übernehmen"
+msgid "Pick both the color and the alpha (transparency) under cursor; otherwise, pick only the visible color premultiplied by alpha"
+msgstr "Farbe und Transparenz unter dem Cursor übernehmen; ansonsten nur die sichtbare Farbe mit dem Transparenzwert vormultipliziert übernehmen"
#: ../src/widgets/toolbox.cpp:5310
msgid "Pick"
@@ -20587,11 +19360,8 @@ msgid "Assign opacity"
msgstr "Transparenz festlegen"
#: ../src/widgets/toolbox.cpp:5320
-msgid ""
-"If alpha was picked, assign it to selection as fill or stroke transparency"
-msgstr ""
-"Wenn Transparenz übernommenen wurde, diese als Füllung oder Kontur der "
-"Auswahl anwenden."
+msgid "If alpha was picked, assign it to selection as fill or stroke transparency"
+msgstr "Wenn Transparenz übernommenen wurde, diese als Füllung oder Kontur der Auswahl anwenden."
#: ../src/widgets/toolbox.cpp:5323
msgid "Assign"
@@ -20634,12 +19404,8 @@ msgid "Get limiting bounding box from selection"
msgstr "Begrenzungsrahmen aus Auswahl ermitteln"
#: ../src/widgets/toolbox.cpp:5621
-msgid ""
-"Set limiting bounding box (used to cut infinite lines) to the bounding box "
-"of current selection"
-msgstr ""
-"Begrenzungsrahmen (beschneidet unendliche Linien) gleich demjenigen der "
-"Auswahl"
+msgid "Set limiting bounding box (used to cut infinite lines) to the bounding box of current selection"
+msgstr "Begrenzungsrahmen (beschneidet unendliche Linien) gleich demjenigen der Auswahl"
#: ../src/widgets/toolbox.cpp:5633
msgid "Choose a line segment type"
@@ -20702,12 +19468,8 @@ msgid "Select font family (Alt+X to access)"
msgstr "Schriftart-Familie auswählen (Alt + X zum Setzen)"
#: ../src/widgets/toolbox.cpp:6687
-msgid ""
-"This font is currently not installed on your system. Inkscape will use the "
-"default font instead."
-msgstr ""
-"Diese Schriftart ist im Moment nicht auf Ihrem System installiert. Inkscape "
-"wird die Standardschriftart verwenden."
+msgid "This font is currently not installed on your system. Inkscape will use the default font instead."
+msgstr "Diese Schriftart ist im Moment nicht auf Ihrem System installiert. Inkscape wird die Standardschriftart verwenden."
#: ../src/widgets/toolbox.cpp:6723
msgid "Align left"
@@ -20795,12 +19557,8 @@ msgid "Fill Threshold"
msgstr "Füll-Schwellwert:"
#: ../src/widgets/toolbox.cpp:7186
-msgid ""
-"The maximum allowed difference between the clicked pixel and the neighboring "
-"pixels to be counted in the fill"
-msgstr ""
-"Der maximal erlaubte Unterschied zwischen dem angeklickten Pixel und den "
-"benachbarten Pixeln, um noch zur Füllung zu gehören"
+msgid "The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"
+msgstr "Der maximal erlaubte Unterschied zwischen dem angeklickten Pixel und den benachbarten Pixeln, um noch zur Füllung zu gehören"
#: ../src/widgets/toolbox.cpp:7211
msgid "Grow/shrink by"
@@ -20811,10 +19569,8 @@ msgid "Grow/shrink by:"
msgstr "Vergrößern/Verkleinern um:"
#: ../src/widgets/toolbox.cpp:7212
-msgid ""
-"The amount to grow (positive) or shrink (negative) the created fill path"
-msgstr ""
-"Erzeugten Füllungspfad vergrößern (positive) oder verkleinern (negativ)"
+msgid "The amount to grow (positive) or shrink (negative) the created fill path"
+msgstr "Erzeugten Füllungspfad vergrößern (positive) oder verkleinern (negativ)"
#: ../src/widgets/toolbox.cpp:7237
msgid "Close gaps"
@@ -20825,18 +19581,12 @@ msgid "Close gaps:"
msgstr "Lücken schließen:"
#: ../src/widgets/toolbox.cpp:7250
-msgid ""
-"Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
-"to change defaults)"
-msgstr ""
-"Die Parameter des Farbeimers auf Vorgabewerte zurücksetzen (Menü Datei » "
-"Inkscape-Einstellungen » Werkzeuge, um die Vorgabeeinstellungen zu ändern)"
+msgid "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
+msgstr "Die Parameter des Farbeimers auf Vorgabewerte zurücksetzen (Menü Datei » Inkscape-Einstellungen » Werkzeuge, um die Vorgabeeinstellungen zu ändern)"
#: ../share/extensions/dimension.py:99
msgid "Unable to process this object. Try changing it into a path first."
-msgstr ""
-"Fehler beim Bearbeiten dieses Objekts. Versuchen Sie, es in einen Pfad "
-"umzuwandeln."
+msgstr "Fehler beim Bearbeiten dieses Objekts. Versuchen Sie, es in einen Pfad umzuwandeln."
#. report to the Inkscape console using errormsg
#: ../share/extensions/draw_from_triangle.py:175
@@ -20872,21 +19622,12 @@ msgid "Area /px^2: "
msgstr "Gebiet /px^2:"
#: ../share/extensions/dxf_outlines.py:33
-msgid ""
-"Failed to import the numpy or numpy.linalg modules. These modules are "
-"required by this extension. Please install them and try again."
-msgstr ""
-"Der Import der numpy oder numpy.linalg-Module ist fehlgeschlagen. Diese "
-"Module werden von der Erweiterung benötigt. Bitte installieren Sie diese und "
-"versuchen es erneut."
+msgid "Failed to import the numpy or numpy.linalg modules. These modules are required by this extension. Please install them and try again."
+msgstr "Der Import der numpy oder numpy.linalg-Module ist fehlgeschlagen. Diese Module werden von der Erweiterung benötigt. Bitte installieren Sie diese und versuchen es erneut."
#: ../share/extensions/embedimage.py:74
-msgid ""
-"No xlink:href or sodipodi:absref attributes found, or they do not point to "
-"an existing file! Unable to embed image."
-msgstr ""
-"Keine Attribute xlink:href oder sodipodi:absref gefunden, bzw. zeigen diese "
-"nicht auf eine existierende Datei! Fehler beim Einbetten der Grafik."
+msgid "No xlink:href or sodipodi:absref attributes found, or they do not point to an existing file! Unable to embed image."
+msgstr "Keine Attribute xlink:href oder sodipodi:absref gefunden, bzw. zeigen diese nicht auf eine existierende Datei! Fehler beim Einbetten der Grafik."
#: ../share/extensions/embedimage.py:76
#, python-format
@@ -20895,35 +19636,20 @@ msgstr "Entschuldigung! Wir können %s nicht finden"
#: ../share/extensions/embedimage.py:101
#, python-format
-msgid ""
-"%s is not of type image/png, image/jpeg, image/bmp, image/gif, image/tiff, "
-"or image/x-icon"
-msgstr ""
-"%s ist nicht vom Tpye: image/png, image/jpeg, image/bmp, image/gif, image/"
-"tiff, or image/x-icon"
+msgid "%s is not of type image/png, image/jpeg, image/bmp, image/gif, image/tiff, or image/x-icon"
+msgstr "%s ist nicht vom Tpye: image/png, image/jpeg, image/bmp, image/gif, image/tiff, or image/x-icon"
#: ../share/extensions/export_gimp_palette.py:14
-msgid ""
-"The export_gpl.py module requires PyXML. Please download the latest version "
-"from http://pyxml.sourceforge.net/."
-msgstr ""
-"Das Modul export_gpl.py benötigt PyXML. Bitte laden Sie die aktuelle Version "
-"von http://pyxml.sourceforge.net/ herunter."
+msgid "The export_gpl.py module requires PyXML. Please download the latest version from http://pyxml.sourceforge.net/."
+msgstr "Das Modul export_gpl.py benötigt PyXML. Bitte laden Sie die aktuelle Version von http://pyxml.sourceforge.net/ herunter."
#: ../share/extensions/extractimage.py:66
msgid "Unable to find image data."
msgstr "Problem beim Auffinden der Bilderdaten"
#: ../share/extensions/inkex.py:66
-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 ""
-"Diese Erweiterung benötigt \"python-lxml\". Diese erhalten Sie unter "
-"\"http://cheeseshop.python.org/pypi/lxml/\" oder durch ein Packet ihres "
-"Packetmanagers (z.B.: sudo apt-get install python-lxml)"
+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 "Diese Erweiterung benötigt \"python-lxml\". Diese erhalten Sie unter \"http://cheeseshop.python.org/pypi/lxml/\" oder durch ein Packet ihres Packetmanagers (z.B.: sudo apt-get install python-lxml)"
#: ../share/extensions/inkex.py:222
#, python-format
@@ -20952,16 +19678,8 @@ msgid "Please first convert objects to paths! (Got [%s].)"
msgstr "Bitte zunächst Objekte in Pfade konvertieren! (Erhalte [%s])"
#: ../share/extensions/perspective.py:29
-msgid ""
-"Failed to import the numpy or numpy.linalg modules. These modules are "
-"required by this extension. Please install them and try again. On a Debian-"
-"like system this can be done with the command, sudo apt-get install python-"
-"numpy."
-msgstr ""
-"Der Import der numpy oder numpy.linalg-Module ist fehlgeschlagen. Diese "
-"Module werden von der Erweiterung benötigt. Bitte installieren Sie diese und "
-"versuchen es erneut. Auf einem Debian-Betriebssystem können Sie dafür "
-"folgenden Befehl nutzen: sudo apt-get install python-numpy"
+msgid "Failed to import the numpy or numpy.linalg modules. These modules are required by this extension. Please install them and try again. On a Debian-like system this can be done with the command, sudo apt-get install python-numpy."
+msgstr "Der Import der numpy oder numpy.linalg-Module ist fehlgeschlagen. Diese Module werden von der Erweiterung benötigt. Bitte installieren Sie diese und versuchen es erneut. Auf einem Debian-Betriebssystem können Sie dafür folgenden Befehl nutzen: sudo apt-get install python-numpy"
#: ../share/extensions/perspective.py:68
#: ../share/extensions/summersnight.py:43
@@ -20975,11 +19693,8 @@ msgstr ""
#: ../share/extensions/perspective.py:74
#: ../share/extensions/summersnight.py:50
-msgid ""
-"This extension requires that the second selected path be four nodes long."
-msgstr ""
-"Diese Erweiterung erwartet, dass der als zweites gewählte Pfad vier Knoten "
-"lang ist."
+msgid "This extension requires that the second selected path be four nodes long."
+msgstr "Diese Erweiterung erwartet, dass der als zweites gewählte Pfad vier Knoten lang ist."
#: ../share/extensions/perspective.py:99
#: ../share/extensions/summersnight.py:82
@@ -21009,14 +19724,8 @@ msgstr ""
" Versuchen sie den Befehl Pfad | Objekt in Pfad umwandeln."
#: ../share/extensions/polyhedron_3d.py:60
-msgid ""
-"Failed to import the numpy module. This module is required by this "
-"extension. Please install it and try again. On a Debian-like system this "
-"can be done with the command 'sudo apt-get install python-numpy'."
-msgstr ""
-"Der Import der benötigten numpy -Module ist fehlgeschlagen. Bitte "
-"installieren Sie diese und versuchen es erneut. Auf einem Debian-System "
-"können Sie dafür folgenden Befehl nutzen: sudo apt-get install python-numpy"
+msgid "Failed to import the numpy module. This module is required by this extension. Please install it and try again. On a Debian-like system this can be done with the command 'sudo apt-get install python-numpy'."
+msgstr "Der Import der benötigten numpy -Module ist fehlgeschlagen. Bitte installieren Sie diese und versuchen es erneut. Auf einem Debian-System können Sie dafür folgenden Befehl nutzen: sudo apt-get install python-numpy"
#: ../share/extensions/polyhedron_3d.py:331
msgid "No face data found in specified file."
@@ -21028,8 +19737,7 @@ msgstr "Versuchen Sie es mit \"kantendefiniert\" im Modeldatei-Reiter.\n"
#: ../share/extensions/polyhedron_3d.py:338
msgid "No edge data found in specified file."
-msgstr ""
-"In der spezifizierten Datei wurden keine Kantenbeschreibungen gefunden."
+msgstr "In der spezifizierten Datei wurden keine Kantenbeschreibungen gefunden."
#: ../share/extensions/polyhedron_3d.py:339
msgid "Try selecting \"Face Specified\" in the Model File tab.\n"
@@ -21037,13 +19745,8 @@ msgstr "Versuchen Sie es mit \"flächendefiniert\" im Modeldatei-Reiter.\n"
#. we cannot generate a list of faces from the edges without a lot of computation
#: ../share/extensions/polyhedron_3d.py:514
-msgid ""
-"Face Data Not Found. Ensure file contains face data, and check the file is "
-"imported as \"Face-Specified\" under the \"Model File\" tab.\n"
-msgstr ""
-"Keine Flächenbeschreibungen gefunden! Stellen Sie sicher, dass die Datei "
-"Flächendaten enthält und als \"flächendefiniert\" im Reiter \"Modeldatei\" "
-"importiert wird.\n"
+msgid "Face Data Not Found. Ensure file contains face data, and check the file is imported as \"Face-Specified\" under the \"Model File\" tab.\n"
+msgstr "Keine Flächenbeschreibungen gefunden! Stellen Sie sicher, dass die Datei Flächendaten enthält und als \"flächendefiniert\" im Reiter \"Modeldatei\" importiert wird.\n"
#: ../share/extensions/polyhedron_3d.py:516
msgid "Internal Error. No view type selected\n"
@@ -21093,7 +19796,8 @@ msgstr "Maximale Segmentlänge (px)"
#: ../share/extensions/addnodes.inx.h:6
#: ../share/extensions/convert2dashes.inx.h:2
-#: ../share/extensions/edge3d.inx.h:6 ../share/extensions/flatten.inx.h:3
+#: ../share/extensions/edge3d.inx.h:6
+#: ../share/extensions/flatten.inx.h:3
#: ../share/extensions/fractalize.inx.h:2
#: ../share/extensions/interp_att_g.inx.h:10
#: ../share/extensions/markers_strokepaint.inx.h:2
@@ -21101,7 +19805,8 @@ msgstr "Maximale Segmentlänge (px)"
#: ../share/extensions/radiusrand.inx.h:4
#: ../share/extensions/rubberstretch.inx.h:3
#: ../share/extensions/straightseg.inx.h:2
-#: ../share/extensions/summersnight.inx.h:2 ../share/extensions/whirl.inx.h:2
+#: ../share/extensions/summersnight.inx.h:2
+#: ../share/extensions/whirl.inx.h:2
msgid "Modify Path"
msgstr "Pfad modifizieren"
@@ -21143,8 +19848,7 @@ msgstr "Corel DRAW Compressed Exchange Datei Eingabe"
#: ../share/extensions/ccx_input.inx.h:3
msgid "Open compressed exchange files saved in Corel DRAW"
-msgstr ""
-"Öffnen einer Presentation Exchange Datei, die in Corel DRAW gespeichert wurde"
+msgstr "Öffnen einer Presentation Exchange Datei, die in Corel DRAW gespeichert wurde"
#: ../share/extensions/cdr_input.inx.h:1
msgid "Corel DRAW 7-X4 files (*.cdr)"
@@ -21192,8 +19896,7 @@ msgstr "Corel DRAW Presentations Exchange Datei Eingabe"
#: ../share/extensions/cmx_input.inx.h:3
msgid "Open presentation exchange files saved in Corel DRAW"
-msgstr ""
-"Öffnen einer Presentation Exchange Datei, die in Corel DRAW gespeichert wurde"
+msgstr "Öffnen einer Presentation Exchange Datei, die in Corel DRAW gespeichert wurde"
#: ../share/extensions/color_brighter.inx.h:1
msgid "Brighter"
@@ -21296,29 +19999,21 @@ msgid "Dia Input"
msgstr "Dia einlesen"
#: ../share/extensions/dia.inx.h:4
-msgid ""
-"In order to import Dia files, Dia itself must be installed. You can get Dia "
-"at http://live.gnome.org/Dia"
-msgstr ""
-"Um Dia-Dateien zu importieren, muss Dia selbst installiert sein. Sie können "
-"Dia von http://live.gnome.org/Dia herunterladen."
+msgid "In order to import Dia files, Dia itself must be installed. You can get Dia at http://live.gnome.org/Dia"
+msgstr "Um Dia-Dateien zu importieren, muss Dia selbst installiert sein. Sie können Dia von http://live.gnome.org/Dia herunterladen."
#: ../share/extensions/dia.inx.h:5
-msgid ""
-"The dia2svg.sh script should be installed with your Inkscape distribution. "
-"If you do not have it, there is likely to be something wrong with your "
-"Inkscape installation."
-msgstr ""
-"Das Skript »dia2svg.sh« sollte in Ihrer Inkscape-Installation vorhanden sein. "
-"Wenn Sie es nicht haben, dann ist wahrscheinlich etwas mit Ihrer Inkscape-"
-"Installation nicht in Ordnung."
+msgid "The dia2svg.sh script should be installed with your Inkscape distribution. If you do not have it, there is likely to be something wrong with your Inkscape installation."
+msgstr "Das Skript »dia2svg.sh« sollte in Ihrer Inkscape-Installation vorhanden sein. Wenn Sie es nicht haben, dann ist wahrscheinlich etwas mit Ihrer Inkscape-Installation nicht in Ordnung."
#: ../share/extensions/dimension.inx.h:1
msgid "Dimensions"
msgstr "Dimensionen"
-#: ../share/extensions/dimension.inx.h:2 ../share/extensions/dots.inx.h:4
-#: ../share/extensions/handles.inx.h:2 ../share/extensions/measure.inx.h:11
+#: ../share/extensions/dimension.inx.h:2
+#: ../share/extensions/dots.inx.h:4
+#: ../share/extensions/handles.inx.h:2
+#: ../share/extensions/measure.inx.h:11
msgid "Visualize Path"
msgstr "Pfad visualisieren"
@@ -21474,19 +20169,15 @@ msgstr "Symmediane"
#: ../share/extensions/draw_from_triangle.inx.h:35
msgid ""
-"This extension draws constructions about a triangle defined by the first 3 "
-"nodes of a selected path. You may select one of preset objects or create "
-"your own ones.\n"
+"This extension draws constructions about a triangle defined by the first 3 nodes of a selected path. You may select one of preset objects or create your own ones.\n"
" \n"
"All units are the Inkscape's pixel unit. Angles are all in radians.\n"
-"You can specify a point by trilinear coordinates or by a triangle centre "
-"function.\n"
+"You can specify a point by trilinear coordinates or by a triangle centre function.\n"
"Enter as functions of the side length or angles.\n"
"Trilinear elements should be separated by a colon: ':'.\n"
"Side lengths are represented as 's_a', 's_b' and 's_c'.\n"
"Angles corresponding to these are 'a_a', 'a_b', and 'a_c'.\n"
-"You can also use the semi-perimeter and area of the triangle as constants. "
-"Write 'area' or 'semiperim' for these.\n"
+"You can also use the semi-perimeter and area of the triangle as constants. Write 'area' or 'semiperim' for these.\n"
"\n"
"You can use any standard Python math function:\n"
"ceil(x); fabs(x); floor(x); fmod(x,y); frexp(x); ldexp(x,i); \n"
@@ -21498,26 +20189,18 @@ msgid ""
"Also available are the inverse trigonometric functions:\n"
"sec(x); csc(x); cot(x)\n"
"\n"
-"You can specify the radius of a circle around a custom point using a "
-"formula, which may also contain the side lengths, angles, etc. You can also "
-"plot the isogonal and isotomic conjugate of the point. Be aware that this "
-"may cause a divide-by-zero error for certain points.\n"
+"You can specify the radius of a circle around a custom point using a formula, which may also contain the side lengths, angles, etc. You can also plot the isogonal and isotomic conjugate of the point. Be aware that this may cause a divide-by-zero error for certain points.\n"
" "
msgstr ""
-"Diese Erweiterung zeichnet Geometrien bezüglich eines Dreiecks definiert "
-"durch die ersten drei Punkte eines Pfades. Sie können vorgegebene Objekte "
-"wählen oder eigene erstellen.\n"
+"Diese Erweiterung zeichnet Geometrien bezüglich eines Dreiecks definiert durch die ersten drei Punkte eines Pfades. Sie können vorgegebene Objekte wählen oder eigene erstellen.\n"
" \n"
-"Alle Längeneinheiten sind Inkscape-Pixel, Winkel werden in Radiant "
-"angegeben.\n"
-"Ein Punkt kann in trilinearen Koordinaten angegeben oder durch eine "
-"Dreieckszentrumfunktion definiert sein.\n"
+"Alle Längeneinheiten sind Inkscape-Pixel, Winkel werden in Radiant angegeben.\n"
+"Ein Punkt kann in trilinearen Koordinaten angegeben oder durch eine Dreieckszentrumfunktion definiert sein.\n"
"Funktionsparameter sind Seitenlängen und Winkel.\n"
"Trilineare Koordinaten werden durch Doppelpunkt ':' getrennt.\n"
"Seitenlängen werden durch 's_a', 's_b' und 's_c' repräsentiert.\n"
"Die korrespondierenden Winkel sind 'a_a', 'a_b' und 'a_c'.\n"
-"Mögliche Konstanten sind auch halber Umfang 'semiperim' und Fläche 'area' "
-"des Dreiecks.\n"
+"Mögliche Konstanten sind auch halber Umfang 'semiperim' und Fläche 'area' des Dreiecks.\n"
"\n"
"Erlaubt sind alle mathematischen Standardfunktionen in Python:\n"
"ceil(x); fabs(x); floor(x); fmod(x,y); frexp(x); ldexp(x,i); \n"
@@ -21529,11 +20212,7 @@ msgstr ""
"Möglich sind auch die Inversen der trigonometrischen Funktionen:\n"
"sec(x); csc(x); cot(x)\n"
"\n"
-"Der Radius eines Kreises um einen gegebenen Punkt kann durch eine Fomel mit "
-"den Parametern Seitenlänge, Winkel, etc. gegeben sein. Es ist ebenfalls "
-"möglich, die isogonal und isotomisch Konjugierten dieses Punktes zu "
-"zeichnen. Beachten Sie, dass es bei bestimmten Punkten zu einem Division-"
-"durch-Null-Fehler kommen kann.\n"
+"Der Radius eines Kreises um einen gegebenen Punkt kann durch eine Fomel mit den Parametern Seitenlänge, Winkel, etc. gegeben sein. Es ist ebenfalls möglich, die isogonal und isotomisch Konjugierten dieses Punktes zu zeichnen. Beachten Sie, dass es bei bestimmten Punkten zu einem Division-durch-Null-Fehler kommen kann.\n"
" "
#: ../share/extensions/draw_from_triangle.inx.h:57
@@ -21555,10 +20234,8 @@ msgstr ""
"- AutoCAD R13 und neuer.\n"
"- Längeneinheiten der Zeichnung sind mm.\n"
"- SVG-Längeneinheiten sind Pixel bei 90 dpi.\n"
-"- Ebenen werden nur erhalten bei \"Datei &gt Öffnen\", nicht bei "
-"\"Importieren\".\n"
-"- BLOCKS werden nicht voll unterstützt. Verwenden Sie AutoCAD Explode "
-"Blocks, falls nötig."
+"- Ebenen werden nur erhalten bei \"Datei &gt Öffnen\", nicht bei \"Importieren\".\n"
+"- BLOCKS werden nicht voll unterstützt. Verwenden Sie AutoCAD Explode Blocks, falls nötig."
#: ../share/extensions/dxf_input.inx.h:6
msgid "AutoCAD DXF R13 (*.dxf)"
@@ -21590,15 +20267,13 @@ msgid ""
"- assume svg drawing is in pixels, at 90 dpi.\n"
"- assume dxf drawing is in mm.\n"
"- only LWPOLYLINE and SPLINE elements are supported.\n"
-"- ROBO-Master option is a specialized spline readable only by ROBO-Master "
-"and AutoDesk viewers, not Inkscape."
+"- ROBO-Master option is a specialized spline readable only by ROBO-Master and AutoDesk viewers, not Inkscape."
msgstr ""
"- AutoCAD R13-Format.\n"
"- Längeneinheiten der dxf-Zeichnung sind mm.\n"
"- SVG-Längeneinheiten sind Pixel bei 90 dpi.\n"
"- Es werden nur LWPOLYLINE- und SPLINE-Elemente unterstützt.\n"
-"- Die Option ROBO-Master bezieht sich auf spezielle Splines, die nur in ROBO-"
-"Master und AutoDesk, nicht aber in Inkscape, zur Verfügung stehen."
+"- Die Option ROBO-Master bezieht sich auf spezielle Splines, die nur in ROBO-Master und AutoDesk, nicht aber in Inkscape, zur Verfügung stehen."
#: ../share/extensions/dxf_outlines.inx.h:6
msgid "Desktop Cutting Plotter"
@@ -21626,9 +20301,7 @@ msgstr "DXF-Datei von pstoedit geschrieben"
#: ../share/extensions/dxf_output.inx.h:4
msgid "pstoedit must be installed to run; see http://www.pstoedit.net/pstoedit"
-msgstr ""
-"pstoedit muss installiert sein, um diese Funktion nutzen zu können. Siehe "
-"http://www.pstoedit.net/pstoedit"
+msgstr "pstoedit muss installiert sein, um diese Funktion nutzen zu können. Siehe http://www.pstoedit.net/pstoedit"
#: ../share/extensions/edge3d.inx.h:1
msgid "Blur height"
@@ -21799,9 +20472,7 @@ msgstr "Funktionen"
#: ../share/extensions/funcplot.inx.h:8
msgid "Isotropic scaling (uses smallest of width/xrange or height/yrange)"
-msgstr ""
-"Isotropische Skalierung (benutzt Kleinstes: Breite/x-Bereich oder Höhe/y-"
-"Bereich)"
+msgstr "Isotropische Skalierung (benutzt Kleinstes: Breite/x-Bereich oder Höhe/y-Bereich)"
#: ../share/extensions/funcplot.inx.h:9
msgid "Multiply X range by 2*pi"
@@ -21835,8 +20506,7 @@ msgstr ""
"Aus diesem bestimmen sich X- und Y-Skala.\n"
"\n"
"In Polarkoordinaten:\n"
-" Start- und Endwert in X bestimmen den Winkelbereich in Radiant.n Die X-"
-"Skala wird so gesetzt, dass rechte und linke Rechteckkante bei +/-1 liegen.\n"
+" Start- und Endwert in X bestimmen den Winkelbereich in Radiant.n Die X-Skala wird so gesetzt, dass rechte und linke Rechteckkante bei +/-1 liegen.\n"
" Isotropische Skalierung ist ausgeschaltet.\n"
" Erste Ableitungen werden nummerisch bestimmt."
@@ -21852,12 +20522,7 @@ msgid ""
"cosh(x); sinh(x); tanh(x).\n"
"\n"
"The constants pi and e are also available."
-msgstr ""
-"Die folgenden Standard-Mathematik-Funktionen von Python sind verfügbar: ceil"
-"(x); fabs(x); floor(x); fmod(x,y); frexp(x); ldexp(x,i); modf(x); exp(x); log"
-"(x [, base]); log10(x); pow(x,y); sqrt(x); acos(x); asin(x); atan(x); atan2"
-"(y,x); hypot(x,y); cos(x); sin(x); tan(x); degrees(x); radians(x); cosh(x); "
-"sinh(x); tanh(x). Die Konstanten pi und e sind ebenfalls verfügbar."
+msgstr "Die folgenden Standard-Mathematik-Funktionen von Python sind verfügbar: ceil(x); fabs(x); floor(x); fmod(x,y); frexp(x); ldexp(x,i); modf(x); exp(x); log(x [, base]); log10(x); pow(x,y); sqrt(x); acos(x); asin(x); atan(x); atan2(y,x); hypot(x,y); cos(x); sin(x); tan(x); degrees(x); radians(x); cosh(x); sinh(x); tanh(x). Die Konstanten pi und e sind ebenfalls verfügbar."
#: ../share/extensions/funcplot.inx.h:31
msgid "Start X value"
@@ -21923,15 +20588,11 @@ msgstr "Kartesisches Gitter"
#: ../share/extensions/grid_cartesian.inx.h:3
msgid "Halve X Subsubdiv. Frequency after 'n' Subdivs. (log only)"
-msgstr ""
-"Halbiert X-Unter-Unterteilungsfrequenz nach n Unterteilungen. (nur "
-"Logarithmus) "
+msgstr "Halbiert X-Unter-Unterteilungsfrequenz nach n Unterteilungen. (nur Logarithmus) "
#: ../share/extensions/grid_cartesian.inx.h:4
msgid "Halve Y Subsubdiv. Frequency after 'n' Subdivs. (log only)"
-msgstr ""
-"Halbiert Y-Unter-Unterteilungsfrequenz nach n Unterteilungen. (nur "
-"Logarithmus) "
+msgstr "Halbiert Y-Unter-Unterteilungsfrequenz nach n Unterteilungen. (nur Logarithmus) "
#: ../share/extensions/grid_cartesian.inx.h:5
msgid "Logarithmic X Subdiv. (Base given by entry above)"
@@ -22219,12 +20880,8 @@ msgid "Float Number"
msgstr "Fließkommazahl"
#: ../share/extensions/interp_att_g.inx.h:7
-msgid ""
-"If you select \"Other\", you must know the SVG attributes to identify here "
-"this \"other\":"
-msgstr ""
-"Falls Sie \"Andere\" wählen, so müssen Sie diese Anderen durch deren SVG-"
-"Attribute spezifizieren:"
+msgid "If you select \"Other\", you must know the SVG attributes to identify here this \"other\":"
+msgstr "Falls Sie \"Andere\" wählen, so müssen Sie diese Anderen durch deren SVG-Attribute spezifizieren:"
#: ../share/extensions/interp_att_g.inx.h:8
msgid "Integer Number"
@@ -22264,13 +20921,8 @@ msgid "Tag"
msgstr "Markierung"
#: ../share/extensions/interp_att_g.inx.h:20
-msgid ""
-"This effect applies a value for any interpolatable attribute for all "
-"elements inside the selected group or for all elements in a multiple "
-"selection"
-msgstr ""
-"Dieser Effekt setzt ein beliebiges interpolierbares Attribut für jedes "
-"Element innerhalb einer Gruppe oder einer mehrteiligen Auswahl"
+msgid "This effect applies a value for any interpolatable attribute for all elements inside the selected group or for all elements in a multiple selection"
+msgstr "Dieser Effekt setzt ein beliebiges interpolierbares Attribut für jedes Element innerhalb einer Gruppe oder einer mehrteiligen Auswahl"
#: ../share/extensions/interp_att_g.inx.h:21
msgid "Transformation"
@@ -22416,15 +21068,8 @@ msgid "Sentences per paragraph"
msgstr "Sätze pro Absatz"
#: ../share/extensions/lorem_ipsum.inx.h:6
-msgid ""
-"This effect creates the standard \"Lorem Ipsum\" pseudolatin placeholder "
-"text. If a flowed text is selected, Lorem Ipsum is added to it; otherwise a "
-"new flowed text object, the size of the page, is created in a new layer."
-msgstr ""
-"Dieser Effekt erstellt den standard \"Lorem Ipsum\" Platzhaltetext. Wenn ein "
-"Fließtext ausgewählt ist, wird Lorem Ipsum angehängt; ansonsten wird ein "
-"neues Fließtextobjekt in einer neuen Ebene erzeugt, das so groß ist wie die "
-"Seite."
+msgid "This effect creates the standard \"Lorem Ipsum\" pseudolatin placeholder text. If a flowed text is selected, Lorem Ipsum is added to it; otherwise a new flowed text object, the size of the page, is created in a new layer."
+msgstr "Dieser Effekt erstellt den standard \"Lorem Ipsum\" Platzhaltetext. Wenn ein Fließtext ausgewählt ist, wird Lorem Ipsum angehängt; ansonsten wird ein neues Fließtextobjekt in einer neuen Ebene erzeugt, das so groß ist wie die Seite."
#: ../share/extensions/markers_strokepaint.inx.h:1
msgid "Color Markers to Match Stroke"
@@ -22460,21 +21105,11 @@ msgid "Scale Factor (Drawing:Real Length) = 1:"
msgstr "Maßstab (Zeichnung:Wirkliche Länge) = 1:"
#: ../share/extensions/measure.inx.h:10
-msgid ""
-"This effect measures the length of the selected path and adds it as a text-"
-"on-path object with the selected unit. The number of significant digits can "
-"be controlled by the Precision field. The Offset field controls the distance "
-"from the text to the path. The Scale factor can be used to make measurements "
-"in scaled drawings. For example, if 1 cm in the drawing equals 2.5 m in the "
-"real world, Scale must be set to 250."
-msgstr ""
-"Dieser Effekt misst die Länge eines Pfades in den gewählten Einheiten und "
-"fügt diese als Text-auf-Pfad-Objekt an. Die Anzahl der signifikanten Stellen "
-"wird durch \"Präzision\" gewählt. Das Feld \"Versatz\" kontrolliert die "
-"Entfernung Text-Pfad. Der \"Maßstab\" kann zur Messung skalierter Pfade "
-"verwendet werden (M = 250 -> 1cm entspricht 2,5m)."
+msgid "This effect measures the length of the selected path and adds it as a text-on-path object with the selected unit. The number of significant digits can be controlled by the Precision field. The Offset field controls the distance from the text to the path. The Scale factor can be used to make measurements in scaled drawings. For example, if 1 cm in the drawing equals 2.5 m in the real world, Scale must be set to 250."
+msgstr "Dieser Effekt misst die Länge eines Pfades in den gewählten Einheiten und fügt diese als Text-auf-Pfad-Objekt an. Die Anzahl der signifikanten Stellen wird durch \"Präzision\" gewählt. Das Feld \"Versatz\" kontrolliert die Entfernung Text-Pfad. Der \"Maßstab\" kann zur Messung skalierter Pfade verwendet werden (M = 250 -> 1cm entspricht 2,5m)."
-#: ../share/extensions/motion.inx.h:1 ../share/extensions/restack.inx.h:1
+#: ../share/extensions/motion.inx.h:1
+#: ../share/extensions/restack.inx.h:1
msgid "Angle"
msgstr "Winkel"
@@ -22504,9 +21139,7 @@ msgstr "Ende t-Wert"
#: ../share/extensions/param_curves.inx.h:4
msgid "Isotropic scaling (uses smallest: width/xrange or height/yrange)"
-msgstr ""
-"Isotropische Skalierung (benutzt Kleinstes: Breite/x-Bereich oder Höhe/y-"
-"Bereich)"
+msgstr "Isotropische Skalierung (benutzt Kleinstes: Breite/x-Bereich oder Höhe/y-Bereich)"
#: ../share/extensions/param_curves.inx.h:5
msgid "Multiply t-range by 2*pi"
@@ -22595,14 +21228,8 @@ msgid "Space between copies:"
msgstr "Abstand zwischen Kopien:"
#: ../share/extensions/pathalongpath.inx.h:16
-msgid ""
-"This effect bends a pattern object along arbitrary \"skeleton\" paths. The "
-"pattern is the topmost object in the selection. (groups of paths/shapes/"
-"clones... allowed)"
-msgstr ""
-"Dieser Effekt biegt ein Muster entlang eines beliebigen \"Gerüst-\"Pfades. "
-"Das Muster ist das oberste Objekt in einer Auswahl (Gruppierungen von Pfaden/"
-"Formen/Klonen... sind erlaubt)."
+msgid "This effect bends a pattern object along arbitrary \"skeleton\" paths. The pattern is the topmost object in the selection. (groups of paths/shapes/clones... allowed)"
+msgstr "Dieser Effekt biegt ein Muster entlang eines beliebigen \"Gerüst-\"Pfades. Das Muster ist das oberste Objekt in einer Auswahl (Gruppierungen von Pfaden/Formen/Klonen... sind erlaubt)."
#: ../share/extensions/pathscatter.inx.h:1
msgid "Cloned"
@@ -22629,14 +21256,8 @@ msgid "Stretch spaces to fit skeleton length"
msgstr "Leerzeichen strecken, um an Gerüstlänge zu passen"
#: ../share/extensions/pathscatter.inx.h:14
-msgid ""
-"This effect scatters a pattern along arbitrary \"skeleton\" paths. The "
-"pattern must be the topmost object in the selection. Groups of paths, "
-"shapes, clones are allowed."
-msgstr ""
-"Dieser Effekt verstreut ein Muster entlang eines beliebigen \"Gerüst-"
-"\"Pfades. Das Muster ist das oberste Objekt in einer Auswahl (Gruppierungen "
-"von Pfaden/Formen/Klonen... sind erlaubt)."
+msgid "This effect scatters a pattern along arbitrary \"skeleton\" paths. The pattern must be the topmost object in the selection. Groups of paths, shapes, clones are allowed."
+msgstr "Dieser Effekt verstreut ein Muster entlang eines beliebigen \"Gerüst-\"Pfades. Das Muster ist das oberste Objekt in einer Auswahl (Gruppierungen von Pfaden/Formen/Klonen... sind erlaubt)."
#: ../share/extensions/perfectboundcover.inx.h:1
msgid "Bleed (in)"
@@ -23027,12 +21648,8 @@ msgid "Shift nodes"
msgstr "Knoten verschieben"
#: ../share/extensions/radiusrand.inx.h:7
-msgid ""
-"This effect randomly shifts the nodes (and optionally node handles) of the "
-"selected path."
-msgstr ""
-"Dieser Effekt verschiebt Knoten (und optional die Knotenanfasser) des "
-"ausgewählten Pfades zufällig."
+msgid "This effect randomly shifts the nodes (and optionally node handles) of the selected path."
+msgstr "Dieser Effekt verschiebt Knoten (und optional die Knotenanfasser) des ausgewählten Pfades zufällig."
#: ../share/extensions/radiusrand.inx.h:8
msgid "Use normal distribution"
@@ -23243,11 +21860,13 @@ msgstr "Segmente begradigen"
msgid "Envelope"
msgstr "Umhüllung"
-#: ../share/extensions/svg2xaml.inx.h:1 ../share/extensions/xaml2svg.inx.h:1
+#: ../share/extensions/svg2xaml.inx.h:1
+#: ../share/extensions/xaml2svg.inx.h:1
msgid "Microsoft XAML (*.xaml)"
msgstr "Microsoft XAML (*.xaml)"
-#: ../share/extensions/svg2xaml.inx.h:2 ../share/extensions/xaml2svg.inx.h:2
+#: ../share/extensions/svg2xaml.inx.h:2
+#: ../share/extensions/xaml2svg.inx.h:2
msgid "Microsoft's GUI definition format"
msgstr "Microsoft's GUI definition format"
@@ -23260,24 +21879,16 @@ msgid "Compressed Inkscape SVG with media (*.zip)"
msgstr "Komprimiertes Inkscape-SVG mit Medien (*.zip)"
#: ../share/extensions/svg_and_media_zip_output.inx.h:2
-msgid ""
-"Inkscape's native file format compressed with Zip and including all media "
-"files"
-msgstr ""
-"Inkscapes natürliches Dateiformat, mit Zip komprimiert, inklusive aller "
-"Medien"
+msgid "Inkscape's native file format compressed with Zip and including all media files"
+msgstr "Inkscapes natürliches Dateiformat, mit Zip komprimiert, inklusive aller Medien"
#: ../share/extensions/svg_and_media_zip_output.inx.h:3
msgid "ZIP Output"
msgstr "ZIP-Ausgabe"
#: ../share/extensions/svgcalendar.inx.h:1
-msgid ""
-"(Select your system encoding. More information at http://docs.python.org/"
-"library/codecs.html#standard-encodings)"
-msgstr ""
-"(Wählen Sie die Systemkodierung. Mehr Informationen dazu unter http://docs."
-"python.org/library/codecs.html#standard-encodings)"
+msgid "(Select your system encoding. More information at http://docs.python.org/library/codecs.html#standard-encodings)"
+msgstr "(Wählen Sie die Systemkodierung. Mehr Informationen dazu unter http://docs.python.org/library/codecs.html#standard-encodings)"
#: ../share/extensions/svgcalendar.inx.h:2
msgid "(The day names list must start from Sunday)"
@@ -23313,12 +21924,8 @@ msgid "Fill empty day boxes with next month's days"
msgstr "Fülle die leeren Tages-Felder mit den Tagen des nächsten Monats"
#: ../share/extensions/svgcalendar.inx.h:11
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Januar Februar März April Mai Juni Juli August September Oktober November "
-"Dezember"
+msgid "January February March April May June July August September October November December"
+msgstr "Januar Februar März April Mai Juni Juli August September Oktober November Dezember"
#: ../share/extensions/svgcalendar.inx.h:13
msgid "Localization"
@@ -23375,8 +21982,7 @@ msgstr "Sonntag"
#: ../share/extensions/svgcalendar.inx.h:27
msgid "The options below have no influence when the above is checked."
-msgstr ""
-"Ist das obere Häckchen gesetzt, sind die unteren Optionen bedeutungslos."
+msgstr "Ist das obere Häckchen gesetzt, sind die unteren Optionen bedeutungslos."
#: ../share/extensions/svgcalendar.inx.h:28
msgid "Week start day"
@@ -23521,12 +22127,8 @@ msgid "Compatibility with previews code to this event"
msgstr "Kompatibilität des Vorschaufunktion mit diesem Ereignis"
#: ../share/extensions/web-set-att.inx.h:4
-msgid ""
-"If you want to set more than one attribute, you must separate this with a "
-"space, and only with a space."
-msgstr ""
-"Wenn Sie mehr als ein Attribut setzen wollen, müssen Sie diese mit einzelnen "
-"Leerzeichen trennen. "
+msgid "If you want to set more than one attribute, you must separate this with a space, and only with a space."
+msgstr "Wenn Sie mehr als ein Attribut setzen wollen, müssen Sie diese mit einzelnen Leerzeichen trennen. "
#: ../share/extensions/web-set-att.inx.h:6
#: ../share/extensions/web-transmit-att.inx.h:6
@@ -23557,25 +22159,16 @@ msgstr "Die Werteliste muss die gleiche Länge wie die Attributenliste haben!"
#: ../share/extensions/web-set-att.inx.h:12
#: ../share/extensions/web-transmit-att.inx.h:10
msgid "The next parameter is useful when you select more than two elements"
-msgstr ""
-"Der nächste Parameter ist nützlich, wenn Sie mehr als zwei Elemente wählen."
+msgstr "Der nächste Parameter ist nützlich, wenn Sie mehr als zwei Elemente wählen."
#: ../share/extensions/web-set-att.inx.h:13
#: ../share/extensions/web-transmit-att.inx.h:11
-msgid ""
-"This effect adds a feature visible (or usable) only on a SVG enabled web "
-"browser (like Firefox)."
-msgstr ""
-"Dieser Effekt fügt ein Merkmal hinzu, dass nur in SVG-fähigen Browsern (etwa "
-"Firefox) sicht- oder nutzbar ist."
+msgid "This effect adds a feature visible (or usable) only on a SVG enabled web browser (like Firefox)."
+msgstr "Dieser Effekt fügt ein Merkmal hinzu, dass nur in SVG-fähigen Browsern (etwa Firefox) sicht- oder nutzbar ist."
#: ../share/extensions/web-set-att.inx.h:14
-msgid ""
-"This effect sets one or more attributes in the second selected element, when "
-"a defined event occurs on the first selected element."
-msgstr ""
-"Dieser Effekt setzt ein oder mehrere Attribute im zweiten markierten "
-"Element, wenn ein bestimmtes Event bei dem zuerst ausgewählten eintritt."
+msgid "This effect sets one or more attributes in the second selected element, when a defined event occurs on the first selected element."
+msgstr "Dieser Effekt setzt ein oder mehrere Attribute im zweiten markierten Element, wenn ein bestimmtes Event bei dem zuerst ausgewählten eintritt."
#: ../share/extensions/web-set-att.inx.h:15
msgid "Value to set"
@@ -23650,12 +22243,8 @@ msgid "Attribute to transmit"
msgstr "Attribute zum Senden"
#: ../share/extensions/web-transmit-att.inx.h:4
-msgid ""
-"If you want to transmit more than one attribute, you should separate this "
-"with a space, and only with a space."
-msgstr ""
-"Wenn Sie mehr als nur ein Attribut übertragen wollen, müssen Sie diese mit "
-"einzelnen Leerzeichen trennen. "
+msgid "If you want to transmit more than one attribute, you should separate this with a space, and only with a space."
+msgstr "Wenn Sie mehr als nur ein Attribut übertragen wollen, müssen Sie diese mit einzelnen Leerzeichen trennen. "
#: ../share/extensions/web-transmit-att.inx.h:8
msgid "Source and destination of transmitting"
@@ -23666,12 +22255,8 @@ msgid "The first selected transmits to all others"
msgstr "Das zuerst Gewählte überträgt zu allen anderen"
#: ../share/extensions/web-transmit-att.inx.h:12
-msgid ""
-"This effect transmits one or more attributes from the first selected element "
-"to the second when an event occurs."
-msgstr ""
-"Dieser Effekt setzt Attribute im zweiten ausgewählten Element, wenn ein "
-"Ereignis bei dem ersten Element eintritt."
+msgid "This effect transmits one or more attributes from the first selected element to the second when an event occurs."
+msgstr "Dieser Effekt setzt Attribute im zweiten ausgewählten Element, wenn ein Ereignis bei dem ersten Element eintritt."
#: ../share/extensions/web-transmit-att.inx.h:13
msgid "Transmit Attributes"
@@ -23714,10 +22299,8 @@ msgstr "XAML einlesen"
#~ msgid "Error saving a temporary copy"
#~ msgstr "Fehler beim Speichern der Zwischenkopie"
-
#~ msgid "Open Clip Art Login"
#~ msgstr "Login bei Open Clip Art"
-
#~ msgid ""
#~ "Error exporting the document. Verify if the server name, username and "
#~ "password are correct, if the server has support for webdav and verify if "
@@ -23726,40 +22309,28 @@ msgstr "XAML einlesen"
#~ "Fehler beim Exportieren des Dokumentes. Vergewissern Sie sich das "
#~ "Servername, Benutzername und Passwort korrekt sind. Zudem muß der Server "
#~ "WEBDAV unterstützen und eine gültige Lizenz ausgewählt sein."
-
#~ msgid "Document exported..."
#~ msgstr "Dokument exportiert..."
-
#~ msgid "Autosave"
#~ msgstr "Automatische Sicherung"
-
#~ msgid "File"
#~ msgstr "_Datei"
-
#~ msgid "Username:"
#~ msgstr "_Benutzername:"
-
#~ msgid "Password:"
#~ msgstr "_Passwort:"
-
#~ msgid "Export To Open Clip Art Library"
#~ msgstr "In die Open Clip Art Library exportieren"
-
#~ msgid "Export this document to Open Clip Art Library"
#~ msgstr "Dieses Dokument zur Open Clip Art Library exportieren"
-
#~ msgid "Light x-Position"
#~ msgstr "Licht x-Position"
-
#~ msgid "Light y-Position"
#~ msgstr "Licht y-Position"
-
#~ msgid "Light z-Position"
#~ msgstr "Licht z-Position"
-
#~ msgid "Line Thickness / px"
#~ msgstr "Liniendicke / px"
-
#~ msgid "Scaling Factor"
#~ msgstr "Skalierungsfaktor"
@@ -23786,202 +22357,143 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "restack|Top"
#~ msgstr "Umschichten"
-
#~ msgid "Gelatine"
#~ msgstr "Gelatine"
-
#~ msgid "Colorizable filling with gelatine like turbulence and transparency"
#~ msgstr "Farbige Füllung mit Transparenz wie bewegte Flüssigkeit"
-
#~ msgid "Monochrome positive"
#~ msgstr "Schwarzweisses Positiv"
-
#~ msgid "Convert to a Colorizable transparent positive"
#~ msgstr "In einfärbbares transparentes Positiv umwandeln"
-
#~ msgid "Monochrome negative"
#~ msgstr "Schwarzweisses Negativ"
-
#~ msgid ""
#~ "Invert and make the lightest parts of the object progressively transparent"
#~ msgstr ""
#~ "Invertieren und die hellsten Bereiche des Objekts fortschreitend "
#~ "transparenter werden lassen"
-
#~ msgid "Repaint"
#~ msgstr "Übermalt"
#, fuzzy
#~ msgid "Punch hole"
#~ msgstr "Drückmodus"
-
#~ msgid "Punch object out of a colorizable opaque area"
#~ msgstr "Objekt aus einfärbbarem opaken Bereich ausstanzen"
-
#~ msgid "The second path must be exactly four nodes long."
#~ msgstr "Der zweite Pfad muss exakt vier Knoten lang sein."
-
#~ msgid "Burnt edges"
#~ msgstr "Verbrannte Kanten"
-
#~ msgid "Interruption width"
#~ msgstr "Unterbrechungsbreite"
-
#~ msgid "add stroke width to interruption size"
#~ msgstr "Addiere Strichdicke zur Unterbrechungslänge"
-
#~ msgid "add other's stroke width to interruption size"
#~ msgstr "Addiere andere Strichdicke zur Unterbrechungslänge"
-
#~ msgid "AI 8.0 Output"
#~ msgstr "AI-8.0-Ausgabe"
-
#~ msgid "Adobe Illustrator 8.0 (*.ai)"
#~ msgstr "Adobe Illustrator 8.0 (*.ai)"
-
#~ msgid "Write Adobe Illustrator 8.0 (Postscript-based)"
#~ msgstr "Adobe Illustrator 8.0 (Postscript-basiert) schreiben"
-
#~ msgid "EPSI Output"
#~ msgstr "EPSI-Ausgabe"
-
#~ msgid "Encapsulated Postscript Interchange (*.epsi)"
#~ msgstr "Encapsulated Postscript Interchange (*.epsi)"
-
#~ msgid "Encapsulated Postscript with a thumbnail"
#~ msgstr "»Encapsulated Postscript« mit einem Vorschaubild"
-
#~ msgid "Glossy jelly"
#~ msgstr "Glänzendes Gelee"
-
#~ msgid "Bulging, glossy jelly covering"
#~ msgstr "Aufgewölbte, glänzende Gelee-Abdeckung"
-
#~ msgid "Glossy jelly, backlit"
#~ msgstr "Glänzendes Gelee, von hinten beleuchtet"
-
#~ msgid "Bulging, glossy jelly covering; two light sources"
#~ msgstr "Vorgewölbter, glänzender Überzug; zwei Lichtquellen"
-
#~ msgid "Pixel smear, glossy"
#~ msgstr "Verschmierte Pixel, glänzend"
-
#~ msgid "Glossy painting effect for bitmaps"
#~ msgstr "Glanzfarbeffekt für Bitmaps"
-
#~ msgid "HSL bubbles"
#~ msgstr "HSL Blasen"
-
#~ msgid "Melt and glow"
#~ msgstr "Schmelzen und Glühen"
-
#~ msgid "Badge"
#~ msgstr "Plakette"
-
#~ msgid "Metal or plastic badge bevel"
#~ msgstr "Gewölbte Metall- oder Plastikplakette"
-
#~ msgid "Pastel Bevel"
#~ msgstr "Pastellfarbige Wölbung"
-
#~ msgid "Bright and glowing metal texture"
#~ msgstr "Helle, glühende Metall-Textur"
-
#~ msgid "Gives the flood color to the dark parts of the image"
#~ msgstr "Dunkle Teile des Bildes mit Füllfarbe kolorieren"
# What is Displacement Map?
#~ msgid "Air Spray; adjust the Displacement Map amount"
#~ msgstr "Airbrusheffekt"
-
#, fuzzy
#~ msgid "Ghost outline"
#~ msgstr "Objektumriss"
-
#~ msgid "Soft bump"
#~ msgstr "Weiche Beule"
-
#~ msgid "Masking tools"
#~ msgstr "Maskierungswerkzeug"
-
#~ msgid ""
#~ "Same than HSL bumps but with an alpha added for combination with "
#~ "transparency depending filters"
#~ msgstr ""
#~ "Wie HSL Beulen mit zusätzlichem Alphakanal für transparenzabhängige Filter"
-
#~ msgid "HSL Bubbles, alpha"
#~ msgstr "HSL Blasen, Alpha"
-
#~ msgid "HSL Bumps, diffuse"
#~ msgstr "HSL Beulen, Diffus"
-
#~ msgid "HSL Bubbles, diffuse"
#~ msgstr "HSL Blasen, Diffus"
-
#~ msgid "Burnt paper edges texture"
#~ msgstr "Verbrannte Papierkanten-Textur"
-
#~ msgid "Enhance outline and glows inside and outside"
#~ msgstr "Umriss und Lichthöfe verstärken"
#, fuzzy
#~ msgid "Flow inside"
#~ msgstr "Fließtext-Bereich"
-
#~ msgid "Adds a film grain noise to images and objects"
#~ msgstr "Fügt Filmkörnung zu Bildern und Objekten hinzu"
-
#~ msgid "Lead pencil"
#~ msgstr "Bleigriffel"
-
#~ msgid "Alpha fill"
#~ msgstr "Alpha-Füllung"
-
#~ msgid "Export area is whole canvas"
#~ msgstr "Exportierter Bereich ist die gesamte Zeichenfläche"
-
#~ msgid "Export drawing, not page"
#~ msgstr "Zeichnung exportieren, nicht Seite"
-
#~ msgid "Export canvas"
#~ msgstr "Zeichenfläche exportieren"
-
#~ msgid "_Write session file:"
#~ msgstr "Sitzungsdatei _schreiben:"
-
#~ msgid "Shared SVG whiteboard tool."
#~ msgstr "Gemeinsam genutztes Whiteboard-Wekzeug"
-
#~ msgid "Based on the Pedro XMPP client"
#~ msgstr "Basierend auf dem Pedro XMPP Client"
-
#~ msgid "Select a location and filename"
#~ msgstr "Wählen Sie einen Ort und einen Dateinamen"
-
#~ msgid "Set filename"
#~ msgstr "Dateiname setzen"
-
#~ msgid "<b>%1</b> has invited you to a whiteboard session."
#~ msgstr "<b>%1</b> hat Sie zu einer Whiteboard-Sitzung eingeladen."
-
#~ msgid "Do you wish to accept <b>%1</b>'s whiteboard session invitation?"
#~ msgstr ""
#~ "Möchten Sie die Einladung von <b>%1</b> zu einer gemeinsamen Whiteboard-"
#~ "Sitzung annehmen?"
-
#~ msgid "Accept invitation"
#~ msgstr "Einladung annehmen"
-
#~ msgid "Decline invitation"
#~ msgstr "Einladung ablehnen"
-
#~ msgid "Inkboard session (%1 to %2)"
#~ msgstr "Inkboard-Sitzung (%1 mit %2)"
-
#~ msgid "Length left"
#~ msgstr "Länge links"
-
#~ msgid "Length right"
#~ msgstr "Länge rechts"
@@ -23996,25 +22508,18 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Adjust the \"right\" of the bisector"
#~ msgstr "Helligkeit des Farbwertes übernehmen"
-
#~ msgid "Null"
#~ msgstr "Null"
-
#~ msgid "Intersect"
#~ msgstr "Überschneidung"
-
#~ msgid "Subtract A-B"
#~ msgstr "Subtrahiere A-B"
-
#~ msgid "Identity A"
#~ msgstr "Identifikator A"
-
#~ msgid "Subtract B-A"
#~ msgstr "Subtrahiere B-A"
-
#~ msgid "Identity B"
#~ msgstr "Identifikator B"
-
#~ msgid "2nd path"
#~ msgstr "2. Pfad"
@@ -24027,83 +22532,58 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Boolop type"
#~ msgstr "Alle Typen"
-
#~ msgid "Starting"
#~ msgstr "Anfang"
-
#~ msgid "Angle of the first copy"
#~ msgstr "Winkel der ersten Kopie"
-
#~ msgid "Rotation angle"
#~ msgstr "Rotationswinkel"
-
#~ msgid "Angle between two successive copies"
#~ msgstr "Winkel zwischen zwei aufeinander folgenden Kopien"
-
#~ msgid "Number of copies"
#~ msgstr "Anzahl der Kopien"
-
#~ msgid "Number of copies of the original path"
#~ msgstr "Anzahl der Kopien des Originalpfades"
-
#~ msgid "Origin"
#~ msgstr "Ursprung"
-
#~ msgid "Origin of the rotation"
#~ msgstr "Rotationszentrum"
-
#~ msgid "Adjust the starting angle"
#~ msgstr "Anpassen des Startwinkels"
-
#~ msgid "Adjust the rotation angle"
#~ msgstr "Anpassen des Rotationswinkels"
#, fuzzy
#~ msgid "Elliptic Pen"
#~ msgstr "Ellipse"
-
#~ msgid "Sharp"
#~ msgstr "Schärfen"
-
#~ msgid "Round"
#~ msgstr "Verrunden"
-
#~ msgid "Method"
#~ msgstr "Methode"
-
#~ msgid "Choose pen type"
#~ msgstr "Wähle den Stifttyp"
-
#~ msgid "Maximal stroke width"
#~ msgstr "Maximale Strichbreite"
-
#~ msgid "Pen roundness"
#~ msgstr "Stiftabrundung"
-
#~ msgid "Min/Max width ratio"
#~ msgstr "Min/Max Weitenverhältnis"
-
#~ msgid "angle"
#~ msgstr "Winkel"
-
#~ msgid "direction of thickest strokes (opposite = thinest)"
#~ msgstr "Richtung des dicksten Striches (entgegengesetzt = dünnster)"
-
#~ msgid "Choose start capping type"
#~ msgstr "Anfangsmarkierung wählen"
-
#~ msgid "Choose end capping type"
#~ msgstr "Endmarkierung wählen"
-
#~ msgid "Grow for"
#~ msgstr "Wachse um"
-
#~ msgid "Make the stroke thiner near it's start"
#~ msgstr "Strich dünner starten"
-
#~ msgid "Make the stroke thiner near it's end"
#~ msgstr "Strich dünner beenden"
-
#~ msgid "Round ends"
#~ msgstr "Runde Enden ab"
@@ -24178,13 +22658,10 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "End type"
#~ msgstr " Typ: "
-
#~ msgid "Discard original path?"
#~ msgstr "Original Pfad verwerfen?"
-
#~ msgid "Reflection line"
#~ msgstr "Reflektionslinie"
-
#~ msgid "Adjust the offset"
#~ msgstr "<b>Versatz-Abstand</b> anpassen"
@@ -24203,7 +22680,6 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Adjust the \"right\" end of the parallel"
#~ msgstr "Zwischenfarbe des Farbverlaufs bearbeiten"
-
#~ msgid "Display unit"
#~ msgstr "Anzeige Einheit"
@@ -24214,30 +22690,24 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Adjust the bisector's \"left\" end"
#~ msgstr "Zwischenfarbe des Farbverlaufs bearbeiten"
-
#~ msgid "Scale x"
#~ msgstr "X Skalieren"
#, fuzzy
#~ msgid "Scale factor in x direction"
#~ msgstr "VP in X-Richtung umschalten"
-
#~ msgid "Scale y"
#~ msgstr "Y Skalieren"
#, fuzzy
#~ msgid "Scale factor in y direction"
#~ msgstr "VP in X-Richtung umschalten"
-
#~ msgid "Offset x"
#~ msgstr "Versatz x"
-
#~ msgid "Offset in x direction"
#~ msgstr "Versatz in X-Richtung"
-
#~ msgid "Offset y"
#~ msgstr "Versatz y"
-
#~ msgid "Offset in y direction"
#~ msgstr "Versatz in Y-Richtung"
@@ -24248,13 +22718,10 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Float parameter"
#~ msgstr "<b>Effektparameter</b>"
-
#~ msgid "just a real number like 1.4!"
#~ msgstr "Nur reelle Zahlen wie 1,4!"
-
#~ msgid "Additional angle between tangent and curve"
#~ msgstr "Winkel, um den Tangente zu Kurve gedreht wird."
-
#~ msgid "Location along curve"
#~ msgstr "Ort entlang der Kurve"
@@ -24265,134 +22732,95 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Stack step"
#~ msgstr "Scans stapeln"
-
#~ msgid "point param"
#~ msgstr "Punktparameter"
-
#~ msgid "path param"
#~ msgstr "Punktparameter"
-
#~ msgid "Label"
#~ msgstr "Bezeichner"
-
#~ msgid "Text label attached to the path"
#~ msgstr "Textmarkierung, die dem Pfad zugewiesen ist"
-
#~ msgid "Choose a construction tool from the toolbar."
#~ msgstr "Ein Konstruktionswerkzeug von der Werkzeugleiste wählen."
-
#~ msgid "All Image Files"
#~ msgstr "Alle Bilder"
-
#~ msgid "Target"
#~ msgstr "Ziel"
#, fuzzy
#~ msgid "Seed"
#~ msgstr "Geschwindigkeit:"
-
#~ msgid "Path:"
#~ msgstr "Verzeichnis:"
-
#~ msgid "Session file"
#~ msgstr "Sitzungsdatei _schreiben:"
-
#~ msgid "Playback controls"
#~ msgstr "Abspielkontrolle"
#, fuzzy
#~ msgid "Message information"
#~ msgstr "Informationen über die Speichernutzung"
-
#~ msgid "Active session file:"
#~ msgstr "Aktive Sitzungsdatei:"
-
#~ msgid "Delay (milliseconds):"
#~ msgstr "Verzögerungn (Millisekunden):"
-
#~ msgid "Close file"
#~ msgstr "Datei schließen"
-
#~ msgid "Set delay"
#~ msgstr "Verzögerung setzen"
-
#~ msgid "Rewind"
#~ msgstr "Zurückspulen"
-
#~ msgid "Go back one change"
#~ msgstr "Eine Änderung zurückgehen"
-
#~ msgid "Pause"
#~ msgstr "Pause"
-
#~ msgid "Go forward one change"
#~ msgstr "Eine Änderung vorwärts gehen"
-
#~ msgid "Open session file"
#~ msgstr "Öffne Sitzungsdatei:"
-
#~ msgid "_Use SSL"
#~ msgstr "Ben_utze SSL"
# name des Effekte-submenü, das alle bitmap-effekte beinhält!
#~ msgid "_Register"
#~ msgstr "Registrieren"
-
#~ msgid "_Server:"
#~ msgstr "_Server:"
-
#~ msgid "_Username:"
#~ msgstr "_Benutzername:"
-
#~ msgid "_Password:"
#~ msgstr "_Passwort:"
-
#~ msgid "P_ort:"
#~ msgstr "P_ort:"
-
#~ msgid "Connect"
#~ msgstr "verbinden"
-
#~ msgid "Establishing connection to Jabber server <b>%1</b>"
#~ msgstr "Verbindungsaufbau zum Jabber-Server <b>%1</b>"
-
#~ msgid "Failed to establish connection to Jabber server <b>%1</b>"
#~ msgstr "Fehler beim Verbindungsaufbau zum Jabber-Server <b>%1</b>"
-
#~ msgid "Connected to Jabber server <b>%1</b> as <b>%2</b>"
#~ msgstr "Verbunden mit Jabber-Server <b>%1</b> als <b>%2</b>"
-
#~ msgid "Chatroom _name:"
#~ msgstr "Chatraum_name:"
-
#~ msgid "Chatroom _server:"
#~ msgstr "Chatraum _Server:"
-
#~ msgid "Chatroom _password:"
#~ msgstr "Chatraum _Passwort:"
-
#, fuzzy
#~ msgid "Chatroom _handle:"
#~ msgstr "Anfasser ändern"
-
#~ msgid "Connect to chatroom"
#~ msgstr "Verbinde zum Chatraum"
-
#~ msgid "_Invite user"
#~ msgstr "Nutzer einladen"
-
#~ msgid "_Cancel"
#~ msgstr "Abbrechen"
-
#~ msgid "Buddy List"
#~ msgstr "Freundesliste"
-
#~ msgid "Previous Effect"
#~ msgstr "Vorheriger Effekt"
-
#~ msgid "Organization"
#~ msgstr "Organisation"
-
#~ msgid "Enhance intensity differences in selected bitmap(s)."
#~ msgstr "Verbessert Intensitätsunterschiede in ausgewählten Bitmaps."
@@ -24415,42 +22843,32 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Modulate"
#~ msgstr "Modus"
-
#~ msgid "Cairo PDF Output"
#~ msgstr "PDF-Ausgabe mit Cairo"
#, fuzzy
#~ msgid "Convert blur effects to bitmaps"
#~ msgstr "Texte in Pfade umwandeln"
-
#~ msgid "Preferred resolution (DPI) of bitmaps"
#~ msgstr "Bevorzugte Auflösung der Bitmaps (Punkte pro Zoll)"
-
#~ msgid "PDF via Cairo (*.pdf)"
#~ msgstr "PDF durch Cairo (*.pdf)"
-
#~ msgid "PDF File"
#~ msgstr "PDF Datei"
-
#~ msgid "Encapsulated Postscript Output"
#~ msgstr "Encapsulated-Postscript-Ausgabe"
-
#~ msgid "Make bounding box around full page"
#~ msgstr "Umrandungsbox um ganze Seite"
-
#~ msgid "Embed fonts (Type 1 only)"
#~ msgstr "Fonts einbetten (nur Type 1)"
-
#~ msgid "Encapsulated Postscript (*.eps)"
#~ msgstr "Encapsulated Postscript (*.eps)"
-
#~ msgid "Encapsulated Postscript File"
#~ msgstr "Encapsulated-Postscript-Datei"
#, fuzzy
#~ msgid "Yes, more descriptions"
#~ msgstr "Objektbeschreibung setzen"
-
#~ msgid "Crystal"
#~ msgstr "Kristall"
@@ -24461,38 +22879,28 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Emboss effect"
#~ msgstr "Kein Effekt"
-
#~ msgid "Jelly Bean"
#~ msgstr "Kaubonbon"
-
#~ msgid "Mmmm, yummy."
#~ msgstr "Hmm, lecker."
-
#~ msgid "Melt effect"
#~ msgstr "Ein fast geschmolzenes Objekt"
-
#~ msgid "Metal"
#~ msgstr "Metal"
#, fuzzy
#~ msgid "PatternedGlass"
#~ msgstr "Muster"
-
#~ msgid "Snow"
#~ msgstr "Schnee"
-
#~ msgid "When the weather outside is frightening..."
#~ msgstr "Schneeablagerungen"
-
#~ msgid "Zebra Stripes"
#~ msgstr "Zebrastreifen"
-
#~ msgid "Paint your object with zebra stripes"
#~ msgstr "Füllt Ihr Objekt mit Zebrastreifen"
-
#~ msgid "Print Destination"
#~ msgstr "Druckziel"
-
#~ msgid ""
#~ "Use PDF vector operators. The resulting image is usually smaller in file "
#~ "size and can be arbitrarily scaled, but patterns will be lost."
@@ -24500,7 +22908,6 @@ msgstr "XAML einlesen"
#~ "PDF-Vektoroperatoren verwenden. Das resultierende Bild hat normalerweise "
#~ "eine kleinere Dateigröße und kann beliebig skaliert werden, Muster gehen "
#~ "jedoch verloren."
-
#~ msgid ""
#~ "Print everything as bitmap. The resulting image is usually larger in file "
#~ "size and cannot be arbitrarily scaled without quality loss, but all "
@@ -24509,13 +22916,10 @@ msgstr "XAML einlesen"
#~ "Alles als Bitmap ausdrucken. Das resultierende Bild ist (normalerweise) "
#~ "größer und die Qualität hängt vom Zoomfaktor ab, die Zeichnung wird "
#~ "jedoch identisch zur angezeigten ausgegeben."
-
#~ msgid "Preferred resolution (dots per inch) of bitmap"
#~ msgstr "Bevorzugte Auflösung der Bitmap (Punkte pro Zoll)"
-
#~ msgid "Print destination"
#~ msgstr "Druckziel"
-
#~ msgid ""
#~ "Printer name (as given by lpstat -p);\n"
#~ "leave empty to use the system default printer.\n"
@@ -24526,13 +22930,10 @@ msgstr "XAML einlesen"
#~ "leer lassen, um den Standarddrucker zu verwenden.\n"
#~ "Verwenden Sie »> Dateiname« zum Drucken in eine Datei.\n"
#~ "Verwenden Sie »| Prog. Arg. …« zur Weiterleitung an ein Programm."
-
#~ msgid "PDF Print"
#~ msgstr "PDF-Druck"
-
#~ msgid "Print using PostScript operators"
#~ msgstr "Unter Verwendung von PostScript-Operatoren drucken"
-
#~ msgid ""
#~ "Use PostScript vector operators. The resulting image is usually smaller "
#~ "in file size and can be arbitrarily scaled, but alpha transparency and "
@@ -24541,31 +22942,26 @@ msgstr "XAML einlesen"
#~ "PostScript-Vektoroperatoren verwenden. Das resultierende Bild hat "
#~ "normalerweise eine kleinere Dateigröße und kann beliebig skaliert werden, "
#~ "Alpha-Transparenz und Muster gehen jedoch verloren."
-
#~ msgid "Postscript Print"
#~ msgstr "Postscript drucken"
-
#~ msgid "Postscript Output"
#~ msgstr "Postscript-Ausgabe"
#, fuzzy
#~ msgid "PostScript (old exporter via print) (*.ps)"
#~ msgstr "PostScript mit Cairo (*.ps)"
-
#~ msgid ""
#~ "Cannot create file %s.\n"
#~ "%s"
#~ msgstr ""
#~ "Kann Datei %s nicht anlegen.\n"
#~ "%s"
-
#~ msgid ""
#~ "Cannot write file %s.\n"
#~ "%s"
#~ msgstr ""
#~ "Kann Datei %s nicht schreiben.\n"
#~ "%s"
-
#~ msgid ""
#~ "Although Inkscape will run, it will use default settings,\n"
#~ "and any changes made in preferences will not be saved."
@@ -24573,7 +22969,6 @@ msgstr "XAML einlesen"
#~ "Inkscape wird zwar ausgeführt, es werden jedoch die Standard-"
#~ "Einstellungen verwendet,\n"
#~ "und keine Änderung der Benutzereinstellungen wird gespeichert."
-
#~ msgid ""
#~ "%s not a valid XML file, or\n"
#~ "you don't have read permissions on it.\n"
@@ -24582,14 +22977,12 @@ msgstr "XAML einlesen"
#~ "%s ist keine gültige XML-Datei, oder\n"
#~ "Sie haben keine Leseberechtigung dafür.\n"
#~ "%s"
-
#~ msgid ""
#~ "%s is not a valid menus file.\n"
#~ "%s"
#~ msgstr ""
#~ "%s ist keine gültige Menübeschreibungsdatei.\n"
#~ "%s"
-
#~ msgid ""
#~ "Inkscape will run with default menus.\n"
#~ "New menus will not be saved."
@@ -24620,26 +23013,19 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Change LPE point parameter"
#~ msgstr "Punktparameter ändern"
-
#~ msgid "The resolution used for exporting SVG into bitmap (default 90)"
#~ msgstr ""
#~ "Verwendete Auflösung beim Umwandeln von SVG nach Bitmap (Vorgabe: 90)"
-
#~ msgid "Embed fonts on export (Type 1 only) (EPS)"
#~ msgstr "Fonts beim Exportieren einbetten (nur Type 1) (EPS)"
-
#~ msgid "Export files with the bounding box set to the page size (EPS)"
#~ msgstr "Exportiere EPS-Dateien mit den Seitengrößen als Umrandungsbox"
-
#~ msgid "Path Effects"
#~ msgstr "Pfad-Effekte..."
-
#~ msgid "Effe_cts"
#~ msgstr "E_ffekte"
-
#~ msgid "Select <b>at least two objects</b> to combine."
#~ msgstr "<b>Mindestens 2 Objekte</b> zum Kombinieren auswählen."
-
#~ msgid "<b>Pushing %d</b> selected object"
#~ msgid_plural "<b>Pushing %d</b> selected objects"
#~ msgstr[0] "<b>Verschiebt %d</b> ausgewähltes Objekt"
@@ -24686,22 +23072,16 @@ msgstr "XAML einlesen"
#~ msgid_plural "<b>Jittering colors in %d</b> selected objects"
#~ msgstr[0] "Objektverbinder weichen den ausgewählten Objekten aus"
#~ msgstr[1] "Objektverbinder weichen den ausgewählten Objekten aus"
-
#~ msgid "Repel tweak"
#~ msgstr "Abstoßen"
-
#~ msgid "Center on vertical axis"
#~ msgstr "Vertikal zentrieren"
-
#~ msgid "Biggest item"
#~ msgstr "Größtes Objekt"
-
#~ msgid "Smallest item"
#~ msgstr "Kleinstes Objekt"
-
#~ msgid "_Nodes"
#~ msgstr "K_noten"
-
#~ msgid "Snap nodes to object paths"
#~ msgstr "Knoten an Objektpfaden einrasten"
@@ -24739,23 +23119,18 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Commands bar icon size"
#~ msgstr "Befehlsleiste Icon Größe"
-
#~ msgid "Grow (outset) parts of paths"
#~ msgstr "Teile von Pfaden wachsen lassen (ausbeulen)"
-
#~ msgid "Repel mode"
#~ msgstr "Abstoßmodus"
-
#~ msgid "Repel parts of paths from cursor"
#~ msgstr "Teile von Pfaden vom Zeiger abstoßen"
-
#~ msgid ""
#~ "dxf2svg may come with Inkscape, but is also at http://dxf-svg-convert."
#~ "sourceforge.net/"
#~ msgstr ""
#~ "dxf2svg kann mit Inkscape ausgeliefert worden sein, aber es ist auch "
#~ "unter http://dxf-svg-convert.sourceforge.net/ zu finden"
-
#~ msgid "Embed All Images"
#~ msgstr "Alle Bilder einbetten"
@@ -24794,13 +23169,10 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Lolo"
#~ msgstr "Farbe"
-
#~ msgid "Fit page to selection"
#~ msgstr "Seite in Auswahl einpassen"
-
#~ msgid "Export"
#~ msgstr "Exportieren"
-
#~ msgid ""
#~ "This value affects the amount of smoothing applied to freehand lines; "
#~ "lower values produce more uneven paths with more nodes"
@@ -24811,25 +23183,18 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Grid units"
#~ msgstr "Gitter-Raster_einheiten:"
-
#~ msgid "Origin Y"
#~ msgstr "Ursprung Y"
-
#~ msgid "Spacing X"
#~ msgstr "Abstand X"
-
#~ msgid "Spacing Y"
#~ msgstr "Abstand Y"
-
#~ msgid "Selects the color used for major (highlighted) grid lines."
#~ msgstr "Farbe der dicken (hervorgehobenen) Gitterlinien"
-
#~ msgid "Major grid line every"
#~ msgstr "D_icke Gitterlinien alle:"
-
#~ msgid "Angle X"
#~ msgstr "Winkel X"
-
#~ msgid "Angle Z"
#~ msgstr "Winkel Z"
@@ -24857,6 +23222,6 @@ msgstr "XAML einlesen"
#, fuzzy
#~ msgid "Save current settings as new profile"
#~ msgstr "Dokument unter einem anderen Namen speichern"
-
#~ msgid "Postscript (*.ps)"
#~ msgstr "Postscript (*.ps)"
+
diff --git a/po/fr.po b/po/fr.po
index 5a370c1d0..835bc824e 100644
--- 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,6 +14165,93 @@ msgstr "Résultat"
msgid "Errors"
msgstr "Erreurs"
+#: ../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"
@@ -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"
@@ -23601,10 +24042,6 @@ msgstr "Entrée XAML"
#~ msgstr "Source"
#, fuzzy
-#~ msgid "Relation:"
-#~ msgstr "Relation"
-
-#, fuzzy
#~ msgid "Subject:"
#~ msgstr "Objet"
diff --git a/po/inkscape.pot b/po/inkscape.pot
index 9eceff3fc..ced8b2713 100644
--- a/po/inkscape.pot
+++ b/po/inkscape.pot
@@ -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-10-15 12:45+0200\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 ""
@@ -1522,7 +1522,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 ""
@@ -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 ""
@@ -2258,11 +2257,11 @@ msgstr ""
msgid "<b>Current layer is locked</b>. Unlock it to be able to draw on it."
msgstr ""
-#: ../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 ""
@@ -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 ""
@@ -3047,7 +3046,7 @@ msgstr ""
msgid "<big><b>Bitmap size</b></big>"
msgstr ""
-#: ../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 ""
@@ -3059,12 +3058,12 @@ msgstr ""
msgid "dp_i"
msgstr ""
-#: ../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 ""
-#: ../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 ""
@@ -4151,11 +4151,11 @@ 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 ""
@@ -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,14 +4399,14 @@ 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"
msgstr ""
#: ../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 ""
@@ -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 ""
@@ -5352,15 +5352,15 @@ msgstr ""
msgid "Open files saved in Adobe Illustrator 9.0 and newer versions"
msgstr ""
-#: ../src/extension/internal/pov-out.cpp:688
+#: ../src/extension/internal/pov-out.cpp:700
msgid "PovRay Output"
msgstr ""
-#: ../src/extension/internal/pov-out.cpp:693
+#: ../src/extension/internal/pov-out.cpp:705
msgid "PovRay (*.pov) (paths and shapes only)"
msgstr ""
-#: ../src/extension/internal/pov-out.cpp:694
+#: ../src/extension/internal/pov-out.cpp:706
msgid "PovRay Raytracer File"
msgstr ""
@@ -5464,7 +5464,7 @@ msgstr ""
msgid "default.svg"
msgstr ""
-#: ../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 ""
@@ -5533,7 +5533,7 @@ msgid "Document saved."
msgstr ""
#. 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 ""
@@ -5556,27 +5556,27 @@ 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 ""
@@ -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,12 +5758,13 @@ 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
msgid "None"
msgstr ""
@@ -5822,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 ""
@@ -5835,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 ""
@@ -6072,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 ""
@@ -6320,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 "
@@ -6364,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 ""
@@ -6418,24 +6419,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 ""
-#: ../src/knotholder.cpp:237
+#: ../src/knotholder.cpp:238
msgid "<b>Scale</b> the pattern fill; uniformly if with <b>Ctrl</b>"
msgstr ""
-#: ../src/knotholder.cpp:240
+#: ../src/knotholder.cpp:241
msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
msgstr ""
@@ -6455,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 ""
@@ -6662,7 +6663,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 ""
@@ -6670,7 +6671,7 @@ msgstr ""
msgid "The index of the current page"
msgstr ""
-#: ../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 ""
@@ -6827,155 +6828,159 @@ msgstr ""
msgid "Ignoring font without family that will crash Pango"
msgstr ""
-#: ../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 ""
-#: ../src/live_effects/effect.cpp:639
+#: ../src/live_effects/effect.cpp:645
#, c-format
msgid "Editing parameter <b>%s</b>."
msgstr ""
-#: ../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 ""
@@ -7191,61 +7196,61 @@ msgid ""
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/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 ""
-#: ../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 ""
@@ -7529,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 ""
@@ -7824,7 +7829,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 ""
@@ -8083,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 ""
@@ -8111,6 +8116,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
@@ -8257,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 ""
@@ -8269,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 ""
@@ -8654,7 +8660,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 ""
@@ -8662,7 +8668,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 ""
@@ -8670,7 +8676,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 ""
@@ -8678,35 +8684,27 @@ msgstr ""
#. 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 ""
-#. _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 ""
-#. _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 ""
-#. _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 ""
-#. _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 ""
@@ -8879,7 +8877,7 @@ msgstr ""
msgid "Extent or scope of this document."
msgstr ""
-#: ../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 ""
@@ -9001,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 ""
@@ -9030,7 +9028,7 @@ msgstr ""
msgid "<b>No groups</b> to ungroup in the selection."
msgstr ""
-#: ../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 ""
@@ -9334,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 ""
@@ -9357,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 ""
@@ -9376,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 ""
@@ -9386,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 ""
@@ -9407,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 ""
@@ -9603,7 +9601,7 @@ msgid ""
"with <b>Shift</b> to disable snapping"
msgstr ""
-#: ../src/shape-editor.cpp:471
+#: ../src/shape-editor.cpp:472
msgid "Drag curve"
msgstr ""
@@ -9718,31 +9716,31 @@ 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 ""
-#: ../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"
@@ -9805,74 +9803,74 @@ msgstr ""
msgid "Select <b>stroked path(s)</b> to convert stroke to path."
msgstr ""
-#: ../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 ""
-#: ../src/splivarot.cpp:1040
+#: ../src/splivarot.cpp:1062
msgid "Selected object is <b>not a path</b>, cannot inset/outset."
msgstr ""
-#: ../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 ""
-#: ../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 ""
-#: ../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 ""
-#: ../src/splivarot.cpp:1703
+#: ../src/splivarot.cpp:1725
#, c-format
msgid "<b>%d</b> paths simplified."
msgstr ""
-#: ../src/splivarot.cpp:1717
+#: ../src/splivarot.cpp:1739
msgid "Select <b>path(s)</b> to simplify."
msgstr ""
-#: ../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 ""
-#: ../src/sp-lpe-item.cpp:348
+#: ../src/sp-lpe-item.cpp:363
msgid "An exception occurred during execution of the Path Effect."
msgstr ""
@@ -10037,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 ""
@@ -10049,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 ""
@@ -10228,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."
@@ -10242,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 ""
@@ -10590,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 ""
@@ -10699,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 ""
@@ -10729,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 ""
@@ -10750,7 +10752,7 @@ msgid "Align left edges"
msgstr ""
#: ../src/ui/dialog/align-and-distribute.cpp:810
-msgid "Center objects horizontally"
+msgid "Center on vertical axis"
msgstr ""
#: ../src/ui/dialog/align-and-distribute.cpp:813
@@ -10844,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 ""
@@ -10884,7 +10886,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 ""
@@ -10905,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 ""
@@ -11056,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 ""
@@ -11194,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 ""
@@ -11261,7 +11263,7 @@ msgstr ""
#: ../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 ""
@@ -11606,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 ""
@@ -11806,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 ""
@@ -12160,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 ""
@@ -12553,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 "
@@ -12822,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 "
@@ -13714,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 ""
@@ -14076,6 +14093,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 ""
@@ -14649,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 ""
@@ -14701,7 +14722,7 @@ msgstr ""
#. ## 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 ""
@@ -14900,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 "
@@ -14939,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 "
@@ -14953,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 ""
@@ -14999,50 +15020,50 @@ 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 ""
@@ -15667,1728 +15688,1744 @@ 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
+#: ../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
+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 ""
-#: ../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 ""
-#: ../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 ""
-#: ../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 ""
@@ -17472,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 ""
@@ -17521,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 ""
@@ -17552,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 ""
@@ -18090,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)"
@@ -20416,10 +20612,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 ""
@@ -21467,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 ""
@@ -21789,17 +21977,76 @@ msgid "Strength (%):"
msgstr ""
#: ../share/extensions/scour.inx.h:1
-msgid "Optimized SVG (*.svg)"
+msgid "Embed rasters"
msgstr ""
#: ../share/extensions/scour.inx.h:2
-msgid "Optimized SVG Output"
+msgid "Enable id stripping"
msgstr ""
#: ../share/extensions/scour.inx.h:3
+msgid "Group collapsing"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:5
+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 ""
+
+#: ../share/extensions/scour.inx.h:9
+msgid "Optimized SVG Output"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:11
msgid "Scalable Vector Graphics"
msgstr ""
+#: ../share/extensions/scour.inx.h:12
+msgid "Set precision"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:13
+msgid "Simplify colors"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:14
+msgid "Space"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:15
+msgid "Strip xml prolog"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:16
+msgid "Style to xml"
+msgstr ""
+
+#: ../share/extensions/scour.inx.h:17
+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 ""
diff --git a/po/nl.po b/po/nl.po
index 28f3e4e63..507784a4d 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -47,7 +47,7 @@ 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-10-03 09:02+0100\n"
+"PO-Revision-Date: 2009-11-25 21:08+0100\n"
"Last-Translator: Kris De Gussem <Kris.DeGussem@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"MIME-Version: 1.0\n"
@@ -62,18 +62,16 @@ msgid "Create and edit Scalable Vector Graphics images"
msgstr "SVG-tekeningen (Scalable Vector Graphics) maken en bewerken"
#: ../inkscape.desktop.in.h:2
-#, fuzzy
msgid "Inkscape"
-msgstr "Inkscape afsluiten"
+msgstr "Inkscape"
#: ../inkscape.desktop.in.h:3
msgid "Inkscape Vector Graphics Editor"
-msgstr "Inkscape SVG-vector-illustrator"
+msgstr "Inkscape vector tekenpakket"
#: ../inkscape.desktop.in.h:4
-#, fuzzy
msgid "Vector Graphics Editor"
-msgstr "Inkscape SVG-vector-illustrator"
+msgstr "Vector tekenpakket"
#: ../share/filters/filters.svg.h:2
msgid "Matte jelly"
@@ -7609,9 +7607,8 @@ msgstr "Sleep om een kruising te selecteren, klik om te spiegelen"
#. / @todo Is this the right verb?
#: ../src/live_effects/lpe-knot.cpp:637
-#, fuzzy
msgid "Change knot crossing"
-msgstr "Verbindingsafstanden aanpassen"
+msgstr "Kruising aanpassen"
#: ../src/live_effects/lpe-patternalongpath.cpp:52
#: ../share/extensions/pathalongpath.inx.h:11
@@ -7893,7 +7890,7 @@ msgstr "Frequentie en richting krabbels instellen"
#. bender(_("Global bending"), _("Relative position to a reference point defines global bending direction and amount"), "bender", &wr, this, NULL, Geom::Point(-5,0)),
#: ../src/live_effects/lpe-rough-hatches.cpp:251
msgid "Global bending"
-msgstr "Globaal buigen"
+msgstr "Globale buiging"
#: ../src/live_effects/lpe-rough-hatches.cpp:251
msgid ""
@@ -8141,7 +8138,7 @@ msgstr "Recursiediepte --- laag houden!!"
#: ../src/live_effects/lpe-vonkoch.cpp:48
msgid "Generating path"
-msgstr "Pad genereren"
+msgstr "Genererend pad"
#: ../src/live_effects/lpe-vonkoch.cpp:48
msgid "Path whose segments define the iterated transforms"
@@ -21460,7 +21457,7 @@ msgstr "Punt op"
#: ../share/extensions/draw_from_triangle.inx.h:29
msgid "Radius / px"
-msgstr "Straal / px"
+msgstr "Straal (px)"
#: ../share/extensions/draw_from_triangle.inx.h:31
msgid "Report this triangle's properties"
@@ -22793,7 +22790,7 @@ msgstr "Vulkleur (rood)"
#: ../share/extensions/polyhedron_3d.inx.h:16
#, no-c-format
msgid "Fill opacity, %"
-msgstr "Ondoorzichtigheid opvulling / %"
+msgstr "Ondoorzichtigheid opvulling (%)"
#: ../share/extensions/polyhedron_3d.inx.h:17
msgid "Great Dodecahedron"
@@ -22857,7 +22854,7 @@ msgstr "Roteren rond:"
#: ../share/extensions/polyhedron_3d.inx.h:33
msgid "Rotation, degrees"
-msgstr "Rotatie / graden"
+msgstr "Rotatie (graden)"
#: ../share/extensions/polyhedron_3d.inx.h:34
msgid "Scaling factor"
@@ -22882,11 +22879,11 @@ msgstr "Stompe dodecaëder"
#: ../share/extensions/polyhedron_3d.inx.h:41
#, no-c-format
msgid "Stroke opacity, %"
-msgstr "Ondoorzichtigheid lijn / %"
+msgstr "Ondoorzichtigheid lijn (%)"
#: ../share/extensions/polyhedron_3d.inx.h:42
msgid "Stroke width, px"
-msgstr "Lijnbreedte / px"
+msgstr "Lijnbreedte (px)"
#: ../share/extensions/polyhedron_3d.inx.h:44
msgid "Tetrahedron"
@@ -23447,15 +23444,15 @@ msgstr "alles in HOOFDLETTERS"
#: ../share/extensions/triangle.inx.h:1
msgid "Angle a / deg"
-msgstr "Hoek a / graden"
+msgstr "Hoek a (graden)"
#: ../share/extensions/triangle.inx.h:2
msgid "Angle b / deg"
-msgstr "Hoek b / graden"
+msgstr "Hoek b (graden)"
#: ../share/extensions/triangle.inx.h:3
msgid "Angle c / deg"
-msgstr "Hoek c / graden"
+msgstr "Hoek c (graden)"
#: ../share/extensions/triangle.inx.h:4
msgid "From Side a and Angles a, b"
@@ -23479,15 +23476,15 @@ msgstr "Gebruik drie zijden"
#: ../share/extensions/triangle.inx.h:11
msgid "Side Length a / px"
-msgstr "Lengte zijde a / px"
+msgstr "Lengte zijde a (px)"
#: ../share/extensions/triangle.inx.h:12
msgid "Side Length b / px"
-msgstr "Lengte zijde b / px"
+msgstr "Lengte zijde b (px)"
#: ../share/extensions/triangle.inx.h:13
msgid "Side Length c / px"
-msgstr "Lengte zijde c / px"
+msgstr "Lengte zijde c (px)"
#: ../share/extensions/triangle.inx.h:14
msgid "Triangle"
diff --git a/po/ru.po b/po/ru.po
index a7154e48d..5ff289820 100644
--- 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 "Клиент Ð´Ð»Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑ‚Ð¸Ð²Ð½Ð¾Ð³Ð¾ риÑованиÑ"
+
diff --git a/po/sk.po b/po/sk.po
index 334362417..9aea1270b 100644..100755
--- 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ý"
diff --git a/share/extensions/Barcode/EAN13.py b/share/extensions/Barcode/EAN13.py
index 3450893fc..c79b7749d 100644
--- a/share/extensions/Barcode/EAN13.py
+++ b/share/extensions/Barcode/EAN13.py
@@ -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/UPCA.py b/share/extensions/Barcode/UPCA.py
index b67d0830b..89c97eed6 100644
--- a/share/extensions/Barcode/UPCA.py
+++ b/share/extensions/Barcode/UPCA.py
@@ -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
diff --git a/share/extensions/Barcode/UPCE.py b/share/extensions/Barcode/UPCE.py
index 0ad518680..b41e94e8c 100644
--- a/share/extensions/Barcode/UPCE.py
+++ b/share/extensions/Barcode/UPCE.py
@@ -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)
diff --git a/share/extensions/embedimage.py b/share/extensions/embedimage.py
index 16439223b..f73ceb358 100644
--- a/share/extensions/embedimage.py
+++ b/share/extensions/embedimage.py
@@ -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:
diff --git a/share/extensions/gimp_xcf.py b/share/extensions/gimp_xcf.py
index 22e45006b..92da6cf40 100755
--- a/share/extensions/gimp_xcf.py
+++ b/share/extensions/gimp_xcf.py
@@ -19,6 +19,12 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import inkex
import sys, os, tempfile
+try:
+ from subprocess import Popen, PIPE
+ bsubprocess = True
+except:
+ bsubprocess = False
+
class MyEffect(inkex.Effect):
def __init__(self):
inkex.Effect.__init__(self)
@@ -95,7 +101,13 @@ class MyEffect(inkex.Effect):
name = "%s.png" % id
filename = os.path.join(tmp_dir, name)
command = "inkscape -i %s -j %s -e %s %s " % (id, area, filename, svg_file)
- _,f,err = os.popen3(command,'r')
+ if bsubprocess:
+ p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE)
+ return_code = p.wait()
+ f = p.stdout
+ err = p.stderr
+ else:
+ _,f,err = os.popen3(command,'r')
f.read()
f.close()
err.close()
diff --git a/share/extensions/inkex.py b/share/extensions/inkex.py
index b7e3e0e63..1a70c25d6 100755
--- a/share/extensions/inkex.py
+++ b/share/extensions/inkex.py
@@ -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':
diff --git a/share/extensions/measure.py b/share/extensions/measure.py
index 8eacd40c6..68586530b 100644
--- a/share/extensions/measure.py
+++ b/share/extensions/measure.py
@@ -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)
diff --git a/share/extensions/render_alphabetsoup.py b/share/extensions/render_alphabetsoup.py
index 6bc38459b..7e4009328 100644
--- a/share/extensions/render_alphabetsoup.py
+++ b/share/extensions/render_alphabetsoup.py
@@ -1,461 +1,463 @@
-#!/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
+'''
+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
+import gettext
+_ = gettext.gettext
+
+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
+ inkex.errormsg(_("bad character") + " = 0x%x" % ord(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()
+
diff --git a/share/extensions/scour.inkscape.py b/share/extensions/scour.inkscape.py
index 531dfb46c..9e8775782 100755
--- a/share/extensions/scour.inkscape.py
+++ b/share/extensions/scour.inkscape.py
@@ -1,8 +1,51 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-import sys
+import sys, inkex
from scour import scourString
-input = file(sys.argv[1], "r")
-sys.stdout.write(scourString(input.read()).encode("UTF-8"))
-input.close()
-sys.stdout.close()
+
+class ScourInkscape (inkex.Effect):
+
+ def __init__(self):
+ inkex.Effect.__init__(self)
+ self.OptionParser.add_option("--tab",
+ action="store", type="string",
+ dest="tab")
+ self.OptionParser.add_option("--simplify-colors", type="inkbool",
+ action="store", dest="simple_colors", default=True,
+ help="won't convert all colors to #RRGGBB format")
+ self.OptionParser.add_option("--style-to-xml", type="inkbool",
+ action="store", dest="style_to_xml", default=True,
+ help="won't convert styles into XML attributes")
+ self.OptionParser.add_option("--group-collapsing", type="inkbool",
+ action="store", dest="group_collapse", default=True,
+ help="won't collapse <g> elements")
+ self.OptionParser.add_option("--enable-id-stripping", type="inkbool",
+ action="store", dest="strip_ids", default=False,
+ help="remove all un-referenced ID attributes")
+ self.OptionParser.add_option("--embed-rasters", type="inkbool",
+ action="store", dest="embed_rasters", default=True,
+ help="won't embed rasters as base64-encoded data")
+ self.OptionParser.add_option("--keep-editor-data", type="inkbool",
+ action="store", dest="keep_editor_data", default=False,
+ help="won't remove Inkscape, Sodipodi or Adobe Illustrator elements and attributes")
+ self.OptionParser.add_option("--strip-xml-prolog", type="inkbool",
+ action="store", dest="strip_xml_prolog", default=False,
+ help="won't output the <?xml ?> prolog")
+ self.OptionParser.add_option("-p", "--set-precision",
+ action="store", type=int, dest="digits", default=5,
+ help="set number of significant digits (default: %default)")
+ self.OptionParser.add_option("--indent",
+ action="store", type="string", dest="indent_type", default="space",
+ help="indentation of the output: none, space, tab (default: %default)")
+
+
+ def effect(self):
+ input = file(sys.argv[11], "r")
+ sys.stdout.write(scourString(input.read(), self.options).encode("UTF-8"))
+ input.close()
+ sys.stdout.close()
+
+
+if __name__ == '__main__':
+ e = ScourInkscape()
+ e.affect(output=False)
diff --git a/share/extensions/scour.inx b/share/extensions/scour.inx
index 57884b6aa..d5cddeea5 100644
--- a/share/extensions/scour.inx
+++ b/share/extensions/scour.inx
@@ -5,6 +5,35 @@
<dependency type="executable" location="extensions">scour.py</dependency>
<dependency type="executable" location="extensions">svg_regex.py</dependency>
<dependency type="executable" location="extensions">yocto_css.py</dependency>
+ <param name="tab" type="notebook">
+ <page name="Options" _gui-text="Options">
+ <param name="simplify-colors" type="boolean" _gui-text="Simplify colors">true</param>
+ <param name="style-to-xml" type="boolean" _gui-text="Style to xml">true</param>
+ <param name="group-collapsing" type="boolean" _gui-text="Group collapsing">true</param>
+ <param name="enable-id-stripping" type="boolean" _gui-text="Enable id stripping">false</param>
+ <param name="embed-rasters" type="boolean" _gui-text="Embed rasters">true</param>
+ <param name="keep-editor-data" type="boolean" _gui-text="Keep editor data">false</param>
+ <param name="strip-xml-prolog" type="boolean" _gui-text="Strip xml prolog">false</param>
+ <param name="set-precision" type="int" _gui-text="Set precision">5</param>
+ <param name="indent" type="enum" _gui-text="Indent">
+ <_item value="space">Space</_item>
+ <_item value="tab">Tab</_item>
+ <_item value="none">None</_item>
+ </param>
+ </page>
+ <page name="Help" _gui-text="Help">
+ <_param name="instructions" type="description" xml:space="preserve">This extension optimize the SVG file according to the following options:
+ * Simplify colors: convert all colors to #RRGGBB format.
+ * Style to xml: convert styles into XML attributes.
+ * Group collapsing: collapse &lt;g&gt; elements.
+ * Enable id stripping: remove all un-referenced ID attributes.
+ * Embed rasters: embed rasters as base64-encoded data.
+ * Keep editor data: don't remove Inkscape, Sodipodi or Adobe Illustrator elements and attributes.
+ * Strip xml prolog: don't output the xml prolog.
+ * Set precision: set number of significant digits (default: 5).
+ * Indent: indentation of the output: none, space, tab (default: space).</_param>
+ </page>
+ </param>
<output>
<extension>.svg</extension>
<mimetype>image/svg+xml</mimetype>
diff --git a/share/icons/Makefile.am b/share/icons/Makefile.am
index e39174833..59c55948d 100644
--- a/share/icons/Makefile.am
+++ b/share/icons/Makefile.am
@@ -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
index 000000000..a87c2cbfa
--- /dev/null
+++ b/share/icons/application/16x16/Makefile.am
@@ -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
index 000000000..e4aed9222
--- /dev/null
+++ b/share/icons/application/16x16/inkscape.png
Binary files differ
diff --git a/share/icons/application/22x22/Makefile.am b/share/icons/application/22x22/Makefile.am
new file mode 100644
index 000000000..8beeed331
--- /dev/null
+++ b/share/icons/application/22x22/Makefile.am
@@ -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
index 000000000..b1adda08c
--- /dev/null
+++ b/share/icons/application/22x22/inkscape.png
Binary files differ
diff --git a/share/icons/application/24x24/Makefile.am b/share/icons/application/24x24/Makefile.am
new file mode 100644
index 000000000..8fc9b59aa
--- /dev/null
+++ b/share/icons/application/24x24/Makefile.am
@@ -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
index 000000000..4c2cded2c
--- /dev/null
+++ b/share/icons/application/24x24/inkscape.png
Binary files differ
diff --git a/share/icons/application/256x256/Makefile.am b/share/icons/application/256x256/Makefile.am
new file mode 100644
index 000000000..34969a4a9
--- /dev/null
+++ b/share/icons/application/256x256/Makefile.am
@@ -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
index 000000000..76e07fb3d
--- /dev/null
+++ b/share/icons/application/256x256/inkscape.png
Binary files differ
diff --git a/share/icons/application/32x32/Makefile.am b/share/icons/application/32x32/Makefile.am
new file mode 100644
index 000000000..cdccebd02
--- /dev/null
+++ b/share/icons/application/32x32/Makefile.am
@@ -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
index 000000000..aa445e4bc
--- /dev/null
+++ b/share/icons/application/32x32/inkscape.png
Binary files differ
diff --git a/share/icons/application/48x48/Makefile.am b/share/icons/application/48x48/Makefile.am
new file mode 100644
index 000000000..ffa5c1a55
--- /dev/null
+++ b/share/icons/application/48x48/Makefile.am
@@ -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
index 000000000..668acfdef
--- /dev/null
+++ b/share/icons/application/48x48/inkscape.png
Binary files differ
diff --git a/share/icons/application/Makefile.am b/share/icons/application/Makefile.am
new file mode 100644
index 000000000..0e9bb7d7d
--- /dev/null
+++ b/share/icons/application/Makefile.am
@@ -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
index 000000000..469ccd72a
--- /dev/null
+++ b/share/icons/color-management-icon.png
Binary files differ
diff --git a/share/icons/icons.svg b/share/icons/icons.svg
index dd0fe6068..e8f690ecb 100644
--- a/share/icons/icons.svg
+++ b/share/icons/icons.svg
@@ -8,7 +8,7 @@
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- inkscape:version="0.46+devel r21165 custom"
+ inkscape:version="0.47pre4 r22446"
sodipodi:docname="icons.svg"
height="540"
width="1250"
@@ -18,6 +18,13 @@
version="1.0">
<defs
id="defs3">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1250 : 270 : 1"
+ inkscape:persp3d-origin="625 : 180 : 1"
+ id="perspective2930" />
<linearGradient
inkscape:collect="always"
id="linearGradient7836">
@@ -4922,6 +4929,262 @@
gradientUnits="userSpaceOnUse"
id="linearGradient3740"
inkscape:collect="always" />
+ <linearGradient
+ x1="148.57143"
+ y1="580.93359"
+ x2="403.95001"
+ y2="556.64789"
+ id="linearGradient9514-8"
+ xlink:href="#linearGradient3550-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6307248,-0.78569617,0.65179606,0.51329457,256.28855,114.28429)" />
+ <linearGradient
+ id="linearGradient3550-4">
+ <stop
+ id="stop3552-6"
+ style="stop-color:#8b9174;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3554-9"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="348.60065"
+ y1="338.07721"
+ x2="375.36154"
+ y2="318.01028"
+ id="linearGradient6466-2"
+ xlink:href="#linearGradient3185-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(19.052029,-3.0895185)" />
+ <linearGradient
+ id="linearGradient3185-9">
+ <stop
+ id="stop3187-0"
+ style="stop-color:#189415;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3189-3"
+ style="stop-color:#2be126;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="348.60065"
+ y1="338.07721"
+ x2="375.36154"
+ y2="318.01028"
+ id="linearGradient6468-0"
+ xlink:href="#linearGradient3185-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(4.119358,37.589137)" />
+ <linearGradient
+ x1="348.60065"
+ y1="338.07721"
+ x2="375.36154"
+ y2="318.01028"
+ id="linearGradient6563-3"
+ xlink:href="#linearGradient3185-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(28.320583,70.029077)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3185-9"
+ id="linearGradient5783-6-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8269532,0,0,0.8236011,90.718402,44.233294)"
+ x1="348.60065"
+ y1="338.07721"
+ x2="375.36154"
+ y2="318.01028" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3185-9"
+ id="linearGradient6583-7"
+ x1="371.23682"
+ y1="322.88614"
+ x2="395.26917"
+ y2="322.88614"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0.33790588,-0.16552734)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3550-8-4"
+ id="linearGradient7199-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.03020671,-0.0376286,0.03121585,0.02458273,840.07621,-472.64274)"
+ x1="148.57143"
+ y1="580.93359"
+ x2="403.95001"
+ y2="556.64789" />
+ <linearGradient
+ id="linearGradient3550-8-4">
+ <stop
+ id="stop3552-7-9"
+ style="stop-color:#d01e1e;stop-opacity:1;"
+ offset="0" />
+ <stop
+ offset="0.25"
+ style="stop-color:#d24949;stop-opacity:1;"
+ id="stop7121-9" />
+ <stop
+ offset="0.5"
+ style="stop-color:#d57575;stop-opacity:1;"
+ id="stop7119-1" />
+ <stop
+ id="stop3554-0-9"
+ style="stop-color:#dacccc;stop-opacity:1;"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3466-1-2"
+ id="linearGradient7201-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.78857386,0.7805965,-0.7805965,0.78857386,713.6582,12.339179)"
+ x1="337.11661"
+ y1="117.24895"
+ x2="338.0838"
+ y2="126.52245" />
+ <linearGradient
+ id="linearGradient3466-1-2">
+ <stop
+ id="stop3468-8-0"
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop3470-9-6"
+ style="stop-color:#a0a0a0;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5704-6-9"
+ id="linearGradient7203-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.00564085,1.1095707,-1.1095707,0.00564085,1019.2742,0.51541278)"
+ x1="332.87787"
+ y1="121.99369"
+ x2="336.84845"
+ y2="124.19406" />
+ <linearGradient
+ id="linearGradient5704-6-9">
+ <stop
+ id="stop5706-5-5"
+ style="stop-color:#5a5a5a;stop-opacity:1"
+ offset="0" />
+ <stop
+ id="stop5708-5-6"
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1" />
+ </linearGradient>
+ <inkscape:perspective
+ id="perspective5649"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10585-7"
+ id="linearGradient5209"
+ gradientUnits="userSpaceOnUse"
+ x1="5.6449146"
+ y1="209.98189"
+ x2="13.522233"
+ y2="214.77893" />
+ <linearGradient
+ id="linearGradient10585-7">
+ <stop
+ style="stop-color:#d7d7d7;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop10587-0" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop10595-2" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient10585-7"
+ y2="214.77893"
+ x2="13.522233"
+ y1="209.98189"
+ x1="5.6449146"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8278-4"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5658-5">
+ <stop
+ style="stop-color:#d7d7d7;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop5660" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop5662" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient10585-7"
+ y2="214.77893"
+ x2="13.522233"
+ y1="209.98189"
+ x1="5.6449146"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8276-2"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5665">
+ <stop
+ style="stop-color:#d7d7d7;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop5667-5" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop5669" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient10585-7"
+ y2="214.77893"
+ x2="13.522233"
+ y1="209.98189"
+ x1="5.6449146"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8290-1"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5672">
+ <stop
+ style="stop-color:#d7d7d7;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop5674" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop5676" />
+ </linearGradient>
+ <linearGradient
+ xlink:href="#linearGradient10585-7"
+ y2="214.77893"
+ x2="13.522233"
+ y1="209.98189"
+ x1="5.6449146"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8288-3"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient5679-3">
+ <stop
+ style="stop-color:#d7d7d7;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop5681" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop5683" />
+ </linearGradient>
</defs>
<sodipodi:namedview
inkscape:guide-bbox="true"
@@ -4935,9 +5198,9 @@
inkscape:window-x="0"
inkscape:window-height="737"
inkscape:window-width="1024"
- inkscape:cy="439.31911"
- inkscape:cx="846.86933"
- inkscape:zoom="2.7464742"
+ inkscape:cy="142.58814"
+ inkscape:cx="464.32174"
+ inkscape:zoom="1.3732371"
gridtolerance="6"
snaptogrid="false"
showgrid="true"
@@ -4958,7 +5221,8 @@
inkscape:snap-midpoints="false"
inkscape:snap-intersection-paths="false"
inkscape:object-paths="false"
- inkscape:snap-object-midpoints="false">
+ inkscape:snap-object-midpoints="false"
+ inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid9252"
@@ -13661,92 +13925,6 @@ http://www.inkscape.org/</dc:description>
id="path4622"
sodipodi:nodetypes="cccccccc" />
</g>
- <g
- id="connector-ignore"
- inkscape:label="#g8308">
- <g
- id="g5802"
- style="stroke:url(#linearGradient8290);stroke-opacity:1"
- transform="matrix(0.625904,0,0,0.672041,489.16821,222.32729)">
- <rect
- style="color:#000000;fill:none;stroke:url(#linearGradient8288);stroke-width:1.54186893;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- id="rect5792"
- width="7.9986801"
- height="2.959625"
- x="8.5082998"
- y="211.5502" />
- </g>
- <path
- style="fill:none;stroke:#3c3c3c;stroke-width:1.00000024px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.8469945"
- d="m 494.5,361.4977 6,8"
- id="path7667"
- sodipodi:nodetypes="cc" />
- <g
- transform="matrix(0.689556,0,0,0.507098,484.56529,256.2643)"
- id="g5761"
- style="stroke:#000000;stroke-opacity:1">
- <rect
- style="color:#000000;fill:none;stroke:#000000;stroke-width:1.69109905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- id="rect5763"
- width="4.5088892"
- height="2.0118859"
- x="11.50698"
- y="205.5087" />
- </g>
- <use
- xlink:href="#g5761"
- height="1250"
- width="1250"
- transform="matrix(0.997702,0,0,1.018967,8.1086669,2.1407896)"
- id="use5785"
- y="0"
- x="0" />
- </g>
- <g
- id="connector-avoid"
- inkscape:label="#g8327">
- <path
- style="fill:none;stroke:#3c3c3c;stroke-width:1.00000024px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.83060111"
- d="m 517.5,361.4977 5,3 0,5"
- id="path12164"
- sodipodi:nodetypes="ccc" />
- <g
- transform="matrix(0.689556,0,0,0.507098,506.56529,256.2643)"
- id="use5787"
- style="stroke:#000000;stroke-opacity:1">
- <rect
- style="color:#000000;fill:none;stroke:#000000;stroke-width:1.69109905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- id="rect8286"
- width="4.5088892"
- height="2.0118859"
- x="11.50698"
- y="205.5087" />
- </g>
- <g
- transform="matrix(0.689556,0,0,0.507098,513.514,265.26677)"
- id="use5790"
- style="stroke:#000000;stroke-opacity:1">
- <rect
- style="color:#000000;fill:none;stroke:#000000;stroke-width:1.69109905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- id="rect8282"
- width="4.5088892"
- height="2.0118859"
- x="11.50698"
- y="205.5087" />
- </g>
- <g
- id="use5814"
- style="stroke:url(#linearGradient8278);stroke-opacity:1"
- transform="matrix(0.625904,0,0,0.672041,509.17462,223.32729)">
- <rect
- style="color:#000000;fill:none;stroke:url(#linearGradient8276);stroke-width:1.54186893;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- id="rect8274"
- width="7.9986801"
- height="2.959625"
- x="8.5082998"
- y="211.5502" />
- </g>
- </g>
<use
xlink:href="#properties_fill"
height="1250"
@@ -19650,4 +19828,730 @@ http://www.inkscape.org/</dc:description>
d="m 910.68469,121.666 c 0.89363,0.12497 1.4826,1.05773 1.2925,1.92328 -0.0941,1.00279 -1.11367,1.5906 -2.04198,1.62018 -0.72256,0.0699 -1.45173,-0.0589 -2.13313,-0.29781 0,-0.27759 0,-0.55517 0,-0.83276 0.83664,0.45611 1.92451,0.60201 2.80073,0.17757 0.80169,-0.43444 0.69059,-1.81155 -0.19684,-2.08095 -0.48076,-0.18386 -1.00008,-0.10942 -1.50209,-0.12512 0,-0.2363 0,-0.47261 0,-0.70891 0.6676,-0.0288 1.50939,0.14892 1.9565,-0.47536 0.4177,-0.66094 -0.14468,-1.53437 -0.90782,-1.51097 -0.66571,-0.0681 -1.33009,0.0928 -1.95831,0.2995 0,-0.25623 0,-0.51247 0,-0.7687 1.08005,-0.28661 2.40764,-0.52909 3.35334,0.23188 0.80208,0.64443 0.62653,2.14224 -0.3992,2.46393 l -0.12785,0.0456 -0.13585,0.0387" />
</g>
</g>
+ <g
+ transform="matrix(0.04789205,0,0,0.04789205,455.86867,510.0249)"
+ id="tool-spray">
+ <g
+ transform="matrix(-0.94143174,-0.33720363,-0.33720363,0.94143174,720.80661,-81.205214)"
+ id="g9509">
+ <path
+ d="m 438.15602,87.082496 -55.9059,66.568004 22.80746,20.82679 36.56243,-43.53544 c -1.294,-3.25228 -0.58217,-7.44694 2.10329,-10.64455 2.68545,-3.19761 6.57911,-4.48676 9.84153,-3.57832 l 7.39866,-8.80969 -22.80747,-20.826794 z"
+ id="rect2774-1"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.24399996;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 314.28571,330.93362 a 135.71428,135.71428 0 1 1 -271.428563,0 135.71428,135.71428 0 1 1 271.428563,0 z"
+ transform="matrix(0.43213144,0.39460388,-0.4413757,0.52555273,428.57034,-40.143962)"
+ id="path2776"
+ style="fill:#b8b8b8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:11.57818031;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="159.96521"
+ height="287.74951"
+ x="327.78137"
+ y="-119.49641"
+ transform="matrix(0.73844372,0.67431511,-0.6431164,0.76576844,0,0)"
+ id="rect2774-3"
+ style="fill:url(#linearGradient9514-8);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:7.22261095;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="matrix(-0.7512503,-0.20129692,-0.20129692,0.7512503,613.4079,-111.64166)"
+ id="g9516">
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.47520756,0.70195011,-0.67326918,0.49534453,466.98533,-132.476)"
+ id="path3599"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.23528449,0.67141567,-0.64400457,0.24522185,681.59007,-129.97399)"
+ id="path3601"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.55375067,0.61475467,-0.5896225,0.57723652,476.58624,-132.31409)"
+ id="path3603"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.33445431,0.65112443,-0.62453097,0.34861091,652.26955,-183.56984)"
+ id="path3605"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.27828,0.74781303,-0.7172813,0.29003798,627.53269,-164.64526)"
+ id="path3607"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.49032601,0.68961049,-0.66143135,0.51110713,640.27079,-195.75188)"
+ id="path3609"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.41674056,0.57738271,-0.55371602,0.43455271,467.75556,-241.39201)"
+ id="path3611"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29145432;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.55251369,0.61604388,-0.59085924,0.5759468,474.99185,-135.85699)"
+ id="path3613"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.47258702,0.4856349,-0.46577779,0.49263449,374.91635,-122.028)"
+ id="path3615"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.49703855,0.58813893,-0.56409817,0.51811541,576.10428,-185.32735)"
+ id="path3617"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.31461336,0.79763843,-0.76507062,0.32791137,543.40186,-108.86608)"
+ id="path3619"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.43193517,0.73167878,-0.70178959,0.45022897,489.14342,-132.12767)"
+ id="path3621"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.40456762,0.62087357,-0.59550694,0.42170884,630.76331,-168.65799)"
+ id="path3623"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.57353443,0.59247606,-0.56825063,0.59786383,455.6305,-132.04336)"
+ id="path3625"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.63006282,0.56602991,-0.54287749,0.65679877,459.86442,-107.56064)"
+ id="path3627"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(-0.1983519,0.82551639,-0.79186345,-0.20687051,898.06846,25.460342)"
+ id="path3629"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(-0.2458629,0.8135784,-0.78041723,-0.2564007,918.63978,42.528998)"
+ id="path3631"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.31409671,0.667486,-0.6402272,0.32738595,614.15155,-150.39368)"
+ id="path3633"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.03063804,0.72511034,-0.69552978,0.03186738,816.92733,-126.20221)"
+ id="path3635"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.46033764,0.57656967,-0.55300455,0.47985498,482.13936,-194.03029)"
+ id="path3637"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.60162945,0.55546522,-0.53269692,0.62734404,401.99584,-244.95759)"
+ id="path3639"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29145432;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.52595624,0.60244374,-0.57781654,0.54826139,579.5719,-185.82295)"
+ id="path3641"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.37305621,0.58918111,-0.56511041,0.38886063,581.3744,-126.97008)"
+ id="path3643"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.39417287,0.62024258,-0.59490274,0.41087214,579.31683,-134.01961)"
+ id="path3645"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.37494905,0.58206185,-0.55828136,0.39083469,618.05277,-126.73792)"
+ id="path3647"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.47220324,0.5168641,-0.49567804,0.49238595,366.51392,-220.32748)"
+ id="path3649"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29145432;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.55637359,0.6434196,-0.61711791,0.57996807,367.16353,-109.78265)"
+ id="path3651"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.56655772,0.57316188,-0.54972499,0.59059241,521.88966,-141.55567)"
+ id="path3653"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.61514533,0.73099436,-0.70103119,0.64143761,496.58722,-369.79801)"
+ id="path3655"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29145432;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.28771238,0.75147664,-0.72079451,0.29987111,591.19628,-157.05351)"
+ id="path3657"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.56631856,0.61943061,-0.59410643,0.59033838,303.76998,-208.44611)"
+ id="path3659"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.4929128,0.52616161,-0.50464934,0.51382051,522.36167,-108.57976)"
+ id="path3661"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.35098984,0.55235846,-0.52979201,0.36585963,509.19171,-152.16385)"
+ id="path3663"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.17650292,0.66162285,-0.63461717,0.18394159,748.84341,-122.89488)"
+ id="path3665"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.42628761,0.5263415,-0.50482865,0.44436207,399.21769,-141.83818)"
+ id="path3667"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.43287629,0.61015892,-0.58522646,0.45122242,532.45836,-146.29388)"
+ id="path3669"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.46956225,0.67290143,-0.64540597,0.4894621,434.99739,-55.33732)"
+ id="path3671"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.43889456,0.63736413,-0.61123882,0.4576536,435.47355,-331.48855)"
+ id="path3673"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29145432;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.61360527,0.58953593,-0.56542636,0.63963898,549.16036,-157.74722)"
+ id="path3675"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.32809642,0.49654591,-0.47625839,0.34199833,468.08659,-119.57341)"
+ id="path3677-9"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(-0.08338906,0.76251997,-0.73142503,-0.0870125,820.83709,-79.153239)"
+ id="path3679"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.10282914,0.76713446,-0.7358324,0.10712414,709.02409,-133.60265)"
+ id="path3681"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.56922558,0.59684162,-0.57243855,0.59337132,562.50285,-188.35402)"
+ id="path3683"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.52586224,0.5977614,-0.5733252,0.54816386,570.59228,-195.83416)"
+ id="path3685"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.34955854,0.49388172,-0.47370069,0.36437339,484.0619,-109.93119)"
+ id="path3687"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.22819514,0.55936211,-0.53652242,0.23784239,568.03778,-125.28098)"
+ id="path3689"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.30712819,0.67002137,-0.64265986,0.32012083,666.14384,-189.4803)"
+ id="path3691"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.40900903,0.62238246,-0.59695383,0.42633897,629.70039,-171.20121)"
+ id="path3693"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.44879149,0.60505052,-0.58032482,0.46781493,454.95879,-119.24367)"
+ id="path3695"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.37369945,0.72343719,-0.69378378,0.38967195,480.48271,-367.11927)"
+ id="path3697"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29145432;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.26607441,0.68878858,-0.66066572,0.27731935,718.19588,-137.79167)"
+ id="path3699"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.2757404,0.52962938,-0.50799768,0.28741252,506.63841,-126.75106)"
+ id="path3701"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.56236328,0.53040763,-0.50871512,0.58622393,431.21262,-210.35965)"
+ id="path3703"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.66961659,0.60167977,-0.57701715,0.69823705,253.41874,-410.88154)"
+ id="path3705"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29145432;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.32903138,0.74281819,-0.71248505,0.34294808,576.69189,-156.07083)"
+ id="path3707"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.41989145,0.60368439,-0.57901736,0.43768607,598.80486,-130.94614)"
+ id="path3709"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.50568145,0.667589,-0.64030657,0.52711779,508.05486,-143.94461)"
+ id="path3711"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.56991181,0.5273505,-0.50578193,0.59409376,463.17516,-114.1298)"
+ id="path3713"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.38328825,0.61417645,-0.58908514,0.39952525,528.50516,-179.36895)"
+ id="path3715"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.21228283,0.6694725,-0.642143,0.22124223,736.24094,-145.48175)"
+ id="path3717"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.52690686,0.65971841,-0.63275486,0.54924661,385.49523,-151.70652)"
+ id="path3719-0"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.41957988,0.47252748,-0.4532104,0.43737455,434.38962,-118.51804)"
+ id="path3721-8"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(-0.19273964,0.6687388,-0.64148031,-0.20100369,946.5828,-14.710004)"
+ id="path3723-3"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.47101974,0.47621255,-0.45673995,0.49100151,375.78838,-117.43423)"
+ id="path3725-8"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(-0.15857073,0.66640619,-0.63909046,-0.16534829,765.95393,-149.94831)"
+ id="path3727"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.29145432;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.45835154,0.47927283,-0.45967667,0.47779429,385.71237,-117.12216)"
+ id="path3729"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.4276062,0.48742288,-0.4674974,0.44574067,400.45691,-121.55545)"
+ id="path3731-1"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.2133432,0.78684264,-0.75472547,0.2223358,639.43024,-145.65066)"
+ id="path3733-6"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.35200522,0.77626244,-0.74456278,0.36689548,618.16456,-166.14695)"
+ id="path3735"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 581.84786,283.6361 0.24239,11.1012 9.28231,6.09376 -10.48296,3.66098 -2.92713,10.71108 -6.72121,-8.83858 -11.09137,0.52604 6.32902,-9.12352 -3.92772,-10.38597 10.63277,3.19994 8.6639,-6.94493 z"
+ transform="matrix(0.55587905,0.62577173,-0.60018995,0.57945429,398.38029,-123.74225)"
+ id="path3737"
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.62631679;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ <g
+ transform="matrix(0.8557944,0,0,0.8106021,188.92188,242.35843)"
+ id="spray-copy-mode">
+ <path
+ d="m 368.21875,315.40625 c -0.5938,0 -1.09375,0.49995 -1.09375,1.09375 l 0,8.1875 -6.625,0 c -0.5938,0 -1.09375,0.4687 -1.09375,1.0625 l 0,18.96875 c 0,0.41391 0.2519,0.75879 0.59375,0.9375 0.026,0.0136 0.0353,0.051 0.0625,0.0625 0.17831,0.34313 0.52264,0.59376 0.9375,0.59375 l 24.625,0 c 0.5938,0 1.09376,-0.46869 1.09375,-1.0625 l 0,-8.71875 6.125,0 c 0.5938,0 1.06251,-0.46869 1.0625,-1.0625 l 0,-18.96875 c 0,-0.5938 -0.4687,-1.09375 -1.0625,-1.09375 l -24.625,0 z"
+ id="rect6196"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <g
+ transform="translate(-3.5450574e-7,0.5149192)"
+ id="g6335">
+ <rect
+ width="26.775824"
+ height="21.111708"
+ ry="1.0718389"
+ x="367.13776"
+ y="315.42078"
+ id="rect6337"
+ style="fill:url(#linearGradient6466-2);fill-opacity:1;stroke:#000000;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <g
+ transform="translate(7.2088757,-31.410101)"
+ id="g6339">
+ <rect
+ width="26.775824"
+ height="21.111708"
+ ry="1.0718389"
+ x="352.72"
+ y="356.61435"
+ id="rect6341"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="26.775824"
+ height="21.111708"
+ ry="1.0718389"
+ x="352.20511"
+ y="356.09943"
+ id="rect6343"
+ style="fill:url(#linearGradient6468-0);fill-opacity:1;stroke:#000000;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ </g>
+ </g>
+ <g
+ transform="matrix(0.8413762,0,0,0.8105392,266.3079,183.1218)"
+ id="spray-union-mode">
+ <path
+ d="m 377.48731,389.03977 c -0.5938,0 -1.09375,0.49995 -1.09375,1.09375 l 0,8.1875 -6.625,0 c -0.5938,0 -1.09375,0.4687 -1.09375,1.0625 l 0,18.96875 c 0,0.41391 0.2519,0.75879 0.59375,0.9375 0.026,0.0136 0.0353,0.0511 0.0625,0.0625 0.17831,0.34313 0.52264,0.59376 0.9375,0.59375 l 24.625,0 c 0.5938,0 1.09376,-0.46869 1.09375,-1.0625 l 0,-8.71875 6.125,0 c 0.5938,0 1.06251,-0.46869 1.0625,-1.0625 l 0,-18.96875 c 0,-0.5938 -0.4687,-1.09375 -1.0625,-1.09375 l -24.625,0 z"
+ id="path6506"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <path
+ d="m 377.47944,388.53223 c -0.5938,0 -1.0625,0.49995 -1.0625,1.09375 l 0,8.1875 -6.65625,0 c -0.5938,0 -1.09375,0.4687 -1.09375,1.0625 l 0,18.96875 c 0,0.44535 0.27129,0.83772 0.65625,1 0.17597,0.35015 0.51748,0.59376 0.9375,0.59375 l 24.65625,0 c 0.5938,0 1.06251,-0.46869 1.0625,-1.0625 l 0,-8.71875 6.125,0 c 0.5938,0 1.06251,-0.46869 1.0625,-1.0625 l 0,-18.96875 c 0,-0.5938 -0.4687,-1.09375 -1.0625,-1.09375 l -24.625,0 z"
+ id="rect6510"
+ style="fill:url(#linearGradient6563-3);fill-opacity:1;stroke:#000000;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="translate(164.42529,191.5008)"
+ id="spray-clone-mode"
+ inkscape:label="#g5793">
+ <path
+ transform="matrix(0.8269532,0,0,0.8236011,70.705122,33.206996)"
+ d="m 373.36795,331.88368 c -0.5938,0 -1.09375,0.49995 -1.09375,1.09375 l 0,8.1875 -6.625,0 c -0.5938,0 -1.09375,0.4687 -1.09375,1.0625 l 0,18.96875 c 0,0.41391 0.2519,0.75879 0.59375,0.9375 0.026,0.0136 0.0353,0.051 0.0625,0.0625 0.17831,0.34313 0.52264,0.59376 0.9375,0.59375 l 24.625,0 c 0.5938,0 1.09376,-0.46869 1.09375,-1.0625 l 0,-8.71875 6.125,0 c 0.5938,0 1.06251,-0.46869 1.0625,-1.0625 l 0,-18.96875 c 0,-0.5938 -0.4687,-1.09375 -1.0625,-1.09375 l -24.625,0 z"
+ id="path6442"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <g
+ id="g5785">
+ <g
+ id="g5780">
+ <rect
+ width="22.142353"
+ height="17.387625"
+ ry="0.88276768"
+ x="378.569"
+ y="306.55872"
+ id="rect6446"
+ style="fill:url(#linearGradient5783-6-3);fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ id="g5775">
+ <rect
+ transform="matrix(0.8269532,0,0,0.8236011,80.498855,-10.474112)"
+ width="26.775824"
+ height="21.111708"
+ ry="1.0718389"
+ x="353.23492"
+ y="394.71841"
+ id="rect6450"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.20000005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <rect
+ width="22.142353"
+ height="17.387625"
+ ry="0.88276768"
+ x="372.51971"
+ y="314.02679"
+ id="rect6452"
+ style="fill:url(#linearGradient6583-7);fill-opacity:1;stroke:#c2c2c2;stroke-width:1.88999999;stroke-linejoin:miter;stroke-miterlimit:4.19999981;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.88999999;stroke-linejoin:miter;stroke-miterlimit:4.19999981;stroke-opacity:1;stroke-dasharray:3.77999997, 3.77999997;stroke-dashoffset:0"
+ id="rect6585"
+ y="314.02679"
+ x="372.51971"
+ ry="0.88276768"
+ height="17.387625"
+ width="22.142353" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="dialog-spray-options"
+ transform="matrix(1.4792628,0,0,1.4792628,-674.73187,-34.196449)"
+ inkscape:label="spray-options">
+ <path
+ style="fill:#d32b2b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.70700002;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2774-1-5"
+ d="m 889.56228,361.00892 -3.20403,2.65834 0.89649,1.17656 2.09543,-1.73855 c -0.0331,-0.16432 0.0363,-0.35589 0.1902,-0.48358 0.15391,-0.1277 0.34842,-0.15512 0.49437,-0.0844 l 0.42403,-0.3518 -0.89649,-1.17657 z" />
+ <path
+ style="fill:#de7c7c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.75099999;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="path2776-8"
+ d="m 887.1665,368.88345 a 3.7917328,4.4707858 44.150037 0 1 -4.61038,-6.05077 3.7917328,4.4707858 44.150037 0 1 4.61038,6.05077 z" />
+ <rect
+ style="fill:url(#linearGradient7199-9);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.84636402;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect2774-7"
+ transform="matrix(0.60606627,0.79541416,-0.76960011,0.63852617,0,0)"
+ y="-483.83899"
+ x="843.50018"
+ height="13.780915"
+ width="7.6610627" />
+ <path
+ d="m 881.92186,374.5484 c 0.008,1.66436 -1.0983,2.22479 -2.20786,2.23043 l -2.77394,0.0141 -0.56042,-1.10675 -0.006,-1.10957 2.21914,-0.0113 -0.0226,-4.43829 -2.21914,0.0113 -0.006,-1.10957 0.54914,-1.1124 2.77393,-0.0141 c 1.10957,-0.006 2.22196,0.54351 2.23042,2.20786 l 5.54785,-0.0282 c -0.008,-1.66435 1.0983,-2.22479 2.20786,-2.23043 l 2.77393,-0.0141 0.56043,1.10676 0.006,1.10956 -2.21914,0.0113 0.0226,4.43829 2.21914,-0.0113 0.006,1.10958 -0.54916,1.11239 -2.77392,0.0141 c -0.55478,0.003 -2.22196,-0.5435 -2.23042,-2.20786 l -5.54785,0.0282 z"
+ id="path11005-9"
+ style="fill:url(#linearGradient7201-4);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7203-5);stroke-width:1.1095854px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ <g
+ id="connector-ignore"
+ inkscape:label="#g8308"
+ transform="translate(16.916975,1.0009742)">
+ <g
+ id="g5802"
+ style="stroke:url(#linearGradient8290-1);stroke-opacity:1"
+ transform="matrix(0.625904,0,0,0.672041,489.16821,222.32729)">
+ <rect
+ style="fill:none;stroke:url(#linearGradient8288-3);stroke-width:1.54186893;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect5792"
+ width="7.9986801"
+ height="2.959625"
+ x="8.5082998"
+ y="211.5502" />
+ </g>
+ <path
+ style="fill:none;stroke:#3c3c3c;stroke-width:1.00000024px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.8469945"
+ d="m 494.5,361.4977 6,8"
+ id="path7667"
+ sodipodi:nodetypes="cc" />
+ <g
+ transform="matrix(0.689556,0,0,0.507098,484.56529,256.2643)"
+ id="g5761"
+ style="stroke:#000000;stroke-opacity:1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.69109905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect5763"
+ width="4.5088892"
+ height="2.0118859"
+ x="11.50698"
+ y="205.5087" />
+ </g>
+ <use
+ xlink:href="#g5761"
+ height="1250"
+ width="1250"
+ transform="matrix(0.997702,0,0,1.018967,8.1086669,2.1407896)"
+ id="use5785"
+ y="0"
+ x="0" />
+ </g>
+ <g
+ id="connector-avoid"
+ inkscape:label="#g8327"
+ transform="translate(16.916975,1.0009742)">
+ <path
+ style="fill:none;stroke:#3c3c3c;stroke-width:1.00000024px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.83060111"
+ d="m 517.5,361.4977 5,3 0,5"
+ id="path12164"
+ sodipodi:nodetypes="ccc" />
+ <g
+ transform="matrix(0.689556,0,0,0.507098,506.56529,256.2643)"
+ id="use5787"
+ style="stroke:#000000;stroke-opacity:1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.69109905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect8286"
+ width="4.5088892"
+ height="2.0118859"
+ x="11.50698"
+ y="205.5087" />
+ </g>
+ <g
+ transform="matrix(0.689556,0,0,0.507098,513.514,265.26677)"
+ id="use5790"
+ style="stroke:#000000;stroke-opacity:1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.69109905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect8282"
+ width="4.5088892"
+ height="2.0118859"
+ x="11.50698"
+ y="205.5087" />
+ </g>
+ <g
+ id="use5814"
+ style="stroke:url(#linearGradient8278-4);stroke-opacity:1"
+ transform="matrix(0.625904,0,0,0.672041,509.17462,223.32729)">
+ <rect
+ style="fill:none;stroke:url(#linearGradient8276-2);stroke-width:1.54186893;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect8274"
+ width="7.9986801"
+ height="2.959625"
+ x="8.5082998"
+ y="211.5502" />
+ </g>
+ </g>
+ <g
+ id="connector-orthogonal"
+ inkscape:label="#g8327"
+ transform="matrix(-1,0,0,1,1072.9748,1.0009342)">
+ <path
+ style="fill:none;stroke:#3c3c3c;stroke-width:1.00000024px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.83060111"
+ d="m 517.5,360.9977 2,0.002 0,9.00234 3,-0.002"
+ id="path5193"
+ sodipodi:nodetypes="cccc" />
+ <g
+ transform="matrix(0.689556,0,0,0.507098,506.56529,256.2643)"
+ id="g5195"
+ style="stroke:#000000;stroke-opacity:1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.69109905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect5197"
+ width="4.5088892"
+ height="2.0118859"
+ x="11.50698"
+ y="205.5087" />
+ </g>
+ <g
+ transform="matrix(0.689556,0,0,0.507098,513.514,265.26677)"
+ id="g5199"
+ style="stroke:#000000;stroke-opacity:1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.69109905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect5201"
+ width="4.5088892"
+ height="2.0118859"
+ x="11.50698"
+ y="205.5087" />
+ </g>
+ <g
+ id="g5203"
+ style="stroke:url(#linearGradient5209);stroke-opacity:1"
+ transform="matrix(0.625904,0,0,0.672041,509.17462,223.32729)" />
+ </g>
+ <g
+ id="connector-edit"
+ transform="matrix(0.5008045,0,0,0.5008045,547.98616,270.83347)"
+ inkscape:label="#draw_node">
+ <rect
+ y="180"
+ x="-110"
+ height="24"
+ width="24"
+ id="rect5213"
+ style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
+ <rect
+ style="fill:#ff0000;fill-opacity:0.39215692;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.99678624;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect5217"
+ width="6.1177049"
+ height="5.9961362"
+ x="-108.26915"
+ y="181.73476" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path5221"
+ d="m -104.98202,185.05712 10.198948,18.1231 6.79927,-6.79616 -16.998218,-11.32694 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99839354;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ </g>
+ <g
+ transform="translate(-11.083035,0.97828419)"
+ id="connector-new-connpoint"
+ inkscape:label="#g6061">
+ <path
+ sodipodi:end="4.7170453"
+ sodipodi:start="3.1455643"
+ d="m 578.00008,371.96028 c 0.0219,-5.5228 4.51683,-9.98214 10.03964,-9.9602 0.002,10e-6 0.005,2e-5 0.007,3e-5 L 588,372 z"
+ sodipodi:ry="10"
+ sodipodi:rx="10"
+ sodipodi:cy="372"
+ sodipodi:cx="588"
+ id="path6018"
+ style="fill:#b0c5da;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <rect
+ y="360.98068"
+ x="577"
+ height="12.019308"
+ width="12.019308"
+ id="rect5199"
+ style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
+ <rect
+ style="fill:#ff7777;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.99999952;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.94117647;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
+ id="rect5202"
+ width="3"
+ height="3"
+ x="580"
+ y="363" />
+ </g>
+ <g
+ transform="translate(-11.083035,0.97828419)"
+ id="connector-remove-connpoint"
+ inkscape:label="#g6098">
+ <rect
+ style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline"
+ id="rect6086"
+ width="12.019308"
+ height="12.019308"
+ x="591.5"
+ y="361" />
+ <g
+ transform="matrix(0.5555556,0,0,0.5555556,57.499957,271.55555)"
+ id="g6088">
+ <path
+ id="path6090"
+ d="m 972,171 1,-1 7,0 1,1 0,7 -1,1 -7,0 -1,-1 0,-7 z"
+ style="fill:#aa0000;fill-opacity:1;fill-rule:evenodd;stroke:#aa0000;stroke-width:1.79999971px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2.15999985;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 974,171.85 5,5"
+ id="path6092"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:2.15999985;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 979,171.85 -5,5"
+ id="path6094"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <rect
+ y="363"
+ x="593"
+ height="3"
+ width="3"
+ id="rect6096"
+ style="fill:#ff7777;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.99999952;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:0.94117647;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" />
+ </g>
</svg>
diff --git a/share/icons/out-of-gamut-icon.png b/share/icons/out-of-gamut-icon.png
new file mode 100644
index 000000000..1e96a9563
--- /dev/null
+++ b/share/icons/out-of-gamut-icon.png
Binary files differ
diff --git a/share/icons/out-of-gamut-icon.svg b/share/icons/out-of-gamut-icon.svg
new file mode 100644
index 000000000..4fb171139
--- /dev/null
+++ b/share/icons/out-of-gamut-icon.svg
@@ -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
index 000000000..14fed033d
--- /dev/null
+++ b/share/icons/too-much-ink-icon.png
Binary files differ
diff --git a/share/icons/too-much-ink-icon.svg b/share/icons/too-much-ink-icon.svg
new file mode 100644
index 000000000..a2f688498
--- /dev/null
+++ b/share/icons/too-much-ink-icon.svg
@@ -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>
diff --git a/src/2geom/path-intersection.cpp b/src/2geom/path-intersection.cpp
index b2d5ceabb..2e4eba519 100644
--- a/src/2geom/path-intersection.cpp
+++ b/src/2geom/path-intersection.cpp
@@ -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);
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1885f56e5..46c2586d1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -86,6 +86,7 @@ composite-undo-stack-observer.cpp
common-context.cpp
conditions.cpp
conn-avoid-ref.cpp
+connection-points.cpp
connector-context.cpp
console-output-undo-observer.cpp
context-fns.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 8f9682832..3b2dfeeb6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -270,7 +270,7 @@ check_PROGRAMS = cxxtests
# List of all tests to be run.
TESTS = $(check_PROGRAMS) ../share/extensions/test/run-all-extension-tests
-# XFAIL_TESTS = $(check_PROGRAMS) ../share/extensions/test/run-all-extension-tests
+XFAIL_TESTS = $(check_PROGRAMS) ../share/extensions/test/run-all-extension-tests
# including the the testsuites here ensures that they get distributed
cxxtests_SOURCES = cxxtests.cpp libnr/nr-compose-reference.cpp $(CXXTEST_TESTSUITES)
diff --git a/src/Makefile_insert b/src/Makefile_insert
index de986ca16..b32889f65 100644
--- a/src/Makefile_insert
+++ b/src/Makefile_insert
@@ -20,6 +20,7 @@ ink_common_sources += \
composite-undo-stack-observer.cpp \
composite-undo-stack-observer.h \
conditions.cpp conditions.h \
+ connection-points.cpp connection-points.h \
conn-avoid-ref.cpp conn-avoid-ref.h \
connection-pool.h \
connector-context.cpp connector-context.h \
@@ -222,6 +223,7 @@ ink_common_sources += \
sp-tspan.cpp sp-tspan.h \
sp-use.cpp sp-use.h \
sp-use-reference.cpp sp-use-reference.h \
+ spray-context.cpp spray-context.h \
star-context.cpp star-context.h \
streq.h \
strneq.h \
@@ -269,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 \
diff --git a/src/attributes.cpp b/src/attributes.cpp
index 69b11fae9..d03c3be3e 100644
--- a/src/attributes.cpp
+++ b/src/attributes.cpp
@@ -37,6 +37,7 @@ static SPStyleProp const props[] = {
{SP_ATTR_SODIPODI_INSENSITIVE, "sodipodi:insensitive"},
{SP_ATTR_SODIPODI_NONPRINTABLE, "sodipodi:nonprintable"},
{SP_ATTR_CONNECTOR_AVOID, "inkscape:connector-avoid"},
+ {SP_ATTR_CONNECTION_POINTS, "inkscape:connection-points"},
{SP_ATTR_STYLE, "style"},
{SP_ATTR_TRANSFORM_CENTER_X, "inkscape:transform-center-x"},
{SP_ATTR_TRANSFORM_CENTER_Y, "inkscape:transform-center-y"},
@@ -124,6 +125,7 @@ static SPStyleProp const props[] = {
{SP_ATTR_CONNECTOR_TYPE, "inkscape:connector-type"},
{SP_ATTR_CONNECTION_START, "inkscape:connection-start"},
{SP_ATTR_CONNECTION_END, "inkscape:connection-end"},
+ {SP_ATTR_CONNECTOR_CURVATURE, "inkscape:connector-curvature"},
/* SPRect */
{SP_ATTR_RX, "rx"},
{SP_ATTR_RY, "ry"},
diff --git a/src/attributes.h b/src/attributes.h
index 52f71b203..af60b75be 100644
--- a/src/attributes.h
+++ b/src/attributes.h
@@ -36,6 +36,7 @@ enum SPAttributeEnum {
SP_ATTR_SODIPODI_INSENSITIVE,
SP_ATTR_SODIPODI_NONPRINTABLE,
SP_ATTR_CONNECTOR_AVOID,
+ SP_ATTR_CONNECTION_POINTS,
SP_ATTR_STYLE,
SP_ATTR_TRANSFORM_CENTER_X,
SP_ATTR_TRANSFORM_CENTER_Y,
@@ -124,6 +125,7 @@ enum SPAttributeEnum {
SP_ATTR_CONNECTOR_TYPE,
SP_ATTR_CONNECTION_START,
SP_ATTR_CONNECTION_END,
+ SP_ATTR_CONNECTOR_CURVATURE,
/* SPRect */
SP_ATTR_RX,
SP_ATTR_RY,
diff --git a/src/bind/javabind.cpp b/src/bind/javabind.cpp
index f7022584f..6dc8c9a9b 100644
--- a/src/bind/javabind.cpp
+++ b/src/bind/javabind.cpp
@@ -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)
{
diff --git a/src/color-profile.cpp b/src/color-profile.cpp
index 4b1307316..310a37356 100644
--- a/src/color-profile.cpp
+++ b/src/color-profile.cpp
@@ -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>
diff --git a/src/color-profile.h b/src/color-profile.h
index 2e57e7ef0..40d0d7698 100644
--- a/src/color-profile.h
+++ b/src/color-profile.h
@@ -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
};
diff --git a/src/color.cpp b/src/color.cpp
index b16d9950f..07c15ff15 100644
--- a/src/color.cpp
+++ b/src/color.cpp
@@ -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();
}
diff --git a/src/color.h b/src/color.h
index bebeaec60..7fd351360 100644
--- a/src/color.h
+++ b/src/color.h
@@ -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;
diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp
index 43c9c0b66..b9dc218b4 100644
--- a/src/conn-avoid-ref.cpp
+++ b/src/conn-avoid-ref.cpp
@@ -12,23 +12,34 @@
#include <cstring>
#include <string>
+#include <iostream>
#include "sp-item.h"
+#include "display/curve.h"
+#include "2geom/line.h"
+#include "2geom/crossing.h"
+#include "2geom/convex-cover.h"
+#include "svg/stringstream.h"
#include "conn-avoid-ref.h"
-#include "libavoid/polyutil.h"
+#include "connection-points.h"
+#include "sp-conn-end.h"
+#include "sp-path.h"
#include "libavoid/router.h"
#include "libavoid/connector.h"
+#include "libavoid/geomtypes.h"
#include "xml/node.h"
#include "document.h"
#include "desktop.h"
#include "desktop-handles.h"
#include "sp-namedview.h"
#include "inkscape.h"
+#include <glibmm/i18n.h>
+
using Avoid::Router;
-static Avoid::Polygn avoid_item_poly(SPItem const *item);
+static Avoid::Polygon avoid_item_poly(SPItem const *item);
SPAvoidRef::SPAvoidRef(SPItem *spitem)
@@ -44,13 +55,17 @@ SPAvoidRef::SPAvoidRef(SPItem *spitem)
SPAvoidRef::~SPAvoidRef()
{
_transformed_connection.disconnect();
- if (shapeRef) {
+
+ // If the document is being destroyed then the router instance
+ // and the ShapeRefs will have been destroyed with it.
+ const bool routerInstanceExists = (item->document->router != NULL);
+
+ if (shapeRef && routerInstanceExists) {
Router *router = shapeRef->router();
- // shapeRef is finalised by delShape,
- // so no memory is lost here.
- router->delShape(shapeRef);
- shapeRef = NULL;
+ router->removeShape(shapeRef);
+ delete shapeRef;
}
+ shapeRef = NULL;
}
@@ -66,6 +81,205 @@ void SPAvoidRef::setAvoid(char const *value)
}
}
+void print_connection_points(std::map<int, ConnectionPoint>& cp)
+{
+ std::map<int, ConnectionPoint>::iterator i;
+ for (i=cp.begin(); i!=cp.end(); ++i)
+ {
+ const ConnectionPoint& p = i->second;
+ std::cout<<p.id<<" "<<p.type<<" "<<p.pos[Geom::X]<<" "<<p.pos[Geom::Y]<<std::endl;
+ }
+}
+
+void SPAvoidRef::setConnectionPoints(gchar const *value)
+{
+ std::set<int> updates;
+ std::set<int> deletes;
+ std::set<int> seen;
+
+ if (value)
+ {
+ /* Rebuild the connection points list.
+ Update the connectors for which
+ the endpoint has changed.
+ */
+
+ gchar ** strarray = g_strsplit(value, "|", 0);
+ gchar ** iter = strarray;
+
+ while (*iter != NULL) {
+ ConnectionPoint cp;
+ Inkscape::SVGIStringStream is(*iter);
+ is>>cp;
+ cp.type = ConnPointUserDefined;
+
+ /* Mark this connection point as seen, so we can delete
+ the other ones.
+ */
+ seen.insert(cp.id);
+ if ( connection_points.find(cp.id) != connection_points.end() )
+ {
+ /* An already existing connection point.
+ Check to see if changed, and, if it is
+ the case, trigger connector update for
+ the connector attached to this connection
+ point. This is done by adding the
+ connection point to a list of connection
+ points to be updated.
+ */
+ if ( connection_points[cp.id] != cp )
+ // The connection point got updated.
+ // Put it in the update list.
+ updates.insert(cp.id);
+ }
+ connection_points[cp.id] = cp;
+ ++iter;
+ }
+ /* Delete the connection points that didn't appear
+ in the new connection point list.
+ */
+ std::map<int, ConnectionPoint>::iterator it;
+
+ for (it=connection_points.begin(); it!=connection_points.end(); ++it)
+ if ( seen.find(it->first) == seen.end())
+ deletes.insert(it->first);
+ g_strfreev(strarray);
+ }
+ else
+ {
+ /* Delete all the user-defined connection points
+ Actually we do this by adding them to the list
+ of connection points to be deleted.
+ */
+ std::map<int, ConnectionPoint>::iterator it;
+
+ for (it=connection_points.begin(); it!=connection_points.end(); ++it)
+ deletes.insert(it->first);
+ }
+ /* Act upon updates and deletes.
+ */
+ if (deletes.empty() && updates.empty())
+ // Nothing to do, just return.
+ return;
+ // Get a list of attached connectors.
+ GSList* conns = getAttachedConnectors(Avoid::runningToAndFrom);
+ for (GSList *i = conns; i != NULL; i = i->next)
+ {
+ SPPath* path = SP_PATH(i->data);
+ SPConnEnd** connEnds = path->connEndPair.getConnEnds();
+ for (int ix=0; ix<2; ++ix) {
+ if (connEnds[ix]->type == ConnPointUserDefined) {
+ if (updates.find(connEnds[ix]->id) != updates.end()) {
+ if (path->connEndPair.isAutoRoutingConn()) {
+ path->connEndPair.tellLibavoidNewEndpoints();
+ } else {
+ }
+ }
+ else if (deletes.find(connEnds[ix]->id) != deletes.end()) {
+ sp_conn_end_detach(path, ix);
+ }
+ }
+ }
+ }
+ g_slist_free(conns);
+ // Remove all deleted connection points
+ if (deletes.size())
+ for (std::set<int>::iterator it = deletes.begin(); it != deletes.end(); ++it)
+ connection_points.erase(*it);
+}
+
+void SPAvoidRef::setConnectionPointsAttrUndoable(const gchar* value, const gchar* action)
+{
+ SPDocument* doc = SP_OBJECT_DOCUMENT(item);
+
+ sp_object_setAttribute( SP_OBJECT(item), "inkscape:connection-points", value, 0 );
+ item->updateRepr();
+ sp_document_ensure_up_to_date(doc);
+ sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR, action);
+}
+
+void SPAvoidRef::addConnectionPoint(ConnectionPoint &cp)
+{
+ Inkscape::SVGOStringStream ostr;
+ bool first = true;
+ int newId = 1;
+ if ( connection_points.size() )
+ {
+ for (IdConnectionPointMap::iterator it = connection_points.begin(); ; )
+ {
+ if ( first )
+ {
+ first = false;
+ ostr<<it->second;
+ }
+ else
+ ostr<<'|'<<it->second;
+ IdConnectionPointMap::iterator prev_it = it;
+ ++it;
+ if ( it == connection_points.end() || prev_it->first + 1 != it->first )
+ {
+ newId = prev_it->first + 1;
+ break;
+ }
+ }
+ }
+ cp.id = newId;
+ if ( first )
+ {
+ first = false;
+ ostr<<cp;
+ }
+ else
+ ostr<<'|'<<cp;
+
+ this->setConnectionPointsAttrUndoable( ostr.str().c_str(), _("Added a new connection point") );
+}
+
+void SPAvoidRef::updateConnectionPoint(ConnectionPoint &cp)
+{
+ Inkscape::SVGOStringStream ostr;
+ IdConnectionPointMap::iterator cp_pos = connection_points.find( cp.id );
+ if ( cp_pos != connection_points.end() )
+ {
+ bool first = true;
+ for (IdConnectionPointMap::iterator it = connection_points.begin(); it != connection_points.end(); ++it)
+ {
+ ConnectionPoint* to_write;
+ if ( it != cp_pos )
+ to_write = &it->second;
+ else
+ to_write = &cp;
+ if ( first )
+ {
+ first = false;
+ ostr<<*to_write;
+ }
+ else
+ ostr<<'|'<<*to_write;
+ }
+ this->setConnectionPointsAttrUndoable( ostr.str().c_str(), _("Moved a connection point") );
+ }
+}
+
+void SPAvoidRef::deleteConnectionPoint(ConnectionPoint &cp)
+{
+ Inkscape::SVGOStringStream ostr;
+ IdConnectionPointMap::iterator cp_pos = connection_points.find( cp.id );
+ if ( cp_pos != connection_points.end() ) {
+ bool first = true;
+ for (IdConnectionPointMap::iterator it = connection_points.begin(); it != connection_points.end(); ++it) {
+ if ( it != cp_pos ) {
+ if ( first ) {
+ first = false;
+ ostr<<it->second;
+ } else {
+ ostr<<'|'<<it->second;
+ }
+ }
+ }
+ this->setConnectionPointsAttrUndoable( ostr.str().c_str(), _("Removed a connection point") );
+ }
+}
void SPAvoidRef::handleSettingChange(void)
{
@@ -90,33 +304,31 @@ void SPAvoidRef::handleSettingChange(void)
setting = new_setting;
Router *router = item->document->router;
-
+
_transformed_connection.disconnect();
if (new_setting) {
- Avoid::Polygn poly = avoid_item_poly(item);
- if (poly.pn > 0) {
+ Avoid::Polygon poly = avoid_item_poly(item);
+ if (poly.size() > 0) {
_transformed_connection = item->connectTransformed(
sigc::ptr_fun(&avoid_item_move));
const char *id = SP_OBJECT_REPR(item)->attribute("id");
g_assert(id != NULL);
-
+
// Get a unique ID for the item.
GQuark itemID = g_quark_from_string(id);
- shapeRef = new Avoid::ShapeRef(router, itemID, poly);
- Avoid::freePoly(poly);
-
+ shapeRef = new Avoid::ShapeRef(router, poly, itemID);
+
router->addShape(shapeRef);
}
}
else
{
g_assert(shapeRef);
-
- // shapeRef is finalised by delShape,
- // so no memory is lost here.
- router->delShape(shapeRef);
+
+ router->removeShape(shapeRef);
+ delete shapeRef;
shapeRef = NULL;
}
}
@@ -129,7 +341,7 @@ GSList *SPAvoidRef::getAttachedShapes(const unsigned int type)
Avoid::IntList shapes;
GQuark shapeId = g_quark_from_string(item->id);
item->document->router->attachedShapes(shapes, shapeId, type);
-
+
Avoid::IntList::iterator finish = shapes.end();
for (Avoid::IntList::iterator i = shapes.begin(); i != finish; ++i) {
const gchar *connId = g_quark_to_string(*i);
@@ -153,7 +365,7 @@ GSList *SPAvoidRef::getAttachedConnectors(const unsigned int type)
Avoid::IntList conns;
GQuark shapeId = g_quark_from_string(item->id);
item->document->router->attachedConns(conns, shapeId, type);
-
+
Avoid::IntList::iterator finish = conns.end();
for (Avoid::IntList::iterator i = conns.begin(); i != finish; ++i) {
const gchar *connId = g_quark_to_string(*i);
@@ -169,14 +381,54 @@ GSList *SPAvoidRef::getAttachedConnectors(const unsigned int type)
return list;
}
+Geom::Point SPAvoidRef::getConnectionPointPos(const int type, const int id)
+{
+ g_assert(item);
+ Geom::Point pos;
+ const Geom::Matrix& transform = sp_item_i2doc_affine(item);
+ // TODO investigate why this was asking for the active desktop:
+ SPDesktop *desktop = inkscape_active_desktop();
+
+ if ( type == ConnPointDefault )
+ {
+ // For now, just default to the centre of the item
+ Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item));
+ pos = (bbox) ? bbox->midpoint() : Geom::Point(0, 0);
+ }
+ else
+ {
+ // Get coordinates from the list of connection points
+ // that are attached to the item
+ pos = connection_points[id].pos * transform;
+ }
+
+ return pos;
+}
-static Avoid::Polygn avoid_item_poly(SPItem const *item)
+bool SPAvoidRef::isValidConnPointId( const int type, const int id )
+{
+ if ( type < 0 || type > 1 )
+ return false;
+ else
+ {
+ if ( type == ConnPointDefault )
+ if ( id < 0 || id > 8 )
+ return false;
+ else
+ {
+ }
+ else
+ return connection_points.find( id ) != connection_points.end();
+ }
+
+ return true;
+}
+
+static Avoid::Polygon avoid_item_poly(SPItem const *item)
{
SPDesktop *desktop = inkscape_active_desktop();
g_assert(desktop != NULL);
- Avoid::Polygn poly;
-
// TODO: The right way to do this is to return the convex hull of
// the object, or an approximation in the case of a rounded
// object. Specific SPItems will need to have a new
@@ -185,24 +437,116 @@ static Avoid::Polygn avoid_item_poly(SPItem const *item)
// some convex hull code, though not NR::ConvexHull as this
// only keeps the bounding box of the convex hull currently.
- // TODO: SPItem::getBounds gives the wrong result for some objects
- // that have internal representations that are updated later
- // by the sp_*_update functions, e.g., text.
- sp_document_ensure_up_to_date(item->document);
-
+ double spacing = desktop->namedview->connector_spacing;
+
+ // [sommer] If item is a shape, use an approximation of its convex hull
+ {
+ // MJW: Disable this for the moment. It still has some issues.
+ const bool convex_hull_approximation_enabled = false;
+
+ if ( convex_hull_approximation_enabled && SP_IS_SHAPE (item) ) {
+ // The number of points to use for approximation
+ const unsigned NUM_POINTS = 64;
+
+// printf("[sommer] is a shape\n");
+ SPCurve* curve = sp_shape_get_curve (SP_SHAPE (item));
+ if (curve) {
+// printf("[sommer] is a curve\n");
+
+ // apply all transformations
+ Geom::Matrix itd_mat = sp_item_i2doc_affine(item);
+ curve->transform(itd_mat);
+
+ // iterate over all paths
+ const Geom::PathVector& curve_pv = curve->get_pathvector();
+ std::vector<Geom::Point> hull_points;
+ for (Geom::PathVector::const_iterator i = curve_pv.begin(); i != curve_pv.end(); i++) {
+ const Geom::Path& curve_pv_path = *i;
+// printf("[sommer] tracing sub-path\n");
+
+ // FIXME: enlarge path by "desktop->namedview->connector_spacing" (using sp_selected_path_do_offset)?
+
+ // use appropriate fraction of points for this path (first one gets any remainder)
+ unsigned num_points = NUM_POINTS / curve_pv.size();
+ if (i == curve_pv.begin()) num_points += NUM_POINTS - (num_points * curve_pv.size());
+ printf("[sommer] using %d points for this path\n", num_points);
+
+ // sample points along the path for approximation of convex hull
+ for (unsigned n = 0; n < num_points; n++) {
+ double at = curve_pv_path.size() / static_cast<double>(num_points) * n;
+ Geom::Point pt = curve_pv_path.pointAt(at);
+ hull_points.push_back(pt);
+ }
+ }
+
+ curve->unref();
+
+ // create convex hull from all sampled points
+ Geom::ConvexHull hull(hull_points);
+
+ // store expanded convex hull in Avoid::Polygn
+ unsigned n = 0;
+ Avoid::Polygon poly;
+/*
+ const Geom::Point& old_pt = *hull.boundary.begin();
+*/
+
+ Geom::Line hull_edge(*hull.boundary.begin(), *(hull.boundary.begin()+1));
+ Geom::Line parallel_hull_edge;
+ parallel_hull_edge.origin(hull_edge.origin()+hull_edge.versor().ccw()*spacing);
+ parallel_hull_edge.versor(hull_edge.versor());
+ Geom::Line bisector = Geom::make_angle_bisector_line( *(hull.boundary.end()), *hull.boundary.begin(),
+ *(hull.boundary.begin()+1));
+ Geom::OptCrossing int_pt = Geom::intersection(parallel_hull_edge, bisector);
+
+ if (int_pt)
+ {
+ Avoid::Point avoid_pt((parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::X],
+ (parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::Y]);
+// printf("[sommer] %f, %f\n", old_pt[Geom::X], old_pt[Geom::Y]);
+/* printf("[sommer] %f, %f\n", (parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::X],
+ (parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::Y]);*/
+ poly.ps.push_back(avoid_pt);
+ }
+ for (std::vector<Geom::Point>::const_iterator i = hull.boundary.begin() + 1; i != hull.boundary.end(); i++, n++) {
+/*
+ const Geom::Point& old_pt = *i;
+*/
+ Geom::Line hull_edge(*i, *(i+1));
+ Geom::Line parallel_hull_edge;
+ parallel_hull_edge.origin(hull_edge.origin()+hull_edge.versor().ccw()*spacing);
+ parallel_hull_edge.versor(hull_edge.versor());
+ Geom::Line bisector = Geom::make_angle_bisector_line( *(i-1), *i, *(i+1));
+ Geom::OptCrossing intersect_pt = Geom::intersection(parallel_hull_edge, bisector);
+
+ if (int_pt)
+ {
+ Avoid::Point avoid_pt((parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::X],
+ (parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::Y]);
+/* printf("[sommer] %f, %f\n", old_pt[Geom::X], old_pt[Geom::Y]);
+ printf("[sommer] %f, %f\n", (parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::X],
+ (parallel_hull_edge.origin()+parallel_hull_edge.versor()*int_pt->ta)[Geom::Y]);*/
+ poly.ps.push_back(avoid_pt);
+ }
+ }
+
+
+ return poly;
+ }// else printf("[sommer] is no curve\n");
+ }// else printf("[sommer] is no shape\n");
+ }
+
Geom::OptRect rHull = item->getBounds(sp_item_i2doc_affine(item));
if (!rHull) {
- return Avoid::newPoly(0);
+ return Avoid::Polygon();
}
- double spacing = desktop->namedview->connector_spacing;
-
// Add a little buffer around the edge of each object.
Geom::Rect rExpandedHull = *rHull;
- rExpandedHull.expandBy(spacing);
- poly = Avoid::newPoly(4);
+ rExpandedHull.expandBy(spacing);
+ Avoid::Polygon poly(4);
- for (unsigned n = 0; n < 4; ++n) {
+ for (size_t n = 0; n < 4; ++n) {
Geom::Point hullPoint = rExpandedHull.corner(n);
poly.ps[n].x = hullPoint[Geom::X];
poly.ps[n].y = hullPoint[Geom::Y];
@@ -212,14 +556,14 @@ static Avoid::Polygn avoid_item_poly(SPItem const *item)
}
-GSList *get_avoided_items(GSList *list, SPObject *from, SPDesktop *desktop,
+GSList *get_avoided_items(GSList *list, SPObject *from, SPDesktop *desktop,
bool initialised)
{
for (SPObject *child = sp_object_first_child(SP_OBJECT(from)) ;
child != NULL; child = SP_OBJECT_NEXT(child) ) {
if (SP_IS_ITEM(child) &&
!desktop->isLayer(SP_ITEM(child)) &&
- !SP_ITEM(child)->isLocked() &&
+ !SP_ITEM(child)->isLocked() &&
!desktop->itemIsHidden(SP_ITEM(child)) &&
(!initialised || SP_ITEM(child)->avoidRef->shapeRef)
)
@@ -242,10 +586,9 @@ void avoid_item_move(Geom::Matrix const */*mp*/, SPItem *moved_item)
g_assert(shapeRef);
Router *router = moved_item->document->router;
- Avoid::Polygn poly = avoid_item_poly(moved_item);
- if (poly.pn > 0) {
- router->moveShape(shapeRef, &poly);
- Avoid::freePoly(poly);
+ Avoid::Polygon poly = avoid_item_poly(moved_item);
+ if (!poly.empty()) {
+ router->moveShape(shapeRef, poly);
}
}
@@ -257,7 +600,7 @@ void init_avoided_shape_geometry(SPDesktop *desktop)
SPDocument *document = sp_desktop_document(desktop);
bool saved = sp_document_get_undo_sensitive(document);
sp_document_set_undo_sensitive(document, false);
-
+
bool initialised = false;
GSList *items = get_avoided_items(NULL, desktop->currentRoot(), desktop,
initialised);
diff --git a/src/conn-avoid-ref.h b/src/conn-avoid-ref.h
index d34d8ca2e..5dff8dd38 100644
--- a/src/conn-avoid-ref.h
+++ b/src/conn-avoid-ref.h
@@ -18,6 +18,8 @@
struct SPDesktop;
struct SPItem;
+struct ConnectionPoint;
+typedef std::map<int, ConnectionPoint> IdConnectionPointMap;
namespace Avoid { class ShapeRef; }
class SPAvoidRef {
@@ -28,9 +30,16 @@ public:
// libavoid's internal representation of the item.
Avoid::ShapeRef *shapeRef;
+ // Used for holding connection points for item
+ IdConnectionPointMap connection_points;
+
void setAvoid(char const *value);
+ void setConnectionPoints(gchar const *value);
+ void addConnectionPoint(ConnectionPoint &cp);
+ void updateConnectionPoint(ConnectionPoint &cp);
+ void deleteConnectionPoint(ConnectionPoint &cp);
void handleSettingChange(void);
-
+
// Returns a list of SPItems of all connectors/shapes attached to
// this object. Pass one of the following for 'type':
// Avoid::runningTo
@@ -38,6 +47,9 @@ public:
// Avoid::runningToAndFrom
GSList *getAttachedShapes(const unsigned int type);
GSList *getAttachedConnectors(const unsigned int type);
+ Geom::Point getConnectionPointPos(const int type, const int id);
+
+ bool isValidConnPointId( const int type, const int id );
private:
SPItem *item;
@@ -48,6 +60,7 @@ private:
// A sigc connection for transformed signal.
sigc::connection _transformed_connection;
+ void setConnectionPointsAttrUndoable(const gchar* value, const gchar* action);
};
extern GSList *get_avoided_items(GSList *list, SPObject *from,
@@ -56,6 +69,7 @@ extern void avoid_item_move(Geom::Matrix const *mp, SPItem *moved_item);
extern void init_avoided_shape_geometry(SPDesktop *desktop);
static const double defaultConnSpacing = 3.0;
+static const double defaultConnCurvature = 3.0;
#endif /* !SEEN_CONN_AVOID_REF */
diff --git a/src/connection-points.cpp b/src/connection-points.cpp
new file mode 100644
index 000000000..9ed98d211
--- /dev/null
+++ b/src/connection-points.cpp
@@ -0,0 +1,37 @@
+#include "connection-points.h"
+
+
+bool ConnectionPoint::operator!=(ConnectionPoint& cp)
+{
+ return (id!=cp.id || type!=cp.type || dir!=cp.dir || pos!=cp.pos);
+}
+
+bool ConnectionPoint::operator==(ConnectionPoint& cp)
+{
+ return (id==cp.id && type==cp.type && dir==cp.dir && pos==cp.pos);
+}
+
+
+namespace Inkscape{
+
+SVGIStringStream&
+operator>>(SVGIStringStream& istr, ConnectionPoint& cp)
+{
+ istr>>cp.id>>cp.dir>>cp.pos[Geom::X]>>cp.pos[Geom::Y];
+
+ return istr;
+}
+
+SVGOStringStream&
+operator<<(SVGOStringStream& ostr, const ConnectionPoint& cp)
+{
+ ostr<<cp.id<<' '<<cp.dir<<' ';
+ ::operator<<( ostr, cp.pos[Geom::X] );
+ ostr<<' ';
+ ::operator<<( ostr, cp.pos[Geom::Y] );
+
+ return ostr;
+}
+
+
+}
diff --git a/src/connection-points.h b/src/connection-points.h
new file mode 100644
index 000000000..c1ddeb481
--- /dev/null
+++ b/src/connection-points.h
@@ -0,0 +1,70 @@
+#ifndef INKSCAPE_CONNECTION_POINT_H
+#define INKSCAPE_CONNECTION_POINT_H
+
+#include <2geom/point.h>
+//#include <libavoid/vertices.h>
+#include <libavoid/connector.h>
+
+#include "svg/stringstream.h"
+
+
+enum ConnPointType {
+ ConnPointDefault = 0,
+ ConnPointUserDefined = 1
+};
+enum ConnPointDefaultPos{
+ ConnPointPosTL, // Top Left
+ ConnPointPosTC, // Top Centre
+ ConnPointPosTR, // Top Right
+ ConnPointPosCL, // Centre Left
+ ConnPointPosCC, // Centre Centre
+ ConnPointPosCR, // Centre Right
+ ConnPointPosBL, // Bottom Left
+ ConnPointPosBC, // Bottom Centre
+ ConnPointPosBR, // Bottom Right
+};
+
+
+struct ConnectionPoint
+{
+ ConnectionPoint():
+ type(ConnPointDefault), // default to a default connection point
+ id(ConnPointPosCC), // default to the centre point
+ pos(),
+ dir(Avoid::ConnDirAll) // allow any direction
+ {
+ }
+ // type of the connection point
+ // default or user-defined
+ int type;
+
+ /* id of the connection point
+ in the case of default
+ connection points it specifies
+ which of the 9 types the
+ connection point is.
+ */
+ int id;
+
+ /* position related to parent item
+ in the case of default connection
+ points, these positions should be
+ computed by the item's avoidRef
+ */
+ Geom::Point pos;
+
+ // directions from which connections can occur
+ Avoid::ConnDirFlags dir;
+
+ bool operator!=(ConnectionPoint&);
+ bool operator==(ConnectionPoint&);
+};
+
+namespace Inkscape{
+
+SVGIStringStream& operator>>(SVGIStringStream& istr, ConnectionPoint& cp);
+SVGOStringStream& operator<<(SVGOStringStream& ostr, const ConnectionPoint& cp);
+
+}
+
+#endif \ No newline at end of file
diff --git a/src/connector-context.cpp b/src/connector-context.cpp
index 2131bdced..307d59d1f 100644
--- a/src/connector-context.cpp
+++ b/src/connector-context.cpp
@@ -4,31 +4,25 @@
* Authors:
* Michael Wybrow <mjwybrow@users.sourceforge.net>
*
- * Copyright (C) 2005 Michael Wybrow
+ * Copyright (C) 2005-2008 Michael Wybrow
+ * Copyright (C) 2009 Monash University
*
* Released under GNU GPL, read the file 'COPYING' for more information
*
* TODO:
- * o Have shapes avoid convex hulls of objects, rather than their
- * bounding box. Possibly implement the unfinished ConvexHull
- * class in libnr.
- * (HOWEVER, using the convex hull C of a shape S does the wrong thing if a
- * connector starts outside of S but inside C, or if the best route around
- * an object involves going inside C but without entering S.)
- * o Draw connectors to shape edges rather than bounding box.
* o Show a visual indicator for objects with the 'avoid' property set.
* o Allow user to change a object between a path and connector through
* the interface.
* o Create an interface for setting markers (arrow heads).
* o Better distinguish between paths and connectors to prevent problems
- * in the node tool and paths accidently being turned into connectors
+ * in the node tool and paths accidentally being turned into connectors
* in the connector tool. Perhaps have a way to convert between.
* o Only call libavoid's updateEndPoint as required. Currently we do it
* for both endpoints, even if only one is moving.
* o Allow user-placeable connection points.
* o Deal sanely with connectors with both endpoints attached to the
* same connection point, and drawing of connectors attaching
- * overlaping shapes (currently tries to adjust connector to be
+ * overlapping shapes (currently tries to adjust connector to be
* outside both bounding boxes).
* o Fix many special cases related to connectors updating,
* e.g., copying a couple of shapes and a connector that are
@@ -37,16 +31,133 @@
* one of the other contexts.
* o Cope with shapes whose ids change when they have attached
* connectors.
- * o gobble_motion_events(GDK_BUTTON1_MASK)?;
+ * o During dragging motion, gobble up to and use the final motion event.
+ * Gobbling away all duplicates after the current can occasionally result
+ * in the path lagging behind the mouse cursor if it is no longer being
+ * dragged.
+ * o Fix up libavoid's representation after undo actions. It doesn't see
+ * any transform signals and hence doesn't know shapes have moved back to
+ * there earlier positions.
+ * o Decide whether drawing/editing mode should be an Inkscape preference
+ * or the connector tool should always start in drawing mode.
+ * o Correct the problem with switching to the select tool when pressing
+ * space bar (there are moments when it refuses to do so).
+ *
+ * ----------------------------------------------------------------------------
+ *
+ * mjwybrow's observations on acracan's Summer of Code connector work:
+ *
+ * - GUI comments:
+ *
+ * - Buttons for adding and removing user-specified connection
+ * points should probably have "+" and "-" symbols on them so they
+ * are consistent with the similar buttons for the node tool.
+ * - Controls on the connector tool be should be reordered logically,
+ * possibly as follows:
+ *
+ * *Connector*: [Polyline-radio-button] [Orthgonal-radio-button]
+ * [Curvature-control] | *Shape*: [Avoid-button] [Dont-avoid-button]
+ * [Spacing-control] | *Connection pts*: [Edit-mode] [Add-pt] [Rm-pt]
+ *
+ * I think that the network layout controls be moved to the
+ * Align and Distribute dialog (there is already the layout button
+ * there, but no options are exposed).
+ *
+ * I think that the style change between polyline and orthogonal
+ * would be much clearer with two buttons (radio behaviour -- just
+ * one is true).
+ *
+ * The other tools show a label change from "New:" to "Change:"
+ * depending on whether an object is selected. We could consider
+ * this but there may not be space.
+ *
+ * The Add-pt and Rm-pt buttons should be greyed out (inactive) if
+ * we are not in connection point editing mode. And probably also
+ * if there is no shape selected, i.e. at the times they have no
+ * effect when clicked.
+ *
+ * Likewise for the avoid/ignore shapes buttons. These should be
+ * inactive when a shape is not selected in the connector context.
+ *
+ * - When creating/editing connection points:
+ *
+ * - Strange things can happen if you have connectors selected, or
+ * try rerouting connectors by dragging their endpoints when in
+ * connection point editing mode.
+ *
+ * - Possibly the selected shape's connection points should always
+ * be shown (i.e., have knots) when in editing mode.
+ *
+ * - It is a little strange to be able to place connection points
+ * competely outside shapes. Especially when you later can't draw
+ * connectors to them since the knots are only visible when you
+ * are over the shape. I think that you should only be able to
+ * place connection points inside or on the boundary of the shape
+ * itself.
+ *
+ * - The intended ability to place a new point at the current cursor
+ * position by pressing RETURN does not seem to work.
+ *
+ * - The Status bar tooltip should change to reflect editing mode
+ * and tell the user about RETURN and how to use the tool.
+ *
+ * - Connection points general:
+ *
+ * - Connection points that were inside the shape can end up outside
+ * after a rotation is applied to the shape in the select tool.
+ * It doesn't seem like the correct transform is being applied to
+ * these, or it is being applied at the wrong time. I'd expect
+ * connection points to rotate with the shape, and stay at the
+ * same position "on the shape"
+ *
+ * - I was able to make the connectors attached to a shape fall off
+ * the shape after scaling it. Not sure the exact cause, but may
+ * require more investigation/debugging.
+ *
+ * - The user-defined connection points should be either absolute
+ * (as the current ones are) or defined as a percentage of the
+ * shape. These would be based on a toggle setting on the
+ * toolbar, and they would be placed in exactly the same way by
+ * the user. The only difference would be that they would be
+ * store as percentage positions in the SVG connection-points
+ * property and that they would update/move automatically if the
+ * object was resized or scaled.
+ *
+ * - Thinking more, I think you always want to store and think about
+ * the positions of connection points to be pre-transform, but
+ * obviously the shape transform is applied to them. That way,
+ * they will rotate and scale automatically with the shape, when
+ * the shape transform is altered. The Percentage version would
+ * compute their position from the pre-transform dimensions and
+ * then have the transform applied to them, for example.
+ *
+ * - The connection points in the test_connection_points.svg file
+ * seem to follow the shape when it is moved, but connection
+ * points I add to new shapes, do not follow the shape, either
+ * when the shape is just moved or transformed. There is
+ * something wrong here. What exactly should the behaviour be
+ * currently?
+ *
+ * - I see that connection points are specified at absolute canvas
+ * positions. I really think that they should be specified in
+ * shape coordinated relative to the shapes. There may be
+ * transforms applied to layers and the canvas which would make
+ * specifying them quite difficult. I'd expect a position of 0, 0
+ * to be on the shape in question or very close to it, for example.
*
*/
+
+
#include <gdk/gdkkeysyms.h>
#include <string>
#include <cstring>
#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 "xml/node-event-vector.h"
#include "xml/repr.h"
#include "svg/svg.h"
@@ -63,11 +174,14 @@
#include "display/canvas-bpath.h"
#include "display/sodipodi-ctrl.h"
#include <glibmm/i18n.h>
+#include <glibmm/stringutils.h>
#include "snap.h"
#include "knot.h"
#include "sp-conn-end.h"
+#include "sp-conn-end-pair.h"
#include "conn-avoid-ref.h"
#include "libavoid/vertices.h"
+#include "libavoid/router.h"
#include "context-fns.h"
#include "sp-namedview.h"
#include "sp-text.h"
@@ -79,6 +193,7 @@ static void sp_connector_context_init(SPConnectorContext *conn_context);
static void sp_connector_context_dispose(GObject *object);
static void sp_connector_context_setup(SPEventContext *ec);
+static void sp_connector_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val);
static void sp_connector_context_finish(SPEventContext *ec);
static gint sp_connector_context_root_handler(SPEventContext *ec, GdkEvent *event);
static gint sp_connector_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event);
@@ -98,11 +213,14 @@ static gint connector_handle_motion_notify(SPConnectorContext *const cc, GdkEven
static gint connector_handle_button_release(SPConnectorContext *const cc, GdkEventButton const &revent);
static gint connector_handle_key_press(SPConnectorContext *const cc, guint const keyval);
+static void cc_active_shape_add_knot(SPDesktop* desktop, SPItem* item, ConnectionPointMap &cphandles, ConnectionPoint& cp);
static void cc_set_active_shape(SPConnectorContext *cc, SPItem *item);
static void cc_clear_active_shape(SPConnectorContext *cc);
static void cc_set_active_conn(SPConnectorContext *cc, SPItem *item);
static void cc_clear_active_conn(SPConnectorContext *cc);
static gchar *conn_pt_handle_test(SPConnectorContext *cc, Geom::Point& w);
+static void cc_select_handle(SPKnot* knot);
+static void cc_deselect_handle(SPKnot* knot);
static bool cc_item_is_shape(SPItem *item);
static void cc_selection_changed(Inkscape::Selection *selection, gpointer data);
static void cc_connector_rerouting_finish(SPConnectorContext *const cc,
@@ -115,8 +233,8 @@ static void shape_event_attr_changed(Inkscape::XML::Node *repr, gchar const *nam
gpointer data);
-static Geom::Point connector_drag_origin_w(0, 0);
-static bool connector_within_tolerance = false;
+/*static Geom::Point connector_drag_origin_w(0, 0);
+static bool connector_within_tolerance = false;*/
static SPEventContextClass *parent_class;
@@ -171,6 +289,7 @@ sp_connector_context_class_init(SPConnectorContextClass *klass)
object_class->dispose = sp_connector_context_dispose;
event_context_class->setup = sp_connector_context_setup;
+ event_context_class->set = sp_connector_context_set;
event_context_class->finish = sp_connector_context_finish;
event_context_class->root_handler = sp_connector_context_root_handler;
event_context_class->item_handler = sp_connector_context_item_handler;
@@ -188,10 +307,14 @@ sp_connector_context_init(SPConnectorContext *cc)
ec->xp = 0;
ec->yp = 0;
+ cc->mode = SP_CONNECTOR_CONTEXT_DRAWING_MODE;
+ cc->knot_tip = 0;
+
cc->red_color = 0xff00007f;
cc->newconn = NULL;
cc->newConnRef = NULL;
+ cc->curvature = 0.0;
cc->sel_changed_connection = sigc::connection();
@@ -204,10 +327,13 @@ sp_connector_context_init(SPConnectorContext *cc)
cc->active_handle = NULL;
+ cc->selected_handle = NULL;
+
cc->clickeditem = NULL;
cc->clickedhandle = NULL;
- cc->connpthandle = NULL;
+ new (&cc->connpthandles) ConnectionPointMap();
+
for (int i = 0; i < 2; ++i) {
cc->endpt_handle[i] = NULL;
cc->endpt_handler_id[i] = 0;
@@ -226,10 +352,14 @@ sp_connector_context_dispose(GObject *object)
cc->sel_changed_connection.disconnect();
- if (cc->connpthandle) {
- g_object_unref(cc->connpthandle);
- cc->connpthandle = NULL;
+ if (!cc->connpthandles.empty()) {
+ for (ConnectionPointMap::iterator it = cc->connpthandles.begin();
+ it != cc->connpthandles.end(); ++it) {
+ g_object_unref(it->first);
+ }
+ cc->connpthandles.clear();
}
+ cc->connpthandles.~ConnectionPointMap();
for (int i = 0; i < 2; ++i) {
if (cc->endpt_handle[1]) {
g_object_unref(cc->endpt_handle[i]);
@@ -282,6 +412,12 @@ sp_connector_context_setup(SPEventContext *ec)
// Notice the initial selection.
cc_selection_changed(cc->selection, (gpointer) cc);
+ cc->within_tolerance = false;
+
+ sp_event_context_read(ec, "curvature");
+ sp_event_context_read(ec, "orthogonal");
+ sp_event_context_read(ec, "mode");
+ cc->knot_tip = cc->mode == SP_CONNECTOR_CONTEXT_DRAWING_MODE ? cc_knot_tips[0] : cc_knot_tips[1];
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/tools/connector/selcue", 0)) {
ec->enableSelectionCue();
@@ -294,6 +430,64 @@ sp_connector_context_setup(SPEventContext *ec)
static void
+sp_connector_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
+{
+ SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec);
+
+ /* fixme: Proper error handling for non-numeric data. Use a locale-independent function like
+ * g_ascii_strtod (or a thin wrapper that does the right thing for invalid values inf/nan). */
+ Glib::ustring name = val->getEntryName();
+ if ( name == "curvature" ) {
+ cc->curvature = val->getDoubleLimited(); // prevents NaN and +/-Inf from messing up
+ }
+ else if ( name == "orthogonal" ) {
+ cc->isOrthogonal = val->getBool();
+ }
+ else if ( name == "mode")
+ {
+ sp_connector_context_switch_mode(ec, val->getBool() ? SP_CONNECTOR_CONTEXT_EDITING_MODE : SP_CONNECTOR_CONTEXT_DRAWING_MODE);
+ }
+}
+
+void sp_connector_context_switch_mode(SPEventContext* ec, unsigned int newMode)
+{
+ SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec);
+
+ cc->mode = newMode;
+ if ( cc->mode == SP_CONNECTOR_CONTEXT_DRAWING_MODE )
+ {
+ ec->cursor_shape = cursor_connector_xpm;
+ cc->knot_tip = cc_knot_tips[0];
+ if (cc->selected_handle)
+ cc_deselect_handle( cc->selected_handle );
+ cc->selected_handle = NULL;
+ // Show all default connection points
+
+ }
+ else if ( cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE )
+ {
+ ec->cursor_shape = cursor_node_xpm;
+ cc->knot_tip = cc_knot_tips[1];
+/* if (cc->active_shape)
+ {
+ cc->selection->set( SP_OBJECT( cc->active_shape ) );
+ }
+ else
+ {
+ SPItem* item = cc->selection->singleItem();
+ if ( item )
+ {
+ cc_set_active_shape(cc, item);
+ cc->selection->set( SP_OBJECT( item ) );
+ }
+ }*/
+ }
+ sp_event_context_update_cursor(ec);
+
+}
+
+
+static void
sp_connector_context_finish(SPEventContext *ec)
{
SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec);
@@ -341,9 +535,12 @@ cc_clear_active_shape(SPConnectorContext *cc)
cc->active_shape_layer_repr = NULL;
}
- // Hide the center connection point if it exists.
- if (cc->connpthandle) {
- sp_knot_hide(cc->connpthandle);
+ // Hide the connection points if they exist.
+ if (cc->connpthandles.size()) {
+ for (ConnectionPointMap::iterator it = cc->connpthandles.begin();
+ it != cc->connpthandles.end(); ++it) {
+ sp_knot_hide(it->first);
+ }
}
}
@@ -379,16 +576,35 @@ conn_pt_handle_test(SPConnectorContext *cc, Geom::Point& p)
// TODO: this will need to change when there are more connection
// points available for each shape.
- SPKnot *centerpt = cc->connpthandle;
- if (cc->active_handle && (cc->active_handle == centerpt))
+ if (cc->active_handle && (cc->connpthandles.find(cc->active_handle) != cc->connpthandles.end()))
{
- p = centerpt->pos;
- return g_strdup_printf("#%s", SP_OBJECT_ID(cc->active_shape));
+ p = cc->active_handle->pos;
+ const ConnectionPoint& cp = cc->connpthandles[cc->active_handle];
+ return g_strdup_printf("#%s_%c_%d", SP_OBJECT_ID(cc->active_shape),
+ cp.type == ConnPointDefault ? 'd' : 'u' , cp.id);
}
return NULL;
}
+static void
+cc_select_handle(SPKnot* knot)
+{
+ knot->setShape(SP_KNOT_SHAPE_SQUARE);
+ knot->setSize(10);
+ knot->setAnchor(GTK_ANCHOR_CENTER);
+ knot->setFill(0x0000ffff, 0x0000ffff, 0x0000ffff);
+ sp_knot_update_ctrl(knot);
+}
+static void
+cc_deselect_handle(SPKnot* knot)
+{
+ knot->setShape(SP_KNOT_SHAPE_SQUARE);
+ knot->setSize(8);
+ knot->setAnchor(GTK_ANCHOR_CENTER);
+ knot->setFill(0xffffff00, 0xff0000ff, 0xff0000ff);
+ sp_knot_update_ctrl(knot);
+}
static gint
sp_connector_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event)
@@ -405,24 +621,35 @@ sp_connector_context_item_handler(SPEventContext *event_context, SPItem *item, G
case GDK_BUTTON_RELEASE:
if (event->button.button == 1 && !event_context->space_panning) {
if ((cc->state == SP_CONNECTOR_CONTEXT_DRAGGING) &&
- (connector_within_tolerance))
+ (event_context->within_tolerance))
{
spcc_reset_colors(cc);
cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- sp_event_context_discard_delayed_snap_event(event_context);
+// sp_event_context_snap_window_closed(event_context);
}
if (cc->state != SP_CONNECTOR_CONTEXT_IDLE) {
- // Doing simething else like rerouting.
+ // Doing something else like rerouting.
break;
}
- // find out clicked item, disregarding groups, honoring Alt
- SPItem *item_ungrouped = sp_event_context_find_item(desktop,
- p, event->button.state & GDK_MOD1_MASK, TRUE);
+ // find out clicked item, honoring Alt
+ SPItem *item = sp_event_context_find_item(desktop,
+ p, event->button.state & GDK_MOD1_MASK, FALSE);
if (event->button.state & GDK_SHIFT_MASK) {
- cc->selection->toggle(item_ungrouped);
+ cc->selection->toggle(item);
} else {
- cc->selection->set(item_ungrouped);
+ cc->selection->set(item);
+ if ( cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE && cc->selected_handle )
+ {
+ cc_deselect_handle( cc->selected_handle );
+ cc->selected_handle = NULL;
+ }
+ /* When selecting a new item,
+ do not allow showing connection points
+ on connectors. (yet?)
+ */
+ if ( item != cc->active_shape && !cc_item_is_connector( item ) )
+ cc_set_active_shape( cc, item );
}
ret = TRUE;
@@ -430,15 +657,24 @@ sp_connector_context_item_handler(SPEventContext *event_context, SPItem *item, G
break;
case GDK_ENTER_NOTIFY:
{
- if (cc_item_is_shape(item)) {
- // This is a shape, so show connection point(s).
- if (!(cc->active_shape) ||
- // Don't show handle for another handle.
- (item != ((SPItem *) cc->connpthandle))) {
+ if (cc->mode == SP_CONNECTOR_CONTEXT_DRAWING_MODE || (cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE && !cc->selected_handle))
+ {
+ if (cc_item_is_shape(item)) {
+
+ // I don't really understand what the above does,
+ // so I commented it.
+ // This is a shape, so show connection point(s).
+ /* if (!(cc->active_shape)
+ // Don't show handle for another handle.
+ // || (cc->connpthandles.find((SPKnot*) item) != cc->connpthandles.end())
+ )
+ {
+ cc_set_active_shape(cc, item);
+ }*/
cc_set_active_shape(cc, item);
}
+ ret = TRUE;
}
- ret = TRUE;
break;
}
default:
@@ -462,7 +698,7 @@ sp_connector_context_root_handler(SPEventContext *ec, GdkEvent *event)
break;
case GDK_MOTION_NOTIFY:
- ret = connector_handle_motion_notify(cc, event->motion);
+ ret = connector_handle_motion_notify(cc, event->motion);
break;
case GDK_BUTTON_RELEASE:
@@ -497,96 +733,166 @@ connector_handle_button_press(SPConnectorContext *const cc, GdkEventButton const
SPEventContext *event_context = SP_EVENT_CONTEXT(cc);
gint ret = FALSE;
- if ( bevent.button == 1 && !event_context->space_panning ) {
+ if ( cc->mode == SP_CONNECTOR_CONTEXT_DRAWING_MODE )
+ {
+ if ( bevent.button == 1 && !event_context->space_panning ) {
- SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
+ SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
- if (Inkscape::have_viable_layer(desktop, cc->_message_context) == false) {
- return TRUE;
- }
+ if (Inkscape::have_viable_layer(desktop, cc->_message_context) == false) {
+ return TRUE;
+ }
- Geom::Point const event_w(bevent.x,
- bevent.y);
- connector_drag_origin_w = event_w;
- connector_within_tolerance = true;
+ Geom::Point const event_w(bevent.x,
+ bevent.y);
+// connector_drag_origin_w = event_w;
+ cc->xp = bevent.x;
+ cc->yp = bevent.y;
+ cc->within_tolerance = true;
- Geom::Point const event_dt = cc->desktop->w2d(event_w);
+ Geom::Point const event_dt = cc->desktop->w2d(event_w);
- SnapManager &m = cc->desktop->namedview->snap_manager;
- m.setup(cc->desktop);
+ SnapManager &m = cc->desktop->namedview->snap_manager;
+ m.setup(cc->desktop);
- switch (cc->state) {
- case SP_CONNECTOR_CONTEXT_STOP:
- /* This is allowed, if we just cancelled curve */
- case SP_CONNECTOR_CONTEXT_IDLE:
- {
- if ( cc->npoints == 0 ) {
- cc_clear_active_conn(cc);
+ switch (cc->state) {
+ case SP_CONNECTOR_CONTEXT_STOP:
+ /* This is allowed, if we just cancelled curve */
+ case SP_CONNECTOR_CONTEXT_IDLE:
+ {
+ if ( cc->npoints == 0 ) {
+ cc_clear_active_conn(cc);
- SP_EVENT_CONTEXT_DESKTOP(cc)->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Creating new connector"));
+ SP_EVENT_CONTEXT_DESKTOP(cc)->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Creating new connector"));
- /* Set start anchor */
- /* Create green anchor */
- Geom::Point p = event_dt;
+ /* Set start anchor */
+ /* Create green anchor */
+ Geom::Point p = event_dt;
- // Test whether we clicked on a connection point
- cc->sid = conn_pt_handle_test(cc, p);
+ // Test whether we clicked on a connection point
+ cc->sid = conn_pt_handle_test(cc, p);
+
+// sp_event_context_snap_window_open(event_context);
+
+ if (!cc->sid) {
+ // This is the first point, so just snap it to the grid
+ // as there's no other points to go off.
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+ }
+ spcc_connector_set_initial_point(cc, p);
- if (!cc->sid) {
- // This is the first point, so just snap it to the grid
- // as there's no other points to go off.
- m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
}
- spcc_connector_set_initial_point(cc, p);
+ cc->state = SP_CONNECTOR_CONTEXT_DRAGGING;
+ ret = TRUE;
+ break;
+ }
+ case SP_CONNECTOR_CONTEXT_DRAGGING:
+ {
+ // This is the second click of a connector creation.
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+ spcc_connector_set_subsequent_point(cc, p);
+ spcc_connector_finish_segment(cc, p);
+ // Test whether we clicked on a connection point
+ cc->eid = conn_pt_handle_test(cc, p);
+ if (cc->npoints != 0) {
+ spcc_connector_finish(cc);
+ }
+ cc_set_active_conn(cc, cc->newconn);
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+// sp_event_context_snap_window_closed(event_context);
+ ret = TRUE;
+ break;
}
- cc->state = SP_CONNECTOR_CONTEXT_DRAGGING;
- ret = TRUE;
- break;
+ case SP_CONNECTOR_CONTEXT_CLOSE:
+ {
+ g_warning("Button down in CLOSE state");
+ break;
+ }
+ default:
+ break;
}
- case SP_CONNECTOR_CONTEXT_DRAGGING:
- {
- // This is the second click of a connector creation.
- m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+ } else if (bevent.button == 3) {
+ if (cc->state == SP_CONNECTOR_CONTEXT_REROUTING) {
+ // A context menu is going to be triggered here,
+ // so end the rerouting operation.
+ cc_connector_rerouting_finish(cc, &p);
- spcc_connector_set_subsequent_point(cc, p);
- spcc_connector_finish_segment(cc, p);
- // Test whether we clicked on a connection point
- cc->eid = conn_pt_handle_test(cc, p);
- if (cc->npoints != 0) {
- spcc_connector_finish(cc);
- }
- cc_set_active_conn(cc, cc->newconn);
cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- sp_event_context_discard_delayed_snap_event(event_context);
- ret = TRUE;
- break;
+// sp_event_context_snap_window_closed(event_context);
+
+ // Don't set ret to TRUE, so we drop through to the
+ // parent handler which will open the context menu.
}
- case SP_CONNECTOR_CONTEXT_CLOSE:
- {
- g_warning("Button down in CLOSE state");
- break;
+ else if (cc->npoints != 0) {
+ spcc_connector_finish(cc);
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+// sp_event_context_snap_window_closed(event_context);
+ ret = TRUE;
}
- default:
- break;
}
- } else if (bevent.button == 3) {
- if (cc->state == SP_CONNECTOR_CONTEXT_REROUTING) {
- // A context menu is going to be triggered here,
- // so end the rerouting operation.
- cc_connector_rerouting_finish(cc, &p);
+ }
+ else if ( cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE )
+ {
+ if ( bevent.button == 1 && !event_context->space_panning )
+ {
+ // Initialize variables in case of dragging
- cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- sp_event_context_discard_delayed_snap_event(event_context);
+ SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
- // Don't set ret to TRUE, so we drop through to the
- // parent handler which will open the context menu.
- }
- else if (cc->npoints != 0) {
- spcc_connector_finish(cc);
- cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- sp_event_context_discard_delayed_snap_event(event_context);
- ret = TRUE;
+ if (Inkscape::have_viable_layer(desktop, cc->_message_context) == false) {
+ return TRUE;
+ }
+
+ cc->xp = bevent.x;
+ cc->yp = bevent.y;
+ cc->within_tolerance = true;
+
+ ConnectionPointMap::iterator const& active_knot_it = cc->connpthandles.find( cc->active_handle );
+
+ switch (cc->state)
+ {
+ case SP_CONNECTOR_CONTEXT_IDLE:
+ if ( active_knot_it != cc->connpthandles.end() )
+ {
+ // We do not allow selecting and, thereby, moving default knots
+ if ( active_knot_it->second.type != ConnPointDefault)
+ {
+ if (cc->selected_handle != cc->active_handle)
+ {
+ if ( cc->selected_handle )
+ cc_deselect_handle( cc->selected_handle );
+ cc->selected_handle = cc->active_handle;
+ cc_select_handle( cc->selected_handle );
+ }
+ }
+ else
+ // Just ignore the default connection point
+ return FALSE;
+ }
+ else
+ if ( cc->selected_handle )
+ {
+ cc_deselect_handle( cc->selected_handle );
+ cc->selected_handle = NULL;
+ }
+
+ if ( cc->selected_handle )
+ {
+// sp_event_context_snap_window_open(event_context);
+ cc->state = SP_CONNECTOR_CONTEXT_DRAGGING;
+ cc->selection->set( SP_OBJECT( cc->active_shape ) );
+ }
+
+ ret = TRUE;
+ break;
+ // Dragging valid because of the way we create
+ // new connection points.
+ case SP_CONNECTOR_CONTEXT_DRAGGING:
+ // Do nothing.
+ ret = TRUE;
+ break;
+ }
}
}
return ret;
@@ -607,71 +913,94 @@ connector_handle_motion_notify(SPConnectorContext *const cc, GdkEventMotion cons
Geom::Point const event_w(mevent.x, mevent.y);
- if (connector_within_tolerance) {
- gint const tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
- if ( Geom::LInfty( event_w - connector_drag_origin_w ) < tolerance ) {
+ if (cc->within_tolerance) {
+ cc->tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
+ if ( ( abs( (gint) mevent.x - cc->xp ) < cc->tolerance ) &&
+ ( abs( (gint) mevent.y - cc->yp ) < cc->tolerance ) ) {
return FALSE; // Do not drag if we're within tolerance from origin.
}
}
// Once the user has moved farther than tolerance from the original location
// (indicating they intend to move the object, not click), then always process
// the motion notify coordinates as given (no snapping back to origin)
- connector_within_tolerance = false;
+ cc->within_tolerance = false;
SPDesktop *const dt = cc->desktop;
/* Find desktop coordinates */
Geom::Point p = dt->w2d(event_w);
- SnapManager &m = dt->namedview->snap_manager;
- m.setup(dt);
+ if ( cc->mode == SP_CONNECTOR_CONTEXT_DRAWING_MODE )
+ {
+ SnapManager &m = dt->namedview->snap_manager;
+ m.setup(dt);
- switch (cc->state) {
- case SP_CONNECTOR_CONTEXT_DRAGGING:
- {
- // This is movement during a connector creation.
- if ( cc->npoints > 0 ) {
- m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
- cc->selection->clear();
- spcc_connector_set_subsequent_point(cc, p);
- ret = TRUE;
+ switch (cc->state) {
+ case SP_CONNECTOR_CONTEXT_DRAGGING:
+ {
+ gobble_motion_events(mevent.state);
+ // This is movement during a connector creation.
+ if ( cc->npoints > 0 ) {
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p,
+ Inkscape::SNAPSOURCE_HANDLE);
+ cc->selection->clear();
+ spcc_connector_set_subsequent_point(cc, p);
+ ret = TRUE;
+ }
+ break;
}
- break;
- }
- case SP_CONNECTOR_CONTEXT_REROUTING:
- {
- g_assert( SP_IS_PATH(cc->clickeditem));
+ case SP_CONNECTOR_CONTEXT_REROUTING:
+ {
+ gobble_motion_events(GDK_BUTTON1_MASK);
+ g_assert( SP_IS_PATH(cc->clickeditem));
- m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p,
+ Inkscape::SNAPSOURCE_HANDLE);
- // Update the hidden path
- Geom::Matrix i2d = sp_item_i2d_affine(cc->clickeditem);
- Geom::Matrix d2i = i2d.inverse();
- SPPath *path = SP_PATH(cc->clickeditem);
- SPCurve *curve = (SP_SHAPE(path))->curve;
- if (cc->clickedhandle == cc->endpt_handle[0]) {
- Geom::Point o = cc->endpt_handle[1]->pos;
- curve->stretch_endpoints(p * d2i, o * d2i);
- }
- else {
- Geom::Point o = cc->endpt_handle[0]->pos;
- curve->stretch_endpoints(o * d2i, p * d2i);
- }
- sp_conn_adjust_path(path);
+ // Update the hidden path
+ Geom::Matrix i2d = sp_item_i2d_affine(cc->clickeditem);
+ Geom::Matrix d2i = i2d.inverse();
+ SPPath *path = SP_PATH(cc->clickeditem);
+ SPCurve *curve = path->original_curve ? path->original_curve : path->curve;
+ if (cc->clickedhandle == cc->endpt_handle[0]) {
+ Geom::Point o = cc->endpt_handle[1]->pos;
+ curve->stretch_endpoints(p * d2i, o * d2i);
+ }
+ else {
+ Geom::Point o = cc->endpt_handle[0]->pos;
+ curve->stretch_endpoints(o * d2i, p * d2i);
+ }
+ sp_conn_reroute_path_immediate(path);
- // Copy this to the temporary visible path
- cc->red_curve = SP_SHAPE(path)->curve->copy();
- cc->red_curve->transform(i2d);
+ // Copy this to the temporary visible path
+ cc->red_curve = path->original_curve ?
+ path->original_curve->copy() : path->curve->copy();
+ cc->red_curve->transform(i2d);
- sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), cc->red_curve);
- ret = TRUE;
- break;
+ sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), cc->red_curve);
+ ret = TRUE;
+ break;
+ }
+ case SP_CONNECTOR_CONTEXT_STOP:
+ /* This is perfectly valid */
+ break;
+ default:
+ break;
+ }
+ }
+ else if ( cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE )
+ {
+ switch ( cc->state )
+ {
+ case SP_CONNECTOR_CONTEXT_DRAGGING:
+ sp_knot_set_position(cc->selected_handle, p, 0);
+ ret = TRUE;
+ break;
+ case SP_CONNECTOR_CONTEXT_NEWCONNPOINT:
+ sp_knot_set_position(cc->selected_handle, p, 0);
+ ret = TRUE;
+ break;
}
- case SP_CONNECTOR_CONTEXT_STOP:
- /* This is perfectly valid */
- break;
- default:
- break;
}
return ret;
@@ -685,61 +1014,112 @@ connector_handle_button_release(SPConnectorContext *const cc, GdkEventButton con
SPEventContext *event_context = SP_EVENT_CONTEXT(cc);
if ( revent.button == 1 && !event_context->space_panning ) {
- SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
+ SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
SPDocument *doc = sp_desktop_document(desktop);
SnapManager &m = desktop->namedview->snap_manager;
- m.setup(desktop);
+ m.setup(desktop);
Geom::Point const event_w(revent.x, revent.y);
/* Find desktop coordinates */
Geom::Point p = cc->desktop->w2d(event_w);
-
- switch (cc->state) {
- //case SP_CONNECTOR_CONTEXT_POINT:
- case SP_CONNECTOR_CONTEXT_DRAGGING:
- {
- m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
-
- if (connector_within_tolerance)
+ if ( cc->mode == SP_CONNECTOR_CONTEXT_DRAWING_MODE )
+ {
+ switch (cc->state) {
+ //case SP_CONNECTOR_CONTEXT_POINT:
+ case SP_CONNECTOR_CONTEXT_DRAGGING:
{
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+
+ if (cc->within_tolerance)
+ {
+ spcc_connector_finish_segment(cc, p);
+ return TRUE;
+ }
+ // Connector has been created via a drag, end it now.
+ spcc_connector_set_subsequent_point(cc, p);
spcc_connector_finish_segment(cc, p);
- return TRUE;
+ // Test whether we clicked on a connection point
+ cc->eid = conn_pt_handle_test(cc, p);
+ if (cc->npoints != 0) {
+ spcc_connector_finish(cc);
+ }
+ cc_set_active_conn(cc, cc->newconn);
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+// sp_event_context_snap_window_closed(event_context);
+ break;
}
- // Connector has been created via a drag, end it now.
- spcc_connector_set_subsequent_point(cc, p);
- spcc_connector_finish_segment(cc, p);
- // Test whether we clicked on a connection point
- cc->eid = conn_pt_handle_test(cc, p);
- if (cc->npoints != 0) {
- spcc_connector_finish(cc);
+ case SP_CONNECTOR_CONTEXT_REROUTING:
+ {
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+ cc_connector_rerouting_finish(cc, &p);
+
+ sp_document_ensure_up_to_date(doc);
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+// sp_event_context_snap_window_closed(event_context);
+ return TRUE;
+ break;
}
- cc_set_active_conn(cc, cc->newconn);
- cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- sp_event_context_discard_delayed_snap_event(event_context);
- break;
+ case SP_CONNECTOR_CONTEXT_STOP:
+ /* This is allowed, if we just cancelled curve */
+ break;
+ default:
+ break;
}
- case SP_CONNECTOR_CONTEXT_REROUTING:
+ ret = TRUE;
+ }
+ else if ( cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE )
+ {
+ switch ( cc->state )
{
- m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
- cc_connector_rerouting_finish(cc, &p);
+ case SP_CONNECTOR_CONTEXT_DRAGGING:
- sp_document_ensure_up_to_date(doc);
- cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- sp_event_context_discard_delayed_snap_event(event_context);
- return TRUE;
- break;
+ if (!cc->within_tolerance)
+ {
+// sp_event_context_snap_window_open(event_context);
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+ sp_knot_set_position(cc->selected_handle, p, 0);
+// sp_event_context_snap_window_closed(event_context);
+ ConnectionPoint& cp = cc->connpthandles[cc->selected_handle];
+ cp.pos = p * sp_item_dt2i_affine(cc->active_shape);
+ cc->active_shape->avoidRef->updateConnectionPoint(cp);
+ }
+
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+ ret = TRUE;
+ break;
+
+
+ case SP_CONNECTOR_CONTEXT_NEWCONNPOINT:
+// sp_event_context_snap_window_open( event_context );
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+
+ sp_knot_set_position(cc->selected_handle, p, 0);
+// sp_event_context_snap_window_closed(event_context);
+
+ ConnectionPoint cp;
+ cp.type = ConnPointUserDefined;
+ cp.pos = p * sp_item_dt2i_affine(cc->active_shape);
+ cp.dir = Avoid::ConnDirAll;
+ g_object_unref(cc->selected_handle);
+ cc->active_shape->avoidRef->addConnectionPoint(cp);
+ sp_document_ensure_up_to_date(doc);
+ for (ConnectionPointMap::iterator it = cc->connpthandles.begin(); it != cc->connpthandles.end(); ++it)
+ if (it->second.type == ConnPointUserDefined && it->second.id == cp.id)
+ {
+ cc->selected_handle = it->first;
+ break;
+ }
+ cc_select_handle( cc->selected_handle );
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+ ret = TRUE;
+ break;
}
- case SP_CONNECTOR_CONTEXT_STOP:
- /* This is allowed, if we just cancelled curve */
- break;
- default:
- break;
}
- ret = TRUE;
}
+
return ret;
}
@@ -749,43 +1129,145 @@ connector_handle_key_press(SPConnectorContext *const cc, guint const keyval)
{
gint ret = FALSE;
/* fixme: */
- switch (keyval) {
- case GDK_Return:
- case GDK_KP_Enter:
- if (cc->npoints != 0) {
- spcc_connector_finish(cc);
- cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- sp_event_context_discard_delayed_snap_event(SP_EVENT_CONTEXT(cc));
- ret = TRUE;
- }
- break;
- case GDK_Escape:
- if (cc->state == SP_CONNECTOR_CONTEXT_REROUTING) {
+ if ( cc->mode == SP_CONNECTOR_CONTEXT_DRAWING_MODE )
+ {
+ switch (keyval) {
+ case GDK_Return:
+ case GDK_KP_Enter:
+ if (cc->npoints != 0) {
+ spcc_connector_finish(cc);
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+// sp_event_context_snap_window_closed(SP_EVENT_CONTEXT(cc));
+ ret = TRUE;
+ }
+ break;
+ case GDK_Escape:
+ if (cc->state == SP_CONNECTOR_CONTEXT_REROUTING) {
- SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
- SPDocument *doc = sp_desktop_document(desktop);
+ SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
+ SPDocument *doc = sp_desktop_document(desktop);
- cc_connector_rerouting_finish(cc, NULL);
+ cc_connector_rerouting_finish(cc, NULL);
- sp_document_undo(doc);
+ sp_document_undo(doc);
- cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- sp_event_context_discard_delayed_snap_event(SP_EVENT_CONTEXT(cc));
- desktop->messageStack()->flash( Inkscape::NORMAL_MESSAGE,
- _("Connector endpoint drag cancelled."));
- ret = TRUE;
- }
- else if (cc->npoints != 0) {
- // if drawing, cancel, otherwise pass it up for deselecting
- cc->state = SP_CONNECTOR_CONTEXT_STOP;
- sp_event_context_discard_delayed_snap_event(SP_EVENT_CONTEXT(cc));
- spcc_reset_colors(cc);
- ret = TRUE;
- }
- break;
- default:
- break;
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+// sp_event_context_snap_window_closed(SP_EVENT_CONTEXT(cc));
+ desktop->messageStack()->flash( Inkscape::NORMAL_MESSAGE,
+ _("Connector endpoint drag cancelled."));
+ ret = TRUE;
+ }
+ else if (cc->npoints != 0) {
+ // if drawing, cancel, otherwise pass it up for deselecting
+ cc->state = SP_CONNECTOR_CONTEXT_STOP;
+// sp_event_context_snap_window_closed(SP_EVENT_CONTEXT(cc));
+ spcc_reset_colors(cc);
+ ret = TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ else if ( cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE )
+ {
+ switch ( cc->state )
+ {
+ case SP_CONNECTOR_CONTEXT_DRAGGING:
+ if ( keyval == GDK_Escape )
+ {
+ // Cancel connection point dragging
+
+ // Obtain original position
+ ConnectionPoint const& cp = cc->connpthandles[cc->selected_handle];
+ SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
+ const Geom::Matrix& i2doc = sp_item_i2doc_affine(cc->active_shape);
+ sp_knot_set_position(cc->selected_handle, cp.pos * i2doc * desktop->doc2dt(), 0);
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+ desktop->messageStack()->flash( Inkscape::NORMAL_MESSAGE,
+ _("Connection point drag cancelled."));
+ ret = TRUE;
+ }
+ else if ( keyval == GDK_Return || keyval == GDK_KP_Enter )
+ {
+ // Put connection point at current position
+
+ SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
+ SnapManager &m = desktop->namedview->snap_manager;
+ m.setup(desktop);
+ Geom::Point p = cc->selected_handle->pos;
+// SPEventContext* event_context = SP_EVENT_CONTEXT( cc );
+
+ if (!cc->within_tolerance)
+ {
+// sp_event_context_snap_window_open(event_context);
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+ sp_knot_set_position(cc->selected_handle, p, 0);
+// sp_event_context_snap_window_closed(event_context);
+ ConnectionPoint& cp = cc->connpthandles[cc->selected_handle];
+ cp.pos = p * sp_item_dt2i_affine(cc->active_shape);
+ cc->active_shape->avoidRef->updateConnectionPoint(cp);
+ }
+
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+ ret = TRUE;
+ }
+ break;
+ case SP_CONNECTOR_CONTEXT_NEWCONNPOINT:
+ if ( keyval == GDK_Escape )
+ {
+ // Just destroy the knot
+ g_object_unref( cc->selected_handle );
+ cc->selected_handle = NULL;
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+ ret = TRUE;
+ }
+ else if ( keyval == GDK_Return || keyval == GDK_KP_Enter )
+ {
+ SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
+ SPDocument *doc = sp_desktop_document(desktop);
+ SnapManager &m = desktop->namedview->snap_manager;
+ m.setup(desktop);
+ Geom::Point p = cc->selected_handle->pos;
+// SPEventContext* event_context = SP_EVENT_CONTEXT( cc );
+
+// sp_event_context_snap_window_open( event_context );
+ m.freeSnapReturnByRef(Inkscape::SnapPreferences::SNAPPOINT_NODE, p, Inkscape::SNAPSOURCE_HANDLE);
+
+ sp_knot_set_position(cc->selected_handle, p, 0);
+// sp_event_context_snap_window_closed(event_context);
+
+ ConnectionPoint cp;
+ cp.type = ConnPointUserDefined;
+ cp.pos = p * sp_item_dt2i_affine(cc->active_shape);
+ cp.dir = Avoid::ConnDirAll;
+ g_object_unref(cc->selected_handle);
+ cc->active_shape->avoidRef->addConnectionPoint(cp);
+ sp_document_ensure_up_to_date(doc);
+ for (ConnectionPointMap::iterator it = cc->connpthandles.begin(); it != cc->connpthandles.end(); ++it)
+ if (it->second.type == ConnPointUserDefined && it->second.id == cp.id)
+ {
+ cc->selected_handle = it->first;
+ break;
+ }
+ cc_select_handle( cc->selected_handle );
+ cc->state = SP_CONNECTOR_CONTEXT_IDLE;
+ ret = TRUE;
+ }
+
+ break;
+ case SP_CONNECTOR_CONTEXT_IDLE:
+ if ( keyval == GDK_Delete && cc->selected_handle )
+ {
+ cc->active_shape->avoidRef->deleteConnectionPoint(cc->connpthandles[cc->selected_handle]);
+ cc->selected_handle = NULL;
+ ret = TRUE;
+ }
+
+ break;
+ }
}
+
return ret;
}
@@ -818,7 +1300,7 @@ cc_connector_rerouting_finish(SPConnectorContext *const cc, Geom::Point *const p
}
}
cc->clickeditem->setHidden(false);
- sp_conn_adjust_path(SP_PATH(cc->clickeditem));
+ sp_conn_reroute_path_immediate(SP_PATH(cc->clickeditem));
cc->clickeditem->updateRepr();
sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
_("Reroute connector"));
@@ -863,25 +1345,20 @@ spcc_connector_set_subsequent_point(SPConnectorContext *const cc, Geom::Point co
if (!cc->newConnRef) {
Avoid::Router *router = sp_desktop_document(dt)->router;
- cc->newConnRef = new Avoid::ConnRef(router, 0, src, dst);
- cc->newConnRef->updateEndPoint(Avoid::VertID::src, src);
+ cc->newConnRef = new Avoid::ConnRef(router);
+ cc->newConnRef->setEndpoint(Avoid::VertID::src, src);
+ if (cc->isOrthogonal)
+ cc->newConnRef->setRoutingType(Avoid::ConnType_Orthogonal);
+ else
+ cc->newConnRef->setRoutingType(Avoid::ConnType_PolyLine);
}
- cc->newConnRef->updateEndPoint(Avoid::VertID::tar, dst);
-
+ // Set new endpoint.
+ cc->newConnRef->setEndpoint(Avoid::VertID::tar, dst);
+ // Immediately generate new routes for connector.
cc->newConnRef->makePathInvalid();
- cc->newConnRef->generatePath(src, dst);
-
- Avoid::PolyLine route = cc->newConnRef->route();
- cc->newConnRef->calcRouteDist();
-
- cc->red_curve->reset();
- Geom::Point pt(route.ps[0].x, route.ps[0].y);
- cc->red_curve->moveto(pt);
-
- for (int i = 1; i < route.pn; ++i) {
- Geom::Point p(route.ps[i].x, route.ps[i].y);
- cc->red_curve->lineto(p);
- }
+ cc->newConnRef->router()->processTransaction();
+ // Recreate curve from libavoid route.
+ recreateCurve( cc->red_curve, cc->newConnRef, cc->curvature );
cc->red_curve->transform(dt->doc2dt());
sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), cc->red_curve);
}
@@ -953,14 +1430,13 @@ spcc_flush_white(SPConnectorContext *cc, SPCurve *gc)
/* Attach repr */
cc->newconn = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr));
- cc->selection->set(repr);
- Inkscape::GC::release(repr);
cc->newconn->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
- cc->newconn->updateRepr();
bool connection = false;
sp_object_setAttribute(cc->newconn, "inkscape:connector-type",
- "polyline", false);
+ cc->isOrthogonal ? "orthogonal" : "polyline", false);
+ sp_object_setAttribute(cc->newconn, "inkscape:connector-curvature",
+ Glib::Ascii::dtostr(cc->curvature).c_str(), false);
if (cc->sid)
{
sp_object_setAttribute(cc->newconn, "inkscape:connection-start",
@@ -974,19 +1450,27 @@ spcc_flush_white(SPConnectorContext *cc, SPCurve *gc)
cc->eid, false);
connection = true;
}
+ // Process pending updates.
cc->newconn->updateRepr();
+ sp_document_ensure_up_to_date(doc);
+
if (connection) {
// Adjust endpoints to shape edge.
- sp_conn_adjust_path(SP_PATH(cc->newconn));
+ sp_conn_reroute_path_immediate(SP_PATH(cc->newconn));
+ cc->newconn->updateRepr();
}
- cc->newconn->updateRepr();
+
+ // Only set the selection after we are finished with creating the attributes of
+ // the connector. Otherwise, the selection change may alter the defaults for
+ // values like curvature in the connector context, preventing subsequent lookup
+ // of their original values.
+ cc->selection->set(repr);
+ Inkscape::GC::release(repr);
}
c->unref();
- /* Flush pending updates */
sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR, _("Create connector"));
- sp_document_ensure_up_to_date(doc);
}
@@ -1036,16 +1520,16 @@ cc_generic_knot_handler(SPCanvasItem *, GdkEvent *event, SPKnot *knot)
gboolean consumed = FALSE;
+ gchar* knot_tip = knot->tip ? knot->tip : cc->knot_tip;
switch (event->type) {
case GDK_ENTER_NOTIFY:
sp_knot_set_flag(knot, SP_KNOT_MOUSEOVER, TRUE);
cc->active_handle = knot;
-
- if (knot->tip)
+ if (knot_tip)
{
knot->desktop->event_context->defaultMessageContext()->set(
- Inkscape::NORMAL_MESSAGE, knot->tip);
+ Inkscape::NORMAL_MESSAGE, knot_tip);
}
consumed = TRUE;
@@ -1055,7 +1539,7 @@ cc_generic_knot_handler(SPCanvasItem *, GdkEvent *event, SPKnot *knot)
cc->active_handle = NULL;
- if (knot->tip) {
+ if (knot_tip) {
knot->desktop->event_context->defaultMessageContext()->clear();
}
@@ -1087,6 +1571,7 @@ endpt_handler(SPKnot */*knot*/, GdkEvent *event, SPConnectorContext *cc)
cc->clickedhandle = cc->active_handle;
cc_clear_active_conn(cc);
cc->state = SP_CONNECTOR_CONTEXT_REROUTING;
+// sp_event_context_snap_window_open(SP_EVENT_CONTEXT(cc));
// Disconnect from attached shape
unsigned ind = (cc->active_handle == cc->endpt_handle[0]) ? 0 : 1;
@@ -1101,7 +1586,7 @@ endpt_handler(SPKnot */*knot*/, GdkEvent *event, SPConnectorContext *cc)
}
// Show the red path for dragging.
- cc->red_curve = SP_PATH(cc->clickeditem)->curve->copy();
+ cc->red_curve = SP_PATH(cc->clickeditem)->original_curve ? SP_PATH(cc->clickeditem)->original_curve->copy() : SP_PATH(cc->clickeditem)->curve->copy();
Geom::Matrix i2d = sp_item_i2d_affine(cc->clickeditem);
cc->red_curve->transform(i2d);
sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), cc->red_curve);
@@ -1120,38 +1605,9 @@ endpt_handler(SPKnot */*knot*/, GdkEvent *event, SPConnectorContext *cc)
return consumed;
}
-
-static void cc_set_active_shape(SPConnectorContext *cc, SPItem *item)
+static void cc_active_shape_add_knot(SPDesktop* desktop, SPItem* item, ConnectionPointMap &cphandles, ConnectionPoint& cp)
{
- g_assert(item != NULL );
-
- cc->active_shape = item;
-
- // Remove existing active shape listeners
- if (cc->active_shape_repr) {
- sp_repr_remove_listener_by_data(cc->active_shape_repr, cc);
- Inkscape::GC::release(cc->active_shape_repr);
-
- sp_repr_remove_listener_by_data(cc->active_shape_layer_repr, cc);
- Inkscape::GC::release(cc->active_shape_layer_repr);
- }
-
- // Listen in case the active shape changes
- cc->active_shape_repr = SP_OBJECT_REPR(item);
- if (cc->active_shape_repr) {
- Inkscape::GC::anchor(cc->active_shape_repr);
- sp_repr_add_listener(cc->active_shape_repr, &shape_repr_events, cc);
-
- cc->active_shape_layer_repr = cc->active_shape_repr->parent();
- Inkscape::GC::anchor(cc->active_shape_layer_repr);
- sp_repr_add_listener(cc->active_shape_layer_repr, &layer_repr_events, cc);
- }
-
-
- // Set center connection point.
- if ( cc->connpthandle == NULL ) {
- SPKnot *knot = sp_knot_new(cc->desktop,
- _("<b>Connection point</b>: click or drag to create a new connector"));
+ SPKnot *knot = sp_knot_new(desktop, 0);
knot->setShape(SP_KNOT_SHAPE_SQUARE);
knot->setSize(8);
@@ -1159,26 +1615,127 @@ static void cc_set_active_shape(SPConnectorContext *cc, SPItem *item)
knot->setFill(0xffffff00, 0xff0000ff, 0xff0000ff);
sp_knot_update_ctrl(knot);
- // We don't want to use the standard knot handler,
- //since we don't want this knot to be draggable.
+ // We don't want to use the standard knot handler.
g_signal_handler_disconnect(G_OBJECT(knot->item),
knot->_event_handler_id);
knot->_event_handler_id = 0;
gtk_signal_connect(GTK_OBJECT(knot->item), "event",
GTK_SIGNAL_FUNC(cc_generic_knot_handler), knot);
+ sp_knot_set_position(knot, item->avoidRef->getConnectionPointPos(cp.type, cp.id) * desktop->doc2dt(), 0);
+ sp_knot_show(knot);
+ cphandles[knot] = cp;
+}
+
+static void cc_set_active_shape(SPConnectorContext *cc, SPItem *item)
+{
+ g_assert(item != NULL );
+
+ std::map<int, ConnectionPoint>* connpts = &item->avoidRef->connection_points;
+
+ if (cc->active_shape != item)
+ {
+ // The active shape has changed
+ // Rebuild everything
+ cc->active_shape = item;
+ // Remove existing active shape listeners
+ if (cc->active_shape_repr) {
+ sp_repr_remove_listener_by_data(cc->active_shape_repr, cc);
+ Inkscape::GC::release(cc->active_shape_repr);
+
+ sp_repr_remove_listener_by_data(cc->active_shape_layer_repr, cc);
+ Inkscape::GC::release(cc->active_shape_layer_repr);
+ }
- cc->connpthandle = knot;
+ // Listen in case the active shape changes
+ cc->active_shape_repr = SP_OBJECT_REPR(item);
+ if (cc->active_shape_repr) {
+ Inkscape::GC::anchor(cc->active_shape_repr);
+ sp_repr_add_listener(cc->active_shape_repr, &shape_repr_events, cc);
+
+ cc->active_shape_layer_repr = cc->active_shape_repr->parent();
+ Inkscape::GC::anchor(cc->active_shape_layer_repr);
+ sp_repr_add_listener(cc->active_shape_layer_repr, &layer_repr_events, cc);
+ }
+
+
+ // Set the connection points.
+ if ( cc->connpthandles.size() )
+ // destroy the old list
+ while (! cc->connpthandles.empty() )
+ {
+ g_object_unref(cc->connpthandles.begin()->first);
+ cc->connpthandles.erase(cc->connpthandles.begin());
+ }
+ // build the new one
+ if ( connpts->size() )
+ for (std::map<int, ConnectionPoint>::iterator it = connpts->begin(); it != connpts->end(); ++it)
+ cc_active_shape_add_knot(cc->desktop, item, cc->connpthandles, it->second);
+
+ // Also add default connection points
+ // For now, only centre default connection point will
+ // be available
+ ConnectionPoint centre;
+ centre.type = ConnPointDefault;
+ centre.id = ConnPointPosCC;
+ cc_active_shape_add_knot(cc->desktop, item, cc->connpthandles, centre);
}
+ else
+ {
+ // The active shape didn't change
+ // Update only the connection point knots
+ // Ensure the item's connection_points map
+ // has been updated
+ sp_document_ensure_up_to_date(SP_OBJECT_DOCUMENT(item));
- Geom::OptRect bbox = sp_item_bbox_desktop(cc->active_shape);
- if (bbox) {
- Geom::Point center = bbox->midpoint();
- sp_knot_set_position(cc->connpthandle, center, 0);
- sp_knot_show(cc->connpthandle);
- } else {
- sp_knot_hide(cc->connpthandle);
+ std::set<int> seen;
+ for ( ConnectionPointMap::iterator it = cc->connpthandles.begin(); it != cc->connpthandles.end() ;)
+ {
+ bool removed = false;
+ if ( it->second.type == ConnPointUserDefined )
+ {
+ std::map<int, ConnectionPoint>::iterator p = connpts->find(it->second.id);
+ if (p != connpts->end())
+ {
+ if ( it->second != p->second )
+ // Connection point position has changed
+ // Update knot position
+ sp_knot_set_position(it->first,
+ item->avoidRef->getConnectionPointPos(it->second.type, it->second.id) * cc->desktop->doc2dt(), 0);
+ seen.insert(it->second.id);
+ sp_knot_show(it->first);
+ }
+ else
+ {
+ // This connection point does no longer exist,
+ // remove the knot
+ ConnectionPointMap::iterator curr = it;
+ ++it;
+ g_object_unref( curr->first );
+ cc->connpthandles.erase(curr);
+ removed = true;
+ }
+ }
+ else
+ {
+ // It's a default connection point
+ // Just make sure it's position is correct
+ sp_knot_set_position(it->first,
+ item->avoidRef->getConnectionPointPos(it->second.type, it->second.id) * cc->desktop->doc2dt(), 0);
+ sp_knot_show(it->first);
+
+ }
+ if ( !removed )
+ ++it;
+ }
+ // Add knots for new connection points.
+ if (connpts->size())
+ for ( std::map<int, ConnectionPoint>::iterator it = connpts->begin(); it != connpts->end(); ++it )
+ if ( seen.find(it->first) == seen.end() )
+ // A new connection point has been added
+ // to the shape. Add a knot for it.
+ cc_active_shape_add_knot(cc->desktop, item, cc->connpthandles, it->second);
}
}
@@ -1188,7 +1745,7 @@ cc_set_active_conn(SPConnectorContext *cc, SPItem *item)
{
g_assert( SP_IS_PATH(item) );
- SPCurve *curve = SP_SHAPE(SP_PATH(item))->curve;
+ SPCurve *curve = SP_PATH(item)->original_curve ? SP_PATH(item)->original_curve : SP_PATH(item)->curve;
Geom::Matrix i2d = sp_item_i2d_affine(item);
if (cc->active_conn == item)
@@ -1234,7 +1791,7 @@ cc_set_active_conn(SPConnectorContext *cc, SPItem *item)
sp_knot_update_ctrl(knot);
// We don't want to use the standard knot handler,
- //since we don't want this knot to be draggable.
+ // since we don't want this knot to be draggable.
g_signal_handler_disconnect(G_OBJECT(knot->item),
knot->_event_handler_id);
knot->_event_handler_id = 0;
@@ -1271,6 +1828,35 @@ cc_set_active_conn(SPConnectorContext *cc, SPItem *item)
sp_knot_show(cc->endpt_handle[1]);
}
+void cc_create_connection_point(SPConnectorContext* cc)
+{
+ if (cc->active_shape && cc->state == SP_CONNECTOR_CONTEXT_IDLE)
+ {
+ if (cc->selected_handle)
+ {
+ cc_deselect_handle( cc->selected_handle );
+ }
+ SPKnot *knot = sp_knot_new(cc->desktop, 0);
+ // We do not process events on this knot.
+ g_signal_handler_disconnect(G_OBJECT(knot->item),
+ knot->_event_handler_id);
+ knot->_event_handler_id = 0;
+
+ cc_select_handle( knot );
+ cc->selected_handle = knot;
+ sp_knot_show(cc->selected_handle);
+ cc->state = SP_CONNECTOR_CONTEXT_NEWCONNPOINT;
+ }
+}
+
+void cc_remove_connection_point(SPConnectorContext* cc)
+{
+ if (cc->selected_handle && cc->state == SP_CONNECTOR_CONTEXT_IDLE )
+ {
+ cc->active_shape->avoidRef->deleteConnectionPoint(cc->connpthandles[cc->selected_handle]);
+ cc->selected_handle = NULL;
+ }
+}
static bool cc_item_is_shape(SPItem *item)
{
@@ -1296,7 +1882,7 @@ bool cc_item_is_connector(SPItem *item)
{
if (SP_IS_PATH(item)) {
if (SP_PATH(item)->connEndPair.isAutoRoutingConn()) {
- g_assert( !(SP_SHAPE(item)->curve->is_closed()) );
+ g_assert( SP_PATH(item)->original_curve ? !(SP_PATH(item)->original_curve->is_closed()) : !(SP_PATH(item)->curve->is_closed()) );
return true;
}
}
@@ -1394,7 +1980,7 @@ shape_event_attr_changed(Inkscape::XML::Node *repr, gchar const *name,
g_assert(data);
SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(data);
- // Look for changes than result in onscreen movement.
+ // Look for changes that result in onscreen movement.
if (!strcmp(name, "d") || !strcmp(name, "x") || !strcmp(name, "y") ||
!strcmp(name, "width") || !strcmp(name, "height") ||
!strcmp(name, "transform"))
@@ -1409,6 +1995,12 @@ shape_event_attr_changed(Inkscape::XML::Node *repr, gchar const *name,
cc_set_active_conn(cc, cc->active_conn);
}
}
+ else
+ if ( !strcmp(name, "inkscape:connection-points") )
+ if (repr == cc->active_shape_repr)
+ // The connection points of the active shape
+ // have changed. Update them.
+ cc_set_active_shape(cc, cc->active_shape);
}
diff --git a/src/connector-context.h b/src/connector-context.h
index d67e12b81..640a03aae 100644
--- a/src/connector-context.h
+++ b/src/connector-context.h
@@ -19,7 +19,8 @@
#include <display/display-forward.h>
#include <2geom/point.h>
#include "libavoid/connector.h"
-
+#include "connection-points.h"
+#include <glibmm/i18n.h>
#define SP_TYPE_CONNECTOR_CONTEXT (sp_connector_context_get_type())
#define SP_CONNECTOR_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_CONNECTOR_CONTEXT, SPConnectorContext))
@@ -38,9 +39,18 @@ enum {
SP_CONNECTOR_CONTEXT_DRAGGING,
SP_CONNECTOR_CONTEXT_CLOSE,
SP_CONNECTOR_CONTEXT_STOP,
- SP_CONNECTOR_CONTEXT_REROUTING
+ SP_CONNECTOR_CONTEXT_REROUTING,
+ SP_CONNECTOR_CONTEXT_NEWCONNPOINT
+};
+
+enum {
+ SP_CONNECTOR_CONTEXT_DRAWING_MODE,
+ SP_CONNECTOR_CONTEXT_EDITING_MODE
};
+static char* cc_knot_tips[] = { _("<b>Connection point</b>: click or drag to create a new connector"),
+ _("<b>Connection point</b>: click to select, drag to move") };
+typedef std::map<SPKnot *, ConnectionPoint> ConnectionPointMap;
struct SPConnectorContext : public SPEventContext {
Inkscape::Selection *selection;
@@ -48,10 +58,14 @@ struct SPConnectorContext : public SPEventContext {
/** \invar npoints in {0, 2}. */
gint npoints;
-
+ /* The tool mode can be connector drawing or
+ connection points editing.
+ */
unsigned int mode : 1;
unsigned int state : 4;
+ gchar* knot_tip;
+
// Red curve
SPCanvasItem *red_bpath;
SPCurve *red_curve;
@@ -63,6 +77,8 @@ struct SPConnectorContext : public SPEventContext {
// The new connector
SPItem *newconn;
Avoid::ConnRef *newConnRef;
+ gdouble curvature;
+ bool isOrthogonal;
// The active shape
SPItem *active_shape;
@@ -78,10 +94,13 @@ struct SPConnectorContext : public SPEventContext {
// The activehandle
SPKnot *active_handle;
+ // The selected handle, used in editing mode
+ SPKnot *selected_handle;
+
SPItem *clickeditem;
SPKnot *clickedhandle;
- SPKnot *connpthandle;
+ ConnectionPointMap connpthandles;
SPKnot *endpt_handle[2];
guint endpt_handler_id[2];
gchar *sid;
@@ -93,7 +112,10 @@ struct SPConnectorContextClass : public SPEventContextClass { };
GType sp_connector_context_get_type();
+void sp_connector_context_switch_mode(SPEventContext* ec, unsigned int newMode);
void cc_selection_set_avoid(bool const set_ignore);
+void cc_create_connection_point(SPConnectorContext* cc);
+void cc_remove_connection_point(SPConnectorContext* cc);
bool cc_item_is_connector(SPItem *item);
diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp
index c8782051b..2afcd6109 100644
--- a/src/desktop-style.cpp
+++ b/src/desktop-style.cpp
@@ -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;
diff --git a/src/desktop.cpp b/src/desktop.cpp
index 319a0d407..0e4d4caf3 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -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);
}
diff --git a/src/desktop.h b/src/desktop.h
index cfb977425..a02a31034 100644
--- a/src/desktop.h
+++ b/src/desktop.h
@@ -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; }
diff --git a/src/display/nr-arena-glyphs.cpp b/src/display/nr-arena-glyphs.cpp
index 429f1ed32..db0922915 100644
--- a/src/display/nr-arena-glyphs.cpp
+++ b/src/display/nr-arena-glyphs.cpp
@@ -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 {
diff --git a/src/display/nr-arena-item.cpp b/src/display/nr-arena-item.cpp
index bdab5b479..b80df7273 100644
--- a/src/display/nr-arena-item.cpp
+++ b/src/display/nr-arena-item.cpp
@@ -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),
diff --git a/src/display/nr-arena-shape.cpp b/src/display/nr-arena-shape.cpp
index 96ea76cbe..e2a9e9580 100644
--- a/src/display/nr-arena-shape.cpp
+++ b/src/display/nr-arena-shape.cpp
@@ -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);
diff --git a/src/display/nr-arena.cpp b/src/display/nr-arena.cpp
index 74e0f409c..33870a118 100644
--- a/src/display/nr-arena.cpp
+++ b/src/display/nr-arena.cpp
@@ -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++
diff --git a/src/display/nr-arena.h b/src/display/nr-arena.h
index 1c091b7c7..d2f9dc246 100644
--- a/src/display/nr-arena.h
+++ b/src/display/nr-arena.h
@@ -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
diff --git a/src/display/nr-filter-colormatrix.cpp b/src/display/nr-filter-colormatrix.cpp
index 66fb196cb..0b24649a9 100644
--- a/src/display/nr-filter-colormatrix.cpp
+++ b/src/display/nr-filter-colormatrix.cpp
@@ -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
diff --git a/src/display/nr-filter-colormatrix.h b/src/display/nr-filter-colormatrix.h
index 1c331a5b0..47b454c53 100644
--- a/src/display/nr-filter-colormatrix.h
+++ b/src/display/nr-filter-colormatrix.h
@@ -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
*
diff --git a/src/display/nr-filter-component-transfer.cpp b/src/display/nr-filter-component-transfer.cpp
index 87f87c95a..ab9990360 100644
--- a/src/display/nr-filter-component-transfer.cpp
+++ b/src/display/nr-filter-component-transfer.cpp
@@ -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
diff --git a/src/display/nr-filter-component-transfer.h b/src/display/nr-filter-component-transfer.h
index 3d8be272e..eb76bd543 100644
--- a/src/display/nr-filter-component-transfer.h
+++ b/src/display/nr-filter-component-transfer.h
@@ -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
*
diff --git a/src/display/nr-filter-convolve-matrix.cpp b/src/display/nr-filter-convolve-matrix.cpp
index e9f7e7dfe..fc88102d8 100644
--- a/src/display/nr-filter-convolve-matrix.cpp
+++ b/src/display/nr-filter-convolve-matrix.cpp
@@ -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];
diff --git a/src/display/nr-filter-convolve-matrix.h b/src/display/nr-filter-convolve-matrix.h
index d7a04a766..e7416f9cc 100644
--- a/src/display/nr-filter-convolve-matrix.h
+++ b/src/display/nr-filter-convolve-matrix.h
@@ -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
*
diff --git a/src/display/nr-filter-displacement-map.cpp b/src/display/nr-filter-displacement-map.cpp
index 869a184ac..4de5e658c 100644
--- a/src/display/nr-filter-displacement-map.cpp
+++ b/src/display/nr-filter-displacement-map.cpp
@@ -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
*
diff --git a/src/display/nr-filter-displacement-map.h b/src/display/nr-filter-displacement-map.h
index 180030c85..bb15b77a3 100644
--- a/src/display/nr-filter-displacement-map.h
+++ b/src/display/nr-filter-displacement-map.h
@@ -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
*
diff --git a/src/display/nr-filter-flood.cpp b/src/display/nr-filter-flood.cpp
index 026cbce16..1d804f969 100644
--- a/src/display/nr-filter-flood.cpp
+++ b/src/display/nr-filter-flood.cpp
@@ -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*/)
{
}
diff --git a/src/display/nr-filter-flood.h b/src/display/nr-filter-flood.h
index 9e6a53abb..98c374bbd 100644
--- a/src/display/nr-filter-flood.h
+++ b/src/display/nr-filter-flood.h
@@ -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 */
diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp
index 2b799f8d2..4ad6982f3 100644
--- a/src/display/nr-filter-image.cpp
+++ b/src/display/nr-filter-image.cpp
@@ -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
diff --git a/src/display/nr-filter-morphology.cpp b/src/display/nr-filter-morphology.cpp
index 2df3ff807..258298751 100644
--- a/src/display/nr-filter-morphology.cpp
+++ b/src/display/nr-filter-morphology.cpp
@@ -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
*
diff --git a/src/display/nr-filter-morphology.h b/src/display/nr-filter-morphology.h
index 1d3e16be3..16ccad5e6 100644
--- a/src/display/nr-filter-morphology.h
+++ b/src/display/nr-filter-morphology.h
@@ -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
*
diff --git a/src/display/nr-filter-tile.cpp b/src/display/nr-filter-tile.cpp
index 53399eba2..898db9f53 100644
--- a/src/display/nr-filter-tile.cpp
+++ b/src/display/nr-filter-tile.cpp
@@ -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
*
diff --git a/src/display/nr-filter-tile.h b/src/display/nr-filter-tile.h
index ea826dfd7..5a6a5a78c 100644
--- a/src/display/nr-filter-tile.h
+++ b/src/display/nr-filter-tile.h
@@ -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
*
diff --git a/src/display/nr-filter-turbulence.cpp b/src/display/nr-filter-turbulence.cpp
index a91db3d56..8d22b180d 100644
--- a/src/display/nr-filter-turbulence.cpp
+++ b/src/display/nr-filter-turbulence.cpp
@@ -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:
diff --git a/src/display/nr-filter-turbulence.h b/src/display/nr-filter-turbulence.h
index b12e6395a..b841cc37f 100644
--- a/src/display/nr-filter-turbulence.h
+++ b/src/display/nr-filter-turbulence.h
@@ -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
diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp
index 2d71504d2..7a0db664a 100644
--- a/src/display/nr-svgfonts.cpp
+++ b/src/display/nr-svgfonts.cpp
@@ -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
*
diff --git a/src/display/nr-svgfonts.h b/src/display/nr-svgfonts.h
index ebf5ad08b..ddf4ba327 100644
--- a/src/display/nr-svgfonts.h
+++ b/src/display/nr-svgfonts.h
@@ -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
*
diff --git a/src/display/rendermode.h b/src/display/rendermode.h
index 1b59ae9bb..abcdb3db4 100644
--- a/src/display/rendermode.h
+++ b/src/display/rendermode.h
@@ -12,7 +12,8 @@ namespace Inkscape {
enum RenderMode {
RENDERMODE_NORMAL,
RENDERMODE_NO_FILTERS,
- RENDERMODE_OUTLINE
+ RENDERMODE_OUTLINE,
+ RENDERMODE_PRINT_COLORS_PREVIEW
};
}
diff --git a/src/document.cpp b/src/document.cpp
index d406f3712..a3ad6f7be 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -63,10 +63,16 @@
#include "xml/repr.h"
#include "xml/rebase-hrefs.h"
-#define SP_DOCUMENT_UPDATE_PRIORITY (G_PRIORITY_HIGH_IDLE - 1)
+// Higher number means lower priority.
+#define SP_DOCUMENT_UPDATE_PRIORITY (G_PRIORITY_HIGH_IDLE - 2)
+
+// Should have a lower priority than SP_DOCUMENT_UPDATE_PRIORITY,
+// since we want it to happen when there are no more updates.
+#define SP_DOCUMENT_REROUTING_PRIORITY (G_PRIORITY_HIGH_IDLE - 1)
static gint sp_document_idle_handler(gpointer data);
+static gint sp_document_rerouting_handler(gpointer data);
gboolean sp_document_resource_list_free(gpointer key, gpointer value, gpointer data);
@@ -88,15 +94,17 @@ SPDocument::SPDocument() :
priv(0), // reset in ctor
actionkey(0),
modified_id(0),
+ rerouting_handler_id(0),
profileManager(0), // deferred until after other initialization
- router(new Avoid::Router()),
+ router(new Avoid::Router(Avoid::PolyLineRouting|Avoid::OrthogonalRouting)),
perspectives(0),
current_persp3d(0),
_collection_queue(0),
oldSignalsConnected(false)
{
- // Don't use the Consolidate moves optimisation.
- router->ConsolidateMoves = false;
+ // Penalise libavoid for choosing paths with needless extra segments.
+ // This results in much better looking orthogonal connector paths.
+ router->setRoutingPenalty(Avoid::segmentPenalty);
SPDocumentPrivate *p = new SPDocumentPrivate();
@@ -132,6 +140,11 @@ SPDocument::~SPDocument() {
profileManager = 0;
}
+ if (router) {
+ delete router;
+ router = NULL;
+ }
+
if (priv) {
if (priv->partial) {
sp_repr_free_log(priv->partial);
@@ -177,10 +190,15 @@ SPDocument::~SPDocument() {
}
if (modified_id) {
- gtk_idle_remove(modified_id);
+ g_source_remove(modified_id);
modified_id = 0;
}
+ if (rerouting_handler_id) {
+ g_source_remove(rerouting_handler_id);
+ rerouting_handler_id = 0;
+ }
+
if (oldSignalsConnected) {
g_signal_handlers_disconnect_by_func(G_OBJECT(INKSCAPE),
reinterpret_cast<gpointer>(sp_document_reset_key),
@@ -195,13 +213,7 @@ SPDocument::~SPDocument() {
keepalive = FALSE;
}
- if (router) {
- delete router;
- router = NULL;
- }
-
//delete this->_whiteboard_session_manager;
-
}
void SPDocument::add_persp3d (Persp3D * const /*persp*/)
@@ -852,7 +864,12 @@ void
sp_document_request_modified(SPDocument *doc)
{
if (!doc->modified_id) {
- doc->modified_id = gtk_idle_add_priority(SP_DOCUMENT_UPDATE_PRIORITY, sp_document_idle_handler, doc);
+ doc->modified_id = g_idle_add_full(SP_DOCUMENT_UPDATE_PRIORITY,
+ sp_document_idle_handler, doc, NULL);
+ }
+ if (!doc->rerouting_handler_id) {
+ doc->rerouting_handler_id = g_idle_add_full(SP_DOCUMENT_REROUTING_PRIORITY,
+ sp_document_rerouting_handler, doc, NULL);
}
}
@@ -908,26 +925,49 @@ SPDocument::_updateDocument()
* Repeatedly works on getting the document updated, since sometimes
* it takes more than one pass to get the document updated. But it
* usually should not take more than a few loops, and certainly never
- * more than 64 iterations. So we bail out if we hit 64 iterations,
+ * more than 32 iterations. So we bail out if we hit 32 iterations,
* since this typically indicates we're stuck in an update loop.
*/
gint
sp_document_ensure_up_to_date(SPDocument *doc)
{
- int counter = 64;
- while (!doc->_updateDocument()) {
- if (counter == 0) {
- g_warning("More than 64 iteration while updating document '%s'", doc->uri? doc->uri:"<unknown URI, probably clipboard>");
+ // Bring the document up-to-date, specifically via the following:
+ // 1a) Process all document updates.
+ // 1b) When completed, process connector routing changes.
+ // 2a) Process any updates resulting from connector reroutings.
+ int counter = 32;
+ for (unsigned int pass = 1; pass <= 2; ++pass) {
+ // Process document updates.
+ while (!doc->_updateDocument()) {
+ if (counter == 0) {
+ g_warning("More than 32 iteration while updating document '%s'", doc->uri);
+ break;
+ }
+ counter--;
+ }
+ if (counter == 0)
+ {
break;
}
- counter--;
- }
+ // After updates on the first pass we get libavoid to process all the
+ // changed objects and provide new routings. This may cause some objects
+ // to be modified, hence the second update pass.
+ if (pass == 1) {
+ doc->router->processTransaction();
+ }
+ }
+
if (doc->modified_id) {
/* Remove handler */
- gtk_idle_remove(doc->modified_id);
+ g_source_remove(doc->modified_id);
doc->modified_id = 0;
}
+ if (doc->rerouting_handler_id) {
+ /* Remove handler */
+ g_source_remove(doc->rerouting_handler_id);
+ doc->rerouting_handler_id = 0;
+ }
return counter>0;
}
@@ -947,6 +987,24 @@ sp_document_idle_handler(gpointer data)
}
}
+/**
+ * An idle handler to reroute connectors in the document.
+ */
+static gint
+sp_document_rerouting_handler(gpointer data)
+{
+ // Process any queued movement actions and determine new routings for
+ // object-avoiding connectors. Callbacks will be used to update and
+ // redraw affected connectors.
+ SPDocument *doc = static_cast<SPDocument *>(data);
+ doc->router->processTransaction();
+
+ // We don't need to handle rerouting again until there are further
+ // diagram updates.
+ doc->rerouting_handler_id = 0;
+ return false;
+}
+
static bool is_within(Geom::Rect const &area, Geom::Rect const &box)
{
return area.contains(box);
diff --git a/src/document.h b/src/document.h
index 789e3e2ed..06174c265 100644
--- a/src/document.h
+++ b/src/document.h
@@ -98,6 +98,9 @@ struct SPDocument : public Inkscape::GC::Managed<>,
const gchar *actionkey;
/// Handler ID
guint modified_id;
+
+ /// Connector rerouting handler ID
+ guint rerouting_handler_id;
Inkscape::ProfileManager* profileManager;
diff --git a/src/dom/ucd.cpp b/src/dom/ucd.cpp
index 3747334d2..f9c36ad19 100644
--- a/src/dom/ucd.cpp
+++ b/src/dom/ucd.cpp
@@ -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;
}
diff --git a/src/dom/util/ziptool.cpp b/src/dom/util/ziptool.cpp
index 40f456bd6..1e915ab0a 100644
--- a/src/dom/util/ziptool.cpp
+++ b/src/dom/util/ziptool.cpp
@@ -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);
diff --git a/src/dropper-context.cpp b/src/dropper-context.cpp
index aa17ea859..5415fdc80 100644
--- a/src/dropper-context.cpp
+++ b/src/dropper-context.cpp
@@ -143,6 +143,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.
*/
guint32 sp_dropper_context_get_color(SPEventContext *ec)
diff --git a/src/extension/dxf2svg/entities2elements.cpp b/src/extension/dxf2svg/entities2elements.cpp
index cf42dac32..ab160e265 100644
--- a/src/extension/dxf2svg/entities2elements.cpp
+++ b/src/extension/dxf2svg/entities2elements.cpp
@@ -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;
diff --git a/src/extension/internal/cairo-ps-out.cpp b/src/extension/internal/cairo-ps-out.cpp
index 9ac19326f..737bb2885 100644
--- a/src/extension/internal/cairo-ps-out.cpp
+++ b/src/extension/internal/cairo-ps-out.cpp
@@ -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
diff --git a/src/extension/internal/cairo-render-context.h b/src/extension/internal/cairo-render-context.h
index e6f2d698e..a1f902457 100644
--- a/src/extension/internal/cairo-render-context.h
+++ b/src/extension/internal/cairo-render-context.h
@@ -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
};
diff --git a/src/extension/internal/emf-win32-inout.cpp b/src/extension/internal/emf-win32-inout.cpp
index f400a3649..9d25f3a7f 100644
--- a/src/extension/internal/emf-win32-inout.cpp
+++ b/src/extension/internal/emf-win32-inout.cpp
@@ -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);
diff --git a/src/extension/internal/odf.cpp b/src/extension/internal/odf.cpp
index cc8489302..46e0361ce 100644
--- a/src/extension/internal/odf.cpp
+++ b/src/extension/internal/odf.cpp
@@ -795,8 +795,8 @@ void SingularValueDecomposition::calculate()
}
}
- delete e;
- delete work;
+ delete [] e;
+ delete [] work;
}
diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
index c2d417f2c..ba00fe343 100644
--- a/src/extension/internal/pdfinput/pdf-input.cpp
+++ b/src/extension/internal/pdfinput/pdf-input.cpp
@@ -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);
diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
index 00bd8fa4d..b9583545f 100644
--- a/src/extension/internal/pdfinput/svg-builder.cpp
+++ b/src/extension/internal/pdfinput/svg-builder.cpp
@@ -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);
diff --git a/src/filters/colormatrix.cpp b/src/filters/colormatrix.cpp
index 55cfcbeb7..3f60ea05c 100644
--- a/src/filters/colormatrix.cpp
+++ b/src/filters/colormatrix.cpp
@@ -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
diff --git a/src/filters/componenttransfer-funcnode.cpp b/src/filters/componenttransfer-funcnode.cpp
index e66f85e70..8edb9cf2d 100644
--- a/src/filters/componenttransfer-funcnode.cpp
+++ b/src/filters/componenttransfer-funcnode.cpp
@@ -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
*
diff --git a/src/filters/componenttransfer-funcnode.h b/src/filters/componenttransfer-funcnode.h
index 4db6ab785..52873f6d3 100644
--- a/src/filters/componenttransfer-funcnode.h
+++ b/src/filters/componenttransfer-funcnode.h
@@ -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
*
diff --git a/src/filters/convolvematrix.cpp b/src/filters/convolvematrix.cpp
index 3e1c36f0a..6440f340a 100644
--- a/src/filters/convolvematrix.cpp
+++ b/src/filters/convolvematrix.cpp
@@ -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
diff --git a/src/filters/convolvematrix.h b/src/filters/convolvematrix.h
index beb5fad75..1e8545040 100644
--- a/src/filters/convolvematrix.h
+++ b/src/filters/convolvematrix.h
@@ -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
diff --git a/src/filters/flood.cpp b/src/filters/flood.cpp
index 625e35d42..221b0daf2 100644
--- a/src/filters/flood.cpp
+++ b/src/filters/flood.cpp
@@ -17,12 +17,13 @@
# 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);
}
diff --git a/src/filters/flood.h b/src/filters/flood.h
index 046c0e868..f386e2cd4 100644
--- a/src/filters/flood.h
+++ b/src/filters/flood.h
@@ -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;
};
diff --git a/src/filters/image.cpp b/src/filters/image.cpp
index d8e5a417f..eb6dfc22a 100644
--- a/src/filters/image.cpp
+++ b/src/filters/image.cpp
@@ -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 */
diff --git a/src/filters/image.h b/src/filters/image.h
index 7207918e1..78e719ac7 100644
--- a/src/filters/image.h
+++ b/src/filters/image.h
@@ -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
diff --git a/src/filters/morphology.cpp b/src/filters/morphology.cpp
index 9a34bbccb..1530dae8c 100644
--- a/src/filters/morphology.cpp
+++ b/src/filters/morphology.cpp
@@ -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
diff --git a/src/filters/turbulence.cpp b/src/filters/turbulence.cpp
index f3c143056..eed056ecc 100644
--- a/src/filters/turbulence.cpp
+++ b/src/filters/turbulence.cpp
@@ -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
diff --git a/src/filters/turbulence.h b/src/filters/turbulence.h
index 5edf678a7..792a6181a 100644
--- a/src/filters/turbulence.h
+++ b/src/filters/turbulence.h
@@ -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
diff --git a/src/graphlayout/graphlayout.cpp b/src/graphlayout/graphlayout.cpp
index cd1683c34..81ea59059 100644
--- a/src/graphlayout/graphlayout.cpp
+++ b/src/graphlayout/graphlayout.cpp
@@ -31,6 +31,7 @@
#include "style.h"
#include "conn-avoid-ref.h"
#include "libavoid/connector.h"
+#include "libavoid/router.h"
#include "libavoid/geomtypes.h"
#include "libcola/cola.h"
#include "libvpsc/generate-constraints.h"
diff --git a/src/helper-fns.h b/src/helper-fns.h
index d2a6c9b22..2c2db92c4 100644
--- a/src/helper-fns.h
+++ b/src/helper-fns.h
@@ -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
diff --git a/src/inkjar/jar.cpp b/src/inkjar/jar.cpp
index d53901de5..6897cb317 100644
--- a/src/inkjar/jar.cpp
+++ b/src/inkjar/jar.cpp
@@ -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;
diff --git a/src/inkscape.rc b/src/inkscape.rc
index d48b68c43..3b946a067 100644
--- a/src/inkscape.rc
+++ b/src/inkscape.rc
@@ -3,8 +3,8 @@ APPLICATION_ICON ICON DISCARDABLE "../inkscape.ico"
1 24 DISCARDABLE "./inkscape-manifest.xml"
1 VERSIONINFO
- FILEVERSION 0,46,0,0
- PRODUCTVERSION 0,46,0,0
+ FILEVERSION 0,47,0,0
+ PRODUCTVERSION 0,47,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
@@ -13,11 +13,11 @@ BEGIN
VALUE "Comments", "Published under the GNU GPL"
VALUE "CompanyName", "inkscape.org"
VALUE "FileDescription", "Inkscape"
- VALUE "FileVersion", "0.46.0"
+ VALUE "FileVersion", "0.47"
VALUE "InternalName", "Inkscape"
- VALUE "LegalCopyright", "© 2007 Inkscape"
+ VALUE "LegalCopyright", "© 2009 Inkscape"
VALUE "ProductName", "Inkscape"
- VALUE "ProductVersion", "0.46.0"
+ VALUE "ProductVersion", "0.47"
END
END
BLOCK "VarFileInfo"
diff --git a/src/inkview.rc b/src/inkview.rc
index 9f643eb4c..7a02bf11a 100644
--- a/src/inkview.rc
+++ b/src/inkview.rc
@@ -3,8 +3,8 @@ APPLICATION_ICON ICON DISCARDABLE "../inkscape.ico"
1 24 DISCARDABLE "./inkview-manifest.xml"
1 VERSIONINFO
- FILEVERSION 0,46,0,0
- PRODUCTVERSION 0,46,0,0
+ FILEVERSION 0,47,0,0
+ PRODUCTVERSION 0,47,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
@@ -13,11 +13,11 @@ BEGIN
VALUE "Comments", "Published under the GNU GPL"
VALUE "CompanyName", "inkscape.org"
VALUE "FileDescription", "Inkview"
- VALUE "FileVersion", "0.46.0"
+ VALUE "FileVersion", "0.47"
VALUE "InternalName", "Inkview"
- VALUE "LegalCopyright", "© 2007 Inkscape"
+ VALUE "LegalCopyright", "© 2009 Inkscape"
VALUE "ProductName", "Inkview"
- VALUE "ProductVersion", "0.46.0"
+ VALUE "ProductVersion", "0.47"
END
END
BLOCK "VarFileInfo"
diff --git a/src/interface.cpp b/src/interface.cpp
index cf7072064..b29b91d18 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -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");
}
@@ -992,6 +994,9 @@ sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, Inkscape::UI:
gtk_recent_filter_add_application(inkscape_only_filter, g_get_prgname());
gtk_recent_chooser_add_filter(GTK_RECENT_CHOOSER(recent_menu), inkscape_only_filter);
+ gtk_recent_chooser_set_show_tips (GTK_RECENT_CHOOSER(recent_menu), TRUE);
+ gtk_recent_chooser_set_show_not_found (GTK_RECENT_CHOOSER(recent_menu), FALSE);
+
GtkWidget *recent_item = gtk_menu_item_new_with_mnemonic(_("Open _Recent"));
gtk_menu_item_set_submenu(GTK_MENU_ITEM(recent_item), recent_menu);
diff --git a/src/libavoid/CMakeLists.txt b/src/libavoid/CMakeLists.txt
index df532c564..3f408074c 100644
--- a/src/libavoid/CMakeLists.txt
+++ b/src/libavoid/CMakeLists.txt
@@ -11,6 +11,8 @@ static.cpp
timer.cpp
vertices.cpp
visibility.cpp
+orthogonal.cpp
+vpsc.cpp
)
ADD_LIBRARY(avoid STATIC ${libavoid_SRC})
TARGET_LINK_LIBRARIES(avoid
diff --git a/src/libavoid/Makefile_insert b/src/libavoid/Makefile_insert
index f75470e26..77728499c 100644
--- a/src/libavoid/Makefile_insert
+++ b/src/libavoid/Makefile_insert
@@ -11,24 +11,26 @@ libavoid_libavoid_a_SOURCES = \
libavoid/debug.h \
libavoid/geometry.cpp \
libavoid/geometry.h \
+ libavoid/geomtypes.cpp \
libavoid/geomtypes.h \
libavoid/graph.cpp \
libavoid/graph.h \
libavoid/makepath.cpp \
libavoid/makepath.h \
- libavoid/polyutil.cpp \
- libavoid/polyutil.h \
+ libavoid/orthogonal.cpp \
+ libavoid/orthogonal.h \
+ libavoid/vpsc.cpp \
+ libavoid/vpsc.h \
libavoid/router.cpp \
libavoid/router.h \
libavoid/shape.cpp \
libavoid/shape.h \
- libavoid/static.cpp \
- libavoid/static.h \
libavoid/timer.cpp \
libavoid/timer.h \
libavoid/vertices.cpp \
libavoid/vertices.h \
libavoid/visibility.cpp \
libavoid/visibility.h \
- libavoid/libavoid.h \
- libavoid/region.h
+ libavoid/viscluster.cpp \
+ libavoid/viscluster.h \
+ libavoid/libavoid.h
diff --git a/src/libavoid/assertions.h b/src/libavoid/assertions.h
new file mode 100644
index 000000000..0725c4482
--- /dev/null
+++ b/src/libavoid/assertions.h
@@ -0,0 +1,49 @@
+/*
+ * vim: ts=4 sw=4 et tw=0 wm=0
+ *
+ * libavoid - Fast, Incremental, Object-avoiding Line Router
+ *
+ * Copyright (C) 2009 Monash University
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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.
+ *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
+*/
+
+#ifndef AVOID_ASSERTIONS_H
+#define AVOID_ASSERTIONS_H
+
+#ifdef NDEBUG
+
+ #define COLA_ASSERT(expr) static_cast<void>(0)
+
+#else // Not NDEBUG
+
+ #if defined(USE_ASSERT_EXCEPTIONS)
+
+ #include "libvpsc/assertions.h"
+
+ #else
+
+ #include <cassert>
+ #define COLA_ASSERT(expr) assert(expr)
+
+ #endif
+
+#endif
+
+
+#endif // AVOID_ASSERTIONS_H
+
diff --git a/src/libavoid/connector.cpp b/src/libavoid/connector.cpp
index 647303371..3dbd941a4 100644
--- a/src/libavoid/connector.cpp
+++ b/src/libavoid/connector.cpp
@@ -2,95 +2,236 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
+#include <cstring>
+#include <cfloat>
+#include <cmath>
#include <cstdlib>
+
#include "libavoid/graph.h"
#include "libavoid/connector.h"
#include "libavoid/makepath.h"
#include "libavoid/visibility.h"
#include "libavoid/debug.h"
#include "libavoid/router.h"
+#include "libavoid/assertions.h"
namespace Avoid {
+
+ConnEnd::ConnEnd(const Point& point)
+ : _point(point),
+ _directions(ConnDirAll),
+ _shapeRef(NULL)
+{
+}
+
+
+ConnEnd::ConnEnd(const Point& point, const ConnDirFlags visDirs)
+ : _point(point),
+ _directions(visDirs),
+ _shapeRef(NULL)
+{
+}
+
+ConnEnd::ConnEnd(ShapeRef *shapeRef, const double x_pos, const double y_pos,
+ const double insideOffset, const ConnDirFlags visDirs)
+ : _directions(visDirs),
+ _shapeRef(shapeRef),
+ _xPosition(x_pos),
+ _yPosition(y_pos),
+ _insideOffset(insideOffset)
+{
+}
+
+const Point ConnEnd::point(void) const
+{
+ if (_shapeRef)
+ {
+ const Polygon& poly = _shapeRef->polygon();
+
+ double x_min = DBL_MAX;
+ double x_max = -DBL_MAX;
+ double y_min = DBL_MAX;
+ double y_max = -DBL_MAX;
+ for (size_t i = 0; i < poly.size(); ++i)
+ {
+ x_min = std::min(x_min, poly.ps[i].x);
+ x_max = std::max(x_max, poly.ps[i].x);
+ y_min = std::min(y_min, poly.ps[i].y);
+ y_max = std::max(y_max, poly.ps[i].y);
+ }
+
+ Point point;
+
+ // We want to place connection points on the edges of shapes,
+ // or possibly slightly inside them (if _insideOfset is set).
+
+ point.vn = kUnassignedVertexNumber;
+ if (_xPosition == ATTACH_POS_LEFT)
+ {
+ point.x = x_min + _insideOffset;
+ point.vn = 6;
+ }
+ else if (_xPosition == ATTACH_POS_RIGHT)
+ {
+ point.x = x_max - _insideOffset;
+ point.vn = 4;
+ }
+ else
+ {
+ point.x = x_min + (_xPosition * (x_max - x_min));
+ }
+
+ if (_yPosition == ATTACH_POS_TOP)
+ {
+ point.y = y_max - _insideOffset;
+ point.vn = 5;
+ }
+ else if (_yPosition == ATTACH_POS_BOTTOM)
+ {
+ point.y = y_min + _insideOffset;
+ point.vn = 7;
+ }
+ else
+ {
+ point.y = y_min + (_yPosition * (y_max - y_min));
+ point.vn = kUnassignedVertexNumber;
+ }
+
+ return point;
+ }
+ else
+ {
+ return _point;
+ }
+}
+
+
+ConnDirFlags ConnEnd::directions(void) const
+{
+ if (_shapeRef)
+ {
+ ConnDirFlags visDir = _directions;
+ if (_directions == ConnDirNone)
+ {
+ // None is set, use the defaults:
+ if (_xPosition == ATTACH_POS_LEFT)
+ {
+ visDir = ConnDirLeft;
+ }
+ else if (_xPosition == ATTACH_POS_RIGHT)
+ {
+ visDir = ConnDirRight;
+ }
+ if (_yPosition == ATTACH_POS_TOP)
+ {
+ visDir = ConnDirDown;
+ }
+ else if (_yPosition == ATTACH_POS_BOTTOM)
+ {
+ visDir = ConnDirUp;
+ }
+
+ if (visDir == ConnDirNone)
+ {
+ visDir = ConnDirAll;
+ }
+ }
+ return visDir;
+ }
+ else
+ {
+ return _directions;
+ }
+}
+
+
ConnRef::ConnRef(Router *router, const unsigned int id)
- : _router(router)
- , _id(id)
- , _type(ConnType_PolyLine)
- , _srcId(0)
- , _dstId(0)
- , _needs_reroute_flag(true)
- , _false_path(false)
- , _active(false)
- , _route_dist(0)
- , _srcVert(NULL)
- , _dstVert(NULL)
- , _initialised(false)
- , _callback(NULL)
- , _connector(NULL)
- , _hateCrossings(false)
+ : _router(router),
+ _type(router->validConnType()),
+ _srcId(0),
+ _dstId(0),
+ _needs_reroute_flag(true),
+ _false_path(false),
+ _needs_repaint(false),
+ _active(false),
+ _route_dist(0),
+ _srcVert(NULL),
+ _dstVert(NULL),
+ _startVert(NULL),
+ _initialised(false),
+ _callback(NULL),
+ _connector(NULL),
+ _hateCrossings(false)
{
+ _id = router->assignId(id);
+
// TODO: Store endpoints and details.
- _route.pn = 0;
- _route.ps = NULL;
-}
-
-
-ConnRef::ConnRef(Router *router, const unsigned int id,
- const Point& src, const Point& dst)
- : _router(router)
- , _id(id)
- , _type(ConnType_PolyLine)
- , _srcId(0)
- , _dstId(0)
- , _needs_reroute_flag(true)
- , _false_path(false)
- , _active(false)
- , _route_dist(0)
- , _srcVert(NULL)
- , _dstVert(NULL)
- , _initialised(false)
- , _callback(NULL)
- , _connector(NULL)
- , _hateCrossings(false)
-{
- _route.pn = 0;
- _route.ps = NULL;
-
- if (_router->IncludeEndpoints)
- {
- bool isShape = false;
- _srcVert = new VertInf(_router, VertID(id, isShape, 1), src);
- _dstVert = new VertInf(_router, VertID(id, isShape, 2), dst);
- _router->vertices.addVertex(_srcVert);
- _router->vertices.addVertex(_dstVert);
- makeActive();
- _initialised = true;
- }
+ _route.clear();
+}
+
+
+ConnRef::ConnRef(Router *router, const ConnEnd& src, const ConnEnd& dst,
+ const unsigned int id)
+ : _router(router),
+ _type(router->validConnType()),
+ _srcId(0),
+ _dstId(0),
+ _needs_reroute_flag(true),
+ _false_path(false),
+ _needs_repaint(false),
+ _active(false),
+ _route_dist(0),
+ _srcVert(NULL),
+ _dstVert(NULL),
+ _initialised(false),
+ _callback(NULL),
+ _connector(NULL),
+ _hateCrossings(false)
+{
+ _id = router->assignId(id);
+ _route.clear();
+
+ bool isShape = false;
+ _srcVert = new VertInf(_router, VertID(_id, isShape, 1), src.point());
+ _srcVert->visDirections = src.directions();
+ _dstVert = new VertInf(_router, VertID(_id, isShape, 2), dst.point());
+ _dstVert->visDirections = dst.directions();
+ makeActive();
+ _initialised = true;
+
+ setEndpoints(src, dst);
}
ConnRef::~ConnRef()
{
- freeRoute();
+ _router->removeQueuedConnectorActions(this);
+ removeFromGraph();
+
+ freeRoutes();
if (_srcVert)
{
@@ -106,27 +247,38 @@ ConnRef::~ConnRef()
_dstVert = NULL;
}
- if (_active)
- {
- makeInactive();
- }
+ makeInactive();
}
-void ConnRef::setType(unsigned int type)
+ConnType ConnRef::routingType(void) const
{
- _type = type;
+ return _type;
}
-void ConnRef::updateEndPoint(const unsigned int type, const Point& point)
+void ConnRef::setRoutingType(ConnType type)
{
- assert((type == (unsigned int) VertID::src) ||
- (type == (unsigned int) VertID::tar));
-
- // XXX: This was commented out. Is there a case where it isn't true?
- assert(_router->IncludeEndpoints);
+ type = _router->validConnType(type);
+ if (_type != type)
+ {
+ _type = type;
+
+ makePathInvalid();
+
+ _router->modifyConnector(this);
+ }
+}
+
+void ConnRef::common_updateEndPoint(const unsigned int type, const ConnEnd& connEnd)
+{
+ const Point& point = connEnd.point();
+ //db_printf("common_updateEndPoint(%d,(pid=%d,vn=%d,(%f,%f)))\n",
+ // type,point.id,point.vn,point.x,point.y);
+ COLA_ASSERT((type == (unsigned int) VertID::src) ||
+ (type == (unsigned int) VertID::tar));
+
if (!_initialised)
{
makeActive();
@@ -141,28 +293,28 @@ void ConnRef::updateEndPoint(const unsigned int type, const Point& point)
{
if (_srcVert)
{
- _srcVert->Reset(point);
+ _srcVert->Reset(VertID(_id, isShape, type), point);
}
else
{
_srcVert = new VertInf(_router, VertID(_id, isShape, type), point);
- _router->vertices.addVertex(_srcVert);
}
+ _srcVert->visDirections = connEnd.directions();
altered = _srcVert;
partner = _dstVert;
}
- else // if (type == (unsigned int) VertID::dst)
+ else // if (type == (unsigned int) VertID::tar)
{
if (_dstVert)
{
- _dstVert->Reset(point);
+ _dstVert->Reset(VertID(_id, isShape, type), point);
}
else
{
_dstVert = new VertInf(_router, VertID(_id, isShape, type), point);
- _router->vertices.addVertex(_dstVert);
}
+ _dstVert->visDirections = connEnd.directions();
altered = _dstVert;
partner = _srcVert;
@@ -171,8 +323,85 @@ void ConnRef::updateEndPoint(const unsigned int type, const Point& point)
// XXX: Seems to be faster to just remove the edges and recreate
bool isConn = true;
altered->removeFromGraph(isConn);
- bool knownNew = true;
- vertexVisibility(altered, partner, knownNew, true);
+
+ makePathInvalid();
+ _router->setStaticGraphInvalidated(true);
+}
+
+
+void ConnRef::setEndpoints(const ConnEnd& srcPoint, const ConnEnd& dstPoint)
+{
+ _router->modifyConnector(this, VertID::src, srcPoint);
+ _router->modifyConnector(this, VertID::tar, dstPoint);
+}
+
+
+void ConnRef::setEndpoint(const unsigned int type, const ConnEnd& connEnd)
+{
+ _router->modifyConnector(this, type, connEnd);
+}
+
+
+void ConnRef::setSourceEndpoint(const ConnEnd& srcPoint)
+{
+ _router->modifyConnector(this, VertID::src, srcPoint);
+}
+
+
+void ConnRef::setDestEndpoint(const ConnEnd& dstPoint)
+{
+ _router->modifyConnector(this, VertID::tar, dstPoint);
+}
+
+
+void ConnRef::updateEndPoint(const unsigned int type, const ConnEnd& connEnd)
+{
+ common_updateEndPoint(type, connEnd);
+
+ if (_router->_polyLineRouting)
+ {
+ bool knownNew = true;
+ bool genContains = true;
+ if (type == (unsigned int) VertID::src)
+ {
+ vertexVisibility(_srcVert, _dstVert, knownNew, genContains);
+ }
+ else
+ {
+ vertexVisibility(_dstVert, _srcVert, knownNew, genContains);
+ }
+ }
+}
+
+
+bool ConnRef::setEndpoint(const unsigned int type, const VertID& pointID,
+ Point *pointSuggestion)
+{
+ VertInf *vInf = _router->vertices.getVertexByID(pointID);
+ if (vInf == NULL)
+ {
+ return false;
+ }
+ Point& point = vInf->point;
+ if (pointSuggestion)
+ {
+ if (euclideanDist(point, *pointSuggestion) > 0.5)
+ {
+ return false;
+ }
+ }
+
+ common_updateEndPoint(type, point);
+
+ // Give this visibility just to the point it is over.
+ EdgeInf *edge = new EdgeInf(
+ (type == VertID::src) ? _srcVert : _dstVert, vInf);
+ // XXX: We should be able to set this to zero, but can't due to
+ // assumptions elsewhere in the code.
+ edge->setDist(0.001);
+
+ _router->processTransaction();
+ return true;
}
@@ -203,7 +432,7 @@ unsigned int ConnRef::getDstShapeId(void)
void ConnRef::makeActive(void)
{
- assert(!_active);
+ COLA_ASSERT(!_active);
// Add to connRefs list.
_pos = _router->connRefs.insert(_router->connRefs.begin(), this);
@@ -213,7 +442,7 @@ void ConnRef::makeActive(void)
void ConnRef::makeInactive(void)
{
- assert(_active);
+ COLA_ASSERT(_active);
// Remove from connRefs list.
_router->connRefs.erase(_pos);
@@ -221,54 +450,69 @@ void ConnRef::makeInactive(void)
}
-void ConnRef::freeRoute(void)
+void ConnRef::freeRoutes(void)
{
- if (_route.ps)
- {
- _route.pn = 0;
- std::free(_route.ps);
- _route.ps = NULL;
- }
+ _route.clear();
+ _display_route.clear();
}
-PolyLine& ConnRef::route(void)
+const PolyLine& ConnRef::route(void) const
{
return _route;
}
-void ConnRef::calcRouteDist(void)
+PolyLine& ConnRef::routeRef(void)
{
- _route_dist = 0;
- for (int i = 1; i < _route.pn; i++)
+ return _route;
+}
+
+
+void ConnRef::set_route(const PolyLine& route)
+{
+ if (&_display_route == &route)
{
- _route_dist += dist(_route.ps[i], _route.ps[i - 1]);
+ db_printf("Error:\tTrying to update libavoid route with itself.\n");
+ return;
}
+ _display_route.ps = route.ps;
+
+ //_display_route.clear();
}
-bool ConnRef::needsReroute(void)
+Polygon& ConnRef::displayRoute(void)
{
- return (_false_path || _needs_reroute_flag);
+ if (_display_route.empty())
+ {
+ // No displayRoute is set. Simplify the current route to get it.
+ _display_route = _route.simplify();
+ }
+ return _display_route;
}
-void ConnRef::lateSetup(const Point& src, const Point& dst)
+void ConnRef::calcRouteDist(void)
{
- assert(!_initialised);
+ double (*dist)(const Point& a, const Point& b) =
+ (_type == ConnType_PolyLine) ? euclideanDist : manhattanDist;
- bool isShape = false;
- _srcVert = new VertInf(_router, VertID(_id, isShape, 1), src);
- _dstVert = new VertInf(_router, VertID(_id, isShape, 2), dst);
- _router->vertices.addVertex(_srcVert);
- _router->vertices.addVertex(_dstVert);
- makeActive();
- _initialised = true;
+ _route_dist = 0;
+ for (size_t i = 1; i < _route.size(); ++i)
+ {
+ _route_dist += dist(_route.at(i), _route.at(i - 1));
+ }
}
-unsigned int ConnRef::id(void)
+bool ConnRef::needsRepaint(void) const
+{
+ return _needs_repaint;
+}
+
+
+unsigned int ConnRef::id(void) const
{
return _id;
}
@@ -286,6 +530,12 @@ VertInf *ConnRef::dst(void)
}
+VertInf *ConnRef::start(void)
+{
+ return _startVert;
+}
+
+
bool ConnRef::isInitialised(void)
{
return _initialised;
@@ -303,29 +553,8 @@ void ConnRef::unInitialise(void)
void ConnRef::removeFromGraph(void)
{
- for (VertInf *iter = _srcVert; iter != NULL; )
- {
- VertInf *tmp = iter;
- iter = (iter == _srcVert) ? _dstVert : NULL;
-
- // For each vertex.
- EdgeInfList& visList = tmp->visList;
- EdgeInfList::iterator finish = visList.end();
- EdgeInfList::iterator edge;
- while ((edge = visList.begin()) != finish)
- {
- // Remove each visibility edge
- delete (*edge);
- }
-
- EdgeInfList& invisList = tmp->invisList;
- finish = invisList.end();
- while ((edge = invisList.begin()) != finish)
- {
- // Remove each invisibility edge
- delete (*edge);
- }
- }
+ _srcVert->removeFromGraph();
+ _dstVert->removeFromGraph();
}
@@ -336,12 +565,11 @@ void ConnRef::setCallback(void (*cb)(void *), void *ptr)
}
-void ConnRef::handleInvalid(void)
+void ConnRef::performCallback(void)
{
- if (_false_path || _needs_reroute_flag) {
- if (_callback) {
- _callback(_connector);
- }
+ if (_callback)
+ {
+ _callback(_connector);
}
}
@@ -352,79 +580,279 @@ void ConnRef::makePathInvalid(void)
}
-Router *ConnRef::router(void)
+Router *ConnRef::router(void) const
{
return _router;
}
-int 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.
+ if (_type != ConnType_Orthogonal)
+ {
+ if (!_false_path && !_needs_reroute_flag)
+ {
+ // This connector is up to date.
+ return false;
+ }
+ }
+
+ bool result = generatePath();
+
+ return result;
+}
+
+
+// Validates a bend point on a path to check it does not form a zigzag corner.
+// a, b, c are consecutive points on the path. d and e are b's neighbours,
+// forming the shape corner d-b-e.
+//
+bool validateBendPoint(VertInf *aInf, VertInf *bInf, VertInf *cInf)
{
- if (!_false_path && !_needs_reroute_flag) {
+ bool bendOkay = true;
+
+ if ((aInf == NULL) || (cInf == NULL))
+ {
+ // Not a bendpoint, i.e., the end of the connector, so don't test.
+ return bendOkay;
+ }
+
+ COLA_ASSERT(bInf != NULL);
+ VertInf *dInf = bInf->shPrev;
+ VertInf *eInf = bInf->shNext;
+ COLA_ASSERT(dInf != NULL);
+ COLA_ASSERT(eInf != NULL);
+
+ Point& a = aInf->point;
+ Point& b = bInf->point;
+ Point& c = cInf->point;
+ Point& d = dInf->point;
+ Point& e = eInf->point;
+
+ if ((a == b) || (b == c))
+ {
+ return bendOkay;
+ }
+
+#ifdef PATHDEBUG
+ db_printf("a=(%g, %g)\n", a.x, a.y);
+ db_printf("b=(%g, %g)\n", b.x, b.y);
+ db_printf("c=(%g, %g)\n", c.x, c.y);
+ db_printf("d=(%g, %g)\n", d.x, d.y);
+ db_printf("e=(%g, %g)\n", e.x, e.y);
+#endif
+ // Check angle:
+ int abc = vecDir(a, b, c);
+#ifdef PATHDEBUG
+ db_printf("(abc == %d) ", abc);
+#endif
+
+ if (abc == 0)
+ {
+ // The three consecutive point on the path are in a line.
+ // Thus, there should always be an equally short path that
+ // skips this bend point.
+ bendOkay = false;
+ }
+ else // (abc != 0)
+ {
+ COLA_ASSERT(vecDir(d, b, e) > 0);
+ int abe = vecDir(a, b, e);
+ int abd = vecDir(a, b, d);
+ int bce = vecDir(b, c, e);
+ int bcd = vecDir(b, c, d);
+#ifdef PATHDEBUG
+ db_printf("&& (abe == %d) && (abd == %d) &&\n(bce == %d) && (bcd == %d)",
+ abe, abd, bce, bcd);
+#endif
+
+ bendOkay = false;
+ if (abe > 0)
+ {
+ if ((abc > 0) && (abd >= 0) && (bce >= 0))
+ {
+ bendOkay = true;
+ }
+ }
+ else if (abd < 0)
+ {
+ if ((abc < 0) && (abe <= 0) && (bcd <= 0))
+ {
+ bendOkay = true;
+ }
+ }
+ }
+#ifdef PATHDEBUG
+ db_printf("\n");
+#endif
+ return bendOkay;
+}
+
+
+bool ConnRef::generatePath(void)
+{
+ if (!_false_path && !_needs_reroute_flag)
+ {
// This connector is up to date.
- return (int) false;
+ return false;
}
+ if (!_dstVert || !_srcVert)
+ {
+ // Connector is not fully initialised..
+ return false;
+ }
+
+ //COLA_ASSERT(_srcVert->point != _dstVert->point);
+
_false_path = false;
_needs_reroute_flag = false;
- VertInf *src = _srcVert;
VertInf *tar = _dstVert;
+ _startVert = _srcVert;
- if ( !(_router->IncludeEndpoints) )
- {
- lateSetup(p0, p1);
-
- // Update as they have just been set by lateSetup.
- src = _srcVert;
- tar = _dstVert;
+ bool *flag = &(_needs_reroute_flag);
- bool knownNew = true;
- bool genContains = true;
- vertexVisibility(src, tar, knownNew, genContains);
- vertexVisibility(tar, src, knownNew, genContains);
+ size_t existingPathStart = 0;
+ const PolyLine& currRoute = route();
+ if (_router->RubberBandRouting)
+ {
+ COLA_ASSERT(_router->IgnoreRegions == true);
+
+#ifdef PATHDEBUG
+ db_printf("\n");
+ _srcVert->id.db_print();
+ db_printf(": %g, %g\n", _srcVert->point.x, _srcVert->point.y);
+ tar->id.db_print();
+ db_printf(": %g, %g\n", tar->point.x, tar->point.y);
+ for (size_t i = 0; i < currRoute.ps.size(); ++i)
+ {
+ db_printf("%g, %g ", currRoute.ps[i].x, currRoute.ps[i].y);
+ }
+ db_printf("\n");
+#endif
+ if (currRoute.size() > 2)
+ {
+ if (_srcVert->point == currRoute.ps[0])
+ {
+ existingPathStart = currRoute.size() - 2;
+ COLA_ASSERT(existingPathStart != 0);
+ const Point& pnt = currRoute.at(existingPathStart);
+ bool isShape = true;
+ VertID vID(pnt.id, isShape, pnt.vn);
+
+ _startVert = _router->vertices.getVertexByID(vID);
+ }
+ }
+ }
+ //db_printf("GO\n");
+ //db_printf("src: %X strt: %X dst: %x\n", (int) _srcVert, (int) _startVert, (int) _dstVert);
+ bool found = false;
+ while (!found)
+ {
+ makePath(this, flag);
+ for (VertInf *i = tar; i != NULL; i = i->pathNext)
+ {
+ if (i == _srcVert)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ {
+ if (existingPathStart == 0)
+ {
+ break;
+ }
+#ifdef PATHDEBUG
+ db_printf("BACK\n");
+#endif
+ existingPathStart--;
+ const Point& pnt = currRoute.at(existingPathStart);
+ bool isShape = (existingPathStart > 0);
+ VertID vID(pnt.id, isShape, pnt.vn);
+
+ _startVert = _router->vertices.getVertexByID(vID);
+ COLA_ASSERT(_startVert);
+ }
+ else if (_router->RubberBandRouting)
+ {
+ // found.
+ bool unwind = false;
+
+#ifdef PATHDEBUG
+ db_printf("\n\n\nSTART:\n\n");
+#endif
+ VertInf *prior = NULL;
+ for (VertInf *curr = tar; curr != _startVert->pathNext;
+ curr = curr->pathNext)
+ {
+ if (!validateBendPoint(curr->pathNext, curr, prior))
+ {
+ unwind = true;
+ break;
+ }
+ prior = curr;
+ }
+ if (unwind)
+ {
+#ifdef PATHDEBUG
+ db_printf("BACK II\n");
+#endif
+ if (existingPathStart == 0)
+ {
+ break;
+ }
+ existingPathStart--;
+ const Point& pnt = currRoute.at(existingPathStart);
+ bool isShape = (existingPathStart > 0);
+ VertID vID(pnt.id, isShape, pnt.vn);
+
+ _startVert = _router->vertices.getVertexByID(vID);
+ COLA_ASSERT(_startVert);
+
+ found = false;
+ }
+ }
}
- bool *flag = &(_needs_reroute_flag);
-
- makePath(this, flag);
bool result = true;
int pathlen = 1;
- for (VertInf *i = tar; i != src; i = i->pathNext)
+ for (VertInf *i = tar; i != _srcVert; i = i->pathNext)
{
pathlen++;
if (i == NULL)
{
db_printf("Warning: Path not found...\n");
pathlen = 2;
- tar->pathNext = src;
- if (_router->InvisibilityGrph)
+ tar->pathNext = _srcVert;
+ if ((_type == ConnType_PolyLine) && _router->InvisibilityGrph)
{
// TODO: Could we know this edge already?
- EdgeInf *edge = EdgeInf::existingEdge(src, tar);
- assert(edge != NULL);
+ EdgeInf *edge = EdgeInf::existingEdge(_srcVert, tar);
+ COLA_ASSERT(edge != NULL);
edge->addCycleBlocker();
}
- result = false;
break;
}
- if (pathlen > 100)
- {
- fprintf(stderr, "ERROR: Should never be here...\n");
- exit(1);
- }
+ // Check we don't have an apparent infinite connector path.
+ COLA_ASSERT(pathlen < 200);
}
- Point *path = (Point *) malloc(pathlen * sizeof(Point));
+ std::vector<Point> path(pathlen);
int j = pathlen - 1;
- for (VertInf *i = tar; i != src; i = i->pathNext)
+ for (VertInf *i = tar; i != _srcVert; i = i->pathNext)
{
- if (_router->InvisibilityGrph)
+ if (_router->InvisibilityGrph && (_type == ConnType_PolyLine))
{
// TODO: Again, we could know this edge without searching.
EdgeInf *edge = EdgeInf::existingEdge(i, i->pathNext);
+ COLA_ASSERT(edge != NULL);
edge->addConn(flag);
}
else
@@ -432,25 +860,53 @@ int ConnRef::generatePath(Point p0, Point p1)
_false_path = true;
}
path[j] = i->point;
- path[j].id = i->id.objID;
+ if (i->id.isShape)
+ {
+ path[j].id = i->id.objID;
+ path[j].vn = i->id.vn;
+ }
+ else
+ {
+ path[j].id = _id;
+ path[j].vn = kUnassignedVertexNumber;
+ }
j--;
- }
- path[0] = src->point;
+ if (i->pathNext && (i->pathNext->point == i->point))
+ {
+ if (i->pathNext->id.isShape && i->id.isShape)
+ {
+ // Check for consecutive points on opposite
+ // corners of two touching shapes.
+ COLA_ASSERT(abs(i->pathNext->id.objID - i->id.objID) != 2);
+ }
+ }
+ }
+ path[0] = _srcVert->point;
+ // Use topbit to differentiate between start and end point of connector.
+ // They need unique IDs for nudging.
+ unsigned int topbit = ((unsigned int) 1) << 31;
+ path[0].id = _id | topbit;
+ path[0].vn = kUnassignedVertexNumber;
// Would clear visibility for endpoints here if required.
- PolyLine& output_route = route();
- output_route.pn = pathlen;
+ freeRoutes();
+ PolyLine& output_route = _route;
output_route.ps = path;
- if ( !(_router->IncludeEndpoints) )
+#ifdef PATHDEBUG
+ db_printf("Output route:\n");
+ for (size_t i = 0; i < output_route.ps.size(); ++i)
{
- assert(_initialised);
- unInitialise();
+ db_printf("[%d,%d] %g, %g ", output_route.ps[i].id,
+ output_route.ps[i].vn, output_route.ps[i].x,
+ output_route.ps[i].y);
}
-
- return (int) result;
+ db_printf("\n\n");
+#endif
+
+ return result;
}
@@ -466,6 +922,895 @@ bool ConnRef::doesHateCrossings(void)
}
+PtOrder::~PtOrder()
+{
+ // Free the PointRep lists.
+ for (int dim = 0; dim < 2; ++dim)
+ {
+ PointRepList::iterator curr = connList[dim].begin();
+ while (curr != connList[dim].end())
+ {
+ PointRep *doomed = *curr;
+ curr = connList[dim].erase(curr);
+ delete doomed;
+ }
+ }
+}
+
+bool PointRep::follow_inner(PointRep *target)
+{
+ if (this == target)
+ {
+ return true;
+ }
+ else
+ {
+ for (PointRepSet::iterator curr = inner_set.begin();
+ curr != inner_set.end(); ++curr)
+ {
+ if ((*curr)->follow_inner(target))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+
+int PtOrder::positionFor(const ConnRef *conn, const size_t dim) const
+{
+ int position = 0;
+ for (PointRepList::const_iterator curr = connList[dim].begin();
+ curr != connList[dim].end(); ++curr)
+ {
+ if ((*curr)->conn == conn)
+ {
+ return position;
+ }
+ ++position;
+ }
+ // Not found.
+ return -1;
+}
+
+
+bool PtOrder::addPoints(const int dim, PtConnPtrPair innerArg,
+ PtConnPtrPair outerArg, bool swapped)
+{
+ PtConnPtrPair inner = (swapped) ? outerArg : innerArg;
+ PtConnPtrPair outer = (swapped) ? innerArg : outerArg;
+ COLA_ASSERT(inner != outer);
+
+ //printf("addPoints(%d, [%g, %g]-%X, [%g, %g]-%X)\n", dim,
+ // inner->x, inner->y, (int) inner, outer->x, outer->y, (int) outer);
+
+ PointRep *innerPtr = NULL;
+ PointRep *outerPtr = NULL;
+ for (PointRepList::iterator curr = connList[dim].begin();
+ curr != connList[dim].end(); ++curr)
+ {
+ if ((*curr)->point == inner.first)
+ {
+ innerPtr = *curr;
+ }
+ if ((*curr)->point == outer.first)
+ {
+ outerPtr = *curr;
+ }
+ }
+
+ if (innerPtr == NULL)
+ {
+ innerPtr = new PointRep(inner.first, inner.second);
+ connList[dim].push_back(innerPtr);
+ }
+
+ if (outerPtr == NULL)
+ {
+ outerPtr = new PointRep(outer.first, outer.second);
+ connList[dim].push_back(outerPtr);
+ }
+ // TODO COLA_ASSERT(innerPtr->inner_set.find(outerPtr) == innerPtr->inner_set.end());
+ bool cycle = innerPtr->follow_inner(outerPtr);
+ if (cycle)
+ {
+ // Must reverse to avoid a cycle.
+ innerPtr->inner_set.insert(outerPtr);
+ }
+ else
+ {
+ outerPtr->inner_set.insert(innerPtr);
+ }
+ return cycle;
+}
+
+
+// Assuming that addPoints has been called for each pair of points in the
+// shared path at that corner, then the contents of inner_set can be used
+// to determine the correct ordering.
+static bool pointRepLessThan(PointRep *r1, PointRep *r2)
+{
+ size_t r1less = r1->inner_set.size();
+ size_t r2less = r2->inner_set.size();
+ //COLA_ASSERT(r1less != r2less);
+
+ return (r1less > r2less);
+}
+
+
+void PtOrder::sort(const int dim)
+{
+ connList[dim].sort(pointRepLessThan);
+}
+
+
+// Returns a vertex number representing a point on the line between
+// two shape corners, represented by p0 and p1.
+//
+static int midVertexNumber(const Point& p0, const Point& p1, const Point& c)
+{
+ if (c.vn != kUnassignedVertexNumber)
+ {
+ // The split point is a shape corner, so doesn't need its
+ // vertex number adjusting.
+ return c.vn;
+ }
+ if ((p0.vn >= 4) && (p0.vn < kUnassignedVertexNumber))
+ {
+ // The point next to this has the correct nudging direction,
+ // so use that.
+ return p0.vn;
+ }
+ if ((p1.vn >= 4) && (p1.vn < kUnassignedVertexNumber))
+ {
+ // The point next to this has the correct nudging direction,
+ // so use that.
+ return p1.vn;
+ }
+ if ((p0.vn < 4) && (p1.vn < 4))
+ {
+ if (p0.vn != p1.vn)
+ {
+ return p0.vn;
+ }
+ // Splitting between two ordinary shape corners.
+ int vn_mid = std::min(p0.vn, p1.vn);
+ if ((std::max(p0.vn, p1.vn) == 3) && (vn_mid == 0))
+ {
+ vn_mid = 3; // Next vn is effectively 4.
+ }
+ return vn_mid + 4;
+ }
+ COLA_ASSERT((p0.x == p1.x) || (p0.y == p1.y));
+ if (p0.vn != kUnassignedVertexNumber)
+ {
+ if (p0.x == p1.x)
+ {
+ if ((p0.vn == 2) || (p0.vn == 3))
+ {
+ return 6;
+ }
+ return 4;
+ }
+ else
+ {
+ if ((p0.vn == 0) || (p0.vn == 3))
+ {
+ return 7;
+ }
+ return 5;
+ }
+ }
+ else if (p1.vn != kUnassignedVertexNumber)
+ {
+ if (p0.x == p1.x)
+ {
+ if ((p1.vn == 2) || (p1.vn == 3))
+ {
+ return 6;
+ }
+ return 4;
+ }
+ else
+ {
+ if ((p1.vn == 0) || (p1.vn == 3))
+ {
+ return 7;
+ }
+ return 5;
+ }
+ }
+
+ // Shouldn't both be new (kUnassignedVertexNumber) points.
+ db_printf("midVertexNumber(): p0.vn and p1.vn both = "
+ "kUnassignedVertexNumber\n");
+ db_printf("p0.vn %d p1.vn %d\n", p0.vn, p1.vn);
+ return kUnassignedVertexNumber;
+}
+
+
+// Break up overlapping parallel segments that are not the same edge in
+// the visibility graph, i.e., where one segment is a subsegment of another.
+void splitBranchingSegments(Avoid::Polygon& poly, bool polyIsConn,
+ Avoid::Polygon& conn, const double tolerance)
+{
+ for (std::vector<Avoid::Point>::iterator i = conn.ps.begin();
+ i != conn.ps.end(); ++i)
+ {
+ if (i == conn.ps.begin())
+ {
+ // Skip the first point.
+ // There are points-1 segments in a connector.
+ continue;
+ }
+
+ for (std::vector<Avoid::Point>::iterator j = poly.ps.begin();
+ j != poly.ps.end(); )
+ {
+ if (polyIsConn && (j == poly.ps.begin()))
+ {
+ // Skip the first point.
+ // There are points-1 segments in a connector.
+ ++j;
+ continue;
+ }
+ Point& c0 = *(i - 1);
+ Point& c1 = *i;
+
+ Point& p0 = (j == poly.ps.begin()) ? poly.ps.back() : *(j - 1);
+ Point& p1 = *j;
+
+ // Check the first point of the first segment.
+ if (((i - 1) == conn.ps.begin()) &&
+ pointOnLine(p0, p1, c0, tolerance))
+ {
+ //db_printf("add to poly %g %g\n", c0.x, c0.y);
+
+ c0.vn = midVertexNumber(p0, p1, c0);
+ j = poly.ps.insert(j, c0);
+ if (j != poly.ps.begin())
+ {
+ --j;
+ }
+ continue;
+ }
+ // And the second point of every segment.
+ if (pointOnLine(p0, p1, c1, tolerance))
+ {
+ //db_printf("add to poly %g %g\n", c1.x, c1.y);
+
+ c1.vn = midVertexNumber(p0, p1, c1);
+ j = poly.ps.insert(j, c1);
+ if (j != poly.ps.begin())
+ {
+ --j;
+ }
+ continue;
+ }
+
+ // Check the first point of the first segment.
+ if (polyIsConn && ((j - 1) == poly.ps.begin()) &&
+ pointOnLine(c0, c1, p0, tolerance))
+ {
+ //db_printf("add to conn %g %g\n", p0.x, p0.y);
+
+ p0.vn = midVertexNumber(c0, c1, p0);
+ i = conn.ps.insert(i, p0);
+ continue;
+ }
+ // And the second point of every segment.
+ if (pointOnLine(c0, c1, p1, tolerance))
+ {
+ //db_printf("add to conn %g %g\n", p1.x, p1.y);
+
+ p1.vn = midVertexNumber(c0, c1, p1);
+ i = conn.ps.insert(i, p1);
+ }
+ ++j;
+ }
+ }
+}
+
+
+static int segDir(const Point& p1, const Point& p2)
+{
+ int result = 1;
+ if (p1.x == p2.x)
+ {
+ if (p2.y > p1.y)
+ {
+ result = -1;
+ }
+ }
+ else if (p1.y == p2.y)
+ {
+ if (p2.x < p1.x)
+ {
+ result = -1;
+ }
+ }
+ return result;
+}
+
+
+// Works out if the segment conn[cIndex-1]--conn[cIndex] really crosses poly.
+// This does not not count non-crossing shared paths as crossings.
+// poly can be either a connector (polyIsConn = true) or a cluster
+// boundary (polyIsConn = false).
+//
+CrossingsInfoPair countRealCrossings(Avoid::Polygon& poly,
+ bool polyIsConn, Avoid::Polygon& conn, size_t cIndex,
+ bool checkForBranchingSegments, const bool finalSegment,
+ PointSet *crossingPoints, PtOrderMap *pointOrders,
+ ConnRef *polyConnRef, ConnRef *connConnRef)
+{
+ unsigned int crossingFlags = CROSSING_NONE;
+ if (checkForBranchingSegments)
+ {
+ size_t conn_pn = conn.size();
+ // XXX When doing the pointOnLine test we allow the points to be
+ // slightly non-collinear. This addresses a problem with clustered
+ // routing where connectors could otherwise route cheaply through
+ // shape corners that were not quite on the cluster boundary, but
+ // reported to be on there by the line segment intersection code,
+ // which I suspect is not numerically accurate enough. This occured
+ // for points that only differed by about 10^-12 in the y-dimension.
+ double tolerance = (!polyIsConn) ? 0.00001 : 0.0;
+ splitBranchingSegments(poly, polyIsConn, conn, tolerance);
+ // cIndex is going to be the last, so take into account added points.
+ cIndex += (conn.size() - conn_pn);
+ }
+ COLA_ASSERT(cIndex >= 1);
+ COLA_ASSERT(cIndex < conn.size());
+
+ bool polyIsOrthogonal = (polyConnRef &&
+ (polyConnRef->routingType() == ConnType_Orthogonal));
+ bool connIsOrthogonal = (connConnRef &&
+ (connConnRef->routingType() == ConnType_Orthogonal));
+
+ size_t poly_size = poly.size();
+ int crossingCount = 0;
+ std::vector<Avoid::Point *> c_path;
+ std::vector<Avoid::Point *> p_path;
+
+ Avoid::Point& a1 = conn.ps[cIndex - 1];
+ Avoid::Point& a2 = conn.ps[cIndex];
+ //db_printf("a1: %g %g\n", a1.x, a1.y);
+ //db_printf("a2: %g %g\n", a2.x, a2.y);
+
+ for (size_t j = ((polyIsConn) ? 1 : 0); j < poly_size; ++j)
+ {
+ Avoid::Point& b1 = poly.ps[(j - 1 + poly_size) % poly_size];
+ Avoid::Point& b2 = poly.ps[j];
+ //db_printf("b1: %g %g\n", b1.x, b1.y);
+ //db_printf("b2: %g %g\n", b2.x, b2.y);
+
+ p_path.clear();
+ c_path.clear();
+ bool converging = false;
+
+ const bool a1_eq_b1 = (a1 == b1);
+ const bool a2_eq_b1 = (a2 == b1);
+ const bool a2_eq_b2 = (a2 == b2);
+ const bool a1_eq_b2 = (a1 == b2);
+
+ if ( (a1_eq_b1 && a2_eq_b2) ||
+ (a2_eq_b1 && a1_eq_b2) )
+ {
+ if (finalSegment)
+ {
+ converging = true;
+ }
+ else
+ {
+ // Route along same segment: no penalty. We detect
+ // crossovers when we see the segments diverge.
+ continue;
+ }
+ }
+ else if (a2_eq_b1 || a2_eq_b2 || a1_eq_b2)
+ {
+ // Each crossing that is at a vertex in the
+ // visibility graph gets noticed four times.
+ // We ignore three of these cases.
+ // This also catches the case of a shared path,
+ // but this is one that terminates at a common
+ // endpoint, so we don't care about it.
+ continue;
+ }
+
+ if (a1_eq_b1 || converging)
+ {
+ if (!converging)
+ {
+ if (polyIsConn && (j == 1))
+ {
+ // Can't be the end of a shared path or crossing path
+ // since the common point is the first point of the
+ // connector path. This is not a shared path at all.
+ continue;
+ }
+
+ Avoid::Point& b0 = poly.ps[(j - 2 + poly_size) % poly_size];
+ // The segments share an endpoint -- a1==b1.
+ if (a2 == b0)
+ {
+ // a2 is not a split, continue.
+ continue;
+ }
+ }
+
+ // If here and not converging, then we know that a2 != b2
+ // And a2 and its pair in b are a split.
+ COLA_ASSERT(converging || !a2_eq_b2);
+
+ bool shared_path = false;
+
+ // Initial values here don't matter. They are only used after
+ // being set to sensible values, but we set them to stop a MSVC
+ // warning.
+ bool p_dir_back;
+ int p_dir = 0;
+ int trace_c = 0;
+ int trace_p = 0;
+
+ if (converging)
+ {
+ // Determine direction we have to look through
+ // the points of connector b.
+ p_dir_back = a2_eq_b2 ? true : false;
+ p_dir = p_dir_back ? -1 : 1;
+ trace_c = (int) cIndex;
+ trace_p = (int) j;
+ if (!p_dir_back)
+ {
+ if (finalSegment)
+ {
+ trace_p--;
+ }
+ else
+ {
+ trace_c--;
+ }
+ }
+
+ shared_path = true;
+ }
+ else if (cIndex >= 2)
+ {
+ Avoid::Point& b0 = poly.ps[(j - 2 + poly_size) % poly_size];
+ Avoid::Point& a0 = conn.ps[cIndex - 2];
+
+ //db_printf("a0: %g %g\n", a0.x, a0.y);
+ //db_printf("b0: %g %g\n", b0.x, b0.y);
+
+ if ((a0 == b2) || (a0 == b0))
+ {
+ // Determine direction we have to look through
+ // the points of connector b.
+ p_dir_back = (a0 == b0) ? true : false;
+ p_dir = p_dir_back ? -1 : 1;
+ trace_c = (int) cIndex;
+ trace_p = (int) (p_dir_back ? j : j - 2);
+
+ shared_path = true;
+ }
+ }
+
+ if (shared_path)
+ {
+ crossingFlags |= CROSSING_SHARES_PATH;
+ // Shouldn't be here if p_dir is still equal to zero.
+ COLA_ASSERT(p_dir != 0);
+
+ // Build the shared path, including the diverging points at
+ // each end if the connector does not end at a common point.
+ while ( (trace_c >= 0) && (!polyIsConn ||
+ ((trace_p >= 0) && (trace_p < (int) poly_size))) )
+ {
+ // If poly is a cluster boundary, then it is a closed
+ // poly-line and so it wraps arounds.
+ size_t index_p = (size_t)
+ ((trace_p + (2 * poly_size)) % poly_size);
+ size_t index_c = (size_t) trace_c;
+ c_path.push_back(&conn.ps[index_c]);
+ p_path.push_back(&poly.ps[index_p]);
+ if ((c_path.size() > 1) &&
+ (conn.ps[index_c] != poly.ps[index_p]))
+ {
+ // Points don't match, so break out of loop.
+ break;
+ }
+ trace_c--;
+ trace_p += p_dir;
+ }
+
+ // Are there diverging points at the ends of the shared path.
+ bool front_same = (*(c_path.front()) == *(p_path.front()));
+ bool back_same = (*(c_path.back()) == *(p_path.back()));
+
+ size_t size = c_path.size();
+
+ // Check to see if these share a fixed segment.
+ if (polyIsOrthogonal && connIsOrthogonal)
+ {
+ size_t startPt = (front_same) ? 0 : 1;
+ if (c_path[startPt]->x == c_path[startPt + 1]->x)
+ {
+ // Vertical
+ double xPos = c_path[startPt]->x;
+ // See if this is inline with either the start
+ // or end point of both connectors.
+ if ( ((xPos == poly.ps[0].x) ||
+ (xPos == poly.ps[poly_size - 1].x)) &&
+ ((xPos == conn.ps[0].x) ||
+ (xPos == conn.ps[cIndex].x)) )
+ {
+ crossingFlags |= CROSSING_SHARES_FIXED_SEGMENT;
+ }
+ }
+ else
+ {
+ // Horizontal
+ double yPos = c_path[startPt]->y;
+ // See if this is inline with either the start
+ // or end point of both connectors.
+ if ( ((yPos == poly.ps[0].y) ||
+ (yPos == poly.ps[poly_size - 1].y)) &&
+ ((yPos == conn.ps[0].y) ||
+ (yPos == conn.ps[cIndex].y)) )
+ {
+ crossingFlags |= CROSSING_SHARES_FIXED_SEGMENT;
+ }
+ }
+ }
+
+ int prevTurnDir = -1;
+ int startCornerSide = 1;
+ int endCornerSide = 1;
+ bool reversed = false;
+ if (!front_same)
+ {
+ // If there is a divergence at the beginning,
+ // then order the shared path based on this.
+ prevTurnDir = vecDir(*c_path[0], *c_path[1], *c_path[2]);
+ startCornerSide = Avoid::cornerSide(*c_path[0], *c_path[1],
+ *c_path[2], *p_path[0])
+ * segDir(*c_path[1], *c_path[2]);
+ reversed = (startCornerSide != -prevTurnDir);
+ }
+ if (!back_same)
+ {
+ // If there is a divergence at the end of the path,
+ // then order the shared path based on this.
+ prevTurnDir = vecDir(*c_path[size - 3],
+ *c_path[size - 2], *c_path[size - 1]);
+ endCornerSide = Avoid::cornerSide(*c_path[size - 3],
+ *c_path[size - 2], *c_path[size - 1],
+ *p_path[size - 1])
+ * segDir(*c_path[size - 3], *c_path[size - 2]);
+ reversed = (endCornerSide != -prevTurnDir);
+ }
+ else
+ {
+ endCornerSide = startCornerSide;
+ }
+ if (front_same)
+ {
+ startCornerSide = endCornerSide;
+ }
+
+ if (front_same || back_same)
+ {
+ crossingFlags |= CROSSING_SHARES_PATH_AT_END;
+ }
+ else if (polyIsOrthogonal && connIsOrthogonal)
+ {
+ int cStartDir = vecDir(*c_path[0], *c_path[1], *c_path[2]);
+ int pStartDir = vecDir(*p_path[0], *p_path[1], *p_path[2]);
+ if ((cStartDir != 0) && (cStartDir == -pStartDir))
+ {
+ // The start segments diverge at 180 degrees to each
+ // other. So order based on not introducing overlap
+ // of the diverging segments when these are nudged
+ // apart.
+ startCornerSide = -cStartDir *
+ segDir(*c_path[1], *c_path[2]);
+ }
+ else
+ {
+ int cEndDir = vecDir(*c_path[size - 3],
+ *c_path[size - 2], *c_path[size - 1]);
+ int pEndDir = vecDir(*p_path[size - 3],
+ *p_path[size - 2], *p_path[size - 1]);
+ if ((cEndDir != 0) && (cEndDir == -pEndDir))
+ {
+ // The end segments diverge at 180 degrees to
+ // each other. So order based on not introducing
+ // overlap of the diverging segments when these
+ // are nudged apart.
+ startCornerSide = -cEndDir * segDir(
+ *c_path[size - 3], *c_path[size - 2]);
+ }
+ }
+ }
+
+#if 0
+ prevTurnDir = 0;
+ if (pointOrders)
+ {
+ // Return the ordering for the shared path.
+ COLA_ASSERT(c_path.size() > 0 || back_same);
+ size_t adj_size = (c_path.size() - ((back_same) ? 0 : 1));
+ for (size_t i = (front_same) ? 0 : 1; i < adj_size; ++i)
+ {
+ Avoid::Point& an = *(c_path[i]);
+ Avoid::Point& bn = *(p_path[i]);
+ int currTurnDir = ((i > 0) && (i < (adj_size - 1))) ?
+ vecDir(*c_path[i - 1], an,
+ *c_path[i + 1]) : 0;
+ VertID vID(an.id, true, an.vn);
+ if ( (currTurnDir == (-1 * prevTurnDir)) &&
+ (currTurnDir != 0) && (prevTurnDir != 0) )
+ {
+ // The connector turns the opposite way around
+ // this shape as the previous bend on the path,
+ // so reverse the order so that the inner path
+ // become the outer path and vice versa.
+ reversed = !reversed;
+ }
+ bool orderSwapped = (*pointOrders)[an].addPoints(
+ &bn, &an, reversed);
+ if (orderSwapped)
+ {
+ // Reverse the order for later points.
+ reversed = !reversed;
+ }
+ prevTurnDir = currTurnDir;
+ }
+ }
+#endif
+ prevTurnDir = 0;
+ if (pointOrders)
+ {
+ reversed = false;
+ size_t startPt = (front_same) ? 0 : 1;
+
+ // Orthogonal should always have at least one segment.
+ COLA_ASSERT(c_path.size() > (startPt + 1));
+
+ if (startCornerSide > 0)
+ {
+ reversed = !reversed;
+ }
+
+ int prevDir = 0;
+ // Return the ordering for the shared path.
+ COLA_ASSERT(c_path.size() > 0 || back_same);
+ size_t adj_size = (c_path.size() - ((back_same) ? 0 : 1));
+ for (size_t i = (front_same) ? 0 : 1; i < adj_size; ++i)
+ {
+ Avoid::Point& an = *(c_path[i]);
+ Avoid::Point& bn = *(p_path[i]);
+ COLA_ASSERT(an == bn);
+
+ int thisDir = prevDir;
+ if ((i > 0) && (*(c_path[i - 1]) == *(p_path[i - 1])))
+ {
+ thisDir = segDir(*c_path[i - 1], *c_path[i]);
+ }
+
+ if (thisDir != prevDir)
+ {
+ reversed = !reversed;
+ }
+ prevDir = thisDir;
+
+ if (i > startPt)
+ {
+ Avoid::Point& ap = *(c_path[i - 1]);
+ Avoid::Point& bp = *(p_path[i - 1]);
+ int orientation = (ap.x == an.x) ? 0 : 1;
+ //printf("prevOri %d\n", prevOrientation);
+ //printf("1: %X, %X\n", (int) &(bn), (int) &(an));
+ bool orderSwapped = (*pointOrders)[an].addPoints(
+ orientation,
+ std::make_pair(&bn, polyConnRef),
+ std::make_pair(&an, connConnRef),
+ reversed);
+ if (orderSwapped)
+ {
+ // Reverse the order for later points.
+ reversed = !reversed;
+ }
+ COLA_ASSERT(ap == bp);
+ //printf("2: %X, %X\n", (int) &bp, (int) &ap);
+ orderSwapped = (*pointOrders)[ap].addPoints(
+ orientation,
+ std::make_pair(&bp, polyConnRef),
+ std::make_pair(&ap, connConnRef),
+ reversed);
+ COLA_ASSERT(!orderSwapped);
+ }
+ }
+ }
+#if 0
+ int ymod = -1;
+ if ((id.vn == 1) || (id.vn == 2))
+ {
+ // bottom.
+ ymod = +1;
+ }
+
+ int xmod = -1;
+ if ((id.vn == 0) || (id.vn == 1))
+ {
+ // right.
+ xmod = +1;
+ }
+ if(id.vn > 3)
+ {
+ xmod = ymod = 0;
+ if (id.vn == 4)
+ {
+ // right.
+ xmod = +1;
+ }
+ else if (id.vn == 5)
+ {
+ // bottom.
+ ymod = +1;
+ }
+ else if (id.vn == 6)
+ {
+ // left.
+ xmod = -1;
+ }
+ else if (id.vn == 7)
+ {
+ // top.
+ ymod = -1;
+ }
+ }
+#endif
+
+ if (endCornerSide != startCornerSide)
+ {
+ // Mark that the shared path crosses.
+ //db_printf("shared path crosses.\n");
+ crossingCount += 1;
+ if (crossingPoints)
+ {
+ crossingPoints->insert(*c_path[1]);
+ }
+ }
+ crossingFlags |= CROSSING_TOUCHES;
+ }
+ else if (cIndex >= 2)
+ {
+ // The connectors cross or touch at this point.
+ //db_printf("Cross or touch at point... \n");
+
+ // Crossing shouldn't be at an endpoint.
+ COLA_ASSERT(cIndex >= 2);
+ COLA_ASSERT(polyIsConn && (j >= 2));
+
+ Avoid::Point& b0 = poly.ps[(j - 2 + poly_size) % poly_size];
+ Avoid::Point& a0 = conn.ps[cIndex - 2];
+
+ int side1 = Avoid::cornerSide(a0, a1, a2, b0);
+ int side2 = Avoid::cornerSide(a0, a1, a2, b2);
+ if (side1 != side2)
+ {
+ // The connectors cross at this point.
+ //db_printf("cross.\n");
+ crossingCount += 1;
+ if (crossingPoints)
+ {
+ crossingPoints->insert(a1);
+ }
+ }
+
+ crossingFlags |= CROSSING_TOUCHES;
+ if (pointOrders)
+ {
+ if (polyIsOrthogonal && connIsOrthogonal)
+ {
+ // Orthogonal case:
+ // Just order based on which comes from the left and
+ // top in each dimension because this can only be two
+ // L-shaped segments touching at the bend.
+ bool reversedX = ((a0.x < a1.x) || (a2.x < a1.x));
+ bool reversedY = ((a0.y < a1.y) || (a2.y < a1.y));
+ // XXX: Why do we need to invert the reversed values
+ // here? Are they wrong for orthogonal points
+ // in the other places?
+ (*pointOrders)[b1].addPoints(0,
+ std::make_pair(&b1, polyConnRef),
+ std::make_pair(&a1, connConnRef),
+ !reversedX);
+ (*pointOrders)[b1].addPoints(1,
+ std::make_pair(&b1, polyConnRef),
+ std::make_pair(&a1, connConnRef),
+ !reversedY);
+ }
+ else
+ {
+ int turnDirA = vecDir(a0, a1, a2);
+ int turnDirB = vecDir(b0, b1, b2);
+ bool reversed = (side1 != -turnDirA);
+ if (side1 != side2)
+ {
+ // Interesting case where a connector routes round
+ // the edge of a shape and intersects a connector
+ // which is connected to a port on the edge of the
+ // shape.
+ if (turnDirA == 0)
+ {
+ // We'll make B the outer by preference,
+ // because the points of A are collinear.
+ reversed = false;
+ }
+ else if (turnDirB == 0)
+ {
+ reversed = true;
+ }
+ // TODO COLA_ASSERT((turnDirB != 0) ||
+ // (turnDirA != 0));
+ }
+ VertID vID(b1.id, true, b1.vn);
+ //(*pointOrders)[b1].addPoints(&b1, &a1, reversed);
+ }
+ }
+ }
+ }
+ else
+ {
+ if ( polyIsOrthogonal && connIsOrthogonal)
+ {
+ // All crossings in orthogonal connectors will be at a
+ // vertex in the visibility graph, so we need not bother
+ // doing normal line intersection.
+ continue;
+ }
+
+ // No endpoint is shared between these two line segments,
+ // so just calculate normal segment intersection.
+
+ Point cPt;
+ int intersectResult = Avoid::segmentIntersectPoint(
+ a1, a2, b1, b2, &(cPt.x), &(cPt.y));
+
+ if (intersectResult == Avoid::DO_INTERSECT)
+ {
+ if (!polyIsConn &&
+ ((a1 == cPt) || (a2 == cPt) || (b1 == cPt) || (b2 == cPt)))
+ {
+ // XXX: This shouldn't actually happen, because these
+ // points should be added as bends to each line by
+ // splitBranchingSegments(). Thus, lets ignore them.
+ COLA_ASSERT(a1 != cPt);
+ COLA_ASSERT(a2 != cPt);
+ COLA_ASSERT(b1 != cPt);
+ COLA_ASSERT(b2 != cPt);
+ continue;
+ }
+ //db_printf("crossing lines:\n");
+ //db_printf("cPt: %g %g\n", cPt.x, cPt.y);
+ crossingCount += 1;
+ if (crossingPoints)
+ {
+ crossingPoints->insert(cPt);
+ }
+ }
+ }
+ }
+ //db_printf("crossingcount %d\n", crossingCount);
+ return std::make_pair(crossingCount, crossingFlags);
+}
+
+
//============================================================================
}
diff --git a/src/libavoid/connector.h b/src/libavoid/connector.h
index 64afb4dda..8f7499a29 100644
--- a/src/libavoid/connector.h
+++ b/src/libavoid/connector.h
@@ -2,93 +2,336 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+//! @file shape.h
+//! @brief Contains the interface for the ConnRef class.
+
+
#ifndef AVOID_CONNECTOR_H
#define AVOID_CONNECTOR_H
-#include "libavoid/router.h"
+#include <list>
+#include <vector>
+
+#include "libavoid/vertices.h"
#include "libavoid/geometry.h"
#include "libavoid/shape.h"
-#include <list>
namespace Avoid {
+class Router;
+class ConnRef;
+typedef std::list<ConnRef *> ConnRefList;
+
+
+//! @brief Describes the type of routing that is performed for each
+//! connector.
+enum ConnType {
+ ConnType_None = 0,
+ //! @brief The connector path will be a shortest-path poly-line that
+ //! routes around obstacles.
+ ConnType_PolyLine = 1,
+ //! @brief The connector path will be a shortest-path orthogonal
+ //! poly-line (only vertical and horizontal line segments) that
+ //! routes around obstacles.
+ ConnType_Orthogonal = 2
+};
+
+//! @brief Flags that can be passed to the ConnEnd constructor to specify
+//! which sides of a shape this point should have visibility to if
+//! it is located within the shape's area.
+//!
+//! Like SVG, libavoid considers the Y-axis to point downwards, that is,
+//! like screen coordinates the coordinates increase from left-to-right and
+//! also from top-to-bottom.
+//!
+enum ConnDirFlag {
+ ConnDirNone = 0,
+ //! @brief This option specifies the point should be given visibility
+ //! to the top of the shape that it is located within.
+ ConnDirUp = 1,
+ //! @brief This option specifies the point should be given visibility
+ //! to the bottom of the shape that it is located within.
+ ConnDirDown = 2,
+ //! @brief This option specifies the point should be given visibility
+ //! to the left side of the shape that it is located within.
+ ConnDirLeft = 4,
+ //! @brief This option specifies the point should be given visibility
+ //! to the right side of the shape that it is located within.
+ ConnDirRight = 8,
+ //! @brief This option, provided for convenience, specifies the point
+ //! should be given visibility to all four sides of the shape
+ //! that it is located within.
+ ConnDirAll = 15
+};
+//! @brief One or more Avoid::ConnDirFlag options.
+//!
+typedef unsigned int ConnDirFlags;
+
+
+static const double ATTACH_POS_TOP = 0;
+static const double ATTACH_POS_CENTER = 0.5;
+static const double ATTACH_POS_BOTTOM = 1;
+static const double ATTACH_POS_LEFT = ATTACH_POS_TOP;
+static const double ATTACH_POS_RIGHT = ATTACH_POS_BOTTOM;
+
+
+//! @brief The ConnEnd class represents different possible endpoints for
+//! connectors.
+//!
+//! Currently this class just allows free-floating endpoints, but in future
+//! will be capable of representing attachments to connection points on shapes.
+//!
+class ConnEnd
+{
+ public:
+ //! @brief Constructs a ConnEnd from a free-floating point.
+ //!
+ //! @param[in] point The position of the connector endpoint.
+ //!
+ ConnEnd(const Point& point);
+
+ //! @brief Constructs a ConnEnd from a free-floating point as well
+ //! as a set of flags specifying visibility for this point
+ //! if it is located inside a shape.
+ //!
+ //! @param[in] point The position of the connector endpoint.
+ //! @param[in] visDirs One or more Avoid::ConnDirFlag options
+ //! specifying the directions that this point
+ //! should be given visibility if it is inside
+ //! a shape.
+ //!
+ ConnEnd(const Point& point, const ConnDirFlags visDirs);
+
+ ConnEnd(ShapeRef *shapeRef, const double x_pos, const double y_pos,
+ const double insideOffset = 0.0,
+ const ConnDirFlags visDirs = ConnDirNone);
-static const int ConnType_PolyLine = 1;
-static const int ConnType_Orthogonal = 2;
+ //! @brief Returns the position of this connector endpoint
+ //!
+ //! @return The position of this connector endpoint.
+ const Point point(void) const;
+
+ ConnDirFlags directions(void) const;
+ private:
+ Point _point;
+ ConnDirFlags _directions;
+
+ // For referencing ConnEnds
+ ShapeRef *_shapeRef;
+ double _xPosition;
+ double _yPosition;
+ double _insideOffset;
+};
+//! @brief The ConnRef class represents a connector object.
+//!
+//! Connectors are a (possible multi-segment) line between two points.
+//! They are routed intelligently so as not to overlap any of the shape
+//! objects in the Router scene.
+//!
+//! Routing penalties can be applied, resulting in more aesthetically pleasing
+//! connector paths with fewer segments or less severe bend-points.
+//!
+//! You can set a function to be called when the connector has been rerouted
+//! and needs to be redrawn. Alternatively, you can query the connector's
+//! needsRepaint() function to determine this manually.
+//!
+//! Usually, it is expected that you would create a ConnRef for each connector
+//! in your diagram and keep that reference in your own connector class.
+//!
class ConnRef
{
public:
- ConnRef(Router *router, const unsigned int id);
- ConnRef(Router *router, const unsigned int id,
- const Point& src, const Point& dst);
- virtual ~ConnRef();
+ //! @brief Constructs a connector with no endpoints specified.
+ //!
+ //! @param[in] router The router scene to place the connector into.
+ //! @param[in] id A unique positive integer ID for the connector.
+ //!
+ //! If an ID is not specified, then one will be assigned to the shape.
+ //! If assigning an ID yourself, note that it should be a unique
+ //! positive integer. Also, IDs are given to all objects in a scene,
+ //! so the same ID cannot be given to a shape and a connector for
+ //! example.
+ //!
+ ConnRef(Router *router, const unsigned int id = 0);
+ //! @brief Constructs a connector with endpoints specified.
+ //!
+ //! @param[in] router The router scene to place the connector into.
+ //! @param[in] id A unique positive integer ID for the connector.
+ //! @param[in] src The source endpoint of the connector.
+ //! @param[in] dst The destination endpoint of the connector.
+ //!
+ //! If an ID is not specified, then one will be assigned to the shape.
+ //! If assigning an ID yourself, note that it should be a unique
+ //! positive integer. Also, IDs are given to all objects in a scene,
+ //! so the same ID cannot be given to a shape and a connector for
+ //! example.
+ //!
+ ConnRef(Router *router, const ConnEnd& src, const ConnEnd& dst,
+ const unsigned int id = 0);
+ //! @brief Destuctor.
+ ~ConnRef();
- void setType(unsigned int type);
- PolyLine& route(void);
- bool needsReroute(void);
- void freeRoute(void);
+ //! @brief Sets both new source and destination endpoints for this
+ //! connector.
+ //!
+ //! @param[in] srcPoint New source endpoint for the connector.
+ //! @param[in] dstPoint New destination endpoint for the connector.
+ void setEndpoints(const ConnEnd& srcPoint, const ConnEnd& dstPoint);
+ //! @brief Sets just a new source endpoint for this connector.
+ //!
+ //! @param[in] srcPoint New source endpoint for the connector.
+ void setSourceEndpoint(const ConnEnd& srcPoint);
+ //! @brief Sets just a new destination endpoint for this connector.
+ //!
+ //! @param[in] dstPoint New destination endpoint for the connector.
+ void setDestEndpoint(const ConnEnd& dstPoint);
+ //! @brief Returns the ID of this connector.
+ //! @returns The ID of the connector.
+ unsigned int id(void) const;
+ //! @brief Returns a pointer to the router scene this connector is in.
+ //! @returns A pointer to the router scene for this connector.
+ Router *router(void) const;
+
+ //! @brief Returns an indication of whether this connector has a
+ //! new route and thus needs to be repainted.
+ //!
+ //! If the connector has been rerouted and need repainting, the
+ //! route() method can be called to get a reference to the new route.
+ //!
+ //! @returns Returns true if the connector requires repainting, or
+ //! false if it does not.
+ bool needsRepaint(void) const;
+
+ //! @brief Returns a reference to the current route for the connector.
+ //!
+ //! This is a "raw" version of the route, where each line segment in
+ //! the route may be made up of multiple collinear line segments. It
+ //! will also not have post-processing (like curved corners) applied
+ //! to it. The simplified route for display can be obtained by calling
+ //! displayRoute().
+ //!
+ //! @returns The PolyLine route for the connector.
+ //! @note You can obtain a modified version of this poly-line
+ //! route with curved corners added by calling
+ //! PolyLine::curvedPolyline().
+ const PolyLine& route(void) const;
+
+ //! @brief Returns a reference to the current display version of the
+ //! route for the connector.
+ //!
+ //! The display version of a route has been simplified to collapse all
+ //! collinear line segments into single segments. It may also have
+ //! post-processing applied to the route, such as curved corners or
+ //! nudging.
+ //!
+ //! @returns The PolyLine display route for the connector.
+ PolyLine& displayRoute(void);
+
+ //! @brief Sets a callback function that will called to indicate that
+ //! the connector needs rerouting.
+ //!
+ //! The cb function will be called when shapes are added to, removed
+ //! from or moved about on the page. The pointer ptr will be passed
+ //! as an argument to the callback function.
+ //!
+ //! @param[in] cb A pointer to the callback function.
+ //! @param[in] ptr A generic pointer that will be passed to the
+ //! callback function.
+ void setCallback(void (*cb)(void *), void *ptr);
+ //! @brief Returns the type of routing performed for this connector.
+ //! @return The type of routing performed.
+ //!
+ ConnType routingType(void) const;
+ //! @brief Sets the type of routing to be performed for this
+ //! connector.
+ //!
+ //! If a call to this method changes the current type of routing
+ //! being used for the connector, then it will get rerouted during
+ //! the next processTransaction() call, or immediately if
+ //! transactions are not being used.
+ //!
+ //! @param type The type of routing to be performed.
+ //!
+ void setRoutingType(ConnType type);
+
+
+
+ // @brief Returns the source endpoint vertex in the visibility graph.
+ // @returns The source endpoint vertex.
+ VertInf *src(void);
+ // @brief Returns the destination endpoint vertex in the
+ // visibility graph.
+ // @returns The destination endpoint vertex.
+ VertInf *dst(void);
+
+
+ void set_route(const PolyLine& route);
void calcRouteDist(void);
- void updateEndPoint(const unsigned int type, const Point& point);
void setEndPointId(const unsigned int type, const unsigned int id);
unsigned int getSrcShapeId(void);
unsigned int getDstShapeId(void);
void makeActive(void);
void makeInactive(void);
- void lateSetup(const Point& src, const Point& dst);
- unsigned int id(void);
- VertInf *src(void);
- VertInf *dst(void);
+ VertInf *start(void);
void removeFromGraph(void);
bool isInitialised(void);
- void unInitialise(void);
- void setCallback(void (*cb)(void *), void *ptr);
- void handleInvalid(void);
- int generatePath(Point p0, Point p1);
void makePathInvalid(void);
- Router *router(void);
void setHateCrossings(bool value);
bool doesHateCrossings(void);
-
- friend void Router::attachedShapes(IntList &shapes,
- const unsigned int shapeId, const unsigned int type);
- friend void Router::attachedConns(IntList &conns,
- const unsigned int shapeId, const unsigned int type);
- friend void Router::markConnectors(ShapeRef *shape);
-
+ void setEndpoint(const unsigned int type, const ConnEnd& connEnd);
+ bool setEndpoint(const unsigned int type, const VertID& pointID,
+ Point *pointSuggestion = NULL);
+
private:
+ friend class Router;
+
+ PolyLine& routeRef(void);
+ void freeRoutes(void);
+ void performCallback(void);
+ bool generatePath(void);
+ bool generatePath(Point p0, Point p1);
+ void unInitialise(void);
+ void updateEndPoint(const unsigned int type, const ConnEnd& connEnd);
+ void common_updateEndPoint(const unsigned int type, const ConnEnd& connEnd);
Router *_router;
unsigned int _id;
- unsigned int _type;
+ ConnType _type;
unsigned int _srcId, _dstId;
+ bool _orthogonal;
bool _needs_reroute_flag;
bool _false_path;
+ bool _needs_repaint;
bool _active;
PolyLine _route;
+ Polygon _display_route;
double _route_dist;
ConnRefList::iterator _pos;
VertInf *_srcVert;
VertInf *_dstVert;
+ VertInf *_startVert;
bool _initialised;
void (*_callback)(void *);
void *_connector;
@@ -96,6 +339,69 @@ class ConnRef
};
+class PointRep;
+typedef std::set<PointRep *> PointRepSet;
+typedef std::list<PointRep *> PointRepList;
+
+class PointRep
+{
+ public:
+ PointRep(Point *p, const ConnRef *c)
+ : point(p),
+ conn(c)
+
+ {
+ }
+ bool follow_inner(PointRep *target);
+
+ Point *point;
+ const ConnRef *conn;
+ // inner_set: Set of pointers to the PointReps 'inner' of
+ // this one, at this corner.
+ PointRepSet inner_set;
+};
+
+
+typedef std::pair<Point *, ConnRef *> PtConnPtrPair;
+
+class PtOrder
+{
+ public:
+ PtOrder()
+ {
+ }
+ ~PtOrder();
+ bool addPoints(const int dim, PtConnPtrPair innerArg,
+ PtConnPtrPair outerArg, bool swapped);
+ void sort(const int dim);
+ int positionFor(const ConnRef *conn, const size_t dim) const;
+
+ // One for each dimension.
+ PointRepList connList[2];
+};
+
+typedef std::map<Avoid::Point,PtOrder> PtOrderMap;
+typedef std::set<Avoid::Point> PointSet;
+
+
+const unsigned int CROSSING_NONE = 0;
+const unsigned int CROSSING_TOUCHES = 1;
+const unsigned int CROSSING_SHARES_PATH = 2;
+const unsigned int CROSSING_SHARES_PATH_AT_END = 4;
+const unsigned int CROSSING_SHARES_FIXED_SEGMENT = 8;
+
+
+typedef std::pair<int, unsigned int> CrossingsInfoPair;
+
+extern CrossingsInfoPair countRealCrossings( Avoid::Polygon& poly,
+ bool polyIsConn, Avoid::Polygon& conn, size_t cIndex,
+ bool checkForBranchingSegments, const bool finalSegment = false,
+ PointSet *crossingPoints = NULL, PtOrderMap *pointOrders = NULL,
+ ConnRef *polyConnRef = NULL, ConnRef *connConnRef = NULL);
+extern void splitBranchingSegments(Avoid::Polygon& poly, bool polyIsConn,
+ Avoid::Polygon& conn, const double tolerance = 0);
+extern bool validateBendPoint(VertInf *aInf, VertInf *bInf, VertInf *cInf);
+
}
diff --git a/src/libavoid/debug.h b/src/libavoid/debug.h
index 20e6f4705..443529ece 100644
--- a/src/libavoid/debug.h
+++ b/src/libavoid/debug.h
@@ -2,24 +2,27 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2008 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
#ifndef AVOID_DEBUG_H
#define AVOID_DEBUG_H
@@ -42,7 +45,7 @@ inline void db_printf(const char *fmt, ...)
va_end(ap);
}
#else
-inline void db_printf(const char */*fmt*/, ...)
+inline void db_printf(const char *, ...)
{
}
#endif
diff --git a/src/libavoid/geometry.cpp b/src/libavoid/geometry.cpp
index 15840c381..2523375cf 100644
--- a/src/libavoid/geometry.cpp
+++ b/src/libavoid/geometry.cpp
@@ -2,7 +2,8 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* --------------------------------------------------------------------
* Much of the code in this module is based on code published with
@@ -18,70 +19,42 @@
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
+#include <cmath>
+
#include "libavoid/graph.h"
#include "libavoid/geometry.h"
-#include "libavoid/polyutil.h"
-
-#include <math.h>
+#include "libavoid/assertions.h"
namespace Avoid {
-Point::Point()
-{
-}
-
-
-Point::Point(const double xv, const double yv)
- : x(xv)
- , y(yv)
-{
-}
-
-
-bool Point::operator==(const Point& rhs) const
-{
- if ((x == rhs.x) && (y == rhs.y))
- {
- return true;
- }
- return false;
-}
-
-
-bool Point::operator!=(const Point& rhs) const
-{
- if ((x != rhs.x) || (y != rhs.y))
- {
- return true;
- }
- return false;
-}
-
// Returns true iff the point c lies on the closed segment ab.
+// To be used when the points are known to be collinear.
//
// Based on the code of 'Between'.
//
-static const bool inBetween(const Point& a, const Point& b, const Point& c)
+bool inBetween(const Point& a, const Point& b, const Point& c)
{
// We only call this when we know the points are collinear,
// otherwise we should be checking this here.
- assert(vecDir(a, b, c) == 0);
+ COLA_ASSERT(vecDir(a, b, c, 0.0001) == 0);
- if (a.x != b.x)
+ if ((fabs(a.x - b.x) > 1) && (a.x != b.x))
{
// not vertical
return (((a.x < c.x) && (c.x < b.x)) ||
@@ -95,6 +68,15 @@ static const bool inBetween(const Point& a, const Point& b, const Point& c)
}
+// Returns true iff the point c lies on the closed segment ab.
+//
+bool pointOnLine(const Point& a, const Point& b, const Point& c,
+ const double tolerance)
+{
+ return (vecDir(a, b, c, tolerance) == 0) && inBetween(a, b, c);
+}
+
+
// Returns true if the segment cd intersects the segment ab, blocking
// visibility.
//
@@ -104,15 +86,15 @@ bool segmentIntersect(const Point& a, const Point& b, const Point& c,
const Point& d)
{
int ab_c = vecDir(a, b, c);
- if ((ab_c == 0) && inBetween(a, b, c))
+ if (ab_c == 0)
{
- return true;
+ return false;
}
int ab_d = vecDir(a, b, d);
- if ((ab_d == 0) && inBetween(a, b, d))
+ if (ab_d == 0)
{
- return true;
+ return false;
}
// It's ok for either of the points a or b to be on the line cd,
@@ -131,6 +113,37 @@ bool segmentIntersect(const Point& a, const Point& b, const Point& c,
}
+// Returns true if the segment e1-e2 intersects the shape boundary
+// segment s1-s2, blocking visibility.
+//
+bool segmentShapeIntersect(const Point& e1, const Point& e2, const Point& s1,
+ const Point& s2, bool& seenIntersectionAtEndpoint)
+{
+ if (segmentIntersect(e1, e2, s1, s2))
+ {
+ // Basic intersection of segments.
+ return true;
+ }
+ else if ( (((s2 == e1) || pointOnLine(s1, s2, e1)) &&
+ (vecDir(s1, s2, e2) != 0))
+ ||
+ (((s2 == e2) || pointOnLine(s1, s2, e2)) &&
+ (vecDir(s1, s2, e1) != 0)) )
+ {
+ // Segments intersect at the endpoint of one of the segments. We
+ // allow this once, but the second one blocks visibility. Otherwise
+ // shapes butted up against each other could have visibility through
+ // shapes.
+ if (seenIntersectionAtEndpoint)
+ {
+ return true;
+ }
+ seenIntersectionAtEndpoint = true;
+ }
+ return false;
+}
+
+
// Returns true iff the point p in a valid region that can contain
// shortest paths. a0, a1, a2 are ordered vertices of a shape.
//
@@ -205,20 +218,9 @@ int cornerSide(const Point &c1, const Point &c2, const Point &c3,
int s12p = vecDir(c1, c2, p);
int s23p = vecDir(c2, c3, p);
- if (s12p == 0)
- {
- // Case of p being somewhere on c1-c2.
- return s23p;
- }
- if (s23p == 0)
- {
- // Case of p being somewhere on c2-c3.
- return s12p;
- }
-
if (s123 == 1)
{
- if ((s12p == 1) && (s23p == 1))
+ if ((s12p >= 0) && (s23p >= 0))
{
return 1;
}
@@ -226,18 +228,37 @@ int cornerSide(const Point &c1, const Point &c2, const Point &c3,
}
else if (s123 == -1)
{
- if ((s12p == -1) && (s23p == -1))
+ if ((s12p <= 0) && (s23p <= 0))
{
return -1;
}
return 1;
}
- // Case of c3 being somewhere on c1-c2.
+
+ // c1-c2-c3 are collinear, so just return vecDir from c1-c2
return s12p;
}
-// Returns the distance between points a and b.
+// Returns the Euclidean distance between points a and b.
+//
+double euclideanDist(const Point& a, const Point& b)
+{
+ double xdiff = a.x - b.x;
+ double ydiff = a.y - b.y;
+
+ return sqrt((xdiff * xdiff) + (ydiff * ydiff));
+}
+
+// Returns the Manhattan distance between points a and b.
+//
+double manhattanDist(const Point& a, const Point& b)
+{
+ return fabs(a.x - b.x) + fabs(a.y - b.y);
+}
+
+
+// Returns the Euclidean distance between points a and b.
//
double dist(const Point& a, const Point& b)
{
@@ -248,11 +269,12 @@ double dist(const Point& a, const Point& b)
}
// Returns the total length of all line segments in the polygon
-double totalLength(const Polygn& poly)
+double totalLength(const Polygon& poly)
{
double l = 0;
- for (int i = 0; i < poly.pn-1; ++i) {
- l += dist(poly.ps[i], poly.ps[i+1]);
+ for (size_t i = 1; i < poly.size(); ++i)
+ {
+ l += dist(poly.ps[i-1], poly.ps[i]);
}
return l;
}
@@ -277,18 +299,27 @@ double angle(const Point& a, const Point& b, const Point& c)
// This is a fast version that only works for convex shapes. The
// other version (inPolyGen) is more general.
//
-bool inPoly(const Polygn& poly, const Point& q)
+bool inPoly(const Polygon& poly, const Point& q, bool countBorder)
{
- int n = poly.pn;
- Point *P = poly.ps;
- for (int i = 0; i < n; i++)
+ size_t n = poly.size();
+ const std::vector<Point>& P = poly.ps;
+ bool onBorder = false;
+ for (size_t i = 0; i < n; i++)
{
// point index; i1 = i-1 mod n
- int prev = (i + n - 1) % n;
- if (vecDir(P[prev], P[i], q) == -1)
+ size_t prev = (i + n - 1) % n;
+ int dir = vecDir(P[prev], P[i], q);
+ if (dir == -1)
{
+ // Point is outside
return false;
}
+ // Record if point was on a boundary.
+ onBorder |= (dir == 0);
+ }
+ if (!countBorder && onBorder)
+ {
+ return false;
}
return true;
}
@@ -299,37 +330,36 @@ bool inPoly(const Polygn& poly, const Point& q)
//
// Based on the code of 'InPoly'.
//
-bool inPolyGen(const Polygn& argpoly, const Point& q)
+bool inPolyGen(const PolygonInterface& argpoly, const Point& q)
{
// Numbers of right and left edge/ray crossings.
int Rcross = 0;
int Lcross = 0;
// Copy the argument polygon
- Polygn poly = copyPoly(argpoly);
- Point *P = poly.ps;
- int n = poly.pn;
+ Polygon poly = argpoly;
+ std::vector<Point>& P = poly.ps;
+ size_t n = poly.size();
// Shift so that q is the origin. This is done for pedogical clarity.
- for (int i = 0; i < n; ++i)
+ for (size_t i = 0; i < n; ++i)
{
P[i].x = P[i].x - q.x;
P[i].y = P[i].y - q.y;
}
// For each edge e=(i-1,i), see if crosses ray.
- for (int i = 0; i < n; ++i)
+ for (size_t i = 0; i < n; ++i)
{
// First see if q=(0,0) is a vertex.
if ((P[i].x == 0) && (P[i].y == 0))
{
// We count a vertex as inside.
- freePoly(poly);
return true;
}
// point index; i1 = i-1 mod n
- int i1 = ( i + n - 1 ) % n;
+ size_t i1 = ( i + n - 1 ) % n;
// if e "straddles" the x-axis...
// The commented-out statement is logically equivalent to the one
@@ -367,7 +397,6 @@ bool inPolyGen(const Polygn& argpoly, const Point& q)
}
}
}
- freePoly(poly);
// q on the edge if left and right cross are not the same parity.
if ( (Rcross % 2) != (Lcross % 2) )
@@ -400,8 +429,7 @@ bool inPolyGen(const Polygn& argpoly, const Point& q)
int segmentIntersectPoint(const Point& a1, const Point& a2,
const Point& b1, const Point& b2, double *x, double *y)
{
-
- double Ax,Bx,Cx,Ay,By,Cy,d,e,f,num,offset;
+ double Ax,Bx,Cx,Ay,By,Cy,d,e,f,num;
double x1lo,x1hi,y1lo,y1hi;
Ax = a2.x - a1.x;
@@ -450,14 +478,13 @@ int segmentIntersectPoint(const Point& a1, const Point& a2,
if (y1hi < b1.y || b2.y < y1lo) return DONT_INTERSECT;
}
-
Cx = a1.x - b1.x;
Cy = a1.y - b1.y;
// alpha numerator:
d = By*Cx - Bx*Cy;
// Both denominator:
f = Ay*Bx - Ax*By;
- // aplha tests:
+ // alpha tests:
if (f > 0)
{
if (d < 0 || d > f) return DONT_INTERSECT;
@@ -485,15 +512,49 @@ int segmentIntersectPoint(const Point& a1, const Point& a2,
// Numerator:
num = d*Ax;
- // Round direction:
- offset = SAME_SIGNS(num,f) ? f/2 : -f/2;
// Intersection X:
- *x = a1.x + (num+offset) / f;
+ *x = a1.x + (num) / f;
+
+ num = d*Ay;
+ // Intersection Y:
+ *y = a1.y + (num) / f;
+
+ return DO_INTERSECT;
+}
+
+
+// Line Segment Intersection
+// Original code by Franklin Antonio
+//
+int rayIntersectPoint(const Point& a1, const Point& a2,
+ const Point& b1, const Point& b2, double *x, double *y)
+{
+ double Ax,Bx,Cx,Ay,By,Cy,d,f,num;
+
+ Ay = a2.y - a1.y;
+ By = b1.y - b2.y;
+ Ax = a2.x - a1.x;
+ Bx = b1.x - b2.x;
+
+ Cx = a1.x - b1.x;
+ Cy = a1.y - b1.y;
+ // alpha numerator:
+ d = By*Cx - Bx*Cy;
+ // Both denominator:
+ f = Ay*Bx - Ax*By;
+
+ // compute intersection coordinates:
+
+ if (f == 0) return PARALLEL;
+
+ // Numerator:
+ num = d*Ax;
+ // Intersection X:
+ *x = a1.x + (num) / f;
num = d*Ay;
- offset = SAME_SIGNS(num,f) ? f/2 : -f/2;
// Intersection Y:
- *y = a1.y + (num+offset) / f;
+ *y = a1.y + (num) / f;
return DO_INTERSECT;
}
diff --git a/src/libavoid/geometry.h b/src/libavoid/geometry.h
index 1422be050..abd0d60e2 100644
--- a/src/libavoid/geometry.h
+++ b/src/libavoid/geometry.h
@@ -2,7 +2,8 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* --------------------------------------------------------------------
* Much of the code in this module is based on code published with
@@ -18,16 +19,17 @@
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
@@ -35,21 +37,30 @@
#define _GEOMETRY_H
#include "libavoid/geomtypes.h"
+#include "libavoid/assertions.h"
namespace Avoid {
-extern double dist(const Point& a, const Point& b);
-extern double totalLength(const Polygn& poly);
+extern double euclideanDist(const Point& a, const Point& b);
+extern double manhattanDist(const Point& a, const Point& b);
+extern double totalLength(const Polygon& poly);
extern double angle(const Point& a, const Point& b, const Point& c);
extern bool segmentIntersect(const Point& a, const Point& b,
const Point& c, const Point& d);
-extern bool inPoly(const Polygn& poly, const Point& q);
-extern bool inPolyGen(const Polygn& poly, const Point& q);
+extern bool segmentShapeIntersect(const Point& e1, const Point& e2,
+ const Point& s1, const Point& s2, bool& seenIntersectionAtEndpoint);
+extern bool inPoly(const Polygon& poly, const Point& q, bool countBorder = true);
+extern bool inPolyGen(const PolygonInterface& poly, const Point& q);
extern bool inValidRegion(bool IgnoreRegions, const Point& a0,
const Point& a1, const Point& a2, const Point& b);
extern int cornerSide(const Point &c1, const Point &c2, const Point &c3,
const Point& p);
+extern bool pointOnLine(const Point& a, const Point& b, const Point& c,
+ const double tolerance = 0.0);
+
+// To be used only when the points are known to be colinear.
+extern bool inBetween(const Point& a, const Point& b, const Point& c);
// Direction from vector.
@@ -61,16 +72,22 @@ extern int cornerSide(const Point &c1, const Point &c2, const Point &c3,
//
// Based on the code of 'AreaSign'.
//
-static inline int vecDir(const Point& a, const Point& b, const Point& c)
+// The 'maybeZero' argument can be used to adjust the tolerance of the
+// function. It will be most accurate when 'maybeZero' == 0.0, the default.
+//
+static inline int vecDir(const Point& a, const Point& b, const Point& c,
+ const double maybeZero = 0.0)
{
+ COLA_ASSERT(maybeZero >= 0);
+
double area2 = ((b.x - a.x) * (c.y - a.y)) -
((c.x - a.x) * (b.y - a.y));
- if (area2 < -0.001)
+ if (area2 < (-maybeZero))
{
return -1;
}
- else if (area2 > 0.001)
+ else if (area2 > maybeZero)
{
return 1;
}
@@ -100,6 +117,8 @@ static const int DO_INTERSECT = 1;
static const int PARALLEL = 3;
extern int segmentIntersectPoint(const Point& a1, const Point& a2,
const Point& b1, const Point& b2, double *x, double *y);
+extern int rayIntersectPoint(const Point& a1, const Point& a2,
+ const Point& b1, const Point& b2, double *x, double *y);
}
diff --git a/src/libavoid/geomtypes.cpp b/src/libavoid/geomtypes.cpp
new file mode 100644
index 000000000..10bb95a7a
--- /dev/null
+++ b/src/libavoid/geomtypes.cpp
@@ -0,0 +1,548 @@
+/*
+ * vim: ts=4 sw=4 et tw=0 wm=0
+ *
+ * libavoid - Fast, Incremental, Object-avoiding Line Router
+ *
+ * Copyright (C) 2004-2009 Monash University
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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.
+ *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
+*/
+
+
+#include <cmath>
+#include <cfloat>
+#include <cstdlib>
+
+#include "libavoid/geomtypes.h"
+#include "libavoid/shape.h"
+#include "libavoid/router.h"
+#include "libavoid/assertions.h"
+
+
+namespace Avoid
+{
+
+
+Point::Point() :
+ id(0),
+ vn(kUnassignedVertexNumber)
+{
+}
+
+
+Point::Point(const double xv, const double yv) :
+ x(xv),
+ y(yv),
+ id(0),
+ vn(kUnassignedVertexNumber)
+{
+}
+
+
+bool Point::operator==(const Point& rhs) const
+{
+ if ((x == rhs.x) && (y == rhs.y))
+ {
+ return true;
+ }
+ return false;
+}
+
+
+bool Point::operator!=(const Point& rhs) const
+{
+ if ((x != rhs.x) || (y != rhs.y))
+ {
+ return true;
+ }
+ return false;
+}
+
+
+// Just defined to allow std::set<Point>. Not particularly meaningful!
+bool Point::operator<(const Point& rhs) const
+{
+ if (x == rhs.x)
+ {
+ return (y < rhs.y);
+ }
+ return (x < rhs.x);
+}
+
+
+double& Point::operator[](const unsigned int dimension)
+{
+ COLA_ASSERT((dimension == 0) || (dimension == 1));
+ return ((dimension == 0) ? x : y);
+}
+
+
+const double& Point::operator[](const unsigned int dimension) const
+{
+ COLA_ASSERT((dimension == 0) || (dimension == 1));
+ return ((dimension == 0) ? x : y);
+}
+
+
+ReferencingPolygon::ReferencingPolygon(const Polygon& poly, const Router *router)
+ : PolygonInterface(),
+ _id(poly._id),
+ ps(poly.size())
+{
+ COLA_ASSERT(router != NULL);
+ for (size_t i = 0; i < poly.size(); ++i)
+ {
+ const Polygon *polyPtr = NULL;
+ for (ShapeRefList::const_iterator sh = router->shapeRefs.begin();
+ sh != router->shapeRefs.end(); ++sh)
+ {
+ if ((*sh)->id() == poly.ps[i].id)
+ {
+ const Polygon& poly = (*sh)->polygon();
+ polyPtr = &poly;
+ break;
+ }
+ }
+ COLA_ASSERT(polyPtr != NULL);
+ ps[i] = std::make_pair(polyPtr, poly.ps[i].vn);
+ }
+}
+
+
+ReferencingPolygon::ReferencingPolygon()
+ : PolygonInterface()
+{
+ clear();
+}
+
+
+void ReferencingPolygon::clear(void)
+{
+ ps.clear();
+}
+
+
+bool ReferencingPolygon::empty(void) const
+{
+ return ps.empty();
+}
+
+
+size_t ReferencingPolygon::size(void) const
+{
+ return ps.size();
+}
+
+
+int ReferencingPolygon::id(void) const
+{
+ return _id;
+}
+
+
+const Point& ReferencingPolygon::at(size_t index) const
+{
+ COLA_ASSERT(index < size());
+ const Polygon& poly = *(ps[index].first);
+ unsigned short poly_index = ps[index].second;
+ COLA_ASSERT(poly_index < poly.size());
+
+ return poly.ps[poly_index];
+}
+
+
+void PolygonInterface::getBoundingRect(double *minX, double *minY,
+ double *maxX, double *maxY) const
+{
+ double progressiveMinX = DBL_MAX;
+ double progressiveMinY = DBL_MAX;
+ double progressiveMaxX = -DBL_MAX;
+ double progressiveMaxY = -DBL_MAX;
+
+ for (size_t i = 0; i < size(); ++i)
+ {
+ progressiveMinX = std::min(progressiveMinX, at(i).x);
+ progressiveMinY = std::min(progressiveMinY, at(i).y);
+ progressiveMaxX = std::max(progressiveMaxX, at(i).x);
+ progressiveMaxY = std::max(progressiveMaxY, at(i).y);
+ }
+
+ if (minX)
+ {
+ *minX = progressiveMinX;
+ }
+ if (maxX)
+ {
+ *maxX = progressiveMaxX;
+ }
+ if (minY)
+ {
+ *minY = progressiveMinY;
+ }
+ if (maxY)
+ {
+ *maxY = progressiveMaxY;
+ }
+}
+
+
+Polygon::Polygon()
+ : PolygonInterface()
+{
+ clear();
+}
+
+
+Polygon::Polygon(const int pn)
+ : PolygonInterface(),
+ ps(pn)
+{
+}
+
+
+Polygon::Polygon(const PolygonInterface& poly)
+ : PolygonInterface(),
+ _id(poly.id()),
+ ps(poly.size())
+{
+ for (size_t i = 0; i < poly.size(); ++i)
+ {
+ ps[i] = poly.at(i);
+ }
+}
+
+
+void Polygon::clear(void)
+{
+ ps.clear();
+ ts.clear();
+}
+
+
+bool Polygon::empty(void) const
+{
+ return ps.empty();
+}
+
+
+size_t Polygon::size(void) const
+{
+ return ps.size();
+}
+
+
+int Polygon::id(void) const
+{
+ return _id;
+}
+
+
+const Point& Polygon::at(size_t index) const
+{
+ COLA_ASSERT(index < size());
+
+ return ps[index];
+}
+
+
+static const unsigned int SHORTEN_NONE = 0;
+static const unsigned int SHORTEN_START = 1;
+static const unsigned int SHORTEN_END = 2;
+static const unsigned int SHORTEN_BOTH = SHORTEN_START | SHORTEN_END;
+
+// shorten_line():
+// Given the two endpoints of a line segment, this function adjusts the
+// endpoints of the line to shorten the line by shorten_length at either
+// or both ends.
+//
+static void shorten_line(double& x1, double& y1, double& x2, double& y2,
+ const unsigned int mode, const double shorten_length)
+{
+ if (mode == SHORTEN_NONE)
+ {
+ return;
+ }
+
+ double rise = y1 - y2;
+ double run = x1 - x2;
+ double disty = fabs(rise);
+ double distx = fabs(run);
+
+ // Handle case where shorten length is greater than the length of the
+ // line segment.
+ if ((mode == SHORTEN_BOTH) &&
+ (((distx > disty) && ((shorten_length * 2) > distx)) ||
+ ((disty >= distx) && ((shorten_length * 2) > disty))))
+ {
+ x1 = x2 = x1 - (run / 2);
+ y1 = y2 = y1 - (rise / 2);
+ return;
+ }
+ else if ((mode == SHORTEN_START) &&
+ (((distx > disty) && (shorten_length > distx)) ||
+ ((disty >= distx) && (shorten_length > disty))))
+ {
+ x1 = x2;
+ y1 = y2;
+ return;
+ }
+ else if ((mode == SHORTEN_END) &&
+ (((distx > disty) && (shorten_length > distx)) ||
+ ((disty >= distx) && (shorten_length > disty))))
+ {
+ x2 = x1;
+ y2 = y1;
+ return;
+ }
+
+ // Handle orthogonal line segments.
+ if (x1 == x2)
+ {
+ // Vertical
+ int sign = (y1 < y2) ? 1: -1;
+
+ if (mode & SHORTEN_START)
+ {
+ y1 += (sign * shorten_length);
+ }
+ if (mode & SHORTEN_END)
+ {
+ y2 -= (sign * shorten_length);
+ }
+ return;
+ }
+ else if (y1 == y2)
+ {
+ // Horizontal
+ int sign = (x1 < x2) ? 1: -1;
+
+ if (mode & SHORTEN_START)
+ {
+ x1 += (sign * shorten_length);
+ }
+ if (mode & SHORTEN_END)
+ {
+ x2 -= (sign * shorten_length);
+ }
+ return;
+ }
+
+ int xpos = (x1 < x2) ? -1 : 1;
+ int ypos = (y1 < y2) ? -1 : 1;
+
+ double tangent = rise / run;
+
+ if (mode & SHORTEN_END)
+ {
+ if (disty > distx)
+ {
+ y2 += shorten_length * ypos;
+ x2 += shorten_length * ypos * (1 / tangent);
+ }
+ else if (disty < distx)
+ {
+ y2 += shorten_length * xpos * tangent;
+ x2 += shorten_length * xpos;
+ }
+ }
+
+ if (mode & SHORTEN_START)
+ {
+ if (disty > distx)
+ {
+ y1 -= shorten_length * ypos;
+ x1 -= shorten_length * ypos * (1 / tangent);
+ }
+ else if (disty < distx)
+ {
+ y1 -= shorten_length * xpos * tangent;
+ x1 -= shorten_length * xpos;
+ }
+ }
+}
+
+
+void Polygon::translate(const double xDist, const double yDist)
+{
+ for (size_t i = 0; i < size(); ++i)
+ {
+ ps[i].x += xDist;
+ ps[i].y += yDist;
+ }
+}
+
+
+Polygon Polygon::simplify(void) const
+{
+ Polygon simplified = *this;
+ std::vector<Point>::iterator it = simplified.ps.begin();
+ if (it != simplified.ps.end()) ++it;
+
+ // Combine collinear line segments into single segments:
+ for (size_t j = 2; j < simplified.size(); )
+ {
+ if (vecDir(simplified.ps[j - 2], simplified.ps[j - 1],
+ simplified.ps[j]) == 0)
+ {
+ // These three points make up two collinear segments, so just
+ // compine them into a single segment.
+ it = simplified.ps.erase(it);
+ }
+ else
+ {
+ ++j;
+ ++it;
+ }
+ }
+
+ return simplified;
+}
+
+
+#define mid(a, b) ((a < b) ? a + ((b - a) / 2) : b + ((a - b) / 2))
+
+
+// curvedPolyline():
+// Returns a curved approximation of this multi-segment PolyLine, with
+// the corners replaced by smooth Bezier curves. curve_amount describes
+// how large to make the curves.
+// The ts value for each point in the returned Polygon describes the
+// drawing operation: 'M' (move) marks the first point, a line segment
+// is marked with an 'L' and three 'C's (along with the previous point)
+// describe the control points of a Bezier curve.
+//
+Polygon Polygon::curvedPolyline(const double curve_amount,
+ const bool closed) const
+{
+ Polygon simplified = this->simplify();
+
+ Polygon curved;
+ size_t num_of_points = size();
+ if (num_of_points <= 2)
+ {
+ // There is only a single segment, do nothing.
+ curved = *this;
+ curved.ts.push_back('M');
+ curved.ts.push_back('L');
+ return curved;
+ }
+
+ // Build the curved polyline:
+ curved._id = _id;
+ double last_x = 0;
+ double last_y = 0;
+ if (closed)
+ {
+ double x1 = simplified.ps[0].x;
+ double y1 = simplified.ps[0].y;
+ double x2 = simplified.ps[1].x;
+ double y2 = simplified.ps[1].y;
+ shorten_line(x1, y1, x2, y2, SHORTEN_START, curve_amount);
+ curved.ps.push_back(Point(x1, y1));
+ curved.ts.push_back('M');
+ }
+ else
+ {
+ curved.ps.push_back(ps[0]);
+ curved.ts.push_back('M');
+ }
+
+ size_t simpSize = simplified.size();
+ size_t finish = (closed) ? simpSize + 2 : simpSize;
+ for (size_t j = 1; j < finish; ++j)
+ {
+ double x1 = simplified.ps[(simpSize + j - 1) % simpSize].x;
+ double y1 = simplified.ps[(simpSize + j - 1) % simpSize].y;
+ double x2 = simplified.ps[j % simpSize].x;
+ double y2 = simplified.ps[j % simpSize].y;
+
+ double old_x = x1;
+ double old_y = y1;
+
+ unsigned int mode = SHORTEN_BOTH;
+ if (!closed)
+ {
+ if (j == 1)
+ {
+ mode = SHORTEN_END;
+ }
+ else if (j == (size() - 1))
+ {
+ mode = SHORTEN_START;
+ }
+ }
+ shorten_line(x1, y1, x2, y2, mode, curve_amount);
+
+ if (j > 1)
+ {
+ curved.ts.insert(curved.ts.end(), 3, 'C');
+ curved.ps.push_back(Point(mid(last_x, old_x), mid(last_y, old_y)));
+ curved.ps.push_back(Point(mid(x1, old_x), mid(y1, old_y)));
+ curved.ps.push_back(Point(x1, y1));
+ }
+ if (closed && (j == (finish - 1)))
+ {
+ // Close the path.
+ curved.ts.push_back('Z');
+ curved.ps.push_back(Point(x1, y1));
+ break;
+ }
+ curved.ts.push_back('L');
+ curved.ps.push_back(Point(x2, y2));
+
+ last_x = x2;
+ last_y = y2;
+ }
+
+ return curved;
+}
+
+
+Rectangle::Rectangle(const Point& topLeft, const Point& bottomRight)
+ : Polygon(4)
+{
+ double xMin = std::min(topLeft.x, bottomRight.x);
+ double xMax = std::max(topLeft.x, bottomRight.x);
+ double yMin = std::min(topLeft.y, bottomRight.y);
+ double yMax = std::max(topLeft.y, bottomRight.y);
+
+ ps[0] = Point(xMax, yMin);
+ ps[1] = Point(xMax, yMax);
+ ps[2] = Point(xMin, yMax);
+ ps[3] = Point(xMin, yMin);
+}
+
+
+Rectangle::Rectangle(const Point& centre, const double width,
+ const double height)
+{
+ double halfWidth = width / 2.0;
+ double halfHeight = height / 2.0;
+ double xMin = centre.x - halfWidth;
+ double xMax = centre.x + halfWidth;
+ double yMin = centre.y - halfHeight;
+ double yMax = centre.y + halfHeight;
+
+ ps[0] = Point(xMax, yMin);
+ ps[1] = Point(xMax, yMax);
+ ps[2] = Point(xMin, yMax);
+ ps[3] = Point(xMin, yMin);
+}
+
+
+}
+
diff --git a/src/libavoid/geomtypes.h b/src/libavoid/geomtypes.h
index dd9d26f2f..ced53e6b0 100644
--- a/src/libavoid/geomtypes.h
+++ b/src/libavoid/geomtypes.h
@@ -2,70 +2,314 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+//! @file geomtypes.h
+//! @brief Contains the interface for various geometry types and classes.
+
#ifndef AVOID_GEOMTYPES_H
#define AVOID_GEOMTYPES_H
+#include <vector>
+#include <utility>
+
namespace Avoid
{
-
+
+//! @brief The Point class defines a point in the plane.
+//!
+//! Points consist of an x and y value. They may also have an ID and vertex
+//! number associated with them.
+//!
class Point
{
public:
+ //! @brief Default constructor.
+ //!
Point();
+ //! @brief Standard constructor.
+ //!
+ //! @param[in] xv The x position of the point.
+ //! @param[in] yv The y position of the point.
+ //!
Point(const double xv, const double yv);
+
+ //! @brief Comparison operator. Returns true if at same position.
+ //!
+ //! @param[in] rhs The point to compare with this one.
+ //! @return The result of the comparison.
+ //!
bool operator==(const Point& rhs) const;
+ //! @brief Comparison operator. Returns true if at different positions.
+ //!
+ //! @param[in] rhs The point to compare with this one.
+ //! @return The result of the comparison.
+ //!
bool operator!=(const Point& rhs) const;
+ //! @brief Comparison operator. Returns true if less-then rhs point.
+ //!
+ //! @note This operator is not particularly useful, but is defined
+ //! to allow std::set<Point>.
+ //!
+ //! @param[in] rhs The point to compare with this one.
+ //! @return The result of the comparison.
+ //!
+ bool operator<(const Point& rhs) const;
+ //! @brief Returns the x or y value of the point, given the dimension.
+ //!
+ //! @param[in] dimension The dimension: 0 for x, 1 for y.
+ //! @return The component of the point in that dimension.
+ double& operator[](const unsigned int dimension);
+ const double& operator[](const unsigned int dimension) const;
+
+ //! The x position.
double x;
+ //! The y position.
double y;
- int id;
+ //! The ID associated with this point.
+ unsigned int id;
+ //! The vertex number associated with this point.
+ unsigned short vn;
};
+//! Constant value representing an unassigned vertex number.
+//!
+static const unsigned short kUnassignedVertexNumber = 8;
+
+
+//! @brief A vector, represented by the Point class.
+//!
typedef Point Vector;
-typedef struct
+//! @brief A common interface used by the Polygon classes.
+//!
+class PolygonInterface
{
- int id;
- Point *ps;
- int pn;
-} Polygn;
-
-typedef Polygn PolyLine;
+ public:
+ //! @brief Constructor.
+ PolygonInterface() { }
+ //! @brief Destructor.
+ virtual ~PolygonInterface() { }
+ //! @brief Resets this to the empty polygon.
+ virtual void clear(void) = 0;
+ //! @brief Returns true if this polygon is empty.
+ virtual bool empty(void) const = 0;
+ //! @brief Returns the number of points in this polygon.
+ virtual size_t size(void) const = 0;
+ //! @brief Returns the ID value associated with this polygon.
+ virtual int id(void) const = 0;
+ //! @brief Returns a specific point in the polygon.
+ //! @param[in] index The array index of the point to be returned.
+ virtual const Point& at(size_t index) const = 0;
+ //! @brief Returns the bounding rectangle that contains this polygon.
+ //!
+ //! If a NULL pointer is passed for any of the arguments, then that
+ //! value is ignored and not returned.
+ //!
+ //! @param[out] minX The left hand side of the bounding box.
+ //! @param[out] minY The top of the bounding box.
+ //! @param[out] maxX The right hand side of the bounding box.
+ //! @param[out] maxY The bottom of the bounding box.
+ void getBoundingRect(double *minX, double *minY,
+ double *maxX, double *maxY) const;
+};
-typedef struct
+//! @brief A line between two points.
+//!
+class Edge
{
- Point a;
- Point b;
-} Edge;
+ public:
+ //! The first point.
+ Point a;
+ //! The second point.
+ Point b;
+};
+
+//! @brief A bounding box, represented with an Edge between top-left and
+//! bottom-right corners.
+//!
typedef Edge BBox;
+class Router;
+class ReferencingPolygon;
+
+
+//! @brief A dynamic Polygon, to which points can be easily added and removed.
+//!
+//! @note The Rectangle class can be used as an easy way of constructing a
+//! square or rectangular polygon.
+//!
+class Polygon : public PolygonInterface
+{
+ public:
+ //! @brief Constructs an empty polygon (with zero points).
+ Polygon();
+ //! @brief Constructs a new polygon with n points.
+ //!
+ //! A rectangle would be comprised of four point. An n segment
+ //! PolyLine (represented as a Polygon) would be comprised of n+1
+ //! points. Whether a particular Polygon is closed or not, depends
+ //! on whether it is a Polygon or Polyline. Shape polygons are always
+ //! considered to be closed, meaning the last point joins back to the
+ //! first point.
+ //!
+ //! @param[in] n Number of points in the polygon.
+ //!
+ Polygon(const int n);
+ //! @brief Constructs a new polygon from an existing Polygon.
+ //!
+ //! @param[in] poly An existing polygon to copy the new polygon from.
+ //!
+ Polygon(const PolygonInterface& poly);
+ //! @brief Resets this to the empty polygon.
+ void clear(void);
+ //! @brief Returns true if this polygon is empty.
+ bool empty(void) const;
+ //! @brief Returns the number of points in this polygon.
+ size_t size(void) const;
+ //! @brief Returns the ID value associated with this polygon.
+ int id(void) const;
+ //! @brief Returns a specific point in the polygon.
+ //! @param[in] index The array index of the point to be returned.
+ const Point& at(size_t index) const;
+ //! @brief Returns a simplified Polyline, where all collinear line
+ //! segments have been collapsed down into single line
+ //! segments.
+ //!
+ //! @return A new polyline with a simplified representation.
+ //!
+ Polygon simplify(void) const;
+ //! @brief Returns a curved approximation of this multi-segment
+ //! PolyLine, with the corners replaced by smooth Bezier
+ //! curves.
+ //!
+ //! This function does not do any further obstacle avoidance with the
+ //! curves produced. Hence, you would usually specify a curve_amount
+ //! in similar size to the space buffer around obstacles in the scene.
+ //! This way the curves will cut the corners around shapes but still
+ //! run within this buffer space.
+ //!
+ //! @param curve_amount Describes the distance along the end of each
+ //! line segment to turn into a curve.
+ //! @param closed Describes whether the Polygon should be
+ //! treated as closed. Defaults to false.
+ //! @return A new polyline (polygon) representing the curved path.
+ //! Its points represent endpoints of line segments and
+ //! Bezier spline control points. The Polygon::ts vector for
+ //! this returned polygon is populated with a character for
+ //! each point describing its type.
+ //! @sa ts
+ Polygon curvedPolyline(const double curve_amount,
+ const bool closed = false) const;
+ //! @brief Translates the polygon position by a relative amount.
+ //!
+ //! @param[in] xDist Distance to move polygon in the x dimension.
+ //! @param[in] yDist Distance to move polygon in the y dimension.
+ void translate(const double xDist, const double yDist);
+
+ //! @brief An ID for the polygon.
+ int _id;
+ //! @brief A vector of the points that make up the Polygon.
+ std::vector<Point> ps;
+ //! @brief If used, denotes whether the corresponding point in ps is
+ //! a move-to operation or a Bezier curve-to.
+ //!
+ //! Each character describes the drawing operation for the
+ //! corresponding point in the ps vector. Possible values are:
+ //! - 'M': A moveto operation, marks the first point;
+ //! - 'L': A lineto operation, is a line from the previous point to
+ //! the current point; or
+ //! - 'C': A curveto operation, three consecutive 'C' points
+ //! (along with the previous point) describe the control points
+ //! of a Bezier curve.
+ //! - 'Z': Closes the path (used for cluster boundaries).
+ //!
+ //! @note This vector will currently only be populated for polygons
+ //! returned by curvedPolyline().
+ std::vector<char> ts;
+};
+
+
+//! @brief A multi-segment line, represented with the Polygon class.
+//!
+typedef Polygon PolyLine;
+
+
+//! @brief A Polygon which just references its points from other Polygons.
+//!
+//! This type of Polygon is used to accurately represent cluster boundaries
+//! made up from the corner points of shapes.
+//!
+class ReferencingPolygon : public PolygonInterface
+{
+ public:
+ ReferencingPolygon();
+ ReferencingPolygon(const Polygon& poly, const Router *router);
+ void clear(void);
+ bool empty(void) const;
+ size_t size(void) const;
+ int id(void) const;
+ const Point& at(size_t index) const;
+
+ int _id;
+ std::vector<std::pair<const Polygon *, unsigned short> > ps;
+};
+
+
+//! @brief A Rectangle, a simpler way to define the polygon for square or
+//! rectangular shapes.
+//!
+class Rectangle : public Polygon
+{
+ public:
+ //! @brief Constructs a rectangular polygon given two opposing
+ //! corner points.
+ //!
+ //! @param[in] topLeft The first corner point of the rectangle.
+ //! @param[in] bottomRight The opposing corner point of the rectangle.
+ //!
+ Rectangle(const Point& topLeft, const Point& bottomRight);
+
+ //! @brief Constructs a rectangular polygon given the centre, width
+ //! and height.
+ //!
+ //! @param[in] centre The centre of the rectangle, specified as
+ //! a point.
+ //! @param[in] width The width of the rectangle.
+ //! @param[in] height The height of the rectangle.
+ //!
+ Rectangle(const Point& centre, const double width, const double height);
+};
+
+
}
#endif
diff --git a/src/libavoid/graph.cpp b/src/libavoid/graph.cpp
index 1970212df..728f8c085 100644
--- a/src/libavoid/graph.cpp
+++ b/src/libavoid/graph.cpp
@@ -2,56 +2,61 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
+#include <cmath>
+
#include "libavoid/debug.h"
#include "libavoid/graph.h"
#include "libavoid/connector.h"
#include "libavoid/geometry.h"
-#include "libavoid/polyutil.h"
#include "libavoid/timer.h"
#include "libavoid/vertices.h"
#include "libavoid/router.h"
+#include "libavoid/assertions.h"
-#include <math.h>
using std::pair;
namespace Avoid {
-EdgeInf::EdgeInf(VertInf *v1, VertInf *v2)
- : lstPrev(NULL)
- , lstNext(NULL)
- , _blocker(0)
- , _router(NULL)
- , _added(false)
- , _visible(false)
- , _v1(v1)
- , _v2(v2)
- , _dist(-1)
+EdgeInf::EdgeInf(VertInf *v1, VertInf *v2, const bool orthogonal)
+ : lstPrev(NULL),
+ lstNext(NULL),
+ _blocker(0),
+ _router(NULL),
+ _added(false),
+ _visible(false),
+ _orthogonal(orthogonal),
+ _v1(v1),
+ _v2(v2),
+ _dist(-1)
{
// Not passed NULL values.
- assert(v1 && v2);
+ COLA_ASSERT(v1 && v2);
// We are in the same instance
- assert(_v1->_router == _v2->_router);
+ COLA_ASSERT(_v1->_router == _v2->_router);
_router = _v1->_router;
_conns.clear();
@@ -67,25 +72,142 @@ EdgeInf::~EdgeInf()
}
+// Gives an order value between 0 and 3 for the point c, given the last
+// segment was from a to b. Returns the following value:
+// 0 : Point c is directly backwards from point b.
+// 1 : Point c is a left-hand 90 degree turn.
+// 2 : Point c is a right-hand 90 degree turn.
+// 3 : Point c is straight ahead (collinear).
+//
+static inline int orthogTurnOrder(const Point& a, const Point& b,
+ const Point& c)
+{
+ // We should only be calling this with orthogonal points,
+ COLA_ASSERT((c.x == b.x) || (c.y == b.y));
+ COLA_ASSERT((a.x == b.x) || (a.y == b.y));
+
+ int direction = vecDir(a, b, c);
+
+ if (direction > 0)
+ {
+ // Counterclockwise := left
+ return 1;
+ }
+ else if (direction < 0)
+ {
+ // Clockwise := right
+ return 2;
+ }
+
+ if (b.x == c.x)
+ {
+ if ( ((a.y < b.y) && (c.y < b.y)) ||
+ ((a.y > b.y) && (c.y > b.y)) )
+ {
+ // Behind.
+ return 0;
+ }
+ }
+ else
+ {
+ if ( ((a.x < b.x) && (c.x < b.x)) ||
+ ((a.x > b.x) && (c.x > b.x)) )
+ {
+ // Behind.
+ return 0;
+ }
+ }
+
+ // Ahead.
+ return 3;
+}
+
+
+// Returns a less than operation for a set exploration order for orthogonal
+// searching. Forward, then left, then right. Or if there is no previous
+// point, then the order is north, east, south, then west.
+// Note: This method assumes the two Edges that share a common point.
+bool EdgeInf::rotationLessThan(const VertInf *lastV, const EdgeInf *rhs) const
+{
+ if ((_v1 == rhs->_v1) && (_v2 == rhs->_v2))
+ {
+ // Effectively the same visibility edge, so they are equal.
+ return false;
+ }
+ VertInf *lhsV = NULL, *rhsV = NULL, *commonV = NULL;
+
+ // Determine common Point and the comparison point on the left- and
+ // the right-hand-side.
+ if (_v1 == rhs->_v1)
+ {
+ commonV = _v1;
+ lhsV = _v2;
+ rhsV = rhs->_v2;
+ }
+ else if (_v1 == rhs->_v2)
+ {
+ commonV = _v1;
+ lhsV = _v2;
+ rhsV = rhs->_v1;
+ }
+ else if (_v2 == rhs->_v1)
+ {
+ commonV = _v2;
+ lhsV = _v1;
+ rhsV = rhs->_v2;
+ }
+ else if (_v2 == rhs->_v2)
+ {
+ commonV = _v2;
+ lhsV = _v1;
+ rhsV = rhs->_v1;
+ }
+
+ const Point& lhsPt = lhsV->point;
+ const Point& rhsPt = rhsV->point;
+ const Point& commonPt = commonV->point;
+
+ // If no lastPt, use one directly to the left;
+ Point lastPt = (lastV) ? lastV->point : Point(commonPt.x - 10, commonPt.y);
+
+ int lhsVal = orthogTurnOrder(lastPt, commonPt, lhsPt);
+ int rhsVal = orthogTurnOrder(lastPt, commonPt, rhsPt);
+
+ return lhsVal < rhsVal;
+}
+
+
void EdgeInf::makeActive(void)
{
- assert(_added == false);
+ COLA_ASSERT(_added == false);
- if (_visible)
+ if (_orthogonal)
{
- _router->visGraph.addEdge(this);
- _pos1 = _v1->visList.insert(_v1->visList.begin(), this);
- _v1->visListSize++;
- _pos2 = _v2->visList.insert(_v2->visList.begin(), this);
- _v2->visListSize++;
+ COLA_ASSERT(_visible);
+ _router->visOrthogGraph.addEdge(this);
+ _pos1 = _v1->orthogVisList.insert(_v1->orthogVisList.begin(), this);
+ _v1->orthogVisListSize++;
+ _pos2 = _v2->orthogVisList.insert(_v2->orthogVisList.begin(), this);
+ _v2->orthogVisListSize++;
}
- else // if (invisible)
+ else
{
- _router->invisGraph.addEdge(this);
- _pos1 = _v1->invisList.insert(_v1->invisList.begin(), this);
- _v1->invisListSize++;
- _pos2 = _v2->invisList.insert(_v2->invisList.begin(), this);
- _v2->invisListSize++;
+ if (_visible)
+ {
+ _router->visGraph.addEdge(this);
+ _pos1 = _v1->visList.insert(_v1->visList.begin(), this);
+ _v1->visListSize++;
+ _pos2 = _v2->visList.insert(_v2->visList.begin(), this);
+ _v2->visListSize++;
+ }
+ else // if (invisible)
+ {
+ _router->invisGraph.addEdge(this);
+ _pos1 = _v1->invisList.insert(_v1->invisList.begin(), this);
+ _v1->invisListSize++;
+ _pos2 = _v2->invisList.insert(_v2->invisList.begin(), this);
+ _v2->invisListSize++;
+ }
}
_added = true;
}
@@ -93,23 +215,35 @@ void EdgeInf::makeActive(void)
void EdgeInf::makeInactive(void)
{
- assert(_added == true);
+ COLA_ASSERT(_added == true);
- if (_visible)
+ if (_orthogonal)
{
- _router->visGraph.removeEdge(this);
- _v1->visList.erase(_pos1);
- _v1->visListSize--;
- _v2->visList.erase(_pos2);
- _v2->visListSize--;
+ COLA_ASSERT(_visible);
+ _router->visOrthogGraph.removeEdge(this);
+ _v1->orthogVisList.erase(_pos1);
+ _v1->orthogVisListSize--;
+ _v2->orthogVisList.erase(_pos2);
+ _v2->orthogVisListSize--;
}
- else // if (invisible)
+ else
{
- _router->invisGraph.removeEdge(this);
- _v1->invisList.erase(_pos1);
- _v1->invisListSize--;
- _v2->invisList.erase(_pos2);
- _v2->invisListSize--;
+ if (_visible)
+ {
+ _router->visGraph.removeEdge(this);
+ _v1->visList.erase(_pos1);
+ _v1->visListSize--;
+ _v2->visList.erase(_pos2);
+ _v2->visListSize--;
+ }
+ else // if (invisible)
+ {
+ _router->invisGraph.removeEdge(this);
+ _v1->invisList.erase(_pos1);
+ _v1->invisListSize--;
+ _v2->invisList.erase(_pos2);
+ _v2->invisListSize--;
+ }
}
_blocker = 0;
_conns.clear();
@@ -119,11 +253,12 @@ void EdgeInf::makeInactive(void)
void EdgeInf::setDist(double dist)
{
- //assert(dist != 0);
+ //COLA_ASSERT(dist != 0);
if (_added && !_visible)
{
makeInactive();
+ COLA_ASSERT(!_added);
}
if (!_added)
{
@@ -135,6 +270,12 @@ void EdgeInf::setDist(double dist)
}
+bool EdgeInf::added(void)
+{
+ return _added;
+}
+
+
void EdgeInf::alertConns(void)
{
FlagList::iterator finish = _conns.end();
@@ -161,11 +302,12 @@ void EdgeInf::addCycleBlocker(void)
void EdgeInf::addBlocker(int b)
{
- assert(_router->InvisibilityGrph);
+ COLA_ASSERT(_router->InvisibilityGrph);
if (_added && _visible)
{
makeInactive();
+ COLA_ASSERT(!_added);
}
if (!_added)
{
@@ -232,8 +374,11 @@ void EdgeInf::checkVis(void)
cone1 = inValidRegion(_router->IgnoreRegions, i->shPrev->point,
iPoint, i->shNext->point, jPoint);
}
- else
+ else if (_router->IgnoreRegions == false)
{
+ // If Ignoring regions then this case is already caught by
+ // the invalid regions, so only check it when not ignoring
+ // regions.
ShapeSet& ss = _router->contains[iID];
if ((jID.isShape) && (ss.find(jID.objID) != ss.end()))
@@ -253,8 +398,11 @@ void EdgeInf::checkVis(void)
cone2 = inValidRegion(_router->IgnoreRegions, j->shPrev->point,
jPoint, j->shNext->point, iPoint);
}
- else
+ else if (_router->IgnoreRegions == false)
{
+ // If Ignoring regions then this case is already caught by
+ // the invalid regions, so only check it when not ignoring
+ // regions.
ShapeSet& ss = _router->contains[jID];
if ((iID.isShape) && (ss.find(iID.objID) != ss.end()))
@@ -274,7 +422,7 @@ void EdgeInf::checkVis(void)
db_printf("\tSetting visibility edge... \n\t\t");
db_print();
- double d = dist(iPoint, jPoint);
+ double d = euclideanDist(iPoint, jPoint);
setDist(d);
@@ -316,26 +464,39 @@ int EdgeInf::firstBlocker(void)
}
VertInf *last = _router->vertices.end();
+ unsigned int lastId = 0;
+ bool seenIntersectionAtEndpoint = false;
for (VertInf *k = _router->vertices.shapesBegin(); k != last; )
{
VertID kID = k->id;
- if ((ss.find(kID.objID) != ss.end()))
+ if (k->id == dummyOrthogID)
+ {
+ // Don't include orthogonal dummy vertices.
+ k = k->lstNext;
+ continue;
+ }
+ if (kID.objID != lastId)
{
- unsigned int shapeID = kID.objID;
- db_printf("Endpoint is inside shape %u so ignore shape edges.\n",
- kID.objID);
- // One of the endpoints is inside this shape so ignore it.
- while ((k != last) && (k->id.objID == shapeID))
+ if ((ss.find(kID.objID) != ss.end()))
{
- // And skip the other vertices from this shape.
- k = k->lstNext;
+ unsigned int shapeID = kID.objID;
+ db_printf("Endpoint is inside shape %u so ignore shape "
+ "edges.\n", kID.objID);
+ // One of the endpoints is inside this shape so ignore it.
+ while ((k != last) && (k->id.objID == shapeID))
+ {
+ // And skip the other vertices from this shape.
+ k = k->lstNext;
+ }
+ continue;
}
- continue;
+ seenIntersectionAtEndpoint = false;
+ lastId = kID.objID;
}
Point& kPoint = k->point;
Point& kPrevPoint = k->shPrev->point;
-
- if (segmentIntersect(pti, ptj, kPrevPoint, kPoint))
+ if (segmentShapeIntersect(pti, ptj, kPrevPoint, kPoint,
+ seenIntersectionAtEndpoint))
{
ss.clear();
return kID.objID;
@@ -358,9 +519,17 @@ bool EdgeInf::isBetween(VertInf *i, VertInf *j)
}
+ // Returns true if this edge is a vertical or horizontal line segment.
+bool EdgeInf::isOrthogonal(void) const
+{
+ return ((_v1->point.x == _v2->point.x) ||
+ (_v1->point.y == _v2->point.y));
+}
+
+
VertInf *EdgeInf::otherVert(VertInf *vert)
{
- assert((vert == _v1) || (vert == _v2));
+ COLA_ASSERT((vert == _v1) || (vert == _v2));
if (vert == _v1)
{
@@ -372,12 +541,17 @@ VertInf *EdgeInf::otherVert(VertInf *vert)
EdgeInf *EdgeInf::checkEdgeVisibility(VertInf *i, VertInf *j, bool knownNew)
{
+ // This is for polyline routing, so check we're not
+ // considering orthogonal vertices.
+ COLA_ASSERT(i->id != dummyOrthogID);
+ COLA_ASSERT(j->id != dummyOrthogID);
+
Router *router = i->_router;
EdgeInf *edge = NULL;
if (knownNew)
{
- assert(existingEdge(i, j) == NULL);
+ COLA_ASSERT(existingEdge(i, j) == NULL);
edge = new EdgeInf(i, j);
}
else
@@ -399,22 +573,17 @@ EdgeInf *EdgeInf::checkEdgeVisibility(VertInf *i, VertInf *j, bool knownNew)
}
+ // XXX: This function is ineffecient, and shouldn't even really be
+ // required.
EdgeInf *EdgeInf::existingEdge(VertInf *i, VertInf *j)
{
VertInf *selected = NULL;
- if (i->visListSize <= j->visListSize)
- {
- selected = i;
- }
- else
- {
- selected = j;
- }
-
+ // Look through poly-line visibility edges.
+ selected = (i->visListSize <= j->visListSize) ? i : j;
EdgeInfList& visList = selected->visList;
- EdgeInfList::iterator finish = visList.end();
- for (EdgeInfList::iterator edge = visList.begin(); edge != finish;
+ EdgeInfList::const_iterator finish = visList.end();
+ for (EdgeInfList::const_iterator edge = visList.begin(); edge != finish;
++edge)
{
if ((*edge)->isBetween(i, j))
@@ -423,18 +592,24 @@ EdgeInf *EdgeInf::existingEdge(VertInf *i, VertInf *j)
}
}
- if (i->invisListSize <= j->invisListSize)
- {
- selected = i;
- }
- else
+ // Look through orthogonal visbility edges.
+ selected = (i->orthogVisListSize <= j->orthogVisListSize) ? i : j;
+ EdgeInfList& orthogVisList = selected->orthogVisList;
+ finish = orthogVisList.end();
+ for (EdgeInfList::const_iterator edge = orthogVisList.begin();
+ edge != finish; ++edge)
{
- selected = j;
+ if ((*edge)->isBetween(i, j))
+ {
+ return (*edge);
+ }
}
+ // Look through poly-line invisbility edges.
+ selected = (i->invisListSize <= j->invisListSize) ? i : j;
EdgeInfList& invisList = selected->invisList;
finish = invisList.end();
- for (EdgeInfList::iterator edge = invisList.begin(); edge != finish;
+ for (EdgeInfList::const_iterator edge = invisList.begin(); edge != finish;
++edge)
{
if ((*edge)->isBetween(i, j))
@@ -450,19 +625,45 @@ EdgeInf *EdgeInf::existingEdge(VertInf *i, VertInf *j)
//===========================================================================
-EdgeList::EdgeList()
- : _firstEdge(NULL)
- , _lastEdge(NULL)
- , _count(0)
+EdgeList::EdgeList(bool orthogonal)
+ : _orthogonal(orthogonal),
+ _firstEdge(NULL),
+ _lastEdge(NULL),
+ _count(0)
+{
+}
+
+
+EdgeList::~EdgeList()
+{
+ clear();
+}
+
+
+void EdgeList::clear(void)
+{
+ while (_firstEdge)
+ {
+ delete _firstEdge;
+ }
+ COLA_ASSERT(_count == 0);
+ _lastEdge = NULL;
+}
+
+
+int EdgeList::size(void) const
{
+ return _count;
}
void EdgeList::addEdge(EdgeInf *edge)
{
+ COLA_ASSERT(!_orthogonal || edge->isOrthogonal());
+
if (_firstEdge == NULL)
{
- assert(_lastEdge == NULL);
+ COLA_ASSERT(_lastEdge == NULL);
_lastEdge = edge;
_firstEdge = edge;
@@ -472,7 +673,7 @@ void EdgeList::addEdge(EdgeInf *edge)
}
else
{
- assert(_lastEdge != NULL);
+ COLA_ASSERT(_lastEdge != NULL);
_lastEdge->lstNext = edge;
edge->lstPrev = _lastEdge;
diff --git a/src/libavoid/graph.h b/src/libavoid/graph.h
index 05f03a988..db776b80b 100644
--- a/src/libavoid/graph.h
+++ b/src/libavoid/graph.h
@@ -2,24 +2,27 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
#ifndef AVOID_GRAPH_H
#define AVOID_GRAPH_H
@@ -31,6 +34,7 @@
namespace Avoid {
+
class ConnRef;
class Router;
@@ -42,8 +46,8 @@ typedef std::list<bool *> FlagList;
class EdgeInf
{
public:
- EdgeInf(VertInf *v1, VertInf *v2);
- virtual ~EdgeInf();
+ EdgeInf(VertInf *v1, VertInf *v2, const bool orthogonal = false);
+ ~EdgeInf();
inline double getDist(void)
{
return _dist;
@@ -53,6 +57,9 @@ class EdgeInf
void addConn(bool *flag);
void addCycleBlocker(void);
void addBlocker(int b);
+ bool added(void);
+ bool isOrthogonal(void) const;
+ bool rotationLessThan(const VertInf* last, const EdgeInf *rhs) const;
std::pair<VertID, VertID> ids(void);
std::pair<Point, Point> points(void);
@@ -70,6 +77,7 @@ class EdgeInf
Router *_router;
bool _added;
bool _visible;
+ bool _orthogonal;
VertInf *_v1;
VertInf *_v2;
EdgeInfList::iterator _pos1;
@@ -87,12 +95,17 @@ class EdgeInf
class EdgeList
{
public:
- EdgeList();
- void addEdge(EdgeInf *edge);
- void removeEdge(EdgeInf *edge);
+ friend class EdgeInf;
+ EdgeList(bool orthogonal = false);
+ ~EdgeList();
+ void clear(void);
EdgeInf *begin(void);
EdgeInf *end(void);
+ int size(void) const;
private:
+ void addEdge(EdgeInf *edge);
+ void removeEdge(EdgeInf *edge);
+ bool _orthogonal;
EdgeInf *_firstEdge;
EdgeInf *_lastEdge;
unsigned int _count;
diff --git a/src/libavoid/libavoid.h b/src/libavoid/libavoid.h
index d598c6c74..1d4cd1fdc 100644
--- a/src/libavoid/libavoid.h
+++ b/src/libavoid/libavoid.h
@@ -2,29 +2,37 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+//! @file libavoid.h
+//! @brief Standard libavoid include file which includes all libavoid
+//! header files.
+
+//! @namespace Avoid
+//! @brief The namespace used by code in the libavoid library.
+
#ifndef AVOID_LIBAVOID_H
#define AVOID_LIBAVOID_H
#include "libavoid/geomtypes.h"
-#include "libavoid/polyutil.h"
#include "libavoid/connector.h"
#include "libavoid/graph.h"
#include "libavoid/debug.h"
@@ -32,7 +40,6 @@
#include "libavoid/makepath.h"
#include "libavoid/vertices.h"
#include "libavoid/visibility.h"
-#include "libavoid/static.h"
#include "libavoid/router.h"
#endif
diff --git a/src/libavoid/makefile b/src/libavoid/makefile
new file mode 100644
index 000000000..e4f83a52d
--- /dev/null
+++ b/src/libavoid/makefile
@@ -0,0 +1,17 @@
+# Convenience stub makefile to call the real Makefile.
+
+
+
+OBJEXT = o
+
+# Explicit so that it's the default rule.
+all:
+ cd .. && $(MAKE) libavoid/all
+
+clean %.a %.$(OBJEXT):
+ cd .. && $(MAKE) libavoid/$@
+
+.PHONY: all clean
+
+.SUFFIXES:
+.SUFFIXES: .a .$(OBJEXT)
diff --git a/src/libavoid/makepath.cpp b/src/libavoid/makepath.cpp
index 3a57f8e4e..4e15dbca9 100644
--- a/src/libavoid/makepath.cpp
+++ b/src/libavoid/makepath.cpp
@@ -2,43 +2,105 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
*
- * --------------------------------------------------------------------
- * The dijkstraPath function is based on code published and described
- * in "Algorithms in C" (Second Edition), 1990, by Robert Sedgewick.
- * --------------------------------------------------------------------
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
+#include <algorithm>
+#include <vector>
+#include <climits>
+#define _USE_MATH_DEFINES
+#include <cmath>
+
#include "libavoid/vertices.h"
#include "libavoid/makepath.h"
#include "libavoid/geometry.h"
#include "libavoid/connector.h"
#include "libavoid/graph.h"
#include "libavoid/router.h"
-#include <algorithm>
-#include <vector>
-#include <climits>
-#include <limits.h>
-#include <math.h>
+#include "libavoid/debug.h"
+#include "libavoid/assertions.h"
+#ifdef ASTAR_DEBUG
+ #include <SDL_gfxPrimitives.h>
+#endif
namespace Avoid {
+class ANode
+{
+ public:
+ VertInf* inf;
+ double g; // Gone
+ double h; // Heuristic
+ double f; // Formula f = g + h
+
+ int prevIndex; // Index into DONE for the previous ANode.
+ int timeStamp; // Timestamp used to determine explaration order of
+ // seemingly equal paths during orthogonal routing.
+
+ ANode(VertInf *vinf, int time)
+ : inf(vinf),
+ g(0),
+ h(0),
+ f(0),
+ prevIndex(-1),
+ timeStamp(time)
+ {
+ }
+ ANode()
+ : inf(NULL),
+ g(0),
+ h(0),
+ f(0),
+ prevIndex(-1),
+ timeStamp(-1)
+ {
+ }
+};
+
+
+// This returns the opposite result (>) so that when used with stl::make_heap,
+// the head node of the heap will be the smallest value, rather than the
+// largest. This saves us from having to sort the heap (and then reorder
+// it back into a heap) when getting the next node to examine. This way we
+// get better complexity -- logarithmic pushs and pops to the heap.
+//
+bool operator<(const ANode &a, const ANode &b)
+{
+ if (a.f != b.f)
+ {
+ return a.f > b.f;
+ }
+ if (a.timeStamp != b.timeStamp)
+ {
+ // Tiebreaker, if two paths have equal cost, then choose the one with
+ // the highest timeStamp. This corresponds to the furthest point
+ // explored along the straight-line path. When exploring we give the
+ // directions the following timeStamps; left:1, right:2 and forward:3,
+ // then we always try to explore forward first.
+ return a.timeStamp < b.timeStamp;
+ }
+ COLA_ASSERT(a.prevIndex != b.prevIndex);
+ return a.prevIndex > b.prevIndex;
+}
+
static double Dot(const Point& l, const Point& r)
{
@@ -56,6 +118,13 @@ static double CrossLength(const Point& l, const Point& r)
//
static double angleBetween(const Point& p1, const Point& p2, const Point& p3)
{
+ if ((p1.x == p2.x && p1.y == p2.y) || (p2.x == p3.x && p2.y == p3.y))
+ {
+ // If two of the points are the same, then we can't say anything
+ // about the angle between. Treat them as being collinear.
+ return M_PI;
+ }
+
Point v1(p1.x - p2.x, p1.y - p2.y);
Point v2(p3.x - p2.x, p3.y - p2.y);
@@ -63,21 +132,45 @@ static double angleBetween(const Point& p1, const Point& p2, const Point& p3)
}
+// Construct a temporary Polygon path given several VertInf's for a connector.
+//
+static void constructPolygonPath(Polygon& connRoute, VertInf *inf2,
+ VertInf *inf3, std::vector<ANode>& done, int inf1Index)
+{
+ int routeSize = 2;
+ for (int curr = inf1Index; curr >= 0; curr = done[curr].prevIndex)
+ {
+ routeSize += 1;
+ }
+ connRoute.ps.resize(routeSize);
+ connRoute.ps[routeSize - 1] = inf3->point;
+ connRoute.ps[routeSize - 2] = inf2->point;
+ routeSize -= 3;
+ for (int curr = inf1Index; curr >= 0; curr = done[curr].prevIndex)
+ {
+ connRoute.ps[routeSize] = done[curr].inf->point;
+ routeSize -= 1;
+ }
+}
+
+
// Given the two points for a new segment of a path (inf2 & inf3)
// as well as the distance between these points (dist), as well as
// possibly the previous point (inf1) [from inf1--inf2], return a
// cost associated with this route.
//
-double cost(ConnRef *lineRef, const double dist, VertInf *inf1,
- VertInf *inf2, VertInf *inf3)
+static double cost(ConnRef *lineRef, const double dist, VertInf *inf2,
+ VertInf *inf3, std::vector<ANode>& done, int inf1Index)
{
+ VertInf *inf1 = (inf1Index >= 0) ? done[inf1Index].inf : NULL;
double result = dist;
+ Polygon connRoute;
Router *router = inf2->_router;
- if (inf2->pathNext != NULL)
+ if (inf1 != NULL)
{
- double& angle_penalty = router->angle_penalty;
- double& segmt_penalty = router->segmt_penalty;
+ const double angle_penalty = router->routingPenalty(anglePenalty);
+ const double segmt_penalty = router->routingPenalty(segmentPenalty);
// This is not the first segment, so there is a bend
// between it and the last one in the existing path.
@@ -89,29 +182,83 @@ double cost(ConnRef *lineRef, const double dist, VertInf *inf1,
double rad = M_PI - angleBetween(p1, p2, p3);
- // Make `xval' between 0--10 then take its log so small
- // angles are not penalised as much as large ones.
- //
- double xval = rad * 10 / M_PI;
- double yval = xval * log10(xval + 1) / 10.5;
- result += (angle_penalty * yval);
- //printf("deg from straight: %g\tpenalty: %g\n",
- // rad * 180 / M_PI, (angle_penalty * yval));
-
- // Don't penalise as an extra segment if there is no turn.
- if (rad > 0.0005)
+ if (rad > 0)
+ {
+ // Make `xval' between 0--10 then take its log so small
+ // angles are not penalised as much as large ones.
+ //
+ double xval = rad * 10 / M_PI;
+ double yval = xval * log10(xval + 1) / 10.5;
+ result += (angle_penalty * yval);
+ //db_printf("deg from straight: %g\tpenalty: %g\n",
+ // rad * 180 / M_PI, (angle_penalty * yval));
+ }
+
+ if (rad == M_PI)
{
+ // Needs to double back
+ result += (2 * segmt_penalty);
+ }
+ else if (rad > 0)
+ {
+ // Only penalise as an extra segment if the two
+ // segments are not collinear.
result += segmt_penalty;
}
}
}
- if (lineRef->doesHateCrossings() && (router->crossing_penalty > 0))
+ if (!router->_inCrossingPenaltyReroutingStage)
{
- Point& a1 = inf2->point;
- Point& a2 = inf3->point;
+ // Return here if we ar not in the postprocessing stage
+ return result;
+ }
- ConnRefList::iterator curr, finish = router->connRefs.end();
+ const double cluster_crossing_penalty =
+ router->routingPenalty(clusterCrossingPenalty);
+ // XXX: Clustered routing doesn't yet work with orthogonal connectors.
+ if (router->ClusteredRouting && !router->clusterRefs.empty() &&
+ (cluster_crossing_penalty > 0) &&
+ (lineRef->routingType() != ConnType_Orthogonal))
+ {
+ if (connRoute.empty())
+ {
+ constructPolygonPath(connRoute, inf2, inf3, done, inf1Index);
+ }
+ // There are clusters so do cluster routing.
+ for (ClusterRefList::const_iterator cl = router->clusterRefs.begin();
+ cl != router->clusterRefs.end(); ++cl)
+ {
+ ReferencingPolygon& cBoundary = (*cl)->polygon();
+ COLA_ASSERT(cBoundary.ps[0] != cBoundary.ps[cBoundary.size() - 1]);
+ for (size_t j = 0; j < cBoundary.size(); ++j)
+ {
+ // Cluster boundary points should correspond to shape
+ // vertices and hence already be in the list of vertices.
+ COLA_ASSERT(router->vertices.getVertexByPos(cBoundary.at(j))!=NULL);
+ }
+
+ bool isConn = false;
+ Polygon dynamic_c_boundary(cBoundary);
+ Polygon dynamic_conn_route(connRoute);
+ const bool finalSegment = (inf3 == lineRef->dst());
+ CrossingsInfoPair crossings = countRealCrossings(
+ dynamic_c_boundary, isConn, dynamic_conn_route,
+ connRoute.size() - 1, true, finalSegment);
+ result += (crossings.first * cluster_crossing_penalty);
+ }
+ }
+
+ const double shared_path_penalty =
+ router->routingPenalty(fixedSharedPathPenalty);
+ if (shared_path_penalty > 0)
+ {
+ // Penalises shared paths, except if the connectors shared an endpoint.
+ if (connRoute.empty())
+ {
+ constructPolygonPath(connRoute, inf2, inf3, done, inf1Index);
+ }
+ ConnRefList::const_iterator curr, finish = router->connRefs.end();
for (curr = router->connRefs.begin(); curr != finish; ++curr)
{
ConnRef *connRef = *curr;
@@ -120,306 +267,237 @@ double cost(ConnRef *lineRef, const double dist, VertInf *inf1,
{
continue;
}
- Avoid::PolyLine& route2 = connRef->route();
- for (int j = 1; j < route2.pn; ++j)
- {
- Avoid::Point& b1 = route2.ps[j - 1];
- Avoid::Point& b2 = route2.ps[j];
+ const Avoid::PolyLine& route2 = connRef->route();
- if (((a1 == b1) && (a2 == b2)) ||
- ((a2 == b1) && (a1 == b2)))
- {
- // Route along same segment: no penalty. We detect
- // crossovers when we see the segments diverge.
- continue;
- }
-
- if ((a2 == b2) || (a2 == b1) || (b2 == a1))
- {
- // Each crossing that is at a vertex in the
- // visibility graph gets noticed four times.
- // We ignore three of these cases.
- // This also catches the case of a shared path,
- // but this is one that terminates at a common
- // endpoint, so we don't care about it.
- continue;
- }
-
- if (a1 == b1)
- {
- if (j == 1)
- {
- // common source point.
- continue;
- }
- Avoid::Point& b0 = route2.ps[j - 2];
- // The segments share an endpoint -- a1==b1.
- if (a2 == b0)
- {
- // a2 is not a split, continue.
- continue;
- }
-
- // If here, then we know that a2 != b2
- // And a2 and its pair in b are a split.
- assert(a2 != b2);
-
- if (inf2->pathNext == NULL)
- {
- continue;
- }
- Avoid::Point& a0 = inf1->point;
-
- if ((a0 == b0) || (a0 == b2))
- {
- //printf("Shared path... ");
- bool normal = (a0 == b0) ? true : false;
- // Determine direction we have to look through
- // the points of connector b.
- int dir = normal ? -1 : 1;
-
- int traceJ = j - 1 + dir;
-
- int endCornerSide = Avoid::cornerSide(
- a0, a1, a2, normal ? b2 : b0);
-
-
- VertInf *traceInf1 = inf2->pathNext;
- VertInf *traceInf2 = inf2;
- VertInf *traceInf3 = inf3;
- while (traceInf1 &&
- (traceJ >= 0) && (traceJ < route2.pn) &&
- (traceInf1->point == route2.ps[traceJ]))
- {
- traceInf3 = traceInf2;
- traceInf2 = traceInf1;
- traceInf1 = traceInf1->pathNext;
- traceJ += dir;
- }
-
- if (!traceInf1 ||
- (traceJ < 0) || (traceJ >= route2.pn))
- {
- //printf("common source or destination.\n");
- // The connectors have a shared path, but it
- // comes from a common source point.
- // XXX: There might be a better way to
- // check this by asking the connectors
- // for the IDs of the attached shapes.
- continue;
- }
-
- int startCornerSide = Avoid::cornerSide(
- traceInf1->point, traceInf2->point,
- traceInf3->point, route2.ps[traceJ]);
-
- if (endCornerSide != startCornerSide)
- {
- //printf("crosses.\n");
- result += router->crossing_penalty;
- }
- else
- {
- //printf("doesn't cross.\n");
- }
- }
- else
- {
- // The connectors cross or touch at this point.
- //printf("Cross or touch at point... ");
-
- int side1 = Avoid::cornerSide(a0, a1, a2, b0);
- int side2 = Avoid::cornerSide(a0, a1, a2, b2);
-
- if (side1 != side2)
- {
- //printf("cross.\n");
- // The connectors cross at this point.
- result += router->crossing_penalty;
- }
- else
- {
- //printf("touch.\n");
- // The connectors touch at this point.
- }
- }
- continue;
- }
+ bool isConn = true;
+ Polygon dynamic_route2(route2);
+ Polygon dynamic_conn_route(connRoute);
+ CrossingsInfoPair crossings = countRealCrossings(
+ dynamic_route2, isConn, dynamic_conn_route,
+ connRoute.size() - 1, false, false, NULL, NULL,
+ connRef, lineRef);
+
+ if ((crossings.second & CROSSING_SHARES_PATH) &&
+ (crossings.second & CROSSING_SHARES_FIXED_SEGMENT) &&
+ !(crossings.second & CROSSING_SHARES_PATH_AT_END))
+ {
+ // Penalise unecessary shared paths in the middle of
+ // connectors.
+ result += shared_path_penalty;
+ }
+ }
+ }
- double xc, yc;
- int intersectResult = Avoid::segmentIntersectPoint(
- a1, a2, b1, b2, &xc, &yc);
+ const double crossing_penalty = router->routingPenalty(crossingPenalty);
+ if (lineRef->doesHateCrossings() && (crossing_penalty > 0))
+ {
+ if (connRoute.empty())
+ {
+ constructPolygonPath(connRoute, inf2, inf3, done, inf1Index);
+ }
+ ConnRefList::const_iterator curr, finish = router->connRefs.end();
+ for (curr = router->connRefs.begin(); curr != finish; ++curr)
+ {
+ ConnRef *connRef = *curr;
- if (intersectResult == Avoid::DO_INTERSECT)
- {
- result += router->crossing_penalty;
- }
+ if (connRef->id() == lineRef->id())
+ {
+ continue;
}
+ const Avoid::PolyLine& route2 = connRef->route();
+
+ bool isConn = true;
+ Polygon dynamic_route2(route2);
+ Polygon dynamic_conn_route(connRoute);
+ CrossingsInfoPair crossings = countRealCrossings(
+ dynamic_route2, isConn, dynamic_conn_route,
+ connRoute.size() - 1, true);
+ result += (crossings.first * crossing_penalty);
}
}
-
+
return result;
}
-// Returns the best path from src to tar using the cost function.
-//
-// The path is worked out via Dijkstra's algorithm, and is encoded via
-// pathNext links in each of the VerInfs along the path.
-//
-// Based on the code of 'matrixpfs'.
-//
-static void dijkstraPath(ConnRef *lineRef, VertInf *src, VertInf *tar)
+static double estimatedCost(ConnRef *lineRef, const Point *last,
+ const Point& a, const Point& b)
{
- Router *router = src->_router;
-
- double unseen = (double) __INT_MAX__;
-
- // initialize arrays
- VertInf *finish = router->vertices.end();
- for (VertInf *t = router->vertices.connsBegin(); t != finish; t = t->lstNext)
+ if (lineRef->routingType() == ConnType_PolyLine)
{
- t->pathNext = NULL;
- t->pathDist = -unseen;
+ return euclideanDist(a, b);
}
-
- VertInf *min = src;
- while (min != tar)
+ else // Orthogonal
{
- VertInf *k = min;
- min = NULL;
-
- k->pathDist *= -1;
- if (k->pathDist == unseen)
+ // XXX: This currently just takes into account the compulsory
+ // bend but will have to be updated when port direction
+ // information is available.
+ int num_penalties = 0;
+ double xmove = b.x - a.x;
+ double ymove = b.y - a.y;
+ if (!last)
{
- k->pathDist = 0;
- }
-
- EdgeInfList& visList = k->visList;
- EdgeInfList::iterator finish = visList.end();
- for (EdgeInfList::iterator edge = visList.begin(); edge != finish;
- ++edge)
- {
- VertInf *t = (*edge)->otherVert(k);
- VertID tID = t->id;
-
- // Only check shape verticies, or endpoints.
- if ((t->pathDist < 0) &&
- ((tID.objID == src->id.objID) || tID.isShape))
+ // Just two points.
+ if ((xmove != 0) && (ymove != 0))
{
- double kt_dist = (*edge)->getDist();
- double priority = k->pathDist +
- cost(lineRef, kt_dist, k->pathNext, k, t);
-
- if ((kt_dist != 0) && (t->pathDist < -priority))
- {
- t->pathDist = -priority;
- t->pathNext = k;
- }
- if ((min == NULL) || (t->pathDist > min->pathDist))
- {
- min = t;
- }
+ num_penalties += 1;
}
}
- EdgeInfList& invisList = k->invisList;
- finish = invisList.end();
- for (EdgeInfList::iterator edge = invisList.begin(); edge != finish;
- ++edge)
+ else
{
- VertInf *t = (*edge)->otherVert(k);
- VertID tID = t->id;
-
- // Only check shape verticies, or endpoints.
- if ((t->pathDist < 0) &&
- ((tID.objID == src->id.objID) || tID.isShape > 0))
+ // We have three points, so we know the direction of the
+ // previous segment.
+ double rad = M_PI - angleBetween(*last, a, b);
+ if (rad > (M_PI / 2))
{
- if ((min == NULL) || (t->pathDist > min->pathDist))
- {
- min = t;
- }
+ // Target point is back in the direction of the first point,
+ // so at least two bends are required.
+ num_penalties += 2;
+ }
+ else if (rad > 0)
+ {
+ // To the side, so at least one bend.
+ num_penalties += 1;
}
}
+ double penalty = num_penalties *
+ lineRef->router()->routingPenalty(segmentPenalty);
+
+ return manhattanDist(a, b) + penalty;
}
}
-class ANode
+class CmpVisEdgeRotation
{
public:
- VertInf* inf;
- double g; // Gone
- double h; // Heuristic
- double f; // Formula f = g + h
- VertInf *pp;
-
- ANode(VertInf *vinf)
- : inf(vinf)
- , g(0)
- , h(0)
- , f(0)
- , pp(NULL)
+ CmpVisEdgeRotation(const VertInf* lastPt)
+ : _lastPt(lastPt)
{
}
- ANode()
- : inf(NULL)
- , g(0)
- , h(0)
- , f(0)
- , pp(NULL)
+ bool operator() (const EdgeInf* u, const EdgeInf* v) const
{
+ return u->rotationLessThan(_lastPt, v);
}
+ private:
+ const VertInf *_lastPt;
};
-bool operator<(const ANode &a, const ANode &b)
-{
- return a.f < b.f;
-}
-
-
-bool operator>(const ANode &a, const ANode &b)
-{
- return a.f > b.f;
-}
-
// Returns the best path from src to tar using the cost function.
//
// The path is worked out using the aStar algorithm, and is encoded via
-// pathNext links in each of the VerInfs along the path.
+// prevIndex values for each ANode which point back to the previous ANode's
+// position in the DONE vector. At completion, this order is written into
+// the pathNext links in each of the VerInfs along the path.
//
// The aStar STL code is based on public domain code available on the
// internet.
//
-static void aStarPath(ConnRef *lineRef, VertInf *src, VertInf *tar)
+static void aStarPath(ConnRef *lineRef, VertInf *src, VertInf *tar,
+ VertInf *start)
{
+ bool isOrthogonal = (lineRef->routingType() == ConnType_Orthogonal);
+
+ double (*dist)(const Point& a, const Point& b) =
+ (isOrthogonal) ? manhattanDist : euclideanDist;
+
std::vector<ANode> PENDING; // STL Vectors chosen because of rapid
std::vector<ANode> DONE; // insertions/deletions at back,
ANode Node, BestNode; // Temporary Node and BestNode
bool bNodeFound = false; // Flag if node is found in container
+ int timestamp = 1;
- tar->pathNext = NULL;
+ if (start == NULL)
+ {
+ start = src;
+ }
+
+ Router *router = lineRef->router();
+ if (router->RubberBandRouting && (start != src))
+ {
+ COLA_ASSERT(router->IgnoreRegions == true);
+
+ const PolyLine& currRoute = lineRef->route();
+ VertInf *last = NULL;
+ int rIndx = 0;
+ while (last != start)
+ {
+ const Point& pnt = currRoute.at(rIndx);
+ bool isShape = (rIndx > 0);
+ VertID vID(pnt.id, isShape, pnt.vn);
+
+#ifdef PATHDEBUG
+ db_printf("/// %d %d %d\n", pnt.id, (int) isShape, pnt.vn);
+#endif
+ VertInf *curr = router->vertices.getVertexByID(vID);
+ COLA_ASSERT(curr != NULL);
+
+ Node = ANode(curr, timestamp++);
+ if (!last)
+ {
+ Node.g = 0;
+ Node.h = estimatedCost(lineRef, NULL, Node.inf->point,
+ tar->point);
+ Node.f = Node.g + Node.h;
+ }
+ else
+ {
+ double edgeDist = dist(BestNode.inf->point, curr->point);
+
+ Node.g = BestNode.g + cost(lineRef, edgeDist, BestNode.inf,
+ Node.inf, DONE, BestNode.prevIndex);
+
+ // Calculate the Heuristic.
+ Node.h = estimatedCost(lineRef, &(BestNode.inf->point),
+ Node.inf->point, tar->point);
+
+ // The A* formula
+ Node.f = Node.g + Node.h;
+
+ // Point parent to last BestNode (pushed onto DONE)
+ Node.prevIndex = DONE.size() - 1;
+ }
+
+ if (curr != start)
+ {
+ BestNode = Node;
+
+ DONE.push_back(BestNode);
+ }
+ else
+ {
+ PENDING.push_back(Node);
+ }
- // Create the start node
- Node = ANode(src);
- Node.g = 0;
- Node.h = dist(Node.inf->point, tar->point);
- Node.f = Node.g + Node.h;
- // Set a null parent, so cost function knows this is the first segment.
- Node.pp = NULL;
+ rIndx++;
+ last = curr;
+ }
+ }
+ else
+ {
+ // Create the start node
+ Node = ANode(src, timestamp++);
+ Node.g = 0;
+ Node.h = estimatedCost(lineRef, NULL, Node.inf->point, tar->point);
+ Node.f = Node.g + Node.h;
+ // Set a null parent, so cost function knows this is the first segment.
+
+ // Populate the PENDING container with the first location
+ PENDING.push_back(Node);
+ }
+
+ tar->pathNext = NULL;
- // Populate the PENDING container with the first location
- PENDING.push_back(Node);
// Create a heap from PENDING for sorting
using std::make_heap; using std::push_heap; using std::pop_heap;
make_heap( PENDING.begin(), PENDING.end() );
while (!PENDING.empty())
{
- // Ascending sort based on overloaded operators below
- sort_heap(PENDING.begin(), PENDING.end());
-
- // Set the Node with lowest f value to BESTNODE
+ // Set the Node with lowest f value to BESTNODE.
+ // Since the ANode operator< is reversed, the head of the
+ // heap is the node with the lowest f value.
BestNode = PENDING.front();
// Pop off the heap. Actually this moves the
@@ -427,38 +505,118 @@ static void aStarPath(ConnRef *lineRef, VertInf *src, VertInf *tar)
// is not actually removed since the pop is to
// the heap and not the container.
pop_heap(PENDING.begin(), PENDING.end());
-
-
// Remove node from right (the value we pop_heap'd)
PENDING.pop_back();
// Push the BestNode onto DONE
- BestNode.inf->pathNext = BestNode.pp;
DONE.push_back(BestNode);
+ VertInf *prevInf = (BestNode.prevIndex >= 0) ?
+ DONE[BestNode.prevIndex].inf : NULL;
#if 0
- printf("Considering... ");
- BestNode.ID->print(stdout);
- printf(" - g: %3.1f h: %3.1f f: %3.1f back: ", BestNode.g, BestNode.h,
- BestNode.f);
- BestNode.pp.print(stdout);
- printf("\n");
+ db_printf("Considering... ");
+ db_printf(" %g %g ", BestNode.inf->point.x, BestNode.inf->point.y);
+ BestNode.inf->id.db_print();
+ db_printf(" - g: %3.1f h: %3.1f back: ", BestNode.g, BestNode.h);
+ if (prevInf)
+ {
+ db_printf(" %g %g", prevInf->point.x, prevInf->point.y);
+ //prevInf->id.db_print();
+ }
+ db_printf("\n");
+#endif
+
+#if defined(ASTAR_DEBUG)
+ if (router->avoid_screen)
+ {
+ int canx = 151;
+ int cany = 55;
+ int radius = 5;
+ ANode curr;
+ for (curr = BestNode; curr.prevIndex >= 0;
+ curr = DONE[curr.prevIndex])
+ {
+ filledCircleRGBA(router->avoid_screen,
+ (int) curr.inf->point.x + canx,
+ (int) curr.inf->point.y + cany,
+ radius, 0, 0, 255, 128);
+ }
+ filledCircleRGBA(router->avoid_screen,
+ (int) BestNode.inf->point.x + canx,
+ (int) BestNode.inf->point.y + cany,
+ radius, 255, 0, 0, 255);
+
+ SDL_Flip(router->avoid_screen);
+ //SDL_Delay(500);
+
+ filledCircleRGBA(router->avoid_screen,
+ (int) BestNode.inf->point.x + canx,
+ (int) BestNode.inf->point.y + cany,
+ radius, 255, 255, 255, 255);
+ filledCircleRGBA(router->avoid_screen,
+ (int) BestNode.inf->point.x + canx,
+ (int) BestNode.inf->point.y + cany,
+ radius, 0, 255, 0, 128);
+ for (curr = BestNode; curr.prevIndex >= 0;
+ curr = DONE[curr.prevIndex])
+ {
+ filledCircleRGBA(router->avoid_screen,
+ (int) curr.inf->point.x + canx,
+ (int) curr.inf->point.y + cany,
+ radius, 255, 255, 255, 255);
+ filledCircleRGBA(router->avoid_screen,
+ (int) curr.inf->point.x + canx,
+ (int) curr.inf->point.y + cany,
+ radius, 0, 255, 0, 128);
+ }
+ }
#endif
// If at destination, break and create path below
if (BestNode.inf == tar)
{
+#ifdef PATHDEBUG
+ db_printf("Cost: %g\n", BestNode.f);
+#endif
//bPathFound = true; // arrived at destination...
+
+ // Correct all the pathNext pointers.
+ ANode curr;
+ int currIndex = DONE.size() - 1;
+ for (curr = BestNode; curr.prevIndex > 0;
+ curr = DONE[curr.prevIndex])
+ {
+ COLA_ASSERT(curr.prevIndex < currIndex);
+ curr.inf->pathNext = DONE[curr.prevIndex].inf;
+ currIndex = curr.prevIndex;
+ }
+ // Check that we've gone through the complete path.
+ COLA_ASSERT(curr.prevIndex == 0);
+ // Fill in the final pathNext pointer.
+ curr.inf->pathNext = DONE[curr.prevIndex].inf;
+
break;
}
// Check adjacent points in graph
- EdgeInfList& visList = BestNode.inf->visList;
- EdgeInfList::iterator finish = visList.end();
- for (EdgeInfList::iterator edge = visList.begin(); edge != finish;
- ++edge)
+ EdgeInfList& visList = (!isOrthogonal) ?
+ BestNode.inf->visList : BestNode.inf->orthogVisList;
+ if (isOrthogonal)
+ {
+ // We would like to explore in a structured way,
+ // so sort the points in the visList...
+ CmpVisEdgeRotation compare(prevInf);
+ visList.sort(compare);
+ }
+ EdgeInfList::const_iterator finish = visList.end();
+ for (EdgeInfList::const_iterator edge = visList.begin();
+ edge != finish; ++edge)
{
- Node.inf = (*edge)->otherVert(BestNode.inf);
+ Node = ANode((*edge)->otherVert(BestNode.inf), timestamp++);
+
+ // Set the index to the previous ANode that we reached
+ // this ANode through (the last BestNode pushed onto DONE).
+ Node.prevIndex = DONE.size() - 1;
// Only check shape verticies, or the tar endpoint.
if (!(Node.inf->id.isShape) && (Node.inf != tar))
@@ -466,6 +624,15 @@ static void aStarPath(ConnRef *lineRef, VertInf *src, VertInf *tar)
continue;
}
+ VertInf *prevInf = (BestNode.prevIndex >= 0) ?
+ DONE[BestNode.prevIndex].inf : NULL;
+
+ // Don't bother looking at the segment we just arrived along.
+ if (prevInf && (prevInf == Node.inf))
+ {
+ continue;
+ }
+
double edgeDist = (*edge)->getDist();
if (edgeDist == 0)
@@ -473,31 +640,49 @@ static void aStarPath(ConnRef *lineRef, VertInf *src, VertInf *tar)
continue;
}
- VertInf *prevInf = BestNode.inf->pathNext;
+ if (!router->_orthogonalRouting &&
+ (!router->RubberBandRouting || (start == src)) &&
+ (validateBendPoint(prevInf, BestNode.inf, Node.inf) == false))
+ {
+ // The bendpoint is not valid, i.e., is a zigzag corner, so...
+ continue;
+ // For RubberBand routing we want to allow these routes and
+ // unwind them later, otherwise instead or unwinding, paths
+ // can go the *really* long way round.
+ }
- Node.g = BestNode.g + cost(lineRef, edgeDist, prevInf,
- BestNode.inf, Node.inf);
+ Node.g = BestNode.g + cost(lineRef, edgeDist, BestNode.inf,
+ Node.inf, DONE, BestNode.prevIndex);
// Calculate the Heuristic.
- Node.h = dist(Node.inf->point, tar->point);
+ Node.h = estimatedCost(lineRef, &(BestNode.inf->point),
+ Node.inf->point, tar->point);
// The A* formula
Node.f = Node.g + Node.h;
- // Point parent to last BestNode (pushed onto DONE)
- Node.pp = BestNode.inf;
+
+#if 0
+ db_printf("-- Adding: %g %g ", Node.inf->point.x,
+ Node.inf->point.y);
+ Node.inf->id.db_print();
+ db_printf(" - g: %3.1f h: %3.1f \n", Node.g, Node.h);
+#endif
bNodeFound = false;
// Check to see if already on PENDING
for (unsigned int i = 0; i < PENDING.size(); i++)
{
- if (Node.inf == PENDING.at(i).inf)
- { // If already on PENDING
- if (Node.g < PENDING.at(i).g)
+ ANode& ati = PENDING.at(i);
+ if ((Node.inf == ati.inf) &&
+ (DONE[Node.prevIndex].inf == DONE[ati.prevIndex].inf))
+ {
+ // If already on PENDING
+ if (Node.g < ati.g)
{
- PENDING.at(i).g = Node.g;
- PENDING.at(i).f = Node.g + PENDING.at(i).h;
- PENDING.at(i).pp = Node.pp;
+ PENDING[i] = Node;
+
+ make_heap( PENDING.begin(), PENDING.end() );
}
bNodeFound = true;
break;
@@ -508,15 +693,14 @@ static void aStarPath(ConnRef *lineRef, VertInf *src, VertInf *tar)
// Check to see if already on DONE
for (unsigned int i = 0; i < DONE.size(); i++)
{
- if (Node.inf == DONE.at(i).inf)
+ ANode& ati = DONE.at(i);
+ if ((Node.inf == ati.inf) &&
+ (DONE[Node.prevIndex].inf == DONE[ati.prevIndex].inf))
{
// If on DONE, Which has lower gone?
- if (Node.g < DONE.at(i).g)
+ if (Node.g < ati.g)
{
- DONE.at(i).g = Node.g;
- DONE.at(i).f = Node.g + DONE.at(i).h;
- DONE.at(i).pp = Node.pp;
- DONE.at(i).inf->pathNext = Node.pp;
+ DONE[i] = Node;
}
bNodeFound = true;
break;
@@ -530,26 +714,24 @@ static void aStarPath(ConnRef *lineRef, VertInf *src, VertInf *tar)
PENDING.push_back(Node);
// Push NewNode onto heap
push_heap( PENDING.begin(), PENDING.end() );
- // Re-Assert heap, or will be short by one
- make_heap( PENDING.begin(), PENDING.end() );
#if 0
+ using std::cout; using std::endl;
// Display PENDING and DONE containers (For Debugging)
cout << "PENDING: ";
- for (int i = 0; i < PENDING.size(); i++)
+ for (unsigned int i = 0; i < PENDING.size(); i++)
{
- cout << PENDING.at(i).x << "," << PENDING.at(i).y << ",";
- cout << PENDING.at(i).g << "," << PENDING.at(i).h << " ";
+ cout << PENDING.at(i).g << "," << PENDING.at(i).h << ",";
+ cout << PENDING.at(i).inf << "," << PENDING.at(i).pp << " ";
}
cout << endl;
cout << "DONE: ";
- for (int i = 0; i < DONE.size(); i++)
+ for (unsigned int i = 0; i < DONE.size(); i++)
{
- cout << DONE.at(i).x << "," << DONE.at(i).y << ",";
- cout << DONE.at(i).g << "," << DONE.at(i).h << " ";
+ cout << DONE.at(i).g << "," << DONE.at(i).h << ",";
+ cout << DONE.at(i).inf << "," << DONE.at(i).pp << " ";
}
cout << endl << endl;
- int ch = _getch();
#endif
}
}
@@ -559,75 +741,52 @@ static void aStarPath(ConnRef *lineRef, VertInf *src, VertInf *tar)
// Returns the best path for the connector referred to by lineRef.
//
-// The path encoded in the pathNext links in each of the VerInfs
+// The path encoded in the pathNext links in each of the VertInfs
// backwards along the path, from the tar back to the source.
//
void makePath(ConnRef *lineRef, bool *flag)
{
+ bool isOrthogonal = (lineRef->routingType() == ConnType_Orthogonal);
Router *router = lineRef->router();
VertInf *src = lineRef->src();
VertInf *tar = lineRef->dst();
+ VertInf *start = lineRef->start();
- // If the connector hates crossings then we want to examine direct paths:
- bool examineDirectPath = lineRef->doesHateCrossings();
-
// TODO: Could be more efficient here.
- EdgeInf *directEdge = EdgeInf::existingEdge(src, tar);
- if (!(router->IncludeEndpoints) && directVis(src, tar))
- {
- Point p = src->point;
- Point q = tar->point;
-
- assert(directEdge == NULL);
-
- directEdge = new EdgeInf(src, tar);
- tar->pathNext = src;
- directEdge->setDist(dist(p, q));
- directEdge->addConn(flag);
-
- return;
- }
- else if (router->IncludeEndpoints && directEdge &&
- (directEdge->getDist() > 0) && !examineDirectPath)
+ if (isOrthogonal)
{
- tar->pathNext = src;
- directEdge->addConn(flag);
+ aStarPath(lineRef, src, tar, start);
}
- else
+ else // if (!isOrthogonal)
{
- // Mark the path endpoints as not being able to see
- // each other. This is true if we are here.
- if (!(router->IncludeEndpoints) && router->InvisibilityGrph)
- {
- if (!directEdge)
- {
- directEdge = new EdgeInf(src, tar);
- }
- directEdge->addBlocker(0);
- }
-
- if (router->UseAStarSearch)
+ EdgeInf *directEdge = EdgeInf::existingEdge(src, tar);
+ // If the connector hates crossings or there are clusters present,
+ // then we want to examine direct paths:
+ bool examineDirectPath = lineRef->doesHateCrossings() ||
+ !(router->clusterRefs.empty());
+
+ if ((start == src) && directEdge && (directEdge->getDist() > 0) &&
+ !examineDirectPath)
{
- aStarPath(lineRef, src, tar);
+ tar->pathNext = src;
+ directEdge->addConn(flag);
}
else
{
- dijkstraPath(lineRef, src, tar);
+ aStarPath(lineRef, src, tar, start);
}
+ }
#if 0
- PointMap::iterator t;
- for (VertInf *t = vertices.connsBegin(); t != vertices.end();
- t = t->lstNext)
- {
-
- t->id.print();
- printf(" -> ");
- t->pathNext->id.print();
- printf("\n");
- }
-#endif
+ for (VertInf *t = vertices.connsBegin(); t != vertices.end();
+ t = t->lstNext)
+ {
+ t->id.db_print();
+ db_printf(" -> ");
+ t->pathNext->id.db_print();
+ db_printf("\n");
}
+#endif
}
diff --git a/src/libavoid/makepath.h b/src/libavoid/makepath.h
index 4d68a01e3..b40bfbc3d 100644
--- a/src/libavoid/makepath.h
+++ b/src/libavoid/makepath.h
@@ -2,24 +2,27 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2008 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
#ifndef AVOID_MAKEPATH_H
#define AVOID_MAKEPATH_H
diff --git a/src/libavoid/orthogonal.cpp b/src/libavoid/orthogonal.cpp
new file mode 100644
index 000000000..4a7b0af2d
--- /dev/null
+++ b/src/libavoid/orthogonal.cpp
@@ -0,0 +1,2354 @@
+/*
+ * vim: ts=4 sw=4 et tw=0 wm=0
+ *
+ * libavoid - Fast, Incremental, Object-avoiding Line Router
+ *
+ * Copyright (C) 2009 Monash University
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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.
+ *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
+*/
+
+
+#include <cstdlib>
+#include <cfloat>
+#include <cmath>
+#include <set>
+#include <list>
+#include <algorithm>
+
+#include "libavoid/router.h"
+#include "libavoid/geomtypes.h"
+#include "libavoid/shape.h"
+#include "libavoid/orthogonal.h"
+#include "libavoid/connector.h"
+#include "libavoid/vpsc.h"
+#include "libavoid/assertions.h"
+
+#ifdef LIBAVOID_SDL
+ #include <SDL_gfxPrimitives.h>
+#endif
+
+
+namespace Avoid {
+
+
+static const double CHANNEL_MAX = 100000000;
+
+static const size_t XDIM = 0;
+static const size_t YDIM = 1;
+
+
+class ShiftSegment
+{
+ public:
+ // For shiftable segments.
+ 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),
+ indexHigh(high),
+ sBend(isSBend),
+ fixed(false),
+ dimension(dim),
+ variable(NULL),
+ minSpaceLimit(minLim),
+ maxSpaceLimit(maxLim)
+ {
+ }
+
+ // For fixed segments.
+ ShiftSegment(ConnRef *conn, const size_t low, const size_t high,
+ const size_t dim)
+ : connRef(conn),
+ indexLow(low),
+ indexHigh(high),
+ sBend(false),
+ fixed(true),
+ dimension(dim),
+ variable(NULL)
+ {
+ // This has no space to shift.
+ 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
+ {
+ return connRef->displayRoute().ps[indexHigh];
+ }
+
+ int fixedOrder(bool& isFixed) const
+ {
+ if (fixed)
+ {
+ isFixed = true;
+ return 0;
+ }
+ if (lowC())
+ {
+ return 1;
+ }
+ else if (highC())
+ {
+ return -1;
+ }
+ return 0;
+ }
+
+ int order(void) const
+ {
+ if (lowC())
+ {
+ return -1;
+ }
+ else if (highC())
+ {
+ return 1;
+ }
+ 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
+ {
+ size_t altDim = (dim + 1) % 2;
+ const Point& lowPt = lowPoint();
+ const Point& highPt = highPoint();
+ const Point& rhsLowPt = rhs.lowPoint();
+ const Point& rhsHighPt = rhs.highPoint();
+ if ( (lowPt[altDim] <= rhsHighPt[altDim]) &&
+ (rhsLowPt[altDim] <= highPt[altDim]))
+ {
+ if ( (minSpaceLimit <= rhs.maxSpaceLimit) &&
+ (rhs.minSpaceLimit <= maxSpaceLimit))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ ConnRef *connRef;
+ size_t indexLow;
+ size_t indexHigh;
+ bool sBend;
+ bool fixed;
+ size_t dimension;
+ Variable *variable;
+ double minSpaceLimit;
+ double maxSpaceLimit;
+ private:
+ bool lowC(void) const
+ {
+ // This is true if this is a cBend and its adjoining points
+ // are at lower positions.
+ if (!sBend && !fixed && (minSpaceLimit == lowPoint()[dimension]))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ bool highC(void) const
+ {
+ // This is true if this is a cBend and its adjoining points
+ // are at higher positions.
+ if (!sBend && !fixed && (maxSpaceLimit == lowPoint()[dimension]))
+ {
+ return true;
+ }
+ return false;
+ }
+};
+typedef std::list<ShiftSegment> ShiftSegmentList;
+
+bool cmpShiftSegment(const ShiftSegment& u, const ShiftSegment& v)
+{
+ return u < v;
+}
+
+
+struct Node;
+struct CmpNodePos { bool operator()(const Node* u, const Node* v) const; };
+
+typedef std::set<Node*,CmpNodePos> NodeSet;
+struct Node
+{
+ ShapeRef *v;
+ VertInf *c;
+ ShiftSegment *ss;
+ double pos;
+ double min[2], max[2];
+ Node *firstAbove, *firstBelow;
+ NodeSet::iterator iter;
+
+ Node(ShapeRef *v, const double p)
+ : v(v),
+ c(NULL),
+ ss(NULL),
+ 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),
+ ss(NULL),
+ pos(p),
+ firstAbove(NULL),
+ firstBelow(NULL)
+ {
+ min[0] = max[0] = c->point.x;
+ min[1] = max[1] = c->point.y;
+ }
+ Node(ShiftSegment *ss, const double p)
+ : v(NULL),
+ c(NULL),
+ ss(ss),
+ pos(p),
+ firstAbove(NULL),
+ firstBelow(NULL)
+ {
+ // These values shouldn't ever be used, so they don't matter.
+ min[0] = max[0] = min[1] = max[1] = 0;
+ }
+ ~Node()
+ {
+ }
+ // Find the first Node above in the scanline that is a shape edge,
+ // and does not have an open or close event at this position (meaning
+ // it is just about to be removed).
+ double firstObstacleAbove(size_t dim)
+ {
+ Node *curr = firstAbove;
+ while (curr && (curr->ss || (curr->max[dim] > pos)))
+ {
+ curr = curr->firstAbove;
+ }
+
+ if (curr)
+ {
+ return curr->max[dim];
+ }
+ return -DBL_MAX;
+ }
+ // Find the first Node below in the scanline that is a shape edge,
+ // and does not have an open or close event at this position (meaning
+ // it is just about to be removed).
+ double firstObstacleBelow(size_t dim)
+ {
+ Node *curr = firstBelow;
+ while (curr && (curr->ss || (curr->min[dim] < pos)))
+ {
+ curr = curr->firstBelow;
+ }
+
+ if (curr)
+ {
+ return curr->min[dim];
+ }
+ return DBL_MAX;
+ }
+ // Mark all connector segments above in the scanline as being able
+ // to see to this shape edge.
+ void markShiftSegmentsAbove(size_t dim)
+ {
+ Node *curr = firstAbove;
+ while (curr && (curr->ss || (curr->pos > min[dim])))
+ {
+ if (curr->ss && (curr->pos <= min[dim]))
+ {
+ curr->ss->maxSpaceLimit =
+ std::min(min[dim], curr->ss->maxSpaceLimit);
+ }
+ curr = curr->firstAbove;
+ }
+ }
+ // Mark all connector segments below in the scanline as being able
+ // to see to this shape edge.
+ void markShiftSegmentsBelow(size_t dim)
+ {
+ Node *curr = firstBelow;
+ while (curr && (curr->ss || (curr->pos < max[dim])))
+ {
+ if (curr->ss && (curr->pos >= max[dim]))
+ {
+ curr->ss->minSpaceLimit =
+ std::max(max[dim], curr->ss->minSpaceLimit);
+ }
+ curr = curr->firstBelow;
+ }
+ }
+ bool findFirstPointAboveAndBelow(const size_t dim, double& firstAbovePos,
+ double& firstBelowPos, double& lastAbovePos, double& lastBelowPos)
+ {
+ bool clearVisibility = true;
+ firstAbovePos = -DBL_MAX;
+ firstBelowPos = DBL_MAX;
+ // We start looking left from the right side of the shape,
+ // and vice versa.
+ lastAbovePos = max[dim];
+ lastBelowPos = min[dim];
+
+ // Find the first blocking edge above this point. Don't count the
+ // edges as we are travelling out of shapes we are inside, but then
+ // mark clearVisibility as false.
+ Node *curr = firstAbove;
+ while (curr && (curr->max[dim] > min[dim]))
+ {
+ lastAbovePos = std::min(curr->min[dim], lastAbovePos);
+ if ((curr->max[dim] >= min[dim]) && (curr->max[dim] <= max[dim]))
+ {
+ lastAbovePos = std::min(curr->max[dim], lastAbovePos);
+ }
+ lastBelowPos = std::max(curr->max[dim], lastBelowPos);
+ clearVisibility = false;
+ curr = curr->firstAbove;
+ }
+ if (curr)
+ {
+ firstAbovePos = curr->max[dim];
+ }
+ while (curr)
+ {
+ // There might be a larger shape after this one in the ordering.
+ if (curr->max[dim] < min[dim])
+ {
+ firstAbovePos = std::max(curr->max[dim], firstAbovePos);
+ }
+ 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.
+ curr = firstBelow;
+ while (curr && (curr->min[dim] < max[dim]))
+ {
+ lastBelowPos = std::max(curr->max[dim], lastBelowPos);
+ if ((curr->min[dim] >= min[dim]) && (curr->min[dim] <= max[dim]))
+ {
+ lastBelowPos = std::max(curr->min[dim], lastBelowPos);
+ }
+ lastAbovePos = std::min(curr->min[dim], lastAbovePos);
+ clearVisibility = false;
+ curr = curr->firstBelow;
+ }
+ if (curr)
+ {
+ firstBelowPos = curr->min[dim];
+ }
+ while (curr)
+ {
+ // There might be a larger shape after this one in the ordering.
+ if (curr->min[dim] > max[dim])
+ {
+ firstBelowPos = std::min(curr->min[dim], firstBelowPos);
+ }
+ curr = curr->firstBelow;
+ }
+
+ 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
+ // connection points.
+ bool isInsideShape(size_t dimension)
+ {
+ for (Node *curr = firstBelow; curr; curr = curr->firstBelow)
+ {
+ if ((curr->min[dimension] < pos) && (pos < curr->max[dimension]))
+ {
+ return true;
+ }
+ }
+ for (Node *curr = firstAbove; curr; curr = curr->firstAbove)
+ {
+ if ((curr->min[dimension] < pos) && (pos < curr->max[dimension]))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+};
+
+
+bool CmpNodePos::operator() (const Node* u, const Node* v) const
+{
+ 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 :
+ ((u->c) ? (void *) u->c : (void *) u->ss);
+ void *vp = (v->v) ? (void *) v->v :
+ ((v->c) ? (void *) v->c : (void *) v->ss);
+ return up < vp;
+}
+
+
+// Note: Open must come first.
+typedef enum {
+ Open = 1,
+ SegOpen = 2,
+ ConnPoint = 3,
+ SegClose = 4,
+ Close = 5
+} EventType;
+
+
+struct Event
+{
+ Event(EventType t, Node *v, double p)
+ : type(t),
+ v(v),
+ pos(p)
+ {};
+ EventType type;
+ Node *v;
+ double pos;
+};
+
+Event **events;
+
+
+// Used for quicksort. Must return <0, 0, or >0.
+int compare_events(const void *a, const void *b)
+{
+ Event *ea = *(Event**) a;
+ Event *eb = *(Event**) b;
+ if (ea->pos != eb->pos)
+ {
+ return (ea->pos < eb->pos) ? -1 : 1;
+ }
+ if (ea->type != eb->type)
+ {
+ return ea->type - eb->type;
+ }
+ COLA_ASSERT(ea->v != eb->v);
+ return ea->v - eb->v;
+}
+
+
+// Returns a bitfield of the direction of visibility (in this dimension)
+// 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)
+{
+ if (dim == XDIM) // X-dimension
+ {
+ unsigned int dirs = v->visDirections & (ConnDirLeft | ConnDirRight);
+ if (dirs == (ConnDirLeft | ConnDirRight))
+ {
+ return (ConnDirDown | ConnDirUp);
+ }
+ else if (dirs == ConnDirLeft)
+ {
+ return ConnDirDown;
+ }
+ else if (dirs == ConnDirRight)
+ {
+ return ConnDirUp;
+ }
+ }
+ else if (dim == YDIM) // Y-dimension
+ {
+ unsigned int dirs = v->visDirections & (ConnDirDown | ConnDirUp);
+ if (dirs == (ConnDirDown | ConnDirUp))
+ {
+ return (ConnDirDown | ConnDirUp);
+ }
+ else if (dirs == ConnDirDown)
+ {
+ // 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
+ // smaller or larger position values, Down is Up and vice versa.
+ return ConnDirDown;
+ }
+ }
+
+ // Can occur for ConnDirNone visibility.
+ return ConnDirNone;
+}
+
+
+struct PosVertInf
+{
+ PosVertInf(double p, VertInf *vI, ConnDirFlags d = ConnDirNone)
+ : pos(p),
+ vert(vI),
+ dir(d)
+ {
+ }
+
+ bool operator<(const PosVertInf& rhs) const
+ {
+ if (pos != rhs.pos)
+ {
+ return pos < rhs.pos;
+ }
+ return vert < rhs.vert;
+ }
+
+ double pos;
+ VertInf *vert;
+
+ // A bitfield marking the direction of visibility (in this dimension)
+ // made up of ConnDirDown (for visibility towards lower position values)
+ // and ConnDirUp (for visibility towards higher position values).
+ //
+ ConnDirFlags dir;
+};
+
+
+struct CmpVertInf
+{
+ bool operator()(const VertInf* u, const VertInf* v) const
+ {
+ // Comparator for VertSet, an ordered set of VertInf pointers.
+ // It is assumed vertical sets of points will all have the same
+ // x position and horizontal sets all share a y position, so this
+ // method can be used to sort both these sets.
+ COLA_ASSERT((u->point.x == v->point.x) || (u->point.y == v->point.y));
+ if (u->point.x != v->point.x)
+ {
+ return u->point.x < v->point.x;
+ }
+ else if (u->point.y != v->point.y)
+ {
+ return u->point.y < v->point.y;
+ }
+ return u < v;
+ }
+};
+
+
+typedef std::set<VertInf *, CmpVertInf> VertSet;
+
+// 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
+// lines arising from the vertical sweep.
+class LineSegment
+{
+public:
+ 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),
+ shapeSide(false)
+ {
+ COLA_ASSERT(begin < finish);
+
+ if (bvi)
+ {
+ vertInfs.insert(bvi);
+ }
+ if (fvi)
+ {
+ vertInfs.insert(fvi);
+ }
+ }
+
+ LineSegment(const double& bf, const double& p, VertInf *bfvi = NULL)
+ : begin(bf),
+ finish(bf),
+ pos(p),
+ shapeSide(false)
+ {
+ if (bfvi)
+ {
+ vertInfs.insert(bfvi);
+ }
+ }
+
+ // Order by begin, pos, finish.
+ bool operator<(const LineSegment& rhs) const
+ {
+ if (begin != rhs.begin)
+ {
+ return begin < rhs.begin;
+ }
+ if (pos != rhs.pos)
+ {
+ return pos < rhs.pos;
+ }
+ if (finish != rhs.finish)
+ {
+ return finish < rhs.finish;
+ }
+ COLA_ASSERT(shapeSide == rhs.shapeSide);
+ return false;
+ }
+
+ bool overlaps(const LineSegment& rhs) const
+ {
+ if ((begin == rhs.begin) && (pos == rhs.pos) &&
+ (finish == rhs.finish))
+ {
+ // Lines are exactly equal.
+ return true;
+ }
+
+ if (pos == rhs.pos)
+ {
+ if (((begin >= rhs.begin) && (begin <= rhs.finish)) ||
+ ((rhs.begin >= begin) && (rhs.begin <= finish)) )
+ {
+ // They are colinear and overlap by some amount.
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void mergeVertInfs(const LineSegment& segment)
+ {
+ begin = std::min(begin, segment.begin);
+ finish = std::max(finish, segment.finish);
+ vertInfs.insert(segment.vertInfs.begin(), segment.vertInfs.end());
+ }
+
+ VertInf *beginVertInf(void) const
+ {
+ if (vertInfs.empty())
+ {
+ return NULL;
+ }
+ return *vertInfs.begin();
+ }
+ VertInf *finishVertInf(void) const
+ {
+ if (vertInfs.empty())
+ {
+ return NULL;
+ }
+ return *vertInfs.rbegin();
+ }
+
+ VertInf *commitPositionX(Router *router, double posX)
+ {
+ VertInf *found = NULL;
+ for (VertSet::iterator v = vertInfs.begin();
+ v != vertInfs.end(); ++v)
+ {
+ if ((*v)->point.x == posX)
+ {
+ found = *v;
+ break;
+ }
+ }
+ if (!found)
+ {
+ found = new VertInf(router, dummyOrthogID, Point(posX, pos));
+ vertInfs.insert(found);
+ }
+ return found;
+ }
+ // Set begin endpoint vertex if none has been assigned.
+ void commitBegin(Router *router, VertInf *vert = NULL)
+ {
+ if (vert)
+ {
+ vertInfs.insert(vert);
+ }
+
+ if (vertInfs.empty() ||
+ ((*vertInfs.begin())->point.x != begin))
+ {
+ vertInfs.insert(new
+ VertInf(router, dummyOrthogID, Point(begin, pos)));
+ }
+ }
+
+ // Set begin endpoint vertex if none has been assigned.
+ void commitFinish(Router *router, VertInf *vert = NULL)
+ {
+ if (vert)
+ {
+ vertInfs.insert(vert);
+ }
+
+ if (vertInfs.empty() ||
+ ((*vertInfs.rbegin())->point.x != finish))
+ {
+ vertInfs.insert(new
+ VertInf(router, dummyOrthogID, Point(finish, pos)));
+ }
+ }
+
+ // 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 firstIntersectionPt = vertInfs.end();
+ for (VertSet::iterator vert = vertInfs.begin();
+ vert != vertInfs.end(); ++vert)
+ {
+ if ((*vert)->point.x > finishPos)
+ {
+ // We're done.
+ break;
+ }
+
+ breakPoints.insert(PosVertInf((*vert)->point.x, (*vert),
+ getPosVertInfDirection(*vert, XDIM)));
+
+ if ((firstIntersectionPt == vertInfs.end()) &&
+ ((*vert)->point.x == finishPos))
+ {
+ firstIntersectionPt = vert;
+ }
+ }
+ // Returns the first of the intersection points at finishPos.
+ return firstIntersectionPt;
+ }
+
+ // 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
+ // endpoint of the segment is shared by multiple connector endpoints.
+ VertSet addEdgeHorizontalTillIntersection(Router *router,
+ LineSegment& vertLine)
+ {
+ VertSet intersectionSet;
+
+ commitBegin(router);
+
+ // Does a vertex already exist for this point.
+ commitPositionX(router, vertLine.pos);
+
+ // 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()) &&
+ (*restEnd)->point.x == vertLine.pos)
+ {
+ ++restEnd;
+ }
+ intersectionSet.insert(restBegin, restEnd);
+
+ // Adjust segment to remove processed portion.
+ begin = vertLine.pos;
+ vertInfs.erase(vertInfs.begin(), restBegin);
+
+ return intersectionSet;
+ }
+
+ // Insert vertical breakpoints.
+ void insertBreakpointsBegin(Router *router, LineSegment& vertLine)
+ {
+ VertInf *vert = NULL;
+ if (pos == vertLine.begin && vertLine.beginVertInf())
+ {
+ vert = vertLine.beginVertInf();
+ }
+ else if (pos == vertLine.finish && vertLine.finishVertInf())
+ {
+ vert = vertLine.finishVertInf();
+ }
+ commitBegin(router, vert);
+
+ for (VertSet::iterator v = vertInfs.begin();
+ v != vertInfs.end(); ++v)
+ {
+ if ((*v)->point.x == begin)
+ {
+ vertLine.breakPoints.insert(PosVertInf(pos, *v,
+ getPosVertInfDirection(*v, YDIM)));
+ }
+ }
+ }
+
+ // Insert vertical breakpoints.
+ void insertBreakpointsFinish(Router *router, LineSegment& vertLine)
+ {
+ VertInf *vert = NULL;
+ if (pos == vertLine.begin && vertLine.beginVertInf())
+ {
+ vert = vertLine.beginVertInf();
+ }
+ else if (pos == vertLine.finish && vertLine.finishVertInf())
+ {
+ vert = vertLine.finishVertInf();
+ }
+ commitFinish(router, vert);
+
+ for (VertSet::iterator v = vertInfs.begin();
+ v != vertInfs.end(); ++v)
+ {
+ if ((*v)->point.x == finish)
+ {
+ vertLine.breakPoints.insert(PosVertInf(pos, *v,
+ getPosVertInfDirection(*v, YDIM)));
+ }
+ }
+ }
+ void generateVisibilityEdgesFromBreakpointSet(Router *router, size_t dim)
+ {
+ if ((breakPoints.begin())->pos != begin)
+ {
+ if (!beginVertInf())
+ {
+ Point point(pos, pos);
+ point[dim] = begin;
+ // Add begin point if it didn't intersect another line.
+ VertInf *vert = new VertInf(router, dummyOrthogID, point);
+ breakPoints.insert(PosVertInf(begin, vert));
+ }
+ }
+ if ((breakPoints.rbegin())->pos != finish)
+ {
+ if (!finishVertInf())
+ {
+ Point point(pos, pos);
+ point[dim] = finish;
+ // Add finish point if it didn't intersect another line.
+ VertInf *vert = new VertInf(router, dummyOrthogID, point);
+ breakPoints.insert(PosVertInf(finish, vert));
+ }
+ }
+
+ const bool orthogonal = true;
+ BreakpointSet::iterator vert, last;
+ for (vert = last = breakPoints.begin(); vert != breakPoints.end();)
+ {
+ BreakpointSet::iterator firstPrev = last;
+ while (last->vert->point[dim] != vert->vert->point[dim])
+ {
+ COLA_ASSERT(vert != last);
+ // Assert points are not at the same position.
+ COLA_ASSERT(vert->vert->point != last->vert->point);
+
+ if ( !(vert->vert->id.isShape || last->vert->id.isShape))
+ {
+ // 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;
+ while (!side->vert->id.isShape)
+ {
+ if (side == breakPoints.begin())
+ {
+ break;
+ }
+ --side;
+ }
+ bool canSeeDown = (vert->dir & ConnDirDown);
+ if (canSeeDown && side->vert->id.isShape)
+ {
+ EdgeInf *edge = new
+ EdgeInf(side->vert, vert->vert, orthogonal);
+ 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()) &&
+ !side->vert->id.isShape)
+ {
+ ++side;
+ }
+ bool canSeeUp = (last->dir & ConnDirUp);
+ if (canSeeUp && (side != breakPoints.end()))
+ {
+ EdgeInf *edge = new
+ EdgeInf(last->vert, side->vert, orthogonal);
+ 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
+ // candidate while searching if it is the other endpoint of
+ // the connector in question.
+ //
+ bool generateEdge = true;
+ if (!last->vert->id.isShape && !(last->dir & ConnDirUp))
+ {
+ generateEdge = false;
+ }
+ else if (!vert->vert->id.isShape && !(vert->dir & ConnDirDown))
+ {
+ generateEdge = false;
+ }
+ if (generateEdge)
+ {
+ EdgeInf *edge =
+ new EdgeInf(last->vert, vert->vert, orthogonal);
+ edge->setDist(vert->vert->point[dim] -
+ last->vert->point[dim]);
+ }
+
+ ++last;
+ }
+
+ ++vert;
+
+ if ((vert != breakPoints.end()) &&
+ (last->vert->point[dim] == vert->vert->point[dim]))
+ {
+ // Still looking at same pair, just reset prev number pointer.
+ last = firstPrev;
+ }
+ else
+ {
+ // vert has moved to the beginning of a number number group.
+ // Last is now in the right place, so do nothing.
+ }
+ }
+ }
+
+ double begin;
+ 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
+ // don't implement them.
+ LineSegment & operator=(LineSegment const &);
+ LineSegment();
+};
+
+typedef std::list<LineSegment> SegmentList;
+
+class SegmentListWrapper
+{
+ public:
+ LineSegment *insert(LineSegment segment)
+ {
+ SegmentList::iterator found = _list.end();
+ for (SegmentList::iterator curr = _list.begin();
+ curr != _list.end(); ++curr)
+ {
+ if (curr->overlaps(segment))
+ {
+ if (found != _list.end())
+ {
+ // This is not the first segment that overlaps,
+ // so we need to merge and then delete an existing
+ // segment.
+ curr->mergeVertInfs(*found);
+ _list.erase(found);
+ found = curr;
+ }
+ else
+ {
+ // This is the first overlapping segment, so just
+ // merge the new segment with this one.
+ curr->mergeVertInfs(segment);
+ found = curr;
+ }
+ }
+ }
+
+ if (found == _list.end())
+ {
+ // Add this line.
+ _list.push_back(segment);
+ return &(_list.back());
+ }
+
+ return &(*found);
+ }
+ SegmentList& list(void)
+ {
+ return _list;
+ }
+ private:
+ SegmentList _list;
+};
+
+
+// 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,
+ LineSegment& vertLine)
+{
+ COLA_ASSERT(vertLine.beginVertInf() == NULL);
+ COLA_ASSERT(vertLine.finishVertInf() == NULL);
+ for (SegmentList::iterator it = segments.begin(); it != segments.end(); )
+ {
+ LineSegment& horiLine = *it;
+
+ bool inVertSegRegion = ((vertLine.begin <= horiLine.pos) &&
+ (vertLine.finish >= horiLine.pos));
+
+ if (horiLine.finish < vertLine.pos)
+ {
+ // Add horizontal visibility segment.
+ horiLine.addEdgeHorizontal(router);
+
+ size_t dim = XDIM; // x-dimension
+ horiLine.generateVisibilityEdgesFromBreakpointSet(router, dim);
+
+ // We've now swept past this horizontal segment, so delete.
+ it = segments.erase(it);
+ continue;
+ }
+ else if (horiLine.begin > vertLine.pos)
+ {
+ // We've yet to reach this segment in the sweep, so ignore.
+ ++it;
+ continue;
+ }
+ else if (horiLine.begin == vertLine.pos)
+ {
+ if (inVertSegRegion)
+ {
+ horiLine.insertBreakpointsBegin(router, vertLine);
+ }
+ }
+ else if (horiLine.finish == vertLine.pos)
+ {
+ if (inVertSegRegion)
+ {
+ // Add horizontal visibility segment.
+ horiLine.addEdgeHorizontal(router);
+
+ horiLine.insertBreakpointsFinish(router, vertLine);
+
+ size_t dim = XDIM; // x-dimension
+ horiLine.generateVisibilityEdgesFromBreakpointSet(router, dim);
+
+ // And we've now finished with the segment, so delete.
+ it = segments.erase(it);
+ continue;
+ }
+ }
+ else
+ {
+ COLA_ASSERT(horiLine.begin < vertLine.pos);
+ COLA_ASSERT(horiLine.finish > vertLine.pos);
+
+ if (inVertSegRegion)
+ {
+ // Add horizontal visibility segment.
+ VertSet intersectionVerts =
+ horiLine.addEdgeHorizontalTillIntersection(
+ router, vertLine);
+
+ for (VertSet::iterator v = intersectionVerts.begin();
+ v != intersectionVerts.end(); ++v)
+ {
+ vertLine.breakPoints.insert(PosVertInf(horiLine.pos, *v,
+ getPosVertInfDirection(*v, YDIM)));
+ }
+ }
+ }
+ ++it;
+ }
+
+ // Split breakPoints set into visibility segments.
+ size_t dimension = YDIM; // y-dimension
+ vertLine.generateVisibilityEdgesFromBreakpointSet(router, dimension);
+}
+
+
+// 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,
+ SegmentListWrapper& segments, Event *e, unsigned int pass)
+{
+ Node *v = e->v;
+
+ if ( ((pass == 1) && (e->type == Open)) ||
+ ((pass == 2) && (e->type == ConnPoint)) )
+ {
+ std::pair<NodeSet::iterator, bool> result = scanline.insert(v);
+ v->iter = result.first;
+ COLA_ASSERT(result.second);
+
+ NodeSet::iterator it = v->iter;
+ // Work out neighbours
+ if (it != scanline.begin())
+ {
+ Node *u = *(--it);
+ v->firstAbove = u;
+ u->firstBelow = v;
+ }
+ it = v->iter;
+ if (++it != scanline.end())
+ {
+ Node *u = *it;
+ v->firstBelow = u;
+ u->firstAbove = v;
+ }
+ }
+
+ if (pass == 2)
+ {
+ if ((e->type == Open) || (e->type == Close))
+ {
+ // Shape edge positions.
+ double minShape = v->min[0];
+ double maxShape = v->max[0];
+ // As far as we can see.
+ double minLimit, maxLimit;
+ double minLimitMax, maxLimitMin;
+ v->findFirstPointAboveAndBelow(0, minLimit, maxLimit,
+ minLimitMax, maxLimitMin);
+
+ // Only difference between Open and Close is whether the line
+ // segments are at the top or bottom of the shape. Decide here.
+ double lineY = (e->type == Open) ? v->min[1] : v->max[1];
+
+ if (minLimitMax >= maxLimitMin)
+ {
+ // Insert possible visibility segments.
+ VertInf *vI1 = new VertInf(router, dummyOrthogID,
+ Point(minShape, lineY));
+ 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,
+ true, vI1, vI2));
+ if (maxShape < maxLimit)
+ {
+ segments.insert(LineSegment(maxShape, maxLimit, lineY,
+ true, vI2, NULL));
+ }
+ }
+ else
+ {
+ if ((minLimitMax > minLimit) && (minLimitMax >= minShape))
+ {
+ segments.insert(LineSegment(minLimit, minLimitMax, lineY,
+ true, NULL, NULL));
+ }
+ if ((maxLimitMin < maxLimit) && (maxLimitMin <= maxShape))
+ {
+ segments.insert(LineSegment(maxLimitMin, maxLimit, lineY,
+ true, NULL, NULL));
+ }
+ }
+ }
+ else if (e->type == ConnPoint)
+ {
+ // Connection point.
+ VertInf *centreVert = e->v->c;
+ Point& cp = centreVert->point;
+
+ // As far as we can see.
+ double minLimit = v->firstPointAbove(0);
+ double maxLimit = v->firstPointBelow(0);
+ bool inShape = v->isInsideShape(0);
+
+ LineSegment *line1 = NULL, *line2 = NULL;
+ if (!inShape || (centreVert->visDirections & ConnDirLeft))
+ {
+ 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,
+ true, centreVert, NULL));
+ }
+ if (!line1 && !line2)
+ {
+ // 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
+ // visibility graph point here too (since paths won't route
+ // *through* connector endpoint vertices).
+ if (line1 || line2)
+ {
+ VertInf *cent = new VertInf(router, dummyOrthogID, cp);
+ if (line1)
+ {
+ line1->vertInfs.insert(cent);
+ }
+ if (line2)
+ {
+ line2->vertInfs.insert(cent);
+ }
+ }
+ }
+ }
+ }
+
+ 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)
+ {
+ l->firstBelow = v->firstBelow;
+ }
+ if (r != NULL)
+ {
+ r->firstAbove = v->firstAbove;
+ }
+
+ if (e->type == ConnPoint)
+ {
+ scanline.erase(v->iter);
+ delete v;
+ }
+ else // if (e->type == Close)
+ {
+ size_t result;
+ result = scanline.erase(v);
+ COLA_ASSERT(result == 1);
+ delete v;
+ }
+ }
+}
+
+
+// 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,
+ SegmentListWrapper& segments, Event *e, unsigned int pass)
+{
+ Node *v = e->v;
+
+ if ( ((pass == 1) && (e->type == Open)) ||
+ ((pass == 2) && (e->type == ConnPoint)) )
+ {
+ std::pair<NodeSet::iterator, bool> result = scanline.insert(v);
+ v->iter = result.first;
+ COLA_ASSERT(result.second);
+
+ NodeSet::iterator it = v->iter;
+ // Work out neighbours
+ if (it != scanline.begin())
+ {
+ Node *u = *(--it);
+ v->firstAbove = u;
+ u->firstBelow = v;
+ }
+ it = v->iter;
+ if (++it != scanline.end())
+ {
+ Node *u = *it;
+ v->firstBelow = u;
+ u->firstAbove = v;
+ }
+ }
+
+ if (pass == 2)
+ {
+ if ((e->type == Open) || (e->type == Close))
+ {
+ // Shape edge positions.
+ double minShape = v->min[1];
+ double maxShape = v->max[1];
+ // As far as we can see.
+ double minLimit, maxLimit;
+ double minLimitMax, maxLimitMin;
+ v->findFirstPointAboveAndBelow(1, minLimit, maxLimit,
+ minLimitMax, maxLimitMin);
+
+ // Only difference between Open and Close is whether the line
+ // segments are at the left or right of the shape. Decide here.
+ double lineX = (e->type == Open) ? v->min[0] : v->max[0];
+
+ if (minLimitMax >= maxLimitMin)
+ {
+ LineSegment vertSeg = LineSegment(minLimit, maxLimit, lineX);
+ segments.insert(vertSeg);
+ }
+ else
+ {
+ if ((minLimitMax > minLimit) && (minLimitMax >= minShape))
+ {
+ LineSegment vertSeg =
+ LineSegment(minLimit, minLimitMax, lineX);
+ segments.insert(vertSeg);
+ }
+ if ((maxLimitMin < maxLimit) && (maxLimitMin <= maxShape))
+ {
+ LineSegment vertSeg =
+ LineSegment(maxLimitMin, maxLimit, lineX);
+ segments.insert(vertSeg);
+ }
+ }
+ }
+ else if (e->type == ConnPoint)
+ {
+ // Connection point.
+ VertInf *centreVert = e->v->c;
+ Point& cp = centreVert->point;
+
+ // As far as we can see.
+ 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));
+ }
+ if (!inShape || (centreVert->visDirections & ConnDirDown))
+ {
+ segments.insert(LineSegment(cp.y, maxLimit, e->pos));
+ }
+ }
+ }
+
+ 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)
+ {
+ l->firstBelow = v->firstBelow;
+ }
+ if (r != NULL)
+ {
+ r->firstAbove = v->firstAbove;
+ }
+
+ if (e->type == ConnPoint)
+ {
+ scanline.erase(v->iter);
+ delete v;
+ }
+ else // if (e->type == Close)
+ {
+ size_t result;
+ result = scanline.erase(v);
+ COLA_ASSERT(result == 1);
+ delete v;
+ }
+ }
+}
+
+
+extern void generateStaticOrthogonalVisGraph(Router *router)
+{
+ const size_t n = router->shapeRefs.size();
+ const unsigned cpn = router->vertices.connsSize();
+ // Set up the events for the vertical sweep.
+ size_t totalEvents = (2 * n) + cpn;
+ events = new Event*[totalEvents];
+ unsigned ctr = 0;
+ ShapeRefList::iterator shRefIt = router->shapeRefs.begin();
+ for (unsigned i = 0; i < n; i++)
+ {
+ ShapeRef *shRef = *shRefIt;
+ double minX, minY, maxX, maxY;
+ shRef->polygon().getBoundingRect(&minX, &minY, &maxX, &maxY);
+ double midX = minX + ((maxX - minX) / 2);
+ Node *v = new Node(shRef, midX);
+ events[ctr++] = new Event(Open, v, minY);
+ events[ctr++] = new Event(Close, v, maxY);
+
+ ++shRefIt;
+ }
+ for (VertInf *curr = router->vertices.connsBegin();
+ curr && (curr != router->vertices.shapesBegin());
+ curr = curr->lstNext)
+ {
+ Point& point = curr->point;
+
+ Node *v = new Node(curr, point.x);
+ events[ctr++] = new Event(ConnPoint, v, point.y);
+ }
+ qsort((Event*)events, (size_t) totalEvents, sizeof(Event*), compare_events);
+
+ // Process the vertical sweep.
+ // We do multiple passes over sections of the list so we can add relevant
+ // entries to the scanline that might follow, before process them.
+ SegmentListWrapper segments;
+ NodeSet scanline;
+ double thisPos = (totalEvents > 0) ? events[0]->pos : 0;
+ unsigned int posStartIndex = 0;
+ unsigned int posFinishIndex = 0;
+ for (unsigned i = 0; i <= totalEvents; ++i)
+ {
+ // If we have finished the current scanline or all events, then we
+ // process the events on the current scanline in a couple of passes.
+ if ((i == totalEvents) || (events[i]->pos != thisPos))
+ {
+ posFinishIndex = i;
+ for (int pass = 2; pass <= 3; ++pass)
+ {
+ for (unsigned j = posStartIndex; j < posFinishIndex; ++j)
+ {
+ processEventVert(router, scanline, segments,
+ events[j], pass);
+ }
+ }
+
+ if (i == totalEvents)
+ {
+ // We have cleaned up, so we can now break out of loop.
+ break;
+ }
+
+ thisPos = events[i]->pos;
+ posStartIndex = i;
+ }
+
+ // Do the first sweep event handling -- building the correct
+ // structure of the scanline.
+ const int pass = 1;
+ processEventVert(router, scanline, segments, events[i], pass);
+ }
+ COLA_ASSERT(scanline.size() == 0);
+ for (unsigned i = 0; i < totalEvents; ++i)
+ {
+ delete events[i];
+ }
+
+ segments.list().sort();
+
+ // Set up the events for the horizontal sweep.
+ SegmentListWrapper vertSegments;
+ ctr = 0;
+ shRefIt = router->shapeRefs.begin();
+ for (unsigned i = 0; i < n; i++)
+ {
+ ShapeRef *shRef = *shRefIt;
+ double minX, minY, maxX, maxY;
+ shRef->polygon().getBoundingRect(&minX, &minY, &maxX, &maxY);
+ double midY = minY + ((maxY - minY) / 2);
+ Node *v = new Node(shRef, midY);
+ events[ctr++] = new Event(Open, v, minX);
+ events[ctr++] = new Event(Close, v, maxX);
+
+ ++shRefIt;
+ }
+ for (VertInf *curr = router->vertices.connsBegin();
+ curr && (curr != router->vertices.shapesBegin());
+ curr = curr->lstNext)
+ {
+ Point& point = curr->point;
+
+ Node *v = new Node(curr, point.y);
+ events[ctr++] = new Event(ConnPoint, v, point.x);
+ }
+ qsort((Event*)events, (size_t) totalEvents, sizeof(Event*), compare_events);
+
+ // Process the horizontal sweep
+ thisPos = (totalEvents > 0) ? events[0]->pos : 0;
+ posStartIndex = 0;
+ posFinishIndex = 0;
+ for (unsigned i = 0; i <= totalEvents; ++i)
+ {
+ // If we have finished the current scanline or all events, then we
+ // process the events on the current scanline in a couple of passes.
+ if ((i == totalEvents) || (events[i]->pos != thisPos))
+ {
+ posFinishIndex = i;
+ for (int pass = 2; pass <= 3; ++pass)
+ {
+ for (unsigned j = posStartIndex; j < posFinishIndex; ++j)
+ {
+ processEventHori(router, scanline, vertSegments,
+ events[j], pass);
+ }
+ }
+
+ // Process the merged line segments.
+ vertSegments.list().sort();
+ for (SegmentList::iterator curr = vertSegments.list().begin();
+ curr != vertSegments.list().end(); ++curr)
+ {
+ intersectSegments(router, segments.list(), *curr);
+ }
+ vertSegments.list().clear();
+
+ if (i == totalEvents)
+ {
+ // We have cleaned up, so we can now break out of loop.
+ break;
+ }
+
+ thisPos = events[i]->pos;
+ posStartIndex = i;
+ }
+
+ // Do the first sweep event handling -- building the correct
+ // structure of the scanline.
+ const int pass = 1;
+ processEventHori(router, scanline, vertSegments, events[i], pass);
+ }
+ COLA_ASSERT(scanline.size() == 0);
+ for (unsigned i = 0; i < totalEvents; ++i)
+ {
+ delete events[i];
+ }
+ delete [] events;
+
+ // Add portions of the horizontal line that are after the final vertical
+ // position we considered.
+ 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);
+
+ it = segments.list().erase(it);
+ }
+}
+
+
+//============================================================================
+// Path Adjustment code
+//============================================================================
+
+
+
+
+// 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)
+{
+ Node *v = e->v;
+
+ if ( ((pass == 3) && (e->type == Open)) ||
+ ((pass == 3) && (e->type == SegOpen)) )
+ {
+ std::pair<NodeSet::iterator, bool> result = scanline.insert(v);
+ v->iter = result.first;
+ COLA_ASSERT(result.second);
+
+ NodeSet::iterator it = v->iter;
+ // Work out neighbours
+ if (it != scanline.begin())
+ {
+ Node *u = *(--it);
+ v->firstAbove = u;
+ u->firstBelow = v;
+ }
+ it = v->iter;
+ 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)) ||
+ ((pass == 1) && (e->type == Close)) )
+ {
+ if (v->ss)
+ {
+ // As far as we can see.
+ double minLimit = v->firstObstacleAbove(dim);
+ double maxLimit = v->firstObstacleBelow(dim);
+
+ v->ss->minSpaceLimit =
+ std::max(minLimit, v->ss->minSpaceLimit);
+ v->ss->maxSpaceLimit =
+ std::min(maxLimit, v->ss->maxSpaceLimit);
+ }
+ else
+ {
+ v->markShiftSegmentsAbove(dim);
+ 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)
+ {
+ l->firstBelow = v->firstBelow;
+ }
+ if (r != NULL)
+ {
+ r->firstAbove = v->firstAbove;
+ }
+
+ size_t result;
+ result = scanline.erase(v);
+ COLA_ASSERT(result == 1);
+ delete v;
+ }
+}
+
+
+static void buildOrthogonalChannelInfo(Router *router,
+ const size_t dim, ShiftSegmentList& segmentList)
+{
+ if (router->routingPenalty(segmentPenalty) == 0)
+ {
+ // This code assumes the routes are pretty optimal, so we don't
+ // do this adjustment if the routes have no segment penalty.
+ return;
+ }
+
+ size_t altDim = (dim + 1) % 2;
+ // For each connector.
+ 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.
+ // We don't consider the first or last segment of a path.
+ for (size_t i = 1; i < displayRoute.size(); ++i)
+ {
+ if (displayRoute.ps[i - 1][dim] == displayRoute.ps[i][dim])
+ {
+ // It's a segment in the dimension we are processing,
+ size_t indexLow = i - 1;
+ size_t indexHigh = i;
+ if (displayRoute.ps[i - 1][altDim] > displayRoute.ps[i][altDim])
+ {
+ indexLow = i;
+ indexHigh = i - 1;
+ }
+ 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
+ // shifted. We call them fixed segments. Note: this
+ // will change if we later allow connection channels.
+ segmentList.push_back(
+ ShiftSegment(*curr, indexLow, indexHigh, dim));
+ continue;
+ }
+
+ // The segment probably has space to be shifted.
+ double minLim = -CHANNEL_MAX;
+ double maxLim = CHANNEL_MAX;
+ bool isSBend = false;
+
+ 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]))
+ ||
+ ((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
+ // to the span of the adjoining segments to this one.
+ if ((prevPos < displayRoute.ps[i][dim]) &&
+ (nextPos > displayRoute.ps[i][dim]))
+ {
+ minLim = std::max(minLim, prevPos);
+ maxLim = std::min(maxLim, nextPos);
+ }
+ else
+ {
+ minLim = std::max(minLim, nextPos);
+ maxLim = std::min(maxLim, prevPos);
+ }
+ }
+ else
+ {
+ // isCBend: Both adjoining segments are in the same
+ // direction. We indicate this for later by setting
+ // the maxLim or minLim to the segment position.
+ if (prevPos < displayRoute.ps[i][dim])
+ {
+ minLim = displayRoute.ps[i][dim];
+ }
+ else
+ {
+ maxLim = displayRoute.ps[i][dim];
+ }
+ }
+
+ segmentList.push_back(ShiftSegment(*curr, indexLow,
+ indexHigh, isSBend, dim, minLim, maxLim));
+ }
+ }
+ }
+ if (segmentList.empty())
+ {
+ // 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();
+ // Set up the events for the sweep.
+ size_t totalEvents = 2 * (n + cpn);
+ events = new Event*[totalEvents];
+ unsigned ctr = 0;
+ ShapeRefList::iterator shRefIt = router->shapeRefs.begin();
+ for (unsigned i = 0; i < n; i++)
+ {
+ ShapeRef *shRef = *shRefIt;
+ Point min, max;
+ shRef->polygon().getBoundingRect(&min.x, &min.y, &max.x, &max.y);
+ double mid = min[dim] + ((max[dim] - min[dim]) / 2);
+ Node *v = new Node(shRef, mid);
+ events[ctr++] = new Event(Open, v, min[altDim]);
+ events[ctr++] = new Event(Close, v, max[altDim]);
+
+ ++shRefIt;
+ }
+ for (ShiftSegmentList::iterator curr = segmentList.begin();
+ curr != segmentList.end(); ++curr)
+ {
+ const Point& lowPt = curr->lowPoint();
+ const Point& highPt = curr->highPoint();
+
+ COLA_ASSERT(lowPt[dim] == highPt[dim]);
+ COLA_ASSERT(lowPt[altDim] < highPt[altDim]);
+ Node *v = new Node(&(*curr), lowPt[dim]);
+ events[ctr++] = new Event(SegOpen, v, lowPt[altDim]);
+ events[ctr++] = new Event(SegClose, v, highPt[altDim]);
+ }
+ qsort((Event*)events, (size_t) totalEvents, sizeof(Event*), compare_events);
+
+ // Process the sweep.
+ // We do multiple passes over sections of the list so we can add relevant
+ // entries to the scanline that might follow, before process them.
+ NodeSet scanline;
+ double thisPos = (totalEvents > 0) ? events[0]->pos : 0;
+ unsigned int posStartIndex = 0;
+ unsigned int posFinishIndex = 0;
+ for (unsigned i = 0; i <= totalEvents; ++i)
+ {
+ // If we have finished the current scanline or all events, then we
+ // process the events on the current scanline in a couple of passes.
+ if ((i == totalEvents) || (events[i]->pos != thisPos))
+ {
+ posFinishIndex = i;
+ for (int pass = 2; pass <= 4; ++pass)
+ {
+ for (unsigned j = posStartIndex; j < posFinishIndex; ++j)
+ {
+ processShiftEvent(router, scanline, segmentList, events[j],
+ dim, pass);
+ }
+ }
+
+ if (i == totalEvents)
+ {
+ // We have cleaned up, so we can now break out of loop.
+ break;
+ }
+
+ thisPos = events[i]->pos;
+ posStartIndex = i;
+ }
+
+ // Do the first sweep event handling -- building the correct
+ // structure of the scanline.
+ const int pass = 1;
+ processShiftEvent(router, scanline, segmentList, events[i],
+ dim, pass);
+ }
+ COLA_ASSERT(scanline.size() == 0);
+ for (unsigned i = 0; i < totalEvents; ++i)
+ {
+ delete events[i];
+ }
+ delete [] events;
+}
+
+
+static void simplifyOrthogonalRoutes(Router *router)
+{
+ // Simplify routes.
+ for (ConnRefList::const_iterator curr = router->connRefs.begin();
+ curr != router->connRefs.end(); ++curr)
+ {
+ if ((*curr)->routingType() != ConnType_Orthogonal)
+ {
+ continue;
+ }
+ (*curr)->set_route((*curr)->displayRoute().simplify());
+ }
+}
+
+
+static void buildOrthogonalNudgingOrderInfo(Router *router,
+ PtOrderMap& pointOrders)
+{
+ // Simplify routes.
+ simplifyOrthogonalRoutes(router);
+
+ int crossingsN = 0;
+
+ // Do segment splitting.
+ 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)
+ {
+ 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)
+ {
+ if ((*curr)->routingType() != ConnType_Orthogonal)
+ {
+ continue;
+ }
+ ConnRef *conn = *curr;
+
+ for (ConnRefList::const_iterator curr2 = curr;
+ 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();
+ bool checkForBranchingSegments = false;
+ int crossings = 0;
+ 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,
+ &pointOrders, conn2, conn).first;
+ }
+ if (crossings > 0)
+ {
+ crossingsN += crossings;
+ }
+ }
+ }
+
+ // Sort the point orders.
+ PtOrderMap::iterator finish = pointOrders.end();
+ for (PtOrderMap::iterator it = pointOrders.begin(); it != finish; ++it)
+ {
+ //const VertID& ptID = it->first;
+ PtOrder& order = it->second;
+
+ for (size_t dim = XDIM; dim <= YDIM; ++dim)
+ {
+ order.sort(dim);
+ }
+ }
+}
+
+
+class CmpLineOrder
+{
+ public:
+ CmpLineOrder(PtOrderMap& ord, const size_t dim)
+ : orders(ord),
+ dimension(dim)
+ {
+ }
+ bool operator()(const ShiftSegment& lhs, const ShiftSegment& rhs,
+ bool *comparable = NULL) const
+ {
+ if (comparable)
+ {
+ *comparable = true;
+ }
+ Point lhsLow = lhs.lowPoint();
+ Point rhsLow = rhs.lowPoint();
+#ifndef NDEBUG
+ const Point& lhsHigh = lhs.highPoint();
+ const Point& rhsHigh = rhs.highPoint();
+#endif
+ size_t altDim = (dimension + 1) % 2;
+
+ COLA_ASSERT(lhsLow[dimension] == lhsHigh[dimension]);
+ COLA_ASSERT(rhsLow[dimension] == rhsHigh[dimension]);
+
+ if (lhsLow[dimension] != rhsLow[dimension])
+ {
+ 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
+ // block movement.
+ bool oneIsFixed = false;
+ const int lhsFixedOrder = lhs.fixedOrder(oneIsFixed);
+ const int rhsFixedOrder = rhs.fixedOrder(oneIsFixed);
+ if (oneIsFixed && (lhsFixedOrder != rhsFixedOrder))
+ {
+ 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
+ // terms of C-bend direction and S-bends and use that if it
+ // differs for the two segments.
+ const int lhsOrder = lhs.order();
+ const int rhsOrder = rhs.order();
+ if (lhsOrder != rhsOrder)
+ {
+ return lhsOrder < rhsOrder;
+ }
+
+ // Need to index using the original point into the map, so find it.
+ Point& unchanged = (lhsLow[altDim] > rhsLow[altDim]) ?
+ lhsLow : rhsLow;
+
+ PtOrder& lowOrder = orders[unchanged];
+ int lhsPos = lowOrder.positionFor(lhs.connRef, dimension);
+ int rhsPos = lowOrder.positionFor(rhs.connRef, dimension);
+ if ((lhsPos == -1) || (rhsPos == -1))
+ {
+ // 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
+ // these segments is not important since we do not constrain
+ // them against each other.
+ //COLA_ASSERT(lhs.overlapsWith(rhs, dimension) == false);
+ // We do need to be consistent though.
+ if (comparable)
+ {
+ *comparable = false;
+ }
+ return lhsLow[altDim] < rhsLow[altDim];
+ }
+
+ return lhsPos < rhsPos;
+ }
+
+ PtOrderMap& orders;
+ const size_t dimension;
+};
+
+
+// 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,
+ CmpLineOrder& comparison)
+{
+ ShiftSegmentList resultList;
+
+ while (!origList.empty())
+ {
+ // Get and remove the first element from the origList.
+ ShiftSegment segment = origList.front();
+ origList.pop_front();
+
+ // Find the insertion point in the resultList.
+ ShiftSegmentList::iterator curr;
+ for (curr = resultList.begin(); curr != resultList.end(); ++curr)
+ {
+ bool comparable = false;
+ bool lessThan = comparison(segment, *curr, &comparable);
+
+ if (comparable && lessThan)
+ {
+ // If it is comparable and lessThan, then we have found the
+ // insertion point.
+ break;
+ }
+ }
+
+ // Insert the element into the reultList at the required point.
+ resultList.insert(curr, segment);
+ }
+
+ return resultList;
+}
+
+
+typedef std::list<ShiftSegment *> ShiftSegmentPtrList;
+
+
+static void nudgeOrthogonalRoutes(Router *router, size_t dimension,
+ PtOrderMap& pointOrders, ShiftSegmentList& segmentList)
+{
+ // Do the actual nudging.
+ ShiftSegmentList currentRegion;
+ while (!segmentList.empty())
+ {
+ // Take a reference segment
+ ShiftSegment& currentSegment = segmentList.front();
+ // Then, find the segments that overlap this one.
+ currentRegion.clear();
+ currentRegion.push_back(currentSegment);
+ segmentList.erase(segmentList.begin());
+ for (ShiftSegmentList::iterator curr = segmentList.begin();
+ curr != segmentList.end(); )
+ {
+ bool overlaps = false;
+ for (ShiftSegmentList::iterator curr2 = currentRegion.begin();
+ curr2 != currentRegion.end(); ++curr2)
+ {
+ if (curr->overlapsWith(*curr2, dimension))
+ {
+ overlaps = true;
+ break;
+ }
+ }
+ if (overlaps)
+ {
+ currentRegion.push_back(*curr);
+ segmentList.erase(curr);
+ // Consider segments from the beginning, since we mave have
+ // since passed segments that overlap with the new set.
+ curr = segmentList.begin();
+ }
+ else
+ {
+ ++curr;
+ }
+ }
+ CmpLineOrder lineSortComp(pointOrders, dimension);
+ currentRegion = linesort(currentRegion, lineSortComp);
+
+ if (currentRegion.size() == 1)
+ {
+ // Save creating the solver instance if there is just one
+ // immovable segment.
+ if (!currentRegion.front().sBend)
+ {
+ continue;
+ }
+ }
+
+ // Process these segments.
+ Variables vs;
+ Constraints cs;
+ ShiftSegmentPtrList prevVars;
+ // IDs:
+ const int freeID = 0;
+ const int fixedID = 1;
+ // Weights:
+ double freeWeight = 0.00001;
+ double strongWeight = 0.001;
+ double fixedWeight = 100000;
+ //printf("-------------------------------------------------------\n");
+ //printf("Nudge -- size: %d\n", (int) currentRegion.size());
+ for (ShiftSegmentList::iterator currSegment = currentRegion.begin();
+ 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];
+ double weight = freeWeight;
+ if (currSegment->sBend)
+ {
+ 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 -
+ currSegment->minSpaceLimit) / 2);
+ }
+ else if (currSegment->fixed)
+ {
+ // Fixed segments shouldn't get moved.
+ weight = fixedWeight;
+ varID = fixedID;
+ }
+ else
+ {
+ // 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;
+ }
+ currSegment->variable = new Variable(varID, idealPos, weight);
+ vs.push_back(currSegment->variable);
+ size_t index = vs.size() - 1;
+ //printf("line %.15f pos: %g min: %g max: %g\n",
+ // lowPt[dimension], idealPos, currSegment->minSpaceLimit,
+ // currSegment->maxSpaceLimit);
+
+ // Constrain position in relation to previously seen segments,
+ // if necessary (i.e. when they could overlap).
+ for (ShiftSegmentPtrList::iterator prevVarIt = prevVars.begin();
+ prevVarIt != prevVars.end(); )
+ {
+ ShiftSegment *prevSeg = *prevVarIt;
+ Variable *prevVar = prevSeg->variable;
+
+ 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
+ // constrain the two segments to be separated.
+ // Though don't add the constraint if both the
+ // segments are fixed in place.
+ cs.push_back(new Constraint(prevVar, vs[index],
+ router->orthogonalNudgeDistance()));
+ prevVarIt = prevVars.erase(prevVarIt);
+ }
+ else
+ {
+ ++prevVarIt;
+ }
+ }
+
+ if (!currSegment->fixed)
+ {
+ // 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,
+ currSegment->minSpaceLimit, fixedWeight));
+ cs.push_back(new Constraint(vs[vs.size() - 1], vs[index],
+ 0.0));
+ }
+
+ // 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,
+ currSegment->maxSpaceLimit, fixedWeight));
+ cs.push_back(new Constraint(vs[index], vs[vs.size() - 1],
+ 0.0));
+ }
+ }
+ prevVars.push_back(&(*currSegment));
+ }
+#if 0
+ for(unsigned i=0;i<vs.size();i++) {
+ printf("-vs[%d]=%f\n",i,vs[i]->desiredPosition);
+ }
+#endif
+ IncSolver f(vs,cs);
+ f.solve();
+ bool satisfied = true;
+ for (size_t i = 0; i < vs.size(); ++i)
+ {
+ if (vs[i]->id == fixedID)
+ {
+ if (fabs(vs[i]->finalPosition - vs[i]->desiredPosition) > 0.01)
+ {
+ satisfied = false;
+ break;
+ }
+ }
+ }
+ if (satisfied)
+ {
+ for (ShiftSegmentList::iterator currSegment = currentRegion.begin();
+ currSegment != currentRegion.end(); ++currSegment)
+ {
+ Point& lowPt = currSegment->lowPoint();
+ Point& highPt = currSegment->highPoint();
+ double newPos = currSegment->variable->finalPosition;
+ //printf("Pos: %X, %g\n", (int) currSegment->connRef, newPos);
+ lowPt[dimension] = newPos;
+ highPt[dimension] = newPos;
+ }
+ }
+#if 0
+ for(unsigned i=0;i<vs.size();i++) {
+ printf("+vs[%d]=%f\n",i,vs[i]->finalPosition);
+ }
+#endif
+ for_each(vs.begin(),vs.end(),delete_object());
+ for_each(cs.begin(),cs.end(),delete_object());
+ }
+}
+
+
+extern void improveOrthogonalRoutes(Router *router)
+{
+ router->timers.Register(tmOrthogNudge, timerStart);
+ for (size_t dimension = 0; dimension < 2; ++dimension)
+ {
+ // Build nudging info.
+ // XXX: We need to build the point orders separately in each
+ // dimension since things move. There is probably a more
+ // efficient way to do this.
+ PtOrderMap pointOrders;
+ buildOrthogonalNudgingOrderInfo(router, pointOrders);
+
+ // Simplify routes.
+ simplifyOrthogonalRoutes(router);
+
+ // Do the centring and nudging.
+ ShiftSegmentList segLists;
+ buildOrthogonalChannelInfo(router, dimension, segLists);
+ nudgeOrthogonalRoutes(router, dimension, pointOrders, segLists);
+ }
+ router->timers.Stop();
+}
+
+
+}
diff --git a/src/libavoid/orthogonal.h b/src/libavoid/orthogonal.h
new file mode 100644
index 000000000..4fb974099
--- /dev/null
+++ b/src/libavoid/orthogonal.h
@@ -0,0 +1,39 @@
+/*
+ * vim: ts=4 sw=4 et tw=0 wm=0
+ *
+ * libavoid - Fast, Incremental, Object-avoiding Line Router
+ *
+ * Copyright (C) 2009 Monash University
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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.
+ *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
+*/
+
+
+#ifndef AVOID_ORTHOGONAL_H
+#define AVOID_ORTHOGONAL_H
+
+namespace Avoid {
+
+
+extern void generateStaticOrthogonalVisGraph(Router *router);
+
+extern void improveOrthogonalRoutes(Router *router);
+
+
+}
+
+#endif
diff --git a/src/libavoid/polyutil.cpp b/src/libavoid/polyutil.cpp
deleted file mode 100644
index 1b4b0c619..000000000
--- a/src/libavoid/polyutil.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * vim: ts=4 sw=4 et tw=0 wm=0
- *
- * libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
-*/
-
-#include <cassert>
-#include <cstdlib>
-
-#include "libavoid/polyutil.h"
-#include "libavoid/geomtypes.h"
-#include "libavoid/vertices.h"
-#include "libavoid/shape.h"
-
-namespace Avoid {
-
-
-Polygn newPoly(int size)
-{
- Polygn newpoly;
-
- newpoly.id = 0;
- newpoly.pn = size;
- newpoly.ps = (Point *) calloc(size, sizeof(Point));
- if (!newpoly.ps)
- {
- fprintf(stderr,
- "Error: Unable to allocate Point array in Avoid::newPoly\n");
- abort();
- }
- return newpoly;
-}
-
-
-Polygn copyPoly(Polygn poly)
-{
- Polygn newpoly = newPoly(poly.pn);
-
- newpoly.id = poly.id;
- for (int i = 0; i < poly.pn; i++)
- {
- newpoly.ps[i] = poly.ps[i];
- }
- return newpoly;
-}
-
-
-Polygn copyPoly(ShapeRef *shape)
-{
- Polygn poly = shape->poly();
- Polygn newpoly = newPoly(poly.pn);
-
- newpoly.id = poly.id;
- for (int i = 0; i < poly.pn; i++)
- {
- newpoly.ps[i] = poly.ps[i];
- }
- return newpoly;
-}
-
-
-void freePoly(Polygn& poly)
-{
- std::free(poly.ps);
-}
-
-
-void freePtrPoly(Polygn *poly)
-{
- std::free(poly->ps);
- std::free(poly);
-}
-
-
-}
-
diff --git a/src/libavoid/polyutil.h b/src/libavoid/polyutil.h
deleted file mode 100644
index 9340df5f4..000000000
--- a/src/libavoid/polyutil.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * vim: ts=4 sw=4 et tw=0 wm=0
- *
- * libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
-*/
-
-#include "libavoid/geometry.h"
-#include "libavoid/shape.h"
-
-#ifndef AVOID_POLYUTIL_H
-#define AVOID_POLYUTIL_H
-
-namespace Avoid {
-
-
-extern Polygn newPoly(int size);
-extern Polygn copyPoly(Polygn);
-extern Polygn copyPoly(ShapeRef *shape);
-extern void freePoly(Polygn&);
-extern void freePtrPoly(Polygn *argpoly);
-
-
-}
-
-#endif
diff --git a/src/libavoid/region.cpp b/src/libavoid/region.cpp
deleted file mode 100644
index 5a46d7cbb..000000000
--- a/src/libavoid/region.cpp
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
- * vim: ts=4 sw=4 et tw=0 wm=0
- *
- * libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
-*/
-
-#include <stdio.h>
-#include <cstdlib>
-#include <algorithm>
-#include <cassert>
-#include <cmath>
-
-#include "libavoid/shape.h"
-#include "libavoid/region.h"
-
-
-namespace Avoid {
-
-Region *centerRegion = NULL;
-
-static const BBox screenBBox =
- {Point(-INFINITY, -INFINITY), Point(INFINITY, INFINITY)};
-
-
-Region::Region()
- : _bbox(screenBBox)
- , _left(NULL), _right(NULL), _up(NULL), _down(NULL)
-{
- _blocks.clear();
-}
-
-
-Region::Region(double x1, double y1, double x2, double y2)
- : _left(NULL), _right(NULL), _up(NULL), _down(NULL)
-{
- _bbox.a.x = x1;
- _bbox.a.y = y1;
- _bbox.b.x = x2;
- _bbox.b.y = y2;
-
- _blocks.clear();
-}
-
-
-static const unsigned int R_INSIDE = 0;
-static const unsigned int R_LEFT = 1;
-static const unsigned int R_LEDGE = 2;
-static const unsigned int R_RIGHT = 4;
-static const unsigned int R_REDGE = 8;
-static const unsigned int R_ABOVE = 16;
-static const unsigned int R_TEDGE = 32;
-static const unsigned int R_BELOW = 64;
-static const unsigned int R_BEDGE = 128;
-
-static const unsigned int R_NONE = R_INSIDE;
-static const unsigned int R_UP = R_ABOVE;
-static const unsigned int R_DOWN = R_BELOW;
-static const unsigned int R_HORI = R_LEFT | R_RIGHT;
-static const unsigned int R_VERT = R_UP | R_DOWN;
-
-
-static void printBBox(const char *label, const BBox &bbox)
-{
- if (label)
- {
- printf("%s: ", label);
- }
- printf("(%.2f, %.2f)-(%.2f, %.2f)\n", bbox.a.x, bbox.a.y,
- bbox.b.x, bbox.b.y);
-}
-
-
-bool Region::overlapCheck(BBox& bbox, unsigned int& p)
-{
- p = R_INSIDE;
- Point& a = bbox.a;
- Point& b = bbox.b;
- Point& r = _bbox.a;
- Point& s = _bbox.b;
-
- if (s.x <= a.x)
- {
- // Wholly right.
- p = R_RIGHT;
- return false;
- }
- else if (r.x >= b.x)
- {
- // Wholly left.
- p = R_LEFT;
- return false;
- }
-
- if (s.y <= a.y)
- {
- // Wholly below.
- p = R_BELOW;
- return false;
- }
- else if (r.y >= b.y)
- {
- // Wholly above.
- p = R_ABOVE;
- return false;
- }
-
- if (a.y == r.y)
- {
- // Shared top edge.
- p |= R_TEDGE;
- }
- else if (a.y < r.y)
- {
- // Need to split above.
- p |= R_ABOVE;
- }
-
- if (b.y == s.y)
- {
- // Shared bottom edge.
- p |= R_BEDGE;
- }
- else if (b.y > s.y)
- {
- // Need to split below.
- p |= R_BELOW;
- }
-
- if (a.x == r.x)
- {
- // Shared left edge.
- p |= R_LEDGE;
- }
- else if (a.x < r.x)
- {
- // Need to split left.
- p |= R_LEFT;
- }
-
- if (b.x == s.x)
- {
- // Shared right edge.
- p |= R_REDGE;
- }
- else if (b.x > s.x)
- {
- // Need to split right.
- p |= R_RIGHT;
- }
-
- return true;
-}
-
-
-void Region::getBBox(BBox& bb)
-{
- bb.a = _bbox.a;
- bb.b = _bbox.b;
-}
-
-
-Region *Region::up(void)
-{
- return _up;
-}
-
-
-Region *Region::down(void)
-{
- return _down;
-}
-
-
-Region *Region::left(void)
-{
- return _left;
-}
-
-
-Region *Region::right(void)
-{
- return _right;
-}
-
-
-bool Region::isBlock(void)
-{
- return !(_blocks.empty());
-}
-
-
-void Region::initialSplit(BBox& bbox, unsigned int pos, unsigned int& shapeId)
-{
- Point& n1 = bbox.a;
- Point& n2 = bbox.b;
- Region *newR = this;
- Region *left, *right, *top, *bottom;
-
- if (pos == R_INSIDE)
- {
- split(n2.y, R_HORI);
- split(n2.x, R_VERT);
- newR = split(n1.y, R_HORI);
- newR = newR->split(n1.x, R_VERT);
-
- printf("%p - list %d add %d\n", newR,
- (int) newR->_blocks.size(), shapeId);
- newR->_blocks.push_back((int) shapeId);
- newR->_blocks.sort();
- newR->_blocks.unique();
- }
- else
- {
- Region *tar = NULL;
- tar = newR->findRegion(n1.x, R_VERT);
- if (pos & R_LEFT)
- {
- if (n1.x == tar->_bbox.a.x)
- {
- newR = tar->_right;
- }
- else if (n1.x == tar->_bbox.b.x)
- {
- newR = tar;
- }
- else
- {
- newR = tar->split(n1.x, R_VERT);
- }
- }
- else if (!(pos & R_LEDGE))
- {
- newR = tar->split(n1.x, R_VERT);
- }
- left = newR;
-
- tar = left->findRegion(n1.y, R_HORI);
- if (pos & R_ABOVE)
- {
- if (n1.y == tar->_bbox.a.y)
- {
- newR = tar->_down;
- }
- else if (n1.y == tar->_bbox.b.y)
- {
- newR = tar;
- }
- else
- {
- newR = tar->split(n1.y, R_HORI);
- }
- }
- else if (!(pos & R_TEDGE))
- {
- newR = tar->split(n1.y, R_HORI);
- }
- top = newR;
-
- right = newR;
- tar = newR->findRegion(n2.x, R_VERT);
- if (pos & R_RIGHT)
- {
-
- if (n2.x == tar->_bbox.a.x)
- {
- right = tar->_left;
- }
- else if (n2.x == tar->_bbox.b.x)
- {
- right = tar;
- }
- else
- {
- tar->split(n2.x, R_VERT);
- right = tar;
- }
- }
- else if (!(pos & R_REDGE))
- {
- tar->split(n2.x, R_VERT);
- right = tar;
- }
-
- bottom = right;
- tar = right->findRegion(n2.y, R_HORI);
- if (pos & R_BELOW)
- {
- if (n2.y == tar->_bbox.a.y)
- {
- bottom = tar->_up;
- }
- else if (n2.y == tar->_bbox.b.y)
- {
- bottom = tar;
- }
- else
- {
- tar->split(n2.y, R_HORI);
- bottom = tar;
- }
- }
- else if (!(pos & R_BEDGE))
- {
- tar->split(n2.y, R_HORI);
- bottom = tar;
- }
-
- // top is actually top-left, and bottom is bottom-right.
- Region *curr = top, *cptr = NULL;
- while (curr->_bbox.b.y <= bottom->_bbox.b.y)
- {
- cptr = curr;
- while (cptr->_bbox.b.x <= bottom->_bbox.b.x)
- {
- printf("%p - list %d add %d\n", cptr,
- (int) cptr->_blocks.size(), shapeId);
- cptr->_blocks.push_back((int) shapeId);
- cptr->_blocks.sort();
- cptr->_blocks.unique();
-
- cptr = cptr->_right;
- }
-
- curr = curr->_down;
- }
- }
-}
-
-
-// Returns the region containing the value 'pos' in the direction 'dir'.
-// Thus, if looking for the x value 55, you would pass R_VERT as 'dir'.
-// 'forMerge' specifies that the left or top block of a pair of regions
-// with the split value of 'pos' should be returned.
-Region *Region::findRegion(double pos, unsigned int dir, const bool forMerge)
-{
- Region *curr = this;
-
- if (dir & R_VERT)
- {
- while (pos > curr->_bbox.b.x)
- {
- curr = curr->_right;
- }
- while (pos < curr->_bbox.a.x)
- {
- curr = curr->_left;
- }
- if (forMerge)
- {
- if (pos == curr->_bbox.a.x)
- {
- curr = curr->_left;
- }
- if (pos != curr->_bbox.b.x)
- {
- // 'pos' is not on the boundary.
- return NULL;
- }
- }
- }
- else if (dir & R_HORI)
- {
- while (pos > curr->_bbox.b.y)
- {
- curr = curr->_down;
- }
- while (pos < curr->_bbox.a.y)
- {
- curr = curr->_up;
- }
- if (forMerge)
- {
- if (pos == curr->_bbox.a.y)
- {
- curr = curr->_up;
- }
- if (pos != curr->_bbox.b.y)
- {
- // 'pos' is not on the boundary.
- return NULL;
- }
- }
- }
- return curr;
-}
-
-
-Region *Region::split(double pos, unsigned int dir)
-{
- Region *newR = NULL;
- bool first = true;
-
- if (dir & R_VERT)
- {
- newR = splitDir(pos, R_UP, first);
- if (_down) _down->splitDir(pos, R_DOWN);
- }
- else if (dir & R_HORI)
- {
- newR = splitDir(pos, R_RIGHT, first);
- if (_left) _left->splitDir(pos, R_LEFT);
- }
- return newR;
-}
-
-
-void Region::merge(unsigned int dir)
-{
- bool first = true;
-
- if (dir & R_VERT)
- {
- mergeDir(R_UP, first);
- if (_down) _down->mergeDir(R_DOWN);
- }
- else if (dir & R_HORI)
- {
- mergeDir(R_RIGHT, first);
- if (_left) _left->mergeDir(R_LEFT);
- }
-}
-
-
-void Region::mergeRegion(Region *src)
-{
- assert(src != NULL);
-
- if (src == _left)
- {
- pairHor(src->_left, this);
- _bbox.a.x = src->_bbox.a.x;
- }
- else if (src == _right)
- {
- pairHor(this, src->_right);
- _bbox.b.x = src->_bbox.b.x;
- }
- else if (src == _up)
- {
- pairVer(src->_up, this);
- _bbox.a.y = src->_bbox.a.y;
- }
- else if (src == _down)
- {
- pairVer(this, src->_down);
- _bbox.b.y = src->_bbox.b.y;
- }
- else
- {
- fprintf(stderr, "Error: Avoid::Region::merge(): "
- "Argument not adjoining region.\n");
- abort();
- }
- mergeAttributes(src);
- printf("DEL %p\n", src);
- delete src;
-}
-
-
-Region *Region::splitDir(double pos, unsigned int dir, bool first)
-{
- Point& o1 = _bbox.a;
- Point& o2 = _bbox.b;
-
- Region *newR = NULL;
-
- if (dir & R_VERT)
- {
- assert(pos > _bbox.a.x);
- assert(pos < _bbox.b.x);
-
- // Vertical recursion:
-
- // Create new block.
- Region *r = new Region(pos, o1.y, o2.x, o2.y);
- printf("NEW %p\n", r);
- r->copyAttributes(this);
-
- Region *o_up = _up;
- Region *o_down = _down;
-
- // Resize old block.
- o2.x = pos;
-
- pairHor(r, _right);
- pairHor(this, r);
-
- if (dir & R_UP)
- {
- if (!first) pairVer(r, _down->_right);
-
- if (o_up) o_up->splitDir(pos, R_UP);
- }
- else if (dir & R_DOWN)
- {
- if (!first) pairVer(_up->_right, r);
-
- if (o_down) o_down->splitDir(pos, R_DOWN);
- }
- newR = r;
- }
- else if (dir & R_HORI)
- {
- // Vertical recursion:
-
- // Create new block.
- Region *b = new Region(o1.x, pos, o2.x, o2.y);
- printf("NEW %p\n", b);
- b->copyAttributes(this);
-
- Region *o_left = _left;
- Region *o_right = _right;
-
- // Resize old block.
- o2.y = pos;
-
- pairVer(b, _down);
- pairVer(this, b);
-
- if (dir & R_LEFT)
- {
- if (!first) pairHor(b, _right->_down);
-
- if (o_left) o_left->splitDir(pos, R_LEFT);
- }
- else if (dir & R_RIGHT)
- {
- if (!first) pairHor(_left->_down, b);
-
- if (o_right) o_right->splitDir(pos, R_RIGHT);
- }
- newR = b;
- }
- return newR;
-}
-
-
-void Region::mergeDir(unsigned int dir, bool first)
-{
- if (dir & R_VERT)
- {
- assert(_right != NULL);
-
- mergeRegion(_right);
-
- if (dir & R_UP)
- {
- if (_up) _up->mergeDir(dir, R_UP);
- }
- else if (dir & R_DOWN)
- {
- if (_down) _down->mergeDir(dir, R_DOWN);
- }
- }
- else if (dir & R_HORI)
- {
- assert(_down != NULL);
-
- mergeRegion(_down);
-
- if (dir & R_LEFT)
- {
- if (_left) _left->mergeDir(dir, R_LEFT);
- }
- else if (dir & R_RIGHT)
- {
- if (_right) _right->mergeDir(dir, R_RIGHT);
- }
- }
-}
-
-
-void Region::copyAttributes(Region *src)
-{
- _blocks = src->_blocks;
-}
-
-
-void Region::mergeAttributes(Region *src)
-{
- _blocks.merge(src->_blocks);
- _blocks.sort();
- _blocks.unique();
-}
-
-
-//---------------------------
-// Static member functions:
-
-
-void Region::pairHor(Region *l, Region *r)
-{
- if (l) l->_right = r;
- if (r) r->_left = l;
-}
-
-
-void Region::pairVer(Region *a, Region *b)
-{
- if (a) a->_down = b;
- if (b) b->_up = a;
-}
-
-
-void Region::addShape(ShapeRef *shape)
-{
- if (!centerRegion)
- {
- // Add new default region.
- centerRegion = new Region();
- printf("NEW %p\n", centerRegion);
- }
- BBox bbox;
- // Get bounding box for added shape.
- shape->boundingBox(bbox);
- printBBox("Add", bbox);
-
- unsigned int shapeId = shape->id();
-
- // Find starting point for overlap
- Region *curr = centerRegion;
- unsigned int pos = R_INSIDE;
- while (!(curr->overlapCheck(bbox, pos)))
- {
- if (pos & R_LEFT)
- {
- curr = curr->_left;
- }
- else if (pos & R_RIGHT)
- {
- curr = curr->_right;
- }
- else if (pos & R_ABOVE)
- {
- curr = curr->_up;
- }
- else if (pos & R_BELOW)
- {
- curr = curr->_down;
- }
- }
-
- curr->initialSplit(bbox, pos, shapeId);
- centerRegion = curr;
-}
-
-
-void Region::removeShape(ShapeRef *shape)
-{
- const bool forMerge = true;
-
- BBox bbox;
- // Get bounding box for added shape.
- shape->boundingBox(bbox);
- printBBox("Remove", bbox);
-
- unsigned int shapeId = shape->id();
-
- Region *aboveTop = centerRegion->findRegion(bbox.a.y, R_HORI, forMerge);
- Region *aboveBottom = aboveTop->findRegion(bbox.b.y, R_HORI, forMerge);
- Region *leftOfLeft = aboveBottom->findRegion(bbox.a.x, R_VERT, forMerge);
- Region *leftOfRight = leftOfLeft->findRegion(bbox.b.x, R_VERT, forMerge);
-
- assert(aboveTop != NULL);
- assert(aboveBottom != NULL);
- assert(leftOfLeft != NULL);
- assert(leftOfRight != NULL);
-
- // Find Top Left.
- Region *topLeft = leftOfLeft->_right;
- while (topLeft->_bbox.a.y != aboveTop->_bbox.b.y)
- {
- topLeft = topLeft->_up;
- }
-
- // Find Bottom Right.
- Region *botRight = leftOfRight;
- while (botRight->_bbox.b.y != aboveBottom->_bbox.b.y)
- {
- botRight = botRight->_down;
- }
-
- // Clear blocking flag.
- Region *curr = topLeft, *cptr = NULL;
- while (curr->_bbox.b.y <= botRight->_bbox.b.y)
- {
- cptr = curr;
- while (cptr->_bbox.b.x <= botRight->_bbox.b.x)
- {
- ShapeList& blocks = cptr->_blocks;
-
- assert(std::find(blocks.begin(), blocks.end(), (int) shapeId) !=
- blocks.end());
- printf("%p - list %d remove %d\n", cptr,
- (int) blocks.size(), shapeId);
- cptr->_blocks.remove((int) shapeId);
-
- cptr = cptr->_right;
- }
-
- curr = curr->_down;
- }
-
- // These two are safe since they don't invalidate the pointers
- // to the regions that are inside the shape.
- if (aboveBottom->safeToMerge(R_HORI))
- {
- aboveBottom->merge(R_HORI);
- }
- if (leftOfRight->safeToMerge(R_VERT))
- {
- leftOfRight->merge(R_VERT);
- }
-
- // Be a bit more careful with these.
- double leftX = leftOfLeft->_bbox.b.x;
- if (aboveTop->safeToMerge(R_HORI))
- {
- aboveTop->merge(R_HORI);
- }
- // leftOfLeft may have been freed, so look for the new block at
- // that position.
- leftOfLeft = aboveTop->findRegion(leftX, R_VERT, forMerge);
- assert(leftOfLeft);
- if (leftOfLeft->safeToMerge(R_VERT))
- {
- leftOfLeft->merge(R_VERT);
- }
-}
-
-
-bool Region::safeToMerge(unsigned int dir)
-{
- bool unsafe = false;
-
- if (dir == R_HORI)
- {
- printf("safeToMerge? y = %.3f... ", _bbox.b.y);
- unsafe |= unsafeToMerge(R_RIGHT);
- if (_left) unsafe |= _left->unsafeToMerge(R_LEFT);
- }
- else if (dir == R_VERT)
- {
- printf("safeToMerge? x = %.3f... ", _bbox.b.x);
- unsafe |= unsafeToMerge(R_DOWN);
- if (_up) unsafe |= _up->unsafeToMerge(R_UP);
- }
- printf("%s.\n", (unsafe) ? "no" : "yes");
-
- return !unsafe;
-}
-
-
-bool Region::unsafeToMerge(unsigned int dir)
-{
- bool unsafe = false;
-
- if (dir & R_HORI)
- {
- // If they are not the same on both sides then we can merge.
- if (_blocks != _down->_blocks)
- {
- printf("\n _blocks:\n ");
- for (ShapeList::iterator i = _blocks.begin(); i != _blocks.end();
- ++i)
- {
- printf("%d ", *i);
- }
- printf("\n _down->_blocks:\n ");
- for (ShapeList::iterator i = _down->_blocks.begin();
- i != _down->_blocks.end(); ++i)
- {
- printf("%d ", *i);
- }
- unsafe |= true;
- printf("\n");
- }
-
- if ((dir == R_LEFT) && _left)
- {
- unsafe |= _left->unsafeToMerge(dir);
- }
- else if ((dir == R_RIGHT) && _right)
- {
- unsafe |= _right->unsafeToMerge(dir);
- }
- }
- else if (dir & R_VERT)
- {
- if (_blocks != _right->_blocks)
- {
- printf("\n _blocks:\n ");
- for (ShapeList::iterator i = _blocks.begin(); i != _blocks.end();
- ++i)
- {
- printf("%d ", *i);
- }
- printf("\n _right->_blocks:\n ");
- for (ShapeList::iterator i = _right->_blocks.begin();
- i != _right->_blocks.end(); ++i)
- {
- printf("%d ", *i);
- }
- unsafe |= true;
- printf("\n");
- }
-
- if ((dir == R_UP) && _up)
- {
- unsafe |= _up->unsafeToMerge(dir);
- }
- else if ((dir == R_DOWN) && _down)
- {
- unsafe |= _down->unsafeToMerge(dir);
- }
- }
- return unsafe;
-
-}
-
-
-Region *Region::getTopLeftRegion(void)
-{
- Region *curr = centerRegion;
-
- while (curr && (curr->_up || curr->_left))
- {
- if (curr->_up)
- {
- curr = curr->_up;
- }
- else
- {
- curr = curr->_left;
- }
- }
- return curr;
-}
-
-
-}
-
diff --git a/src/libavoid/region.h b/src/libavoid/region.h
deleted file mode 100644
index 6a44ccb08..000000000
--- a/src/libavoid/region.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * vim: ts=4 sw=4 et tw=0 wm=0
- *
- * libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
-*/
-
-#ifndef AVOID_REGION_H
-#define AVOID_REGION_H
-
-#include <list>
-#include "libavoid/geomtypes.h"
-
-namespace Avoid {
-
-class ShapeRef;
-
-typedef std::list<int> ShapeList;
-
-
-class Region
-{
- public:
- Region();
- Region(double x1, double y1, double x2, double y2);
-
- bool overlapCheck(BBox& bbox, unsigned int& p);
- void getBBox(BBox& bb);
- Region *up(void);
- Region *down(void);
- Region *left(void);
- Region *right(void);
- void initialSplit(BBox& bbox, unsigned int pos, unsigned int& shapeId);
- bool isBlock(void);
-
- static void pairHor(Region *l, Region *r);
- static void pairVer(Region *a, Region *b);
- static void addShape(ShapeRef *shape);
- static void removeShape(ShapeRef *shape);
- static Region *getTopLeftRegion(void);
-
- private:
- BBox _bbox;
- Region *_left;
- Region *_right;
- Region *_up;
- Region *_down;
- ShapeList _blocks;
-
- Region *split(double pos, unsigned int dir);
- void merge(unsigned int dir);
- void mergeRegion(Region *src);
- Region *findRegion(double pos, unsigned int dir,
- const bool forMerge = false);
- Region *splitDir(double pos, unsigned int dir, bool first = false);
- void mergeDir(unsigned int dir, bool first = false);
- void copyAttributes(Region *src);
- void mergeAttributes(Region *src);
- bool safeToMerge(unsigned int dir);
- bool unsafeToMerge(unsigned int dir);
-};
-
-
-}
-
-#endif
diff --git a/src/libavoid/router.cpp b/src/libavoid/router.cpp
index df0bacd02..ab13a981b 100644
--- a/src/libavoid/router.cpp
+++ b/src/libavoid/router.cpp
@@ -2,302 +2,667 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
-#include <cstdlib>
+
+#include <algorithm>
+#include <cmath>
+
#include "libavoid/shape.h"
#include "libavoid/router.h"
#include "libavoid/visibility.h"
#include "libavoid/connector.h"
-#include "libavoid/polyutil.h"
#include "libavoid/debug.h"
-#include "libavoid/region.h"
-#include "math.h"
-
-//#define ORTHOGONAL_ROUTING
+#include "libavoid/orthogonal.h"
+#include "libavoid/assertions.h"
namespace Avoid {
-static const unsigned int infoAdd = 1;
-static const unsigned int infoDel = 2;
-static const unsigned int infoMov = 3;
+enum ActionType {
+ ShapeMove,
+ ShapeAdd,
+ ShapeRemove,
+ ConnChange
+};
+typedef std::list<std::pair<unsigned int, ConnEnd> > ConnUpdateList;
-class MoveInfo {
+class ActionInfo {
public:
- MoveInfo(ShapeRef *s, Polygn *p, bool fM)
- : shape(s)
- , newPoly(copyPoly(*p))
- , firstMove(fM)
- { }
- ~MoveInfo()
+ ActionInfo(ActionType t, ShapeRef *s, const Polygon& p, bool fM)
+ : type(t),
+ objPtr(s),
+ newPoly(p),
+ firstMove(fM)
+ {
+ COLA_ASSERT(type == ShapeMove);
+ }
+ ActionInfo(ActionType t, ShapeRef *s)
+ : type(t),
+ objPtr(s)
+ {
+ COLA_ASSERT(type != ConnChange);
+ }
+ ActionInfo(ActionType t, ConnRef *c)
+ : type(t),
+ objPtr(c)
+ {
+ COLA_ASSERT(type == ConnChange);
+ }
+ ~ActionInfo()
+ {
+ }
+ ShapeRef *shape(void) const
{
- freePoly(newPoly);
+ COLA_ASSERT((type == ShapeMove) || (type == ShapeAdd) ||
+ (type == ShapeRemove));
+ return (static_cast<ShapeRef *> (objPtr));
}
- ShapeRef *shape;
- Polygn newPoly;
+ ConnRef *conn(void) const
+ {
+ COLA_ASSERT(type == ConnChange);
+ return (static_cast<ConnRef *> (objPtr));
+ }
+ bool operator==(const ActionInfo& rhs) const
+ {
+ return (type == rhs.type) && (objPtr == rhs.objPtr);
+ }
+ bool operator<(const ActionInfo& rhs) const
+ {
+ if (type != rhs.type)
+ {
+ return type < rhs.type;
+ }
+ return objPtr < rhs.objPtr;
+ }
+ ActionType type;
+ void *objPtr;
+ Polygon newPoly;
bool firstMove;
+ ConnUpdateList conns;
};
-
-Router::Router()
- : PartialTime(false)
- , SimpleRouting(false)
- , segmt_penalty(0)
- , angle_penalty(0)
- , crossing_penalty(200)
- // Algorithm options:
- , UseAStarSearch(true)
- , IgnoreRegions(true)
- , SelectiveReroute(true)
- , IncludeEndpoints(true)
- , UseLeesAlgorithm(false)
- , InvisibilityGrph(true)
- , ConsolidateMoves(true)
- , PartialFeedback(false)
- // Instrumentation:
- , st_checked_edges(0)
-#ifdef LINEDEBUG
- , avoid_screen(NULL)
+Router::Router(const unsigned int flags)
+ : visOrthogGraph(true),
+ PartialTime(false),
+ SimpleRouting(false),
+ ClusteredRouting(true),
+ // Poly-line algorithm options:
+ IgnoreRegions(true),
+ UseLeesAlgorithm(true),
+ InvisibilityGrph(true),
+ // General algorithm options:
+ SelectiveReroute(true),
+ PartialFeedback(false),
+ RubberBandRouting(false),
+ // Instrumentation:
+ st_checked_edges(0),
+#ifdef LIBAVOID_SDL
+ avoid_screen(NULL),
#endif
-{ }
+ _largestAssignedId(0),
+ _consolidateActions(true),
+ _orthogonalNudgeDistance(4.0),
+ // Mode options:
+ _polyLineRouting(false),
+ _orthogonalRouting(false),
+ _staticGraphInvalidated(true),
+ _inCrossingPenaltyReroutingStage(false)
+{
+ // At least one of the Routing modes must be set.
+ COLA_ASSERT(flags & (PolyLineRouting | OrthogonalRouting));
+ if (flags & PolyLineRouting)
+ {
+ _polyLineRouting = true;
+ }
+ if (flags & OrthogonalRouting)
+ {
+ _orthogonalRouting = true;
+ }
+ for (size_t p = 0; p < lastPenaltyMarker; ++p)
+ {
+ _routingPenalties[p] = 0.0;
+ }
+ _routingPenalties[clusterCrossingPenalty] = 4000;
+}
-void Router::addShape(ShapeRef *shape)
+Router::~Router()
{
- unsigned int pid = shape->id();
- Polygn poly = shape->poly();
+ // Delete remaining connectors.
+ ConnRefList::iterator conn = connRefs.begin();
+ while (conn != connRefs.end())
+ {
+ db_printf("Deleting connector %u in ~Router()\n", (*conn)->id());
+ delete *conn;
+ conn = connRefs.begin();
+ }
- adjustContainsWithAdd(poly, pid);
-
- // o Check all visibility edges to see if this one shape
- // blocks them.
- newBlockingShape(&poly, pid);
+ // Remove remaining shapes.
+ ShapeRefList::iterator shape = shapeRefs.begin();
+ while (shape != shapeRefs.end())
+ {
+ ShapeRef *shapePtr = *shape;
+ db_printf("Deleting shape %u in ~Router()\n", shapePtr->id());
+ if (shapePtr->isActive())
+ {
+ shapePtr->removeFromGraph();
+ shapePtr->makeInactive();
+ }
+ delete shapePtr;
+ shape = shapeRefs.begin();
+ }
-#ifdef ORTHOGONAL_ROUTING
- Region::addShape(shape);
-#endif
+ // Cleanup orphaned orthogonal graph vertices.
+ destroyOrthogonalVisGraph();
+
+ COLA_ASSERT(connRefs.size() == 0);
+ COLA_ASSERT(shapeRefs.size() == 0);
+ COLA_ASSERT(visGraph.size() == 0);
+ COLA_ASSERT(invisGraph.size() == 0);
+}
+
+
+void Router::modifyConnector(ConnRef *conn, const unsigned int type,
+ const ConnEnd& connEnd)
+{
+ ActionInfo modInfo(ConnChange, conn);
- // o Calculate visibility for the new vertices.
- if (UseLeesAlgorithm)
+ ActionInfoList::iterator found =
+ find(actionList.begin(), actionList.end(), modInfo);
+ if (found == actionList.end())
{
- shapeVisSweep(shape);
+ modInfo.conns.push_back(std::make_pair(type, connEnd));
+ actionList.push_back(modInfo);
}
else
{
- shapeVis(shape);
+ found->conns.push_back(std::make_pair(type, connEnd));
+ }
+
+ if (!_consolidateActions)
+ {
+ processTransaction();
}
- callbackAllInvalidConnectors();
}
-void Router::delShape(ShapeRef *shape)
+void Router::modifyConnector(ConnRef *conn)
{
- unsigned int pid = shape->id();
+ ActionInfo modInfo(ConnChange, conn);
- // Delete items that are queued in the movList.
- for (MoveInfoList::iterator it = moveList.begin(); it != moveList.end(); )
+ ActionInfoList::iterator found =
+ find(actionList.begin(), actionList.end(), modInfo);
+ if (found == actionList.end())
{
- if ((*it)->shape->id() == pid)
- {
- MoveInfoList::iterator doomed = it;
- ++it;
- moveList.erase(doomed);
- }
- else
- {
- ++it;
- }
+ actionList.push_back(modInfo);
}
- // o Remove entries related to this shape's vertices
- shape->removeFromGraph();
-
- if (SelectiveReroute)
+ if (!_consolidateActions)
{
- markConnectors(shape);
+ processTransaction();
}
+}
- adjustContainsWithDel(pid);
-
-#ifdef ORTHOGONAL_ROUTING
- Region::removeShape(shape);
-#endif
- delete shape;
-
- // o Check all edges that were blocked by this shape.
- if (InvisibilityGrph)
+void Router::removeQueuedConnectorActions(ConnRef *conn)
+{
+ ActionInfo modInfo(ConnChange, conn);
+
+ ActionInfoList::iterator found =
+ find(actionList.begin(), actionList.end(), modInfo);
+ if (found != actionList.end())
{
- checkAllBlockedEdges(pid);
+ actionList.erase(found);
}
- else
+}
+
+
+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(),
+ ActionInfo(ShapeRemove, shape)) == actionList.end());
+ COLA_ASSERT(find(actionList.begin(), actionList.end(),
+ ActionInfo(ShapeMove, shape)) == actionList.end());
+
+ ActionInfo addInfo(ShapeAdd, shape);
+
+ ActionInfoList::iterator found =
+ find(actionList.begin(), actionList.end(), addInfo);
+ if (found == actionList.end())
+ {
+ actionList.push_back(addInfo);
+ }
+
+ if (!_consolidateActions)
+ {
+ processTransaction();
+ }
+}
+
+
+void Router::removeShape(ShapeRef *shape)
+{
+ // 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(),
+ ActionInfo(ShapeAdd, shape)) == actionList.end());
+
+ // Delete any ShapeMove entries for this shape in the action list.
+ ActionInfoList::iterator found = find(actionList.begin(),
+ actionList.end(), ActionInfo(ShapeMove, shape));
+ if (found != actionList.end())
+ {
+ actionList.erase(found);
+ }
+
+ // Add the ShapeRemove entry.
+ ActionInfo remInfo(ShapeRemove, shape);
+ found = find(actionList.begin(), actionList.end(), remInfo);
+ if (found == actionList.end())
+ {
+ actionList.push_back(remInfo);
+ }
+
+ if (!_consolidateActions)
{
- // check all edges not in graph
- checkAllMissingEdges();
+ processTransaction();
}
- callbackAllInvalidConnectors();
}
-void Router::moveShape(ShapeRef *shape, Polygn *newPoly, const bool first_move)
+void Router::moveShape(ShapeRef *shape, const double xDiff, const double yDiff)
{
+ Polygon newPoly = shape->polygon();
+ newPoly.translate(xDiff, yDiff);
+
+ moveShape(shape, 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(),
+ ActionInfo(ShapeRemove, shape)) == actionList.end());
+
+ if (find(actionList.begin(), actionList.end(),
+ ActionInfo(ShapeAdd, shape)) != actionList.end())
+ {
+ // The Add is enough, no need for the Move action too.
+ return;
+ }
+
+ 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.
- bool alreadyThere = false;
- unsigned int id = shape->id();
- MoveInfoList::iterator finish = moveList.end();
- for (MoveInfoList::iterator it = moveList.begin(); it != finish; ++it)
+ ActionInfoList::iterator found =
+ find(actionList.begin(), actionList.end(), moveInfo);
+
+ if (found != actionList.end())
{
- if ((*it)->shape->id() == id)
+ if (!SimpleRouting)
{
- if (!SimpleRouting)
- {
- fprintf(stderr,
- "warning: multiple moves requested for shape %d.\n",
- (int) id);
- }
- // Just update the MoveInfo with the second polygon, but
- // leave the firstMove setting alone.
- (*it)->newPoly = copyPoly(*newPoly);
- alreadyThere = true;
+ db_printf("warning: multiple moves requested for shape %d "
+ "within a single transaction.\n", (int) shape->id());
}
+ // Just update the ActionInfo with the second polygon, but
+ // leave the firstMove setting alone.
+ found->newPoly = newPoly;
+ }
+ else
+ {
+ actionList.push_back(moveInfo);
}
- if (!alreadyThere)
+ if (!_consolidateActions)
{
- MoveInfo *moveInfo = new MoveInfo(shape, newPoly, first_move);
- moveList.push_back(moveInfo);
+ processTransaction();
}
+}
+
- if (!ConsolidateMoves)
+void Router::setStaticGraphInvalidated(const bool invalidated)
+{
+ _staticGraphInvalidated = invalidated;
+}
+
+
+void Router::destroyOrthogonalVisGraph(void)
+{
+ // Remove orthogonal visibility graph edges.
+ visOrthogGraph.clear();
+
+ // Remove the now orphaned vertices.
+ VertInf *curr = vertices.shapesBegin();
+ while (curr)
{
- processMoves();
+ if (curr->orphaned() && (curr->id == dummyOrthogID))
+ {
+ VertInf *following = vertices.removeVertex(curr);
+ delete curr;
+ curr = following;
+ continue;
+ }
+ curr = curr->lstNext;
}
}
-void Router::processMoves(void)
+void Router::regenerateStaticBuiltGraph(void)
{
- // If SimpleRouting, then don't update yet.
- if (moveList.empty() || SimpleRouting)
+ // Here we do talks involved in updating the static-built visibility
+ // graph (if necessary) before we do any routing.
+ if (_staticGraphInvalidated)
{
- return;
+ if (_orthogonalRouting)
+ {
+ destroyOrthogonalVisGraph();
+
+ timers.Register(tmOrthogGraph, timerStart);
+ // Regenerate a new visibility graph.
+ generateStaticOrthogonalVisGraph(this);
+
+ timers.Stop();
+ }
+ _staticGraphInvalidated = false;
+ }
+}
+
+
+bool Router::shapeInQueuedActionList(ShapeRef *shape) const
+{
+ bool foundAdd = find(actionList.begin(), actionList.end(),
+ ActionInfo(ShapeAdd, shape)) != actionList.end();
+ bool foundRem = find(actionList.begin(), actionList.end(),
+ ActionInfo(ShapeRemove, shape)) != actionList.end();
+ bool foundMove = find(actionList.begin(), actionList.end(),
+ ActionInfo(ShapeMove, shape)) != actionList.end();
+
+ return (foundAdd || foundRem || foundMove);
+}
+
+
+bool Router::transactionUse(void) const
+{
+ return _consolidateActions;
+}
+
+
+void Router::setTransactionUse(const bool transactions)
+{
+ _consolidateActions = transactions;
+}
+
+
+bool Router::processTransaction(void)
+{
+ bool notPartialTime = !(PartialFeedback && PartialTime);
+ bool seenShapeMovesOrDeletes = false;
+
+ // If SimpleRouting, then don't update here.
+ if (actionList.empty() || SimpleRouting)
+ {
+ return false;
}
- MoveInfoList::iterator curr;
- MoveInfoList::iterator finish = moveList.end();
- for (curr = moveList.begin(); curr != finish; ++curr)
+ actionList.sort();
+ ActionInfoList::iterator curr;
+ ActionInfoList::iterator finish = actionList.end();
+ for (curr = actionList.begin(); curr != finish; ++curr)
{
- MoveInfo *moveInf = *curr;
- ShapeRef *shape = moveInf->shape;
- Polygn *newPoly = &(moveInf->newPoly);
- bool first_move = moveInf->firstMove;
+ ActionInfo& actInf = *curr;
+ if (!((actInf.type == ShapeRemove) || (actInf.type == ShapeMove)))
+ {
+ // Not a move or remove action, so don't do anything.
+ continue;
+ }
+ seenShapeMovesOrDeletes = true;
+
+ ShapeRef *shape = actInf.shape();
+ bool isMove = (actInf.type == ShapeMove);
+ bool first_move = actInf.firstMove;
unsigned int pid = shape->id();
- bool notPartialTime = !(PartialFeedback && PartialTime);
// o Remove entries related to this shape's vertices
shape->removeFromGraph();
-
- if (SelectiveReroute && (notPartialTime || first_move))
+
+ if (SelectiveReroute && (!isMove || notPartialTime || first_move))
{
markConnectors(shape);
}
adjustContainsWithDel(pid);
-
-#ifdef ORTHOGONAL_ROUTING
- Region::removeShape(shape);
-#endif
-
- shape->setNewPoly(*newPoly);
-
- adjustContainsWithAdd(*newPoly, 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 (InvisibilityGrph)
+
+ if (seenShapeMovesOrDeletes && _polyLineRouting)
{
- for (curr = moveList.begin(); curr != finish; ++curr)
+ if (InvisibilityGrph)
{
- MoveInfo *moveInf = *curr;
- ShapeRef *shape = moveInf->shape;
- unsigned int pid = shape->id();
-
- // o Check all edges that were blocked by this shape.
- checkAllBlockedEdges(pid);
+ for (curr = actionList.begin(); curr != finish; ++curr)
+ {
+ ActionInfo& actInf = *curr;
+ if (!((actInf.type == ShapeRemove) ||
+ (actInf.type == ShapeMove)))
+ {
+ // Not a move or remove action, so don't do anything.
+ continue;
+ }
+
+ // o Check all edges that were blocked by this shape.
+ checkAllBlockedEdges(actInf.shape()->id());
+ }
+ }
+ else
+ {
+ // check all edges not in graph
+ checkAllMissingEdges();
}
- }
- else
- {
- // check all edges not in graph
- checkAllMissingEdges();
}
- while ( ! moveList.empty() )
+ for (curr = actionList.begin(); curr != finish; ++curr)
{
- MoveInfo *moveInf = moveList.front();
- ShapeRef *shape = moveInf->shape;
- Polygn *newPoly = &(moveInf->newPoly);
+ ActionInfo& actInf = *curr;
+ if (!((actInf.type == ShapeAdd) || (actInf.type == ShapeMove)))
+ {
+ // Not a move or add action, so don't do anything.
+ continue;
+ }
+
+ ShapeRef *shape = actInf.shape();
+ Polygon& newPoly = actInf.newPoly;
+ bool isMove = (actInf.type == ShapeMove);
unsigned int pid = shape->id();
- bool notPartialTime = !(PartialFeedback && PartialTime);
// Restore this shape for visibility.
shape->makeActive();
-#ifdef ORTHOGONAL_ROUTING
- Region::addShape(shape);
-#endif
+ if (isMove)
+ {
+ shape->setNewPoly(newPoly);
+ }
+ const Polygon& shapePoly = shape->polygon();
- // o Check all visibility edges to see if this one shape
- // blocks them.
- if (notPartialTime)
+ adjustContainsWithAdd(shapePoly, pid);
+
+ if (_polyLineRouting)
{
- newBlockingShape(newPoly, pid);
+ // o Check all visibility edges to see if this one shape
+ // blocks them.
+ if (!isMove || notPartialTime)
+ {
+ newBlockingShape(shapePoly, pid);
+ }
+
+ // o Calculate visibility for the new vertices.
+ if (UseLeesAlgorithm)
+ {
+ shapeVisSweep(shape);
+ }
+ else
+ {
+ shapeVis(shape);
+ }
}
+ }
- // o Calculate visibility for the new vertices.
- if (UseLeesAlgorithm)
+ // Update connector endpoints.
+ for (curr = actionList.begin(); curr != finish; ++curr)
+ {
+ ActionInfo& actInf = *curr;
+ if (actInf.type != ConnChange)
{
- shapeVisSweep(shape);
+ continue;
}
- else
+ for (ConnUpdateList::iterator conn = actInf.conns.begin();
+ conn != actInf.conns.end(); ++conn)
{
- shapeVis(shape);
+ actInf.conn()->updateEndPoint(conn->first, conn->second);
}
-
- moveList.pop_front();
- delete moveInf;
}
- callbackAllInvalidConnectors();
+ // Clear the actionList.
+ actionList.clear();
+
+ _staticGraphInvalidated = true;
+ rerouteAndCallbackConnectors();
+
+ return true;
+}
+
+
+void Router::addCluster(ClusterRef *cluster)
+{
+ cluster->makeActive();
+
+ unsigned int pid = cluster->id();
+ ReferencingPolygon& poly = cluster->polygon();
+
+ adjustClustersWithAdd(poly, pid);
+}
+
+
+void Router::delCluster(ClusterRef *cluster)
+{
+ cluster->makeInactive();
+
+ unsigned int pid = cluster->id();
+
+ adjustClustersWithDel(pid);
+}
+
+
+void Router::setOrthogonalNudgeDistance(const double dist)
+{
+ COLA_ASSERT(dist >= 0);
+ _orthogonalNudgeDistance = dist;
+}
+
+
+double Router::orthogonalNudgeDistance(void) const
+{
+ return _orthogonalNudgeDistance;
+}
+
+
+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) ?
+ (_largestAssignedId + 1) : suggestedId;
+
+ // Have the router record if this ID is larger than the _largestAssignedId.
+ _largestAssignedId = std::max(_largestAssignedId, assignedId);
+
+ // If assertions are enabled, then we check that this ID really is unique.
+ COLA_ASSERT(idIsUnique(assignedId));
+
+ return assignedId;
+}
+
+
+ // 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.
+ // 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
+{
+ unsigned int count = 0;
+
+ // Examine shapes.
+ for (ShapeRefList::const_iterator i = shapeRefs.begin();
+ i != shapeRefs.end(); ++i)
+ {
+ if ((*i)->id() == id)
+ {
+ count++;
+ }
+ }
+
+ // Examine connectors.
+ for (ConnRefList::const_iterator i = connRefs.begin();
+ i != connRefs.end(); ++i)
+ {
+ if ((*i)->id() == id)
+ {
+ count++;
+ }
+ }
+
+ // Examine clusters.
+ for (ClusterRefList::const_iterator i = clusterRefs.begin();
+ i != clusterRefs.end(); ++i)
+ {
+ if ((*i)->id() == id)
+ {
+ count++;
+ }
+ }
+
+ if (count > 1)
+ {
+ db_printf("Warning:\tlibavoid object ID %d not unique.\n", id);
+ return false;
+ }
+ return true;
}
@@ -313,13 +678,15 @@ void Router::processMoves(void)
void Router::attachedConns(IntList &conns, const unsigned int shapeId,
const unsigned int type)
{
- ConnRefList::iterator fin = connRefs.end();
- for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) {
-
- if ((type & runningTo) && ((*i)->_dstId == shapeId)) {
+ ConnRefList::const_iterator fin = connRefs.end();
+ for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i)
+ {
+ 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);
}
}
@@ -331,16 +698,19 @@ void Router::attachedConns(IntList &conns, const unsigned int shapeId,
void Router::attachedShapes(IntList &shapes, const unsigned int shapeId,
const unsigned int type)
{
- ConnRefList::iterator fin = connRefs.end();
- for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i) {
- if ((type & runningTo) && ((*i)->_dstId == shapeId)) {
+ ConnRefList::const_iterator fin = connRefs.end();
+ for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i)
+ {
+ if ((type & runningTo) && ((*i)->_dstId == shapeId))
+ {
if ((*i)->_srcId != 0)
{
// Only if there is a shape attached to the other end.
shapes.push_back((*i)->_srcId);
}
}
- else if ((type & runningFrom) && ((*i)->_srcId == shapeId)) {
+ else if ((type & runningFrom) && ((*i)->_srcId == shapeId))
+ {
if ((*i)->_dstId != 0)
{
// Only if there is a shape attached to the other end.
@@ -351,18 +721,127 @@ void Router::attachedShapes(IntList &shapes, const unsigned int shapeId,
}
- // It's intended this function is called after shape movement has
- // happened to alert connectors that they need to be rerouted.
-void Router::callbackAllInvalidConnectors(void)
+ // 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.
+ regenerateStaticBuiltGraph();
+
+ timers.Register(tmOrthogRoute, timerStart);
+ for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i)
+ {
+ (*i)->_needs_repaint = false;
+ bool rerouted = (*i)->generatePath();
+ if (rerouted)
+ {
+ reroutedConns.insert(*i);
+ }
+ }
+ timers.Stop();
+
+ // Find and reroute crossing connectors if crossing penalties are set.
+ improveCrossings();
+
+ // Perform centring and nudging for othogonal routes.
+ improveOrthogonalRoutes(this);
+
+ // Alert connectors that they need redrawing.
+ for (ConnRefList::const_iterator i = connRefs.begin(); i != fin; ++i)
+ {
+ (*i)->_needs_repaint = true;
+ (*i)->performCallback();
+ }
+}
+
+
+typedef std::set<ConnRef *> ConnRefSet;
+
+void Router::improveCrossings(void)
{
+ const double crossing_penalty = routingPenalty(crossingPenalty);
+ const double shared_path_penalty = routingPenalty(fixedSharedPathPenalty);
+ if ((crossing_penalty == 0) && (shared_path_penalty == 0))
+ {
+ // 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) {
- (*i)->handleInvalid();
+ for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i)
+ {
+ Avoid::Polygon& iRoute = (*i)->routeRef();
+ ConnRefList::iterator j = i;
+ for (++j; j != fin; ++j)
+ {
+ if ((crossingConns.find(*i) != crossingConns.end()) &&
+ (crossingConns.find(*j) != crossingConns.end()))
+ {
+ // We already know both these have crossings.
+ continue;
+ }
+ // Determine if this pair cross.
+ Avoid::Polygon& jRoute = (*j)->routeRef();
+ CrossingsInfoPair crossingInfo = std::make_pair(0, 0);
+ bool meetsPenaltyCriteria = false;
+ for (size_t jInd = 1; jInd < jRoute.size(); ++jInd)
+ {
+ const bool finalSegment = ((jInd + 1) == jRoute.size());
+ CrossingsInfoPair crossingInfo = countRealCrossings(
+ 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))
+ {
+ // We are penalising fixedSharedPaths and there is a
+ // fixedSharedPath.
+ meetsPenaltyCriteria = true;
+ break;
+ }
+ else if ((crossing_penalty > 0) && (crossingInfo.first > 0))
+ {
+ // We are penalising crossings and this is a crossing.
+ meetsPenaltyCriteria = true;
+ break;
+ }
+ }
+ if (meetsPenaltyCriteria)
+ {
+ crossingConns.insert(*i);
+ crossingConns.insert(*j);
+ }
+ }
+ }
+
+ for (ConnRefSet::iterator i = crossingConns.begin();
+ i != crossingConns.end(); ++i)
+ {
+ ConnRef *conn = *i;
+ conn->makePathInvalid();
+ // XXX: Could we free these routes here for extra savings?
+ // conn->freeRoutes();
}
+ for (ConnRefSet::iterator i = crossingConns.begin();
+ i != crossingConns.end(); ++i)
+ {
+ ConnRef *conn = *i;
+ conn->generatePath();
+ }
+ _inCrossingPenaltyReroutingStage = false;
}
-void Router::newBlockingShape(Polygn *poly, int pid)
+void Router::newBlockingShape(const Polygon& poly, int pid)
{
// o Check all visibility edges to see if this one shape
// blocks them.
@@ -382,8 +861,11 @@ void Router::newBlockingShape(Polygn *poly, int pid)
Point e2 = points.second;
bool blocked = false;
- bool ep_in_poly1 = !(eID1.isShape) ? inPoly(*poly, e1) : false;
- bool ep_in_poly2 = !(eID2.isShape) ? inPoly(*poly, e2) : false;
+ bool countBorder = false;
+ bool ep_in_poly1 = !(eID1.isShape) ?
+ inPoly(poly, e1, countBorder) : false;
+ bool ep_in_poly2 = !(eID2.isShape) ?
+ inPoly(poly, e2, countBorder) : false;
if (ep_in_poly1 || ep_in_poly2)
{
// Don't check edges that have a connector endpoint
@@ -391,10 +873,14 @@ void Router::newBlockingShape(Polygn *poly, int pid)
continue;
}
- for (int pt_i = 0; pt_i < poly->pn; pt_i++)
+ bool seenIntersectionAtEndpoint = false;
+ for (size_t pt_i = 0; pt_i < poly.size(); ++pt_i)
{
- int pt_n = (pt_i == (poly->pn - 1)) ? 0 : pt_i + 1;
- if (segmentIntersect(e1, e2, poly->ps[pt_i], poly->ps[pt_n]))
+ 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,
+ seenIntersectionAtEndpoint))
{
blocked = true;
break;
@@ -422,7 +908,7 @@ void Router::newBlockingShape(Polygn *poly, int pid)
void Router::checkAllBlockedEdges(int pid)
{
- assert(InvisibilityGrph);
+ COLA_ASSERT(InvisibilityGrph);
for (EdgeInf *iter = invisGraph.begin(); iter != invisGraph.end() ; )
{
@@ -444,18 +930,9 @@ void Router::checkAllBlockedEdges(int pid)
void Router::checkAllMissingEdges(void)
{
- assert(!InvisibilityGrph);
+ COLA_ASSERT(!InvisibilityGrph);
- VertInf *first = NULL;
-
- if (IncludeEndpoints)
- {
- first = vertices.connsBegin();
- }
- else
- {
- first = vertices.shapesBegin();
- }
+ VertInf *first = vertices.connsBegin();
VertInf *pend = vertices.end();
for (VertInf *i = first; i != pend; i = i->lstNext)
@@ -489,39 +966,79 @@ void Router::checkAllMissingEdges(void)
void Router::generateContains(VertInf *pt)
{
contains[pt->id].clear();
+ enclosingClusters[pt->id].clear();
+
+ // Don't count points on the border as being inside.
+ bool countBorder = false;
- ShapeRefList::iterator finish = shapeRefs.end();
- for (ShapeRefList::iterator i = shapeRefs.begin(); i != finish; ++i)
+ // Compute enclosing shapes.
+ ShapeRefList::const_iterator finish = shapeRefs.end();
+ for (ShapeRefList::const_iterator i = shapeRefs.begin(); i != finish; ++i)
{
- Polygn poly = copyPoly(*i);
- if (inPoly(poly, pt->point))
+ if (inPoly((*i)->polygon(), pt->point, countBorder))
{
contains[pt->id].insert((*i)->id());
}
- freePoly(poly);
+ }
+
+ // Computer enclosing Clusters
+ ClusterRefList::const_iterator clFinish = clusterRefs.end();
+ for (ClusterRefList::const_iterator i = clusterRefs.begin();
+ i != clFinish; ++i)
+ {
+ if (inPolyGen((*i)->polygon(), pt->point))
+ {
+ enclosingClusters[pt->id].insert((*i)->id());
+ }
}
}
-void Router::adjustContainsWithAdd(const Polygn& poly, const int p_shape)
+void Router::adjustClustersWithAdd(const PolygonInterface& poly,
+ const int p_cluster)
{
for (VertInf *k = vertices.connsBegin(); k != vertices.shapesBegin();
k = k->lstNext)
{
- if (inPoly(poly, k->point))
+ if (inPolyGen(poly, k->point))
{
- contains[k->id].insert(p_shape);
+ enclosingClusters[k->id].insert(p_cluster);
}
}
}
-void Router::adjustContainsWithDel(const int p_shape)
+void Router::adjustClustersWithDel(const int p_cluster)
+{
+ for (ContainsMap::iterator k = enclosingClusters.begin();
+ k != enclosingClusters.end(); ++k)
+ {
+ (*k).second.erase(p_cluster);
+ }
+}
+
+
+void Router::adjustContainsWithAdd(const Polygon& poly, const int p_shape)
{
+ // Don't count points on the border as being inside.
+ bool countBorder = false;
+
for (VertInf *k = vertices.connsBegin(); k != vertices.shapesBegin();
k = k->lstNext)
{
- contains[k->id].erase(p_shape);
+ if (inPoly(poly, k->point, countBorder))
+ {
+ contains[k->id].insert(p_shape);
+ }
+ }
+}
+
+
+void Router::adjustContainsWithDel(const int p_shape)
+{
+ for (ContainsMap::iterator k = contains.begin(); k != contains.end(); ++k)
+ {
+ (*k).second.erase(p_shape);
}
}
@@ -537,14 +1054,21 @@ static double AngleAFromThreeSides(const double a, const double b,
void Router::markConnectors(ShapeRef *shape)
{
- assert(SelectiveReroute);
+ if (RubberBandRouting)
+ {
+ // When rubber-band routing, we do no reroute connectors that
+ // may have a better route, only invalid connectors.
+ return;
+ }
+
+ COLA_ASSERT(SelectiveReroute);
- ConnRefList::iterator end = connRefs.end();
- for (ConnRefList::iterator it = connRefs.begin(); it != end; ++it)
+ ConnRefList::const_iterator end = connRefs.end();
+ for (ConnRefList::const_iterator it = connRefs.begin(); it != end; ++it)
{
ConnRef *conn = (*it);
- if (conn->_route.pn == 0)
+ if (conn->_route.empty())
{
// Ignore uninitialised connectors.
continue;
@@ -556,7 +1080,7 @@ void Router::markConnectors(ShapeRef *shape)
}
Point start = conn->_route.ps[0];
- Point end = conn->_route.ps[conn->_route.pn - 1];
+ Point end = conn->_route.ps[conn->_route.size() - 1];
double conndist = conn->_route_dist;
@@ -609,12 +1133,12 @@ void Router::markConnectors(ShapeRef *shape)
Point n_p2(p2.x - p1.x, p2.y - p1.y);
Point n_start(start.x - p1.x, start.y - p1.y);
Point n_end(end.x - p1.x, end.y - p1.y);
- //printf("n_p2: (%.1f, %.1f)\n", n_p2.x, n_p2.y);
- //printf("n_start: (%.1f, %.1f)\n", n_start.x, n_start.y);
- //printf("n_end: (%.1f, %.1f)\n", n_end.x, n_end.y);
+ //db_printf("n_p2: (%.1f, %.1f)\n", n_p2.x, n_p2.y);
+ //db_printf("n_start: (%.1f, %.1f)\n", n_start.x, n_start.y);
+ //db_printf("n_end: (%.1f, %.1f)\n", n_end.x, n_end.y);
double theta = 0 - atan2(n_p2.y, n_p2.x);
- //printf("theta = %.2f\n", theta * (180 / PI));
+ //db_printf("theta = %.2f\n", theta * (180 / PI));
Point r_p1(0, 0);
Point r_p2 = n_p2;
@@ -630,16 +1154,15 @@ void Router::markConnectors(ShapeRef *shape)
start.y = cosv * n_start.y + sinv * n_start.x;
end.x = cosv * n_end.x - sinv * n_end.y;
end.y = cosv * n_end.y + sinv * n_end.x;
- //printf("r_p2: (%.1f, %.1f)\n", r_p2.x, r_p2.y);
- //printf("r_start: (%.1f, %.1f)\n", start.x, start.y);
- //printf("r_end: (%.1f, %.1f)\n", end.x, end.y);
+ //db_printf("r_p2: (%.1f, %.1f)\n", r_p2.x, r_p2.y);
+ //db_printf("r_start: (%.1f, %.1f)\n", start.x, start.y);
+ //db_printf("r_end: (%.1f, %.1f)\n", end.x, end.y);
- if (((int) r_p2.y) != 0)
+ // This might be slightly off.
+ if (fabs(r_p2.y) > 0.0001)
{
- printf("r_p2.y: %f != 0\n", r_p2.y);
- std::abort();
+ db_printf("r_p2.y: %f != 0\n", r_p2.y);
}
- // This might be slightly off.
r_p2.y = 0;
offy = r_p1.y;
@@ -679,13 +1202,13 @@ void Router::markConnectors(ShapeRef *shape)
x = ((b*c) + (a*d)) / (b + d);
}
- //printf("%.1f, %.1f, %.1f, %.1f\n", a, b, c, d);
- //printf("x = %.1f\n", x);
+ //db_printf("%.1f, %.1f, %.1f, %.1f\n", a, b, c, d);
+ //db_printf("x = %.1f\n", x);
x = std::max(min, x);
x = std::min(max, x);
- //printf("x = %.1f\n", x);
+ //db_printf("x = %.1f\n", x);
Point xp;
if (p1.x == p2.x)
@@ -698,20 +1221,20 @@ void Router::markConnectors(ShapeRef *shape)
xp.x = x;
xp.y = offy;
}
- //printf("(%.1f, %.1f)\n", xp.x, xp.y);
+ //db_printf("(%.1f, %.1f)\n", xp.x, xp.y);
- e1 = dist(start, xp);
- e2 = dist(xp, end);
+ e1 = euclideanDist(start, xp);
+ e2 = euclideanDist(xp, end);
estdist = e1 + e2;
- //printf("is %.1f < %.1f\n", estdist, conndist);
+ //db_printf("is %.1f < %.1f\n", estdist, conndist);
if (estdist < conndist)
{
#ifdef SELECTIVE_DEBUG
//double angle = AngleAFromThreeSides(dist(start, end),
// e1, e2);
- printf("[%3d] - Possible better path found (%.1f < %.1f)\n",
+ db_printf("[%3d] - Possible better path found (%.1f < %.1f)\n",
conn->_id, estdist, conndist);
#endif
conn->_needs_reroute_flag = true;
@@ -723,6 +1246,81 @@ void Router::markConnectors(ShapeRef *shape)
}
+ConnType Router::validConnType(const ConnType select) const
+{
+ if (select != ConnType_None)
+ {
+ if ((select == ConnType_Orthogonal) && _orthogonalRouting)
+ {
+ return ConnType_Orthogonal;
+ }
+ else if ((select == ConnType_PolyLine) && _polyLineRouting)
+ {
+ return ConnType_PolyLine;
+ }
+ }
+
+ if (_polyLineRouting)
+ {
+ return ConnType_PolyLine;
+ }
+ else if (_orthogonalRouting)
+ {
+ return ConnType_Orthogonal;
+ }
+ return ConnType_None;
+}
+
+
+void Router::setRoutingPenalty(const PenaltyType penType, const double penVal)
+{
+ COLA_ASSERT(penType < lastPenaltyMarker);
+ if (penVal < 0)
+ {
+ // Set some sensible penalty.
+ switch (penType)
+ {
+ case segmentPenalty:
+ _routingPenalties[penType] = 50;
+ break;
+ case fixedSharedPathPenalty:
+ _routingPenalties[penType] = 110;
+ break;
+ case anglePenalty:
+ _routingPenalties[penType] = 50;
+ break;
+ case crossingPenalty:
+ _routingPenalties[penType] = 200;
+ break;
+ case clusterCrossingPenalty:
+ _routingPenalties[penType] = 4000;
+ break;
+ default:
+ _routingPenalties[penType] = 50;
+ break;
+ }
+ }
+ else
+ {
+ _routingPenalties[penType] = penVal;
+ }
+}
+
+
+double Router::routingPenalty(const PenaltyType penType) const
+{
+ COLA_ASSERT(penType < lastPenaltyMarker);
+ return _routingPenalties[penType];
+}
+
+
+double& Router::penaltyRef(const PenaltyType penType)
+{
+ COLA_ASSERT(penType < lastPenaltyMarker);
+ return _routingPenalties[penType];
+}
+
+
void Router::printInfo(void)
{
FILE *fp = stdout;
@@ -735,6 +1333,7 @@ void Router::printInfo(void)
int st_endpoints = 0;
int st_valid_shape_visedges = 0;
int st_valid_endpt_visedges = 0;
+ int st_orthogonal_visedges = 0;
int st_invalid_visedges = 0;
VertInf *finish = vertices.end();
for (VertInf *t = vertices.connsBegin(); t != finish; t = t->lstNext)
@@ -775,9 +1374,15 @@ void Router::printInfo(void)
{
st_invalid_visedges++;
}
+ for (EdgeInf *t = visOrthogGraph.begin(); t != visOrthogGraph.end();
+ t = t->lstNext)
+ {
+ st_orthogonal_visedges++;
+ }
fprintf(fp, "Number of shapes: %d\n", st_shapes);
fprintf(fp, "Number of vertices: %d (%d real, %d endpoints)\n",
st_vertices + st_endpoints, st_vertices, st_endpoints);
+ fprintf(fp, "Number of orhtog_vis_edges: %d\n", st_orthogonal_visedges);
fprintf(fp, "Number of vis_edges: %d (%d valid [%d normal, %d endpt], "
"%d invalid)\n", st_valid_shape_visedges + st_invalid_visedges +
st_valid_endpt_visedges, st_valid_shape_visedges +
@@ -787,12 +1392,462 @@ void Router::printInfo(void)
fprintf(fp, "checkVisEdge tally: %d\n", st_checked_edges);
fprintf(fp, "----------------------\n");
- fprintf(fp, "ADDS: "); timers.Print(tmAdd);
- fprintf(fp, "DELS: "); timers.Print(tmDel);
- fprintf(fp, "MOVS: "); timers.Print(tmMov);
- fprintf(fp, "***S: "); timers.Print(tmSev);
- fprintf(fp, "PTHS: "); timers.Print(tmPth);
+ fprintf(fp, "ADDS: "); timers.Print(tmAdd, fp);
+ fprintf(fp, "DELS: "); timers.Print(tmDel, fp);
+ fprintf(fp, "MOVS: "); timers.Print(tmMov, fp);
+ fprintf(fp, "***S: "); timers.Print(tmSev, fp);
+ fprintf(fp, "PTHS: "); timers.Print(tmPth, fp);
+ fprintf(fp, "OrthogGraph: "); timers.Print(tmOrthogGraph, fp);
+ fprintf(fp, "OrthogRoute: "); timers.Print(tmOrthogRoute, fp);
+ fprintf(fp, "OrthogCentre: "); timers.Print(tmOrthogCentre, fp);
+ fprintf(fp, "OrthogNudge: "); timers.Print(tmOrthogNudge, fp);
fprintf(fp, "\n");
+ timers.Reset();
+}
+
+
+static const double LIMIT = 100000000;
+
+static void reduceRange(double& val)
+{
+ val = std::min(val, LIMIT);
+ val = std::max(val, -LIMIT);
+}
+
+
+//=============================================================================
+// The following methods are for testing and debugging.
+
+
+bool Router::existsOrthogonalPathOverlap(void)
+{
+ ConnRefList::iterator fin = connRefs.end();
+ for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i)
+ {
+ Avoid::Polygon iRoute = (*i)->displayRoute();
+ ConnRefList::iterator j = i;
+ for (++j; j != fin; ++j)
+ {
+ // Determine if this pair overlap
+ Avoid::Polygon jRoute = (*j)->displayRoute();
+ CrossingsInfoPair crossingInfo = std::make_pair(0, 0);
+ for (size_t jInd = 1; jInd < jRoute.size(); ++jInd)
+ {
+ const bool finalSegment = ((jInd + 1) == jRoute.size());
+ CrossingsInfoPair crossingInfo = countRealCrossings(
+ 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))
+ {
+ // We looking for fixedSharedPaths and there is a
+ // fixedSharedPath.
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+
+bool Router::existsOrthogonalTouchingCorners(void)
+{
+ ConnRefList::iterator fin = connRefs.end();
+ for (ConnRefList::iterator i = connRefs.begin(); i != fin; ++i)
+ {
+ Avoid::Polygon iRoute = (*i)->displayRoute();
+ ConnRefList::iterator j = i;
+ for (++j; j != fin; ++j)
+ {
+ // Determine if this pair overlap
+ Avoid::Polygon jRoute = (*j)->displayRoute();
+ CrossingsInfoPair crossingInfo = std::make_pair(0, 0);
+ for (size_t jInd = 1; jInd < jRoute.size(); ++jInd)
+ {
+ const bool finalSegment = ((jInd + 1) == jRoute.size());
+ CrossingsInfoPair crossingInfo = countRealCrossings(
+ iRoute, true, jRoute, jInd, true,
+ finalSegment, NULL, NULL, *i, *j);
+
+ if (crossingInfo.second & CROSSING_TOUCHES)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+
+
+void Router::outputInstanceToSVG(std::string instanceName)
+{
+ std::string filename;
+ if (!instanceName.empty())
+ {
+ filename = instanceName;
+ }
+ else
+ {
+ filename = "libavoid-debug";
+ }
+ filename += ".svg";
+ FILE *fp = fopen(filename.c_str(), "w");
+
+ if (fp == NULL)
+ {
+ return;
+ }
+
+ double minX = LIMIT;
+ double minY = LIMIT;
+ double maxX = -LIMIT;
+ double maxY = -LIMIT;
+
+ VertInf *curr = vertices.connsBegin();
+ while (curr)
+ {
+ Point p = curr->point;
+
+ reduceRange(p.x);
+ reduceRange(p.y);
+
+ if (p.x > -LIMIT)
+ {
+ minX = std::min(minX, p.x);
+ }
+ if (p.x < LIMIT)
+ {
+ maxX = std::max(maxX, p.x);
+ }
+ if (p.y > -LIMIT)
+ {
+ minY = std::min(minY, p.y);
+ }
+ if (p.y < LIMIT)
+ {
+ maxY = std::max(maxY, p.y);
+ }
+ curr = curr->lstNext;
+ }
+ minX -= 50;
+ minY -= 50;
+ maxX += 50;
+ maxY += 50;
+
+ fprintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ fprintf(fp, "<svg xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" xmlns=\"http://www.w3.org/2000/svg\" width=\"100%%\" height=\"100%%\" viewBox=\"%g %g %g %g\">\n", minX, minY, maxX - minX, maxY - minY);
+
+ // Output source code to generate this instance of the router.
+ fprintf(fp, "<!-- Source code to generate this instance:\n");
+ fprintf(fp, "#include \"libavoid/libavoid.h\"\n");
+ fprintf(fp, "using namespace Avoid;\n");
+ fprintf(fp, "int main(void) {\n");
+ fprintf(fp, " Router *router = new Router(\n");
+ fprintf(fp, " PolyLineRouting | OrthogonalRouting);\n");
+ for (size_t p = 0; p < lastPenaltyMarker; ++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());
+ ShapeRefList::iterator shRefIt = shapeRefs.begin();
+ while (shRefIt != shapeRefs.end())
+ {
+ ShapeRef *shRef = *shRefIt;
+ 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(), 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, "
+ "%u);\n", shRef->id(), shRef->id(), shRef->id());
+ fprintf(fp, " router->addShape(shapeRef%u);\n\n", shRef->id());
+ ++shRefIt;
+ }
+ ConnRefList::reverse_iterator revConnRefIt = connRefs.rbegin();
+ while (revConnRefIt != connRefs.rend())
+ {
+ ConnRef *connRef = *revConnRefIt;
+ fprintf(fp, " ConnRef *connRef%u = new ConnRef(router, %u);\n",
+ connRef->id(), connRef->id());
+ if (connRef->src())
+ {
+ fprintf(fp, " ConnEnd srcPt%u(Point(%g, %g), %u);\n",
+ connRef->id(), connRef->src()->point.x,
+ connRef->src()->point.y, connRef->src()->visDirections);
+ fprintf(fp, " connRef%u->setSourceEndpoint(srcPt%u);\n",
+ connRef->id(), connRef->id());
+ }
+ if (connRef->dst())
+ {
+ fprintf(fp, " ConnEnd dstPt%u(Point(%g, %g), %u);\n",
+ connRef->id(), connRef->dst()->point.x,
+ connRef->dst()->point.y, connRef->dst()->visDirections);
+ fprintf(fp, " connRef%u->setDestEndpoint(dstPt%u);\n",
+ connRef->id(), connRef->id());
+ }
+ fprintf(fp, " connRef%u->setRoutingType((ConnType)%u);\n\n",
+ connRef->id(), connRef->routingType());
+ ++revConnRefIt;
+ }
+ fprintf(fp, " router->processTransaction();\n");
+ fprintf(fp, " router->outputInstanceToSVG();\n");
+ fprintf(fp, " delete router;\n");
+ fprintf(fp, " return 0;\n");
+ 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=\"",
+ shRef->id());
+ for (size_t i = 0; i < shRef->polygon().size(); ++i)
+ {
+ fprintf(fp, "%c %g,%g ", ((i == 0) ? 'M' : 'L'),
+ shRef->polygon().at(i).x, shRef->polygon().at(i).y);
+ }
+ fprintf(fp, "Z\" />\n");
+ ++shRefIt;
+ }
+ fprintf(fp, "</g>\n");
+
+ fprintf(fp, "<g inkscape:groupmode=\"layer\" "
+ "style=\"display: none;\" "
+ "inkscape:label=\"ShapesRect\">\n");
+ shRefIt = shapeRefs.begin();
+ while (shRefIt != shapeRefs.end())
+ {
+ 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);
+ ++shRefIt;
+ }
+ fprintf(fp, "</g>\n");
+
+
+ fprintf(fp, "<g inkscape:groupmode=\"layer\" "
+ "inkscape:label=\"VisGraph\""
+ ">\n");
+ EdgeInf *finish = NULL;
+ fprintf(fp, "<g inkscape:groupmode=\"layer\" "
+ "style=\"display: none;\" "
+ "inkscape:label=\"VisGraph-shape\""
+ ">\n");
+ finish = visGraph.end();
+ for (EdgeInf *t = visGraph.begin(); t != finish; t = t->lstNext)
+ {
+ std::pair<VertID, VertID> ids = t->ids();
+ bool isShape = (ids.first.isShape) && (ids.second.isShape);
+ if (!isShape)
+ {
+ continue;
+ }
+ 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",
+ p1.x, p1.y, p2.x, p2.y,
+ (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" :
+ "red");
+ }
+ fprintf(fp, "</g>\n");
+
+ fprintf(fp, "<g inkscape:groupmode=\"layer\" "
+ "style=\"display: none;\" "
+ "inkscape:label=\"VisGraph-conn\""
+ ">\n");
+ finish = visGraph.end();
+ for (EdgeInf *t = visGraph.begin(); t != finish; t = t->lstNext)
+ {
+ std::pair<VertID, VertID> ids = t->ids();
+ bool isShape = (ids.first.isShape) && (ids.second.isShape);
+ if (isShape)
+ {
+ continue;
+ }
+ 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",
+ p1.x, p1.y, p2.x, p2.y,
+ (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" :
+ "red");
+ }
+ fprintf(fp, "</g>\n");
+ fprintf(fp, "</g>\n");
+
+ fprintf(fp, "<g inkscape:groupmode=\"layer\" "
+ "style=\"display: none;\" "
+ "inkscape:label=\"OrthogVisGraph\">\n");
+ finish = visOrthogGraph.end();
+ for (EdgeInf *t = visOrthogGraph.begin(); t != finish; t = t->lstNext)
+ {
+ 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",
+ p1.x, p1.y, p2.x, p2.y,
+ (!(ids.first.isShape) || !(ids.second.isShape)) ? "green" :
+ "red");
+ }
+ fprintf(fp, "</g>\n");
+
+ fprintf(fp, "<g inkscape:groupmode=\"layer\" "
+ "style=\"display: none;\" "
+ "inkscape:label=\"RawConnectors\""
+ ">\n");
+ ConnRefList::iterator connRefIt = connRefs.begin();
+ while (connRefIt != connRefs.end())
+ {
+ ConnRef *connRef = *connRefIt;
+
+ PolyLine route = connRef->route();
+ if (!route.empty())
+ {
+ fprintf(fp, "<path id=\"raw-%u\" d=\"M %g,%g ", connRef->id(),
+ route.ps[0].x, route.ps[0].y);
+ for (size_t i = 1; i < route.size(); ++i)
+ {
+ fprintf(fp, "L %g,%g ", route.ps[i].x, route.ps[i].y);
+ }
+ fprintf(fp, "\" ");
+ if (connRef->src() && connRef->dst())
+ {
+ fprintf(fp, "debug=\"src: %d dst: %d\" ",
+ connRef->src()->visDirections,
+ connRef->dst()->visDirections);
+ }
+ fprintf(fp, "style=\"fill: none; stroke: black; "
+ "stroke-width: 1px;\" />\n");
+ }
+
+ ++connRefIt;
+ }
+ fprintf(fp, "</g>\n");
+
+ fprintf(fp, "<g inkscape:groupmode=\"layer\" "
+ "style=\"display: none;\" "
+ "inkscape:label=\"CurvedDisplayConnectors\""
+ ">\n");
+ connRefIt = connRefs.begin();
+ while (connRefIt != connRefs.end())
+ {
+ ConnRef *connRef = *connRefIt;
+
+ PolyLine route = connRef->displayRoute().curvedPolyline(8);
+ if (!route.empty())
+ {
+ fprintf(fp, "<path id=\"curved-%u\" d=\"M %g,%g ", connRef->id(),
+ route.ps[0].x, route.ps[0].y);
+ for (size_t i = 1; i < route.size(); ++i)
+ {
+ if (route.ts[i] == 'C')
+ {
+ 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);
+ i += 2;
+ }
+ else
+ {
+ fprintf(fp, "%c %g,%g ", route.ts[i],
+ route.ps[i].x, route.ps[i].y);
+ }
+ }
+ fprintf(fp, "\" ");
+ if (connRef->src() && connRef->dst())
+ {
+ fprintf(fp, "debug=\"src: %d dst: %d\" ",
+ connRef->src()->visDirections,
+ connRef->dst()->visDirections);
+ }
+ fprintf(fp, "style=\"fill: none; stroke: black; "
+ "stroke-width: 1px;\" />\n");
+ }
+
+ ++connRefIt;
+ }
+ fprintf(fp, "</g>\n");
+
+
+ fprintf(fp, "<g inkscape:groupmode=\"layer\" "
+ "inkscape:label=\"DisplayConnectors\""
+ ">\n");
+ connRefIt = connRefs.begin();
+ while (connRefIt != connRefs.end())
+ {
+ ConnRef *connRef = *connRefIt;
+
+ PolyLine route = connRef->displayRoute();
+ if (!route.empty())
+ {
+ fprintf(fp, "<path id=\"disp-%u\" d=\"M %g,%g ", connRef->id(),
+ route.ps[0].x, route.ps[0].y);
+ for (size_t i = 1; i < route.size(); ++i)
+ {
+ fprintf(fp, "L %g,%g ", route.ps[i].x, route.ps[i].y);
+ }
+ fprintf(fp, "\" ");
+ if (connRef->src() && connRef->dst())
+ {
+ fprintf(fp, "debug=\"src: %d dst: %d\" ",
+ connRef->src()->visDirections,
+ connRef->dst()->visDirections);
+ }
+ fprintf(fp, "style=\"fill: none; stroke: black; "
+ "stroke-width: 1px;\" />\n");
+ }
+
+ ++connRefIt;
+ }
+ fprintf(fp, "</g>\n");
+
+
+ fprintf(fp, "</svg>\n");
+ fclose(fp);
}
diff --git a/src/libavoid/router.h b/src/libavoid/router.h
index 597f48c5e..03060b025 100644
--- a/src/libavoid/router.h
+++ b/src/libavoid/router.h
@@ -2,94 +2,325 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+//! @file router.h
+//! @brief Contains the interface for the Router class.
+
#ifndef AVOID_ROUTER_H
#define AVOID_ROUTER_H
-//#define LINEDEBUG
+#include <list>
+#include <utility>
+#include <string>
#include "libavoid/shape.h"
+#include "libavoid/viscluster.h"
#include "libavoid/graph.h"
#include "libavoid/timer.h"
-#include <list>
-#include <utility>
-#ifdef LINEDEBUG
+#include "libavoid/connector.h"
+
+#if defined(LINEDEBUG) || defined(ASTAR_DEBUG) || defined(LIBAVOID_SDL)
#include <SDL.h>
+ #ifndef LIBAVOID_SDL
+ #define LIBAVOID_SDL
+ #endif
#endif
namespace Avoid {
-class ConnRef;
-typedef std::list<ConnRef *> ConnRefList;
typedef std::list<unsigned int> IntList;
-class MoveInfo;
-typedef std::list<MoveInfo *> MoveInfoList;
+
+class ActionInfo;
+typedef std::list<ActionInfo> ActionInfoList;
+class ShapeRef;
+
+//! @brief Flags that can be passed to the router during initialisation
+//! to specify options.
+enum RouterFlag
+{
+ //! @brief This option specifies that the router should maintain the
+ //! structures necessary to allow poly-line connector routing.
+ PolyLineRouting = 1,
+ //! @brief This option specifies that the router should maintain the
+ //! structures necessary to allow orthogonal connector routing.
+ OrthogonalRouting = 2
+};
static const unsigned int runningTo = 1;
static const unsigned int runningFrom = 2;
static const unsigned int runningToAndFrom = runningTo | runningFrom;
+//! @brief Types of penalty cases that can be used to improve the quality
+//! of the connector routes produced.
+enum PenaltyType
+{
+ //! @brief This penalty is applied for each segment in the connector
+ //! path beyond the first. This should always normally be set
+ //! when doing orthogonal routing to prevent step-like connector
+ //! paths.
+ segmentPenalty = 0,
+ //! @brief This penalty is applied in its full amount to tight acute
+ //! bends in the connector path. A smaller portion of the penalty
+ //! is applied for slight bends, i.e., where the bend is close to
+ //! 180 degrees. This is useful for polyline routing where there
+ //! is some evidence that tighter corners are worse for
+ //! readability, but that slight bends might not be so bad,
+ //! especially when smoothed by curves.
+ anglePenalty,
+ //! @brief This penalty is applied whenever a connector path crosses
+ //! another connector path. It takes shared paths into
+ //! consideration and the penalty is only applied if there
+ //! is an actual crossing.
+ //! @note This penalty is still experimental! It is not recommended
+ //! for normal use.
+ crossingPenalty,
+ //! @brief This penalty is applied whenever a connector path crosses
+ //! a cluster boundary.
+ //! @note This penalty is still experimental! It is not recommended
+ //! for normal use.
+ clusterCrossingPenalty,
+ //! @brief This penalty is applied whenever a connector path shares
+ //! some segments with an immovable portion of an existing
+ //! connector route (such as the first or last segment of a
+ //! connector).
+ //! @note This penalty is still experimental! It is not recommended
+ //! for normal use.
+ fixedSharedPathPenalty,
+ // Used for determining the size of the penalty array.
+ // This should always we the last value in the enum.
+ lastPenaltyMarker
+};
+
+
+static const double noPenalty = 0;
+static const double chooseSensiblePenalty = -1;
+
+//! @brief The Router class represents a libavoid router instance.
+//!
+//! Usually you would keep a separate Router instance for each diagram
+//! or layout you have open in your application.
+//
class Router {
public:
- Router();
+ //! @brief Constructor for router instance.
+ //!
+ //! @param[in] flags One or more Avoid::RouterFlag options to
+ //! control the behaviour of the router.
+ Router(const unsigned int flags);
+
+ //! @brief Destructor for router instance.
+ //!
+ //! @note Destroying a router instance will delete all remaining
+ //! shapes and connectors, thereby invalidating any existing
+ //! pointers to them.
+ ~Router();
ShapeRefList shapeRefs;
ConnRefList connRefs;
+ ClusterRefList clusterRefs;
EdgeList visGraph;
EdgeList invisGraph;
+ EdgeList visOrthogGraph;
ContainsMap contains;
VertInfList vertices;
+ ContainsMap enclosingClusters;
bool PartialTime;
bool SimpleRouting;
- double segmt_penalty;
- double angle_penalty;
- double crossing_penalty;
-
+ bool ClusteredRouting;
- bool UseAStarSearch;
+ // Poly-line routing options:
bool IgnoreRegions;
- bool SelectiveReroute;
- bool IncludeEndpoints;
bool UseLeesAlgorithm;
bool InvisibilityGrph;
- bool ConsolidateMoves;
+
+ // General routing options:
+ bool SelectiveReroute;
+
bool PartialFeedback;
+ bool RubberBandRouting;
+
// Instrumentation:
Timer timers;
int st_checked_edges;
-#ifdef LINEDEBUG
+#ifdef LIBAVOID_SDL
SDL_Surface *avoid_screen;
#endif
+ //! @brief Allows setting of the behaviour of the router in regard
+ //! to transactions. This controls whether transactions are
+ //! used to queue changes and process them effeciently at once
+ //! or they are instead processed immediately.
+ //!
+ //! It is more efficient to perform actions like shape movement,
+ //! addition or deletion as batch tasks, and reroute the necessary
+ //! connectors just once after these actions have been performed.
+ //! For this reason, libavoid allows you to group such actions into
+ //! "transactions" that are processed efficiently when the
+ //! processTransaction() method is called.
+ //!
+ //! By default, the router will process all actions as tranactions.
+ //! If transactionUse() is set to false, then all actions will get
+ //! processed immediately, and cause immediate routing callbacks to
+ //! all affected connectors after each action.
+ //!
+ //! @param[in] transactions A boolean value specifying whether to
+ //! use transactions.
+ //!
+ void setTransactionUse(const bool transactions);
+
+ //! @brief Reports whether the router groups actions into transactions.
+ //!
+ //! @return A boolean value describing whether transactions are in use.
+ //!
+ //! @sa setTransactionUse
+ //! @sa processTransaction
+ //!
+ bool transactionUse(void) const;
+
+ //! @brief Finishes the current transaction and processes all the
+ //! queued object changes efficiently.
+ //!
+ //! This method will efficiently process all moves, additions and
+ //! deletions that have occurred since processTransaction() was
+ //! last called.
+ //!
+ //! If transactionUse() is false, then all actions will have been
+ //! processed immediately and this method will do nothing.
+ //!
+ //! @return A boolean value describing whether there were any actions
+ //! to process.
+ //!
+ //! @sa setTransactionUse
+ //!
+ bool processTransaction(void);
+
+ //! @brief Add a shape to the router scene.
+ //!
+ //! This shape will be considered to be an obstacle. Calling this
+ //! method will cause connectors intersecting the added shape to
+ //! be marked as needing to be rerouted.
+ //!
+ //! @param[in] shape Pointer reference to the shape being added.
+ //!
void addShape(ShapeRef *shape);
- void delShape(ShapeRef *shape);
- void moveShape(ShapeRef *shape, Polygn *newPoly,
+
+ //! @brief Remove a shape from the router scene.
+ //!
+ //! Connectors that could have a better (usually shorter) path after
+ //! the removal of this shape will be marked as needing to be rerouted.
+ //!
+ //! @param[in] shape Pointer reference to the shape being removed.
+ //!
+ void removeShape(ShapeRef *shape);
+
+ //! @brief Move or resize an existing shape within the router scene.
+ //!
+ //! A new polygon for the shape can be given to effectively move or
+ //! resize the shape with the scene. Connectors that intersect the
+ //! new shape polygon, or that could have a better (usually shorter)
+ //! path after the change, will be marked as needing to be rerouted.
+ //!
+ //! @param[in] shape Pointer reference to the shape being
+ //! moved/resized.
+ //! @param[in] newPoly The new polygon boundary for the shape.
+ //! @param[in] first_move This option is used for some advanced
+ //! (currently undocumented) behaviour and
+ //! it should be ignored for the moment.
+ //!
+ void moveShape(ShapeRef *shape, const Polygon& newPoly,
const bool first_move = false);
- void processMoves(void);
-
+
+ //! @brief Move an existing shape within the router scene by a relative
+ //! distance.
+ //!
+ //! Connectors that intersect the shape's new position, or that could
+ //! have a better (usually shorter) path after the change, will be
+ //! marked as needing to be rerouted.
+ //!
+ //! @param[in] shape Pointer reference to the shape being moved.
+ //! @param[in] xDiff The distance to move the shape in the
+ //! x dimension.
+ //! @param[in] yDiff The distance to move the shape in the
+ //! y dimension.
+ //!
+ void moveShape(ShapeRef *shape, const double xDiff, const double yDiff);
+
+ //! @brief Sets a spacing distance for overlapping orthogonal
+ //! connectors to be nudged apart.
+ //!
+ //! By default, this distance is set to a value of 4.
+ //!
+ //! This method does not re-trigger post-processing of connectors.
+ //! The new distance will be used the next time rerouting is performed.
+ //!
+ //! @param[in] dist The distance to be used for orthogonal nudging.
+ //!
+ void setOrthogonalNudgeDistance(const double dist);
+
+ //! @brief Returns the spacing distance that overlapping orthogonal
+ //! connecotrs are nudged apart.
+ //!
+ //! @return The current spacing distance used for orthogonal nudging.
+ //!
+ double orthogonalNudgeDistance(void) const;
+
+ //! @brief Sets or removes penalty values that are applied during
+ //! connector routing.
+ //!
+ //! By default, libavoid will produce shortest path routes between
+ //! the source and destination points for each connector. There are
+ //! several penalties that can be applied during this stage to
+ //! improve the aesthetics of the routes generated. These different
+ //! penalties are specified and explained by the PenaltyType enum.
+ //!
+ //! If a value of zero or Avoid::noPenalty is given then the penalty
+ //! for this case will be removed. If no penalty argument (or a
+ //! negative value) is specified when calling this method, then a
+ //! sensible penalty value will be automatically chosen.
+ //!
+ //! @param[in] penType The type of penalty, a PenaltyType.
+ //! @param[in] penVal The value to be applied for each occurance
+ //! of the penalty case.
+ //!
+ void setRoutingPenalty(const PenaltyType penType,
+ const double penVal = chooseSensiblePenalty);
+
+ //! @brief Returns the current penalty value for a particular
+ //! routing penalty case.
+ //!
+ //! @param[in] penType The type of penalty, a PenaltyType.
+ //! @return The penalty value for the specified penalty case.
+ //!
+ double routingPenalty(const PenaltyType penType) const;
+
+ void addCluster(ClusterRef *cluster);
+ void delCluster(ClusterRef *cluster);
+
void attachedConns(IntList &conns, const unsigned int shapeId,
const unsigned int type);
void attachedShapes(IntList &shapes, const unsigned int shapeId,
@@ -98,15 +329,49 @@ class Router {
void markConnectors(ShapeRef *shape);
void generateContains(VertInf *pt);
void printInfo(void);
+ void outputInstanceToSVG(std::string filename = std::string());
+ unsigned int assignId(const unsigned int suggestedId);
+ void regenerateStaticBuiltGraph(void);
+ void destroyOrthogonalVisGraph(void);
+ void setStaticGraphInvalidated(const bool invalidated);
+ ConnType validConnType(const ConnType select = ConnType_None) const;
+ bool shapeInQueuedActionList(ShapeRef *shape) const;
+ double& penaltyRef(const PenaltyType penType);
+ bool existsOrthogonalPathOverlap(void);
+ bool existsOrthogonalTouchingCorners(void);
+
private:
- void newBlockingShape(Polygn *poly, int pid);
+ friend class ConnRef;
+
+ void modifyConnector(ConnRef *conn);
+ void modifyConnector(ConnRef *conn, unsigned int type,
+ const ConnEnd &connEnd);
+ void removeQueuedConnectorActions(ConnRef *conn);
+ void newBlockingShape(const Polygon& poly, int pid);
void checkAllBlockedEdges(int pid);
void checkAllMissingEdges(void);
- void adjustContainsWithAdd(const Polygn& poly, const int p_shape);
+ void adjustContainsWithAdd(const Polygon& poly, const int p_shape);
void adjustContainsWithDel(const int p_shape);
- void callbackAllInvalidConnectors(void);
+ void adjustClustersWithAdd(const PolygonInterface& poly,
+ const int p_cluster);
+ void adjustClustersWithDel(const int p_cluster);
+ void rerouteAndCallbackConnectors(void);
+ bool idIsUnique(const unsigned int id) const;
+ void improveCrossings(void);
+
+ ActionInfoList actionList;
+ unsigned int _largestAssignedId;
+ bool _consolidateActions;
+ double _orthogonalNudgeDistance;
+ double _routingPenalties[lastPenaltyMarker];
+
+ public:
+ // Overall modes:
+ bool _polyLineRouting;
+ bool _orthogonalRouting;
- MoveInfoList moveList;
+ bool _staticGraphInvalidated;
+ bool _inCrossingPenaltyReroutingStage;
};
}
diff --git a/src/libavoid/shape.cpp b/src/libavoid/shape.cpp
index c0ff2f6e8..ac3f0c193 100644
--- a/src/libavoid/shape.cpp
+++ b/src/libavoid/shape.cpp
@@ -2,53 +2,57 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2008 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
-#include <cassert>
#include "libavoid/shape.h"
#include "libavoid/graph.h" // For alertConns
#include "libavoid/vertices.h"
-#include "libavoid/polyutil.h"
#include "libavoid/router.h"
+#include "libavoid/debug.h"
+#include "libavoid/assertions.h"
namespace Avoid {
-ShapeRef::ShapeRef(Router *router, unsigned int id, Polygn& ply)
+ShapeRef::ShapeRef(Router *router, Polygon& ply, const unsigned int id)
: _router(router)
- , _id(id)
- , _poly(copyPoly(ply))
+ , _poly(ply)
, _active(false)
, _inMoveList(false)
, _firstVert(NULL)
, _lastVert(NULL)
{
+ _id = router->assignId(id);
+
bool isShape = true;
- VertID i = VertID(id, isShape, 0);
+ VertID i = VertID(_id, isShape, 0);
+ const bool addToRouterNow = false;
VertInf *last = NULL;
VertInf *node = NULL;
- for (int pt_i = 0; pt_i < _poly.pn; pt_i++)
+ for (size_t pt_i = 0; pt_i < _poly.size(); ++pt_i)
{
- node = new VertInf(_router, i, _poly.ps[pt_i]);
+ node = new VertInf(_router, i, _poly.ps[pt_i], addToRouterNow);
if (!_firstVert)
{
@@ -69,17 +73,22 @@ ShapeRef::ShapeRef(Router *router, unsigned int id, Polygn& ply)
_lastVert->shNext = _firstVert;
_firstVert->shPrev = _lastVert;
-
- makeActive();
}
ShapeRef::~ShapeRef()
{
- assert(_firstVert != NULL);
-
- makeInactive();
+ COLA_ASSERT(!_router->shapeInQueuedActionList(this));
+ if (_active)
+ {
+ // Destroying a shape without calling removeShape(), so do it now.
+ _router->removeShape(this);
+ _router->processTransaction();
+ }
+
+ COLA_ASSERT(_firstVert != NULL);
+
VertInf *it = _firstVert;
do
{
@@ -90,41 +99,37 @@ ShapeRef::~ShapeRef()
}
while (it != _firstVert);
_firstVert = _lastVert = NULL;
-
- freePoly(_poly);
}
-void ShapeRef::setNewPoly(Polygn& poly)
+void ShapeRef::setNewPoly(const Polygon& poly)
{
- assert(_firstVert != NULL);
- assert(_poly.pn == poly.pn);
+ COLA_ASSERT(_firstVert != NULL);
+ COLA_ASSERT(_poly.size() == poly.size());
VertInf *curr = _firstVert;
- for (int pt_i = 0; pt_i < _poly.pn; pt_i++)
+ for (size_t pt_i = 0; pt_i < _poly.size(); ++pt_i)
{
- assert(curr->visListSize == 0);
- assert(curr->invisListSize == 0);
+ COLA_ASSERT(curr->visListSize == 0);
+ COLA_ASSERT(curr->invisListSize == 0);
// Reset with the new polygon point.
curr->Reset(poly.ps[pt_i]);
curr->pathNext = NULL;
- curr->pathDist = 0;
curr = curr->shNext;
}
- assert(curr == _firstVert);
+ COLA_ASSERT(curr == _firstVert);
- freePoly(_poly);
- _poly = copyPoly(poly);
+ _poly = poly;
}
void ShapeRef::makeActive(void)
{
- assert(!_active);
+ COLA_ASSERT(!_active);
- // Add to connRefs list.
+ // Add to shapeRefs list.
_pos = _router->shapeRefs.insert(_router->shapeRefs.begin(), this);
// Add points to vertex list.
@@ -144,9 +149,9 @@ void ShapeRef::makeActive(void)
void ShapeRef::makeInactive(void)
{
- assert(_active);
+ COLA_ASSERT(_active);
- // Remove from connRefs list.
+ // Remove from shapeRefs list.
_router->shapeRefs.erase(_pos);
// Remove points from vertex list.
@@ -162,7 +167,13 @@ void ShapeRef::makeInactive(void)
_active = false;
}
-
+
+
+bool ShapeRef::isActive(void) const
+{
+ return _active;
+}
+
VertInf *ShapeRef::firstVert(void)
{
@@ -176,19 +187,19 @@ VertInf *ShapeRef::lastVert(void)
}
-unsigned int ShapeRef::id(void)
+unsigned int ShapeRef::id(void) const
{
return _id;
}
-Polygn ShapeRef::poly(void)
+const Polygon& ShapeRef::polygon(void) const
{
return _poly;
}
-Router *ShapeRef::router(void)
+Router *ShapeRef::router(void) const
{
return _router;
}
@@ -196,13 +207,13 @@ Router *ShapeRef::router(void)
void ShapeRef::boundingBox(BBox& bbox)
{
- assert(_poly.pn > 0);
+ COLA_ASSERT(!_poly.empty());
bbox.a = bbox.b = _poly.ps[0];
Point& a = bbox.a;
Point& b = bbox.b;
- for (int i = 1; i < _poly.pn; ++i)
+ for (size_t i = 1; i < _poly.size(); ++i)
{
const Point& p = _poly.ps[i];
@@ -223,8 +234,8 @@ void ShapeRef::removeFromGraph(void)
// For each vertex.
EdgeInfList& visList = tmp->visList;
- EdgeInfList::iterator finish = visList.end();
- EdgeInfList::iterator edge;
+ EdgeInfList::const_iterator finish = visList.end();
+ EdgeInfList::const_iterator edge;
while ((edge = visList.begin()) != finish)
{
// Remove each visibility edge
@@ -239,6 +250,15 @@ void ShapeRef::removeFromGraph(void)
// Remove each invisibility edge
delete (*edge);
}
+
+ EdgeInfList& orthogList = tmp->orthogVisList;
+ finish = orthogList.end();
+ while ((edge = orthogList.begin()) != finish)
+ {
+ // Remove each orthogonal visibility edge
+ (*edge)->alertConns();
+ delete (*edge);
+ }
}
}
@@ -251,8 +271,8 @@ void ShapeRef::markForMove(void)
}
else
{
- fprintf(stderr, "WARNING: two moves queued for same shape prior to "
- "rerouting.\n This is not safe.\n");
+ db_printf("WARNING: two moves queued for same shape prior to rerouting."
+ "\n This is not safe.\n");
}
}
diff --git a/src/libavoid/shape.h b/src/libavoid/shape.h
index b654c6eea..df4c98df1 100644
--- a/src/libavoid/shape.h
+++ b/src/libavoid/shape.h
@@ -2,24 +2,30 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2008 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+//! @file shape.h
+//! @brief Contains the interface for the ShapeRef class.
+
+
#ifndef AVOID_SHAPE_H
#define AVOID_SHAPE_H
@@ -35,21 +41,64 @@ class ShapeRef;
typedef std::list<ShapeRef *> ShapeRefList;
+//! @brief The ShapeRef class represents a shape object.
+//!
+//! Shapes are obstacles that connectors must be routed around. They can be
+//! placed into a Router scene and can be repositioned or resized (via
+//! Router::moveShape()).
+//!
+//! Usually, it is expected that you would create a ShapeRef for each shape
+//! in your diagram and keep that reference in your own shape class.
+//!
class ShapeRef
{
public:
- ShapeRef(Router *router, unsigned int id, Polygn& poly);
- virtual ~ShapeRef();
- void setNewPoly(Polygn& poly);
+ //! @brief Shape reference constructor.
+ //!
+ //! Creates a shape obect reference, but does not yet place it into the
+ //! Router scene.
+ //!
+ //! The poly argument will usually be the boundary of the shape in your
+ //! application with additional buffer of several pixels on each side.
+ //! Specifying such a buffer results in connectors leaving a small
+ //! amount of space around shapes, rather than touching them on the
+ //! corners or edges.
+ //!
+ //! If an ID is not specified, then one will be assigned to the shape.
+ //! If assigning an ID yourself, note that it should be a unique
+ //! positive integer. Also, IDs are given to all objects in a scene,
+ //! so the same ID cannot be given to a shape and a connector for
+ //! example.
+ //!
+ //! @param[in] router The router scene to place the shape into.
+ //! @param[in] poly A Polygon representing the boundary of the
+ //! shape.
+ //! @param[in] id A unique positive integer ID for the shape.
+ ShapeRef(Router *router, Polygon& poly, const unsigned int id = 0);
+ //! @brief Shape reference destructor.
+ //!
+ //! This will call Router::removeShape() for this shape, if this has
+ //! not already be called.
+ ~ShapeRef();
+
+ //! @brief Returns the ID of this shape.
+ //! @returns The ID of the shape.
+ unsigned int id(void) const;
+ //! @brief Returns a reference to the polygon boundary of this shape.
+ //! @returns A reference to the polygon boundary of the shape.
+ const Polygon& polygon(void) const;
+ //! @brief Returns a pointer to the router scene this shape is in.
+ //! @returns A pointer to the router scene for this shape.
+ Router *router(void) const;
+
+ void setNewPoly(const Polygon& poly);
VertInf *firstVert(void);
VertInf *lastVert(void);
- unsigned int id(void);
- Polygn poly(void);
- Router *router(void);
void boundingBox(BBox& bbox);
void makeActive(void);
void makeInactive(void);
+ bool isActive(void) const;
void removeFromGraph(void);
void markForMove(void);
@@ -60,7 +109,7 @@ class ShapeRef
private:
Router *_router;
unsigned int _id;
- Polygn _poly;
+ Polygon _poly;
bool _active;
bool _inMoveList;
ShapeRefList::iterator _pos;
diff --git a/src/libavoid/static.cpp b/src/libavoid/static.cpp
deleted file mode 100644
index 740a4f9c0..000000000
--- a/src/libavoid/static.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * vim: ts=4 sw=4 et tw=0 wm=0
- *
- * libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
-*/
-
-#include <cassert>
-#include <iostream>
-#include "libavoid/vertices.h"
-#include "libavoid/connector.h"
-#include "libavoid/graph.h"
-#include "libavoid/static.h"
-#include "libavoid/shape.h"
-#include "libavoid/visibility.h"
-#include "libavoid/debug.h"
-#include "libavoid/router.h"
-
-namespace Avoid {
-
-static void computeCompleteVis(Router *router);
-
-
-// This should only be used for the static algorithm.
-//
-// XXX: If to set up the vis graph for incremental it would need
-// the shapeRef pointers in obs.
-//
-void CreateVisGraph(Router *router, Polygn **obs, int n_obs)
-{
- for (int poly_i = 0; poly_i < n_obs; poly_i++)
- {
- unsigned int id = obs[poly_i]->id;
-
- new ShapeRef(router, id, *(obs[poly_i]));
- }
- computeCompleteVis(router);
-}
-
-
-static void computeCompleteVis(Router *router)
-{
- VertInf *beginVert = router->vertices.shapesBegin();
- VertInf *endVert = router->vertices.end();
- for (VertInf *i = beginVert; i != endVert; i = i->lstNext)
- {
- db_printf("-- CONSIDERING --\n");
- i->id.db_print();
-
- for (VertInf *j = i->lstPrev ; j != NULL; j = j->lstPrev)
- {
- bool knownNew = true;
- EdgeInf::checkEdgeVisibility(i, j, knownNew);
- }
- }
-}
-
-
-void DestroyVisGraph(Router *router)
-{
- ShapeRefList::iterator sFinish = router->shapeRefs.end();
- ShapeRefList::iterator sCurr;
-
- while ((sCurr = router->shapeRefs.begin()) != sFinish)
- {
- ShapeRef *shape = (*sCurr);
-
- shape->removeFromGraph();
- delete shape;
- }
-
- ConnRefList::iterator cFinish = router->connRefs.end();
- ConnRefList::iterator cCurr;
-
- while ((cCurr = router->connRefs.begin())!= cFinish)
- {
- ConnRef *conn = (*cCurr);
-
- conn->removeFromGraph();
- conn->unInitialise();
- }
- // Clear contains info.
- router->contains.clear();
-
- assert(router->vertices.connsBegin() == NULL);
-}
-
-
-}
-
diff --git a/src/libavoid/static.h b/src/libavoid/static.h
deleted file mode 100644
index 18e9ac278..000000000
--- a/src/libavoid/static.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * vim: ts=4 sw=4 et tw=0 wm=0
- *
- * libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
-*/
-
-
-#ifndef AVOID_STATIC_H
-#define AVOID_STATIC_H
-
-#include "libavoid/geomtypes.h"
-
-
-namespace Avoid {
-
-class Router;
-
-
-extern void CreateVisGraph(Router *router, Polygn **obstacles,
- int n_obstacles);
-extern void DestroyVisGraph(Router *router);
-
-}
-
-
-#endif
diff --git a/src/libavoid/timer.cpp b/src/libavoid/timer.cpp
index e4349bea9..f8600acbe 100644
--- a/src/libavoid/timer.cpp
+++ b/src/libavoid/timer.cpp
@@ -2,31 +2,34 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2008 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
#include <cstdio>
#include <cstdlib>
-#include <cassert>
-using std::abort;
#include <climits>
#include "libavoid/timer.h"
+#include "libavoid/debug.h"
+#include "libavoid/assertions.h"
namespace Avoid {
@@ -52,9 +55,9 @@ void Timer::Reset(void)
}
-void Timer::Register(const int t, const bool start)
+void Timer::Register(const TimerIndex t, const bool start)
{
- assert(t != tmNon);
+ COLA_ASSERT(t != tmNon);
if (type == tmNon)
{
@@ -73,11 +76,7 @@ void Timer::Register(const int t, const bool start)
void Timer::Start(void)
{
- if (running)
- {
- fprintf(stderr, "ERROR: Timer already running in Timer::Start()\n");
- abort();
- }
+ COLA_ASSERT(!running);
cStart[type] = clock(); // CPU time
running = true;
}
@@ -85,11 +84,7 @@ void Timer::Start(void)
void Timer::Stop(void)
{
- if (!running)
- {
- fprintf(stderr, "ERROR: Timer not running in Timer::Stop()\n");
- abort();
- }
+ COLA_ASSERT(running);
clock_t cStop = clock(); // CPU time
running = false;
@@ -106,11 +101,7 @@ void Timer::Stop(void)
cDiff = cStop - cStart[type];
}
- if (cDiff > LONG_MAX)
- {
- fprintf(stderr, "Error: cDiff overflow in Timer:Stop()\n");
- abort();
- }
+ COLA_ASSERT(cDiff < LONG_MAX);
if (type == tmPth)
{
@@ -136,11 +127,11 @@ void Timer::Stop(void)
}
-void Timer::PrintAll(void)
+void Timer::PrintAll(FILE *fp)
{
- for (int i = 0; i < tmCount; i++)
+ for (unsigned int i = 0; i < tmCount; i++)
{
- Print(i);
+ Print((TimerIndex) i, fp);
}
}
@@ -148,14 +139,14 @@ void Timer::PrintAll(void)
#define toMsec(tot) ((bigclock_t) ((tot) / (((double) CLOCKS_PER_SEC) / 1000)))
#define toAvg(tot, cnt) ((((cnt) > 0) ? ((long double) (tot)) / (cnt) : 0))
-void Timer::Print(const int t)
+void Timer::Print(const TimerIndex t, FILE *fp)
{
bigclock_t avg = toMsec(toAvg(cTotal[t], cTally[t]));
bigclock_t pind = toMsec(toAvg(cPath[t], cPathTally[t]));
bigclock_t pavg = toMsec(toAvg(cPath[t], cTally[t]));
double max = toMsec(cMax[t]);
double pmax = toMsec(cPathMax[t]);
- printf("\t%lld %d %lld %.0f %lld %d %lld %.0f %lld\n",
+ fprintf(fp, "\t%lld %d %lld %.0f %lld %d %lld %.0f %lld\n",
cTotal[t], cTally[t], avg, max,
cPath[t], cPathTally[t], pavg, pmax, pind);
}
diff --git a/src/libavoid/timer.h b/src/libavoid/timer.h
index a7e6081fa..9cab6d7ff 100644
--- a/src/libavoid/timer.h
+++ b/src/libavoid/timer.h
@@ -2,24 +2,27 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2008 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
#ifndef PROFILE_H
#define PROFILE_H
@@ -46,14 +49,20 @@ namespace Avoid {
typedef unsigned long long int bigclock_t;
-static const int tmCount = 5;
-
-static const int tmNon = -1;
-static const int tmAdd = 0;
-static const int tmDel = 1;
-static const int tmMov = 2;
-static const int tmPth = 3;
-static const int tmSev = 4;
+enum TimerIndex
+{
+ tmNon = 0,
+ tmAdd,
+ tmDel,
+ tmMov,
+ tmPth,
+ tmSev,
+ tmOrthogGraph,
+ tmOrthogRoute,
+ tmOrthogCentre,
+ tmOrthogNudge,
+ tmCount
+};
static const bool timerStart = true;
@@ -64,12 +73,12 @@ class Timer
{
public:
Timer();
- void Register(const int t, const bool start = timerDelay);
+ void Register(const TimerIndex t, const bool start = timerDelay);
void Start(void);
void Stop(void);
void Reset(void);
- void Print(const int t);
- void PrintAll(void);
+ void Print(TimerIndex, FILE *fp);
+ void PrintAll(FILE *fp);
private:
clock_t cStart[tmCount];
@@ -82,7 +91,7 @@ class Timer
bool running;
long count;
- int type, lasttype;
+ TimerIndex type, lasttype;
};
diff --git a/src/libavoid/vertices.cpp b/src/libavoid/vertices.cpp
index c2be955ac..85226498a 100644
--- a/src/libavoid/vertices.cpp
+++ b/src/libavoid/vertices.cpp
@@ -2,33 +2,36 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
+#include <iostream>
+#include <cstdlib>
+
#include "libavoid/vertices.h"
#include "libavoid/geometry.h"
#include "libavoid/graph.h" // For alertConns
#include "libavoid/debug.h"
#include "libavoid/router.h"
-
-#include <iostream>
-#include <cstdlib>
-#include <cassert>
+#include "libavoid/assertions.h"
using std::ostream;
@@ -76,7 +79,8 @@ bool VertID::operator==(const VertID& rhs) const
{
return false;
}
- assert(isShape == rhs.isShape);
+ // XXX RubberBand search breaks this:
+ // COLA_ASSERT(isShape == rhs.isShape);
return true;
}
@@ -87,7 +91,7 @@ bool VertID::operator!=(const VertID& rhs) const
{
return true;
}
- assert(isShape == rhs.isShape);
+ COLA_ASSERT(isShape == rhs.isShape);
return false;
}
@@ -133,8 +137,8 @@ void VertID::db_print(void) const
}
-const int VertID::src = 1;
-const int VertID::tar = 2;
+const unsigned short VertID::src = 1;
+const unsigned short VertID::tar = 2;
ostream& operator<<(ostream& os, const VertID& vID)
@@ -144,25 +148,57 @@ ostream& operator<<(ostream& os, const VertID& vID)
-VertInf::VertInf(Router *router, const VertID& vid, const Point& vpoint)
- : _router(router)
- , id(vid)
- , point(vpoint)
- , lstPrev(NULL)
- , lstNext(NULL)
- , shPrev(NULL)
- , shNext(NULL)
- , visListSize(0)
- , invisListSize(0)
- , pathNext(NULL)
- , pathDist(0)
+VertInf::VertInf(Router *router, const VertID& vid, const Point& vpoint,
+ const bool addToRouter)
+ : _router(router),
+ id(vid),
+ point(vpoint),
+ lstPrev(NULL),
+ lstNext(NULL),
+ shPrev(NULL),
+ shNext(NULL),
+ visListSize(0),
+ orthogVisListSize(0),
+ invisListSize(0),
+ pathNext(NULL),
+ visDirections(ConnDirNone)
+{
+ point.id = vid.objID;
+ point.vn = vid.vn;
+
+ if (addToRouter)
+ {
+ _router->vertices.addVertex(this);
+ }
+}
+
+
+VertInf::~VertInf()
+{
+}
+
+
+void VertInf::Reset(const VertID& vid, const Point& vpoint)
{
+ id = vid;
+ point = vpoint;
+ point.id = id.objID;
+ point.vn = id.vn;
}
void VertInf::Reset(const Point& vpoint)
{
point = vpoint;
+ point.id = id.objID;
+ point.vn = id.vn;
+}
+
+
+// Returns true if this vertex is not involved in any (in)visibility graphs.
+bool VertInf::orphaned(void)
+{
+ return (visList.empty() && invisList.empty() && orthogVisList.empty());
}
@@ -170,15 +206,12 @@ void VertInf::removeFromGraph(const bool isConnVert)
{
if (isConnVert)
{
- assert(!(id.isShape));
+ COLA_ASSERT(!(id.isShape));
}
- VertInf *tmp = this;
-
// For each vertex.
- EdgeInfList& visList = tmp->visList;
- EdgeInfList::iterator finish = visList.end();
- EdgeInfList::iterator edge;
+ EdgeInfList::const_iterator finish = visList.end();
+ EdgeInfList::const_iterator edge;
while ((edge = visList.begin()) != finish)
{
// Remove each visibility edge
@@ -186,7 +219,14 @@ void VertInf::removeFromGraph(const bool isConnVert)
delete (*edge);
}
- EdgeInfList& invisList = tmp->invisList;
+ finish = orthogVisList.end();
+ while ((edge = orthogVisList.begin()) != finish)
+ {
+ // Remove each orthogonal visibility edge.
+ (*edge)->alertConns();
+ delete (*edge);
+ }
+
finish = invisList.end();
while ((edge = invisList.begin()) != finish)
{
@@ -208,7 +248,7 @@ bool directVis(VertInf *src, VertInf *dst)
// We better be part of the same instance of libavoid.
Router *router = src->_router;
- assert(router == dst->_router);
+ COLA_ASSERT(router == dst->_router);
ContainsMap& contains = router->contains;
if (!(pID.isShape))
@@ -239,40 +279,40 @@ bool directVis(VertInf *src, VertInf *dst)
VertInfList::VertInfList()
- : _firstShapeVert(NULL)
- , _firstConnVert(NULL)
- , _lastShapeVert(NULL)
- , _lastConnVert(NULL)
- , _shapeVertices(0)
- , _connVertices(0)
+ : _firstShapeVert(NULL),
+ _firstConnVert(NULL),
+ _lastShapeVert(NULL),
+ _lastConnVert(NULL),
+ _shapeVertices(0),
+ _connVertices(0)
{
}
#define checkVertInfListConditions() \
do { \
- assert((!_firstConnVert && (_connVertices == 0)) || \
+ COLA_ASSERT((!_firstConnVert && (_connVertices == 0)) || \
((_firstConnVert->lstPrev == NULL) && (_connVertices > 0))); \
- assert((!_firstShapeVert && (_shapeVertices == 0)) || \
+ COLA_ASSERT((!_firstShapeVert && (_shapeVertices == 0)) || \
((_firstShapeVert->lstPrev == NULL) && (_shapeVertices > 0))); \
- assert(!_lastShapeVert || (_lastShapeVert->lstNext == NULL)); \
- assert(!_lastConnVert || (_lastConnVert->lstNext == _firstShapeVert)); \
- assert((!_firstConnVert && !_lastConnVert) || \
+ COLA_ASSERT(!_lastShapeVert || (_lastShapeVert->lstNext == NULL)); \
+ COLA_ASSERT(!_lastConnVert || (_lastConnVert->lstNext == _firstShapeVert)); \
+ COLA_ASSERT((!_firstConnVert && !_lastConnVert) || \
(_firstConnVert && _lastConnVert) ); \
- assert((!_firstShapeVert && !_lastShapeVert) || \
+ COLA_ASSERT((!_firstShapeVert && !_lastShapeVert) || \
(_firstShapeVert && _lastShapeVert) ); \
- assert(!_firstShapeVert || _firstShapeVert->id.isShape); \
- assert(!_lastShapeVert || _lastShapeVert->id.isShape); \
- assert(!_firstConnVert || !(_firstConnVert->id.isShape)); \
- assert(!_lastConnVert || !(_lastConnVert->id.isShape)); \
+ COLA_ASSERT(!_firstShapeVert || _firstShapeVert->id.isShape); \
+ COLA_ASSERT(!_lastShapeVert || _lastShapeVert->id.isShape); \
+ COLA_ASSERT(!_firstConnVert || !(_firstConnVert->id.isShape)); \
+ COLA_ASSERT(!_lastConnVert || !(_lastConnVert->id.isShape)); \
} while(0)
void VertInfList::addVertex(VertInf *vert)
{
checkVertInfListConditions();
- assert(vert->lstPrev == NULL);
- assert(vert->lstNext == NULL);
+ COLA_ASSERT(vert->lstPrev == NULL);
+ COLA_ASSERT(vert->lstNext == NULL);
if (!(vert->id.isShape))
{
@@ -329,10 +369,18 @@ void VertInfList::addVertex(VertInf *vert)
}
-void VertInfList::removeVertex(VertInf *vert)
+// Removes a vertex from the list and returns a pointer to the vertex
+// following the removed one.
+VertInf *VertInfList::removeVertex(VertInf *vert)
{
+ if (vert == NULL)
+ {
+ return NULL;
+ }
// Conditions for correct data structure
checkVertInfListConditions();
+
+ VertInf *following = vert->lstNext;
if (!(vert->id.isShape))
{
@@ -421,6 +469,50 @@ void VertInfList::removeVertex(VertInf *vert)
vert->lstNext = NULL;
checkVertInfListConditions();
+
+ return following;
+}
+
+
+VertInf *VertInfList::getVertexByID(const VertID& id)
+{
+ VertID searchID = id;
+ if (searchID.vn == kUnassignedVertexNumber)
+ {
+ unsigned int topbit = ((unsigned int) 1) << 31;
+ if (searchID.objID & topbit)
+ {
+ searchID.objID = searchID.objID & ~topbit;
+ searchID.vn = VertID::src;
+ }
+ else
+ {
+ searchID.vn = VertID::tar;
+ }
+ }
+ VertInf *last = end();
+ for (VertInf *curr = connsBegin(); curr != last; curr = curr->lstNext)
+ {
+ if (curr->id == searchID)
+ {
+ return curr;
+ }
+ }
+ return NULL;
+}
+
+
+VertInf *VertInfList::getVertexByPos(const Point& p)
+{
+ VertInf *last = end();
+ for (VertInf *curr = shapesBegin(); curr != last; curr = curr->lstNext)
+ {
+ if (curr->point == p)
+ {
+ return curr;
+ }
+ }
+ return NULL;
}
@@ -447,6 +539,18 @@ VertInf *VertInfList::end(void)
}
+unsigned int VertInfList::connsSize(void) const
+{
+ return _connVertices;
+}
+
+
+unsigned int VertInfList::shapesSize(void) const
+{
+ return _shapeVertices;
+}
+
+
}
diff --git a/src/libavoid/vertices.h b/src/libavoid/vertices.h
index 1b0dcf3aa..b07c87f95 100644
--- a/src/libavoid/vertices.h
+++ b/src/libavoid/vertices.h
@@ -2,24 +2,27 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
#ifndef AVOID_VERTICES_H
#define AVOID_VERTICES_H
@@ -28,6 +31,7 @@
#include <map>
#include <iostream>
#include <cstdio>
+
#include "libavoid/geomtypes.h"
namespace Avoid {
@@ -37,16 +41,18 @@ class Router;
typedef std::list<EdgeInf *> EdgeInfList;
+typedef unsigned int ConnDirFlags;
+
class VertID
{
public:
unsigned int objID;
bool isShape;
- int vn;
+ unsigned short vn;
- static const int src;
- static const int tar;
+ static const unsigned short src;
+ static const unsigned short tar;
VertID();
VertID(unsigned int id, bool s, int n);
@@ -64,12 +70,23 @@ class VertID
};
+// An ID given to all dummy vertices inserted to allow creation of the
+// orthogonal visibility graph since the vertices in the orthogonal graph
+// mostly do not correspond to shape corners or connector endpoints.
+//
+static const VertID dummyOrthogID(0, true, 0);
+
+
class VertInf
{
public:
- VertInf(Router *router, const VertID& vid, const Point& vpoint);
+ VertInf(Router *router, const VertID& vid, const Point& vpoint,
+ const bool addToRouter = true);
+ ~VertInf();
+ void Reset(const VertID& vid, const Point& vpoint);
void Reset(const Point& vpoint);
void removeFromGraph(const bool isConnVert = true);
+ bool orphaned(void);
Router *_router;
VertID id;
@@ -80,28 +97,40 @@ class VertInf
VertInf *shNext;
EdgeInfList visList;
unsigned int visListSize;
+ EdgeInfList orthogVisList;
+ unsigned int orthogVisListSize;
EdgeInfList invisList;
unsigned int invisListSize;
VertInf *pathNext;
- double pathDist;
+ ConnDirFlags visDirections;
};
bool directVis(VertInf *src, VertInf *dst);
+// A linked list of all the vertices in the router instance. All the
+// connector endpoints are listed first, then all the shape vertices.
+// Dunnny vertices inserted for orthogonal routing are classed as shape
+// vertices but have VertID(0, 0).
+//
class VertInfList
{
public:
VertInfList();
void addVertex(VertInf *vert);
- void removeVertex(VertInf *vert);
+ VertInf *removeVertex(VertInf *vert);
+ VertInf *getVertexByID(const VertID& id);
+ VertInf *getVertexByPos(const Point& p);
VertInf *shapesBegin(void);
VertInf *connsBegin(void);
VertInf *end(void);
- void stats(void)
+ unsigned int connsSize(void) const;
+ unsigned int shapesSize(void) const;
+ void stats(FILE *fp = stderr)
{
- printf("Conns %d, shapes %d\n", _connVertices, _shapeVertices);
+ fprintf(fp, "Conns %d, shapes %d\n", _connVertices,
+ _shapeVertices);
}
private:
VertInf *_firstShapeVert;
diff --git a/src/libavoid/viscluster.cpp b/src/libavoid/viscluster.cpp
new file mode 100644
index 000000000..a127c5a17
--- /dev/null
+++ b/src/libavoid/viscluster.cpp
@@ -0,0 +1,96 @@
+/*
+ * vim: ts=4 sw=4 et tw=0 wm=0
+ *
+ * libavoid - Fast, Incremental, Object-avoiding Line Router
+ *
+ * Copyright (C) 2004-2008 Monash University
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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.
+ *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
+*/
+
+
+#include "libavoid/viscluster.h"
+#include "libavoid/router.h"
+#include "libavoid/assertions.h"
+
+
+namespace Avoid {
+
+
+ClusterRef::ClusterRef(Router *router, unsigned int id, Polygon& ply)
+ : _router(router)
+ , _poly(ply, router)
+ , _active(false)
+{
+ _id = router->assignId(id);
+}
+
+
+ClusterRef::~ClusterRef()
+{
+}
+
+
+void ClusterRef::makeActive(void)
+{
+ COLA_ASSERT(!_active);
+
+ // Add to connRefs list.
+ _pos = _router->clusterRefs.insert(_router->clusterRefs.begin(), this);
+
+ _active = true;
+}
+
+
+void ClusterRef::makeInactive(void)
+{
+ COLA_ASSERT(_active);
+
+ // Remove from connRefs list.
+ _router->clusterRefs.erase(_pos);
+
+ _active = false;
+}
+
+
+void ClusterRef::setNewPoly(Polygon& poly)
+{
+ _poly = ReferencingPolygon(poly, _router);
+}
+
+
+unsigned int ClusterRef::id(void)
+{
+ return _id;
+}
+
+
+ReferencingPolygon& ClusterRef::polygon(void)
+{
+ return _poly;
+}
+
+
+Router *ClusterRef::router(void)
+{
+ return _router;
+}
+
+
+}
+
+
diff --git a/src/libavoid/viscluster.h b/src/libavoid/viscluster.h
new file mode 100644
index 000000000..5827e5070
--- /dev/null
+++ b/src/libavoid/viscluster.h
@@ -0,0 +1,67 @@
+/*
+ * vim: ts=4 sw=4 et tw=0 wm=0
+ *
+ * libavoid - Fast, Incremental, Object-avoiding Line Router
+ *
+ * Copyright (C) 2004-2008 Monash University
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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.
+ *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
+*/
+
+
+#ifndef AVOID_CLUSTER_H
+#define AVOID_CLUSTER_H
+
+#include <list>
+
+#include "libavoid/geometry.h"
+
+
+namespace Avoid {
+
+class Router;
+class ClusterRef;
+typedef std::list<ClusterRef *> ClusterRefList;
+
+
+class ClusterRef
+{
+ public:
+ ClusterRef(Router *router, unsigned int id, Polygon& poly);
+ ~ClusterRef();
+ void setNewPoly(Polygon& poly);
+ unsigned int id(void);
+ ReferencingPolygon& polygon(void);
+ Router *router(void);
+ void makeActive(void);
+ void makeInactive(void);
+
+ private:
+ Router *_router;
+ unsigned int _id;
+ ReferencingPolygon _poly;
+ bool _active;
+ ClusterRefList::iterator _pos;
+};
+
+
+}
+
+
+#endif
+
+
diff --git a/src/libavoid/visibility.cpp b/src/libavoid/visibility.cpp
index d2b057643..089911f35 100644
--- a/src/libavoid/visibility.cpp
+++ b/src/libavoid/visibility.cpp
@@ -2,26 +2,39 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2009 Monash University
+ *
+ * --------------------------------------------------------------------
+ * The Visibility Sweep technique is based upon the method described
+ * in Section 5.2 of:
+ * Lee, D.-T. (1978). Proximity and reachability in the plane.,
+ * PhD thesis, Department of Electrical Engineering,
+ * University of Illinois, Urbana, IL.
+ * --------------------------------------------------------------------
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
#include <algorithm>
#include <cfloat>
+#define _USE_MATH_DEFINES
+#include <cmath>
#include "libavoid/shape.h"
#include "libavoid/debug.h"
@@ -30,8 +43,7 @@
#include "libavoid/graph.h"
#include "libavoid/geometry.h"
#include "libavoid/router.h"
-
-#include <math.h>
+#include "libavoid/assertions.h"
#ifdef LINEDEBUG
#include "SDL_gfxPrimitives.h"
@@ -53,16 +65,7 @@ void shapeVis(ShapeRef *shape)
VertInf *shapeBegin = shape->firstVert();
VertInf *shapeEnd = shape->lastVert()->lstNext;
- VertInf *pointsBegin = NULL;
- if (router->IncludeEndpoints)
- {
- pointsBegin = router->vertices.connsBegin();
- }
- else
- {
- pointsBegin = router->vertices.shapesBegin();
- }
-
+ VertInf *pointsBegin = router->vertices.connsBegin();
for (VertInf *curr = shapeBegin; curr != shapeEnd; curr = curr->lstNext)
{
bool knownNew = true;
@@ -73,6 +76,11 @@ void shapeVis(ShapeRef *shape)
db_printf("\tFirst Half:\n");
for (VertInf *j = pointsBegin ; j != curr; j = j->lstNext)
{
+ if (j->id == dummyOrthogID)
+ {
+ // Don't include orthogonal dummy vertices.
+ continue;
+ }
EdgeInf::checkEdgeVisibility(curr, j, knownNew);
}
@@ -80,6 +88,11 @@ void shapeVis(ShapeRef *shape)
VertInf *pointsEnd = router->vertices.end();
for (VertInf *k = shapeEnd; k != pointsEnd; k = k->lstNext)
{
+ if (k->id == dummyOrthogID)
+ {
+ // Don't include orthogonal dummy vertices.
+ continue;
+ }
EdgeInf::checkEdgeVisibility(curr, k, knownNew);
}
}
@@ -113,7 +126,7 @@ void vertexVisibility(VertInf *point, VertInf *partner, bool knownNew,
const VertID& pID = point->id;
// Make sure we're only doing ptVis for endpoints.
- assert(!(pID.isShape));
+ COLA_ASSERT(!(pID.isShape));
if ( !(router->InvisibilityGrph) )
{
@@ -135,9 +148,14 @@ void vertexVisibility(VertInf *point, VertInf *partner, bool knownNew,
for (VertInf *k = router->vertices.shapesBegin(); k != shapesEnd;
k = k->lstNext)
{
+ if (k->id == dummyOrthogID)
+ {
+ // Don't include orthogonal dummy vertices.
+ continue;
+ }
EdgeInf::checkEdgeVisibility(point, k, knownNew);
}
- if (router->IncludeEndpoints && partner)
+ if (partner)
{
EdgeInf::checkEdgeVisibility(point, partner, knownNew);
}
@@ -152,7 +170,6 @@ void vertexVisibility(VertInf *point, VertInf *partner, bool knownNew,
static VertInf *centerInf;
static Point centerPoint;
static VertID centerID;
-static double centerAngle;
class PointPair
@@ -165,19 +182,44 @@ class PointPair
double y = vInf->point.y - centerPoint.y;
angle = pos_to_angle(x, y);
+ distance = euclideanDist(centerPoint, vInf->point);
}
- bool operator==(const PointPair& rhs) const
+ bool operator<(const PointPair& rhs) const
{
- if (vInf->id == rhs.vInf->id)
+ // Firstly order by angle.
+ if (angle == rhs.angle)
{
- return true;
+ // If the points are collinear, then order them in increasing
+ // distance from the point we are sweeping around.
+ if (distance == rhs.distance)
+ {
+ // XXX: Add this assertion back if we require that
+ // connector endpoints have unique IDs. For the
+ // moment it is okay for them to have the same ID.
+ //COLA_ASSERT(vInf->id != rhs.vInf->id);
+
+ // If comparing two points at the same physical
+ // position, then order them by their VertIDs.
+ return vInf->id < rhs.vInf->id;
+ }
+ return distance < rhs.distance;
}
- return false;
+ return angle < rhs.angle;
}
static double pos_to_angle(double x, double y)
{
+ if (y == 0)
+ {
+ return ((x < 0) ? 180 : 0);
+ }
+ else if (x == 0)
+ {
+ return ((y < 0) ? 270 : 90);
+ }
+
double ang = atan(y / x);
ang = (ang * 180) / M_PI;
+
if (x < 0)
{
ang += 180;
@@ -186,36 +228,48 @@ class PointPair
{
ang += 360;
}
+ COLA_ASSERT(ang >= 0);
+ COLA_ASSERT(ang <= 360);
return ang;
}
VertInf *vInf;
double angle;
+ double distance;
};
-typedef std::list<PointPair > VertList;
+typedef std::set<PointPair > VertSet;
class EdgePair
{
public:
- EdgePair(VertInf *v1, VertInf *v2, double d, double a)
- : vInf1(v1), vInf2(v2), initdist(d), initangle(a)
+ EdgePair() :
+ vInf1(NULL), vInf2(NULL), dist1(0.0), dist2(0.0), angle(0.0),
+ angleDist(0.0)
+ {
+ // The default constuctor should never be called.
+ // This is defined to appease the MSVC compiler.
+ COLA_ASSERT(false);
+ }
+ EdgePair(const PointPair& p1, VertInf *v) :
+ vInf1(p1.vInf),
+ vInf2(v),
+ dist1(p1.distance),
+ dist2(euclideanDist(vInf2->point, centerPoint)),
+ angle(p1.angle),
+ angleDist(p1.distance)
{
- currdist = initdist;
- currangle = initangle;
}
bool operator<(const EdgePair& rhs) const
{
- if (initdist == rhs.initdist)
+ COLA_ASSERT(angle == rhs.angle);
+ if (angleDist == rhs.angleDist)
{
- // TODO: This is a bit of a hack, should be
- // set by the call to the constructor.
- return dist(centerPoint, vInf2->point) <
- dist(centerPoint, rhs.vInf2->point);
+ return (dist2 < rhs.dist2);
}
- return (initdist < rhs.initdist);
+ return (angleDist < rhs.angleDist);
}
bool operator==(const EdgePair& rhs) const
{
@@ -239,37 +293,53 @@ class EdgePair
}
return true;
}
- void SetObsAng(double a)
+ void setNegativeAngle(void)
{
- obsAngle = fmod(initangle - (a - 180), 360);
+ angle = -1.0;
+ }
+ double setCurrAngle(const PointPair& p)
+ {
+ if (p.vInf->point == vInf1->point)
+ {
+ angleDist = dist1;
+ angle = p.angle;
+ }
+ else if (p.vInf->point == vInf2->point)
+ {
+ angleDist = dist2;
+ angle = p.angle;
+ }
+ else if (p.angle != angle)
+ {
+ COLA_ASSERT(p.angle > angle);
+ angle = p.angle;
+ Point pp;
+ int result = rayIntersectPoint(vInf1->point, vInf2->point,
+ centerPoint, p.vInf->point, &(pp.x), &(pp.y));
+ if (result != DO_INTERSECT)
+ {
+ // This can happen with points that appear to have the
+ // same angle but at are at slightly different positions
+ angleDist = std::min(dist1, dist2);
+ }
+ else
+ {
+ angleDist = euclideanDist(pp, centerPoint);
+ }
+ }
- //db_printf("SetObsAng: %.2f (from init %.2f, a %.2f)\n",
- // obsAngle, initangle, a);
+ return angleDist;
}
VertInf *vInf1;
VertInf *vInf2;
- double initdist;
- double initangle;
- double currdist;
- double currangle;
- double obsAngle;
+ double dist1;
+ double dist2;
+ double angle;
+ double angleDist;
};
-typedef std::set<EdgePair> EdgeSet;
-
-
-static bool ppCompare(PointPair& pp1, PointPair& pp2)
-{
- if (pp1.angle == pp2.angle)
- {
- // If the points are colinear, then order them in increasing
- // distance from the point we are sweeping around.
- return dist(centerPoint, pp1.vInf->point) <
- dist(centerPoint, pp2.vInf->point);
- }
- return pp1.angle < pp2.angle;
-}
+typedef std::list<EdgePair> SweepEdgeList;
#define AHEAD 1
@@ -278,11 +348,11 @@ static bool ppCompare(PointPair& pp1, PointPair& pp2)
class isBoundingShape
{
public:
- // constructor remembers the value provided
- isBoundingShape(ShapeSet& set)
- : ss(set)
+ // Class instance remembers the ShapeSet.
+ isBoundingShape(ShapeSet& set) :
+ ss(set)
{ }
- // the following is an overloading of the function call operator
+ // The following is an overloading of the function call operator.
bool operator () (const PointPair& pp)
{
if (pp.vInf->id.isShape &&
@@ -293,58 +363,111 @@ class isBoundingShape
return false;
}
private:
+ // MSVC wants to generate the assignment operator and the default
+ // constructor, but fails. Therefore we declare them private and
+ // don't implement them.
+ isBoundingShape & operator=(isBoundingShape const &);
+ isBoundingShape();
+
ShapeSet& ss;
};
-static bool sweepVisible(EdgeSet& T, VertInf *currInf, VertInf *lastInf,
- bool lastVisible, double lastAngle, int *blocker)
+static bool sweepVisible(SweepEdgeList& T, const PointPair& point,
+ std::set<unsigned int>& onBorderIDs, int *blocker)
{
+ if (T.empty())
+ {
+ // No blocking edges.
+ return true;
+ }
- if (!lastInf || (lastAngle != centerAngle))
+ Router *router = point.vInf->_router;
+ bool visible = true;
+
+ SweepEdgeList::const_iterator closestIt = T.begin();
+ SweepEdgeList::const_iterator end = T.end();
+ while (closestIt != end)
{
- // Nothing before it on the current ray
- EdgeSet::iterator closestIt = T.begin();
- if (closestIt != T.end())
+ if ((point.vInf->point == closestIt->vInf1->point) ||
+ (point.vInf->point == closestIt->vInf2->point))
{
+ // If the ray intersects just the endpoint of a
+ // blocking edge then ignore that edge.
+ ++closestIt;
+ continue;
+ }
+ break;
+ }
+ if (closestIt == end)
+ {
+ return true;
+ }
- Point &e1 = (*closestIt).vInf1->point;
- Point &e2 = (*closestIt).vInf2->point;
-
- if (segmentIntersect(centerInf->point, currInf->point, e1, e2))
+ if (! point.vInf->id.isShape )
+ {
+ // It's a connector endpoint, so we have to ignore
+ // edges of containing shapes for determining visibility.
+ ShapeSet& rss = router->contains[point.vInf->id];
+ while (closestIt != end)
+ {
+ if (rss.find(closestIt->vInf1->id.objID) == rss.end())
{
- *blocker = (*closestIt).vInf1->id.objID;
- return false;
+ // This is not a containing edge so do the normal
+ // test and then stop.
+ if (point.distance > closestIt->angleDist)
+ {
+ visible = false;
+ }
+ else if ((point.distance == closestIt->angleDist) &&
+ onBorderIDs.find(closestIt->vInf1->id.objID) !=
+ onBorderIDs.end())
+ {
+ // Touching, but centerPoint is on another edge of
+ // shape shape, so count as blocking.
+ visible = false;
+ }
+ break;
}
+ // This was a containing edge, so consider the next along.
+ ++closestIt;
}
}
else
{
- // There was another point before this on the ray (lastInf)
- if (!lastVisible)
+ // Just test to see if this point is closer than the closest
+ // edge blocking this ray.
+ if (point.distance > closestIt->angleDist)
{
- *blocker = -1;
- return false;
+ visible = false;
}
- else
+ else if ((point.distance == closestIt->angleDist) &&
+ onBorderIDs.find(closestIt->vInf1->id.objID) !=
+ onBorderIDs.end())
{
- // Check if there is an edge in T that blocks the ray
- // between lastInf and currInf.
- EdgeSet::iterator tfin = T.end();
- for (EdgeSet::iterator l = T.begin(); l != tfin; ++l)
- {
- Point &e1 = (*l).vInf1->point;
- Point &e2 = (*l).vInf2->point;
+ // Touching, but centerPoint is on another edge of
+ // shape shape, so count as blocking.
+ visible = false;
+ }
+ }
- if (segmentIntersect(lastInf->point, currInf->point, e1, e2))
- {
- *blocker = (*l).vInf1->id.objID;
- return false;
- }
- }
+ if (!visible)
+ {
+ *blocker = (*closestIt).vInf1->id.objID;
+#ifdef LINEDEBUG
+ Point &e1 = (*closestIt).vInf1->point;
+ Point &e2 = (*closestIt).vInf2->point;
+
+ if (router->avoid_screen)
+ {
+ int canx = 151;
+ int cany = 55;
+ lineRGBA(router->avoid_screen, e1.x + canx, e1.y + cany,
+ e2.x + canx, e2.y + cany, 0, 0, 225, 255);
}
+#endif
}
- return true;
+ return visible;
}
@@ -358,120 +481,128 @@ void vertexSweep(VertInf *vert)
centerID = pID;
centerPoint = pPoint;
Point centerPt = pPoint;
- centerAngle = -1;
// List of shape (and maybe endpt) vertices, except p
// Sort list, around
- VertList v;
+ VertSet v;
// Initialise the vertex list
+ ShapeSet& ss = router->contains[centerID];
VertInf *beginVert = router->vertices.connsBegin();
VertInf *endVert = router->vertices.end();
for (VertInf *inf = beginVert; inf != endVert; inf = inf->lstNext)
{
- if (inf->id == centerID)
+ if (inf == centerInf)
+ {
+ // Don't include the center point itself.
+ continue;
+ }
+ else if (inf->id == dummyOrthogID)
{
- // Don't include the center point
+ // Don't include orthogonal dummy vertices.
+ continue;
+ }
+
+ if (!(centerID.isShape) && (ss.find(inf->id.objID) != ss.end()))
+ {
+ // Don't include edge points of containing shapes.
+ unsigned int shapeID = inf->id.objID;
+ db_printf("Center is inside shape %u so ignore shape edges.\n",
+ shapeID);
continue;
}
if (inf->id.isShape)
{
- // Add shape vertex
- v.push_back(inf);
+ // Add shape vertex.
+ v.insert(inf);
}
else
{
- if (router->IncludeEndpoints)
+ // Add connector endpoint.
+ if (centerID.isShape)
{
- if (centerID.isShape)
- {
- // Add endpoint vertex
- v.push_back(inf);
- }
- else
+ // Center is a shape vertex, so add all endpoint vertices.
+ v.insert(inf);
+ }
+ else
+ {
+ // Center is an endpoint, so only include the other
+ // endpoint from the matching connector.
+ VertID partnerID = VertID(centerID.objID, false,
+ (centerID.vn == 1) ? 2 : 1);
+ if (inf->id == partnerID)
{
- // Center is an endpoint, so only include the other
- // endpoint from the matching connector.
- VertID partnerID = VertID(centerID.objID, false,
- (centerID.vn == 1) ? 2 : 1);
- if (inf->id == partnerID)
- {
- v.push_back(inf);
- }
+ v.insert(inf);
}
}
}
}
- // TODO: This should be done with a sorted data type and insertion sort.
- v.sort(ppCompare);
-
- EdgeSet e;
- ShapeSet& ss = router->contains[centerID];
+ std::set<unsigned int> onBorderIDs;
- // And edge to T that intersect the initial ray.
- VertInf *last = router->vertices.end();
- for (VertInf *k = router->vertices.shapesBegin(); k != last; )
+ // Add edges to T that intersect the initial ray.
+ SweepEdgeList e;
+ VertSet::const_iterator vbegin = v.begin();
+ VertSet::const_iterator vend = v.end();
+ for (VertSet::const_iterator t = vbegin; t != vend; ++t)
{
- VertID kID = k->id;
- if (!(centerID.isShape) && (ss.find(kID.objID) != ss.end()))
- {
- unsigned int shapeID = kID.objID;
- db_printf("Center is inside shape %u so ignore shape edges.\n",
- shapeID);
- // One of the endpoints is inside this shape so ignore it.
- while ((k != last) && (k->id.objID == shapeID))
- {
- // And skip the other vertices from this shape.
- k = k->lstNext;
- }
- continue;
- }
+ VertInf *k = t->vInf;
- VertInf *kPrev = k->shPrev;
- if ((centerInf == k) || (centerInf == kPrev))
- {
- k = k->lstNext;
- continue;
- }
+ COLA_ASSERT(centerInf != k);
+ COLA_ASSERT(centerID.isShape || (ss.find(k->id.objID) == ss.end()));
Point xaxis(DBL_MAX, centerInf->point.y);
- if (segmentIntersect(centerInf->point, xaxis, kPrev->point, k->point))
+ VertInf *kPrev = k->shPrev;
+ VertInf *kNext = k->shNext;
+ if (kPrev && (kPrev != centerInf) &&
+ (vecDir(centerInf->point, xaxis, kPrev->point) == AHEAD))
{
- double distance;
- if (vecDir(centerInf->point, xaxis, kPrev->point) == BEHIND)
+ if (segmentIntersect(centerInf->point, xaxis, kPrev->point,
+ k->point))
{
- distance = dist(centerInf->point, kPrev->point);
+ EdgePair intPair = EdgePair(*t, kPrev);
+ e.push_back(intPair);
}
- else
+ if ((vecDir(kPrev->point, k->point, centerInf->point) == 0) &&
+ inBetween(kPrev->point, k->point, centerInf->point))
{
- distance = dist(centerInf->point, k->point);
+ // Record that centerPoint is on an obstacle line.
+ onBorderIDs.insert(k->id.objID);
+ }
+ }
+ else if (kNext && (kNext != centerInf) &&
+ (vecDir(centerInf->point, xaxis, kNext->point) == AHEAD))
+ {
+ if (segmentIntersect(centerInf->point, xaxis, kNext->point,
+ k->point))
+ {
+ EdgePair intPair = EdgePair(*t, kNext);
+ e.push_back(intPair);
+ }
+ if ((vecDir(kNext->point, k->point, centerInf->point) == 0) &&
+ inBetween(kNext->point, k->point, centerInf->point))
+ {
+ // Record that centerPoint is on an obstacle line.
+ onBorderIDs.insert(k->id.objID);
}
-
- EdgePair intPair = EdgePair(k, kPrev, distance, 0.0);
- e.insert(intPair).first;
}
- k = k->lstNext;
}
+ for (SweepEdgeList::iterator c = e.begin(); c != e.end(); ++c)
+ {
+ (*c).setNegativeAngle();
+ }
+
// Start the actual sweep.
db_printf("SWEEP: "); centerID.db_print(); db_printf("\n");
- VertInf *lastInf = NULL;
- double lastAngle = 0;
- bool lastVisible = false;
- int lastBlocker = 0;
-
- isBoundingShape isBounding(router->contains[centerID]);
- VertList::iterator vfst = v.begin();
- VertList::iterator vfin = v.end();
- for (VertList::iterator t = vfst; t != vfin; ++t)
+ isBoundingShape isBounding(ss);
+ for (VertSet::const_iterator t = vbegin; t != vend; ++t)
{
VertInf *currInf = (*t).vInf;
VertID& currID = currInf->id;
Point& currPt = currInf->point;
- centerAngle = (*t).angle;
#ifdef LINEDEBUG
Sint16 ppx = (int) centerPt.x;
@@ -479,29 +610,28 @@ void vertexSweep(VertInf *vert)
Sint16 cx = (int) currPt.x;
Sint16 cy = (int) currPt.y;
+
+ int canx = 151;
+ int cany = 55;
#endif
- double currDist = dist(centerPt, currPt);
- db_printf("Dist: %.1f.\n", currDist);
+ const double& currDist = (*t).distance;
EdgeInf *edge = EdgeInf::existingEdge(centerInf, currInf);
if (edge == NULL)
{
edge = new EdgeInf(centerInf, currInf);
}
- // Ignore vertices from bounding shapes, if sweeping round an endpoint.
- if (!(centerID.isShape) && isBounding(*t))
+
+ for (SweepEdgeList::iterator c = e.begin(); c != e.end(); ++c)
{
- if (router->InvisibilityGrph)
- {
- // if p and t can't see each other, add blank edge
- db_printf("\tSkipping visibility edge... \n\t\t");
- edge->addBlocker(currInf->id.objID);
- edge->db_print();
- }
- continue;
+ (*c).setCurrAngle(*t);
}
+ e.sort();
+ // Check visibility.
+ int blocker = 0;
+ bool currVisible = sweepVisible(e, *t, onBorderIDs, &blocker);
bool cone1 = true, cone2 = true;
if (centerID.isShape)
@@ -519,7 +649,6 @@ void vertexSweep(VertInf *vert)
if (!cone1 || !cone2)
{
- lastInf = NULL;
if (router->InvisibilityGrph)
{
db_printf("\tSetting invisibility edge... \n\t\t");
@@ -529,18 +658,15 @@ void vertexSweep(VertInf *vert)
}
else
{
- int blocker = 0;
- // Check visibility.
- bool currVisible = sweepVisible(e, currInf,
- lastInf, lastVisible, lastAngle, &blocker);
- if (blocker == -1)
- {
- blocker = lastBlocker;
- }
if (currVisible)
{
#ifdef LINEDEBUG
- lineRGBA(avoid_screen, ppx, ppy, cx, cy, 255, 0, 0, 32);
+ if (router->avoid_screen)
+ {
+ lineRGBA(router->avoid_screen, ppx + canx, ppy + cany,
+ cx + canx, cy + cany, 255, 0, 0, 75);
+ SDL_Delay(1000);
+ }
#endif
db_printf("\tSetting visibility edge... \n\t\t");
edge->setDist(currDist);
@@ -552,72 +678,55 @@ void vertexSweep(VertInf *vert)
edge->addBlocker(blocker);
edge->db_print();
}
-
- lastVisible = currVisible;
- lastInf = currInf;
- lastAngle = centerAngle;
- lastBlocker = blocker;
+ }
+
+ if (!(edge->added()) && !(router->InvisibilityGrph))
+ {
+ delete edge;
+ edge = NULL;
}
if (currID.isShape)
{
// This is a shape edge
- Point& prevPt = currInf->shPrev->point;
- Point& nextPt = currInf->shNext->point;
-
- int prevDir = vecDir(centerPt, currPt, prevPt);
- EdgePair prevPair = EdgePair(currInf, currInf->shPrev,
- currDist, centerAngle);
- EdgeSet::iterator ePtr;
- if (prevDir == BEHIND)
+ if (currInf->shPrev != centerInf)
{
- // XXX: Strangely e.find does not return the correct results.
- // ePtr = e.find(prevPair);
- ePtr = std::find(e.begin(), e.end(), prevPair);
- if (ePtr != e.end())
+ Point& prevPt = currInf->shPrev->point;
+ int prevDir = vecDir(centerPt, currPt, prevPt);
+ EdgePair prevPair = EdgePair(*t, currInf->shPrev);
+
+ if (prevDir == BEHIND)
{
- e.erase(ePtr);
+ e.remove(prevPair);
}
- }
- else if ((prevDir == AHEAD) && (currInf->shPrev != centerInf))
- {
- double x = prevPt.x - currPt.x;
- double y = prevPt.y - currPt.y;
- double angle = PointPair::pos_to_angle(x, y);
- prevPair.SetObsAng(angle);
-
- ePtr = e.insert(prevPair).first;
- }
-
-
- int nextDir = vecDir(centerPt, currPt, nextPt);
- EdgePair nextPair = EdgePair(currInf, currInf->shNext,
- currDist, centerAngle);
-
- if (nextDir == BEHIND)
- {
- // XXX: Strangely e.find does not return the correct results.
- // ePtr = e.find(nextPair);
- ePtr = std::find(e.begin(), e.end(), nextPair);
- if (ePtr != e.end())
+ else if (prevDir == AHEAD)
{
- e.erase(ePtr);
+ e.push_front(prevPair);
}
}
- else if ((nextDir == AHEAD) && (currInf->shNext != centerInf))
+
+ if (currInf->shNext != centerInf)
{
- double x = nextPt.x - currPt.x;
- double y = nextPt.y - currPt.y;
- double angle = PointPair::pos_to_angle(x, y);
- nextPair.SetObsAng(angle);
+ Point& nextPt = currInf->shNext->point;
+ int nextDir = vecDir(centerPt, currPt, nextPt);
+ EdgePair nextPair = EdgePair(*t, currInf->shNext);
- ePtr = e.insert(nextPair).first;
+ if (nextDir == BEHIND)
+ {
+ e.remove(nextPair);
+ }
+ else if (nextDir == AHEAD)
+ {
+ e.push_front(nextPair);
+ }
}
}
-
#ifdef LINEDEBUG
- SDL_Flip(avoid_screen);
+ if (router->avoid_screen)
+ {
+ SDL_Flip(router->avoid_screen);
+ }
#endif
}
}
diff --git a/src/libavoid/visibility.h b/src/libavoid/visibility.h
index dd68ac692..92e56d922 100644
--- a/src/libavoid/visibility.h
+++ b/src/libavoid/visibility.h
@@ -2,24 +2,27 @@
* vim: ts=4 sw=4 et tw=0 wm=0
*
* libavoid - Fast, Incremental, Object-avoiding Line Router
- * Copyright (C) 2004-2006 Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+ * Copyright (C) 2004-2008 Monash University
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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. See the GNU
- * Lesser General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Author(s): Michael Wybrow <mjwybrow@users.sourceforge.net>
*/
+
#ifndef AVOID_VISIBILITY_H
#define AVOID_VISIBILITY_H
@@ -28,7 +31,9 @@
namespace Avoid {
-
+class ShapeRef;
+class VertInf;
+
extern void vertexVisibility(VertInf *point, VertInf *partner, bool knownNew,
const bool gen_contains = false);
extern void vertexSweep(VertInf *point);
diff --git a/src/libavoid/vpsc.cpp b/src/libavoid/vpsc.cpp
new file mode 100644
index 000000000..19d360375
--- /dev/null
+++ b/src/libavoid/vpsc.cpp
@@ -0,0 +1,1301 @@
+/*
+ * vim: ts=4 sw=4 et tw=0 wm=0
+ *
+ * libavoid - Fast, Incremental, Object-avoiding Line Router
+ *
+ * Copyright (C) 2005-2009 Monash University
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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.
+ *
+ * Author(s): Tim Dwyer <Tim.Dwyer@csse.monash.edu.au>
+ *
+ * --------------
+ *
+ * This file contains a slightly modified version of Solver() from libvpsc:
+ * A solver for the problem of Variable Placement with Separation Constraints.
+ * It has the following changes from the Adaptagrams VPSC version:
+ * - The required VPSC code has been consolidated into a single file.
+ * - Unnecessary code (like Solver) has been removed.
+ * - The PairingHeap code has been replaced by a STL priority_queue.
+ *
+ * Modifications: Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+*/
+
+#include <iostream>
+#include <math.h>
+#include <sstream>
+#include <map>
+#include <cfloat>
+#include <cstdio>
+
+#include "libavoid/vpsc.h"
+#include "libavoid/assertions.h"
+
+
+using namespace std;
+
+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)
+{
+ for(unsigned i=0;i<n;++i) {
+ vs[i]->in.clear();
+ vs[i]->out.clear();
+ }
+ for(unsigned i=0;i<m;++i) {
+ Constraint *c=cs[i];
+ c->left->out.push_back(c);
+ c->right->in.push_back(c);
+ }
+ bs=new Blocks(vs);
+#ifdef LIBVPSC_LOGGING
+ printBlocks();
+ //COLA_ASSERT(!constraintGraphIsCyclic(n,vs));
+#endif
+
+ inactive=cs;
+ for(Constraints::iterator i=inactive.begin();i!=inactive.end();++i) {
+ (*i)->active=false;
+ }
+}
+IncSolver::~IncSolver() {
+ delete bs;
+}
+
+// useful in debugging
+void IncSolver::printBlocks() {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ for(set<Block*>::iterator i=bs->begin();i!=bs->end();++i) {
+ Block *b=*i;
+ f<<" "<<*b<<endl;
+ }
+ for(unsigned i=0;i<m;i++) {
+ f<<" "<<*cs[i]<<endl;
+ }
+#endif
+}
+
+/*
+ * Stores the relative positions of the variables in their finalPosition
+ * field.
+ */
+void IncSolver::copyResult() {
+ for(Variables::const_iterator i=vs.begin();i!=vs.end();++i) {
+ Variable* v=*i;
+ v->finalPosition=v->position();
+ COLA_ASSERT(v->finalPosition==v->finalPosition);
+ }
+}
+
+struct node {
+ set<node*> in;
+ set<node*> out;
+};
+// useful in debugging - cycles would be BAD
+bool IncSolver::constraintGraphIsCyclic(const unsigned n, Variable* const vs[]) {
+ map<Variable*, node*> varmap;
+ vector<node*> graph;
+ for(unsigned i=0;i<n;i++) {
+ node *u=new node;
+ graph.push_back(u);
+ varmap[vs[i]]=u;
+ }
+ for(unsigned i=0;i<n;i++) {
+ for(vector<Constraint*>::iterator c=vs[i]->in.begin();c!=vs[i]->in.end();++c) {
+ Variable *l=(*c)->left;
+ varmap[vs[i]]->in.insert(varmap[l]);
+ }
+
+ for(vector<Constraint*>::iterator c=vs[i]->out.begin();c!=vs[i]->out.end();++c) {
+ Variable *r=(*c)->right;
+ varmap[vs[i]]->out.insert(varmap[r]);
+ }
+ }
+ while(graph.size()>0) {
+ node *u=NULL;
+ vector<node*>::iterator i=graph.begin();
+ for(;i!=graph.end();++i) {
+ u=*i;
+ if(u->in.size()==0) {
+ break;
+ }
+ }
+ if(i==graph.end() && graph.size()>0) {
+ //cycle found!
+ return true;
+ } else {
+ graph.erase(i);
+ for(set<node*>::iterator j=u->out.begin();j!=u->out.end();++j) {
+ node *v=*j;
+ v->in.erase(u);
+ }
+ delete u;
+ }
+ }
+ for(unsigned i=0; i<graph.size(); ++i) {
+ delete graph[i];
+ }
+ return false;
+}
+
+// useful in debugging - cycles would be BAD
+bool IncSolver::blockGraphIsCyclic() {
+ map<Block*, node*> bmap;
+ vector<node*> graph;
+ for(set<Block*>::const_iterator i=bs->begin();i!=bs->end();++i) {
+ Block *b=*i;
+ node *u=new node;
+ graph.push_back(u);
+ bmap[b]=u;
+ }
+ for(set<Block*>::const_iterator i=bs->begin();i!=bs->end();++i) {
+ Block *b=*i;
+ b->setUpInConstraints();
+ Constraint *c=b->findMinInConstraint();
+ while(c!=NULL) {
+ Block *l=c->left->block;
+ bmap[b]->in.insert(bmap[l]);
+ b->deleteMinInConstraint();
+ c=b->findMinInConstraint();
+ }
+
+ b->setUpOutConstraints();
+ c=b->findMinOutConstraint();
+ while(c!=NULL) {
+ Block *r=c->right->block;
+ bmap[b]->out.insert(bmap[r]);
+ b->deleteMinOutConstraint();
+ c=b->findMinOutConstraint();
+ }
+ }
+ while(graph.size()>0) {
+ node *u=NULL;
+ vector<node*>::iterator i=graph.begin();
+ for(;i!=graph.end();++i) {
+ u=*i;
+ if(u->in.size()==0) {
+ break;
+ }
+ }
+ if(i==graph.end() && graph.size()>0) {
+ //cycle found!
+ return true;
+ } else {
+ graph.erase(i);
+ for(set<node*>::iterator j=u->out.begin();j!=u->out.end();++j) {
+ node *v=*j;
+ v->in.erase(u);
+ }
+ delete u;
+ }
+ }
+ for(unsigned i=0; i<graph.size(); i++) {
+ delete graph[i];
+ }
+ return false;
+}
+
+bool IncSolver::solve() {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<"solve_inc()..."<<endl;
+#endif
+ satisfy();
+ double lastcost = DBL_MAX, cost = bs->cost();
+ while(fabs(lastcost-cost)>0.0001) {
+ satisfy();
+ lastcost=cost;
+ cost = bs->cost();
+#ifdef LIBVPSC_LOGGING
+ f<<" bs->size="<<bs->size()<<", cost="<<cost<<endl;
+#endif
+ }
+ copyResult();
+ return bs->size()!=n;
+}
+/*
+ * incremental version of satisfy that allows refinement after blocks are
+ * moved.
+ *
+ * - move blocks to new positions
+ * - repeatedly merge across most violated constraint until no more
+ * violated constraints exist
+ *
+ * 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.
+ */
+bool IncSolver::satisfy() {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<"satisfy_inc()..."<<endl;
+#endif
+ splitBlocks();
+ //long splitCtr = 0;
+ Constraint* v = NULL;
+ //CBuffer buffer(inactive);
+ 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;
+ if(lb != rb) {
+ lb->merge(rb,v);
+ } else {
+ if(lb->isActiveDirectedPathBetween(v->right,v->left)) {
+ // cycle found, relax the violated, cyclic constraint
+ v->unsatisfiable=true;
+ continue;
+ //UnsatisfiableException e;
+ //lb->getActiveDirectedPathBetween(e.path,v->right,v->left);
+ //e.path.push_back(v);
+ //throw e;
+ }
+ //if(splitCtr++>10000) {
+ //throw "Cycle Error!";
+ //}
+ // constraint is within block, need to split first
+ try {
+ Constraint* splitConstraint
+ =lb->splitBetween(v->left,v->right,lb,rb);
+ if(splitConstraint!=NULL) {
+ COLA_ASSERT(!splitConstraint->active);
+ inactive.push_back(splitConstraint);
+ } else {
+ v->unsatisfiable=true;
+ continue;
+ }
+ } catch(UnsatisfiableException e) {
+ e.path.push_back(v);
+ std::cerr << "Unsatisfiable:" << std::endl;
+ for(std::vector<Constraint*>::iterator r=e.path.begin();
+ r!=e.path.end();++r)
+ {
+ std::cerr << **r <<std::endl;
+ }
+ v->unsatisfiable=true;
+ continue;
+ }
+ if(v->slack()>=0) {
+ COLA_ASSERT(!v->active);
+ // v was satisfied by the above split!
+ inactive.push_back(v);
+ bs->insert(lb);
+ bs->insert(rb);
+ } else {
+ bs->insert(lb->merge(rb,v));
+ }
+ }
+ bs->cleanup();
+#ifdef LIBVPSC_LOGGING
+ f<<"...remaining blocks="<<bs->size()<<", cost="<<bs->cost()<<endl;
+#endif
+ }
+#ifdef LIBVPSC_LOGGING
+ f<<" finished merges."<<endl;
+#endif
+ bs->cleanup();
+ bool activeConstraints=false;
+ for(unsigned i=0;i<m;i++) {
+ v=cs[i];
+ if(v->active) activeConstraints=true;
+ if(v->slack() < ZERO_UPPERBOUND) {
+ ostringstream s;
+ s<<"Unsatisfied constraint: "<<*v;
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<s.str()<<endl;
+#endif
+ throw s.str().c_str();
+ }
+ }
+#ifdef LIBVPSC_LOGGING
+ f<<" finished cleanup."<<endl;
+ printBlocks();
+#endif
+ copyResult();
+ return activeConstraints;
+}
+void IncSolver::moveBlocks() {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<"moveBlocks()..."<<endl;
+#endif
+ for(set<Block*>::const_iterator i(bs->begin());i!=bs->end();++i) {
+ Block *b = *i;
+ b->updateWeightedPosition();
+ //b->posn = b->wposn / b->weight;
+ }
+#ifdef LIBVPSC_LOGGING
+ f<<" moved blocks."<<endl;
+#endif
+}
+void IncSolver::splitBlocks() {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+#endif
+ moveBlocks();
+ splitCnt=0;
+ // Split each block if necessary on min LM
+ for(set<Block*>::const_iterator i(bs->begin());i!=bs->end();++i) {
+ Block* b = *i;
+ Constraint* v=b->findMinLM();
+ if(v!=NULL && v->lm < LAGRANGIAN_TOLERANCE) {
+ COLA_ASSERT(!v->equality);
+#ifdef LIBVPSC_LOGGING
+ f<<" found split point: "<<*v<<" lm="<<v->lm<<endl;
+#endif
+ splitCnt++;
+ Block *b = v->left->block, *l=NULL, *r=NULL;
+ COLA_ASSERT(v->left->block == v->right->block);
+ //double pos = b->posn;
+ b->split(l,r,v);
+ //l->posn=r->posn=pos;
+ //l->wposn = l->posn * l->weight;
+ //r->wposn = r->posn * r->weight;
+ l->updateWeightedPosition();
+ r->updateWeightedPosition();
+ bs->insert(l);
+ bs->insert(r);
+ b->deleted=true;
+ COLA_ASSERT(!v->active);
+ inactive.push_back(v);
+#ifdef LIBVPSC_LOGGING
+ f<<" new blocks: "<<*l<<" and "<<*r<<endl;
+#endif
+ }
+ }
+ //if(splitCnt>0) { std::cout<<" splits: "<<splitCnt<<endl; }
+#ifdef LIBVPSC_LOGGING
+ f<<" finished splits."<<endl;
+#endif
+ bs->cleanup();
+}
+
+/*
+ * Scan constraint list for the most violated constraint, or the first equality
+ * constraint
+ */
+Constraint* IncSolver::mostViolated(Constraints &l) {
+ double minSlack = DBL_MAX;
+ Constraint* v=NULL;
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<"Looking for most violated..."<<endl;
+#endif
+ Constraints::iterator end = l.end();
+ Constraints::iterator deletePoint = end;
+ for(Constraints::iterator i=l.begin();i!=end;++i) {
+ Constraint *c=*i;
+ double slack = c->slack();
+ if(c->equality || slack < minSlack) {
+ minSlack=slack;
+ v=c;
+ deletePoint=i;
+ if(c->equality) break;
+ }
+ }
+ // Because the constraint list is not order dependent we just
+ // move the last element over the deletePoint and resize
+ // downwards. There is always at least 1 element in the
+ // vector because of search.
+ // 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);
+ }
+#ifdef LIBVPSC_LOGGING
+ f<<" most violated is: "<<*v<<endl;
+#endif
+ return v;
+}
+
+
+using std::set;
+using std::vector;
+using std::iterator;
+using std::list;
+using std::copy;
+#define __NOTNAN(p) (p)==(p)
+
+long blockTimeCtr;
+
+Blocks::Blocks(vector<Variable*> const &vs) : vs(vs),nvs(vs.size()) {
+ blockTimeCtr=0;
+ for(int i=0;i<nvs;i++) {
+ insert(new Block(vs[i]));
+ }
+}
+Blocks::~Blocks(void)
+{
+ blockTimeCtr=0;
+ for(set<Block*>::iterator i=begin();i!=end();++i) {
+ delete *i;
+ }
+ clear();
+}
+
+/*
+ * returns a list of variables with total ordering determined by the constraint
+ * DAG
+ */
+list<Variable*> *Blocks::totalOrder() {
+ list<Variable*> *order = new list<Variable*>;
+ for(int i=0;i<nvs;i++) {
+ vs[i]->visited=false;
+ }
+ for(int i=0;i<nvs;i++) {
+ if(vs[i]->in.size()==0) {
+ dfsVisit(vs[i],order);
+ }
+ }
+ return order;
+}
+// Recursive depth first search giving total order by pushing nodes in the DAG
+// onto the front of the list when we finish searching them
+void Blocks::dfsVisit(Variable *v, list<Variable*> *order) {
+ v->visited=true;
+ vector<Constraint*>::iterator it=v->out.begin();
+ for(;it!=v->out.end();++it) {
+ Constraint *c=*it;
+ if(!c->right->visited) {
+ dfsVisit(c->right, order);
+ }
+ }
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" order="<<*v<<endl;
+#endif
+ order->push_front(v);
+}
+/*
+ * 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) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<"mergeLeft called on "<<*r<<endl;
+#endif
+ r->timeStamp=++blockTimeCtr;
+ r->setUpInConstraints();
+ Constraint *c=r->findMinInConstraint();
+ while (c != NULL && c->slack()<0) {
+#ifdef LIBVPSC_LOGGING
+ f<<"mergeLeft on constraint: "<<*c<<endl;
+#endif
+ r->deleteMinInConstraint();
+ 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()) {
+ dist=-dist;
+ std::swap(l, r);
+ }
+ blockTimeCtr++;
+ r->merge(l, c, dist);
+ r->mergeIn(l);
+ r->timeStamp=blockTimeCtr;
+ removeBlock(l);
+ c=r->findMinInConstraint();
+ }
+#ifdef LIBVPSC_LOGGING
+ f<<"merged "<<*r<<endl;
+#endif
+}
+/*
+ * Symmetrical to mergeLeft
+ */
+void Blocks::mergeRight(Block *l) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<"mergeRight called on "<<*l<<endl;
+#endif
+ l->setUpOutConstraints();
+ Constraint *c = l->findMinOutConstraint();
+ while (c != NULL && c->slack()<0) {
+#ifdef LIBVPSC_LOGGING
+ f<<"mergeRight on constraint: "<<*c<<endl;
+#endif
+ l->deleteMinOutConstraint();
+ Block *r = c->right->block;
+ r->setUpOutConstraints();
+ double dist = c->left->offset + c->gap - c->right->offset;
+ if (l->vars->size() > r->vars->size()) {
+ dist=-dist;
+ std::swap(l, r);
+ }
+ l->merge(r, c, dist);
+ l->mergeOut(r);
+ removeBlock(r);
+ c=l->findMinOutConstraint();
+ }
+#ifdef LIBVPSC_LOGGING
+ f<<"merged "<<*l<<endl;
+#endif
+}
+void Blocks::removeBlock(Block *doomed) {
+ doomed->deleted=true;
+ //erase(doomed);
+}
+void Blocks::cleanup() {
+ vector<Block*> bcopy(begin(),end());
+ for(vector<Block*>::iterator i=bcopy.begin();i!=bcopy.end();++i) {
+ Block *b=*i;
+ if(b->deleted) {
+ erase(b);
+ delete b;
+ }
+ }
+}
+/*
+ * Splits block b across constraint c into two new blocks, l and r (c's left
+ * and right sides respectively)
+ */
+void Blocks::split(Block *b, Block *&l, Block *&r, Constraint *c) {
+ b->split(l,r,c);
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<"Split left: "<<*l<<endl;
+ f<<"Split right: "<<*r<<endl;
+#endif
+ r->posn = b->posn;
+ //COLA_ASSERT(r->weight!=0);
+ //r->wposn = r->posn * r->weight;
+ mergeLeft(l);
+ // r may have been merged!
+ r = c->right->block;
+ r->updateWeightedPosition();
+ //r->posn = r->wposn / r->weight;
+ mergeRight(r);
+ removeBlock(b);
+
+ insert(l);
+ insert(r);
+ COLA_ASSERT(__NOTNAN(l->posn));
+ COLA_ASSERT(__NOTNAN(r->posn));
+}
+/*
+ * returns the cost total squared distance of variables from their desired
+ * positions
+ */
+double Blocks::cost() {
+ double c = 0;
+ for(set<Block*>::iterator i=begin();i!=end();++i) {
+ c += (*i)->cost();
+ }
+ return c;
+}
+
+void PositionStats::addVariable(Variable* v) {
+ double ai=scale/v->scale;
+ double bi=v->offset/v->scale;
+ double wi=v->weight;
+ AB+=wi*ai*bi;
+ AD+=wi*ai*v->desiredPosition;
+ A2+=wi*ai*ai;
+ /*
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f << "adding v[" << v->id << "], blockscale=" << scale << ", despos="
+ << v->desiredPosition << ", ai=" << ai << ", bi=" << bi
+ << ", AB=" << AB << ", AD=" << AD << ", A2=" << A2;
+#endif
+*/
+}
+void Block::addVariable(Variable* v) {
+ v->block=this;
+ vars->push_back(v);
+ if(ps.A2==0) ps.scale=v->scale;
+ //weight+= v->weight;
+ //wposn += v->weight * (v->desiredPosition - v->offset);
+ //posn=wposn/weight;
+ ps.addVariable(v);
+ posn=(ps.AD - ps.AB) / ps.A2;
+ COLA_ASSERT(__NOTNAN(posn));
+ /*
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f << ", posn=" << posn << endl;
+#endif
+*/
+}
+Block::Block(Variable* const v)
+ : vars(new vector<Variable*>)
+ , posn(0)
+ //, weight(0)
+ //, wposn(0)
+ , deleted(false)
+ , timeStamp(0)
+ , in(NULL)
+ , out(NULL)
+{
+ if(v!=NULL) {
+ v->offset=0;
+ addVariable(v);
+ }
+}
+
+void Block::updateWeightedPosition() {
+ //wposn=0;
+ ps.AB=ps.AD=ps.A2=0;
+ for (Vit v=vars->begin();v!=vars->end();++v) {
+ //wposn += ((*v)->desiredPosition - (*v)->offset) * (*v)->weight;
+ ps.addVariable(*v);
+ }
+ posn=(ps.AD - ps.AB) / ps.A2;
+ COLA_ASSERT(__NOTNAN(posn));
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f << ", posn=" << posn << endl;
+#endif
+}
+Block::~Block(void)
+{
+ delete vars;
+ delete in;
+ delete out;
+}
+void Block::setUpInConstraints() {
+ setUpConstraintHeap(in,true);
+}
+void Block::setUpOutConstraints() {
+ setUpConstraintHeap(out,false);
+}
+void Block::setUpConstraintHeap(Heap* &h,bool in) {
+ delete h;
+ h = new Heap();
+ for (Vit i=vars->begin();i!=vars->end();++i) {
+ Variable *v=*i;
+ vector<Constraint*> *cs=in?&(v->in):&(v->out);
+ 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)) {
+ h->push(c);
+ }
+ }
+ }
+}
+Block* Block::merge(Block* b, Constraint* c) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" merging on: "<<*c<<",c->left->offset="<<c->left->offset<<",c->right->offset="<<c->right->offset<<endl;
+#endif
+ double dist = c->right->offset - c->left->offset - c->gap;
+ Block *l=c->left->block;
+ Block *r=c->right->block;
+ if (l->vars->size() < r->vars->size()) {
+ r->merge(l,c,dist);
+ } else {
+ l->merge(r,c,-dist);
+ }
+ Block* mergeBlock=b->deleted?this:b;
+#ifdef LIBVPSC_LOGGING
+ f<<" merged block="<<*mergeBlock<<endl;
+#endif
+ return mergeBlock;
+}
+/*
+ * Merges b into this block across c. Can be either a
+ * right merge or a left merge
+ * @param b block to merge into this
+ * @param c constraint being merged
+ * @param distance separation required to satisfy c
+ */
+void Block::merge(Block *b, Constraint *c, double dist) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" merging: "<<*b<<"dist="<<dist<<endl;
+#endif
+ c->active=true;
+ //wposn+=b->wposn-dist*b->weight;
+ //weight+=b->weight;
+ for(Vit i=b->vars->begin();i!=b->vars->end();++i) {
+ Variable *v=*i;
+ //v->block=this;
+ //vars->push_back(v);
+ v->offset+=dist;
+ addVariable(v);
+ }
+#ifdef LIBVPSC_LOGGING
+ for(Vit i=vars->begin();i!=vars->end();++i) {
+ Variable *v=*i;
+ f<<" v["<<v->id<<"]: d="<<v->desiredPosition
+ <<" a="<<v->scale<<" o="<<v->offset
+ <<endl;
+ }
+ f<<" AD="<<ps.AD<<" AB="<<ps.AB<<" A2="<<ps.A2<<endl;
+#endif
+ //posn=wposn/weight;
+ //COLA_ASSERT(wposn==ps.AD - ps.AB);
+ posn=(ps.AD - ps.AB) / ps.A2;
+ COLA_ASSERT(__NOTNAN(posn));
+ b->deleted=true;
+}
+
+void Block::mergeIn(Block *b) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" merging constraint heaps... "<<endl;
+#endif
+ // We check the top of the heaps to remove possible internal constraints
+ findMinInConstraint();
+ b->findMinInConstraint();
+ while (!b->in->empty())
+ {
+ in->push(b->in->top());
+ b->in->pop();
+ }
+#ifdef LIBVPSC_LOGGING
+ f<<" merged heap: "<<*in<<endl;
+#endif
+}
+void Block::mergeOut(Block *b) {
+ findMinOutConstraint();
+ b->findMinOutConstraint();
+ while (!b->out->empty())
+ {
+ out->push(b->out->top());
+ b->out->pop();
+ }
+}
+Constraint *Block::findMinInConstraint() {
+ Constraint *v = NULL;
+ vector<Constraint*> outOfDate;
+ while (!in->empty()) {
+ v = in->top();
+ Block *lb=v->left->block;
+ Block *rb=v->right->block;
+ // rb may not be this if called between merge and mergeIn
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" checking constraint ... "<<*v;
+ f<<" timestamps: left="<<lb->timeStamp<<" right="<<rb->timeStamp<<" constraint="<<v->timeStamp<<endl;
+#endif
+ if(lb == rb) {
+ // constraint has been merged into the same block
+#ifdef LIBVPSC_LOGGING
+ if(v->slack()<0) {
+ f<<" violated internal constraint found! "<<*v<<endl;
+ f<<" lb="<<*lb<<endl;
+ f<<" rb="<<*rb<<endl;
+ }
+#endif
+ in->pop();
+#ifdef LIBVPSC_LOGGING
+ f<<" ... skipping internal constraint"<<endl;
+#endif
+ } else if(v->timeStamp < lb->timeStamp) {
+ // block at other end of constraint has been moved since this
+ in->pop();
+ outOfDate.push_back(v);
+#ifdef LIBVPSC_LOGGING
+ f<<" reinserting out of date (reinsert later)"<<endl;
+#endif
+ } else {
+ break;
+ }
+ }
+ for(Cit i=outOfDate.begin();i!=outOfDate.end();++i) {
+ v=*i;
+ v->timeStamp=blockTimeCtr;
+ in->push(v);
+ }
+ if(in->empty()) {
+ v=NULL;
+ } else {
+ v=in->top();
+ }
+ return v;
+}
+Constraint *Block::findMinOutConstraint() {
+ if(out->empty()) return NULL;
+ Constraint *v = out->top();
+ while (v->left->block == v->right->block) {
+ out->pop();
+ if(out->empty()) return NULL;
+ v = out->top();
+ }
+ return v;
+}
+void Block::deleteMinInConstraint() {
+ in->pop();
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<"deleteMinInConstraint... "<<endl;
+ f<<" result: "<<*in<<endl;
+#endif
+}
+void Block::deleteMinOutConstraint() {
+ out->pop();
+}
+inline bool Block::canFollowLeft(Constraint const* c, Variable const* last) const {
+ return c->left->block==this && c->active && last!=c->left;
+}
+inline bool Block::canFollowRight(Constraint const* c, Variable const* last) const {
+ return c->right->block==this && c->active && last!=c->right;
+}
+
+// computes the derivative of v and the lagrange multipliers
+// of v's out constraints (as the recursive sum of those below.
+// Does not backtrack over u.
+// also records the constraint with minimum lagrange multiplier
+// in min_lm
+double Block::compute_dfdv(Variable* const v, Variable* const u,
+ Constraint *&min_lm) {
+ double dfdv=v->dfdv();
+ for(Cit it=v->out.begin();it!=v->out.end();++it) {
+ Constraint *c=*it;
+ if(canFollowRight(c,u)) {
+ c->lm=compute_dfdv(c->right,v,min_lm);
+ dfdv+=c->lm*c->left->scale;
+ if(!c->equality&&(min_lm==NULL||c->lm<min_lm->lm)) min_lm=c;
+ }
+ }
+ for(Cit it=v->in.begin();it!=v->in.end();++it) {
+ Constraint *c=*it;
+ if(canFollowLeft(c,u)) {
+ c->lm=-compute_dfdv(c->left,v,min_lm);
+ dfdv-=c->lm*c->right->scale;
+ if(!c->equality&&(min_lm==NULL||c->lm<min_lm->lm)) min_lm=c;
+ }
+ }
+ return dfdv/v->scale;
+}
+double Block::compute_dfdv(Variable* const v, Variable* const u) {
+ double dfdv = v->dfdv();
+ for(Cit it = v->out.begin(); it != v->out.end(); ++it) {
+ Constraint *c = *it;
+ if(canFollowRight(c,u)) {
+ c->lm = compute_dfdv(c->right,v);
+ dfdv += c->lm * c->left->scale;
+ }
+ }
+ for(Cit it=v->in.begin();it!=v->in.end();++it) {
+ Constraint *c = *it;
+ if(canFollowLeft(c,u)) {
+ c->lm = - compute_dfdv(c->left,v);
+ dfdv -= c->lm * c->right->scale;
+ }
+ }
+ return dfdv/v->scale;
+}
+
+// The top level v and r are variables between which we want to find the
+// 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
+// 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,
+ Constraint* &m,
+ bool desperation=false
+ )
+{
+ for(Cit it(v->in.begin());it!=v->in.end();++it) {
+ Constraint *c=*it;
+ if(canFollowLeft(c,u)) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" left split path: "<<*c<<endl;
+#endif
+ if(c->left==r) {
+ if(desperation&&!c->equality) m=c;
+ return true;
+ } else {
+ if(split_path(r,c->left,v,m)) {
+ if(desperation && !c->equality && (!m||c->lm<m->lm)) {
+ m=c;
+ }
+ return true;
+ }
+ }
+ }
+ }
+ for(Cit it(v->out.begin());it!=v->out.end();++it) {
+ Constraint *c=*it;
+ if(canFollowRight(c,u)) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" right split path: "<<*c<<endl;
+#endif
+ if(c->right==r) {
+ if(!c->equality) m=c;
+ return true;
+ } else {
+ if(split_path(r,c->right,v,m)) {
+ if(!c->equality && (!m||c->lm<m->lm))
+ m=c;
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
+/*
+Block::Pair Block::compute_dfdv_between(
+ 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(c->left==r) {
+ r=NULL;
+ 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)
+ 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(c->right==r) {
+ 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
+ : p.second;
+ }
+ }
+ return Pair(dfdv,m);
+}
+*/
+
+// resets LMs for all active constraints to 0 by
+// traversing active constraint tree starting from v,
+// not back tracking over u
+void Block::reset_active_lm(Variable* const v, Variable* const u) {
+ for(Cit it=v->out.begin();it!=v->out.end();++it) {
+ Constraint *c=*it;
+ if(canFollowRight(c,u)) {
+ c->lm=0;
+ reset_active_lm(c->right,v);
+ }
+ }
+ for(Cit it=v->in.begin();it!=v->in.end();++it) {
+ Constraint *c=*it;
+ if(canFollowLeft(c,u)) {
+ c->lm=0;
+ reset_active_lm(c->left,v);
+ }
+ }
+}
+void Block::list_active(Variable* const v, Variable* const u) {
+ for(Cit it=v->out.begin();it!=v->out.end();++it) {
+ Constraint *c=*it;
+ if(canFollowRight(c,u)) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" "<<*c<<endl;
+#endif
+ list_active(c->right,v);
+ }
+ }
+ for(Cit it=v->in.begin();it!=v->in.end();++it) {
+ Constraint *c=*it;
+ if(canFollowLeft(c,u)) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" "<<*c<<endl;
+#endif
+ list_active(c->left,v);
+ }
+ }
+}
+/*
+ * finds the constraint with the minimum lagrange multiplier, that is, the constraint
+ * that most wants to split
+ */
+Constraint *Block::findMinLM() {
+ Constraint *min_lm=NULL;
+ reset_active_lm(vars->front(),NULL);
+ compute_dfdv(vars->front(),NULL,min_lm);
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" langrangians: "<<endl;
+ list_active(vars->front(),NULL);
+#endif
+ return min_lm;
+}
+Constraint *Block::findMinLMBetween(Variable* const lv, Variable* const rv) {
+ reset_active_lm(vars->front(),NULL);
+ compute_dfdv(vars->front(),NULL);
+ Constraint *min_lm=NULL;
+ split_path(rv,lv,NULL,min_lm);
+#if 0
+ if(min_lm==NULL) {
+ split_path(rv,lv,NULL,min_lm,true);
+ }
+#else
+ if(min_lm==NULL) {
+ fprintf(stderr,"Couldn't find split point!\n");
+ UnsatisfiableException e;
+ getActivePathBetween(e.path,lv,rv,NULL);
+ throw e;
+ }
+ COLA_ASSERT(min_lm!=NULL);
+#endif
+ return min_lm;
+}
+
+// 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);
+ for (Cit c=v->in.begin();c!=v->in.end();++c) {
+ if (canFollowLeft(*c,u))
+ populateSplitBlock(b, (*c)->left, v);
+ }
+ for (Cit c=v->out.begin();c!=v->out.end();++c) {
+ if (canFollowRight(*c,u))
+ populateSplitBlock(b, (*c)->right, v);
+ }
+}
+/*
+ * Returns the active path between variables u and v... not back tracking over w
+ */
+bool Block::getActivePathBetween(Constraints& path, Variable const* u,
+ Variable const* v, Variable const *w) const {
+ if(u==v) return true;
+ for (Cit_const c=u->in.begin();c!=u->in.end();++c) {
+ if (canFollowLeft(*c,w)) {
+ if(getActivePathBetween(path, (*c)->left, v, u)) {
+ path.push_back(*c);
+ return true;
+ }
+ }
+ }
+ for (Cit_const c=u->out.begin();c!=u->out.end();++c) {
+ if (canFollowRight(*c,w)) {
+ if(getActivePathBetween(path, (*c)->right, v, u)) {
+ path.push_back(*c);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+// Search active constraint tree from u to see if there is a directed path to v.
+// Returns true if path is found with all constraints in path having their visited flag
+// set true.
+bool Block::isActiveDirectedPathBetween(Variable const* u, Variable const* v) const {
+ if(u==v) return true;
+ for (Cit_const c=u->out.begin();c!=u->out.end();++c) {
+ if(canFollowRight(*c,NULL)) {
+ if(isActiveDirectedPathBetween((*c)->right,v)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+bool Block::getActiveDirectedPathBetween(
+ Constraints& path, Variable const* u, Variable const* v) const {
+ if(u==v) return true;
+ for (Cit_const c=u->out.begin();c!=u->out.end();++c) {
+ if(canFollowRight(*c,NULL)) {
+ if(getActiveDirectedPathBetween(path,(*c)->right,v)) {
+ path.push_back(*c);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+/*
+ * Block needs to be split because of a violated constraint between vl and vr.
+ * We need to search the active constraint tree between l and r and find the constraint
+ * with min lagrangrian multiplier and split at that point.
+ * Returns the split constraint
+ */
+Constraint* Block::splitBetween(Variable* const vl, Variable* const vr,
+ Block* &lb, Block* &rb) {
+#ifdef LIBVPSC_LOGGING
+ ofstream f(LOGFILE,ios::app);
+ f<<" need to split between: "<<*vl<<" and "<<*vr<<endl;
+#endif
+ Constraint *c=findMinLMBetween(vl, vr);
+#ifdef LIBVPSC_LOGGING
+ f<<" going to split on: "<<*c<<endl;
+#endif
+ if(c!=NULL) {
+ split(lb,rb,c);
+ deleted = true;
+ }
+ return c;
+}
+
+/*
+ * Creates two new blocks, l and r, and splits this block across constraint c,
+ * placing the left subtree of constraints (and associated variables) into l
+ * and the right into r.
+ */
+void Block::split(Block* &l, Block* &r, Constraint* c) {
+ c->active=false;
+ l=new Block();
+ populateSplitBlock(l,c->left,c->right);
+ //COLA_ASSERT(l->weight>0);
+ r=new Block();
+ populateSplitBlock(r,c->right,c->left);
+ //COLA_ASSERT(r->weight>0);
+}
+
+/*
+ * Computes the cost (squared euclidean distance from desired positions) of the
+ * current positions for variables in this block
+ */
+double Block::cost() {
+ double c = 0;
+ for (Vit v=vars->begin();v!=vars->end();++v) {
+ double diff = (*v)->position() - (*v)->desiredPosition;
+ c += (*v)->weight * diff * diff;
+ }
+ return c;
+}
+ostream& operator <<(ostream &os, const Block& b)
+{
+ os<<"Block(posn="<<b.posn<<"):";
+ for(Block::Vit v=b.vars->begin();v!=b.vars->end();++v) {
+ os<<" "<<**v;
+ }
+ if(b.deleted) {
+ os<<" Deleted!";
+ }
+ return os;
+}
+
+Constraint::Constraint(Variable *left, Variable *right, double gap, bool equality)
+: left(left),
+ right(right),
+ gap(gap),
+ timeStamp(0),
+ active(false),
+ equality(equality),
+ unsatisfiable(false)
+{
+ // In hindsight I think it's probably better to build the constraint DAG
+ // (by creating variable in/out lists) when needed, rather than in advance
+ //left->out.push_back(this);
+ //right->in.push_back(this);
+}
+Constraint::~Constraint() {
+ // 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;
+ //for(i=left->out.begin(); i!=left->out.end(); i++) {
+ //if(*i==this) break;
+ //}
+ //left->out.erase(i);
+ //for(i=right->in.begin(); i!=right->in.end(); i++) {
+ //if(*i==this) break;
+ //}
+ //right->in.erase(i);
+}
+double Constraint::slack() const {
+ return unsatisfiable ? DBL_MAX
+ : right->scale * right->position()
+ - gap - left->scale * left->position();
+}
+std::ostream& operator <<(std::ostream &os, const Constraint &c)
+{
+ if(&c==NULL) {
+ os<<"NULL";
+ } else {
+ const char *type=c.equality?"=":"<=";
+ std::ostringstream lscale, rscale;
+ if(c.left->scale!=1) {
+ lscale << c.left->scale << "*";
+ }
+ if(c.right->scale!=1) {
+ rscale << c.right->scale << "*";
+ }
+ os<<lscale.str()<<*c.left<<"+"<<c.gap<<type<<rscale.str()<<*c.right;
+ if(c.left->block&&c.right->block)
+ os<<"("<<c.slack()<<")"<<(c.active?"-active":"")
+ <<"(lm="<<c.lm<<")";
+ else
+ os<<"(vars have no position)";
+ }
+ return os;
+}
+
+bool CompareConstraints::operator() (
+ Constraint *const &l, Constraint *const &r
+) const {
+ double const sl =
+ l->left->block->timeStamp > l->timeStamp
+ ||l->left->block==l->right->block
+ ?-DBL_MAX:l->slack();
+ double const sr =
+ r->left->block->timeStamp > r->timeStamp
+ ||r->left->block==r->right->block
+ ?-DBL_MAX:r->slack();
+ if(sl==sr) {
+ // arbitrary choice based on id
+ if(l->left->id==r->left->id) {
+ if(l->right->id<r->right->id) return true;
+ return false;
+ }
+ if(l->left->id<r->left->id) return true;
+ return false;
+ }
+ return sl > sr;
+}
+
+std::ostream& operator <<(std::ostream &os, const Variable &v) {
+ if(v.block)
+ os << "(" << v.id << "=" << v.position() << ")";
+ else
+ os << "(" << v.id << "=" << v.desiredPosition << ")";
+ return os;
+}
+
+}
diff --git a/src/libavoid/vpsc.h b/src/libavoid/vpsc.h
new file mode 100644
index 000000000..4d6d8ce61
--- /dev/null
+++ b/src/libavoid/vpsc.h
@@ -0,0 +1,255 @@
+/*
+ * vim: ts=4 sw=4 et tw=0 wm=0
+ *
+ * libavoid - Fast, Incremental, Object-avoiding Line Router
+ *
+ * Copyright (C) 2005-2009 Monash University
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 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
+ * 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.
+ *
+ * Author(s): Tim Dwyer <Tim.Dwyer@csse.monash.edu.au>
+ *
+ * --------------
+ *
+ * This file contains a slightly modified version of Solver() from libvpsc:
+ * A solver for the problem of Variable Placement with Separation Constraints.
+ * It has the following changes from the Adaptagrams VPSC version:
+ * - The required VPSC code has been consolidated into a single file.
+ * - Unnecessary code (like Solver) has been removed.
+ * - The PairingHeap code has been replaced by a STL priority_queue.
+ *
+ * Modifications: Michael Wybrow <mjwybrow@users.sourceforge.net>
+ *
+*/
+
+#ifndef LIBAVOID_VPSC_H
+#define LIBAVOID_VPSC_H
+
+#include <vector>
+#include <list>
+#include <set>
+#include <queue>
+
+namespace Avoid {
+
+class Variable;
+class Constraint;
+typedef std::vector<Variable*> Variables;
+typedef std::vector<Constraint*> Constraints;
+class CompareConstraints {
+public:
+ bool operator() (Constraint *const &l, Constraint *const &r) const;
+};
+struct PositionStats {
+ PositionStats() : scale(0), AB(0), AD(0), A2(0) {}
+ void addVariable(Variable* const v);
+ double scale;
+ double AB;
+ double AD;
+ double A2;
+};
+
+typedef std::priority_queue<Constraint*,std::vector<Constraint*>,
+ CompareConstraints> Heap;
+
+class Block
+{
+ typedef Variables::iterator Vit;
+ typedef Constraints::iterator Cit;
+ typedef Constraints::const_iterator Cit_const;
+
+ friend std::ostream& operator <<(std::ostream &os,const Block &b);
+public:
+ Variables *vars;
+ double posn;
+ //double weight;
+ //double wposn;
+ PositionStats ps;
+ Block(Variable* const v=NULL);
+ ~Block(void);
+ Constraint* findMinLM();
+ Constraint* findMinLMBetween(Variable* const lv, Variable* const rv);
+ Constraint* findMinInConstraint();
+ Constraint* findMinOutConstraint();
+ void deleteMinInConstraint();
+ void deleteMinOutConstraint();
+ void updateWeightedPosition();
+ void merge(Block *b, Constraint *c, double dist);
+ Block* merge(Block *b, Constraint *c);
+ void mergeIn(Block *b);
+ void mergeOut(Block *b);
+ void split(Block *&l, Block *&r, Constraint *c);
+ Constraint* splitBetween(Variable* vl, Variable* vr, Block* &lb, Block* &rb);
+ void setUpInConstraints();
+ void setUpOutConstraints();
+ double cost();
+ bool deleted;
+ long timeStamp;
+ Heap *in;
+ Heap *out;
+ bool getActivePathBetween(Constraints& path, Variable const* u,
+ Variable const* v, Variable const *w) const;
+ bool isActiveDirectedPathBetween(
+ Variable const* u, Variable const* v) const;
+ bool getActiveDirectedPathBetween(Constraints& path, Variable const * u, Variable const * v) const;
+private:
+ typedef enum {NONE, LEFT, RIGHT} Direction;
+ typedef std::pair<double, Constraint*> Pair;
+ void reset_active_lm(Variable* const v, Variable* const u);
+ void list_active(Variable* const v, Variable* const u);
+ double compute_dfdv(Variable* const v, Variable* const u);
+ double compute_dfdv(Variable* const v, Variable* const u, Constraint *&min_lm);
+ bool split_path(Variable*, Variable* const, Variable* const,
+ Constraint* &min_lm, bool desperation);
+ bool canFollowLeft(Constraint const* c, Variable const* last) const;
+ bool canFollowRight(Constraint const* c, Variable const* last) const;
+ void populateSplitBlock(Block *b, Variable* v, Variable const* u);
+ void addVariable(Variable* v);
+ void setUpConstraintHeap(Heap* &h,bool in);
+};
+
+
+class Constraint;
+typedef std::vector<Constraint*> Constraints;
+class Variable
+{
+ friend std::ostream& operator <<(std::ostream &os, const Variable &v);
+ friend class Block;
+ friend class Constraint;
+ friend class IncSolver;
+public:
+ int id; // useful in log files
+ double desiredPosition;
+ double finalPosition;
+ double weight; // how much the variable wants to
+ // be at it's desired position
+ double scale; // translates variable to another space
+ double offset;
+ Block *block;
+ bool visited;
+ bool fixedDesiredPosition;
+ Constraints in;
+ Constraints out;
+ char *toString();
+ inline Variable(const int id, const double desiredPos=-1.0,
+ const double weight=1.0, const double scale=1.0)
+ : id(id)
+ , desiredPosition(desiredPos)
+ , weight(weight)
+ , scale(scale)
+ , offset(0)
+ , block(NULL)
+ , visited(false)
+ , fixedDesiredPosition(false)
+ {
+ }
+ double dfdv() const {
+ return 2. * weight * ( position() - desiredPosition );
+ }
+private:
+ double position() const {
+ return (block->ps.scale*block->posn+offset)/scale;
+ }
+};
+
+
+class Constraint
+{
+ friend std::ostream& operator <<(std::ostream &os,const Constraint &c);
+public:
+ Variable *left;
+ Variable *right;
+ double gap;
+ double lm;
+ Constraint(Variable *left, Variable *right, double gap, bool equality=false);
+ ~Constraint();
+ double slack() const;
+ long timeStamp;
+ bool active;
+ const bool equality;
+ bool unsatisfiable;
+};
+/*
+ * A block structure defined over the variables such that each block contains
+ * 1 or more variables, with the invariant that all constraints inside a block
+ * are satisfied by keeping the variables fixed relative to one another
+ */
+class Blocks : public std::set<Block*>
+{
+public:
+ Blocks(Variables const &vs);
+ ~Blocks(void);
+ void mergeLeft(Block *r);
+ void mergeRight(Block *l);
+ void split(Block *b, Block *&l, Block *&r, Constraint *c);
+ std::list<Variable*> *totalOrder();
+ void cleanup();
+ double cost();
+private:
+ void dfsVisit(Variable *v, std::list<Variable*> *order);
+ void removeBlock(Block *doomed);
+ Variables const &vs;
+ int nvs;
+};
+
+extern long blockTimeCtr;
+
+struct UnsatisfiableException {
+ Constraints path;
+};
+struct UnsatisfiedConstraint {
+ UnsatisfiedConstraint(Constraint& c):c(c) {}
+ Constraint& c;
+};
+/*
+ * Variable Placement with Separation Constraints problem instance
+ */
+class IncSolver {
+public:
+ unsigned splitCnt;
+ bool satisfy();
+ bool solve();
+ void moveBlocks();
+ void splitBlocks();
+ IncSolver(Variables const &vs, Constraints const &cs);
+
+ ~IncSolver();
+ Variables const & getVariables() { return vs; }
+protected:
+ Blocks *bs;
+ unsigned m;
+ Constraints const &cs;
+ unsigned n;
+ Variables const &vs;
+ void printBlocks();
+ void copyResult();
+private:
+ bool constraintGraphIsCyclic(const unsigned n, Variable* const vs[]);
+ bool blockGraphIsCyclic();
+ Constraints inactive;
+ Constraints violated;
+ Constraint* mostViolated(Constraints &l);
+};
+
+struct delete_object
+{
+ template <typename T>
+ void operator()(T *ptr){ delete ptr;}
+};
+
+
+}
+
+#endif // AVOID_VPSC_H
diff --git a/src/libcroco/cr-cascade.c b/src/libcroco/cr-cascade.c
index f389fc746..7fef86c4a 100644
--- a/src/libcroco/cr-cascade.c
+++ b/src/libcroco/cr-cascade.c
@@ -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;
}
diff --git a/src/libnr/Makefile_insert b/src/libnr/Makefile_insert
index 5cd2717be..4b19028f9 100644
--- a/src/libnr/Makefile_insert
+++ b/src/libnr/Makefile_insert
@@ -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
diff --git a/src/libnr/nr-compose-transform.cpp b/src/libnr/nr-compose-transform.cpp
index afc8fd987..6e03faf2f 100644
--- a/src/libnr/nr-compose-transform.cpp
+++ b/src/libnr/nr-compose-transform.cpp
@@ -16,30 +16,25 @@
#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);
}
}
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
index e30056af2..000000000
--- a/src/libnr/nr_mmx_R8G8B8A8_P_R8G8B8A8_P_R8G8B8A8_N_TRANSFORM.S
+++ /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"
diff --git a/src/libnrtype/Layout-TNG-Input.cpp b/src/libnrtype/Layout-TNG-Input.cpp
index 2ee0051a4..33371ab10 100644
--- a/src/libnrtype/Layout-TNG-Input.cpp
+++ b/src/libnrtype/Layout-TNG-Input.cpp
@@ -16,8 +16,11 @@
#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
diff --git a/src/libnrtype/Layout-TNG-OutIter.cpp b/src/libnrtype/Layout-TNG-OutIter.cpp
index 0fc061bfc..f4e8e4031 100644
--- a/src/libnrtype/Layout-TNG-OutIter.cpp
+++ b/src/libnrtype/Layout-TNG-OutIter.cpp
@@ -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
diff --git a/src/libnrtype/Layout-TNG.h b/src/libnrtype/Layout-TNG.h
index 19680b140..05b5103fc 100644
--- a/src/libnrtype/Layout-TNG.h
+++ b/src/libnrtype/Layout-TNG.h
@@ -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;
diff --git a/src/libvpsc/pairingheap/.dirstamp b/src/libvpsc/pairingheap/.dirstamp
deleted file mode 100644
index e69de29bb..000000000
--- a/src/libvpsc/pairingheap/.dirstamp
+++ /dev/null
diff --git a/src/live_effects/lpe-extrude.cpp b/src/live_effects/lpe-extrude.cpp
index 93ab60fc5..af933eae6 100644
--- a/src/live_effects/lpe-extrude.cpp
+++ b/src/live_effects/lpe-extrude.cpp
@@ -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());
diff --git a/src/live_effects/lpe-recursiveskeleton.cpp b/src/live_effects/lpe-recursiveskeleton.cpp
index 3cbac5829..50a3bfb6c 100644
--- a/src/live_effects/lpe-recursiveskeleton.cpp
+++ b/src/live_effects/lpe-recursiveskeleton.cpp
@@ -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;
}
diff --git a/src/live_effects/lpe-rough-hatches.cpp b/src/live_effects/lpe-rough-hatches.cpp
index bcfd0f373..228857ebf 100644
--- a/src/live_effects/lpe-rough-hatches.cpp
+++ b/src/live_effects/lpe-rough-hatches.cpp
@@ -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());
}
}
diff --git a/src/live_effects/lpe-ruler.cpp b/src/live_effects/lpe-ruler.cpp
index 80970fd8a..35c9ea695 100644
--- a/src/live_effects/lpe-ruler.cpp
+++ b/src/live_effects/lpe-ruler.cpp
@@ -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),
diff --git a/src/live_effects/parameter/parameter.cpp b/src/live_effects/parameter/parameter.cpp
index a8ea15744..57d583ba6 100644
--- a/src/live_effects/parameter/parameter.cpp
+++ b/src/live_effects/parameter/parameter.cpp
@@ -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)
{
}
diff --git a/src/main.cpp b/src/main.cpp
index f96d99e11..75e882e99 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -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
index 000000000..5b84dcc66
--- /dev/null
+++ b/src/marker-test.h
@@ -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 :
diff --git a/src/menus-skeleton.h b/src/menus-skeleton.h
index d7a18f211..aeb6500bf 100644
--- a/src/menus-skeleton.h
+++ b/src/menus-skeleton.h
@@ -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"
diff --git a/src/pixmaps/cursor-spray-move.xpm b/src/pixmaps/cursor-spray-move.xpm
new file mode 100644
index 000000000..ad898b3a5
--- /dev/null
+++ b/src/pixmaps/cursor-spray-move.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char const * cursor_spray_move_xpm[] = {
+"32 32 3 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+" ... ",
+" .+. ",
+" .+. ",
+"....+.... ",
+".+++ +++. ",
+"....+.... ",
+" .+. ",
+" .+. ",
+" ... ",
+" ... ... ... ... ",
+" ..+. ..+. ..+. ..+. ",
+" .+++ .+++ .+++ .+++ ",
+" ..+. .+++ .+++ ..+ ",
+" .... .+++ .+++ .... ",
+" ..+. ..+ ..+ ..+. ",
+" .+++ ..+. ..+. .+++ ",
+" ..+ .+++ .+++ ..+ ",
+" .... ..+ ..+ .... ",
+" ..+. .... .... ..+. ",
+" .+++ ..+. ..+. .+++ ",
+" ..+ .+++ .+++ ..+ ",
+" ..+ ..+ ",
+" ... ... ",
+" ..+. ..+. ",
+" .+++ .+++ ",
+" ..+ ..+ ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/pixmaps/cursor-spray.xpm b/src/pixmaps/cursor-spray.xpm
new file mode 100644
index 000000000..9ccefee4f
--- /dev/null
+++ b/src/pixmaps/cursor-spray.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char const * cursor_spray_xpm[] = {
+"32 32 3 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+" ... ",
+" .+. ",
+" .+. ",
+"....+.... ",
+".+++ +++. ",
+"....+.... ",
+" .+. ",
+" .+. ",
+" ... .+. +. ",
+" .+.+.+.+. ",
+" .+...+...+. ",
+" +...+.....+. ",
+" . . . .+.+.......+. ",
+" + + + .+.........+. ",
+" . . . .+...........+. ",
+" + + .+.............+. ",
+" . . . .+.............+. ",
+" + + + .+.............+. ",
+" . . .+.............+. ",
+" .+.............+. ",
+" .+.............+. ",
+" .+...........+. ",
+" .+.........+. ",
+" .+.......+. ",
+" .+.....+. ",
+" .+...+. ",
+" .+.+. ",
+" .+. ",
+" . ",
+" ",
+" ",
+" "};
diff --git a/src/preferences-skeleton.h b/src/preferences-skeleton.h
index 6185ff729..4e5291baf 100644
--- a/src/preferences-skeleton.h
+++ b/src/preferences-skeleton.h
@@ -111,9 +111,11 @@ static char const preferences_skeleton[] =
" </eventcontext>\n"
" <eventcontext id=\"text\" usecurrent=\"0\" gradientdrag=\"1\"\n"
" font_sample=\"AaBbCcIiPpQq12369$\342\202\254\302\242?.;/()\"\n"
+" show_sample_in_list=\"1\"\n"
" style=\"fill:black;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;font-style:normal;font-weight:normal;font-size:40px;\" selcue=\"1\"/>\n"
" <eventcontext id=\"nodes\" selcue=\"1\" gradientdrag=\"1\" highlight_color=\"4278190335\" pathflash_enabled=\"1\" pathflash_unselected=\"0\" pathflash_timeout=\"500\" show_handles=\"1\" show_helperpath=\"0\" sculpting_profile=\"1\" />\n"
" <eventcontext id=\"tweak\" selcue=\"0\" gradientdrag=\"0\" show_handles=\"0\" width=\"0.2\" force=\"0.2\" fidelity=\"0.5\" usepressure=\"1\" style=\"fill:red;stroke:none;\" usecurrent=\"0\"/>\n"
+" <eventcontext id=\"spray\" selcue=\"0\" gradientdrag=\"0\" show_handles=\"0\" width=\"0.2\" force=\"0.2\" fidelity=\"0.5\" usepressure=\"1\" style=\"fill:red;stroke:none;\" usecurrent=\"0\"/>\n"
" <eventcontext id=\"gradient\" selcue=\"1\"/>\n"
" <eventcontext id=\"zoom\" selcue=\"1\" gradientdrag=\"0\"/>\n"
" <eventcontext id=\"dropper\" selcue=\"1\" gradientdrag=\"1\" pick=\"1\" setalpha=\"1\"/>\n"
@@ -338,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\">"
diff --git a/src/print.cpp b/src/print.cpp
index 044dffe34..ed9b8d19c 100644
--- a/src/print.cpp
+++ b/src/print.cpp
@@ -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
diff --git a/src/selcue.cpp b/src/selcue.cpp
index 714daaa7e..8756524dd 100644
--- a/src/selcue.cpp
+++ b/src/selcue.cpp
@@ -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);
+ }
}
}
diff --git a/src/sp-conn-end-pair.cpp b/src/sp-conn-end-pair.cpp
index 4dc0230ff..98b2aec26 100644
--- a/src/sp-conn-end-pair.cpp
+++ b/src/sp-conn-end-pair.cpp
@@ -12,6 +12,8 @@
#include <cstring>
#include <string>
+#include <iostream>
+#include <glibmm/stringutils.h>
#include "attributes.h"
#include "sp-conn-end.h"
@@ -26,10 +28,10 @@
SPConnEndPair::SPConnEndPair(SPPath *const owner)
- : _invalid_path_connection()
- , _path(owner)
+ : _path(owner)
, _connRef(NULL)
, _connType(SP_CONNECTOR_NOAVOID)
+ , _connCurvature(0.0)
, _transformed_connection()
{
for (unsigned handle_ix = 0; handle_ix <= 1; ++handle_ix) {
@@ -47,14 +49,6 @@ SPConnEndPair::~SPConnEndPair()
delete this->_connEnd[handle_ix];
this->_connEnd[handle_ix] = NULL;
}
- if (_connRef) {
- _connRef->removeFromGraph();
- delete _connRef;
- _connRef = NULL;
- }
-
- _invalid_path_connection.disconnect();
- _transformed_connection.disconnect();
}
void
@@ -68,6 +62,18 @@ SPConnEndPair::release()
this->_connEnd[handle_ix]->href = NULL;
this->_connEnd[handle_ix]->ref.detach();
}
+
+ // If the document is being destroyed then the router instance
+ // and the ConnRefs will have been destroyed with it.
+ const bool routerInstanceExists = (_path->document->router != NULL);
+
+ if (_connRef && routerInstanceExists) {
+ _connRef->removeFromGraph();
+ delete _connRef;
+ }
+ _connRef = NULL;
+
+ _transformed_connection.disconnect();
}
void
@@ -76,16 +82,17 @@ sp_conn_end_pair_build(SPObject *object)
sp_object_read_attr(object, "inkscape:connector-type");
sp_object_read_attr(object, "inkscape:connection-start");
sp_object_read_attr(object, "inkscape:connection-end");
+ sp_object_read_attr(object, "inkscape:connector-curvature");
}
static void
-avoid_conn_move(Geom::Matrix const */*mp*/, SPItem *moved_item)
+avoid_conn_transformed(Geom::Matrix const */*mp*/, SPItem *moved_item)
{
- // Reroute connector
SPPath *path = SP_PATH(moved_item);
- path->connEndPair.makePathInvalid();
- sp_conn_adjust_invalid_path(path);
+ if (path->connEndPair.isAutoRoutingConn()) {
+ path->connEndPair.tellLibavoidNewEndpoints();
+ }
}
@@ -93,16 +100,40 @@ void
SPConnEndPair::setAttr(unsigned const key, gchar const *const value)
{
if (key == SP_ATTR_CONNECTOR_TYPE) {
- if (value && (strcmp(value, "polyline") == 0)) {
- _connType = SP_CONNECTOR_POLYLINE;
-
- Avoid::Router *router = _path->document->router;
- GQuark itemID = g_quark_from_string(SP_OBJECT(_path)->id);
- _connRef = new Avoid::ConnRef(router, itemID);
- _invalid_path_connection = connectInvalidPath(
- sigc::ptr_fun(&sp_conn_adjust_invalid_path));
- _transformed_connection = _path->connectTransformed(
- sigc::ptr_fun(&avoid_conn_move));
+ if (value && (strcmp(value, "polyline") == 0 || strcmp(value, "orthogonal") == 0)) {
+ int newconnType = strcmp(value, "polyline") ? SP_CONNECTOR_ORTHOGONAL : SP_CONNECTOR_POLYLINE;
+
+ if (!_connRef)
+ {
+ _connType = newconnType;
+ Avoid::Router *router = _path->document->router;
+ GQuark itemID = g_quark_from_string(SP_OBJECT(_path)->id);
+ _connRef = new Avoid::ConnRef(router, itemID);
+ switch (newconnType)
+ {
+ case SP_CONNECTOR_POLYLINE:
+ _connRef->setRoutingType(Avoid::ConnType_PolyLine);
+ break;
+ case SP_CONNECTOR_ORTHOGONAL:
+ _connRef->setRoutingType(Avoid::ConnType_Orthogonal);
+ }
+ _transformed_connection = _path->connectTransformed(
+ sigc::ptr_fun(&avoid_conn_transformed));
+ }
+ else
+ if (newconnType != _connType)
+ {
+ _connType = newconnType;
+ switch (newconnType)
+ {
+ case SP_CONNECTOR_POLYLINE:
+ _connRef->setRoutingType(Avoid::ConnType_PolyLine);
+ break;
+ case SP_CONNECTOR_ORTHOGONAL:
+ _connRef->setRoutingType(Avoid::ConnType_Orthogonal);
+ }
+ sp_conn_reroute_path(_path);
+ }
}
else {
_connType = SP_CONNECTOR_NOAVOID;
@@ -111,17 +142,25 @@ SPConnEndPair::setAttr(unsigned const key, gchar const *const value)
_connRef->removeFromGraph();
delete _connRef;
_connRef = NULL;
- _invalid_path_connection.disconnect();
_transformed_connection.disconnect();
}
}
return;
-
+ }
+ else if (key == SP_ATTR_CONNECTOR_CURVATURE) {
+ if (value) {
+ _connCurvature = g_strtod(value, NULL);
+ if (_connRef && _connRef->isInitialised()) {
+ // Redraw the connector, but only if it has been initialised.
+ sp_conn_reroute_path(_path);
+ }
+ }
+ return;
}
unsigned const handle_ix = key - SP_ATTR_CONNECTION_START;
g_assert( handle_ix <= 1 );
- this->_connEnd[handle_ix]->setAttacherHref(value);
+ this->_connEnd[handle_ix]->setAttacherHref(value, _path);
}
void
@@ -131,11 +170,18 @@ SPConnEndPair::writeRepr(Inkscape::XML::Node *const repr) const
if (this->_connEnd[handle_ix]->ref.getURI()) {
char const * const attr_strs[] = {"inkscape:connection-start",
"inkscape:connection-end"};
- gchar *uri_string = this->_connEnd[handle_ix]->ref.getURI()->toString();
- repr->setAttribute(attr_strs[handle_ix], uri_string);
- g_free(uri_string);
+ std::ostringstream ostr;
+ ostr<<this->_connEnd[handle_ix]->ref.getURI()->toString()<<"_"<<
+ (this->_connEnd[handle_ix]->type == ConnPointDefault ? "d":"u") <<
+ "_" << this->_connEnd[handle_ix]->id;
+
+
+ repr->setAttribute(attr_strs[handle_ix], ostr.str().c_str());
}
}
+ repr->setAttribute("inkscape:connector-curvature", Glib::Ascii::dtostr(_connCurvature).c_str());
+ if (_connType == SP_CONNECTOR_POLYLINE || _connType == SP_CONNECTOR_ORTHOGONAL)
+ repr->setAttribute("inkscape:connector-type", _connType == SP_CONNECTOR_POLYLINE ? "polyline" : "orthogonal" );
}
void
@@ -161,19 +207,14 @@ SPConnEndPair::getAttachedItems(SPItem *h2attItem[2]) const {
void
SPConnEndPair::getEndpoints(Geom::Point endPts[]) const {
- SPCurve *curve = _path->curve;
+ SPCurve *curve = _path->original_curve ? _path->original_curve : _path->curve;
SPItem *h2attItem[2];
getAttachedItems(h2attItem);
for (unsigned h = 0; h < 2; ++h) {
if ( h2attItem[h] ) {
- Geom::OptRect bbox = h2attItem[h]->getBounds(sp_item_i2doc_affine(h2attItem[h]));
- if (bbox) {
- endPts[h] = bbox->midpoint();
- } else {
- // FIXME
- endPts[h] = Geom::Point(0, 0);
- }
+ g_assert(h2attItem[h]->avoidRef);
+ endPts[h] = h2attItem[h]->avoidRef->getConnectionPointPos(_connEnd[h]->type, _connEnd[h]->id);
}
else
{
@@ -187,37 +228,40 @@ SPConnEndPair::getEndpoints(Geom::Point endPts[]) const {
}
}
-sigc::connection
-SPConnEndPair::connectInvalidPath(sigc::slot<void, SPPath *> slot)
-{
- return _invalid_path_signal.connect(slot);
+gdouble
+SPConnEndPair::getCurvature(void) const {
+ return _connCurvature;
}
-static void emitPathInvalidationNotification(void *ptr)
+SPConnEnd**
+SPConnEndPair::getConnEnds(void)
{
- // We emit a signal here rather than just calling the reroute function
- // since this allows all the movement action computation to happen,
- // then all connectors (that require it) will be rerouted. Otherwise,
- // one connector could get rerouted several times as a result of
- // dragging a couple of shapes.
+ return _connEnd;
+}
- SPPath *path = SP_PATH(ptr);
- path->connEndPair._invalid_path_signal.emit(path);
+bool
+SPConnEndPair::isOrthogonal(void) const {
+ return _connType == SP_CONNECTOR_ORTHOGONAL;
}
-void
-SPConnEndPair::rerouteFromManipulation(void)
+
+static void redrawConnectorCallback(void *ptr)
{
- _connRef->makePathInvalid();
- sp_conn_adjust_path(_path);
+ SPPath *path = SP_PATH(ptr);
+ if (path->document == NULL) {
+ // This can happen when the document is being destroyed.
+ return;
+ }
+ sp_conn_redraw_path(path);
}
void
-SPConnEndPair::reroute(void)
+SPConnEndPair::rerouteFromManipulation(void)
{
- sp_conn_adjust_path(_path);
+ sp_conn_reroute_path_immediate(_path);
}
+
// Called from sp_path_update to initialise the endpoints.
void
SPConnEndPair::update(void)
@@ -231,8 +275,8 @@ SPConnEndPair::update(void)
Avoid::Point src(endPt[0][Geom::X], endPt[0][Geom::Y]);
Avoid::Point dst(endPt[1][Geom::X], endPt[1][Geom::Y]);
- _connRef->lateSetup(src, dst);
- _connRef->setCallback(&emitPathInvalidationNotification, _path);
+ _connRef->setEndpoints(src, dst);
+ _connRef->setCallback(&redrawConnectorCallback, _path);
}
// Store the ID of the objects attached to the connector.
storeIds();
@@ -243,19 +287,25 @@ SPConnEndPair::update(void)
void SPConnEndPair::storeIds(void)
{
if (_connEnd[0]->href) {
+ gchar ** href_strarray = NULL;
+ href_strarray = g_strsplit(_connEnd[0]->href, "_", 0);
// href begins with a '#' which we don't want.
- const char *startId = _connEnd[0]->href + 1;
+ const char *startId = href_strarray[0] + 1;
GQuark itemId = g_quark_from_string(startId);
_connRef->setEndPointId(Avoid::VertID::src, itemId);
+ g_strfreev(href_strarray);
}
else {
_connRef->setEndPointId(Avoid::VertID::src, 0);
}
if (_connEnd[1]->href) {
+ gchar ** href_strarray = NULL;
+ href_strarray = g_strsplit(_connEnd[1]->href, "_", 0);
// href begins with a '#' which we don't want.
- const char *endId = _connEnd[1]->href + 1;
+ const char *endId = href_strarray[0] + 1;
GQuark itemId = g_quark_from_string(endId);
_connRef->setEndPointId(Avoid::VertID::tar, itemId);
+ g_strfreev(href_strarray);
}
else {
_connRef->setEndPointId(Avoid::VertID::tar, 0);
@@ -278,15 +328,55 @@ SPConnEndPair::makePathInvalid(void)
_connRef->makePathInvalid();
}
+
+// Redraws the curve along the recalculated route
+// Straight or curved
+void recreateCurve(SPCurve *curve, Avoid::ConnRef *connRef, const gdouble curvature)
+{
+ bool straight = curvature<1e-3;
+
+ Avoid::PolyLine route = connRef->displayRoute();
+ if (!straight)
+ route = route.curvedPolyline(curvature);
+ connRef->calcRouteDist();
+
+ curve->reset();
+
+ curve->moveto( Geom::Point(route.ps[0].x, route.ps[0].y) );
+ int pn = route.size();
+ for (int i = 1; i < pn; ++i) {
+ Geom::Point p(route.ps[i].x, route.ps[i].y);
+ if (straight) {
+ curve->lineto( p );
+ }
+ else {
+ switch (route.ts[i]) {
+ case 'M':
+ curve->moveto( p );
+ break;
+ case 'L':
+ curve->lineto( p );
+ break;
+ case 'C':
+ g_assert( i+2<pn );
+ curve->curveto( p, Geom::Point(route.ps[i+1].x, route.ps[i+1].y),
+ Geom::Point(route.ps[i+2].x, route.ps[i+2].y) );
+ i+=2;
+ break;
+ }
+ }
+ }
+}
+
+
void
-SPConnEndPair::reroutePath(void)
+SPConnEndPair::tellLibavoidNewEndpoints(const bool processTransaction)
{
if (!isAutoRoutingConn()) {
// Do nothing
return;
}
-
- SPCurve *curve = _path->curve;
+ makePathInvalid();
Geom::Point endPt[2];
getEndpoints(endPt);
@@ -294,26 +384,34 @@ SPConnEndPair::reroutePath(void)
Avoid::Point src(endPt[0][Geom::X], endPt[0][Geom::Y]);
Avoid::Point dst(endPt[1][Geom::X], endPt[1][Geom::Y]);
- _connRef->updateEndPoint(Avoid::VertID::src, src);
- _connRef->updateEndPoint(Avoid::VertID::tar, dst);
-
- _connRef->generatePath(src, dst);
-
- Avoid::PolyLine route = _connRef->route();
- _connRef->calcRouteDist();
+ _connRef->setEndpoints(src, dst);
+ if (processTransaction)
+ {
+ _connRef->router()->processTransaction();
+ }
+ return;
+}
- curve->reset();
- curve->moveto(endPt[0]);
- for (int i = 1; i < route.pn; ++i) {
- Geom::Point p(route.ps[i].x, route.ps[i].y);
- curve->lineto(p);
+bool
+SPConnEndPair::reroutePathFromLibavoid(void)
+{
+ if (!isAutoRoutingConn()) {
+ // Do nothing
+ return false;
}
+ SPCurve *curve = _path->original_curve ?_path->original_curve : _path->curve;
+
+ recreateCurve( curve, _connRef, _connCurvature );
+
Geom::Matrix doc2item = sp_item_i2doc_affine(SP_ITEM(_path)).inverse();
curve->transform(doc2item);
+
+ return true;
}
+
/*
Local Variables:
mode:c++
diff --git a/src/sp-conn-end-pair.h b/src/sp-conn-end-pair.h
index 9b9e181db..3b011ed17 100644
--- a/src/sp-conn-end-pair.h
+++ b/src/sp-conn-end-pair.h
@@ -28,6 +28,7 @@ class Node;
}
}
+extern void recreateCurve(SPCurve *curve, Avoid::ConnRef *connRef, gdouble curvature);
class SPConnEndPair {
public:
@@ -38,19 +39,16 @@ public:
void writeRepr(Inkscape::XML::Node *const repr) const;
void getAttachedItems(SPItem *[2]) const;
void getEndpoints(Geom::Point endPts[]) const;
- void reroutePath(void);
+ gdouble getCurvature(void) const;
+ SPConnEnd** getConnEnds(void);
+ bool isOrthogonal(void) const;
+ friend void recreateCurve(SPCurve *curve, Avoid::ConnRef *connRef, gdouble curvature);
+ void tellLibavoidNewEndpoints(const bool processTransaction = false);
+ bool reroutePathFromLibavoid(void);
void makePathInvalid(void);
void update(void);
bool isAutoRoutingConn(void);
void rerouteFromManipulation(void);
- void reroute(void);
- sigc::connection connectInvalidPath(sigc::slot<void, SPPath *> slot);
-
- // A signal emited by a call back from libavoid. Used to let
- // connectors know when they need to reroute themselves.
- sigc::signal<void, SPPath *> _invalid_path_signal;
- // A sigc connection to listen for connector path invalidation.
- sigc::connection _invalid_path_connection;
private:
SPConnEnd *_connEnd[2];
@@ -61,6 +59,7 @@ private:
Avoid::ConnRef *_connRef;
int _connType;
+ gdouble _connCurvature;
// A sigc connection for transformed signal.
sigc::connection _transformed_connection;
@@ -74,8 +73,9 @@ void sp_conn_end_pair_build(SPObject *object);
// _connType options:
enum {
- SP_CONNECTOR_NOAVOID, // Basic connector - a straight line.
- SP_CONNECTOR_POLYLINE // Object avoiding polyline.
+ SP_CONNECTOR_NOAVOID, // Basic connector - a straight line.
+ SP_CONNECTOR_POLYLINE, // Object avoiding polyline.
+ SP_CONNECTOR_ORTHOGONAL // Object avoiding orthogonal polyline (only horizontal and verical segments).
};
diff --git a/src/sp-conn-end.cpp b/src/sp-conn-end.cpp
index 0b420a98e..2287a182d 100644
--- a/src/sp-conn-end.cpp
+++ b/src/sp-conn-end.cpp
@@ -16,7 +16,7 @@
#include "2geom/path-intersection.h"
-static void change_endpts(SPCurve *const curve, Geom::Point const h2endPt[2]);
+static void change_endpts(SPCurve *const curve, double const endPos[2]);
SPConnEnd::SPConnEnd(SPObject *const owner) :
ref(owner),
@@ -39,45 +39,37 @@ get_nearest_common_ancestor(SPObject const *const obj, SPItem const *const objs[
}
-static bool try_get_intersect_point_with_item_recursive(SPCurve *conn_curve, SPItem& item,
- const Geom::Matrix& item_transform, const bool at_start, double* intersect_pos,
- unsigned *intersect_index) {
-
- double initial_pos = (at_start) ? 0.0 : std::numeric_limits<double>::max();
+static bool try_get_intersect_point_with_item_recursive(Geom::PathVector& conn_pv, SPItem* item,
+ const Geom::Matrix& item_transform, double& intersect_pos) {
+ double initial_pos = intersect_pos;
// if this is a group...
- if (SP_IS_GROUP(&item)) {
- SPGroup* group = SP_GROUP(&item);
-
+ if (SP_IS_GROUP(item)) {
+ SPGroup* group = SP_GROUP(item);
+
// consider all first-order children
- double child_pos = initial_pos;
- unsigned child_index;
+ double child_pos = std::numeric_limits<double>::max();
for (GSList const* i = sp_item_group_item_list(group); i != NULL; i = i->next) {
SPItem* child_item = SP_ITEM(i->data);
- try_get_intersect_point_with_item_recursive(conn_curve, *child_item,
- item_transform * child_item->transform, at_start, &child_pos, &child_index);
- if (fabs(initial_pos - child_pos) > fabs(initial_pos - *intersect_pos)) {
- // It is further away from the initial point than the current intersection
- // point (i.e. the "outermost" intersection), so use this one.
- *intersect_pos = child_pos;
- *intersect_index = child_index;
- }
+ try_get_intersect_point_with_item_recursive(conn_pv, child_item,
+ item_transform * child_item->transform, child_pos);
+ if (intersect_pos > child_pos)
+ intersect_pos = child_pos;
}
- return *intersect_pos != initial_pos;
+ return intersect_pos != initial_pos;
}
- // if this is a shape...
- if (!SP_IS_SHAPE(&item)) return false;
+ // if this is not a shape, nothing to be done
+ if (!SP_IS_SHAPE(item)) return false;
// make sure it has an associated curve
- SPCurve* item_curve = sp_shape_get_curve(SP_SHAPE(&item));
+ SPCurve* item_curve = sp_shape_get_curve(SP_SHAPE(item));
if (!item_curve) return false;
// apply transformations (up to common ancestor)
item_curve->transform(item_transform);
const Geom::PathVector& curve_pv = item_curve->get_pathvector();
- const Geom::PathVector& conn_pv = conn_curve->get_pathvector();
Geom::CrossingSet cross = crossings(conn_pv, curve_pv);
// iterate over all Crossings
for (Geom::CrossingSet::const_iterator i = cross.begin(); i != cross.end(); i++) {
@@ -85,18 +77,14 @@ static bool try_get_intersect_point_with_item_recursive(SPCurve *conn_curve, SPI
for (Geom::Crossings::const_iterator i = cr.begin(); i != cr.end(); i++) {
const Geom::Crossing& cr_pt = *i;
- if (fabs(initial_pos - cr_pt.ta) > fabs(initial_pos - *intersect_pos)) {
- // It is further away from the initial point than the current intersection
- // point (i.e. the "outermost" intersection), so use this one.
- *intersect_pos = cr_pt.ta;
- *intersect_index = cr_pt.a;
- }
+ if ( intersect_pos > cr_pt.ta)
+ intersect_pos = cr_pt.ta;
}
}
item_curve->unref();
- return *intersect_pos != initial_pos;
+ return intersect_pos != initial_pos;
}
@@ -104,22 +92,36 @@ static bool try_get_intersect_point_with_item_recursive(SPCurve *conn_curve, SPI
// and the item given. If the item is a group, then the component items are considered.
// The transforms given should be to a common ancestor of both the path and item.
//
-static bool try_get_intersect_point_with_item(SPPath& conn, SPItem& item,
- const Geom::Matrix& item_transform, const Geom::Matrix& conn_transform,
- const bool at_start, double* intersect_pos, unsigned *intersect_index) {
-
- // We start with the intersection point either at the beginning or end of the
- // path, depending on whether we are considering the source or target endpoint.
- *intersect_pos = (at_start) ? 0.0 : std::numeric_limits<double>::max();
+static bool try_get_intersect_point_with_item(SPPath* conn, SPItem* item,
+ const Geom::Matrix& item_transform, const Geom::Matrix& conn_transform,
+ const bool at_start, double& intersect_pos) {
// Copy the curve and apply transformations up to common ancestor.
- SPCurve* conn_curve = conn.curve->copy();
+ SPCurve* conn_curve = conn->curve->copy();
conn_curve->transform(conn_transform);
+ Geom::PathVector conn_pv = conn_curve->get_pathvector();
+
+ // If this is not the starting point, use Geom::Path::reverse() to reverse the path
+ if (!at_start)
+ {
+ // connectors are actually a single path, so consider the first element from a Geom::PathVector
+ conn_pv[0] = conn_pv[0].reverse();
+ }
+
+ // We start with the intersection point at the end of the path
+ intersect_pos = conn_pv[0].size();
+
// Find the intersection.
- bool result = try_get_intersect_point_with_item_recursive(conn_curve, item, item_transform,
- at_start, intersect_pos, intersect_index);
-
+ bool result = try_get_intersect_point_with_item_recursive(conn_pv, item, item_transform, intersect_pos);
+
+ if (!result)
+ // No intersection point has been found (why?)
+ // just default to connector end
+ intersect_pos = 0;
+ // If not at the starting point, recompute position with respect to original path
+ if (!at_start)
+ intersect_pos = conn_pv[0].size() - intersect_pos;
// Free the curve copy.
conn_curve->unref();
@@ -128,17 +130,14 @@ static bool try_get_intersect_point_with_item(SPPath& conn, SPItem& item,
static void
-sp_conn_end_move_compensate(Geom::Matrix const */*mp*/, SPItem */*moved_item*/,
- SPPath *const path,
- bool const updatePathRepr = true)
+sp_conn_get_route_and_redraw(SPPath *const path,
+ const bool updatePathRepr = true)
{
- // TODO: SPItem::getBounds gives the wrong result for some objects
- // that have internal representations that are updated later
- // by the sp_*_update functions, e.g., text.
- sp_document_ensure_up_to_date(path->document);
-
// Get the new route around obstacles.
- path->connEndPair.reroutePath();
+ bool rerouted = path->connEndPair.reroutePathFromLibavoid();
+ if (!rerouted) {
+ return;
+ }
SPItem *h2attItem[2];
path->connEndPair.getAttachedItems(h2attItem);
@@ -147,72 +146,80 @@ sp_conn_end_move_compensate(Geom::Matrix const */*mp*/, SPItem */*moved_item*/,
SPObject const *const ancestor = get_nearest_common_ancestor(path_item, h2attItem);
Geom::Matrix const path2anc(i2anc_affine(path_item, ancestor));
- Geom::Point endPts[2] = { *(path->curve->first_point()), *(path->curve->last_point()) };
-
+ // Set sensible values incase there the connector ends are not
+ // attached to any shapes.
+ Geom::PathVector conn_pv = path->curve->get_pathvector();
+ double endPos[2] = { 0, conn_pv[0].size() };
+
+ SPConnEnd** _connEnd = path->connEndPair.getConnEnds();
for (unsigned h = 0; h < 2; ++h) {
- if (h2attItem[h]) {
- // For each attached object, change the corresponding point to be
- // at the outermost intersection with the object's path.
- double intersect_pos;
- unsigned intersect_index;
+ if (h2attItem[h] && _connEnd[h]->type == ConnPointDefault && _connEnd[h]->id == ConnPointPosCC) {
Geom::Matrix h2i2anc = i2anc_affine(h2attItem[h], ancestor);
- if ( try_get_intersect_point_with_item(*path, *h2attItem[h], h2i2anc, path2anc,
- (h == 0), &intersect_pos, &intersect_index) ) {
- const Geom::PathVector& curve = path->curve->get_pathvector();
- endPts[h] = curve[intersect_index].pointAt(intersect_pos);
- }
+ try_get_intersect_point_with_item(path, h2attItem[h], h2i2anc, path2anc,
+ (h == 0), endPos[h]);
}
}
- change_endpts(path->curve, endPts);
+ change_endpts(path->curve, endPos);
if (updatePathRepr) {
- path->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
path->updateRepr();
+ path->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
}
-// TODO: This triggering of makeInvalidPath could be cleaned up to be
-// another option passed to move_compensate.
+
static void
-sp_conn_end_shape_move_compensate(Geom::Matrix const *mp, SPItem *moved_item,
+sp_conn_end_shape_move(Geom::Matrix const */*mp*/, SPItem */*moved_item*/,
SPPath *const path)
{
if (path->connEndPair.isAutoRoutingConn()) {
- path->connEndPair.makePathInvalid();
+ path->connEndPair.tellLibavoidNewEndpoints();
}
- sp_conn_end_move_compensate(mp, moved_item, path);
}
void
-sp_conn_adjust_invalid_path(SPPath *const path)
+sp_conn_reroute_path(SPPath *const path)
{
- sp_conn_end_move_compensate(NULL, NULL, path);
+ if (path->connEndPair.isAutoRoutingConn()) {
+ path->connEndPair.tellLibavoidNewEndpoints();
+ }
}
+
void
-sp_conn_adjust_path(SPPath *const path)
+sp_conn_reroute_path_immediate(SPPath *const path)
{
if (path->connEndPair.isAutoRoutingConn()) {
- path->connEndPair.makePathInvalid();
+ bool processTransaction = true;
+ path->connEndPair.tellLibavoidNewEndpoints(processTransaction);
}
// Don't update the path repr or else connector dragging is slowed by
// constant update of values to the xml editor, and each step is also
// needlessly remembered by undo/redo.
bool const updatePathRepr = false;
- sp_conn_end_move_compensate(NULL, NULL, path, updatePathRepr);
+ sp_conn_get_route_and_redraw(path, updatePathRepr);
+}
+
+void sp_conn_redraw_path(SPPath *const path)
+{
+ sp_conn_get_route_and_redraw(path);
}
static void
-change_endpts(SPCurve *const curve, Geom::Point const h2endPt[2])
+change_endpts(SPCurve *const curve, double const endPos[2])
{
-#if 0
- curve->reset();
- curve->moveto(h2endPt[0]);
- curve->lineto(h2endPt[1]);
-#else
- curve->move_endpoints(h2endPt[0], h2endPt[1]);
-#endif
+ // Use Geom::Path::portion to cut the curve at the end positions
+ if (endPos[0] > endPos[1])
+ {
+ // Path is "negative", reset the curve and return
+ curve->reset();
+ return;
+ }
+ const Geom::Path& old_path = curve->get_pathvector()[0];
+ Geom::PathVector new_path_vector;
+ new_path_vector.push_back(old_path.portion(endPos[0], endPos[1]));
+ curve->set_pathvector(new_path_vector);
}
static void
@@ -234,29 +241,151 @@ sp_conn_end_detach(SPObject *const owner, unsigned const handle_ix)
}
void
-SPConnEnd::setAttacherHref(gchar const *value)
+SPConnEnd::setAttacherHref(gchar const *value, SPPath* /*path*/)
{
if ( value && href && ( strcmp(value, href) == 0 ) ) {
/* No change, do nothing. */
} else {
- g_free(href);
- href = NULL;
- if (value) {
- // First, set the href field, because sp_conn_end_href_changed will need it.
- href = g_strdup(value);
-
- // Now do the attaching, which emits the changed signal.
- try {
- ref.attach(Inkscape::URI(value));
- } catch (Inkscape::BadURIException &e) {
- /* TODO: Proper error handling as per
- * http://www.w3.org/TR/SVG11/implnote.html#ErrorProcessing. (Also needed for
- * sp-use.) */
- g_warning("%s", e.what());
+ if (!value)
+ {
+ ref.detach();
+ g_free(href);
+ href = NULL;
+ }
+ else
+ {
+
+ /* References to the connection points have the following format
+ #svguri_t_id, where #svguri is the id of the item the
+ connector is attached to, t is the type of the point, which
+ can be either "d" for default or "u" for user-defined, and
+ id is the local (inside the item) id of the connection point.
+ In the case of default points id represents the position on the
+ item (i.e. Top-Left, Centre-Centre, etc.).
+ */
+
+ gchar ** href_strarray = NULL;
+ if (href)
+ href_strarray = g_strsplit(href, "_", 0);
+ gchar ** value_strarray = g_strsplit(value, "_", 0);
+
+ g_free(href);
+ href = NULL;
+
+ bool changed = false;
+ bool validRef = true;
+
+ if ( !href_strarray || g_strcmp0(href_strarray[0], value_strarray[0]) != 0 )
+ {
+ // The href has changed, so update it.
+ changed = true;
+ // Set the href field, because sp_conn_end_href_changed will need it.
+ href = g_strdup(value);
+ // Now do the attaching, which emits the changed signal.
+ try {
+ ref.attach(Inkscape::URI(value_strarray[0]));
+ } catch (Inkscape::BadURIException &e) {
+ /* TODO: Proper error handling as per
+ * http://www.w3.org/TR/SVG11/implnote.html#ErrorProcessing. (Also needed for
+ * sp-use.) */
+ g_warning("%s", e.what());
+ validRef = false;
+ }
+ }
+ // Check to see if the connection point changed and update it.
+ //
+
+ if ( !value_strarray[1] )
+ {
+ /* Treat the old references to connection points
+ as default points that connect to the centre
+ of the item.
+ */
+ if ( type != ConnPointDefault )
+ {
+ type = ConnPointDefault;
+ changed = true;
+ }
+ if ( id != ConnPointPosCC )
+ {
+ id = ConnPointPosCC;
+ changed = true;
+ }
+ }
+ else
+ {
+ switch (value_strarray[1][0])
+ {
+ case 'd':
+ if ( type != ConnPointDefault )
+ {
+ type = ConnPointDefault;
+ changed = true;
+ }
+ break;
+ case 'u':
+ if ( type != ConnPointUserDefined)
+ {
+ type = ConnPointUserDefined;
+ changed = true;
+ }
+ break;
+ default:
+ g_warning("Bad reference to a connection point.");
+ validRef = false;
+ }
+ if ( value_strarray[2] )
+ {
+ int newId = (int) g_ascii_strtod( value_strarray[2], 0 );
+ if ( id != newId )
+ {
+ id = newId;
+ changed = true;
+ }
+
+ }
+ else
+ {
+ // We have a malformed reference to a connection point,
+ // emit a warning, clear href and detach ref.
+ changed = true;
+ g_warning("Bad reference to a connection point.");\
+ validRef = false;
+ }
+ }
+
+ if ( changed )
+ {
+ // We still have to verify that the reference to the
+ // connection point is a valid one.
+
+ // Get the item the connector is attached to
+ SPItem* item = ref.getObject();
+ if ( item && !item->avoidRef->isValidConnPointId( type, id ) )
+ {
+ g_warning("Bad reference to a connection point.");
+ validRef = false;
+ }
+/* else
+ // Update the connector
+ if (path->connEndPair.isAutoRoutingConn()) {
+ path->connEndPair.tellLibavoidNewEndpoints();
+ }
+*/
+ }
+
+ if ( !validRef )
+ {
ref.detach();
+ g_free(href);
+ href = NULL;
}
- } else {
- ref.detach();
+ else
+ if (!href)
+ href = g_strdup(value);
+
+ g_strfreev(href_strarray);
+ g_strfreev(value_strarray);
}
}
}
@@ -277,7 +406,7 @@ sp_conn_end_href_changed(SPObject */*old_ref*/, SPObject */*ref*/,
= SP_OBJECT(refobj)->connectDelete(sigc::bind(sigc::ptr_fun(&sp_conn_end_deleted),
SP_OBJECT(path), handle_ix));
connEnd._transformed_connection
- = SP_ITEM(refobj)->connectTransformed(sigc::bind(sigc::ptr_fun(&sp_conn_end_shape_move_compensate),
+ = SP_ITEM(refobj)->connectTransformed(sigc::bind(sigc::ptr_fun(&sp_conn_end_shape_move),
path));
}
}
diff --git a/src/sp-conn-end.h b/src/sp-conn-end.h
index a565b6404..5e9dbb9da 100644
--- a/src/sp-conn-end.h
+++ b/src/sp-conn-end.h
@@ -5,6 +5,8 @@
#include <sigc++/connection.h>
#include "sp-use-reference.h"
+#include "connection-points.h"
+#include "conn-avoid-ref.h"
class SPConnEnd {
@@ -14,6 +16,15 @@ public:
SPUseReference ref;
gchar *href;
+ /* In the following, type refers to connection point type,
+ i.e. default (one of the 9 combinations of right, centre,
+ left, top, bottom) or user-defined. The id serves to identify
+ the connection point in a list of connection points.
+ */
+
+ ConnPointType type;
+ int id;
+
/** Change of href string (not a modification of the attributes of the referrent). */
sigc::connection _changed_connection;
@@ -23,7 +34,7 @@ public:
/** A sigc connection for transformed signal, used to do move compensation. */
sigc::connection _transformed_connection;
- void setAttacherHref(gchar const *);
+ void setAttacherHref(gchar const *, SPPath *);
private:
SPConnEnd(SPConnEnd const &);
@@ -32,8 +43,9 @@ private:
void sp_conn_end_href_changed(SPObject *old_ref, SPObject *ref,
SPConnEnd *connEnd, SPPath *path, unsigned const handle_ix);
-void sp_conn_adjust_invalid_path(SPPath *const path);
-void sp_conn_adjust_path(SPPath *const path);
+void sp_conn_reroute_path(SPPath *const path);
+void sp_conn_reroute_path_immediate(SPPath *const path);
+void sp_conn_redraw_path(SPPath *const path);
void sp_conn_end_detach(SPObject *const owner, unsigned const handle_ix);
diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp
index 6af2f7169..e4259e52c 100644
--- a/src/sp-flowtext.cpp
+++ b/src/sp-flowtext.cpp
@@ -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 *
diff --git a/src/sp-font-face.cpp b/src/sp-font-face.cpp
index 1ec6f4601..704985b8c 100644
--- a/src/sp-font-face.cpp
+++ b/src/sp-font-face.cpp
@@ -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
*
diff --git a/src/sp-font-face.h b/src/sp-font-face.h
index 8fe1c752f..e492ba091 100644
--- a/src/sp-font-face.h
+++ b/src/sp-font-face.h
@@ -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
*
diff --git a/src/sp-font.cpp b/src/sp-font.cpp
index 75fb18638..de272c72f 100644
--- a/src/sp-font.cpp
+++ b/src/sp-font.cpp
@@ -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
*
diff --git a/src/sp-font.h b/src/sp-font.h
index fad7ead42..a0f895a52 100644
--- a/src/sp-font.h
+++ b/src/sp-font.h
@@ -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
*
diff --git a/src/sp-glyph-kerning.cpp b/src/sp-glyph-kerning.cpp
index 6d08f212c..872efc853 100644
--- a/src/sp-glyph-kerning.cpp
+++ b/src/sp-glyph-kerning.cpp
@@ -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
*
diff --git a/src/sp-glyph-kerning.h b/src/sp-glyph-kerning.h
index ec0866c2c..ce9b4bb15 100644
--- a/src/sp-glyph-kerning.h
+++ b/src/sp-glyph-kerning.h
@@ -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
*
diff --git a/src/sp-glyph.cpp b/src/sp-glyph.cpp
index 8af78a0aa..37e266da0 100644
--- a/src/sp-glyph.cpp
+++ b/src/sp-glyph.cpp
@@ -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
*
diff --git a/src/sp-glyph.h b/src/sp-glyph.h
index 8c35a3a83..316204c23 100644
--- a/src/sp-glyph.h
+++ b/src/sp-glyph.h
@@ -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
*
diff --git a/src/sp-image.cpp b/src/sp-image.cpp
index 65aad1e2d..e3f708142 100644
--- a/src/sp-image.cpp
+++ b/src/sp-image.cpp
@@ -53,6 +53,13 @@
#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);\
diff --git a/src/sp-item.cpp b/src/sp-item.cpp
index 395048280..9f7157b99 100644
--- a/src/sp-item.cpp
+++ b/src/sp-item.cpp
@@ -412,6 +412,7 @@ sp_item_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
sp_object_read_attr(object, "inkscape:transform-center-x");
sp_object_read_attr(object, "inkscape:transform-center-y");
sp_object_read_attr(object, "inkscape:connector-avoid");
+ sp_object_read_attr(object, "inkscape:connection-points");
if (((SPObjectClass *) (parent_class))->build) {
(* ((SPObjectClass *) (parent_class))->build)(object, document, repr);
@@ -514,6 +515,9 @@ sp_item_set(SPObject *object, unsigned key, gchar const *value)
case SP_ATTR_CONNECTOR_AVOID:
item->avoidRef->setAvoid(value);
break;
+ case SP_ATTR_CONNECTION_POINTS:
+ item->avoidRef->setConnectionPoints(value);
+ break;
case SP_ATTR_TRANSFORM_CENTER_X:
if (value) {
item->transform_center_x = g_strtod(value, NULL);
diff --git a/src/sp-marker-loc.h b/src/sp-marker-loc.h
index 98cab3746..b6877e5aa 100644
--- a/src/sp-marker-loc.h
+++ b/src/sp-marker-loc.h
@@ -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,
diff --git a/src/sp-missing-glyph.cpp b/src/sp-missing-glyph.cpp
index ffc29a71e..d25a5f812 100644
--- a/src/sp-missing-glyph.cpp
+++ b/src/sp-missing-glyph.cpp
@@ -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
*
diff --git a/src/sp-missing-glyph.h b/src/sp-missing-glyph.h
index 2a4cfde07..0b3f74360 100644
--- a/src/sp-missing-glyph.h
+++ b/src/sp-missing-glyph.h
@@ -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
*
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index 47720c5d6..9b72a4157 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -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) {
diff --git a/src/sp-path.cpp b/src/sp-path.cpp
index 2120ddd64..bbcb25356 100644
--- a/src/sp-path.cpp
+++ b/src/sp-path.cpp
@@ -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);
diff --git a/src/sp-script.cpp b/src/sp-script.cpp
index a40132450..ad41b8021 100644
--- a/src/sp-script.cpp
+++ b/src/sp-script.cpp
@@ -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
*
diff --git a/src/sp-script.h b/src/sp-script.h
index fa1906052..127eeedf7 100644
--- a/src/sp-script.h
+++ b/src/sp-script.h
@@ -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
*
diff --git a/src/sp-text.cpp b/src/sp-text.cpp
index 0d3fd791b..b45f8cbb6 100644
--- a/src/sp-text.cpp
+++ b/src/sp-text.cpp
@@ -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));
+ }
}
}
diff --git a/src/spray-context.cpp b/src/spray-context.cpp
new file mode 100644
index 000000000..b70e16467
--- /dev/null
+++ b/src/spray-context.cpp
@@ -0,0 +1,1208 @@
+#define __SP_SPRAY_CONTEXT_C__
+
+/*
+ * Spray Tool
+ *
+ * Authors:
+ * Pierre-Antoine MARC
+ * Pierre CACLIN
+ * Aurel-Aimé MARMION
+ * Julien LERAY
+ * Benoît LAVORATA
+ * Vincent MONTAGNE
+ * Pierre BARBRY-BLOT
+ *
+ * Copyright (C) 2009 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <glibmm/i18n.h>
+
+#include <numeric>
+
+#include "svg/svg.h"
+#include "display/canvas-bpath.h"
+
+#include <glib/gmem.h>
+#include "macros.h"
+#include "document.h"
+#include "selection.h"
+#include "desktop.h"
+#include "desktop-events.h"
+#include "desktop-handles.h"
+#include "unistd.h"
+#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 <boost/optional.hpp>
+#include "libnr/nr-matrix-ops.h"
+#include "libnr/nr-scale-translate-ops.h"
+#include "xml/repr.h"
+#include "context-fns.h"
+#include "sp-item.h"
+#include "inkscape.h"
+#include "color.h"
+#include "svg/svg-color.h"
+#include "splivarot.h"
+#include "sp-item-group.h"
+#include "sp-shape.h"
+#include "sp-path.h"
+#include "path-chemistry.h"
+#include "sp-gradient.h"
+#include "sp-stop.h"
+#include "sp-stop-fns.h"
+#include "sp-gradient-reference.h"
+#include "sp-linear-gradient.h"
+#include "sp-radial-gradient.h"
+#include "gradient-chemistry.h"
+#include "sp-text.h"
+#include "sp-flowtext.h"
+#include "display/canvas-bpath.h"
+#include "display/canvas-arena.h"
+#include "display/curve.h"
+#include "livarot/Shape.h"
+#include <2geom/isnan.h>
+#include <2geom/transforms.h>
+#include "preferences.h"
+#include "style.h"
+#include "box3d.h"
+#include "sp-item-transform.h"
+#include "filter-chemistry.h"
+#include "sp-gaussian-blur-fns.h"
+#include "sp-gaussian-blur.h"
+
+#include "spray-context.h"
+#include "ui/dialog/dialog-manager.h"
+#include "helper/action.h"
+
+#include <iostream>
+using namespace std;
+
+
+#define DDC_RED_RGBA 0xff0000ff
+
+#define DYNA_MIN_WIDTH 1.0e-6
+
+static void sp_spray_context_class_init(SPSprayContextClass *klass);
+static void sp_spray_context_init(SPSprayContext *ddc);
+static void sp_spray_context_dispose(GObject *object);
+
+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 = 0;
+
+
+
+// The following code implements NormalDistribution wich is used for the density of the spray
+
+
+/*
+ RAND is a macro which returns a pseudo-random numbers from a uniform
+ distribution on the interval [0 1]
+*/
+#define RAND ((double) rand())/((double) RAND_MAX)
+
+/*
+ TWOPI = 2.0*pi
+*/
+#define TWOPI 2.0*3.141592653589793238462643383279502884197169399375
+
+/*
+ RANDN is a macro which returns a pseudo-random numbers from a normal
+ distribution with mean zero and standard deviation one. This macro uses Box
+ Muller's algorithm
+*/
+#define RANDN sqrt(-2.0*log(RAND))*cos(TWOPI*RAND)
+
+
+double NormalDistribution(double mu,double sigma)
+{
+/*
+ This function returns a pseudo-random numbers from a normal distribution with
+ mean equal at mu and standard deviation equal at sigma > 0
+*/
+
+ return (mu+sigma*RANDN);
+
+}
+
+//Fin de la création de NormalDistribution
+
+GtkType sp_spray_context_get_type(void)
+{
+ static GType type = 0;
+ if (!type) {
+ GTypeInfo info = {
+ sizeof(SPSprayContextClass),
+ NULL, NULL,
+ (GClassInitFunc) sp_spray_context_class_init,
+ NULL, NULL,
+ sizeof(SPSprayContext),
+ 4,
+ (GInstanceInitFunc) sp_spray_context_init,
+ NULL, /* value_table */
+ };
+ type = g_type_register_static(SP_TYPE_EVENT_CONTEXT, "SPSprayContext", &info, (GTypeFlags)0);
+ }
+ return type;
+}
+
+static void sp_spray_context_class_init(SPSprayContextClass *klass)
+{
+ GObjectClass *object_class = (GObjectClass *) klass;
+ SPEventContextClass *event_context_class = (SPEventContextClass *) klass;
+
+ parent_class = (SPEventContextClass*)g_type_class_peek_parent(klass);
+
+ object_class->dispose = sp_spray_context_dispose;
+
+ event_context_class->setup = sp_spray_context_setup;
+ 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)
+{
+
+ Geom::Point center = c;
+ Geom::Translate const s(c);
+ Geom::Matrix affine = Geom::Matrix(s).inverse() * Geom::Matrix(rotation) * Geom::Matrix(s);
+
+ // Rotate item.
+ sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * (Geom::Matrix)affine);
+ // Use each item's own transform writer, consistent with sp_selection_apply_affine()
+ sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform);
+
+ // Restore the center position (it's changed because the bbox center changed)
+ if (item->isCenterSet()) {
+ item->setCenter(c);
+ item->updateRepr();
+ }
+}
+
+/*Method to scale items*/
+void sp_spray_scale_rel(Geom::Point c, SPDesktop */*desktop*/, SPItem *item, Geom::Scale const &scale)
+{
+ 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)
+{
+ SPEventContext *event_context = SP_EVENT_CONTEXT(tc);
+
+
+
+ event_context->cursor_shape = cursor_spray_xpm;
+ event_context->hot_x = 4;
+ event_context->hot_y = 4;
+
+ /* attributes */
+ tc->dragging = FALSE;
+ tc->distrib = 1;
+ tc->width = 0.2;
+ tc->force = 0.2;
+ tc->ratio = 0;
+ tc->tilt=0;
+ tc->mean = 0.2;
+ tc->rot_min=0;
+ tc->rot_max=0;
+ tc->standard_deviation=0.2;
+ tc->scale=1;
+ tc->scale_min = 1;
+ tc->scale_max=1;
+ tc->pressure = TC_DEFAULT_PRESSURE;
+
+ tc->is_dilating = false;
+ tc->has_dilated = false;
+
+ tc->do_h = true;
+ tc->do_s = true;
+ tc->do_l = true;
+ tc->do_o = false;
+
+ new (&tc->style_set_connection) sigc::connection();
+}
+
+static void sp_spray_context_dispose(GObject *object)
+{
+ SPSprayContext *tc = SP_SPRAY_CONTEXT(object);
+
+ tc->style_set_connection.disconnect();
+ tc->style_set_connection.~connection();
+
+ if (tc->dilate_area) {
+ gtk_object_destroy(GTK_OBJECT(tc->dilate_area));
+ tc->dilate_area = NULL;
+ }
+
+ if (tc->_message_context) {
+ delete tc->_message_context;
+ }
+
+ G_OBJECT_CLASS(parent_class)->dispose(object);
+}
+
+bool is_transform_modes(gint mode)
+{
+ return (mode == SPRAY_MODE_COPY ||
+ mode == SPRAY_MODE_CLONE ||
+ mode == SPRAY_MODE_SINGLE_PATH ||
+ mode == SPRAY_OPTION);
+}
+
+void sp_spray_update_cursor(SPSprayContext *tc, bool /*with_shift*/)
+{
+ SPEventContext *event_context = SP_EVENT_CONTEXT(tc);
+ SPDesktop *desktop = event_context->desktop;
+
+ guint num = 0;
+ gchar *sel_message = NULL;
+ if (!desktop->selection->isEmpty()) {
+ num = g_slist_length((GSList *) desktop->selection->itemList());
+ sel_message = g_strdup_printf(ngettext("<b>%i</b> object selected","<b>%i</b> objects selected",num), num);
+ } else {
+ sel_message = g_strdup_printf(_("<b>Nothing</b> selected"));
+ }
+
+
+ switch (tc->mode) {
+ case SPRAY_MODE_COPY:
+ tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or scroll to spray <b>copies</b> of the initial selection"), sel_message);
+ break;
+ case SPRAY_MODE_CLONE:
+ tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or scroll to spray <b>clones</b> of the initial selection"), sel_message);
+ break;
+ case SPRAY_MODE_SINGLE_PATH:
+ tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Drag, click or scroll to spray in a <b>single path</b> of the initial selection"), sel_message);
+ break;
+ case SPRAY_OPTION:
+ tc->_message_context->setF(Inkscape::NORMAL_MESSAGE, _("%s. Modify <b>spray</b> options"), sel_message);
+ break;
+ }
+ sp_event_context_update_cursor(event_context);
+ g_free(sel_message);
+}
+
+static void sp_spray_context_setup(SPEventContext *ec)
+{
+ SPSprayContext *tc = SP_SPRAY_CONTEXT(ec);
+
+ if (((SPEventContextClass *) parent_class)->setup)
+ ((SPEventContextClass *) parent_class)->setup(ec);
+
+ {
+ /* TODO: have a look at sp_dyna_draw_context_setup where the same is done.. generalize? at least make it an arcto! */
+ SPCurve *c = new SPCurve();
+ const double C1 = 0.552;
+ c->moveto(-1,0);
+ c->curveto(-1, C1, -C1, 1, 0, 1 );
+ c->curveto(C1, 1, 1, C1, 1, 0 );
+ c->curveto(1, -C1, C1, -1, 0, -1 );
+ c->curveto(-C1, -1, -1, -C1, -1, 0 );
+ c->closepath();
+ tc->dilate_area = sp_canvas_bpath_new(sp_desktop_controls(ec->desktop), c);
+ c->unref();
+ sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(tc->dilate_area), 0x00000000,(SPWindRule)0);
+ sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(tc->dilate_area), 0xff9900ff, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT);
+ sp_canvas_item_hide(tc->dilate_area);
+ }
+
+ tc->is_drawing = false;
+
+ tc->_message_context = new Inkscape::MessageContext((ec->desktop)->messageStack());
+
+ sp_event_context_read(ec, "distrib");
+ sp_event_context_read(ec, "width");
+ sp_event_context_read(ec, "ratio");
+ sp_event_context_read(ec, "tilt");
+ sp_event_context_read(ec, "rot_min");
+ sp_event_context_read(ec, "rot_max");
+ sp_event_context_read(ec, "scale_min");
+ sp_event_context_read(ec, "scale_max");
+ sp_event_context_read(ec, "mode");
+ sp_event_context_read(ec, "population");
+ sp_event_context_read(ec, "force");
+ sp_event_context_read(ec, "mean");
+ sp_event_context_read(ec, "standard_deviation");
+ sp_event_context_read(ec, "usepressure");
+ sp_event_context_read(ec, "Rotation min");
+ sp_event_context_read(ec, "Rotation max");
+ sp_event_context_read(ec, "Scale");
+ sp_event_context_read(ec, "doh");
+ sp_event_context_read(ec, "dol");
+ sp_event_context_read(ec, "dos");
+ sp_event_context_read(ec, "doo");
+
+ ;
+
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ if (prefs->getBool("/tools/spray/selcue")) {
+ ec->enableSelectionCue();
+ }
+
+ if (prefs->getBool("/tools/spray/gradientdrag")) {
+ ec->enableGrDrag();
+ }
+}
+
+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 = 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 = 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") {
+ tc->ratio = CLAMP(val->getDouble(), 0.0, 0.9);
+ } else if (path == "force") {
+ tc->force = CLAMP(val->getDouble(1.0), 0, 1.0);
+ } else if (path == "rot_min") {
+ tc->rot_min = CLAMP(val->getDouble(0), 0, 10.0);
+ } 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);
+ } else if (path == "scale_max") {
+ tc->scale_max = CLAMP(val->getDouble(1.0), 0, 10.0);
+ } else if (path == "mean") {
+ tc->mean = 0.01 * CLAMP(val->getInt(10), 1, 100);
+ } else if (path == "standard_deviation") {
+ tc->standard_deviation = 0.01 * CLAMP(val->getInt(10), 1, 100);
+ } else if (path == "usepressure") {
+ tc->usepressure = val->getBool();
+ } else if (path == "doh") {
+ tc->do_h = val->getBool();
+ } else if (path == "dos") {
+ tc->do_s = val->getBool();
+ } else if (path == "dol") {
+ tc->do_l = val->getBool();
+ } else if (path == "doo") {
+ tc->do_o = val->getBool();
+ }
+}
+
+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);
+ else
+ tc->pressure = TC_DEFAULT_PRESSURE;
+}
+
+double get_dilate_radius(SPSprayContext *tc)
+{
+
+ return 250 * tc->width/SP_EVENT_CONTEXT(tc)->desktop->current_zoom();
+
+
+}
+
+double get_path_force(SPSprayContext *tc)
+{
+ double force = 8 * (tc->usepressure? tc->pressure : TC_DEFAULT_PRESSURE)
+ /sqrt(SP_EVENT_CONTEXT(tc)->desktop->current_zoom());
+ if (force > 3) {
+ force += 4 * (force - 3);
+ }
+ return force * tc->force;
+}
+
+double get_path_mean(SPSprayContext *tc)
+{
+ return tc->mean;
+}
+
+double get_path_standard_deviation(SPSprayContext *tc)
+{
+ return tc->standard_deviation;
+}
+
+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)
+{
+ return tc->mean;
+}
+
+double get_move_standard_deviation(SPSprayContext *tc)
+{
+ return tc->standard_deviation;
+}
+
+/* Method to handle the distribution of the items */
+
+
+void random_position( double &r, double &p, double &a, double &s, int choix)
+{
+ if (choix == 0) // Mode 1 : uniform repartition
+ {
+ r = (1-pow(g_random_double_range(0, 1),2));
+ p = g_random_double_range(0, M_PI*2);
+ }
+ if (choix == 1) //Mode 0 : gaussian repartition
+ {
+ double r_temp =-1;
+while(!((r_temp>=0)&&(r_temp<=1)))
+{
+ r_temp = NormalDistribution(a,s/4);
+}
+// generates a number following a normal distribution
+ p = g_random_double_range(0, M_PI*2);
+ r=r_temp;
+ /* if (r_temp<=0) r=0;
+ else
+ {
+ if (r_temp>1) r=1;
+ else r = r_temp;
+ }*/
+ }
+}
+
+
+
+
+
+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 did = false;
+
+ if (SP_IS_BOX3D(item) /*&& !is_transform_modes(mode)*/) {
+ // convert 3D boxes to ordinary groups before spraying their shapes
+ item = SP_ITEM(box3d_convert_to_group(SP_BOX3D(item)));
+ selection->add(item);
+ }
+
+/*if (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item)) {
+ GSList *items = g_slist_prepend (NULL, item);
+ GSList *selected = NULL;
+ GSList *to_select = NULL;
+ SPDocument *doc = SP_OBJECT_DOCUMENT(item);
+ sp_item_list_to_curves (items, &selected, &to_select);
+ g_slist_free (items);
+ SPObject* newObj = doc->getObjectByRepr((Inkscape::XML::Node *) to_select->data);
+ g_slist_free (to_select);
+ item = (SPItem *) newObj;
+ // selection->add(item);
+ }
+*/
+ /*if (SP_IS_GROUP(item) && !SP_IS_BOX3D(item)) {
+ for (SPObject *child = sp_object_first_child(SP_OBJECT(item)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ if (SP_IS_ITEM(child)) {
+ if (sp_spray_dilate_recursive (desktop,selection, SP_ITEM(child), p, vector, mode, radius, force, population, scale, scale_min, scale_max, reverse, mean, standard_deviation,ratio,tilt, rot_min, rot_max,_distrib))
+ did = true;
+ }
+ }
+
+ } else {*/
+ if (mode == SPRAY_MODE_COPY) {
+
+ Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ if (a) {
+ 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);
+ if(_fid<=population)
+ {
+ // duplicate
+ 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);
+ Inkscape::XML::Node *parent = old_repr->parent();
+ Inkscape::XML::Node *copy = old_repr->duplicate(xml_doc);
+ parent->appendChild(copy);
+
+ 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));
+ 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;
+ }
+ }
+
+ } else if (mode == SPRAY_MODE_SINGLE_PATH) {
+
+
+ SPItem *Pere; //Objet initial
+ SPItem *item_copied;//Objet projeté
+ SPItem *Union;//Union précédente
+ SPItem *fils;//Copie du père
+
+ // GSList *items = g_slist_copy((GSList *) selection->itemList()); //Récupère la liste des objects sélectionnés
+//Pere = (SPItem *) items->data;//Le premier objet est le père du spray
+
+ int i=1;
+ for (GSList *items = g_slist_copy((GSList *) selection->itemList());
+ items != NULL;
+ items = items->next) {
+
+ SPItem *item1 = (SPItem *) items->data;
+ if (i==1) {
+ Pere=item1;
+ }
+ if (i==2) {
+ Union=item1;
+ }
+ i++;
+ }
+ SPDocument *doc = SP_OBJECT_DOCUMENT(Pere);
+ Inkscape::XML::Document* xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Node *old_repr = SP_OBJECT_REPR(Pere);
+ //SPObject *old_obj = doc->getObjectByRepr(old_repr);
+ Inkscape::XML::Node *parent = old_repr->parent();
+
+ Geom::OptRect a = Pere->getBounds(sp_item_i2doc_affine(Pere));
+ if (a) {
+ double dr; double dp; //initialisation des variables
+ 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);
+ if (i==2) {
+ Inkscape::XML::Node *copy1 = old_repr->duplicate(xml_doc);
+ parent->appendChild(copy1);
+ SPObject *new_obj1 = doc->getObjectByRepr(copy1);
+ fils = (SPItem *) new_obj1; //conversion object->item
+ Union=fils;
+ Inkscape::GC::release(copy1);
+ }
+
+ if (_fid<=population) { //Rules the population of objects sprayed
+ // duplicates the father
+ Inkscape::XML::Node *copy2 = old_repr->duplicate(xml_doc);
+ 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 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_rotate_rel(center,desktop,item_copied, Geom::Rotate(angle));
+ sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));
+
+//UNION et surduplication
+ selection->clear();
+ selection->add(item_copied);
+ selection->add(Union);
+ sp_selected_path_union(selection->desktop());
+ selection->add(Pere);
+ Inkscape::GC::release(copy2);
+ did = true;
+ }
+
+ }
+ } else if (mode == SPRAY_MODE_CLONE) {
+
+ Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ if (a) {
+ double dr; double dp;
+ 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);
+
+ if(_fid<=population)
+ {
+ 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);
+ Inkscape::XML::Node *parent = old_repr->parent();
+
+ //Creation of the clone
+ 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);
+ 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_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]));
+
+ 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 did = false;
+
+ return did;
+}
+
+
+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;
+
+
+ if (selection->isEmpty()) {
+ return false;
+ }
+
+ bool did = false;
+ double radius = get_dilate_radius(tc);
+
+
+
+ bool do_fill = false, do_stroke = false, do_opacity = false;
+ guint32 fill_goal = sp_desktop_get_color_tool(desktop, "/tools/spray", true, &do_fill);
+ guint32 stroke_goal = sp_desktop_get_color_tool(desktop, "/tools/spray", false, &do_stroke);
+ double opacity_goal = sp_desktop_get_master_opacity_tool(desktop, "/tools/spray", &do_opacity);
+ if (reverse) {
+#if 0
+ // HSL inversion
+ float hsv[3];
+ float rgb[3];
+ sp_color_rgb_to_hsv_floatv (hsv,
+ SP_RGBA32_R_F(fill_goal),
+ SP_RGBA32_G_F(fill_goal),
+ SP_RGBA32_B_F(fill_goal));
+ sp_color_hsv_to_rgb_floatv (rgb, hsv[0]<.5? hsv[0]+.5 : hsv[0]-.5, 1 - hsv[1], 1 - hsv[2]);
+ fill_goal = SP_RGBA32_F_COMPOSE(rgb[0], rgb[1], rgb[2], 1);
+ sp_color_rgb_to_hsv_floatv (hsv,
+ SP_RGBA32_R_F(stroke_goal),
+ SP_RGBA32_G_F(stroke_goal),
+ SP_RGBA32_B_F(stroke_goal));
+ sp_color_hsv_to_rgb_floatv (rgb, hsv[0]<.5? hsv[0]+.5 : hsv[0]-.5, 1 - hsv[1], 1 - hsv[2]);
+ stroke_goal = SP_RGBA32_F_COMPOSE(rgb[0], rgb[1], rgb[2], 1);
+#else
+ // RGB inversion
+ fill_goal = SP_RGBA32_U_COMPOSE(
+ (255 - SP_RGBA32_R_U(fill_goal)),
+ (255 - SP_RGBA32_G_U(fill_goal)),
+ (255 - SP_RGBA32_B_U(fill_goal)),
+ (255 - SP_RGBA32_A_U(fill_goal)));
+ stroke_goal = SP_RGBA32_U_COMPOSE(
+ (255 - SP_RGBA32_R_U(stroke_goal)),
+ (255 - SP_RGBA32_G_U(stroke_goal)),
+ (255 - SP_RGBA32_B_U(stroke_goal)),
+ (255 - SP_RGBA32_A_U(stroke_goal)));
+#endif
+ opacity_goal = 1 - opacity_goal;
+ }
+
+ double path_force = get_path_force(tc);
+ if (radius == 0 || path_force == 0) {
+ return false;
+ }
+ double path_mean = get_path_mean(tc);
+ if (radius == 0 || path_mean == 0) {
+ return false;
+ }
+ double path_standard_deviation = get_path_standard_deviation(tc);
+ if (radius == 0 || path_standard_deviation == 0) {
+ return false;
+ }
+ double move_force = get_move_force(tc);
+ double move_mean = get_move_mean(tc);
+ double move_standard_deviation = get_move_standard_deviation(tc);
+
+
+ for (GSList *items = g_slist_copy((GSList *) selection->itemList());
+ items != NULL;
+ items = items->next) {
+
+ SPItem *item = (SPItem *) items->data;
+
+ /*if (is_color_modes (tc->mode)) {
+ if (do_fill || do_stroke || do_opacity) {
+ if (sp_spray_color_recursive (tc->mode, item, item_at_point,
+ fill_goal, do_fill,
+ stroke_goal, do_stroke,
+ opacity_goal, do_opacity,
+ tc->mode == SPRAY_MODE_BLUR, reverse,
+ p, radius, color_force, tc->do_h, tc->do_s, tc->do_l, tc->do_o))
+ did = true;
+ }
+ }else*/ if (is_transform_modes(tc->mode)) {
+ if (sp_spray_dilate_recursive (desktop,selection, item, p, vector, tc->mode, radius, move_force, tc->population,tc->scale, tc->scale_min, tc->scale_max, reverse, move_mean, move_standard_deviation,tc->ratio,tc->tilt, tc->rot_min, tc->rot_max, tc->distrib))
+ did = true;
+ } else {
+ if (sp_spray_dilate_recursive (desktop,selection, item, p, vector, tc->mode, radius, path_force, tc->population,tc->scale, tc->scale_min, tc->scale_max, reverse, path_mean, path_standard_deviation,tc->ratio,tc->tilt, tc->rot_min, tc->rot_max, tc->distrib))
+ did = true;
+ }
+ }
+
+ return did;
+}
+
+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)) );
+ sp_canvas_item_affine_absolute(tc->dilate_area, (sm* Geom::Rotate(tc->tilt))* Geom::Translate(SP_EVENT_CONTEXT(tc)->desktop->point()));
+ sp_canvas_item_show(tc->dilate_area);
+}
+
+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
+ tc->mode = mode;
+ sp_spray_update_cursor (tc, 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:
+ gint now_mode = prefs->getInt("/tools/spray/mode", 0);
+ SP_EVENT_CONTEXT(tc)->desktop->setToolboxSelectOneValue ("spray_tool_mode", mode);
+ // button has changed prefs, restore
+ prefs->setInt("/tools/spray/mode", now_mode);
+ // changing prefs changed tc->mode, restore back :)
+ tc->mode = mode;
+ sp_spray_update_cursor (tc, with_shift);
+}
+
+gint sp_spray_context_root_handler(SPEventContext *event_context,
+ GdkEvent *event)
+{
+ SPSprayContext *tc = SP_SPRAY_CONTEXT(event_context);
+ SPDesktop *desktop = event_context->desktop;
+
+ gint ret = FALSE;
+
+ switch (event->type) {
+ case GDK_ENTER_NOTIFY:
+ sp_canvas_item_show(tc->dilate_area);
+ break;
+ case GDK_LEAVE_NOTIFY:
+ sp_canvas_item_hide(tc->dilate_area);
+ break;
+ case GDK_BUTTON_PRESS:
+ if (event->button.button == 1 && !event_context->space_panning) {
+
+ if (Inkscape::have_viable_layer(desktop, tc->_message_context) == false) {
+ return TRUE;
+ }
+
+ Geom::Point const motion_w(event->button.x,
+ event->button.y);
+ Geom::Point const motion_dt(desktop->w2d(motion_w));
+ tc->last_push = desktop->dt2doc(motion_dt);
+
+ sp_spray_extinput(tc, event);
+
+ sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 3);
+ tc->is_drawing = true;
+ tc->is_dilating = true;
+ tc->has_dilated = false;
+
+
+
+ if(tc->is_dilating && event->button.button == 1 && !event_context->space_panning)
+
+ sp_spray_dilate (tc, motion_w, desktop->dt2doc(motion_dt), Geom::Point(0,0), MOD__SHIFT);
+
+
+
+ tc->has_dilated=true;
+
+ ret = TRUE;
+ }
+ break;
+ case GDK_MOTION_NOTIFY:
+ {
+ Geom::Point const motion_w(event->motion.x,
+ event->motion.y);
+ Geom::Point motion_dt(desktop->w2d(motion_w));
+ Geom::Point motion_doc(desktop->dt2doc(motion_dt));
+ sp_spray_extinput(tc, event);
+
+ // draw the dilating cursor
+ double radius = get_dilate_radius(tc);
+ Geom::Matrix const sm (Geom::Scale(radius/(1-tc->ratio), radius/(1+tc->ratio)) );
+ sp_canvas_item_affine_absolute(tc->dilate_area, (sm*Geom::Rotate(tc->tilt))*Geom::Translate(desktop->w2d(motion_w)));
+ sp_canvas_item_show(tc->dilate_area);
+
+ guint num = 0;
+ if (!desktop->selection->isEmpty()) {
+ num = g_slist_length((GSList *) desktop->selection->itemList());
+ }
+ if (num == 0) {
+ tc->_message_context->flash(Inkscape::ERROR_MESSAGE, _("<b>Nothing selected!</b> Select objects to spray."));
+ }
+
+ // dilating:
+ if (tc->is_drawing && ( event->motion.state & GDK_BUTTON1_MASK )) {
+ 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;
+ }
+
+ }
+ break;
+/*Spray with the scroll*/
+ case GDK_SCROLL:
+ {
+ if (event->scroll.state & GDK_BUTTON1_MASK)
+ {
+ double temp ;
+ temp=tc->population;
+ tc->population=1.0;
+ desktop->setToolboxAdjustmentValue ("population", tc->population * 100);
+ 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)
+ {
+ case GDK_SCROLL_UP:
+ {
+ if (Inkscape::have_viable_layer(desktop, tc->_message_context) == false)
+ {
+ return TRUE;
+ }
+ tc->last_push = desktop->dt2doc(scroll_dt);
+ sp_spray_extinput(tc, event);
+ sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 3);
+ tc->is_drawing = true;
+ 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;
+ case GDK_SCROLL_DOWN:
+ {
+ if (Inkscape::have_viable_layer(desktop, tc->_message_context) == false)
+ {
+ return TRUE;
+ }
+ tc->last_push = desktop->dt2doc(scroll_dt);
+ sp_spray_extinput(tc, event);
+ sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 3);
+ tc->is_drawing = true;
+ 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;
+
+ ret = TRUE;
+
+
+ }
+ break;
+case GDK_SCROLL_RIGHT:
+ {} break;
+case GDK_SCROLL_LEFT:
+ {} break;
+ }
+ }
+
+
+ break;
+
+ }
+ case GDK_BUTTON_RELEASE:
+ {
+ Geom::Point const motion_w(event->button.x, event->button.y);
+ Geom::Point const motion_dt(desktop->w2d(motion_w));
+
+ sp_canvas_end_forced_full_redraws(desktop->canvas);
+ tc->is_drawing = false;
+
+ if (tc->is_dilating && event->button.button == 1 && !event_context->space_panning) {
+ if (!tc->has_dilated) {
+ // if we did not rub, do a light tap
+ tc->pressure = 0.03;
+ sp_spray_dilate (tc, motion_w, desktop->dt2doc(motion_dt), Geom::Point(0,0), MOD__SHIFT);
+ }
+ tc->is_dilating = false;
+ tc->has_dilated = false;
+ switch (tc->mode) {
+ case SPRAY_MODE_COPY:
+ sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_SPRAY, _("Spray with copies"));
+ break;
+ case SPRAY_MODE_CLONE:
+ sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_SPRAY, _("Spray with clones"));
+ break;
+ case SPRAY_MODE_SINGLE_PATH:
+ sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_SPRAY, _("Spray in single path"));
+ break;
+ }
+ }
+ break;
+ }
+
+ case GDK_KEY_PRESS:
+ switch (get_group0_keyval (&event->key)) {
+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:
+ case GDK_k: if (MOD__SHIFT_ONLY) {
+ sp_spray_switch_mode(tc, SPRAY_MODE_SINGLE_PATH, MOD__SHIFT);
+ ret = TRUE;
+ }
+ case GDK_K:if (MOD__SHIFT_ONLY) {
+ sp_spray_switch_mode(tc, SPRAY_MODE_SINGLE_PATH, MOD__SHIFT);
+ 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);
+ ret = TRUE;
+ }
+ break;
+ case GDK_Up:
+ case GDK_KP_Up:
+ if (!MOD__CTRL_ONLY) {
+ tc->scale += 0.05;
+
+ //desktop->setToolboxAdjustmentValue ("spray-force", tc->force * 100);
+ ret = TRUE;
+ }
+ break;
+ case GDK_Down:
+ case GDK_KP_Down:
+ if (!MOD__CTRL_ONLY) {
+
+ tc->scale -= 0.05;
+ if (tc->scale < 0.0)
+ tc->scale = 0.0;
+ //desktop->setToolboxAdjustmentValue ("spray-force", tc->force * 100);
+
+ ret = TRUE;
+
+ }
+ break;
+ case GDK_Right:
+ case GDK_KP_Right:
+ if (!MOD__CTRL_ONLY) {
+ tc->width += 0.01;
+ if (tc->width > 1.0)
+ tc->width = 1.0;
+ desktop->setToolboxAdjustmentValue ("altx-spray", tc->width * 100); // the same spinbutton is for alt+x
+ sp_spray_update_area(tc);
+ ret = TRUE;
+ }
+ break;
+ case GDK_Left:
+ case GDK_KP_Left:
+ if (!MOD__CTRL_ONLY) {
+ tc->width -= 0.01;
+ if (tc->width < 0.01)
+ tc->width = 0.01;
+ desktop->setToolboxAdjustmentValue ("altx-spray", tc->width * 100);
+ sp_spray_update_area(tc);
+ ret = TRUE;
+ }
+ break;
+ case GDK_Home:
+ case GDK_KP_Home:
+ tc->width = 0.01;
+ desktop->setToolboxAdjustmentValue ("altx-spray", tc->width * 100);
+ sp_spray_update_area(tc);
+ ret = TRUE;
+ break;
+ case GDK_End:
+ case GDK_KP_End:
+ tc->width = 1.0;
+ desktop->setToolboxAdjustmentValue ("altx-spray", tc->width * 100);
+ sp_spray_update_area(tc);
+ ret = TRUE;
+ break;
+ case GDK_x:
+ case GDK_X:
+ if (MOD__ALT_ONLY) {
+ desktop->setToolboxFocusTo ("altx-spray");
+ ret = TRUE;
+ }
+ break;
+
+ case GDK_Shift_L:
+ case GDK_Shift_R:
+ sp_spray_update_cursor(tc, true);
+ break;
+/*Set the scale to 1*/
+ case GDK_Control_L:
+ tc->scale=1;
+ default:
+ break;
+ }
+ break;
+
+ case GDK_KEY_RELEASE: {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ switch (get_group0_keyval(&event->key)) {
+ case GDK_Shift_L:
+ case GDK_Shift_R:
+ sp_spray_update_cursor(tc, false);
+ break;
+ case GDK_Control_L:
+ case GDK_Control_R:
+ sp_spray_switch_mode (tc, prefs->getInt("/tools/spray/mode"), MOD__SHIFT);
+ tc->_message_context->clear();
+ break;
+ default:
+ sp_spray_switch_mode (tc, prefs->getInt("/tools/spray/mode"), MOD__SHIFT);
+ break;
+ }
+ }
+
+ default:
+ break;
+ }
+
+ if (!ret) {
+ if (((SPEventContextClass *) parent_class)->root_handler) {
+ ret = ((SPEventContextClass *) parent_class)->root_handler(event_context, event);
+ }
+ }
+
+ return ret;
+}
+
+/*
+ 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 :
+
diff --git a/src/spray-context.h b/src/spray-context.h
new file mode 100644
index 000000000..f8822ce39
--- /dev/null
+++ b/src/spray-context.h
@@ -0,0 +1,125 @@
+#ifndef __SP_SPRAY_CONTEXT_H__
+#define __SP_SPRAY_CONTEXT_H__
+
+/*
+ * Spray Tool
+ *
+ * Authors:
+ * Pierre-Antoine MARC
+ * Pierre CACLIN
+ * Aurel-Aimé MARMION
+ * Julien LERAY
+ * Benoît LAVORATA
+ * Vincent MONTAGNE
+ * Pierre BARBRY-BLOT
+ *
+ * Copyright (C) 2009 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "event-context.h"
+#include <display/display-forward.h>
+#include <libnr/nr-point.h>
+//#include "ui/widget/spray-option.h"
+#include "ui/dialog/dialog.h"
+
+#define SP_TYPE_SPRAY_CONTEXT (sp_spray_context_get_type())
+#define SP_SPRAY_CONTEXT(o) (GTK_CHECK_CAST((o), SP_TYPE_SPRAY_CONTEXT, SPSprayContext))
+#define SP_SPRAY_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_CAST((k), SP_TYPE_SPRAY_CONTEXT, SPSprayContextClass))
+#define SP_IS_SPRAY_CONTEXT(o) (GTK_CHECK_TYPE((o), SP_TYPE_SPRAY_CONTEXT))
+#define SP_IS_SPRAY_CONTEXT_CLASS(k) (GTK_CHECK_CLASS_TYPE((k), SP_TYPE_SPRAY_CONTEXT))
+
+class SPSprayContext;
+class SPSprayContextClass;
+
+namespace Inkscape {
+ namespace UI {
+ namespace Dialog {
+ class Dialog;
+ }
+ }
+}
+
+
+#define SAMPLING_SIZE 8 /* fixme: ?? */
+
+#define TC_MIN_PRESSURE 0.0
+#define TC_MAX_PRESSURE 1.0
+#define TC_DEFAULT_PRESSURE 0.35
+
+enum {
+ SPRAY_MODE_COPY,
+ SPRAY_MODE_CLONE,
+ SPRAY_MODE_SINGLE_PATH,
+ SPRAY_OPTION,
+};
+
+struct SPSprayContext
+{
+ SPEventContext event_context;
+ //Inkscape::UI::Dialog::Dialog *dialog_option;//Attribut de type SprayOptionClass, localisé dans scr/ui/dialog
+ /* extended input data */
+ gdouble pressure;
+
+ /* attributes */
+ guint dragging : 1; /* mouse state: mouse is dragging */
+ guint usepressure : 1;
+ guint usetilt : 1;
+ bool usetext ;
+
+ double width;
+ double ratio;
+ double tilt;
+ double rot_min;
+ double rot_max;
+ double force;
+ double population;
+ double scale_min;
+ double scale_max;
+ double scale;
+ double mean;
+ double standard_deviation;
+
+ gint distrib;
+
+ gint mode;
+
+ Inkscape::MessageContext *_message_context;
+
+ bool is_drawing;
+
+ bool is_dilating;
+ bool has_dilated;
+ Geom::Point last_push;
+ SPCanvasItem *dilate_area;
+
+ bool do_h;
+ bool do_s;
+ bool do_l;
+ bool do_o;
+
+ sigc::connection style_set_connection;
+};
+
+struct SPSprayContextClass
+{
+ SPEventContextClass parent_class;
+};
+
+GtkType sp_spray_context_get_type(void);
+
+
+#endif
+
+/*
+ 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 :
+
diff --git a/src/style.cpp b/src/style.cpp
index 0b946f348..111018c2a 100644
--- a/src/style.cpp
+++ b/src/style.cpp
@@ -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;
+ }
}
}
}
diff --git a/src/svg/stringstream.cpp b/src/svg/stringstream.cpp
index 6b9e512a1..431d5d97b 100644
--- a/src/svg/stringstream.cpp
+++ b/src/svg/stringstream.cpp
@@ -66,6 +66,31 @@ operator<<(Inkscape::SVGOStringStream &os, Geom::Point const & p)
return os;
}
+Inkscape::SVGIStringStream::SVGIStringStream():std::istringstream()
+{
+ this->imbue(std::locale::classic());
+ this->setf(std::ios::showpoint);
+
+ /* This one is (currently) needed though, as we currently use ostr.precision as a sort of
+ variable for storing the desired precision: see our two precision methods and our operator<<
+ methods for float and double. */
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ this->precision(prefs->getInt("/options/svgoutput/numericprecision", 8));
+}
+
+Inkscape::SVGIStringStream::SVGIStringStream(const std::string& str):std::istringstream(str)
+{
+ this->imbue(std::locale::classic());
+ this->setf(std::ios::showpoint);
+
+ /* This one is (currently) needed though, as we currently use ostr.precision as a sort of
+ variable for storing the desired precision: see our two precision methods and our operator<<
+ methods for float and double. */
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ this->precision(prefs->getInt("/options/svgoutput/numericprecision", 8));
+}
+
+
/*
Local Variables:
mode:c++
diff --git a/src/svg/stringstream.h b/src/svg/stringstream.h
index 5fbf1976c..60ed74ecb 100644
--- a/src/svg/stringstream.h
+++ b/src/svg/stringstream.h
@@ -74,6 +74,13 @@ public:
}
};
+class SVGIStringStream:public std::istringstream {
+
+public:
+ SVGIStringStream();
+ SVGIStringStream(const std::string &str);
+};
+
}
Inkscape::SVGOStringStream &operator<<(Inkscape::SVGOStringStream &os, float d);
diff --git a/src/svg/svg-color.cpp b/src/svg/svg-color.cpp
index a8e24c311..ff5a6c2d3 100644
--- a/src/svg/svg-color.cpp
+++ b/src/svg/svg-color.cpp
@@ -35,6 +35,16 @@
#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,40 @@ sp_svg_create_color_hash()
return colors;
}
+//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];
+ }
+ }
+}
+
/*
* Some discussion at http://markmail.org/message/bhfvdfptt25kgtmj
* Allowed ASCII first characters: ':', 'A'-'Z', '_', 'a'-'z'
@@ -536,7 +580,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 +598,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++
diff --git a/src/svg/svg-color.h b/src/svg/svg-color.h
index 692c1dd00..f4e534652 100644
--- a/src/svg/svg-color.h
+++ b/src/svg/svg-color.h
@@ -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
index 000000000..305133ed3
--- /dev/null
+++ b/src/svg/svg-device-color.h
@@ -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 :
diff --git a/src/svg/svg-length.cpp b/src/svg/svg-length.cpp
index 942f74d46..94f1cf312 100644
--- a/src/svg/svg-length.cpp
+++ b/src/svg/svg-length.cpp
@@ -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;
diff --git a/src/text-context.cpp b/src/text-context.cpp
index e6f4f083b..fc28dc8e4 100644
--- a/src/text-context.cpp
+++ b/src/text-context.cpp
@@ -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 {
diff --git a/src/text-editing.cpp b/src/text-editing.cpp
index 2bdee4c10..e93ebdffa 100644
--- a/src/text-editing.cpp
+++ b/src/text-editing.cpp
@@ -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++
diff --git a/src/text-editing.h b/src/text-editing.h
index 83ddae77f..7e845dbc9 100644
--- a/src/text-editing.h
+++ b/src/text-editing.h
@@ -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
diff --git a/src/tools-switch.cpp b/src/tools-switch.cpp
index 7902a7988..6c53ce61c 100644
--- a/src/tools-switch.cpp
+++ b/src/tools-switch.cpp
@@ -28,6 +28,7 @@
#include "select-context.h"
#include "node-context.h"
#include "tweak-context.h"
+#include "spray-context.h"
#include "sp-path.h"
#include "rect-context.h"
#include "sp-rect.h"
@@ -62,6 +63,7 @@ static char const *const tool_names[] = {
"/tools/select",
"/tools/nodes",
"/tools/tweak",
+ "/tools/spray",
"/tools/shapes/rect",
"/tools/shapes/3dbox",
"/tools/shapes/arc",
@@ -135,6 +137,12 @@ tools_switch(SPDesktop *dt, int num)
inkscape_eventcontext_set(sp_desktop_event_context(dt));
dt->tipsMessageContext()->set(Inkscape::NORMAL_MESSAGE, _("To tweak a path by pushing, select it and drag over it."));
break;
+ case TOOLS_SPRAY:
+ dt->set_event_context(SP_TYPE_SPRAY_CONTEXT, tool_names[num]);
+ dt->activate_guides(true);
+ inkscape_eventcontext_set(sp_desktop_event_context(dt));
+ dt->tipsMessageContext()->set(Inkscape::NORMAL_MESSAGE, _("To spray a path by pushing, select it and drag over it."));
+ break;
case TOOLS_SHAPES_RECT:
dt->set_event_context(SP_TYPE_RECT_CONTEXT, tool_names[num]);
dt->activate_guides(false);
diff --git a/src/tools-switch.h b/src/tools-switch.h
index 36dd8f80b..4cc9aa93d 100644
--- a/src/tools-switch.h
+++ b/src/tools-switch.h
@@ -19,6 +19,7 @@ enum {
TOOLS_SELECT,
TOOLS_NODES,
TOOLS_TWEAK,
+ TOOLS_SPRAY,
TOOLS_SHAPES_RECT,
TOOLS_SHAPES_3DBOX,
TOOLS_SHAPES_ARC,
diff --git a/src/ui/dialog/Makefile_insert b/src/ui/dialog/Makefile_insert
index 565a24ecc..fac5bad80 100644
--- a/src/ui/dialog/Makefile_insert
+++ b/src/ui/dialog/Makefile_insert
@@ -71,8 +71,12 @@ 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 \
+ ui/dialog/spray-option.h \
ui/dialog/svg-fonts-dialog.cpp \
ui/dialog/svg-fonts-dialog.h \
ui/dialog/swatches.cpp \
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index a54f83758..024d4b2f1 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -807,7 +807,7 @@ AlignAndDistribute::AlignAndDistribute()
_("Align left edges"),
0, 1);
addAlignButton(INKSCAPE_ICON_ALIGN_HORIZONTAL_CENTER,
- _("Center objects horizontally"),
+ _("Center on vertical axis"),
0, 2);
addAlignButton(INKSCAPE_ICON_ALIGN_HORIZONTAL_RIGHT,
_("Align right sides"),
diff --git a/src/ui/dialog/dialog-manager.cpp b/src/ui/dialog/dialog-manager.cpp
index d1b818d23..2116d46c3 100644
--- a/src/ui/dialog/dialog-manager.cpp
+++ b/src/ui/dialog/dialog-manager.cpp
@@ -40,6 +40,8 @@
#include "ui/dialog/icon-preview.h"
#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
@@ -88,7 +90,6 @@ DialogManager::DialogManager() {
int dialogs_type = prefs->getIntLimited("/options/dialogtype/value", DOCK, 0, 1);
if (dialogs_type == FLOATING) {
-
registerFactory("AlignAndDistribute", &create<AlignAndDistribute, FloatingBehavior>);
registerFactory("DocumentMetadata", &create<DocumentMetadata, FloatingBehavior>);
registerFactory("DocumentProperties", &create<DocumentProperties, FloatingBehavior>);
@@ -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>);
@@ -111,7 +113,8 @@ DialogManager::DialogManager() {
registerFactory("Trace", &create<TraceDialog, FloatingBehavior>);
registerFactory("Transformation", &create<Transformation, FloatingBehavior>);
registerFactory("UndoHistory", &create<UndoHistory, FloatingBehavior>);
- registerFactory("InputDevices", &create<InputDialog, FloatingBehavior>);
+ registerFactory("InputDevices", &create<InputDialog, FloatingBehavior>);
+ registerFactory("SprayOptionClass", &create<SprayOptionClass, FloatingBehavior>);
} else {
@@ -128,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>);
@@ -138,6 +142,7 @@ DialogManager::DialogManager() {
registerFactory("Transformation", &create<Transformation, DockBehavior>);
registerFactory("UndoHistory", &create<UndoHistory, DockBehavior>);
registerFactory("InputDevices", &create<InputDialog, DockBehavior>);
+ registerFactory("SprayOptionClass", &create<SprayOptionClass, DockBehavior>);
}
}
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index 7e31b874a..982fb3415 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -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
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index c7f505046..1345ffe55 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -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
*
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index c7dc789ca..90516063c 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -449,6 +449,12 @@ void InkscapePreferences::initPageTools()
AddSelcueCheckbox(_page_tweak, "/tools/tweak", true);
AddGradientCheckbox(_page_tweak, "/tools/tweak", false);
+ //Spray
+ this->AddPage(_page_spray, _("Spray"), iter_tools, PREFS_PAGE_TOOLS_SPRAY);
+ this->AddNewObjectsStyle(_page_spray, "/tools/spray", _("Paint objects with:"));
+ AddSelcueCheckbox(_page_spray, "/tools/spray", true);
+ AddGradientCheckbox(_page_spray, "/tools/spray", false);
+
//Zoom
this->AddPage(_page_zoom, _("Zoom"), iter_tools, PREFS_PAGE_TOOLS_ZOOM);
AddSelcueCheckbox(_page_zoom, "/tools/zoom", true);
@@ -470,15 +476,15 @@ void InkscapePreferences::initPageTools()
this->AddNewObjectsStyle(_page_3dbox, "/tools/shapes/3dbox");
this->AddConvertGuidesCheckbox(_page_3dbox, "/tools/shapes/3dbox", true);
- //ellipse
+ //Ellipse
this->AddPage(_page_ellipse, _("Ellipse"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_ELLIPSE);
this->AddNewObjectsStyle(_page_ellipse, "/tools/shapes/arc");
- //star
+ //Star
this->AddPage(_page_star, _("Star"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_STAR);
this->AddNewObjectsStyle(_page_star, "/tools/shapes/star");
- //spiral
+ //Spiral
this->AddPage(_page_spiral, _("Spiral"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_SPIRAL);
this->AddNewObjectsStyle(_page_spiral, "/tools/shapes/spiral");
@@ -522,6 +528,11 @@ void InkscapePreferences::initPageTools()
this->AddPage(_page_text, _("Text"), iter_tools, PREFS_PAGE_TOOLS_TEXT);
this->AddSelcueCheckbox(_page_text, "/tools/text", true);
this->AddGradientCheckbox(_page_text, "/tools/text", true);
+ {
+ PrefCheckButton* cb = Gtk::manage( new PrefCheckButton);
+ cb->init ( _("Show font samples in the drop-down list"), "/tools/text/show_sample_in_list", 1);
+ _page_text.add_line( false, "", *cb, "", _("Show font samples alongside font names in the drop-down list in Text bar"));
+ }
this->AddNewObjectsStyle(_page_text, "/tools/text");
//Gradient
@@ -730,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);
}
diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h
index 364b0eb1d..16e62df59 100644
--- a/src/ui/dialog/inkscape-preferences.h
+++ b/src/ui/dialog/inkscape-preferences.h
@@ -43,6 +43,7 @@ enum {
PREFS_PAGE_TOOLS_SELECTOR,
PREFS_PAGE_TOOLS_NODE,
PREFS_PAGE_TOOLS_TWEAK,
+ PREFS_PAGE_TOOLS_SPRAY,
PREFS_PAGE_TOOLS_ZOOM,
PREFS_PAGE_TOOLS_SHAPES,
PREFS_PAGE_TOOLS_SHAPES_RECT,
@@ -118,7 +119,7 @@ protected:
_page_clones, _page_mask, _page_transforms, _page_filters, _page_select,
_page_importexport, _page_cms, _page_grids, _page_svgoutput, _page_misc,
_page_ui, _page_save, _page_bitmaps, _page_spellcheck;
- DialogPage _page_selector, _page_node, _page_tweak, _page_zoom, _page_shapes, _page_pencil, _page_pen,
+ DialogPage _page_selector, _page_node, _page_tweak, _page_spray, _page_zoom, _page_shapes, _page_pencil, _page_pen,
_page_calligraphy, _page_text, _page_gradient, _page_connector, _page_dropper, _page_lpetool;
DialogPage _page_rectangle, _page_3dbox, _page_ellipse, _page_star, _page_spiral, _page_paintbucket, _page_eraser;
@@ -170,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
index 000000000..f4d83c271
--- /dev/null
+++ b/src/ui/dialog/print-colors-preview-dialog.cpp
@@ -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
index 000000000..246908556
--- /dev/null
+++ b/src/ui/dialog/print-colors-preview-dialog.h
@@ -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
diff --git a/src/ui/dialog/print.cpp b/src/ui/dialog/print.cpp
index f9db265d6..60cab06a2 100644
--- a/src/ui/dialog/print.cpp
+++ b/src/ui/dialog/print.cpp
@@ -31,11 +31,15 @@
-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);
diff --git a/src/ui/dialog/spray-option.cpp b/src/ui/dialog/spray-option.cpp
new file mode 100644
index 000000000..a9e037381
--- /dev/null
+++ b/src/ui/dialog/spray-option.cpp
@@ -0,0 +1,397 @@
+/*Julien LERAY (julien.leray@ecl2010.ec-lyon.fr), interface for the spray tool*/
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gtkmm/spinbutton.h>
+
+#include "desktop-handles.h"
+#include "unclump.h"
+#include "document.h"
+#include "enums.h"
+#include "graphlayout/graphlayout.h"
+#include "inkscape.h"
+#include "macros.h"
+#include "node-context.h"
+#include "preferences.h"
+#include "removeoverlap/removeoverlap.h"
+#include "selection.h"
+#include "shape-editor.h"
+#include "sp-flowtext.h"
+#include "sp-item-transform.h"
+#include "sp-text.h"
+#include "text-editing.h"
+#include "tools-switch.h"
+#include "ui/icon-names.h"
+#include "util/glib-list-iterators.h"
+#include "verbs.h"
+#include "widgets/icon.h"
+
+#include "spray-option.h"
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+
+//Classes qui permettent de créer les environnements Gaussienne, Witdh...
+
+
+
+class Action {
+public:
+ Action(const Glib::ustring &id,
+ const Glib::ustring &/*tiptext*/,
+ guint /*row*/,
+ guint /*column*/,
+ Gtk::Table &parent,
+ 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;
+};
+
+class ActionE : public Action {
+private:
+ Gtk::Label _Label;
+ Gtk::SpinButton _Gap;
+ guint _min, _max;
+ Glib::ustring _pref_path;
+
+public:
+ ActionE(const Glib::ustring &id,
+ const Glib::ustring &tiptext,
+ guint row, guint column,
+ SprayOptionClass &dialog,
+ guint min, guint max,
+ Glib::ustring const &pref_path ):
+ Action(id, tiptext, row, column,
+ dialog._Table(), dialog.tooltips(), dialog),
+ _min(min),
+ _max(max),
+ _pref_path(pref_path)
+ {
+ dialog._Table().set_col_spacings(3);
+
+ double increm = ((double)_max - (double)_min)/10;
+ double val_ini = ((double)_max + (double)_min)/2;
+ _Gap.set_digits(1);
+ _Gap.set_size_request(60, -1);
+ _Gap.set_increments(increm , 0);
+ _Gap.set_range(_min, _max);
+ _Gap.set_value(val_ini);
+ dialog.tooltips().set_tip(_Gap,
+ tiptext);
+ _Gap.signal_changed().connect(sigc::mem_fun(*this, &ActionE::on_button_click)); //rajout douteux
+ _Label.set_label(id);
+
+ dialog._Table().attach(_Label, column, column+1, row, row+1, Gtk::FILL, Gtk::FILL);
+ dialog._Table().attach(_Gap, column+1, column+2, row, row+1, Gtk::EXPAND, Gtk::EXPAND);
+ }
+
+ 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,
+ _("Remove overlaps"));
+ }
+
+
+};
+
+class ActionF : public Action {
+private:
+ Gtk::Label _Label;
+ Gtk::Label _Label1;
+ Gtk::Label _Label2;
+ Gtk::SpinButton _Gap1;
+ Gtk::SpinButton _Gap2;
+ Glib::ustring _pref1_path;
+ Glib::ustring _pref2_path;
+
+public:
+ ActionF(const Glib::ustring &id,
+ const Glib::ustring &tiptext,
+ guint row, guint column,
+ SprayOptionClass &dialog,
+ Glib::ustring const &pref1_path,
+ Glib::ustring const &pref2_path ):
+ Action(id, tiptext, row, column,
+ dialog._Table(), dialog.tooltips(), dialog),
+ _pref1_path(pref1_path),
+ _pref2_path(pref2_path)
+ {
+ dialog.F_Table().set_col_spacings(3);
+
+ _Label.set_label(id);
+
+ _Gap1.set_digits(1);
+ _Gap1.set_size_request(60, -1);
+ _Gap1.set_increments(0.1, 0);
+ _Gap1.set_range(0, 10);
+ _Gap1.set_value(1);
+ dialog.tooltips().set_tip(_Gap1,
+ _("Minimum"));
+
+ _Label1.set_label(Q_("Min"));
+
+ _Gap2.set_digits(1);
+ _Gap2.set_size_request(60, -1);
+ _Gap2.set_increments(0.1, 0);
+ _Gap2.set_range(0, 10);
+ _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));
+
+ 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);
+ dialog.F_Table().attach(_Gap1, column+2, column+3, row, row+1, Gtk::EXPAND, Gtk::EXPAND);
+ dialog.F_Table().attach(_Label2, column+3, column+4, row, row+1, Gtk::FILL, Gtk::FILL);
+ dialog.F_Table().attach(_Gap2, column+4, column+5, row, row+1, Gtk::EXPAND, Gtk::EXPAND);
+
+ }
+
+ 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);
+
+ sp_document_done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_CONTEXT_SPRAY,
+ _("Remove overlaps"));
+ }
+
+
+};
+
+
+
+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"));
+
+}
+
+
+
+
+void SprayOptionClass::action() {
+ for (list<Action *>::iterator it = _actionList.begin(); it != _actionList.end(); ++it) {
+ (*it)->on_button_click();
+ }
+ combo_action();
+}
+
+
+
+
+
+
+void on_selection_changed(Inkscape::Application */*inkscape*/, Inkscape::Selection */*selection*/, SprayOptionClass *daad)
+{
+ daad->randomize_bbox = Geom::OptRect();
+}
+
+/////////////////////////////////////////////////////////
+//Construction de l'interface
+/////////////////////////////////////////////////////////
+
+
+SprayOptionClass::SprayOptionClass()
+ : UI::Widget::Panel ("", "/dialogs/spray", SP_VERB_DIALOG_SPRAY_OPTION),
+ _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),
+ _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(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));
+
+ _anchorBox.pack_start(_anchorLabel);
+ _anchorBox.pack_start(_combo);
+
+ _gaussianBox.pack_start(_anchorBox);
+
+
+ _distributionBox.pack_start(_gaussianBox);
+ _distributionFrame.add(_distributionBox);
+
+
+ //Hbox Random
+ 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);
+
+ //Hbox Cursor
+ 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);
+
+ //Implementation dans la Vbox Cursor
+ _VBox.pack_start(_HBox);
+ _Frame.add(_VBox);
+
+ 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(_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();
+
+
+
+}
+
+SprayOptionClass::~SprayOptionClass()
+{
+ sp_signal_disconnect_by_data (G_OBJECT (INKSCAPE), this);
+
+ for (std::list<Action *>::iterator it = _actionList.begin();
+ it != _actionList.end();
+ it ++)
+ delete *it;
+}
+
+
+
+
+
+
+
+//Fonctions qui lient la demande d'ajout d'une interface graphique à l'action correspondante
+
+void SprayOptionClass::addEButton(const Glib::ustring &id,
+ const Glib::ustring &tiptext,
+ guint row, guint column,
+ guint min, guint max,
+ Glib::ustring const &pref_path)
+{
+ _actionList.push_back( new ActionE(id, tiptext,row, column,*this,min ,max, pref_path ));
+}
+
+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)
+{
+ _actionList.push_back( new ActionF(id, tiptext,row, column,*this,pref1_path, pref2_path ));
+}
+
+
+
+
+
+SprayOptionClass &SprayOptionClass::get_SprayOptionClass()
+{
+ return *this;
+}
+
+} // namespace Dialog
+} // namespace UI
+} // namespace Inkscape
+
+/*
+ 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 :
diff --git a/src/ui/dialog/spray-option.h b/src/ui/dialog/spray-option.h
new file mode 100644
index 000000000..42090a120
--- /dev/null
+++ b/src/ui/dialog/spray-option.h
@@ -0,0 +1,145 @@
+
+/*Julien LERAY (julien.leray@ecl2010.ec-lyon.fr), interface for the spray tool*/
+
+#ifndef INKSCAPE_UI_DIALOG_SPRAY_OPTION_H
+#define INKSCAPE_UI_DIALOG_SPRAY_OPTION_H
+
+#include <gtkmm/notebook.h>
+#include <glibmm/i18n.h>
+
+#include <list>
+#include <gtkmm/frame.h>
+#include <gtkmm/tooltips.h>
+#include <gtkmm/comboboxtext.h>
+#include <gtkmm/table.h>
+#include <gtkmm/buttonbox.h>
+#include <gtkmm/label.h>
+#include "libnr/nr-dim2.h"
+#include "libnr/nr-rect.h"
+
+
+#include "ui/widget/panel.h"
+#include "ui/widget/notebook-page.h"
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gtkmm/spinbutton.h>
+#include "desktop-handles.h"
+#include "unclump.h"
+#include "document.h"
+#include "enums.h"
+#include "graphlayout/graphlayout.h"
+#include "inkscape.h"
+#include "macros.h"
+#include "node-context.h"
+#include "preferences.h"
+#include "removeoverlap/removeoverlap.h"
+#include "selection.h"
+#include "shape-editor.h"
+#include "sp-flowtext.h"
+#include "sp-item-transform.h"
+#include "sp-text.h"
+#include "text-editing.h"
+#include "tools-switch.h"
+#include "ui/icon-names.h"
+#include "util/glib-list-iterators.h"
+#include "verbs.h"
+#include "widgets/icon.h"
+
+#include "spray-context.h"
+#include "verbs.h"
+
+#include <iostream>
+using namespace std;
+
+using namespace Inkscape::UI::Widget;
+
+class SPItem;
+
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+class Action;
+
+class SprayOptionClass : public Widget::Panel {
+
+private:
+
+ SprayOptionClass(SprayOptionClass const &d);
+ SprayOptionClass& operator=(SprayOptionClass const &d);
+
+public:
+ 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();
+ Geom::OptRect randomize_bbox;
+
+ SprayOptionClass &get_SprayOptionClass();
+
+protected:
+
+ void addGaussianButton(guint row, guint col);
+ void addEButton(const Glib::ustring &id, const Glib::ustring &tiptext, guint row, guint column,
+ guint min, guint max, const Glib::ustring &pref_path);
+ void addFButton(const Glib::ustring &id, const Glib::ustring &tiptext, guint row, guint column,
+ const Glib::ustring &pref1_path, const Glib::ustring &pref2_path);
+
+ std::list<Action *> _actionList;
+ 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;
+ 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;
+ Gtk::Label _gaussLabel;
+ Gtk::Label _Label;
+ Gtk::Label _FLabel;
+ Gtk::CheckButton _unif;
+ Gtk::CheckButton _gauss;
+ Gtk::ComboBoxText _combo;
+ Gtk::Tooltips _tooltips;
+};
+
+
+} // namespace Dialog
+} // namespace UI
+} // namespace Inkscape
+
+#endif // INKSCAPE_UI_DIALOG_ALIGN_AND_DISTRIBUTE_H
+
+/*
+ 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 :
+
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index 5f86196b1..cb22e029b 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -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.
diff --git a/src/ui/dialog/svg-fonts-dialog.h b/src/ui/dialog/svg-fonts-dialog.h
index e6042ed42..e819187a1 100644
--- a/src/ui/dialog/svg-fonts-dialog.h
+++ b/src/ui/dialog/svg-fonts-dialog.h
@@ -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.
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index 1f708e3de..450d4202d 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -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 {
diff --git a/src/ui/icon-names.h b/src/ui/icon-names.h
index f9a6f2a7d..76e76ea34 100644
--- a/src/ui/icon-names.h
+++ b/src/ui/icon-names.h
@@ -56,10 +56,18 @@
"color-picker"
#define INKSCAPE_ICON_COLOR_REMOVE \
"color-remove"
+#define INKSCAPE_ICON_CONNECTOR_EDIT \
+ "connector-edit"
#define INKSCAPE_ICON_CONNECTOR_AVOID \
"connector-avoid"
#define INKSCAPE_ICON_CONNECTOR_IGNORE \
"connector-ignore"
+#define INKSCAPE_ICON_CONNECTOR_ORTHOGONAL \
+ "connector-orthogonal"
+#define INKSCAPE_ICON_CONNECTOR_NEW_CONNPOINT \
+ "connector-new-connpoint"
+#define INKSCAPE_ICON_CONNECTOR_REMOVE_CONNPOINT \
+ "connector-remove-connpoint"
#define INKSCAPE_ICON_DIALOG_ALIGN_AND_DISTRIBUTE \
"dialog-align-and-distribute"
#define INKSCAPE_ICON_DIALOG_FILL_AND_STROKE \
@@ -456,6 +464,14 @@
"snap-nodes-smooth"
#define INKSCAPE_ICON_SNAP_PAGE \
"snap-page"
+#define INKSCAPE_ICON_SPRAY_COPY_MODE \
+ "spray-copy-mode"
+#define INKSCAPE_ICON_SPRAY_CLONE_MODE \
+ "spray-clone-mode"
+#define INKSCAPE_ICON_SPRAY_UNION_MODE \
+ "spray-union-mode"
+#define INKSCAPE_ICON_DIALOG_SPRAY_OPTIONS \
+ "dialog-spray-options"
#define INKSCAPE_ICON_STROKE_CAP_BUTT \
"stroke-cap-butt"
#define INKSCAPE_ICON_STROKE_CAP_ROUND \
@@ -488,6 +504,8 @@
"tool-pointer"
#define INKSCAPE_ICON_TOOL_TWEAK \
"tool-tweak"
+#define INKSCAPE_ICON_TOOL_SPRAY \
+ "tool-spray"
#define INKSCAPE_ICON_TRANSFORM_AFFECT_GRADIENT \
"transform-affect-gradient"
#define INKSCAPE_ICON_TRANSFORM_AFFECT_PATTERN \
diff --git a/src/ui/view/edit-widget.cpp b/src/ui/view/edit-widget.cpp
index 770a9bf87..d34b18771 100644
--- a/src/ui/view/edit-widget.cpp
+++ b/src/ui/view/edit-widget.cpp
@@ -228,6 +228,12 @@ EditWidget::onDialogAlignAndDistribute()
}
void
+EditWidget::onDialogSprayOptionClass()
+{
+ _dlg_mgr.showDialog("SprayOptionClass");
+}
+
+void
EditWidget::onDialogDocumentProperties()
{
// manage (Inkscape::UI::Dialog::DocumentPreferences::create());
diff --git a/src/ui/view/edit-widget.h b/src/ui/view/edit-widget.h
index 2bb708305..452641e80 100644
--- a/src/ui/view/edit-widget.h
+++ b/src/ui/view/edit-widget.h
@@ -70,6 +70,7 @@ public:
void onDialogAbout();
void onDialogAlignAndDistribute();
+ void onDialogSprayOptionClass();
void onDialogInkscapePreferences();
void onDialogDialog();
void onDialogDocumentProperties();
diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp
index 02688a55e..68f26792a 100644
--- a/src/ui/widget/page-sizer.cpp
+++ b/src/ui/widget/page-sizer.cpp
@@ -188,6 +188,26 @@ static PaperSizeRec const inkscape_papers[] = {
{ "Business Card (US)", 2, 3.5, SP_UNIT_IN },
{ "Business Card (Europe)", 55, 85, SP_UNIT_MM },
{ "Business Card (Aus/NZ)", 55, 90, SP_UNIT_MM },
+
+ // Start Arch Series List
+
+
+ { "Arch A", 9, 12, SP_UNIT_IN }, // 229 x 305 mm
+ { "Arch B", 12, 18, SP_UNIT_IN }, // 305 x 457 mm
+ { "Arch C", 18, 24, SP_UNIT_IN }, // 457 x 610 mm
+ { "Arch D", 24, 36, SP_UNIT_IN }, // 610 x 914 mm
+ { "Arch E", 36, 48, SP_UNIT_IN }, // 914 x 1219 mm
+ { "Arch E1", 30, 42, SP_UNIT_IN }, // 762 x 1067 mm
+
+ /*
+ * The above list of Arch sizes were taken from the following site:
+ * http://en.wikipedia.org/wiki/Paper_size
+ * Further detail can be found at http://www.ansi.org
+ * Sizes are assumed to be arbitrary rounding to MM unless shown to be otherwise
+ * No conflicting information was found regarding sizes in MM
+ * September 2009 - DAK
+ */
+
{ NULL, 0, 0, SP_UNIT_PX },
};
diff --git a/src/ui/widget/spin-slider.cpp b/src/ui/widget/spin-slider.cpp
index b610c1ee6..e3e73a51f 100644
--- a/src/ui/widget/spin-slider.cpp
+++ b/src/ui/widget/spin-slider.cpp
@@ -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
*
diff --git a/src/verbs.cpp b/src/verbs.cpp
index 29d24c101..6f86c3cce 100644
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
@@ -1464,6 +1464,9 @@ ContextVerb::perform(SPAction *action, void *data, void */*pdata*/)
case SP_VERB_CONTEXT_TWEAK:
tools_switch(dt, TOOLS_TWEAK);
break;
+ case SP_VERB_CONTEXT_SPRAY:
+ tools_switch(dt, TOOLS_SPRAY);
+ break;
case SP_VERB_CONTEXT_RECT:
tools_switch(dt, TOOLS_SHAPES_RECT);
break;
@@ -1525,6 +1528,10 @@ ContextVerb::perform(SPAction *action, void *data, void */*pdata*/)
prefs->setInt("/dialogs/preferences/page", PREFS_PAGE_TOOLS_TWEAK);
dt->_dlg_mgr->showDialog("InkscapePreferences");
break;
+ case SP_VERB_CONTEXT_SPRAY_PREFS:
+ prefs->setInt("/dialogs/preferences/page", PREFS_PAGE_TOOLS_SPRAY);
+ dt->_dlg_mgr->showDialog("InkscapePreferences");
+ break;
case SP_VERB_CONTEXT_RECT_PREFS:
prefs->setInt("/dialogs/preferences/page", PREFS_PAGE_TOOLS_SHAPES_RECT);
dt->_dlg_mgr->showDialog("InkscapePreferences");
@@ -1742,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;
@@ -1797,6 +1807,9 @@ DialogVerb::perform(SPAction *action, void *data, void */*pdata*/)
case SP_VERB_DIALOG_ALIGN_DISTRIBUTE:
dt->_dlg_mgr->showDialog("AlignAndDistribute");
break;
+ case SP_VERB_DIALOG_SPRAY_OPTION:
+ dt->_dlg_mgr->showDialog("SprayOptionClass");
+ break;
case SP_VERB_DIALOG_TEXT:
sp_text_edit_dialog();
break;
@@ -1861,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;
}
@@ -2503,6 +2519,8 @@ Verb *Verb::_base_verbs[] = {
N_("Edit paths by nodes"), INKSCAPE_ICON_TOOL_NODE_EDITOR),
new ContextVerb(SP_VERB_CONTEXT_TWEAK, "ToolTweak", N_("Tweak"),
N_("Tweak objects by sculpting or painting"), INKSCAPE_ICON_TOOL_TWEAK),
+ new ContextVerb(SP_VERB_CONTEXT_SPRAY, "ToolSpray", N_("Spray"),
+ N_("Spray objects by sculpting or painting"), INKSCAPE_ICON_TOOL_SPRAY),
new ContextVerb(SP_VERB_CONTEXT_RECT, "ToolRect", N_("Rectangle"),
N_("Create rectangles and squares"), INKSCAPE_ICON_DRAW_RECTANGLE),
new ContextVerb(SP_VERB_CONTEXT_3DBOX, "Tool3DBox", N_("3D Box"),
@@ -2544,6 +2562,8 @@ Verb *Verb::_base_verbs[] = {
N_("Open Preferences for the Node tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_TWEAK_PREFS, "TweakPrefs", N_("Tweak Tool Preferences"),
N_("Open Preferences for the Tweak tool"), NULL),
+ new ContextVerb(SP_VERB_CONTEXT_SPRAY_PREFS, "SprayPrefs", N_("Spray Tool Preferences"),
+ N_("Open Preferences for the Spray tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_RECT_PREFS, "RectPrefs", N_("Rectangle Preferences"),
N_("Open Preferences for the Rectangle tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_3DBOX_PREFS, "3DBoxPrefs", N_("3D Box Preferences"),
@@ -2612,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),
@@ -2645,6 +2667,8 @@ Verb *Verb::_base_verbs[] = {
N_("Precisely control objects' transformations"), INKSCAPE_ICON_DIALOG_TRANSFORM),
new DialogVerb(SP_VERB_DIALOG_ALIGN_DISTRIBUTE, "DialogAlignDistribute", N_("_Align and Distribute..."),
N_("Align and distribute objects"), INKSCAPE_ICON_DIALOG_ALIGN_AND_DISTRIBUTE),
+ new DialogVerb(SP_VERB_DIALOG_SPRAY_OPTION, "DialogSprayOption", N_("_Spray options..."),
+ N_("Some options for the spray"), INKSCAPE_ICON_DIALOG_SPRAY_OPTIONS),
new DialogVerb(SP_VERB_DIALOG_UNDO_HISTORY, "DialogUndoHistory", N_("Undo _History..."),
N_("Undo History"), INKSCAPE_ICON_EDIT_UNDO_HISTORY),
new DialogVerb(SP_VERB_DIALOG_TEXT, "DialogText", N_("_Text and Font..."),
@@ -2685,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"),
diff --git a/src/verbs.h b/src/verbs.h
index 87fe27075..d0abcdca2 100644
--- a/src/verbs.h
+++ b/src/verbs.h
@@ -153,6 +153,7 @@ enum {
SP_VERB_CONTEXT_SELECT,
SP_VERB_CONTEXT_NODE,
SP_VERB_CONTEXT_TWEAK,
+ SP_VERB_CONTEXT_SPRAY,
SP_VERB_CONTEXT_RECT,
SP_VERB_CONTEXT_3DBOX,
SP_VERB_CONTEXT_ARC,
@@ -174,6 +175,7 @@ enum {
SP_VERB_CONTEXT_SELECT_PREFS,
SP_VERB_CONTEXT_NODE_PREFS,
SP_VERB_CONTEXT_TWEAK_PREFS,
+ SP_VERB_CONTEXT_SPRAY_PREFS,
SP_VERB_CONTEXT_RECT_PREFS,
SP_VERB_CONTEXT_3DBOX_PREFS,
SP_VERB_CONTEXT_ARC_PREFS,
@@ -212,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,
@@ -227,6 +230,7 @@ enum {
SP_VERB_DIALOG_SWATCHES,
SP_VERB_DIALOG_TRANSFORM,
SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ SP_VERB_DIALOG_SPRAY_OPTION,
SP_VERB_DIALOG_UNDO_HISTORY,
SP_VERB_DIALOG_TEXT,
SP_VERB_DIALOG_XML_EDITOR,
@@ -248,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,
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index e3bf1ae9c..b63992afe 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -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);
}
diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp
index 5824b102c..743502d27 100644
--- a/src/widgets/icon.cpp
+++ b/src/widgets/icon.cpp
@@ -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();
diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp
index c90b55e73..c70d96991 100644
--- a/src/widgets/ruler.cpp
+++ b/src/widgets/ruler.cpp
@@ -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.
diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp
index a10d2380c..3b4b6b711 100644
--- a/src/widgets/sp-color-icc-selector.cpp
+++ b/src/widgets/sp-color-icc-selector.cpp
@@ -17,12 +17,12 @@
#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,
diff --git a/src/widgets/sp-color-notebook.cpp b/src/widgets/sp-color-notebook.cpp
index 779895de4..56b60d120 100644
--- a/src/widgets/sp-color-notebook.cpp
+++ b/src/widgets/sp-color-notebook.cpp
@@ -32,6 +32,10 @@
#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,11 @@ 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);
+
+ //the "too much ink" icon is initially hidden
+ gtk_widget_hide(GTK_WIDGET(_box_toomuchink));
+
+ 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 +521,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];
diff --git a/src/widgets/sp-color-notebook.h b/src/widgets/sp-color-notebook.h
index bf6fb1002..5eb29ac73 100644
--- a/src/widgets/sp-color-notebook.h
+++ b/src/widgets/sp-color-notebook.h
@@ -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;
diff --git a/src/widgets/sp-color-scales.cpp b/src/widgets/sp-color-scales.cpp
index cf06247e7..e41b81e5c 100644
--- a/src/widgets/sp-color-scales.cpp
+++ b/src/widgets/sp-color-scales.cpp
@@ -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 );
diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp
index 174b071f9..6012f4e20 100644
--- a/src/widgets/sp-color-wheel-selector.cpp
+++ b/src/widgets/sp-color-wheel-selector.cpp
@@ -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 ) );
}
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index e0fe9bfd1..436213946 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -86,6 +86,7 @@
#include "../svg/css-ostringstream.h"
#include "../tools-switch.h"
#include "../tweak-context.h"
+#include "../spray-context.h"
#include "../ui/dialog/calligraphic-profile-rename.h"
#include "../ui/icon-names.h"
#include "../ui/widget/style-swatch.h"
@@ -107,6 +108,7 @@ typedef void (*UpdateFunction)(SPDesktop *desktop, SPEventContext *eventcontext,
static void sp_node_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
+static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_zoom_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_star_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
static void sp_arc_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder);
@@ -146,6 +148,7 @@ static struct {
{ "SPSelectContext", "select_tool", SP_VERB_CONTEXT_SELECT, SP_VERB_CONTEXT_SELECT_PREFS},
{ "SPNodeContext", "node_tool", SP_VERB_CONTEXT_NODE, SP_VERB_CONTEXT_NODE_PREFS },
{ "SPTweakContext", "tweak_tool", SP_VERB_CONTEXT_TWEAK, SP_VERB_CONTEXT_TWEAK_PREFS },
+ { "SPSprayContext", "spray_tool", SP_VERB_CONTEXT_SPRAY, SP_VERB_CONTEXT_SPRAY_PREFS },
{ "SPZoomContext", "zoom_tool", SP_VERB_CONTEXT_ZOOM, SP_VERB_CONTEXT_ZOOM_PREFS },
{ "SPRectContext", "rect_tool", SP_VERB_CONTEXT_RECT, SP_VERB_CONTEXT_RECT_PREFS },
{ "Box3DContext", "3dbox_tool", SP_VERB_CONTEXT_3DBOX, SP_VERB_CONTEXT_3DBOX_PREFS },
@@ -181,6 +184,8 @@ static struct {
SP_VERB_INVALID, 0, 0},
{ "SPTweakContext", "tweak_toolbox", 0, sp_tweak_toolbox_prep, "TweakToolbar",
SP_VERB_CONTEXT_TWEAK_PREFS, "/tools/tweak", N_("Color/opacity used for color tweaking")},
+ { "SPSprayContext", "spray_toolbox", 0, sp_spray_toolbox_prep, "SprayToolbar",
+ SP_VERB_CONTEXT_SPRAY_PREFS, "/tools/spray", N_("Color/opacity used for color spraying")},
{ "SPZoomContext", "zoom_toolbox", 0, sp_zoom_toolbox_prep, "ZoomToolbar",
SP_VERB_INVALID, 0, 0},
{ "SPStarContext", "star_toolbox", 0, sp_star_toolbox_prep, "StarToolbar",
@@ -299,6 +304,21 @@ static gchar const * ui_descr =
" <toolitem action='TweakDoO' />"
" </toolbar>"
+ " <toolbar name='SprayToolbar'>"
+ " <toolitem action='SprayModeAction' />"
+ " <separator />"
+ " <toolitem action='SprayWidthAction' />"
+ " <separator />"
+ " <toolitem action='SprayPressureAction' />"
+ " <separator />"
+ " <toolitem action='SprayPopulationAction' />"
+ " <separator />"
+ " <toolitem action='SprayMeanAction' />"
+ " <toolitem action='SprayStandard_deviationAction' />"
+ " <separator />"
+ " <toolitem action='DialogSprayOption' />"
+ " </toolbar>"
+
" <toolbar name='ZoomToolbar'>"
" <toolitem action='ZoomIn' />"
" <toolitem action='ZoomOut' />"
@@ -450,13 +470,18 @@ static gchar const * ui_descr =
" </toolbar>"
" <toolbar name='ConnectorToolbar'>"
+ " <toolitem action='ConnectorEditModeAction' />"
" <toolitem action='ConnectorAvoidAction' />"
" <toolitem action='ConnectorIgnoreAction' />"
+ " <toolitem action='ConnectorOrthogonalAction' />"
+ " <toolitem action='ConnectorCurvatureAction' />"
" <toolitem action='ConnectorSpacingAction' />"
" <toolitem action='ConnectorGraphAction' />"
" <toolitem action='ConnectorLengthAction' />"
" <toolitem action='ConnectorDirectedAction' />"
" <toolitem action='ConnectorOverlapAction' />"
+ " <toolitem action='ConnectorNewConnPointAction' />"
+ " <toolitem action='ConnectorRemoveConnPointAction' />"
" </toolbar>"
"</ui>"
@@ -718,6 +743,7 @@ Glib::RefPtr<Gtk::ActionGroup> create_or_fetch_actions( SPDesktop* desktop )
//SP_VERB_EDIT_TILE,
//SP_VERB_EDIT_UNTILE,
SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ SP_VERB_DIALOG_SPRAY_OPTION,
SP_VERB_DIALOG_DISPLAY,
SP_VERB_DIALOG_FILL_STROKE,
SP_VERB_DIALOG_NAMEDVIEW,
@@ -1627,6 +1653,7 @@ setup_tool_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
" <toolitem action='ToolSelector' />"
" <toolitem action='ToolNode' />"
" <toolitem action='ToolTweak' />"
+ " <toolitem action='ToolSpray' />"
" <toolitem action='ToolZoom' />"
" <toolitem action='ToolRect' />"
" <toolitem action='Tool3DBox' />"
@@ -4372,6 +4399,200 @@ static void sp_tweak_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainAction
//########################
+//## Spray ##
+//########################
+
+static void sp_spray_width_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setDouble( "/tools/spray/width", adj->value );
+}
+
+/*
+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*/ )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setDouble( "/tools/spray/mean", adj->value );
+}
+
+static void sp_spray_standard_deviation_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setDouble( "/tools/spray/standard_deviation", adj->value );
+}
+
+static void sp_spray_pressure_state_changed( GtkToggleAction *act, gpointer /*data*/ )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/tools/spray/usepressure", gtk_toggle_action_get_active(act));
+}
+
+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();
+ prefs->setInt("/tools/spray/mode", mode);
+}
+
+static void sp_spray_population_value_changed( GtkAdjustment *adj, GObject */*tbl*/ )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setDouble( "/tools/spray/population", adj->value );
+}
+
+/*static void spray_toggle_doh (GtkToggleAction *act, gpointer ) {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/tools/spray/doh", gtk_toggle_action_get_active(act));
+}
+static void spray_toggle_dos (GtkToggleAction *act, gpointer ) {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/tools/spray/dos", gtk_toggle_action_get_active(act));
+}
+static void spray_toggle_dol (GtkToggleAction *act, gpointer ) {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/tools/spray/dol", gtk_toggle_action_get_active(act));
+}
+static void spray_toggle_doo (GtkToggleAction *act, gpointer ) {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/tools/spray/doo", gtk_toggle_action_get_active(act));
+}
+*/
+static void sp_spray_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder)
+{
+ Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+
+ {
+ /* Width */
+ 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, 10.0,
+ labels, values, G_N_ELEMENTS(labels),
+ 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 );
+ }
+
+ {
+ /* Mean */
+ gchar const* labels[] = {_("(minimum mean)"), 0, 0, _("(default)"), 0, 0, 0, _("(maximum mean)")};
+ gdouble values[] = {1, 5, 10, 20, 30, 50, 70, 100};
+ EgeAdjustmentAction *eact = create_adjustment_action( "SprayMeanAction",
+ _("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, 10.0,
+ labels, values, G_N_ELEMENTS(labels),
+ 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 );
+ }
+
+ {
+ /* Standard_deviation */
+ gchar const* labels[] = {_("(minimum standard_deviation)"), 0, 0, _("(default)"), 0, 0, 0, _("(maximum standard_deviation)")};
+ gdouble values[] = {1, 5, 10, 20, 30, 50, 70, 100};
+ EgeAdjustmentAction *eact = create_adjustment_action( "SprayStandard_deviationAction",
+ _("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, 10.0,
+ labels, values, G_N_ELEMENTS(labels),
+ 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 );
+ }
+
+ /* Mode */
+ {
+ GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING );
+
+ GtkTreeIter iter;
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Spray with copies"),
+ 1, _("Spray copies of the initial selection"),
+ 2, INKSCAPE_ICON_SPRAY_COPY_MODE,
+ -1 );
+
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Spray with clones"),
+ 1, _("Spray clones of the initial selection"),
+ 2, INKSCAPE_ICON_SPRAY_CLONE_MODE,
+ -1 );
+
+ gtk_list_store_append( model, &iter );
+ gtk_list_store_set( model, &iter,
+ 0, _("Spray single path"),
+ 1, _("Spray objects in a single path"),
+ 2, INKSCAPE_ICON_SPRAY_UNION_MODE,
+ -1 );
+
+ EgeSelectOneAction* act = ege_select_one_action_new( "SprayModeAction", _("Mode"), (""), NULL, GTK_TREE_MODEL(model) );
+ g_object_set( act, "short_label", _("Mode:"), NULL );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(act) );
+ g_object_set_data( holder, "mode_action", act );
+
+ ege_select_one_action_set_appearance( act, "full" );
+ ege_select_one_action_set_radio_action_type( act, INK_RADIO_ACTION_TYPE );
+ g_object_set( G_OBJECT(act), "icon-property", "iconId", NULL );
+ ege_select_one_action_set_icon_column( act, 2 );
+ ege_select_one_action_set_icon_size( act, secondarySize );
+ ege_select_one_action_set_tooltip_column( act, 1 );
+
+ gint mode = prefs->getInt("/tools/spray/mode", 0);
+ ege_select_one_action_set_active( act, mode );
+ g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(sp_spray_mode_changed), holder );
+
+ g_object_set_data( G_OBJECT(holder), "spray_tool_mode", act);
+ }
+
+ { /* Population */
+ 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:"),
+ _("This setting adjusts the number of items sprayed"),
+ "/tools/spray/population", 50,
+ 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, 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 );
+ }
+
+ /* Use Pressure button */
+ {
+ InkToggleAction* act = ink_toggle_action_new( "SprayPressureAction",
+ _("Pressure"),
+ _("Use the pressure of the input device to alter the force of spray action"),
+ "use_pressure",
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_spray_pressure_state_changed), NULL);
+ gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool("/tools/spray/usepressure", true) );
+ }
+}
+
+
+//########################
//## Calligraphy ##
//########################
static void update_presets_list (GObject *tbl)
@@ -4718,7 +4939,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 );
@@ -6352,7 +6573,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;
@@ -6519,27 +6740,35 @@ cell_data_func (GtkCellLayout */*cell_layout*/,
gtk_tree_model_get(tree_model, iter, 0, &family, -1);
gchar *const family_escaped = g_markup_escape_text(family, -1);
- static char const *const sample = _("AaBbCcIiPpQq12369$\342\202\254\302\242?.;/()");
- gchar *const sample_escaped = g_markup_escape_text(sample, -1);
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ int show_sample = prefs->getInt("/tools/text/show_sample_in_list", 1);
+ if (show_sample) {
+
+ Glib::ustring sample = prefs->getString("/tools/text/font_sample");
+ gchar *const sample_escaped = g_markup_escape_text(sample.data(), -1);
std::stringstream markup;
markup << family_escaped << " <span foreground='darkgray' font_family='"
<< family_escaped << "'>" << sample_escaped << "</span>";
g_object_set (G_OBJECT (cell), "markup", markup.str().c_str(), NULL);
+ g_free(sample_escaped);
+ } else {
+ g_object_set (G_OBJECT (cell), "markup", family_escaped, NULL);
+ }
+
g_free(family);
g_free(family_escaped);
- g_free(sample_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"));
@@ -6572,9 +6801,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
@@ -6659,7 +6888,7 @@ sp_text_toolbox_new (SPDesktop *desktop)
// expand the field a bit so as to view more of the previews in the drop-down
GtkRequisition req;
gtk_widget_size_request (GTK_WIDGET (font_sel->gobj()), &req);
- gtk_widget_set_size_request (GTK_WIDGET (font_sel->gobj()), req.width + 40, -1);
+ gtk_widget_set_size_request (GTK_WIDGET (font_sel->gobj()), MIN(req.width + 50, 500), -1);
GtkWidget* entry = (GtkWidget*) font_sel->get_entry()->gobj();
g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (sp_text_toolbox_family_changed), tbl);
@@ -6854,6 +7083,13 @@ sp_text_toolbox_new (SPDesktop *desktop)
//## Connector ##
//#########################
+static void sp_connector_mode_toggled( GtkToggleAction* act, GtkObject */*tbl*/ )
+{
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/tools/connector/mode",
+ gtk_toggle_action_get_active( act ));
+}
+
static void sp_connector_path_set_avoid(void)
{
cc_selection_set_avoid(true);
@@ -6865,6 +7101,106 @@ static void sp_connector_path_set_ignore(void)
cc_selection_set_avoid(false);
}
+static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl )
+{
+ SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
+ Inkscape::Selection * selection = sp_desktop_selection(desktop);
+ SPDocument *doc = sp_desktop_document(desktop);
+
+ if (!sp_document_get_undo_sensitive(doc))
+ {
+ return;
+ }
+
+
+ // quit if run by the _changed callbacks
+ if (g_object_get_data( tbl, "freeze" )) {
+ return;
+ }
+
+ // in turn, prevent callbacks from responding
+ g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
+
+ bool is_orthog = gtk_toggle_action_get_active( act );
+ gchar orthog_str[] = "orthogonal";
+ gchar polyline_str[] = "polyline";
+ gchar *value = is_orthog ? orthog_str : polyline_str ;
+
+ bool modmade = false;
+ GSList *l = (GSList *) selection->itemList();
+ while (l) {
+ SPItem *item = (SPItem *) l->data;
+
+ if (cc_item_is_connector(item)) {
+ sp_object_setAttribute(item, "inkscape:connector-type",
+ value, false);
+ item->avoidRef->handleSettingChange();
+ modmade = true;
+ }
+ l = l->next;
+ }
+
+ if (!modmade)
+ {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setBool("/tools/connector/orthogonal", is_orthog);
+ }
+
+ sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
+ is_orthog ? _("Set connector type: orthogonal"): _("Set connector type: polyline"));
+
+ g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
+}
+
+static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
+{
+ SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
+ Inkscape::Selection * selection = sp_desktop_selection(desktop);
+ SPDocument *doc = sp_desktop_document(desktop);
+
+ if (!sp_document_get_undo_sensitive(doc))
+ {
+ return;
+ }
+
+
+ // quit if run by the _changed callbacks
+ if (g_object_get_data( tbl, "freeze" )) {
+ return;
+ }
+
+ // in turn, prevent callbacks from responding
+ g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) );
+
+ gdouble newValue = gtk_adjustment_get_value(adj);
+ gchar value[G_ASCII_DTOSTR_BUF_SIZE];
+ g_ascii_dtostr(value, G_ASCII_DTOSTR_BUF_SIZE, newValue);
+
+ bool modmade = false;
+ GSList *l = (GSList *) selection->itemList();
+ while (l) {
+ SPItem *item = (SPItem *) l->data;
+
+ if (cc_item_is_connector(item)) {
+ sp_object_setAttribute(item, "inkscape:connector-curvature",
+ value, false);
+ item->avoidRef->handleSettingChange();
+ modmade = true;
+ }
+ l = l->next;
+ }
+
+ if (!modmade)
+ {
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ prefs->setDouble(Glib::ustring("/tools/connector/curvature"), newValue);
+ }
+
+ sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
+ _("Change connector curvature"));
+
+ g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
+}
static void connector_spacing_changed(GtkAdjustment *adj, GObject* tbl)
@@ -6946,7 +7282,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);
@@ -6961,21 +7297,37 @@ static void connector_tb_event_attr_changed(Inkscape::XML::Node *repr,
if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
return;
}
- if (strcmp(name, "inkscape:connector-spacing") != 0) {
- return;
+ if (strcmp(name, "inkscape:connector-spacing") == 0)
+ {
+ GtkAdjustment *adj = (GtkAdjustment*)
+ gtk_object_get_data(GTK_OBJECT(tbl), "spacing");
+ gdouble spacing = defaultConnSpacing;
+ sp_repr_get_double(repr, "inkscape:connector-spacing", &spacing);
+
+ gtk_adjustment_set_value(adj, spacing);
+ gtk_adjustment_value_changed(adj);
}
- GtkAdjustment *adj = (GtkAdjustment*)
- gtk_object_get_data(GTK_OBJECT(tbl), "spacing");
- gdouble spacing = defaultConnSpacing;
- sp_repr_get_double(repr, "inkscape:connector-spacing", &spacing);
+ spinbutton_defocus(GTK_OBJECT(tbl));
+}
- gtk_adjustment_set_value(adj, spacing);
- gtk_adjustment_value_changed(adj);
+static void sp_connector_new_connection_point(GtkWidget *, GObject *tbl)
+{
+ SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
+ SPConnectorContext* cc = SP_CONNECTOR_CONTEXT(desktop->event_context);
- spinbutton_defocus(GTK_OBJECT(tbl));
+ if (cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE)
+ cc_create_connection_point(cc);
}
+static void sp_connector_remove_connection_point(GtkWidget *, GObject *tbl)
+{
+ SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
+ SPConnectorContext* cc = SP_CONNECTOR_CONTEXT(desktop->event_context);
+
+ if (cc->mode == SP_CONNECTOR_CONTEXT_EDITING_MODE)
+ cc_remove_connection_point(cc);
+}
static Inkscape::XML::NodeEventVector connector_tb_repr_events = {
NULL, /* child_added */
@@ -6985,12 +7337,42 @@ static Inkscape::XML::NodeEventVector connector_tb_repr_events = {
NULL /* order_changed */
};
+static void sp_connector_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl)
+{
+ GtkAdjustment *adj = GTK_ADJUSTMENT( g_object_get_data( tbl, "curvature" ) );
+ GtkToggleAction *act = GTK_TOGGLE_ACTION( g_object_get_data( tbl, "orthogonal" ) );
+ SPItem *item = selection->singleItem();
+ if (SP_IS_PATH(item))
+ {
+ gdouble curvature = SP_PATH(item)->connEndPair.getCurvature();
+ bool is_orthog = SP_PATH(item)->connEndPair.isOrthogonal();
+ gtk_toggle_action_set_active(act, is_orthog);
+ gtk_adjustment_set_value(adj, curvature);
+ }
+
+}
static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder )
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
Inkscape::IconSize secondarySize = prefToSize("/toolbox/secondary", 1);
+ // Editing mode toggle button
+ {
+ InkToggleAction* act = ink_toggle_action_new( "ConnectorEditModeAction",
+ _("EditMode"),
+ _("Switch between connection point editing and connector drawing mode"),
+ INKSCAPE_ICON_CONNECTOR_EDIT,
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+
+ bool tbuttonstate = prefs->getBool("/tools/connector/mode");
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE ));
+ g_object_set_data( holder, "mode", act );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_connector_mode_toggled), holder );
+ }
+
+
{
InkAction* inky = ink_action_new( "ConnectorAvoidAction",
_("Avoid"),
@@ -7011,17 +7393,42 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
gtk_action_group_add_action( mainActions, GTK_ACTION(inky) );
}
+ // Orthogonal connectors toggle button
+ {
+ InkToggleAction* act = ink_toggle_action_new( "ConnectorOrthogonalAction",
+ _("Orthogonal"),
+ _("Make connector orthogonal or polyline"),
+ INKSCAPE_ICON_CONNECTOR_ORTHOGONAL,
+ Inkscape::ICON_SIZE_DECORATION );
+ gtk_action_group_add_action( mainActions, GTK_ACTION( act ) );
+
+ bool tbuttonstate = prefs->getBool("/tools/connector/orthogonal");
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE ));
+ g_object_set_data( holder, "orthogonal", act );
+ g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_connector_orthogonal_toggled), holder );
+ }
+
EgeAdjustmentAction* eact = 0;
+ // Curvature spinbox
+ eact = create_adjustment_action( "ConnectorCurvatureAction",
+ _("Connector Curvature"), _("Curvature:"),
+ _("The amount of connectors curvature"),
+ "/tools/connector/curvature", defaultConnCurvature,
+ GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "inkscape:connector-curvature",
+ 0, 100, 1.0, 10.0,
+ 0, 0, 0,
+ connector_curvature_changed, 1, 0 );
+ gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
// Spacing spinbox
eact = create_adjustment_action( "ConnectorSpacingAction",
- _("Connector Spacing"), _("Spacing:"),
- _("The amount of space left around objects by auto-routing connectors"),
- "/tools/connector/spacing", defaultConnSpacing,
- GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "inkscape:connector-spacing",
- 0, 100, 1.0, 10.0,
- 0, 0, 0,
- connector_spacing_changed, 1, 0 );
+ _("Connector Spacing"), _("Spacing:"),
+ _("The amount of space left around objects by auto-routing connectors"),
+ "/tools/connector/spacing", defaultConnSpacing,
+ GTK_WIDGET(desktop->canvas), NULL, holder, TRUE, "inkscape:connector-spacing",
+ 0, 100, 1.0, 10.0,
+ 0, 0, 0,
+ connector_spacing_changed, 1, 0 );
gtk_action_group_add_action( mainActions, GTK_ACTION(eact) );
// Graph (connector network) layout
@@ -7060,6 +7467,8 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(act), ( tbuttonstate ? TRUE : FALSE ));
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_directed_graph_layout_toggled), holder );
+ sigc::connection *connection = new sigc::connection(sp_desktop_selection(desktop)->connectChanged(sigc::bind(sigc::ptr_fun(sp_connector_toolbox_selection_changed), (GObject *)holder))
+ );
}
// Avoid overlaps toggle button
@@ -7077,6 +7486,31 @@ static void sp_connector_toolbox_prep( SPDesktop *desktop, GtkActionGroup* mainA
g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(sp_nooverlaps_graph_layout_toggled), holder );
}
+
+ // New connection point button
+ {
+ InkAction* inky = ink_action_new( "ConnectorNewConnPointAction",
+ _("New connection point"),
+ _("Add a new connection point to the currently selected item"),
+ INKSCAPE_ICON_CONNECTOR_NEW_CONNPOINT,
+ secondarySize );
+ 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"),
+ _("Remove the currently selected connection point"),
+ INKSCAPE_ICON_CONNECTOR_REMOVE_CONNPOINT,
+ secondarySize );
+ 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.
Inkscape::XML::Node *repr = SP_OBJECT_REPR(desktop->namedview);