Code

Merge from fe-moved
authorTed Gould <ted@canonical.com>
Fri, 21 Nov 2008 05:24:08 +0000 (23:24 -0600)
committerTed Gould <ted@canonical.com>
Fri, 21 Nov 2008 05:24:08 +0000 (23:24 -0600)
462 files changed:
AUTHORS
Doxyfile [new file with mode: 0644]
build-lx.xml
configure.ac
doc/keys.xml
mkinstalldirs
po/POTFILES.in
po/gl.po
po/he.po
po/nl.po
po/ru.po
share/Makefile.am
share/README
share/extensions/Inkscape.pm [new file with mode: 0644]
share/extensions/Makefile.am
share/extensions/cut-marks.inx [new file with mode: 0644]
share/extensions/cut-marks.pl [new file with mode: 0644]
share/extensions/dxf_input.inx
share/extensions/dxf_input.py [new file with mode: 0644]
share/extensions/simpletransform.py
share/filters/Makefile.am [new file with mode: 0644]
share/filters/README [new file with mode: 0644]
share/filters/filters.svg [new file with mode: 0644]
share/keys/default.xml
share/keys/inkscape.xml
share/templates/LaTeX_Beamer.svg
share/templates/default.ca.svg
share/templates/default.fi.svg
share/templates/default.svg
share/templates/fontforge_glyph.svg
src/2geom/bezier-curve.h
src/2geom/bezier.h
src/2geom/concepts.h
src/2geom/crossing.h
src/2geom/curve.h
src/2geom/d2-sbasis.cpp
src/2geom/d2-sbasis.h
src/2geom/d2.h
src/2geom/elliptical-arc.cpp
src/2geom/elliptical-arc.h
src/2geom/forward.h
src/2geom/geom.cpp
src/2geom/geom.h
src/2geom/hvlinesegment.h
src/2geom/interval.h
src/2geom/linear.h
src/2geom/nearest-point.cpp
src/2geom/path-intersection.cpp
src/2geom/path.cpp
src/2geom/path.h
src/2geom/pathvector.cpp
src/2geom/pathvector.h
src/2geom/piecewise.h
src/2geom/point.h
src/2geom/rect.h
src/2geom/region.h
src/2geom/sbasis-2d.cpp
src/2geom/sbasis-curve.h
src/2geom/sbasis-geometric.cpp
src/2geom/sbasis-math.cpp
src/2geom/sbasis-math.h
src/2geom/sbasis-roots.cpp
src/2geom/sbasis.cpp
src/2geom/sbasis.h
src/2geom/shape.cpp
src/2geom/svg-elliptical-arc.cpp
src/2geom/svg-elliptical-arc.h
src/2geom/svg-path-parser.cpp
src/2geom/sweep.cpp
src/CMakeLists.txt
src/Doxyfile [deleted file]
src/Makefile.am
src/Makefile_insert
src/application/app-prototype.cpp
src/application/app-prototype.h
src/application/application.cpp
src/application/application.h
src/application/editor.cpp
src/application/editor.h
src/attributes-test.h
src/attributes.cpp
src/attributes.h
src/bind/dobinding.cpp
src/bind/javabind-private.h
src/bind/javabind.cpp
src/bind/javabind.h
src/box3d-side.cpp
src/conn-avoid-ref.cpp
src/connector-context.cpp
src/desktop-style.cpp
src/desktop.cpp
src/dialogs/CMakeLists.txt
src/dialogs/Makefile_insert
src/dialogs/clonetiler.cpp
src/dialogs/clonetiler.h
src/dialogs/debugdialog.cpp [deleted file]
src/dialogs/debugdialog.h [deleted file]
src/dialogs/dialog-events.cpp
src/dialogs/dialog-events.h
src/dialogs/eek-color-def.cpp
src/dialogs/eek-color-def.h
src/dialogs/eek-preview.cpp
src/dialogs/eek-preview.h
src/dialogs/export.cpp
src/dialogs/export.h
src/dialogs/extensions.cpp
src/dialogs/extensions.h
src/dialogs/fill-style.cpp
src/dialogs/fill-style.h
src/dialogs/find.cpp
src/dialogs/find.h
src/dialogs/guidelinedialog.cpp
src/dialogs/iconpreview.cpp
src/dialogs/iconpreview.h
src/dialogs/in-dt-coordsys.h
src/dialogs/input.cpp
src/dialogs/input.h
src/dialogs/item-properties.cpp
src/dialogs/item-properties.h
src/dialogs/layer-properties.cpp
src/dialogs/layer-properties.h
src/dialogs/layers-panel.h
src/dialogs/object-attributes.cpp
src/dialogs/object-attributes.h
src/dialogs/rdf.cpp
src/dialogs/rdf.h
src/dialogs/sp-attribute-widget.cpp
src/dialogs/sp-attribute-widget.h
src/dialogs/stroke-style.cpp
src/dialogs/stroke-style.h
src/dialogs/swatches.cpp
src/dialogs/swatches.h
src/dialogs/text-edit.cpp
src/dialogs/text-edit.h
src/dialogs/tiledialog.cpp [deleted file]
src/dialogs/tiledialog.h [deleted file]
src/dialogs/unclump.cpp
src/dialogs/unclump.h
src/dialogs/xml-tree.cpp
src/dialogs/xml-tree.h
src/display/canvas-bpath.cpp
src/display/inkscape-cairo.cpp
src/display/inkscape-cairo.h
src/display/nr-arena-group.cpp
src/display/nr-arena-image.cpp
src/display/nr-arena-item.cpp
src/display/nr-arena-item.h
src/display/nr-arena-shape.cpp
src/display/nr-filter-composite.cpp
src/display/nr-filter-composite.h
src/display/nr-filter-diffuselighting.h
src/display/nr-filter-displacement-map.h
src/display/nr-filter-image.cpp
src/display/nr-filter-merge.cpp
src/display/nr-filter-merge.h
src/display/nr-filter-specularlighting.h
src/display/nr-filter-units.h
src/display/nr-filter.cpp
src/display/nr-light.cpp
src/display/nr-svgfonts.cpp
src/display/snap-indicator.cpp
src/display/sodipodi-ctrl.cpp
src/display/sp-canvas.cpp
src/document.cpp
src/document.h
src/doxygen-main.cpp
src/eraser-context.cpp
src/event-context.cpp
src/extension/init.cpp
src/extension/internal/Makefile_insert
src/extension/internal/cairo-pdf-out.cpp [deleted file]
src/extension/internal/cairo-pdf-out.h [deleted file]
src/extension/internal/cairo-ps-out.cpp
src/extension/internal/cairo-renderer-pdf-out.cpp
src/extension/internal/cairo-renderer.cpp
src/extension/internal/eps-out.cpp [deleted file]
src/extension/internal/eps-out.h [deleted file]
src/extension/internal/filter/drop-shadow.h
src/extension/internal/filter/filter-all.cpp
src/extension/internal/filter/filter-file.cpp
src/extension/internal/filter/filter.cpp
src/extension/internal/filter/filter.h
src/extension/internal/filter/snow.h
src/extension/internal/grid.cpp
src/extension/internal/javafx-out.cpp
src/extension/internal/odf.cpp
src/extension/internal/pdf-cairo.cpp [deleted file]
src/extension/internal/pdf-cairo.h [deleted file]
src/extension/internal/ps-out.cpp [deleted file]
src/extension/internal/ps-out.h [deleted file]
src/extension/internal/ps.cpp [deleted file]
src/extension/internal/ps.h [deleted file]
src/extension/output.h
src/extension/system.cpp
src/file.cpp
src/filter-chemistry.cpp
src/filter-enums.h
src/filters/Makefile_insert [new file with mode: 0644]
src/filters/blend-fns.h [new file with mode: 0644]
src/filters/blend.cpp [new file with mode: 0644]
src/filters/blend.h [new file with mode: 0644]
src/filters/colormatrix-fns.h [new file with mode: 0644]
src/filters/colormatrix.cpp [new file with mode: 0644]
src/filters/colormatrix.h [new file with mode: 0644]
src/filters/componenttransfer-fns.h [new file with mode: 0644]
src/filters/componenttransfer-funcnode.cpp [new file with mode: 0644]
src/filters/componenttransfer-funcnode.h [new file with mode: 0644]
src/filters/componenttransfer.cpp [new file with mode: 0644]
src/filters/componenttransfer.h [new file with mode: 0644]
src/filters/composite-fns.h [new file with mode: 0644]
src/filters/composite.cpp [new file with mode: 0644]
src/filters/composite.h [new file with mode: 0644]
src/filters/convolvematrix-fns.h [new file with mode: 0644]
src/filters/convolvematrix.cpp [new file with mode: 0644]
src/filters/convolvematrix.h [new file with mode: 0644]
src/filters/diffuselighting-fns.h [new file with mode: 0644]
src/filters/diffuselighting.cpp [new file with mode: 0644]
src/filters/diffuselighting.h [new file with mode: 0644]
src/filters/displacementmap-fns.h [new file with mode: 0644]
src/filters/displacementmap.cpp [new file with mode: 0644]
src/filters/displacementmap.h [new file with mode: 0644]
src/filters/distantlight.cpp [new file with mode: 0644]
src/filters/distantlight.h [new file with mode: 0644]
src/filters/flood-fns.h [new file with mode: 0644]
src/filters/flood.cpp [new file with mode: 0644]
src/filters/flood.h [new file with mode: 0644]
src/filters/image-fns.h [new file with mode: 0644]
src/filters/image.cpp [new file with mode: 0644]
src/filters/image.h [new file with mode: 0644]
src/filters/makefile.in [new file with mode: 0644]
src/filters/merge-fns.h [new file with mode: 0644]
src/filters/merge.cpp [new file with mode: 0644]
src/filters/merge.h [new file with mode: 0644]
src/filters/mergenode.cpp [new file with mode: 0644]
src/filters/mergenode.h [new file with mode: 0644]
src/filters/morphology-fns.h [new file with mode: 0644]
src/filters/morphology.cpp [new file with mode: 0644]
src/filters/morphology.h [new file with mode: 0644]
src/filters/offset-fns.h [new file with mode: 0644]
src/filters/offset.cpp [new file with mode: 0644]
src/filters/offset.h [new file with mode: 0644]
src/filters/pointlight.cpp [new file with mode: 0644]
src/filters/pointlight.h [new file with mode: 0644]
src/filters/specularlighting-fns.h [new file with mode: 0644]
src/filters/specularlighting.cpp [new file with mode: 0644]
src/filters/specularlighting.h [new file with mode: 0644]
src/filters/spotlight.cpp [new file with mode: 0644]
src/filters/spotlight.h [new file with mode: 0644]
src/filters/tile-fns.h [new file with mode: 0644]
src/filters/tile.cpp [new file with mode: 0644]
src/filters/tile.h [new file with mode: 0644]
src/filters/turbulence-fns.h [new file with mode: 0644]
src/filters/turbulence.cpp [new file with mode: 0644]
src/filters/turbulence.h [new file with mode: 0644]
src/flood-context.cpp
src/gradient-chemistry.cpp
src/gradient-context.cpp
src/gradient-drag.cpp
src/gradient-drag.h
src/graphlayout/graphlayout.cpp
src/helper/Makefile_insert
src/helper/geom.cpp
src/helper/geom.h
src/helper/png-write.cpp
src/helper/png-write.h
src/helper/recthull.h
src/inkscape.cpp
src/interface.cpp
src/libnr/nr-convert2geom.h
src/libnr/nr-rect.cpp
src/libnr/nr-rect.h
src/libnrtype/FontInstance.cpp
src/libnrtype/Layout-TNG-Compute.cpp
src/libnrtype/Layout-TNG-Input.cpp
src/libnrtype/Layout-TNG-OutIter.cpp
src/libnrtype/Layout-TNG-Output.cpp
src/libnrtype/Layout-TNG.h
src/libnrtype/RasterFont.cpp
src/libnrtype/font-instance.h
src/line-snapper.cpp
src/line-snapper.h
src/live_effects/CMakeLists.txt
src/live_effects/Makefile_insert
src/live_effects/effect-enum.h [new file with mode: 0644]
src/live_effects/effect.cpp
src/live_effects/effect.h
src/live_effects/lpe-circle_with_radius.cpp
src/live_effects/lpe-circle_with_radius.h
src/live_effects/lpe-curvestitch.cpp
src/live_effects/lpe-hatches.cpp [new file with mode: 0644]
src/live_effects/lpe-hatches.h [new file with mode: 0644]
src/live_effects/lpe-interpolate.cpp
src/live_effects/lpe-knot.cpp
src/live_effects/lpe-knot.h
src/live_effects/lpe-patternalongpath.cpp
src/live_effects/lpe-patternalongpath.h
src/live_effects/lpe-perspective_path.cpp
src/live_effects/lpe-perspective_path.h
src/live_effects/lpe-skeleton.cpp
src/live_effects/lpe-skeleton.h
src/live_effects/lpe-sketch.cpp
src/live_effects/lpe-sketch.h
src/live_effects/lpegroupbbox.cpp
src/live_effects/parameter/CMakeLists.txt
src/live_effects/parameter/Makefile_insert
src/live_effects/parameter/array.cpp [new file with mode: 0644]
src/live_effects/parameter/array.h [new file with mode: 0644]
src/live_effects/parameter/parameter.h
src/live_effects/parameter/point.cpp
src/live_effects/parameter/point.h
src/live_effects/parameter/pointparam-knotholder.cpp [deleted file]
src/live_effects/parameter/pointparam-knotholder.h [deleted file]
src/live_effects/parameter/vector.cpp
src/live_effects/parameter/vector.h
src/lpe-tool-context.cpp
src/main.cpp
src/node-context.cpp
src/nodepath.cpp
src/nodepath.h
src/object-snapper.cpp
src/object-snapper.h
src/pencil-context.cpp
src/pencil-context.h
src/preferences-skeleton.h
src/removeoverlap/removeoverlap.cpp
src/rubberband.cpp
src/rubberband.h
src/selcue.cpp
src/select-context.cpp
src/selection-chemistry.cpp
src/selection.cpp
src/selection.h
src/seltrans.h
src/shape-editor.cpp
src/snap.cpp
src/snap.h
src/snapper.h
src/sp-conn-end-pair.cpp
src/sp-conn-end.cpp
src/sp-ellipse.cpp
src/sp-feblend-fns.h [deleted file]
src/sp-feblend.cpp [deleted file]
src/sp-feblend.h [deleted file]
src/sp-fecolormatrix-fns.h [deleted file]
src/sp-fecolormatrix.cpp [deleted file]
src/sp-fecolormatrix.h [deleted file]
src/sp-fecomponenttransfer-fns.h [deleted file]
src/sp-fecomponenttransfer-funcnode.cpp [deleted file]
src/sp-fecomponenttransfer-funcnode.h [deleted file]
src/sp-fecomponenttransfer.cpp [deleted file]
src/sp-fecomponenttransfer.h [deleted file]
src/sp-fecomposite-fns.h [deleted file]
src/sp-fecomposite.cpp [deleted file]
src/sp-fecomposite.h [deleted file]
src/sp-feconvolvematrix-fns.h [deleted file]
src/sp-feconvolvematrix.cpp [deleted file]
src/sp-feconvolvematrix.h [deleted file]
src/sp-fediffuselighting-fns.h [deleted file]
src/sp-fediffuselighting.cpp [deleted file]
src/sp-fediffuselighting.h [deleted file]
src/sp-fedisplacementmap-fns.h [deleted file]
src/sp-fedisplacementmap.cpp [deleted file]
src/sp-fedisplacementmap.h [deleted file]
src/sp-fedistantlight.cpp [deleted file]
src/sp-fedistantlight.h [deleted file]
src/sp-feflood-fns.h [deleted file]
src/sp-feflood.cpp [deleted file]
src/sp-feflood.h [deleted file]
src/sp-feimage-fns.h [deleted file]
src/sp-feimage.cpp [deleted file]
src/sp-feimage.h [deleted file]
src/sp-femerge-fns.h [deleted file]
src/sp-femerge.cpp [deleted file]
src/sp-femerge.h [deleted file]
src/sp-femergenode.cpp [deleted file]
src/sp-femergenode.h [deleted file]
src/sp-femorphology-fns.h [deleted file]
src/sp-femorphology.cpp [deleted file]
src/sp-femorphology.h [deleted file]
src/sp-feoffset-fns.h [deleted file]
src/sp-feoffset.cpp [deleted file]
src/sp-feoffset.h [deleted file]
src/sp-fepointlight.cpp [deleted file]
src/sp-fepointlight.h [deleted file]
src/sp-fespecularlighting-fns.h [deleted file]
src/sp-fespecularlighting.cpp [deleted file]
src/sp-fespecularlighting.h [deleted file]
src/sp-fespotlight.cpp [deleted file]
src/sp-fespotlight.h [deleted file]
src/sp-fetile-fns.h [deleted file]
src/sp-fetile.cpp [deleted file]
src/sp-fetile.h [deleted file]
src/sp-feturbulence-fns.h [deleted file]
src/sp-feturbulence.cpp [deleted file]
src/sp-feturbulence.h [deleted file]
src/sp-flowtext.cpp
src/sp-item-group.cpp
src/sp-item-transform.cpp
src/sp-item-transform.h
src/sp-item.cpp
src/sp-item.h
src/sp-lpe-item.cpp
src/sp-lpe-item.h
src/sp-namedview.cpp
src/sp-namedview.h
src/sp-object-repr.cpp
src/sp-offset.cpp
src/sp-path.cpp
src/sp-pattern.cpp
src/sp-shape.cpp
src/sp-spiral.cpp
src/sp-star.cpp
src/splivarot.cpp
src/streams-gzip.cpp [deleted file]
src/streams-gzip.h [deleted file]
src/streams-handles.cpp [deleted file]
src/streams-handles.h [deleted file]
src/streams-jar.cpp [deleted file]
src/streams-jar.h [deleted file]
src/streams-zlib.cpp [deleted file]
src/streams-zlib.h [deleted file]
src/svg/svg-affine.cpp
src/svg/svg.h
src/text-context.cpp
src/tweak-context.cpp
src/ui/clipboard.cpp
src/ui/dialog/CMakeLists.txt
src/ui/dialog/Makefile_insert
src/ui/dialog/align-and-distribute.cpp
src/ui/dialog/align-and-distribute.h
src/ui/dialog/debug.cpp [new file with mode: 0644]
src/ui/dialog/debug.h [new file with mode: 0644]
src/ui/dialog/dialog-manager.cpp
src/ui/dialog/document-properties.cpp
src/ui/dialog/document-properties.h
src/ui/dialog/filedialogimpl-win32.cpp
src/ui/dialog/filter-effects-dialog.cpp
src/ui/dialog/inkscape-preferences.cpp
src/ui/dialog/inkscape-preferences.h
src/ui/dialog/livepatheffect-editor.cpp
src/ui/dialog/livepatheffect-editor.h
src/ui/dialog/messages.cpp
src/ui/dialog/tile.cpp [new file with mode: 0644]
src/ui/dialog/tile.h [new file with mode: 0644]
src/ui/dialog/transformation.cpp
src/ui/view/edit-widget.cpp
src/ui/widget/object-composite-settings.cpp
src/ui/widget/preferences-widget.cpp
src/ui/widget/preferences-widget.h
src/ui/widget/style-subject.cpp
src/ui/widget/style-subject.h
src/verbs.cpp
src/verbs.h
src/widgets/Makefile_insert
src/widgets/calligraphic-profile-rename.cpp [changed mode: 0755->0644]
src/widgets/calligraphic-profile-rename.h [changed mode: 0755->0644]
src/widgets/desktop-widget.cpp
src/widgets/font-selector.cpp
src/widgets/icon.cpp
src/widgets/select-toolbar.cpp
src/widgets/toolbox.cpp
src/zoom-context.cpp

diff --git a/AUTHORS b/AUTHORS
index ea8fdbea6f2f610b27e8b32a361745bf2f149bde..3a6d885876c7b0e25a4631b871a904672d5f17a6 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,6 +1,5 @@
 Maximilian Albert
 Josh Andler
-Gail Carmichael
 Jean-François Barraud
 Bill Baxter
 John Bintz
@@ -19,6 +18,7 @@ Luca Bruno
 Nicu Buculei
 Bulia Byak
 Ian Caldwell
+Gail Carmichael
 Ed Catmur
 Chema Celorio
 Johan Ceuppens
diff --git a/Doxyfile b/Doxyfile
new file mode 100644 (file)
index 0000000..01d151a
--- /dev/null
+++ b/Doxyfile
@@ -0,0 +1,1462 @@
+# Doxyfile 1.5.7\r
+\r
+# This file describes the settings to be used by the documentation system\r
+# doxygen (www.doxygen.org) for a project\r
+#\r
+# All text after a hash (#) is considered a comment and will be ignored\r
+# The format is:\r
+#       TAG = value [value, ...]\r
+# For lists items can also be appended using:\r
+#       TAG += value [value, ...]\r
+# Values that contain spaces should be placed between quotes (" ")\r
+\r
+#---------------------------------------------------------------------------\r
+# Project related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# This tag specifies the encoding used for all characters in the config file \r
+# that follow. The default is UTF-8 which is also the encoding used for all \r
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the \r
+# iconv built into libc) for the transcoding. See \r
+# http://www.gnu.org/software/libiconv for the list of possible encodings.\r
+\r
+DOXYFILE_ENCODING      = UTF-8\r
+\r
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded \r
+# by quotes) that should identify the project.\r
+\r
+PROJECT_NAME           = inkscape\r
+\r
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. \r
+# This could be handy for archiving the generated documentation or \r
+# if some version control system is used.\r
+\r
+PROJECT_NUMBER         = \r
+\r
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) \r
+# base path where the generated documentation will be put. \r
+# If a relative path is entered, it will be relative to the location \r
+# where doxygen was started. If left blank the current directory will be used.\r
+\r
+OUTPUT_DIRECTORY       = doxygen\r
+\r
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create \r
+# 4096 sub-directories (in 2 levels) under the output directory of each output \r
+# format and will distribute the generated files over these directories. \r
+# Enabling this option can be useful when feeding doxygen a huge amount of \r
+# source files, where putting all generated files in the same directory would \r
+# otherwise cause performance problems for the file system.\r
+\r
+CREATE_SUBDIRS         = NO\r
+\r
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all \r
+# documentation generated by doxygen is written. Doxygen will use this \r
+# information to generate all constant output in the proper language. \r
+# The default language is English, other supported languages are: \r
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \r
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, \r
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), \r
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, \r
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, \r
+# Spanish, Swedish, and Ukrainian.\r
+\r
+OUTPUT_LANGUAGE        = English\r
+\r
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will \r
+# include brief member descriptions after the members that are listed in \r
+# the file and class documentation (similar to JavaDoc). \r
+# Set to NO to disable this.\r
+\r
+BRIEF_MEMBER_DESC      = YES\r
+\r
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend \r
+# the brief description of a member or function before the detailed description. \r
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the \r
+# brief descriptions will be completely suppressed.\r
+\r
+REPEAT_BRIEF           = YES\r
+\r
+# This tag implements a quasi-intelligent brief description abbreviator \r
+# that is used to form the text in various listings. Each string \r
+# in this list, if found as the leading text of the brief description, will be \r
+# stripped from the text and the result after processing the whole list, is \r
+# used as the annotated text. Otherwise, the brief description is used as-is. \r
+# If left blank, the following values are used ("$name" is automatically \r
+# replaced with the name of the entity): "The $name class" "The $name widget" \r
+# "The $name file" "is" "provides" "specifies" "contains" \r
+# "represents" "a" "an" "the"\r
+\r
+ABBREVIATE_BRIEF       = \r
+\r
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \r
+# Doxygen will generate a detailed section even if there is only a brief \r
+# description.\r
+\r
+ALWAYS_DETAILED_SEC    = NO\r
+\r
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all \r
+# inherited members of a class in the documentation of that class as if those \r
+# members were ordinary class members. Constructors, destructors and assignment \r
+# operators of the base classes will not be shown.\r
+\r
+INLINE_INHERITED_MEMB  = NO\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \r
+# path before files name in the file list and in the header files. If set \r
+# to NO the shortest path that makes the file name unique will be used.\r
+\r
+FULL_PATH_NAMES        = YES\r
+\r
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag \r
+# can be used to strip a user-defined part of the path. Stripping is \r
+# only done if one of the specified strings matches the left-hand part of \r
+# the path. The tag can be used to show relative paths in the file list. \r
+# If left blank the directory from which doxygen is run is used as the \r
+# path to strip.\r
+\r
+STRIP_FROM_PATH        = \r
+\r
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of \r
+# the path mentioned in the documentation of a class, which tells \r
+# the reader which header file to include in order to use a class. \r
+# If left blank only the name of the header file containing the class \r
+# definition is used. Otherwise one should specify the include paths that \r
+# are normally passed to the compiler using the -I flag.\r
+\r
+STRIP_FROM_INC_PATH    = \r
+\r
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter \r
+# (but less readable) file names. This can be useful is your file systems \r
+# doesn't support long names like on DOS, Mac, or CD-ROM.\r
+\r
+SHORT_NAMES            = NO\r
+\r
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen \r
+# will interpret the first line (until the first dot) of a JavaDoc-style \r
+# comment as the brief description. If set to NO, the JavaDoc \r
+# comments will behave just like regular Qt-style comments \r
+# (thus requiring an explicit @brief command for a brief description.)\r
+\r
+JAVADOC_AUTOBRIEF      = YES\r
+\r
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will \r
+# interpret the first line (until the first dot) of a Qt-style \r
+# comment as the brief description. If set to NO, the comments \r
+# will behave just like regular Qt-style comments (thus requiring \r
+# an explicit \brief command for a brief description.)\r
+\r
+QT_AUTOBRIEF           = NO\r
+\r
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen \r
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// \r
+# comments) as a brief description. This used to be the default behaviour. \r
+# The new default is to treat a multi-line C++ comment block as a detailed \r
+# description. Set this tag to YES if you prefer the old behaviour instead.\r
+\r
+MULTILINE_CPP_IS_BRIEF = NO\r
+\r
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \r
+# member inherits the documentation from any documented member that it \r
+# re-implements.\r
+\r
+INHERIT_DOCS           = YES\r
+\r
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce \r
+# a new page for each member. If set to NO, the documentation of a member will \r
+# be part of the file/class/namespace that contains it.\r
+\r
+SEPARATE_MEMBER_PAGES  = NO\r
+\r
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. \r
+# Doxygen uses this value to replace tabs by spaces in code fragments.\r
+\r
+TAB_SIZE               = 4\r
+\r
+# This tag can be used to specify a number of aliases that acts \r
+# as commands in the documentation. An alias has the form "name=value". \r
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to \r
+# put the command \sideeffect (or @sideeffect) in the documentation, which \r
+# will result in a user-defined paragraph with heading "Side Effects:". \r
+# You can put \n's in the value part of an alias to insert newlines.\r
+\r
+ALIASES                = \r
+\r
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C \r
+# sources only. Doxygen will then generate output that is more tailored for C. \r
+# For instance, some of the names that are used will be different. The list \r
+# of all members will be omitted, etc.\r
+\r
+OPTIMIZE_OUTPUT_FOR_C  = YES\r
+\r
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Java. For instance, namespaces will be presented as packages, qualified \r
+# scopes will look different, etc.\r
+\r
+OPTIMIZE_OUTPUT_JAVA   = NO\r
+\r
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \r
+# sources only. Doxygen will then generate output that is more tailored for \r
+# Fortran.\r
+\r
+OPTIMIZE_FOR_FORTRAN   = NO\r
+\r
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \r
+# sources. Doxygen will then generate output that is tailored for \r
+# VHDL.\r
+\r
+OPTIMIZE_OUTPUT_VHDL   = NO\r
+\r
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \r
+# to include (a tag file for) the STL sources as input, then you should \r
+# set this tag to YES in order to let doxygen match functions declarations and \r
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \r
+# func(std::string) {}). This also make the inheritance and collaboration \r
+# diagrams that involve STL classes more complete and accurate.\r
+\r
+BUILTIN_STL_SUPPORT    = YES\r
+\r
+# If you use Microsoft's C++/CLI language, you should set this option to YES to\r
+# enable parsing support.\r
+\r
+CPP_CLI_SUPPORT        = NO\r
+\r
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. \r
+# Doxygen will parse them like normal C++ but will assume all classes use public \r
+# instead of private inheritance when no explicit protection keyword is present.\r
+\r
+SIP_SUPPORT            = NO\r
+\r
+# For Microsoft's IDL there are propget and propput attributes to indicate getter \r
+# and setter methods for a property. Setting this option to YES (the default) \r
+# will make doxygen to replace the get and set methods by a property in the \r
+# documentation. This will only work if the methods are indeed getting or \r
+# setting a simple type. If this is not the case, or you want to show the \r
+# methods anyway, you should set this option to NO.\r
+\r
+IDL_PROPERTY_SUPPORT   = YES\r
+\r
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \r
+# tag is set to YES, then doxygen will reuse the documentation of the first \r
+# member in the group (if any) for the other members of the group. By default \r
+# all members of a group must be documented explicitly.\r
+\r
+DISTRIBUTE_GROUP_DOC   = NO\r
+\r
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of \r
+# the same type (for instance a group of public functions) to be put as a \r
+# subgroup of that type (e.g. under the Public Functions section). Set it to \r
+# NO to prevent subgrouping. Alternatively, this can be done per class using \r
+# the \nosubgrouping command.\r
+\r
+SUBGROUPING            = YES\r
+\r
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum \r
+# is documented as struct, union, or enum with the name of the typedef. So \r
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct \r
+# with name TypeT. When disabled the typedef will appear as a member of a file, \r
+# namespace, or class. And the struct will be named TypeS. This can typically \r
+# be useful for C code in case the coding convention dictates that all compound \r
+# types are typedef'ed and only the typedef is referenced, never the tag name.\r
+\r
+TYPEDEF_HIDES_STRUCT   = NO\r
+\r
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to \r
+# determine which symbols to keep in memory and which to flush to disk.\r
+# When the cache is full, less often used symbols will be written to disk.\r
+# For small to medium size projects (<1000 input files) the default value is \r
+# probably good enough. For larger projects a too small cache size can cause \r
+# doxygen to be busy swapping symbols to and from disk most of the time \r
+# causing a significant performance penality. \r
+# If the system has enough physical memory increasing the cache will improve the \r
+# performance by keeping more symbols in memory. Note that the value works on \r
+# a logarithmic scale so increasing the size by one will rougly double the \r
+# memory usage. The cache size is given by this formula: \r
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, \r
+# corresponding to a cache size of 2^16 = 65536 symbols\r
+\r
+SYMBOL_CACHE_SIZE      = 0\r
+\r
+#---------------------------------------------------------------------------\r
+# Build related configuration options\r
+#---------------------------------------------------------------------------\r
+\r
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \r
+# documentation are documented, even if no documentation was available. \r
+# Private class members and static file members will be hidden unless \r
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES\r
+\r
+EXTRACT_ALL            = YES\r
+\r
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class \r
+# will be included in the documentation.\r
+\r
+EXTRACT_PRIVATE        = YES\r
+\r
+# If the EXTRACT_STATIC tag is set to YES all static members of a file \r
+# will be included in the documentation.\r
+\r
+EXTRACT_STATIC         = YES\r
+\r
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \r
+# defined locally in source files will be included in the documentation. \r
+# If set to NO only classes defined in header files are included.\r
+\r
+EXTRACT_LOCAL_CLASSES  = NO\r
+\r
+# This flag is only useful for Objective-C code. When set to YES local \r
+# methods, which are defined in the implementation section but not in \r
+# the interface are included in the documentation. \r
+# If set to NO (the default) only methods in the interface are included.\r
+\r
+EXTRACT_LOCAL_METHODS  = NO\r
+\r
+# If this flag is set to YES, the members of anonymous namespaces will be \r
+# extracted and appear in the documentation as a namespace called \r
+# 'anonymous_namespace{file}', where file will be replaced with the base \r
+# name of the file that contains the anonymous namespace. By default \r
+# anonymous namespace are hidden.\r
+\r
+EXTRACT_ANON_NSPACES   = NO\r
+\r
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \r
+# undocumented members of documented classes, files or namespaces. \r
+# If set to NO (the default) these members will be included in the \r
+# various overviews, but no documentation section is generated. \r
+# This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_MEMBERS     = NO\r
+\r
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all \r
+# undocumented classes that are normally visible in the class hierarchy. \r
+# If set to NO (the default) these classes will be included in the various \r
+# overviews. This option has no effect if EXTRACT_ALL is enabled.\r
+\r
+HIDE_UNDOC_CLASSES     = NO\r
+\r
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all \r
+# friend (class|struct|union) declarations. \r
+# If set to NO (the default) these declarations will be included in the \r
+# documentation.\r
+\r
+HIDE_FRIEND_COMPOUNDS  = NO\r
+\r
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any \r
+# documentation blocks found inside the body of a function. \r
+# If set to NO (the default) these blocks will be appended to the \r
+# function's detailed documentation block.\r
+\r
+HIDE_IN_BODY_DOCS      = NO\r
+\r
+# The INTERNAL_DOCS tag determines if documentation \r
+# that is typed after a \internal command is included. If the tag is set \r
+# to NO (the default) then the documentation will be excluded. \r
+# Set it to YES to include the internal documentation.\r
+\r
+INTERNAL_DOCS          = NO\r
+\r
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate \r
+# file names in lower-case letters. If set to YES upper-case letters are also \r
+# allowed. This is useful if you have classes or files whose names only differ \r
+# in case and if your file system supports case sensitive file names. Windows \r
+# and Mac users are advised to set this option to NO.\r
+\r
+CASE_SENSE_NAMES       = YES\r
+\r
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen \r
+# will show members with their full class and namespace scopes in the \r
+# documentation. If set to YES the scope will be hidden.\r
+\r
+HIDE_SCOPE_NAMES       = YES\r
+\r
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen \r
+# will put a list of the files that are included by a file in the documentation \r
+# of that file.\r
+\r
+SHOW_INCLUDE_FILES     = YES\r
+\r
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] \r
+# is inserted in the documentation for inline members.\r
+\r
+INLINE_INFO            = YES\r
+\r
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen \r
+# will sort the (detailed) documentation of file and class members \r
+# alphabetically by member name. If set to NO the members will appear in \r
+# declaration order.\r
+\r
+SORT_MEMBER_DOCS       = YES\r
+\r
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the \r
+# brief documentation of file, namespace and class members alphabetically \r
+# by member name. If set to NO (the default) the members will appear in \r
+# declaration order.\r
+\r
+SORT_BRIEF_DOCS        = NO\r
+\r
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the \r
+# hierarchy of group names into alphabetical order. If set to NO (the default) \r
+# the group names will appear in their defined order.\r
+\r
+SORT_GROUP_NAMES       = NO\r
+\r
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be \r
+# sorted by fully-qualified names, including namespaces. If set to \r
+# NO (the default), the class list will be sorted only by class name, \r
+# not including the namespace part. \r
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\r
+# Note: This option applies only to the class list, not to the \r
+# alphabetical list.\r
+\r
+SORT_BY_SCOPE_NAME     = NO\r
+\r
+# The GENERATE_TODOLIST tag can be used to enable (YES) or \r
+# disable (NO) the todo list. This list is created by putting \todo \r
+# commands in the documentation.\r
+\r
+GENERATE_TODOLIST      = YES\r
+\r
+# The GENERATE_TESTLIST tag can be used to enable (YES) or \r
+# disable (NO) the test list. This list is created by putting \test \r
+# commands in the documentation.\r
+\r
+GENERATE_TESTLIST      = YES\r
+\r
+# The GENERATE_BUGLIST tag can be used to enable (YES) or \r
+# disable (NO) the bug list. This list is created by putting \bug \r
+# commands in the documentation.\r
+\r
+GENERATE_BUGLIST       = YES\r
+\r
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or \r
+# disable (NO) the deprecated list. This list is created by putting \r
+# \deprecated commands in the documentation.\r
+\r
+GENERATE_DEPRECATEDLIST= YES\r
+\r
+# The ENABLED_SECTIONS tag can be used to enable conditional \r
+# documentation sections, marked by \if sectionname ... \endif.\r
+\r
+ENABLED_SECTIONS       = \r
+\r
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines \r
+# the initial value of a variable or define consists of for it to appear in \r
+# the documentation. If the initializer consists of more lines than specified \r
+# here it will be hidden. Use a value of 0 to hide initializers completely. \r
+# The appearance of the initializer of individual variables and defines in the \r
+# documentation can be controlled using \showinitializer or \hideinitializer \r
+# command in the documentation regardless of this setting.\r
+\r
+MAX_INITIALIZER_LINES  = 30\r
+\r
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated \r
+# at the bottom of the documentation of classes and structs. If set to YES the \r
+# list will mention the files that were used to generate the documentation.\r
+\r
+SHOW_USED_FILES        = YES\r
+\r
+# If the sources in your project are distributed over multiple directories \r
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy \r
+# in the documentation. The default is NO.\r
+\r
+SHOW_DIRECTORIES       = NO\r
+\r
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.\r
+# This will remove the Files entry from the Quick Index and from the \r
+# Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_FILES             = YES\r
+\r
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the \r
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index\r
+# and from the Folder Tree View (if specified). The default is YES.\r
+\r
+SHOW_NAMESPACES        = NO\r
+\r
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that \r
+# doxygen should invoke to get the current version for each file (typically from \r
+# the version control system). Doxygen will invoke the program by executing (via \r
+# popen()) the command <command> <input-file>, where <command> is the value of \r
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \r
+# provided by doxygen. Whatever the program writes to standard output \r
+# is used as the file version. See the manual for examples.\r
+\r
+FILE_VERSION_FILTER    = \r
+\r
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by \r
+# doxygen. The layout file controls the global structure of the generated output files \r
+# in an output format independent way. The create the layout file that represents \r
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a \r
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name \r
+# of the layout file.\r
+\r
+LAYOUT_FILE            = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to warning and progress messages\r
+#---------------------------------------------------------------------------\r
+\r
+# The QUIET tag can be used to turn on/off the messages that are generated \r
+# by doxygen. Possible values are YES and NO. If left blank NO is used.\r
+\r
+QUIET                  = NO\r
+\r
+# The WARNINGS tag can be used to turn on/off the warning messages that are \r
+# generated by doxygen. Possible values are YES and NO. If left blank \r
+# NO is used.\r
+\r
+WARNINGS               = YES\r
+\r
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \r
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \r
+# automatically be disabled.\r
+\r
+WARN_IF_UNDOCUMENTED   = NO\r
+\r
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for \r
+# potential errors in the documentation, such as not documenting some \r
+# parameters in a documented function, or documenting parameters that \r
+# don't exist or using markup commands wrongly.\r
+\r
+WARN_IF_DOC_ERROR      = YES\r
+\r
+# This WARN_NO_PARAMDOC option can be abled to get warnings for \r
+# functions that are documented, but have no documentation for their parameters \r
+# or return value. If set to NO (the default) doxygen will only warn about \r
+# wrong or incomplete parameter documentation, but not about the absence of \r
+# documentation.\r
+\r
+WARN_NO_PARAMDOC       = NO\r
+\r
+# The WARN_FORMAT tag determines the format of the warning messages that \r
+# doxygen can produce. The string should contain the $file, $line, and $text \r
+# tags, which will be replaced by the file and line number from which the \r
+# warning originated and the warning text. Optionally the format may contain \r
+# $version, which will be replaced by the version of the file (if it could \r
+# be obtained via FILE_VERSION_FILTER)\r
+\r
+WARN_FORMAT            = "$file:$line: $text"\r
+\r
+# The WARN_LOGFILE tag can be used to specify a file to which warning \r
+# and error messages should be written. If left blank the output is written \r
+# to stderr.\r
+\r
+WARN_LOGFILE           = doxygen_warnings.log\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the input files\r
+#---------------------------------------------------------------------------\r
+\r
+# The INPUT tag can be used to specify the files and/or directories that contain \r
+# documented source files. You may enter file names like "myfile.cpp" or \r
+# directories like "/usr/src/myproject". Separate the files or directories \r
+# with spaces.\r
+\r
+INPUT                  = src\r
+\r
+# This tag can be used to specify the character encoding of the source files \r
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \r
+# also the default input encoding. Doxygen uses libiconv (or the iconv built \r
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \r
+# the list of possible encodings.\r
+\r
+INPUT_ENCODING         = UTF-8\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank the following patterns are tested: \r
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx \r
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90\r
+\r
+FILE_PATTERNS          = *.cpp *.h\r
+\r
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories \r
+# should be searched for input files as well. Possible values are YES and NO. \r
+# If left blank NO is used.\r
+\r
+RECURSIVE              = YES\r
+\r
+# The EXCLUDE tag can be used to specify files and/or directories that should \r
+# excluded from the INPUT source files. This way you can easily exclude a \r
+# subdirectory from a directory tree whose root is specified with the INPUT tag.\r
+\r
+EXCLUDE                =\r
+\r
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or \r
+# directories that are symbolic links (a Unix filesystem feature) are excluded \r
+# from the input.\r
+\r
+EXCLUDE_SYMLINKS       = YES\r
+\r
+# If the value of the INPUT tag contains directories, you can use the \r
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude \r
+# certain files from those directories. Note that the wildcards are matched \r
+# against the file with absolute path, so to exclude all test directories \r
+# for example use the pattern */test/*\r
+\r
+EXCLUDE_PATTERNS       = \r
+\r
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \r
+# (namespaces, classes, functions, etc.) that should be excluded from the \r
+# output. The symbol name can be a fully qualified name, a word, or if the \r
+# wildcard * is used, a substring. Examples: ANamespace, AClass, \r
+# AClass::ANamespace, ANamespace::*Test\r
+\r
+EXCLUDE_SYMBOLS        = \r
+\r
+# The EXAMPLE_PATH tag can be used to specify one or more files or \r
+# directories that contain example code fragments that are included (see \r
+# the \include command).\r
+\r
+EXAMPLE_PATH           = \r
+\r
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the \r
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \r
+# and *.h) to filter out the source-files in the directories. If left \r
+# blank all files are included.\r
+\r
+EXAMPLE_PATTERNS       = \r
+\r
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be \r
+# searched for input files to be used with the \include or \dontinclude \r
+# commands irrespective of the value of the RECURSIVE tag. \r
+# Possible values are YES and NO. If left blank NO is used.\r
+\r
+EXAMPLE_RECURSIVE      = NO\r
+\r
+# The IMAGE_PATH tag can be used to specify one or more files or \r
+# directories that contain image that are included in the documentation (see \r
+# the \image command).\r
+\r
+IMAGE_PATH             = \r
+\r
+# The INPUT_FILTER tag can be used to specify a program that doxygen should \r
+# invoke to filter for each input file. Doxygen will invoke the filter program \r
+# by executing (via popen()) the command <filter> <input-file>, where <filter> \r
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an \r
+# input file. Doxygen will then use the output that the filter program writes \r
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be \r
+# ignored.\r
+\r
+INPUT_FILTER           = \r
+\r
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern \r
+# basis.  Doxygen will compare the file name with each pattern and apply the \r
+# filter if there is a match.  The filters are a list of the form: \r
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further \r
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER \r
+# is applied to all files.\r
+\r
+FILTER_PATTERNS        = \r
+\r
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using \r
+# INPUT_FILTER) will be used to filter the input files when producing source \r
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).\r
+\r
+FILTER_SOURCE_FILES    = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to source browsing\r
+#---------------------------------------------------------------------------\r
+\r
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will \r
+# be generated. Documented entities will be cross-referenced with these sources. \r
+# Note: To get rid of all source code in the generated output, make sure also \r
+# VERBATIM_HEADERS is set to NO.\r
+\r
+SOURCE_BROWSER         = NO\r
+\r
+# Setting the INLINE_SOURCES tag to YES will include the body \r
+# of functions and classes directly in the documentation.\r
+\r
+INLINE_SOURCES         = NO\r
+\r
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct \r
+# doxygen to hide any special comment blocks from generated source code \r
+# fragments. Normal C and C++ comments will always remain visible.\r
+\r
+STRIP_CODE_COMMENTS    = YES\r
+\r
+# If the REFERENCED_BY_RELATION tag is set to YES \r
+# then for each documented function all documented \r
+# functions referencing it will be listed.\r
+\r
+REFERENCED_BY_RELATION = YES\r
+\r
+# If the REFERENCES_RELATION tag is set to YES \r
+# then for each documented function all documented entities \r
+# called/used by that function will be listed.\r
+\r
+REFERENCES_RELATION    = YES\r
+\r
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\r
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\r
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\r
+# link to the source code.  Otherwise they will link to the documentstion.\r
+\r
+REFERENCES_LINK_SOURCE = YES\r
+\r
+# If the USE_HTAGS tag is set to YES then the references to source code \r
+# will point to the HTML generated by the htags(1) tool instead of doxygen \r
+# built-in source browser. The htags tool is part of GNU's global source \r
+# tagging system (see http://www.gnu.org/software/global/global.html). You \r
+# will need version 4.8.6 or higher.\r
+\r
+USE_HTAGS              = NO\r
+\r
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen \r
+# will generate a verbatim copy of the header file for each class for \r
+# which an include is specified. Set to NO to disable this.\r
+\r
+VERBATIM_HEADERS       = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the alphabetical class index\r
+#---------------------------------------------------------------------------\r
+\r
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then \r
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns \r
+# in which this list will be split (can be a number in the range [1..20])\r
+\r
+COLS_IN_ALPHA_INDEX    = 5\r
+\r
+# In case all classes in a project start with a common prefix, all \r
+# classes will be put under the same header in the alphabetical index. \r
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that \r
+# should be ignored while generating the index headers.\r
+\r
+IGNORE_PREFIX          = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the HTML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will \r
+# generate HTML output.\r
+\r
+GENERATE_HTML          = YES\r
+\r
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `html' will be used as the default path.\r
+\r
+HTML_OUTPUT            = html\r
+\r
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for \r
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank \r
+# doxygen will generate files with .html extension.\r
+\r
+HTML_FILE_EXTENSION    = .html\r
+\r
+# The HTML_HEADER tag can be used to specify a personal HTML header for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard header.\r
+\r
+HTML_HEADER            = \r
+\r
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for \r
+# each generated HTML page. If it is left blank doxygen will generate a \r
+# standard footer.\r
+\r
+HTML_FOOTER            = \r
+\r
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading \r
+# style sheet that is used by each HTML page. It can be used to \r
+# fine-tune the look of the HTML output. If the tag is left blank doxygen \r
+# will generate a default style sheet. Note that doxygen will try to copy \r
+# the style sheet file to the HTML output directory, so don't put your own \r
+# stylesheet in the HTML output directory as well, or it will be erased!\r
+\r
+HTML_STYLESHEET        = \r
+\r
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, \r
+# files or namespaces will be aligned in HTML using tables. If set to \r
+# NO a bullet list will be used.\r
+\r
+HTML_ALIGN_MEMBERS     = YES\r
+\r
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \r
+# documentation will contain sections that can be hidden and shown after the \r
+# page has loaded. For this to work a browser that supports \r
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox \r
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).\r
+\r
+HTML_DYNAMIC_SECTIONS  = NO\r
+\r
+# If the GENERATE_DOCSET tag is set to YES, additional index files \r
+# will be generated that can be used as input for Apple's Xcode 3 \r
+# integrated development environment, introduced with OSX 10.5 (Leopard). \r
+# To create a documentation set, doxygen will generate a Makefile in the \r
+# HTML output directory. Running make will produce the docset in that \r
+# directory and running "make install" will install the docset in \r
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \r
+# it at startup. \r
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.\r
+\r
+GENERATE_DOCSET        = NO\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \r
+# feed. A documentation feed provides an umbrella under which multiple \r
+# documentation sets from a single provider (such as a company or product suite) \r
+# can be grouped.\r
+\r
+DOCSET_FEEDNAME        = "Doxygen generated docs"\r
+\r
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \r
+# should uniquely identify the documentation set bundle. This should be a \r
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \r
+# will append .docset to the name.\r
+\r
+DOCSET_BUNDLE_ID       = org.doxygen.Project\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files \r
+# will be generated that can be used as input for tools like the \r
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) \r
+# of the generated HTML documentation.\r
+\r
+GENERATE_HTMLHELP      = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \r
+# be used to specify the file name of the resulting .chm file. You \r
+# can add a path in front of the file if the result should not be \r
+# written to the html output directory.\r
+\r
+CHM_FILE               = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can \r
+# be used to specify the location (absolute path including file name) of \r
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run \r
+# the HTML help compiler on the generated index.hhp.\r
+\r
+HHC_LOCATION           = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag \r
+# controls if a separate .chi index file is generated (YES) or that \r
+# it should be included in the master .chm file (NO).\r
+\r
+GENERATE_CHI           = NO\r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\r
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file\r
+# content.\r
+\r
+CHM_INDEX_ENCODING     = \r
+\r
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag \r
+# controls whether a binary table of contents is generated (YES) or a \r
+# normal table of contents (NO) in the .chm file.\r
+\r
+BINARY_TOC             = NO\r
+\r
+# The TOC_EXPAND flag can be set to YES to add extra items for group members \r
+# to the contents of the HTML help documentation and to the tree view.\r
+\r
+TOC_EXPAND             = NO\r
+\r
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER \r
+# are set, an additional index file will be generated that can be used as input for \r
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated \r
+# HTML documentation.\r
+\r
+GENERATE_QHP           = NO\r
+\r
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can \r
+# be used to specify the file name of the resulting .qch file. \r
+# The path specified is relative to the HTML output folder.\r
+\r
+QCH_FILE               = \r
+\r
+# The QHP_NAMESPACE tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.\r
+\r
+QHP_NAMESPACE          = org.doxygen.Project\r
+\r
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating \r
+# Qt Help Project output. For more information please see \r
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.\r
+\r
+QHP_VIRTUAL_FOLDER     = doc\r
+\r
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can \r
+# be used to specify the location of Qt's qhelpgenerator. \r
+# If non-empty doxygen will try to run qhelpgenerator on the generated \r
+# .qhp file .\r
+\r
+QHG_LOCATION           = \r
+\r
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \r
+# top of each HTML page. The value NO (the default) enables the index and \r
+# the value YES disables it.\r
+\r
+DISABLE_INDEX          = NO\r
+\r
+# This tag can be used to set the number of enum values (range [1..20]) \r
+# that doxygen will group on one line in the generated HTML documentation.\r
+\r
+ENUM_VALUES_PER_LINE   = 4\r
+\r
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\r
+# structure should be generated to display hierarchical information.\r
+# If the tag value is set to FRAME, a side panel will be generated\r
+# containing a tree-like index structure (just like the one that \r
+# is generated for HTML Help). For this to work a browser that supports \r
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, \r
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are \r
+# probably better off using the HTML help feature. Other possible values \r
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,\r
+# and Class Hierarchy pages using a tree view instead of an ordered list;\r
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which\r
+# disables this behavior completely. For backwards compatibility with previous\r
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE\r
+# respectively.\r
+\r
+GENERATE_TREEVIEW      = NO\r
+\r
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \r
+# used to set the initial width (in pixels) of the frame in which the tree \r
+# is shown.\r
+\r
+TREEVIEW_WIDTH         = 250\r
+\r
+# Use this tag to change the font size of Latex formulas included \r
+# as images in the HTML documentation. The default is 10. Note that \r
+# when you change the font size after a successful doxygen run you need \r
+# to manually remove any form_*.png images from the HTML output directory \r
+# to force them to be regenerated.\r
+\r
+FORMULA_FONTSIZE       = 10\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the LaTeX output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will \r
+# generate Latex output.\r
+\r
+GENERATE_LATEX         = NO\r
+\r
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `latex' will be used as the default path.\r
+\r
+LATEX_OUTPUT           = latex\r
+\r
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be \r
+# invoked. If left blank `latex' will be used as the default command name.\r
+\r
+LATEX_CMD_NAME         = latex\r
+\r
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to \r
+# generate index for LaTeX. If left blank `makeindex' will be used as the \r
+# default command name.\r
+\r
+MAKEINDEX_CMD_NAME     = makeindex\r
+\r
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact \r
+# LaTeX documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_LATEX          = NO\r
+\r
+# The PAPER_TYPE tag can be used to set the paper type that is used \r
+# by the printer. Possible values are: a4, a4wide, letter, legal and \r
+# executive. If left blank a4wide will be used.\r
+\r
+PAPER_TYPE             = a4wide\r
+\r
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX \r
+# packages that should be included in the LaTeX output.\r
+\r
+EXTRA_PACKAGES         = \r
+\r
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for \r
+# the generated latex document. The header should contain everything until \r
+# the first chapter. If it is left blank doxygen will generate a \r
+# standard header. Notice: only use this tag if you know what you are doing!\r
+\r
+LATEX_HEADER           = \r
+\r
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated \r
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will \r
+# contain links (just like the HTML output) instead of page references \r
+# This makes the output suitable for online browsing using a pdf viewer.\r
+\r
+PDF_HYPERLINKS         = NO\r
+\r
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \r
+# plain latex in the generated Makefile. Set this option to YES to get a \r
+# higher quality PDF documentation.\r
+\r
+USE_PDFLATEX           = NO\r
+\r
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. \r
+# command to the generated LaTeX files. This will instruct LaTeX to keep \r
+# running if errors occur, instead of asking the user for help. \r
+# This option is also used when generating formulas in HTML.\r
+\r
+LATEX_BATCHMODE        = NO\r
+\r
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not \r
+# include the index chapters (such as File Index, Compound Index, etc.) \r
+# in the output.\r
+\r
+LATEX_HIDE_INDICES     = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the RTF output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \r
+# The RTF output is optimized for Word 97 and may not look very pretty with \r
+# other RTF readers or editors.\r
+\r
+GENERATE_RTF           = NO\r
+\r
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `rtf' will be used as the default path.\r
+\r
+RTF_OUTPUT             = rtf\r
+\r
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact \r
+# RTF documents. This may be useful for small projects and may help to \r
+# save some trees in general.\r
+\r
+COMPACT_RTF            = NO\r
+\r
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated \r
+# will contain hyperlink fields. The RTF file will \r
+# contain links (just like the HTML output) instead of page references. \r
+# This makes the output suitable for online browsing using WORD or other \r
+# programs which support those fields. \r
+# Note: wordpad (write) and others do not support links.\r
+\r
+RTF_HYPERLINKS         = NO\r
+\r
+# Load stylesheet definitions from file. Syntax is similar to doxygen's \r
+# config file, i.e. a series of assignments. You only have to provide \r
+# replacements, missing definitions are set to their default value.\r
+\r
+RTF_STYLESHEET_FILE    = \r
+\r
+# Set optional variables used in the generation of an rtf document. \r
+# Syntax is similar to doxygen's config file.\r
+\r
+RTF_EXTENSIONS_FILE    = \r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the man page output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will \r
+# generate man pages\r
+\r
+GENERATE_MAN           = NO\r
+\r
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `man' will be used as the default path.\r
+\r
+MAN_OUTPUT             = man\r
+\r
+# The MAN_EXTENSION tag determines the extension that is added to \r
+# the generated man pages (default is the subroutine's section .3)\r
+\r
+MAN_EXTENSION          = .3\r
+\r
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, \r
+# then it will generate one additional man file for each entity \r
+# documented in the real man page(s). These additional files \r
+# only source the real man page, but without them the man command \r
+# would be unable to find the correct page. The default is NO.\r
+\r
+MAN_LINKS              = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the XML output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_XML tag is set to YES Doxygen will \r
+# generate an XML file that captures the structure of \r
+# the code including all documentation.\r
+\r
+GENERATE_XML           = NO\r
+\r
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. \r
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be \r
+# put in front of it. If left blank `xml' will be used as the default path.\r
+\r
+XML_OUTPUT             = xml\r
+\r
+# The XML_SCHEMA tag can be used to specify an XML schema, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_SCHEMA             = \r
+\r
+# The XML_DTD tag can be used to specify an XML DTD, \r
+# which can be used by a validating XML parser to check the \r
+# syntax of the XML files.\r
+\r
+XML_DTD                = \r
+\r
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will \r
+# dump the program listings (including syntax highlighting \r
+# and cross-referencing information) to the XML output. Note that \r
+# enabling this will significantly increase the size of the XML output.\r
+\r
+XML_PROGRAMLISTING     = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options for the AutoGen Definitions output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \r
+# generate an AutoGen Definitions (see autogen.sf.net) file \r
+# that captures the structure of the code including all \r
+# documentation. Note that this feature is still experimental \r
+# and incomplete at the moment.\r
+\r
+GENERATE_AUTOGEN_DEF   = NO\r
+\r
+#---------------------------------------------------------------------------\r
+# configuration options related to the Perl module output\r
+#---------------------------------------------------------------------------\r
+\r
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will \r
+# generate a Perl module file that captures the structure of \r
+# the code including all documentation. Note that this \r
+# feature is still experimental and incomplete at the \r
+# moment.\r
+\r
+GENERATE_PERLMOD       = NO\r
+\r
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate \r
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able \r
+# to generate PDF and DVI output from the Perl module output.\r
+\r
+PERLMOD_LATEX          = NO\r
+\r
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be \r
+# nicely formatted so it can be parsed by a human reader.  This is useful \r
+# if you want to understand what is going on.  On the other hand, if this \r
+# tag is set to NO the size of the Perl module output will be much smaller \r
+# and Perl will parse it just the same.\r
+\r
+PERLMOD_PRETTY         = YES\r
+\r
+# The names of the make variables in the generated doxyrules.make file \r
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. \r
+# This is useful so different doxyrules.make files included by the same \r
+# Makefile don't overwrite each other's variables.\r
+\r
+PERLMOD_MAKEVAR_PREFIX = \r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the preprocessor   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will \r
+# evaluate all C-preprocessor directives found in the sources and include \r
+# files.\r
+\r
+ENABLE_PREPROCESSING   = YES\r
+\r
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro \r
+# names in the source code. If set to NO (the default) only conditional \r
+# compilation will be performed. Macro expansion can be done in a controlled \r
+# way by setting EXPAND_ONLY_PREDEF to YES.\r
+\r
+MACRO_EXPANSION        = NO\r
+\r
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES \r
+# then the macro expansion is limited to the macros specified with the \r
+# PREDEFINED and EXPAND_AS_DEFINED tags.\r
+\r
+EXPAND_ONLY_PREDEF     = NO\r
+\r
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files \r
+# in the INCLUDE_PATH (see below) will be search if a #include is found.\r
+\r
+SEARCH_INCLUDES        = YES\r
+\r
+# The INCLUDE_PATH tag can be used to specify one or more directories that \r
+# contain include files that are not input files but should be processed by \r
+# the preprocessor.\r
+\r
+INCLUDE_PATH           = src\r
+\r
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard \r
+# patterns (like *.h and *.hpp) to filter out the header-files in the \r
+# directories. If left blank, the patterns specified with FILE_PATTERNS will \r
+# be used.\r
+\r
+INCLUDE_FILE_PATTERNS  = \r
+\r
+# The PREDEFINED tag can be used to specify one or more macro names that \r
+# are defined before the preprocessor is started (similar to the -D option of \r
+# gcc). The argument of the tag is a list of macros of the form: name \r
+# or name=definition (no spaces). If the definition and the = are \r
+# omitted =1 is assumed. To prevent a macro definition from being \r
+# undefined via #undef or recursively expanded use the := operator \r
+# instead of the = operator.\r
+\r
+PREDEFINED             = \r
+\r
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then \r
+# this tag can be used to specify a list of macro names that should be expanded. \r
+# The macro definition that is found in the sources will be used. \r
+# Use the PREDEFINED tag if you want to use a different macro definition.\r
+\r
+EXPAND_AS_DEFINED      = \r
+\r
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then \r
+# doxygen's preprocessor will remove all function-like macros that are alone \r
+# on a line, have an all uppercase name, and do not end with a semicolon. Such \r
+# function macros are typically used for boiler-plate code, and will confuse \r
+# the parser if not removed.\r
+\r
+SKIP_FUNCTION_MACROS   = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to external references   \r
+#---------------------------------------------------------------------------\r
+\r
+# The TAGFILES option can be used to specify one or more tagfiles. \r
+# Optionally an initial location of the external documentation \r
+# can be added for each tagfile. The format of a tag file without \r
+# this location is as follows: \r
+#   TAGFILES = file1 file2 ... \r
+# Adding location for the tag files is done as follows: \r
+#   TAGFILES = file1=loc1 "file2 = loc2" ... \r
+# where "loc1" and "loc2" can be relative or absolute paths or \r
+# URLs. If a location is present for each tag, the installdox tool \r
+# does not have to be run to correct the links.\r
+# Note that each tag file must have a unique name\r
+# (where the name does NOT include the path)\r
+# If a tag file is not located in the directory in which doxygen \r
+# is run, you must also specify the path to the tagfile here.\r
+\r
+TAGFILES               = \r
+\r
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create \r
+# a tag file that is based on the input files it reads.\r
+\r
+GENERATE_TAGFILE       = \r
+\r
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed \r
+# in the class index. If set to NO only the inherited external classes \r
+# will be listed.\r
+\r
+ALLEXTERNALS           = NO\r
+\r
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed \r
+# in the modules index. If set to NO, only the current project's groups will \r
+# be listed.\r
+\r
+EXTERNAL_GROUPS        = YES\r
+\r
+# The PERL_PATH should be the absolute path and name of the perl script \r
+# interpreter (i.e. the result of `which perl').\r
+\r
+PERL_PATH              = /usr/bin/perl\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration options related to the dot tool   \r
+#---------------------------------------------------------------------------\r
+\r
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \r
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base \r
+# or super classes. Setting the tag to NO turns the diagrams off. Note that \r
+# this option is superseded by the HAVE_DOT option below. This is only a \r
+# fallback. It is recommended to install and use dot, since it yields more \r
+# powerful graphs.\r
+\r
+CLASS_DIAGRAMS         = YES\r
+\r
+# You can define message sequence charts within doxygen comments using the \msc \r
+# command. Doxygen will then run the mscgen tool (see \r
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \r
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where \r
+# the mscgen tool resides. If left empty the tool is assumed to be found in the \r
+# default search path.\r
+\r
+MSCGEN_PATH            = \r
+\r
+# If set to YES, the inheritance and collaboration graphs will hide \r
+# inheritance and usage relations if the target is undocumented \r
+# or is not a class.\r
+\r
+HIDE_UNDOC_RELATIONS   = YES\r
+\r
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \r
+# available from the path. This tool is part of Graphviz, a graph visualization \r
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section \r
+# have no effect if this option is set to NO (the default)\r
+\r
+HAVE_DOT               = YES\r
+\r
+# By default doxygen will write a font called FreeSans.ttf to the output \r
+# directory and reference it in all dot files that doxygen generates. This \r
+# font does not include all possible unicode characters however, so when you need \r
+# these (or just want a differently looking font) you can specify the font name \r
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, \r
+# which can be done by putting it in a standard location or by setting the \r
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory \r
+# containing the font.\r
+\r
+DOT_FONTNAME           = FreeSans\r
+\r
+# By default doxygen will tell dot to use the output directory to look for the \r
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a \r
+# different font using DOT_FONTNAME you can set the path where dot \r
+# can find it using this tag.\r
+\r
+DOT_FONTPATH           = \r
+\r
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect inheritance relations. Setting this tag to YES will force the \r
+# the CLASS_DIAGRAMS tag to NO.\r
+\r
+CLASS_GRAPH            = YES\r
+\r
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for each documented class showing the direct and \r
+# indirect implementation dependencies (inheritance, containment, and \r
+# class references variables) of the class with other documented classes.\r
+\r
+COLLABORATION_GRAPH    = YES\r
+\r
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \r
+# will generate a graph for groups, showing the direct groups dependencies\r
+\r
+GROUP_GRAPHS           = YES\r
+\r
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and \r
+# collaboration diagrams in a style similar to the OMG's Unified Modeling \r
+# Language.\r
+\r
+UML_LOOK               = NO\r
+\r
+# If set to YES, the inheritance and collaboration graphs will show the \r
+# relations between templates and their instances.\r
+\r
+TEMPLATE_RELATIONS     = NO\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \r
+# tags are set to YES then doxygen will generate a graph for each documented \r
+# file showing the direct and indirect include dependencies of the file with \r
+# other documented files.\r
+\r
+INCLUDE_GRAPH          = YES\r
+\r
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and \r
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each \r
+# documented header file showing the documented files that directly or \r
+# indirectly include this file.\r
+\r
+INCLUDED_BY_GRAPH      = YES\r
+\r
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then \r
+# doxygen will generate a call dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable call graphs \r
+# for selected functions only using the \callgraph command.\r
+\r
+CALL_GRAPH             = NO\r
+\r
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then \r
+# doxygen will generate a caller dependency graph for every global function \r
+# or class method. Note that enabling this option will significantly increase \r
+# the time of a run. So in most cases it will be better to enable caller \r
+# graphs for selected functions only using the \callergraph command.\r
+\r
+CALLER_GRAPH           = NO\r
+\r
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen \r
+# will graphical hierarchy of all classes instead of a textual one.\r
+\r
+GRAPHICAL_HIERARCHY    = YES\r
+\r
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES \r
+# then doxygen will show the dependencies a directory has on other directories \r
+# in a graphical way. The dependency relations are determined by the #include\r
+# relations between the files in the directories.\r
+\r
+DIRECTORY_GRAPH        = YES\r
+\r
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images \r
+# generated by dot. Possible values are png, jpg, or gif\r
+# If left blank png will be used.\r
+\r
+DOT_IMAGE_FORMAT       = png\r
+\r
+# The tag DOT_PATH can be used to specify the path where the dot tool can be \r
+# found. If left blank, it is assumed the dot tool can be found in the path.\r
+\r
+DOT_PATH               = \r
+\r
+# The DOTFILE_DIRS tag can be used to specify one or more directories that \r
+# contain dot files that are included in the documentation (see the \r
+# \dotfile command).\r
+\r
+DOTFILE_DIRS           = \r
+\r
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \r
+# nodes that will be shown in the graph. If the number of nodes in a graph \r
+# becomes larger than this value, doxygen will truncate the graph, which is \r
+# visualized by representing a node as a red box. Note that doxygen if the \r
+# number of direct children of the root node in a graph is already larger than \r
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \r
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\r
+\r
+DOT_GRAPH_MAX_NODES    = 50\r
+\r
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the \r
+# graphs generated by dot. A depth value of 3 means that only nodes reachable \r
+# from the root by following a path via at most 3 edges will be shown. Nodes \r
+# that lay further from the root node will be omitted. Note that setting this \r
+# option to 1 or 2 may greatly reduce the computation time needed for large \r
+# code bases. Also note that the size of a graph can be further restricted by \r
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\r
+\r
+MAX_DOT_GRAPH_DEPTH    = 0\r
+\r
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \r
+# background. This is disabled by default, because dot on Windows does not \r
+# seem to support this out of the box. Warning: Depending on the platform used, \r
+# enabling this option may lead to badly anti-aliased labels on the edges of \r
+# a graph (i.e. they become hard to read).\r
+\r
+DOT_TRANSPARENT        = NO\r
+\r
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output \r
+# files in one run (i.e. multiple -o and -T options on the command line). This \r
+# makes dot run faster, but since only newer versions of dot (>1.8.10) \r
+# support this, this feature is disabled by default.\r
+\r
+DOT_MULTI_TARGETS      = NO\r
+\r
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will \r
+# generate a legend page explaining the meaning of the various boxes and \r
+# arrows in the dot generated graphs.\r
+\r
+GENERATE_LEGEND        = YES\r
+\r
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will \r
+# remove the intermediate dot files that are used to generate \r
+# the various graphs.\r
+\r
+DOT_CLEANUP            = YES\r
+\r
+#---------------------------------------------------------------------------\r
+# Configuration::additions related to the search engine   \r
+#---------------------------------------------------------------------------\r
+\r
+# The SEARCHENGINE tag specifies whether or not a search engine should be \r
+# used. If set to NO the values of all tags below this one will be ignored.\r
+\r
+SEARCHENGINE           = NO\r
index d8fd3f346777ceb5f30980729c832c3223da18c4..10865698120e3b8ee40a7b81bdaf234a6a2f312b 100644 (file)
         /* Allow reading WordPerfect? */
         #define WITH_LIBWPG                   1
 
-        /* Do we support SVG Fonts? */
-        #define ENABLE_SVG_FONTS              1
-
         #endif /* _CONFIG_H_ */
     </makefile>
   </target>
     <!-- not good <touch file="${src}/ui/dialog/aboutbox.cpp"/> -->
     <!-- better -->
     <delete file="${build}/obj/ui/dialog/aboutbox.o"/>
+    <delete file="inkscape_version.h"/>
   </target>
 
 
     <delete dir="${dist}"/>
     <delete file="build.dep"/>
     <delete file="config.h"/>
+    <delete file="inkscape_version.h"/>
 
   </target>
 
index 19f89316abdd98df4adee9ead4811ef565bd2f02..dfcd346865393653c8ac0aae4620eb95d4dbcc4c 100644 (file)
@@ -934,6 +934,7 @@ src/extension/implementation/makefile
 src/extension/internal/makefile
 src/extension/makefile
 src/extension/script/makefile
+src/filters/makefile
 src/helper/makefile
 src/inkjar/makefile
 src/io/makefile
@@ -971,6 +972,7 @@ share/extensions/alphabet_soup/Makefile
 share/extensions/Barcode/Makefile
 share/extensions/Poly3DObjects/Makefile
 share/extensions/xaml2svg/Makefile
+share/filters/Makefile
 share/fonts/Makefile
 share/gradients/Makefile
 share/icons/Makefile
index bc49f16129d7f722271720f8e4b53b273846ecd9..612e8bff152c95670f3c4a77eb302ac1cd1fd53a 100644 (file)
@@ -32,6 +32,7 @@ RFE</a>).</p>
 <keys><key><keyf f="F6"/></key><key>p</key>     <action>Freehand (Pencil) tool</action></keys>
 <keys><key><shift/><keyf f="F6"/></key><key>b</key>     <action>Bezier (Pen) tool</action></keys>
 <keys><key><ctrl/><keyf f="F6"/></key><key>c</key>      <action>Calligraphy tool</action></keys>
+<keys><key><shift/><keyf f="E"/></key><key>c</key>      <action>Eraser tool</action></keys>
 <keys><key><shift/><keyf f="F7"/></key><key>u</key>     <action>Paint Bucket tool</action></keys>
 <keys><key><ctrl/><keyf f="F1"/></key><key>g</key>      <action>Gradient tool</action></keys>
 <keys><key><keyf f="F7"/></key><key>d</key>     <action>Dropper tool</action></keys>
@@ -243,6 +244,11 @@ RFE</a>).</p>
 </section>
 
 *<section title="Layers" color="f6f9d9">
+
+<group>
+<keys><key><shift/><ctrl/><misc f="N"/></key> <action>create new layer</action></keys>
+</group>
+
 <group>
 <keys><key><shift/><misc f="PgUp"/></key> <action>move to layer above</action></keys>
 <keys><key><shift/><misc f="PgDn"/></key> <action>move to layer below</action></keys>
index d2d5f21b611235316317197d3a32c2dff5897a6f..ef7e16fdafe243ab5e368763bd4cda18c5872c1f 100755 (executable)
@@ -1,21 +1,36 @@
 #! /bin/sh
 # mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+
+scriptversion=2006-05-11.19
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
 # Created: 1993-05-16
-# Public domain
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
 
+nl='
+'
+IFS=" ""       $nl"
 errstatus=0
-dirmode=""
+dirmode=
 
 usage="\
-Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
 
 # process command line arguments
 while test $# -gt 0 ; do
   case $1 in
     -h | --help | --h*)         # -h for help
-      echo "$usage" 1>&2
-      exit 0
+      echo "$usage"
+      exit $?
       ;;
     -m)                         # -m PERM arg
       shift
@@ -23,6 +38,10 @@ while test $# -gt 0 ; do
       dirmode=$1
       shift
       ;;
+    --version)
+      echo "$0 $scriptversion"
+      exit $?
+      ;;
     --)                         # stop option processing
       shift
       break
@@ -50,30 +69,58 @@ case $# in
   0) exit 0 ;;
 esac
 
+# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error.  This is a problem when calling mkinstalldirs
+# from a parallel make.  We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
 case $dirmode in
   '')
-    if mkdir -p -- . 2>/dev/null; then
+    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
       echo "mkdir -p -- $*"
       exec mkdir -p -- "$@"
+    else
+      # On NextStep and OpenStep, the `mkdir' command does not
+      # recognize any option.  It will interpret all options as
+      # directories to create, and then abort because `.' already
+      # exists.
+      test -d ./-p && rmdir ./-p
+      test -d ./--version && rmdir ./--version
     fi
     ;;
   *)
-    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+       test ! -d ./--version; then
       echo "mkdir -m $dirmode -p -- $*"
       exec mkdir -m "$dirmode" -p -- "$@"
+    else
+      # Clean up after NextStep and OpenStep mkdir.
+      for d in ./-m ./-p ./--version "./$dirmode";
+      do
+        test -d $d && rmdir $d
+      done
     fi
     ;;
 esac
 
 for file
 do
-  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  case $file in
+    /*) pathcomp=/ ;;
+    *)  pathcomp= ;;
+  esac
+  oIFS=$IFS
+  IFS=/
+  set fnord $file
   shift
+  IFS=$oIFS
 
-  pathcomp=
   for d
   do
-    pathcomp="$pathcomp$d"
+    test "x$d" = x && continue
+
+    pathcomp=$pathcomp$d
     case $pathcomp in
       -*) pathcomp=./$pathcomp ;;
     esac
@@ -84,21 +131,21 @@ do
       mkdir "$pathcomp" || lasterr=$?
 
       if test ! -d "$pathcomp"; then
-       errstatus=$lasterr
+       errstatus=$lasterr
       else
-       if test ! -z "$dirmode"; then
+       if test ! -z "$dirmode"; then
          echo "chmod $dirmode $pathcomp"
-         lasterr=""
-         chmod "$dirmode" "$pathcomp" || lasterr=$?
+         lasterr=
+         chmod "$dirmode" "$pathcomp" || lasterr=$?
 
-         if test ! -z "$lasterr"; then
-           errstatus=$lasterr
-         fi
-       fi
+         if test ! -z "$lasterr"; then
+           errstatus=$lasterr
+         fi
+       fi
       fi
     fi
 
-    pathcomp="$pathcomp/"
+    pathcomp=$pathcomp/
   done
 done
 
@@ -107,5 +154,8 @@ exit $errstatus
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
 # End:
-# mkinstalldirs ends here
index 30a5d28277ce4f191e942cfb320732f416195543..c27c1af2f4afc5ba67a61429b869eb1c9d1603ad 100644 (file)
@@ -11,7 +11,6 @@ src/context-fns.cpp
 src/desktop.cpp
 src/desktop-events.cpp
 src/dialogs/clonetiler.cpp
-src/dialogs/debugdialog.cpp
 src/dialogs/eek-color-def.cpp
 src/dialogs/export.cpp
 src/dialogs/fill-style.cpp
@@ -27,7 +26,6 @@ src/dialogs/sp-attribute-widget.cpp
 src/dialogs/stroke-style.cpp
 src/dialogs/swatches.cpp
 src/dialogs/text-edit.cpp
-src/dialogs/tiledialog.cpp
 src/dialogs/xml-tree.cpp
 src/display/canvas-axonomgrid.cpp
 src/display/canvas-grid.cpp
@@ -82,12 +80,10 @@ src/extension/internal/bitmap/threshold.cpp
 src/extension/internal/bitmap/unsharpmask.cpp
 src/extension/internal/bitmap/wave.cpp
 src/extension/internal/bluredge.cpp
-src/extension/internal/cairo-pdf-out.cpp
 src/extension/internal/cairo-ps-out.cpp
 src/extension/internal/cairo-renderer-pdf-out.cpp
 src/extension/internal/clear-n_.h
 src/extension/internal/emf-win32-inout.cpp
-src/extension/internal/eps-out.cpp
 src/extension/internal/filter/apparition.h
 src/extension/internal/filter/bloom.h
 src/extension/internal/filter/clouds.h
@@ -124,11 +120,8 @@ src/extension/internal/javafx-out.cpp
 src/extension/internal/latex-pstricks.cpp
 src/extension/internal/latex-pstricks-out.cpp
 src/extension/internal/odf.cpp
-src/extension/internal/pdf-cairo.cpp
 src/extension/internal/pdfinput/pdf-input.cpp
 src/extension/internal/pov-out.cpp
-src/extension/internal/ps.cpp
-src/extension/internal/ps-out.cpp
 src/extension/internal/svg.cpp
 src/extension/internal/svgz.cpp
 src/extension/internal/win32.cpp
@@ -186,6 +179,7 @@ src/live_effects/lpe-copy_rotate.cpp
 src/live_effects/lpe-curvestitch.cpp
 src/live_effects/lpe-envelope.cpp
 src/live_effects/lpe-gears.cpp
+src/live_effects/lpe-hatches.cpp
 src/live_effects/lpe-interpolate.cpp
 src/live_effects/lpe-knot.cpp
 src/live_effects/lpe-lattice.cpp
@@ -210,7 +204,6 @@ src/live_effects/parameter/enum.h
 src/live_effects/parameter/parameter.cpp
 src/live_effects/parameter/path.cpp
 src/live_effects/parameter/point.cpp
-src/live_effects/parameter/pointparam-knotholder.cpp
 src/live_effects/parameter/random.cpp
 src/live_effects/parameter/text.cpp
 src/live_effects/parameter/unit.cpp
@@ -269,6 +262,7 @@ src/ui/clipboard.cpp
 src/ui/context-menu.cpp
 src/ui/dialog/aboutbox.cpp
 src/ui/dialog/align-and-distribute.cpp
+src/ui/dialog/debug.cpp
 src/ui/dialog/document-metadata.cpp
 src/ui/dialog/document-properties.cpp
 src/ui/dialog/extension-editor.cpp
@@ -286,6 +280,7 @@ src/ui/dialog/print.cpp
 src/ui/dialog/scriptdialog.cpp
 src/ui/dialog/session-player.cpp
 src/ui/dialog/svg-fonts-dialog.cpp
+src/ui/dialog/tile.cpp
 src/ui/dialog/tracedialog.cpp
 src/ui/dialog/transformation.cpp
 src/ui/dialog/whiteboard-connect.cpp
@@ -369,6 +364,7 @@ share/extensions/svg_and_media_zip_output.py
 [type: gettext/xml] share/extensions/color_removered.inx
 [type: gettext/xml] share/extensions/color_replace.inx
 [type: gettext/xml] share/extensions/color_rgbbarrel.inx
+[type: gettext/xml] share/extensions/cut-marks.inx
 [type: gettext/xml] share/extensions/dia.inx
 [type: gettext/xml] share/extensions/dimension.inx
 [type: gettext/xml] share/extensions/dots.inx
index bee71a0e92a957868371cc38663fef1ebfe45383..845845c4d5118b9c58b315dfac9cdfc0aa089ddd 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -2,70 +2,60 @@
 # This file is distributed under the same license as the Inkscape package.
 # Copyright © 2006 Free Software Foundation, Inc.
 #
-# Proxecto Trasno http://trasno.net
+# Leandro Regueiro <leandro.regueiro@gmail.com>, 2006, 2007, 2008.
 #
-# Leandro Regueiro <leandro.regueiro@gmail.com>, 2006.
+# Proxecto Trasno http://trasno.net
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: inkscape\n"
 "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
 "POT-Creation-Date: 2008-06-12 21:31+0100\n"
-"PO-Revision-Date: 2006-11-05 18:24+0100\n"
-"Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
+"PO-Revision-Date: 2008-11-08 15:02+0100\n"
+"Last-Translator: Leandro Regueiro <leandro DOT regueiro AT gmail DOT com>\n"
 "Language-Team: Galician <trasno@trasno.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 0.9.5\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #: ../inkscape.desktop.in.h:1
 msgid "Create and edit Scalable Vector Graphics images"
 msgstr "Cree e edite imaxes Scalable Vector Graphics"
 
-# Rosetta
 #: ../inkscape.desktop.in.h:2
-#, fuzzy
 msgid "Inkscape Vector Graphics Editor"
-msgstr "Ilustrador Vectorial Inkscape"
+msgstr "Editor de imaxes vectoriais Inkscape"
 
 #: ../src/arc-context.cpp:338
-msgid ""
-"<b>Ctrl</b>: make circle or integer-ratio ellipse, snap arc/segment angle"
+msgid "<b>Ctrl</b>: make circle or integer-ratio ellipse, snap arc/segment angle"
 msgstr ""
 
-#: ../src/arc-context.cpp:339 ../src/rect-context.cpp:383
+#: ../src/arc-context.cpp:339
+#: ../src/rect-context.cpp:383
 msgid "<b>Shift</b>: draw around the starting point"
 msgstr "<b>Shift</b>: debuxar arredor do punto de inicio"
 
 #: ../src/arc-context.cpp:485
 #, fuzzy, 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>Elipse</b>: %s &#215; %s; con <b>Ctrl</b> para facer un circulo ou unha "
-"elipse de razón enteira; con <b>Shift</b> para debuxar arredor do punto "
-"inicial"
+msgid "<b>Ellipse</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</b> to draw around the starting point"
+msgstr "<b>Elipse</b>: %s &#215; %s; con <b>Ctrl</b> para facer un circulo ou unha elipse de razón enteira; con <b>Shift</b> para debuxar arredor do punto inicial"
 
 #: ../src/arc-context.cpp:487
 #, fuzzy, 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>Elipse</b>: %s &#215; %s; con <b>Ctrl</b> para facer un circulo ou unha "
-"elipse de razón enteira; con <b>Shift</b> para debuxar arredor do punto "
-"inicial"
+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>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto de inicio"
 
 #: ../src/arc-context.cpp:506
 msgid "Create ellipse"
 msgstr "Crear elipse"
 
-#: ../src/box3d-context.cpp:448 ../src/box3d-context.cpp:455
-#: ../src/box3d-context.cpp:462 ../src/box3d-context.cpp:469
-#: ../src/box3d-context.cpp:476 ../src/box3d-context.cpp:483
+#: ../src/box3d-context.cpp:448
+#: ../src/box3d-context.cpp:455
+#: ../src/box3d-context.cpp:462
+#: ../src/box3d-context.cpp:469
+#: ../src/box3d-context.cpp:476
+#: ../src/box3d-context.cpp:483
 #, fuzzy
 msgid "Change perspective (angle of PLs)"
 msgstr "Crear rectángulo"
@@ -76,14 +66,12 @@ msgid "<b>3D Box</b>; with <b>Shift</b> to extrude along the Z axis"
 msgstr ""
 
 #: ../src/box3d-context.cpp:662
-#, fuzzy
 msgid "Create 3D box"
-msgstr "Crear un Mosaico de Clons..."
+msgstr "Crear caixa 3D"
 
 #: ../src/box3d.cpp:315
-#, fuzzy
 msgid "<b>3D Box</b>"
-msgstr "<b>Bordo</b>"
+msgstr "<b>Caixa 3D</b>"
 
 #: ../src/connector-context.cpp:522
 msgid "Creating new connector"
@@ -95,8 +83,9 @@ msgid "Connector endpoint drag cancelled."
 msgstr "Cancelouse o arrastre dun nodo ou dunha asa."
 
 #: ../src/connector-context.cpp:799
+#, fuzzy
 msgid "Reroute connector"
-msgstr ""
+msgstr "Crear conectador"
 
 #. Flush pending updates
 #: ../src/connector-context.cpp:963
@@ -104,45 +93,45 @@ msgid "Create connector"
 msgstr "Crear conectador"
 
 #: ../src/connector-context.cpp:987
+#, fuzzy
 msgid "Finishing connector"
-msgstr ""
+msgstr "Crear conectador"
 
 #: ../src/connector-context.cpp:1130
 msgid "<b>Connection point</b>: click or drag to create a new connector"
-msgstr ""
-"<b>Punto de conexión</b>: prema ou arrastre para crear un novo conectador"
+msgstr "<b>Punto de conexión</b>: prema ou arrastre para crear un novo conectador"
 
 # Rosetta
 #: ../src/connector-context.cpp:1203
 #, fuzzy
 msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
-msgstr ""
-"<b>Punto final do conector</b>: Arrastre para modificar a rota ou reconectar "
-"a figuras novas."
+msgstr "<b>Punto final do conector</b>: Arrastre para modificar a rota ou reconectar a figuras novas."
 
 #: ../src/connector-context.cpp:1314
 msgid "Select <b>at least one non-connector object</b>."
 msgstr ""
 
-#: ../src/connector-context.cpp:1319 ../src/widgets/toolbox.cpp:5554
+#: ../src/connector-context.cpp:1319
+#: ../src/widgets/toolbox.cpp:5554
 #, fuzzy
 msgid "Make connectors avoid selected objects"
 msgstr "Facer que os conectadores eviten os obxectos seleccionados"
 
-#: ../src/connector-context.cpp:1320 ../src/widgets/toolbox.cpp:5564
+#: ../src/connector-context.cpp:1320
+#: ../src/widgets/toolbox.cpp:5564
 #, fuzzy
 msgid "Make connectors ignore selected objects"
 msgstr "Facer que os conectadores ignoren os obxectos seleccionados"
 
-#: ../src/context-fns.cpp:37 ../src/context-fns.cpp:66
+#: ../src/context-fns.cpp:37
+#: ../src/context-fns.cpp:66
 msgid "<b>Current layer is hidden</b>. Unhide it to be able to draw on it."
-msgstr ""
-"<b>A capa actual está agochada</b>. Fagaa visible para poder debuxar nela."
+msgstr "<b>A capa actual está agochada</b>. Fagaa visible para poder debuxar nela."
 
-#: ../src/context-fns.cpp:43 ../src/context-fns.cpp:72
+#: ../src/context-fns.cpp:43
+#: ../src/context-fns.cpp:72
 msgid "<b>Current layer is locked</b>. Unlock it to be able to draw on it."
-msgstr ""
-"<b>A capa actual está bloqueada</b>. Desbloqueea para poder debuxar nela."
+msgstr "<b>A capa actual está bloqueada</b>. Desbloqueea para poder debuxar nela."
 
 #: ../src/desktop.cpp:782
 msgid "No previous zoom."
@@ -153,20 +142,18 @@ msgid "No next zoom."
 msgstr "Non hai ningún zoom posterior."
 
 #: ../src/desktop-events.cpp:175
-#, fuzzy
 msgid "Create guide"
-msgstr "Crear elipse"
+msgstr "Crear unha guía"
 
-#: ../src/desktop-events.cpp:221 ../src/desktop-events.cpp:275
+#: ../src/desktop-events.cpp:221
+#: ../src/desktop-events.cpp:275
 #: ../src/dialogs/guidelinedialog.cpp:127
-#, fuzzy
 msgid "Delete guide"
-msgstr "Borrar o nodo"
+msgstr "Eliminar guía"
 
 #: ../src/desktop-events.cpp:269
-#, fuzzy
 msgid "Move guide"
-msgstr "Amosar _guías"
+msgstr "Mover unha guía"
 
 #: ../src/desktop-events.cpp:290
 #, fuzzy, c-format
@@ -197,7 +184,7 @@ msgstr ""
 #: ../src/dialogs/clonetiler.cpp:1006
 #, fuzzy
 msgid "Unclump tiled clones"
-msgstr "Cor inicial do mosaico de clons"
+msgstr "Crear un Mosaico de Clons..."
 
 #: ../src/dialogs/clonetiler.cpp:1036
 msgid "Select <b>one object</b> whose tiled clones to remove."
@@ -206,23 +193,21 @@ msgstr ""
 #: ../src/dialogs/clonetiler.cpp:1059
 #, fuzzy
 msgid "Delete tiled clones"
-msgstr "Borra-los nodos seleccionados"
+msgstr "Crear un Mosaico de Clons..."
 
-#: ../src/dialogs/clonetiler.cpp:1105 ../src/selection-chemistry.cpp:1818
+#: ../src/dialogs/clonetiler.cpp:1105
+#: ../src/selection-chemistry.cpp:1818
 msgid "Select an <b>object</b> to clone."
 msgstr "Seleccione un <b>obxecto</b> para clonalo."
 
 #: ../src/dialogs/clonetiler.cpp:1111
-msgid ""
-"If you want to clone several objects, <b>group</b> them and <b>clone the "
-"group</b>."
-msgstr ""
-"Se desexa clonar varios obxectos, <b>agrúpeos</b> e <b>clone o grupo</b>."
+msgid "If you want to clone several objects, <b>group</b> them and <b>clone the group</b>."
+msgstr "Se desexa clonar varios obxectos, <b>agrúpeos</b> e <b>clone o grupo</b>."
 
 #: ../src/dialogs/clonetiler.cpp:1120
 #, fuzzy
 msgid "<small>Creating tiled clones...</small>"
-msgstr "<small>O obxecto non ten clons en mosaico.</small>"
+msgstr "<small>O obxecto ten <b>%d</b> clons en mosaico.</small>"
 
 #: ../src/dialogs/clonetiler.cpp:1527
 #, fuzzy
@@ -238,8 +223,9 @@ msgid "<small>Per column:</small>"
 msgstr "<small>Por columna:</small>"
 
 #: ../src/dialogs/clonetiler.cpp:1731
+#, fuzzy
 msgid "<small>Randomize:</small>"
-msgstr ""
+msgstr "<small>Non hai nada seleccionado.</small>"
 
 #: ../src/dialogs/clonetiler.cpp:1885
 msgid "_Symmetry"
@@ -273,11 +259,12 @@ msgstr "<b>PM</b>: reflexo"
 #: ../src/dialogs/clonetiler.cpp:1909
 #, fuzzy
 msgid "<b>PG</b>: glide reflection"
-msgstr "<p>PG</b>: reflexo desprazado"
+msgstr "<b>PMG</b>: reflexo + rotación de 180&#176;"
 
 #: ../src/dialogs/clonetiler.cpp:1910
+#, fuzzy
 msgid "<b>CM</b>: reflection + glide reflection"
-msgstr ""
+msgstr "<b>PMG</b>: reflexo + rotación de 180&#176;"
 
 #: ../src/dialogs/clonetiler.cpp:1911
 msgid "<b>PMM</b>: reflection + reflection"
@@ -371,7 +358,8 @@ msgstr "Translación vertical por columna (en % do alto da tesela)"
 msgid "Randomize the vertical shift by this percentage"
 msgstr ""
 
-#: ../src/dialogs/clonetiler.cpp:2024 ../src/dialogs/clonetiler.cpp:2172
+#: ../src/dialogs/clonetiler.cpp:2024
+#: ../src/dialogs/clonetiler.cpp:2172
 msgid "<b>Exponent:</b>"
 msgstr ""
 
@@ -379,26 +367,25 @@ msgstr ""
 #: ../src/dialogs/clonetiler.cpp:2031
 #, fuzzy
 msgid "Whether rows are spaced evenly (1), converge (<1) or diverge (>1)"
-msgstr ""
-"Se as fileiras están distribuídas uniformemente (1), converxen (<1) ou "
-"diverxen (>1)"
+msgstr "Se as fileiras están distribuídas uniformemente (1), converxen (<1) ou diverxen (>1)"
 
 # Rosetta
 #: ../src/dialogs/clonetiler.cpp:2038
 #, fuzzy
 msgid "Whether columns are spaced evenly (1), converge (<1) or diverge (>1)"
-msgstr ""
-"Se as columnas están espaciadas uniformemente (1), converxen (<1) ou "
-"diverxen (>1)"
+msgstr "Se as columnas están espaciadas uniformemente (1), converxen (<1) ou diverxen (>1)"
 
 # Rosetta
 #. TRANSLATORS: "Alternate" is a verb here
-#: ../src/dialogs/clonetiler.cpp:2046 ../src/dialogs/clonetiler.cpp:2216
-#: ../src/dialogs/clonetiler.cpp:2293 ../src/dialogs/clonetiler.cpp:2369
-#: ../src/dialogs/clonetiler.cpp:2418 ../src/dialogs/clonetiler.cpp:2549
+#: ../src/dialogs/clonetiler.cpp:2046
+#: ../src/dialogs/clonetiler.cpp:2216
+#: ../src/dialogs/clonetiler.cpp:2293
+#: ../src/dialogs/clonetiler.cpp:2369
+#: ../src/dialogs/clonetiler.cpp:2418
+#: ../src/dialogs/clonetiler.cpp:2549
 #, fuzzy
 msgid "<small>Alternate:</small>"
-msgstr "<small>Alternar:</small>"
+msgstr "<small>Non hai nada seleccionado.</small>"
 
 # Rosetta
 #: ../src/dialogs/clonetiler.cpp:2052
@@ -412,11 +399,12 @@ msgstr ""
 
 # Rosetta
 #. TRANSLATORS: "Cumulate" is a verb here
-#: ../src/dialogs/clonetiler.cpp:2064 ../src/dialogs/clonetiler.cpp:2234
+#: ../src/dialogs/clonetiler.cpp:2064
+#: ../src/dialogs/clonetiler.cpp:2234
 #: ../src/dialogs/clonetiler.cpp:2311
 #, fuzzy
 msgid "<small>Cumulate:</small>"
-msgstr "<small>Alternar:</small>"
+msgstr "<small>Non hai nada seleccionado.</small>"
 
 # Rosetta
 #: ../src/dialogs/clonetiler.cpp:2070
@@ -435,51 +423,55 @@ msgstr "Alternar o signo dos desprazamentos en cada fileira"
 #: ../src/dialogs/clonetiler.cpp:2082
 #, fuzzy
 msgid "<small>Exclude tile:</small>"
-msgstr "<small>Alternar:</small>"
+msgstr "<small>Non hai nada seleccionado.</small>"
 
 #: ../src/dialogs/clonetiler.cpp:2088
+#, fuzzy
 msgid "Exclude tile height in shift"
-msgstr ""
+msgstr "Translación vertical por fila (en % do alto da tesela)"
 
 #: ../src/dialogs/clonetiler.cpp:2093
+#, fuzzy
 msgid "Exclude tile width in shift"
-msgstr ""
+msgstr "Translación horizontal por fila (en % do ancho da tesela)"
 
 #: ../src/dialogs/clonetiler.cpp:2102
 msgid "Sc_ale"
 msgstr "Esc_ala"
 
 #: ../src/dialogs/clonetiler.cpp:2110
+#, fuzzy
 msgid "<b>Scale X:</b>"
-msgstr ""
+msgstr "E_scalar"
 
 #: ../src/dialogs/clonetiler.cpp:2118
-#, no-c-format
+#, fuzzy, no-c-format
 msgid "Horizontal scale per row (in % of tile width)"
-msgstr ""
+msgstr "Translación horizontal por fila (en % do ancho da tesela)"
 
 #: ../src/dialogs/clonetiler.cpp:2126
-#, no-c-format
+#, fuzzy, no-c-format
 msgid "Horizontal scale per column (in % of tile width)"
-msgstr ""
+msgstr "Translación horizontal por columna (en % do ancho da tesela)"
 
 #: ../src/dialogs/clonetiler.cpp:2133
 msgid "Randomize the horizontal scale by this percentage"
 msgstr ""
 
 #: ../src/dialogs/clonetiler.cpp:2141
+#, fuzzy
 msgid "<b>Scale Y:</b>"
-msgstr ""
+msgstr "E_scalar"
 
 #: ../src/dialogs/clonetiler.cpp:2149
-#, no-c-format
+#, fuzzy, no-c-format
 msgid "Vertical scale per row (in % of tile height)"
-msgstr ""
+msgstr "Translación vertical por fila (en % do alto da tesela)"
 
 #: ../src/dialogs/clonetiler.cpp:2157
-#, no-c-format
+#, fuzzy, no-c-format
 msgid "Vertical scale per column (in % of tile height)"
-msgstr ""
+msgstr "Translación vertical por columna (en % do alto da tesela)"
 
 #: ../src/dialogs/clonetiler.cpp:2164
 msgid "Randomize the vertical scale by this percentage"
@@ -489,17 +481,13 @@ msgstr ""
 #: ../src/dialogs/clonetiler.cpp:2179
 #, fuzzy
 msgid "Whether row scaling is uniform (1), converge (<1) or diverge (>1)"
-msgstr ""
-"Se as fileiras están distribuídas uniformemente (1), converxen (<1) ou "
-"diverxen (>1)"
+msgstr "Se as fileiras están distribuídas uniformemente (1), converxen (<1) ou diverxen (>1)"
 
 # Rosetta
 #: ../src/dialogs/clonetiler.cpp:2186
 #, fuzzy
 msgid "Whether column scaling is uniform (1), converge (<1) or diverge (>1)"
-msgstr ""
-"Se as columnas están espaciadas uniformemente (1), converxen (<1) ou "
-"diverxen (>1)"
+msgstr "Se as columnas están espaciadas uniformemente (1), converxen (<1) ou diverxen (>1)"
 
 #: ../src/dialogs/clonetiler.cpp:2194
 #, fuzzy
@@ -507,13 +495,11 @@ msgid "<b>Base:</b>"
 msgstr "<b>Novo:</b>"
 
 # Rosetta
-#: ../src/dialogs/clonetiler.cpp:2201 ../src/dialogs/clonetiler.cpp:2208
+#: ../src/dialogs/clonetiler.cpp:2201
+#: ../src/dialogs/clonetiler.cpp:2208
 #, fuzzy
-msgid ""
-"Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"
-msgstr ""
-"Se as fileiras están distribuídas uniformemente (1), converxen (<1) ou "
-"diverxen (>1)"
+msgid "Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"
+msgstr "Se as fileiras están distribuídas uniformemente (1), converxen (<1) ou diverxen (>1)"
 
 #: ../src/dialogs/clonetiler.cpp:2222
 msgid "Alternate the sign of scales for each row"
@@ -578,14 +564,12 @@ msgid "Cumulate the rotation for each column"
 msgstr "Alternar o signo do cambio de opacidade para cada fileira"
 
 #: ../src/dialogs/clonetiler.cpp:2331
-#, fuzzy
 msgid "_Blur & opacity"
-msgstr "Opacidade principal"
+msgstr "_Desenfoque & opacidade"
 
 #: ../src/dialogs/clonetiler.cpp:2340
-#, fuzzy
 msgid "<b>Blur:</b>"
-msgstr "<b>L:</b>"
+msgstr "<b>Desenfoque:</b>"
 
 #: ../src/dialogs/clonetiler.cpp:2347
 #, fuzzy
@@ -619,12 +603,14 @@ msgid "<b>Fade out:</b>"
 msgstr "<b>Esvaecer:</b>"
 
 #: ../src/dialogs/clonetiler.cpp:2396
+#, fuzzy
 msgid "Decrease tile opacity by this percentage for each row"
-msgstr ""
+msgstr "Cambiar o matiz da tesela nesta porcentaxe para cada fila"
 
 #: ../src/dialogs/clonetiler.cpp:2403
+#, fuzzy
 msgid "Decrease tile opacity by this percentage for each column"
-msgstr ""
+msgstr "Cambiar o matiz da tesela nesta porcentaxe para cada columna"
 
 #: ../src/dialogs/clonetiler.cpp:2410
 msgid "Randomize the tile opacity by this percentage"
@@ -654,12 +640,8 @@ msgstr "Cor inicial do mosaico de clons"
 
 #: ../src/dialogs/clonetiler.cpp:2446
 #, fuzzy
-msgid ""
-"Initial color for clones (works only if the original has unset fill or "
-"stroke)"
-msgstr ""
-"Cor inicial dos clons (só funciona se o orixinal non ten asignado un recheo "
-"ou trazo)"
+msgid "Initial color for clones (works only if the original has unset fill or stroke)"
+msgstr "Cor inicial dos clons (só funciona se o orixinal non ten asignado un recheo ou trazo)"
 
 #: ../src/dialogs/clonetiler.cpp:2461
 msgid "<b>H:</b>"
@@ -719,7 +701,7 @@ msgstr ""
 
 #: ../src/dialogs/clonetiler.cpp:2568
 msgid "_Trace"
-msgstr ""
+msgstr "_Vectorizar"
 
 #: ../src/dialogs/clonetiler.cpp:2575
 msgid "Trace the drawing under the tiles"
@@ -728,20 +710,17 @@ msgstr ""
 # Rosetta
 #: ../src/dialogs/clonetiler.cpp:2579
 #, fuzzy
-msgid ""
-"For each clone, pick a value from the drawing in that clone's location and "
-"apply it to the clone"
-msgstr ""
-"Para cada clon, coller un valor do debuxo na localización dese clon e "
-"aplicarllo ao clon"
+msgid "For each clone, pick a value from the drawing in that clone's location and apply it to the clone"
+msgstr "Para cada clon, coller un valor do debuxo na localización dese clon e aplicarllo ao clon"
 
 # Rosetta
 #: ../src/dialogs/clonetiler.cpp:2593
 #, fuzzy
 msgid "1. Pick from the drawing:"
-msgstr "1. Coller do debuxo:"
+msgstr "Coller cores da imaxe"
 
-#: ../src/dialogs/clonetiler.cpp:2604 ../src/dialogs/clonetiler.cpp:2751
+#: ../src/dialogs/clonetiler.cpp:2604
+#: ../src/dialogs/clonetiler.cpp:2751
 #: ../src/extension/internal/bitmap/colorize.cpp:51
 #: ../share/extensions/color_brighter.inx.h:2
 #: ../share/extensions/color_custom.inx.h:2
@@ -768,7 +747,8 @@ msgstr "Cor"
 msgid "Pick the visible color and opacity"
 msgstr "Elixa a cor visible e a opacidade"
 
-#: ../src/dialogs/clonetiler.cpp:2612 ../src/dialogs/clonetiler.cpp:2761
+#: ../src/dialogs/clonetiler.cpp:2612
+#: ../src/dialogs/clonetiler.cpp:2761
 #: ../src/extension/internal/bitmap/opacity.cpp:37
 #: ../src/extension/internal/bitmap/opacity.cpp:39
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2241
@@ -777,8 +757,9 @@ msgid "Opacity"
 msgstr "Opacidade"
 
 #: ../src/dialogs/clonetiler.cpp:2613
+#, fuzzy
 msgid "Pick the total accumulated opacity"
-msgstr ""
+msgstr "Elixa a cor visible e a opacidade"
 
 #: ../src/dialogs/clonetiler.cpp:2620
 msgid "R"
@@ -838,20 +819,19 @@ msgstr "Elixa o brillo da cor"
 #: ../src/dialogs/clonetiler.cpp:2677
 #, fuzzy
 msgid "2. Tweak the picked value:"
-msgstr "2. Mudar o valor collido:"
+msgstr "Inverter o valor seleccionado"
 
 # Rosetta
 #: ../src/dialogs/clonetiler.cpp:2687
 #, fuzzy
 msgid "Gamma-correct:"
-msgstr "Corrección gamma:"
+msgstr "Corrección gamma"
 
 # Rosetta
 #: ../src/dialogs/clonetiler.cpp:2692
 #, fuzzy
 msgid "Shift the mid-range of the picked value upwards (>0) or downwards (<0)"
-msgstr ""
-"Desprazar o rango medio do valor collido para riba (>0) ou para baixo (<0)"
+msgstr "Desprazar o rango medio do valor collido para riba (>0) ou para baixo (<0)"
 
 #: ../src/dialogs/clonetiler.cpp:2699
 msgid "Randomize:"
@@ -878,11 +858,8 @@ msgid "Presence"
 msgstr "Presencia"
 
 #: ../src/dialogs/clonetiler.cpp:2734
-msgid ""
-"Each clone is created with the probability determined by the picked value in "
-"that point"
-msgstr ""
-"Cada clon créase ca probabilidade determinada polo valor elixido nese punto"
+msgid "Each clone is created with the probability determined by the picked value in that point"
+msgstr "Cada clon créase ca probabilidade determinada polo valor elixido nese punto"
 
 #: ../src/dialogs/clonetiler.cpp:2741
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2216
@@ -894,12 +871,8 @@ msgid "Each clone's size is determined by the picked value in that point"
 msgstr "O tamaño de cada clon determínase polo valor elixido nese punto"
 
 #: ../src/dialogs/clonetiler.cpp:2754
-msgid ""
-"Each clone is painted by the picked color (the original must have unset fill "
-"or stroke)"
-msgstr ""
-"Cada clon píntase ca cor escollida (o orixinal debe carecer de recheo ou "
-"trazo)"
+msgid "Each clone is painted by the picked color (the original must have unset fill or stroke)"
+msgstr "Cada clon píntase ca cor escollida (o orixinal debe carecer de recheo ou trazo)"
 
 #: ../src/dialogs/clonetiler.cpp:2764
 msgid "Each clone's opacity is determined by the picked value in that point"
@@ -942,9 +915,7 @@ msgid "Use saved size and position of the tile"
 msgstr ""
 
 #: ../src/dialogs/clonetiler.cpp:2911
-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"
+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 ""
 
 #: ../src/dialogs/clonetiler.cpp:2935
@@ -966,8 +937,7 @@ msgstr "_Espallar"
 
 #: ../src/dialogs/clonetiler.cpp:2953
 msgid "Spread out clones to reduce clumping; can be applied repeatedly"
-msgstr ""
-"Separar os clons para reducir a acumulación; pode aplicarse repetidamente"
+msgstr "Separar os clons para reducir a acumulación; pode aplicarse repetidamente"
 
 #: ../src/dialogs/clonetiler.cpp:2959
 msgid " Re_move "
@@ -983,9 +953,7 @@ msgstr " R_establecer"
 
 #. TRANSLATORS: "change" is a noun here
 #: ../src/dialogs/clonetiler.cpp:2978
-msgid ""
-"Reset all shifts, scales, rotates, opacity and color changes in the dialog "
-"to zero"
+msgid "Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"
 msgstr ""
 
 #: ../src/dialogs/debugdialog.cpp:135
@@ -993,40 +961,51 @@ msgid "Messages"
 msgstr "Mensaxes"
 
 #. ## Add a menu for clear()
-#: ../src/dialogs/debugdialog.cpp:141 ../src/menus-skeleton.h:16
-#: ../src/ui/dialog/messages.cpp:54 ../src/ui/dialog/scriptdialog.cpp:208
+#: ../src/dialogs/debugdialog.cpp:141
+#: ../src/menus-skeleton.h:16
+#: ../src/ui/dialog/messages.cpp:54
+#: ../src/ui/dialog/scriptdialog.cpp:208
 msgid "_File"
 msgstr "_Ficheiro"
 
 #. TRANSLATORS: "Clear" is a verb here
-#: ../src/dialogs/debugdialog.cpp:142 ../src/dialogs/find.cpp:753
-#: ../src/ui/dialog/find.cpp:85 ../src/ui/dialog/messages.cpp:55
+#: ../src/dialogs/debugdialog.cpp:142
+#: ../src/dialogs/find.cpp:753
+#: ../src/ui/dialog/find.cpp:85
+#: ../src/ui/dialog/messages.cpp:55
 #: ../src/ui/dialog/scriptdialog.cpp:209
 msgid "_Clear"
 msgstr "_Limpar"
 
-#: ../src/dialogs/debugdialog.cpp:144 ../src/ui/dialog/messages.cpp:57
+#: ../src/dialogs/debugdialog.cpp:144
+#: ../src/ui/dialog/messages.cpp:57
+#, fuzzy
 msgid "Capture log messages"
-msgstr ""
+msgstr "Ver mensaxes de depuración"
 
-#: ../src/dialogs/debugdialog.cpp:146 ../src/ui/dialog/messages.cpp:59
+#: ../src/dialogs/debugdialog.cpp:146
+#: ../src/ui/dialog/messages.cpp:59
+#, fuzzy
 msgid "Release log messages"
-msgstr ""
+msgstr "Ver mensaxes de depuración"
 
 #: ../src/dialogs/eek-color-def.cpp:56
 #: ../src/widgets/gradient-selector.cpp:162
 msgid "none"
-msgstr ""
+msgstr "ningún"
 
-#: ../src/dialogs/export.cpp:143 ../src/verbs.cpp:2532
+#: ../src/dialogs/export.cpp:143
+#: ../src/verbs.cpp:2532
 msgid "_Page"
 msgstr "_Páxina"
 
-#: ../src/dialogs/export.cpp:143 ../src/verbs.cpp:2536
+#: ../src/dialogs/export.cpp:143
+#: ../src/verbs.cpp:2536
 msgid "_Drawing"
 msgstr "_Debuxo"
 
-#: ../src/dialogs/export.cpp:143 ../src/verbs.cpp:2538
+#: ../src/dialogs/export.cpp:143
+#: ../src/verbs.cpp:2538
 msgid "_Selection"
 msgstr "_Selección"
 
@@ -1051,10 +1030,13 @@ msgid "x_1:"
 msgstr "x_1:"
 
 #. Stroke width
-#: ../src/dialogs/export.cpp:319 ../src/dialogs/object-attributes.cpp:60
+#: ../src/dialogs/export.cpp:319
+#: ../src/dialogs/object-attributes.cpp:60
 #: ../src/dialogs/object-attributes.cpp:68
-#: ../src/dialogs/stroke-style.cpp:1090 ../src/widgets/toolbox.cpp:3241
-#: ../src/widgets/toolbox.cpp:3645 ../src/widgets/toolbox.cpp:4318
+#: ../src/dialogs/stroke-style.cpp:1090
+#: ../src/widgets/toolbox.cpp:3241
+#: ../src/widgets/toolbox.cpp:3645
+#: ../src/widgets/toolbox.cpp:4318
 msgid "Width:"
 msgstr "Ancho:"
 
@@ -1066,7 +1048,8 @@ msgstr "_y0:"
 msgid "y_1:"
 msgstr "y_1:"
 
-#: ../src/dialogs/export.cpp:335 ../src/dialogs/export.cpp:495
+#: ../src/dialogs/export.cpp:335
+#: ../src/dialogs/export.cpp:495
 #: ../src/dialogs/object-attributes.cpp:61
 #: ../src/dialogs/object-attributes.cpp:69
 msgid "Height:"
@@ -1076,11 +1059,13 @@ msgstr "Alto:"
 msgid "<big><b>Bitmap size</b></big>"
 msgstr "<big><b>Tamaño do mapa de bits</b></big>"
 
-#: ../src/dialogs/export.cpp:479 ../src/ui/widget/page-sizer.cpp:191
+#: ../src/dialogs/export.cpp:479
+#: ../src/ui/widget/page-sizer.cpp:191
 msgid "_Width:"
 msgstr "_Ancho:"
 
-#: ../src/dialogs/export.cpp:479 ../src/dialogs/export.cpp:495
+#: ../src/dialogs/export.cpp:479
+#: ../src/dialogs/export.cpp:495
 msgid "pixels at"
 msgstr "píxels con"
 
@@ -1088,7 +1073,8 @@ msgstr "píxels con"
 msgid "dp_i"
 msgstr "_ppp"
 
-#: ../src/dialogs/export.cpp:508 ../src/ui/dialog/inkscape-preferences.cpp:673
+#: ../src/dialogs/export.cpp:508
+#: ../src/ui/dialog/inkscape-preferences.cpp:673
 msgid "dpi"
 msgstr "ppp"
 
@@ -1108,15 +1094,12 @@ msgid "Batch export all selected objects"
 msgstr "Edita-lo equipamento dos obxectos seleccionados"
 
 #: ../src/dialogs/export.cpp:623
-msgid ""
-"Export each selected object into its own PNG file, using export hints if any "
-"(caution, overwrites without asking!)"
+msgid "Export each selected object into its own PNG file, using export hints if any (caution, overwrites without asking!)"
 msgstr ""
 
 #: ../src/dialogs/export.cpp:631
-#, fuzzy
 msgid "Hide all except selected"
-msgstr "Manter seleccionado"
+msgstr "Agochar todo agás a selección"
 
 #: ../src/dialogs/export.cpp:635
 msgid "In the exported image, hide all objects except those that are selected"
@@ -1135,7 +1118,7 @@ msgstr "Exportar o ficheiro de mapa de bits con esta configuración"
 #, fuzzy, c-format
 msgid "Batch export %d selected object"
 msgid_plural "Batch export %d selected objects"
-msgstr[0] "Edita-lo equipamento dos obxectos seleccionados"
+msgstr[0] "O ID do obxecto que se vai exportar"
 msgstr[1] "Edita-lo equipamento dos obxectos seleccionados"
 
 #: ../src/dialogs/export.cpp:1014
@@ -1143,11 +1126,12 @@ msgid "Export in progress"
 msgstr "Exportando"
 
 #: ../src/dialogs/export.cpp:1084
-#, fuzzy, c-format
+#, c-format
 msgid "Exporting %d files"
-msgstr "Exporta-lo ficheiro"
+msgstr "Exportando %d ficheiros"
 
-#: ../src/dialogs/export.cpp:1124 ../src/dialogs/export.cpp:1196
+#: ../src/dialogs/export.cpp:1124
+#: ../src/dialogs/export.cpp:1196
 #, c-format
 msgid "Could not export to filename %s.\n"
 msgstr "Non se puido exportar ó nome de ficheiro %s.\n"
@@ -1166,9 +1150,9 @@ msgid "Directory %s does not exist or is not a directory.\n"
 msgstr "O directorio %s non existe ou non é un directorio.\n"
 
 #: ../src/dialogs/export.cpp:1182
-#, fuzzy, c-format
+#, c-format
 msgid "Exporting %s (%lu x %lu)"
-msgstr "Exportando %s (%d x %d)"
+msgstr "Exportando %s (%lu x %lu)"
 
 #: ../src/dialogs/export.cpp:1303
 msgid "Select a filename for exporting"
@@ -1177,30 +1161,30 @@ msgstr "Seleccione un nome de ficheiro para exportar"
 #: ../src/dialogs/fill-style.cpp:283
 #, fuzzy
 msgid "Change fill rule"
-msgstr "Cambia-los atributos"
+msgstr "R_echeo e Trazo"
 
-#: ../src/dialogs/fill-style.cpp:323 ../src/dialogs/fill-style.cpp:397
-#, fuzzy
+#: ../src/dialogs/fill-style.cpp:323
+#: ../src/dialogs/fill-style.cpp:397
 msgid "Set fill color"
-msgstr "Escolle-la cor de recheo"
+msgstr "Definir a cor do recheo"
 
-#: ../src/dialogs/fill-style.cpp:385 ../src/ui/widget/selected-style.cpp:255
+#: ../src/dialogs/fill-style.cpp:385
+#: ../src/ui/widget/selected-style.cpp:255
 #: ../src/ui/widget/selected-style.cpp:479
 msgid "Remove fill"
-msgstr ""
+msgstr "Eliminar o recheo"
 
 #: ../src/dialogs/fill-style.cpp:466
-#, fuzzy
 msgid "Set gradient on fill"
-msgstr "Crear degradado no recheo"
+msgstr "Definir degradado no recheo"
 
 #: ../src/dialogs/fill-style.cpp:513
-#, fuzzy
 msgid "Set pattern on fill"
-msgstr "Recheo de patrón"
+msgstr "Definir patrón no recheo"
 
 #. TRANSLATORS COMMENT: unset is a verb here
-#: ../src/dialogs/fill-style.cpp:528 ../src/ui/widget/selected-style.cpp:193
+#: ../src/dialogs/fill-style.cpp:528
+#: ../src/ui/widget/selected-style.cpp:193
 #: ../src/ui/widget/selected-style.cpp:251
 #: ../src/ui/widget/selected-style.cpp:497
 #: ../src/ui/widget/style-swatch.cpp:335
@@ -1208,22 +1192,26 @@ msgid "Unset fill"
 msgstr "Recheo non asignado"
 
 #. TRANSLATORS: "%s" is replaced with "exact" or "partial" when this string is displayed
-#: ../src/dialogs/find.cpp:372 ../src/ui/dialog/find.cpp:436
+#: ../src/dialogs/find.cpp:372
+#: ../src/ui/dialog/find.cpp:436
 #, 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] "Atopouse <b>%d</b> obxecto (de <b>%d</b>), coincidencia %s."
 msgstr[1] "Atopáronse <b>%d</b> obxectos (de <b>%d</b>), coincidencia %s."
 
-#: ../src/dialogs/find.cpp:375 ../src/ui/dialog/find.cpp:439
+#: ../src/dialogs/find.cpp:375
+#: ../src/ui/dialog/find.cpp:439
 msgid "exact"
 msgstr "exacta"
 
-#: ../src/dialogs/find.cpp:375 ../src/ui/dialog/find.cpp:439
+#: ../src/dialogs/find.cpp:375
+#: ../src/ui/dialog/find.cpp:439
 msgid "partial"
 msgstr "parcial"
 
-#: ../src/dialogs/find.cpp:382 ../src/ui/dialog/find.cpp:446
+#: ../src/dialogs/find.cpp:382
+#: ../src/ui/dialog/find.cpp:446
 msgid "No objects found"
 msgstr "Non se atoparon obxectos"
 
@@ -1231,209 +1219,249 @@ msgstr "Non se atoparon obxectos"
 msgid "T_ype: "
 msgstr "T_ipo:"
 
-#: ../src/dialogs/find.cpp:547 ../src/ui/dialog/find.cpp:70
+#: ../src/dialogs/find.cpp:547
+#: ../src/ui/dialog/find.cpp:70
 msgid "Search in all object types"
 msgstr "Procurar en tódolos tipos de obxectos"
 
-#: ../src/dialogs/find.cpp:547 ../src/ui/dialog/find.cpp:70
+#: ../src/dialogs/find.cpp:547
+#: ../src/ui/dialog/find.cpp:70
 msgid "All types"
 msgstr "Tódolos tipos"
 
-#: ../src/dialogs/find.cpp:558 ../src/ui/dialog/find.cpp:71
+#: ../src/dialogs/find.cpp:558
+#: ../src/ui/dialog/find.cpp:71
 msgid "Search all shapes"
 msgstr "Buscar tódalas figuras"
 
-#: ../src/dialogs/find.cpp:558 ../src/ui/dialog/find.cpp:71
+#: ../src/dialogs/find.cpp:558
+#: ../src/ui/dialog/find.cpp:71
 msgid "All shapes"
 msgstr "Tódalas figuras"
 
-#: ../src/dialogs/find.cpp:575 ../src/ui/dialog/find.cpp:72
+#: ../src/dialogs/find.cpp:575
+#: ../src/ui/dialog/find.cpp:72
 msgid "Search rectangles"
 msgstr "Buscar rectángulos"
 
-#: ../src/dialogs/find.cpp:575 ../src/ui/dialog/find.cpp:72
+#: ../src/dialogs/find.cpp:575
+#: ../src/ui/dialog/find.cpp:72
 msgid "Rectangles"
 msgstr "Rectángulos"
 
-#: ../src/dialogs/find.cpp:580 ../src/ui/dialog/find.cpp:73
+#: ../src/dialogs/find.cpp:580
+#: ../src/ui/dialog/find.cpp:73
 msgid "Search ellipses, arcs, circles"
 msgstr "Buscar elipses, arcos e círculos"
 
-#: ../src/dialogs/find.cpp:580 ../src/ui/dialog/find.cpp:73
+#: ../src/dialogs/find.cpp:580
+#: ../src/ui/dialog/find.cpp:73
 msgid "Ellipses"
 msgstr "Elipses"
 
-#: ../src/dialogs/find.cpp:585 ../src/ui/dialog/find.cpp:74
+#: ../src/dialogs/find.cpp:585
+#: ../src/ui/dialog/find.cpp:74
 msgid "Search stars and polygons"
 msgstr "Buscar estrelas e polígonos"
 
-#: ../src/dialogs/find.cpp:585 ../src/ui/dialog/find.cpp:74
+#: ../src/dialogs/find.cpp:585
+#: ../src/ui/dialog/find.cpp:74
 msgid "Stars"
 msgstr "Estrelas"
 
-#: ../src/dialogs/find.cpp:590 ../src/ui/dialog/find.cpp:75
+#: ../src/dialogs/find.cpp:590
+#: ../src/ui/dialog/find.cpp:75
 msgid "Search spirals"
 msgstr "Buscar espirais"
 
-#: ../src/dialogs/find.cpp:590 ../src/ui/dialog/find.cpp:75
+#: ../src/dialogs/find.cpp:590
+#: ../src/ui/dialog/find.cpp:75
 msgid "Spirals"
 msgstr "Espirais"
 
 #. TRANSLATORS: polyline is a set of connected straight line segments
 #. http://www.w3.org/TR/SVG11/shapes.html#PolylineElement
-#: ../src/dialogs/find.cpp:603 ../src/ui/dialog/find.cpp:76
+#: ../src/dialogs/find.cpp:603
+#: ../src/ui/dialog/find.cpp:76
 msgid "Search paths, lines, polylines"
 msgstr ""
 
-#: ../src/dialogs/find.cpp:603 ../src/ui/dialog/find.cpp:76
+#: ../src/dialogs/find.cpp:603
+#: ../src/ui/dialog/find.cpp:76
 msgid "Paths"
 msgstr "Camiños"
 
-#: ../src/dialogs/find.cpp:608 ../src/ui/dialog/find.cpp:77
+#: ../src/dialogs/find.cpp:608
+#: ../src/ui/dialog/find.cpp:77
 msgid "Search text objects"
 msgstr "Buscar obxectos de texto"
 
-#: ../src/dialogs/find.cpp:608 ../src/ui/dialog/find.cpp:77
+#: ../src/dialogs/find.cpp:608
+#: ../src/ui/dialog/find.cpp:77
 msgid "Texts"
 msgstr "Textos"
 
-#: ../src/dialogs/find.cpp:613 ../src/ui/dialog/find.cpp:78
+#: ../src/dialogs/find.cpp:613
+#: ../src/ui/dialog/find.cpp:78
 msgid "Search groups"
 msgstr "Buscar grupos"
 
-#: ../src/dialogs/find.cpp:613 ../src/ui/dialog/find.cpp:78
+#: ../src/dialogs/find.cpp:613
+#: ../src/ui/dialog/find.cpp:78
 msgid "Groups"
 msgstr "Grupos"
 
-#: ../src/dialogs/find.cpp:618 ../src/ui/dialog/find.cpp:81
+#: ../src/dialogs/find.cpp:618
+#: ../src/ui/dialog/find.cpp:81
 msgid "Search clones"
 msgstr "Buscar clons"
 
 #. TRANSLATORS: Translate the word "Clones" only. A noun indicating type of object to find
-#: ../src/dialogs/find.cpp:620 ../src/ui/dialog/find.cpp:81
-#, fuzzy
+#: ../src/dialogs/find.cpp:620
+#: ../src/ui/dialog/find.cpp:81
 msgid "find|Clones"
 msgstr "Clons"
 
-#: ../src/dialogs/find.cpp:625 ../src/ui/dialog/find.cpp:82
+#: ../src/dialogs/find.cpp:625
+#: ../src/ui/dialog/find.cpp:82
 msgid "Search images"
 msgstr "Buscar imaxes"
 
-#: ../src/dialogs/find.cpp:625 ../src/ui/dialog/find.cpp:82
+#: ../src/dialogs/find.cpp:625
+#: ../src/ui/dialog/find.cpp:82
 #: ../share/extensions/embedimage.inx.h:3
 #: ../share/extensions/extractimage.inx.h:2
 msgid "Images"
 msgstr "Imaxes"
 
-#: ../src/dialogs/find.cpp:630 ../src/ui/dialog/find.cpp:83
+#: ../src/dialogs/find.cpp:630
+#: ../src/ui/dialog/find.cpp:83
+#, fuzzy
 msgid "Search offset objects"
-msgstr ""
+msgstr "Buscar obxectos de texto"
 
-#: ../src/dialogs/find.cpp:630 ../src/ui/dialog/find.cpp:83
+#: ../src/dialogs/find.cpp:630
+#: ../src/ui/dialog/find.cpp:83
 msgid "Offsets"
 msgstr ""
 
-#: ../src/dialogs/find.cpp:694 ../src/ui/dialog/find.cpp:61
+#: ../src/dialogs/find.cpp:694
+#: ../src/ui/dialog/find.cpp:61
 msgid "_Text: "
 msgstr "_Texto:"
 
-#: ../src/dialogs/find.cpp:694 ../src/ui/dialog/find.cpp:61
+#: ../src/dialogs/find.cpp:694
+#: ../src/ui/dialog/find.cpp:61
 msgid "Find objects by their text content (exact or partial match)"
-msgstr ""
-"Busca obxectos polo seu contido de texto (coincidencia parcial ou exacta)"
+msgstr "Busca obxectos polo seu contido de texto (coincidencia parcial ou exacta)"
 
-#: ../src/dialogs/find.cpp:695 ../src/ui/dialog/find.cpp:62
+#: ../src/dialogs/find.cpp:695
+#: ../src/ui/dialog/find.cpp:62
 msgid "_ID: "
 msgstr "_ID: "
 
-#: ../src/dialogs/find.cpp:695 ../src/ui/dialog/find.cpp:62
+#: ../src/dialogs/find.cpp:695
+#: ../src/ui/dialog/find.cpp:62
 msgid "Find objects by the value of the id attribute (exact or partial match)"
-msgstr ""
-"Busca obxectos polo valor do seu atributo id (coincidencia parcial ou exacta)"
+msgstr "Busca obxectos polo valor do seu atributo id (coincidencia parcial ou exacta)"
 
-#: ../src/dialogs/find.cpp:696 ../src/ui/dialog/find.cpp:63
+#: ../src/dialogs/find.cpp:696
+#: ../src/ui/dialog/find.cpp:63
 msgid "_Style: "
 msgstr "E_stilo: "
 
-#: ../src/dialogs/find.cpp:696 ../src/ui/dialog/find.cpp:63
-msgid ""
-"Find objects by the value of the style attribute (exact or partial match)"
-msgstr ""
-"Busca obxectos polo valor do atributo style (coincidencia parcial ou exacta)"
+#: ../src/dialogs/find.cpp:696
+#: ../src/ui/dialog/find.cpp:63
+msgid "Find objects by the value of the style attribute (exact or partial match)"
+msgstr "Busca obxectos polo valor do atributo style (coincidencia parcial ou exacta)"
 
-#: ../src/dialogs/find.cpp:697 ../src/ui/dialog/find.cpp:64
+#: ../src/dialogs/find.cpp:697
+#: ../src/ui/dialog/find.cpp:64
 msgid "_Attribute: "
 msgstr "_Atributo: "
 
-#: ../src/dialogs/find.cpp:697 ../src/ui/dialog/find.cpp:64
+#: ../src/dialogs/find.cpp:697
+#: ../src/ui/dialog/find.cpp:64
 msgid "Find objects by the name of an attribute (exact or partial match)"
 msgstr "Busca obxectos polo nome dun atributo (coincidencia parcial ou exacta)"
 
-#: ../src/dialogs/find.cpp:711 ../src/ui/dialog/find.cpp:65
+#: ../src/dialogs/find.cpp:711
+#: ../src/ui/dialog/find.cpp:65
 msgid "Search in s_election"
 msgstr "Buscar na s_elección"
 
-#: ../src/dialogs/find.cpp:715 ../src/ui/dialog/find.cpp:65
+#: ../src/dialogs/find.cpp:715
+#: ../src/ui/dialog/find.cpp:65
 msgid "Limit search to the current selection"
 msgstr "Limita a busca á selección actual"
 
-#: ../src/dialogs/find.cpp:720 ../src/ui/dialog/find.cpp:66
+#: ../src/dialogs/find.cpp:720
+#: ../src/ui/dialog/find.cpp:66
 msgid "Search in current _layer"
 msgstr "Buscar na _capa actual"
 
-#: ../src/dialogs/find.cpp:724 ../src/ui/dialog/find.cpp:66
+#: ../src/dialogs/find.cpp:724
+#: ../src/ui/dialog/find.cpp:66
 msgid "Limit search to the current layer"
 msgstr "Limitar a busca á capa actual"
 
-#: ../src/dialogs/find.cpp:729 ../src/ui/dialog/find.cpp:67
+#: ../src/dialogs/find.cpp:729
+#: ../src/ui/dialog/find.cpp:67
 msgid "Include _hidden"
 msgstr "Incluir _agochados"
 
-#: ../src/dialogs/find.cpp:733 ../src/ui/dialog/find.cpp:67
+#: ../src/dialogs/find.cpp:733
+#: ../src/ui/dialog/find.cpp:67
 msgid "Include hidden objects in search"
 msgstr "Incluir obxectos agochados na busca"
 
-#: ../src/dialogs/find.cpp:738 ../src/ui/dialog/find.cpp:68
+#: ../src/dialogs/find.cpp:738
+#: ../src/ui/dialog/find.cpp:68
 msgid "Include l_ocked"
 msgstr "Incluir os bl_oqueados"
 
-#: ../src/dialogs/find.cpp:742 ../src/ui/dialog/find.cpp:68
+#: ../src/dialogs/find.cpp:742
+#: ../src/ui/dialog/find.cpp:68
 msgid "Include locked objects in search"
 msgstr "Incluir os obxectos bloqueados na busca"
 
-#: ../src/dialogs/find.cpp:753 ../src/ui/dialog/find.cpp:85
+#: ../src/dialogs/find.cpp:753
+#: ../src/ui/dialog/find.cpp:85
 msgid "Clear values"
 msgstr "Limpar os valores"
 
-#: ../src/dialogs/find.cpp:754 ../src/ui/dialog/find.cpp:86
+#: ../src/dialogs/find.cpp:754
+#: ../src/ui/dialog/find.cpp:86
 msgid "_Find"
 msgstr "_Buscar"
 
-#: ../src/dialogs/find.cpp:754 ../src/ui/dialog/find.cpp:86
+#: ../src/dialogs/find.cpp:754
+#: ../src/ui/dialog/find.cpp:86
 msgid "Select objects matching all of the fields you filled in"
 msgstr "Seleccionar os obxectos que coincidan con tódolos campos que encheu"
 
 #: ../src/dialogs/guidelinedialog.cpp:44
 #, fuzzy
 msgid "Unit:"
-msgstr "Unidades:"
+msgstr "Unidade:"
 
 #: ../src/dialogs/guidelinedialog.cpp:45
 #: ../src/dialogs/object-attributes.cpp:58
-#: ../src/dialogs/object-attributes.cpp:66 ../src/widgets/toolbox.cpp:1248
+#: ../src/dialogs/object-attributes.cpp:66
+#: ../src/widgets/toolbox.cpp:1248
 msgid "X:"
 msgstr "X:"
 
 #: ../src/dialogs/guidelinedialog.cpp:46
 #: ../src/dialogs/object-attributes.cpp:59
-#: ../src/dialogs/object-attributes.cpp:67 ../src/widgets/toolbox.cpp:1266
+#: ../src/dialogs/object-attributes.cpp:67
+#: ../src/widgets/toolbox.cpp:1266
 msgid "Y:"
 msgstr "Y:"
 
 #: ../src/dialogs/guidelinedialog.cpp:47
-#, fuzzy
 msgid "Angle (degrees):"
-msgstr "graos"
+msgstr "Ángulo (graos):"
 
 #: ../src/dialogs/guidelinedialog.cpp:48
 #, fuzzy
@@ -1445,9 +1473,8 @@ msgid "Move and/or rotate the guide relative to current settings"
 msgstr ""
 
 #: ../src/dialogs/guidelinedialog.cpp:114
-#, fuzzy
 msgid "Set guide properties"
-msgstr "Propiedades do elemento"
+msgstr "Definir as propiedades da guía"
 
 #: ../src/dialogs/guidelinedialog.cpp:153
 msgid "Guideline"
@@ -1456,12 +1483,12 @@ msgstr "Liña-guía"
 #: ../src/dialogs/guidelinedialog.cpp:241
 #, fuzzy, c-format
 msgid "Guideline ID: %s"
-msgstr "Liña-guía"
+msgstr "O ID é incorrecto!"
 
 #: ../src/dialogs/guidelinedialog.cpp:247
-#, fuzzy, c-format
+#, c-format
 msgid "Current: %s"
-msgstr "Configuración do documento"
+msgstr "Actual: %s"
 
 #: ../src/dialogs/iconpreview.cpp:139
 #, c-format
@@ -1492,12 +1519,12 @@ msgid "_Id"
 msgstr "_Id"
 
 #: ../src/dialogs/item-properties.cpp:129
-msgid ""
-"The id= attribute (only letters, digits, and the characters .-_: allowed)"
+msgid "The id= attribute (only letters, digits, and the characters .-_: allowed)"
 msgstr "O atributo id= (só se permiten letras, díxitos e os caracteres .-_:)"
 
 #. Button for setting the object's id, label, title and description.
-#: ../src/dialogs/item-properties.cpp:143 ../src/verbs.cpp:2401
+#: ../src/dialogs/item-properties.cpp:143
+#: ../src/verbs.cpp:2401
 #: ../src/verbs.cpp:2407
 msgid "_Set"
 msgstr "E_stablecer"
@@ -1512,12 +1539,14 @@ msgid "A freeform label for the object"
 msgstr ""
 
 #. Create the label for the object title
-#: ../src/dialogs/item-properties.cpp:173 ../src/dialogs/rdf.cpp:238
+#: ../src/dialogs/item-properties.cpp:173
+#: ../src/dialogs/rdf.cpp:238
 msgid "Title"
 msgstr "Título"
 
 #. Create the frame for the object description
-#: ../src/dialogs/item-properties.cpp:190 ../src/dialogs/rdf.cpp:282
+#: ../src/dialogs/item-properties.cpp:190
+#: ../src/dialogs/rdf.cpp:282
 #: ../src/ui/widget/page-sizer.cpp:200
 msgid "Description"
 msgstr "Descrición"
@@ -1539,8 +1568,7 @@ msgstr "Bl_oquear"
 
 #: ../src/dialogs/item-properties.cpp:229
 msgid "Check to make the object insensitive (not selectable by mouse)"
-msgstr ""
-"Marque para facer que o obxecto sexa insensible (non seleccionable co rato)"
+msgstr "Marque para facer que o obxecto sexa insensible (non seleccionable co rato)"
 
 #: ../src/dialogs/item-properties.cpp:305
 #: ../src/dialogs/item-properties.cpp:312
@@ -1548,24 +1576,20 @@ msgid "Ref"
 msgstr ""
 
 #: ../src/dialogs/item-properties.cpp:372
-#, fuzzy
 msgid "Lock object"
-msgstr "Non hai obxectos seleccionados"
+msgstr "Bloquear o obxecto"
 
 #: ../src/dialogs/item-properties.cpp:372
-#, fuzzy
 msgid "Unlock object"
-msgstr "Ignorar os obxectos bloqueados"
+msgstr "Desbloquear o obxecto"
 
 #: ../src/dialogs/item-properties.cpp:391
-#, fuzzy
 msgid "Hide object"
-msgstr "Non hai obxectos seleccionados"
+msgstr "Agochar o obxecto"
 
 #: ../src/dialogs/item-properties.cpp:391
-#, fuzzy
 msgid "Unhide object"
-msgstr "Ignorar os obxectos agochados"
+msgstr "Mostrar o obxecto"
 
 #: ../src/dialogs/item-properties.cpp:415
 msgid "Id invalid! "
@@ -1576,33 +1600,28 @@ msgid "Id exists! "
 msgstr "O ID xa existe!"
 
 #: ../src/dialogs/item-properties.cpp:424
-#, fuzzy
 msgid "Set object ID"
-msgstr "Buscar obxectos de texto"
+msgstr "Definir o ID do obxecto"
 
 #: ../src/dialogs/item-properties.cpp:439
-#, fuzzy
 msgid "Set object label"
-msgstr "E_stilo do trazo"
+msgstr "Definir a etiqueta do obxecto"
 
 #: ../src/dialogs/item-properties.cpp:450
-#, fuzzy
 msgid "Set object title"
-msgstr "E_stilo do trazo"
+msgstr "Definir o título do obxecto"
 
 #: ../src/dialogs/item-properties.cpp:465
-#, fuzzy
 msgid "Set object description"
-msgstr "selecciona-la dirección"
+msgstr "Definir a descrición do obxecto"
 
 #: ../src/dialogs/layer-properties.cpp:47
 msgid "Layer name:"
 msgstr "Nome da capa:"
 
 #: ../src/dialogs/layer-properties.cpp:115
-#, fuzzy
 msgid "Add layer"
-msgstr "Engadir Capa"
+msgstr "Engadir unha capa"
 
 #: ../src/dialogs/layer-properties.cpp:153
 msgid "Above current"
@@ -1629,9 +1648,8 @@ msgid "_Rename"
 msgstr "_Renomear"
 
 #: ../src/dialogs/layer-properties.cpp:195
-#, fuzzy
 msgid "Rename layer"
-msgstr "Renomeouse a capa"
+msgstr "Renomear unha capa"
 
 #. TRANSLATORS: This means "The layer has been renamed"
 #: ../src/dialogs/layer-properties.cpp:197
@@ -1650,33 +1668,35 @@ msgstr "_Engadir"
 msgid "New layer created."
 msgstr "Creouse unha nova capa."
 
-#: ../src/dialogs/layers-panel.cpp:579 ../src/widgets/layer-selector.cpp:595
-#, fuzzy
+#: ../src/dialogs/layers-panel.cpp:579
+#: ../src/widgets/layer-selector.cpp:595
 msgid "Unhide layer"
-msgstr "Elevar a Capa"
+msgstr "Mostrar unha capa"
 
-#: ../src/dialogs/layers-panel.cpp:579 ../src/widgets/layer-selector.cpp:595
-#, fuzzy
+#: ../src/dialogs/layers-panel.cpp:579
+#: ../src/widgets/layer-selector.cpp:595
 msgid "Hide layer"
-msgstr "Elevar a Capa"
+msgstr "Agochar unha capa"
 
-#: ../src/dialogs/layers-panel.cpp:590 ../src/widgets/layer-selector.cpp:587
-#, fuzzy
+#: ../src/dialogs/layers-panel.cpp:590
+#: ../src/widgets/layer-selector.cpp:587
 msgid "Lock layer"
-msgstr "Baixar a Capa"
+msgstr "Bloquear unha capa"
 
-#: ../src/dialogs/layers-panel.cpp:590 ../src/widgets/layer-selector.cpp:587
-#, fuzzy
+#: ../src/dialogs/layers-panel.cpp:590
+#: ../src/widgets/layer-selector.cpp:587
 msgid "Unlock layer"
-msgstr "Baixar a Capa"
+msgstr "Desbloquear unha capa"
 
 #: ../src/dialogs/layers-panel.cpp:735
 msgid "New"
 msgstr "Novo"
 
-#: ../src/dialogs/layers-panel.cpp:740 ../share/extensions/restack.inx.h:16
+#: ../src/dialogs/layers-panel.cpp:740
+#: ../share/extensions/restack.inx.h:16
+#, fuzzy
 msgid "Top"
-msgstr ""
+msgstr "Elevar á cima"
 
 #: ../src/dialogs/layers-panel.cpp:746
 msgid "Up"
@@ -1730,7 +1750,7 @@ msgstr "Título:"
 #: ../share/extensions/polyhedron_3d.inx.h:38
 #, fuzzy
 msgid "Show:"
-msgstr "Mostrar:"
+msgstr "Amosar/Agochar"
 
 #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/linking.html#AElementXLinkActuateAttribute
 #: ../src/dialogs/object-attributes.cpp:52
@@ -1742,9 +1762,9 @@ msgid "URL:"
 msgstr "URL:"
 
 #: ../src/dialogs/object-attributes.cpp:113
-#, fuzzy, c-format
+#, c-format
 msgid "%s Properties"
-msgstr "Propiedades do elemento"
+msgstr "Propiedades de %s"
 
 #: ../src/dialogs/rdf.cpp:181
 msgid "CC Attribution"
@@ -1779,9 +1799,8 @@ msgid "FreeArt"
 msgstr "FreeArt"
 
 #: ../src/dialogs/rdf.cpp:221
-#, fuzzy
 msgid "Open Font License"
-msgstr "Abrir un novo ficheiro"
+msgstr "Licenza Open Font"
 
 #: ../src/dialogs/rdf.cpp:239
 msgid "Name by which this document is formally known."
@@ -1799,14 +1818,13 @@ msgstr "Data asociada ca creación deste documento (AAAA-MM-DD)."
 msgid "Format"
 msgstr "Formato"
 
-# Rosetta
 #: ../src/dialogs/rdf.cpp:245
-#, fuzzy
 msgid "The physical or digital manifestation of this document (MIME type)."
 msgstr "A manifestación física ou dixital deste documento (tipo MIME)."
 
 #. _settings->add_checkbutton(false, SP_ATTR_STITCHTILES, _("Stitch Tiles"), "stitch", "noStitch");
-#: ../src/dialogs/rdf.cpp:247 ../src/extension/internal/bitmap/addNoise.cpp:46
+#: ../src/dialogs/rdf.cpp:247
+#: ../src/extension/internal/bitmap/addNoise.cpp:46
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2194
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2273
 msgid "Type"
@@ -1821,21 +1839,16 @@ msgid "Creator"
 msgstr "Creador"
 
 #: ../src/dialogs/rdf.cpp:252
-msgid ""
-"Name of entity primarily responsible for making the content of this document."
-msgstr ""
-"Nome da principal entidade responsable de crear o contido deste documento."
+msgid "Name of entity primarily responsible for making the content of this document."
+msgstr "Nome da principal entidade responsable de crear o contido deste documento."
 
 #: ../src/dialogs/rdf.cpp:254
 msgid "Rights"
 msgstr "Dereitos"
 
 #: ../src/dialogs/rdf.cpp:255
-msgid ""
-"Name of entity with rights to the Intellectual Property of this document."
-msgstr ""
-"Nome da entidade que ten os dereitos de Propiedade Intelectual deste "
-"documento."
+msgid "Name of entity with rights to the Intellectual Property of this document."
+msgstr "Nome da entidade que ten os dereitos de Propiedade Intelectual deste documento."
 
 #: ../src/dialogs/rdf.cpp:257
 msgid "Publisher"
@@ -1843,34 +1856,30 @@ msgstr "Editor"
 
 #: ../src/dialogs/rdf.cpp:258
 msgid "Name of entity responsible for making this document available."
-msgstr ""
-"Nome da entidade responsable de facer que este documento estea dispoñible."
+msgstr "Nome da entidade responsable de facer que este documento estea dispoñible."
 
 #: ../src/dialogs/rdf.cpp:261
 msgid "Identifier"
 msgstr "Identificador"
 
 #: ../src/dialogs/rdf.cpp:262
-#, fuzzy
 msgid "Unique URI to reference this document."
 msgstr "URI único para referirse a este documento."
 
-#: ../src/dialogs/rdf.cpp:264 ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1392
+#: ../src/dialogs/rdf.cpp:264
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1392
 msgid "Source"
 msgstr "Fonte"
 
 #: ../src/dialogs/rdf.cpp:265
-#, fuzzy
 msgid "Unique URI to reference the source of this document."
 msgstr "URI único para referirse á fonte deste documento."
 
 #: ../src/dialogs/rdf.cpp:267
-#, fuzzy
 msgid "Relation"
 msgstr "Relación"
 
 #: ../src/dialogs/rdf.cpp:268
-#, fuzzy
 msgid "Unique URI to a related document."
 msgstr "URI único a un documento relacionado."
 
@@ -1879,24 +1888,16 @@ msgid "Language"
 msgstr "Lingua"
 
 #: ../src/dialogs/rdf.cpp:271
-msgid ""
-"Two-letter language tag with optional subtags for the language of this "
-"document.  (e.g. 'en-GB')"
-msgstr ""
-"Etiqueta de dúas letras da lingua con subetiquetas opcionais para a lingua "
-"deste documento. (p.ex. 'gl-ES')"
+msgid "Two-letter language tag with optional subtags for the language of this document.  (e.g. 'en-GB')"
+msgstr "Etiqueta de dúas letras da lingua con subetiquetas opcionais para a lingua deste documento. (p.ex. 'gl-ES')"
 
 #: ../src/dialogs/rdf.cpp:273
 msgid "Keywords"
 msgstr "Palabras clave"
 
 #: ../src/dialogs/rdf.cpp:274
-msgid ""
-"The topic of this document as comma-separated key words, phrases, or "
-"classifications."
-msgstr ""
-"O tema deste documento nunha lista de palabras clave, frases ou "
-"clasificacións separadas por comas."
+msgid "The topic of this document as comma-separated key words, phrases, or classifications."
+msgstr "O tema deste documento nunha lista de palabras clave, frases ou clasificacións separadas por comas."
 
 #. TRANSLATORS: "Coverage": the spatial or temporal characteristics of the content.
 #. For info, see Appendix D of http://www.w3.org/TR/1998/WD-rdf-schema-19980409/
@@ -1918,12 +1919,8 @@ msgid "Contributors"
 msgstr "Contribuíntes"
 
 #: ../src/dialogs/rdf.cpp:288
-msgid ""
-"Names of entities responsible for making contributions to the content of "
-"this document."
-msgstr ""
-"Nomes das entidades responsables de facer contribucións ó contido deste "
-"documento."
+msgid "Names of entities responsible for making contributions to the content of this document."
+msgstr "Nomes das entidades responsables de facer contribucións ó contido deste documento."
 
 #. TRANSLATORS: URL to a page that defines the license for the document
 #: ../src/dialogs/rdf.cpp:292
@@ -1940,59 +1937,64 @@ msgstr "URI á definición do espazo de nomes da licenza deste documento."
 #: ../src/dialogs/rdf.cpp:298
 #, fuzzy
 msgid "Fragment"
-msgstr "Fragmento de XML"
+msgstr "Fragmento"
 
 # Rosetta
 #: ../src/dialogs/rdf.cpp:299
 #, fuzzy
 msgid "XML fragment for the RDF 'License' section."
-msgstr "Fragmento de XML para a sección \"Licenza\" da RDF"
+msgstr "Fragmento de XML para a sección 'Licenza' da RDF"
 
 #. TRANSLATORS: "Set" is a verb here
 #: ../src/dialogs/sp-attribute-widget.cpp:166
-#: ../src/dialogs/sp-attribute-widget.cpp:773 ../src/dialogs/xml-tree.cpp:533
+#: ../src/dialogs/sp-attribute-widget.cpp:773
+#: ../src/dialogs/xml-tree.cpp:533
 msgid "Set attribute"
 msgstr "Establecer o atributo"
 
-#: ../src/dialogs/stroke-style.cpp:305 ../src/dialogs/stroke-style.cpp:364
-#, fuzzy
+#: ../src/dialogs/stroke-style.cpp:305
+#: ../src/dialogs/stroke-style.cpp:364
 msgid "Set stroke color"
-msgstr "Escolle-la cor de trazado"
+msgstr "Definir a cor do trazo"
 
-#: ../src/dialogs/stroke-style.cpp:355 ../src/ui/widget/selected-style.cpp:255
+#: ../src/dialogs/stroke-style.cpp:355
+#: ../src/ui/widget/selected-style.cpp:255
 #: ../src/ui/widget/selected-style.cpp:488
 msgid "Remove stroke"
-msgstr ""
+msgstr "Eliminar o trazo"
 
 #: ../src/dialogs/stroke-style.cpp:416
-#, fuzzy
 msgid "Set gradient on stroke"
-msgstr "Crear degradado no trazo"
+msgstr "Definir degradado no trazo"
 
 #: ../src/dialogs/stroke-style.cpp:460
-#, fuzzy
 msgid "Set pattern on stroke"
-msgstr "Trazo non asignado"
+msgstr "Definir patrón no trazo"
 
-#: ../src/dialogs/stroke-style.cpp:481 ../src/ui/widget/selected-style.cpp:193
+#: ../src/dialogs/stroke-style.cpp:481
+#: ../src/ui/widget/selected-style.cpp:193
 #: ../src/ui/widget/selected-style.cpp:251
 #: ../src/ui/widget/selected-style.cpp:513
 #: ../src/ui/widget/style-swatch.cpp:335
 msgid "Unset stroke"
 msgstr "Trazo non asignado"
 
-#: ../src/dialogs/stroke-style.cpp:793 ../src/filter-enums.cpp:95
-#: ../src/flood-context.cpp:288 ../src/interface.cpp:826
+#: ../src/dialogs/stroke-style.cpp:793
+#: ../src/filter-enums.cpp:95
+#: ../src/flood-context.cpp:288
+#: ../src/interface.cpp:826
 #: ../src/ui/dialog/filter-effects-dialog.cpp:507
 #: ../src/ui/dialog/inkscape-preferences.cpp:211
 #: ../src/ui/dialog/inkscape-preferences.cpp:375
 #: ../src/ui/dialog/inkscape-preferences.cpp:501
-#: ../src/ui/dialog/inkscape-preferences.cpp:958 ../src/verbs.cpp:2156
+#: ../src/ui/dialog/inkscape-preferences.cpp:958
+#: ../src/verbs.cpp:2156
 #: ../share/extensions/grid_polar.inx.h:16
 msgid "None"
 msgstr "Ningún"
 
-#: ../src/dialogs/stroke-style.cpp:848 ../src/widgets/gradient-vector.cpp:264
+#: ../src/dialogs/stroke-style.cpp:848
+#: ../src/widgets/gradient-vector.cpp:264
 #: ../src/widgets/paint-selector.cpp:885
 msgid "No document selected"
 msgstr "Non se seleccionou ningún documento"
@@ -2002,7 +2004,8 @@ msgstr "Non se seleccionou ningún documento"
 msgid "Set markers"
 msgstr "Marcas Iniciais:"
 
-#: ../src/dialogs/stroke-style.cpp:1104 ../share/extensions/edge3d.inx.h:9
+#: ../src/dialogs/stroke-style.cpp:1104
+#: ../share/extensions/edge3d.inx.h:9
 msgid "Stroke width"
 msgstr "Ancho do trazo"
 
@@ -2020,7 +2023,7 @@ msgstr "Xuntura:"
 #: ../src/dialogs/stroke-style.cpp:1139
 #, fuzzy
 msgid "Miter join"
-msgstr "Xuntar metades"
+msgstr "Xuntura redondeada"
 
 #. TRANSLATORS: Round join: joining lines with a rounded corner.
 #. For an example, draw a triangle with a large stroke width and modify the
@@ -2036,7 +2039,7 @@ msgstr "Xuntura redondeada"
 #: ../src/dialogs/stroke-style.cpp:1155
 #, fuzzy
 msgid "Bevel join"
-msgstr "Xuntar biselado"
+msgstr "Xuntura redondeada"
 
 #. Miterlimit
 #. TRANSLATORS: Miter limit: only for "miter join", this limits the length
@@ -2072,7 +2075,7 @@ msgstr "Punta decapitada"
 #: ../src/dialogs/stroke-style.cpp:1205
 #, fuzzy
 msgid "Round cap"
-msgstr "Punta redondeada"
+msgstr "Xuntura redondeada"
 
 #. TRANSLATORS: Square cap: the line shape extends beyond the end point of the
 #. line; the ends of the line are square
@@ -2102,35 +2105,31 @@ msgstr "Marcas Centrais:"
 #: ../src/dialogs/stroke-style.cpp:1259
 #, fuzzy
 msgid "End Markers:"
-msgstr "Marcadores Finais:"
+msgstr "Marcas Finais:"
 
-#: ../src/dialogs/stroke-style.cpp:1605 ../src/dialogs/stroke-style.cpp:1703
-#, fuzzy
+#: ../src/dialogs/stroke-style.cpp:1605
+#: ../src/dialogs/stroke-style.cpp:1703
 msgid "Set stroke style"
-msgstr "E_stilo do trazo"
+msgstr "Definir o estilo do trazo"
 
 #: ../src/dialogs/swatches.cpp:248
 #, c-format
-msgid ""
-"Color: <b>%s</b>; <b>Click</b> to set fill, <b>Shift+click</b> to set stroke"
+msgid "Color: <b>%s</b>; <b>Click</b> to set fill, <b>Shift+click</b> to set stroke"
 msgstr ""
 
 #. TRANSLATORS: An item in context menu on a colour in the swatches
 #: ../src/dialogs/swatches.cpp:298
-#, fuzzy
 msgid "Set fill"
-msgstr "Recheo non asignado"
+msgstr "Definir o recheo"
 
 #. TRANSLATORS: An item in context menu on a colour in the swatches
 #: ../src/dialogs/swatches.cpp:306
-#, fuzzy
 msgid "Set stroke"
-msgstr "Trazo non asignado"
+msgstr "Definir o trazo"
 
 #: ../src/dialogs/swatches.cpp:525
-#, fuzzy
 msgid "Change color definition"
-msgstr "Orientación da páxina:"
+msgstr "Cambiar a definición da cor"
 
 #: ../src/dialogs/swatches.cpp:676
 #, fuzzy
@@ -2147,7 +2146,8 @@ msgid "Palettes directory (%s) is unavailable."
 msgstr "O directorio de paletas (%s) non está dispoñible."
 
 #. TODO:  Insert widgets
-#: ../src/dialogs/text-edit.cpp:200 ../src/ui/dialog/text-properties.cpp:36
+#: ../src/dialogs/text-edit.cpp:200
+#: ../src/ui/dialog/text-properties.cpp:36
 msgid "Font"
 msgstr "Fonte"
 
@@ -2169,27 +2169,30 @@ msgid "Align lines right"
 msgstr "Aliñar as liñas á dereita"
 
 #: ../src/dialogs/text-edit.cpp:280
-#, fuzzy
 msgid "Justify lines"
-msgstr "Xustificar"
+msgstr "Xustificar as liñas"
 
-#: ../src/dialogs/text-edit.cpp:302 ../src/widgets/toolbox.cpp:5354
+#: ../src/dialogs/text-edit.cpp:302
+#: ../src/widgets/toolbox.cpp:5354
 msgid "Horizontal text"
 msgstr "Texto horizontal"
 
-#: ../src/dialogs/text-edit.cpp:316 ../src/widgets/toolbox.cpp:5366
+#: ../src/dialogs/text-edit.cpp:316
+#: ../src/widgets/toolbox.cpp:5366
 msgid "Vertical text"
 msgstr "Texto vertical"
 
 #: ../src/dialogs/text-edit.cpp:331
 #, fuzzy
 msgid "Line spacing:"
-msgstr "Espaciado de liñas:"
+msgstr "Establecer espacio:"
 
 #. Text
-#: ../src/dialogs/text-edit.cpp:377 ../src/selection-describer.cpp:67
+#: ../src/dialogs/text-edit.cpp:377
+#: ../src/selection-describer.cpp:67
 #: ../src/ui/dialog/inkscape-preferences.cpp:469
-#: ../src/ui/dialog/text-properties.cpp:37 ../src/verbs.cpp:2437
+#: ../src/ui/dialog/text-properties.cpp:37
+#: ../src/verbs.cpp:2437
 #: ../share/extensions/lorem_ipsum.inx.h:5
 #: ../share/extensions/render_alphabetsoup.inx.h:4
 #: ../share/extensions/text_braille.inx.h:2
@@ -2208,14 +2211,16 @@ msgstr "Texto"
 msgid "Set as default"
 msgstr "Establecer coma predeterminado"
 
-#: ../src/dialogs/text-edit.cpp:665 ../src/text-context.cpp:1438
+#: ../src/dialogs/text-edit.cpp:665
+#: ../src/text-context.cpp:1438
 #, fuzzy
 msgid "Set text style"
-msgstr "E_stilo do trazo"
+msgstr "Establecer o estilo do texto"
 
 #: ../src/dialogs/tiledialog.cpp:353
+#, fuzzy
 msgid "Arrange in a grid"
-msgstr ""
+msgstr "Crear nova reixa"
 
 #: ../src/dialogs/tiledialog.cpp:654
 msgid "Rows:"
@@ -2235,7 +2240,8 @@ msgstr "Se non está establecido, cada fila ten o alto do seu obxecto máis alto
 
 #. #### Radio buttons to control vertical alignment ####
 #. #### Radio buttons to control horizontal alignment ####
-#: ../src/dialogs/tiledialog.cpp:682 ../src/dialogs/tiledialog.cpp:752
+#: ../src/dialogs/tiledialog.cpp:682
+#: ../src/dialogs/tiledialog.cpp:752
 msgid "Align:"
 msgstr "Aliñar:"
 
@@ -2254,14 +2260,13 @@ msgstr "Igual ancho"
 
 #: ../src/dialogs/tiledialog.cpp:745
 msgid "If not set, each column has the width of the widest object in it"
-msgstr ""
-"Se non está establecido, cada columna ten o ancho do obxecto máis ancho que "
-"conteña"
+msgstr "Se non está establecido, cada columna ten o ancho do obxecto máis ancho que conteña"
 
 #. #### Radio buttons to control spacing manually or to fit selection bbox ####
 #: ../src/dialogs/tiledialog.cpp:791
+#, fuzzy
 msgid "Fit into selection box"
-msgstr ""
+msgstr "A_daptar a páxina á selección"
 
 #: ../src/dialogs/tiledialog.cpp:797
 msgid "Set spacing:"
@@ -2276,10 +2281,10 @@ msgid "Horizontal spacing between columns (px units)"
 msgstr "Espacio horizontal entre as columnas (unidades en píxels)"
 
 #. ## The OK button
-#: ../src/dialogs/tiledialog.cpp:865 ../share/extensions/restack.inx.h:3
-#, fuzzy
+#: ../src/dialogs/tiledialog.cpp:865
+#: ../share/extensions/restack.inx.h:3
 msgid "Arrange"
-msgstr "Ángulo"
+msgstr "Ordenar"
 
 #: ../src/dialogs/tiledialog.cpp:866
 msgid "Arrange selected objects"
@@ -2287,8 +2292,7 @@ msgstr "Ordena-los obxectos seleccionados"
 
 #: ../src/dialogs/xml-tree.cpp:174
 msgid "<b>Click</b> to select nodes, <b>drag</b> to rearrange."
-msgstr ""
-"<b>Prema</b> para seleccionar os nodos, <b>arrastre</b> para reordenar."
+msgstr "<b>Prema</b> para seleccionar os nodos, <b>arrastre</b> para reordenar."
 
 #: ../src/dialogs/xml-tree.cpp:185
 msgid "<b>Click</b> attribute to edit."
@@ -2296,12 +2300,8 @@ msgstr "<b>Prema</b> nun atributo para editalo."
 
 #: ../src/dialogs/xml-tree.cpp:189
 #, c-format
-msgid ""
-"Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to "
-"commit changes."
-msgstr ""
-"Seleccionou o atributo <b>%s</b>. Prema <b>Ctrl+Intro</b> cando remate de "
-"editar para confirmar os cambios."
+msgid "Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to commit changes."
+msgstr "Seleccionou o atributo <b>%s</b>. Prema <b>Ctrl+Intro</b> cando remate de editar para confirmar os cambios."
 
 #: ../src/dialogs/xml-tree.cpp:284
 msgid "Drag to reorder nodes"
@@ -2315,33 +2315,41 @@ msgstr "Novo nodo"
 msgid "New text node"
 msgstr "Novo nodo de texto"
 
-#: ../src/dialogs/xml-tree.cpp:347 ../src/dialogs/xml-tree.cpp:1414
+#: ../src/dialogs/xml-tree.cpp:347
+#: ../src/dialogs/xml-tree.cpp:1414
 #: ../src/nodepath.cpp:2024
 msgid "Duplicate node"
 msgstr "Duplicar o nodo"
 
-#: ../src/dialogs/xml-tree.cpp:368 ../src/dialogs/xml-tree.cpp:1431
-#: ../src/nodepath.cpp:3273 ../src/widgets/toolbox.cpp:1086
+#: ../src/dialogs/xml-tree.cpp:368
+#: ../src/dialogs/xml-tree.cpp:1431
+#: ../src/nodepath.cpp:3273
+#: ../src/widgets/toolbox.cpp:1086
 msgid "Delete node"
 msgstr "Borrar o nodo"
 
-#: ../src/dialogs/xml-tree.cpp:384 ../src/dialogs/xml-tree.cpp:1576
+#: ../src/dialogs/xml-tree.cpp:384
+#: ../src/dialogs/xml-tree.cpp:1576
 msgid "Unindent node"
 msgstr "Eliminar a sangría do nodo"
 
-#: ../src/dialogs/xml-tree.cpp:399 ../src/dialogs/xml-tree.cpp:1555
+#: ../src/dialogs/xml-tree.cpp:399
+#: ../src/dialogs/xml-tree.cpp:1555
 msgid "Indent node"
 msgstr "Sangrar o nodo"
 
-#: ../src/dialogs/xml-tree.cpp:411 ../src/dialogs/xml-tree.cpp:1508
+#: ../src/dialogs/xml-tree.cpp:411
+#: ../src/dialogs/xml-tree.cpp:1508
 msgid "Raise node"
 msgstr "Subir o nodo"
 
-#: ../src/dialogs/xml-tree.cpp:423 ../src/dialogs/xml-tree.cpp:1525
+#: ../src/dialogs/xml-tree.cpp:423
+#: ../src/dialogs/xml-tree.cpp:1525
 msgid "Lower node"
 msgstr "Baixar o nodo"
 
-#: ../src/dialogs/xml-tree.cpp:468 ../src/dialogs/xml-tree.cpp:1449
+#: ../src/dialogs/xml-tree.cpp:468
+#: ../src/dialogs/xml-tree.cpp:1449
 msgid "Delete attribute"
 msgstr "Borrar o atributo"
 
@@ -2361,8 +2369,9 @@ msgid "Attribute value"
 msgstr "Valor do atributo"
 
 #: ../src/dialogs/xml-tree.cpp:891
+#, fuzzy
 msgid "Drag XML subtree"
-msgstr ""
+msgstr "image/svg+xml"
 
 #: ../src/dialogs/xml-tree.cpp:1318
 msgid "New element node..."
@@ -2381,76 +2390,83 @@ msgstr "Crear"
 #: ../src/dialogs/xml-tree.cpp:1380
 #, fuzzy
 msgid "Create new element node"
-msgstr "Novo nodo"
+msgstr "Crear novo nodo de texto"
 
 #: ../src/dialogs/xml-tree.cpp:1396
-#, fuzzy
 msgid "Create new text node"
-msgstr "Novo nodo de texto"
+msgstr "Crear novo nodo de texto"
 
 #: ../src/dialogs/xml-tree.cpp:1478
-#, fuzzy
 msgid "Change attribute"
-msgstr "Establecer o atributo"
+msgstr "Cambiar o atributo"
 
-#: ../src/display/canvas-axonomgrid.cpp:390 ../src/display/canvas-grid.cpp:656
+#: ../src/display/canvas-axonomgrid.cpp:390
+#: ../src/display/canvas-grid.cpp:656
 msgid "Grid _units:"
 msgstr "_Unidades da reixa:"
 
-#: ../src/display/canvas-axonomgrid.cpp:392 ../src/display/canvas-grid.cpp:658
+#: ../src/display/canvas-axonomgrid.cpp:392
+#: ../src/display/canvas-grid.cpp:658
 msgid "_Origin X:"
 msgstr "_Orixe X:"
 
-#: ../src/display/canvas-axonomgrid.cpp:392 ../src/display/canvas-grid.cpp:658
+#: ../src/display/canvas-axonomgrid.cpp:392
+#: ../src/display/canvas-grid.cpp:658
 #: ../src/ui/dialog/inkscape-preferences.cpp:869
 #: ../src/ui/dialog/inkscape-preferences.cpp:890
 msgid "X coordinate of grid origin"
 msgstr "Coordenada X da orixe da reixa"
 
-#: ../src/display/canvas-axonomgrid.cpp:394 ../src/display/canvas-grid.cpp:660
+#: ../src/display/canvas-axonomgrid.cpp:394
+#: ../src/display/canvas-grid.cpp:660
 msgid "O_rigin Y:"
 msgstr "Ori_xe Y:"
 
-#: ../src/display/canvas-axonomgrid.cpp:394 ../src/display/canvas-grid.cpp:660
+#: ../src/display/canvas-axonomgrid.cpp:394
+#: ../src/display/canvas-grid.cpp:660
 #: ../src/ui/dialog/inkscape-preferences.cpp:870
 #: ../src/ui/dialog/inkscape-preferences.cpp:891
 msgid "Y coordinate of grid origin"
 msgstr "Coordenada Y da orixe da reixa"
 
-#: ../src/display/canvas-axonomgrid.cpp:396 ../src/display/canvas-grid.cpp:664
+#: ../src/display/canvas-axonomgrid.cpp:396
+#: ../src/display/canvas-grid.cpp:664
 msgid "Spacing _Y:"
 msgstr "Separación _Y:"
 
 #: ../src/display/canvas-axonomgrid.cpp:396
 #: ../src/ui/dialog/inkscape-preferences.cpp:893
+#, fuzzy
 msgid "Base length of z-axis"
-msgstr ""
+msgstr "Centrar no eixe vertical"
 
-#: ../src/display/canvas-axonomgrid.cpp:398 ../src/widgets/toolbox.cpp:2723
-#, fuzzy
+#: ../src/display/canvas-axonomgrid.cpp:398
+#: ../src/widgets/toolbox.cpp:2723
 msgid "Angle X:"
-msgstr "Ángulo:"
+msgstr "Ángulo X:"
 
 #: ../src/display/canvas-axonomgrid.cpp:398
 #: ../src/ui/dialog/inkscape-preferences.cpp:896
 msgid "Angle of x-axis"
-msgstr ""
+msgstr "Ángulo do eixe X"
 
-#: ../src/display/canvas-axonomgrid.cpp:400 ../src/widgets/toolbox.cpp:2802
-#, fuzzy
-msgid "Angle Z:"
-msgstr "Ángulo:"
+#: ../src/display/canvas-axonomgrid.cpp:400
+#: ../src/widgets/toolbox.cpp:2802
+msgid "Angle Z:"
+msgstr "Ángulo Z:"
 
 #: ../src/display/canvas-axonomgrid.cpp:400
 #: ../src/ui/dialog/inkscape-preferences.cpp:897
 msgid "Angle of z-axis"
-msgstr ""
+msgstr "Ángulo do eixe Z"
 
-#: ../src/display/canvas-axonomgrid.cpp:404 ../src/display/canvas-grid.cpp:668
+#: ../src/display/canvas-axonomgrid.cpp:404
+#: ../src/display/canvas-grid.cpp:668
 msgid "Grid line _color:"
 msgstr "_Cor das liñas da reixa:"
 
-#: ../src/display/canvas-axonomgrid.cpp:404 ../src/display/canvas-grid.cpp:668
+#: ../src/display/canvas-axonomgrid.cpp:404
+#: ../src/display/canvas-grid.cpp:668
 #: ../src/ui/dialog/inkscape-preferences.cpp:876
 #: ../src/ui/dialog/inkscape-preferences.cpp:877
 #: ../src/ui/dialog/inkscape-preferences.cpp:898
@@ -2458,15 +2474,18 @@ msgstr "_Cor das liñas da reixa:"
 msgid "Grid line color"
 msgstr "Cor das liñas da reixa"
 
-#: ../src/display/canvas-axonomgrid.cpp:404 ../src/display/canvas-grid.cpp:668
+#: ../src/display/canvas-axonomgrid.cpp:404
+#: ../src/display/canvas-grid.cpp:668
 msgid "Color of grid lines"
 msgstr "Cor das liñas da reixa"
 
-#: ../src/display/canvas-axonomgrid.cpp:409 ../src/display/canvas-grid.cpp:673
+#: ../src/display/canvas-axonomgrid.cpp:409
+#: ../src/display/canvas-grid.cpp:673
 msgid "Ma_jor grid line color:"
 msgstr "Cor das _liñas principais da reixa:"
 
-#: ../src/display/canvas-axonomgrid.cpp:409 ../src/display/canvas-grid.cpp:673
+#: ../src/display/canvas-axonomgrid.cpp:409
+#: ../src/display/canvas-grid.cpp:673
 #: ../src/ui/dialog/inkscape-preferences.cpp:878
 #: ../src/ui/dialog/inkscape-preferences.cpp:879
 #: ../src/ui/dialog/inkscape-preferences.cpp:900
@@ -2474,52 +2493,48 @@ msgstr "Cor das _liñas principais da reixa:"
 msgid "Major grid line color"
 msgstr "Cor das liñas principais da reixa"
 
-#: ../src/display/canvas-axonomgrid.cpp:410 ../src/display/canvas-grid.cpp:674
+#: ../src/display/canvas-axonomgrid.cpp:410
+#: ../src/display/canvas-grid.cpp:674
 msgid "Color of the major (highlighted) grid lines"
 msgstr "Cor das liñas principais (resaltadas) da reixa"
 
-#: ../src/display/canvas-axonomgrid.cpp:414 ../src/display/canvas-grid.cpp:678
+#: ../src/display/canvas-axonomgrid.cpp:414
+#: ../src/display/canvas-grid.cpp:678
 msgid "_Major grid line every:"
 msgstr "Liña _principal de reixa cada:"
 
-#: ../src/display/canvas-axonomgrid.cpp:414 ../src/display/canvas-grid.cpp:678
+#: ../src/display/canvas-axonomgrid.cpp:414
+#: ../src/display/canvas-grid.cpp:678
 msgid "lines"
 msgstr " liñas"
 
 #: ../src/display/canvas-grid.cpp:40
-#, fuzzy
 msgid "Rectangular grid"
-msgstr "Rectángulo"
+msgstr "Reixa rectangular"
 
 #: ../src/display/canvas-grid.cpp:41
+#, fuzzy
 msgid "Axonometric grid"
-msgstr ""
+msgstr "Reixa rectangular"
 
 #: ../src/display/canvas-grid.cpp:259
-#, fuzzy
 msgid "Create new grid"
-msgstr "Crear elipse"
+msgstr "Crear nova reixa"
 
 #: ../src/display/canvas-grid.cpp:325
-#, fuzzy
 msgid "_Enabled"
-msgstr "absoluto"
+msgstr "_Activado"
 
 #: ../src/display/canvas-grid.cpp:326
-msgid ""
-"Determines whether to snap to this grid or not. Can be 'on' for invisible "
-"grids."
+msgid "Determines whether to snap to this grid or not. Can be 'on' for invisible grids."
 msgstr ""
 
 #: ../src/display/canvas-grid.cpp:329
-#, fuzzy
 msgid "_Visible"
-msgstr "Visible"
+msgstr "_Visible"
 
 #: ../src/display/canvas-grid.cpp:330
-msgid ""
-"Determines whether the grid is displayed or not. Objects are still snapped "
-"to invisible grids."
+msgid "Determines whether the grid is displayed or not. Objects are still snapped to invisible grids."
 msgstr ""
 
 #: ../src/display/canvas-grid.cpp:662
@@ -2539,13 +2554,14 @@ msgid "Distance between horizontal grid lines"
 msgstr "Distancia entre as liñas horizontais da reixa"
 
 #: ../src/display/canvas-grid.cpp:697
+#, fuzzy
 msgid "_Show dots instead of lines"
-msgstr ""
+msgstr "Amosar puntos en troques de liñas"
 
 #: ../src/display/canvas-grid.cpp:698
 #: ../src/ui/dialog/inkscape-preferences.cpp:883
 msgid "If set, displays dots at gridpoints instead of gridlines"
-msgstr ""
+msgstr "Se está marcada, mostra puntos nas interseccións da reixa en vez de liñas"
 
 #: ../src/document.cpp:415
 #, c-format
@@ -2553,14 +2569,14 @@ msgid "New document %d"
 msgstr "Novo documento %d"
 
 #: ../src/document.cpp:447
-#, c-format
+#, fuzzy, c-format
 msgid "Memory document %d"
-msgstr ""
+msgstr "Novo documento %d"
 
 #: ../src/document.cpp:603
 #, c-format
 msgid "Unnamed document %d"
-msgstr ""
+msgstr "Documento sen nome %d"
 
 #. We hit green anchor, closing Green-Blue-Red
 #: ../src/draw-context.cpp:448
@@ -2570,12 +2586,11 @@ msgstr "O camiño está pechado."
 #. We hit bot start and end of single curve, closing paths
 #: ../src/draw-context.cpp:463
 msgid "Closing path."
-msgstr ""
+msgstr "Pechando o camiño."
 
 #: ../src/draw-context.cpp:577
-#, fuzzy
 msgid "Draw path"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "Debuxar camiño"
 
 #. alpha of color under cursor, to show in the statusbar
 #. locale-sensitive printf is OK, since this goes to the UI, not into SVG
@@ -2586,9 +2601,9 @@ msgstr " alfa %.3g"
 
 #. where the color is picked, to show in the statusbar
 #: ../src/dropper-context.cpp:294
-#, c-format
+#, fuzzy, c-format
 msgid ", averaged with radius %d"
-msgstr ""
+msgstr "<b>Estrela</b> de %d vértice"
 
 #: ../src/dropper-context.cpp:294
 msgid " under cursor"
@@ -2599,26 +2614,19 @@ msgstr " baixo o cursor"
 msgid "<b>Release mouse</b> to set color."
 msgstr "<b>Solte o rato</b> para establecer a cor."
 
-#: ../src/dropper-context.cpp:296 ../src/tools-switch.cpp:229
+#: ../src/dropper-context.cpp:296
+#: ../src/tools-switch.cpp:229
 #, fuzzy
-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>Prema</b> para establecer o recheo, <b>Shift+clic</b> para establecer o "
-"trazo; <b>arrastre</b> para promediar a cor da área; con <b>Alt</b> para "
-"escoller a cor inversa; <b>Ctrl+C</b> para copiar a cor de debaixo do rato ó "
-"portarretallos"
+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>Prema</b> para establecer o recheo, <b>Shift+clic</b> para establecer o trazo; <b>arrastre</b> para promediar a cor da área; con <b>Alt</b> para escoller a cor inversa; <b>Ctrl+C</b> para copiar a cor de debaixo do rato ó portarretallos"
 
 #: ../src/dropper-context.cpp:329
 #, fuzzy
 msgid "Set picked color"
-msgstr "Última cor seleccionada"
+msgstr "Establecer a cor do trazo"
 
 #: ../src/dyna-draw-context.cpp:625
-msgid ""
-"<b>Guide path selected</b>; start drawing along the guide with <b>Ctrl</b>"
+msgid "<b>Guide path selected</b>; start drawing along the guide with <b>Ctrl</b>"
 msgstr ""
 
 #: ../src/dyna-draw-context.cpp:627
@@ -2630,28 +2638,29 @@ msgid "Tracking: <b>connection to guide path lost!</b>"
 msgstr ""
 
 #: ../src/dyna-draw-context.cpp:732
+#, fuzzy
 msgid "<b>Tracking</b> a guide path"
-msgstr ""
+msgstr "O camiño está pechado."
 
 #: ../src/dyna-draw-context.cpp:735
 #, fuzzy
 msgid "<b>Drawing</b> a calligraphic stroke"
-msgstr "Debuxar liñas de caligrafía"
+msgstr "Establecer a cor do trazo"
 
 #: ../src/dyna-draw-context.cpp:1016
 #, fuzzy
 msgid "Draw calligraphic stroke"
-msgstr "Debuxar liñas de caligrafía"
+msgstr "Establecer a cor do trazo"
 
 #: ../src/eraser-context.cpp:532
 #, fuzzy
 msgid "<b>Drawing</b> an eraser stroke"
-msgstr "Debuxar liñas de caligrafía"
+msgstr "Establecer a cor do trazo"
 
 #: ../src/eraser-context.cpp:839
 #, fuzzy
 msgid "Draw eraser stroke"
-msgstr "Debuxar liñas de caligrafía"
+msgstr "Establecer a cor do trazo"
 
 #: ../src/event-context.cpp:595
 msgid "<b>Space+mouse drag</b> to pan canvas"
@@ -2662,11 +2671,15 @@ msgid "[Unchanged]"
 msgstr ""
 
 #. Edit
-#: ../src/event-log.cpp:264 ../src/event-log.cpp:267 ../src/verbs.cpp:2193
+#: ../src/event-log.cpp:264
+#: ../src/event-log.cpp:267
+#: ../src/verbs.cpp:2193
 msgid "_Undo"
 msgstr "_Desfacer "
 
-#: ../src/event-log.cpp:274 ../src/event-log.cpp:278 ../src/verbs.cpp:2195
+#: ../src/event-log.cpp:274
+#: ../src/event-log.cpp:278
+#: ../src/verbs.cpp:2195
 msgid "_Redo"
 msgstr "_Refacer"
 
@@ -2676,7 +2689,7 @@ msgstr ""
 
 #: ../src/extension/dependency.cpp:262
 msgid "  type: "
-msgstr ""
+msgstr "  tipo: "
 
 #: ../src/extension/dependency.cpp:263
 msgid "  location: "
@@ -2688,40 +2701,34 @@ msgstr ""
 
 #: ../src/extension/dependency.cpp:267
 msgid "  description: "
-msgstr ""
+msgstr "  descrición: "
 
 #: ../src/extension/effect.cpp:35
-#, fuzzy
 msgid " (No preferences)"
-msgstr "Preferencias de Zoom"
+msgstr " (Sen preferencias)"
 
 #. 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 ""
 
 #. This is some filler text, needs to change before relase
 #: ../src/extension/error-file.cpp:62
 msgid "Show dialog on startup"
-msgstr ""
+msgstr "Mostrar o diálogo ó iniciar"
 
 #: ../src/extension/execution-env.cpp:134
 #, c-format
 msgid "'%s' working, please wait..."
-msgstr ""
+msgstr "'%s' está traballando, agarde..."
 
 #. 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."
+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 ""
 
 #: ../src/extension/extension.cpp:255
@@ -2734,11 +2741,11 @@ msgstr ""
 
 #: ../src/extension/extension.cpp:263
 msgid "the XML description of it got lost."
-msgstr ""
+msgstr "perdeuse a súa descrición XML."
 
 #: ../src/extension/extension.cpp:267
 msgid "no implementation was defined for the extension."
-msgstr ""
+msgstr "non se definiu ningunha implementación para a extensión."
 
 #. std::cout << "Failed: " << *(_deps[i]) << std::endl;
 #: ../src/extension/extension.cpp:274
@@ -2747,11 +2754,11 @@ msgstr ""
 
 #: ../src/extension/extension.cpp:294
 msgid "Extension \""
-msgstr ""
+msgstr "A extensión \""
 
 #: ../src/extension/extension.cpp:294
 msgid "\" failed to load because "
-msgstr ""
+msgstr "\" non se puido cargar debido a "
 
 #: ../src/extension/extension.cpp:625
 #, c-format
@@ -2768,7 +2775,7 @@ msgstr "ID:"
 
 #: ../src/extension/extension.cpp:725
 msgid "State:"
-msgstr ""
+msgstr "Estado:"
 
 #: ../src/extension/extension.cpp:725
 msgid "Loaded"
@@ -2783,20 +2790,12 @@ msgid "Deactivated"
 msgstr ""
 
 #: ../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."
+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 ""
 
 #: ../src/extension/implementation/script.cpp:1055
-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 ""
-"Inkscape recibiu datos adicionais do script que se executou.  O script non "
-"devolveu un erro, pero isto podería indicar que o resultado non é o agardado."
+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 "Inkscape recibiu datos adicionais do script que se executou.  O script non devolveu un erro, pero isto podería indicar que o resultado non é o agardado."
 
 #: ../src/extension/init.cpp:282
 msgid "Null external module directory name.  Modules will not be loaded."
@@ -2805,43 +2804,41 @@ msgstr ""
 #: ../src/extension/init.cpp:296
 #: ../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 ""
-"O directorio de módulos (%s) non está dispoñible. Non se van cargar os "
-"módulos externos dese directorio."
+msgid "Modules directory (%s) is unavailable.  External modules in that directory will not be loaded."
+msgstr "O directorio de módulos (%s) non está dispoñible. Non se van cargar os módulos externos dese directorio."
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:38
 #, fuzzy
 msgid "Adaptive Threshold"
-msgstr "Limiar:"
+msgstr "Limiar de clic/arrastre:"
 
 #: ../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:134 ../src/libgdl/gdl-dock.c:190
+#: ../src/extension/internal/bluredge.cpp:134
+#: ../src/libgdl/gdl-dock.c:190
 #: ../src/libgdl/gdl-dock-placeholder.c:169
 #: ../src/live_effects/lpe-bendpath.cpp:58
 #: ../src/live_effects/lpe-patternalongpath.cpp:64
-#: ../src/widgets/toolbox.cpp:2396 ../src/widgets/toolbox.cpp:3241
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:2396
+#: ../src/widgets/toolbox.cpp:3241
 msgid "Width"
-msgstr "Ancho:"
+msgstr "Ancho"
 
 #: ../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:2413
-#, fuzzy
+#: ../src/extension/internal/bitmap/sample.cpp:41
+#: ../src/libgdl/gdl-dock.c:198
+#: ../src/libgdl/gdl-dock-placeholder.c:177
+#: ../src/widgets/toolbox.cpp:2413
 msgid "Height"
-msgstr "Alto:"
+msgstr "Alto"
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:42
 #: ../src/filter-enums.cpp:32
 #, fuzzy
 msgid "Offset"
-msgstr "Desprazamento:"
+msgstr "Desprazamento"
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:46
 #: ../src/extension/internal/bitmap/addNoise.cpp:57
@@ -2889,41 +2886,44 @@ msgstr ""
 #: ../src/extension/internal/bitmap/addNoise.cpp:44
 #, fuzzy
 msgid "Add Noise"
-msgstr "Engadir Nodos"
+msgstr "Engadir Ruído"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:47
+#, fuzzy
 msgid "Uniform Noise"
-msgstr ""
+msgstr "Engadir Ruído"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:48
+#, fuzzy
 msgid "Gaussian Noise"
-msgstr ""
+msgstr "Engadir Ruído"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:49
 msgid "Multiplicative Gaussian Noise"
 msgstr ""
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:50
+#, fuzzy
 msgid "Impulse Noise"
-msgstr ""
+msgstr "Engadir Ruído"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:51
 #, fuzzy
 msgid "Laplacian Noise"
-msgstr "Recheo fractal"
+msgstr "Engadir Ruído"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:52
+#, fuzzy
 msgid "Poisson Noise"
-msgstr ""
+msgstr "Engadir Ruído"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:59
 msgid "Add random noise to selected bitmap(s)."
 msgstr ""
 
 #: ../src/extension/internal/bitmap/blur.cpp:37
-#, fuzzy
 msgid "Blur"
-msgstr "Azul"
+msgstr "Desenfoque"
 
 #: ../src/extension/internal/bitmap/blur.cpp:39
 #: ../src/extension/internal/bitmap/charcoal.cpp:39
@@ -2936,7 +2936,7 @@ msgstr "Azul"
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2251
 #, fuzzy
 msgid "Radius"
-msgstr "Elevar"
+msgstr "Radio"
 
 #: ../src/extension/internal/bitmap/blur.cpp:40
 #: ../src/extension/internal/bitmap/charcoal.cpp:40
@@ -2946,38 +2946,39 @@ msgstr "Elevar"
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:43
 #, fuzzy
 msgid "Sigma"
-msgstr "pequeno"
+msgstr "Sigma"
 
 #: ../src/extension/internal/bitmap/blur.cpp:46
 #, fuzzy
 msgid "Blur selected bitmap(s)"
-msgstr "Agrupa-los obxectos seleccionados"
+msgstr "<big><b>Tamaño do mapa de bits</b></big>"
 
 #: ../src/extension/internal/bitmap/channel.cpp:47
 #: ../src/extension/internal/bitmap/levelChannel.cpp:53
-#, fuzzy
 msgid "Channel"
-msgstr "Cancelar"
+msgstr "Canle"
 
 #: ../src/extension/internal/bitmap/channel.cpp:49
-#, fuzzy
 msgid "Layer"
-msgstr "_Capa"
+msgstr "Capa"
 
 #: ../src/extension/internal/bitmap/channel.cpp:50
 #: ../src/extension/internal/bitmap/levelChannel.cpp:54
+#, fuzzy
 msgid "Red Channel"
-msgstr ""
+msgstr "Función do vermello"
 
 #: ../src/extension/internal/bitmap/channel.cpp:51
 #: ../src/extension/internal/bitmap/levelChannel.cpp:55
+#, fuzzy
 msgid "Green Channel"
-msgstr ""
+msgstr "Función do verde"
 
 #: ../src/extension/internal/bitmap/channel.cpp:52
 #: ../src/extension/internal/bitmap/levelChannel.cpp:56
+#, fuzzy
 msgid "Blue Channel"
-msgstr ""
+msgstr "Función do azul"
 
 #: ../src/extension/internal/bitmap/channel.cpp:53
 #: ../src/extension/internal/bitmap/levelChannel.cpp:57
@@ -3001,13 +3002,13 @@ msgstr "Amarelo"
 #: ../src/extension/internal/bitmap/levelChannel.cpp:60
 #, fuzzy
 msgid "Black Channel"
-msgstr "Negro"
+msgstr "Recheo negro"
 
 #: ../src/extension/internal/bitmap/channel.cpp:57
 #: ../src/extension/internal/bitmap/levelChannel.cpp:61
 #, fuzzy
 msgid "Opacity Channel"
-msgstr "Opacidade"
+msgstr "Cambiar a opacidade"
 
 #: ../src/extension/internal/bitmap/channel.cpp:58
 #: ../src/extension/internal/bitmap/levelChannel.cpp:62
@@ -3061,16 +3062,18 @@ msgstr "Metro"
 #: ../src/extension/internal/bitmap/convolve.cpp:52
 #: ../src/extension/internal/bitmap/reduceNoise.cpp:41
 #: ../share/extensions/lindenmayer.inx.h:6
+#, fuzzy
 msgid "Order"
-msgstr ""
+msgstr "Orde-z"
 
 #: ../src/extension/internal/bitmap/convolve.cpp:53
 msgid "Kernel Array"
 msgstr ""
 
 #: ../src/extension/internal/bitmap/convolve.cpp:59
+#, fuzzy
 msgid "Apply Convolve Effect"
-msgstr ""
+msgstr "Aplicar novo efecto"
 
 #: ../src/extension/internal/bitmap/cycleColormap.cpp:36
 msgid "Cycle Colormap"
@@ -3099,7 +3102,7 @@ msgstr ""
 #: ../src/extension/internal/bitmap/edge.cpp:36
 #, fuzzy
 msgid "Edge"
-msgstr "Desenfocar o Bordo"
+msgstr "Detección de bordos"
 
 #: ../src/extension/internal/bitmap/edge.cpp:44
 msgid "Hilight edges of selected bitmap(s)."
@@ -3157,58 +3160,50 @@ msgstr "Importar"
 #: ../src/extension/internal/bitmap/implode.cpp:44
 #, fuzzy
 msgid "Implode selected bitmap(s)."
-msgstr "Manter seleccionado"
+msgstr "<big><b>Tamaño do mapa de bits</b></big>"
 
 #: ../src/extension/internal/bitmap/levelChannel.cpp:51
+#, fuzzy
 msgid "Level (with Channel)"
-msgstr ""
+msgstr "<b>Estrela</b> de %d vértice"
 
 #: ../src/extension/internal/bitmap/levelChannel.cpp:64
 #: ../src/extension/internal/bitmap/level.cpp:42
 #, fuzzy
 msgid "Black Point"
-msgstr "Negro"
+msgstr "Recheo negro"
 
-# [*] Revisar
 #: ../src/extension/internal/bitmap/levelChannel.cpp:65
 #: ../src/extension/internal/bitmap/level.cpp:43
 #, fuzzy
 msgid "White Point"
-msgstr "Xuntar metades"
+msgstr "Recheo branco"
 
-# Rosetta
 #: ../src/extension/internal/bitmap/levelChannel.cpp:66
 #: ../src/extension/internal/bitmap/level.cpp:44
 #, fuzzy
 msgid "Gamma Correction"
-msgstr "Corrección gamma:"
+msgstr "Corrección gamma"
 
 #: ../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."
+msgid "Level the specified channel of selected bitmap(s) by scaling values falling between the given ranges to the full color range."
 msgstr ""
 
 #: ../src/extension/internal/bitmap/level.cpp:40
-#, fuzzy
 msgid "Level"
-msgstr "Roda"
+msgstr "Nivel"
 
 #: ../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."
+msgid "Level selected bitmap(s) by scaling values falling between the given ranges to the full color range."
 msgstr ""
 
 #: ../src/extension/internal/bitmap/medianFilter.cpp:36
 #, fuzzy
 msgid "Median Filter"
-msgstr "Engadir Capa"
+msgstr "Renomear filtro"
 
 #: ../src/extension/internal/bitmap/medianFilter.cpp:44
-msgid ""
-"Filter selected bitmap(s) by replacing each pixel component with the median "
-"color in a circular neighborhood."
+msgid "Filter selected bitmap(s) by replacing each pixel component with the median color in a circular neighborhood."
 msgstr ""
 
 #: ../src/extension/internal/bitmap/modulate.cpp:39
@@ -3217,25 +3212,28 @@ msgid "Modulate"
 msgstr "Mover"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:41
-#, fuzzy
 msgid "Brightness"
 msgstr "Brillo"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:42
-#: ../src/flood-context.cpp:275 ../src/ui/dialog/inkscape-preferences.cpp:731
+#: ../src/flood-context.cpp:275
+#: ../src/ui/dialog/inkscape-preferences.cpp:731
 #: ../src/widgets/sp-color-icc-selector.cpp:235
 #: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-scales.cpp:427
-#: ../src/widgets/sp-color-scales.cpp:428 ../src/widgets/toolbox.cpp:3375
+#: ../src/widgets/sp-color-scales.cpp:428
+#: ../src/widgets/toolbox.cpp:3375
 #: ../share/extensions/color_randomize.inx.h:5
 msgid "Saturation"
 msgstr "Saturación"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:43
-#: ../src/flood-context.cpp:274 ../src/widgets/sp-color-icc-selector.cpp:235
+#: ../src/flood-context.cpp:274
+#: ../src/widgets/sp-color-icc-selector.cpp:235
 #: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-scales.cpp:424
-#: ../src/widgets/sp-color-scales.cpp:425 ../src/widgets/toolbox.cpp:3360
+#: ../src/widgets/sp-color-scales.cpp:425
+#: ../src/widgets/toolbox.cpp:3360
 #: ../share/extensions/color_randomize.inx.h:2
 msgid "Hue"
 msgstr "Matiz"
@@ -3259,14 +3257,13 @@ msgid "Normalize"
 msgstr "Normal"
 
 #: ../src/extension/internal/bitmap/normalize.cpp:42
-msgid ""
-"Normalize selected bitmap(s), expanding color range to the full possible "
-"range of color."
+msgid "Normalize selected bitmap(s), expanding color range to the full possible range of color."
 msgstr ""
 
 #: ../src/extension/internal/bitmap/oilPaint.cpp:36
+#, fuzzy
 msgid "Oil Paint"
-msgstr ""
+msgstr "_Pintar o trazo"
 
 #: ../src/extension/internal/bitmap/oilPaint.cpp:44
 msgid "Stylize selected bitmap(s) so that they appear to be painted with oils."
@@ -3283,21 +3280,19 @@ msgstr "Elevar"
 #: ../src/extension/internal/bitmap/raise.cpp:43
 #, fuzzy
 msgid "Raised"
-msgstr "Elevar"
+msgstr "Elevouse a capa <b>%s</b>."
 
 #: ../src/extension/internal/bitmap/raise.cpp:49
-msgid ""
-"Alter lightness the edges of selected bitmap(s) to create a raised "
-"appearance."
+msgid "Alter lightness the edges of selected bitmap(s) to create a raised appearance."
 msgstr ""
 
 #: ../src/extension/internal/bitmap/reduceNoise.cpp:39
+#, fuzzy
 msgid "Reduce Noise"
-msgstr ""
+msgstr "Engadir Ruído"
 
 #: ../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 ""
 
 #: ../src/extension/internal/bitmap/sample.cpp:38
@@ -3306,8 +3301,7 @@ msgid "Sample"
 msgstr "Figuras"
 
 #: ../src/extension/internal/bitmap/sample.cpp:47
-msgid ""
-"Alter the resolution of selected image by resizing it by given dimensions."
+msgid "Alter the resolution of selected image by resizing it by given dimensions."
 msgstr ""
 
 #: ../src/extension/internal/bitmap/shade.cpp:39
@@ -3338,7 +3332,7 @@ msgstr ""
 #: ../src/extension/internal/bitmap/sharpen.cpp:46
 #, fuzzy
 msgid "Sharpen selected bitmap(s)."
-msgstr "Agrupa-los obxectos seleccionados"
+msgstr "<big><b>Tamaño do mapa de bits</b></big>"
 
 #: ../src/extension/internal/bitmap/solarize.cpp:36
 #, fuzzy
@@ -3355,8 +3349,7 @@ msgid "Spread"
 msgstr "Espiral"
 
 #: ../src/extension/internal/bitmap/spread.cpp:44
-msgid ""
-"Randomly spread pixels in selected bitmap(s), within the radius of 'amount.'"
+msgid "Randomly spread pixels in selected bitmap(s), within the radius of 'amount.'"
 msgstr ""
 
 #: ../src/extension/internal/bitmap/swirl.cpp:36
@@ -3366,9 +3359,8 @@ msgstr "Espiral"
 
 #: ../src/extension/internal/bitmap/swirl.cpp:38
 #: ../share/extensions/grid_polar.inx.h:7
-#, fuzzy
 msgid "Degrees"
-msgstr "graos"
+msgstr "Graos"
 
 #: ../src/extension/internal/bitmap/swirl.cpp:44
 #, fuzzy
@@ -3379,13 +3371,13 @@ msgstr "Baixa-la selección ó fondo"
 #: ../src/extension/internal/bitmap/threshold.cpp:37
 #: ../src/extension/internal/bitmap/threshold.cpp:39
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:45
-#, fuzzy
 msgid "Threshold"
-msgstr "Limiar:"
+msgstr "Limiar"
 
 #: ../src/extension/internal/bitmap/threshold.cpp:45
+#, fuzzy
 msgid "Threshold selected bitmap(s)."
-msgstr ""
+msgstr "<big><b>Tamaño do mapa de bits</b></big>"
 
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:40
 msgid "Unsharp Mask"
@@ -3396,9 +3388,8 @@ msgid "Sharpen selected bitmap(s) using unsharp mask algorithms."
 msgstr ""
 
 #: ../src/extension/internal/bitmap/wave.cpp:37
-#, fuzzy
 msgid "Wave"
-msgstr "_Gardar"
+msgstr "Onda"
 
 #: ../src/extension/internal/bitmap/wave.cpp:39
 msgid "Amplitude"
@@ -3420,12 +3411,12 @@ msgstr ""
 #: ../src/extension/internal/bluredge.cpp:134
 #, fuzzy
 msgid "Width in px of the halo"
-msgstr "Ancho en píxels da área desenfocada"
+msgstr "Ancho en unidades de lonxitude"
 
 #: ../src/extension/internal/bluredge.cpp:135
 #, fuzzy
 msgid "Number of steps"
-msgstr "Número de Niveis"
+msgstr "Número de filas"
 
 #: ../src/extension/internal/bluredge.cpp:135
 #, fuzzy
@@ -3433,39 +3424,38 @@ msgid "Number of inset/outset copies of the object to make"
 msgstr "Número de copias do obxecto a facer para simular o desenfoque"
 
 #: ../src/extension/internal/bluredge.cpp:139
-#: ../share/extensions/interp.inx.h:3 ../share/extensions/motion.inx.h:3
+#: ../share/extensions/interp.inx.h:3
+#: ../share/extensions/motion.inx.h:3
 #: ../share/extensions/pathalongpath.inx.h:4
 #: ../share/extensions/pathscatter.inx.h:5
+#, fuzzy
 msgid "Generate from Path"
-msgstr ""
+msgstr "Eliminar o camiño de corte da selección"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:239
-#, fuzzy
 msgid "Cairo PDF Output"
-msgstr "Saída de DXF"
+msgstr "Saída de Cairo PDF"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:241
 msgid "Restrict to PDF version"
-msgstr ""
+msgstr "Restrinxir á versión de PDF"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:242
 msgid "PDF 1.4"
-msgstr ""
+msgstr "PDF 1.4"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:244
 #: ../src/extension/internal/cairo-ps-out.cpp:230
 #: ../src/extension/internal/emf-win32-inout.cpp:2182
 #: ../src/extension/internal/eps-out.cpp:92
 #: ../src/extension/internal/ps-out.cpp:84
-#, fuzzy
 msgid "Convert texts to paths"
-msgstr "Converte-lo texto en camiño"
+msgstr "Converter os textos en camiños"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:245
 #: ../src/extension/internal/cairo-ps-out.cpp:231
-#, fuzzy
 msgid "Convert blur effects to bitmaps"
-msgstr "Converte-lo texto en camiño"
+msgstr "Converter os efectos de desenfoque en mapas de bits"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:246
 #: ../src/extension/internal/cairo-ps-out.cpp:232
@@ -3474,102 +3464,85 @@ msgid "Preferred resolution (DPI) of bitmaps"
 msgstr "Resolución preferida do mapa de bits (puntos por polgada)"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:247
-#, fuzzy
 msgid "Export drawing, not page"
-msgstr "Exportando"
+msgstr "Exportar o debuxo, non a páxina"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:248
-#, fuzzy
 msgid "Export canvas"
-msgstr "Exportar"
+msgstr "Exportar o lenzo"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:249
 msgid "Limit export to the object with ID"
 msgstr ""
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:253
-#, fuzzy
 msgid "PDF via Cairo (*.pdf)"
-msgstr "Diagrama de Dia (*.dia)"
+msgstr "PDF a través de Cairo (*.pdf)"
 
 #: ../src/extension/internal/cairo-pdf-out.cpp:254
-#, fuzzy
 msgid "PDF File"
-msgstr "_Ficheiro"
+msgstr "Ficheiro PDF"
 
 #: ../src/extension/internal/cairo-ps-out.cpp:222
-#, fuzzy
 msgid "Cairo PS Output"
-msgstr "Saída de DXF"
+msgstr "Saída de Cairo PS"
 
 #: ../src/extension/internal/cairo-ps-out.cpp:224
 msgid "Restrict to PS level"
-msgstr ""
+msgstr "Restrinxir a nivel de PS"
 
 #: ../src/extension/internal/cairo-ps-out.cpp:225
-#, fuzzy
 msgid "PostScript level 3"
-msgstr "Ficheiro Postscript"
+msgstr "PostScript nivel 3"
 
 #: ../src/extension/internal/cairo-ps-out.cpp:227
-#, fuzzy
 msgid "PostScript level 2"
-msgstr "Ficheiro Postscript"
+msgstr "PostScript nivel 2"
 
 #: ../src/extension/internal/cairo-ps-out.cpp:236
-#, fuzzy
 msgid "PostScript via Cairo (*.ps)"
-msgstr "Postscript (*.ps)"
+msgstr "PostScript a través de Cairo (*.ps)"
 
 #: ../src/extension/internal/cairo-ps-out.cpp:237
 #: ../src/extension/internal/ps-out.cpp:90
-#, fuzzy
 msgid "PostScript File"
-msgstr "Ficheiro Postscript"
+msgstr "Ficheiro PostScript"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2152
-#, fuzzy
 msgid "EMF Input"
-msgstr "Entrada de DXF"
+msgstr "Entrada de EMF"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2157
-#, fuzzy
 msgid "Enhanced Metafiles (*.emf)"
-msgstr "Windows Metafile (*.wmf)"
+msgstr "Enhanced Metafiles (*.emf)"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2158
 msgid "Enhanced Metafiles"
-msgstr ""
+msgstr "Enhanced Metafiles"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2166
-#, fuzzy
 msgid "WMF Input"
-msgstr "Entrada de SVG"
+msgstr "Entrada de WMF"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2171
-#, fuzzy
 msgid "Windows Metafiles (*.wmf)"
-msgstr "Windows Metafile (*.wmf)"
+msgstr "Windows Metafiles (*.wmf)"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2172
-#, fuzzy
 msgid "Windows Metafiles"
-msgstr "Entrada de Windows Metafile"
+msgstr "Windows Metafiles"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2180
-#, fuzzy
 msgid "EMF Output"
-msgstr "Saída de DXF"
+msgstr "Saída de EMF"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2186
-#, fuzzy
 msgid "Enhanced Metafile (*.emf)"
-msgstr "Windows Metafile (*.wmf)"
+msgstr "Enhanced Metafile (*.emf)"
 
 #: ../src/extension/internal/emf-win32-inout.cpp:2187
-#, fuzzy
 msgid "Enhanced Metafile"
-msgstr "Crear rectángulo"
+msgstr "Enhanced Metafile"
 
 #: ../src/extension/internal/eps-out.cpp:89
 msgid "Encapsulated Postscript Output"
@@ -3623,9 +3596,8 @@ msgstr "Pe_char"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/clouds.h:25
-#, fuzzy
 msgid "Yes, more descriptions"
-msgstr "selecciona-la dirección"
+msgstr "Si, máis descricións"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/crystal.h:24
@@ -3650,11 +3622,12 @@ msgstr "_Personalizado"
 #: ../src/extension/internal/filter/ridged-border.h:25
 #, fuzzy
 msgid "Artist text"
-msgstr "Texto vertical"
+msgstr "Texto horizontal"
 
 #: ../src/extension/internal/filter/drop-shadow.h:35
+#, fuzzy
 msgid "Drop Shadow"
-msgstr ""
+msgstr "Amo_sar a sombra do bordo"
 
 #: ../src/extension/internal/filter/drop-shadow.h:37
 #, fuzzy
@@ -3665,32 +3638,30 @@ msgstr "Fonte"
 #: ../src/extension/internal/grid.cpp:197
 #, fuzzy
 msgid "Horizontal Offset"
-msgstr "Desprazamento Horizontal"
+msgstr "Desprazamento do patrón"
 
 #: ../src/extension/internal/filter/drop-shadow.h:39
 #: ../src/extension/internal/grid.cpp:198
 #, fuzzy
 msgid "Vertical Offset"
-msgstr "Desprazamento Vertical"
+msgstr "Desprazamento do patrón"
 
 #: ../src/extension/internal/filter/drop-shadow.h:43
 #: ../src/extension/internal/filter/filter.cpp:196
 #: ../src/extension/internal/filter/filter-file.cpp:146
 #: ../src/extension/internal/filter/snow.h:38
-#, fuzzy
 msgid "Filter"
-msgstr "milímetros"
+msgstr "Filtro"
 
 #: ../src/extension/internal/filter/drop-shadow.h:45
-#, fuzzy
 msgid "I hate text"
-msgstr "Pegar E_stilo"
+msgstr "Odio o texto"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/emboss.h:22
 #, fuzzy
 msgid "Emboss effect"
-msgstr "Desprazamento Horizontal"
+msgstr "Engadir Efecto:"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/etched-glass.h:24
@@ -3709,20 +3680,18 @@ msgstr ""
 #: ../src/extension/internal/filter/filter-file.cpp:44
 #, fuzzy
 msgid "Null external module directory name.  Filters will not be loaded."
-msgstr ""
-"O directorio de módulos (%s) non está dispoñible. Non se van cargar os "
-"módulos externos dese directorio."
+msgstr "O directorio de módulos (%s) non está dispoñible. Non se van cargar os módulos externos dese directorio."
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/fire.h:24
-#, fuzzy
 msgid "Fire"
-msgstr "_Ficheiro"
+msgstr "Lume"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/fire.h:25
+#, fuzzy
 msgid "Artist on fire"
-msgstr ""
+msgstr "Non hai nada no portarretallos."
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/frost.h:24
@@ -3738,8 +3707,9 @@ msgstr "Azul"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/ink-bleed.h:25
+#, fuzzy
 msgid "Artist Text"
-msgstr ""
+msgstr "Texto horizontal"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/jelly-bean.h:24
@@ -3781,7 +3751,7 @@ msgstr "Metro"
 #: ../src/extension/internal/filter/melt.h:23
 #, fuzzy
 msgid "Melt effect"
-msgstr "Capa actual"
+msgstr "Engadir Efecto:"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/metal.h:24
@@ -3830,7 +3800,7 @@ msgstr ""
 #: ../src/extension/internal/filter/ridged-border.h:24
 #, fuzzy
 msgid "Ridged Border"
-msgstr "Mover"
+msgstr "_Cor do bordo:"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/ripple.h:24
@@ -3876,16 +3846,14 @@ msgstr "Espiral"
 msgid "Turn all the colors to be sepia tones"
 msgstr ""
 
-# Rosetta
 #: ../src/extension/internal/filter/snow.h:32
-#, fuzzy
 msgid "Snow"
-msgstr "Mostrar:"
+msgstr "Neve"
 
 #: ../src/extension/internal/filter/snow.h:34
 #, fuzzy
 msgid "Drift Size"
-msgstr "Tamaño de punto"
+msgstr "Pegar o tamaño"
 
 #: ../src/extension/internal/filter/snow.h:40
 msgid "When the weather outside is frightening..."
@@ -3913,9 +3881,9 @@ msgid "Paint your object with zebra stripes"
 msgstr ""
 
 #: ../src/extension/internal/gdkpixbuf-input.cpp:114
-#, c-format
+#, fuzzy, c-format
 msgid "%s GDK pixbuf Input"
-msgstr ""
+msgstr "Entrada de SVG de AI"
 
 #: ../src/extension/internal/gimpgrad.cpp:274
 msgid "GIMP Gradients"
@@ -3929,7 +3897,8 @@ msgstr "Degradado de GIMP (*.ggr)"
 msgid "Gradients used in GIMP"
 msgstr "Degradados usados en GIMP"
 
-#: ../src/extension/internal/grid.cpp:192 ../src/ui/widget/panel.cpp:122
+#: ../src/extension/internal/grid.cpp:192
+#: ../src/ui/widget/panel.cpp:122
 msgid "Grid"
 msgstr "Reixa"
 
@@ -3940,22 +3909,25 @@ msgstr "Ancho da Liña"
 #: ../src/extension/internal/grid.cpp:195
 #, fuzzy
 msgid "Horizontal Spacing"
-msgstr "Espacio Horizontal"
+msgstr "Establecer espacio:"
 
 #: ../src/extension/internal/grid.cpp:196
 #, fuzzy
 msgid "Vertical Spacing"
-msgstr "Espacio Vertical"
+msgstr "Establecer espacio:"
 
-#: ../src/extension/internal/grid.cpp:202 ../share/extensions/eqtexsvg.inx.h:3
-#: ../share/extensions/funcplot.inx.h:12 ../share/extensions/gears.inx.h:5
+#: ../src/extension/internal/grid.cpp:202
+#: ../share/extensions/eqtexsvg.inx.h:3
+#: ../share/extensions/funcplot.inx.h:12
+#: ../share/extensions/gears.inx.h:5
 #: ../share/extensions/grid_cartesian.inx.h:15
 #: ../share/extensions/grid_polar.inx.h:18
 #: ../share/extensions/lindenmayer.inx.h:11
 #: ../share/extensions/polyhedron_3d.inx.h:32
 #: ../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/triangle.inx.h:10
 #, fuzzy
 msgid "Render"
@@ -3967,7 +3939,7 @@ msgstr ""
 
 #: ../src/extension/internal/latex-pstricks.cpp:347
 msgid "LaTeX Print"
-msgstr ""
+msgstr "Impresión LaTeX"
 
 #: ../src/extension/internal/latex-pstricks-out.cpp:106
 msgid "LaTeX Output"
@@ -3978,8 +3950,9 @@ msgid "LaTeX With PSTricks macros (*.tex)"
 msgstr "LaTeX con macros PSTricks (*.tex)"
 
 #: ../src/extension/internal/latex-pstricks-out.cpp:112
+#, fuzzy
 msgid "LaTeX PSTricks File"
-msgstr ""
+msgstr "LaTeX con macros PSTricks (*.tex)"
 
 #: ../src/extension/internal/odf.cpp:2424
 msgid "OpenDocument Drawing Output"
@@ -4005,13 +3978,12 @@ msgid "Print properties"
 msgstr "Propiedades de impresión"
 
 #: ../src/extension/internal/pdf-cairo.cpp:149
+#, fuzzy
 msgid "Print using PDF operators"
-msgstr ""
+msgstr "Imprimir usando os operadores de PostScript"
 
 #: ../src/extension/internal/pdf-cairo.cpp:151
-msgid ""
-"Use PDF vector operators. The resulting image is usually smaller in file "
-"size and can be arbitrarily scaled, but patterns will be lost."
+msgid "Use PDF vector operators. The resulting image is usually smaller in file size and can be arbitrarily scaled, but patterns will be lost."
 msgstr ""
 
 #: ../src/extension/internal/pdf-cairo.cpp:156
@@ -4021,10 +3993,7 @@ msgstr "Imprimir coma mapa de bits"
 
 #: ../src/extension/internal/pdf-cairo.cpp:158
 #: ../src/extension/internal/ps.cpp:178
-msgid ""
-"Print 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."
+msgid "Print 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 ""
 
 #: ../src/extension/internal/pdf-cairo.cpp:172
@@ -4054,60 +4023,62 @@ msgstr ""
 
 #: ../src/extension/internal/pdf-cairo.cpp:1060
 msgid "PDF Print"
-msgstr ""
+msgstr "Impresión PDF"
 
 #. TRANSLATORS: The following are document crop settings for PDF import
 #. more info: http://www.acrobatusers.com/tech_corners/javascript_corner/tips/2006/page_bounds/
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:56
+#, fuzzy
 msgid "media box"
-msgstr ""
+msgstr "Caixa de contorno"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:57
+#, fuzzy
 msgid "crop box"
-msgstr ""
+msgstr "Caixa de contorno"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:58
+#, fuzzy
 msgid "trim box"
-msgstr ""
+msgstr "Caixa de contorno"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:59
+#, fuzzy
 msgid "bleed box"
-msgstr ""
+msgstr "Caixa de contorno"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:60
+#, fuzzy
 msgid "art box"
-msgstr ""
+msgstr "Caixa de contorno"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:72
 #, fuzzy
 msgid "Select page:"
-msgstr "Seleccionar"
+msgstr "Configuración de páxina"
 
 #. Display total number of pages
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:86
-#, c-format
+#, fuzzy, c-format
 msgid "out of %i"
-msgstr ""
+msgstr "<b>Esvaecer:</b>"
 
 #. Crop settings
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:92
 #, fuzzy
 msgid "Clip to:"
-msgstr "Cor_tar"
+msgstr "<b>Ligazón</b> a %s"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:104
-#, fuzzy
 msgid "Page settings"
-msgstr "Configuración do escritorio"
+msgstr "Configuración de páxina"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:106
 msgid "Precision of approximating gradient meshes:"
 msgstr ""
 
 #: ../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."
+msgid "<b>Note</b>: setting the precision too high may result in a large SVG file and slow performance."
 msgstr ""
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:112
@@ -4120,13 +4091,12 @@ msgstr "Agrupar"
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:116
 #, fuzzy
 msgid "Text handling:"
-msgstr "Establecer espacio:"
+msgstr "Texto horizontal"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:118
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:119
-#, fuzzy
 msgid "Import text as text"
-msgstr "Converte-lo texto en camiño"
+msgstr "Importar o texto coma texto"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:122
 #, fuzzy
@@ -4134,14 +4104,12 @@ msgid "Embed images"
 msgstr "Buscar imaxes"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:125
-#, fuzzy
 msgid "Import settings"
-msgstr "Configuración do documento"
+msgstr "Configuración de importación"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:242
-#, fuzzy
 msgid "PDF Import Settings"
-msgstr "Configuración do documento"
+msgstr "Configuración de importación de PDF"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:382
 msgid "pdfinput|medium"
@@ -4158,33 +4126,28 @@ msgid "very fine"
 msgstr "Recheo non asignado"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:739
-#, fuzzy
 msgid "PDF Input"
-msgstr "Entrada de DXF"
+msgstr "Entrada de PDF"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:744
-#, fuzzy
 msgid "Adobe PDF (*.pdf)"
-msgstr "DXF de AutoCAD (*.dxf)"
+msgstr "Adobe PDF (*.pdf)"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:745
 msgid "Adobe Portable Document Format"
-msgstr ""
+msgstr "Adobe Portable Document Format"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:752
-#, fuzzy
 msgid "AI Input"
 msgstr "Entrada de AI"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:757
-#, fuzzy
 msgid "Adobe Illustrator 9.0 and above (*.ai)"
-msgstr "Adobe Illustrator (*.ai)"
+msgstr "Adobe Illustrator 9.0 e superior (*.ai)"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:758
-#, fuzzy
 msgid "Open files saved in Adobe Illustrator 9.0 and newer versions"
-msgstr "Abrir ficheiros gardados con Adobe Illustrator"
+msgstr "Abrir ficheiros gardados con Adobe Illustrator 9.0 e versións máis novas"
 
 #: ../src/extension/internal/pov-out.cpp:666
 msgid "PovRay Output"
@@ -4195,37 +4158,33 @@ msgid "PovRay (*.pov) (export splines)"
 msgstr ""
 
 #: ../src/extension/internal/pov-out.cpp:672
+#, fuzzy
 msgid "PovRay Raytracer File"
-msgstr ""
+msgstr "Ficheiro de Encapsulated Postscript"
 
 #: ../src/extension/internal/ps.cpp:147
-#, fuzzy
 msgid "Print Configuration"
-msgstr "Destino da Impresión"
+msgstr "Configuración de impresión"
 
 #: ../src/extension/internal/ps.cpp:169
 msgid "Print using PostScript operators"
 msgstr "Imprimir usando os operadores de PostScript"
 
 #: ../src/extension/internal/ps.cpp:171
-msgid ""
-"Use PostScript vector operators. The resulting image is usually smaller in "
-"file size and can be arbitrarily scaled, but alpha transparency and patterns "
-"will be lost."
+msgid "Use PostScript vector operators. The resulting image is usually smaller in file size and can be arbitrarily scaled, but alpha transparency and patterns will be lost."
 msgstr ""
 
 #: ../src/extension/internal/ps.cpp:1753
 msgid "Postscript Print"
-msgstr ""
+msgstr "Impresión Postscript"
 
 #: ../src/extension/internal/ps-out.cpp:82
 msgid "Postscript Output"
 msgstr "Saída de Postscript"
 
 #: ../src/extension/internal/ps-out.cpp:89
-#, fuzzy
 msgid "PostScript (*.ps)"
-msgstr "Postscript (*.ps)"
+msgstr "PostScript (*.ps)"
 
 #: ../src/extension/internal/svg.cpp:55
 msgid "SVG Input"
@@ -4269,7 +4228,8 @@ msgstr "Formato Scalable Vector Graphics tal e coma o definiu o W3C"
 msgid "SVGZ Input"
 msgstr "Entrada de SVGZ"
 
-#: ../src/extension/internal/svgz.cpp:53 ../src/extension/internal/svgz.cpp:67
+#: ../src/extension/internal/svgz.cpp:53
+#: ../src/extension/internal/svgz.cpp:67
 #: ../share/extensions/svgz_input.inx.h:1
 #: ../share/extensions/svgz_output.inx.h:1
 msgid "Compressed Inkscape SVG (*.svgz)"
@@ -4279,7 +4239,8 @@ msgstr "SVG de Inkscape Comprimido (*.svgz)"
 msgid "SVG file format compressed with GZip"
 msgstr "Ficheiro co formato SVG comprimido con GZip"
 
-#: ../src/extension/internal/svgz.cpp:62 ../src/extension/internal/svgz.cpp:76
+#: ../src/extension/internal/svgz.cpp:62
+#: ../src/extension/internal/svgz.cpp:76
 #: ../share/extensions/svgz_output.inx.h:3
 msgid "SVGZ Output"
 msgstr "Saída de SVGZ"
@@ -4300,27 +4261,24 @@ msgstr "Formato Scalable Vector Graphics comprimido con GZip"
 
 #: ../src/extension/internal/win32.cpp:491
 msgid "Windows 32-bit Print"
-msgstr ""
+msgstr "Impresión de Windows 32-bits"
 
 #: ../src/extension/internal/wpg-input.cpp:102
-#, fuzzy
 msgid "WPG Input"
-msgstr "Entrada de SVG"
+msgstr "Entrada de WPG"
 
 #: ../src/extension/internal/wpg-input.cpp:107
-#, fuzzy
 msgid "WordPerfect Graphics (*.wpg)"
-msgstr "Scalable Vector Graphics (*.svg)"
+msgstr "WordPerfect Graphics (*.wpg)"
 
 #: ../src/extension/internal/wpg-input.cpp:108
-#, fuzzy
 msgid "Vector graphics format used by Corel WordPerfect"
-msgstr "Formato Scalable Vector Graphics tal e coma o definiu o W3C"
+msgstr "Formato de imaxes vectoriais usado por Corel WordPerfect"
 
 #: ../src/extension/prefdialog.cpp:237
 #, fuzzy
 msgid "Live Preview"
-msgstr "Previsualización"
+msgstr "Previsualiza-la impresión do documento"
 
 #: ../src/extension/prefdialog.cpp:237
 msgid "Controls whether the effect settings are rendered live on canvas"
@@ -4332,9 +4290,7 @@ msgstr ""
 #. sp_ui_error_dialog(_("Format autodetect failed. The file is being opened as SVG."));
 #: ../src/extension/system.cpp:103
 msgid "Format autodetect failed. The file is being opened as SVG."
-msgstr ""
-"Fallo ó detectar automáticamente o formato. Vaise abrir o ficheiro coma se "
-"fora SVG."
+msgstr "Fallo ó detectar automáticamente o formato. Vaise abrir o ficheiro coma se fora SVG."
 
 #. TRANSLATORS: default.svg is localizable - this is the name of the default document
 #. template. This way you can localize the default pagesize, translate the name of
@@ -4344,7 +4300,8 @@ msgstr ""
 msgid "default.svg"
 msgstr "default.svg"
 
-#: ../src/file.cpp:225 ../src/file.cpp:993
+#: ../src/file.cpp:225
+#: ../src/file.cpp:993
 #, c-format
 msgid "Failed to load the requested file %s"
 msgstr "Erro ó cargar o ficheiro solicitado %s"
@@ -4356,15 +4313,17 @@ msgstr ""
 #: ../src/file.cpp:256
 #, c-format
 msgid "Changes will be lost!  Are you sure you want to reload document %s?"
-msgstr ""
+msgstr "Vanse perder os cambios! Estás seguro de que desexas recargar o documento %s?"
 
 #: ../src/file.cpp:285
+#, fuzzy
 msgid "Document reverted."
-msgstr ""
+msgstr "Novo documento %d"
 
 #: ../src/file.cpp:287
+#, fuzzy
 msgid "Document not reverted."
-msgstr ""
+msgstr "Documento sen gardar."
 
 #: ../src/file.cpp:437
 msgid "Select file to open"
@@ -4388,12 +4347,11 @@ msgstr "Non hai definicións sen usar en &lt;defs&gt;."
 
 #: ../src/file.cpp:563
 #, c-format
-msgid ""
-"No Inkscape extension found to save document (%s).  This may have been "
-"caused by an unknown filename extension."
+msgid "No Inkscape extension found to save document (%s).  This may have been caused by an unknown filename extension."
 msgstr ""
 
-#: ../src/file.cpp:564 ../src/file.cpp:572
+#: ../src/file.cpp:564
+#: ../src/file.cpp:572
 msgid "Document not saved."
 msgstr "Documento sen gardar."
 
@@ -4406,20 +4364,21 @@ msgstr "Non se puido gardar o ficheiro %s."
 msgid "Document saved."
 msgstr "Documento gardado."
 
-#: ../src/file.cpp:721 ../src/file.cpp:1118 ../src/file.cpp:1235
+#: ../src/file.cpp:721
+#: ../src/file.cpp:1118
+#: ../src/file.cpp:1235
 #, c-format
 msgid "drawing%s"
-msgstr ""
+msgstr "debuxo%s"
 
 #: ../src/file.cpp:727
 #, c-format
 msgid "drawing-%d%s"
-msgstr ""
+msgstr "debuxo-%d%s"
 
 #: ../src/file.cpp:746
-#, fuzzy
 msgid "Select file to save a copy to"
-msgstr "Seleccione o ficheiro no que se vai gardar"
+msgstr "Seleccione o ficheiro no que se vai gardar unha copia"
 
 #: ../src/file.cpp:748
 msgid "Select file to save to"
@@ -4430,12 +4389,10 @@ msgid "No changes need to be saved."
 msgstr "Non hai cambios que gardar."
 
 #: ../src/file.cpp:836
-#, fuzzy
 msgid "Saving document..."
-msgstr "Gardar o documento"
+msgstr "Gardando o documento..."
 
 #: ../src/file.cpp:990
-#, fuzzy
 msgid "Import"
 msgstr "Importar"
 
@@ -4443,33 +4400,32 @@ msgstr "Importar"
 msgid "Select file to import"
 msgstr "Seleccione o ficheiro que desexa importar"
 
-#: ../src/file.cpp:1140 ../src/file.cpp:1250
+#: ../src/file.cpp:1140
+#: ../src/file.cpp:1250
 msgid "Select file to export to"
 msgstr "Seleccione o ficheiro no que se vai exportar"
 
 #: ../src/file.cpp:1277
 msgid "Error saving a temporary copy"
-msgstr ""
+msgstr "Produciuse un erro ó gardar unha copia temporal"
 
 #: ../src/file.cpp:1296
+#, fuzzy
 msgid "Open Clip Art Login"
-msgstr ""
+msgstr "Nome de usuario de Open Clip Art Library:"
 
 #: ../src/file.cpp:1317
-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 you "
-"didn't forget to choose a license."
+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 you didn't forget to choose a license."
 msgstr ""
 
 #: ../src/file.cpp:1338
-#, fuzzy
 msgid "Document exported..."
-msgstr "Propiedades do D_ocumento..."
+msgstr "Documento exportado..."
 
-#: ../src/file.cpp:1366 ../src/verbs.cpp:2182
+#: ../src/file.cpp:1366
+#: ../src/verbs.cpp:2182
 msgid "Import From Open Clip Art Library"
-msgstr ""
+msgstr "Importar dende Open Clip Art Library"
 
 #: ../src/filter-enums.cpp:20
 #, fuzzy
@@ -4479,11 +4435,12 @@ msgstr "Azul"
 #: ../src/filter-enums.cpp:21
 #, fuzzy
 msgid "Color Matrix"
-msgstr "Cor do recheo"
+msgstr "Cor inicial:"
 
 #: ../src/filter-enums.cpp:22
+#, fuzzy
 msgid "Component Transfer"
-msgstr ""
+msgstr "Elixa o compoñente Vermello da cor"
 
 #: ../src/filter-enums.cpp:23
 #, fuzzy
@@ -4506,7 +4463,8 @@ msgstr ""
 msgid "Flood"
 msgstr ""
 
-#: ../src/filter-enums.cpp:29 ../src/selection-describer.cpp:53
+#: ../src/filter-enums.cpp:29
+#: ../src/selection-describer.cpp:53
 msgid "Image"
 msgstr "Imaxe"
 
@@ -4528,34 +4486,35 @@ msgstr ""
 msgid "Tile"
 msgstr "Título"
 
-#: ../src/filter-enums.cpp:35 ../src/filter-enums.cpp:118
+#: ../src/filter-enums.cpp:35
+#: ../src/filter-enums.cpp:118
 msgid "Turbulence"
 msgstr ""
 
 #: ../src/filter-enums.cpp:40
 #, fuzzy
 msgid "Source Graphic"
-msgstr "Fonte"
+msgstr "Fonte da Imaxe"
 
 #: ../src/filter-enums.cpp:41
 #, fuzzy
 msgid "Source Alpha"
-msgstr "Fonte"
+msgstr " alfa %.3g"
 
 #: ../src/filter-enums.cpp:42
 #, fuzzy
 msgid "Background Image"
-msgstr "Fondo"
+msgstr "Imaxe de Fondo"
 
 #: ../src/filter-enums.cpp:43
 #, fuzzy
 msgid "Background Alpha"
-msgstr "Fondo"
+msgstr " alfa %.3g"
 
 #: ../src/filter-enums.cpp:44
 #, fuzzy
 msgid "Fill Paint"
-msgstr "R_echeo e Trazo"
+msgstr "_Pintar o trazo"
 
 #: ../src/filter-enums.cpp:45
 #, fuzzy
@@ -4565,7 +4524,7 @@ msgstr "_Pintar o trazo"
 #. TRANSLATORS: This is a context string, only put the word "Normal" in your translation
 #: ../src/filter-enums.cpp:52
 msgid "filterBlendMode|Normal"
-msgstr ""
+msgstr "Normal"
 
 #: ../src/filter-enums.cpp:53
 msgid "Multiply"
@@ -4577,14 +4536,12 @@ msgid "Screen"
 msgstr "Verde"
 
 #: ../src/filter-enums.cpp:55
-#, fuzzy
 msgid "Darken"
-msgstr "Contagotas"
+msgstr "Escurecer"
 
 #: ../src/filter-enums.cpp:56
-#, fuzzy
 msgid "Lighten"
-msgstr "Brillo"
+msgstr "Aclarar"
 
 #: ../src/filter-enums.cpp:62
 #, fuzzy
@@ -4599,14 +4556,16 @@ msgstr "Saturación"
 #: ../src/filter-enums.cpp:64
 #, fuzzy
 msgid "Hue Rotate"
-msgstr "Rotar"
+msgstr "Rotar os nodos"
 
 #: ../src/filter-enums.cpp:65
+#, fuzzy
 msgid "Luminance to Alpha"
-msgstr ""
+msgstr "Obxecto a camiño"
 
 #. File
-#: ../src/filter-enums.cpp:71 ../src/verbs.cpp:2159
+#: ../src/filter-enums.cpp:71
+#: ../src/verbs.cpp:2159
 msgid "Default"
 msgstr "Predeterminado"
 
@@ -4618,12 +4577,12 @@ msgstr "Metro"
 #: ../src/filter-enums.cpp:73
 #, fuzzy
 msgid "In"
-msgstr "Polgada"
+msgstr " na %s"
 
 #: ../src/filter-enums.cpp:74
 #, fuzzy
 msgid "Out"
-msgstr "Saída"
+msgstr "<b>Esvaecer:</b>"
 
 #: ../src/filter-enums.cpp:75
 #, fuzzy
@@ -4639,14 +4598,12 @@ msgid "Arithmetic"
 msgstr ""
 
 #: ../src/filter-enums.cpp:83
-#, fuzzy
 msgid "Identity"
-msgstr "Identificador"
+msgstr "Identidade"
 
 #: ../src/filter-enums.cpp:84
-#, fuzzy
 msgid "Table"
-msgstr "absoluto"
+msgstr "Táboa"
 
 #: ../src/filter-enums.cpp:85
 #, fuzzy
@@ -4654,15 +4611,15 @@ msgid "Discrete"
 msgstr "Distribuír"
 
 #: ../src/filter-enums.cpp:86
-#, fuzzy
 msgid "Linear"
-msgstr "Licenza"
+msgstr "Lineal"
 
 #: ../src/filter-enums.cpp:87
 msgid "Gamma"
-msgstr ""
+msgstr "Gamma"
 
-#: ../src/filter-enums.cpp:93 ../src/selection-chemistry.cpp:260
+#: ../src/filter-enums.cpp:93
+#: ../src/selection-chemistry.cpp:260
 #: ../src/widgets/gradient-selector.cpp:134
 msgid "Duplicate"
 msgstr "Duplicar"
@@ -4671,31 +4628,34 @@ msgstr "Duplicar"
 msgid "Wrap"
 msgstr ""
 
-#: ../src/filter-enums.cpp:101 ../src/flood-context.cpp:271
+#: ../src/filter-enums.cpp:101
+#: ../src/flood-context.cpp:271
 #: ../src/widgets/sp-color-icc-selector.cpp:233
 #: ../src/widgets/sp-color-scales.cpp:398
 #: ../src/widgets/sp-color-scales.cpp:399
 msgid "Red"
 msgstr "Vermello"
 
-#: ../src/filter-enums.cpp:102 ../src/flood-context.cpp:272
+#: ../src/filter-enums.cpp:102
+#: ../src/flood-context.cpp:272
 #: ../src/widgets/sp-color-icc-selector.cpp:233
 #: ../src/widgets/sp-color-scales.cpp:401
 #: ../src/widgets/sp-color-scales.cpp:402
 msgid "Green"
 msgstr "Verde"
 
-#: ../src/filter-enums.cpp:103 ../src/flood-context.cpp:273
+#: ../src/filter-enums.cpp:103
+#: ../src/flood-context.cpp:273
 #: ../src/widgets/sp-color-icc-selector.cpp:233
 #: ../src/widgets/sp-color-scales.cpp:404
 #: ../src/widgets/sp-color-scales.cpp:405
 msgid "Blue"
 msgstr "Azul"
 
-#: ../src/filter-enums.cpp:104 ../src/flood-context.cpp:277
-#, fuzzy
+#: ../src/filter-enums.cpp:104
+#: ../src/flood-context.cpp:277
 msgid "Alpha"
-msgstr "Alfa:"
+msgstr "Alfa"
 
 #: ../src/filter-enums.cpp:110
 #, fuzzy
@@ -4710,47 +4670,49 @@ msgstr "Data"
 #: ../src/filter-enums.cpp:117
 #, fuzzy
 msgid "Fractal Noise"
-msgstr "Recheo fractal"
+msgstr "Engadir Ruído"
 
 #: ../src/filter-enums.cpp:124
+#, fuzzy
 msgid "Distant Light"
-msgstr ""
+msgstr "Menos Luz"
 
 #: ../src/filter-enums.cpp:125
 #, fuzzy
 msgid "Point Light"
-msgstr "Aliñar á dereita"
+msgstr "Menos Luz"
 
 #: ../src/filter-enums.cpp:126
+#, fuzzy
 msgid "Spot Light"
-msgstr ""
+msgstr "Menos Luz"
 
 #: ../src/flood-context.cpp:270
-#, fuzzy
 msgid "Visible Colors"
-msgstr "Visible"
+msgstr "Cores visibles"
 
-#: ../src/flood-context.cpp:276 ../src/widgets/sp-color-icc-selector.cpp:236
+#: ../src/flood-context.cpp:276
+#: ../src/widgets/sp-color-icc-selector.cpp:236
 #: ../src/widgets/sp-color-scales.cpp:430
-#: ../src/widgets/sp-color-scales.cpp:431 ../src/widgets/toolbox.cpp:3390
+#: ../src/widgets/sp-color-scales.cpp:431
+#: ../src/widgets/toolbox.cpp:3390
 #: ../share/extensions/color_randomize.inx.h:3
 msgid "Lightness"
 msgstr "Brillo"
 
-#: ../src/flood-context.cpp:289 ../src/ui/dialog/inkscape-preferences.cpp:968
-#, fuzzy
+#: ../src/flood-context.cpp:289
+#: ../src/ui/dialog/inkscape-preferences.cpp:968
 msgid "Small"
-msgstr "pequeno"
+msgstr "Pequeno"
 
-#: ../src/flood-context.cpp:290 ../src/ui/dialog/inkscape-preferences.cpp:968
-#, fuzzy
+#: ../src/flood-context.cpp:290
+#: ../src/ui/dialog/inkscape-preferences.cpp:968
 msgid "Medium"
-msgstr "mediana"
+msgstr "Medio"
 
 #: ../src/flood-context.cpp:291
-#, fuzzy
 msgid "Large"
-msgstr "grande"
+msgstr "Grande"
 
 #: ../src/flood-context.cpp:491
 msgid "<b>Too much inset</b>, the result is empty."
@@ -4758,10 +4720,8 @@ msgstr ""
 
 #: ../src/flood-context.cpp:531
 #, 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."
+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] ""
 msgstr[1] ""
 
@@ -4772,95 +4732,107 @@ msgid_plural "Area filled, path with <b>%d</b> nodes created."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../src/flood-context.cpp:807 ../src/flood-context.cpp:1121
+#: ../src/flood-context.cpp:807
+#: ../src/flood-context.cpp:1121
 msgid "<b>Area is not bounded</b>, cannot fill."
 msgstr ""
 
 #: ../src/flood-context.cpp:1126
-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."
+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 ""
 
-#: ../src/flood-context.cpp:1144 ../src/flood-context.cpp:1304
+#: ../src/flood-context.cpp:1144
+#: ../src/flood-context.cpp:1304
 #, fuzzy
 msgid "Fill bounded area"
-msgstr "R_echeo e Trazo"
+msgstr "Encher a zona        "
 
 #: ../src/flood-context.cpp:1164
-#, fuzzy
 msgid "Set style on object"
-msgstr "Patrón a obxectos"
+msgstr "Definir o estilo do obxecto"
 
 #: ../src/flood-context.cpp:1223
 msgid "<b>Draw over</b> areas to add to fill, hold <b>Alt</b> for touch fill"
 msgstr ""
 
-#: ../src/gradient-context.cpp:132 ../src/gradient-drag.cpp:74
+#: ../src/gradient-context.cpp:132
+#: ../src/gradient-drag.cpp:74
+#, fuzzy
 msgid "Linear gradient <b>start</b>"
-msgstr ""
+msgstr "Recheo de degradado linear"
 
 #. POINT_LG_BEGIN
-#: ../src/gradient-context.cpp:133 ../src/gradient-drag.cpp:75
+#: ../src/gradient-context.cpp:133
+#: ../src/gradient-drag.cpp:75
+#, fuzzy
 msgid "Linear gradient <b>end</b>"
-msgstr ""
+msgstr "Recheo de degradado linear"
 
-#: ../src/gradient-context.cpp:134 ../src/gradient-drag.cpp:76
+#: ../src/gradient-context.cpp:134
+#: ../src/gradient-drag.cpp:76
 #, fuzzy
 msgid "Linear gradient <b>mid stop</b>"
-msgstr "Trazo de degradado linear"
+msgstr "Engadir outra fase de control do degradado"
 
-#: ../src/gradient-context.cpp:135 ../src/gradient-drag.cpp:77
+#: ../src/gradient-context.cpp:135
+#: ../src/gradient-drag.cpp:77
+#, fuzzy
 msgid "Radial gradient <b>center</b>"
-msgstr ""
+msgstr "Recheo de degradado radial"
 
-#: ../src/gradient-context.cpp:136 ../src/gradient-context.cpp:137
-#: ../src/gradient-drag.cpp:78 ../src/gradient-drag.cpp:79
+#: ../src/gradient-context.cpp:136
+#: ../src/gradient-context.cpp:137
+#: ../src/gradient-drag.cpp:78
+#: ../src/gradient-drag.cpp:79
+#, fuzzy
 msgid "Radial gradient <b>radius</b>"
-msgstr ""
+msgstr "Recheo de degradado radial"
 
-#: ../src/gradient-context.cpp:138 ../src/gradient-drag.cpp:80
+#: ../src/gradient-context.cpp:138
+#: ../src/gradient-drag.cpp:80
+#, fuzzy
 msgid "Radial gradient <b>focus</b>"
-msgstr ""
+msgstr "Recheo de degradado radial"
 
 #. POINT_RG_FOCUS
-#: ../src/gradient-context.cpp:139 ../src/gradient-context.cpp:140
-#: ../src/gradient-drag.cpp:81 ../src/gradient-drag.cpp:82
+#: ../src/gradient-context.cpp:139
+#: ../src/gradient-context.cpp:140
+#: ../src/gradient-drag.cpp:81
+#: ../src/gradient-drag.cpp:82
 #, fuzzy
 msgid "Radial gradient <b>mid stop</b>"
-msgstr "Trazo de degradado linear"
+msgstr "Engadir outra fase de control do degradado"
 
 #. TRANSLATORS: %s will be substituted with the point name (see previous messages); This is part of a compound message
 #: ../src/gradient-context.cpp:162
-#, fuzzy, c-format
+#, c-format
 msgid "%s selected"
-msgstr "Último seleccionado"
+msgstr "seleccionouse %s"
 
 #. TRANSLATORS: Mind the space in front. This is part of a compound message
-#: ../src/gradient-context.cpp:164 ../src/gradient-context.cpp:173
+#: ../src/gradient-context.cpp:164
+#: ../src/gradient-context.cpp:173
 #, fuzzy, c-format
 msgid " out of %d gradient handle"
 msgid_plural " out of %d gradient handles"
-msgstr[0] "Non se seleccionou ningún degradado"
+msgstr[0] "Degradado de GIMP (*.ggr)"
 msgstr[1] "Non se seleccionou ningún degradado"
 
-# [*] Revisar Layout
 #. TRANSLATORS: Mind the space in front. (Refers to gradient handles selected). This is part of a compound message
-#: ../src/gradient-context.cpp:165 ../src/gradient-context.cpp:174
+#: ../src/gradient-context.cpp:165
+#: ../src/gradient-context.cpp:174
 #: ../src/gradient-context.cpp:181
-#, fuzzy, c-format
+#, c-format
 msgid " on %d selected object"
 msgid_plural " on %d selected objects"
-msgstr[0] "Edita-lo equipamento dos obxectos seleccionados"
-msgstr[1] "Edita-lo equipamento dos obxectos seleccionados"
+msgstr[0] " en %d obxecto seleccionado"
+msgstr[1] " en %d obxectos seleccionados"
 
 #. TRANSLATORS: This is a part of a compound message (out of two more indicating: grandint handle count & object count)
 #: ../src/gradient-context.cpp:171
 #, 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] ""
 msgstr[1] ""
 
@@ -4876,26 +4848,23 @@ msgstr[1] ""
 #: ../src/gradient-context.cpp:186
 #, 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"
+msgid_plural "<b>No</b> gradient handles selected out of %d on %d selected objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../src/gradient-context.cpp:385 ../src/gradient-context.cpp:478
+#: ../src/gradient-context.cpp:385
+#: ../src/gradient-context.cpp:478
 #: ../src/widgets/gradient-vector.cpp:735
-#, fuzzy
 msgid "Add gradient stop"
-msgstr "Engadir novo degradado"
+msgstr "Engadir unha fase ó degradado"
 
 #: ../src/gradient-context.cpp:453
-#, fuzzy
 msgid "Simplify gradient"
-msgstr "Degradado radial"
+msgstr "Simplificar o degradado"
 
 #: ../src/gradient-context.cpp:529
-#, fuzzy
 msgid "Create default gradient"
-msgstr "Crear degradado linear"
+msgstr "Crear degradado predeterminado"
 
 #: ../src/gradient-context.cpp:584
 msgid "<b>Draw around</b> handles to select them"
@@ -4910,9 +4879,8 @@ msgid "<b>Shift</b>: draw gradient around the starting point"
 msgstr ""
 
 #: ../src/gradient-context.cpp:803
-#, fuzzy
 msgid "Invert gradient"
-msgstr "Degradado linear"
+msgstr "Inverter o degradado"
 
 #: ../src/gradient-context.cpp:919
 #, c-format
@@ -4928,75 +4896,67 @@ msgstr "Seleccione os <b>obxectos</b> nos que se vai crear o degradado"
 #: ../src/gradient-drag.cpp:573
 #, fuzzy
 msgid "Merge gradient handles"
-msgstr "Recheo de degradado linear"
+msgstr "Degradado de GIMP (*.ggr)"
 
 #: ../src/gradient-drag.cpp:895
-#, fuzzy
 msgid "Move gradient handle"
-msgstr "Non se seleccionou ningún degradado"
+msgstr "Mover a asa do degradado"
 
-#: ../src/gradient-drag.cpp:948 ../src/widgets/gradient-vector.cpp:767
-#, fuzzy
+#: ../src/gradient-drag.cpp:948
+#: ../src/widgets/gradient-vector.cpp:767
 msgid "Delete gradient stop"
-msgstr "Borrar fase"
+msgstr "Eliminar fase do degradado"
 
 #: ../src/gradient-drag.cpp:1112
 #, 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"
+msgid "%s %d for: %s%s; drag with <b>Ctrl</b> to snap offset; click with <b>Ctrl+Alt</b> to delete stop"
 msgstr ""
 
-#: ../src/gradient-drag.cpp:1116 ../src/gradient-drag.cpp:1123
+#: ../src/gradient-drag.cpp:1116
+#: ../src/gradient-drag.cpp:1123
 msgid " (stroke)"
-msgstr ""
+msgstr " (trazo)"
 
 #: ../src/gradient-drag.cpp:1120
 #, 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"
+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 ""
 
 #: ../src/gradient-drag.cpp:1128
-msgid ""
-"Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to "
-"separate focus"
+msgid "Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to separate focus"
 msgstr ""
 
 #: ../src/gradient-drag.cpp:1131
 #, 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"
+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] ""
 msgstr[1] ""
 
 #: ../src/gradient-drag.cpp:1806
 #, fuzzy
 msgid "Move gradient handle(s)"
-msgstr "Non se seleccionou ningún degradado"
+msgstr "Degradado de GIMP (*.ggr)"
 
 #: ../src/gradient-drag.cpp:1842
 #, fuzzy
 msgid "Move gradient mid stop(s)"
-msgstr "Borrar fase"
+msgstr "Engadir outra fase de control do degradado"
 
 #: ../src/gradient-drag.cpp:2130
 #, fuzzy
 msgid "Delete gradient stop(s)"
-msgstr "Borrar fase"
+msgstr "Degradado de GIMP (*.ggr)"
 
 #: ../src/helper/units.cpp:37
 msgid "Unit"
 msgstr "Unidade"
 
 #. Add the units menu.
-#: ../src/helper/units.cpp:37 ../src/widgets/select-toolbar.cpp:490
-#: ../src/widgets/toolbox.cpp:1280 ../src/widgets/toolbox.cpp:2457
+#: ../src/helper/units.cpp:37
+#: ../src/widgets/select-toolbar.cpp:490
+#: ../src/widgets/toolbox.cpp:1280
+#: ../src/widgets/toolbox.cpp:2457
 #: ../src/widgets/toolbox.cpp:5758
 msgid "Units"
 msgstr "Unidades"
@@ -5005,11 +4965,13 @@ msgstr "Unidades"
 msgid "Point"
 msgstr "Punto"
 
-#: ../src/helper/units.cpp:38 ../src/ui/widget/selected-style.cpp:287
+#: ../src/helper/units.cpp:38
+#: ../src/ui/widget/selected-style.cpp:287
 msgid "pt"
 msgstr "pt"
 
-#: ../src/helper/units.cpp:38 ../share/extensions/perfectboundcover.inx.h:16
+#: ../src/helper/units.cpp:38
+#: ../share/extensions/perfectboundcover.inx.h:16
 msgid "Points"
 msgstr "Puntos"
 
@@ -5038,7 +5000,8 @@ msgstr ""
 msgid "Pixel"
 msgstr "Píxel"
 
-#: ../src/helper/units.cpp:40 ../src/ui/dialog/inkscape-preferences.cpp:198
+#: ../src/helper/units.cpp:40
+#: ../src/ui/dialog/inkscape-preferences.cpp:198
 #: ../src/ui/dialog/inkscape-preferences.cpp:202
 #: ../src/ui/dialog/inkscape-preferences.cpp:205
 #: ../src/ui/widget/selected-style.cpp:283
@@ -5054,11 +5017,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 "Porcentaxe"
 
-#: ../src/helper/units.cpp:42 ../src/ui/dialog/inkscape-preferences.cpp:218
+#: ../src/helper/units.cpp:42
+#: ../src/ui/dialog/inkscape-preferences.cpp:218
 msgid "%"
 msgstr "%"
 
@@ -5070,7 +5035,8 @@ msgstr "Porcentaxes"
 msgid "Millimeter"
 msgstr "Milímetro"
 
-#: ../src/helper/units.cpp:43 ../src/ui/widget/selected-style.cpp:291
+#: ../src/helper/units.cpp:43
+#: ../src/ui/widget/selected-style.cpp:291
 msgid "mm"
 msgstr "mm"
 
@@ -5108,26 +5074,25 @@ msgid "Inch"
 msgstr "Polgada"
 
 #: ../src/helper/units.cpp:46
+#, fuzzy
 msgid "in"
-msgstr ""
+msgstr " na %s"
 
 #: ../src/helper/units.cpp:46
 msgid "Inches"
 msgstr "Polgadas"
 
 #: ../src/helper/units.cpp:47
-#, fuzzy
 msgid "Foot"
-msgstr "Fonte"
+msgstr ""
 
 #: ../src/helper/units.cpp:47
 msgid "ft"
 msgstr ""
 
 #: ../src/helper/units.cpp:47
-#, fuzzy
 msgid "Feet"
-msgstr "FreeArt"
+msgstr "Pés"
 
 #. Volatiles do not have default, so there are none here
 #. TRANSLATORS: for info, see http://www.w3.org/TR/REC-CSS2/syndata.html#length-units
@@ -5140,8 +5105,9 @@ msgid "em"
 msgstr ""
 
 #: ../src/helper/units.cpp:50
+#, fuzzy
 msgid "Em squares"
-msgstr ""
+msgstr "Crear rectángulos e cadrados"
 
 # leo
 #. TRANSLATORS: for info, see http://www.w3.org/TR/REC-CSS2/syndata.html#length-units
@@ -5155,19 +5121,21 @@ msgid "ex"
 msgstr ""
 
 #: ../src/helper/units.cpp:52
+#, fuzzy
 msgid "Ex squares"
-msgstr ""
+msgstr "Crear rectángulos e cadrados"
 
 #: ../src/inkscape.cpp:337
 #, fuzzy
 msgid "Autosaving documents..."
-msgstr "Gardar o documento"
+msgstr "Número máximo de documentos recentes:"
 
 #: ../src/inkscape.cpp:405
 msgid "Autosave failed! Could not find inkscape extension to save document."
 msgstr ""
 
-#: ../src/inkscape.cpp:408 ../src/inkscape.cpp:415
+#: ../src/inkscape.cpp:408
+#: ../src/inkscape.cpp:415
 #, fuzzy, c-format
 msgid "Autosave failed! File %s could not be saved."
 msgstr "Non se puido gardar o ficheiro %s."
@@ -5186,9 +5154,7 @@ msgid "Inkscape encountered an internal error and will close now.\n"
 msgstr "Inkscape atopou un erro interno e vaise pechar agora mesmo.\n"
 
 #: ../src/inkscape.cpp:683
-msgid ""
-"Automatic backups of unsaved documents were done to the following "
-"locations:\n"
+msgid "Automatic backups of unsaved documents were done to the following locations:\n"
 msgstr ""
 
 #: ../src/inkscape.cpp:684
@@ -5239,14 +5205,18 @@ msgstr ""
 "Ainda que se vai executar Inkscape, este usará as opcións predeterminadas,\n"
 "e non se ha gardar ningún cambio que se faga nas preferencias."
 
-#: ../src/inkscape.cpp:903 ../src/preferences.cpp:56
+#: ../src/inkscape.cpp:903
+#: ../src/preferences.cpp:56
 #, c-format
 msgid ""
 "%s is not a regular file.\n"
 "%s"
 msgstr ""
+"%s non é un ficheiro normal.\n"
+"%s"
 
-#: ../src/inkscape.cpp:904 ../src/preferences.cpp:57
+#: ../src/inkscape.cpp:904
+#: ../src/preferences.cpp:57
 #, c-format
 msgid ""
 "%s not a valid XML file, or\n"
@@ -5317,85 +5287,89 @@ msgid "Show or hide the statusbar (at the bottom of the window)"
 msgstr "Amosar ou agochar a barra de estado (no fondo da ventá)"
 
 #: ../src/interface.cpp:904
-#, c-format
+#, fuzzy, c-format
 msgid "Verb \"%s\" Unknown"
-msgstr ""
+msgstr "Aplicouse un efecto descoñecido"
 
 #. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
 #: ../src/interface.cpp:1023
-#, c-format
+#, fuzzy, c-format
 msgid "Enter group #%s"
-msgstr ""
+msgstr " no grupo %s (%s)"
 
 #: ../src/interface.cpp:1034
+#, fuzzy
 msgid "Go to parent"
-msgstr ""
+msgstr "Obxecto a camiño"
 
-#: ../src/interface.cpp:1125 ../src/interface.cpp:1210
+#: ../src/interface.cpp:1125
+#: ../src/interface.cpp:1210
 #: ../src/ui/widget/selected-style.cpp:466
 #, fuzzy
 msgid "Drop color"
-msgstr "Copiar cor"
+msgstr "Cor inicial:"
 
 #: ../src/interface.cpp:1164
 #, fuzzy
 msgid "Drop color on gradient"
-msgstr "O degradado non ten fases"
+msgstr "Establecer degradado no trazo"
 
 #: ../src/interface.cpp:1223
 msgid "Could not parse SVG data"
 msgstr "Non se puideron analizar os datos SVG"
 
 #: ../src/interface.cpp:1265
+#, fuzzy
 msgid "Drop SVG"
-msgstr ""
+msgstr "Entrada de SVG"
 
 #: ../src/interface.cpp:1323
 #, fuzzy
 msgid "Drop bitmap image"
-msgstr "Importar mapas de bits coma <image>"
+msgstr "image/svg+xml"
 
 #: ../src/interface.cpp:1415
 #, 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 ""
 
 #: ../src/interface.cpp:1422
 msgid "Replace"
-msgstr ""
+msgstr "Substituír"
 
-#: ../src/io/sys.cpp:411 ../src/io/sys.cpp:419
+#: ../src/io/sys.cpp:411
+#: ../src/io/sys.cpp:419
 #, c-format
 msgid "Failed to read from child pipe (%s)"
 msgstr ""
 
 #: ../src/io/sys.cpp:443
-#, fuzzy, c-format
+#, c-format
 msgid "Failed to change to directory '%s' (%s)"
-msgstr ""
-"Non se puido crear o directorio %s.\n"
-"%s"
+msgstr "Fallo ó cambiar ó directorio '%s' (%s)"
 
-#: ../src/io/sys.cpp:449 ../src/io/sys.cpp:675
-#, fuzzy, c-format
+#: ../src/io/sys.cpp:449
+#: ../src/io/sys.cpp:675
+#, c-format
 msgid "Failed to execute child process (%s)"
-msgstr "Erro ó cargar o ficheiro solicitado %s"
+msgstr "Fallo ó executar o proceso fillo (%s)"
 
 #: ../src/io/sys.cpp:622
 #, c-format
 msgid "Invalid program name: %s"
-msgstr ""
+msgstr "Nome de programa incorrecto: %s"
 
-#: ../src/io/sys.cpp:632 ../src/io/sys.cpp:921
+#: ../src/io/sys.cpp:632
+#: ../src/io/sys.cpp:921
 #, c-format
 msgid "Invalid string in argument vector at %d: %s"
 msgstr ""
 
-#: ../src/io/sys.cpp:643 ../src/io/sys.cpp:936
+#: ../src/io/sys.cpp:643
+#: ../src/io/sys.cpp:936
 #, c-format
 msgid "Invalid string in environment: %s"
 msgstr ""
@@ -5406,11 +5380,9 @@ msgid "Failed to create pipe for communicating with child process (%s)"
 msgstr ""
 
 #: ../src/io/sys.cpp:917
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid working directory: %s"
-msgstr ""
-"%s non é un directorio válido.\n"
-"%s"
+msgstr "Directorio de traballo incorrecto: %s"
 
 #: ../src/io/sys.cpp:985
 #, c-format
@@ -5419,8 +5391,11 @@ msgstr ""
 
 #: ../src/jabber_whiteboard/invitation-confirm-dialog.cpp:26
 #: ../src/jabber_whiteboard/session-file-selector.cpp:24
+#, fuzzy
 msgid "_Write session file:"
 msgstr ""
+"Non se puido escribir o ficheiro %s.\n"
+"%s"
 
 #: ../src/jabber_whiteboard/pedrogui.cpp:2630
 msgid "Shared SVG whiteboard tool."
@@ -5431,12 +5406,13 @@ msgid "Based on the Pedro XMPP client"
 msgstr ""
 
 #: ../src/jabber_whiteboard/session-file-selector.cpp:60
+#, fuzzy
 msgid "Select a location and filename"
-msgstr ""
+msgstr "Seleccione un nome de ficheiro para exportar"
 
 #: ../src/jabber_whiteboard/session-file-selector.cpp:62
 msgid "Set filename"
-msgstr ""
+msgstr "Definir un nome de ficheiro"
 
 #: ../src/jabber_whiteboard/session-manager.cpp:308
 msgid "<b>%1</b> has invited you to a whiteboard session."
@@ -5451,26 +5427,26 @@ msgid "Accept invitation"
 msgstr "Aceptar a invitación"
 
 #: ../src/jabber_whiteboard/session-manager.cpp:315
+#, fuzzy
 msgid "Decline invitation"
-msgstr ""
+msgstr "Aceptar a invitación"
 
 #: ../src/jabber_whiteboard/session-manager.cpp:370
+#, fuzzy
 msgid "Inkboard session (%1 to %2)"
-msgstr ""
+msgstr "Obxecto a camiño"
 
 #: ../src/knot.cpp:430
 msgid "Node or handle drag canceled."
 msgstr "Cancelouse o arrastre dun nodo ou dunha asa."
 
 #: ../src/knotholder.cpp:132
-#, fuzzy
 msgid "Change handle"
-msgstr "Crear rectángulo"
+msgstr "Cambiar a asa"
 
 #: ../src/knotholder.cpp:207
-#, fuzzy
 msgid "Move handle"
-msgstr "Movemento cancelado."
+msgstr "Mover a asa"
 
 #. TRANSLATORS: This refers to the pattern that's inside the object
 #: ../src/knotholder.cpp:228
@@ -5478,8 +5454,9 @@ msgid "<b>Move</b> the pattern fill inside the object"
 msgstr ""
 
 #: ../src/knotholder.cpp:231
+#, fuzzy
 msgid "<b>Scale</b> the pattern fill uniformly"
-msgstr ""
+msgstr "Extraer obxectos dun recheo de patrón en mosaico"
 
 #: ../src/knotholder.cpp:234
 msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
@@ -5497,13 +5474,14 @@ msgstr ""
 #: ../src/libgdl/gdl-dock-bar.c:116
 #, fuzzy
 msgid "Dockbar style"
-msgstr "E_stilo do trazo"
+msgstr "Pegar estilo"
 
 #: ../src/libgdl/gdl-dock-bar.c:117
 msgid "Dockbar style to show items on it"
 msgstr ""
 
-#: ../src/libgdl/gdl-dock.c:175 ../src/ui/dialog/inkscape-preferences.cpp:496
+#: ../src/libgdl/gdl-dock.c:175
+#: ../src/ui/dialog/inkscape-preferences.cpp:496
 #: ../src/ui/dialog/inkscape-preferences.cpp:517
 #, fuzzy
 msgid "Floating"
@@ -5513,10 +5491,11 @@ msgstr "Relación"
 msgid "Whether the dock is floating in its own window"
 msgstr ""
 
-#: ../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
 #, fuzzy
 msgid "Default title"
-msgstr "_Unidades predeterminadas:"
+msgstr "default.svg"
 
 #: ../src/libgdl/gdl-dock.c:184
 msgid "Default title for the newly created floating docks"
@@ -5556,9 +5535,8 @@ msgid "Dock #%d"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-item.c:287
-#, fuzzy
 msgid "Orientation"
-msgstr "Orientación da páxina:"
+msgstr "Orientación"
 
 #: ../src/libgdl/gdl-dock-item.c:288
 msgid "Orientation of the docking item"
@@ -5574,36 +5552,32 @@ msgstr ""
 
 #: ../src/libgdl/gdl-dock-item.c:311
 msgid "Item behavior"
-msgstr ""
+msgstr "Comportamento do elemento"
 
 #: ../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.)"
+msgid "General behavior for the dock item (i.e. whether it can float, if it's locked, etc.)"
 msgstr ""
 
-#: ../src/libgdl/gdl-dock-item.c:320 ../src/libgdl/gdl-dock-master.c:151
-#, fuzzy
+#: ../src/libgdl/gdl-dock-item.c:320
+#: ../src/libgdl/gdl-dock-master.c:151
 msgid "Locked"
-msgstr "Bl_oquear"
+msgstr "Bloqueado"
 
 #: ../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 ""
 
 #: ../src/libgdl/gdl-dock-item.c:329
 msgid "Preferred width"
-msgstr ""
+msgstr "Ancho preferido"
 
 #: ../src/libgdl/gdl-dock-item.c:330
 msgid "Preferred width for the dock item"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-item.c:336
-#, fuzzy
 msgid "Preferred height"
-msgstr "Alto:"
+msgstr "Alto preferido"
 
 #: ../src/libgdl/gdl-dock-item.c:337
 msgid "Preferred height for the dock item"
@@ -5611,40 +5585,34 @@ msgstr ""
 
 #: ../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 ""
 
 #: ../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"
+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 ""
 
-#: ../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 ""
 
 #. UnLock menuitem
 #: ../src/libgdl/gdl-dock-item.c:1479
-#, fuzzy
 msgid "UnLock"
-msgstr "Bl_oquear"
+msgstr "Desbloquear"
 
 #. Hide menuitem.
 #: ../src/libgdl/gdl-dock-item.c:1486
-#, fuzzy
 msgid "Hide"
-msgstr "_Agochar"
+msgstr "Agochar"
 
 #. Lock menuitem
 #: ../src/libgdl/gdl-dock-item.c:1491
-#, fuzzy
 msgid "Lock"
-msgstr "Bl_oquear"
+msgstr "Bloquear"
 
 #: ../src/libgdl/gdl-dock-item.c:1717
 #, c-format
@@ -5656,13 +5624,13 @@ msgid "Iconify"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-item-grip.c:395
+#, fuzzy
 msgid "Iconify this dock"
-msgstr ""
+msgstr "O propio estilo desta ferramenta:"
 
 #: ../src/libgdl/gdl-dock-item-grip.c:397
-#, fuzzy
 msgid "Close"
-msgstr "Pe_char"
+msgstr "Pechar"
 
 #: ../src/libgdl/gdl-dock-item-grip.c:397
 #, fuzzy
@@ -5683,20 +5651,20 @@ msgid "Default title for newly created floating docks"
 msgstr ""
 
 #: ../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"
+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 ""
 
-#: ../src/libgdl/gdl-dock-master.c:160 ../src/libgdl/gdl-switcher.c:707
+#: ../src/libgdl/gdl-dock-master.c:160
+#: ../src/libgdl/gdl-switcher.c:707
 #, fuzzy
 msgid "Switcher Style"
-msgstr "Pegar E_stilo"
+msgstr "Pegar estilo"
 
-#: ../src/libgdl/gdl-dock-master.c:161 ../src/libgdl/gdl-switcher.c:708
+#: ../src/libgdl/gdl-dock-master.c:161
+#: ../src/libgdl/gdl-switcher.c:708
 #, fuzzy
 msgid "Switcher buttons style"
-msgstr "Moveuse á seguinte capa."
+msgstr "Establecer o estilo do trazo"
 
 #: ../src/libgdl/gdl-dock-master.c:168
 #, fuzzy
@@ -5704,23 +5672,17 @@ msgid "Expand direction"
 msgstr "Espaciado de liñas:"
 
 #: ../src/libgdl/gdl-dock-master.c:169
-msgid ""
-"Allow the master's dock items to expand their container dock objects in the "
-"given direction"
+msgid "Allow the master's dock items to expand their container dock objects in the given direction"
 msgstr ""
 
 #: ../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)."
+msgid "master %p: unable to add object %p[%s] to the hash.  There already is an item with that name (%p)."
 msgstr ""
 
 #: ../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."
+msgid "The new dock controller %p is automatic.  Only manual dock objects should be named controller."
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-notebook.c:134
@@ -5734,21 +5696,20 @@ msgstr "Páxina"
 #: ../src/libgdl/gdl-dock-notebook.c:135
 #, fuzzy
 msgid "The index of the current page"
-msgstr "Renomear a capa actual"
+msgstr "Amosa-lo _bordo da páxina"
 
-#: ../src/libgdl/gdl-dock-object.c:120 ../src/ui/widget/page-sizer.cpp:198
-#, fuzzy
+#: ../src/libgdl/gdl-dock-object.c:120
+#: ../src/ui/widget/page-sizer.cpp:198
 msgid "Name"
-msgstr "Nome:"
+msgstr "Nome"
 
 #: ../src/libgdl/gdl-dock-object.c:121
 msgid "Unique name for identifying the dock object"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-object.c:128
-#, fuzzy
 msgid "Long name"
-msgstr "Nome da capa:"
+msgstr "Nome longo"
 
 #: ../src/libgdl/gdl-dock-object.c:129
 msgid "Human readable name for the dock object"
@@ -5781,16 +5742,12 @@ msgstr ""
 
 #: ../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"
+msgid "Call to gdl_dock_object_dock in a dock object %p (object type is %s) which hasn't implemented this method"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-object.c:563
 #, c-format
-msgid ""
-"Dock operation requested in a non-bound object %p. The application might "
-"crash"
+msgid "Dock operation requested in a non-bound object %p. The application might crash"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-object.c:570
@@ -5800,14 +5757,12 @@ msgstr ""
 
 #: ../src/libgdl/gdl-dock-object.c:612
 #, c-format
-msgid ""
-"Attempt to bind to %p an already bound dock object %p (current master: %p)"
+msgid "Attempt to bind to %p an already bound dock object %p (current master: %p)"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-paned.c:132
-#, fuzzy
 msgid "Position"
-msgstr "Posición:"
+msgstr "Posición"
 
 #: ../src/libgdl/gdl-dock-paned.c:133
 msgid "Position of the divider in pixels"
@@ -5819,9 +5774,7 @@ msgid "Sticky"
 msgstr "diminuta"
 
 #: ../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"
+msgid "Whether the placeholder will stick to its host or move up the hierarchy when the host is redocked"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-placeholder.c:151
@@ -5835,12 +5788,10 @@ msgstr ""
 #: ../src/libgdl/gdl-dock-placeholder.c:159
 #, fuzzy
 msgid "Next placement"
-msgstr "Novo nodo"
+msgstr "Seleccionar Seguinte"
 
 #: ../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"
+msgid "The position an item will be docked to our host if a request is made to dock to us"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-placeholder.c:170
@@ -5863,7 +5814,7 @@ msgstr ""
 #: ../src/libgdl/gdl-dock-placeholder.c:191
 #, fuzzy
 msgid "X-Coordinate"
-msgstr "Coordenadas do cursor"
+msgstr "Coordenada X:"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:192
 #, fuzzy
@@ -5873,7 +5824,7 @@ msgstr "Coordenada X da orixe da reixa"
 #: ../src/libgdl/gdl-dock-placeholder.c:198
 #, fuzzy
 msgid "Y-Coordinate"
-msgstr "Coordenadas do cursor"
+msgstr "Coordenada X:"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:199
 #, fuzzy
@@ -5891,9 +5842,7 @@ msgstr ""
 
 #: ../src/libgdl/gdl-dock-placeholder.c:643
 #, c-format
-msgid ""
-"Something weird happened while getting the child placement for %p from "
-"parent %p"
+msgid "Something weird happened while getting the child placement for %p from parent %p"
 msgstr ""
 
 #: ../src/libgdl/gdl-dock-tablabel.c:129
@@ -5913,13 +5862,13 @@ msgstr "Azul"
 #: ../src/live_effects/effect.cpp:69
 #, fuzzy
 msgid "Pattern Along Path"
-msgstr "_Poñer no camiño"
+msgstr "O camiño está pechado."
 
 #. for historic reasons, this effect is called skeletal(strokes) in Inkscape:SVG
 #: ../src/live_effects/effect.cpp:70
 #, fuzzy
 msgid "Sketch"
-msgstr "Establecer"
+msgstr "Entrada de Sketch"
 
 #: ../src/live_effects/effect.cpp:71
 msgid "VonKoch"
@@ -5939,17 +5888,19 @@ msgid "Gears"
 msgstr "_Limpar"
 
 #: ../src/live_effects/effect.cpp:77
+#, fuzzy
 msgid "Stitch Sub-Paths"
-msgstr ""
+msgstr "Converter textos en camiños"
 
 #: ../src/live_effects/effect.cpp:78
+#, fuzzy
 msgid "Circle (center+radius)"
-msgstr ""
+msgstr "Mover o <b>centro</b> a %s, %s"
 
 #: ../src/live_effects/effect.cpp:79
 #, fuzzy
 msgid "Perspective path"
-msgstr "Presencia"
+msgstr "Pechando o camiño."
 
 #: ../src/live_effects/effect.cpp:80
 msgid "Spiro spline"
@@ -5958,17 +5909,17 @@ msgstr ""
 #: ../src/live_effects/effect.cpp:81
 #, fuzzy
 msgid "Lattice Deformation"
-msgstr "Información"
+msgstr "Tipo de deformación:"
 
 #: ../src/live_effects/effect.cpp:82
 #, fuzzy
 msgid "Envelope Deformation"
-msgstr "Información"
+msgstr "Tipo de deformación:"
 
 #: ../src/live_effects/effect.cpp:83
 #, fuzzy
 msgid "Construct grid"
-msgstr "Contribuíntes"
+msgstr "Reixa rectangular"
 
 #: ../src/live_effects/effect.cpp:84
 msgid "Perpendicular bisector"
@@ -5977,7 +5928,7 @@ msgstr ""
 #: ../src/live_effects/effect.cpp:85
 #, fuzzy
 msgid "Tangent to curve"
-msgstr "Desprazamento Vertical"
+msgstr "Obxecto a camiño"
 
 #: ../src/live_effects/effect.cpp:86
 #, fuzzy
@@ -5985,25 +5936,20 @@ msgid "Mirror reflection"
 msgstr "<b>PM</b>: reflexo"
 
 #: ../src/live_effects/effect.cpp:178
-#, fuzzy
 msgid "Create and apply path effect"
-msgstr "Crear novos obxectos con:"
+msgstr "Crear e aplicar efecto de camiño"
 
 #: ../src/live_effects/effect.cpp:189
-#, fuzzy
 msgid "Is visible?"
-msgstr "Visible"
+msgstr "É visible?"
 
 #: ../src/live_effects/effect.cpp:189
-msgid ""
-"If unchecked, the effect remains applied to the object but is temporarily "
-"disabled on canvas"
+msgid "If unchecked, the effect remains applied to the object but is temporarily disabled on canvas"
 msgstr ""
 
 #: ../src/live_effects/effect.cpp:207
-#, fuzzy
 msgid "No effect"
-msgstr "Desprazamento Horizontal"
+msgstr "Sen efectos"
 
 #: ../src/live_effects/effect.cpp:254
 #, c-format
@@ -6015,9 +5961,9 @@ msgid "An exception occurred during execution of the Path Effect."
 msgstr ""
 
 #: ../src/live_effects/effect.cpp:512
-#, fuzzy, c-format
+#, c-format
 msgid "Editing parameter <b>%s</b>."
-msgstr "<b>Rectángulo</b>"
+msgstr "Editando o parámetro <b>%s</b>."
 
 #: ../src/live_effects/effect.cpp:517
 msgid "None of the applied path effect's parameters can be edited on-canvas."
@@ -6026,7 +5972,7 @@ msgstr ""
 #: ../src/live_effects/lpe-bendpath.cpp:57
 #, fuzzy
 msgid "Bend path"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "Pechando o camiño."
 
 #: ../src/live_effects/lpe-bendpath.cpp:57
 msgid "Path along which to bend the original path"
@@ -6035,13 +5981,13 @@ msgstr ""
 #: ../src/live_effects/lpe-bendpath.cpp:58
 #, fuzzy
 msgid "Width of the path"
-msgstr "Ancho do papel"
+msgstr "Pechando o camiño."
 
 #: ../src/live_effects/lpe-bendpath.cpp:59
 #: ../src/live_effects/lpe-patternalongpath.cpp:65
 #, fuzzy
 msgid "Width in units of length"
-msgstr "Ancho en píxels da área desenfocada"
+msgstr "Ancho en unidades de lonxitude"
 
 #: ../src/live_effects/lpe-bendpath.cpp:59
 #, fuzzy
@@ -6051,25 +5997,23 @@ msgstr "Ancho en píxels da área desenfocada"
 #: ../src/live_effects/lpe-bendpath.cpp:60
 #, fuzzy
 msgid "Original path is vertical"
-msgstr "Desprazamento do patrón"
+msgstr "O elemento non é nin unha figura nin un camiño"
 
 #: ../src/live_effects/lpe-bendpath.cpp:60
 msgid "Rotates the original 90 degrees, before bending it along the bend path"
 msgstr ""
 
 #: ../src/live_effects/lpe-constructgrid.cpp:28
-#, fuzzy
 msgid "Size X"
-msgstr "Tamaño"
+msgstr "Tamaño X"
 
 #: ../src/live_effects/lpe-constructgrid.cpp:28
 msgid "The size of the grid in X direction."
 msgstr ""
 
 #: ../src/live_effects/lpe-constructgrid.cpp:29
-#, fuzzy
 msgid "Size Y"
-msgstr "Tamaño"
+msgstr "Tamaño Y"
 
 #: ../src/live_effects/lpe-constructgrid.cpp:29
 msgid "The size of the grid in Y direction."
@@ -6078,16 +6022,15 @@ msgstr ""
 #: ../src/live_effects/lpe-curvestitch.cpp:42
 #, fuzzy
 msgid "Stitch path"
-msgstr "_Pintar o trazo"
+msgstr "Pechando o camiño."
 
 #: ../src/live_effects/lpe-curvestitch.cpp:42
 msgid "The path that will be used as stitch."
 msgstr ""
 
 #: ../src/live_effects/lpe-curvestitch.cpp:43
-#, fuzzy
 msgid "Number of paths"
-msgstr "Número de filas"
+msgstr "Número de camiños"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:43
 msgid "The number of paths that will be generated."
@@ -6096,12 +6039,10 @@ msgstr ""
 #: ../src/live_effects/lpe-curvestitch.cpp:44
 #, fuzzy
 msgid "Start edge variance"
-msgstr "Preferencias de Estrela"
+msgstr "Detección Óptima de Bordos"
 
 #: ../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"
+msgid "The amount of random jitter to move the start points of the stitches inside & outside the guide path"
 msgstr ""
 
 #: ../src/live_effects/lpe-curvestitch.cpp:45
@@ -6110,19 +6051,16 @@ msgid "Start spacing variance"
 msgstr "Saturación"
 
 #: ../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"
+msgid "The amount of random shifting to move the start points of the stitches back & forth along the guide path"
 msgstr ""
 
 #: ../src/live_effects/lpe-curvestitch.cpp:46
+#, fuzzy
 msgid "End edge variance"
-msgstr ""
+msgstr "Detección Óptima de Bordos"
 
 #: ../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"
+msgid "The amount of randomness that moves the end points of the stitches inside & outside the guide path"
 msgstr ""
 
 #: ../src/live_effects/lpe-curvestitch.cpp:47
@@ -6131,9 +6069,7 @@ msgid "End spacing variance"
 msgstr "Saturación"
 
 #: ../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"
+msgid "The amount of random shifting to move the end points of the stitches back & forth along the guide path"
 msgstr ""
 
 #: ../src/live_effects/lpe-curvestitch.cpp:48
@@ -6159,7 +6095,7 @@ msgstr "Ancho en píxels da área desenfocada"
 #: ../src/live_effects/lpe-envelope.cpp:36
 #, fuzzy
 msgid "Top bend path"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "O camiño está pechado."
 
 #: ../src/live_effects/lpe-envelope.cpp:36
 msgid "Top path along which to bend the original path"
@@ -6168,7 +6104,7 @@ msgstr ""
 #: ../src/live_effects/lpe-envelope.cpp:37
 #, fuzzy
 msgid "Right bend path"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "O camiño está pechado."
 
 #: ../src/live_effects/lpe-envelope.cpp:37
 msgid "Right path along which to bend the original path"
@@ -6177,7 +6113,7 @@ msgstr ""
 #: ../src/live_effects/lpe-envelope.cpp:38
 #, fuzzy
 msgid "Bottom bend path"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "Cortar o camiño inferior en anacos"
 
 #: ../src/live_effects/lpe-envelope.cpp:38
 msgid "Bottom path along which to bend the original path"
@@ -6186,7 +6122,7 @@ msgstr ""
 #: ../src/live_effects/lpe-envelope.cpp:39
 #, fuzzy
 msgid "Left bend path"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "O camiño está pechado."
 
 #: ../src/live_effects/lpe-envelope.cpp:39
 msgid "Left path along which to bend the original path"
@@ -6210,30 +6146,26 @@ msgid "Enable the top and bottom deformation paths"
 msgstr ""
 
 #: ../src/live_effects/lpe-gears.cpp:212
-#, fuzzy
 msgid "Teeth"
-msgstr "Texto"
+msgstr "Dentes"
 
 #: ../src/live_effects/lpe-gears.cpp:212
-#, fuzzy
 msgid "The number of teeth"
-msgstr "Número de Niveis"
+msgstr "O número de dentes"
 
 #: ../src/live_effects/lpe-gears.cpp:213
 msgid "Phi"
 msgstr ""
 
 #: ../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 ""
 
 #. initialise your parameters here:
 #: ../src/live_effects/lpe-knot.cpp:27
 #, fuzzy
 msgid "Gap width"
-msgstr "Igual ancho"
+msgstr "Ancho, alto:"
 
 #: ../src/live_effects/lpe-knot.cpp:27
 msgid "The width of the gap in the path where it self-intersects"
@@ -6243,7 +6175,7 @@ msgstr ""
 #: ../src/live_effects/lpe-lattice.cpp:45
 #, fuzzy
 msgid "Control handle 0"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:45
 #: ../src/live_effects/lpe-lattice.cpp:46
@@ -6267,82 +6199,82 @@ msgstr ""
 #: ../src/live_effects/lpe-lattice.cpp:46
 #, fuzzy
 msgid "Control handle 1"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:47
 #, fuzzy
 msgid "Control handle 2"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:48
 #, fuzzy
 msgid "Control handle 3"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:49
 #, fuzzy
 msgid "Control handle 4"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:50
 #, fuzzy
 msgid "Control handle 5"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:51
 #, fuzzy
 msgid "Control handle 6"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:52
 #, fuzzy
 msgid "Control handle 7"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:53
 #, fuzzy
 msgid "Control handle 8"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:54
 #, fuzzy
 msgid "Control handle 9"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:55
 #, fuzzy
 msgid "Control handle 10"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:56
 #, fuzzy
 msgid "Control handle 11"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:57
 #, fuzzy
 msgid "Control handle 12"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:58
 #, fuzzy
 msgid "Control handle 13"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:59
 #, fuzzy
 msgid "Control handle 14"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-lattice.cpp:60
 #, fuzzy
 msgid "Control handle 15"
-msgstr "Crear rectángulo"
+msgstr "Controlar de xeito preciso as transformacións dos obxectos"
 
 #: ../src/live_effects/lpe-mirror_reflect.cpp:30
 #, fuzzy
 msgid "Reflection line"
-msgstr "Selección"
+msgstr "Ancho da Liña"
 
 #: ../src/live_effects/lpe-mirror_reflect.cpp:30
 msgid "Line which serves as 'mirror' for the reflection"
@@ -6361,9 +6293,8 @@ msgstr ""
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:55
 #: ../share/extensions/pathalongpath.inx.h:8
-#, fuzzy
 msgid "Repeated"
-msgstr "Repetir:"
+msgstr "Repetido"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:56
 #: ../share/extensions/pathalongpath.inx.h:9
@@ -6373,25 +6304,25 @@ msgstr ""
 #: ../src/live_effects/lpe-patternalongpath.cpp:62
 #, fuzzy
 msgid "Pattern source"
-msgstr "Patrón"
+msgstr "Fonte da Imaxe"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:62
+#, fuzzy
 msgid "Path to put along the skeleton path"
-msgstr ""
+msgstr "Seleccione <b>un texto e un camiño</b> para poñer o texto no camiño."
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:63
 #, fuzzy
 msgid "Pattern copies"
-msgstr "Patrón"
+msgstr "Copias do patrón:"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:63
 msgid "How many pattern copies to place along the skeleton path"
 msgstr ""
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:64
-#, fuzzy
 msgid "Width of the pattern"
-msgstr "Ancho do papel"
+msgstr "Ancho do patrón"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:65
 msgid "Scale the width of the pattern in units of its length"
@@ -6404,9 +6335,7 @@ msgstr "Separación _X:"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:66
 #, c-format
-msgid ""
-"Space between copies of the pattern. Negative values allowed, but are "
-"limited to -90% of pattern width."
+msgid "Space between copies of the pattern. Negative values allowed, but are limited to -90% of pattern width."
 msgstr ""
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:67
@@ -6414,14 +6343,14 @@ msgstr ""
 #: ../share/extensions/pathscatter.inx.h:7
 #, fuzzy
 msgid "Normal offset"
-msgstr "Desprazamento Horizontal"
+msgstr "Desprazamento do patrón"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:68
 #: ../share/extensions/pathalongpath.inx.h:15
 #: ../share/extensions/pathscatter.inx.h:13
 #, fuzzy
 msgid "Tangential offset"
-msgstr "Desprazamento Vertical"
+msgstr "Desprazamento do patrón"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:69
 #, fuzzy
@@ -6429,9 +6358,7 @@ msgid "Offsets in unit of pattern size"
 msgstr "Obxectos a patrón"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:69
-msgid ""
-"Spacing, tangential and normal offset are expressed as a ratio of width/"
-"height"
+msgid "Spacing, tangential and normal offset are expressed as a ratio of width/height"
 msgstr ""
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:70
@@ -6439,7 +6366,7 @@ msgstr ""
 #: ../share/extensions/pathscatter.inx.h:9
 #, fuzzy
 msgid "Pattern is vertical"
-msgstr "Desprazamento do patrón"
+msgstr "O patrón é vertical"
 
 #: ../src/live_effects/lpe-patternalongpath.cpp:70
 msgid "Rotate pattern 90 deg before applying"
@@ -6447,8 +6374,9 @@ msgstr ""
 
 #: ../src/live_effects/lpe-perp_bisector.cpp:156
 #: ../src/live_effects/lpe-tangent_to_curve.cpp:65
+#, fuzzy
 msgid "Length left"
-msgstr ""
+msgstr "Aliñar á esqueda"
 
 #: ../src/live_effects/lpe-perp_bisector.cpp:156
 msgid "Specifies the left end of the bisector"
@@ -6458,7 +6386,7 @@ msgstr ""
 #: ../src/live_effects/lpe-tangent_to_curve.cpp:66
 #, fuzzy
 msgid "Length right"
-msgstr "Aliñar abaixo á dereita"
+msgstr "Aliñar á dereita"
 
 #: ../src/live_effects/lpe-perp_bisector.cpp:157
 #, fuzzy
@@ -6479,47 +6407,49 @@ msgstr "Cor"
 #: ../src/live_effects/lpe-perspective_path.cpp:42
 #, fuzzy
 msgid "Scale x"
-msgstr "Esc_ala"
+msgstr "E_scalar"
 
 #: ../src/live_effects/lpe-perspective_path.cpp:42
+#, fuzzy
 msgid "Scale factor in x direction"
-msgstr ""
+msgstr "Escalar as esquinas redondeadas dos rectángulos"
 
 #: ../src/live_effects/lpe-perspective_path.cpp:43
 #, fuzzy
 msgid "Scale y"
-msgstr "Esc_ala"
+msgstr "E_scalar"
 
 #: ../src/live_effects/lpe-perspective_path.cpp:43
+#, fuzzy
 msgid "Scale factor in y direction"
-msgstr ""
+msgstr "Escalar as esquinas redondeadas dos rectángulos"
 
 #: ../src/live_effects/lpe-perspective_path.cpp:44
 #, fuzzy
 msgid "Offset x"
-msgstr "Desprazamento:"
+msgstr "Desprazamento"
 
 #: ../src/live_effects/lpe-perspective_path.cpp:44
+#, fuzzy
 msgid "Offset in x direction"
-msgstr ""
+msgstr "Exportando"
 
 #: ../src/live_effects/lpe-perspective_path.cpp:45
 #, fuzzy
 msgid "Offset y"
-msgstr "Desprazamento:"
+msgstr "Desprazamento"
 
 #: ../src/live_effects/lpe-perspective_path.cpp:45
+#, fuzzy
 msgid "Offset in y direction"
-msgstr ""
+msgstr "Exportando"
 
 #: ../src/live_effects/lpe-perspective_path.cpp:46
 msgid "Uses XY plane?"
 msgstr ""
 
 #: ../src/live_effects/lpe-perspective_path.cpp:46
-msgid ""
-"If true, put the path on the left side of an imaginary box, otherwise on the "
-"right side"
+msgid "If true, put the path on the left side of an imaginary box, otherwise on the right side"
 msgstr ""
 
 #. initialise your parameters here:
@@ -6535,9 +6465,8 @@ msgstr ""
 #. initialise your parameters here:
 #. testpointA(_("Test Point A"), _("Test A"), "ptA", &wr, this, Geom::Point(100,100)),
 #: ../src/live_effects/lpe-sketch.cpp:35
-#, fuzzy
 msgid "Strokes"
-msgstr "Trazo"
+msgstr "Trazos"
 
 #: ../src/live_effects/lpe-sketch.cpp:35
 msgid "Draw that many approximating strokes"
@@ -6546,7 +6475,7 @@ msgstr ""
 #: ../src/live_effects/lpe-sketch.cpp:36
 #, fuzzy
 msgid "Max stroke length"
-msgstr "Escalar o ancho do trazado"
+msgstr "Establecer a cor do trazo"
 
 #: ../src/live_effects/lpe-sketch.cpp:37
 msgid "Maximum length of approximating strokes"
@@ -6555,7 +6484,7 @@ msgstr ""
 #: ../src/live_effects/lpe-sketch.cpp:38
 #, fuzzy
 msgid "Stroke length variation"
-msgstr "Preferencias de Estrela"
+msgstr "Establecer a cor do trazo"
 
 #: ../src/live_effects/lpe-sketch.cpp:39
 msgid "Random variation of stroke length (relative to maximum length)"
@@ -6566,8 +6495,7 @@ msgid "Max. overlap"
 msgstr ""
 
 #: ../src/live_effects/lpe-sketch.cpp:41
-msgid ""
-"How much successive strokes should overlap (relative to maximum length)."
+msgid "How much successive strokes should overlap (relative to maximum length)."
 msgstr ""
 
 #: ../src/live_effects/lpe-sketch.cpp:42
@@ -6583,15 +6511,13 @@ msgid "Max. end tolerance"
 msgstr ""
 
 #: ../src/live_effects/lpe-sketch.cpp:45
-msgid ""
-"Maximum distance between ends of original and approximating paths (relative "
-"to maximum length)"
+msgid "Maximum distance between ends of original and approximating paths (relative to maximum length)"
 msgstr ""
 
 #: ../src/live_effects/lpe-sketch.cpp:46
 #, fuzzy
 msgid "Parallel offset"
-msgstr "Desprazamento Horizontal"
+msgstr "Desprazamento do patrón"
 
 #: ../src/live_effects/lpe-sketch.cpp:47
 msgid "Average distance from approximating path to original path"
@@ -6602,8 +6528,9 @@ msgid "Max. tremble"
 msgstr ""
 
 #: ../src/live_effects/lpe-sketch.cpp:49
+#, fuzzy
 msgid "Maximum tremble magnitude"
-msgstr ""
+msgstr "Número máximo de documentos recentes:"
 
 #: ../src/live_effects/lpe-sketch.cpp:50
 msgid "Tremble frequency"
@@ -6622,21 +6549,23 @@ msgstr "Centrar as liñas"
 msgid "How many construction lines (tangents) to draw"
 msgstr ""
 
-#: ../src/live_effects/lpe-sketch.cpp:54 ../src/selection-chemistry.cpp:1450
-#: ../src/seltrans.cpp:454 ../src/ui/dialog/filter-effects-dialog.cpp:2235
+#: ../src/live_effects/lpe-sketch.cpp:54
+#: ../src/selection-chemistry.cpp:1450
+#: ../src/seltrans.cpp:454
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2235
 #: ../src/ui/dialog/transformation.cpp:736
+#, fuzzy
 msgid "Scale"
-msgstr ""
+msgstr "E_scalar"
 
 #: ../src/live_effects/lpe-sketch.cpp:55
-msgid ""
-"Scale factor relating curvature and length of construction lines (try "
-"5*offset)"
+msgid "Scale factor relating curvature and length of construction lines (try 5*offset)"
 msgstr ""
 
 #: ../src/live_effects/lpe-sketch.cpp:56
+#, fuzzy
 msgid "Max. length"
-msgstr ""
+msgstr "Ancho en unidades de lonxitude"
 
 #: ../src/live_effects/lpe-sketch.cpp:56
 msgid "Maximum length of construction lines"
@@ -6645,14 +6574,15 @@ msgstr ""
 #: ../src/live_effects/lpe-sketch.cpp:57
 #, fuzzy
 msgid "Length variation"
-msgstr "Saturación"
+msgstr "Ancho en unidades de lonxitude"
 
 #: ../src/live_effects/lpe-sketch.cpp:57
 msgid "Random variation of the length of construction lines"
 msgstr ""
 
 #: ../src/live_effects/lpe-tangent_to_curve.cpp:63
-#: ../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 "Ángulo"
 
@@ -6665,9 +6595,7 @@ msgid "Location along curve"
 msgstr ""
 
 #: ../src/live_effects/lpe-tangent_to_curve.cpp:64
-msgid ""
-"Location of the point of attachment along the curve (between 0.0 and number-"
-"of-segments)"
+msgid "Location of the point of attachment along the curve (between 0.0 and number-of-segments)"
 msgstr ""
 
 #: ../src/live_effects/lpe-tangent_to_curve.cpp:65
@@ -6702,14 +6630,13 @@ msgid "point param"
 msgstr "Crear espirais"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:42
-#, fuzzy
 msgid "Bounding box"
-msgstr "Axustar as caixas de contorno ás g_uías"
+msgstr "Caixa de contorno"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:43
 #, fuzzy
 msgid "Last gen. segment"
-msgstr "Degradado linear"
+msgstr "Cambiar o tipo de segmento"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:49
 #, fuzzy
@@ -6723,29 +6650,27 @@ msgstr ""
 #: ../src/live_effects/lpe-vonkoch.cpp:50
 #, fuzzy
 msgid "Generating path"
-msgstr "Creando novo camiño"
+msgstr "Pechando o camiño."
 
 #: ../src/live_effects/lpe-vonkoch.cpp:50
 msgid "Path whos segments define the fractal"
 msgstr ""
 
 #: ../src/live_effects/lpe-vonkoch.cpp:51
+#, fuzzy
 msgid "Draw all generations"
-msgstr ""
+msgstr "Buscar tódalas figuras"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:51
 msgid "If unchecked, draw only the last generation"
 msgstr ""
 
 #: ../src/live_effects/lpe-vonkoch.cpp:52
-#, fuzzy
 msgid "Reference"
-msgstr "_Diferencia"
+msgstr "Referencia"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:52
-msgid ""
-"Generating path segments define transforms in reference to bbox or last "
-"segment"
+msgid "Generating path segments define transforms in reference to bbox or last segment"
 msgstr ""
 
 #: ../src/live_effects/lpe-vonkoch.cpp:53
@@ -6759,52 +6684,51 @@ msgstr ""
 #: ../src/live_effects/parameter/bool.cpp:69
 #, fuzzy
 msgid "Change bool parameter"
-msgstr "Opacidade principal"
+msgstr "Cambiar a definición da cor"
 
 #: ../src/live_effects/parameter/enum.h:51
 #, fuzzy
 msgid "Change enumeration parameter"
-msgstr "Almacenar a transformación:"
+msgstr "Cambiar a definición da cor"
 
 #: ../src/live_effects/parameter/parameter.cpp:138
 #, fuzzy
 msgid "Change scalar parameter"
-msgstr "Opacidade principal"
+msgstr "Cambiar a definición da cor"
 
 #: ../src/live_effects/parameter/path.cpp:157
 #: ../src/live_effects/parameter/point.cpp:110
+#, fuzzy
 msgid "Edit on-canvas"
-msgstr ""
+msgstr "Non hai nada no portarretallos."
 
 #: ../src/live_effects/parameter/path.cpp:167
-#, fuzzy
 msgid "Copy path"
-msgstr "Cortar _Camiño"
+msgstr "Copiar o camiño"
 
 #: ../src/live_effects/parameter/path.cpp:177
-#, fuzzy
 msgid "Paste path"
-msgstr "Pegar A_ncho"
+msgstr "Pegar o camiño"
 
 #: ../src/live_effects/parameter/path.cpp:187
 #, fuzzy
 msgid "Link to path"
-msgstr "Engadir nodos"
+msgstr "Obxecto a camiño"
 
 #: ../src/live_effects/parameter/path.cpp:363
 #, fuzzy
 msgid "Paste path parameter"
-msgstr "Pegar Ancho por Separado"
+msgstr "O camiño está pechado."
 
 #: ../src/live_effects/parameter/path.cpp:395
 #, fuzzy
 msgid "Link path parameter to path"
-msgstr "Pegar Ancho por Separado"
+msgstr "Engadindo ó camiño seleccionado"
 
 #: ../src/live_effects/parameter/point.cpp:95
 #, fuzzy
 msgid "Change point parameter"
-msgstr "Crear espirais"
+msgstr "Cambiar a definición da cor"
 
 #: ../src/live_effects/parameter/pointparam-knotholder.cpp:134
 #, fuzzy
@@ -6814,7 +6738,7 @@ msgstr "Crear espirais"
 #: ../src/live_effects/parameter/random.cpp:137
 #, fuzzy
 msgid "Change random parameter"
-msgstr "Almacenar a transformación:"
+msgstr "Cambiar a definición da cor"
 
 #: ../src/main-cmdlineact.cpp:49
 #, c-format
@@ -6843,20 +6767,22 @@ msgstr "Tentar usar o servidor X (incluso se $DISPLAY non está establecida)"
 msgid "Open specified document(s) (option string may be excluded)"
 msgstr "Abri-lo ficheiro especificado (débese exclui-la cadea de opcion)"
 
-# Rosetta
-#: ../src/main.cpp:234 ../src/main.cpp:239 ../src/main.cpp:244
-#: ../src/main.cpp:311 ../src/main.cpp:316 ../src/main.cpp:321
-#: ../src/main.cpp:326 ../src/main.cpp:332
+#: ../src/main.cpp:234
+#: ../src/main.cpp:239
+#: ../src/main.cpp:244
+#: ../src/main.cpp:311
+#: ../src/main.cpp:316
+#: ../src/main.cpp:321
+#: ../src/main.cpp:326
+#: ../src/main.cpp:332
 #, fuzzy
 msgid "FILENAME"
-msgstr "NOME DO FICHEIRO"
+msgstr "Nome de ficheiro:"
 
 #: ../src/main.cpp:238
 #, fuzzy
 msgid "Print document(s) to specified output file (use '| program' for pipe)"
-msgstr ""
-"Imprimi-los ficheiros ó ficheiro de saida especificado (use '| programa' "
-"para canalización)"
+msgstr "Imprimi-los ficheiros ó ficheiro de saida especificado (use '| programa' para canalización)"
 
 #: ../src/main.cpp:243
 msgid "Export document to a PNG file"
@@ -6866,19 +6792,19 @@ msgstr "Exporta-lo documento a un ficheiro PNG"
 msgid "The resolution used for exporting SVG into bitmap (default 90)"
 msgstr ""
 
-#: ../src/main.cpp:249 ../src/ui/widget/rendering-options.cpp:43
+#: ../src/main.cpp:249
+#: ../src/ui/widget/rendering-options.cpp:43
+#, fuzzy
 msgid "DPI"
-msgstr ""
+msgstr "ppp"
 
 #: ../src/main.cpp:253
-msgid ""
-"Exported area in SVG user units (default is the canvas; 0,0 is lower-left "
-"corner)"
+msgid "Exported area in SVG user units (default is the canvas; 0,0 is lower-left corner)"
 msgstr ""
 
 #: ../src/main.cpp:254
 msgid "x0:y0:x1:y1"
-msgstr ""
+msgstr "x0:y0:x1:y1"
 
 #: ../src/main.cpp:258
 msgid "Exported area is the entire drawing (not canvas)"
@@ -6889,9 +6815,7 @@ msgid "Exported area is the entire canvas"
 msgstr "A área de exportación é todo o lenzo"
 
 #: ../src/main.cpp:268
-msgid ""
-"Snap the bitmap export area outwards to the nearest integer values (in SVG "
-"user units)"
+msgid "Snap the bitmap export area outwards to the nearest integer values (in SVG user units)"
 msgstr ""
 
 #: ../src/main.cpp:273
@@ -6899,30 +6823,32 @@ msgid "The width of exported bitmap in pixels (overrides export-dpi)"
 msgstr ""
 
 #: ../src/main.cpp:274
+#, fuzzy
 msgid "WIDTH"
-msgstr ""
+msgstr "Ancho:"
 
 #: ../src/main.cpp:278
 msgid "The height of exported bitmap in pixels (overrides export-dpi)"
 msgstr ""
 
 #: ../src/main.cpp:279
+#, fuzzy
 msgid "HEIGHT"
-msgstr ""
+msgstr "Alto:"
 
 #: ../src/main.cpp:283
 msgid "The ID of the object to export"
 msgstr "O ID do obxecto que se vai exportar"
 
-#: ../src/main.cpp:284 ../src/main.cpp:382
+#: ../src/main.cpp:284
+#: ../src/main.cpp:382
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this means: "Only export the object whose id is given in --export-id".
 #. See "man inkscape" for details.
 #: ../src/main.cpp:290
-msgid ""
-"Export just the object with export-id, hide all others (only with export-id)"
+msgid "Export just the object with export-id, hide all others (only with export-id)"
 msgstr ""
 
 #: ../src/main.cpp:295
@@ -6934,16 +6860,18 @@ msgid "Background color of exported bitmap (any SVG-supported color string)"
 msgstr ""
 
 #: ../src/main.cpp:301
+#, fuzzy
 msgid "COLOR"
-msgstr ""
+msgstr "Cor"
 
 #: ../src/main.cpp:305
 msgid "Background opacity of exported bitmap (either 0.0 to 1.0, or 1 to 255)"
 msgstr ""
 
 #: ../src/main.cpp:306
+#, fuzzy
 msgid "VALUE"
-msgstr ""
+msgstr "Valor"
 
 #: ../src/main.cpp:310
 #, fuzzy
@@ -6965,7 +6893,7 @@ msgstr "Exporta-lo documento a un ficheiro PDF"
 #: ../src/main.cpp:331
 #, fuzzy
 msgid "Export document to an Enhanced Metafile (EMF) File"
-msgstr "Exporta-lo documento a un ficheiro EPS"
+msgstr "Exporta-lo documento a un ficheiro Enhanced Metafile (EMF)"
 
 #: ../src/main.cpp:337
 msgid "Convert text object to paths on export (EPS)"
@@ -6981,30 +6909,22 @@ msgstr ""
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
 #: ../src/main.cpp:353
-msgid ""
-"Query the X coordinate of the drawing or, if specified, of the object with --"
-"query-id"
+msgid "Query the X coordinate of the drawing or, if specified, of the object with --query-id"
 msgstr ""
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
 #: ../src/main.cpp:359
-msgid ""
-"Query the Y coordinate of the drawing or, if specified, of the object with --"
-"query-id"
+msgid "Query the Y coordinate of the drawing or, if specified, of the object with --query-id"
 msgstr ""
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
 #: ../src/main.cpp:365
-msgid ""
-"Query the width of the drawing or, if specified, of the object with --query-"
-"id"
+msgid "Query the width of the drawing or, if specified, of the object with --query-id"
 msgstr ""
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
 #: ../src/main.cpp:371
-msgid ""
-"Query the height of the drawing or, if specified, of the object with --query-"
-"id"
+msgid "Query the height of the drawing or, if specified, of the object with --query-id"
 msgstr ""
 
 #: ../src/main.cpp:376
@@ -7033,16 +6953,18 @@ msgid "Verb to call when Inkscape opens."
 msgstr ""
 
 #: ../src/main.cpp:403
+#, fuzzy
 msgid "VERB-ID"
-msgstr ""
+msgstr "O ID é incorrecto!"
 
 #: ../src/main.cpp:407
 msgid "Object ID to select when Inkscape opens."
 msgstr ""
 
 #: ../src/main.cpp:408
+#, fuzzy
 msgid "OBJECT-ID"
-msgstr ""
+msgstr "Establecer o ID do obxecto"
 
 #: ../src/main.cpp:687
 msgid ""
@@ -7062,11 +6984,14 @@ msgstr "_Novo"
 msgid "Open _Recent"
 msgstr "Abrir _Recente"
 
-#: ../src/menus-skeleton.h:50 ../src/verbs.cpp:2403 ../src/verbs.cpp:2409
+#: ../src/menus-skeleton.h:50
+#: ../src/verbs.cpp:2403
+#: ../src/verbs.cpp:2409
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../src/menus-skeleton.h:60 ../src/verbs.cpp:2205
+#: ../src/menus-skeleton.h:60
+#: ../src/verbs.cpp:2205
 msgid "Paste Si_ze"
 msgstr "Pegar Ta_maño"
 
@@ -7115,9 +7040,8 @@ msgid "_Path"
 msgstr "Ca_miño"
 
 #: ../src/menus-skeleton.h:221
-#, fuzzy
 msgid "Path Effects"
-msgstr "Efe_ctos"
+msgstr "Efectos de camiño"
 
 #: ../src/menus-skeleton.h:227
 msgid "_Text"
@@ -7140,71 +7064,73 @@ msgid "Tutorials"
 msgstr "Titoriais"
 
 #: ../src/node-context.cpp:255
-msgid ""
-"<b>Ctrl</b>: toggle node type, snap handle angle, move hor/vert; <b>Ctrl"
-"+Alt</b>: move along handles"
+msgid "<b>Ctrl</b>: toggle node type, snap handle angle, move hor/vert; <b>Ctrl+Alt</b>: move along handles"
 msgstr ""
 
 #: ../src/node-context.cpp:256
-msgid ""
-"<b>Shift</b>: toggle node selection, disable snapping, rotate both handles"
+msgid "<b>Shift</b>: toggle node selection, disable snapping, rotate both handles"
 msgstr ""
 
 #: ../src/node-context.cpp:257
 msgid "<b>Alt</b>: lock handle length; <b>Ctrl+Alt</b>: move along handles"
 msgstr ""
 
-#: ../src/nodepath.cpp:651 ../src/seltrans.cpp:547
+#: ../src/nodepath.cpp:651
+#: ../src/seltrans.cpp:547
 msgid "Stamp"
 msgstr ""
 
-#: ../src/nodepath.cpp:1486 ../src/nodepath.cpp:1513
+#: ../src/nodepath.cpp:1486
+#: ../src/nodepath.cpp:1513
 msgid "Move nodes vertically"
-msgstr ""
+msgstr "Mover os nodos verticalmente"
 
-#: ../src/nodepath.cpp:1488 ../src/nodepath.cpp:1515
+#: ../src/nodepath.cpp:1488
+#: ../src/nodepath.cpp:1515
 msgid "Move nodes horizontally"
-msgstr ""
+msgstr "Mover os nodos horizontalmente"
 
-#: ../src/nodepath.cpp:1490 ../src/nodepath.cpp:1517 ../src/nodepath.cpp:1532
+#: ../src/nodepath.cpp:1490
+#: ../src/nodepath.cpp:1517
+#: ../src/nodepath.cpp:1532
 #: ../src/nodepath.cpp:3359
 msgid "Move nodes"
-msgstr ""
+msgstr "Mover os nodos"
 
 #: ../src/nodepath.cpp:1570
-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"
+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 ""
 
 #: ../src/nodepath.cpp:1740
 msgid "Align nodes"
-msgstr ""
+msgstr "Aliñar os nodos"
 
 #: ../src/nodepath.cpp:1802
 msgid "Distribute nodes"
-msgstr ""
+msgstr "Distribuír os nodos"
 
 #: ../src/nodepath.cpp:1840
 msgid "Add nodes"
 msgstr "Engadir nodos"
 
-#: ../src/nodepath.cpp:1842 ../src/nodepath.cpp:1914
+#: ../src/nodepath.cpp:1842
+#: ../src/nodepath.cpp:1914
 msgid "Add node"
 msgstr "Engadir nodo"
 
 #: ../src/nodepath.cpp:1995
 #, fuzzy
 msgid "Break path"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "Romper o camiño"
 
 #: ../src/nodepath.cpp:2051
+#, fuzzy
 msgid "Close subpath"
-msgstr ""
+msgstr "Pechar o ficheiro"
 
 #: ../src/nodepath.cpp:2112
 msgid "Join nodes"
-msgstr ""
+msgstr "Unir os nodos"
 
 #: ../src/nodepath.cpp:2139
 msgid "Close subpath by segment"
@@ -7212,41 +7138,45 @@ msgstr ""
 
 #: ../src/nodepath.cpp:2193
 msgid "Join nodes by segment"
-msgstr ""
+msgstr "Unir os nodos cun segmento"
 
-#: ../src/nodepath.cpp:2206 ../src/nodepath.cpp:2221
+#: ../src/nodepath.cpp:2206
+#: ../src/nodepath.cpp:2221
 msgid "To join, you must have <b>two endnodes</b> selected."
 msgstr "Para unir, debe ter seleccionados <b>dous nodos finais</b>."
 
-#: ../src/nodepath.cpp:2378 ../src/nodepath.cpp:2414 ../src/nodepath.cpp:2418
+#: ../src/nodepath.cpp:2378
+#: ../src/nodepath.cpp:2414
+#: ../src/nodepath.cpp:2418
 msgid "Delete nodes"
-msgstr ""
+msgstr "Eliminar os nodos"
 
 #: ../src/nodepath.cpp:2380
 msgid "Delete nodes preserving shape"
 msgstr ""
 
-#: ../src/nodepath.cpp:2437 ../src/nodepath.cpp:2451
-msgid ""
-"Select <b>two non-endpoint nodes</b> on a path between which to delete "
-"segments."
+#: ../src/nodepath.cpp:2437
+#: ../src/nodepath.cpp:2451
+msgid "Select <b>two non-endpoint nodes</b> on a path between which to delete segments."
 msgstr ""
 
 #: ../src/nodepath.cpp:2547
 msgid "Cannot find path between nodes."
-msgstr ""
+msgstr "Non se puido atopar o camiño entre os nodos."
 
-#: ../src/nodepath.cpp:2579 ../src/widgets/toolbox.cpp:1129
+#: ../src/nodepath.cpp:2579
+#: ../src/widgets/toolbox.cpp:1129
 msgid "Delete segment"
-msgstr ""
+msgstr "Eliminar o segmento"
 
 #: ../src/nodepath.cpp:2600
 msgid "Change segment type"
-msgstr ""
+msgstr "Cambiar o tipo de segmento"
 
-#: ../src/nodepath.cpp:2617 ../src/nodepath.cpp:3317
+#: ../src/nodepath.cpp:2617
+#: ../src/nodepath.cpp:3317
 msgid "Change node type"
-msgstr ""
+msgstr "Cambiar o tipo de nodo"
 
 #: ../src/nodepath.cpp:3605
 msgid "Retract handle"
@@ -7254,32 +7184,29 @@ msgstr ""
 
 #: ../src/nodepath.cpp:3654
 msgid "Move node handle"
-msgstr ""
+msgstr "Mover a asa do nodo"
 
 #: ../src/nodepath.cpp:3823
 #, 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"
+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 ""
 
 #: ../src/nodepath.cpp:4017
 msgid "Rotate nodes"
-msgstr ""
+msgstr "Rotar os nodos"
 
 #: ../src/nodepath.cpp:4148
+#, fuzzy
 msgid "Scale nodes"
-msgstr ""
+msgstr "Mover os nodos"
 
 #: ../src/nodepath.cpp:4192
+#, fuzzy
 msgid "Flip nodes"
-msgstr ""
+msgstr "Inverter os nodos"
 
 #: ../src/nodepath.cpp:4361
-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"
+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 ""
 
 #. TRANSLATORS: "end" is an adjective here (NOT a verb)
@@ -7315,30 +7242,22 @@ msgid "both handles retracted (drag with <b>Shift</b> to extend)"
 msgstr ""
 
 #: ../src/nodepath.cpp:4620
-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"
+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 ""
 
 #: ../src/nodepath.cpp:4621
 msgid "<b>Drag</b> the node or its handles; <b>arrow</b> keys to move the node"
-msgstr ""
-"<b>Arrastre</b> o nodo ou as súas asas; use as teclas de <b>frecha</b> para "
-"mover o nodo"
+msgstr "<b>Arrastre</b> o nodo ou as súas asas; use as teclas de <b>frecha</b> para mover o nodo"
 
-#: ../src/nodepath.cpp:4646 ../src/nodepath.cpp:4658
+#: ../src/nodepath.cpp:4646
+#: ../src/nodepath.cpp:4658
 msgid "Select a single object to edit its nodes or handles."
 msgstr "Seleccione un único obxecto para editar os seus nodos ou as súas asas."
 
 #: ../src/nodepath.cpp:4650
 #, 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."
+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] ""
 msgstr[1] ""
 
@@ -7354,12 +7273,10 @@ msgstr[0] "Seleccionouse <b>%i</b> nodo de <b>%i</b>; %s. %s."
 msgstr[1] "Seleccionaronse <b>%i</b> nodo de <b>%i</b>; %s. %s."
 
 #: ../src/nodepath.cpp:4671
-#, 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] ""
+#, fuzzy, 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] "Romper os camiños seleccionados en subcamiños"
 msgstr[1] ""
 
 #: ../src/nodepath.cpp:4677
@@ -7370,37 +7287,31 @@ msgstr[0] "Seleccionouse <b>%i</b> nodo de <b>%i</b>. %s."
 msgstr[1] "Seleccionaronse <b>%i</b> nodos de <b>%i</b>. %s."
 
 #: ../src/object-edit.cpp:420
-msgid ""
-"Adjust the <b>horizontal rounding</b> radius; with <b>Ctrl</b> to make the "
-"vertical radius the same"
+msgid "Adjust the <b>horizontal rounding</b> radius; with <b>Ctrl</b> to make the vertical radius the same"
 msgstr ""
 
 #: ../src/object-edit.cpp:424
-msgid ""
-"Adjust the <b>vertical rounding</b> radius; with <b>Ctrl</b> to make the "
-"horizontal radius the same"
+msgid "Adjust the <b>vertical rounding</b> radius; with <b>Ctrl</b> to make the horizontal radius the same"
 msgstr ""
 
-#: ../src/object-edit.cpp:428 ../src/object-edit.cpp:432
+#: ../src/object-edit.cpp:428
+#: ../src/object-edit.cpp:432
 #, fuzzy
-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 ""
-"Axusta o <b>ancho e o alto</b> do rectángulo; con <b>Ctrl</b> para bloquear"
+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 "Axusta o <b>ancho e o alto</b> do rectángulo; con <b>Ctrl</b> para bloquear"
 
-#: ../src/object-edit.cpp:666 ../src/object-edit.cpp:669
-#: ../src/object-edit.cpp:672 ../src/object-edit.cpp:675
-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"
+#: ../src/object-edit.cpp:666
+#: ../src/object-edit.cpp:669
+#: ../src/object-edit.cpp:672
+#: ../src/object-edit.cpp:675
+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 ""
 
-#: ../src/object-edit.cpp:678 ../src/object-edit.cpp:681
-#: ../src/object-edit.cpp:684 ../src/object-edit.cpp:687
-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"
+#: ../src/object-edit.cpp:678
+#: ../src/object-edit.cpp:681
+#: ../src/object-edit.cpp:684
+#: ../src/object-edit.cpp:687
+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 ""
 
 #: ../src/object-edit.cpp:690
@@ -7409,56 +7320,40 @@ msgstr ""
 
 #: ../src/object-edit.cpp:908
 msgid "Adjust ellipse <b>width</b>, with <b>Ctrl</b> to make circle"
-msgstr ""
-"Modificar o <b>ancho</b> da elipse, con <b>Ctrl</b> para facer un círculo"
+msgstr "Modificar o <b>ancho</b> da elipse, con <b>Ctrl</b> para facer un círculo"
 
 #: ../src/object-edit.cpp:911
 msgid "Adjust ellipse <b>height</b>, with <b>Ctrl</b> to make circle"
-msgstr ""
-"Modificar o <b>alto</b> da elipse, con <b>Ctrl</b> para facer un círculo"
+msgstr "Modificar o <b>alto</b> da elipse, con <b>Ctrl</b> para facer un círculo"
 
 #: ../src/object-edit.cpp:914
-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"
+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 ""
 
 #: ../src/object-edit.cpp:918
-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"
+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 ""
 
 #: ../src/object-edit.cpp:1057
-msgid ""
-"Adjust the <b>tip radius</b> of the star or polygon; with <b>Shift</b> to "
-"round; with <b>Alt</b> to randomize"
+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 ""
 
 #: ../src/object-edit.cpp:1064
-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"
+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 ""
 
 #: ../src/object-edit.cpp:1245
-msgid ""
-"Roll/unroll the spiral from <b>inside</b>; with <b>Ctrl</b> to snap angle; "
-"with <b>Alt</b> to converge/diverge"
+msgid "Roll/unroll the spiral from <b>inside</b>; with <b>Ctrl</b> to snap angle; with <b>Alt</b> to converge/diverge"
 msgstr ""
 
 #: ../src/object-edit.cpp:1248
-msgid ""
-"Roll/unroll the spiral from <b>outside</b>; with <b>Ctrl</b> to snap angle; "
-"with <b>Shift</b> to scale/rotate"
+msgid "Roll/unroll the spiral from <b>outside</b>; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to scale/rotate"
 msgstr ""
 
 #: ../src/object-edit.cpp:1292
+#, fuzzy
 msgid "Adjust the <b>offset distance</b>"
-msgstr ""
+msgstr "Axustar o ancho do trazo"
 
 #: ../src/object-edit.cpp:1327
 msgid "Drag to resize the <b>flowed text frame</b>"
@@ -7469,18 +7364,17 @@ msgid "Select <b>at least two objects</b> to combine."
 msgstr "Seleccione <b>alomenos dous obxectos</b> para combinalos."
 
 #: ../src/path-chemistry.cpp:67
-#, fuzzy
 msgid "Combining paths..."
-msgstr "Combina-las curvas seleccionadas"
+msgstr "Combinando camiños..."
 
 #: ../src/path-chemistry.cpp:169
 msgid "Combine"
-msgstr ""
+msgstr "Combinar"
 
 #: ../src/path-chemistry.cpp:176
 #, fuzzy
 msgid "<b>No path(s)</b> to combine in the selection."
-msgstr "<b>Non hai camiños</b> para simplificar na selección."
+msgstr "Na selección non hai <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/path-chemistry.cpp:190
 msgid "Select <b>path(s)</b> to break apart."
@@ -7489,62 +7383,66 @@ msgstr "Seleccione un ou máis <b>camiños</b> para rompelos."
 #: ../src/path-chemistry.cpp:194
 #, fuzzy
 msgid "Breaking apart paths..."
-msgstr "Romper"
+msgstr "Converter textos en camiños"
 
 #: ../src/path-chemistry.cpp:280
 #, fuzzy
 msgid "Break apart"
-msgstr "Romper"
+msgstr "Ro_mper"
 
 #: ../src/path-chemistry.cpp:282
+#, fuzzy
 msgid "<b>No path(s)</b> to break apart in the selection."
-msgstr ""
+msgstr "Na selección non hai <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/path-chemistry.cpp:306
 msgid "Select <b>object(s)</b> to convert to path."
 msgstr "Seleccione <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/path-chemistry.cpp:312
-#, fuzzy
 msgid "Converting objects to paths..."
-msgstr "Converte-lo texto en camiño"
+msgstr "Convertendo obxectos en camiños..."
 
 #: ../src/path-chemistry.cpp:334
-#, fuzzy
 msgid "Object to path"
-msgstr "Obxecto a Camiño"
+msgstr "Obxecto a camiño"
 
 #: ../src/path-chemistry.cpp:336
 msgid "<b>No objects</b> to convert to path in the selection."
 msgstr "Na selección non hai <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/path-chemistry.cpp:487
+#, fuzzy
 msgid "Select <b>path(s)</b> to reverse."
-msgstr ""
+msgstr "Seleccione <b>camiños</b> para simplificalos."
 
 #: ../src/path-chemistry.cpp:496
 #, fuzzy
 msgid "Reversing paths..."
-msgstr "_Romper aparte ou fragmentar"
+msgstr "Número de camiños"
 
 #: ../src/path-chemistry.cpp:523
 #, fuzzy
 msgid "Reverse path"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "Pechando o camiño."
 
 #: ../src/path-chemistry.cpp:525
+#, fuzzy
 msgid "<b>No paths</b> to reverse in the selection."
-msgstr ""
+msgstr "<b>Non hai camiños</b> para simplificar na selección."
 
-#: ../src/pencil-context.cpp:239 ../src/pen-context.cpp:441
+#: ../src/pencil-context.cpp:239
+#: ../src/pen-context.cpp:441
 msgid "Continuing selected path"
 msgstr "Continuando o camiño seleccionado"
 
-#: ../src/pencil-context.cpp:248 ../src/pen-context.cpp:451
+#: ../src/pencil-context.cpp:248
+#: ../src/pen-context.cpp:451
 msgid "Creating new path"
 msgstr "Creando novo camiño"
 
-#: ../src/pencil-context.cpp:253 ../src/pen-context.cpp:453
+#: ../src/pencil-context.cpp:253
+#: ../src/pen-context.cpp:453
 msgid "Appending to selected path"
 msgstr "Engadindo ó camiño seleccionado"
 
@@ -7565,68 +7463,54 @@ msgstr "<b>Arrastre</b> para continuar o camiño dende este punto."
 msgid "Finishing freehand"
 msgstr "Rematando man alzada"
 
-#: ../src/pencil-context.cpp:460 ../src/pen-context.cpp:237
+#: ../src/pencil-context.cpp:460
+#: ../src/pen-context.cpp:237
+#, fuzzy
 msgid "Drawing cancelled"
-msgstr ""
+msgstr "Debuxo rematado"
 
 #: ../src/pen-context.cpp:620
 msgid "<b>Click</b> or <b>click and drag</b> to close and finish the path."
-msgstr ""
-"<b>Prema</b> ou <b>prema e arrastre</b> para pechar e finalizar o camiño."
+msgstr "<b>Prema</b> ou <b>prema e arrastre</b> para pechar e finalizar o camiño."
 
 #: ../src/pen-context.cpp:630
-msgid ""
-"<b>Click</b> or <b>click and drag</b> to continue the path from this point."
-msgstr ""
-"<b>Prema</b> ou <b>prema e arrastre</b> para continuar o camiño dende este "
-"punto."
+msgid "<b>Click</b> or <b>click and drag</b> to continue the path from this point."
+msgstr "<b>Prema</b> ou <b>prema e arrastre</b> para continuar o camiño dende este punto."
 
 #: ../src/pen-context.cpp:1177
 #, 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"
+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 ""
 
 #: ../src/pen-context.cpp:1178
 #, 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"
+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 ""
 
 #: ../src/pen-context.cpp:1196
 #, c-format
-msgid ""
-"<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap "
-"angle"
+msgid "<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap angle"
 msgstr ""
 
 #: ../src/pen-context.cpp:1218
 #, fuzzy, 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>Rotar</b> a selección; con <b>Ctrl</b> para axustar o ángulo snap angle; "
-"con <b>Shift</b> para rotar arredor da esquina oposta"
+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>Rotar</b> a selección; con <b>Ctrl</b> para axustar o ángulo snap angle; con <b>Shift</b> para rotar arredor da esquina oposta"
 
 #: ../src/pen-context.cpp:1219
 #, fuzzy, 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>Rotar</b> a selección; con <b>Ctrl</b> para axustar o ángulo snap angle; "
-"con <b>Shift</b> para rotar arredor da esquina oposta"
+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>Rotar</b> a selección; con <b>Ctrl</b> para axustar o ángulo snap angle; con <b>Shift</b> para rotar arredor da esquina oposta"
 
 #: ../src/pen-context.cpp:1259
+#, fuzzy
 msgid "Drawing finished"
-msgstr ""
+msgstr "Debuxo rematado"
 
 #: ../src/persp3d.cpp:335
+#, fuzzy
 msgid "Toggle vanishing point"
-msgstr ""
+msgstr "Activar/desactivar a visibilidade da capa actual"
 
 #: ../src/persp3d.cpp:346
 msgid "Toggle multiple vanishing points"
@@ -7650,50 +7534,28 @@ msgstr ""
 "Non se vai gardar a nova configuración."
 
 #: ../src/rect-context.cpp:382
-msgid ""
-"<b>Ctrl</b>: make square or integer-ratio rect, lock a rounded corner "
-"circular"
+msgid "<b>Ctrl</b>: make square or integer-ratio rect, lock a rounded corner circular"
 msgstr ""
 
 #: ../src/rect-context.cpp:536
 #, fuzzy, 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>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un "
-"rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto "
-"de inicio"
+msgid "<b>Rectangle</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</b> to draw around the starting point"
+msgstr "<b>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto de inicio"
 
 #: ../src/rect-context.cpp:539
 #, fuzzy, 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>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un "
-"rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto "
-"de inicio"
+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>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto de inicio"
 
 #: ../src/rect-context.cpp:541
 #, fuzzy, 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>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un "
-"rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto "
-"de inicio"
+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>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto de inicio"
 
 #: ../src/rect-context.cpp:545
 #, 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>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un "
-"rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto "
-"de inicio"
+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>Rectángulo</b>: %s &#215; %s; con <b>Ctrl</b> para facer un cadrado ou un rectángulo de razón enteira; con <b>Shift</b> para debuxar arredor do punto de inicio"
 
 #: ../src/rect-context.cpp:566
 msgid "Create rectangle"
@@ -7708,30 +7570,24 @@ msgid "Selection canceled."
 msgstr "Selección cancelada."
 
 #: ../src/select-context.cpp:545
-msgid ""
-"<b>Draw over</b> objects to select them; release <b>Alt</b> to switch to "
-"rubberband selection"
+msgid "<b>Draw over</b> objects to select them; release <b>Alt</b> to switch to rubberband selection"
 msgstr ""
 
 #: ../src/select-context.cpp:547
-msgid ""
-"<b>Drag around</b> objects to select them; press <b>Alt</b> to switch to "
-"touch selection"
+msgid "<b>Drag around</b> objects to select them; press <b>Alt</b> to switch to touch selection"
 msgstr ""
 
 #: ../src/select-context.cpp:707
 #, fuzzy
 msgid "<b>Ctrl</b>: click to select in groups; drag to move hor/vert"
-msgstr ""
-"<b>Prema</b> para seleccionar os nodos, <b>arrastre</b> para reordenar."
+msgstr "<b>Prema</b> para seleccionar os nodos, <b>arrastre</b> para reordenar."
 
 #: ../src/select-context.cpp:708
 msgid "<b>Shift</b>: click to toggle select; drag for rubberband selection"
 msgstr ""
 
 #: ../src/select-context.cpp:709
-msgid ""
-"<b>Alt</b>: click to select under; drag to move selected or select by touch"
+msgid "<b>Alt</b>: click to select under; drag to move selected or select by touch"
 msgstr ""
 
 #: ../src/select-context.cpp:880
@@ -7740,16 +7596,18 @@ msgstr ""
 
 #: ../src/selection-chemistry.cpp:194
 msgid "Delete text"
-msgstr ""
+msgstr "Eliminar texto"
 
 #: ../src/selection-chemistry.cpp:202
 msgid "<b>Nothing</b> was deleted."
 msgstr "Non se eliminou <b>nada</b>."
 
-#: ../src/selection-chemistry.cpp:220 ../src/text-context.cpp:995
-#: ../src/widgets/toolbox.cpp:1090 ../src/widgets/toolbox.cpp:4335
+#: ../src/selection-chemistry.cpp:220
+#: ../src/text-context.cpp:995
+#: ../src/widgets/toolbox.cpp:1090
+#: ../src/widgets/toolbox.cpp:4335
 msgid "Delete"
-msgstr ""
+msgstr "Eliminar"
 
 #: ../src/selection-chemistry.cpp:235
 msgid "Select <b>object(s)</b> to duplicate."
@@ -7760,11 +7618,11 @@ msgid "Delete all"
 msgstr "Borrar todo"
 
 #: ../src/selection-chemistry.cpp:409
-#, fuzzy
 msgid "Select <b>some objects</b> to group."
-msgstr "Seleccione <b>dous ou máis obxectos</b> para agrupalos."
+msgstr "Seleccione <b>algúns obxectos</b> para agrupalos."
 
-#: ../src/selection-chemistry.cpp:482 ../src/selection-describer.cpp:51
+#: ../src/selection-chemistry.cpp:482
+#: ../src/selection-describer.cpp:51
 msgid "Group"
 msgstr "Agrupar"
 
@@ -7776,7 +7634,8 @@ msgstr "Seleccione un <b>grupo</b> para desagrupalo."
 msgid "<b>No groups</b> to ungroup in the selection."
 msgstr "<b>Non hai grupos</b> para desagrupar na selección."
 
-#: ../src/selection-chemistry.cpp:544 ../src/sp-item-group.cpp:488
+#: ../src/selection-chemistry.cpp:544
+#: ../src/sp-item-group.cpp:488
 msgid "Ungroup"
 msgstr "Desagrupar"
 
@@ -7784,18 +7643,17 @@ msgstr "Desagrupar"
 msgid "Select <b>object(s)</b> to raise."
 msgstr "Seleccione un ou máis <b>obxectos</b> para elevalos."
 
-#: ../src/selection-chemistry.cpp:611 ../src/selection-chemistry.cpp:672
-#: ../src/selection-chemistry.cpp:707 ../src/selection-chemistry.cpp:772
-msgid ""
-"You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
-msgstr ""
-"Non pode elevar/baixar obxectos de <b>capas</b> ou <b>grupos diferentes</b>."
+#: ../src/selection-chemistry.cpp:611
+#: ../src/selection-chemistry.cpp:672
+#: ../src/selection-chemistry.cpp:707
+#: ../src/selection-chemistry.cpp:772
+msgid "You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
+msgstr "Non pode elevar/baixar obxectos de <b>capas</b> ou <b>grupos diferentes</b>."
 
 #. TRANSLATORS: Only put the word "Raise" in the translation. Means "to raise an object" in the undo history
 #: ../src/selection-chemistry.cpp:651
-#, fuzzy
 msgid "undo_action|Raise"
-msgstr "Función"
+msgstr ""
 
 #: ../src/selection-chemistry.cpp:664
 msgid "Select <b>object(s)</b> to raise to top."
@@ -7835,7 +7693,7 @@ msgstr "Pegar"
 
 #: ../src/selection-chemistry.cpp:880
 msgid "Paste style"
-msgstr ""
+msgstr "Pegar estilo"
 
 #: ../src/selection-chemistry.cpp:889
 #, fuzzy
@@ -7850,18 +7708,16 @@ msgstr "Seleccione algún <b>obxecto</b> ó que pegarlle o tamaño."
 #: ../src/selection-chemistry.cpp:921
 #, fuzzy
 msgid "Remove live path effect"
-msgstr "Eli_minar"
+msgstr "Eliminar o efecto da selección"
 
 #: ../src/selection-chemistry.cpp:933
-#, fuzzy
 msgid "Select <b>object(s)</b> to remove filters from."
-msgstr "Seleccione algún <b>obxecto</b> para elevalo á cima."
+msgstr "Seleccione algúns <b>obxectos</b> para quitarlles os filtros."
 
 #: ../src/selection-chemistry.cpp:943
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1363
-#, fuzzy
 msgid "Remove filter"
-msgstr "Eli_minar"
+msgstr "Eliminar o filtro"
 
 #: ../src/selection-chemistry.cpp:952
 msgid "Paste size"
@@ -7896,9 +7752,8 @@ msgid "No more layers below."
 msgstr "Non hai máis capas embaixo."
 
 #: ../src/selection-chemistry.cpp:1234
-#, fuzzy
 msgid "Remove transform"
-msgstr "Elimina-la transformación"
+msgstr "Eliminaa transformación"
 
 #: ../src/selection-chemistry.cpp:1343
 msgid "Rotate 90&#176; CW"
@@ -7908,14 +7763,16 @@ msgstr "Rotar 90º en sentido horario"
 msgid "Rotate 90&#176; CCW"
 msgstr "Rotar 90º en sentido antihorario"
 
-#: ../src/selection-chemistry.cpp:1388 ../src/seltrans.cpp:457
+#: ../src/selection-chemistry.cpp:1388
+#: ../src/seltrans.cpp:457
 #: ../src/ui/dialog/transformation.cpp:757
 msgid "Rotate"
 msgstr "Rotar"
 
 #: ../src/selection-chemistry.cpp:1420
+#, fuzzy
 msgid "Rotate by pixels"
-msgstr ""
+msgstr "> e < escalan:"
 
 #: ../src/selection-chemistry.cpp:1475
 msgid "Scale by whole factor"
@@ -7923,24 +7780,28 @@ msgstr ""
 
 #: ../src/selection-chemistry.cpp:1491
 msgid "Move vertically"
-msgstr ""
+msgstr "Mover verticalmente"
 
 #: ../src/selection-chemistry.cpp:1494
 msgid "Move horizontally"
-msgstr ""
+msgstr "Mover horizontalmente"
 
-#: ../src/selection-chemistry.cpp:1497 ../src/selection-chemistry.cpp:1525
-#: ../src/seltrans.cpp:451 ../src/ui/dialog/transformation.cpp:680
+#: ../src/selection-chemistry.cpp:1497
+#: ../src/selection-chemistry.cpp:1525
+#: ../src/seltrans.cpp:451
+#: ../src/ui/dialog/transformation.cpp:680
 msgid "Move"
 msgstr "Mover"
 
 #: ../src/selection-chemistry.cpp:1519
+#, fuzzy
 msgid "Move vertically by pixels"
-msgstr ""
+msgstr "As teclas de frecha moven:"
 
 #: ../src/selection-chemistry.cpp:1522
+#, fuzzy
 msgid "Move horizontally by pixels"
-msgstr ""
+msgstr "As teclas de frecha moven:"
 
 #: ../src/selection-chemistry.cpp:1650
 #, fuzzy
@@ -7959,7 +7820,7 @@ msgstr "Crear novos obxectos con:"
 
 #: ../src/selection-chemistry.cpp:1854
 msgid "action|Clone"
-msgstr ""
+msgstr "Clonar"
 
 #: ../src/selection-chemistry.cpp:1871
 msgid "Select a <b>clone</b> to unlink."
@@ -7974,43 +7835,35 @@ msgid "Unlink clone"
 msgstr "Desligar clon"
 
 #: ../src/selection-chemistry.cpp:1938
-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."
+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 ""
 
 #: ../src/selection-chemistry.cpp:1961
-msgid ""
-"<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, "
-"flowed text?)"
+msgid "<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, flowed text?)"
 msgstr ""
 
 #: ../src/selection-chemistry.cpp:1967
-msgid ""
-"The object you're trying to select is <b>not visible</b> (it is in &lt;"
-"defs&gt;)"
+msgid "The object you're trying to select is <b>not visible</b> (it is in &lt;defs&gt;)"
 msgstr ""
 
 #: ../src/selection-chemistry.cpp:1995
 #, fuzzy
 msgid "Select <b>object(s)</b> to convert to marker."
-msgstr "Seleccione <b>obxectos</b> para convertelos en patróns."
+msgstr "Seleccione <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/selection-chemistry.cpp:2061
 #, fuzzy
 msgid "Objects to marker"
-msgstr "Obxectos a patrón"
+msgstr "Obxectos a guías"
 
 #: ../src/selection-chemistry.cpp:2090
 #, fuzzy
 msgid "Select <b>object(s)</b> to convert to guides."
-msgstr "Seleccione <b>obxectos</b> para convertelos en patróns."
+msgstr "Seleccione <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/selection-chemistry.cpp:2101
-#, fuzzy
 msgid "Objects to guides"
-msgstr "Obxectos a patrón"
+msgstr "Obxectos a guías"
 
 #: ../src/selection-chemistry.cpp:2118
 msgid "Select <b>object(s)</b> to convert to pattern."
@@ -8022,12 +7875,11 @@ msgstr "Obxectos a patrón"
 
 #: ../src/selection-chemistry.cpp:2222
 msgid "Select an <b>object with pattern fill</b> to extract objects from."
-msgstr ""
-"Seleccione un <b>obxecto con recheo de patrón</b> para extraer obxectos del."
+msgstr "Seleccione un <b>obxecto con recheo de patrón</b> para extraer obxectos del."
 
 #: ../src/selection-chemistry.cpp:2275
 msgid "<b>No pattern fills</b> in the selection."
-msgstr ""
+msgstr "<b>Non hai recheos con patróns</b> na selección."
 
 #: ../src/selection-chemistry.cpp:2278
 msgid "Pattern to objects"
@@ -8035,13 +7887,12 @@ msgstr "Patrón a obxectos"
 
 #: ../src/selection-chemistry.cpp:2364
 msgid "Select <b>object(s)</b> to make a bitmap copy."
-msgstr ""
-"Seleccione un ou máis <b>obxectos</b> para facer unha copia de mapa de bits."
+msgstr "Seleccione un ou máis <b>obxectos</b> para facer unha copia de mapa de bits."
 
 #: ../src/selection-chemistry.cpp:2368
 #, fuzzy
 msgid "Rendering bitmap..."
-msgstr "_Romper aparte ou fragmentar"
+msgstr "Crear mapa de bits"
 
 #: ../src/selection-chemistry.cpp:2530
 msgid "Create bitmap"
@@ -8056,20 +7907,23 @@ msgid "Select mask object and <b>object(s)</b> to apply clippath or mask to."
 msgstr ""
 
 #: ../src/selection-chemistry.cpp:2672
+#, fuzzy
 msgid "Set clipping path"
-msgstr ""
+msgstr "Eliminar o camiño de corte da selección"
 
 #: ../src/selection-chemistry.cpp:2674
+#, fuzzy
 msgid "Set mask"
-msgstr ""
+msgstr "Establecer o atributo"
 
 #: ../src/selection-chemistry.cpp:2688
 msgid "Select <b>object(s)</b> to remove clippath or mask from."
 msgstr ""
 
 #: ../src/selection-chemistry.cpp:2756
+#, fuzzy
 msgid "Release clipping path"
-msgstr ""
+msgstr "Eliminar o camiño de corte da selección"
 
 #: ../src/selection-chemistry.cpp:2758
 msgid "Release mask"
@@ -8078,17 +7932,16 @@ msgstr ""
 #: ../src/selection-chemistry.cpp:2769
 #, fuzzy
 msgid "Select <b>object(s)</b> to fit canvas to."
-msgstr "Seleccione algún <b>obxecto</b> ó que pegarlle o tamaño."
+msgstr "Seleccione <b>obxectos</b> para convertelos en camiños."
 
 # leo
 #: ../src/selection-chemistry.cpp:2803
 #, fuzzy
 msgid "Fit page to selection"
-msgstr "Axustar a páxina á selección"
+msgstr "A_daptar a páxina á selección"
 
 #. TRANSLATORS: only translate and put "Link" in the translation. It means internet link (anchor)
 #: ../src/selection-describer.cpp:43
-#, fuzzy
 msgid "web|Link"
 msgstr "Ligazón"
 
@@ -8097,24 +7950,28 @@ msgid "Circle"
 msgstr "Círculo"
 
 #. ellipse
-#: ../src/selection-describer.cpp:47 ../src/selection-describer.cpp:73
-#: ../src/ui/dialog/inkscape-preferences.cpp:424 ../src/verbs.cpp:2425
+#: ../src/selection-describer.cpp:47
+#: ../src/selection-describer.cpp:73
+#: ../src/ui/dialog/inkscape-preferences.cpp:424
+#: ../src/verbs.cpp:2425
 msgid "Ellipse"
 msgstr "Elipse"
 
 #: ../src/selection-describer.cpp:49
+#, fuzzy
 msgid "Flowed text"
-msgstr ""
+msgstr "Texto horizontal"
 
 #: ../src/selection-describer.cpp:55
 msgid "Line"
-msgstr ""
+msgstr "Liña"
 
 #: ../src/selection-describer.cpp:57
 msgid "Path"
 msgstr "Camiño"
 
-#: ../src/selection-describer.cpp:59 ../src/widgets/toolbox.cpp:2028
+#: ../src/selection-describer.cpp:59
+#: ../src/widgets/toolbox.cpp:2028
 msgid "Polygon"
 msgstr "Polígono"
 
@@ -8124,34 +7981,38 @@ msgstr ""
 
 #. Rectangle
 #: ../src/selection-describer.cpp:63
-#: ../src/ui/dialog/inkscape-preferences.cpp:414 ../src/verbs.cpp:2421
+#: ../src/ui/dialog/inkscape-preferences.cpp:414
+#: ../src/verbs.cpp:2421
 msgid "Rectangle"
 msgstr "Rectángulo"
 
 #. 3D box
 #: ../src/selection-describer.cpp:65
-#: ../src/ui/dialog/inkscape-preferences.cpp:419 ../src/verbs.cpp:2423
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:419
+#: ../src/verbs.cpp:2423
 msgid "3D Box"
-msgstr "Caixa"
+msgstr "Caixa 3D"
 
 #: ../src/selection-describer.cpp:71
 msgid "object|Clone"
-msgstr ""
+msgstr "Clon"
 
 #: ../src/selection-describer.cpp:75
+#, fuzzy
 msgid "Offset path"
-msgstr ""
+msgstr "Pechando o camiño."
 
 #. spiral
 #: ../src/selection-describer.cpp:77
-#: ../src/ui/dialog/inkscape-preferences.cpp:432 ../src/verbs.cpp:2429
+#: ../src/ui/dialog/inkscape-preferences.cpp:432
+#: ../src/verbs.cpp:2429
 msgid "Spiral"
 msgstr "Espiral"
 
 #. star
 #: ../src/selection-describer.cpp:79
-#: ../src/ui/dialog/inkscape-preferences.cpp:428 ../src/verbs.cpp:2427
+#: ../src/ui/dialog/inkscape-preferences.cpp:428
+#: ../src/verbs.cpp:2427
 #: ../src/widgets/toolbox.cpp:2035
 msgid "Star"
 msgstr "Estrela"
@@ -8162,11 +8023,8 @@ msgstr "Prema na selección para cambiar as asas de escalar polas de rotación"
 
 #. no items
 #: ../src/selection-describer.cpp:109
-msgid ""
-"No objects selected. Click, Shift+click, or drag around objects to select."
-msgstr ""
-"Non hai obxectos selecccionados. Prema, Shift+clic, ou arrastre arredor dos "
-"obxectos para seleccionalos."
+msgid "No objects selected. Click, Shift+click, or drag around objects to select."
+msgstr "Non hai obxectos selecccionados. Prema, Shift+clic, ou arrastre arredor dos obxectos para seleccionalos."
 
 #: ../src/selection-describer.cpp:118
 msgid "root"
@@ -8193,35 +8051,36 @@ msgid " in %s"
 msgstr " na %s"
 
 #: ../src/selection-describer.cpp:152
-#, c-format
+#, fuzzy, c-format
 msgid " in group %s (%s)"
-msgstr ""
+msgstr " no grupo %s (%s)"
 
 #: ../src/selection-describer.cpp:154
-#, c-format
+#, fuzzy, c-format
 msgid " in <b>%i</b> parents (%s)"
 msgid_plural " in <b>%i</b> parents (%s)"
-msgstr[0] ""
+msgstr[0] " no grupo %s (%s)"
 msgstr[1] ""
 
 #: ../src/selection-describer.cpp:157
 #, c-format
 msgid " in <b>%i</b> layers"
 msgid_plural " in <b>%i</b> layers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] " en <b>%i</b> capa"
+msgstr[1] " en <b>%i</b> capas"
 
 #: ../src/selection-describer.cpp:167
 msgid "Use <b>Shift+D</b> to look up original"
-msgstr ""
+msgstr "Use <b>Shift+D</b> para buscar o orixinal"
 
 #: ../src/selection-describer.cpp:171
 msgid "Use <b>Shift+D</b> to look up path"
-msgstr ""
+msgstr "Use <b>Shift+D</b> para buscar un camiño"
 
 #: ../src/selection-describer.cpp:175
+#, fuzzy
 msgid "Use <b>Shift+D</b> to look up frame"
-msgstr ""
+msgstr "Use <b>Shift+D</b> para buscar o orixinal"
 
 #. this is only used with 2 or more objects
 #: ../src/selection-describer.cpp:190
@@ -8268,65 +8127,45 @@ msgstr[1] "<b>%i</b> obxectos de <b>%i</b> tipos"
 msgid "%s%s. %s."
 msgstr "%s%s. %s."
 
-#: ../src/seltrans.cpp:460 ../src/ui/dialog/transformation.cpp:815
+#: ../src/seltrans.cpp:460
+#: ../src/ui/dialog/transformation.cpp:815
 msgid "Skew"
 msgstr ""
 
 #: ../src/seltrans.cpp:472
 msgid "Set center"
-msgstr ""
+msgstr "Definir o centro"
 
 #: ../src/seltrans.cpp:569
-msgid ""
-"<b>Center</b> of rotation and skewing: drag to reposition; scaling with "
-"Shift also uses this center"
-msgstr ""
-"<b>Centro</b> de rotación e inclinación: arrastre para situalo noutro sitio; "
-"se escala con Shift tamén usa este centro"
+msgid "<b>Center</b> of rotation and skewing: drag to reposition; scaling with Shift also uses this center"
+msgstr "<b>Centro</b> de rotación e inclinación: arrastre para situalo noutro sitio; se escala con Shift tamén usa este centro"
 
 #: ../src/seltrans.cpp:596
-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>Comprimir ou estirar</b> a selección; con <b>Ctrl</b> para escalar de "
-"xeito uniforme; con <b>Shift</b> para escalar arredor do centro de rotación"
+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>Comprimir ou estirar</b> a selección; con <b>Ctrl</b> para escalar de xeito uniforme; con <b>Shift</b> para escalar arredor do centro de rotación"
 
 #: ../src/seltrans.cpp:597
-msgid ""
-"<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</"
-"b> to scale around rotation center"
-msgstr ""
-"<b>Escalar</b> a selección; con <b>Ctrl</b> para escalar de xeito uniforme; "
-"con <b>Shift</b> para escalar dende o centro de rotación"
+msgid "<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</b> to scale around rotation center"
+msgstr "<b>Escalar</b> a selección; con <b>Ctrl</b> para escalar de xeito uniforme; con <b>Shift</b> para escalar dende o centro de rotación"
 
 #: ../src/seltrans.cpp:601
-#, fuzzy
-msgid ""
-"<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to "
-"skew around the opposite side"
-msgstr ""
-"<b>Inclinar</b> a selección; con <b>Ctrl</b> to snap angle; con <b>Shift</b> "
-"para inclinar arredor da esquina oposta"
+msgid "<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to skew around the opposite side"
+msgstr "<b>Inclinar</b> a selección; con <b>Ctrl</b> para axustar ó angulo; con <b>Shift</b> para inclinar arredor da esquina oposta"
 
 #: ../src/seltrans.cpp:602
-#, fuzzy
-msgid ""
-"<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> "
-"to rotate around the opposite corner"
-msgstr ""
-"<b>Rotar</b> a selección; con <b>Ctrl</b> para axustar o ángulo snap angle; "
-"con <b>Shift</b> para rotar arredor da esquina oposta"
+msgid "<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to rotate around the opposite corner"
+msgstr "<b>Rotar</b> a selección; con <b>Ctrl</b> para axustar o ángulo; con <b>Shift</b> para rotar arredor da esquina oposta"
 
 #: ../src/seltrans.cpp:736
+#, fuzzy
 msgid "Reset center"
-msgstr ""
+msgstr "Centrar as liñas"
 
-#: ../src/seltrans.cpp:980 ../src/seltrans.cpp:1079
+#: ../src/seltrans.cpp:980
+#: ../src/seltrans.cpp:1079
 #, c-format
 msgid "<b>Scale</b>: %0.2f%% x %0.2f%%; with <b>Ctrl</b> to lock ratio"
-msgstr ""
-"<b>Escalar</b>: %0.2f%% x %0.2f%%; con <b>Ctrl</b> para bloquear a razón"
+msgstr "<b>Escalar</b>: %0.2f%% x %0.2f%%; con <b>Ctrl</b> para bloquear a razón"
 
 #. TRANSLATORS: don't modify the first ";"
 #. (it will NOT be displayed as ";" - only the second one will be)
@@ -8349,14 +8188,13 @@ msgstr "Mover o <b>centro</b> a %s, %s"
 
 #: ../src/seltrans.cpp:1457
 #, 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"
+msgid "<b>Move</b> by %s, %s; with <b>Ctrl</b> to restrict to horizontal/vertical; with <b>Shift</b> to disable snapping"
 msgstr ""
 
 #: ../src/shape-editor.cpp:397
+#, fuzzy
 msgid "Drag curve"
-msgstr ""
+msgstr "Limiar de clic/arrastre:"
 
 #: ../src/sp-anchor.cpp:178
 #, c-format
@@ -8367,7 +8205,8 @@ msgstr "<b>Ligazón</b> a %s"
 msgid "<b>Link</b> without URI"
 msgstr "<b>Ligazón</b> sen URI"
 
-#: ../src/sp-ellipse.cpp:494 ../src/sp-ellipse.cpp:873
+#: ../src/sp-ellipse.cpp:494
+#: ../src/sp-ellipse.cpp:873
 msgid "<b>Ellipse</b>"
 msgstr "<b>Elipse</b>"
 
@@ -8397,10 +8236,10 @@ msgid "Flow excluded region"
 msgstr ""
 
 #: ../src/sp-flowtext.cpp:377
-#, c-format
+#, fuzzy, c-format
 msgid "<b>Flowed text</b> (%d character)"
 msgid_plural "<b>Flowed text</b> (%d characters)"
-msgstr[0] ""
+msgstr[0] "Inserir caracter Unicode"
 msgstr[1] ""
 
 #: ../src/sp-flowtext.cpp:379
@@ -8411,18 +8250,19 @@ msgstr[0] ""
 msgstr[1] ""
 
 #: ../src/sp-guide.cpp:285
+#, fuzzy
 msgid "Guides around page"
-msgstr ""
+msgstr "Amosa-lo _bordo da páxina"
 
 #: ../src/sp-guide.cpp:418
 #, fuzzy, c-format
 msgid "vertical, at %s"
-msgstr "liña-guía vertical"
+msgstr "píxels con"
 
 #: ../src/sp-guide.cpp:421
 #, fuzzy, c-format
 msgid "horizontal, at %s"
-msgstr "liña-guía horizontal"
+msgstr "píxels con"
 
 #: ../src/sp-guide.cpp:426
 #, c-format
@@ -8436,7 +8276,7 @@ msgstr ""
 #: ../src/sp-image.cpp:1106
 #, c-format
 msgid "<b>Image with bad reference</b>: %s"
-msgstr ""
+msgstr "<b>Imaxe cunha referencia incorrecta</b>: %s"
 
 #: ../src/sp-image.cpp:1107
 #, c-format
@@ -8444,8 +8284,9 @@ msgid "<b>Image</b> %d &#215; %d: %s"
 msgstr "<b>Imaxe</b> %d &#215; %d: %s"
 
 #: ../src/spiral-context.cpp:341
+#, fuzzy
 msgid "<b>Ctrl</b>: snap angle"
-msgstr ""
+msgstr "Ctrl+A, Tab, Shift+Tab:"
 
 #: ../src/spiral-context.cpp:343
 msgid "<b>Alt</b>: lock spiral radius"
@@ -8453,14 +8294,12 @@ msgstr ""
 
 #: ../src/spiral-context.cpp:466
 #, c-format
-msgid ""
-"<b>Spiral</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
+msgid "<b>Spiral</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
 msgstr ""
 
 #: ../src/spiral-context.cpp:487
-#, fuzzy
 msgid "Create spiral"
-msgstr "Crear espirais"
+msgstr "Crear unha espiral"
 
 #: ../src/sp-item.cpp:959
 msgid "Object"
@@ -8477,9 +8316,9 @@ msgid "%s; <i>masked</i>"
 msgstr "<i>%s</i>"
 
 #: ../src/sp-item.cpp:986
-#, fuzzy, c-format
+#, c-format
 msgid "%s; <i>filtered</i>"
-msgstr "<i>%s</i>"
+msgstr "%s; <i>filtrado</i>"
 
 #: ../src/sp-item-group.cpp:738
 #, c-format
@@ -8490,9 +8329,10 @@ msgstr[1] "<b>Grupo</b> de <b>%d</b> obxectos"
 
 #: ../src/sp-line.cpp:188
 msgid "<b>Line</b>"
-msgstr ""
+msgstr "<b>Liña</b>"
 
-#: ../src/splivarot.cpp:71 ../src/splivarot.cpp:77
+#: ../src/splivarot.cpp:71
+#: ../src/splivarot.cpp:77
 msgid "Union"
 msgstr "Unión"
 
@@ -8500,50 +8340,43 @@ msgstr "Unión"
 msgid "Intersection"
 msgstr "Intersección"
 
-#: ../src/splivarot.cpp:89 ../src/splivarot.cpp:95
+#: ../src/splivarot.cpp:89
+#: ../src/splivarot.cpp:95
 msgid "Difference"
-msgstr ""
+msgstr "Diferencia"
 
 #: ../src/splivarot.cpp:101
 msgid "Exclusion"
-msgstr ""
+msgstr "Exclusión"
 
 #: ../src/splivarot.cpp:106
 msgid "Division"
-msgstr ""
+msgstr "División"
 
 #: ../src/splivarot.cpp:111
-#, fuzzy
 msgid "Cut path"
-msgstr "Cortar _Camiño"
+msgstr "Cortar camiño"
 
 #: ../src/splivarot.cpp:128
 msgid "Select <b>at least 2 paths</b> to perform a boolean operation."
-msgstr ""
+msgstr "Seleccione <b>polo menos 2 camiños</b> para levar a cabo unha operación booleana."
 
 #: ../src/splivarot.cpp:132
-#, fuzzy
 msgid "Select <b>at least 1 path</b> to perform a boolean union."
-msgstr "Seleccione <b>alomenos dous obxectos</b> para combinalos."
+msgstr "Seleccione <b>polo menos 1 camiño</b> para levar a cabo unha unión booleana."
 
 #: ../src/splivarot.cpp:138
-msgid ""
-"Select <b>exactly 2 paths</b> to perform difference, XOR, division, or path "
-"cut."
+msgid "Select <b>exactly 2 paths</b> to perform difference, XOR, division, or path cut."
 msgstr ""
 
-#: ../src/splivarot.cpp:155 ../src/splivarot.cpp:170
-msgid ""
-"Unable to determine the <b>z-order</b> of the objects selected for "
-"difference, XOR, division, or path cut."
+#: ../src/splivarot.cpp:155
+#: ../src/splivarot.cpp:170
+msgid "Unable to determine the <b>z-order</b> of the objects selected for difference, XOR, division, or path cut."
 msgstr ""
 
 #: ../src/splivarot.cpp:200
-msgid ""
-"One of the objects is <b>not a path</b>, cannot perform boolean operation."
-msgstr ""
-"Un dos obxectos <b>non é un camiño</b>, non se pode levar a cabo a operación "
-"booleana."
+msgid "One of the objects is <b>not a path</b>, cannot perform boolean operation."
+msgstr "Un dos obxectos <b>non é un camiño</b>, non se pode levar a cabo a operación booleana."
 
 #: ../src/splivarot.cpp:610
 #, fuzzy
@@ -8551,9 +8384,8 @@ msgid "Select <b>stroked path(s)</b> to convert stroke to path."
 msgstr "Seleccione <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/splivarot.cpp:894
-#, fuzzy
 msgid "Convert stroke to path"
-msgstr "Converte-lo texto en camiño"
+msgstr "Converter trazo en camiño."
 
 #. TRANSLATORS: "to outline" means "to convert stroke to path"
 #: ../src/splivarot.cpp:897
@@ -8565,29 +8397,32 @@ msgstr "<b>Non hai camiños</b> para simplificar na selección."
 msgid "Selected object is <b>not a path</b>, cannot inset/outset."
 msgstr ""
 
-#: ../src/splivarot.cpp:1101 ../src/splivarot.cpp:1170
+#: ../src/splivarot.cpp:1101
+#: ../src/splivarot.cpp:1170
 #, fuzzy
 msgid "Create linked offset"
-msgstr "_Crea Ligazón"
+msgstr "Crear nova reixa"
 
-#: ../src/splivarot.cpp:1102 ../src/splivarot.cpp:1171
+#: ../src/splivarot.cpp:1102
+#: ../src/splivarot.cpp:1171
 #, fuzzy
 msgid "Create dynamic offset"
-msgstr "Crear novos obxectos con:"
+msgstr "Crear nova reixa"
 
 #: ../src/splivarot.cpp:1198
+#, fuzzy
 msgid "Select <b>path(s)</b> to inset/outset."
-msgstr ""
+msgstr "Seleccione un ou máis <b>camiños</b> para rompelos."
 
 #: ../src/splivarot.cpp:1416
 #, fuzzy
 msgid "Outset path"
-msgstr "Cortar _Camiño"
+msgstr "Pechando o camiño."
 
 #: ../src/splivarot.cpp:1416
 #, fuzzy
 msgid "Inset path"
-msgstr "Cortar _Camiño"
+msgstr "Pechando o camiño."
 
 #: ../src/splivarot.cpp:1418
 msgid "<b>No paths</b> to inset/outset in the selection."
@@ -8595,22 +8430,21 @@ msgstr ""
 
 #: ../src/splivarot.cpp:1579
 msgid "Simplifying paths (separately):"
-msgstr ""
+msgstr "Simplificando camiños (por separado):"
 
 #: ../src/splivarot.cpp:1581
-#, fuzzy
 msgid "Simplifying paths:"
-msgstr "Simplificar"
+msgstr "Simplificando camiños:"
 
 #: ../src/splivarot.cpp:1618
-#, fuzzy, c-format
+#, c-format
 msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
-msgstr "Seleccionouse <b>%i</b> nodo de <b>%i</b>. %s."
+msgstr "%s <b>%d</b> de <b>%d</b> camiños simplificados..."
 
 #: ../src/splivarot.cpp:1629
 #, c-format
 msgid "<b>%d</b> paths simplified."
-msgstr ""
+msgstr "<b>%d</b> camiños simplificados."
 
 #: ../src/splivarot.cpp:1645
 msgid "Select <b>path(s)</b> to simplify."
@@ -8630,11 +8464,13 @@ msgstr "<b>Non hai camiños</b> para simplificar na selección."
 msgid "<b>Linked offset</b>, %s by %f pt"
 msgstr ""
 
-#: ../src/sp-offset.cpp:433 ../src/sp-offset.cpp:437
+#: ../src/sp-offset.cpp:433
+#: ../src/sp-offset.cpp:437
 msgid "outset"
 msgstr ""
 
-#: ../src/sp-offset.cpp:433 ../src/sp-offset.cpp:437
+#: ../src/sp-offset.cpp:433
+#: ../src/sp-offset.cpp:437
 msgid "inset"
 msgstr ""
 
@@ -8645,11 +8481,11 @@ msgid "<b>Dynamic offset</b>, %s by %f pt"
 msgstr ""
 
 #: ../src/sp-path.cpp:135
-#, fuzzy, c-format
+#, c-format
 msgid "<b>Path</b> (%i node, path effect)"
 msgid_plural "<b>Path</b> (%i nodes, path effect)"
-msgstr[0] "<b>Camiño</b> (%i nodo)"
-msgstr[1] "<b>Camiño</b> (%i nodos)"
+msgstr[0] "<b>Camiño</b> (%i nodo, efecto de camiño)"
+msgstr[1] "<b>Camiño</b> (%i nodos, efecto de camiño)"
 
 #: ../src/sp-path.cpp:138
 #, c-format
@@ -8661,12 +8497,12 @@ msgstr[1] "<b>Camiño</b> (%i nodos)"
 #: ../src/sp-path.cpp:540
 #, fuzzy
 msgid "Creating single dot"
-msgstr "Creando novo camiño"
+msgstr "Creando novo conectador"
 
 #: ../src/sp-path.cpp:541
 #, fuzzy
 msgid "Create single dot"
-msgstr "Crear un Mosaico de Clons..."
+msgstr "Crear nova reixa"
 
 #: ../src/sp-polygon.cpp:235
 msgid "<b>Polygon</b>"
@@ -8702,21 +8538,22 @@ msgstr[0] "<b>Polígono</b> de %d vértice"
 msgstr[1] "<b>Polígono</b> de %d vértices"
 
 #: ../src/sp-switch.cpp:100
-#, c-format
+#, fuzzy, c-format
 msgid "<b>Conditional group</b> of <b>%d</b> object"
 msgid_plural "<b>Conditional group</b> of <b>%d</b> objects"
-msgstr[0] ""
+msgstr[0] "Establecer o ID do obxecto"
 msgstr[1] ""
 
 #. TRANSLATORS: For description of font with no name.
 #: ../src/sp-text.cpp:414
+#, fuzzy
 msgid "&lt;no name found&gt;"
-msgstr ""
+msgstr "Non hai definicións sen usar en &lt;defs&gt;."
 
 #: ../src/sp-text.cpp:420
 #, c-format
 msgid "<b>Text on path</b> (%s, %s)"
-msgstr ""
+msgstr "<b>Texto en camiño</b> (%s, %s)"
 
 #: ../src/sp-text.cpp:421
 #, c-format
@@ -8726,11 +8563,12 @@ msgstr "<b>Texto</b> (%s, %s)"
 #: ../src/sp-tref.cpp:368
 #, fuzzy, c-format
 msgid "<b>Cloned character data</b>%s%s"
-msgstr "<b>Clon</b> de: %s"
+msgstr "Inserir caracter Unicode"
 
 #: ../src/sp-tref.cpp:369
+#, fuzzy
 msgid " from "
-msgstr ""
+msgstr "Coller da selección"
 
 #: ../src/sp-tref.cpp:374
 #, fuzzy
@@ -8740,7 +8578,7 @@ msgstr "<b>Clon orfo</b>"
 #: ../src/sp-tspan.cpp:284
 #, fuzzy
 msgid "<b>Text span</b>"
-msgstr "<b>Rectángulo</b>"
+msgstr "Texto horizontal"
 
 #. TRANSLATORS: Used for statusbar description for long <use> chains:
 #. * "Clone of: Clone of: ... in Layer 1".
@@ -8763,8 +8601,7 @@ msgstr ""
 
 #: ../src/star-context.cpp:476
 #, c-format
-msgid ""
-"<b>Polygon</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
+msgid "<b>Polygon</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
 msgstr ""
 
 #: ../src/star-context.cpp:477
@@ -8773,32 +8610,28 @@ msgid "<b>Star</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
 msgstr ""
 
 #: ../src/star-context.cpp:500
-#, fuzzy
 msgid "Create star"
-msgstr "Crear mapa de bits"
+msgstr "Crear unha estrela"
 
 #: ../src/text-chemistry.cpp:104
 msgid "Select <b>a text and a path</b> to put text on path."
 msgstr "Seleccione <b>un texto e un camiño</b> para poñer o texto no camiño."
 
 #: ../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."
+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 ""
 
 #. 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."
+msgid "You cannot put text on a rectangle in this version. Convert rectangle to path first."
 msgstr ""
 
 #: ../src/text-chemistry.cpp:125
 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:2283
+#: ../src/text-chemistry.cpp:192
+#: ../src/verbs.cpp:2283
 msgid "Put text on path"
 msgstr "Poñer texto no camiño"
 
@@ -8808,24 +8641,25 @@ msgstr ""
 
 #: ../src/text-chemistry.cpp:226
 msgid "<b>No texts-on-paths</b> in the selection."
-msgstr ""
+msgstr "<b>Non hai textos en camiño</b> na selección."
 
-#: ../src/text-chemistry.cpp:229 ../src/verbs.cpp:2285
+#: ../src/text-chemistry.cpp:229
+#: ../src/verbs.cpp:2285
 msgid "Remove text from path"
-msgstr ""
+msgstr "Eliminar o texto dun camiño"
 
-#: ../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 ""
 
 #: ../src/text-chemistry.cpp:293
+#, fuzzy
 msgid "Remove manual kerns"
-msgstr ""
+msgstr "Eliminar a reixa seleccionada."
 
 #: ../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."
+msgid "Select <b>a text</b> and one or more <b>paths or shapes</b> to flow text into frame."
 msgstr ""
 
 #: ../src/text-chemistry.cpp:381
@@ -8838,8 +8672,9 @@ msgid "Select <b>a flowed text</b> to unflow it."
 msgstr ""
 
 #: ../src/text-chemistry.cpp:470
+#, fuzzy
 msgid "Unflow flowed text"
-msgstr ""
+msgstr "Buscar obxectos de texto"
 
 #: ../src/text-chemistry.cpp:482
 #, fuzzy
@@ -8853,7 +8688,7 @@ msgstr ""
 #: ../src/text-chemistry.cpp:528
 #, fuzzy
 msgid "Convert flowed text to text"
-msgstr "Converte-lo texto en camiño"
+msgstr "Converter textos en camiños"
 
 #: ../src/text-chemistry.cpp:533
 #, fuzzy
@@ -8862,45 +8697,41 @@ msgstr "Na selección non hai <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/text-context.cpp:452
 msgid "<b>Click</b> to edit the text, <b>drag</b> to select part of the text."
-msgstr ""
-"<b>Prema</b> para edita-lo texto, <b>arrastre</b> para seleccionar parte do "
-"texto."
+msgstr "<b>Prema</b> para edita-lo texto, <b>arrastre</b> para seleccionar parte do texto."
 
 #: ../src/text-context.cpp:454
-msgid ""
-"<b>Click</b> to edit the flowed text, <b>drag</b> to select part of the text."
+msgid "<b>Click</b> to edit the flowed text, <b>drag</b> to select part of the text."
 msgstr ""
 
 #: ../src/text-context.cpp:508
-#, fuzzy
 msgid "Create text"
-msgstr "Crear"
+msgstr "Crear texto"
 
 #: ../src/text-context.cpp:532
-#, fuzzy
 msgid "Non-printable character"
 msgstr "Caracter non imprimible"
 
 #: ../src/text-context.cpp:547
 msgid "Insert Unicode character"
-msgstr ""
+msgstr "Inserir caracter Unicode"
 
 #: ../src/text-context.cpp:582
-#, fuzzy, c-format
+#, c-format
 msgid "Unicode (<b>Enter</b> to finish): %s: %s"
-msgstr "Mover o <b>centro</b> a %s, %s"
+msgstr "Unicode (<b>Intro</b> para rematar): %s: %s"
 
-#: ../src/text-context.cpp:584 ../src/text-context.cpp:849
-#, fuzzy
+#: ../src/text-context.cpp:584
+#: ../src/text-context.cpp:849
 msgid "Unicode (<b>Enter</b> to finish): "
-msgstr "Mover o <b>centro</b> a %s, %s"
+msgstr "Unicode (<b>Intro</b> para rematar): "
 
 #: ../src/text-context.cpp:659
 #, c-format
 msgid "<b>Flowed text frame</b>: %s &#215; %s"
 msgstr ""
 
-#: ../src/text-context.cpp:691 ../src/text-context.cpp:1544
+#: ../src/text-context.cpp:691
+#: ../src/text-context.cpp:1544
 msgid "Type text; <b>Enter</b> to start new line."
 msgstr "Introduza texto; <b>Intro</b> para comezar unha nova liña."
 
@@ -8911,48 +8742,46 @@ msgstr ""
 #: ../src/text-context.cpp:706
 #, fuzzy
 msgid "Create flowed text"
-msgstr "Crear Clo_n"
+msgstr "Crear novo nodo de texto"
 
 #: ../src/text-context.cpp:708
-msgid ""
-"The frame is <b>too small</b> for the current font size. Flowed text not "
-"created."
+msgid "The frame is <b>too small</b> for the current font size. Flowed text not created."
 msgstr ""
 
 #: ../src/text-context.cpp:834
+#, fuzzy
 msgid "No-break space"
-msgstr ""
+msgstr "Non hai ningún zoom anterior."
 
 #: ../src/text-context.cpp:836
 msgid "Insert no-break space"
 msgstr ""
 
 #: ../src/text-context.cpp:873
-#, fuzzy
 msgid "Make bold"
-msgstr "Completar"
+msgstr "Facer negra"
 
 #: ../src/text-context.cpp:891
 msgid "Make italic"
-msgstr ""
+msgstr "Converter a itálica"
 
 #: ../src/text-context.cpp:930
-#, fuzzy
 msgid "New line"
-msgstr "Nova vista"
+msgstr "Nova liña"
 
 #: ../src/text-context.cpp:964
 msgid "Backspace"
 msgstr ""
 
 #: ../src/text-context.cpp:1012
+#, fuzzy
 msgid "Kern to the left"
-msgstr ""
+msgstr "Aliñar as liñas á esqueda"
 
 #: ../src/text-context.cpp:1034
 #, fuzzy
 msgid "Kern to the right"
-msgstr "Aliñar abaixo á dereita"
+msgstr "Aliñar as liñas á dereita"
 
 #: ../src/text-context.cpp:1056
 msgid "Kern up"
@@ -8963,19 +8792,17 @@ msgid "Kern down"
 msgstr ""
 
 #: ../src/text-context.cpp:1135
-#, fuzzy
 msgid "Rotate counterclockwise"
-msgstr "Rotar en sentido horario"
+msgstr "Rotar en sentido antihorario"
 
 #: ../src/text-context.cpp:1156
-#, fuzzy
 msgid "Rotate clockwise"
 msgstr "Rotar en sentido horario"
 
 #: ../src/text-context.cpp:1173
 #, fuzzy
 msgid "Contract line spacing"
-msgstr "Espaciado de liñas:"
+msgstr "_Cor das liñas da reixa:"
 
 #: ../src/text-context.cpp:1181
 msgid "Contract letter spacing"
@@ -8984,7 +8811,7 @@ msgstr ""
 #: ../src/text-context.cpp:1200
 #, fuzzy
 msgid "Expand line spacing"
-msgstr "Espaciado de liñas:"
+msgstr "_Cor das liñas da reixa:"
 
 #: ../src/text-context.cpp:1208
 #, fuzzy
@@ -8992,147 +8819,98 @@ msgid "Expand letter spacing"
 msgstr "Establecer espacio:"
 
 #: ../src/text-context.cpp:1312
-#, fuzzy
 msgid "Paste text"
-msgstr "Pegar E_stilo"
+msgstr "Pegar texto"
 
 #: ../src/text-context.cpp:1542
 msgid "Type flowed text; <b>Enter</b> to start new paragraph."
 msgstr ""
 
-#: ../src/text-context.cpp:1552 ../src/tools-switch.cpp:211
-msgid ""
-"<b>Click</b> to select or create text, <b>drag</b> to create flowed text; "
-"then type."
+#: ../src/text-context.cpp:1552
+#: ../src/tools-switch.cpp:211
+msgid "<b>Click</b> to select or create text, <b>drag</b> to create flowed text; then type."
 msgstr ""
 
 #: ../src/text-context.cpp:1659
-#, fuzzy
 msgid "Type text"
-msgstr "T_ipo:"
+msgstr "Introducir texto"
 
 #: ../src/text-editing.cpp:40
 msgid "You cannot edit <b>cloned character data</b>."
 msgstr ""
 
 #: ../src/tools-switch.cpp:151
-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 ""
-"Para editar un camiño, <b>prema</b>, <b>Shift+clic</b>, ou <b>arrastre "
-"arredor</b> dos nodos para seleccionalos, despois <b>arrastre</b> os nodos e "
-"as asas. <b>Prema</b> nun obxecto para seleccionalo."
+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 "Para editar un camiño, <b>prema</b>, <b>Shift+clic</b>, ou <b>arrastre arredor</b> dos nodos para seleccionalos, despois <b>arrastre</b> os nodos e as asas. <b>Prema</b> nun obxecto para seleccionalo."
 
 #: ../src/tools-switch.cpp:157
 msgid "To tweak a path by pushing, select it and drag over it."
 msgstr ""
 
 #: ../src/tools-switch.cpp:163
-msgid ""
-"<b>Drag</b> to create a rectangle. <b>Drag controls</b> to round corners and "
-"resize. <b>Click</b> to select."
-msgstr ""
-"<b>Arrastre</b> para crear un rectángulo. <b>Arrastre os controis</b> para "
-"redondearlle as esquinas e redimensionalo. <b>Prema nel</b> para "
-"seleccionalo."
+msgid "<b>Drag</b> to create a rectangle. <b>Drag controls</b> to round corners and resize. <b>Click</b> to select."
+msgstr "<b>Arrastre</b> para crear un rectángulo. <b>Arrastre os controis</b> para redondearlle as esquinas e redimensionalo. <b>Prema nel</b> para seleccionalo."
 
 #: ../src/tools-switch.cpp:169
 #, fuzzy
-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>Arrastre</b> para crear unha estrela. <b>Arrastre os controis</b> para "
-"facer editar a figura de estrela. <b>Prema</b> para seleccionar."
+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>Arrastre</b> para crear unha estrela. <b>Arrastre os controis</b> para facer editar a figura de estrela. <b>Prema</b> para seleccionar."
 
 #: ../src/tools-switch.cpp:175
-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>Arrastre</b> para crear unha elipse. <b>Arrastre os controis</b> para "
-"facer un arco ou un sector. <b>Prema</b> para seleccionar."
+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>Arrastre</b> para crear unha elipse. <b>Arrastre os controis</b> para facer un arco ou un sector. <b>Prema</b> para seleccionar."
 
 #: ../src/tools-switch.cpp:181
-msgid ""
-"<b>Drag</b> to create a star. <b>Drag controls</b> to edit the star shape. "
-"<b>Click</b> to select."
-msgstr ""
-"<b>Arrastre</b> para crear unha estrela. <b>Arrastre os controis</b> para "
-"facer editar a figura de estrela. <b>Prema</b> para seleccionar."
+msgid "<b>Drag</b> to create a star. <b>Drag controls</b> to edit the star shape. <b>Click</b> to select."
+msgstr "<b>Arrastre</b> para crear unha estrela. <b>Arrastre os controis</b> para facer editar a figura de estrela. <b>Prema</b> para seleccionar."
 
 #: ../src/tools-switch.cpp:187
-msgid ""
-"<b>Drag</b> to create a spiral. <b>Drag controls</b> to edit the spiral "
-"shape. <b>Click</b> to select."
-msgstr ""
-"<b>Arrastre</b> para crear unha espiral. <b>Arrastre os controis</b> para "
-"facer editar a figura de espiral. <b>Prema</b> para seleccionar."
+msgid "<b>Drag</b> to create a spiral. <b>Drag controls</b> to edit the spiral shape. <b>Click</b> to select."
+msgstr "<b>Arrastre</b> para crear unha espiral. <b>Arrastre os controis</b> para facer editar a figura de espiral. <b>Prema</b> para seleccionar."
 
 #: ../src/tools-switch.cpp:193
-#, fuzzy
-msgid ""
-"<b>Drag</b> to create a freehand line. Start drawing with <b>Shift</b> to "
-"append to selected path. <b>Ctrl+click</b> to create single dots."
-msgstr ""
-"<b>Arrastre</b> para crear unha liña a man alzada. Comece a debuxar con "
-"<b>Shift</b> para engadir ó camiño seleccionado."
+msgid "<b>Drag</b> to create a freehand line. Start drawing with <b>Shift</b> to append to selected path. <b>Ctrl+click</b> to create single dots."
+msgstr "<b>Arrastre</b> para crear unha liña a man alzada. Comece a debuxar con <b>Shift</b> para engadir ó camiño seleccionado. <b>Ctrl+clic</b> para crear só puntos."
 
 #: ../src/tools-switch.cpp:199
-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."
+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."
 msgstr ""
 
 #: ../src/tools-switch.cpp:205
-msgid ""
-"<b>Drag</b> to draw a calligraphic stroke; with <b>Ctrl</b> to track a "
-"guide, with <b>Alt</b> to thin/thicken. <b>Arrow keys</b> adjust width (left/"
-"right) and angle (up/down)."
+msgid "<b>Drag</b> to draw a calligraphic stroke; with <b>Ctrl</b> to track a guide, with <b>Alt</b> to thin/thicken. <b>Arrow keys</b> adjust width (left/right) and angle (up/down)."
 msgstr ""
 
 #: ../src/tools-switch.cpp:217
-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>Arrastre</b> ou <b>faga dobre clic</b> para crear un degradado nos "
-"obxectos seleccionados, <b>arrastre as asas</b> para modificar os degradados."
+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>Arrastre</b> ou <b>faga dobre clic</b> para crear un degradado nos obxectos seleccionados, <b>arrastre as asas</b> para modificar os degradados."
 
 #: ../src/tools-switch.cpp:223
-msgid ""
-"<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to "
-"zoom out."
-msgstr ""
-"<b>Prema</b> ou <b>arrastre arredor dunha área</b> para ampliala, <b>Shift"
-"+clic</b> para reducila."
+msgid "<b>Click</b> or <b>drag around an area</b> to zoom in, <b>Shift+click</b> to zoom out."
+msgstr "<b>Prema</b> ou <b>arrastre arredor dunha área</b> para ampliala, <b>Shift+clic</b> para reducila."
 
 #: ../src/tools-switch.cpp:235
 msgid "<b>Click and drag</b> between shapes to create a connector."
 msgstr "<b>Prema e arrastre</b> dunha figura a outra para crear un conectador."
 
 #: ../src/tools-switch.cpp:241
-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."
+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:247
 #, fuzzy
 msgid "<b>Drag</b> to erase."
-msgstr "<b>Ligazón</b> a %s"
+msgstr "Arrastre para reordenar os nodos"
 
 #: ../src/trace/potrace/inkscape-potrace.cpp:524
 #: ../src/trace/potrace/inkscape-potrace.cpp:598
 #, c-format
 msgid "Trace: %d.  %ld nodes"
-msgstr ""
+msgstr "Vectorizar: %d.  %ld nodos"
 
-#: ../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 "Seleccione unha <b>imaxe</b> para vectorizala"
 
@@ -9145,31 +8923,31 @@ msgid "Select one image and one or more shapes above it"
 msgstr "Seleccione unha imaxe e unha ou máis figuras enriba dela"
 
 #: ../src/trace/trace.cpp:234
+#, fuzzy
 msgid "Trace: No active desktop"
-msgstr ""
+msgstr "Vectorizar: A imaxe non ten datos de mapa de bits"
 
 #: ../src/trace/trace.cpp:333
 msgid "Invalid SIOX result"
 msgstr "Resultado SIOX incorrecto"
 
 #: ../src/trace/trace.cpp:438
+#, fuzzy
 msgid "Trace: No active document"
-msgstr ""
+msgstr "Non hai degradados no documento"
 
 #: ../src/trace/trace.cpp:461
 msgid "Trace: Image has no bitmap data"
-msgstr ""
+msgstr "Vectorizar: A imaxe non ten datos de mapa de bits"
 
 #: ../src/trace/trace.cpp:468
-#, fuzzy
 msgid "Trace: Starting trace..."
-msgstr "_Vectorizar Mapa de Bits..."
+msgstr "Vectorizar: Iniciando a vectorización..."
 
 #. ## inform the document, so we can undo
 #: ../src/trace/trace.cpp:570
-#, fuzzy
 msgid "Trace bitmap"
-msgstr "Crear mapa de bits"
+msgstr "Vectorizar un mapa de bits"
 
 #: ../src/trace/trace.cpp:574
 #, c-format
@@ -9184,28 +8962,28 @@ msgstr ""
 #, fuzzy, c-format
 msgid "<b>Pushing %d</b> selected object"
 msgid_plural "<b>Pushing %d</b> selected objects"
-msgstr[0] "Non se eliminou <b>nada</b>."
+msgstr[0] "Converte-los obxectos seleccionados en camiños"
 msgstr[1] "Non se eliminou <b>nada</b>."
 
 #: ../src/tweak-context.cpp:970
 #, fuzzy, c-format
 msgid "<b>Shrinking %d</b> selected object"
 msgid_plural "<b>Shrinking %d</b> selected objects"
-msgstr[0] "Ordena-los obxectos seleccionados"
+msgstr[0] "Converte-los obxectos seleccionados en camiños"
 msgstr[1] "Ordena-los obxectos seleccionados"
 
 #: ../src/tweak-context.cpp:975
 #, fuzzy, c-format
 msgid "<b>Growing %d</b> selected object"
 msgid_plural "<b>Growing %d</b> selected objects"
-msgstr[0] "Agrupa-los obxectos seleccionados"
+msgstr[0] "Converte-los obxectos seleccionados en camiños"
 msgstr[1] "Agrupa-los obxectos seleccionados"
 
 #: ../src/tweak-context.cpp:980
 #, fuzzy, c-format
 msgid "<b>Attracting %d</b> selected object"
 msgid_plural "<b>Attracting %d</b> selected objects"
-msgstr[0] "Ordena-los obxectos seleccionados"
+msgstr[0] "Converte-los obxectos seleccionados en camiños"
 msgstr[1] "Ordena-los obxectos seleccionados"
 
 # [*] Revisar Layout
@@ -9213,21 +8991,21 @@ msgstr[1] "Ordena-los obxectos seleccionados"
 #, fuzzy, c-format
 msgid "<b>Repelling %d</b> selected object"
 msgid_plural "<b>Repelling %d</b> selected objects"
-msgstr[0] "Edita-lo equipamento dos obxectos seleccionados"
+msgstr[0] "Converte-los obxectos seleccionados en camiños"
 msgstr[1] "Edita-lo equipamento dos obxectos seleccionados"
 
 #: ../src/tweak-context.cpp:990
 #, fuzzy, c-format
 msgid "<b>Roughening %d</b> selected object"
 msgid_plural "<b>Roughening %d</b> selected objects"
-msgstr[0] "Non se eliminou <b>nada</b>."
+msgstr[0] "Converte-los obxectos seleccionados en camiños"
 msgstr[1] "Non se eliminou <b>nada</b>."
 
 #: ../src/tweak-context.cpp:995
 #, fuzzy, c-format
 msgid "<b>Painting %d</b> selected object"
 msgid_plural "<b>Painting %d</b> selected objects"
-msgstr[0] "Ordena-los obxectos seleccionados"
+msgstr[0] "Converte-los obxectos seleccionados en camiños"
 msgstr[1] "Ordena-los obxectos seleccionados"
 
 #: ../src/tweak-context.cpp:1000
@@ -9262,19 +9040,22 @@ msgid "Roughen tweak"
 msgstr ""
 
 #: ../src/tweak-context.cpp:1064
+#, fuzzy
 msgid "Color paint tweak"
-msgstr ""
+msgstr "A cor non está definida"
 
 #: ../src/tweak-context.cpp:1068
+#, fuzzy
 msgid "Color jitter tweak"
-msgstr ""
+msgstr "Elixa o matiz da cor"
 
 #. check whether something is selected
 #: ../src/ui/clipboard.cpp:205
 msgid "Nothing was copied."
 msgstr "Non se copiou nada."
 
-#: ../src/ui/clipboard.cpp:266 ../src/ui/clipboard.cpp:428
+#: ../src/ui/clipboard.cpp:266
+#: ../src/ui/clipboard.cpp:428
 #: ../src/ui/clipboard.cpp:452
 msgid "Nothing on the clipboard."
 msgstr "Non hai nada no portarretallos."
@@ -9283,19 +9064,18 @@ msgstr "Non hai nada no portarretallos."
 msgid "Select <b>object(s)</b> to paste style to."
 msgstr "Seleccione algún <b>obxecto</b> ó que pegarlle o estilo."
 
-#: ../src/ui/clipboard.cpp:294 ../src/ui/clipboard.cpp:311
-#, fuzzy
+#: ../src/ui/clipboard.cpp:294
+#: ../src/ui/clipboard.cpp:311
 msgid "No style on the clipboard."
-msgstr "Non hai nada no portarretallos."
+msgstr "Non hai ningún estilo no portarretallos."
 
 #: ../src/ui/clipboard.cpp:333
 msgid "Select <b>object(s)</b> to paste size to."
 msgstr "Seleccione algún <b>obxecto</b> ó que pegarlle o tamaño."
 
 #: ../src/ui/clipboard.cpp:340
-#, fuzzy
 msgid "No size on the clipboard."
-msgstr "Non hai nada no portarretallos."
+msgstr "Non hai ningún tamaño no portarretallos."
 
 #: ../src/ui/clipboard.cpp:391
 #, fuzzy
@@ -9304,13 +9084,13 @@ msgstr "Seleccione algún <b>obxecto</b> ó que pegarlle o tamaño."
 
 #. no_effect:
 #: ../src/ui/clipboard.cpp:415
-#, fuzzy
 msgid "No effect on the clipboard."
-msgstr "Non hai nada no portarretallos."
+msgstr "Non hai ningún efecto no portarretallos."
 
-#: ../src/ui/clipboard.cpp:435 ../src/ui/clipboard.cpp:462
+#: ../src/ui/clipboard.cpp:435
+#: ../src/ui/clipboard.cpp:462
 msgid "Clipboard does not contain a path."
-msgstr ""
+msgstr "O portarretallos non contén ningún camiño."
 
 #. Item dialog
 #: ../src/ui/context-menu.cpp:100
@@ -9333,7 +9113,8 @@ msgid "Create link"
 msgstr "_Crea Ligazón"
 
 #. "Ungroup"
-#: ../src/ui/context-menu.cpp:195 ../src/verbs.cpp:2279
+#: ../src/ui/context-menu.cpp:195
+#: ../src/verbs.cpp:2279
 msgid "_Ungroup"
 msgstr "_Desagrupar"
 
@@ -9344,8 +9125,9 @@ msgstr "_Propiedades da Ligazón"
 
 #. Select item
 #: ../src/ui/context-menu.cpp:241
+#, fuzzy
 msgid "_Follow Link"
-msgstr ""
+msgstr "<b>Ligazón</b> a %s"
 
 #. Reset transformations
 #: ../src/ui/context-menu.cpp:246
@@ -9405,12 +9187,12 @@ msgstr "_Licenza"
 msgid "about.svg"
 msgstr "about.svg"
 
+# Créditos dos tradutores
 #. TRANSLATORS: Put here your name (and other national contributors')
 #. one per line in the form of: name surname (email). Use \n for newline.
 #: ../src/ui/dialog/aboutbox.cpp:338
-#, fuzzy
 msgid "translator-credits"
-msgstr "_Tradutores"
+msgstr "Leandro Regueiro (leandro.regueiro@gmail.com)"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:234
 #: ../src/ui/dialog/align-and-distribute.cpp:776
@@ -9463,13 +9245,14 @@ msgid "Randomize positions"
 msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:728
+#, fuzzy
 msgid "Distribute text baselines"
-msgstr ""
+msgstr "Buscar obxectos de texto"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:748
 #, fuzzy
 msgid "Align text baselines"
-msgstr "Aliñar os lados esquerdos"
+msgstr "Buscar obxectos de texto"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:779
 msgid "Connector network layout"
@@ -9556,16 +9339,18 @@ msgid "Make vertical gaps between objects equal"
 msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:849
+#, fuzzy
 msgid "Distribute tops equidistantly"
-msgstr ""
+msgstr "_Aliñar e Distribuír..."
 
 #: ../src/ui/dialog/align-and-distribute.cpp:852
 msgid "Distribute centers equidistantly vertically"
 msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:855
+#, fuzzy
 msgid "Distribute bottoms equidistantly"
-msgstr ""
+msgstr "_Aliñar e Distribuír..."
 
 #: ../src/ui/dialog/align-and-distribute.cpp:860
 msgid "Distribute baseline anchors of texts horizontally"
@@ -9584,12 +9369,8 @@ msgid "Unclump objects: try to equalize edge-to-edge distances"
 msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:876
-msgid ""
-"Move objects as little as possible so that their bounding boxes do not "
-"overlap"
-msgstr ""
-"Mover os obxectos o mínimo posible de xeito que as súas caixas de contorno "
-"non se superpoñan"
+msgid "Move objects as little as possible so that their bounding boxes do not overlap"
+msgstr "Mover os obxectos o mínimo posible de xeito que as súas caixas de contorno non se superpoñan"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:880
 #: ../src/widgets/toolbox.cpp:5588
@@ -9598,19 +9379,19 @@ msgstr ""
 
 #: ../src/ui/dialog/align-and-distribute.cpp:885
 msgid "Align selected nodes horizontally"
-msgstr ""
+msgstr "Aliñar horizontalmente os nodos seleccionados"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:888
 msgid "Align selected nodes vertically"
-msgstr ""
+msgstr "Aliñar verticalmente os nodos seleccionados"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:891
 msgid "Distribute selected nodes horizontally"
-msgstr ""
+msgstr "Distribuír horizontalmente os nodos seleccionados"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:894
 msgid "Distribute selected nodes vertically"
-msgstr ""
+msgstr "Distribuír verticalmente os nodos seleccionados"
 
 #. Rest of the widgetry
 #: ../src/ui/dialog/align-and-distribute.cpp:899
@@ -9673,9 +9454,7 @@ msgstr "Amo_sar a sombra do bordo"
 
 #: ../src/ui/dialog/document-properties.cpp:90
 msgid "If set, page border shows a shadow on its right and lower side"
-msgstr ""
-"Se está marcado, o bordo da páxina amosa unha sombra nos lados inferior e "
-"dereito"
+msgstr "Se está marcado, o bordo da páxina amosa unha sombra nos lados inferior e dereito"
 
 #: ../src/ui/dialog/document-properties.cpp:91
 msgid "Back_ground:"
@@ -9686,11 +9465,8 @@ msgid "Background color"
 msgstr "Cor do fondo"
 
 #: ../src/ui/dialog/document-properties.cpp:91
-msgid ""
-"Color and transparency of the page background (also used for bitmap export)"
-msgstr ""
-"Cor e transparencia do fondo da páxina (tamén se usa para a exportación de "
-"mapa de bits)"
+msgid "Color and transparency of the page background (also used for bitmap export)"
+msgstr "Cor e transparencia do fondo da páxina (tamén se usa para a exportación de mapa de bits)"
 
 #: ../src/ui/dialog/document-properties.cpp:92
 msgid "Border _color:"
@@ -9723,10 +9499,7 @@ msgid "_Snap guides while dragging"
 msgstr ""
 
 #: ../src/ui/dialog/document-properties.cpp:98
-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 in the 'Snap' "
-"tab; only a small part of the guide near the cursor will snap)"
+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 in the 'Snap' tab; only a small part of the guide near the cursor will snap)"
 msgstr ""
 
 #: ../src/ui/dialog/document-properties.cpp:100
@@ -9755,16 +9528,19 @@ msgstr "Cor dunha liña-guía cando está debaixo do rato"
 
 #. ---------------------------------------------------------------
 #: ../src/ui/dialog/document-properties.cpp:103
+#, fuzzy
 msgid "_Enable snapping"
-msgstr ""
+msgstr "Habilitar a edición de degradados"
 
-#: ../src/ui/dialog/document-properties.cpp:103 ../src/verbs.cpp:2498
+#: ../src/ui/dialog/document-properties.cpp:103
+#: ../src/verbs.cpp:2498
 msgid "Toggle snapping on or off"
 msgstr ""
 
 #: ../src/ui/dialog/document-properties.cpp:104
+#, fuzzy
 msgid "_Enable snap indicator"
-msgstr ""
+msgstr "Habilitar a edición de degradados"
 
 #: ../src/ui/dialog/document-properties.cpp:104
 msgid "After snapping, a symbol is drawn at the point that has snapped"
@@ -9773,41 +9549,35 @@ msgstr ""
 #: ../src/ui/dialog/document-properties.cpp:105
 #, fuzzy
 msgid "_Bounding box corners"
-msgstr "Axustar as caixas de contorno ás g_uías"
+msgstr "Escalar as esquinas redondeadas"
 
 #: ../src/ui/dialog/document-properties.cpp:105
-msgid ""
-"Only available in the selector tool: snap bounding box corners to guides, to "
-"grids, and to other bounding boxes (but not to nodes or paths)"
+msgid "Only available in the selector tool: snap bounding box corners to guides, to grids, and to other bounding boxes (but not to nodes or paths)"
 msgstr ""
 
 #: ../src/ui/dialog/document-properties.cpp:107
-#, fuzzy
 msgid "_Nodes"
-msgstr "Nodos"
+msgstr "_Nodos"
 
 #: ../src/ui/dialog/document-properties.cpp:107
-msgid ""
-"Snap nodes (e.g. path nodes, special points in shapes, gradient handles, "
-"text base points, transformation origins, etc.) to guides, to grids, to "
-"paths and to other nodes"
+msgid "Snap nodes (e.g. path nodes, special points in shapes, gradient handles, text base points, transformation origins, etc.) to guides, to grids, to paths and to other nodes"
 msgstr ""
 
 #. Options for snapping to objects
 #: ../src/ui/dialog/document-properties.cpp:110
 #, fuzzy
 msgid "Snap to path_s"
-msgstr "Engadir nodos"
+msgstr "Obxecto a camiño"
 
 #: ../src/ui/dialog/document-properties.cpp:110
 #, fuzzy
 msgid "Snap nodes to object paths"
-msgstr "Axustar os nodos á reixa"
+msgstr "Converte-lo trazo dos obxectos seleccionados en camiños"
 
 #: ../src/ui/dialog/document-properties.cpp:111
 #, fuzzy
 msgid "Snap to n_odes"
-msgstr "Engadir nodos"
+msgstr "Obxecto a camiño"
 
 #: ../src/ui/dialog/document-properties.cpp:111
 #, fuzzy
@@ -9836,7 +9606,7 @@ msgstr "A_xustar as caixas de contorno á reixa"
 #: ../src/ui/dialog/document-properties.cpp:114
 #, fuzzy
 msgid "Snap to page border"
-msgstr "Amosa-lo _bordo da páxina"
+msgstr "A_daptar a páxina á selección"
 
 #: ../src/ui/dialog/document-properties.cpp:114
 #, fuzzy
@@ -9846,18 +9616,16 @@ msgstr "A_xustar as caixas de contorno á reixa"
 #. ---------------------------------------------------------------
 #. Applies to both nodes and guides, but not to bboxes, that's why its located here
 #: ../src/ui/dialog/document-properties.cpp:117
-#, fuzzy
 msgid "Rotation _center"
-msgstr "_Rotación"
+msgstr "_Centro de rotación"
 
 #: ../src/ui/dialog/document-properties.cpp:117
 msgid "Consider the rotation center of an object when snapping"
 msgstr ""
 
 #: ../src/ui/dialog/document-properties.cpp:118
-#, fuzzy
 msgid "_Grid with guides"
-msgstr "Reixa/Guías"
+msgstr "Reixa con _guías"
 
 #: ../src/ui/dialog/document-properties.cpp:118
 msgid "Snap to grid-guide intersections"
@@ -9866,47 +9634,40 @@ msgstr ""
 #: ../src/ui/dialog/document-properties.cpp:119
 #, fuzzy
 msgid "_Line segments"
-msgstr "Degradado linear"
+msgstr "Número de segmentos"
 
 #: ../src/ui/dialog/document-properties.cpp:119
-msgid ""
-"Snap to intersections of line segments ('snap to paths' must be enabled, see "
-"the previous tab)"
+msgid "Snap to intersections of line segments ('snap to paths' must be enabled, see the previous tab)"
 msgstr ""
 
 #. TRANSLATORS: In Grid|_New translate only the word _New. It ref to grid
 #: ../src/ui/dialog/document-properties.cpp:124
-#, fuzzy
 msgid "Grid|_New"
-msgstr "Reixa"
+msgstr "_Nova"
 
 #: ../src/ui/dialog/document-properties.cpp:124
-#, fuzzy
 msgid "Create new grid."
-msgstr "Crear elipse"
+msgstr "Crear unha nova reixa."
 
 #: ../src/ui/dialog/document-properties.cpp:125
-#, fuzzy
 msgid "_Remove"
-msgstr "Eli_minar"
+msgstr "_Eliminar"
 
 #: ../src/ui/dialog/document-properties.cpp:125
-#, fuzzy
 msgid "Remove selected grid."
-msgstr "Manter seleccionado"
+msgstr "Eliminar a reixa seleccionada."
 
 #: ../src/ui/dialog/document-properties.cpp:135
-#, fuzzy
 msgid "Guides"
-msgstr "G_uías"
+msgstr "Guías"
 
 #: ../src/ui/dialog/document-properties.cpp:136
 #: ../src/ui/dialog/inkscape-preferences.cpp:905
-#, fuzzy
 msgid "Grids"
-msgstr "Reixa"
+msgstr "Reixas"
 
-#: ../src/ui/dialog/document-properties.cpp:137 ../src/verbs.cpp:2498
+#: ../src/ui/dialog/document-properties.cpp:137
+#: ../src/verbs.cpp:2498
 #, fuzzy
 msgid "Snap"
 msgstr "Axustar"
@@ -9954,14 +9715,10 @@ msgstr ""
 #: ../src/ui/dialog/document-properties.cpp:279
 #, fuzzy
 msgid "Always snap to objects, regardless of their distance"
-msgstr ""
-"Se está marcado, cando un obxecto se move axústase ó obxecto máis próximo, "
-"sen ter en conta a distancia"
+msgstr "Se está marcado, cando un obxecto se move axústase ó obxecto máis próximo, sen ter en conta a distancia"
 
 #: ../src/ui/dialog/document-properties.cpp:280
-msgid ""
-"If set, objects only snap to another object when it's within the range "
-"specified below"
+msgid "If set, objects only snap to another object when it's within the range specified below"
 msgstr ""
 
 #. Options for snapping to grids
@@ -9981,14 +9738,10 @@ msgstr ""
 #: ../src/ui/dialog/document-properties.cpp:285
 #, fuzzy
 msgid "Always snap to grids, regardless of the distance"
-msgstr ""
-"Se está marcado, cando un obxecto se move axústase ó obxecto máis próximo, "
-"sen ter en conta a distancia"
+msgstr "Se está marcado, cando un obxecto se move axústase ó obxecto máis próximo, sen ter en conta a distancia"
 
 #: ../src/ui/dialog/document-properties.cpp:286
-msgid ""
-"If set, objects only snap to a grid line when it's within the range "
-"specified below"
+msgid "If set, objects only snap to a grid line when it's within the range specified below"
 msgstr ""
 
 #. Options for snapping to guides
@@ -10008,14 +9761,10 @@ msgstr ""
 #: ../src/ui/dialog/document-properties.cpp:291
 #, fuzzy
 msgid "Always snap to guides, regardless of the distance"
-msgstr ""
-"Se está marcado, cando un obxecto se move axústase ó obxecto máis próximo, "
-"sen ter en conta a distancia"
+msgstr "Se está marcado, cando un obxecto se move axústase ó obxecto máis próximo, sen ter en conta a distancia"
 
 #: ../src/ui/dialog/document-properties.cpp:292
-msgid ""
-"If set, objects only snap to a guide when it's within the range specified "
-"below"
+msgid "If set, objects only snap to a guide when it's within the range specified below"
 msgstr ""
 
 #: ../src/ui/dialog/document-properties.cpp:315
@@ -10031,22 +9780,22 @@ msgstr "<b>Rectángulo</b>"
 #: ../src/ui/dialog/document-properties.cpp:319
 #, fuzzy
 msgid "<b>Snap to objects</b>"
-msgstr "<b>Guías</b>"
+msgstr "Obxectos a guías"
 
 #: ../src/ui/dialog/document-properties.cpp:321
 #, fuzzy
 msgid "<b>Snap to grids</b>"
-msgstr "<b>Xeral</b>"
+msgstr "Obxecto a camiño"
 
 #: ../src/ui/dialog/document-properties.cpp:323
 #, fuzzy
 msgid "<b>Snap to guides</b>"
-msgstr "<b>Guías</b>"
+msgstr "Obxectos a guías"
 
 #: ../src/ui/dialog/document-properties.cpp:361
 #, fuzzy
 msgid "<b>Snapping to intersections of</b>"
-msgstr "<b>Xeral</b>"
+msgstr "Obxecto a camiño"
 
 #: ../src/ui/dialog/document-properties.cpp:363
 #, fuzzy
@@ -10054,9 +9803,8 @@ msgid "<b>Special points to consider</b>"
 msgstr "<b>Guías</b>"
 
 #: ../src/ui/dialog/document-properties.cpp:433
-#, fuzzy
 msgid "<b>Creation</b>"
-msgstr " <b>_Crear</b> "
+msgstr "<b>Creación</b>"
 
 #: ../src/ui/dialog/document-properties.cpp:434
 #, fuzzy
@@ -10064,9 +9812,8 @@ msgid "<b>Defined grids</b>"
 msgstr "<b>Xeral</b>"
 
 #: ../src/ui/dialog/document-properties.cpp:650
-#, fuzzy
 msgid "Remove grid"
-msgstr "Eli_minar"
+msgstr "Eliminar a reixa"
 
 #: ../src/ui/dialog/export.cpp:32
 msgid "Export"
@@ -10077,7 +9824,8 @@ msgid "Information"
 msgstr "Información"
 
 #: ../src/ui/dialog/extension-editor.cpp:81
-#: ../share/extensions/lindenmayer.inx.h:3 ../share/extensions/measure.inx.h:2
+#: ../share/extensions/lindenmayer.inx.h:3
+#: ../share/extensions/measure.inx.h:2
 msgid "Help"
 msgstr "Axuda"
 
@@ -10086,38 +9834,33 @@ msgid "Parameters"
 msgstr "Parámetros"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:382
-#, fuzzy
 msgid "No preview"
-msgstr "Previsualización"
+msgstr "Sen previsualización"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:488
 msgid "too large for preview"
 msgstr ""
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:577
-#, fuzzy
 msgid "Enable preview"
-msgstr "Previsualización"
+msgstr "Activar a previsualización"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:711
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:712
 #: ../src/ui/dialog/filedialogimpl-win32.cpp:198
-#, fuzzy
 msgid "All Inkscape Files"
-msgstr "Tódalas figuras"
+msgstr "Tódolos ficheiros de Inkscape"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:716
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:717
 #: ../src/ui/dialog/filedialogimpl-win32.cpp:197
-#, fuzzy
 msgid "All Files"
-msgstr "Tódolos tipos"
+msgstr "Tódolos ficheiros"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:722
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:723
-#, fuzzy
 msgid "All Images"
-msgstr "Imaxes"
+msgstr "Tódalas imaxes"
 
 #. ###### Add the file types menu
 #. createFilterMenu();
@@ -10131,69 +9874,65 @@ msgstr ""
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1042
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1294
-#, fuzzy
 msgid "Guess from extension"
-msgstr "Coller da selección"
+msgstr "Escoller en base á extensión"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1315
+#, fuzzy
 msgid "Left edge of source"
-msgstr ""
+msgstr "Detección Óptima de Bordos"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1316
+#, fuzzy
 msgid "Top edge of source"
-msgstr ""
+msgstr "Detección Óptima de Bordos"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1317
 #, fuzzy
 msgid "Right edge of source"
-msgstr "Fonte"
+msgstr "Detección Óptima de Bordos"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1318
+#, fuzzy
 msgid "Bottom edge of source"
-msgstr ""
+msgstr "Detección Óptima de Bordos"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1319
-#, fuzzy
 msgid "Source width"
-msgstr "Escalar o ancho do trazado"
+msgstr "Ancho da fonte"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1320
-#, fuzzy
 msgid "Source height"
-msgstr "Alto:"
+msgstr "Alto da fonte"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1321
 #, fuzzy
 msgid "Destination width"
-msgstr "Destino da Impresión"
+msgstr "Ancho, alto:"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1322
 #, fuzzy
 msgid "Destination height"
-msgstr "Destino da Impresión"
+msgstr "Ancho, alto:"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1323
-#, fuzzy
 msgid "Resolution (dots per inch)"
-msgstr "Resolución preferida do mapa de bits (puntos por polgada)"
+msgstr "Resolución (puntos por polgada)"
 
 #. #########################################
 #. ## EXTRA WIDGET -- SOURCE SIDE
 #. #########################################
 #. ##### Export options buttons/spinners, etc
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1360
-#, fuzzy
 msgid "Document"
 msgstr "Documento"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1372
 #: ../share/extensions/color_custom.inx.h:3
-#, fuzzy
 msgid "Custom"
-msgstr "_Personalizado"
+msgstr "Personalizado"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1412
-#, fuzzy
 msgid "Cairo"
 msgstr "Cairo"
 
@@ -10202,32 +9941,26 @@ msgid "Antialias"
 msgstr ""
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1418
-#, fuzzy
 msgid "Background"
-msgstr "_Fondo:"
+msgstr "Fondo"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1441
-#, fuzzy
 msgid "Destination"
-msgstr "Destino da Impresión"
+msgstr "Destino"
 
 #: ../src/ui/dialog/filedialogimpl-win32.cpp:199
-#, fuzzy
 msgid "All Image Files"
-msgstr "Imaxes"
+msgstr "Tódolos ficheiros de imaxe"
 
 #: ../src/ui/dialog/filedialogimpl-win32.cpp:428
-#, fuzzy
 msgid "Show Preview"
-msgstr "Previsualización"
+msgstr "Mostrar previsualización"
 
 #: ../src/ui/dialog/filedialogimpl-win32.cpp:564
-#, fuzzy
 msgid "No file selected"
-msgstr "Non se seleccionou ningún documento"
+msgstr "Non se seleccionou ningún ficheiro"
 
 #: ../src/ui/dialog/fill-and-stroke.cpp:53
-#, fuzzy
 msgid "Fill"
 msgstr "Recheo"
 
@@ -10240,22 +9973,16 @@ msgid "Stroke st_yle"
 msgstr "E_stilo do trazo"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:504
-msgid ""
-"This matrix determines a linear transform on colour 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."
+msgid "This matrix determines a linear transform on colour 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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:614
-#, fuzzy
 msgid "Image File"
-msgstr "Imaxe"
+msgstr "Ficheiro de imaxe"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:617
-#, fuzzy
 msgid "Selected SVG Element"
-msgstr "Borrar o nodo"
+msgstr "Elemento SVG seleccionado"
 
 #. TODO: any image, not justy svg
 #: ../src/ui/dialog/filter-effects-dialog.cpp:686
@@ -10265,16 +9992,15 @@ msgstr "Seleccione unha imaxe e unha ou máis figuras enriba dela"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:778
 msgid "This SVG filter effect does not require any parameters."
-msgstr ""
+msgstr "Este efecto de filtro SVG non require ningún parámetro."
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:784
 msgid "This SVG filter effect is not yet implemented in Inkscape."
-msgstr ""
+msgstr "Este efecto de filtro SVG ainda non foi implementado en Inkscape."
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:975
-#, fuzzy
 msgid "Light Source:"
-msgstr "Fonte"
+msgstr "Fonte de luz:"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:992
 msgid "Direction angle for the light source on the XY plane, in degrees"
@@ -10289,35 +10015,31 @@ msgstr ""
 #. default z:
 #: ../src/ui/dialog/filter-effects-dialog.cpp:996
 #: ../src/ui/dialog/filter-effects-dialog.cpp:999
-#, fuzzy
 msgid "Location"
-msgstr "_Rotación"
+msgstr "Situación"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:996
 #: ../src/ui/dialog/filter-effects-dialog.cpp:999
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1002
-#, fuzzy
 msgid "X coordinate"
-msgstr "Coordenadas do cursor"
+msgstr "Coordenada X"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:996
 #: ../src/ui/dialog/filter-effects-dialog.cpp:999
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1002
-#, fuzzy
 msgid "Y coordinate"
-msgstr "Coordenadas do cursor"
+msgstr "Coordenada Y"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:996
 #: ../src/ui/dialog/filter-effects-dialog.cpp:999
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1002
-#, fuzzy
 msgid "Z coordinate"
-msgstr "Coordenadas do cursor"
+msgstr "Coordenada Z"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1002
 #, fuzzy
 msgid "Points At"
-msgstr "Puntos"
+msgstr "píxels con"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1003
 msgid "Specular Exponent"
@@ -10331,107 +10053,93 @@ msgstr ""
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1005
 #, fuzzy
 msgid "Cone Angle"
-msgstr "Ángulo"
+msgstr "Ángulo (graos):"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1005
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1065
 msgid "New light source"
-msgstr ""
+msgstr "Nova fonte de luz"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1106
-#, fuzzy
 msgid "_Duplicate"
-msgstr "Duplicar"
+msgstr "_Duplicar"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1132
-#, fuzzy
 msgid "_Filter"
-msgstr "milímetros"
+msgstr "_Filtro"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1146
-#, fuzzy
 msgid "R_ename"
 msgstr "_Renomear"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1240
-#, fuzzy
 msgid "Rename filter"
-msgstr "Eli_minar"
+msgstr "Renomear o filtro"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1276
-#, fuzzy
 msgid "Apply filter"
-msgstr "Engadir Capa"
+msgstr "Engadir o filtro"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1352
-#, fuzzy
 msgid "Add filter"
-msgstr "Engadir Capa"
+msgstr "Engadir o filtro"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1378
-#, fuzzy
 msgid "Duplicate filter"
-msgstr "Duplicar o nodo"
+msgstr "Duplicar o filtro"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1445
-#, fuzzy
 msgid "_Effect"
-msgstr "Efe_ctos"
+msgstr "_Efecto"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1453
-#, fuzzy
 msgid "Connections"
-msgstr "Conectador"
+msgstr "Conexións"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1569
+#, fuzzy
 msgid "Remove filter primitive"
-msgstr ""
+msgstr "Eliminar a reixa seleccionada."
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1940
 #, fuzzy
 msgid "Remove merge node"
-msgstr "Eli_minar"
+msgstr "Novo nodo"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2056
+#, fuzzy
 msgid "Reorder filter primitive"
-msgstr ""
+msgstr "Arrastre para reordenar os nodos"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2092
-#, fuzzy
 msgid "Add Effect:"
-msgstr "Efe_ctos"
+msgstr "Engadir o efecto:"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2093
-#, fuzzy
 msgid "No effect selected"
-msgstr "Non se seleccionou ningún documento"
+msgstr "Non se seleccionou ningún efecto"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2094
-#, fuzzy
 msgid "No filter selected"
-msgstr "Non se seleccionou ningún documento"
+msgstr "Non se seleccionou ningún filtro"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2130
-#, fuzzy
 msgid "Effect parameters"
-msgstr "<b>Rectángulo</b>"
+msgstr "Parámetros do efecto"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2131
+#, fuzzy
 msgid "Filter General Settings"
-msgstr ""
+msgstr "Configuración do Efecto Anterior..."
 
 #. default x:
 #. default y:
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2187
-#, fuzzy
 msgid "Coordinates"
-msgstr "Coordenadas do cursor"
+msgstr "Coordenadas"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2187
 #, fuzzy
@@ -10446,9 +10154,8 @@ msgstr ""
 #. default height:
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2188
 #: ../share/extensions/dimension.inx.h:1
-#, fuzzy
 msgid "Dimensions"
-msgstr "Di_visión"
+msgstr "Dimensións"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2188
 #, fuzzy
@@ -10463,24 +10170,19 @@ msgstr "Alto da selección"
 #. # end multiple scan
 #. ## end mode page
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2191
-#: ../src/ui/dialog/tracedialog.cpp:553 ../src/widgets/toolbox.cpp:3328
+#: ../src/ui/dialog/tracedialog.cpp:553
+#: ../src/widgets/toolbox.cpp:3328
 #: ../share/extensions/triangle.inx.h:9
-#, fuzzy
 msgid "Mode"
-msgstr "Mover"
+msgstr "Modo"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2194
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2195
-#, fuzzy
 msgid "Value(s)"
-msgstr "Valor"
+msgstr "Valores"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2209
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2250
@@ -10496,10 +10198,7 @@ msgstr ""
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2211
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2212
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2213
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2211
@@ -10517,14 +10216,13 @@ msgstr ""
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2216
 #, fuzzy
 msgid "width of the convolve matrix"
-msgstr "Ancho do papel"
+msgstr "Escalar o ancho do trazado"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2216
 #, fuzzy
 msgid "height of the convolve matrix"
-msgstr "Alto do rectángulo que se vai encher"
+msgstr "Pegar Alto por Separado"
 
-# Rosetta
 #. default x:
 #. default y:
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2217
@@ -10533,15 +10231,11 @@ msgid "Target"
 msgstr "Obxectivo:"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2217
-msgid ""
-"X coordinate of the target point in the convolve matrix. The convolution is "
-"applied to pixels around this point."
+msgid "X coordinate of the target point in the convolve matrix. The convolution is applied to pixels around this point."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2217
-msgid ""
-"Y coordinate of the target point in the convolve matrix. The convolution is "
-"applied to pixels around this point."
+msgid "Y coordinate of the target point in the convolve matrix. The convolution is applied to pixels around this point."
 msgstr ""
 
 #. TRANSLATORS: for info on "Kernel", see http://en.wikipedia.org/wiki/Kernel_(matrix)
@@ -10550,13 +10244,7 @@ msgid "Kernel"
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2219
-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."
+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 ""
 
 #. TODO: svg spec: The default value is the sum of all values in kernelMatrix, with the exception that if the sum is zero, then the divisor is set to 1.
@@ -10566,11 +10254,7 @@ msgid "Divisor"
 msgstr "Di_visión"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2222
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2223
@@ -10578,27 +10262,22 @@ msgid "Bias"
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2223
-msgid ""
-"This value is added to each component. This is useful to define a constant "
-"value as the zero response of the filter."
+msgid "This value is added to each component. This is useful to define a constant value as the zero response of the filter."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2224
 #, fuzzy
 msgid "Edge Mode"
-msgstr "Mover"
+msgstr "Modo de _visualización"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2224
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2225
 #, fuzzy
 msgid "Preserve Alpha"
-msgstr "Conservar"
+msgstr " alfa %.3g"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2225
 msgid "If set, the alpha channel won't be altered by this filter primitive."
@@ -10608,7 +10287,7 @@ msgstr ""
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2228
 #, fuzzy
 msgid "Diffuse Color"
-msgstr "Visible"
+msgstr "Cor inicial:"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2228
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2261
@@ -10619,13 +10298,11 @@ msgstr ""
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2262
 #, fuzzy
 msgid "Surface Scale"
-msgstr "Punta cadrada"
+msgstr "Escalar proporcionalmente"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2229
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2262
-msgid ""
-"This value amplifies the heights of the bump map defined by the input alpha "
-"channel"
+msgid "This value amplifies the heights of the bump map defined by the input alpha channel"
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2230
@@ -10641,8 +10318,9 @@ msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2231
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2265
+#, fuzzy
 msgid "Kernel Unit Length"
-msgstr ""
+msgstr "Ancho en unidades de lonxitude"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2235
 msgid "This defines the intensity of the displacement effect."
@@ -10670,7 +10348,7 @@ msgstr ""
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2240
 #, fuzzy
 msgid "Flood Color"
-msgstr "Cor de recheo:"
+msgstr "Cor inicial:"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2240
 msgid "The whole filter region will be filled with this color."
@@ -10693,19 +10371,21 @@ msgstr ""
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2254
 #, fuzzy
 msgid "Source of Image"
-msgstr "Número de Niveis"
+msgstr "Fonte da Imaxe"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2257
+#, fuzzy
 msgid "Delta X"
-msgstr ""
+msgstr "Delta X"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2257
 msgid "This is how far the input image gets shifted to the right"
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2258
+#, fuzzy
 msgid "Delta Y"
-msgstr ""
+msgstr "Delta Y"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2258
 msgid "This is how far the input image gets shifted downwards"
@@ -10713,9 +10393,8 @@ msgstr ""
 
 #. default: white
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2261
-#, fuzzy
 msgid "Specular Color"
-msgstr "Cor da Fase"
+msgstr "Cor especular"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2264
 #: ../share/extensions/interp.inx.h:2
@@ -10727,9 +10406,7 @@ msgid "Exponent for specular term, larger is more \"shiny\"."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2273
-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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2274
@@ -10755,124 +10432,73 @@ msgid "Add filter primitive"
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2304
-msgid ""
-"The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, "
-"multiply, darken and lighten."
+msgid "The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, multiply, darken and lighten."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2308
-msgid ""
-"The <b>feColorMatrix</b> filter primitive applies a matrix transformation to "
-"colour of each rendered pixel. This allows for effects like turning object "
-"to grayscale, modifying colour saturation and changing colour hue."
+msgid "The <b>feColorMatrix</b> filter primitive applies a matrix transformation to colour of each rendered pixel. This allows for effects like turning object to grayscale, modifying colour saturation and changing colour hue."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2312
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2316
-msgid ""
-"The <b>feComposite</b> filter primitive composites two images using one of "
-"the Porter-Duff blending modes or the aritmetic mode described in SVG "
-"standard. Porter-Duff blending modes are essentially logical operations "
-"between the corresponding pixel values of the images."
+msgid "The <b>feComposite</b> filter primitive composites two images using one of the Porter-Duff blending modes or the aritmetic mode described in SVG standard. Porter-Duff blending modes are essentially logical operations between the corresponding pixel values of the images."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2320
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2324
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2328
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2332
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2336
-msgid ""
-"The <b>feGaussianBlur</b> filter primitive uniformly blurs its input.  It is "
-"commonly used together with feOffset to create a drop shadow effect."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2340
-msgid ""
-"The <b>feImage</b> filter primitive fills the region with an external image "
-"or another part of the document."
+msgid "The <b>feImage</b> filter primitive fills the region with an external image or another part of the document."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2344
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2348
-msgid ""
-"The <b>feMorphology</b> filter primitive provides erode and dilate effects. "
-"For single-colour objects erode makes the object thinner and dilate makes it "
-"thicker."
+msgid "The <b>feMorphology</b> filter primitive provides erode and dilate effects. For single-colour objects erode makes the object thinner and dilate makes it thicker."
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2352
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2356
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2360
-msgid ""
-"The <b>feTile</b> filter primitive tiles a region with its input graphic"
+msgid "The <b>feTile</b> filter primitive tiles a region with its input graphic"
 msgstr ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2364
-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."
+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 ""
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2382
 #, fuzzy
 msgid "Duplicate filter primitive"
-msgstr "Duplica-la selección"
+msgstr "Duplica-los obxectos seleccionados"
 
 #: ../src/ui/dialog/filter-effects-dialog.cpp:2435
 #, fuzzy
@@ -10898,45 +10524,32 @@ msgstr "píxels"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:150
 #, fuzzy
-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 ""
-"Como de preto ten que estar na pantalla a un obxecto para poder collelo co "
-"rato (en píxels da pantalla)"
+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 "Como de preto ten que estar na pantalla a un obxecto para poder collelo co rato (en píxels da pantalla)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:152
 msgid "Click/drag threshold:"
 msgstr "Limiar de clic/arrastre:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:153
-msgid ""
-"Maximum mouse drag (in screen pixels) which is considered a click, not a drag"
-msgstr ""
-"Máximo arrastre do rato (en píxels da pantalla) que se considera un clic, e "
-"non un arrastre"
+msgid "Maximum mouse drag (in screen pixels) which is considered a click, not a drag"
+msgstr "Máximo arrastre do rato (en píxels da pantalla) que se considera un clic, e non un arrastre"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:155
 msgid "Use pressure-sensitive tablet (requires restart)"
-msgstr ""
+msgstr "Usar tableta sensible á presión (require reiniciar)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:157
-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 ""
+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 "Usar as capacidades dunha tableta ou outro dispositivo sensible á presión. Desactive isto só se ten problemas ca tableta (se for así poderá continuar usando o rato)."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:159
 #, fuzzy
 msgid "Switch tool based on tablet device (requires restart)"
-msgstr ""
-"Indica se as ventás de diálogo teñen un botón para pechalas (require "
-"reiniciar)"
+msgstr "Indica se as ventás de diálogo teñen un botón para pechalas (require reiniciar)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:161
-msgid ""
-"Change tool as different devices are used on the tablet (pen, eraser, mouse)"
+msgid "Change tool as different devices are used on the tablet (pen, eraser, mouse)"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:166
@@ -10948,9 +10561,7 @@ msgid "Mouse wheel scrolls by:"
 msgstr "A roda do rato despraza:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:169
-msgid ""
-"One mouse wheel notch scrolls by this distance in screen pixels "
-"(horizontally with Shift)"
+msgid "One mouse wheel notch scrolls by this distance in screen pixels (horizontally with Shift)"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:170
@@ -10970,12 +10581,8 @@ msgid "Acceleration:"
 msgstr "Aceleración:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:176
-msgid ""
-"Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no "
-"acceleration)"
-msgstr ""
-"Se mantén premido Ctrl+frecha aumentará a velocidade do desprazamento "
-"gradualmente (0 para non acelerar)"
+msgid "Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no acceleration)"
+msgstr "Se mantén premido Ctrl+frecha aumentará a velocidade do desprazamento gradualmente (0 para non acelerar)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:177
 msgid "Autoscrolling"
@@ -10986,37 +10593,27 @@ msgid "Speed:"
 msgstr "Velocidade:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:180
-msgid ""
-"How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn "
-"autoscroll off)"
-msgstr ""
-"Con que rapidez de despraza automáticamente o lenzo cando arrastra máis alá "
-"do bordo do lenzo (0 para desactivar o desprazamento automático)"
+msgid "How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn autoscroll off)"
+msgstr "Con que rapidez de despraza automáticamente o lenzo cando arrastra máis alá do bordo do lenzo (0 para desactivar o desprazamento automático)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:182
-#: ../src/ui/dialog/tracedialog.cpp:410 ../src/ui/dialog/tracedialog.cpp:443
-#: ../src/ui/dialog/tracedialog.cpp:586 ../src/widgets/toolbox.cpp:5741
+#: ../src/ui/dialog/tracedialog.cpp:410
+#: ../src/ui/dialog/tracedialog.cpp:443
+#: ../src/ui/dialog/tracedialog.cpp:586
+#: ../src/widgets/toolbox.cpp:5741
 msgid "Threshold:"
 msgstr "Limiar:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:183
-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 ""
-"A que distancia (en píxels da pantalla) ten que estar do bordo do lenzo para "
-"que comece a desprazarse automáticamente; positivo é fóra do lenzo, negativo "
-"é dentro do lenzo"
+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 "A que distancia (en píxels da pantalla) ten que estar do bordo do lenzo para que comece a desprazarse automáticamente; positivo é fóra do lenzo, negativo é dentro do lenzo"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:184
 msgid "Left mouse button pans when Space is pressed"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:186
-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)."
+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 ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:187
@@ -11025,9 +10622,7 @@ msgid "Mouse wheel zooms by default"
 msgstr "A roda do rato despraza:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:189
-msgid ""
-"When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when "
-"off, it zooms with Ctrl and scrolls without Ctrl."
+msgid "When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when off, it zooms with Ctrl and scrolls without Ctrl."
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:194
@@ -11040,12 +10635,8 @@ msgid "Arrow keys move by:"
 msgstr "As teclas de frecha moven:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:199
-msgid ""
-"Pressing an arrow key moves selected object(s) or node(s) by this distance "
-"(in px units)"
-msgstr ""
-"Se preme unha tecla de frecha móvense os obxectos ou nodos seleccionados "
-"esta distancia (en unidades de píxels)"
+msgid "Pressing an arrow key moves selected object(s) or node(s) by this distance (in px units)"
+msgstr "Se preme unha tecla de frecha móvense os obxectos ou nodos seleccionados esta distancia (en unidades de píxels)"
 
 #. defaultscale is limited to 1000 in select-context.cpp: use the same limit here
 #: ../src/ui/dialog/inkscape-preferences.cpp:202
@@ -11053,18 +10644,16 @@ msgid "> and < scale by:"
 msgstr "> e < escalan:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:203
-msgid ""
-"Pressing > or < scales selection up or down by this increment (in px units)"
-msgstr ""
-"Se preme > ou < escala a selección estas unidades (as unidades son píxels)"
+msgid "Pressing > or < scales selection up or down by this increment (in px units)"
+msgstr "Se preme > ou < escala a selección estas unidades (as unidades son píxels)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:205
+#, fuzzy
 msgid "Inset/Outset by:"
-msgstr ""
+msgstr "> e < escalan:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:206
-msgid ""
-"Inset and Outset commands displace the path by this distance (in px units)"
+msgid "Inset and Outset commands displace the path by this distance (in px units)"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:207
@@ -11074,27 +10663,20 @@ msgstr "Mostrar os ángulos coma no compás"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:209
 #, fuzzy
-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 ""
-"Cando está marcado, os ángulos mostranse co 0 no norte, cun rango de 0 a "
-"360, positivo e en sentido horario; doutro xeito co 0 no leste, cun rango de "
-"-180 a 180, positivo en sentido antihorario"
+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 "Cando está marcado, os ángulos mostranse co 0 no norte, cun rango de 0 a 360, positivo e en sentido horario; doutro xeito co 0 no leste, cun rango de -180 a 180, positivo en sentido antihorario"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:215
+#, fuzzy
 msgid "Rotation snaps every:"
-msgstr ""
+msgstr "Rotar en sentido horario"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:215
 msgid "degrees"
 msgstr "graos"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:216
-msgid ""
-"Rotating with Ctrl pressed snaps every that much degrees; also, pressing "
-"[ or ] rotates by this amount"
+msgid "Rotating with Ctrl pressed snaps every that much degrees; also, pressing [ or ] rotates by this amount"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:218
@@ -11102,23 +10684,16 @@ msgid "Zoom in/out by:"
 msgstr "Aumentar/reducir:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:219
-msgid ""
-"Zoom tool click, +/- keys, and middle click zoom in and out by this "
-"multiplier"
-msgstr ""
-"Un clic da ferramenta de zoom, das teclas +/-, ou un clic do botón central "
-"do rato amplian ou reducen esta porcentaxe"
+msgid "Zoom tool click, +/- keys, and middle click zoom in and out by this multiplier"
+msgstr "Un clic da ferramenta de zoom, das teclas +/-, ou un clic do botón central do rato amplian ou reducen esta porcentaxe"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:225
 msgid "Show selection cue"
 msgstr "Amosar sinal de selección"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:226
-msgid ""
-"Whether selected objects display a selection cue (the same as in selector)"
-msgstr ""
-"Indica se os obxectos seleccionados amosan un sinal de selección (a mesma ca "
-"no selector)"
+msgid "Whether selected objects display a selection cue (the same as in selector)"
+msgstr "Indica se os obxectos seleccionados amosan un sinal de selección (a mesma ca no selector)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:232
 msgid "Enable gradient editing"
@@ -11126,17 +10701,14 @@ msgstr "Habilitar a edición de degradados"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:233
 msgid "Whether selected objects display gradient editing controls"
-msgstr ""
-"Se os obxectos seleccionados mostran ou non controis de edición de degradados"
+msgstr "Se os obxectos seleccionados mostran ou non controis de edición de degradados"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:238
 msgid "Conversion to guides uses edges instead of bounding box"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:239
-msgid ""
-"Converting an object to guides places these along the object's true edges "
-"(imitating the object's shape), not along the bounding box."
+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 ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:246
@@ -11157,12 +10729,8 @@ msgid "<b>No objects selected</b> to take the style from."
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:271
-msgid ""
-"<b>More than one object selected.</b>  Cannot take style from multiple "
-"objects."
-msgstr ""
-"<b>Hai máis dun obxecto seleccionado.</b>  Non se pode coller o estilo de "
-"varios obxectos."
+msgid "<b>More than one object selected.</b>  Cannot take style from multiple objects."
+msgstr "<b>Hai máis dun obxecto seleccionado.</b>  Non se pode coller o estilo de varios obxectos."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:305
 msgid "Create new objects with:"
@@ -11181,9 +10749,7 @@ msgid "This tool's own style:"
 msgstr "O propio estilo desta ferramenta:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:318
-msgid ""
-"Each tool may store its own style to apply to the newly created objects. Use "
-"the button below to set it."
+msgid "Each tool may store its own style to apply to the newly created objects. Use the button below to set it."
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:323
@@ -11191,15 +10757,12 @@ msgid "Take from selection"
 msgstr "Coller da selección"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:327
-#, fuzzy
 msgid "This tool's style of new objects"
-msgstr "O propio estilo desta ferramenta:"
+msgstr "O estilo desta ferramenta para os novos obxectos"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:335
 msgid "Remember the style of the (first) selected object as this tool's style"
-msgstr ""
-"Lembrar o estilo do (primeiro) obxecto seleccionado coma o estilo desta "
-"ferramenta"
+msgstr "Lembrar o estilo do (primeiro) obxecto seleccionado coma o estilo desta ferramenta"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:340
 msgid "Tools"
@@ -11208,7 +10771,7 @@ msgstr "Ferramentas"
 #: ../src/ui/dialog/inkscape-preferences.cpp:343
 #, fuzzy
 msgid "Bounding box to use:"
-msgstr "Axustar as caixas de contorno ás g_uías"
+msgstr "Use <b>Shift+D</b> para buscar o orixinal"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:344
 #, fuzzy
@@ -11231,7 +10794,7 @@ msgstr ""
 #: ../src/ui/dialog/inkscape-preferences.cpp:351
 #, fuzzy
 msgid "Conversion to guides:"
-msgstr "_Converter a Texto"
+msgstr "Obxectos a guías"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:352
 #, fuzzy
@@ -11239,9 +10802,7 @@ msgid "Keep objects after conversion to guides"
 msgstr "Seleccione <b>obxectos</b> para convertelos en patróns."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:354
-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 ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:355
@@ -11250,9 +10811,7 @@ msgid "Treat groups as a single object"
 msgstr "Creando novo camiño"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:357
-msgid ""
-"Treat groups as a single object during conversion to guides rather than "
-"converting each child separately."
+msgid "Treat groups as a single object during conversion to guides rather than converting each child separately."
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:359
@@ -11262,7 +10821,7 @@ msgstr "O ancho está en unidades absolutas"
 #: ../src/ui/dialog/inkscape-preferences.cpp:360
 #, fuzzy
 msgid "Select new path"
-msgstr "Seleccionar"
+msgstr "Seleccionar o novo camiño"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:361
 msgid "Don't attach connectors to text objects"
@@ -11291,8 +10850,7 @@ msgstr "Caixa de contorno"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:373
 msgid "Show only a box outline of the objects when moving or transforming"
-msgstr ""
-"Amosa só unha caixa do contorno dos obxectos cando se moven ou se transforman"
+msgstr "Amosa só unha caixa do contorno dos obxectos cando se moven ou se transforman"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:374
 msgid "Per-object selection cue:"
@@ -11308,9 +10866,7 @@ msgstr "Marca"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:380
 msgid "Each selected object has a diamond mark in the top left corner"
-msgstr ""
-"Cada obxecto seleccionado ten unha marca con forma de diamante na esquina "
-"superior esquerda"
+msgstr "Cada obxecto seleccionado ten unha marca con forma de diamante na esquina superior esquerda"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:381
 msgid "Box"
@@ -11318,8 +10874,7 @@ msgstr "Caixa"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:383
 msgid "Each selected object displays its bounding box"
-msgstr ""
-"Cada obxecto seleccionado amosa unha caixa que o rodea (caixa de contorno)"
+msgstr "Cada obxecto seleccionado amosa unha caixa que o rodea (caixa de contorno)"
 
 #. Node
 #: ../src/ui/dialog/inkscape-preferences.cpp:386
@@ -11335,7 +10890,7 @@ msgstr "Caixa de contorno"
 #: ../src/ui/dialog/inkscape-preferences.cpp:391
 #, fuzzy
 msgid "Path outline color"
-msgstr "Pegar cor"
+msgstr "Elixa o matiz da cor"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:391
 #, fuzzy
@@ -11355,20 +10910,19 @@ msgid "Flash time"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:395
-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."
+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 ""
 
 #. Tweak
-#: ../src/ui/dialog/inkscape-preferences.cpp:398 ../src/verbs.cpp:2419
+#: ../src/ui/dialog/inkscape-preferences.cpp:398
+#: ../src/verbs.cpp:2419
 msgid "Tweak"
 msgstr ""
 
 #. Zoom
 #: ../src/ui/dialog/inkscape-preferences.cpp:403
-#: ../src/ui/view/edit-widget.cpp:1073 ../src/verbs.cpp:2441
+#: ../src/ui/view/edit-widget.cpp:1073
+#: ../src/verbs.cpp:2441
 #: ../src/widgets/desktop-widget.cpp:490
 #: ../share/extensions/render_alphabetsoup.inx.h:5
 msgid "Zoom"
@@ -11380,66 +10934,63 @@ msgid "Shapes"
 msgstr "Figuras"
 
 #. Pencil
-#: ../src/ui/dialog/inkscape-preferences.cpp:436 ../src/verbs.cpp:2431
+#: ../src/ui/dialog/inkscape-preferences.cpp:436
+#: ../src/verbs.cpp:2431
 msgid "Pencil"
 msgstr "Lapis"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:439
 #: ../src/ui/dialog/tracedialog.cpp:601
 msgid "Tolerance:"
-msgstr ""
+msgstr "Tolerancia:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:440
-msgid ""
-"This value affects the amount of smoothing applied to freehand lines; lower "
-"values produce more uneven paths with more nodes"
+msgid "This value affects the amount of smoothing applied to freehand lines; lower values produce more uneven paths with more nodes"
 msgstr ""
 
 #. Pen
-#: ../src/ui/dialog/inkscape-preferences.cpp:446 ../src/verbs.cpp:2433
+#: ../src/ui/dialog/inkscape-preferences.cpp:446
+#: ../src/verbs.cpp:2433
 msgid "Pen"
 msgstr "Pluma"
 
 #. Calligraphy
-#: ../src/ui/dialog/inkscape-preferences.cpp:452 ../src/verbs.cpp:2435
+#: ../src/ui/dialog/inkscape-preferences.cpp:452
+#: ../src/verbs.cpp:2435
 msgid "Calligraphy"
 msgstr "Caligrafía"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:456
 #, fuzzy
-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 ""
-"Se está marcado, o ancho da pluma está en unidades absolutas (px) "
-"independientes do zoom; doutro xeito o ancho da pluma depende do zoom de "
-"xeito que ten o mesmo aspecto con calquera zoom"
+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 "Se está marcado, o ancho da pluma está en unidades absolutas (px) independientes do zoom; doutro xeito o ancho da pluma depende do zoom de xeito que ten o mesmo aspecto con calquera zoom"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:458
-msgid ""
-"If on, each newly created object will be selected (deselecting previous "
-"selection)"
+msgid "If on, each newly created object will be selected (deselecting previous selection)"
 msgstr ""
 
 #. Paint Bucket
-#: ../src/ui/dialog/inkscape-preferences.cpp:460 ../src/verbs.cpp:2447
+#: ../src/ui/dialog/inkscape-preferences.cpp:460
+#: ../src/verbs.cpp:2447
 #, fuzzy
 msgid "Paint Bucket"
-msgstr "Imprimi-lo documento"
+msgstr "_Pintar o trazo"
 
 #. Eraser
-#: ../src/ui/dialog/inkscape-preferences.cpp:465 ../src/verbs.cpp:2451
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:465
+#: ../src/verbs.cpp:2451
 msgid "Eraser"
-msgstr "Elevar"
+msgstr "Goma"
 
 #. Gradient
-#: ../src/ui/dialog/inkscape-preferences.cpp:475 ../src/verbs.cpp:2439
+#: ../src/ui/dialog/inkscape-preferences.cpp:475
+#: ../src/verbs.cpp:2439
 msgid "Gradient"
 msgstr "Degradado"
 
 #. Connector
-#: ../src/ui/dialog/inkscape-preferences.cpp:479 ../src/verbs.cpp:2445
+#: ../src/ui/dialog/inkscape-preferences.cpp:479
+#: ../src/verbs.cpp:2445
 msgid "Connector"
 msgstr "Conectador"
 
@@ -11448,7 +10999,8 @@ msgid "If on, connector attachment points will not be shown for text objects"
 msgstr ""
 
 #. Dropper
-#: ../src/ui/dialog/inkscape-preferences.cpp:484 ../src/verbs.cpp:2443
+#: ../src/ui/dialog/inkscape-preferences.cpp:484
+#: ../src/verbs.cpp:2443
 msgid "Dropper"
 msgstr "Contagotas"
 
@@ -11457,14 +11009,12 @@ msgid "Save and restore window geometry for each document"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:492
-#, fuzzy
 msgid "Remember and use last window's geometry"
-msgstr "Gardar a xeometría das ventás"
+msgstr "Lembrar e usar a última xeometría das ventás"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:493
-#, fuzzy
 msgid "Don't save window geometry"
-msgstr "Gardar a xeometría das ventás"
+msgstr "Non gardar a xeometría das ventás"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:495
 #: ../src/ui/dialog/inkscape-preferences.cpp:515
@@ -11494,32 +11044,24 @@ msgid "Aggressive"
 msgstr "Agresivo"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:505
-#, fuzzy
 msgid "Saving window geometry (size and position):"
-msgstr "Gardar a xeometría das ventás"
+msgstr "Gardar a xeometría das ventás (tamaño e posición):"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:507
 msgid "Let the window manager determine placement of all windows"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:509
-msgid ""
-"Remember and use the last window's geometry (saves geometry to user "
-"preferences)"
+msgid "Remember and use the last window's geometry (saves geometry to user preferences)"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:511
-msgid ""
-"Save and restore window geometry for each document (saves geometry in the "
-"document)"
+msgid "Save and restore window geometry for each document (saves geometry in the document)"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:513
-#, fuzzy
 msgid "Dialog behavior (requires restart):"
-msgstr ""
-"Indica se as ventás de diálogo teñen un botón para pechalas (require "
-"reiniciar)"
+msgstr "Comportamento das caixas de diálogo (require reiniciar)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:520
 msgid "Dialogs on top:"
@@ -11535,8 +11077,7 @@ msgstr "Os diálogos permanecen enriba das ventás dos documentos"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:527
 msgid "Same as Normal but may work better with some window managers"
-msgstr ""
-"Coma Normal pero podería funcionar mellor con algúns xestores de ventás"
+msgstr "Coma Normal pero podería funcionar mellor con algúns xestores de ventás"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:530
 #, fuzzy
@@ -11548,21 +11089,12 @@ msgid "Whether dialog windows are to be hidden in the window manager taskbar"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:536
-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 ""
-"Modificar o zoom do debuxo cando se redimensiona a ventá de documento, para "
-"manter visible a mesma área (isto ó predeterminado que se pode cambiar en "
-"tódalas ventás usando o botón que hai enriba da barra de desprazamento da "
-"dereita)"
+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 "Modificar o zoom do debuxo cando se redimensiona a ventá de documento, para manter visible a mesma área (isto ó predeterminado que se pode cambiar en tódalas ventás usando o botón que hai enriba da barra de desprazamento da dereita)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:538
 msgid "Whether dialog windows have a close button (requires restart)"
-msgstr ""
-"Indica se as ventás de diálogo teñen un botón para pechalas (require "
-"reiniciar)"
+msgstr "Indica se as ventás de diálogo teñen un botón para pechalas (require reiniciar)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:539
 msgid "Windows"
@@ -11601,13 +11133,8 @@ msgid "Clones preserve their positions when their original is moved."
 msgstr "Os clons conservan as súas posicións cando se move o orixinal."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:561
-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 ""
-"Cada clon móvese de acordo co valor do seu atributo transform=. Por exemplo, "
-"un clon rotado moverase nunha dirección diferente á do seu orixinal."
+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 "Cada clon móvese de acordo co valor do seu atributo transform=. Por exemplo, un clon rotado moverase nunha dirección diferente á do seu orixinal."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:562
 msgid "When the original is deleted, its clones:"
@@ -11631,8 +11158,7 @@ msgid "When applying, use the topmost selected object as clippath/mask"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:576
-msgid ""
-"Uncheck this to use the bottom selected object as the clipping path or mask"
+msgid "Uncheck this to use the bottom selected object as the clipping path or mask"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:577
@@ -11640,14 +11166,13 @@ msgid "Remove clippath/mask object after applying"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:579
-msgid ""
-"After applying, remove the object used as the clipping path or mask from the "
-"drawing"
+msgid "After applying, remove the object used as the clipping path or mask from the drawing"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:580
+#, fuzzy
 msgid "Clippaths and masks"
-msgstr ""
+msgstr "R_echeo e Trazo"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:585
 #: ../src/widgets/select-toolbar.cpp:524
@@ -11677,8 +11202,7 @@ msgstr "Conservar"
 #: ../src/ui/dialog/inkscape-preferences.cpp:593
 #: ../src/widgets/select-toolbar.cpp:525
 msgid "When scaling objects, scale the stroke width by the same proportion"
-msgstr ""
-"Cando se escalan obxectos, escalar o ancho do trazo na mesma proporción"
+msgstr "Cando se escalan obxectos, escalar o ancho do trazo na mesma proporción"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:595
 #: ../src/widgets/select-toolbar.cpp:536
@@ -11700,51 +11224,46 @@ msgid "Store transformation:"
 msgstr "Almacenar a transformación:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:602
-msgid ""
-"If possible, apply transformation to objects without adding a transform= "
-"attribute"
-msgstr ""
-"Se é posible, aplicar a transformación ós obxectos sen engadir un atributo "
-"transform="
+msgid "If possible, apply transformation to objects without adding a transform= attribute"
+msgstr "Se é posible, aplicar a transformación ós obxectos sen engadir un atributo transform="
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:604
 msgid "Always store transformation as a transform= attribute on objects"
-msgstr ""
-"Almacenar sempre a transformación coma un atributo transform= nos obxectos"
+msgstr "Almacenar sempre a transformación coma un atributo transform= nos obxectos"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:606
 msgid "Transforms"
 msgstr "Transformacións"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:611
+#, fuzzy
 msgid "Best quality (slowest)"
-msgstr ""
+msgstr "Calidade baixa (máis rápido)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:613
+#, fuzzy
 msgid "Better quality (slower)"
-msgstr ""
+msgstr "Calidade baixa (máis rápido)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:615
 msgid "Average quality"
-msgstr ""
+msgstr "Calidade media"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:617
-#, fuzzy
 msgid "Lower quality (faster)"
-msgstr "Baixar a Capa"
+msgstr "Calidade menor (máis rápido)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:619
+#, fuzzy
 msgid "Lowest quality (fastest)"
-msgstr ""
+msgstr "Calidade baixa (máis rápido)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:622
 msgid "Gaussian blur quality for display:"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:624
-msgid ""
-"Best quality, but display may be very slow at high zooms (bitmap export "
-"always uses best quality)"
+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:626
@@ -11769,15 +11288,12 @@ msgid "Show filter primitives infobox"
 msgstr "Borrar o atributo"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:636
-msgid ""
-"Show icons and descriptions for the filter primitives available at the "
-"filter effects dialog."
+msgid "Show icons and descriptions for the filter primitives available at the filter effects dialog."
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:638
-#, fuzzy
 msgid "Filters"
-msgstr "milímetros"
+msgstr "Filtros"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:644
 msgid "Select in all layers"
@@ -11794,12 +11310,12 @@ msgstr "Seleccionar na capa actual e mailas súas subcapas"
 #: ../src/ui/dialog/inkscape-preferences.cpp:647
 #, fuzzy
 msgid "Ignore hidden objects and layers"
-msgstr "Ignoraos obxectos agochados"
+msgstr "Ignora-las capas e mailos obxectos agochados"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:648
 #, fuzzy
 msgid "Ignore locked objects and layers"
-msgstr "Ignoraos obxectos bloqueados"
+msgstr "Ignora-las capas e mailos obxectos bloqueados"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:649
 msgid "Deselect upon layer change"
@@ -11811,51 +11327,29 @@ msgstr "Ctrl+A, Tab, Shift+Tab:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:653
 msgid "Make keyboard selection commands work on objects in all layers"
-msgstr ""
-"Facer que os comandos de selección do teclado traballen con obxectos de "
-"tódalas capas"
+msgstr "Facer que os comandos de selección do teclado traballen con obxectos de tódalas capas"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:655
 msgid "Make keyboard selection commands work on objects in current layer only"
-msgstr ""
-"Facer que os comandos de selección do teclado traballen só con obxectos "
-"desta capa"
+msgstr "Facer que os comandos de selección do teclado traballen só con obxectos desta capa"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:657
-msgid ""
-"Make keyboard selection commands work on objects in current layer and all "
-"its sublayers"
-msgstr ""
-"Facer que os comandos de selección do teclado traballen só con obxectos "
-"desta capa e mailas súas subcapas"
+msgid "Make keyboard selection commands work on objects in current layer and all its sublayers"
+msgstr "Facer que os comandos de selección do teclado traballen só con obxectos desta capa e mailas súas subcapas"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:659
 #, fuzzy
-msgid ""
-"Uncheck this to be able to select objects that are hidden (either by "
-"themselves or by being in a hidden layer)"
-msgstr ""
-"Desmarque isto para poder seleccionar obxectos que están agochados (xa sexa "
-"porque o están eles mesmos ou porque pertencen a unha capa ou a un grupo "
-"agochado)"
+msgid "Uncheck this to be able to select objects that are hidden (either by themselves or by being in a hidden layer)"
+msgstr "Desmarque isto para poder seleccionar obxectos que están agochados (xa sexa porque o están eles mesmos ou porque pertencen a unha capa ou a un grupo agochado)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:661
 #, fuzzy
-msgid ""
-"Uncheck this to be able to select objects that are locked (either by "
-"themselves or by being in a locked layer)"
-msgstr ""
-"Desmarque isto para poder seleccionar obxectos que están bloqueados (xa sexa "
-"porque o están eles mesmos ou porque pertencen a unha capa ou a un grupo "
-"bloqueado)"
+msgid "Uncheck this to be able to select objects that are locked (either by themselves or by being in a locked layer)"
+msgstr "Desmarque isto para poder seleccionar obxectos que están bloqueados (xa sexa porque o están eles mesmos ou porque pertencen a unha capa ou a un grupo bloqueado)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:664
-msgid ""
-"Uncheck this to be able to keep the current objects selected when the "
-"current layer changes"
-msgstr ""
-"Desmarque isto para poder manter seleccionados os obxectos cando cambia a "
-"capa actual"
+msgid "Uncheck this to be able to keep the current objects selected when the current layer changes"
+msgstr "Desmarque isto para poder manter seleccionados os obxectos cando cambia a capa actual"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:666
 msgid "Selecting"
@@ -11867,40 +11361,35 @@ msgstr "Resolución predeterminada de exportación:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:674
 msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
-msgstr ""
-"Resolución predeterminada do mapa de bits no diálogo de Exportación (en "
-"puntos por polgada)"
+msgstr "Resolución predeterminada do mapa de bits no diálogo de Exportación (en puntos por polgada)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:676
 msgid "Open Clip Art Library Server Name:"
-msgstr ""
+msgstr "Nome do servidor de Open Clip Art Library:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:677
-msgid ""
-"The server name of the Open Clip Art Library webdav server. It's used by the "
-"Import and Export to OCAL function."
+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:679
 msgid "Open Clip Art Library Username:"
-msgstr ""
+msgstr "Usuario de Open Clip Art Library:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:680
 msgid "The username used to log into Open Clip Art Library."
-msgstr ""
+msgstr "O nome de usuario que se vai usar para conectar con Open Clip Art Library."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:682
 msgid "Open Clip Art Library Password:"
-msgstr ""
+msgstr "Contrasinal de Open Clip Art Library:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:683
 msgid "The password used to log into Open Clip Art Library."
-msgstr ""
+msgstr "O contrasinal que se vai usar para conectar con Open Clip Art Library."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:685
-#, fuzzy
 msgid "Import/Export"
-msgstr "Importar"
+msgstr "Importar/Exportar"
 
 #. TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm
 #: ../src/ui/dialog/inkscape-preferences.cpp:731
@@ -11911,7 +11400,7 @@ msgstr "Porcentaxe"
 #: ../src/ui/dialog/inkscape-preferences.cpp:731
 #, fuzzy
 msgid "Relative Colorimetric"
-msgstr "Movemento rela_tivo"
+msgstr "Relativo a:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:731
 msgid "Absolute Colorimetric"
@@ -11924,12 +11413,12 @@ msgstr ""
 #: ../src/ui/dialog/inkscape-preferences.cpp:739
 #, fuzzy
 msgid "Display adjustment"
-msgstr "Configuración da visualización"
+msgstr "Modo de _visualización"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:741
 #, fuzzy
 msgid "Display profile:"
-msgstr "Configuración da visualización"
+msgstr "Modo de _visualización"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:742
 msgid "The ICC profile to use to calibrate display output."
@@ -11950,7 +11439,7 @@ msgstr ""
 #: ../src/ui/dialog/inkscape-preferences.cpp:754
 #, fuzzy
 msgid "Display rendering intent:"
-msgstr "Configuración da visualización"
+msgstr "Cambiar ó modo de visualización normal"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:755
 #: ../src/ui/dialog/inkscape-preferences.cpp:778
@@ -12001,7 +11490,7 @@ msgstr ""
 #: ../src/ui/dialog/inkscape-preferences.cpp:780
 #, fuzzy
 msgid "Black point compensation"
-msgstr "Destino da Impresión"
+msgstr "Só branco e negro"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:782
 msgid "Enables black point compensation."
@@ -12010,63 +11499,55 @@ msgstr ""
 #: ../src/ui/dialog/inkscape-preferences.cpp:784
 #, fuzzy
 msgid "Preserve black"
-msgstr "Conservar"
+msgstr "Recheo negro"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:789
 msgid "(LittleCMS 1.15 or later required)"
-msgstr ""
+msgstr "(Requírese LittleCMS 1.15 ou posterior)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:791
 msgid "Preserve K channel in CMYK -> CMYK transforms"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:804
-#, fuzzy
 msgid "<none>"
-msgstr "Ningún"
+msgstr "<ningún>"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:850
-#, fuzzy
 msgid "Color management"
-msgstr "Cor do bordo da páxina"
+msgstr "Xestión da cor"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:855
 #, fuzzy
 msgid "Major grid line emphasizing"
-msgstr "Liña _principal de reixa cada:"
+msgstr "Cor das liñas principais da reixa"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:857
 msgid "Don't emphasize gridlines when zoomed out"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:858
-msgid ""
-"If set and zoomed out, the gridlines will be shown in normal color instead "
-"of major grid line color."
+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:860
-#, fuzzy
 msgid "Default grid settings"
-msgstr "Configuración do escritorio"
+msgstr "Configuración predeterminada da reixa"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:866
 #: ../src/ui/dialog/inkscape-preferences.cpp:887
-#, fuzzy
 msgid "Grid units"
-msgstr "_Unidades da reixa:"
+msgstr "Unidades da reixa"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:869
 #: ../src/ui/dialog/inkscape-preferences.cpp:890
-#, fuzzy
 msgid "Origin X"
-msgstr "_Orixe X:"
+msgstr "Orixe X"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:870
 #: ../src/ui/dialog/inkscape-preferences.cpp:891
-#, fuzzy
 msgid "Origin Y"
-msgstr "Ori_xe Y:"
+msgstr "Orixe Y"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:873
 #, fuzzy
@@ -12077,51 +11558,47 @@ msgstr "Separación _X:"
 #: ../src/ui/dialog/inkscape-preferences.cpp:893
 #, fuzzy
 msgid "Spacing Y"
-msgstr "Separación _Y:"
+msgstr "Separación _X:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:877
 #: ../src/ui/dialog/inkscape-preferences.cpp:899
 msgid "Selects the color used for normal grid lines."
-msgstr ""
+msgstr "Selecciona a cor que se usa para as liñas normais da reixa."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:879
 #: ../src/ui/dialog/inkscape-preferences.cpp:901
-#, fuzzy
 msgid "Selects the color used for major (highlighted) grid lines."
-msgstr "Cor das liñas principais (resaltadas) da reixa"
+msgstr "Selecciona a cor das liñas principais (resaltadas) da reixa."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:881
 #: ../src/ui/dialog/inkscape-preferences.cpp:903
-#, fuzzy
 msgid "Major grid line every"
-msgstr "Liña _principal de reixa cada:"
+msgstr "Liña principal de reixa cada"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:882
 msgid "Show dots instead of lines"
-msgstr ""
+msgstr "Mostrar puntos en vez de liñas"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:896
-#, fuzzy
 msgid "Angle X"
-msgstr "Ángulo:"
+msgstr "Ángulo X"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:897
-#, fuzzy
 msgid "Angle Z"
-msgstr "Ángulo:"
+msgstr "Ángulo Z"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:910
-#, fuzzy
 msgid "Use named colors"
-msgstr "Última cor seleccionada"
+msgstr "Usar cores con nome"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:911
 msgid "If set, write the CSS name of the color instead of it's numeric value."
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:913
+#, fuzzy
 msgid "XML looks"
-msgstr ""
+msgstr "Editor de _XML..."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:915
 #, fuzzy
@@ -12131,7 +11608,7 @@ msgstr "Establecer o atributo"
 #: ../src/ui/dialog/inkscape-preferences.cpp:916
 #, fuzzy
 msgid "Inline the XML attributes"
-msgstr "Borrar o atributo"
+msgstr "image/svg+xml"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:919
 #, fuzzy
@@ -12145,12 +11622,11 @@ msgstr ""
 #: ../src/ui/dialog/inkscape-preferences.cpp:921
 #, fuzzy
 msgid "Path string"
-msgstr "Configuración do escritorio"
+msgstr "Pechando o camiño."
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:923
-#, fuzzy
 msgid "Allow relative coordinates"
-msgstr "Coordenadas do cursor"
+msgstr "Permitir coordenadas relativas"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:924
 msgid "If set, relative coordinates may be used in path data"
@@ -12165,9 +11641,7 @@ msgid "Force repeat commands"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:932
-msgid ""
-"If set, force repeating of the same command (i.e. output 'L 1,2 L 3,4' "
-"instead of 'L 1,2 3,4')."
+msgid "If set, force repeating of the same command (i.e. output 'L 1,2 L 3,4' instead of 'L 1,2 3,4')."
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:934
@@ -12189,9 +11663,7 @@ msgid "Minimum exponent"
 msgstr "Tamaño mínimo"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:940
-msgid ""
-"The minimum size of a number (10 to the power of this exponent), smaller "
-"numbers will be written as zero."
+msgid "The minimum size of a number (10 to the power of this exponent), smaller numbers will be written as zero."
 msgstr ""
 
 # Rosetta
@@ -12203,33 +11675,24 @@ msgstr "Engadir comentarios da etiqueta na saída de impresión"
 # Rosetta
 #: ../src/ui/dialog/inkscape-preferences.cpp:949
 #, fuzzy
-msgid ""
-"When on, a comment will be added to the raw print output, marking the "
-"rendered output for an object with its label"
-msgstr ""
-"De estar seleccionado, engadiráselle un comentario á saída crúa de "
-"impresión, marcando a saída rendererizada dun obxecto coa súa etiqueta"
+msgid "When on, a comment will be added to the raw print output, marking the rendered output for an object with its label"
+msgstr "De estar seleccionado, engadiráselle un comentario á saída crúa de impresión, marcando a saída rendererizada dun obxecto coa súa etiqueta"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:951
 msgid "Prevent sharing of gradient definitions"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:953
-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"
+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:955
+#, fuzzy
 msgid "Simplification threshold:"
-msgstr ""
+msgstr "Limiar de clic/arrastre:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:956
-msgid ""
-"How strong is the 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."
+msgid "How strong is the 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:958
@@ -12262,14 +11725,12 @@ msgstr "Barra de Comandos"
 #: ../src/ui/dialog/inkscape-preferences.cpp:973
 #, fuzzy
 msgid "Set the size for the commands toolbar to use (requires restart)"
-msgstr ""
-"Indica se as ventás de diálogo teñen un botón para pechalas (require "
-"reiniciar)"
+msgstr "Indica se as ventás de diálogo teñen un botón para pechalas (require reiniciar)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:976
 #, fuzzy
 msgid "Tool controls bar icon size"
-msgstr "Barra de Controis das Ferramentas"
+msgstr "Amosar ou agochar a barra de Controis das Ferramentas"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:977
 msgid "Set the size for the secondary toolbar to use (requires restart)"
@@ -12282,12 +11743,9 @@ msgstr ""
 #: ../src/ui/dialog/inkscape-preferences.cpp:981
 #, fuzzy
 msgid "Set the size for the main tools to use (requires restart)"
-msgstr ""
-"Indica se as ventás de diálogo teñen un botón para pechalas (require "
-"reiniciar)"
+msgstr "Define o tamaño         (require reiniciar)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:984
-#, fuzzy
 msgid "Maximum number of recent documents:"
 msgstr "Número máximo de documentos recentes:"
 
@@ -12297,29 +11755,25 @@ msgstr "A lonxitude máxima da lista Abrir Recente no menú Ficheiro"
 
 #. Autosave options
 #: ../src/ui/dialog/inkscape-preferences.cpp:990
+#, fuzzy
 msgid "Enable auto-save of document"
-msgstr ""
+msgstr "Garda-lo documento cun novo nome"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:991
-msgid ""
-"Automatically saves the current document to disk at a given interval, thus "
-"minimizing loss at a crash"
+msgid "Automatically saves the current document to disk at a given interval, thus minimizing loss at a crash"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:993
 msgid "Interval (in minutes):"
-msgstr ""
+msgstr "Intervalo (en minutos):"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:993
-msgid ""
-"Sets the interval (in minutes) at which a workspace will be automatically "
-"saved to disk"
+msgid "Sets the interval (in minutes) at which a workspace will be automatically saved to disk"
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:995
-#, fuzzy
 msgid "Path:"
-msgstr "Camiño"
+msgstr "Camiño:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:995
 msgid "Sets the directory where autosaves will be written"
@@ -12331,9 +11785,7 @@ msgid "Maximum number of autosaves"
 msgstr "Número máximo de documentos recentes:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:997
-msgid ""
-"Allows for limiting the space used by autosaves, by setting a maximum number "
-"of allowed files"
+msgid "Allows for limiting the space used by autosaves, by setting a maximum number of allowed files"
 msgstr ""
 
 #. When changing the interval or enabling/disabling the autosave function,
@@ -12359,9 +11811,8 @@ msgid "Enbles automatic reload of linked images when changed on disk."
 msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:1030
-#, fuzzy
 msgid "Bitmap editor:"
-msgstr "Editor de degradados"
+msgstr "Editor de mapas de bits:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:1036
 msgid "Misc"
@@ -12369,48 +11820,45 @@ msgstr "Miscelánea"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:74
 msgid "Apply new effect"
-msgstr ""
+msgstr "Aplicar un novo efecto"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:75
-#, fuzzy
 msgid "Current effect"
-msgstr "Capa actual"
+msgstr "Efecto actual"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:76
-#, fuzzy
 msgid "Effect list"
-msgstr "Efe_ctos"
+msgstr "Lista de efectos"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:239
 msgid "Unknown effect is applied"
-msgstr ""
+msgstr "Aplicouse un efecto descoñecido"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:242
 msgid "No effect applied"
-msgstr ""
+msgstr "Non se aplicou ningún efecto"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:248
 msgid "Item is not a path or shape"
-msgstr ""
+msgstr "O elemento non é un camiño ou unha figura"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:252
 msgid "Only one item can be selected"
-msgstr ""
+msgstr "Só se pode seleccionar un elemento"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:256
-#, fuzzy
 msgid "Empty selection"
-msgstr "Borra-la selección"
+msgstr "Selección baleira"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:349
 #, fuzzy
 msgid "Remove path effect"
-msgstr "Eli_minar"
+msgstr "Eliminar o efecto da selección"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:366
 #, fuzzy
 msgid "Move path effect up"
-msgstr "Eli_minar"
+msgstr "Use <b>Shift+D</b> para buscar un camiño"
 
 #: ../src/ui/dialog/livepatheffect-editor.cpp:384
 #, fuzzy
@@ -12433,10 +11881,12 @@ msgstr ""
 
 #: ../src/ui/dialog/memory.cpp:99
 msgid "Total"
-msgstr ""
+msgstr "Total"
 
-#: ../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 "Descoñecido"
 
@@ -12453,34 +11903,27 @@ msgid "Ready."
 msgstr ""
 
 #: ../src/ui/dialog/messages.cpp:76
-msgid ""
-"Enable log display by setting dialogs.debug 'redirect' attribute to 1 in "
-"preferences.xml"
+msgid "Enable log display by setting dialogs.debug 'redirect' attribute to 1 in preferences.xml"
 msgstr ""
 
 #: ../src/ui/dialog/ocaldialogs.cpp:77
-#, fuzzy
 msgid "File"
-msgstr "_Ficheiro"
+msgstr "Ficheiro"
 
 #: ../src/ui/dialog/ocaldialogs.cpp:175
-#, fuzzy
 msgid "Username:"
-msgstr "Nome de _usuario:"
+msgstr "Nome de usuario:"
 
 #: ../src/ui/dialog/ocaldialogs.cpp:176
-#, fuzzy
 msgid "Password:"
-msgstr "_Contrasinal:"
+msgstr "Contrasinal:"
 
 #: ../src/ui/dialog/ocaldialogs.cpp:402
 msgid "Error while reading the Open Clip Art RSS feed"
 msgstr ""
 
 #: ../src/ui/dialog/ocaldialogs.cpp:440
-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)"
+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 ""
 
 #: ../src/ui/dialog/ocaldialogs.cpp:454
@@ -12488,22 +11931,21 @@ msgid "Server supplied malformed Clip Art feed"
 msgstr ""
 
 #: ../src/ui/dialog/ocaldialogs.cpp:545
-#, fuzzy
 msgid "Search for:"
-msgstr "Xerarquía"
+msgstr "Buscar:"
 
 #: ../src/ui/dialog/ocaldialogs.cpp:546
 msgid "No files matched your search"
 msgstr ""
 
 #: ../src/ui/dialog/ocaldialogs.cpp:557
-#, fuzzy
 msgid "Search"
-msgstr "Xerarquía"
+msgstr "Buscar"
 
 #: ../src/ui/dialog/ocaldialogs.cpp:574
+#, fuzzy
 msgid "Files found"
-msgstr ""
+msgstr "Exportando %d ficheiros"
 
 #: ../src/ui/dialog/print.cpp:138
 msgid "Could not open temporary PNG for bitmap printing"
@@ -12516,18 +11958,17 @@ msgstr "Non se puido exportar ó nome de ficheiro %s.\n"
 
 #: ../src/ui/dialog/print.cpp:177
 msgid "Failed to set CairoRenderContext"
-msgstr ""
+msgstr "Fallo ó definir CairoRenderContext"
 
 #. set up dialog title, based on document name
 #: ../src/ui/dialog/print.cpp:217
-#, fuzzy
 msgid "SVG Document"
-msgstr "Documento"
+msgstr "Documento SVG"
 
 #: ../src/ui/dialog/print.cpp:218
 #, fuzzy
 msgid "Print"
-msgstr "Punto"
+msgstr "Im_primir..."
 
 #. build custom preferences tab
 #: ../src/ui/dialog/print.cpp:245
@@ -12536,18 +11977,16 @@ msgid "Rendering"
 msgstr "Renderizado"
 
 #: ../src/ui/dialog/scriptdialog.cpp:211
-#, fuzzy
 msgid "_Execute Javascript"
-msgstr "_Executar Perl"
+msgstr "_Executar Javascript"
 
 #: ../src/ui/dialog/scriptdialog.cpp:213
 msgid "_Execute Python"
 msgstr "_Executar Python"
 
 #: ../src/ui/dialog/scriptdialog.cpp:215
-#, fuzzy
 msgid "_Execute Ruby"
-msgstr "_Executar Python"
+msgstr "_Executar Ruby"
 
 #: ../src/ui/dialog/scriptdialog.cpp:224
 msgid "Script"
@@ -12565,11 +12004,12 @@ msgstr "Erros"
 #: ../src/ui/dialog/session-player.cpp:73
 #, fuzzy
 msgid "Session file"
-msgstr "Recheo non asignado"
+msgstr "Ficheiro PDF"
 
 #: ../src/ui/dialog/session-player.cpp:74
+#, fuzzy
 msgid "Playback controls"
-msgstr ""
+msgstr "Barra de Controis das Ferramentas"
 
 #: ../src/ui/dialog/session-player.cpp:75
 #, fuzzy
@@ -12580,8 +12020,9 @@ msgstr "Información do uso da memoria"
 #. fixme: Does this mean the active file for the session, or the file for the active session?
 #. Please indicate which with a TRANSLATORS comment.
 #: ../src/ui/dialog/session-player.cpp:85
+#, fuzzy
 msgid "Active session file:"
-msgstr ""
+msgstr "Ficheiro de Encapsulated Postscript"
 
 #: ../src/ui/dialog/session-player.cpp:86
 msgid "Delay (milliseconds):"
@@ -12589,19 +12030,17 @@ msgstr ""
 
 #. Unload/load buttons
 #: ../src/ui/dialog/session-player.cpp:94
-#, fuzzy
 msgid "Close file"
-msgstr "Pe_char"
+msgstr "Pechar o ficheiro"
 
 #: ../src/ui/dialog/session-player.cpp:95
-#, fuzzy
 msgid "Open new file"
-msgstr "Eli_minar"
+msgstr "Abrir un novo ficheiro"
 
 #: ../src/ui/dialog/session-player.cpp:96
 #, fuzzy
 msgid "Set delay"
-msgstr "Establecer coma predeterminado"
+msgstr "Establecer o atributo"
 
 #: ../src/ui/dialog/session-player.cpp:138
 #, fuzzy
@@ -12626,8 +12065,9 @@ msgid "Play"
 msgstr ""
 
 #: ../src/ui/dialog/session-player.cpp:177
+#, fuzzy
 msgid "Open session file"
-msgstr ""
+msgstr "Abrir un novo ficheiro"
 
 #. #### begin left panel
 #. ### begin notebook
@@ -12655,14 +12095,12 @@ msgstr "Debuxando un camiño a man alzada"
 #. canny edge detection
 #. TRANSLATORS: "Canny" is the name of the inventor of this edge detection method
 #: ../src/ui/dialog/tracedialog.cpp:420
-#, fuzzy
 msgid "Edge detection"
-msgstr "Detección de Bordos"
+msgstr "Detección de bordos"
 
 #: ../src/ui/dialog/tracedialog.cpp:424
-#, fuzzy
 msgid "Trace with optimal edge detection by J. Canny's algorithm"
-msgstr "Vectorizar usando o algoritmo de detección de bordos de J. Canny"
+msgstr "Vectorizar usando o algoritmo óptimo de detección de bordos de J. Canny"
 
 #: ../src/ui/dialog/tracedialog.cpp:441
 msgid "Brightness cutoff for adjacent pixels (determines edge thickness)"
@@ -12673,16 +12111,18 @@ msgstr ""
 #. of colors in an image by selecting an optimized set of representative
 #. colors and then re-applying this reduced set to the original image.
 #: ../src/ui/dialog/tracedialog.cpp:453
+#, fuzzy
 msgid "Color quantization"
-msgstr ""
+msgstr "Cor inicial:"
 
 #: ../src/ui/dialog/tracedialog.cpp:457
 msgid "Trace along the boundaries of reduced colors"
 msgstr ""
 
 #: ../src/ui/dialog/tracedialog.cpp:465
+#, fuzzy
 msgid "The number of reduced colors"
-msgstr ""
+msgstr "Por número de segmentos"
 
 #: ../src/ui/dialog/tracedialog.cpp:467
 msgid "Colors:"
@@ -12690,9 +12130,8 @@ msgstr "Cores:"
 
 #. swap black and white
 #: ../src/ui/dialog/tracedialog.cpp:473
-#, fuzzy
 msgid "Invert image"
-msgstr "Recheo non asignado"
+msgstr "inverter a imaxe"
 
 #: ../src/ui/dialog/tracedialog.cpp:478
 msgid "Invert black and white regions"
@@ -12714,13 +12153,13 @@ msgid "Scans:"
 msgstr ""
 
 #: ../src/ui/dialog/tracedialog.cpp:501
+#, fuzzy
 msgid "The desired number of scans"
-msgstr ""
+msgstr "Por número de segmentos"
 
 #: ../src/ui/dialog/tracedialog.cpp:505
-#, fuzzy
 msgid "Colors"
-msgstr "Cores:"
+msgstr "Cores"
 
 #: ../src/ui/dialog/tracedialog.cpp:509
 msgid "Trace the given number of reduced colors"
@@ -12728,12 +12167,11 @@ msgstr ""
 
 #: ../src/ui/dialog/tracedialog.cpp:513
 msgid "Grays"
-msgstr ""
+msgstr "Grises"
 
 #: ../src/ui/dialog/tracedialog.cpp:517
-#, fuzzy
 msgid "Same as Colors, but the result is converted to grayscale"
-msgstr "O mesmo ca Cor, pero converte o resultado a escala de grises"
+msgstr "O mesmo ca Cores, pero converte o resultado a escala de grises"
 
 #. TRANSLATORS: "Smooth" is a verb here
 #: ../src/ui/dialog/tracedialog.cpp:522
@@ -12750,14 +12188,13 @@ msgid "Stack scans"
 msgstr ""
 
 #: ../src/ui/dialog/tracedialog.cpp:532
-msgid ""
-"Stack scans on top of one another (no gaps) instead of tiling (usually with "
-"gaps)"
+msgid "Stack scans on top of one another (no gaps) instead of tiling (usually with gaps)"
 msgstr ""
 
 #: ../src/ui/dialog/tracedialog.cpp:535
+#, fuzzy
 msgid "Remove background"
-msgstr ""
+msgstr "Imaxe de Fondo"
 
 #: ../src/ui/dialog/tracedialog.cpp:540
 msgid "Remove bottom (background) layer when done"
@@ -12782,14 +12219,13 @@ msgid "Speckles of up to this many pixels will be suppressed"
 msgstr ""
 
 #: ../src/ui/dialog/tracedialog.cpp:571
-#, fuzzy
 msgid "Size:"
-msgstr "Tamaño"
+msgstr "Tamaño:"
 
 #: ../src/ui/dialog/tracedialog.cpp:574
 #, fuzzy
 msgid "Smooth corners"
-msgstr "Suavizar"
+msgstr "Escalar as esquinas redondeadas"
 
 #: ../src/ui/dialog/tracedialog.cpp:576
 msgid "Smooth out sharp corners of the trace"
@@ -12800,25 +12236,22 @@ msgid "Increase this to smooth corners more"
 msgstr ""
 
 #: ../src/ui/dialog/tracedialog.cpp:589
-#, fuzzy
 msgid "Optimize paths"
-msgstr "Optimizar"
+msgstr "Optimizar os camiños"
 
 #: ../src/ui/dialog/tracedialog.cpp:592
 msgid "Try to optimize paths by joining adjacent Bezier curve segments"
 msgstr ""
 
 #: ../src/ui/dialog/tracedialog.cpp:600
-msgid ""
-"Increase this to reduce the number of nodes in the trace by more aggressive "
-"optimization"
+msgid "Increase this to reduce the number of nodes in the trace by more aggressive optimization"
 msgstr ""
 
 #. ## end option page
-#: ../src/ui/dialog/tracedialog.cpp:607 ../src/ui/dialog/tracedialog.cpp:613
-#, fuzzy
+#: ../src/ui/dialog/tracedialog.cpp:607
+#: ../src/ui/dialog/tracedialog.cpp:613
 msgid "Options"
-msgstr "Opcións de Oaf"
+msgstr "Opcións"
 
 #. ### credits
 #: ../src/ui/dialog/tracedialog.cpp:621
@@ -12841,15 +12274,12 @@ msgstr "Cubra a área que quere seleccionar coma primeiro plano"
 
 #. ## preview
 #: ../src/ui/dialog/tracedialog.cpp:645
-#, fuzzy
 msgid "Update"
-msgstr "Data"
+msgstr "Actualizar"
 
 #: ../src/ui/dialog/tracedialog.cpp:651
 #, fuzzy
-msgid ""
-"Preview the intermediate bitmap with the current settings, without actual "
-"tracing"
+msgid "Preview the intermediate bitmap with the current settings, without actual tracing"
 msgstr "Previsualizar o resultado ca vectorización actual"
 
 #: ../src/ui/dialog/tracedialog.cpp:655
@@ -12909,56 +12339,50 @@ msgid "Rotation angle (positive = counterclockwise)"
 msgstr "Ángulo de rotación (positivo = sentido antihorario)"
 
 #: ../src/ui/dialog/transformation.cpp:93
-msgid ""
-"Horizontal skew angle (positive = counterclockwise), or absolute "
-"displacement, or percentage displacement"
-msgstr ""
-"Ángulo de inclinación horizontal (positivo = sentido antihorario), ou "
-"desprazamento absoluto, ou porcentaxe de desprazamento"
+msgid "Horizontal skew angle (positive = counterclockwise), or absolute displacement, or percentage displacement"
+msgstr "Ángulo de inclinación horizontal (positivo = sentido antihorario), ou desprazamento absoluto, ou porcentaxe de desprazamento"
 
 #: ../src/ui/dialog/transformation.cpp:95
-msgid ""
-"Vertical skew angle (positive = counterclockwise), or absolute displacement, "
-"or percentage displacement"
-msgstr ""
-"Ángulo de inclinación vertical (positivo = sentido antihorario), ou "
-"desprazamento absoluto, ou porcentaxe de desprazamento"
+msgid "Vertical skew angle (positive = counterclockwise), or absolute displacement, or percentage displacement"
+msgstr "Ángulo de inclinación vertical (positivo = sentido antihorario), ou desprazamento absoluto, ou porcentaxe de desprazamento"
 
 #: ../src/ui/dialog/transformation.cpp:98
+#, fuzzy
 msgid "Transformation matrix element A"
-msgstr ""
+msgstr "Novo nodo"
 
 #: ../src/ui/dialog/transformation.cpp:99
+#, fuzzy
 msgid "Transformation matrix element B"
-msgstr ""
+msgstr "Novo nodo"
 
 #: ../src/ui/dialog/transformation.cpp:100
+#, fuzzy
 msgid "Transformation matrix element C"
-msgstr ""
+msgstr "Novo nodo"
 
 #: ../src/ui/dialog/transformation.cpp:101
+#, fuzzy
 msgid "Transformation matrix element D"
-msgstr ""
+msgstr "Novo nodo"
 
 #: ../src/ui/dialog/transformation.cpp:102
+#, fuzzy
 msgid "Transformation matrix element E"
-msgstr ""
+msgstr "Novo nodo"
 
 #: ../src/ui/dialog/transformation.cpp:103
+#, fuzzy
 msgid "Transformation matrix element F"
-msgstr ""
+msgstr "Novo nodo"
 
 #: ../src/ui/dialog/transformation.cpp:105
 msgid "Rela_tive move"
 msgstr "Movemento rela_tivo"
 
 #: ../src/ui/dialog/transformation.cpp:105
-msgid ""
-"Add the specified relative displacement to the current position; otherwise, "
-"edit the current absolute position directly"
-msgstr ""
-"Engadir o desprazamento relativo especificado á posición actual; doutro "
-"xeito, edita a posición absoluta actual directamente"
+msgid "Add the specified relative displacement to the current position; otherwise, edit the current absolute position directly"
+msgstr "Engadir o desprazamento relativo especificado á posición actual; doutro xeito, edita a posición absoluta actual directamente"
 
 #: ../src/ui/dialog/transformation.cpp:106
 msgid "Scale proportionally"
@@ -12973,21 +12397,16 @@ msgid "Apply to each _object separately"
 msgstr "Aplicar a cada _obxecto por separado"
 
 #: ../src/ui/dialog/transformation.cpp:107
-msgid ""
-"Apply the scale/rotate/skew to each selected object separately; otherwise, "
-"transform the selection as a whole"
-msgstr ""
-"Aplicar escalar/rotar/inclinar a cada obxecto seleccionado por separado; "
-"doutro xeito, transformarase a selección coma un conxunto"
+msgid "Apply the scale/rotate/skew to each selected object separately; otherwise, transform the selection as a whole"
+msgstr "Aplicar escalar/rotar/inclinar a cada obxecto seleccionado por separado; doutro xeito, transformarase a selección coma un conxunto"
 
 #: ../src/ui/dialog/transformation.cpp:108
+#, fuzzy
 msgid "Edit c_urrent matrix"
-msgstr ""
+msgstr "Editar as fases do degradado"
 
 #: ../src/ui/dialog/transformation.cpp:108
-msgid ""
-"Edit the current transform= matrix; otherwise, post-multiply transform= by "
-"this matrix"
+msgid "Edit the current transform= matrix; otherwise, post-multiply transform= by this matrix"
 msgstr ""
 
 #: ../src/ui/dialog/transformation.cpp:118
@@ -13021,11 +12440,11 @@ msgstr "Aplica-la transformación á selección"
 #: ../src/ui/dialog/transformation.cpp:842
 #, fuzzy
 msgid "Edit transformation matrix"
-msgstr "Reinicia-la transformación"
+msgstr "Editar as fases do degradado"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:44
 msgid "_Use SSL"
-msgstr ""
+msgstr "_Usar SSL"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:44
 #, fuzzy
@@ -13034,44 +12453,39 @@ msgstr "Elevar"
 
 #. Construct dialog interface
 #: ../src/ui/dialog/whiteboard-connect.cpp:75
-#, fuzzy
 msgid "_Server:"
-msgstr "_Gardar"
+msgstr "_Servidor:"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:76
-#, fuzzy
 msgid "_Username:"
 msgstr "Nome de _usuario:"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:77
-#, fuzzy
 msgid "_Password:"
 msgstr "_Contrasinal:"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:78
-#, fuzzy
 msgid "P_ort:"
-msgstr "_Exportar"
+msgstr "P_orto:"
 
 #. Buttons
 #: ../src/ui/dialog/whiteboard-connect.cpp:113
-#, fuzzy
 msgid "Connect"
-msgstr "Conectador"
+msgstr "Conectar"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:144
 msgid "Establishing connection to Jabber server <b>%1</b>"
-msgstr ""
+msgstr "Establecendo a conexión co servidor Jabber <b>%1</b>"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:171
 #: ../src/ui/dialog/whiteboard-connect.cpp:216
 #: ../src/ui/dialog/whiteboard-connect.cpp:254
 msgid "Failed to establish connection to Jabber server <b>%1</b>"
-msgstr ""
+msgstr "Produciuse un erro ó establecer a conexión co servidor Jabber <b>%1</b>"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:209
 msgid "Establishing connection to Jabber server <b>%1</b> as user <b>%2</b>"
-msgstr ""
+msgstr "Establecendo a conexión co servidor Jabber <b>%1</b> co usuario <b>%2</b>"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:221
 msgid "Authentication failed on Jabber server <b>%1</b> as <b>%2</b>"
@@ -13085,7 +12499,7 @@ msgstr ""
 #: ../src/ui/dialog/whiteboard-connect.cpp:232
 #: ../src/ui/dialog/whiteboard-connect.cpp:270
 msgid "Connected to Jabber server <b>%1</b> as <b>%2</b>"
-msgstr ""
+msgstr "Conectado ó servidor Jabber <b>%1</b> coma <b>%2</b>"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:259
 msgid "Registration failed on Jabber server <b>%1</b> as <b>%2</b>"
@@ -13114,7 +12528,7 @@ msgstr "Crear rectángulo"
 #: ../src/ui/dialog/whiteboard-sharewithchat.cpp:102
 #, fuzzy
 msgid "Connect to chatroom"
-msgstr "Conectador"
+msgstr "Obxecto a camiño"
 
 #: ../src/ui/dialog/whiteboard-sharewithchat.cpp:137
 msgid "Synchronizing with chatroom <b>%1@%2</b> using the handle <b>%3</b>"
@@ -13122,8 +12536,9 @@ msgstr ""
 
 #. Construct dialog interface
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:76
+#, fuzzy
 msgid "_User's Jabber ID:"
-msgstr ""
+msgstr "Establecer o ID do obxecto"
 
 #. Buttons
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:80
@@ -13131,13 +12546,12 @@ msgid "_Invite user"
 msgstr ""
 
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:81
-#, fuzzy
 msgid "_Cancel"
-msgstr "Cancelar"
+msgstr "_Cancelar"
 
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:92
 msgid "Buddy List"
-msgstr ""
+msgstr "Lista de amigos"
 
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:181
 msgid "Sending whiteboard invitation to <b>%1</b>"
@@ -13159,180 +12573,292 @@ msgstr ""
 #. Node Tool controls
 #. Calligraphy Tool controls
 #. Session playback controls
-#: ../src/ui/stock-items.cpp:31 ../src/ui/stock-items.cpp:32
-#: ../src/ui/stock-items.cpp:33 ../src/ui/stock-items.cpp:34
-#: ../src/ui/stock-items.cpp:35 ../src/ui/stock-items.cpp:36
-#: ../src/ui/stock-items.cpp:37 ../src/ui/stock-items.cpp:38
-#: ../src/ui/stock-items.cpp:39 ../src/ui/stock-items.cpp:40
-#: ../src/ui/stock-items.cpp:41 ../src/ui/stock-items.cpp:42
-#: ../src/ui/stock-items.cpp:45 ../src/ui/stock-items.cpp:46
-#: ../src/ui/stock-items.cpp:47 ../src/ui/stock-items.cpp:48
-#: ../src/ui/stock-items.cpp:49 ../src/ui/stock-items.cpp:50
-#: ../src/ui/stock-items.cpp:51 ../src/ui/stock-items.cpp:52
-#: ../src/ui/stock-items.cpp:53 ../src/ui/stock-items.cpp:54
-#: ../src/ui/stock-items.cpp:55 ../src/ui/stock-items.cpp:56
-#: ../src/ui/stock-items.cpp:57 ../src/ui/stock-items.cpp:58
-#: ../src/ui/stock-items.cpp:61 ../src/ui/stock-items.cpp:62
-#: ../src/ui/stock-items.cpp:63 ../src/ui/stock-items.cpp:64
-#: ../src/ui/stock-items.cpp:65 ../src/ui/stock-items.cpp:66
-#: ../src/ui/stock-items.cpp:67 ../src/ui/stock-items.cpp:68
-#: ../src/ui/stock-items.cpp:69 ../src/ui/stock-items.cpp:70
-#: ../src/ui/stock-items.cpp:71 ../src/ui/stock-items.cpp:72
-#: ../src/ui/stock-items.cpp:73 ../src/ui/stock-items.cpp:74
-#: ../src/ui/stock-items.cpp:75 ../src/ui/stock-items.cpp:76
-#: ../src/ui/stock-items.cpp:77 ../src/ui/stock-items.cpp:78
-#: ../src/ui/stock-items.cpp:79 ../src/ui/stock-items.cpp:80
-#: ../src/ui/stock-items.cpp:81 ../src/ui/stock-items.cpp:82
-#: ../src/ui/stock-items.cpp:83 ../src/ui/stock-items.cpp:84
-#: ../src/ui/stock-items.cpp:85 ../src/ui/stock-items.cpp:86
-#: ../src/ui/stock-items.cpp:87 ../src/ui/stock-items.cpp:88
-#: ../src/ui/stock-items.cpp:91 ../src/ui/stock-items.cpp:92
-#: ../src/ui/stock-items.cpp:93 ../src/ui/stock-items.cpp:94
-#: ../src/ui/stock-items.cpp:95 ../src/ui/stock-items.cpp:96
-#: ../src/ui/stock-items.cpp:97 ../src/ui/stock-items.cpp:98
-#: ../src/ui/stock-items.cpp:99 ../src/ui/stock-items.cpp:100
-#: ../src/ui/stock-items.cpp:101 ../src/ui/stock-items.cpp:102
-#: ../src/ui/stock-items.cpp:103 ../src/ui/stock-items.cpp:104
-#: ../src/ui/stock-items.cpp:107 ../src/ui/stock-items.cpp:108
-#: ../src/ui/stock-items.cpp:109 ../src/ui/stock-items.cpp:110
-#: ../src/ui/stock-items.cpp:111 ../src/ui/stock-items.cpp:112
-#: ../src/ui/stock-items.cpp:113 ../src/ui/stock-items.cpp:114
-#: ../src/ui/stock-items.cpp:115 ../src/ui/stock-items.cpp:116
-#: ../src/ui/stock-items.cpp:117 ../src/ui/stock-items.cpp:118
-#: ../src/ui/stock-items.cpp:119 ../src/ui/stock-items.cpp:120
-#: ../src/ui/stock-items.cpp:121 ../src/ui/stock-items.cpp:122
-#: ../src/ui/stock-items.cpp:123 ../src/ui/stock-items.cpp:124
-#: ../src/ui/stock-items.cpp:125 ../src/ui/stock-items.cpp:126
-#: ../src/ui/stock-items.cpp:129 ../src/ui/stock-items.cpp:130
-#: ../src/ui/stock-items.cpp:131 ../src/ui/stock-items.cpp:132
-#: ../src/ui/stock-items.cpp:133 ../src/ui/stock-items.cpp:134
-#: ../src/ui/stock-items.cpp:135 ../src/ui/stock-items.cpp:136
-#: ../src/ui/stock-items.cpp:137 ../src/ui/stock-items.cpp:138
-#: ../src/ui/stock-items.cpp:139 ../src/ui/stock-items.cpp:140
-#: ../src/ui/stock-items.cpp:141 ../src/ui/stock-items.cpp:142
-#: ../src/ui/stock-items.cpp:143 ../src/ui/stock-items.cpp:144
-#: ../src/ui/stock-items.cpp:145 ../src/ui/stock-items.cpp:149
-#: ../src/ui/stock-items.cpp:150 ../src/ui/stock-items.cpp:151
-#: ../src/ui/stock-items.cpp:152 ../src/ui/stock-items.cpp:155
-#: ../src/ui/stock-items.cpp:156 ../src/ui/stock-items.cpp:157
-#: ../src/ui/stock-items.cpp:160 ../src/ui/stock-items.cpp:161
-#: ../src/ui/stock-items.cpp:162 ../src/ui/stock-items.cpp:163
-#: ../src/ui/stock-items.cpp:164 ../src/ui/stock-items.cpp:165
-#: ../src/ui/stock-items.cpp:166 ../src/ui/stock-items.cpp:167
-#: ../src/ui/stock-items.cpp:168 ../src/ui/stock-items.cpp:169
-#: ../src/ui/stock-items.cpp:170 ../src/ui/stock-items.cpp:171
-#: ../src/ui/stock-items.cpp:174 ../src/ui/stock-items.cpp:175
-#: ../src/ui/stock-items.cpp:176 ../src/ui/stock-items.cpp:177
-#: ../src/ui/stock-items.cpp:180 ../src/ui/stock-items.cpp:181
-#: ../src/ui/stock-items.cpp:182 ../src/ui/stock-items.cpp:183
-#: ../src/ui/stock-items.cpp:184 ../src/ui/stock-items.cpp:185
-#: ../src/ui/stock-items.cpp:186 ../src/ui/stock-items.cpp:187
-#: ../src/ui/stock-items.cpp:188 ../src/ui/stock-items.cpp:189
-#: ../src/ui/stock-items.cpp:190 ../src/ui/stock-items.cpp:193
-#: ../src/ui/stock-items.cpp:194 ../src/ui/stock-items.cpp:197
-#: ../src/ui/stock-items.cpp:198 ../src/ui/stock-items.cpp:199
-#: ../src/ui/stock-items.cpp:200 ../src/ui/stock-items.cpp:201
-#: ../src/ui/view/edit-widget.cpp:343 ../src/ui/view/edit-widget.cpp:348
-#: ../src/ui/view/edit-widget.cpp:356 ../src/ui/view/edit-widget.cpp:361
-#: ../src/ui/view/edit-widget.cpp:366 ../src/ui/view/edit-widget.cpp:371
-#: ../src/ui/view/edit-widget.cpp:376 ../src/ui/view/edit-widget.cpp:381
-#: ../src/ui/view/edit-widget.cpp:394 ../src/ui/view/edit-widget.cpp:399
-#: ../src/ui/view/edit-widget.cpp:413 ../src/ui/view/edit-widget.cpp:417
-#: ../src/ui/view/edit-widget.cpp:421 ../src/ui/view/edit-widget.cpp:425
-#: ../src/ui/view/edit-widget.cpp:429 ../src/ui/view/edit-widget.cpp:433
-#: ../src/ui/view/edit-widget.cpp:447 ../src/ui/view/edit-widget.cpp:451
-#: ../src/ui/view/edit-widget.cpp:455 ../src/ui/view/edit-widget.cpp:486
-#: ../src/ui/view/edit-widget.cpp:495 ../src/ui/view/edit-widget.cpp:499
-#: ../src/ui/view/edit-widget.cpp:503 ../src/ui/view/edit-widget.cpp:507
-#: ../src/ui/view/edit-widget.cpp:511 ../src/ui/view/edit-widget.cpp:515
-#: ../src/ui/view/edit-widget.cpp:519 ../src/ui/view/edit-widget.cpp:523
-#: ../src/ui/view/edit-widget.cpp:527 ../src/ui/view/edit-widget.cpp:531
-#: ../src/ui/view/edit-widget.cpp:535 ../src/ui/view/edit-widget.cpp:632
-#: ../src/ui/view/edit-widget.cpp:644 ../src/ui/view/edit-widget.cpp:648
-#: ../src/ui/view/edit-widget.cpp:652 ../src/ui/view/edit-widget.cpp:656
-#: ../src/ui/view/edit-widget.cpp:660 ../src/ui/view/edit-widget.cpp:664
-#: ../src/ui/view/edit-widget.cpp:668 ../src/ui/view/edit-widget.cpp:672
-#: ../src/ui/view/edit-widget.cpp:676 ../src/ui/view/edit-widget.cpp:680
-#: ../src/ui/view/edit-widget.cpp:684 ../src/ui/view/edit-widget.cpp:688
-#: ../src/ui/view/edit-widget.cpp:692 ../src/ui/view/edit-widget.cpp:696
-#: ../src/ui/view/edit-widget.cpp:700 ../src/ui/view/edit-widget.cpp:704
-#: ../src/ui/view/edit-widget.cpp:709 ../src/ui/view/edit-widget.cpp:715
-#: ../src/ui/view/edit-widget.cpp:719 ../src/ui/view/edit-widget.cpp:769
-#: ../src/ui/view/edit-widget.cpp:774 ../src/ui/view/edit-widget.cpp:810
-#: ../src/ui/view/edit-widget.cpp:815 ../src/ui/view/edit-widget.cpp:820
-#: ../src/ui/view/edit-widget.cpp:824 ../src/ui/view/edit-widget.cpp:828
-#: ../src/ui/view/edit-widget.cpp:832 ../src/ui/view/edit-widget.cpp:836
-#: ../src/ui/view/edit-widget.cpp:840 ../src/ui/view/edit-widget.cpp:844
-#: ../src/ui/view/edit-widget.cpp:848 ../src/ui/view/edit-widget.cpp:852
-#: ../src/ui/view/edit-widget.cpp:856 ../src/ui/view/edit-widget.cpp:861
-#: ../src/ui/view/edit-widget.cpp:865 ../src/ui/view/edit-widget.cpp:869
-#: ../src/ui/view/edit-widget.cpp:873 ../src/ui/view/edit-widget.cpp:878
-#: ../src/ui/view/edit-widget.cpp:882 ../src/ui/view/edit-widget.cpp:886
-#: ../src/ui/view/edit-widget.cpp:890 ../src/ui/view/edit-widget.cpp:894
-#: ../src/ui/view/edit-widget.cpp:898 ../src/ui/view/edit-widget.cpp:902
-#: ../src/ui/view/edit-widget.cpp:906 ../src/ui/view/edit-widget.cpp:910
-#: ../src/ui/view/edit-widget.cpp:914 ../src/ui/view/edit-widget.cpp:918
+#: ../src/ui/stock-items.cpp:31
+#: ../src/ui/stock-items.cpp:32
+#: ../src/ui/stock-items.cpp:33
+#: ../src/ui/stock-items.cpp:34
+#: ../src/ui/stock-items.cpp:35
+#: ../src/ui/stock-items.cpp:36
+#: ../src/ui/stock-items.cpp:37
+#: ../src/ui/stock-items.cpp:38
+#: ../src/ui/stock-items.cpp:39
+#: ../src/ui/stock-items.cpp:40
+#: ../src/ui/stock-items.cpp:41
+#: ../src/ui/stock-items.cpp:42
+#: ../src/ui/stock-items.cpp:45
+#: ../src/ui/stock-items.cpp:46
+#: ../src/ui/stock-items.cpp:47
+#: ../src/ui/stock-items.cpp:48
+#: ../src/ui/stock-items.cpp:49
+#: ../src/ui/stock-items.cpp:50
+#: ../src/ui/stock-items.cpp:51
+#: ../src/ui/stock-items.cpp:52
+#: ../src/ui/stock-items.cpp:53
+#: ../src/ui/stock-items.cpp:54
+#: ../src/ui/stock-items.cpp:55
+#: ../src/ui/stock-items.cpp:56
+#: ../src/ui/stock-items.cpp:57
+#: ../src/ui/stock-items.cpp:58
+#: ../src/ui/stock-items.cpp:61
+#: ../src/ui/stock-items.cpp:62
+#: ../src/ui/stock-items.cpp:63
+#: ../src/ui/stock-items.cpp:64
+#: ../src/ui/stock-items.cpp:65
+#: ../src/ui/stock-items.cpp:66
+#: ../src/ui/stock-items.cpp:67
+#: ../src/ui/stock-items.cpp:68
+#: ../src/ui/stock-items.cpp:69
+#: ../src/ui/stock-items.cpp:70
+#: ../src/ui/stock-items.cpp:71
+#: ../src/ui/stock-items.cpp:72
+#: ../src/ui/stock-items.cpp:73
+#: ../src/ui/stock-items.cpp:74
+#: ../src/ui/stock-items.cpp:75
+#: ../src/ui/stock-items.cpp:76
+#: ../src/ui/stock-items.cpp:77
+#: ../src/ui/stock-items.cpp:78
+#: ../src/ui/stock-items.cpp:79
+#: ../src/ui/stock-items.cpp:80
+#: ../src/ui/stock-items.cpp:81
+#: ../src/ui/stock-items.cpp:82
+#: ../src/ui/stock-items.cpp:83
+#: ../src/ui/stock-items.cpp:84
+#: ../src/ui/stock-items.cpp:85
+#: ../src/ui/stock-items.cpp:86
+#: ../src/ui/stock-items.cpp:87
+#: ../src/ui/stock-items.cpp:88
+#: ../src/ui/stock-items.cpp:91
+#: ../src/ui/stock-items.cpp:92
+#: ../src/ui/stock-items.cpp:93
+#: ../src/ui/stock-items.cpp:94
+#: ../src/ui/stock-items.cpp:95
+#: ../src/ui/stock-items.cpp:96
+#: ../src/ui/stock-items.cpp:97
+#: ../src/ui/stock-items.cpp:98
+#: ../src/ui/stock-items.cpp:99
+#: ../src/ui/stock-items.cpp:100
+#: ../src/ui/stock-items.cpp:101
+#: ../src/ui/stock-items.cpp:102
+#: ../src/ui/stock-items.cpp:103
+#: ../src/ui/stock-items.cpp:104
+#: ../src/ui/stock-items.cpp:107
+#: ../src/ui/stock-items.cpp:108
+#: ../src/ui/stock-items.cpp:109
+#: ../src/ui/stock-items.cpp:110
+#: ../src/ui/stock-items.cpp:111
+#: ../src/ui/stock-items.cpp:112
+#: ../src/ui/stock-items.cpp:113
+#: ../src/ui/stock-items.cpp:114
+#: ../src/ui/stock-items.cpp:115
+#: ../src/ui/stock-items.cpp:116
+#: ../src/ui/stock-items.cpp:117
+#: ../src/ui/stock-items.cpp:118
+#: ../src/ui/stock-items.cpp:119
+#: ../src/ui/stock-items.cpp:120
+#: ../src/ui/stock-items.cpp:121
+#: ../src/ui/stock-items.cpp:122
+#: ../src/ui/stock-items.cpp:123
+#: ../src/ui/stock-items.cpp:124
+#: ../src/ui/stock-items.cpp:125
+#: ../src/ui/stock-items.cpp:126
+#: ../src/ui/stock-items.cpp:129
+#: ../src/ui/stock-items.cpp:130
+#: ../src/ui/stock-items.cpp:131
+#: ../src/ui/stock-items.cpp:132
+#: ../src/ui/stock-items.cpp:133
+#: ../src/ui/stock-items.cpp:134
+#: ../src/ui/stock-items.cpp:135
+#: ../src/ui/stock-items.cpp:136
+#: ../src/ui/stock-items.cpp:137
+#: ../src/ui/stock-items.cpp:138
+#: ../src/ui/stock-items.cpp:139
+#: ../src/ui/stock-items.cpp:140
+#: ../src/ui/stock-items.cpp:141
+#: ../src/ui/stock-items.cpp:142
+#: ../src/ui/stock-items.cpp:143
+#: ../src/ui/stock-items.cpp:144
+#: ../src/ui/stock-items.cpp:145
+#: ../src/ui/stock-items.cpp:149
+#: ../src/ui/stock-items.cpp:150
+#: ../src/ui/stock-items.cpp:151
+#: ../src/ui/stock-items.cpp:152
+#: ../src/ui/stock-items.cpp:155
+#: ../src/ui/stock-items.cpp:156
+#: ../src/ui/stock-items.cpp:157
+#: ../src/ui/stock-items.cpp:160
+#: ../src/ui/stock-items.cpp:161
+#: ../src/ui/stock-items.cpp:162
+#: ../src/ui/stock-items.cpp:163
+#: ../src/ui/stock-items.cpp:164
+#: ../src/ui/stock-items.cpp:165
+#: ../src/ui/stock-items.cpp:166
+#: ../src/ui/stock-items.cpp:167
+#: ../src/ui/stock-items.cpp:168
+#: ../src/ui/stock-items.cpp:169
+#: ../src/ui/stock-items.cpp:170
+#: ../src/ui/stock-items.cpp:171
+#: ../src/ui/stock-items.cpp:174
+#: ../src/ui/stock-items.cpp:175
+#: ../src/ui/stock-items.cpp:176
+#: ../src/ui/stock-items.cpp:177
+#: ../src/ui/stock-items.cpp:180
+#: ../src/ui/stock-items.cpp:181
+#: ../src/ui/stock-items.cpp:182
+#: ../src/ui/stock-items.cpp:183
+#: ../src/ui/stock-items.cpp:184
+#: ../src/ui/stock-items.cpp:185
+#: ../src/ui/stock-items.cpp:186
+#: ../src/ui/stock-items.cpp:187
+#: ../src/ui/stock-items.cpp:188
+#: ../src/ui/stock-items.cpp:189
+#: ../src/ui/stock-items.cpp:190
+#: ../src/ui/stock-items.cpp:193
+#: ../src/ui/stock-items.cpp:194
+#: ../src/ui/stock-items.cpp:197
+#: ../src/ui/stock-items.cpp:198
+#: ../src/ui/stock-items.cpp:199
+#: ../src/ui/stock-items.cpp:200
+#: ../src/ui/stock-items.cpp:201
+#: ../src/ui/view/edit-widget.cpp:343
+#: ../src/ui/view/edit-widget.cpp:348
+#: ../src/ui/view/edit-widget.cpp:356
+#: ../src/ui/view/edit-widget.cpp:361
+#: ../src/ui/view/edit-widget.cpp:366
+#: ../src/ui/view/edit-widget.cpp:371
+#: ../src/ui/view/edit-widget.cpp:376
+#: ../src/ui/view/edit-widget.cpp:381
+#: ../src/ui/view/edit-widget.cpp:394
+#: ../src/ui/view/edit-widget.cpp:399
+#: ../src/ui/view/edit-widget.cpp:413
+#: ../src/ui/view/edit-widget.cpp:417
+#: ../src/ui/view/edit-widget.cpp:421
+#: ../src/ui/view/edit-widget.cpp:425
+#: ../src/ui/view/edit-widget.cpp:429
+#: ../src/ui/view/edit-widget.cpp:433
+#: ../src/ui/view/edit-widget.cpp:447
+#: ../src/ui/view/edit-widget.cpp:451
+#: ../src/ui/view/edit-widget.cpp:455
+#: ../src/ui/view/edit-widget.cpp:486
+#: ../src/ui/view/edit-widget.cpp:495
+#: ../src/ui/view/edit-widget.cpp:499
+#: ../src/ui/view/edit-widget.cpp:503
+#: ../src/ui/view/edit-widget.cpp:507
+#: ../src/ui/view/edit-widget.cpp:511
+#: ../src/ui/view/edit-widget.cpp:515
+#: ../src/ui/view/edit-widget.cpp:519
+#: ../src/ui/view/edit-widget.cpp:523
+#: ../src/ui/view/edit-widget.cpp:527
+#: ../src/ui/view/edit-widget.cpp:531
+#: ../src/ui/view/edit-widget.cpp:535
+#: ../src/ui/view/edit-widget.cpp:632
+#: ../src/ui/view/edit-widget.cpp:644
+#: ../src/ui/view/edit-widget.cpp:648
+#: ../src/ui/view/edit-widget.cpp:652
+#: ../src/ui/view/edit-widget.cpp:656
+#: ../src/ui/view/edit-widget.cpp:660
+#: ../src/ui/view/edit-widget.cpp:664
+#: ../src/ui/view/edit-widget.cpp:668
+#: ../src/ui/view/edit-widget.cpp:672
+#: ../src/ui/view/edit-widget.cpp:676
+#: ../src/ui/view/edit-widget.cpp:680
+#: ../src/ui/view/edit-widget.cpp:684
+#: ../src/ui/view/edit-widget.cpp:688
+#: ../src/ui/view/edit-widget.cpp:692
+#: ../src/ui/view/edit-widget.cpp:696
+#: ../src/ui/view/edit-widget.cpp:700
+#: ../src/ui/view/edit-widget.cpp:704
+#: ../src/ui/view/edit-widget.cpp:709
+#: ../src/ui/view/edit-widget.cpp:715
+#: ../src/ui/view/edit-widget.cpp:719
+#: ../src/ui/view/edit-widget.cpp:769
+#: ../src/ui/view/edit-widget.cpp:774
+#: ../src/ui/view/edit-widget.cpp:810
+#: ../src/ui/view/edit-widget.cpp:815
+#: ../src/ui/view/edit-widget.cpp:820
+#: ../src/ui/view/edit-widget.cpp:824
+#: ../src/ui/view/edit-widget.cpp:828
+#: ../src/ui/view/edit-widget.cpp:832
+#: ../src/ui/view/edit-widget.cpp:836
+#: ../src/ui/view/edit-widget.cpp:840
+#: ../src/ui/view/edit-widget.cpp:844
+#: ../src/ui/view/edit-widget.cpp:848
+#: ../src/ui/view/edit-widget.cpp:852
+#: ../src/ui/view/edit-widget.cpp:856
+#: ../src/ui/view/edit-widget.cpp:861
+#: ../src/ui/view/edit-widget.cpp:865
+#: ../src/ui/view/edit-widget.cpp:869
+#: ../src/ui/view/edit-widget.cpp:873
+#: ../src/ui/view/edit-widget.cpp:878
+#: ../src/ui/view/edit-widget.cpp:882
+#: ../src/ui/view/edit-widget.cpp:886
+#: ../src/ui/view/edit-widget.cpp:890
+#: ../src/ui/view/edit-widget.cpp:894
+#: ../src/ui/view/edit-widget.cpp:898
+#: ../src/ui/view/edit-widget.cpp:902
+#: ../src/ui/view/edit-widget.cpp:906
+#: ../src/ui/view/edit-widget.cpp:910
+#: ../src/ui/view/edit-widget.cpp:914
+#: ../src/ui/view/edit-widget.cpp:918
 #: ../src/ui/view/edit-widget.cpp:1003
 msgid "PLACEHOLDER, do not translate"
 msgstr ""
 
-#: ../src/ui/view/edit-widget.cpp:1062 ../src/widgets/desktop-widget.cpp:381
+#: ../src/ui/view/edit-widget.cpp:1062
+#: ../src/widgets/desktop-widget.cpp:381
 msgid "Zoom drawing if window size changes"
 msgstr "Modificar o zoom do debuxo se o tamaño da ventá cambia"
 
-#: ../src/ui/view/edit-widget.cpp:1083 ../src/widgets/desktop-widget.cpp:510
+#: ../src/ui/view/edit-widget.cpp:1083
+#: ../src/widgets/desktop-widget.cpp:510
 msgid "Cursor coordinates"
 msgstr "Coordenadas do cursor"
 
 #. display the initial welcome message in the statusbar
-#: ../src/ui/view/edit-widget.cpp:1100 ../src/widgets/desktop-widget.cpp:558
-msgid ""
-"<b>Welcome to Inkscape!</b> Use shape or freehand tools to create objects; "
-"use selector (arrow) to move or transform them."
-msgstr ""
-"<b>Benvid@ a Inkscape!</b> Use as ferramentas de figuras ou debuxo a man "
-"alzada para crear obxectos; use o selector (frecha) para movelos e "
-"transformalos."
+#: ../src/ui/view/edit-widget.cpp:1100
+#: ../src/widgets/desktop-widget.cpp:558
+msgid "<b>Welcome to Inkscape!</b> Use shape or freehand tools to create objects; use selector (arrow) to move or transform them."
+msgstr "<b>Benvid@ a Inkscape!</b> Use as ferramentas de figuras ou debuxo a man alzada para crear obxectos; use o selector (frecha) para movelos e transformalos."
 
-#: ../src/ui/view/edit-widget.cpp:1211 ../src/widgets/desktop-widget.cpp:844
+#: ../src/ui/view/edit-widget.cpp:1211
+#: ../src/widgets/desktop-widget.cpp:844
 #, 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\">Gardar os cambios do documento \"%s\" "
-"antes de pechar?</span>\n"
+"<span weight=\"bold\" size=\"larger\">Gardar os cambios do documento \"%s\" antes de pechar?</span>\n"
 "\n"
 "Se pecha sen gardar, descartaranse os cambios."
 
-#: ../src/ui/view/edit-widget.cpp:1222 ../src/ui/view/edit-widget.cpp:1269
-#: ../src/widgets/desktop-widget.cpp:851 ../src/widgets/desktop-widget.cpp:907
+#: ../src/ui/view/edit-widget.cpp:1222
+#: ../src/ui/view/edit-widget.cpp:1269
+#: ../src/widgets/desktop-widget.cpp:851
+#: ../src/widgets/desktop-widget.cpp:907
 msgid "Close _without saving"
 msgstr "Pechar _sen gardar"
 
-#: ../src/ui/view/edit-widget.cpp:1257 ../src/widgets/desktop-widget.cpp:899
+#: ../src/ui/view/edit-widget.cpp:1257
+#: ../src/widgets/desktop-widget.cpp:899
 #, fuzzy, 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\">O ficheiro \"%s\" gardouse co formato "
-"(%s) que pode provocar perdas de datos!</span>\n"
+"<span weight=\"bold\" size=\"larger\">O ficheiro \"%s\" gardouse co formato (%s) que pode provocar perdas de datos!</span>\n"
 "\n"
 "Desexa gardar este ficheiro con outro formato?"
 
-#: ../src/ui/view/edit-widget.cpp:1272 ../src/widgets/desktop-widget.cpp:910
+#: ../src/ui/view/edit-widget.cpp:1272
+#: ../src/widgets/desktop-widget.cpp:910
 msgid "_Save as SVG"
-msgstr ""
+msgstr "Gardar coma _SVG"
 
 #: ../src/ui/widget/filter-effect-chooser.cpp:25
 #, fuzzy
 msgid "_Blend mode:"
-msgstr "nodo final"
+msgstr "Modo de _visualización"
 
 #: ../src/ui/widget/filter-effect-chooser.cpp:26
 #, fuzzy
@@ -13351,21 +12877,18 @@ msgstr "Metro"
 #: ../src/ui/widget/object-composite-settings.cpp:51
 #: ../src/ui/widget/selected-style.cpp:1031
 #: ../src/ui/widget/selected-style.cpp:1032
-#, fuzzy
 msgid "Opacity, %"
-msgstr "Opacidade:"
+msgstr "Opacidade, %"
 
 #: ../src/ui/widget/object-composite-settings.cpp:152
-#, fuzzy
 msgid "Change blur"
-msgstr "Cambia-los atributos"
+msgstr "Cambiar o desenfoque"
 
 #: ../src/ui/widget/object-composite-settings.cpp:192
 #: ../src/ui/widget/selected-style.cpp:855
 #: ../src/ui/widget/selected-style.cpp:1149
-#, fuzzy
 msgid "Change opacity"
-msgstr "Opacidade principal"
+msgstr "Cambiar a opacidade"
 
 #: ../src/ui/widget/page-sizer.cpp:190
 msgid "U_nits:"
@@ -13409,26 +12932,21 @@ msgid "_Fit page to selection"
 msgstr "A_daptar a páxina á selección"
 
 #: ../src/ui/widget/page-sizer.cpp:273
-msgid ""
-"Resize the page to fit the current selection, or the entire drawing if there "
-"is no selection"
-msgstr ""
-"Redimensiona a páxina para conter a selección actual, ou todo o debuxo se "
-"non hai nada seleccionado"
+msgid "Resize the page to fit the current selection, or the entire drawing if there is no selection"
+msgstr "Redimensiona a páxina para conter a selección actual, ou todo o debuxo se non hai nada seleccionado"
 
 #: ../src/ui/widget/page-sizer.cpp:331
-#, fuzzy
 msgid "Set page size"
-msgstr "Configura-lo ancho da páxina"
+msgstr "Configurar o tamaño da páxina"
 
 #: ../src/ui/widget/panel.cpp:121
+#, fuzzy
 msgid "List"
-msgstr ""
+msgstr "Lista de amigos"
 
 #: ../src/ui/widget/panel.cpp:144
-#, fuzzy
 msgid "swatches|Size"
-msgstr "Pegar o tamaño"
+msgstr "Tamaño"
 
 #: ../src/ui/widget/panel.cpp:148
 msgid "tiny"
@@ -13452,9 +12970,8 @@ msgid "huge"
 msgstr "enorme"
 
 #: ../src/ui/widget/panel.cpp:175
-#, fuzzy
 msgid "swatches|Width"
-msgstr "Pegar A_ncho"
+msgstr "Ancho"
 
 #: ../src/ui/widget/panel.cpp:179
 #, fuzzy
@@ -13491,9 +13008,7 @@ msgid "Reset"
 msgstr " R_establecer"
 
 #: ../src/ui/widget/random.cpp:123
-msgid ""
-"Reseed the random number generator; this creates a different sequence of "
-"random numbers."
+msgid "Reseed the random number generator; this creates a different sequence of random numbers."
 msgstr ""
 
 #: ../src/ui/widget/rendering-options.cpp:39
@@ -13508,42 +13023,34 @@ msgstr "Selector"
 
 #: ../src/ui/widget/rendering-options.cpp:41
 msgid "Bitmap"
-msgstr ""
+msgstr "Mapa de bits"
 
 #: ../src/ui/widget/rendering-options.cpp:42
 msgid "Bitmap options"
-msgstr ""
+msgstr "Opcións de mapa de bits"
 
 #: ../src/ui/widget/rendering-options.cpp:44
 #, fuzzy
 msgid "Preferred resolution of rendering, in dots per inch."
-msgstr "Resolución preferida do mapa de bits (puntos por polgada)"
+msgstr "Resolución predeterminada do mapa de bits no diálogo de Exportación (en puntos por polgada)"
 
 #: ../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."
+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 ""
 
 #: ../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."
+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 ""
 
 #: ../src/ui/widget/selected-style.cpp:106
 #: ../src/ui/widget/style-swatch.cpp:110
-#, fuzzy
 msgid "Fill:"
-msgstr "Recheo"
+msgstr "Recheo:"
 
 #: ../src/ui/widget/selected-style.cpp:107
 #: ../src/ui/widget/style-swatch.cpp:111
-#, fuzzy
 msgid "Stroke:"
-msgstr "Trazo"
+msgstr "Trazo:"
 
 # O de opacidade
 #: ../src/ui/widget/selected-style.cpp:108
@@ -13562,9 +13069,8 @@ msgstr "Non hai nada seleccionado"
 
 #: ../src/ui/widget/selected-style.cpp:155
 #: ../src/ui/widget/style-swatch.cpp:328
-#, fuzzy
 msgid "<i>None</i>"
-msgstr "<i>%s</i>"
+msgstr "<i>Ningún</i>"
 
 #: ../src/ui/widget/selected-style.cpp:158
 #: ../src/ui/widget/style-swatch.cpp:330
@@ -13577,19 +13083,22 @@ msgid "No stroke"
 msgstr "Sen trazo"
 
 #: ../src/ui/widget/selected-style.cpp:160
-#: ../src/ui/widget/style-swatch.cpp:309 ../src/widgets/paint-selector.cpp:189
+#: ../src/ui/widget/style-swatch.cpp:309
+#: ../src/widgets/paint-selector.cpp:189
 msgid "Pattern"
 msgstr "Patrón"
 
 #: ../src/ui/widget/selected-style.cpp:163
-#: ../src/ui/widget/style-swatch.cpp:311 ../src/widgets/paint-selector.cpp:997
+#: ../src/ui/widget/style-swatch.cpp:311
+#: ../src/widgets/paint-selector.cpp:997
 msgid "Pattern fill"
 msgstr "Recheo de patrón"
 
 #: ../src/ui/widget/selected-style.cpp:163
 #: ../src/ui/widget/style-swatch.cpp:311
+#, fuzzy
 msgid "Pattern stroke"
-msgstr ""
+msgstr "Establecer patrón no trazo"
 
 #: ../src/ui/widget/selected-style.cpp:165
 #, fuzzy
@@ -13623,21 +13132,21 @@ msgstr "Trazo de degradado radial"
 
 #: ../src/ui/widget/selected-style.cpp:185
 msgid "Different"
-msgstr ""
+msgstr "Diferentes"
 
 #: ../src/ui/widget/selected-style.cpp:188
 msgid "Different fills"
-msgstr ""
+msgstr "Recheos diferentes"
 
 #: ../src/ui/widget/selected-style.cpp:188
 msgid "Different strokes"
-msgstr ""
+msgstr "Trazos diferentes"
 
 #: ../src/ui/widget/selected-style.cpp:190
 #: ../src/ui/widget/style-swatch.cpp:333
 #, fuzzy
 msgid "<b>Unset</b>"
-msgstr "<b>Licenza</b>"
+msgstr "Recheo non asignado"
 
 #: ../src/ui/widget/selected-style.cpp:196
 msgid "Flat color fill"
@@ -13647,10 +13156,11 @@ msgstr "Recheo de cor uniforme"
 msgid "Flat color stroke"
 msgstr "Trazo de cor uniforme"
 
+# Leandro: p de promedio
 #. TRANSLATOR COMMENT: A means "Averaged"
 #: ../src/ui/widget/selected-style.cpp:199
 msgid "<b>a</b>"
-msgstr ""
+msgstr "<b>p</b>"
 
 #: ../src/ui/widget/selected-style.cpp:202
 msgid "Fill is averaged over selected objects"
@@ -13662,16 +13172,18 @@ msgstr ""
 
 #. TRANSLATOR COMMENT: M means "Multiple"
 #: ../src/ui/widget/selected-style.cpp:205
+#, fuzzy
 msgid "<b>m</b>"
-msgstr ""
+msgstr "<b>m</b>"
 
 #: ../src/ui/widget/selected-style.cpp:208
 msgid "Multiple selected objects have the same fill"
 msgstr "Varios obxectos seleccionados teñen o mesmo recheo"
 
 #: ../src/ui/widget/selected-style.cpp:208
+#, fuzzy
 msgid "Multiple selected objects have the same stroke"
-msgstr ""
+msgstr "Varios obxectos seleccionados teñen o mesmo trazo"
 
 #: ../src/ui/widget/selected-style.cpp:210
 msgid "Edit fill..."
@@ -13683,7 +13195,7 @@ msgstr "Editar trazo..."
 
 #: ../src/ui/widget/selected-style.cpp:214
 msgid "Last set color"
-msgstr ""
+msgstr "Última cor definida"
 
 #: ../src/ui/widget/selected-style.cpp:218
 msgid "Last selected color"
@@ -13720,85 +13232,75 @@ msgstr ""
 #: ../src/ui/widget/selected-style.cpp:246
 #: ../src/ui/widget/selected-style.cpp:522
 #: ../src/ui/widget/selected-style.cpp:531
+#, fuzzy
 msgid "Make fill opaque"
-msgstr ""
+msgstr "R_echeo e Trazo"
 
 #: ../src/ui/widget/selected-style.cpp:246
+#, fuzzy
 msgid "Make stroke opaque"
-msgstr ""
+msgstr "Establecer a cor do trazo"
 
 #: ../src/ui/widget/selected-style.cpp:308
 msgid "Remove"
-msgstr ""
+msgstr "Eliminar"
 
 #: ../src/ui/widget/selected-style.cpp:543
-#, fuzzy
 msgid "Apply last set color to fill"
-msgstr "Recheo de cor uniforme"
+msgstr "Aplicar a última cor definida ó recheo"
 
 #: ../src/ui/widget/selected-style.cpp:555
-#, fuzzy
 msgid "Apply last set color to stroke"
-msgstr "Trazo de cor uniforme"
+msgstr "Aplicar a última cor definida ó trazo"
 
 #: ../src/ui/widget/selected-style.cpp:566
-#, fuzzy
 msgid "Apply last selected color to fill"
-msgstr "Última cor seleccionada"
+msgstr "Aplicar a última cor seleccionada ó recheo"
 
 #: ../src/ui/widget/selected-style.cpp:577
-#, fuzzy
 msgid "Apply last selected color to stroke"
-msgstr "Última cor seleccionada"
+msgstr "Aplicar a última cor seleccionada ó trazo"
 
 #: ../src/ui/widget/selected-style.cpp:597
-#, fuzzy
 msgid "Invert fill"
-msgstr "Recheo non asignado"
+msgstr "Inverter o recheo"
 
 #: ../src/ui/widget/selected-style.cpp:617
-#, fuzzy
 msgid "Invert stroke"
-msgstr "Trazo non asignado"
+msgstr "Inverter o trazo"
 
 #: ../src/ui/widget/selected-style.cpp:629
-#, fuzzy
 msgid "White fill"
-msgstr "Detrás do recheo"
+msgstr "Recheo branco"
 
 #: ../src/ui/widget/selected-style.cpp:641
-#, fuzzy
 msgid "White stroke"
-msgstr "Editar trazo..."
+msgstr "Trazo branco"
 
 #: ../src/ui/widget/selected-style.cpp:653
-#, fuzzy
 msgid "Black fill"
-msgstr "Negro"
+msgstr "Recheo negro"
 
 #: ../src/ui/widget/selected-style.cpp:665
-#, fuzzy
 msgid "Black stroke"
-msgstr "Trazo de cor uniforme"
+msgstr "Trazo negro"
 
 #: ../src/ui/widget/selected-style.cpp:708
-#, fuzzy
 msgid "Paste fill"
-msgstr "Recheo de patrón"
+msgstr "Pegar o recheo"
 
 #: ../src/ui/widget/selected-style.cpp:726
-#, fuzzy
 msgid "Paste stroke"
-msgstr "Trazo non asignado"
+msgstr "Pegar o trazo"
 
 #: ../src/ui/widget/selected-style.cpp:890
-#, fuzzy
 msgid "Change stroke width"
-msgstr "Escalar o ancho do trazado"
+msgstr "Cambiar o ancho do trazo"
 
 #: ../src/ui/widget/selected-style.cpp:985
+#, fuzzy
 msgid ", drag to adjust"
-msgstr ""
+msgstr "Arrastre para reordenar os nodos"
 
 #: ../src/ui/widget/selected-style.cpp:1066
 #, c-format
@@ -13814,50 +13316,42 @@ msgid "0 (transparent)"
 msgstr "0 (transparente)"
 
 #: ../src/ui/widget/selected-style.cpp:1122
-#, fuzzy
 msgid "100% (opaque)"
-msgstr "1.0 (opaco)"
+msgstr "100% (opaco)"
 
 #: ../src/ui/widget/selected-style.cpp:1271
-#, fuzzy
 msgid "Adjust saturation"
-msgstr "Saturación"
+msgstr "Axustar a saturación"
 
 #: ../src/ui/widget/selected-style.cpp:1273
 #, 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"
+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 ""
 
 #: ../src/ui/widget/selected-style.cpp:1277
 #, fuzzy
 msgid "Adjust lightness"
-msgstr "Brillo"
+msgstr "Axustar o brillo"
 
 #: ../src/ui/widget/selected-style.cpp:1279
 #, 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"
+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 ""
 
 #: ../src/ui/widget/selected-style.cpp:1283
+#, fuzzy
 msgid "Adjust hue"
-msgstr ""
+msgstr "Axustar a saturación"
 
 #: ../src/ui/widget/selected-style.cpp:1285
 #, 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"
+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 ""
 
 #: ../src/ui/widget/selected-style.cpp:1391
 #: ../src/ui/widget/selected-style.cpp:1405
-#, fuzzy
 msgid "Adjust stroke width"
-msgstr "Ancho do trazo"
+msgstr "Axustar o ancho do trazo"
 
 #: ../src/ui/widget/selected-style.cpp:1392
 #, c-format
@@ -13866,8 +13360,9 @@ msgstr ""
 
 #. TRANSLATORS: Only translate the word "Link" - means to _link_ two sliders together
 #: ../src/ui/widget/spin-slider.cpp:118
+#, fuzzy
 msgid "sliders|Link"
-msgstr ""
+msgstr "<b>Ligazón</b> a %s"
 
 #: ../src/ui/widget/style-swatch.cpp:301
 msgid "L Gradient"
@@ -13880,12 +13375,12 @@ msgstr "Degradado R"
 #: ../src/ui/widget/style-swatch.cpp:321
 #, c-format
 msgid "Fill: %06x/%.3g"
-msgstr ""
+msgstr "Recheo: %06x/%.3g"
 
 #: ../src/ui/widget/style-swatch.cpp:323
 #, c-format
 msgid "Stroke: %06x/%.3g"
-msgstr ""
+msgstr "Trazo: %06x/%.3g"
 
 #: ../src/ui/widget/style-swatch.cpp:355
 #, c-format
@@ -13922,9 +13417,7 @@ msgstr ""
 #: ../src/vanishing-point.cpp:306
 #, 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] ""
 msgstr[1] ""
 
@@ -13933,36 +13426,30 @@ msgstr[1] ""
 #: ../src/vanishing-point.cpp:313
 #, 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] ""
 msgstr[1] ""
 
 #: ../src/vanishing-point.cpp:321
 #, 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] ""
 msgstr[1] ""
 
 #: ../src/verbs.cpp:1134
 #, fuzzy
 msgid "Switch to next layer"
-msgstr "Elevar á seguinte capa"
+msgstr "Cambiar á seguinte capa"
 
 #: ../src/verbs.cpp:1135
 #, fuzzy
 msgid "Switched to next layer."
-msgstr "Moveuse á seguinte capa."
+msgstr "Elevar á seguinte capa"
 
 #: ../src/verbs.cpp:1137
-#, fuzzy
 msgid "Cannot go past last layer."
-msgstr "Non se pode mover máis a capa."
+msgstr "Non se pode ir máis aló da última capa."
 
 #: ../src/verbs.cpp:1146
 #, fuzzy
@@ -13972,46 +13459,45 @@ msgstr "Baixar á capa anterior"
 #: ../src/verbs.cpp:1147
 #, fuzzy
 msgid "Switched to previous layer."
-msgstr "Moveuse á capa anterior."
+msgstr "Baixar á capa anterior"
 
 #: ../src/verbs.cpp:1149
-#, fuzzy
 msgid "Cannot go before first layer."
-msgstr "Non se pode mover máis a capa."
+msgstr "Non se pode ir máis alá da primeira capa."
 
-#: ../src/verbs.cpp:1166 ../src/verbs.cpp:1250
+#: ../src/verbs.cpp:1166
+#: ../src/verbs.cpp:1250
+#, fuzzy
 msgid "No current layer."
-msgstr ""
+msgstr "Renomear a capa actual"
 
-#: ../src/verbs.cpp:1195 ../src/verbs.cpp:1199
+#: ../src/verbs.cpp:1195
+#: ../src/verbs.cpp:1199
 #, c-format
 msgid "Raised layer <b>%s</b>."
 msgstr "Elevouse a capa <b>%s</b>."
 
 #: ../src/verbs.cpp:1196
-#, fuzzy
 msgid "Layer to top"
-msgstr "Capa á _Cima"
+msgstr "Capa á cima"
 
 #: ../src/verbs.cpp:1200
-#, fuzzy
 msgid "Raise layer"
-msgstr "Elevar a Capa"
+msgstr "Elevar a capa"
 
-#: ../src/verbs.cpp:1203 ../src/verbs.cpp:1207
+#: ../src/verbs.cpp:1203
+#: ../src/verbs.cpp:1207
 #, c-format
 msgid "Lowered layer <b>%s</b>."
 msgstr "Baixouse a capa <b>%s</b>."
 
 #: ../src/verbs.cpp:1204
-#, fuzzy
 msgid "Layer to bottom"
-msgstr "Capa ó _Fondo"
+msgstr "Capa ó fondo"
 
 #: ../src/verbs.cpp:1208
-#, fuzzy
 msgid "Lower layer"
-msgstr "Baixar a Capa"
+msgstr "Baixar a capa"
 
 #: ../src/verbs.cpp:1217
 msgid "Cannot move layer any further."
@@ -14029,12 +13515,12 @@ msgstr "Eliminouse a capa."
 #: ../src/verbs.cpp:1330
 #, fuzzy
 msgid "Flip horizontally"
-msgstr "voltear horizontal"
+msgstr "Voltea-los obxectos seleccionados horizontalmente"
 
 #: ../src/verbs.cpp:1345
 #, fuzzy
 msgid "Flip vertically"
-msgstr "voltear vertical"
+msgstr "Voltea-los obxectos seleccionados verticalmente"
 
 #. 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
@@ -14073,29 +13559,30 @@ msgstr "tutorial-elements.svg"
 msgid "tutorial-tips.svg"
 msgstr "tutorial-tips.svg"
 
-#: ../src/verbs.cpp:2129 ../src/verbs.cpp:2634
-#, fuzzy
+#: ../src/verbs.cpp:2129
+#: ../src/verbs.cpp:2634
 msgid "Unlock all objects in the current layer"
-msgstr "Renomear a capa actual"
+msgstr "Desbloquear tódolos obxectos na capa actual"
 
-#: ../src/verbs.cpp:2133 ../src/verbs.cpp:2636
-#, fuzzy
+#: ../src/verbs.cpp:2133
+#: ../src/verbs.cpp:2636
 msgid "Unlock all objects in all layers"
-msgstr "Seleccionar tódolos obxectos ou tódolos nodos"
+msgstr "Desbloquear tódolos obxectos en tódalas capas"
 
-#: ../src/verbs.cpp:2137 ../src/verbs.cpp:2638
-#, fuzzy
+#: ../src/verbs.cpp:2137
+#: ../src/verbs.cpp:2638
 msgid "Unhide all objects in the current layer"
-msgstr "Eliminar a capa actual"
+msgstr "Mostrar tódolos obxectos da capa actual"
 
-#: ../src/verbs.cpp:2141 ../src/verbs.cpp:2640
-#, fuzzy
+#: ../src/verbs.cpp:2141
+#: ../src/verbs.cpp:2640
 msgid "Unhide all objects in all layers"
-msgstr "Seleccionar en tódalas capas"
+msgstr "Mostrar tódolos obxectos de tódalas capas"
 
 #: ../src/verbs.cpp:2156
+#, fuzzy
 msgid "Does nothing"
-msgstr ""
+msgstr "Non facer nada"
 
 #: ../src/verbs.cpp:2159
 msgid "Create new document from the default template"
@@ -14115,8 +13602,7 @@ msgstr "_Volver á Última Versión Gardada"
 
 #: ../src/verbs.cpp:2164
 msgid "Revert to the last saved version of document (changes will be lost)"
-msgstr ""
-"Volver á última versión gardada do documento (perderanse tódolos cambios)"
+msgstr "Volver á última versión gardada do documento (perderanse tódolos cambios)"
 
 #: ../src/verbs.cpp:2165
 msgid "_Save"
@@ -14135,14 +13621,12 @@ msgid "Save document under a new name"
 msgstr "Garda-lo documento cun novo nome"
 
 #: ../src/verbs.cpp:2169
-#, fuzzy
 msgid "Save a Cop_y..."
-msgstr "G_ardar Coma..."
+msgstr "Gardar unha cop_ia..."
 
 #: ../src/verbs.cpp:2170
-#, fuzzy
 msgid "Save a copy of the document under a new name"
-msgstr "Garda-lo documento cun novo nome"
+msgstr "Garda unha copia do documento cun novo nome"
 
 #: ../src/verbs.cpp:2171
 msgid "_Print..."
@@ -14159,14 +13643,13 @@ msgstr "Desbotar as De_finicións"
 
 #: ../src/verbs.cpp:2174
 #, fuzzy
-msgid ""
-"Remove unused definitions (such as gradients or clipping paths) from the &lt;"
-"defs&gt; of the document"
+msgid "Remove unused definitions (such as gradients or clipping paths) from the &lt;defs&gt; of the document"
 msgstr "Eliminar as definicións que non se usan (coma degradados ou "
 
 #: ../src/verbs.cpp:2176
+#, fuzzy
 msgid "Print Previe_w"
-msgstr ""
+msgstr "Destino da Impresión"
 
 #: ../src/verbs.cpp:2177
 msgid "Preview document printout"
@@ -14186,22 +13669,20 @@ msgstr "_Exportar Mapa de Bits..."
 
 #: ../src/verbs.cpp:2181
 msgid "Export this document or a selection as a bitmap image"
-msgstr ""
-"Exportar este documento ou unha selección coma unha imaxe de mapa de bits"
+msgstr "Exportar este documento ou unha selección coma unha imaxe de mapa de bits"
 
 #: ../src/verbs.cpp:2182
+#, fuzzy
 msgid "Import a document from Open Clip Art Library"
-msgstr ""
+msgstr "Importar un documento dende Open Clip Art Library"
 
 #: ../src/verbs.cpp:2183
 msgid "Export To Open Clip Art Library"
-msgstr ""
+msgstr "Exportar a Open Clip Art Library"
 
 #: ../src/verbs.cpp:2183
-#, fuzzy
 msgid "Export this document to Open Clip Art Library"
-msgstr ""
-"Exportar este documento ou unha selección coma unha imaxe de mapa de bits"
+msgstr "Exportar este documento a Open Clip Art Library"
 
 #: ../src/verbs.cpp:2184
 msgid "N_ext Window"
@@ -14285,8 +13766,7 @@ msgstr "Pegar A_ncho"
 
 #: ../src/verbs.cpp:2208
 msgid "Scale selection horizontally to match the width of the copied object"
-msgstr ""
-"Escalar horizontalmente a selección para que teña o ancho do obxecto copiado"
+msgstr "Escalar horizontalmente a selección para que teña o ancho do obxecto copiado"
 
 #: ../src/verbs.cpp:2209
 msgid "Paste _Height"
@@ -14294,8 +13774,7 @@ msgstr "Pegar A_lto"
 
 #: ../src/verbs.cpp:2210
 msgid "Scale selection vertically to match the height of the copied object"
-msgstr ""
-"Escalar verticalmente a selección para que teña a altura do obxecto copiado"
+msgstr "Escalar verticalmente a selección para que teña a altura do obxecto copiado"
 
 #: ../src/verbs.cpp:2211
 msgid "Paste Size Separately"
@@ -14303,32 +13782,23 @@ msgstr "Pegar Tamaño por Separado"
 
 #: ../src/verbs.cpp:2212
 msgid "Scale each selected object to match the size of the copied object"
-msgstr ""
-"Escalar cada obxecto seleccionado para que teña o mesmo có obxecto copiado"
+msgstr "Escalar cada obxecto seleccionado para que teña o mesmo có obxecto copiado"
 
 #: ../src/verbs.cpp:2213
 msgid "Paste Width Separately"
 msgstr "Pegar Ancho por Separado"
 
 #: ../src/verbs.cpp:2214
-msgid ""
-"Scale each selected object horizontally to match the width of the copied "
-"object"
-msgstr ""
-"Escalar horizontalmente cada obxecto seleccionado para que teña o ancho do "
-"obxecto copiado"
+msgid "Scale each selected object horizontally to match the width of the copied object"
+msgstr "Escalar horizontalmente cada obxecto seleccionado para que teña o ancho do obxecto copiado"
 
 #: ../src/verbs.cpp:2215
 msgid "Paste Height Separately"
 msgstr "Pegar Alto por Separado"
 
 #: ../src/verbs.cpp:2216
-msgid ""
-"Scale each selected object vertically to match the height of the copied "
-"object"
-msgstr ""
-"Escalar verticalmente cada obxecto da selección para que teña a altura do "
-"obxecto copiado"
+msgid "Scale each selected object vertically to match the height of the copied object"
+msgstr "Escalar verticalmente cada obxecto da selección para que teña a altura do obxecto copiado"
 
 #: ../src/verbs.cpp:2217
 msgid "Paste _In Place"
@@ -14341,17 +13811,17 @@ msgstr "Pegar obxectos dende o portarretallos á súa localización orixinal"
 #: ../src/verbs.cpp:2219
 #, fuzzy
 msgid "Paste Path _Effect"
-msgstr "Pegar E_stilo"
+msgstr "Non se seleccionou ningún efecto"
 
 #: ../src/verbs.cpp:2220
 #, fuzzy
 msgid "Apply the path effect of the copied object to selection"
-msgstr "Aplicar o estilo do obxecto copiado á selección"
+msgstr "Aplicar o camiño de corte á selección (usando o obxecto que está enriba coma camiño de corte)"
 
 #: ../src/verbs.cpp:2221
 #, fuzzy
 msgid "Remove Path _Effect"
-msgstr "Eli_minar"
+msgstr "Eliminar o efecto da selección"
 
 #: ../src/verbs.cpp:2222
 #, fuzzy
@@ -14359,14 +13829,12 @@ msgid "Remove any path effects from selected objects"
 msgstr "Eliminar o camiño de corte da selección"
 
 #: ../src/verbs.cpp:2223
-#, fuzzy
 msgid "Remove Filter"
-msgstr "Eli_minar"
+msgstr "Eliminar filtro"
 
 #: ../src/verbs.cpp:2224
-#, fuzzy
 msgid "Remove any filters from selected objects"
-msgstr "Facer que os conectadores eviten os obxectos seleccionados"
+msgstr "Eliminar tódolos filtros dos obxectos seleccionados"
 
 #: ../src/verbs.cpp:2225
 msgid "_Delete"
@@ -14397,12 +13865,8 @@ msgid "Unlin_k Clone"
 msgstr "Desli_gar o Clon"
 
 #: ../src/verbs.cpp:2232
-msgid ""
-"Cut the selected clone's link to its original, turning it into a standalone "
-"object"
-msgstr ""
-"Cortar a ligazón do clon seleccionado ó seu orixinal, converténdoo nun "
-"obxecto independiente"
+msgid "Cut the selected clone's link to its original, turning it into a standalone object"
+msgstr "Cortar a ligazón do clon seleccionado ó seu orixinal, converténdoo nun obxecto independiente"
 
 #: ../src/verbs.cpp:2233
 msgid "Select _Original"
@@ -14416,23 +13880,21 @@ msgstr "Seleccionar o obxecto ó que está ligado o clon seleccionado"
 #: ../src/verbs.cpp:2236
 #, fuzzy
 msgid "Objects to _Marker"
-msgstr "Obxectos a patrón"
+msgstr "Obxectos a guías"
 
 #: ../src/verbs.cpp:2237
 #, fuzzy
 msgid "Convert selection to a line marker"
-msgstr "Converti-los segmentos seleccionados a liñas"
+msgstr "Na selección non hai <b>obxectos</b> para convertelos en camiños."
 
 #. TRANSLATORS: Convert selection to a collection of guidelines
 #: ../src/verbs.cpp:2239
 #, fuzzy
 msgid "Objects to Gu_ides"
-msgstr "Obxectos a patrón"
+msgstr "Obxectos a Gu_ias"
 
 #: ../src/verbs.cpp:2240
-msgid ""
-"Convert selected objects to a collection of guidelines aligned with their "
-"edges"
+msgid "Convert selected objects to a collection of guidelines aligned with their edges"
 msgstr ""
 
 #. TRANSLATORS: Convert selection to a rectangle with tiled pattern fill
@@ -14454,8 +13916,9 @@ msgid "Extract objects from a tiled pattern fill"
 msgstr "Extraer obxectos dun recheo de patrón en mosaico"
 
 #: ../src/verbs.cpp:2247
+#, fuzzy
 msgid "Clea_r All"
-msgstr ""
+msgstr "Tódolos tipos"
 
 #: ../src/verbs.cpp:2248
 msgid "Delete all objects from document"
@@ -14483,9 +13946,7 @@ msgstr "In_verter a Selección"
 
 #: ../src/verbs.cpp:2254
 msgid "Invert selection (unselect what is selected and select everything else)"
-msgstr ""
-"Inverter a selección (deselecciona o que está seleccionado e selecciona todo "
-"o demais)"
+msgstr "Inverter a selección (deselecciona o que está seleccionado e selecciona todo o demais)"
 
 #: ../src/verbs.cpp:2255
 msgid "Invert in All Layers"
@@ -14498,22 +13959,22 @@ msgstr "Inverter a selección en tódalas capas visibles de desbloqueadas"
 #: ../src/verbs.cpp:2257
 #, fuzzy
 msgid "Select Next"
-msgstr "Seleccionar"
+msgstr "Seleccionar Seguinte"
 
 #: ../src/verbs.cpp:2258
 #, fuzzy
 msgid "Select next object or node"
-msgstr "Seleccionar tódolos obxectos ou tódolos nodos"
+msgstr "Seleccionar o seguinte obxecto ou nodo"
 
 #: ../src/verbs.cpp:2259
 #, fuzzy
 msgid "Select Previous"
-msgstr "Selección"
+msgstr "Seleccionar Anterior"
 
 #: ../src/verbs.cpp:2260
 #, fuzzy
 msgid "Select previous object or node"
-msgstr "Seleccionar tódolos obxectos ou tódolos nodos"
+msgstr "Seleccionar o obxecto ou nodo anterior"
 
 #: ../src/verbs.cpp:2261
 msgid "D_eselect"
@@ -14524,8 +13985,9 @@ msgid "Deselect any selected objects or nodes"
 msgstr "Deselecciona calquera obxecto ou nodo seleccionado"
 
 #: ../src/verbs.cpp:2263
+#, fuzzy
 msgid "_Guides around page"
-msgstr ""
+msgstr "Amosa-lo _bordo da páxina"
 
 #: ../src/verbs.cpp:2264
 msgid "Create four guides aligned with the page borders"
@@ -14564,7 +14026,7 @@ msgstr "Eleva_r"
 #: ../src/verbs.cpp:2274
 #, fuzzy
 msgid "Raise selection one step"
-msgstr "Elevar a selección un nivel"
+msgstr "Eleva-la selección á cima"
 
 #: ../src/verbs.cpp:2275
 msgid "_Lower"
@@ -14573,7 +14035,7 @@ msgstr "Bai_xar"
 #: ../src/verbs.cpp:2276
 #, fuzzy
 msgid "Lower selection one step"
-msgstr "Baixa-la selección un nivel"
+msgstr "Baixa-la selección ó fondo"
 
 #: ../src/verbs.cpp:2277
 msgid "_Group"
@@ -14592,12 +14054,14 @@ msgid "_Put on Path"
 msgstr "_Poñer no camiño"
 
 #: ../src/verbs.cpp:2284
+#, fuzzy
 msgid "_Remove from Path"
-msgstr ""
+msgstr "Eliminar o camiño de corte da selección"
 
 #: ../src/verbs.cpp:2286
+#, fuzzy
 msgid "Remove Manual _Kerns"
-msgstr ""
+msgstr "Eliminar a reixa seleccionada."
 
 #. TRANSLATORS: "glyph": An image used in the visual representation of characters;
 #. roughly speaking, how a character looks. A font is a set of glyphs.
@@ -14627,20 +14091,15 @@ msgstr "_Diferencia"
 
 #: ../src/verbs.cpp:2296
 msgid "Create difference of selected paths (bottom minus top)"
-msgstr ""
-"Crea a diferencia dos camiños seleccionados (o inferior menos o superior)"
+msgstr "Crea a diferencia dos camiños seleccionados (o inferior menos o superior)"
 
 #: ../src/verbs.cpp:2297
 msgid "E_xclusion"
 msgstr "E_xclusión"
 
 #: ../src/verbs.cpp:2298
-msgid ""
-"Create exclusive OR of selected paths (those parts that belong to only one "
-"path)"
-msgstr ""
-"Crea o OR exclusivo dos camiños seleccionados (as partes que pertencen só a "
-"un camiño)"
+msgid "Create exclusive OR of selected paths (those parts that belong to only one path)"
+msgstr "Crea o OR exclusivo dos camiños seleccionados (as partes que pertencen só a un camiño)"
 
 #: ../src/verbs.cpp:2299
 msgid "Di_vision"
@@ -14671,7 +14130,7 @@ msgstr "Cortar"
 #: ../src/verbs.cpp:2309
 #, fuzzy
 msgid "Outset selected paths"
-msgstr "Fragmenta-las curvas seleccionadas"
+msgstr "Crear a unión dos camiños seleccionados"
 
 #: ../src/verbs.cpp:2311
 msgid "O_utset Path by 1 px"
@@ -14697,8 +14156,9 @@ msgid "I_nset"
 msgstr ""
 
 #: ../src/verbs.cpp:2320
+#, fuzzy
 msgid "Inset selected paths"
-msgstr ""
+msgstr "Crear a unión dos camiños seleccionados"
 
 #: ../src/verbs.cpp:2322
 msgid "I_nset Path by 1 px"
@@ -14717,16 +14177,18 @@ msgid "Inset selected paths by 10 px"
 msgstr ""
 
 #: ../src/verbs.cpp:2328
+#, fuzzy
 msgid "D_ynamic Offset"
-msgstr ""
+msgstr "Desprazamento do patrón"
 
 #: ../src/verbs.cpp:2328
 msgid "Create a dynamic offset object"
 msgstr ""
 
 #: ../src/verbs.cpp:2330
+#, fuzzy
 msgid "_Linked Offset"
-msgstr ""
+msgstr "Desprazamento do patrón"
 
 #: ../src/verbs.cpp:2331
 msgid "Create a dynamic offset object linked to the original path"
@@ -14794,7 +14256,7 @@ msgstr "Romper os camiños seleccionados en subcamiños"
 #: ../src/verbs.cpp:2350
 #, fuzzy
 msgid "Rows and Columns..."
-msgstr "Filas, columnas:"
+msgstr "Filas e Columnas..."
 
 #: ../src/verbs.cpp:2351
 #, fuzzy
@@ -14898,9 +14360,8 @@ msgstr "Rotar _90º en sentido horario"
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
 #: ../src/verbs.cpp:2380
-#, fuzzy
 msgid "Rotate selection 90° clockwise"
-msgstr "Rota-la selección 90° en sentido horario"
+msgstr "Rotaa selección 90° en sentido horario"
 
 #: ../src/verbs.cpp:2381
 msgid "Rotate 9_0&#176; CCW"
@@ -14909,17 +14370,18 @@ msgstr "Rotar 9_0º en sentido antihorario"
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
 #: ../src/verbs.cpp:2384
-#, fuzzy
 msgid "Rotate selection 90° counter-clockwise"
-msgstr "Rota-la selección 90° en sentido antihorario"
+msgstr "Rotaa selección 90° en sentido antihorario"
 
 #: ../src/verbs.cpp:2385
+#, fuzzy
 msgid "Remove _Transformations"
-msgstr ""
+msgstr "Eliminar o trazo"
 
 #: ../src/verbs.cpp:2386
+#, fuzzy
 msgid "Remove transformations from object"
-msgstr ""
+msgstr "Eliminar o efecto da selección"
 
 #: ../src/verbs.cpp:2387
 msgid "_Object to Path"
@@ -14930,13 +14392,12 @@ msgid "Convert selected object to path"
 msgstr "Converte-los obxectos seleccionados en camiños"
 
 #: ../src/verbs.cpp:2389
+#, fuzzy
 msgid "_Flow into Frame"
-msgstr ""
+msgstr "Cortar o camiño inferior en anacos"
 
 #: ../src/verbs.cpp:2390
-msgid ""
-"Put text into a frame (path or shape), creating a flowed text linked to the "
-"frame object"
+msgid "Put text into a frame (path or shape), creating a flowed text linked to the frame object"
 msgstr ""
 
 #: ../src/verbs.cpp:2391
@@ -14972,33 +14433,34 @@ msgid "Flip selected objects vertically"
 msgstr "Voltea-los obxectos seleccionados verticalmente"
 
 #: ../src/verbs.cpp:2402
+#, fuzzy
 msgid "Apply mask to selection (using the topmost object as mask)"
-msgstr ""
+msgstr "Aplicar o camiño de corte á selección (usando o obxecto que está enriba coma camiño de corte)"
 
 #: ../src/verbs.cpp:2404
 #, fuzzy
 msgid "Edit mask"
-msgstr "Editar trazo..."
+msgstr "Editar recheo..."
 
-#: ../src/verbs.cpp:2405 ../src/verbs.cpp:2411
+#: ../src/verbs.cpp:2405
+#: ../src/verbs.cpp:2411
 msgid "_Release"
 msgstr ""
 
 #: ../src/verbs.cpp:2406
+#, fuzzy
 msgid "Remove mask from selection"
-msgstr ""
+msgstr "Eliminar o efecto da selección"
 
 #: ../src/verbs.cpp:2408
-msgid ""
-"Apply clipping path to selection (using the topmost object as clipping path)"
-msgstr ""
-"Aplicar o camiño de corte á selección (usando o obxecto que está enriba coma "
-"camiño de corte)"
+msgid "Apply clipping path to selection (using the topmost object as clipping path)"
+msgstr "Aplicar o camiño de corte á selección (usando o obxecto que está enriba coma camiño de corte)"
 
-#: ../src/verbs.cpp:2410 ../src/widgets/toolbox.cpp:1222
+#: ../src/verbs.cpp:2410
+#: ../src/widgets/toolbox.cpp:1222
 #, fuzzy
 msgid "Edit clipping path"
-msgstr "Simplificar"
+msgstr "Eliminar o camiño de corte da selección"
 
 #: ../src/verbs.cpp:2412
 msgid "Remove clipping path from selection"
@@ -15014,13 +14476,14 @@ msgid "Select and transform objects"
 msgstr "Seleccionar e transformar obxectos"
 
 #: ../src/verbs.cpp:2417
+#, fuzzy
 msgid "Node Edit"
-msgstr ""
+msgstr "Editar recheo..."
 
 #: ../src/verbs.cpp:2418
 #, fuzzy
 msgid "Edit paths by nodes"
-msgstr "Editar os nodos dos camiños ou as asas de control"
+msgstr "Simplificar os camiños seleccionados (eliminar os nodos adicionais)"
 
 #: ../src/verbs.cpp:2420
 msgid "Tweak objects by sculpting or painting"
@@ -15033,7 +14496,7 @@ msgstr "Crear rectángulos e cadrados"
 #: ../src/verbs.cpp:2424
 #, fuzzy
 msgid "Create 3D boxes"
-msgstr "Crear un Mosaico de Clons..."
+msgstr "Crear nova reixa"
 
 #: ../src/verbs.cpp:2426
 msgid "Create circles, ellipses, and arcs"
@@ -15076,21 +14539,22 @@ msgstr "Aumentar ou reducir"
 #: ../src/verbs.cpp:2444
 #, fuzzy
 msgid "Pick colors from image"
-msgstr "Coller cores promediadas da imaxe"
+msgstr "Coller cores da imaxe"
 
 #: ../src/verbs.cpp:2446
 #, fuzzy
 msgid "Create diagram connectors"
-msgstr "Crear conectadores"
+msgstr "Diagrama de Sketch (*.sk)"
 
 #: ../src/verbs.cpp:2448
+#, fuzzy
 msgid "Fill bounded areas"
-msgstr ""
+msgstr "R_echeo e Trazo"
 
 #: ../src/verbs.cpp:2449
 #, fuzzy
 msgid "LPE Edit"
-msgstr "_Editar"
+msgstr "Editar recheo..."
 
 #: ../src/verbs.cpp:2450
 #, fuzzy
@@ -15100,7 +14564,7 @@ msgstr "Pegar Ancho por Separado"
 #: ../src/verbs.cpp:2452
 #, fuzzy
 msgid "Erase existing paths"
-msgstr "_Romper aparte ou fragmentar"
+msgstr "Abrir un documento existente"
 
 #. Tool prefs
 #: ../src/verbs.cpp:2454
@@ -15127,7 +14591,7 @@ msgstr "Preferencias da Ferramenta de Nodos"
 #: ../src/verbs.cpp:2459
 #, fuzzy
 msgid "Open Preferences for the Tweak tool"
-msgstr "Abrir as Preferencias da ferramenta Texto"
+msgstr "Abrir as Preferencias da ferramenta Selector"
 
 #: ../src/verbs.cpp:2460
 msgid "Rectangle Preferences"
@@ -15140,7 +14604,7 @@ msgstr "Abrir as Preferencias da ferramenta Rectángulo"
 #: ../src/verbs.cpp:2462
 #, fuzzy
 msgid "3D Box Preferences"
-msgstr "Preferencias de Texto"
+msgstr "Preferencias da Ferramenta de Nodos"
 
 #: ../src/verbs.cpp:2463
 #, fuzzy
@@ -15238,7 +14702,7 @@ msgstr "Abrir as Preferencias da Ferramenta Conectador"
 #: ../src/verbs.cpp:2486
 #, fuzzy
 msgid "Paint Bucket Preferences"
-msgstr "Preferencias de Degradado"
+msgstr "Preferencias da Ferramenta de Nodos"
 
 #: ../src/verbs.cpp:2487
 #, fuzzy
@@ -15246,14 +14710,12 @@ msgid "Open Preferences for the Paint Bucket tool"
 msgstr "Abrir as Preferencias da ferramenta Pluma"
 
 #: ../src/verbs.cpp:2488
-#, fuzzy
 msgid "Eraser Preferences"
-msgstr "Preferencias de Estrela"
+msgstr "Preferencias da Goma"
 
 #: ../src/verbs.cpp:2489
-#, fuzzy
 msgid "Open Preferences for the Eraser tool"
-msgstr "Abrir as Preferencias da ferramenta Estrela"
+msgstr "Abrir as preferencias da ferramenta Goma"
 
 #. Zoom/View
 #: ../src/verbs.cpp:2492
@@ -15302,8 +14764,7 @@ msgstr "G_uías"
 
 #: ../src/verbs.cpp:2497
 msgid "Show or hide guides (drag from a ruler to create a guide)"
-msgstr ""
-"Amosar ou agochar as guías (arrastre dende unha regra para crear unha guía)"
+msgstr "Amosar ou agochar as guías (arrastre dende unha regra para crear unha guía)"
 
 #: ../src/verbs.cpp:2499
 msgid "Nex_t Zoom"
@@ -15362,12 +14823,14 @@ msgid "Open a new window with the same document"
 msgstr "Abrir unha nova ventá co mesmo documento"
 
 #: ../src/verbs.cpp:2515
+#, fuzzy
 msgid "_New View Preview"
-msgstr ""
+msgstr "Previsualiza-la impresión do documento"
 
 #: ../src/verbs.cpp:2516
+#, fuzzy
 msgid "New View Preview"
-msgstr ""
+msgstr "Previsualiza-la impresión do documento"
 
 #. "view_new_preview"
 #: ../src/verbs.cpp:2518
@@ -15381,7 +14844,7 @@ msgstr "Cambiar ó modo de visualización normal"
 #: ../src/verbs.cpp:2520
 #, fuzzy
 msgid "No _Filters"
-msgstr "milímetros"
+msgstr "Sen recheo"
 
 #: ../src/verbs.cpp:2521
 #, fuzzy
@@ -15408,7 +14871,7 @@ msgstr ""
 #: ../src/verbs.cpp:2527
 #, fuzzy
 msgid "Color-managed view"
-msgstr "Cor do bordo da páxina"
+msgstr "Ver mensaxes de depuración"
 
 #: ../src/verbs.cpp:2528
 #, fuzzy
@@ -15418,13 +14881,11 @@ msgstr "Pechar esta ventá"
 #: ../src/verbs.cpp:2530
 #, fuzzy
 msgid "Ico_n Preview..."
-msgstr "Previsualizar Ico_nas"
+msgstr "Previsualiza-la impresión do documento"
 
 #: ../src/verbs.cpp:2531
 msgid "Open a window to preview objects at different icon resolutions"
-msgstr ""
-"Abre unha ventá para previsualizar os obxectos seleccionados con diferentes "
-"resolucións de iconas"
+msgstr "Abre unha ventá para previsualizar os obxectos seleccionados con diferentes resolucións de iconas"
 
 #: ../src/verbs.cpp:2533
 msgid "Zoom to fit page in window"
@@ -15476,8 +14937,7 @@ msgid "_Fill and Stroke..."
 msgstr "R_echeo e Trazo..."
 
 #: ../src/verbs.cpp:2549
-msgid ""
-"Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
+msgid "Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
 msgstr ""
 
 #. TRANSLATORS: "Swatches" means: color samples
@@ -15506,12 +14966,13 @@ msgid "Align and distribute objects"
 msgstr "Aliñar e distribuír os obxectos"
 
 #: ../src/verbs.cpp:2557
+#, fuzzy
 msgid "Undo _History..."
-msgstr ""
+msgstr "Historial de cambios"
 
 #: ../src/verbs.cpp:2558
 msgid "Undo History"
-msgstr ""
+msgstr "Historial de cambios"
 
 #: ../src/verbs.cpp:2559
 msgid "_Text and Font..."
@@ -15519,9 +14980,7 @@ msgstr "_Texto e Fonte..."
 
 #: ../src/verbs.cpp:2560
 msgid "View and select font family, font size and other text properties"
-msgstr ""
-"Ver e seleccionar a familia de fonte, o tamaño de fonte e outras propiedades "
-"do texto"
+msgstr "Ver e seleccionar a familia de fonte, o tamaño de fonte e outras propiedades do texto"
 
 #: ../src/verbs.cpp:2561
 msgid "_XML Editor..."
@@ -15568,12 +15027,8 @@ msgid "Create Tiled Clones..."
 msgstr "Crear un Mosaico de Clons..."
 
 #: ../src/verbs.cpp:2572
-msgid ""
-"Create multiple clones of selected object, arranging them into a pattern or "
-"scattering"
-msgstr ""
-"Crear varios clons dos obxectos seleccionados, ordenandoos nun patrón ou "
-"esparexendoos"
+msgid "Create multiple clones of selected object, arranging them into a pattern or scattering"
+msgstr "Crear varios clons dos obxectos seleccionados, ordenandoos nun patrón ou esparexendoos"
 
 #: ../src/verbs.cpp:2573
 msgid "_Object Properties..."
@@ -15581,9 +15036,7 @@ msgstr "Propiedades do _Obxecto..."
 
 #: ../src/verbs.cpp:2574
 msgid "Edit the ID, locked and visible status, and other object properties"
-msgstr ""
-"Editar o ID, os estados bloqueado e visible, e outras propiedades dos "
-"obxectos"
+msgstr "Editar o ID, os estados bloqueado e visible, e outras propiedades dos obxectos"
 
 #: ../src/verbs.cpp:2577
 msgid "_Instant Messaging..."
@@ -15597,14 +15050,15 @@ msgstr "Cliente de Mensaxería Instantánea Jabber"
 msgid "_Input Devices..."
 msgstr "Disposi_tivos de Entrada..."
 
-#: ../src/verbs.cpp:2580 ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2580
+#: ../src/verbs.cpp:2582
 msgid "Configure extended input devices, such as a graphics tablet"
 msgstr ""
 
 #: ../src/verbs.cpp:2581
 #, fuzzy
 msgid "_Input Devices (new)..."
-msgstr "Disposi_tivos de Entrada..."
+msgstr "Creando novo conectador"
 
 #: ../src/verbs.cpp:2583
 msgid "_Extensions..."
@@ -15625,15 +15079,17 @@ msgstr "Ver as Capas"
 #: ../src/verbs.cpp:2587
 #, fuzzy
 msgid "Path Effects..."
-msgstr "Efe_ctos"
+msgstr "Pechando o camiño."
 
 #: ../src/verbs.cpp:2588
+#, fuzzy
 msgid "Manage path effects"
-msgstr ""
+msgstr "O camiño está pechado."
 
 #: ../src/verbs.cpp:2589
+#, fuzzy
 msgid "Filter Effects..."
-msgstr ""
+msgstr "Renomear filtro"
 
 #: ../src/verbs.cpp:2590
 msgid "Manage SVG filter effects"
@@ -15751,62 +15207,66 @@ msgstr "Repetir o último efecto cunha nova configuración"
 #: ../src/verbs.cpp:2626
 #, fuzzy
 msgid "Fit Page to Selection"
-msgstr "Zoom á selección"
+msgstr "A_daptar a páxina á selección"
 
 #: ../src/verbs.cpp:2627
+#, fuzzy
 msgid "Fit the page to the current selection"
-msgstr ""
+msgstr "Limita a busca á selección actual"
 
 #: ../src/verbs.cpp:2628
+#, fuzzy
 msgid "Fit Page to Drawing"
-msgstr ""
+msgstr "A_daptar a páxina á selección"
 
 #: ../src/verbs.cpp:2629
+#, fuzzy
 msgid "Fit the page to the drawing"
-msgstr ""
+msgstr "A_daptar a páxina á selección"
 
 #: ../src/verbs.cpp:2630
 msgid "Fit Page to Selection or Drawing"
 msgstr ""
 
 #: ../src/verbs.cpp:2631
-msgid ""
-"Fit the page to the current selection or the drawing if there is no selection"
-msgstr ""
+#, fuzzy
+msgid "Fit the page to the current selection or the drawing if there is no selection"
+msgstr "Redimensiona a páxina para conter a selección actual, ou todo o debuxo se non hai nada seleccionado"
 
 #. LockAndHide
 #: ../src/verbs.cpp:2633
 #, fuzzy
 msgid "Unlock All"
-msgstr "Baixar a Capa"
+msgstr "Tódolos tipos"
 
 #: ../src/verbs.cpp:2635
 #, fuzzy
 msgid "Unlock All in All Layers"
-msgstr "Seleccionar T_odo en Tódalas Capas"
+msgstr "Seleccionar en tódalas capas"
 
 #: ../src/verbs.cpp:2637
 #, fuzzy
 msgid "Unhide All"
-msgstr "Elevar a Capa"
+msgstr "Tódolos tipos"
 
 #: ../src/verbs.cpp:2639
 #, fuzzy
 msgid "Unhide All in All Layers"
-msgstr "Seleccionar T_odo en Tódalas Capas"
+msgstr "Seleccionar en tódalas capas"
 
 #: ../src/widgets/calligraphic-profile-rename.cpp:34
+#, fuzzy
 msgid "Profile name:"
-msgstr ""
+msgstr "Nome da capa:"
 
 #: ../src/widgets/calligraphic-profile-rename.cpp:48
-#, fuzzy
 msgid "Save"
-msgstr "_Gardar"
+msgstr "Gardar"
 
 #: ../src/widgets/dash-selector.cpp:106
+#, fuzzy
 msgid "Dash pattern"
-msgstr ""
+msgstr "Ancho do patrón"
 
 #: ../src/widgets/dash-selector.cpp:121
 msgid "Pattern offset"
@@ -15815,7 +15275,7 @@ msgstr "Desprazamento do patrón"
 #: ../src/widgets/desktop-widget.cpp:620
 #, fuzzy, c-format
 msgid "%s: %d (outline) - Inkscape"
-msgstr "%s: %d - Inkscape"
+msgstr "SVG de Inkscape (*.svg)"
 
 #: ../src/widgets/desktop-widget.cpp:622
 #, c-format
@@ -15825,7 +15285,7 @@ msgstr "%s: %d - Inkscape"
 #: ../src/widgets/desktop-widget.cpp:626
 #, fuzzy, c-format
 msgid "%s (outline) - Inkscape"
-msgstr "%s - Inkscape"
+msgstr "SVG de Inkscape (*.svg)"
 
 #: ../src/widgets/desktop-widget.cpp:628
 #, c-format
@@ -15851,7 +15311,8 @@ msgstr "Tamaño:"
 #. * 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:636 ../src/widgets/toolbox.cpp:5123
+#: ../src/widgets/font-selector.cpp:636
+#: ../src/widgets/toolbox.cpp:5123
 msgid "AaBbCcIiPpQq12369$€¢?.;/()"
 msgstr "AaBbCcIiPpQq12369$€¢?.;/()"
 
@@ -15862,11 +15323,7 @@ msgstr "Editar..."
 
 #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/pservers.html#LinearGradientSpreadMethodAttribute
 #: ../src/widgets/gradient-selector.cpp:156
-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\")"
+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 ""
 
 #: ../src/widgets/gradient-selector.cpp:166
@@ -15884,7 +15341,7 @@ msgstr "Repetir:"
 #: ../src/widgets/gradient-toolbar.cpp:151
 #, fuzzy
 msgid "Assign gradient to object"
-msgstr "Aliñar e distribuír os obxectos"
+msgstr "Seleccione un <b>obxecto</b> para clonalo."
 
 #: ../src/widgets/gradient-toolbar.cpp:185
 msgid "<small>No gradients</small>"
@@ -15899,17 +15356,22 @@ msgid "<small>No gradients in selection</small>"
 msgstr "<small>Non hai degradados na selección</small>"
 
 #: ../src/widgets/gradient-toolbar.cpp:215
+#, fuzzy
 msgid "<small>Multiple gradients</small>"
-msgstr ""
+msgstr "<small>Sen degradados</small>"
 
 #: ../src/widgets/gradient-toolbar.cpp:463
 msgid "Edit the stops of the gradient"
 msgstr "Editar as fases do degradado"
 
-#: ../src/widgets/gradient-toolbar.cpp:522 ../src/widgets/toolbox.cpp:1936
-#: ../src/widgets/toolbox.cpp:2010 ../src/widgets/toolbox.cpp:2340
-#: ../src/widgets/toolbox.cpp:2378 ../src/widgets/toolbox.cpp:2992
-#: ../src/widgets/toolbox.cpp:3016 ../src/widgets/toolbox.cpp:4110
+#: ../src/widgets/gradient-toolbar.cpp:522
+#: ../src/widgets/toolbox.cpp:1936
+#: ../src/widgets/toolbox.cpp:2010
+#: ../src/widgets/toolbox.cpp:2340
+#: ../src/widgets/toolbox.cpp:2378
+#: ../src/widgets/toolbox.cpp:2992
+#: ../src/widgets/toolbox.cpp:3016
+#: ../src/widgets/toolbox.cpp:4110
 #: ../src/widgets/toolbox.cpp:4137
 msgid "<b>New:</b>"
 msgstr "<b>Novo:</b>"
@@ -15936,10 +15398,14 @@ msgstr "Crear degradado no trazo"
 
 #. FIXME: implement averaging of all parameters for multiple selected
 #. gtk_label_set_markup(GTK_LABEL(l), _("<b>Average:</b>"));
-#: ../src/widgets/gradient-toolbar.cpp:605 ../src/widgets/toolbox.cpp:1938
-#: ../src/widgets/toolbox.cpp:2348 ../src/widgets/toolbox.cpp:2366
-#: ../src/widgets/toolbox.cpp:2994 ../src/widgets/toolbox.cpp:3005
-#: ../src/widgets/toolbox.cpp:4113 ../src/widgets/toolbox.cpp:4124
+#: ../src/widgets/gradient-toolbar.cpp:605
+#: ../src/widgets/toolbox.cpp:1938
+#: ../src/widgets/toolbox.cpp:2348
+#: ../src/widgets/toolbox.cpp:2366
+#: ../src/widgets/toolbox.cpp:2994
+#: ../src/widgets/toolbox.cpp:3005
+#: ../src/widgets/toolbox.cpp:4113
+#: ../src/widgets/toolbox.cpp:4124
 msgid "<b>Change:</b>"
 msgstr "<b>Cambiar:</b>"
 
@@ -15958,7 +15424,7 @@ msgstr "O degradado non ten fases"
 #: ../src/widgets/gradient-vector.cpp:661
 #, fuzzy
 msgid "Change gradient stop offset"
-msgstr "Trazo de degradado linear"
+msgstr "Engadir outra fase de control do degradado"
 
 #. TRANSLATORS: "Stop" means: a "phase" of a gradient
 #: ../src/widgets/gradient-vector.cpp:803
@@ -15994,7 +15460,7 @@ msgstr "Editor de degradados"
 #: ../src/widgets/gradient-vector.cpp:1171
 #, fuzzy
 msgid "Change gradient stop color"
-msgstr "Trazo de degradado linear"
+msgstr "Engadir outra fase de control do degradado"
 
 #: ../src/widgets/layer-selector.cpp:115
 msgid "Toggle current layer visibility"
@@ -16012,40 +15478,39 @@ msgstr "Capa actual"
 msgid "(root)"
 msgstr "(raíz)"
 
-#: ../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 "Non pintar"
 
-#: ../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 "Cor uniforme"
 
-#: ../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 "Degradado linear"
 
-#: ../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 "Degradado radial"
 
 #: ../src/widgets/paint-selector.cpp:191
 #, fuzzy
 msgid "Unset paint (make it undefined so it can be inherited)"
-msgstr ""
-"Non asignar cor (facer que non estea asignada a cor de xeito que non se "
-"poida herdar)"
+msgstr "Non asignar cor (facer que non estea asignada a cor de xeito que non se poida herdar)"
 
 #. 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)"
+msgid "Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)"
 msgstr ""
 
 #. 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)"
+msgid "Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)"
 msgstr ""
 
 #: ../src/widgets/paint-selector.cpp:531
@@ -16053,8 +15518,9 @@ msgid "No objects"
 msgstr "Non hai obxectos seleccionados"
 
 #: ../src/widgets/paint-selector.cpp:542
+#, fuzzy
 msgid "Multiple styles"
-msgstr ""
+msgstr "Varios estilos"
 
 #: ../src/widgets/paint-selector.cpp:553
 msgid "Paint is undefined"
@@ -16062,78 +15528,45 @@ msgstr "A cor non está definida"
 
 #: ../src/widgets/paint-selector.cpp:984
 #, fuzzy
-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 ""
-"Use <b>Obxecto &gt; Patrón &gt; Obxectos a Patrón</b> para crear un novo "
-"patrón a partir da selección."
+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 "Use <b>Obxecto &gt; Patrón &gt; Obxectos a Patrón</b> para crear un novo patrón a partir da selección."
 
 #: ../src/widgets/select-toolbar.cpp:244
 #, fuzzy
 msgid "Transform by toolbar"
-msgstr "Transformar os patróns"
+msgstr "Ancho"
 
 #: ../src/widgets/select-toolbar.cpp:299
 msgid "Now <b>stroke width</b> is <b>scaled</b> when objects are scaled."
-msgstr ""
-"Agora <b>hase escalar</b> o <b>ancho do trazo</b> cando se escalen os "
-"obxectos."
+msgstr "Agora <b>hase escalar</b> o <b>ancho do trazo</b> cando se escalen os obxectos."
 
 #: ../src/widgets/select-toolbar.cpp:301
 msgid "Now <b>stroke width</b> is <b>not scaled</b> when objects are scaled."
-msgstr ""
-"Agora <b>non se vai escalar</b> o <b>ancho do trazo</b> cando se escalen os "
-"obxectos."
+msgstr "Agora <b>non se vai escalar</b> o <b>ancho do trazo</b> cando se escalen os obxectos."
 
 #: ../src/widgets/select-toolbar.cpp:310
-msgid ""
-"Now <b>rounded rectangle corners</b> are <b>scaled</b> when rectangles are "
-"scaled."
-msgstr ""
-"Agora <b>hanse escalar</b> as <b>esquinas redondeadas dos rectángulos</b> "
-"cando se escalen os rectángulos."
+msgid "Now <b>rounded rectangle corners</b> are <b>scaled</b> when rectangles are scaled."
+msgstr "Agora <b>hanse escalar</b> as <b>esquinas redondeadas dos rectángulos</b> cando se escalen os rectángulos."
 
 #: ../src/widgets/select-toolbar.cpp:312
-msgid ""
-"Now <b>rounded rectangle corners</b> are <b>not scaled</b> when rectangles "
-"are scaled."
-msgstr ""
-"Agora as <b>esquinas redondeadas dos rectángulos</b> <b>non se escalan</b> "
-"cando se escalan os rectángulos."
+msgid "Now <b>rounded rectangle corners</b> are <b>not scaled</b> when rectangles are scaled."
+msgstr "Agora as <b>esquinas redondeadas dos rectángulos</b> <b>non se escalan</b> cando se escalan os rectángulos."
 
 #: ../src/widgets/select-toolbar.cpp:321
-msgid ""
-"Now <b>gradients</b> are <b>transformed</b> along with their objects when "
-"those are transformed (moved, scaled, rotated, or skewed)."
-msgstr ""
-"Agora os <b>degradados</b> <b>transformanse</b> xunta cos seus obxectos "
-"cando estes se transformen (cando se movan, escalen, roten, ou se inclinen)."
+msgid "Now <b>gradients</b> are <b>transformed</b> along with their objects when those are transformed (moved, scaled, rotated, or skewed)."
+msgstr "Agora os <b>degradados</b> <b>transformanse</b> xunta cos seus obxectos cando estes se transformen (cando se movan, escalen, roten, ou se inclinen)."
 
 #: ../src/widgets/select-toolbar.cpp:323
-msgid ""
-"Now <b>gradients</b> remain <b>fixed</b> when objects are transformed "
-"(moved, scaled, rotated, or skewed)."
-msgstr ""
-"Agora os <b>degradados</b> permanecen <b>fixos</b> cando os obxectos se "
-"transforman (cando se moven, escalan, rotan, ou se inclinan)."
+msgid "Now <b>gradients</b> remain <b>fixed</b> when objects are transformed (moved, scaled, rotated, or skewed)."
+msgstr "Agora os <b>degradados</b> permanecen <b>fixos</b> cando os obxectos se transforman (cando se moven, escalan, rotan, ou se inclinan)."
 
 #: ../src/widgets/select-toolbar.cpp:332
-msgid ""
-"Now <b>patterns</b> are <b>transformed</b> along with their objects when "
-"those are transformed (moved, scaled, rotated, or skewed)."
-msgstr ""
-"Agora os <b>patróns</b> <b>transformanse</b> xunta cos seus obxectos cando "
-"estes se transformen (cando se movan, escalen, roten, ou se inclinen)."
+msgid "Now <b>patterns</b> are <b>transformed</b> along with their objects when those are transformed (moved, scaled, rotated, or skewed)."
+msgstr "Agora os <b>patróns</b> <b>transformanse</b> xunta cos seus obxectos cando estes se transformen (cando se movan, escalen, roten, ou se inclinen)."
 
 #: ../src/widgets/select-toolbar.cpp:334
-msgid ""
-"Now <b>patterns</b> remain <b>fixed</b> when objects are transformed (moved, "
-"scaled, rotated, or skewed)."
-msgstr ""
-"Agora os <b>patróns</b> permanecen <b>fixos</b> cando os obxectos "
-"transforman (cando se moven, escalan, rotan, ou se inclinan)."
+msgid "Now <b>patterns</b> remain <b>fixed</b> when objects are transformed (moved, scaled, rotated, or skewed)."
+msgstr "Agora os <b>patróns</b> permanecen <b>fixos</b> cando os obxectos transforman (cando se moven, escalan, rotan, ou se inclinan)."
 
 #. four spinbuttons
 #. TRANSLATORS: only translate "string" in "context|string".
@@ -16141,7 +15574,7 @@ msgstr ""
 #: ../src/widgets/select-toolbar.cpp:446
 #, fuzzy
 msgid "select_toolbar|X position"
-msgstr "X"
+msgstr "Ancho"
 
 #: ../src/widgets/select-toolbar.cpp:446
 msgid "select_toolbar|X"
@@ -16156,7 +15589,7 @@ msgstr "Coordenada horizontal da selección"
 #: ../src/widgets/select-toolbar.cpp:454
 #, fuzzy
 msgid "select_toolbar|Y position"
-msgstr "Y"
+msgstr "Ancho"
 
 #: ../src/widgets/select-toolbar.cpp:454
 msgid "select_toolbar|Y"
@@ -16169,9 +15602,8 @@ msgstr "Coordenada vertical da selección"
 #. 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/widgets/select-toolbar.cpp:462
-#, fuzzy
 msgid "select_toolbar|Width"
-msgstr "A"
+msgstr "Ancho"
 
 #: ../src/widgets/select-toolbar.cpp:462
 msgid "select_toolbar|W"
@@ -16182,9 +15614,8 @@ msgid "Width of selection"
 msgstr "Ancho da selección"
 
 #: ../src/widgets/select-toolbar.cpp:471
-#, fuzzy
 msgid "Lock width and height"
-msgstr "Ancho, alto:"
+msgstr "Bloquear o ancho e mailo alto"
 
 #: ../src/widgets/select-toolbar.cpp:472
 msgid "When locked, change both width and height by the same proportion"
@@ -16193,9 +15624,8 @@ msgstr "Cando está bloqueado, cambia o ancho e mailo alto na mesma proporción"
 #. 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/widgets/select-toolbar.cpp:483
-#, fuzzy
 msgid "select_toolbar|Height"
-msgstr "H"
+msgstr "Alto"
 
 #: ../src/widgets/select-toolbar.cpp:483
 msgid "select_toolbar|H"
@@ -16213,17 +15643,17 @@ msgstr "Desprazamento:"
 #: ../src/widgets/select-toolbar.cpp:535
 #, fuzzy
 msgid "Scale rounded corners"
-msgstr "Escalar as esquinas redondeadas dos rectángulos"
+msgstr "Escalar as esquinas redondeadas"
 
 #: ../src/widgets/select-toolbar.cpp:546
 #, fuzzy
 msgid "Move gradients"
-msgstr "Non se seleccionou ningún degradado"
+msgstr "Degradados de GIMP"
 
 #: ../src/widgets/select-toolbar.cpp:557
 #, fuzzy
 msgid "Move patterns"
-msgstr "Patrón"
+msgstr "Transformar os patróns"
 
 #: ../src/widgets/sp-color-gtkselector.cpp:50
 msgid "System"
@@ -16290,9 +15720,8 @@ msgid "_K"
 msgstr "_K"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:234
-#, fuzzy
 msgid "Gray"
-msgstr "Agrupar"
+msgstr "Gris"
 
 #: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-icc-selector.cpp:238
@@ -16383,47 +15812,48 @@ msgid "Value"
 msgstr "Valor"
 
 #: ../src/widgets/sp-xmlview-content.cpp:169
+#, fuzzy
 msgid "Type text in a text node"
-msgstr ""
+msgstr "Crear novo nodo de texto"
 
 #: ../src/widgets/toolbox.cpp:187
+#, fuzzy
 msgid "Color/opacity used for color tweaking"
-msgstr ""
+msgstr "Selecciona a cor que se usa para as liñas normais da reixa."
 
 #: ../src/widgets/toolbox.cpp:191
 msgid "Style of new stars"
-msgstr ""
+msgstr "Estilo das novas estrelas"
 
 #: ../src/widgets/toolbox.cpp:193
-#, fuzzy
 msgid "Style of new rectangles"
-msgstr "Alto do rectángulo"
+msgstr "Estilo dos novos rectángulos"
 
 #: ../src/widgets/toolbox.cpp:195
 #, fuzzy
 msgid "Style of new 3D boxes"
-msgstr "Alto do rectángulo"
+msgstr "Estilo dos novos camiños creados co Lapis"
 
 #: ../src/widgets/toolbox.cpp:197
 msgid "Style of new ellipses"
-msgstr ""
+msgstr "Estilo das novas elipses"
 
 #: ../src/widgets/toolbox.cpp:199
 msgid "Style of new spirals"
-msgstr ""
+msgstr "Estilo das novas espirais"
 
 #: ../src/widgets/toolbox.cpp:201
 msgid "Style of new paths created by Pencil"
-msgstr ""
+msgstr "Estilo dos novos camiños creados co Lapis"
 
 #: ../src/widgets/toolbox.cpp:203
 msgid "Style of new paths created by Pen"
-msgstr ""
+msgstr "Estilo dos novos camiños creados ca Pluma"
 
 #: ../src/widgets/toolbox.cpp:205
 #, fuzzy
 msgid "Style of new calligraphic strokes"
-msgstr "Debuxar liñas de caligrafía"
+msgstr "Estilo dos novos camiños creados co Lapis"
 
 #: ../src/widgets/toolbox.cpp:207
 msgid "TBD"
@@ -16434,64 +15864,58 @@ msgid "Style of Paint Bucket fill objects"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:1075
-#, fuzzy
 msgid "Insert node"
-msgstr "Sangrar o nodo"
+msgstr "Inserir un nodo"
 
 #: ../src/widgets/toolbox.cpp:1076
 msgid "Insert new nodes into selected segments"
 msgstr "Inserir nodos nos segmentos seleccionados"
 
 #: ../src/widgets/toolbox.cpp:1079
-#, fuzzy
 msgid "Insert"
-msgstr "Inverter"
+msgstr "Inserir"
 
 #: ../src/widgets/toolbox.cpp:1087
 msgid "Delete selected nodes"
 msgstr "Borra-los nodos seleccionados"
 
 #: ../src/widgets/toolbox.cpp:1097
-#, fuzzy
 msgid "Join endnodes"
-msgstr "Uni-los nodos finais seleccionados"
+msgstr "Unir os nodos finais"
 
 #: ../src/widgets/toolbox.cpp:1098
 msgid "Join selected endnodes"
 msgstr "Uni-los nodos finais seleccionados"
 
 #: ../src/widgets/toolbox.cpp:1101
-#, fuzzy
 msgid "Join"
-msgstr "Xuntura:"
+msgstr "Unir"
 
 #: ../src/widgets/toolbox.cpp:1108
 #, fuzzy
 msgid "Break nodes"
-msgstr "nodo final"
+msgstr "Mover os nodos"
 
 #: ../src/widgets/toolbox.cpp:1109
 msgid "Break path at selected nodes"
 msgstr "Romper o camiño nos nodos seleccionados"
 
 #: ../src/widgets/toolbox.cpp:1119
-#, fuzzy
 msgid "Join with segment"
-msgstr "Degradado linear"
+msgstr "Unir cun segmento"
 
 #: ../src/widgets/toolbox.cpp:1120
 msgid "Join selected endnodes with a new segment"
 msgstr "Uni-los nodos finais seleccionados cun novo segmento"
 
 #: ../src/widgets/toolbox.cpp:1130
-#, fuzzy
 msgid "Delete segment between two non-endpoint nodes"
-msgstr "Dividir o camiño entre dous nodos non finais"
+msgstr "Dividir o segmento entre dous nodos non finais"
 
 #: ../src/widgets/toolbox.cpp:1139
 #, fuzzy
 msgid "Node Cusp"
-msgstr "Nodos"
+msgstr "Duplicar o nodo"
 
 #: ../src/widgets/toolbox.cpp:1140
 msgid "Make selected nodes corner"
@@ -16500,16 +15924,15 @@ msgstr "Converter os nodos seleccionados en esquinas"
 #: ../src/widgets/toolbox.cpp:1149
 #, fuzzy
 msgid "Node Smooth"
-msgstr "Suavizar"
+msgstr "Duplicar o nodo"
 
 #: ../src/widgets/toolbox.cpp:1150
 msgid "Make selected nodes smooth"
 msgstr "Suavizar os nodos seleccionados"
 
 #: ../src/widgets/toolbox.cpp:1159
-#, fuzzy
 msgid "Node Symmetric"
-msgstr "simétrico"
+msgstr "Nodo simétrico"
 
 #: ../src/widgets/toolbox.cpp:1160
 msgid "Make selected nodes symmetric"
@@ -16518,7 +15941,7 @@ msgstr "Facer simétricos os nodos seleccionados"
 #: ../src/widgets/toolbox.cpp:1169
 #, fuzzy
 msgid "Node Line"
-msgstr "Nova vista"
+msgstr "Ancho da Liña"
 
 #: ../src/widgets/toolbox.cpp:1170
 msgid "Make selected segments lines"
@@ -16527,7 +15950,7 @@ msgstr "Converte-los segmentos seleccionados en liñas"
 #: ../src/widgets/toolbox.cpp:1179
 #, fuzzy
 msgid "Node Curve"
-msgstr "Sen previsualización"
+msgstr "Duplicar o nodo"
 
 #: ../src/widgets/toolbox.cpp:1180
 msgid "Make selected segments curves"
@@ -16545,12 +15968,12 @@ msgstr "Amosar as asas Bezier dos nodos seleccionados"
 #: ../src/widgets/toolbox.cpp:1200
 #, fuzzy
 msgid "Show Outline"
-msgstr "_Bosquexo"
+msgstr "Caixa de contorno"
 
 #: ../src/widgets/toolbox.cpp:1201
 #, fuzzy
 msgid "Show the outline of the path"
-msgstr "Ancho do papel"
+msgstr "O camiño está pechado."
 
 #: ../src/widgets/toolbox.cpp:1211
 #, fuzzy
@@ -16565,65 +15988,62 @@ msgstr "Pegar Ancho por Separado"
 #: ../src/widgets/toolbox.cpp:1223
 #, fuzzy
 msgid "Edit the clipping path of the object"
-msgstr "Simplificar"
+msgstr "Seleccione <b>obxectos</b> para convertelos en camiños."
 
 #: ../src/widgets/toolbox.cpp:1233
 #, fuzzy
 msgid "Edit mask path"
-msgstr "Editar trazo..."
+msgstr "O camiño está pechado."
 
 #: ../src/widgets/toolbox.cpp:1234
 #, fuzzy
 msgid "Edit the mask of the object"
-msgstr "Editar as fases do degradado"
+msgstr "Establecer o ID do obxecto"
 
 #: ../src/widgets/toolbox.cpp:1248
-#, fuzzy
 msgid "X coordinate:"
-msgstr "Coordenadas do cursor"
+msgstr "Coordenada X:"
 
 #: ../src/widgets/toolbox.cpp:1248
-#, fuzzy
 msgid "X coordinate of selected node(s)"
-msgstr "Coordenada vertical da selección"
+msgstr "Coordenada X dos nodos seleccionados"
 
 #: ../src/widgets/toolbox.cpp:1266
-#, fuzzy
 msgid "Y coordinate:"
-msgstr "Coordenadas do cursor"
+msgstr "Coordenada Y:"
 
 #: ../src/widgets/toolbox.cpp:1266
-#, fuzzy
 msgid "Y coordinate of selected node(s)"
-msgstr "Coordenada vertical da selección"
+msgstr "Coordenada Y dos nodos seleccionados"
 
 #: ../src/widgets/toolbox.cpp:1688
+#, fuzzy
 msgid "Star: Change number of corners"
-msgstr ""
+msgstr "Número de puntas dun polígono ou dunha estrela"
 
 #: ../src/widgets/toolbox.cpp:1730
-#, fuzzy
 msgid "Star: Change spoke ratio"
-msgstr "Almacenar a transformación:"
+msgstr "Estrela: Cambiar a relación de aspecto"
 
 #: ../src/widgets/toolbox.cpp:1773
 #, fuzzy
 msgid "Make polygon"
-msgstr "Completar"
+msgstr "polígono regular"
 
 #: ../src/widgets/toolbox.cpp:1773
 #, fuzzy
 msgid "Make star"
-msgstr "Crear mapa de bits"
+msgstr "Crear estrela"
 
 #: ../src/widgets/toolbox.cpp:1808
+#, fuzzy
 msgid "Star: Change rounding"
-msgstr ""
+msgstr "Estrela: Cambiar a relación de aspecto"
 
 #: ../src/widgets/toolbox.cpp:1842
 #, fuzzy
 msgid "Star: Change randomization"
-msgstr "Almacenar a transformación:"
+msgstr "Estrela: Cambiar a relación de aspecto"
 
 #: ../src/widgets/toolbox.cpp:2029
 msgid "Regular polygon (with one handle) instead of a star"
@@ -16635,12 +16055,14 @@ msgid "Star instead of a regular polygon (with one handle)"
 msgstr "Polígono regular (cunha asa) en vez dunha estrela"
 
 #: ../src/widgets/toolbox.cpp:2057
+#, fuzzy
 msgid "triangle/tri-star"
-msgstr ""
+msgstr "<b>Estrela</b> de %d vértice"
 
 #: ../src/widgets/toolbox.cpp:2057
+#, fuzzy
 msgid "square/quad-star"
-msgstr ""
+msgstr "<b>Estrela</b> de %d vértice"
 
 #: ../src/widgets/toolbox.cpp:2057
 msgid "pentagon/five-pointed star"
@@ -16664,12 +16086,14 @@ msgid "Number of corners of a polygon or star"
 msgstr "Número de puntas dun polígono ou dunha estrela"
 
 #: ../src/widgets/toolbox.cpp:2073
+#, fuzzy
 msgid "thin-ray star"
-msgstr ""
+msgstr "<b>Estrela</b> de %d vértice"
 
 #: ../src/widgets/toolbox.cpp:2073
+#, fuzzy
 msgid "pentagram"
-msgstr ""
+msgstr "pentagrama"
 
 #: ../src/widgets/toolbox.cpp:2073
 msgid "hexagram"
@@ -16686,17 +16110,17 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:2073
 #, fuzzy
 msgid "regular polygon"
-msgstr "Completar"
+msgstr "polígono regular"
 
 #: ../src/widgets/toolbox.cpp:2076
 #, fuzzy
 msgid "Spoke ratio"
-msgstr "Bloquea-la relación de aspecto"
+msgstr "Estrela: Cambiar a relación de aspecto"
 
 #: ../src/widgets/toolbox.cpp:2076
 #, fuzzy
 msgid "Spoke ratio:"
-msgstr "Bloquea-la relación de aspecto"
+msgstr "Estrela: Cambiar a relación de aspecto"
 
 #. 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.
@@ -16717,38 +16141,37 @@ msgid "slightly pinched"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:2097
-#, fuzzy
 msgid "NOT rounded"
-msgstr "Non redondeado"
+msgstr "NON redondeado"
 
 #: ../src/widgets/toolbox.cpp:2097
 #, fuzzy
 msgid "slightly rounded"
-msgstr "Non redondeado"
+msgstr "NON redondeado"
 
 #: ../src/widgets/toolbox.cpp:2097
 #, fuzzy
 msgid "visibly rounded"
-msgstr "Non redondeado"
+msgstr "NON redondeado"
 
 #: ../src/widgets/toolbox.cpp:2097
 #, fuzzy
 msgid "well rounded"
-msgstr "Non redondeado"
+msgstr "NON redondeado"
 
 #: ../src/widgets/toolbox.cpp:2097
 #, fuzzy
 msgid "amply rounded"
-msgstr "Non redondeado"
+msgstr "NON redondeado"
 
-#: ../src/widgets/toolbox.cpp:2097 ../src/widgets/toolbox.cpp:2112
+#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2112
 msgid "blown up"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:2100
-#, fuzzy
 msgid "Rounded"
-msgstr "Redondeado:"
+msgstr "Redondeado"
 
 #: ../src/widgets/toolbox.cpp:2100
 msgid "Rounded:"
@@ -16759,8 +16182,9 @@ msgid "How much rounded are the corners (0 for sharp)"
 msgstr "Como de redondas son as esquinas (0 para aguzadas)"
 
 #: ../src/widgets/toolbox.cpp:2112
+#, fuzzy
 msgid "NOT randomized"
-msgstr ""
+msgstr "NON redondeado"
 
 #: ../src/widgets/toolbox.cpp:2112
 msgid "slightly irregular"
@@ -16788,23 +16212,21 @@ msgstr ""
 msgid "Scatter randomly the corners and angles"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:2130 ../src/widgets/toolbox.cpp:3067
-#: ../src/widgets/toolbox.cpp:3847 ../src/widgets/toolbox.cpp:5804
+#: ../src/widgets/toolbox.cpp:2130
+#: ../src/widgets/toolbox.cpp:3067
+#: ../src/widgets/toolbox.cpp:3847
+#: ../src/widgets/toolbox.cpp:5804
 msgid "Defaults"
 msgstr "Predeterminados"
 
-#: ../src/widgets/toolbox.cpp:2131 ../src/widgets/toolbox.cpp:3068
-msgid ""
-"Reset shape parameters to defaults (use Inkscape Preferences > Tools to "
-"change defaults)"
-msgstr ""
-"Restablecer os parámetros da figura ós predeterminados (use Preferencias de "
-"Inkscape > Ferramentas para cambia-los predeterminados)"
+#: ../src/widgets/toolbox.cpp:2131
+#: ../src/widgets/toolbox.cpp:3068
+msgid "Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
+msgstr "Restablecer os parámetros da figura ós predeterminados (use Preferencias de Inkscape > Ferramentas para cambia-los predeterminados)"
 
 #: ../src/widgets/toolbox.cpp:2203
-#, fuzzy
 msgid "Change rectangle"
-msgstr "Crear rectángulo"
+msgstr "Cambiar o rectángulo"
 
 #: ../src/widgets/toolbox.cpp:2396
 msgid "W:"
@@ -16822,15 +16244,15 @@ msgstr "H:"
 msgid "Height of rectangle"
 msgstr "Alto do rectángulo"
 
-#: ../src/widgets/toolbox.cpp:2427 ../src/widgets/toolbox.cpp:2442
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:2427
+#: ../src/widgets/toolbox.cpp:2442
 msgid "not rounded"
-msgstr "Non redondeado"
+msgstr "non redondeado"
 
 #: ../src/widgets/toolbox.cpp:2430
 #, fuzzy
 msgid "Horizontal radius"
-msgstr "Espacio Horizontal"
+msgstr "Radio horizontal"
 
 #: ../src/widgets/toolbox.cpp:2430
 msgid "Rx:"
@@ -16843,7 +16265,7 @@ msgstr "Raio horizontal das esquinas redondeadas"
 #: ../src/widgets/toolbox.cpp:2445
 #, fuzzy
 msgid "Vertical radius"
-msgstr "Espacio Vertical"
+msgstr "Radio vertical"
 
 #: ../src/widgets/toolbox.cpp:2445
 msgid "Ry:"
@@ -16867,8 +16289,9 @@ msgid "3D Box: Change perspective (angle of infinite axis)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:2723
+#, fuzzy
 msgid "Angle in X direction"
-msgstr ""
+msgstr "Exportando"
 
 #. Translators: PL is short for 'perspective line'
 #: ../src/widgets/toolbox.cpp:2725
@@ -16885,13 +16308,14 @@ msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:2763
+#, fuzzy
 msgid "Angle in Y direction"
-msgstr ""
+msgstr "Exportando"
 
 #: ../src/widgets/toolbox.cpp:2763
 #, fuzzy
 msgid "Angle Y:"
-msgstr "Ángulo:"
+msgstr "Ángulo Y:"
 
 #. Translators: PL is short for 'perspective line'
 #: ../src/widgets/toolbox.cpp:2765
@@ -16908,8 +16332,9 @@ msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:2802
+#, fuzzy
 msgid "Angle in Z direction"
-msgstr ""
+msgstr "Exportando"
 
 #. Translators: PL is short for 'perspective line'
 #: ../src/widgets/toolbox.cpp:2804
@@ -16926,23 +16351,20 @@ msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:2883
-#, fuzzy
 msgid "Change spiral"
-msgstr "Crear espirais"
+msgstr "Cambiar a espiral"
 
 #: ../src/widgets/toolbox.cpp:3024
 msgid "just a curve"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3024
-#, fuzzy
 msgid "one full revolution"
-msgstr "Número de revolucións"
+msgstr "unha revolución completa"
 
 #: ../src/widgets/toolbox.cpp:3027
-#, fuzzy
 msgid "Number of turns"
-msgstr "Número de filas"
+msgstr "Número de voltas"
 
 #: ../src/widgets/toolbox.cpp:3027
 msgid "Turns:"
@@ -16953,17 +16375,17 @@ msgid "Number of revolutions"
 msgstr "Número de revolucións"
 
 #: ../src/widgets/toolbox.cpp:3038
-#, fuzzy
 msgid "circle"
-msgstr "Círculo"
+msgstr "círculo"
 
 #: ../src/widgets/toolbox.cpp:3038
 msgid "edge is much denser"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3038
+#, fuzzy
 msgid "edge is denser"
-msgstr ""
+msgstr "O camiño está pechado."
 
 #: ../src/widgets/toolbox.cpp:3038
 #, fuzzy
@@ -16973,7 +16395,7 @@ msgstr "Verde"
 #: ../src/widgets/toolbox.cpp:3038
 #, fuzzy
 msgid "center is denser"
-msgstr "Centrar as liñas"
+msgstr "O camiño está pechado."
 
 #: ../src/widgets/toolbox.cpp:3038
 msgid "center is much denser"
@@ -16993,43 +16415,47 @@ msgid "How much denser/sparser are outer revolutions; 1 = uniform"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3052
-#, fuzzy
 msgid "starts from center"
-msgstr "Escolle-la metría para o centro"
+msgstr "comeza no centro"
 
 #: ../src/widgets/toolbox.cpp:3052
+#, fuzzy
 msgid "starts mid-way"
-msgstr ""
+msgstr "comeza no centro"
 
 #: ../src/widgets/toolbox.cpp:3052
+#, fuzzy
 msgid "starts near edge"
-msgstr ""
+msgstr "Detección Óptima de Bordos"
 
 #: ../src/widgets/toolbox.cpp:3055
 #, fuzzy
 msgid "Inner radius"
-msgstr "Degradado linear"
+msgstr "Radio interior:"
 
 #: ../src/widgets/toolbox.cpp:3055
+#, fuzzy
 msgid "Inner radius:"
-msgstr ""
+msgstr "Radio interior:"
 
 #: ../src/widgets/toolbox.cpp:3055
 msgid "Radius of the innermost revolution (relative to the spiral size)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3101
-#, fuzzy
 msgid "<b>Mode:</b>"
-msgstr "<b>Bordo</b>"
+msgstr "<b>Modo:</b>"
 
 #: ../src/widgets/toolbox.cpp:3121
 msgid "Bézier"
-msgstr ""
+msgstr "Bézier"
 
 #: ../src/widgets/toolbox.cpp:3122
+#, fuzzy
 msgid "Regular Bézier mode"
 msgstr ""
+"%s non é un ficheiro normal.\n"
+"%s"
 
 #: ../src/widgets/toolbox.cpp:3128
 #, fuzzy
@@ -17039,19 +16465,22 @@ msgstr "Espiral"
 #: ../src/widgets/toolbox.cpp:3129
 #, fuzzy
 msgid "Spiro splines mode"
-msgstr "Engadir nodos"
+msgstr "Cambiar ó modo de visualización normal"
 
 #. Width
 #: ../src/widgets/toolbox.cpp:3238
 msgid "(pinch tweak)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3238 ../src/widgets/toolbox.cpp:3254
-#: ../src/widgets/toolbox.cpp:3420 ../src/widgets/toolbox.cpp:3642
-#: ../src/widgets/toolbox.cpp:3674 ../src/widgets/toolbox.cpp:4315
+#: ../src/widgets/toolbox.cpp:3238
+#: ../src/widgets/toolbox.cpp:3254
+#: ../src/widgets/toolbox.cpp:3420
+#: ../src/widgets/toolbox.cpp:3642
+#: ../src/widgets/toolbox.cpp:3674
+#: ../src/widgets/toolbox.cpp:4315
 #, fuzzy
 msgid "(default)"
-msgstr "Predeterminado"
+msgstr "(predeterminado)"
 
 #: ../src/widgets/toolbox.cpp:3238
 #, fuzzy
@@ -17064,12 +16493,14 @@ msgstr ""
 
 #. Force
 #: ../src/widgets/toolbox.cpp:3254
+#, fuzzy
 msgid "(minimum force)"
-msgstr ""
+msgstr "Tamaño mínimo"
 
 #: ../src/widgets/toolbox.cpp:3254
+#, fuzzy
 msgid "(maximum force)"
-msgstr ""
+msgstr "Número máximo de documentos recentes:"
 
 #: ../src/widgets/toolbox.cpp:3257
 #, fuzzy
@@ -17082,12 +16513,14 @@ msgid "Force:"
 msgstr "Fonte"
 
 #: ../src/widgets/toolbox.cpp:3257
+#, fuzzy
 msgid "The force of the tweak action"
-msgstr ""
+msgstr "Desface-la última acción"
 
 #: ../src/widgets/toolbox.cpp:3274
+#, fuzzy
 msgid "Push mode"
-msgstr ""
+msgstr "Modo de _visualización"
 
 #: ../src/widgets/toolbox.cpp:3275
 msgid "Push parts of paths in any direction"
@@ -17096,7 +16529,7 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:3281
 #, fuzzy
 msgid "Shrink mode"
-msgstr "Engadir nodos"
+msgstr "Modo de _visualización"
 
 #: ../src/widgets/toolbox.cpp:3282
 #, fuzzy
@@ -17106,7 +16539,7 @@ msgstr "Romper os camiños seleccionados en subcamiños"
 #: ../src/widgets/toolbox.cpp:3288
 #, fuzzy
 msgid "Grow mode"
-msgstr "Baixar o nodo"
+msgstr "Modo de _visualización"
 
 #: ../src/widgets/toolbox.cpp:3289
 msgid "Grow (outset) parts of paths"
@@ -17115,7 +16548,7 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:3295
 #, fuzzy
 msgid "Attract mode"
-msgstr "Nome do atributo"
+msgstr "Modo de _visualización"
 
 #: ../src/widgets/toolbox.cpp:3296
 msgid "Attract parts of paths towards cursor"
@@ -17133,16 +16566,17 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:3309
 #, fuzzy
 msgid "Roughen mode"
-msgstr "nodo final"
+msgstr "Modo de _visualización"
 
 #: ../src/widgets/toolbox.cpp:3310
+#, fuzzy
 msgid "Roughen parts of paths"
-msgstr ""
+msgstr "Converter textos en camiños"
 
 #: ../src/widgets/toolbox.cpp:3316
 #, fuzzy
 msgid "Color paint mode"
-msgstr "Cor do bordo da páxina"
+msgstr "A cor non está definida"
 
 #: ../src/widgets/toolbox.cpp:3317
 #, fuzzy
@@ -17152,17 +16586,16 @@ msgstr "Facer que os conectadores eviten os obxectos seleccionados"
 #: ../src/widgets/toolbox.cpp:3323
 #, fuzzy
 msgid "Color jitter mode"
-msgstr "Subir o nodo"
+msgstr "Elixa o matiz da cor"
 
 #: ../src/widgets/toolbox.cpp:3324
 #, fuzzy
 msgid "Jitter the colors of selected objects"
-msgstr "Facer que os conectadores eviten os obxectos seleccionados"
+msgstr "Voltea-los obxectos seleccionados horizontalmente"
 
 #: ../src/widgets/toolbox.cpp:3329
-#, fuzzy
 msgid "Mode:"
-msgstr "Mover"
+msgstr "Modo:"
 
 #: ../src/widgets/toolbox.cpp:3350
 #, fuzzy
@@ -17177,7 +16610,7 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:3365
 #, fuzzy
 msgid "H"
-msgstr "H:"
+msgstr "H"
 
 #: ../src/widgets/toolbox.cpp:3376
 msgid "In color mode, act on objects' saturation"
@@ -17185,9 +16618,8 @@ msgstr ""
 
 #. TRANSLATORS: "S" here stands for Saturation
 #: ../src/widgets/toolbox.cpp:3380
-#, fuzzy
 msgid "S"
-msgstr "_S"
+msgstr "S"
 
 #: ../src/widgets/toolbox.cpp:3391
 msgid "In color mode, act on objects' lightness"
@@ -17197,7 +16629,7 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:3395
 #, fuzzy
 msgid "L"
-msgstr "_L"
+msgstr "L"
 
 #: ../src/widgets/toolbox.cpp:3406
 msgid "In color mode, act on objects' opacity"
@@ -17206,9 +16638,8 @@ msgstr ""
 # O de opacidade
 #. TRANSLATORS: "O" here stands for Opacity
 #: ../src/widgets/toolbox.cpp:3410
-#, fuzzy
 msgid "O"
-msgstr "O:"
+msgstr "O"
 
 #. Fidelity
 #: ../src/widgets/toolbox.cpp:3420
@@ -17229,34 +16660,35 @@ msgid "Fidelity:"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3424
-msgid ""
-"Low fidelity simplifies paths; high fidelity preserves path features but may "
-"generate a lot of new nodes"
+msgid "Low fidelity simplifies paths; high fidelity preserves path features but may generate a lot of new nodes"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3441 ../src/widgets/toolbox.cpp:3789
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:3441
+#: ../src/widgets/toolbox.cpp:3789
 msgid "Pressure"
-msgstr "Conservar"
+msgstr "Presión"
 
 #: ../src/widgets/toolbox.cpp:3442
 msgid "Use the pressure of the input device to alter the force of tweak action"
 msgstr ""
 
 #. Width
-#: ../src/widgets/toolbox.cpp:3642 ../src/widgets/toolbox.cpp:4315
+#: ../src/widgets/toolbox.cpp:3642
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(hairline)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:3642 ../src/widgets/toolbox.cpp:4315
+#: ../src/widgets/toolbox.cpp:3642
+#: ../src/widgets/toolbox.cpp:4315
 #, fuzzy
 msgid "(broad stroke)"
-msgstr "Sen trazo"
+msgstr "Eliminar o trazo"
 
-#: ../src/widgets/toolbox.cpp:3645 ../src/widgets/toolbox.cpp:4318
+#: ../src/widgets/toolbox.cpp:3645
+#: ../src/widgets/toolbox.cpp:4318
 #, fuzzy
 msgid "Pen Width"
-msgstr "A_ncho da Páxina"
+msgstr "Ancho, alto:"
 
 #: ../src/widgets/toolbox.cpp:3646
 msgid "The width of the calligraphic pen (relative to the visible canvas area)"
@@ -17272,73 +16704,76 @@ msgid "(slight widening)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3658
+#, fuzzy
 msgid "(constant width)"
-msgstr ""
+msgstr "Ancho, alto:"
 
 #: ../src/widgets/toolbox.cpp:3658
+#, fuzzy
 msgid "(slight thinning, default)"
-msgstr ""
+msgstr "Establecer coma predeterminado"
 
 #: ../src/widgets/toolbox.cpp:3658
+#, fuzzy
 msgid "(speed deflates stroke)"
-msgstr ""
+msgstr "Establecer a cor do trazo"
 
 #: ../src/widgets/toolbox.cpp:3661
 #, fuzzy
 msgid "Stroke Thinning"
-msgstr "_Pintar o trazo"
+msgstr "Eliminar o trazo"
 
 #: ../src/widgets/toolbox.cpp:3661
 msgid "Thinning:"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3662
-msgid ""
-"How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 "
-"makes them broader, 0 makes width independent of velocity)"
+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:3674
+#, fuzzy
 msgid "(left edge up)"
-msgstr ""
+msgstr "Detección Óptima de Bordos"
 
 #: ../src/widgets/toolbox.cpp:3674
-#, fuzzy
 msgid "(horizontal)"
-msgstr "_Horizontal"
+msgstr "(horizontal)"
 
 #: ../src/widgets/toolbox.cpp:3674
+#, fuzzy
 msgid "(right edge up)"
-msgstr ""
+msgstr "Detección Óptima de Bordos"
 
 #: ../src/widgets/toolbox.cpp:3677
 #, fuzzy
 msgid "Pen Angle"
-msgstr "Ángulo"
+msgstr "Ángulo (graos):"
 
 #: ../src/widgets/toolbox.cpp:3677
 msgid "Angle:"
 msgstr "Ángulo:"
 
 #: ../src/widgets/toolbox.cpp:3678
-msgid ""
-"The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if "
-"fixation = 0)"
+msgid "The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if fixation = 0)"
 msgstr ""
 
 #. Fixation
 #: ../src/widgets/toolbox.cpp:3692
+#, fuzzy
 msgid "(perpendicular to stroke, \"brush\")"
-msgstr ""
+msgstr "Converte-lo trazo dos obxectos seleccionados en camiños"
 
 #: ../src/widgets/toolbox.cpp:3692
+#, fuzzy
 msgid "(almost fixed, default)"
-msgstr ""
+msgstr "Establecer coma predeterminado"
 
 #: ../src/widgets/toolbox.cpp:3692
+#, fuzzy
 msgid "(fixed by Angle, \"pen\")"
-msgstr ""
+msgstr "Estilo dos novos camiños creados ca Pluma"
 
 #: ../src/widgets/toolbox.cpp:3695
 #, fuzzy
@@ -17350,9 +16785,7 @@ msgid "Fixation:"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3696
-msgid ""
-"Angle behavior (0 = nib always perpendicular to stroke direction, 1 = fixed "
-"angle)"
+msgid "Angle behavior (0 = nib always perpendicular to stroke direction, 1 = fixed angle)"
 msgstr ""
 
 #. Cap Rounding
@@ -17366,8 +16799,9 @@ msgid "(slightly bulging)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3708
+#, fuzzy
 msgid "(approximately round)"
-msgstr ""
+msgstr "Xuntura redondeada"
 
 #: ../src/widgets/toolbox.cpp:3708
 msgid "(long protruding caps)"
@@ -17384,16 +16818,14 @@ msgid "Caps:"
 msgstr " Tapa ou punta.mirar o comentario para tradutores do lago"
 
 #: ../src/widgets/toolbox.cpp:3713
-msgid ""
-"Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = "
-"round caps)"
+msgid "Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = round caps)"
 msgstr ""
 
 #. Tremor
 #: ../src/widgets/toolbox.cpp:3725
 #, fuzzy
 msgid "(smooth line)"
-msgstr "suavizado"
+msgstr "Ancho da Liña"
 
 #: ../src/widgets/toolbox.cpp:3725
 msgid "(slight tremor)"
@@ -17404,13 +16836,14 @@ msgid "(noticeable tremor)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3725
+#, fuzzy
 msgid "(maximum tremor)"
-msgstr ""
+msgstr "Número máximo de documentos recentes:"
 
 #: ../src/widgets/toolbox.cpp:3728
 #, fuzzy
 msgid "Stroke Tremor"
-msgstr "Escolle-la cor de trazado"
+msgstr "Eliminar o trazo"
 
 #: ../src/widgets/toolbox.cpp:3728
 msgid "Tremor:"
@@ -17422,8 +16855,9 @@ msgstr ""
 
 #. Wiggle
 #: ../src/widgets/toolbox.cpp:3742
+#, fuzzy
 msgid "(no wiggle)"
-msgstr ""
+msgstr "Sen recheo"
 
 #: ../src/widgets/toolbox.cpp:3742
 #, fuzzy
@@ -17437,7 +16871,7 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:3745
 #, fuzzy
 msgid "Pen Wiggle"
-msgstr "Título:"
+msgstr "Preferencias da Pluma"
 
 #: ../src/widgets/toolbox.cpp:3745
 #, fuzzy
@@ -17450,24 +16884,28 @@ msgstr ""
 
 #. Mass
 #: ../src/widgets/toolbox.cpp:3758
+#, fuzzy
 msgid "(no inertia)"
-msgstr ""
+msgstr "Sen recheo"
 
 #: ../src/widgets/toolbox.cpp:3758
+#, fuzzy
 msgid "(slight smoothing, default)"
-msgstr ""
+msgstr "Establecer coma predeterminado"
 
 #: ../src/widgets/toolbox.cpp:3758
 msgid "(noticeable lagging)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3758
+#, fuzzy
 msgid "(maximum inertia)"
-msgstr ""
+msgstr "Número máximo de documentos recentes:"
 
 #: ../src/widgets/toolbox.cpp:3761
+#, fuzzy
 msgid "Pen Mass"
-msgstr ""
+msgstr "Preferencias da Pluma"
 
 #: ../src/widgets/toolbox.cpp:3761
 msgid "Mass:"
@@ -17480,12 +16918,10 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:3776
 #, fuzzy
 msgid "Trace Background"
-msgstr "Fondo"
+msgstr "Imaxe de Fondo"
 
 #: ../src/widgets/toolbox.cpp:3777
-msgid ""
-"Trace the lightness of the background by the width of the pen (white - "
-"minimum width, black - maximum width)"
+msgid "Trace the lightness of the background by the width of the pen (white - minimum width, black - maximum width)"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:3790
@@ -17504,12 +16940,12 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:3821
 #, fuzzy
 msgid "No preset"
-msgstr "Previsualización"
+msgstr "Sen recheo"
 
 #: ../src/widgets/toolbox.cpp:3836
 #, fuzzy
 msgid "Change calligraphic profile"
-msgstr "Debuxar liñas de caligrafía"
+msgstr "Cambiar a definición da cor"
 
 #: ../src/widgets/toolbox.cpp:3848
 #, fuzzy
@@ -17518,16 +16954,15 @@ msgstr "Garda-lo documento cun novo nome"
 
 #: ../src/widgets/toolbox.cpp:3933
 msgid "Arc: Change start/end"
-msgstr ""
+msgstr "Arco: cambiar comezo/fin"
 
 #: ../src/widgets/toolbox.cpp:4022
 msgid "Arc: Change open/closed"
-msgstr ""
+msgstr "Arco: cambiar aberto/pechado"
 
 #: ../src/widgets/toolbox.cpp:4146
-#, fuzzy
 msgid "Start"
-msgstr "Comezo:"
+msgstr "Comezo"
 
 #: ../src/widgets/toolbox.cpp:4146
 msgid "Start:"
@@ -17538,9 +16973,8 @@ msgid "The angle (in degrees) from the horizontal to the arc's start point"
 msgstr "O ángulo (en graos) dende a horizontal ó punto de comezo do arco"
 
 #: ../src/widgets/toolbox.cpp:4159
-#, fuzzy
 msgid "End"
-msgstr "Fin:"
+msgstr "Fin"
 
 #: ../src/widgets/toolbox.cpp:4159
 msgid "End:"
@@ -17551,24 +16985,21 @@ msgid "The angle (in degrees) from the horizontal to the arc's end point"
 msgstr "O ángulo (en graos) dende a horizontal ó punto de fin do arco"
 
 #: ../src/widgets/toolbox.cpp:4176
-#, fuzzy
 msgid "Closed arc"
-msgstr "Pecha-lo formulario"
+msgstr "Arco pechado"
 
 #: ../src/widgets/toolbox.cpp:4177
 #, fuzzy
 msgid "Switch to segment (closed shape with two radii)"
-msgstr ""
-"Cambiar entre arco (figura aberta) e sector (figura pechada con dous raios)"
+msgstr "Cambiar entre arco (figura aberta) e sector (figura pechada con dous raios)"
 
 #: ../src/widgets/toolbox.cpp:4183
-#, fuzzy
 msgid "Open Arc"
 msgstr "Arco aberto"
 
 #: ../src/widgets/toolbox.cpp:4184
 msgid "Switch to arc (unclosed shape)"
-msgstr ""
+msgstr "Cambiar a arco (figura aberta)"
 
 #: ../src/widgets/toolbox.cpp:4208
 msgid "Make whole"
@@ -17576,62 +17007,54 @@ msgstr "Completar"
 
 #: ../src/widgets/toolbox.cpp:4209
 msgid "Make the shape a whole ellipse, not arc or segment"
-msgstr ""
-"Facer que a figura sexa unha elipse completa, e non un arco ou un sector"
+msgstr "Facer que a figura sexa unha elipse completa, e non un arco ou un sector"
 
 #: ../src/widgets/toolbox.cpp:4275
-#, fuzzy
 msgid "Opacity:"
-msgstr "Opacidade"
+msgstr "Opacidade:"
 
 #: ../src/widgets/toolbox.cpp:4282
 #, fuzzy
 msgid "Pick opacity"
-msgstr "Opacidade"
+msgstr "Cambiar a opacidade"
 
 #: ../src/widgets/toolbox.cpp:4283
-msgid ""
-"Pick both the color and the alpha (transparency) under cursor; otherwise, "
-"pick only the visible color premultiplied by alpha"
+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:4286
 #, fuzzy
 msgid "Pick"
-msgstr "Camiños"
+msgstr "Elixa o matiz da cor"
 
 #: ../src/widgets/toolbox.cpp:4295
-#, fuzzy
 msgid "Assign opacity"
-msgstr "Opacidade principal"
+msgstr "Asignar a opacidade"
 
 #: ../src/widgets/toolbox.cpp:4296
-msgid ""
-"If alpha was picked, assign it to selection as fill or stroke transparency"
+msgid "If alpha was picked, assign it to selection as fill or stroke transparency"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:4299
-#, fuzzy
 msgid "Assign"
-msgstr "Aliñar"
+msgstr "Asignar"
 
 #: ../src/widgets/toolbox.cpp:4319
 msgid "The width of the eraser pen (relative to the visible canvas area)"
-msgstr ""
+msgstr "O ancho da goma (relativo á zona visible do lenzo)"
 
 #: ../src/widgets/toolbox.cpp:4336
 msgid "Delete objects touched by the eraser"
-msgstr ""
+msgstr "Eliminar os obxectos tocados pola goma"
 
 #: ../src/widgets/toolbox.cpp:4342
-#, fuzzy
 msgid "Cut"
-msgstr "Cor_tar"
+msgstr "Cortar"
 
 #: ../src/widgets/toolbox.cpp:4343
 #, fuzzy
 msgid "Cut out from objects"
-msgstr "Patrón a obxectos"
+msgstr "Borrar tódolos obxectos do documento"
 
 #: ../src/widgets/toolbox.cpp:4678
 #, fuzzy
@@ -17639,8 +17062,9 @@ msgid "Text: Change font family"
 msgstr "Configuración do escritorio"
 
 #: ../src/widgets/toolbox.cpp:4763
+#, fuzzy
 msgid "Text: Change alignment"
-msgstr ""
+msgstr "Duplicación, aliñación, distribución"
 
 #: ../src/widgets/toolbox.cpp:4846
 #, fuzzy
@@ -17650,7 +17074,7 @@ msgstr "Configuración do escritorio"
 #: ../src/widgets/toolbox.cpp:4893
 #, fuzzy
 msgid "Text: Change orientation"
-msgstr "Orientación da páxina:"
+msgstr "Cambiar a definición da cor"
 
 #: ../src/widgets/toolbox.cpp:4992
 #, fuzzy
@@ -17658,12 +17082,8 @@ msgid "Text: Change font size"
 msgstr "Configuración do escritorio"
 
 #: ../src/widgets/toolbox.cpp:5232
-msgid ""
-"This font is currently not installed on your system. Inkscape will use the "
-"default font instead."
-msgstr ""
-"Esta fonte non está instalada no sistema. Inkscape vai usar a fonte "
-"predeterminada en vez da outra."
+msgid "This font is currently not installed on your system. Inkscape will use the default font instead."
+msgstr "Esta fonte non está instalada no sistema. Inkscape vai usar a fonte predeterminada en vez da outra."
 
 #: ../src/widgets/toolbox.cpp:5271
 msgid "Align left"
@@ -17692,7 +17112,7 @@ msgstr "Itálica"
 #: ../src/widgets/toolbox.cpp:5465
 #, fuzzy
 msgid "Change connector spacing"
-msgstr "Crear conectadores"
+msgstr "Creando novo conectador"
 
 #: ../src/widgets/toolbox.cpp:5553
 msgid "Avoid"
@@ -17705,11 +17125,12 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:5575
 #, fuzzy
 msgid "Connector Spacing"
-msgstr "Crear conectadores"
+msgstr "Establecer espacio:"
 
 #: ../src/widgets/toolbox.cpp:5575
+#, fuzzy
 msgid "Spacing:"
-msgstr ""
+msgstr "Separación _X:"
 
 #: ../src/widgets/toolbox.cpp:5576
 msgid "The amount of space left around objects by auto-routing connectors"
@@ -17723,7 +17144,7 @@ msgstr "Agrupar"
 #: ../src/widgets/toolbox.cpp:5597
 #, fuzzy
 msgid "Connector Length"
-msgstr "Conectador"
+msgstr "Crear conectador"
 
 #: ../src/widgets/toolbox.cpp:5597
 msgid "Length:"
@@ -17748,94 +17169,80 @@ msgstr ""
 #: ../src/widgets/toolbox.cpp:5728
 #, fuzzy
 msgid "Fill by"
-msgstr "Recheo"
+msgstr "Desprazan:"
 
 #: ../src/widgets/toolbox.cpp:5729
 #, fuzzy
 msgid "Fill by:"
-msgstr "Recheo"
+msgstr "Desprazan:"
 
 #: ../src/widgets/toolbox.cpp:5741
 #, fuzzy
 msgid "Fill Threshold"
-msgstr "Limiar:"
+msgstr "Recheo non asignado"
 
 #: ../src/widgets/toolbox.cpp:5742
-msgid ""
-"The maximum allowed difference between the clicked pixel and the neighboring "
-"pixels to be counted in the fill"
+msgid "The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:5766
+#, fuzzy
 msgid "Grow/shrink by"
-msgstr ""
+msgstr "> e < escalan:"
 
 #: ../src/widgets/toolbox.cpp:5766
+#, fuzzy
 msgid "Grow/shrink by:"
-msgstr ""
+msgstr "> e < escalan:"
 
 #: ../src/widgets/toolbox.cpp:5767
-msgid ""
-"The amount to grow (positive) or shrink (negative) the created fill path"
+msgid "The amount to grow (positive) or shrink (negative) the created fill path"
 msgstr ""
 
 #: ../src/widgets/toolbox.cpp:5792
 #, fuzzy
 msgid "Close gaps"
-msgstr "Pecha-lo formulario"
+msgstr "Pechar o ficheiro"
 
 #: ../src/widgets/toolbox.cpp:5793
 #, fuzzy
 msgid "Close gaps:"
-msgstr "Pecha-lo formulario"
+msgstr "Pechar o ficheiro"
 
 #: ../src/widgets/toolbox.cpp:5805
 #, fuzzy
-msgid ""
-"Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
-"to change defaults)"
-msgstr ""
-"Restablecer os parámetros da figura ós predeterminados (use Preferencias de "
-"Inkscape > Ferramentas para cambia-los predeterminados)"
+msgid "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
+msgstr "Restablecer os parámetros da figura ós predeterminados (use Preferencias de Inkscape > Ferramentas para cambia-los predeterminados)"
 
 #: ../share/extensions/dimension.py:97
 msgid "Unable to process this object.  Try changing it into a path first."
-msgstr ""
+msgstr "Non foi posible procesar este obxecto. Tente convertelo primeiro nun camiño."
 
 #: ../share/extensions/embedimage.py:79
-msgid ""
-"No xlink:href or sodipodi:absref attributes found, or they do not point to "
-"an existing file! Unable to embed image."
+msgid "No xlink:href or sodipodi:absref attributes found, or they do not point to an existing file! Unable to embed image."
 msgstr ""
 
 #: ../share/extensions/embedimage.py:104
 #, python-format
-msgid ""
-"%s is not of type image/png, image/jpeg, image/bmp, image/gif, image/tiff, "
-"or image/x-icon"
-msgstr ""
+msgid "%s is not of type image/png, image/jpeg, image/bmp, image/gif, image/tiff, or image/x-icon"
+msgstr "%s non é de tipo image/png, image/jpeg, image/bmp, image/gif, image/tiff, ou image/x-icon"
 
 #: ../share/extensions/embedimage.py:106
 #, python-format
 msgid "Sorry we could not locate %s"
-msgstr ""
+msgstr "Non se puido localizar %s"
 
 #: ../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/."
+msgid "The export_gpl.py module requires PyXML.  Please download the latest version from http://pyxml.sourceforge.net/."
 msgstr ""
 
 #: ../share/extensions/extractimage.py:66
+#, fuzzy
 msgid "Difficulty finding the image data."
-msgstr ""
+msgstr "Vectorizar: A imaxe non ten datos de mapa de bits"
 
 #: ../share/extensions/inkex.py:61
-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"
+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 ""
 
 #: ../share/extensions/inkex.py:187
@@ -17857,9 +17264,8 @@ msgstr ""
 #: ../share/extensions/pathscatter.py:208
 #: ../share/extensions/perspective.py:55
 #: ../share/extensions/summersnight.py:30
-#, fuzzy
 msgid "This extension requires two selected paths."
-msgstr "Crear a unión dos camiños seleccionados"
+msgstr "Esta extensión require ter seleccionados dous camiños."
 
 #: ../share/extensions/pathmodifier.py:229
 #, python-format
@@ -17867,23 +17273,15 @@ msgid "Please first convert objects to paths!  (Got [%s].)"
 msgstr ""
 
 #: ../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."
+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 ""
 
 #: ../share/extensions/perspective.py:64
-msgid ""
-"This extension requires that the second selected path be four nodes long."
+msgid "This extension requires that the second selected path be four nodes long."
 msgstr ""
 
 #: ../share/extensions/polyhedron_3d.py:60
-msgid ""
-"Failed to import the numpy module. This module is 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."
+msgid "Failed to import the numpy module. This module is 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 ""
 
 #: ../share/extensions/summersnight.py:32
@@ -17891,9 +17289,9 @@ msgid "The second path must be exactly four nodes long."
 msgstr ""
 
 #: ../share/extensions/svg_and_media_zip_output.py:103
-#, fuzzy, python-format
+#, python-format
 msgid "Could not locate file: %s"
-msgstr "Non se puido exportar ó nome de ficheiro %s.\n"
+msgstr "Non se puido atopar o ficheiro: %s"
 
 #. vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99
 #: ../share/extensions/addnodes.inx.h:1
@@ -17905,9 +17303,8 @@ msgid "By max. segment length"
 msgstr ""
 
 #: ../share/extensions/addnodes.inx.h:3
-#, fuzzy
 msgid "By number of segments"
-msgstr "Número de Niveis"
+msgstr "Por número de segmentos"
 
 #: ../share/extensions/addnodes.inx.h:4
 #, fuzzy
@@ -17918,46 +17315,45 @@ msgstr "Di_visión"
 msgid "Maximum segment length (px)"
 msgstr ""
 
-#: ../share/extensions/addnodes.inx.h:6 ../share/extensions/edge3d.inx.h:6
-#: ../share/extensions/flatten.inx.h:3 ../share/extensions/fractalize.inx.h:2
+#: ../share/extensions/addnodes.inx.h:6
+#: ../share/extensions/edge3d.inx.h:6
+#: ../share/extensions/flatten.inx.h:3
+#: ../share/extensions/fractalize.inx.h:2
 #: ../share/extensions/markers_strokepaint.inx.h:2
 #: ../share/extensions/perspective.inx.h:1
 #: ../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 "Modificar Camiño"
 
 #: ../share/extensions/addnodes.inx.h:7
-#, fuzzy
 msgid "Number of segments"
-msgstr "Número de Niveis"
+msgstr "Número de segmentos"
 
 #: ../share/extensions/ai_input.inx.h:1
-#, fuzzy
 msgid "AI 8.0 Input"
-msgstr "Entrada de AI"
+msgstr "Entrada de AI 8.0"
 
 #: ../share/extensions/ai_input.inx.h:2
 #, fuzzy
 msgid "Adobe Illustrator 8.0 and below (*.ai)"
-msgstr "Adobe Illustrator (*.ai)"
+msgstr "Adobe Illustrator 8.0 e inferior (*.ai)"
 
 #: ../share/extensions/ai_input.inx.h:3
 #, fuzzy
 msgid "Open files saved with Adobe Illustrator 8.0 or older"
-msgstr "Abrir ficheiros gardados con Adobe Illustrator"
+msgstr "Abrir ficheiros gardados con Adobe Illustrator 8.0 ou anterior"
 
 #: ../share/extensions/ai_output.inx.h:1
-#, fuzzy
 msgid "AI 8.0 Output"
-msgstr "Saída de AI"
+msgstr "Saída de AI 8.0"
 
 #: ../share/extensions/ai_output.inx.h:2
-#, fuzzy
 msgid "Adobe Illustrator 8.0 (*.ai)"
-msgstr "Adobe Illustrator (*.ai)"
+msgstr "Adobe Illustrator 8.0 (*.ai)"
 
 #: ../share/extensions/ai_output.inx.h:3
 #, fuzzy
@@ -17990,11 +17386,11 @@ msgstr ""
 
 #: ../share/extensions/cdr_input.inx.h:1
 msgid "Corel DRAW 7-X4 files (*.cdr)"
-msgstr ""
+msgstr "Ficheiros de Corel DRAW 7-X4 (*.cdr)"
 
 #: ../share/extensions/cdr_input.inx.h:2
 msgid "Corel DRAW Input"
-msgstr ""
+msgstr "Entrada de Corel DRAW"
 
 #: ../share/extensions/cdr_input.inx.h:3
 #, fuzzy
@@ -18019,8 +17415,9 @@ msgid "Computer Graphics Metafile files (.cgm)"
 msgstr ""
 
 #: ../share/extensions/cgm_input.inx.h:2
+#, fuzzy
 msgid "Computer Graphics Metafile files input"
-msgstr ""
+msgstr "Entrada de ficheiros de imaxes vectoriais de sK1"
 
 #: ../share/extensions/cgm_input.inx.h:3
 msgid "Open Computer Graphics Metafile files"
@@ -18044,24 +17441,20 @@ msgid "Brighter"
 msgstr "Brillo"
 
 #: ../share/extensions/color_custom.inx.h:1
-#, fuzzy
 msgid "Blue Function"
-msgstr "Función"
+msgstr "Función do azul"
 
 #: ../share/extensions/color_custom.inx.h:4
-#, fuzzy
 msgid "Green Function"
-msgstr "Función"
+msgstr "Función do verde"
 
 #: ../share/extensions/color_custom.inx.h:5
-#, fuzzy
 msgid "Red Function"
-msgstr "Función"
+msgstr "Función do vermello"
 
 #: ../share/extensions/color_darker.inx.h:2
-#, fuzzy
 msgid "Darker"
-msgstr "Contagotas"
+msgstr "Escurecer"
 
 #: ../share/extensions/color_desaturate.inx.h:2
 #, fuzzy
@@ -18070,38 +17463,41 @@ msgstr "Distribuír"
 
 #: ../share/extensions/color_grayscale.inx.h:2
 msgid "Grayscale"
-msgstr ""
+msgstr "Escala de grises"
 
 #: ../share/extensions/color_lesshue.inx.h:2
+#, fuzzy
 msgid "Less Hue"
-msgstr ""
+msgstr "Menos Luz"
 
 #: ../share/extensions/color_lesslight.inx.h:2
+#, fuzzy
 msgid "Less Light"
-msgstr ""
+msgstr "Menos Luz"
 
 #: ../share/extensions/color_lesssaturation.inx.h:2
 #, fuzzy
 msgid "Less Saturation"
-msgstr "Saturación"
+msgstr "Menos Saturación"
 
 #: ../share/extensions/color_morehue.inx.h:2
 #, fuzzy
 msgid "More Hue"
-msgstr "Amosar _guías"
+msgstr "Máis Lux"
 
 #: ../share/extensions/color_morelight.inx.h:2
+#, fuzzy
 msgid "More Light"
-msgstr ""
+msgstr "Máis Lux"
 
 #: ../share/extensions/color_moresaturation.inx.h:2
-#, fuzzy
 msgid "More Saturation"
-msgstr "Saturación"
+msgstr "Máis saturación"
 
 #: ../share/extensions/color_negative.inx.h:2
+#, fuzzy
 msgid "Negative"
-msgstr ""
+msgstr "Negativo"
 
 #: ../share/extensions/color_randomize.inx.h:4
 #, fuzzy
@@ -18109,28 +17505,24 @@ msgid "Randomize"
 msgstr "Árbore Aleatoria"
 
 #: ../share/extensions/color_removeblue.inx.h:2
-#, fuzzy
 msgid "Remove Blue"
-msgstr "Eli_minar"
+msgstr "Eliminar o azul"
 
 #: ../share/extensions/color_removegreen.inx.h:2
-#, fuzzy
 msgid "Remove Green"
-msgstr "Eli_minar"
+msgstr "Eliminar o verde"
 
 #: ../share/extensions/color_removered.inx.h:2
-#, fuzzy
 msgid "Remove Red"
-msgstr "Eli_minar"
+msgstr "Eliminar o vermello"
 
 #: ../share/extensions/color_replace.inx.h:1
 msgid "By color (RRGGBB hex):"
 msgstr ""
 
 #: ../share/extensions/color_replace.inx.h:3
-#, fuzzy
 msgid "Replace color"
-msgstr "Última cor seleccionada"
+msgstr "Substituir unha cor"
 
 #: ../share/extensions/color_replace.inx.h:4
 msgid "Replace color (RRGGBB hex):"
@@ -18153,37 +17545,27 @@ msgid "Dia Input"
 msgstr "Entrada de Dia"
 
 #: ../share/extensions/dia.inx.h:4
-#, fuzzy
-msgid ""
-"In order to import Dia files, Dia itself must be installed.  You can get Dia "
-"at http://live.gnome.org/Dia"
-msgstr ""
-"Para poder importar ficheiros de Dia, Dia debe estar instalado.  Pode obter "
-"Dia en http://www.gnome.org/projects/dia/"
+msgid "In order to import Dia files, Dia itself must be installed.  You can get Dia at http://live.gnome.org/Dia"
+msgstr "Para poder importar ficheiros de Dia, Dia debe estar instalado.  Pode obter Dia en http://live.gnome.org/Dia"
 
 #: ../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 ""
-"O script dia2svg.sh debería terse instalado xunta con Inkscape.  Se non o "
-"ten, o máis probable é que haxa algo mal na instalación de Inkscape."
+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 "O script dia2svg.sh debería terse instalado xunta con Inkscape.  Se non o ten, o máis probable é que haxa algo mal na instalación de Inkscape."
 
-#: ../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 "Visualizar Camiño"
 
 #: ../share/extensions/dimension.inx.h:3
-#, fuzzy
 msgid "X Offset"
-msgstr "Desprazamento:"
+msgstr "Desprazamento X"
 
 #: ../share/extensions/dimension.inx.h:4
-#, fuzzy
 msgid "Y Offset"
-msgstr "Desprazamento:"
+msgstr "Desprazamento Y"
 
 #: ../share/extensions/dots.inx.h:1
 msgid "Dot size"
@@ -18211,20 +17593,18 @@ msgid "Import AutoCAD's Document Exchange Format"
 msgstr "Importar Document Exchange Format de AutoCAD"
 
 #: ../share/extensions/dxf_input.inx.h:4
-msgid ""
-"dxf2svg may come with Inkscape, but is also at http://dxf-svg-convert."
-"sourceforge.net/"
-msgstr ""
-"dxf2svg pode vir con Inkscape, pero tamén está en http://dxf-svg-convert."
-"sourceforge.net/"
+msgid "dxf2svg may come with Inkscape, but is also at http://dxf-svg-convert.sourceforge.net/"
+msgstr "dxf2svg pode vir con Inkscape, pero tamén está en http://dxf-svg-convert.sourceforge.net/"
 
 #: ../share/extensions/dxf_outlines.inx.h:1
+#, fuzzy
 msgid "Desktop Cutting Plotter"
-msgstr ""
+msgstr "Desktop Cutting Plotter"
 
 #: ../share/extensions/dxf_outlines.inx.h:2
+#, fuzzy
 msgid "Desktop Cutting Plotter (*.DXF)"
-msgstr ""
+msgstr "Desktop Cutting Plotter (*.DXF)"
 
 #: ../share/extensions/dxf_output.inx.h:2
 msgid "DXF Output"
@@ -18235,13 +17615,14 @@ msgid "DXF file written by pstoedit"
 msgstr "Ficheiro DXF escrito por pstoedit"
 
 #: ../share/extensions/dxf_output.inx.h:4
+#, fuzzy
 msgid "pstoedit must be installed to run; see http://www.pstoedit.net/pstoedit"
-msgstr ""
+msgstr "pstoedit debe estar instalado para executalo; consulte http://www.pstoedit.net/pstoedit"
 
 #: ../share/extensions/edge3d.inx.h:1
 #, fuzzy
 msgid "Blur height"
-msgstr "Alto:"
+msgstr "Ancho, alto:"
 
 #: ../share/extensions/edge3d.inx.h:2
 #, fuzzy
@@ -18251,20 +17632,22 @@ msgstr "Destino da impresión"
 #: ../share/extensions/edge3d.inx.h:3
 #, fuzzy
 msgid "Blur width"
-msgstr "Igual ancho"
+msgstr "Ancho, alto:"
 
 #: ../share/extensions/edge3d.inx.h:4
 #, fuzzy
 msgid "Edge 3D"
-msgstr "Desenfocar o Bordo"
+msgstr "Detección de bordos"
 
 #: ../share/extensions/edge3d.inx.h:5
+#, fuzzy
 msgid "Illumination Angle"
-msgstr ""
+msgstr "Ángulo de Iluminación"
 
 #: ../share/extensions/edge3d.inx.h:7
+#, fuzzy
 msgid "Only black and white"
-msgstr ""
+msgstr "Só branco e negro"
 
 #: ../share/extensions/edge3d.inx.h:8
 #, fuzzy
@@ -18272,12 +17655,14 @@ msgid "Shades"
 msgstr "Figuras"
 
 #: ../share/extensions/embedimage.inx.h:1
+#, fuzzy
 msgid "Embed All Images"
-msgstr ""
+msgstr "Buscar tódalas figuras"
 
 #: ../share/extensions/embedimage.inx.h:2
+#, fuzzy
 msgid "Embed only selected images"
-msgstr ""
+msgstr "Só se pode seleccionar un elemento"
 
 #: ../share/extensions/eps_input.inx.h:1
 msgid "EPS Input"
@@ -18296,33 +17681,36 @@ msgid "Encapsulated Postscript Interchange (*.epsi)"
 msgstr "Encapsulated Postscript Interchange (*.epsi)"
 
 #: ../share/extensions/epsi_output.inx.h:3
+#, fuzzy
 msgid "Encapsulated Postscript with a thumbnail"
-msgstr ""
+msgstr "Encapsulated Postscript Interchange (*.epsi)"
 
 #: ../share/extensions/eqtexsvg.inx.h:1
 msgid "LaTeX formula"
-msgstr ""
+msgstr "Formula LaTeX"
 
 #: ../share/extensions/eqtexsvg.inx.h:2
 msgid "LaTeX formula: "
-msgstr ""
+msgstr "Formula LaTeX:"
 
 #: ../share/extensions/export_gimp_palette.inx.h:1
+#, fuzzy
 msgid "Export as GIMP Palette"
-msgstr ""
+msgstr "Exportar coma Paleta de GIMP"
 
 #: ../share/extensions/export_gimp_palette.inx.h:2
+#, fuzzy
 msgid "Exports the colors of this document as GIMP Palette"
-msgstr ""
+msgstr "Exporta as cores deste documento coma unha Paleta de GIMP"
 
 #: ../share/extensions/export_gimp_palette.inx.h:3
-#, fuzzy
 msgid "GIMP Palette (*.gpl)"
-msgstr "Degradado de GIMP (*.ggr)"
+msgstr "Paleta de GIMP (*.gpl)"
 
 #: ../share/extensions/extractimage.inx.h:1
+#, fuzzy
 msgid "Extract One Image"
-msgstr ""
+msgstr "image/svg+xml"
 
 #: ../share/extensions/extractimage.inx.h:3
 msgid "Note: The file extension is appended automatically."
@@ -18337,9 +17725,8 @@ msgid "Open files saved with XFIG"
 msgstr "Abrir ficheiros gardados con XFIG"
 
 #: ../share/extensions/fig_input.inx.h:2
-#, fuzzy
 msgid "XFIG Graphics File (*.fig)"
-msgstr "Ficheiro de Gráficos de XFIG (*.fig)"
+msgstr "Ficheiro de imaxe de XFIG (*.fig)"
 
 #: ../share/extensions/fig_input.inx.h:3
 msgid "XFIG Input"
@@ -18374,20 +17761,19 @@ msgid "Calculate first derivative numerically"
 msgstr "Calcular a primeira derivada numéricamente"
 
 #: ../share/extensions/funcplot.inx.h:2
-#, fuzzy
 msgid "Draw Axes"
-msgstr "Debuxar texto"
+msgstr "Debuxar eixes"
 
 #: ../share/extensions/funcplot.inx.h:3
+#, fuzzy
 msgid "End X value"
-msgstr ""
+msgstr "Valor do atributo"
 
 #: ../share/extensions/funcplot.inx.h:4
 msgid "First derivative"
 msgstr "Primeira derivada"
 
 #: ../share/extensions/funcplot.inx.h:5
-#, fuzzy
 msgid "Function"
 msgstr "Función"
 
@@ -18396,9 +17782,8 @@ msgid "Function Plotter"
 msgstr "Representar Funcións"
 
 #: ../share/extensions/funcplot.inx.h:7
-#, fuzzy
 msgid "Functions"
-msgstr "Función"
+msgstr "Funcións"
 
 #: ../share/extensions/funcplot.inx.h:8
 msgid "Isotropic scaling (uses smallest of width/xrange or height/yrange)"
@@ -18409,8 +17794,9 @@ msgid "Multiply X range by 2*pi"
 msgstr ""
 
 #: ../share/extensions/funcplot.inx.h:10
+#, fuzzy
 msgid "Range and sampling"
-msgstr ""
+msgstr "R_echeo e Trazo"
 
 #: ../share/extensions/funcplot.inx.h:11
 #, fuzzy
@@ -18423,51 +17809,41 @@ msgid "Samples"
 msgstr "Figuras"
 
 #: ../share/extensions/funcplot.inx.h:14
-msgid ""
-"Select a rectangle before calling the extension, it will determine X and Y "
-"scales. With polar coordinates: Start and end X values define the angle "
-"range in radians. X scale is set so that left and right edges of rectangle "
-"are at +/-1. Isotropic scaling is disabled. First derivative is always "
-"determined numerically."
+msgid "Select a rectangle before calling the extension, it will determine X and Y scales. With polar coordinates: Start and end X values define the angle range in radians. X scale is set so that left and right edges of rectangle are at +/-1. Isotropic scaling is disabled. First derivative is always determined numerically."
 msgstr ""
 
 #: ../share/extensions/funcplot.inx.h:15
-msgid ""
-"Standard Python math functions are available: 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). The "
-"constants pi and e are also available."
+msgid "Standard Python math functions are available: 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). The constants pi and e are also available."
 msgstr ""
 
 #: ../share/extensions/funcplot.inx.h:16
-#, fuzzy
 msgid "Start X value"
-msgstr "Valor do atributo"
+msgstr "Valor X inicial"
 
 #: ../share/extensions/funcplot.inx.h:17
 #, fuzzy
 msgid "Use"
-msgstr "Non asignado"
+msgstr "En Uso"
 
 #: ../share/extensions/funcplot.inx.h:18
 #, fuzzy
 msgid "Use polar coordinates"
-msgstr "Coordenadas do cursor"
+msgstr "Permitir coordenadas relativas"
 
 #: ../share/extensions/funcplot.inx.h:19
 #, fuzzy
 msgid "Y value of rectangle's bottom"
-msgstr "Alto do rectángulo"
+msgstr "Baixar ó fondo"
 
 #: ../share/extensions/funcplot.inx.h:20
 #, fuzzy
 msgid "Y value of rectangle's top"
-msgstr "Alto do rectángulo"
+msgstr "Elevar á cima"
 
 #: ../share/extensions/gears.inx.h:1
+#, fuzzy
 msgid "Circular pitch, px"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/gears.inx.h:2
 #, fuzzy
@@ -18475,14 +17851,13 @@ msgid "Gear"
 msgstr "_Limpar"
 
 #: ../share/extensions/gears.inx.h:3
-#, fuzzy
 msgid "Number of teeth"
-msgstr "Número de Niveis"
+msgstr "Número de dentes"
 
 #: ../share/extensions/gears.inx.h:4
 #, fuzzy
 msgid "Pressure angle"
-msgstr "Conservar"
+msgstr "Ángulo (graos):"
 
 #: ../share/extensions/gimp_xcf.inx.h:1
 msgid "GIMP XCF"
@@ -18493,22 +17868,24 @@ msgid "GIMP XCF maintaining layers (*.XCF)"
 msgstr "XCF de GIMP conservando as capas (*.XCF)"
 
 #: ../share/extensions/gimp_xcf.inx.h:3
+#, fuzzy
 msgid "Save Grid:"
-msgstr ""
+msgstr "Reixa rectangular"
 
 #: ../share/extensions/gimp_xcf.inx.h:4
 #, fuzzy
 msgid "Save Guides:"
-msgstr "G_uías"
+msgstr "Amosar _guías"
 
 #: ../share/extensions/grid_cartesian.inx.h:1
+#, fuzzy
 msgid "Border Thickness / px"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/grid_cartesian.inx.h:2
 #, fuzzy
 msgid "Cartesian Grid"
-msgstr "Crear elipse"
+msgstr "Reixa rectangular"
 
 #: ../share/extensions/grid_cartesian.inx.h:3
 msgid "Halve X Subsubdiv. Frequency after 'n' Subdivs. (log only)"
@@ -18533,16 +17910,17 @@ msgstr ""
 #: ../share/extensions/grid_cartesian.inx.h:8
 #, fuzzy
 msgid "Major X Divisions"
-msgstr "Di_visión"
+msgstr "Cor das liñas principais da reixa"
 
 #: ../share/extensions/grid_cartesian.inx.h:9
+#, fuzzy
 msgid "Major X Divsion Spacing / px"
-msgstr ""
+msgstr "Espacio vertical entre as filas (unidades en píxels)"
 
 #: ../share/extensions/grid_cartesian.inx.h:10
 #, fuzzy
 msgid "Major Y Division Spacing"
-msgstr "Espacio Horizontal"
+msgstr "Cor das liñas principais da reixa"
 
 #: ../share/extensions/grid_cartesian.inx.h:11
 msgid "Major Y Division Thickness / px"
@@ -18551,7 +17929,7 @@ msgstr ""
 #: ../share/extensions/grid_cartesian.inx.h:12
 #, fuzzy
 msgid "Major Y Divisions"
-msgstr "Di_visión"
+msgstr "Cor das liñas principais da reixa"
 
 #: ../share/extensions/grid_cartesian.inx.h:13
 msgid "Minor X Division Thickness / px"
@@ -18578,17 +17956,19 @@ msgid "Subminor Y Division Thickness / px"
 msgstr ""
 
 #: ../share/extensions/grid_cartesian.inx.h:20
+#, fuzzy
 msgid "Subsubdivs. per X Subdiv."
-msgstr ""
+msgstr "<small>Por fila:</small>"
 
 #: ../share/extensions/grid_cartesian.inx.h:21
+#, fuzzy
 msgid "Subsubdivs. per Y Subdivision"
-msgstr ""
+msgstr "<small>Por fila:</small>"
 
 #: ../share/extensions/grid_polar.inx.h:1
 #, fuzzy
 msgid "Angle Divisions"
-msgstr "Di_visión"
+msgstr "Ángulo (graos):"
 
 #: ../share/extensions/grid_polar.inx.h:2
 msgid "Angle Divisions at Centre"
@@ -18623,8 +18003,9 @@ msgid "Major Circular Division Thickness / px"
 msgstr ""
 
 #: ../share/extensions/grid_polar.inx.h:11
+#, fuzzy
 msgid "Major Circular Divisions"
-msgstr ""
+msgstr "Cor das liñas principais da reixa"
 
 #: ../share/extensions/grid_polar.inx.h:12
 msgid "Major Circular Divsion Spacing / px"
@@ -18643,8 +18024,9 @@ msgid "Minor Circular Division Thickness / px"
 msgstr ""
 
 #: ../share/extensions/grid_polar.inx.h:17
+#, fuzzy
 msgid "Polar Grid"
-msgstr ""
+msgstr "Reixa rectangular"
 
 #: ../share/extensions/grid_polar.inx.h:19
 msgid "Subdivisions per Major Angular Division"
@@ -18655,8 +18037,9 @@ msgid "Subdivisions per Major Circular Division"
 msgstr ""
 
 #: ../share/extensions/handles.inx.h:1
+#, fuzzy
 msgid "Draw Handles"
-msgstr ""
+msgstr "Debuxar camiño"
 
 #: ../share/extensions/hpgl_output.inx.h:1
 msgid "Export to an HP Graphics Language file"
@@ -18668,47 +18051,45 @@ msgid "HP Graphics Language file (*.hpgl)"
 msgstr "Ficheiro de Gráficos de XFIG (*.fig)"
 
 #: ../share/extensions/hpgl_output.inx.h:3
-#, fuzzy
 msgid "HPGL Output"
-msgstr "Saída de SVG"
+msgstr "Saída HPGL"
 
 #: ../share/extensions/inkscape_help_askaquestion.inx.h:1
 msgid "Ask Us a Question"
-msgstr ""
+msgstr "Fáganos unha pregunta"
 
 #: ../share/extensions/inkscape_help_commandline.inx.h:1
 msgid "Command Line Options"
-msgstr ""
+msgstr "Opcións de liña de comandos"
 
 #: ../share/extensions/inkscape_help_faq.inx.h:1
 msgid "FAQ"
-msgstr ""
+msgstr "FAQ"
 
 #: ../share/extensions/inkscape_help_keys.inx.h:1
-#, fuzzy
 msgid "Keys and Mouse Reference"
-msgstr "Lista de atallos de teclado e de rato"
+msgstr "Referencia das teclas e do rato"
 
 #: ../share/extensions/inkscape_help_manual.inx.h:1
-#, fuzzy
 msgid "Inkscape Manual"
-msgstr "Inkscape: Vecto_rización"
+msgstr "Manual de Inkscape"
 
 #: ../share/extensions/inkscape_help_relnotes.inx.h:1
 msgid "New in This Version"
-msgstr ""
+msgstr "Que hai novo nesta versión"
 
 #: ../share/extensions/inkscape_help_reportabug.inx.h:1
 msgid "Report a Bug"
-msgstr ""
+msgstr "Comunicar un erro"
 
 #: ../share/extensions/inkscape_help_svgspec.inx.h:1
 msgid "SVG 1.1 Specification"
-msgstr ""
+msgstr "Especificación de SVG 1.1"
 
 #: ../share/extensions/interp.inx.h:1
+#, fuzzy
 msgid "Duplicate endpaths"
-msgstr ""
+msgstr "Duplicar o nodo"
 
 #: ../share/extensions/interp.inx.h:4
 msgid "Interpolate"
@@ -18717,7 +18098,7 @@ msgstr "Interpolar"
 #: ../share/extensions/interp.inx.h:5
 #, fuzzy
 msgid "Interpolate style"
-msgstr "Interpolar"
+msgstr "Pegar estilo"
 
 #: ../share/extensions/interp.inx.h:6
 msgid "Interpolation method"
@@ -18732,8 +18113,9 @@ msgid "Axiom"
 msgstr ""
 
 #: ../share/extensions/lindenmayer.inx.h:2
+#, fuzzy
 msgid "Axiom and rules"
-msgstr ""
+msgstr "R_echeo e Trazo"
 
 #: ../share/extensions/lindenmayer.inx.h:4
 msgid "L-system"
@@ -18744,9 +18126,9 @@ msgid "Left angle"
 msgstr "Ángulo esquerdo"
 
 #: ../share/extensions/lindenmayer.inx.h:8
-#, no-c-format
+#, fuzzy, no-c-format
 msgid "Randomize angle (%)"
-msgstr ""
+msgstr "Ángulo (graos):"
 
 #: ../share/extensions/lindenmayer.inx.h:10
 #, no-c-format
@@ -18762,40 +18144,34 @@ msgid "Rules"
 msgstr ""
 
 #: ../share/extensions/lindenmayer.inx.h:14
+#, fuzzy
 msgid "Step length (px)"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/lindenmayer.inx.h:15
-msgid ""
-"The path is generated by applying the substitutions of Rules to the Axiom, "
-"Order times. The following commands are recognized in Axiom and Rules: Any "
-"of A,B,C,D,E,F: draw forward Any of G,H,I,J,K,L: move forward +: turn left "
-"-: turn right |: turn 180 degrees [: remember poing ]: return to remembered "
-"point"
+msgid "The path is generated by applying the substitutions of Rules to the Axiom, Order times. The following commands are recognized in Axiom and Rules: Any of A,B,C,D,E,F: draw forward Any of G,H,I,J,K,L: move forward +: turn left -: turn right |: turn 180 degrees [: remember poing ]: return to remembered point"
 msgstr ""
 
 #: ../share/extensions/lorem_ipsum.inx.h:1
 msgid "Lorem ipsum"
-msgstr ""
+msgstr "Lorem ipsum"
 
 #: ../share/extensions/lorem_ipsum.inx.h:2
 #, fuzzy
 msgid "Number of paragraphs"
-msgstr "Número de filas"
+msgstr "Número de parágrafos"
 
 #: ../share/extensions/lorem_ipsum.inx.h:3
 msgid "Paragraph length fluctuation (sentences)"
 msgstr ""
 
 #: ../share/extensions/lorem_ipsum.inx.h:4
+#, fuzzy
 msgid "Sentences per paragraph"
-msgstr ""
+msgstr "<small>Por fila:</small>"
 
 #: ../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."
+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 ""
 
 #: ../share/extensions/markers_strokepaint.inx.h:1
@@ -18805,17 +18181,18 @@ msgstr ""
 #: ../share/extensions/measure.inx.h:1
 #, fuzzy
 msgid "Font size [px]"
-msgstr "Tamaño da fonte"
+msgstr "Tamaño da fonte [px]"
 
 #. <param name="unit" type="string" _gui-text="Unit {km|m|cm|mm|in|px|pt}">mm</param>
 #: ../share/extensions/measure.inx.h:4
+#, fuzzy
 msgid "Length Unit: "
-msgstr ""
+msgstr "Ancho en unidades de lonxitude"
 
 #: ../share/extensions/measure.inx.h:5
 #, fuzzy
 msgid "Measure"
-msgstr "Medir Camiño"
+msgstr "Medida"
 
 #: ../share/extensions/measure.inx.h:6
 msgid "Measure Path"
@@ -18824,25 +18201,18 @@ msgstr "Medir Camiño"
 #: ../share/extensions/measure.inx.h:7
 #, fuzzy
 msgid "Offset [px]"
-msgstr "Desprazamento:"
+msgstr "Desprazamento do patrón"
 
 #: ../share/extensions/measure.inx.h:8
-#, fuzzy
 msgid "Precision"
-msgstr "Descrición"
+msgstr "Precisión"
 
 #: ../share/extensions/measure.inx.h:9
 msgid "Scale Factor (Drawing:Real Length) = 1:"
 msgstr ""
 
 #: ../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."
+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 ""
 
 #: ../share/extensions/motion.inx.h:2
@@ -18865,17 +18235,17 @@ msgstr "Ficheiro de Texto (*.txt)"
 #: ../share/extensions/outline2svg.inx.h:3
 #, fuzzy
 msgid "Text Outline Input"
-msgstr "Entrada de Texto"
+msgstr "Entrada de SVG de AI"
 
 #: ../share/extensions/pathalongpath.inx.h:1
 #, fuzzy
 msgid "Copies of the pattern:"
-msgstr "Cor do bordo da páxina"
+msgstr "Copias do patrón:"
 
 #: ../share/extensions/pathalongpath.inx.h:2
 #, fuzzy
 msgid "Deformation type:"
-msgstr "Información"
+msgstr "Tipo de deformación:"
 
 #: ../share/extensions/pathalongpath.inx.h:3
 #: ../share/extensions/pathscatter.inx.h:3
@@ -18885,7 +18255,7 @@ msgstr ""
 #: ../share/extensions/pathalongpath.inx.h:6
 #, fuzzy
 msgid "Pattern along Path"
-msgstr "_Poñer no camiño"
+msgstr "O camiño está pechado."
 
 #: ../share/extensions/pathalongpath.inx.h:10
 msgid "Ribbon"
@@ -18898,14 +18268,12 @@ msgstr "Axustar"
 
 #: ../share/extensions/pathalongpath.inx.h:14
 #: ../share/extensions/pathscatter.inx.h:11
+#, fuzzy
 msgid "Space between copies:"
-msgstr ""
+msgstr "Espacion entre as copias do patrón"
 
 #: ../share/extensions/pathalongpath.inx.h:16
-msgid ""
-"This effect bends a pattern object along arbitrary \"skeleton\" paths. The "
-"pattern is the top most object in the selection. (groups of paths/shapes/"
-"clones... allowed)"
+msgid "This effect bends a pattern object along arbitrary \"skeleton\" paths. The pattern is the top most object in the selection. (groups of paths/shapes/clones... allowed)"
 msgstr ""
 
 #: ../share/extensions/pathscatter.inx.h:1
@@ -18916,12 +18284,12 @@ msgstr "Clons"
 #: ../share/extensions/pathscatter.inx.h:2
 #, fuzzy
 msgid "Copied"
-msgstr "Combinados"
+msgstr "Non se copiou nada."
 
 #: ../share/extensions/pathscatter.inx.h:4
 #, fuzzy
 msgid "Follow path orientation."
-msgstr "Orientación da páxina:"
+msgstr "O camiño está pechado."
 
 #: ../share/extensions/pathscatter.inx.h:6
 #, fuzzy
@@ -18931,7 +18299,7 @@ msgstr "Mover"
 #: ../share/extensions/pathscatter.inx.h:8
 #, fuzzy
 msgid "Original pattern will be:"
-msgstr "Desprazamento do patrón"
+msgstr "O patrón é vertical"
 
 #: ../share/extensions/pathscatter.inx.h:10
 #, fuzzy
@@ -18943,34 +18311,33 @@ msgid "Stretch spaces to fit skeleton length"
 msgstr ""
 
 #: ../share/extensions/pathscatter.inx.h:14
-msgid ""
-"This effect scatters a pattern along arbitrary \"skeleton\" paths. The "
-"pattern is the top most object in the selection. (groups of paths/shapes/"
-"clones... allowed)"
+msgid "This effect scatters a pattern along arbitrary \"skeleton\" paths. The pattern is the top most object in the selection. (groups of paths/shapes/clones... allowed)"
 msgstr ""
 
 # leo
 #: ../share/extensions/perfectboundcover.inx.h:1
 #, fuzzy
 msgid "Bleed (in)"
-msgstr "Xuntar biselado"
+msgstr " no grupo %s (%s)"
 
 #: ../share/extensions/perfectboundcover.inx.h:2
 msgid "Bond Weight #"
 msgstr ""
 
 #: ../share/extensions/perfectboundcover.inx.h:3
+#, fuzzy
 msgid "Book Height (inches)"
-msgstr ""
+msgstr "Pegar Alto por Separado"
 
 #: ../share/extensions/perfectboundcover.inx.h:4
 #, fuzzy
 msgid "Book Properties"
-msgstr "Propiedades do elemento"
+msgstr "Propiedades do Libro"
 
 #: ../share/extensions/perfectboundcover.inx.h:5
+#, fuzzy
 msgid "Book Width (inches)"
-msgstr ""
+msgstr "Escalar o ancho do trazado"
 
 #: ../share/extensions/perfectboundcover.inx.h:6
 msgid "Caliper (inches)"
@@ -18979,7 +18346,7 @@ msgstr ""
 #: ../share/extensions/perfectboundcover.inx.h:7
 #, fuzzy
 msgid "Cover"
-msgstr "Metro"
+msgstr "Cuberta"
 
 #: ../share/extensions/perfectboundcover.inx.h:8
 msgid "Cover Thickness Measurement"
@@ -18992,20 +18359,20 @@ msgstr ""
 #: ../share/extensions/perfectboundcover.inx.h:10
 #, fuzzy
 msgid "Interior Pages"
-msgstr "Interpolar"
+msgstr "Número de Páxinas"
 
 #: ../share/extensions/perfectboundcover.inx.h:11
 msgid "Note: Bond Weight # calculations are a best-guess estimate."
 msgstr ""
 
 #: ../share/extensions/perfectboundcover.inx.h:12
-#, fuzzy
 msgid "Number of Pages"
-msgstr "Número de Niveis"
+msgstr "Número de páxinas"
 
 #: ../share/extensions/perfectboundcover.inx.h:13
+#, fuzzy
 msgid "Pages Per Inch (PPI)"
-msgstr ""
+msgstr "Resolución (puntos por polgada)"
 
 #: ../share/extensions/perfectboundcover.inx.h:14
 msgid "Paper Thickness Measurement"
@@ -19018,17 +18385,15 @@ msgstr ""
 #: ../share/extensions/perfectboundcover.inx.h:17
 #, fuzzy
 msgid "Remove existing guides"
-msgstr "Crear rectángulo"
+msgstr "Eliminar as guías existentes"
 
 #: ../share/extensions/perfectboundcover.inx.h:18
-#, fuzzy
 msgid "Specify Width"
-msgstr "A_ncho da Páxina"
+msgstr "Especificar o ancho"
 
 #: ../share/extensions/perspective.inx.h:2
-#, fuzzy
 msgid "Perspective"
-msgstr "Presencia"
+msgstr "Perspectiva"
 
 #: ../share/extensions/polyhedron_3d.inx.h:1
 #, fuzzy
@@ -19038,11 +18403,11 @@ msgstr "Polígono"
 #: ../share/extensions/polyhedron_3d.inx.h:2
 #, fuzzy
 msgid "Clockwise Wound Object"
-msgstr "Ignorar os obxectos bloqueados"
+msgstr "Establecer o ID do obxecto"
 
 #: ../share/extensions/polyhedron_3d.inx.h:3
 msgid "Cube"
-msgstr ""
+msgstr "Cubo"
 
 #: ../share/extensions/polyhedron_3d.inx.h:4
 msgid "Cuboctohedron"
@@ -19050,15 +18415,16 @@ msgstr ""
 
 #: ../share/extensions/polyhedron_3d.inx.h:5
 msgid "Dodecahedron"
-msgstr ""
+msgstr "Dodecaedro"
 
 #: ../share/extensions/polyhedron_3d.inx.h:6
 msgid "Draw Back-Facing Polygons"
 msgstr ""
 
 #: ../share/extensions/polyhedron_3d.inx.h:7
+#, fuzzy
 msgid "Edge-Specified"
-msgstr ""
+msgstr "Detección de bordos"
 
 #: ../share/extensions/polyhedron_3d.inx.h:8
 #, fuzzy
@@ -19070,31 +18436,32 @@ msgid "Face-Specified"
 msgstr ""
 
 #: ../share/extensions/polyhedron_3d.inx.h:10
-#, fuzzy
 msgid "Faces"
-msgstr "Fonte"
+msgstr "Caras"
 
 #: ../share/extensions/polyhedron_3d.inx.h:11
-#, fuzzy
 msgid "Filename:"
-msgstr "Nome de _usuario:"
+msgstr "Nome de ficheiro:"
 
 #: ../share/extensions/polyhedron_3d.inx.h:12
+#, fuzzy
 msgid "Fill Colour (Blue)"
-msgstr ""
+msgstr "R_echeo e Trazo"
 
 #: ../share/extensions/polyhedron_3d.inx.h:13
+#, fuzzy
 msgid "Fill Colour (Green)"
-msgstr ""
+msgstr "R_echeo e Trazo"
 
 #: ../share/extensions/polyhedron_3d.inx.h:14
+#, fuzzy
 msgid "Fill Colour (Red)"
-msgstr ""
+msgstr "R_echeo e Trazo"
 
 #: ../share/extensions/polyhedron_3d.inx.h:16
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "Fill Opacity/ %"
-msgstr "Opacidade:"
+msgstr "Opacidade do recheo/ %"
 
 #: ../share/extensions/polyhedron_3d.inx.h:17
 msgid "Great Dodecahedron"
@@ -19106,30 +18473,32 @@ msgstr ""
 
 #: ../share/extensions/polyhedron_3d.inx.h:19
 msgid "Icosahedron"
-msgstr ""
+msgstr "Icosaedro"
 
 #: ../share/extensions/polyhedron_3d.inx.h:20
 #, fuzzy
 msgid "Light x-Position"
-msgstr "Posición:"
+msgstr "Menos Luz"
 
 #: ../share/extensions/polyhedron_3d.inx.h:21
 #, fuzzy
 msgid "Light y-Position"
-msgstr "Posición:"
+msgstr "Menos Luz"
 
 #: ../share/extensions/polyhedron_3d.inx.h:22
 #, fuzzy
 msgid "Light z-Position"
-msgstr "Posición:"
+msgstr "Menos Luz"
 
 #: ../share/extensions/polyhedron_3d.inx.h:23
+#, fuzzy
 msgid "Line Thickness / px"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/polyhedron_3d.inx.h:24
+#, fuzzy
 msgid "Load From File"
-msgstr ""
+msgstr "Erro ó cargar o ficheiro solicitado %s"
 
 #: ../share/extensions/polyhedron_3d.inx.h:25
 #, fuzzy
@@ -19148,17 +18517,15 @@ msgstr "Tamaño mínimo"
 #: ../share/extensions/polyhedron_3d.inx.h:28
 #, fuzzy
 msgid "Model File"
-msgstr "Tódolos tipos"
+msgstr "Ficheiro PDF"
 
 #: ../share/extensions/polyhedron_3d.inx.h:29
-#, fuzzy
 msgid "Object Type"
-msgstr "Obxecto"
+msgstr "Tipo de obxecto"
 
 #: ../share/extensions/polyhedron_3d.inx.h:30
-#, fuzzy
 msgid "Object:"
-msgstr "Obxecto"
+msgstr "Obxecto:"
 
 #: ../share/extensions/polyhedron_3d.inx.h:31
 #, fuzzy
@@ -19173,17 +18540,16 @@ msgstr "Información do uso da memoria"
 #: ../share/extensions/polyhedron_3d.inx.h:34
 #, fuzzy
 msgid "Rotate Around:"
-msgstr "Non redondeado"
+msgstr "Rotar os nodos"
 
 #: ../share/extensions/polyhedron_3d.inx.h:35
-#, fuzzy
 msgid "Rotation / Degrees"
-msgstr "_Rotación"
+msgstr "Rotación / Graos"
 
 #: ../share/extensions/polyhedron_3d.inx.h:36
 #, fuzzy
 msgid "Scaling Factor"
-msgstr "Cor uniforme"
+msgstr "Mover, escalar, rotar"
 
 #: ../share/extensions/polyhedron_3d.inx.h:37
 #, fuzzy
@@ -19191,8 +18557,9 @@ msgid "Shading"
 msgstr "Separación _X:"
 
 #: ../share/extensions/polyhedron_3d.inx.h:39
+#, fuzzy
 msgid "Small Triambic Icosahedron"
-msgstr ""
+msgstr "<small>Non hai nada seleccionado.</small>"
 
 #: ../share/extensions/polyhedron_3d.inx.h:40
 msgid "Snub Cube"
@@ -19203,18 +18570,18 @@ msgid "Snub Dodecahedron"
 msgstr ""
 
 #: ../share/extensions/polyhedron_3d.inx.h:43
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "Stroke Opacity/ %"
-msgstr "_Pintar o trazo"
+msgstr "Opacidade do trazo/ %"
 
 #: ../share/extensions/polyhedron_3d.inx.h:45
 msgid "Tetrahedron"
-msgstr ""
+msgstr "Tetraedro"
 
 #: ../share/extensions/polyhedron_3d.inx.h:46
 #, fuzzy
 msgid "Then Rotate Around:"
-msgstr "Non redondeado"
+msgstr "Rotar 9_0º en sentido antihorario"
 
 #: ../share/extensions/polyhedron_3d.inx.h:47
 msgid "Truncated Cube"
@@ -19237,9 +18604,8 @@ msgid "Truncated Tetrahedron"
 msgstr ""
 
 #: ../share/extensions/polyhedron_3d.inx.h:52
-#, fuzzy
 msgid "Vertices"
-msgstr "_Vertical"
+msgstr "Vértices"
 
 #: ../share/extensions/polyhedron_3d.inx.h:53
 #, fuzzy
@@ -19247,20 +18613,24 @@ msgid "View"
 msgstr "_Ver"
 
 #: ../share/extensions/polyhedron_3d.inx.h:54
+#, fuzzy
 msgid "X-Axis"
-msgstr ""
+msgstr "Ángulo do eixe x"
 
 #: ../share/extensions/polyhedron_3d.inx.h:55
+#, fuzzy
 msgid "Y-Axis"
-msgstr ""
+msgstr "Ángulo do eixe x"
 
 #: ../share/extensions/polyhedron_3d.inx.h:56
+#, fuzzy
 msgid "Z-Axis"
-msgstr ""
+msgstr "Ángulo do eixe x"
 
 #: ../share/extensions/polyhedron_3d.inx.h:57
+#, fuzzy
 msgid "Z-Sort Faces By:"
-msgstr ""
+msgstr "> e < escalan:"
 
 #: ../share/extensions/ps_input.inx.h:1
 msgid "Postscript"
@@ -19277,7 +18647,7 @@ msgstr "Entrada de Postscript"
 #: ../share/extensions/radiusrand.inx.h:1
 #, fuzzy
 msgid "Jitter nodes"
-msgstr "Subir o nodo"
+msgstr "Mover os nodos"
 
 #: ../share/extensions/radiusrand.inx.h:2
 #, fuzzy
@@ -19290,18 +18660,17 @@ msgid "Maximum displacement in Y, px"
 msgstr "Novo nodo"
 
 #: ../share/extensions/radiusrand.inx.h:5
+#, fuzzy
 msgid "Shift node handles"
-msgstr ""
+msgstr "Novo nodo"
 
 #: ../share/extensions/radiusrand.inx.h:6
 #, fuzzy
 msgid "Shift nodes"
-msgstr "Engadir nodos"
+msgstr "Mover os nodos"
 
 #: ../share/extensions/radiusrand.inx.h:7
-msgid ""
-"This effect randomly shifts the nodes (and optionally node handles) of the "
-"selected path."
+msgid "This effect randomly shifts the nodes (and optionally node handles) of the selected path."
 msgstr ""
 
 #: ../share/extensions/radiusrand.inx.h:8
@@ -19310,7 +18679,7 @@ msgstr "Usar distribución normal"
 
 #: ../share/extensions/render_alphabetsoup.inx.h:1
 msgid "Alphabet Soup"
-msgstr ""
+msgstr "Sopa de letras"
 
 #: ../share/extensions/render_alphabetsoup.inx.h:2
 #, fuzzy
@@ -19320,34 +18689,36 @@ msgstr "Árbore Aleatoria"
 #: ../share/extensions/render_barcode.inx.h:1
 #, fuzzy
 msgid "Bar Height:"
-msgstr "Alto:"
+msgstr "Altura de Barra::"
 
 #: ../share/extensions/render_barcode.inx.h:2
 msgid "Barcode"
-msgstr ""
+msgstr "Código de barras"
 
 #: ../share/extensions/render_barcode.inx.h:3
+#, fuzzy
 msgid "Barcode Data:"
-msgstr ""
+msgstr "Tipo de Código de Barras:"
 
 #: ../share/extensions/render_barcode.inx.h:4
 #, fuzzy
 msgid "Barcode Type:"
-msgstr "_Unidades da reixa:"
+msgstr "Tipo de Código de Barras:"
 
 #: ../share/extensions/restack.inx.h:2
 #, fuzzy
 msgid "Arbitrary Angle:"
-msgstr "Ángulo"
+msgstr "Ángulo (graos):"
 
 #: ../share/extensions/restack.inx.h:4
 #, fuzzy
 msgid "Bottom"
-msgstr "Zoom"
+msgstr "Baixar ó fondo"
 
 #: ../share/extensions/restack.inx.h:5
+#, fuzzy
 msgid "Bottom to Top (90)"
-msgstr ""
+msgstr "Eleva-la selección á cima"
 
 #: ../share/extensions/restack.inx.h:6
 #, fuzzy
@@ -19355,12 +18726,14 @@ msgid "Horizontal Point:"
 msgstr "Texto horizontal"
 
 #: ../share/extensions/restack.inx.h:7
+#, fuzzy
 msgid "Left"
-msgstr ""
+msgstr "Aliñar á esqueda"
 
 #: ../share/extensions/restack.inx.h:8
+#, fuzzy
 msgid "Left to Right (0)"
-msgstr ""
+msgstr "Aliñar as liñas á dereita"
 
 #: ../share/extensions/restack.inx.h:9
 #, fuzzy
@@ -19390,7 +18763,7 @@ msgstr "Descrición"
 #: ../share/extensions/restack.inx.h:14
 #, fuzzy
 msgid "Right"
-msgstr "Dereitos"
+msgstr "Aliñar á dereita"
 
 #: ../share/extensions/restack.inx.h:15
 msgid "Right to Left (180)"
@@ -19399,7 +18772,7 @@ msgstr ""
 #: ../share/extensions/restack.inx.h:17
 #, fuzzy
 msgid "Top to Bottom (270)"
-msgstr "Baixar ó _Fondo"
+msgstr "Baixa-la selección ó fondo"
 
 #: ../share/extensions/restack.inx.h:18
 #, fuzzy
@@ -19434,19 +18807,17 @@ msgstr "Número de Niveis"
 msgid "Strength (%):"
 msgstr ""
 
-# Rosetta
 #: ../share/extensions/sk1_input.inx.h:1
-#, fuzzy
 msgid "Open files saved in sK1 vector graphics editor"
-msgstr "Ilustrador Vectorial Inkscape"
+msgstr "Abrir ficheiros gardados co editor de imaxes vectoriais sK1"
 
 #: ../share/extensions/sk1_input.inx.h:2
 msgid "sK1 vector graphics files (.sk1)"
-msgstr ""
+msgstr "Ficheiros de imaxes vectoriais de sK1 (.sk1)"
 
 #: ../share/extensions/sk1_input.inx.h:3
 msgid "sK1 vector graphics files input"
-msgstr ""
+msgstr "Entrada de ficheiros de imaxes vectoriais de sK1"
 
 #: ../share/extensions/sk_input.inx.h:1
 msgid "A diagram created with the program Sketch"
@@ -19473,17 +18844,18 @@ msgid "Outside (Epitrochoid)"
 msgstr ""
 
 #: ../share/extensions/spirograph.inx.h:4
+#, fuzzy
 msgid "Quality (Default = 16)"
-msgstr ""
+msgstr "Establecer coma predeterminado"
 
 #: ../share/extensions/spirograph.inx.h:5
+#, fuzzy
 msgid "R - Ring Radius (px)"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/spirograph.inx.h:7
-#, fuzzy
 msgid "Rotation (deg)"
-msgstr "_Rotación"
+msgstr "Rotación (graos)"
 
 #: ../share/extensions/spirograph.inx.h:8
 #, fuzzy
@@ -19491,46 +18863,48 @@ msgid "Spirograph"
 msgstr "Espiral"
 
 #: ../share/extensions/spirograph.inx.h:9
+#, fuzzy
 msgid "d - Pen Radius (px)"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/spirograph.inx.h:10
+#, fuzzy
 msgid "r - Gear Radius (px)"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/straightseg.inx.h:1
 msgid "Behavior"
 msgstr ""
 
 #: ../share/extensions/straightseg.inx.h:4
+#, fuzzy
 msgid "Straighten Segments"
-msgstr ""
+msgstr "Número de segmentos"
 
 #: ../share/extensions/summersnight.inx.h:1
 msgid "Envelope"
 msgstr ""
 
-#: ../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 ""
+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 ""
 
 #: ../share/extensions/svg2xaml.inx.h:3
-#, fuzzy
 msgid "XAML Output"
-msgstr "Saída de DXF"
+msgstr "Saída de XAML"
 
 #: ../share/extensions/svg_and_media_zip_output.inx.h:1
 msgid "Compressed Inkscape SVG with media (*.zip)"
 msgstr ""
 
 #: ../share/extensions/svg_and_media_zip_output.inx.h:2
-msgid ""
-"Inkscape's native file format compressed with Zip and including all media "
-"files"
+msgid "Inkscape's native file format compressed with Zip and including all media files"
 msgstr ""
 
 #: ../share/extensions/svg_and_media_zip_output.inx.h:3
@@ -19538,13 +18912,13 @@ msgid "ZIP Output"
 msgstr "Saída de ZIP"
 
 #: ../share/extensions/text_braille.inx.h:1
-#, fuzzy
 msgid "Convert to Braille"
-msgstr "_Converter a Texto"
+msgstr "Converter a Braille"
 
 #: ../share/extensions/text_flipcase.inx.h:2
+#, fuzzy
 msgid "fLIP cASE"
-msgstr ""
+msgstr "Inverter os nodos"
 
 #: ../share/extensions/text_lowercase.inx.h:2
 #, fuzzy
@@ -19552,23 +18926,22 @@ msgid "lowercase"
 msgstr "Baixar a Capa"
 
 #: ../share/extensions/text_randomcase.inx.h:2
+#, fuzzy
 msgid "rANdOm CasE"
-msgstr ""
+msgstr "Árbore Aleatoria"
 
 #: ../share/extensions/text_replace.inx.h:1
 #, fuzzy
 msgid "By:"
-msgstr "Ry:"
+msgstr "Desprazan:"
 
 #: ../share/extensions/text_replace.inx.h:2
-#, fuzzy
 msgid "Replace text"
-msgstr "Crear"
+msgstr "Substituír texto"
 
 #: ../share/extensions/text_replace.inx.h:3
-#, fuzzy
 msgid "Replace:"
-msgstr "Repetir:"
+msgstr "Substituír:"
 
 #: ../share/extensions/text_sentencecase.inx.h:1
 msgid "Sentence case"
@@ -19577,26 +18950,26 @@ msgstr ""
 #: ../share/extensions/text_titlecase.inx.h:2
 #, fuzzy
 msgid "Title Case"
-msgstr "Título"
+msgstr "Establecer o título do obxecto"
 
 #: ../share/extensions/text_uppercase.inx.h:2
 msgid "UPPERCASE"
-msgstr ""
+msgstr "MAIÚSCULAS"
 
 #: ../share/extensions/triangle.inx.h:1
 #, fuzzy
 msgid "Angle a / deg"
-msgstr "graos"
+msgstr "Rotación (graos)"
 
 #: ../share/extensions/triangle.inx.h:2
 #, fuzzy
 msgid "Angle b / deg"
-msgstr "graos"
+msgstr "Rotación (graos)"
 
 #: ../share/extensions/triangle.inx.h:3
 #, fuzzy
 msgid "Angle c / deg"
-msgstr "graos"
+msgstr "Rotación (graos)"
 
 #: ../share/extensions/triangle.inx.h:4
 msgid "From Side a and Angles a, b"
@@ -19615,25 +18988,28 @@ msgid "From Sides a, b and Angle c"
 msgstr ""
 
 #: ../share/extensions/triangle.inx.h:8
+#, fuzzy
 msgid "From Three Sides"
-msgstr ""
+msgstr "Aliñar os lados esquerdos"
 
 #: ../share/extensions/triangle.inx.h:11
+#, fuzzy
 msgid "Side Length a / px"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/triangle.inx.h:12
+#, fuzzy
 msgid "Side Length b / px"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/triangle.inx.h:13
+#, fuzzy
 msgid "Side Length c / px"
-msgstr ""
+msgstr "Tamaño da fonte [px]"
 
 #: ../share/extensions/triangle.inx.h:14
-#, fuzzy
 msgid "Triangle"
-msgstr "Ángulo"
+msgstr "Triángulo"
 
 #: ../share/extensions/txt2svg.inx.h:1
 msgid "ASCII Text"
@@ -19663,7 +19039,7 @@ msgstr "Xirar"
 #: ../share/extensions/wmf_input.inx.h:1
 #, fuzzy
 msgid "A popular graphics file format for clipart"
-msgstr "Un formato de gráficos popular para clipart"
+msgstr "Un formato popular de gráficos para clipart"
 
 #: ../share/extensions/wmf_input.inx.h:2
 msgid "Windows Metafile (*.wmf)"
@@ -19674,9 +19050,8 @@ msgid "Windows Metafile Input"
 msgstr "Entrada de Windows Metafile"
 
 #: ../share/extensions/xaml2svg.inx.h:3
-#, fuzzy
 msgid "XAML Input"
-msgstr "Entrada de DXF"
+msgstr "Entrada de XAML"
 
 # Rosetta
 #, fuzzy
@@ -19693,11 +19068,9 @@ msgstr "Entrada de DXF"
 #, fuzzy
 #~ msgid "Space between copies of the pattern"
 #~ msgstr "Cor do bordo da páxina"
-
 #~ msgid "At least one of the objects is <b>not a path</b>, cannot combine."
 #~ msgstr ""
 #~ "Alomenos un dos obxectos <b>non é un camiño</b>, non se pode combinalos."
-
 #~ msgid ""
 #~ "You cannot combine objects from <b>different groups</b> or <b>layers</b>."
 #~ msgstr ""
@@ -19758,7 +19131,6 @@ msgstr "Entrada de DXF"
 #, fuzzy
 #~ msgid "Select second option: "
 #~ msgstr "Seleccione o ficheiro que desexa abrir"
-
 #~ msgid "medium"
 #~ msgstr "mediana"
 
@@ -19793,7 +19165,6 @@ msgstr "Entrada de DXF"
 #, fuzzy
 #~ msgid "Pin Dialog"
 #~ msgstr "Formulario de aliñacións"
-
 #~ msgid "Gri_d Arrange..."
 #~ msgstr "Or_denar nunha Reixa..."
 
@@ -19920,13 +19291,10 @@ msgstr "Entrada de DXF"
 #, fuzzy
 #~ msgid "Angle Y"
 #~ msgstr "Ángulo:"
-
 #~ msgid "%s at %s"
 #~ msgstr "%s en %s"
-
 #~ msgid "Move to:"
 #~ msgstr "Mover a:"
-
 #~ msgid "Moving %s %s"
 #~ msgstr "Movendo a %s %s"
 
@@ -19968,7 +19336,6 @@ msgstr "Entrada de DXF"
 #, fuzzy
 #~ msgid "Display Calibration"
 #~ msgstr "Configuración da visualización"
-
 #~ msgid "Print _Direct"
 #~ msgstr "Imprimir _Directamente"
 
@@ -19980,3 +19347,4 @@ msgstr "Entrada de DXF"
 #, fuzzy
 #~ msgid "Vertical kerning"
 #~ msgstr "Valor de centrado vertical"
+
index a593d3e75897fbea56dded8f828525415c7e133d..681bdc70948bc10657cdb390f1a9915b711b37d6 100644 (file)
--- a/po/he.po
+++ b/po/he.po
@@ -7,15 +7,19 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inkscape\n"
 "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2008-06-12 21:31+0100\n"
-"PO-Revision-Date: 2007-11-30 02:28+0200\n"
-"Last-Translator: Leon Mintz <leon.mintz@gmail.com>\n"
-"Language-Team: Hebrew <he@li.org>\n"
+"POT-Creation-Date: 2008-10-29 21:35+0200\n"
+"PO-Revision-Date: 2008-11-01 13:08+0200\n"
+"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
+"Language-Team: Yaron <sh.yaron@gmail.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2008-03-18 01:36+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+"X-Poedit-Language: Hebrew\n"
+"X-Poedit-Country: ISRAEL\n"
+"X-Poedit-SourceCharset: utf-8\n"
 
 #: ../inkscape.desktop.in.h:1
 msgid "Create and edit Scalable Vector Graphics images"
@@ -25,198 +29,194 @@ msgstr "צור וערוך איורי גרפיקה וקטורית"
 msgid "Inkscape Vector Graphics Editor"
 msgstr "אינקסקייפ עורך גרפיקה וקטורית"
 
-#: ../src/arc-context.cpp:338
-msgid ""
-"<b>Ctrl</b>: make circle or integer-ratio ellipse, snap arc/segment angle"
-msgstr "<b>Ctrl</b>: צור מעגל או אליפסה קבועת-פסיעה, הצמד זווית קשת/קטע"
+#: ../src/arc-context.cpp:341
+msgid "<b>Ctrl</b>: make circle or integer-ratio ellipse, snap arc/segment angle"
+msgstr "<b>Ctrl</b>: צור מעגל או אליפסה קבועת־פסיעה, הצמד זווית קשת/קטע"
 
-#: ../src/arc-context.cpp:339 ../src/rect-context.cpp:383
+#: ../src/arc-context.cpp:342
+#: ../src/rect-context.cpp:383
 msgid "<b>Shift</b>: draw around the starting point"
 msgstr "<b>Shift</b>: צייר מסביב לנקודת ההתחלה"
 
-#: ../src/arc-context.cpp:485
+#: ../src/arc-context.cpp:488
 #, 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>אליפסה</b>: %s &#215; %s (מוגבלת ליחס %d:%d); לחצו <b>Shift</b> על "
-"מנתלצייר מסביב לנקודת ההתחלה"
+msgid "<b>Ellipse</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</b> to draw around the starting point"
+msgstr "<b>אליפסה</b>: %s &#215; %s (מוגבלת ליחס %d:%d); לחצו <b>Shift</b> על מנת לצייר מסביב לנקודת ההתחלה"
 
-#: ../src/arc-context.cpp:487
+#: ../src/arc-context.cpp:490
 #, 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 ""
+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>אליפסה</b>: %s &#215; %s; לחצו על  <b>Ctrl</b> ריבוע או מעגל בעל רדיוס אחיד; לחצו על <b>Shift</b> על מנת לצייר מסביב לנקודת ההתחלה"
 
-#: ../src/arc-context.cpp:506
+#: ../src/arc-context.cpp:509
 msgid "Create ellipse"
 msgstr "צור אליפסה"
 
-#: ../src/box3d-context.cpp:448 ../src/box3d-context.cpp:455
-#: ../src/box3d-context.cpp:462 ../src/box3d-context.cpp:469
-#: ../src/box3d-context.cpp:476 ../src/box3d-context.cpp:483
+#: ../src/box3d-context.cpp:451
+#: ../src/box3d-context.cpp:458
+#: ../src/box3d-context.cpp:465
+#: ../src/box3d-context.cpp:472
+#: ../src/box3d-context.cpp:479
+#: ../src/box3d-context.cpp:486
 msgid "Change perspective (angle of PLs)"
-msgstr ""
+msgstr "שנה פרספקטיבה (זווית קווי הפרספקטיבה)"
 
 #. status text
-#: ../src/box3d-context.cpp:638
+#: ../src/box3d-context.cpp:641
 msgid "<b>3D Box</b>; with <b>Shift</b> to extrude along the Z axis"
-msgstr ""
+msgstr "<b>תיבה תלת מימדית</b>; לחיצה על <b>Shift</b> כדי להרחיק לאורך ציר ה־Z"
 
-#: ../src/box3d-context.cpp:662
-#, fuzzy
+#: ../src/box3d-context.cpp:665
 msgid "Create 3D box"
-msgstr "צ×\95ר ×\9e×\97×\91ר ×\97×\93ש"
+msgstr "צ×\95ר ×ª×\99×\91×\94 ×ª×\9cת ×\9e×\99×\9e×\93×\99ת"
 
-#: ../src/box3d.cpp:315
-#, fuzzy
+#: ../src/box3d.cpp:316
 msgid "<b>3D Box</b>"
-msgstr "<b>×\90×\9c×\99פס×\94</b>"
+msgstr "<b>ת×\99×\91×\94 ×ª×\9cת־×\9e×\99×\9e×\93×\99ת</b>"
 
-#: ../src/connector-context.cpp:522
+#: ../src/connector-context.cpp:520
 msgid "Creating new connector"
 msgstr "צור מחבר חדש"
 
-#: ../src/connector-context.cpp:751
-#, fuzzy
+#: ../src/connector-context.cpp:752
 msgid "Connector endpoint drag cancelled."
-msgstr "×\91×\95×\98×\9c×\94 ×\92ר×\99רת × ×§×\95×\93ת ×§×¦×\94 ×©×\9c ×\9e×\97×\91ר"
+msgstr "×\91×\95×\98×\9c×\94 ×\92ר×\99רת × ×§×\95×\93ת ×\94קצ×\94 ×©×\9c ×\94×\9e×\97×\91ר."
 
-#: ../src/connector-context.cpp:799
+#: ../src/connector-context.cpp:800
 msgid "Reroute connector"
-msgstr ""
+msgstr "נתב את המחבר מחדש"
 
 #. Flush pending updates
-#: ../src/connector-context.cpp:963
+#: ../src/connector-context.cpp:964
 msgid "Create connector"
 msgstr "צור מחבר"
 
-#: ../src/connector-context.cpp:987
+#: ../src/connector-context.cpp:988
 msgid "Finishing connector"
 msgstr "סיום מחבר"
 
-#: ../src/connector-context.cpp:1130
+#: ../src/connector-context.cpp:1131
 msgid "<b>Connection point</b>: click or drag to create a new connector"
 msgstr "<b>נקודת חיבור</b>: הקלק או גרור לשם יצירת מחבר חדש"
 
-#: ../src/connector-context.cpp:1203
+#: ../src/connector-context.cpp:1204
 msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
-msgstr ""
+msgstr "<b>מחבר הסיום</b>: גרור לניתוב מחדש או חבר לצורות חדשות"
 
-#: ../src/connector-context.cpp:1314
+#: ../src/connector-context.cpp:1316
 msgid "Select <b>at least one non-connector object</b>."
-msgstr ""
+msgstr "בחר <b>לפחות פריט אחד שאינו מחבר</b>."
 
-#: ../src/connector-context.cpp:1319 ../src/widgets/toolbox.cpp:5554
+#: ../src/connector-context.cpp:1321
+#: ../src/widgets/toolbox.cpp:6503
 msgid "Make connectors avoid selected objects"
-msgstr ""
+msgstr "גרום למחברים להמנע מהפריטים הנבחרים"
 
-#: ../src/connector-context.cpp:1320 ../src/widgets/toolbox.cpp:5564
+#: ../src/connector-context.cpp:1322
+#: ../src/widgets/toolbox.cpp:6513
 msgid "Make connectors ignore selected objects"
-msgstr ""
+msgstr "גרום למחברים להתעלם מהפריטים הנבחרים"
 
-#: ../src/context-fns.cpp:37 ../src/context-fns.cpp:66
+#: ../src/context-fns.cpp:37
+#: ../src/context-fns.cpp:66
 msgid "<b>Current layer is hidden</b>. Unhide it to be able to draw on it."
-msgstr ""
+msgstr "<b> השכבה הנוכחית חבויה </b> בצע פעולת גילוי על מנת לצייר עליה"
 
-#: ../src/context-fns.cpp:43 ../src/context-fns.cpp:72
+#: ../src/context-fns.cpp:43
+#: ../src/context-fns.cpp:72
 msgid "<b>Current layer is locked</b>. Unlock it to be able to draw on it."
-msgstr ""
+msgstr "<b> השכבה הנוכחית נעולה </b> פתח את הנעילה על מנת לצייר עליה"
 
-#: ../src/desktop.cpp:782
+#: ../src/desktop.cpp:820
 msgid "No previous zoom."
-msgstr "×\9c×\90 ×§×\99×\99×\9d ×\96×\95×\9d ×§×\95×\93×\9d"
+msgstr "×\9c×\90 ×§×\99×\99×\9eת ×¨×\9eת ×\94תקר×\91×\95ת ×§×\95×\93×\9eת."
 
-#: ../src/desktop.cpp:807
+#: ../src/desktop.cpp:845
 msgid "No next zoom."
-msgstr "×\9c×\90 ×§×\99×\99×\9d ×\96×\95×\9d ×\94×\91×\90"
+msgstr "×\90×\99×\9f ×¨×\9eת ×\94תקר×\91×\95ת × ×\95ספת."
 
-#: ../src/desktop-events.cpp:175
+#: ../src/desktop-events.cpp:176
 msgid "Create guide"
 msgstr "צור קו מנחה"
 
-#: ../src/desktop-events.cpp:221 ../src/desktop-events.cpp:275
+#: ../src/desktop-events.cpp:222
+#: ../src/desktop-events.cpp:276
 #: ../src/dialogs/guidelinedialog.cpp:127
 msgid "Delete guide"
 msgstr "מחק קו מנחה"
 
-#: ../src/desktop-events.cpp:269
+#: ../src/desktop-events.cpp:270
 msgid "Move guide"
 msgstr "הזז קו מנחה"
 
-#: ../src/desktop-events.cpp:290
-#, fuzzy, c-format
+#: ../src/desktop-events.cpp:291
+#, c-format
 msgid "<b>Guideline</b>: %s"
-msgstr "<b>×\9e×¢×\92×\9c</b>"
+msgstr "<b>ק×\95 ×\9e× ×\97×\94</b>: %s"
 
-#: ../src/dialogs/clonetiler.cpp:168
+#: ../src/dialogs/clonetiler.cpp:169
 msgid "<small>Nothing selected.</small>"
 msgstr "<small>דבר לא נבחר.</small>"
 
-#: ../src/dialogs/clonetiler.cpp:174
+#: ../src/dialogs/clonetiler.cpp:175
 msgid "<small>More than one object selected.</small>"
-msgstr "<small>× ×\91×\97ר ×\99×\95תר ×\9e×\90×\95×\91×\99קט אחד.</small>"
+msgstr "<small>× ×\91×\97ר ×\99×\95תר ×\9eפר×\99ט אחד.</small>"
 
-#: ../src/dialogs/clonetiler.cpp:181
-#, fuzzy, c-format
+#: ../src/dialogs/clonetiler.cpp:182
+#, c-format
 msgid "<small>Object has <b>%d</b> tiled clones.</small>"
-msgstr "<small>×\9c×\90×\95×\91×\99ק×\98 <b>%d</b> כפילים פרושים.</small>"
+msgstr "<small>×\9cפר×\99×\98 ×\96×\94 <b>%d</b> כפילים פרושים.</small>"
 
-#: ../src/dialogs/clonetiler.cpp:186
-#, fuzzy
+#: ../src/dialogs/clonetiler.cpp:187
 msgid "<small>Object has no tiled clones.</small>"
-msgstr "<small>×\9c×\90×\95×\91×\99ק×\98 אין כפילים פרושים.</small>"
+msgstr "<small>×\9cפר×\99×\98 ×\96×\94 אין כפילים פרושים.</small>"
 
-#: ../src/dialogs/clonetiler.cpp:984
+#: ../src/dialogs/clonetiler.cpp:990
 msgid "Select <b>one object</b> whose tiled clones to unclump."
-msgstr ""
+msgstr "בחר <b>פריט אחד</b> שיש לנתק ממנו את כפיליו הפרוסים."
 
-#: ../src/dialogs/clonetiler.cpp:1006
+#: ../src/dialogs/clonetiler.cpp:1012
 msgid "Unclump tiled clones"
-msgstr ""
+msgstr "נתק כפילים פרוסים"
 
-#: ../src/dialogs/clonetiler.cpp:1036
+#: ../src/dialogs/clonetiler.cpp:1042
 msgid "Select <b>one object</b> whose tiled clones to remove."
-msgstr ""
+msgstr "בחר <b>פריט אחד</b> שברצונך להסיר את כפיליו הפרוסים."
 
-#: ../src/dialogs/clonetiler.cpp:1059
+#: ../src/dialogs/clonetiler.cpp:1065
 msgid "Delete tiled clones"
-msgstr ""
+msgstr "מחק כפילים פרוסים"
 
-#: ../src/dialogs/clonetiler.cpp:1105 ../src/selection-chemistry.cpp:1818
+#: ../src/dialogs/clonetiler.cpp:1111
+#: ../src/selection-chemistry.cpp:1845
 msgid "Select an <b>object</b> to clone."
-msgstr ""
+msgstr "בחר <b>פריט</b> לשיכפול."
 
-#: ../src/dialogs/clonetiler.cpp:1111
-msgid ""
-"If you want to clone several objects, <b>group</b> them and <b>clone the "
-"group</b>."
-msgstr ""
+#: ../src/dialogs/clonetiler.cpp:1117
+msgid "If you want to clone several objects, <b>group</b> them and <b>clone the group</b>."
+msgstr "אם ברצונך לשכפל מספר פריטים, <b>קבץ</b> אותם ו<b>שכפל את הקבוצה</b>."
 
-#: ../src/dialogs/clonetiler.cpp:1120
-#, fuzzy
+#: ../src/dialogs/clonetiler.cpp:1126
 msgid "<small>Creating tiled clones...</small>"
-msgstr "<small>×\9c×\90×\95×\91×\99ק×\98 ×\90×\99×\9f ×\9bפ×\99×\9c×\99×\9d ×¤×¨×\95ש×\99×\9d.</small>"
+msgstr "<small>×\99×\95צר ×\9bפ×\99×\9c×\99×\9d ×¤×¨×\95ש×\99×\9d...</small>"
 
-#: ../src/dialogs/clonetiler.cpp:1527
+#: ../src/dialogs/clonetiler.cpp:1529
 msgid "Create tiled clones"
-msgstr ""
+msgstr "צור כפילים פרוסים"
 
-#: ../src/dialogs/clonetiler.cpp:1710
+#: ../src/dialogs/clonetiler.cpp:1720
 msgid "<small>Per row:</small>"
 msgstr "<small>בשורה:</small>"
 
-#: ../src/dialogs/clonetiler.cpp:1723
+#: ../src/dialogs/clonetiler.cpp:1733
 msgid "<small>Per column:</small>"
 msgstr "<small>בעמודה:</small>"
 
-#: ../src/dialogs/clonetiler.cpp:1731
+#: ../src/dialogs/clonetiler.cpp:1741
 msgid "<small>Randomize:</small>"
-msgstr ""
+msgstr "<small>פזר באקראי:</small>"
 
-#: ../src/dialogs/clonetiler.cpp:1885
+#: ../src/dialogs/clonetiler.cpp:1902
 msgid "_Symmetry"
 msgstr "_סימטריה"
 
@@ -225,438 +225,437 @@ msgstr "_סימטריה"
 #. * http://www.clarku.edu/~djoyce/wallpaper/seventeen.html (English vocabulary); or
 #. * http://membres.lycos.fr/villemingerard/Geometri/Sym1D.htm (French vocabulary).
 #.
-#: ../src/dialogs/clonetiler.cpp:1893
+#: ../src/dialogs/clonetiler.cpp:1910
 msgid "Select one of the 17 symmetry groups for the tiling"
-msgstr ""
+msgstr "בחר באחת מ־17 קבוצות הסימטריה עבור הפריסה"
 
 #. TRANSLATORS: "translation" means "shift" / "displacement" here.
-#: ../src/dialogs/clonetiler.cpp:1904
+#: ../src/dialogs/clonetiler.cpp:1921
 msgid "<b>P1</b>: simple translation"
 msgstr "<b>P1</b>: העברה פשוטה"
 
-#: ../src/dialogs/clonetiler.cpp:1905
+#: ../src/dialogs/clonetiler.cpp:1922
 msgid "<b>P2</b>: 180&#176; rotation"
 msgstr "<b>P2</b>: סיבוב של 180&#176;"
 
-#: ../src/dialogs/clonetiler.cpp:1906
+#: ../src/dialogs/clonetiler.cpp:1923
 msgid "<b>PM</b>: reflection"
-msgstr "<b>PM</b>: ×©×\99ק×\95×£"
+msgstr "<b>PM</b>: ×\94שתקפ×\95ת"
 
 #. TRANSLATORS: "glide reflection" is a reflection and a translation combined.
 #. For more info, see http://mathforum.org/sum95/suzanne/symsusan.html
-#: ../src/dialogs/clonetiler.cpp:1909
+#: ../src/dialogs/clonetiler.cpp:1926
 msgid "<b>PG</b>: glide reflection"
-msgstr ""
+msgstr "<b>PG</b>: השתקפות מוסטת"
 
-#: ../src/dialogs/clonetiler.cpp:1910
+#: ../src/dialogs/clonetiler.cpp:1927
 msgid "<b>CM</b>: reflection + glide reflection"
-msgstr ""
+msgstr "<b>CM</b>: השתקפות + השתקפות מוסטת"
 
-#: ../src/dialogs/clonetiler.cpp:1911
+#: ../src/dialogs/clonetiler.cpp:1928
 msgid "<b>PMM</b>: reflection + reflection"
-msgstr ""
+msgstr "<b>PMM</b>: השתקפות + השתקפות"
 
-#: ../src/dialogs/clonetiler.cpp:1912
+#: ../src/dialogs/clonetiler.cpp:1929
 msgid "<b>PMG</b>: reflection + 180&#176; rotation"
 msgstr "<b>PMG</b>: סיבוב של 180&#176;  + שיקוף"
 
-#: ../src/dialogs/clonetiler.cpp:1913
+#: ../src/dialogs/clonetiler.cpp:1930
 msgid "<b>PGG</b>: glide reflection + 180&#176; rotation"
-msgstr ""
+msgstr "<b>PGG</b>: השתקפות מוסטת + סיבוב של 180&#176;"
 
-#: ../src/dialogs/clonetiler.cpp:1914
+#: ../src/dialogs/clonetiler.cpp:1931
 msgid "<b>CMM</b>: reflection + reflection + 180&#176; rotation"
-msgstr ""
+msgstr "<b>CMM</b>: השתקפות + השתקפות + סיבוב של 180&#176;"
 
-#: ../src/dialogs/clonetiler.cpp:1915
+#: ../src/dialogs/clonetiler.cpp:1932
 msgid "<b>P4</b>: 90&#176; rotation"
 msgstr "<b>P4</b>: סיבוב של 90&#176;"
 
-#: ../src/dialogs/clonetiler.cpp:1916
+#: ../src/dialogs/clonetiler.cpp:1933
 msgid "<b>P4M</b>: 90&#176; rotation + 45&#176; reflection"
-msgstr ""
+msgstr "<b>P4M</b>: 90&#176; סיבוב + 45&#176; השתקפות"
 
-#: ../src/dialogs/clonetiler.cpp:1917
+#: ../src/dialogs/clonetiler.cpp:1934
 msgid "<b>P4G</b>: 90&#176; rotation + 90&#176; reflection"
-msgstr ""
+msgstr "<b>P4G</b>: סיבוב של 90&#176; + השתקפות של 90&#176;"
 
-#: ../src/dialogs/clonetiler.cpp:1918
+#: ../src/dialogs/clonetiler.cpp:1935
 msgid "<b>P3</b>: 120&#176; rotation"
-msgstr ""
+msgstr "<b>P3</b>: סיבוב של 120&#176;"
 
-#: ../src/dialogs/clonetiler.cpp:1919
+#: ../src/dialogs/clonetiler.cpp:1936
 msgid "<b>P31M</b>: reflection + 120&#176; rotation, dense"
-msgstr ""
+msgstr "<b>P31M</b>: השתקפות + סיבוב של 120&#176;, צפוף"
 
-#: ../src/dialogs/clonetiler.cpp:1920
+#: ../src/dialogs/clonetiler.cpp:1937
 msgid "<b>P3M1</b>: reflection + 120&#176; rotation, sparse"
-msgstr ""
+msgstr "<b>P3M1</b>: השתקפות + סיבוב 120&#176;, מרווח"
 
-#: ../src/dialogs/clonetiler.cpp:1921
+#: ../src/dialogs/clonetiler.cpp:1938
 msgid "<b>P6</b>: 60&#176; rotation"
-msgstr ""
+msgstr "<b>P6</b>: סיבוב של 60&#176;"
 
-#: ../src/dialogs/clonetiler.cpp:1922
+#: ../src/dialogs/clonetiler.cpp:1939
 msgid "<b>P6M</b>: reflection + 60&#176; rotation"
-msgstr ""
+msgstr "<b>P6M</b>: השתקפות + סיבוב של 60&#176;"
 
-#: ../src/dialogs/clonetiler.cpp:1950
+#: ../src/dialogs/clonetiler.cpp:1967
 msgid "S_hift"
-msgstr ""
+msgstr "ת_זוזה"
 
 #. TRANSLATORS: "shift" means: the tiles will be shifted (offset) horizontally by this amount
-#: ../src/dialogs/clonetiler.cpp:1960
+#: ../src/dialogs/clonetiler.cpp:1977
 #, no-c-format
 msgid "<b>Shift X:</b>"
-msgstr ""
+msgstr "<b>תזוזה בציר X:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:1968
+#: ../src/dialogs/clonetiler.cpp:1985
 #, no-c-format
 msgid "Horizontal shift per row (in % of tile width)"
-msgstr ""
+msgstr "תזוזה אופקית לשורה (באחוזים מרוחב האריח)"
 
-#: ../src/dialogs/clonetiler.cpp:1976
+#: ../src/dialogs/clonetiler.cpp:1993
 #, no-c-format
 msgid "Horizontal shift per column (in % of tile width)"
-msgstr ""
+msgstr "תזוזה אופקית לטור (באחוזים מרוחב האריח)"
 
-#: ../src/dialogs/clonetiler.cpp:1983
+#: ../src/dialogs/clonetiler.cpp:2000
 msgid "Randomize the horizontal shift by this percentage"
-msgstr ""
+msgstr "הזז לרוחב באקראי לפי אחוזים אלה"
 
 #. TRANSLATORS: "shift" means: the tiles will be shifted (offset) vertically by this amount
-#: ../src/dialogs/clonetiler.cpp:1993
+#: ../src/dialogs/clonetiler.cpp:2010
 #, no-c-format
 msgid "<b>Shift Y:</b>"
-msgstr ""
+msgstr "<b>תזוזה בציר Y:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2001
+#: ../src/dialogs/clonetiler.cpp:2018
 #, no-c-format
 msgid "Vertical shift per row (in % of tile height)"
-msgstr ""
+msgstr "תזוזה אנכית לשורה (באחוזים מגובה האריח)"
 
-#: ../src/dialogs/clonetiler.cpp:2009
+#: ../src/dialogs/clonetiler.cpp:2026
 #, no-c-format
 msgid "Vertical shift per column (in % of tile height)"
-msgstr ""
+msgstr "תזוזה אנכית לטור (באחוזים מגובה האריח)"
 
-#: ../src/dialogs/clonetiler.cpp:2016
+#: ../src/dialogs/clonetiler.cpp:2033
 msgid "Randomize the vertical shift by this percentage"
-msgstr ""
+msgstr "הזז לאורך באקראי לפי אחוזים אלה"
 
-#: ../src/dialogs/clonetiler.cpp:2024 ../src/dialogs/clonetiler.cpp:2172
+#: ../src/dialogs/clonetiler.cpp:2041
+#: ../src/dialogs/clonetiler.cpp:2189
 msgid "<b>Exponent:</b>"
-msgstr ""
+msgstr "<b>מעריך:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2031
+#: ../src/dialogs/clonetiler.cpp:2048
 msgid "Whether rows are spaced evenly (1), converge (<1) or diverge (>1)"
-msgstr ""
+msgstr "האם השורות מרווחות באופן שווה (1), מכונס (<1) או מרווח (>1)"
 
-#: ../src/dialogs/clonetiler.cpp:2038
+#: ../src/dialogs/clonetiler.cpp:2055
 msgid "Whether columns are spaced evenly (1), converge (<1) or diverge (>1)"
-msgstr ""
+msgstr "האם הטורים מרווחים באופן שווה (1), מכונס (<1) או מרווח (>1)"
 
 #. TRANSLATORS: "Alternate" is a verb here
-#: ../src/dialogs/clonetiler.cpp:2046 ../src/dialogs/clonetiler.cpp:2216
-#: ../src/dialogs/clonetiler.cpp:2293 ../src/dialogs/clonetiler.cpp:2369
-#: ../src/dialogs/clonetiler.cpp:2418 ../src/dialogs/clonetiler.cpp:2549
+#: ../src/dialogs/clonetiler.cpp:2063
+#: ../src/dialogs/clonetiler.cpp:2233
+#: ../src/dialogs/clonetiler.cpp:2310
+#: ../src/dialogs/clonetiler.cpp:2386
+#: ../src/dialogs/clonetiler.cpp:2435
+#: ../src/dialogs/clonetiler.cpp:2566
 msgid "<small>Alternate:</small>"
-msgstr ""
+msgstr "<small>החלף:</small>"
 
-#: ../src/dialogs/clonetiler.cpp:2052
+#: ../src/dialogs/clonetiler.cpp:2069
 msgid "Alternate the sign of shifts for each row"
-msgstr ""
+msgstr "החלף את סימן התזוזות עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2057
+#: ../src/dialogs/clonetiler.cpp:2074
 msgid "Alternate the sign of shifts for each column"
-msgstr ""
+msgstr "החלף את סימן התזוזות עבור כל עמודה"
 
 #. TRANSLATORS: "Cumulate" is a verb here
-#: ../src/dialogs/clonetiler.cpp:2064 ../src/dialogs/clonetiler.cpp:2234
-#: ../src/dialogs/clonetiler.cpp:2311
-#, fuzzy
+#: ../src/dialogs/clonetiler.cpp:2081
+#: ../src/dialogs/clonetiler.cpp:2251
+#: ../src/dialogs/clonetiler.cpp:2328
 msgid "<small>Cumulate:</small>"
-msgstr "<small>×\91ש×\95ר×\94:</small>"
+msgstr "<small>צ×\91×\95ר:</small>"
 
-#: ../src/dialogs/clonetiler.cpp:2070
+#: ../src/dialogs/clonetiler.cpp:2087
 msgid "Cumulate the shifts for each row"
-msgstr ""
+msgstr "צבור את התזוזות עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2075
+#: ../src/dialogs/clonetiler.cpp:2092
 msgid "Cumulate the shifts for each column"
-msgstr ""
+msgstr "צבור את המרווחים עבור כל עמודה"
 
 #. TRANSLATORS: "Cumulate" is a verb here
-#: ../src/dialogs/clonetiler.cpp:2082
-#, fuzzy
+#: ../src/dialogs/clonetiler.cpp:2099
 msgid "<small>Exclude tile:</small>"
-msgstr "<small>×\91ש×\95ר×\94:</small>"
+msgstr "<small>×\90×\9c ×ª×\9b×\9c×\95×\9c ×\90ר×\99×\97:</small>"
 
-#: ../src/dialogs/clonetiler.cpp:2088
+#: ../src/dialogs/clonetiler.cpp:2105
 msgid "Exclude tile height in shift"
-msgstr ""
+msgstr "אל תכלול את גובה האריח בהזזה"
 
-#: ../src/dialogs/clonetiler.cpp:2093
+#: ../src/dialogs/clonetiler.cpp:2110
 msgid "Exclude tile width in shift"
-msgstr ""
+msgstr "אל תכלול את רוחב האריח בהזזה"
 
-#: ../src/dialogs/clonetiler.cpp:2102
+#: ../src/dialogs/clonetiler.cpp:2119
 msgid "Sc_ale"
-msgstr ""
+msgstr "שנה _גודל"
 
-#: ../src/dialogs/clonetiler.cpp:2110
+#: ../src/dialogs/clonetiler.cpp:2127
 msgid "<b>Scale X:</b>"
-msgstr ""
+msgstr "<b>תזוזה בציר ה־X:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2118
+#: ../src/dialogs/clonetiler.cpp:2135
 #, no-c-format
 msgid "Horizontal scale per row (in % of tile width)"
-msgstr ""
+msgstr "שינוי גודל אופקי עבור כל שורה (באחוזים מרוחב האריח)"
 
-#: ../src/dialogs/clonetiler.cpp:2126
+#: ../src/dialogs/clonetiler.cpp:2143
 #, no-c-format
 msgid "Horizontal scale per column (in % of tile width)"
-msgstr ""
+msgstr "שינוי גודל אופקי עבור כל עמודה (באחוזים מרוחב האריח)"
 
-#: ../src/dialogs/clonetiler.cpp:2133
+#: ../src/dialogs/clonetiler.cpp:2150
 msgid "Randomize the horizontal scale by this percentage"
-msgstr ""
+msgstr "שנה את הגודל האופקי באופן אקראי לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2141
+#: ../src/dialogs/clonetiler.cpp:2158
 msgid "<b>Scale Y:</b>"
-msgstr ""
+msgstr "<b>שנה גודל בציר ה־Y:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2149
+#: ../src/dialogs/clonetiler.cpp:2166
 #, no-c-format
 msgid "Vertical scale per row (in % of tile height)"
-msgstr ""
+msgstr "שינוי גודל אנכי עבור כל שורה (באחוזים מגובה האריח)"
 
-#: ../src/dialogs/clonetiler.cpp:2157
+#: ../src/dialogs/clonetiler.cpp:2174
 #, no-c-format
 msgid "Vertical scale per column (in % of tile height)"
-msgstr ""
+msgstr "שינוי גודל אנכי עבור כל עמודה (באחוזים מגובה האריח)"
 
-#: ../src/dialogs/clonetiler.cpp:2164
+#: ../src/dialogs/clonetiler.cpp:2181
 msgid "Randomize the vertical scale by this percentage"
-msgstr ""
+msgstr "שנה את הגודל האנכי באופן אקראי לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2179
+#: ../src/dialogs/clonetiler.cpp:2196
 msgid "Whether row scaling is uniform (1), converge (<1) or diverge (>1)"
-msgstr ""
+msgstr "האם שינוי גודל השורות יהיה אחיד (1), מכונס (<1) או מרווח (>1)"
 
-#: ../src/dialogs/clonetiler.cpp:2186
+#: ../src/dialogs/clonetiler.cpp:2203
 msgid "Whether column scaling is uniform (1), converge (<1) or diverge (>1)"
-msgstr ""
+msgstr "האם שינוי גודל העמודות יהיה אחיד (1), מכונס (<1) או מרווח (>1)"
 
-#: ../src/dialogs/clonetiler.cpp:2194
-#, fuzzy
+#: ../src/dialogs/clonetiler.cpp:2211
 msgid "<b>Base:</b>"
-msgstr "<b>×\90×\9c×\99פס×\94</b>"
+msgstr "<b>×\91ס×\99ס:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2201 ../src/dialogs/clonetiler.cpp:2208
-msgid ""
-"Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"
-msgstr ""
+#: ../src/dialogs/clonetiler.cpp:2218
+#: ../src/dialogs/clonetiler.cpp:2225
+msgid "Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"
+msgstr "בסיס עבור ספירלה לוגריתמית: לא בשימוש (0), מכונס (<1) או מרווח (>1)"
 
-#: ../src/dialogs/clonetiler.cpp:2222
+#: ../src/dialogs/clonetiler.cpp:2239
 msgid "Alternate the sign of scales for each row"
-msgstr ""
+msgstr "החלף את סמל שינוי הגודל עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2227
+#: ../src/dialogs/clonetiler.cpp:2244
 msgid "Alternate the sign of scales for each column"
-msgstr ""
+msgstr "החלף את סמל שינוי הגודל עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2240
+#: ../src/dialogs/clonetiler.cpp:2257
 msgid "Cumulate the scales for each row"
-msgstr ""
+msgstr "צבור את שינוי הגודל עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2245
+#: ../src/dialogs/clonetiler.cpp:2262
 msgid "Cumulate the scales for each column"
-msgstr ""
+msgstr "צבור את שינוי הגודל עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2254
+#: ../src/dialogs/clonetiler.cpp:2271
 msgid "_Rotation"
-msgstr ""
+msgstr "_סיבוב"
 
-#: ../src/dialogs/clonetiler.cpp:2262
+#: ../src/dialogs/clonetiler.cpp:2279
 msgid "<b>Angle:</b>"
-msgstr ""
+msgstr "<b>זווית:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2270
+#: ../src/dialogs/clonetiler.cpp:2287
 #, no-c-format
 msgid "Rotate tiles by this angle for each row"
-msgstr ""
+msgstr "הטה את האריחים לפי זווית זו עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2278
+#: ../src/dialogs/clonetiler.cpp:2295
 #, no-c-format
 msgid "Rotate tiles by this angle for each column"
-msgstr ""
+msgstr "הטה את האריחים לפי זווית זו עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2285
+#: ../src/dialogs/clonetiler.cpp:2302
 msgid "Randomize the rotation angle by this percentage"
-msgstr ""
+msgstr "בחר באקראי את אחוזי הסיבוב לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2299
+#: ../src/dialogs/clonetiler.cpp:2316
 msgid "Alternate the rotation direction for each row"
-msgstr ""
+msgstr "החלף את כיווני הסיבוב עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2304
+#: ../src/dialogs/clonetiler.cpp:2321
 msgid "Alternate the rotation direction for each column"
-msgstr ""
+msgstr "החלף את כיווני הסיבוב עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2317
+#: ../src/dialogs/clonetiler.cpp:2334
 msgid "Cumulate the rotation for each row"
-msgstr ""
+msgstr "צבור את אחוזי הסיבוב עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2322
+#: ../src/dialogs/clonetiler.cpp:2339
 msgid "Cumulate the rotation for each column"
-msgstr ""
+msgstr "צבור את הסיבוב מכל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2331
+#: ../src/dialogs/clonetiler.cpp:2348
 msgid "_Blur & opacity"
-msgstr ""
+msgstr "_טישטוש ואטימות"
 
-#: ../src/dialogs/clonetiler.cpp:2340
+#: ../src/dialogs/clonetiler.cpp:2357
 msgid "<b>Blur:</b>"
-msgstr ""
+msgstr "<b>טישטוש:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2347
+#: ../src/dialogs/clonetiler.cpp:2364
 msgid "Blur tiles by this percentage for each row"
-msgstr ""
+msgstr "טשטש את האריחים באחוזים אלה עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2354
+#: ../src/dialogs/clonetiler.cpp:2371
 msgid "Blur tiles by this percentage for each column"
-msgstr ""
+msgstr "טשטש את האריחים באחוזים אלה עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2361
+#: ../src/dialogs/clonetiler.cpp:2378
 msgid "Randomize the tile blur by this percentage"
-msgstr ""
+msgstr "טשטש את האריחים באופן אקראי לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2375
+#: ../src/dialogs/clonetiler.cpp:2392
 msgid "Alternate the sign of blur change for each row"
-msgstr ""
+msgstr "החלף את סימן שינוי הטישטוש עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2380
+#: ../src/dialogs/clonetiler.cpp:2397
 msgid "Alternate the sign of blur change for each column"
-msgstr ""
+msgstr "החלף את סימן שינוי הטישטוש עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2389
+#: ../src/dialogs/clonetiler.cpp:2406
 msgid "<b>Fade out:</b>"
-msgstr ""
+msgstr "<b>דהיה:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2396
+#: ../src/dialogs/clonetiler.cpp:2413
 msgid "Decrease tile opacity by this percentage for each row"
-msgstr ""
+msgstr "החלש את אטימות האריחים באחוזים אלה עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2403
+#: ../src/dialogs/clonetiler.cpp:2420
 msgid "Decrease tile opacity by this percentage for each column"
-msgstr ""
+msgstr "החלש את אטימות האריחים באחוזים אלה עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2410
+#: ../src/dialogs/clonetiler.cpp:2427
 msgid "Randomize the tile opacity by this percentage"
-msgstr ""
+msgstr "שנה את אטימות האריחים באופן אקראי לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2424
+#: ../src/dialogs/clonetiler.cpp:2441
 msgid "Alternate the sign of opacity change for each row"
-msgstr ""
+msgstr "החלף את סימן שינוי האטימות עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2429
+#: ../src/dialogs/clonetiler.cpp:2446
 msgid "Alternate the sign of opacity change for each column"
-msgstr ""
+msgstr "החלף את סימן שינוי האטימות עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2437
+#: ../src/dialogs/clonetiler.cpp:2454
 msgid "Co_lor"
-msgstr ""
+msgstr "_צבע"
 
-#: ../src/dialogs/clonetiler.cpp:2442
+#: ../src/dialogs/clonetiler.cpp:2459
 msgid "Initial color: "
-msgstr ""
+msgstr "צבע התחלתי: "
 
-#: ../src/dialogs/clonetiler.cpp:2446
+#: ../src/dialogs/clonetiler.cpp:2463
 msgid "Initial color of tiled clones"
-msgstr ""
+msgstr "צבעם ההתחלתי של האריחים המשוכפלים"
 
-#: ../src/dialogs/clonetiler.cpp:2446
-msgid ""
-"Initial color for clones (works only if the original has unset fill or "
-"stroke)"
-msgstr ""
+#: ../src/dialogs/clonetiler.cpp:2463
+msgid "Initial color for clones (works only if the original has unset fill or stroke)"
+msgstr "צבעם ההתחלתי של הכפילים (עובד רק אם לא נקבע צבע המילוי או קו המתאר למקור)"
 
-#: ../src/dialogs/clonetiler.cpp:2461
+#: ../src/dialogs/clonetiler.cpp:2478
 msgid "<b>H:</b>"
-msgstr ""
+msgstr "<b>H:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2468
+#: ../src/dialogs/clonetiler.cpp:2485
 msgid "Change the tile hue by this percentage for each row"
-msgstr ""
+msgstr "שנה את גוון האריח באחוזים אלה עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2475
+#: ../src/dialogs/clonetiler.cpp:2492
 msgid "Change the tile hue by this percentage for each column"
-msgstr ""
+msgstr "שנה את גוון האריח באחוזים אלה עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2482
+#: ../src/dialogs/clonetiler.cpp:2499
 msgid "Randomize the tile hue by this percentage"
-msgstr ""
+msgstr "שנה את גוון האריח באופן אקראי לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2491
+#: ../src/dialogs/clonetiler.cpp:2508
 msgid "<b>S:</b>"
-msgstr ""
+msgstr "<b>S:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2498
+#: ../src/dialogs/clonetiler.cpp:2515
 msgid "Change the color saturation by this percentage for each row"
-msgstr ""
+msgstr "שנה את רוויית הצבע באחוזים אלו עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2505
+#: ../src/dialogs/clonetiler.cpp:2522
 msgid "Change the color saturation by this percentage for each column"
-msgstr ""
+msgstr "שנה את רוויית הצבע באחוזים אלו עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2512
+#: ../src/dialogs/clonetiler.cpp:2529
 msgid "Randomize the color saturation by this percentage"
-msgstr ""
+msgstr "שנה את רוויית הצבע באופן אקראי לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2520
+#: ../src/dialogs/clonetiler.cpp:2537
 msgid "<b>L:</b>"
-msgstr ""
+msgstr "<b>L:</b>"
 
-#: ../src/dialogs/clonetiler.cpp:2527
+#: ../src/dialogs/clonetiler.cpp:2544
 msgid "Change the color lightness by this percentage for each row"
-msgstr ""
+msgstr "שנה את תאורת הצבע לפי אחוזים אלו עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2534
+#: ../src/dialogs/clonetiler.cpp:2551
 msgid "Change the color lightness by this percentage for each column"
-msgstr ""
+msgstr "שנה את תאורת הצבע לפי אחוזים אלו עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2541
+#: ../src/dialogs/clonetiler.cpp:2558
 msgid "Randomize the color lightness by this percentage"
-msgstr ""
+msgstr "שנה באקראי את תאורת הצבע לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2555
+#: ../src/dialogs/clonetiler.cpp:2572
 msgid "Alternate the sign of color changes for each row"
-msgstr ""
+msgstr "החלף את סימן שינויי הצבעים עבור כל שורה"
 
-#: ../src/dialogs/clonetiler.cpp:2560
+#: ../src/dialogs/clonetiler.cpp:2577
 msgid "Alternate the sign of color changes for each column"
-msgstr ""
+msgstr "החלף את סימן שינויי הצבעים עבור כל עמודה"
 
-#: ../src/dialogs/clonetiler.cpp:2568
+#: ../src/dialogs/clonetiler.cpp:2585
 msgid "_Trace"
-msgstr ""
+msgstr "_עקוב"
 
-#: ../src/dialogs/clonetiler.cpp:2575
+#: ../src/dialogs/clonetiler.cpp:2592
 msgid "Trace the drawing under the tiles"
-msgstr ""
+msgstr "עקוב אחר הציור שמתחת לאריחים"
 
-#: ../src/dialogs/clonetiler.cpp:2579
-msgid ""
-"For each clone, pick a value from the drawing in that clone's location and "
-"apply it to the clone"
-msgstr ""
+#: ../src/dialogs/clonetiler.cpp:2596
+msgid "For each clone, pick a value from the drawing in that clone's location and apply it to the clone"
+msgstr "עבור כל כפיל, בחר ערך מהציור ממיקום הכפיל והחל אותו על הכפיל"
 
-#: ../src/dialogs/clonetiler.cpp:2593
+#: ../src/dialogs/clonetiler.cpp:2610
 msgid "1. Pick from the drawing:"
-msgstr ""
+msgstr "1. בחר מהציור:"
 
-#: ../src/dialogs/clonetiler.cpp:2604 ../src/dialogs/clonetiler.cpp:2751
+#: ../src/dialogs/clonetiler.cpp:2621
+#: ../src/dialogs/clonetiler.cpp:2768
 #: ../src/extension/internal/bitmap/colorize.cpp:51
 #: ../share/extensions/color_brighter.inx.h:2
 #: ../share/extensions/color_custom.inx.h:2
@@ -677,1207 +676,1290 @@ msgstr ""
 #: ../share/extensions/color_replace.inx.h:2
 #: ../share/extensions/color_rgbbarrel.inx.h:1
 msgid "Color"
-msgstr ""
+msgstr "צבע"
 
-#: ../src/dialogs/clonetiler.cpp:2605
+#: ../src/dialogs/clonetiler.cpp:2622
 msgid "Pick the visible color and opacity"
-msgstr ""
+msgstr "בחר את הצבע הנראה ואת אטימותו"
 
-#: ../src/dialogs/clonetiler.cpp:2612 ../src/dialogs/clonetiler.cpp:2761
+#: ../src/dialogs/clonetiler.cpp:2629
+#: ../src/dialogs/clonetiler.cpp:2778
 #: ../src/extension/internal/bitmap/opacity.cpp:37
 #: ../src/extension/internal/bitmap/opacity.cpp:39
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2241
-#: ../src/widgets/toolbox.cpp:3405
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2255
+#: ../src/widgets/toolbox.cpp:3863
 msgid "Opacity"
-msgstr ""
+msgstr "אטימות"
 
-#: ../src/dialogs/clonetiler.cpp:2613
+#: ../src/dialogs/clonetiler.cpp:2630
 msgid "Pick the total accumulated opacity"
-msgstr ""
+msgstr "בחר את האטימות הכללית המצטברת"
 
-#: ../src/dialogs/clonetiler.cpp:2620
+#: ../src/dialogs/clonetiler.cpp:2637
 msgid "R"
-msgstr ""
+msgstr "R"
 
-#: ../src/dialogs/clonetiler.cpp:2621
+#: ../src/dialogs/clonetiler.cpp:2638
 msgid "Pick the Red component of the color"
-msgstr ""
+msgstr "בחר את הרכב האדום של הצבע"
 
-#: ../src/dialogs/clonetiler.cpp:2628
+#: ../src/dialogs/clonetiler.cpp:2645
 msgid "G"
-msgstr ""
+msgstr "G"
 
-#: ../src/dialogs/clonetiler.cpp:2629
+#: ../src/dialogs/clonetiler.cpp:2646
 msgid "Pick the Green component of the color"
-msgstr ""
+msgstr "בחר את הרכב הירוק של הצבע"
 
-#: ../src/dialogs/clonetiler.cpp:2636
+#: ../src/dialogs/clonetiler.cpp:2653
 msgid "B"
-msgstr ""
+msgstr "B"
 
-#: ../src/dialogs/clonetiler.cpp:2637
+#: ../src/dialogs/clonetiler.cpp:2654
 msgid "Pick the Blue component of the color"
-msgstr ""
+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/dialogs/clonetiler.cpp:2646
+#: ../src/dialogs/clonetiler.cpp:2663
 msgid "clonetiler|H"
-msgstr ""
+msgstr "clonetiler|H"
 
-#: ../src/dialogs/clonetiler.cpp:2647
+#: ../src/dialogs/clonetiler.cpp:2664
 msgid "Pick the hue of the color"
-msgstr ""
+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/dialogs/clonetiler.cpp:2656
+#: ../src/dialogs/clonetiler.cpp:2673
 msgid "clonetiler|S"
-msgstr ""
+msgstr "clonetiler|S"
 
-#: ../src/dialogs/clonetiler.cpp:2657
+#: ../src/dialogs/clonetiler.cpp:2674
 msgid "Pick the saturation of the color"
-msgstr ""
+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/dialogs/clonetiler.cpp:2666
+#: ../src/dialogs/clonetiler.cpp:2683
 msgid "clonetiler|L"
-msgstr ""
+msgstr "clonetiler|L"
 
-#: ../src/dialogs/clonetiler.cpp:2667
+#: ../src/dialogs/clonetiler.cpp:2684
 msgid "Pick the lightness of the color"
-msgstr ""
+msgstr "בחר את תאורת הצבע"
 
-#: ../src/dialogs/clonetiler.cpp:2677
+#: ../src/dialogs/clonetiler.cpp:2694
 msgid "2. Tweak the picked value:"
-msgstr ""
+msgstr "2. שפר את הערך שנבחר:"
 
-#: ../src/dialogs/clonetiler.cpp:2687
+#: ../src/dialogs/clonetiler.cpp:2704
 msgid "Gamma-correct:"
-msgstr ""
+msgstr "תיקון גאמה:"
 
-#: ../src/dialogs/clonetiler.cpp:2692
+#: ../src/dialogs/clonetiler.cpp:2709
 msgid "Shift the mid-range of the picked value upwards (>0) or downwards (<0)"
-msgstr ""
+msgstr "הזז את טווח האמצע של הערך הנבחר כלפי מעלה (>0) או מטה (<0)"
 
-#: ../src/dialogs/clonetiler.cpp:2699
+#: ../src/dialogs/clonetiler.cpp:2716
 msgid "Randomize:"
-msgstr ""
+msgstr "בחר באקראי:"
 
-#: ../src/dialogs/clonetiler.cpp:2704
+#: ../src/dialogs/clonetiler.cpp:2721
 msgid "Randomize the picked value by this percentage"
-msgstr ""
+msgstr "שנה באקראי את הצבע הנבחר לפי אחוזים אלו"
 
-#: ../src/dialogs/clonetiler.cpp:2711
+#: ../src/dialogs/clonetiler.cpp:2728
 msgid "Invert:"
-msgstr ""
+msgstr "הפוך:"
 
-#: ../src/dialogs/clonetiler.cpp:2715
+#: ../src/dialogs/clonetiler.cpp:2732
 msgid "Invert the picked value"
-msgstr ""
+msgstr "הפוך את הערך הנבחר"
 
-#: ../src/dialogs/clonetiler.cpp:2721
+#: ../src/dialogs/clonetiler.cpp:2738
 msgid "3. Apply the value to the clones':"
-msgstr ""
+msgstr "3. החל את הערך על הכפילים:"
 
-#: ../src/dialogs/clonetiler.cpp:2731
+#: ../src/dialogs/clonetiler.cpp:2748
 msgid "Presence"
-msgstr ""
+msgstr "נוכחות"
 
-#: ../src/dialogs/clonetiler.cpp:2734
-msgid ""
-"Each clone is created with the probability determined by the picked value in "
-"that point"
-msgstr ""
+#: ../src/dialogs/clonetiler.cpp:2751
+msgid "Each clone is created with the probability determined by the picked value in that point"
+msgstr "כל כפיל נוצר עם סבירות הנקבעת על ידי הערך הנבחר בנקודה זו"
 
-#: ../src/dialogs/clonetiler.cpp:2741
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2216
+#: ../src/dialogs/clonetiler.cpp:2758
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
 msgid "Size"
-msgstr ""
+msgstr "גודל"
 
-#: ../src/dialogs/clonetiler.cpp:2744
+#: ../src/dialogs/clonetiler.cpp:2761
 msgid "Each clone's size is determined by the picked value in that point"
-msgstr ""
+msgstr "גודלו של כל כפיל נקבע על ידי הערך הנבחר בנקודה זו"
 
-#: ../src/dialogs/clonetiler.cpp:2754
-msgid ""
-"Each clone is painted by the picked color (the original must have unset fill "
-"or stroke)"
-msgstr ""
+#: ../src/dialogs/clonetiler.cpp:2771
+msgid "Each clone is painted by the picked color (the original must have unset fill or stroke)"
+msgstr "כל כפיל נצבע לפי הצבע הנבחר (על המקור להיות נטול צבע מילוי או קו מתאר)"
 
-#: ../src/dialogs/clonetiler.cpp:2764
+#: ../src/dialogs/clonetiler.cpp:2781
 msgid "Each clone's opacity is determined by the picked value in that point"
-msgstr ""
+msgstr "אטימותו של כל כפיל נקבעת על ידי הערך בנקודה זו"
 
-#: ../src/dialogs/clonetiler.cpp:2791
+#: ../src/dialogs/clonetiler.cpp:2808
 msgid "How many rows in the tiling"
-msgstr ""
+msgstr "כמה שורות בריצוף"
 
-#: ../src/dialogs/clonetiler.cpp:2811
+#: ../src/dialogs/clonetiler.cpp:2828
 msgid "How many columns in the tiling"
-msgstr ""
+msgstr "כמה עמודות בריצוף"
 
-#: ../src/dialogs/clonetiler.cpp:2841
+#: ../src/dialogs/clonetiler.cpp:2858
 msgid "Width of the rectangle to be filled"
-msgstr ""
+msgstr "רוחב המרובע שיש למלא"
 
-#: ../src/dialogs/clonetiler.cpp:2866
+#: ../src/dialogs/clonetiler.cpp:2883
 msgid "Height of the rectangle to be filled"
-msgstr ""
+msgstr "גובה המרובע שיש למלא"
 
-#: ../src/dialogs/clonetiler.cpp:2881
+#: ../src/dialogs/clonetiler.cpp:2898
 msgid "Rows, columns: "
-msgstr ""
+msgstr "שורות, עמודות: "
 
-#: ../src/dialogs/clonetiler.cpp:2882
+#: ../src/dialogs/clonetiler.cpp:2899
 msgid "Create the specified number of rows and columns"
-msgstr ""
+msgstr "צור את מספר השורות והעמודות המצויין"
 
-#: ../src/dialogs/clonetiler.cpp:2891
+#: ../src/dialogs/clonetiler.cpp:2908
 msgid "Width, height: "
-msgstr ""
+msgstr "רוחב, גובה: "
 
-#: ../src/dialogs/clonetiler.cpp:2892
+#: ../src/dialogs/clonetiler.cpp:2909
 msgid "Fill the specified width and height with the tiling"
-msgstr ""
+msgstr "מלא את הגובה והרוחב המצויינים בריצוף"
 
-#: ../src/dialogs/clonetiler.cpp:2908
+#: ../src/dialogs/clonetiler.cpp:2925
 msgid "Use saved size and position of the tile"
-msgstr ""
+msgstr "השתמש בגודל ובמיקום השמורים של האריח"
 
-#: ../src/dialogs/clonetiler.cpp:2911
-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 ""
+#: ../src/dialogs/clonetiler.cpp:2928
+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 "העמד פנים שגודל ומיקום האריח הינם זהים לפעם האחרונה שריצפת אותם (אם בכלל), במקום להשתמש בגודל הנוכחי"
 
-#: ../src/dialogs/clonetiler.cpp:2935
+#: ../src/dialogs/clonetiler.cpp:2952
 msgid " <b>_Create</b> "
-msgstr ""
+msgstr " <b>_צור</b> "
 
-#: ../src/dialogs/clonetiler.cpp:2937
+#: ../src/dialogs/clonetiler.cpp:2954
 msgid "Create and tile the clones of the selection"
-msgstr ""
+msgstr "צור ורצף את הכפילים של הבחירה"
 
 #. TRANSLATORS: if a group of objects are "clumped" together, then they
 #. are unevenly spread in the given amount of space - as shown in the
 #. diagrams on the left in the following screenshot:
 #. http://www.inkscape.org/screenshots/gallery/inkscape-0.42-CVS-tiles-unclump.png
 #. So unclumping is the process of spreading a number of objects out more evenly.
-#: ../src/dialogs/clonetiler.cpp:2952
+#: ../src/dialogs/clonetiler.cpp:2969
 msgid " _Unclump "
-msgstr ""
+msgstr " _פזר "
 
-#: ../src/dialogs/clonetiler.cpp:2953
+#: ../src/dialogs/clonetiler.cpp:2970
 msgid "Spread out clones to reduce clumping; can be applied repeatedly"
-msgstr ""
+msgstr "פזר את הכפילים כדי להקטין את הגיבוש; ניתן להחיל מספר פעמים"
 
-#: ../src/dialogs/clonetiler.cpp:2959
+#: ../src/dialogs/clonetiler.cpp:2976
 msgid " Re_move "
-msgstr ""
+msgstr " ה_סר "
 
-#: ../src/dialogs/clonetiler.cpp:2960
+#: ../src/dialogs/clonetiler.cpp:2977
 msgid "Remove existing tiled clones of the selected object (siblings only)"
-msgstr ""
+msgstr "הסר את הכפילים המרוצפים של הפריט הנבחר (אחים ואחיות בלבד)"
 
-#: ../src/dialogs/clonetiler.cpp:2976
+#: ../src/dialogs/clonetiler.cpp:2993
 msgid " R_eset "
-msgstr ""
+msgstr " א_יפוס "
 
 #. TRANSLATORS: "change" is a noun here
-#: ../src/dialogs/clonetiler.cpp:2978
-msgid ""
-"Reset all shifts, scales, rotates, opacity and color changes in the dialog "
-"to zero"
-msgstr ""
+#: ../src/dialogs/clonetiler.cpp:2995
+msgid "Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"
+msgstr "אפס את כל ההסטות, שינויי הגודל, ההטיות, האטימות ושינויי הצבעים בתיבת הדו־שיח לאפס"
 
 #: ../src/dialogs/debugdialog.cpp:135
 msgid "Messages"
-msgstr ""
+msgstr "הודעות"
 
 #. ## Add a menu for clear()
-#: ../src/dialogs/debugdialog.cpp:141 ../src/menus-skeleton.h:16
-#: ../src/ui/dialog/messages.cpp:54 ../src/ui/dialog/scriptdialog.cpp:208
+#: ../src/dialogs/debugdialog.cpp:141
+#: ../src/menus-skeleton.h:16
+#: ../src/ui/dialog/messages.cpp:52
+#: ../src/ui/dialog/scriptdialog.cpp:208
 msgid "_File"
-msgstr ""
+msgstr "_קובץ"
 
 #. TRANSLATORS: "Clear" is a verb here
-#: ../src/dialogs/debugdialog.cpp:142 ../src/dialogs/find.cpp:753
-#: ../src/ui/dialog/find.cpp:85 ../src/ui/dialog/messages.cpp:55
+#: ../src/dialogs/debugdialog.cpp:142
+#: ../src/dialogs/find.cpp:755
+#: ../src/ui/dialog/find.cpp:84
+#: ../src/ui/dialog/messages.cpp:53
 #: ../src/ui/dialog/scriptdialog.cpp:209
 msgid "_Clear"
-msgstr ""
+msgstr "_ניקוי"
 
-#: ../src/dialogs/debugdialog.cpp:144 ../src/ui/dialog/messages.cpp:57
+#: ../src/dialogs/debugdialog.cpp:144
+#: ../src/ui/dialog/messages.cpp:55
 msgid "Capture log messages"
-msgstr ""
+msgstr "לכוד הודעות בדוח"
 
-#: ../src/dialogs/debugdialog.cpp:146 ../src/ui/dialog/messages.cpp:59
+#: ../src/dialogs/debugdialog.cpp:146
+#: ../src/ui/dialog/messages.cpp:57
 msgid "Release log messages"
-msgstr ""
+msgstr "שחרר הודעות בדוח"
 
 #: ../src/dialogs/eek-color-def.cpp:56
 #: ../src/widgets/gradient-selector.cpp:162
 msgid "none"
-msgstr ""
+msgstr "ללא"
 
-#: ../src/dialogs/export.cpp:143 ../src/verbs.cpp:2532
+#: ../src/dialogs/export.cpp:143
+#: ../src/verbs.cpp:2599
 msgid "_Page"
-msgstr ""
+msgstr "_עמוד"
 
-#: ../src/dialogs/export.cpp:143 ../src/verbs.cpp:2536
+#: ../src/dialogs/export.cpp:143
+#: ../src/verbs.cpp:2603
 msgid "_Drawing"
-msgstr ""
+msgstr "_ציור"
 
-#: ../src/dialogs/export.cpp:143 ../src/verbs.cpp:2538
+#: ../src/dialogs/export.cpp:143
+#: ../src/verbs.cpp:2605
 msgid "_Selection"
-msgstr ""
+msgstr "_בחירה"
 
 #: ../src/dialogs/export.cpp:143
 msgid "_Custom"
-msgstr ""
+msgstr "_התאם אישית"
 
-#: ../src/dialogs/export.cpp:267
+#: ../src/dialogs/export.cpp:268
 msgid "<big><b>Export area</b></big>"
-msgstr ""
+msgstr "<big><b>אזור ייצוא</b></big>"
 
-#: ../src/dialogs/export.cpp:281
+#: ../src/dialogs/export.cpp:282
 msgid "Units:"
-msgstr ""
+msgstr "יחידות:"
 
-#: ../src/dialogs/export.cpp:309
+#: ../src/dialogs/export.cpp:310
 msgid "_x0:"
-msgstr ""
+msgstr "_x0:"
 
-#: ../src/dialogs/export.cpp:314
+#: ../src/dialogs/export.cpp:315
 msgid "x_1:"
-msgstr ""
+msgstr "x_1:"
 
-#. Stroke width
-#: ../src/dialogs/export.cpp:319 ../src/dialogs/object-attributes.cpp:60
+#: ../src/dialogs/export.cpp:320
+#: ../src/dialogs/object-attributes.cpp:60
 #: ../src/dialogs/object-attributes.cpp:68
-#: ../src/dialogs/stroke-style.cpp:1090 ../src/widgets/toolbox.cpp:3241
-#: ../src/widgets/toolbox.cpp:3645 ../src/widgets/toolbox.cpp:4318
+#: ../src/widgets/toolbox.cpp:3661
+#: ../src/widgets/toolbox.cpp:4251
+#: ../src/widgets/toolbox.cpp:5270
 msgid "Width:"
-msgstr ""
+msgstr "רוחב:"
 
-#: ../src/dialogs/export.cpp:325
+#: ../src/dialogs/export.cpp:326
 msgid "_y0:"
-msgstr ""
+msgstr "_y0:"
 
-#: ../src/dialogs/export.cpp:330
+#: ../src/dialogs/export.cpp:331
 msgid "y_1:"
-msgstr ""
+msgstr "y_1:"
 
-#: ../src/dialogs/export.cpp:335 ../src/dialogs/export.cpp:495
+#: ../src/dialogs/export.cpp:336
+#: ../src/dialogs/export.cpp:495
 #: ../src/dialogs/object-attributes.cpp:61
 #: ../src/dialogs/object-attributes.cpp:69
 msgid "Height:"
-msgstr ""
+msgstr "גובה:"
 
-#: ../src/dialogs/export.cpp:466
+#: ../src/dialogs/export.cpp:468
 msgid "<big><b>Bitmap size</b></big>"
-msgstr ""
+msgstr "<big><b>גודל מפת הסיביות</b></big>"
 
-#: ../src/dialogs/export.cpp:479 ../src/ui/widget/page-sizer.cpp:191
+#: ../src/dialogs/export.cpp:481
+#: ../src/ui/widget/page-sizer.cpp:209
 msgid "_Width:"
-msgstr ""
+msgstr "_רוחב:"
 
-#: ../src/dialogs/export.cpp:479 ../src/dialogs/export.cpp:495
+#: ../src/dialogs/export.cpp:481
+#: ../src/dialogs/export.cpp:495
 msgid "pixels at"
-msgstr ""
+msgstr "פיקסלים ב־"
 
 #: ../src/dialogs/export.cpp:489
 msgid "dp_i"
-msgstr ""
+msgstr "dp_i"
 
-#: ../src/dialogs/export.cpp:508 ../src/ui/dialog/inkscape-preferences.cpp:673
+#: ../src/dialogs/export.cpp:506
+#: ../src/ui/dialog/inkscape-preferences.cpp:723
+#: ../src/ui/dialog/inkscape-preferences.cpp:1083
 msgid "dpi"
-msgstr ""
+msgstr "dpi"
 
 #. true = has mnemonic
-#: ../src/dialogs/export.cpp:519
+#: ../src/dialogs/export.cpp:517
 msgid "<big><b>_Filename</b></big>"
-msgstr ""
+msgstr "<big><b>_שם הקובץ</b></big>"
 
-#: ../src/dialogs/export.cpp:590
+#: ../src/dialogs/export.cpp:588
 msgid "_Browse..."
-msgstr ""
+msgstr "_עיין..."
 
-#: ../src/dialogs/export.cpp:619
+#: ../src/dialogs/export.cpp:617
 msgid "Batch export all selected objects"
-msgstr ""
+msgstr "ייצא בנפרד את כל הפריטים הנבחרים"
 
-#: ../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 ""
+#: ../src/dialogs/export.cpp:621
+msgid "Export each selected object into its own PNG file, using export hints if any (caution, overwrites without asking!)"
+msgstr "ייצא כל פריט נבחר לקובץ PNG בפני עצמו, באמצעות רמזי ייצוא אם בכלל (זהירות, משכתב מבלי לשאול!)"
 
-#: ../src/dialogs/export.cpp:631
+#: ../src/dialogs/export.cpp:629
 msgid "Hide all except selected"
-msgstr ""
+msgstr "הסתר את הכל מלבד הנבחרים"
 
-#: ../src/dialogs/export.cpp:635
+#: ../src/dialogs/export.cpp:633
 msgid "In the exported image, hide all objects except those that are selected"
-msgstr ""
+msgstr "בתמונה המיוצאת, הסתר את כל הפריטים, מלבד אלו שנבחרו"
 
-#: ../src/dialogs/export.cpp:652
+#: ../src/dialogs/export.cpp:650
 msgid "_Export"
-msgstr ""
+msgstr "_ייצא"
 
-#: ../src/dialogs/export.cpp:656
+#: ../src/dialogs/export.cpp:654
 msgid "Export the bitmap file with these settings"
-msgstr ""
+msgstr "ייצא את קובץ מפת הסיביות עם הגדרות אלו"
 
-#: ../src/dialogs/export.cpp:682
+#: ../src/dialogs/export.cpp:680
 #, c-format
 msgid "Batch export %d selected object"
 msgid_plural "Batch export %d selected objects"
-msgstr[0] ""
+msgstr[0] "ייצא בצרור את %d הפריט הנבחר"
+msgstr[1] "ייצא בצרור את %d הפריטים הנבחרים"
 
-#: ../src/dialogs/export.cpp:1014
+#: ../src/dialogs/export.cpp:1011
 msgid "Export in progress"
-msgstr ""
+msgstr "ייצוא בתהליכים"
 
-#: ../src/dialogs/export.cpp:1084
+#: ../src/dialogs/export.cpp:1081
 #, c-format
 msgid "Exporting %d files"
-msgstr ""
+msgstr "מייצא %d קבצים"
 
-#: ../src/dialogs/export.cpp:1124 ../src/dialogs/export.cpp:1196
+#: ../src/dialogs/export.cpp:1121
+#: ../src/dialogs/export.cpp:1193
 #, c-format
 msgid "Could not export to filename %s.\n"
-msgstr ""
+msgstr "לא ניתן לייצא את שם הקובץ %s.\n"
 
-#: ../src/dialogs/export.cpp:1152
+#: ../src/dialogs/export.cpp:1149
 msgid "You have to enter a filename"
-msgstr ""
+msgstr "עליך להזין שם קובץ"
 
-#: ../src/dialogs/export.cpp:1157
+#: ../src/dialogs/export.cpp:1154
 msgid "The chosen area to be exported is invalid"
-msgstr ""
+msgstr "האיזור הנבחר לייצוא אינו תקני"
 
-#: ../src/dialogs/export.cpp:1166
+#: ../src/dialogs/export.cpp:1163
 #, c-format
 msgid "Directory %s does not exist or is not a directory.\n"
-msgstr ""
+msgstr "התיקיה %s אינה קיימת או שאינה תיקיה.\n"
 
-#: ../src/dialogs/export.cpp:1182
+#: ../src/dialogs/export.cpp:1179
 #, c-format
 msgid "Exporting %s (%lu x %lu)"
-msgstr ""
+msgstr "מייצא את %s (%lu x %lu)"
 
-#: ../src/dialogs/export.cpp:1303
+#: ../src/dialogs/export.cpp:1300
 msgid "Select a filename for exporting"
-msgstr ""
+msgstr "בחר שם קובץ לייצוא"
 
 #: ../src/dialogs/fill-style.cpp:283
 msgid "Change fill rule"
-msgstr ""
+msgstr "שנה את חוק המילוי"
 
-#: ../src/dialogs/fill-style.cpp:323 ../src/dialogs/fill-style.cpp:397
+#: ../src/dialogs/fill-style.cpp:323
+#: ../src/dialogs/fill-style.cpp:397
 msgid "Set fill color"
-msgstr ""
+msgstr "הגדר את צבע המילוי"
 
-#: ../src/dialogs/fill-style.cpp:385 ../src/ui/widget/selected-style.cpp:255
-#: ../src/ui/widget/selected-style.cpp:479
+#: ../src/dialogs/fill-style.cpp:385
+#: ../src/ui/widget/selected-style.cpp:255
+#: ../src/ui/widget/selected-style.cpp:475
 msgid "Remove fill"
-msgstr ""
+msgstr "הסר את המילוי"
 
 #: ../src/dialogs/fill-style.cpp:466
 msgid "Set gradient on fill"
-msgstr ""
+msgstr "הגדר מילוי מדורג"
 
 #: ../src/dialogs/fill-style.cpp:513
 msgid "Set pattern on fill"
-msgstr ""
+msgstr "הגדר תבנית למילוי"
 
 #. TRANSLATORS COMMENT: unset is a verb here
-#: ../src/dialogs/fill-style.cpp:528 ../src/ui/widget/selected-style.cpp:193
+#: ../src/dialogs/fill-style.cpp:528
+#: ../src/ui/widget/selected-style.cpp:193
 #: ../src/ui/widget/selected-style.cpp:251
-#: ../src/ui/widget/selected-style.cpp:497
-#: ../src/ui/widget/style-swatch.cpp:335
+#: ../src/ui/widget/selected-style.cpp:493
+#: ../src/ui/widget/style-swatch.cpp:303
 msgid "Unset fill"
-msgstr ""
+msgstr "בטל את הגדרת המילוי"
 
 #. TRANSLATORS: "%s" is replaced with "exact" or "partial" when this string is displayed
-#: ../src/dialogs/find.cpp:372 ../src/ui/dialog/find.cpp:436
+#: ../src/dialogs/find.cpp:373
+#: ../src/ui/dialog/find.cpp:435
 #, 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] ""
-msgstr[1] ""
+msgstr[0] "פריט <b>%d</b> נמצא (מתוך <b>%d</b>), %s התאמות."
+msgstr[1] "נמצאו <b>%d</b> פריטים (מתוך <b>%d</b>), %s התאמות."
 
-#: ../src/dialogs/find.cpp:375 ../src/ui/dialog/find.cpp:439
+#: ../src/dialogs/find.cpp:376
+#: ../src/ui/dialog/find.cpp:438
 msgid "exact"
-msgstr ""
+msgstr "מדוייק"
 
-#: ../src/dialogs/find.cpp:375 ../src/ui/dialog/find.cpp:439
+#: ../src/dialogs/find.cpp:376
+#: ../src/ui/dialog/find.cpp:438
 msgid "partial"
-msgstr ""
+msgstr "חלקי"
 
-#: ../src/dialogs/find.cpp:382 ../src/ui/dialog/find.cpp:446
+#: ../src/dialogs/find.cpp:383
+#: ../src/ui/dialog/find.cpp:445
 msgid "No objects found"
-msgstr ""
+msgstr "לא נמצאו פריטים"
 
-#: ../src/dialogs/find.cpp:540
+#: ../src/dialogs/find.cpp:541
 msgid "T_ype: "
-msgstr ""
+msgstr "_סוג: "
 
-#: ../src/dialogs/find.cpp:547 ../src/ui/dialog/find.cpp:70
+#: ../src/dialogs/find.cpp:548
+#: ../src/ui/dialog/find.cpp:69
 msgid "Search in all object types"
-msgstr ""
+msgstr "חפש בכל סוגי הפריטים"
 
-#: ../src/dialogs/find.cpp:547 ../src/ui/dialog/find.cpp:70
+#: ../src/dialogs/find.cpp:548
+#: ../src/ui/dialog/find.cpp:69
 msgid "All types"
-msgstr ""
+msgstr "כל הסוגים"
 
-#: ../src/dialogs/find.cpp:558 ../src/ui/dialog/find.cpp:71
+#: ../src/dialogs/find.cpp:559
+#: ../src/ui/dialog/find.cpp:70
 msgid "Search all shapes"
-msgstr ""
+msgstr "חפש את כל הצורות"
 
-#: ../src/dialogs/find.cpp:558 ../src/ui/dialog/find.cpp:71
+#: ../src/dialogs/find.cpp:559
+#: ../src/ui/dialog/find.cpp:70
 msgid "All shapes"
-msgstr ""
+msgstr "כל הצורות"
 
-#: ../src/dialogs/find.cpp:575 ../src/ui/dialog/find.cpp:72
+#: ../src/dialogs/find.cpp:576
+#: ../src/ui/dialog/find.cpp:71
 msgid "Search rectangles"
-msgstr ""
+msgstr "חפש מרובעים"
 
-#: ../src/dialogs/find.cpp:575 ../src/ui/dialog/find.cpp:72
+#: ../src/dialogs/find.cpp:576
+#: ../src/ui/dialog/find.cpp:71
 msgid "Rectangles"
-msgstr ""
+msgstr "מרובעים"
 
-#: ../src/dialogs/find.cpp:580 ../src/ui/dialog/find.cpp:73
+#: ../src/dialogs/find.cpp:581
+#: ../src/ui/dialog/find.cpp:72
 msgid "Search ellipses, arcs, circles"
-msgstr ""
+msgstr "חפש אליפסות, קשתות ומעגלים"
 
-#: ../src/dialogs/find.cpp:580 ../src/ui/dialog/find.cpp:73
+#: ../src/dialogs/find.cpp:581
+#: ../src/ui/dialog/find.cpp:72
 msgid "Ellipses"
-msgstr ""
+msgstr "אליפסות"
 
-#: ../src/dialogs/find.cpp:585 ../src/ui/dialog/find.cpp:74
+#: ../src/dialogs/find.cpp:586
+#: ../src/ui/dialog/find.cpp:73
 msgid "Search stars and polygons"
-msgstr ""
+msgstr "חפש כוכבים ומצולעים"
 
-#: ../src/dialogs/find.cpp:585 ../src/ui/dialog/find.cpp:74
+#: ../src/dialogs/find.cpp:586
+#: ../src/ui/dialog/find.cpp:73
 msgid "Stars"
-msgstr ""
+msgstr "כוכבים"
 
-#: ../src/dialogs/find.cpp:590 ../src/ui/dialog/find.cpp:75
+#: ../src/dialogs/find.cpp:591
+#: ../src/ui/dialog/find.cpp:74
 msgid "Search spirals"
-msgstr ""
+msgstr "חפש ספירלות"
 
-#: ../src/dialogs/find.cpp:590 ../src/ui/dialog/find.cpp:75
+#: ../src/dialogs/find.cpp:591
+#: ../src/ui/dialog/find.cpp:74
 msgid "Spirals"
-msgstr ""
+msgstr "ספירלות"
 
 #. TRANSLATORS: polyline is a set of connected straight line segments
 #. http://www.w3.org/TR/SVG11/shapes.html#PolylineElement
-#: ../src/dialogs/find.cpp:603 ../src/ui/dialog/find.cpp:76
+#: ../src/dialogs/find.cpp:604
+#: ../src/ui/dialog/find.cpp:75
 msgid "Search paths, lines, polylines"
-msgstr ""
+msgstr "חפש נתיבים, קווים, קו שבור"
 
-#: ../src/dialogs/find.cpp:603 ../src/ui/dialog/find.cpp:76
+#: ../src/dialogs/find.cpp:604
+#: ../src/ui/dialog/find.cpp:75
 msgid "Paths"
-msgstr ""
+msgstr "נתיבים"
 
-#: ../src/dialogs/find.cpp:608 ../src/ui/dialog/find.cpp:77
+#: ../src/dialogs/find.cpp:609
+#: ../src/ui/dialog/find.cpp:76
 msgid "Search text objects"
-msgstr ""
+msgstr "חפש פריטי טקסט"
 
-#: ../src/dialogs/find.cpp:608 ../src/ui/dialog/find.cpp:77
+#: ../src/dialogs/find.cpp:609
+#: ../src/ui/dialog/find.cpp:76
 msgid "Texts"
-msgstr ""
+msgstr "טקסטים"
 
-#: ../src/dialogs/find.cpp:613 ../src/ui/dialog/find.cpp:78
+#: ../src/dialogs/find.cpp:614
+#: ../src/ui/dialog/find.cpp:77
 msgid "Search groups"
-msgstr ""
+msgstr "חפש קבוצות"
 
-#: ../src/dialogs/find.cpp:613 ../src/ui/dialog/find.cpp:78
+#: ../src/dialogs/find.cpp:614
+#: ../src/ui/dialog/find.cpp:77
 msgid "Groups"
-msgstr ""
+msgstr "קבוצות"
 
-#: ../src/dialogs/find.cpp:618 ../src/ui/dialog/find.cpp:81
+#: ../src/dialogs/find.cpp:619
+#: ../src/ui/dialog/find.cpp:80
 msgid "Search clones"
-msgstr ""
+msgstr "חפש כפילים"
 
 #. TRANSLATORS: Translate the word "Clones" only. A noun indicating type of object to find
-#: ../src/dialogs/find.cpp:620 ../src/ui/dialog/find.cpp:81
+#: ../src/dialogs/find.cpp:621
+#: ../src/ui/dialog/find.cpp:80
 msgid "find|Clones"
-msgstr ""
+msgstr "find|כפילים"
 
-#: ../src/dialogs/find.cpp:625 ../src/ui/dialog/find.cpp:82
+#: ../src/dialogs/find.cpp:626
+#: ../src/ui/dialog/find.cpp:81
 msgid "Search images"
-msgstr ""
+msgstr "חפש תמונות"
 
-#: ../src/dialogs/find.cpp:625 ../src/ui/dialog/find.cpp:82
+#: ../src/dialogs/find.cpp:626
+#: ../src/ui/dialog/find.cpp:81
 #: ../share/extensions/embedimage.inx.h:3
 #: ../share/extensions/extractimage.inx.h:2
 msgid "Images"
-msgstr ""
+msgstr "תמונות"
 
-#: ../src/dialogs/find.cpp:630 ../src/ui/dialog/find.cpp:83
+#: ../src/dialogs/find.cpp:631
+#: ../src/ui/dialog/find.cpp:82
 msgid "Search offset objects"
-msgstr ""
+msgstr "חפש פריטי קיזוז"
 
-#: ../src/dialogs/find.cpp:630 ../src/ui/dialog/find.cpp:83
+#: ../src/dialogs/find.cpp:631
+#: ../src/ui/dialog/find.cpp:82
 msgid "Offsets"
-msgstr ""
+msgstr "קיזוזים"
 
-#: ../src/dialogs/find.cpp:694 ../src/ui/dialog/find.cpp:61
+#: ../src/dialogs/find.cpp:696
+#: ../src/ui/dialog/find.cpp:60
 msgid "_Text: "
-msgstr ""
+msgstr "_טקסט: "
 
-#: ../src/dialogs/find.cpp:694 ../src/ui/dialog/find.cpp:61
+#: ../src/dialogs/find.cpp:696
+#: ../src/ui/dialog/find.cpp:60
 msgid "Find objects by their text content (exact or partial match)"
-msgstr ""
+msgstr "מצא פריטים לפי תוכן הטקסט שלהם (התאמה מלאה או חלקית)"
 
-#: ../src/dialogs/find.cpp:695 ../src/ui/dialog/find.cpp:62
+#: ../src/dialogs/find.cpp:697
+#: ../src/ui/dialog/find.cpp:61
 msgid "_ID: "
-msgstr ""
+msgstr "_מזהה: "
 
-#: ../src/dialogs/find.cpp:695 ../src/ui/dialog/find.cpp:62
+#: ../src/dialogs/find.cpp:697
+#: ../src/ui/dialog/find.cpp:61
 msgid "Find objects by the value of the id attribute (exact or partial match)"
-msgstr ""
+msgstr "מצא פריטים לפי ערך מזהה המאפיין (התאמה מלאה או חלקית)"
 
-#: ../src/dialogs/find.cpp:696 ../src/ui/dialog/find.cpp:63
+#: ../src/dialogs/find.cpp:698
+#: ../src/ui/dialog/find.cpp:62
 msgid "_Style: "
-msgstr ""
+msgstr "_סגנון: "
 
-#: ../src/dialogs/find.cpp:696 ../src/ui/dialog/find.cpp:63
-msgid ""
-"Find objects by the value of the style attribute (exact or partial match)"
-msgstr ""
+#: ../src/dialogs/find.cpp:698
+#: ../src/ui/dialog/find.cpp:62
+msgid "Find objects by the value of the style attribute (exact or partial match)"
+msgstr "מצא פריטים לפי ערך מאפיין הסגנון (התאמה מלאה או חלקית)"
 
-#: ../src/dialogs/find.cpp:697 ../src/ui/dialog/find.cpp:64
+#: ../src/dialogs/find.cpp:699
+#: ../src/ui/dialog/find.cpp:63
 msgid "_Attribute: "
-msgstr ""
+msgstr "_מאפיין: "
 
-#: ../src/dialogs/find.cpp:697 ../src/ui/dialog/find.cpp:64
+#: ../src/dialogs/find.cpp:699
+#: ../src/ui/dialog/find.cpp:63
 msgid "Find objects by the name of an attribute (exact or partial match)"
-msgstr ""
+msgstr "חפש פריטים לפי שם המאפיין (התאמה מלאה או חלקית)"
 
-#: ../src/dialogs/find.cpp:711 ../src/ui/dialog/find.cpp:65
+#: ../src/dialogs/find.cpp:713
+#: ../src/ui/dialog/find.cpp:64
 msgid "Search in s_election"
-msgstr ""
+msgstr "חפש ב_בחירה"
 
-#: ../src/dialogs/find.cpp:715 ../src/ui/dialog/find.cpp:65
+#: ../src/dialogs/find.cpp:717
+#: ../src/ui/dialog/find.cpp:64
 msgid "Limit search to the current selection"
-msgstr ""
+msgstr "הגבל את החיפוש לבחירה הנוכחית"
 
-#: ../src/dialogs/find.cpp:720 ../src/ui/dialog/find.cpp:66
+#: ../src/dialogs/find.cpp:722
+#: ../src/ui/dialog/find.cpp:65
 msgid "Search in current _layer"
-msgstr ""
+msgstr "חפש ב_שכבה הנוכחית"
 
-#: ../src/dialogs/find.cpp:724 ../src/ui/dialog/find.cpp:66
+#: ../src/dialogs/find.cpp:726
+#: ../src/ui/dialog/find.cpp:65
 msgid "Limit search to the current layer"
-msgstr ""
+msgstr "הגבל את החיפוש לשכבה הנוכחית"
 
-#: ../src/dialogs/find.cpp:729 ../src/ui/dialog/find.cpp:67
+#: ../src/dialogs/find.cpp:731
+#: ../src/ui/dialog/find.cpp:66
 msgid "Include _hidden"
-msgstr ""
+msgstr "כלול _מוסתרים"
 
-#: ../src/dialogs/find.cpp:733 ../src/ui/dialog/find.cpp:67
+#: ../src/dialogs/find.cpp:735
+#: ../src/ui/dialog/find.cpp:66
 msgid "Include hidden objects in search"
-msgstr ""
+msgstr "כלול פריטים מוסתרים בחיפוש"
 
-#: ../src/dialogs/find.cpp:738 ../src/ui/dialog/find.cpp:68
+#: ../src/dialogs/find.cpp:740
+#: ../src/ui/dialog/find.cpp:67
 msgid "Include l_ocked"
-msgstr ""
+msgstr "כלול _נעולים"
 
-#: ../src/dialogs/find.cpp:742 ../src/ui/dialog/find.cpp:68
+#: ../src/dialogs/find.cpp:744
+#: ../src/ui/dialog/find.cpp:67
 msgid "Include locked objects in search"
-msgstr ""
+msgstr "כלול פריטים נעולים בחיפוש"
 
-#: ../src/dialogs/find.cpp:753 ../src/ui/dialog/find.cpp:85
+#: ../src/dialogs/find.cpp:755
+#: ../src/ui/dialog/find.cpp:84
 msgid "Clear values"
-msgstr ""
+msgstr "נקה ערכים"
 
-#: ../src/dialogs/find.cpp:754 ../src/ui/dialog/find.cpp:86
+#: ../src/dialogs/find.cpp:756
+#: ../src/ui/dialog/find.cpp:85
 msgid "_Find"
-msgstr ""
+msgstr "_חפש"
 
-#: ../src/dialogs/find.cpp:754 ../src/ui/dialog/find.cpp:86
+#: ../src/dialogs/find.cpp:756
+#: ../src/ui/dialog/find.cpp:85
 msgid "Select objects matching all of the fields you filled in"
-msgstr ""
+msgstr "בחר פרטים העונים לכל השדות שמלאת"
 
 #: ../src/dialogs/guidelinedialog.cpp:44
-#, fuzzy
 msgid "Unit:"
-msgstr "יחידה"
+msgstr "יחידה:"
 
 #: ../src/dialogs/guidelinedialog.cpp:45
 #: ../src/dialogs/object-attributes.cpp:58
-#: ../src/dialogs/object-attributes.cpp:66 ../src/widgets/toolbox.cpp:1248
+#: ../src/dialogs/object-attributes.cpp:66
+#: ../src/widgets/toolbox.cpp:1455
 msgid "X:"
-msgstr ""
+msgstr "X:"
 
 #: ../src/dialogs/guidelinedialog.cpp:46
 #: ../src/dialogs/object-attributes.cpp:59
-#: ../src/dialogs/object-attributes.cpp:67 ../src/widgets/toolbox.cpp:1266
+#: ../src/dialogs/object-attributes.cpp:67
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Y:"
-msgstr ""
+msgstr "Y:"
 
 #: ../src/dialogs/guidelinedialog.cpp:47
-#, fuzzy
 msgid "Angle (degrees):"
-msgstr "×\9e×¢×\9c×\95ת"
+msgstr "×\96×\95×\95×\99ת (×\9e×¢×\9c×\95ת):"
 
 #: ../src/dialogs/guidelinedialog.cpp:48
 msgid "Rela_tive change"
-msgstr ""
+msgstr "שינוי י_חסי"
 
 #: ../src/dialogs/guidelinedialog.cpp:48
 msgid "Move and/or rotate the guide relative to current settings"
-msgstr ""
+msgstr "הזז ו/או הטה את הקו המנחה ביחס להגדרותיו הנוכחיות"
 
 #: ../src/dialogs/guidelinedialog.cpp:114
 msgid "Set guide properties"
-msgstr ""
+msgstr "הגדר את מאפייני הקו המנחה"
 
 #: ../src/dialogs/guidelinedialog.cpp:153
 msgid "Guideline"
-msgstr ""
+msgstr "קו־מנחה"
 
 #: ../src/dialogs/guidelinedialog.cpp:241
 #, c-format
 msgid "Guideline ID: %s"
-msgstr ""
+msgstr "מזהה הקו המנחה: %s"
 
 #: ../src/dialogs/guidelinedialog.cpp:247
-#, fuzzy, c-format
+#, c-format
 msgid "Current: %s"
-msgstr "ש×\9b×\91×\94 × ×\95×\9b×\97×\99ת"
+msgstr "× ×\95×\9b×\97×\99: %s"
 
-#: ../src/dialogs/iconpreview.cpp:139
+#: ../src/dialogs/iconpreview.cpp:132
 #, c-format
 msgid "%d x %d"
-msgstr ""
+msgstr "%d x %d"
 
-#: ../src/dialogs/iconpreview.cpp:187
-#: ../src/ui/dialog/align-and-distribute.cpp:905
+#: ../src/dialogs/iconpreview.cpp:180
+#: ../src/ui/dialog/align-and-distribute.cpp:925
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1368
 #: ../src/widgets/desktop-widget.cpp:1552
 msgid "Selection"
-msgstr ""
+msgstr "בחירה"
 
-#: ../src/dialogs/iconpreview.cpp:189
+#: ../src/dialogs/iconpreview.cpp:182
 msgid "Selection only or whole document"
-msgstr ""
+msgstr "בחירה בלבד או המסמך כולו"
 
-#: ../src/dialogs/iconpreview.cpp:197
+#: ../src/dialogs/iconpreview.cpp:190
 msgid "Refresh the icons"
-msgstr ""
+msgstr "רענן את הסמלים"
 
 #. Create the label for the object id
-#: ../src/dialogs/item-properties.cpp:120
-#: ../src/dialogs/item-properties.cpp:322
-#: ../src/dialogs/item-properties.cpp:413
+#: ../src/dialogs/item-properties.cpp:121
+#: ../src/dialogs/item-properties.cpp:327
 #: ../src/dialogs/item-properties.cpp:420
+#: ../src/dialogs/item-properties.cpp:427
 msgid "_Id"
-msgstr ""
+msgstr "_מזהה"
 
-#: ../src/dialogs/item-properties.cpp:129
-msgid ""
-"The id= attribute (only letters, digits, and the characters .-_: allowed)"
-msgstr ""
+#: ../src/dialogs/item-properties.cpp:130
+msgid "The id= attribute (only letters, digits, and the characters .-_: allowed)"
+msgstr "ערך המזהה יכול להכיל אותיות באנגלית, ספרות והתווים .-_:"
 
 #. Button for setting the object's id, label, title and description.
-#: ../src/dialogs/item-properties.cpp:143 ../src/verbs.cpp:2401
-#: ../src/verbs.cpp:2407
+#: ../src/dialogs/item-properties.cpp:144
+#: ../src/verbs.cpp:2462
+#: ../src/verbs.cpp:2468
 msgid "_Set"
-msgstr ""
+msgstr "ה_גדר"
 
 #. Create the label for the object label
-#: ../src/dialogs/item-properties.cpp:152
+#: ../src/dialogs/item-properties.cpp:153
 msgid "_Label"
-msgstr ""
+msgstr "_תווית"
 
-#: ../src/dialogs/item-properties.cpp:161
+#: ../src/dialogs/item-properties.cpp:162
 msgid "A freeform label for the object"
-msgstr ""
+msgstr "תווית חופשית עבור הפריט"
 
 #. Create the label for the object title
-#: ../src/dialogs/item-properties.cpp:173 ../src/dialogs/rdf.cpp:238
-msgid "Title"
-msgstr ""
+#: ../src/dialogs/item-properties.cpp:174
+msgid "_Title"
+msgstr "_כותרת"
 
 #. Create the frame for the object description
-#: ../src/dialogs/item-properties.cpp:190 ../src/dialogs/rdf.cpp:282
-#: ../src/ui/widget/page-sizer.cpp:200
-msgid "Description"
-msgstr ""
+#: ../src/dialogs/item-properties.cpp:192
+msgid "_Description"
+msgstr "_תיאור"
 
 #. Hide
-#: ../src/dialogs/item-properties.cpp:218
+#: ../src/dialogs/item-properties.cpp:223
 msgid "_Hide"
-msgstr ""
+msgstr "ה_סתר"
 
-#: ../src/dialogs/item-properties.cpp:219
+#: ../src/dialogs/item-properties.cpp:224
 msgid "Check to make the object invisible"
-msgstr ""
+msgstr "סמן כדי להפוך את הפריט לבלתי נראה"
 
 #. Lock
 #. TRANSLATORS: "Lock" is a verb here
-#: ../src/dialogs/item-properties.cpp:228
+#: ../src/dialogs/item-properties.cpp:233
 msgid "L_ock"
-msgstr ""
+msgstr "_נעל"
 
-#: ../src/dialogs/item-properties.cpp:229
+#: ../src/dialogs/item-properties.cpp:234
 msgid "Check to make the object insensitive (not selectable by mouse)"
-msgstr ""
+msgstr "סמן כדי להפוך את הפריט לבלתי רגיש (לא ניתן לבחירה עם העכבר)"
 
-#: ../src/dialogs/item-properties.cpp:305
-#: ../src/dialogs/item-properties.cpp:312
+#: ../src/dialogs/item-properties.cpp:310
+#: ../src/dialogs/item-properties.cpp:317
 msgid "Ref"
-msgstr ""
+msgstr "הפניה"
 
-#: ../src/dialogs/item-properties.cpp:372
+#: ../src/dialogs/item-properties.cpp:379
 msgid "Lock object"
-msgstr ""
+msgstr "נעל פריט"
 
-#: ../src/dialogs/item-properties.cpp:372
+#: ../src/dialogs/item-properties.cpp:379
 msgid "Unlock object"
-msgstr ""
+msgstr "שחרר פריט"
 
-#: ../src/dialogs/item-properties.cpp:391
+#: ../src/dialogs/item-properties.cpp:398
 msgid "Hide object"
-msgstr ""
+msgstr "הסתר את הפריט"
 
-#: ../src/dialogs/item-properties.cpp:391
+#: ../src/dialogs/item-properties.cpp:398
 msgid "Unhide object"
-msgstr ""
+msgstr "הצג את הפריט"
 
-#: ../src/dialogs/item-properties.cpp:415
+#: ../src/dialogs/item-properties.cpp:422
 msgid "Id invalid! "
-msgstr ""
+msgstr "מזהה שגוי! "
 
-#: ../src/dialogs/item-properties.cpp:417
+#: ../src/dialogs/item-properties.cpp:424
 msgid "Id exists! "
-msgstr ""
+msgstr "מזהה קיים! "
 
-#: ../src/dialogs/item-properties.cpp:424
+#: ../src/dialogs/item-properties.cpp:431
 msgid "Set object ID"
-msgstr ""
+msgstr "הגדר מזהה פריט"
 
-#: ../src/dialogs/item-properties.cpp:439
+#: ../src/dialogs/item-properties.cpp:446
 msgid "Set object label"
-msgstr ""
+msgstr "הגדר תווית לפריט"
 
-#: ../src/dialogs/item-properties.cpp:450
+#: ../src/dialogs/item-properties.cpp:454
 msgid "Set object title"
-msgstr ""
+msgstr "הגדר כותרת לפריט"
 
-#: ../src/dialogs/item-properties.cpp:465
+#: ../src/dialogs/item-properties.cpp:464
 msgid "Set object description"
-msgstr ""
+msgstr "הגדר את תיאור הפריט"
 
 #: ../src/dialogs/layer-properties.cpp:47
 msgid "Layer name:"
-msgstr ""
+msgstr "שם השכבה:"
 
 #: ../src/dialogs/layer-properties.cpp:115
 msgid "Add layer"
-msgstr ""
+msgstr "הוסף שכבה"
 
 #: ../src/dialogs/layer-properties.cpp:153
 msgid "Above current"
-msgstr ""
+msgstr "מעל לנוכחית"
 
 #: ../src/dialogs/layer-properties.cpp:157
 msgid "Below current"
-msgstr ""
+msgstr "מתחת לנוכחית"
 
 #: ../src/dialogs/layer-properties.cpp:160
 msgid "As sublayer of current"
-msgstr ""
+msgstr "כתת־שכבה של הנוכחית"
 
 #: ../src/dialogs/layer-properties.cpp:164
 msgid "Position:"
-msgstr ""
+msgstr "מיקום:"
 
 #: ../src/dialogs/layer-properties.cpp:182
 msgid "Rename Layer"
-msgstr ""
+msgstr "שינוי שם השכבה"
 
 #: ../src/dialogs/layer-properties.cpp:185
 msgid "_Rename"
-msgstr ""
+msgstr "_שנה שם"
 
 #: ../src/dialogs/layer-properties.cpp:195
 msgid "Rename layer"
-msgstr ""
+msgstr "שנה את שם השכבה"
 
 #. TRANSLATORS: This means "The layer has been renamed"
 #: ../src/dialogs/layer-properties.cpp:197
 msgid "Renamed layer"
-msgstr ""
+msgstr "שם השכבה השתנה"
 
 #: ../src/dialogs/layer-properties.cpp:201
 msgid "Add Layer"
-msgstr ""
+msgstr "הוסף שכבה"
 
 #: ../src/dialogs/layer-properties.cpp:203
 msgid "_Add"
-msgstr ""
+msgstr "_הוסף"
 
 #: ../src/dialogs/layer-properties.cpp:225
 msgid "New layer created."
-msgstr ""
+msgstr "נוצרה שכבה חדשה"
 
-#: ../src/dialogs/layers-panel.cpp:579 ../src/widgets/layer-selector.cpp:595
+#: ../src/dialogs/layers-panel.cpp:494
+#: ../src/widgets/layer-selector.cpp:595
 msgid "Unhide layer"
-msgstr ""
+msgstr "הצג את השכבה"
 
-#: ../src/dialogs/layers-panel.cpp:579 ../src/widgets/layer-selector.cpp:595
+#: ../src/dialogs/layers-panel.cpp:494
+#: ../src/widgets/layer-selector.cpp:595
 msgid "Hide layer"
-msgstr ""
+msgstr "הסתר את השכבה"
 
-#: ../src/dialogs/layers-panel.cpp:590 ../src/widgets/layer-selector.cpp:587
+#: ../src/dialogs/layers-panel.cpp:505
+#: ../src/widgets/layer-selector.cpp:587
 msgid "Lock layer"
-msgstr ""
+msgstr "נעל את השכבה"
 
-#: ../src/dialogs/layers-panel.cpp:590 ../src/widgets/layer-selector.cpp:587
+#: ../src/dialogs/layers-panel.cpp:505
+#: ../src/widgets/layer-selector.cpp:587
 msgid "Unlock layer"
-msgstr ""
+msgstr "שחרר את השכבה"
+
+#: ../src/dialogs/layers-panel.cpp:646
+msgid "Layers"
+msgstr "שכבות"
 
-#: ../src/dialogs/layers-panel.cpp:735
+#: ../src/dialogs/layers-panel.cpp:655
 msgid "New"
-msgstr ""
+msgstr "חדש"
 
-#: ../src/dialogs/layers-panel.cpp:740 ../share/extensions/restack.inx.h:16
+#: ../src/dialogs/layers-panel.cpp:660
+#: ../share/extensions/restack.inx.h:16
 msgid "Top"
-msgstr ""
+msgstr "עליון"
 
-#: ../src/dialogs/layers-panel.cpp:746
+#: ../src/dialogs/layers-panel.cpp:666
 msgid "Up"
-msgstr ""
+msgstr "למעלה"
 
-#: ../src/dialogs/layers-panel.cpp:752
+#: ../src/dialogs/layers-panel.cpp:672
 msgid "Dn"
-msgstr ""
+msgstr "מטה"
 
-#: ../src/dialogs/layers-panel.cpp:758
+#: ../src/dialogs/layers-panel.cpp:678
 msgid "Bot"
-msgstr ""
+msgstr "תחתית"
 
-#: ../src/dialogs/layers-panel.cpp:768
+#: ../src/dialogs/layers-panel.cpp:688
 msgid "X"
-msgstr ""
+msgstr "X"
 
 #: ../src/dialogs/object-attributes.cpp:39
 msgid "Href:"
-msgstr ""
+msgstr "קישור:"
 
 #: ../src/dialogs/object-attributes.cpp:40
 msgid "Target:"
-msgstr ""
+msgstr "יעד:"
 
 #: ../src/dialogs/object-attributes.cpp:41
 msgid "Type:"
-msgstr ""
+msgstr "סוג:"
 
 #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/linking.html#AElementXLinkRoleAttribute
 #. Identifies the type of the related resource with an absolute URI
 #: ../src/dialogs/object-attributes.cpp:44
 msgid "Role:"
-msgstr ""
+msgstr "תפקיד:"
 
 #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/linking.html#AElementXLinkArcRoleAttribute
 #. For situations where the nature/role alone isn't enough, this offers an additional URI defining the purpose of the link.
 #: ../src/dialogs/object-attributes.cpp:47
 msgid "Arcrole:"
-msgstr ""
+msgstr "תפקיד יחסי:"
 
 #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/linking.html#AElementXLinkTitleAttribute
 #: ../src/dialogs/object-attributes.cpp:49
 msgid "Title:"
-msgstr ""
+msgstr "כותרת:"
 
 #: ../src/dialogs/object-attributes.cpp:50
-#: ../share/extensions/polyhedron_3d.inx.h:38
+#: ../share/extensions/polyhedron_3d.inx.h:37
 msgid "Show:"
-msgstr ""
+msgstr "הצג:"
 
 #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/linking.html#AElementXLinkActuateAttribute
 #: ../src/dialogs/object-attributes.cpp:52
 msgid "Actuate:"
-msgstr ""
+msgstr "הפעלה:"
 
 #: ../src/dialogs/object-attributes.cpp:57
 msgid "URL:"
-msgstr ""
+msgstr "כתובת אינטרנט:"
 
 #: ../src/dialogs/object-attributes.cpp:113
 #, c-format
 msgid "%s Properties"
-msgstr ""
+msgstr "מאפייני %s"
 
-#: ../src/dialogs/rdf.cpp:181
+#: ../src/dialogs/rdf.cpp:182
 msgid "CC Attribution"
-msgstr ""
+msgstr "ייחוס CC"
 
-#: ../src/dialogs/rdf.cpp:186
+#: ../src/dialogs/rdf.cpp:187
 msgid "CC Attribution-ShareAlike"
-msgstr ""
+msgstr "ייחוס CC - שיתוף זהה"
 
-#: ../src/dialogs/rdf.cpp:191
+#: ../src/dialogs/rdf.cpp:192
 msgid "CC Attribution-NoDerivs"
-msgstr ""
+msgstr "ייחוס CC - איסור יצירה נגזרת"
 
-#: ../src/dialogs/rdf.cpp:196
+#: ../src/dialogs/rdf.cpp:197
 msgid "CC Attribution-NonCommercial"
-msgstr ""
+msgstr "ייחוס CC - שימוש לא מסחרי"
 
-#: ../src/dialogs/rdf.cpp:201
+#: ../src/dialogs/rdf.cpp:202
 msgid "CC Attribution-NonCommercial-ShareAlike"
-msgstr ""
+msgstr "ייחוס CC - שימוש לא מסחרי־שיתוף זהה"
 
-#: ../src/dialogs/rdf.cpp:206
+#: ../src/dialogs/rdf.cpp:207
 msgid "CC Attribution-NonCommercial-NoDerivs"
-msgstr ""
+msgstr "ייחוס CC - שימוש לא מסחרי־איסור יצירה נגזרת"
 
-#: ../src/dialogs/rdf.cpp:211
+#: ../src/dialogs/rdf.cpp:212
 msgid "Public Domain"
-msgstr ""
+msgstr "רשות הציבור"
 
-#: ../src/dialogs/rdf.cpp:216
+#: ../src/dialogs/rdf.cpp:217
 msgid "FreeArt"
-msgstr ""
+msgstr "אומנות חופשית"
 
-#: ../src/dialogs/rdf.cpp:221
+#: ../src/dialogs/rdf.cpp:222
 msgid "Open Font License"
-msgstr ""
+msgstr "רשיון גופן פתוח"
 
 #: ../src/dialogs/rdf.cpp:239
+msgid "Title"
+msgstr "כותרת"
+
+#: ../src/dialogs/rdf.cpp:240
 msgid "Name by which this document is formally known."
-msgstr ""
+msgstr "שם המייצג מסמך זה"
 
-#: ../src/dialogs/rdf.cpp:241
+#: ../src/dialogs/rdf.cpp:242
 msgid "Date"
-msgstr ""
+msgstr "תאריך"
 
-#: ../src/dialogs/rdf.cpp:242
+#: ../src/dialogs/rdf.cpp:243
 msgid "Date associated with the creation of this document (YYYY-MM-DD)."
-msgstr ""
+msgstr "תאריך המשוייך עם יצירת מסמך זה (YYYY-MM-DD)"
 
-#: ../src/dialogs/rdf.cpp:244
+#: ../src/dialogs/rdf.cpp:245
 msgid "Format"
-msgstr ""
+msgstr "תבנית"
 
-#: ../src/dialogs/rdf.cpp:245
+#: ../src/dialogs/rdf.cpp:246
 msgid "The physical or digital manifestation of this document (MIME type)."
-msgstr ""
+msgstr "צורת הפירסום הפיזית או הדיגיטאלית של מסמך זה (טיפוס MIME)"
 
 #. _settings->add_checkbutton(false, SP_ATTR_STITCHTILES, _("Stitch Tiles"), "stitch", "noStitch");
-#: ../src/dialogs/rdf.cpp:247 ../src/extension/internal/bitmap/addNoise.cpp:46
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2194
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2273
+#: ../src/dialogs/rdf.cpp:248
+#: ../src/extension/internal/bitmap/addNoise.cpp:46
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2208
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2287
 msgid "Type"
-msgstr ""
+msgstr "סוג"
 
-#: ../src/dialogs/rdf.cpp:248
+#: ../src/dialogs/rdf.cpp:249
 msgid "Type of document (DCMI Type)."
-msgstr ""
+msgstr "סוג המסמך (סוג DCMI)"
 
-#: ../src/dialogs/rdf.cpp:251
+#: ../src/dialogs/rdf.cpp:252
 msgid "Creator"
-msgstr ""
+msgstr "יוצר"
 
-#: ../src/dialogs/rdf.cpp:252
-msgid ""
-"Name of entity primarily responsible for making the content of this document."
-msgstr ""
+#: ../src/dialogs/rdf.cpp:253
+msgid "Name of entity primarily responsible for making the content of this document."
+msgstr "שם הישות האחראית ליצירת תוכן מסמך זה."
 
-#: ../src/dialogs/rdf.cpp:254
+#: ../src/dialogs/rdf.cpp:255
 msgid "Rights"
-msgstr ""
+msgstr "זכויות"
 
-#: ../src/dialogs/rdf.cpp:255
-msgid ""
-"Name of entity with rights to the Intellectual Property of this document."
-msgstr ""
+#: ../src/dialogs/rdf.cpp:256
+msgid "Name of entity with rights to the Intellectual Property of this document."
+msgstr "שם הישות האחראית לנכס האינטלקטואלי במסמך זה."
 
-#: ../src/dialogs/rdf.cpp:257
+#: ../src/dialogs/rdf.cpp:258
 msgid "Publisher"
-msgstr ""
+msgstr "מפרסם"
 
-#: ../src/dialogs/rdf.cpp:258
+#: ../src/dialogs/rdf.cpp:259
 msgid "Name of entity responsible for making this document available."
-msgstr ""
+msgstr "שם הישות האחראית להיותו של מסמך זה זמין."
 
-#: ../src/dialogs/rdf.cpp:261
+#: ../src/dialogs/rdf.cpp:262
 msgid "Identifier"
-msgstr ""
+msgstr "מזהה"
 
-#: ../src/dialogs/rdf.cpp:262
+#: ../src/dialogs/rdf.cpp:263
 msgid "Unique URI to reference this document."
-msgstr ""
+msgstr "כתובת הפנייה ייחודית למסמך זה."
 
-#: ../src/dialogs/rdf.cpp:264 ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1392
+#: ../src/dialogs/rdf.cpp:265
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1392
 msgid "Source"
-msgstr ""
+msgstr "מקור"
 
-#: ../src/dialogs/rdf.cpp:265
+#: ../src/dialogs/rdf.cpp:266
 msgid "Unique URI to reference the source of this document."
-msgstr ""
+msgstr "כתובת הפנייה יחודית למקור של מסמך זה."
 
-#: ../src/dialogs/rdf.cpp:267
+#: ../src/dialogs/rdf.cpp:268
 msgid "Relation"
-msgstr ""
+msgstr "התייחסות"
 
-#: ../src/dialogs/rdf.cpp:268
+#: ../src/dialogs/rdf.cpp:269
 msgid "Unique URI to a related document."
-msgstr ""
+msgstr "קישור ייחודי למסמך קשור."
 
-#: ../src/dialogs/rdf.cpp:270
+#: ../src/dialogs/rdf.cpp:271
 msgid "Language"
-msgstr ""
+msgstr "שפה"
 
-#: ../src/dialogs/rdf.cpp:271
-msgid ""
-"Two-letter language tag with optional subtags for the language of this "
-"document.  (e.g. 'en-GB')"
-msgstr ""
+#: ../src/dialogs/rdf.cpp:272
+msgid "Two-letter language tag with optional subtags for the language of this document.  (e.g. 'en-GB')"
+msgstr "תגית המורכבת משתי אותיות או עם תוספת של תת־תגית עבור שפת מסמך זה (לדוגמה: 'he-IL')."
 
-#: ../src/dialogs/rdf.cpp:273
+#: ../src/dialogs/rdf.cpp:274
 msgid "Keywords"
-msgstr ""
+msgstr "מילות מפתח"
 
-#: ../src/dialogs/rdf.cpp:274
-msgid ""
-"The topic of this document as comma-separated key words, phrases, or "
-"classifications."
-msgstr ""
+#: ../src/dialogs/rdf.cpp:275
+msgid "The topic of this document as comma-separated key words, phrases, or classifications."
+msgstr "הנושא בו עוסק מסמך זה בתור מילות מפתח, צירופי מילים או מילות מיון המופרדים בפסיקים"
 
 #. TRANSLATORS: "Coverage": the spatial or temporal characteristics of the content.
 #. For info, see Appendix D of http://www.w3.org/TR/1998/WD-rdf-schema-19980409/
-#: ../src/dialogs/rdf.cpp:278
+#: ../src/dialogs/rdf.cpp:279
 msgid "Coverage"
-msgstr ""
+msgstr "כיסוי"
 
-#: ../src/dialogs/rdf.cpp:279
+#: ../src/dialogs/rdf.cpp:280
 msgid "Extent or scope of this document."
-msgstr ""
+msgstr "היקף או טווח מסמך זה"
 
 #: ../src/dialogs/rdf.cpp:283
+#: ../src/ui/widget/page-sizer.cpp:218
+msgid "Description"
+msgstr "תיאור"
+
+#: ../src/dialogs/rdf.cpp:284
 msgid "A short account of the content of this document."
-msgstr ""
+msgstr "התייחסות קצרה לתוכן מסמך זה"
 
 #. FIXME: need to handle 1 agent per line of input
-#: ../src/dialogs/rdf.cpp:287
+#: ../src/dialogs/rdf.cpp:288
 msgid "Contributors"
-msgstr ""
+msgstr "תורמים"
 
-#: ../src/dialogs/rdf.cpp:288
-msgid ""
-"Names of entities responsible for making contributions to the content of "
-"this document."
-msgstr ""
+#: ../src/dialogs/rdf.cpp:289
+msgid "Names of entities responsible for making contributions to the content of this document."
+msgstr "שם הישויות האחריות לתרומה לתוכן מסמך זה."
 
 #. TRANSLATORS: URL to a page that defines the license for the document
-#: ../src/dialogs/rdf.cpp:292
+#: ../src/dialogs/rdf.cpp:293
 msgid "URI"
-msgstr ""
+msgstr "כתובת הרשיון"
 
 #. TRANSLATORS: this is where you put a URL to a page that defines the license
-#: ../src/dialogs/rdf.cpp:294
+#: ../src/dialogs/rdf.cpp:295
 msgid "URI to this document's license's namespace definition."
-msgstr ""
+msgstr "כתובת ייחודית להגדרת שם מתחם לרשיון מסמך זה."
 
 #. TRANSLATORS: fragment of XML representing the license of the document
-#: ../src/dialogs/rdf.cpp:298
+#: ../src/dialogs/rdf.cpp:299
 msgid "Fragment"
-msgstr ""
+msgstr "מקטע הרשיון"
 
-#: ../src/dialogs/rdf.cpp:299
+#: ../src/dialogs/rdf.cpp:300
 msgid "XML fragment for the RDF 'License' section."
-msgstr ""
+msgstr "מקטע ה־XML עבור סעיף 'רשיון' ה־RDF."
 
 #. TRANSLATORS: "Set" is a verb here
 #: ../src/dialogs/sp-attribute-widget.cpp:166
-#: ../src/dialogs/sp-attribute-widget.cpp:773 ../src/dialogs/xml-tree.cpp:533
+#: ../src/dialogs/sp-attribute-widget.cpp:773
+#: ../src/dialogs/xml-tree.cpp:535
 msgid "Set attribute"
-msgstr ""
+msgstr "הגדר מאפיין"
 
-#: ../src/dialogs/stroke-style.cpp:305 ../src/dialogs/stroke-style.cpp:364
+#: ../src/dialogs/stroke-style.cpp:294
+#: ../src/dialogs/stroke-style.cpp:353
 msgid "Set stroke color"
-msgstr ""
+msgstr "הגדר את צבע קו המתאר"
 
-#: ../src/dialogs/stroke-style.cpp:355 ../src/ui/widget/selected-style.cpp:255
-#: ../src/ui/widget/selected-style.cpp:488
+#: ../src/dialogs/stroke-style.cpp:344
+#: ../src/ui/widget/selected-style.cpp:255
+#: ../src/ui/widget/selected-style.cpp:484
 msgid "Remove stroke"
-msgstr ""
+msgstr "הסר את קו המתאר"
 
-#: ../src/dialogs/stroke-style.cpp:416
+#: ../src/dialogs/stroke-style.cpp:405
 msgid "Set gradient on stroke"
-msgstr ""
+msgstr "הגדר צביעה מדורגת לקו המתאר"
 
-#: ../src/dialogs/stroke-style.cpp:460
+#: ../src/dialogs/stroke-style.cpp:449
 msgid "Set pattern on stroke"
-msgstr ""
+msgstr "הגדר תבנית לקו המתאר"
 
-#: ../src/dialogs/stroke-style.cpp:481 ../src/ui/widget/selected-style.cpp:193
+#: ../src/dialogs/stroke-style.cpp:470
+#: ../src/ui/widget/selected-style.cpp:193
 #: ../src/ui/widget/selected-style.cpp:251
-#: ../src/ui/widget/selected-style.cpp:513
-#: ../src/ui/widget/style-swatch.cpp:335
+#: ../src/ui/widget/selected-style.cpp:509
+#: ../src/ui/widget/style-swatch.cpp:303
 msgid "Unset stroke"
-msgstr ""
-
-#: ../src/dialogs/stroke-style.cpp:793 ../src/filter-enums.cpp:95
-#: ../src/flood-context.cpp:288 ../src/interface.cpp:826
-#: ../src/ui/dialog/filter-effects-dialog.cpp:507
-#: ../src/ui/dialog/inkscape-preferences.cpp:211
-#: ../src/ui/dialog/inkscape-preferences.cpp:375
-#: ../src/ui/dialog/inkscape-preferences.cpp:501
-#: ../src/ui/dialog/inkscape-preferences.cpp:958 ../src/verbs.cpp:2156
+msgstr "בטל הגדרת קו המתאר"
+
+#: ../src/dialogs/stroke-style.cpp:773
+#: ../src/filter-enums.cpp:95
+#: ../src/flood-context.cpp:292
+#: ../src/live_effects/lpe-ruler.cpp:34
+#: ../src/ui/dialog/filter-effects-dialog.cpp:509
+#: ../src/ui/dialog/inkscape-preferences.cpp:220
+#: ../src/ui/dialog/inkscape-preferences.cpp:382
+#: ../src/ui/dialog/inkscape-preferences.cpp:509
+#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+#: ../src/verbs.cpp:2211
+#: ../src/widgets/toolbox.cpp:3424
 #: ../share/extensions/grid_polar.inx.h:16
 msgid "None"
-msgstr ""
+msgstr "ללא"
 
-#: ../src/dialogs/stroke-style.cpp:848 ../src/widgets/gradient-vector.cpp:264
+#: ../src/dialogs/stroke-style.cpp:828
+#: ../src/widgets/gradient-vector.cpp:264
 #: ../src/widgets/paint-selector.cpp:885
 msgid "No document selected"
-msgstr ""
+msgstr "לא נבחר מסמך"
 
-#: ../src/dialogs/stroke-style.cpp:937
+#: ../src/dialogs/stroke-style.cpp:912
 msgid "Set markers"
-msgstr ""
+msgstr "הגדר סמנים"
 
-#: ../src/dialogs/stroke-style.cpp:1104 ../share/extensions/edge3d.inx.h:9
+#. Stroke width
+#: ../src/dialogs/stroke-style.cpp:1085
+msgid "StrokeWidth|Width:"
+msgstr "עובי:"
+
+#: ../src/dialogs/stroke-style.cpp:1099
+#: ../share/extensions/edge3d.inx.h:9
 msgid "Stroke width"
-msgstr ""
+msgstr "עובי קו המתאר"
 
 #. Join type
 #. TRANSLATORS: The line join style specifies the shape to be used at the
 #. corners of paths. It can be "miter", "round" or "bevel".
-#: ../src/dialogs/stroke-style.cpp:1127
+#: ../src/dialogs/stroke-style.cpp:1123
 msgid "Join:"
-msgstr ""
+msgstr "תפר:"
 
 #. TRANSLATORS: Miter join: joining lines with a sharp (pointed) corner.
 #. For an example, draw a triangle with a large stroke width and modify the
 #. "Join" option (in the Fill and Stroke dialog).
-#: ../src/dialogs/stroke-style.cpp:1139
+#: ../src/dialogs/stroke-style.cpp:1135
 msgid "Miter join"
-msgstr ""
+msgstr "תפר חד"
 
 #. TRANSLATORS: Round join: joining lines with a rounded corner.
 #. For an example, draw a triangle with a large stroke width and modify the
 #. "Join" option (in the Fill and Stroke dialog).
-#: ../src/dialogs/stroke-style.cpp:1147
+#: ../src/dialogs/stroke-style.cpp:1143
 msgid "Round join"
-msgstr ""
+msgstr "תפר מעוגל"
 
 #. TRANSLATORS: Bevel join: joining lines with a blunted (flattened) corner.
 #. For an example, draw a triangle with a large stroke width and modify the
 #. "Join" option (in the Fill and Stroke dialog).
-#: ../src/dialogs/stroke-style.cpp:1155
+#: ../src/dialogs/stroke-style.cpp:1151
 msgid "Bevel join"
-msgstr ""
+msgstr "תפר משופע"
 
 #. Miterlimit
 #. TRANSLATORS: Miter limit: only for "miter join", this limits the length
@@ -1886,137 +1968,150 @@ msgstr ""
 #. spike that extends well beyond the connection point. The purpose of the
 #. miter limit is to cut off such spikes (i.e. convert them into bevels)
 #. when they become too long.
-#: ../src/dialogs/stroke-style.cpp:1166
+#: ../src/dialogs/stroke-style.cpp:1162
 msgid "Miter limit:"
-msgstr ""
+msgstr "גבול התפר:"
 
-#: ../src/dialogs/stroke-style.cpp:1174
+#: ../src/dialogs/stroke-style.cpp:1170
 msgid "Maximum length of the miter (in units of stroke width)"
-msgstr ""
+msgstr "אורך התפר המרבי (ביחידות של רוחב קו המתאר)"
 
 #. Cap type
 #. TRANSLATORS: cap type specifies the shape for the ends of lines
-#: ../src/dialogs/stroke-style.cpp:1187
+#: ../src/dialogs/stroke-style.cpp:1182
 msgid "Cap:"
-msgstr ""
+msgstr "קצה:"
 
 #. TRANSLATORS: Butt cap: the line shape does not extend beyond the end point
 #. of the line; the ends of the line are square
-#: ../src/dialogs/stroke-style.cpp:1198
+#: ../src/dialogs/stroke-style.cpp:1193
 msgid "Butt cap"
-msgstr ""
+msgstr "קצה קטוע"
 
 #. TRANSLATORS: Round cap: the line shape extends beyond the end point of the
 #. line; the ends of the line are rounded
-#: ../src/dialogs/stroke-style.cpp:1205
+#: ../src/dialogs/stroke-style.cpp:1200
 msgid "Round cap"
-msgstr ""
+msgstr "קצה מעוגל"
 
 #. TRANSLATORS: Square cap: the line shape extends beyond the end point of the
 #. line; the ends of the line are square
-#: ../src/dialogs/stroke-style.cpp:1212
+#: ../src/dialogs/stroke-style.cpp:1207
 msgid "Square cap"
-msgstr ""
+msgstr "קצה מוארך"
 
 #. Dash
-#: ../src/dialogs/stroke-style.cpp:1218
+#: ../src/dialogs/stroke-style.cpp:1213
 msgid "Dashes:"
-msgstr ""
+msgstr "ריסוק:"
 
 #. TRANSLATORS: Path markers are an SVG feature that allows you to attach arbitrary shapes
 #. (arrowheads, bullets, faces, whatever) to the start, end, or middle nodes of a path.
-#: ../src/dialogs/stroke-style.cpp:1239
+#: ../src/dialogs/stroke-style.cpp:1230
 msgid "Start Markers:"
-msgstr ""
+msgstr "סמני התחלה:"
+
+#: ../src/dialogs/stroke-style.cpp:1232
+msgid "Start Markers are drawn on the first node of a path or shape"
+msgstr "סמני ההתחלה מצויירים על מפרק הראשון של נתיב או צורה"
 
-#: ../src/dialogs/stroke-style.cpp:1249
+#: ../src/dialogs/stroke-style.cpp:1241
 msgid "Mid Markers:"
-msgstr ""
+msgstr "סמני אמצע:"
+
+#: ../src/dialogs/stroke-style.cpp:1243
+msgid "Mid Markers are drawn on every node of a path or shape except the first and last nodes"
+msgstr "סמני ההתחלה מצויירים על כל מפרק של נתיב או צורה מלבד הראשון והאחרון"
 
-#: ../src/dialogs/stroke-style.cpp:1259
+#: ../src/dialogs/stroke-style.cpp:1252
 msgid "End Markers:"
-msgstr ""
+msgstr "סמני סוף:"
+
+#: ../src/dialogs/stroke-style.cpp:1254
+msgid "End Markers are drawn on the last node of a path or shape"
+msgstr "סמני הסיום מצויירים על מפרק האחרון של נתיב או צורה"
 
-#: ../src/dialogs/stroke-style.cpp:1605 ../src/dialogs/stroke-style.cpp:1703
+#: ../src/dialogs/stroke-style.cpp:1577
+#: ../src/dialogs/stroke-style.cpp:1673
 msgid "Set stroke style"
-msgstr ""
+msgstr "הגדר את סגנון קו המתאר"
 
 #: ../src/dialogs/swatches.cpp:248
 #, c-format
-msgid ""
-"Color: <b>%s</b>; <b>Click</b> to set fill, <b>Shift+click</b> to set stroke"
-msgstr ""
+msgid "Color: <b>%s</b>; <b>Click</b> to set fill, <b>Shift+click</b> to set stroke"
+msgstr "צבע: <b>%s</b>; <b>לחץ</b> כדי להגדיר מילוי, <b>Shift+לחיצה</b> כדי להגדיר קו מתאר"
 
 #. TRANSLATORS: An item in context menu on a colour in the swatches
 #: ../src/dialogs/swatches.cpp:298
-#, fuzzy
 msgid "Set fill"
-msgstr "×\91×\97ר ×\94\9b×\9c"
+msgstr "×\94×\92×\93ר ×\9e×\99×\9c×\95×\99"
 
 #. TRANSLATORS: An item in context menu on a colour in the swatches
 #: ../src/dialogs/swatches.cpp:306
 msgid "Set stroke"
-msgstr ""
+msgstr "הגדר קו מתאר"
 
 #: ../src/dialogs/swatches.cpp:525
 msgid "Change color definition"
-msgstr ""
+msgstr "שנה את הגדרת הצבע"
 
 #: ../src/dialogs/swatches.cpp:676
 msgid "Set stroke color from swatch"
-msgstr ""
+msgstr "הגדר את צבע קו המתאר ממרקם"
 
 #: ../src/dialogs/swatches.cpp:676
 msgid "Set fill color from swatch"
-msgstr ""
+msgstr "הגדר את צבע המילוי ממרקם"
 
 #: ../src/dialogs/swatches.cpp:996
 #, c-format
 msgid "Palettes directory (%s) is unavailable."
-msgstr ""
+msgstr "תיקיית לוחות הצבעים (%s) אינה זמינה."
 
-#. TODO:  Insert widgets
-#: ../src/dialogs/text-edit.cpp:200 ../src/ui/dialog/text-properties.cpp:36
+#: ../src/dialogs/text-edit.cpp:201
 msgid "Font"
-msgstr ""
+msgstr "גופן"
 
-#: ../src/dialogs/text-edit.cpp:223
+#: ../src/dialogs/text-edit.cpp:224
 msgid "Layout"
-msgstr ""
+msgstr "פריסה"
 
-#: ../src/dialogs/text-edit.cpp:237
+#: ../src/dialogs/text-edit.cpp:238
 msgid "Align lines left"
-msgstr ""
+msgstr "ישר את השורות שמאלה"
 
 #. TRANSLATORS: `Center' here is a verb.
-#: ../src/dialogs/text-edit.cpp:252
+#: ../src/dialogs/text-edit.cpp:253
 msgid "Center lines"
-msgstr ""
+msgstr "מרכז את השורות"
 
-#: ../src/dialogs/text-edit.cpp:266
+#: ../src/dialogs/text-edit.cpp:267
 msgid "Align lines right"
-msgstr ""
+msgstr "ישר את השורות ימינה"
 
-#: ../src/dialogs/text-edit.cpp:280
+#: ../src/dialogs/text-edit.cpp:281
 msgid "Justify lines"
-msgstr ""
+msgstr "ישר את השורות לשני הצדים"
 
-#: ../src/dialogs/text-edit.cpp:302 ../src/widgets/toolbox.cpp:5354
+#: ../src/dialogs/text-edit.cpp:303
+#: ../src/widgets/toolbox.cpp:6308
 msgid "Horizontal text"
-msgstr ""
+msgstr "טקסט אופקי"
 
-#: ../src/dialogs/text-edit.cpp:316 ../src/widgets/toolbox.cpp:5366
+#: ../src/dialogs/text-edit.cpp:317
+#: ../src/widgets/toolbox.cpp:6320
 msgid "Vertical text"
-msgstr ""
+msgstr "טקסט אנכי"
 
-#: ../src/dialogs/text-edit.cpp:331
+#: ../src/dialogs/text-edit.cpp:332
 msgid "Line spacing:"
-msgstr ""
+msgstr "מרווח שורות:"
 
 #. Text
-#: ../src/dialogs/text-edit.cpp:377 ../src/selection-describer.cpp:67
-#: ../src/ui/dialog/inkscape-preferences.cpp:469
-#: ../src/ui/dialog/text-properties.cpp:37 ../src/verbs.cpp:2437
+#: ../src/dialogs/text-edit.cpp:378
+#: ../src/selection-describer.cpp:67
+#: ../src/ui/dialog/inkscape-preferences.cpp:477
+#: ../src/verbs.cpp:2498
 #: ../share/extensions/lorem_ipsum.inx.h:5
 #: ../share/extensions/render_alphabetsoup.inx.h:4
 #: ../share/extensions/text_braille.inx.h:2
@@ -2028,484 +2123,507 @@ msgstr ""
 #: ../share/extensions/text_titlecase.inx.h:1
 #: ../share/extensions/text_uppercase.inx.h:1
 msgid "Text"
-msgstr ""
+msgstr "טקסט"
 
-#: ../src/dialogs/text-edit.cpp:424
+#: ../src/dialogs/text-edit.cpp:425
 msgid "Set as default"
-msgstr ""
+msgstr "הגדר כברירת מחדל"
 
-#: ../src/dialogs/text-edit.cpp:665 ../src/text-context.cpp:1438
+#: ../src/dialogs/text-edit.cpp:668
+#: ../src/text-context.cpp:1510
 msgid "Set text style"
-msgstr ""
+msgstr "הגדר את סגנון הטקסט"
 
-#: ../src/dialogs/tiledialog.cpp:353
+#: ../src/dialogs/tiledialog.cpp:349
 msgid "Arrange in a grid"
-msgstr ""
+msgstr "סדר לתוך רשת"
 
-#: ../src/dialogs/tiledialog.cpp:654
+#: ../src/dialogs/tiledialog.cpp:657
 msgid "Rows:"
-msgstr ""
+msgstr "שורות:"
 
-#: ../src/dialogs/tiledialog.cpp:662
+#: ../src/dialogs/tiledialog.cpp:665
 msgid "Number of rows"
-msgstr ""
+msgstr "מספר שורות"
 
-#: ../src/dialogs/tiledialog.cpp:666
+#: ../src/dialogs/tiledialog.cpp:669
 msgid "Equal height"
-msgstr ""
+msgstr "גובה שווה"
 
-#: ../src/dialogs/tiledialog.cpp:676
+#: ../src/dialogs/tiledialog.cpp:679
 msgid "If not set, each row has the height of the tallest object in it"
-msgstr ""
+msgstr "במידה ולא הוגדר, לכל שורה יינתן הגובה של הפריט הגבוה ביותר שנמצא בתוכה"
 
 #. #### Radio buttons to control vertical alignment ####
 #. #### Radio buttons to control horizontal alignment ####
-#: ../src/dialogs/tiledialog.cpp:682 ../src/dialogs/tiledialog.cpp:752
+#: ../src/dialogs/tiledialog.cpp:685
+#: ../src/dialogs/tiledialog.cpp:755
 msgid "Align:"
-msgstr ""
+msgstr "ישור:"
 
 #. #### Number of columns ####
-#: ../src/dialogs/tiledialog.cpp:724
+#: ../src/dialogs/tiledialog.cpp:727
 msgid "Columns:"
-msgstr ""
+msgstr "עמודות:"
 
-#: ../src/dialogs/tiledialog.cpp:732
+#: ../src/dialogs/tiledialog.cpp:735
 msgid "Number of columns"
-msgstr ""
+msgstr "מספר העמודות"
 
-#: ../src/dialogs/tiledialog.cpp:736
+#: ../src/dialogs/tiledialog.cpp:739
 msgid "Equal width"
-msgstr ""
+msgstr "רוחב שווה"
 
-#: ../src/dialogs/tiledialog.cpp:745
+#: ../src/dialogs/tiledialog.cpp:748
 msgid "If not set, each column has the width of the widest object in it"
-msgstr ""
+msgstr "במידה ולא הוגדר, לכל עמודה יינתן הרוחב של הפריט הרחב ביותר מתוכה"
 
 #. #### Radio buttons to control spacing manually or to fit selection bbox ####
-#: ../src/dialogs/tiledialog.cpp:791
+#: ../src/dialogs/tiledialog.cpp:794
 msgid "Fit into selection box"
-msgstr ""
+msgstr "התאם לתיבת הבחירה"
 
-#: ../src/dialogs/tiledialog.cpp:797
+#: ../src/dialogs/tiledialog.cpp:800
 msgid "Set spacing:"
-msgstr ""
+msgstr "הגדר ריווח:"
 
-#: ../src/dialogs/tiledialog.cpp:817
+#: ../src/dialogs/tiledialog.cpp:820
 msgid "Vertical spacing between rows (px units)"
-msgstr ""
+msgstr "ריווח אנכי בין השורות (בפיקסלים)"
 
-#: ../src/dialogs/tiledialog.cpp:842
+#: ../src/dialogs/tiledialog.cpp:845
 msgid "Horizontal spacing between columns (px units)"
-msgstr ""
+msgstr "ריווח אפקי בין העמודות (בפיקסלים)"
 
 #. ## The OK button
-#: ../src/dialogs/tiledialog.cpp:865 ../share/extensions/restack.inx.h:3
+#: ../src/dialogs/tiledialog.cpp:868
+#: ../share/extensions/restack.inx.h:3
 msgid "Arrange"
-msgstr ""
+msgstr "סדר"
 
-#: ../src/dialogs/tiledialog.cpp:866
+#: ../src/dialogs/tiledialog.cpp:869
 msgid "Arrange selected objects"
-msgstr ""
+msgstr "סדר את הפריטים הנבחרים"
 
-#: ../src/dialogs/xml-tree.cpp:174
+#: ../src/dialogs/xml-tree.cpp:175
 msgid "<b>Click</b> to select nodes, <b>drag</b> to rearrange."
-msgstr ""
+msgstr "<b>לחץ</b> כדי לבחור מפרקים, <b>גרור</b> כדי לסדר מחדש."
 
-#: ../src/dialogs/xml-tree.cpp:185
+#: ../src/dialogs/xml-tree.cpp:186
 msgid "<b>Click</b> attribute to edit."
-msgstr ""
+msgstr "<b>לחץ</b> על מאפיין כדי לערוך אותו."
 
-#: ../src/dialogs/xml-tree.cpp:189
+#: ../src/dialogs/xml-tree.cpp:190
 #, c-format
-msgid ""
-"Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to "
-"commit changes."
-msgstr ""
+msgid "Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to commit changes."
+msgstr "המאפיין <b>%s</b> נבחר. לחץ על <b>Ctrl+Enter</b> כאשר סיימת לערוך כדי להחיל את השינויים."
 
-#: ../src/dialogs/xml-tree.cpp:284
+#: ../src/dialogs/xml-tree.cpp:286
 msgid "Drag to reorder nodes"
-msgstr ""
+msgstr "גרור על מנת לסדר את המפרקים מחדש"
 
-#: ../src/dialogs/xml-tree.cpp:304
+#: ../src/dialogs/xml-tree.cpp:306
 msgid "New element node"
-msgstr ""
+msgstr "מפרק רכיב חדש"
 
-#: ../src/dialogs/xml-tree.cpp:326
+#: ../src/dialogs/xml-tree.cpp:328
 msgid "New text node"
-msgstr ""
+msgstr "מפרק טקסט חדש"
 
-#: ../src/dialogs/xml-tree.cpp:347 ../src/dialogs/xml-tree.cpp:1414
-#: ../src/nodepath.cpp:2024
+#: ../src/dialogs/xml-tree.cpp:349
+#: ../src/dialogs/xml-tree.cpp:1432
+#: ../src/nodepath.cpp:2203
 msgid "Duplicate node"
-msgstr ""
+msgstr "שכפל מפרק"
 
-#: ../src/dialogs/xml-tree.cpp:368 ../src/dialogs/xml-tree.cpp:1431
-#: ../src/nodepath.cpp:3273 ../src/widgets/toolbox.cpp:1086
+#: ../src/dialogs/xml-tree.cpp:370
+#: ../src/dialogs/xml-tree.cpp:1449
+#: ../src/nodepath.cpp:3483
+#: ../src/widgets/toolbox.cpp:1283
 msgid "Delete node"
-msgstr ""
+msgstr "מחק מפרק"
 
-#: ../src/dialogs/xml-tree.cpp:384 ../src/dialogs/xml-tree.cpp:1576
+#: ../src/dialogs/xml-tree.cpp:386
+#: ../src/dialogs/xml-tree.cpp:1594
 msgid "Unindent node"
-msgstr ""
+msgstr "הרחק מפרקים"
 
-#: ../src/dialogs/xml-tree.cpp:399 ../src/dialogs/xml-tree.cpp:1555
+#: ../src/dialogs/xml-tree.cpp:401
+#: ../src/dialogs/xml-tree.cpp:1573
 msgid "Indent node"
-msgstr ""
+msgstr "קרב מפרקים"
 
-#: ../src/dialogs/xml-tree.cpp:411 ../src/dialogs/xml-tree.cpp:1508
+#: ../src/dialogs/xml-tree.cpp:413
+#: ../src/dialogs/xml-tree.cpp:1526
 msgid "Raise node"
-msgstr ""
+msgstr "הגבה מפרק"
 
-#: ../src/dialogs/xml-tree.cpp:423 ../src/dialogs/xml-tree.cpp:1525
+#: ../src/dialogs/xml-tree.cpp:425
+#: ../src/dialogs/xml-tree.cpp:1543
 msgid "Lower node"
-msgstr ""
+msgstr "הנמך מפרק"
 
-#: ../src/dialogs/xml-tree.cpp:468 ../src/dialogs/xml-tree.cpp:1449
+#: ../src/dialogs/xml-tree.cpp:470
+#: ../src/dialogs/xml-tree.cpp:1467
 msgid "Delete attribute"
-msgstr ""
+msgstr "מחק מאפיין"
 
 #. TRANSLATORS: "Attribute" is a noun here
-#: ../src/dialogs/xml-tree.cpp:513
+#: ../src/dialogs/xml-tree.cpp:515
 msgid "Attribute name"
-msgstr ""
+msgstr "שם המאפיין"
 
 #. TRANSLATORS: "Set" is a verb here
-#: ../src/dialogs/xml-tree.cpp:535
+#: ../src/dialogs/xml-tree.cpp:537
 msgid "Set"
-msgstr ""
+msgstr "הגדר"
 
 #. TRANSLATORS: "Attribute" is a noun here
-#: ../src/dialogs/xml-tree.cpp:558
+#: ../src/dialogs/xml-tree.cpp:560
 msgid "Attribute value"
-msgstr ""
+msgstr "ערך המאפיין"
 
-#: ../src/dialogs/xml-tree.cpp:891
+#: ../src/dialogs/xml-tree.cpp:897
 msgid "Drag XML subtree"
-msgstr ""
+msgstr "גרור תת־עץ XML"
 
-#: ../src/dialogs/xml-tree.cpp:1318
+#: ../src/dialogs/xml-tree.cpp:1334
 msgid "New element node..."
-msgstr ""
+msgstr "מפרק רכיב חדש..."
 
-#: ../src/dialogs/xml-tree.cpp:1339
-#: ../src/ui/dialog/whiteboard-connect.cpp:114
-#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:103
+#: ../src/dialogs/xml-tree.cpp:1356
+#: ../src/ui/dialog/whiteboard-connect.cpp:119
+#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:104
 msgid "Cancel"
-msgstr ""
+msgstr "ביטול"
 
-#: ../src/dialogs/xml-tree.cpp:1345
+#: ../src/dialogs/xml-tree.cpp:1364
 msgid "Create"
-msgstr ""
+msgstr "צור"
 
-#: ../src/dialogs/xml-tree.cpp:1380
+#: ../src/dialogs/xml-tree.cpp:1398
 msgid "Create new element node"
-msgstr ""
+msgstr "צור מפרק רכיב חדש"
 
-#: ../src/dialogs/xml-tree.cpp:1396
+#: ../src/dialogs/xml-tree.cpp:1414
 msgid "Create new text node"
-msgstr ""
+msgstr "צור מפרק טקסט חדש"
 
-#: ../src/dialogs/xml-tree.cpp:1478
+#: ../src/dialogs/xml-tree.cpp:1496
 msgid "Change attribute"
-msgstr ""
+msgstr "שנה מאפיין"
 
-#: ../src/display/canvas-axonomgrid.cpp:390 ../src/display/canvas-grid.cpp:656
+#: ../src/display/canvas-axonomgrid.cpp:391
+#: ../src/display/canvas-grid.cpp:656
 msgid "Grid _units:"
-msgstr ""
+msgstr "_יחידות הרשת:"
 
-#: ../src/display/canvas-axonomgrid.cpp:392 ../src/display/canvas-grid.cpp:658
+#: ../src/display/canvas-axonomgrid.cpp:393
+#: ../src/display/canvas-grid.cpp:658
 msgid "_Origin X:"
-msgstr ""
+msgstr "מ_קור בציר ה־X:"
 
-#: ../src/display/canvas-axonomgrid.cpp:392 ../src/display/canvas-grid.cpp:658
-#: ../src/ui/dialog/inkscape-preferences.cpp:869
-#: ../src/ui/dialog/inkscape-preferences.cpp:890
+#: ../src/display/canvas-axonomgrid.cpp:393
+#: ../src/display/canvas-grid.cpp:658
+#: ../src/ui/dialog/inkscape-preferences.cpp:922
+#: ../src/ui/dialog/inkscape-preferences.cpp:943
 msgid "X coordinate of grid origin"
-msgstr ""
+msgstr "נקודת הציון בציר ה־X של ראשית הצירים"
 
-#: ../src/display/canvas-axonomgrid.cpp:394 ../src/display/canvas-grid.cpp:660
+#: ../src/display/canvas-axonomgrid.cpp:395
+#: ../src/display/canvas-grid.cpp:660
 msgid "O_rigin Y:"
-msgstr ""
+msgstr "מקור ב_ציר ה־Y:"
 
-#: ../src/display/canvas-axonomgrid.cpp:394 ../src/display/canvas-grid.cpp:660
-#: ../src/ui/dialog/inkscape-preferences.cpp:870
-#: ../src/ui/dialog/inkscape-preferences.cpp:891
+#: ../src/display/canvas-axonomgrid.cpp:395
+#: ../src/display/canvas-grid.cpp:660
+#: ../src/ui/dialog/inkscape-preferences.cpp:923
+#: ../src/ui/dialog/inkscape-preferences.cpp:944
 msgid "Y coordinate of grid origin"
-msgstr ""
+msgstr "נקודת הציון בציר ה־Y של נקודת ראשית הצירים"
 
-#: ../src/display/canvas-axonomgrid.cpp:396 ../src/display/canvas-grid.cpp:664
+#: ../src/display/canvas-axonomgrid.cpp:397
+#: ../src/display/canvas-grid.cpp:664
 msgid "Spacing _Y:"
-msgstr ""
+msgstr "רי_ווח בציר ה־Y:"
 
-#: ../src/display/canvas-axonomgrid.cpp:396
-#: ../src/ui/dialog/inkscape-preferences.cpp:893
+#: ../src/display/canvas-axonomgrid.cpp:397
+#: ../src/ui/dialog/inkscape-preferences.cpp:946
 msgid "Base length of z-axis"
-msgstr ""
+msgstr "אורך הבסיס של ציר ה־z"
 
-#: ../src/display/canvas-axonomgrid.cpp:398 ../src/widgets/toolbox.cpp:2723
+#: ../src/display/canvas-axonomgrid.cpp:399
+#: ../src/ui/dialog/inkscape-preferences.cpp:949
+#: ../src/widgets/toolbox.cpp:2959
 msgid "Angle X:"
-msgstr ""
+msgstr "זווית X:"
 
-#: ../src/display/canvas-axonomgrid.cpp:398
-#: ../src/ui/dialog/inkscape-preferences.cpp:896
+#: ../src/display/canvas-axonomgrid.cpp:399
+#: ../src/ui/dialog/inkscape-preferences.cpp:949
 msgid "Angle of x-axis"
-msgstr ""
+msgstr "זווית בציר ה־x"
 
-#: ../src/display/canvas-axonomgrid.cpp:400 ../src/widgets/toolbox.cpp:2802
+#: ../src/display/canvas-axonomgrid.cpp:401
+#: ../src/ui/dialog/inkscape-preferences.cpp:950
+#: ../src/widgets/toolbox.cpp:3038
 msgid "Angle Z:"
-msgstr ""
+msgstr "זווית Z:"
 
-#: ../src/display/canvas-axonomgrid.cpp:400
-#: ../src/ui/dialog/inkscape-preferences.cpp:897
+#: ../src/display/canvas-axonomgrid.cpp:401
+#: ../src/ui/dialog/inkscape-preferences.cpp:950
 msgid "Angle of z-axis"
-msgstr ""
+msgstr "הזווית בציר ה-z"
 
-#: ../src/display/canvas-axonomgrid.cpp:404 ../src/display/canvas-grid.cpp:668
+#: ../src/display/canvas-axonomgrid.cpp:405
+#: ../src/display/canvas-grid.cpp:668
 msgid "Grid line _color:"
-msgstr ""
+msgstr "_צבע קווי הרשת:"
 
-#: ../src/display/canvas-axonomgrid.cpp:404 ../src/display/canvas-grid.cpp:668
-#: ../src/ui/dialog/inkscape-preferences.cpp:876
-#: ../src/ui/dialog/inkscape-preferences.cpp:877
-#: ../src/ui/dialog/inkscape-preferences.cpp:898
-#: ../src/ui/dialog/inkscape-preferences.cpp:899
+#: ../src/display/canvas-axonomgrid.cpp:405
+#: ../src/display/canvas-grid.cpp:668
 msgid "Grid line color"
-msgstr ""
+msgstr "צבע קווי הרשת"
 
-#: ../src/display/canvas-axonomgrid.cpp:404 ../src/display/canvas-grid.cpp:668
+#: ../src/display/canvas-axonomgrid.cpp:405
+#: ../src/display/canvas-grid.cpp:668
 msgid "Color of grid lines"
-msgstr ""
+msgstr "הצבע של הקווים המרכיבים את הרשת"
 
-#: ../src/display/canvas-axonomgrid.cpp:409 ../src/display/canvas-grid.cpp:673
+#: ../src/display/canvas-axonomgrid.cpp:410
+#: ../src/display/canvas-grid.cpp:673
 msgid "Ma_jor grid line color:"
-msgstr ""
+msgstr "צבע קווי הרשת ה_ראשי:"
 
-#: ../src/display/canvas-axonomgrid.cpp:409 ../src/display/canvas-grid.cpp:673
-#: ../src/ui/dialog/inkscape-preferences.cpp:878
-#: ../src/ui/dialog/inkscape-preferences.cpp:879
-#: ../src/ui/dialog/inkscape-preferences.cpp:900
-#: ../src/ui/dialog/inkscape-preferences.cpp:901
+#: ../src/display/canvas-axonomgrid.cpp:410
+#: ../src/display/canvas-grid.cpp:673
 msgid "Major grid line color"
-msgstr ""
+msgstr "צבע קווי הרשת הראשי"
 
-#: ../src/display/canvas-axonomgrid.cpp:410 ../src/display/canvas-grid.cpp:674
+#: ../src/display/canvas-axonomgrid.cpp:411
+#: ../src/display/canvas-grid.cpp:674
 msgid "Color of the major (highlighted) grid lines"
-msgstr ""
+msgstr "הצבע של הקווים המרכיבים את הרשת כאשר הם מודגשים"
 
-#: ../src/display/canvas-axonomgrid.cpp:414 ../src/display/canvas-grid.cpp:678
+#: ../src/display/canvas-axonomgrid.cpp:415
+#: ../src/display/canvas-grid.cpp:678
 msgid "_Major grid line every:"
-msgstr ""
+msgstr "קו רשת ר_אשי בכל:"
 
-#: ../src/display/canvas-axonomgrid.cpp:414 ../src/display/canvas-grid.cpp:678
+#: ../src/display/canvas-axonomgrid.cpp:415
+#: ../src/display/canvas-grid.cpp:678
 msgid "lines"
-msgstr ""
+msgstr "קווים"
 
-#: ../src/display/canvas-grid.cpp:40
+#: ../src/display/canvas-grid.cpp:39
 msgid "Rectangular grid"
-msgstr ""
+msgstr "רשת מלבנית"
 
-#: ../src/display/canvas-grid.cpp:41
+#: ../src/display/canvas-grid.cpp:40
 msgid "Axonometric grid"
-msgstr ""
+msgstr "רשת אוקסונומטרית"
 
-#: ../src/display/canvas-grid.cpp:259
+#: ../src/display/canvas-grid.cpp:258
 msgid "Create new grid"
-msgstr ""
+msgstr "צור רשת חדשה"
 
-#: ../src/display/canvas-grid.cpp:325
+#: ../src/display/canvas-grid.cpp:324
 msgid "_Enabled"
-msgstr ""
+msgstr "_פעילה"
 
-#: ../src/display/canvas-grid.cpp:326
-msgid ""
-"Determines whether to snap to this grid or not. Can be 'on' for invisible "
-"grids."
-msgstr ""
+#: ../src/display/canvas-grid.cpp:325
+msgid "Determines whether to snap to this grid or not. Can be 'on' for invisible grids."
+msgstr "קובע האם להצמיד לרשת זו או לא. יכול להיות 'פעילה' עבור רשתות בלתי נראות."
 
-#: ../src/display/canvas-grid.cpp:329
+#: ../src/display/canvas-grid.cpp:328
 msgid "_Visible"
-msgstr ""
+msgstr "_נראית"
 
-#: ../src/display/canvas-grid.cpp:330
-msgid ""
-"Determines whether the grid is displayed or not. Objects are still snapped "
-"to invisible grids."
-msgstr ""
+#: ../src/display/canvas-grid.cpp:329
+msgid "Determines whether the grid is displayed or not. Objects are still snapped to invisible grids."
+msgstr "קובע האם הרשת תוצג או לא. הפריטים עדיין מוצמדים לרשתות בלתי נראות."
 
 #: ../src/display/canvas-grid.cpp:662
 msgid "Spacing _X:"
-msgstr ""
+msgstr "_ריווח בציר ה־X:"
 
 #: ../src/display/canvas-grid.cpp:662
-#: ../src/ui/dialog/inkscape-preferences.cpp:873
+#: ../src/ui/dialog/inkscape-preferences.cpp:926
 msgid "Distance between vertical grid lines"
-msgstr ""
+msgstr "המרחק בין קווי הרשת האנכיים"
 
 #: ../src/display/canvas-grid.cpp:664
-#: ../src/ui/dialog/inkscape-preferences.cpp:874
+#: ../src/ui/dialog/inkscape-preferences.cpp:927
 msgid "Distance between horizontal grid lines"
-msgstr ""
+msgstr "המרחק בין קווי הרשת האופקיים"
 
 #: ../src/display/canvas-grid.cpp:697
 msgid "_Show dots instead of lines"
-msgstr ""
+msgstr "הצג _נקודות במקום קווים"
 
 #: ../src/display/canvas-grid.cpp:698
-#: ../src/ui/dialog/inkscape-preferences.cpp:883
 msgid "If set, displays dots at gridpoints instead of gridlines"
-msgstr ""
+msgstr "במידה והוגדר, הצג נקודות בנקודות המפגש בין הקווים במקום קווי רשת"
 
-#: ../src/document.cpp:415
+#: ../src/document.cpp:437
 #, c-format
 msgid "New document %d"
-msgstr ""
+msgstr "מסמך חדש %d"
 
-#: ../src/document.cpp:447
+#: ../src/document.cpp:469
 #, c-format
 msgid "Memory document %d"
-msgstr ""
+msgstr "מסמך מהזיכרון %d"
 
-#: ../src/document.cpp:603
+#: ../src/document.cpp:624
 #, c-format
 msgid "Unnamed document %d"
-msgstr ""
+msgstr "מסמך ללא שם %d"
 
 #. We hit green anchor, closing Green-Blue-Red
-#: ../src/draw-context.cpp:448
+#: ../src/draw-context.cpp:571
 msgid "Path is closed."
-msgstr ""
+msgstr "הנתיב סגור."
 
 #. We hit bot start and end of single curve, closing paths
-#: ../src/draw-context.cpp:463
+#: ../src/draw-context.cpp:586
 msgid "Closing path."
-msgstr ""
+msgstr "סוגר נתיב."
 
-#: ../src/draw-context.cpp:577
+#: ../src/draw-context.cpp:696
 msgid "Draw path"
-msgstr ""
+msgstr "צייר נתיב"
+
+#: ../src/draw-context.cpp:856
+msgid "Creating single dot"
+msgstr "יוצר נקודה בודדת"
+
+#: ../src/draw-context.cpp:857
+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:292
+#: ../src/dropper-context.cpp:291
 #, c-format
 msgid " alpha %.3g"
-msgstr ""
+msgstr " שקיפות %.3g"
 
 #. where the color is picked, to show in the statusbar
-#: ../src/dropper-context.cpp:294
+#: ../src/dropper-context.cpp:293
 #, c-format
 msgid ", averaged with radius %d"
-msgstr ""
+msgstr ", ממוצע עם רדיוס %d"
 
-#: ../src/dropper-context.cpp:294
+#: ../src/dropper-context.cpp:293
+#, c-format
 msgid " under cursor"
-msgstr ""
+msgstr " תחת סמן העכבר"
 
 #. message, to show in the statusbar
-#: ../src/dropper-context.cpp:296
+#: ../src/dropper-context.cpp:295
 msgid "<b>Release mouse</b> to set color."
-msgstr ""
+msgstr "<b>שחרר את הלחיצה בעכבר</b> כדי להגדיר צבע."
 
-#: ../src/dropper-context.cpp:296 ../src/tools-switch.cpp:229
-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 ""
+#: ../src/dropper-context.cpp:295
+#: ../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>לחץ</b> כדי להגדיר מילוי, <b>Shift+לחיצה</b> כדי להגדיר קו מתאר; <b>גרור</b> כדי לעשות ממוצע עם הצבע של האיזור; לחיצה על <b>Alt</b> בנוסף כדי לבחור את הצבע ההפוך; <b>Ctrl+C</b> כדי להעתיק את הצבע שמתחת לעכבר ללוח הגזירים"
 
-#: ../src/dropper-context.cpp:329
+#: ../src/dropper-context.cpp:328
 msgid "Set picked color"
-msgstr ""
+msgstr "הגדר את הצבע שנבחר"
 
-#: ../src/dyna-draw-context.cpp:625
-msgid ""
-"<b>Guide path selected</b>; start drawing along the guide with <b>Ctrl</b>"
-msgstr ""
+#: ../src/dyna-draw-context.cpp:620
+msgid "<b>Guide path selected</b>; start drawing along the guide with <b>Ctrl</b>"
+msgstr "<b>נבחר נתיב מנחה</b>; התחל לצייר לאורך קו המתאר בעזרת <b>Ctrl</b>"
 
-#: ../src/dyna-draw-context.cpp:627
+#: ../src/dyna-draw-context.cpp:622
 msgid "<b>Select a guide path</b> to track with <b>Ctrl</b>"
-msgstr ""
+msgstr "<b>בחר נתיב מנחה</b> למעקב בעזרת <b>Ctrl</b>"
 
-#: ../src/dyna-draw-context.cpp:732
+#: ../src/dyna-draw-context.cpp:727
 msgid "Tracking: <b>connection to guide path lost!</b>"
-msgstr ""
+msgstr "עוקב: <b>הקשר לנתיב המתאר אבד!</b>"
 
-#: ../src/dyna-draw-context.cpp:732
+#: ../src/dyna-draw-context.cpp:727
 msgid "<b>Tracking</b> a guide path"
-msgstr ""
+msgstr "<b>עוקב</b> אחר נתיב מתאר"
 
-#: ../src/dyna-draw-context.cpp:735
+#: ../src/dyna-draw-context.cpp:730
 msgid "<b>Drawing</b> a calligraphic stroke"
-msgstr ""
+msgstr "<b>מצייר</b> קו מתאר קליגרפי"
 
-#: ../src/dyna-draw-context.cpp:1016
+#: ../src/dyna-draw-context.cpp:1009
 msgid "Draw calligraphic stroke"
-msgstr ""
+msgstr "צייר קו מתאר קליגרפי"
 
-#: ../src/eraser-context.cpp:532
+#: ../src/eraser-context.cpp:528
 msgid "<b>Drawing</b> an eraser stroke"
-msgstr ""
+msgstr "<b>מצייר</b> קו מתאר למחק"
 
-#: ../src/eraser-context.cpp:839
+#: ../src/eraser-context.cpp:831
 msgid "Draw eraser stroke"
-msgstr ""
+msgstr "צייר קו מתאר למחק"
 
-#: ../src/event-context.cpp:595
+#: ../src/event-context.cpp:608
 msgid "<b>Space+mouse drag</b> to pan canvas"
-msgstr ""
+msgstr "<b>Space+גרירת עכבר</b> להתאים את שטח מתחם הציור למצב פנורמי"
 
 #: ../src/event-log.cpp:37
 msgid "[Unchanged]"
-msgstr ""
+msgstr "[ללא שינוי]"
 
 #. Edit
-#: ../src/event-log.cpp:264 ../src/event-log.cpp:267 ../src/verbs.cpp:2193
+#: ../src/event-log.cpp:264
+#: ../src/event-log.cpp:267
+#: ../src/verbs.cpp:2248
 msgid "_Undo"
-msgstr ""
+msgstr "_חזור"
 
-#: ../src/event-log.cpp:274 ../src/event-log.cpp:278 ../src/verbs.cpp:2195
+#: ../src/event-log.cpp:274
+#: ../src/event-log.cpp:278
+#: ../src/verbs.cpp:2250
 msgid "_Redo"
-msgstr ""
+msgstr "_בצע שוב"
 
 #: ../src/extension/dependency.cpp:261
 msgid "Dependency:"
-msgstr ""
+msgstr "תלות:"
 
 #: ../src/extension/dependency.cpp:262
 msgid "  type: "
-msgstr ""
+msgstr "  סוג: "
 
 #: ../src/extension/dependency.cpp:263
 msgid "  location: "
-msgstr ""
+msgstr "  מיקום: "
 
 #: ../src/extension/dependency.cpp:264
 msgid "  string: "
-msgstr ""
+msgstr "  מחרוזת: "
 
 #: ../src/extension/dependency.cpp:267
 msgid "  description: "
-msgstr ""
+msgstr "  תיאור: "
 
 #: ../src/extension/effect.cpp:35
 msgid " (No preferences)"
-msgstr ""
+msgstr " (ללא העדפות)"
 
 #. 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\">טעינת אחת ההרחבות או יותר נכשלה</span>\n"
+"\n"
+"התוכנה דילגה על ההרחבה התקולה.  אינקסקייפ תמשיך לרוץ כרגיל אך הרחבות אלו לא יהיו זמינות.  לפרטים אודות פתרון תקלה זו, נא פנה לדוח השגיאות הממוקם תחת: "
 
-#. This is some filler text, needs to change before relase
-#: ../src/extension/error-file.cpp:62
+#: ../src/extension/error-file.cpp:63
 msgid "Show dialog on startup"
-msgstr "×\94ר×\90×\94 ×ª×\99×\91ת ×\93×\95-שיח בהפעלה"
+msgstr "×\94צ×\92 ×ª×\99×\91ת ×\93×\95Ö¾שיח בהפעלה"
 
 #: ../src/extension/execution-env.cpp:134
 #, c-format
@@ -2515,121 +2633,120 @@ msgstr "'%s' עובד, אנא המתן..."
 #. 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 ""
+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 "  דבר זה נגרם עקב קובץ .inx לא תקני עבור הרחבה זו. הסיבה לשיבוש בקובץ ה־.inx עלולה להיות עקב התקנה פגומה של אינקסקייפ."
 
 #: ../src/extension/extension.cpp:255
 msgid "an ID was not defined for it."
-msgstr ""
+msgstr "לא הוגדר עבורה מזהה."
 
 #: ../src/extension/extension.cpp:259
 msgid "there was no name defined for it."
-msgstr ""
+msgstr "לא הוגדר עבורה שם."
 
 #: ../src/extension/extension.cpp:263
 msgid "the XML description of it got lost."
-msgstr ""
+msgstr "תיאור ה־XML עבורה אבד."
 
 #: ../src/extension/extension.cpp:267
 msgid "no implementation was defined for the extension."
-msgstr ""
+msgstr "לא הוגדר ביצוע עבור הרחבה זו."
 
 #. std::cout << "Failed: " << *(_deps[i]) << std::endl;
 #: ../src/extension/extension.cpp:274
 msgid "a dependency was not met."
-msgstr ""
+msgstr "מרכיבי התלות אינם מספקים."
 
 #: ../src/extension/extension.cpp:294
 msgid "Extension \""
-msgstr ""
+msgstr "טעינת ההרחבה \""
 
 #: ../src/extension/extension.cpp:294
 msgid "\" failed to load because "
-msgstr ""
+msgstr "\" כשלה מכיוון "
 
 #: ../src/extension/extension.cpp:625
 #, c-format
 msgid "Could not create extension error log file '%s'"
-msgstr ""
+msgstr "לא ניתן ליצור קובץ דוח שגיאה עבור ההרחבה '%s'"
 
 #: ../src/extension/extension.cpp:723
 msgid "Name:"
-msgstr ""
+msgstr "שם:"
 
 #: ../src/extension/extension.cpp:724
 msgid "ID:"
-msgstr ""
+msgstr "מזהה:"
 
 #: ../src/extension/extension.cpp:725
 msgid "State:"
-msgstr ""
+msgstr "מצב:"
 
 #: ../src/extension/extension.cpp:725
 msgid "Loaded"
-msgstr ""
+msgstr "נטען"
 
 #: ../src/extension/extension.cpp:725
 msgid "Unloaded"
-msgstr ""
+msgstr "פורק"
 
 #: ../src/extension/extension.cpp:725
 msgid "Deactivated"
-msgstr ""
+msgstr "בוטל"
 
 #: ../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 ""
+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 "נכון לעכשיו אין עזרה זמינה עבור הרחבה זו. אנא עיין באתר של אינקסקייפ או בקש ברשימות הקבוצה במידה ויש לך שאלות בנוגע להרחבה זו."
 
-#: ../src/extension/implementation/script.cpp:1055
-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 ""
+#: ../src/extension/implementation/script.cpp:1036
+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 "אינקסקייפ קיבלה נתונים נוספים מהתסריט שהופעל. התסריט לא החזיר שגיאה, אך דבר זה עלול להעיד כי התוצאות לא יהיו כמצופה."
 
-#: ../src/extension/init.cpp:282
+#: ../src/extension/init.cpp:291
 msgid "Null external module directory name.  Modules will not be loaded."
-msgstr ""
+msgstr "שם מודול חיצוני אפסי. המודולים לא יטענו."
 
-#: ../src/extension/init.cpp:296
+#: ../src/extension/init.cpp:305
 #: ../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 ""
+msgid "Modules directory (%s) is unavailable.  External modules in that directory will not be loaded."
+msgstr "תיקיית המודולים (%s) אינה זמינה. המודולים החיצוניים בתיקיה זו לא יטענו."
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:38
 msgid "Adaptive Threshold"
-msgstr ""
+msgstr "סף מסתגל"
 
 #: ../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:134 ../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:58
-#: ../src/live_effects/lpe-patternalongpath.cpp:64
-#: ../src/widgets/toolbox.cpp:2396 ../src/widgets/toolbox.cpp:3241
+#: ../src/live_effects/lpe-bendpath.cpp:56
+#: ../src/live_effects/lpe-patternalongpath.cpp:63
+#: ../src/widgets/toolbox.cpp:2632
+#: ../src/widgets/toolbox.cpp:3661
 msgid "Width"
 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:2413
+#: ../src/extension/internal/bitmap/sample.cpp:41
+#: ../src/libgdl/gdl-dock.c:198
+#: ../src/libgdl/gdl-dock-placeholder.c:177
+#: ../src/widgets/toolbox.cpp:2649
 msgid "Height"
 msgstr "גובה"
 
+#. initialise your parameters here:
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:42
 #: ../src/filter-enums.cpp:32
+#: ../src/live_effects/effect.cpp:93
+#: ../src/live_effects/lpe-offset.cpp:30
+#: ../src/live_effects/lpe-parallel.cpp:46
+#: ../src/live_effects/lpe-ruler.cpp:49
 msgid "Offset"
-msgstr "×\94×\99ס×\98"
+msgstr "ק×\99×\96×\95×\96"
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:46
 #: ../src/extension/internal/bitmap/addNoise.cpp:57
@@ -2667,11 +2784,11 @@ msgstr "היסט"
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:49
 #: ../src/extension/internal/bitmap/wave.cpp:44
 msgid "Raster"
-msgstr ""
+msgstr "עיבוד"
 
 #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:48
 msgid "Apply adaptive thresholding to selected bitmap(s)."
-msgstr ""
+msgstr "החל את הסף המסתגל על התמונה/ות הנבחרת/ות"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:44
 msgid "Add Noise"
@@ -2683,15 +2800,15 @@ msgstr "רעש אחיד"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:48
 msgid "Gaussian Noise"
-msgstr "רעש ×\92×\90×\95סי"
+msgstr "רעש ×¤×¢×\9e×\95× י"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:49
 msgid "Multiplicative Gaussian Noise"
-msgstr ""
+msgstr "רעש פעמוני מוכפל"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:50
 msgid "Impulse Noise"
-msgstr ""
+msgstr "רעש דחפי"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:51
 msgid "Laplacian Noise"
@@ -2699,15 +2816,15 @@ msgstr "רעש לפלאס"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:52
 msgid "Poisson Noise"
-msgstr "ר×\90ש פואסוני"
+msgstr "רעש פואסוני"
 
 #: ../src/extension/internal/bitmap/addNoise.cpp:59
 msgid "Add random noise to selected bitmap(s)."
-msgstr ""
+msgstr "הוסף רעש אקראי לתמונה/ות הנבחרת/ות"
 
 #: ../src/extension/internal/bitmap/blur.cpp:37
 msgid "Blur"
-msgstr ""
+msgstr "טשטוש"
 
 #: ../src/extension/internal/bitmap/blur.cpp:39
 #: ../src/extension/internal/bitmap/charcoal.cpp:39
@@ -2717,7 +2834,7 @@ msgstr ""
 #: ../src/extension/internal/bitmap/oilPaint.cpp:38
 #: ../src/extension/internal/bitmap/sharpen.cpp:39
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:42
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2251
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2265
 msgid "Radius"
 msgstr "רדיוס"
 
@@ -2728,11 +2845,11 @@ msgstr "רדיוס"
 #: ../src/extension/internal/bitmap/sharpen.cpp:40
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:43
 msgid "Sigma"
-msgstr ""
+msgstr "סיגמא"
 
 #: ../src/extension/internal/bitmap/blur.cpp:46
 msgid "Blur selected bitmap(s)"
-msgstr ""
+msgstr "טשטש את התמונה/ות הנבחרת/ות"
 
 #: ../src/extension/internal/bitmap/channel.cpp:47
 #: ../src/extension/internal/bitmap/levelChannel.cpp:53
@@ -2746,51 +2863,51 @@ msgstr "שכבה"
 #: ../src/extension/internal/bitmap/channel.cpp:50
 #: ../src/extension/internal/bitmap/levelChannel.cpp:54
 msgid "Red Channel"
-msgstr "ערוץ אדום"
+msgstr "ער×\95×¥ ×\94×\90×\93×\95×\9d"
 
 #: ../src/extension/internal/bitmap/channel.cpp:51
 #: ../src/extension/internal/bitmap/levelChannel.cpp:55
 msgid "Green Channel"
-msgstr "ערוץ ירוק"
+msgstr "ער×\95×¥ ×\94×\99ר×\95ק"
 
 #: ../src/extension/internal/bitmap/channel.cpp:52
 #: ../src/extension/internal/bitmap/levelChannel.cpp:56
 msgid "Blue Channel"
-msgstr "ערוץ כחול"
+msgstr "ער×\95×¥ ×\94×\9b×\97×\95×\9c"
 
 #: ../src/extension/internal/bitmap/channel.cpp:53
 #: ../src/extension/internal/bitmap/levelChannel.cpp:57
 msgid "Cyan Channel"
-msgstr ""
+msgstr "ערוץ הציאן"
 
 #: ../src/extension/internal/bitmap/channel.cpp:54
 #: ../src/extension/internal/bitmap/levelChannel.cpp:58
 msgid "Magenta Channel"
-msgstr ""
+msgstr "ערוץ הארגמן"
 
 #: ../src/extension/internal/bitmap/channel.cpp:55
 #: ../src/extension/internal/bitmap/levelChannel.cpp:59
 msgid "Yellow Channel"
-msgstr "ערוץ צהוב"
+msgstr "ער×\95×¥ ×\94צ×\94×\95×\91"
 
 #: ../src/extension/internal/bitmap/channel.cpp:56
 #: ../src/extension/internal/bitmap/levelChannel.cpp:60
 msgid "Black Channel"
-msgstr "ערוץ שחור"
+msgstr "ער×\95×¥ ×\94ש×\97×\95ר"
 
 #: ../src/extension/internal/bitmap/channel.cpp:57
 #: ../src/extension/internal/bitmap/levelChannel.cpp:61
 msgid "Opacity Channel"
-msgstr "ער×\95×¥ ×©×§×\99פות"
+msgstr "ער×\95×¥ ×\94×\90×\98×\99×\9eות"
 
 #: ../src/extension/internal/bitmap/channel.cpp:58
 #: ../src/extension/internal/bitmap/levelChannel.cpp:62
 msgid "Matte Channel"
-msgstr ""
+msgstr "ערוץ העמימות"
 
 #: ../src/extension/internal/bitmap/channel.cpp:65
 msgid "Extract specific channel from image."
-msgstr ""
+msgstr "ייצא ערוץ מסויים מתמונה."
 
 #: ../src/extension/internal/bitmap/charcoal.cpp:37
 msgid "Charcoal"
@@ -2798,15 +2915,15 @@ msgstr "פחם"
 
 #: ../src/extension/internal/bitmap/charcoal.cpp:46
 msgid "Apply charcoal stylization to selected bitmap(s)."
-msgstr ""
+msgstr "החל סגנון צביעת פחם על התמונה/ות הנבחרת/ות."
 
 #: ../src/extension/internal/bitmap/colorize.cpp:49
 msgid "Colorize"
-msgstr ""
+msgstr "הוספת צבע"
 
 #: ../src/extension/internal/bitmap/colorize.cpp:57
 msgid "Colorize selected bitmap(s) with specified color, using given opacity."
-msgstr ""
+msgstr "הוסף את הצבע המוגדר לתמונה/ות הנבחרות, עם האטימות הנתונה."
 
 #: ../src/extension/internal/bitmap/contrast.cpp:36
 msgid "Contrast"
@@ -2819,13 +2936,12 @@ msgstr "שפר חדות"
 
 #: ../src/extension/internal/bitmap/contrast.cpp:44
 msgid "Enhance intensity differences in selected bitmap(s)."
-msgstr ""
+msgstr "הגבר את עוצמת ההבדלים בתמונה/ות הנבחרת/ות."
 
 #. TRANSLATORS: see http://docs.gimp.org/en/gimp-tool-convolve.html
 #: ../src/extension/internal/bitmap/convolve.cpp:50
-#, fuzzy
 msgid "Convolve"
-msgstr "×\94×\96×\96"
+msgstr "ר×\99×\9b×\95×\9a"
 
 #: ../src/extension/internal/bitmap/convolve.cpp:52
 #: ../src/extension/internal/bitmap/reduceNoise.cpp:41
@@ -2835,15 +2951,15 @@ msgstr "סדר"
 
 #: ../src/extension/internal/bitmap/convolve.cpp:53
 msgid "Kernel Array"
-msgstr ""
+msgstr "מערך גרעין"
 
 #: ../src/extension/internal/bitmap/convolve.cpp:59
 msgid "Apply Convolve Effect"
-msgstr ""
+msgstr "החל את אפקט הריכוך"
 
 #: ../src/extension/internal/bitmap/cycleColormap.cpp:36
 msgid "Cycle Colormap"
-msgstr ""
+msgstr "גלול את מפת הצבעים"
 
 #: ../src/extension/internal/bitmap/cycleColormap.cpp:38
 #: ../src/extension/internal/bitmap/spread.cpp:38
@@ -2853,15 +2969,15 @@ msgstr "כמות"
 
 #: ../src/extension/internal/bitmap/cycleColormap.cpp:44
 msgid "Cycle colormap(s) of selected bitmap(s)."
-msgstr ""
+msgstr "גלול את מפת/ות הצבעים של התמונה/ות הנבחרת/ות."
 
 #: ../src/extension/internal/bitmap/despeckle.cpp:35
 msgid "Despeckle"
-msgstr ""
+msgstr "הפחת מוקדי רעש"
 
 #: ../src/extension/internal/bitmap/despeckle.cpp:42
 msgid "Reduce speckle noise of selected bitmap(s)."
-msgstr ""
+msgstr "הפחת את רמת מוקדי הרעש של התמונה/ות הנבחרת/ות."
 
 #: ../src/extension/internal/bitmap/edge.cpp:36
 msgid "Edge"
@@ -2869,70 +2985,70 @@ msgstr "קצה"
 
 #: ../src/extension/internal/bitmap/edge.cpp:44
 msgid "Hilight edges of selected bitmap(s)."
-msgstr ""
+msgstr "הדגש את קצוות התמונה/ות הנבחרת/ות."
 
 #. ID -- should be unique
 #: ../src/extension/internal/bitmap/emboss.cpp:37
 #: ../src/extension/internal/filter/emboss.h:21
 msgid "Emboss"
-msgstr ""
+msgstr "הבלט"
 
 #: ../src/extension/internal/bitmap/emboss.cpp:46
 msgid "Emboss selected bitmap(s) -- hilight edges with 3D effect."
-msgstr ""
+msgstr "צור תבליט מהתמונה/ות הנבחרת/ות -- הדגש את הקצוות עם אפקט תלת מימד."
 
 #: ../src/extension/internal/bitmap/enhance.cpp:34
 msgid "Enhance"
-msgstr ""
+msgstr "שפר"
 
 #: ../src/extension/internal/bitmap/enhance.cpp:41
 msgid "Enhance selected bitmap(s) -- minimize noise."
-msgstr ""
+msgstr "שפר את התמונה/ות הנבחרת/ות -- מזער את כמויות הרעש."
 
 #: ../src/extension/internal/bitmap/equalize.cpp:34
 msgid "Equalize"
-msgstr ""
+msgstr "השווה"
 
 #: ../src/extension/internal/bitmap/equalize.cpp:41
 msgid "Equalize selected bitmap(s) -- histogram equalization."
-msgstr ""
+msgstr "השווה את רמות הצבעים בתמונה/ות הנבחרת/ות -- השוואת היסטוגרמה."
 
 #: ../src/extension/internal/bitmap/gaussianBlur.cpp:37
 #: ../src/filter-enums.cpp:28
 msgid "Gaussian Blur"
-msgstr ""
+msgstr "טשטוש פעמוני"
 
 #: ../src/extension/internal/bitmap/gaussianBlur.cpp:39
 #: ../src/extension/internal/bitmap/implode.cpp:38
 #: ../src/extension/internal/bitmap/solarize.cpp:38
 msgid "Factor"
-msgstr "פק×\98×\95ר"
+msgstr "×\9eק×\93×\9d"
 
 #: ../src/extension/internal/bitmap/gaussianBlur.cpp:46
 msgid "Gaussian blur selected bitmap(s)."
-msgstr ""
+msgstr "החל את הטשטוש הפעמוני על התמונה/ות הנבחרת/ות."
 
 #: ../src/extension/internal/bitmap/implode.cpp:36
 msgid "Implode"
-msgstr ""
+msgstr "הקרס פנימה"
 
 #: ../src/extension/internal/bitmap/implode.cpp:44
 msgid "Implode selected bitmap(s)."
-msgstr ""
+msgstr "הקרס פנימה את התמונה/ות הנבחרת/ות."
 
 #: ../src/extension/internal/bitmap/levelChannel.cpp:51
 msgid "Level (with Channel)"
-msgstr ""
+msgstr "רמה (עם ערוץ)"
 
 #: ../src/extension/internal/bitmap/levelChannel.cpp:64
 #: ../src/extension/internal/bitmap/level.cpp:42
 msgid "Black Point"
-msgstr ""
+msgstr "נקודה שחורה"
 
 #: ../src/extension/internal/bitmap/levelChannel.cpp:65
 #: ../src/extension/internal/bitmap/level.cpp:43
 msgid "White Point"
-msgstr ""
+msgstr "נקודה לבנה"
 
 #: ../src/extension/internal/bitmap/levelChannel.cpp:66
 #: ../src/extension/internal/bitmap/level.cpp:44
@@ -2940,171 +3056,161 @@ msgid "Gamma Correction"
 msgstr "תיקון גאמא"
 
 #: ../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 ""
+msgid "Level the specified channel of selected bitmap(s) by scaling values falling between the given ranges to the full color range."
+msgstr "שנה את רמת הערוץ המוגדר של התמונה/ות הנבחרת/ות על ידי שינוי הערכים הנופלים בין הטווחים הניתנים לבין טווח הצבעים המלא."
 
 #: ../src/extension/internal/bitmap/level.cpp:40
 msgid "Level"
-msgstr ""
+msgstr "רמה"
 
 #: ../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 ""
+msgid "Level selected bitmap(s) by scaling values falling between the given ranges to the full color range."
+msgstr "שנה את רמת הערוץ של התמונה/ות הנבחרת/ות על ידי שינוי הערכים הנופלים בין הטווחים הניתנים לבין טווח הצבעים המלא."
 
 #: ../src/extension/internal/bitmap/medianFilter.cpp:36
 msgid "Median Filter"
-msgstr ""
+msgstr "מסנן חציון"
 
 #: ../src/extension/internal/bitmap/medianFilter.cpp:44
-msgid ""
-"Filter selected bitmap(s) by replacing each pixel component with the median "
-"color in a circular neighborhood."
-msgstr ""
+msgid "Filter selected bitmap(s) by replacing each pixel component with the median color in a circular neighborhood."
+msgstr "סנן את התמונה/ות הנבחרת/ות על ידי החלפת כל מרכיב פיקסל עם הצבע החציוני בסביבה מעגלית."
 
 #: ../src/extension/internal/bitmap/modulate.cpp:39
 msgid "Modulate"
-msgstr ""
+msgstr "ווסת"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:41
 msgid "Brightness"
 msgstr "בהירות"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:42
-#: ../src/flood-context.cpp:275 ../src/ui/dialog/inkscape-preferences.cpp:731
-#: ../src/widgets/sp-color-icc-selector.cpp:235
+#: ../src/flood-context.cpp:279
+#: ../src/ui/dialog/inkscape-preferences.cpp:785
 #: ../src/widgets/sp-color-icc-selector.cpp:236
+#: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:427
-#: ../src/widgets/sp-color-scales.cpp:428 ../src/widgets/toolbox.cpp:3375
+#: ../src/widgets/sp-color-scales.cpp:428
+#: ../src/widgets/toolbox.cpp:3833
 #: ../share/extensions/color_randomize.inx.h:5
 msgid "Saturation"
-msgstr ""
+msgstr "רוויה"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:43
-#: ../src/flood-context.cpp:274 ../src/widgets/sp-color-icc-selector.cpp:235
+#: ../src/flood-context.cpp:278
 #: ../src/widgets/sp-color-icc-selector.cpp:236
+#: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:424
-#: ../src/widgets/sp-color-scales.cpp:425 ../src/widgets/toolbox.cpp:3360
+#: ../src/widgets/sp-color-scales.cpp:425
+#: ../src/widgets/toolbox.cpp:3818
 #: ../share/extensions/color_randomize.inx.h:2
 msgid "Hue"
-msgstr ""
+msgstr "גוון"
 
 #: ../src/extension/internal/bitmap/modulate.cpp:49
 msgid "Modulate percent hue, saturation, and brightness of selected bitmap(s)."
-msgstr ""
+msgstr "ווסת את אחוזי הגוון, הרוויה והבהירות של התמונה/ות הנבחרת/ות."
 
 #: ../src/extension/internal/bitmap/negate.cpp:35
 msgid "Negate"
-msgstr ""
+msgstr "תשליל"
 
 #: ../src/extension/internal/bitmap/negate.cpp:42
 msgid "Negate (take inverse) selected bitmap(s)."
-msgstr ""
+msgstr "הפוך את צבעי התמונה/ות הנבחרת/ות כך שיתקבל/ו תשליל/ים."
 
 #: ../src/extension/internal/bitmap/normalize.cpp:35
 msgid "Normalize"
-msgstr ""
+msgstr "תיקון צבע"
 
 #: ../src/extension/internal/bitmap/normalize.cpp:42
-msgid ""
-"Normalize selected bitmap(s), expanding color range to the full possible "
-"range of color."
-msgstr ""
+msgid "Normalize selected bitmap(s), expanding color range to the full possible range of color."
+msgstr "תקן את צבע התמונה/ות הנבחרת/ות, הרחבת טווח הצבעים לטווח הצבעים המלא האפשרי."
 
 #: ../src/extension/internal/bitmap/oilPaint.cpp:36
 msgid "Oil Paint"
-msgstr ""
+msgstr "צבע שמן"
 
 #: ../src/extension/internal/bitmap/oilPaint.cpp:44
 msgid "Stylize selected bitmap(s) so that they appear to be painted with oils."
-msgstr ""
+msgstr "עצב את התמונה/ות הנבחרת/ות כך שתראה/יראו כאילו נצבעה/ו בצבעי שמן."
 
 #: ../src/extension/internal/bitmap/opacity.cpp:45
 msgid "Modify opacity channel(s) of selected bitmap(s)."
-msgstr ""
+msgstr "שנה את ערוץ/י האטימות של התמונה/ות הנבחרת/ות"
 
 #: ../src/extension/internal/bitmap/raise.cpp:39
 msgid "Raise"
-msgstr ""
+msgstr "הגבה"
 
 #: ../src/extension/internal/bitmap/raise.cpp:43
 msgid "Raised"
-msgstr ""
+msgstr "מוגבה"
 
 #: ../src/extension/internal/bitmap/raise.cpp:49
-msgid ""
-"Alter lightness the edges of selected bitmap(s) to create a raised "
-"appearance."
-msgstr ""
+msgid "Alter lightness the edges of selected bitmap(s) to create a raised appearance."
+msgstr "שנה את תאורת קצוות התמונה/ות הנבחרת/ות כדי ליצור מראה מוגבה."
 
 #: ../src/extension/internal/bitmap/reduceNoise.cpp:39
 msgid "Reduce Noise"
-msgstr ""
+msgstr "הפחת רעש"
 
 #: ../src/extension/internal/bitmap/reduceNoise.cpp:47
-msgid ""
-"Reduce noise in selected bitmap(s) using a noise peak elimination filter."
-msgstr ""
+msgid "Reduce noise in selected bitmap(s) using a noise peak elimination filter."
+msgstr "הפחת את הרעש עבור התמונה/ות הנבחרת/ות באמצעות מסנן הסרת פסגות רעש."
 
 #: ../src/extension/internal/bitmap/sample.cpp:38
-#, fuzzy
 msgid "Sample"
-msgstr "צ×\95ר×\95ת"
+msgstr "×\93×\95×\92×\9e×\94"
 
 #: ../src/extension/internal/bitmap/sample.cpp:47
-msgid ""
-"Alter the resolution of selected image by resizing it by given dimensions."
-msgstr ""
+msgid "Alter the resolution of selected image by resizing it by given dimensions."
+msgstr "שנה את רזולוציית התמונה הנבחרת אל ידי שינוי הגודל שלה על פי המימדים שניתנו."
 
 #: ../src/extension/internal/bitmap/shade.cpp:39
 msgid "Shade"
 msgstr "הצל"
 
 #: ../src/extension/internal/bitmap/shade.cpp:41
-#: ../src/ui/dialog/filter-effects-dialog.cpp:992
+#: ../src/ui/dialog/filter-effects-dialog.cpp:995
 msgid "Azimuth"
-msgstr "×\90×\96×\99×\9e×\95×\98"
+msgstr "×\90×\96×\99×\9e×\95ת"
 
 #: ../src/extension/internal/bitmap/shade.cpp:42
-#: ../src/ui/dialog/filter-effects-dialog.cpp:993
+#: ../src/ui/dialog/filter-effects-dialog.cpp:996
 msgid "Elevation"
-msgstr ""
+msgstr "הגבהה"
 
 #: ../src/extension/internal/bitmap/shade.cpp:43
 msgid "Colored Shading"
-msgstr ""
+msgstr "הצללה בצבע"
 
 #: ../src/extension/internal/bitmap/shade.cpp:49
 msgid "Shade selected bitmap(s) simulating distant light source."
-msgstr ""
+msgstr "הצל את התמונה/ות הנבחרת/ות עם הדמיית מקור אור מרוחק."
 
 #: ../src/extension/internal/bitmap/sharpen.cpp:46
 msgid "Sharpen selected bitmap(s)."
-msgstr ""
+msgstr "שפר את חדות התמונה/ות הנבחרת/ות."
 
 #: ../src/extension/internal/bitmap/solarize.cpp:36
 msgid "Solarize"
-msgstr ""
+msgstr "מכת שמש"
 
 #: ../src/extension/internal/bitmap/solarize.cpp:44
 msgid "Solarize selected bitmap(s), like overexposing photographic film."
-msgstr ""
+msgstr "הפעל אפקט של מכת שמש על התמונה/ות הנבחרת/ות, כמו חשיפת יתר של סרט צילום לשמש."
 
 #: ../src/extension/internal/bitmap/spread.cpp:36
 msgid "Spread"
-msgstr ""
+msgstr "פזר"
 
 #: ../src/extension/internal/bitmap/spread.cpp:44
-msgid ""
-"Randomly spread pixels in selected bitmap(s), within the radius of 'amount.'"
-msgstr ""
+msgid "Randomly spread pixels in selected bitmap(s), within the radius of 'amount.'"
+msgstr "פזר את הפיקסלים בתמונה/ות הנבחרת/ות באופן אקראי, בטווח הרדיוס המוגדר כ-'כמות'."
 
 #: ../src/extension/internal/bitmap/swirl.cpp:36
 msgid "Swirl"
-msgstr ""
+msgstr "ערבל"
 
 #: ../src/extension/internal/bitmap/swirl.cpp:38
 #: ../share/extensions/grid_polar.inx.h:7
@@ -3113,26 +3219,26 @@ msgstr "מעלות"
 
 #: ../src/extension/internal/bitmap/swirl.cpp:44
 msgid "Swirl selected bitmap(s) around center point."
-msgstr ""
+msgstr "ערבל את התמונה/ות הנבחרת/ות סביב נקודת המרכז."
 
 #. TRANSLATORS: see http://docs.gimp.org/en/gimp-tool-threshold.html
 #: ../src/extension/internal/bitmap/threshold.cpp:37
 #: ../src/extension/internal/bitmap/threshold.cpp:39
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:45
 msgid "Threshold"
-msgstr ""
+msgstr "סף"
 
 #: ../src/extension/internal/bitmap/threshold.cpp:45
 msgid "Threshold selected bitmap(s)."
-msgstr ""
+msgstr "שנה את סף הצבעים עבור התמונה/ות הנבחרת/ות -- שיפור האיכות בתמונות שחור לבן."
 
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:40
 msgid "Unsharp Mask"
-msgstr ""
+msgstr "מסכת אי־חדות"
 
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:51
 msgid "Sharpen selected bitmap(s) using unsharp mask algorithms."
-msgstr ""
+msgstr "שפר את חדות התמונה/ות הנבחרת/ות באמצעות אלגוריתמי מסכת אי חדות."
 
 #: ../src/extension/internal/bitmap/wave.cpp:37
 msgid "Wave"
@@ -3148,215 +3254,254 @@ msgstr "אורך גל"
 
 #: ../src/extension/internal/bitmap/wave.cpp:46
 msgid "Alter selected bitmap(s) along sine wave."
-msgstr ""
+msgstr "שנה את התמונה/ות הנבחרת/ות לאורך גל סינוסי."
 
-#: ../src/extension/internal/bluredge.cpp:132
+#: ../src/extension/internal/bluredge.cpp:134
 msgid "Inset/Outset Halo"
-msgstr ""
+msgstr "הילה פנימית/חיצונית"
 
-#: ../src/extension/internal/bluredge.cpp:134
+#: ../src/extension/internal/bluredge.cpp:136
 msgid "Width in px of the halo"
-msgstr ""
+msgstr "רוחב בפיקסלים של ההילה"
 
-#: ../src/extension/internal/bluredge.cpp:135
+#: ../src/extension/internal/bluredge.cpp:137
 msgid "Number of steps"
 msgstr "מספר צעדים"
 
-#: ../src/extension/internal/bluredge.cpp:135
+#: ../src/extension/internal/bluredge.cpp:137
 msgid "Number of inset/outset copies of the object to make"
-msgstr ""
+msgstr "מספר עותקים פנימיים/חיצוניים של הפריט שיש ליצור"
 
-#: ../src/extension/internal/bluredge.cpp:139
-#: ../share/extensions/interp.inx.h:3 ../share/extensions/motion.inx.h:3
+#: ../src/extension/internal/bluredge.cpp:141
+#: ../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
 msgid "Generate from Path"
-msgstr ""
+msgstr "ייצר מנתיב"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:239
-#, fuzzy
+#: ../src/extension/internal/cairo-pdf-out.cpp:238
 msgid "Cairo PDF Output"
-msgstr "פלט EMF"
+msgstr "פלט Cairo PDF"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:241
+#: ../src/extension/internal/cairo-pdf-out.cpp:240
+#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:215
 msgid "Restrict to PDF version"
-msgstr ""
+msgstr "הגבל לגרסת ה־PDF"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:242
+#: ../src/extension/internal/cairo-pdf-out.cpp:241
+#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:216
 msgid "PDF 1.4"
-msgstr ""
+msgstr "PDF 1.4"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:244
-#: ../src/extension/internal/cairo-ps-out.cpp:230
-#: ../src/extension/internal/emf-win32-inout.cpp:2182
+#: ../src/extension/internal/cairo-pdf-out.cpp:243
+#: ../src/extension/internal/cairo-ps-out.cpp:284
+#: ../src/extension/internal/cairo-ps-out.cpp:321
+#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:218
+#: ../src/extension/internal/emf-win32-inout.cpp:2433
 #: ../src/extension/internal/eps-out.cpp:92
 #: ../src/extension/internal/ps-out.cpp:84
 msgid "Convert texts to paths"
-msgstr ""
+msgstr "המר טקסטים לנתיבים"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:245
-#: ../src/extension/internal/cairo-ps-out.cpp:231
+#: ../src/extension/internal/cairo-pdf-out.cpp:244
+#: ../src/extension/internal/cairo-ps-out.cpp:285
+#: ../src/extension/internal/cairo-ps-out.cpp:322
 msgid "Convert blur effects to bitmaps"
-msgstr ""
+msgstr "המר אפקטי טישטוש למפות סיביות"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:246
-#: ../src/extension/internal/cairo-ps-out.cpp:232
+#: ../src/extension/internal/cairo-pdf-out.cpp:245
+#: ../src/extension/internal/cairo-ps-out.cpp:286
+#: ../src/extension/internal/cairo-ps-out.cpp:323
+#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:220
 msgid "Preferred resolution (DPI) of bitmaps"
-msgstr ""
+msgstr "רזולוציה מועדפת (DPI) של מפות הסיביות"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:247
+#: ../src/extension/internal/cairo-pdf-out.cpp:246
+#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:221
 msgid "Export drawing, not page"
-msgstr ""
+msgstr "ייצא את האיור, לא את העמוד"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:248
+#: ../src/extension/internal/cairo-pdf-out.cpp:247
+#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:222
 msgid "Export canvas"
-msgstr ""
+msgstr "ייצא את משטח הציור"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:249
+#: ../src/extension/internal/cairo-pdf-out.cpp:248
+#: ../src/extension/internal/cairo-ps-out.cpp:287
+#: ../src/extension/internal/cairo-ps-out.cpp:324
+#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:223
 msgid "Limit export to the object with ID"
-msgstr ""
+msgstr "הגבל את הייצוא לפריט עם מזהה"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:253
+#: ../src/extension/internal/cairo-pdf-out.cpp:252
 msgid "PDF via Cairo (*.pdf)"
-msgstr ""
+msgstr "PDF באמצעות Cairo (*.pdf)"
 
-#: ../src/extension/internal/cairo-pdf-out.cpp:254
-#, fuzzy
+#: ../src/extension/internal/cairo-pdf-out.cpp:253
 msgid "PDF File"
-msgstr "קובץ"
+msgstr "קובץ PDF"
 
-#: ../src/extension/internal/cairo-ps-out.cpp:222
-#, fuzzy
-msgid "Cairo PS Output"
-msgstr "פלט EMF"
+#: ../src/extension/internal/cairo-ps-out.cpp:274
+#: ../share/extensions/ps_input.inx.h:1
+msgid "PostScript"
+msgstr "PostScript"
 
-#: ../src/extension/internal/cairo-ps-out.cpp:224
+#: ../src/extension/internal/cairo-ps-out.cpp:276
+#: ../src/extension/internal/cairo-ps-out.cpp:313
 msgid "Restrict to PS level"
-msgstr ""
+msgstr "הגבל לרמת PS"
 
-#: ../src/extension/internal/cairo-ps-out.cpp:225
-#, fuzzy
+#: ../src/extension/internal/cairo-ps-out.cpp:277
+#: ../src/extension/internal/cairo-ps-out.cpp:314
 msgid "PostScript level 3"
-msgstr "סקריפט"
+msgstr "PostScript רמה 3"
 
-#: ../src/extension/internal/cairo-ps-out.cpp:227
+#: ../src/extension/internal/cairo-ps-out.cpp:279
+#: ../src/extension/internal/cairo-ps-out.cpp:316
 msgid "PostScript level 2"
-msgstr ""
+msgstr "PostScript רמה 2"
 
-#: ../src/extension/internal/cairo-ps-out.cpp:236
-msgid "PostScript via Cairo (*.ps)"
-msgstr ""
+#: ../src/extension/internal/cairo-ps-out.cpp:282
+#: ../src/extension/internal/cairo-ps-out.cpp:319
+msgid "Export area is whole canvas"
+msgstr "השטח המיוצא הינו משטח הציור כולו"
+
+#: ../src/extension/internal/cairo-ps-out.cpp:283
+#: ../src/extension/internal/cairo-ps-out.cpp:320
+msgid "Export area is the drawing"
+msgstr "השטח המיוצא הינו הציור"
+
+#: ../src/extension/internal/cairo-ps-out.cpp:291
+#: ../share/extensions/ps_input.inx.h:2
+msgid "PostScript (*.ps)"
+msgstr "PostScript (*.ps)"
 
-#: ../src/extension/internal/cairo-ps-out.cpp:237
+#: ../src/extension/internal/cairo-ps-out.cpp:292
 #: ../src/extension/internal/ps-out.cpp:90
 msgid "PostScript File"
-msgstr ""
+msgstr "קובץ PostScript"
+
+#: ../src/extension/internal/cairo-ps-out.cpp:311
+#: ../share/extensions/eps_input.inx.h:2
+msgid "Encapsulated PostScript"
+msgstr "PostScript מכומס"
+
+#: ../src/extension/internal/cairo-ps-out.cpp:328
+#: ../share/extensions/eps_input.inx.h:3
+msgid "Encapsulated PostScript (*.eps)"
+msgstr "PostScript מכומס (*.eps)"
+
+#: ../src/extension/internal/cairo-ps-out.cpp:329
+msgid "Encapsulated PostScript File"
+msgstr "קובץ PostScript מכומס"
+
+#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:219
+msgid "Convert filter effects to bitmaps"
+msgstr "המר אפקטי מסננים למפות סיביות"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2152
+#: ../src/extension/internal/emf-win32-inout.cpp:2403
 msgid "EMF Input"
 msgstr "קלט EMF"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2157
+#: ../src/extension/internal/emf-win32-inout.cpp:2408
 msgid "Enhanced Metafiles (*.emf)"
-msgstr ""
+msgstr "קבצי מטא מורחבים (*.emf)"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2158
+#: ../src/extension/internal/emf-win32-inout.cpp:2409
 msgid "Enhanced Metafiles"
-msgstr ""
+msgstr "קבצי מטא מורחבים"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2166
+#: ../src/extension/internal/emf-win32-inout.cpp:2417
 msgid "WMF Input"
 msgstr "קלט WMF"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2171
+#: ../src/extension/internal/emf-win32-inout.cpp:2422
 msgid "Windows Metafiles (*.wmf)"
-msgstr ""
+msgstr "קבצי מטא של  Windows (*.wmf)"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2172
+#: ../src/extension/internal/emf-win32-inout.cpp:2423
 msgid "Windows Metafiles"
-msgstr ""
+msgstr "קבצי מטא של Windows"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2180
+#: ../src/extension/internal/emf-win32-inout.cpp:2431
 msgid "EMF Output"
 msgstr "פלט EMF"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2186
+#: ../src/extension/internal/emf-win32-inout.cpp:2437
 msgid "Enhanced Metafile (*.emf)"
-msgstr ""
+msgstr "קבצי מטא מורחבים (*.emf)"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2187
+#: ../src/extension/internal/emf-win32-inout.cpp:2438
 msgid "Enhanced Metafile"
-msgstr ""
+msgstr "קובץ מטא מורחב"
 
 #: ../src/extension/internal/eps-out.cpp:89
 msgid "Encapsulated Postscript Output"
-msgstr ""
+msgstr "פלט PostScript מכומס"
 
 #: ../src/extension/internal/eps-out.cpp:91
 msgid "Make bounding box around full page"
-msgstr ""
+msgstr "צור תיבה תוחמת מסביב לכל העמוד"
 
 #: ../src/extension/internal/eps-out.cpp:93
 #: ../src/extension/internal/ps-out.cpp:85
 msgid "Embed fonts (Type 1 only)"
-msgstr ""
+msgstr "הטמע גופנים (סוג 1 בלבד)"
 
 #: ../src/extension/internal/eps-out.cpp:97
-#: ../share/extensions/eps_input.inx.h:3
 msgid "Encapsulated Postscript (*.eps)"
-msgstr ""
+msgstr "Postscript מכומס (*.eps)"
 
 #: ../src/extension/internal/eps-out.cpp:98
 msgid "Encapsulated Postscript File"
-msgstr ""
+msgstr "קובץ PostScript מכומס"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/apparition.h:24
 msgid "Apparition"
-msgstr ""
+msgstr "התגלות"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/apparition.h:25
 msgid "I'm not sure what this word means"
-msgstr ""
+msgstr "אני לא בטוח מה משמעות המילה הזאת"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/bloom.h:24
-#, fuzzy
 msgid "Bloom"
-msgstr "×\96×\95×\9d"
+msgstr "פר×\99×\97×\94"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/bloom.h:25
 msgid "Not sure, nobody tell me these things"
-msgstr ""
+msgstr "לא בטוח, אף אחד לא אומר לי דברים כאלה"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/clouds.h:24
-#, fuzzy
 msgid "Clouds"
-msgstr "_סגור"
+msgstr "עננים"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/clouds.h:25
 msgid "Yes, more descriptions"
-msgstr ""
+msgstr "כן, יותר תיאורים"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/crystal.h:24
 msgid "Crystal"
-msgstr ""
+msgstr "קריסטל"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/crystal.h:25
 msgid "Artist, insert data here"
-msgstr ""
+msgstr "אומן, הזן נתונים כאן"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/cutout.h:24
-#, fuzzy
-msgid "Coutout"
-msgstr "פלט"
+msgid "Cutout"
+msgstr "תגזיר"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/cutout.h:25
@@ -3364,389 +3509,408 @@ msgstr "פלט"
 #: ../src/extension/internal/filter/frost.h:25
 #: ../src/extension/internal/filter/ridged-border.h:25
 msgid "Artist text"
-msgstr ""
+msgstr "טקסט אמנותי"
 
 #: ../src/extension/internal/filter/drop-shadow.h:35
 msgid "Drop Shadow"
-msgstr ""
+msgstr "הטל הצללה"
 
 #: ../src/extension/internal/filter/drop-shadow.h:37
-#, fuzzy
-msgid "Amount of Blur"
-msgstr "כמות"
+msgid "Blur radius, px"
+msgstr "רדיוס הטשטוש, פיקסלים"
 
 #: ../src/extension/internal/filter/drop-shadow.h:38
-#: ../src/extension/internal/grid.cpp:197
-msgid "Horizontal Offset"
-msgstr ""
+#: ../src/ui/widget/object-composite-settings.cpp:62
+#: ../src/ui/widget/selected-style.cpp:1027
+#: ../src/ui/widget/selected-style.cpp:1028
+msgid "Opacity, %"
+msgstr "אטימות, %"
 
 #: ../src/extension/internal/filter/drop-shadow.h:39
-#: ../src/extension/internal/grid.cpp:198
-msgid "Vertical Offset"
-msgstr ""
+msgid "Horizontal offset, px"
+msgstr "קיזוז אופקי,פיקסלים"
 
-#: ../src/extension/internal/filter/drop-shadow.h:43
-#: ../src/extension/internal/filter/filter.cpp:196
+#: ../src/extension/internal/filter/drop-shadow.h:40
+msgid "Vertical offset, px"
+msgstr "קיזוז אנכי, פיקסלים"
+
+#: ../src/extension/internal/filter/drop-shadow.h:44
+#: ../src/extension/internal/filter/filter.cpp:201
 #: ../src/extension/internal/filter/filter-file.cpp:146
 #: ../src/extension/internal/filter/snow.h:38
-#, fuzzy
 msgid "Filter"
-msgstr "ק×\95×\91×¥"
+msgstr "×\9eסנ×\9f"
 
-#: ../src/extension/internal/filter/drop-shadow.h:45
-msgid "I hate text"
-msgstr ""
+#: ../src/extension/internal/filter/drop-shadow.h:46
+msgid "Black, blurred drop shadow"
+msgstr "צל מטושטש בהיטל, שחור"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/emboss.h:22
 msgid "Emboss effect"
-msgstr ""
+msgstr "אפקט תבליט"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/etched-glass.h:24
 msgid "Etched Glass"
-msgstr ""
+msgstr "זכוכית צרובה"
 
 #: ../src/extension/internal/filter/filter-file.cpp:32
-#, fuzzy
 msgid "Bundled"
-msgstr "רנ×\93ר"
+msgstr "×\90ר×\95×\96"
 
 #: ../src/extension/internal/filter/filter-file.cpp:33
 msgid "Personal"
-msgstr ""
+msgstr "אישי"
 
 #: ../src/extension/internal/filter/filter-file.cpp:44
 msgid "Null external module directory name.  Filters will not be loaded."
-msgstr ""
+msgstr "שם תיקיית המודולים החיצונית ריקה.  המסננים לא יטענו."
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/fire.h:24
-#, fuzzy
 msgid "Fire"
-msgstr "ק×\95×\91×¥"
+msgstr "×\90ש"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/fire.h:25
 msgid "Artist on fire"
-msgstr ""
+msgstr "אומן בלהבות"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/frost.h:24
-#, fuzzy
 msgid "Frost"
-msgstr "×\97×\9cק"
+msgstr "קפ×\90×\95×\9f"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/ink-bleed.h:24
 msgid "InkBleed"
-msgstr ""
+msgstr "דימום־דיו"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/ink-bleed.h:25
 msgid "Artist Text"
-msgstr ""
+msgstr "טקסט אומן"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/jelly-bean.h:24
 msgid "Jelly Bean"
-msgstr ""
+msgstr "סוכריות ג'לי"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/jelly-bean.h:25
 msgid "Mmmm, yummy."
-msgstr ""
+msgstr "ממממ, טעים."
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/jigsaw-piece.h:24
 msgid "JigsawPiece"
-msgstr ""
+msgstr "חלק ממסורית"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/jigsaw-piece.h:25
 msgid "It's a puzzle, no hints"
-msgstr ""
+msgstr "זה פאזל, אין רמזים"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/leopard-fur.h:24
 msgid "Leopard Fur"
-msgstr ""
+msgstr "פרוות נמר"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/leopard-fur.h:25
 msgid "Purrrr, quiet the kitty is sleeping"
-msgstr ""
+msgstr "פררררר, שקט החתלתול ישן"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/melt.h:22
-#, fuzzy
 msgid "Melt"
-msgstr "×\9e×\98ר"
+msgstr "× ×\9eס"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/melt.h:23
 msgid "Melt effect"
-msgstr ""
+msgstr "אפקט הנמסות"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/metal.h:24
-#, fuzzy
 msgid "Metal"
-msgstr "×\9e×\98ר"
+msgstr "×\9eת×\9bת"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/metal.h:25
 msgid "Iron Man vector objects"
-msgstr ""
+msgstr "פריטי וקטורים של Iron Man"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/motion-blur.h:24
 msgid "Motion Blur"
-msgstr ""
+msgstr "טשטוש מתנועה"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/motion-blur.h:25
 msgid "Hmm, fast vectors"
-msgstr ""
+msgstr "הממ, וקטורים מהירים"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/oil-slick.h:24
 msgid "OilSlick"
-msgstr ""
+msgstr "החלקת־שמן"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/oil-slick.h:25
 msgid "Ooops!  Slippery!"
-msgstr ""
+msgstr "אופס! חלקלק!"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/patterned-glass.h:24
 msgid "PatternedGlass"
-msgstr ""
+msgstr "זכוכית־מעוטרת"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/patterned-glass.h:25
 msgid "Doesn't work, bug"
-msgstr ""
+msgstr "לא עובד, באג"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/ridged-border.h:24
 msgid "Ridged Border"
-msgstr ""
+msgstr "גבול חרוש"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/ripple.h:24
-#, fuzzy
 msgid "Ripple"
-msgstr "ק×\95×\91×¥"
+msgstr "×\92×\9c×\99"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/ripple.h:25
 msgid "You're 80% water"
-msgstr ""
+msgstr "אתה 80% מים"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/roughen.h:24
 msgid "Roughen"
-msgstr ""
+msgstr "חיספוס"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/roughen.h:25
 msgid "Like Brad Pitt's stubble"
-msgstr ""
+msgstr "כמו הזיפים של בראד פיט"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/rubber-stamp.h:24
 msgid "RubberStamp"
-msgstr ""
+msgstr "חותמת־גומי"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/rubber-stamp.h:25
 msgid "Use this to forge your passport"
-msgstr ""
+msgstr "השתמש בזה כדי לשכוח את הדרכון שלך"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/sepia.h:24
-#, fuzzy
 msgid "Sepia"
-msgstr "ש×\9c×\91×\99×\9d"
+msgstr "×\97×\95×\9d ×\9b×\94×\94"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/sepia.h:25
 msgid "Turn all the colors to be sepia tones"
-msgstr ""
+msgstr "הפוך את כל הצבעים כך שיהיו בגווני חום כהה"
 
 #: ../src/extension/internal/filter/snow.h:32
 msgid "Snow"
-msgstr ""
+msgstr "שלג"
 
 #: ../src/extension/internal/filter/snow.h:34
 msgid "Drift Size"
-msgstr ""
+msgstr "גודל הסחיפה"
 
 #: ../src/extension/internal/filter/snow.h:40
 msgid "When the weather outside is frightening..."
-msgstr ""
+msgstr "כאשר מזג האוויר בחוץ מפחיד..."
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/speckle.h:24
-#, fuzzy
 msgid "Speckle"
-msgstr "צ×\95ר×\95ת"
+msgstr "×\9bת×\9d"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/speckle.h:25
 msgid "You look cute with speckles"
-msgstr ""
+msgstr "אתה נראה חמוד עם כתמים"
 
 #. ID -- should be unique
 #: ../src/extension/internal/filter/zebra.h:24
 msgid "Zebra Stripes"
-msgstr ""
+msgstr "פסי זברה"
 
 #. Name in the menus, should have a N_() around it for translation
 #: ../src/extension/internal/filter/zebra.h:25
 msgid "Paint your object with zebra stripes"
-msgstr ""
+msgstr "צבע את הפריט שלך בפסים של זברה"
 
-#: ../src/extension/internal/gdkpixbuf-input.cpp:114
+#: ../src/extension/internal/gdkpixbuf-input.cpp:113
 #, c-format
 msgid "%s GDK pixbuf Input"
-msgstr ""
+msgstr "קלט %s GDK pixbuf"
 
 #: ../src/extension/internal/gimpgrad.cpp:274
 msgid "GIMP Gradients"
-msgstr ""
+msgstr "מדרגים של GIMP"
 
 #: ../src/extension/internal/gimpgrad.cpp:279
 msgid "GIMP Gradient (*.ggr)"
-msgstr ""
+msgstr "מדרג של GIMP (*.ggr)"
 
 #: ../src/extension/internal/gimpgrad.cpp:280
 msgid "Gradients used in GIMP"
-msgstr ""
+msgstr "מדרגים בהם GIMP משתמש"
 
-#: ../src/extension/internal/grid.cpp:192 ../src/ui/widget/panel.cpp:122
+#: ../src/extension/internal/grid.cpp:192
+#: ../src/ui/widget/panel.cpp:112
 msgid "Grid"
-msgstr ""
+msgstr "רשת"
 
 #: ../src/extension/internal/grid.cpp:194
 msgid "Line Width"
-msgstr "×¢×\95×\91×\99 קו"
+msgstr "ר×\95×\97×\91 ×\94קו"
 
 #: ../src/extension/internal/grid.cpp:195
 msgid "Horizontal Spacing"
-msgstr ""
+msgstr "ריווח אופקי"
 
 #: ../src/extension/internal/grid.cpp:196
 msgid "Vertical Spacing"
-msgstr ""
+msgstr "ריווח אנכי"
+
+#: ../src/extension/internal/grid.cpp:197
+msgid "Horizontal Offset"
+msgstr "קיזוז אופקי"
+
+#: ../src/extension/internal/grid.cpp:198
+msgid "Vertical Offset"
+msgstr "קיזוז אנכי"
 
-#: ../src/extension/internal/grid.cpp:202 ../share/extensions/eqtexsvg.inx.h:3
-#: ../share/extensions/funcplot.inx.h:12 ../share/extensions/gears.inx.h:5
+#: ../src/extension/internal/grid.cpp:202
+#: ../share/extensions/draw_from_triangle.inx.h:30
+#: ../share/extensions/eqtexsvg.inx.h:3
+#: ../share/extensions/funcplot.inx.h:12
+#: ../share/extensions/gears.inx.h:5
 #: ../share/extensions/grid_cartesian.inx.h:15
 #: ../share/extensions/grid_polar.inx.h:18
 #: ../share/extensions/lindenmayer.inx.h:11
 #: ../share/extensions/polyhedron_3d.inx.h:32
 #: ../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/triangle.inx.h:10
 msgid "Render"
-msgstr "רנ×\93ר"
+msgstr "×¢×\99×\91×\95×\93"
 
 #: ../src/extension/internal/grid.cpp:204
 msgid "Draw a path which is a grid"
-msgstr ""
+msgstr "צייר נתיב שהוא רשת"
+
+#: ../src/extension/internal/javafx-out.cpp:922
+msgid "JavaFX Output"
+msgstr "פלט JavaFX"
+
+#: ../src/extension/internal/javafx-out.cpp:927
+msgid "JavaFX (*.fx)"
+msgstr "JavaFX (*.fx)"
+
+#: ../src/extension/internal/javafx-out.cpp:928
+msgid "JavaFX Raytracer File"
+msgstr "קובץ Raytracer של JavaFX"
 
-#: ../src/extension/internal/latex-pstricks.cpp:347
+#: ../src/extension/internal/latex-pstricks.cpp:345
 msgid "LaTeX Print"
-msgstr ""
+msgstr "הדפסת LaTeX"
 
-#: ../src/extension/internal/latex-pstricks-out.cpp:106
+#: ../src/extension/internal/latex-pstricks-out.cpp:105
 msgid "LaTeX Output"
-msgstr ""
+msgstr "פלט LaTeX"
 
-#: ../src/extension/internal/latex-pstricks-out.cpp:111
+#: ../src/extension/internal/latex-pstricks-out.cpp:110
 msgid "LaTeX With PSTricks macros (*.tex)"
-msgstr ""
+msgstr "מקרו של LaTeX עם PSTricks (*.tex)"
 
-#: ../src/extension/internal/latex-pstricks-out.cpp:112
+#: ../src/extension/internal/latex-pstricks-out.cpp:111
 msgid "LaTeX PSTricks File"
-msgstr ""
+msgstr "קובץ LaTeX PSTricks"
 
-#: ../src/extension/internal/odf.cpp:2424
+#: ../src/extension/internal/odf.cpp:2415
 msgid "OpenDocument Drawing Output"
-msgstr ""
+msgstr "פלט ציור OpenDocument"
 
-#: ../src/extension/internal/odf.cpp:2429
+#: ../src/extension/internal/odf.cpp:2420
 msgid "OpenDocument drawing (*.odg)"
-msgstr ""
+msgstr "ציור OpenDocument (*.odg)"
 
-#: ../src/extension/internal/odf.cpp:2430
+#: ../src/extension/internal/odf.cpp:2421
 msgid "OpenDocument drawing file"
-msgstr ""
+msgstr "קובץ ציור OpenDocument"
 
-#: ../src/extension/internal/pdf-cairo.cpp:127
-#: ../src/extension/internal/ps.cpp:147
+#: ../src/extension/internal/pdf-cairo.cpp:126
+#: ../src/extension/internal/ps.cpp:151
 msgid "Print Destination"
-msgstr ""
+msgstr "יעד ההדפסה"
 
 #. Print properties frame
-#: ../src/extension/internal/pdf-cairo.cpp:142
-#: ../src/extension/internal/ps.cpp:162
+#: ../src/extension/internal/pdf-cairo.cpp:141
+#: ../src/extension/internal/ps.cpp:166
 msgid "Print properties"
 msgstr "אפשרויות הדפסה"
 
-#: ../src/extension/internal/pdf-cairo.cpp:149
+#: ../src/extension/internal/pdf-cairo.cpp:148
 msgid "Print using PDF operators"
-msgstr ""
+msgstr "הדפס באמצעות מפעיל PDF"
 
-#: ../src/extension/internal/pdf-cairo.cpp:151
-msgid ""
-"Use PDF vector operators. The resulting image is usually smaller in file "
-"size and can be arbitrarily scaled, but patterns will be lost."
-msgstr ""
+#: ../src/extension/internal/pdf-cairo.cpp:150
+msgid "Use PDF vector operators. The resulting image is usually smaller in file size and can be arbitrarily scaled, but patterns will be lost."
+msgstr "השתמש במפעילי וקטור ב־PDF. התמונה המתקבלת לרב קטנה בנפחה וניתן לשנות את גודלה באופן שרירותי, אך התבניות יאבדו."
 
-#: ../src/extension/internal/pdf-cairo.cpp:156
-#: ../src/extension/internal/ps.cpp:176
+#: ../src/extension/internal/pdf-cairo.cpp:155
+#: ../src/extension/internal/ps.cpp:180
 msgid "Print as bitmap"
-msgstr ""
+msgstr "הדפס כמפת סיביות"
 
-#: ../src/extension/internal/pdf-cairo.cpp:158
-#: ../src/extension/internal/ps.cpp:178
-msgid ""
-"Print 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 ""
+#: ../src/extension/internal/pdf-cairo.cpp:157
+#: ../src/extension/internal/ps.cpp:182
+msgid "Print 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 "הדפס הכל כמפת סיביות. התמונה המתקבלת לרב גדולה בנפחה ולא ניתן לשנות את גודלה באופן שרירותי מבלי לאבד באיכות, אך כל הפריטים יעובדו בדיוק כפי שהם מוצגים."
 
-#: ../src/extension/internal/pdf-cairo.cpp:172
-#: ../src/extension/internal/ps.cpp:192
+#: ../src/extension/internal/pdf-cairo.cpp:171
+#: ../src/extension/internal/ps.cpp:196
 msgid "Preferred resolution (dots per inch) of bitmap"
-msgstr ""
+msgstr "רזולוציה מועדפת (נקודות לאינטש) למפת סיביות"
 
-#: ../src/extension/internal/pdf-cairo.cpp:186
-#: ../src/extension/internal/ps.cpp:206
+#: ../src/extension/internal/pdf-cairo.cpp:185
+#: ../src/extension/internal/ps.cpp:210
 msgid "Resolution:"
 msgstr "רזולוציה:"
 
 #. Print destination frame
-#: ../src/extension/internal/pdf-cairo.cpp:190
-#: ../src/extension/internal/ps.cpp:213
+#: ../src/extension/internal/pdf-cairo.cpp:189
+#: ../src/extension/internal/ps.cpp:217
 msgid "Print destination"
-msgstr "יעד הדפסה"
+msgstr "×\99×¢×\93 ×\9c×\94×\93פס×\94"
 
-#: ../src/extension/internal/pdf-cairo.cpp:196
-#: ../src/extension/internal/ps.cpp:219
+#: ../src/extension/internal/pdf-cairo.cpp:195
+#: ../src/extension/internal/ps.cpp:223
 msgid ""
 "Printer name (as given by lpstat -p);\n"
 "leave empty to use the system default printer.\n"
 "Use '> filename' to print to file.\n"
 "Use '| prog arg...' to pipe to a program."
 msgstr ""
+"שם המדפסת (כפי שניתן על ידי lpstat -p);\n"
+"הותר ריק כדי לעשות שימוש במדפסת ברירת המחדל של המערכת\n"
+"השתמש ב '> filename' כדי להדפיס לקובץ.\n"
+"השתמש ב-'| prog arg...' כדי לנתב לתוכנה."
 
-#: ../src/extension/internal/pdf-cairo.cpp:1060
+#: ../src/extension/internal/pdf-cairo.cpp:1027
 msgid "PDF Print"
 msgstr "הדפסת PDF"
 
@@ -3754,156 +3918,149 @@ msgstr "הדפסת PDF"
 #. more info: http://www.acrobatusers.com/tech_corners/javascript_corner/tips/2006/page_bounds/
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:56
 msgid "media box"
-msgstr ""
+msgstr "תיבת מדיה"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:57
 msgid "crop box"
-msgstr ""
+msgstr "תיבת חיתוך"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:58
 msgid "trim box"
-msgstr ""
+msgstr "תיבת קיצוץ"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:59
 msgid "bleed box"
-msgstr ""
+msgstr "תיבת דימום"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:60
 msgid "art box"
-msgstr ""
+msgstr "תיבת אומנות"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:72
 msgid "Select page:"
-msgstr ""
+msgstr "בחר עמוד:"
 
 #. Display total number of pages
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:86
 #, c-format
 msgid "out of %i"
-msgstr ""
+msgstr "מתוך %i"
 
 #. Crop settings
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:92
 msgid "Clip to:"
-msgstr ""
+msgstr "הצמד אל:"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:104
 msgid "Page settings"
-msgstr ""
+msgstr "הגדרות עמוד"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:106
 msgid "Precision of approximating gradient meshes:"
-msgstr ""
+msgstr "דיוק ההערכה של הרכבות המדרג:"
 
 #: ../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 ""
+msgid "<b>Note</b>: setting the precision too high may result in a large SVG file and slow performance."
+msgstr "<b>הערה</b>: הגדרת דיוק גבוהה מדי עלולה לגרום לקובץ SVG גדול בנפחו ולביצוע איטי."
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:112
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:381
 msgid "rough"
-msgstr ""
+msgstr "גס"
 
 #. Text options
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:116
 msgid "Text handling:"
-msgstr ""
+msgstr "טיפול בטקסט:"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:118
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:119
 msgid "Import text as text"
-msgstr ""
+msgstr "ייבא טקסט כטקסט"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:122
 msgid "Embed images"
-msgstr ""
+msgstr "הטמע תמונות"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:125
 msgid "Import settings"
-msgstr ""
+msgstr "ייבא הגדרות"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:242
 msgid "PDF Import Settings"
-msgstr ""
+msgstr "ייבא הגדרו PDF"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:382
 msgid "pdfinput|medium"
-msgstr ""
+msgstr "pdfinput|בינוני"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:383
 msgid "fine"
-msgstr ""
+msgstr "איכותי"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:384
 msgid "very fine"
-msgstr ""
+msgstr "איכותי מאוד"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:739
-#, fuzzy
 msgid "PDF Input"
-msgstr "קלט EMF"
+msgstr "קלט PDF"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:744
 msgid "Adobe PDF (*.pdf)"
-msgstr ""
+msgstr "Adobe PDF (*.pdf)"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:745
 msgid "Adobe Portable Document Format"
-msgstr ""
+msgstr "Adobe מבנה קובץ נייד"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:752
-#, fuzzy
 msgid "AI Input"
-msgstr "קלט EMF"
+msgstr "קלט AI"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:757
 msgid "Adobe Illustrator 9.0 and above (*.ai)"
-msgstr ""
+msgstr "Adobe Illustrator 9.0 ומעלה (*.ai)"
 
 #: ../src/extension/internal/pdfinput/pdf-input.cpp:758
 msgid "Open files saved in Adobe Illustrator 9.0 and newer versions"
-msgstr ""
+msgstr "פתח קבצים שנשמרו תחת Adobe Illustrator 9.0 או גירסאות חדשות יותר"
 
-#: ../src/extension/internal/pov-out.cpp:666
+#: ../src/extension/internal/pov-out.cpp:676
 msgid "PovRay Output"
-msgstr ""
+msgstr "פלט PovRay"
 
-#: ../src/extension/internal/pov-out.cpp:671
+#: ../src/extension/internal/pov-out.cpp:681
 msgid "PovRay (*.pov) (export splines)"
-msgstr ""
+msgstr "PovRay (*.pov) (ייצא שגמים)"
 
-#: ../src/extension/internal/pov-out.cpp:672
+#: ../src/extension/internal/pov-out.cpp:682
 msgid "PovRay Raytracer File"
-msgstr ""
+msgstr "קובץ Raytracer של PovRay"
 
-#: ../src/extension/internal/ps.cpp:147
+#: ../src/extension/internal/ps.cpp:151
 msgid "Print Configuration"
 msgstr "הגדרות הדפסה"
 
-#: ../src/extension/internal/ps.cpp:169
+#: ../src/extension/internal/ps.cpp:173
 msgid "Print using PostScript operators"
-msgstr ""
+msgstr "הדפס באמצעות מפעילים של PostScript"
 
-#: ../src/extension/internal/ps.cpp:171
-msgid ""
-"Use PostScript vector operators. The resulting image is usually smaller in "
-"file size and can be arbitrarily scaled, but alpha transparency and patterns "
-"will be lost."
-msgstr ""
+#: ../src/extension/internal/ps.cpp:175
+msgid "Use PostScript vector operators. The resulting image is usually smaller in file size and can be arbitrarily scaled, but alpha transparency and patterns will be lost."
+msgstr "השתמש במפעילים הוקטוריים של PostScript. התמונה המתקבלת הינה בדרך כלל בעלת נפח קטן יותר וניתן לשנות את גודלה באופן שרירותי, אך השקיפות (אלפא) והתבניות יאבדו."
 
-#: ../src/extension/internal/ps.cpp:1753
+#: ../src/extension/internal/ps.cpp:1768
 msgid "Postscript Print"
-msgstr ""
+msgstr "הדפסת Postscript"
 
 #: ../src/extension/internal/ps-out.cpp:82
 msgid "Postscript Output"
-msgstr ""
+msgstr "פלט Postscript"
 
 #: ../src/extension/internal/ps-out.cpp:89
-msgid "PostScript (*.ps)"
-msgstr ""
+msgid "PostScript (old exporter via print) (*.ps)"
+msgstr "PostScript (המייצא הישן דרך הדפסה) (*.ps)"
 
 #: ../src/extension/internal/svg.cpp:55
 msgid "SVG Input"
@@ -3911,53 +4068,54 @@ msgstr "קלט SVG"
 
 #: ../src/extension/internal/svg.cpp:60
 msgid "Scalable Vector Graphic (*.svg)"
-msgstr ""
+msgstr "גרפיקת וקטורים משתנה (*.svg)"
 
 #: ../src/extension/internal/svg.cpp:61
 msgid "Inkscape native file format and W3C standard"
-msgstr ""
+msgstr "קובץ מקומי של אינקסקייפ שתואם לתקן ה־W3C"
 
 #: ../src/extension/internal/svg.cpp:69
 msgid "SVG Output Inkscape"
-msgstr ""
+msgstr "פלט SVG של אינקסקייפ"
 
 #: ../src/extension/internal/svg.cpp:74
 msgid "Inkscape SVG (*.svg)"
-msgstr ""
+msgstr "SVG של אינקסקייפ (*.svg)"
 
 #: ../src/extension/internal/svg.cpp:75
 msgid "SVG format with Inkscape extensions"
-msgstr ""
+msgstr "תבנית SVG עם הרחבות של אינקסקייפ"
 
 #: ../src/extension/internal/svg.cpp:83
-#: ../src/ui/dialog/inkscape-preferences.cpp:942
 msgid "SVG Output"
 msgstr "פלט SVG"
 
 #: ../src/extension/internal/svg.cpp:88
 msgid "Plain SVG (*.svg)"
-msgstr ""
+msgstr "SVG רגיל (*.svg)"
 
 #: ../src/extension/internal/svg.cpp:89
 msgid "Scalable Vector Graphics format as defined by the W3C"
-msgstr ""
+msgstr "גרפיקת וקטורים משתנה כפי שהוגדר על ידי ה־W3C"
 
 #: ../src/extension/internal/svgz.cpp:47
 #: ../share/extensions/svgz_input.inx.h:3
 msgid "SVGZ Input"
 msgstr "קלט SVGZ"
 
-#: ../src/extension/internal/svgz.cpp:53 ../src/extension/internal/svgz.cpp:67
+#: ../src/extension/internal/svgz.cpp:53
+#: ../src/extension/internal/svgz.cpp:67
 #: ../share/extensions/svgz_input.inx.h:1
 #: ../share/extensions/svgz_output.inx.h:1
 msgid "Compressed Inkscape SVG (*.svgz)"
-msgstr ""
+msgstr "SVG של אינקסקייפ דחוס (*.svgz)"
 
 #: ../src/extension/internal/svgz.cpp:54
 msgid "SVG file format compressed with GZip"
-msgstr ""
+msgstr "מבנה קובץ SVG דחוס ב־GZip"
 
-#: ../src/extension/internal/svgz.cpp:62 ../src/extension/internal/svgz.cpp:76
+#: ../src/extension/internal/svgz.cpp:62
+#: ../src/extension/internal/svgz.cpp:76
 #: ../share/extensions/svgz_output.inx.h:3
 msgid "SVGZ Output"
 msgstr "פלט SVGZ"
@@ -3966,19 +4124,19 @@ msgstr "פלט SVGZ"
 #: ../share/extensions/svgz_input.inx.h:2
 #: ../share/extensions/svgz_output.inx.h:2
 msgid "Inkscape's native file format compressed with GZip"
-msgstr ""
+msgstr "מבנה הקובץ המקומי של אינקסקייפ דחוס באמצעות GZip"
 
 #: ../src/extension/internal/svgz.cpp:81
 msgid "Compressed plain SVG (*.svgz)"
-msgstr ""
+msgstr "SVG פשוט דחוס (*.svgz)"
 
 #: ../src/extension/internal/svgz.cpp:82
 msgid "Scalable Vector Graphics format compressed with GZip"
-msgstr ""
+msgstr "מבנה גרפיקת וקטורים משתנה דחוס באמצעות GZip"
 
-#: ../src/extension/internal/win32.cpp:491
+#: ../src/extension/internal/win32.cpp:485
 msgid "Windows 32-bit Print"
-msgstr ""
+msgstr "הדפסת Windows 32 ביט"
 
 #: ../src/extension/internal/wpg-input.cpp:102
 msgid "WPG Input"
@@ -3986,19 +4144,19 @@ msgstr "קלט WPG"
 
 #: ../src/extension/internal/wpg-input.cpp:107
 msgid "WordPerfect Graphics (*.wpg)"
-msgstr ""
+msgstr "גרפיקה של WordPerfect (*.wpg)"
 
 #: ../src/extension/internal/wpg-input.cpp:108
 msgid "Vector graphics format used by Corel WordPerfect"
-msgstr ""
+msgstr "גרפיקות וקטורים הנמצאות בשימוש על ידי WordPerfect של Corel"
 
-#: ../src/extension/prefdialog.cpp:237
-msgid "Live Preview"
-msgstr ""
+#: ../src/extension/prefdialog.cpp:236
+msgid "Live preview"
+msgstr "תצוגה חיה"
 
-#: ../src/extension/prefdialog.cpp:237
-msgid "Controls whether the effect settings are rendered live on canvas"
-msgstr ""
+#: ../src/extension/prefdialog.cpp:236
+msgid "Is the effect previewed live on canvas?"
+msgstr "האם יש להציג את שינויי האפקט ישירות על משטח הציור?"
 
 #. We can't call sp_ui_error_dialog because we may be
 #. running from the console, in which case calling sp_ui
@@ -4006,345 +4164,356 @@ msgstr ""
 #. sp_ui_error_dialog(_("Format autodetect failed. The file is being opened as SVG."));
 #: ../src/extension/system.cpp:103
 msgid "Format autodetect failed. The file is being opened as SVG."
-msgstr ""
+msgstr "זיהוי המבנה האוטומטי נכשל. הקובץ ייפתח בתור SVG."
 
 #. TRANSLATORS: default.svg is localizable - this is the name of the default document
 #. template. This way you can localize the default pagesize, translate the name of
 #. the default layer, etc. If you wish to localize this file, please create a
 #. localized share/templates/default.xx.svg file, where xx is your language code.
-#: ../src/file.cpp:139
+#: ../src/file.cpp:154
 msgid "default.svg"
-msgstr ""
+msgstr "ברירת מחדל.svg"
 
-#: ../src/file.cpp:225 ../src/file.cpp:993
+#: ../src/file.cpp:240
+#: ../src/file.cpp:1020
 #, c-format
 msgid "Failed to load the requested file %s"
-msgstr ""
+msgstr "שגיאה בטעינת הקובץ המבוקש %s"
 
-#: ../src/file.cpp:250
+#: ../src/file.cpp:265
 msgid "Document not saved yet.  Cannot revert."
-msgstr ""
+msgstr "המסמך לא נשמר עדיין. לא ניתן לשחזר."
 
-#: ../src/file.cpp:256
+#: ../src/file.cpp:271
 #, c-format
 msgid "Changes will be lost!  Are you sure you want to reload document %s?"
-msgstr ""
+msgstr "השינויים יאבדו! האם אתה בטוח שברצונך לטעון את המסמך %s?"
 
-#: ../src/file.cpp:285
+#: ../src/file.cpp:300
 msgid "Document reverted."
-msgstr ""
+msgstr "המסמך שוחזר."
 
-#: ../src/file.cpp:287
+#: ../src/file.cpp:302
 msgid "Document not reverted."
-msgstr ""
+msgstr "המסמך לא שוחזר."
 
-#: ../src/file.cpp:437
+#: ../src/file.cpp:452
 msgid "Select file to open"
 msgstr "בחר קובץ לפתיחה"
 
-#: ../src/file.cpp:524
+#: ../src/file.cpp:539
 msgid "Vacuum &lt;defs&gt;"
-msgstr ""
+msgstr "איפוס הגדרות &lt;defs&gt;"
 
-#: ../src/file.cpp:529
+#: ../src/file.cpp:544
 #, c-format
 msgid "Removed <b>%i</b> unused definition in &lt;defs&gt;."
 msgid_plural "Removed <b>%i</b> unused definitions in &lt;defs&gt;."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "הוסרה הגדרה <b>%i</b> שאינה בשימוש ב־&lt;defs&gt;."
+msgstr[1] "הוסרו <b>%i</b> הגדרות שאינן בשימוש ב־&lt;defs&gt;."
 
-#: ../src/file.cpp:534
+#: ../src/file.cpp:549
 msgid "No unused definitions in &lt;defs&gt;."
-msgstr ""
+msgstr "אין הגדרות שאינן בשימוש ב־&lt;defs&gt;."
 
-#: ../src/file.cpp:563
+#: ../src/file.cpp:578
 #, c-format
-msgid ""
-"No Inkscape extension found to save document (%s).  This may have been "
-"caused by an unknown filename extension."
-msgstr ""
+msgid "No Inkscape extension found to save document (%s).  This may have been caused by an unknown filename extension."
+msgstr "לא נמצאו הרחבות אינסקייפ לשמירת המסמך (%s). ייתכן ודבר זה נגרם עקב סיומת קובץ לא ידועה."
 
-#: ../src/file.cpp:564 ../src/file.cpp:572
+#: ../src/file.cpp:579
+#: ../src/file.cpp:587
 msgid "Document not saved."
 msgstr "המסמך לא נשמר."
 
-#: ../src/file.cpp:571
+#: ../src/file.cpp:586
 #, c-format
 msgid "File %s could not be saved."
-msgstr "שמירת הקובץ %s כשלה."
+msgstr "ש×\9e×\99רת ×\94ק×\95×\91×¥ %s × ×\9bש×\9c×\94."
 
-#: ../src/file.cpp:582
+#: ../src/file.cpp:597
 msgid "Document saved."
 msgstr "המסמך נשמר."
 
-#: ../src/file.cpp:721 ../src/file.cpp:1118 ../src/file.cpp:1235
+#: ../src/file.cpp:738
+#: ../src/file.cpp:1147
+#: ../src/file.cpp:1266
 #, c-format
 msgid "drawing%s"
-msgstr ""
+msgstr "ציור%s"
 
-#: ../src/file.cpp:727
+#: ../src/file.cpp:744
 #, c-format
 msgid "drawing-%d%s"
-msgstr ""
+msgstr "ציור־%d%s"
 
-#: ../src/file.cpp:746
+#: ../src/file.cpp:763
 msgid "Select file to save a copy to"
-msgstr ""
+msgstr "בחר קובץ אליו יישמר עותק"
 
-#: ../src/file.cpp:748
+#: ../src/file.cpp:765
 msgid "Select file to save to"
-msgstr ""
+msgstr "בחר קובץ לשמירה אליו"
 
-#: ../src/file.cpp:819
+#: ../src/file.cpp:845
 msgid "No changes need to be saved."
-msgstr ""
+msgstr "אין שינויים הזקוקים לשמירה."
 
-#: ../src/file.cpp:836
+#: ../src/file.cpp:862
 msgid "Saving document..."
-msgstr ""
+msgstr "שומר מסמך...‏"
 
-#: ../src/file.cpp:990
+#: ../src/file.cpp:1017
 msgid "Import"
 msgstr "ייבוא"
 
-#: ../src/file.cpp:1022
+#: ../src/file.cpp:1049
 msgid "Select file to import"
 msgstr "בחר קובץ לייבוא"
 
-#: ../src/file.cpp:1140 ../src/file.cpp:1250
+#: ../src/file.cpp:1169
+#: ../src/file.cpp:1281
 msgid "Select file to export to"
 msgstr "בחר קובץ לייצוא"
 
-#: ../src/file.cpp:1277
+#: ../src/file.cpp:1308
+#, c-format
 msgid "Error saving a temporary copy"
 msgstr "שגיאה בשמירת עותק זמני"
 
-#: ../src/file.cpp:1296
+#: ../src/file.cpp:1328
 msgid "Open Clip Art Login"
-msgstr ""
+msgstr "התחברות לאוסף התמונות החופשיות"
 
-#: ../src/file.cpp:1317
-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 you "
-"didn't forget to choose a license."
-msgstr ""
+#: ../src/file.cpp:1349
+#, c-format
+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 you didn't forget to choose a license."
+msgstr "שגיאה בעת ייצוא המסמך. וודא ששם השרת, שם המשתמש והסיסמה נכונים. אם השרת תומך ב־webdav וודא שלא שכחת לבחור רשיון."
 
-#: ../src/file.cpp:1338
+#: ../src/file.cpp:1370
 msgid "Document exported..."
-msgstr ""
+msgstr "המסמך מיוצא..."
 
-#: ../src/file.cpp:1366 ../src/verbs.cpp:2182
+#: ../src/file.cpp:1398
+#: ../src/verbs.cpp:2237
 msgid "Import From Open Clip Art Library"
-msgstr ""
+msgstr "ייבא מספריית אוסף התמונות החופשיות"
 
 #: ../src/filter-enums.cpp:20
 msgid "Blend"
-msgstr ""
+msgstr "תערובת"
 
 #: ../src/filter-enums.cpp:21
 msgid "Color Matrix"
-msgstr ""
+msgstr "מטריצת צבעים"
 
 #: ../src/filter-enums.cpp:22
 msgid "Component Transfer"
-msgstr ""
+msgstr "העברת רכיב"
 
 #: ../src/filter-enums.cpp:23
 msgid "Composite"
-msgstr ""
+msgstr "מרוכב"
 
 #: ../src/filter-enums.cpp:24
 msgid "Convolve Matrix"
-msgstr ""
+msgstr "מטריצה שזורה"
 
 #: ../src/filter-enums.cpp:25
 msgid "Diffuse Lighting"
-msgstr ""
+msgstr "תאורה פזורה"
 
 #: ../src/filter-enums.cpp:26
 msgid "Displacement Map"
-msgstr ""
+msgstr "מפת העתקת מיקום"
 
 #: ../src/filter-enums.cpp:27
 msgid "Flood"
-msgstr ""
+msgstr "הצפה"
 
-#: ../src/filter-enums.cpp:29 ../src/selection-describer.cpp:53
+#: ../src/filter-enums.cpp:29
+#: ../src/selection-describer.cpp:53
 msgid "Image"
-msgstr ""
+msgstr "תמונה"
 
 #: ../src/filter-enums.cpp:30
 msgid "Merge"
-msgstr ""
+msgstr "מזג"
 
 #: ../src/filter-enums.cpp:31
 msgid "Morphology"
-msgstr ""
+msgstr "מורפולוגיה"
 
 #: ../src/filter-enums.cpp:33
 msgid "Specular Lighting"
-msgstr ""
+msgstr "תאורה משתקפת"
 
 #: ../src/filter-enums.cpp:34
 msgid "Tile"
-msgstr ""
+msgstr "אריח"
 
-#: ../src/filter-enums.cpp:35 ../src/filter-enums.cpp:118
+#: ../src/filter-enums.cpp:35
+#: ../src/filter-enums.cpp:118
 msgid "Turbulence"
-msgstr ""
+msgstr "מערבולת"
 
 #: ../src/filter-enums.cpp:40
 msgid "Source Graphic"
-msgstr ""
+msgstr "גרפיקת מקור"
 
 #: ../src/filter-enums.cpp:41
 msgid "Source Alpha"
-msgstr ""
+msgstr "שקיפות מקורית"
 
 #: ../src/filter-enums.cpp:42
 msgid "Background Image"
-msgstr ""
+msgstr "תמונת הרקע"
 
 #: ../src/filter-enums.cpp:43
 msgid "Background Alpha"
-msgstr ""
+msgstr "שקיפות הרקע"
 
 #: ../src/filter-enums.cpp:44
 msgid "Fill Paint"
-msgstr ""
+msgstr "צבע המילוי"
 
 #: ../src/filter-enums.cpp:45
 msgid "Stroke Paint"
-msgstr ""
+msgstr "צבע קו המתאר"
 
 #. TRANSLATORS: This is a context string, only put the word "Normal" in your translation
 #: ../src/filter-enums.cpp:52
 msgid "filterBlendMode|Normal"
-msgstr ""
+msgstr "filterBlendMode|רגיל"
 
 #: ../src/filter-enums.cpp:53
 msgid "Multiply"
-msgstr ""
+msgstr "מוכפל"
 
 #: ../src/filter-enums.cpp:54
 msgid "Screen"
-msgstr ""
+msgstr "מסך"
 
 #: ../src/filter-enums.cpp:55
 msgid "Darken"
-msgstr ""
+msgstr "האפלה"
 
 #: ../src/filter-enums.cpp:56
 msgid "Lighten"
-msgstr ""
+msgstr "הבהרה"
 
 #: ../src/filter-enums.cpp:62
 msgid "Matrix"
-msgstr ""
+msgstr "מטריצה"
 
 #: ../src/filter-enums.cpp:63
 msgid "Saturate"
-msgstr ""
+msgstr "הרווה"
 
 #: ../src/filter-enums.cpp:64
 msgid "Hue Rotate"
-msgstr ""
+msgstr "סובב גוון"
 
 #: ../src/filter-enums.cpp:65
 msgid "Luminance to Alpha"
-msgstr ""
+msgstr "נהירות לשקיפות"
 
 #. File
-#: ../src/filter-enums.cpp:71 ../src/verbs.cpp:2159
+#: ../src/filter-enums.cpp:71
+#: ../src/verbs.cpp:2214
 msgid "Default"
-msgstr ""
+msgstr "ברירת מחדל"
 
 #: ../src/filter-enums.cpp:72
 msgid "Over"
-msgstr ""
+msgstr "מעבר"
 
 #: ../src/filter-enums.cpp:73
 msgid "In"
-msgstr ""
+msgstr "פנימה"
 
 #: ../src/filter-enums.cpp:74
 msgid "Out"
-msgstr ""
+msgstr "החוצה"
 
 #: ../src/filter-enums.cpp:75
 msgid "Atop"
-msgstr ""
+msgstr "מעל"
 
 #: ../src/filter-enums.cpp:76
 msgid "XOR"
-msgstr ""
+msgstr "XOR"
 
 #: ../src/filter-enums.cpp:77
 msgid "Arithmetic"
-msgstr ""
+msgstr "חשבון"
 
 #: ../src/filter-enums.cpp:83
 msgid "Identity"
-msgstr ""
+msgstr "זהות"
 
 #: ../src/filter-enums.cpp:84
 msgid "Table"
-msgstr ""
+msgstr "טבלה"
 
 #: ../src/filter-enums.cpp:85
 msgid "Discrete"
-msgstr ""
+msgstr "הפרדה"
 
 #: ../src/filter-enums.cpp:86
 msgid "Linear"
-msgstr ""
+msgstr "קווי"
 
 #: ../src/filter-enums.cpp:87
 msgid "Gamma"
 msgstr "גאמא"
 
-#: ../src/filter-enums.cpp:93 ../src/selection-chemistry.cpp:260
+#: ../src/filter-enums.cpp:93
+#: ../src/selection-chemistry.cpp:311
 #: ../src/widgets/gradient-selector.cpp:134
 msgid "Duplicate"
 msgstr "שכפל"
 
 #: ../src/filter-enums.cpp:94
 msgid "Wrap"
-msgstr ""
+msgstr "גלישה"
 
-#: ../src/filter-enums.cpp:101 ../src/flood-context.cpp:271
-#: ../src/widgets/sp-color-icc-selector.cpp:233
+#: ../src/filter-enums.cpp:101
+#: ../src/flood-context.cpp:275
+#: ../src/widgets/sp-color-icc-selector.cpp:234
 #: ../src/widgets/sp-color-scales.cpp:398
 #: ../src/widgets/sp-color-scales.cpp:399
 msgid "Red"
 msgstr "אדום"
 
-#: ../src/filter-enums.cpp:102 ../src/flood-context.cpp:272
-#: ../src/widgets/sp-color-icc-selector.cpp:233
+#: ../src/filter-enums.cpp:102
+#: ../src/flood-context.cpp:276
+#: ../src/widgets/sp-color-icc-selector.cpp:234
 #: ../src/widgets/sp-color-scales.cpp:401
 #: ../src/widgets/sp-color-scales.cpp:402
 msgid "Green"
 msgstr "ירוק"
 
-#: ../src/filter-enums.cpp:103 ../src/flood-context.cpp:273
-#: ../src/widgets/sp-color-icc-selector.cpp:233
+#: ../src/filter-enums.cpp:103
+#: ../src/flood-context.cpp:277
+#: ../src/widgets/sp-color-icc-selector.cpp:234
 #: ../src/widgets/sp-color-scales.cpp:404
 #: ../src/widgets/sp-color-scales.cpp:405
 msgid "Blue"
 msgstr "כחול"
 
-#: ../src/filter-enums.cpp:104 ../src/flood-context.cpp:277
+#: ../src/filter-enums.cpp:104
+#: ../src/flood-context.cpp:281
 msgid "Alpha"
-msgstr "×\90×\9cפ×\90"
+msgstr "שק×\99פ×\95ת"
 
 #: ../src/filter-enums.cpp:110
 msgid "Erode"
-msgstr ""
+msgstr "סחף"
 
 #: ../src/filter-enums.cpp:111
 msgid "Dilate"
-msgstr ""
+msgstr "הרחבה"
 
 #: ../src/filter-enums.cpp:117
 msgid "Fractal Noise"
@@ -4352,263 +4521,278 @@ msgstr "רעש פרקטלי"
 
 #: ../src/filter-enums.cpp:124
 msgid "Distant Light"
-msgstr ""
+msgstr "אור מרוחק"
 
 #: ../src/filter-enums.cpp:125
 msgid "Point Light"
-msgstr ""
+msgstr "אור נקודתי"
 
 #: ../src/filter-enums.cpp:126
 msgid "Spot Light"
-msgstr ""
+msgstr "זרקור"
 
-#: ../src/flood-context.cpp:270
+#: ../src/flood-context.cpp:274
 msgid "Visible Colors"
-msgstr ""
+msgstr "צבעים נראים"
 
-#: ../src/flood-context.cpp:276 ../src/widgets/sp-color-icc-selector.cpp:236
+#: ../src/flood-context.cpp:280
+#: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:430
-#: ../src/widgets/sp-color-scales.cpp:431 ../src/widgets/toolbox.cpp:3390
+#: ../src/widgets/sp-color-scales.cpp:431
+#: ../src/widgets/toolbox.cpp:3848
 #: ../share/extensions/color_randomize.inx.h:3
 msgid "Lightness"
-msgstr ""
+msgstr "בהירות"
 
-#: ../src/flood-context.cpp:289 ../src/ui/dialog/inkscape-preferences.cpp:968
+#: ../src/flood-context.cpp:293
+#: ../src/ui/dialog/inkscape-preferences.cpp:995
 msgid "Small"
 msgstr "קטן"
 
-#: ../src/flood-context.cpp:290 ../src/ui/dialog/inkscape-preferences.cpp:968
+#: ../src/flood-context.cpp:294
+#: ../src/ui/dialog/inkscape-preferences.cpp:995
 msgid "Medium"
 msgstr "בינוני"
 
-#: ../src/flood-context.cpp:291
+#: ../src/flood-context.cpp:295
 msgid "Large"
 msgstr "גדול"
 
-#: ../src/flood-context.cpp:491
+#: ../src/flood-context.cpp:497
 msgid "<b>Too much inset</b>, the result is empty."
-msgstr ""
+msgstr "<b>התכנסות יתר</b>, התוצאה ריקה."
 
-#: ../src/flood-context.cpp:531
+#: ../src/flood-context.cpp:537
 #, 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] ""
+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] "אזור מלא, נוצר נתיב בעל מפרק <b>%d</b> ואוחד עם הבחירה."
+msgstr[1] "אזור מלא, נוצר נתיב בעל <b>%d</b> מפרקים ואוחד עם הבחירה."
 
-#: ../src/flood-context.cpp:535
+#: ../src/flood-context.cpp:541
 #, c-format
 msgid "Area filled, path with <b>%d</b> node created."
 msgid_plural "Area filled, path with <b>%d</b> nodes created."
-msgstr[0] ""
+msgstr[0] "אזור מלא, נוצר נתיב בעל מפרק <b>%d</b>."
+msgstr[1] "אזור מלא, נוצר נתיב בעל <b>%d</b> מפרקים."
 
-#: ../src/flood-context.cpp:807 ../src/flood-context.cpp:1121
+#: ../src/flood-context.cpp:813
+#: ../src/flood-context.cpp:1127
 msgid "<b>Area is not bounded</b>, cannot fill."
-msgstr ""
+msgstr "<b>האזור אינו מתוחם</b>, לא ניתן למלא."
 
-#: ../src/flood-context.cpp:1126
-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 ""
+#: ../src/flood-context.cpp:1132
+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>רק האזור הנראה של השטח המתוחם מולא.</b> אם תרצה למלא את כל האזור, חזור על הפעולה, התרחק ומלא שוב."
 
-#: ../src/flood-context.cpp:1144 ../src/flood-context.cpp:1304
+#: ../src/flood-context.cpp:1150
+#: ../src/flood-context.cpp:1310
 msgid "Fill bounded area"
-msgstr ""
+msgstr "מלא את האזור המתוחם"
 
-#: ../src/flood-context.cpp:1164
+#: ../src/flood-context.cpp:1170
 msgid "Set style on object"
-msgstr ""
+msgstr "הגדר סגנון לפריט"
 
-#: ../src/flood-context.cpp:1223
+#: ../src/flood-context.cpp:1229
 msgid "<b>Draw over</b> areas to add to fill, hold <b>Alt</b> for touch fill"
-msgstr ""
+msgstr "<b>צייר על גבי</b> אזורים כדי להוסיף למילוי, החזק <b>Alt</b> למילוי בנגיעה"
 
-#: ../src/gradient-context.cpp:132 ../src/gradient-drag.cpp:74
+#: ../src/gradient-context.cpp:132
+#: ../src/gradient-drag.cpp:75
 msgid "Linear gradient <b>start</b>"
-msgstr ""
+msgstr "<b>תחילת</b> המדרג הקווי"
 
 #. POINT_LG_BEGIN
-#: ../src/gradient-context.cpp:133 ../src/gradient-drag.cpp:75
+#: ../src/gradient-context.cpp:133
+#: ../src/gradient-drag.cpp:76
 msgid "Linear gradient <b>end</b>"
-msgstr ""
+msgstr "<b>סיום</b> המדרג הקווי"
 
-#: ../src/gradient-context.cpp:134 ../src/gradient-drag.cpp:76
+#: ../src/gradient-context.cpp:134
+#: ../src/gradient-drag.cpp:77
 msgid "Linear gradient <b>mid stop</b>"
-msgstr ""
+msgstr "<b>נקודה באמצע</b> המדרג הקווי"
 
-#: ../src/gradient-context.cpp:135 ../src/gradient-drag.cpp:77
+#: ../src/gradient-context.cpp:135
+#: ../src/gradient-drag.cpp:78
 msgid "Radial gradient <b>center</b>"
-msgstr ""
+msgstr "<b>מרכז</b> המדרג הרדיאלי"
 
-#: ../src/gradient-context.cpp:136 ../src/gradient-context.cpp:137
-#: ../src/gradient-drag.cpp:78 ../src/gradient-drag.cpp:79
+#: ../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 ""
+msgstr "<b>רדיוס</b> המדרג הרדיאלי"
 
-#: ../src/gradient-context.cpp:138 ../src/gradient-drag.cpp:80
+#: ../src/gradient-context.cpp:138
+#: ../src/gradient-drag.cpp:81
 msgid "Radial gradient <b>focus</b>"
-msgstr ""
+msgstr "<b>מיקוד</b> המדרג הרדיאלי"
 
 #. POINT_RG_FOCUS
-#: ../src/gradient-context.cpp:139 ../src/gradient-context.cpp:140
-#: ../src/gradient-drag.cpp:81 ../src/gradient-drag.cpp:82
+#: ../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 ""
+msgstr "<b>נקודה באמצע</b> המדרג הרדיאלי"
 
 #. TRANSLATORS: %s will be substituted with the point name (see previous messages); This is part of a compound message
 #: ../src/gradient-context.cpp:162
 #, c-format
 msgid "%s selected"
-msgstr ""
+msgstr "%s נבחר/ו"
 
 #. TRANSLATORS: Mind the space in front. This is part of a compound message
-#: ../src/gradient-context.cpp:164 ../src/gradient-context.cpp:173
+#: ../src/gradient-context.cpp:164
+#: ../src/gradient-context.cpp:173
 #, c-format
 msgid " out of %d gradient handle"
 msgid_plural " out of %d gradient handles"
-msgstr[0] ""
+msgstr[0] " מתוך ידית אחיזה %d"
+msgstr[1] " מתוך%d ידיות אחיזה"
 
 #. TRANSLATORS: Mind the space in front. (Refers to gradient handles selected). This is part of a compound message
-#: ../src/gradient-context.cpp:165 ../src/gradient-context.cpp:174
+#: ../src/gradient-context.cpp:165
+#: ../src/gradient-context.cpp:174
 #: ../src/gradient-context.cpp:181
 #, c-format
 msgid " on %d selected object"
 msgid_plural " on %d selected objects"
-msgstr[0] ""
+msgstr[0] " על פריט %d שנבחר"
+msgstr[1] " על %d פריטים שנבחרו"
 
 #. TRANSLATORS: This is a part of a compound message (out of two more indicating: grandint handle count & object count)
 #: ../src/gradient-context.cpp:171
 #, 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"
-msgstr[0] ""
+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] "ידית אחת ממזגת עצירה %d (גרור עם <b>Shift</b> כדי להפריד) נבחרה"
+msgstr[1] "ידית אחת ממזגת %d עצירות (גרור עם <b>Shift</b> כדי להפריד) נבחרה"
 
 #. 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:179
 #, c-format
 msgid "<b>%d</b> gradient handle selected out of %d"
 msgid_plural "<b>%d</b> gradient handles selected out of %d"
-msgstr[0] ""
+msgstr[0] "נבחרה ידית מדרג <b>%d</b> מתוך %d"
+msgstr[1] "נבחרו <b>%d</b> ידיות מדרג מתוך %d"
 
 #. TRANSLATORS: The plural refers to number of selected objects
 #: ../src/gradient-context.cpp:186
 #, 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] ""
+msgid_plural "<b>No</b> gradient handles selected out of %d on %d selected objects"
+msgstr[0] "<b>לא</b> נבחרו ידיות מדרג מתוך %d בתוך פריט %d שנבחר"
+msgstr[1] "<b>לא</b> נבחרו ידיות מדרג מתוך %d בתוך %d פריטים שנבחרו"
 
-#: ../src/gradient-context.cpp:385 ../src/gradient-context.cpp:478
-#: ../src/widgets/gradient-vector.cpp:735
+#: ../src/gradient-context.cpp:386
+#: ../src/gradient-context.cpp:479
+#: ../src/widgets/gradient-vector.cpp:738
 msgid "Add gradient stop"
-msgstr ""
+msgstr "הוסף עצירת מדרג"
 
-#: ../src/gradient-context.cpp:453
+#: ../src/gradient-context.cpp:454
 msgid "Simplify gradient"
-msgstr "פש×\98 ×\92ר×\93×\99×\90× ×\98"
+msgstr "פש×\98 ×\9e×\93ר×\92צ"
 
-#: ../src/gradient-context.cpp:529
+#: ../src/gradient-context.cpp:531
 msgid "Create default gradient"
-msgstr "צ×\95ר ×\92ר×\93×\99×\90× ×\98 ברירת מחדל"
+msgstr "צ×\95ר ×\9e×\93ר×\92 ברירת מחדל"
 
-#: ../src/gradient-context.cpp:584
+#: ../src/gradient-context.cpp:586
 msgid "<b>Draw around</b> handles to select them"
-msgstr ""
+msgstr "<b>צייר מסביב</b> לידיות כדי לבחור אותן"
 
-#: ../src/gradient-context.cpp:682
+#: ../src/gradient-context.cpp:684
 msgid "<b>Ctrl</b>: snap gradient angle"
-msgstr ""
+msgstr "<b>Ctrl</b>: הצמד את זווית המדרג"
 
-#: ../src/gradient-context.cpp:683
+#: ../src/gradient-context.cpp:685
 msgid "<b>Shift</b>: draw gradient around the starting point"
-msgstr ""
+msgstr "<b>Shift</b>: צייר מדרג מסביב לנקודת ההתחלה"
 
-#: ../src/gradient-context.cpp:803
+#: ../src/gradient-context.cpp:805
 msgid "Invert gradient"
-msgstr "×\94פ×\95×\9a ×\92ר×\93×\99×\90× ×\98"
+msgstr "×\94פ×\95×\9a ×\9e×\93ר×\92"
 
-#: ../src/gradient-context.cpp:919
+#: ../src/gradient-context.cpp:922
 #, c-format
 msgid "<b>Gradient</b> for %d object; with <b>Ctrl</b> to snap angle"
 msgid_plural "<b>Gradient</b> for %d objects; with <b>Ctrl</b> to snap angle"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>מדרג</b> עבור פריט %d; לחץ על <b>Ctrl</b> כדי להצמיד לזווית"
+msgstr[1] "<b>מדרג</b> עבור %d פריטים ; לחץ על <b>Ctrl</b> כדי להצמיד לזווית"
 
-#: ../src/gradient-context.cpp:923
+#: ../src/gradient-context.cpp:926
 msgid "Select <b>objects</b> on which to create gradient."
-msgstr "בחר את <b>האוביקטים</b> שעליהם יווצר הגרדיאנט."
+msgstr "בחר <b>פריטים</b> שעבורם יווצר מדרג."
 
-#: ../src/gradient-drag.cpp:573
+#: ../src/gradient-drag.cpp:574
 msgid "Merge gradient handles"
-msgstr ""
+msgstr "מזג את ידיות המדרג"
 
-#: ../src/gradient-drag.cpp:895
+#: ../src/gradient-drag.cpp:897
 msgid "Move gradient handle"
-msgstr ""
+msgstr "הזז את ידית המדרג"
 
-#: ../src/gradient-drag.cpp:948 ../src/widgets/gradient-vector.cpp:767
+#: ../src/gradient-drag.cpp:950
+#: ../src/widgets/gradient-vector.cpp:770
 msgid "Delete gradient stop"
-msgstr ""
+msgstr "מחק את עצירת המדרג"
 
-#: ../src/gradient-drag.cpp:1112
+#: ../src/gradient-drag.cpp:1114
 #, 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 ""
+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 עבור: %s%s; גרור עם <b>Ctrl</b> כדי להצמיד קיזוז; לחץ עם<b>Ctrl+Alt</b> כדי למחוק עצירה"
 
-#: ../src/gradient-drag.cpp:1116 ../src/gradient-drag.cpp:1123
+#: ../src/gradient-drag.cpp:1118
+#: ../src/gradient-drag.cpp:1125
 msgid " (stroke)"
-msgstr ""
+msgstr " (קו מתאר)"
 
-#: ../src/gradient-drag.cpp:1120
+#: ../src/gradient-drag.cpp:1122
 #, 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 ""
+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 עבור: %s%s; גרור עם  <b>Ctrl</b> כדי להצמיד לזווית, לחץ על<b>Ctrl+Alt</b> כדי לשמור על הזווית, לחץ על <b>Ctrl+Shift</b> כדי לשנות גודל מסביב למרכז"
 
-#: ../src/gradient-drag.cpp:1128
-msgid ""
-"Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to "
-"separate focus"
-msgstr ""
+#: ../src/gradient-drag.cpp:1130
+#, c-format
+msgid "Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to separate focus"
+msgstr "<b>מרכז</b> ו<b>מיקוד</b> המדרג הרדיאלי; גרור עם <b>Shift</b> כדי להפריד את המיקוד"
 
-#: ../src/gradient-drag.cpp:1131
+#: ../src/gradient-drag.cpp:1133
 #, 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] ""
-msgstr[1] ""
-
-#: ../src/gradient-drag.cpp:1806
+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] "נקודת המדרג משותפת על ידי מדרג <b>%d</b>; גרור עם <b>Shift</b> כדי להפריד"
+msgstr[1] "נקודת המדרג משותפת על ידי <b>%d</b> מדרגים; גרור עם <b>Shift</b> כדי להפריד"
+
+#: ../src/gradient-drag.cpp:1809
 msgid "Move gradient handle(s)"
-msgstr ""
+msgstr "הזז את ידית/ות המדרג"
 
-#: ../src/gradient-drag.cpp:1842
+#: ../src/gradient-drag.cpp:1845
 msgid "Move gradient mid stop(s)"
-msgstr ""
+msgstr "הזז את נקודת/ות אמצע המדרג"
 
-#: ../src/gradient-drag.cpp:2130
+#: ../src/gradient-drag.cpp:2133
 msgid "Delete gradient stop(s)"
-msgstr ""
+msgstr "מחק את עצירת/ות המדרג"
 
 #: ../src/helper/units.cpp:37
+#: ../src/live_effects/lpe-path_length.cpp:27
 msgid "Unit"
 msgstr "יחידה"
 
 #. Add the units menu.
-#: ../src/helper/units.cpp:37 ../src/widgets/select-toolbar.cpp:490
-#: ../src/widgets/toolbox.cpp:1280 ../src/widgets/toolbox.cpp:2457
-#: ../src/widgets/toolbox.cpp:5758
+#: ../src/helper/units.cpp:37
+#: ../src/widgets/select-toolbar.cpp:501
+#: ../src/widgets/toolbox.cpp:1487
+#: ../src/widgets/toolbox.cpp:2693
+#: ../src/widgets/toolbox.cpp:5196
+#: ../src/widgets/toolbox.cpp:6709
 msgid "Units"
 msgstr "יחידות"
 
@@ -4616,11 +4800,13 @@ msgstr "יחידות"
 msgid "Point"
 msgstr "נקודה"
 
-#: ../src/helper/units.cpp:38 ../src/ui/widget/selected-style.cpp:287
+#: ../src/helper/units.cpp:38
+#: ../src/ui/widget/selected-style.cpp:287
 msgid "pt"
 msgstr "נק"
 
-#: ../src/helper/units.cpp:38 ../share/extensions/perfectboundcover.inx.h:16
+#: ../src/helper/units.cpp:38
+#: ../share/extensions/perfectboundcover.inx.h:16
 msgid "Points"
 msgstr "נקודות"
 
@@ -4630,31 +4816,31 @@ msgstr "נק"
 
 #: ../src/helper/units.cpp:39
 msgid "Pica"
-msgstr ""
+msgstr "פיקא"
 
 #: ../src/helper/units.cpp:39
 msgid "pc"
-msgstr ""
+msgstr "פיקא"
 
 #: ../src/helper/units.cpp:39
-#, fuzzy
 msgid "Picas"
-msgstr "×\94×\93×\91ק"
+msgstr "פ×\99ק×\95ת"
 
 #: ../src/helper/units.cpp:39
 msgid "Pc"
-msgstr ""
+msgstr "פיקות"
 
 #: ../src/helper/units.cpp:40
 msgid "Pixel"
 msgstr "פיקסל"
 
-#: ../src/helper/units.cpp:40 ../src/ui/dialog/inkscape-preferences.cpp:198
-#: ../src/ui/dialog/inkscape-preferences.cpp:202
-#: ../src/ui/dialog/inkscape-preferences.cpp:205
+#: ../src/helper/units.cpp:40
+#: ../src/ui/dialog/inkscape-preferences.cpp:207
+#: ../src/ui/dialog/inkscape-preferences.cpp:211
+#: ../src/ui/dialog/inkscape-preferences.cpp:214
 #: ../src/ui/widget/selected-style.cpp:283
 msgid "px"
-msgstr ""
+msgstr "פיקסלים"
 
 #: ../src/helper/units.cpp:40
 msgid "Pixels"
@@ -4662,16 +4848,18 @@ msgstr "פיקסלים"
 
 #: ../src/helper/units.cpp:40
 msgid "Px"
-msgstr ""
+msgstr "פיקסל"
 
 #. 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 "אחוז"
 
-#: ../src/helper/units.cpp:42 ../src/ui/dialog/inkscape-preferences.cpp:218
+#: ../src/helper/units.cpp:42
+#: ../src/ui/dialog/inkscape-preferences.cpp:227
 msgid "%"
-msgstr ""
+msgstr "%"
 
 #: ../src/helper/units.cpp:42
 msgid "Percents"
@@ -4681,7 +4869,8 @@ msgstr "אחוזים"
 msgid "Millimeter"
 msgstr "מילימטר"
 
-#: ../src/helper/units.cpp:43 ../src/ui/widget/selected-style.cpp:291
+#: ../src/helper/units.cpp:43
+#: ../src/ui/widget/selected-style.cpp:291
 msgid "mm"
 msgstr "מ\"מ"
 
@@ -4716,517 +4905,441 @@ msgstr "מטרים"
 #. no svg_unit
 #: ../src/helper/units.cpp:46
 msgid "Inch"
-msgstr "×\90×\99× ×¥'"
+msgstr "×\90×\99× ×\98ש"
 
 #: ../src/helper/units.cpp:46
 msgid "in"
-msgstr ""
+msgstr "ב־"
 
 #: ../src/helper/units.cpp:46
 msgid "Inches"
-msgstr "×\90×\99נצ'ים"
+msgstr "×\90×\99× ×\98שים"
 
 #: ../src/helper/units.cpp:47
-#, fuzzy
 msgid "Foot"
-msgstr "×\97×\9cק"
+msgstr "ר×\92×\9c"
 
 #: ../src/helper/units.cpp:47
 msgid "ft"
-msgstr ""
+msgstr "רגל"
 
 #: ../src/helper/units.cpp:47
 msgid "Feet"
-msgstr ""
+msgstr "רגל"
 
 #. Volatiles do not have default, so there are none here
 #. TRANSLATORS: for info, see http://www.w3.org/TR/REC-CSS2/syndata.html#length-units
 #: ../src/helper/units.cpp:50
 msgid "Em square"
-msgstr ""
+msgstr "ריבוע לתו"
 
 #: ../src/helper/units.cpp:50
 msgid "em"
-msgstr ""
+msgstr "גודל"
 
 #: ../src/helper/units.cpp:50
 msgid "Em squares"
-msgstr ""
+msgstr "ריבועים בגודל"
 
 #. TRANSLATORS: for info, see http://www.w3.org/TR/REC-CSS2/syndata.html#length-units
 #: ../src/helper/units.cpp:52
 msgid "Ex square"
-msgstr ""
+msgstr "ריבוע בגובה"
 
 #: ../src/helper/units.cpp:52
 msgid "ex"
-msgstr ""
+msgstr "גובה"
 
 #: ../src/helper/units.cpp:52
 msgid "Ex squares"
-msgstr ""
+msgstr "ריבועים בגובה"
 
-#: ../src/inkscape.cpp:337
-#, fuzzy
+#: ../src/inkscape.cpp:329
 msgid "Autosaving documents..."
-msgstr "ש×\9e×\95ר ×\9eס×\9e×\9a"
+msgstr "ש×\9e×\99רת ×\94×\9eס×\9e×\9a ×\90×\95×\98×\95×\9e×\98×\99ת...â\80\8f"
 
-#: ../src/inkscape.cpp:405
+#: ../src/inkscape.cpp:400
 msgid "Autosave failed! Could not find inkscape extension to save document."
-msgstr ""
+msgstr "השמירה האוטומטית נכשלה! לא ניתן למצוא את ההרחבה של אינקסקייפ לשמירת מסמכים."
 
-#: ../src/inkscape.cpp:408 ../src/inkscape.cpp:415
-#, fuzzy, c-format
+#: ../src/inkscape.cpp:403
+#: ../src/inkscape.cpp:410
+#, c-format
 msgid "Autosave failed! File %s could not be saved."
-msgstr "ש×\9e×\99רת ×\94ק×\95×\91×¥ %s ×\9bש×\9c×\94."
+msgstr "×\94ש×\9e×\99ר×\94 ×\94×\90×\95×\98×\95×\9e×\98×\99ת × ×\9bש×\9c×\94! ×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9cש×\9e×\95ר ×\90ת ×\94ק×\95×\91×¥ %s."
 
-#: ../src/inkscape.cpp:430
+#: ../src/inkscape.cpp:425
 msgid "Autosave complete."
-msgstr ""
+msgstr "השמירה האוטומטית הושלמה."
 
-#: ../src/inkscape.cpp:653
+#: ../src/inkscape.cpp:647
 msgid "Untitled document"
-msgstr ""
+msgstr "מסמך ללא שם"
 
 #. Show nice dialog box
-#: ../src/inkscape.cpp:682
+#: ../src/inkscape.cpp:676
 msgid "Inkscape encountered an internal error and will close now.\n"
-msgstr ""
+msgstr "אינקסקייפ נתקלה בשגיאה פנימית והיא תסגר כעת.\n"
 
-#: ../src/inkscape.cpp:683
-msgid ""
-"Automatic backups of unsaved documents were done to the following "
-"locations:\n"
-msgstr ""
+#: ../src/inkscape.cpp:677
+msgid "Automatic backups of unsaved documents were done to the following locations:\n"
+msgstr "גיבוי אוטומטי של מסמכים שלא נשמרו התבצע במיקומים הבאים:\n"
 
-#: ../src/inkscape.cpp:684
+#: ../src/inkscape.cpp:678
 msgid "Automatic backup of the following documents failed:\n"
-msgstr ""
-
-#: ../src/inkscape.cpp:829
-#, c-format
-msgid ""
-"Cannot create directory %s.\n"
-"%s"
-msgstr ""
-"לא ניתן ליצור תיקיה %s.\n"
-"%s"
-
-#: ../src/inkscape.cpp:830
-#, c-format
-msgid ""
-"%s is not a valid directory.\n"
-"%s"
-msgstr ""
-"%s אינה תיקיה תקינה.\n"
-"%s"
-
-#: ../src/inkscape.cpp:831
-#, c-format
-msgid ""
-"Cannot create file %s.\n"
-"%s"
-msgstr ""
-"לא ניתן ליצור את הקובץ %s.\n"
-"%s"
-
-#: ../src/inkscape.cpp:832
-#, c-format
-msgid ""
-"Cannot write file %s.\n"
-"%s"
-msgstr ""
-"לא ניתן לכתוב אל הקובץ %s.\n"
-"%s"
-
-#: ../src/inkscape.cpp:833
-msgid ""
-"Although Inkscape will run, it will use default settings,\n"
-"and any changes made in preferences will not be saved."
-msgstr ""
-"למרות שאינקסקייפ תעלה, היא תשתמש בהגדרות ברירת המחדל,\n"
-"nוכל שינוי שיתבצע בהגדרות לא ישמר."
-
-#: ../src/inkscape.cpp:903 ../src/preferences.cpp:56
-#, c-format
-msgid ""
-"%s is not a regular file.\n"
-"%s"
-msgstr ""
-
-#: ../src/inkscape.cpp:904 ../src/preferences.cpp:57
-#, c-format
-msgid ""
-"%s not a valid XML file, or\n"
-"you don't have read permissions on it.\n"
-"%s"
-msgstr ""
-
-#: ../src/inkscape.cpp:906
-#, c-format
-msgid ""
-"%s is not a valid menus file.\n"
-"%s"
-msgstr ""
-
-#: ../src/inkscape.cpp:907
-msgid ""
-"Inkscape will run with default menus.\n"
-"New menus will not be saved."
-msgstr ""
+msgstr "הגיבוי האוטומטי של המסמכים הבאים נכשל:\n"
 
 #. sp_ui_menu_append_check_item_from_verb(m, view, _("_Menu"), _("Show or hide the menu bar"), "menu",
 #. checkitem_toggled, checkitem_update, 0);
-#: ../src/interface.cpp:838
+#: ../src/interface.cpp:827
 msgid "Commands Bar"
-msgstr ""
+msgstr "סרגל פקודות"
 
-#: ../src/interface.cpp:838
+#: ../src/interface.cpp:827
 msgid "Show or hide the Commands bar (under the menu)"
-msgstr ""
+msgstr "הצגה או הסתרה של סרגל הפקודות (מתחת לתפריט)"
 
-#: ../src/interface.cpp:840
+#: ../src/interface.cpp:829
 msgid "Tool Controls Bar"
-msgstr ""
+msgstr "סרגל פקודות הכלים"
 
-#: ../src/interface.cpp:840
+#: ../src/interface.cpp:829
 msgid "Show or hide the Tool Controls bar"
-msgstr ""
+msgstr "הצגה או הסתרה של סרגל פקודות הכלים"
 
-#: ../src/interface.cpp:842
+#: ../src/interface.cpp:831
 msgid "_Toolbox"
-msgstr ""
+msgstr "_תיבת כלים"
 
-#: ../src/interface.cpp:842
+#: ../src/interface.cpp:831
 msgid "Show or hide the main toolbox (on the left)"
-msgstr ""
+msgstr "הצגה או הסתרה של תיבת הכלים הראשית (מימין)"
 
-#: ../src/interface.cpp:848
+#: ../src/interface.cpp:837
 msgid "_Palette"
-msgstr ""
+msgstr "_לוח צבעים"
 
-#: ../src/interface.cpp:848
+#: ../src/interface.cpp:837
 msgid "Show or hide the color palette"
-msgstr ""
+msgstr "הצגה או הסתרה של לוח הצבעים"
 
-#: ../src/interface.cpp:850
+#: ../src/interface.cpp:839
 msgid "_Statusbar"
-msgstr ""
+msgstr "_שורת מצב"
 
-#: ../src/interface.cpp:850
+#: ../src/interface.cpp:839
 msgid "Show or hide the statusbar (at the bottom of the window)"
-msgstr ""
+msgstr "הצגה או הסתרה של שורת המצב (בתחתית החלון)"
 
-#: ../src/interface.cpp:904
+#: ../src/interface.cpp:893
 #, c-format
 msgid "Verb \"%s\" Unknown"
-msgstr ""
+msgstr "הפועל \"%s\" אינו ידוע"
+
+#: ../src/interface.cpp:932
+msgid "Open _Recent"
+msgstr "נפתחו לא_חרונה"
 
 #. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1023
+#: ../src/interface.cpp:1030
 #, c-format
 msgid "Enter group #%s"
-msgstr ""
+msgstr "הכנס לקבוצה #%s"
 
-#: ../src/interface.cpp:1034
+#: ../src/interface.cpp:1041
 msgid "Go to parent"
-msgstr ""
+msgstr "עלה לתיקיית האב"
 
-#: ../src/interface.cpp:1125 ../src/interface.cpp:1210
-#: ../src/ui/widget/selected-style.cpp:466
+#: ../src/interface.cpp:1132
+#: ../src/interface.cpp:1218
+#: ../src/ui/widget/selected-style.cpp:462
 msgid "Drop color"
-msgstr ""
+msgstr "השמט צבע"
 
-#: ../src/interface.cpp:1164
+#: ../src/interface.cpp:1171
 msgid "Drop color on gradient"
-msgstr ""
+msgstr "השמט צבע מהמדרג"
 
-#: ../src/interface.cpp:1223
+#: ../src/interface.cpp:1231
 msgid "Could not parse SVG data"
-msgstr ""
+msgstr "לא ניתן לנתח את נתוני ה־SVG"
 
-#: ../src/interface.cpp:1265
+#: ../src/interface.cpp:1274
 msgid "Drop SVG"
-msgstr ""
+msgstr "השמט SVG"
 
-#: ../src/interface.cpp:1323
+#: ../src/interface.cpp:1332
 msgid "Drop bitmap image"
-msgstr ""
+msgstr "השמט מפת סיביות"
 
-#: ../src/interface.cpp:1415
+#: ../src/interface.cpp:1424
 #, 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\">קובץ עם השם \"%s\" כבר קיים. האם ברצונך להחליף אותו?</span>\n"
+"\n"
+"הקובץ כבר קיים תחת \"%s\". החלפת הקובץ תגרום לשיכתובו."
 
-#: ../src/interface.cpp:1422
+#: ../src/interface.cpp:1431
 msgid "Replace"
-msgstr ""
+msgstr "החלף"
 
-#: ../src/io/sys.cpp:411 ../src/io/sys.cpp:419
+#: ../src/io/sys.cpp:412
+#: ../src/io/sys.cpp:420
 #, c-format
 msgid "Failed to read from child pipe (%s)"
-msgstr ""
+msgstr "כשל בקריאה מצאצא השרשרת (%s)"
 
-#: ../src/io/sys.cpp:443
-#, fuzzy, c-format
+#: ../src/io/sys.cpp:444
+#, c-format
 msgid "Failed to change to directory '%s' (%s)"
-msgstr ""
-"לא ניתן ליצור תיקיה %s.\n"
-"%s"
+msgstr "כשל בשינוי התיקייה אל '%s' (%s)"
 
-#: ../src/io/sys.cpp:449 ../src/io/sys.cpp:675
+#: ../src/io/sys.cpp:450
+#: ../src/io/sys.cpp:676
 #, c-format
 msgid "Failed to execute child process (%s)"
-msgstr ""
+msgstr "שגיאה בהפעלת תהליך הצאצא (%s)"
 
-#: ../src/io/sys.cpp:622
+#: ../src/io/sys.cpp:623
 #, c-format
 msgid "Invalid program name: %s"
-msgstr ""
+msgstr "שם התוכנה שגוי: %s"
 
-#: ../src/io/sys.cpp:632 ../src/io/sys.cpp:921
+#: ../src/io/sys.cpp:633
+#: ../src/io/sys.cpp:922
 #, c-format
 msgid "Invalid string in argument vector at %d: %s"
-msgstr ""
+msgstr "מחרוזת שגויה בוקטור ארגומנט ב־%d: %s"
 
-#: ../src/io/sys.cpp:643 ../src/io/sys.cpp:936
+#: ../src/io/sys.cpp:644
+#: ../src/io/sys.cpp:937
 #, c-format
 msgid "Invalid string in environment: %s"
-msgstr ""
+msgstr "מחרוזת שגויה בסביבה: %s"
 
-#: ../src/io/sys.cpp:704
+#: ../src/io/sys.cpp:705
 #, c-format
 msgid "Failed to create pipe for communicating with child process (%s)"
-msgstr ""
+msgstr "כשל ביצירת שרשרת לתקשורת עם תהליך הצאצא (%s)"
 
-#: ../src/io/sys.cpp:917
-#, fuzzy, c-format
+#: ../src/io/sys.cpp:918
+#, c-format
 msgid "Invalid working directory: %s"
-msgstr ""
-"%s אינה תיקיה תקינה.\n"
-"%s"
+msgstr "תיקיית העבודה שגויה: %s"
 
-#: ../src/io/sys.cpp:985
+#: ../src/io/sys.cpp:986
 #, c-format
 msgid "Failed to execute helper program (%s)"
-msgstr ""
+msgstr "כשל בהפעלת תוכנית העזר (%s)"
 
 #: ../src/jabber_whiteboard/invitation-confirm-dialog.cpp:26
 #: ../src/jabber_whiteboard/session-file-selector.cpp:24
 msgid "_Write session file:"
-msgstr ""
+msgstr "_כתוב קובץ הפעלה:"
 
 #: ../src/jabber_whiteboard/pedrogui.cpp:2630
 msgid "Shared SVG whiteboard tool."
-msgstr ""
+msgstr "כלי לוח ציור SVG שיתופי."
 
 #: ../src/jabber_whiteboard/pedrogui.cpp:2631
 msgid "Based on the Pedro XMPP client"
-msgstr ""
+msgstr "מבוסס על לקוח ה־XMPP Pedro"
 
 #: ../src/jabber_whiteboard/session-file-selector.cpp:60
 msgid "Select a location and filename"
-msgstr "×\91×\97ר ×\9e×\99ק×\95×\9d ×\95ש×\9d קובץ"
+msgstr "×\91×\97ר ×\90ת ×\9e×\99ק×\95×\9d ×\95ש×\9d ×\94קובץ"
 
 #: ../src/jabber_whiteboard/session-file-selector.cpp:62
 msgid "Set filename"
-msgstr ""
+msgstr "הגדר את שם הקובץ"
 
 #: ../src/jabber_whiteboard/session-manager.cpp:308
 msgid "<b>%1</b> has invited you to a whiteboard session."
-msgstr ""
+msgstr "<b>%1</b> הזמין אותך למפגש לוח ציור שיתופי."
 
 #: ../src/jabber_whiteboard/session-manager.cpp:310
 msgid "Do you wish to accept <b>%1</b>'s whiteboard session invitation?"
-msgstr ""
+msgstr "האם ברצונך לקבל את הזמנת <b>%1</b> להשתתפות בלוח ציור שיתופי?"
 
 #: ../src/jabber_whiteboard/session-manager.cpp:314
 msgid "Accept invitation"
-msgstr "קבל הזמנה"
+msgstr "ק×\91×\9c ×\90ת ×\94×\94×\96×\9e× ×\94"
 
 #: ../src/jabber_whiteboard/session-manager.cpp:315
 msgid "Decline invitation"
-msgstr "דחה הזמנה"
+msgstr "×\93×\97×\94 ×\90ת ×\94×\94×\96×\9e× ×\94"
 
 #: ../src/jabber_whiteboard/session-manager.cpp:370
 msgid "Inkboard session (%1 to %2)"
-msgstr ""
+msgstr "מפגש לוח אינק (%1 ל־%2)"
 
-#: ../src/knot.cpp:430
+#: ../src/knot.cpp:432
 msgid "Node or handle drag canceled."
-msgstr ""
+msgstr "גרירת מפרק או ידית בוטלה."
 
-#: ../src/knotholder.cpp:132
+#: ../src/knotholder.cpp:130
 msgid "Change handle"
-msgstr ""
+msgstr "שנה ידית"
 
-#: ../src/knotholder.cpp:207
+#: ../src/knotholder.cpp:203
 msgid "Move handle"
-msgstr ""
+msgstr "הזז ידית"
 
 #. TRANSLATORS: This refers to the pattern that's inside the object
-#: ../src/knotholder.cpp:228
+#: ../src/knotholder.cpp:224
 msgid "<b>Move</b> the pattern fill inside the object"
-msgstr ""
+msgstr "<b>הזז</b> את מילוי התבנית בתוך הפריט"
 
-#: ../src/knotholder.cpp:231
+#: ../src/knotholder.cpp:227
 msgid "<b>Scale</b> the pattern fill uniformly"
-msgstr ""
+msgstr "<b>שנה את גודל</b> תבנית המילוי באופן אחיד"
 
-#: ../src/knotholder.cpp:234
+#: ../src/knotholder.cpp:230
 msgid "<b>Rotate</b> the pattern fill; with <b>Ctrl</b> to snap angle"
-msgstr ""
+msgstr "<b>סובב</b> את תבנית המילוי; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית"
 
 #: ../src/libgdl/gdl-dock-bar.c:108
-#, fuzzy
 msgid "Master"
-msgstr "×\9e×\98ר"
+msgstr "ר×\90ש×\99"
 
 #: ../src/libgdl/gdl-dock-bar.c:109
 msgid "GdlDockMaster object which the dockbar widget is attached to"
-msgstr ""
+msgstr "פריט ה־GdlDockMaster שאליו מחובר הרכיב"
 
 #: ../src/libgdl/gdl-dock-bar.c:116
 msgid "Dockbar style"
-msgstr ""
+msgstr "סגנון הסרגל המעוגן"
 
 #: ../src/libgdl/gdl-dock-bar.c:117
 msgid "Dockbar style to show items on it"
-msgstr ""
+msgstr "סגנון הצגת הסמלים על הסרגל המעוגן"
 
-#: ../src/libgdl/gdl-dock.c:175 ../src/ui/dialog/inkscape-preferences.cpp:496
-#: ../src/ui/dialog/inkscape-preferences.cpp:517
+#: ../src/libgdl/gdl-dock.c:175
+#: ../src/ui/dialog/inkscape-preferences.cpp:504
+#: ../src/ui/dialog/inkscape-preferences.cpp:525
 msgid "Floating"
-msgstr ""
+msgstr "צף"
 
 #: ../src/libgdl/gdl-dock.c:176
 msgid "Whether the dock is floating in its own window"
-msgstr ""
+msgstr "האם המעגן צף בחלון משלו"
 
-#: ../src/libgdl/gdl-dock.c:183 ../src/libgdl/gdl-dock-master.c:144
-#, fuzzy
+#: ../src/libgdl/gdl-dock.c:183
+#: ../src/libgdl/gdl-dock-master.c:144
 msgid "Default title"
-msgstr "ר×\99ש×\99×\95×\9f"
+msgstr "×\9b×\95תרת ×\91ר×\99רת ×\9e×\97×\93×\9c"
 
 #: ../src/libgdl/gdl-dock.c:184
 msgid "Default title for the newly created floating docks"
-msgstr ""
+msgstr "כותרת ברירת המחדל עבור מעגנים צפים חדשים"
 
 #: ../src/libgdl/gdl-dock.c:191
 msgid "Width for the dock when it's of floating type"
-msgstr ""
+msgstr "רוחב המעגן כאשר הוא מסוג צף"
 
 #: ../src/libgdl/gdl-dock.c:199
 msgid "Height for the dock when it's of floating type"
-msgstr ""
+msgstr "גובה המעגן כאשר הוא מסוג צף"
 
 #: ../src/libgdl/gdl-dock.c:206
 msgid "Float X"
-msgstr ""
+msgstr "ציפה ב־X"
 
 #: ../src/libgdl/gdl-dock.c:207
 msgid "X coordinate for a floating dock"
-msgstr ""
+msgstr "נקודת הציון ב־X עבור מעגן צף"
 
 #: ../src/libgdl/gdl-dock.c:214
 msgid "Float Y"
-msgstr ""
+msgstr "ציפה ב־Y"
 
 #: ../src/libgdl/gdl-dock.c:215
 msgid "Y coordinate for a floating dock"
-msgstr ""
+msgstr "נקודת הציון ב־Y עבור מעגן צף"
 
 #: ../src/libgdl/gdl-dock.c:499
 #, c-format
 msgid "Dock #%d"
-msgstr ""
+msgstr "מעגן #%d"
 
 #: ../src/libgdl/gdl-dock-item.c:287
-#, fuzzy
 msgid "Orientation"
-msgstr "×\99×¢×\93 ×\94×\93פס×\94"
+msgstr "×\99ש×\95ר"
 
 #: ../src/libgdl/gdl-dock-item.c:288
 msgid "Orientation of the docking item"
-msgstr ""
+msgstr "ישור הפריט המעוכן"
 
 #: ../src/libgdl/gdl-dock-item.c:303
 msgid "Resizable"
-msgstr ""
+msgstr "בעל גודל הניתן לשינוי"
 
 #: ../src/libgdl/gdl-dock-item.c:304
 msgid "If set, the dock item can be resized when docked in a panel"
-msgstr ""
+msgstr "במידה והוגדר, ניתן לשנות את גודל הפריט המעוגן כאשר הוא מעוגן לחלונית"
 
 #: ../src/libgdl/gdl-dock-item.c:311
 msgid "Item behavior"
-msgstr ""
+msgstr "התנהגות הפריט"
 
 #: ../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 ""
+msgid "General behavior for the dock item (i.e. whether it can float, if it's locked, etc.)"
+msgstr "התנהגות כללית עבור פריט המעגן (לדוגמה האם הוא יכול לצוף, מעוגן וכו')"
 
-#: ../src/libgdl/gdl-dock-item.c:320 ../src/libgdl/gdl-dock-master.c:151
-#, fuzzy
+#: ../src/libgdl/gdl-dock-item.c:320
+#: ../src/libgdl/gdl-dock-master.c:151
 msgid "Locked"
-msgstr "נעל"
+msgstr "× ×¢×\95×\9c"
 
 #: ../src/libgdl/gdl-dock-item.c:321
-msgid ""
-"If set, the dock item cannot be dragged around and it doesn't show a grip"
-msgstr ""
+msgid "If set, the dock item cannot be dragged around and it doesn't show a grip"
+msgstr "במידה והוגדר לא ניתן יהיה לגרור את הפריט ולא תופיע ידית אחיזה"
 
 #: ../src/libgdl/gdl-dock-item.c:329
 msgid "Preferred width"
-msgstr ""
+msgstr "רוחב מועדף"
 
 #: ../src/libgdl/gdl-dock-item.c:330
 msgid "Preferred width for the dock item"
-msgstr ""
+msgstr "הרוחב המועדף עבור פריט המעגן"
 
 #: ../src/libgdl/gdl-dock-item.c:336
 msgid "Preferred height"
-msgstr ""
+msgstr "גובה מועדף"
 
 #: ../src/libgdl/gdl-dock-item.c:337
 msgid "Preferred height for the dock item"
-msgstr ""
+msgstr "הגובה המועדף עבור פריט המעגן"
 
 #: ../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."
-msgstr ""
+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 "אינך יכול לעגון פריטים (%p מסוג %s) בתוך %s. השתמש ב־GdlDock או באיזשהי תרכובת מעגן אחרת."
 
 #: ../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 ""
+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 "מנסה להוסיף רכיב מסוג %s אל %s, אך הוא יכול להכיל רכיב אחד בו זמנית; והוא כבר מכיל פריט מסוג %s"
 
-#: ../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 ""
+msgstr "אסטרטגיית העגינה %s אינה נתמכת בפריטי מעגן מסוג %s"
 
 #. UnLock menuitem
 #: ../src/libgdl/gdl-dock-item.c:1479
-#, fuzzy
 msgid "UnLock"
-msgstr "× ×¢×\9c"
+msgstr "ש×\97רר"
 
 #. Hide menuitem.
 #: ../src/libgdl/gdl-dock-item.c:1486
 msgid "Hide"
-msgstr ""
+msgstr "הסתר"
 
 #. Lock menuitem
 #: ../src/libgdl/gdl-dock-item.c:1491
@@ -5236,79 +5349,72 @@ msgstr "נעל"
 #: ../src/libgdl/gdl-dock-item.c:1717
 #, c-format
 msgid "Attempt to bind an unbound item %p"
-msgstr ""
+msgstr "מנסה לאגד פריט לא מאוגד %p"
 
 #: ../src/libgdl/gdl-dock-item-grip.c:395
 msgid "Iconify"
-msgstr ""
+msgstr "מזער לסמל"
 
 #: ../src/libgdl/gdl-dock-item-grip.c:395
 msgid "Iconify this dock"
-msgstr ""
+msgstr "מזער מעגן זה לסמל"
 
 #: ../src/libgdl/gdl-dock-item-grip.c:397
-#, fuzzy
 msgid "Close"
-msgstr "_סגור"
+msgstr "סגור"
 
 #: ../src/libgdl/gdl-dock-item-grip.c:397
 msgid "Close this dock"
-msgstr ""
+msgstr "סגור מעגן זה"
 
 #: ../src/libgdl/gdl-dock-item-grip.c:706
 #: ../src/libgdl/gdl-dock-tablabel.c:128
 msgid "Controlling dock item"
-msgstr ""
+msgstr "שולט בפריט מעוגן"
 
 #: ../src/libgdl/gdl-dock-item-grip.c:707
 msgid "Dockitem which 'owns' this grip"
-msgstr ""
+msgstr "פריט עגינה ה'שולט' באחיזה זו"
 
 #: ../src/libgdl/gdl-dock-master.c:145
 msgid "Default title for newly created floating docks"
-msgstr ""
+msgstr "כותרת ברירת מחדל עבור מעגנים צפים חדשים הנוצרים"
 
 #: ../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 ""
+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 "במידה והוגדר ל־1, כל פריטי העגינה המאוגדים לראשי הינם נעולים; אם 0, כולם לא נעולים; -1 מצביע על אי אחידות בין הפריטים"
 
-#: ../src/libgdl/gdl-dock-master.c:160 ../src/libgdl/gdl-switcher.c:707
+#: ../src/libgdl/gdl-dock-master.c:160
+#: ../src/libgdl/gdl-switcher.c:707
 msgid "Switcher Style"
-msgstr ""
+msgstr "סגנון מחליף"
 
-#: ../src/libgdl/gdl-dock-master.c:161 ../src/libgdl/gdl-switcher.c:708
+#: ../src/libgdl/gdl-dock-master.c:161
+#: ../src/libgdl/gdl-switcher.c:708
 msgid "Switcher buttons style"
-msgstr ""
+msgstr "סגנון לחצי מחליף"
 
 #: ../src/libgdl/gdl-dock-master.c:168
 msgid "Expand direction"
-msgstr ""
+msgstr "כיוון ההרחבה"
 
 #: ../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 ""
+msgid "Allow the master's dock items to expand their container dock objects in the given direction"
+msgstr "אפשר לפריטי העגינה הראשיים להרחיב את שטח התכולה של פרטי העגינה שלהם בכיוון הניתן"
 
 #: ../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 ""
+msgid "master %p: unable to add object %p[%s] to the hash.  There already is an item with that name (%p)."
+msgstr "%p ראשי: לא ניתן להוסיף את הפריט %p[%s] לגיבוב.  כבר יש פריט עם השם הזה(%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 ""
+msgid "The new dock controller %p is automatic.  Only manual dock objects should be named controller."
+msgstr "בקר המעגן %p הינו אוטומטי. רק פריטי מעגן ידניים אמורים להקרא בקר."
 
 #: ../src/libgdl/gdl-dock-notebook.c:134
-#: ../src/ui/dialog/align-and-distribute.cpp:903
-#: ../src/ui/dialog/document-properties.cpp:134
+#: ../src/ui/dialog/align-and-distribute.cpp:923
+#: ../src/ui/dialog/document-properties.cpp:133
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1364
 #: ../src/widgets/desktop-widget.cpp:1544
 msgid "Page"
@@ -5316,2221 +5422,2547 @@ msgstr "עמוד"
 
 #: ../src/libgdl/gdl-dock-notebook.c:135
 msgid "The index of the current page"
-msgstr ""
+msgstr "המפתח של העמוד הנוכחי"
 
-#: ../src/libgdl/gdl-dock-object.c:120 ../src/ui/widget/page-sizer.cpp:198
+#: ../src/libgdl/gdl-dock-object.c:120
+#: ../src/ui/widget/page-sizer.cpp:216
 msgid "Name"
-msgstr ""
+msgstr "שם"
 
 #: ../src/libgdl/gdl-dock-object.c:121
 msgid "Unique name for identifying the dock object"
-msgstr ""
+msgstr "שם ייחודי לזיהוי פריט המעגן"
 
 #: ../src/libgdl/gdl-dock-object.c:128
 msgid "Long name"
-msgstr ""
+msgstr "שם ארוך"
 
 #: ../src/libgdl/gdl-dock-object.c:129
 msgid "Human readable name for the dock object"
-msgstr ""
+msgstr "שם המובן לבני אדם עבור פריט המעגן"
 
 #: ../src/libgdl/gdl-dock-object.c:135
 msgid "Stock Icon"
-msgstr ""
+msgstr "סמל מחסנית"
 
 #: ../src/libgdl/gdl-dock-object.c:136
 msgid "Stock icon for the dock object"
-msgstr ""
+msgstr "סמל המחסנית עבור פריט המעגן"
 
 #: ../src/libgdl/gdl-dock-object.c:142
 msgid "Pixbuf Icon"
-msgstr ""
+msgstr "סמל חוצץ התמונה"
 
 #: ../src/libgdl/gdl-dock-object.c:143
 msgid "Pixbuf icon for the dock object"
-msgstr ""
+msgstr "סמל חוצץ התמונה עבור פריט המעגן"
 
 #: ../src/libgdl/gdl-dock-object.c:148
 msgid "Dock master"
-msgstr ""
+msgstr "מעגן ראשי"
 
 #: ../src/libgdl/gdl-dock-object.c:149
 msgid "Dock master this dock object is bound to"
-msgstr ""
+msgstr "המעגן הראשי אליו מאוגד פריט מעגן זה"
 
 #: ../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 ""
+msgid "Call to gdl_dock_object_dock in a dock object %p (object type is %s) which hasn't implemented this method"
+msgstr "קרא ל־gdl_dock_object_dock בפריט מעגן %p (סוג הפריט הוא %s) שלא יישם שיטה זו"
 
 #: ../src/libgdl/gdl-dock-object.c:563
 #, c-format
-msgid ""
-"Dock operation requested in a non-bound object %p. The application might "
-"crash"
-msgstr ""
+msgid "Dock operation requested in a non-bound object %p. The application might crash"
+msgstr "התבקשה פעולת מעגן עבור פריט לא מאוגד %p. התוכנה עלולה לקרוס"
 
 #: ../src/libgdl/gdl-dock-object.c:570
 #, c-format
 msgid "Cannot dock %p to %p because they belong to different masters"
-msgstr ""
+msgstr "לא ניתן לעגון את %p אל %p מכיוון שהם שייכים לראשיים שונים"
 
 #: ../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 ""
+msgid "Attempt to bind to %p an already bound dock object %p (current master: %p)"
+msgstr "נסיון לאיגוד אל %p פריט מעגן שכבר מאוגד %p (ראשי נוכחי: %p)"
 
 #: ../src/libgdl/gdl-dock-paned.c:132
-#, fuzzy
 msgid "Position"
-msgstr "×\99×¢×\93 ×\94×\93פס×\94"
+msgstr "×\9e×\99ק×\95×\9d"
 
 #: ../src/libgdl/gdl-dock-paned.c:133
 msgid "Position of the divider in pixels"
-msgstr ""
+msgstr "מיקום המחיצה בפיקסלים"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:143
 msgid "Sticky"
-msgstr ""
+msgstr "דביק"
 
 #: ../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 ""
+msgid "Whether the placeholder will stick to its host or move up the hierarchy when the host is redocked"
+msgstr "האם ממלא המקום ידבק אל המארח שלו או שיעלה מעלה בהירארכיה כאשר המארח מעוגן מחדש"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:151
 msgid "Host"
-msgstr ""
+msgstr "מארח"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:152
 msgid "The dock object this placeholder is attached to"
-msgstr ""
+msgstr "פריט המעגן אליו מצורף ממלא מקום זה"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:159
 msgid "Next placement"
-msgstr ""
+msgstr "ההצבה הבאה"
 
 #: ../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 ""
+msgid "The position an item will be docked to our host if a request is made to dock to us"
+msgstr "המיקום שאליו יעגון הפריט למארח שלנו במידה ויתבקש לעגון אלינו"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:170
 msgid "Width for the widget when it's attached to the placeholder"
-msgstr ""
+msgstr "רוחב הרכיב כאשר הוא מסופח לממלא המקום"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:178
 msgid "Height for the widget when it's attached to the placeholder"
-msgstr ""
+msgstr "גובה הרכיב כאשר הוא מסופח  לממלא המקום"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:184
 msgid "Floating Toplevel"
-msgstr ""
+msgstr "רמת הציפה העליונה"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:185
 msgid "Whether the placeholder is standing in for a floating toplevel dock"
-msgstr ""
+msgstr "האם ממלא המקום מחליף את מקומו של מעגן הצף כעליון"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:191
-#, fuzzy
 msgid "X-Coordinate"
-msgstr "פ×\99× ×\95ת"
+msgstr "נק×\95×\93ת ×\94צ×\99×\95×\9f ×\91Ö¾X"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:192
 msgid "X coordinate for dock when floating"
-msgstr ""
+msgstr "נקודת הציון ב־X עבור המעגן בעת הציפה"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:198
-#, fuzzy
 msgid "Y-Coordinate"
-msgstr "פ×\99× ×\95ת"
+msgstr "נק×\95×\93ת ×\94צ×\99×\95×\9f ×\91Ö¾Y"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:199
 msgid "Y coordinate for dock when floating"
-msgstr ""
+msgstr "נקודת הציון ב־Y עבור המעגן בעת הציפה"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:494
 msgid "Attempt to dock a dock object to an unbound placeholder"
-msgstr ""
+msgstr "נסה לעגון פריט מעגן לממלא מקום לא מאוגד"
 
 #: ../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 ""
+msgstr "התקבל אות הפרדה מהפריט (%p) שאינו המארח שלנו %p"
 
 #: ../src/libgdl/gdl-dock-placeholder.c:643
 #, c-format
-msgid ""
-"Something weird happened while getting the child placement for %p from "
-"parent %p"
-msgstr ""
+msgid "Something weird happened while getting the child placement for %p from parent %p"
+msgstr "משהו מוזר קרה בעת קבלת מיקום הצאצא עבור %p מההורה %p"
 
 #: ../src/libgdl/gdl-dock-tablabel.c:129
 msgid "Dockitem which 'owns' this tablabel"
-msgstr ""
+msgstr "פריט מעגן ה'שולט' בתווית לשונית זו"
 
-#: ../src/libnrtype/FontFactory.cpp:774
+#: ../src/libnrtype/FontFactory.cpp:780
 msgid "Ignoring font without family that will crash Pango"
-msgstr ""
+msgstr "מתעלם מגופן ללא משפחה כדי שלא יקריס את פאנגו"
 
 #. {constant defined in effect.h, N_("name of your effect"), "name of your effect in SVG"}
-#: ../src/live_effects/effect.cpp:68
-#, fuzzy
+#: ../src/live_effects/effect.cpp:76
+msgid "Angle bisector"
+msgstr "מחבר זוויתי"
+
+#: ../src/live_effects/effect.cpp:77
 msgid "Bend"
-msgstr "ש×\97×\95ר"
+msgstr "×\9b×\95פף"
 
-#: ../src/live_effects/effect.cpp:69
-msgid "Pattern Along Path"
-msgstr ""
+#: ../src/live_effects/effect.cpp:78
+msgid "Boolops"
+msgstr "אופרטורים בוליאנים"
 
-#. for historic reasons, this effect is called skeletal(strokes) in Inkscape:SVG
-#: ../src/live_effects/effect.cpp:70
-msgid "Sketch"
-msgstr ""
+#: ../src/live_effects/effect.cpp:79
+msgid "Circle (by center and radius)"
+msgstr "עיגול (לפי מרכז ורדיוס)"
 
-#: ../src/live_effects/effect.cpp:71
-msgid "VonKoch"
-msgstr ""
+#: ../src/live_effects/effect.cpp:80
+msgid "Circle by 3 points"
+msgstr "עיגול לפי 3 נקודות"
 
-#: ../src/live_effects/effect.cpp:72
-msgid "Knot"
-msgstr ""
+#: ../src/live_effects/effect.cpp:81
+msgid "Construct grid"
+msgstr "הרכב רשת"
 
-#: ../src/live_effects/effect.cpp:74
+#: ../src/live_effects/effect.cpp:83
 msgid "doEffect stack test"
-msgstr ""
+msgstr "מחסנית בדיקת doEffect"
 
-#: ../src/live_effects/effect.cpp:76
-msgid "Gears"
-msgstr ""
+#: ../src/live_effects/effect.cpp:85
+msgid "Envelope Deformation"
+msgstr "עיוות מעטפה"
 
-#: ../src/live_effects/effect.cpp:77
-msgid "Stitch Sub-Paths"
-msgstr ""
+#: ../src/live_effects/effect.cpp:86
+msgid "Freehand Shape"
+msgstr "צורה ביד חופשית"
 
-#: ../src/live_effects/effect.cpp:78
-msgid "Circle (center+radius)"
-msgstr ""
+#. this is actually a special type of PatternAlongPath, used to paste shapes in pen/pencil tool
+#: ../src/live_effects/effect.cpp:87
+msgid "Gears"
+msgstr "גלגלי שיניים"
 
-#: ../src/live_effects/effect.cpp:79
-msgid "Perspective path"
-msgstr ""
+#: ../src/live_effects/effect.cpp:88
+msgid "Interpolate Sub-Paths"
+msgstr "בצע אינטרפולציה לתת־נתיבים"
 
-#: ../src/live_effects/effect.cpp:80
-msgid "Spiro spline"
-msgstr ""
+#: ../src/live_effects/effect.cpp:89
+msgid "Knot"
+msgstr "קשר"
 
-#: ../src/live_effects/effect.cpp:81
+#: ../src/live_effects/effect.cpp:90
 msgid "Lattice Deformation"
-msgstr ""
+msgstr "עיוות סבוך"
 
-#: ../src/live_effects/effect.cpp:82
-msgid "Envelope Deformation"
-msgstr ""
+#: ../src/live_effects/effect.cpp:91
+msgid "Line Segment"
+msgstr "קו מקטע"
 
-#: ../src/live_effects/effect.cpp:83
-#, fuzzy
-msgid "Construct grid"
-msgstr "ניגודיות"
+#: ../src/live_effects/effect.cpp:92
+msgid "Mirror symmetry"
+msgstr "סימטריית מראה"
+
+#: ../src/live_effects/effect.cpp:94
+msgid "Parallel"
+msgstr "מקביל"
 
-#: ../src/live_effects/effect.cpp:84
+#: ../src/live_effects/effect.cpp:95
+msgid "Path length"
+msgstr "אורך הנתיב"
+
+#: ../src/live_effects/effect.cpp:96
+msgid "Pattern Along Path"
+msgstr "תבנית לאורך נתיב"
+
+#. for historic reasons, this effect is called skeletal(strokes) in Inkscape:SVG
+#: ../src/live_effects/effect.cpp:97
 msgid "Perpendicular bisector"
-msgstr ""
+msgstr "מחבר אנכי"
 
-#: ../src/live_effects/effect.cpp:85
-#, fuzzy
+#: ../src/live_effects/effect.cpp:98
+msgid "Perspective path"
+msgstr "נתיב פרספקטיבה"
+
+#: ../src/live_effects/effect.cpp:99
+msgid "Rotate copies"
+msgstr "סובב עותקים"
+
+#: ../src/live_effects/effect.cpp:100
+msgid "Ruler"
+msgstr "סרגל"
+
+#: ../src/live_effects/effect.cpp:101
+msgid "Sketch"
+msgstr "סקיצה"
+
+#: ../src/live_effects/effect.cpp:102
+msgid "Spiro spline"
+msgstr "רצועת ספירו"
+
+#: ../src/live_effects/effect.cpp:103
+msgid "Stitch Sub-Paths"
+msgstr "תפור תת־נתיבים"
+
+#: ../src/live_effects/effect.cpp:104
 msgid "Tangent to curve"
-msgstr "×\94×\99ס×\98 ×\9eש×\99ק"
+msgstr "×\9eש×\99ק ×\9cעק×\95×\9e×\94"
 
-#: ../src/live_effects/effect.cpp:86
-#, fuzzy
-msgid "Mirror reflection"
-msgstr "<b>PM</b>: שיקוף"
+#: ../src/live_effects/effect.cpp:105
+msgid "Text label"
+msgstr "תווית טקסט"
 
-#: ../src/live_effects/effect.cpp:178
-msgid "Create and apply path effect"
-msgstr ""
+#: ../src/live_effects/effect.cpp:106
+msgid "VonKoch"
+msgstr "פתית השלג של קוך"
 
-#: ../src/live_effects/effect.cpp:189
+#: ../src/live_effects/effect.cpp:255
 msgid "Is visible?"
-msgstr ""
+msgstr "האם נראה?"
 
-#: ../src/live_effects/effect.cpp:189
-msgid ""
-"If unchecked, the effect remains applied to the object but is temporarily "
-"disabled on canvas"
-msgstr ""
+#: ../src/live_effects/effect.cpp:255
+msgid "If unchecked, the effect remains applied to the object but is temporarily disabled on canvas"
+msgstr "במידה ולא סומן, האפקט יחול על הפריט אך ינוטרל זמנית על משטח הציור"
+
+#: ../src/live_effects/effect.cpp:256
+msgid "Deactivate knotholder?"
+msgstr "לנטרל את מחזיק הקשר?"
 
-#: ../src/live_effects/effect.cpp:207
+#: ../src/live_effects/effect.cpp:256
+msgid "Check this to deactivate knotholder handles (useful if they interfere with node handles during editing)"
+msgstr "בחר זאת כדי לנטרל את ידיות אחיזת הקשר (שימוש אם הן מפריעות לידיות המפרקים במהלך העריכה)"
+
+#: ../src/live_effects/effect.cpp:277
 msgid "No effect"
-msgstr ""
+msgstr "ללא אפקט"
 
-#: ../src/live_effects/effect.cpp:254
+#: ../src/live_effects/effect.cpp:324
 #, c-format
 msgid "Please specify a parameter path for the LPE '%s' with %d mouse clicks"
-msgstr ""
-
-#: ../src/live_effects/effect.cpp:294
-msgid "An exception occurred during execution of the Path Effect."
-msgstr ""
+msgstr "נא ציין נתיב פרמטר עבור אפקט הנתיב החי '%s' ב־%d לחיצות עכבר"
 
-#: ../src/live_effects/effect.cpp:512
+#: ../src/live_effects/effect.cpp:623
 #, c-format
 msgid "Editing parameter <b>%s</b>."
-msgstr ""
+msgstr "עורך את הפרמטר <b>%s</b>."
 
-#: ../src/live_effects/effect.cpp:517
+#: ../src/live_effects/effect.cpp:628
 msgid "None of the applied path effect's parameters can be edited on-canvas."
-msgstr ""
+msgstr "אף אחד מהפרמטרים של אפקט הנתיב יכולים לבוא לידי ביטוי על גבי לוח הציור."
 
-#: ../src/live_effects/lpe-bendpath.cpp:57
+#: ../src/live_effects/lpe-angle_bisector.cpp:51
+#: ../src/live_effects/lpe-parallel.cpp:47
+#: ../src/live_effects/lpe-perp_bisector.cpp:103
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:58
+msgid "Length left"
+msgstr "אורך שמאל"
+
+#: ../src/live_effects/lpe-angle_bisector.cpp:51
+#: ../src/live_effects/lpe-perp_bisector.cpp:103
+msgid "Specifies the left end of the bisector"
+msgstr "מגדיר את הצד השמאלי של המחבר"
+
+#: ../src/live_effects/lpe-angle_bisector.cpp:52
+#: ../src/live_effects/lpe-parallel.cpp:48
+#: ../src/live_effects/lpe-perp_bisector.cpp:104
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:59
+msgid "Length right"
+msgstr "אורך ימין"
+
+#: ../src/live_effects/lpe-angle_bisector.cpp:52
+#: ../src/live_effects/lpe-perp_bisector.cpp:104
+msgid "Specifies the right end of the bisector"
+msgstr "מגדיר את הצד הימני של המחבר"
+
+#: ../src/live_effects/lpe-angle_bisector.cpp:59
+msgid "Adjust the \"left\" end of the bisector"
+msgstr "התאם את הסוף \"השמאלי\" של המחבר"
+
+#: ../src/live_effects/lpe-angle_bisector.cpp:60
+msgid "Adjust the \"right\" of the bisector"
+msgstr "הגדר את הצד \"הימני\"של המחבר"
+
+#: ../src/live_effects/lpe-bendpath.cpp:55
 msgid "Bend path"
-msgstr ""
+msgstr "כופף נתיב"
 
-#: ../src/live_effects/lpe-bendpath.cpp:57
+#: ../src/live_effects/lpe-bendpath.cpp:55
 msgid "Path along which to bend the original path"
-msgstr ""
+msgstr "נתיב שלאורכו יכופף הנתיב המקורי"
 
-#: ../src/live_effects/lpe-bendpath.cpp:58
+#: ../src/live_effects/lpe-bendpath.cpp:56
 msgid "Width of the path"
-msgstr ""
+msgstr "רוחב הנתיב"
 
-#: ../src/live_effects/lpe-bendpath.cpp:59
-#: ../src/live_effects/lpe-patternalongpath.cpp:65
+#: ../src/live_effects/lpe-bendpath.cpp:57
+#: ../src/live_effects/lpe-patternalongpath.cpp:64
 msgid "Width in units of length"
-msgstr ""
+msgstr "רוחב ביחידות אורך"
 
-#: ../src/live_effects/lpe-bendpath.cpp:59
+#: ../src/live_effects/lpe-bendpath.cpp:57
 msgid "Scale the width of the path in units of its length"
-msgstr ""
+msgstr "מדוד את עובי הנתיב ביחידות הרוחב שלו"
 
-#: ../src/live_effects/lpe-bendpath.cpp:60
+#: ../src/live_effects/lpe-bendpath.cpp:58
 msgid "Original path is vertical"
-msgstr ""
+msgstr "הנתיב המקורי הוא אנכי"
 
-#: ../src/live_effects/lpe-bendpath.cpp:60
+#: ../src/live_effects/lpe-bendpath.cpp:58
 msgid "Rotates the original 90 degrees, before bending it along the bend path"
-msgstr ""
+msgstr "מסובב את המקור ב־90 מעלות, לפני שמכופף אותו לאורך נתיב הכיפוף"
+
+#: ../src/live_effects/lpe-boolops.cpp:23
+msgid "Null"
+msgstr "ריק"
+
+#: ../src/live_effects/lpe-boolops.cpp:24
+msgid "Intersect"
+msgstr "הצלבה"
+
+#: ../src/live_effects/lpe-boolops.cpp:25
+msgid "Subtract A-B"
+msgstr "חסר את B מ־A"
+
+#: ../src/live_effects/lpe-boolops.cpp:26
+msgid "Identity A"
+msgstr "זהות A"
+
+#: ../src/live_effects/lpe-boolops.cpp:27
+msgid "Subtract B-A"
+msgstr "חסר את Aמ־B"
+
+#: ../src/live_effects/lpe-boolops.cpp:28
+msgid "Identity B"
+msgstr "זהות B"
+
+#: ../src/live_effects/lpe-boolops.cpp:29
+#: ../src/splivarot.cpp:96
+msgid "Exclusion"
+msgstr "אי הכללה"
+
+#: ../src/live_effects/lpe-boolops.cpp:30
+#: ../src/splivarot.cpp:66
+#: ../src/splivarot.cpp:72
+msgid "Union"
+msgstr "איחוד"
+
+#: ../src/live_effects/lpe-boolops.cpp:36
+msgid "2nd path"
+msgstr "הנתיב השני"
+
+#: ../src/live_effects/lpe-boolops.cpp:36
+msgid "Path to which the original path will be boolop'ed."
+msgstr "הנתיב שעליו תבוצע הפעולה הבוליאנית עם הנתיב המקורי."
+
+#: ../src/live_effects/lpe-boolops.cpp:37
+msgid "Boolop type"
+msgstr "סוג הפעולה הבוליאנית"
+
+#: ../src/live_effects/lpe-boolops.cpp:37
+msgid "Determines which kind of boolop will be performed."
+msgstr "קובע איזה סוג של של אופרטורים בוליאניים יבוצעו."
 
 #: ../src/live_effects/lpe-constructgrid.cpp:28
 msgid "Size X"
-msgstr ""
+msgstr "גודל X"
 
 #: ../src/live_effects/lpe-constructgrid.cpp:28
 msgid "The size of the grid in X direction."
-msgstr ""
+msgstr "גודל הרשת בכיוון X/"
 
 #: ../src/live_effects/lpe-constructgrid.cpp:29
 msgid "Size Y"
-msgstr ""
+msgstr "גודל Y"
 
 #: ../src/live_effects/lpe-constructgrid.cpp:29
 msgid "The size of the grid in Y direction."
-msgstr ""
+msgstr "גודל הרשת בכיוון ה־Y."
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:47
+msgid "Starting"
+msgstr "מתחיל ב־"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:47
+msgid "Angle of the first copy"
+msgstr "זווית העותק הראשון"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:48
+msgid "Rotation angle"
+msgstr "זווית ההטייה"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:48
+msgid "Angle between two successive copies"
+msgstr "זווית בין שני עותקים עוקבים"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:49
+msgid "Number of copies"
+msgstr "מספר העותקים"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:49
+msgid "Number of copies of the original path"
+msgstr "מספר העותקים של הנתיב המקורי"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:50
+msgid "Origin"
+msgstr "מקור"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:50
+msgid "Origin of the rotation"
+msgstr "מקור ההטייה"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:61
+msgid "Adjust the starting angle"
+msgstr "הגדר את זווית ההתחלה"
+
+#: ../src/live_effects/lpe-copy_rotate.cpp:62
+msgid "Adjust the rotation angle"
+msgstr "הגדר את זווית ההטייה"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:42
 msgid "Stitch path"
-msgstr ""
+msgstr "תפור נתיב"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:42
 msgid "The path that will be used as stitch."
-msgstr ""
+msgstr "הנתיב שישמש כתפר."
 
 #: ../src/live_effects/lpe-curvestitch.cpp:43
-#, fuzzy
 msgid "Number of paths"
-msgstr "×\9eספר ×¦×¢×\93ים"
+msgstr "×\9eספר × ×ª×\99×\91ים"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:43
 msgid "The number of paths that will be generated."
-msgstr ""
+msgstr "מספר הנתיבים שייוצרו."
 
 #: ../src/live_effects/lpe-curvestitch.cpp:44
 msgid "Start edge variance"
-msgstr ""
+msgstr "שינוי בתחילת הקצה"
 
 #: ../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 ""
+msgid "The amount of random jitter to move the start points of the stitches inside & outside the guide path"
+msgstr "כמות התנודה האקראית להזזת את נקודות ההתחלה של התפרים מתוך ומחוץ לנתיב המנחה"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:45
-#, fuzzy
 msgid "Start spacing variance"
-msgstr "×\93×\97×\94 ×\94×\96×\9e× ×\94"
+msgstr "×\94ת×\97×\9c ×\91ש×\99× ×\95×\99 ×\94ר×\99×\95×\95×\97"
 
 #: ../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 ""
+msgid "The amount of random shifting to move the start points of the stitches back & forth along the guide path"
+msgstr "כמות התזוזה היחסית להזזת נקודות התחלת התפרים קדימה ואחורה לאורך הנתיב המנחה"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:46
 msgid "End edge variance"
-msgstr ""
+msgstr "סיום קצה השינוי"
 
 #: ../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 ""
+msgid "The amount of randomness that moves the end points of the stitches inside & outside the guide path"
+msgstr "כמות האקראיות שמניעה את נקודות הסיום של התפרים מפנים ומחוץ לנתיב המנחה"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:47
-#, fuzzy
 msgid "End spacing variance"
-msgstr "×\93×\97×\94 ×\94×\96×\9e× ×\94"
+msgstr "ס×\99×\95×\9d ×©×\99× ×\95×\99 ×\94ר×\99×\95×\95×\97"
 
 #: ../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 ""
+msgid "The amount of random shifting to move the end points of the stitches back & forth along the guide path"
+msgstr "כמות האקראיות בהזזת נקודות הסיום של התפרים קדימה ואחורה לאורך הנתיב המנחה"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:48
 msgid "Scale width"
-msgstr ""
+msgstr "שינוי הרוחב"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:48
 msgid "Scale the width of the stitch path"
-msgstr ""
+msgstr "שינוי רוחב נתיב התפר"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:49
 msgid "Scale width relative to length"
-msgstr ""
+msgstr "שינוי הרוחב הינו יחסי לאורך"
 
 #: ../src/live_effects/lpe-curvestitch.cpp:49
 msgid "Scale the width of the stitch path relative to its length"
-msgstr ""
+msgstr "שנה את רוחב נתיב התפר ביחס לאורכו"
 
-#: ../src/live_effects/lpe-envelope.cpp:36
+#: ../src/live_effects/lpe-envelope.cpp:33
 msgid "Top bend path"
-msgstr ""
+msgstr "נתיב הכיפוף העליון"
 
-#: ../src/live_effects/lpe-envelope.cpp:36
+#: ../src/live_effects/lpe-envelope.cpp:33
 msgid "Top path along which to bend the original path"
-msgstr ""
+msgstr "הנתיב העליון שלאורכו יכופף הנתיב המקורי"
 
-#: ../src/live_effects/lpe-envelope.cpp:37
+#: ../src/live_effects/lpe-envelope.cpp:34
 msgid "Right bend path"
-msgstr ""
+msgstr "נתיב הכיפוף הימני"
 
-#: ../src/live_effects/lpe-envelope.cpp:37
+#: ../src/live_effects/lpe-envelope.cpp:34
 msgid "Right path along which to bend the original path"
-msgstr ""
+msgstr "הנתיב הימני שלאורכו יכופף הנתיב המקורי"
 
-#: ../src/live_effects/lpe-envelope.cpp:38
+#: ../src/live_effects/lpe-envelope.cpp:35
 msgid "Bottom bend path"
-msgstr ""
+msgstr "נתיב הכיפוף התחתון"
 
-#: ../src/live_effects/lpe-envelope.cpp:38
+#: ../src/live_effects/lpe-envelope.cpp:35
 msgid "Bottom path along which to bend the original path"
-msgstr ""
+msgstr "הנתיב התחתון שלאורכו יכופף הנתיב המקורי"
 
-#: ../src/live_effects/lpe-envelope.cpp:39
+#: ../src/live_effects/lpe-envelope.cpp:36
 msgid "Left bend path"
-msgstr ""
+msgstr "נתיב הכיפוף השמאלי"
 
-#: ../src/live_effects/lpe-envelope.cpp:39
+#: ../src/live_effects/lpe-envelope.cpp:36
 msgid "Left path along which to bend the original path"
-msgstr ""
+msgstr "הנתיב השמאלי שלאורכו יכופף הנתיב המקורי"
 
-#: ../src/live_effects/lpe-envelope.cpp:40
+#: ../src/live_effects/lpe-envelope.cpp:37
 msgid "Enable left & right paths"
-msgstr ""
+msgstr "אפשר נתיבים ימניים ושמאליים"
 
-#: ../src/live_effects/lpe-envelope.cpp:40
+#: ../src/live_effects/lpe-envelope.cpp:37
 msgid "Enable the left and right deformation paths"
-msgstr ""
+msgstr "אפשר את נתיבי העיוות השמאלי והימני"
 
-#: ../src/live_effects/lpe-envelope.cpp:41
+#: ../src/live_effects/lpe-envelope.cpp:38
 msgid "Enable top & bottom paths"
-msgstr ""
+msgstr "אפשר נתיבים תחתונים ועליונים"
 
-#: ../src/live_effects/lpe-envelope.cpp:41
+#: ../src/live_effects/lpe-envelope.cpp:38
 msgid "Enable the top and bottom deformation paths"
-msgstr ""
+msgstr "אפשר את נתיבי העיוות העליון והתחתון"
 
 #: ../src/live_effects/lpe-gears.cpp:212
 msgid "Teeth"
-msgstr ""
+msgstr "שיניים"
 
 #: ../src/live_effects/lpe-gears.cpp:212
 msgid "The number of teeth"
-msgstr ""
+msgstr "מספר השיניים"
 
 #: ../src/live_effects/lpe-gears.cpp:213
 msgid "Phi"
-msgstr ""
+msgstr "יחס הזהב"
 
 #: ../src/live_effects/lpe-gears.cpp:213
-msgid ""
-"Tooth pressure angle (typically 20-25 deg).  The ratio of teeth not in "
-"contact."
-msgstr ""
+msgid "Tooth pressure angle (typically 20-25 deg).  The ratio of teeth not in contact."
+msgstr "זווית לחץ השן (לרב 20-25 מעלות). יחס השיניים שאינן במגע."
+
+#: ../src/live_effects/lpe-interpolate.cpp:30
+msgid "Trajectory"
+msgstr "מסלול"
+
+#: ../src/live_effects/lpe-interpolate.cpp:30
+msgid "Path along which intermediate steps are created."
+msgstr "נתיב שלאורכו יווצרו צעדים בינוניים."
+
+#: ../src/live_effects/lpe-interpolate.cpp:31
+#: ../src/ui/dialog/inkscape-preferences.cpp:203
+msgid "Steps"
+msgstr "שלבים"
+
+#: ../src/live_effects/lpe-interpolate.cpp:31
+msgid "Determines the number of steps from start to end path."
+msgstr "מציין את מספר הצעדים מההתחלה לסיום הנתיב."
+
+#: ../src/live_effects/lpe-interpolate.cpp:32
+msgid "Equidistant spacing"
+msgstr "ריווח שווה מרחק"
+
+#: ../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 "במידה ונכון, הרווח שבין הקטעים האמצעיים לאורך הנתיב. במידה ושגוי, המרחק תלוי במיקום המפרקים של נתיב המסלול"
 
 #. initialise your parameters here:
-#: ../src/live_effects/lpe-knot.cpp:27
+#: ../src/live_effects/lpe-knot.cpp:331
 msgid "Gap width"
-msgstr ""
+msgstr "גודל המרווח"
 
-#: ../src/live_effects/lpe-knot.cpp:27
+#: ../src/live_effects/lpe-knot.cpp:331
 msgid "The width of the gap in the path where it self-intersects"
-msgstr ""
+msgstr "גודל המרוויח בנתיב במיקום בו הוא נפגש עם עצמו"
+
+#: ../src/live_effects/lpe-knot.cpp:332
+msgid "Switcher size"
+msgstr "גודל המחליף"
+
+#: ../src/live_effects/lpe-knot.cpp:332
+msgid "Orientation indicator/switcher size"
+msgstr "גודל מחוון/משנה הכיווניות"
+
+#: ../src/live_effects/lpe-knot.cpp:333
+msgid "Crossing Signs"
+msgstr "סימני חצייה"
+
+#: ../src/live_effects/lpe-knot.cpp:333
+msgid "Crossings signs"
+msgstr "סימני חציות"
+
+#: ../src/live_effects/lpe-knot.cpp:340
+msgid "Drag to select a crossing, click to flip it"
+msgstr "גרור לבחירת חצייה, לחץ כדי להפוך אותה"
 
 #. initialise your parameters here:
-#: ../src/live_effects/lpe-lattice.cpp:45
+#: ../src/live_effects/lpe-lattice.cpp:47
 msgid "Control handle 0"
-msgstr ""
+msgstr "ידית שליטה 0"
 
-#: ../src/live_effects/lpe-lattice.cpp:45
-#: ../src/live_effects/lpe-lattice.cpp:46
-#: ../src/live_effects/lpe-lattice.cpp:47
 #: ../src/live_effects/lpe-lattice.cpp:48
-#: ../src/live_effects/lpe-lattice.cpp:49
-#: ../src/live_effects/lpe-lattice.cpp:50
-#: ../src/live_effects/lpe-lattice.cpp:51
-#: ../src/live_effects/lpe-lattice.cpp:52
-#: ../src/live_effects/lpe-lattice.cpp:53
-#: ../src/live_effects/lpe-lattice.cpp:54
-#: ../src/live_effects/lpe-lattice.cpp:55
-#: ../src/live_effects/lpe-lattice.cpp:56
-#: ../src/live_effects/lpe-lattice.cpp:57
-#: ../src/live_effects/lpe-lattice.cpp:58
-#: ../src/live_effects/lpe-lattice.cpp:59
-#: ../src/live_effects/lpe-lattice.cpp:60
-msgid "Tadah"
-msgstr ""
-
-#: ../src/live_effects/lpe-lattice.cpp:46
 msgid "Control handle 1"
-msgstr ""
+msgstr "ידית שליטה 1"
 
-#: ../src/live_effects/lpe-lattice.cpp:47
+#: ../src/live_effects/lpe-lattice.cpp:49
 msgid "Control handle 2"
-msgstr ""
+msgstr "ידית שליטה 2"
 
-#: ../src/live_effects/lpe-lattice.cpp:48
+#: ../src/live_effects/lpe-lattice.cpp:50
 msgid "Control handle 3"
-msgstr ""
+msgstr "ידית שליטה 3"
 
-#: ../src/live_effects/lpe-lattice.cpp:49
+#: ../src/live_effects/lpe-lattice.cpp:51
 msgid "Control handle 4"
-msgstr ""
+msgstr "ידית שליטה 4"
 
-#: ../src/live_effects/lpe-lattice.cpp:50
+#: ../src/live_effects/lpe-lattice.cpp:52
 msgid "Control handle 5"
-msgstr ""
+msgstr "ידית שליטה 5"
 
-#: ../src/live_effects/lpe-lattice.cpp:51
+#: ../src/live_effects/lpe-lattice.cpp:53
 msgid "Control handle 6"
-msgstr ""
+msgstr "ידית שליטה 6"
 
-#: ../src/live_effects/lpe-lattice.cpp:52
+#: ../src/live_effects/lpe-lattice.cpp:54
 msgid "Control handle 7"
-msgstr ""
+msgstr "ידית שליטה 7"
 
-#: ../src/live_effects/lpe-lattice.cpp:53
+#: ../src/live_effects/lpe-lattice.cpp:55
 msgid "Control handle 8"
-msgstr ""
+msgstr "ידית שליטה 8"
 
-#: ../src/live_effects/lpe-lattice.cpp:54
+#: ../src/live_effects/lpe-lattice.cpp:56
 msgid "Control handle 9"
-msgstr ""
+msgstr "ידית שליטה 9"
 
-#: ../src/live_effects/lpe-lattice.cpp:55
+#: ../src/live_effects/lpe-lattice.cpp:57
 msgid "Control handle 10"
-msgstr ""
+msgstr "ידית שליטה 10"
 
-#: ../src/live_effects/lpe-lattice.cpp:56
+#: ../src/live_effects/lpe-lattice.cpp:58
 msgid "Control handle 11"
-msgstr ""
+msgstr "ידית שליטה 11"
 
-#: ../src/live_effects/lpe-lattice.cpp:57
+#: ../src/live_effects/lpe-lattice.cpp:59
 msgid "Control handle 12"
-msgstr ""
+msgstr "ידית שליטה 12"
 
-#: ../src/live_effects/lpe-lattice.cpp:58
+#: ../src/live_effects/lpe-lattice.cpp:60
 msgid "Control handle 13"
-msgstr ""
+msgstr "ידית שליטה 13"
 
-#: ../src/live_effects/lpe-lattice.cpp:59
+#: ../src/live_effects/lpe-lattice.cpp:61
 msgid "Control handle 14"
-msgstr ""
+msgstr "ידית שליטה 14"
 
-#: ../src/live_effects/lpe-lattice.cpp:60
+#: ../src/live_effects/lpe-lattice.cpp:62
 msgid "Control handle 15"
-msgstr ""
+msgstr "ידית שליטה 15"
 
-#: ../src/live_effects/lpe-mirror_reflect.cpp:30
+#: ../src/live_effects/lpe-line_segment.cpp:27
+#: ../src/widgets/toolbox.cpp:5045
+msgid "Closed"
+msgstr "סגור"
+
+#: ../src/live_effects/lpe-line_segment.cpp:28
+#: ../src/widgets/toolbox.cpp:5047
+msgid "Open start"
+msgstr "התחלה פתוחה"
+
+#: ../src/live_effects/lpe-line_segment.cpp:29
+#: ../src/widgets/toolbox.cpp:5049
+msgid "Open end"
+msgstr "סוף פתוח"
+
+#: ../src/live_effects/lpe-line_segment.cpp:30
+#: ../src/widgets/toolbox.cpp:5051
+msgid "Open both"
+msgstr "פתח את שניהם"
+
+#: ../src/live_effects/lpe-line_segment.cpp:36
+msgid "End type"
+msgstr "סוג הסיום"
+
+#: ../src/live_effects/lpe-line_segment.cpp:36
+msgid "Determines on which side the line or line segment is infinite."
+msgstr "מציין באיזה צד הקו או מקטע הקו הינו אינסופי."
+
+#: ../src/live_effects/lpe-mirror_symmetry.cpp:30
+msgid "Discard original path?"
+msgstr "להתעלם מהנתיב המקורי?"
+
+#: ../src/live_effects/lpe-mirror_symmetry.cpp:30
+msgid "Check this to only keep the mirrored part of the path"
+msgstr "סמן זאת כדי להשאיר רק את החלק המשתקף של הנתיב"
+
+#: ../src/live_effects/lpe-mirror_symmetry.cpp:31
 msgid "Reflection line"
-msgstr ""
+msgstr "קו השתקפות"
 
-#: ../src/live_effects/lpe-mirror_reflect.cpp:30
+#: ../src/live_effects/lpe-mirror_symmetry.cpp:31
 msgid "Line which serves as 'mirror' for the reflection"
-msgstr ""
+msgstr "קו המהוה מעין 'מראה' עבור ההשתקפות"
+
+#: ../src/live_effects/lpe-offset.cpp:30
+msgid "Handle to control the distance of the offset from the curve"
+msgstr "ידית לשליטה במרחק בין  הקיזוז לעקומה"
+
+#: ../src/live_effects/lpe-parallel.cpp:46
+msgid "Adjust the offset"
+msgstr "הגדר את הקיזוז"
+
+#: ../src/live_effects/lpe-parallel.cpp:47
+msgid "Specifies the left end of the parallel"
+msgstr "מגדיר את הסוף השמאלי של המקביל"
+
+#: ../src/live_effects/lpe-parallel.cpp:48
+msgid "Specifies the right end of the parallel"
+msgstr "מציין את הסוף הימני של המקביל"
+
+#: ../src/live_effects/lpe-parallel.cpp:56
+msgid "Adjust the \"left\" end of the parallel"
+msgstr "הגדר את הסוף \"השמאלי\" של המקביל"
+
+#: ../src/live_effects/lpe-parallel.cpp:57
+msgid "Adjust the \"right\" end of the parallel"
+msgstr "הגדר את הסוף \"הימני\" של המקביל"
+
+#: ../src/live_effects/lpe-path_length.cpp:25
+#: ../src/live_effects/lpe-sketch.cpp:54
+#: ../src/selection-chemistry.cpp:1478
+#: ../src/seltrans.cpp:448
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2249
+#: ../src/ui/dialog/transformation.cpp:738
+msgid "Scale"
+msgstr "התאם מידות"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:53
+#: ../src/live_effects/lpe-path_length.cpp:25
+msgid "Scaling factor"
+msgstr "מקדם שינוי גודל"
+
+#: ../src/live_effects/lpe-path_length.cpp:28
+msgid "Display unit"
+msgstr "הצג יחידות"
+
+#: ../src/live_effects/lpe-path_length.cpp:28
+msgid "Print unit after path length"
+msgstr "הטבע את היחידות לאחר אורך הנתיב"
+
+#: ../src/live_effects/lpe-patternalongpath.cpp:52
 #: ../share/extensions/pathalongpath.inx.h:11
 msgid "Single"
-msgstr ""
+msgstr "יחיד"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:54
+#: ../src/live_effects/lpe-patternalongpath.cpp:53
 #: ../share/extensions/pathalongpath.inx.h:12
 msgid "Single, stretched"
-msgstr ""
+msgstr "יחיד, מתוח"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:55
+#: ../src/live_effects/lpe-patternalongpath.cpp:54
 #: ../share/extensions/pathalongpath.inx.h:8
 msgid "Repeated"
-msgstr ""
+msgstr "חוזר ונשנה"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:56
+#: ../src/live_effects/lpe-patternalongpath.cpp:55
 #: ../share/extensions/pathalongpath.inx.h:9
 msgid "Repeated, stretched"
-msgstr ""
+msgstr "חוזר ונשנה, מתוח"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:62
+#: ../src/live_effects/lpe-patternalongpath.cpp:61
 msgid "Pattern source"
-msgstr ""
+msgstr "מקור התבנית"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:62
+#: ../src/live_effects/lpe-patternalongpath.cpp:61
 msgid "Path to put along the skeleton path"
-msgstr ""
+msgstr "נתיב להצבה לאורך נתיב השלד"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:63
+#: ../src/live_effects/lpe-patternalongpath.cpp:62
 msgid "Pattern copies"
-msgstr ""
+msgstr "עותקי תבנית"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:63
+#: ../src/live_effects/lpe-patternalongpath.cpp:62
 msgid "How many pattern copies to place along the skeleton path"
-msgstr ""
+msgstr "כמה עותקים מהתבנית יש להציב לאורך נתיב השלד"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:64
+#: ../src/live_effects/lpe-patternalongpath.cpp:63
 msgid "Width of the pattern"
-msgstr ""
+msgstr "רוחב התבנית"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:65
+#: ../src/live_effects/lpe-patternalongpath.cpp:64
 msgid "Scale the width of the pattern in units of its length"
-msgstr ""
+msgstr "שנה את רוחב התבנית ביחידות של אורכו"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:66
+#: ../src/live_effects/lpe-patternalongpath.cpp:65
 msgid "Spacing"
 msgstr "ריווח"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:66
+#: ../src/live_effects/lpe-patternalongpath.cpp:65
 #, c-format
-msgid ""
-"Space between copies of the pattern. Negative values allowed, but are "
-"limited to -90% of pattern width."
+msgid "Space between copies of the pattern. Negative values allowed, but are limited to -90% of pattern width."
 msgstr ""
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:67
+#: ../src/live_effects/lpe-patternalongpath.cpp:66
 #: ../share/extensions/pathalongpath.inx.h:5
 #: ../share/extensions/pathscatter.inx.h:7
 msgid "Normal offset"
-msgstr "×\94×\99ס×\98 רגיל"
+msgstr "ק×\99×\96×\95×\96 רגיל"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:68
+#: ../src/live_effects/lpe-patternalongpath.cpp:67
 #: ../share/extensions/pathalongpath.inx.h:15
 #: ../share/extensions/pathscatter.inx.h:13
 msgid "Tangential offset"
-msgstr "×\94×\99ס×\98 משיק"
+msgstr "ק×\99×\96×\95×\96 משיק"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:69
+#: ../src/live_effects/lpe-patternalongpath.cpp:68
 msgid "Offsets in unit of pattern size"
-msgstr ""
+msgstr "קיזוזים ביחידת גודל התבנית"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:69
-msgid ""
-"Spacing, tangential and normal offset are expressed as a ratio of width/"
-"height"
-msgstr ""
+#: ../src/live_effects/lpe-patternalongpath.cpp:68
+msgid "Spacing, tangential and normal offset are expressed as a ratio of width/height"
+msgstr "קיזוזי ריווח, משיקיים ורגילים מבוטאים כיחס רוחב/גובה"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:70
+#: ../src/live_effects/lpe-patternalongpath.cpp:69
 #: ../share/extensions/pathalongpath.inx.h:7
 #: ../share/extensions/pathscatter.inx.h:9
 msgid "Pattern is vertical"
-msgstr ""
+msgstr "התבנית אנכית"
 
-#: ../src/live_effects/lpe-patternalongpath.cpp:70
+#: ../src/live_effects/lpe-patternalongpath.cpp:69
 msgid "Rotate pattern 90 deg before applying"
-msgstr ""
-
-#: ../src/live_effects/lpe-perp_bisector.cpp:156
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:65
-#, fuzzy
-msgid "Length left"
-msgstr "אורך:"
+msgstr "סובב את התבנית ב־90 מעלות לפני ההחלה"
 
-#: ../src/live_effects/lpe-perp_bisector.cpp:156
-msgid "Specifies the left end of the bisector"
-msgstr ""
-
-#: ../src/live_effects/lpe-perp_bisector.cpp:157
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:66
-#, fuzzy
-msgid "Length right"
-msgstr "אורך:"
-
-#: ../src/live_effects/lpe-perp_bisector.cpp:157
-msgid "Specifies the right end of the bisector"
-msgstr ""
-
-#: ../src/live_effects/lpe-perp_bisector.cpp:164
-msgid "Lala"
-msgstr ""
+#: ../src/live_effects/lpe-perp_bisector.cpp:113
+msgid "Adjust the bisector's \"left\" end"
+msgstr "הגדר את הסוף \"השמאלי\" של המחבר"
 
-#: ../src/live_effects/lpe-perp_bisector.cpp:165
-msgid "Lolo"
-msgstr ""
+#: ../src/live_effects/lpe-perp_bisector.cpp:114
+msgid "Adjust the bisector's \"right\" end"
+msgstr "הגדר את הסוף \"הימני\" של המחבר"
 
 #. initialise your parameters here:
-#: ../src/live_effects/lpe-perspective_path.cpp:42
-#, fuzzy
+#: ../src/live_effects/lpe-perspective_path.cpp:52
 msgid "Scale x"
-msgstr "צ×\95ר×\95ת"
+msgstr "×\94ת×\90×\9eת ×\9e×\99×\93×\95ת x"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:42
+#: ../src/live_effects/lpe-perspective_path.cpp:52
 msgid "Scale factor in x direction"
-msgstr ""
+msgstr "מקדם שינוי הגודל בכיוון ה־x"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:43
-#, fuzzy
+#: ../src/live_effects/lpe-perspective_path.cpp:53
 msgid "Scale y"
-msgstr "צ×\95ר×\95ת"
+msgstr "×\94ת×\90×\9eת ×\9e×\99×\93×\95ת y"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:43
+#: ../src/live_effects/lpe-perspective_path.cpp:53
 msgid "Scale factor in y direction"
-msgstr ""
+msgstr "מקדם שינוי הגודל בכיוון ה־y"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:44
-#, fuzzy
+#: ../src/live_effects/lpe-perspective_path.cpp:54
 msgid "Offset x"
-msgstr "×\94×\99ס×\98"
+msgstr "ק×\99×\96×\95×\96 x"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:44
+#: ../src/live_effects/lpe-perspective_path.cpp:54
 msgid "Offset in x direction"
-msgstr ""
+msgstr "הקיזוז בכיוון ה־X"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:45
-#, fuzzy
+#: ../src/live_effects/lpe-perspective_path.cpp:55
 msgid "Offset y"
-msgstr "×\94×\99ס×\98"
+msgstr "ק×\99×\96×\95×\96 y"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:45
+#: ../src/live_effects/lpe-perspective_path.cpp:55
 msgid "Offset in y direction"
-msgstr ""
+msgstr "הקיזוז בכיוון ה־X"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:46
+#: ../src/live_effects/lpe-perspective_path.cpp:56
 msgid "Uses XY plane?"
-msgstr ""
+msgstr "להשתמש במשטח XY?"
 
-#: ../src/live_effects/lpe-perspective_path.cpp:46
-msgid ""
-"If true, put the path on the left side of an imaginary box, otherwise on the "
-"right side"
-msgstr ""
+#: ../src/live_effects/lpe-perspective_path.cpp:56
+msgid "If true, put the path on the left side of an imaginary box, otherwise on the right side"
+msgstr "במידה ונכון, שים את הנתיב על הצד השמאלי של תיבה דמיונית, אחרת בצד הימני"
+
+#: ../src/live_effects/lpe-perspective_path.cpp:65
+msgid "Adjust the origin"
+msgstr "הגדר את המקור"
+
+#: ../src/live_effects/lpe-ruler.cpp:27
+#: ../share/extensions/restack.inx.h:7
+msgid "Left"
+msgstr "שמאל"
+
+#: ../src/live_effects/lpe-ruler.cpp:28
+#: ../share/extensions/restack.inx.h:14
+msgid "Right"
+msgstr "ימין"
+
+#: ../src/live_effects/lpe-ruler.cpp:29
+#: ../src/live_effects/lpe-ruler.cpp:37
+msgid "Both"
+msgstr "שניהם"
+
+#: ../src/live_effects/lpe-ruler.cpp:35
+#: ../src/widgets/toolbox.cpp:4704
+msgid "Start"
+msgstr "התחלה"
+
+#: ../src/live_effects/lpe-ruler.cpp:36
+#: ../src/widgets/toolbox.cpp:4717
+msgid "End"
+msgstr "סוף"
+
+#: ../src/live_effects/lpe-ruler.cpp:43
+msgid "Mark distance"
+msgstr "המרחק המסומן"
+
+#: ../src/live_effects/lpe-ruler.cpp:43
+msgid "Distance between successive ruler marks"
+msgstr "מרחק בין שני סמני סרגל בהמשכים"
+
+#: ../src/live_effects/lpe-ruler.cpp:44
+msgid "Major length"
+msgstr "אורך עיקרי"
+
+#: ../src/live_effects/lpe-ruler.cpp:44
+msgid "Length of major ruler marks"
+msgstr "המרחק בין הסימנים הראשיים של הסרגל"
+
+#: ../src/live_effects/lpe-ruler.cpp:45
+msgid "Minor length"
+msgstr "אורך משני"
+
+#: ../src/live_effects/lpe-ruler.cpp:45
+msgid "Length of minor ruler marks"
+msgstr "המרחק בין הסימנים המשניים של הסרגל"
+
+#: ../src/live_effects/lpe-ruler.cpp:46
+msgid "Major steps"
+msgstr "צעדים ראשיים"
+
+#: ../src/live_effects/lpe-ruler.cpp:46
+msgid "Draw a major mark every ... steps"
+msgstr "צייר סימן ראשי כל ... צעדים"
+
+#: ../src/live_effects/lpe-ruler.cpp:47
+msgid "Shift marks by"
+msgstr "הזז את הסימנים ב־"
+
+#: ../src/live_effects/lpe-ruler.cpp:47
+msgid "Shift marks by this many steps"
+msgstr "הזז את הסימנים בכמות צעדים זאת"
+
+#: ../src/live_effects/lpe-ruler.cpp:48
+msgid "Mark direction"
+msgstr "כיוון הסימן"
+
+#: ../src/live_effects/lpe-ruler.cpp:48
+msgid "Direction of marks (when viewing along the path from start to end)"
+msgstr "כיוון הסמנים (בעת הצפיה לאורך הנתיב מההתחלה ועד הסוף)"
+
+#: ../src/live_effects/lpe-ruler.cpp:49
+msgid "Offset of first mark"
+msgstr "קיזוז הסמן הראשון"
+
+#: ../src/live_effects/lpe-ruler.cpp:50
+msgid "Border marks"
+msgstr "סימני הגבול"
+
+#: ../src/live_effects/lpe-ruler.cpp:50
+msgid "Choose whether to draw marks at the beginning and end of the path"
+msgstr "בחר האם לצייר סמנים בתחילת ובסוף הנתיב"
 
 #. initialise your parameters here:
 #: ../src/live_effects/lpe-skeleton.cpp:33
 msgid "Float parameter"
-msgstr ""
+msgstr "פרמטר ציפה"
 
 #: ../src/live_effects/lpe-skeleton.cpp:33
 msgid "just a real number like 1.4!"
-msgstr ""
+msgstr "פשוט מספרים אמיתיים כמו 1.4!"
 
 #. initialise your parameters here:
 #. testpointA(_("Test Point A"), _("Test A"), "ptA", &wr, this, Geom::Point(100,100)),
 #: ../src/live_effects/lpe-sketch.cpp:35
-#, fuzzy
 msgid "Strokes"
-msgstr "ש×\9c×\91×\99×\9d"
+msgstr "ק×\95×\99 ×\9eת×\90ר"
 
 #: ../src/live_effects/lpe-sketch.cpp:35
 msgid "Draw that many approximating strokes"
-msgstr ""
+msgstr "צייר כמות זו של קוי מתאר משוערכים"
 
 #: ../src/live_effects/lpe-sketch.cpp:36
 msgid "Max stroke length"
-msgstr ""
+msgstr "גודל המתאר המרבי"
 
 #: ../src/live_effects/lpe-sketch.cpp:37
 msgid "Maximum length of approximating strokes"
-msgstr ""
+msgstr "אורך קוי המתאר המוערכים המרבי"
 
 #: ../src/live_effects/lpe-sketch.cpp:38
 msgid "Stroke length variation"
-msgstr ""
+msgstr "שינוי באורך קו המתאר"
 
 #: ../src/live_effects/lpe-sketch.cpp:39
 msgid "Random variation of stroke length (relative to maximum length)"
-msgstr ""
+msgstr "שינוי אקראי של אורך קו המתאר (ביחס לאורך המרבי)"
 
 #: ../src/live_effects/lpe-sketch.cpp:40
 msgid "Max. overlap"
-msgstr ""
+msgstr "חפיפה מרבית"
 
 #: ../src/live_effects/lpe-sketch.cpp:41
-msgid ""
-"How much successive strokes should overlap (relative to maximum length)."
-msgstr ""
+msgid "How much successive strokes should overlap (relative to maximum length)"
+msgstr "כמה קוי מתאר רציפים אמורים לחפוף (ביחס לאורך המרבי)"
 
 #: ../src/live_effects/lpe-sketch.cpp:42
 msgid "Overlap variation"
-msgstr ""
+msgstr "שינוי החפיפה"
 
 #: ../src/live_effects/lpe-sketch.cpp:43
 msgid "Random variation of overlap (relative to maximum overlap)"
-msgstr ""
+msgstr "שינוי אקראי של החפיפה (ביחס לחפיפה המרבית)"
 
 #: ../src/live_effects/lpe-sketch.cpp:44
 msgid "Max. end tolerance"
-msgstr ""
+msgstr "סבילות סוף מרבית"
 
 #: ../src/live_effects/lpe-sketch.cpp:45
-msgid ""
-"Maximum distance between ends of original and approximating paths (relative "
-"to maximum length)"
-msgstr ""
+msgid "Maximum distance between ends of original and approximating paths (relative to maximum length)"
+msgstr "המרחק המרבי בין סופי הנתיבים הרגיל והמשוערך (ביחס לאורך המרבי)"
 
 #: ../src/live_effects/lpe-sketch.cpp:46
-#, fuzzy
 msgid "Parallel offset"
-msgstr "×\94×\99ס×\98 ×¨×\92×\99×\9c"
+msgstr "ק×\99×\96×\95×\96 ×\9eק×\91×\99×\9c×\99"
 
 #: ../src/live_effects/lpe-sketch.cpp:47
 msgid "Average distance from approximating path to original path"
-msgstr ""
+msgstr "המרחק הממוצע בין הנתיב המשוערך לנתיב המקורי"
 
 #: ../src/live_effects/lpe-sketch.cpp:48
 msgid "Max. tremble"
-msgstr ""
+msgstr "רטט מרבי"
 
 #: ../src/live_effects/lpe-sketch.cpp:49
 msgid "Maximum tremble magnitude"
-msgstr ""
+msgstr "משיכת הרטט המרבית"
 
 #: ../src/live_effects/lpe-sketch.cpp:50
 msgid "Tremble frequency"
-msgstr ""
+msgstr "תדירות הרטט"
 
 #: ../src/live_effects/lpe-sketch.cpp:51
-msgid "Avreage number of tremble periods in an approximating stroke"
-msgstr ""
+msgid "Average number of tremble periods in an approximating stroke"
+msgstr "המספר הממוצע של נקודות רטט בקו מתאר משוערך"
 
 #: ../src/live_effects/lpe-sketch.cpp:52
 msgid "Construction lines"
-msgstr ""
+msgstr "קווי בניה"
 
 #: ../src/live_effects/lpe-sketch.cpp:53
 msgid "How many construction lines (tangents) to draw"
-msgstr ""
-
-#: ../src/live_effects/lpe-sketch.cpp:54 ../src/selection-chemistry.cpp:1450
-#: ../src/seltrans.cpp:454 ../src/ui/dialog/filter-effects-dialog.cpp:2235
-#: ../src/ui/dialog/transformation.cpp:736
-msgid "Scale"
-msgstr ""
+msgstr "כמה קווי בנייה (משיקים) לצייר"
 
 #: ../src/live_effects/lpe-sketch.cpp:55
-msgid ""
-"Scale factor relating curvature and length of construction lines (try "
-"5*offset)"
-msgstr ""
+msgid "Scale factor relating curvature and length of construction lines (try 5*offset)"
+msgstr "מקדם שינוי גודל ביחס לעקמומית ואורך קווי הבנייה (נסה 5*קיזוז)"
 
 #: ../src/live_effects/lpe-sketch.cpp:56
-#, fuzzy
 msgid "Max. length"
-msgstr "×\90×\95ר×\9a ×\92×\9c"
+msgstr "×\94×\90×\95ר×\9a ×\94×\9eר×\91×\99"
 
 #: ../src/live_effects/lpe-sketch.cpp:56
 msgid "Maximum length of construction lines"
-msgstr ""
+msgstr "האורך המרבי של קווי הבנייה"
 
 #: ../src/live_effects/lpe-sketch.cpp:57
-#, fuzzy
 msgid "Length variation"
-msgstr "ק×\91×\9c ×\94×\96×\9e× ×\94"
+msgstr "ש×\99× ×\95×\99 ×\94×\90×\95ר×\9a"
 
 #: ../src/live_effects/lpe-sketch.cpp:57
 msgid "Random variation of the length of construction lines"
-msgstr ""
+msgstr "שינוי אקראי באורך קווי הבנייה"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:63
-#: ../share/extensions/motion.inx.h:1 ../share/extensions/restack.inx.h:1
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:56
+#: ../share/extensions/motion.inx.h:1
+#: ../share/extensions/restack.inx.h:1
 msgid "Angle"
-msgstr ""
+msgstr "זווית"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:63
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:56
 msgid "Additional angle between tangent and curve"
-msgstr ""
+msgstr "זווית נוספת בין משיק ועיקול"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:64
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:57
 msgid "Location along curve"
-msgstr ""
+msgstr "מיקום לאורך העיקול"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:64
-msgid ""
-"Location of the point of attachment along the curve (between 0.0 and number-"
-"of-segments)"
-msgstr ""
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:57
+msgid "Location of the point of attachment along the curve (between 0.0 and number-of-segments)"
+msgstr "מיקום נקודת ההצמדה לאורך העיקול (בין 0.0 ומספר־המקטעים)"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:65
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:58
 msgid "Specifies the left end of the tangent"
-msgstr ""
+msgstr "מציין את הצד השמאלי של המשיק"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:66
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:59
 msgid "Specifies the right end of the tangent"
-msgstr ""
+msgstr "מציין את הצד הימני של המשיק"
+
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:68
+msgid "Adjust the point of attachment of the tangent"
+msgstr "הגדר את נקודת ההצמדה של המשיק"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:73
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:69
 msgid "Adjust the \"left\" end of the tangent"
-msgstr ""
+msgstr "התאם את הסוף \"השמאלי\" של המשיק"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:74
+#: ../src/live_effects/lpe-tangent_to_curve.cpp:70
 msgid "Adjust the \"right\" end of the tangent"
-msgstr ""
+msgstr "הגדר את הצד \"הימני\" של המשיק"
 
-#: ../src/live_effects/lpe-tangent_to_curve.cpp:75
-msgid "Adjust the point of attachment of the tangent"
-msgstr ""
+#: ../src/live_effects/lpe-test-doEffect-stack.cpp:22
+msgid "Stack step"
+msgstr "ערימת פסיעות"
 
 #: ../src/live_effects/lpe-test-doEffect-stack.cpp:23
-msgid "Stack step"
-msgstr ""
+msgid "point param"
+msgstr "משתנה נקודה"
 
 #: ../src/live_effects/lpe-test-doEffect-stack.cpp:24
-msgid "point param"
-msgstr ""
+msgid "path param"
+msgstr "משתנה נתיב"
 
-#: ../src/live_effects/lpe-vonkoch.cpp:42
-msgid "Bounding box"
-msgstr ""
+#: ../src/live_effects/lpe-text_label.cpp:22
+msgid "Label"
+msgstr "תווית"
 
-#: ../src/live_effects/lpe-vonkoch.cpp:43
-msgid "Last gen. segment"
-msgstr ""
+#: ../src/live_effects/lpe-text_label.cpp:22
+msgid "Text label attached to the path"
+msgstr "תווית טקסט המוצמדת לנתיב"
 
-#: ../src/live_effects/lpe-vonkoch.cpp:49
-msgid "Nb of generations"
-msgstr ""
+#: ../src/live_effects/lpe-vonkoch.cpp:47
+msgid "Reference segment"
+msgstr "מקטע הפניה"
 
-#: ../src/live_effects/lpe-vonkoch.cpp:49
-msgid "Depth of the recursion --- keep low!!"
-msgstr ""
+#: ../src/live_effects/lpe-vonkoch.cpp:47
+msgid "The reference segment. Defaults to bbox diameter."
+msgstr "מקטע ההפנייה. ברירות המחדל לקוטר bbox."
 
+#. refA(_("Ref Start"), _("Left side middle of the reference box"), "refA", &wr, this),
+#. refB(_("Ref End"), _("Right side middle of the reference box"), "refB", &wr, this),
 #: ../src/live_effects/lpe-vonkoch.cpp:50
 msgid "Generating path"
-msgstr ""
+msgstr "מייצר נתיב"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:50
-msgid "Path whos segments define the fractal"
-msgstr ""
+msgid "Path whose segments define the iterated transforms"
+msgstr "נתיב שמקטעיו מגדירים את ההמרות החוזרות"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:51
-msgid "Draw all generations"
-msgstr ""
+msgid "Use uniform transforms only"
+msgstr "השתמש בהמרות אחידות בלבד"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:51
-msgid "If unchecked, draw only the last generation"
-msgstr ""
+msgid "2 consecutive segments are used to reverse/preserve orientation only (otherwise, they define a general transform)."
+msgstr "2 מקטעים רציפים משמשים להפיכת/שימור הכיוון בלבד (אחרת, הם מגדירים המרה כללית)."
 
 #: ../src/live_effects/lpe-vonkoch.cpp:52
-msgid "Reference"
-msgstr ""
+msgid "Nb of generations"
+msgstr "מספר יצירות"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:52
-msgid ""
-"Generating path segments define transforms in reference to bbox or last "
-"segment"
-msgstr ""
+msgid "Depth of the recursion --- keep low!!"
+msgstr "עומק החזרה --- השאר נמוך!!"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:53
-msgid "Max complexity"
-msgstr ""
+msgid "Draw all generations"
+msgstr "צייר את כל התוצרים"
 
 #: ../src/live_effects/lpe-vonkoch.cpp:53
+msgid "If unchecked, draw only the last generation"
+msgstr "במידה ולא מסומן, יצוייר רק התוצר האחרון"
+
+#. FIXME: a path is used here instead of 2 points to work around path/point param incompatibility bug.
+#: ../src/live_effects/lpe-vonkoch.cpp:55
+msgid "Max complexity"
+msgstr "מורכבות מרבית"
+
+#: ../src/live_effects/lpe-vonkoch.cpp:55
 msgid "Disable effect if the output is too complex"
-msgstr ""
+msgstr "בטל את האפקט אם הפלט מורכב מדי"
 
 #: ../src/live_effects/parameter/bool.cpp:69
 msgid "Change bool parameter"
-msgstr ""
+msgstr "שנה את הפרמטר הבוליאני"
 
-#: ../src/live_effects/parameter/enum.h:51
+#: ../src/live_effects/parameter/enum.h:50
 msgid "Change enumeration parameter"
-msgstr ""
+msgstr "שנה את פרמטר הספירה"
 
 #: ../src/live_effects/parameter/parameter.cpp:138
 msgid "Change scalar parameter"
-msgstr ""
+msgstr "שנה את פרמטר שינוי הגודל"
 
-#: ../src/live_effects/parameter/path.cpp:157
-#: ../src/live_effects/parameter/point.cpp:110
+#: ../src/live_effects/parameter/path.cpp:158
 msgid "Edit on-canvas"
-msgstr ""
+msgstr "ערוך על לוח הציור"
 
-#: ../src/live_effects/parameter/path.cpp:167
+#: ../src/live_effects/parameter/path.cpp:168
 msgid "Copy path"
-msgstr ""
+msgstr "העתק נתיב"
 
-#: ../src/live_effects/parameter/path.cpp:177
+#: ../src/live_effects/parameter/path.cpp:178
 msgid "Paste path"
-msgstr ""
+msgstr "הדבק נתיב"
 
-#: ../src/live_effects/parameter/path.cpp:187
+#: ../src/live_effects/parameter/path.cpp:188
 msgid "Link to path"
-msgstr ""
+msgstr "קשר לנתיב"
 
-#: ../src/live_effects/parameter/path.cpp:363
+#: ../src/live_effects/parameter/path.cpp:409
 msgid "Paste path parameter"
-msgstr ""
+msgstr "הדבק את הפרמטרים של הנתיב"
 
-#: ../src/live_effects/parameter/path.cpp:395
+#: ../src/live_effects/parameter/path.cpp:441
 msgid "Link path parameter to path"
-msgstr ""
+msgstr "קשר את פרמטר הנתיב לנתיב"
 
-#: ../src/live_effects/parameter/point.cpp:95
+#: ../src/live_effects/parameter/point.cpp:91
 msgid "Change point parameter"
-msgstr ""
+msgstr "שנה את פרמטר הנקודה"
 
 #: ../src/live_effects/parameter/pointparam-knotholder.cpp:134
 msgid "Change LPE point parameter"
-msgstr ""
+msgstr "שנה את פרמטר נקודת אפקט הנתיב החי"
 
 #: ../src/live_effects/parameter/random.cpp:137
 msgid "Change random parameter"
-msgstr ""
+msgstr "שנה פרמטר אקראי"
+
+#: ../src/live_effects/parameter/text.cpp:100
+msgid "Change text parameter"
+msgstr "שנה את פרמטר הטקסט"
+
+#: ../src/live_effects/parameter/unit.cpp:77
+msgid "Change unit parameter"
+msgstr "שנה את פרמטר היחידה"
+
+#: ../src/lpe-tool-context.cpp:271
+msgid "Choose a construction tool from the toolbar."
+msgstr "בחר כלי בנייה מסרגל הכלים."
 
 #: ../src/main-cmdlineact.cpp:49
 #, c-format
 msgid "Unable to find verb ID '%s' specified on the command line.\n"
-msgstr ""
+msgstr "לא ניתן למצוא את מזהה הפועל המצויין '%s' בשורת הפקודה.\n"
 
 #: ../src/main-cmdlineact.cpp:61
 #, c-format
 msgid "Unable to find node ID: '%s'\n"
-msgstr ""
+msgstr "לא ניתן למצוא את מזהה המפרק: '%s'\n"
 
-#: ../src/main.cpp:218
+#: ../src/main.cpp:257
 msgid "Print the Inkscape version number"
-msgstr ""
+msgstr "הדפס את גירסת האינקסקייפ"
 
-#: ../src/main.cpp:223
+#: ../src/main.cpp:262
 msgid "Do not use X server (only process files from console)"
-msgstr ""
+msgstr "אל תשתמש בשרת X (עבד קבצים מהמסוף בלבד)"
 
-#: ../src/main.cpp:228
+#: ../src/main.cpp:267
 msgid "Try to use X server (even if $DISPLAY is not set)"
-msgstr ""
+msgstr "נסה להשתמש בשרת ה־X (אפילו אם DISPLAY אינו מוגדר)"
 
-#: ../src/main.cpp:233
+#: ../src/main.cpp:272
 msgid "Open specified document(s) (option string may be excluded)"
-msgstr ""
+msgstr "פתח את המסמך/ים שצויין/ו (ניתן לוותר על מחרוזת אפשרויות)"
 
-#: ../src/main.cpp:234 ../src/main.cpp:239 ../src/main.cpp:244
-#: ../src/main.cpp:311 ../src/main.cpp:316 ../src/main.cpp:321
-#: ../src/main.cpp:326 ../src/main.cpp:332
+#: ../src/main.cpp:273
+#: ../src/main.cpp:278
+#: ../src/main.cpp:283
+#: ../src/main.cpp:350
+#: ../src/main.cpp:355
+#: ../src/main.cpp:360
+#: ../src/main.cpp:365
+#: ../src/main.cpp:371
 msgid "FILENAME"
-msgstr ""
+msgstr "שם הקובץ"
 
-#: ../src/main.cpp:238
+#: ../src/main.cpp:277
 msgid "Print document(s) to specified output file (use '| program' for pipe)"
-msgstr ""
+msgstr "הדפס מסמך/ים לקובץ פלט מוגדר (השתמש ב־'| program' לצורך ניתוב)"
 
-#: ../src/main.cpp:243
+#: ../src/main.cpp:282
 msgid "Export document to a PNG file"
-msgstr ""
+msgstr "ייצא את המסמך לקובץ PNG"
 
-#: ../src/main.cpp:248
+#: ../src/main.cpp:287
 msgid "The resolution used for exporting SVG into bitmap (default 90)"
-msgstr ""
+msgstr "הרזולוציה שתשמש את קובץ מפת הסיביות שייוצא מה־SVG (ברירת מחדל  90)"
 
-#: ../src/main.cpp:249 ../src/ui/widget/rendering-options.cpp:43
+#: ../src/main.cpp:288
+#: ../src/ui/widget/rendering-options.cpp:43
 msgid "DPI"
-msgstr ""
+msgstr "DPI"
 
-#: ../src/main.cpp:253
-msgid ""
-"Exported area in SVG user units (default is the canvas; 0,0 is lower-left "
-"corner)"
-msgstr ""
+#: ../src/main.cpp:292
+msgid "Exported area in SVG user units (default is the canvas; 0,0 is lower-left corner)"
+msgstr "האזור המיוצא ביחידות משתמש SVG (ברירת המחדל היא לוח הציור; 0,0 היא הפינה השמאלית התחתונה)"
 
-#: ../src/main.cpp:254
+#: ../src/main.cpp:293
 msgid "x0:y0:x1:y1"
-msgstr ""
+msgstr "x0:y0:x1:y1"
 
-#: ../src/main.cpp:258
+#: ../src/main.cpp:297
 msgid "Exported area is the entire drawing (not canvas)"
-msgstr ""
+msgstr "האזור המיוצא הוא הציור כולו (לא לוח הציור)"
 
-#: ../src/main.cpp:263
+#: ../src/main.cpp:302
 msgid "Exported area is the entire canvas"
-msgstr ""
+msgstr "השטח המיוצא הינו לוח הציור כולו"
 
-#: ../src/main.cpp:268
-msgid ""
-"Snap the bitmap export area outwards to the nearest integer values (in SVG "
-"user units)"
-msgstr ""
+#: ../src/main.cpp:307
+msgid "Snap the bitmap export area outwards to the nearest integer values (in SVG user units)"
+msgstr "הצמד את שטח יצוא מפת הסיביות כלפי חוץ לכיוון ערכים מספריים עגולים (ביחידות משתמש SVG)"
 
-#: ../src/main.cpp:273
+#: ../src/main.cpp:312
 msgid "The width of exported bitmap in pixels (overrides export-dpi)"
-msgstr ""
+msgstr "רוחב מפת הסיביות המיוצאת בפיקסלים (דורס את -export-dpi)"
 
-#: ../src/main.cpp:274
+#: ../src/main.cpp:313
 msgid "WIDTH"
-msgstr ""
+msgstr "רוחב"
 
-#: ../src/main.cpp:278
+#: ../src/main.cpp:317
 msgid "The height of exported bitmap in pixels (overrides export-dpi)"
-msgstr ""
+msgstr "גובה מפת הסיביות המיוצאת בפיקסלים (דורס את dpi-ליצוא)"
 
-#: ../src/main.cpp:279
+#: ../src/main.cpp:318
 msgid "HEIGHT"
-msgstr ""
+msgstr "גובה"
 
-#: ../src/main.cpp:283
+#: ../src/main.cpp:322
 msgid "The ID of the object to export"
-msgstr ""
+msgstr "מזהה הפריט לייצוא"
 
-#: ../src/main.cpp:284 ../src/main.cpp:382
+#: ../src/main.cpp:323
+#: ../src/main.cpp:411
 msgid "ID"
-msgstr ""
+msgstr "מזהה"
 
 #. TRANSLATORS: this means: "Only export the object whose id is given in --export-id".
 #. See "man inkscape" for details.
-#: ../src/main.cpp:290
-msgid ""
-"Export just the object with export-id, hide all others (only with export-id)"
-msgstr ""
+#: ../src/main.cpp:329
+msgid "Export just the object with export-id, hide all others (only with export-id)"
+msgstr "ייצא רק את הפריט עם מזהה-ייצוא, הסתר את כל השאר (רק עם export-id)"
 
-#: ../src/main.cpp:295
+#: ../src/main.cpp:334
 msgid "Use stored filename and DPI hints when exporting (only with export-id)"
-msgstr ""
+msgstr "השתמש בשם הקובץ המאוחסן וברמיזות DPI בזמן הייצוא (רק עם export-id)"
 
-#: ../src/main.cpp:300
+#: ../src/main.cpp:339
 msgid "Background color of exported bitmap (any SVG-supported color string)"
-msgstr ""
+msgstr "צבע הרקע של מפת הסיביות המיוצאת (כל מחרוזת צבע הנתמכת על ידי SVG)"
 
-#: ../src/main.cpp:301
+#: ../src/main.cpp:340
 msgid "COLOR"
-msgstr ""
+msgstr "צבע"
 
-#: ../src/main.cpp:305
+#: ../src/main.cpp:344
 msgid "Background opacity of exported bitmap (either 0.0 to 1.0, or 1 to 255)"
-msgstr ""
+msgstr "אטימות הרקע של מפת הסיביות המיוצאת (יכול להיות בין 0.0 ל־1.0, או 1 עד 255)"
 
-#: ../src/main.cpp:306
+#: ../src/main.cpp:345
 msgid "VALUE"
-msgstr ""
+msgstr "ערך"
 
-#: ../src/main.cpp:310
+#: ../src/main.cpp:349
 msgid "Export document to plain SVG file (no sodipodi or inkscape namespaces)"
-msgstr ""
+msgstr "ייצא את המסמך לקובץ SVG פשוט (ללא תוספות כלי  sodipodi או אינקסקייפ)"
 
-#: ../src/main.cpp:315
+#: ../src/main.cpp:354
 msgid "Export document to a PS file"
-msgstr ""
+msgstr "ייצא מסמך לקובץ PS"
 
-#: ../src/main.cpp:320
+#: ../src/main.cpp:359
 msgid "Export document to an EPS file"
-msgstr ""
+msgstr "ייצא מסמך לקובץ EPS"
 
-#: ../src/main.cpp:325
+#: ../src/main.cpp:364
 msgid "Export document to a PDF file"
-msgstr ""
+msgstr "ייצא מסמך לקובץ PDF"
 
-#: ../src/main.cpp:331
+#: ../src/main.cpp:370
 msgid "Export document to an Enhanced Metafile (EMF) File"
-msgstr ""
+msgstr "ייצא את המסמך לקובץ מטא מורחב (EMF)"
 
-#: ../src/main.cpp:337
+#: ../src/main.cpp:376
 msgid "Convert text object to paths on export (EPS)"
-msgstr ""
-
-#: ../src/main.cpp:342
-msgid "Embed fonts on export (Type 1 only) (EPS)"
-msgstr ""
-
-#: ../src/main.cpp:347
-msgid "Export files with the bounding box set to the page size (EPS)"
-msgstr ""
+msgstr "המר את פריט הטקסט לנתיבים בזמן הייצוא (EPS)"
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
-#: ../src/main.cpp:353
-msgid ""
-"Query the X coordinate of the drawing or, if specified, of the object with --"
-"query-id"
-msgstr ""
+#: ../src/main.cpp:382
+msgid "Query the X coordinate of the drawing or, if specified, of the object with --query-id"
+msgstr "תשאל את נקודת ציון ה־X של הציור או, אם צויין, מהפריט עם --query-id"
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
-#: ../src/main.cpp:359
-msgid ""
-"Query the Y coordinate of the drawing or, if specified, of the object with --"
-"query-id"
-msgstr ""
+#: ../src/main.cpp:388
+msgid "Query the Y coordinate of the drawing or, if specified, of the object with --query-id"
+msgstr "תשאל את נקודת ציון ה־Y של הציור או, אם צויין, מהפריט עם --query-id"
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
-#: ../src/main.cpp:365
-msgid ""
-"Query the width of the drawing or, if specified, of the object with --query-"
-"id"
-msgstr ""
+#: ../src/main.cpp:394
+msgid "Query the width of the drawing or, if specified, of the object with --query-id"
+msgstr "תשאל את רוחב הציור או, אם צויין, מהפריט עם --query-id"
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
-#: ../src/main.cpp:371
-msgid ""
-"Query the height of the drawing or, if specified, of the object with --query-"
-"id"
-msgstr ""
+#: ../src/main.cpp:400
+msgid "Query the height of the drawing or, if specified, of the object with --query-id"
+msgstr "תשאל את רוחב הציור או, אם צויין, מהפריט עם --query-id"
 
-#: ../src/main.cpp:376
+#: ../src/main.cpp:405
 msgid "List id,x,y,w,h for all objects"
-msgstr ""
+msgstr "פרט מזהה,x,y,רוחב,גובה עבור כל הפריטים"
 
-#: ../src/main.cpp:381
+#: ../src/main.cpp:410
 msgid "The ID of the object whose dimensions are queried"
-msgstr ""
+msgstr "מזהה הפריט שמידותיו מתושאלות"
 
 #. TRANSLATORS: this option makes Inkscape print the name (path) of the extension directory
-#: ../src/main.cpp:387
+#: ../src/main.cpp:416
 msgid "Print out the extension directory and exit"
-msgstr ""
+msgstr "הדפס את תיקיית ההרחבה וצא"
 
-#: ../src/main.cpp:392
+#: ../src/main.cpp:421
 msgid "Remove unused definitions from the defs section(s) of the document"
-msgstr ""
+msgstr "הסר הגדרות שאינן בשימוש ממחלקת/ות ההגדרה של המסמך"
 
-#: ../src/main.cpp:397
+#: ../src/main.cpp:426
 msgid "List the IDs of all the verbs in Inkscape"
-msgstr ""
+msgstr "פרט את המזהים של כל הפעלים באינקסקייפ"
 
-#: ../src/main.cpp:402
+#: ../src/main.cpp:431
 msgid "Verb to call when Inkscape opens."
-msgstr ""
+msgstr "פועל לקריאה כאשר אינקסקייפ נפתחת."
 
-#: ../src/main.cpp:403
+#: ../src/main.cpp:432
 msgid "VERB-ID"
-msgstr ""
+msgstr "מזהה־פועל"
 
-#: ../src/main.cpp:407
+#: ../src/main.cpp:436
 msgid "Object ID to select when Inkscape opens."
-msgstr ""
+msgstr "מזהה פריט לבחירה כאשר אינקסקייפ נפתחת."
 
-#: ../src/main.cpp:408
+#: ../src/main.cpp:437
 msgid "OBJECT-ID"
-msgstr ""
+msgstr "מזהה־פריט"
 
-#: ../src/main.cpp:687
+#: ../src/main.cpp:441
+msgid "Start Inkscape in interative shell mode."
+msgstr "התחל את אינקסקייפ במצב מסוף אינטרקטיבי."
+
+#: ../src/main.cpp:750
+#: ../src/main.cpp:986
 msgid ""
 "[OPTIONS...] [FILE...]\n"
 "\n"
 "Available options:"
 msgstr ""
+"[אפשרויות...] [קובץ...]\n"
+"\n"
+"אפשרויות זמינות:"
 
 #: ../src/menus-skeleton.h:17
 msgid "_New"
-msgstr ""
-
-#: ../src/menus-skeleton.h:22
-msgid "Open _Recent"
-msgstr ""
+msgstr "_חדש"
 
-#: ../src/menus-skeleton.h:50 ../src/verbs.cpp:2403 ../src/verbs.cpp:2409
+#: ../src/menus-skeleton.h:48
+#: ../src/verbs.cpp:2464
+#: ../src/verbs.cpp:2470
 msgid "_Edit"
-msgstr ""
+msgstr "_עריכה"
 
-#: ../src/menus-skeleton.h:60 ../src/verbs.cpp:2205
+#: ../src/menus-skeleton.h:58
+#: ../src/verbs.cpp:2260
 msgid "Paste Si_ze"
-msgstr ""
+msgstr "גודל הה_דבקה"
 
-#: ../src/menus-skeleton.h:72
+#: ../src/menus-skeleton.h:70
 msgid "Clo_ne"
-msgstr ""
+msgstr "כ_פיל"
 
-#: ../src/menus-skeleton.h:91
+#: ../src/menus-skeleton.h:90
 msgid "_View"
-msgstr ""
+msgstr "_תצוגה"
 
-#: ../src/menus-skeleton.h:92
+#: ../src/menus-skeleton.h:91
 msgid "_Zoom"
-msgstr ""
+msgstr "_תקריב"
 
-#: ../src/menus-skeleton.h:108
+#: ../src/menus-skeleton.h:107
 msgid "_Display mode"
-msgstr ""
+msgstr "מ_צב תצוגה"
 
-#: ../src/menus-skeleton.h:120
+#: ../src/menus-skeleton.h:119
 msgid "Show/Hide"
-msgstr ""
+msgstr "הצג/הסתר"
 
-#: ../src/menus-skeleton.h:137
+#. Not quite ready to be in the menus.
+#. "       <verb verb-id=\"FocusToggle\" />\n"
+#: ../src/menus-skeleton.h:138
 msgid "_Layer"
-msgstr ""
+msgstr "_שכבה"
 
-#: ../src/menus-skeleton.h:156
+#: ../src/menus-skeleton.h:158
 msgid "_Object"
-msgstr ""
+msgstr "פ_ריט"
 
-#: ../src/menus-skeleton.h:166
+#: ../src/menus-skeleton.h:168
 msgid "Cli_p"
-msgstr ""
+msgstr "_קליפ"
 
-#: ../src/menus-skeleton.h:170
+#: ../src/menus-skeleton.h:172
 msgid "Mas_k"
-msgstr ""
+msgstr "מס_כה"
 
-#: ../src/menus-skeleton.h:174
+#: ../src/menus-skeleton.h:176
 msgid "Patter_n"
-msgstr ""
+msgstr "_תבנית"
 
-#: ../src/menus-skeleton.h:198
+#: ../src/menus-skeleton.h:200
 msgid "_Path"
-msgstr ""
+msgstr "_נתיב"
 
-#: ../src/menus-skeleton.h:221
+#: ../src/menus-skeleton.h:223
 msgid "Path Effects"
-msgstr ""
+msgstr "אפקטי נתיב"
 
-#: ../src/menus-skeleton.h:227
+#: ../src/menus-skeleton.h:229
 msgid "_Text"
-msgstr ""
+msgstr "_טקסט"
 
-#: ../src/menus-skeleton.h:239
+#: ../src/menus-skeleton.h:244
 msgid "Effe_cts"
-msgstr ""
+msgstr "_אפקטים"
 
-#: ../src/menus-skeleton.h:246
+#: ../src/menus-skeleton.h:251
 msgid "Whiteboa_rd"
-msgstr ""
+msgstr "לוח _שיתופי"
 
-#: ../src/menus-skeleton.h:250
+#: ../src/menus-skeleton.h:255
 msgid "_Help"
-msgstr ""
+msgstr "_עזרה"
 
-#: ../src/menus-skeleton.h:254
+#: ../src/menus-skeleton.h:259
 msgid "Tutorials"
-msgstr ""
+msgstr "מדריכים"
 
-#: ../src/node-context.cpp:255
-msgid ""
-"<b>Ctrl</b>: toggle node type, snap handle angle, move hor/vert; <b>Ctrl"
-"+Alt</b>: move along handles"
-msgstr ""
+#: ../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>Ctrl</b>: מחליף את סוג המפרק, מצמיד לזווית הידית, מזיז אופקית/אנכית; <b>Ctrl+Alt</b>: מזיז לאורך הידיות"
 
-#: ../src/node-context.cpp:256
-msgid ""
-"<b>Shift</b>: toggle node selection, disable snapping, rotate both handles"
-msgstr ""
+#: ../src/node-context.cpp:229
+msgid "<b>Shift</b>: toggle node selection, disable snapping, rotate both handles"
+msgstr "<b>Shift</b>: מחליף את בחירת המפרקים, מבטל הצמדה, מסובב את שתי הידיות"
 
-#: ../src/node-context.cpp:257
+#: ../src/node-context.cpp:230
 msgid "<b>Alt</b>: lock handle length; <b>Ctrl+Alt</b>: move along handles"
-msgstr ""
+msgstr "<b>Alt</b>: נועל את אורך הידית; <b>Ctrl+Alt</b>: הזז לאורך הידיות"
 
-#: ../src/nodepath.cpp:651 ../src/seltrans.cpp:547
+#: ../src/nodepath.cpp:753
+#: ../src/seltrans.cpp:541
 msgid "Stamp"
-msgstr ""
+msgstr "חותמת"
 
-#: ../src/nodepath.cpp:1486 ../src/nodepath.cpp:1513
+#: ../src/nodepath.cpp:1628
+#: ../src/nodepath.cpp:1654
 msgid "Move nodes vertically"
-msgstr "×\94×\96×\96 ×¦×\9eתים אנכית"
+msgstr "×\94×\96×\96 ×\9eפרקים אנכית"
 
-#: ../src/nodepath.cpp:1488 ../src/nodepath.cpp:1515
+#: ../src/nodepath.cpp:1630
+#: ../src/nodepath.cpp:1656
 msgid "Move nodes horizontally"
-msgstr "×\94×\96×\96 ×¦×\9eת×\99ת אופקית"
+msgstr "×\94×\96×\96 ×\9eפרק×\99×\9d אופקית"
 
-#: ../src/nodepath.cpp:1490 ../src/nodepath.cpp:1517 ../src/nodepath.cpp:1532
-#: ../src/nodepath.cpp:3359
+#: ../src/nodepath.cpp:1632
+#: ../src/nodepath.cpp:1658
+#: ../src/nodepath.cpp:1673
+#: ../src/nodepath.cpp:3575
 msgid "Move nodes"
-msgstr "×\94×\96×\96 ×¦×\9eתים"
+msgstr "×\94×\96×\96 ×\9eפרקים"
 
-#: ../src/nodepath.cpp:1570
-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 ""
+#: ../src/nodepath.cpp:1711
+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>ידית המפרק</b>: גרור כדי לעצב את הפיתול; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית; לחיצה על <b>Alt</b> כדי לנעול את האורך; לחיצה על  <b>Shift</b> כדי להטות את שתי הידיות"
 
-#: ../src/nodepath.cpp:1740
+#: ../src/nodepath.cpp:1881
 msgid "Align nodes"
-msgstr "×\99×\99שר ×¦×\9eתים"
+msgstr "×\99×\99שר ×\9eפרקים"
 
-#: ../src/nodepath.cpp:1802
+#: ../src/nodepath.cpp:1943
 msgid "Distribute nodes"
-msgstr "פ×\96ר ×¦×\9eתים"
+msgstr "פ×\96ר ×\9eפרקים"
 
-#: ../src/nodepath.cpp:1840
+#: ../src/nodepath.cpp:1981
 msgid "Add nodes"
-msgstr "×\94×\95סף ×¦×\9eתים"
+msgstr "×\94×\95סף ×\9eפרקים"
 
-#: ../src/nodepath.cpp:1842 ../src/nodepath.cpp:1914
+#: ../src/nodepath.cpp:1983
+#: ../src/nodepath.cpp:2082
 msgid "Add node"
-msgstr "×\94×\95סף ×¦×\95×\9eת"
+msgstr "×\94×\95סף ×\9eפרק"
 
-#: ../src/nodepath.cpp:1995
+#: ../src/nodepath.cpp:2174
 msgid "Break path"
-msgstr ""
+msgstr "שבור נתיב"
 
-#: ../src/nodepath.cpp:2051
+#: ../src/nodepath.cpp:2230
 msgid "Close subpath"
-msgstr ""
+msgstr "סגור תת־נתיב"
 
-#: ../src/nodepath.cpp:2112
+#: ../src/nodepath.cpp:2291
 msgid "Join nodes"
-msgstr "×\90×\97×\93 ×¦×\9eתים"
+msgstr "צרף ×\9eפרקים"
 
-#: ../src/nodepath.cpp:2139
+#: ../src/nodepath.cpp:2318
 msgid "Close subpath by segment"
-msgstr ""
+msgstr "סגור את התת־נתיב עם מקטע"
 
-#: ../src/nodepath.cpp:2193
+#: ../src/nodepath.cpp:2372
 msgid "Join nodes by segment"
-msgstr ""
+msgstr "צרף מפרקים עם מקטע"
 
-#: ../src/nodepath.cpp:2206 ../src/nodepath.cpp:2221
+#: ../src/nodepath.cpp:2385
+#: ../src/nodepath.cpp:2400
 msgid "To join, you must have <b>two endnodes</b> selected."
-msgstr ""
+msgstr "כדי לצרף, עליך לבחור <b>שתי נקודות קצה</b>."
 
-#: ../src/nodepath.cpp:2378 ../src/nodepath.cpp:2414 ../src/nodepath.cpp:2418
+#: ../src/nodepath.cpp:2557
+#: ../src/nodepath.cpp:2593
+#: ../src/nodepath.cpp:2597
 msgid "Delete nodes"
-msgstr "×\9e×\97ק ×¦×\9eתים"
+msgstr "×\9e×\97ק ×\9eפרקים"
 
-#: ../src/nodepath.cpp:2380
+#: ../src/nodepath.cpp:2559
 msgid "Delete nodes preserving shape"
-msgstr ""
+msgstr "מחק מפרקים תוך שמירה על הצורה"
 
-#: ../src/nodepath.cpp:2437 ../src/nodepath.cpp:2451
-msgid ""
-"Select <b>two non-endpoint nodes</b> on a path between which to delete "
-"segments."
-msgstr ""
+#: ../src/nodepath.cpp:2616
+#: ../src/nodepath.cpp:2630
+msgid "Select <b>two non-endpoint nodes</b> on a path between which to delete segments."
+msgstr "בחר <b>שתי נקודות שאינן נקודות קצה</b> על הנתיב שביניהן כדי למחוק מקטע."
 
-#: ../src/nodepath.cpp:2547
+#: ../src/nodepath.cpp:2726
 msgid "Cannot find path between nodes."
-msgstr ""
+msgstr "לא ניתן למצוא נתיב בין המפרקים."
 
-#: ../src/nodepath.cpp:2579 ../src/widgets/toolbox.cpp:1129
+#: ../src/nodepath.cpp:2758
+#: ../src/widgets/toolbox.cpp:1326
 msgid "Delete segment"
-msgstr ""
+msgstr "מחק מקטע"
 
-#: ../src/nodepath.cpp:2600
+#: ../src/nodepath.cpp:2779
 msgid "Change segment type"
-msgstr ""
+msgstr "שנה את סוג המקטע"
 
-#: ../src/nodepath.cpp:2617 ../src/nodepath.cpp:3317
+#: ../src/nodepath.cpp:2796
+#: ../src/nodepath.cpp:3533
 msgid "Change node type"
-msgstr "שנ×\94 ×¡×\95×\92 ×¦×\95×\9eת"
+msgstr "שנ×\94 ×\90ת ×¡×\95×\92 ×\94×\9eפרק"
 
-#: ../src/nodepath.cpp:3605
+#: ../src/nodepath.cpp:3821
 msgid "Retract handle"
-msgstr ""
+msgstr "משוך ידית פנימה"
 
-#: ../src/nodepath.cpp:3654
+#: ../src/nodepath.cpp:3876
 msgid "Move node handle"
-msgstr ""
+msgstr "הזז את ידית המפרק"
 
-#: ../src/nodepath.cpp:3823
+#: ../src/nodepath.cpp:4062
 #, 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 ""
+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>ידית המפרק</b>: זווית %0.2f&#176;, אורך %s; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית; לחיצה על <b>Alt</b> כדי לנעול אורך; לחיצה על <b>Shift</b> כדי להטות את שתי הידיות"
 
-#: ../src/nodepath.cpp:4017
+#: ../src/nodepath.cpp:4256
 msgid "Rotate nodes"
-msgstr "ס×\95×\91×\91 ×¦×\9eתים"
+msgstr "ס×\95×\91×\91 ×\9eפרקים"
 
-#: ../src/nodepath.cpp:4148
+#: ../src/nodepath.cpp:4387
 msgid "Scale nodes"
-msgstr ""
+msgstr "שנה את מרחק המפרקים"
 
-#: ../src/nodepath.cpp:4192
+#: ../src/nodepath.cpp:4431
 msgid "Flip nodes"
-msgstr ""
+msgstr "הפוך מפרקים"
 
-#: ../src/nodepath.cpp:4361
-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 ""
+#: ../src/nodepath.cpp:4600
+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>מפרק</b>: גרור כדי לערוך את הנתיב; לחיצה על <b>Ctrl</b> כדי להצמיד לאופק/אנך; לחיצה על <b>Ctrl+Alt</b> כדי להצמיד לכיווני הידיות"
 
 #. TRANSLATORS: "end" is an adjective here (NOT a verb)
-#: ../src/nodepath.cpp:4587
+#: ../src/nodepath.cpp:4833
 msgid "end node"
-msgstr ""
+msgstr "מפרק קצה"
 
 #. TRANSLATORS: "cusp" means "sharp" (cusp node); see also the Advanced Tutorial
-#: ../src/nodepath.cpp:4592
+#: ../src/nodepath.cpp:4838
 msgid "cusp"
-msgstr ""
+msgstr "חוד"
 
 #. TRANSLATORS: "smooth" is an adjective here
-#: ../src/nodepath.cpp:4595
+#: ../src/nodepath.cpp:4841
 msgid "smooth"
 msgstr "חלק"
 
-#: ../src/nodepath.cpp:4597
+#: ../src/nodepath.cpp:4843
+msgid "auto"
+msgstr "אוטו'"
+
+#: ../src/nodepath.cpp:4845
 msgid "symmetric"
 msgstr "סימטרי"
 
 #. TRANSLATORS: "end" is an adjective here (NOT a verb)
-#: ../src/nodepath.cpp:4603
+#: ../src/nodepath.cpp:4851
 msgid "end node, handle retracted (drag with <b>Shift</b> to extend)"
-msgstr ""
+msgstr "מפרק קצה, הידית נמשכה פנימה (גרור עם <b>Shift</b> כדי להרחיב)"
 
-#: ../src/nodepath.cpp:4605
+#: ../src/nodepath.cpp:4853
 msgid "one handle retracted (drag with <b>Shift</b> to extend)"
-msgstr ""
+msgstr "ידית אחת נמשכה פנימה (גרור עם <b>Shift</b> כדי להרחיב)"
 
-#: ../src/nodepath.cpp:4608
+#: ../src/nodepath.cpp:4856
 msgid "both handles retracted (drag with <b>Shift</b> to extend)"
-msgstr ""
+msgstr "שתי הידיות נמשכו פנימה (גרור עם <b>Shift</b> כדי להרחיב)"
 
-#: ../src/nodepath.cpp:4620
-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 ""
+#: ../src/nodepath.cpp:4868
+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 "<b>גרור</b> את המפרקים או את ידיות המפרקים; <b>Alt+גרור</b> את המפרקים כדי לפסל; מקשי ה<b>חיצים</b> כדי להזיז את המפרקים, <b>&lt; &gt;</b> כדי לשנות גודל, <b>[ ]</b> לסיבוב"
 
-#: ../src/nodepath.cpp:4621
+#: ../src/nodepath.cpp:4869
 msgid "<b>Drag</b> the node or its handles; <b>arrow</b> keys to move the node"
-msgstr ""
+msgstr "<b>גרור</b> את המפרק או את ידותיו; מקשי ה<b>חיצים</b> כדי להזיז את המפרק"
 
-#: ../src/nodepath.cpp:4646 ../src/nodepath.cpp:4658
+#: ../src/nodepath.cpp:4895
+#: ../src/nodepath.cpp:4907
 msgid "Select a single object to edit its nodes or handles."
-msgstr ""
+msgstr "בחר פריט בודד כדי לערוך את המפרקים או הידיות שלו."
 
-#: ../src/nodepath.cpp:4650
+#: ../src/nodepath.cpp:4899
 #, 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] ""
-msgstr[1] ""
-
-#: ../src/nodepath.cpp:4656
+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> מפרקים מתוך <b>%i</b>. <b>לחץ</b>, <b>Shift+לחיצה</b>, או <b>גרור מסביב</b> למפרקים לבחירה."
+msgstr[1] "נבחרו <b>0</b> מפרקים מתוך <b>%i</b>. <b>לחץ</b>, <b>Shift+לחיצה</b>, או <b>גרור מסביב</b> למפרקים לבחירה."
+
+#: ../src/nodepath.cpp:4905
 msgid "Drag the handles of the object to modify it."
-msgstr ""
+msgstr "גרור את הידיות של הפריט כדי לשנות אותו."
 
-#: ../src/nodepath.cpp:4664
+#: ../src/nodepath.cpp:4913
 #, c-format
 msgid "<b>%i</b> of <b>%i</b> node selected; %s. %s."
 msgid_plural "<b>%i</b> of <b>%i</b> nodes selected; %s. %s."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>%i</b> מתוך <b>%i</b> מפרקים נבחר; %s. %s."
+msgstr[1] "<b>%i</b> מתוך <b>%i</b> מפרקים נבחרו; %s. %s."
 
-#: ../src/nodepath.cpp:4671
+#: ../src/nodepath.cpp:4920
 #, 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] ""
-msgstr[1] ""
+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> מתוך <b>%i</b> מפרקים נבחר תחת <b>%i</b> מתוך <b>%i</b> תת־נתיבים. %s."
+msgstr[1] "<b>%i</b> מתוך <b>%i</b> מפרקים נבחרו תחת <b>%i</b> מתוך <b>%i</b> תת־נתיבים. %s."
 
-#: ../src/nodepath.cpp:4677
+#: ../src/nodepath.cpp:4926
 #, c-format
 msgid "<b>%i</b> of <b>%i</b> node selected. %s."
 msgid_plural "<b>%i</b> of <b>%i</b> nodes selected. %s."
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../src/object-edit.cpp:420
-msgid ""
-"Adjust the <b>horizontal rounding</b> radius; with <b>Ctrl</b> to make the "
-"vertical radius the same"
-msgstr ""
-
-#: ../src/object-edit.cpp:424
-msgid ""
-"Adjust the <b>vertical rounding</b> radius; with <b>Ctrl</b> to make the "
-"horizontal radius the same"
-msgstr ""
-
-#: ../src/object-edit.cpp:428 ../src/object-edit.cpp:432
-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 ""
+msgstr[0] "<b>%i</b> מתוך <b>%i</b> מפרקים נבחר. %s."
+msgstr[1] "<b>%i</b> מתוך <b>%i</b> מפרקים נבחרו. %s."
 
-#: ../src/object-edit.cpp:666 ../src/object-edit.cpp:669
-#: ../src/object-edit.cpp:672 ../src/object-edit.cpp:675
-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 ""
+#: ../src/object-edit.cpp:408
+msgid "Adjust the <b>horizontal rounding</b> radius; with <b>Ctrl</b> to make the vertical radius the same"
+msgstr "שנה את רדיוס ה<b>עיגול האופקי</b>; לחיצה על <b>Ctrl</b> כדי להפוך את הרדיוס האנכי לזהה"
 
-#: ../src/object-edit.cpp:678 ../src/object-edit.cpp:681
-#: ../src/object-edit.cpp:684 ../src/object-edit.cpp:687
-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 ""
+#: ../src/object-edit.cpp:412
+msgid "Adjust the <b>vertical rounding</b> radius; with <b>Ctrl</b> to make the horizontal radius the same"
+msgstr "שנה את רדיוס ה<b>עיגול האנכי</b>; לחיצה על <b>Ctrl</b> כדי להפוך את הרדיוס האופקי לזהה"
 
-#: ../src/object-edit.cpp:690
+#: ../src/object-edit.cpp:416
+#: ../src/object-edit.cpp:420
+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>הגובה והרוחב</b> של המרובע; לחיצה על <b>Ctrl</b> כדי לנעול את היחס או למתוח במימד אחד בלבד"
+
+#: ../src/object-edit.cpp:654
+#: ../src/object-edit.cpp:657
+#: ../src/object-edit.cpp:660
+#: ../src/object-edit.cpp:663
+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 "שנה את התיבה בכיוון X/Y; לחיצה על <b>Shift</b> לאורך ציר ה־Z; לחיצה על <b>Ctrl</b> כדי לכפות את כיווני הקצוות או האלכסונים"
+
+#: ../src/object-edit.cpp:666
+#: ../src/object-edit.cpp:669
+#: ../src/object-edit.cpp:672
+#: ../src/object-edit.cpp:675
+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 "שנה את גודל התיבה לאורך ציר ה־Z; לחיצה על <b>Shift</b> בכיוון X/Y; לחיצה על <b>Ctrl</b> כדי לכפות את כיווני הקצוות או האלכסונים"
+
+#: ../src/object-edit.cpp:678
 msgid "Move the box in perspective"
-msgstr ""
+msgstr "הזז את התיבה בפרספקטיבה"
 
-#: ../src/object-edit.cpp:908
+#: ../src/object-edit.cpp:896
 msgid "Adjust ellipse <b>width</b>, with <b>Ctrl</b> to make circle"
-msgstr ""
+msgstr "הגדר את <b>רוחב</b> האליפסה, לחיצה על <b>Ctrl</b> כדי ליצור עיגול"
 
-#: ../src/object-edit.cpp:911
+#: ../src/object-edit.cpp:899
 msgid "Adjust ellipse <b>height</b>, with <b>Ctrl</b> to make circle"
-msgstr ""
+msgstr "הגדר את <b>גובה</b> האליפסה, לחיצה על <b>Ctrl</b> כדי ליצור עיגול"
 
-#: ../src/object-edit.cpp:914
-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 ""
+#: ../src/object-edit.cpp:902
+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>נקודת התחלת</b> של הקשת או המקטע; לחיצה על <b>Ctrl</b> להצמיד לזווית; גרור כלפי <b>פנים</b> את האליפסה כדי ליצור קשת, <b>החוצה</b> כדי ליצור מקטע"
 
-#: ../src/object-edit.cpp:918
-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 ""
+#: ../src/object-edit.cpp:906
+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>נקודת סיום</b> הקשת או המקטע; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית; גרור כלפי <b>פנים</b> את האליפסה כדי ליצור קשת, <b>החוצה</b> כדי ליצור מקטע"
 
-#: ../src/object-edit.cpp:1057
-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 ""
+#: ../src/object-edit.cpp:1045
+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>רדיוס הקצוות</b> של הכוכב או המצולע; לחיצה על <b>Shift</b> כדי לעגל; לחיצה על  <b>Alt</b> כדי לבחור באקראי"
 
-#: ../src/object-edit.cpp:1064
-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 ""
+#: ../src/object-edit.cpp:1052
+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>רדיוס הבסיס</b> של הכוכב; לחיצה על <b>Ctrl</b> כדי לשמור על קרני הכוכב מעוגלות (ללא נטייה); לחיצה על <b>Shift</b> כדי לעגל  לחיצה על <b>Alt</b> כדי לבחור באקראי"
 
-#: ../src/object-edit.cpp:1245
-msgid ""
-"Roll/unroll the spiral from <b>inside</b>; with <b>Ctrl</b> to snap angle; "
-"with <b>Alt</b> to converge/diverge"
-msgstr ""
+#: ../src/object-edit.cpp:1235
+msgid "Roll/unroll the spiral from <b>inside</b>; with <b>Ctrl</b> to snap angle; with <b>Alt</b> to converge/diverge"
+msgstr "גלול פנימה או החוצה <b>מבפנים</b>; לחיצה על<b>Ctrl</b> כדי להצמיד לזווית; לחיצה על <b>Alt</b> כדי לכנס/לרווח"
 
-#: ../src/object-edit.cpp:1248
-msgid ""
-"Roll/unroll the spiral from <b>outside</b>; with <b>Ctrl</b> to snap angle; "
-"with <b>Shift</b> to scale/rotate"
-msgstr ""
+#: ../src/object-edit.cpp:1238
+msgid "Roll/unroll the spiral from <b>outside</b>; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to scale/rotate"
+msgstr "גלול פנימה או החוצה <b>מבחוץ</b>; לחיצה על<b>Ctrl</b> כדי להצמיד לזווית; לחיצה על <b>Alt</b> כדי לשנות גודל/לסובב"
 
-#: ../src/object-edit.cpp:1292
+#: ../src/object-edit.cpp:1282
 msgid "Adjust the <b>offset distance</b>"
-msgstr ""
+msgstr "הגדר את <b>מרחק הקיזוז</b>"
 
-#: ../src/object-edit.cpp:1327
+#: ../src/object-edit.cpp:1318
 msgid "Drag to resize the <b>flowed text frame</b>"
-msgstr ""
+msgstr "גרור כדי לשנות את גודל <b>מסגרת הטקסט הצף</b>"
 
-#: ../src/path-chemistry.cpp:63
+#: ../src/path-chemistry.cpp:48
 msgid "Select <b>at least two objects</b> to combine."
-msgstr ""
+msgstr "בחר <b>לפחות שני פריטים</b> כדי לשלב."
 
-#: ../src/path-chemistry.cpp:67
+#: ../src/path-chemistry.cpp:52
 msgid "Combining paths..."
-msgstr ""
+msgstr "משלב נתיבים"
 
-#: ../src/path-chemistry.cpp:169
+#: ../src/path-chemistry.cpp:154
 msgid "Combine"
-msgstr ""
+msgstr "שלב"
 
-#: ../src/path-chemistry.cpp:176
+#: ../src/path-chemistry.cpp:161
 msgid "<b>No path(s)</b> to combine in the selection."
-msgstr ""
+msgstr "<b>אין נתיב/ים</b> לשילוב בבחירה."
 
-#: ../src/path-chemistry.cpp:190
+#: ../src/path-chemistry.cpp:173
 msgid "Select <b>path(s)</b> to break apart."
-msgstr ""
+msgstr "בחר <b>נתיב/ים</b> להפרדה"
 
-#: ../src/path-chemistry.cpp:194
+#: ../src/path-chemistry.cpp:177
 msgid "Breaking apart paths..."
-msgstr ""
+msgstr "מפריד נתיבים..."
 
-#: ../src/path-chemistry.cpp:280
+#: ../src/path-chemistry.cpp:263
 msgid "Break apart"
-msgstr ""
+msgstr "הפרד"
 
-#: ../src/path-chemistry.cpp:282
+#: ../src/path-chemistry.cpp:265
 msgid "<b>No path(s)</b> to break apart in the selection."
-msgstr ""
+msgstr "<b>אין נתיב/ים</b> להפרדה בבחירה."
 
-#: ../src/path-chemistry.cpp:306
+#: ../src/path-chemistry.cpp:277
 msgid "Select <b>object(s)</b> to convert to path."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להמרה לנתיב."
 
-#: ../src/path-chemistry.cpp:312
+#: ../src/path-chemistry.cpp:283
 msgid "Converting objects to paths..."
-msgstr ""
+msgstr "ממיר פריטים לנתיבים..."
 
-#: ../src/path-chemistry.cpp:334
+#: ../src/path-chemistry.cpp:305
 msgid "Object to path"
-msgstr ""
+msgstr "פריט לנתיב"
 
-#: ../src/path-chemistry.cpp:336
+#: ../src/path-chemistry.cpp:307
 msgid "<b>No objects</b> to convert to path in the selection."
-msgstr ""
+msgstr "<b>אין פריטים</b> להמרה לנתיבים בבחירה."
 
-#: ../src/path-chemistry.cpp:487
+#: ../src/path-chemistry.cpp:544
 msgid "Select <b>path(s)</b> to reverse."
-msgstr ""
+msgstr "בחר <b>נתיבים</b> כדי להפוך."
 
-#: ../src/path-chemistry.cpp:496
+#: ../src/path-chemistry.cpp:553
 msgid "Reversing paths..."
-msgstr ""
+msgstr "הופך נתיבים..."
 
-#: ../src/path-chemistry.cpp:523
+#: ../src/path-chemistry.cpp:580
 msgid "Reverse path"
-msgstr ""
+msgstr "הפוך נתיבים"
 
-#: ../src/path-chemistry.cpp:525
+#: ../src/path-chemistry.cpp:582
 msgid "<b>No paths</b> to reverse in the selection."
-msgstr ""
+msgstr "<b>אין נתיבים</b> להיפוך בבחירה."
 
-#: ../src/pencil-context.cpp:239 ../src/pen-context.cpp:441
+#: ../src/pencil-context.cpp:251
+#: ../src/pen-context.cpp:486
 msgid "Continuing selected path"
-msgstr ""
+msgstr "ממשיך עם הנתיב הנבחר"
 
-#: ../src/pencil-context.cpp:248 ../src/pen-context.cpp:451
+#: ../src/pencil-context.cpp:260
+#: ../src/pen-context.cpp:496
 msgid "Creating new path"
-msgstr ""
+msgstr "יוצר נתיב חדש"
 
-#: ../src/pencil-context.cpp:253 ../src/pen-context.cpp:453
+#: ../src/pencil-context.cpp:271
+#: ../src/pen-context.cpp:498
 msgid "Appending to selected path"
-msgstr ""
+msgstr "מוסיף לנתיב הנבחר"
 
-#: ../src/pencil-context.cpp:336
+#: ../src/pencil-context.cpp:378
 msgid "<b>Release</b> here to close and finish the path."
-msgstr ""
+msgstr "<b>שחרר</b> כאן כדי לסגור ולסיים את הנתיב."
 
-#: ../src/pencil-context.cpp:342
+#: ../src/pencil-context.cpp:384
 msgid "Drawing a freehand path"
-msgstr ""
+msgstr "מצייר נתיב ביד חופשית"
 
-#: ../src/pencil-context.cpp:347
+#: ../src/pencil-context.cpp:389
 msgid "<b>Drag</b> to continue the path from this point."
-msgstr ""
+msgstr "<b>גרור</b> ככדי להמשיך את הנתיב מנקודה זו."
 
 #. Write curves to object
-#: ../src/pencil-context.cpp:409
+#: ../src/pencil-context.cpp:451
 msgid "Finishing freehand"
-msgstr ""
+msgstr "מסיים יד חופשית"
 
-#: ../src/pencil-context.cpp:460 ../src/pen-context.cpp:237
+#: ../src/pencil-context.cpp:502
+#: ../src/pen-context.cpp:254
 msgid "Drawing cancelled"
-msgstr ""
+msgstr "הציור בוטל"
 
-#: ../src/pen-context.cpp:620
+#: ../src/pen-context.cpp:658
 msgid "<b>Click</b> or <b>click and drag</b> to close and finish the path."
-msgstr ""
+msgstr "<b>לחץ</b> או <b>לחץ וגרור</b> כדי לסגור ולסיים את הנתיב."
 
-#: ../src/pen-context.cpp:630
-msgid ""
-"<b>Click</b> or <b>click and drag</b> to continue the path from this point."
-msgstr ""
+#: ../src/pen-context.cpp:668
+msgid "<b>Click</b> or <b>click and drag</b> to continue the path from this point."
+msgstr "<b>לחץ</b> או <b>לחץ וגרור</b> כדי להמשיך את הנתיב מנקודה זו."
 
-#: ../src/pen-context.cpp:1177
+#: ../src/pen-context.cpp:1261
 #, 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 ""
+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>מקטע עקומה</b>: זווית %3.2f&#176;, מרחק %s; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית, <b>Enter</b> כדי לסיים את הנתיב"
 
-#: ../src/pen-context.cpp:1178
+#: ../src/pen-context.cpp:1262
 #, 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 ""
+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>מקטע קו ישר</b>: זווית %3.2f&#176;, מרחק %s; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית, <b>Enter</b> כדי לסיים את הנתיב"
 
-#: ../src/pen-context.cpp:1196
+#: ../src/pen-context.cpp:1280
 #, c-format
-msgid ""
-"<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap "
-"angle"
-msgstr ""
+msgid "<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap angle"
+msgstr "<b>ידית נטויה</b>: זווית %3.2f&#176;, אורך %s; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית"
 
-#: ../src/pen-context.cpp:1218
+#: ../src/pen-context.cpp:1302
 #, 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 ""
+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>ידית העיקול, סימטרי</b>: זווית %3.2f&#176;, אורך %s; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית, לחיצה על <b>Shift</b> כדי להזיז ידית זו בלבד"
 
-#: ../src/pen-context.cpp:1219
+#: ../src/pen-context.cpp:1303
 #, 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 ""
+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>ידית עיקול</b>: זווית %3.2f&#176;, אורך %s; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית, לחיצה על <b>Shift</b> כדי להזיז ידית זו בלבד"
 
-#: ../src/pen-context.cpp:1259
+#: ../src/pen-context.cpp:1350
 msgid "Drawing finished"
-msgstr ""
+msgstr "הציור הסתיים"
 
 #: ../src/persp3d.cpp:335
 msgid "Toggle vanishing point"
-msgstr ""
+msgstr "החלף את נקודת ההעלמות"
 
 #: ../src/persp3d.cpp:346
 msgid "Toggle multiple vanishing points"
-msgstr ""
+msgstr "החלף כמה נקודות העלמות"
+
+#: ../src/preferences.cpp:106
+msgid "Inkscape will run with default settings, and new settings will not be saved. "
+msgstr "אינקסקייפ תפעל  עם הגדרות ברירת המחדל, והגדרות חדשות לא יישמרו."
 
-#: ../src/preferences.cpp:59
+#. the creation failed
+#. _errorDialog(Glib::ustring::compose(_("Cannot create profile directory %1."),
+#. Glib::filename_to_utf8(_prefs_dir)), not_saved);
+#: ../src/preferences.cpp:121
 #, c-format
-msgid ""
-"%s is not a valid preferences file.\n"
-"%s"
-msgstr ""
+msgid "Cannot create profile directory %s."
+msgstr "לא ניתן ליצור את תיקיית הפרופיל %s."
 
-#: ../src/preferences.cpp:60
-msgid ""
-"Inkscape will run with default settings.\n"
-"New settings will not be saved."
-msgstr ""
+#. The profile dir is not actually a directory
+#. _errorDialog(Glib::ustring::compose(_("%1 is not a valid directory."),
+#. Glib::filename_to_utf8(_prefs_dir)), not_saved);
+#: ../src/preferences.cpp:139
+#, c-format
+msgid "%s is not a valid directory."
+msgstr "%s אינה תיקיית תקנית."
+
+#. The write failed.
+#. _errorDialog(Glib::ustring::compose(_("Failed to create the preferences file %1."),
+#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
+#: ../src/preferences.cpp:150
+#, c-format
+msgid "Failed to create the preferences file %s."
+msgstr "כשל ביצירת קובץ ההעדפות %s."
+
+#. _errorDialog(Glib::ustring::compose(_("The preferences file %1 is not a regular file."),
+#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
+#: ../src/preferences.cpp:168
+#, c-format
+msgid "The preferences file %s is not a regular file."
+msgstr "קובץ ההעדפות %s אינו קובץ רגיל."
+
+#. _errorDialog(Glib::ustring::compose(_("The preferences file %1 could not be read."),
+#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
+#: ../src/preferences.cpp:180
+#, c-format
+msgid "The preferences file %s could not be read."
+msgstr "לא ניתן לקרוא את קובץ ההעדפות %s."
+
+#. _errorDialog(Glib::ustring::compose(_("The preferences file %1 is not a valid XML document."),
+#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
+#: ../src/preferences.cpp:192
+#, c-format
+msgid "The preferences file %s is not a valid XML document."
+msgstr "קובץ ההעדפות %s איננו מסמך XML תקני."
+
+#. _errorDialog(Glib::ustring::compose(_("The file %1 is not a valid Inkscape preferences file."),
+#. Glib::filename_to_utf8(_prefs_filename)), not_saved);
+#: ../src/preferences.cpp:202
+#, c-format
+msgid "The file %s is not a valid Inkscape preferences file."
+msgstr "הקובץ %s אינו קובץ העדפות תקני של אינקסקייפ."
 
 #: ../src/rect-context.cpp:382
-msgid ""
-"<b>Ctrl</b>: make square or integer-ratio rect, lock a rounded corner "
-"circular"
-msgstr ""
+msgid "<b>Ctrl</b>: make square or integer-ratio rect, lock a rounded corner circular"
+msgstr "<b>Ctrl</b>: צור ריבוע או מרובע בעל יחס צלעות שווה, נעל יחס קודקודים מעגלי"
 
-#: ../src/rect-context.cpp:536
+#: ../src/rect-context.cpp:523
 #, 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 ""
+msgid "<b>Rectangle</b>: %s &#215; %s (constrained to ratio %d:%d); with <b>Shift</b> to draw around the starting point"
+msgstr "<b>מרובע</b>: %s &#215; %s (מאולץ ליחס %d:%d); לחיצה על <b>Shift</b> על מנת לצייר מסביב לנקודת ההתחלה"
 
-#: ../src/rect-context.cpp:539
-#, fuzzy, 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>אליפסה</b>: %s &#215; %s (מוגבלת ליחס %d:%d); לחצו <b>Shift</b> על "
-"מנתלצייר מסביב לנקודת ההתחלה"
+#: ../src/rect-context.cpp:526
+#, 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>מרובע</b>: %s &#215; %s (מאולץ ליחס זהב של 1.618 : 1); לחיצה על <b>Shift</b> על מנת לצייר מסביב לנקודת ההתחלה"
 
-#: ../src/rect-context.cpp:541
-#, fuzzy, 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>אליפסה</b>: %s &#215; %s (מוגבלת ליחס %d:%d); לחצו <b>Shift</b> על "
-"מנתלצייר מסביב לנקודת ההתחלה"
+#: ../src/rect-context.cpp:528
+#, 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>מרובע</b>: %s &#215; %s (מאולץ ליחס זהב של  1.618 : 1); לחיצה על <b>Shift</b> על מנת לצייר מסביב לנקודת ההתחלה"
 
-#: ../src/rect-context.cpp:545
+#: ../src/rect-context.cpp:532
 #, 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 ""
+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>מרובע</b>: %s &#215; %s; לחיצה על <b>Shift</b> על מנת לצייר מסביב לנקודת ההתחלה"
 
-#: ../src/rect-context.cpp:566
+#: ../src/rect-context.cpp:553
 msgid "Create rectangle"
-msgstr ""
+msgstr "צור מרובע"
 
-#: ../src/select-context.cpp:230
+#: ../src/select-context.cpp:232
 msgid "Move canceled."
-msgstr ""
+msgstr "ההזזה בוטלה."
 
-#: ../src/select-context.cpp:238
+#: ../src/select-context.cpp:240
 msgid "Selection canceled."
-msgstr ""
+msgstr "הבחירה בוטלה."
 
-#: ../src/select-context.cpp:545
-msgid ""
-"<b>Draw over</b> objects to select them; release <b>Alt</b> to switch to "
-"rubberband selection"
-msgstr ""
+#: ../src/select-context.cpp:550
+msgid "<b>Draw over</b> objects to select them; release <b>Alt</b> to switch to rubberband selection"
+msgstr "<b>צייר מעבר</b> לפריטים כדי לבחור אותם; שחרר את המקש <b>Alt</b> כדי להחליף לבחירת רצועת גומי"
 
-#: ../src/select-context.cpp:547
-msgid ""
-"<b>Drag around</b> objects to select them; press <b>Alt</b> to switch to "
-"touch selection"
-msgstr ""
+#: ../src/select-context.cpp:552
+msgid "<b>Drag around</b> objects to select them; press <b>Alt</b> to switch to touch selection"
+msgstr "<b>גרור מסביב</b> לפריטים כדי לבחור אותם לחיצה על <b>Alt</b> כדי להמיר לבחירה בנגיעה"
 
-#: ../src/select-context.cpp:707
+#: ../src/select-context.cpp:712
 msgid "<b>Ctrl</b>: click to select in groups; drag to move hor/vert"
-msgstr ""
+msgstr "<b>Ctrl</b>: לחץ כדי לבחור בקבוצות; גרור כדי להזיז אנכית/אופקית"
 
-#: ../src/select-context.cpp:708
+#: ../src/select-context.cpp:713
 msgid "<b>Shift</b>: click to toggle select; drag for rubberband selection"
-msgstr ""
+msgstr "<b>Shift</b>: לחץ כדי להחליף את הבחירה; גרור כדי לבצע בחירת רצועת גומי"
 
-#: ../src/select-context.cpp:709
-msgid ""
-"<b>Alt</b>: click to select under; drag to move selected or select by touch"
-msgstr ""
+#: ../src/select-context.cpp:714
+msgid "<b>Alt</b>: click to select under; drag to move selected or select by touch"
+msgstr "<b>Alt</b>: לחץ כדי לבחור את מה שמתחת; גרור כדי להזיז את הנבחר או בחר על ידי נגיעה"
 
-#: ../src/select-context.cpp:880
+#: ../src/select-context.cpp:885
 msgid "Selected object is not a group. Cannot enter."
-msgstr ""
+msgstr "הפריט הנבחר אינו קבוצה. לא ניתן להכנס."
 
-#: ../src/selection-chemistry.cpp:194
+#: ../src/selection-chemistry.cpp:192
 msgid "Delete text"
-msgstr ""
+msgstr "מחק טקסט"
 
-#: ../src/selection-chemistry.cpp:202
+#: ../src/selection-chemistry.cpp:200
 msgid "<b>Nothing</b> was deleted."
-msgstr ""
+msgstr "לא נמחק <b>שום דבר</b>."
 
-#: ../src/selection-chemistry.cpp:220 ../src/text-context.cpp:995
-#: ../src/widgets/toolbox.cpp:1090 ../src/widgets/toolbox.cpp:4335
+#: ../src/selection-chemistry.cpp:218
+#: ../src/text-context.cpp:1014
+#: ../src/widgets/toolbox.cpp:1287
+#: ../src/widgets/toolbox.cpp:5288
 msgid "Delete"
-msgstr ""
+msgstr "מחק"
 
-#: ../src/selection-chemistry.cpp:235
+#: ../src/selection-chemistry.cpp:246
 msgid "Select <b>object(s)</b> to duplicate."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> לשיכפול."
 
-#: ../src/selection-chemistry.cpp:285
+#: ../src/selection-chemistry.cpp:336
 msgid "Delete all"
-msgstr ""
+msgstr "מחק הכל"
 
-#: ../src/selection-chemistry.cpp:409
+#: ../src/selection-chemistry.cpp:459
 msgid "Select <b>some objects</b> to group."
-msgstr ""
+msgstr "בחר <b>כמה פריטים</b> לקיבוץ."
 
-#: ../src/selection-chemistry.cpp:482 ../src/selection-describer.cpp:51
+#: ../src/selection-chemistry.cpp:532
+#: ../src/selection-describer.cpp:51
 msgid "Group"
-msgstr ""
+msgstr "קבץ"
 
-#: ../src/selection-chemistry.cpp:497
+#: ../src/selection-chemistry.cpp:546
 msgid "Select a <b>group</b> to ungroup."
-msgstr ""
+msgstr "בחר <b>קבוצה</b> לפירוק."
 
-#: ../src/selection-chemistry.cpp:538
+#: ../src/selection-chemistry.cpp:587
 msgid "<b>No groups</b> to ungroup in the selection."
-msgstr ""
+msgstr "<b>אין קבוצות</b> לפירוק בבחירה."
 
-#: ../src/selection-chemistry.cpp:544 ../src/sp-item-group.cpp:488
+#: ../src/selection-chemistry.cpp:593
+#: ../src/sp-item-group.cpp:497
 msgid "Ungroup"
-msgstr ""
+msgstr "פרק"
 
-#: ../src/selection-chemistry.cpp:605
+#: ../src/selection-chemistry.cpp:653
 msgid "Select <b>object(s)</b> to raise."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להגבהה."
 
-#: ../src/selection-chemistry.cpp:611 ../src/selection-chemistry.cpp:672
-#: ../src/selection-chemistry.cpp:707 ../src/selection-chemistry.cpp:772
-msgid ""
-"You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
-msgstr ""
+#: ../src/selection-chemistry.cpp:659
+#: ../src/selection-chemistry.cpp:719
+#: ../src/selection-chemistry.cpp:753
+#: ../src/selection-chemistry.cpp:817
+msgid "You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
+msgstr "לא ניתן להנמיך/להגביה פריטים מ<b>קבוצות</b> או <b>שכבות שונות</b>"
 
 #. TRANSLATORS: Only put the word "Raise" in the translation. Means "to raise an object" in the undo history
-#: ../src/selection-chemistry.cpp:651
+#: ../src/selection-chemistry.cpp:699
 msgid "undo_action|Raise"
-msgstr ""
+msgstr "הרמה"
 
-#: ../src/selection-chemistry.cpp:664
+#: ../src/selection-chemistry.cpp:711
 msgid "Select <b>object(s)</b> to raise to top."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להגבהה כעליון/ים."
 
-#: ../src/selection-chemistry.cpp:687
+#: ../src/selection-chemistry.cpp:734
 msgid "Raise to top"
-msgstr ""
+msgstr "הגבה לעליון"
 
-#: ../src/selection-chemistry.cpp:701
+#: ../src/selection-chemistry.cpp:747
 msgid "Select <b>object(s)</b> to lower."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להנמכה."
 
-#: ../src/selection-chemistry.cpp:751
+#: ../src/selection-chemistry.cpp:797
 msgid "Lower"
-msgstr ""
+msgstr "הנמך"
 
-#: ../src/selection-chemistry.cpp:764
+#: ../src/selection-chemistry.cpp:809
 msgid "Select <b>object(s)</b> to lower to bottom."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להנמכה לתחתית."
 
-#: ../src/selection-chemistry.cpp:799
+#: ../src/selection-chemistry.cpp:844
 msgid "Lower to bottom"
-msgstr ""
+msgstr "הנמך לתחתית"
 
-#: ../src/selection-chemistry.cpp:806
+#: ../src/selection-chemistry.cpp:851
 msgid "Nothing to undo."
-msgstr ""
+msgstr "אין מה לבטל."
 
-#: ../src/selection-chemistry.cpp:813
+#: ../src/selection-chemistry.cpp:858
 msgid "Nothing to redo."
-msgstr ""
+msgstr "אין מה לבצע שוב.ל"
 
-#: ../src/selection-chemistry.cpp:873
+#: ../src/selection-chemistry.cpp:918
 msgid "Paste"
 msgstr "הדבק"
 
-#: ../src/selection-chemistry.cpp:880
+#: ../src/selection-chemistry.cpp:925
 msgid "Paste style"
-msgstr ""
+msgstr "הדבק סגנון"
 
-#: ../src/selection-chemistry.cpp:889
+#: ../src/selection-chemistry.cpp:934
 msgid "Paste live path effect"
-msgstr ""
+msgstr "הדבק אפקט נתיב חי"
 
-#: ../src/selection-chemistry.cpp:909
-#, fuzzy
+#: ../src/selection-chemistry.cpp:953
 msgid "Select <b>object(s)</b> to remove live path effects from."
-msgstr "בחר את <b>האוביקטים</b> שעליהם יווצר הגרדיאנט."
+msgstr "בחר <b>פריט/ים</b> מהם יוסרו אפקטי הנתיב החיים."
 
-#: ../src/selection-chemistry.cpp:921
+#: ../src/selection-chemistry.cpp:965
 msgid "Remove live path effect"
-msgstr ""
+msgstr "הסר אפקט נתיב חי"
 
-#: ../src/selection-chemistry.cpp:933
-#, fuzzy
+#: ../src/selection-chemistry.cpp:976
 msgid "Select <b>object(s)</b> to remove filters from."
-msgstr "בחר את <b>האוביקטים</b> שעליהם יווצר הגרדיאנט."
+msgstr "בחר <b>פריטים</b> מהם יש להסיר מסננים."
 
-#: ../src/selection-chemistry.cpp:943
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1363
+#: ../src/selection-chemistry.cpp:986
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1376
 msgid "Remove filter"
-msgstr ""
+msgstr "הסר מסנן"
 
-#: ../src/selection-chemistry.cpp:952
+#: ../src/selection-chemistry.cpp:995
 msgid "Paste size"
-msgstr ""
+msgstr "הדבק גודל"
 
-#: ../src/selection-chemistry.cpp:960
+#: ../src/selection-chemistry.cpp:1003
 msgid "Paste size separately"
-msgstr ""
+msgstr "הדבק את הגודל בנפרד"
 
-#: ../src/selection-chemistry.cpp:971
+#: ../src/selection-chemistry.cpp:1012
 msgid "Select <b>object(s)</b> to move to the layer above."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להעברה לשכבה מעל."
 
-#: ../src/selection-chemistry.cpp:996
+#: ../src/selection-chemistry.cpp:1038
 msgid "Raise to next layer"
-msgstr ""
+msgstr "העלה לשכבה הבאה."
 
-#: ../src/selection-chemistry.cpp:1002
+#: ../src/selection-chemistry.cpp:1045
 msgid "No more layers above."
-msgstr ""
+msgstr "אין עוד שכבות מעל."
 
-#: ../src/selection-chemistry.cpp:1016
+#: ../src/selection-chemistry.cpp:1057
 msgid "Select <b>object(s)</b> to move to the layer below."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להעברה לשכבה שמתחת."
 
-#: ../src/selection-chemistry.cpp:1041
+#: ../src/selection-chemistry.cpp:1083
 msgid "Lower to previous layer"
-msgstr ""
+msgstr "הנמך לשכבה הקודמת"
 
-#: ../src/selection-chemistry.cpp:1047
+#: ../src/selection-chemistry.cpp:1090
 msgid "No more layers below."
-msgstr ""
+msgstr "אין עוד שכבות מתחת."
 
-#: ../src/selection-chemistry.cpp:1234
+#: ../src/selection-chemistry.cpp:1277
 msgid "Remove transform"
-msgstr ""
+msgstr "הסרת שינוי הצורה"
 
-#: ../src/selection-chemistry.cpp:1343
-msgid "Rotate 90&#176; CW"
-msgstr ""
-
-#: ../src/selection-chemistry.cpp:1367
+#: ../src/selection-chemistry.cpp:1380
 msgid "Rotate 90&#176; CCW"
-msgstr ""
+msgstr "סובב ב־90&#176; נכ\"ש"
 
-#: ../src/selection-chemistry.cpp:1388 ../src/seltrans.cpp:457
-#: ../src/ui/dialog/transformation.cpp:757
+#: ../src/selection-chemistry.cpp:1380
+msgid "Rotate 90&#176; CW"
+msgstr "סובב ב־90&#176; עכ\"ש"
+
+#: ../src/selection-chemistry.cpp:1401
+#: ../src/seltrans.cpp:451
+#: ../src/ui/dialog/transformation.cpp:760
 msgid "Rotate"
-msgstr ""
+msgstr "סובב"
 
-#: ../src/selection-chemistry.cpp:1420
+#: ../src/selection-chemistry.cpp:1448
 msgid "Rotate by pixels"
-msgstr ""
+msgstr "סובב לפי פיקסלים"
 
-#: ../src/selection-chemistry.cpp:1475
+#: ../src/selection-chemistry.cpp:1503
 msgid "Scale by whole factor"
-msgstr ""
+msgstr "התאם את המידות לפי מקדם שלם"
 
-#: ../src/selection-chemistry.cpp:1491
+#: ../src/selection-chemistry.cpp:1518
 msgid "Move vertically"
-msgstr ""
+msgstr "הזז אנכית"
 
-#: ../src/selection-chemistry.cpp:1494
+#: ../src/selection-chemistry.cpp:1521
 msgid "Move horizontally"
-msgstr ""
+msgstr "הזז אופקית"
 
-#: ../src/selection-chemistry.cpp:1497 ../src/selection-chemistry.cpp:1525
-#: ../src/seltrans.cpp:451 ../src/ui/dialog/transformation.cpp:680
+#: ../src/selection-chemistry.cpp:1524
+#: ../src/selection-chemistry.cpp:1550
+#: ../src/seltrans.cpp:445
+#: ../src/ui/dialog/transformation.cpp:681
 msgid "Move"
 msgstr "הזז"
 
-#: ../src/selection-chemistry.cpp:1519
+#: ../src/selection-chemistry.cpp:1544
 msgid "Move vertically by pixels"
-msgstr ""
+msgstr "הזז אנכית לפי פיקסלים"
 
-#: ../src/selection-chemistry.cpp:1522
+#: ../src/selection-chemistry.cpp:1547
 msgid "Move horizontally by pixels"
-msgstr ""
+msgstr "הזז אופקית לפי פיקסלים"
 
-#: ../src/selection-chemistry.cpp:1650
+#: ../src/selection-chemistry.cpp:1675
 msgid "The selection has no applied path effect."
-msgstr ""
+msgstr "על הבחירה לו הוחלו אפקטי נתיב."
 
-#: ../src/selection-chemistry.cpp:1694
+#: ../src/selection-chemistry.cpp:1722
 msgid "The selection has no applied clip path."
-msgstr ""
+msgstr "על הבחירה לו הוחל נתיב קליפ."
 
-#: ../src/selection-chemistry.cpp:1696
+#: ../src/selection-chemistry.cpp:1724
 msgid "The selection has no applied mask."
-msgstr ""
+msgstr "על הבחירה לו הוחלה מסכה."
 
-#: ../src/selection-chemistry.cpp:1854
+#: ../src/selection-chemistry.cpp:1881
 msgid "action|Clone"
-msgstr ""
+msgstr "action|כפילות"
 
-#: ../src/selection-chemistry.cpp:1871
-msgid "Select a <b>clone</b> to unlink."
-msgstr ""
+#: ../src/selection-chemistry.cpp:1897
+msgid "Select <b>clones</b> to relink."
+msgstr "בחר <b>כפילים</b> לקישור מחדש."
+
+#: ../src/selection-chemistry.cpp:1904
+msgid "Copy an <b>object</b> to clipboard to relink clones to."
+msgstr "העתק <b>פריט</b> ללוח הגזירים כדי לקשר אליו את הכפילים מחדש."
+
+#: ../src/selection-chemistry.cpp:1928
+msgid "<b>No clones to relink</b> in the selection."
+msgstr "<b>אין כפילים לחיבור מחדש</b> בבחירה."
 
-#: ../src/selection-chemistry.cpp:1920
+#: ../src/selection-chemistry.cpp:1931
+msgid "Relink clone"
+msgstr "קשר כפיל מחדש"
+
+#: ../src/selection-chemistry.cpp:1945
+msgid "Select <b>clones</b> to unlink."
+msgstr "בחר <b>כפילים</b> לניתוק."
+
+#: ../src/selection-chemistry.cpp:1994
 msgid "<b>No clones to unlink</b> in the selection."
-msgstr ""
+msgstr "<b>אין כפילים לניתוק</b> בבחירה."
 
-#: ../src/selection-chemistry.cpp:1924
+#: ../src/selection-chemistry.cpp:1998
 msgid "Unlink clone"
-msgstr ""
+msgstr "נתק כפיל"
 
-#: ../src/selection-chemistry.cpp:1938
-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 ""
+#: ../src/selection-chemistry.cpp:2011
+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>כפיל</b> כדי להגיע למקור שלו. בחר <b>קיזוז מקושר</b> כדי להגיע למקור שלו. בחר <b>טקסט על נתיב</b> כדי להגיע לנתיב. בחר <b>טקסט צף</b> כדי להגיע למסגרת שלו."
 
-#: ../src/selection-chemistry.cpp:1961
-msgid ""
-"<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, "
-"flowed text?)"
-msgstr ""
+#: ../src/selection-chemistry.cpp:2034
+msgid "<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, flowed text?)"
+msgstr "<b>לא ניתן למצוא</b> את הפריט לבחירה (כפיל יתום, קיזוז, נתיב טקסט, טקסט צף?)"
 
-#: ../src/selection-chemistry.cpp:1967
-msgid ""
-"The object you're trying to select is <b>not visible</b> (it is in &lt;"
-"defs&gt;)"
-msgstr ""
+#: ../src/selection-chemistry.cpp:2040
+msgid "The object you're trying to select is <b>not visible</b> (it is in &lt;defs&gt;)"
+msgstr "הפריט שאתה מנסה לבחור הינו <b>בלתי נראה</b> (זה ב־ &lt;defs&gt;)"
 
-#: ../src/selection-chemistry.cpp:1995
+#: ../src/selection-chemistry.cpp:2086
 msgid "Select <b>object(s)</b> to convert to marker."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להמרה לסמנים."
 
-#: ../src/selection-chemistry.cpp:2061
+#: ../src/selection-chemistry.cpp:2154
 msgid "Objects to marker"
-msgstr ""
+msgstr "פריטים לסמנים"
 
-#: ../src/selection-chemistry.cpp:2090
-#, fuzzy
+#: ../src/selection-chemistry.cpp:2182
 msgid "Select <b>object(s)</b> to convert to guides."
-msgstr "×\91×\97ר ×\90ת <b>×\94×\90×\95×\91×\99ק×\98×\99×\9d</b> ×©×¢×\9c×\99×\94×\9d ×\99×\95×\95צר ×\94×\92ר×\93×\99×\90× ×\98."
+msgstr "×\91×\97ר ×\90ת <b>×\94פר×\99×\98\99×\9d</b> ×\9c×\94×\9eר×\94 ×\9cנת×\99×\91×\99×\9d."
 
-#: ../src/selection-chemistry.cpp:2101
+#: ../src/selection-chemistry.cpp:2194
 msgid "Objects to guides"
-msgstr ""
+msgstr "פריטים לנתיבים"
 
-#: ../src/selection-chemistry.cpp:2118
+#: ../src/selection-chemistry.cpp:2210
 msgid "Select <b>object(s)</b> to convert to pattern."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> להמרה לתבנית."
 
-#: ../src/selection-chemistry.cpp:2205
+#: ../src/selection-chemistry.cpp:2298
 msgid "Objects to pattern"
-msgstr ""
+msgstr "פריטים לתבנית"
 
-#: ../src/selection-chemistry.cpp:2222
+#: ../src/selection-chemistry.cpp:2314
 msgid "Select an <b>object with pattern fill</b> to extract objects from."
-msgstr ""
+msgstr "בחר <b>פריט עם תבנית מילוי</b> כדי לחלץ ממנו פריטים."
 
-#: ../src/selection-chemistry.cpp:2275
+#: ../src/selection-chemistry.cpp:2367
 msgid "<b>No pattern fills</b> in the selection."
-msgstr ""
+msgstr "<b>אין תבנית מילוי</b> בבחירה."
 
-#: ../src/selection-chemistry.cpp:2278
+#: ../src/selection-chemistry.cpp:2370
 msgid "Pattern to objects"
-msgstr ""
+msgstr "תבנית לפריטים"
 
-#: ../src/selection-chemistry.cpp:2364
+#: ../src/selection-chemistry.cpp:2455
 msgid "Select <b>object(s)</b> to make a bitmap copy."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> מהם יעשה עותק מפת סיביות."
 
-#: ../src/selection-chemistry.cpp:2368
-#, fuzzy
+#: ../src/selection-chemistry.cpp:2459
 msgid "Rendering bitmap..."
-msgstr "רנ×\93ר"
+msgstr "×\9e×¢×\91×\93 ×\9eפת ×¡×\99×\91×\99×\95ת..."
 
-#: ../src/selection-chemistry.cpp:2530
+#: ../src/selection-chemistry.cpp:2623
 msgid "Create bitmap"
-msgstr ""
+msgstr "צור מפת סיביות"
 
-#: ../src/selection-chemistry.cpp:2563
+#: ../src/selection-chemistry.cpp:2655
 msgid "Select <b>object(s)</b> to create clippath or mask from."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> מהם יווצר נתיב קליפ או מסכה."
 
-#: ../src/selection-chemistry.cpp:2566
+#: ../src/selection-chemistry.cpp:2658
 msgid "Select mask object and <b>object(s)</b> to apply clippath or mask to."
-msgstr ""
+msgstr "בחר פריט מסכה ו<b>פריט/ים</b> כדי להחיל עליהם נתיב קליפ או מסכה."
 
-#: ../src/selection-chemistry.cpp:2672
+#: ../src/selection-chemistry.cpp:2765
 msgid "Set clipping path"
-msgstr ""
+msgstr "בחר נתיב קליפ"
 
-#: ../src/selection-chemistry.cpp:2674
+#: ../src/selection-chemistry.cpp:2767
 msgid "Set mask"
-msgstr ""
+msgstr "הגדר מסכה"
 
-#: ../src/selection-chemistry.cpp:2688
+#: ../src/selection-chemistry.cpp:2780
 msgid "Select <b>object(s)</b> to remove clippath or mask from."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> מהם יוסרו נתיב קליפ או מסכה."
 
-#: ../src/selection-chemistry.cpp:2756
+#: ../src/selection-chemistry.cpp:2853
 msgid "Release clipping path"
-msgstr ""
+msgstr "שחרר נתיב קליפ"
 
-#: ../src/selection-chemistry.cpp:2758
+#: ../src/selection-chemistry.cpp:2855
 msgid "Release mask"
-msgstr ""
+msgstr "שחרר מסכה"
 
-#: ../src/selection-chemistry.cpp:2769
+#: ../src/selection-chemistry.cpp:2871
 msgid "Select <b>object(s)</b> to fit canvas to."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> אליהם יותאם לוח הציור."
 
-#: ../src/selection-chemistry.cpp:2803
-msgid "Fit page to selection"
-msgstr ""
+#. Fit Page
+#: ../src/selection-chemistry.cpp:2891
+#: ../src/verbs.cpp:2695
+msgid "Fit Page to Selection"
+msgstr "התאם עמוד לבחירה"
+
+#: ../src/selection-chemistry.cpp:2916
+#: ../src/verbs.cpp:2697
+msgid "Fit Page to Drawing"
+msgstr "התאם את העמוד לציור"
+
+#: ../src/selection-chemistry.cpp:2932
+#: ../src/verbs.cpp:2699
+msgid "Fit Page to Selection or Drawing"
+msgstr "התאם את העמוד לבחירה או לציור"
 
 #. TRANSLATORS: only translate and put "Link" in the translation. It means internet link (anchor)
 #: ../src/selection-describer.cpp:43
 msgid "web|Link"
-msgstr ""
+msgstr "קישור"
 
 #: ../src/selection-describer.cpp:45
 msgid "Circle"
 msgstr "מעגל"
 
 #. ellipse
-#: ../src/selection-describer.cpp:47 ../src/selection-describer.cpp:73
-#: ../src/ui/dialog/inkscape-preferences.cpp:424 ../src/verbs.cpp:2425
+#: ../src/selection-describer.cpp:47
+#: ../src/selection-describer.cpp:73
+#: ../src/ui/dialog/inkscape-preferences.cpp:432
+#: ../src/verbs.cpp:2486
+#: ../src/widgets/toolbox.cpp:3427
 msgid "Ellipse"
 msgstr "אליפסה"
 
 #: ../src/selection-describer.cpp:49
 msgid "Flowed text"
-msgstr ""
+msgstr "טקסט צף"
 
 #: ../src/selection-describer.cpp:55
 msgid "Line"
@@ -7538,1187 +7970,1202 @@ msgstr "קו"
 
 #: ../src/selection-describer.cpp:57
 msgid "Path"
-msgstr ""
+msgstr "נתיב"
 
-#: ../src/selection-describer.cpp:59 ../src/widgets/toolbox.cpp:2028
+#: ../src/selection-describer.cpp:59
+#: ../src/widgets/toolbox.cpp:2263
 msgid "Polygon"
-msgstr "פ×\95×\9c×\99×\92×\95×\9f"
+msgstr "×\9eצ×\95×\9c×¢"
 
 #: ../src/selection-describer.cpp:61
 msgid "Polyline"
-msgstr ""
+msgstr "קו משופע"
 
 #. Rectangle
 #: ../src/selection-describer.cpp:63
-#: ../src/ui/dialog/inkscape-preferences.cpp:414 ../src/verbs.cpp:2421
+#: ../src/ui/dialog/inkscape-preferences.cpp:422
+#: ../src/verbs.cpp:2482
 msgid "Rectangle"
-msgstr "×\9e×\9c×\91×\9f"
+msgstr "×\9eר×\95×\91×¢"
 
 #. 3D box
 #: ../src/selection-describer.cpp:65
-#: ../src/ui/dialog/inkscape-preferences.cpp:419 ../src/verbs.cpp:2423
+#: ../src/ui/dialog/inkscape-preferences.cpp:427
+#: ../src/verbs.cpp:2484
 msgid "3D Box"
-msgstr ""
+msgstr "תיבה תלת מימדית"
 
 #: ../src/selection-describer.cpp:71
 msgid "object|Clone"
-msgstr ""
+msgstr "object|כפילות"
 
 #: ../src/selection-describer.cpp:75
 msgid "Offset path"
-msgstr ""
+msgstr "קיזוז נתיב"
 
 #. spiral
 #: ../src/selection-describer.cpp:77
-#: ../src/ui/dialog/inkscape-preferences.cpp:432 ../src/verbs.cpp:2429
+#: ../src/ui/dialog/inkscape-preferences.cpp:440
+#: ../src/verbs.cpp:2490
 msgid "Spiral"
-msgstr ""
+msgstr "ספירלה"
 
 #. star
 #: ../src/selection-describer.cpp:79
-#: ../src/ui/dialog/inkscape-preferences.cpp:428 ../src/verbs.cpp:2427
-#: ../src/widgets/toolbox.cpp:2035
+#: ../src/ui/dialog/inkscape-preferences.cpp:436
+#: ../src/verbs.cpp:2488
+#: ../src/widgets/toolbox.cpp:2270
 msgid "Star"
-msgstr ""
+msgstr "כוכב"
 
-#: ../src/selection-describer.cpp:107
+#: ../src/selection-describer.cpp:115
 msgid "Click selection to toggle scale/rotation handles"
-msgstr ""
+msgstr "לחץ על הבחירה כדי להחליף בין ידיות הסיבוב ושינוי הגודל"
 
 #. no items
-#: ../src/selection-describer.cpp:109
-msgid ""
-"No objects selected. Click, Shift+click, or drag around objects to select."
-msgstr ""
+#: ../src/selection-describer.cpp:117
+msgid "No objects selected. Click, Shift+click, or drag around objects to select."
+msgstr "לא נבחרו פריטים. לחץ, Shift+לחיצה, או גרור מסביב לפריטים כדי לבחור אותם."
 
-#: ../src/selection-describer.cpp:118
+#: ../src/selection-describer.cpp:126
 msgid "root"
-msgstr ""
+msgstr "מקור"
 
-#: ../src/selection-describer.cpp:130
+#: ../src/selection-describer.cpp:138
 #, c-format
 msgid "layer <b>%s</b>"
-msgstr ""
+msgstr "שכבה <b>%s</b>"
 
-#: ../src/selection-describer.cpp:132
+#: ../src/selection-describer.cpp:140
 #, c-format
 msgid "layer <b><i>%s</i></b>"
-msgstr ""
+msgstr "שכבה <b><i>%s</i></b>"
 
-#: ../src/selection-describer.cpp:141
+#: ../src/selection-describer.cpp:149
 #, c-format
 msgid "<i>%s</i>"
-msgstr ""
+msgstr "<i>%s</i>"
 
-#: ../src/selection-describer.cpp:150
+#: ../src/selection-describer.cpp:158
 #, c-format
 msgid " in %s"
-msgstr ""
+msgstr " תחת %s"
 
-#: ../src/selection-describer.cpp:152
+#: ../src/selection-describer.cpp:160
 #, c-format
 msgid " in group %s (%s)"
-msgstr ""
+msgstr " תחת קבוצה %s (%s)"
 
-#: ../src/selection-describer.cpp:154
+#: ../src/selection-describer.cpp:162
 #, c-format
 msgid " in <b>%i</b> parents (%s)"
 msgid_plural " in <b>%i</b> parents (%s)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] " תחת <b>%i</b> הורים (%s)"
+msgstr[1] " תחת <b>%i</b> הורים (%s)"
 
-#: ../src/selection-describer.cpp:157
+#: ../src/selection-describer.cpp:165
 #, c-format
 msgid " in <b>%i</b> layers"
 msgid_plural " in <b>%i</b> layers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] " ב־<b>%i</b> שכבות"
+msgstr[1] " ב־<b>%i</b> שכבות"
 
-#: ../src/selection-describer.cpp:167
+#: ../src/selection-describer.cpp:175
 msgid "Use <b>Shift+D</b> to look up original"
-msgstr ""
+msgstr "השתמש ב־<b>Shift+D</b> כדי לחפש את המקור"
 
-#: ../src/selection-describer.cpp:171
+#: ../src/selection-describer.cpp:179
 msgid "Use <b>Shift+D</b> to look up path"
-msgstr ""
+msgstr "השתמש ב־<b>Shift+D</b> כדי לחפש נתיב"
 
-#: ../src/selection-describer.cpp:175
+#: ../src/selection-describer.cpp:183
 msgid "Use <b>Shift+D</b> to look up frame"
-msgstr ""
+msgstr "השתמש ב־<b>Shift+D</b> כדי לחפש מסגרת"
 
 #. this is only used with 2 or more objects
-#: ../src/selection-describer.cpp:190
+#: ../src/selection-describer.cpp:198
+#: ../src/tweak-context.cpp:204
 #, c-format
 msgid "<b>%i</b> object selected"
 msgid_plural "<b>%i</b> objects selected"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "פריט <b>%i</b> נבחר"
+msgstr[1] "נבחרו <b>%i</b> פריטים"
 
 #. this is only used with 2 or more objects
-#: ../src/selection-describer.cpp:195
+#: ../src/selection-describer.cpp:203
 #, c-format
 msgid "<b>%i</b> object of type <b>%s</b>"
 msgid_plural "<b>%i</b> objects of type <b>%s</b>"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "פריט <b>%i</b> מסוג <b>%s</b>"
+msgstr[1] "<b>%i</b> פריטים מסוג <b>%s</b>"
 
 #. this is only used with 2 or more objects
-#: ../src/selection-describer.cpp:200
+#: ../src/selection-describer.cpp:208
 #, c-format
 msgid "<b>%i</b> object of types <b>%s</b>, <b>%s</b>"
 msgid_plural "<b>%i</b> objects of types <b>%s</b>, <b>%s</b>"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "פריט <b>%i</b> מסוג <b>%s</b>, <b>%s</b>"
+msgstr[1] "<b>%i</b> פריטים מסוג <b>%s</b>, <b>%s</b>"
 
 #. this is only used with 2 or more objects
-#: ../src/selection-describer.cpp:205
+#: ../src/selection-describer.cpp:213
 #, c-format
 msgid "<b>%i</b> object of types <b>%s</b>, <b>%s</b>, <b>%s</b>"
 msgid_plural "<b>%i</b> objects of types <b>%s</b>, <b>%s</b>, <b>%s</b>"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "פריט <b>%i</b> מסוג <b>%s</b>, <b>%s</b>, <b>%s</b>"
+msgstr[1] "<b>%i</b> פריטים מסוג <b>%s</b>, <b>%s</b>, <b>%s</b>"
 
 #. this is only used with 2 or more objects
-#: ../src/selection-describer.cpp:210
+#: ../src/selection-describer.cpp:218
 #, c-format
 msgid "<b>%i</b> object of <b>%i</b> types"
 msgid_plural "<b>%i</b> objects of <b>%i</b> types"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "פריט <b>%i</b> מ־<b>%i</b> סוגים"
+msgstr[1] "<b>%i</b> פריטים מ־<b>%i</b> סוגים"
 
-#: ../src/selection-describer.cpp:215
+#: ../src/selection-describer.cpp:223
 #, c-format
 msgid "%s%s. %s."
-msgstr ""
+msgstr "%s%s. %s."
 
-#: ../src/seltrans.cpp:460 ../src/ui/dialog/transformation.cpp:815
+#: ../src/seltrans.cpp:454
+#: ../src/ui/dialog/transformation.cpp:819
 msgid "Skew"
-msgstr ""
+msgstr "הטייה"
 
-#: ../src/seltrans.cpp:472
+#: ../src/seltrans.cpp:466
 msgid "Set center"
-msgstr ""
+msgstr "הגדר מרכז"
 
-#: ../src/seltrans.cpp:569
-msgid ""
-"<b>Center</b> of rotation and skewing: drag to reposition; scaling with "
-"Shift also uses this center"
-msgstr ""
+#: ../src/seltrans.cpp:563
+msgid "<b>Center</b> of rotation and skewing: drag to reposition; scaling with Shift also uses this center"
+msgstr "<b>מרכז</b> הסיבוב וההטייה: גרור כדי למקם מחדש; שינוי גודל עם  Shift גם עושה שימוש במרכז זה"
 
-#: ../src/seltrans.cpp:596
-msgid ""
-"<b>Squeeze or stretch</b> selection; with <b>Ctrl</b> to scale uniformly; "
-"with <b>Shift</b> to scale around rotation center"
-msgstr ""
+#: ../src/seltrans.cpp:590
+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>דחוס או מתח</b> את הבחירה; with <b>Ctrl</b> כדי לשנות גודל באופן אחיד; לחיצה על <b>Shift</b> כדי לשנות גודל מסביב למרכז הסיבוב"
 
-#: ../src/seltrans.cpp:597
-msgid ""
-"<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</"
-"b> to scale around rotation center"
-msgstr ""
+#: ../src/seltrans.cpp:591
+msgid "<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</b> to scale around rotation center"
+msgstr "<b>שנה את גודל</b> הבחירה; לחיצה על <b>Ctrl</b> כדי לשנות גודל באופן אחיד; לחיצה על <b>Shift</b> כדי לשנות גודל מסביב למרכז הסיבוב"
 
-#: ../src/seltrans.cpp:601
-msgid ""
-"<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to "
-"skew around the opposite side"
-msgstr ""
+#: ../src/seltrans.cpp:595
+msgid "<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to skew around the opposite side"
+msgstr "<b>הטה</b> את הבחירה; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית; לחיצה על <b>Shift</b> כדי להטות סביב הצד הנגדי"
 
-#: ../src/seltrans.cpp:602
-msgid ""
-"<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> "
-"to rotate around the opposite corner"
-msgstr ""
+#: ../src/seltrans.cpp:596
+msgid "<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to rotate around the opposite corner"
+msgstr "<b>סובב</b> את הבחירה; לחיצה על <b>Ctrl</b> כדי להצמד לזווית; לחיצה על <b>Shift</b> to כדי לסובב סביב הפינה הנגדית"
 
-#: ../src/seltrans.cpp:736
+#: ../src/seltrans.cpp:730
 msgid "Reset center"
-msgstr ""
+msgstr "איפוס המרכז"
 
-#: ../src/seltrans.cpp:980 ../src/seltrans.cpp:1079
+#: ../src/seltrans.cpp:975
+#: ../src/seltrans.cpp:1074
 #, c-format
 msgid "<b>Scale</b>: %0.2f%% x %0.2f%%; with <b>Ctrl</b> to lock ratio"
-msgstr ""
+msgstr "<b>שינוי גודל</b>: %0.2f%% x %0.2f%%; לחיצה על <b>Ctrl</b> כדי לנעול יחס"
 
 #. TRANSLATORS: don't modify the first ";"
 #. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1196
+#: ../src/seltrans.cpp:1186
 #, c-format
 msgid "<b>Skew</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
-msgstr ""
+msgstr "<b>הטייה</b>: %0.2f&#176;; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית"
 
 #. TRANSLATORS: don't modify the first ";"
 #. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1255
+#: ../src/seltrans.cpp:1246
 #, c-format
 msgid "<b>Rotate</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
-msgstr ""
+msgstr "<b>סיבוב</b>: %0.2f&#176;; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית"
 
-#: ../src/seltrans.cpp:1296
+#: ../src/seltrans.cpp:1287
 #, c-format
 msgid "Move <b>center</b> to %s, %s"
-msgstr ""
+msgstr "הזז את <b>המרכז</b> אל %s, %s"
 
-#: ../src/seltrans.cpp:1457
+#: ../src/seltrans.cpp:1450
 #, 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 ""
+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:397
+#: ../src/shape-editor.cpp:477
 msgid "Drag curve"
-msgstr ""
+msgstr "גרור עקומה"
 
 #: ../src/sp-anchor.cpp:178
 #, c-format
 msgid "<b>Link</b> to %s"
-msgstr ""
+msgstr "<b>קשר</b> אל %s"
 
 #: ../src/sp-anchor.cpp:182
 msgid "<b>Link</b> without URI"
-msgstr ""
+msgstr "<b>קשר</b> ללא מיקום אחיד"
 
-#: ../src/sp-ellipse.cpp:494 ../src/sp-ellipse.cpp:873
+#: ../src/sp-ellipse.cpp:466
+#: ../src/sp-ellipse.cpp:845
 msgid "<b>Ellipse</b>"
 msgstr "<b>אליפסה</b>"
 
-#: ../src/sp-ellipse.cpp:635
+#: ../src/sp-ellipse.cpp:607
 msgid "<b>Circle</b>"
 msgstr "<b>מעגל</b>"
 
-#: ../src/sp-ellipse.cpp:868
+#: ../src/sp-ellipse.cpp:840
 msgid "<b>Segment</b>"
-msgstr ""
+msgstr "<b>מקטע</b>"
 
-#: ../src/sp-ellipse.cpp:870
+#: ../src/sp-ellipse.cpp:842
 msgid "<b>Arc</b>"
 msgstr "<b>קשת</b>"
 
 #. TRANSLATORS: "Flow region" is an area where text is allowed to flow
-#: ../src/sp-flowregion.cpp:269
+#: ../src/sp-flowregion.cpp:273
+#, c-format
 msgid "Flow region"
-msgstr ""
+msgstr "אזור ציפה"
 
 #. TRANSLATORS: A region "cut out of" a flow region; text is not allowed to flow inside the
 #. * flow excluded region.  flowRegionExclude in SVG 1.2: see
 #. * http://www.w3.org/TR/2004/WD-SVG12-20041027/flow.html#flowRegion-elem and
 #. * http://www.w3.org/TR/2004/WD-SVG12-20041027/flow.html#flowRegionExclude-elem.
-#: ../src/sp-flowregion.cpp:488
+#: ../src/sp-flowregion.cpp:492
+#, c-format
 msgid "Flow excluded region"
-msgstr ""
+msgstr "אזור אל־ציפה"
 
 #: ../src/sp-flowtext.cpp:377
 #, c-format
 msgid "<b>Flowed text</b> (%d character)"
 msgid_plural "<b>Flowed text</b> (%d characters)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>טקסט צף</b> (תו %d)"
+msgstr[1] "<b>טקסט צף</b> (%d תווים)"
 
 #: ../src/sp-flowtext.cpp:379
 #, c-format
 msgid "<b>Linked flowed text</b> (%d character)"
 msgid_plural "<b>Linked flowed text</b> (%d characters)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>טקסט צף מקושר</b> (תו %d)"
+msgstr[1] "<b>טקסט צף מקושר</b> (%d תווים)"
 
-#: ../src/sp-guide.cpp:285
+#: ../src/sp-guide.cpp:287
 msgid "Guides around page"
-msgstr ""
+msgstr "קווים מנחים מסביב לעמוד"
 
-#: ../src/sp-guide.cpp:418
+#: ../src/sp-guide.cpp:420
 #, c-format
 msgid "vertical, at %s"
-msgstr ""
+msgstr "אנכי, ב־%s"
 
-#: ../src/sp-guide.cpp:421
+#: ../src/sp-guide.cpp:423
 #, c-format
 msgid "horizontal, at %s"
-msgstr ""
+msgstr "אופקי, ב־%s"
 
-#: ../src/sp-guide.cpp:426
+#: ../src/sp-guide.cpp:428
 #, c-format
 msgid "at %d degrees, through (%s,%s); <b>Ctrl</b>+click to delete"
-msgstr ""
+msgstr "ב־%d מעלות, דרך (%s,%s); <b>Ctrl</b>+לחיצה למחיקה"
 
-#: ../src/sp-image.cpp:1098
+#: ../src/sp-image.cpp:1101
 msgid "embedded"
-msgstr ""
+msgstr "מוטמע"
 
-#: ../src/sp-image.cpp:1106
+#: ../src/sp-image.cpp:1109
 #, c-format
 msgid "<b>Image with bad reference</b>: %s"
-msgstr ""
+msgstr "<b>תמונה בעלת הפניה שבורה</b>: %s"
 
-#: ../src/sp-image.cpp:1107
+#: ../src/sp-image.cpp:1110
 #, c-format
 msgid "<b>Image</b> %d &#215; %d: %s"
-msgstr ""
+msgstr "<b>תמונה</b> %d &#215; %d: %s"
 
-#: ../src/spiral-context.cpp:341
+#: ../src/spiral-context.cpp:343
 msgid "<b>Ctrl</b>: snap angle"
-msgstr ""
+msgstr "<b>Ctrl</b>: הצמד לזווית"
 
-#: ../src/spiral-context.cpp:343
+#: ../src/spiral-context.cpp:345
 msgid "<b>Alt</b>: lock spiral radius"
-msgstr ""
+msgstr "<b>Alt</b>: נעל את הרדיוס הספירלי"
 
-#: ../src/spiral-context.cpp:466
+#: ../src/spiral-context.cpp:471
 #, c-format
-msgid ""
-"<b>Spiral</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
-msgstr ""
+msgid "<b>Spiral</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
+msgstr "<b>ספירלה</b>: רדיוס %s, זוית %5g&#176;; לחיצה על <b>Ctrl</b> כדי להצמיד לזווית"
 
-#: ../src/spiral-context.cpp:487
+#: ../src/spiral-context.cpp:492
 msgid "Create spiral"
-msgstr ""
+msgstr "צור ספירלה"
 
-#: ../src/sp-item.cpp:959
+#: ../src/sp-item.cpp:1025
 msgid "Object"
-msgstr ""
+msgstr "פריט"
 
-#: ../src/sp-item.cpp:976
+#: ../src/sp-item.cpp:1042
 #, c-format
 msgid "%s; <i>clipped</i>"
-msgstr ""
+msgstr "%s; <i>עם קליפ</i>"
 
-#: ../src/sp-item.cpp:981
+#: ../src/sp-item.cpp:1047
 #, c-format
 msgid "%s; <i>masked</i>"
-msgstr ""
+msgstr "%s; <i>במסכה</i>"
 
-#: ../src/sp-item.cpp:986
+#: ../src/sp-item.cpp:1052
 #, c-format
 msgid "%s; <i>filtered</i>"
-msgstr ""
+msgstr "%s; <i>מסוננים</i>"
 
-#: ../src/sp-item-group.cpp:738
+#: ../src/sp-item-group.cpp:745
 #, c-format
 msgid "<b>Group</b> of <b>%d</b> object"
 msgid_plural "<b>Group</b> of <b>%d</b> objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>קבוצה</b> בעלת פריט <b>%d</b>"
+msgstr[1] "<b>קבוצה</b> בעלת <b>%d</b> פריטים"
 
 #: ../src/sp-line.cpp:188
 msgid "<b>Line</b>"
-msgstr ""
-
-#: ../src/splivarot.cpp:71 ../src/splivarot.cpp:77
-msgid "Union"
-msgstr ""
+msgstr "<b>שורה</b>"
 
-#: ../src/splivarot.cpp:83
+#: ../src/splivarot.cpp:78
 msgid "Intersection"
-msgstr ""
+msgstr "הצטלבות"
 
-#: ../src/splivarot.cpp:89 ../src/splivarot.cpp:95
+#: ../src/splivarot.cpp:84
+#: ../src/splivarot.cpp:90
 msgid "Difference"
-msgstr ""
+msgstr "הבדל"
 
 #: ../src/splivarot.cpp:101
-msgid "Exclusion"
-msgstr ""
-
-#: ../src/splivarot.cpp:106
 msgid "Division"
-msgstr ""
+msgstr "חלוקה"
 
-#: ../src/splivarot.cpp:111
+#: ../src/splivarot.cpp:106
 msgid "Cut path"
-msgstr ""
+msgstr "חיתוך נתיב"
 
-#: ../src/splivarot.cpp:128
+#: ../src/splivarot.cpp:121
 msgid "Select <b>at least 2 paths</b> to perform a boolean operation."
-msgstr ""
+msgstr "בחר <b>לפחות שני נתיבים</b> על מנת לבצע עליהם פעולה בוליאנית."
 
-#: ../src/splivarot.cpp:132
+#: ../src/splivarot.cpp:125
 msgid "Select <b>at least 1 path</b> to perform a boolean union."
-msgstr ""
+msgstr "בחר <b>לפחות נתיב אחד</b> על מנת לבצע עליו איחוד בוליאני."
 
-#: ../src/splivarot.cpp:138
-msgid ""
-"Select <b>exactly 2 paths</b> to perform difference, XOR, division, or path "
-"cut."
-msgstr ""
+#: ../src/splivarot.cpp:131
+msgid "Select <b>exactly 2 paths</b> to perform difference, XOR, division, or path cut."
+msgstr "בחר <b>שני נתיבים בדיוק</b> כדי לבצע הבדל, XOR, חלוקה, או חיתוך נתיב."
 
-#: ../src/splivarot.cpp:155 ../src/splivarot.cpp:170
-msgid ""
-"Unable to determine the <b>z-order</b> of the objects selected for "
-"difference, XOR, division, or path cut."
-msgstr ""
+#: ../src/splivarot.cpp:148
+#: ../src/splivarot.cpp:163
+msgid "Unable to determine the <b>z-order</b> of the objects selected for difference, XOR, division, or path cut."
+msgstr "לא ניתן לאתר את <b>הסדר המימדי</b> של הפריטים שנבחרו לביצוע, XOR, חלוקה, או חיתוך נתיב."
 
-#: ../src/splivarot.cpp:200
-msgid ""
-"One of the objects is <b>not a path</b>, cannot perform boolean operation."
-msgstr ""
+#: ../src/splivarot.cpp:193
+msgid "One of the objects is <b>not a path</b>, cannot perform boolean operation."
+msgstr "אחד הפריטים הוא <b>איננו נתיב</b>, לא ניתן לבצע פעולה בוליאנית."
 
-#: ../src/splivarot.cpp:610
+#: ../src/splivarot.cpp:634
 msgid "Select <b>stroked path(s)</b> to convert stroke to path."
-msgstr ""
+msgstr "בחר <b>נתיב/י קו מתאר</b> כדי להמיר קו מתאר לנתיב."
 
-#: ../src/splivarot.cpp:894
+#: ../src/splivarot.cpp:949
 msgid "Convert stroke to path"
-msgstr ""
+msgstr "המר קו מתאר לנתיב"
 
 #. TRANSLATORS: "to outline" means "to convert stroke to path"
-#: ../src/splivarot.cpp:897
+#: ../src/splivarot.cpp:952
 msgid "<b>No stroked paths</b> in the selection."
-msgstr ""
+msgstr "<b>אין כל נתיבים בעלי קו מתאר </b> בבחירה."
 
-#: ../src/splivarot.cpp:981
+#: ../src/splivarot.cpp:1035
 msgid "Selected object is <b>not a path</b>, cannot inset/outset."
-msgstr ""
+msgstr "הפריט הנבחר הוא <b>אינו נתיב</b>, לא ניתן לצמצם/להרחיב."
 
-#: ../src/splivarot.cpp:1101 ../src/splivarot.cpp:1170
+#: ../src/splivarot.cpp:1154
+#: ../src/splivarot.cpp:1223
 msgid "Create linked offset"
-msgstr ""
+msgstr "צור קיזוז מקושר"
 
-#: ../src/splivarot.cpp:1102 ../src/splivarot.cpp:1171
+#: ../src/splivarot.cpp:1155
+#: ../src/splivarot.cpp:1224
 msgid "Create dynamic offset"
-msgstr ""
+msgstr "צור קיזוז דינמי"
 
-#: ../src/splivarot.cpp:1198
+#: ../src/splivarot.cpp:1249
 msgid "Select <b>path(s)</b> to inset/outset."
-msgstr ""
+msgstr "בחר <b>נתיב/ים</b> להרחיב/לצמצם."
 
-#: ../src/splivarot.cpp:1416
+#: ../src/splivarot.cpp:1467
 msgid "Outset path"
-msgstr ""
+msgstr "הרחב נתיב"
 
-#: ../src/splivarot.cpp:1416
+#: ../src/splivarot.cpp:1467
 msgid "Inset path"
-msgstr ""
+msgstr "צמצם נתיב"
 
-#: ../src/splivarot.cpp:1418
+#: ../src/splivarot.cpp:1469
 msgid "<b>No paths</b> to inset/outset in the selection."
-msgstr ""
+msgstr "<b>אין נתיבים</b> לצימצום/הרחבת הבחירה."
 
-#: ../src/splivarot.cpp:1579
+#: ../src/splivarot.cpp:1644
 msgid "Simplifying paths (separately):"
-msgstr ""
+msgstr "מפשט נתיבים (בנפרד):"
 
-#: ../src/splivarot.cpp:1581
+#: ../src/splivarot.cpp:1646
 msgid "Simplifying paths:"
-msgstr ""
+msgstr "מפשט נתיבים:"
 
-#: ../src/splivarot.cpp:1618
+#: ../src/splivarot.cpp:1683
 #, c-format
 msgid "%s <b>%d</b> of <b>%d</b> paths simplified..."
-msgstr ""
+msgstr "%s <b>%d</b> מתוך <b>%d</b> נתיבים הופשטו..."
 
-#: ../src/splivarot.cpp:1629
+#: ../src/splivarot.cpp:1695
 #, c-format
 msgid "<b>%d</b> paths simplified."
-msgstr ""
+msgstr "<b>%d</b> נתיבים הופשטו."
 
-#: ../src/splivarot.cpp:1645
+#: ../src/splivarot.cpp:1709
 msgid "Select <b>path(s)</b> to simplify."
-msgstr ""
+msgstr "בחר <b>נתיב/ים</b> להפשטה."
 
-#: ../src/splivarot.cpp:1659
+#: ../src/splivarot.cpp:1723
 msgid "Simplify"
 msgstr "פשט"
 
-#: ../src/splivarot.cpp:1661
+#: ../src/splivarot.cpp:1725
 msgid "<b>No paths</b> to simplify in the selection."
-msgstr ""
+msgstr "<b>אין נתיבים</b> להפשטה בבחירה."
+
+#: ../src/sp-lpe-item.cpp:346
+msgid "An exception occurred during execution of the Path Effect."
+msgstr "בוצעה חריגה בעת החלת האפקט על הנתיב."
 
 #. TRANSLATORS COMMENT: %s is either "outset" or "inset" depending on sign
-#: ../src/sp-offset.cpp:432
+#: ../src/sp-offset.cpp:426
 #, c-format
 msgid "<b>Linked offset</b>, %s by %f pt"
-msgstr ""
+msgstr "<b>קיזוז מקושר</b>, %s ב־%f נק'"
 
-#: ../src/sp-offset.cpp:433 ../src/sp-offset.cpp:437
+#: ../src/sp-offset.cpp:427
+#: ../src/sp-offset.cpp:431
 msgid "outset"
-msgstr ""
+msgstr "הרחב"
 
-#: ../src/sp-offset.cpp:433 ../src/sp-offset.cpp:437
+#: ../src/sp-offset.cpp:427
+#: ../src/sp-offset.cpp:431
 msgid "inset"
-msgstr ""
+msgstr "צמצם"
 
 #. TRANSLATORS COMMENT: %s is either "outset" or "inset" depending on sign
-#: ../src/sp-offset.cpp:436
+#: ../src/sp-offset.cpp:430
 #, c-format
 msgid "<b>Dynamic offset</b>, %s by %f pt"
-msgstr ""
+msgstr "<b>קיזוז דינמי</b>, %s ב־%f נק'"
 
-#: ../src/sp-path.cpp:135
+#: ../src/sp-path.cpp:136
 #, c-format
 msgid "<b>Path</b> (%i node, path effect)"
 msgid_plural "<b>Path</b> (%i nodes, path effect)"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>נתיב</b> (מפרק %i, אפקט נתיב)"
+msgstr[1] "<b>נתיב</b> (%i מפרקים, אפקט נתיב)"
 
-#: ../src/sp-path.cpp:138
+#: ../src/sp-path.cpp:139
 #, c-format
 msgid "<b>Path</b> (%i node)"
 msgid_plural "<b>Path</b> (%i nodes)"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../src/sp-path.cpp:540
-#, fuzzy
-msgid "Creating single dot"
-msgstr "צור מחבר חדש"
-
-#: ../src/sp-path.cpp:541
-#, fuzzy
-msgid "Create single dot"
-msgstr "צור מחבר חדש"
+msgstr[0] "<b>נתיב</b> (מפרק %i)"
+msgstr[1] "<b>נתיב</b> (%i מפרקים)"
 
-#: ../src/sp-polygon.cpp:235
+#: ../src/sp-polygon.cpp:226
 msgid "<b>Polygon</b>"
-msgstr ""
+msgstr "<b>מצולע</b>"
 
 #: ../src/sp-polyline.cpp:177
 msgid "<b>Polyline</b>"
-msgstr ""
+msgstr "<b>קו שבור</b>"
 
-#: ../src/sp-rect.cpp:226
+#: ../src/sp-rect.cpp:225
 msgid "<b>Rectangle</b>"
-msgstr ""
+msgstr "<b>מרובע</b>"
 
 #. TRANSLATORS: since turn count isn't an integer, please adjust the
 #. string as needed to deal with an localized plural forms.
 #: ../src/sp-spiral.cpp:324
 #, c-format
 msgid "<b>Spiral</b> with %3f turns"
-msgstr ""
+msgstr "<b>ספירלה</b> בעלת %3f פניות"
 
 #: ../src/sp-star.cpp:307
 #, c-format
 msgid "<b>Star</b> with %d vertex"
 msgid_plural "<b>Star</b> with %d vertices"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>כוכב</b> בעל קודקוד %d"
+msgstr[1] "<b>כוכב</b> בעל %d קודקודים"
 
 #: ../src/sp-star.cpp:311
 #, c-format
 msgid "<b>Polygon</b> with %d vertex"
 msgid_plural "<b>Polygon</b> with %d vertices"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>מצולע</b> בעל קודקוד %d"
+msgstr[1] "<b>מצולע</b> בעל %d קודקודים"
 
 #: ../src/sp-switch.cpp:100
 #, c-format
 msgid "<b>Conditional group</b> of <b>%d</b> object"
 msgid_plural "<b>Conditional group</b> of <b>%d</b> objects"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "<b>קבוצה מותנית</b> בעלת פריט <b>%d</b>"
+msgstr[1] "<b>קבוצה מותנית</b> בעלת <b>%d</b> פריטים"
 
 #. TRANSLATORS: For description of font with no name.
-#: ../src/sp-text.cpp:414
+#: ../src/sp-text.cpp:419
 msgid "&lt;no name found&gt;"
-msgstr ""
+msgstr "&lt;שם לא נמצא&gt;"
 
-#: ../src/sp-text.cpp:420
+#: ../src/sp-text.cpp:425
 #, c-format
 msgid "<b>Text on path</b> (%s, %s)"
-msgstr ""
+msgstr "<b>טקסט על נתיב</b> (%s, %s)"
 
-#: ../src/sp-text.cpp:421
+#: ../src/sp-text.cpp:426
 #, c-format
 msgid "<b>Text</b> (%s, %s)"
-msgstr ""
+msgstr "<b>טקסט</b> (%s, %s)"
 
 #: ../src/sp-tref.cpp:368
 #, c-format
 msgid "<b>Cloned character data</b>%s%s"
-msgstr ""
+msgstr "<b>נתוני תו משוכפל</b>%s%s"
 
 #: ../src/sp-tref.cpp:369
 msgid " from "
-msgstr ""
+msgstr " מאת "
 
 #: ../src/sp-tref.cpp:374
 msgid "<b>Orphaned cloned character data</b>"
-msgstr ""
+msgstr "<b>נתוני תו משוכפלים יתומים</b>"
 
 #: ../src/sp-tspan.cpp:284
 msgid "<b>Text span</b>"
-msgstr ""
+msgstr "<b>פריסת שורות</b>"
 
 #. TRANSLATORS: Used for statusbar description for long <use> chains:
 #. * "Clone of: Clone of: ... in Layer 1".
-#: ../src/sp-use.cpp:318
+#: ../src/sp-use.cpp:327
 msgid "..."
-msgstr ""
+msgstr "..."
 
-#: ../src/sp-use.cpp:326
+#: ../src/sp-use.cpp:335
 #, c-format
 msgid "<b>Clone</b> of: %s"
-msgstr ""
+msgstr "<b>כפיל</b> של: %s"
 
-#: ../src/sp-use.cpp:330
+#: ../src/sp-use.cpp:339
 msgid "<b>Orphaned clone</b>"
-msgstr ""
+msgstr "<b>כפיל יתום</b>"
 
-#: ../src/star-context.cpp:352
+#: ../src/star-context.cpp:355
 msgid "<b>Ctrl</b>: snap angle; keep rays radial"
-msgstr ""
+msgstr "<b>Ctrl</b>: הצמד לזווית; השאר את הקרניים מעוגלות"
 
-#: ../src/star-context.cpp:476
+#: ../src/star-context.cpp:481
 #, c-format
-msgid ""
-"<b>Polygon</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
-msgstr ""
+msgid "<b>Polygon</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
+msgstr "<b>מצולע</b>: רדיוס %s, זווית %5g&#176;; לחצו על <b>Ctrl</b> להצמדה לזווית"
 
-#: ../src/star-context.cpp:477
+#: ../src/star-context.cpp:482
 #, c-format
 msgid "<b>Star</b>: radius %s, angle %5g&#176;; with <b>Ctrl</b> to snap angle"
-msgstr ""
+msgstr "<b>כוכב </b>: רדיוס %s, זווית %5g&#176;; לחצו על <b>Ctrl</b> כדי להצמיד לזווית"
 
-#: ../src/star-context.cpp:500
+#: ../src/star-context.cpp:505
 msgid "Create star"
-msgstr ""
+msgstr "צור כוכב"
 
 #: ../src/text-chemistry.cpp:104
 msgid "Select <b>a text and a path</b> to put text on path."
-msgstr ""
+msgstr "בחר <b>טקסט ונתיב</b> כדי לשים טקסט על נתיב."
 
 #: ../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 ""
+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 "פריט טקסט זה  <b>כבר נמצא על נתיב</b>. הסר אותו מהנתיב הראשון תחילה. השתמשו ב־ <b>Shift+D</b> כדי לחפש אחר הנתיב שלו."
 
 #. 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 ""
+msgid "You cannot put text on a rectangle in this version. Convert rectangle to path first."
+msgstr "לא ניתן לשים טקסט על מרובע בגירסה זו. המר את המרובע לנתיב תחילה."
 
 #: ../src/text-chemistry.cpp:125
 msgid "The flowed text(s) must be <b>visible</b> in order to be put on a path."
-msgstr ""
+msgstr "הטקסט/ים המוזרמים חייבים להיות <b>נראים</b> כדי להצמיד אותם לנתיב"
 
-#: ../src/text-chemistry.cpp:192 ../src/verbs.cpp:2283
+#: ../src/text-chemistry.cpp:192
+#: ../src/verbs.cpp:2340
 msgid "Put text on path"
-msgstr ""
+msgstr "שים טקסט על נתיב"
 
 #: ../src/text-chemistry.cpp:204
 msgid "Select <b>a text on path</b> to remove it from path."
-msgstr ""
+msgstr "בחר <b>בטקסט על נתיב</b> כדי להסיר אותו מהנתיב."
 
 #: ../src/text-chemistry.cpp:226
 msgid "<b>No texts-on-paths</b> in the selection."
-msgstr ""
+msgstr "<b>אין טקסטים על נתיבים</b> בבחירה."
 
-#: ../src/text-chemistry.cpp:229 ../src/verbs.cpp:2285
+#: ../src/text-chemistry.cpp:229
+#: ../src/verbs.cpp:2342
 msgid "Remove text from path"
-msgstr ""
+msgstr "הסר טקסט מנתיב"
 
-#: ../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 ""
+msgstr "בחר <b>טקסט/ים</b> מהם יש להסיר ריווח אותיות."
 
 #: ../src/text-chemistry.cpp:293
 msgid "Remove manual kerns"
-msgstr ""
+msgstr "הסר ריווח אותיות ידני"
 
 #: ../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 ""
+msgid "Select <b>a text</b> and one or more <b>paths or shapes</b> to flow text into frame."
+msgstr "בחר <b>טקסט</b> ו<b>נתיב או צורה</b> אחדים או רבים כדי לגרום לטקסט לצוף אל תוך המסגרת."
 
 #: ../src/text-chemistry.cpp:381
 msgid "Flow text into shape"
-msgstr ""
+msgstr "גרום לטקסט לצוף אל תוך הצורה"
 
 #: ../src/text-chemistry.cpp:403
 msgid "Select <b>a flowed text</b> to unflow it."
-msgstr ""
+msgstr "בחר <b>טקסט צף</b> על מנת לבטל את ציפתו."
 
 #: ../src/text-chemistry.cpp:470
 msgid "Unflow flowed text"
-msgstr ""
+msgstr "בטל ציפת טקסט צף"
 
 #: ../src/text-chemistry.cpp:482
 msgid "Select <b>flowed text(s)</b> to convert."
-msgstr ""
+msgstr "בחר <b>טקסט/ים מרחף/ים</b> להמרה."
 
 #: ../src/text-chemistry.cpp:500
 msgid "The flowed text(s) must be <b>visible</b> in order to be converted."
-msgstr ""
+msgstr "על הטקסט/ים הצפים להיות <b>נראים</b> על מנת שניתן יהי להמיר אותו/ם."
 
 #: ../src/text-chemistry.cpp:528
 msgid "Convert flowed text to text"
-msgstr ""
+msgstr "המר טקסט צף לטקסט"
 
 #: ../src/text-chemistry.cpp:533
 msgid "<b>No flowed text(s)</b> to convert in the selection."
-msgstr ""
+msgstr "<b>אין טקסט/ים צף/ים</b> להמרה בבחירה."
 
-#: ../src/text-context.cpp:452
+#: ../src/text-context.cpp:461
 msgid "<b>Click</b> to edit the text, <b>drag</b> to select part of the text."
-msgstr ""
+msgstr "<b>לחץ</b> כדי לערוך את הטקסט, <b>גרור</b> כדי לבחור חלק מהטקסט."
 
-#: ../src/text-context.cpp:454
-msgid ""
-"<b>Click</b> to edit the flowed text, <b>drag</b> to select part of the text."
-msgstr ""
+#: ../src/text-context.cpp:463
+msgid "<b>Click</b> to edit the flowed text, <b>drag</b> to select part of the text."
+msgstr "<b>לחץ</b> כדי לערוך את הטקסט הצף, <b>גרור</b> כדי לבחור חלק מהטקסט."
 
-#: ../src/text-context.cpp:508
+#: ../src/text-context.cpp:517
 msgid "Create text"
-msgstr ""
+msgstr "צור טקסט"
 
-#: ../src/text-context.cpp:532
+#: ../src/text-context.cpp:541
 msgid "Non-printable character"
-msgstr ""
+msgstr "תו שאינו ניתן להדפסה"
 
-#: ../src/text-context.cpp:547
+#: ../src/text-context.cpp:556
 msgid "Insert Unicode character"
-msgstr ""
+msgstr "הזן תו יוניקוד"
 
-#: ../src/text-context.cpp:582
+#: ../src/text-context.cpp:591
 #, c-format
 msgid "Unicode (<b>Enter</b> to finish): %s: %s"
-msgstr ""
+msgstr "יוניקוד (<b>Enter</b> לסיום): %s: %s"
 
-#: ../src/text-context.cpp:584 ../src/text-context.cpp:849
+#: ../src/text-context.cpp:593
+#: ../src/text-context.cpp:868
 msgid "Unicode (<b>Enter</b> to finish): "
-msgstr ""
+msgstr "יוניקוד (<b>Enter</b> לסיום): "
 
-#: ../src/text-context.cpp:659
+#: ../src/text-context.cpp:668
 #, c-format
 msgid "<b>Flowed text frame</b>: %s &#215; %s"
-msgstr ""
+msgstr "<b>תבנית טקסט צף</b>: %s &#215; %s"
 
-#: ../src/text-context.cpp:691 ../src/text-context.cpp:1544
+#: ../src/text-context.cpp:700
+#: ../src/text-context.cpp:1619
 msgid "Type text; <b>Enter</b> to start new line."
-msgstr ""
+msgstr "הזן טקסט; <b>Enter</b> להתחלת שורה חדשה."
 
-#: ../src/text-context.cpp:704
+#: ../src/text-context.cpp:713
 msgid "Flowed text is created."
-msgstr ""
+msgstr "טקסט צף נוצר."
 
-#: ../src/text-context.cpp:706
+#: ../src/text-context.cpp:715
 msgid "Create flowed text"
-msgstr ""
+msgstr "צור טקסט צף"
 
-#: ../src/text-context.cpp:708
-msgid ""
-"The frame is <b>too small</b> for the current font size. Flowed text not "
-"created."
-msgstr ""
+#: ../src/text-context.cpp:717
+msgid "The frame is <b>too small</b> for the current font size. Flowed text not created."
+msgstr "המסגרת <b>קטנה מדי</b> עבור גודל הגופן הנוכחי. הטקסט הצף לא נוצר."
 
-#: ../src/text-context.cpp:834
+#: ../src/text-context.cpp:853
 msgid "No-break space"
-msgstr ""
+msgstr "רווח ללא עצירה"
 
-#: ../src/text-context.cpp:836
+#: ../src/text-context.cpp:855
 msgid "Insert no-break space"
-msgstr ""
+msgstr "הוסף רווח ללא עצירה"
 
-#: ../src/text-context.cpp:873
+#: ../src/text-context.cpp:892
 msgid "Make bold"
-msgstr ""
+msgstr "הפוך למודגש"
 
-#: ../src/text-context.cpp:891
+#: ../src/text-context.cpp:910
 msgid "Make italic"
-msgstr ""
+msgstr "הפוך לנטוי"
 
-#: ../src/text-context.cpp:930
+#: ../src/text-context.cpp:949
 msgid "New line"
-msgstr ""
+msgstr "שורה חדשה"
 
-#: ../src/text-context.cpp:964
+#: ../src/text-context.cpp:983
 msgid "Backspace"
-msgstr ""
+msgstr "מחק אחורה"
 
-#: ../src/text-context.cpp:1012
+#: ../src/text-context.cpp:1031
 msgid "Kern to the left"
-msgstr ""
+msgstr "הסט את הריווח לשמאל"
 
-#: ../src/text-context.cpp:1034
+#: ../src/text-context.cpp:1056
 msgid "Kern to the right"
-msgstr ""
+msgstr "הסט את הריווח לימין"
 
-#: ../src/text-context.cpp:1056
+#: ../src/text-context.cpp:1081
 msgid "Kern up"
-msgstr ""
+msgstr "רווח למעלה"
 
-#: ../src/text-context.cpp:1079
+#: ../src/text-context.cpp:1107
 msgid "Kern down"
-msgstr ""
+msgstr "רווח למטה"
 
-#: ../src/text-context.cpp:1135
+#: ../src/text-context.cpp:1184
 msgid "Rotate counterclockwise"
-msgstr ""
+msgstr "סובב נגד כיוון השעון"
 
-#: ../src/text-context.cpp:1156
+#: ../src/text-context.cpp:1205
 msgid "Rotate clockwise"
-msgstr ""
+msgstr "סובב עם כיוון השעון"
 
-#: ../src/text-context.cpp:1173
+#: ../src/text-context.cpp:1222
 msgid "Contract line spacing"
-msgstr ""
+msgstr "צמצם את מרווח השורות"
 
-#: ../src/text-context.cpp:1181
+#: ../src/text-context.cpp:1230
 msgid "Contract letter spacing"
-msgstr ""
+msgstr "צמצם את הרווח בין האותיות"
 
-#: ../src/text-context.cpp:1200
+#: ../src/text-context.cpp:1249
 msgid "Expand line spacing"
-msgstr ""
+msgstr "הרחב את הרווח שבין השורות"
 
-#: ../src/text-context.cpp:1208
+#: ../src/text-context.cpp:1257
 msgid "Expand letter spacing"
-msgstr ""
+msgstr "הרחב את הרווח שבין האותיות"
 
-#: ../src/text-context.cpp:1312
+#: ../src/text-context.cpp:1384
 msgid "Paste text"
-msgstr ""
+msgstr "הדבק טקסט"
 
-#: ../src/text-context.cpp:1542
+#: ../src/text-context.cpp:1617
 msgid "Type flowed text; <b>Enter</b> to start new paragraph."
-msgstr ""
+msgstr "הקלד טקסט צף; <b>Enter</b> כדי להתחיל פיסקה חדשה."
 
-#: ../src/text-context.cpp:1552 ../src/tools-switch.cpp:211
-msgid ""
-"<b>Click</b> to select or create text, <b>drag</b> to create flowed text; "
-"then type."
-msgstr ""
+#: ../src/text-context.cpp:1627
+#: ../src/tools-switch.cpp:190
+msgid "<b>Click</b> to select or create text, <b>drag</b> to create flowed text; then type."
+msgstr "<b>לחץ</b> לבחירה או צור טקסט, <b>גרור</b> ליצירת טקסט צף; ואז הקלד."
 
-#: ../src/text-context.cpp:1659
+#: ../src/text-context.cpp:1737
 msgid "Type text"
-msgstr ""
+msgstr "הקלד טקסט"
 
 #: ../src/text-editing.cpp:40
 msgid "You cannot edit <b>cloned character data</b>."
-msgstr ""
+msgstr "אינך יכול לערוך <b>נתוני תו משוכפלים</b>."
 
-#: ../src/tools-switch.cpp:151
-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: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 "כדי לערוך נתיב, <b>לחץ</b>, <b>Shift+לחיצה</b>, או <b>גרור מסביב</b> למפרקים כדי לבחור אותם, ואז <b>גרור</b> את המפרקים והידיות. <b>לחץ</b> על פריט כדי לבחור אותו."
 
-#: ../src/tools-switch.cpp:157
+#: ../src/tools-switch.cpp:136
 msgid "To tweak a path by pushing, select it and drag over it."
-msgstr ""
+msgstr "כדי לצבוט נתיב על ידי דחיפה, בחר אותו וגרור מעליו."
 
-#: ../src/tools-switch.cpp:163
-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: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>גרור</b> כדי ליצור מרובע. <b>גרור את הפקדים</b> כדי לעגל את הפינות ולשנות גודל. <b>לחץ</b> לבחירה."
 
-#: ../src/tools-switch.cpp:169
-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: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>גרור</b> כדי ליצור תיבה תלת מימדית. <b>גרור את הפקדים</b> כדי לשנות גודל בפרספקטיבה. <b>לחץ</b> לבחירה (לחיצה על <b>Ctrl+Alt</b> לפאות בודדות)."
 
-#: ../src/tools-switch.cpp:175
-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: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>גרור</b> כדי ליצור אליפסה. <b>גרור את הפקדים</b> כדי ליצור קשת או מקטע. <b>לחץ</b> לבחירה."
 
-#: ../src/tools-switch.cpp:181
-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: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>גרור</b> כדי ליצור כטכב. <b>גרור את הפקדים</b> כדי לערוך את צורת הכוכב. <b>לחץ</b> לבחירה."
 
-#: ../src/tools-switch.cpp:187
-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: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>גרור</b> כדי ליצור ספירלה. <b>גרור את הפקדים</b> כדי לערוך את צורת הספירלה. <b>לחץ</b> לבחירה."
 
-#: ../src/tools-switch.cpp:193
-msgid ""
-"<b>Drag</b> to create a freehand line. Start drawing with <b>Shift</b> to "
-"append to selected path. <b>Ctrl+click</b> to create single dots."
-msgstr ""
+#: ../src/tools-switch.cpp:172
+msgid "<b>Drag</b> to create a freehand line. Start drawing with <b>Shift</b> to append to selected path. <b>Ctrl+click</b> to create single dots."
+msgstr "<b>גרור</b> כדי ליצור קו ביד חופשית. התחל לצייר עם <b>Shift</b> כדי להצטרף לנתיב הנבחר. <b>Ctrl+לחיצה</b> כדי ליצור נקודות בודדות."
 
-#: ../src/tools-switch.cpp:199
-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."
-msgstr ""
+#: ../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."
+msgstr "<b>לחץ</b> או <b>לחץ וגרור</b> כדי להתחיל נתיב; לחיצה על <b>Shift</b> כדי להצטרף לנתיב קיים. <b>Ctrl+לחיצה</b> כדי ליצור נקודות בודדות."
 
-#: ../src/tools-switch.cpp:205
-msgid ""
-"<b>Drag</b> to draw a calligraphic stroke; with <b>Ctrl</b> to track a "
-"guide, with <b>Alt</b> to thin/thicken. <b>Arrow keys</b> adjust width (left/"
-"right) and angle (up/down)."
-msgstr ""
+#: ../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>גרור</b> כדי לצייר קו מתאר קליגרפי; לחיצה על<b>Ctrl</b> כדי לעקוב אחר קו מנחה,  <b>מקשי החיצים</b> כדי להתאים את העובי (שמאלה/ימינה) ואת הזווית (למעלה/למטה)."
 
-#: ../src/tools-switch.cpp:217
-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: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>גרור</b> או <b>לחץ כפול</b> כדי ליצור מדרג עבור הפריטים הנבחרים, <b>גרור את הידיות</b> כדי לכוונן את המדרגים."
 
-#: ../src/tools-switch.cpp:223
-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:202
+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:235
+#: ../src/tools-switch.cpp:214
 msgid "<b>Click and drag</b> between shapes to create a connector."
-msgstr ""
+msgstr "<b>לחץ וגרור</b> בין צורות כדי ליצור מחבר."
 
-#: ../src/tools-switch.cpp:241
-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: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>לחץ</b> כדי לצבוע איזור תחום, <b>Shift+לחיצה</b> כדי לאחד את המילוי החדש עם הבחירה הנוכחית, <b>Ctrl+לחיצה</b> כדי לשנות את המילוי וקו המתאר של הפריט שנבחר להגדרות הנוכחיות."
 
-#: ../src/tools-switch.cpp:247
+#: ../src/tools-switch.cpp:226
 msgid "<b>Drag</b> to erase."
-msgstr ""
+msgstr "<b>גרור</b> למחיקה."
+
+#: ../src/tools-switch.cpp:232
+msgid "Choose a subtool from the toolbar"
+msgstr "בחר תת־כלי מסרגל הכלים"
 
 #: ../src/trace/potrace/inkscape-potrace.cpp:524
 #: ../src/trace/potrace/inkscape-potrace.cpp:598
 #, c-format
 msgid "Trace: %d.  %ld nodes"
-msgstr ""
+msgstr "מעקב: %d.  %ld מפרקים"
 
-#: ../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 ""
+msgstr "בחר <b>תמונה</b> למעקב"
 
 #: ../src/trace/trace.cpp:106
 msgid "Select only one <b>image</b> to trace"
-msgstr ""
+msgstr "בחר <b>תמונה</b> אחת בלבד למעקב"
 
 #: ../src/trace/trace.cpp:124
 msgid "Select one image and one or more shapes above it"
-msgstr ""
+msgstr "בחר תמונה אחת ואחת או יותר צורות מעליה"
 
 #: ../src/trace/trace.cpp:234
 msgid "Trace: No active desktop"
-msgstr ""
+msgstr "מעקב: אין שולחן עבודה פעיל"
 
 #: ../src/trace/trace.cpp:333
 msgid "Invalid SIOX result"
-msgstr ""
+msgstr "תוצאת חילוץ הפריטים שגויה"
 
 #: ../src/trace/trace.cpp:438
 msgid "Trace: No active document"
-msgstr ""
+msgstr "מעקב: אין מסמך פעיל"
 
 #: ../src/trace/trace.cpp:461
 msgid "Trace: Image has no bitmap data"
-msgstr ""
+msgstr "מעקב: לתמונה אין נתוני מפת סיביות"
 
 #: ../src/trace/trace.cpp:468
 msgid "Trace: Starting trace..."
-msgstr ""
+msgstr "מעקב: מתחיל במעקב..."
 
 #. ## inform the document, so we can undo
 #: ../src/trace/trace.cpp:570
 msgid "Trace bitmap"
-msgstr ""
+msgstr "עקוב אחר מפת הסיכיות"
 
 #: ../src/trace/trace.cpp:574
 #, c-format
 msgid "Trace: Done. %ld nodes created"
-msgstr ""
+msgstr "מעקב: בוצע. נוצרו %ld מפרקים"
 
-#: ../src/tweak-context.cpp:960
-msgid "<b>Nothing selected!</b> Select objects to tweak."
-msgstr ""
+#: ../src/tweak-context.cpp:206
+#, c-format
+msgid "<b>Nothing</b> selected"
+msgstr "לא נבחר <b>שום דבר</b>."
 
-#: ../src/tweak-context.cpp:965
+#: ../src/tweak-context.cpp:212
 #, c-format
-msgid "<b>Pushing %d</b> selected object"
-msgid_plural "<b>Pushing %d</b> selected objects"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%s. Drag to <b>move</b>."
+msgstr "%s. גרור כדי <b>להזיז</b>."
 
-#: ../src/tweak-context.cpp:970
+#: ../src/tweak-context.cpp:217
 #, c-format
-msgid "<b>Shrinking %d</b> selected object"
-msgid_plural "<b>Shrinking %d</b> selected objects"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%s. Drag or click to <b>move in</b>; with Shift to <b>move out</b>."
+msgstr "%s. גרור או לחץ כדי <b>להזיז פנימה</b>; עם Shift כדי <b>להזיז החוצה</b>."
 
-#: ../src/tweak-context.cpp:975
+#: ../src/tweak-context.cpp:220
 #, c-format
-msgid "<b>Growing %d</b> selected object"
-msgid_plural "<b>Growing %d</b> selected objects"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%s. Drag or click to <b>move randomly</b>."
+msgstr "%s. גרור או לחץ כדי <b>להזיז אקראית</b>."
 
-#: ../src/tweak-context.cpp:980
+#: ../src/tweak-context.cpp:223
 #, c-format
-msgid "<b>Attracting %d</b> selected object"
-msgid_plural "<b>Attracting %d</b> selected objects"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%s. Drag or click to <b>scale down</b>; with Shift to <b>scale up</b>."
+msgstr "%s. גרור או לחץ כדי<b>להקטין</b>; עם Shift כדי <b>להגדיל</b>."
 
-#: ../src/tweak-context.cpp:985
+#: ../src/tweak-context.cpp:226
 #, c-format
-msgid "<b>Repelling %d</b> selected object"
-msgid_plural "<b>Repelling %d</b> selected objects"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%s. Drag or click to <b>rotate clockwise</b>; with Shift, <b>counterclockwise</b>."
+msgstr "%s. גרור או לחץ כדי <b>להטות עם כיוון השעון</b>; עם Shift, <b>נגד כיוון השעון</b>."
 
-#: ../src/tweak-context.cpp:990
+#: ../src/tweak-context.cpp:229
 #, c-format
-msgid "<b>Roughening %d</b> selected object"
-msgid_plural "<b>Roughening %d</b> selected objects"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%s. Drag or click to <b>duplicate</b>; with Shift, <b>delete</b>."
+msgstr "%s. גרור או לחץ כדי <b>לשכפל</b>; עם Shift, <b>למחוק</b>."
 
-#: ../src/tweak-context.cpp:995
+#: ../src/tweak-context.cpp:232
 #, c-format
-msgid "<b>Painting %d</b> selected object"
-msgid_plural "<b>Painting %d</b> selected objects"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%s. Drag to <b>push paths</b>."
+msgstr "%s. גרור כדי <b>לדחוף נתיבים</b>."
 
-#: ../src/tweak-context.cpp:1000
+#: ../src/tweak-context.cpp:236
 #, c-format
-msgid "<b>Jittering colors in %d</b> selected object"
-msgid_plural "<b>Jittering colors in %d</b> selected objects"
-msgstr[0] ""
-msgstr[1] ""
+msgid "%s. Drag or click to <b>inset paths</b>; with Shift to <b>outset</b>."
+msgstr "%s. גרור או לחץ כדי <b>לכנס נתיבים</b>; עם Shift כדי <b>להרחיק כלפי חוץ</b>."
 
-#: ../src/tweak-context.cpp:1040
-msgid "Push tweak"
-msgstr ""
+#: ../src/tweak-context.cpp:244
+#, c-format
+msgid "%s. Drag or click to <b>attract paths</b>; with Shift to <b>repel</b>."
+msgstr "%s. גרור או לחץ כדי <b>למשוך נתיבים</b>; עם Shift כדי <b>לדחות</b>."
 
-#: ../src/tweak-context.cpp:1044
-msgid "Shrink tweak"
-msgstr ""
+#: ../src/tweak-context.cpp:252
+#, c-format
+msgid "%s. Drag or click to <b>roughen paths</b>."
+msgstr "%s. גרור או לחץ כדי <b>לחספס נתיבים</b>."
 
-#: ../src/tweak-context.cpp:1048
-msgid "Grow tweak"
-msgstr ""
+#: ../src/tweak-context.cpp:256
+#, c-format
+msgid "%s. Drag or click to <b>paint objects</b> with color."
+msgstr "%s. גרור או לחץ כדי <b>לצבוע פריטים</b> בצבע."
 
-#: ../src/tweak-context.cpp:1052
-msgid "Attract tweak"
-msgstr ""
+#: ../src/tweak-context.cpp:259
+#, c-format
+msgid "%s. Drag or click to <b>randomize colors</b>."
+msgstr "%s. גרור או לחץ כדי <b>לשנות צבעים באקראי</b>."
 
-#: ../src/tweak-context.cpp:1056
-msgid "Repel tweak"
-msgstr ""
+#: ../src/tweak-context.cpp:263
+#, c-format
+msgid "%s. Drag or click to <b>increase blur</b>; with Shift to <b>decrease</b>."
+msgstr "%s. גרור או לחץ כדי <b>להגביר את הטישטוש</b>; עם Shift כדי <b>להפחית</b>."
 
-#: ../src/tweak-context.cpp:1060
-msgid "Roughen tweak"
-msgstr ""
+#: ../src/tweak-context.cpp:1211
+msgid "<b>Nothing selected!</b> Select objects to tweak."
+msgstr "<b>לא נבחר כלום!</b> בחר פריטים לעיוות.."
+
+#: ../src/tweak-context.cpp:1247
+msgid "Move tweak"
+msgstr "שיפור הזזה"
+
+#: ../src/tweak-context.cpp:1251
+msgid "Move in/out tweak"
+msgstr "עיוות בהזזה פנימה/החוצה"
+
+#: ../src/tweak-context.cpp:1255
+msgid "Move jitter tweak"
+msgstr "עיוות בהזזה מזערית"
+
+#: ../src/tweak-context.cpp:1259
+msgid "Scale tweak"
+msgstr "עיוות במתיחה"
+
+#: ../src/tweak-context.cpp:1263
+msgid "Rotate tweak"
+msgstr "עיוות בהטייה"
+
+#: ../src/tweak-context.cpp:1267
+msgid "Duplicate/delete tweak"
+msgstr "עיוות במחיקה/שיכפול"
+
+#: ../src/tweak-context.cpp:1271
+msgid "Push path tweak"
+msgstr "עיוות בדחיפת נתיב"
+
+#: ../src/tweak-context.cpp:1275
+msgid "Shrink/grow path tweak"
+msgstr "עיוות בכיווץ/הגדלה"
+
+#: ../src/tweak-context.cpp:1279
+msgid "Attract/repel path tweak"
+msgstr "עיוות במשיכה/דחייה"
+
+#: ../src/tweak-context.cpp:1283
+msgid "Roughen path tweak"
+msgstr "עיוות בחיספוס נתיב"
 
-#: ../src/tweak-context.cpp:1064
+#: ../src/tweak-context.cpp:1287
 msgid "Color paint tweak"
-msgstr ""
+msgstr "עיוות בצביעת בצע"
 
-#: ../src/tweak-context.cpp:1068
+#: ../src/tweak-context.cpp:1291
 msgid "Color jitter tweak"
-msgstr ""
+msgstr "עיוות בבילבול צבע"
+
+#: ../src/tweak-context.cpp:1295
+msgid "Blur tweak"
+msgstr "שיפור לטשטוש"
 
 #. check whether something is selected
-#: ../src/ui/clipboard.cpp:205
+#: ../src/ui/clipboard.cpp:224
 msgid "Nothing was copied."
-msgstr ""
+msgstr "לא הועתק דבר."
 
-#: ../src/ui/clipboard.cpp:266 ../src/ui/clipboard.cpp:428
-#: ../src/ui/clipboard.cpp:452
+#: ../src/ui/clipboard.cpp:285
+#: ../src/ui/clipboard.cpp:481
+#: ../src/ui/clipboard.cpp:505
 msgid "Nothing on the clipboard."
-msgstr ""
+msgstr "אין דבר בלוח הגזירים"
 
-#: ../src/ui/clipboard.cpp:288
+#: ../src/ui/clipboard.cpp:341
 msgid "Select <b>object(s)</b> to paste style to."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> שאליהן יודבק הסגנון."
 
-#: ../src/ui/clipboard.cpp:294 ../src/ui/clipboard.cpp:311
+#: ../src/ui/clipboard.cpp:347
+#: ../src/ui/clipboard.cpp:364
 msgid "No style on the clipboard."
-msgstr ""
+msgstr "אין סגנון בלוח הגזירים."
 
-#: ../src/ui/clipboard.cpp:333
+#: ../src/ui/clipboard.cpp:386
 msgid "Select <b>object(s)</b> to paste size to."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> אליהם יודבק הגודל."
 
-#: ../src/ui/clipboard.cpp:340
+#: ../src/ui/clipboard.cpp:393
 msgid "No size on the clipboard."
-msgstr ""
+msgstr "אין גודל בלוח הגזירים."
 
-#: ../src/ui/clipboard.cpp:391
+#: ../src/ui/clipboard.cpp:444
 msgid "Select <b>object(s)</b> to paste live path effect to."
-msgstr ""
+msgstr "בחר <b>פריט/ים</b> אליהם יודבק אפקט נתיב חי."
 
 #. no_effect:
-#: ../src/ui/clipboard.cpp:415
+#: ../src/ui/clipboard.cpp:468
 msgid "No effect on the clipboard."
-msgstr ""
+msgstr "אין אפקט בלוח הגזירים."
 
-#: ../src/ui/clipboard.cpp:435 ../src/ui/clipboard.cpp:462
+#: ../src/ui/clipboard.cpp:488
+#: ../src/ui/clipboard.cpp:515
 msgid "Clipboard does not contain a path."
-msgstr ""
+msgstr "אין נתיב בלוח הגזירים."
 
 #. Item dialog
-#: ../src/ui/context-menu.cpp:100
+#: ../src/ui/context-menu.cpp:105
 msgid "Object _Properties"
-msgstr ""
+msgstr "מאפייני ה_פריט"
 
 #. Select item
-#: ../src/ui/context-menu.cpp:110
+#: ../src/ui/context-menu.cpp:115
 msgid "_Select This"
-msgstr ""
+msgstr "בחר _זאת"
 
 #. Create link
-#: ../src/ui/context-menu.cpp:120
+#: ../src/ui/context-menu.cpp:125
 msgid "_Create Link"
-msgstr ""
+msgstr "צ_ור קישור"
+
+#. Set mask
+#: ../src/ui/context-menu.cpp:132
+msgid "Set Mask"
+msgstr "הגדר מסכה"
 
-#: ../src/ui/context-menu.cpp:177
+#. Release mask
+#: ../src/ui/context-menu.cpp:143
+msgid "Release Mask"
+msgstr "שחרר מסכה"
+
+#. Set Clip
+#: ../src/ui/context-menu.cpp:154
+msgid "Set Clip"
+msgstr "הגדר קליפ"
+
+#. Release Clip
+#: ../src/ui/context-menu.cpp:165
+msgid "Release Clip"
+msgstr "שחרר קליפ"
+
+#: ../src/ui/context-menu.cpp:288
 msgid "Create link"
-msgstr ""
+msgstr "צור קישור"
 
 #. "Ungroup"
-#: ../src/ui/context-menu.cpp:195 ../src/verbs.cpp:2279
+#: ../src/ui/context-menu.cpp:306
+#: ../src/verbs.cpp:2336
 msgid "_Ungroup"
-msgstr ""
+msgstr "_פרק"
 
 #. Link dialog
-#: ../src/ui/context-menu.cpp:235
+#: ../src/ui/context-menu.cpp:346
 msgid "Link _Properties"
-msgstr ""
+msgstr "_מאפייני הקישור"
 
 #. Select item
-#: ../src/ui/context-menu.cpp:241
+#: ../src/ui/context-menu.cpp:352
 msgid "_Follow Link"
-msgstr ""
+msgstr "_עקוב אחר הקישור"
 
 #. Reset transformations
-#: ../src/ui/context-menu.cpp:246
+#: ../src/ui/context-menu.cpp:357
 msgid "_Remove Link"
-msgstr ""
+msgstr "ה_סר קישור"
 
 #. Link dialog
-#: ../src/ui/context-menu.cpp:294
+#: ../src/ui/context-menu.cpp:405
 msgid "Image _Properties"
-msgstr ""
+msgstr "מאפייני _תמונה"
 
-#: ../src/ui/context-menu.cpp:300
+#: ../src/ui/context-menu.cpp:411
 msgid "Edit Externally..."
-msgstr ""
+msgstr "ערוך חיצונית..."
 
 #. Item dialog
-#: ../src/ui/context-menu.cpp:392
+#: ../src/ui/context-menu.cpp:504
 msgid "_Fill and Stroke"
-msgstr ""
+msgstr "מילוי ו_קו מתאר"
 
 #. *
 #. * Constructor
 #.
 #: ../src/ui/dialog/aboutbox.cpp:77
 msgid "About Inkscape"
-msgstr ""
+msgstr "אודות אינקסקייפ"
 
 #: ../src/ui/dialog/aboutbox.cpp:88
 msgid "_Splash"
-msgstr ""
+msgstr "מסך _פתיחה"
 
 #: ../src/ui/dialog/aboutbox.cpp:92
 msgid "_Authors"
@@ -8752,2752 +9199,2660 @@ msgstr ""
 #: ../src/ui/dialog/aboutbox.cpp:338
 msgid "translator-credits"
 msgstr ""
+"Launchpad Contributions:\n"
+"  Yaron https://launchpad.net/~sh-yaron\n"
+"  Leon https://launchpad.net/~leon-mintz"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:234
-#: ../src/ui/dialog/align-and-distribute.cpp:776
+#: ../src/ui/dialog/align-and-distribute.cpp:247
+#: ../src/ui/dialog/align-and-distribute.cpp:794
 msgid "Align"
-msgstr ""
+msgstr "יישור"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:392
-#: ../src/ui/dialog/align-and-distribute.cpp:777
+#: ../src/ui/dialog/align-and-distribute.cpp:406
+#: ../src/ui/dialog/align-and-distribute.cpp:795
 msgid "Distribute"
-msgstr ""
+msgstr "פיזור"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:461
+#: ../src/ui/dialog/align-and-distribute.cpp:475
 msgid "Minimum horizontal gap (in px units) between bounding boxes"
-msgstr ""
+msgstr "מרווח אופקי מזערי (בפיקסלים) בין תיבות תוחמות"
 
 #. TRANSLATORS: Horizontal gap. Only put "H:" equivalent in the translation
-#: ../src/ui/dialog/align-and-distribute.cpp:463
+#: ../src/ui/dialog/align-and-distribute.cpp:477
 msgid "gap|H:"
-msgstr ""
+msgstr "פ:"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:471
+#: ../src/ui/dialog/align-and-distribute.cpp:485
 msgid "Minimum vertical gap (in px units) between bounding boxes"
-msgstr ""
+msgstr "מרווח אנכי מזערי (בפיקסלים) בין תיבות תוחמות"
 
 #. TRANSLATORS: Vertical gap
-#: ../src/ui/dialog/align-and-distribute.cpp:473
+#: ../src/ui/dialog/align-and-distribute.cpp:487
 msgid "V:"
-msgstr ""
+msgstr "אנ:"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:501
-#: ../src/ui/dialog/align-and-distribute.cpp:778
-#: ../src/widgets/toolbox.cpp:5626
+#: ../src/ui/dialog/align-and-distribute.cpp:516
+#: ../src/ui/dialog/align-and-distribute.cpp:796
+#: ../src/widgets/toolbox.cpp:6574
 msgid "Remove overlaps"
-msgstr ""
+msgstr "הסר חפיפות"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:531
-#: ../src/widgets/toolbox.cpp:5484
+#: ../src/ui/dialog/align-and-distribute.cpp:547
+#: ../src/widgets/toolbox.cpp:6439
 msgid "Arrange connector network"
-msgstr ""
+msgstr "סדר את רשת המחברים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:561
+#: ../src/ui/dialog/align-and-distribute.cpp:578
 msgid "Unclump"
-msgstr ""
+msgstr "לנתק"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:631
+#: ../src/ui/dialog/align-and-distribute.cpp:649
 msgid "Randomize positions"
-msgstr ""
+msgstr "מקם באקראי"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:728
+#: ../src/ui/dialog/align-and-distribute.cpp:746
 msgid "Distribute text baselines"
-msgstr ""
+msgstr "פזר את שורות בסיס הטקסט"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:748
+#: ../src/ui/dialog/align-and-distribute.cpp:766
 msgid "Align text baselines"
-msgstr ""
+msgstr "יישר את שורות בסיס הטקסט"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:779
+#: ../src/ui/dialog/align-and-distribute.cpp:797
 msgid "Connector network layout"
-msgstr ""
+msgstr "סידור רשת המחברים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:780
+#: ../src/ui/dialog/align-and-distribute.cpp:798
 msgid "Nodes"
-msgstr ""
+msgstr "מפרקים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:786
+#: ../src/ui/dialog/align-and-distribute.cpp:804
 msgid "Relative to: "
-msgstr ""
+msgstr "ביחס אל: "
+
+#: ../src/ui/dialog/align-and-distribute.cpp:805
+msgid "Treat selection as group: "
+msgstr "התייחס לבחירה כקבוצה:"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:791
+#: ../src/ui/dialog/align-and-distribute.cpp:811
 msgid "Align right sides of objects to left side of anchor"
-msgstr ""
+msgstr "יישר את צידיהם הימנים של הפריטים לצידו השמאלי של העוגן"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:794
+#: ../src/ui/dialog/align-and-distribute.cpp:814
 msgid "Align left sides"
-msgstr ""
+msgstr "יישר את הצדדים השמאליים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:797
+#: ../src/ui/dialog/align-and-distribute.cpp:817
 msgid "Center on vertical axis"
-msgstr ""
+msgstr "מרכז על ציר אנכי"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:800
+#: ../src/ui/dialog/align-and-distribute.cpp:820
 msgid "Align right sides"
-msgstr ""
+msgstr "יישר את הצדדים הימניים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:803
+#: ../src/ui/dialog/align-and-distribute.cpp:823
 msgid "Align left sides of objects to right side of anchor"
-msgstr ""
+msgstr "יישר את צידיהם השמאליים של הפריטים לצידו השמאלי של העוגן"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:806
+#: ../src/ui/dialog/align-and-distribute.cpp:826
 msgid "Align bottoms of objects to top of anchor"
-msgstr ""
+msgstr "יישר את צידיהם התחתונים של הפריטים לראש העוגן"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:809
+#: ../src/ui/dialog/align-and-distribute.cpp:829
 msgid "Align tops"
-msgstr ""
+msgstr "יישר צדדים עליונים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:812
+#: ../src/ui/dialog/align-and-distribute.cpp:832
 msgid "Center on horizontal axis"
-msgstr ""
+msgstr "מרכז על ציר אופקי"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:815
+#: ../src/ui/dialog/align-and-distribute.cpp:835
 msgid "Align bottoms"
-msgstr ""
+msgstr "יישר צדדים תחתונים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:818
+#: ../src/ui/dialog/align-and-distribute.cpp:838
 msgid "Align tops of objects to bottom of anchor"
-msgstr ""
+msgstr "ישר את צידיהם העליונים של הפריטים לתחתית העוגן"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:823
+#: ../src/ui/dialog/align-and-distribute.cpp:843
 msgid "Align baseline anchors of texts vertically"
-msgstr ""
+msgstr "יישר את עוגני שורות הבסיס של הטקסט באופן אנכי"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:826
+#: ../src/ui/dialog/align-and-distribute.cpp:846
 msgid "Align baseline anchors of texts horizontally"
-msgstr ""
+msgstr "יישר את עוגני שורות הבסיס של הטקסט באופן אופקי"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:831
+#: ../src/ui/dialog/align-and-distribute.cpp:851
 msgid "Make horizontal gaps between objects equal"
-msgstr ""
+msgstr "צור מרווח אופקי שווה בין פריטים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:835
+#: ../src/ui/dialog/align-and-distribute.cpp:855
 msgid "Distribute left sides equidistantly"
-msgstr ""
+msgstr "פזר את הצדדים השמאליים במרחק שווה"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:838
+#: ../src/ui/dialog/align-and-distribute.cpp:858
 msgid "Distribute centers equidistantly horizontally"
-msgstr ""
+msgstr "פזר את המרכזים במרחק אופקי שווה"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:841
+#: ../src/ui/dialog/align-and-distribute.cpp:861
 msgid "Distribute right sides equidistantly"
-msgstr ""
+msgstr "פזר את הצדדים הימניים במרחק שווה"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:845
+#: ../src/ui/dialog/align-and-distribute.cpp:865
 msgid "Make vertical gaps between objects equal"
-msgstr ""
+msgstr "צור מרווח אנכי שווה בין הפריטים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:849
+#: ../src/ui/dialog/align-and-distribute.cpp:869
 msgid "Distribute tops equidistantly"
-msgstr ""
+msgstr "פזר את הצדדים העליונים במרחק שווה"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:852
+#: ../src/ui/dialog/align-and-distribute.cpp:872
 msgid "Distribute centers equidistantly vertically"
-msgstr ""
+msgstr "פזר את המרכזים במרחק אנכי שווה"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:855
+#: ../src/ui/dialog/align-and-distribute.cpp:875
 msgid "Distribute bottoms equidistantly"
-msgstr ""
+msgstr "פזר את הצדדים התחתונים במרחק שווה"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:860
+#: ../src/ui/dialog/align-and-distribute.cpp:880
 msgid "Distribute baseline anchors of texts horizontally"
-msgstr ""
+msgstr "פזר את עוגני שורת בסיס הטקסט באופן אופקי"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:863
+#: ../src/ui/dialog/align-and-distribute.cpp:883
 msgid "Distribute baseline anchors of texts vertically"
-msgstr ""
+msgstr "פזר את עוגני שורת בסיס הטקסט באופן אנכי"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:868
+#: ../src/ui/dialog/align-and-distribute.cpp:888
 msgid "Randomize centers in both dimensions"
-msgstr ""
+msgstr "פזר באקראי את המרכזים בשני המימדים"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:871
+#: ../src/ui/dialog/align-and-distribute.cpp:891
 msgid "Unclump objects: try to equalize edge-to-edge distances"
-msgstr ""
+msgstr "ניתוק פריטים: נסה להשוות את המרחקים מקצה לקצה"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:876
-msgid ""
-"Move objects as little as possible so that their bounding boxes do not "
-"overlap"
-msgstr ""
+#: ../src/ui/dialog/align-and-distribute.cpp:896
+msgid "Move objects as little as possible so that their bounding boxes do not overlap"
+msgstr "הזז פריטים כמה שפחות כך שהתיבות התוחמות אותם לא יחפפו"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:880
-#: ../src/widgets/toolbox.cpp:5588
+#: ../src/ui/dialog/align-and-distribute.cpp:900
+#: ../src/widgets/toolbox.cpp:6537
 msgid "Nicely arrange selected connector network"
-msgstr ""
+msgstr "סדר באופן יפה את רשת המחברים הנבחרת"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:885
+#: ../src/ui/dialog/align-and-distribute.cpp:905
 msgid "Align selected nodes horizontally"
-msgstr ""
+msgstr "יישר את המפרקים הנבחרים אופקית"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:888
+#: ../src/ui/dialog/align-and-distribute.cpp:908
 msgid "Align selected nodes vertically"
-msgstr ""
+msgstr "יישר את המפרקים הנבחרים אנכית"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:891
+#: ../src/ui/dialog/align-and-distribute.cpp:911
 msgid "Distribute selected nodes horizontally"
-msgstr ""
+msgstr "פזר את המפרקים הנבחרים אופקית"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:894
+#: ../src/ui/dialog/align-and-distribute.cpp:914
 msgid "Distribute selected nodes vertically"
-msgstr ""
+msgstr "פזר את המפרקים הנבחרים אנכית"
 
 #. Rest of the widgetry
-#: ../src/ui/dialog/align-and-distribute.cpp:899
+#: ../src/ui/dialog/align-and-distribute.cpp:919
 msgid "Last selected"
-msgstr ""
+msgstr "האחרון שנבחר"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:900
+#: ../src/ui/dialog/align-and-distribute.cpp:920
 msgid "First selected"
-msgstr ""
+msgstr "הראשון שנבחר"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:901
+#: ../src/ui/dialog/align-and-distribute.cpp:921
 msgid "Biggest item"
-msgstr ""
+msgstr "הפריט הגדול ביותר"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:902
+#: ../src/ui/dialog/align-and-distribute.cpp:922
 msgid "Smallest item"
-msgstr ""
+msgstr "הפריט הקטן ביותר"
 
-#: ../src/ui/dialog/align-and-distribute.cpp:904
+#: ../src/ui/dialog/align-and-distribute.cpp:924
 #: ../src/widgets/desktop-widget.cpp:1548
 msgid "Drawing"
-msgstr "×\90יור"
+msgstr "ציור"
 
-#: ../src/ui/dialog/document-metadata.cpp:79
+#: ../src/ui/dialog/document-metadata.cpp:77
 msgid "Metadata"
-msgstr ""
+msgstr "נתוני מטא"
 
-#: ../src/ui/dialog/document-metadata.cpp:80
+#: ../src/ui/dialog/document-metadata.cpp:78
 msgid "License"
-msgstr "ר×\99ש×\99×\95×\9f"
+msgstr "רשיון"
 
-#: ../src/ui/dialog/document-metadata.cpp:160
+#: ../src/ui/dialog/document-metadata.cpp:158
 msgid "<b>Dublin Core Entities</b>"
-msgstr ""
+msgstr "<b>ישויות ליבת דבלין</b>"
 
-#: ../src/ui/dialog/document-metadata.cpp:182
+#: ../src/ui/dialog/document-metadata.cpp:180
 msgid "<b>License</b>"
-msgstr ""
+msgstr "<b>רשיון</b>"
 
 #. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:88
+#: ../src/ui/dialog/document-properties.cpp:87
 msgid "Show page _border"
-msgstr ""
+msgstr "הצג את _גבול העמוד"
 
-#: ../src/ui/dialog/document-properties.cpp:88
+#: ../src/ui/dialog/document-properties.cpp:87
 msgid "If set, rectangular page border is shown"
-msgstr ""
+msgstr "במידה והוגדר, יוצג גבול הדף המרובע"
 
-#: ../src/ui/dialog/document-properties.cpp:89
+#: ../src/ui/dialog/document-properties.cpp:88
 msgid "Border on _top of drawing"
-msgstr ""
+msgstr "הגבול מ_על לציור"
 
-#: ../src/ui/dialog/document-properties.cpp:89
+#: ../src/ui/dialog/document-properties.cpp:88
 msgid "If set, border is always on top of the drawing"
-msgstr ""
+msgstr "במידה והוגדר, הגבול תמיד יוצג מעל הציור"
 
-#: ../src/ui/dialog/document-properties.cpp:90
+#: ../src/ui/dialog/document-properties.cpp:89
 msgid "_Show border shadow"
-msgstr ""
+msgstr "הצג _צללית לגבול"
 
-#: ../src/ui/dialog/document-properties.cpp:90
+#: ../src/ui/dialog/document-properties.cpp:89
 msgid "If set, page border shows a shadow on its right and lower side"
-msgstr ""
+msgstr "במידה והוגדר, גבול הדף יציג צל לימינו ולמרגלותיו"
 
-#: ../src/ui/dialog/document-properties.cpp:91
+#: ../src/ui/dialog/document-properties.cpp:90
 msgid "Back_ground:"
-msgstr ""
+msgstr "ר_קע:"
 
-#: ../src/ui/dialog/document-properties.cpp:91
+#: ../src/ui/dialog/document-properties.cpp:90
 msgid "Background color"
-msgstr ""
+msgstr "צבע הרקע"
 
-#: ../src/ui/dialog/document-properties.cpp:91
-msgid ""
-"Color and transparency of the page background (also used for bitmap export)"
-msgstr ""
+#: ../src/ui/dialog/document-properties.cpp:90
+msgid "Color and transparency of the page background (also used for bitmap export)"
+msgstr "צבע ושקיפות רקע העמוד (ישמש גם עבור ייצוא מפת סיביות)"
 
-#: ../src/ui/dialog/document-properties.cpp:92
+#: ../src/ui/dialog/document-properties.cpp:91
 msgid "Border _color:"
-msgstr ""
+msgstr "צב_ע הגבול:"
 
-#: ../src/ui/dialog/document-properties.cpp:92
+#: ../src/ui/dialog/document-properties.cpp:91
 msgid "Page border color"
-msgstr ""
+msgstr "צבע גבול העמוד"
 
-#: ../src/ui/dialog/document-properties.cpp:92
+#: ../src/ui/dialog/document-properties.cpp:91
 msgid "Color of the page border"
-msgstr ""
+msgstr "הצבע של הגבול של העמוד"
 
-#: ../src/ui/dialog/document-properties.cpp:93
+#: ../src/ui/dialog/document-properties.cpp:92
 msgid "Default _units:"
-msgstr ""
+msgstr "_יחידות ברירת מחדל:"
 
 #. ---------------------------------------------------------------
 #. General snap options
-#: ../src/ui/dialog/document-properties.cpp:97
+#: ../src/ui/dialog/document-properties.cpp:96
 msgid "Show _guides"
-msgstr ""
+msgstr "הצג קווי מ_נחה"
 
-#: ../src/ui/dialog/document-properties.cpp:97
+#: ../src/ui/dialog/document-properties.cpp:96
 msgid "Show or hide guides"
-msgstr ""
+msgstr "הצג או הסתר קווים מנחים"
 
-#: ../src/ui/dialog/document-properties.cpp:98
+#: ../src/ui/dialog/document-properties.cpp:97
 msgid "_Snap guides while dragging"
-msgstr ""
+msgstr "_הצמד לקווים המנחים בעת הגרירה"
 
-#: ../src/ui/dialog/document-properties.cpp:98
-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 in the 'Snap' "
-"tab; only a small part of the guide near the cursor will snap)"
-msgstr ""
+#: ../src/ui/dialog/document-properties.cpp:97
+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 in the 'Snap' tab; only a small part of the guide near the cursor will snap)"
+msgstr "בעת גרירת קו מנחה, הצמד למפרקי הפריט או פינות התיבה התוחמת (יש להפעיל את 'הצמד למפרקים' או 'הצמד לפינות התיבות התוחמות' בלשונית ה'הצמדה'; רק חלק קטן מהקו המנחה שליד סמן העכבר יוצמד."
 
-#: ../src/ui/dialog/document-properties.cpp:100
+#: ../src/ui/dialog/document-properties.cpp:99
 msgid "Guide co_lor:"
-msgstr ""
+msgstr "צבע הקו המנ_חה:"
 
-#: ../src/ui/dialog/document-properties.cpp:100
+#: ../src/ui/dialog/document-properties.cpp:99
 msgid "Guideline color"
-msgstr ""
+msgstr "צבע הקו המנחה"
 
-#: ../src/ui/dialog/document-properties.cpp:100
+#: ../src/ui/dialog/document-properties.cpp:99
 msgid "Color of guidelines"
-msgstr ""
+msgstr "צבעי הקווים המנחים"
 
-#: ../src/ui/dialog/document-properties.cpp:101
+#: ../src/ui/dialog/document-properties.cpp:100
 msgid "_Highlight color:"
-msgstr ""
+msgstr "צבע ה_דגשה:"
 
-#: ../src/ui/dialog/document-properties.cpp:101
+#: ../src/ui/dialog/document-properties.cpp:100
 msgid "Highlighted guideline color"
-msgstr ""
+msgstr "צבע קו מנחה מודגש"
 
-#: ../src/ui/dialog/document-properties.cpp:101
+#: ../src/ui/dialog/document-properties.cpp:100
 msgid "Color of a guideline when it is under mouse"
-msgstr ""
+msgstr "צבע הקו המנחה כאשר הוא נמצא תחת לסמן העכבר"
 
 #. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:103
+#: ../src/ui/dialog/document-properties.cpp:102
 msgid "_Enable snapping"
-msgstr ""
+msgstr "אפ_שר הצמדה"
 
-#: ../src/ui/dialog/document-properties.cpp:103 ../src/verbs.cpp:2498
+#: ../src/ui/dialog/document-properties.cpp:102
+#: ../src/verbs.cpp:2563
 msgid "Toggle snapping on or off"
-msgstr ""
+msgstr "הפעלת או ביטול ההצמדה"
 
-#: ../src/ui/dialog/document-properties.cpp:104
+#: ../src/ui/dialog/document-properties.cpp:103
 msgid "_Enable snap indicator"
-msgstr ""
+msgstr "מ_אפשר את מחוון ההצמדה"
 
-#: ../src/ui/dialog/document-properties.cpp:104
+#: ../src/ui/dialog/document-properties.cpp:103
 msgid "After snapping, a symbol is drawn at the point that has snapped"
-msgstr ""
+msgstr "לאחר ההצמדה, מופיע סמל בפינה שהוצמדה"
 
-#: ../src/ui/dialog/document-properties.cpp:105
+#: ../src/ui/dialog/document-properties.cpp:104
 msgid "_Bounding box corners"
-msgstr ""
+msgstr "_פינות התיבות התוחמות"
 
-#: ../src/ui/dialog/document-properties.cpp:105
-msgid ""
-"Only available in the selector tool: snap bounding box corners to guides, to "
-"grids, and to other bounding boxes (but not to nodes or paths)"
-msgstr ""
+#: ../src/ui/dialog/document-properties.cpp:104
+msgid "Only available in the selector tool: snap bounding box corners to guides, to grids, and to other bounding boxes (but not to nodes or paths)"
+msgstr "זמין רק בכלי הבחירה: הצמד את פינות התיבות התוחמות לקווים מנחים, לרשתות ולתיבות תוחמות אחרות (אך לא למפרקים או נתיבים)"
 
-#: ../src/ui/dialog/document-properties.cpp:107
+#: ../src/ui/dialog/document-properties.cpp:106
 msgid "_Nodes"
-msgstr ""
+msgstr "_מפרקים"
 
-#: ../src/ui/dialog/document-properties.cpp:107
-msgid ""
-"Snap nodes (e.g. path nodes, special points in shapes, gradient handles, "
-"text base points, transformation origins, etc.) to guides, to grids, to "
-"paths and to other nodes"
-msgstr ""
+#: ../src/ui/dialog/document-properties.cpp:106
+msgid "Snap nodes (e.g. path nodes, special points in shapes, gradient handles, text base points, transformation origins, etc.) to guides, to grids, to paths and to other nodes"
+msgstr "הצמד מפרקים (כלומר מפרקי הנתיב, נקודות מיוחדות בצורות, ידיות המדרג, נקודות בסיס הטקסט, מקורות שינוי צורה וכו') לקווים מנחים, לרשתות, לנתיבים ולמפרקים אחרים."
 
 #. Options for snapping to objects
-#: ../src/ui/dialog/document-properties.cpp:110
+#: ../src/ui/dialog/document-properties.cpp:109
 msgid "Snap to path_s"
-msgstr ""
+msgstr "הצמד ל_נתיבים"
 
-#: ../src/ui/dialog/document-properties.cpp:110
+#: ../src/ui/dialog/document-properties.cpp:109
 msgid "Snap nodes to object paths"
-msgstr ""
+msgstr "הצמד מפרקים לנתיבי הפריט"
 
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:110
 msgid "Snap to n_odes"
-msgstr ""
+msgstr "הצמד למפ_רקים"
 
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:110
 msgid "Snap nodes and guides to object nodes"
-msgstr ""
+msgstr "הצמד מפרקים וקווים מנחים למפרקי הפריט"
 
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:111
 msgid "Snap to bounding bo_x edges"
-msgstr ""
+msgstr "הצמד את קצוות ה_תיבה התוחמת"
 
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:111
 msgid "Snap bounding box corners and guides to bounding box edges"
-msgstr ""
+msgstr "הצמד את פינות התיבה התוחמת וקווים מנחים לקצוות תיבה תוחמת"
 
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:112
 msgid "Snap to bounding box co_rners"
-msgstr ""
+msgstr "הצמד ל_פינות התיבה התוחמת"
 
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:112
 msgid "Snap bounding box corners to other bounding box corners"
-msgstr ""
+msgstr "הצמד פינות של תיבה תוחמת לפינות של תיבה תוחמת אחרת"
 
-#: ../src/ui/dialog/document-properties.cpp:114
+#: ../src/ui/dialog/document-properties.cpp:113
 msgid "Snap to page border"
-msgstr ""
+msgstr "הצמד לגבול העמוד"
 
-#: ../src/ui/dialog/document-properties.cpp:114
+#: ../src/ui/dialog/document-properties.cpp:113
 msgid "Snap bounding box corners and nodes to the page border"
-msgstr ""
+msgstr "הצמד את פינות התיבה התוחמת והמפרקים לגבולות העמוד"
 
 #. ---------------------------------------------------------------
 #. Applies to both nodes and guides, but not to bboxes, that's why its located here
-#: ../src/ui/dialog/document-properties.cpp:117
+#: ../src/ui/dialog/document-properties.cpp:116
 msgid "Rotation _center"
-msgstr ""
+msgstr "מרכז ה_סיבוב"
 
-#: ../src/ui/dialog/document-properties.cpp:117
+#: ../src/ui/dialog/document-properties.cpp:116
 msgid "Consider the rotation center of an object when snapping"
-msgstr ""
+msgstr "התייחס למרכז הסיבוב של פריט בזמן ההצמדה"
+
+#: ../src/ui/dialog/document-properties.cpp:117
+msgid "_Smooth nodes"
+msgstr "ה_חלק מפרקים"
+
+#: ../src/ui/dialog/document-properties.cpp:117
+msgid "Snap to smooth nodes too, instead of only snapping to cusp nodes"
+msgstr "הצמד להחלקת המפרקים גם כן, במקום להצמיד למפרקים חרמשיים בלבד"
 
 #: ../src/ui/dialog/document-properties.cpp:118
 msgid "_Grid with guides"
-msgstr ""
+msgstr "_רשת עם קווים מנחים"
 
 #: ../src/ui/dialog/document-properties.cpp:118
 msgid "Snap to grid-guide intersections"
-msgstr ""
+msgstr "הצמד אל הצטלבויות רשת וקו מנחה"
 
 #: ../src/ui/dialog/document-properties.cpp:119
-msgid "_Line segments"
-msgstr ""
+msgid "_Paths"
+msgstr "_נתיבים"
 
 #: ../src/ui/dialog/document-properties.cpp:119
-msgid ""
-"Snap to intersections of line segments ('snap to paths' must be enabled, see "
-"the previous tab)"
-msgstr ""
+msgid "Snap to intersections of paths ('snap to paths' must be enabled, see the previous tab)"
+msgstr "הצמד אל הצטלבויות נתיבים (יש להפעיל את 'הצמדה לנתיבים', הבט בלשונית הקודמת)"
 
 #. TRANSLATORS: In Grid|_New translate only the word _New. It ref to grid
 #: ../src/ui/dialog/document-properties.cpp:124
 msgid "Grid|_New"
-msgstr ""
+msgstr "Grid|_חדשה"
 
 #: ../src/ui/dialog/document-properties.cpp:124
 msgid "Create new grid."
-msgstr ""
+msgstr "צור רשת חדשה."
 
 #: ../src/ui/dialog/document-properties.cpp:125
 msgid "_Remove"
-msgstr ""
+msgstr "_הסר"
 
 #: ../src/ui/dialog/document-properties.cpp:125
 msgid "Remove selected grid."
-msgstr ""
+msgstr "הסר את הרשת הנבחרת."
 
-#: ../src/ui/dialog/document-properties.cpp:135
+#: ../src/ui/dialog/document-properties.cpp:134
 msgid "Guides"
-msgstr ""
+msgstr "קווים מנחים"
 
-#: ../src/ui/dialog/document-properties.cpp:136
-#: ../src/ui/dialog/inkscape-preferences.cpp:905
+#: ../src/ui/dialog/document-properties.cpp:135
+#: ../src/ui/dialog/inkscape-preferences.cpp:958
 msgid "Grids"
-msgstr ""
+msgstr "רשתות"
 
-#: ../src/ui/dialog/document-properties.cpp:137 ../src/verbs.cpp:2498
-#, fuzzy
+#: ../src/ui/dialog/document-properties.cpp:136
+#: ../src/verbs.cpp:2563
 msgid "Snap"
-msgstr "צ×\95ר×\95ת"
+msgstr "×\94צ×\9e×\93×\94"
 
-#: ../src/ui/dialog/document-properties.cpp:138
+#: ../src/ui/dialog/document-properties.cpp:137
 msgid "Snap points"
-msgstr ""
+msgstr "נקודות הצמדה"
 
-#: ../src/ui/dialog/document-properties.cpp:227
+#: ../src/ui/dialog/document-properties.cpp:232
 msgid "<b>General</b>"
-msgstr ""
+msgstr "<b>כללי</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:229
+#: ../src/ui/dialog/document-properties.cpp:234
 msgid "<b>Border</b>"
-msgstr ""
+msgstr "<b>גבול</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:231
+#: ../src/ui/dialog/document-properties.cpp:236
 msgid "<b>Format</b>"
-msgstr ""
+msgstr "<b>מבנה</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:259
+#: ../src/ui/dialog/document-properties.cpp:264
 msgid "<b>Guides</b>"
-msgstr ""
+msgstr "<b>קווים מנחים</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:278
+#: ../src/ui/dialog/document-properties.cpp:283
 msgid "Snap _distance"
-msgstr ""
+msgstr "מר_חק להצמדה"
 
-#: ../src/ui/dialog/document-properties.cpp:278
+#: ../src/ui/dialog/document-properties.cpp:283
 msgid "Snap only when _closer than:"
-msgstr ""
+msgstr "הצמד רק כ_אשר קרוב מאשר:"
 
-#: ../src/ui/dialog/document-properties.cpp:278
-#: ../src/ui/dialog/document-properties.cpp:284
-#: ../src/ui/dialog/document-properties.cpp:290
+#: ../src/ui/dialog/document-properties.cpp:283
+#: ../src/ui/dialog/document-properties.cpp:289
+#: ../src/ui/dialog/document-properties.cpp:295
 msgid "Always snap"
-msgstr ""
+msgstr "הצמד תמיד"
 
-#: ../src/ui/dialog/document-properties.cpp:279
+#: ../src/ui/dialog/document-properties.cpp:284
 msgid "Snapping distance, in screen pixels, for snapping to objects"
-msgstr ""
+msgstr "מרחק להצמדה, בפיקסלים על המסך, להצמדה לפריטים"
 
-#: ../src/ui/dialog/document-properties.cpp:279
+#: ../src/ui/dialog/document-properties.cpp:284
 msgid "Always snap to objects, regardless of their distance"
-msgstr ""
+msgstr "תמיד הצמד לפריטים, לא משנה מה המרחק"
 
-#: ../src/ui/dialog/document-properties.cpp:280
-msgid ""
-"If set, objects only snap to another object when it's within the range "
-"specified below"
-msgstr ""
+#: ../src/ui/dialog/document-properties.cpp:285
+msgid "If set, objects only snap to another object when it's within the range specified below"
+msgstr "במידה והוגדר, פריטים ייצמדו לפריט אחר רק כאשר הם בטווח המצויין"
 
 #. Options for snapping to grids
-#: ../src/ui/dialog/document-properties.cpp:284
+#: ../src/ui/dialog/document-properties.cpp:289
 msgid "Snap d_istance"
-msgstr ""
+msgstr "מרח_ק להצמדה"
 
-#: ../src/ui/dialog/document-properties.cpp:284
+#: ../src/ui/dialog/document-properties.cpp:289
 msgid "Snap only when c_loser than:"
-msgstr ""
+msgstr "הצמד רק כאשר קרוב מא_שר:"
 
-#: ../src/ui/dialog/document-properties.cpp:285
+#: ../src/ui/dialog/document-properties.cpp:290
 msgid "Snapping distance, in screen pixels, for snapping to grid"
-msgstr ""
+msgstr "מרחק להצמדה, בפיקסלים על המסך, להצמדה לרשת"
 
-#: ../src/ui/dialog/document-properties.cpp:285
+#: ../src/ui/dialog/document-properties.cpp:290
 msgid "Always snap to grids, regardless of the distance"
-msgstr ""
+msgstr "תמיד הצמד לרשתות, לא משנה מה המרחק"
 
-#: ../src/ui/dialog/document-properties.cpp:286
-msgid ""
-"If set, objects only snap to a grid line when it's within the range "
-"specified below"
-msgstr ""
+#: ../src/ui/dialog/document-properties.cpp:291
+msgid "If set, objects only snap to a grid line when it's within the range specified below"
+msgstr "במידה והוגדר, פריטים ייצמדו לקווי הרשת רק כאשר הם בטווח המצויין להלן"
 
 #. Options for snapping to guides
-#: ../src/ui/dialog/document-properties.cpp:290
+#: ../src/ui/dialog/document-properties.cpp:295
 msgid "Snap dist_ance"
-msgstr ""
+msgstr "מרחק לה_צמדה"
 
-#: ../src/ui/dialog/document-properties.cpp:290
+#: ../src/ui/dialog/document-properties.cpp:295
 msgid "Snap only when close_r than:"
-msgstr ""
+msgstr "הצמד רק כאשר קרוב מאשר:"
 
-#: ../src/ui/dialog/document-properties.cpp:291
+#: ../src/ui/dialog/document-properties.cpp:296
 msgid "Snapping distance, in screen pixels, for snapping to guides"
-msgstr ""
+msgstr "מרחק להצמדה, בפיקסלים על המסך, להצמדה לקווים מנחים"
 
-#: ../src/ui/dialog/document-properties.cpp:291
+#: ../src/ui/dialog/document-properties.cpp:296
 msgid "Always snap to guides, regardless of the distance"
-msgstr ""
+msgstr "תמיד הצמד לקווים מנחים, לא משנה מה המרחק"
 
-#: ../src/ui/dialog/document-properties.cpp:292
-msgid ""
-"If set, objects only snap to a guide when it's within the range specified "
-"below"
-msgstr ""
+#: ../src/ui/dialog/document-properties.cpp:297
+msgid "If set, objects only snap to a guide when it's within the range specified below"
+msgstr "במידה והוגדר, פריטים ייצמדו לקו מנחה ק כאשר הם בטווח המצויין להלן"
 
-#: ../src/ui/dialog/document-properties.cpp:315
+#: ../src/ui/dialog/document-properties.cpp:320
 msgid "<b>Snapping</b>"
-msgstr ""
+msgstr "<b>הצמדה</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:317
+#: ../src/ui/dialog/document-properties.cpp:322
 msgid "<b>What snaps</b>"
-msgstr ""
+msgstr "<b>מה נצמד</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:319
+#: ../src/ui/dialog/document-properties.cpp:324
 msgid "<b>Snap to objects</b>"
-msgstr ""
+msgstr "<b>הצמדה לפריטים</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:321
+#: ../src/ui/dialog/document-properties.cpp:326
 msgid "<b>Snap to grids</b>"
-msgstr ""
+msgstr "<b>הצמד לרשתות</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:323
+#: ../src/ui/dialog/document-properties.cpp:328
 msgid "<b>Snap to guides</b>"
-msgstr ""
+msgstr "<b>הצמד לקווים מנחים</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:361
+#: ../src/ui/dialog/document-properties.cpp:366
 msgid "<b>Snapping to intersections of</b>"
-msgstr ""
+msgstr "<b>הצמדה למפגש בין</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:363
+#: ../src/ui/dialog/document-properties.cpp:368
 msgid "<b>Special points to consider</b>"
-msgstr ""
+msgstr "<b>נקודות מיוחדות להתחשבות</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:433
+#: ../src/ui/dialog/document-properties.cpp:439
 msgid "<b>Creation</b>"
-msgstr ""
+msgstr "<b>יצירה</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:434
+#: ../src/ui/dialog/document-properties.cpp:440
 msgid "<b>Defined grids</b>"
-msgstr ""
+msgstr "<b>רשתות מוגדרות</b>"
 
-#: ../src/ui/dialog/document-properties.cpp:650
+#: ../src/ui/dialog/document-properties.cpp:657
 msgid "Remove grid"
-msgstr ""
-
-#: ../src/ui/dialog/export.cpp:32
-msgid "Export"
-msgstr ""
+msgstr "הסר רשת"
 
 #: ../src/ui/dialog/extension-editor.cpp:80
 msgid "Information"
-msgstr ""
+msgstr "מידע"
 
 #: ../src/ui/dialog/extension-editor.cpp:81
-#: ../share/extensions/lindenmayer.inx.h:3 ../share/extensions/measure.inx.h:2
+#: ../share/extensions/draw_from_triangle.inx.h:20
+#: ../share/extensions/lindenmayer.inx.h:3
+#: ../share/extensions/measure.inx.h:2
 msgid "Help"
-msgstr ""
+msgstr "עזרה"
 
 #: ../src/ui/dialog/extension-editor.cpp:82
 msgid "Parameters"
-msgstr ""
+msgstr "פרמטרים"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:382
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:383
 msgid "No preview"
-msgstr ""
+msgstr "ללא תצוגה מקדימה"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:488
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:489
 msgid "too large for preview"
-msgstr ""
+msgstr "גדול מדי לתצוגה מקדימה"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:577
 msgid "Enable preview"
-msgstr ""
+msgstr "אפשר תצוגה מקדימה"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:711
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:712
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:198
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:197
 msgid "All Inkscape Files"
-msgstr ""
+msgstr "כל קבצי אינקסקייפ"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:716
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:717
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:197
-#, fuzzy
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:196
 msgid "All Files"
-msgstr "ק×\95×\91×¥"
+msgstr "×\9b×\9c ×\94ק×\91צ×\99×\9d"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:722
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:723
 msgid "All Images"
-msgstr ""
+msgstr "כל התמונות"
 
-#. ###### Add the file types menu
-#. createFilterMenu();
-#. ###### Do we want the .xxx extension automatically added?
 #. ###### File options
 #. ###### Do we want the .xxx extension automatically added?
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:887
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:891
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1429
 msgid "Append filename extension automatically"
-msgstr ""
+msgstr "הוסף את סיומת הקובץ אוטומטית"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1042
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1294
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1045
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1293
 msgid "Guess from extension"
-msgstr ""
+msgstr "נחש לפי סיומת הקובץ"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1315
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1314
 msgid "Left edge of source"
-msgstr ""
+msgstr "הצד השמאלי של המקור"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1316
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1315
 msgid "Top edge of source"
-msgstr ""
+msgstr "הצד העליון של המקור"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1317
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1316
 msgid "Right edge of source"
-msgstr ""
+msgstr "הצד הימני של המקור"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1318
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1317
 msgid "Bottom edge of source"
-msgstr ""
+msgstr "הצד התחתון של המקור"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1319
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1318
 msgid "Source width"
-msgstr ""
+msgstr "רוחב המקורגו"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1320
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1319
 msgid "Source height"
-msgstr ""
+msgstr "גובה המקור"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1321
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1320
 msgid "Destination width"
-msgstr ""
+msgstr "רוחב היעד"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1322
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1321
 msgid "Destination height"
-msgstr ""
+msgstr "גובה היעד"
 
-#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1323
+#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1322
 msgid "Resolution (dots per inch)"
-msgstr ""
+msgstr "רזולוציה (נקודות לאינטש)"
 
 #. #########################################
 #. ## EXTRA WIDGET -- SOURCE SIDE
 #. #########################################
 #. ##### Export options buttons/spinners, etc
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1360
-#, fuzzy
 msgid "Document"
-msgstr "×\94×\9eס×\9e×\9a × ×©×\9eר."
+msgstr "×\9eס×\9e×\9a"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1372
 #: ../share/extensions/color_custom.inx.h:3
 msgid "Custom"
-msgstr ""
+msgstr "מותאם אישית"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1412
-#, fuzzy
 msgid "Cairo"
-msgstr "פחם"
+msgstr "Cairo"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1415
 msgid "Antialias"
-msgstr ""
+msgstr "החלק קצוות"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1418
 msgid "Background"
-msgstr ""
+msgstr "רקע"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1441
-#, fuzzy
 msgid "Destination"
-msgstr "יעד הדפסה"
+msgstr "יעד"
 
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:199
-#, fuzzy
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:198
 msgid "All Image Files"
-msgstr "ק×\95×\91×¥"
+msgstr "×\9b×\9c ×§×\91צ×\99 ×\94ת×\9e×\95× ×\95ת"
 
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:428
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:427
 msgid "Show Preview"
-msgstr ""
+msgstr "הצג תצוגה מקדימה"
 
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:564
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:563
 msgid "No file selected"
-msgstr ""
+msgstr "לא נבחר קובץ"
 
-#: ../src/ui/dialog/fill-and-stroke.cpp:53
+#: ../src/ui/dialog/fill-and-stroke.cpp:50
 msgid "Fill"
-msgstr ""
+msgstr "מילוי"
 
-#: ../src/ui/dialog/fill-and-stroke.cpp:54
+#: ../src/ui/dialog/fill-and-stroke.cpp:51
 msgid "Stroke _paint"
-msgstr ""
+msgstr "צבע _קו המתאר"
 
-#: ../src/ui/dialog/fill-and-stroke.cpp:55
+#: ../src/ui/dialog/fill-and-stroke.cpp:52
 msgid "Stroke st_yle"
-msgstr ""
+msgstr "סגנון ק_ו המתאר"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:504
-msgid ""
-"This matrix determines a linear transform on colour 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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:506
+msgid "This matrix determines a linear transform on colour 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 "מטריצה זו קובעת שינוי קווי במרחב צבע. כל שורה משפיעה על מרכיב צבע אחד. כל עמודה מתארת כמה מאותו מרכיב צבע מהקלט מועבר לפלט. העמודה האחרונה אינה מסתמכת על צבעי הקלט, ולכן יכולה לשמש לצורך שינוי ערך מרכיב קבוע."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:614
+#: ../src/ui/dialog/filter-effects-dialog.cpp:616
 msgid "Image File"
-msgstr ""
+msgstr "קובץ תמונה"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:617
+#: ../src/ui/dialog/filter-effects-dialog.cpp:619
 msgid "Selected SVG Element"
-msgstr ""
+msgstr "רכיב SVG שנבחר"
 
 #. TODO: any image, not justy svg
-#: ../src/ui/dialog/filter-effects-dialog.cpp:686
+#: ../src/ui/dialog/filter-effects-dialog.cpp:689
 msgid "Select an image to be used as feImage input"
-msgstr ""
+msgstr "בחר תמונה לשימוש כקלט feImage"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:778
+#: ../src/ui/dialog/filter-effects-dialog.cpp:781
 msgid "This SVG filter effect does not require any parameters."
-msgstr ""
+msgstr "אפקט מסנן SVG זה אינו דורש כל פרמטרים."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:784
+#: ../src/ui/dialog/filter-effects-dialog.cpp:787
 msgid "This SVG filter effect is not yet implemented in Inkscape."
-msgstr ""
+msgstr "אפקט מסנן SVG זה אינו מובנה באינקסקייפ."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:975
+#: ../src/ui/dialog/filter-effects-dialog.cpp:978
 msgid "Light Source:"
-msgstr ""
+msgstr "מקור האור:"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:992
+#: ../src/ui/dialog/filter-effects-dialog.cpp:995
 msgid "Direction angle for the light source on the XY plane, in degrees"
-msgstr ""
+msgstr "כיוון זווית מקור האור במשטח XY, במעלות."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:993
+#: ../src/ui/dialog/filter-effects-dialog.cpp:996
 msgid "Direction angle for the light source on the YZ plane, in degrees"
-msgstr ""
+msgstr "כיוון זווית מקור האור במשטח YZ, במעלות"
 
 #. default x:
 #. default y:
 #. default z:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:996
 #: ../src/ui/dialog/filter-effects-dialog.cpp:999
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1002
 msgid "Location"
-msgstr ""
+msgstr "מיקום"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:996
 #: ../src/ui/dialog/filter-effects-dialog.cpp:999
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1002
-#, fuzzy
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
 msgid "X coordinate"
-msgstr "פ×\99× ×\95ת"
+msgstr "נק×\95×\93ת ×\94צ×\99×\95×\9f ×\91Ö¾X"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:996
 #: ../src/ui/dialog/filter-effects-dialog.cpp:999
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1002
-#, fuzzy
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
 msgid "Y coordinate"
-msgstr "פ×\99× ×\95ת"
+msgstr "נק×\95×\93ת ×\94צ×\99×\95×\9f ×\91Ö¾Y"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:996
 #: ../src/ui/dialog/filter-effects-dialog.cpp:999
 #: ../src/ui/dialog/filter-effects-dialog.cpp:1002
-#, fuzzy
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
 msgid "Z coordinate"
-msgstr "פ×\99× ×\95ת"
+msgstr "נק×\95×\93ת ×\94צ×\99×\95×\9f ×\91Ö¾Z"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1002
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
 msgid "Points At"
-msgstr ""
+msgstr "מצביע אל"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1003
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1006
 msgid "Specular Exponent"
-msgstr ""
+msgstr "מעריך ההשתקפות"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1003
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1006
 msgid "Exponent value controlling the focus for the light source"
-msgstr ""
+msgstr "ערך המעריך השולט במיקוד מקור האור"
 
 #. TODO: here I have used 100 degrees as default value. But spec says that if not specified, no limiting cone is applied. So, there should be a way for the user to set a "no limiting cone" option.
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1008
 msgid "Cone Angle"
-msgstr ""
+msgstr "זווית קונית"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1008
+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 "זוהי הזווית בין ציר נקודת האור (לדוגמה הזווית שבין מקור האור והנקודה שאליה הוא מצביע) וחרוט נקודת האור. האור לא מוקרן מחוץ לחרוט."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1065
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1069
 msgid "New light source"
-msgstr ""
+msgstr "מקור אור חדש"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1106
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1110
 msgid "_Duplicate"
-msgstr ""
+msgstr "_שכפול"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1132
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1136
 msgid "_Filter"
-msgstr ""
+msgstr "_מסנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1146
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1150
 msgid "R_ename"
-msgstr ""
+msgstr "ש_נה שם"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1240
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1253
 msgid "Rename filter"
-msgstr ""
+msgstr "שנה את שם המסנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1276
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1289
 msgid "Apply filter"
-msgstr ""
+msgstr "החל מסנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1352
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1365
 msgid "Add filter"
-msgstr ""
+msgstr "הוסף מסנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1378
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1391
 msgid "Duplicate filter"
-msgstr ""
+msgstr "שכפל מסנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1445
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1458
 msgid "_Effect"
-msgstr ""
+msgstr "מ_סנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1453
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1466
 msgid "Connections"
-msgstr ""
+msgstr "חיבורים"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1569
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1582
 msgid "Remove filter primitive"
-msgstr ""
+msgstr "הסר סינון קדמוני"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1940
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1954
 msgid "Remove merge node"
-msgstr ""
+msgstr "הסר את מיזוג המפרקים"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2056
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2070
 msgid "Reorder filter primitive"
-msgstr ""
+msgstr "סדר מחדש סינון קדמוני"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2092
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2104
 msgid "Add Effect:"
-msgstr ""
+msgstr "הוסף אפקט:"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2093
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2105
 msgid "No effect selected"
-msgstr ""
+msgstr "לא נבחר אפקט"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2094
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2106
 msgid "No filter selected"
-msgstr ""
+msgstr "לא נבחר מסנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2130
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2144
 msgid "Effect parameters"
-msgstr ""
+msgstr "פרמטרים לאפקט"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2131
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2145
 msgid "Filter General Settings"
-msgstr ""
+msgstr "הגדרות כלליות למסנן"
 
 #. default x:
 #. default y:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2187
-#, fuzzy
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2201
 msgid "Coordinates"
-msgstr "פ×\99× ×\95ת"
+msgstr "נק×\95×\93×\95ת ×\94צ×\99×\95×\9f"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2187
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2201
 msgid "X coordinate of the left corners of filter effects region"
-msgstr ""
+msgstr "נקודת הציון ב־X של הפינות השמאליות של איזור אפקטי המסנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2187
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2201
 msgid "Y coordinate of the upper corners of filter effects region"
-msgstr ""
+msgstr "נקודת הציון ב־Y של הפינות השמאליות של איזור אפקטי המסנן"
 
 #. default width:
 #. default height:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2188
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2202
 #: ../share/extensions/dimension.inx.h:1
 msgid "Dimensions"
-msgstr ""
+msgstr "מימדים"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2188
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2202
 msgid "Width of filter effects region"
-msgstr ""
+msgstr "רוחב איזור אפקטי המסנן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2188
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2202
 msgid "Height of filter effects region"
-msgstr ""
+msgstr "גובה איזור אפקטי המסנן"
 
 #. # end multiple scan
 #. ## end mode page
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2191
-#: ../src/ui/dialog/tracedialog.cpp:553 ../src/widgets/toolbox.cpp:3328
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2205
+#: ../src/ui/dialog/tracedialog.cpp:552
+#: ../src/widgets/toolbox.cpp:3786
 #: ../share/extensions/triangle.inx.h:9
 msgid "Mode"
-msgstr ""
+msgstr "מצב"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2194
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2208
+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 "מציין את סוג פעולת המטריצה. מילת המפתח 'מטריצה' מציינת שמטריצה שלמה של 5x4 ערכים תסופק. מילות המפתח האחרות מייצגות את מקשי הקיצור לנוחות המאפשרים ביצוע פעולות צבע נפוצות מבלי לציין מטריצה שלמה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2195
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2209
 msgid "Value(s)"
-msgstr ""
+msgstr "ערך/ים"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2209
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2250
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2223
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2264
 msgid "Operator"
-msgstr ""
+msgstr "מפעיל"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2210
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2224
 msgid "K1"
-msgstr ""
+msgstr "K1"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2210
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2211
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2212
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2213
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2224
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2225
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2226
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2227
+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 "במידה ונבחרה פעולה חשבונית, כל פיקסל בתצורה מחושב באמצעות הנוסחה k1*i1*i2 + k2*i1 + k3*i2 + k4 בעוד i1 ו־i2 הינם ערכי הפיקסלים של הפלט הראשון והשני"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2211
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2225
 msgid "K2"
-msgstr ""
+msgstr "K2"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2212
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2226
 msgid "K3"
-msgstr ""
+msgstr "K3"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2213
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2227
 msgid "K4"
-msgstr ""
+msgstr "K4"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2216
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
 msgid "width of the convolve matrix"
-msgstr ""
+msgstr "רוחב מטריצת השזירה"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2216
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
 msgid "height of the convolve matrix"
-msgstr ""
+msgstr "גובה מטריצת השזירה"
 
 #. default x:
 #. default y:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2217
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2231
 msgid "Target"
-msgstr ""
+msgstr "יעד"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2217
-msgid ""
-"X coordinate of the target point in the convolve matrix. The convolution is "
-"applied to pixels around this point."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2231
+msgid "X coordinate of the target point in the convolve matrix. The convolution is applied to pixels around this point."
+msgstr "נקודת הציון ב־X של נקודת היעד במטריצת השזירה. השזירה מופעלת על הפיקסלים הסובבים נקודה זו."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2217
-msgid ""
-"Y coordinate of the target point in the convolve matrix. The convolution is "
-"applied to pixels around this point."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2231
+msgid "Y coordinate of the target point in the convolve matrix. The convolution is applied to pixels around this point."
+msgstr "נקודת הציון ב־Y של נקודת היעד במטריצת השזירה. השזירה מופעלת על הפיקסלים הסובבים נקודה זו."
 
 #. TRANSLATORS: for info on "Kernel", see http://en.wikipedia.org/wiki/Kernel_(matrix)
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2219
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2233
 msgid "Kernel"
-msgstr ""
+msgstr "גרעין"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2219
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2233
+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 "מטריצה זו מתארת את פעולת השזירה שמופעלת על תמונת הקלט על מנת לחשב את צבעי הפיקסלים לפלט. סידורים שונים של נתונים במטריצה זו יוצרים מגוון של אפקטים חזותיים. מטריצת זהות עלולה להוביל לאפקט טשטוש בתנועה (מקביל למטריצה האלכסונית) בעוד שמטריצה המלאה במספרים קבועים שאינם 0 תוביל לאפקט טשטוש נפוץ."
 
 #. TODO: svg spec: The default value is the sum of all values in kernelMatrix, with the exception that if the sum is zero, then the divisor is set to 1.
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2222
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2236
 msgid "Divisor"
-msgstr ""
+msgstr "מחלק"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2222
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2236
+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 "לאחר החלת מטריצת הליבה לתמונת הקלט כדי להניב מספיק, המספר הזה מחולק במחלק כדי להניב את ערך צבע היעד הסופי. המחלק שהוא סכום כל ערכי המטריצה נוטה להיות בעל אפקט השוואה על עוצמת הצבע הכללית של התוצאה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2223
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2237
 msgid "Bias"
-msgstr ""
+msgstr "להטות"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2223
-msgid ""
-"This value is added to each component. This is useful to define a constant "
-"value as the zero response of the filter."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2237
+msgid "This value is added to each component. This is useful to define a constant value as the zero response of the filter."
+msgstr "ערך זה נוסף לכל מרכיב. פעולה זו שימושית להגדרת ערכים קבועים כתגובת אפס של המסנן."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2224
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2238
 msgid "Edge Mode"
-msgstr ""
+msgstr "מצב קצוות"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2224
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2238
+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 "מציין כיצד למתוח את תמונת הפלט כנדרש עם ערכי צבע כך שניתן יהיה להחיל פעולות מטריצה כאשר הליבה ממוקמת ליד קצה תמונת הפלט."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2225
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2239
 msgid "Preserve Alpha"
-msgstr ""
+msgstr "שמור על השקיפות"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2225
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2239
 msgid "If set, the alpha channel won't be altered by this filter primitive."
-msgstr ""
+msgstr "במידה והוגדר, ערוץ השקיפות לא ישתנה על ידי מסנן קדמוני זה."
 
 #. default: white
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2228
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2242
 msgid "Diffuse Color"
-msgstr ""
+msgstr "הפץ את הצבע"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2228
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2261
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2242
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2275
 msgid "Defines the color of the light source"
-msgstr ""
+msgstr "מגדיר את צבע מקור האור"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2229
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2262
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2243
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2276
 msgid "Surface Scale"
-msgstr ""
+msgstr "שינוי גודל פני השטח"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2229
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2262
-msgid ""
-"This value amplifies the heights of the bump map defined by the input alpha "
-"channel"
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2243
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2276
+msgid "This value amplifies the heights of the bump map defined by the input alpha channel"
+msgstr "ערך זה מדגיש את גבהי מפת התבליט המוגדרת על ידי ערוץ השקיפות"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2263
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2244
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2277
 msgid "Constant"
-msgstr ""
+msgstr "קבוע"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2263
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2244
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2277
 msgid "This constant affects the Phong lighting model."
-msgstr ""
+msgstr "קבוע זה משפיע על מודל התאורה של פונג."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2231
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2265
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2245
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2279
 msgid "Kernel Unit Length"
-msgstr ""
+msgstr "אורך יחידות הליבה"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2235
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2249
 msgid "This defines the intensity of the displacement effect."
-msgstr ""
+msgstr "פעולה זו מגדירה את עוצמת אפקט שינוי המיקום."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2236
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2250
 msgid "X displacement"
-msgstr ""
+msgstr "שינוי מקום ב־X"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2236
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2250
 msgid "Color component that controls the displacement in the X direction"
-msgstr ""
+msgstr "מרכיב הצבע השולט על שינוי המיקום בכיוון ה־X"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2237
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2251
 msgid "Y displacement"
-msgstr ""
+msgstr "שינוי מיקום ב־Y"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2237
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2251
 msgid "Color component that controls the displacement in the Y direction"
-msgstr ""
+msgstr "מרכיב הצבע השולט על שינוי המיקום בכיוון ה־Y"
 
 #. default: black
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2240
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2254
 msgid "Flood Color"
-msgstr ""
+msgstr "הצפה בצבע"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2240
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2254
 msgid "The whole filter region will be filled with this color."
-msgstr ""
+msgstr "כל איזור המסנן יתמלא בצבע זה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2244
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2258
 msgid "Standard Deviation"
-msgstr ""
+msgstr "סטיית תקן"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2244
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2258
 msgid "The standard deviation for the blur operation."
-msgstr ""
+msgstr "סטיית התקן עבור פעולת הטשטוש."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2250
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2264
 msgid ""
 "Erode: performs \"thinning\" of input image.\n"
 "Dilate: performs \"fattenning\" of input image."
 msgstr ""
+"שחיקה: מבצע \"הצרה\" של תמונת הפלט.\n"
+"הרחבה: מבצע \"השמנה\" של תמונת הפלט."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2254
-#, fuzzy
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2268
 msgid "Source of Image"
-msgstr "×\9eספר ×¦×¢×\93×\99×\9d"
+msgstr "×\9eק×\95ר ×\94ת×\9e×\95× ×\94"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2257
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2271
 msgid "Delta X"
-msgstr ""
+msgstr "שינוי ב־X"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2257
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2271
 msgid "This is how far the input image gets shifted to the right"
-msgstr ""
+msgstr "זהו המרחק המרבי אליו תוזז התמונה לימין"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2258
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2272
 msgid "Delta Y"
-msgstr ""
+msgstr "שינוי ב־Y"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2258
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2272
 msgid "This is how far the input image gets shifted downwards"
-msgstr ""
+msgstr "זהו המרחק המרבי אליו תוזז התמונה כלפי מטה"
 
 #. default: white
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2261
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2275
 msgid "Specular Color"
-msgstr ""
+msgstr "צבע ההשתקפות"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2264
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2278
 #: ../share/extensions/interp.inx.h:2
 msgid "Exponent"
-msgstr ""
+msgstr "מעריך"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2264
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2278
 msgid "Exponent for specular term, larger is more \"shiny\"."
-msgstr ""
+msgstr "מעריך ביטוי ההשתקפות, גדול יותר זה \"נוצץ\" יותר."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2273
-msgid ""
-"Indicates whether the filter primitive should perform a noise or turbulence "
-"function."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2287
+msgid "Indicates whether the filter primitive should perform a noise or turbulence function."
+msgstr "מציין האם המסנן הקדמוני אמור לבמע רעש או פונקציית עירבול."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2274
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2288
 msgid "Base Frequency"
-msgstr ""
+msgstr "תדירות בסיס"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2275
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2289
 msgid "Octaves"
-msgstr ""
+msgstr "מתומנים"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2276
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2290
 msgid "Seed"
-msgstr ""
+msgstr "זרע"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2276
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2290
 msgid "The starting number for the pseudo random number generator."
-msgstr ""
+msgstr "המספר ההתחלתי עבור ייצרן המספרים הבדויים האקראיים."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2288
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2302
 msgid "Add filter primitive"
-msgstr ""
+msgstr "הוסף מסנן קדמוני"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2304
-msgid ""
-"The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, "
-"multiply, darken and lighten."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2319
+msgid "The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, multiply, darken and lighten."
+msgstr "המסנן הקדמוני <b>feBlend</b> מספק 4 מצבי עירבול תמונה: מסך, הכפלה, האפלה והארה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2308
-msgid ""
-"The <b>feColorMatrix</b> filter primitive applies a matrix transformation to "
-"colour of each rendered pixel. This allows for effects like turning object "
-"to grayscale, modifying colour saturation and changing colour hue."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2323
+msgid "The <b>feColorMatrix</b> filter primitive applies a matrix transformation to colour of each rendered pixel. This allows for effects like turning object to grayscale, modifying colour saturation and changing colour hue."
+msgstr "המסנן הקדמוני <b>feColorMatrix</b> מחיל מטריצת שינוי לצבע מכל פיקסל מעובד. דבר זה מאפשר אפקטים כמו הפיכת צבעי התמונה לגווני אפור, שינוי רוויית הצבע ושינוי גוון הצבע."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2312
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2327
+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 "המסנן הקדמוני <b>feComponentTransfer</b> משנה את רכיבי הצבע הנקלט (אדום, ירוק, כחול ושקיפות) בהתאם לפונקציות העברה מסויימות, מאפשר לפעולות כמו התאמת בהירות וניגודיות, איזון צבעים, והנחת סף."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2316
-msgid ""
-"The <b>feComposite</b> filter primitive composites two images using one of "
-"the Porter-Duff blending modes or the aritmetic mode described in SVG "
-"standard. Porter-Duff blending modes are essentially logical operations "
-"between the corresponding pixel values of the images."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2331
+msgid "The <b>feComposite</b> filter primitive composites two images using one of the Porter-Duff blending modes or the aritmetic mode described in SVG standard. Porter-Duff blending modes are essentially logical operations between the corresponding pixel values of the images."
+msgstr "המסנן הקדמוני <b>feComposite</b> מאחד שתי תמונות באמצעות מצבי העירבול Porter-Duff או המצב החשבוני המתואר בתקן ה־SVG . מצבי עירבולPorter-Duff הינן פעולות לוגיות נחוצות בין הערכים התואמים של הפיקסלים שבתמונה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2320
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2335
+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 "המסנן הקדמוני <b>feConvolveMatrix</b> מאפשר לך לעוות את התמונה. אפקטים נפוצים הנוצרים באמצעות מטריצת עווית הינם טישטוש, חידוד , הבלטה וזיהוי קצוות. שים לב שבזמן שניתן ליצור טישטוש פעמוני באמצעות מסנן קדמוני זה, מסנן הטשטוש הפעמוני הקדמוני הינו מהיר יותר ואינו תלוי ברזולוציה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2324
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2339
+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 "המסננים הקדמוניים <b>feDiffuseLighting</b> ו־feSpecularLighting יוצרים צלליות \"מובלטות\".  קלט ערוץ השקיפות משמש לאספקת מידע אודות העומק: אזורים בעל אטימות גבוהה יותר מוגבהים לכיוון הצופה ואזורים בעלי אטימות נמוכה יותר נסוגים מן הצופה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2328
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2343
+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 "המסנן הקדמוני <b>feDisplacementMap</b> מעביר את מיקומם של הפיקסלים בקלט הראשון באמצעות הקלט השני המשמש כמפת שינוי מיקום, המציגב מאיזה מרחק הפיקסל אמור להגיע. דוגמאות קלאסיות לכך הם האפקטים סחרור וצביטה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2332
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2347
+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 "המסנן הקדמוני <b>feFlood</b> ממלא את האזור בצבע ובאטימות נתונים. לרב נעשה בו שימוש כקלט על ידי מדנן אחרים כדי להחיל צבע על גרפיקה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2336
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2351
+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 "המסנן הקדמוני <b>feGaussianBlur</b> מטשטש באופן אחיד את הקלט שלו. לרב נעשה בו שימוש יחד עם feOffset כדי ליצור אפקט של הטלת צללית."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2340
-msgid ""
-"The <b>feImage</b> filter primitive fills the region with an external image "
-"or another part of the document."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2355
+msgid "The <b>feImage</b> filter primitive fills the region with an external image or another part of the document."
+msgstr "המסנן הקדמוני <b>feImage</b> ממלא את האזור עם תמונה חיצונית או עם חלק אחר מהמסמך."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2344
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2359
+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 "המסנן הקדמוני <b>feMerge</b> משלב מספר תמונות זמניות בתוך המסנן הקדמוני לתמונה אחידה. המסנן עושה שימוש בשילוב שקיפות רגיל בשביל זה. פעולה זו מקבילה לשימוש בכמה מסננים קדמונים מסוג feBlend במצב 'רגיל' או כמה מסננים קדמונים מסוג feComposite במצב 'חפיפה'."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2348
-msgid ""
-"The <b>feMorphology</b> filter primitive provides erode and dilate effects. "
-"For single-colour objects erode makes the object thinner and dilate makes it "
-"thicker."
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2363
+msgid "The <b>feMorphology</b> filter primitive provides erode and dilate effects. For single-colour objects erode makes the object thinner and dilate makes it thicker."
+msgstr "המסנן הקדמוני <b>feMorphology</b> מספק אפקטים של סחיפה והתרחבות. עבור פריטים בעלי צבע אחיד סחיפה גורמת לפריט להיות צר יותר בעוד ההתרחבות מעבה אותו."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2352
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2367
+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 "המסנן הקדמוני <b>feOffset</b> מסיט את התמונה לפי כמות המוגדרת בידי המשתמש. לדוגמא, פעולה זו שימושית להטלת צללים, כאשר הצל הוא במיקום שונה מהפריט עצמו."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2356
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2371
+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 "המסננים הקדמונים feDiffuseLighting ו־<b>feSpecularLighting</b> יוצרים צלליות \"מובלטות\".  ערוץ השקיפות של הפלט משמש לאספקת מידע אודות העומק: אזורים בעלי אטימות גבוהה יותר מוגבהים אל עבר הצופה בעוד שאזורים בעלי אטימות נמוכה נסוגים מהצופה."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2360
-msgid ""
-"The <b>feTile</b> filter primitive tiles a region with its input graphic"
-msgstr ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2375
+msgid "The <b>feTile</b> filter primitive tiles a region with its input graphic"
+msgstr "המסנן הקדמוני <b>feTile</b> מרצף אזור באמצעות הקלט הגרפי שלו"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2364
-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 ""
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2379
+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 "המסנן הקדמוני <b>feTurbulence</b> מייצר רעש פרלין. רעש מסוג זה שימושי להדמיית מספר תופעות טבע כגון עננים, אש ועשן ובייצור מרקמים מורכבים כמו שיש או גרניט."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2382
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2397
 msgid "Duplicate filter primitive"
-msgstr ""
+msgstr "שכפל מסנן קדמוני"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2435
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2450
 msgid "Set filter primitive attribute"
-msgstr ""
+msgstr "הגדר את תכונות המסנן הקדמוני"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:147
+#: ../src/ui/dialog/inkscape-preferences.cpp:156
 msgid "Mouse"
-msgstr ""
+msgstr "עכבר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:149
+#: ../src/ui/dialog/inkscape-preferences.cpp:158
 msgid "Grab sensitivity:"
-msgstr ""
+msgstr "רגישות אחיזה:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:149
-#: ../src/ui/dialog/inkscape-preferences.cpp:152
-#: ../src/ui/dialog/inkscape-preferences.cpp:168
-#: ../src/ui/dialog/inkscape-preferences.cpp:172
-#: ../src/ui/dialog/inkscape-preferences.cpp:182
+#: ../src/ui/dialog/inkscape-preferences.cpp:158
+#: ../src/ui/dialog/inkscape-preferences.cpp:161
+#: ../src/ui/dialog/inkscape-preferences.cpp:177
+#: ../src/ui/dialog/inkscape-preferences.cpp:181
+#: ../src/ui/dialog/inkscape-preferences.cpp:191
 msgid "pixels"
-msgstr ""
+msgstr "פיקסלים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:150
-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 ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:159
+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 "כמה קרוב על המסך תצטרך להיות לפריט כדי שתוכל לאחוז בו עם העכבר (בפיקסלים על המסך)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:152
+#: ../src/ui/dialog/inkscape-preferences.cpp:161
 msgid "Click/drag threshold:"
-msgstr ""
+msgstr "סף לחיצה/גרירה:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:153
-msgid ""
-"Maximum mouse drag (in screen pixels) which is considered a click, not a drag"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:162
+msgid "Maximum mouse drag (in screen pixels) which is considered a click, not a drag"
+msgstr "גרירת עכבר מרבית (בפיקסלים על המסך) שתחשב כלחיצה ולא כגרירה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:155
+#: ../src/ui/dialog/inkscape-preferences.cpp:164
 msgid "Use pressure-sensitive tablet (requires restart)"
-msgstr ""
+msgstr "השתמש בטבלה הרגישה ללחיצה (נדרש איתחול)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:157
-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 ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:166
+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 "השתמש בתכונותיה של טבלה או התקן אחר הרגיש ללחיצה. בטל זאת רק אם אתה נתקל בבעיות עם הטבלה (עדיין תוכל להשתמש ב בתור עכבר)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:159
+#: ../src/ui/dialog/inkscape-preferences.cpp:168
 msgid "Switch tool based on tablet device (requires restart)"
-msgstr ""
+msgstr "כלי ההחלפה המבוסס על התקן טבלאי (דורש איתחול)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:161
-msgid ""
-"Change tool as different devices are used on the tablet (pen, eraser, mouse)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:170
+msgid "Change tool as different devices are used on the tablet (pen, eraser, mouse)"
+msgstr "שנה כלי לפי ההתקנים המופעלים על המחשב הטבלאי (עט, מחק, עכבר)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:166
+#: ../src/ui/dialog/inkscape-preferences.cpp:175
 msgid "Scrolling"
-msgstr ""
+msgstr "גלילה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:168
+#: ../src/ui/dialog/inkscape-preferences.cpp:177
 msgid "Mouse wheel scrolls by:"
-msgstr ""
+msgstr "גלגלת העכבר גוללת:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:169
-msgid ""
-"One mouse wheel notch scrolls by this distance in screen pixels "
-"(horizontally with Shift)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:178
+msgid "One mouse wheel notch scrolls by this distance in screen pixels (horizontally with Shift)"
+msgstr "חריץ גלגלת אחד בעכבר גולל במרחק זה בפיקסלים על המסך (אופקית עם Shift)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:170
+#: ../src/ui/dialog/inkscape-preferences.cpp:179
 msgid "Ctrl+arrows"
-msgstr ""
+msgstr "Ctrl+חיצים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:172
+#: ../src/ui/dialog/inkscape-preferences.cpp:181
 msgid "Scroll by:"
-msgstr ""
+msgstr "גלול ב־:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:173
+#: ../src/ui/dialog/inkscape-preferences.cpp:182
 msgid "Pressing Ctrl+arrow key scrolls by this distance (in screen pixels)"
-msgstr ""
+msgstr "לחיצה על Ctrl+מקשי החיצים גולל במרחק זה (בפיקסלים על המסך)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:175
+#: ../src/ui/dialog/inkscape-preferences.cpp:184
 msgid "Acceleration:"
-msgstr ""
+msgstr "תאוצה:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:176
-msgid ""
-"Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no "
-"acceleration)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:185
+msgid "Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no acceleration)"
+msgstr "לחיצה והחזקת Ctrl+חץ תגביר את מהירות הגלילה באופן הדרגתי (0 כדי לבטל האצה)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:177
+#: ../src/ui/dialog/inkscape-preferences.cpp:186
 msgid "Autoscrolling"
-msgstr ""
+msgstr "גלילה אוטומטית"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:179
+#: ../src/ui/dialog/inkscape-preferences.cpp:188
 msgid "Speed:"
-msgstr ""
+msgstr "מהירות:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:180
-msgid ""
-"How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn "
-"autoscroll off)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:189
+msgid "How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn autoscroll off)"
+msgstr "באיזו מהירות יגלול לוח הציור אוטומטית כאשר אתה גורר מעבר לגבולות לוח הציור (0 לביטול הגלילה האוטומטית)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:182
-#: ../src/ui/dialog/tracedialog.cpp:410 ../src/ui/dialog/tracedialog.cpp:443
-#: ../src/ui/dialog/tracedialog.cpp:586 ../src/widgets/toolbox.cpp:5741
+#: ../src/ui/dialog/inkscape-preferences.cpp:191
+#: ../src/ui/dialog/tracedialog.cpp:409
+#: ../src/ui/dialog/tracedialog.cpp:442
+#: ../src/ui/dialog/tracedialog.cpp:585
+#: ../src/widgets/toolbox.cpp:6691
 msgid "Threshold:"
-msgstr ""
+msgstr "סף:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:183
-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 ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:192
+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 "כמה רחוק (בפיקסלים על המסך) עליך להיות מקצה לוח הציור כדי להפעיל את הגלילה האוטומטית; ערך חיובי הוא מחוץ ללוח הציור, ערך שלילי הוא בתוך לוח הציור"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:184
+#: ../src/ui/dialog/inkscape-preferences.cpp:193
 msgid "Left mouse button pans when Space is pressed"
-msgstr ""
+msgstr "מקש העכבר השמאלי מסיט את התצוגה כאשר נלחץ מקש הרווח"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:186
-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 ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:195
+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 "כאשר פעיל, לחיצה והחזקה על מקש הרווח וגרירה עם מקש העכבר השמאלי מסיטה את לוח הציור (כמו ב־Adobe Illustrator). כאשר מבוטל, הרווח מחליף באופן זמני לכלי הבחירה (ברירת מחדל)."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:187
+#: ../src/ui/dialog/inkscape-preferences.cpp:196
 msgid "Mouse wheel zooms by default"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:189
-msgid ""
-"When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when "
-"off, it zooms with Ctrl and scrolls without Ctrl."
-msgstr ""
+msgstr "גלגלת העכבר מקרבת/מרחיקה כברירת מחדל"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:194
-msgid "Steps"
-msgstr "ש×\9c×\91×\99×\9d"
+#: ../src/ui/dialog/inkscape-preferences.cpp:198
+msgid "When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when off, it zooms with Ctrl and scrolls without Ctrl."
+msgstr "×\9b×\90שר ×¤×¢×\99×\9c, ×\92×\9c×\92×\9cת ×\94×¢×\9b×\91ר ×\9eתקר×\91ת ×\95×\9eתר×\97קת ×\9c×\9c×\90 Ctrl ×\95×\92×\95×\9c×\9cת ×\90ת ×\9c×\95×\97 ×\94צ×\99×\95ר ×¢×\9d Ctrl; ×\9b×\90שר ×\9e×\91×\95×\98×\9c, ×\9eתקר×\91ת ×\90×\95 ×\9eתר×\97קת ×¢×\9d Ctrl ×\95×\92×\95×\9c×\9cת ×\91×\9c×\99 Ctrl."
 
 #. nudgedistance is limited to 1000 in select-context.cpp: use the same limit here
-#: ../src/ui/dialog/inkscape-preferences.cpp:198
+#: ../src/ui/dialog/inkscape-preferences.cpp:207
 msgid "Arrow keys move by:"
-msgstr ""
+msgstr "מקשי החיצים מזיזים ב־:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:199
-msgid ""
-"Pressing an arrow key moves selected object(s) or node(s) by this distance "
-"(in px units)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:208
+msgid "Pressing an arrow key moves selected object(s) or node(s) by this distance (in px units)"
+msgstr "לחיצה על חץ מזיזה את הפריט/ים הנבחר/ים במרחק זה (ביחידות פיקסל)"
 
 #. defaultscale is limited to 1000 in select-context.cpp: use the same limit here
-#: ../src/ui/dialog/inkscape-preferences.cpp:202
+#: ../src/ui/dialog/inkscape-preferences.cpp:211
 msgid "> and < scale by:"
-msgstr ""
+msgstr "> ו־< משנים קנה מידה ב־:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:203
-msgid ""
-"Pressing > or < scales selection up or down by this increment (in px units)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:212
+msgid "Pressing > or < scales selection up or down by this increment (in px units)"
+msgstr "לחיצה על > או < משנה את קנה מידת הבחירה למעלה או למטה בכמות זו (ביחידות פיקסל)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:205
+#: ../src/ui/dialog/inkscape-preferences.cpp:214
 msgid "Inset/Outset by:"
-msgstr ""
+msgstr "צמצם/הרחב ב־:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:206
-msgid ""
-"Inset and Outset commands displace the path by this distance (in px units)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:215
+msgid "Inset and Outset commands displace the path by this distance (in px units)"
+msgstr "פקודות הצימצום וההרחבה משנות את פריסת הנתיב במרחק זה (ביחידות פיקסל)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:207
+#: ../src/ui/dialog/inkscape-preferences.cpp:216
 msgid "Compass-like display of angles"
-msgstr ""
+msgstr "תצוגת זוויות כמו מצפן"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:209
-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 ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:218
+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 "כאשר פעיל, זוויות מוצגות עם 0 כצפון, טווח של 0 עד 360, חיובי עם כיוון השעון; אחרת עם 0 במזרח, טווח של 180- עד 180, חיובי נגד כיוון השעון"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:215
+#: ../src/ui/dialog/inkscape-preferences.cpp:224
 msgid "Rotation snaps every:"
-msgstr ""
+msgstr "הסיבוב נצמד בכל:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:215
+#: ../src/ui/dialog/inkscape-preferences.cpp:224
 msgid "degrees"
 msgstr "מעלות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:216
-msgid ""
-"Rotating with Ctrl pressed snaps every that much degrees; also, pressing "
-"[ or ] rotates by this amount"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:225
+msgid "Rotating with Ctrl pressed snaps every that much degrees; also, pressing [ or ] rotates by this amount"
+msgstr "סיבוב עם Ctrl לחוץ נצמד בכל מספר זה של מעלות; כמו כן, לחיצה על [ או ] מסובבת לפי כמות זו."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:218
+#: ../src/ui/dialog/inkscape-preferences.cpp:227
 msgid "Zoom in/out by:"
-msgstr ""
+msgstr "התקרב/התרחק ב־:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:219
-msgid ""
-"Zoom tool click, +/- keys, and middle click zoom in and out by this "
-"multiplier"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:228
+msgid "Zoom tool click, +/- keys, and middle click zoom in and out by this multiplier"
+msgstr "לחיצה על כלי התקריב, על מקשי ה \"+/-\", והתקרבות או התרחקות באמצעות לחצן אמצעי לפי מכפיל זה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:225
+#: ../src/ui/dialog/inkscape-preferences.cpp:234
 msgid "Show selection cue"
-msgstr ""
+msgstr "הצג סמן בחירה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:226
-msgid ""
-"Whether selected objects display a selection cue (the same as in selector)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:235
+msgid "Whether selected objects display a selection cue (the same as in selector)"
+msgstr "במידה ונבחר פריטים יציגו סמן בחירה (כמו בכלי הבחירה)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:232
+#: ../src/ui/dialog/inkscape-preferences.cpp:241
 msgid "Enable gradient editing"
-msgstr ""
+msgstr "אפשר עריכת מדרג"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:233
+#: ../src/ui/dialog/inkscape-preferences.cpp:242
 msgid "Whether selected objects display gradient editing controls"
-msgstr ""
+msgstr "במידה ונבחר פריטים יציגו פקדי עריכת מדרג"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:238
+#: ../src/ui/dialog/inkscape-preferences.cpp:247
 msgid "Conversion to guides uses edges instead of bounding box"
-msgstr ""
+msgstr "המרה לקווים מנחים עושה שימוש בקצוות במקום בתיבה התוחמת"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:239
-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 ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:248
+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 "המרת פריט לקווים מנחים מציבה את אלה לאורך קצוותיו האמיתיים של הפריט (מחקה את צורת הפריט), לא לאורך התיבה התוחמת."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:246
+#: ../src/ui/dialog/inkscape-preferences.cpp:255
 msgid "Ctrl+click dot size:"
-msgstr ""
+msgstr "גודל נקודת Ctrl+לחיצה:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:246
+#: ../src/ui/dialog/inkscape-preferences.cpp:255
 msgid "times current stroke width"
-msgstr ""
+msgstr "פי כמה מרוחב קו המתאר הנוכחי"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:247
+#: ../src/ui/dialog/inkscape-preferences.cpp:256
 msgid "Size of dots created with Ctrl+click (relative to current stroke width)"
-msgstr ""
+msgstr "גודל הנקודות שנוצרות עם Ctrl+לחיצה (ביחס לרוחב קו המתאר הנוכחי)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:262
+#: ../src/ui/dialog/inkscape-preferences.cpp:271
 msgid "<b>No objects selected</b> to take the style from."
-msgstr ""
+msgstr "<b>לא נבחרו פריטים</b> מהם יש לקחת סגנון."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:271
-msgid ""
-"<b>More than one object selected.</b>  Cannot take style from multiple "
-"objects."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:280
+msgid "<b>More than one object selected.</b>  Cannot take style from multiple objects."
+msgstr "<b>נבחר יותר מפריט אחד.</b>  לא ניתן לקחת סגנון ממספר פריטים."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:305
+#: ../src/ui/dialog/inkscape-preferences.cpp:313
 msgid "Create new objects with:"
-msgstr ""
+msgstr "צור פריטים חדשים עם:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:307
+#: ../src/ui/dialog/inkscape-preferences.cpp:315
 msgid "Last used style"
-msgstr ""
+msgstr "הסגנון האחרון בשימוש"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:309
+#: ../src/ui/dialog/inkscape-preferences.cpp:317
 msgid "Apply the style you last set on an object"
-msgstr ""
+msgstr "החל את הסגנון שהגדרת לאחרונה לפריט"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:314
+#: ../src/ui/dialog/inkscape-preferences.cpp:322
 msgid "This tool's own style:"
-msgstr ""
+msgstr "סגנון ייחודי לכלי זה:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:318
-msgid ""
-"Each tool may store its own style to apply to the newly created objects. Use "
-"the button below to set it."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:326
+msgid "Each tool may store its own style to apply to the newly created objects. Use the button below to set it."
+msgstr "כל כלי יכול לאחסן את סגנונו הייחודי להחלה על הפריטים החדשים שנוצרים. השתמש בכפתור להלן כדי להגדיר אותו."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:323
+#. style swatch
+#: ../src/ui/dialog/inkscape-preferences.cpp:330
 msgid "Take from selection"
-msgstr ""
+msgstr "קח מהבחירה."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:327
+#: ../src/ui/dialog/inkscape-preferences.cpp:335
 msgid "This tool's style of new objects"
-msgstr ""
+msgstr "סגנון כלי זה עבור פריטים חדשים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:335
+#: ../src/ui/dialog/inkscape-preferences.cpp:342
 msgid "Remember the style of the (first) selected object as this tool's style"
-msgstr ""
+msgstr "זכור את הסגנון של הפריט (הראשון) שנבחר בתור סגנון כלי זה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:340
+#: ../src/ui/dialog/inkscape-preferences.cpp:347
 msgid "Tools"
 msgstr "כלים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:343
+#: ../src/ui/dialog/inkscape-preferences.cpp:350
 msgid "Bounding box to use:"
-msgstr ""
+msgstr "תיבה תוחמת לשימוש:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:344
+#: ../src/ui/dialog/inkscape-preferences.cpp:351
 msgid "Visual bounding box"
-msgstr ""
+msgstr "תיבה תוחמת חזותית"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:346
+#: ../src/ui/dialog/inkscape-preferences.cpp:353
 msgid "This bounding box includes stroke width, markers, filter margins, etc."
-msgstr ""
+msgstr "תיבה תוחמת זו מכילה את עובי קו המתאר, סמנים, מסנן שוליים וכו'."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:347
+#: ../src/ui/dialog/inkscape-preferences.cpp:354
 msgid "Geometric bounding box"
-msgstr ""
+msgstr "תיבה תוחמת גאומטרית"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:349
+#: ../src/ui/dialog/inkscape-preferences.cpp:356
 msgid "This bounding box includes only the bare path"
-msgstr ""
+msgstr "תיבה תוחמת זו מכילה רק את הנתיב החשוף"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:351
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:358
 msgid "Conversion to guides:"
-msgstr "×\94×\96×\96 ×§×\95 ×\9e× ×\97×\94"
+msgstr "×\94×\9eר×\94 ×\9cק×\95×\95×\99×\9d ×\9e× ×\97×\99×\9d:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:352
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:359
 msgid "Keep objects after conversion to guides"
-msgstr "×\91×\97ר ×\90ת <b>×\94×\90×\95×\91×\99ק×\98×\99×\9d</b> ×©×¢×\9c×\99×\94×\9d ×\99×\95×\95צר ×\94×\92ר×\93×\99×\90× ×\98."
+msgstr "×\94ש×\90ר ×\90ת ×\94פר×\99×\98×\99×\9d ×\9c×\90×\97ר ×\94×\94×\9eר×\94 ×\9cק×\95×\95×\99×\9d ×\9e× ×\97×\99×\9d"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:354
-msgid ""
-"When converting an object to guides, don't delete the object after the "
-"conversion."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:361
+msgid "When converting an object to guides, don't delete the object after the conversion."
+msgstr "כאשר ממירים פריט לקווים מנחים, אל תמחק את הפריט לאחר ההמרה."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:355
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:362
 msgid "Treat groups as a single object"
-msgstr "צ×\95ר ×\9e×\97×\91ר ×\97×\93ש"
+msgstr "×\94ת×\99×\99×\97ס ×\9cק×\91×\95צ×\95ת ×\9b×\90×\9c ×¤×¨×\99×\98×\99×\9d ×\91×\95×\93×\93×\99×\9d"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:357
-msgid ""
-"Treat groups as a single object during conversion to guides rather than "
-"converting each child separately."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:364
+msgid "Treat groups as a single object during conversion to guides rather than converting each child separately."
+msgstr "התייחס לקבוצות כאל פריט יחיד במהלך המרה לקווים מנחים מאשר המרת כל צאצא בנפרד"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:359
+#: ../src/ui/dialog/inkscape-preferences.cpp:366
 msgid "Width is in absolute units"
-msgstr ""
+msgstr "הרוחב הוא ביחידות מוחלטות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:360
+#: ../src/ui/dialog/inkscape-preferences.cpp:367
 msgid "Select new path"
-msgstr ""
+msgstr "בחר נתיב חדש"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:361
+#: ../src/ui/dialog/inkscape-preferences.cpp:368
 msgid "Don't attach connectors to text objects"
-msgstr ""
+msgstr "אל תחבר את המחברים לפריטי טקסט"
 
 #. Selector
-#: ../src/ui/dialog/inkscape-preferences.cpp:364
+#: ../src/ui/dialog/inkscape-preferences.cpp:371
 msgid "Selector"
-msgstr ""
+msgstr "בוחר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:367
+#: ../src/ui/dialog/inkscape-preferences.cpp:374
 msgid "When transforming, show:"
-msgstr ""
+msgstr "בזמן שינוי הצורה, הצג:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:368
+#: ../src/ui/dialog/inkscape-preferences.cpp:375
 msgid "Objects"
-msgstr ""
+msgstr "פריטים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:370
+#: ../src/ui/dialog/inkscape-preferences.cpp:377
 msgid "Show the actual objects when moving or transforming"
-msgstr ""
+msgstr "הראה את הפריטים עצמם בעת הזזה או שינוי צורה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:371
+#: ../src/ui/dialog/inkscape-preferences.cpp:378
 msgid "Box outline"
-msgstr ""
+msgstr "קווי חוץ התיבה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:373
+#: ../src/ui/dialog/inkscape-preferences.cpp:380
 msgid "Show only a box outline of the objects when moving or transforming"
-msgstr ""
+msgstr "הצג רק את קווי חוץ התיבה של הפריטים כאשר הם מוזזים או צורתם משתנה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:374
+#: ../src/ui/dialog/inkscape-preferences.cpp:381
 msgid "Per-object selection cue:"
-msgstr ""
+msgstr "סמן בחירה עבור כל פריט בנפרד:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:377
+#: ../src/ui/dialog/inkscape-preferences.cpp:384
 msgid "No per-object selection indication"
-msgstr ""
+msgstr "ללא מחוון בחירה לכל פריט בפרד"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:378
+#: ../src/ui/dialog/inkscape-preferences.cpp:385
 msgid "Mark"
-msgstr ""
+msgstr "סימון"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:380
+#: ../src/ui/dialog/inkscape-preferences.cpp:387
 msgid "Each selected object has a diamond mark in the top left corner"
-msgstr ""
+msgstr "לכל פריט יוצג סמן יהלום בפינה השמאלית העליונה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:381
+#: ../src/ui/dialog/inkscape-preferences.cpp:388
 msgid "Box"
-msgstr ""
+msgstr "תיבה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:383
+#: ../src/ui/dialog/inkscape-preferences.cpp:390
 msgid "Each selected object displays its bounding box"
-msgstr ""
+msgstr "כל פריט שנבחר יציג את תיבתו התוחמת"
 
 #. Node
-#: ../src/ui/dialog/inkscape-preferences.cpp:386
+#: ../src/ui/dialog/inkscape-preferences.cpp:393
 msgid "Node"
-msgstr "צ×\95×\9eת"
+msgstr "×\9eפרק"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:389
+#: ../src/ui/dialog/inkscape-preferences.cpp:396
 msgid "Path outline:"
-msgstr ""
+msgstr "מתאר הנתיב:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:390
-#: ../src/ui/dialog/inkscape-preferences.cpp:391
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:397
+#: ../src/ui/dialog/inkscape-preferences.cpp:398
 msgid "Path outline color"
-msgstr "×\94×\93×\91ק ×¦×\91×¢"
+msgstr "צ×\91×¢ ×\9eת×\90ר ×\94נת×\99×\91"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:391
+#: ../src/ui/dialog/inkscape-preferences.cpp:398
 msgid "Selects the color used for showing the path outline."
-msgstr ""
+msgstr "בוחר את הצבא המשמש להצגת קו המתאר של הנתיב."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:392
+#: ../src/ui/dialog/inkscape-preferences.cpp:399
 msgid "Path outline flash on mouse-over"
-msgstr ""
+msgstr "קוי החוץ מהבהבים עם מעבר סמן העכבר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:393
+#: ../src/ui/dialog/inkscape-preferences.cpp:400
 msgid "When hovering over a path, briefly flash its outline."
-msgstr ""
+msgstr "בעת מעבר מעל נתיב, קווי החוץ יהבהבו בקצרה."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:395
+#: ../src/ui/dialog/inkscape-preferences.cpp:402
 msgid "Flash time"
-msgstr ""
+msgstr "זמן ההיבהוב"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:395
-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 ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:402
+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 "מגדיר למשך כמה זמן קווי החוץ של הנתיב יהיו גלויים לאחר מעבר סמן העכבר (במילישניות). הגדר 0 כדי שקווי החוץ יוצגו עד שסמן העכבר עוזב את הנתיב."
 
 #. Tweak
-#: ../src/ui/dialog/inkscape-preferences.cpp:398 ../src/verbs.cpp:2419
+#: ../src/ui/dialog/inkscape-preferences.cpp:405
+#: ../src/verbs.cpp:2480
 msgid "Tweak"
-msgstr ""
+msgstr "עיוות"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:406
+msgid "Paint objects with:"
+msgstr "צייר פריטים עם:"
 
 #. Zoom
-#: ../src/ui/dialog/inkscape-preferences.cpp:403
-#: ../src/ui/view/edit-widget.cpp:1073 ../src/verbs.cpp:2441
-#: ../src/widgets/desktop-widget.cpp:490
+#: ../src/ui/dialog/inkscape-preferences.cpp:411
+#: ../src/ui/view/edit-widget.cpp:1073
+#: ../src/verbs.cpp:2502
+#: ../src/widgets/desktop-widget.cpp:477
 #: ../share/extensions/render_alphabetsoup.inx.h:5
 msgid "Zoom"
-msgstr "×\96×\95×\9d"
+msgstr "תקר×\99×\91"
 
 #. Shapes
-#: ../src/ui/dialog/inkscape-preferences.cpp:408
+#: ../src/ui/dialog/inkscape-preferences.cpp:416
 msgid "Shapes"
 msgstr "צורות"
 
 #. Pencil
-#: ../src/ui/dialog/inkscape-preferences.cpp:436 ../src/verbs.cpp:2431
+#: ../src/ui/dialog/inkscape-preferences.cpp:444
+#: ../src/verbs.cpp:2492
 msgid "Pencil"
-msgstr "עפרון"
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:439
-#: ../src/ui/dialog/tracedialog.cpp:601
-msgid "Tolerance:"
-msgstr "טולרנס"
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:440
-msgid ""
-"This value affects the amount of smoothing applied to freehand lines; lower "
-"values produce more uneven paths with more nodes"
-msgstr ""
+msgstr "עיפרון"
 
 #. Pen
-#: ../src/ui/dialog/inkscape-preferences.cpp:446 ../src/verbs.cpp:2433
+#: ../src/ui/dialog/inkscape-preferences.cpp:450
+#: ../src/verbs.cpp:2494
 msgid "Pen"
 msgstr "עט"
 
 #. Calligraphy
-#: ../src/ui/dialog/inkscape-preferences.cpp:452 ../src/verbs.cpp:2435
+#: ../src/ui/dialog/inkscape-preferences.cpp:456
+#: ../src/verbs.cpp:2496
 msgid "Calligraphy"
 msgstr "קליגרפיה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:456
-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:460
+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:458
-msgid ""
-"If on, each newly created object will be selected (deselecting previous "
-"selection)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:462
+msgid "If on, each newly created object will be selected (deselecting previous selection)"
+msgstr "במידה והופעל, כל פריט חדש שנוצר ייבחר (ויבטל את הבחירה הקודמת)"
 
 #. Paint Bucket
-#: ../src/ui/dialog/inkscape-preferences.cpp:460 ../src/verbs.cpp:2447
+#: ../src/ui/dialog/inkscape-preferences.cpp:464
+#: ../src/verbs.cpp:2508
 msgid "Paint Bucket"
 msgstr "דלי צבע"
 
 #. Eraser
-#: ../src/ui/dialog/inkscape-preferences.cpp:465 ../src/verbs.cpp:2451
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:469
+#: ../src/verbs.cpp:2512
 msgid "Eraser"
-msgstr "מטר"
+msgstr "מוחק"
+
+#. LPETool
+#: ../src/ui/dialog/inkscape-preferences.cpp:473
+#: ../src/verbs.cpp:2514
+msgid "LPE Tool"
+msgstr "כלי LPE"
 
 #. Gradient
-#: ../src/ui/dialog/inkscape-preferences.cpp:475 ../src/verbs.cpp:2439
+#: ../src/ui/dialog/inkscape-preferences.cpp:483
+#: ../src/verbs.cpp:2500
 msgid "Gradient"
-msgstr "×\92ר×\93×\99×\90× ×\98"
+msgstr "×\9e×\93ר×\92"
 
 #. Connector
-#: ../src/ui/dialog/inkscape-preferences.cpp:479 ../src/verbs.cpp:2445
+#: ../src/ui/dialog/inkscape-preferences.cpp:487
+#: ../src/verbs.cpp:2506
 msgid "Connector"
 msgstr "מחבר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:482
+#: ../src/ui/dialog/inkscape-preferences.cpp:490
 msgid "If on, connector attachment points will not be shown for text objects"
-msgstr ""
+msgstr "במידה והופעל, נקודות חיבור המחברים לא יוצגו עבור פריטי טקסט"
 
 #. Dropper
-#: ../src/ui/dialog/inkscape-preferences.cpp:484 ../src/verbs.cpp:2443
+#: ../src/ui/dialog/inkscape-preferences.cpp:492
+#: ../src/verbs.cpp:2504
 msgid "Dropper"
-msgstr ""
+msgstr "דוגם"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:491
+#: ../src/ui/dialog/inkscape-preferences.cpp:499
 msgid "Save and restore window geometry for each document"
-msgstr ""
+msgstr "שמור ושחזר את מימדי החלון עבור כל מסמך"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:492
+#: ../src/ui/dialog/inkscape-preferences.cpp:500
 msgid "Remember and use last window's geometry"
-msgstr ""
+msgstr "זכור והשתמש במימדי החלון הקודם"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:493
+#: ../src/ui/dialog/inkscape-preferences.cpp:501
 msgid "Don't save window geometry"
-msgstr ""
+msgstr "אל תשמור את מימדי החלון"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:495
-#: ../src/ui/dialog/inkscape-preferences.cpp:515
+#: ../src/ui/dialog/inkscape-preferences.cpp:503
+#: ../src/ui/dialog/inkscape-preferences.cpp:523
 msgid "Dockable"
-msgstr ""
+msgstr "ניתן לעגינה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:498
+#: ../src/ui/dialog/inkscape-preferences.cpp:506
 msgid "Dialogs are hidden in taskbar"
-msgstr ""
+msgstr "תיבות הדו־שיח מוסתרות בסרגל המשימות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:499
+#: ../src/ui/dialog/inkscape-preferences.cpp:507
 msgid "Zoom when window is resized"
-msgstr ""
+msgstr "התקרב כאשר גודל החלון משתנה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:500
+#: ../src/ui/dialog/inkscape-preferences.cpp:508
 msgid "Show close button on dialogs"
-msgstr ""
+msgstr "הצג לחצן סגירה בתיבת הדו־שיח"
 
-#. consider moving this to an UI tab:
-#: ../src/ui/dialog/inkscape-preferences.cpp:502
-#: ../src/ui/dialog/inkscape-preferences.cpp:968
+#: ../src/ui/dialog/inkscape-preferences.cpp:510
+#: ../src/ui/dialog/inkscape-preferences.cpp:995
 msgid "Normal"
-msgstr ""
+msgstr "רגיל"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:503
+#: ../src/ui/dialog/inkscape-preferences.cpp:511
 msgid "Aggressive"
-msgstr ""
+msgstr "תוקפני"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:505
+#: ../src/ui/dialog/inkscape-preferences.cpp:513
 msgid "Saving window geometry (size and position):"
-msgstr ""
+msgstr "שמירת מימדי החלון (גודל ומיקום):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:507
+#: ../src/ui/dialog/inkscape-preferences.cpp:515
 msgid "Let the window manager determine placement of all windows"
-msgstr ""
+msgstr "הרשה למנהל החלונות לקבוע את מיקומי כל החלונות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:509
-msgid ""
-"Remember and use the last window's geometry (saves geometry to user "
-"preferences)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:517
+msgid "Remember and use the last window's geometry (saves geometry to user preferences)"
+msgstr "זכור והשתמש במימדי החלון הקודם (שומר את המימדים להגדרות המשתמש)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:511
-msgid ""
-"Save and restore window geometry for each document (saves geometry in the "
-"document)"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:519
+msgid "Save and restore window geometry for each document (saves geometry in the document)"
+msgstr "שמור ושחזר את מימדי החלון עבור כל מסמך (שומר את מימדי החלון במסמך)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:513
+#: ../src/ui/dialog/inkscape-preferences.cpp:521
 msgid "Dialog behavior (requires restart):"
-msgstr ""
+msgstr "התנהגות תיבת הדו־שיח (דורש איתחול):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:520
+#: ../src/ui/dialog/inkscape-preferences.cpp:528
 msgid "Dialogs on top:"
-msgstr ""
+msgstr "תיבות דו־שיח עליונות:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:523
+#: ../src/ui/dialog/inkscape-preferences.cpp:531
 msgid "Dialogs are treated as regular windows"
-msgstr ""
+msgstr "תיבות הדו־שיח מקבלות יחס של חלון רגיל"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:525
+#: ../src/ui/dialog/inkscape-preferences.cpp:533
 msgid "Dialogs stay on top of document windows"
-msgstr ""
+msgstr "תיבות דו־שיח נשארות מעל חלונות המסמך"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:527
+#: ../src/ui/dialog/inkscape-preferences.cpp:535
 msgid "Same as Normal but may work better with some window managers"
-msgstr ""
+msgstr "כמו המצב הרגיל אך עלול לעבוד טוב יותר עם כמה מנהלי חלונות"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:539
+msgid "Dialog Transparency:"
+msgstr "שקיפות הדו־שיח:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:530
+#: ../src/ui/dialog/inkscape-preferences.cpp:541
+msgid "Opacity when focused:"
+msgstr "שקיפות בעת המיקוד:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:543
+msgid "Opacity when unfocused:"
+msgstr "שקיפות בהעדר המיקוד:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:545
+msgid "Time of opacity change animation:"
+msgstr "משך הנפשת שינוי האטימות:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:548
 msgid "Miscellaneous:"
-msgstr ""
+msgstr "שונות:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:533
+#: ../src/ui/dialog/inkscape-preferences.cpp:551
 msgid "Whether dialog windows are to be hidden in the window manager taskbar"
-msgstr ""
+msgstr "האם יש להסתיר את חלונות תיבות הדו־שיח בסרגל המשימות של מנהל החלונות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:536
-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:554
+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:538
+#: ../src/ui/dialog/inkscape-preferences.cpp:556
 msgid "Whether dialog windows have a close button (requires restart)"
-msgstr ""
+msgstr "האם לחלונות תיבות הדו־שיח יש לחצן סגירה (דורש איתחול)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:539
+#: ../src/ui/dialog/inkscape-preferences.cpp:557
 msgid "Windows"
 msgstr "חלונות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:544
+#: ../src/ui/dialog/inkscape-preferences.cpp:562
 msgid "Move in parallel"
-msgstr ""
+msgstr "הזז במקביל"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:546
+#: ../src/ui/dialog/inkscape-preferences.cpp:564
 msgid "Stay unmoved"
-msgstr ""
+msgstr "השאר ללא תזוזה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:548
+#: ../src/ui/dialog/inkscape-preferences.cpp:566
 msgid "Move according to transform"
-msgstr ""
+msgstr "הזז בהתאם לשינוי הצורה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:550
+#: ../src/ui/dialog/inkscape-preferences.cpp:568
 msgid "Are unlinked"
-msgstr ""
+msgstr "יבוטל קשרם"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:552
+#: ../src/ui/dialog/inkscape-preferences.cpp:570
 msgid "Are deleted"
-msgstr ""
+msgstr "נמחקים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:555
+#: ../src/ui/dialog/inkscape-preferences.cpp:573
 msgid "When the original moves, its clones and linked offsets:"
-msgstr ""
+msgstr "כאשר המקור זז, כפיליו ומקושריו מוסטים:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:557
+#: ../src/ui/dialog/inkscape-preferences.cpp:575
 msgid "Clones are translated by the same vector as their original."
-msgstr ""
+msgstr "כפילים זזים באותו וקטור כמו המקור שלהם."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:559
+#: ../src/ui/dialog/inkscape-preferences.cpp:577
 msgid "Clones preserve their positions when their original is moved."
-msgstr ""
+msgstr "הכפילים שומרים על מקומם כאשר המקור שלהם זז."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:561
-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:579
+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:562
+#: ../src/ui/dialog/inkscape-preferences.cpp:580
 msgid "When the original is deleted, its clones:"
-msgstr ""
+msgstr "כאשר המקור נמחק, כפיליו:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:564
+#: ../src/ui/dialog/inkscape-preferences.cpp:582
 msgid "Orphaned clones are converted to regular objects."
-msgstr ""
+msgstr "כפילים יתומים מומרים לפריטים רגילים."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:566
+#: ../src/ui/dialog/inkscape-preferences.cpp:584
 msgid "Orphaned clones are deleted along with their original."
-msgstr ""
+msgstr "כפילים יתומים נמחקים עם המקור שלהם"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:586
+msgid "When duplicating original+clones:"
+msgstr "כאשר משכפלים מקור+כפילים:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:588
+msgid "Relink duplicated clones"
+msgstr "קשר מחדש את הכפילים המשוכפלים"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:590
+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:569
+#: ../src/ui/dialog/inkscape-preferences.cpp:593
 msgid "Clones"
-msgstr ""
+msgstr "כפילים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:574
+#: ../src/ui/dialog/inkscape-preferences.cpp:598
 msgid "When applying, use the topmost selected object as clippath/mask"
-msgstr ""
+msgstr "כאשר מחילים, השתמש בפריט העליון שנבחר כנתיב קליפ/מסכה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:576
-msgid ""
-"Uncheck this to use the bottom selected object as the clipping path or mask"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:600
+msgid "Uncheck this to use the bottom selected object as the clipping path or mask"
+msgstr "בטל בחירה זו כדי להשתמש בפריט התחתון ביותר שנבחר בתור נתיב הגזירה או המסכה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:577
+#: ../src/ui/dialog/inkscape-preferences.cpp:601
 msgid "Remove clippath/mask object after applying"
-msgstr ""
+msgstr "הסר פריט נתיב קליפ/מסכה לאחר ההחלה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:579
-msgid ""
-"After applying, remove the object used as the clipping path or mask from the "
-"drawing"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:603
+msgid "After applying, remove the object used as the clipping path or mask from the drawing"
+msgstr "לאחר ההחלה, הסר את הפריט המשמש כנתיב גזירה או מסכה מהציור"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:580
+#: ../src/ui/dialog/inkscape-preferences.cpp:604
 msgid "Clippaths and masks"
-msgstr ""
+msgstr "נתיבי קליפ ומסכות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:585
-#: ../src/widgets/select-toolbar.cpp:524
+#: ../src/ui/dialog/inkscape-preferences.cpp:609
+#: ../src/widgets/select-toolbar.cpp:541
 msgid "Scale stroke width"
-msgstr ""
+msgstr "שנה את גודל קו המתאר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:586
+#: ../src/ui/dialog/inkscape-preferences.cpp:610
 msgid "Scale rounded corners in rectangles"
-msgstr ""
+msgstr "שנה את גודל הפינות המעוגלות במרובעים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:587
+#: ../src/ui/dialog/inkscape-preferences.cpp:611
 msgid "Transform gradients"
-msgstr ""
+msgstr "שנה את צורת המדרג"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:588
+#: ../src/ui/dialog/inkscape-preferences.cpp:612
 msgid "Transform patterns"
-msgstr ""
+msgstr "שנה את צורת התבניות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:589
+#: ../src/ui/dialog/inkscape-preferences.cpp:613
 msgid "Optimized"
-msgstr ""
+msgstr "מתועל"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:590
+#: ../src/ui/dialog/inkscape-preferences.cpp:614
 msgid "Preserved"
-msgstr ""
+msgstr "משומר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:593
-#: ../src/widgets/select-toolbar.cpp:525
+#: ../src/ui/dialog/inkscape-preferences.cpp:617
+#: ../src/widgets/select-toolbar.cpp:542
 msgid "When scaling objects, scale the stroke width by the same proportion"
-msgstr ""
+msgstr "כאשר משנה את קנה מידת הפריטים, שנה את רוחב קו המתאר באותו היחס"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:595
-#: ../src/widgets/select-toolbar.cpp:536
+#: ../src/ui/dialog/inkscape-preferences.cpp:619
+#: ../src/widgets/select-toolbar.cpp:553
 msgid "When scaling rectangles, scale the radii of rounded corners"
-msgstr ""
+msgstr "כאשר משנה את קנה מידת המרובעים, שנה את רדיוס הפינות המעוגלות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:597
-#: ../src/widgets/select-toolbar.cpp:547
+#: ../src/ui/dialog/inkscape-preferences.cpp:621
+#: ../src/widgets/select-toolbar.cpp:564
 msgid "Move gradients (in fill or stroke) along with the objects"
-msgstr ""
+msgstr "הזז מדרגים (במילוי או בקו המתאר) ביחד עם הפריטים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:599
-#: ../src/widgets/select-toolbar.cpp:558
+#: ../src/ui/dialog/inkscape-preferences.cpp:623
+#: ../src/widgets/select-toolbar.cpp:575
 msgid "Move patterns (in fill or stroke) along with the objects"
-msgstr ""
+msgstr "הזז תבניות (במילוי או בקו המתאר) יחד עם הפריטים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:600
+#: ../src/ui/dialog/inkscape-preferences.cpp:624
 msgid "Store transformation:"
-msgstr ""
+msgstr "אחסן שינוי צורה:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:602
-msgid ""
-"If possible, apply transformation to objects without adding a transform= "
-"attribute"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:626
+msgid "If possible, apply transformation to objects without adding a transform= attribute"
+msgstr "במידת האפשר, החל את שינוי הצורה לפריט מבלי להוסיף מאפיין שינוי צורה (transform=)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:604
+#: ../src/ui/dialog/inkscape-preferences.cpp:628
 msgid "Always store transformation as a transform= attribute on objects"
-msgstr ""
+msgstr "תמיד אחסן את שינוי הצורה כמאפיין שינוי צורה (transform=) על פריטים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:606
+#: ../src/ui/dialog/inkscape-preferences.cpp:630
 msgid "Transforms"
-msgstr ""
+msgstr "שינויי צורה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:611
+#. blur quality
+#. filter quality
+#: ../src/ui/dialog/inkscape-preferences.cpp:636
+#: ../src/ui/dialog/inkscape-preferences.cpp:660
 msgid "Best quality (slowest)"
 msgstr "איכות מעולה (הכי איטי)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:613
+#: ../src/ui/dialog/inkscape-preferences.cpp:638
+#: ../src/ui/dialog/inkscape-preferences.cpp:662
 msgid "Better quality (slower)"
 msgstr "איכות טובה (איטי)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:615
+#: ../src/ui/dialog/inkscape-preferences.cpp:640
+#: ../src/ui/dialog/inkscape-preferences.cpp:664
 msgid "Average quality"
 msgstr "איכות בינונית"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:617
+#: ../src/ui/dialog/inkscape-preferences.cpp:642
+#: ../src/ui/dialog/inkscape-preferences.cpp:666
 msgid "Lower quality (faster)"
 msgstr "איכות נמוכה (מהיר)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:619
+#: ../src/ui/dialog/inkscape-preferences.cpp:644
+#: ../src/ui/dialog/inkscape-preferences.cpp:668
 msgid "Lowest quality (fastest)"
 msgstr "איכות ירודה (הכי מהיר)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:622
+#: ../src/ui/dialog/inkscape-preferences.cpp:647
 msgid "Gaussian blur quality for display:"
-msgstr ""
+msgstr "איכות טשטוש פעמוני לתצוגה:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:624
-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:649
+#: ../src/ui/dialog/inkscape-preferences.cpp:673
+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:626
+#: ../src/ui/dialog/inkscape-preferences.cpp:651
+#: ../src/ui/dialog/inkscape-preferences.cpp:675
 msgid "Better quality, but slower display"
-msgstr ""
+msgstr "איכות טובה, אך תצוגה איטית יותר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:628
+#: ../src/ui/dialog/inkscape-preferences.cpp:653
+#: ../src/ui/dialog/inkscape-preferences.cpp:677
 msgid "Average quality, acceptable display speed"
-msgstr ""
+msgstr "איכות בינונית, זמני תצוגה סבירים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:630
+#: ../src/ui/dialog/inkscape-preferences.cpp:655
+#: ../src/ui/dialog/inkscape-preferences.cpp:679
 msgid "Lower quality (some artifacts), but display is faster"
-msgstr ""
+msgstr "איכות נמוכה (כמה חפצים), אך התצוגה מהירה יותר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:632
+#: ../src/ui/dialog/inkscape-preferences.cpp:657
+#: ../src/ui/dialog/inkscape-preferences.cpp:681
 msgid "Lowest quality (considerable artifacts), but display is fastest"
-msgstr ""
+msgstr "איכות ירודה (חפצים מועטים), אך התצוגה היא המהירה ביותר"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:634
+#: ../src/ui/dialog/inkscape-preferences.cpp:671
+msgid "Filter effects quality for display:"
+msgstr "איכות אפקטי המסננים לתצוגה:"
+
+#. show infobox
+#: ../src/ui/dialog/inkscape-preferences.cpp:684
 msgid "Show filter primitives infobox"
-msgstr ""
+msgstr "הצג את תיבת המידע למסננים קדמונים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:636
-msgid ""
-"Show icons and descriptions for the filter primitives available at the "
-"filter effects dialog."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:686
+msgid "Show icons and descriptions for the filter primitives available at the filter effects dialog."
+msgstr "הצג סמלים ותיאורים עבור המסננים הקדמונים הזמינים בתיבת הדו שיח של אפקטי המסנן."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:638
+#: ../src/ui/dialog/inkscape-preferences.cpp:688
 msgid "Filters"
-msgstr ""
+msgstr "מסננים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:644
+#: ../src/ui/dialog/inkscape-preferences.cpp:694
 msgid "Select in all layers"
-msgstr ""
+msgstr "בחר בכל השכבות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:645
+#: ../src/ui/dialog/inkscape-preferences.cpp:695
 msgid "Select only within current layer"
-msgstr ""
+msgstr "בחר בתחומי בשכבה הנוכחית בלבד"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:646
+#: ../src/ui/dialog/inkscape-preferences.cpp:696
 msgid "Select in current layer and sublayers"
-msgstr ""
+msgstr "בחר בשכבה הנוכחית ובתת־השכבות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:647
+#: ../src/ui/dialog/inkscape-preferences.cpp:697
 msgid "Ignore hidden objects and layers"
-msgstr ""
+msgstr "התעלם מפריטים ושכבות נסתרים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:648
+#: ../src/ui/dialog/inkscape-preferences.cpp:698
 msgid "Ignore locked objects and layers"
-msgstr ""
+msgstr "התעלם מפריטים ושכבות נעולים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:649
+#: ../src/ui/dialog/inkscape-preferences.cpp:699
 msgid "Deselect upon layer change"
-msgstr ""
+msgstr "בטל את הבחירה עם שינוי השכבה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:651
+#: ../src/ui/dialog/inkscape-preferences.cpp:701
 msgid "Ctrl+A, Tab, Shift+Tab:"
-msgstr ""
+msgstr "Ctrl+A, Tab, Shift+Tab:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:653
+#: ../src/ui/dialog/inkscape-preferences.cpp:703
 msgid "Make keyboard selection commands work on objects in all layers"
-msgstr ""
+msgstr "גרום לפקודות בחירת המקלדת לעבוד על פריטים בכל השכבות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:655
+#: ../src/ui/dialog/inkscape-preferences.cpp:705
 msgid "Make keyboard selection commands work on objects in current layer only"
-msgstr ""
+msgstr "גרום לפקודות בחירת המקלדת לעבוד על פריטים בשכבה הנוכחית בלבד"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:657
-msgid ""
-"Make keyboard selection commands work on objects in current layer and all "
-"its sublayers"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:707
+msgid "Make keyboard selection commands work on objects in current layer and all its sublayers"
+msgstr "גרום לפקודות בחירת המקלדת לעבוד על פריטים בשכבה הנוכחית ובתת־השכבות שלה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:659
-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:709
+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:661
-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:711
+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:664
-msgid ""
-"Uncheck this to be able to keep the current objects selected when the "
-"current layer changes"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:714
+msgid "Uncheck this to be able to keep the current objects selected when the current layer changes"
+msgstr "בטל בחירה זו כדי לאפשר לשמור על בחירת הפריטים הנוכחיים גם כאשר השכבה הנוכחית משתנה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:666
+#: ../src/ui/dialog/inkscape-preferences.cpp:716
 msgid "Selecting"
-msgstr ""
+msgstr "בחירה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:673
+#: ../src/ui/dialog/inkscape-preferences.cpp:723
 msgid "Default export resolution:"
-msgstr ""
+msgstr "רזולוציית ברירת המחדל לייצוא :"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:674
+#: ../src/ui/dialog/inkscape-preferences.cpp:724
 msgid "Default bitmap resolution (in dots per inch) in the Export dialog"
-msgstr ""
+msgstr "רזולוציית ברירת המחדל למפת סיביות (בנקודות לאינטש) בתיבת דו־שיח הייצוא"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:676
+#: ../src/ui/dialog/inkscape-preferences.cpp:726
 msgid "Open Clip Art Library Server Name:"
-msgstr ""
+msgstr "שם שרת ספריית אוסף התמונות החופשיות:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:677
-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:727
+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 לספריית אוסף התמונות החופשיות. בשימוש על ידי פונקציית הייבוא והייצוא אל ומהספריה."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:679
+#: ../src/ui/dialog/inkscape-preferences.cpp:729
 msgid "Open Clip Art Library Username:"
-msgstr ""
+msgstr "שם משתמש ספריית אוסף התמונות החופשיות:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:680
+#: ../src/ui/dialog/inkscape-preferences.cpp:730
 msgid "The username used to log into Open Clip Art Library."
-msgstr ""
+msgstr "שם המשתמש המשמש להתחברות אל תוך ספריית אוסף התמונות החופשיות."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:682
+#: ../src/ui/dialog/inkscape-preferences.cpp:732
 msgid "Open Clip Art Library Password:"
-msgstr ""
+msgstr "סיסמאת ספריית אוסף התמונות החופשיות:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:683
+#: ../src/ui/dialog/inkscape-preferences.cpp:733
 msgid "The password used to log into Open Clip Art Library."
-msgstr ""
+msgstr "הסיסמה המשמשת להתחברות אל תוך ספריית אוסף התמונות החופשיות."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:685
+#: ../src/ui/dialog/inkscape-preferences.cpp:735
 msgid "Import/Export"
-msgstr ""
+msgstr "ייבוא/ייצוא"
 
 #. TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm
-#: ../src/ui/dialog/inkscape-preferences.cpp:731
+#: ../src/ui/dialog/inkscape-preferences.cpp:785
 msgid "Perceptual"
-msgstr ""
+msgstr "תפיסתי"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:731
+#: ../src/ui/dialog/inkscape-preferences.cpp:785
 msgid "Relative Colorimetric"
-msgstr ""
+msgstr "מדד־צבע יחסי"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:731
+#: ../src/ui/dialog/inkscape-preferences.cpp:785
 msgid "Absolute Colorimetric"
-msgstr ""
+msgstr "מדד־צבע מוחלט"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:735
+#: ../src/ui/dialog/inkscape-preferences.cpp:789
 msgid "(Note: Color management has been disabled in this build)"
-msgstr ""
+msgstr "(הערה: ניהול צבעים בוטל בהרכבה זו)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:739
+#: ../src/ui/dialog/inkscape-preferences.cpp:793
 msgid "Display adjustment"
-msgstr ""
+msgstr "התאמת התצוגה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:741
+#: ../src/ui/dialog/inkscape-preferences.cpp:795
 msgid "Display profile:"
-msgstr ""
+msgstr "פרופיל התצוגה:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:742
+#: ../src/ui/dialog/inkscape-preferences.cpp:796
 msgid "The ICC profile to use to calibrate display output."
-msgstr ""
+msgstr "פרופיל ה־ICC המשמש לכיול פלט התצוגה."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:744
+#: ../src/ui/dialog/inkscape-preferences.cpp:798
 msgid "Retrieve profile from display"
-msgstr ""
+msgstr "אחזר את הפרופיל מהתצוגה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:747
+#: ../src/ui/dialog/inkscape-preferences.cpp:801
 msgid "Retrieve profiles from those attached to displays via XICC."
-msgstr ""
+msgstr "אחזר את הפרופילים מאלו המחוברים לתצוגות באמצעות XICC."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:749
+#: ../src/ui/dialog/inkscape-preferences.cpp:803
 msgid "Retrieve profiles from those attached to displays."
-msgstr ""
+msgstr "אחזר את הפרופילים מאלו המחוברים לתצוגות."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:754
+#: ../src/ui/dialog/inkscape-preferences.cpp:808
 msgid "Display rendering intent:"
-msgstr ""
+msgstr "הצג את תכלית העיבוד:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:755
-#: ../src/ui/dialog/inkscape-preferences.cpp:778
+#: ../src/ui/dialog/inkscape-preferences.cpp:809
+#: ../src/ui/dialog/inkscape-preferences.cpp:832
 msgid "The rendering intent to use to calibrate display output."
-msgstr ""
+msgstr "תכלית העיבוד לשימוש כיול פלט התצוגה."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:757
+#: ../src/ui/dialog/inkscape-preferences.cpp:811
 msgid "Proofing"
-msgstr ""
+msgstr "חיסון"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:759
+#: ../src/ui/dialog/inkscape-preferences.cpp:813
 msgid "Simulate output on screen"
-msgstr ""
+msgstr "הדמה את הפלט על המסך"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:761
+#: ../src/ui/dialog/inkscape-preferences.cpp:815
 msgid "Simulates output of target device."
-msgstr ""
+msgstr "מדמה את הפלט להתקן היעד."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:763
+#: ../src/ui/dialog/inkscape-preferences.cpp:817
 msgid "Mark out of gamut colors"
-msgstr ""
+msgstr "סמן מחוץ למכלול הצבעים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:765
+#: ../src/ui/dialog/inkscape-preferences.cpp:819
 msgid "Highlights colors that are out of gamut for the target device."
-msgstr ""
+msgstr "מדגיש את הצבעים שהינם מחוץ למכלול הצבעים עבור התקן היעד."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:770
+#: ../src/ui/dialog/inkscape-preferences.cpp:824
 msgid "Out of gamut warning color:"
-msgstr ""
+msgstr "צבע אזהרה לצבעים שמחוץ למכלול הצבעים:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:771
+#: ../src/ui/dialog/inkscape-preferences.cpp:825
 msgid "Selects the color used for out of gamut warning."
-msgstr ""
+msgstr "בוחר את הצבע המשמש לאזהרה עבור צבעים שמחוץ למכלול הצבעים.פ"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:773
+#: ../src/ui/dialog/inkscape-preferences.cpp:827
 msgid "Device profile:"
-msgstr ""
+msgstr "פרופיל ההתקן:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:774
+#: ../src/ui/dialog/inkscape-preferences.cpp:828
 msgid "The ICC profile to use to simulate device output."
-msgstr ""
+msgstr "פרופיל ה־ICC בו להשתמש כדי לדמות את פלט ההתקן."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:777
+#: ../src/ui/dialog/inkscape-preferences.cpp:831
 msgid "Device rendering intent:"
-msgstr ""
+msgstr "תכלית עיבוד ההתקן:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:780
+#: ../src/ui/dialog/inkscape-preferences.cpp:834
 msgid "Black point compensation"
-msgstr ""
+msgstr "פיצוי על נקודות שחורות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:782
+#: ../src/ui/dialog/inkscape-preferences.cpp:836
 msgid "Enables black point compensation."
-msgstr ""
+msgstr "מאפשר פיצוי על נקודות שחורות."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:784
+#: ../src/ui/dialog/inkscape-preferences.cpp:838
 msgid "Preserve black"
-msgstr ""
+msgstr "שימור השחור"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:789
+#: ../src/ui/dialog/inkscape-preferences.cpp:843
 msgid "(LittleCMS 1.15 or later required)"
-msgstr ""
+msgstr "(נדרשת LittleCMS 1.15 או גירסה מאוחרת יותר)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:791
+#: ../src/ui/dialog/inkscape-preferences.cpp:845
 msgid "Preserve K channel in CMYK -> CMYK transforms"
-msgstr ""
+msgstr "שימור הערוץ K בהמרות CMYK -> CMYK"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:804
+#: ../src/ui/dialog/inkscape-preferences.cpp:858
 msgid "<none>"
-msgstr ""
+msgstr "<ללא>"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:850
+#: ../src/ui/dialog/inkscape-preferences.cpp:903
 msgid "Color management"
-msgstr ""
+msgstr "ניהול צבעים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:855
+#: ../src/ui/dialog/inkscape-preferences.cpp:908
 msgid "Major grid line emphasizing"
-msgstr ""
+msgstr "הדגשת קווי רשת עיקריים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:857
+#: ../src/ui/dialog/inkscape-preferences.cpp:910
 msgid "Don't emphasize gridlines when zoomed out"
-msgstr ""
+msgstr "אל תדגיש את קווי הרשת בזמן התרחקות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:858
-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:911
+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:860
+#: ../src/ui/dialog/inkscape-preferences.cpp:913
 msgid "Default grid settings"
-msgstr ""
+msgstr "הגדרות רשת ברירת מחדל"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:866
-#: ../src/ui/dialog/inkscape-preferences.cpp:887
-#, fuzzy
-msgid "Grid units"
-msgstr "גרדיאנטים"
+#: ../src/ui/dialog/inkscape-preferences.cpp:919
+#: ../src/ui/dialog/inkscape-preferences.cpp:940
+msgid "Grid units:"
+msgstr "יחידות הרשת:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:869
-#: ../src/ui/dialog/inkscape-preferences.cpp:890
-msgid "Origin X"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:922
+#: ../src/ui/dialog/inkscape-preferences.cpp:943
+msgid "Origin X:"
+msgstr "מקור בציר ה־X:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:870
-#: ../src/ui/dialog/inkscape-preferences.cpp:891
-msgid "Origin Y"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:923
+#: ../src/ui/dialog/inkscape-preferences.cpp:944
+msgid "Origin Y:"
+msgstr "מקור בציר ה־Y:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:873
-#, fuzzy
-msgid "Spacing X"
-msgstr "ריווח"
+#: ../src/ui/dialog/inkscape-preferences.cpp:926
+msgid "Spacing X:"
+msgstr "ריווח בציר ה־X:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:874
-#: ../src/ui/dialog/inkscape-preferences.cpp:893
-#, fuzzy
-msgid "Spacing Y"
-msgstr "ריווח"
+#: ../src/ui/dialog/inkscape-preferences.cpp:927
+#: ../src/ui/dialog/inkscape-preferences.cpp:946
+msgid "Spacing Y:"
+msgstr "ריווח בציר ה־Y:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:877
-#: ../src/ui/dialog/inkscape-preferences.cpp:899
-msgid "Selects the color used for normal grid lines."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:929
+#: ../src/ui/dialog/inkscape-preferences.cpp:930
+#: ../src/ui/dialog/inkscape-preferences.cpp:951
+#: ../src/ui/dialog/inkscape-preferences.cpp:952
+msgid "Grid line color:"
+msgstr "צבע קווי הרשת:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:879
-#: ../src/ui/dialog/inkscape-preferences.cpp:901
-msgid "Selects the color used for major (highlighted) grid lines."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:930
+#: ../src/ui/dialog/inkscape-preferences.cpp:952
+msgid "Color used for normal grid lines"
+msgstr "הצבע המשמש לקווי הרשת הרגילים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:881
-#: ../src/ui/dialog/inkscape-preferences.cpp:903
-msgid "Major grid line every"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:931
+#: ../src/ui/dialog/inkscape-preferences.cpp:932
+#: ../src/ui/dialog/inkscape-preferences.cpp:953
+#: ../src/ui/dialog/inkscape-preferences.cpp:954
+msgid "Major grid line color:"
+msgstr "צבע קווי הרשת הראשי:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:882
-msgid "Show dots instead of lines"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:932
+#: ../src/ui/dialog/inkscape-preferences.cpp:954
+msgid "Color used for major (highlighted) grid lines"
+msgstr "הצבע של קווי הרשת הראשיים (מודגשים)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:896
-msgid "Angle X"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:934
+#: ../src/ui/dialog/inkscape-preferences.cpp:956
+msgid "Major grid line every:"
+msgstr "קו רשת ראשי בכל:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:897
-msgid "Angle Z"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:935
+msgid "Show dots instead of lines"
+msgstr "הצג נקודות במקום קווים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:910
+#: ../src/ui/dialog/inkscape-preferences.cpp:936
+msgid "If set, display dots at gridpoints instead of gridlines"
+msgstr "במידה והוגדר, הצג נקודות בנקודות המפגש שעל הרשת במקום קווי רשת"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:963
 msgid "Use named colors"
-msgstr ""
+msgstr "השתמש בשמות הצבעים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:911
-msgid "If set, write the CSS name of the color instead of it's numeric value."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:964
+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:913
-msgid "XML looks"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:966
+msgid "XML formatting"
+msgstr "עיצוב XML"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:915
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:968
 msgid "Inline attributes"
-msgstr "×\94פ×\95×\9a ×\92ר×\93×\99×\90× ×\98"
+msgstr "×\9e×\90פ×\99×\99× ×\99×\9d ×\91ש×\95ר×\94"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:916
-msgid "Inline the XML attributes"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:969
+msgid "Put attributes on the same line as the element tag"
+msgstr "הוסף תכונות באותה השורה של תגית הרכיב"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:919
-msgid "Indent spaces"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:972
+msgid "Indent, spaces:"
+msgstr "ריווח, מרווחים:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:919
-msgid "The number of spaces to use for indentation."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:972
+msgid "The number of spaces to use for indenting nested elements; set to 0 for no indentation"
+msgstr "מספר הרווחים לשימוש בעת הזחת הרכיבים המקננים; הגדר כ־0 כדי לבטל הזחה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:921
-msgid "Path string"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:974
+msgid "Path data"
+msgstr "נתוני הנתיב"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:923
+#: ../src/ui/dialog/inkscape-preferences.cpp:976
 msgid "Allow relative coordinates"
-msgstr ""
+msgstr "אפשר נקודות ציון יחסיות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:924
+#: ../src/ui/dialog/inkscape-preferences.cpp:977
 msgid "If set, relative coordinates may be used in path data"
-msgstr ""
+msgstr "במידה והוגדר, נקודות הציון היחסיות יכולות לשמש בנתוני הנתיב"
 
-#. seems this is never used in Inkscape code
-#. _svgoutput_allowshorthands.init( _("Allow shorthands"), "options.svgoutput", "allowshorthands", true);
-#. _page_svgoutput.add_line( false, "", _svgoutput_allowshorthands, "", _(""), false);
-#.
-#: ../src/ui/dialog/inkscape-preferences.cpp:931
+#: ../src/ui/dialog/inkscape-preferences.cpp:979
 msgid "Force repeat commands"
-msgstr ""
+msgstr "הכרח פעולות חזרה"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:932
-msgid ""
-"If set, force repeating of the same command (i.e. output 'L 1,2 L 3,4' "
-"instead of 'L 1,2 3,4')."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:980
+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:934
-msgid "Numeric data"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:982
+msgid "Numbers"
+msgstr "מספרים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:937
-msgid "Numeric precision"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:985
+msgid "Numeric precision:"
+msgstr "דיוק עשרוני:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:937
-msgid "The number of digits to use behind the comma."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:985
+msgid "How many digits to write after the decimal dot"
+msgstr "כמה מספרים להוסיף לאחר הנקודה העשרונית"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:940
-msgid "Minimum exponent"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:988
+msgid "Minimum exponent:"
+msgstr "מעריך מזערי:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:940
-msgid ""
-"The minimum size of a number (10 to the power of this exponent), smaller "
-"numbers will be written as zero."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:988
+msgid "The smallest number written to SVG is 10 to the power of this exponent; anything smaller is written as zero."
+msgstr "המספר הקטן ביותר שנכתב ל־SVG הינו 10 בחזקת מעריך זה; כל מה שקטן יותר נכתב כ־0."
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:947
-msgid "Add label comments to printing output"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:990
+msgid "SVG output"
+msgstr "פלט SVG"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:949
-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:999
+msgid "Commands bar icon size"
+msgstr "גודל סמלי סרגל הפקודות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:951
-msgid "Prevent sharing of gradient definitions"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:953
-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:955
-msgid "Simplification threshold:"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:956
-msgid ""
-"How strong is the 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:958
-msgid "2x2"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:958
-msgid "4x4"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:958
-msgid "8x8"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:958
-msgid "16x16"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:962
-msgid "Oversample bitmaps:"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:972
-msgid "Commands bar icon size"
-msgstr ""
-
-#: ../src/ui/dialog/inkscape-preferences.cpp:973
+#: ../src/ui/dialog/inkscape-preferences.cpp:1000
 msgid "Set the size for the commands toolbar to use (requires restart)"
-msgstr ""
+msgstr "הגדר את גודל סרגל הכלי הפקודות לשימוש (דורש איתחול)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:976
+#: ../src/ui/dialog/inkscape-preferences.cpp:1003
 msgid "Tool controls bar icon size"
-msgstr ""
+msgstr "גודל סמלי סרגל כלי הפקדים"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:977
+#: ../src/ui/dialog/inkscape-preferences.cpp:1004
 msgid "Set the size for the secondary toolbar to use (requires restart)"
-msgstr ""
+msgstr "הגדר את גודל סרגל הכלים המשני לשימוש (דורש איתחול)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:980
+#: ../src/ui/dialog/inkscape-preferences.cpp:1007
 msgid "Main toolbar icon size"
-msgstr ""
+msgstr "גודל סמלי סרגל הכלים הראשי"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:981
+#: ../src/ui/dialog/inkscape-preferences.cpp:1008
 msgid "Set the size for the main tools to use (requires restart)"
-msgstr ""
+msgstr "הגדר את הגודל בו ישתמשו הכלים הראשיים (דורש איתחול)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:984
-msgid "Maximum number of recent documents:"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:1011
+msgid "Maximum documents in Open Recent:"
+msgstr "מספר המסמכים המרבי באחרונים שנפתחו:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:985
+#: ../src/ui/dialog/inkscape-preferences.cpp:1012
 msgid "The maximum length of the Open Recent list in the File menu"
-msgstr ""
+msgstr "מספר המסמכים המרבי שיופיעו ב'נפתחו לאחרונה' בתפריט 'קובץ'"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1015
+msgid "Zoom correction factor (in %):"
+msgstr "מקדם תיקון התקריב (באחוזים):"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1016
+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, 1:2 וכו', להצגת פריטים בגדליהם הממשיים"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1018
+msgid "Interface"
+msgstr "מנשק"
 
 #. Autosave options
-#: ../src/ui/dialog/inkscape-preferences.cpp:990
-msgid "Enable auto-save of document"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:1025
+msgid "Enable autosave (requires restart)"
+msgstr "אפשר שמירה אוטומטית (דורש איתחול):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:991
-msgid ""
-"Automatically saves the current document to disk at a given interval, thus "
-"minimizing loss at a crash"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:1026
+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:993
+#: ../src/ui/dialog/inkscape-preferences.cpp:1028
 msgid "Interval (in minutes):"
-msgstr ""
+msgstr "הפרש (בדקות):"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:993
-msgid ""
-"Sets the interval (in minutes) at which a workspace will be automatically "
-"saved to disk"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:1028
+msgid "Interval (in minutes) at which document will be autosaved"
+msgstr "הפרש (בשניות) לשמירת המסמך באופן אוטומטי"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:995
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:1030
 msgid "Path:"
-msgstr "×\94×\93×\91ק"
+msgstr "נת×\99×\91:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:995
-msgid "Sets the directory where autosaves will be written"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:1030
+msgid "The directory where autosaves will be written"
+msgstr "התיקייה אליה ישמרו השמירות האוטומטיות"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:997
-msgid "Maximum number of autosaves"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:1032
+msgid "Maximum number of autosaves:"
+msgstr "מספר השמירות האוטומטיות המרבי:"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:997
-msgid ""
-"Allows for limiting the space used by autosaves, by setting a maximum number "
-"of allowed files"
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:1032
+msgid "Maximum number of autosaved files; use this to limit the storage space used"
+msgstr "מספר הקבצים המרבי שנשמרו אוטומטית; השתמש בזה כדי להגביל את נפח האיחסון בשימוש"
 
 #. When changing the interval or enabling/disabling the autosave function,
 #. * update our running configuration
 #. *
 #. * FIXME!
 #. * the inkscape_autosave_init should be called AFTER the values have been changed
-#. * (which cannot be guaranteed from here)
-#. *
-#. * For now, autosave-settings will not change until restart
+#. * (which cannot be guaranteed from here) - use a PrefObserver somewhere
 #.
 #.
-#. _misc_autosave_enable.signal_toggled().connect( sigc::ptr_fun(inkscape_autosave_init), TRUE );
-#. _misc_autosave_interval.signal_changed().connect( sigc::ptr_fun(inkscape_autosave_init), TRUE );
+#. _autosave_autosave_enable.signal_toggled().connect( sigc::ptr_fun(inkscape_autosave_init), TRUE );
+#. _autosave_autosave_interval.signal_changed().connect( sigc::ptr_fun(inkscape_autosave_init), TRUE );
 #.
 #. -----------
-#: ../src/ui/dialog/inkscape-preferences.cpp:1015
+#: ../src/ui/dialog/inkscape-preferences.cpp:1048
+msgid "Autosave"
+msgstr "שמירה אוטומטית"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+msgid "2x2"
+msgstr "2x2"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+msgid "4x4"
+msgstr "4x4"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+msgid "8x8"
+msgstr "8x8"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1054
+msgid "16x16"
+msgstr "16x16"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1058
+msgid "Oversample bitmaps:"
+msgstr "דגום ביסודיות מפות סיביות:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1061
 msgid "Automatically reload bitmaps"
-msgstr ""
+msgstr "טען את מפות הסיביות מחדש אוטומטית"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1017
-msgid "Enbles automatic reload of linked images when changed on disk."
-msgstr ""
+#: ../src/ui/dialog/inkscape-preferences.cpp:1063
+msgid "Automatically reload linked images when file is changed on disk"
+msgstr "טען אוטומטית את התמונות המקושרות כאשר משתנה קובץ בכונן"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1030
-#, fuzzy
+#: ../src/ui/dialog/inkscape-preferences.cpp:1077
 msgid "Bitmap editor:"
-msgstr "עורך הגרדיאנט"
+msgstr "עורך מפות סיביות:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1083
+msgid "Resolution for Create Bitmap Copy:"
+msgstr "הרזולוציה ליצירת עותק מפת סיביות:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1084
+msgid "Resolution used by the Create Bitmap Copy command"
+msgstr "הרזולוציה בה עושה שימוש הפקודה צור עותק מפת סיביות"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1086
+msgid "Bitmaps"
+msgstr "מפות סיביות"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1092
+msgid "Add label comments to printing output"
+msgstr "הוסף תוויות עם הערות לפלט המודפס"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1094
+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:1096
+msgid "Prevent sharing of gradient definitions"
+msgstr "מנע שיתוף של הגדרות מדרג"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1098
+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:1101
+msgid "Simplification threshold:"
+msgstr "סף ההפשטה:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1102
+msgid "How strong is the 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:1105
+msgid "Latency skew:"
+msgstr "סטיית משך ההשהיה:"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1105
+msgid "(requires restart)"
+msgstr "(דורש איתחול)"
 
-#: ../src/ui/dialog/inkscape-preferences.cpp:1036
+#: ../src/ui/dialog/inkscape-preferences.cpp:1106
+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:1108
+msgid "Pre-render named icons"
+msgstr "עבד מראש סמלים בעלי שם"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1110
+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+"
+
+#: ../src/ui/dialog/inkscape-preferences.cpp:1112
 msgid "Misc"
-msgstr ""
+msgstr "שונות"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:74
+#: ../src/ui/dialog/livepatheffect-editor.cpp:75
 msgid "Apply new effect"
-msgstr ""
+msgstr "החל אפקט חדש"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:75
+#: ../src/ui/dialog/livepatheffect-editor.cpp:76
 msgid "Current effect"
-msgstr ""
+msgstr "אפקט נוכחי"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:76
+#: ../src/ui/dialog/livepatheffect-editor.cpp:77
 msgid "Effect list"
-msgstr ""
+msgstr "רשימת האפקטים"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:239
+#: ../src/ui/dialog/livepatheffect-editor.cpp:265
 msgid "Unknown effect is applied"
-msgstr ""
+msgstr "הוחל אפקט בלתי ידוע"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:242
+#: ../src/ui/dialog/livepatheffect-editor.cpp:268
 msgid "No effect applied"
-msgstr ""
+msgstr "לא הוחל אפקט"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:248
+#: ../src/ui/dialog/livepatheffect-editor.cpp:272
 msgid "Item is not a path or shape"
-msgstr ""
+msgstr "הפריט אינו נתיב או צורה"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:252
+#: ../src/ui/dialog/livepatheffect-editor.cpp:276
 msgid "Only one item can be selected"
-msgstr ""
+msgstr "ניתן לבחור פריט אחד"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:256
+#: ../src/ui/dialog/livepatheffect-editor.cpp:280
 msgid "Empty selection"
-msgstr ""
+msgstr "בחירה ריקה"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:349
+#: ../src/ui/dialog/livepatheffect-editor.cpp:370
+msgid "Create and apply path effect"
+msgstr "צור והחל אפקט נתיב"
+
+#: ../src/ui/dialog/livepatheffect-editor.cpp:387
 msgid "Remove path effect"
-msgstr ""
+msgstr "הסר אפקט נתיב"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:366
+#: ../src/ui/dialog/livepatheffect-editor.cpp:403
 msgid "Move path effect up"
-msgstr ""
+msgstr "הזז את אפקט הנתיב למעלה"
 
-#: ../src/ui/dialog/livepatheffect-editor.cpp:384
+#: ../src/ui/dialog/livepatheffect-editor.cpp:419
 msgid "Move path effect down"
-msgstr ""
+msgstr "הזז את אפקט הנתיב למטה"
+
+#: ../src/ui/dialog/livepatheffect-editor.cpp:458
+msgid "Activate path effect"
+msgstr "הפעל את אפקטי הנתיב"
+
+#: ../src/ui/dialog/livepatheffect-editor.cpp:458
+msgid "Deactivate path effect"
+msgstr "נטרל את אפקטי הנתיב"
 
 #: ../src/ui/dialog/memory.cpp:94
 msgid "Heap"
-msgstr ""
+msgstr "מצבור"
 
 #: ../src/ui/dialog/memory.cpp:95
 msgid "In Use"
@@ -11507,117 +11862,112 @@ msgstr "בשימוש"
 #. More typical usage is to call this memory "free" rather than "slack".
 #: ../src/ui/dialog/memory.cpp:98
 msgid "Slack"
-msgstr ""
+msgstr "חופשי"
 
 #: ../src/ui/dialog/memory.cpp:99
 msgid "Total"
-msgstr ""
+msgstr "סך הכל"
 
-#: ../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 ""
+msgstr "לא ידוע"
 
 #: ../src/ui/dialog/memory.cpp:165
 msgid "Combined"
-msgstr ""
+msgstr "משולב"
 
 #: ../src/ui/dialog/memory.cpp:207
 msgid "Recalculate"
-msgstr ""
+msgstr "חשב מחדש"
 
-#: ../src/ui/dialog/messages.cpp:75
+#: ../src/ui/dialog/messages.cpp:73
 msgid "Ready."
 msgstr "מוכן."
 
-#: ../src/ui/dialog/messages.cpp:76
-msgid ""
-"Enable log display by setting dialogs.debug 'redirect' attribute to 1 in "
-"preferences.xml"
-msgstr ""
+#: ../src/ui/dialog/messages.cpp:74
+msgid "Enable log display by setting dialogs.debug 'redirect' attribute to 1 in preferences.xml"
+msgstr "אפשר תצוגת דוח על ידי הגדרת מאפיין 'redirect' עבור dialogs.debug בתור 1 בקובץ preferences.xml"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:77
+#: ../src/ui/dialog/ocaldialogs.cpp:78
 msgid "File"
 msgstr "קובץ"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:175
+#: ../src/ui/dialog/ocaldialogs.cpp:176
 msgid "Username:"
 msgstr "שם משתמש:"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:176
+#: ../src/ui/dialog/ocaldialogs.cpp:177
 msgid "Password:"
 msgstr "סיסמה:"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:402
+#: ../src/ui/dialog/ocaldialogs.cpp:404
 msgid "Error while reading the Open Clip Art RSS feed"
-msgstr ""
+msgstr "שגיאה בעת קריאת הזנת אוסף התמונות החופשי"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:440
-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 ""
+#: ../src/ui/dialog/ocaldialogs.cpp:443
+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 "שגיאה באיחזור הזנת ה־RSS של ספריית אוסף התמונות החופשיות. וודא כי שם השרת נכון תחת הגדרות->ייבוא/ייצוא (לדוגמה: openclipart.org)"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:454
+#: ../src/ui/dialog/ocaldialogs.cpp:457
 msgid "Server supplied malformed Clip Art feed"
-msgstr ""
+msgstr "השרת סיפק הזנת אוסף תמונות פגומה"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:545
+#: ../src/ui/dialog/ocaldialogs.cpp:548
 msgid "Search for:"
-msgstr ""
+msgstr "חפש אחר:"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:546
+#: ../src/ui/dialog/ocaldialogs.cpp:549
 msgid "No files matched your search"
-msgstr ""
+msgstr "לא נמצאו קבצים העונים לחיפושך"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:557
+#: ../src/ui/dialog/ocaldialogs.cpp:560
 msgid "Search"
-msgstr ""
+msgstr "חיפוש"
 
-#: ../src/ui/dialog/ocaldialogs.cpp:574
+#: ../src/ui/dialog/ocaldialogs.cpp:577
 msgid "Files found"
-msgstr ""
+msgstr "קבצים נמצאו"
 
-#: ../src/ui/dialog/print.cpp:138
+#: ../src/ui/dialog/print.cpp:141
 msgid "Could not open temporary PNG for bitmap printing"
-msgstr ""
+msgstr "לא ניתן לפתוח PNG זמני עבור הדפסת מפת סיביות"
 
-#: ../src/ui/dialog/print.cpp:173
+#: ../src/ui/dialog/print.cpp:176
 msgid "Could not set up Document"
-msgstr ""
+msgstr "לא ניתן להגדיר מסמך"
 
-#: ../src/ui/dialog/print.cpp:177
+#: ../src/ui/dialog/print.cpp:180
 msgid "Failed to set CairoRenderContext"
-msgstr ""
+msgstr "כשל בהגדת CairoRenderContext"
 
 #. set up dialog title, based on document name
-#: ../src/ui/dialog/print.cpp:217
-#, fuzzy
+#: ../src/ui/dialog/print.cpp:220
 msgid "SVG Document"
-msgstr "×\94×\9eס×\9e×\9a × ×©×\9eר."
+msgstr "×\9eס×\9e×\9a SVG"
 
-#: ../src/ui/dialog/print.cpp:218
-#, fuzzy
+#: ../src/ui/dialog/print.cpp:221
 msgid "Print"
-msgstr "נק×\95×\93×\94"
+msgstr "×\94×\93פס"
 
 #. build custom preferences tab
-#: ../src/ui/dialog/print.cpp:245
-#, fuzzy
+#: ../src/ui/dialog/print.cpp:248
 msgid "Rendering"
-msgstr "רנ×\93ר"
+msgstr "×¢×\99×\91×\95×\93 ×ª×\9e×\95× ×\94"
 
 #: ../src/ui/dialog/scriptdialog.cpp:211
 msgid "_Execute Javascript"
-msgstr ""
+msgstr "הפעל _ג'אווהסקריפט"
 
 #: ../src/ui/dialog/scriptdialog.cpp:213
 msgid "_Execute Python"
-msgstr ""
+msgstr "הפעל _פייתון"
 
 #: ../src/ui/dialog/scriptdialog.cpp:215
 msgid "_Execute Ruby"
-msgstr ""
+msgstr "הפעל _רובי"
 
 #: ../src/ui/dialog/scriptdialog.cpp:224
 msgid "Script"
@@ -11632,555 +11982,602 @@ msgid "Errors"
 msgstr "שגיאות"
 
 #. Dialog organization
-#: ../src/ui/dialog/session-player.cpp:73
-#, fuzzy
+#: ../src/ui/dialog/session-player.cpp:72
 msgid "Session file"
-msgstr "×\91×\97ר ×\94\9b×\9c"
+msgstr "ק×\95×\91×¥ ×\94פע×\9c×\94"
 
-#: ../src/ui/dialog/session-player.cpp:74
+#: ../src/ui/dialog/session-player.cpp:73
 msgid "Playback controls"
-msgstr ""
+msgstr "פקדי נגינת רקע"
 
-#: ../src/ui/dialog/session-player.cpp:75
-#, fuzzy
+#: ../src/ui/dialog/session-player.cpp:74
 msgid "Message information"
-msgstr "×\99×¢×\93 ×\94×\93פסה"
+msgstr "נת×\95× ×\99 ×\94×\95×\93×¢ה"
 
 #. Active session file display
 #. fixme: Does this mean the active file for the session, or the file for the active session?
 #. Please indicate which with a TRANSLATORS comment.
-#: ../src/ui/dialog/session-player.cpp:85
+#: ../src/ui/dialog/session-player.cpp:84
 msgid "Active session file:"
-msgstr ""
+msgstr "קובץ הפעלה פעיל:"
 
-#: ../src/ui/dialog/session-player.cpp:86
+#: ../src/ui/dialog/session-player.cpp:85
 msgid "Delay (milliseconds):"
-msgstr ""
+msgstr "השהיה (מילישניות):"
 
 #. Unload/load buttons
-#: ../src/ui/dialog/session-player.cpp:94
-#, fuzzy
+#: ../src/ui/dialog/session-player.cpp:93
 msgid "Close file"
-msgstr "_סגור"
+msgstr "סגור קובץ"
 
-#: ../src/ui/dialog/session-player.cpp:95
+#: ../src/ui/dialog/session-player.cpp:94
 msgid "Open new file"
-msgstr ""
+msgstr "פתח קובץ חדש"
 
-#: ../src/ui/dialog/session-player.cpp:96
+#: ../src/ui/dialog/session-player.cpp:95
 msgid "Set delay"
-msgstr ""
+msgstr "הגדר השהיה"
 
-#: ../src/ui/dialog/session-player.cpp:138
-#, fuzzy
+#: ../src/ui/dialog/session-player.cpp:137
 msgid "Rewind"
-msgstr "רנ×\93ר"
+msgstr "×\97×\96×\95ר ×\90×\97×\95ר×\94"
 
-#: ../src/ui/dialog/session-player.cpp:139
+#: ../src/ui/dialog/session-player.cpp:138
 msgid "Go back one change"
-msgstr ""
+msgstr "חזור לשינוי הקודם"
 
-#: ../src/ui/dialog/session-player.cpp:140
-#, fuzzy
+#: ../src/ui/dialog/session-player.cpp:139
 msgid "Pause"
-msgstr "×\94×\93×\91ק"
+msgstr "×\94ש×\94×\94"
 
-#: ../src/ui/dialog/session-player.cpp:141
+#: ../src/ui/dialog/session-player.cpp:140
 msgid "Go forward one change"
-msgstr ""
+msgstr "התקדם לשינוי הבא"
 
-#: ../src/ui/dialog/session-player.cpp:142
+#: ../src/ui/dialog/session-player.cpp:141
 msgid "Play"
-msgstr ""
+msgstr "נגן"
 
-#: ../src/ui/dialog/session-player.cpp:177
+#: ../src/ui/dialog/session-player.cpp:176
 msgid "Open session file"
-msgstr ""
+msgstr "פתח קובץ הפעלה"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:110
+msgid "Set SVG Font attribute"
+msgstr "הגדר מאפיין גופן SVG"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:251
+msgid "Family Name:"
+msgstr "שם המשפחה:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:254
+msgid "Style:"
+msgstr "סגנון:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:255
+msgid "Variant:"
+msgstr "וריאנט:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:256
+msgid "Weight:"
+msgstr "עובי:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:260
+msgid "Set width:"
+msgstr "הגדר רוחב:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:273
+msgid "Glyph Name:"
+msgstr "שם הגליף:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:274
+msgid "Unicode:"
+msgstr "יוניקוד:"
+
+#. Kerning Setup:
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:286
+msgid "Kerning Setup:"
+msgstr "הגדרת הריווח:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:288
+msgid "1st Glyph:"
+msgstr "גליף ראשון:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:290
+msgid "2nd Glyph:"
+msgstr "גליף שני:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:301
+msgid "Kerning value:"
+msgstr "ערך הריווח:"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:321
+msgid "_Font"
+msgstr "_גופן"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:329
+msgid "_Global Settings"
+msgstr "הגדרות _כלליות"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:330
+msgid "_Glyphs"
+msgstr "_גליפים"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:331
+msgid "_Kerning"
+msgstr "_ריווח"
+
+#: ../src/ui/dialog/svg-fonts-dialog.cpp:343
+msgid "Preview Text:"
+msgstr "תצוגת הטקסט המקדימה:"
 
 #. #### begin left panel
 #. ### begin notebook
 #. ## begin mode page
 #. # begin single scan
 #. brightness
-#: ../src/ui/dialog/tracedialog.cpp:396
+#: ../src/ui/dialog/tracedialog.cpp:395
 msgid "Brightness cutoff"
-msgstr ""
+msgstr "חיתוך בהירות"
 
-#: ../src/ui/dialog/tracedialog.cpp:400
+#: ../src/ui/dialog/tracedialog.cpp:399
 msgid "Trace by a given brightness level"
-msgstr ""
+msgstr "עקוב לפי רמת בהירות נתונה"
 
-#: ../src/ui/dialog/tracedialog.cpp:408
+#: ../src/ui/dialog/tracedialog.cpp:407
 msgid "Brightness cutoff for black/white"
-msgstr ""
+msgstr "חיתוך בהירות עבור שחור/לבן"
 
-#: ../src/ui/dialog/tracedialog.cpp:415
+#: ../src/ui/dialog/tracedialog.cpp:414
 msgid "Single scan: creates a path"
-msgstr ""
+msgstr "סריקה בודדה: יוצרת נתיב"
 
 #. canny edge detection
 #. TRANSLATORS: "Canny" is the name of the inventor of this edge detection method
-#: ../src/ui/dialog/tracedialog.cpp:420
+#: ../src/ui/dialog/tracedialog.cpp:419
 msgid "Edge detection"
-msgstr ""
+msgstr "זיהוי קצוות"
 
-#: ../src/ui/dialog/tracedialog.cpp:424
+#: ../src/ui/dialog/tracedialog.cpp:423
 msgid "Trace with optimal edge detection by J. Canny's algorithm"
-msgstr ""
+msgstr "עקוב עם איתור קצוות מיטבי לפי האלגוריתם של ג'ון קני"
 
-#: ../src/ui/dialog/tracedialog.cpp:441
+#: ../src/ui/dialog/tracedialog.cpp:440
 msgid "Brightness cutoff for adjacent pixels (determines edge thickness)"
-msgstr ""
+msgstr "חיתוך בהירות לפיקסלים סמוכים (מגדיר את עובי הקצה)"
 
 #. quantization
 #. TRANSLATORS: Color Quantization: the process of reducing the number
 #. of colors in an image by selecting an optimized set of representative
 #. colors and then re-applying this reduced set to the original image.
-#: ../src/ui/dialog/tracedialog.cpp:453
+#: ../src/ui/dialog/tracedialog.cpp:452
 msgid "Color quantization"
-msgstr ""
+msgstr "הפחתת צבעים"
 
-#: ../src/ui/dialog/tracedialog.cpp:457
+#: ../src/ui/dialog/tracedialog.cpp:456
 msgid "Trace along the boundaries of reduced colors"
-msgstr ""
+msgstr "עקוב לאורך גבולות הצבעים המופחתים"
 
-#: ../src/ui/dialog/tracedialog.cpp:465
+#: ../src/ui/dialog/tracedialog.cpp:464
 msgid "The number of reduced colors"
-msgstr ""
+msgstr "מספר הצבעים המופחתים"
 
-#: ../src/ui/dialog/tracedialog.cpp:467
+#: ../src/ui/dialog/tracedialog.cpp:466
 msgid "Colors:"
-msgstr ""
+msgstr "צבעים:"
 
 #. swap black and white
-#: ../src/ui/dialog/tracedialog.cpp:473
+#: ../src/ui/dialog/tracedialog.cpp:472
 msgid "Invert image"
-msgstr ""
+msgstr "הפוך תמונה"
 
-#: ../src/ui/dialog/tracedialog.cpp:478
+#: ../src/ui/dialog/tracedialog.cpp:477
 msgid "Invert black and white regions"
-msgstr ""
+msgstr "הפוך את האזורים הלבנים והשחורים"
 
 #. # end single scan
 #. # begin multiple scan
-#: ../src/ui/dialog/tracedialog.cpp:487
+#: ../src/ui/dialog/tracedialog.cpp:486
 msgid "Brightness steps"
-msgstr ""
+msgstr "צעדי בהירות"
 
-#: ../src/ui/dialog/tracedialog.cpp:491
+#: ../src/ui/dialog/tracedialog.cpp:490
 msgid "Trace the given number of brightness levels"
-msgstr ""
+msgstr "עקוב אחר המספר הנתון של רמות הבהירות"
 
-#: ../src/ui/dialog/tracedialog.cpp:498
+#: ../src/ui/dialog/tracedialog.cpp:497
 msgid "Scans:"
-msgstr ""
+msgstr "סריקות:"
 
-#: ../src/ui/dialog/tracedialog.cpp:501
+#: ../src/ui/dialog/tracedialog.cpp:500
 msgid "The desired number of scans"
-msgstr ""
+msgstr "מספר הסריקות המבוקש"
 
-#: ../src/ui/dialog/tracedialog.cpp:505
+#: ../src/ui/dialog/tracedialog.cpp:504
 msgid "Colors"
-msgstr ""
+msgstr "צבעים"
 
-#: ../src/ui/dialog/tracedialog.cpp:509
+#: ../src/ui/dialog/tracedialog.cpp:508
 msgid "Trace the given number of reduced colors"
-msgstr ""
+msgstr "עקוב אחר המספר הנתון של צבעים מופחתים"
 
-#: ../src/ui/dialog/tracedialog.cpp:513
+#: ../src/ui/dialog/tracedialog.cpp:512
 msgid "Grays"
-msgstr ""
+msgstr "גווני אפור"
 
-#: ../src/ui/dialog/tracedialog.cpp:517
+#: ../src/ui/dialog/tracedialog.cpp:516
 msgid "Same as Colors, but the result is converted to grayscale"
-msgstr ""
+msgstr "כמו הצבעים, אך התוצאה תומר לגווני אפור"
 
 #. TRANSLATORS: "Smooth" is a verb here
-#: ../src/ui/dialog/tracedialog.cpp:522
+#: ../src/ui/dialog/tracedialog.cpp:521
 msgid "Smooth"
-msgstr ""
+msgstr "החלקה"
 
-#: ../src/ui/dialog/tracedialog.cpp:526
+#: ../src/ui/dialog/tracedialog.cpp:525
 msgid "Apply Gaussian blur to the bitmap before tracing"
-msgstr ""
+msgstr "החל טשטוש פעמוני למפת הסיביות לפני המעקב"
 
 #. TRANSLATORS: "Stack" is a verb here
-#: ../src/ui/dialog/tracedialog.cpp:529
+#: ../src/ui/dialog/tracedialog.cpp:528
 msgid "Stack scans"
-msgstr ""
+msgstr "ערום סריקות"
 
-#: ../src/ui/dialog/tracedialog.cpp:532
-msgid ""
-"Stack scans on top of one another (no gaps) instead of tiling (usually with "
-"gaps)"
-msgstr ""
+#: ../src/ui/dialog/tracedialog.cpp:531
+msgid "Stack scans on top of one another (no gaps) instead of tiling (usually with gaps)"
+msgstr "ערום סריקות אחת על גבי השניה (ללא רווחים) במקום ריצוף (לרב עם רווחים)"
 
-#: ../src/ui/dialog/tracedialog.cpp:535
+#: ../src/ui/dialog/tracedialog.cpp:534
 msgid "Remove background"
-msgstr ""
+msgstr "הסר רקע"
 
-#: ../src/ui/dialog/tracedialog.cpp:540
+#: ../src/ui/dialog/tracedialog.cpp:539
 msgid "Remove bottom (background) layer when done"
-msgstr ""
+msgstr "הסר את השכבה התחתונה (הרקע) עם הסיום"
 
-#: ../src/ui/dialog/tracedialog.cpp:544
+#: ../src/ui/dialog/tracedialog.cpp:543
 msgid "Multiple scans: creates a group of paths"
-msgstr ""
+msgstr "מספר סריקות: יוצר קבוצה של נתיבים"
 
 #. ## begin option page
 #. # potrace parameters
-#: ../src/ui/dialog/tracedialog.cpp:559
+#: ../src/ui/dialog/tracedialog.cpp:558
 msgid "Suppress speckles"
-msgstr ""
+msgstr "הדחק נקודות"
 
-#: ../src/ui/dialog/tracedialog.cpp:561
+#: ../src/ui/dialog/tracedialog.cpp:560
 msgid "Ignore small spots (speckles) in the bitmap"
-msgstr ""
+msgstr "התעלם מכתמים קטנים (נקודות) במפת הסיביות"
 
-#: ../src/ui/dialog/tracedialog.cpp:569
+#: ../src/ui/dialog/tracedialog.cpp:568
 msgid "Speckles of up to this many pixels will be suppressed"
-msgstr ""
+msgstr "כתמים עד גודל זה יודחקו"
 
-#: ../src/ui/dialog/tracedialog.cpp:571
+#: ../src/ui/dialog/tracedialog.cpp:570
 msgid "Size:"
-msgstr ""
+msgstr "גודל:"
 
-#: ../src/ui/dialog/tracedialog.cpp:574
+#: ../src/ui/dialog/tracedialog.cpp:573
 msgid "Smooth corners"
-msgstr ""
+msgstr "החלק פינות"
 
-#: ../src/ui/dialog/tracedialog.cpp:576
+#: ../src/ui/dialog/tracedialog.cpp:575
 msgid "Smooth out sharp corners of the trace"
-msgstr ""
+msgstr "החלק קצוות חדים מהמעקב"
 
-#: ../src/ui/dialog/tracedialog.cpp:585
+#: ../src/ui/dialog/tracedialog.cpp:584
 msgid "Increase this to smooth corners more"
-msgstr ""
+msgstr "הגדל ערך זה כדי להחליק את הקצוות יותר"
 
-#: ../src/ui/dialog/tracedialog.cpp:589
+#: ../src/ui/dialog/tracedialog.cpp:588
 msgid "Optimize paths"
-msgstr ""
+msgstr "ייעל נתיבים"
 
-#: ../src/ui/dialog/tracedialog.cpp:592
+#: ../src/ui/dialog/tracedialog.cpp:591
 msgid "Try to optimize paths by joining adjacent Bezier curve segments"
-msgstr ""
+msgstr "נסה לייעל את הנתיבים על ידי צירוף מקטעי עקומות בזייה"
+
+#: ../src/ui/dialog/tracedialog.cpp:599
+msgid "Increase this to reduce the number of nodes in the trace by more aggressive optimization"
+msgstr "הגדל מספר זה כדי להפחית את מספר המחברים במעקב על ידי ייעול תוקפני יותר"
 
 #: ../src/ui/dialog/tracedialog.cpp:600
-msgid ""
-"Increase this to reduce the number of nodes in the trace by more aggressive "
-"optimization"
-msgstr ""
+msgid "Tolerance:"
+msgstr "סובלנות:"
 
 #. ## end option page
-#: ../src/ui/dialog/tracedialog.cpp:607 ../src/ui/dialog/tracedialog.cpp:613
+#: ../src/ui/dialog/tracedialog.cpp:606
+#: ../src/ui/dialog/tracedialog.cpp:612
 msgid "Options"
-msgstr ""
+msgstr "אפשרויות"
 
 #. ### credits
-#: ../src/ui/dialog/tracedialog.cpp:621
+#: ../src/ui/dialog/tracedialog.cpp:620
 msgid "Thanks to Peter Selinger, http://potrace.sourceforge.net"
-msgstr ""
+msgstr "תודה לפיטר סלינג'ר, http://potrace.sourceforge.net"
 
-#: ../src/ui/dialog/tracedialog.cpp:623
+#: ../src/ui/dialog/tracedialog.cpp:622
 msgid "Credits"
-msgstr ""
+msgstr "תודות"
 
 #. #### begin right panel
 #. ## SIOX
-#: ../src/ui/dialog/tracedialog.cpp:637
+#: ../src/ui/dialog/tracedialog.cpp:636
 msgid "SIOX foreground selection"
-msgstr ""
+msgstr "בחירת קידמה מחולצת פשוטה"
 
-#: ../src/ui/dialog/tracedialog.cpp:640
+#: ../src/ui/dialog/tracedialog.cpp:639
 msgid "Cover the area you want to select as the foreground"
-msgstr ""
+msgstr "כסה את האיזור אותו תרצה לבחור כקידמה"
 
 #. ## preview
-#: ../src/ui/dialog/tracedialog.cpp:645
+#: ../src/ui/dialog/tracedialog.cpp:644
 msgid "Update"
-msgstr ""
+msgstr "עדכן"
 
-#: ../src/ui/dialog/tracedialog.cpp:651
-msgid ""
-"Preview the intermediate bitmap with the current settings, without actual "
-"tracing"
-msgstr ""
+#: ../src/ui/dialog/tracedialog.cpp:650
+msgid "Preview the intermediate bitmap with the current settings, without actual tracing"
+msgstr "הצג בתצוגה מקדימה את מפת הסיביות בשלב הביניים עם ההגדרות הנוכחיות, מבלי לעקוב ממש"
 
-#: ../src/ui/dialog/tracedialog.cpp:655
+#: ../src/ui/dialog/tracedialog.cpp:654
 msgid "Preview"
-msgstr ""
+msgstr "תצוגה מקדימה"
 
-#: ../src/ui/dialog/tracedialog.cpp:672
+#: ../src/ui/dialog/tracedialog.cpp:671
 msgid "Abort a trace in progress"
-msgstr ""
+msgstr "בטל מעקב שבתהליך"
 
-#: ../src/ui/dialog/tracedialog.cpp:676
+#: ../src/ui/dialog/tracedialog.cpp:675
 msgid "Execute the trace"
-msgstr ""
+msgstr "הפעל את המעקב"
 
-#: ../src/ui/dialog/transformation.cpp:83
-#: ../src/ui/dialog/transformation.cpp:93
+#: ../src/ui/dialog/transformation.cpp:82
+#: ../src/ui/dialog/transformation.cpp:92
 msgid "_Horizontal"
-msgstr ""
+msgstr "או_פקי"
 
-#: ../src/ui/dialog/transformation.cpp:83
+#: ../src/ui/dialog/transformation.cpp:82
 msgid "Horizontal displacement (relative) or position (absolute)"
-msgstr ""
+msgstr "העברה (יחסית) או מיקום (מוחלט) אופקיים"
 
-#: ../src/ui/dialog/transformation.cpp:85
-#: ../src/ui/dialog/transformation.cpp:95
+#: ../src/ui/dialog/transformation.cpp:84
+#: ../src/ui/dialog/transformation.cpp:94
 msgid "_Vertical"
-msgstr ""
+msgstr "א_נכי"
 
-#: ../src/ui/dialog/transformation.cpp:85
+#: ../src/ui/dialog/transformation.cpp:84
 msgid "Vertical displacement (relative) or position (absolute)"
-msgstr ""
+msgstr "העברה (יחסית) או מיקום (מוחלט) אנכיים"
 
-#: ../src/ui/dialog/transformation.cpp:87
+#: ../src/ui/dialog/transformation.cpp:86
 msgid "_Width"
-msgstr ""
+msgstr "_רוחב"
 
-#: ../src/ui/dialog/transformation.cpp:87
+#: ../src/ui/dialog/transformation.cpp:86
 msgid "Horizontal size (absolute or percentage of current)"
-msgstr ""
+msgstr "גודל אופקי (מוחלט או באחוזים מהנוכחי)"
 
-#: ../src/ui/dialog/transformation.cpp:89
+#: ../src/ui/dialog/transformation.cpp:88
 msgid "_Height"
-msgstr ""
+msgstr "_גובה"
 
-#: ../src/ui/dialog/transformation.cpp:89
+#: ../src/ui/dialog/transformation.cpp:88
 msgid "Vertical size (absolute or percentage of current)"
-msgstr ""
+msgstr "גודל אנכי (מוחלט או אחוזים מהנוכחי)"
 
-#: ../src/ui/dialog/transformation.cpp:91
+#: ../src/ui/dialog/transformation.cpp:90
 msgid "A_ngle"
-msgstr ""
+msgstr "_זווית"
 
-#: ../src/ui/dialog/transformation.cpp:91
+#: ../src/ui/dialog/transformation.cpp:90
 msgid "Rotation angle (positive = counterclockwise)"
-msgstr ""
+msgstr "זווית לסיבוב (חיובי = נגד כיוון השעון)"
 
-#: ../src/ui/dialog/transformation.cpp:93
-msgid ""
-"Horizontal skew angle (positive = counterclockwise), or absolute "
-"displacement, or percentage displacement"
-msgstr ""
+#: ../src/ui/dialog/transformation.cpp:92
+msgid "Horizontal skew angle (positive = counterclockwise), or absolute displacement, or percentage displacement"
+msgstr "זווית הטייה אופקית (חיובי = נגד כיוון השעון), או מוחלט להעברה או אחוזים להעברה"
 
-#: ../src/ui/dialog/transformation.cpp:95
-msgid ""
-"Vertical skew angle (positive = counterclockwise), or absolute displacement, "
-"or percentage displacement"
-msgstr ""
+#: ../src/ui/dialog/transformation.cpp:94
+msgid "Vertical skew angle (positive = counterclockwise), or absolute displacement, or percentage displacement"
+msgstr "זווית הטייה אנכית (חיובית = נגד כיוון השעון), או מוחלטת להעברה או אחוזים להעברה"
 
-#: ../src/ui/dialog/transformation.cpp:98
+#: ../src/ui/dialog/transformation.cpp:97
 msgid "Transformation matrix element A"
-msgstr ""
+msgstr "מטריצת שינוי צורה רכיב א"
 
-#: ../src/ui/dialog/transformation.cpp:99
+#: ../src/ui/dialog/transformation.cpp:98
 msgid "Transformation matrix element B"
-msgstr ""
+msgstr "מטריצת שינוי צורה רכיב ב"
 
-#: ../src/ui/dialog/transformation.cpp:100
+#: ../src/ui/dialog/transformation.cpp:99
 msgid "Transformation matrix element C"
-msgstr ""
+msgstr "מטריצת שינוי צורה רכיב ג"
 
-#: ../src/ui/dialog/transformation.cpp:101
+#: ../src/ui/dialog/transformation.cpp:100
 msgid "Transformation matrix element D"
-msgstr ""
+msgstr "מטריצת שינוי צורה רכיב ד"
 
-#: ../src/ui/dialog/transformation.cpp:102
+#: ../src/ui/dialog/transformation.cpp:101
 msgid "Transformation matrix element E"
-msgstr ""
+msgstr "מטריצת שינוי צורה רכיב ה"
 
-#: ../src/ui/dialog/transformation.cpp:103
+#: ../src/ui/dialog/transformation.cpp:102
 msgid "Transformation matrix element F"
-msgstr ""
+msgstr "מטריצת שינוי צורה רכיב ו"
 
-#: ../src/ui/dialog/transformation.cpp:105
+#: ../src/ui/dialog/transformation.cpp:104
 msgid "Rela_tive move"
-msgstr ""
+msgstr "הזזה י_חסית"
 
-#: ../src/ui/dialog/transformation.cpp:105
-msgid ""
-"Add the specified relative displacement to the current position; otherwise, "
-"edit the current absolute position directly"
-msgstr ""
+#: ../src/ui/dialog/transformation.cpp:104
+msgid "Add the specified relative displacement to the current position; otherwise, edit the current absolute position directly"
+msgstr "הוסף את ההעברה היחסית המצויינת למיקום הנוכחי; או, ערוך את המיקום המוחלט ישירות"
 
-#: ../src/ui/dialog/transformation.cpp:106
+#: ../src/ui/dialog/transformation.cpp:105
 msgid "Scale proportionally"
-msgstr ""
+msgstr "שנה את הגודל באופן יחסי"
 
-#: ../src/ui/dialog/transformation.cpp:106
+#: ../src/ui/dialog/transformation.cpp:105
 msgid "Preserve the width/height ratio of the scaled objects"
-msgstr ""
+msgstr "שמור את יחסי הגובה/רוחב של הפריטים שגודלם שונה"
 
-#: ../src/ui/dialog/transformation.cpp:107
+#: ../src/ui/dialog/transformation.cpp:106
 msgid "Apply to each _object separately"
-msgstr ""
+msgstr "החל על כל _פריט בנפרד"
 
-#: ../src/ui/dialog/transformation.cpp:107
-msgid ""
-"Apply the scale/rotate/skew to each selected object separately; otherwise, "
-"transform the selection as a whole"
-msgstr ""
+#: ../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 "החל את שינוי הגודל/סיבוב/הטייה עבור הפריט הנבחר בנפרד; או, שנה את צורת הבחירה כמכלול"
 
-#: ../src/ui/dialog/transformation.cpp:108
+#: ../src/ui/dialog/transformation.cpp:107
 msgid "Edit c_urrent matrix"
-msgstr ""
+msgstr "ערוך את המ_טריצה הנוכחית"
 
-#: ../src/ui/dialog/transformation.cpp:108
-msgid ""
-"Edit the current transform= matrix; otherwise, post-multiply transform= by "
-"this matrix"
-msgstr ""
+#: ../src/ui/dialog/transformation.cpp:107
+msgid "Edit the current transform= matrix; otherwise, post-multiply transform= by this matrix"
+msgstr "ערוך את מטריצת שינוי הצורה; או, אסוף את שינויי הצורה במטריצה זאת"
 
-#: ../src/ui/dialog/transformation.cpp:118
+#: ../src/ui/dialog/transformation.cpp:117
 msgid "_Move"
-msgstr ""
+msgstr "ה_זז"
 
-#: ../src/ui/dialog/transformation.cpp:121
+#: ../src/ui/dialog/transformation.cpp:120
 msgid "_Scale"
-msgstr ""
+msgstr "_קנה מידה"
 
-#: ../src/ui/dialog/transformation.cpp:124
+#: ../src/ui/dialog/transformation.cpp:123
 msgid "_Rotate"
-msgstr ""
+msgstr "_סובב"
 
-#: ../src/ui/dialog/transformation.cpp:127
+#: ../src/ui/dialog/transformation.cpp:126
 msgid "Ske_w"
-msgstr ""
+msgstr "ה_טה"
 
-#: ../src/ui/dialog/transformation.cpp:130
+#: ../src/ui/dialog/transformation.cpp:129
 msgid "Matri_x"
-msgstr ""
+msgstr "מטרי_צה"
 
 #: ../src/ui/dialog/transformation.cpp:153
 msgid "Reset the values on the current tab to defaults"
-msgstr ""
+msgstr "אפס את הערכים בלשונית הנוכחית לברירת המחדל"
 
 #: ../src/ui/dialog/transformation.cpp:160
 msgid "Apply transformation to selection"
-msgstr ""
+msgstr "החל את שינוי הצורה לבחירה"
 
-#: ../src/ui/dialog/transformation.cpp:842
+#: ../src/ui/dialog/transformation.cpp:846
 msgid "Edit transformation matrix"
-msgstr ""
+msgstr "ערוך את מטריצת שינוי הצורה"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:44
+#: ../src/ui/dialog/whiteboard-connect.cpp:47
 msgid "_Use SSL"
-msgstr ""
+msgstr "ה_שתמש ב־SSL"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:44
+#: ../src/ui/dialog/whiteboard-connect.cpp:47
 msgid "_Register"
-msgstr ""
+msgstr "ה_רשם"
 
 #. Construct dialog interface
-#: ../src/ui/dialog/whiteboard-connect.cpp:75
-#, fuzzy
+#: ../src/ui/dialog/whiteboard-connect.cpp:78
 msgid "_Server:"
-msgstr "_ש×\9e×\95ר"
+msgstr "_שרת:"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:76
-#, fuzzy
+#: ../src/ui/dialog/whiteboard-connect.cpp:79
 msgid "_Username:"
-msgstr "שם משתמש:"
+msgstr "ש_ם משתמש:"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:77
-#, fuzzy
+#: ../src/ui/dialog/whiteboard-connect.cpp:80
 msgid "_Password:"
-msgstr "סיסמה:"
+msgstr "_סיסמה:"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:78
+#: ../src/ui/dialog/whiteboard-connect.cpp:81
 msgid "P_ort:"
-msgstr ""
+msgstr "_פתחה:"
 
 #. Buttons
-#: ../src/ui/dialog/whiteboard-connect.cpp:113
-#, fuzzy
+#: ../src/ui/dialog/whiteboard-connect.cpp:118
 msgid "Connect"
-msgstr "×\9eחבר"
+msgstr "×\94תחבר"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:144
+#: ../src/ui/dialog/whiteboard-connect.cpp:149
 msgid "Establishing connection to Jabber server <b>%1</b>"
-msgstr ""
+msgstr "מקיים חיבור אל שרת הג'אבר <b>%1</b>"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:171
-#: ../src/ui/dialog/whiteboard-connect.cpp:216
-#: ../src/ui/dialog/whiteboard-connect.cpp:254
+#: ../src/ui/dialog/whiteboard-connect.cpp:176
+#: ../src/ui/dialog/whiteboard-connect.cpp:222
+#: ../src/ui/dialog/whiteboard-connect.cpp:260
 msgid "Failed to establish connection to Jabber server <b>%1</b>"
-msgstr ""
+msgstr "כשל בקיום החיבור לשרת הג'אבר <b>%1</b>"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:209
+#: ../src/ui/dialog/whiteboard-connect.cpp:215
 msgid "Establishing connection to Jabber server <b>%1</b> as user <b>%2</b>"
-msgstr ""
+msgstr "מקיים חיבור לשרת הג'אבר <b>%1</b> בתור המשתמש <b>%2</b>"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:221
+#: ../src/ui/dialog/whiteboard-connect.cpp:227
 msgid "Authentication failed on Jabber server <b>%1</b> as <b>%2</b>"
-msgstr ""
-
-#: ../src/ui/dialog/whiteboard-connect.cpp:226
-#: ../src/ui/dialog/whiteboard-connect.cpp:264
-msgid "SSL initialization failed when connecting to Jabber server <b>%1</b>"
-msgstr ""
+msgstr "האימות נכשל בשרת הג'אבר <b>%1</b> בתור <b>%2</b>"
 
 #: ../src/ui/dialog/whiteboard-connect.cpp:232
 #: ../src/ui/dialog/whiteboard-connect.cpp:270
+msgid "SSL initialization failed when connecting to Jabber server <b>%1</b>"
+msgstr "הפעלת SSL נכשלה בעת ההתחברות לשרת הג'אבר <b>%1</b>"
+
+#: ../src/ui/dialog/whiteboard-connect.cpp:238
+#: ../src/ui/dialog/whiteboard-connect.cpp:276
 msgid "Connected to Jabber server <b>%1</b> as <b>%2</b>"
-msgstr ""
+msgstr "מחובר לשרת הג'אבר <b>%1</b> תחת השם <b>%2</b>"
 
-#: ../src/ui/dialog/whiteboard-connect.cpp:259
+#: ../src/ui/dialog/whiteboard-connect.cpp:265
 msgid "Registration failed on Jabber server <b>%1</b> as <b>%2</b>"
-msgstr ""
+msgstr "נכשלה ההרשמה בשרת הג'אבר <b>%1</b> עבור השם <b>%2</b>"
 
 #. Construct labels
-#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:75
+#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:76
 msgid "Chatroom _name:"
-msgstr ""
+msgstr "שם _חדר השיחה:"
 
-#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:76
+#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:77
 msgid "Chatroom _server:"
-msgstr ""
+msgstr "_שרת חדר השיחה:"
 
-#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:77
+#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:78
 msgid "Chatroom _password:"
-msgstr ""
+msgstr "_סיסמת חדר השיחה:"
 
-#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:78
+#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:79
 msgid "Chatroom _handle:"
-msgstr ""
+msgstr "ה_כינוי בחדר השיחה:"
 
 #. Button setup and callback registration
-#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:102
-#, fuzzy
+#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:103
 msgid "Connect to chatroom"
-msgstr "×\9e×\97×\91ר"
+msgstr "×\94ת×\97×\91ר ×\9c×\97×\93ר ×©×\99×\97×\94"
 
-#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:137
+#: ../src/ui/dialog/whiteboard-sharewithchat.cpp:138
 msgid "Synchronizing with chatroom <b>%1@%2</b> using the handle <b>%3</b>"
-msgstr ""
+msgstr "מסנכרן עם חדר השיחה <b>%1@%2</b> באמצעות הכינוי <b>%3</b>"
 
 #. Construct dialog interface
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:76
 msgid "_User's Jabber ID:"
-msgstr ""
+msgstr "מזהה ה_ג'אבר של המשתמש:"
 
 #. Buttons
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:80
 msgid "_Invite user"
-msgstr ""
+msgstr "ה_זמן משתמש"
 
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:81
-#, fuzzy
 msgid "_Cancel"
-msgstr "ערוץ"
+msgstr "_ביטול"
 
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:92
 msgid "Buddy List"
-msgstr ""
+msgstr "רשימת חברים"
 
 #: ../src/ui/dialog/whiteboard-sharewithuser.cpp:181
 msgid "Sending whiteboard invitation to <b>%1</b>"
-msgstr ""
+msgstr "שולח הזמנת לוח עבודה אל <b>%1</b>"
 
 #. FIXME: strings are replaced by placeholders, NOT to be translated until the code is enabled
 #. See http://sourceforge.net/mailarchive/message.php?msg_id=11746016 for details
@@ -12198,515 +12595,617 @@ msgstr ""
 #. Node Tool controls
 #. Calligraphy Tool controls
 #. Session playback controls
-#: ../src/ui/stock-items.cpp:31 ../src/ui/stock-items.cpp:32
-#: ../src/ui/stock-items.cpp:33 ../src/ui/stock-items.cpp:34
-#: ../src/ui/stock-items.cpp:35 ../src/ui/stock-items.cpp:36
-#: ../src/ui/stock-items.cpp:37 ../src/ui/stock-items.cpp:38
-#: ../src/ui/stock-items.cpp:39 ../src/ui/stock-items.cpp:40
-#: ../src/ui/stock-items.cpp:41 ../src/ui/stock-items.cpp:42
-#: ../src/ui/stock-items.cpp:45 ../src/ui/stock-items.cpp:46
-#: ../src/ui/stock-items.cpp:47 ../src/ui/stock-items.cpp:48
-#: ../src/ui/stock-items.cpp:49 ../src/ui/stock-items.cpp:50
-#: ../src/ui/stock-items.cpp:51 ../src/ui/stock-items.cpp:52
-#: ../src/ui/stock-items.cpp:53 ../src/ui/stock-items.cpp:54
-#: ../src/ui/stock-items.cpp:55 ../src/ui/stock-items.cpp:56
-#: ../src/ui/stock-items.cpp:57 ../src/ui/stock-items.cpp:58
-#: ../src/ui/stock-items.cpp:61 ../src/ui/stock-items.cpp:62
-#: ../src/ui/stock-items.cpp:63 ../src/ui/stock-items.cpp:64
-#: ../src/ui/stock-items.cpp:65 ../src/ui/stock-items.cpp:66
-#: ../src/ui/stock-items.cpp:67 ../src/ui/stock-items.cpp:68
-#: ../src/ui/stock-items.cpp:69 ../src/ui/stock-items.cpp:70
-#: ../src/ui/stock-items.cpp:71 ../src/ui/stock-items.cpp:72
-#: ../src/ui/stock-items.cpp:73 ../src/ui/stock-items.cpp:74
-#: ../src/ui/stock-items.cpp:75 ../src/ui/stock-items.cpp:76
-#: ../src/ui/stock-items.cpp:77 ../src/ui/stock-items.cpp:78
-#: ../src/ui/stock-items.cpp:79 ../src/ui/stock-items.cpp:80
-#: ../src/ui/stock-items.cpp:81 ../src/ui/stock-items.cpp:82
-#: ../src/ui/stock-items.cpp:83 ../src/ui/stock-items.cpp:84
-#: ../src/ui/stock-items.cpp:85 ../src/ui/stock-items.cpp:86
-#: ../src/ui/stock-items.cpp:87 ../src/ui/stock-items.cpp:88
-#: ../src/ui/stock-items.cpp:91 ../src/ui/stock-items.cpp:92
-#: ../src/ui/stock-items.cpp:93 ../src/ui/stock-items.cpp:94
-#: ../src/ui/stock-items.cpp:95 ../src/ui/stock-items.cpp:96
-#: ../src/ui/stock-items.cpp:97 ../src/ui/stock-items.cpp:98
-#: ../src/ui/stock-items.cpp:99 ../src/ui/stock-items.cpp:100
-#: ../src/ui/stock-items.cpp:101 ../src/ui/stock-items.cpp:102
-#: ../src/ui/stock-items.cpp:103 ../src/ui/stock-items.cpp:104
-#: ../src/ui/stock-items.cpp:107 ../src/ui/stock-items.cpp:108
-#: ../src/ui/stock-items.cpp:109 ../src/ui/stock-items.cpp:110
-#: ../src/ui/stock-items.cpp:111 ../src/ui/stock-items.cpp:112
-#: ../src/ui/stock-items.cpp:113 ../src/ui/stock-items.cpp:114
-#: ../src/ui/stock-items.cpp:115 ../src/ui/stock-items.cpp:116
-#: ../src/ui/stock-items.cpp:117 ../src/ui/stock-items.cpp:118
-#: ../src/ui/stock-items.cpp:119 ../src/ui/stock-items.cpp:120
-#: ../src/ui/stock-items.cpp:121 ../src/ui/stock-items.cpp:122
-#: ../src/ui/stock-items.cpp:123 ../src/ui/stock-items.cpp:124
-#: ../src/ui/stock-items.cpp:125 ../src/ui/stock-items.cpp:126
-#: ../src/ui/stock-items.cpp:129 ../src/ui/stock-items.cpp:130
-#: ../src/ui/stock-items.cpp:131 ../src/ui/stock-items.cpp:132
-#: ../src/ui/stock-items.cpp:133 ../src/ui/stock-items.cpp:134
-#: ../src/ui/stock-items.cpp:135 ../src/ui/stock-items.cpp:136
-#: ../src/ui/stock-items.cpp:137 ../src/ui/stock-items.cpp:138
-#: ../src/ui/stock-items.cpp:139 ../src/ui/stock-items.cpp:140
-#: ../src/ui/stock-items.cpp:141 ../src/ui/stock-items.cpp:142
-#: ../src/ui/stock-items.cpp:143 ../src/ui/stock-items.cpp:144
-#: ../src/ui/stock-items.cpp:145 ../src/ui/stock-items.cpp:149
-#: ../src/ui/stock-items.cpp:150 ../src/ui/stock-items.cpp:151
-#: ../src/ui/stock-items.cpp:152 ../src/ui/stock-items.cpp:155
-#: ../src/ui/stock-items.cpp:156 ../src/ui/stock-items.cpp:157
-#: ../src/ui/stock-items.cpp:160 ../src/ui/stock-items.cpp:161
-#: ../src/ui/stock-items.cpp:162 ../src/ui/stock-items.cpp:163
-#: ../src/ui/stock-items.cpp:164 ../src/ui/stock-items.cpp:165
-#: ../src/ui/stock-items.cpp:166 ../src/ui/stock-items.cpp:167
-#: ../src/ui/stock-items.cpp:168 ../src/ui/stock-items.cpp:169
-#: ../src/ui/stock-items.cpp:170 ../src/ui/stock-items.cpp:171
-#: ../src/ui/stock-items.cpp:174 ../src/ui/stock-items.cpp:175
-#: ../src/ui/stock-items.cpp:176 ../src/ui/stock-items.cpp:177
-#: ../src/ui/stock-items.cpp:180 ../src/ui/stock-items.cpp:181
-#: ../src/ui/stock-items.cpp:182 ../src/ui/stock-items.cpp:183
-#: ../src/ui/stock-items.cpp:184 ../src/ui/stock-items.cpp:185
-#: ../src/ui/stock-items.cpp:186 ../src/ui/stock-items.cpp:187
-#: ../src/ui/stock-items.cpp:188 ../src/ui/stock-items.cpp:189
-#: ../src/ui/stock-items.cpp:190 ../src/ui/stock-items.cpp:193
-#: ../src/ui/stock-items.cpp:194 ../src/ui/stock-items.cpp:197
-#: ../src/ui/stock-items.cpp:198 ../src/ui/stock-items.cpp:199
-#: ../src/ui/stock-items.cpp:200 ../src/ui/stock-items.cpp:201
-#: ../src/ui/view/edit-widget.cpp:343 ../src/ui/view/edit-widget.cpp:348
-#: ../src/ui/view/edit-widget.cpp:356 ../src/ui/view/edit-widget.cpp:361
-#: ../src/ui/view/edit-widget.cpp:366 ../src/ui/view/edit-widget.cpp:371
-#: ../src/ui/view/edit-widget.cpp:376 ../src/ui/view/edit-widget.cpp:381
-#: ../src/ui/view/edit-widget.cpp:394 ../src/ui/view/edit-widget.cpp:399
-#: ../src/ui/view/edit-widget.cpp:413 ../src/ui/view/edit-widget.cpp:417
-#: ../src/ui/view/edit-widget.cpp:421 ../src/ui/view/edit-widget.cpp:425
-#: ../src/ui/view/edit-widget.cpp:429 ../src/ui/view/edit-widget.cpp:433
-#: ../src/ui/view/edit-widget.cpp:447 ../src/ui/view/edit-widget.cpp:451
-#: ../src/ui/view/edit-widget.cpp:455 ../src/ui/view/edit-widget.cpp:486
-#: ../src/ui/view/edit-widget.cpp:495 ../src/ui/view/edit-widget.cpp:499
-#: ../src/ui/view/edit-widget.cpp:503 ../src/ui/view/edit-widget.cpp:507
-#: ../src/ui/view/edit-widget.cpp:511 ../src/ui/view/edit-widget.cpp:515
-#: ../src/ui/view/edit-widget.cpp:519 ../src/ui/view/edit-widget.cpp:523
-#: ../src/ui/view/edit-widget.cpp:527 ../src/ui/view/edit-widget.cpp:531
-#: ../src/ui/view/edit-widget.cpp:535 ../src/ui/view/edit-widget.cpp:632
-#: ../src/ui/view/edit-widget.cpp:644 ../src/ui/view/edit-widget.cpp:648
-#: ../src/ui/view/edit-widget.cpp:652 ../src/ui/view/edit-widget.cpp:656
-#: ../src/ui/view/edit-widget.cpp:660 ../src/ui/view/edit-widget.cpp:664
-#: ../src/ui/view/edit-widget.cpp:668 ../src/ui/view/edit-widget.cpp:672
-#: ../src/ui/view/edit-widget.cpp:676 ../src/ui/view/edit-widget.cpp:680
-#: ../src/ui/view/edit-widget.cpp:684 ../src/ui/view/edit-widget.cpp:688
-#: ../src/ui/view/edit-widget.cpp:692 ../src/ui/view/edit-widget.cpp:696
-#: ../src/ui/view/edit-widget.cpp:700 ../src/ui/view/edit-widget.cpp:704
-#: ../src/ui/view/edit-widget.cpp:709 ../src/ui/view/edit-widget.cpp:715
-#: ../src/ui/view/edit-widget.cpp:719 ../src/ui/view/edit-widget.cpp:769
-#: ../src/ui/view/edit-widget.cpp:774 ../src/ui/view/edit-widget.cpp:810
-#: ../src/ui/view/edit-widget.cpp:815 ../src/ui/view/edit-widget.cpp:820
-#: ../src/ui/view/edit-widget.cpp:824 ../src/ui/view/edit-widget.cpp:828
-#: ../src/ui/view/edit-widget.cpp:832 ../src/ui/view/edit-widget.cpp:836
-#: ../src/ui/view/edit-widget.cpp:840 ../src/ui/view/edit-widget.cpp:844
-#: ../src/ui/view/edit-widget.cpp:848 ../src/ui/view/edit-widget.cpp:852
-#: ../src/ui/view/edit-widget.cpp:856 ../src/ui/view/edit-widget.cpp:861
-#: ../src/ui/view/edit-widget.cpp:865 ../src/ui/view/edit-widget.cpp:869
-#: ../src/ui/view/edit-widget.cpp:873 ../src/ui/view/edit-widget.cpp:878
-#: ../src/ui/view/edit-widget.cpp:882 ../src/ui/view/edit-widget.cpp:886
-#: ../src/ui/view/edit-widget.cpp:890 ../src/ui/view/edit-widget.cpp:894
-#: ../src/ui/view/edit-widget.cpp:898 ../src/ui/view/edit-widget.cpp:902
-#: ../src/ui/view/edit-widget.cpp:906 ../src/ui/view/edit-widget.cpp:910
-#: ../src/ui/view/edit-widget.cpp:914 ../src/ui/view/edit-widget.cpp:918
+#: ../src/ui/stock-items.cpp:31
+#: ../src/ui/stock-items.cpp:32
+#: ../src/ui/stock-items.cpp:33
+#: ../src/ui/stock-items.cpp:34
+#: ../src/ui/stock-items.cpp:35
+#: ../src/ui/stock-items.cpp:36
+#: ../src/ui/stock-items.cpp:37
+#: ../src/ui/stock-items.cpp:38
+#: ../src/ui/stock-items.cpp:39
+#: ../src/ui/stock-items.cpp:40
+#: ../src/ui/stock-items.cpp:41
+#: ../src/ui/stock-items.cpp:42
+#: ../src/ui/stock-items.cpp:45
+#: ../src/ui/stock-items.cpp:46
+#: ../src/ui/stock-items.cpp:47
+#: ../src/ui/stock-items.cpp:48
+#: ../src/ui/stock-items.cpp:49
+#: ../src/ui/stock-items.cpp:50
+#: ../src/ui/stock-items.cpp:51
+#: ../src/ui/stock-items.cpp:52
+#: ../src/ui/stock-items.cpp:53
+#: ../src/ui/stock-items.cpp:54
+#: ../src/ui/stock-items.cpp:55
+#: ../src/ui/stock-items.cpp:56
+#: ../src/ui/stock-items.cpp:57
+#: ../src/ui/stock-items.cpp:58
+#: ../src/ui/stock-items.cpp:61
+#: ../src/ui/stock-items.cpp:62
+#: ../src/ui/stock-items.cpp:63
+#: ../src/ui/stock-items.cpp:64
+#: ../src/ui/stock-items.cpp:65
+#: ../src/ui/stock-items.cpp:66
+#: ../src/ui/stock-items.cpp:67
+#: ../src/ui/stock-items.cpp:68
+#: ../src/ui/stock-items.cpp:69
+#: ../src/ui/stock-items.cpp:70
+#: ../src/ui/stock-items.cpp:71
+#: ../src/ui/stock-items.cpp:72
+#: ../src/ui/stock-items.cpp:73
+#: ../src/ui/stock-items.cpp:74
+#: ../src/ui/stock-items.cpp:75
+#: ../src/ui/stock-items.cpp:76
+#: ../src/ui/stock-items.cpp:77
+#: ../src/ui/stock-items.cpp:78
+#: ../src/ui/stock-items.cpp:79
+#: ../src/ui/stock-items.cpp:80
+#: ../src/ui/stock-items.cpp:81
+#: ../src/ui/stock-items.cpp:82
+#: ../src/ui/stock-items.cpp:83
+#: ../src/ui/stock-items.cpp:84
+#: ../src/ui/stock-items.cpp:85
+#: ../src/ui/stock-items.cpp:86
+#: ../src/ui/stock-items.cpp:87
+#: ../src/ui/stock-items.cpp:88
+#: ../src/ui/stock-items.cpp:91
+#: ../src/ui/stock-items.cpp:92
+#: ../src/ui/stock-items.cpp:93
+#: ../src/ui/stock-items.cpp:94
+#: ../src/ui/stock-items.cpp:95
+#: ../src/ui/stock-items.cpp:96
+#: ../src/ui/stock-items.cpp:97
+#: ../src/ui/stock-items.cpp:98
+#: ../src/ui/stock-items.cpp:99
+#: ../src/ui/stock-items.cpp:100
+#: ../src/ui/stock-items.cpp:101
+#: ../src/ui/stock-items.cpp:102
+#: ../src/ui/stock-items.cpp:103
+#: ../src/ui/stock-items.cpp:104
+#: ../src/ui/stock-items.cpp:107
+#: ../src/ui/stock-items.cpp:108
+#: ../src/ui/stock-items.cpp:109
+#: ../src/ui/stock-items.cpp:110
+#: ../src/ui/stock-items.cpp:111
+#: ../src/ui/stock-items.cpp:112
+#: ../src/ui/stock-items.cpp:113
+#: ../src/ui/stock-items.cpp:114
+#: ../src/ui/stock-items.cpp:115
+#: ../src/ui/stock-items.cpp:116
+#: ../src/ui/stock-items.cpp:117
+#: ../src/ui/stock-items.cpp:118
+#: ../src/ui/stock-items.cpp:119
+#: ../src/ui/stock-items.cpp:120
+#: ../src/ui/stock-items.cpp:121
+#: ../src/ui/stock-items.cpp:122
+#: ../src/ui/stock-items.cpp:123
+#: ../src/ui/stock-items.cpp:124
+#: ../src/ui/stock-items.cpp:125
+#: ../src/ui/stock-items.cpp:126
+#: ../src/ui/stock-items.cpp:129
+#: ../src/ui/stock-items.cpp:130
+#: ../src/ui/stock-items.cpp:131
+#: ../src/ui/stock-items.cpp:132
+#: ../src/ui/stock-items.cpp:133
+#: ../src/ui/stock-items.cpp:134
+#: ../src/ui/stock-items.cpp:135
+#: ../src/ui/stock-items.cpp:136
+#: ../src/ui/stock-items.cpp:137
+#: ../src/ui/stock-items.cpp:138
+#: ../src/ui/stock-items.cpp:139
+#: ../src/ui/stock-items.cpp:140
+#: ../src/ui/stock-items.cpp:141
+#: ../src/ui/stock-items.cpp:142
+#: ../src/ui/stock-items.cpp:143
+#: ../src/ui/stock-items.cpp:144
+#: ../src/ui/stock-items.cpp:145
+#: ../src/ui/stock-items.cpp:149
+#: ../src/ui/stock-items.cpp:150
+#: ../src/ui/stock-items.cpp:151
+#: ../src/ui/stock-items.cpp:152
+#: ../src/ui/stock-items.cpp:155
+#: ../src/ui/stock-items.cpp:156
+#: ../src/ui/stock-items.cpp:157
+#: ../src/ui/stock-items.cpp:160
+#: ../src/ui/stock-items.cpp:161
+#: ../src/ui/stock-items.cpp:162
+#: ../src/ui/stock-items.cpp:163
+#: ../src/ui/stock-items.cpp:164
+#: ../src/ui/stock-items.cpp:165
+#: ../src/ui/stock-items.cpp:166
+#: ../src/ui/stock-items.cpp:167
+#: ../src/ui/stock-items.cpp:168
+#: ../src/ui/stock-items.cpp:169
+#: ../src/ui/stock-items.cpp:170
+#: ../src/ui/stock-items.cpp:171
+#: ../src/ui/stock-items.cpp:174
+#: ../src/ui/stock-items.cpp:175
+#: ../src/ui/stock-items.cpp:176
+#: ../src/ui/stock-items.cpp:177
+#: ../src/ui/stock-items.cpp:180
+#: ../src/ui/stock-items.cpp:181
+#: ../src/ui/stock-items.cpp:182
+#: ../src/ui/stock-items.cpp:183
+#: ../src/ui/stock-items.cpp:184
+#: ../src/ui/stock-items.cpp:185
+#: ../src/ui/stock-items.cpp:186
+#: ../src/ui/stock-items.cpp:187
+#: ../src/ui/stock-items.cpp:188
+#: ../src/ui/stock-items.cpp:189
+#: ../src/ui/stock-items.cpp:190
+#: ../src/ui/stock-items.cpp:193
+#: ../src/ui/stock-items.cpp:194
+#: ../src/ui/stock-items.cpp:197
+#: ../src/ui/stock-items.cpp:198
+#: ../src/ui/stock-items.cpp:199
+#: ../src/ui/stock-items.cpp:200
+#: ../src/ui/stock-items.cpp:201
+#: ../src/ui/view/edit-widget.cpp:343
+#: ../src/ui/view/edit-widget.cpp:348
+#: ../src/ui/view/edit-widget.cpp:356
+#: ../src/ui/view/edit-widget.cpp:361
+#: ../src/ui/view/edit-widget.cpp:366
+#: ../src/ui/view/edit-widget.cpp:371
+#: ../src/ui/view/edit-widget.cpp:376
+#: ../src/ui/view/edit-widget.cpp:381
+#: ../src/ui/view/edit-widget.cpp:394
+#: ../src/ui/view/edit-widget.cpp:399
+#: ../src/ui/view/edit-widget.cpp:413
+#: ../src/ui/view/edit-widget.cpp:417
+#: ../src/ui/view/edit-widget.cpp:421
+#: ../src/ui/view/edit-widget.cpp:425
+#: ../src/ui/view/edit-widget.cpp:429
+#: ../src/ui/view/edit-widget.cpp:433
+#: ../src/ui/view/edit-widget.cpp:447
+#: ../src/ui/view/edit-widget.cpp:451
+#: ../src/ui/view/edit-widget.cpp:455
+#: ../src/ui/view/edit-widget.cpp:486
+#: ../src/ui/view/edit-widget.cpp:495
+#: ../src/ui/view/edit-widget.cpp:499
+#: ../src/ui/view/edit-widget.cpp:503
+#: ../src/ui/view/edit-widget.cpp:507
+#: ../src/ui/view/edit-widget.cpp:511
+#: ../src/ui/view/edit-widget.cpp:515
+#: ../src/ui/view/edit-widget.cpp:519
+#: ../src/ui/view/edit-widget.cpp:523
+#: ../src/ui/view/edit-widget.cpp:527
+#: ../src/ui/view/edit-widget.cpp:531
+#: ../src/ui/view/edit-widget.cpp:535
+#: ../src/ui/view/edit-widget.cpp:632
+#: ../src/ui/view/edit-widget.cpp:644
+#: ../src/ui/view/edit-widget.cpp:648
+#: ../src/ui/view/edit-widget.cpp:652
+#: ../src/ui/view/edit-widget.cpp:656
+#: ../src/ui/view/edit-widget.cpp:660
+#: ../src/ui/view/edit-widget.cpp:664
+#: ../src/ui/view/edit-widget.cpp:668
+#: ../src/ui/view/edit-widget.cpp:672
+#: ../src/ui/view/edit-widget.cpp:676
+#: ../src/ui/view/edit-widget.cpp:680
+#: ../src/ui/view/edit-widget.cpp:684
+#: ../src/ui/view/edit-widget.cpp:688
+#: ../src/ui/view/edit-widget.cpp:692
+#: ../src/ui/view/edit-widget.cpp:696
+#: ../src/ui/view/edit-widget.cpp:700
+#: ../src/ui/view/edit-widget.cpp:704
+#: ../src/ui/view/edit-widget.cpp:709
+#: ../src/ui/view/edit-widget.cpp:715
+#: ../src/ui/view/edit-widget.cpp:719
+#: ../src/ui/view/edit-widget.cpp:769
+#: ../src/ui/view/edit-widget.cpp:774
+#: ../src/ui/view/edit-widget.cpp:810
+#: ../src/ui/view/edit-widget.cpp:815
+#: ../src/ui/view/edit-widget.cpp:820
+#: ../src/ui/view/edit-widget.cpp:824
+#: ../src/ui/view/edit-widget.cpp:828
+#: ../src/ui/view/edit-widget.cpp:832
+#: ../src/ui/view/edit-widget.cpp:836
+#: ../src/ui/view/edit-widget.cpp:840
+#: ../src/ui/view/edit-widget.cpp:844
+#: ../src/ui/view/edit-widget.cpp:848
+#: ../src/ui/view/edit-widget.cpp:852
+#: ../src/ui/view/edit-widget.cpp:856
+#: ../src/ui/view/edit-widget.cpp:861
+#: ../src/ui/view/edit-widget.cpp:865
+#: ../src/ui/view/edit-widget.cpp:869
+#: ../src/ui/view/edit-widget.cpp:873
+#: ../src/ui/view/edit-widget.cpp:878
+#: ../src/ui/view/edit-widget.cpp:882
+#: ../src/ui/view/edit-widget.cpp:886
+#: ../src/ui/view/edit-widget.cpp:890
+#: ../src/ui/view/edit-widget.cpp:894
+#: ../src/ui/view/edit-widget.cpp:898
+#: ../src/ui/view/edit-widget.cpp:902
+#: ../src/ui/view/edit-widget.cpp:906
+#: ../src/ui/view/edit-widget.cpp:910
+#: ../src/ui/view/edit-widget.cpp:914
+#: ../src/ui/view/edit-widget.cpp:918
 #: ../src/ui/view/edit-widget.cpp:1003
 msgid "PLACEHOLDER, do not translate"
-msgstr ""
+msgstr " "
 
-#: ../src/ui/view/edit-widget.cpp:1062 ../src/widgets/desktop-widget.cpp:381
+#: ../src/ui/view/edit-widget.cpp:1062
+#: ../src/widgets/desktop-widget.cpp:374
 msgid "Zoom drawing if window size changes"
-msgstr ""
+msgstr "התקרב לציור אם גודל החלון משתנה"
 
-#: ../src/ui/view/edit-widget.cpp:1083 ../src/widgets/desktop-widget.cpp:510
+#: ../src/ui/view/edit-widget.cpp:1083
+#: ../src/widgets/desktop-widget.cpp:497
 msgid "Cursor coordinates"
-msgstr ""
+msgstr "מיקום הסמן"
 
-#. display the initial welcome message in the statusbar
-#: ../src/ui/view/edit-widget.cpp:1100 ../src/widgets/desktop-widget.cpp:558
-msgid ""
-"<b>Welcome to Inkscape!</b> Use shape or freehand tools to create objects; "
-"use selector (arrow) to move or transform them."
-msgstr ""
+#: ../src/ui/view/edit-widget.cpp:1100
+msgid "<b>Welcome to Inkscape!</b> Use shape or drawing tools to create objects; use selector (arrow) to move or transform them."
+msgstr "<b> ברוכים הבאים לאינקסקייפ! </b> השתמשו בכלי הצורה או היד־החופשית  כדי ליצור פריטים; השתמשו בכלי־הבחירה (חץ) כדי להזיז או לשנות את צורתם."
 
-#: ../src/ui/view/edit-widget.cpp:1211 ../src/widgets/desktop-widget.cpp:844
+#: ../src/ui/view/edit-widget.cpp:1211
+#: ../src/widgets/desktop-widget.cpp:832
 #, 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\">לשמור שינויים למסמך \"%s\" לפני הסגירה?</span>\n"
+"\n"
+"אם תסגור מבלי לשמור, השינויים שלך יאבדו."
 
-#: ../src/ui/view/edit-widget.cpp:1222 ../src/ui/view/edit-widget.cpp:1269
-#: ../src/widgets/desktop-widget.cpp:851 ../src/widgets/desktop-widget.cpp:907
+#: ../src/ui/view/edit-widget.cpp:1222
+#: ../src/ui/view/edit-widget.cpp:1269
+#: ../src/widgets/desktop-widget.cpp:839
+#: ../src/widgets/desktop-widget.cpp:895
 msgid "Close _without saving"
-msgstr ""
+msgstr "סגור מ_בלי לשמור"
 
-#: ../src/ui/view/edit-widget.cpp:1257 ../src/widgets/desktop-widget.cpp:899
+#: ../src/ui/view/edit-widget.cpp:1257
+#: ../src/widgets/desktop-widget.cpp:887
 #, 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\">הקובץ \"%s\" נשמר בתבנית (%s) שעלולה לגרום לאובדן נתונים!</span>\n"
+"\n"
+"האם ברצונך לשמור את הקובץ בתור SVG של אינקסקייפ?"
 
-#: ../src/ui/view/edit-widget.cpp:1272 ../src/widgets/desktop-widget.cpp:910
+#: ../src/ui/view/edit-widget.cpp:1272
+#: ../src/widgets/desktop-widget.cpp:898
 msgid "_Save as SVG"
-msgstr ""
+msgstr "_שמור בתור SVG"
 
 #: ../src/ui/widget/filter-effect-chooser.cpp:25
 msgid "_Blend mode:"
-msgstr ""
+msgstr "מצב _עירבול:"
 
 #: ../src/ui/widget/filter-effect-chooser.cpp:26
 msgid "B_lur:"
-msgstr ""
+msgstr "_טשטוש:"
 
 #: ../src/ui/widget/licensor.cpp:35
 msgid "Proprietary"
-msgstr ""
+msgstr "קנייני"
 
 #: ../src/ui/widget/licensor.cpp:38
 msgid "Other"
-msgstr ""
-
-#: ../src/ui/widget/object-composite-settings.cpp:51
-#: ../src/ui/widget/selected-style.cpp:1031
-#: ../src/ui/widget/selected-style.cpp:1032
-msgid "Opacity, %"
-msgstr ""
+msgstr "אחר"
 
-#: ../src/ui/widget/object-composite-settings.cpp:152
-#, fuzzy
+#: ../src/ui/widget/object-composite-settings.cpp:169
 msgid "Change blur"
-msgstr "ער×\95×¥"
+msgstr "שנ×\94 ×\98ש×\98×\95ש"
 
-#: ../src/ui/widget/object-composite-settings.cpp:192
-#: ../src/ui/widget/selected-style.cpp:855
-#: ../src/ui/widget/selected-style.cpp:1149
+#: ../src/ui/widget/object-composite-settings.cpp:209
+#: ../src/ui/widget/selected-style.cpp:851
+#: ../src/ui/widget/selected-style.cpp:1145
 msgid "Change opacity"
-msgstr ""
+msgstr "שנה אטימות"
 
-#: ../src/ui/widget/page-sizer.cpp:190
+#: ../src/ui/widget/page-sizer.cpp:208
 msgid "U_nits:"
-msgstr ""
+msgstr "_יחידות:"
 
-#: ../src/ui/widget/page-sizer.cpp:191
+#: ../src/ui/widget/page-sizer.cpp:209
 msgid "Width of paper"
-msgstr ""
+msgstr "רוחב הנייר"
 
-#: ../src/ui/widget/page-sizer.cpp:192
+#: ../src/ui/widget/page-sizer.cpp:210
 msgid "_Height:"
-msgstr ""
+msgstr "גו_בה:"
 
-#: ../src/ui/widget/page-sizer.cpp:192
+#: ../src/ui/widget/page-sizer.cpp:210
 msgid "Height of paper"
-msgstr ""
+msgstr "גובה הנייר"
 
-#: ../src/ui/widget/page-sizer.cpp:236
+#: ../src/ui/widget/page-sizer.cpp:256
 msgid "P_age size:"
-msgstr ""
+msgstr "_גודל הדף:"
 
-#: ../src/ui/widget/page-sizer.cpp:244
+#: ../src/ui/widget/page-sizer.cpp:264
 msgid "Page orientation:"
-msgstr ""
+msgstr "_כיוון הדף:"
 
-#: ../src/ui/widget/page-sizer.cpp:247
+#: ../src/ui/widget/page-sizer.cpp:267
 msgid "_Landscape"
-msgstr ""
+msgstr "ל_רוחב"
 
-#: ../src/ui/widget/page-sizer.cpp:252
+#: ../src/ui/widget/page-sizer.cpp:272
 msgid "_Portrait"
-msgstr ""
+msgstr "ל_אורך"
 
 #. ## Set up custom size frame
-#: ../src/ui/widget/page-sizer.cpp:259
+#: ../src/ui/widget/page-sizer.cpp:279
 msgid "Custom size"
-msgstr ""
+msgstr "גודל מותאם אישית"
 
-#: ../src/ui/widget/page-sizer.cpp:272
+#: ../src/ui/widget/page-sizer.cpp:292
 msgid "_Fit page to selection"
-msgstr ""
+msgstr "_התאם את העמוד לבחירה"
 
-#: ../src/ui/widget/page-sizer.cpp:273
-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:293
+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:331
+#: ../src/ui/widget/page-sizer.cpp:351
 msgid "Set page size"
-msgstr ""
+msgstr "הגדר את גודל העמוד"
 
-#: ../src/ui/widget/panel.cpp:121
+#: ../src/ui/widget/panel.cpp:111
 msgid "List"
-msgstr ""
+msgstr "רשימה"
 
-#: ../src/ui/widget/panel.cpp:144
+#: ../src/ui/widget/panel.cpp:134
 msgid "swatches|Size"
-msgstr ""
+msgstr "swatches|גודל"
 
-#: ../src/ui/widget/panel.cpp:148
+#: ../src/ui/widget/panel.cpp:138
 msgid "tiny"
-msgstr ""
+msgstr "פיצפון"
 
-#: ../src/ui/widget/panel.cpp:149
+#: ../src/ui/widget/panel.cpp:139
 msgid "small"
-msgstr ""
+msgstr "קטן"
 
 #. TRANSLATORS: Translate only the word "medium". Indicates size of colour swatches
-#: ../src/ui/widget/panel.cpp:151
+#: ../src/ui/widget/panel.cpp:141
 msgid "swatchesHeight|medium"
-msgstr ""
+msgstr "swatches|בינוני"
 
-#: ../src/ui/widget/panel.cpp:152
+#: ../src/ui/widget/panel.cpp:142
 msgid "large"
-msgstr ""
+msgstr "גדול"
 
-#: ../src/ui/widget/panel.cpp:153
+#: ../src/ui/widget/panel.cpp:143
 msgid "huge"
-msgstr ""
+msgstr "ענק"
 
-#: ../src/ui/widget/panel.cpp:175
+#: ../src/ui/widget/panel.cpp:165
 msgid "swatches|Width"
-msgstr ""
+msgstr "swatches|רוחב"
 
-#: ../src/ui/widget/panel.cpp:179
+#: ../src/ui/widget/panel.cpp:169
 msgid "narrower"
-msgstr ""
+msgstr "צר יותר"
 
-#: ../src/ui/widget/panel.cpp:180
+#: ../src/ui/widget/panel.cpp:170
 msgid "narrow"
-msgstr ""
+msgstr "צר"
 
 #. TRANSLATORS: Translate only the word "medium". Indicates width of colour swatches
-#: ../src/ui/widget/panel.cpp:182
+#: ../src/ui/widget/panel.cpp:172
 msgid "swatchesWidth|medium"
-msgstr ""
+msgstr "swatches|בינוני"
 
-#: ../src/ui/widget/panel.cpp:183
-#, fuzzy
+#: ../src/ui/widget/panel.cpp:173
 msgid "wide"
-msgstr "ר×\95×\97×\91"
+msgstr "רחב"
 
-#: ../src/ui/widget/panel.cpp:184
-#, fuzzy
+#: ../src/ui/widget/panel.cpp:174
 msgid "wider"
-msgstr "ר×\95×\97×\91"
+msgstr "ר×\97×\91 ×\99×\95תר"
 
 #. TRANSLATORS: Translate only the word "Wrap". Indicates how colour swatches are displayed
-#: ../src/ui/widget/panel.cpp:215
+#: ../src/ui/widget/panel.cpp:205
 msgid "swatches|Wrap"
-msgstr ""
+msgstr "swatches|גלישה"
 
-#: ../src/ui/widget/preferences-widget.cpp:278
+#: ../src/ui/widget/preferences-widget.cpp:498
 msgid "Reset"
-msgstr ""
+msgstr "אפס"
 
 #: ../src/ui/widget/random.cpp:123
-msgid ""
-"Reseed the random number generator; this creates a different sequence of "
-"random numbers."
-msgstr ""
+msgid "Reseed the random number generator; this creates a different sequence of random numbers."
+msgstr "הזרע מחדש את יצרן המספרים האקראים; פעולה זו תיצור רצף שונה של מספרים אקראיים."
 
 #: ../src/ui/widget/rendering-options.cpp:39
-#, fuzzy
 msgid "Backend"
-msgstr "ש×\97×\95ר"
+msgstr "×\9e× ×\92× ×\95×\9f"
 
 #: ../src/ui/widget/rendering-options.cpp:40
-#, fuzzy
 msgid "Vector"
-msgstr "פקטור"
+msgstr "×\95קטור"
 
 #: ../src/ui/widget/rendering-options.cpp:41
 msgid "Bitmap"
-msgstr ""
+msgstr "מפת סיביות"
 
 #: ../src/ui/widget/rendering-options.cpp:42
 msgid "Bitmap options"
-msgstr ""
+msgstr "אפשרויות מפת סיביות"
 
 #: ../src/ui/widget/rendering-options.cpp:44
 msgid "Preferred resolution of rendering, in dots per inch."
-msgstr ""
+msgstr "רזולוציה מועדפת לעיבוד התמונה, בנקודות לאינטש."
 
 #: ../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 ""
+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 "עבד את התמונה באמצעות פעולות וקטוריות של Cairo. התמונה שתתקבל לרב תהיה קטנה בנפח הקובץ וניתן יהיה למתוח אותה באופן שרירותי, אך כמה מאפקטי הסינון לא יהיו נכונים"
 
 #: ../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 ""
+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 "עבד הכל כמפת סיביות. התמונה המתקבלת לרב תהיה קטנה יותר בנפח הקובץ ולא ניתן יהיה למתוח אותה באופן שרירותי, אך כל הפריטים יעובדו בדיוק כפי שהם מוצגים."
 
 #: ../src/ui/widget/selected-style.cpp:106
-#: ../src/ui/widget/style-swatch.cpp:110
+#: ../src/ui/widget/style-swatch.cpp:117
 msgid "Fill:"
-msgstr ""
+msgstr "מילוי:"
 
 #: ../src/ui/widget/selected-style.cpp:107
-#: ../src/ui/widget/style-swatch.cpp:111
+#: ../src/ui/widget/style-swatch.cpp:118
 msgid "Stroke:"
-msgstr ""
+msgstr "קו מתאר:"
 
 #: ../src/ui/widget/selected-style.cpp:108
 msgid "O:"
-msgstr ""
+msgstr "א:"
 
 #: ../src/ui/widget/selected-style.cpp:150
 msgid "N/A"
-msgstr ""
+msgstr "לא זמין"
 
 #: ../src/ui/widget/selected-style.cpp:153
-#: ../src/ui/widget/selected-style.cpp:1024
-#: ../src/ui/widget/selected-style.cpp:1025
+#: ../src/ui/widget/selected-style.cpp:1020
+#: ../src/ui/widget/selected-style.cpp:1021
 msgid "Nothing selected"
-msgstr ""
+msgstr "לא נבחר דבר"
 
 #: ../src/ui/widget/selected-style.cpp:155
-#: ../src/ui/widget/style-swatch.cpp:328
+#: ../src/ui/widget/style-swatch.cpp:296
 msgid "<i>None</i>"
-msgstr ""
+msgstr "<i>ללא</i>"
 
 #: ../src/ui/widget/selected-style.cpp:158
-#: ../src/ui/widget/style-swatch.cpp:330
+#: ../src/ui/widget/style-swatch.cpp:298
 msgid "No fill"
-msgstr ""
+msgstr "ללא מילוי"
 
 #: ../src/ui/widget/selected-style.cpp:158
-#: ../src/ui/widget/style-swatch.cpp:330
+#: ../src/ui/widget/style-swatch.cpp:298
 msgid "No stroke"
-msgstr ""
+msgstr "ללא קו מתאר"
 
 #: ../src/ui/widget/selected-style.cpp:160
-#: ../src/ui/widget/style-swatch.cpp:309 ../src/widgets/paint-selector.cpp:189
+#: ../src/ui/widget/style-swatch.cpp:277
+#: ../src/widgets/paint-selector.cpp:189
 msgid "Pattern"
-msgstr ""
+msgstr "תבנית"
 
 #: ../src/ui/widget/selected-style.cpp:163
-#: ../src/ui/widget/style-swatch.cpp:311 ../src/widgets/paint-selector.cpp:997
+#: ../src/ui/widget/style-swatch.cpp:279
+#: ../src/widgets/paint-selector.cpp:997
 msgid "Pattern fill"
-msgstr ""
+msgstr "מילוי בתבנית"
 
 #: ../src/ui/widget/selected-style.cpp:163
-#: ../src/ui/widget/style-swatch.cpp:311
+#: ../src/ui/widget/style-swatch.cpp:279
 msgid "Pattern stroke"
-msgstr ""
+msgstr "תבנית כקו המתאר"
 
 #: ../src/ui/widget/selected-style.cpp:165
 msgid "<b>L</b>"
-msgstr ""
+msgstr "<b>ק</b>"
 
 #: ../src/ui/widget/selected-style.cpp:168
-#: ../src/ui/widget/style-swatch.cpp:303
+#: ../src/ui/widget/style-swatch.cpp:271
 msgid "Linear gradient fill"
-msgstr ""
+msgstr "מילוי מדרג קווי"
 
 #: ../src/ui/widget/selected-style.cpp:168
-#: ../src/ui/widget/style-swatch.cpp:303
+#: ../src/ui/widget/style-swatch.cpp:271
 msgid "Linear gradient stroke"
-msgstr ""
+msgstr "מדרג קווי בקו המתאר"
 
 #: ../src/ui/widget/selected-style.cpp:175
 msgid "<b>R</b>"
-msgstr ""
+msgstr "<b>מ</b>"
 
 #: ../src/ui/widget/selected-style.cpp:178
-#: ../src/ui/widget/style-swatch.cpp:307
+#: ../src/ui/widget/style-swatch.cpp:275
 msgid "Radial gradient fill"
-msgstr ""
+msgstr "מילוי מדרג מעגלי"
 
 #: ../src/ui/widget/selected-style.cpp:178
-#: ../src/ui/widget/style-swatch.cpp:307
+#: ../src/ui/widget/style-swatch.cpp:275
 msgid "Radial gradient stroke"
-msgstr ""
+msgstr "מדרג מעגלי בקו המתאר"
 
 #: ../src/ui/widget/selected-style.cpp:185
 msgid "Different"
-msgstr ""
+msgstr "שונה"
 
 #: ../src/ui/widget/selected-style.cpp:188
 msgid "Different fills"
-msgstr ""
+msgstr "מילויים שונים"
 
 #: ../src/ui/widget/selected-style.cpp:188
 msgid "Different strokes"
-msgstr ""
+msgstr "קוי מתאר שונים"
 
 #: ../src/ui/widget/selected-style.cpp:190
-#: ../src/ui/widget/style-swatch.cpp:333
+#: ../src/ui/widget/style-swatch.cpp:301
 msgid "<b>Unset</b>"
-msgstr ""
+msgstr "<b>לא הוגדר</b>"
 
 #: ../src/ui/widget/selected-style.cpp:196
 msgid "Flat color fill"
-msgstr ""
+msgstr "מילוי צבע אחיד"
 
 #: ../src/ui/widget/selected-style.cpp:196
 msgid "Flat color stroke"
-msgstr ""
+msgstr "קו מתאר בצבע אחיד"
 
 #. TRANSLATOR COMMENT: A means "Averaged"
 #: ../src/ui/widget/selected-style.cpp:199
 msgid "<b>a</b>"
-msgstr ""
+msgstr "<b>א</b>"
 
 #: ../src/ui/widget/selected-style.cpp:202
 msgid "Fill is averaged over selected objects"
-msgstr ""
+msgstr "המילוי נקבע בממוצע לפי צבעי הפריטים הנבחרים"
 
 #: ../src/ui/widget/selected-style.cpp:202
 msgid "Stroke is averaged over selected objects"
-msgstr ""
+msgstr "קו המתאר נקבע בממוצע לפי צבעי הפריטים הנבחרים"
 
 #. TRANSLATOR COMMENT: M means "Multiple"
 #: ../src/ui/widget/selected-style.cpp:205
 msgid "<b>m</b>"
-msgstr ""
+msgstr "<b>כ</b>"
 
 #: ../src/ui/widget/selected-style.cpp:208
 msgid "Multiple selected objects have the same fill"
-msgstr ""
+msgstr "למספר הפריטים שנבחרו ישנו מילוי זהה"
 
 #: ../src/ui/widget/selected-style.cpp:208
 msgid "Multiple selected objects have the same stroke"
-msgstr ""
+msgstr "למספר הפריטים שנבחרו ישנו קו מתאר זהה"
 
 #: ../src/ui/widget/selected-style.cpp:210
 msgid "Edit fill..."
-msgstr ""
+msgstr "ערוך מילוי..."
 
 #: ../src/ui/widget/selected-style.cpp:210
 msgid "Edit stroke..."
-msgstr ""
+msgstr "ערוך קו מתאר..."
 
 #: ../src/ui/widget/selected-style.cpp:214
 msgid "Last set color"
-msgstr ""
+msgstr "הצבע שנקבע לאחרונה"
 
 #: ../src/ui/widget/selected-style.cpp:218
 msgid "Last selected color"
-msgstr ""
+msgstr "הצבע שנבחר לאחרונה"
 
 #: ../src/ui/widget/selected-style.cpp:222
 msgid "Invert"
-msgstr ""
+msgstr "הפוך"
 
 #: ../src/ui/widget/selected-style.cpp:226
 msgid "White"
 msgstr "לבן"
 
 #: ../src/ui/widget/selected-style.cpp:230
-#: ../src/widgets/sp-color-icc-selector.cpp:237
+#: ../src/widgets/sp-color-icc-selector.cpp:238
 #: ../src/widgets/sp-color-scales.cpp:461
 #: ../src/widgets/sp-color-scales.cpp:462
 msgid "Black"
@@ -12721,2174 +13220,2221 @@ msgid "Paste color"
 msgstr "הדבק צבע"
 
 #: ../src/ui/widget/selected-style.cpp:242
-#: ../src/ui/widget/selected-style.cpp:780
+#: ../src/ui/widget/selected-style.cpp:776
 msgid "Swap fill and stroke"
-msgstr ""
+msgstr "החלף בין המילוי לקו המתאר"
 
 #: ../src/ui/widget/selected-style.cpp:246
-#: ../src/ui/widget/selected-style.cpp:522
-#: ../src/ui/widget/selected-style.cpp:531
+#: ../src/ui/widget/selected-style.cpp:518
+#: ../src/ui/widget/selected-style.cpp:527
 msgid "Make fill opaque"
-msgstr ""
+msgstr "הפוך את המילוי לאטום"
 
 #: ../src/ui/widget/selected-style.cpp:246
 msgid "Make stroke opaque"
-msgstr ""
+msgstr "הפוך את קו המתאר לאטום"
 
 #: ../src/ui/widget/selected-style.cpp:308
 msgid "Remove"
 msgstr "הסר"
 
-#: ../src/ui/widget/selected-style.cpp:543
+#: ../src/ui/widget/selected-style.cpp:539
 msgid "Apply last set color to fill"
-msgstr ""
+msgstr "החל את הצבע האחרון שנקבע כמילוי"
 
-#: ../src/ui/widget/selected-style.cpp:555
+#: ../src/ui/widget/selected-style.cpp:551
 msgid "Apply last set color to stroke"
-msgstr ""
+msgstr "החל את הצבע האחרון שנקבע כקו מתאר"
 
-#: ../src/ui/widget/selected-style.cpp:566
+#: ../src/ui/widget/selected-style.cpp:562
 msgid "Apply last selected color to fill"
-msgstr ""
+msgstr "החל את הצבע האחרון שנבחר כמילוי"
 
-#: ../src/ui/widget/selected-style.cpp:577
+#: ../src/ui/widget/selected-style.cpp:573
 msgid "Apply last selected color to stroke"
-msgstr ""
+msgstr "החל את הצבע האחרון שנבחר כקו מתאר"
 
-#: ../src/ui/widget/selected-style.cpp:597
+#: ../src/ui/widget/selected-style.cpp:593
 msgid "Invert fill"
-msgstr ""
+msgstr "הפוך מילוי"
 
-#: ../src/ui/widget/selected-style.cpp:617
+#: ../src/ui/widget/selected-style.cpp:613
 msgid "Invert stroke"
-msgstr ""
+msgstr "הפוך קו מתאר"
 
-#: ../src/ui/widget/selected-style.cpp:629
+#: ../src/ui/widget/selected-style.cpp:625
 msgid "White fill"
-msgstr ""
+msgstr "מילוי לבן"
 
-#: ../src/ui/widget/selected-style.cpp:641
+#: ../src/ui/widget/selected-style.cpp:637
 msgid "White stroke"
-msgstr ""
+msgstr "קו מתאר לבן"
 
-#: ../src/ui/widget/selected-style.cpp:653
+#: ../src/ui/widget/selected-style.cpp:649
 msgid "Black fill"
-msgstr ""
+msgstr "מילוי שחור"
 
-#: ../src/ui/widget/selected-style.cpp:665
+#: ../src/ui/widget/selected-style.cpp:661
 msgid "Black stroke"
-msgstr ""
+msgstr "קו מתאר שחור"
 
-#: ../src/ui/widget/selected-style.cpp:708
+#: ../src/ui/widget/selected-style.cpp:704
 msgid "Paste fill"
-msgstr ""
+msgstr "הדבק מילוי"
 
-#: ../src/ui/widget/selected-style.cpp:726
+#: ../src/ui/widget/selected-style.cpp:722
 msgid "Paste stroke"
-msgstr ""
+msgstr "הדבק קו מתאר"
 
-#: ../src/ui/widget/selected-style.cpp:890
+#: ../src/ui/widget/selected-style.cpp:886
 msgid "Change stroke width"
-msgstr ""
+msgstr "שנה את עובי קו המתאר"
 
-#: ../src/ui/widget/selected-style.cpp:985
+#: ../src/ui/widget/selected-style.cpp:981
 msgid ", drag to adjust"
-msgstr ""
+msgstr ", גרור להתאמה"
 
-#: ../src/ui/widget/selected-style.cpp:1066
+#: ../src/ui/widget/selected-style.cpp:1062
 #, c-format
 msgid "Stroke width: %.5g%s%s"
-msgstr ""
+msgstr "עובי קו המתאר: %.5g%s%s"
 
-#: ../src/ui/widget/selected-style.cpp:1070
+#: ../src/ui/widget/selected-style.cpp:1066
 msgid " (averaged)"
-msgstr ""
+msgstr " (ממוצע)"
 
-#: ../src/ui/widget/selected-style.cpp:1098
+#: ../src/ui/widget/selected-style.cpp:1094
 msgid "0 (transparent)"
-msgstr ""
+msgstr "0 (שקוף)"
 
-#: ../src/ui/widget/selected-style.cpp:1122
+#: ../src/ui/widget/selected-style.cpp:1118
 msgid "100% (opaque)"
-msgstr ""
+msgstr "100% (אטום)"
 
 #: ../src/ui/widget/selected-style.cpp:1271
 msgid "Adjust saturation"
-msgstr ""
+msgstr "כוונן את הרוויה"
 
 #: ../src/ui/widget/selected-style.cpp:1273
 #, 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 ""
+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>רוויה</b>: לשעבר %.3g, כעת<b>%.3g</b> (שינוי %.3g); לחיצה על <b>Ctrl</b> כדי לכוונן את התאורה, ללא מקשי שינוי לכוונון הגוון"
 
 #: ../src/ui/widget/selected-style.cpp:1277
-#, fuzzy
 msgid "Adjust lightness"
-msgstr "×\91×\94×\99ר×\95ת"
+msgstr "×\9b×\95×\95× ×\9f ×\90ת ×\94ת×\90×\95ר×\94"
 
 #: ../src/ui/widget/selected-style.cpp:1279
 #, 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 ""
+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>תאורה</b>: לשעבר %.3g, כעת <b>%.3g</b> (שינוי %.3g); לחיצה על <b>Shift</b> כדי לכוונן את הרוויה, ללא מקשי שינוי כדי לכוונן את הגוון"
 
 #: ../src/ui/widget/selected-style.cpp:1283
 msgid "Adjust hue"
-msgstr ""
+msgstr "כוונן את הגוון"
 
 #: ../src/ui/widget/selected-style.cpp:1285
 #, 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 ""
+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>גוון</b>: לשעבר %.3g, כעת <b>%.3g</b> (שינוי %.3g); לחיצה על <b>Shift</b> כדי לכוונן את הרוויה, לחיצה על <b>Ctrl</b> כדי לכוונן את התאורה"
 
-#: ../src/ui/widget/selected-style.cpp:1391
-#: ../src/ui/widget/selected-style.cpp:1405
+#: ../src/ui/widget/selected-style.cpp:1394
+#: ../src/ui/widget/selected-style.cpp:1408
 msgid "Adjust stroke width"
-msgstr ""
+msgstr "התאם את עובי קו המתאר"
 
-#: ../src/ui/widget/selected-style.cpp:1392
+#: ../src/ui/widget/selected-style.cpp:1395
 #, c-format
 msgid "Adjusting <b>stroke width</b>: was %.3g, now <b>%.3g</b> (diff %.3g)"
-msgstr ""
+msgstr "מתאים את <b>עובי קו המתאר</b>: היה %.3g, כעת <b>%.3g</b> (שינוי %.3g)"
 
 #. TRANSLATORS: Only translate the word "Link" - means to _link_ two sliders together
 #: ../src/ui/widget/spin-slider.cpp:118
 msgid "sliders|Link"
-msgstr ""
+msgstr "sliders|קשר"
 
-#: ../src/ui/widget/style-swatch.cpp:301
+#: ../src/ui/widget/style-swatch.cpp:269
 msgid "L Gradient"
-msgstr ""
+msgstr "מדרג ק"
 
-#: ../src/ui/widget/style-swatch.cpp:305
+#: ../src/ui/widget/style-swatch.cpp:273
 msgid "R Gradient"
-msgstr ""
+msgstr "מדרג מ"
 
-#: ../src/ui/widget/style-swatch.cpp:321
+#: ../src/ui/widget/style-swatch.cpp:289
 #, c-format
 msgid "Fill: %06x/%.3g"
-msgstr ""
+msgstr "מילוי: %06x/%.3g"
 
-#: ../src/ui/widget/style-swatch.cpp:323
+#: ../src/ui/widget/style-swatch.cpp:291
 #, c-format
 msgid "Stroke: %06x/%.3g"
-msgstr ""
+msgstr "קו מתאר: %06x/%.3g"
 
-#: ../src/ui/widget/style-swatch.cpp:355
+#: ../src/ui/widget/style-swatch.cpp:323
 #, c-format
 msgid "Stroke width: %.5g%s"
-msgstr ""
+msgstr "עובי קו המתאר: %.5g%s"
 
-#: ../src/ui/widget/style-swatch.cpp:371
+#: ../src/ui/widget/style-swatch.cpp:339
 #, c-format
 msgid "O:%.3g"
-msgstr ""
+msgstr "א:%.3g"
 
-#: ../src/ui/widget/style-swatch.cpp:373
+#: ../src/ui/widget/style-swatch.cpp:341
 #, c-format
 msgid "O:.%d"
-msgstr ""
+msgstr "א:.%d"
 
-#: ../src/ui/widget/style-swatch.cpp:378
+#: ../src/ui/widget/style-swatch.cpp:346
 #, c-format
 msgid "Opacity: %.3g"
-msgstr ""
+msgstr "אטימות: %.3g"
 
 #: ../src/vanishing-point.cpp:124
 msgid "Split vanishing points"
-msgstr ""
+msgstr "פצל את נקודות ההעלמות"
 
 #: ../src/vanishing-point.cpp:169
 msgid "Merge vanishing points"
-msgstr ""
+msgstr "מזג את נקודות ההעלמות"
 
 #: ../src/vanishing-point.cpp:225
 msgid "3D box: Move vanishing point"
-msgstr ""
+msgstr "תיבה תלת־מימדית: הזז את נקודת ההעלמות"
 
 #: ../src/vanishing-point.cpp:306
 #, 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)"
-msgstr[0] ""
+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>סופית</b> נקודת ההעלמות משותפת בין תיבה <b>%d</b>"
+msgstr[1] "<b>סופית</b> נקודת ההעלמות משותפת בין <b>%d</b> תיבות; גרור עם <b>Shift</b> כדי להפריד את התיבה/ות הנבחרת/ות"
 
 #. 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:313
 #, 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)"
-msgstr[0] ""
+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>אינסופי</b> נקודות ההעלמות משותפות בין תיבה <b>%d</b>"
+msgstr[1] "<b>אין סופי</b> נקודות ההעלמות משותפות בין <b>%d</b> תיבות; גרור עם  <b>Shift</b> כדי להפריד את התיבה/ות הנבחרת/ות)"
 
 #: ../src/vanishing-point.cpp:321
 #, 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)"
-msgstr[0] ""
+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>; גרור עם <b>Shift</b>כדי להפריד את התיבה/ות הנבחרת/ות"
+msgstr[1] "משותף בין <b>%d</b> תיבות; גרור עם <b>Shift</b> כדי להפריד את התיבה/ות הנברחת/ות"
 
-#: ../src/verbs.cpp:1134
+#: ../src/verbs.cpp:1137
 msgid "Switch to next layer"
-msgstr ""
+msgstr "עבור לשכבה הבאה"
 
-#: ../src/verbs.cpp:1135
+#: ../src/verbs.cpp:1138
 msgid "Switched to next layer."
-msgstr ""
+msgstr "הועברת לשכבה הבאה."
 
-#: ../src/verbs.cpp:1137
+#: ../src/verbs.cpp:1140
 msgid "Cannot go past last layer."
-msgstr ""
+msgstr "לא ניתן לגשת מעבר לשכבה האחרונה."
 
-#: ../src/verbs.cpp:1146
+#: ../src/verbs.cpp:1149
 msgid "Switch to previous layer"
-msgstr ""
+msgstr "עבור לשכבה הקודמת"
 
-#: ../src/verbs.cpp:1147
+#: ../src/verbs.cpp:1150
 msgid "Switched to previous layer."
-msgstr ""
+msgstr "הועברת לשכבה הקודמת."
 
-#: ../src/verbs.cpp:1149
+#: ../src/verbs.cpp:1152
 msgid "Cannot go before first layer."
-msgstr ""
+msgstr "לא ניתן לגשת מעבר לשכבה הראשונה."
 
-#: ../src/verbs.cpp:1166 ../src/verbs.cpp:1250
+#: ../src/verbs.cpp:1169
+#: ../src/verbs.cpp:1246
+#: ../src/verbs.cpp:1278
+#: ../src/verbs.cpp:1284
 msgid "No current layer."
-msgstr ""
+msgstr "אין שכבה נוכחית."
 
-#: ../src/verbs.cpp:1195 ../src/verbs.cpp:1199
+#: ../src/verbs.cpp:1198
+#: ../src/verbs.cpp:1202
 #, c-format
 msgid "Raised layer <b>%s</b>."
-msgstr ""
+msgstr "השכבה המוגבהת <b>%s</b>."
 
-#: ../src/verbs.cpp:1196
+#: ../src/verbs.cpp:1199
 msgid "Layer to top"
-msgstr ""
+msgstr "העבר כעליונה"
 
-#: ../src/verbs.cpp:1200
+#: ../src/verbs.cpp:1203
 msgid "Raise layer"
-msgstr ""
+msgstr "הגבה שכבה"
 
-#: ../src/verbs.cpp:1203 ../src/verbs.cpp:1207
+#: ../src/verbs.cpp:1206
+#: ../src/verbs.cpp:1210
 #, c-format
 msgid "Lowered layer <b>%s</b>."
-msgstr ""
+msgstr "שכבה מונמכת <b>%s</b>."
 
-#: ../src/verbs.cpp:1204
+#: ../src/verbs.cpp:1207
 msgid "Layer to bottom"
-msgstr ""
+msgstr "שכבה לתחתית"
 
-#: ../src/verbs.cpp:1208
+#: ../src/verbs.cpp:1211
 msgid "Lower layer"
-msgstr ""
+msgstr "הנמך שכבה"
 
-#: ../src/verbs.cpp:1217
+#: ../src/verbs.cpp:1220
 msgid "Cannot move layer any further."
-msgstr ""
+msgstr "לא ניתן להעביר את השכבה הלאה."
+
+#: ../src/verbs.cpp:1229
+#, c-format
+msgid "%s copy"
+msgstr "עותק של %s"
+
+#: ../src/verbs.cpp:1241
+msgid "Duplicate layer"
+msgstr "שכפל שכבה"
 
-#: ../src/verbs.cpp:1245
+#. TRANSLATORS: this means "The layer has been duplicated."
+#: ../src/verbs.cpp:1244
+msgid "Duplicated layer."
+msgstr "השכבה שוכפלה."
+
+#: ../src/verbs.cpp:1273
 msgid "Delete layer"
-msgstr ""
+msgstr "מחק שכבה"
 
 #. TRANSLATORS: this means "The layer has been deleted."
-#: ../src/verbs.cpp:1248
+#: ../src/verbs.cpp:1276
 msgid "Deleted layer."
-msgstr ""
+msgstr "השכבה נמחקה."
+
+#: ../src/verbs.cpp:1287
+msgid "Toggle layer solo"
+msgstr "החלף את בידוד השכבה"
 
-#: ../src/verbs.cpp:1330
+#: ../src/verbs.cpp:1367
 msgid "Flip horizontally"
-msgstr ""
+msgstr "הפוך אופקית"
 
-#: ../src/verbs.cpp:1345
+#: ../src/verbs.cpp:1382
 msgid "Flip vertically"
-msgstr ""
+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:1829
+#: ../src/verbs.cpp:1884
 msgid "tutorial-basic.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1833
+#: ../src/verbs.cpp:1888
 msgid "tutorial-shapes.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1837
+#: ../src/verbs.cpp:1892
 msgid "tutorial-advanced.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1841
+#: ../src/verbs.cpp:1896
 msgid "tutorial-tracing.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1845
+#: ../src/verbs.cpp:1900
 msgid "tutorial-calligraphy.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1849
+#: ../src/verbs.cpp:1904
 msgid "tutorial-elements.svg"
 msgstr ""
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
-#: ../src/verbs.cpp:1853
+#: ../src/verbs.cpp:1908
 msgid "tutorial-tips.svg"
 msgstr ""
 
-#: ../src/verbs.cpp:2129 ../src/verbs.cpp:2634
+#: ../src/verbs.cpp:2184
+#: ../src/verbs.cpp:2703
 msgid "Unlock all objects in the current layer"
-msgstr ""
+msgstr "שחרר את כל הפריטים בשכבה הנוכחית"
 
-#: ../src/verbs.cpp:2133 ../src/verbs.cpp:2636
+#: ../src/verbs.cpp:2188
+#: ../src/verbs.cpp:2705
 msgid "Unlock all objects in all layers"
-msgstr ""
+msgstr "שחרר את כל הפריטים בכל השכבות"
 
-#: ../src/verbs.cpp:2137 ../src/verbs.cpp:2638
+#: ../src/verbs.cpp:2192
+#: ../src/verbs.cpp:2707
 msgid "Unhide all objects in the current layer"
-msgstr ""
+msgstr "הצג את כל הפריטים בשכבה הנוכחית"
 
-#: ../src/verbs.cpp:2141 ../src/verbs.cpp:2640
+#: ../src/verbs.cpp:2196
+#: ../src/verbs.cpp:2709
 msgid "Unhide all objects in all layers"
-msgstr ""
+msgstr "הצג את כל הפריטים בכל השכבות"
 
-#: ../src/verbs.cpp:2156
+#: ../src/verbs.cpp:2211
 msgid "Does nothing"
-msgstr ""
+msgstr "לא עושה דבר"
 
-#: ../src/verbs.cpp:2159
+#: ../src/verbs.cpp:2214
 msgid "Create new document from the default template"
-msgstr ""
+msgstr "יוצר מסמך חדש מתבנית ברירת המחדל"
 
-#: ../src/verbs.cpp:2161
+#: ../src/verbs.cpp:2216
 msgid "_Open..."
 msgstr "_פתח..."
 
-#: ../src/verbs.cpp:2162
+#: ../src/verbs.cpp:2217
 msgid "Open an existing document"
-msgstr ""
+msgstr "פתח מסמך קיים"
 
-#: ../src/verbs.cpp:2163
+#: ../src/verbs.cpp:2218
 msgid "Re_vert"
-msgstr ""
+msgstr "_שחזר"
 
-#: ../src/verbs.cpp:2164
+#: ../src/verbs.cpp:2219
 msgid "Revert to the last saved version of document (changes will be lost)"
-msgstr ""
+msgstr "שחזר לגירסה האחרונה של המסמך שנשמרה (השינויים יאבדו)"
 
-#: ../src/verbs.cpp:2165
+#: ../src/verbs.cpp:2220
 msgid "_Save"
 msgstr "_שמור"
 
-#: ../src/verbs.cpp:2165
+#: ../src/verbs.cpp:2220
 msgid "Save document"
 msgstr "שמור מסמך"
 
-#: ../src/verbs.cpp:2167
+#: ../src/verbs.cpp:2222
 msgid "Save _As..."
 msgstr "שמור _בשם..."
 
-#: ../src/verbs.cpp:2168
+#: ../src/verbs.cpp:2223
 msgid "Save document under a new name"
-msgstr ""
+msgstr "שומר את המסמך תחת שם חדש"
 
-#: ../src/verbs.cpp:2169
+#: ../src/verbs.cpp:2224
 msgid "Save a Cop_y..."
 msgstr "שמור _עותק..."
 
-#: ../src/verbs.cpp:2170
+#: ../src/verbs.cpp:2225
 msgid "Save a copy of the document under a new name"
-msgstr ""
+msgstr "שומר עותק של המסמך תחת שם חדש"
 
-#: ../src/verbs.cpp:2171
+#: ../src/verbs.cpp:2226
 msgid "_Print..."
 msgstr "_הדפס..."
 
-#: ../src/verbs.cpp:2171
+#: ../src/verbs.cpp:2226
 msgid "Print document"
-msgstr ""
+msgstr "מדפיס את המסמך"
 
 #. TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions)
-#: ../src/verbs.cpp:2174
+#: ../src/verbs.cpp:2229
 msgid "Vac_uum Defs"
-msgstr ""
+msgstr "נקה ה_גדרות"
 
-#: ../src/verbs.cpp:2174
-msgid ""
-"Remove unused definitions (such as gradients or clipping paths) from the &lt;"
-"defs&gt; of the document"
-msgstr ""
+#: ../src/verbs.cpp:2229
+msgid "Remove unused definitions (such as gradients or clipping paths) from the &lt;defs&gt; of the document"
+msgstr "הסר הגדרות שאינן בשימוש (כגון מדרגים או נתיבי חיתוך) מה&lt;הגדרות&gt; של המסמך"
 
-#: ../src/verbs.cpp:2176
+#: ../src/verbs.cpp:2231
 msgid "Print Previe_w"
-msgstr ""
+msgstr "תצוגה _מקדימה"
 
-#: ../src/verbs.cpp:2177
+#: ../src/verbs.cpp:2232
 msgid "Preview document printout"
-msgstr ""
+msgstr "הצג תצוגה מקדימה של פלט ההדפסה"
 
-#: ../src/verbs.cpp:2178
+#: ../src/verbs.cpp:2233
 msgid "_Import..."
-msgstr "_ייבא..."
+msgstr "יי_בא..."
 
-#: ../src/verbs.cpp:2179
+#: ../src/verbs.cpp:2234
 msgid "Import a bitmap or SVG image into this document"
-msgstr ""
+msgstr "ייבא תמונת מפת סיביות או קובץ SVG לתוך מסמך זה"
 
-#: ../src/verbs.cpp:2180
+#: ../src/verbs.cpp:2235
 msgid "_Export Bitmap..."
-msgstr ""
+msgstr "יי_צא מפת סיביות..."
 
-#: ../src/verbs.cpp:2181
+#: ../src/verbs.cpp:2236
 msgid "Export this document or a selection as a bitmap image"
-msgstr ""
+msgstr "ייצא מסמך זה או את הבחירה כתמונת מפת סיביות"
 
-#: ../src/verbs.cpp:2182
+#: ../src/verbs.cpp:2237
 msgid "Import a document from Open Clip Art Library"
-msgstr ""
+msgstr "ייבא מסמך מספריית אוסף התמונות החופשיות"
 
-#: ../src/verbs.cpp:2183
+#: ../src/verbs.cpp:2238
 msgid "Export To Open Clip Art Library"
-msgstr ""
+msgstr "ייצא אל ספריית אוסף התמונות החופשיות"
 
-#: ../src/verbs.cpp:2183
+#: ../src/verbs.cpp:2238
 msgid "Export this document to Open Clip Art Library"
-msgstr ""
+msgstr "ייצא מסמך זה לספריית אוסף התמונות החופשיות"
 
-#: ../src/verbs.cpp:2184
+#: ../src/verbs.cpp:2239
 msgid "N_ext Window"
-msgstr ""
+msgstr "_חלון הבא"
 
-#: ../src/verbs.cpp:2185
+#: ../src/verbs.cpp:2240
 msgid "Switch to the next document window"
-msgstr ""
+msgstr "עבור לחלון המסמך הבא"
 
-#: ../src/verbs.cpp:2186
+#: ../src/verbs.cpp:2241
 msgid "P_revious Window"
-msgstr ""
+msgstr "חלון _קודם"
 
-#: ../src/verbs.cpp:2187
+#: ../src/verbs.cpp:2242
 msgid "Switch to the previous document window"
-msgstr ""
+msgstr "עבור לחלון המסמך הקודם"
 
-#: ../src/verbs.cpp:2188
+#: ../src/verbs.cpp:2243
 msgid "_Close"
 msgstr "_סגור"
 
-#: ../src/verbs.cpp:2189
+#: ../src/verbs.cpp:2244
 msgid "Close this document window"
-msgstr ""
+msgstr "סגור חלון מסמך זה"
 
-#: ../src/verbs.cpp:2190
+#: ../src/verbs.cpp:2245
 msgid "_Quit"
-msgstr "_צא"
+msgstr "י_ציאה"
 
-#: ../src/verbs.cpp:2190
+#: ../src/verbs.cpp:2245
 msgid "Quit Inkscape"
-msgstr ""
+msgstr "צא מאינקסקייפ"
 
-#: ../src/verbs.cpp:2193
+#: ../src/verbs.cpp:2248
 msgid "Undo last action"
-msgstr ""
+msgstr "בטל את הפעולה האחרונה"
 
-#: ../src/verbs.cpp:2196
+#: ../src/verbs.cpp:2251
 msgid "Do again the last undone action"
-msgstr ""
+msgstr "בצא שנית את הפעולה האחרונה שבוטלה"
 
-#: ../src/verbs.cpp:2197
+#: ../src/verbs.cpp:2252
 msgid "Cu_t"
-msgstr ""
+msgstr "ג_זור"
 
-#: ../src/verbs.cpp:2198
+#: ../src/verbs.cpp:2253
 msgid "Cut selection to clipboard"
-msgstr ""
+msgstr "גזור את הבחירה ללוח הגזירים"
 
-#: ../src/verbs.cpp:2199
+#: ../src/verbs.cpp:2254
 msgid "_Copy"
-msgstr ""
+msgstr "ה_עתק"
 
-#: ../src/verbs.cpp:2200
+#: ../src/verbs.cpp:2255
 msgid "Copy selection to clipboard"
-msgstr ""
+msgstr "העתק את הבחירה ללוח הגזירים"
 
-#: ../src/verbs.cpp:2201
+#: ../src/verbs.cpp:2256
 msgid "_Paste"
-msgstr ""
+msgstr "ה_דבק"
 
-#: ../src/verbs.cpp:2202
+#: ../src/verbs.cpp:2257
 msgid "Paste objects from clipboard to mouse point, or paste text"
-msgstr ""
+msgstr "הדסק פריטים מלוח הגזירים לנקודת העכבר, או הדבק טקסט"
 
-#: ../src/verbs.cpp:2203
+#: ../src/verbs.cpp:2258
 msgid "Paste _Style"
-msgstr ""
+msgstr "הדבק _סגנון"
 
-#: ../src/verbs.cpp:2204
+#: ../src/verbs.cpp:2259
 msgid "Apply the style of the copied object to selection"
-msgstr ""
+msgstr "החל את הסגנון של הפריט שהועתק על הבחירה"
 
-#: ../src/verbs.cpp:2206
+#: ../src/verbs.cpp:2261
 msgid "Scale selection to match the size of the copied object"
-msgstr ""
+msgstr "שנה את גודל הבחירה כדי שתתאים לגודל הפריט המועתק"
 
-#: ../src/verbs.cpp:2207
+#: ../src/verbs.cpp:2262
 msgid "Paste _Width"
-msgstr ""
+msgstr "הדבק _רוחב"
 
-#: ../src/verbs.cpp:2208
+#: ../src/verbs.cpp:2263
 msgid "Scale selection horizontally to match the width of the copied object"
-msgstr ""
+msgstr "שנה את גודל הבחירה כדי שתתאים לרוחב הפריט המועתק"
 
-#: ../src/verbs.cpp:2209
+#: ../src/verbs.cpp:2264
 msgid "Paste _Height"
-msgstr ""
+msgstr "הדבק _גובה"
 
-#: ../src/verbs.cpp:2210
+#: ../src/verbs.cpp:2265
 msgid "Scale selection vertically to match the height of the copied object"
-msgstr ""
+msgstr "שנה את גודל הבחירה כדי שתתאים לגובה הפריט המועתק"
 
-#: ../src/verbs.cpp:2211
+#: ../src/verbs.cpp:2266
 msgid "Paste Size Separately"
-msgstr ""
+msgstr "הדבק את הגודל בנפרד"
 
-#: ../src/verbs.cpp:2212
+#: ../src/verbs.cpp:2267
 msgid "Scale each selected object to match the size of the copied object"
-msgstr ""
+msgstr "שנה את גודלו של כל פריט שנבחר כדי להתאים לגודל הפריט המועתק"
 
-#: ../src/verbs.cpp:2213
+#: ../src/verbs.cpp:2268
 msgid "Paste Width Separately"
-msgstr ""
+msgstr "הדבק את הרוחב בנפרד"
 
-#: ../src/verbs.cpp:2214
-msgid ""
-"Scale each selected object horizontally to match the width of the copied "
-"object"
-msgstr ""
+#: ../src/verbs.cpp:2269
+msgid "Scale each selected object horizontally to match the width of the copied object"
+msgstr "שנה את גודלו של כל פריט שנבחר כדי להתאים לרוחב הפריט המועתק"
 
-#: ../src/verbs.cpp:2215
+#: ../src/verbs.cpp:2270
 msgid "Paste Height Separately"
-msgstr ""
+msgstr "הדבק את הגובה בנפרד"
 
-#: ../src/verbs.cpp:2216
-msgid ""
-"Scale each selected object vertically to match the height of the copied "
-"object"
-msgstr ""
+#: ../src/verbs.cpp:2271
+msgid "Scale each selected object vertically to match the height of the copied object"
+msgstr "שנה את גודלו של כל פריט שנבחר כדי להתאים לגובה הפריט המועתק"
 
-#: ../src/verbs.cpp:2217
+#: ../src/verbs.cpp:2272
 msgid "Paste _In Place"
-msgstr ""
+msgstr "הדבק ב_מקום"
 
-#: ../src/verbs.cpp:2218
+#: ../src/verbs.cpp:2273
 msgid "Paste objects from clipboard to the original location"
-msgstr ""
+msgstr "הדבק פריטים מלוח הגזירים אל המיקום המקורי"
 
-#: ../src/verbs.cpp:2219
+#: ../src/verbs.cpp:2274
 msgid "Paste Path _Effect"
-msgstr ""
+msgstr "הדבק אפקט _נתיב"
 
-#: ../src/verbs.cpp:2220
+#: ../src/verbs.cpp:2275
 msgid "Apply the path effect of the copied object to selection"
-msgstr ""
+msgstr "החל את אפקט הנתיב של הפריט המועתק על הבחירה"
 
-#: ../src/verbs.cpp:2221
+#: ../src/verbs.cpp:2276
 msgid "Remove Path _Effect"
-msgstr ""
+msgstr "הסר אפק_ט נתיב"
 
-#: ../src/verbs.cpp:2222
+#: ../src/verbs.cpp:2277
 msgid "Remove any path effects from selected objects"
-msgstr ""
+msgstr "הסר כל אפקט נתיב שהוא מהפריטים הנבחרים"
 
-#: ../src/verbs.cpp:2223
-#, fuzzy
+#: ../src/verbs.cpp:2278
 msgid "Remove Filter"
-msgstr "הסר"
+msgstr "הסר מסנן"
 
-#: ../src/verbs.cpp:2224
+#: ../src/verbs.cpp:2279
 msgid "Remove any filters from selected objects"
-msgstr ""
+msgstr "הסר מסננים כלשהם מהפריטים הנבחרים"
 
-#: ../src/verbs.cpp:2225
+#: ../src/verbs.cpp:2280
 msgid "_Delete"
-msgstr ""
+msgstr "מ_חק"
 
-#: ../src/verbs.cpp:2226
+#: ../src/verbs.cpp:2281
 msgid "Delete selection"
-msgstr ""
+msgstr "מחק את הבחירה"
 
-#: ../src/verbs.cpp:2227
+#: ../src/verbs.cpp:2282
 msgid "Duplic_ate"
-msgstr ""
+msgstr "_שכפל"
 
-#: ../src/verbs.cpp:2228
+#: ../src/verbs.cpp:2283
 msgid "Duplicate selected objects"
-msgstr ""
+msgstr "שכפל את הפריטים הנבחרים"
 
-#: ../src/verbs.cpp:2229
+#: ../src/verbs.cpp:2284
 msgid "Create Clo_ne"
-msgstr ""
+msgstr "צור כ_פיל"
 
-#: ../src/verbs.cpp:2230
+#: ../src/verbs.cpp:2285
 msgid "Create a clone (a copy linked to the original) of selected object"
-msgstr ""
+msgstr "צור כפיל (העתק המקושר למקור) של הפריט הנבחר"
 
-#: ../src/verbs.cpp:2231
+#: ../src/verbs.cpp:2286
 msgid "Unlin_k Clone"
-msgstr ""
+msgstr "נ_תק כפיל"
 
-#: ../src/verbs.cpp:2232
-msgid ""
-"Cut the selected clone's link to its original, turning it into a standalone "
-"object"
-msgstr ""
+#: ../src/verbs.cpp:2287
+msgid "Cut the selected clones' links to the originals, turning them into standalone objects"
+msgstr "חתוך את קישורי הכפילים הנבחרים אל המקור שלהם, ובכך יהפכו לפריטים בפני עצמם"
 
-#: ../src/verbs.cpp:2233
+#: ../src/verbs.cpp:2288
+msgid "Relink to Copied"
+msgstr "קשר מחדש אל המועתק"
+
+#: ../src/verbs.cpp:2289
+msgid "Relink the selected clones to the object currently on the clipboard"
+msgstr "קשר את הכפילים הנבחרים לפריט שנמצא כרגע בלוח הגזירים"
+
+#: ../src/verbs.cpp:2290
 msgid "Select _Original"
-msgstr ""
+msgstr "בחר את ה_מקור"
 
-#: ../src/verbs.cpp:2234
+#: ../src/verbs.cpp:2291
 msgid "Select the object to which the selected clone is linked"
-msgstr ""
+msgstr "בחר את הפריט שאליו הכפיל מקושר"
 
 #. TRANSLATORS: Convert selection to a line marker
-#: ../src/verbs.cpp:2236
+#: ../src/verbs.cpp:2293
 msgid "Objects to _Marker"
-msgstr ""
+msgstr "פריטים ל_סמנים"
 
-#: ../src/verbs.cpp:2237
+#: ../src/verbs.cpp:2294
 msgid "Convert selection to a line marker"
-msgstr ""
+msgstr "המר אתהבחירה לקו סימון"
 
 #. TRANSLATORS: Convert selection to a collection of guidelines
-#: ../src/verbs.cpp:2239
+#: ../src/verbs.cpp:2296
 msgid "Objects to Gu_ides"
-msgstr ""
+msgstr "פריטים לק_ווים מנחים"
 
-#: ../src/verbs.cpp:2240
-msgid ""
-"Convert selected objects to a collection of guidelines aligned with their "
-"edges"
-msgstr ""
+#: ../src/verbs.cpp:2297
+msgid "Convert selected objects to a collection of guidelines aligned with their edges"
+msgstr "המר את הפריטים הנבחרים לאוסף של קווים מנחים המיושרים לקצוותיהם"
 
 #. TRANSLATORS: Convert selection to a rectangle with tiled pattern fill
-#: ../src/verbs.cpp:2242
+#: ../src/verbs.cpp:2299
 msgid "Objects to Patter_n"
-msgstr ""
+msgstr "פריטים לתב_נית"
 
-#: ../src/verbs.cpp:2243
+#: ../src/verbs.cpp:2300
 msgid "Convert selection to a rectangle with tiled pattern fill"
-msgstr ""
+msgstr "המר את הבחירה למרובע בעל מילוי תבניתי מרוצף"
 
 #. TRANSLATORS: Extract objects from a tiled pattern fill
-#: ../src/verbs.cpp:2245
+#: ../src/verbs.cpp:2302
 msgid "Pattern to _Objects"
-msgstr ""
+msgstr "תבנית ל_פריטים"
 
-#: ../src/verbs.cpp:2246
+#: ../src/verbs.cpp:2303
 msgid "Extract objects from a tiled pattern fill"
-msgstr ""
+msgstr "חלץ פריטים ממילוי תבניתי מרוצף"
 
-#: ../src/verbs.cpp:2247
+#: ../src/verbs.cpp:2304
 msgid "Clea_r All"
-msgstr ""
+msgstr "נ_קה הכל"
 
-#: ../src/verbs.cpp:2248
+#: ../src/verbs.cpp:2305
 msgid "Delete all objects from document"
-msgstr "×\9e×\97ק ×\90ת ×\9b×\9c ×\94×\90×\95×\91×\99ק×\98×\99×\9d ×\9e×\9f המסמך"
+msgstr "×\9e×\97ק ×\90ת ×\9b×\9c ×\94פר×\99×\98×\99×\9d ×\9eהמסמך"
 
-#: ../src/verbs.cpp:2249
+#: ../src/verbs.cpp:2306
 msgid "Select Al_l"
 msgstr "בחר ה_כל"
 
-#: ../src/verbs.cpp:2250
+#: ../src/verbs.cpp:2307
 msgid "Select all objects or all nodes"
-msgstr ""
+msgstr "בחר את כל הפריטים או את כל המפרקים"
 
-#: ../src/verbs.cpp:2251
+#: ../src/verbs.cpp:2308
 msgid "Select All in All La_yers"
-msgstr ""
+msgstr "בחר הכל בכל ה_שכבות"
 
-#: ../src/verbs.cpp:2252
+#: ../src/verbs.cpp:2309
 msgid "Select all objects in all visible and unlocked layers"
-msgstr ""
+msgstr "בחר את כל הפריטים בכל השכבות הנראות והמשוחררות"
 
-#: ../src/verbs.cpp:2253
+#: ../src/verbs.cpp:2310
 msgid "In_vert Selection"
-msgstr ""
+msgstr "הפוך _בחירה"
 
-#: ../src/verbs.cpp:2254
+#: ../src/verbs.cpp:2311
 msgid "Invert selection (unselect what is selected and select everything else)"
-msgstr ""
+msgstr "הפוך את הבחירה (אל תבחר את מה שנבחר ובחר את כל השאר)"
 
-#: ../src/verbs.cpp:2255
+#: ../src/verbs.cpp:2312
 msgid "Invert in All Layers"
-msgstr ""
+msgstr "הפוך בכל השכבות"
 
-#: ../src/verbs.cpp:2256
+#: ../src/verbs.cpp:2313
 msgid "Invert selection in all visible and unlocked layers"
-msgstr ""
+msgstr "הפוך את הבחירה בכל השכבות הנראות והמשוחררות"
 
-#: ../src/verbs.cpp:2257
+#: ../src/verbs.cpp:2314
 msgid "Select Next"
-msgstr ""
+msgstr "בחר את הבא"
 
-#: ../src/verbs.cpp:2258
+#: ../src/verbs.cpp:2315
 msgid "Select next object or node"
-msgstr ""
+msgstr "בחר את הפריט או המפרק הבא"
 
-#: ../src/verbs.cpp:2259
+#: ../src/verbs.cpp:2316
 msgid "Select Previous"
-msgstr ""
+msgstr "בחר את הקודם"
 
-#: ../src/verbs.cpp:2260
+#: ../src/verbs.cpp:2317
 msgid "Select previous object or node"
-msgstr ""
+msgstr "בחר את הפריט או המפרק הקודם"
 
-#: ../src/verbs.cpp:2261
+#: ../src/verbs.cpp:2318
 msgid "D_eselect"
-msgstr ""
+msgstr "בטל ב_חירה"
 
-#: ../src/verbs.cpp:2262
+#: ../src/verbs.cpp:2319
 msgid "Deselect any selected objects or nodes"
-msgstr ""
+msgstr "בטל את בחירת המפרקים או הפריטים שנבחרו"
 
-#: ../src/verbs.cpp:2263
+#: ../src/verbs.cpp:2320
 msgid "_Guides around page"
-msgstr ""
+msgstr "_קווים מנחים מסביב לעמוד"
 
-#: ../src/verbs.cpp:2264
+#: ../src/verbs.cpp:2321
 msgid "Create four guides aligned with the page borders"
-msgstr ""
+msgstr "צור ארבעה קווים מנחים המיושרים עם גבולות העמוד"
 
-#: ../src/verbs.cpp:2265
+#: ../src/verbs.cpp:2322
 msgid "Next Path Effect Parameter"
-msgstr ""
+msgstr "פרמטר אפקט הנתיב הבא"
 
-#: ../src/verbs.cpp:2266
+#: ../src/verbs.cpp:2323
 msgid "Show next Path Effect parameter for editing"
-msgstr ""
+msgstr "הצג את פרמטר אפקט הנתיב הבא לעריכה"
 
 #. Selection
-#: ../src/verbs.cpp:2269
+#: ../src/verbs.cpp:2326
 msgid "Raise to _Top"
-msgstr ""
+msgstr "הגבה ל_עליון"
 
-#: ../src/verbs.cpp:2270
+#: ../src/verbs.cpp:2327
 msgid "Raise selection to top"
-msgstr ""
+msgstr "הגבה את הבחירה כך שתהיה עליונה"
 
-#: ../src/verbs.cpp:2271
+#: ../src/verbs.cpp:2328
 msgid "Lower to _Bottom"
-msgstr ""
+msgstr "הנמך ל_תחתית"
 
-#: ../src/verbs.cpp:2272
+#: ../src/verbs.cpp:2329
 msgid "Lower selection to bottom"
-msgstr ""
+msgstr "הנמך את הבחירה לתחתית"
 
-#: ../src/verbs.cpp:2273
+#: ../src/verbs.cpp:2330
 msgid "_Raise"
-msgstr ""
+msgstr "ה_גבה"
 
-#: ../src/verbs.cpp:2274
+#: ../src/verbs.cpp:2331
 msgid "Raise selection one step"
-msgstr ""
+msgstr "הגבה את הבחירה בצעד אחד"
 
-#: ../src/verbs.cpp:2275
+#: ../src/verbs.cpp:2332
 msgid "_Lower"
-msgstr ""
+msgstr "ה_נמך"
 
-#: ../src/verbs.cpp:2276
+#: ../src/verbs.cpp:2333
 msgid "Lower selection one step"
-msgstr ""
+msgstr "הנמך את הבחירה בצעד אחד"
 
-#: ../src/verbs.cpp:2277
+#: ../src/verbs.cpp:2334
 msgid "_Group"
-msgstr ""
+msgstr "_קבץ"
 
-#: ../src/verbs.cpp:2278
+#: ../src/verbs.cpp:2335
 msgid "Group selected objects"
-msgstr ""
+msgstr "קבץ את הפריטים הנבחרים"
 
-#: ../src/verbs.cpp:2280
+#: ../src/verbs.cpp:2337
 msgid "Ungroup selected groups"
-msgstr ""
+msgstr "פרק את הקבוצות הנבחרות"
 
-#: ../src/verbs.cpp:2282
+#: ../src/verbs.cpp:2339
 msgid "_Put on Path"
-msgstr ""
+msgstr "ה_צמד לנתיב"
 
-#: ../src/verbs.cpp:2284
+#: ../src/verbs.cpp:2341
 msgid "_Remove from Path"
-msgstr ""
+msgstr "ה_סר מנתיב"
 
-#: ../src/verbs.cpp:2286
+#: ../src/verbs.cpp:2343
 msgid "Remove Manual _Kerns"
-msgstr ""
+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:2289
+#: ../src/verbs.cpp:2346
 msgid "Remove all manual kerns and glyph rotations from a text object"
-msgstr ""
+msgstr "הסר את כל שינוי מרווחי האותיות הידני וסיבובי התווים מפריט הטקסט"
 
-#: ../src/verbs.cpp:2291
+#: ../src/verbs.cpp:2348
 msgid "_Union"
-msgstr ""
+msgstr "_איחוד"
 
-#: ../src/verbs.cpp:2292
+#: ../src/verbs.cpp:2349
 msgid "Create union of selected paths"
-msgstr ""
+msgstr "צור איחוד של הנתיבים הנבחרים"
 
-#: ../src/verbs.cpp:2293
+#: ../src/verbs.cpp:2350
 msgid "_Intersection"
-msgstr ""
+msgstr "_הצטלבות"
 
-#: ../src/verbs.cpp:2294
+#: ../src/verbs.cpp:2351
 msgid "Create intersection of selected paths"
-msgstr ""
+msgstr "צור את הצטלבות הנתיבים הנבחרים"
 
-#: ../src/verbs.cpp:2295
+#: ../src/verbs.cpp:2352
 msgid "_Difference"
-msgstr ""
+msgstr "ה_בדל"
 
-#: ../src/verbs.cpp:2296
+#: ../src/verbs.cpp:2353
 msgid "Create difference of selected paths (bottom minus top)"
-msgstr ""
+msgstr "צור את הבדל הנתיבים הנבחרים (תחתון פחות עליון)"
 
-#: ../src/verbs.cpp:2297
+#: ../src/verbs.cpp:2354
 msgid "E_xclusion"
-msgstr ""
+msgstr "אי ה_כללה"
 
-#: ../src/verbs.cpp:2298
-msgid ""
-"Create exclusive OR of selected paths (those parts that belong to only one "
-"path)"
-msgstr ""
+#: ../src/verbs.cpp:2355
+msgid "Create exclusive OR of selected paths (those parts that belong to only one path)"
+msgstr "צור \"או\" בלעדי של הנתיבים הנבחרים (החלקים השייכים לנתיב אחד בלבד)"
 
-#: ../src/verbs.cpp:2299
+#: ../src/verbs.cpp:2356
 msgid "Di_vision"
-msgstr ""
+msgstr "ח_לוקה"
 
-#: ../src/verbs.cpp:2300
+#: ../src/verbs.cpp:2357
 msgid "Cut the bottom path into pieces"
-msgstr ""
+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:2303
+#: ../src/verbs.cpp:2360
 msgid "Cut _Path"
-msgstr ""
+msgstr "חתוך _נתיב"
 
-#: ../src/verbs.cpp:2304
+#: ../src/verbs.cpp:2361
 msgid "Cut the bottom path's stroke into pieces, removing fill"
-msgstr ""
+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:2308
+#: ../src/verbs.cpp:2365
 msgid "Outs_et"
-msgstr ""
+msgstr "ה_רחב"
 
-#: ../src/verbs.cpp:2309
+#: ../src/verbs.cpp:2366
 msgid "Outset selected paths"
-msgstr ""
+msgstr "הרחב את הנתיבים הנבחרים"
 
-#: ../src/verbs.cpp:2311
+#: ../src/verbs.cpp:2368
 msgid "O_utset Path by 1 px"
-msgstr ""
+msgstr "הרחב את הנ_תיבים בפיקסל 1"
 
-#: ../src/verbs.cpp:2312
+#: ../src/verbs.cpp:2369
 msgid "Outset selected paths by 1 px"
-msgstr ""
+msgstr "הרחב את הנתיבים בפיקסל 1"
 
-#: ../src/verbs.cpp:2314
+#: ../src/verbs.cpp:2371
 msgid "O_utset Path by 10 px"
-msgstr ""
+msgstr "הרחב את הנתיבים ב־10 פי_קסלים"
 
-#: ../src/verbs.cpp:2315
+#: ../src/verbs.cpp:2372
 msgid "Outset selected paths by 10 px"
-msgstr ""
+msgstr "הרחב את הבחירה ב־10 פיקסלים"
 
 #. 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:2319
+#: ../src/verbs.cpp:2376
 msgid "I_nset"
-msgstr ""
+msgstr "_צמצם"
 
-#: ../src/verbs.cpp:2320
+#: ../src/verbs.cpp:2377
 msgid "Inset selected paths"
-msgstr ""
+msgstr "צמצם את הנתיבים הנבחרים"
 
-#: ../src/verbs.cpp:2322
+#: ../src/verbs.cpp:2379
 msgid "I_nset Path by 1 px"
-msgstr ""
+msgstr "_צמצם בפיקסל 1"
 
-#: ../src/verbs.cpp:2323
+#: ../src/verbs.cpp:2380
 msgid "Inset selected paths by 1 px"
-msgstr ""
+msgstr "צמצם את הנתיבים הנבחרים בפיקסל 1"
 
-#: ../src/verbs.cpp:2325
+#: ../src/verbs.cpp:2382
 msgid "I_nset Path by 10 px"
-msgstr ""
+msgstr "_צמצם את הנתיב ב־10 פיקסלים"
 
-#: ../src/verbs.cpp:2326
+#: ../src/verbs.cpp:2383
 msgid "Inset selected paths by 10 px"
-msgstr ""
+msgstr "צמצם את הנתיבים הנבחרים ב־10 פיקסלים"
 
-#: ../src/verbs.cpp:2328
+#: ../src/verbs.cpp:2385
 msgid "D_ynamic Offset"
-msgstr ""
+msgstr "קיזוז _דינאמי"
 
-#: ../src/verbs.cpp:2328
+#: ../src/verbs.cpp:2385
 msgid "Create a dynamic offset object"
-msgstr ""
+msgstr "צור פריט בעל קיזוז דינאמי"
 
-#: ../src/verbs.cpp:2330
+#: ../src/verbs.cpp:2387
 msgid "_Linked Offset"
-msgstr ""
+msgstr "קיזוז מ_קושר"
 
-#: ../src/verbs.cpp:2331
+#: ../src/verbs.cpp:2388
 msgid "Create a dynamic offset object linked to the original path"
-msgstr ""
+msgstr "צור פריט קיזוז דנאמי המקושר לנתיב המקורי"
 
-#: ../src/verbs.cpp:2333
+#: ../src/verbs.cpp:2390
 msgid "_Stroke to Path"
-msgstr ""
+msgstr "קו מ_תאר לנתיב"
 
-#: ../src/verbs.cpp:2334
+#: ../src/verbs.cpp:2391
 msgid "Convert selected object's stroke to paths"
-msgstr ""
+msgstr "המר את קווי המתאר של הפריטים הנבחרים לנתיבים"
 
-#: ../src/verbs.cpp:2335
+#: ../src/verbs.cpp:2392
 msgid "Si_mplify"
-msgstr ""
+msgstr "הפ_שט"
 
-#: ../src/verbs.cpp:2336
+#: ../src/verbs.cpp:2393
 msgid "Simplify selected paths (remove extra nodes)"
-msgstr ""
+msgstr "פשט את הנתיבים הנבחרים (הסר מפרקים נוספים)"
 
-#: ../src/verbs.cpp:2337
+#: ../src/verbs.cpp:2394
 msgid "_Reverse"
-msgstr ""
+msgstr "_סדר הפוך"
 
-#: ../src/verbs.cpp:2338
+#: ../src/verbs.cpp:2395
 msgid "Reverse the direction of selected paths (useful for flipping markers)"
-msgstr ""
+msgstr "הפוך את הכיוון של הנתיבים הנבחרים (שימושי להפיכת סמנים)"
 
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2340
+#: ../src/verbs.cpp:2397
 msgid "_Trace Bitmap..."
-msgstr ""
+msgstr "_עקוב אחר מפת סיביות..."
 
-#: ../src/verbs.cpp:2341
+#: ../src/verbs.cpp:2398
 msgid "Create one or more paths from a bitmap by tracing it"
-msgstr ""
+msgstr "צור נתיב אחד או יותר ממפת סיביות על ידי מעקב אחריו"
 
-#: ../src/verbs.cpp:2342
+#: ../src/verbs.cpp:2399
 msgid "_Make a Bitmap Copy"
-msgstr ""
+msgstr "_צור עותק מפת סיביות"
 
-#: ../src/verbs.cpp:2343
+#: ../src/verbs.cpp:2400
 msgid "Export selection to a bitmap and insert it into document"
-msgstr ""
+msgstr "ייצא את הבחירה למפת סיביות והכנס אותה לתוך מסמך"
 
-#: ../src/verbs.cpp:2344
+#: ../src/verbs.cpp:2401
 msgid "_Combine"
-msgstr ""
+msgstr "_שלב"
 
-#: ../src/verbs.cpp:2345
+#: ../src/verbs.cpp:2402
 msgid "Combine several paths into one"
-msgstr ""
+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:2348
+#: ../src/verbs.cpp:2405
 msgid "Break _Apart"
-msgstr ""
+msgstr "_פרק"
 
-#: ../src/verbs.cpp:2349
+#: ../src/verbs.cpp:2406
 msgid "Break selected paths into subpaths"
-msgstr ""
+msgstr "הפרד את הנתיבים הנבחרים לתת נתיבים"
 
-#: ../src/verbs.cpp:2350
+#: ../src/verbs.cpp:2407
 msgid "Rows and Columns..."
-msgstr ""
+msgstr "טורים ועמודות..."
 
-#: ../src/verbs.cpp:2351
+#: ../src/verbs.cpp:2408
 msgid "Arrange selected objects in a table"
-msgstr ""
+msgstr "סדר את האוייקטים הנבחרים בטבלה"
 
 #. Layer
-#: ../src/verbs.cpp:2353
+#: ../src/verbs.cpp:2410
 msgid "_Add Layer..."
-msgstr ""
+msgstr "_הוסף שכבה..."
 
-#: ../src/verbs.cpp:2354
+#: ../src/verbs.cpp:2411
 msgid "Create a new layer"
-msgstr ""
+msgstr "צור שכבה חדשה"
 
-#: ../src/verbs.cpp:2355
+#: ../src/verbs.cpp:2412
 msgid "Re_name Layer..."
-msgstr ""
+msgstr "ש_נה את שם השכבה..."
 
-#: ../src/verbs.cpp:2356
+#: ../src/verbs.cpp:2413
 msgid "Rename the current layer"
-msgstr ""
+msgstr "שנה את שם השכבה הנוכחית"
 
-#: ../src/verbs.cpp:2357
+#: ../src/verbs.cpp:2414
 msgid "Switch to Layer Abov_e"
-msgstr ""
+msgstr "עבור לשכבה מלמ_עלה"
 
-#: ../src/verbs.cpp:2358
+#: ../src/verbs.cpp:2415
 msgid "Switch to the layer above the current"
-msgstr ""
+msgstr "עבור לשכבה שמעל לנוכחית"
 
-#: ../src/verbs.cpp:2359
+#: ../src/verbs.cpp:2416
 msgid "Switch to Layer Belo_w"
-msgstr ""
+msgstr "עבור לשכבה מלמ_טה"
 
-#: ../src/verbs.cpp:2360
+#: ../src/verbs.cpp:2417
 msgid "Switch to the layer below the current"
-msgstr ""
+msgstr "עבור לשכבה שמעל לנוכחית"
 
-#: ../src/verbs.cpp:2361
+#: ../src/verbs.cpp:2418
 msgid "Move Selection to Layer Abo_ve"
-msgstr ""
+msgstr "העבר את הבחירה לשכבה שמ_על"
 
-#: ../src/verbs.cpp:2362
+#: ../src/verbs.cpp:2419
 msgid "Move selection to the layer above the current"
-msgstr ""
+msgstr "העבר את הבחירה לשכבה שמעל לנוכחית"
 
-#: ../src/verbs.cpp:2363
+#: ../src/verbs.cpp:2420
 msgid "Move Selection to Layer Bel_ow"
-msgstr ""
+msgstr "העבר את הבחירה לשכבה שמת_חת"
 
-#: ../src/verbs.cpp:2364
+#: ../src/verbs.cpp:2421
 msgid "Move selection to the layer below the current"
-msgstr ""
+msgstr "העבר את הבחירה לשכבה שמתחת לנוכחית"
 
-#: ../src/verbs.cpp:2365
+#: ../src/verbs.cpp:2422
 msgid "Layer to _Top"
-msgstr ""
+msgstr "הפוך שכבה ל_עליונה"
 
-#: ../src/verbs.cpp:2366
+#: ../src/verbs.cpp:2423
 msgid "Raise the current layer to the top"
-msgstr ""
+msgstr "הפוך את השכבה הנוכחית לעליונה"
 
-#: ../src/verbs.cpp:2367
+#: ../src/verbs.cpp:2424
 msgid "Layer to _Bottom"
-msgstr ""
+msgstr "שכבה ל_תחתית"
 
-#: ../src/verbs.cpp:2368
+#: ../src/verbs.cpp:2425
 msgid "Lower the current layer to the bottom"
-msgstr ""
+msgstr "הורד את השכבה הנוכחית לתחתית"
 
-#: ../src/verbs.cpp:2369
+#: ../src/verbs.cpp:2426
 msgid "_Raise Layer"
-msgstr ""
+msgstr "ה_עלה את השכבה"
 
-#: ../src/verbs.cpp:2370
+#: ../src/verbs.cpp:2427
 msgid "Raise the current layer"
-msgstr ""
+msgstr "העלה את השכבה הנוכחית"
 
-#: ../src/verbs.cpp:2371
+#: ../src/verbs.cpp:2428
 msgid "_Lower Layer"
-msgstr ""
+msgstr "ה_ורד את השכבה"
 
-#: ../src/verbs.cpp:2372
+#: ../src/verbs.cpp:2429
 msgid "Lower the current layer"
-msgstr ""
+msgstr "הורד את השכבה הנוכחית"
+
+#: ../src/verbs.cpp:2430
+msgid "Duplicate Current Layer..."
+msgstr "שכפל את השכבה הנוכחית..."
+
+#: ../src/verbs.cpp:2431
+msgid "Duplicate an existing layer"
+msgstr "שכפל שכבה נוכחית"
 
-#: ../src/verbs.cpp:2373
+#: ../src/verbs.cpp:2432
 msgid "_Delete Current Layer"
-msgstr ""
+msgstr "_מחק את השכבה הנוכחית"
 
-#: ../src/verbs.cpp:2374
+#: ../src/verbs.cpp:2433
 msgid "Delete the current layer"
-msgstr ""
+msgstr "מחק את השכבה הנוכחית"
+
+#: ../src/verbs.cpp:2434
+msgid "_Show/hide other layers"
+msgstr "ה_צג/הסתר את השכבות האחרות"
+
+#: ../src/verbs.cpp:2435
+msgid "Solo the current layer"
+msgstr "בודד את השכבה הנוכחית"
 
 #. Object
-#: ../src/verbs.cpp:2377
+#: ../src/verbs.cpp:2438
 msgid "Rotate _90&#176; CW"
-msgstr ""
+msgstr "הטה ב־_90&#176; עכ\"ש"
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2380
+#: ../src/verbs.cpp:2441
 msgid "Rotate selection 90° clockwise"
-msgstr ""
+msgstr "הטה את הבחירה ב־90° עם כיוון השעון"
 
-#: ../src/verbs.cpp:2381
+#: ../src/verbs.cpp:2442
 msgid "Rotate 9_0&#176; CCW"
-msgstr ""
+msgstr "הטה ב־9_0&#176; נכ\"ש"
 
 #. This is shared between tooltips and statusbar, so they
 #. must use UTF-8, not HTML entities for special characters.
-#: ../src/verbs.cpp:2384
+#: ../src/verbs.cpp:2445
 msgid "Rotate selection 90° counter-clockwise"
-msgstr ""
+msgstr "הטה אתר הבחירה ב־90° נגד כיוון השעון"
 
-#: ../src/verbs.cpp:2385
+#: ../src/verbs.cpp:2446
 msgid "Remove _Transformations"
-msgstr ""
+msgstr "הסר _שינויי צורה"
 
-#: ../src/verbs.cpp:2386
+#: ../src/verbs.cpp:2447
 msgid "Remove transformations from object"
-msgstr ""
+msgstr "הסר את שינויי הצורה מהפריט"
 
-#: ../src/verbs.cpp:2387
+#: ../src/verbs.cpp:2448
 msgid "_Object to Path"
-msgstr ""
+msgstr "_פריט לנתיב"
 
-#: ../src/verbs.cpp:2388
+#: ../src/verbs.cpp:2449
 msgid "Convert selected object to path"
-msgstr ""
+msgstr "המר את הפריט הנבחר לנתיב"
 
-#: ../src/verbs.cpp:2389
+#: ../src/verbs.cpp:2450
 msgid "_Flow into Frame"
-msgstr ""
+msgstr "_הצף לתוך המסגרת"
 
-#: ../src/verbs.cpp:2390
-msgid ""
-"Put text into a frame (path or shape), creating a flowed text linked to the "
-"frame object"
-msgstr ""
+#: ../src/verbs.cpp:2451
+msgid "Put text into a frame (path or shape), creating a flowed text linked to the frame object"
+msgstr "שים טקסט בתוך המסגרת (נתיב או צורה), ובכך יווצר טקסט צף המקושר לפריט מסגרת"
 
-#: ../src/verbs.cpp:2391
+#: ../src/verbs.cpp:2452
 msgid "_Unflow"
-msgstr ""
+msgstr "_טיבוע"
 
-#: ../src/verbs.cpp:2392
+#: ../src/verbs.cpp:2453
 msgid "Remove text from frame (creates a single-line text object)"
-msgstr ""
+msgstr "הסר טקסט מהמסגרת (יוצר פריט טקסט בשורה אחת)"
 
-#: ../src/verbs.cpp:2393
+#: ../src/verbs.cpp:2454
 msgid "_Convert to Text"
-msgstr ""
+msgstr "ה_מר לטקסט"
 
-#: ../src/verbs.cpp:2394
+#: ../src/verbs.cpp:2455
 msgid "Convert flowed text to regular text object (preserves appearance)"
-msgstr ""
+msgstr "המר טקסט צף לפריט טקסט רגיל (שומר על חזותו)"
 
-#: ../src/verbs.cpp:2396
+#: ../src/verbs.cpp:2457
 msgid "Flip _Horizontal"
-msgstr ""
+msgstr "הפוך או_פקית"
 
-#: ../src/verbs.cpp:2396
+#: ../src/verbs.cpp:2457
 msgid "Flip selected objects horizontally"
-msgstr ""
+msgstr "הפוך את הפריטים הנבחרים אופקית"
 
-#: ../src/verbs.cpp:2399
+#: ../src/verbs.cpp:2460
 msgid "Flip _Vertical"
-msgstr ""
+msgstr "הפוך א_נכית"
 
-#: ../src/verbs.cpp:2399
+#: ../src/verbs.cpp:2460
 msgid "Flip selected objects vertically"
-msgstr ""
+msgstr "הפוך את הפריטים הנבחרים אנכית"
 
-#: ../src/verbs.cpp:2402
+#: ../src/verbs.cpp:2463
 msgid "Apply mask to selection (using the topmost object as mask)"
-msgstr ""
+msgstr "החל מסכה על הבחירה (על ידי שימוש בפריט העליון ביותר כמסכה)"
 
-#: ../src/verbs.cpp:2404
+#: ../src/verbs.cpp:2465
 msgid "Edit mask"
-msgstr ""
+msgstr "ערוך מסכה"
 
-#: ../src/verbs.cpp:2405 ../src/verbs.cpp:2411
+#: ../src/verbs.cpp:2466
+#: ../src/verbs.cpp:2472
 msgid "_Release"
-msgstr ""
+msgstr "_שחרר"
 
-#: ../src/verbs.cpp:2406
+#: ../src/verbs.cpp:2467
 msgid "Remove mask from selection"
-msgstr ""
+msgstr "שחרר את המסכה מהבחירה"
 
-#: ../src/verbs.cpp:2408
-msgid ""
-"Apply clipping path to selection (using the topmost object as clipping path)"
-msgstr ""
+#: ../src/verbs.cpp:2469
+msgid "Apply clipping path to selection (using the topmost object as clipping path)"
+msgstr "החל נתיב חיתוך על הבחירה (על ידי שימוש בפריט העליון ביותר כנתיב חיתוך)"
 
-#: ../src/verbs.cpp:2410 ../src/widgets/toolbox.cpp:1222
+#: ../src/verbs.cpp:2471
+#: ../src/widgets/toolbox.cpp:1429
 msgid "Edit clipping path"
-msgstr ""
+msgstr "ערוך את נתיב הקליפ"
 
-#: ../src/verbs.cpp:2412
+#: ../src/verbs.cpp:2473
 msgid "Remove clipping path from selection"
-msgstr ""
+msgstr "הסר נתיב חיתוך מהבחירה"
 
 #. Tools
-#: ../src/verbs.cpp:2415
+#: ../src/verbs.cpp:2476
 msgid "Select"
-msgstr ""
+msgstr "בחר"
 
-#: ../src/verbs.cpp:2416
+#: ../src/verbs.cpp:2477
 msgid "Select and transform objects"
-msgstr ""
+msgstr "בחר ושנה את צורתם של פריטים"
 
-#: ../src/verbs.cpp:2417
+#: ../src/verbs.cpp:2478
 msgid "Node Edit"
-msgstr ""
+msgstr "עריכת נתיבים"
 
-#: ../src/verbs.cpp:2418
+#: ../src/verbs.cpp:2479
 msgid "Edit paths by nodes"
-msgstr ""
+msgstr "ערוך נתיבים לפי מפרקים"
 
-#: ../src/verbs.cpp:2420
+#: ../src/verbs.cpp:2481
 msgid "Tweak objects by sculpting or painting"
-msgstr ""
+msgstr "וסת פריטים על ידי גילוף או ציור"
 
-#: ../src/verbs.cpp:2422
+#: ../src/verbs.cpp:2483
 msgid "Create rectangles and squares"
-msgstr ""
+msgstr "צור מרובעים וריבועים"
 
-#: ../src/verbs.cpp:2424
+#: ../src/verbs.cpp:2485
 msgid "Create 3D boxes"
-msgstr ""
+msgstr "צור תיבות תלת מימדיות"
 
-#: ../src/verbs.cpp:2426
+#: ../src/verbs.cpp:2487
 msgid "Create circles, ellipses, and arcs"
-msgstr ""
+msgstr "צור עיגולים, אליפסות וקשתות"
 
-#: ../src/verbs.cpp:2428
+#: ../src/verbs.cpp:2489
 msgid "Create stars and polygons"
-msgstr ""
+msgstr "צור כוכבים ומצולעים"
 
-#: ../src/verbs.cpp:2430
+#: ../src/verbs.cpp:2491
 msgid "Create spirals"
-msgstr ""
+msgstr "צור ספירלות"
 
-#: ../src/verbs.cpp:2432
+#: ../src/verbs.cpp:2493
 msgid "Draw freehand lines"
-msgstr ""
+msgstr "צייר קווים ביד חופשית"
 
-#: ../src/verbs.cpp:2434
+#: ../src/verbs.cpp:2495
 msgid "Draw Bezier curves and straight lines"
-msgstr ""
+msgstr "צייר עקומות בזייה וקווים ישרים"
 
-#: ../src/verbs.cpp:2436
+#: ../src/verbs.cpp:2497
 msgid "Draw calligraphic or brush strokes"
-msgstr ""
+msgstr "צייר קווי מתאר קליגרפיים או כמברשת"
 
-#: ../src/verbs.cpp:2438
+#: ../src/verbs.cpp:2499
 msgid "Create and edit text objects"
-msgstr ""
+msgstr "צור וערוך פריטי טקסט"
 
-#: ../src/verbs.cpp:2440
+#: ../src/verbs.cpp:2501
 msgid "Create and edit gradients"
-msgstr ""
+msgstr "צור וערוך מדרגים"
 
-#: ../src/verbs.cpp:2442
+#: ../src/verbs.cpp:2503
 msgid "Zoom in or out"
-msgstr ""
+msgstr "התקרב או התרחק"
 
-#: ../src/verbs.cpp:2444
+#: ../src/verbs.cpp:2505
 msgid "Pick colors from image"
-msgstr ""
+msgstr "בחר צבעים מהתמונה"
 
-#: ../src/verbs.cpp:2446
+#: ../src/verbs.cpp:2507
 msgid "Create diagram connectors"
-msgstr ""
+msgstr "צור מחברי תרשים"
 
-#: ../src/verbs.cpp:2448
+#: ../src/verbs.cpp:2509
 msgid "Fill bounded areas"
-msgstr ""
+msgstr "מלא איזורים תחומים"
 
-#: ../src/verbs.cpp:2449
+#: ../src/verbs.cpp:2510
 msgid "LPE Edit"
-msgstr ""
+msgstr "ערוך LPE"
 
-#: ../src/verbs.cpp:2450
+#: ../src/verbs.cpp:2511
 msgid "Edit Live Path Effect parameters"
-msgstr ""
+msgstr "ערוך את הפרמטרים של האפקט החי"
 
-#: ../src/verbs.cpp:2452
+#: ../src/verbs.cpp:2513
 msgid "Erase existing paths"
-msgstr ""
+msgstr "מחק נתיבים קיימים"
+
+#: ../src/verbs.cpp:2515
+msgid "Do geometric constructions"
+msgstr "בצע בניות גאומטריות"
 
 #. Tool prefs
-#: ../src/verbs.cpp:2454
+#: ../src/verbs.cpp:2517
 msgid "Selector Preferences"
-msgstr ""
+msgstr "העדפות כלי הבחירה"
 
-#: ../src/verbs.cpp:2455
+#: ../src/verbs.cpp:2518
 msgid "Open Preferences for the Selector tool"
-msgstr ""
+msgstr "פתח את העדפות כלי הבחירה"
 
-#: ../src/verbs.cpp:2456
+#: ../src/verbs.cpp:2519
 msgid "Node Tool Preferences"
-msgstr ""
+msgstr "העדפות כלי המפרק"
 
-#: ../src/verbs.cpp:2457
+#: ../src/verbs.cpp:2520
 msgid "Open Preferences for the Node tool"
-msgstr ""
+msgstr "פתח העדפות עבור כלי המפרק"
 
-#: ../src/verbs.cpp:2458
+#: ../src/verbs.cpp:2521
 msgid "Tweak Tool Preferences"
-msgstr ""
+msgstr "העדפות כלי הויסות"
 
-#: ../src/verbs.cpp:2459
+#: ../src/verbs.cpp:2522
 msgid "Open Preferences for the Tweak tool"
-msgstr ""
+msgstr "פתח העדפות עבור כלי הויסות"
 
-#: ../src/verbs.cpp:2460
+#: ../src/verbs.cpp:2523
 msgid "Rectangle Preferences"
-msgstr ""
+msgstr "העדפות כלי המרובע"
 
-#: ../src/verbs.cpp:2461
+#: ../src/verbs.cpp:2524
 msgid "Open Preferences for the Rectangle tool"
-msgstr ""
+msgstr "פתח העדפות עבור כלי המרובע"
 
-#: ../src/verbs.cpp:2462
+#: ../src/verbs.cpp:2525
 msgid "3D Box Preferences"
-msgstr ""
+msgstr "העדפות תיבה תלת מימדית"
 
-#: ../src/verbs.cpp:2463
+#: ../src/verbs.cpp:2526
 msgid "Open Preferences for the 3D Box tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי תיבות התלת מימד"
 
-#: ../src/verbs.cpp:2464
+#: ../src/verbs.cpp:2527
 msgid "Ellipse Preferences"
-msgstr ""
+msgstr "העדפות כלי האליפסה"
 
-#: ../src/verbs.cpp:2465
+#: ../src/verbs.cpp:2528
 msgid "Open Preferences for the Ellipse tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי האליפסות"
 
-#: ../src/verbs.cpp:2466
+#: ../src/verbs.cpp:2529
 msgid "Star Preferences"
-msgstr ""
+msgstr "העדפות כלי הכוכב"
 
-#: ../src/verbs.cpp:2467
+#: ../src/verbs.cpp:2530
 msgid "Open Preferences for the Star tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי הכוכבים"
 
-#: ../src/verbs.cpp:2468
+#: ../src/verbs.cpp:2531
 msgid "Spiral Preferences"
-msgstr ""
+msgstr "העדפות כלי הספירלה"
 
-#: ../src/verbs.cpp:2469
+#: ../src/verbs.cpp:2532
 msgid "Open Preferences for the Spiral tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי הספירלות"
 
-#: ../src/verbs.cpp:2470
+#: ../src/verbs.cpp:2533
 msgid "Pencil Preferences"
-msgstr ""
+msgstr "העדפות כלי העפרון"
 
-#: ../src/verbs.cpp:2471
+#: ../src/verbs.cpp:2534
 msgid "Open Preferences for the Pencil tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי הציור עפרון"
 
-#: ../src/verbs.cpp:2472
+#: ../src/verbs.cpp:2535
 msgid "Pen Preferences"
-msgstr ""
+msgstr "העדפות כלי העט"
 
-#: ../src/verbs.cpp:2473
+#: ../src/verbs.cpp:2536
 msgid "Open Preferences for the Pen tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי הציור עט"
 
-#: ../src/verbs.cpp:2474
+#: ../src/verbs.cpp:2537
 msgid "Calligraphic Preferences"
-msgstr ""
+msgstr "העדפות כלי הקליגרפיה"
 
-#: ../src/verbs.cpp:2475
+#: ../src/verbs.cpp:2538
 msgid "Open Preferences for the Calligraphy tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי הקליגרפיה"
 
-#: ../src/verbs.cpp:2476
+#: ../src/verbs.cpp:2539
 msgid "Text Preferences"
-msgstr ""
+msgstr "העדפות כלי הטקסט"
 
-#: ../src/verbs.cpp:2477
+#: ../src/verbs.cpp:2540
 msgid "Open Preferences for the Text tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי הטקסט"
 
-#: ../src/verbs.cpp:2478
+#: ../src/verbs.cpp:2541
 msgid "Gradient Preferences"
-msgstr ""
+msgstr "העדפות כלי המדרג"
 
-#: ../src/verbs.cpp:2479
+#: ../src/verbs.cpp:2542
 msgid "Open Preferences for the Gradient tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי המדרגים"
 
-#: ../src/verbs.cpp:2480
+#: ../src/verbs.cpp:2543
 msgid "Zoom Preferences"
-msgstr ""
+msgstr "העדפות כלי התקריב"
 
-#: ../src/verbs.cpp:2481
+#: ../src/verbs.cpp:2544
 msgid "Open Preferences for the Zoom tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי התקריבים"
 
-#: ../src/verbs.cpp:2482
+#: ../src/verbs.cpp:2545
 msgid "Dropper Preferences"
-msgstr ""
+msgstr "העדפות כלי הטפטפת"
 
-#: ../src/verbs.cpp:2483
+#: ../src/verbs.cpp:2546
 msgid "Open Preferences for the Dropper tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי הטפטפת"
 
-#: ../src/verbs.cpp:2484
+#: ../src/verbs.cpp:2547
 msgid "Connector Preferences"
-msgstr ""
+msgstr "העדפות כלי המחבר"
 
-#: ../src/verbs.cpp:2485
+#: ../src/verbs.cpp:2548
 msgid "Open Preferences for the Connector tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי המחברים"
 
-#: ../src/verbs.cpp:2486
+#: ../src/verbs.cpp:2549
 msgid "Paint Bucket Preferences"
-msgstr ""
+msgstr "העדפות דלי הצבע"
 
-#: ../src/verbs.cpp:2487
+#: ../src/verbs.cpp:2550
 msgid "Open Preferences for the Paint Bucket tool"
-msgstr ""
+msgstr "פתח את ההעדפות עבור כלי דלי הצבע"
 
-#: ../src/verbs.cpp:2488
+#: ../src/verbs.cpp:2551
 msgid "Eraser Preferences"
-msgstr ""
+msgstr "העדפות המחק"
 
-#: ../src/verbs.cpp:2489
+#: ../src/verbs.cpp:2552
 msgid "Open Preferences for the Eraser tool"
-msgstr ""
+msgstr "פתח את חלון ההעדפות עבור כלי המחיקה"
+
+#: ../src/verbs.cpp:2553
+msgid "LPE Tool Preferences"
+msgstr "העדפות כלי אפקטי הנתיב החיים"
+
+#: ../src/verbs.cpp:2554
+msgid "Open Preferences for the LPETool tool"
+msgstr "פתח את ההעדפות עבור כלי אפקטי הנתיב החיים"
 
 #. Zoom/View
-#: ../src/verbs.cpp:2492
+#: ../src/verbs.cpp:2557
 msgid "Zoom In"
-msgstr ""
+msgstr "התקרב"
 
-#: ../src/verbs.cpp:2492
+#: ../src/verbs.cpp:2557
 msgid "Zoom in"
-msgstr ""
+msgstr "התקרב"
 
-#: ../src/verbs.cpp:2493
+#: ../src/verbs.cpp:2558
 msgid "Zoom Out"
-msgstr ""
+msgstr "התרחק"
 
-#: ../src/verbs.cpp:2493
+#: ../src/verbs.cpp:2558
 msgid "Zoom out"
-msgstr ""
+msgstr "התרחק"
 
-#: ../src/verbs.cpp:2494
+#: ../src/verbs.cpp:2559
 msgid "_Rulers"
-msgstr ""
+msgstr "_סרגלים"
 
-#: ../src/verbs.cpp:2494
+#: ../src/verbs.cpp:2559
 msgid "Show or hide the canvas rulers"
-msgstr ""
+msgstr "הצג או הסתר את סרגלי משטח הציור"
 
-#: ../src/verbs.cpp:2495
+#: ../src/verbs.cpp:2560
 msgid "Scroll_bars"
-msgstr ""
+msgstr "סרגלי _גלילה"
 
-#: ../src/verbs.cpp:2495
+#: ../src/verbs.cpp:2560
 msgid "Show or hide the canvas scrollbars"
-msgstr ""
+msgstr "הצג או הסתר את סרגלי הגלילה של משטח הציור"
 
-#: ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2561
 msgid "_Grid"
-msgstr ""
+msgstr "_רשת"
 
-#: ../src/verbs.cpp:2496
+#: ../src/verbs.cpp:2561
 msgid "Show or hide the grid"
-msgstr ""
+msgstr "מציג או מסתיר את הרשת"
 
-#: ../src/verbs.cpp:2497
+#: ../src/verbs.cpp:2562
 msgid "G_uides"
-msgstr ""
+msgstr "_קווים מנחים"
 
-#: ../src/verbs.cpp:2497
+#: ../src/verbs.cpp:2562
 msgid "Show or hide guides (drag from a ruler to create a guide)"
-msgstr ""
+msgstr "הצג או הסתר את הקווים המנחים (גרור מסרגל כדי ליצור קו מנחה)"
 
-#: ../src/verbs.cpp:2499
+#: ../src/verbs.cpp:2564
 msgid "Nex_t Zoom"
-msgstr ""
+msgstr "התקריב ה_בא"
 
-#: ../src/verbs.cpp:2499
+#: ../src/verbs.cpp:2564
 msgid "Next zoom (from the history of zooms)"
-msgstr ""
+msgstr "התקריב הבא (מהיסטוריית התקריבים)"
 
-#: ../src/verbs.cpp:2501
+#: ../src/verbs.cpp:2566
 msgid "Pre_vious Zoom"
-msgstr ""
+msgstr "התקריב ה_קודם"
 
-#: ../src/verbs.cpp:2501
+#: ../src/verbs.cpp:2566
 msgid "Previous zoom (from the history of zooms)"
-msgstr ""
+msgstr "תקריב קודם (מהיסטוריית התקריבים)"
 
-#: ../src/verbs.cpp:2503
+#: ../src/verbs.cpp:2568
 msgid "Zoom 1:_1"
-msgstr ""
+msgstr "תקריב 1:_1"
 
-#: ../src/verbs.cpp:2503
+#: ../src/verbs.cpp:2568
 msgid "Zoom to 1:1"
-msgstr ""
+msgstr "תקריב ליחס 1:1"
 
-#: ../src/verbs.cpp:2505
+#: ../src/verbs.cpp:2570
 msgid "Zoom 1:_2"
-msgstr ""
+msgstr "תקריב 1:_2"
 
-#: ../src/verbs.cpp:2505
+#: ../src/verbs.cpp:2570
 msgid "Zoom to 1:2"
-msgstr ""
+msgstr "תקריב ליחס 1:2"
 
-#: ../src/verbs.cpp:2507
+#: ../src/verbs.cpp:2572
 msgid "_Zoom 2:1"
-msgstr ""
+msgstr "_תקריב 2:1"
 
-#: ../src/verbs.cpp:2507
+#: ../src/verbs.cpp:2572
 msgid "Zoom to 2:1"
-msgstr ""
+msgstr "תקריב ליחס 2:1"
 
-#: ../src/verbs.cpp:2510
+#: ../src/verbs.cpp:2575
 msgid "_Fullscreen"
-msgstr ""
+msgstr "_מסך מלא"
 
-#: ../src/verbs.cpp:2510
+#: ../src/verbs.cpp:2575
 msgid "Stretch this document window to full screen"
-msgstr ""
+msgstr "מתח את חלון מסמך זה למלוא גודל המסך"
 
-#: ../src/verbs.cpp:2513
+#: ../src/verbs.cpp:2578
+msgid "Toggle _Focus Mode"
+msgstr "ה_חלף את מצב המיקוד"
+
+#: ../src/verbs.cpp:2578
+msgid "Remove excess toolbars to focus on drawing"
+msgstr "הסר סרגלי כלים מיותרים כדי להתמקד על הציור"
+
+#: ../src/verbs.cpp:2580
 msgid "Duplic_ate Window"
-msgstr ""
+msgstr "שכפל _חלון"
 
-#: ../src/verbs.cpp:2513
+#: ../src/verbs.cpp:2580
 msgid "Open a new window with the same document"
-msgstr ""
+msgstr "פתח חלון חדש עם המסמך הנוכחי"
 
-#: ../src/verbs.cpp:2515
+#: ../src/verbs.cpp:2582
 msgid "_New View Preview"
-msgstr ""
+msgstr "תצוגה מקדימה _מתחדשת"
 
-#: ../src/verbs.cpp:2516
+#: ../src/verbs.cpp:2583
 msgid "New View Preview"
-msgstr ""
+msgstr "תצוגה מקדימה מתחדשת"
 
 #. "view_new_preview"
-#: ../src/verbs.cpp:2518
+#: ../src/verbs.cpp:2585
 msgid "_Normal"
-msgstr ""
+msgstr "_רגיל"
 
-#: ../src/verbs.cpp:2519
+#: ../src/verbs.cpp:2586
 msgid "Switch to normal display mode"
-msgstr ""
+msgstr "העבר למצב תצוגה רגיל"
 
-#: ../src/verbs.cpp:2520
-#, fuzzy
+#: ../src/verbs.cpp:2587
 msgid "No _Filters"
-msgstr "ק×\95×\91×¥"
+msgstr "×\90×\99×\9f _×\9eסננ×\99×\9d"
 
-#: ../src/verbs.cpp:2521
+#: ../src/verbs.cpp:2588
 msgid "Switch to normal display without filters"
-msgstr ""
+msgstr "העבר למצב תצוגה רגיל ללא מסננים"
 
-#: ../src/verbs.cpp:2522
+#: ../src/verbs.cpp:2589
 msgid "_Outline"
-msgstr ""
+msgstr "ק_ו חיצוני"
 
-#: ../src/verbs.cpp:2523
+#: ../src/verbs.cpp:2590
 msgid "Switch to outline (wireframe) display mode"
-msgstr ""
+msgstr "עבור למצב תצוגה של קווים חיצוניים (קווי המתאר)"
 
-#: ../src/verbs.cpp:2524
+#: ../src/verbs.cpp:2591
 msgid "_Toggle"
-msgstr ""
+msgstr "_החלפה"
 
-#: ../src/verbs.cpp:2525
+#: ../src/verbs.cpp:2592
 msgid "Toggle between normal and outline display modes"
-msgstr ""
+msgstr "החלף בין מצב התצוגה הרגיל לבין תצוגת קווי החוץ"
 
-#: ../src/verbs.cpp:2527
+#: ../src/verbs.cpp:2594
 msgid "Color-managed view"
-msgstr ""
+msgstr "תצוגה מנוהלת־צבע"
 
-#: ../src/verbs.cpp:2528
+#: ../src/verbs.cpp:2595
 msgid "Toggle color-managed display for this document window"
-msgstr ""
+msgstr "החלף תצוגת המנוהל על ידי צבע עבור חלון מסמך זה"
 
-#: ../src/verbs.cpp:2530
+#: ../src/verbs.cpp:2597
 msgid "Ico_n Preview..."
-msgstr ""
+msgstr "תצוגת _סמליל מקדימה..."
 
-#: ../src/verbs.cpp:2531
+#: ../src/verbs.cpp:2598
 msgid "Open a window to preview objects at different icon resolutions"
-msgstr ""
+msgstr "פתח חלון כדי להציג תצוגה מקדימה של פריטים ברזולוציות סמלים שונות"
 
-#: ../src/verbs.cpp:2533
+#: ../src/verbs.cpp:2600
 msgid "Zoom to fit page in window"
-msgstr ""
+msgstr "התקרב כדי שהמסמך יותאם לחלון"
 
-#: ../src/verbs.cpp:2534
+#: ../src/verbs.cpp:2601
 msgid "Page _Width"
-msgstr ""
+msgstr "_רוחב העמוד"
 
-#: ../src/verbs.cpp:2535
+#: ../src/verbs.cpp:2602
 msgid "Zoom to fit page width in window"
-msgstr ""
+msgstr "התקרב כדי שרוחב המסמך יותאם לחלון"
 
-#: ../src/verbs.cpp:2537
+#: ../src/verbs.cpp:2604
 msgid "Zoom to fit drawing in window"
-msgstr ""
+msgstr "התקרב כדי שגודל הציור יותאם לחלון"
 
-#: ../src/verbs.cpp:2539
+#: ../src/verbs.cpp:2606
 msgid "Zoom to fit selection in window"
-msgstr ""
+msgstr "התקרב כדי שגודל הבחירה יותאם לחלון"
 
 #. Dialogs
-#: ../src/verbs.cpp:2542
+#: ../src/verbs.cpp:2609
 msgid "In_kscape Preferences..."
-msgstr ""
+msgstr "ה_עדפות אינקסקייפ..."
 
-#: ../src/verbs.cpp:2543
+#: ../src/verbs.cpp:2610
 msgid "Edit global Inkscape preferences"
-msgstr ""
+msgstr "ערוך את הגדרות אינקסקייפ הגלובליות"
 
-#: ../src/verbs.cpp:2544
+#: ../src/verbs.cpp:2611
 msgid "_Document Properties..."
-msgstr ""
+msgstr "מא_פייני המסמך..."
 
-#: ../src/verbs.cpp:2545
+#: ../src/verbs.cpp:2612
 msgid "Edit properties of this document (to be saved with the document)"
-msgstr ""
+msgstr "ערוך את מאפייני מסמך זה (יישמרו יחד עם המסמך)"
 
-#: ../src/verbs.cpp:2546
+#: ../src/verbs.cpp:2613
 msgid "Document _Metadata..."
-msgstr ""
+msgstr "מ_טאדת המסמך..."
 
-#: ../src/verbs.cpp:2547
+#: ../src/verbs.cpp:2614
 msgid "Edit document metadata (to be saved with the document)"
-msgstr ""
+msgstr "ערוך את מטאדת המסמך (תשמר יחד עם המסמך)"
 
-#: ../src/verbs.cpp:2548
+#: ../src/verbs.cpp:2615
 msgid "_Fill and Stroke..."
-msgstr ""
+msgstr "מ_ילוי וקו מתאר..."
 
-#: ../src/verbs.cpp:2549
-msgid ""
-"Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
-msgstr ""
+#: ../src/verbs.cpp:2616
+msgid "Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."
+msgstr "ערוך עבור הפריט את הצבעים, המדרגים, עובי קו המתאר, ראשי חץ, תבניות מרוסקות..."
 
 #. TRANSLATORS: "Swatches" means: color samples
-#: ../src/verbs.cpp:2551
+#: ../src/verbs.cpp:2618
 msgid "S_watches..."
-msgstr ""
+msgstr "ד_גימות..."
 
-#: ../src/verbs.cpp:2552
+#: ../src/verbs.cpp:2619
 msgid "Select colors from a swatches palette"
-msgstr ""
+msgstr "בחר צבעים מלוח צבע הדגימות"
 
-#: ../src/verbs.cpp:2553
+#: ../src/verbs.cpp:2620
 msgid "Transfor_m..."
-msgstr ""
+msgstr "שינוי _צורה..."
 
-#: ../src/verbs.cpp:2554
+#: ../src/verbs.cpp:2621
 msgid "Precisely control objects' transformations"
-msgstr ""
+msgstr "שלוט בשינוי צורת הפריט באופן מדוייק"
 
-#: ../src/verbs.cpp:2555
+#: ../src/verbs.cpp:2622
 msgid "_Align and Distribute..."
-msgstr ""
+msgstr "יישר ופ_זר..."
 
-#: ../src/verbs.cpp:2556
+#: ../src/verbs.cpp:2623
 msgid "Align and distribute objects"
-msgstr ""
+msgstr "יישר ופזר את הפריטים"
 
-#: ../src/verbs.cpp:2557
+#: ../src/verbs.cpp:2624
 msgid "Undo _History..."
-msgstr ""
+msgstr "הי_סטוריית הפעולות..."
 
-#: ../src/verbs.cpp:2558
+#: ../src/verbs.cpp:2625
 msgid "Undo History"
-msgstr ""
+msgstr "היסטוריית הפעולות"
 
-#: ../src/verbs.cpp:2559
+#: ../src/verbs.cpp:2626
 msgid "_Text and Font..."
-msgstr ""
+msgstr "_טקסט וגופן"
 
-#: ../src/verbs.cpp:2560
+#: ../src/verbs.cpp:2627
 msgid "View and select font family, font size and other text properties"
-msgstr ""
+msgstr "הצג ובחר את משפחת הגופן, גודל הגופן ומאפייני הטקסט"
 
-#: ../src/verbs.cpp:2561
+#: ../src/verbs.cpp:2628
 msgid "_XML Editor..."
-msgstr ""
+msgstr "_עורך XML..."
 
-#: ../src/verbs.cpp:2562
+#: ../src/verbs.cpp:2629
 msgid "View and edit the XML tree of the document"
-msgstr ""
+msgstr "הצג וערוך את עץ ה־XML של המסמך"
 
-#: ../src/verbs.cpp:2563
+#: ../src/verbs.cpp:2630
 msgid "_Find..."
-msgstr ""
+msgstr "_חפש..."
 
-#: ../src/verbs.cpp:2564
+#: ../src/verbs.cpp:2631
 msgid "Find objects in document"
-msgstr ""
+msgstr "חפש פריטים במסמך"
 
-#: ../src/verbs.cpp:2565
+#: ../src/verbs.cpp:2632
 msgid "_Messages..."
-msgstr ""
+msgstr "_הודעות..."
 
-#: ../src/verbs.cpp:2566
+#: ../src/verbs.cpp:2633
 msgid "View debug messages"
-msgstr ""
+msgstr "הצג הודעות ניפוי שגיאות"
 
-#: ../src/verbs.cpp:2567
+#: ../src/verbs.cpp:2634
 msgid "S_cripts..."
-msgstr ""
+msgstr "ס_קריפטים..."
 
-#: ../src/verbs.cpp:2568
+#: ../src/verbs.cpp:2635
 msgid "Run scripts"
-msgstr ""
+msgstr "הרץ סקריפטים (תסריטים)"
 
-#: ../src/verbs.cpp:2569
+#: ../src/verbs.cpp:2636
 msgid "Show/Hide D_ialogs"
-msgstr ""
+msgstr "הצג/הסתר _תיבות דו־שיח"
 
-#: ../src/verbs.cpp:2570
+#: ../src/verbs.cpp:2637
 msgid "Show or hide all open dialogs"
-msgstr ""
+msgstr "הצג או הסתר את כל תיבות הדו־שיח הפתוחות"
 
-#: ../src/verbs.cpp:2571
+#: ../src/verbs.cpp:2638
 msgid "Create Tiled Clones..."
-msgstr ""
+msgstr "צור כפילים מרוצפים..."
 
-#: ../src/verbs.cpp:2572
-msgid ""
-"Create multiple clones of selected object, arranging them into a pattern or "
-"scattering"
-msgstr ""
+#: ../src/verbs.cpp:2639
+msgid "Create multiple clones of selected object, arranging them into a pattern or scattering"
+msgstr "צור מספר כפילים לפריט הנבחר, כך שיסודרו בצורת תבנית או פזורים"
 
-#: ../src/verbs.cpp:2573
+#: ../src/verbs.cpp:2640
 msgid "_Object Properties..."
-msgstr ""
+msgstr "מ_אפייני פריט..."
 
-#: ../src/verbs.cpp:2574
+#: ../src/verbs.cpp:2641
 msgid "Edit the ID, locked and visible status, and other object properties"
-msgstr ""
+msgstr "ערוך את המזהה, מצב ההצגה והנעילה ומאפייני פריט נוספים"
 
-#: ../src/verbs.cpp:2577
+#: ../src/verbs.cpp:2644
 msgid "_Instant Messaging..."
-msgstr ""
+msgstr "_הודעות מיידיות..."
 
-#: ../src/verbs.cpp:2577
+#: ../src/verbs.cpp:2644
 msgid "Jabber Instant Messaging Client"
-msgstr ""
+msgstr "לקוח ג'אבר להודעות מיידיות"
 
-#: ../src/verbs.cpp:2579
+#: ../src/verbs.cpp:2646
 msgid "_Input Devices..."
-msgstr ""
+msgstr "ה_תקני קלט..."
 
-#: ../src/verbs.cpp:2580 ../src/verbs.cpp:2582
+#: ../src/verbs.cpp:2647
+#: ../src/verbs.cpp:2649
 msgid "Configure extended input devices, such as a graphics tablet"
-msgstr ""
+msgstr "הגדר התקני פלט מורחבים, כגון טבלה גרפית"
 
-#: ../src/verbs.cpp:2581
+#: ../src/verbs.cpp:2648
 msgid "_Input Devices (new)..."
-msgstr ""
+msgstr "ה_תקני קלט(חדש)..."
 
-#: ../src/verbs.cpp:2583
+#: ../src/verbs.cpp:2650
 msgid "_Extensions..."
-msgstr ""
+msgstr "_הרחבות..."
 
-#: ../src/verbs.cpp:2584
+#: ../src/verbs.cpp:2651
 msgid "Query information about extensions"
-msgstr ""
+msgstr "תשאל מידע אודות הרחבות"
 
-#: ../src/verbs.cpp:2585
+#: ../src/verbs.cpp:2652
 msgid "Layer_s..."
-msgstr ""
+msgstr "_שכבות..."
 
-#: ../src/verbs.cpp:2586
+#: ../src/verbs.cpp:2653
 msgid "View Layers"
-msgstr ""
+msgstr "הצג שכבות"
 
-#: ../src/verbs.cpp:2587
+#: ../src/verbs.cpp:2654
 msgid "Path Effects..."
-msgstr ""
+msgstr "אפקטי נתיב..."
 
-#: ../src/verbs.cpp:2588
+#: ../src/verbs.cpp:2655
 msgid "Manage path effects"
-msgstr ""
+msgstr "נהל אפקטי נתיב"
 
-#: ../src/verbs.cpp:2589
+#: ../src/verbs.cpp:2656
 msgid "Filter Effects..."
-msgstr ""
+msgstr "אפקטי מסננים..."
 
-#: ../src/verbs.cpp:2590
+#: ../src/verbs.cpp:2657
 msgid "Manage SVG filter effects"
-msgstr ""
+msgstr "נהל את אפקטי המסנן של SVG"
+
+#: ../src/verbs.cpp:2658
+msgid "SVG Fonts..."
+msgstr "גופני SVG..."
+
+#: ../src/verbs.cpp:2659
+msgid "Manage SVG fonts"
+msgstr "נהל גופני SVG"
 
 #. Help
-#: ../src/verbs.cpp:2593
+#: ../src/verbs.cpp:2662
 msgid "About E_xtensions"
-msgstr ""
+msgstr "אודות ה_רחבות"
 
-#: ../src/verbs.cpp:2594
+#: ../src/verbs.cpp:2663
 msgid "Information on Inkscape extensions"
-msgstr ""
+msgstr "מידע אודות הרחבות אינקסקייפ"
 
-#: ../src/verbs.cpp:2595
+#: ../src/verbs.cpp:2664
 msgid "About _Memory"
-msgstr ""
+msgstr "אודות ה_זיכרון"
 
-#: ../src/verbs.cpp:2596
+#: ../src/verbs.cpp:2665
 msgid "Memory usage information"
-msgstr ""
+msgstr "מידע ניהול הזיכרון"
 
-#: ../src/verbs.cpp:2597
+#: ../src/verbs.cpp:2666
 msgid "_About Inkscape"
-msgstr ""
+msgstr "_אודות אינקסקייפ"
 
-#: ../src/verbs.cpp:2598
+#: ../src/verbs.cpp:2667
 msgid "Inkscape version, authors, license"
-msgstr ""
+msgstr "גירסת, מחברי ורשיון אינקסקייפ"
 
 #. "help_about"
 #. new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"),
 #. N_("Distribution terms"), /*"show_license"*/"inkscape_options"),
 #. Tutorials
-#: ../src/verbs.cpp:2603
+#: ../src/verbs.cpp:2672
 msgid "Inkscape: _Basic"
-msgstr ""
+msgstr "אינקסקייפ: _הבסיס"
 
-#: ../src/verbs.cpp:2604
+#: ../src/verbs.cpp:2673
 msgid "Getting started with Inkscape"
-msgstr ""
+msgstr "מתחילים באינקסקייפ"
 
 #. "tutorial_basic"
-#: ../src/verbs.cpp:2605
+#: ../src/verbs.cpp:2674
 msgid "Inkscape: _Shapes"
-msgstr ""
+msgstr "אינקסקייפ: _צורות"
 
-#: ../src/verbs.cpp:2606
+#: ../src/verbs.cpp:2675
 msgid "Using shape tools to create and edit shapes"
-msgstr ""
+msgstr "שימוש בכלי הצורה כדי ליצור ולערוך צורות"
 
-#: ../src/verbs.cpp:2607
+#: ../src/verbs.cpp:2676
 msgid "Inkscape: _Advanced"
-msgstr ""
+msgstr "אינקסקייפ: _מתקדמים"
 
-#: ../src/verbs.cpp:2608
+#: ../src/verbs.cpp:2677
 msgid "Advanced Inkscape topics"
-msgstr ""
+msgstr "נושאים מתקדמים באינקסקייפ"
 
 #. "tutorial_advanced"
 #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2610
+#: ../src/verbs.cpp:2679
 msgid "Inkscape: T_racing"
-msgstr ""
+msgstr "אינקסקייפ: מ_עקב"
 
-#: ../src/verbs.cpp:2611
+#: ../src/verbs.cpp:2680
 msgid "Using bitmap tracing"
-msgstr ""
+msgstr "שימוש במעקב מפת סיביות"
 
 #. "tutorial_tracing"
-#: ../src/verbs.cpp:2612
+#: ../src/verbs.cpp:2681
 msgid "Inkscape: _Calligraphy"
-msgstr ""
+msgstr "אינקסקייפ: _קליגרפיקה"
 
-#: ../src/verbs.cpp:2613
+#: ../src/verbs.cpp:2682
 msgid "Using the Calligraphy pen tool"
-msgstr ""
+msgstr "שימוש בכלי העט הקליגרפי"
 
-#: ../src/verbs.cpp:2614
+#: ../src/verbs.cpp:2683
 msgid "_Elements of Design"
-msgstr ""
+msgstr "_יסודות העיצוב"
 
-#: ../src/verbs.cpp:2615
+#: ../src/verbs.cpp:2684
 msgid "Principles of design in the tutorial form"
-msgstr ""
+msgstr "עקרונות העיצוב בצורת מדריך"
 
 #. "tutorial_design"
-#: ../src/verbs.cpp:2616
+#: ../src/verbs.cpp:2685
 msgid "_Tips and Tricks"
-msgstr ""
+msgstr "_עצות וטריקים"
 
-#: ../src/verbs.cpp:2617
+#: ../src/verbs.cpp:2686
 msgid "Miscellaneous tips and tricks"
-msgstr ""
+msgstr "טיפים ועצות שונים ומשונים"
 
 #. "tutorial_tips"
 #. Effect
-#: ../src/verbs.cpp:2620
+#: ../src/verbs.cpp:2689
 msgid "Previous Effect"
-msgstr ""
+msgstr "האפקט הקודם"
 
-#: ../src/verbs.cpp:2621
+#: ../src/verbs.cpp:2690
 msgid "Repeat the last effect with the same settings"
-msgstr ""
+msgstr "חזור על האפקט הקודם עם אותן ההגדרות"
 
-#: ../src/verbs.cpp:2622
+#: ../src/verbs.cpp:2691
 msgid "Previous Effect Settings..."
-msgstr ""
+msgstr "הגדרות האפקט הקודם..."
 
-#: ../src/verbs.cpp:2623
+#: ../src/verbs.cpp:2692
 msgid "Repeat the last effect with new settings"
-msgstr ""
+msgstr "חזור על האפקט הקודם עם הגדרות חדשות"
 
-#. Fit Page
-#: ../src/verbs.cpp:2626
-msgid "Fit Page to Selection"
-msgstr ""
-
-#: ../src/verbs.cpp:2627
+#: ../src/verbs.cpp:2696
 msgid "Fit the page to the current selection"
-msgstr ""
-
-#: ../src/verbs.cpp:2628
-msgid "Fit Page to Drawing"
-msgstr "התאם הדף לאיור"
+msgstr "התאם את העמוד לבחירה הנוכחית"
 
-#: ../src/verbs.cpp:2629
+#: ../src/verbs.cpp:2698
 msgid "Fit the page to the drawing"
-msgstr ""
-
-#: ../src/verbs.cpp:2630
-msgid "Fit Page to Selection or Drawing"
-msgstr ""
+msgstr "התאם את העמוד לציור"
 
-#: ../src/verbs.cpp:2631
-msgid ""
-"Fit the page to the current selection or the drawing if there is no selection"
-msgstr ""
+#: ../src/verbs.cpp:2700
+msgid "Fit the page to the current selection or the drawing if there is no selection"
+msgstr "התאם את העמוד לבחירה הנוכחית או לציור במידה ולא בוצעה בחירה"
 
 #. LockAndHide
-#: ../src/verbs.cpp:2633
+#: ../src/verbs.cpp:2702
 msgid "Unlock All"
-msgstr ""
+msgstr "שחרר הכל"
 
-#: ../src/verbs.cpp:2635
+#: ../src/verbs.cpp:2704
 msgid "Unlock All in All Layers"
-msgstr ""
+msgstr "שחרר הכל בכל השכבות"
 
-#: ../src/verbs.cpp:2637
+#: ../src/verbs.cpp:2706
 msgid "Unhide All"
-msgstr ""
+msgstr "הצג הכל"
 
-#: ../src/verbs.cpp:2639
+#: ../src/verbs.cpp:2708
 msgid "Unhide All in All Layers"
-msgstr ""
+msgstr "הצג הכל בכל השכבות"
 
 #: ../src/widgets/calligraphic-profile-rename.cpp:34
 msgid "Profile name:"
-msgstr ""
+msgstr "שם הפרופיל:"
 
 #: ../src/widgets/calligraphic-profile-rename.cpp:48
-#, fuzzy
 msgid "Save"
-msgstr "_שמור"
+msgstr "שמור"
 
-#: ../src/widgets/dash-selector.cpp:106
+#: ../src/widgets/dash-selector.cpp:62
 msgid "Dash pattern"
-msgstr ""
+msgstr "תבנית קו הקטעים"
 
-#: ../src/widgets/dash-selector.cpp:121
+#: ../src/widgets/dash-selector.cpp:77
 msgid "Pattern offset"
-msgstr ""
+msgstr "קיזוז התבנית"
 
-#: ../src/widgets/desktop-widget.cpp:620
+#. display the initial welcome message in the statusbar
+#: ../src/widgets/desktop-widget.cpp:545
+msgid "<b>Welcome to Inkscape!</b> Use shape or freehand tools to create objects; use selector (arrow) to move or transform them."
+msgstr "<b> ברוכים הבאים לאינקסקייפ! </b> השתמשו בכלי הצורה או היד־החופשית  כדי ליצור פריטים; השתמש בכלי-הבחירה (חץ) כדי להזיז או לשנות את צורתם."
+
+#: ../src/widgets/desktop-widget.cpp:607
 #, c-format
 msgid "%s: %d (outline) - Inkscape"
-msgstr ""
+msgstr "%s: %d (קו מתאר) - אינקסקייפ"
 
-#: ../src/widgets/desktop-widget.cpp:622
+#: ../src/widgets/desktop-widget.cpp:609
 #, c-format
 msgid "%s: %d - Inkscape"
-msgstr ""
+msgstr "%s: %d - אינקסקייפ"
 
-#: ../src/widgets/desktop-widget.cpp:626
+#: ../src/widgets/desktop-widget.cpp:613
 #, c-format
 msgid "%s (outline) - Inkscape"
-msgstr ""
+msgstr "%s (קו חיצוני) - אינקסקייפ"
 
-#: ../src/widgets/desktop-widget.cpp:628
+#: ../src/widgets/desktop-widget.cpp:615
 #, c-format
 msgid "%s - Inkscape"
-msgstr ""
+msgstr "%s - אינקסקייפ"
 
 #. Family frame
-#: ../src/widgets/font-selector.cpp:154
+#: ../src/widgets/font-selector.cpp:157
 msgid "Font family"
-msgstr ""
+msgstr "משפחת הגופן"
 
 #. Style frame
-#: ../src/widgets/font-selector.cpp:185
-#: ../share/extensions/polyhedron_3d.inx.h:44
+#: ../src/widgets/font-selector.cpp:188
+#: ../share/extensions/polyhedron_3d.inx.h:43
 msgid "Style"
 msgstr "סגנון"
 
-#: ../src/widgets/font-selector.cpp:223
+#: ../src/widgets/font-selector.cpp:226
 msgid "Font size:"
-msgstr "גודל גופן:"
+msgstr "×\92×\95×\93×\9c ×\94×\92×\95פ×\9f:"
 
 #. TRANSLATORS: Test string used in text and font dialog (when no
 #. * 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:636 ../src/widgets/toolbox.cpp:5123
+#: ../src/widgets/font-selector.cpp:639
+#: ../src/widgets/toolbox.cpp:6087
 msgid "AaBbCcIiPpQq12369$€¢?.;/()"
-msgstr ""
+msgstr "AaBbCcאבנסשת12369$€₪?.;/()"
 
 #: ../src/widgets/gradient-selector.cpp:139
-#: ../src/widgets/gradient-toolbar.cpp:462
+#: ../src/widgets/gradient-toolbar.cpp:465
 msgid "Edit..."
 msgstr "ערוך..."
 
 #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/pservers.html#LinearGradientSpreadMethodAttribute
 #: ../src/widgets/gradient-selector.cpp:156
-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 ""
+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 "האם למלא בצבע אחיד מאחורי קצוות ידיות המדרג (spreadMethod=\"pad\"), או לחזור על המדרג באותו הכיוון (spreadMethod=\"repeat\"), או לחזור על המדרג עם הפיכת הכיוון בכל עותק (spreadMethod=\"reflect\")"
 
 #: ../src/widgets/gradient-selector.cpp:166
 msgid "reflected"
-msgstr ""
+msgstr "משתקף"
 
 #: ../src/widgets/gradient-selector.cpp:170
 msgid "direct"
-msgstr ""
+msgstr "ישיר"
 
 #: ../src/widgets/gradient-selector.cpp:178
 msgid "Repeat:"
-msgstr ""
+msgstr "חזרה:"
 
-#: ../src/widgets/gradient-toolbar.cpp:151
+#: ../src/widgets/gradient-toolbar.cpp:154
 msgid "Assign gradient to object"
-msgstr ""
+msgstr "הקצה מדרג לפריט"
 
-#: ../src/widgets/gradient-toolbar.cpp:185
+#: ../src/widgets/gradient-toolbar.cpp:188
 msgid "<small>No gradients</small>"
-msgstr ""
+msgstr "<small>אין מדרגים</small>"
 
-#: ../src/widgets/gradient-toolbar.cpp:194
+#: ../src/widgets/gradient-toolbar.cpp:197
 msgid "<small>Nothing selected</small>"
-msgstr ""
+msgstr "<small>לא נבחר דבר</small>"
 
-#: ../src/widgets/gradient-toolbar.cpp:205
+#: ../src/widgets/gradient-toolbar.cpp:208
 msgid "<small>No gradients in selection</small>"
-msgstr ""
+msgstr "<small>אין מדרגים בבחירה</small>"
 
-#: ../src/widgets/gradient-toolbar.cpp:215
+#: ../src/widgets/gradient-toolbar.cpp:218
 msgid "<small>Multiple gradients</small>"
-msgstr ""
+msgstr "<small>מספר מדרגים</small>"
 
-#: ../src/widgets/gradient-toolbar.cpp:463
+#: ../src/widgets/gradient-toolbar.cpp:466
 msgid "Edit the stops of the gradient"
-msgstr ""
-
-#: ../src/widgets/gradient-toolbar.cpp:522 ../src/widgets/toolbox.cpp:1936
-#: ../src/widgets/toolbox.cpp:2010 ../src/widgets/toolbox.cpp:2340
-#: ../src/widgets/toolbox.cpp:2378 ../src/widgets/toolbox.cpp:2992
-#: ../src/widgets/toolbox.cpp:3016 ../src/widgets/toolbox.cpp:4110
-#: ../src/widgets/toolbox.cpp:4137
+msgstr "עורך את העצירות של המדרג"
+
+#: ../src/widgets/gradient-toolbar.cpp:526
+#: ../src/widgets/toolbox.cpp:2167
+#: ../src/widgets/toolbox.cpp:2245
+#: ../src/widgets/toolbox.cpp:2576
+#: ../src/widgets/toolbox.cpp:2614
+#: ../src/widgets/toolbox.cpp:3229
+#: ../src/widgets/toolbox.cpp:3253
+#: ../src/widgets/toolbox.cpp:4666
+#: ../src/widgets/toolbox.cpp:4695
 msgid "<b>New:</b>"
-msgstr ""
+msgstr "<b>חדש:</b>"
 
-#: ../src/widgets/gradient-toolbar.cpp:535
+#: ../src/widgets/gradient-toolbar.cpp:539
 msgid "Create linear gradient"
-msgstr ""
+msgstr "צור מדרג קווי"
 
-#: ../src/widgets/gradient-toolbar.cpp:549
+#: ../src/widgets/gradient-toolbar.cpp:553
 msgid "Create radial (elliptic or circular) gradient"
-msgstr ""
+msgstr "צור מדרג מעגלי (אליפטי או רדיאלי)"
 
-#: ../src/widgets/gradient-toolbar.cpp:564
+#. TODO replace aux_toolbox_space(tbl, AUX_SPACING);
+#: ../src/widgets/gradient-toolbar.cpp:568
 msgid "on"
-msgstr ""
+msgstr "מופעל"
 
-#: ../src/widgets/gradient-toolbar.cpp:577
+#: ../src/widgets/gradient-toolbar.cpp:581
 msgid "Create gradient in the fill"
-msgstr ""
+msgstr "צור מדרג במילוי"
 
-#: ../src/widgets/gradient-toolbar.cpp:591
+#: ../src/widgets/gradient-toolbar.cpp:595
 msgid "Create gradient in the stroke"
-msgstr ""
+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:605 ../src/widgets/toolbox.cpp:1938
-#: ../src/widgets/toolbox.cpp:2348 ../src/widgets/toolbox.cpp:2366
-#: ../src/widgets/toolbox.cpp:2994 ../src/widgets/toolbox.cpp:3005
-#: ../src/widgets/toolbox.cpp:4113 ../src/widgets/toolbox.cpp:4124
+#: ../src/widgets/gradient-toolbar.cpp:609
+#: ../src/widgets/toolbox.cpp:2169
+#: ../src/widgets/toolbox.cpp:2584
+#: ../src/widgets/toolbox.cpp:2602
+#: ../src/widgets/toolbox.cpp:3231
+#: ../src/widgets/toolbox.cpp:3242
+#: ../src/widgets/toolbox.cpp:4669
+#: ../src/widgets/toolbox.cpp:4680
 msgid "<b>Change:</b>"
-msgstr ""
+msgstr "<b>שנה:</b>"
 
 #: ../src/widgets/gradient-vector.cpp:270
 msgid "No gradients in document"
-msgstr ""
+msgstr "אין מדרגים במסמך"
 
 #: ../src/widgets/gradient-vector.cpp:276
 msgid "No gradient selected"
-msgstr ""
+msgstr "לא נבחרו מדרגים"
 
-#: ../src/widgets/gradient-vector.cpp:538
+#: ../src/widgets/gradient-vector.cpp:541
 msgid "No stops in gradient"
-msgstr ""
+msgstr "אין עצירות במדרג"
 
-#: ../src/widgets/gradient-vector.cpp:661
+#: ../src/widgets/gradient-vector.cpp:664
 msgid "Change gradient stop offset"
-msgstr ""
+msgstr "שנה את קיזוז עצירת המדרג"
 
 #. TRANSLATORS: "Stop" means: a "phase" of a gradient
-#: ../src/widgets/gradient-vector.cpp:803
+#: ../src/widgets/gradient-vector.cpp:806
 msgid "Add stop"
-msgstr ""
+msgstr "הוסף עצירה"
 
-#: ../src/widgets/gradient-vector.cpp:806
+#: ../src/widgets/gradient-vector.cpp:809
 msgid "Add another control stop to gradient"
-msgstr ""
+msgstr "הוסף נקודת שליטה עוצרת למדרג"
 
-#: ../src/widgets/gradient-vector.cpp:808
+#: ../src/widgets/gradient-vector.cpp:811
 msgid "Delete stop"
-msgstr ""
+msgstr "מחק עצירה"
 
-#: ../src/widgets/gradient-vector.cpp:811
+#: ../src/widgets/gradient-vector.cpp:814
 msgid "Delete current control stop from gradient"
-msgstr ""
+msgstr "מחק את נקודת השליטה בעצירה מהמדרג"
 
 #. Label
-#: ../src/widgets/gradient-vector.cpp:822
+#: ../src/widgets/gradient-vector.cpp:825
 msgid "Offset:"
-msgstr ""
+msgstr "קיזוז:"
 
 #. TRANSLATORS: "Stop" means: a "phase" of a gradient
-#: ../src/widgets/gradient-vector.cpp:867
+#: ../src/widgets/gradient-vector.cpp:870
 msgid "Stop Color"
-msgstr ""
+msgstr "צבע העצירה"
 
-#: ../src/widgets/gradient-vector.cpp:896
+#: ../src/widgets/gradient-vector.cpp:900
 msgid "Gradient editor"
-msgstr "×¢×\95ר×\9a ×\94×\92ר×\93×\99×\90× ×\98"
+msgstr "×¢×\95ר×\9a ×\94×\9e×\93ר×\92"
 
-#: ../src/widgets/gradient-vector.cpp:1171
+#: ../src/widgets/gradient-vector.cpp:1176
 msgid "Change gradient stop color"
-msgstr ""
+msgstr "שנה את צבע עצירת המדרג"
 
 #: ../src/widgets/layer-selector.cpp:115
 msgid "Toggle current layer visibility"
-msgstr ""
+msgstr "החלף את הצגת השכבה הנוכחית"
 
 #: ../src/widgets/layer-selector.cpp:135
 msgid "Lock or unlock current layer"
-msgstr ""
+msgstr "נעל או שחרר את השכבה הנוכחית"
 
 #: ../src/widgets/layer-selector.cpp:138
 msgid "Current layer"
@@ -14896,299 +15442,283 @@ msgstr "שכבה נוכחית"
 
 #: ../src/widgets/layer-selector.cpp:566
 msgid "(root)"
-msgstr ""
+msgstr "(מקור)"
 
-#: ../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 ""
+msgstr "ללא צבע"
 
-#: ../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 ""
+msgstr "צבע אחיד"
 
-#: ../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 ""
+msgstr "מדרג קווי"
 
-#: ../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 ""
+msgstr "מדרג מעגלי"
 
 #: ../src/widgets/paint-selector.cpp:191
 msgid "Unset paint (make it undefined so it can be inherited)"
-msgstr ""
+msgstr "צבע לא נקבע (הפוך אותו ללא מוגדר כדי שניתן יהיה לרשת אותו)"
 
 #. 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 ""
+msgid "Any path self-intersections or subpaths create holes in the fill (fill-rule: evenodd)"
+msgstr "כל נתיב או תת־נתיב המצטלב בעצמו יוצר חורים במילוי (fill-rule: 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 ""
+msgid "Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)"
+msgstr "המילוי הינוי אחיד אלא אם כן תת־הנתיב הוא בכיוון ההפוך (fill-rule: nonzero)"
 
 #: ../src/widgets/paint-selector.cpp:531
 msgid "No objects"
-msgstr ""
+msgstr "אין פריטים"
 
 #: ../src/widgets/paint-selector.cpp:542
 msgid "Multiple styles"
-msgstr ""
+msgstr "סגנונות מרובים"
 
 #: ../src/widgets/paint-selector.cpp:553
 msgid "Paint is undefined"
-msgstr ""
+msgstr "הצבע לא מוגדר"
 
 #: ../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 ""
+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 "השתמש ב<b>כלי המפרקים</b> כדי לכוונן את מיקום, גודל, וסיבוב התבנית על משטח הציור. השתמש ב<b>פריט &lt; תבנית &lt; פריטים לתבנית</b> כדי ליצור תבנית חדשה מהבחירה."
 
-#: ../src/widgets/select-toolbar.cpp:244
+#: ../src/widgets/select-toolbar.cpp:246
 msgid "Transform by toolbar"
-msgstr ""
+msgstr "שנה צורה לפי סרגל הכלים"
 
-#: ../src/widgets/select-toolbar.cpp:299
+#: ../src/widgets/select-toolbar.cpp:303
 msgid "Now <b>stroke width</b> is <b>scaled</b> when objects are scaled."
-msgstr ""
+msgstr "כעת <b>עובי קו המתאר משתנה</b> כאשר גודל הפריטים משתנה."
 
-#: ../src/widgets/select-toolbar.cpp:301
+#: ../src/widgets/select-toolbar.cpp:305
 msgid "Now <b>stroke width</b> is <b>not scaled</b> when objects are scaled."
-msgstr ""
+msgstr "כעת <b>עובי קו המתאר לא משתנה</b> כאשר גודל הפריטים משתנה."
 
-#: ../src/widgets/select-toolbar.cpp:310
-msgid ""
-"Now <b>rounded rectangle corners</b> are <b>scaled</b> when rectangles are "
-"scaled."
-msgstr ""
+#: ../src/widgets/select-toolbar.cpp:316
+msgid "Now <b>rounded rectangle corners</b> are <b>scaled</b> when rectangles are scaled."
+msgstr "כעת <b>פינות מעוגלות משתנות</b> כאשר גודל המרובעים משתנה."
 
-#: ../src/widgets/select-toolbar.cpp:312
-msgid ""
-"Now <b>rounded rectangle corners</b> are <b>not scaled</b> when rectangles "
-"are scaled."
-msgstr ""
+#: ../src/widgets/select-toolbar.cpp:318
+msgid "Now <b>rounded rectangle corners</b> are <b>not scaled</b> when rectangles are scaled."
+msgstr "כעת <b>פינות מעוגלות לא משתנות</b> כאשר גודל המרובעים משתנה."
 
-#: ../src/widgets/select-toolbar.cpp:321
-msgid ""
-"Now <b>gradients</b> are <b>transformed</b> along with their objects when "
-"those are transformed (moved, scaled, rotated, or skewed)."
-msgstr ""
+#: ../src/widgets/select-toolbar.cpp:329
+msgid "Now <b>gradients</b> are <b>transformed</b> along with their objects when those are transformed (moved, scaled, rotated, or skewed)."
+msgstr "כעת <b>מדרגים משנים צורה</b> יחד עם הפריטים שאליהם הם שייכים כאשר אלה משנים צורה (הזזה, גודל, סיבוב או מתיחה)."
 
-#: ../src/widgets/select-toolbar.cpp:323
-msgid ""
-"Now <b>gradients</b> remain <b>fixed</b> when objects are transformed "
-"(moved, scaled, rotated, or skewed)."
-msgstr ""
+#: ../src/widgets/select-toolbar.cpp:331
+msgid "Now <b>gradients</b> remain <b>fixed</b> when objects are transformed (moved, scaled, rotated, or skewed)."
+msgstr "כעת <b>מדרגים</b> נשארים <b>קבועים</b> כאשר הפריטים שאליהם הם שייכים משנים צורה (הזזה, גודל, סיבוב או מתיחה)."
 
-#: ../src/widgets/select-toolbar.cpp:332
-msgid ""
-"Now <b>patterns</b> are <b>transformed</b> along with their objects when "
-"those are transformed (moved, scaled, rotated, or skewed)."
-msgstr ""
+#: ../src/widgets/select-toolbar.cpp:342
+msgid "Now <b>patterns</b> are <b>transformed</b> along with their objects when those are transformed (moved, scaled, rotated, or skewed)."
+msgstr "כעת <b>תבניות משנות צורה</b> יחד עם הפריטים שאליהם הם שייכים כאשר אלה משנים צורה (הזזה, גודל, סיבוב או מתיחה)."
 
-#: ../src/widgets/select-toolbar.cpp:334
-msgid ""
-"Now <b>patterns</b> remain <b>fixed</b> when objects are transformed (moved, "
-"scaled, rotated, or skewed)."
-msgstr ""
+#: ../src/widgets/select-toolbar.cpp:344
+msgid "Now <b>patterns</b> remain <b>fixed</b> when objects are transformed (moved, scaled, rotated, or skewed)."
+msgstr "כעת <b>תבניות </b> נשארות <b>קבועות</b> כאשר הפריטים שאליהם הם שייכים משנים צורה (הזזה, גודל, סיבוב או מתיחה)."
 
 #. four spinbuttons
 #. 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/widgets/select-toolbar.cpp:446
+#: ../src/widgets/select-toolbar.cpp:457
 msgid "select_toolbar|X position"
-msgstr ""
+msgstr "select_toolbar|מיקום X"
 
-#: ../src/widgets/select-toolbar.cpp:446
+#: ../src/widgets/select-toolbar.cpp:457
 msgid "select_toolbar|X"
-msgstr ""
+msgstr "select_toolbar|X"
 
-#: ../src/widgets/select-toolbar.cpp:448
+#: ../src/widgets/select-toolbar.cpp:459
 msgid "Horizontal coordinate of selection"
-msgstr ""
+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/widgets/select-toolbar.cpp:454
+#: ../src/widgets/select-toolbar.cpp:465
 msgid "select_toolbar|Y position"
-msgstr ""
+msgstr "select_toolbar|מיקום Y"
 
-#: ../src/widgets/select-toolbar.cpp:454
+#: ../src/widgets/select-toolbar.cpp:465
 msgid "select_toolbar|Y"
-msgstr ""
+msgstr "select_toolbar|Y"
 
-#: ../src/widgets/select-toolbar.cpp:456
+#: ../src/widgets/select-toolbar.cpp:467
 msgid "Vertical coordinate of selection"
-msgstr ""
+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/widgets/select-toolbar.cpp:462
+#: ../src/widgets/select-toolbar.cpp:473
 msgid "select_toolbar|Width"
-msgstr ""
+msgstr "select_toolbar|רוחב"
 
-#: ../src/widgets/select-toolbar.cpp:462
+#: ../src/widgets/select-toolbar.cpp:473
 msgid "select_toolbar|W"
-msgstr ""
+msgstr "select_toolbar|ר"
 
-#: ../src/widgets/select-toolbar.cpp:464
+#: ../src/widgets/select-toolbar.cpp:475
 msgid "Width of selection"
-msgstr ""
+msgstr "רוחב הבחירה"
 
-#: ../src/widgets/select-toolbar.cpp:471
+#: ../src/widgets/select-toolbar.cpp:482
 msgid "Lock width and height"
-msgstr ""
+msgstr "נעל גובה ורוחב"
 
-#: ../src/widgets/select-toolbar.cpp:472
+#: ../src/widgets/select-toolbar.cpp:483
 msgid "When locked, change both width and height by the same proportion"
-msgstr ""
+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/widgets/select-toolbar.cpp:483
+#: ../src/widgets/select-toolbar.cpp:494
 msgid "select_toolbar|Height"
-msgstr ""
+msgstr "select_toolbar|גובה"
 
-#: ../src/widgets/select-toolbar.cpp:483
+#: ../src/widgets/select-toolbar.cpp:494
 msgid "select_toolbar|H"
-msgstr ""
+msgstr "select_toolbar|ג"
 
-#: ../src/widgets/select-toolbar.cpp:485
+#: ../src/widgets/select-toolbar.cpp:496
 msgid "Height of selection"
-msgstr ""
+msgstr "גובה הבחירה"
 
-#: ../src/widgets/select-toolbar.cpp:516
+#: ../src/widgets/select-toolbar.cpp:533
 msgid "Affect:"
-msgstr ""
+msgstr "השפעה:"
 
-#: ../src/widgets/select-toolbar.cpp:535
+#: ../src/widgets/select-toolbar.cpp:552
 msgid "Scale rounded corners"
-msgstr ""
+msgstr "שנה את גודל הפינות המעוגלות"
 
-#: ../src/widgets/select-toolbar.cpp:546
-#, fuzzy
+#: ../src/widgets/select-toolbar.cpp:563
 msgid "Move gradients"
-msgstr "×\94פ×\95×\9a ×\92ר×\93×\99×\90× ×\98"
+msgstr "×\94×\96×\96 ×\9e×\93ר×\92×\99×\9d"
 
-#: ../src/widgets/select-toolbar.cpp:557
-#, fuzzy
+#: ../src/widgets/select-toolbar.cpp:574
 msgid "Move patterns"
-msgstr "×\9e×\98ר×\99×\9d"
+msgstr "×\94×\96×\96 ×ª×\91× ×\99×\95ת"
 
 #: ../src/widgets/sp-color-gtkselector.cpp:50
 msgid "System"
 msgstr "מערכת"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:110
+#: ../src/widgets/sp-color-icc-selector.cpp:111
 msgid "CMS"
-msgstr ""
+msgstr "מערכת ניהול תוכן"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:219
+#: ../src/widgets/sp-color-icc-selector.cpp:220
 #: ../src/widgets/sp-color-scales.cpp:397
 msgid "_R"
-msgstr ""
+msgstr "_R"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:219
 #: ../src/widgets/sp-color-icc-selector.cpp:220
+#: ../src/widgets/sp-color-icc-selector.cpp:221
 #: ../src/widgets/sp-color-scales.cpp:400
 msgid "_G"
-msgstr ""
+msgstr "_G"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:219
+#: ../src/widgets/sp-color-icc-selector.cpp:220
 #: ../src/widgets/sp-color-scales.cpp:403
 msgid "_B"
-msgstr ""
+msgstr "_B"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:221
 #: ../src/widgets/sp-color-icc-selector.cpp:222
+#: ../src/widgets/sp-color-icc-selector.cpp:223
 #: ../src/widgets/sp-color-scales.cpp:423
 msgid "_H"
-msgstr ""
+msgstr "_H"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:221
 #: ../src/widgets/sp-color-icc-selector.cpp:222
+#: ../src/widgets/sp-color-icc-selector.cpp:223
 #: ../src/widgets/sp-color-scales.cpp:426
 msgid "_S"
-msgstr ""
+msgstr "_S"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:222
+#: ../src/widgets/sp-color-icc-selector.cpp:223
 #: ../src/widgets/sp-color-scales.cpp:429
 msgid "_L"
-msgstr ""
+msgstr "_L"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:223
 #: ../src/widgets/sp-color-icc-selector.cpp:224
+#: ../src/widgets/sp-color-icc-selector.cpp:225
 #: ../src/widgets/sp-color-scales.cpp:451
 msgid "_C"
-msgstr ""
+msgstr "_C"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:223
 #: ../src/widgets/sp-color-icc-selector.cpp:224
+#: ../src/widgets/sp-color-icc-selector.cpp:225
 #: ../src/widgets/sp-color-scales.cpp:454
 msgid "_M"
-msgstr ""
+msgstr "_M"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:223
 #: ../src/widgets/sp-color-icc-selector.cpp:224
+#: ../src/widgets/sp-color-icc-selector.cpp:225
 #: ../src/widgets/sp-color-scales.cpp:457
 msgid "_Y"
-msgstr ""
+msgstr "_Y"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:223
+#: ../src/widgets/sp-color-icc-selector.cpp:224
 #: ../src/widgets/sp-color-scales.cpp:460
 msgid "_K"
-msgstr ""
+msgstr "_K"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:234
+#: ../src/widgets/sp-color-icc-selector.cpp:235
 msgid "Gray"
-msgstr ""
+msgstr "אפור"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-icc-selector.cpp:238
+#: ../src/widgets/sp-color-icc-selector.cpp:239
 #: ../src/widgets/sp-color-scales.cpp:452
 #: ../src/widgets/sp-color-scales.cpp:453
 msgid "Cyan"
-msgstr ""
+msgstr "ציאן"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-icc-selector.cpp:238
+#: ../src/widgets/sp-color-icc-selector.cpp:239
 #: ../src/widgets/sp-color-scales.cpp:455
 #: ../src/widgets/sp-color-scales.cpp:456
 msgid "Magenta"
-msgstr ""
+msgstr "ארגמן"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-icc-selector.cpp:238
+#: ../src/widgets/sp-color-icc-selector.cpp:239
 #: ../src/widgets/sp-color-scales.cpp:458
 #: ../src/widgets/sp-color-scales.cpp:459
 msgid "Yellow"
 msgstr "צהוב"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:295
+#: ../src/widgets/sp-color-icc-selector.cpp:296
 msgid "Fix"
-msgstr ""
+msgstr "קיבוע"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:298
+#: ../src/widgets/sp-color-icc-selector.cpp:299
 msgid "Fix RGB fallback to match icc-color() value."
-msgstr ""
+msgstr "קבע את נקודת הנפילה של RGC כדי שתתאים לערך ה־icc-color()."
 
 #. Label
-#: ../src/widgets/sp-color-icc-selector.cpp:379
+#: ../src/widgets/sp-color-icc-selector.cpp:380
 #: ../src/widgets/sp-color-scales.cpp:406
 #: ../src/widgets/sp-color-scales.cpp:432
 #: ../src/widgets/sp-color-scales.cpp:463
 #: ../src/widgets/sp-color-wheel-selector.cpp:134
 msgid "_A"
-msgstr ""
+msgstr "_A"
 
-#: ../src/widgets/sp-color-icc-selector.cpp:389
-#: ../src/widgets/sp-color-icc-selector.cpp:401
+#: ../src/widgets/sp-color-icc-selector.cpp:390
+#: ../src/widgets/sp-color-icc-selector.cpp:402
 #: ../src/widgets/sp-color-scales.cpp:407
 #: ../src/widgets/sp-color-scales.cpp:408
 #: ../src/widgets/sp-color-scales.cpp:433
@@ -15198,3117 +15728,3463 @@ msgstr ""
 #: ../src/widgets/sp-color-wheel-selector.cpp:144
 #: ../src/widgets/sp-color-wheel-selector.cpp:156
 msgid "Alpha (opacity)"
-msgstr ""
+msgstr "אלפא (אטימות)"
 
-#: ../src/widgets/sp-color-notebook.cpp:329
+#: ../src/widgets/sp-color-notebook.cpp:330
 msgid "RGBA_:"
-msgstr ""
+msgstr "RGBA_:"
 
-#: ../src/widgets/sp-color-notebook.cpp:337
+#: ../src/widgets/sp-color-notebook.cpp:338
 msgid "Hexadecimal RGBA value of the color"
-msgstr ""
+msgstr "ערך ה־RGBA בבסיס הקסדצימלי של הצבע"
 
 #: ../src/widgets/sp-color-scales.cpp:77
 msgid "RGB"
-msgstr ""
+msgstr "RGB"
 
 #: ../src/widgets/sp-color-scales.cpp:77
 msgid "HSL"
-msgstr ""
+msgstr "HSL"
 
 #: ../src/widgets/sp-color-scales.cpp:77
 msgid "CMYK"
-msgstr ""
+msgstr "CMYK"
 
 #: ../src/widgets/sp-color-selector.cpp:64
 msgid "Unnamed"
-msgstr ""
+msgstr "ללא שם"
 
 #: ../src/widgets/sp-color-wheel-selector.cpp:61
 msgid "Wheel"
-msgstr ""
+msgstr "גלגל"
 
 #: ../src/widgets/sp-xmlview-attr-list.cpp:46
 msgid "Attribute"
-msgstr ""
+msgstr "מאפיין"
 
 #: ../src/widgets/sp-xmlview-attr-list.cpp:47
 #: ../share/extensions/perfectboundcover.inx.h:19
 msgid "Value"
-msgstr ""
+msgstr "ערך"
 
 #: ../src/widgets/sp-xmlview-content.cpp:169
 msgid "Type text in a text node"
-msgstr ""
+msgstr "הזן טקסט במפרק טקסט"
 
-#: ../src/widgets/toolbox.cpp:187
+#: ../src/widgets/toolbox.cpp:194
 msgid "Color/opacity used for color tweaking"
-msgstr ""
+msgstr "צבע/אטימות המשמשים לויסות הצבע"
 
-#: ../src/widgets/toolbox.cpp:191
+#: ../src/widgets/toolbox.cpp:198
 msgid "Style of new stars"
-msgstr ""
+msgstr "סגנון של כוכבים חדשים"
 
-#: ../src/widgets/toolbox.cpp:193
+#: ../src/widgets/toolbox.cpp:200
 msgid "Style of new rectangles"
-msgstr ""
+msgstr "סגנון של מרובעים חדשים"
 
-#: ../src/widgets/toolbox.cpp:195
+#: ../src/widgets/toolbox.cpp:202
 msgid "Style of new 3D boxes"
-msgstr ""
+msgstr "סגנון של תיבות תלת מימד חדשות"
 
-#: ../src/widgets/toolbox.cpp:197
+#: ../src/widgets/toolbox.cpp:204
 msgid "Style of new ellipses"
-msgstr ""
+msgstr "סגנון של אליפסות חדשות"
 
-#: ../src/widgets/toolbox.cpp:199
+#: ../src/widgets/toolbox.cpp:206
 msgid "Style of new spirals"
-msgstr ""
+msgstr "סגנון של ספירלות חדשות"
 
-#: ../src/widgets/toolbox.cpp:201
+#: ../src/widgets/toolbox.cpp:208
 msgid "Style of new paths created by Pencil"
-msgstr ""
+msgstr "סגנון של נתיבים חדשים הנוצרים בעפרון"
 
-#: ../src/widgets/toolbox.cpp:203
+#: ../src/widgets/toolbox.cpp:210
 msgid "Style of new paths created by Pen"
-msgstr ""
+msgstr "סגנון של נתיבים חדשים הנוצרים בעט"
 
-#: ../src/widgets/toolbox.cpp:205
+#: ../src/widgets/toolbox.cpp:212
 msgid "Style of new calligraphic strokes"
-msgstr ""
+msgstr "סגנון של קווי מתאר קליגרפיים חדשים"
 
-#: ../src/widgets/toolbox.cpp:207
+#: ../src/widgets/toolbox.cpp:214
+#: ../src/widgets/toolbox.cpp:216
 msgid "TBD"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:217
+#: ../src/widgets/toolbox.cpp:226
 msgid "Style of Paint Bucket fill objects"
-msgstr ""
+msgstr "סגנון של פריטי דלי מילוי הצבע"
 
-#: ../src/widgets/toolbox.cpp:1075
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:1272
 msgid "Insert node"
-msgstr "הוסף"
+msgstr "הוסף מפרק"
 
-#: ../src/widgets/toolbox.cpp:1076
+#: ../src/widgets/toolbox.cpp:1273
 msgid "Insert new nodes into selected segments"
-msgstr ""
+msgstr "הוסף מפרקים חדשים למקטעים הנבחרים"
 
-#: ../src/widgets/toolbox.cpp:1079
+#: ../src/widgets/toolbox.cpp:1276
 msgid "Insert"
 msgstr "הוסף"
 
-#: ../src/widgets/toolbox.cpp:1087
+#: ../src/widgets/toolbox.cpp:1284
 msgid "Delete selected nodes"
-msgstr ""
+msgstr "מחק את המפרקים הנבחרים"
 
-#: ../src/widgets/toolbox.cpp:1097
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:1294
 msgid "Join endnodes"
-msgstr "×\90×\97×\93 ×¦×\9eת×\99×\9d"
+msgstr "צרף ×\9eפרק×\99 ×§×¦×\94"
 
-#: ../src/widgets/toolbox.cpp:1098
+#: ../src/widgets/toolbox.cpp:1295
 msgid "Join selected endnodes"
-msgstr ""
+msgstr "צרף את מפרקי הקצה הנבחרים"
 
-#: ../src/widgets/toolbox.cpp:1101
+#: ../src/widgets/toolbox.cpp:1298
 msgid "Join"
-msgstr "×\90×\97×\93"
+msgstr "צרף"
 
-#: ../src/widgets/toolbox.cpp:1108
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:1305
 msgid "Break nodes"
-msgstr "×\94×\96×\96 ×¦×\9eתים"
+msgstr "ש×\91×\95ר ×\9eפרקים"
 
-#: ../src/widgets/toolbox.cpp:1109
+#: ../src/widgets/toolbox.cpp:1306
 msgid "Break path at selected nodes"
-msgstr ""
+msgstr "שבור את הנתיב במפרקים הנבחרים"
 
-#: ../src/widgets/toolbox.cpp:1119
+#: ../src/widgets/toolbox.cpp:1316
 msgid "Join with segment"
-msgstr ""
+msgstr "צרף עם מקטע"
 
-#: ../src/widgets/toolbox.cpp:1120
+#: ../src/widgets/toolbox.cpp:1317
 msgid "Join selected endnodes with a new segment"
-msgstr ""
+msgstr "צרף את מפרקי הקצה הנבחרים עם מקטע חדש"
 
-#: ../src/widgets/toolbox.cpp:1130
+#: ../src/widgets/toolbox.cpp:1327
 msgid "Delete segment between two non-endpoint nodes"
-msgstr ""
+msgstr "מחק מקטע בין שתי נקודות שאינן מפרקי קצה"
 
-#: ../src/widgets/toolbox.cpp:1139
+#: ../src/widgets/toolbox.cpp:1336
 msgid "Node Cusp"
-msgstr ""
+msgstr "מפרק חוד"
 
-#: ../src/widgets/toolbox.cpp:1140
+#: ../src/widgets/toolbox.cpp:1337
 msgid "Make selected nodes corner"
-msgstr ""
+msgstr "הפוך את המפרקים הנבחרים לפינה"
 
-#: ../src/widgets/toolbox.cpp:1149
+#: ../src/widgets/toolbox.cpp:1346
 msgid "Node Smooth"
-msgstr ""
+msgstr "החלק מפרק"
 
-#: ../src/widgets/toolbox.cpp:1150
+#: ../src/widgets/toolbox.cpp:1347
 msgid "Make selected nodes smooth"
-msgstr ""
+msgstr "החלק את המפרקים הנבחרים"
 
-#: ../src/widgets/toolbox.cpp:1159
+#: ../src/widgets/toolbox.cpp:1356
 msgid "Node Symmetric"
-msgstr ""
+msgstr "מפרק סימטרי"
 
-#: ../src/widgets/toolbox.cpp:1160
+#: ../src/widgets/toolbox.cpp:1357
 msgid "Make selected nodes symmetric"
-msgstr ""
+msgstr "הפוך את המפרקים הנבחרים לסימטריים"
 
-#: ../src/widgets/toolbox.cpp:1169
+#: ../src/widgets/toolbox.cpp:1366
+msgid "Node Auto"
+msgstr "נתיב אוטו'"
+
+#: ../src/widgets/toolbox.cpp:1367
+msgid "Make selected nodes auto-smooth"
+msgstr "הפוך את המפרקים הנבחרים לחלקים אוטומטית"
+
+#: ../src/widgets/toolbox.cpp:1376
 msgid "Node Line"
-msgstr ""
+msgstr "מפרק קו"
 
-#: ../src/widgets/toolbox.cpp:1170
+#: ../src/widgets/toolbox.cpp:1377
 msgid "Make selected segments lines"
-msgstr ""
+msgstr "הפוך את המקטעים הנבחרים לקווים"
 
-#: ../src/widgets/toolbox.cpp:1179
+#: ../src/widgets/toolbox.cpp:1386
 msgid "Node Curve"
-msgstr ""
+msgstr "מפרק עיקול"
 
-#: ../src/widgets/toolbox.cpp:1180
+#: ../src/widgets/toolbox.cpp:1387
 msgid "Make selected segments curves"
-msgstr ""
+msgstr "הפוך את המקטעים הנבחרים לעיקולים"
 
-#: ../src/widgets/toolbox.cpp:1189
+#: ../src/widgets/toolbox.cpp:1396
 msgid "Show Handles"
-msgstr ""
+msgstr "הצג ידיות"
 
-#: ../src/widgets/toolbox.cpp:1190
+#: ../src/widgets/toolbox.cpp:1397
 msgid "Show the Bezier handles of selected nodes"
-msgstr ""
+msgstr "הצג את ידיות הבזייה של המפרקים הנבחרים"
 
-#: ../src/widgets/toolbox.cpp:1200
+#: ../src/widgets/toolbox.cpp:1407
 msgid "Show Outline"
-msgstr ""
+msgstr "הצג קו מתאר"
 
-#: ../src/widgets/toolbox.cpp:1201
+#: ../src/widgets/toolbox.cpp:1408
 msgid "Show the outline of the path"
-msgstr ""
+msgstr "הצג את קו המתאר של הנתיב"
 
-#: ../src/widgets/toolbox.cpp:1211
+#: ../src/widgets/toolbox.cpp:1418
 msgid "Next path effect parameter"
-msgstr ""
+msgstr "פרמטר אפקט הנתיב הבא"
 
-#: ../src/widgets/toolbox.cpp:1212
+#: ../src/widgets/toolbox.cpp:1419
 msgid "Show next path effect parameter for editing"
-msgstr ""
+msgstr "הצג את פרמטר אפקט הנתיב הבא לעריכה"
 
-#: ../src/widgets/toolbox.cpp:1223
+#: ../src/widgets/toolbox.cpp:1430
 msgid "Edit the clipping path of the object"
-msgstr ""
+msgstr "ערוך את הנתיב החותך של הפריט"
 
-#: ../src/widgets/toolbox.cpp:1233
+#: ../src/widgets/toolbox.cpp:1440
 msgid "Edit mask path"
-msgstr ""
+msgstr "ערוך את נתיב המסכה"
 
-#: ../src/widgets/toolbox.cpp:1234
+#: ../src/widgets/toolbox.cpp:1441
 msgid "Edit the mask of the object"
-msgstr ""
+msgstr "ערוך את מסכת הפריט"
 
-#: ../src/widgets/toolbox.cpp:1248
+#: ../src/widgets/toolbox.cpp:1455
 msgid "X coordinate:"
-msgstr ""
+msgstr "נקודת ציון X:"
 
-#: ../src/widgets/toolbox.cpp:1248
+#: ../src/widgets/toolbox.cpp:1455
 msgid "X coordinate of selected node(s)"
-msgstr ""
+msgstr "נקודת הציון בציר ה־X של המפרק/ים הנבחר/ים"
 
-#: ../src/widgets/toolbox.cpp:1266
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Y coordinate:"
-msgstr ""
+msgstr "נקודת ציון Y:"
 
-#: ../src/widgets/toolbox.cpp:1266
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Y coordinate of selected node(s)"
-msgstr ""
+msgstr "נקודת הציון בציר ה־Y של המפרק/ים הנבחר/ים"
 
-#: ../src/widgets/toolbox.cpp:1688
+#: ../src/widgets/toolbox.cpp:1916
 msgid "Star: Change number of corners"
-msgstr ""
+msgstr "כוכב: שנה את מספר הפינות"
 
-#: ../src/widgets/toolbox.cpp:1730
+#: ../src/widgets/toolbox.cpp:1959
 msgid "Star: Change spoke ratio"
-msgstr ""
+msgstr "כוכב: שנה את יחס הקרניים"
 
-#: ../src/widgets/toolbox.cpp:1773
+#: ../src/widgets/toolbox.cpp:2002
 msgid "Make polygon"
-msgstr ""
+msgstr "הפוך למצולע"
 
-#: ../src/widgets/toolbox.cpp:1773
+#: ../src/widgets/toolbox.cpp:2002
 msgid "Make star"
-msgstr ""
+msgstr "הפוך לכוכב"
 
-#: ../src/widgets/toolbox.cpp:1808
+#: ../src/widgets/toolbox.cpp:2038
 msgid "Star: Change rounding"
-msgstr ""
+msgstr "כוכב: החלף עיגול"
 
-#: ../src/widgets/toolbox.cpp:1842
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Star: Change randomization"
-msgstr ""
+msgstr "כוכב: שנה אקראיות"
 
-#: ../src/widgets/toolbox.cpp:2029
+#: ../src/widgets/toolbox.cpp:2264
 msgid "Regular polygon (with one handle) instead of a star"
-msgstr ""
+msgstr "מצולע רגיל (עם ידית אחת) במקום כוכב"
 
-#: ../src/widgets/toolbox.cpp:2036
+#: ../src/widgets/toolbox.cpp:2271
 msgid "Star instead of a regular polygon (with one handle)"
-msgstr ""
+msgstr "כוכב במקום מצולע רגיל (בעל ידית אחת)"
 
-#: ../src/widgets/toolbox.cpp:2057
+#: ../src/widgets/toolbox.cpp:2292
 msgid "triangle/tri-star"
-msgstr ""
+msgstr "משולש/כוכב 3"
 
-#: ../src/widgets/toolbox.cpp:2057
+#: ../src/widgets/toolbox.cpp:2292
 msgid "square/quad-star"
-msgstr ""
+msgstr "ריבוע/כוכב 4"
 
-#: ../src/widgets/toolbox.cpp:2057
+#: ../src/widgets/toolbox.cpp:2292
 msgid "pentagon/five-pointed star"
-msgstr ""
+msgstr "מחומש/כוכב 5"
 
-#: ../src/widgets/toolbox.cpp:2057
+#: ../src/widgets/toolbox.cpp:2292
 msgid "hexagon/six-pointed star"
-msgstr ""
+msgstr "משושה/כוכב 6"
 
-#: ../src/widgets/toolbox.cpp:2060
+#: ../src/widgets/toolbox.cpp:2295
 msgid "Corners"
 msgstr "פינות"
 
-#: ../src/widgets/toolbox.cpp:2060
+#: ../src/widgets/toolbox.cpp:2295
 msgid "Corners:"
 msgstr "פינות:"
 
-#: ../src/widgets/toolbox.cpp:2060
+#: ../src/widgets/toolbox.cpp:2295
 msgid "Number of corners of a polygon or star"
-msgstr ""
+msgstr "מספר הפינות של המצולע או הכוכב"
 
-#: ../src/widgets/toolbox.cpp:2073
+#: ../src/widgets/toolbox.cpp:2308
 msgid "thin-ray star"
-msgstr ""
+msgstr "כוכב קרן־צרה"
 
-#: ../src/widgets/toolbox.cpp:2073
+#: ../src/widgets/toolbox.cpp:2308
 msgid "pentagram"
-msgstr ""
+msgstr "כוכב מחומש"
 
-#: ../src/widgets/toolbox.cpp:2073
+#: ../src/widgets/toolbox.cpp:2308
 msgid "hexagram"
-msgstr ""
+msgstr "מגן דוד"
 
-#: ../src/widgets/toolbox.cpp:2073
+#: ../src/widgets/toolbox.cpp:2308
 msgid "heptagram"
-msgstr ""
+msgstr "כוכב משובע"
 
-#: ../src/widgets/toolbox.cpp:2073
+#: ../src/widgets/toolbox.cpp:2308
 msgid "octagram"
-msgstr ""
+msgstr "כוכב מתומן"
 
-#: ../src/widgets/toolbox.cpp:2073
+#: ../src/widgets/toolbox.cpp:2308
 msgid "regular polygon"
-msgstr ""
+msgstr "מצולע רגיל"
 
-#: ../src/widgets/toolbox.cpp:2076
+#: ../src/widgets/toolbox.cpp:2311
 msgid "Spoke ratio"
-msgstr ""
+msgstr "יחס קרן"
 
-#: ../src/widgets/toolbox.cpp:2076
+#: ../src/widgets/toolbox.cpp:2311
 msgid "Spoke ratio:"
-msgstr ""
+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:2079
+#: ../src/widgets/toolbox.cpp:2314
 msgid "Base radius to tip radius ratio"
-msgstr ""
+msgstr "יחס הרדיוס מהבסיס עד הקצה"
 
-#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2332
 msgid "stretched"
-msgstr ""
+msgstr "מתוח"
 
-#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2332
 msgid "twisted"
-msgstr ""
+msgstr "מעוות"
 
-#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2332
 msgid "slightly pinched"
-msgstr ""
+msgstr "מעט מקומץ"
 
-#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2332
 msgid "NOT rounded"
-msgstr ""
+msgstr "לא מעוגל"
 
-#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2332
 msgid "slightly rounded"
-msgstr ""
+msgstr "מעוגל במקצת"
 
-#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2332
 msgid "visibly rounded"
-msgstr ""
+msgstr "מעוגל ברורות"
 
-#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2332
 msgid "well rounded"
-msgstr ""
+msgstr "מעוגל כיאה"
 
-#: ../src/widgets/toolbox.cpp:2097
+#: ../src/widgets/toolbox.cpp:2332
 msgid "amply rounded"
-msgstr ""
+msgstr "מעוגל בשפע"
 
-#: ../src/widgets/toolbox.cpp:2097 ../src/widgets/toolbox.cpp:2112
+#: ../src/widgets/toolbox.cpp:2332
+#: ../src/widgets/toolbox.cpp:2347
 msgid "blown up"
-msgstr ""
+msgstr "מנופח"
 
-#: ../src/widgets/toolbox.cpp:2100
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:2335
 msgid "Rounded"
-msgstr "רנ×\93ר"
+msgstr "×\9e×¢×\95×\92×\9c"
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2335
 msgid "Rounded:"
-msgstr ""
+msgstr "מעוגל:"
 
-#: ../src/widgets/toolbox.cpp:2100
+#: ../src/widgets/toolbox.cpp:2335
 msgid "How much rounded are the corners (0 for sharp)"
-msgstr ""
+msgstr "כמה מעוגלות הן הפינות (0 לפינה חדה)"
 
-#: ../src/widgets/toolbox.cpp:2112
+#: ../src/widgets/toolbox.cpp:2347
 msgid "NOT randomized"
-msgstr ""
+msgstr "לא אקראי"
 
-#: ../src/widgets/toolbox.cpp:2112
+#: ../src/widgets/toolbox.cpp:2347
 msgid "slightly irregular"
-msgstr ""
+msgstr "מעט חריג"
 
-#: ../src/widgets/toolbox.cpp:2112
+#: ../src/widgets/toolbox.cpp:2347
 msgid "visibly randomized"
-msgstr ""
+msgstr "אקראי ברורות"
 
-#: ../src/widgets/toolbox.cpp:2112
+#: ../src/widgets/toolbox.cpp:2347
 msgid "strongly randomized"
-msgstr ""
+msgstr "אקראי בחוזקה"
 
-#: ../src/widgets/toolbox.cpp:2115
+#: ../src/widgets/toolbox.cpp:2350
 msgid "Randomized"
-msgstr ""
+msgstr "אקראי"
 
-#: ../src/widgets/toolbox.cpp:2115
+#: ../src/widgets/toolbox.cpp:2350
 msgid "Randomized:"
-msgstr ""
+msgstr "אקראיות:"
 
-#: ../src/widgets/toolbox.cpp:2115
+#: ../src/widgets/toolbox.cpp:2350
 msgid "Scatter randomly the corners and angles"
-msgstr ""
+msgstr "פזר את הפינות והזוויות באופן אקראי"
 
-#: ../src/widgets/toolbox.cpp:2130 ../src/widgets/toolbox.cpp:3067
-#: ../src/widgets/toolbox.cpp:3847 ../src/widgets/toolbox.cpp:5804
+#: ../src/widgets/toolbox.cpp:2365
+#: ../src/widgets/toolbox.cpp:3304
+#: ../src/widgets/toolbox.cpp:3564
+#: ../src/widgets/toolbox.cpp:6755
 msgid "Defaults"
-msgstr ""
+msgstr "ברירות מחדל"
 
-#: ../src/widgets/toolbox.cpp:2131 ../src/widgets/toolbox.cpp:3068
-msgid ""
-"Reset shape parameters to defaults (use Inkscape Preferences > Tools to "
-"change defaults)"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:2366
+#: ../src/widgets/toolbox.cpp:3305
+msgid "Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
+msgstr "אפס את הפרמטרים של הצורה לברירות המחדל (השתמש בהעדפות אינקסקייפ -> כלים כדי לשנות את ברירות המחדל)"
 
-#: ../src/widgets/toolbox.cpp:2203
+#: ../src/widgets/toolbox.cpp:2439
 msgid "Change rectangle"
-msgstr ""
+msgstr "שנה מרובע"
 
-#: ../src/widgets/toolbox.cpp:2396
+#: ../src/widgets/toolbox.cpp:2632
 msgid "W:"
-msgstr ""
+msgstr "ר:"
 
-#: ../src/widgets/toolbox.cpp:2396
+#: ../src/widgets/toolbox.cpp:2632
 msgid "Width of rectangle"
-msgstr ""
+msgstr "רוחב המרובע"
 
-#: ../src/widgets/toolbox.cpp:2413
+#: ../src/widgets/toolbox.cpp:2649
 msgid "H:"
-msgstr ""
+msgstr "או:"
 
-#: ../src/widgets/toolbox.cpp:2413
+#: ../src/widgets/toolbox.cpp:2649
 msgid "Height of rectangle"
-msgstr ""
+msgstr "גובה המרובע"
 
-#: ../src/widgets/toolbox.cpp:2427 ../src/widgets/toolbox.cpp:2442
+#: ../src/widgets/toolbox.cpp:2663
+#: ../src/widgets/toolbox.cpp:2678
 msgid "not rounded"
-msgstr ""
+msgstr "לא מעוגל"
 
-#: ../src/widgets/toolbox.cpp:2430
+#: ../src/widgets/toolbox.cpp:2666
 msgid "Horizontal radius"
-msgstr ""
+msgstr "רדיוס אופקי"
 
-#: ../src/widgets/toolbox.cpp:2430
+#: ../src/widgets/toolbox.cpp:2666
 msgid "Rx:"
-msgstr ""
+msgstr "רx:"
 
-#: ../src/widgets/toolbox.cpp:2430
+#: ../src/widgets/toolbox.cpp:2666
 msgid "Horizontal radius of rounded corners"
-msgstr ""
+msgstr "רדיוס אופקי של הפינות המעוגלות"
 
-#: ../src/widgets/toolbox.cpp:2445
+#: ../src/widgets/toolbox.cpp:2681
 msgid "Vertical radius"
-msgstr ""
+msgstr "רדיוס אנכי"
 
-#: ../src/widgets/toolbox.cpp:2445
+#: ../src/widgets/toolbox.cpp:2681
 msgid "Ry:"
-msgstr ""
+msgstr "רy:"
 
-#: ../src/widgets/toolbox.cpp:2445
+#: ../src/widgets/toolbox.cpp:2681
 msgid "Vertical radius of rounded corners"
-msgstr ""
+msgstr "רדיוס אנכי של הפינות המעוגלות"
 
-#: ../src/widgets/toolbox.cpp:2464
+#: ../src/widgets/toolbox.cpp:2700
 msgid "Not rounded"
-msgstr ""
+msgstr "לא מעוגלות"
 
-#: ../src/widgets/toolbox.cpp:2465
+#: ../src/widgets/toolbox.cpp:2701
 msgid "Make corners sharp"
-msgstr ""
+msgstr "הפוך את הפינות לחדות"
 
 #. TODO: use the correct axis here, too
-#: ../src/widgets/toolbox.cpp:2654
+#: ../src/widgets/toolbox.cpp:2889
 msgid "3D Box: Change perspective (angle of infinite axis)"
-msgstr ""
+msgstr "תיבת תלת מימדית: שנה פרספקטיבה (זווית של ציר אין סופי)"
 
-#: ../src/widgets/toolbox.cpp:2723
+#: ../src/widgets/toolbox.cpp:2959
 msgid "Angle in X direction"
-msgstr ""
+msgstr "הזווית בכיוון ה־X"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:2725
+#: ../src/widgets/toolbox.cpp:2961
 msgid "Angle of PLs in X direction"
-msgstr ""
+msgstr "הזווית של קווי הפרספקטיבה בכיוון ה־X"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:2747
+#: ../src/widgets/toolbox.cpp:2983
 msgid "State of VP in X direction"
-msgstr ""
+msgstr "מצב נקודת ההעלמות בכיוון ה־X"
 
-#: ../src/widgets/toolbox.cpp:2748
+#: ../src/widgets/toolbox.cpp:2984
 msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
-msgstr ""
+msgstr "החלף את נקודת ההעלמות בכיוון ה־X בין 'סופי' ל־'אינסופי' (=מקביל)"
 
-#: ../src/widgets/toolbox.cpp:2763
+#: ../src/widgets/toolbox.cpp:2999
 msgid "Angle in Y direction"
-msgstr ""
+msgstr "הזווית בכיוון ה־Y"
 
-#: ../src/widgets/toolbox.cpp:2763
+#: ../src/widgets/toolbox.cpp:2999
 msgid "Angle Y:"
-msgstr ""
+msgstr "זווית Y:"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:2765
+#: ../src/widgets/toolbox.cpp:3001
 msgid "Angle of PLs in Y direction"
-msgstr ""
+msgstr "הזווית של קווי הפרספקטיבה בכיוון ה־Y"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:2786
+#: ../src/widgets/toolbox.cpp:3022
 msgid "State of VP in Y direction"
-msgstr ""
+msgstr "מצב נקודת ההעלמות בכיוון ה־Y"
 
-#: ../src/widgets/toolbox.cpp:2787
+#: ../src/widgets/toolbox.cpp:3023
 msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
-msgstr ""
+msgstr "החלף את נקודת ההעלמות בכיוון ה־Y בין 'סופי' ל־'אינסופי' (=מקביל)"
 
-#: ../src/widgets/toolbox.cpp:2802
+#: ../src/widgets/toolbox.cpp:3038
 msgid "Angle in Z direction"
-msgstr ""
+msgstr "הזווית בכיוון Z:"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:2804
+#: ../src/widgets/toolbox.cpp:3040
 msgid "Angle of PLs in Z direction"
-msgstr ""
+msgstr "הזווית של קווי הפרספקטיבה בכיוון ה־Z"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:2825
+#: ../src/widgets/toolbox.cpp:3061
 msgid "State of VP in Z direction"
-msgstr ""
+msgstr "מצב נקודת ההעלמות בכיוון ה־Z"
 
-#: ../src/widgets/toolbox.cpp:2826
+#: ../src/widgets/toolbox.cpp:3062
 msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
-msgstr ""
+msgstr "החלף את נקודת ההעלמות בכיוון ה־Z בין 'סופי' ל־'אינסופי' (=מקביל)"
 
-#: ../src/widgets/toolbox.cpp:2883
+#: ../src/widgets/toolbox.cpp:3120
 msgid "Change spiral"
-msgstr ""
+msgstr "שנה ספירלה"
 
-#: ../src/widgets/toolbox.cpp:3024
+#: ../src/widgets/toolbox.cpp:3261
 msgid "just a curve"
-msgstr ""
+msgstr "רק עיקול"
 
-#: ../src/widgets/toolbox.cpp:3024
+#: ../src/widgets/toolbox.cpp:3261
 msgid "one full revolution"
-msgstr ""
+msgstr "הקפה אחת מלאה"
 
-#: ../src/widgets/toolbox.cpp:3027
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:3264
 msgid "Number of turns"
-msgstr "×\9eספר ×¦×¢×\93×\99×\9d"
+msgstr "×\9eספר ×¤× ×\99×\95ת"
 
-#: ../src/widgets/toolbox.cpp:3027
+#: ../src/widgets/toolbox.cpp:3264
 msgid "Turns:"
-msgstr ""
+msgstr "פניות:"
 
-#: ../src/widgets/toolbox.cpp:3027
+#: ../src/widgets/toolbox.cpp:3264
 msgid "Number of revolutions"
-msgstr ""
+msgstr "מספר הקפות"
 
-#: ../src/widgets/toolbox.cpp:3038
+#: ../src/widgets/toolbox.cpp:3275
 msgid "circle"
-msgstr ""
+msgstr "עיגול"
 
-#: ../src/widgets/toolbox.cpp:3038
+#: ../src/widgets/toolbox.cpp:3275
 msgid "edge is much denser"
-msgstr ""
+msgstr "הקצה צפוף בהרבה יותר"
 
-#: ../src/widgets/toolbox.cpp:3038
+#: ../src/widgets/toolbox.cpp:3275
 msgid "edge is denser"
-msgstr ""
+msgstr "הקצה צפוף יותר"
 
-#: ../src/widgets/toolbox.cpp:3038
+#: ../src/widgets/toolbox.cpp:3275
 msgid "even"
-msgstr ""
+msgstr "שווה"
 
-#: ../src/widgets/toolbox.cpp:3038
+#: ../src/widgets/toolbox.cpp:3275
 msgid "center is denser"
-msgstr ""
+msgstr "המרכז צפוף יותר"
 
-#: ../src/widgets/toolbox.cpp:3038
+#: ../src/widgets/toolbox.cpp:3275
 msgid "center is much denser"
-msgstr ""
+msgstr "המרכז צפוף בהרבה יותר"
 
-#: ../src/widgets/toolbox.cpp:3041
+#: ../src/widgets/toolbox.cpp:3278
 msgid "Divergence"
-msgstr ""
+msgstr "סטייה"
 
-#: ../src/widgets/toolbox.cpp:3041
+#: ../src/widgets/toolbox.cpp:3278
 msgid "Divergence:"
-msgstr ""
+msgstr "סטייה:"
 
-#: ../src/widgets/toolbox.cpp:3041
+#: ../src/widgets/toolbox.cpp:3278
 msgid "How much denser/sparser are outer revolutions; 1 = uniform"
-msgstr ""
+msgstr "בכמה ההקפים החיצוניים יהיו דלילים/צפופים יותר; 1 = אחיד"
 
-#: ../src/widgets/toolbox.cpp:3052
+#: ../src/widgets/toolbox.cpp:3289
 msgid "starts from center"
-msgstr ""
+msgstr "מתחיל מהמרכז"
 
-#: ../src/widgets/toolbox.cpp:3052
+#: ../src/widgets/toolbox.cpp:3289
 msgid "starts mid-way"
-msgstr ""
+msgstr "מתחיל מאמצע הדרך"
 
-#: ../src/widgets/toolbox.cpp:3052
+#: ../src/widgets/toolbox.cpp:3289
 msgid "starts near edge"
-msgstr ""
+msgstr "מתחיל קרוב לקצה"
 
-#: ../src/widgets/toolbox.cpp:3055
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:3292
 msgid "Inner radius"
-msgstr "×\94פ×\95×\9a ×\92ר×\93×\99×\90× ×\98"
+msgstr "ר×\93×\99×\95ס ×¤× ×\99×\9e×\99"
 
-#: ../src/widgets/toolbox.cpp:3055
+#: ../src/widgets/toolbox.cpp:3292
 msgid "Inner radius:"
-msgstr ""
+msgstr "רדיוס פנימי:"
 
-#: ../src/widgets/toolbox.cpp:3055
+#: ../src/widgets/toolbox.cpp:3292
 msgid "Radius of the innermost revolution (relative to the spiral size)"
-msgstr ""
+msgstr "רדיוס ההקפה הפנימית ביותר (ביחד לגודל הספירלה)"
 
-#: ../src/widgets/toolbox.cpp:3101
-#, fuzzy
-msgid "<b>Mode:</b>"
-msgstr "<b>אליפסה</b>"
-
-#: ../src/widgets/toolbox.cpp:3121
-msgid "Bézier"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3365
+msgid "Bezier"
+msgstr "בזייה"
 
-#: ../src/widgets/toolbox.cpp:3122
-msgid "Regular Bézier mode"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3366
+msgid "Create regular Bezier path"
+msgstr "צור נתיב בזייה רגיל"
 
-#: ../src/widgets/toolbox.cpp:3128
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:3372
 msgid "Spiro"
-msgstr "פ×\97×\9d"
+msgstr "ספ×\99ר×\95"
 
-#: ../src/widgets/toolbox.cpp:3129
-msgid "Spiro splines mode"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3373
+msgid "Create Spiro path"
+msgstr "צור נתיב ספירו"
 
-#. Width
-#: ../src/widgets/toolbox.cpp:3238
-msgid "(pinch tweak)"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3380
+msgid "Zigzag"
+msgstr "זיגזג"
+
+#: ../src/widgets/toolbox.cpp:3381
+msgid "Create a sequence of straight line segments"
+msgstr "צור רצף של מקטעים של קווים ישרים"
+
+#: ../src/widgets/toolbox.cpp:3387
+msgid "Paraxial"
+msgstr "משני הכיוונים"
+
+#: ../src/widgets/toolbox.cpp:3388
+msgid "Create a sequence of paraxial line segments"
+msgstr "צור רצף של מקטעים משני הצדדים"
+
+#: ../src/widgets/toolbox.cpp:3396
+#: ../src/widgets/toolbox.cpp:3787
+#: ../share/extensions/extrude.inx.h:3
+msgid "Mode:"
+msgstr "מצב:"
+
+#: ../src/widgets/toolbox.cpp:3425
+msgid "Triangle in"
+msgstr "משולש פנים"
+
+#: ../src/widgets/toolbox.cpp:3426
+msgid "Triangle out"
+msgstr "משולש חוץ"
 
-#: ../src/widgets/toolbox.cpp:3238 ../src/widgets/toolbox.cpp:3254
-#: ../src/widgets/toolbox.cpp:3420 ../src/widgets/toolbox.cpp:3642
-#: ../src/widgets/toolbox.cpp:3674 ../src/widgets/toolbox.cpp:4315
+#: ../src/widgets/toolbox.cpp:3428
+msgid "From clipboard"
+msgstr "מלוח הגזירים"
+
+#: ../src/widgets/toolbox.cpp:3453
+#: ../src/widgets/toolbox.cpp:3454
+msgid "Shape:"
+msgstr "צורה:"
+
+#: ../src/widgets/toolbox.cpp:3538
+msgid "(many nodes, rough)"
+msgstr "(הרבה מפרקים, גס)"
+
+#: ../src/widgets/toolbox.cpp:3538
+#: ../src/widgets/toolbox.cpp:3658
+#: ../src/widgets/toolbox.cpp:3675
+#: ../src/widgets/toolbox.cpp:3878
+#: ../src/widgets/toolbox.cpp:4248
+#: ../src/widgets/toolbox.cpp:4281
+#: ../src/widgets/toolbox.cpp:5267
 msgid "(default)"
-msgstr ""
+msgstr "(ברירת מחדל)"
+
+#: ../src/widgets/toolbox.cpp:3538
+msgid "(few nodes, smooth)"
+msgstr "(מעט מפרקים, חלק)"
+
+#: ../src/widgets/toolbox.cpp:3541
+msgid "Smoothing:"
+msgstr "החלקה:"
+
+#: ../src/widgets/toolbox.cpp:3541
+msgid "Smoothing: "
+msgstr "החלקה:"
 
-#: ../src/widgets/toolbox.cpp:3238
+#: ../src/widgets/toolbox.cpp:3542
+msgid "How much smoothing (simplifying) is applied to the line"
+msgstr "כמה החלקה (פישוט) תחול על הקו"
+
+#: ../src/widgets/toolbox.cpp:3565
+msgid "Reset pencil parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
+msgstr "אפס את הפרמטרים של העפרון לברירות המחדל (השתמש בהעדפות אינקסקייפ -> כלים כדי לשנות את ברירות המחדל)"
+
+#. Width
+#: ../src/widgets/toolbox.cpp:3658
+msgid "(pinch tweak)"
+msgstr "(ויסות בצביטה)"
+
+#: ../src/widgets/toolbox.cpp:3658
 msgid "(broad tweak)"
-msgstr ""
+msgstr "(רוחב הויסות)"
 
-#: ../src/widgets/toolbox.cpp:3241
+#: ../src/widgets/toolbox.cpp:3661
 msgid "The width of the tweak area (relative to the visible canvas area)"
-msgstr ""
+msgstr "רוחב אזור הויסות (ביחס לאיזור הנראה של משטח הציור)"
 
 #. Force
-#: ../src/widgets/toolbox.cpp:3254
+#: ../src/widgets/toolbox.cpp:3675
 msgid "(minimum force)"
-msgstr ""
+msgstr "(חוזק מזערי)"
 
-#: ../src/widgets/toolbox.cpp:3254
+#: ../src/widgets/toolbox.cpp:3675
 msgid "(maximum force)"
-msgstr ""
+msgstr "(חוזק מרבי)"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3678
 msgid "Force"
-msgstr ""
+msgstr "חוזק"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3678
 msgid "Force:"
-msgstr ""
+msgstr "חוזק:"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3678
 msgid "The force of the tweak action"
-msgstr ""
+msgstr "חוזקה של פעולת הויסות"
 
-#: ../src/widgets/toolbox.cpp:3274
-msgid "Push mode"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3696
+msgid "Move mode"
+msgstr "מצב הזזה"
 
-#: ../src/widgets/toolbox.cpp:3275
-msgid "Push parts of paths in any direction"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3697
+msgid "Move objects in any direction"
+msgstr "הזז פריטים בכל כיוון"
 
-#: ../src/widgets/toolbox.cpp:3281
-msgid "Shrink mode"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3703
+msgid "Move in/out mode"
+msgstr "מצב הזזה פנימה/החוצה"
 
-#: ../src/widgets/toolbox.cpp:3282
-msgid "Shrink (inset) parts of paths"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3704
+msgid "Move objects towards cursor; with Shift from cursor"
+msgstr "הזז פריטים אל עבר הסמן; עם Shift הרחק מהסמן"
 
-#: ../src/widgets/toolbox.cpp:3288
-msgid "Grow mode"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3710
+msgid "Move jitter mode"
+msgstr "מצב הזזה מזערית"
 
-#: ../src/widgets/toolbox.cpp:3289
-msgid "Grow (outset) parts of paths"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3711
+msgid "Move objects in random directions"
+msgstr "הזז פריטים בכיוונים אקראיים"
 
-#: ../src/widgets/toolbox.cpp:3295
-msgid "Attract mode"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3717
+msgid "Scale mode"
+msgstr "מצב שינוי גודל"
 
-#: ../src/widgets/toolbox.cpp:3296
-msgid "Attract parts of paths towards cursor"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3718
+msgid "Scale objects, with Shift scale up"
+msgstr "שנה את גודל הפריטים, עם Shift להגדלה"
 
-#: ../src/widgets/toolbox.cpp:3302
-msgid "Repel mode"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3724
+msgid "Rotate mode"
+msgstr "מצב סיבוב"
 
-#: ../src/widgets/toolbox.cpp:3303
-msgid "Repel parts of paths from cursor"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3725
+msgid "Rotate objects, with Shift counterclockwise"
+msgstr "הטה פריטים, עם Shift נגד כיוון השעון"
+
+#: ../src/widgets/toolbox.cpp:3731
+msgid "Duplicate/delete mode"
+msgstr "מצב שיכפול/מחיקה"
+
+#: ../src/widgets/toolbox.cpp:3732
+msgid "Duplicate objects, with Shift delete"
+msgstr "שיכפול פריטים, עם Shift מחיקה"
+
+#: ../src/widgets/toolbox.cpp:3738
+msgid "Push mode"
+msgstr "מצב דחיפה"
+
+#: ../src/widgets/toolbox.cpp:3739
+msgid "Push parts of paths in any direction"
+msgstr "דחוף חלקים של נתיבים בכל כיוון"
 
-#: ../src/widgets/toolbox.cpp:3309
+#: ../src/widgets/toolbox.cpp:3745
+msgid "Shrink/grow mode"
+msgstr "מצב הגדלה/כיווץ"
+
+#: ../src/widgets/toolbox.cpp:3746
+msgid "Shrink (inset) parts of paths; with Shift grow (outset)"
+msgstr "כווץ (צמצם) חלקים מנתיבים; עם Shift כדי להגדיל (הרחב)"
+
+#: ../src/widgets/toolbox.cpp:3752
+msgid "Attract/repel mode"
+msgstr "מצב משיכה/דחייה"
+
+#: ../src/widgets/toolbox.cpp:3753
+msgid "Attract parts of paths towards cursor; with Shift from cursor"
+msgstr "משוך חלקים של הנתיבים אל עבר הסמן; עם Shift הרחק מהסמן"
+
+#: ../src/widgets/toolbox.cpp:3759
 msgid "Roughen mode"
-msgstr ""
+msgstr "מצב חיספוס"
 
-#: ../src/widgets/toolbox.cpp:3310
+#: ../src/widgets/toolbox.cpp:3760
 msgid "Roughen parts of paths"
-msgstr ""
+msgstr "חספס חלקים של נתיבים"
 
-#: ../src/widgets/toolbox.cpp:3316
+#: ../src/widgets/toolbox.cpp:3766
 msgid "Color paint mode"
-msgstr ""
+msgstr "מצב צביעה בצבע"
 
-#: ../src/widgets/toolbox.cpp:3317
+#: ../src/widgets/toolbox.cpp:3767
 msgid "Paint the tool's color upon selected objects"
-msgstr ""
+msgstr "צבע את צבע הכלי על פריטים נבחרים"
 
-#: ../src/widgets/toolbox.cpp:3323
+#: ../src/widgets/toolbox.cpp:3773
 msgid "Color jitter mode"
-msgstr ""
+msgstr "מצב עירבול צבעים"
 
-#: ../src/widgets/toolbox.cpp:3324
+#: ../src/widgets/toolbox.cpp:3774
 msgid "Jitter the colors of selected objects"
-msgstr ""
+msgstr "ערבל את הצבעים של הפריטים הנבחרים"
 
-#: ../src/widgets/toolbox.cpp:3329
-msgid "Mode:"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3780
+msgid "Blur mode"
+msgstr "מצב טשטוש"
 
-#: ../src/widgets/toolbox.cpp:3350
+#: ../src/widgets/toolbox.cpp:3781
+msgid "Blur selected objects more; with Shift, blur less"
+msgstr "הוסף לטשטש את הפריטים הנבחרים; עם Shift, לטשטש פחות"
+
+#: ../src/widgets/toolbox.cpp:3808
 msgid "Channels:"
-msgstr ""
+msgstr "ערוצים:"
 
-#: ../src/widgets/toolbox.cpp:3361
+#: ../src/widgets/toolbox.cpp:3819
 msgid "In color mode, act on objects' hue"
-msgstr ""
+msgstr "במצב צבע, פעל על גוון הפריט"
 
 #. TRANSLATORS:  "H" here stands for hue
-#: ../src/widgets/toolbox.cpp:3365
+#: ../src/widgets/toolbox.cpp:3823
 msgid "H"
-msgstr ""
+msgstr "H"
 
-#: ../src/widgets/toolbox.cpp:3376
+#: ../src/widgets/toolbox.cpp:3834
 msgid "In color mode, act on objects' saturation"
-msgstr ""
+msgstr "במצב צבע, פעל על רוויית הפריט"
 
 #. TRANSLATORS: "S" here stands for Saturation
-#: ../src/widgets/toolbox.cpp:3380
+#: ../src/widgets/toolbox.cpp:3838
 msgid "S"
-msgstr ""
+msgstr "S"
 
-#: ../src/widgets/toolbox.cpp:3391
+#: ../src/widgets/toolbox.cpp:3849
 msgid "In color mode, act on objects' lightness"
-msgstr ""
+msgstr "במצב צבע, פעל על תאורת הפריט"
 
 #. TRANSLATORS: "L" here stands for Lightness
-#: ../src/widgets/toolbox.cpp:3395
+#: ../src/widgets/toolbox.cpp:3853
 msgid "L"
-msgstr ""
+msgstr "L"
 
-#: ../src/widgets/toolbox.cpp:3406
+#: ../src/widgets/toolbox.cpp:3864
 msgid "In color mode, act on objects' opacity"
-msgstr ""
+msgstr "במצב צבע, פעל על אטימות הפריט"
 
 #. TRANSLATORS: "O" here stands for Opacity
-#: ../src/widgets/toolbox.cpp:3410
+#: ../src/widgets/toolbox.cpp:3868
 msgid "O"
-msgstr ""
+msgstr "O"
 
 #. Fidelity
-#: ../src/widgets/toolbox.cpp:3420
+#: ../src/widgets/toolbox.cpp:3878
 msgid "(rough, simplified)"
-msgstr ""
+msgstr "(מחוספס, מופשט)"
 
-#: ../src/widgets/toolbox.cpp:3420
+#: ../src/widgets/toolbox.cpp:3878
 msgid "(fine, but many nodes)"
-msgstr ""
+msgstr "(מעודן, אך בעל מפרקים רבים)"
 
-#: ../src/widgets/toolbox.cpp:3423
+#: ../src/widgets/toolbox.cpp:3881
 msgid "Fidelity"
-msgstr ""
+msgstr "דיוק"
 
-#: ../src/widgets/toolbox.cpp:3423
+#: ../src/widgets/toolbox.cpp:3881
 msgid "Fidelity:"
-msgstr ""
+msgstr "דיוק:"
 
-#: ../src/widgets/toolbox.cpp:3424
-msgid ""
-"Low fidelity simplifies paths; high fidelity preserves path features but may "
-"generate a lot of new nodes"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:3882
+msgid "Low fidelity simplifies paths; high fidelity preserves path features but may generate a lot of new nodes"
+msgstr "דיוק נמוך מפשט את הנתיבים; דיוק גבוה שומר את תכונות הצורה אך יוצר המון מפרקים"
 
-#: ../src/widgets/toolbox.cpp:3441 ../src/widgets/toolbox.cpp:3789
+#: ../src/widgets/toolbox.cpp:3899
+#: ../src/widgets/toolbox.cpp:4399
 msgid "Pressure"
-msgstr ""
+msgstr "לחץ"
 
-#: ../src/widgets/toolbox.cpp:3442
+#: ../src/widgets/toolbox.cpp:3900
 msgid "Use the pressure of the input device to alter the force of tweak action"
-msgstr ""
+msgstr "השתמש בלחץ התקן הקלט כדי לשנות את חוזק פעולת הויסות"
+
+#: ../src/widgets/toolbox.cpp:4080
+msgid "No preset"
+msgstr "אין ערכה"
+
+#: ../src/widgets/toolbox.cpp:4098
+msgid "Save..."
+msgstr "שמור..."
 
 #. Width
-#: ../src/widgets/toolbox.cpp:3642 ../src/widgets/toolbox.cpp:4315
+#: ../src/widgets/toolbox.cpp:4248
+#: ../src/widgets/toolbox.cpp:5267
 msgid "(hairline)"
-msgstr ""
+msgstr "(חוט השערה)"
 
-#: ../src/widgets/toolbox.cpp:3642 ../src/widgets/toolbox.cpp:4315
+#: ../src/widgets/toolbox.cpp:4248
+#: ../src/widgets/toolbox.cpp:5267
 msgid "(broad stroke)"
-msgstr ""
+msgstr "(סגנון רחב)"
 
-#: ../src/widgets/toolbox.cpp:3645 ../src/widgets/toolbox.cpp:4318
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:4251
+#: ../src/widgets/toolbox.cpp:5270
 msgid "Pen Width"
-msgstr "×¢×\95×\91×\99 ×§×\95"
+msgstr "×¢×\95×\91×\99 ×\94×¢×\98"
 
-#: ../src/widgets/toolbox.cpp:3646
+#: ../src/widgets/toolbox.cpp:4252
 msgid "The width of the calligraphic pen (relative to the visible canvas area)"
-msgstr ""
+msgstr "עובי העט הקליגרפית (ביחס למשטח הציור הנראה)"
 
 #. Thinning
-#: ../src/widgets/toolbox.cpp:3658
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(speed blows up stroke)"
-msgstr ""
+msgstr "(ניפוח קו מתאר מהיר)"
 
-#: ../src/widgets/toolbox.cpp:3658
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(slight widening)"
-msgstr ""
+msgstr "(עיבוי קל)"
 
-#: ../src/widgets/toolbox.cpp:3658
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(constant width)"
-msgstr ""
+msgstr "(עובי רציף)"
 
-#: ../src/widgets/toolbox.cpp:3658
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(slight thinning, default)"
-msgstr ""
+msgstr "(הצרה קלה, ברירת מחדל)"
 
-#: ../src/widgets/toolbox.cpp:3658
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(speed deflates stroke)"
-msgstr ""
+msgstr "(הצרת קו מתאר מהירה)"
 
-#: ../src/widgets/toolbox.cpp:3661
+#: ../src/widgets/toolbox.cpp:4268
 msgid "Stroke Thinning"
-msgstr ""
+msgstr "הצרת קו מתאר"
 
-#: ../src/widgets/toolbox.cpp:3661
+#: ../src/widgets/toolbox.cpp:4268
 msgid "Thinning:"
-msgstr ""
+msgstr "הצרה:"
 
-#: ../src/widgets/toolbox.cpp:3662
-msgid ""
-"How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 "
-"makes them broader, 0 makes width independent of velocity)"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:4269
+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:3674
+#: ../src/widgets/toolbox.cpp:4281
 msgid "(left edge up)"
-msgstr ""
+msgstr "(קצה שמאלה למעלה)"
 
-#: ../src/widgets/toolbox.cpp:3674
+#: ../src/widgets/toolbox.cpp:4281
 msgid "(horizontal)"
-msgstr ""
+msgstr "(אופקי)"
 
-#: ../src/widgets/toolbox.cpp:3674
+#: ../src/widgets/toolbox.cpp:4281
 msgid "(right edge up)"
-msgstr ""
+msgstr "(קצה ימני למעלה)"
 
-#: ../src/widgets/toolbox.cpp:3677
+#: ../src/widgets/toolbox.cpp:4284
 msgid "Pen Angle"
-msgstr ""
+msgstr "זווית העט"
 
-#: ../src/widgets/toolbox.cpp:3677
+#: ../src/widgets/toolbox.cpp:4284
 msgid "Angle:"
-msgstr ""
+msgstr "זווית:"
 
-#: ../src/widgets/toolbox.cpp:3678
-msgid ""
-"The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if "
-"fixation = 0)"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:4285
+msgid "The angle of the pen's nib (in degrees; 0 = horizontal; has no effect if fixation = 0)"
+msgstr "זווית חוד העט (במעלות; 0 = אופקי; אין שום השפעה אם הייצוב = 0)"
 
 #. Fixation
-#: ../src/widgets/toolbox.cpp:3692
+#: ../src/widgets/toolbox.cpp:4299
 msgid "(perpendicular to stroke, \"brush\")"
-msgstr ""
+msgstr "(מאונך לקו המתאר, \"מברשת\")"
 
-#: ../src/widgets/toolbox.cpp:3692
+#: ../src/widgets/toolbox.cpp:4299
 msgid "(almost fixed, default)"
-msgstr ""
+msgstr "(כמעט מקובע, ברירת מחדל)"
 
-#: ../src/widgets/toolbox.cpp:3692
+#: ../src/widgets/toolbox.cpp:4299
 msgid "(fixed by Angle, \"pen\")"
-msgstr ""
+msgstr "(מקובע לפי זווית, \"עט\")"
 
-#: ../src/widgets/toolbox.cpp:3695
+#: ../src/widgets/toolbox.cpp:4302
 msgid "Fixation"
-msgstr ""
+msgstr "ייצוב"
 
-#: ../src/widgets/toolbox.cpp:3695
+#: ../src/widgets/toolbox.cpp:4302
 msgid "Fixation:"
-msgstr ""
+msgstr "ייצוב:"
 
-#: ../src/widgets/toolbox.cpp:3696
-msgid ""
-"Angle behavior (0 = nib always perpendicular to stroke direction, 1 = fixed "
-"angle)"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:4303
+msgid "Angle behavior (0 = nib always perpendicular to stroke direction, 100 = fixed angle)"
+msgstr "התנהגות הזוויות (0 = החוד תמיד יהיה מאונך לכיוון קו המתאר, 100 = זווית קבועה)"
 
 #. Cap Rounding
-#: ../src/widgets/toolbox.cpp:3708
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(blunt caps, default)"
-msgstr ""
+msgstr "(חודים קהים, ברירת מחדל)"
 
-#: ../src/widgets/toolbox.cpp:3708
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(slightly bulging)"
-msgstr ""
+msgstr "(בולט במקצת)"
 
-#: ../src/widgets/toolbox.cpp:3708
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(approximately round)"
-msgstr ""
+msgstr "(מעוגל בקירוב)"
 
-#: ../src/widgets/toolbox.cpp:3708
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(long protruding caps)"
-msgstr ""
+msgstr "(סיומת בולטת וארוכה)"
 
-#: ../src/widgets/toolbox.cpp:3712
+#: ../src/widgets/toolbox.cpp:4319
 msgid "Cap rounding"
-msgstr ""
+msgstr "עיגול סיומת"
 
-#: ../src/widgets/toolbox.cpp:3712
+#: ../src/widgets/toolbox.cpp:4319
 msgid "Caps:"
-msgstr ""
+msgstr "סיומות:"
 
-#: ../src/widgets/toolbox.cpp:3713
-msgid ""
-"Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = "
-"round caps)"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:4320
+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:3725
+#: ../src/widgets/toolbox.cpp:4332
 msgid "(smooth line)"
-msgstr ""
+msgstr "(קו חלק)"
 
-#: ../src/widgets/toolbox.cpp:3725
+#: ../src/widgets/toolbox.cpp:4332
 msgid "(slight tremor)"
-msgstr ""
+msgstr "(זעזוע קל)"
 
-#: ../src/widgets/toolbox.cpp:3725
+#: ../src/widgets/toolbox.cpp:4332
 msgid "(noticeable tremor)"
-msgstr ""
+msgstr "(זעזוע מורגש)"
 
-#: ../src/widgets/toolbox.cpp:3725
+#: ../src/widgets/toolbox.cpp:4332
 msgid "(maximum tremor)"
-msgstr ""
+msgstr "(זעזוע מרבי)"
 
-#: ../src/widgets/toolbox.cpp:3728
+#: ../src/widgets/toolbox.cpp:4335
 msgid "Stroke Tremor"
-msgstr ""
+msgstr "זעזוע קו המתאר"
 
-#: ../src/widgets/toolbox.cpp:3728
+#: ../src/widgets/toolbox.cpp:4335
 msgid "Tremor:"
-msgstr ""
+msgstr "זעזוע:"
 
-#: ../src/widgets/toolbox.cpp:3729
+#: ../src/widgets/toolbox.cpp:4336
 msgid "Increase to make strokes rugged and trembling"
-msgstr ""
+msgstr "הגדל כדי להפוך את קווי המתאר למחוספסים ונרעדים"
 
 #. Wiggle
-#: ../src/widgets/toolbox.cpp:3742
+#: ../src/widgets/toolbox.cpp:4350
 msgid "(no wiggle)"
-msgstr ""
+msgstr "(ללא נידנוד)"
 
-#: ../src/widgets/toolbox.cpp:3742
+#: ../src/widgets/toolbox.cpp:4350
 msgid "(slight deviation)"
-msgstr ""
+msgstr "(סטייה קלה)"
 
-#: ../src/widgets/toolbox.cpp:3742
+#: ../src/widgets/toolbox.cpp:4350
 msgid "(wild waves and curls)"
-msgstr ""
+msgstr "(גלים וסלסולים פרועים)"
 
-#: ../src/widgets/toolbox.cpp:3745
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:4353
 msgid "Pen Wiggle"
-msgstr "עפר×\95×\9f"
+msgstr "× ×\93× ×\95×\93 ×¢×\98"
 
-#: ../src/widgets/toolbox.cpp:3745
+#: ../src/widgets/toolbox.cpp:4353
 msgid "Wiggle:"
-msgstr ""
+msgstr "נדנוד:"
 
-#: ../src/widgets/toolbox.cpp:3746
+#: ../src/widgets/toolbox.cpp:4354
 msgid "Increase to make the pen waver and wiggle"
-msgstr ""
+msgstr "הגדל כדי להפוך את העט לגלי ומתנודד יותר"
 
 #. Mass
-#: ../src/widgets/toolbox.cpp:3758
+#: ../src/widgets/toolbox.cpp:4367
 msgid "(no inertia)"
-msgstr ""
+msgstr "(ללא התמדה)"
 
-#: ../src/widgets/toolbox.cpp:3758
+#: ../src/widgets/toolbox.cpp:4367
 msgid "(slight smoothing, default)"
-msgstr ""
+msgstr "(החלקה קלה, ברירת מחדל)"
 
-#: ../src/widgets/toolbox.cpp:3758
+#: ../src/widgets/toolbox.cpp:4367
 msgid "(noticeable lagging)"
-msgstr ""
+msgstr "(השתרכות מורגשת)"
 
-#: ../src/widgets/toolbox.cpp:3758
+#: ../src/widgets/toolbox.cpp:4367
 msgid "(maximum inertia)"
-msgstr ""
+msgstr "(התמדה מרבית)"
 
-#: ../src/widgets/toolbox.cpp:3761
+#: ../src/widgets/toolbox.cpp:4370
 msgid "Pen Mass"
-msgstr ""
+msgstr "נפח העט"
 
-#: ../src/widgets/toolbox.cpp:3761
+#: ../src/widgets/toolbox.cpp:4370
 msgid "Mass:"
-msgstr ""
+msgstr "נפח:"
 
-#: ../src/widgets/toolbox.cpp:3762
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Increase to make the pen drag behind, as if slowed by inertia"
-msgstr ""
+msgstr "הגדל כדי לגרום לאט להשתרך מאחור, כאילו נמשך בידי כוח ההתמדה"
 
-#: ../src/widgets/toolbox.cpp:3776
+#: ../src/widgets/toolbox.cpp:4386
 msgid "Trace Background"
-msgstr ""
+msgstr "עקוב אחר הרקע"
 
-#: ../src/widgets/toolbox.cpp:3777
-msgid ""
-"Trace the lightness of the background by the width of the pen (white - "
-"minimum width, black - maximum width)"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:4387
+msgid "Trace the lightness of the background by the width of the pen (white - minimum width, black - maximum width)"
+msgstr "עקוב אחר תאורת הרקע לפי עובי העט (לבן - רוחב מזערי, שחור - רוחב מרבי)"
 
-#: ../src/widgets/toolbox.cpp:3790
+#: ../src/widgets/toolbox.cpp:4400
 msgid "Use the pressure of the input device to alter the width of the pen"
-msgstr ""
+msgstr "השתמש בעוצמת הלחיצה של התקן הקלט כדי לשנות את עובי העט"
 
-#: ../src/widgets/toolbox.cpp:3802
+#: ../src/widgets/toolbox.cpp:4412
 msgid "Tilt"
-msgstr ""
+msgstr "הטה"
 
-#: ../src/widgets/toolbox.cpp:3803
+#: ../src/widgets/toolbox.cpp:4413
 msgid "Use the tilt of the input device to alter the angle of the pen's nib"
-msgstr ""
-
-#: ../src/widgets/toolbox.cpp:3821
-msgid "No preset"
-msgstr ""
+msgstr "השתמש בהטיית התקן הקלט כדי לשנות את זווית חוד העט"
 
-#: ../src/widgets/toolbox.cpp:3836
-msgid "Change calligraphic profile"
-msgstr ""
-
-#: ../src/widgets/toolbox.cpp:3848
-msgid "Save current settings as new profile"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:4426
+msgid "Choose a preset"
+msgstr "בחר ערכה"
 
-#: ../src/widgets/toolbox.cpp:3933
+#: ../src/widgets/toolbox.cpp:4514
 msgid "Arc: Change start/end"
-msgstr ""
+msgstr "קשת: שנה התחלה/סיום"
 
-#: ../src/widgets/toolbox.cpp:4022
+#: ../src/widgets/toolbox.cpp:4578
 msgid "Arc: Change open/closed"
-msgstr ""
-
-#: ../src/widgets/toolbox.cpp:4146
-#, fuzzy
-msgid "Start"
-msgstr "התחלה:"
+msgstr "קשת: שנה פתוחה/סגורה"
 
-#: ../src/widgets/toolbox.cpp:4146
+#: ../src/widgets/toolbox.cpp:4704
 msgid "Start:"
 msgstr "התחלה:"
 
-#: ../src/widgets/toolbox.cpp:4147
+#: ../src/widgets/toolbox.cpp:4705
 msgid "The angle (in degrees) from the horizontal to the arc's start point"
-msgstr ""
-
-#: ../src/widgets/toolbox.cpp:4159
-#, fuzzy
-msgid "End"
-msgstr "סוף:"
+msgstr "הזווית (במעלות) מהאופק לנקודת התחלת הקשת"
 
-#: ../src/widgets/toolbox.cpp:4159
+#: ../src/widgets/toolbox.cpp:4717
 msgid "End:"
 msgstr "סוף:"
 
-#: ../src/widgets/toolbox.cpp:4160
+#: ../src/widgets/toolbox.cpp:4718
 msgid "The angle (in degrees) from the horizontal to the arc's end point"
-msgstr ""
+msgstr "הזווית (במעלות) מהאופק לנקודת קצה הקשת"
 
-#: ../src/widgets/toolbox.cpp:4176
+#: ../src/widgets/toolbox.cpp:4734
 msgid "Closed arc"
-msgstr ""
+msgstr "קשת סגורה"
 
-#: ../src/widgets/toolbox.cpp:4177
+#: ../src/widgets/toolbox.cpp:4735
 msgid "Switch to segment (closed shape with two radii)"
-msgstr ""
+msgstr "הפוך למקטע (צורה סגורה בעלת שני רדיוסים)"
 
-#: ../src/widgets/toolbox.cpp:4183
+#: ../src/widgets/toolbox.cpp:4741
 msgid "Open Arc"
-msgstr ""
+msgstr "קשת פתוחה"
 
-#: ../src/widgets/toolbox.cpp:4184
+#: ../src/widgets/toolbox.cpp:4742
 msgid "Switch to arc (unclosed shape)"
-msgstr ""
+msgstr "הפוך לקשת (צורה לא סגורה)"
 
-#: ../src/widgets/toolbox.cpp:4208
+#: ../src/widgets/toolbox.cpp:4765
 msgid "Make whole"
-msgstr ""
+msgstr "הפוך לשלמה"
 
-#: ../src/widgets/toolbox.cpp:4209
+#: ../src/widgets/toolbox.cpp:4766
 msgid "Make the shape a whole ellipse, not arc or segment"
-msgstr ""
+msgstr "הפוך את הצורה לאליפסה שלמה, לא קשת או מקטע"
 
-#: ../src/widgets/toolbox.cpp:4275
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:4835
 msgid "Opacity:"
-msgstr "ר×\99×\95×\95×\97:"
+msgstr "×\90×\98×\99×\9e×\95ת:"
 
-#: ../src/widgets/toolbox.cpp:4282
+#: ../src/widgets/toolbox.cpp:4842
 msgid "Pick opacity"
-msgstr ""
+msgstr "בחר אטימות"
 
-#: ../src/widgets/toolbox.cpp:4283
-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:4843
+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:4286
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:4846
 msgid "Pick"
-msgstr "×\94×\93×\91ק"
+msgstr "×\91×\97ר"
 
-#: ../src/widgets/toolbox.cpp:4295
+#: ../src/widgets/toolbox.cpp:4855
 msgid "Assign opacity"
-msgstr ""
+msgstr "הקצה אטימות"
 
-#: ../src/widgets/toolbox.cpp:4296
-msgid ""
-"If alpha was picked, assign it to selection as fill or stroke transparency"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:4856
+msgid "If alpha was picked, assign it to selection as fill or stroke transparency"
+msgstr "אם נבחרה שקיפות, הקצה אותה לבחירה בתור שקיפות למילוי או לקו המתאר"
 
-#: ../src/widgets/toolbox.cpp:4299
+#: ../src/widgets/toolbox.cpp:4859
 msgid "Assign"
-msgstr ""
+msgstr "הקצה"
 
-#: ../src/widgets/toolbox.cpp:4319
+#: ../src/widgets/toolbox.cpp:5110
+msgid "All inactive"
+msgstr "כל הלא פעילים"
+
+#: ../src/widgets/toolbox.cpp:5111
+msgid "No geometric tool is active"
+msgstr "אין כלי גאומטרי פעיל"
+
+#: ../src/widgets/toolbox.cpp:5112
+msgid "all_inactive"
+msgstr "כל ה_לא־פעילים"
+
+#: ../src/widgets/toolbox.cpp:5144
+msgid "Show limiting bounding box"
+msgstr "הצג את התיבה התוחמת המגבילה"
+
+#: ../src/widgets/toolbox.cpp:5145
+msgid "Show bounding box (used to cut infinite lines)"
+msgstr "הצג את התיבה התוחמת (משמשת לחיתוך קווים אינסופיים)"
+
+#: ../src/widgets/toolbox.cpp:5156
+msgid "Get limiting bounding box from selection"
+msgstr "קבל את התיבה התוחמת המגבילה מהבחירה"
+
+#: ../src/widgets/toolbox.cpp:5157
+msgid "Set limiting bounding box (used to cut infinite lines) to the bounding box of current selection"
+msgstr "הגדר את התיבה התוחמת המגבילה (משמש לחיתוך קווים אינסופיים) לתיבה התוחמת של הבחירה הנוכחית"
+
+#: ../src/widgets/toolbox.cpp:5169
+msgid "Choose a line segment type"
+msgstr "בחר את סוג קו המקטע"
+
+#: ../src/widgets/toolbox.cpp:5185
+msgid "Display measuring info"
+msgstr "הצג את נתוני המדידה"
+
+#: ../src/widgets/toolbox.cpp:5186
+msgid "Display measuring info for selected items"
+msgstr "הצג את נתוני המדידה עבור הפריטים הנבחרים"
+
+#: ../src/widgets/toolbox.cpp:5206
+msgid "Open LPE dialog"
+msgstr "פתח דיאלוג LPE"
+
+#: ../src/widgets/toolbox.cpp:5207
+msgid "Open LPE dialog (to adapt parameters numerically)"
+msgstr "פתח דו־שיח אפקט נתיב חי (כדי להשתמש בפרמטרים מספריים)"
+
+#: ../src/widgets/toolbox.cpp:5271
 msgid "The width of the eraser pen (relative to the visible canvas area)"
-msgstr ""
+msgstr "עובי כלי המוחק (ביחס למשטח הציור הגלוי)"
 
-#: ../src/widgets/toolbox.cpp:4336
+#: ../src/widgets/toolbox.cpp:5289
 msgid "Delete objects touched by the eraser"
-msgstr ""
+msgstr "מחק פריטים בהם נוגע המוחק"
 
-#: ../src/widgets/toolbox.cpp:4342
+#: ../src/widgets/toolbox.cpp:5295
 msgid "Cut"
-msgstr ""
+msgstr "גזור"
 
-#: ../src/widgets/toolbox.cpp:4343
+#: ../src/widgets/toolbox.cpp:5296
 msgid "Cut out from objects"
-msgstr ""
+msgstr "תגזיר מפריטים"
 
-#: ../src/widgets/toolbox.cpp:4678
+#: ../src/widgets/toolbox.cpp:5637
 msgid "Text: Change font family"
-msgstr ""
+msgstr "טקסט: שנה את משפחת הגופן"
 
-#: ../src/widgets/toolbox.cpp:4763
+#: ../src/widgets/toolbox.cpp:5726
 msgid "Text: Change alignment"
-msgstr ""
+msgstr "טקסט: שנה יישור"
 
-#: ../src/widgets/toolbox.cpp:4846
+#: ../src/widgets/toolbox.cpp:5805
 msgid "Text: Change font style"
-msgstr ""
+msgstr "טקסט: שנה את סגנון הגופן"
 
-#: ../src/widgets/toolbox.cpp:4893
+#: ../src/widgets/toolbox.cpp:5853
 msgid "Text: Change orientation"
-msgstr ""
+msgstr "טקסט: שנה אוריינטציה"
 
-#: ../src/widgets/toolbox.cpp:4992
+#: ../src/widgets/toolbox.cpp:5956
 msgid "Text: Change font size"
-msgstr ""
+msgstr "טקסט: שנה את גודל הגופן"
 
-#: ../src/widgets/toolbox.cpp:5232
-msgid ""
-"This font is currently not installed on your system. Inkscape will use the "
-"default font instead."
-msgstr ""
+#: ../src/widgets/toolbox.cpp:6191
+msgid "This font is currently not installed on your system. Inkscape will use the default font instead."
+msgstr "גופן זה אינו מתקן כעת במערכת שלך. אינקסקייפ תשתמש בגופן ברירת המחדל במקום."
 
-#: ../src/widgets/toolbox.cpp:5271
+#: ../src/widgets/toolbox.cpp:6227
 msgid "Align left"
-msgstr "×\99×\99שר ×\9c×\99×\9e×\99×\9f"
+msgstr "×\99×\99שר ×\9cש×\9e×\90×\9c"
 
-#: ../src/widgets/toolbox.cpp:5282
+#: ../src/widgets/toolbox.cpp:6238
 msgid "Center"
-msgstr "×\99×\99שר ×\9c×\9eר×\9b×\96"
+msgstr "מרכז"
 
-#: ../src/widgets/toolbox.cpp:5293
+#: ../src/widgets/toolbox.cpp:6249
 msgid "Align right"
-msgstr "×\99×\99שר ×\9cש×\9e×\90×\9c"
+msgstr "×\99×\99שר ×\9c×\99×\9e×\99×\9f"
 
-#: ../src/widgets/toolbox.cpp:5304
+#: ../src/widgets/toolbox.cpp:6260
 msgid "Justify"
-msgstr "×\99×\99שור אחיד"
+msgstr "פ×\99×\96ור אחיד"
 
-#: ../src/widgets/toolbox.cpp:5320
+#: ../src/widgets/toolbox.cpp:6275
 msgid "Bold"
 msgstr "מודגש"
 
-#: ../src/widgets/toolbox.cpp:5331
+#: ../src/widgets/toolbox.cpp:6286
 msgid "Italic"
 msgstr "נטוי"
 
-#: ../src/widgets/toolbox.cpp:5465
+#: ../src/widgets/toolbox.cpp:6419
 msgid "Change connector spacing"
-msgstr ""
+msgstr "שנה את ריווח המחברים"
 
-#: ../src/widgets/toolbox.cpp:5553
+#: ../src/widgets/toolbox.cpp:6502
 msgid "Avoid"
-msgstr ""
+msgstr "המנע"
 
-#: ../src/widgets/toolbox.cpp:5563
+#: ../src/widgets/toolbox.cpp:6512
 msgid "Ignore"
 msgstr "התעלם"
 
-#: ../src/widgets/toolbox.cpp:5575
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:6524
 msgid "Connector Spacing"
-msgstr "×\9e×\97×\91ר"
+msgstr "ר×\99×\95×\95×\97 ×\9e×\97×\91ר×\99×\9d"
 
-#: ../src/widgets/toolbox.cpp:5575
+#: ../src/widgets/toolbox.cpp:6524
 msgid "Spacing:"
 msgstr "ריווח:"
 
-#: ../src/widgets/toolbox.cpp:5576
+#: ../src/widgets/toolbox.cpp:6525
 msgid "The amount of space left around objects by auto-routing connectors"
-msgstr ""
+msgstr "המרווח שנשאר מסביב לפריטים על ידי ניתוב אוטומטי של מחברים"
 
-#: ../src/widgets/toolbox.cpp:5587
+#: ../src/widgets/toolbox.cpp:6536
 msgid "Graph"
-msgstr ""
+msgstr "תרשים"
 
-#: ../src/widgets/toolbox.cpp:5597
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:6546
 msgid "Connector Length"
-msgstr "מחבר"
+msgstr "×\90×\95ר×\9a ×\94×\9e×\97×\91ר"
 
-#: ../src/widgets/toolbox.cpp:5597
+#: ../src/widgets/toolbox.cpp:6546
 msgid "Length:"
 msgstr "אורך:"
 
-#: ../src/widgets/toolbox.cpp:5598
+#: ../src/widgets/toolbox.cpp:6547
 msgid "Ideal length for connectors when layout is applied"
-msgstr ""
+msgstr "אורך אידיאלי עבור מחברים כאשר הופעלה פריסה"
 
-#: ../src/widgets/toolbox.cpp:5610
+#: ../src/widgets/toolbox.cpp:6559
 msgid "Downwards"
-msgstr ""
+msgstr "כלפי מטה"
 
-#: ../src/widgets/toolbox.cpp:5611
+#: ../src/widgets/toolbox.cpp:6560
 msgid "Make connectors with end-markers (arrows) point downwards"
-msgstr ""
+msgstr "הגדר סמני קצה (חיצים) למחברים המצביעים כלפי מטה"
 
-#: ../src/widgets/toolbox.cpp:5627
+#: ../src/widgets/toolbox.cpp:6575
 msgid "Do not allow overlapping shapes"
-msgstr ""
+msgstr "אל תאפשר את חפיפת הצורות"
 
-#: ../src/widgets/toolbox.cpp:5728
+#: ../src/widgets/toolbox.cpp:6678
 msgid "Fill by"
-msgstr ""
+msgstr "מלא באמצעות"
 
-#: ../src/widgets/toolbox.cpp:5729
+#: ../src/widgets/toolbox.cpp:6679
 msgid "Fill by:"
-msgstr ""
+msgstr "מלא באמצעות:"
 
-#: ../src/widgets/toolbox.cpp:5741
+#: ../src/widgets/toolbox.cpp:6691
 msgid "Fill Threshold"
-msgstr ""
+msgstr "סף מילוי"
 
-#: ../src/widgets/toolbox.cpp:5742
-msgid ""
-"The maximum allowed difference between the clicked pixel and the neighboring "
-"pixels to be counted in the fill"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:6692
+msgid "The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"
+msgstr "ההבדל המרבי המורשה בין הפיקסל שנלחץ לבין שכניו הפיקסלים למיספור במילוי"
 
-#: ../src/widgets/toolbox.cpp:5766
+#: ../src/widgets/toolbox.cpp:6717
 msgid "Grow/shrink by"
-msgstr ""
+msgstr "הגדל/הקטן ב־"
 
-#: ../src/widgets/toolbox.cpp:5766
+#: ../src/widgets/toolbox.cpp:6717
 msgid "Grow/shrink by:"
-msgstr ""
+msgstr "הגדל/הקטן ב־:"
 
-#: ../src/widgets/toolbox.cpp:5767
-msgid ""
-"The amount to grow (positive) or shrink (negative) the created fill path"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:6718
+msgid "The amount to grow (positive) or shrink (negative) the created fill path"
+msgstr "מהי כמות ההגדלה (חיובית) או ההקטנה (שלילי) למילוי הנתיב שנוצר"
 
-#: ../src/widgets/toolbox.cpp:5792
-#, fuzzy
+#: ../src/widgets/toolbox.cpp:6743
 msgid "Close gaps"
-msgstr "_סגור"
+msgstr "סגור פערים"
 
-#: ../src/widgets/toolbox.cpp:5793
+#: ../src/widgets/toolbox.cpp:6744
 msgid "Close gaps:"
-msgstr ""
+msgstr "סגור פערים:"
 
-#: ../src/widgets/toolbox.cpp:5805
-msgid ""
-"Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
-"to change defaults)"
-msgstr ""
+#: ../src/widgets/toolbox.cpp:6756
+msgid "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
+msgstr "אפס את משתני דלי הצבע לברירת המחדל (השתמש בהעדפות אינקסקייפ -> כלים כדי לשנות את ברירות המחדל)"
 
-#: ../share/extensions/dimension.py:97
+#: ../share/extensions/dimension.py:99
 msgid "Unable to process this object.  Try changing it into a path first."
-msgstr ""
+msgstr "לא ניתן לעבד אובייקט זה.  נסה לשנות אותו להתיב תחילה."
 
-#: ../share/extensions/embedimage.py:79
-msgid ""
-"No xlink:href or sodipodi:absref attributes found, or they do not point to "
-"an existing file! Unable to embed image."
-msgstr ""
+#: ../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 "לא נמצאו מאפייני xlink:href או sodipodi:absref, או שהם אינם מצביעים על קבצים קיימים! לא ניתן להטמיע את התמונה."
 
-#: ../share/extensions/embedimage.py:104
+#: ../share/extensions/embedimage.py:76
 #, python-format
-msgid ""
-"%s is not of type image/png, image/jpeg, image/bmp, image/gif, image/tiff, "
-"or image/x-icon"
-msgstr ""
+msgid "Sorry we could not locate %s"
+msgstr "מתנצלים על שלא הצלחנו לאתר את %s"
 
-#: ../share/extensions/embedimage.py:106
+#: ../share/extensions/embedimage.py:101
 #, python-format
-msgid "Sorry we could not locate %s"
-msgstr ""
+msgid "%s is not of type image/png, image/jpeg, image/bmp, image/gif, image/tiff, or image/x-icon"
+msgstr "%s איננו אחד מהסוגים image/png, image/jpeg, image/bmp, image/gif, image/tiff, או 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 ""
+msgid "The export_gpl.py module requires PyXML.  Please download the latest version from http://pyxml.sourceforge.net/."
+msgstr "המודול export_gpl.py דורש את  PyXML.  אנא הורד את הגרסה האחרונה מהכתובת http://pyxml.sourceforge.net/."
 
 #: ../share/extensions/extractimage.py:66
 msgid "Difficulty finding the image data."
-msgstr ""
+msgstr "קושי במציאת נתוני התמונה."
 
 #: ../share/extensions/inkex.py:61
-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 ""
+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:187
+#: ../share/extensions/inkex.py:186
 #, python-format
 msgid "No matching node for expression: %s"
-msgstr ""
+msgstr "אין מפרק התואם לביטוי: %s"
 
 #: ../share/extensions/markers_strokepaint.py:41
 #, python-format
 msgid "No style attribute found for id: %s"
-msgstr ""
+msgstr "לא נמצא ערך סגנון עבור המזהה: %s"
 
 #: ../share/extensions/markers_strokepaint.py:56
 #, python-format
 msgid "unable to locate marker: %s"
-msgstr ""
+msgstr "לא ניתן לאתר את הסמן: %s"
 
 #: ../share/extensions/pathalongpath.py:197
 #: ../share/extensions/pathscatter.py:208
 #: ../share/extensions/perspective.py:55
 #: ../share/extensions/summersnight.py:30
 msgid "This extension requires two selected paths."
-msgstr ""
+msgstr "הרחבה זו דורשת בחירת שני נתיבים."
 
 #: ../share/extensions/pathmodifier.py:229
 #, python-format
 msgid "Please first convert objects to paths!  (Got [%s].)"
-msgstr ""
+msgstr "אנא המר את הפריטים לנתיבים תחילה!  (התקבלו [%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 ""
+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 "כשל בייבוא המודולים numpy או numpy.linalg. מודולים אלו נדרשים על ידי הרחבה זו. אנא התקן אותם ונסה שנית.  במערכות דמויות דביאן ניתן לעשות זאת על ידי הרצת הפקודה: sudo apt-get install python-numpy."
 
 #: ../share/extensions/perspective.py:64
-msgid ""
-"This extension requires that the second selected path be four nodes long."
-msgstr ""
+msgid "This extension requires that the second selected path be four nodes long."
+msgstr "הרחבה זו דורשת שהנתיב השני הנבחר יהיה בן ארבע מפרקים."
 
-#: ../share/extensions/polyhedron_3d.py:60
-msgid ""
-"Failed to import the numpy module. This module is 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 ""
+#: ../share/extensions/polyhedron_3d.py:58
+msgid "Failed to import the numpy module. This module is 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 "כשל בייבוא המודול numpy. מודול זה נדרש על ידי הרחבה זו. אנא התקן אותו ונסה שוב.  במערכות דמויות דביאן ניתן לעשות זאת על ידי הרצת הפקודה: sudo apt-get install python-numpy."
+
+#: ../share/extensions/polyhedron_3d.py:329
+msgid "No face data found in specified file\n"
+msgstr "לא נמצאו נתוני פנים בקובץ שצויין\n"
+
+#: ../share/extensions/polyhedron_3d.py:335
+msgid "No edge data found in specified file\n"
+msgstr "לא נמצאו נתוני קצה בקובץ המצויין\n"
+
+#. we cannot generate a list of faces from the edges without a lot of computation
+#: ../share/extensions/polyhedron_3d.py:510
+msgid "Face Data Not Found. Ensure file contains face data, and check the file is imported as \"Face-Specifed\" under the \"Model File\" tab.\n"
+msgstr "נתוני הפנים לא נמצאו. ודאו כי הקובץ מכיל נתוני פנים, ובדוק שהקובץ מיובא בתור \"הגדרת פנים\" תחת הלשונית \"קובץ דגם\".\n"
+
+#: ../share/extensions/polyhedron_3d.py:512
+msgid "Internal Error. No view type selected\n"
+msgstr "שגיאה פנימית. לא נבחר סוג תצוגה\n"
 
 #: ../share/extensions/summersnight.py:32
 msgid "The second path must be exactly four nodes long."
-msgstr ""
+msgstr "על הנתיב השני להיות לפחות בן ארבע מפרקים."
 
-#: ../share/extensions/svg_and_media_zip_output.py:103
-#, fuzzy, python-format
+#: ../share/extensions/svg_and_media_zip_output.py:102
+#, python-format
 msgid "Could not locate file: %s"
-msgstr ""
-"לא ניתן ליצור את הקובץ %s.\n"
-"%s"
+msgstr "לא ניתן לאתר את הקובץ: %s"
 
 #. vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99
 #: ../share/extensions/addnodes.inx.h:1
 msgid "Add Nodes"
-msgstr "×\94×\95סף ×¦×\9eתים"
+msgstr "×\94×\95סף ×\9eפרקים"
 
 #: ../share/extensions/addnodes.inx.h:2
 msgid "By max. segment length"
-msgstr ""
+msgstr "לפי אורך המקטע המרבי"
 
 #: ../share/extensions/addnodes.inx.h:3
-#, fuzzy
 msgid "By number of segments"
-msgstr "×\9eספר ×¦×¢×\93ים"
+msgstr "×\9cפ×\99 ×\9eספר ×\94×\9eק×\98×¢ים"
 
 #: ../share/extensions/addnodes.inx.h:4
 msgid "Division method"
-msgstr ""
+msgstr "שיטת החלוקה"
 
 #: ../share/extensions/addnodes.inx.h:5
 msgid "Maximum segment length (px)"
-msgstr ""
+msgstr "אורך המקטע המרבי (פיקסלים)"
 
-#: ../share/extensions/addnodes.inx.h:6 ../share/extensions/edge3d.inx.h:6
-#: ../share/extensions/flatten.inx.h:3 ../share/extensions/fractalize.inx.h:2
+#: ../share/extensions/addnodes.inx.h:6
+#: ../share/extensions/edge3d.inx.h:6
+#: ../share/extensions/flatten.inx.h:3
+#: ../share/extensions/fractalize.inx.h:2
 #: ../share/extensions/markers_strokepaint.inx.h:2
 #: ../share/extensions/perspective.inx.h:1
 #: ../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 ""
+msgstr "שנה נתיב"
 
 #: ../share/extensions/addnodes.inx.h:7
-#, fuzzy
 msgid "Number of segments"
-msgstr "×\9eספר ×¦×¢×\93ים"
+msgstr "×\9eספר ×\94×\9eק×\98×¢ים"
 
 #: ../share/extensions/ai_input.inx.h:1
 msgid "AI 8.0 Input"
-msgstr ""
+msgstr "קלט AI 8.0"
 
 #: ../share/extensions/ai_input.inx.h:2
 msgid "Adobe Illustrator 8.0 and below (*.ai)"
-msgstr ""
+msgstr "Adobe Illustrator 8.0 ומטה (*.ai)"
 
 #: ../share/extensions/ai_input.inx.h:3
 msgid "Open files saved with Adobe Illustrator 8.0 or older"
-msgstr ""
+msgstr "פתח קבצים שנשמרו עם Adobe Illustrator 8.0 ומטה"
 
 #: ../share/extensions/ai_output.inx.h:1
 msgid "AI 8.0 Output"
-msgstr ""
+msgstr "פלט AI 8.0"
 
 #: ../share/extensions/ai_output.inx.h:2
 msgid "Adobe Illustrator 8.0 (*.ai)"
-msgstr ""
+msgstr "Adobe Illustrator 8.0 (*.ai)"
 
 #: ../share/extensions/ai_output.inx.h:3
 msgid "Write Adobe Illustrator 8.0 (Postscript-based)"
-msgstr ""
+msgstr "כתוב כ־Adobe Illustrator 8.0 (מבוסס-Postscript)"
 
 #: ../share/extensions/aisvg.inx.h:1
 msgid "AI SVG Input"
-msgstr ""
+msgstr "פלט של SVG ב־AI"
 
 #: ../share/extensions/aisvg.inx.h:2
 msgid "Adobe Illustrator SVG (*.ai.svg)"
-msgstr ""
+msgstr "Adobe Illustrator SVG (*.ai.svg)"
 
 #: ../share/extensions/aisvg.inx.h:3
 msgid "Cleans the cruft out of Adobe Illustrator SVGs before opening"
-msgstr ""
+msgstr "נקה את הפסולת מקבצי ה־SVG של Adobe Illustrator לפני הפתיחה"
 
 #: ../share/extensions/ccx_input.inx.h:1
 msgid "Corel DRAW Compressed Exchange files (.ccx)"
-msgstr ""
+msgstr "קבצי Corel DRAW Compressed Exchange (.ccx)"
 
 #: ../share/extensions/ccx_input.inx.h:2
 msgid "Corel DRAW Compressed Exchange files input"
-msgstr ""
+msgstr "קלט קבצי Corel DRAW Compressed Exchange"
 
 #: ../share/extensions/ccx_input.inx.h:3
 msgid "Open compressed exchange files saved in Corel DRAW"
-msgstr ""
+msgstr "פתח קבצי תחלופה דחוסים שנשמרו תחת Corel DRAW"
 
 #: ../share/extensions/cdr_input.inx.h:1
 msgid "Corel DRAW 7-X4 files (*.cdr)"
-msgstr ""
+msgstr "קבצי Corel DRAW 7-X4 (*.cdr)"
 
 #: ../share/extensions/cdr_input.inx.h:2
 msgid "Corel DRAW Input"
-msgstr ""
+msgstr "קלו Corel DRAW"
 
 #: ../share/extensions/cdr_input.inx.h:3
 msgid "Open files saved in Corel DRAW 7-X4"
-msgstr ""
+msgstr "פתח קבצים שנשמרו תחת Corel DRAW 7-X4"
 
 #: ../share/extensions/cdt_input.inx.h:1
 msgid "Corel DRAW 7-13 template files (.cdt)"
-msgstr ""
+msgstr "קבצי תבנית של Corel DRAW 7-13 (.cdt)"
 
 #: ../share/extensions/cdt_input.inx.h:2
 msgid "Corel DRAW templates input"
-msgstr ""
+msgstr "קלט של תבניות Corel DRAW"
 
 #: ../share/extensions/cdt_input.inx.h:3
 msgid "Open files saved in Corel DRAW 7-13"
-msgstr ""
+msgstr "פתח קבצים שנשמרו תחת Corel DRAW 7-13"
 
 #: ../share/extensions/cgm_input.inx.h:1
 msgid "Computer Graphics Metafile files (.cgm)"
-msgstr ""
+msgstr "קבצי Computer Graphics Metafile (.cgm)"
 
 #: ../share/extensions/cgm_input.inx.h:2
 msgid "Computer Graphics Metafile files input"
-msgstr ""
+msgstr "קלט קבצי Computer Graphics Metafile"
 
 #: ../share/extensions/cgm_input.inx.h:3
 msgid "Open Computer Graphics Metafile files"
-msgstr ""
+msgstr "קבצי Open Computer Graphics Metafile"
 
 #: ../share/extensions/cmx_input.inx.h:1
 msgid "Corel DRAW Presentation Exchange files (.cmx)"
-msgstr ""
+msgstr "קבצי Corel DRAW Presentation Exchange (.cmx)"
 
 #: ../share/extensions/cmx_input.inx.h:2
 msgid "Corel DRAW Presentation Exchange files input"
-msgstr ""
+msgstr "קלט קבצי Corel DRAW Presentation Exchange"
 
 #: ../share/extensions/cmx_input.inx.h:3
 msgid "Open presentation exchange files saved in Corel DRAW"
-msgstr ""
+msgstr "פתח קבצי מצגת תחלופיים שנשמרו תחת Corel DRAW"
 
 #: ../share/extensions/color_brighter.inx.h:1
 msgid "Brighter"
-msgstr ""
+msgstr "בהיר יותר"
 
 #: ../share/extensions/color_custom.inx.h:1
 msgid "Blue Function"
-msgstr ""
+msgstr "פונקציית כחול"
 
 #: ../share/extensions/color_custom.inx.h:4
 msgid "Green Function"
-msgstr ""
+msgstr "פונקציית ירוק"
 
 #: ../share/extensions/color_custom.inx.h:5
 msgid "Red Function"
-msgstr ""
+msgstr "פונקציית אדום"
 
 #: ../share/extensions/color_darker.inx.h:2
 msgid "Darker"
-msgstr ""
+msgstr "כהה יותר"
 
 #: ../share/extensions/color_desaturate.inx.h:2
 msgid "Desaturate"
-msgstr ""
+msgstr "ביטול הרוויה"
 
 #: ../share/extensions/color_grayscale.inx.h:2
 msgid "Grayscale"
-msgstr ""
+msgstr "גווני אפור"
 
 #: ../share/extensions/color_lesshue.inx.h:2
 msgid "Less Hue"
-msgstr ""
+msgstr "פחות גוון"
 
 #: ../share/extensions/color_lesslight.inx.h:2
 msgid "Less Light"
-msgstr ""
+msgstr "פחות אור"
 
 #: ../share/extensions/color_lesssaturation.inx.h:2
 msgid "Less Saturation"
-msgstr ""
+msgstr "פחות רוויה"
 
 #: ../share/extensions/color_morehue.inx.h:2
 msgid "More Hue"
-msgstr ""
+msgstr "יותר גוון"
 
 #: ../share/extensions/color_morelight.inx.h:2
 msgid "More Light"
-msgstr ""
+msgstr "יותר אור"
 
 #: ../share/extensions/color_moresaturation.inx.h:2
 msgid "More Saturation"
-msgstr ""
+msgstr "יותר רוויה"
 
 #: ../share/extensions/color_negative.inx.h:2
 msgid "Negative"
-msgstr ""
+msgstr "תשליל"
 
 #: ../share/extensions/color_randomize.inx.h:4
 msgid "Randomize"
-msgstr ""
+msgstr "בחר באקראי"
 
 #: ../share/extensions/color_removeblue.inx.h:2
 msgid "Remove Blue"
-msgstr ""
+msgstr "הסר כחול"
 
 #: ../share/extensions/color_removegreen.inx.h:2
 msgid "Remove Green"
-msgstr ""
+msgstr "הסר ירוק"
 
 #: ../share/extensions/color_removered.inx.h:2
 msgid "Remove Red"
-msgstr ""
+msgstr "הסר אדום"
 
 #: ../share/extensions/color_replace.inx.h:1
 msgid "By color (RRGGBB hex):"
-msgstr ""
+msgstr "לפי צבע (RRGGBB בהקסה):"
 
 #: ../share/extensions/color_replace.inx.h:3
-#, fuzzy
 msgid "Replace color"
-msgstr "×\94×\93×\91ק צבע"
+msgstr "×\94×\97×\9c×£ צבע"
 
 #: ../share/extensions/color_replace.inx.h:4
 msgid "Replace color (RRGGBB hex):"
-msgstr ""
+msgstr "החלף צבע (RRGGBB בהקסה):"
 
 #: ../share/extensions/color_rgbbarrel.inx.h:2
 msgid "RGB Barrel"
-msgstr ""
+msgstr "תוף ה־RGB"
 
 #: ../share/extensions/dia.inx.h:1
 msgid "A diagram created with the program Dia"
-msgstr ""
+msgstr "תרשים שנוצר עם התוכנה Dia"
 
 #: ../share/extensions/dia.inx.h:2
 msgid "Dia Diagram (*.dia)"
-msgstr ""
+msgstr "תרשים Dia (*.dia)"
 
 #: ../share/extensions/dia.inx.h:3
 msgid "Dia Input"
-msgstr ""
+msgstr "קלט Dia"
 
 #: ../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 ""
+msgid "In order to import Dia files, Dia itself must be installed.  You can get Dia at http://live.gnome.org/Dia"
+msgstr "על מנת ליבא קבצי Dia, עליך להתקין את Dia. ניתן להשיג את Dia בכתובת http://live.gnome.org/Dia"
 
 #: ../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 ""
+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 "הסקריפט dia2svg.sh אמור להיות מותקן עם הפצת האינקסקייפ שלך. אם אין לך אותו, ייתכן ומשהו אינו כשורה עם התקנת האינקסקייפ שלך."
 
-#: ../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 ""
+msgstr "חזיון נתיב"
 
 #: ../share/extensions/dimension.inx.h:3
-#, fuzzy
 msgid "X Offset"
-msgstr "×\94×\99ס×\98"
+msgstr "ק×\99×\96×\95×\96 ×\91Ö¾X"
 
 #: ../share/extensions/dimension.inx.h:4
-#, fuzzy
 msgid "Y Offset"
-msgstr "×\94×\99ס×\98"
+msgstr "ק×\99×\96×\95×\96 ×\91Ö¾Y"
 
 #: ../share/extensions/dots.inx.h:1
 msgid "Dot size"
-msgstr ""
+msgstr "גודל הנקודה"
 
 #: ../share/extensions/dots.inx.h:2
 msgid "Font size"
-msgstr ""
+msgstr "גודל הגופן"
 
 #: ../share/extensions/dots.inx.h:3
 msgid "Number Nodes"
-msgstr ""
+msgstr "מספר את המפרקים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:1
+msgid "Altitudes"
+msgstr "גבהים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:2
+msgid "Angle Bisectors"
+msgstr "מחברים זוויתיים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:3
+msgid "Centroid"
+msgstr "מרכז הצורה"
+
+#: ../share/extensions/draw_from_triangle.inx.h:4
+msgid "Circumcentre"
+msgstr "מפגש האנכים האמצעיים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:5
+msgid "Circumcircle"
+msgstr "עיגול חוסם"
+
+#: ../share/extensions/draw_from_triangle.inx.h:6
+msgid "Common Objects"
+msgstr "פריטים משותפים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:7
+msgid "Contact Triangle"
+msgstr "מגע במשולש"
+
+#: ../share/extensions/draw_from_triangle.inx.h:8
+msgid "Custom Point Specified By:"
+msgstr "הנקודה המותאמת מצויינת על ידי:"
+
+#: ../share/extensions/draw_from_triangle.inx.h:9
+msgid "Custom Points and Options"
+msgstr "נקודות מותאמות ואפשרויות"
+
+#: ../share/extensions/draw_from_triangle.inx.h:10
+msgid "Draw Circle About This Point"
+msgstr "צייר עיגול על נקודה זו"
+
+#: ../share/extensions/draw_from_triangle.inx.h:11
+msgid "Draw From Triangle"
+msgstr "צייר ממשולש"
+
+#: ../share/extensions/draw_from_triangle.inx.h:12
+msgid "Draw Isogonal Conjugate"
+msgstr "צייר מפגשים משתקפים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:13
+msgid "Draw Isotomic Conjugate"
+msgstr "צייר נקודת השתקפות"
+
+#: ../share/extensions/draw_from_triangle.inx.h:14
+msgid "Draw Marker At This Point"
+msgstr "צייר סמן בנקודה זו"
+
+#: ../share/extensions/draw_from_triangle.inx.h:15
+msgid "Excentral Triangle"
+msgstr "משולש חיצוני"
+
+#: ../share/extensions/draw_from_triangle.inx.h:16
+msgid "Excentres"
+msgstr "פנימיים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:17
+msgid "Excircles"
+msgstr "עיגולים חיצוניים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:18
+msgid "Extouch Triangle"
+msgstr "נוגעים במשולש מבחוץ"
+
+#: ../share/extensions/draw_from_triangle.inx.h:19
+msgid "Gergonne Point"
+msgstr "נקודת Gergonne"
+
+#: ../share/extensions/draw_from_triangle.inx.h:21
+msgid "Incentre"
+msgstr "חסום"
+
+#: ../share/extensions/draw_from_triangle.inx.h:22
+msgid "Incircle"
+msgstr "מעגל חסום"
+
+#: ../share/extensions/draw_from_triangle.inx.h:23
+msgid "Nagel Point"
+msgstr "נקודת Nagel"
+
+#: ../share/extensions/draw_from_triangle.inx.h:24
+msgid "Nine-Point Centre"
+msgstr "מרכז 9 נקודות"
+
+#: ../share/extensions/draw_from_triangle.inx.h:25
+msgid "Nine-Point Circle"
+msgstr "עיגול 9 נקודות"
+
+#: ../share/extensions/draw_from_triangle.inx.h:26
+msgid "Orthic Triangle"
+msgstr "משולש גבהים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:27
+msgid "Orthocentre"
+msgstr "מרכז הגבהים במשולש"
+
+#: ../share/extensions/draw_from_triangle.inx.h:28
+msgid "Point At"
+msgstr "נקודה ב־"
+
+#: ../share/extensions/draw_from_triangle.inx.h:29
+msgid "Radius / px"
+msgstr "רדיוס / פיקסלים"
+
+#: ../share/extensions/draw_from_triangle.inx.h:31
+msgid "Report this triangle's properties"
+msgstr "דווח על מאפייני המשולש הזה"
+
+#: ../share/extensions/draw_from_triangle.inx.h:32
+msgid "Symmedial Triangle"
+msgstr "משולש חסום אמצעי"
+
+#: ../share/extensions/draw_from_triangle.inx.h:33
+msgid "Symmedian Point"
+msgstr "נקודת מפגש חוצי הזווית"
+
+#: ../share/extensions/draw_from_triangle.inx.h:34
+msgid "Symmedians"
+msgstr "חוצי זווית"
+
+#: ../share/extensions/draw_from_triangle.inx.h:35
+msgid "Triangle Function"
+msgstr "פונקציה משולשת"
+
+#: ../share/extensions/draw_from_triangle.inx.h:36
+msgid "Trilinear Coordinates"
+msgstr "נקודות תלת־לינאריות"
 
 #: ../share/extensions/dxf_input.inx.h:1
 #: ../share/extensions/dxf_output.inx.h:1
 msgid "AutoCAD DXF (*.dxf)"
-msgstr ""
+msgstr "AutoCAD DXF (*.dxf)"
 
 #: ../share/extensions/dxf_input.inx.h:2
 msgid "DXF Input"
-msgstr ""
+msgstr "קלט DXF"
 
 #: ../share/extensions/dxf_input.inx.h:3
 msgid "Import AutoCAD's Document Exchange Format"
-msgstr ""
+msgstr "ייבא במבנה החלפת המסמכים של AutoCAD (DXF)"
 
 #: ../share/extensions/dxf_input.inx.h:4
-msgid ""
-"dxf2svg may come with Inkscape, but is also at http://dxf-svg-convert."
-"sourceforge.net/"
-msgstr ""
+msgid "dxf2svg may come with Inkscape, but is also at http://dxf-svg-convert.sourceforge.net/"
+msgstr "ייתכן ו־dxf2svg מגיע יחד עם אינקסקייפ, אך הוא גם זמין בכתובת http://dxf-svg-convert.sourceforge.net/"
 
 #: ../share/extensions/dxf_outlines.inx.h:1
 msgid "Desktop Cutting Plotter"
-msgstr ""
+msgstr "תוויין חותך שולני"
 
 #: ../share/extensions/dxf_outlines.inx.h:2
 msgid "Desktop Cutting Plotter (*.DXF)"
-msgstr ""
+msgstr "תוויין חותך שולחני (*.DXF)"
+
+#: ../share/extensions/dxf_outlines.inx.h:3
+msgid "ROBO-Master output"
+msgstr "פלט ROBO-Master"
 
 #: ../share/extensions/dxf_output.inx.h:2
 msgid "DXF Output"
-msgstr ""
+msgstr "פלט DXF"
 
 #: ../share/extensions/dxf_output.inx.h:3
 msgid "DXF file written by pstoedit"
-msgstr ""
+msgstr "קובץ DXF שנכתב על ידי pstoedit"
 
 #: ../share/extensions/dxf_output.inx.h:4
 msgid "pstoedit must be installed to run; see http://www.pstoedit.net/pstoedit"
-msgstr ""
+msgstr "עליך להתקין את pstoedit על מנת להריצו; ראה http://www.pstoedit.net/pstoedit"
 
 #: ../share/extensions/edge3d.inx.h:1
 msgid "Blur height"
-msgstr ""
+msgstr "גובה הטישטוש"
 
 #: ../share/extensions/edge3d.inx.h:2
 msgid "Blur stdDeviation"
-msgstr ""
+msgstr "סטיית תקן הטישטוש"
 
 #: ../share/extensions/edge3d.inx.h:3
 msgid "Blur width"
-msgstr ""
+msgstr "רוחב הטישטוש"
 
 #: ../share/extensions/edge3d.inx.h:4
-#, fuzzy
 msgid "Edge 3D"
-msgstr "קצה"
+msgstr "קצה תלת מימדי"
 
 #: ../share/extensions/edge3d.inx.h:5
 msgid "Illumination Angle"
-msgstr ""
+msgstr "זווית תאורה"
 
 #: ../share/extensions/edge3d.inx.h:7
 msgid "Only black and white"
-msgstr ""
+msgstr "שחור ולבן בלבד"
 
 #: ../share/extensions/edge3d.inx.h:8
-#, fuzzy
 msgid "Shades"
-msgstr "×\94צ×\9c"
+msgstr "צ×\9c×\9c×\99×\9d"
 
 #: ../share/extensions/embedimage.inx.h:1
 msgid "Embed All Images"
-msgstr ""
+msgstr "הטמע את כל התמונות"
 
 #: ../share/extensions/embedimage.inx.h:2
 msgid "Embed only selected images"
-msgstr ""
+msgstr "הטמע את התמונות הנבחרות בלבד"
 
 #: ../share/extensions/eps_input.inx.h:1
 msgid "EPS Input"
-msgstr ""
-
-#: ../share/extensions/eps_input.inx.h:2
-msgid "Encapsulated Postscript"
-msgstr ""
+msgstr "קלט EPS"
 
 #: ../share/extensions/epsi_output.inx.h:1
 msgid "EPSI Output"
-msgstr ""
+msgstr "פלט EPSI"
 
 #: ../share/extensions/epsi_output.inx.h:2
 msgid "Encapsulated Postscript Interchange (*.epsi)"
-msgstr ""
+msgstr "Postscript Interchange מכומס (*.epsi)"
 
 #: ../share/extensions/epsi_output.inx.h:3
 msgid "Encapsulated Postscript with a thumbnail"
-msgstr ""
+msgstr "Postscript ממוזער עם תמונה ממוזערת"
 
 #: ../share/extensions/eqtexsvg.inx.h:1
 msgid "LaTeX formula"
-msgstr ""
+msgstr "נוסחת LaTeX"
 
 #: ../share/extensions/eqtexsvg.inx.h:2
 msgid "LaTeX formula: "
-msgstr ""
+msgstr "נוסחת LaTeX: "
 
 #: ../share/extensions/export_gimp_palette.inx.h:1
 msgid "Export as GIMP Palette"
-msgstr ""
+msgstr "ייצא כפלטה של GIMP"
 
 #: ../share/extensions/export_gimp_palette.inx.h:2
 msgid "Exports the colors of this document as GIMP Palette"
-msgstr ""
+msgstr "מייצא את צבעי מסמך זה כפלטת צבעים של GIMP"
 
 #: ../share/extensions/export_gimp_palette.inx.h:3
 msgid "GIMP Palette (*.gpl)"
-msgstr ""
+msgstr "ערכת צבעים של GIMP (*.gpl)"
 
 #: ../share/extensions/extractimage.inx.h:1
 msgid "Extract One Image"
-msgstr ""
+msgstr "חלץ תמונה אחת"
 
 #: ../share/extensions/extractimage.inx.h:3
 msgid "Note: The file extension is appended automatically."
-msgstr ""
+msgstr "הערה: סיומת הקובץ נוספת אוטומטית."
 
 #: ../share/extensions/extractimage.inx.h:4
 msgid "Path to save image"
-msgstr ""
+msgstr "נתיב לשמירת התמונה"
+
+#: ../share/extensions/extrude.inx.h:1
+msgid "Extrude"
+msgstr "הוצאה"
 
 #: ../share/extensions/fig_input.inx.h:1
 msgid "Open files saved with XFIG"
-msgstr ""
+msgstr "פתח קבצים שנשמרו עם XFIG"
 
 #: ../share/extensions/fig_input.inx.h:2
 msgid "XFIG Graphics File (*.fig)"
-msgstr ""
+msgstr "קבצי גרפיקה של XFIG (*.fig)"
 
 #: ../share/extensions/fig_input.inx.h:3
 msgid "XFIG Input"
-msgstr ""
+msgstr "קלט XFIG"
 
 #: ../share/extensions/flatten.inx.h:1
 msgid "Flatness"
-msgstr ""
+msgstr "שטיחות"
 
 #: ../share/extensions/flatten.inx.h:2
 msgid "Flatten Beziers"
-msgstr ""
+msgstr "שטח את העיקולים"
 
 #: ../share/extensions/fractalize.inx.h:1
 msgid "Fractalize"
-msgstr ""
+msgstr "פרקטליזציה"
 
 #: ../share/extensions/fractalize.inx.h:3
 msgid "Smoothness"
-msgstr ""
+msgstr "חלקלקות"
 
 #: ../share/extensions/fractalize.inx.h:4
 msgid "Subdivisions"
-msgstr ""
+msgstr "תת־חלוקות"
 
 #: ../share/extensions/funcplot.inx.h:1
 msgid "Calculate first derivative numerically"
-msgstr ""
+msgstr "חשב את הנגזרת הראשונה מספרית"
 
 #: ../share/extensions/funcplot.inx.h:2
 msgid "Draw Axes"
-msgstr ""
+msgstr "צייר צירים"
 
 #: ../share/extensions/funcplot.inx.h:3
 msgid "End X value"
-msgstr ""
+msgstr "ערך ה־X לסיום"
 
 #: ../share/extensions/funcplot.inx.h:4
 msgid "First derivative"
-msgstr ""
+msgstr "הנגזרת הראשונה"
 
 #: ../share/extensions/funcplot.inx.h:5
 msgid "Function"
-msgstr ""
+msgstr "פונקציה"
 
 #: ../share/extensions/funcplot.inx.h:6
 msgid "Function Plotter"
-msgstr ""
+msgstr "תוויין"
 
 #: ../share/extensions/funcplot.inx.h:7
 msgid "Functions"
-msgstr ""
+msgstr "פונקציות"
 
 #: ../share/extensions/funcplot.inx.h:8
 msgid "Isotropic scaling (uses smallest of width/xrange or height/yrange)"
-msgstr ""
+msgstr "שינוי גודל איזוטרופי (משתמש בקטן ביותר מבין רוחב/טווח־x או גובה/טווח־y)"
 
 #: ../share/extensions/funcplot.inx.h:9
 msgid "Multiply X range by 2*pi"
-msgstr ""
+msgstr "הכפל את טווח ה־X ב־pi*2"
 
 #: ../share/extensions/funcplot.inx.h:10
 msgid "Range and sampling"
-msgstr ""
+msgstr "טווח ודגימה"
 
 #: ../share/extensions/funcplot.inx.h:11
 msgid "Remove rectangle"
-msgstr ""
+msgstr "הסר מרובע"
 
 #: ../share/extensions/funcplot.inx.h:13
 msgid "Samples"
-msgstr ""
+msgstr "דוגמאות"
 
 #: ../share/extensions/funcplot.inx.h:14
-msgid ""
-"Select a rectangle before calling the extension, it will determine X and Y "
-"scales. With polar coordinates: Start and end X values define the angle "
-"range in radians. X scale is set so that left and right edges of rectangle "
-"are at +/-1. Isotropic scaling is disabled. First derivative is always "
-"determined numerically."
-msgstr ""
+msgid "Select a rectangle before calling the extension, it will determine X and Y scales. With polar coordinates: Start and end X values define the angle range in radians. X scale is set so that left and right edges of rectangle are at +/-1. Isotropic scaling is disabled. First derivative is always determined numerically."
+msgstr "בחר מרובע לפני הקריאה להרחבה זו, ההרחבה תזהה את מימדי ה־X וה־Y. עם נקודות ציון קוטביות: ערכי ה־X של הסוף וההתחלה את טווח הזווית ברדיאנים. מימדי ה־X מוגדרים כך שקצוות הימני והשמאלי של המרובע הינם +/-1. שינוי גודל איזוטרופי מבוטל. הנגזרת הראשונה תמיד נקבעת מספרית."
 
 #: ../share/extensions/funcplot.inx.h:15
-msgid ""
-"Standard Python math functions are available: 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). The "
-"constants pi and e are also available."
-msgstr ""
+msgid "Standard Python math functions are available: 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). The constants pi and e are also available."
+msgstr "הפונקציות המתמטיות התקניות של Python זמינות: 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). כמו כן הקבועים pi ו־e זמינים גם כן."
 
 #: ../share/extensions/funcplot.inx.h:16
 msgid "Start X value"
-msgstr ""
+msgstr "ערך ה־X ההתחלתי"
 
 #: ../share/extensions/funcplot.inx.h:17
 msgid "Use"
-msgstr ""
+msgstr "השתמש"
 
 #: ../share/extensions/funcplot.inx.h:18
 msgid "Use polar coordinates"
-msgstr ""
+msgstr "השתמש בנקודות ציון קוטביות"
 
 #: ../share/extensions/funcplot.inx.h:19
 msgid "Y value of rectangle's bottom"
-msgstr ""
+msgstr "ערך ה־Y של תחתית המרובע"
 
 #: ../share/extensions/funcplot.inx.h:20
 msgid "Y value of rectangle's top"
-msgstr ""
+msgstr "ערך ה־Y של הקצה העליון של המרובע"
 
 #: ../share/extensions/gears.inx.h:1
 msgid "Circular pitch, px"
-msgstr ""
+msgstr "מרווח שיניים מעגלי, פיקסלים"
 
 #: ../share/extensions/gears.inx.h:2
 msgid "Gear"
-msgstr ""
+msgstr "גלגל שיניים"
 
 #: ../share/extensions/gears.inx.h:3
 msgid "Number of teeth"
-msgstr ""
+msgstr "מספר שיניים"
 
 #: ../share/extensions/gears.inx.h:4
 msgid "Pressure angle"
-msgstr ""
+msgstr "זווית הלחץ"
 
 #: ../share/extensions/gimp_xcf.inx.h:1
 msgid "GIMP XCF"
-msgstr ""
+msgstr "GIMP XCF"
 
 #: ../share/extensions/gimp_xcf.inx.h:2
 msgid "GIMP XCF maintaining layers (*.XCF)"
-msgstr ""
+msgstr "GIMP XCF ששמר על שכבותיו (*.XCF)"
 
 #: ../share/extensions/gimp_xcf.inx.h:3
 msgid "Save Grid:"
-msgstr ""
+msgstr "שמירת רשת:"
 
 #: ../share/extensions/gimp_xcf.inx.h:4
-#, fuzzy
 msgid "Save Guides:"
-msgstr "×\94×\96×\96 ×§×\95 ×\9e× ×\97×\94"
+msgstr "ש×\9e×\95ר ×§×\95×\95×\99×\9d ×\9e× ×\97×\99×\9d:"
 
 #: ../share/extensions/grid_cartesian.inx.h:1
-msgid "Border Thickness / px"
-msgstr ""
+msgid "Border Thickness [px]"
+msgstr "עובי הגבול [פיקסלים]"
 
 #: ../share/extensions/grid_cartesian.inx.h:2
 msgid "Cartesian Grid"
-msgstr ""
+msgstr "רשת קרטזית"
 
 #: ../share/extensions/grid_cartesian.inx.h:3
 msgid "Halve X Subsubdiv. Frequency after 'n' Subdivs. (log only)"
-msgstr ""
+msgstr "חצי תת­־תת­־חלוקת X. תדירות לאחר 'n' תת­־חלוקות. (רישום בלבד)"
 
 #: ../share/extensions/grid_cartesian.inx.h:4
 msgid "Halve Y Subsubdiv. Frequency after 'n' Subdivs. (log only)"
-msgstr ""
+msgstr "חצי תת­־תת­־חלוקת Y. תדירות לאחר 'n' תת­־חלוקות. (רישום בלבד)"
 
 #: ../share/extensions/grid_cartesian.inx.h:5
 msgid "Logarithmic X Subdiv. (Base given by entry above)"
-msgstr ""
+msgstr "תת־חלוקת X לוגריתמית (הבסיס נתון על ידי הרשומה שלהלן)"
 
 #: ../share/extensions/grid_cartesian.inx.h:6
 msgid "Logarithmic Y Subdiv. (Base given by entry above)"
-msgstr ""
+msgstr "תת־חלוקת Y לוגריתמית (הבסיס נתון על ידי הרשומה שלהלן)"
 
 #: ../share/extensions/grid_cartesian.inx.h:7
-msgid "Major X Division Thickness / px"
-msgstr ""
+msgid "Major X Division Spacing [px]"
+msgstr "ריווח חלוקת X ראשי [פיקסלים]"
 
 #: ../share/extensions/grid_cartesian.inx.h:8
-msgid "Major X Divisions"
-msgstr ""
+msgid "Major X Division Thickness [px]"
+msgstr "עובי חלוקת X ראשית [פיקסלים]"
 
 #: ../share/extensions/grid_cartesian.inx.h:9
-msgid "Major X Divsion Spacing / px"
-msgstr ""
+msgid "Major X Divisions"
+msgstr "חלוקות X ראשיות"
 
 #: ../share/extensions/grid_cartesian.inx.h:10
 msgid "Major Y Division Spacing"
-msgstr ""
+msgstr "חלוקת הריווח הראשית ציר Y"
 
 #: ../share/extensions/grid_cartesian.inx.h:11
-msgid "Major Y Division Thickness / px"
-msgstr ""
+msgid "Major Y Division Thickness [px]"
+msgstr "עובי חלוקת Y ראשית [פיקסלים]"
 
 #: ../share/extensions/grid_cartesian.inx.h:12
 msgid "Major Y Divisions"
-msgstr ""
+msgstr "חלוקות Y ראשיות"
 
 #: ../share/extensions/grid_cartesian.inx.h:13
-msgid "Minor X Division Thickness / px"
-msgstr ""
+msgid "Minor X Division Thickness [px]"
+msgstr "עובי חלוקת X משנית [פיקסלים]"
 
 #: ../share/extensions/grid_cartesian.inx.h:14
-msgid "Minor Y Division Thickness / px"
-msgstr ""
+msgid "Minor Y Division Thickness [px]"
+msgstr "עובי חלוקת Y משנית [פיקסלים]"
 
 #: ../share/extensions/grid_cartesian.inx.h:16
 msgid "Subdivisions per Major X Division"
-msgstr ""
+msgstr "תת־חלוקות לחלוקת X ראשית"
 
 #: ../share/extensions/grid_cartesian.inx.h:17
 msgid "Subdivisions per Major Y Division"
-msgstr ""
+msgstr "תת־חלוקות לחלוקת Y ראשית"
 
 #: ../share/extensions/grid_cartesian.inx.h:18
-msgid "Subminor X Division Thickness / px"
-msgstr ""
+msgid "Subminor X Division Thickness [px]"
+msgstr "עובי חלוקת תת־משנה X [פיקסלים]"
 
 #: ../share/extensions/grid_cartesian.inx.h:19
-msgid "Subminor Y Division Thickness / px"
-msgstr ""
+msgid "Subminor Y Division Thickness [px]"
+msgstr "עובי חלוקת תת־משנה Y [פיקסלים]"
 
 #: ../share/extensions/grid_cartesian.inx.h:20
 msgid "Subsubdivs. per X Subdiv."
-msgstr ""
+msgstr "תת­־תת­־חלוקות לכל תת­־חלוקת X"
 
 #: ../share/extensions/grid_cartesian.inx.h:21
 msgid "Subsubdivs. per Y Subdivision"
-msgstr ""
+msgstr "תת­־תת­־חלוקות לכל תת­־חלוקת Y"
 
 #: ../share/extensions/grid_polar.inx.h:1
 msgid "Angle Divisions"
-msgstr ""
+msgstr "חלוקות זווית"
 
 #: ../share/extensions/grid_polar.inx.h:2
 msgid "Angle Divisions at Centre"
-msgstr ""
+msgstr "חלוקת הזווית במרכז"
 
 #: ../share/extensions/grid_polar.inx.h:3
-msgid "Centre Dot Diameter / px"
-msgstr ""
+msgid "Centre Dot Diameter [px]"
+msgstr "נקודת מרכז המעגל [פיקסלים]"
 
 #: ../share/extensions/grid_polar.inx.h:4
-msgid "Circumferential Label Outset / px"
-msgstr ""
+msgid "Circumferential Label Outset [px]"
+msgstr "מרחק התווית ההיקפית [פיקסלים]"
 
 #: ../share/extensions/grid_polar.inx.h:5
-msgid "Circumferential Label Size / px"
-msgstr ""
+msgid "Circumferential Label Size [px]"
+msgstr "גודל התוויות ההקפיות [פיקסלים]"
 
 #: ../share/extensions/grid_polar.inx.h:6
 msgid "Circumferential Labels"
-msgstr ""
+msgstr "תוויות היקפיות"
 
 #: ../share/extensions/grid_polar.inx.h:8
 msgid "Logarithmic Subdiv. (Base given by entry above)"
-msgstr ""
+msgstr "תת­־חלוקה לוגריתמית. (הבסיס ניתן לפני הרשומה שלהלן)"
 
 #: ../share/extensions/grid_polar.inx.h:9
-msgid "Major Angular Division Thickness / px"
-msgstr ""
+msgid "Major Angular Division Thickness [px]"
+msgstr "עובי החלוקה הזוויתית הראשית [פיקסלים]"
 
 #: ../share/extensions/grid_polar.inx.h:10
-msgid "Major Circular Division Thickness / px"
-msgstr ""
+msgid "Major Circular Division Spacing [px]"
+msgstr "ריווח החלוקה המעגלית הראשית [פיקסלים]"
 
 #: ../share/extensions/grid_polar.inx.h:11
-msgid "Major Circular Divisions"
-msgstr ""
+msgid "Major Circular Division Thickness [px]"
+msgstr "עובי החלוקה המעגלית הראשית [פיקסלים]"
 
 #: ../share/extensions/grid_polar.inx.h:12
-msgid "Major Circular Divsion Spacing / px"
-msgstr ""
+msgid "Major Circular Divisions"
+msgstr "חלוקה מעגלית ראשית"
 
 #: ../share/extensions/grid_polar.inx.h:13
 msgid "Minor Angle Division End 'n' Divs. Before Centre"
-msgstr ""
+msgstr "החלוקה הזוויתית המשנית מסיימת 'n' חלוקות. לפני המרכז"
 
 #: ../share/extensions/grid_polar.inx.h:14
-msgid "Minor Angular Division Thickness / px"
-msgstr ""
+msgid "Minor Angular Division Thickness [px]"
+msgstr "עובי חלוקה זוויתית משנית [פיקסלים]"
 
 #: ../share/extensions/grid_polar.inx.h:15
-msgid "Minor Circular Division Thickness / px"
-msgstr ""
+msgid "Minor Circular Division Thickness [px]"
+msgstr "עובי חלוקה מעגלית משנית [פיקסלים]"
 
 #: ../share/extensions/grid_polar.inx.h:17
 msgid "Polar Grid"
-msgstr ""
+msgstr "רשת קוטבית"
 
 #: ../share/extensions/grid_polar.inx.h:19
 msgid "Subdivisions per Major Angular Division"
-msgstr ""
+msgstr "תת­־חלוקות לכל חלוקה זוויתית ראשית"
 
 #: ../share/extensions/grid_polar.inx.h:20
 msgid "Subdivisions per Major Circular Division"
-msgstr ""
+msgstr "תת­־חלוקות לכל תת­־חלוקה מעגלית"
 
 #: ../share/extensions/handles.inx.h:1
 msgid "Draw Handles"
-msgstr ""
+msgstr "צייר ידיות"
 
 #: ../share/extensions/hpgl_output.inx.h:1
 msgid "Export to an HP Graphics Language file"
-msgstr ""
+msgstr "ייצא לקובץ שפת הגרפיקה של HP"
 
 #: ../share/extensions/hpgl_output.inx.h:2
 msgid "HP Graphics Language file (*.hpgl)"
-msgstr ""
+msgstr "קבצי שפה של גרפיקת HP (*.hpgl)"
 
 #: ../share/extensions/hpgl_output.inx.h:3
-#, fuzzy
 msgid "HPGL Output"
-msgstr "פלט SVG"
+msgstr "פלט HGPL"
 
 #: ../share/extensions/inkscape_help_askaquestion.inx.h:1
 msgid "Ask Us a Question"
-msgstr ""
+msgstr "שאל אותנו שאלה"
 
 #: ../share/extensions/inkscape_help_commandline.inx.h:1
 msgid "Command Line Options"
-msgstr ""
+msgstr "אפשרויות שורת הפקודה"
 
 #: ../share/extensions/inkscape_help_faq.inx.h:1
 msgid "FAQ"
-msgstr ""
+msgstr "שאלות נפוצות"
 
 #: ../share/extensions/inkscape_help_keys.inx.h:1
 msgid "Keys and Mouse Reference"
-msgstr ""
+msgstr "הפניות עכבר ומקלדת"
 
 #: ../share/extensions/inkscape_help_manual.inx.h:1
 msgid "Inkscape Manual"
-msgstr ""
+msgstr "מדריך למשתמש באינקסקייפ"
 
 #: ../share/extensions/inkscape_help_relnotes.inx.h:1
 msgid "New in This Version"
-msgstr ""
+msgstr "חדש בגירסה זו"
 
 #: ../share/extensions/inkscape_help_reportabug.inx.h:1
 msgid "Report a Bug"
-msgstr ""
+msgstr "דווח על תקלה"
 
 #: ../share/extensions/inkscape_help_svgspec.inx.h:1
 msgid "SVG 1.1 Specification"
-msgstr ""
+msgstr "איפיון התקן SVG 1.1"
 
 #: ../share/extensions/interp.inx.h:1
 msgid "Duplicate endpaths"
-msgstr ""
+msgstr "קצה נתיב כפול"
 
 #: ../share/extensions/interp.inx.h:4
 msgid "Interpolate"
-msgstr ""
+msgstr "ריגול"
 
 #: ../share/extensions/interp.inx.h:5
 msgid "Interpolate style"
-msgstr ""
+msgstr "סגנון העירבול"
 
 #: ../share/extensions/interp.inx.h:6
 msgid "Interpolation method"
-msgstr ""
+msgstr "שיטת הריגול"
 
 #: ../share/extensions/interp.inx.h:7
 msgid "Interpolation steps"
-msgstr ""
+msgstr "צעדי הריגול"
 
 #: ../share/extensions/lindenmayer.inx.h:1
 msgid "Axiom"
-msgstr ""
+msgstr "אקסיומה"
 
 #: ../share/extensions/lindenmayer.inx.h:2
 msgid "Axiom and rules"
-msgstr ""
+msgstr "אקסיומות וחוקים"
 
 #: ../share/extensions/lindenmayer.inx.h:4
 msgid "L-system"
-msgstr ""
+msgstr "מערכת ל"
 
 #: ../share/extensions/lindenmayer.inx.h:5
 msgid "Left angle"
-msgstr ""
+msgstr "זווית שמאלית"
 
 #: ../share/extensions/lindenmayer.inx.h:8
 #, no-c-format
 msgid "Randomize angle (%)"
-msgstr ""
+msgstr "זווית האקראיות (%)"
 
 #: ../share/extensions/lindenmayer.inx.h:10
 #, no-c-format
 msgid "Randomize step (%)"
-msgstr ""
+msgstr "צעדי האקראיות (%)"
 
 #: ../share/extensions/lindenmayer.inx.h:12
 msgid "Right angle"
-msgstr ""
+msgstr "זווית ימנית"
 
 #: ../share/extensions/lindenmayer.inx.h:13
 msgid "Rules"
-msgstr ""
+msgstr "כללים"
 
 #: ../share/extensions/lindenmayer.inx.h:14
 msgid "Step length (px)"
-msgstr ""
+msgstr "אורך הצעד (פיקסלים)"
 
 #: ../share/extensions/lindenmayer.inx.h:15
-msgid ""
-"The path is generated by applying the substitutions of Rules to the Axiom, "
-"Order times. The following commands are recognized in Axiom and Rules: Any "
-"of A,B,C,D,E,F: draw forward Any of G,H,I,J,K,L: move forward +: turn left "
-"-: turn right |: turn 180 degrees [: remember poing ]: return to remembered "
-"point"
+msgid "The path is generated by applying the substitutions of Rules to the Axiom, Order times. The following commands are recognized in Axiom and Rules: Any of A,B,C,D,E,F: draw forward Any of G,H,I,J,K,L: move forward +: turn left -: turn right |: turn 180 degrees [: remember point ]: return to remembered point"
 msgstr ""
 
 #: ../share/extensions/lorem_ipsum.inx.h:1
 msgid "Lorem ipsum"
-msgstr ""
+msgstr "לורם איפסום"
 
 #: ../share/extensions/lorem_ipsum.inx.h:2
 msgid "Number of paragraphs"
-msgstr ""
+msgstr "מספר פיסקאות"
 
 #: ../share/extensions/lorem_ipsum.inx.h:3
 msgid "Paragraph length fluctuation (sentences)"
-msgstr ""
+msgstr "תנודה באורך הפיסקאות (משפטים)"
 
 #: ../share/extensions/lorem_ipsum.inx.h:4
 msgid "Sentences per paragraph"
-msgstr ""
+msgstr "משפטים בכל פיסקה"
 
 #: ../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 ""
+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 "אפקט זה מייצר פיסקאות בעלות טקסט למילוי המקום (\"לורם איפסום\") אקראיות. אם נבחר טקסט מרחף, לורם איפסום נוסף אליו; במידה ולא יווצר פריט טקסט מרחף חדש בגודל העמוד תחת שכבה חדשה."
 
 #: ../share/extensions/markers_strokepaint.inx.h:1
 msgid "Color Markers to Match Stroke"
-msgstr ""
+msgstr "סמני צבע להתאמה לקו המתאר"
 
 #: ../share/extensions/measure.inx.h:1
 msgid "Font size [px]"
-msgstr ""
+msgstr "גודל הגופן [פיקסלים]"
 
 #. <param name="unit" type="string" _gui-text="Unit {km|m|cm|mm|in|px|pt}">mm</param>
 #: ../share/extensions/measure.inx.h:4
 msgid "Length Unit: "
-msgstr ""
+msgstr "מידת האורך: "
 
 #: ../share/extensions/measure.inx.h:5
 msgid "Measure"
-msgstr ""
+msgstr "מדידה"
 
 #: ../share/extensions/measure.inx.h:6
 msgid "Measure Path"
-msgstr ""
+msgstr "מדידת הנתיב"
 
 #: ../share/extensions/measure.inx.h:7
 msgid "Offset [px]"
-msgstr ""
+msgstr "קיזוז [פיקסלים]"
 
 #: ../share/extensions/measure.inx.h:8
 msgid "Precision"
-msgstr ""
+msgstr "דיוק"
 
 #: ../share/extensions/measure.inx.h:9
 msgid "Scale Factor (Drawing:Real Length) = 1:"
-msgstr ""
+msgstr "מקדם אמת מידה (ציור:גודל אמיתי) = 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 ""
+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 "אפקט זה מודד את האורך של הנתיב הנבחר ומוסיף מעין אפקט של טקסט־על־גבי־נתיב עם היחידה הנבחרת. מספר הספרות המשמעותיות ניתן לשליטה על ידי שדה הדיוק. שדה הקיזוז שולט במרחק שבין הטקסט לנתיב. מקדם שינוי קנה המידה יכול לשמש למדידה בציורים שנמתחו. לדוגמה, אם ס\"מ אחד בציור שווה ל-2.5 מ' בעולם האמיתי, קנה המידה חייב להיות מוגדר ל־250."
 
-#: ../share/extensions/motion.inx.h:2
-msgid "Extrude"
-msgstr ""
+#: ../share/extensions/motion.inx.h:3
+msgid "Magnitude"
+msgstr "בהירות"
 
 #: ../share/extensions/motion.inx.h:4
-msgid "Magnitude"
-msgstr ""
+msgid "Motion"
+msgstr "תנועה"
 
 #: ../share/extensions/outline2svg.inx.h:1
 msgid "ASCII Text with outline markup"
-msgstr ""
+msgstr "קוד ASCII עם סימון חיצוני"
 
 #: ../share/extensions/outline2svg.inx.h:2
 msgid "Text Outline File (*.outline)"
-msgstr ""
+msgstr "קובץ קווי מתאר של טקסט (*.outline)"
 
 #: ../share/extensions/outline2svg.inx.h:3
 msgid "Text Outline Input"
-msgstr ""
+msgstr "קלט קוי מתאר של טקסט"
 
 #: ../share/extensions/pathalongpath.inx.h:1
 msgid "Copies of the pattern:"
-msgstr ""
+msgstr "העתקים של התבנית:"
 
 #: ../share/extensions/pathalongpath.inx.h:2
 msgid "Deformation type:"
-msgstr ""
+msgstr "סוג העיוות:"
 
 #: ../share/extensions/pathalongpath.inx.h:3
 #: ../share/extensions/pathscatter.inx.h:3
 msgid "Duplicate the pattern before deformation"
-msgstr ""
+msgstr "שכפל את התבנית לפני העיוות"
 
 #: ../share/extensions/pathalongpath.inx.h:6
 msgid "Pattern along Path"
-msgstr ""
+msgstr "תבנית לאורך הנתיב"
 
 #: ../share/extensions/pathalongpath.inx.h:10
 msgid "Ribbon"
-msgstr ""
+msgstr "רצועה"
 
 #: ../share/extensions/pathalongpath.inx.h:13
-#, fuzzy
 msgid "Snake"
-msgstr "צ×\95ר×\95ת"
+msgstr "× ×\97ש"
 
 #: ../share/extensions/pathalongpath.inx.h:14
 #: ../share/extensions/pathscatter.inx.h:11
 msgid "Space between copies:"
-msgstr ""
+msgstr "רווח בין העותקים:"
 
 #: ../share/extensions/pathalongpath.inx.h:16
-msgid ""
-"This effect bends a pattern object along arbitrary \"skeleton\" paths. The "
-"pattern is the top most object in the selection. (groups of paths/shapes/"
-"clones... allowed)"
-msgstr ""
+msgid "This effect bends a pattern object along arbitrary \"skeleton\" paths. The pattern is the top most object in the selection. (groups of paths/shapes/clones... allowed)"
+msgstr "אפקט זה מכופף את התבנית לאורך נתיבי \"שלד\" שרירותיים. התבנית היא הפריט העליון ביותר בבחירה. (קבוצות של נתיבים/צורות/כפילים... מותרים)"
 
 #: ../share/extensions/pathscatter.inx.h:1
-#, fuzzy
 msgid "Cloned"
-msgstr "_סגור"
+msgstr "משוכפל"
 
 #: ../share/extensions/pathscatter.inx.h:2
 msgid "Copied"
-msgstr ""
+msgstr "מועתק"
 
 #: ../share/extensions/pathscatter.inx.h:4
-msgid "Follow path orientation."
-msgstr ""
+msgid "Follow path orientation"
+msgstr "עקוב אחר יישור העמוד"
 
 #: ../share/extensions/pathscatter.inx.h:6
-#, fuzzy
 msgid "Moved"
-msgstr "×\94×\96×\96"
+msgstr "×\94×\95×¢×\91ר"
 
 #: ../share/extensions/pathscatter.inx.h:8
 msgid "Original pattern will be:"
-msgstr ""
+msgstr "התבנית המקורית תהיה:"
 
 #: ../share/extensions/pathscatter.inx.h:10
-#, fuzzy
 msgid "Scatter"
-msgstr "×\9e×\98ר"
+msgstr "פ×\99×\96×\95ר"
 
 #: ../share/extensions/pathscatter.inx.h:12
 msgid "Stretch spaces to fit skeleton length"
-msgstr ""
+msgstr "מתח את הרווחים כדי שיתאימו לאורך הגולגולת"
 
 #: ../share/extensions/pathscatter.inx.h:14
-msgid ""
-"This effect scatters a pattern along arbitrary \"skeleton\" paths. The "
-"pattern is the top most object in the selection. (groups of paths/shapes/"
-"clones... allowed)"
-msgstr ""
+msgid "This effect scatters a pattern along arbitrary \"skeleton\" paths. The pattern is the top most object in the selection. (groups of paths/shapes/clones... allowed)"
+msgstr "אפקט זה מפזר את התבנית לאורך נתיבי \"שלד\" שרירותיים. התבנית היא הפריט העליון ביותר בבחירה. (קבוצות של נתיבים/צורות/כפילים... מותרים)"
 
 #: ../share/extensions/perfectboundcover.inx.h:1
 msgid "Bleed (in)"
-msgstr ""
+msgstr "שוליים לחיתוך (אינטש)"
 
 #: ../share/extensions/perfectboundcover.inx.h:2
 msgid "Bond Weight #"
-msgstr ""
+msgstr "עובי הקשר במספרים"
 
 #: ../share/extensions/perfectboundcover.inx.h:3
 msgid "Book Height (inches)"
-msgstr ""
+msgstr "גובה הספר (אינטשים)"
 
 #: ../share/extensions/perfectboundcover.inx.h:4
-#, fuzzy
 msgid "Book Properties"
-msgstr "×\90פשר×\95×\99×\95ת ×\94×\93פס×\94"
+msgstr "×\9e×\90פ×\99×\99× ×\99 ×\94ספר"
 
 #: ../share/extensions/perfectboundcover.inx.h:5
 msgid "Book Width (inches)"
-msgstr ""
+msgstr "רוחב הספר (אינטשים)"
 
 #: ../share/extensions/perfectboundcover.inx.h:6
 msgid "Caliper (inches)"
-msgstr ""
+msgstr "מחוגה (אינטשים)"
 
 #: ../share/extensions/perfectboundcover.inx.h:7
-#, fuzzy
 msgid "Cover"
-msgstr "×\94×\96×\96"
+msgstr "×\9bר×\99×\9b×\94"
 
 #: ../share/extensions/perfectboundcover.inx.h:8
 msgid "Cover Thickness Measurement"
-msgstr ""
+msgstr "מדידת עובי הכריכה"
 
 #: ../share/extensions/perfectboundcover.inx.h:9
 msgid "Generate Template"
-msgstr ""
+msgstr "ייצר תבנית"
 
 #: ../share/extensions/perfectboundcover.inx.h:10
 msgid "Interior Pages"
-msgstr ""
+msgstr "דפים פנימיים"
 
 #: ../share/extensions/perfectboundcover.inx.h:11
 msgid "Note: Bond Weight # calculations are a best-guess estimate."
-msgstr ""
+msgstr "הערה: חישובי עובי הנייר הינם ההערכות המוצלחות ביותר."
 
 #: ../share/extensions/perfectboundcover.inx.h:12
-#, fuzzy
 msgid "Number of Pages"
-msgstr "×\9eספר ×¦×¢דים"
+msgstr "×\9eספר ×\94×¢×\9e×\95דים"
 
 #: ../share/extensions/perfectboundcover.inx.h:13
 msgid "Pages Per Inch (PPI)"
-msgstr ""
+msgstr "עמודים לאינטש (PPI)"
 
 #: ../share/extensions/perfectboundcover.inx.h:14
 msgid "Paper Thickness Measurement"
-msgstr ""
+msgstr "מדידת עובי הדף"
 
 #: ../share/extensions/perfectboundcover.inx.h:15
 msgid "Perfect-Bound Cover"
-msgstr ""
+msgstr "כריכת ספר"
 
 #: ../share/extensions/perfectboundcover.inx.h:17
 msgid "Remove existing guides"
-msgstr ""
+msgstr "הסר קווים מנחים קיימים"
 
 #: ../share/extensions/perfectboundcover.inx.h:18
-#, fuzzy
 msgid "Specify Width"
-msgstr "×¢×\95×\91×\99 ×§×\95"
+msgstr "צ×\99×\99×\9f ×¨×\95×\97×\91"
 
 #: ../share/extensions/perspective.inx.h:2
 msgid "Perspective"
-msgstr ""
+msgstr "פרספקטיבה"
 
 #: ../share/extensions/polyhedron_3d.inx.h:1
-#, fuzzy
 msgid "3D Polyhedron"
-msgstr "פ×\95×\9c×\99×\92×\95×\9f"
+msgstr "פ×\95×\9c×\99×\94×\93ר×\95×\9f ×ª×\9cת־×\9e×\99×\9e×\93×\99"
 
 #: ../share/extensions/polyhedron_3d.inx.h:2
 msgid "Clockwise Wound Object"
-msgstr ""
+msgstr "עקל את הפריט עכ\"ש"
 
 #: ../share/extensions/polyhedron_3d.inx.h:3
 msgid "Cube"
-msgstr ""
+msgstr "קוביה"
 
 #: ../share/extensions/polyhedron_3d.inx.h:4
 msgid "Cuboctohedron"
-msgstr ""
+msgstr "קובוקטהדרון"
 
 #: ../share/extensions/polyhedron_3d.inx.h:5
 msgid "Dodecahedron"
-msgstr ""
+msgstr "תריסרון"
 
 #: ../share/extensions/polyhedron_3d.inx.h:6
 msgid "Draw Back-Facing Polygons"
-msgstr ""
+msgstr "צייר מצולעים שפניהם מופנות פנימה"
 
 #: ../share/extensions/polyhedron_3d.inx.h:7
 msgid "Edge-Specified"
-msgstr ""
+msgstr "קצה מוגדר"
 
 #: ../share/extensions/polyhedron_3d.inx.h:8
-#, fuzzy
 msgid "Edges"
-msgstr "קצ×\94"
+msgstr "קצ×\95×\95ת"
 
 #: ../share/extensions/polyhedron_3d.inx.h:9
 msgid "Face-Specified"
-msgstr ""
+msgstr "פנים מוגדרות"
 
 #: ../share/extensions/polyhedron_3d.inx.h:10
 msgid "Faces"
-msgstr ""
+msgstr "פנים"
 
 #: ../share/extensions/polyhedron_3d.inx.h:11
-#, fuzzy
 msgid "Filename:"
-msgstr "ש×\9d ×\9eשת×\9eש:"
+msgstr "ש×\9d ×\94ק×\95×\91×¥:"
 
 #: ../share/extensions/polyhedron_3d.inx.h:12
 msgid "Fill Colour (Blue)"
-msgstr ""
+msgstr "צבע המילוי (כחול)"
 
 #: ../share/extensions/polyhedron_3d.inx.h:13
 msgid "Fill Colour (Green)"
-msgstr ""
+msgstr "צבע המילוי (ירוק)"
 
 #: ../share/extensions/polyhedron_3d.inx.h:14
 msgid "Fill Colour (Red)"
-msgstr ""
+msgstr "צבע המילוי (אדום)"
 
 #: ../share/extensions/polyhedron_3d.inx.h:16
 #, no-c-format
 msgid "Fill Opacity/ %"
-msgstr ""
+msgstr "אטימות המילוי/ %"
 
 #: ../share/extensions/polyhedron_3d.inx.h:17
 msgid "Great Dodecahedron"
-msgstr ""
+msgstr "תריסרון משוכלל"
 
 #: ../share/extensions/polyhedron_3d.inx.h:18
 msgid "Great Stellated Dodecahedron"
-msgstr ""
+msgstr "Great Stellated Dodecahedron"
 
 #: ../share/extensions/polyhedron_3d.inx.h:19
 msgid "Icosahedron"
-msgstr ""
+msgstr "עשרימון"
 
 #: ../share/extensions/polyhedron_3d.inx.h:20
-#, fuzzy
 msgid "Light x-Position"
-msgstr "×\99×¢×\93 ×\94×\93פס×\94"
+msgstr "×\9e×\99ק×\95×\9d ×\94Ö¾x ×©×\9c ×\94×\90×\95ר"
 
 #: ../share/extensions/polyhedron_3d.inx.h:21
-#, fuzzy
 msgid "Light y-Position"
-msgstr "×\99×¢×\93 ×\94×\93פס×\94"
+msgstr "×\9e×\99ק×\95×\9d ×\94Ö¾y ×©×\9c ×\94×\90×\95ר"
 
 #: ../share/extensions/polyhedron_3d.inx.h:22
-#, fuzzy
 msgid "Light z-Position"
-msgstr "×\99×¢×\93 ×\94×\93פס×\94"
+msgstr "×\9e×\99ק×\95×\9d ×\94Ö¾z ×©×\9c ×\94×\90×\95ר"
 
 #: ../share/extensions/polyhedron_3d.inx.h:23
 msgid "Line Thickness / px"
-msgstr ""
+msgstr "עובי הקו / פיקסלים"
 
 #: ../share/extensions/polyhedron_3d.inx.h:24
 msgid "Load From File"
-msgstr ""
+msgstr "טען מקובץ"
 
 #: ../share/extensions/polyhedron_3d.inx.h:25
-#, fuzzy
 msgid "Maximum"
-msgstr "×\91×\99× ×\95× י"
+msgstr "×\9eר×\91י"
 
 #: ../share/extensions/polyhedron_3d.inx.h:26
 msgid "Mean"
-msgstr ""
+msgstr "ממוצע"
 
 #: ../share/extensions/polyhedron_3d.inx.h:27
-#, fuzzy
 msgid "Minimum"
-msgstr "×\91×\99× ×\95× י"
+msgstr "×\9e×\96ערי"
 
 #: ../share/extensions/polyhedron_3d.inx.h:28
-#, fuzzy
 msgid "Model File"
-msgstr "קובץ"
+msgstr "קובץ דגם"
 
 #: ../share/extensions/polyhedron_3d.inx.h:29
 msgid "Object Type"
-msgstr ""
+msgstr "סוג הפריט"
 
 #: ../share/extensions/polyhedron_3d.inx.h:30
 msgid "Object:"
-msgstr ""
+msgstr "פריט:"
 
 #: ../share/extensions/polyhedron_3d.inx.h:31
 msgid "Octahedron"
-msgstr ""
+msgstr "אוקטהדרון"
 
 #: ../share/extensions/polyhedron_3d.inx.h:33
-msgid "Report Normal Vector Information"
-msgstr ""
-
-#: ../share/extensions/polyhedron_3d.inx.h:34
-#, fuzzy
 msgid "Rotate Around:"
-msgstr "ס×\95×\91×\91 ×¦×\9eת×\99×\9d"
+msgstr "ס×\95×\91×\91 ×¡×\91×\99×\91:"
 
-#: ../share/extensions/polyhedron_3d.inx.h:35
+#: ../share/extensions/polyhedron_3d.inx.h:34
 msgid "Rotation / Degrees"
-msgstr ""
+msgstr "הטייה / מעלות"
 
-#: ../share/extensions/polyhedron_3d.inx.h:36
-#, fuzzy
+#: ../share/extensions/polyhedron_3d.inx.h:35
 msgid "Scaling Factor"
-msgstr "פק×\98×\95ר"
+msgstr "×\9eק×\93×\9d ×©×\99× ×\95×\99 ×\94×\92×\95×\93×\9c"
 
-#: ../share/extensions/polyhedron_3d.inx.h:37
-#, fuzzy
+#: ../share/extensions/polyhedron_3d.inx.h:36
 msgid "Shading"
-msgstr "ר×\99×\95×\95×\97"
+msgstr "×\94צ×\9c×\9c×\94"
 
-#: ../share/extensions/polyhedron_3d.inx.h:39
+#: ../share/extensions/polyhedron_3d.inx.h:38
 msgid "Small Triambic Icosahedron"
-msgstr ""
+msgstr "כוכב 90 חודים"
 
-#: ../share/extensions/polyhedron_3d.inx.h:40
+#: ../share/extensions/polyhedron_3d.inx.h:39
 msgid "Snub Cube"
-msgstr ""
+msgstr "קוביה 38 פאות"
 
-#: ../share/extensions/polyhedron_3d.inx.h:41
+#: ../share/extensions/polyhedron_3d.inx.h:40
 msgid "Snub Dodecahedron"
-msgstr ""
+msgstr "קוביה 92 פאות"
 
-#: ../share/extensions/polyhedron_3d.inx.h:43
+#: ../share/extensions/polyhedron_3d.inx.h:42
 #, no-c-format
 msgid "Stroke Opacity/ %"
-msgstr ""
+msgstr "אטימות קו המתאר/ %"
 
-#: ../share/extensions/polyhedron_3d.inx.h:45
+#: ../share/extensions/polyhedron_3d.inx.h:44
 msgid "Tetrahedron"
-msgstr ""
+msgstr "ארבעון"
 
-#: ../share/extensions/polyhedron_3d.inx.h:46
+#: ../share/extensions/polyhedron_3d.inx.h:45
 msgid "Then Rotate Around:"
-msgstr ""
+msgstr "אז סובב סביב:"
 
-#: ../share/extensions/polyhedron_3d.inx.h:47
+#: ../share/extensions/polyhedron_3d.inx.h:46
 msgid "Truncated Cube"
-msgstr ""
+msgstr "קוביה קטומה"
 
-#: ../share/extensions/polyhedron_3d.inx.h:48
+#: ../share/extensions/polyhedron_3d.inx.h:47
 msgid "Truncated Dodecahedron"
-msgstr ""
+msgstr "תריסרון קטוע"
 
-#: ../share/extensions/polyhedron_3d.inx.h:49
+#: ../share/extensions/polyhedron_3d.inx.h:48
 msgid "Truncated Icosahedron"
-msgstr ""
+msgstr "עשרימון קטוע"
 
-#: ../share/extensions/polyhedron_3d.inx.h:50
+#: ../share/extensions/polyhedron_3d.inx.h:49
 msgid "Truncated Octahedron"
-msgstr ""
+msgstr "תמניון קטוע"
 
-#: ../share/extensions/polyhedron_3d.inx.h:51
+#: ../share/extensions/polyhedron_3d.inx.h:50
 msgid "Truncated Tetrahedron"
-msgstr ""
+msgstr "ארבעון קטוע"
 
-#: ../share/extensions/polyhedron_3d.inx.h:52
-#, fuzzy
+#: ../share/extensions/polyhedron_3d.inx.h:51
 msgid "Vertices"
-msgstr "×\90×\97×\95×\96ים"
+msgstr "ק×\95×\93ק×\95×\93ים"
 
-#: ../share/extensions/polyhedron_3d.inx.h:53
+#: ../share/extensions/polyhedron_3d.inx.h:52
 msgid "View"
-msgstr ""
+msgstr "תצוגה"
 
-#: ../share/extensions/polyhedron_3d.inx.h:54
+#: ../share/extensions/polyhedron_3d.inx.h:53
 msgid "X-Axis"
-msgstr ""
+msgstr "ציר ה־X"
 
-#: ../share/extensions/polyhedron_3d.inx.h:55
+#: ../share/extensions/polyhedron_3d.inx.h:54
 msgid "Y-Axis"
-msgstr ""
+msgstr "ציר ה־Y"
 
-#: ../share/extensions/polyhedron_3d.inx.h:56
+#: ../share/extensions/polyhedron_3d.inx.h:55
 msgid "Z-Axis"
-msgstr ""
+msgstr "ציר ה־Z"
 
-#: ../share/extensions/polyhedron_3d.inx.h:57
+#: ../share/extensions/polyhedron_3d.inx.h:56
 msgid "Z-Sort Faces By:"
-msgstr ""
-
-#: ../share/extensions/ps_input.inx.h:1
-msgid "Postscript"
-msgstr ""
-
-#: ../share/extensions/ps_input.inx.h:2
-msgid "Postscript (*.ps)"
-msgstr ""
+msgstr "סידור הפנים בציר Z לפי:"
 
 #: ../share/extensions/ps_input.inx.h:3
-msgid "Postscript Input"
-msgstr ""
+msgid "PostScript Input"
+msgstr "קלט PostScript"
 
 #: ../share/extensions/radiusrand.inx.h:1
 msgid "Jitter nodes"
-msgstr ""
+msgstr "ערבל מפרקים"
 
 #: ../share/extensions/radiusrand.inx.h:2
 msgid "Maximum displacement in X, px"
-msgstr ""
+msgstr "פיזור מרבי בציר ה־X, פיקסלים"
 
 #: ../share/extensions/radiusrand.inx.h:3
 msgid "Maximum displacement in Y, px"
-msgstr ""
+msgstr "פיזור מרבי בציר ה־Y, פיקסלים"
 
 #: ../share/extensions/radiusrand.inx.h:5
 msgid "Shift node handles"
-msgstr ""
+msgstr "הזז את ידיות המפרקים"
 
 #: ../share/extensions/radiusrand.inx.h:6
 msgid "Shift nodes"
-msgstr ""
+msgstr "הזז את המפרקים"
 
 #: ../share/extensions/radiusrand.inx.h:7
-msgid ""
-"This effect randomly shifts the nodes (and optionally node handles) of the "
-"selected path."
-msgstr ""
+msgid "This effect randomly shifts the nodes (and optionally node handles) of the selected path."
+msgstr "אפקט זה מזיז את המפרקים באופן אקראי (הזזת הידיות אפשרית גם כן) של הנתיב הנבחר."
 
 #: ../share/extensions/radiusrand.inx.h:8
 msgid "Use normal distribution"
-msgstr ""
+msgstr "השתמש בפיזור רגיל"
 
 #: ../share/extensions/render_alphabetsoup.inx.h:1
 msgid "Alphabet Soup"
-msgstr ""
+msgstr "מרק האלפבית"
 
 #: ../share/extensions/render_alphabetsoup.inx.h:2
 msgid "Random Seed"
-msgstr ""
+msgstr "זרע אקראי"
 
 #: ../share/extensions/render_barcode.inx.h:1
 msgid "Bar Height:"
-msgstr ""
+msgstr "גובה הקווים:"
 
 #: ../share/extensions/render_barcode.inx.h:2
 msgid "Barcode"
-msgstr ""
+msgstr "ברקוד"
 
 #: ../share/extensions/render_barcode.inx.h:3
 msgid "Barcode Data:"
-msgstr ""
+msgstr "נתוני ברקוד:"
 
 #: ../share/extensions/render_barcode.inx.h:4
 msgid "Barcode Type:"
-msgstr ""
+msgstr "סוג הברקוד:"
 
 #: ../share/extensions/restack.inx.h:2
 msgid "Arbitrary Angle:"
-msgstr ""
+msgstr "זווית שרירותית:"
 
 #: ../share/extensions/restack.inx.h:4
-#, fuzzy
 msgid "Bottom"
-msgstr "×\96×\95×\9d"
+msgstr "ת×\97ת×\95×\9f"
 
 #: ../share/extensions/restack.inx.h:5
 msgid "Bottom to Top (90)"
-msgstr ""
+msgstr "מלמטה־למעלה (90)"
 
 #: ../share/extensions/restack.inx.h:6
 msgid "Horizontal Point:"
-msgstr ""
-
-#: ../share/extensions/restack.inx.h:7
-msgid "Left"
-msgstr ""
+msgstr "נקודה אופקית:"
 
 #: ../share/extensions/restack.inx.h:8
 msgid "Left to Right (0)"
-msgstr ""
+msgstr "שמאל־לימין (0)"
 
 #: ../share/extensions/restack.inx.h:9
-#, fuzzy
 msgid "Middle"
-msgstr "ק×\95×\91×¥"
+msgstr "×\90×\9eצע×\99"
 
 #: ../share/extensions/restack.inx.h:10
 msgid "Radial Inward"
-msgstr ""
+msgstr "מעגלי כלפי פנים"
 
 #: ../share/extensions/restack.inx.h:11
 msgid "Radial Outward"
-msgstr ""
+msgstr "מעגלי כלפי חוץ"
 
 #: ../share/extensions/restack.inx.h:12
 msgid "Restack"
-msgstr ""
+msgstr "ערום מחדש"
 
 #: ../share/extensions/restack.inx.h:13
-#, fuzzy
 msgid "Restack Direction:"
-msgstr "רזולוציה:"
-
-#: ../share/extensions/restack.inx.h:14
-#, fuzzy
-msgid "Right"
-msgstr "גובה"
+msgstr "כיוון המערם המחודש:"
 
 #: ../share/extensions/restack.inx.h:15
 msgid "Right to Left (180)"
-msgstr ""
+msgstr "ימין־לשמאל (180)"
 
 #: ../share/extensions/restack.inx.h:17
 msgid "Top to Bottom (270)"
-msgstr ""
+msgstr "הפוך אנכית (270)"
 
 #: ../share/extensions/restack.inx.h:18
 msgid "Vertical Point:"
-msgstr ""
+msgstr "נקודה אנכית:"
 
 #: ../share/extensions/rtree.inx.h:1
 msgid "Initial size"
-msgstr ""
+msgstr "גודל התחלתי"
 
 #: ../share/extensions/rtree.inx.h:2
 msgid "Minimum size"
-msgstr ""
+msgstr "גודל מזערי"
 
 #: ../share/extensions/rtree.inx.h:3
 msgid "Random Tree"
-msgstr ""
+msgstr "עץ אקראי"
 
 #: ../share/extensions/rubberstretch.inx.h:2
 #, no-c-format
 msgid "Curve (%):"
-msgstr ""
+msgstr "עיקול (%):"
 
 #: ../share/extensions/rubberstretch.inx.h:4
 msgid "Rubber Stretch"
-msgstr ""
+msgstr "מתיחת גומי"
 
 #: ../share/extensions/rubberstretch.inx.h:6
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "Strength (%):"
-msgstr "×\90×\95ר×\9a:"
+msgstr "×\9b×\95×\97 (%):"
 
 #: ../share/extensions/sk1_input.inx.h:1
-#, fuzzy
 msgid "Open files saved in sK1 vector graphics editor"
-msgstr "×\90×\99נקסק×\99×\99פ ×¢×\95ר×\9a ×\92רפ×\99ק×\94 ×\95ק×\98×\95ר×\99ת"
+msgstr "פת×\97 ×§×\91צ×\99×\9d ×©× ×©×\9eר×\95 ×\91×¢×\95ר×\9a ×\94×\92רפ×\99ק×\94 sK1"
 
 #: ../share/extensions/sk1_input.inx.h:2
 msgid "sK1 vector graphics files (.sk1)"
-msgstr ""
+msgstr "קבצי גרפיקת וקטורים sK1 (.sk1)"
 
 #: ../share/extensions/sk1_input.inx.h:3
 msgid "sK1 vector graphics files input"
-msgstr ""
+msgstr "קלט קבצי גרפיקה וקטורית sK1"
 
 #: ../share/extensions/sk_input.inx.h:1
 msgid "A diagram created with the program Sketch"
-msgstr ""
+msgstr "תרשים שנוצר באמצעות התוכנה Sketch"
 
 #: ../share/extensions/sk_input.inx.h:2
 msgid "Sketch Diagram (*.sk)"
-msgstr ""
+msgstr "תרשים Sketch (*.sk)"
 
 #: ../share/extensions/sk_input.inx.h:3
 msgid "Sketch Input"
-msgstr ""
+msgstr "קלט Sketch"
 
 #: ../share/extensions/spirograph.inx.h:1
 msgid "Gear Placement"
-msgstr ""
+msgstr "מיקום גלגל השיניים"
 
 #: ../share/extensions/spirograph.inx.h:2
 msgid "Inside (Hypotrochoid)"
-msgstr ""
+msgstr "פנימי (היפוטרוכויד)"
 
 #: ../share/extensions/spirograph.inx.h:3
 msgid "Outside (Epitrochoid)"
-msgstr ""
+msgstr "חיצוני (אפיטרוכויד)"
 
 #: ../share/extensions/spirograph.inx.h:4
 msgid "Quality (Default = 16)"
-msgstr ""
+msgstr "איכות (ברירת מחדל = 16)"
 
 #: ../share/extensions/spirograph.inx.h:5
 msgid "R - Ring Radius (px)"
-msgstr ""
+msgstr "R - רדיוס הטבעת (פיקסלים)"
 
 #: ../share/extensions/spirograph.inx.h:7
 msgid "Rotation (deg)"
-msgstr ""
+msgstr "סיבוב (מעלות)"
 
 #: ../share/extensions/spirograph.inx.h:8
 msgid "Spirograph"
-msgstr ""
+msgstr "ספירוגרף"
 
 #: ../share/extensions/spirograph.inx.h:9
 msgid "d - Pen Radius (px)"
-msgstr ""
+msgstr "d - רדיוס העט (פיקסלים)"
 
 #: ../share/extensions/spirograph.inx.h:10
 msgid "r - Gear Radius (px)"
-msgstr ""
+msgstr "r - רדיוס גלגל השיניים (פיקסלים)"
 
 #: ../share/extensions/straightseg.inx.h:1
 msgid "Behavior"
-msgstr ""
+msgstr "התנהגות"
 
 #: ../share/extensions/straightseg.inx.h:4
 msgid "Straighten Segments"
-msgstr ""
+msgstr "יישר מקטעים"
 
 #: ../share/extensions/summersnight.inx.h:1
 msgid "Envelope"
-msgstr ""
+msgstr "מעטפה"
 
-#: ../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 ""
+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 ""
+msgstr "מבנה הגדרת ה־GUI של מיקרוסופט"
 
 #: ../share/extensions/svg2xaml.inx.h:3
 msgid "XAML Output"
-msgstr ""
+msgstr "פלט XAML"
 
 #: ../share/extensions/svg_and_media_zip_output.inx.h:1
 msgid "Compressed Inkscape SVG with media (*.zip)"
-msgstr ""
+msgstr "קבצי SVG של אינקסקייפ דחוסים יחד עם מדיה (*.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 ""
+msgid "Inkscape's native file format compressed with Zip and including all media files"
+msgstr "מבנה הקובץ הטבעי של אינקסקייפ דחוס ב־Zip וכולל את כל קבצי המדיה"
 
 #: ../share/extensions/svg_and_media_zip_output.inx.h:3
 msgid "ZIP Output"
-msgstr ""
+msgstr "פלט ZIP"
 
 #: ../share/extensions/text_braille.inx.h:1
-#, fuzzy
 msgid "Convert to Braille"
-msgstr "×\94×\96×\96 ×§×\95 ×\9e× ×\97×\94"
+msgstr "×\94×\9eר ×\9c×\91ר×\99×\99×\9c"
 
 #: ../share/extensions/text_flipcase.inx.h:2
 msgid "fLIP cASE"
-msgstr ""
+msgstr "החלף רישיות"
 
 #: ../share/extensions/text_lowercase.inx.h:2
 msgid "lowercase"
-msgstr ""
+msgstr "אותיות קטנות"
 
 #: ../share/extensions/text_randomcase.inx.h:2
 msgid "rANdOm CasE"
-msgstr ""
+msgstr "בלבל רישיות"
 
 #: ../share/extensions/text_replace.inx.h:1
 msgid "By:"
-msgstr ""
+msgstr "ע\"י:"
 
 #: ../share/extensions/text_replace.inx.h:2
 msgid "Replace text"
-msgstr ""
+msgstr "החלף טקסט"
 
 #: ../share/extensions/text_replace.inx.h:3
 msgid "Replace:"
-msgstr ""
+msgstr "החלף:"
 
 #: ../share/extensions/text_sentencecase.inx.h:1
 msgid "Sentence case"
-msgstr ""
+msgstr "רישיות למשפט"
 
 #: ../share/extensions/text_titlecase.inx.h:2
 msgid "Title Case"
-msgstr ""
+msgstr "רישיות למילה"
 
 #: ../share/extensions/text_uppercase.inx.h:2
 msgid "UPPERCASE"
-msgstr ""
+msgstr "אותיות גדולות"
 
 #: ../share/extensions/triangle.inx.h:1
-#, fuzzy
 msgid "Angle a / deg"
-msgstr "מעלות"
+msgstr "×\96×\95×\95×\99ת ×\90 / ×\9e×¢×\9c×\95ת"
 
 #: ../share/extensions/triangle.inx.h:2
-#, fuzzy
 msgid "Angle b / deg"
-msgstr "מעלות"
+msgstr "×\96×\95×\95×\99ת ×\91 / ×\9e×¢×\9c×\95ת"
 
 #: ../share/extensions/triangle.inx.h:3
-#, fuzzy
 msgid "Angle c / deg"
-msgstr "מעלות"
+msgstr "×\96×\95×\95×\99ת ×\92 / ×\9e×¢×\9c×\95ת"
 
 #: ../share/extensions/triangle.inx.h:4
 msgid "From Side a and Angles a, b"
-msgstr ""
+msgstr "מצד a והזוויות a, b"
 
 #: ../share/extensions/triangle.inx.h:5
 msgid "From Side c and Angles a, b"
-msgstr ""
+msgstr "מצד c והזוויות a, b"
 
 #: ../share/extensions/triangle.inx.h:6
 msgid "From Sides a, b and Angle a"
-msgstr ""
+msgstr "מהצדדים a, b והזווית a"
 
 #: ../share/extensions/triangle.inx.h:7
 msgid "From Sides a, b and Angle c"
-msgstr ""
+msgstr "מהצדדים a, b והזווית c"
 
 #: ../share/extensions/triangle.inx.h:8
 msgid "From Three Sides"
-msgstr ""
+msgstr "משלושה צדדים"
 
 #: ../share/extensions/triangle.inx.h:11
 msgid "Side Length a / px"
-msgstr ""
+msgstr "אורך הצד א / פיקסלים"
 
 #: ../share/extensions/triangle.inx.h:12
 msgid "Side Length b / px"
-msgstr ""
+msgstr "אורך הצד ב / פיקסלים"
 
 #: ../share/extensions/triangle.inx.h:13
 msgid "Side Length c / px"
-msgstr ""
+msgstr "אורך הצד ג / פיקסלים"
 
 #: ../share/extensions/triangle.inx.h:14
 msgid "Triangle"
-msgstr ""
+msgstr "משולש"
 
 #: ../share/extensions/txt2svg.inx.h:1
 msgid "ASCII Text"
-msgstr "טקסט אסקיי"
+msgstr "טקסט ASCII"
 
 #: ../share/extensions/txt2svg.inx.h:2
 msgid "Text File (*.txt)"
-msgstr ""
+msgstr "קובץ טקסט (*.txt)"
 
 #: ../share/extensions/txt2svg.inx.h:3
 msgid "Text Input"
-msgstr ""
+msgstr "קלט טקסט"
 
 #: ../share/extensions/whirl.inx.h:1
 msgid "Amount of whirl"
-msgstr ""
+msgstr "כמות הסיחרור"
 
 #: ../share/extensions/whirl.inx.h:3
 msgid "Rotation is clockwise"
-msgstr ""
+msgstr "הסיבוב הוא עם כיוון השעון"
 
 #: ../share/extensions/whirl.inx.h:4
 msgid "Whirl"
-msgstr ""
+msgstr "סיחרור"
 
 #: ../share/extensions/wmf_input.inx.h:1
 msgid "A popular graphics file format for clipart"
-msgstr ""
+msgstr "מבנה קובץ נפוץ עבור אוסף תמונות"
 
 #: ../share/extensions/wmf_input.inx.h:2
 msgid "Windows Metafile (*.wmf)"
-msgstr ""
+msgstr "קובץ מטא של Windows(*.wmf)"
 
 #: ../share/extensions/wmf_input.inx.h:3
 msgid "Windows Metafile Input"
-msgstr ""
+msgstr "קלט קובץ מטא של Windows"
 
 #: ../share/extensions/xaml2svg.inx.h:3
 msgid "XAML Input"
-msgstr ""
-
-#, fuzzy
-#~ msgid "Shape"
-#~ msgstr "צורות"
-
-#, fuzzy
+msgstr "קלט XAML"
+
+#~ msgid "Embed fonts on export (Type 1 only) (EPS)"
+#~ msgstr "הטמע גופנים בעת הייצוא (סוג 1 בלבד) (EPS)"
+#~ msgid "Export files with the bounding box set to the page size (EPS)"
+#~ msgstr "ייצא קבצים עם תיבה התוחמת את כל גודל העמוד (EPS)"
+#~ msgid "Report Normal Vector Information"
+#~ msgstr "דווח על נתוני וקטור רגילים"
+#~ msgid ""
+#~ "Cannot set <b>%s</b>: Another element with value <b>%s</b> already exists!"
+#~ msgstr "לא ניתן להגדיר את <b>%s</b>: רכיב אחר בעל הערך <b>%s</b> כבר קיים!"
+#~ msgid "Cairo PS Output"
+#~ msgstr "פלט PS של Cairo"
+#~ msgid ""
+#~ "Cannot create file %s.\n"
+#~ "%s"
+#~ msgstr ""
+#~ "לא ניתן ליצור את הקובץ %s.\n"
+#~ "%s"
+#~ msgid ""
+#~ "Cannot write file %s.\n"
+#~ "%s"
+#~ msgstr ""
+#~ "לא ניתן לכתוב אל הקובץ %s.\n"
+#~ "%s"
+#~ msgid ""
+#~ "Although Inkscape will run, it will use default settings,\n"
+#~ "and any changes made in preferences will not be saved."
+#~ msgstr ""
+#~ "למרות שאינקסקייפ תפעל, היא תשתמש בהגדרות ברירת המחדל,\n"
+#~ "לכן כל שינוי שיבוצע בהגדרות לא יישמר."
+#~ msgid ""
+#~ "%s not a valid XML file, or\n"
+#~ "you don't have read permissions on it.\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s אינו קובץ XML תקני, או\n"
+#~ "שאין לך הרשאות גישה אליו.\n"
+#~ "%s"
+#~ msgid ""
+#~ "%s is not a valid menus file.\n"
+#~ "%s"
+#~ msgstr ""
+#~ "%s אינו קובץ תפריטים תקני.\n"
+#~ "%s"
+#~ msgid ""
+#~ "Inkscape will run with default menus.\n"
+#~ "New menus will not be saved."
+#~ msgstr ""
+#~ "אינקסקייפ תרוץ עם תפריטי ברירת המחדל.\n"
+#~ "תפריטים חדשים לא ישמרו."
+#~ msgid "Bend Path"
+#~ msgstr "כופף נתיב"
+#~ msgid "Slant"
+#~ msgstr "נטייה"
+#~ msgid "Stroke path"
+#~ msgstr "נתיב קו מתאר"
+#~ msgid "Space between copies of the pattern"
+#~ msgstr "רווח בין עותקי התבנית"
+#~ msgid "y = y + x*(slant factor)"
+#~ msgstr "y = y + x*(מקדם שיפוע)"
+#~ msgid "The x-coord of this point is around which the slant will happen"
+#~ msgstr "נקודת הציון ב-X של הנקודה שמסביבה השיפוע יתבצע"
+#~ msgid "This effect does not support arcs yet, try to convert to path."
+#~ msgstr "אפקט זה אינו תומך בקשתות עדיין, נסה להמיר לנתיב."
+#~ msgid "At least one of the objects is <b>not a path</b>, cannot combine."
+#~ msgstr "לפחות אחד מהפריטים <b>איננו נתיב</b>, לא ניתן לשלב"
+#~ msgid ""
+#~ "You cannot combine objects from <b>different groups</b> or <b>layers</b>."
+#~ msgstr "לא ניתן לשלב פריטים מ<b>קבוצות</b> או <b>שכבות שונות</b>."
+#~ msgid "Nothing in the clipboard."
+#~ msgstr "אין כלום בלוח הגזירים."
+#~ msgid "Nothing on the style clipboard."
+#~ msgstr "אין כלום בלוח גזירי הסגנון."
+#~ msgid "Clipboard does not contain a live path effect."
+#~ msgstr "לוח הגזירים אינו מכיל אפקט נתיב חי."
+#~ msgid "Fit page to selection"
+#~ msgstr "התאם את העמוד לבחירה"
+#~ msgid "<b>Pushing %d</b> selected object"
+#~ msgid_plural "<b>Pushing %d</b> selected objects"
+#~ msgstr[0] "<b>דוחף</b> פריט <b>%d</b> שנבחר"
+#~ msgstr[1] "<b>דוחף %d</b> פריטים שנבחרו"
+#~ msgid "<b>Shrinking %d</b> selected object"
+#~ msgid_plural "<b>Shrinking %d</b> selected objects"
+#~ msgstr[0] "<b>מכווץ</b> פריט <b>%d</b> שנבחר"
+#~ msgstr[1] "<b>מכווץ %d</b> פריטים שנבחרו"
+#~ msgid "<b>Growing %d</b> selected object"
+#~ msgid_plural "<b>Growing %d</b> selected objects"
+#~ msgstr[0] "<b>מגדיל</b> פריט <b>%d</b> שנבחר"
+#~ msgstr[1] "<b>מגדיל %d</b> פריטים שנבחרו"
+#~ msgid "<b>Attracting %d</b> selected object"
+#~ msgid_plural "<b>Attracting %d</b> selected objects"
+#~ msgstr[0] "<b>מושך</b> פריט <b>%d</b> שנבחר"
+#~ msgstr[1] "<b>מושך %d</b> פריטים שנבחרו"
+#~ msgid "<b>Repelling %d</b> selected object"
+#~ msgid_plural "<b>Repelling %d</b> selected objects"
+#~ msgstr[0] "<b>הודף</b> פריט <b>%d</b> שנבחר"
+#~ msgstr[1] "<b>הודף %d</b> פריטים שנבחרו"
+#~ msgid "<b>Roughening %d</b> selected object"
+#~ msgid_plural "<b>Roughening %d</b> selected objects"
+#~ msgstr[0] "<b>מחספס</b> פריט <b>%d</b> שנבחר"
+#~ msgstr[1] "<b>מחספס %d</b> פריטים שנבחרו"
+#~ msgid "<b>Painting %d</b> selected object"
+#~ msgid_plural "<b>Painting %d</b> selected objects"
+#~ msgstr[0] "<b>צובע</b> פריט <b>%d</b> שנבחר"
+#~ msgstr[1] "<b>צובע %d</b> פריטים שנבחרו"
+#~ msgid "<b>Jittering colors in %d</b> selected object"
+#~ msgid_plural "<b>Jittering colors in %d</b> selected objects"
+#~ msgstr[0] "<b>מערבב את צבעי</b> הפריט ה-<b>%d</b> שנבחר"
+#~ msgstr[1] "<b>מערבב את צבעי%d</b> הפריטים שנבחרו"
+#~ msgid "Repel tweak"
+#~ msgstr "עיוות בהדיפה"
+#~ msgid "<b>Snapping to special nodes</b>"
+#~ msgstr "<b>הצמדה למפרקים מיוחדים</b>"
+#~ msgid "Export"
+#~ msgstr "ייצא"
+#~ msgid ""
+#~ "This value affects the amount of smoothing applied to freehand lines; "
+#~ "lower values produce more uneven paths with more nodes"
+#~ msgstr ""
+#~ "ערך זה משפיע על כמות ההחלקה שתופעל על קווים ביד חופשית; ערכים נמוכים יותר "
+#~ "מייצרים יותר נתיבים לא שווים עם יותר מפרקים"
+#~ msgid "Dialogs stay on top (experimental!)"
+#~ msgstr "תיבות הדו-שיח נשארות עליונות (נסיוני!)"
+#~ msgid ""
+#~ "Whether dialogs should stay on top of document windows. Read the "
+#~ "ReleaseNotes on this issue! (Rightclick the taskbar button and press "
+#~ "'Restore' to bring back a minimized document window)"
+#~ msgstr ""
+#~ "האם תיבות הדו-שיח אמורות להשאר מעל לחלונות המסמך. קרא את הערות-ההפצה "
+#~ "להפצה זו! (מקש ימני על לחצן סרגל המשימות ולחיצה על 'שיחזור' כדי להעלות "
+#~ "בחזרה חלון מסמך ממוזער)"
+#~ msgid "Grid units"
+#~ msgstr "יחידות הרשת"
+#~ msgid "Origin Y"
+#~ msgstr "מקור ב-Y"
+#~ msgid "Spacing X"
+#~ msgstr "ריווח ב-X"
+#~ msgid "Spacing Y"
+#~ msgstr "ריווח ב-Y"
+#~ msgid "Selects the color used for major (highlighted) grid lines."
+#~ msgstr "בוחר את הצבע המשמש לקווי רשת ראשיים (מודגשים)."
+#~ msgid "Major grid line every"
+#~ msgstr "קו רשת ראשי בכל"
+#~ msgid "Angle X"
+#~ msgstr "זווית ב-X"
+#~ msgid "Angle Z"
+#~ msgstr "זווית ב-Z"
+#~ msgid "Make the commands toolbar icons smaller"
+#~ msgstr "הקטן את סמלי הפקודות בסרגל הכלים"
+#~ msgid ""
+#~ "Make the commands toolbar use the 'secondary' toolbar size (requires "
+#~ "restart)"
+#~ msgstr ""
+#~ "גרום לסרגל הכלים של הפקודות להשתמש בגודל סרגל הכלים ה'משני' (דורש איתחול)"
+#~ msgid "_Apply"
+#~ msgstr "_החל"
+#~ msgid "Apply chosen effect to selection"
+#~ msgstr "החל את האפקט הנבחר על הבחירה"
 #~ msgid "Tall"
-#~ msgstr "קטן"
-
-#, fuzzy
+#~ msgstr "גבוה"
 #~ msgid "Square"
-#~ msgstr "שפר חדות"
+#~ msgstr "ריבוע"
+#~ msgid "Wide"
+#~ msgstr "רחב"
+#~ msgid "Delete Segment"
+#~ msgstr "מחק מקטע"
+#~ msgid "Node Break"
+#~ msgstr "שבור מפרק"
+#~ msgid "Grow mode"
+#~ msgstr "מצב הגדלה"
+#~ msgid "Grow (outset) parts of paths"
+#~ msgstr "הגדל (הרחב) חלקים מנתיבים"
+#~ msgid "Repel mode"
+#~ msgstr "מצב הדיפה"
+#~ msgid "Repel parts of paths from cursor"
+#~ msgstr "הדוף חלקים מנתיבים מסמן העכבר"
+#~ msgid "Reset all parameters to defaults"
+#~ msgstr "אפס את כל ההגדרות לברירת מחדל"
+#~ msgid "Custom..."
+#~ msgstr "מותאם אישית..."
+#~ msgid "Interpolate style (experimental)"
+#~ msgstr "סגנון הריגול (ניסויי)"
+#~ msgid "Postscript"
+#~ msgstr "Postscript"
+#~ msgid "Postscript (*.ps)"
+#~ msgstr "Postscript (*.ps)"
+#~ msgid "Developer Examples"
+#~ msgstr "דוגמאות למפתחים"
+#~ msgid "RadioButton example"
+#~ msgstr "כפתור בחירה לדוגמה"
+#~ msgid "Select option: "
+#~ msgstr "בחר אפשרות: "
+#~ msgid "Select second option: "
+#~ msgstr "בחר אפשרות שניה: "
+#~ msgid "Random Point"
+#~ msgstr "נקודה אקראית"
+#~ msgid "Random Position"
+#~ msgstr "מיקום אקראי"
 
 #, fuzzy
 #~ msgid "Degrees:"
@@ -18322,6 +19198,10 @@ msgstr ""
 #~ msgid "Creator:"
 #~ msgstr "פינות:"
 
+#, fuzzy
+#~ msgid "Rights:"
+#~ msgstr "גובה"
+
 #, fuzzy
 #~ msgid "Relation:"
 #~ msgstr "רזולוציה:"
@@ -18330,6 +19210,15 @@ msgstr ""
 #~ msgid "Coverage:"
 #~ msgstr "טולרנס"
 
+#, fuzzy
+#~ msgid "Contributor:"
+#~ msgstr "ניגודיות"
+
 #, fuzzy
 #~ msgid "Free Art License"
 #~ msgstr "רישיון"
+
+#, fuzzy
+#~ msgid "Default License"
+#~ msgstr "רישיון"
+
index 8ac1ddd0e260cc43ba7c8d71ced1b7c93e6d0e09..6d9fa53cf29dac351b6c5c3e20c713da972f771e 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -3756,7 +3756,7 @@ msgstr "Het automatisch detecteren van de bestandsindeling is mislukt. Het besta
 #. localized share/templates/default.xx.svg file, where xx is your language code.
 #: ../src/file.cpp:136
 msgid "default.svg"
-msgstr "standaard.svg"
+msgstr "default.svg"
 
 #: ../src/file.cpp:222
 #: ../src/file.cpp:962
index 74a16232a59358e632f660a2df09d26a93819ed9..bc7032f4cd15b1a32e14eb585dba76f35f9319ad 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: inkscape\n"
 "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2008-10-26 02:38+0400\n"
-"PO-Revision-Date: 2008-10-26 02:48+0300\n"
+"POT-Creation-Date: 2008-11-03 13:17+0300\n"
+"PO-Revision-Date: 2008-11-03 13:42+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"
@@ -110,12 +110,12 @@ msgid "Select <b>at least one non-connector object</b>."
 msgstr "Выделите <b>как минимум один объект (не соединительную линию)</b>."
 
 #: ../src/connector-context.cpp:1321
-#: ../src/widgets/toolbox.cpp:6485
+#: ../src/widgets/toolbox.cpp:6503
 msgid "Make connectors avoid selected objects"
 msgstr "Линии обходят выделенные объекты"
 
 #: ../src/connector-context.cpp:1322
-#: ../src/widgets/toolbox.cpp:6495
+#: ../src/widgets/toolbox.cpp:6513
 msgid "Make connectors ignore selected objects"
 msgstr "Линии игнорируют выделенные объекты"
 
@@ -734,8 +734,8 @@ msgstr "Взять видимый цвет (без прозрачности) в
 #: ../src/dialogs/clonetiler.cpp:2778
 #: ../src/extension/internal/bitmap/opacity.cpp:37
 #: ../src/extension/internal/bitmap/opacity.cpp:39
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2246
-#: ../src/widgets/toolbox.cpp:3845
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2255
+#: ../src/widgets/toolbox.cpp:3863
 msgid "Opacity"
 msgstr "Непрозрачность"
 
@@ -838,7 +838,7 @@ msgid "Each clone is created with the probability determined by the picked value
 msgstr "Вероятность появления каждого клона определяется значением, взятым в данной точке"
 
 #: ../src/dialogs/clonetiler.cpp:2758
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2221
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
 msgid "Size"
 msgstr "Размер"
 
@@ -1012,19 +1012,19 @@ msgstr "x_1"
 #: ../src/dialogs/export.cpp:320
 #: ../src/dialogs/object-attributes.cpp:60
 #: ../src/dialogs/object-attributes.cpp:68
-#: ../src/widgets/toolbox.cpp:3643
-#: ../src/widgets/toolbox.cpp:4233
-#: ../src/widgets/toolbox.cpp:5252
+#: ../src/widgets/toolbox.cpp:3661
+#: ../src/widgets/toolbox.cpp:4251
+#: ../src/widgets/toolbox.cpp:5270
 msgid "Width:"
 msgstr "Ширина:"
 
 #: ../src/dialogs/export.cpp:326
 msgid "_y0:"
-msgstr "_y0"
+msgstr "y_0"
 
 #: ../src/dialogs/export.cpp:331
 msgid "y_1:"
-msgstr "y_1"
+msgstr "_y1"
 
 #: ../src/dialogs/export.cpp:336
 #: ../src/dialogs/export.cpp:495
@@ -1076,11 +1076,11 @@ msgstr "Экспортировать каждый выделенный объе
 
 #: ../src/dialogs/export.cpp:629
 msgid "Hide all except selected"
-msgstr "СпÑ\80Ñ\8fÑ\82аÑ\82Ñ\8c Ð²Ñ\81е Ð¾Ð±Ñ\8aекÑ\82Ñ\8b ÐºÑ\80оме Ð²Ñ\8bделеннÑ\8bÑ\85"
+msgstr "ЭкÑ\81поÑ\80Ñ\82иÑ\80оваÑ\82Ñ\8c Ñ\82олÑ\8cко Ð²Ñ\8bделенное"
 
 #: ../src/dialogs/export.cpp:633
 msgid "In the exported image, hide all objects except those that are selected"
-msgstr "СпÑ\80Ñ\8fÑ\82аÑ\82Ñ\8c Ð²Ñ\81е Ð¾Ð±Ñ\8aекÑ\82Ñ\8b Ñ\8dкÑ\81поÑ\80Ñ\82иÑ\80Ñ\83емого Ñ\80иÑ\81Ñ\83нка ÐºÑ\80оме Ð²Ñ\8bделенного"
+msgstr "Ð\98Ñ\81клÑ\8eÑ\87иÑ\82Ñ\8c Ð¸Ð· ÐºÐ¾Ð½ÐµÑ\87ного Ð¸Ð·Ð¾Ð±Ñ\80ажениÑ\8f Ð²Ñ\81е Ð½ÐµÐ²Ñ\8bделеннÑ\8bе Ð¾Ð±Ñ\8aекÑ\82Ñ\8b"
 
 #: ../src/dialogs/export.cpp:650
 msgid "_Export"
@@ -1423,14 +1423,14 @@ msgstr "Единица измерения:"
 #: ../src/dialogs/guidelinedialog.cpp:45
 #: ../src/dialogs/object-attributes.cpp:58
 #: ../src/dialogs/object-attributes.cpp:66
-#: ../src/widgets/toolbox.cpp:1437
+#: ../src/widgets/toolbox.cpp:1455
 msgid "X:"
 msgstr "X:"
 
 #: ../src/dialogs/guidelinedialog.cpp:46
 #: ../src/dialogs/object-attributes.cpp:59
 #: ../src/dialogs/object-attributes.cpp:67
-#: ../src/widgets/toolbox.cpp:1455
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Y:"
 msgstr "Y:"
 
@@ -1799,8 +1799,8 @@ msgstr "Физическое или цифровое представление
 #. _settings->add_checkbutton(false, SP_ATTR_STITCHTILES, _("Stitch Tiles"), "stitch", "noStitch");
 #: ../src/dialogs/rdf.cpp:248
 #: ../src/extension/internal/bitmap/addNoise.cpp:46
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2199
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2278
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2208
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2287
 msgid "Type"
 msgstr "Тип"
 
@@ -1923,30 +1923,30 @@ msgstr "XML-фрагмент RDF-раздела \"Лицензия\"."
 #. TRANSLATORS: "Set" is a verb here
 #: ../src/dialogs/sp-attribute-widget.cpp:166
 #: ../src/dialogs/sp-attribute-widget.cpp:773
-#: ../src/dialogs/xml-tree.cpp:534
+#: ../src/dialogs/xml-tree.cpp:535
 msgid "Set attribute"
 msgstr "Установить атрибут"
 
-#: ../src/dialogs/stroke-style.cpp:293
-#: ../src/dialogs/stroke-style.cpp:352
+#: ../src/dialogs/stroke-style.cpp:294
+#: ../src/dialogs/stroke-style.cpp:353
 msgid "Set stroke color"
 msgstr "Установка цвета обводки"
 
-#: ../src/dialogs/stroke-style.cpp:343
+#: ../src/dialogs/stroke-style.cpp:344
 #: ../src/ui/widget/selected-style.cpp:255
 #: ../src/ui/widget/selected-style.cpp:484
 msgid "Remove stroke"
 msgstr "Удалить обводку"
 
-#: ../src/dialogs/stroke-style.cpp:404
+#: ../src/dialogs/stroke-style.cpp:405
 msgid "Set gradient on stroke"
 msgstr "Заливка обводки градиентом"
 
-#: ../src/dialogs/stroke-style.cpp:448
+#: ../src/dialogs/stroke-style.cpp:449
 msgid "Set pattern on stroke"
 msgstr "Заливка обводки текстурой"
 
-#: ../src/dialogs/stroke-style.cpp:469
+#: ../src/dialogs/stroke-style.cpp:470
 #: ../src/ui/widget/selected-style.cpp:193
 #: ../src/ui/widget/selected-style.cpp:251
 #: ../src/ui/widget/selected-style.cpp:509
@@ -1954,7 +1954,7 @@ msgstr "Заливка обводки текстурой"
 msgid "Unset stroke"
 msgstr "Снять обводку"
 
-#: ../src/dialogs/stroke-style.cpp:772
+#: ../src/dialogs/stroke-style.cpp:773
 #: ../src/filter-enums.cpp:95
 #: ../src/flood-context.cpp:292
 #: ../src/live_effects/lpe-ruler.cpp:34
@@ -1964,27 +1964,27 @@ msgstr "Снять обводку"
 #: ../src/ui/dialog/inkscape-preferences.cpp:509
 #: ../src/ui/dialog/inkscape-preferences.cpp:1054
 #: ../src/verbs.cpp:2211
-#: ../src/widgets/toolbox.cpp:3406
+#: ../src/widgets/toolbox.cpp:3424
 #: ../share/extensions/grid_polar.inx.h:16
 msgid "None"
 msgstr "Нет"
 
-#: ../src/dialogs/stroke-style.cpp:827
+#: ../src/dialogs/stroke-style.cpp:828
 #: ../src/widgets/gradient-vector.cpp:264
 #: ../src/widgets/paint-selector.cpp:885
 msgid "No document selected"
 msgstr "Документ не выбран"
 
-#: ../src/dialogs/stroke-style.cpp:911
+#: ../src/dialogs/stroke-style.cpp:912
 msgid "Set markers"
 msgstr "Установка маркеров"
 
 #. Stroke width
-#: ../src/dialogs/stroke-style.cpp:1084
+#: ../src/dialogs/stroke-style.cpp:1085
 msgid "StrokeWidth|Width:"
 msgstr "Толщина:"
 
-#: ../src/dialogs/stroke-style.cpp:1098
+#: ../src/dialogs/stroke-style.cpp:1099
 #: ../share/extensions/edge3d.inx.h:9
 msgid "Stroke width"
 msgstr "Толщина обводки"
@@ -1992,28 +1992,28 @@ msgstr "Толщина обводки"
 #. Join type
 #. TRANSLATORS: The line join style specifies the shape to be used at the
 #. corners of paths. It can be "miter", "round" or "bevel".
-#: ../src/dialogs/stroke-style.cpp:1122
+#: ../src/dialogs/stroke-style.cpp:1123
 msgid "Join:"
 msgstr "Соединение:"
 
 #. TRANSLATORS: Miter join: joining lines with a sharp (pointed) corner.
 #. For an example, draw a triangle with a large stroke width and modify the
 #. "Join" option (in the Fill and Stroke dialog).
-#: ../src/dialogs/stroke-style.cpp:1134
+#: ../src/dialogs/stroke-style.cpp:1135
 msgid "Miter join"
 msgstr "Острое"
 
 #. TRANSLATORS: Round join: joining lines with a rounded corner.
 #. For an example, draw a triangle with a large stroke width and modify the
 #. "Join" option (in the Fill and Stroke dialog).
-#: ../src/dialogs/stroke-style.cpp:1142
+#: ../src/dialogs/stroke-style.cpp:1143
 msgid "Round join"
 msgstr "Скруглённое"
 
 #. TRANSLATORS: Bevel join: joining lines with a blunted (flattened) corner.
 #. For an example, draw a triangle with a large stroke width and modify the
 #. "Join" option (in the Fill and Stroke dialog).
-#: ../src/dialogs/stroke-style.cpp:1150
+#: ../src/dialogs/stroke-style.cpp:1151
 msgid "Bevel join"
 msgstr "Фаска"
 
@@ -2024,59 +2024,71 @@ msgstr "Фаска"
 #. spike that extends well beyond the connection point. The purpose of the
 #. miter limit is to cut off such spikes (i.e. convert them into bevels)
 #. when they become too long.
-#: ../src/dialogs/stroke-style.cpp:1161
+#: ../src/dialogs/stroke-style.cpp:1162
 msgid "Miter limit:"
 msgstr "Предел острия:"
 
-#: ../src/dialogs/stroke-style.cpp:1169
+#: ../src/dialogs/stroke-style.cpp:1170
 msgid "Maximum length of the miter (in units of stroke width)"
 msgstr "Максимальная длина острия (в единицах толщины обводки)"
 
 #. Cap type
 #. TRANSLATORS: cap type specifies the shape for the ends of lines
-#: ../src/dialogs/stroke-style.cpp:1181
+#: ../src/dialogs/stroke-style.cpp:1182
 msgid "Cap:"
 msgstr "Концы:"
 
 #. TRANSLATORS: Butt cap: the line shape does not extend beyond the end point
 #. of the line; the ends of the line are square
-#: ../src/dialogs/stroke-style.cpp:1192
+#: ../src/dialogs/stroke-style.cpp:1193
 msgid "Butt cap"
 msgstr "Плоские"
 
 #. TRANSLATORS: Round cap: the line shape extends beyond the end point of the
 #. line; the ends of the line are rounded
-#: ../src/dialogs/stroke-style.cpp:1199
+#: ../src/dialogs/stroke-style.cpp:1200
 msgid "Round cap"
 msgstr "Круглые"
 
 #. TRANSLATORS: Square cap: the line shape extends beyond the end point of the
 #. line; the ends of the line are square
-#: ../src/dialogs/stroke-style.cpp:1206
+#: ../src/dialogs/stroke-style.cpp:1207
 msgid "Square cap"
 msgstr "Квадратные"
 
 #. Dash
-#: ../src/dialogs/stroke-style.cpp:1212
+#: ../src/dialogs/stroke-style.cpp:1213
 msgid "Dashes:"
 msgstr "Пунктир:"
 
 #. TRANSLATORS: Path markers are an SVG feature that allows you to attach arbitrary shapes
 #. (arrowheads, bullets, faces, whatever) to the start, end, or middle nodes of a path.
-#: ../src/dialogs/stroke-style.cpp:1229
+#: ../src/dialogs/stroke-style.cpp:1230
 msgid "Start Markers:"
 msgstr "Маркер начала:"
 
-#: ../src/dialogs/stroke-style.cpp:1239
+#: ../src/dialogs/stroke-style.cpp:1232
+msgid "Start Markers are drawn on the first node of a path or shape"
+msgstr ""
+
+#: ../src/dialogs/stroke-style.cpp:1241
 msgid "Mid Markers:"
 msgstr "Маркер середины:"
 
-#: ../src/dialogs/stroke-style.cpp:1249
+#: ../src/dialogs/stroke-style.cpp:1243
+msgid "Mid Markers are drawn on every node of a path or shape except the first and last nodes"
+msgstr ""
+
+#: ../src/dialogs/stroke-style.cpp:1252
 msgid "End Markers:"
 msgstr "Маркер конца:"
 
-#: ../src/dialogs/stroke-style.cpp:1573
-#: ../src/dialogs/stroke-style.cpp:1669
+#: ../src/dialogs/stroke-style.cpp:1254
+msgid "End Markers are drawn on the last node of a path or shape"
+msgstr ""
+
+#: ../src/dialogs/stroke-style.cpp:1577
+#: ../src/dialogs/stroke-style.cpp:1673
 msgid "Set stroke style"
 msgstr "Установка стиля обводки"
 
@@ -2138,12 +2150,12 @@ msgid "Justify lines"
 msgstr "Выключить строки по ширине"
 
 #: ../src/dialogs/text-edit.cpp:303
-#: ../src/widgets/toolbox.cpp:6290
+#: ../src/widgets/toolbox.cpp:6308
 msgid "Horizontal text"
 msgstr "Горизонтальный текст"
 
 #: ../src/dialogs/text-edit.cpp:317
-#: ../src/widgets/toolbox.cpp:6302
+#: ../src/widgets/toolbox.cpp:6320
 msgid "Vertical text"
 msgstr "Вертикальный текст"
 
@@ -2249,111 +2261,111 @@ msgstr "Расставить"
 msgid "Arrange selected objects"
 msgstr "Расставить выделенные объекты"
 
-#: ../src/dialogs/xml-tree.cpp:174
+#: ../src/dialogs/xml-tree.cpp:175
 msgid "<b>Click</b> to select nodes, <b>drag</b> to rearrange."
 msgstr "<b>Щелчком</b> выделяется ветвь, <b>перетаскиванием</b> меняется порядок."
 
-#: ../src/dialogs/xml-tree.cpp:185
+#: ../src/dialogs/xml-tree.cpp:186
 msgid "<b>Click</b> attribute to edit."
 msgstr "<b>Щелкните мышкой</b> по атрибуту для его правки."
 
-#: ../src/dialogs/xml-tree.cpp:189
+#: ../src/dialogs/xml-tree.cpp:190
 #, c-format
 msgid "Attribute <b>%s</b> selected. Press <b>Ctrl+Enter</b> when done editing to commit changes."
 msgstr "Выбран атрибут <b>%s</b>. Нажмите <b>Ctrl+Enter</b>, когда закончите правку."
 
-#: ../src/dialogs/xml-tree.cpp:285
+#: ../src/dialogs/xml-tree.cpp:286
 msgid "Drag to reorder nodes"
 msgstr "Используйте мышь для перетаскивания ветвей"
 
-#: ../src/dialogs/xml-tree.cpp:305
+#: ../src/dialogs/xml-tree.cpp:306
 msgid "New element node"
 msgstr "Создать ветвь элемента"
 
-#: ../src/dialogs/xml-tree.cpp:327
+#: ../src/dialogs/xml-tree.cpp:328
 msgid "New text node"
 msgstr "Создать ветвь с текстом"
 
-#: ../src/dialogs/xml-tree.cpp:348
-#: ../src/dialogs/xml-tree.cpp:1427
-#: ../src/nodepath.cpp:2168
+#: ../src/dialogs/xml-tree.cpp:349
+#: ../src/dialogs/xml-tree.cpp:1432
+#: ../src/nodepath.cpp:2202
 msgid "Duplicate node"
 msgstr "Дублирование ветви"
 
-#: ../src/dialogs/xml-tree.cpp:369
-#: ../src/dialogs/xml-tree.cpp:1444
-#: ../src/nodepath.cpp:3415
-#: ../src/widgets/toolbox.cpp:1275
+#: ../src/dialogs/xml-tree.cpp:370
+#: ../src/dialogs/xml-tree.cpp:1449
+#: ../src/nodepath.cpp:3482
+#: ../src/widgets/toolbox.cpp:1283
 msgid "Delete node"
 msgstr "Удаление ветви"
 
-#: ../src/dialogs/xml-tree.cpp:385
-#: ../src/dialogs/xml-tree.cpp:1589
+#: ../src/dialogs/xml-tree.cpp:386
+#: ../src/dialogs/xml-tree.cpp:1594
 msgid "Unindent node"
 msgstr "Переместить к корню"
 
-#: ../src/dialogs/xml-tree.cpp:400
-#: ../src/dialogs/xml-tree.cpp:1568
+#: ../src/dialogs/xml-tree.cpp:401
+#: ../src/dialogs/xml-tree.cpp:1573
 msgid "Indent node"
 msgstr "Переместить от корня"
 
-#: ../src/dialogs/xml-tree.cpp:412
-#: ../src/dialogs/xml-tree.cpp:1521
+#: ../src/dialogs/xml-tree.cpp:413
+#: ../src/dialogs/xml-tree.cpp:1526
 msgid "Raise node"
 msgstr "Поднять ветвь"
 
-#: ../src/dialogs/xml-tree.cpp:424
-#: ../src/dialogs/xml-tree.cpp:1538
+#: ../src/dialogs/xml-tree.cpp:425
+#: ../src/dialogs/xml-tree.cpp:1543
 msgid "Lower node"
 msgstr "Опустить ветвь"
 
-#: ../src/dialogs/xml-tree.cpp:469
-#: ../src/dialogs/xml-tree.cpp:1462
+#: ../src/dialogs/xml-tree.cpp:470
+#: ../src/dialogs/xml-tree.cpp:1467
 msgid "Delete attribute"
 msgstr "Удалить атрибут"
 
 #. TRANSLATORS: "Attribute" is a noun here
-#: ../src/dialogs/xml-tree.cpp:514
+#: ../src/dialogs/xml-tree.cpp:515
 msgid "Attribute name"
 msgstr "Имя атрибута"
 
 #. TRANSLATORS: "Set" is a verb here
-#: ../src/dialogs/xml-tree.cpp:536
+#: ../src/dialogs/xml-tree.cpp:537
 msgid "Set"
 msgstr "Установить"
 
 #. TRANSLATORS: "Attribute" is a noun here
-#: ../src/dialogs/xml-tree.cpp:559
+#: ../src/dialogs/xml-tree.cpp:560
 msgid "Attribute value"
 msgstr "Значение атрибута"
 
-#: ../src/dialogs/xml-tree.cpp:892
+#: ../src/dialogs/xml-tree.cpp:897
 msgid "Drag XML subtree"
 msgstr "Перетаскивание поддерева XML"
 
-#: ../src/dialogs/xml-tree.cpp:1329
+#: ../src/dialogs/xml-tree.cpp:1334
 msgid "New element node..."
 msgstr "Создать ветвь элемента..."
 
-#: ../src/dialogs/xml-tree.cpp:1351
+#: ../src/dialogs/xml-tree.cpp:1356
 #: ../src/ui/dialog/whiteboard-connect.cpp:119
 #: ../src/ui/dialog/whiteboard-sharewithchat.cpp:104
 msgid "Cancel"
 msgstr "Отменить"
 
-#: ../src/dialogs/xml-tree.cpp:1359
+#: ../src/dialogs/xml-tree.cpp:1364
 msgid "Create"
 msgstr "Создать"
 
-#: ../src/dialogs/xml-tree.cpp:1393
+#: ../src/dialogs/xml-tree.cpp:1398
 msgid "Create new element node"
 msgstr "Создание ветви элемента"
 
-#: ../src/dialogs/xml-tree.cpp:1409
+#: ../src/dialogs/xml-tree.cpp:1414
 msgid "Create new text node"
 msgstr "Создание текстовой ветви"
 
-#: ../src/dialogs/xml-tree.cpp:1491
+#: ../src/dialogs/xml-tree.cpp:1496
 msgid "Change attribute"
 msgstr "Смена атрибута"
 
@@ -2398,7 +2410,7 @@ msgstr "Основная длина оси Z"
 
 #: ../src/display/canvas-axonomgrid.cpp:399
 #: ../src/ui/dialog/inkscape-preferences.cpp:949
-#: ../src/widgets/toolbox.cpp:2941
+#: ../src/widgets/toolbox.cpp:2959
 msgid "Angle X:"
 msgstr "Угол X:"
 
@@ -2409,7 +2421,7 @@ msgstr "Угол оси X"
 
 #: ../src/display/canvas-axonomgrid.cpp:401
 #: ../src/ui/dialog/inkscape-preferences.cpp:950
-#: ../src/widgets/toolbox.cpp:3020
+#: ../src/widgets/toolbox.cpp:3038
 msgid "Angle Z:"
 msgstr "Угол Z:"
 
@@ -2768,8 +2780,8 @@ msgstr "Адаптивная постеризация"
 #: ../src/libgdl/gdl-dock-placeholder.c:169
 #: ../src/live_effects/lpe-bendpath.cpp:56
 #: ../src/live_effects/lpe-patternalongpath.cpp:63
-#: ../src/widgets/toolbox.cpp:2614
-#: ../src/widgets/toolbox.cpp:3643
+#: ../src/widgets/toolbox.cpp:2632
+#: ../src/widgets/toolbox.cpp:3661
 msgid "Width"
 msgstr "Ширина"
 
@@ -2778,7 +2790,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:2631
+#: ../src/widgets/toolbox.cpp:2649
 msgid "Height"
 msgstr "Высота"
 
@@ -2878,7 +2890,7 @@ msgstr "Размывание"
 #: ../src/extension/internal/bitmap/oilPaint.cpp:38
 #: ../src/extension/internal/bitmap/sharpen.cpp:39
 #: ../src/extension/internal/bitmap/unsharpmask.cpp:42
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2256
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2265
 msgid "Radius"
 msgstr "Радиус"
 
@@ -3134,7 +3146,7 @@ msgstr "Яркость"
 #: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:427
 #: ../src/widgets/sp-color-scales.cpp:428
-#: ../src/widgets/toolbox.cpp:3815
+#: ../src/widgets/toolbox.cpp:3833
 #: ../share/extensions/color_randomize.inx.h:5
 msgid "Saturation"
 msgstr "Насыщенность"
@@ -3145,7 +3157,7 @@ msgstr "Насыщенность"
 #: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:424
 #: ../src/widgets/sp-color-scales.cpp:425
-#: ../src/widgets/toolbox.cpp:3800
+#: ../src/widgets/toolbox.cpp:3818
 #: ../share/extensions/color_randomize.inx.h:2
 msgid "Hue"
 msgstr "Тон"
@@ -3343,7 +3355,7 @@ msgstr "PDF 1.4"
 #: ../src/extension/internal/cairo-ps-out.cpp:284
 #: ../src/extension/internal/cairo-ps-out.cpp:321
 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:218
-#: ../src/extension/internal/emf-win32-inout.cpp:2435
+#: ../src/extension/internal/emf-win32-inout.cpp:2433
 #: ../src/extension/internal/eps-out.cpp:92
 #: ../src/extension/internal/ps-out.cpp:84
 msgid "Convert texts to paths"
@@ -3447,39 +3459,39 @@ msgstr "Файл Encapsulated PostScript"
 msgid "Convert filter effects to bitmaps"
 msgstr "Объекты с фильтрами SVG в растр"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2405
+#: ../src/extension/internal/emf-win32-inout.cpp:2403
 msgid "EMF Input"
 msgstr "Импорт EMF"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2410
+#: ../src/extension/internal/emf-win32-inout.cpp:2408
 msgid "Enhanced Metafiles (*.emf)"
 msgstr "Файлы Enhanced Metafiles (*.emf)"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2411
+#: ../src/extension/internal/emf-win32-inout.cpp:2409
 msgid "Enhanced Metafiles"
 msgstr "Файлы Enhanced Metafile"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2419
+#: ../src/extension/internal/emf-win32-inout.cpp:2417
 msgid "WMF Input"
 msgstr "Импорт WMF"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2424
+#: ../src/extension/internal/emf-win32-inout.cpp:2422
 msgid "Windows Metafiles (*.wmf)"
 msgstr "Файлы Windows Metafile (*.wmf)"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2425
+#: ../src/extension/internal/emf-win32-inout.cpp:2423
 msgid "Windows Metafiles"
 msgstr "Файлы Windows Metafile"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2433
+#: ../src/extension/internal/emf-win32-inout.cpp:2431
 msgid "EMF Output"
 msgstr "Экспорт в EMF"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2439
+#: ../src/extension/internal/emf-win32-inout.cpp:2437
 msgid "Enhanced Metafile (*.emf)"
 msgstr "Файлы Enhanced Metafile (*.emf)"
 
-#: ../src/extension/internal/emf-win32-inout.cpp:2440
+#: ../src/extension/internal/emf-win32-inout.cpp:2438
 msgid "Enhanced Metafile"
 msgstr "Enhanced Metafile"
 
@@ -3567,7 +3579,7 @@ msgid "Blur radius, px"
 msgstr "Радиус размывания, px"
 
 #: ../src/extension/internal/filter/drop-shadow.h:38
-#: ../src/ui/widget/object-composite-settings.cpp:52
+#: ../src/ui/widget/object-composite-settings.cpp:62
 #: ../src/ui/widget/selected-style.cpp:1027
 #: ../src/ui/widget/selected-style.cpp:1028
 msgid "Opacity, %"
@@ -3845,7 +3857,7 @@ msgstr "Сдвиг по вертикали"
 #: ../src/extension/internal/grid.cpp:202
 #: ../share/extensions/draw_from_triangle.inx.h:30
 #: ../share/extensions/eqtexsvg.inx.h:3
-#: ../share/extensions/funcplot.inx.h:12
+#: ../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
@@ -4227,7 +4239,7 @@ msgid "default.svg"
 msgstr "default.svg"
 
 #: ../src/file.cpp:240
-#: ../src/file.cpp:1020
+#: ../src/file.cpp:1023
 #, c-format
 msgid "Failed to load the requested file %s"
 msgstr "Не удалось загрузить запрошенный файл %s"
@@ -4276,6 +4288,7 @@ msgstr "Не найдено расширение Inkscape для сохране
 
 #: ../src/file.cpp:579
 #: ../src/file.cpp:587
+#: ../src/file.cpp:593
 msgid "Document not saved."
 msgstr "Документ не сохранен."
 
@@ -4284,70 +4297,70 @@ msgstr "Документ не сохранен."
 msgid "File %s could not be saved."
 msgstr "Невозможно сохранить файл %s."
 
-#: ../src/file.cpp:597
+#: ../src/file.cpp:600
 msgid "Document saved."
 msgstr "Документ сохранен."
 
-#: ../src/file.cpp:738
-#: ../src/file.cpp:1147
-#: ../src/file.cpp:1266
+#: ../src/file.cpp:741
+#: ../src/file.cpp:1150
+#: ../src/file.cpp:1269
 #, c-format
 msgid "drawing%s"
 msgstr "рисунок%s"
 
-#: ../src/file.cpp:744
+#: ../src/file.cpp:747
 #, c-format
 msgid "drawing-%d%s"
 msgstr "рисунок-%d%s"
 
-#: ../src/file.cpp:763
+#: ../src/file.cpp:766
 msgid "Select file to save a copy to"
 msgstr "Выберите файл для сохранения копии"
 
-#: ../src/file.cpp:765
+#: ../src/file.cpp:768
 msgid "Select file to save to"
 msgstr "Выберите файл для сохранения"
 
-#: ../src/file.cpp:845
+#: ../src/file.cpp:848
 msgid "No changes need to be saved."
 msgstr "Файл не был изменен. Сохранение не требуется."
 
-#: ../src/file.cpp:862
+#: ../src/file.cpp:865
 msgid "Saving document..."
 msgstr "Выполняется сохранение документа..."
 
-#: ../src/file.cpp:1017
+#: ../src/file.cpp:1020
 msgid "Import"
 msgstr "Импорт"
 
-#: ../src/file.cpp:1049
+#: ../src/file.cpp:1052
 msgid "Select file to import"
 msgstr "Выберите файл для импорта"
 
-#: ../src/file.cpp:1169
-#: ../src/file.cpp:1281
+#: ../src/file.cpp:1172
+#: ../src/file.cpp:1284
 msgid "Select file to export to"
 msgstr "Выберите файл для экспорта"
 
-#: ../src/file.cpp:1308
+#: ../src/file.cpp:1311
 #, c-format
 msgid "Error saving a temporary copy"
 msgstr "Ошибка сохранения временной копии"
 
-#: ../src/file.cpp:1328
+#: ../src/file.cpp:1331
 msgid "Open Clip Art Login"
 msgstr "Вход в Open Clip Art"
 
-#: ../src/file.cpp:1349
+#: ../src/file.cpp:1352
 #, fuzzy, c-format
 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 you didn't forget to choose a license."
 msgstr "В ходе экспорта документа произошла ошибка. Проверьте, корректно ли введены имя сервера, имя пользователя и пароль, есть ли у сервера поддержка webdav, не забыли ли вы указать лицензию."
 
-#: ../src/file.cpp:1370
+#: ../src/file.cpp:1373
 msgid "Document exported..."
 msgstr "Документ экспортирован..."
 
-#: ../src/file.cpp:1398
+#: ../src/file.cpp:1401
 #: ../src/verbs.cpp:2237
 msgid "Import From Open Clip Art Library"
 msgstr "Импортировать из Open Clip Art Library"
@@ -4592,7 +4605,7 @@ msgstr "Видимые цвета"
 #: ../src/widgets/sp-color-icc-selector.cpp:237
 #: ../src/widgets/sp-color-scales.cpp:430
 #: ../src/widgets/sp-color-scales.cpp:431
-#: ../src/widgets/toolbox.cpp:3830
+#: ../src/widgets/toolbox.cpp:3848
 #: ../share/extensions/color_randomize.inx.h:3
 msgid "Lightness"
 msgstr "Яркость"
@@ -4654,43 +4667,43 @@ msgid "<b>Draw over</b> areas to add to fill, hold <b>Alt</b> for touch fill"
 msgstr "<b>Проведите курсором мыши</b> по областям, добавляемым в заливку, нажмите <b>Alt</b> для переключения на касательную заливку"
 
 #: ../src/gradient-context.cpp:132
-#: ../src/gradient-drag.cpp:74
+#: ../src/gradient-drag.cpp:75
 msgid "Linear gradient <b>start</b>"
 msgstr "Линейный градиент: <b>начало</b>"
 
 #. POINT_LG_BEGIN
 #: ../src/gradient-context.cpp:133
-#: ../src/gradient-drag.cpp:75
+#: ../src/gradient-drag.cpp:76
 msgid "Linear gradient <b>end</b>"
 msgstr "Линейный градиент: <b>конец</b>"
 
 #: ../src/gradient-context.cpp:134
-#: ../src/gradient-drag.cpp:76
+#: ../src/gradient-drag.cpp:77
 msgid "Linear gradient <b>mid stop</b>"
 msgstr "<b>Опорная точка</b> линейного градиента"
 
 #: ../src/gradient-context.cpp:135
-#: ../src/gradient-drag.cpp:77
+#: ../src/gradient-drag.cpp:78
 msgid "Radial gradient <b>center</b>"
 msgstr "Радиальный градиент: <b>центр</b>"
 
 #: ../src/gradient-context.cpp:136
 #: ../src/gradient-context.cpp:137
-#: ../src/gradient-drag.cpp:78
 #: ../src/gradient-drag.cpp:79
+#: ../src/gradient-drag.cpp:80
 msgid "Radial gradient <b>radius</b>"
 msgstr "Радиальный градиент: <b>радиус</b>"
 
 #: ../src/gradient-context.cpp:138
-#: ../src/gradient-drag.cpp:80
+#: ../src/gradient-drag.cpp:81
 msgid "Radial gradient <b>focus</b>"
 msgstr "Радиальный градиент: <b>фокус</b>"
 
 #. POINT_RG_FOCUS
 #: ../src/gradient-context.cpp:139
 #: ../src/gradient-context.cpp:140
-#: ../src/gradient-drag.cpp:81
 #: ../src/gradient-drag.cpp:82
+#: ../src/gradient-drag.cpp:83
 msgid "Radial gradient <b>mid stop</b>"
 msgstr "<b>Опорная точка</b> радиального градиента"
 
@@ -4790,40 +4803,40 @@ msgstr[2] "<b>Градиент</b> для %d объектов; <b>Ctrl</b> ог
 msgid "Select <b>objects</b> on which to create gradient."
 msgstr "Выделите <b>объекты</b>, к которым будет применен градиент."
 
-#: ../src/gradient-drag.cpp:573
+#: ../src/gradient-drag.cpp:574
 msgid "Merge gradient handles"
 msgstr "Объединение рычагов градиента"
 
-#: ../src/gradient-drag.cpp:896
+#: ../src/gradient-drag.cpp:897
 msgid "Move gradient handle"
 msgstr "Смещение рычага градиента"
 
-#: ../src/gradient-drag.cpp:949
+#: ../src/gradient-drag.cpp:950
 #: ../src/widgets/gradient-vector.cpp:770
 msgid "Delete gradient stop"
 msgstr "Удаление опорной точки"
 
-#: ../src/gradient-drag.cpp:1113
+#: ../src/gradient-drag.cpp:1114
 #, 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 для: %s%s;  c <b>Ctrl</b> прилипать по 1/10 радиуса, щелчком с <b>Ctrl+Alt</b> удалить опорную точку"
 
-#: ../src/gradient-drag.cpp:1117
-#: ../src/gradient-drag.cpp:1124
+#: ../src/gradient-drag.cpp:1118
+#: ../src/gradient-drag.cpp:1125
 msgid " (stroke)"
 msgstr "(штрих)"
 
-#: ../src/gradient-drag.cpp:1121
+#: ../src/gradient-drag.cpp:1122
 #, 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 для: %s%s;  <b>Ctrl</b> ограничивает угол,  <b>Ctrl+Alt</b> фиксирует угол, <b>Ctrl+Shift</b> масштабирует вокруг центра"
 
-#: ../src/gradient-drag.cpp:1129
+#: ../src/gradient-drag.cpp:1130
 #, c-format
 msgid "Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to separate focus"
 msgstr "<b>Центр</b> и <b>фокус</b> радиального градиента; перетаскивание с <b>Shift</b> отделяет фокус"
 
-#: ../src/gradient-drag.cpp:1132
+#: ../src/gradient-drag.cpp:1133
 #, 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"
@@ -4831,15 +4844,15 @@ msgstr[0] "Точка градиента, общая для <b>%d</b> гради
 msgstr[1] "Точка градиента, общая для <b>%d</b> градиентов; перетаскивание с <b>Shift</b> разделяет точки"
 msgstr[2] "Точка градиента, общая для <b>%d</b> градиентов; перетаскивание с <b>Shift</b> разделяет точки"
 
-#: ../src/gradient-drag.cpp:1807
+#: ../src/gradient-drag.cpp:1809
 msgid "Move gradient handle(s)"
 msgstr "Смещение рычага градиента"
 
-#: ../src/gradient-drag.cpp:1843
+#: ../src/gradient-drag.cpp:1845
 msgid "Move gradient mid stop(s)"
 msgstr "Смещение опорной точки градиента"
 
-#: ../src/gradient-drag.cpp:2131
+#: ../src/gradient-drag.cpp:2133
 msgid "Delete gradient stop(s)"
 msgstr "Удалить опорную точку (-и)"
 
@@ -4851,10 +4864,10 @@ msgstr "Единица"
 #. Add the units menu.
 #: ../src/helper/units.cpp:37
 #: ../src/widgets/select-toolbar.cpp:501
-#: ../src/widgets/toolbox.cpp:1469
-#: ../src/widgets/toolbox.cpp:2675
-#: ../src/widgets/toolbox.cpp:5178
-#: ../src/widgets/toolbox.cpp:6691
+#: ../src/widgets/toolbox.cpp:1487
+#: ../src/widgets/toolbox.cpp:2693
+#: ../src/widgets/toolbox.cpp:5196
+#: ../src/widgets/toolbox.cpp:6709
 msgid "Units"
 msgstr "Единицы"
 
@@ -5053,88 +5066,88 @@ msgstr "Не получилось сохранить резервную копи
 
 #. sp_ui_menu_append_check_item_from_verb(m, view, _("_Menu"), _("Show or hide the menu bar"), "menu",
 #. checkitem_toggled, checkitem_update, 0);
-#: ../src/interface.cpp:827
+#: ../src/interface.cpp:828
 msgid "Commands Bar"
 msgstr "Панель команд"
 
-#: ../src/interface.cpp:827
+#: ../src/interface.cpp:828
 msgid "Show or hide the Commands bar (under the menu)"
 msgstr "Показать/скрыть панель команд (под меню)"
 
-#: ../src/interface.cpp:829
+#: ../src/interface.cpp:830
 msgid "Tool Controls Bar"
 msgstr "Панель параметров инструментов"
 
-#: ../src/interface.cpp:829
+#: ../src/interface.cpp:830
 msgid "Show or hide the Tool Controls bar"
 msgstr "Показать/скрыть панель с параметрами инструментов"
 
-#: ../src/interface.cpp:831
+#: ../src/interface.cpp:832
 msgid "_Toolbox"
 msgstr "_Панель инструментов"
 
-#: ../src/interface.cpp:831
+#: ../src/interface.cpp:832
 msgid "Show or hide the main toolbox (on the left)"
 msgstr "Показать/скрыть главную панель инструментов (слева)"
 
-#: ../src/interface.cpp:837
+#: ../src/interface.cpp:838
 msgid "_Palette"
 msgstr "О_бразцы цветов"
 
-#: ../src/interface.cpp:837
+#: ../src/interface.cpp:838
 msgid "Show or hide the color palette"
 msgstr "Показать/скрыть панель с палитрой цветов"
 
-#: ../src/interface.cpp:839
+#: ../src/interface.cpp:840
 msgid "_Statusbar"
 msgstr "_Строка состояния"
 
-#: ../src/interface.cpp:839
+#: ../src/interface.cpp:840
 msgid "Show or hide the statusbar (at the bottom of the window)"
 msgstr "Показать/скрыть строку состояния (внизу окна)"
 
-#: ../src/interface.cpp:893
+#: ../src/interface.cpp:894
 #, c-format
 msgid "Verb \"%s\" Unknown"
 msgstr "Глагол \"%s\" неизвестен"
 
-#: ../src/interface.cpp:932
+#: ../src/interface.cpp:933
 msgid "Open _Recent"
 msgstr "Открыть н_едавние"
 
 #. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1030
+#: ../src/interface.cpp:1031
 #, c-format
 msgid "Enter group #%s"
 msgstr "Войти в группу #%s"
 
-#: ../src/interface.cpp:1041
+#: ../src/interface.cpp:1042
 msgid "Go to parent"
 msgstr "На уровень выше"
 
-#: ../src/interface.cpp:1132
-#: ../src/interface.cpp:1218
+#: ../src/interface.cpp:1133
+#: ../src/interface.cpp:1219
 #: ../src/ui/widget/selected-style.cpp:462
 msgid "Drop color"
 msgstr "Перенос цвета"
 
-#: ../src/interface.cpp:1171
+#: ../src/interface.cpp:1172
 msgid "Drop color on gradient"
 msgstr "Перенос цвета на градиент"
 
-#: ../src/interface.cpp:1231
+#: ../src/interface.cpp:1232
 msgid "Could not parse SVG data"
 msgstr "Невозможно разобрать данные SVG"
 
-#: ../src/interface.cpp:1274
+#: ../src/interface.cpp:1275
 msgid "Drop SVG"
 msgstr "Drop SVG"
 
-#: ../src/interface.cpp:1332
+#: ../src/interface.cpp:1333
 msgid "Drop bitmap image"
 msgstr "Импорт растра"
 
-#: ../src/interface.cpp:1424
+#: ../src/interface.cpp:1425
 #, c-format
 msgid ""
 "<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do you want to replace it?</span>\n"
@@ -5145,7 +5158,7 @@ msgstr ""
 "\n"
 "Этот файл уже есть в каталоге \"%s\". Замена перезапишет его содержание."
 
-#: ../src/interface.cpp:1431
+#: ../src/interface.cpp:1432
 msgid "Replace"
 msgstr "Заменить"
 
@@ -5629,7 +5642,7 @@ msgstr "Something weird happened while getting the child placement for %p from p
 msgid "Dockitem which 'owns' this tablabel"
 msgstr "Dockitem which 'owns' this tablabel"
 
-#: ../src/libnrtype/FontFactory.cpp:778
+#: ../src/libnrtype/FontFactory.cpp:780
 msgid "Ignoring font without family that will crash Pango"
 msgstr "Игнорирование шрифта без гарнитуры приведет к обрушиванию Pango"
 
@@ -6104,31 +6117,31 @@ msgid "If true, the spacing between intermediates is constant along the length o
 msgstr "Если включено, интервал между промежуточными фигурами не меняется на протяжении всего контура. Если выключено, расстояние меняется в зависимости от положения узлов на контуре траектории."
 
 #. initialise your parameters here:
-#: ../src/live_effects/lpe-knot.cpp:327
+#: ../src/live_effects/lpe-knot.cpp:331
 msgid "Gap width"
 msgstr "Ширина интервала:"
 
-#: ../src/live_effects/lpe-knot.cpp:327
+#: ../src/live_effects/lpe-knot.cpp:331
 msgid "The width of the gap in the path where it self-intersects"
 msgstr "Ширина интервала в участках, где контур сам себя пересекает"
 
-#: ../src/live_effects/lpe-knot.cpp:328
+#: ../src/live_effects/lpe-knot.cpp:332
 msgid "Switcher size"
 msgstr "Размер переключателя:"
 
-#: ../src/live_effects/lpe-knot.cpp:328
+#: ../src/live_effects/lpe-knot.cpp:332
 msgid "Orientation indicator/switcher size"
 msgstr "Размер индикатора-переключателя направления"
 
-#: ../src/live_effects/lpe-knot.cpp:329
+#: ../src/live_effects/lpe-knot.cpp:333
 msgid "Crossing Signs"
 msgstr ""
 
-#: ../src/live_effects/lpe-knot.cpp:329
+#: ../src/live_effects/lpe-knot.cpp:333
 msgid "Crossings signs"
 msgstr ""
 
-#: ../src/live_effects/lpe-knot.cpp:336
+#: ../src/live_effects/lpe-knot.cpp:340
 msgid "Drag to select a crossing, click to flip it"
 msgstr ""
 
@@ -6198,22 +6211,22 @@ msgid "Control handle 15"
 msgstr "Регулятор 15"
 
 #: ../src/live_effects/lpe-line_segment.cpp:27
-#: ../src/widgets/toolbox.cpp:5027
+#: ../src/widgets/toolbox.cpp:5045
 msgid "Closed"
 msgstr "Закрытый"
 
 #: ../src/live_effects/lpe-line_segment.cpp:28
-#: ../src/widgets/toolbox.cpp:5029
+#: ../src/widgets/toolbox.cpp:5047
 msgid "Open start"
 msgstr "С открытым началом"
 
 #: ../src/live_effects/lpe-line_segment.cpp:29
-#: ../src/widgets/toolbox.cpp:5031
+#: ../src/widgets/toolbox.cpp:5049
 msgid "Open end"
 msgstr "С открытым концом"
 
 #: ../src/live_effects/lpe-line_segment.cpp:30
-#: ../src/widgets/toolbox.cpp:5033
+#: ../src/widgets/toolbox.cpp:5051
 msgid "Open both"
 msgstr "Открыт с обеих сторон"
 
@@ -6269,7 +6282,7 @@ msgstr "Изменить правый конец параллели"
 #: ../src/live_effects/lpe-sketch.cpp:54
 #: ../src/selection-chemistry.cpp:1478
 #: ../src/seltrans.cpp:448
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2240
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2249
 #: ../src/ui/dialog/transformation.cpp:738
 msgid "Scale"
 msgstr "Масштабирование"
@@ -6442,12 +6455,12 @@ msgid "Both"
 msgstr "Оба"
 
 #: ../src/live_effects/lpe-ruler.cpp:35
-#: ../src/widgets/toolbox.cpp:4686
+#: ../src/widgets/toolbox.cpp:4704
 msgid "Start"
 msgstr "Начало"
 
 #: ../src/live_effects/lpe-ruler.cpp:36
-#: ../src/widgets/toolbox.cpp:4699
+#: ../src/widgets/toolbox.cpp:4717
 msgid "End"
 msgstr "Конец"
 
@@ -6814,208 +6827,208 @@ msgstr "Не удалось найти ID команды '%s', указанны
 msgid "Unable to find node ID: '%s'\n"
 msgstr "Невозможно найти ID узла: '%s'\n"
 
-#: ../src/main.cpp:256
+#: ../src/main.cpp:257
 msgid "Print the Inkscape version number"
 msgstr "Напечатать версию Inkscape"
 
-#: ../src/main.cpp:261
+#: ../src/main.cpp:262
 msgid "Do not use X server (only process files from console)"
 msgstr "Не использовать X сервер (допустимы только консольные операции)"
 
-#: ../src/main.cpp:266
+#: ../src/main.cpp:267
 msgid "Try to use X server (even if $DISPLAY is not set)"
 msgstr "Пытаться использовать X сервер (даже если переменная $DISPLAY не установлена)"
 
-#: ../src/main.cpp:271
+#: ../src/main.cpp:272
 msgid "Open specified document(s) (option string may be excluded)"
 msgstr "Открыть указанные документы (строка параметра может быть исключена)"
 
-#: ../src/main.cpp:272
-#: ../src/main.cpp:277
-#: ../src/main.cpp:282
-#: ../src/main.cpp:349
-#: ../src/main.cpp:354
-#: ../src/main.cpp:359
-#: ../src/main.cpp:364
-#: ../src/main.cpp:370
+#: ../src/main.cpp:273
+#: ../src/main.cpp:278
+#: ../src/main.cpp:283
+#: ../src/main.cpp:350
+#: ../src/main.cpp:355
+#: ../src/main.cpp:360
+#: ../src/main.cpp:365
+#: ../src/main.cpp:371
 msgid "FILENAME"
 msgstr "FILENAME"
 
-#: ../src/main.cpp:276
+#: ../src/main.cpp:277
 msgid "Print document(s) to specified output file (use '| program' for pipe)"
 msgstr "Напечатать документ(ы) в указанный файл (используйте '| program' для передачи программе)"
 
-#: ../src/main.cpp:281
+#: ../src/main.cpp:282
 msgid "Export document to a PNG file"
 msgstr "Экспортировать документ в файл PNG"
 
-#: ../src/main.cpp:286
+#: ../src/main.cpp:287
 msgid "The resolution used for exporting SVG into bitmap (default 90)"
 msgstr "Разрешение, используемое для экспорта SVG в растр (по умолчанию 90)"
 
-#: ../src/main.cpp:287
+#: ../src/main.cpp:288
 #: ../src/ui/widget/rendering-options.cpp:43
 msgid "DPI"
 msgstr "DPI"
 
-#: ../src/main.cpp:291
+#: ../src/main.cpp:292
 msgid "Exported area in SVG user units (default is the canvas; 0,0 is lower-left corner)"
 msgstr "Экспортируемая область в SVG пользовательских единицах измерения (по умолчанию - вся канва; 0,0 - левый нижний угол)"
 
-#: ../src/main.cpp:292
+#: ../src/main.cpp:293
 msgid "x0:y0:x1:y1"
 msgstr "x0:y0:x1:y1"
 
-#: ../src/main.cpp:296
+#: ../src/main.cpp:297
 msgid "Exported area is the entire drawing (not canvas)"
 msgstr "Экспортируемая область включает в себя весь рисунок (а не страницу)"
 
-#: ../src/main.cpp:301
+#: ../src/main.cpp:302
 msgid "Exported area is the entire canvas"
 msgstr "Экспортируемая область включает в себя весь холст"
 
-#: ../src/main.cpp:306
+#: ../src/main.cpp:307
 msgid "Snap the bitmap export area outwards to the nearest integer values (in SVG user units)"
 msgstr "Расширить область экспортируемого растра до ближайших целых значений (в SVG единицах)"
 
-#: ../src/main.cpp:311
+#: ../src/main.cpp:312
 msgid "The width of exported bitmap in pixels (overrides export-dpi)"
 msgstr "Ширина экспортируемого растра в точках (отменяет export-dpi)"
 
-#: ../src/main.cpp:312
+#: ../src/main.cpp:313
 msgid "WIDTH"
 msgstr "WIDTH"
 
-#: ../src/main.cpp:316
+#: ../src/main.cpp:317
 msgid "The height of exported bitmap in pixels (overrides export-dpi)"
 msgstr "Высота экспортируемого растра в точках (отменяет export-dpi)"
 
-#: ../src/main.cpp:317
+#: ../src/main.cpp:318
 msgid "HEIGHT"
 msgstr "HEIGHT"
 
-#: ../src/main.cpp:321
+#: ../src/main.cpp:322
 msgid "The ID of the object to export"
 msgstr "Идентификатор экспортируемого объекта"
 
-#: ../src/main.cpp:322
-#: ../src/main.cpp:410
+#: ../src/main.cpp:323
+#: ../src/main.cpp:411
 msgid "ID"
 msgstr "ID"
 
 #. TRANSLATORS: this means: "Only export the object whose id is given in --export-id".
 #. See "man inkscape" for details.
-#: ../src/main.cpp:328
+#: ../src/main.cpp:329
 msgid "Export just the object with export-id, hide all others (only with export-id)"
 msgstr "Экспортировать только объект с заданным export-id, скрыв все прочие объекты (только с опцией export-id)"
 
-#: ../src/main.cpp:333
+#: ../src/main.cpp:334
 msgid "Use stored filename and DPI hints when exporting (only with export-id)"
 msgstr "Использовать сохраненное имя файла и разрешение при экспорте (только с опцией export-id)"
 
-#: ../src/main.cpp:338
+#: ../src/main.cpp:339
 msgid "Background color of exported bitmap (any SVG-supported color string)"
 msgstr "Фоновый цвет для экспорта растра (любая поддерживаемая в SVG цветовая строка)"
 
-#: ../src/main.cpp:339
+#: ../src/main.cpp:340
 msgid "COLOR"
 msgstr "COLOR"
 
-#: ../src/main.cpp:343
+#: ../src/main.cpp:344
 msgid "Background opacity of exported bitmap (either 0.0 to 1.0, or 1 to 255)"
 msgstr "Непрозрачность фона для экспорта растра (от 0.0 до 1.0 либо от 1 до 255)"
 
-#: ../src/main.cpp:344
+#: ../src/main.cpp:345
 msgid "VALUE"
 msgstr "VALUE"
 
-#: ../src/main.cpp:348
+#: ../src/main.cpp:349
 msgid "Export document to plain SVG file (no sodipodi or inkscape namespaces)"
 msgstr "Экспортировать документ в формат чистый SVG (без пространств имен sodipodi: или inkscape:)"
 
-#: ../src/main.cpp:353
+#: ../src/main.cpp:354
 msgid "Export document to a PS file"
 msgstr "Экспортировать документ в файл PS"
 
-#: ../src/main.cpp:358
+#: ../src/main.cpp:359
 msgid "Export document to an EPS file"
 msgstr "Экспортировать документ в файл EPS"
 
-#: ../src/main.cpp:363
+#: ../src/main.cpp:364
 msgid "Export document to a PDF file"
 msgstr "Экспортировать документ в файл PDF"
 
-#: ../src/main.cpp:369
+#: ../src/main.cpp:370
 msgid "Export document to an Enhanced Metafile (EMF) File"
 msgstr "Экспортировать документ в файл Enhanced Metafile (EMF)"
 
-#: ../src/main.cpp:375
+#: ../src/main.cpp:376
 msgid "Convert text object to paths on export (EPS)"
 msgstr "Перевести текст в контуры при экспорте (EPS)"
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
-#: ../src/main.cpp:381
+#: ../src/main.cpp:382
 msgid "Query the X coordinate of the drawing or, if specified, of the object with --query-id"
 msgstr "Запросить X координату рисунка или, если задано, объекта с --query-id"
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
-#: ../src/main.cpp:387
+#: ../src/main.cpp:388
 msgid "Query the Y coordinate of the drawing or, if specified, of the object with --query-id"
 msgstr "Запросить Y координату рисунка или, если задано, объекта с --query-id"
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
-#: ../src/main.cpp:393
+#: ../src/main.cpp:394
 msgid "Query the width of the drawing or, if specified, of the object with --query-id"
 msgstr "Запросить ширину рисунка или, если задано, объекта — при помощи --query-id"
 
 #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help"
-#: ../src/main.cpp:399
+#: ../src/main.cpp:400
 msgid "Query the height of the drawing or, if specified, of the object with --query-id"
 msgstr "Запросить высоту рисунка или, если задано, объекта с --query-id"
 
-#: ../src/main.cpp:404
+#: ../src/main.cpp:405
 msgid "List id,x,y,w,h for all objects"
 msgstr "Перечислить id,x,y,w,h для всех объектов"
 
-#: ../src/main.cpp:409
+#: ../src/main.cpp:410
 msgid "The ID of the object whose dimensions are queried"
 msgstr "Идентификатор объекта для запроса"
 
 #. TRANSLATORS: this option makes Inkscape print the name (path) of the extension directory
-#: ../src/main.cpp:415
+#: ../src/main.cpp:416
 msgid "Print out the extension directory and exit"
 msgstr "Вывести на экран каталог расширения и выйти"
 
-#: ../src/main.cpp:420
+#: ../src/main.cpp:421
 msgid "Remove unused definitions from the defs section(s) of the document"
 msgstr "Убрать лишние определения из раздела &lt;defs&gt; документа"
 
-#: ../src/main.cpp:425
+#: ../src/main.cpp:426
 msgid "List the IDs of all the verbs in Inkscape"
 msgstr "Вывести список ID всех действий Inkscape"
 
-#: ../src/main.cpp:430
+#: ../src/main.cpp:431
 msgid "Verb to call when Inkscape opens."
 msgstr "Вызываемое действие при открытии Inkscape."
 
-#: ../src/main.cpp:431
+#: ../src/main.cpp:432
 msgid "VERB-ID"
 msgstr "ДЕЙСТВИЕ-ID"
 
-#: ../src/main.cpp:435
+#: ../src/main.cpp:436
 msgid "Object ID to select when Inkscape opens."
 msgstr "ID объекта, выделяемого при открытии документа в Inkscape."
 
-#: ../src/main.cpp:436
+#: ../src/main.cpp:437
 msgid "OBJECT-ID"
 msgstr "ОБЪЕКТ-ID"
 
-#: ../src/main.cpp:440
+#: ../src/main.cpp:441
 msgid "Start Inkscape in interative shell mode."
 msgstr "Запустить Inkscape в интерактивном командном режиме"
 
-#: ../src/main.cpp:721
-#: ../src/main.cpp:957
+#: ../src/main.cpp:741
+#: ../src/main.cpp:977
 msgid ""
 "[OPTIONS...] [FILE...]\n"
 "\n"
@@ -7122,182 +7135,190 @@ msgstr "<b>Shift</b>: выделить/развыделить узел, откл
 msgid "<b>Alt</b>: lock handle length; <b>Ctrl+Alt</b>: move along handles"
 msgstr "<b>Alt</b>: зафиксировать длину рычага; <b>Ctrl+Alt</b>: двигать вдоль рычагов"
 
-#: ../src/nodepath.cpp:749
+#: ../src/nodepath.cpp:746
 #: ../src/seltrans.cpp:541
 msgid "Stamp"
 msgstr "Штамповка"
 
-#: ../src/nodepath.cpp:1602
-#: ../src/nodepath.cpp:1628
+#: ../src/nodepath.cpp:1624
+#: ../src/nodepath.cpp:1650
 msgid "Move nodes vertically"
 msgstr "Смещение узлов по вертикали"
 
-#: ../src/nodepath.cpp:1604
-#: ../src/nodepath.cpp:1630
+#: ../src/nodepath.cpp:1626
+#: ../src/nodepath.cpp:1652
 msgid "Move nodes horizontally"
 msgstr "Смещение узлов по горизонтали"
 
-#: ../src/nodepath.cpp:1606
-#: ../src/nodepath.cpp:1632
-#: ../src/nodepath.cpp:1647
-#: ../src/nodepath.cpp:3501
+#: ../src/nodepath.cpp:1628
+#: ../src/nodepath.cpp:1654
+#: ../src/nodepath.cpp:1669
+#: ../src/nodepath.cpp:3574
 msgid "Move nodes"
 msgstr "Смещение узлов"
 
-#: ../src/nodepath.cpp:1685
+#: ../src/nodepath.cpp:1707
 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>Рычаг узла</b>: перетаскивание с <b>Ctrl</b> ограничивает угол; с <b>Alt</b> фиксирует длину; с <b>Shift</b> синхронно вращает противоположный рычаг"
 
-#: ../src/nodepath.cpp:1855
+#: ../src/nodepath.cpp:1877
 msgid "Align nodes"
 msgstr "Выровнять узлы"
 
-#: ../src/nodepath.cpp:1917
+#: ../src/nodepath.cpp:1939
 msgid "Distribute nodes"
 msgstr "Расстановка узлов"
 
-#: ../src/nodepath.cpp:1955
+#: ../src/nodepath.cpp:1977
 msgid "Add nodes"
 msgstr "Добавление узлов"
 
-#: ../src/nodepath.cpp:1957
-#: ../src/nodepath.cpp:2056
+#: ../src/nodepath.cpp:1979
+#: ../src/nodepath.cpp:2081
 msgid "Add node"
 msgstr "Добавление узла"
 
-#: ../src/nodepath.cpp:2139
+#: ../src/nodepath.cpp:2173
 msgid "Break path"
 msgstr "Разбитие контура"
 
-#: ../src/nodepath.cpp:2195
+#: ../src/nodepath.cpp:2229
 msgid "Close subpath"
 msgstr "Закрытие подконтура"
 
-#: ../src/nodepath.cpp:2256
+#: ../src/nodepath.cpp:2290
 msgid "Join nodes"
 msgstr "Соединение узлов"
 
-#: ../src/nodepath.cpp:2283
+#: ../src/nodepath.cpp:2317
 msgid "Close subpath by segment"
 msgstr "Закрытие подконтура сегментом"
 
-#: ../src/nodepath.cpp:2337
+#: ../src/nodepath.cpp:2371
 msgid "Join nodes by segment"
 msgstr "Соединение узлов сегментом"
 
-#: ../src/nodepath.cpp:2350
-#: ../src/nodepath.cpp:2365
+#: ../src/nodepath.cpp:2384
+#: ../src/nodepath.cpp:2399
 msgid "To join, you must have <b>two endnodes</b> selected."
 msgstr "Для соединения выделите <b>два оконечных узла</b>."
 
-#: ../src/nodepath.cpp:2522
-#: ../src/nodepath.cpp:2558
-#: ../src/nodepath.cpp:2562
+#: ../src/nodepath.cpp:2556
+#: ../src/nodepath.cpp:2592
+#: ../src/nodepath.cpp:2596
 msgid "Delete nodes"
 msgstr "Удаление узлов"
 
-#: ../src/nodepath.cpp:2524
+#: ../src/nodepath.cpp:2558
 msgid "Delete nodes preserving shape"
 msgstr "Удаление узлов без смены формы"
 
-#: ../src/nodepath.cpp:2581
-#: ../src/nodepath.cpp:2595
+#: ../src/nodepath.cpp:2615
+#: ../src/nodepath.cpp:2629
 msgid "Select <b>two non-endpoint nodes</b> on a path between which to delete segments."
 msgstr "Выделите <b>два неоконечных узла</b> контура, чтобы удалить сегменты между ними"
 
-#: ../src/nodepath.cpp:2691
+#: ../src/nodepath.cpp:2725
 msgid "Cannot find path between nodes."
 msgstr "Невозможно найти контур между узлами."
 
-#: ../src/nodepath.cpp:2723
-#: ../src/widgets/toolbox.cpp:1318
+#: ../src/nodepath.cpp:2757
+#: ../src/widgets/toolbox.cpp:1326
 msgid "Delete segment"
 msgstr "Удаление сегмента"
 
-#: ../src/nodepath.cpp:2744
+#: ../src/nodepath.cpp:2778
 msgid "Change segment type"
 msgstr "Смена типа сегмента"
 
-#: ../src/nodepath.cpp:2761
-#: ../src/nodepath.cpp:3459
+#: ../src/nodepath.cpp:2795
+#: ../src/nodepath.cpp:3532
 msgid "Change node type"
 msgstr "Смена типа узла"
 
-#: ../src/nodepath.cpp:3747
+#: ../src/nodepath.cpp:3820
 msgid "Retract handle"
 msgstr "Втяжка узла"
 
-#: ../src/nodepath.cpp:3796
+#: ../src/nodepath.cpp:3875
 msgid "Move node handle"
 msgstr "Смещение рычага узла"
 
-#: ../src/nodepath.cpp:3982
+#: ../src/nodepath.cpp:4061
 #, 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>Рычаг узла</b> под углом %0.2f&#176;, длина %s; перетаскивание с <b>Ctrl</b> ограничивает угол; с <b>Alt</b> фиксирует длину; с <b>Shift</b> синхронно вращает противоположный рычаг"
 
-#: ../src/nodepath.cpp:4176
+#: ../src/nodepath.cpp:4255
 msgid "Rotate nodes"
 msgstr "Вращение узлов"
 
-#: ../src/nodepath.cpp:4307
+#: ../src/nodepath.cpp:4370
+msgid "Cannot scale nodes when all are at the same location."
+msgstr ""
+
+#: ../src/nodepath.cpp:4396
 msgid "Scale nodes"
 msgstr "Масштабирование узлов"
 
-#: ../src/nodepath.cpp:4351
+#: ../src/nodepath.cpp:4440
 msgid "Flip nodes"
 msgstr "Зеркалирование узлов"
 
-#: ../src/nodepath.cpp:4520
+#: ../src/nodepath.cpp:4609
 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>Узел</b>: перетаскивание при нажатой клавише <b>Ctrl</b> — с прилипанием по горизонтали/вертикали; с <b>Ctrl+Alt</b> — вдоль рычагов"
 
 #. TRANSLATORS: "end" is an adjective here (NOT a verb)
-#: ../src/nodepath.cpp:4754
+#: ../src/nodepath.cpp:4842
 msgid "end node"
 msgstr "оконечный узел"
 
 #. TRANSLATORS: "cusp" means "sharp" (cusp node); see also the Advanced Tutorial
-#: ../src/nodepath.cpp:4759
+#: ../src/nodepath.cpp:4847
 msgid "cusp"
 msgstr "острый"
 
 #. TRANSLATORS: "smooth" is an adjective here
-#: ../src/nodepath.cpp:4762
+#: ../src/nodepath.cpp:4850
 msgid "smooth"
 msgstr "гладкий"
 
-#: ../src/nodepath.cpp:4764
+#: ../src/nodepath.cpp:4852
+msgid "auto"
+msgstr "автоматический"
+
+#: ../src/nodepath.cpp:4854
 msgid "symmetric"
 msgstr "симметричный"
 
 #. TRANSLATORS: "end" is an adjective here (NOT a verb)
-#: ../src/nodepath.cpp:4770
+#: ../src/nodepath.cpp:4860
 msgid "end node, handle retracted (drag with <b>Shift</b> to extend)"
 msgstr "оконечный узел, рычаг втянут (вытаскивается с <b>Shift</b>)"
 
-#: ../src/nodepath.cpp:4772
+#: ../src/nodepath.cpp:4862
 msgid "one handle retracted (drag with <b>Shift</b> to extend)"
 msgstr "один рычаг втянут (вытаскивается с <b>Shift</b>)"
 
-#: ../src/nodepath.cpp:4775
+#: ../src/nodepath.cpp:4865
 msgid "both handles retracted (drag with <b>Shift</b> to extend)"
 msgstr "оба рычага втянуты (вытаскиваются с <b>Shift</b>)"
 
-#: ../src/nodepath.cpp:4787
+#: ../src/nodepath.cpp:4877
 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 "<b>Перетаскивайте</b> узлы или рычаги; <b>Alt+перетаскивание</b> узлов для лепки; клавиши <b>со стрелками</b> для смещения узлов, <b>&lt; &gt;</b> для масштабирования, <b>[ ]</b> для вращения"
 
-#: ../src/nodepath.cpp:4788
+#: ../src/nodepath.cpp:4878
 msgid "<b>Drag</b> the node or its handles; <b>arrow</b> keys to move the node"
 msgstr "Перетаскивайте узел или его рычаги; клавиши-стрелки двигают узел"
 
-#: ../src/nodepath.cpp:4814
-#: ../src/nodepath.cpp:4826
+#: ../src/nodepath.cpp:4904
+#: ../src/nodepath.cpp:4916
 msgid "Select a single object to edit its nodes or handles."
 msgstr "Выберите один объект для изменения его узлов или рычагов."
 
-#: ../src/nodepath.cpp:4818
+#: ../src/nodepath.cpp:4908
 #, 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."
@@ -7305,11 +7326,11 @@ msgstr[0] "Выделен <b>0</b> из <b>%i</b> узлов. Для выдел
 msgstr[1] "Выделено <b>0</b> из <b>%i</b> узлов.  Для выделения узлов используйте щелчок, Shift+щелчок, либо обведение рамкой."
 msgstr[2] "Выделено <b>0</b> из <b>%i</b> узлов.  Для выделения узлов используйте щелчок, Shift+щелчок, либо обведение рамкой."
 
-#: ../src/nodepath.cpp:4824
+#: ../src/nodepath.cpp:4914
 msgid "Drag the handles of the object to modify it."
 msgstr "Двигайте ручки фигуры, чтобы изменить ее."
 
-#: ../src/nodepath.cpp:4832
+#: ../src/nodepath.cpp:4922
 #, c-format
 msgid "<b>%i</b> of <b>%i</b> node selected; %s. %s."
 msgid_plural "<b>%i</b> of <b>%i</b> nodes selected; %s. %s."
@@ -7317,7 +7338,7 @@ msgstr[0] "<b>%i</b> из <b>%i</b> узла выделен; %s. %s."
 msgstr[1] "<b>%i</b> из <b>%i</b> узлов выделено; %s. %s."
 msgstr[2] "<b>%i</b> из <b>%i</b> узлов выделено; %s. %s."
 
-#: ../src/nodepath.cpp:4839
+#: ../src/nodepath.cpp:4929
 #, 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."
@@ -7325,7 +7346,7 @@ msgstr[0] "<b>%i</b> из <b>%i</b> узла выделен в <b>%i</b> из <b
 msgstr[1] "<b>%i</b> из <b>%i</b> узлов выделено в <b>%i</b> из <b>%i</b> субконтуров. %s."
 msgstr[2] "<b>%i</b> из <b>%i</b> узлов выделено в <b>%i</b> из <b>%i</b> субконтуров. %s."
 
-#: ../src/nodepath.cpp:4845
+#: ../src/nodepath.cpp:4935
 #, c-format
 msgid "<b>%i</b> of <b>%i</b> node selected. %s."
 msgid_plural "<b>%i</b> of <b>%i</b> nodes selected. %s."
@@ -7343,9 +7364,8 @@ msgstr "Менять <b>вертикальный радиус</b> закругл
 
 #: ../src/object-edit.cpp:416
 #: ../src/object-edit.cpp:420
-#, fuzzy
 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>ширину и высоту</b> прямоугольника. <b>Ctrl</b> фиксирует отношение либо растягивает/сжимает только по одному измерению."
+msgstr "Менять <b>ширину и высоту</b> прямоугольника; <b>Ctrl</b> фиксирует отношение сторон или растягивает/сжимает только по одному измерению."
 
 #: ../src/object-edit.cpp:654
 #: ../src/object-edit.cpp:657
@@ -7374,9 +7394,8 @@ msgid "Adjust ellipse <b>height</b>, with <b>Ctrl</b> to make circle"
 msgstr "Менять <b>малую ось</b> эллипса. <b>Ctrl</b> дает круг."
 
 #: ../src/object-edit.cpp:902
-#, fuzzy
 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>Начальная точка</b> сектора или дуги. <b>Ctrl</b> ограничивает угол. Перетаскивание <b>внутри</b> дает дугу, <b>снаружи</b> — сектор."
+msgstr "<b>Начальная точка</b> сектора или дуги; <b>Ctrl</b> ограничивает угол; перетаскивание <b>внутри</b> дает дугу, <b>снаружи</b> — сектор."
 
 #: ../src/object-edit.cpp:906
 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"
@@ -7406,67 +7425,67 @@ msgstr "Менять <b>расстояние втяжки</b>"
 msgid "Drag to resize the <b>flowed text frame</b>"
 msgstr "Изменять размер <b>текстового блока</b>"
 
-#: ../src/path-chemistry.cpp:60
+#: ../src/path-chemistry.cpp:48
 msgid "Select <b>at least two objects</b> to combine."
 msgstr "Выделите <b>как минимум два объекта</b> для объединения."
 
-#: ../src/path-chemistry.cpp:64
+#: ../src/path-chemistry.cpp:52
 msgid "Combining paths..."
 msgstr "Выполняется объединение контуров..."
 
-#: ../src/path-chemistry.cpp:166
+#: ../src/path-chemistry.cpp:154
 msgid "Combine"
 msgstr "Объединение"
 
-#: ../src/path-chemistry.cpp:173
+#: ../src/path-chemistry.cpp:161
 msgid "<b>No path(s)</b> to combine in the selection."
 msgstr "В выделении <b>нет контуров</b> для объединения."
 
-#: ../src/path-chemistry.cpp:185
+#: ../src/path-chemistry.cpp:173
 msgid "Select <b>path(s)</b> to break apart."
 msgstr "Выделите <b>контур(ы)</b> для разбиения."
 
-#: ../src/path-chemistry.cpp:189
+#: ../src/path-chemistry.cpp:177
 msgid "Breaking apart paths..."
 msgstr "Выполняется разбиение контуров..."
 
-#: ../src/path-chemistry.cpp:275
+#: ../src/path-chemistry.cpp:263
 msgid "Break apart"
 msgstr "Разбиение"
 
-#: ../src/path-chemistry.cpp:277
+#: ../src/path-chemistry.cpp:265
 msgid "<b>No path(s)</b> to break apart in the selection."
 msgstr "В выделении <b>нет разбиваемых контуров</b>."
 
-#: ../src/path-chemistry.cpp:295
+#: ../src/path-chemistry.cpp:277
 msgid "Select <b>object(s)</b> to convert to path."
 msgstr "Выделите <b>объекты</b> для преобразования в контур."
 
-#: ../src/path-chemistry.cpp:301
+#: ../src/path-chemistry.cpp:283
 msgid "Converting objects to paths..."
 msgstr "Выполняется преобразование объектов в контуры..."
 
-#: ../src/path-chemistry.cpp:323
+#: ../src/path-chemistry.cpp:305
 msgid "Object to path"
 msgstr "Оконтуривание объекта"
 
-#: ../src/path-chemistry.cpp:325
+#: ../src/path-chemistry.cpp:307
 msgid "<b>No objects</b> to convert to path in the selection."
 msgstr "В выделении <b>нет объектов</b>, преобразуемых в контур."
 
-#: ../src/path-chemistry.cpp:489
+#: ../src/path-chemistry.cpp:544
 msgid "Select <b>path(s)</b> to reverse."
 msgstr "Выделите <b>контур(ы)</b> для разворота."
 
-#: ../src/path-chemistry.cpp:498
+#: ../src/path-chemistry.cpp:553
 msgid "Reversing paths..."
 msgstr "Выполняется разворот контуров..."
 
-#: ../src/path-chemistry.cpp:525
+#: ../src/path-chemistry.cpp:580
 msgid "Reverse path"
 msgstr "Развернуть контур"
 
-#: ../src/path-chemistry.cpp:527
+#: ../src/path-chemistry.cpp:582
 msgid "<b>No paths</b> to reverse in the selection."
 msgstr "В выделении <b>нет контуров</b> для разворота."
 
@@ -7480,29 +7499,29 @@ msgstr "Продолжение выделенного контура"
 msgid "Creating new path"
 msgstr "Создание нового контура"
 
-#: ../src/pencil-context.cpp:265
+#: ../src/pencil-context.cpp:271
 #: ../src/pen-context.cpp:498
 msgid "Appending to selected path"
 msgstr "Добавление к выделенному контуру"
 
-#: ../src/pencil-context.cpp:363
+#: ../src/pencil-context.cpp:378
 msgid "<b>Release</b> here to close and finish the path."
 msgstr "<b>Отпустите</b> здесь для закрытия и завершения контура."
 
-#: ../src/pencil-context.cpp:369
+#: ../src/pencil-context.cpp:384
 msgid "Drawing a freehand path"
 msgstr "Рисуется произвольный контур"
 
-#: ../src/pencil-context.cpp:374
+#: ../src/pencil-context.cpp:389
 msgid "<b>Drag</b> to continue the path from this point."
 msgstr "<b>Перетащите</b> для продолжения контура из этой точки."
 
 #. Write curves to object
-#: ../src/pencil-context.cpp:436
+#: ../src/pencil-context.cpp:451
 msgid "Finishing freehand"
 msgstr "Завершается произвольный контур"
 
-#: ../src/pencil-context.cpp:487
+#: ../src/pencil-context.cpp:502
 #: ../src/pen-context.cpp:254
 msgid "Drawing cancelled"
 msgstr "Отмена рисования"
@@ -7515,32 +7534,32 @@ msgstr "<b>Щелчок</b> или <b>щелчок + перетаскивани
 msgid "<b>Click</b> or <b>click and drag</b> to continue the path from this point."
 msgstr "<b>Щелчок</b> или <b>щелчок + перетаскивание</b> продолжает контур из этой точки."
 
-#: ../src/pen-context.cpp:1261
+#: ../src/pen-context.cpp:1260
 #, 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>Сегмент кривой</b>: угол %3.2f&#176;, расстояние %s; <b>Ctrl</b> ограничивает угол, <b>Enter</b> завершает контур"
 
-#: ../src/pen-context.cpp:1262
+#: ../src/pen-context.cpp:1261
 #, 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>Сегмент линии</b>: угол %3.2f&#176;, расстояние %s; <b>Ctrl</b> ограничивает угол, <b>Enter</b> завершает контур"
 
-#: ../src/pen-context.cpp:1280
+#: ../src/pen-context.cpp:1279
 #, c-format
 msgid "<b>Curve handle</b>: angle %3.2f&#176;, length %s; with <b>Ctrl</b> to snap angle"
 msgstr "<b>Ус узла кривой</b>: угол %3.2f&#176;, длина %s; <b>Ctrl</b> ограничивает угол"
 
-#: ../src/pen-context.cpp:1302
+#: ../src/pen-context.cpp:1301
 #, fuzzy, 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>%s</b>: угол %3.2f°, длина %s; перетаскивание с <b>Ctrl</b> ограничивает угол; с <b>Shift</b> синхронно вращает противоположный ус"
 
-#: ../src/pen-context.cpp:1303
+#: ../src/pen-context.cpp:1302
 #, fuzzy, 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>%s</b>: угол %3.2f°, длина %s; перетаскивание с <b>Ctrl</b> ограничивает угол; с <b>Shift</b> синхронно вращает противоположный ус"
 
-#: ../src/pen-context.cpp:1350
+#: ../src/pen-context.cpp:1349
 msgid "Drawing finished"
 msgstr "Рисование закончено"
 
@@ -7553,7 +7572,6 @@ msgid "Toggle multiple vanishing points"
 msgstr "Переключение нескольких точек схода"
 
 #: ../src/preferences.cpp:106
-#, fuzzy
 msgid "Inkscape will run with default settings, and new settings will not be saved. "
 msgstr ""
 "Inkscape запустится с исходными настройками.\n"
@@ -7588,18 +7606,16 @@ msgstr "Не удалось загрузить файл параметров %s.
 #. _errorDialog(Glib::ustring::compose(_("The preferences file %1 is not a regular file."),
 #. Glib::filename_to_utf8(_prefs_filename)), not_saved);
 #: ../src/preferences.cpp:168
-#, fuzzy, c-format
+#, c-format
 msgid "The preferences file %s is not a regular file."
-msgstr ""
-"%s не является обычным файлом.\n"
-"%s"
+msgstr "Файл параметров программы %s не является обычным файлом."
 
 #. _errorDialog(Glib::ustring::compose(_("The preferences file %1 could not be read."),
 #. Glib::filename_to_utf8(_prefs_filename)), not_saved);
 #: ../src/preferences.cpp:180
-#, fuzzy, c-format
+#, c-format
 msgid "The preferences file %s could not be read."
-msgstr "Невозможно сохранить файл %s."
+msgstr "Не удалось прочитать файл параметров программы %s."
 
 #. _errorDialog(Glib::ustring::compose(_("The preferences file %1 is not a valid XML document."),
 #. Glib::filename_to_utf8(_prefs_filename)), not_saved);
@@ -7687,8 +7703,8 @@ msgstr "<b>Ничего</b> не удалено."
 
 #: ../src/selection-chemistry.cpp:218
 #: ../src/text-context.cpp:1014
-#: ../src/widgets/toolbox.cpp:1279
-#: ../src/widgets/toolbox.cpp:5270
+#: ../src/widgets/toolbox.cpp:1287
+#: ../src/widgets/toolbox.cpp:5288
 msgid "Delete"
 msgstr "Удаление"
 
@@ -7795,7 +7811,7 @@ msgid "Select <b>object(s)</b> to remove filters from."
 msgstr "Выделите <b>объект(ы)</b> для удаления фильтров."
 
 #: ../src/selection-chemistry.cpp:986
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1367
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1376
 msgid "Remove filter"
 msgstr "Удаление фильтра"
 
@@ -7897,14 +7913,12 @@ msgid "action|Clone"
 msgstr "Склонировать"
 
 #: ../src/selection-chemistry.cpp:1897
-#, fuzzy
 msgid "Select <b>clones</b> to relink."
-msgstr "Выделите <b>клон</b> для отсоединения."
+msgstr "Выделите <b>клоны</b> для пересоединения"
 
 #: ../src/selection-chemistry.cpp:1904
-#, fuzzy
 msgid "Copy an <b>object</b> to clipboard to relink clones to."
-msgstr "Ð\92Ñ\8bделиÑ\82е <b>обÑ\8aекÑ\82</b> Ð´Ð»Ñ\8f ÐºÐ»Ð¾Ð½Ð¸Ñ\80ованиÑ\8f."
+msgstr "СкопиÑ\80Ñ\83йÑ\82е <b>обÑ\8aекÑ\82</b> Ð² Ð±Ñ\83Ñ\84еÑ\80 Ð¾Ð±Ð¼ÐµÐ½Ð°, Ñ\87Ñ\82обÑ\8b Ð·Ð°Ñ\82ем Ð¿Ð¾Ð²Ñ\82оÑ\80но Ð¿Ñ\80иÑ\81оединиÑ\82Ñ\8c Ðº Ð½ÐµÐ¼Ñ\83 ÐºÐ»Ð¾Ð½Ñ\8b."
 
 #: ../src/selection-chemistry.cpp:1928
 msgid "<b>No clones to relink</b> in the selection."
@@ -7916,9 +7930,8 @@ msgid "Relink clone"
 msgstr "Отсоединение клона"
 
 #: ../src/selection-chemistry.cpp:1945
-#, fuzzy
 msgid "Select <b>clones</b> to unlink."
-msgstr "Выделите <b>клон</b> для отсоединения."
+msgstr "Выделите <b>клоны</b> для отсоединения."
 
 #: ../src/selection-chemistry.cpp:1994
 msgid "<b>No clones to unlink</b> in the selection."
@@ -8050,7 +8063,7 @@ msgstr "Окружность"
 #: ../src/selection-describer.cpp:73
 #: ../src/ui/dialog/inkscape-preferences.cpp:432
 #: ../src/verbs.cpp:2486
-#: ../src/widgets/toolbox.cpp:3409
+#: ../src/widgets/toolbox.cpp:3427
 msgid "Ellipse"
 msgstr "Эллипс"
 
@@ -8067,7 +8080,7 @@ msgid "Path"
 msgstr "Контур"
 
 #: ../src/selection-describer.cpp:59
-#: ../src/widgets/toolbox.cpp:2245
+#: ../src/widgets/toolbox.cpp:2263
 msgid "Polygon"
 msgstr "Многоугольник"
 
@@ -8108,7 +8121,7 @@ msgstr "Спираль"
 #: ../src/selection-describer.cpp:79
 #: ../src/ui/dialog/inkscape-preferences.cpp:436
 #: ../src/verbs.cpp:2488
-#: ../src/widgets/toolbox.cpp:2252
+#: ../src/widgets/toolbox.cpp:2270
 msgid "Star"
 msgstr "Звезда"
 
@@ -8287,7 +8300,7 @@ msgstr "<b>Вращение</b>: %0.2f&#176;; <b>Ctrl</b> ограничивае
 msgid "Move <b>center</b> to %s, %s"
 msgstr "Переместить <b>центр</b> в %s, %s"
 
-#: ../src/seltrans.cpp:1448
+#: ../src/seltrans.cpp:1450
 #, 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>Перемещение</b> на %s, %s; с <b>Ctrl</b> только по горизонтали/вертикали; с <b>Shift</b> без прилипания"
@@ -8545,7 +8558,7 @@ msgstr "Упрощение контура"
 msgid "<b>No paths</b> to simplify in the selection."
 msgstr "В выделении <b>нет контуров</b> для упрощения."
 
-#: ../src/sp-lpe-item.cpp:339
+#: ../src/sp-lpe-item.cpp:346
 msgid "An exception occurred during execution of the Path Effect."
 msgstr "Прерывание при выполнении контурного эффекта"
 
@@ -9093,59 +9106,59 @@ msgstr "%s. Перетащите курсор или щелкните для <b>
 msgid "%s. Drag or click to <b>increase blur</b>; with Shift to <b>decrease</b>."
 msgstr "%s. Перетащите курсор или щелкните для <b>втягивания</b>, с Shift — для <b>растягивания</b> контуров."
 
-#: ../src/tweak-context.cpp:1179
+#: ../src/tweak-context.cpp:1211
 msgid "<b>Nothing selected!</b> Select objects to tweak."
 msgstr "<b>Ничего не выделено!</b> Выделите объект(ы) для коррекции."
 
-#: ../src/tweak-context.cpp:1215
+#: ../src/tweak-context.cpp:1247
 msgid "Move tweak"
 msgstr "Перемещение корректором"
 
-#: ../src/tweak-context.cpp:1219
+#: ../src/tweak-context.cpp:1251
 msgid "Move in/out tweak"
 msgstr "Притягивание/отталкивание объектов"
 
-#: ../src/tweak-context.cpp:1223
+#: ../src/tweak-context.cpp:1255
 msgid "Move jitter tweak"
 msgstr "Случайное перемещение корректором"
 
-#: ../src/tweak-context.cpp:1227
+#: ../src/tweak-context.cpp:1259
 msgid "Scale tweak"
 msgstr "Масштабирование корректором"
 
-#: ../src/tweak-context.cpp:1231
+#: ../src/tweak-context.cpp:1263
 msgid "Rotate tweak"
 msgstr "Вращение корректором"
 
-#: ../src/tweak-context.cpp:1235
+#: ../src/tweak-context.cpp:1267
 msgid "Duplicate/delete tweak"
 msgstr "Дубликация/удаление корректором"
 
-#: ../src/tweak-context.cpp:1239
+#: ../src/tweak-context.cpp:1271
 msgid "Push path tweak"
 msgstr "Толкание контуров корректором"
 
-#: ../src/tweak-context.cpp:1243
+#: ../src/tweak-context.cpp:1275
 msgid "Shrink/grow path tweak"
 msgstr "Коррекция объема контуров"
 
-#: ../src/tweak-context.cpp:1247
+#: ../src/tweak-context.cpp:1279
 msgid "Attract/repel path tweak"
 msgstr "Притяжение и отталкивание контуров"
 
-#: ../src/tweak-context.cpp:1251
+#: ../src/tweak-context.cpp:1283
 msgid "Roughen path tweak"
 msgstr "Огрубление контуров корректором"
 
-#: ../src/tweak-context.cpp:1255
+#: ../src/tweak-context.cpp:1287
 msgid "Color paint tweak"
 msgstr "Коррекция заливки цветом"
 
-#: ../src/tweak-context.cpp:1259
+#: ../src/tweak-context.cpp:1291
 msgid "Color jitter tweak"
 msgstr "Коррекция перебором цветов"
 
-#: ../src/tweak-context.cpp:1263
+#: ../src/tweak-context.cpp:1295
 msgid "Blur tweak"
 msgstr "Коррекция размывания"
 
@@ -9344,12 +9357,12 @@ msgstr "В:"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:516
 #: ../src/ui/dialog/align-and-distribute.cpp:796
-#: ../src/widgets/toolbox.cpp:6556
+#: ../src/widgets/toolbox.cpp:6574
 msgid "Remove overlaps"
 msgstr "Убрать перекрытия"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:547
-#: ../src/widgets/toolbox.cpp:6421
+#: ../src/widgets/toolbox.cpp:6439
 msgid "Arrange connector network"
 msgstr "Гармоничная расстановка связанных объектов"
 
@@ -9486,7 +9499,7 @@ msgid "Move objects as little as possible so that their bounding boxes do not ov
 msgstr "Переместить объекты так, чтобы их рамки едва-едва не пересекались"
 
 #: ../src/ui/dialog/align-and-distribute.cpp:900
-#: ../src/widgets/toolbox.cpp:6519
+#: ../src/widgets/toolbox.cpp:6537
 msgid "Nicely arrange selected connector network"
 msgstr "Гармонично расставить связанные коннектором объекты"
 
@@ -9937,13 +9950,13 @@ msgstr "Включить предпросмотр"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:711
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:712
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:198
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:197
 msgid "All Inkscape Files"
 msgstr "Все файлы Inkscape"
 
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:716
 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:717
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:197
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:196
 msgid "All Files"
 msgstr "Все файлы"
 
@@ -10029,15 +10042,15 @@ msgstr "Фон"
 msgid "Destination"
 msgstr "Назначение"
 
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:199
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:198
 msgid "All Image Files"
 msgstr "Все файлы изображений"
 
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:428
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:427
 msgid "Show Preview"
 msgstr "Предпросмотр"
 
-#: ../src/ui/dialog/filedialogimpl-win32.cpp:564
+#: ../src/ui/dialog/filedialogimpl-win32.cpp:563
 msgid "No file selected"
 msgstr "Ни один файл не выбран"
 
@@ -10153,273 +10166,273 @@ msgstr "_Фильтры"
 msgid "R_ename"
 msgstr "Пере_именовать"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1244
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1253
 msgid "Rename filter"
 msgstr "Переименовать фильтр"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1280
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1289
 msgid "Apply filter"
 msgstr "Применение фильтра"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1356
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1365
 msgid "Add filter"
 msgstr "Добавление фильтра"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1382
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1391
 msgid "Duplicate filter"
 msgstr "Дублирование фильтра"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1449
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1458
 msgid "_Effect"
 msgstr "Эффе_кт"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1457
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1466
 msgid "Connections"
 msgstr "Cоединения"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1573
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1582
 msgid "Remove filter primitive"
 msgstr "Удаление примитива фильтра"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1945
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1954
 msgid "Remove merge node"
 msgstr "Удалить объединяющий узел"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2061
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2070
 msgid "Reorder filter primitive"
 msgstr "Смена порядка примитивов фильтра"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2095
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2104
 msgid "Add Effect:"
 msgstr "Добавить:"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2096
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2105
 msgid "No effect selected"
 msgstr "Ни один эффект не выбран"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2097
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2106
 msgid "No filter selected"
 msgstr "Ни один фильтр не выбран"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2135
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2144
 msgid "Effect parameters"
 msgstr "Параметры эффекта"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2136
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2145
 msgid "Filter General Settings"
 msgstr "Общие параметры фильтра"
 
 #. default x:
 #. default y:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2192
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2201
 msgid "Coordinates"
 msgstr "Координаты"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2192
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2201
 msgid "X coordinate of the left corners of filter effects region"
 msgstr "Координата X левых углов области действия фильтра эффектов"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2192
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2201
 msgid "Y coordinate of the upper corners of filter effects region"
 msgstr "Координата X верхних углов области действия фильтра эффектов"
 
 #. default width:
 #. default height:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2193
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2202
 #: ../share/extensions/dimension.inx.h:1
 msgid "Dimensions"
 msgstr "Размеры"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2193
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2202
 msgid "Width of filter effects region"
 msgstr "Ширина области действия фильтра эффектов"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2193
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2202
 msgid "Height of filter effects region"
 msgstr "Высота области действия фильтра эффектов"
 
 #. # end multiple scan
 #. ## end mode page
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2196
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2205
 #: ../src/ui/dialog/tracedialog.cpp:552
-#: ../src/widgets/toolbox.cpp:3768
+#: ../src/widgets/toolbox.cpp:3786
 #: ../share/extensions/triangle.inx.h:9
 msgid "Mode"
 msgstr "Режим"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2199
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2208
 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 "Тип матричной операции. Слово «матрица» означает, что будет предоставлена полная матрица значений размером 5×4. Остальные варианты — это простой способ выполнить наиболее популярные операции, не задавая все значения матрицы вручную."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2200
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2209
 msgid "Value(s)"
 msgstr "Значение(-я)"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2214
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2255
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2223
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2264
 msgid "Operator"
 msgstr "Оператор"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2215
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2224
 msgid "K1"
 msgstr "K1"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2215
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2216
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2217
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2218
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2224
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2225
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2226
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2227
 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 "Если выбран арифметический оператор, каждый получаемый пиксел вычисляется по формуле k1*i1*i2 + k2*i1 + k3*i2 + k4, где i1 и i2 — пикселы первого и второго входов соответственно."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2216
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2225
 msgid "K2"
 msgstr "K2"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2217
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2226
 msgid "K3"
 msgstr "K3"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2218
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2227
 msgid "K4"
 msgstr "K4"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2221
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
 msgid "width of the convolve matrix"
 msgstr "Ширина матрицы свёртки"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2221
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
 msgid "height of the convolve matrix"
 msgstr "Высота матрицы свёртки"
 
 #. default x:
 #. default y:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2222
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2231
 msgid "Target"
 msgstr "Цель"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2222
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2231
 msgid "X coordinate of the target point in the convolve matrix. The convolution is applied to pixels around this point."
 msgstr "Координата X конечной точки матрицы свертки. Свертка применяется к пикселам вокруг этой точки."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2222
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2231
 msgid "Y coordinate of the target point in the convolve matrix. The convolution is applied to pixels around this point."
 msgstr "Координата Y конечной точки матрицы свертки. Свертка применяется к пикселам вокруг этой точки."
 
 #. TRANSLATORS: for info on "Kernel", see http://en.wikipedia.org/wiki/Kernel_(matrix)
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2224
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2233
 msgid "Kernel"
 msgstr "Ядро"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2224
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2233
 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 "Эта матрица описывает операцию свертки, которая будет применена к входящему изображению для вычисления цветов пикселов на выходе. Различные комбинации значений дают различные визуальные эффекты. Тождественная матрица даст эффект размывания движением, в то время как матрица, заполненная постоянным ненулевым значением даст обычный эффект размывания."
 
 #. TODO: svg spec: The default value is the sum of all values in kernelMatrix, with the exception that if the sum is zero, then the divisor is set to 1.
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2227
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2236
 msgid "Divisor"
 msgstr "Делитель"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2227
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2236
 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 "После применения kernelMatrix к входящему изображению для получения числа, это число делится на делитель для получения конечного значения цвета. Делитель, являющийся суммой всех значений матрицы, имеет тенденцию приглушать общую интенсивность цветов в конечной картинке."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2228
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2237
 msgid "Bias"
 msgstr "Смещение"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2228
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2237
 msgid "This value is added to each component. This is useful to define a constant value as the zero response of the filter."
 msgstr "Это значение добавляется к каждому компоненту. Полезно для задания константы как нулевого отклика фильтра."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2229
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2238
 msgid "Edge Mode"
 msgstr "Режим краёв"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2229
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2238
 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 "Определяет, как расширить входящие изображение цветными пикселами, чтобы матричные операции могли работать с ядром, расположенным на крае изображения или близко к нему."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2239
 msgid "Preserve Alpha"
 msgstr "Сохранять альфа-канал"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2230
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2239
 msgid "If set, the alpha channel won't be altered by this filter primitive."
 msgstr "Если включено, альфа-канал не будет изменен этим примитивом фильтра."
 
 #. default: white
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2233
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2242
 msgid "Diffuse Color"
 msgstr "Цвет диффузии"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2233
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2266
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2242
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2275
 msgid "Defines the color of the light source"
 msgstr "Определяет цвет источника света"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2234
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2267
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2243
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2276
 msgid "Surface Scale"
 msgstr "Коэфф. высоты поверхности"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2234
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2267
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2243
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2276
 msgid "This value amplifies the heights of the bump map defined by the input alpha channel"
 msgstr "На это значение умножается высота карты рельефа, определенная входящим альфа-каналом"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2235
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2268
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2244
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2277
 msgid "Constant"
 msgstr "Константа диффузии"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2235
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2268
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2244
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2277
 msgid "This constant affects the Phong lighting model."
 msgstr "Эта константа касается модели освещения Фонга"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2236
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2270
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2245
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2279
 msgid "Kernel Unit Length"
 msgstr "Длина единицы ядра"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2240
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2249
 msgid "This defines the intensity of the displacement effect."
 msgstr "Определяет интенсивность эффекта смещения"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2241
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2250
 msgid "X displacement"
 msgstr "Смещение по X"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2241
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2250
 msgid "Color component that controls the displacement in the X direction"
 msgstr "Цветовой компонент, контролирующий смещение по оси X"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2242
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2251
 msgid "Y displacement"
 msgstr "Смещение по Y"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2242
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2251
 msgid "Color component that controls the displacement in the Y direction"
 msgstr "Цветовой компонент, контролирующий смещение по оси Y"
 
 #. default: black
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2245
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2254
 msgid "Flood Color"
 msgstr "Цвет заливки"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2245
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2254
 msgid "The whole filter region will be filled with this color."
 msgstr "Вся область действия фильтра будет залита этим цветом"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2249
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2258
 msgid "Standard Deviation"
 msgstr "Стандартное отклонение"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2249
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2258
 msgid "The standard deviation for the blur operation."
 msgstr "Стандартное отклонение при размывании, выражается в процентах"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2255
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2264
 msgid ""
 "Erode: performs \"thinning\" of input image.\n"
 "Dilate: performs \"fattenning\" of input image."
@@ -10427,133 +10440,133 @@ msgstr ""
 "Эрозия: «утоньшает» входящее изображение\n"
 "Дилатация: «утолщает» входящее изображение"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2259
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2268
 msgid "Source of Image"
 msgstr "Источник изображения"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2262
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2271
 msgid "Delta X"
 msgstr "Дельта X"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2262
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2271
 msgid "This is how far the input image gets shifted to the right"
 msgstr "Как далеко входящее изображение смещается вправо"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2263
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2272
 msgid "Delta Y"
 msgstr "Дельта Y"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2263
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2272
 msgid "This is how far the input image gets shifted downwards"
 msgstr "Как далеко входящее изображение смещается вниз"
 
 #. default: white
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2266
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2275
 msgid "Specular Color"
 msgstr "Цвет отражения"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2269
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2278
 #: ../share/extensions/interp.inx.h:2
 msgid "Exponent"
 msgstr "Экспонента"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2269
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2278
 msgid "Exponent for specular term, larger is more \"shiny\"."
 msgstr "Экспонента отражения: чем больше значение, тем ярче отражение"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2278
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2287
 msgid "Indicates whether the filter primitive should perform a noise or turbulence function."
 msgstr "Должен ли примитив выполнять функцию создания турбулентности или же шума"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2279
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2288
 msgid "Base Frequency"
 msgstr "Основная частота"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2280
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2289
 msgid "Octaves"
 msgstr "Числа Кейли"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2281
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2290
 msgid "Seed"
 msgstr "Случайное значение"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2281
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2290
 msgid "The starting number for the pseudo random number generator."
 msgstr "Начальное число для генератора псевдослучайных чисел"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2293
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2302
 msgid "Add filter primitive"
 msgstr "Добавление примитива фильтра"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2310
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2319
 msgid "The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, multiply, darken and lighten."
 msgstr "Примитив <b>feBlend</b> дает 4 режима наложения: экран, умножение, затемнение и осветление."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2314
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2323
 msgid "The <b>feColorMatrix</b> filter primitive applies a matrix transformation to colour of each rendered pixel. This allows for effects like turning object to grayscale, modifying colour saturation and changing colour hue."
 msgstr "Примитив <b>feColorMatrix</b> применяет матричное преобразование для раскрашивания каждого пиксела. Таким образом можно обесцвечивать, повышать насыщенность и менять тон."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2318
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2327
 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 "Примитив <b>feComponentTransfer</b> позволяет манипулировать цветовыми компонентами входящего объекта (красный, зеленый, синий и альфа-каналы) в соответствии с определенными функциями передачи, допуская операции вроде коррекции яркости и контраста, цветового баланса и порога."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2322
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2331
 msgid "The <b>feComposite</b> filter primitive composites two images using one of the Porter-Duff blending modes or the aritmetic mode described in SVG standard. Porter-Duff blending modes are essentially logical operations between the corresponding pixel values of the images."
 msgstr "Примитив <b>feComposite</b> совмещает два изображения, используя один из режимов наложения Портера-Даффа или арифметический оператор из стандарта SVG. Режимы наложения Портера-Даффа — по сути,логические операции между значениями соответствующих пикселов этих изображений."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2326
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2335
 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 "Примитив <b>feConvolveMatrix</b> позволяет указать свертку, применяемую к изображению. Типичные эффекты, создаваемые при помощи матрицы свертки — размывание, повышение резкости, создание рельефа и определение краев. Хотя гауссово размывание можно выполнить и этим примитивом, специализированный примитив работает быстрее и не зависит от разрешения."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2330
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2339
 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 "Примитивы <b>feDiffuseLighting</b> и feSpecularLighting создают рельефные тени.  Входящий альфа-канал используется для предоставления информации о глубине: чем выше непрозрачность, тем выше рельеф и, соответственно, тем ближе к наблюдателю верхняя точка этого рельефа."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2334
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2343
 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 "Примитив <b>feDisplacementMap</b> смещает пикселы первого входа, используя пикселы второго в качестве карты смещения, показывающей, как далеко должны отойти пикселы. Типичные эффекты, создаваемые при помощи карты смещения — завихрение и щипок."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2338
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2347
 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 "Примитив <b>feFlood</b> заливает область заданным цветом и непрозрачностью. Обычно он используется как вход для других фильтров, применяющих цвет."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2342
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2351
 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 "Примитив <b>feGaussianBlur</b> равномерно размывает объекты на входе. Фильтр часто используется с feOffset для создания эффекта отбрасываемой тени."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2346
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2355
 msgid "The <b>feImage</b> filter primitive fills the region with an external image or another part of the document."
 msgstr "Примитив <b>feImage</b> заполняет область внешним изображением или другой частью документа."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2350
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2359
 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 "Примитив <b>feMerge</b> сводит несколько временных изображений в одно, используя обычное альфа‑совмещение. Получаемый эффект эквивалентен нескольким примитивам feBlend в режиме «Обычный» или нескольким примитивам feComposite в режиме «Над» (over)."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2354
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2363
 msgid "The <b>feMorphology</b> filter primitive provides erode and dilate effects. For single-colour objects erode makes the object thinner and dilate makes it thicker."
 msgstr "Примитив <b>feMorphology</b> позволяет применить эффект эрозии и дилатации. Объекты с плоской заливкой при эрозии становятся тоньше, а с дилатацией — толще."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2358
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2367
 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 "Примитив <b>feOffset</b> смещает изображение на заданное расстояние. Он используется, к примеру, для создания эффекта отбрасываемой тени, где тень слегка смещена относительно исходного объекта."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2362
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2371
 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 "Примитивы feDiffuseLighting и <b>feSpecularLighting</b> создают рельефные тени.  Входящий альфа-канал используется для предоставления информации о глубине: чем выше непрозрачность, тем выше рельеф и, соответственно, тем ближе к наблюдателю верхняя точка этого рельефа."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2366
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2375
 msgid "The <b>feTile</b> filter primitive tiles a region with its input graphic"
 msgstr "Примитив <b>feTile</b> заполняет область мозаикой из входящего изображения."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2370
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2379
 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 "Примитив <b>feTurbulence</b> создает перлинов шум. Этот тип шума полезен для имитации различных природных явлений вроде облаков, огня и дыма, а также для создания сложных текстур наподобие мрамора или гранита."
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2388
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2397
 msgid "Duplicate filter primitive"
 msgstr "Дубликация примитива фильтра"
 
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2441
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2450
 msgid "Set filter primitive attribute"
 msgstr "Смена атрибута примитива фильтра"
 
@@ -10655,7 +10668,7 @@ msgstr "С какой скоростью будет происходить пр
 #: ../src/ui/dialog/tracedialog.cpp:409
 #: ../src/ui/dialog/tracedialog.cpp:442
 #: ../src/ui/dialog/tracedialog.cpp:585
-#: ../src/widgets/toolbox.cpp:6673
+#: ../src/widgets/toolbox.cpp:6691
 msgid "Threshold:"
 msgstr "Порог:"
 
@@ -11124,7 +11137,7 @@ msgstr "То же, что и «Нормальный», но может лучш
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:539
 msgid "Dialog Transparency:"
-msgstr ""
+msgstr "Прозрачность диалога:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:541
 msgid "Opacity when focused:"
@@ -11136,7 +11149,7 @@ msgstr "Непрозрачность вне фокуса:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:545
 msgid "Time of opacity change animation:"
-msgstr ""
+msgstr "Длительность анимации:"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:548
 msgid "Miscellaneous:"
@@ -11362,9 +11375,8 @@ msgid "Lowest quality (considerable artifacts), but display is fastest"
 msgstr "Очень низкое качество с достаточно заметными артефактами, но очень быстрая отрисовка"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:671
-#, fuzzy
 msgid "Filter effects quality for display:"
-msgstr "Качество гауссова размывания при отображении:"
+msgstr "Качество фильтров эффектов отображении:"
 
 #. show infobox
 #: ../src/ui/dialog/inkscape-preferences.cpp:684
@@ -12990,7 +13002,7 @@ msgid ""
 "\n"
 "If you close without saving, your changes will be discarded."
 msgstr ""
-"<span weight=\"bold\" size=\"larger\">Сохранить изменения в документе \"%s\"перед закрытием?</span>\n"
+"<span weight=\"bold\" size=\"larger\">Сохранить изменения в документе \"%s\" перед закрытием?</span>\n"
 "\n"
 "Если вы закроете документ, не сохранив его, все изменения будут потеряны."
 
@@ -13034,11 +13046,11 @@ msgstr "Проприетарная"
 msgid "Other"
 msgstr "Другая"
 
-#: ../src/ui/widget/object-composite-settings.cpp:158
+#: ../src/ui/widget/object-composite-settings.cpp:169
 msgid "Change blur"
 msgstr "Смена размывания"
 
-#: ../src/ui/widget/object-composite-settings.cpp:198
+#: ../src/ui/widget/object-composite-settings.cpp:209
 #: ../src/ui/widget/selected-style.cpp:851
 #: ../src/ui/widget/selected-style.cpp:1145
 msgid "Change opacity"
@@ -14595,7 +14607,7 @@ msgid "Apply clipping path to selection (using the topmost object as clipping pa
 msgstr "Применить самый верхний объект выделения к нему как обтравочный контур"
 
 #: ../src/verbs.cpp:2471
-#: ../src/widgets/toolbox.cpp:1411
+#: ../src/widgets/toolbox.cpp:1429
 msgid "Edit clipping path"
 msgstr "Изменить обтравочный контур"
 
@@ -15428,7 +15440,7 @@ msgstr "Кегль шрифта:"
 #. * some representative characters that users of your locale will be
 #. * interested in.
 #: ../src/widgets/font-selector.cpp:639
-#: ../src/widgets/toolbox.cpp:6069
+#: ../src/widgets/toolbox.cpp:6087
 msgid "AaBbCcIiPpQq12369$€¢?.;/()"
 msgstr "АаБбВвГгЁёФфЩщЯя$€¢?.;/()"
 
@@ -15479,14 +15491,14 @@ msgid "Edit the stops of the gradient"
 msgstr "Изменить опорные точки в градиенте"
 
 #: ../src/widgets/gradient-toolbar.cpp:526
-#: ../src/widgets/toolbox.cpp:2149
-#: ../src/widgets/toolbox.cpp:2227
-#: ../src/widgets/toolbox.cpp:2558
-#: ../src/widgets/toolbox.cpp:2596
-#: ../src/widgets/toolbox.cpp:3211
-#: ../src/widgets/toolbox.cpp:3235
-#: ../src/widgets/toolbox.cpp:4648
-#: ../src/widgets/toolbox.cpp:4677
+#: ../src/widgets/toolbox.cpp:2167
+#: ../src/widgets/toolbox.cpp:2245
+#: ../src/widgets/toolbox.cpp:2576
+#: ../src/widgets/toolbox.cpp:2614
+#: ../src/widgets/toolbox.cpp:3229
+#: ../src/widgets/toolbox.cpp:3253
+#: ../src/widgets/toolbox.cpp:4666
+#: ../src/widgets/toolbox.cpp:4695
 msgid "<b>New:</b>"
 msgstr "<b>Новый:</b>"
 
@@ -15514,13 +15526,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:609
-#: ../src/widgets/toolbox.cpp:2151
-#: ../src/widgets/toolbox.cpp:2566
+#: ../src/widgets/toolbox.cpp:2169
 #: ../src/widgets/toolbox.cpp:2584
-#: ../src/widgets/toolbox.cpp:3213
-#: ../src/widgets/toolbox.cpp:3224
-#: ../src/widgets/toolbox.cpp:4651
-#: ../src/widgets/toolbox.cpp:4662
+#: ../src/widgets/toolbox.cpp:2602
+#: ../src/widgets/toolbox.cpp:3231
+#: ../src/widgets/toolbox.cpp:3242
+#: ../src/widgets/toolbox.cpp:4669
+#: ../src/widgets/toolbox.cpp:4680
 msgid "<b>Change:</b>"
 msgstr "<b>Менять:</b>"
 
@@ -15963,1360 +15975,1368 @@ msgstr ""
 msgid "Style of Paint Bucket fill objects"
 msgstr "Стиль заливки новых объектов, созданных инструментом заливки"
 
-#: ../src/widgets/toolbox.cpp:1264
+#: ../src/widgets/toolbox.cpp:1272
 msgid "Insert node"
 msgstr "Вставка узла"
 
-#: ../src/widgets/toolbox.cpp:1265
+#: ../src/widgets/toolbox.cpp:1273
 msgid "Insert new nodes into selected segments"
 msgstr "Вставить новые узлы в выделенные сегменты"
 
-#: ../src/widgets/toolbox.cpp:1268
+#: ../src/widgets/toolbox.cpp:1276
 msgid "Insert"
 msgstr "Вставить"
 
-#: ../src/widgets/toolbox.cpp:1276
+#: ../src/widgets/toolbox.cpp:1284
 msgid "Delete selected nodes"
 msgstr "Удалить выделенные узлы"
 
-#: ../src/widgets/toolbox.cpp:1286
+#: ../src/widgets/toolbox.cpp:1294
 msgid "Join endnodes"
 msgstr "Соединение оконечных узлов"
 
-#: ../src/widgets/toolbox.cpp:1287
+#: ../src/widgets/toolbox.cpp:1295
 msgid "Join selected endnodes"
 msgstr "Соединить контуры по выделенным оконечным узлам"
 
-#: ../src/widgets/toolbox.cpp:1290
+#: ../src/widgets/toolbox.cpp:1298
 msgid "Join"
 msgstr "Соединение"
 
-#: ../src/widgets/toolbox.cpp:1297
+#: ../src/widgets/toolbox.cpp:1305
 #, fuzzy
 msgid "Break nodes"
 msgstr "Перемещение узлов"
 
-#: ../src/widgets/toolbox.cpp:1298
+#: ../src/widgets/toolbox.cpp:1306
 msgid "Break path at selected nodes"
 msgstr "Разорвать контур в выделенном узле"
 
-#: ../src/widgets/toolbox.cpp:1308
+#: ../src/widgets/toolbox.cpp:1316
 #, fuzzy
 msgid "Join with segment"
 msgstr "Соединение узлов сегментом"
 
-#: ../src/widgets/toolbox.cpp:1309
+#: ../src/widgets/toolbox.cpp:1317
 msgid "Join selected endnodes with a new segment"
 msgstr "Соединить контуры по выделенным оконечным узлам новым сегментом"
 
-#: ../src/widgets/toolbox.cpp:1319
+#: ../src/widgets/toolbox.cpp:1327
 msgid "Delete segment between two non-endpoint nodes"
 msgstr "Удалить сегмент между двумя неоконечными узлами"
 
-#: ../src/widgets/toolbox.cpp:1328
+#: ../src/widgets/toolbox.cpp:1336
 msgid "Node Cusp"
 msgstr "Острые узлы"
 
-#: ../src/widgets/toolbox.cpp:1329
+#: ../src/widgets/toolbox.cpp:1337
 msgid "Make selected nodes corner"
 msgstr "Сделать выделенные узлы острыми"
 
-#: ../src/widgets/toolbox.cpp:1338
+#: ../src/widgets/toolbox.cpp:1346
 msgid "Node Smooth"
 msgstr "Гладкие узлы"
 
-#: ../src/widgets/toolbox.cpp:1339
+#: ../src/widgets/toolbox.cpp:1347
 msgid "Make selected nodes smooth"
 msgstr "Сделать выделенные узлы сглаженными"
 
-#: ../src/widgets/toolbox.cpp:1348
+#: ../src/widgets/toolbox.cpp:1356
 msgid "Node Symmetric"
 msgstr "Симметричные узлы"
 
-#: ../src/widgets/toolbox.cpp:1349
+#: ../src/widgets/toolbox.cpp:1357
 msgid "Make selected nodes symmetric"
 msgstr "Сделать выделенные узлы симметричными"
 
-#: ../src/widgets/toolbox.cpp:1358
+#: ../src/widgets/toolbox.cpp:1366
+msgid "Node Auto"
+msgstr "Автоматический узел"
+
+#: ../src/widgets/toolbox.cpp:1367
+msgid "Make selected nodes auto-smooth"
+msgstr "Сделать выделенные узлы автоматически сглаженными"
+
+#: ../src/widgets/toolbox.cpp:1376
 msgid "Node Line"
 msgstr "Линия по узлам"
 
-#: ../src/widgets/toolbox.cpp:1359
+#: ../src/widgets/toolbox.cpp:1377
 msgid "Make selected segments lines"
 msgstr "Сделать выделенные сегменты прямыми"
 
-#: ../src/widgets/toolbox.cpp:1368
+#: ../src/widgets/toolbox.cpp:1386
 msgid "Node Curve"
 msgstr "Кривая по узлам"
 
-#: ../src/widgets/toolbox.cpp:1369
+#: ../src/widgets/toolbox.cpp:1387
 msgid "Make selected segments curves"
 msgstr "Сделать выделенные сегменты кривыми"
 
-#: ../src/widgets/toolbox.cpp:1378
+#: ../src/widgets/toolbox.cpp:1396
 msgid "Show Handles"
 msgstr "Показывать рычаги"
 
-#: ../src/widgets/toolbox.cpp:1379
+#: ../src/widgets/toolbox.cpp:1397
 msgid "Show the Bezier handles of selected nodes"
 msgstr "Показывать рычаги выбранных узлов"
 
-#: ../src/widgets/toolbox.cpp:1389
+#: ../src/widgets/toolbox.cpp:1407
 msgid "Show Outline"
 msgstr "Показать контур"
 
-#: ../src/widgets/toolbox.cpp:1390
+#: ../src/widgets/toolbox.cpp:1408
 msgid "Show the outline of the path"
 msgstr "Показать очертания контура"
 
-#: ../src/widgets/toolbox.cpp:1400
+#: ../src/widgets/toolbox.cpp:1418
 msgid "Next path effect parameter"
 msgstr "Следующий параметр контурного эффекта"
 
-#: ../src/widgets/toolbox.cpp:1401
+#: ../src/widgets/toolbox.cpp:1419
 msgid "Show next path effect parameter for editing"
 msgstr "Показать следующий редактируемый параметр динамического эффекта"
 
-#: ../src/widgets/toolbox.cpp:1412
+#: ../src/widgets/toolbox.cpp:1430
 msgid "Edit the clipping path of the object"
 msgstr "Изменить обтравочный контур объекта"
 
-#: ../src/widgets/toolbox.cpp:1422
+#: ../src/widgets/toolbox.cpp:1440
 msgid "Edit mask path"
 msgstr "Изменить контур маски"
 
-#: ../src/widgets/toolbox.cpp:1423
+#: ../src/widgets/toolbox.cpp:1441
 msgid "Edit the mask of the object"
 msgstr "Изменить маску объекта"
 
-#: ../src/widgets/toolbox.cpp:1437
+#: ../src/widgets/toolbox.cpp:1455
 msgid "X coordinate:"
 msgstr "Координата по X:"
 
-#: ../src/widgets/toolbox.cpp:1437
+#: ../src/widgets/toolbox.cpp:1455
 msgid "X coordinate of selected node(s)"
 msgstr "Координата X выбранных узлов"
 
-#: ../src/widgets/toolbox.cpp:1455
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Y coordinate:"
 msgstr "Координата по Y:"
 
-#: ../src/widgets/toolbox.cpp:1455
+#: ../src/widgets/toolbox.cpp:1473
 msgid "Y coordinate of selected node(s)"
 msgstr "Координата Y выбранных узлов"
 
-#: ../src/widgets/toolbox.cpp:1898
+#: ../src/widgets/toolbox.cpp:1916
 msgid "Star: Change number of corners"
 msgstr "Смена количества лучей"
 
-#: ../src/widgets/toolbox.cpp:1941
+#: ../src/widgets/toolbox.cpp:1959
 msgid "Star: Change spoke ratio"
 msgstr "Смена отношения радиусов"
 
-#: ../src/widgets/toolbox.cpp:1984
+#: ../src/widgets/toolbox.cpp:2002
 msgid "Make polygon"
 msgstr "Звезда → многоугольник"
 
-#: ../src/widgets/toolbox.cpp:1984
+#: ../src/widgets/toolbox.cpp:2002
 msgid "Make star"
 msgstr "Многоугольник → звезда"
 
-#: ../src/widgets/toolbox.cpp:2020
+#: ../src/widgets/toolbox.cpp:2038
 msgid "Star: Change rounding"
 msgstr "Смена закругления"
 
-#: ../src/widgets/toolbox.cpp:2055
+#: ../src/widgets/toolbox.cpp:2073
 msgid "Star: Change randomization"
 msgstr "Смена случайности искажения"
 
-#: ../src/widgets/toolbox.cpp:2246
+#: ../src/widgets/toolbox.cpp:2264
 msgid "Regular polygon (with one handle) instead of a star"
 msgstr "Правильный многоугольник, а не звезда"
 
-#: ../src/widgets/toolbox.cpp:2253
+#: ../src/widgets/toolbox.cpp:2271
 msgid "Star instead of a regular polygon (with one handle)"
 msgstr "Звезда вместо обычного многоугольника (с одним рычагом)"
 
-#: ../src/widgets/toolbox.cpp:2274
+#: ../src/widgets/toolbox.cpp:2292
 msgid "triangle/tri-star"
 msgstr "треугольник/звезда с 3 лучами"
 
-#: ../src/widgets/toolbox.cpp:2274
+#: ../src/widgets/toolbox.cpp:2292
 msgid "square/quad-star"
 msgstr "квадрат/звезда с 4 лучами"
 
-#: ../src/widgets/toolbox.cpp:2274
+#: ../src/widgets/toolbox.cpp:2292
 msgid "pentagon/five-pointed star"
 msgstr "пятиугольник/звезда с 5 лучами"
 
-#: ../src/widgets/toolbox.cpp:2274
+#: ../src/widgets/toolbox.cpp:2292
 msgid "hexagon/six-pointed star"
 msgstr "шестиугольник/звезда с 6 лучами"
 
-#: ../src/widgets/toolbox.cpp:2277
+#: ../src/widgets/toolbox.cpp:2295
 msgid "Corners"
 msgstr "Углы"
 
-#: ../src/widgets/toolbox.cpp:2277
+#: ../src/widgets/toolbox.cpp:2295
 msgid "Corners:"
 msgstr "Углы:"
 
-#: ../src/widgets/toolbox.cpp:2277
+#: ../src/widgets/toolbox.cpp:2295
 msgid "Number of corners of a polygon or star"
 msgstr "Количество вершин многоугольника или звезды"
 
-#: ../src/widgets/toolbox.cpp:2290
+#: ../src/widgets/toolbox.cpp:2308
 msgid "thin-ray star"
 msgstr "звезда с тонкими лучами"
 
-#: ../src/widgets/toolbox.cpp:2290
+#: ../src/widgets/toolbox.cpp:2308
 msgid "pentagram"
 msgstr "пентаграмма"
 
-#: ../src/widgets/toolbox.cpp:2290
+#: ../src/widgets/toolbox.cpp:2308
 msgid "hexagram"
 msgstr "гексаграмма"
 
-#: ../src/widgets/toolbox.cpp:2290
+#: ../src/widgets/toolbox.cpp:2308
 msgid "heptagram"
 msgstr "гептаграмма"
 
-#: ../src/widgets/toolbox.cpp:2290
+#: ../src/widgets/toolbox.cpp:2308
 msgid "octagram"
 msgstr "октограмма"
 
-#: ../src/widgets/toolbox.cpp:2290
+#: ../src/widgets/toolbox.cpp:2308
 msgid "regular polygon"
 msgstr "обычный многоугольник"
 
-#: ../src/widgets/toolbox.cpp:2293
+#: ../src/widgets/toolbox.cpp:2311
 msgid "Spoke ratio"
 msgstr "Отношение радиусов"
 
-#: ../src/widgets/toolbox.cpp:2293
+#: ../src/widgets/toolbox.cpp:2311
 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:2296
+#: ../src/widgets/toolbox.cpp:2314
 msgid "Base radius to tip radius ratio"
 msgstr "Отношение радиусов основания и вершины луча"
 
-#: ../src/widgets/toolbox.cpp:2314
+#: ../src/widgets/toolbox.cpp:2332
 msgid "stretched"
 msgstr "растянуто"
 
-#: ../src/widgets/toolbox.cpp:2314
+#: ../src/widgets/toolbox.cpp:2332
 msgid "twisted"
 msgstr "извилисто"
 
-#: ../src/widgets/toolbox.cpp:2314
+#: ../src/widgets/toolbox.cpp:2332
 msgid "slightly pinched"
 msgstr "слегка прищемлено"
 
-#: ../src/widgets/toolbox.cpp:2314
+#: ../src/widgets/toolbox.cpp:2332
 msgid "NOT rounded"
 msgstr "БЕЗ закругления"
 
-#: ../src/widgets/toolbox.cpp:2314
+#: ../src/widgets/toolbox.cpp:2332
 msgid "slightly rounded"
 msgstr "небольшое закругление"
 
-#: ../src/widgets/toolbox.cpp:2314
+#: ../src/widgets/toolbox.cpp:2332
 msgid "visibly rounded"
 msgstr "заметное закругление"
 
-#: ../src/widgets/toolbox.cpp:2314
+#: ../src/widgets/toolbox.cpp:2332
 msgid "well rounded"
 msgstr "порядочное закругление"
 
-#: ../src/widgets/toolbox.cpp:2314
+#: ../src/widgets/toolbox.cpp:2332
 msgid "amply rounded"
 msgstr "изрядное закругление"
 
-#: ../src/widgets/toolbox.cpp:2314
-#: ../src/widgets/toolbox.cpp:2329
+#: ../src/widgets/toolbox.cpp:2332
+#: ../src/widgets/toolbox.cpp:2347
 msgid "blown up"
 msgstr "безумное"
 
-#: ../src/widgets/toolbox.cpp:2317
+#: ../src/widgets/toolbox.cpp:2335
 msgid "Rounded"
 msgstr "Закругление"
 
-#: ../src/widgets/toolbox.cpp:2317
+#: ../src/widgets/toolbox.cpp:2335
 msgid "Rounded:"
 msgstr "Закругление:"
 
-#: ../src/widgets/toolbox.cpp:2317
+#: ../src/widgets/toolbox.cpp:2335
 msgid "How much rounded are the corners (0 for sharp)"
 msgstr "Насколько сглажены углы (0 — острые)"
 
-#: ../src/widgets/toolbox.cpp:2329
+#: ../src/widgets/toolbox.cpp:2347
 msgid "NOT randomized"
 msgstr "без случайности"
 
-#: ../src/widgets/toolbox.cpp:2329
+#: ../src/widgets/toolbox.cpp:2347
 msgid "slightly irregular"
 msgstr "едва беспорядочно"
 
-#: ../src/widgets/toolbox.cpp:2329
+#: ../src/widgets/toolbox.cpp:2347
 msgid "visibly randomized"
 msgstr "заметная случайность"
 
-#: ../src/widgets/toolbox.cpp:2329
+#: ../src/widgets/toolbox.cpp:2347
 msgid "strongly randomized"
 msgstr "изрядная случайность"
 
-#: ../src/widgets/toolbox.cpp:2332
+#: ../src/widgets/toolbox.cpp:2350
 msgid "Randomized"
 msgstr "Случайность"
 
-#: ../src/widgets/toolbox.cpp:2332
+#: ../src/widgets/toolbox.cpp:2350
 msgid "Randomized:"
 msgstr "Искажение:"
 
-#: ../src/widgets/toolbox.cpp:2332
+#: ../src/widgets/toolbox.cpp:2350
 msgid "Scatter randomly the corners and angles"
 msgstr "Случайным образом смещать вершины и вращать углы"
 
-#: ../src/widgets/toolbox.cpp:2347
-#: ../src/widgets/toolbox.cpp:3286
-#: ../src/widgets/toolbox.cpp:3546
-#: ../src/widgets/toolbox.cpp:6737
+#: ../src/widgets/toolbox.cpp:2365
+#: ../src/widgets/toolbox.cpp:3304
+#: ../src/widgets/toolbox.cpp:3564
+#: ../src/widgets/toolbox.cpp:6755
 msgid "Defaults"
 msgstr "По умолчанию"
 
-#: ../src/widgets/toolbox.cpp:2348
-#: ../src/widgets/toolbox.cpp:3287
+#: ../src/widgets/toolbox.cpp:2366
+#: ../src/widgets/toolbox.cpp:3305
 msgid "Reset shape parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Сбросить параметры фигуры к значениям по умолчанию (параметры по умолчанию можно изменить в настройках Inkscape)"
 
-#: ../src/widgets/toolbox.cpp:2421
+#: ../src/widgets/toolbox.cpp:2439
 msgid "Change rectangle"
 msgstr "Удаление закругления"
 
-#: ../src/widgets/toolbox.cpp:2614
+#: ../src/widgets/toolbox.cpp:2632
 msgid "W:"
 msgstr "Ш:"
 
-#: ../src/widgets/toolbox.cpp:2614
+#: ../src/widgets/toolbox.cpp:2632
 msgid "Width of rectangle"
 msgstr "Ширина прямоугольника"
 
-#: ../src/widgets/toolbox.cpp:2631
+#: ../src/widgets/toolbox.cpp:2649
 msgid "H:"
 msgstr "Г:"
 
-#: ../src/widgets/toolbox.cpp:2631
+#: ../src/widgets/toolbox.cpp:2649
 msgid "Height of rectangle"
 msgstr "Высота прямоугольника"
 
-#: ../src/widgets/toolbox.cpp:2645
-#: ../src/widgets/toolbox.cpp:2660
+#: ../src/widgets/toolbox.cpp:2663
+#: ../src/widgets/toolbox.cpp:2678
 msgid "not rounded"
 msgstr "без закругления"
 
-#: ../src/widgets/toolbox.cpp:2648
+#: ../src/widgets/toolbox.cpp:2666
 msgid "Horizontal radius"
 msgstr "Горизонтальный радиус"
 
-#: ../src/widgets/toolbox.cpp:2648
+#: ../src/widgets/toolbox.cpp:2666
 msgid "Rx:"
 msgstr "Гор. радиус:"
 
-#: ../src/widgets/toolbox.cpp:2648
+#: ../src/widgets/toolbox.cpp:2666
 msgid "Horizontal radius of rounded corners"
 msgstr "Горизонтальный радиус закругленных углов"
 
-#: ../src/widgets/toolbox.cpp:2663
+#: ../src/widgets/toolbox.cpp:2681
 msgid "Vertical radius"
 msgstr "Вертикальный радиус"
 
-#: ../src/widgets/toolbox.cpp:2663
+#: ../src/widgets/toolbox.cpp:2681
 msgid "Ry:"
 msgstr "Верт. радиус:"
 
-#: ../src/widgets/toolbox.cpp:2663
+#: ../src/widgets/toolbox.cpp:2681
 msgid "Vertical radius of rounded corners"
 msgstr "Вертикальный радиус закругленных углов"
 
-#: ../src/widgets/toolbox.cpp:2682
+#: ../src/widgets/toolbox.cpp:2700
 msgid "Not rounded"
 msgstr "Не закруглён"
 
-#: ../src/widgets/toolbox.cpp:2683
+#: ../src/widgets/toolbox.cpp:2701
 msgid "Make corners sharp"
 msgstr "Убрать закругление углов"
 
 #. TODO: use the correct axis here, too
-#: ../src/widgets/toolbox.cpp:2871
+#: ../src/widgets/toolbox.cpp:2889
 msgid "3D Box: Change perspective (angle of infinite axis)"
 msgstr "Паралеллепипед: смена перспективы"
 
-#: ../src/widgets/toolbox.cpp:2941
+#: ../src/widgets/toolbox.cpp:2959
 msgid "Angle in X direction"
 msgstr "Угол в направлении X"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:2943
+#: ../src/widgets/toolbox.cpp:2961
 msgid "Angle of PLs in X direction"
 msgstr "Угол ПЛ в направлении X"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:2965
+#: ../src/widgets/toolbox.cpp:2983
 msgid "State of VP in X direction"
 msgstr "Состояние точек схода в направлении X"
 
-#: ../src/widgets/toolbox.cpp:2966
+#: ../src/widgets/toolbox.cpp:2984
 msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Переключить точку схода в направлении X между «конечной» и «бесконечной» (=параллельной)"
 
-#: ../src/widgets/toolbox.cpp:2981
+#: ../src/widgets/toolbox.cpp:2999
 msgid "Angle in Y direction"
 msgstr "Угол в направлении Y"
 
-#: ../src/widgets/toolbox.cpp:2981
+#: ../src/widgets/toolbox.cpp:2999
 msgid "Angle Y:"
 msgstr "Угол Y:"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:2983
+#: ../src/widgets/toolbox.cpp:3001
 msgid "Angle of PLs in Y direction"
 msgstr "Угол ПЛ в направлении Y"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3004
+#: ../src/widgets/toolbox.cpp:3022
 msgid "State of VP in Y direction"
 msgstr "Состояние точек схода в направлении Y"
 
-#: ../src/widgets/toolbox.cpp:3005
+#: ../src/widgets/toolbox.cpp:3023
 msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Переключить точку схода в направлении Y между «конечной» и «бесконечной» (=параллельной)"
 
-#: ../src/widgets/toolbox.cpp:3020
+#: ../src/widgets/toolbox.cpp:3038
 msgid "Angle in Z direction"
 msgstr "Угол в направлении Z"
 
 #. Translators: PL is short for 'perspective line'
-#: ../src/widgets/toolbox.cpp:3022
+#: ../src/widgets/toolbox.cpp:3040
 msgid "Angle of PLs in Z direction"
 msgstr "Угол ПЛ в направлении Z"
 
 #. Translators: VP is short for 'vanishing point'
-#: ../src/widgets/toolbox.cpp:3043
+#: ../src/widgets/toolbox.cpp:3061
 msgid "State of VP in Z direction"
 msgstr "Состояние точек схода в направлении Z"
 
-#: ../src/widgets/toolbox.cpp:3044
+#: ../src/widgets/toolbox.cpp:3062
 msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)"
 msgstr "Переключить точку схода в направлении Z между «конечной» и «бесконечной» (=параллельной)"
 
-#: ../src/widgets/toolbox.cpp:3102
+#: ../src/widgets/toolbox.cpp:3120
 msgid "Change spiral"
 msgstr "Сброс изменений спирали"
 
-#: ../src/widgets/toolbox.cpp:3243
+#: ../src/widgets/toolbox.cpp:3261
 msgid "just a curve"
 msgstr "просто кривая"
 
-#: ../src/widgets/toolbox.cpp:3243
+#: ../src/widgets/toolbox.cpp:3261
 msgid "one full revolution"
 msgstr "один полный оборот"
 
-#: ../src/widgets/toolbox.cpp:3246
+#: ../src/widgets/toolbox.cpp:3264
 msgid "Number of turns"
 msgstr "Количество поворотов"
 
-#: ../src/widgets/toolbox.cpp:3246
+#: ../src/widgets/toolbox.cpp:3264
 msgid "Turns:"
 msgstr "Витков:"
 
-#: ../src/widgets/toolbox.cpp:3246
+#: ../src/widgets/toolbox.cpp:3264
 msgid "Number of revolutions"
 msgstr "Количество витков"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3275
 msgid "circle"
 msgstr "окружность"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3275
 msgid "edge is much denser"
 msgstr "край намного плотнее"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3275
 msgid "edge is denser"
 msgstr "центр плотнее"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3275
 msgid "even"
 msgstr "ровная спираль"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3275
 msgid "center is denser"
 msgstr "центр плотнее"
 
-#: ../src/widgets/toolbox.cpp:3257
+#: ../src/widgets/toolbox.cpp:3275
 msgid "center is much denser"
 msgstr "центр намного плотнее"
 
-#: ../src/widgets/toolbox.cpp:3260
+#: ../src/widgets/toolbox.cpp:3278
 msgid "Divergence"
 msgstr "Отклонение"
 
-#: ../src/widgets/toolbox.cpp:3260
+#: ../src/widgets/toolbox.cpp:3278
 msgid "Divergence:"
 msgstr "Нелинейность:"
 
-#: ../src/widgets/toolbox.cpp:3260
+#: ../src/widgets/toolbox.cpp:3278
 msgid "How much denser/sparser are outer revolutions; 1 = uniform"
 msgstr "Насколько постепенно увеличивать или уменьшать расстояния между витками; 1 = равномерно"
 
-#: ../src/widgets/toolbox.cpp:3271
+#: ../src/widgets/toolbox.cpp:3289
 msgid "starts from center"
 msgstr "начинается из центра"
 
-#: ../src/widgets/toolbox.cpp:3271
+#: ../src/widgets/toolbox.cpp:3289
 msgid "starts mid-way"
 msgstr "начинается с середины"
 
-#: ../src/widgets/toolbox.cpp:3271
+#: ../src/widgets/toolbox.cpp:3289
 msgid "starts near edge"
 msgstr "начинается с края"
 
-#: ../src/widgets/toolbox.cpp:3274
+#: ../src/widgets/toolbox.cpp:3292
 msgid "Inner radius"
 msgstr "Внутренний радиус"
 
-#: ../src/widgets/toolbox.cpp:3274
+#: ../src/widgets/toolbox.cpp:3292
 msgid "Inner radius:"
 msgstr "Внутренний радиус:"
 
-#: ../src/widgets/toolbox.cpp:3274
+#: ../src/widgets/toolbox.cpp:3292
 msgid "Radius of the innermost revolution (relative to the spiral size)"
 msgstr "Радиус первого изнутри витка (относительно размера спирали)"
 
-#: ../src/widgets/toolbox.cpp:3347
+#: ../src/widgets/toolbox.cpp:3365
 msgid "Bezier"
 msgstr "Кривые Безье"
 
-#: ../src/widgets/toolbox.cpp:3348
+#: ../src/widgets/toolbox.cpp:3366
 msgid "Create regular Bezier path"
 msgstr "Рисовать кривую Безье"
 
-#: ../src/widgets/toolbox.cpp:3354
+#: ../src/widgets/toolbox.cpp:3372
 msgid "Spiro"
 msgstr "Кривые Спиро"
 
-#: ../src/widgets/toolbox.cpp:3355
+#: ../src/widgets/toolbox.cpp:3373
 msgid "Create Spiro path"
 msgstr "Рисовать кривую Спиро"
 
-#: ../src/widgets/toolbox.cpp:3362
+#: ../src/widgets/toolbox.cpp:3380
 msgid "Zigzag"
 msgstr "Зигзаги"
 
-#: ../src/widgets/toolbox.cpp:3363
+#: ../src/widgets/toolbox.cpp:3381
 msgid "Create a sequence of straight line segments"
 msgstr "Рисовать последовательность прямых отрезков"
 
-#: ../src/widgets/toolbox.cpp:3369
+#: ../src/widgets/toolbox.cpp:3387
 msgid "Paraxial"
 msgstr "Параксиальный режим"
 
-#: ../src/widgets/toolbox.cpp:3370
+#: ../src/widgets/toolbox.cpp:3388
 msgid "Create a sequence of paraxial line segments"
 msgstr "Рисовать последовательность прямых отрезков"
 
-#: ../src/widgets/toolbox.cpp:3378
-#: ../src/widgets/toolbox.cpp:3769
+#: ../src/widgets/toolbox.cpp:3396
+#: ../src/widgets/toolbox.cpp:3787
 #: ../share/extensions/extrude.inx.h:3
 msgid "Mode:"
 msgstr "Режим:"
 
-#: ../src/widgets/toolbox.cpp:3407
+#: ../src/widgets/toolbox.cpp:3425
 msgid "Triangle in"
 msgstr "Декрещендо"
 
-#: ../src/widgets/toolbox.cpp:3408
+#: ../src/widgets/toolbox.cpp:3426
 msgid "Triangle out"
 msgstr "Крещендо"
 
-#: ../src/widgets/toolbox.cpp:3410
+#: ../src/widgets/toolbox.cpp:3428
 msgid "From clipboard"
 msgstr "Из буфера обмена"
 
-#: ../src/widgets/toolbox.cpp:3435
-#: ../src/widgets/toolbox.cpp:3436
+#: ../src/widgets/toolbox.cpp:3453
+#: ../src/widgets/toolbox.cpp:3454
 msgid "Shape:"
 msgstr "Форма:"
 
-#: ../src/widgets/toolbox.cpp:3520
+#: ../src/widgets/toolbox.cpp:3538
 msgid "(many nodes, rough)"
 msgstr "(много узлов, грубые линии)"
 
-#: ../src/widgets/toolbox.cpp:3520
-#: ../src/widgets/toolbox.cpp:3640
-#: ../src/widgets/toolbox.cpp:3657
-#: ../src/widgets/toolbox.cpp:3860
-#: ../src/widgets/toolbox.cpp:4230
-#: ../src/widgets/toolbox.cpp:4263
-#: ../src/widgets/toolbox.cpp:5249
+#: ../src/widgets/toolbox.cpp:3538
+#: ../src/widgets/toolbox.cpp:3658
+#: ../src/widgets/toolbox.cpp:3675
+#: ../src/widgets/toolbox.cpp:3878
+#: ../src/widgets/toolbox.cpp:4248
+#: ../src/widgets/toolbox.cpp:4281
+#: ../src/widgets/toolbox.cpp:5267
 msgid "(default)"
 msgstr "(по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:3520
+#: ../src/widgets/toolbox.cpp:3538
 msgid "(few nodes, smooth)"
 msgstr "(мало узлов, плавные линии)"
 
-#: ../src/widgets/toolbox.cpp:3523
+#: ../src/widgets/toolbox.cpp:3541
 msgid "Smoothing:"
 msgstr "Сглаживание:"
 
-#: ../src/widgets/toolbox.cpp:3523
+#: ../src/widgets/toolbox.cpp:3541
 msgid "Smoothing: "
 msgstr "Сглаживание:"
 
-#: ../src/widgets/toolbox.cpp:3524
+#: ../src/widgets/toolbox.cpp:3542
 msgid "How much smoothing (simplifying) is applied to the line"
 msgstr "Как сильно сглаживается (упрощается) рисуемая от руки линия"
 
-#: ../src/widgets/toolbox.cpp:3547
+#: ../src/widgets/toolbox.cpp:3565
 msgid "Reset pencil parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Сбросить параметры карандаша к значениям по умолчанию (параметры по умолчанию можно изменить в диалоге настройки Inkscape)"
 
 #. Width
-#: ../src/widgets/toolbox.cpp:3640
+#: ../src/widgets/toolbox.cpp:3658
 msgid "(pinch tweak)"
 msgstr "(узкая кисть)"
 
-#: ../src/widgets/toolbox.cpp:3640
+#: ../src/widgets/toolbox.cpp:3658
 msgid "(broad tweak)"
 msgstr "(широкая кисть)"
 
-#: ../src/widgets/toolbox.cpp:3643
+#: ../src/widgets/toolbox.cpp:3661
 msgid "The width of the tweak area (relative to the visible canvas area)"
 msgstr "Ширина области коррекции (относительно видимой области холста)"
 
 #. Force
-#: ../src/widgets/toolbox.cpp:3657
+#: ../src/widgets/toolbox.cpp:3675
 msgid "(minimum force)"
 msgstr "(минимальная)"
 
-#: ../src/widgets/toolbox.cpp:3657
+#: ../src/widgets/toolbox.cpp:3675
 msgid "(maximum force)"
 msgstr "(максимальная)"
 
-#: ../src/widgets/toolbox.cpp:3660
+#: ../src/widgets/toolbox.cpp:3678
 msgid "Force"
 msgstr "Сила"
 
-#: ../src/widgets/toolbox.cpp:3660
+#: ../src/widgets/toolbox.cpp:3678
 msgid "Force:"
 msgstr "Сила:"
 
-#: ../src/widgets/toolbox.cpp:3660
+#: ../src/widgets/toolbox.cpp:3678
 msgid "The force of the tweak action"
 msgstr "Сила действия инструмента коррекции"
 
-#: ../src/widgets/toolbox.cpp:3678
+#: ../src/widgets/toolbox.cpp:3696
 msgid "Move mode"
 msgstr "Перемещение объектов"
 
-#: ../src/widgets/toolbox.cpp:3679
+#: ../src/widgets/toolbox.cpp:3697
 msgid "Move objects in any direction"
 msgstr "Перемещать объекты в любом направлении"
 
-#: ../src/widgets/toolbox.cpp:3685
+#: ../src/widgets/toolbox.cpp:3703
 msgid "Move in/out mode"
 msgstr "Приближение и отталкивание объектов"
 
-#: ../src/widgets/toolbox.cpp:3686
+#: ../src/widgets/toolbox.cpp:3704
 msgid "Move objects towards cursor; with Shift from cursor"
 msgstr "Перемещать объекты по направлению к курсору, с Shift — в направлении от курсора"
 
-#: ../src/widgets/toolbox.cpp:3692
+#: ../src/widgets/toolbox.cpp:3710
 msgid "Move jitter mode"
 msgstr "Случайное перемещение объектов"
 
-#: ../src/widgets/toolbox.cpp:3693
+#: ../src/widgets/toolbox.cpp:3711
 msgid "Move objects in random directions"
 msgstr "Перемещать объекты в случайных направлениях"
 
-#: ../src/widgets/toolbox.cpp:3699
+#: ../src/widgets/toolbox.cpp:3717
 msgid "Scale mode"
 msgstr "Масштабирование объектов"
 
-#: ../src/widgets/toolbox.cpp:3700
+#: ../src/widgets/toolbox.cpp:3718
 msgid "Scale objects, with Shift scale up"
 msgstr "Менять размер объектов, с Shift — увеличивать"
 
-#: ../src/widgets/toolbox.cpp:3706
+#: ../src/widgets/toolbox.cpp:3724
 msgid "Rotate mode"
 msgstr "Вращение объектов"
 
-#: ../src/widgets/toolbox.cpp:3707
+#: ../src/widgets/toolbox.cpp:3725
 msgid "Rotate objects, with Shift counterclockwise"
 msgstr "Вращать объекты, с Shift — против часовой стрелки"
 
-#: ../src/widgets/toolbox.cpp:3713
+#: ../src/widgets/toolbox.cpp:3731
 msgid "Duplicate/delete mode"
 msgstr "Дублирование и удаление объектов"
 
-#: ../src/widgets/toolbox.cpp:3714
+#: ../src/widgets/toolbox.cpp:3732
 msgid "Duplicate objects, with Shift delete"
 msgstr "Дублировать объекты, с Shift — удалять"
 
-#: ../src/widgets/toolbox.cpp:3720
+#: ../src/widgets/toolbox.cpp:3738
 msgid "Push mode"
 msgstr "Толкание контуров"
 
-#: ../src/widgets/toolbox.cpp:3721
+#: ../src/widgets/toolbox.cpp:3739
 msgid "Push parts of paths in any direction"
 msgstr "Выталкивать части контуров"
 
-#: ../src/widgets/toolbox.cpp:3727
+#: ../src/widgets/toolbox.cpp:3745
 msgid "Shrink/grow mode"
 msgstr "Сокращение и наращивание объема контуров"
 
-#: ../src/widgets/toolbox.cpp:3728
+#: ../src/widgets/toolbox.cpp:3746
 msgid "Shrink (inset) parts of paths; with Shift grow (outset)"
 msgstr "Сокращать объем контуров (втягивать их), с Shift — наращивать его (раздувать контуры)"
 
-#: ../src/widgets/toolbox.cpp:3734
+#: ../src/widgets/toolbox.cpp:3752
 msgid "Attract/repel mode"
 msgstr "Притяжение и отталкивание контуров"
 
-#: ../src/widgets/toolbox.cpp:3735
+#: ../src/widgets/toolbox.cpp:3753
 msgid "Attract parts of paths towards cursor; with Shift from cursor"
 msgstr "Притягивать части контуров к курсору; с Shift — отталкивать их от курсора"
 
-#: ../src/widgets/toolbox.cpp:3741
+#: ../src/widgets/toolbox.cpp:3759
 msgid "Roughen mode"
 msgstr "Огрубление контуров"
 
-#: ../src/widgets/toolbox.cpp:3742
+#: ../src/widgets/toolbox.cpp:3760
 msgid "Roughen parts of paths"
 msgstr "Огрублять части контуров, рисовать заусенцы"
 
-#: ../src/widgets/toolbox.cpp:3748
+#: ../src/widgets/toolbox.cpp:3766
 msgid "Color paint mode"
 msgstr "Раскрашивание объектов"
 
-#: ../src/widgets/toolbox.cpp:3749
+#: ../src/widgets/toolbox.cpp:3767
 msgid "Paint the tool's color upon selected objects"
 msgstr "Рисовать цветом инструмента по выбранным объектам"
 
-#: ../src/widgets/toolbox.cpp:3755
+#: ../src/widgets/toolbox.cpp:3773
 msgid "Color jitter mode"
 msgstr "Перебор цветов для объектов"
 
-#: ../src/widgets/toolbox.cpp:3756
+#: ../src/widgets/toolbox.cpp:3774
 msgid "Jitter the colors of selected objects"
 msgstr "Перебирать цвета выделенных объектов"
 
-#: ../src/widgets/toolbox.cpp:3762
+#: ../src/widgets/toolbox.cpp:3780
 msgid "Blur mode"
 msgstr "Размывание"
 
-#: ../src/widgets/toolbox.cpp:3763
+#: ../src/widgets/toolbox.cpp:3781
 msgid "Blur selected objects more; with Shift, blur less"
 msgstr "Размывать объекты, с Shift — уменьшать размытость"
 
-#: ../src/widgets/toolbox.cpp:3790
+#: ../src/widgets/toolbox.cpp:3808
 msgid "Channels:"
 msgstr "Каналы:"
 
-#: ../src/widgets/toolbox.cpp:3801
+#: ../src/widgets/toolbox.cpp:3819
 msgid "In color mode, act on objects' hue"
 msgstr "В режиме изменения цвета влиять на тон объектов"
 
 #. TRANSLATORS:  "H" here stands for hue
-#: ../src/widgets/toolbox.cpp:3805
+#: ../src/widgets/toolbox.cpp:3823
 msgid "H"
 msgstr "H"
 
-#: ../src/widgets/toolbox.cpp:3816
+#: ../src/widgets/toolbox.cpp:3834
 msgid "In color mode, act on objects' saturation"
 msgstr "В режиме изменения цвета влиять на насыщенность объектов"
 
 #. TRANSLATORS: "S" here stands for Saturation
-#: ../src/widgets/toolbox.cpp:3820
+#: ../src/widgets/toolbox.cpp:3838
 msgid "S"
 msgstr "S"
 
-#: ../src/widgets/toolbox.cpp:3831
+#: ../src/widgets/toolbox.cpp:3849
 msgid "In color mode, act on objects' lightness"
 msgstr "В режиме изменения цвета влиять на яркость объектов"
 
 #. TRANSLATORS: "L" here stands for Lightness
-#: ../src/widgets/toolbox.cpp:3835
+#: ../src/widgets/toolbox.cpp:3853
 msgid "L"
 msgstr "L"
 
-#: ../src/widgets/toolbox.cpp:3846
+#: ../src/widgets/toolbox.cpp:3864
 msgid "In color mode, act on objects' opacity"
 msgstr "В режиме изменения цвета влиять на непрозрачность объектов"
 
 #. TRANSLATORS: "O" here stands for Opacity
-#: ../src/widgets/toolbox.cpp:3850
+#: ../src/widgets/toolbox.cpp:3868
 msgid "O"
 msgstr "O"
 
 #. Fidelity
-#: ../src/widgets/toolbox.cpp:3860
+#: ../src/widgets/toolbox.cpp:3878
 msgid "(rough, simplified)"
 msgstr "(грубо, упрощённо)"
 
-#: ../src/widgets/toolbox.cpp:3860
+#: ../src/widgets/toolbox.cpp:3878
 msgid "(fine, but many nodes)"
 msgstr "(точно, но много узлов)"
 
-#: ../src/widgets/toolbox.cpp:3863
+#: ../src/widgets/toolbox.cpp:3881
 msgid "Fidelity"
 msgstr "Точность"
 
-#: ../src/widgets/toolbox.cpp:3863
+#: ../src/widgets/toolbox.cpp:3881
 msgid "Fidelity:"
 msgstr "Точность:"
 
-#: ../src/widgets/toolbox.cpp:3864
+#: ../src/widgets/toolbox.cpp:3882
 msgid "Low fidelity simplifies paths; high fidelity preserves path features but may generate a lot of new nodes"
 msgstr "Низкая точность упрощает контуры; высокая точность сохраняет общую форму неизменной части контура, но добавляет новые узлы"
 
-#: ../src/widgets/toolbox.cpp:3881
-#: ../src/widgets/toolbox.cpp:4381
+#: ../src/widgets/toolbox.cpp:3899
+#: ../src/widgets/toolbox.cpp:4399
 msgid "Pressure"
 msgstr "Нажим"
 
-#: ../src/widgets/toolbox.cpp:3882
+#: ../src/widgets/toolbox.cpp:3900
 msgid "Use the pressure of the input device to alter the force of tweak action"
 msgstr "Нажим устройства ввода изменяет силу корректирующего действия"
 
-#: ../src/widgets/toolbox.cpp:4062
+#: ../src/widgets/toolbox.cpp:4080
 msgid "No preset"
 msgstr "Не выбрана"
 
-#: ../src/widgets/toolbox.cpp:4080
+#: ../src/widgets/toolbox.cpp:4098
 msgid "Save..."
 msgstr "Сохранить..."
 
 #. Width
-#: ../src/widgets/toolbox.cpp:4230
-#: ../src/widgets/toolbox.cpp:5249
+#: ../src/widgets/toolbox.cpp:4248
+#: ../src/widgets/toolbox.cpp:5267
 msgid "(hairline)"
 msgstr "(волосок)"
 
-#: ../src/widgets/toolbox.cpp:4230
-#: ../src/widgets/toolbox.cpp:5249
+#: ../src/widgets/toolbox.cpp:4248
+#: ../src/widgets/toolbox.cpp:5267
 msgid "(broad stroke)"
 msgstr "(широкий штрих)"
 
-#: ../src/widgets/toolbox.cpp:4233
-#: ../src/widgets/toolbox.cpp:5252
+#: ../src/widgets/toolbox.cpp:4251
+#: ../src/widgets/toolbox.cpp:5270
 msgid "Pen Width"
 msgstr "Толщина пера"
 
-#: ../src/widgets/toolbox.cpp:4234
+#: ../src/widgets/toolbox.cpp:4252
 msgid "The width of the calligraphic pen (relative to the visible canvas area)"
 msgstr "Ширина каллиграфического пера (относительно видимой области холста)"
 
 #. Thinning
-#: ../src/widgets/toolbox.cpp:4247
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(speed blows up stroke)"
 msgstr "(скорость утолщает штрих)"
 
-#: ../src/widgets/toolbox.cpp:4247
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(slight widening)"
 msgstr "(легкое утолщение)"
 
-#: ../src/widgets/toolbox.cpp:4247
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(constant width)"
 msgstr "(постоянная ширина)"
 
-#: ../src/widgets/toolbox.cpp:4247
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(slight thinning, default)"
 msgstr "(легкое утоньшение, по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4247
+#: ../src/widgets/toolbox.cpp:4265
 msgid "(speed deflates stroke)"
 msgstr "(скорость обнуляет штрих)"
 
-#: ../src/widgets/toolbox.cpp:4250
+#: ../src/widgets/toolbox.cpp:4268
 msgid "Stroke Thinning"
 msgstr "Утоньшение штриха"
 
-#: ../src/widgets/toolbox.cpp:4250
+#: ../src/widgets/toolbox.cpp:4268
 msgid "Thinning:"
 msgstr "Сужение:"
 
-#: ../src/widgets/toolbox.cpp:4251
+#: ../src/widgets/toolbox.cpp:4269
 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:4263
+#: ../src/widgets/toolbox.cpp:4281
 msgid "(left edge up)"
 msgstr "(левый угол вверху)"
 
-#: ../src/widgets/toolbox.cpp:4263
+#: ../src/widgets/toolbox.cpp:4281
 msgid "(horizontal)"
 msgstr "(перо горизонтально)"
 
-#: ../src/widgets/toolbox.cpp:4263
+#: ../src/widgets/toolbox.cpp:4281
 msgid "(right edge up)"
 msgstr "(правый угол вверху)"
 
-#: ../src/widgets/toolbox.cpp:4266
+#: ../src/widgets/toolbox.cpp:4284
 msgid "Pen Angle"
 msgstr "Угол пера"
 
-#: ../src/widgets/toolbox.cpp:4266
+#: ../src/widgets/toolbox.cpp:4284
 msgid "Angle:"
 msgstr "Угол:"
 
-#: ../src/widgets/toolbox.cpp:4267
+#: ../src/widgets/toolbox.cpp:4285
 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:4281
+#: ../src/widgets/toolbox.cpp:4299
 msgid "(perpendicular to stroke, \"brush\")"
 msgstr "(перпендикулярно штриху)"
 
-#: ../src/widgets/toolbox.cpp:4281
+#: ../src/widgets/toolbox.cpp:4299
 msgid "(almost fixed, default)"
 msgstr "(почти полная, значение по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4281
+#: ../src/widgets/toolbox.cpp:4299
 msgid "(fixed by Angle, \"pen\")"
 msgstr "(угол зафиксирован)"
 
-#: ../src/widgets/toolbox.cpp:4284
+#: ../src/widgets/toolbox.cpp:4302
 msgid "Fixation"
 msgstr "Фиксация"
 
-#: ../src/widgets/toolbox.cpp:4284
+#: ../src/widgets/toolbox.cpp:4302
 msgid "Fixation:"
 msgstr "Фиксация:"
 
-#: ../src/widgets/toolbox.cpp:4285
+#: ../src/widgets/toolbox.cpp:4303
 msgid "Angle behavior (0 = nib always perpendicular to stroke direction, 100 = fixed angle)"
 msgstr "Фиксация угла (0 = перо всегда перпендикулярно направлению штриха, 100 = угол не меняется)"
 
 #. Cap Rounding
-#: ../src/widgets/toolbox.cpp:4297
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(blunt caps, default)"
 msgstr "(плоские концы, значение по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4297
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(slightly bulging)"
 msgstr "(слегка закругленные)"
 
-#: ../src/widgets/toolbox.cpp:4297
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(approximately round)"
 msgstr "(примерно круглые)"
 
-#: ../src/widgets/toolbox.cpp:4297
+#: ../src/widgets/toolbox.cpp:4315
 msgid "(long protruding caps)"
 msgstr "(округлые, далеко выдающиеся концы)"
 
-#: ../src/widgets/toolbox.cpp:4301
+#: ../src/widgets/toolbox.cpp:4319
 msgid "Cap rounding"
 msgstr "Закругление концов"
 
-#: ../src/widgets/toolbox.cpp:4301
+#: ../src/widgets/toolbox.cpp:4319
 msgid "Caps:"
 msgstr "Концы:"
 
-#: ../src/widgets/toolbox.cpp:4302
+#: ../src/widgets/toolbox.cpp:4320
 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:4314
+#: ../src/widgets/toolbox.cpp:4332
 msgid "(smooth line)"
 msgstr "(гладкая линия)"
 
-#: ../src/widgets/toolbox.cpp:4314
+#: ../src/widgets/toolbox.cpp:4332
 msgid "(slight tremor)"
 msgstr "(легкое дрожание)"
 
-#: ../src/widgets/toolbox.cpp:4314
+#: ../src/widgets/toolbox.cpp:4332
 msgid "(noticeable tremor)"
 msgstr "(заметное дрожание)"
 
-#: ../src/widgets/toolbox.cpp:4314
+#: ../src/widgets/toolbox.cpp:4332
 msgid "(maximum tremor)"
 msgstr "(максимальное дрожание)"
 
-#: ../src/widgets/toolbox.cpp:4317
+#: ../src/widgets/toolbox.cpp:4335
 msgid "Stroke Tremor"
 msgstr "Дрожание штриха"
 
-#: ../src/widgets/toolbox.cpp:4317
+#: ../src/widgets/toolbox.cpp:4335
 msgid "Tremor:"
 msgstr "Дрожание:"
 
-#: ../src/widgets/toolbox.cpp:4318
+#: ../src/widgets/toolbox.cpp:4336
 msgid "Increase to make strokes rugged and trembling"
 msgstr "Увеличение значения делает штрихи дрожащими"
 
 #. Wiggle
-#: ../src/widgets/toolbox.cpp:4332
+#: ../src/widgets/toolbox.cpp:4350
 msgid "(no wiggle)"
 msgstr "(без виляния)"
 
-#: ../src/widgets/toolbox.cpp:4332
+#: ../src/widgets/toolbox.cpp:4350
 msgid "(slight deviation)"
 msgstr "(легкое отклонение)"
 
-#: ../src/widgets/toolbox.cpp:4332
+#: ../src/widgets/toolbox.cpp:4350
 msgid "(wild waves and curls)"
 msgstr "(сумасшедшее вихляние)"
 
-#: ../src/widgets/toolbox.cpp:4335
+#: ../src/widgets/toolbox.cpp:4353
 msgid "Pen Wiggle"
 msgstr "Виляние пером"
 
-#: ../src/widgets/toolbox.cpp:4335
+#: ../src/widgets/toolbox.cpp:4353
 msgid "Wiggle:"
 msgstr "Виляние:"
 
-#: ../src/widgets/toolbox.cpp:4336
+#: ../src/widgets/toolbox.cpp:4354
 msgid "Increase to make the pen waver and wiggle"
 msgstr "Увеличение значения делает штрихи виляющими"
 
 #. Mass
-#: ../src/widgets/toolbox.cpp:4349
+#: ../src/widgets/toolbox.cpp:4367
 msgid "(no inertia)"
 msgstr "(без инерции)"
 
-#: ../src/widgets/toolbox.cpp:4349
+#: ../src/widgets/toolbox.cpp:4367
 msgid "(slight smoothing, default)"
 msgstr "(легкое отставание, по умолчанию)"
 
-#: ../src/widgets/toolbox.cpp:4349
+#: ../src/widgets/toolbox.cpp:4367
 msgid "(noticeable lagging)"
 msgstr "(заметное отставание)"
 
-#: ../src/widgets/toolbox.cpp:4349
+#: ../src/widgets/toolbox.cpp:4367
 msgid "(maximum inertia)"
 msgstr "(максимальная инерция)"
 
-#: ../src/widgets/toolbox.cpp:4352
+#: ../src/widgets/toolbox.cpp:4370
 msgid "Pen Mass"
 msgstr "Масса пера"
 
-#: ../src/widgets/toolbox.cpp:4352
+#: ../src/widgets/toolbox.cpp:4370
 msgid "Mass:"
 msgstr "Масса:"
 
-#: ../src/widgets/toolbox.cpp:4353
+#: ../src/widgets/toolbox.cpp:4371
 msgid "Increase to make the pen drag behind, as if slowed by inertia"
 msgstr "Увеличение значения затормаживает перо, словно оно очень инертно"
 
-#: ../src/widgets/toolbox.cpp:4368
+#: ../src/widgets/toolbox.cpp:4386
 msgid "Trace Background"
 msgstr "Трассировать фон"
 
-#: ../src/widgets/toolbox.cpp:4369
+#: ../src/widgets/toolbox.cpp:4387
 msgid "Trace the lightness of the background by the width of the pen (white - minimum width, black - maximum width)"
 msgstr "Трассировать освещенность фона толщиной линии пера (белый — минимальная толщина, черный — максимальная толщина)"
 
-#: ../src/widgets/toolbox.cpp:4382
+#: ../src/widgets/toolbox.cpp:4400
 msgid "Use the pressure of the input device to alter the width of the pen"
 msgstr "Нажим (pressure) устройства ввода изменяет ширину пера"
 
-#: ../src/widgets/toolbox.cpp:4394
+#: ../src/widgets/toolbox.cpp:4412
 msgid "Tilt"
 msgstr "Наклон"
 
-#: ../src/widgets/toolbox.cpp:4395
+#: ../src/widgets/toolbox.cpp:4413
 msgid "Use the tilt of the input device to alter the angle of the pen's nib"
 msgstr "Наклон (tilt) устройства ввода изменяет угол пера"
 
-#: ../src/widgets/toolbox.cpp:4408
+#: ../src/widgets/toolbox.cpp:4426
 msgid "Choose a preset"
 msgstr "Выберите предустановку"
 
-#: ../src/widgets/toolbox.cpp:4496
+#: ../src/widgets/toolbox.cpp:4514
 msgid "Arc: Change start/end"
 msgstr "Дуга: изменить начало/конец"
 
-#: ../src/widgets/toolbox.cpp:4560
+#: ../src/widgets/toolbox.cpp:4578
 msgid "Arc: Change open/closed"
 msgstr "Дуга: Изменить открытость/закрытость"
 
-#: ../src/widgets/toolbox.cpp:4686
+#: ../src/widgets/toolbox.cpp:4704
 msgid "Start:"
 msgstr "Начало:"
 
-#: ../src/widgets/toolbox.cpp:4687
+#: ../src/widgets/toolbox.cpp:4705
 msgid "The angle (in degrees) from the horizontal to the arc's start point"
 msgstr "Угол (в градусах) от горизонтали до начальной точки дуги"
 
-#: ../src/widgets/toolbox.cpp:4699
+#: ../src/widgets/toolbox.cpp:4717
 msgid "End:"
 msgstr "Конец:"
 
-#: ../src/widgets/toolbox.cpp:4700
+#: ../src/widgets/toolbox.cpp:4718
 msgid "The angle (in degrees) from the horizontal to the arc's end point"
 msgstr "Угол (в градусах) от горизонтали до конечной точки дуги"
 
-#: ../src/widgets/toolbox.cpp:4716
+#: ../src/widgets/toolbox.cpp:4734
 msgid "Closed arc"
 msgstr "Закрытая дуга"
 
-#: ../src/widgets/toolbox.cpp:4717
+#: ../src/widgets/toolbox.cpp:4735
 msgid "Switch to segment (closed shape with two radii)"
 msgstr "Переключиться на сегмент (закрытый эллипс с двумя радиусами)"
 
-#: ../src/widgets/toolbox.cpp:4723
+#: ../src/widgets/toolbox.cpp:4741
 msgid "Open Arc"
 msgstr "Открытая дуга"
 
-#: ../src/widgets/toolbox.cpp:4724
+#: ../src/widgets/toolbox.cpp:4742
 msgid "Switch to arc (unclosed shape)"
 msgstr "Переключиться на дугу (незакрытый эллипс)"
 
-#: ../src/widgets/toolbox.cpp:4747
+#: ../src/widgets/toolbox.cpp:4765
 msgid "Make whole"
 msgstr "Сделать целым"
 
-#: ../src/widgets/toolbox.cpp:4748
+#: ../src/widgets/toolbox.cpp:4766
 msgid "Make the shape a whole ellipse, not arc or segment"
 msgstr "Сделать фигуру целым эллипсом, а не дугой или сегментом"
 
-#: ../src/widgets/toolbox.cpp:4817
+#: ../src/widgets/toolbox.cpp:4835
 msgid "Opacity:"
 msgstr "Непрозрачность:"
 
-#: ../src/widgets/toolbox.cpp:4824
+#: ../src/widgets/toolbox.cpp:4842
 msgid "Pick opacity"
 msgstr "Снять непрозрачность"
 
-#: ../src/widgets/toolbox.cpp:4825
+#: ../src/widgets/toolbox.cpp:4843
 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:4828
+#: ../src/widgets/toolbox.cpp:4846
 msgid "Pick"
 msgstr "Снять"
 
-#: ../src/widgets/toolbox.cpp:4837
+#: ../src/widgets/toolbox.cpp:4855
 msgid "Assign opacity"
 msgstr "Назначить непрозрачность"
 
-#: ../src/widgets/toolbox.cpp:4838
+#: ../src/widgets/toolbox.cpp:4856
 msgid "If alpha was picked, assign it to selection as fill or stroke transparency"
 msgstr "Если полупрозрачность снята, назначать её заливке или обводке в выделении"
 
-#: ../src/widgets/toolbox.cpp:4841
+#: ../src/widgets/toolbox.cpp:4859
 msgid "Assign"
 msgstr "Назначить"
 
-#: ../src/widgets/toolbox.cpp:5092
+#: ../src/widgets/toolbox.cpp:5110
 msgid "All inactive"
 msgstr "Все неактивны"
 
-#: ../src/widgets/toolbox.cpp:5093
+#: ../src/widgets/toolbox.cpp:5111
 msgid "No geometric tool is active"
 msgstr "Ни один инструмент создания геометрических конструкций не выбран"
 
-#: ../src/widgets/toolbox.cpp:5094
+#: ../src/widgets/toolbox.cpp:5112
 msgid "all_inactive"
 msgstr "все_неактивны"
 
-#: ../src/widgets/toolbox.cpp:5126
+#: ../src/widgets/toolbox.cpp:5144
 msgid "Show limiting bounding box"
 msgstr "Показывать ограничивающую площадку (BB)"
 
-#: ../src/widgets/toolbox.cpp:5127
+#: ../src/widgets/toolbox.cpp:5145
 msgid "Show bounding box (used to cut infinite lines)"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5138
+#: ../src/widgets/toolbox.cpp:5156
 msgid "Get limiting bounding box from selection"
 msgstr "Делать ограничивающую площадку (BB) из выделения"
 
-#: ../src/widgets/toolbox.cpp:5139
+#: ../src/widgets/toolbox.cpp:5157
 msgid "Set limiting bounding box (used to cut infinite lines) to the bounding box of current selection"
 msgstr "Создание и редактирование масштабируемой векторной графики в формате SVG"
 
-#: ../src/widgets/toolbox.cpp:5151
+#: ../src/widgets/toolbox.cpp:5169
 msgid "Choose a line segment type"
 msgstr "Выберите тип сегмента линии"
 
-#: ../src/widgets/toolbox.cpp:5167
+#: ../src/widgets/toolbox.cpp:5185
 msgid "Display measuring info"
 msgstr "Показывать данные измерений"
 
-#: ../src/widgets/toolbox.cpp:5168
+#: ../src/widgets/toolbox.cpp:5186
 msgid "Display measuring info for selected items"
 msgstr ""
 
-#: ../src/widgets/toolbox.cpp:5188
+#: ../src/widgets/toolbox.cpp:5206
 msgid "Open LPE dialog"
 msgstr "Открыть диалог LPE"
 
-#: ../src/widgets/toolbox.cpp:5189
+#: ../src/widgets/toolbox.cpp:5207
 msgid "Open LPE dialog (to adapt parameters numerically)"
 msgstr "Открыть диалог динамических контурных эффектов для ручного ввода параметров"
 
-#: ../src/widgets/toolbox.cpp:5253
+#: ../src/widgets/toolbox.cpp:5271
 msgid "The width of the eraser pen (relative to the visible canvas area)"
 msgstr "Толщина пера ластика (относительно видимой области холста)"
 
-#: ../src/widgets/toolbox.cpp:5271
+#: ../src/widgets/toolbox.cpp:5289
 msgid "Delete objects touched by the eraser"
 msgstr "Удалять объекты, которых коснулся ластик"
 
-#: ../src/widgets/toolbox.cpp:5277
+#: ../src/widgets/toolbox.cpp:5295
 msgid "Cut"
 msgstr "Вырезать"
 
-#: ../src/widgets/toolbox.cpp:5278
+#: ../src/widgets/toolbox.cpp:5296
 msgid "Cut out from objects"
 msgstr "Вырезать из объектов"
 
-#: ../src/widgets/toolbox.cpp:5619
+#: ../src/widgets/toolbox.cpp:5637
 msgid "Text: Change font family"
 msgstr "Текст: сменить гарнитуру"
 
-#: ../src/widgets/toolbox.cpp:5708
+#: ../src/widgets/toolbox.cpp:5726
 msgid "Text: Change alignment"
 msgstr "Текст: сменить выключку"
 
-#: ../src/widgets/toolbox.cpp:5787
+#: ../src/widgets/toolbox.cpp:5805
 msgid "Text: Change font style"
 msgstr "Текст: сменить начертание"
 
-#: ../src/widgets/toolbox.cpp:5835
+#: ../src/widgets/toolbox.cpp:5853
 msgid "Text: Change orientation"
 msgstr "Текст: сменить ориентацию"
 
-#: ../src/widgets/toolbox.cpp:5938
+#: ../src/widgets/toolbox.cpp:5956
 msgid "Text: Change font size"
 msgstr "Текст: сменить кегль"
 
-#: ../src/widgets/toolbox.cpp:6173
+#: ../src/widgets/toolbox.cpp:6191
 msgid "This font is currently not installed on your system. Inkscape will use the default font instead."
 msgstr "Этот шрифт сейчас отсутствует в системе. Вместо него Inkscape использует шрифт по умолчанию."
 
-#: ../src/widgets/toolbox.cpp:6209
+#: ../src/widgets/toolbox.cpp:6227
 msgid "Align left"
 msgstr "Выключка влево"
 
-#: ../src/widgets/toolbox.cpp:6220
+#: ../src/widgets/toolbox.cpp:6238
 msgid "Center"
 msgstr "Выключка по центру"
 
-#: ../src/widgets/toolbox.cpp:6231
+#: ../src/widgets/toolbox.cpp:6249
 msgid "Align right"
 msgstr "Выключка вправо"
 
-#: ../src/widgets/toolbox.cpp:6242
+#: ../src/widgets/toolbox.cpp:6260
 msgid "Justify"
 msgstr "Выключка по ширине"
 
-#: ../src/widgets/toolbox.cpp:6257
+#: ../src/widgets/toolbox.cpp:6275
 msgid "Bold"
 msgstr "Полужирное"
 
-#: ../src/widgets/toolbox.cpp:6268
+#: ../src/widgets/toolbox.cpp:6286
 msgid "Italic"
 msgstr "Наклонное"
 
-#: ../src/widgets/toolbox.cpp:6401
+#: ../src/widgets/toolbox.cpp:6419
 msgid "Change connector spacing"
 msgstr "Смена интервала соед. линии"
 
-#: ../src/widgets/toolbox.cpp:6484
+#: ../src/widgets/toolbox.cpp:6502
 msgid "Avoid"
 msgstr "Избегать"
 
-#: ../src/widgets/toolbox.cpp:6494
+#: ../src/widgets/toolbox.cpp:6512
 msgid "Ignore"
 msgstr "Игнорировать"
 
-#: ../src/widgets/toolbox.cpp:6506
+#: ../src/widgets/toolbox.cpp:6524
 msgid "Connector Spacing"
 msgstr "Интервал линии соединения"
 
-#: ../src/widgets/toolbox.cpp:6506
+#: ../src/widgets/toolbox.cpp:6524
 msgid "Spacing:"
 msgstr "Интервал:"
 
-#: ../src/widgets/toolbox.cpp:6507
+#: ../src/widgets/toolbox.cpp:6525
 msgid "The amount of space left around objects by auto-routing connectors"
 msgstr "Оставшееся пространство вокруг объектов при автосоединении"
 
-#: ../src/widgets/toolbox.cpp:6518
+#: ../src/widgets/toolbox.cpp:6536
 msgid "Graph"
 msgstr "Граф"
 
-#: ../src/widgets/toolbox.cpp:6528
+#: ../src/widgets/toolbox.cpp:6546
 msgid "Connector Length"
 msgstr "Длина линии соединения"
 
-#: ../src/widgets/toolbox.cpp:6528
+#: ../src/widgets/toolbox.cpp:6546
 msgid "Length:"
 msgstr "Длина:"
 
-#: ../src/widgets/toolbox.cpp:6529
+#: ../src/widgets/toolbox.cpp:6547
 msgid "Ideal length for connectors when layout is applied"
 msgstr "Идеальная длина при использовании оптимизации внешнего вида линий соединения"
 
-#: ../src/widgets/toolbox.cpp:6541
+#: ../src/widgets/toolbox.cpp:6559
 msgid "Downwards"
 msgstr "Вниз"
 
-#: ../src/widgets/toolbox.cpp:6542
+#: ../src/widgets/toolbox.cpp:6560
 msgid "Make connectors with end-markers (arrows) point downwards"
 msgstr "Линии соединения со стрелками указывают вниз"
 
-#: ../src/widgets/toolbox.cpp:6557
+#: ../src/widgets/toolbox.cpp:6575
 msgid "Do not allow overlapping shapes"
 msgstr "Не допускать перекрытия фигур"
 
-#: ../src/widgets/toolbox.cpp:6660
+#: ../src/widgets/toolbox.cpp:6678
 msgid "Fill by"
 msgstr "Чем залить"
 
-#: ../src/widgets/toolbox.cpp:6661
+#: ../src/widgets/toolbox.cpp:6679
 msgid "Fill by:"
 msgstr "Чем залить:"
 
-#: ../src/widgets/toolbox.cpp:6673
+#: ../src/widgets/toolbox.cpp:6691
 msgid "Fill Threshold"
 msgstr "Порог заливки"
 
-#: ../src/widgets/toolbox.cpp:6674
+#: ../src/widgets/toolbox.cpp:6692
 msgid "The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"
 msgstr "Максимально допустимая разница между щелкнутым пикселом и соседними пикселами, попадающими в заливку"
 
-#: ../src/widgets/toolbox.cpp:6699
+#: ../src/widgets/toolbox.cpp:6717
 msgid "Grow/shrink by"
 msgstr "Увеличить/уменьшить на"
 
-#: ../src/widgets/toolbox.cpp:6699
+#: ../src/widgets/toolbox.cpp:6717
 msgid "Grow/shrink by:"
 msgstr "Увеличить/уменьшить на:"
 
-#: ../src/widgets/toolbox.cpp:6700
+#: ../src/widgets/toolbox.cpp:6718
 msgid "The amount to grow (positive) or shrink (negative) the created fill path"
 msgstr "Насколько увеличить (положительное число) или уменьшить (отрицательное число) создаваемый контур с заливкой"
 
-#: ../src/widgets/toolbox.cpp:6725
+#: ../src/widgets/toolbox.cpp:6743
 msgid "Close gaps"
 msgstr "Закрыть интервалы"
 
-#: ../src/widgets/toolbox.cpp:6726
+#: ../src/widgets/toolbox.cpp:6744
 msgid "Close gaps:"
 msgstr "Закрыть интервалы:"
 
-#: ../src/widgets/toolbox.cpp:6738
+#: ../src/widgets/toolbox.cpp:6756
 msgid "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
 msgstr "Сбросить параметры заливки к значениям по умолчанию (параметры по умолчанию можно изменить через диалог настройки Inkscape)"
 
@@ -17722,9 +17742,8 @@ msgid "Custom Points and Options"
 msgstr "Заказные точки и параметры"
 
 #: ../share/extensions/draw_from_triangle.inx.h:10
-#, fuzzy
 msgid "Draw Circle About This Point"
-msgstr "Ð\9eкÑ\80Ñ\83жноÑ\81Ñ\82Ñ\8c Ñ\87еÑ\80ез Ñ\82Ñ\80и точки"
+msgstr "Ð\9dаÑ\80иÑ\81оваÑ\82Ñ\8c Ð¾ÐºÑ\80Ñ\83жноÑ\81Ñ\82Ñ\8c Ð²Ð¾ÐºÑ\80Ñ\83г Ñ\8dÑ\82ой точки"
 
 #: ../share/extensions/draw_from_triangle.inx.h:11
 msgid "Draw From Triangle"
@@ -18023,19 +18042,18 @@ msgid "Multiply X range by 2*pi"
 msgstr "Умножить диапазон X на 2*pi"
 
 #: ../share/extensions/funcplot.inx.h:10
+msgid "Number of samples"
+msgstr "Количество шагов:"
+
+#: ../share/extensions/funcplot.inx.h:11
 msgid "Range and sampling"
 msgstr "Диапазон и выборка"
 
-#: ../share/extensions/funcplot.inx.h:11
+#: ../share/extensions/funcplot.inx.h:12
 msgid "Remove rectangle"
 msgstr "Удалить прямоугольник"
 
-#: ../share/extensions/funcplot.inx.h:13
-msgid "Samples"
-msgstr "Примеры"
-
 #: ../share/extensions/funcplot.inx.h:14
-#, fuzzy
 msgid "Select a rectangle before calling the extension, it will determine X and Y scales. With polar coordinates: Start and end X values define the angle range in radians. X scale is set so that left and right edges of rectangle are at +/-1. Isotropic scaling is disabled. First derivative is always determined numerically."
 msgstr "Перед вызовом эффекта выделите прямоугольник, который определит масштаб по X и Y. С полярными координатами: значения по X для начала и конца определяют диапазон угла в радианах. Масштаб X установлен так, что левые и правые края прямоугольника находятся в +/-1. Изотропное масштабирование отключено. Первое производное всегда задается числами."
 
@@ -18044,9 +18062,8 @@ msgid "Standard Python math functions are available: ceil(x); fabs(x); floor(x);
 msgstr "Возможно  использование следующих типовых математических функций Python: 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). Также возможно использование констант pi и e."
 
 #: ../share/extensions/funcplot.inx.h:16
-#, fuzzy
 msgid "Start X value"
-msgstr "Начальное значение по оси X"
+msgstr "Начальное значение по оси X:"
 
 #: ../share/extensions/funcplot.inx.h:17
 msgid "Use"
@@ -18057,14 +18074,12 @@ msgid "Use polar coordinates"
 msgstr "Использовать полярные координаты"
 
 #: ../share/extensions/funcplot.inx.h:19
-#, fuzzy
 msgid "Y value of rectangle's bottom"
-msgstr "Координата низа прямоугольника по оси Y"
+msgstr "Координата низа прямоугольника по оси Y:"
 
 #: ../share/extensions/funcplot.inx.h:20
-#, fuzzy
 msgid "Y value of rectangle's top"
-msgstr "Координата верха прямоугольника по оси Y"
+msgstr "Координата верха прямоугольника по оси Y:"
 
 #: ../share/extensions/gears.inx.h:1
 msgid "Circular pitch, px"
@@ -19145,6 +19160,8 @@ msgstr "Импорт файлов Windows Metafile"
 msgid "XAML Input"
 msgstr "Импорт XAML"
 
+#~ msgid "Samples"
+#~ msgstr "Примеры"
 #~ msgid "Embed fonts on export (Type 1 only) (EPS)"
 #~ msgstr "Встроить шрифтовый файл (только Type 1) при экспорте (EPS)"
 #~ msgid "Export files with the bounding box set to the page size (EPS)"
index f8f1dd53be98f720342dfe27c0253cff1418a1f7..ec42d761f56be6b40718228bf6c91f3541a11dbd 100644 (file)
@@ -1,6 +1,7 @@
 SUBDIRS = clipart \
           examples \
           extensions \
+          filters \
           fonts \
           gradients \
           icons \
index 0dd74cf4965013e3c8a841fdfc06a7e39fa8d7ce..97ebf34d07f18a051bfac8040fcdf1eb7eff73a6 100644 (file)
@@ -1,5 +1,2 @@
-This new folder is part of the Inkscape 0.38 directory reorganization. Please place the appropriate files into this folder.
-
-Thank You!
-
-Inkscape Developers
+This is the root dir for Inkscape's resources that it loads at runtime: 
+icons, markers, filters, keyboard maps, etc.
\ No newline at end of file
diff --git a/share/extensions/Inkscape.pm b/share/extensions/Inkscape.pm
new file mode 100644 (file)
index 0000000..b87762c
--- /dev/null
@@ -0,0 +1,260 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+=head1 NAME
+
+Inkscape - a helper for Inkscape extensions writen in PERL
+
+=head1 SYNOPSIS
+
+    use Inkscape;
+    my ($w, $h) = $inkscape->getCanvasSize;
+    $svg->setElAttribute {tag=>'svg',pos=>0}, 'width', $w * 2;
+
+=head1 DESCRIPTION
+
+This package try to do the common initial work in inkscape extensions
+and provide a collection of helper methods about inkscape interaction
+and SVG basic manipulation.
+
+If you want more power to SVG manipulation, try use SVG::DOM together.
+http://search.cpan.org/~ronan/SVG-2.44/lib/SVG/DOM.pm
+
+=cut
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                           Inkscape Package                                #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+{
+package Inkscape;
+our $VERSION = "0.01";
+
+=head2 The %args hash
+
+The B<%args> hash gives to you all arguments provided by Inkscape.
+
+    $svg->setElAttribute 'svg', 'width', $w * $args{zoom};
+
+The B<id> will allways be an array reference. Also if it is empty.
+
+=cut
+
+#use vars qw($VERSION $inkscape %args @ISA @EXPORT %EXPORT_TAGS $TODO);
+#require Exporter;
+#@ISA = qw(Exporter);
+#my $inkscape = Inkscape->new;
+#@EXPORT = qw( $inkscape );
+
+sub import {
+  if ( defined $_[1] && $_[1] eq 'AUTO_LOAD' ) {
+    #$inkscape->getArgs(@ARGV);
+    if ( $#ARGV > -1 && -f $ARGV[$#ARGV] ) {
+      #$inkscape->getSVG($ARGV[$#ARGV]);
+    }
+  }
+}
+
+sub getArgs {
+  my $self = shift;
+  my @argv = @_;
+  @argv = @ARGV if ( $#argv == -1 );
+  my %args = (id => []);
+  foreach ( @argv ) {
+    if ( m/^--([^=]+)=(.*)$/ ) {
+      my $key = $1;
+      my $val = $2;
+      $val = 1 if $val eq 'true';
+      $val = 0 if $val eq 'false';
+      if ( defined $args{$key} ) {
+        if ( ref($args{$key}) ne 'ARRAY' ) {
+          $args{$key} = [ $args{$key} ];
+        }
+        push( @{$args{$key}}, $val );
+      } else {
+        $args{$key} = $val;
+      }
+    }
+  }
+  %args;
+}
+
+sub getSVG{
+  my $self = shift;
+  my $file = shift;
+  SVGHelper->new( $file );
+}
+
+=head2 Inkscape Methods
+
+The $inkscape auto defined object is a helper to use non interactive
+inkscape interface. You allways need to provide an SVG file path to
+the methods.
+
+=cut
+
+my $singleton;
+sub new {
+  my $class = shift;
+  my $self  = {};
+  #$self->{args} = ( id => [] );
+  $singleton ||= bless $self, $class;
+}
+
+} # end package Inkscape
+
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+#                            SVG Package                                    #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+{
+package SVGHelper;
+our $VERSION = "0.01";
+
+=head2 SVGHelper Methods
+
+The $svg auto defined object is a helper to access the SVG file provided
+by the Inkscape. That is not a singleton, so if you want manipulate other
+SVG files, you can instanciate a new SVGHelper.
+
+=head3 new
+
+    my $mysvg = SVGHelper->new( '/path/to/my.svg' );
+
+Instantiates SVGHelper with a SVG file.
+
+=cut
+
+sub new {
+  my ( $class, $file ) = @_;
+  my $self  = {};
+  $file = $ARGV[$#ARGV] if ( ! $file );
+  open SVG, $file or die "Can't open \"$file\": $!\n";
+  $self->{file} = $file;
+  $self->{code} = join('',<SVG>);
+  close SVG;
+  bless $self, $class;
+}
+
+=head3 generateSearchRegExp
+
+    if ( $svg->{code} =~ m/$svg->generateSearchRegExp({class=>"hot"})/ )
+      print "Yes! there are Hot elements!"
+
+Generates the regexp string to localize tags in the SVG, based in the arguments
+on the localizator hash.
+
+Arguments to localize the tags:
+    B<{id}> = "<some tag id>"
+        Select only one tag with this id. You don't need to use other select
+        arguments with this one.
+    B<{pos}> = <number>
+        When you use inprecise arguments for selection the position will select
+        only one tag in the defined position at the finded list of tags.
+    B<{tag}> = "<tag_name>"
+        Select by tag name, may select a list if you don't use {pos}.
+    B<{>B<<any tag attribute>>B<}> = <a valid attribute value>
+        Select by
+
+=cut
+
+sub generateSearchRegExp {
+  # '.*' in a value will break all. we must change '.' by '[^"]'
+  
+}
+
+=head3 setElAttribute
+
+    # Setting an atribute in a tag localizated it's id:
+    $svg->setElAttribute {id=>'myDrawing'}, 'width', $w * 2;
+    # Setting an atribute in a tag localizated it's position:
+    $svg->setElAttribute {tag=>'svg',pos=>0}, 'width', $w * 2;
+    # Setting an atribute in some tags localizated by atributes:
+    $svg->setElAttribute {tag=>'circle',r=>10}, 'r', 50;
+
+This method will set an atribute in a tag or in a colection of tags, selected
+by the localizator hash.
+
+=cut
+
+sub setElAttribute {
+  my $self = shift;
+  my ( $searchArgs, $att, $val ) = @_;
+  print $self->generateSearchRegExp( $searchArgs );
+}
+
+sub convertUnit {
+  my $self = shift;
+  $_[0] =~ m/^([.0-9]*)\s*([^ ]*)/;
+  my $num = $1;
+  my $unFrom = $2 || 'px';
+  my $unTo = $_[1];
+  my $appendUnit = $_[2];
+  # From http://www.w3.org/TR/SVG/coords.html#Units
+  # "1pt" equals "1.25px" (and therefore 1.25 user units)
+  # "1pc" equals "15px" (and therefore 15 user units)
+  # "1mm" would be "3.543307px" (3.543307 user units)
+  # "1cm" equals "35.43307px" (and therefore 35.43307 user units)
+  # "1in" equals "90px" (and therefore 90 user units)
+  my %equivPX = (
+        px => 1,
+        pt => 1.25,
+        pc => 15,
+        mm => 3.543307,
+        cm => 35.43307,
+        in => 90
+      );
+  ( ( $num * $equivPX{$unFrom} ) / $equivPX{$unTo} ) . ( $appendUnit ? $unTo : '' );
+}
+
+=head3 getCanvasSize
+
+    my ($w, $h) = $svg->getCanvasSize;
+
+Get the B<width> and B<height> values of the B<<svg>> tag.
+
+=cut
+
+sub getCanvasSize {
+  my $self = shift;
+  my $unitTo = $_[0];
+  $self->{code} =~ m/<svg\s[^>]*width="([^"]*)"[^>]*height="([^"]*)"[^>]*>/;
+  my ( $w, $h ) =
+       ( $unitTo ) ?
+       ( $self->convertUnit($1, $unitTo), $self->convertUnit($2, $unitTo) ) :
+       ( $1, $2 );
+}
+
+my $sysNULL = ( -e '/dev/null' )? '/dev/null' : 'NIL';
+
+sub getElPosition {
+  my $self = shift;
+  my $x = `inkscape --query-id=$_[0] --query-x "$self->{file}" 2>$sysNULL`;
+  my $y = `inkscape --query-id=$_[0] --query-y "$self->{file}" 2>$sysNULL`;
+  return ( $x )? ( $x, $y ) : undef;
+}
+
+sub getElSize {
+  my $self = shift;
+  my $w = `inkscape --query-id=$_[0] --query-width  "$self->{file}" 2>$sysNULL`;
+  my $h = `inkscape --query-id=$_[0] --query-height "$self->{file}" 2>$sysNULL`;
+  return ( $w )? ( $w, $h ) : undef;
+}
+
+} # end package SVGHelper
+
+=head1 AUTHOR
+
+Aurelio A. Heckert <aurium@gmail.com>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2008 Aurelio A. Heckert <aurium@gmail.com>
+
+This PERL module is a free software licenced under LGPL v3
+http://www.gnu.org/licenses/lgpl-3.0-standalone.html
+
+=cut
+
+1;
index 3dd64b6a942a931e02c93251522915435376a1a4..dd92eb24ca59fa9662d95080d14a80378d41abab 100644 (file)
@@ -38,6 +38,7 @@ extensions = \
        color_replace.py\
        cspsubdiv.py \
        cubicsuperpath.py \
+       cut-marks.pl \
        dia2svg.sh \
        dimension.py \
        dots.py \
@@ -63,6 +64,7 @@ extensions = \
        hpgl_output.py \
        ill2svg.pl \
        inkex.py \
+       Inkscape.pm \
        interp.py \
        launch_webbrowser.py \
        lindenmayer.py \
@@ -147,6 +149,7 @@ modules = \
        color_removered.inx\
        color_rgbbarrel.inx\
        color_replace.inx\
+       cut-marks.inx \
        dia.inx \
        dimension.inx \
        dots.inx \
diff --git a/share/extensions/cut-marks.inx b/share/extensions/cut-marks.inx
new file mode 100644 (file)
index 0000000..1f05ae6
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">\r
+       <_name>Add Cut Marks</_name>\r
+       <id>org.inkscape.printing.addcutmarks</id>\r
+
+  <param name="use-rect" type="boolean" _gui-text="Use the selected rect to define the margin"></param>
+
+  <param name="sep" type="description">•••••••••••••••••••••••••••••••••••••••••••••</param>
+
+  <_param name="info1" type="description">The fields above are needed only if you don't use a rect:</_param>
+
+  <param name="unit" type="enum" _gui-text="Measurement unit:">
+    <item>cm</item>
+    <item>mm</item>
+    <item>in</item>
+    <item>px</item>
+  </param>
+  <param name="margin-r" type="float" min="0.0" _gui-text="Margin right">1.0</param>
+  <param name="margin-l" type="float" min="0.0" _gui-text="Margin left">1.0</param>
+  <param name="margin-t" type="float" min="0.0" _gui-text="Margin top">1.0</param>
+  <param name="margin-b" type="float" min="0.0" _gui-text="Margin bottom">1.5</param>
+
+       <effect>\r
+               <object-type>all</object-type>\r
+               <effects-menu>\r
+                       <submenu _name="Printing"/>\r
+               </effects-menu>\r
+       </effect>\r
+
+       <script>\r
+               <command reldir="extensions" interpreter="perl">cut-marks.pl</command>\r
+       </script>\r
+
+</inkscape-extension>
diff --git a/share/extensions/cut-marks.pl b/share/extensions/cut-marks.pl
new file mode 100644 (file)
index 0000000..dba846d
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/perl
+
+BEGIN {
+  # adding the inkscape extension dir in the include path list.
+  my $path = `inkscape -x`;
+  $path =~ s/\r?\n//;
+  push @INC, $path;
+}
+
+use strict;
+
+use Inkscape;
+my $inkscape = Inkscape->new;
+
+my %args = $inkscape->getArgs();
+my $svg = $inkscape->getSVG();
+
+my $unit = $args{unit};
+my $ml = $svg->convertUnit( $args{'margin-r'}.$unit, 'px' );
+my $mr = $svg->convertUnit( $args{'margin-l'}.$unit, 'px' );
+my $mt = $svg->convertUnit( $args{'margin-t'}.$unit, 'px' );
+my $mb = $svg->convertUnit( $args{'margin-b'}.$unit, 'px' );
+
+my ( $cw, $ch ) = $svg->getCanvasSize( 'px' );
+
+if ( $args{'use-rect'} ) {
+  if ( ! $args{id}[0] ) {
+    warn "You asked to use a rect to define the margin, but you didn\'t select an element.\n";
+    exit 1;
+  }
+  $unit = '';
+  my ( $x, $y ) = $svg->getElPosition( $args{id}[0] );
+  my ( $w, $h ) = $svg->getElSize( $args{id}[0] );
+  $mr = $x;
+  $ml = $cw - ( $x + $w );
+  $mt = $y;
+  $mb = $ch - ( $y + $h );
+}
+
+# Positions for the cut lines:
+my $cutR = $mr;
+my $cutL = $cw - $ml;
+my $cutT = $mt;
+my $cutB = $ch - $mb;
+
+# Printing test attributes:
+my $ptaCX = $cw - ( $ml / 2 );
+my $ptaCY = $ch / 4;
+my $ptaR = $ml / 2.5;
+$ptaR = $cw / 50  if ( ($cw / 50) < $ptaR );
+my $ptaBoxW = $ptaR / 1.5;
+
+my $theX = 'M '.($ptaCX-$ptaR).','.$ptaCY.' L '.($ptaCX+$ptaR).','.$ptaCY.
+           'M '.$ptaCX.','.($ptaCY-$ptaR).' L '.$ptaCX.','.($ptaCY+$ptaR);
+
+sub generateGradientTest {
+  my ( $color, $x, $y ) = @_;
+  my $boxes = '';
+  for ( my $i=0; $i<10; $i++ ) {
+    $boxes .= '<rect
+    fill="'.$color.'" fill-opacity="'.(1/($i+1)).'"
+    stroke="'.$color.'" stroke-width="0.5"
+    x="'.$x.'" y="'.($y+($ptaBoxW*$i)).'"
+    width="'.$ptaBoxW.'" height="'.$ptaBoxW.'" />';
+  }
+  return $boxes;
+}
+
+my $gradBoxes =
+     generateGradientTest( "#000", $ptaCX-$ptaBoxW-1, $ptaCY+$ptaR+10 ) .
+     generateGradientTest( "#FF0", $ptaCX+1, $ptaCY+$ptaR+10 ) .
+     generateGradientTest( "#0FF", $ptaCX-$ptaBoxW-1, $ptaCY+$ptaR+12+($ptaBoxW*10) ) .
+     generateGradientTest( "#F0F", $ptaCX+1, $ptaCY+$ptaR+12+($ptaBoxW*10) );
+
+my $marks = <<END_XML ;
+  <g
+     inkscape:groupmode="layer"
+     inkscape:label="Cut Marks"
+     sodipodi:insensitive="true"
+     style="display:inline">
+    <path fill="none" stroke="#000" stroke-width="0.5" d="
+      M $cutR,0 L $cutR,$cutT M $cutR,$cutB L $cutR,$ch
+      M $cutL,0 L $cutL,$cutT M $cutL,$cutB L $cutL,$ch
+      M 0,$cutT L $cutR,$cutT M $cutL,$cutT L $cw,$cutT
+      M 0,$cutB L $cutR,$cutB M $cutL,$cutB L $cw,$cutB
+      " />
+    <circle class="test-print-align"
+      fill="none" stroke="#000" stroke-width="0.5"
+      r="$ptaR" cx="$ptaCX" cy="$ptaCY" />
+    <path class="test-print-align"
+      fill="none" stroke="#000" stroke-width="0.5" d="$theX" />
+    $gradBoxes
+  </g>
+END_XML
+
+$svg->{code} =~ s!</svg>!$marks</svg>!g;
+
+print $svg->{code};
index 8a37eff618e24fa13b182870d1a96e8a61e4e584..677e9f0bdda4848e148c3a68b7ac6caaa12b5b79 100644 (file)
@@ -1,17 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
-    <_name>DXF Input</_name>
-    <id>org.inkscape.input.dxf</id>
-    <dependency type="executable" _description="dxf2svg may come with Inkscape, but is also at http://dxf-svg-convert.sourceforge.net/">dxf2svg</dependency>
-    <dependency type="extension">org.inkscape.input.svg</dependency>
-    <input>
-        <extension>.dxf</extension>
-        <mimetype>image/x-svgz</mimetype>
-        <_filetypename>AutoCAD DXF (*.dxf)</_filetypename>
-        <_filetypetooltip>Import AutoCAD's Document Exchange Format</_filetypetooltip>
-        <output_extension>org.inkscape.output.svg</output_extension>
-    </input>
-    <script>
-        <command reldir="path">dxf2svg</command>
-    </script>
+       <_name>DXF Input</_name>
+       <id>org.inkscape.input.dxf</id>
+       <dependency type="executable" location="extensions">dxf_input.py</dependency>
+       <dependency type="executable" location="extensions">inkex.py</dependency>
+       <input>
+               <extension>.dxf</extension>
+               <mimetype>image/x-svgz</mimetype>
+               <_filetypename>AutoCAD DXF (*.dxf)</_filetypename>
+               <_filetypetooltip>Import AutoCAD's Document Exchange Format</_filetypetooltip>
+       </input>
+       <script>
+               <command reldir="extensions" interpreter="python">dxf_input.py</command>
+       </script>
 </inkscape-extension>
diff --git a/share/extensions/dxf_input.py b/share/extensions/dxf_input.py
new file mode 100644 (file)
index 0000000..7114d34
--- /dev/null
@@ -0,0 +1,198 @@
+#!/usr/bin/env python\r
+'''\r
+dxf_input.py - input a DXF file >= (AutoCAD Release 13 == AC1012)\r
+\r
+Copyright (C) 2008 Alvin Penner, penner@vaxxine.com\r
+\r
+This program is free software; you can redistribute it and/or modify\r
+it under the terms of the GNU General Public License as published by\r
+the Free Software Foundation; either version 2 of the License, or\r
+(at your option) any later version.\r
+\r
+This program is distributed in the hope that it will be useful,\r
+but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+GNU General Public License for more details.\r
+\r
+You should have received a copy of the GNU General Public License\r
+along with this program; if not, write to the Free Software\r
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+'''\r
+\r
+import inkex, simplestyle, math\r
+from StringIO import StringIO\r
+\r
+def export_MTEXT():\r
+    # mandatory group codes : (1, 10, 20) (text, x, y)\r
+    if vals[groups['1']] and vals[groups['10']] and vals[groups['20']]:\r
+        x = vals[groups['10']][0]\r
+        y = vals[groups['20']][0]\r
+        # optional group codes : (40, 50) (text height mm, text angle)\r
+        size = 12                       # default fontsize in px\r
+        if vals[groups['40']]:\r
+            size = scale*vals[groups['40']][0]\r
+        attribs = {'x': '%f' % x, 'y': '%f' % y, 'style': 'font-size: %dpx' % size}\r
+        angle = 0                       # default angle in degrees\r
+        if vals[groups['50']]:\r
+            angle = vals[groups['50']][0]\r
+            attribs.update({'transform': 'rotate (%f %f %f)' % (-angle, x, y)})\r
+        node = inkex.etree.SubElement(doc.getroot(), 'text', attribs)\r
+        node.text = vals[groups['1']][0]\r
+\r
+def export_POINT():\r
+    # mandatory group codes : (10, 20) (x, y)\r
+    if vals[groups['10']] and vals[groups['20']]:\r
+        generate_ellipse(vals[groups['10']][0], vals[groups['20']][0], w/2, 0.0, 1.0, 0.0, 0.0)\r
+\r
+def export_LINE():\r
+    # mandatory group codes : (10, 11, 20, 21) (x1, x2, y1, y2)\r
+    if vals[groups['10']] and vals[groups['11']] and vals[groups['20']] and vals[groups['21']]:\r
+        path = 'M %f,%f %f,%f' % (vals[groups['10']][0], vals[groups['20']][0], scale*vals[groups['11']][0], height - scale*vals[groups['21']][0])\r
+        attribs = {'d': path, 'style': style}\r
+        inkex.etree.SubElement(doc.getroot(), 'path', attribs)\r
+\r
+def export_SPLINE():\r
+    # mandatory group codes : (10, 20, 70) (x, y, flags)\r
+    if vals[groups['10']] and vals[groups['20']] and vals[groups['70']]:\r
+        if vals[groups['70']][0] == 8 and len(vals[groups['10']]) == 4 and len(vals[groups['20']]) == 4:\r
+            path = 'M %f,%f C %f,%f %f,%f %f,%f' % (vals[groups['10']][0], vals[groups['20']][0], vals[groups['10']][1], vals[groups['20']][1], vals[groups['10']][2], vals[groups['20']][2], vals[groups['10']][3], vals[groups['20']][3])\r
+            attribs = {'d': path, 'style': style}\r
+            inkex.etree.SubElement(doc.getroot(), 'path', attribs)\r
+\r
+def export_CIRCLE():\r
+    # mandatory group codes : (10, 20, 40) (x, y, radius)\r
+    if vals[groups['10']] and vals[groups['20']] and vals[groups['40']]:\r
+        generate_ellipse(vals[groups['10']][0], vals[groups['20']][0], scale*vals[groups['40']][0], 0.0, 1.0, 0.0, 0.0)\r
+\r
+def export_ARC():\r
+    # mandatory group codes : (10, 20, 40, 50, 51) (x, y, radius, angle1, angle2)\r
+    if vals[groups['10']] and vals[groups['20']] and vals[groups['40']] and vals[groups['50']] and vals[groups['51']]:\r
+        generate_ellipse(vals[groups['10']][0], vals[groups['20']][0], scale*vals[groups['40']][0], 0.0, 1.0, vals[groups['50']][0]*math.pi/180.0, vals[groups['51']][0]*math.pi/180.0)\r
+\r
+def export_ELLIPSE():\r
+    # mandatory group codes : (10, 11, 20, 21, 40, 41, 42) (xc, xm, yc, ym, width ratio, angle1, angle2)\r
+    if vals[groups['10']] and vals[groups['11']] and vals[groups['20']] and vals[groups['21']] and vals[groups['40']] and vals[groups['41']] and vals[groups['42']]:\r
+        generate_ellipse(vals[groups['10']][0], vals[groups['20']][0], scale*vals[groups['11']][0], scale*vals[groups['21']][0], vals[groups['40']][0], vals[groups['41']][0], vals[groups['42']][0])\r
+\r
+def export_LEADER():\r
+    # mandatory group codes : (10, 20) (x, y)\r
+    if vals[groups['10']] and vals[groups['20']]:\r
+        if len(vals[groups['10']]) > 1 and len(vals[groups['20']]) == len(vals[groups['10']]):\r
+            path = 'M %f,%f' % (vals[groups['10']][0], vals[groups['20']][0])\r
+            for i in range (1, len(vals[groups['10']])):\r
+                path += ' %f,%f' % (vals[groups['10']][i], vals[groups['20']][i])\r
+            attribs = {'d': path, 'style': style}\r
+            inkex.etree.SubElement(doc.getroot(), 'path', attribs)\r
+\r
+def export_LWPOLYLINE():\r
+    # mandatory group codes : (10, 20, 70) (x, y, flags)\r
+    if vals[groups['10']] and vals[groups['20']] and vals[groups['70']]:\r
+        if len(vals[groups['10']]) > 1 and len(vals[groups['20']]) == len(vals[groups['10']]):\r
+            # optional group codes : (42) (bulge)\r
+            iseqs = 0\r
+            ibulge = 0\r
+            while seqs[iseqs] != '20':\r
+                iseqs += 1\r
+            path = 'M %f,%f' % (vals[groups['10']][0], vals[groups['20']][0])\r
+            xold = vals[groups['10']][0]\r
+            yold = vals[groups['20']][0]\r
+            for i in range (1, len(vals[groups['10']])):\r
+                bulge = 0\r
+                iseqs += 1\r
+                while seqs[iseqs] != '20':\r
+                    if seqs[iseqs] == '42':\r
+                        bulge = vals[groups['42']][ibulge]\r
+                        ibulge += 1\r
+                    iseqs += 1\r
+                if bulge:\r
+                    sweep = 0                   # sweep CCW\r
+                    if bulge < 0:\r
+                        sweep = 1               # sweep CW\r
+                        bulge = -bulge\r
+                    large = 0                   # large-arc-flag\r
+                    if bulge > 1:\r
+                        large = 1\r
+                    r = math.sqrt((vals[groups['10']][i] - xold)**2 + (vals[groups['20']][i] - yold)**2)\r
+                    r = 0.25*r*(bulge + 1.0/bulge)\r
+                    path += ' A %f,%f 0.0 %d %d %f,%f' % (r, r, large, sweep, vals[groups['10']][i], vals[groups['20']][i])\r
+                else:\r
+                    path += ' L %f,%f' % (vals[groups['10']][i], vals[groups['20']][i])\r
+                xold = vals[groups['10']][i]\r
+                yold = vals[groups['20']][i]\r
+            if vals[groups['70']][0] == 1:      # closed path\r
+                path += ' z'\r
+            attribs = {'d': path, 'style': style}\r
+            inkex.etree.SubElement(doc.getroot(), 'path', attribs)\r
+\r
+def generate_ellipse(xc, yc, xm, ym, w, a1, a2):\r
+    rm = math.sqrt(xm*xm + ym*ym)\r
+    a = math.atan(ym/xm)\r
+    if xm < 0:\r
+        a += math.pi\r
+    diff = (a2 - a1 + 2*math.pi) % (2*math.pi)\r
+    if diff:                        # open arc\r
+        large = 0                   # large-arc-flag\r
+        if diff > math.pi:\r
+            large = 1\r
+        xt = rm*math.cos(a1)\r
+        yt = w*rm*math.sin(a1)\r
+        x1 = xt*math.cos(a) - yt*math.sin(a)\r
+        y1 = xt*math.sin(a) + yt*math.cos(a)\r
+        xt = rm*math.cos(a2)\r
+        yt = w*rm*math.sin(a2)\r
+        x2 = xt*math.cos(a) - yt*math.sin(a)\r
+        y2 = xt*math.sin(a) + yt*math.cos(a)\r
+        path = 'M %f,%f A %f,%f %f %d 0 %f,%f' % (xc+x1, yc-y1, rm, w*rm, -180.0*a/math.pi, large, xc+x2, yc-y2)\r
+    else:                           # closed arc\r
+        path = 'M %f,%f A %f,%f %f 1 0 %f,%f %f,%f %f 1 0 %f,%f z' % (xc+xm, yc-ym, rm, w*rm, -180.0*a/math.pi, xc-xm, yc+ym, rm, w*rm, -180.0*a/math.pi, xc+xm, yc-ym)\r
+    attribs = {'d': path, 'style': style}\r
+    inkex.etree.SubElement(doc.getroot(), 'path', attribs)\r
+\r
+def get_line():\r
+    return (stream.readline().strip(), stream.readline().strip())\r
+\r
+#   define DXF Entities and specify which Group Codes to monitor\r
+\r
+entities = {'MTEXT': export_MTEXT, 'POINT': export_POINT, 'LINE': export_LINE, 'SPLINE': export_SPLINE, 'CIRCLE': export_CIRCLE, 'ARC': export_ARC, 'ELLIPSE': export_ELLIPSE, 'LEADER': export_LEADER, 'LWPOLYLINE': export_LWPOLYLINE, 'ENDSEC': ''}\r
+groups = {'1': 0, '10': 1, '11': 2, '20': 3, '21': 4, '40': 5, '41': 6, '42': 7, '50': 8, '51': 9, '70': 10, '370': 11}\r
+scale = 90.0/25.4                                   # convert from mm to pixels\r
+height = 90.0*11.0                                  # 11 inch height in pixels\r
+entity = ''\r
+\r
+doc = inkex.etree.parse(StringIO('<svg></svg>'))\r
+stream = open(inkex.sys.argv[1], 'r')\r
+line = get_line()\r
+while line[0] and line[1] != 'ENTITIES':\r
+    line = get_line()\r
+\r
+while line[0] and line[1] != 'ENDSEC':\r
+    line = get_line()\r
+    if entity and groups.has_key(line[0]):\r
+        seqs.append(line[0])                        # list of group codes\r
+        if line[0] == '1':                          # text value\r
+            val = line[1].replace('\~', ' ')\r
+        elif line[0] == '70':                       # unscaled integer value\r
+            val = int(line[1])\r
+        elif line[0] == '10':                       # scaled float x value\r
+            val = scale*float(line[1])\r
+        elif line[0] == '20':                       # scaled float y value\r
+            val = height - scale*float(line[1])\r
+        else:                                       # unscaled float value\r
+            val = float(line[1])\r
+        vals[groups[line[0]]].append(val)\r
+    elif entities.has_key(line[1]):\r
+        if entities.has_key(entity):\r
+            style = simplestyle.formatStyle({'stroke': '#000000', 'fill': 'none'})\r
+            w = 0.5                                 # default lineweight for POINT\r
+            if vals[groups['370']]:                 # Common Lineweight\r
+                if vals[groups['370']][0] > 0:\r
+                    w = scale*vals[groups['370']][0]/100.0\r
+                    style = simplestyle.formatStyle({'stroke': '#000000', 'fill': 'none', 'stroke-width': '%.1f' % w})\r
+            entities[entity]()\r
+        entity = line[1]\r
+        vals = [[],[],[],[],[],[],[],[],[],[],[],[]]\r
+        seqs = []\r
+\r
+doc.write(inkex.sys.stdout)\r
+\r
+# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 encoding=utf-8 textwidth=99\r
index 568b8d80d480b80fe5f85d59a08f2f602e4d0a84..b2f6a0e96e19d1e2400ef510ffd98f6ffa29d726 100644 (file)
@@ -27,10 +27,10 @@ def parseTransform(transf,mat=[[1.0,0.0,0.0],[0.0,1.0,0.0]]):
     if transf=="" or transf==None:
         return(mat)
     stransf = transf.strip()
-    result=re.match("(translate|scale|rotate|skewX|skewY|matrix)\s*\(([^)]*)\)",stransf)
+    result=re.match("(translate|scale|rotate|skewX|skewY|matrix)\s*\(([^)]*)\)\s*,?",stransf)
 #-- translate --
     if result.group(1)=="translate":
-        args=result.group(2).replace(' ',',').split(",")
+        args=result.group(2).replace(',',' ').split()
         dx=float(args[0])
         if len(args)==1:
             dy=0.0
@@ -39,7 +39,7 @@ def parseTransform(transf,mat=[[1.0,0.0,0.0],[0.0,1.0,0.0]]):
         matrix=[[1,0,dx],[0,1,dy]]
 #-- scale --
     if result.group(1)=="scale":
-        args=result.group(2).replace(' ',',').split(",")
+        args=result.group(2).replace(',',' ').split()
         sx=float(args[0])
         if len(args)==1:
             sy=sx
@@ -48,7 +48,7 @@ def parseTransform(transf,mat=[[1.0,0.0,0.0],[0.0,1.0,0.0]]):
         matrix=[[sx,0,0],[0,sy,0]]
 #-- rotate --
     if result.group(1)=="rotate":
-        args=result.group(2).replace(' ',',').split(",")
+        args=result.group(2).replace(',',' ').split()
         a=float(args[0])*math.pi/180
         if len(args)==1:
             cx,cy=(0.0,0.0)
@@ -65,7 +65,7 @@ def parseTransform(transf,mat=[[1.0,0.0,0.0],[0.0,1.0,0.0]]):
         matrix=[[1,0,0],[math.tan(a),1,0]]
 #-- matrix --
     if result.group(1)=="matrix":
-        a11,a21,a12,a22,v1,v2=result.group(2).replace(' ',',').split(",")
+        a11,a21,a12,a22,v1,v2=result.group(2).replace(',',' ').split()
         matrix=[[float(a11),float(a12),float(v1)],[float(a21),float(a22),float(v2)]]
 
     matrix=composeTransform(mat,matrix)
diff --git a/share/filters/Makefile.am b/share/filters/Makefile.am
new file mode 100644 (file)
index 0000000..8da20a4
--- /dev/null
@@ -0,0 +1,8 @@
+
+filtersdir = $(datadir)/inkscape/filters
+
+filters_DATA =  \
+       README \
+       filters.svg 
+
+EXTRA_DIST = $(filters_DATA)
diff --git a/share/filters/README b/share/filters/README
new file mode 100644 (file)
index 0000000..727f080
--- /dev/null
@@ -0,0 +1,12 @@
+This directory is for the custom SVG filters.
+Inkscape loads filters from all SVG files here at runtime
+and makes them accessible via the Effects > Filters and its submenus.
+
+Each filter must have attributes:
+
+inkscape:label is the name in the menu
+inkscape:menu  is the submenu under Effects > Filters
+inkscape:menu-tooltip is the menu command's tooltip in the statusbar
+
+
+
diff --git a/share/filters/filters.svg b/share/filters/filters.svg
new file mode 100644 (file)
index 0000000..7105d66
--- /dev/null
@@ -0,0 +1,461 @@
+<?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: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" width="744.09003" height="2100" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.0">
+  <defs id="defs4">
+    <filter inkscape:label="Jelly Bean" id="filter2450" x="0" y="0" width="1" height="1"
+       inkscape:menu="Bevels" inkscape:menu-tooltip="Bulging, slightly glossy jelly bean"
+       >
+      <feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.85 0" result="result0" in="SourceGraphic" id="feColorMatrix2460"/>
+      <feGaussianBlur in="SourceAlpha" id="feGaussianBlur2452" stdDeviation="7.0222857142857134"/>
+      <feSpecularLighting surfaceScale="10" specularConstant="0.80000000000000004" specularExponent="7.971360381861575" id="feSpecularLighting2454">
+        <feDistantLight elevation="17" azimuth="225" id="feDistantLight2456"/>
+      </feSpecularLighting>
+      <feComposite operator="atop" in2="result0" id="feComposite2458"/>
+    </filter>
+    <filter id="filter2466" inkscape:label="Metal casting"  x="0" y="0" width="1" height="1"
+       inkscape:menu="Bevels" inkscape:menu-tooltip="Smooth drop-like bevel with metallic finish"
+       >
+      <feColorMatrix values="0.369458" type="saturate" in="SourceGraphic" result="result1" id="feColorMatrix2764"/>
+      <feGaussianBlur stdDeviation="7.0222857142857134" id="feGaussianBlur2470" in="SourceAlpha"/>
+      <feSpecularLighting id="feSpecularLighting2472" specularExponent="7.971360381861575" specularConstant="3.8834951456310676" surfaceScale="10">
+        <feDistantLight id="feDistantLight2474" azimuth="225" elevation="17"/>
+      </feSpecularLighting>
+      <feComposite id="feComposite2476" in2="result1" operator="atop"/>
+    </filter>
+    <filter inkscape:label="Motion Blur Horizontal" id="filter2498"
+       inkscape:menu="Blur and Sharpen" inkscape:menu-tooltip="Blur as if the object flies horizontally"
+       >
+      <feGaussianBlur in="SourceGraphic" stdDeviation="5 0.01"/>
+    </filter>
+    <filter inkscape:label="Motion Blur Vertical" id="filter2498v"
+       inkscape:menu="Blur and Sharpen" inkscape:menu-tooltip="Blur as if the object flies vertically"
+       >
+      <feGaussianBlur in="SourceGraphic" stdDeviation="0.01 5"/>
+    </filter>
+    <filter inkscape:label="Apparition" id="filter2442"  x="0" y="0" width="1" height="1"
+       inkscape:menu="Shadows and Glows" inkscape:menu-tooltip="Edges are partly feathered out"
+       >
+      <feMorphology radius="4" in="SourceGraphic" result="result0" id="feMorphology2526"/>
+      <feGaussianBlur in="result0" id="feGaussianBlur2444" stdDeviation="8"/>
+      <feComposite operator="in" in="SourceGraphic" id="feComposite2446"/>
+    </filter>
+    <filter inkscape:label="Feathered edges" id="filter2442a"
+       inkscape:menu="Shadows and Glows" inkscape:menu-tooltip="Edges are feathered out"
+       >
+      <feMorphology radius="12" in="SourceGraphic" result="result0" id="feMorphology2526a"/>
+      <feGaussianBlur in="result0" id="feGaussianBlur2444a" stdDeviation="8"/>
+      <feComposite operator="in" in="SourceGraphic" id="feComposite2446a"/>
+    </filter>
+    <filter inkscape:label="Cutout" id="filter2508"  x="0" y="0" width="1" height="1"
+       inkscape:menu="Shadows and Glows" inkscape:menu-tooltip="Drop shadow under the cut-out of the shape"
+       >
+      <feGaussianBlur in="SourceAlpha" id="feGaussianBlur2510" stdDeviation="4.2312137203166218"/>
+      <feOffset id="feOffset2514" dy="5" dx="5"/>
+      <feComposite operator="out" in="SourceGraphic" id="feComposite2516"/>
+    </filter>
+    <filter inkscape:label="Jigsaw Piece" id="filter2530"
+       inkscape:menu="Bevels" inkscape:menu-tooltip="Low, sharp bevel"
+      >
+      <feSpecularLighting in="SourceAlpha" surfaceScale="1" specularConstant="2" specularExponent="18.527845036319611" id="feSpecularLighting2534">
+        <feDistantLight elevation="30" azimuth="225" id="feDistantLight2536"/>
+      </feSpecularLighting>
+      <feComposite result="result0" operator="atop" in2="SourceGraphic" id="feComposite2538"/>
+      <feMorphology radius="2" result="result1" in="SourceAlpha" operator="dilate" id="feMorphology2540"/>
+      <feComposite in="result0" in2="result1" id="feComposite2542"/>
+    </filter>
+    <filter inkscape:label="Roughen" id="filter2550"
+       inkscape:menu="Distort Edges" inkscape:menu-tooltip="Small-scale roughened edges"
+      >
+      <feTurbulence numOctaves="3" seed="0" type="turbulence" in="SourceAlpha" baseFrequency="0.040000000000000001" id="feTurbulence2552"/>
+      <feDisplacementMap numOctaves="2" scale="6.6339066339066335" yChannelSelector="G" xChannelSelector="R" in="SourceGraphic" id="feDisplacementMap2554"/>
+    </filter>
+    <filter id="filter2574" inkscape:label="Rubber Stamp" x="0" y="0" width="1" height="1"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Random whiteouts inside"
+      >
+      <feTurbulence result="result1" in="SourceGraphic" baseFrequency="0.064033264033264037" numOctaves="4" type="fractalNoise" id="feTurbulence2580"/>
+      <feGaussianBlur in="SourceAlpha" id="feGaussianBlur2760" stdDeviation="4.8612668463611852"/>
+      <feComposite operator="out" in="SourceAlpha" id="feComposite2754"/>
+      <feComposite in2="result1" id="feComposite2756"/>
+      <feColorMatrix result="result1" numOctaves="3" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9" id="feColorMatrix2582"/>
+      <feComposite result="result1" operator="in" in="SourceGraphic" id="feComposite2762"/>
+      <feTurbulence baseFrequency="0.03231597845601436" numOctaves="1" id="feTurbulence3587"/>
+      <feDisplacementMap scale="4.0609137055837561" yChannelSelector="G" xChannelSelector="R" in="result1" id="feDisplacementMap3589"/>
+    </filter>
+    <filter inkscape:label="Ink Bleed" id="filter2610"
+       inkscape:menu="Shadows and Glows" inkscape:menu-tooltip="Inky splotches underneath the object"
+      >
+      <feGaussianBlur result="result1" in="SourceGraphic" id="feGaussianBlur2612" stdDeviation="1.3291292875989447"/>
+      <feTurbulence result="result0" numOctaves="4" baseFrequency="0.033773087071240104" id="feTurbulence2614"/>
+      <feDisplacementMap result="result2" scale="19.612590799031477" yChannelSelector="G" xChannelSelector="R" in="result1" in2="result0" id="feDisplacementMap2616"/>
+      <feColorMatrix values="2 0 0 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0.7 0" result="result3" id="feColorMatrix2620"/>
+      <feGaussianBlur result="result4" in="SourceGraphic" id="feGaussianBlur2622" stdDeviation="1.0653034300791555"/>
+      <feComposite in="result4" in2="result3" id="feComposite2618"/>
+    </filter>
+    <filter y="-0.22" width="1.21" height="1.39" x="-0.079999998" inkscape:label="Fire" id="filter2565"
+       inkscape:menu="Shadows and Glows" inkscape:menu-tooltip="Edges of object are on fire"
+       >
+      <feMorphology result="result1" radius="2.4128686327077746" operator="dilate" id="feMorphology2571"/>
+      <feTurbulence baseFrequency="0.0900804289544236 0.027882037533512066" numOctaves="1" id="feTurbulence2573"/>
+      <feColorMatrix type="matrix" result="result2" values="2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0" id="feColorMatrix2577"/>
+      <feDisplacementMap result="result4" scale="10.319410319410318" yChannelSelector="G" xChannelSelector="R" in="result1" id="feDisplacementMap2581"/>
+      <feFlood result="result3" flood-opacity="1" flood-color="rgb(255,159,54)" id="feFlood2585"/>
+      <feMorphology radius="3.755868544600939" result="result7" in="result4" id="feMorphology2806"/>
+      <feGaussianBlur result="result7" in="result7" id="feGaussianBlur2802" stdDeviation="2.3571830985915487"/>
+      <feComposite result="result5" in2="result4" in="result3" operator="in" id="feComposite2587"/>
+      <feComposite operator="out" in2="result7" id="feComposite2804"/>
+      <feOffset result="result6" id="feOffset2591" dy="-7" dx="-4.5"/>
+      <feGaussianBlur result="result7" id="feGaussianBlur2593" stdDeviation="4.8352546916890073"/>
+      <feComposite in="SourceGraphic" in2="result6" id="feComposite2583"/>
+      <feComposite in2="result7" id="feComposite2595"/>
+    </filter>
+    <filter inkscape:label="Bloom" id="filter2814"
+       inkscape:menu="Bevels" inkscape:menu-tooltip="Soft, cushion-like bevel with matte highlights"
+      >
+      <feGaussianBlur result="result1" in="SourceAlpha" id="feGaussianBlur2816" stdDeviation="2.1526428571428569"/>
+      <feSpecularLighting result="result0" specularExponent="18.063876651982376" specularConstant="2" surfaceScale="5" id="feSpecularLighting2818">
+        <feDistantLight azimuth="225" elevation="24" id="feDistantLight2822"/>
+      </feSpecularLighting>
+      <feComposite result="result6" operator="in" in2="SourceAlpha" id="feComposite2848"/>
+      <feMorphology radius="5.7142857142857144" operator="dilate" id="feMorphology2858"/>
+      <feGaussianBlur result="result11" id="feGaussianBlur2824" stdDeviation="5.7237142857142853"/>
+      <feDiffuseLighting surfaceScale="5" result="result3" diffuseConstant="2.0099999999999998" in="result1" id="feDiffuseLighting2830">
+        <feDistantLight elevation="25" azimuth="225" id="feDistantLight2832"/>
+      </feDiffuseLighting>
+      <feBlend result="result7" mode="multiply" in="result3" in2="SourceGraphic" id="feBlend2844" blend="normal"/>
+      <feComposite in="result7" operator="in" in2="SourceAlpha" id="feComposite2846"/>
+      <feBlend result="result9" mode="lighten" in="result6" id="feBlend2842" blend="normal"/>
+      <feComposite in="result11" id="feComposite2856"/>
+    </filter>
+    <filter inkscape:label="Ridged border" id="filter2862"
+       inkscape:menu="Bevels" inkscape:menu-tooltip="Ridged border with inner bevel"
+      >
+      <feMorphology radius="4.2857142857142856" in="SourceAlpha" id="feMorphology2866"/>
+      <feComposite operator="out" in="SourceGraphic" id="feComposite2868"/>
+      <feGaussianBlur result="result0" id="feGaussianBlur2870" stdDeviation="1.2003571428571427"/>
+      <feDiffuseLighting diffuseConstant="1" id="feDiffuseLighting2874">
+        <feDistantLight elevation="66" azimuth="225" id="feDistantLight2876"/>
+      </feDiffuseLighting>
+      <feBlend mode="multiply" in2="SourceGraphic" id="feBlend2878" blend="normal"/>
+      <feComposite operator="in" in2="SourceAlpha" id="feComposite2880"/>
+    </filter>
+    <filter inkscape:label="Ripple" id="filter2888"
+       inkscape:menu="Distort Edges" inkscape:menu-tooltip="Horizontal rippling of edges"
+      >
+      <feTurbulence numOctaves="1" baseFrequency="0.001904761904761905 0.10666666666666667" id="feTurbulence2890"/>
+      <feColorMatrix values="2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0.5" id="feColorMatrix2894"/>
+      <feDisplacementMap yChannelSelector="A" xChannelSelector="R" scale="14.317180616740089" in="SourceGraphic" id="feDisplacementMap2892"/>
+    </filter>
+    <filter inkscape:label="Speckle" id="filter2902" x="0" y="0" width="1" height="1"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Fill object with sparse translucent specks"
+      >
+      <feTurbulence result="result1" numOctaves="1" baseFrequency="0.20952380952380956" type="fractalNoise" id="feTurbulence2904"/>
+      <feColorMatrix result="result0" in="SourceGraphic" type="luminanceToAlpha" id="feColorMatrix2912"/>
+      <feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.8 0" result="result2" id="feColorMatrix2916"/>
+      <feComposite in="result1" operator="over" in2="result2" id="feComposite2910"/>
+      <feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -14" id="feColorMatrix2906"/>
+      <feComposite operator="out" in="SourceGraphic" id="feComposite2914"/>
+    </filter>
+    <filter inkscape:label="Oil Slick" id="filter2928" x="0" y="0" width="1" height="1"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Rainbow-colored semitransparent oily splotches"
+      >
+      <feTurbulence baseFrequency="0.14299516908212559" numOctaves="5" type="fractalNoise" id="feTurbulence2936"/>
+      <feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 5 -3" id="feColorMatrix2938"/>
+      <feMorphology result="result3" radius="2.6570048309178742" operator="dilate" id="feMorphology2942"/>
+      <feTurbulence baseFrequency="0.12077294685990339" numOctaves="2" id="feTurbulence2944"/>
+      <feDisplacementMap result="result4" scale="18.526785714285715" yChannelSelector="A" xChannelSelector="R" in="result3" id="feDisplacementMap2946"/>
+      <feComposite in2="SourceGraphic" operator="atop" in="result4" id="feComposite2948"/>
+    </filter>
+    <filter id="filter2952" inkscape:label="Frost"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Flake-like white splotches"
+      >
+      <feTurbulence id="feTurbulence2954" type="fractalNoise" numOctaves="5" baseFrequency="0.14299516908212559"/>
+      <feColorMatrix id="feColorMatrix2956" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 5 -3"/>
+      <feComposite operator="in" in2="SourceAlpha" id="feComposite2972"/>
+      <feMorphology id="feMorphology2958" operator="dilate" radius="2.6570048309178742" result="result3"/>
+      <feTurbulence id="feTurbulence2960" numOctaves="2" baseFrequency="0.12077294685990339"/>
+      <feDisplacementMap id="feDisplacementMap2962" in="result3" xChannelSelector="R" yChannelSelector="A" scale="10.044642857142858" result="result4"/>
+      <feFlood flood-opacity="1" flood-color="rgb(255,255,255)" id="feFlood2968"/>
+      <feComposite result="result2" operator="in" in2="result4" id="feComposite2970"/>
+      <feComposite id="feComposite2964" in="result2" operator="over" in2="SourceGraphic"/>
+    </filter>
+    <filter id="filter2652" inkscape:label="Leopard Fur"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Leopard spots (loses object's natural color)"
+      >
+      <feTurbulence id="feTurbulence2654" type="fractalNoise" numOctaves="5" baseFrequency="0.14299516908212559"/>
+      <feColorMatrix id="feColorMatrix2656" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 -3.45"/>
+      <feComposite operator="in" in2="SourceAlpha" id="feComposite2658" result="result3"/>
+      <feColorMatrix id="feColorMatrix2660" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 6 0"/>
+      <feMorphology id="feMorphology2662" operator="dilate" radius="1.8181818181818181" result="result3"/>
+      <feGaussianBlur stdDeviation="1" id="feGaussianBlur2664" result="result3"/>
+      <feGaussianBlur stdDeviation="2.7287613293051356" id="feGaussianBlur2666"/>
+      <feComposite id="feComposite2668" operator="out" result="result1" in2="result3"/>
+      <feColorMatrix id="feColorMatrix2670" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0" result="result3"/>
+      <feFlood id="feFlood2672" flood-color="rgb(209,151,45)" flood-opacity="1" result="result2"/>
+      <feComposite id="feComposite2674" in2="SourceGraphic" in="result2" operator="in"/>
+      <feComposite id="feComposite2676" operator="atop" result="result3" in="result3"/>
+      <feGaussianBlur in="SourceAlpha" id="feGaussianBlur2682" stdDeviation="7.1521428571428558"/>
+      <feDiffuseLighting surfaceScale="10.600706713780937" diffuseConstant="1.9197207678883073" id="feDiffuseLighting2684">
+        <feDistantLight elevation="48" azimuth="225" id="feDistantLight2686"/>
+      </feDiffuseLighting>
+      <feBlend result="result3" mode="multiply" in2="result3" id="feBlend2688" blend="normal"/>
+      <feComposite result="result3" operator="in" in2="SourceAlpha" id="feComposite2690"/>
+      <feTurbulence id="feTurbulence2678" numOctaves="3" baseFrequency="0.10577777777777778"/>
+      <feDisplacementMap id="feDisplacementMap2680" in="result3" xChannelSelector="R" yChannelSelector="G" scale="4.5454545454545459"/>
+    </filter>
+    <filter inkscape:label="Zebra" id="filter2673" x="0" y="0" width="1" height="1"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Irregular vertical dark stripes (loses object's natural color)"
+      >
+      <feColorMatrix result="result0" values="0.15 0.3 0.05 0 0.5 0.15 0.3 0.05 0 0.5 0.15 0.3 0.05 0 0.5 0 0 0 1 0" type="matrix" id="feColorMatrix2675"/>
+      <feTurbulence baseFrequency="0.078388278388278387 0.012454212454212455" numOctaves="1" id="feTurbulence2677"/>
+      <feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 -0.8" id="feColorMatrix2679"/>
+      <feComposite operator="atop" in2="result0" id="feComposite2683"/>
+    </filter>
+    <filter inkscape:label="Clouds" id="filter2687" x="0" y="0" width="1" height="1"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Airy, fluffy, sparse white clouds"
+      >
+      <feTurbulence numOctaves="3" baseFrequency="0.040293040293040296 0.10695970695970697" type="fractalNoise" id="feTurbulence2689"/>
+      <feColorMatrix result="result0" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 5 -2.7" id="feColorMatrix2691"/>
+      <feFlood flood-opacity="1" flood-color="rgb(255,255,255)" id="feFlood2693"/>
+      <feComposite operator="in" in2="result0" id="feComposite2695"/>
+      <feComposite operator="atop" in2="SourceGraphic" id="feComposite2697"/>
+    </filter>
+    <filter id="filter2665" inkscape:label="Sharpen" x="0" y="0" width="1" height="1"
+       inkscape:menu="Blur and Sharpen"
+      >
+      <feConvolveMatrix order="3 3" kernelMatrix="0 -0.15 0 -0.15 1.6 -0.15 0 -0.15 0" id="feConvolveMatrix2667" divisor="1" in="SourceGraphic" targetX="1" targetY="1"/>
+    </filter>
+    <filter inkscape:label="Sharpen More" id="filter2679" x="0" y="0" width="1" height="1"
+       inkscape:menu="Blur and Sharpen"
+      >
+      <feConvolveMatrix targetY="1" targetX="1" in="SourceGraphic" divisor="1" id="feConvolveMatrix2681" kernelMatrix="0 -0.3 0 -0.3 2.2 -0.3 0 -0.3 0" order="3 3"/>
+    </filter>
+    <filter id="filter2685" inkscape:label="Emboss" x="0" y="0" width="1" height="1"
+       inkscape:menu="Image effects"
+      >
+      <feColorMatrix id="feColorMatrix2687" type="luminanceToAlpha"/>
+      <feDiffuseLighting id="feDiffuseLighting2689" surfaceScale="1.5">
+        <feDistantLight id="feDistantLight2691" azimuth="225" elevation="25"/>
+      </feDiffuseLighting>
+      <feComposite id="feComposite2693" in2="SourceAlpha" operator="in"/>
+    </filter>
+    <filter id="filter2701" inkscape:label="Oil Painting"
+       inkscape:menu="Image effects" inkscape:menu-tooltip="Simulates oil painting style"
+      >
+      <feMorphology id="feMorphology2703" radius="2" in="SourceGraphic" result="result0"/>
+      <feTurbulence id="feTurbulence2705" numOctaves="1" baseFrequency="0.077828054298642535"/>
+      <feDisplacementMap id="feDisplacementMap2707" in="result0" scale="6.2745098039215685" xChannelSelector="R" yChannelSelector="G"/>
+    </filter>
+    <filter id="filter2723" inkscape:label="Edge Detect" x="0" y="0" width="1" height="1"
+       inkscape:menu="Emphasize Edges" inkscape:menu-tooltip="Detect color edges in object"
+      >
+      <feConvolveMatrix order="3 3" kernelMatrix="1 1 1 1 -8 1 1 1 1" id="feConvolveMatrix2725" in="SourceGraphic" divisor="3" targetX="1" targetY="1" preserveAlpha="true" result="result0" bias="0"/>
+    </filter>
+    <filter inkscape:label="Horizontal Edge Detect" id="filter2741" x="0" y="0" width="1" height="1"
+       inkscape:menu="Emphasize Edges" inkscape:menu-tooltip="Detect horizontal color edges in object"
+      >
+      <feConvolveMatrix bias="0" result="result0" preserveAlpha="true" targetY="1" targetX="1" divisor="1" in="SourceGraphic" id="feConvolveMatrix2743" kernelMatrix="0 1 0 0 -2 0 0 1 0" order="3 3"/>
+    </filter>
+    <filter id="filter2751" inkscape:label="Vertical Edge Detect" x="0" y="0" width="1" height="1"
+       inkscape:menu="Emphasize Edges" inkscape:menu-tooltip="Detect vertical color edges in object"
+      >
+      <feConvolveMatrix order="3 3" kernelMatrix="0 0 0 1 -2 1 0 0 0" id="feConvolveMatrix2753" in="SourceGraphic" divisor="1" targetX="1" targetY="1" preserveAlpha="true" result="result0" bias="0"/>
+    </filter>
+    <filter inkscape:label="Pencil" id="filter2755" x="0" y="0" width="1" height="1"
+       inkscape:menu="Emphasize Edges" inkscape:menu-tooltip="Detect color edges and retrace them in grayscale"
+      >
+      <feConvolveMatrix bias="0" result="result0" preserveAlpha="true" targetY="1" targetX="1" divisor="1" in="SourceGraphic" id="feConvolveMatrix2757" kernelMatrix="1 1 1 1 -8 1 1 1 1" order="3 3"/>
+      <feColorMatrix id="feColorMatrix2765" values="-0.15 -0.3 -0.05 0 1 -0.15 -0.3 -0.05 0 1 -0.15 -0.3 -0.05 0 1 0 0 0 1 0" result="result3"/>
+    </filter>
+    <filter id="filter2803" inkscape:label="Blueprint" x="0" y="0" width="1" height="1"
+       inkscape:menu="Emphasize Edges" inkscape:menu-tooltip="Detect color edges and retrace them in blue"
+      >
+      <feConvolveMatrix order="3 3" kernelMatrix="1 1 1 1 -8 1 1 1 1" id="feConvolveMatrix2805" in="SourceGraphic" divisor="1" targetX="1" targetY="1" preserveAlpha="true" result="result0" bias="0"/>
+      <feColorMatrix result="result3" values="-0.15 -0.3 -0.05 0 1 -0.15 -0.3 -0.05 0 1 0 0 0 0 1 0 0 0 1 0" id="feColorMatrix2807"/>
+    </filter>
+    <filter id="filter2746" inkscape:label="Desaturate" x="0" y="0" width="1" height="1"
+       inkscape:menu="Color" inkscape:menu-tooltip="Render object in black and white"
+      >
+      <feColorMatrix id="feColorMatrix2748" type="saturate" values="0"/>
+    </filter>
+    <filter id="filter-invert" inkscape:label="Invert" x="0" y="0" width="1" height="1"
+       inkscape:menu="Color" inkscape:menu-tooltip="Invert colors of object"
+      >
+      <feColorMatrix id="feColorMatrix2700" in="SourceGraphic" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 "/>
+    </filter>
+    <filter id="filter2811" inkscape:label="Sepia" x="0" y="0" width="1" height="1"
+       inkscape:menu="Color" inkscape:menu-tooltip="Render object in warm sepia tones"
+      >
+      <feColorMatrix id="feColorMatrix2813" values="0" in="SourceGraphic" type="saturate" result="result2"/>
+      <feFlood id="feFlood2823" flood-color="rgb(160,67,0)" flood-opacity="1" result="result1"/>
+      <feColorMatrix id="feColorMatrix2817" in="SourceGraphic" type="saturate" values="0"/>
+      <feColorMatrix id="feColorMatrix2821" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 2 -1" result="result3"/>
+      <feBlend blend="normal" id="feBlend2819" in2="result2" mode="multiply" in="result1"/>
+      <feBlend blend="normal" id="feBlend2825" in2="result3" mode="screen"/>
+      <feComposite id="feComposite2827" in2="SourceAlpha" operator="in"/>
+    </filter>
+    <filter inkscape:label="Age" id="filter2756" x="0" y="0" width="1" height="1"
+       inkscape:menu="Color" inkscape:menu-tooltip="Imitate aged photograph"
+      >
+      <feColorMatrix type="saturate" id="feColorMatrix2758" in="SourceGraphic" values="0"/>
+      <feColorMatrix id="feColorMatrix2760" values="3 0 0 0 -0.3 0 3 0 0 -0.3 0 0 3 0 -0.3 0 0 0 1 0" result="result0"/>
+      <feTurbulence id="feTurbulence2762" baseFrequency="0.11104815864022664" numOctaves="2" type="fractalNoise"/>
+      <feColorMatrix id="feColorMatrix2766" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 -200"/>
+      <feGaussianBlur stdDeviation="1" id="feGaussianBlur2770"/>
+      <feComposite id="feComposite2768" in2="result0" operator="atop"/>
+    </filter>
+    <filter id="filter2782" inkscape:label="Organic" x="0" y="0" width="1" height="1"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Bulging, knotty, slick 3D surface"
+      >
+      <feTurbulence id="feTurbulence2784" numOctaves="3" baseFrequency="0.036842105263157891" result="result0"/>
+      <feSpecularLighting id="feSpecularLighting2786" specularExponent="24.300000000000001" surfaceScale="2" specularConstant="1" result="result1">
+        <feDistantLight id="feDistantLight2788" elevation="45" azimuth="225"/>
+      </feSpecularLighting>
+      <feDiffuseLighting id="feDiffuseLighting2793" in="result0" surfaceScale="3" diffuseConstant="1.21">
+        <feDistantLight id="feDistantLight2795" azimuth="225" elevation="42"/>
+      </feDiffuseLighting>
+      <feBlend blend="normal" id="feBlend2797" in2="SourceGraphic" mode="multiply"/>
+      <feComposite id="feComposite2799" in2="SourceAlpha" operator="in" result="result2"/>
+      <feComposite id="feComposite2791" in2="result2" operator="atop" in="result1"/>
+    </filter>
+    <filter id="filter2781" inkscape:label="Barbed Wire"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Gray bevelled wires with drop shadows"
+      >
+      <feTurbulence id="feTurbulence2783" baseFrequency="0.032684824902723737 0.12762645914396886" numOctaves="1"/>
+      <feColorMatrix id="feColorMatrix2785" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -15 1"/>
+      <feMorphology id="feMorphology2789" radius="1.006711409395973" operator="dilate" result="result0"/>
+      <feMorphology id="feMorphology2791" in="SourceAlpha" operator="dilate" radius="3.1100478468899522" result="result1"/>
+      <feGaussianBlur stdDeviation="8.0628859060402664" id="feGaussianBlur2793" surfaceScale="12.6"/>
+      <feDiffuseLighting id="feDiffuseLighting2795" surfaceScale="12.578616352201266" diffuseConstant="1">
+        <feDistantLight id="feDistantLight2799" azimuth="225" elevation="45"/>
+      </feDiffuseLighting>
+      <feComposite id="feComposite2801" in2="result0" operator="in"/>
+      <feComposite id="feComposite2803" in2="result1" operator="in" result="result3"/>
+      <feSpecularLighting id="feSpecularLighting2807" in="result0" specularConstant="1" specularExponent="3.5287610619469025">
+        <feDistantLight id="feDistantLight2809" elevation="50" azimuth="225"/>
+      </feSpecularLighting>
+      <feComposite id="feComposite2811" in2="result3" operator="atop" result="result6"/>
+      <feColorMatrix id="feColorMatrix2823" in="result0" result="result4" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"/>
+      <feGaussianBlur stdDeviation="1.3673303167420814" id="feGaussianBlur2817" in="result4"/>
+      <feOffset dx="2" dy="2" id="feOffset2821" result="result5"/>
+      <feComposite id="feComposite2833" in="result5" in2="SourceGraphic" operator="atop" result="result7"/>
+      <feComposite id="feComposite2835" in2="result7" in="result6"/>
+    </filter>
+    <filter id="filter2840" inkscape:label="Swiss Cheese" x="0" y="0" width="1" height="1"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Random inner-bevel holes"
+      >
+      <feTurbulence id="feTurbulence2842" type="fractalNoise" baseFrequency="0.09727626459143969" numOctaves="1"/>
+      <feColorMatrix id="feColorMatrix2844" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -14"/>
+      <feGaussianBlur stdDeviation="3.7061284046692604" id="feGaussianBlur2848"/>
+      <feColorMatrix id="feColorMatrix2850" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 70 0" result="result0"/>
+      <feGaussianBlur stdDeviation="3.9006614785992215" id="feGaussianBlur2852" result="result1"/>
+      <feDiffuseLighting id="feDiffuseLighting2854" surfaceScale="-5" diffuseConstant="1.2939001848428837">
+        <feDistantLight id="feDistantLight2856" azimuth="225" elevation="45"/>
+      </feDiffuseLighting>
+      <feComposite id="feComposite2858" in2="result0" operator="in"/>
+      <feBlend blend="normal" id="feBlend2860" in2="SourceGraphic" mode="multiply"/>
+      <feComposite id="feComposite2862" in2="SourceGraphic" operator="in" result="result2"/>
+      <feSpecularLighting id="feSpecularLighting2864" in="result1" surfaceScale="-5" specularExponent="4.5" specularConstant="0.69999999999999996">
+        <feDistantLight id="feDistantLight2866" elevation="33" azimuth="225"/>
+      </feSpecularLighting>
+      <feComposite id="feComposite2869" in2="result0" operator="in"/>
+      <feComposite id="feComposite2871" in2="result2" operator="atop"/>
+    </filter>
+    <filter id="filter2883" inkscape:label="Blue Cheese" x="0" y="0" width="1" height="1"
+       inkscape:menu="Textures" inkscape:menu-tooltip="Marble-like bluish speckles"
+      >
+      <feTurbulence id="feTurbulence2885" numOctaves="2" baseFrequency="0.062992125984251968"/>
+      <feColorMatrix id="feColorMatrix2889" values="0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 -10 1"/>
+      <feGaussianBlur stdDeviation="0.99415354330708661" id="feGaussianBlur2893" result="result1"/>
+      <feTurbulence id="feTurbulence2895" numOctaves="3" baseFrequency="0.030708661417322838" type="fractalNoise" result="result0"/>
+      <feColorMatrix id="feColorMatrix2901" result="result2" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 2 -0.5"/>
+      <feComposite id="feComposite2899" operator="in" in2="result2" in="result1"/>
+      <feComposite id="feComposite2891" in2="SourceGraphic" operator="atop"/>
+    </filter>
+    <filter id="filter2836" inkscape:label="Button" x="0" y="0" width="1" height="1"
+       inkscape:menu="Bevels" inkscape:menu-tooltip="Soft bevel, slightly depressed middle"
+      >
+      <feGaussianBlur stdDeviation="2.2533653846153845" id="feGaussianBlur2840" in="SourceAlpha" result="result0"/>
+      <feMorphology id="feMorphology2844" in="SourceAlpha" radius="6.557377049180328" result="result1"/>
+      <feGaussianBlur stdDeviation="8.8607894736842105" id="feGaussianBlur2849" in="result1"/>
+      <feColorMatrix id="feColorMatrix2861" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.3 0"/>
+      <feComposite id="feComposite2847" in="result0" operator="out" result="result2"/>
+      <feGaussianBlur stdDeviation="1.6844736842105263" id="feGaussianBlur2874" result="result4"/>
+      <feDiffuseLighting id="feDiffuseLighting2857" surfaceScale="10">
+        <feDistantLight id="feDistantLight2859" azimuth="225" elevation="45"/>
+      </feDiffuseLighting>
+      <feBlend blend="normal" id="feBlend2863" in2="SourceGraphic" mode="multiply"/>
+      <feComposite id="feComposite2865" in2="SourceAlpha" operator="in" result="result3"/>
+      <feSpecularLighting id="feSpecularLighting2867" in="result4" surfaceScale="5" specularExponent="17.913551401869157">
+        <feDistantLight id="feDistantLight2869" azimuth="225" elevation="45"/>
+      </feSpecularLighting>
+      <feComposite id="feComposite2872" in2="result3" operator="atop"/>
+    </filter>
+    <filter id="filter2849" inkscape:label="Inset"
+       inkscape:menu="Shadows and Glows" inkscape:menu-tooltip="Shadowy outer bevel"
+      >
+      <feMorphology id="feMorphology2868" result="result1" in="SourceAlpha" operator="dilate" radius="3.5885167464114831"/>
+      <feGaussianBlur stdDeviation="3.5981578947368416" id="feGaussianBlur2851" in="result1" result="result0"/>
+      <feDiffuseLighting id="feDiffuseLighting2853" surfaceScale="-5">
+        <feDistantLight id="feDistantLight2855" elevation="45" azimuth="225"/>
+      </feDiffuseLighting>
+      <feComposite id="feComposite2863" in2="result0" operator="in"/>
+      <feComposite id="feComposite2866" in="SourceGraphic"/>
+    </filter>
+    <filter id="filter2872" inkscape:label="Dripping" height="2" width="1.22" y="-0.1"
+       inkscape:menu="Dripping" inkscape:menu-tooltip="Random paint streaks downwards"
+      >
+      <feConvolveMatrix order="3 3" kernelMatrix="0 -1 0 0 -1 0 0 2 0" id="feConvolveMatrix2874" result="result1" divisor="6.0316205533596845"/>
+      <feTurbulence id="feTurbulence2876" numOctaves="1" baseFrequency="0.07796610169491526 0.01016949152542373" result="result0"/>
+      <feColorMatrix id="feColorMatrix2880" result="result2" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 10 -3.5"/>
+      <feComposite id="feComposite2878" in2="result2" in="result1" operator="in"/>
+      <feMorphology id="feMorphology2882" operator="dilate" radius="1 30"/>
+      <feColorMatrix id="feColorMatrix2886" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 50 0" result="result3"/>
+      <feOffset dx="0" dy="1.4028056112224334" id="feOffset2892" result="result4"/>
+      <feTurbulence id="feTurbulence2902" numOctaves="2" baseFrequency="0.032203389830508473 0.024576271186440679" result="result8"/>
+      <feColorMatrix id="feColorMatrix2908" values="0 0 0 0 0.52 0 -0.4 0 0 0.45 0 0 1 0 0 0 0 0 1 0"/>
+      <feDisplacementMap id="feDisplacementMap2906" in="result4" xChannelSelector="R" yChannelSelector="G" scale="100" result="result9"/>
+      <feComposite id="feComposite2898" in="FillPaint" result="result7" operator="in"/>
+      <feComposite id="feComposite2911" in="SourceGraphic"/>
+    </filter>
+    <filter y="-0.25" width="1.5" height="2" inkscape:label="Wetworks" id="filter2937" x="-0.25"
+       inkscape:menu="Dripping" inkscape:menu-tooltip="Random paint streaks and splotches with 3D relief"
+      >
+      <feConvolveMatrix divisor="6.0316205533596845" result="result1" id="feConvolveMatrix2939" kernelMatrix="0 -1 0 0 -1 0 0 2 0" order="3 3"/>
+      <feTurbulence result="result0" baseFrequency="0.07796610169491526 0.01016949152542373" numOctaves="1" id="feTurbulence2941" seed="2"/>
+      <feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 10 -3.5" result="result2" id="feColorMatrix2943"/>
+      <feComposite operator="in" in="result1" in2="result2" id="feComposite2945"/>
+      <feMorphology radius="1 30" operator="dilate" id="feMorphology2947"/>
+      <feColorMatrix result="result3" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 50 0" id="feColorMatrix2949"/>
+      <feOffset result="result4" id="feOffset2951" dy="1.4028056112224334" dx="0"/>
+      <feTurbulence result="result8" baseFrequency="0.032203389830508473 0.071910112359550568" numOctaves="2" id="feTurbulence2953"/>
+      <feColorMatrix values="0 0 0 0 0.52 0 -0.4 0 0 0.45 0 0 1 0 0 0 0 0 1 0" id="feColorMatrix2955"/>
+      <feDisplacementMap result="result9" scale="100" yChannelSelector="G" xChannelSelector="R" in="result4" id="feDisplacementMap2957"/>
+      <feGaussianBlur stdDeviation="0.63493750000000004" id="feGaussianBlur2903"/>
+      <feComposite in="SourceGraphic" id="feComposite2961" result="result8"/>
+      <feTurbulence id="feTurbulence2963" numOctaves="1" type="fractalNoise" baseFrequency="0.065168539325842698" result="result12"/>
+      <feGaussianBlur stdDeviation="34.27623595505618" id="feGaussianBlur2895" result="result9" in="result8"/>
+      <feColorMatrix id="feColorMatrix2920" result="result9" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.6 0"/>
+      <feComposite id="feComposite2967" in="result12" operator="over" in2="result9"/>
+      <feColorMatrix id="feColorMatrix2969" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 50 -38"/>
+      <feComposite id="feComposite2893" in="result8" result="result9"/>
+      <feFlood id="feFlood2899" flood-color="rgb(148,7,7)" flood-opacity="1"/>
+      <feComposite id="feComposite2901" in2="result9" operator="in" result="result9"/>
+      <feGaussianBlur stdDeviation="1.8993459302325579" id="feGaussianBlur2905"/>
+      <feSpecularLighting id="feSpecularLighting2907" specularExponent="54.297783933518005" surfaceScale="2">
+        <feDistantLight id="feDistantLight2909" elevation="45" azimuth="205"/>
+      </feSpecularLighting>
+      <feComposite id="feComposite2912" operator="atop" in2="result9"/>
+    </filter>
+    <filter id="filter2907" inkscape:label="Electric Arc"
+       inkscape:menu="Distort Edges" inkscape:menu-tooltip="Roughened edge stroke with a glow"
+      >
+      <feMorphology id="feMorphology2909" radius="2"/>
+      <feComposite id="feComposite2913" in="SourceGraphic" operator="out" result="result0"/>
+      <feTurbulence id="feTurbulence2915" numOctaves="1" baseFrequency="0.11935483870967743 0.0057142857142857143"/>
+      <feColorMatrix id="feColorMatrix2917" values="0 0 0 0 0.5 0 1 0 0 0.5 0 0 1 0 0 0 0 0 1 0" result="result1"/>
+      <feDisplacementMap id="feDisplacementMap2919" in2="result1" in="result0" xChannelSelector="R" yChannelSelector="G" scale="16.793893129770993" result="result2"/>
+      <feGaussianBlur stdDeviation="6.8274999999999988" id="feGaussianBlur2921" result="result3"/>
+      <feComposite id="feComposite2923" in2="result3" in="result2"/>
+    </filter>
+  </defs>
+</svg>
\ No newline at end of file
index e5e5d43aa61ba67e5d323d25219eee9cac4a4770..c52e45608f17754c30da5f67bf3879d47ef7b52e 100644 (file)
@@ -152,6 +152,10 @@ override) the bindings in the main default.xml.
 
   <bind action="CalligraphicPrefs" />
 
+  <bind key="E" modifiers="Shift" action="ToolEraser" display="true"/>
+
+  <bind action="EraserPrefs" />
+
   <bind key="F7" modifiers="Shift" action="ToolPaintBucket" display="true"/>
   <bind key="u" action="ToolPaintBucket" />
   <bind key="U" action="ToolPaintBucket" />
@@ -466,7 +470,9 @@ override) the bindings in the main default.xml.
 
 <!-- Layers -->
 
-  <bind action="LayerNew" />
+  <bind key="N" modifiers="Ctrl,Shift" action="LayerNew" display="true"/>
+  <bind key="n" modifiers="Ctrl,Shift" action="LayerNew" />
+
   <bind action="LayerRename" />
   <bind action="LayerNext" />
   <bind action="LayerPrev" />
index 4c9f686f46779fb491cf0afa7026a7fcfacc9cef..e5ef7d43051e7a0f81d7b7b803de7f6b6ae519dc 100644 (file)
@@ -150,6 +150,10 @@ override) the bindings in the main default.xml.
 
   <bind action="CalligraphicPrefs" />
 
+  <bind key="E" modifiers="Shift" action="ToolEraser" display="true"/>
+
+  <bind action="EraserPrefs" />
+
   <bind key="F7" modifiers="Shift" action="ToolPaintBucket" display="true"/>
   <bind key="u" action="ToolPaintBucket" />
   <bind key="U" action="ToolPaintBucket" />
@@ -460,7 +464,9 @@ override) the bindings in the main default.xml.
 
 <!-- Layers -->
 
-  <bind action="LayerNew" />
+  <bind key="N" modifiers="Ctrl,Shift" action="LayerNew" display="true"/>
+  <bind key="n" modifiers="Ctrl,Shift" action="LayerNew" />
+
   <bind action="LayerRename" />
   <bind action="LayerNext" />
   <bind action="LayerPrev" />
index 16fba0a2f498a91317bdc99a0de65cf892f0f0dc..43e49ea29920fc9a4ef3f927f14b654ea5697530 100644 (file)
@@ -22,9 +22,6 @@
      pagecolor="#ffffff"
      bordercolor="#666666"
      borderopacity="1.0"
-     gridtolerance="10000"
-     guidetolerance="8.8"
-     objecttolerance="10"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="1.540463"
index dd85a841e2b367401d9b06f3c153f2ad19acc616..f8fb8c4cfb1ccdb0346ba61fb81b8708261e8592 100644 (file)
@@ -16,9 +16,6 @@
      pagecolor="#ffffff"
      bordercolor="#666666"
      borderopacity="1.0"
-     gridtolerance="10000"
-     guidetolerance="10"
-     objecttolerance="10"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="0.35"
index 9f5b87e6deff3a72076e0b65eea74ba7f9105f27..0a7b41c2b8303bebf0269b36f47e5df417e2fd0e 100644 (file)
@@ -29,7 +29,6 @@
      inkscape:cy="520"
      inkscape:document-units="px"
      inkscape:current-layer="layer1"
-     gridtolerance="10000"
      inkscape:window-width="877"
      inkscape:window-height="739"
      inkscape:window-x="177"
index 17697c4e82e1a992e4484ea18acea7be0404f50a..a6a610fdbedc031b2e8cc1857068e55db6a8015c 100644 (file)
@@ -16,9 +16,6 @@
      pagecolor="#ffffff"
      bordercolor="#666666"
      borderopacity="1.0"
-     gridtolerance="10000"
-     guidetolerance="10"
-     objecttolerance="10"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
      inkscape:zoom="0.35"
index 707b98d152034690a8005b85d4096d60ef666c12..35ebf2824a2fd1010a3df18db274ee6f59277b67 100644 (file)
@@ -32,9 +32,6 @@
      inkscape:window-width="641"
      inkscape:pageshadow="2"
      inkscape:pageopacity="0.0"
-     guidetolerance="10.0"
-     gridtolerance="10.0"
-     objecttolerance="10.0"
      borderopacity="1.0"
      bordercolor="#666666"
      pagecolor="#ffffff"
index 135aa4f71e574785dcd2d3de05411b33b96d600f..589335d22629b352681d1ceded639d0a390b209c 100644 (file)
@@ -104,15 +104,16 @@ public:
   void setPoint(unsigned ix, Point v) { inner[X].setPoint(ix, v[X]); inner[Y].setPoint(ix, v[Y]); }
   Point const operator[](unsigned ix) const { return Point(inner[X][ix], inner[Y][ix]); }
 
-  Rect boundsFast() const { return bounds_fast(inner); }
-  Rect boundsExact() const { return bounds_exact(inner); }
-  Rect boundsLocal(Interval i, unsigned deg) const {
-      if(i.min() == 0 && i.max() == 1) return boundsFast();
+  virtual OptRect boundsFast() const { return bounds_fast(inner); }
+  virtual OptRect boundsExact() const { return bounds_exact(inner); }
+  virtual OptRect boundsLocal(OptInterval i, unsigned deg) const {
+      if (!i) return OptRect();
+      if(i->min() == 0 && i->max() == 1) return boundsFast();
       if(deg == 0) return bounds_local(inner, i);
       // TODO: UUUUUUGGGLLY
-      if(deg == 1 && order > 1) return Rect(bounds_local(Geom::derivative(inner[X]), i),
-                                            bounds_local(Geom::derivative(inner[Y]), i));
-      return Rect(Interval(0,0), Interval(0,0));
+      if(deg == 1 && order > 1) return OptRect(bounds_local(Geom::derivative(inner[X]), i),
+                                               bounds_local(Geom::derivative(inner[Y]), i));
+      return OptRect();
   }
 //TODO: local
 
index 94dd909cafb7b396cb9a4277391c5673001ddbef..889dde9edb43a825e8d1c9df2c3f740ce86ef26e 100644 (file)
@@ -72,7 +72,7 @@ private:
 
     friend Bezier portion(const Bezier & a, Coord from, Coord to);
 
-    friend Interval bounds_fast(Bezier const & b);
+    friend OptInterval bounds_fast(Bezier const & b);
 
     friend Bezier derivative(const Bezier & a);
 
@@ -185,10 +185,9 @@ public:
     std::vector<Coord> valueAndDerivatives(Coord t, unsigned n_derivs) const {
         std::vector<Coord> val_n_der;
         Coord d_[order()+1];
-        unsigned nn = n_derivs + 1; // the size of the result vector equals n_derivs+1
+        unsigned nn = n_derivs + 1;    // the size of the result vector equals n_derivs+1 ...
         if(nn > order())
-            //nn = order();
-            nn = order()+1;
+            nn = order()+1;                    // .. but with a maximum of order() + 1!
         for(unsigned i = 0; i < size(); i++)
             d_[i] = c_[i];
         for(unsigned di = 0; di < nn; di++) {
@@ -309,18 +308,22 @@ inline Bezier integral(const Bezier & a) {
     return inte;
 }
 
-inline Interval bounds_fast(Bezier const & b) {
+inline OptInterval bounds_fast(Bezier const & b) {
     return Interval::fromArray(&b.c_[0], b.size());
 }
 
 //TODO: better bounds exact
-inline Interval bounds_exact(Bezier const & b) {
+inline OptInterval bounds_exact(Bezier const & b) {
     return bounds_exact(b.toSBasis());
 }
 
-inline Interval bounds_local(Bezier const & b, Interval i) {
-    return bounds_fast(portion(b, i.min(), i.max()));
+inline OptInterval bounds_local(Bezier const & b, OptInterval i) {
     //return bounds_local(b.toSBasis(), i);
+    if (i) {
+        return bounds_fast(portion(b, i->min(), i->max()));
+    } else {
+        return OptInterval();
+    }
 }
 
 inline std::ostream &operator<< (std::ostream &out_file, const Bezier & b) {
index 8f4d98ef25b7bee62e85e8aa676a82390efbd3b8..9c57db44d882d400bea0b587a0fb2ad01dfb4d3d 100644 (file)
 #include <2geom/point.h>
 #include <vector>
 #include <boost/concept_check.hpp>
+#include <2geom/forward.h>
 
 namespace Geom {
 
 //forward decls
-template <typename T> class D2;
-
 template <typename T> struct ResultTraits;
 
 template <> struct ResultTraits<double> {
-  typedef Interval bounds_type;
+  typedef OptInterval bounds_type;
   typedef SBasis sb_type;
 };
 
 template <> struct ResultTraits<Point > {
-  typedef D2<Interval> bounds_type;
+  typedef OptRect bounds_type;
   typedef D2<SBasis> sb_type;
 };
 
index 291f693826358c9728ec0148851a081da21fc65d..3ad034ac9b435a846a405e1906462a55e0fc6d43 100644 (file)
@@ -120,7 +120,12 @@ typedef std::vector<Crossings> CrossingSet;
 template<typename C>
 std::vector<Rect> bounds(C const &a) {
     std::vector<Rect> rs;
-    for(unsigned i = 0; i < a.size(); i++) rs.push_back(a[i].boundsFast());
+    for (unsigned i = 0; i < a.size(); i++) {
+        OptRect bb = a[i].boundsFast();
+        if (bb) {
+            rs.push_back(*bb);
+        }
+    }
     return rs;
 }
 
index b81548ba832914b756d981fc0bbeb59b215b9a40..af02d6edba9d3afeb4db2292cfef3fccd2d5c3b7 100644 (file)
@@ -74,10 +74,10 @@ public:
 
   virtual Curve *duplicate() const = 0;
 
-  virtual Rect boundsFast() const = 0;
-  virtual Rect boundsExact() const = 0;
-  virtual Rect boundsLocal(Interval i, unsigned deg) const = 0;
-  Rect boundsLocal(Interval i) const { return boundsLocal(i, 0); }
+  virtual OptRect boundsFast() const = 0;
+  virtual OptRect boundsExact() const = 0;
+  virtual OptRect boundsLocal(OptInterval i, unsigned deg) const = 0;
+  OptRect boundsLocal(OptInterval i) const { return boundsLocal(i, 0); }
 
   virtual std::vector<double> roots(double v, Dim2 d) const = 0;
 
@@ -133,12 +133,12 @@ public:
    */
   virtual Point unitTangentAt(Coord t, unsigned n = 3) const
   {
-    for (unsigned deriv_n = 1; deriv_n <= n; deriv_n++) {
-      Point deriv = pointAndDerivatives(t, deriv_n)[deriv_n];
-      Coord length = deriv.length();
+       std::vector<Point> derivs = pointAndDerivatives(t, n);
+       for (unsigned deriv_n = 1; deriv_n < derivs.size(); deriv_n++) {
+      Coord length = derivs[deriv_n].length();
       if ( ! are_near(length, 0) ) {
          // length of derivative is non-zero, so return unit vector
-         return deriv / length;
+         derivs[deriv_n] / length;
       }
     }
     return Point (0,0);
index 01f83bf5ecf86e26e7320d5a232c488b74c153c5..55c7ef55e0d0138ecd3acecc972d11bc1d76c610 100644 (file)
@@ -150,6 +150,81 @@ split_at_discontinuities (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwsbi
     return ret;
 }
 
+static void set_first_point(Piecewise<D2<SBasis> > &f, Point a){
+    if ( f.empty() ){
+        f.concat(Piecewise<D2<SBasis> >(D2<SBasis>(Linear(a[X]),Linear(a[Y]))));
+        return;
+    }
+    for (unsigned dim=0; dim<2; dim++){
+        if (f.segs.front()[dim].size() == 0){
+            f.segs.front()[dim].push_back(Linear(a[dim],0));
+        }else{
+            f.segs.front()[dim][0][0] = a[dim];
+        }
+    }
+}
+static void set_last_point(Piecewise<D2<SBasis> > &f, Point a){
+    if ( f.empty() ){
+        f.concat(Piecewise<D2<SBasis> >(D2<SBasis>(Linear(a[X]),Linear(a[Y]))));
+        return;
+    }
+    for (unsigned dim=0; dim<2; dim++){
+        if (f.segs.back()[dim].size() == 0){
+            f.segs.back()[dim].push_back(Linear(0,a[dim]));
+        }else{
+            f.segs.back()[dim][0][1] = a[dim];
+        }
+    }
+}
+
+std::vector<Piecewise<D2<SBasis> > > fuse_nearby_ends(std::vector<Piecewise<D2<SBasis> > > const &f, double tol){
+
+    if ( f.size()==0 ) return f;
+    std::vector<Piecewise<D2<SBasis> > > result;
+    std::vector<std::vector<unsigned> > pre_result;
+    for (unsigned i=0; i<f.size(); i++){
+        bool inserted = false;
+        Point a = f[i].firstValue();
+        Point b = f[i].lastValue();
+        for (unsigned j=0; j<pre_result.size(); j++){
+            Point aj = f.at(pre_result[j].back()).lastValue();
+            Point bj = f.at(pre_result[j].front()).firstValue();
+            if ( L2(a-aj) < tol ) {
+                pre_result[j].push_back(i);
+                inserted = true;
+                break;
+            }
+            if ( L2(b-bj) < tol ) {
+                pre_result[j].insert(pre_result[j].begin(),i);
+                inserted = true;
+                break;
+            }
+        }
+        if (!inserted) {
+            pre_result.push_back(std::vector<unsigned>());
+            pre_result.back().push_back(i);
+        }
+    }
+    for (unsigned i=0; i<pre_result.size(); i++){
+        Piecewise<D2<SBasis> > comp;
+        for (unsigned j=0; j<pre_result[i].size(); j++){
+            Piecewise<D2<SBasis> > new_comp = f.at(pre_result[i][j]);
+            if ( j>0 ){
+                set_first_point( new_comp, comp.segs.back().at1() );
+            }
+            comp.concat(new_comp);
+        }
+        if ( L2(comp.firstValue()-comp.lastValue()) < tol ){
+            //TODO: check sizes!!!
+            set_last_point( comp, comp.segs.front().at0() ); 
+        }
+        result.push_back(comp);
+    }
+    return result;
+    return f;
+}
+
+
 }  // namespace Geom
 
 
index dd1a8e11cf875f2b03fa5bba880cbc2693df879d..c61052da71689af952349f592e4eea84af1b58b2 100644 (file)
@@ -79,6 +79,8 @@ Piecewise<D2<SBasis> > operator*(Piecewise<D2<SBasis> > const &a, Matrix const &
 
 Piecewise<D2<SBasis> > force_continuity(Piecewise<D2<SBasis> > const &f, double tol=0, bool closed=false);
 
+std::vector<Piecewise<D2<SBasis> > > fuse_nearby_ends(std::vector<Piecewise<D2<SBasis> > > const &f, double tol=0);
+
 std::vector<Geom::Piecewise<Geom::D2<Geom::SBasis> > > split_at_discontinuities (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwsbin, double tol = .0001);
 
 class CoordIterator
@@ -114,13 +116,25 @@ inline CoordIterator iterateCoord(Piecewise<D2<SBasis> > const &a, unsigned d) {
 }
 
 //bounds specializations with order
-inline Rect bounds_fast(D2<SBasis> const & s, unsigned order=0) {
-    return Rect(bounds_fast(s[X], order),
-                bounds_fast(s[Y], order));
+inline OptRect bounds_fast(D2<SBasis> const & s, unsigned order=0) {
+    OptRect retval;
+    OptInterval xint = bounds_fast(s[X], order);
+    if (xint) {
+        OptInterval yint = bounds_fast(s[Y], order);
+        if (yint) {
+            retval = Rect(*xint, *yint);
+        }
+    }
+    return retval;
 }
-inline Rect bounds_local(D2<SBasis> const & s, Interval i, unsigned order=0) {
-    return Rect(bounds_local(s[X], i, order),
-                bounds_local(s[Y], i, order));
+inline OptRect bounds_local(D2<SBasis> const & s, OptInterval i, unsigned order=0) {
+    OptRect retval;
+    OptInterval xint = bounds_local(s[X], i, order);
+    OptInterval yint = bounds_local(s[Y], i, order);
+    if (xint && yint) {
+        retval = Rect(*xint, *yint);
+    }
+    return retval;
 }
 
 }
index 7e2bbae53ebfb4938872c8a35e8b9706eb1b926e..a14e3b0ebe027b4aa28ba12720b3a41d8f7e7744 100644 (file)
@@ -400,19 +400,19 @@ namespace Geom{
 
 //Some D2 Fragment implementation which requires rect:
 template <typename T>
-Rect bounds_fast(const D2<T> &a) {
-    boost::function_requires<FragmentConcept<T> >();        
-    return Rect(bounds_fast(a[X]), bounds_fast(a[Y]));
+OptRect bounds_fast(const D2<T> &a) {
+    boost::function_requires<FragmentConcept<T> >();
+    return OptRect(bounds_fast(a[X]), bounds_fast(a[Y]));
 }
 template <typename T>
-Rect bounds_exact(const D2<T> &a) {
-    boost::function_requires<FragmentConcept<T> >();        
-    return Rect(bounds_exact(a[X]), bounds_exact(a[Y]));
+OptRect bounds_exact(const D2<T> &a) {
+    boost::function_requires<FragmentConcept<T> >();
+    return OptRect(bounds_exact(a[X]), bounds_exact(a[Y]));
 }
 template <typename T>
-Rect bounds_local(const D2<T> &a, const Interval &t) {
-    boost::function_requires<FragmentConcept<T> >();        
-    return Rect(bounds_local(a[X], t), bounds_local(a[Y], t));
+OptRect bounds_local(const D2<T> &a, const OptInterval &t) {
+    boost::function_requires<FragmentConcept<T> >();
+    return OptRect(bounds_local(a[X], t), bounds_local(a[Y], t));
 }
 };
 
index bf2b72b63bc1f7e66fe65aea2a5b965ffc7ad28a..f2b6b6be283db411ba74677d8a354324626e55e6 100644 (file)
@@ -31,6 +31,7 @@
 #include <2geom/elliptical-arc.h>
 #include <2geom/bezier-curve.h>
 #include <2geom/poly.h>
+#include <2geom/sbasis-math.h>
 
 #include <cfloat>
 #include <limits>
@@ -42,7 +43,7 @@ namespace Geom
 {
 
 
-Rect EllipticalArc::boundsExact() const
+OptRect EllipticalArc::boundsExact() const
 {
        std::vector<double> extremes(4);
        double cosrot = std::cos(rotation_angle());
index 24b4fcf4636d2fbbab6ee14fea11492503ef3c4c..25c79a363e3900ab877efd58b1fe430d931e12e2 100644 (file)
@@ -168,17 +168,17 @@ class EllipticalArc : public Curve
     }
     
     
-    Rect boundsFast() const
+    virtual OptRect boundsFast() const
     {
-       return boundsExact();
+        return boundsExact();
     }
   
-    Rect boundsExact() const;
+    virtual OptRect boundsExact() const;
     
     // TODO: native implementation of the following methods
-    Rect boundsLocal(Interval i, unsigned int deg) const
+    virtual OptRect boundsLocal(OptInterval i, unsigned int deg) const
     {
-       return SBasisCurve(toSBasis()).boundsLocal(i, deg);
+        return SBasisCurve(toSBasis()).boundsLocal(i, deg);
     }
     
     std::vector<double> roots(double v, Dim2 d) const;
index 184801ef42c4ccbda56bcf947e53427f27557aec..15740faf0e1db319440b728f45c517ad74291f28 100644 (file)
@@ -62,6 +62,7 @@ class NotInvertible;
 class ContinuityError;
 
 class Interval;
+class OptInterval;
 class Linear;
 class Hat;
 class Tri;
@@ -81,6 +82,7 @@ class SBasis;
 class SBasisCurve;
 
 typedef D2<Interval> Rect;
+class OptRect;
 
 class Shape;
 class Region;
index d0689981a78ac2388a753d65588b4d146f60dd63..f9b1a664bcc0c451d06e017c7665019c8fc16684 100644 (file)
@@ -9,6 +9,7 @@
 #include <2geom/geom.h>
 #include <2geom/point.h>
 #include <algorithm>
+#include <2geom/rect.h>
 
 namespace Geom {
 
@@ -313,6 +314,14 @@ rect_line_intersect(Geom::Point const &c0, Geom::Point const &c1,
     return results;
 }
 
+std::vector<Geom::Point>
+rect_line_intersect(Geom::Rect &r,
+                    Geom::Point const &p0, Geom::Point const &p1)
+{
+    return rect_line_intersect(r.min(), r.max(), p0, p1);
+}
+
+
 /**
  * polyCentroid: Calculates the centroid (xCentroid, yCentroid) and area of a polygon, given its
  * vertices (x[0], y[0]) ... (x[n-1], y[n-1]). It is assumed that the contour is closed, i.e., that
index aeb40f7e1b14a662a84bb2555e02c383c0134612..d0af7d7d24a5971d95c0bd5d3fc4dd635fe0e3f0 100644 (file)
@@ -38,6 +38,7 @@
 
 #include <vector>
 #include <2geom/point.h>
+#include <2geom/rect.h>
 
 namespace Geom {
 
@@ -73,6 +74,11 @@ std::vector<Geom::Point>
 rect_line_intersect(Geom::Point const &E, Geom::Point const &F,
                     Geom::Point const &p0, Geom::Point const &p1);
 
+
+std::vector<Geom::Point>
+rect_line_intersect(Geom::Rect &r,
+                    Geom::Point const &p0, Geom::Point const &p1);
+
 int centroid(std::vector<Geom::Point> p, Geom::Point& centroid, double &area);
 
 }
index 3e12876824e7e1e51c5df1e90426858d03e843a9..ccb95afdbc0b90f33dabf6c0e18ee4127a42c491 100644 (file)
@@ -116,17 +116,17 @@ class HLineSegment : public Curve
         m_line_seg.setFinal( Point(finalPoint()[X], _y) );
     }
 
-    Rect boundsFast() const
+    virtual OptRect boundsFast() const
     {
         return boundsExact();
     }
 
-    Rect boundsExact() const
+    virtual OptRect boundsExact() const
     {
         return Rect( initialPoint(), finalPoint() );
     }
 
-    Rect boundsLocal(Interval i, unsigned deg) const
+    virtual OptRect boundsLocal(OptInterval i, unsigned deg) const
     {
         return m_line_seg.boundsLocal(i, deg);
     }
@@ -355,17 +355,17 @@ class VLineSegment : public Curve
         m_line_seg.setFinal( Point(_x, finalPoint()[Y]) );
     }
 
-    Rect boundsFast() const
+    virtual OptRect boundsFast() const
     {
         return boundsExact();
     }
 
-    Rect boundsExact() const
+    virtual OptRect boundsExact() const
     {
         return Rect( initialPoint(), finalPoint() );
     }
 
-    Rect boundsLocal(Interval i, unsigned deg) const
+    virtual OptRect boundsLocal(OptInterval i, unsigned deg) const
     {
         return m_line_seg.boundsLocal(i, deg);
     }
index 8f7a0b2a167bf9e40cb9b81635757a657941d920..00952858603b72f6f0d2f27ac2ca3fdbeb681fd0 100644 (file)
 
 namespace Geom {
 
-/* Although an Interval where _b[0] > _b[1] is considered empty, for proper functioning of other methods,
- * a proper empty Interval is [+infinity, -infinity]. Then, expandTo(p) will set the interval to [p,p].
+class Interval;
+
+/** 
+ * \brief This class represents a range of numbers that is never empty.
+ *
+ * The endpoints are included in the range.
  */
 class Interval {
 private:
     Coord _b[2];
 
 public:
-    // The default constructor creates an empty interval, that ranges from +infinity to -infinity.
-    // Doing an expandTo(p) on this empty interval will correctly set the whole interval to [p,p].
-    explicit Interval() { _b[0] = +infinity();  _b[1] = -infinity(); }
+    /// The default constructor creates an interval [0,0]  DO NOT RELY ON THIS, BEST NOT TO USE THIS CONSTRUCTOR
+    explicit Interval() { _b[0] = 0;  _b[1] = 0; }
     explicit Interval(Coord u) { _b[0] = _b[1] = u; }
     /* When creating an Interval using the constructor specifying the exact range, the created interval
      * will be [u,v] when u<=v ; and will be [v,u] when v < u !!!
@@ -78,7 +81,8 @@ public:
     inline Coord extent() const { return _b[1] - _b[0]; }
     inline Coord middle() const { return (_b[1] + _b[0]) * 0.5; }
     
-    inline bool isEmpty() const { return _b[0] > _b[1]; }
+//    inline bool isEmpty() const { return _b[0] > _b[1]; }
+    inline bool isSingular() const { return _b[0] == _b[1]; }
     inline bool contains(Coord val) const { return _b[0] <= val && val <= _b[1]; }
     bool contains(const Interval & val) const { return _b[0] <= val._b[0] && val._b[1] <= _b[1]; }
     bool intersects(const Interval & val) const {
@@ -167,9 +171,15 @@ public:
         return result;
     }
     
+    /** When this would create an empty interval, the interval will be the centerpoint of the old range only.
+     */
     inline void expandBy(double amnt) {
         _b[0] -= amnt;
         _b[1] += amnt;
+        if (_b[0] > _b[1]) {
+            Coord halfway = (_b[0]+_b[1])/2;
+            _b[0] = _b[1] = halfway;
+        }
     }
     
     inline void unionWith(const Interval & a) {
@@ -214,12 +224,42 @@ inline Interval unify(const Interval & a, const Interval & b) {
     return Interval(std::min(a.min(), b.min()),
                     std::max(a.max(), b.max()));
 }
-inline boost::optional<Interval> intersect(const Interval & a, const Interval & b) {
+
+/**
+ * \brief OptInterval is an Interval that can be empty.
+ */
+class OptInterval : public boost::optional<Interval> {
+public:
+    OptInterval() : boost::optional<Interval>() {};
+    OptInterval(Interval const &a) : boost::optional<Interval>(a) {};
+    OptInterval(Coord u) : boost::optional<Interval>(Interval(u)) {};
+    OptInterval(Coord u, Coord v) : boost::optional<Interval>(Interval(u,v)) {};
+
+    /**
+     * Check whether this OptInterval is empty or not.
+     */
+    inline bool isEmpty() { return (*this == false); };
+    
+    /**
+     * If \c this is empty, copy argument \c a. Otherwise, union with it (and do nothing when \c a is empty)
+     */
+    inline void unionWith(const OptInterval & a) {
+        if (a) {
+            if (*this) { // check that we are not empty
+                (*this)->unionWith(*a);
+            } else {
+                *this = a;
+            }
+        }
+    }
+};
+
+inline OptInterval intersect(const Interval & a, const Interval & b) {
     Coord u = std::max(a.min(), b.min()),
           v = std::min(a.max(), b.max());
     //technically >= might be incorrect, but singulars suck
-    return u >= v ? boost::optional<Interval>()
-                  : boost::optional<Interval>(Interval(u, v));
+    return u >= v ? OptInterval()
+                  : OptInterval(Interval(u, v));
 }
 
 }
index 4594e17bed6250cd4fda53551d0c9ffdcceaafd7..e8828b283f3df5064d6f4bcaf4a474246ff483ef 100644 (file)
 #include <2geom/interval.h>
 #include <2geom/isnan.h>
 
+
+//#define USE_SBASIS_OF
+
+#ifdef USE_SBASIS_OF
+
+#include "linear-of.h"
+
+#else
+
 namespace Geom{
 
 inline double lerp(double t, double a, double b) { return a*(1-t) + b*t; }
@@ -100,9 +109,9 @@ public:
     //defined in sbasis.h
     inline SBasis toSBasis() const;
 
-    inline Interval bounds_exact() const { return Interval(a[0], a[1]); }
-    inline Interval bounds_fast() const { return bounds_exact(); }
-    inline Interval bounds_local(double u, double v) const { return Interval(valueAt(u), valueAt(v)); }
+    inline OptInterval bounds_exact() const { return Interval(a[0], a[1]); }
+    inline OptInterval bounds_fast() const { return bounds_exact(); }
+    inline OptInterval bounds_local(double u, double v) const { return Interval(valueAt(u), valueAt(v)); }
 
     operator Tri() const {
         return a[1] - a[0];
@@ -169,7 +178,9 @@ inline Linear operator/=(Linear & a, double b) {
     a[0] /= b; a[1] /= b;
     return a;
 }
-};
+
+}
+#endif
 
 #endif //SEEN_LINEAR_H
 
index 705767f13d58bddec830726981f7b78a441f1abc..71beab9cbb469330df7b1b374ec994f1aee62a9d 100644 (file)
@@ -50,34 +50,34 @@ namespace Geom
  */
 
 double nearest_point( Point const& p,
-                                         D2<SBasis> const& c,
-                                         D2<SBasis> const& dc,
-                             double from, double to )
+                      D2<SBasis> const& c,
+                      D2<SBasis> const& dc,
+                      double from, double to )
 {
-       if ( from > to ) std::swap(from, to);
-       if ( from < 0 || to > 1 )
-       {
-               THROW_RANGEERROR("[from,to] interval out of bounds");
-       }
-       if (c.isConstant()) return from;
-       SBasis dd = dot(c - p, dc);
-       std::vector<double> zeros = Geom::roots(dd);
+    if ( from > to ) std::swap(from, to);
+    if ( from < 0 || to > 1 )
+    {
+        THROW_RANGEERROR("[from,to] interval out of bounds");
+    }
+    if (c.isConstant()) return from;
+    SBasis dd = dot(c - p, dc);
+    std::vector<double> zeros = Geom::roots(dd);
 
-       double closest = from;
-       double min_dist_sq = L2sq(c(from) - p);
-       double distsq;
-       for ( unsigned int i = 0; i < zeros.size(); ++i )
-       {
-               distsq = L2sq(c(zeros[i]) - p);
-               if ( min_dist_sq > L2sq(c(zeros[i]) - p) )
-               {
-                       closest = zeros[i];
-                       min_dist_sq = distsq;
-               }
-       }
-       if ( min_dist_sq > L2sq( c(to) - p ) )
-               closest = to;
-       return closest;
+    double closest = from;
+    double min_dist_sq = L2sq(c(from) - p);
+    double distsq;
+    for ( unsigned int i = 0; i < zeros.size(); ++i )
+    {
+        distsq = L2sq(c(zeros[i]) - p);
+        if ( min_dist_sq > L2sq(c(zeros[i]) - p) )
+        {
+            closest = zeros[i];
+            min_dist_sq = distsq;
+        }
+    }
+    if ( min_dist_sq > L2sq( c(to) - p ) )
+        closest = to;
+    return closest;
 
 }
 
@@ -89,54 +89,54 @@ double nearest_point( Point const& p,
 
 std::vector<double>
 all_nearest_points( Point const& p,
-                   D2<SBasis> const& c,
-                   D2<SBasis> const& dc,
-                   double from, double to )
+            D2<SBasis> const& c,
+            D2<SBasis> const& dc,
+            double from, double to )
 {
-       std::swap(from, to);
-       if ( from > to ) std::swap(from, to);
-       if ( from < 0 || to > 1 )
-       {
-               THROW_RANGEERROR("[from,to] interval out of bounds");
-       }
+    std::swap(from, to);
+    if ( from > to ) std::swap(from, to);
+    if ( from < 0 || to > 1 )
+    {
+        THROW_RANGEERROR("[from,to] interval out of bounds");
+    }
 
-       std::vector<double> result;
-       if (c.isConstant())
-       {
-           result.push_back(from);
-           return result;
-       }
-       SBasis dd = dot(c - p, dc);
+    std::vector<double> result;
+    if (c.isConstant())
+    {
+        result.push_back(from);
+        return result;
+    }
+    SBasis dd = dot(c - p, dc);
 
-       std::vector<double> zeros = Geom::roots(dd);
-       std::vector<double> candidates;
-       candidates.push_back(from);
-       candidates.insert(candidates.end(), zeros.begin(), zeros.end());
-       candidates.push_back(to);
-       std::vector<double> distsq;
-       distsq.reserve(candidates.size());
-       for ( unsigned int i = 0; i < candidates.size(); ++i )
-       {
-               distsq.push_back( L2sq(c(candidates[i]) - p) );
-       }
-       unsigned int closest = 0;
-       double dsq = distsq[0];
-       for ( unsigned int i = 1; i < candidates.size(); ++i )
-       {
-               if ( dsq > distsq[i] )
-               {
-                       closest = i;
-                       dsq = distsq[i];
-               }
-       }
-       for ( unsigned int i = 0; i < candidates.size(); ++i )
-       {
-               if( distsq[closest] == distsq[i] )
-               {
-                       result.push_back(candidates[i]);
-               }
-       }
-       return result;
+    std::vector<double> zeros = Geom::roots(dd);
+    std::vector<double> candidates;
+    candidates.push_back(from);
+    candidates.insert(candidates.end(), zeros.begin(), zeros.end());
+    candidates.push_back(to);
+    std::vector<double> distsq;
+    distsq.reserve(candidates.size());
+    for ( unsigned int i = 0; i < candidates.size(); ++i )
+    {
+        distsq.push_back( L2sq(c(candidates[i]) - p) );
+    }
+    unsigned int closest = 0;
+    double dsq = distsq[0];
+    for ( unsigned int i = 1; i < candidates.size(); ++i )
+    {
+        if ( dsq > distsq[i] )
+        {
+            closest = i;
+            dsq = distsq[i];
+        }
+    }
+    for ( unsigned int i = 0; i < candidates.size(); ++i )
+    {
+        if( distsq[closest] == distsq[i] )
+        {
+            result.push_back(candidates[i]);
+        }
+    }
+    return result;
 }
 
 
@@ -145,141 +145,141 @@ all_nearest_points( Point const& p,
 
 
 double nearest_point( Point const& p,
-                                         Piecewise< D2<SBasis> > const& c,
-                             double from, double to )
+                      Piecewise< D2<SBasis> > const& c,
+                      double from, double to )
 {
-       if ( from > to ) std::swap(from, to);
-       if ( from < c.cuts[0] || to > c.cuts[c.size()] )
-       {
-               THROW_RANGEERROR("[from,to] interval out of bounds");
-       }
+    if ( from > to ) std::swap(from, to);
+    if ( from < c.cuts[0] || to > c.cuts[c.size()] )
+    {
+        THROW_RANGEERROR("[from,to] interval out of bounds");
+    }
 
-       unsigned int si = c.segN(from);
-       unsigned int ei = c.segN(to);
-       if ( si == ei )
-       {
-               double nearest=
-                       nearest_point(p, c[si], c.segT(from, si), c.segT(to, si));
-               return c.mapToDomain(nearest, si);
-       }
-       double t;
-       double nearest = nearest_point(p, c[si], c.segT(from, si));
-       unsigned int ni = si;
-       double dsq;
-       double mindistsq = distanceSq(p, c[si](nearest));
-       Rect bb;
-       for ( unsigned int i = si + 1; i < ei; ++i )
-       {
-               bb = bounds_fast(c[i]);
-               dsq = distanceSq(p, bb);
-               if ( mindistsq <= dsq ) continue;
-               t = nearest_point(p, c[i]);
-               dsq = distanceSq(p, c[i](t));
-               if ( mindistsq > dsq )
-               {
-                       nearest = t;
-                       ni = i;
-                       mindistsq = dsq;
-               }
-       }
-       bb = bounds_fast(c[ei]);
-       dsq = distanceSq(p, bb);
-       if ( mindistsq > dsq )
-       {
-               t = nearest_point(p, c[ei], 0, c.segT(to, ei));
-               dsq = distanceSq(p, c[ei](t));
-               if ( mindistsq > dsq )
-               {
-                       nearest = t;
-                       ni = ei;
-               }
-       }
-       return c.mapToDomain(nearest, ni);
+    unsigned int si = c.segN(from);
+    unsigned int ei = c.segN(to);
+    if ( si == ei )
+    {
+        double nearest=
+            nearest_point(p, c[si], c.segT(from, si), c.segT(to, si));
+        return c.mapToDomain(nearest, si);
+    }
+    double t;
+    double nearest = nearest_point(p, c[si], c.segT(from, si));
+    unsigned int ni = si;
+    double dsq;
+    double mindistsq = distanceSq(p, c[si](nearest));
+    Rect bb(Geom::Point(0,0),Geom::Point(0,0));
+    for ( unsigned int i = si + 1; i < ei; ++i )
+    {
+        bb = *bounds_fast(c[i]);
+        dsq = distanceSq(p, bb);
+        if ( mindistsq <= dsq ) continue;
+        t = nearest_point(p, c[i]);
+        dsq = distanceSq(p, c[i](t));
+        if ( mindistsq > dsq )
+        {
+            nearest = t;
+            ni = i;
+            mindistsq = dsq;
+        }
+    }
+    bb = *bounds_fast(c[ei]);
+    dsq = distanceSq(p, bb);
+    if ( mindistsq > dsq )
+    {
+        t = nearest_point(p, c[ei], 0, c.segT(to, ei));
+        dsq = distanceSq(p, c[ei](t));
+        if ( mindistsq > dsq )
+        {
+            nearest = t;
+            ni = ei;
+        }
+    }
+    return c.mapToDomain(nearest, ni);
 }
 
 std::vector<double>
 all_nearest_points( Point const& p,
                     Piecewise< D2<SBasis> > const& c,
-                           double from, double to )
+                    double from, double to )
 {
-       if ( from > to ) std::swap(from, to);
-       if ( from < c.cuts[0] || to > c.cuts[c.size()] )
-       {
-               THROW_RANGEERROR("[from,to] interval out of bounds");
-       }
+    if ( from > to ) std::swap(from, to);
+    if ( from < c.cuts[0] || to > c.cuts[c.size()] )
+    {
+        THROW_RANGEERROR("[from,to] interval out of bounds");
+    }
 
-       unsigned int si = c.segN(from);
-       unsigned int ei = c.segN(to);
-       if ( si == ei )
-       {
-               std::vector<double>     all_nearest =
-                       all_nearest_points(p, c[si], c.segT(from, si), c.segT(to, si));
-               for ( unsigned int i = 0; i < all_nearest.size(); ++i )
-               {
-                       all_nearest[i] = c.mapToDomain(all_nearest[i], si);
-               }
-               return all_nearest;
-       }
-       std::vector<double> all_t;
-       std::vector< std::vector<double> > all_np;
-       all_np.push_back( all_nearest_points(p, c[si], c.segT(from, si)) );
-       std::vector<unsigned int> ni;
-       ni.push_back(si);
-       double dsq;
-       double mindistsq = distanceSq( p, c[si](all_np.front().front()) );
-       Rect bb;
-       for ( unsigned int i = si + 1; i < ei; ++i )
-       {
-               bb = bounds_fast(c[i]);
-               dsq = distanceSq(p, bb);
-               if ( mindistsq < dsq ) continue;
-               all_t = all_nearest_points(p, c[i]);
-               dsq = distanceSq( p, c[i](all_t.front()) );
-               if ( mindistsq > dsq )
-               {
-                       all_np.clear();
-                       all_np.push_back(all_t);
-                       ni.clear();
-                       ni.push_back(i);
-                       mindistsq = dsq;
-               }
-               else if ( mindistsq == dsq )
-               {
-                       all_np.push_back(all_t);
-                       ni.push_back(i);
-               }
-       }
-       bb = bounds_fast(c[ei]);
-       dsq = distanceSq(p, bb);
-       if ( mindistsq >= dsq )
-       {
-               all_t = all_nearest_points(p, c[ei], 0, c.segT(to, ei));
-               dsq = distanceSq( p, c[ei](all_t.front()) );
-               if ( mindistsq > dsq )
-               {
-                       for ( unsigned int i = 0; i < all_t.size(); ++i )
-                       {
-                               all_t[i] = c.mapToDomain(all_t[i], ei);
-                       }
-                       return all_t;
-               }
-               else if ( mindistsq == dsq )
-               {
-                       all_np.push_back(all_t);
-                       ni.push_back(ei);
-               }
-       }
-       std::vector<double> all_nearest;
-       for ( unsigned int i = 0; i < all_np.size(); ++i )
-       {
-               for ( unsigned int j = 0; j < all_np[i].size(); ++j )
-               {
-                       all_nearest.push_back( c.mapToDomain(all_np[i][j], ni[i]) );
-               }
-       }
-       all_nearest.erase(std::unique(all_nearest.begin(), all_nearest.end()),
-                         all_nearest.end());
-       return all_nearest;
+    unsigned int si = c.segN(from);
+    unsigned int ei = c.segN(to);
+    if ( si == ei )
+    {
+        std::vector<double>    all_nearest =
+            all_nearest_points(p, c[si], c.segT(from, si), c.segT(to, si));
+        for ( unsigned int i = 0; i < all_nearest.size(); ++i )
+        {
+            all_nearest[i] = c.mapToDomain(all_nearest[i], si);
+        }
+        return all_nearest;
+    }
+    std::vector<double> all_t;
+    std::vector< std::vector<double> > all_np;
+    all_np.push_back( all_nearest_points(p, c[si], c.segT(from, si)) );
+    std::vector<unsigned int> ni;
+    ni.push_back(si);
+    double dsq;
+    double mindistsq = distanceSq( p, c[si](all_np.front().front()) );
+    Rect bb(Geom::Point(0,0),Geom::Point(0,0));
+    for ( unsigned int i = si + 1; i < ei; ++i )
+    {
+        bb = *bounds_fast(c[i]);
+        dsq = distanceSq(p, bb);
+        if ( mindistsq < dsq ) continue;
+        all_t = all_nearest_points(p, c[i]);
+        dsq = distanceSq( p, c[i](all_t.front()) );
+        if ( mindistsq > dsq )
+        {
+            all_np.clear();
+            all_np.push_back(all_t);
+            ni.clear();
+            ni.push_back(i);
+            mindistsq = dsq;
+        }
+        else if ( mindistsq == dsq )
+        {
+            all_np.push_back(all_t);
+            ni.push_back(i);
+        }
+    }
+    bb = *bounds_fast(c[ei]);
+    dsq = distanceSq(p, bb);
+    if ( mindistsq >= dsq )
+    {
+        all_t = all_nearest_points(p, c[ei], 0, c.segT(to, ei));
+        dsq = distanceSq( p, c[ei](all_t.front()) );
+        if ( mindistsq > dsq )
+        {
+            for ( unsigned int i = 0; i < all_t.size(); ++i )
+            {
+                all_t[i] = c.mapToDomain(all_t[i], ei);
+            }
+            return all_t;
+        }
+        else if ( mindistsq == dsq )
+        {
+            all_np.push_back(all_t);
+            ni.push_back(ei);
+        }
+    }
+    std::vector<double> all_nearest;
+    for ( unsigned int i = 0; i < all_np.size(); ++i )
+    {
+        for ( unsigned int j = 0; j < all_np[i].size(); ++j )
+        {
+            all_nearest.push_back( c.mapToDomain(all_np[i][j], ni[i]) );
+        }
+    }
+    all_nearest.erase(std::unique(all_nearest.begin(), all_nearest.end()),
+                      all_nearest.end());
+    return all_nearest;
 }
 
 } // end namespace Geom
index 715c67c23264fe2b8091f40f6db8d6599c9e0be0..5a4e7602056e1234948c82690f558d1d1e17a874 100644 (file)
@@ -23,9 +23,9 @@ int winding(Path const &path, Point p) {
   Path::const_iterator start;
   for(Path::const_iterator iter = path.begin(); ; ++iter) {
     if(iter == path.end_closed()) { return 0; }
-    if(iter->initialPoint()[Y]!=p[Y])  { start = iter; break; }
-    if(iter->finalPoint()[Y]!=p[Y])    { start = iter; break; }
-    if(iter->boundsFast().height()!=0.){ start = iter; break; }
+    if(iter->initialPoint()[Y]!=p[Y])   { start = iter; break; }
+    if(iter->finalPoint()[Y]!=p[Y])     { start = iter; break; }
+    if(iter->boundsFast()->height()!=0.){ start = iter; break; }
   }
   int wind = 0;
   unsigned cnt = 0;
@@ -36,7 +36,7 @@ int winding(Path const &path, Point p) {
     cnt++;
     if(cnt > path.size()) return wind;  //some bug makes this required
     starting = false;
-    Rect bounds = iter->boundsFast();
+    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
@@ -70,7 +70,7 @@ int winding(Path const &path, Point p) {
         next++;
         for(; ; next++) {
             if(next == path.end_closed()) next = path.begin();
-            Rect bnds = next->boundsFast();
+            Rect bnds = *(next->boundsFast());
             //TODO: X considerations
             if(bnds.height() > 0) {
                 //It has diverged
@@ -267,13 +267,13 @@ 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";
-    Rect Ar = A.boundsLocal(Interval(Al, Ah));
-    if(Ar.isEmpty()) return;
+    OptRect Ar = A.boundsLocal(Interval(Al, Ah));
+    if (!Ar) return;
 
-    Rect Br = B.boundsLocal(Interval(Bl, Bh));
-    if(Br.isEmpty()) return;
+    OptRect Br = B.boundsLocal(Interval(Bl, Bh));
+    if (!Br) return;
     
-    if(!Ar.intersects(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 
index c04d9d08d4c7d3ddf134ffce434f6d0fd61602f5..136e6d4818fee5048c70065a9aeecb9f2a67dd05 100644 (file)
@@ -43,21 +43,21 @@ using namespace Geom::PathInternal;
 namespace Geom
 {
 
-Rect Path::boundsFast() const {
-  Rect bounds;
+OptRect Path::boundsFast() const {
+  OptRect bounds;
   if (empty()) return bounds;
   bounds=front().boundsFast();
   const_iterator iter = begin();
   if ( iter != end() ) {
-         for ( ++iter; iter != end() ; ++iter ) {
-           bounds.unionWith(iter->boundsFast());
-         }
+    for ( ++iter; iter != end() ; ++iter ) {
+      bounds.unionWith(iter->boundsFast());
+    }
   }
   return bounds;
 }
 
-Rect Path::boundsExact() const {
-  Rect bounds;
+OptRect Path::boundsExact() const {
+  OptRect bounds;
   if (empty()) return bounds;
   bounds=front().boundsExact();
   const_iterator iter = begin();
@@ -143,10 +143,10 @@ Path::allNearestPoints(Point const& _point, double from, double to) const
        double dsq;
        double mindistsq
                = distanceSq( _point, _path[si].pointAt( all_np.front().front() ) );
-       Rect bb;
+       Rect bb(Geom::Point(0,0),Geom::Point(0,0));
        for ( unsigned int i = si + 1; i < ei; ++i )
        {
-               bb = _path[i].boundsFast();
+               bb = *(_path[i].boundsFast());
                dsq = distanceSq(_point, bb);
                if ( mindistsq < dsq ) continue;
                all_t = _path[i].allNearestPoints(_point);
@@ -165,7 +165,7 @@ Path::allNearestPoints(Point const& _point, double from, double to) const
                        ni.push_back(i);
                }
        }
-       bb = _path[ei].boundsFast();
+       bb = *(_path[ei].boundsFast());
        dsq = distanceSq(_point, bb);
        if ( mindistsq >= dsq )
        {
@@ -254,10 +254,10 @@ double Path::nearestPoint(Point const &_point, double from, double to, double *d
        unsigned int ni = si;
        double dsq;
        double mindistsq = distanceSq(_point, _path[si].pointAt(nearest));
-       Rect bb;
+       Rect bb(Geom::Point(0,0),Geom::Point(0,0));
        for ( unsigned int i = si + 1; i < ei; ++i )
        {
-               bb = _path[i].boundsFast();
+               bb = *(_path[i].boundsFast());
                dsq = distanceSq(_point, bb);
                if ( mindistsq <= dsq ) continue;
                t = _path[i].nearestPoint(_point);
@@ -269,7 +269,7 @@ double Path::nearestPoint(Point const &_point, double from, double to, double *d
                        mindistsq = dsq;
                }
        }
-       bb = _path[ei].boundsFast();
+       bb = *(_path[ei].boundsFast());
        dsq = distanceSq(_point, bb);
        if ( mindistsq > dsq )
        {
index e02b749e789093f7811796f415209c71f6cba731..b95a54eaae8fb737e125630154454123c0009ab1 100644 (file)
@@ -259,8 +259,8 @@ public:
   bool closed() const { return closed_; }
   void close(bool closed=true) { closed_ = closed; }
 
-  Rect boundsFast() const;
-  Rect boundsExact() const;
+  OptRect boundsFast() const;
+  OptRect boundsExact() const;
 
   Piecewise<D2<SBasis> > toPwSb() const {
     Piecewise<D2<SBasis> > ret;
@@ -566,8 +566,9 @@ public:
   }
 
 
-  /*
+  /**
    * It is important to note that the coordinates passed to appendNew should be finite!
+   * If one of the coordinates is infinite, 2geom will throw a ContinuityError exception.
    */
 
   template <typename CurveType, typename A>
index 39a00d8dc44f3803de14679a64233615a3a0e0b1..790265c7649bb0939d5856264b5467fe35fce524 100644 (file)
@@ -56,12 +56,11 @@ PathVector reverse_paths_and_order (PathVector const & path_in)
     return path_out;
 }
 
-// FIXME: this function does not work for empty paths, because Rect cannot be initialized empty yet. check rect.h
-Rect bounds_fast( PathVector const& pv )
+OptRect bounds_fast( PathVector const& pv )
 {
     typedef PathVector::const_iterator const_iterator;
     
-    Rect bound;
+    OptRect bound;
     if (pv.empty()) return bound;
     
     bound = (pv.begin())->boundsFast();
@@ -72,12 +71,11 @@ Rect bounds_fast( PathVector const& pv )
     return bound;
 }
 
-// FIXME: this function does not work for empty paths, because Rect cannot be initialized empty yet. check rect.h
-Rect bounds_exact( PathVector const& pv )
+OptRect bounds_exact( PathVector const& pv )
 {
     typedef PathVector::const_iterator const_iterator;
     
-    Rect bound;
+    OptRect bound;
     if (pv.empty()) return bound;
     
     bound = (pv.begin())->boundsExact();
index 5df3ad00c2da9fa47e6534dc9810dd94c856b475..9efae7c7319ada1bcade2c2b6428ca75d27bfb12 100644 (file)
@@ -102,8 +102,8 @@ Geom::Point finalPoint(PathVector const &path_in)
 
 PathVector reverse_paths_and_order (PathVector const & path_in);
 
-Rect bounds_fast( PathVector const & pv );
-Rect bounds_exact( PathVector const & pv );
+OptRect bounds_fast( PathVector const & pv );
+OptRect bounds_exact( PathVector const & pv );
 
 struct PathVectorPosition {
     // pathvector[path_nr].pointAt(t) is the position
index ec3ba26ce9094337972561418d69002ef989b3d7..bbd1f054aeb423f56f9550b65ab1179c4a91c1fa 100644 (file)
@@ -80,6 +80,8 @@ class Piecewise {
         push_cut(1.);
     }
 
+    unsigned input_dim(){return 1;}
+
     typedef typename T::output_type output_type;
 
     explicit Piecewise(const output_type & v) {
@@ -198,14 +200,18 @@ class Piecewise {
     //Transforms the domain into another interval
     inline void setDomain(Interval dom) {
         if(empty()) return;
+        /* dom can not be empty
         if(dom.isEmpty()) {
             cuts.clear(); segs.clear();
             return;
-        }
+        }*/
         double cf = cuts.front();
         double o = dom.min() - cf, s = dom.extent() / (cuts.back() - cf);
         for(unsigned i = 0; i <= size(); i++)
             cuts[i] = (cuts[i] - cf) * s + o;
+        //fix floating point precision errors.
+        cuts[0] = dom.min();
+        cuts[size()] = dom.max();
     }
 
     //Concatenates this Piecewise function with another, offseting time of the other to match the end.
@@ -227,15 +233,15 @@ class Piecewise {
     inline void continuousConcat(const Piecewise<T> &other) {
         boost::function_requires<AddableConcept<typename T::output_type> >();
         if(other.empty()) return;
-        typename T::output_type y = segs.back().at1() - other.segs.front().at0();
 
         if(empty()) {
             for(unsigned i = 0; i < other.size(); i++)
-                push_seg(other[i] + y);
+                push_seg(other[i]);
             cuts = other.cuts;
             return;
         }
 
+        typename T::output_type y = segs.back().at1() - other.segs.front().at0();
         double t = cuts.back() - other.cuts.front();
         for(unsigned i = 0; i < other.size(); i++)
             push(other[i] + y, other.cuts[i + 1] + t);
@@ -278,11 +284,12 @@ inline typename FragmentConcept<T>::BoundsType bounds_exact(const Piecewise<T> &
 }
 
 template<typename T>
-inline typename FragmentConcept<T>::BoundsType bounds_local(const Piecewise<T> &f, const Interval &m) {
+inline typename FragmentConcept<T>::BoundsType bounds_local(const Piecewise<T> &f, const OptInterval &_m) {
     boost::function_requires<FragmentConcept<T> >();
 
-    if(f.empty()) return typename FragmentConcept<T>::BoundsType();
-    if(m.isEmpty()) return typename FragmentConcept<T>::BoundsType(f(m.min()));
+    if(f.empty() || !_m) return typename FragmentConcept<T>::BoundsType();
+    Interval const &m = *_m;
+    if(m.isSingular()) return typename FragmentConcept<T>::BoundsType(f(m.min()));
 
     unsigned fi = f.segN(m.min()), ti = f.segN(m.max());
     double ft = f.segT(m.min(), fi), tt = f.segT(m.max(), ti);
@@ -640,7 +647,7 @@ Piecewise<T> compose(Piecewise<T> const &f, SBasis const &g){
     }
 
     //first check bounds...
-    Interval bs = bounds_fast(g);
+    Interval bs = *bounds_fast(g);
     if (f.cuts.front() > bs.max()  || bs.min() > f.cuts.back()){
         int idx = (bs.max() < f.cuts[1]) ? 0 : f.cuts.size()-2;
         double t0 = f.cuts[idx], width = f.cuts[idx+1] - t0;
index e6e74242d5d7c4adae2982307fb1859ef15b2da3..d89b53f83c632425513c6b5aa30f690eed75a12f 100644 (file)
@@ -9,6 +9,7 @@
 #include <iostream>
 
 #include <2geom/coord.h>
+#include <2geom/isnan.h>
 #include <2geom/utils.h>
 
 namespace Geom {
@@ -22,6 +23,7 @@ class Point {
     Coord _pt[2];
 
   public:
+    /// The default constructor creates an Point(0,0)  DO NOT RELY ON THIS, BEST NOT TO USE THIS CONSTRUCTOR
     inline Point()
     { _pt[X] = _pt[Y] = 0; }
 
@@ -81,6 +83,13 @@ class Point {
 
     void normalize();
 
+    inline bool isFinite() const {
+        for ( unsigned i = 0 ; i < 2 ; ++i ) {
+            if(!IS_FINITE(_pt[i])) return false;
+        }
+        return true;
+    }
+
     inline Point operator+(Point const &o) const {
         return Point(_pt[X] + o._pt[X], _pt[Y] + o._pt[Y]);
     }
index 563c8a05869713e5f3c62af4619876736f39f304..fb42ff92d1d39ee9593abfede5866f05105a1f0a 100644 (file)
@@ -48,6 +48,7 @@
 namespace Geom {
 /** D2<Interval> specialization to Rect */
 typedef D2<Interval> Rect;
+class OptRect;
 
 Rect unify(const Rect &, const Rect &);
 /**
@@ -60,10 +61,12 @@ class D2<Interval> {
   private:
     Interval f[2];
   public:
-    /* The default constructor creates an empty rect, constructed of two empty Intervals. (users rely on this!)
+    /** Best not to use this constructor, do not rely on what it initializes the object to.
+     *The default constructor creates a rect of default intervals.
      */
     D2<Interval>() { f[X] = f[Y] = Interval(); }
     
+    public:
     D2<Interval>(Interval const &a, Interval const &b) {
         f[X] = a;
         f[Y] = b;
@@ -105,14 +108,20 @@ class D2<Interval> {
     inline Point midpoint() const { return Point(f[X].middle(), f[Y].middle()); }
 
 /**
- * Compute the area of this rectangle.  Note that a zero area rectangle is not necessarily empty - just as the interval [0,0] contains one point, the rectangle [0,0] x [0,0] contains 1 point and no area.
+ * \brief Compute the area of this rectangle.
+ *
+ * Note that a zero area rectangle is not empty - just as the interval [0,0] contains one point, the rectangle [0,0] x [0,0] contains 1 point and no area.
+ * \retval For a valid return value, the rect must be tested for emptyness first.
  */
     inline double area() const { return f[X].extent() * f[Y].extent(); }
+    inline bool hasZeroArea(double eps = EPSILON) const { return (area() <= eps); }
+
     inline double maxExtent() const { return std::max(f[X].extent(), f[Y].extent()); }
+    inline double minExtent() const { return std::min(f[X].extent(), f[Y].extent()); }
 
-    inline bool isEmpty()                 const { 
-        return f[X].isEmpty()        || f[Y].isEmpty(); 
-    }
+//    inline bool isEmpty()                 const { 
+//        return f[X].isEmpty()        || f[Y].isEmpty(); 
+//    }
     inline bool intersects(Rect const &r) const { 
         return f[X].intersects(r[X]) && f[Y].intersects(r[Y]); 
     }
@@ -129,40 +138,20 @@ class D2<Interval> {
     inline void unionWith(Rect const &b) { 
         f[X].unionWith(b[X]); f[Y].unionWith(b[Y]); 
     }
+    void unionWith(OptRect const &b);
 
-    inline void expandBy(double amnt)    { 
+    inline void expandBy(double amnt)    {
         f[X].expandBy(amnt);  f[Y].expandBy(amnt); 
     }
     inline void expandBy(Point const p)  { 
         f[X].expandBy(p[X]);  f[Y].expandBy(p[Y]); 
     }
-    
-    /** Transforms the rect by m. Note that it gives correct results only for scales and translates,
-        in the case of rotations, the area of the rect will grow as it cannot rotate. */
-    inline Rect operator*(Matrix const m) const { 
-        return unify(Rect(corner(0) * m, corner(2) * m),
-                     Rect(corner(1) * m, corner(3) * m));
-    }
 };
 
 inline Rect unify(Rect const & a, Rect const & b) {
     return Rect(unify(a[X], b[X]), unify(a[Y], b[Y]));
 }
 
-/** 
- * Returns the smallest rectangle that encloses both rectangles.
- * An empty argument is assumed to be an empty rectangle
- */
-inline boost::optional<Rect> unify(boost::optional<Rect> const & a, boost::optional<Rect> const & b) {
-    if (!a) {
-        return b;
-    } else if (!b) {
-        return a;
-    } else {
-        return unify(*a, *b);
-    }
-}
-
 inline Rect union_list(std::vector<Rect> const &r) {
     if(r.empty()) return Rect(Interval(0,0), Interval(0,0));
     Rect ret = r[0];
@@ -171,12 +160,6 @@ inline Rect union_list(std::vector<Rect> const &r) {
     return ret;
 }
 
-inline boost::optional<Rect> intersect(Rect const & a, Rect const & b) {
-    boost::optional<Interval> x = intersect(a[X], b[X]);
-    boost::optional<Interval> y = intersect(a[Y], b[Y]);
-    return x && y ? boost::optional<Rect>(Rect(*x, *y)) : boost::optional<Rect>();
-}
-
 inline
 double distanceSq( Point const& p, Rect const& rect )
 {
@@ -209,6 +192,70 @@ double distance( Point const& p, Rect const& rect )
     return std::sqrt(distanceSq(p, rect));
 }
 
+/**
+ * The OptRect class can represent and empty Rect and non-empty Rects.
+ * If OptRect is not empty, it means that both X and Y intervals are not empty.
+ * 
+ */
+class OptRect : public boost::optional<Rect> {
+public:
+    OptRect() : boost::optional<Rect>() {};
+    OptRect(Rect const &a) : boost::optional<Rect>(a) {};
+
+    /**
+     * Creates an empty OptRect when one of the argument intervals is empty.
+     */
+    OptRect(OptInterval const &x_int, OptInterval const &y_int) {
+        if (x_int && y_int) {
+            *this = Rect(*x_int, *y_int);
+        }
+        // else, stay empty.
+    }
+
+    /**
+     * Check whether this OptRect is empty or not.
+     */
+    inline bool isEmpty() { return (*this == false); };
+
+    /**
+     * If \c this is empty, copy argument \c b. Otherwise, union with it (and do nothing when \c b is empty)
+     */
+    inline void unionWith(OptRect const &b) {
+        if (b) {
+            if (*this) { // check that we are not empty
+                (**this)[X].unionWith((*b)[X]);
+                (**this)[Y].unionWith((*b)[Y]);
+            } else {
+                *this = b;
+            }
+        }
+    }
+};
+
+
+/** 
+ * Returns the smallest rectangle that encloses both rectangles.
+ * An empty argument is assumed to be an empty rectangle
+ */
+inline OptRect unify(OptRect const & a, OptRect const & b) {
+    if (!a) {
+        return b;
+    } else if (!b) {
+        return a;
+    } else {
+        return unify(*a, *b);
+    }
+}
+
+inline OptRect intersect(Rect const & a, Rect const & b) {
+    return OptRect(intersect(a[X], b[X]), intersect(a[Y], b[Y]));
+}
+
+inline void Rect::unionWith(OptRect const &b) { 
+    if (b) {
+        unionWith(*b);
+    }
+}
 
 } // end namespace Geom
 
index 7b2f5763da69e072d78d15803c7470ace4ce68f1..fe2517e23d81876e763ac2fa2d1ddf7585efc15b 100644 (file)
@@ -48,14 +48,14 @@ class Region {
     friend Shape shape_boolean(bool rev, Shape const & a, Shape const & b, CrossingSet const & crs);
 
     Path boundary;
-    mutable boost::optional<Rect> box;
+    mutable OptRect box;
     bool fill;
   public:
     Region() : fill(true) {}
     explicit Region(Path const &p) : boundary(p) { fill = path_direction(p); }
     Region(Path const &p, bool dir) : boundary(p), fill(dir) {}
-    Region(Path const &p, boost::optional<Rect> const &b) : boundary(p), box(b) { fill = path_direction(p); }
-    Region(Path const &p, boost::optional<Rect> const &b, bool dir) : boundary(p), box(b), fill(dir) {}
+    Region(Path const &p, OptRect const &b) : boundary(p), box(b) { fill = path_direction(p); }
+    Region(Path const &p, OptRect const &b, bool dir) : boundary(p), box(b), fill(dir) {}
     
     unsigned size() const { return boundary.size(); }
     
@@ -65,7 +65,7 @@ class Region {
     
     operator Path() const { return boundary; }
     Rect boundsFast() const {
-        if(!box) box = boost::optional<Rect>(boundary.boundsFast());
+        if(!box) box = boundary.boundsFast();  /// \todo this doesn't look right at all...
         return *box;
     }
     
index 9566e0a198fb5f5b153821ff73b60441c581f1c8..e3a407094c769a55c0afa223f3fa8c649ca83838 100644 (file)
@@ -173,7 +173,7 @@ sb2d_cubic_solve(SBasis2d const &f, Geom::Point const &A, Geom::Point const &B){
     double error = -1;
     unsigned best = 0;
     for (unsigned i=0; i<candidates.size(); i++){
-        Interval bounds = bounds_fast(compose(f,candidates[i]));
+        Interval bounds = *bounds_fast(compose(f,candidates[i]));
         double new_error = (fabs(bounds.max())>fabs(bounds.min()) ? fabs(bounds.max()) : fabs(bounds.min()) );
         if ( new_error < error || error < 0 ){
             error = new_error;
index e11919401453a7ec804f277a404acce6a9018ceb..b45e63eb83af318200aa342a88fc50889af0cfd8 100644 (file)
@@ -68,9 +68,9 @@ public:
   void setInitial(Point v) { for(unsigned d = 0; d < 2; d++) { inner[d][0][0] = v[d]; } }
   void setFinal(Point v)   { for(unsigned d = 0; d < 2; d++) { inner[d][0][1] = v[d]; } }
 
-  Rect boundsFast() const  { return bounds_fast(inner); }
-  Rect boundsExact() const { return bounds_exact(inner); }
-  Rect boundsLocal(Interval i, unsigned deg) const { return bounds_local(inner, i, deg); }
+  virtual OptRect boundsFast() const  { return bounds_fast(inner); }
+  virtual OptRect boundsExact() const { return bounds_exact(inner); }
+  virtual OptRect boundsLocal(OptInterval i, unsigned deg) const { return bounds_local(inner, i, deg); }
 
   std::vector<double> roots(double v, Dim2 d) const { return Geom::roots(inner[d] - v); }
   
index f0170ec6bbbcdf17139118ab7f64d930d6156a69..96a5ed0ce0dddb8c061c3f68c081e810f9c36a28 100644 (file)
@@ -528,7 +528,7 @@ unsigned Geom::centroid(Piecewise<D2<SBasis> > const &p, Point& centroid, double
  * Below are basic functions dedicated to solving this assuming a0 and a1 !=0.
  */
 
-static Interval
+static OptInterval
 find_bounds_for_lambda0(double aa0,double aa1,double cc0,double cc1,
     int insist_on_speeds_signs){
 
@@ -541,7 +541,7 @@ find_bounds_for_lambda0(double aa0,double aa1,double cc0,double cc1,
     double c = (c0<c1 ? c0 : c1);
     double delta = 1-4*a*c;
     if ( delta < 0 )
-        return Interval();//return empty interval
+        return OptInterval();//return empty interval
     double lambda_max = (1+std::sqrt(delta))/2/a;
     
     result = Interval(c,lambda_max);
@@ -549,9 +549,10 @@ find_bounds_for_lambda0(double aa0,double aa1,double cc0,double cc1,
         result *= -1;
     if (insist_on_speeds_signs == 1){
         if (result.max() < 0)//Caution: setMin with max<new min...
-            return Interval();//return empty interval
+            return OptInterval();//return empty interval
         result.setMin(0);
     }
+    result = Interval(result.min()-.1,result.max()+.1);//just in case all our approx. were exact...
     return result;
 }
 
@@ -565,13 +566,13 @@ solve_lambda0(double a0,double a1,double c0,double c1,
     p.push_back(Linear( -a1*a0*(a0+2*c0), -a1*a0*(3*a0+2*c0) ));
     p.push_back(Linear( a1*a0*a0 ));
 
-    Interval domain = find_bounds_for_lambda0(a0,a1,c0,c1,insist_on_speeds_signs);
-    if ( domain.isEmpty() ) 
+    OptInterval domain = find_bounds_for_lambda0(a0,a1,c0,c1,insist_on_speeds_signs);
+    if ( !domain ) 
         return std::vector<double>();
-    p = compose(p,Linear(domain.min(),domain.max()));
+    p = compose(p,Linear(domain->min(),domain->max()));
     std::vector<double>rts = roots(p);
     for (unsigned i=0; i<rts.size(); i++){
-        rts[i] = domain.min()+rts[i]*domain.extent();
+        rts[i] = domain->min() + rts[i] * domain->extent();
     }
     return rts;
 }
index 1d179a5630ec2dbc7436b536eecf1447b383a47d..e08023e84df17f04fec0d1eb3e071efa5479aaf4 100644 (file)
@@ -41,6 +41,7 @@
 namespace Geom {
 
 
+#include <2geom/d2-sbasis.h>
 #include <stdio.h>
 #include <math.h>
 
@@ -327,18 +328,44 @@ Piecewise<SBasis> reciprocalOnDomain(Interval range, double tol){
 }
 
 Piecewise<SBasis> reciprocal(SBasis const &f, double tol, int order){
-    Piecewise<SBasis> reciprocal_fn=reciprocalOnDomain(bounds_fast(f), tol);
+    Piecewise<SBasis> reciprocal_fn=reciprocalOnDomain(*bounds_fast(f), tol);
     Piecewise<SBasis> result=compose(reciprocal_fn,f);
     truncateResult(result,order);
     return(result);
 }
 Piecewise<SBasis> reciprocal(Piecewise<SBasis> const &f, double tol, int order){
-    Piecewise<SBasis> reciprocal_fn=reciprocalOnDomain(bounds_fast(f), tol);
+    Piecewise<SBasis> reciprocal_fn=reciprocalOnDomain(*bounds_fast(f), tol);
     Piecewise<SBasis> result=compose(reciprocal_fn,f);
     truncateResult(result,order);
     return(result);
 }
 
+/**
+ * \brief Retruns a Piecewise SBasis with prescribed values at prescribed times.
+ * 
+ * \param times: vector of times at which the values are given. Should be sorted in increasing order.
+ * \param values: vector of prescribed values. Should have the same size as times and be sorted accordingly.
+ * \param smoothness: (defaults to 1) regularity class of the result: 0=piecewise linear, 1=continuous derivative, etc...
+ */
+Piecewise<SBasis> interpolate(std::vector<double> times, std::vector<double> values, unsigned smoothness){
+    assert ( values.size() == times.size() );
+    if ( values.size() == 0 ) return Piecewise<SBasis>();
+    if ( values.size() == 1 ) return Piecewise<SBasis>(values[0]);//what about time??
+
+    SBasis sk = shift(Linear(1.),smoothness);
+    SBasis bump_in = integral(sk);
+    bump_in -= bump_in.at0();
+    bump_in /= bump_in.at1();
+    SBasis bump_out = reverse( bump_in );
+    
+    Piecewise<SBasis> result;
+    result.cuts.push_back(times[0]);
+    for (unsigned i = 0; i<values.size()-1; i++){
+        result.push(bump_out*values[i]+bump_in*values[i+1],times[i+1]);
+    }
+    return result;
+}
+
 }
 
 /*
index 053c2d285c7ab360c03aae02c8d813028bfeee23..49ad965d42aea10cdbe2a7a6e9d2e354631e1fc5 100644 (file)
@@ -42,6 +42,7 @@
 
 #include <2geom/sbasis.h>
 #include <2geom/piecewise.h>
+#include <2geom/d2.h>
 
 namespace Geom{
 //-|x|---------------------------------------------------------------
@@ -81,6 +82,8 @@ Piecewise<SBasis> reciprocalOnDomain(Interval range, double tol=1e-3);
 Piecewise<SBasis> reciprocal(          SBasis const &f, double tol=1e-3, int order=3);
 Piecewise<SBasis> reciprocal(Piecewise<SBasis>const &f, double tol=1e-3, int order=3);
 
+//--interpolate------------------------------------------------------------
+Piecewise<SBasis> interpolate( std::vector<double> times, std::vector<double> values, unsigned smoothness = 1);
 }
 
 #endif //SEEN_GEOM_PW_SB_CALCULUS_H
index 2eb1e4cbbb86b6059e00c641af11f9f38030dd6d..5249053fa5955e3e0c1b9c0a6a6aa94968046a9c 100644 (file)
@@ -57,7 +57,19 @@ namespace Geom{
  \returns inteval
 
 */
-Interval bounds_exact(SBasis const &a) {
+
+#ifdef USE_SBASIS_OF
+OptInterval bounds_exact(SBasisOf<double> const &a) {
+    Interval result = Interval(a.at0(), a.at1());
+    SBasisOf<double> df = derivative(a);
+    vector<double>extrema = roots(df);
+    for (unsigned i=0; i<extrema.size(); i++){
+        result.extendTo(a(extrema[i]));
+    }
+    return result;
+}
+#else
+OptInterval bounds_exact(SBasis const &a) {
     Interval result = Interval(a.at0(), a.at1());
     SBasis df = derivative(a);
     vector<double>extrema = roots(df);
@@ -66,6 +78,7 @@ Interval bounds_exact(SBasis const &a) {
     }
     return result;
 }
+#endif
 
 /** Find a small interval that bounds a
  \param a sbasis function
@@ -73,7 +86,11 @@ Interval bounds_exact(SBasis const &a) {
 
 */
 // I have no idea how this works, some clever bounding argument by jfb.
-Interval bounds_fast(const SBasis &sb, int order) {
+#ifdef USE_SBASIS_OF
+OptInterval bounds_fast(const SBasisOf<double> &sb, int order) {
+#else
+OptInterval bounds_fast(const SBasis &sb, int order) {
+#endif
     Interval res(0,0); // an empty sbasis is 0.
 
     for(int j = sb.size()-1; j>=order; j--) {
@@ -105,11 +122,15 @@ Interval bounds_fast(const SBasis &sb, int order) {
  \param sb sbasis function
  \param i domain interval
  \param order number of terms
- \returns inteval
+ \return interval
 
 */
-Interval bounds_local(const SBasis &sb, const Interval &i, int order) {
-    double t0=i.min(), t1=i.max(), lo=0., hi=0.;
+#ifdef USE_SBASIS_OF
+OptInterval bounds_local(const SBasisOf<double> &sb, const OptInterval &i, int order) {
+#else
+OptInterval bounds_local(const SBasis &sb, const OptInterval &i, int order) {
+#endif
+    double t0=i->min(), t1=i->max(), lo=0., hi=0.;
     for(int j = sb.size()-1; j>=order; j--) {
         double a=sb[j][0];
         double b=sb[j][1];
@@ -154,8 +175,13 @@ static int upper_level(vector<double> const &levels,double x,double tol=0.){
     return(upper_bound(levels.begin(),levels.end(),x-tol)-levels.begin());
 }
 
+#ifdef USE_SBASIS_OF
+static void multi_roots_internal(SBasis const &f,
+                                SBasis const &df,
+#else
 static void multi_roots_internal(SBasis const &f,
                                 SBasis const &df,
+#endif
                                 std::vector<double> const &levels,
                                 std::vector<std::vector<double> > &roots,
                                 double htol,
@@ -209,7 +235,7 @@ static void multi_roots_internal(SBasis const &f,
     int idxa=upper_level(levels,fa,vtol);
     int idxb=upper_level(levels,fb,vtol);
 
-    Interval bs = bounds_local(df,Interval(a,b));
+    Interval bs = *bounds_local(df,Interval(a,b));
 
     //first times when a level (higher or lower) can be reached from a or b.
     double ta_hi,tb_hi,ta_lo,tb_lo;
@@ -306,8 +332,8 @@ std::vector<std::vector<double> > multi_roots(SBasis const &f,
 void subdiv_sbasis(SBasis const & s,
                    std::vector<double> & roots,
                    double left, double right) {
-    Interval bs = bounds_fast(s);
-    if(bs.min() > 0 || bs.max() < 0)
+    OptInterval bs = bounds_fast(s);
+    if(!bs || bs->min() > 0 || bs->max() < 0)
         return; // no roots here
     if(s.tailError(1) < 1e-7) {
         double t = s[0][0] / (s[0][0] - s[0][1]);
index 2619da594757d755f3751332db91529bc7e0f241..0bd672c15f7b365af9d26503081b8da85101afb1 100644 (file)
@@ -43,7 +43,7 @@ namespace Geom{
  \returns the largest possible error this truncation could give
 */
 double SBasis::tailError(unsigned tail) const {
-  Interval bs = bounds_fast(*this, tail);
+  Interval bs = *bounds_fast(*this, tail);
   return std::max(fabs(bs.min()),fabs(bs.max()));
 }
 
@@ -212,7 +212,7 @@ SBasis shift(SBasis const &a, int sh) {
 */
 SBasis shift(Linear const &a, int sh) {
     SBasis c;
-    if(sh > 0) {
+    if(sh >= 0) {
         c.insert(c.begin(), sh, Linear(0,0));
         c.push_back(a);
     }
index 72bf422e77dc1de9a7fac179ec8d0fac2b50b4bd..f2681a722f644680e7a49d0c625e5ee551e61e5b 100644 (file)
 #include <2geom/utils.h>
 #include <2geom/exception.h>
 
-namespace Geom {
+
+#ifdef USE_SBASIS_OF
+
+#include "sbasis-of.h"
+
+#else
+
+namespace Geom{
 
 /*** An empty SBasis is identically 0. */
 class SBasis : public std::vector<Linear>{
@@ -135,9 +142,9 @@ private:
 inline SBasis Linear::toSBasis() const { return SBasis(*this); }
 
 //implemented in sbasis-roots.cpp
-Interval bounds_exact(SBasis const &a);
-Interval bounds_fast(SBasis const &a, int order = 0);
-Interval bounds_local(SBasis const &a, const Interval &t, int order = 0);
+OptInterval bounds_exact(SBasis const &a);
+OptInterval bounds_fast(SBasis const &a, int order = 0);
+OptInterval bounds_local(SBasis const &a, const OptInterval &t, int order = 0);
 
 /** Returns a function which reverses the domain of a.
  \param a sbasis function
@@ -325,6 +332,7 @@ std::vector<std::vector<double> > multi_roots(SBasis const &f,
                                  double b=1);
     
 }
+#endif
 
 /*
   Local Variables:
index 814c6c68c08f0ef036cf4ad989a99a17c9e92fd7..64abf48ff6287f3848acaa19007375a7e2d85bd8 100644 (file)
@@ -349,7 +349,7 @@ void crossing_dual(unsigned &i, unsigned &j, CrossingSet const & crs) {
 
 //locate a crossing on the outside, by casting a ray through the middle of the bbox
 void outer_crossing(unsigned &ix, unsigned &jx, bool & dir, std::vector<Path> const & ps, CrossingSet const & crs) {
-    Rect bounds = ps[ix].boundsFast();
+    Rect bounds = *(ps[ix].boundsFast());
     double ry = bounds[Y].middle();
     double max_val = bounds.left(), max_t = 0;
     ix = ps.size();
index 23645fe11b0d2f82dafca2947c9abd39a401b9cd..42c787eca2cb186b017fd4ab01bc78adf8fa41cd 100644 (file)
@@ -47,7 +47,7 @@ namespace Geom
 {
 
 
-Rect SVGEllipticalArc::boundsExact() const
+OptRect SVGEllipticalArc::boundsExact() const
 {
     if (isDegenerate() && is_svg_compliant())
         return chord().boundsExact();
index 1d6d2d74d2f6dae23280feebee5bc69a0d6da355..92ec51b49b800bc5de0ce24e21a8f8ee2b901281 100644 (file)
@@ -200,15 +200,15 @@ class SVGEllipticalArc : public Curve
         return m_svg_compliant;
     }
 
-    Rect boundsFast() const
+    virtual OptRect boundsFast() const
     {
         return boundsExact();
     }
 
-    Rect boundsExact() const;
+    virtual OptRect boundsExact() const;
 
     // TODO: native implementation of the following methods
-    Rect boundsLocal(Interval i, unsigned int deg) const
+    virtual OptRect boundsLocal(OptInterval i, unsigned int deg) const
     {
         if (isDegenerate() && is_svg_compliant())
             return chord().boundsLocal(i, deg);
index 2f26870a5bf5e94f261f64544a46d23902a58408..071b171b39cb1a2d5273b3cb1be0cc338fea95a0 100644 (file)
@@ -38,6 +38,7 @@
 
 #include <2geom/point.h>
 #include <2geom/svg-path-parser.h>
+#include <2geom/angle.h>
 
 namespace Geom {
 
@@ -139,7 +140,7 @@ private:
 };
 
 
-#line 143 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
+#line 144 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
 static const char _svg_path_actions[] = {
        0, 1, 0, 1, 1, 1, 2, 1, 
        3, 1, 4, 1, 5, 1, 15, 1, 
@@ -1144,7 +1145,7 @@ static const int svg_path_first_final = 270;
 
 static const int svg_path_en_main = 1;
 
-#line 143 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 144 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
 
 
 void Parser::parse(char const *str)
@@ -1157,12 +1158,12 @@ throw(SVGPathParseError)
     _reset();
 
     
-#line 1161 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
+#line 1162 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
        {
        cs = svg_path_start;
        }
 
-#line 1166 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
+#line 1167 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
        {
        int _klen;
        unsigned int _trans;
@@ -1235,13 +1236,13 @@ _match:
                switch ( *_acts++ )
                {
        case 0:
-#line 155 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 156 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             start = p;
         }
        break;
        case 1:
-#line 159 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 160 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             char const *end=p;
             std::string buf(start, end);
@@ -1250,55 +1251,55 @@ _match:
         }
        break;
        case 2:
-#line 166 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 167 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _push(1.0);
         }
        break;
        case 3:
-#line 170 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 171 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _push(0.0);
         }
        break;
        case 4:
-#line 174 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 175 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _absolute = true;
         }
        break;
        case 5:
-#line 178 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 179 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _absolute = false;
         }
        break;
        case 6:
-#line 182 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 183 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _moveTo(_pop_point());
         }
        break;
        case 7:
-#line 186 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 187 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _lineTo(_pop_point());
         }
        break;
        case 8:
-#line 190 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 191 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _hlineTo(Point(_pop_coord(X), _current[Y]));
         }
        break;
        case 9:
-#line 194 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 195 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _vlineTo(Point(_current[X], _pop_coord(Y)));
         }
        break;
        case 10:
-#line 198 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 199 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             Point p = _pop_point();
             Point c1 = _pop_point();
@@ -1307,7 +1308,7 @@ _match:
         }
        break;
        case 11:
-#line 205 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 206 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             Point p = _pop_point();
             Point c1 = _pop_point();
@@ -1315,7 +1316,7 @@ _match:
         }
        break;
        case 12:
-#line 211 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 212 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             Point p = _pop_point();
             Point c = _pop_point();
@@ -1323,14 +1324,14 @@ _match:
         }
        break;
        case 13:
-#line 217 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 218 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             Point p = _pop_point();
             _quadTo(_quad_tangent, p);
         }
        break;
        case 14:
-#line 222 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 223 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             Point point = _pop_point();
             bool sweep = _pop_flag();
@@ -1343,16 +1344,16 @@ _match:
         }
        break;
        case 15:
-#line 233 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 234 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {
             _closePath();
         }
        break;
        case 16:
-#line 369 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 370 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
        {goto _out;}
        break;
-#line 1356 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
+#line 1357 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.cpp"
                }
        }
 
@@ -1363,7 +1364,7 @@ _again:
        goto _resume;
        _out: {}
        }
-#line 379 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
+#line 380 "/home/njh/svn/lib2geom/src/2geom/svg-path-parser.rl"
 
 
     if ( cs < svg_path_first_final ) {
index 227c822bdd1b417b08df92b8a1a5de92f5f10032..53b9532558ef7e1af19c92f2e32d7894e86eb585 100644 (file)
@@ -9,10 +9,8 @@ std::vector<std::vector<unsigned> > sweep_bounds(std::vector<Rect> rs) {
     std::vector<std::vector<unsigned> > pairs(rs.size());
 
     for(unsigned i = 0; i < rs.size(); i++) {
-        if(!rs[i].isEmpty()) {
-            events.push_back(Event(rs[i].left(), i, false));
-            events.push_back(Event(rs[i].right(), i, true));
-        }
+        events.push_back(Event(rs[i].left(), i, false));
+        events.push_back(Event(rs[i].right(), i, true));
     }
     std::sort(events.begin(), events.end());
 
@@ -48,10 +46,8 @@ std::vector<std::vector<unsigned> > sweep_bounds(std::vector<Rect> a, std::vecto
         events[n].reserve(sz*2);
         for(unsigned i = 0; i < sz; i++) {
             Rect r = n ? b[i] : a[i];
-            if(!r.isEmpty()) {
-                events[n].push_back(Event(r.left(), i, false));
-                events[n].push_back(Event(r.right(), i, true));
-            }
+            events[n].push_back(Event(r.left(), i, false));
+            events[n].push_back(Event(r.right(), i, true));
         }
         std::sort(events[n].begin(), events[n].end());
     }
index a84909382ae313332760f9611f03d29cc8b35702..5e4b41d01d91cac24f57c195bae845e345b8c6f6 100644 (file)
@@ -204,10 +204,6 @@ snapped-line.cpp
 snapped-point.cpp
 snapper.cpp
 star-context.cpp
-streams-gzip.cpp
-streams-handles.cpp
-streams-jar.cpp
-streams-zlib.cpp
 style.cpp
 #style-test.cpp
 svg-view.cpp
diff --git a/src/Doxyfile b/src/Doxyfile
deleted file mode 100644 (file)
index 42fbee2..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-# Doxyfile: default configuration for `doxygen'.
-
-# We used to explicitly list inputs (for faster doxygen runs), but 
-# switched to recursive scan because we have a large number of inputs
-# and almost everybody forgot to update the list to reflect latest changes.
-FILE_PATTERNS = *.cpp *.h
-RECURSIVE = yes
-EXCLUDE_PATTERNS = sp-skeleton.*
-# Input used to be generated with the command
-# find -name '*.cpp' -o -name '*.h'|xargs grep -l '\\file'|sort|sed 's,^./,    ,;s,$,  \\,'
-# (and remove the non source files sp-skeleton.*).
-#INPUT = \
-#      application/application.cpp     \
-#      (file listing was here...)
-
-
-# Uncomment this to treat undocumented things as if they had an empty
-# documentation string; comment it out to suppress all undocumented things from
-# the output.
-# Leaving it uncommented allows using doxygen output as the primary information
-# source about a class (without needing to look at the source code to look for
-# undocumented things).
-# OTOH, you may find it annoying to have reems of relatively unhelpful
-# information: commenting it out gives more compact display of the helpful
-# bits.
-# I'm commenting it out for now to facilitate checking existing doc comments
-# for doxygen correctness.
-#EXTRACT_ALL = yes
-
-# I'll disable this for the moment, to reduce the number of files in the output.
-SOURCE_BROWSER = no
-
-# Keep the output out of the src directory so that it doesn't get in the way of
-# `rgrep'.
-OUTPUT_DIRECTORY = ../doxygen
-
-# In absence of explicit `\brief', treat the first "sentence" as the brief part
-# and the rest as detail.  (With explicit `\brief', the first _paragraph_ is
-# considered the brief part.)
-#
-# It's unclear whether programmers should deliberately use this facility.
-# Advantage: Less clutter.
-# Disadvantage: Absence of `\brief' may indicate that the comment was written
-# by someone unfamiliar with doxygen and not giving thought to what the brief
-# description should be.  Using explicit `\brief' may facilitate checking
-# non-\briefed comments for doxygen correctness.
-# OTOH, using `\brief' may be parrot-like: it doesn't necessarily indicate
-# doxygen familiarity.
-JAVADOC_AUTOBRIEF = yes
-
-WARN_IF_UNDOCUMENTED = yes
-
-GENERATE_TODOLIST = yes
-
-GENERATE_BUGLIST = yes
-
-REFERENCED_BY_RELATION = yes
-
-EXTRACT_STATIC = yes
-
-WARN_LOGFILE = doxygen-log
-
index 0726b722831bf4f51242e81db21566fb2afeff9e..c6b58bce8ce7cfd6e141eb7f2929dc0fed215047 100644 (file)
@@ -40,6 +40,7 @@ include extension/Makefile_insert
 include extension/implementation/Makefile_insert
 include extension/internal/Makefile_insert
 include extension/script/Makefile_insert
+include filters/Makefile_insert
 include helper/Makefile_insert
 include inkjar/Makefile_insert
 include io/Makefile_insert
@@ -87,6 +88,7 @@ noinst_LIBRARIES =    \
        extension/internal/libinternal.a        \
        extension/libextension.a        \
        extension/script/libscript.a    \
+       filters/libfilters.a    \
        bind/libbind.a  \
        helper/libspchelp.a     \
        io/libio.a      \
@@ -146,6 +148,7 @@ EXTRA_DIST =        \
        extension/internal/makefile.in  \
        extension/makefile.in   \
        extension/script/makefile.in    \
+       filters/makefile.in \
        helper/makefile.in      \
        inkjar/makefile.in      \
        io/makefile.in  \
index 8244996c801759f2764e24d3e29584e87f6dd63d..4bef3dc5634734af4c314931eb15b33b8bf17017 100644 (file)
@@ -166,41 +166,6 @@ libinkpre_a_SOURCES =      \
        sp-defs.cpp sp-defs.h   \
        sp-desc.cpp sp-desc.h   \
        sp-ellipse.cpp sp-ellipse.h     \
-       sp-feblend.cpp sp-feblend.h     \
-       sp-feblend-fns.h        \
-       sp-fecolormatrix.cpp sp-fecolormatrix.h \
-       sp-fecolormatrix-fns.h  \
-       sp-fecomponenttransfer.cpp sp-fecomponenttransfer.h     \
-       sp-fecomponenttransfer-funcnode.cpp sp-fecomponenttransfer-funcnode.h   \
-       sp-fecomponenttransfer-fns.h    \
-       sp-fecomposite.cpp sp-fecomposite.h     \
-       sp-fecomposite-fns.h    \
-       sp-feconvolvematrix.cpp sp-feconvolvematrix.h   \
-       sp-feconvolvematrix-fns.h       \
-       sp-fediffuselighting.cpp sp-fediffuselighting.h \
-       sp-fediffuselighting-fns.h      \
-       sp-fedisplacementmap.cpp sp-fedisplacementmap.h \
-       sp-fedisplacementmap-fns.h      \
-       sp-fedistantlight.cpp sp-fedistantlight.h \
-       sp-feflood.cpp sp-feflood.h     \
-       sp-feflood-fns.h        \
-       sp-feimage.cpp sp-feimage.h     \
-       sp-feimage-fns.h        \
-       sp-femerge.cpp sp-femerge.h     \
-       sp-femerge-fns.h        \
-       sp-femergenode.cpp sp-femergenode.h \
-       sp-femorphology.cpp sp-femorphology.h   \
-       sp-femorphology-fns.h   \
-       sp-feoffset.cpp sp-feoffset.h   \
-       sp-feoffset-fns.h       \
-       sp-fepointlight.cpp sp-fepointlight.h \
-       sp-fespecularlighting.cpp sp-fespecularlighting.h       \
-       sp-fespecularlighting-fns.h     \
-       sp-fespotlight.cpp sp-fespotlight.h \
-       sp-fetile.cpp sp-fetile.h       \
-       sp-fetile-fns.h \
-       sp-feturbulence.cpp sp-feturbulence.h   \
-       sp-feturbulence-fns.h   \
        sp-filter-fns.h \
        sp-filter-primitive.cpp \
        sp-filter-primitive.h   \
@@ -279,10 +244,6 @@ libinkpre_a_SOURCES =      \
        spiral-context.cpp spiral-context.h     \
        splivarot.cpp splivarot.h       \
        star-context.cpp star-context.h \
-       streams-gzip.h streams-gzip.cpp \
-       streams-handles.h streams-handles.cpp   \
-       streams-jar.h streams-jar.cpp   \
-       streams-zlib.h streams-zlib.cpp \
        style.cpp style.h       \
        sp-style-elem.cpp sp-style-elem.h       \
        svg-profile.h \
@@ -356,6 +317,7 @@ inkscape_private_libs =     \
        pedro/libpedro.a        \
        trace/libtrace.a        \
        svg/libspsvg.a          \
+       filters/libfilters.a    \
        widgets/libspwidgets.a  \
        display/libspdisplay.a  \
        helper/libspchelp.a     \
index 3af818824191bcf02f78b8b853db690af1ab4115..3d9aa15e8aa3f122d52a2461bbc7ea31db86311e 100644 (file)
@@ -1,7 +1,7 @@
-/**
- * \brief  Base class for different application modes
- *
- * Author:
+/** @file
+ * @brief  Base class for different application modes
+ */
+/* Author:
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *
  * Copyright (C) 2005 Bryce Harrington
@@ -40,4 +40,4 @@ AppPrototype::~AppPrototype()
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
\ No newline at end of file
index a7c8ad86fa121da11c8799b83e64c3ecd88e909d..a31bfa7d8af53d6ffa61ab67e4f7a53f64f800d1 100644 (file)
@@ -1,7 +1,7 @@
-/**
- * \brief  Base class for different application modes
- *
- * Author:
+/** @file
+ * @brief  Base class for different application modes
+ */
+/* Author:
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *
  * Copyright (C) 2005 Bryce Harrington
@@ -50,4 +50,4 @@ protected:
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
\ No newline at end of file
index c7aa28971f7a033e063087709f50de3f37abddaa..ab516b9d49ee0dcb7bbe3326175cc0d408c946ed 100644 (file)
@@ -1,7 +1,7 @@
-/** \file
- * \brief  The top level class for managing the application.
- *
- * Authors:
+/** @file
+ * @brief  The top level class for managing the application
+ */
+/* Authors:
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *   Ralf Stephan <ralf@ark.in-berlin.de>
  *
index 212add9e8241814aeb5e9c5defb42a5b06ac7ae1..fce6bd47fe7a4e0d1c85c8eb9c7e6f926fb10867 100644 (file)
@@ -1,7 +1,7 @@
-/** \file
- * \brief  The top level class for managing the application.
- *
- * Authors:
+/** @file
+ * @brief  The top level class for managing the application.
+ */
+/* Authors:
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *   Ralf Stephan <ralf@ark.in-berlin.de>
  *
index 0b8ac263e64ca21db7b0458482257edd5b67de3b..24c811778b963f668598fcbd75907beec09d79bb 100644 (file)
@@ -1,9 +1,9 @@
-/** \file
- * \brief Editor Implementation class declaration for Inkscape.  This
+/** @file
+ * @brief Editor class declaration.  This
  *        singleton class implements much of the functionality of the former 
  *        'inkscape' object and its services and signals.
- *
- * Authors:
+ */
+/* Authors:
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *   Derek P. Moore <derekm@hackunix.org>
  *   Ralf Stephan <ralf@ark.in-berlin.de>
index 1eed9a267269eeca952c152a4beec15ccd3a27e6..4545022b88cc7ce1a9437c6f689f6de808dc2e39 100644 (file)
@@ -1,9 +1,8 @@
-/** \file
- * \brief  Class to manage an application used for editing SVG documents
- *         using GUI views
- *
- * \note  This class is a Singleton
- *
+/** @file
+ * @brief  Singleton class to manage an application used for editing SVG
+ *         documents using GUI views
+ */
+/*
  * Authors:
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *   Ralf Stephan <ralf@ark.in-berlin.de>
index 89be0eb4f764083c212128b4b5edbd227f223108..381821cd8c4456de30a4794631fe23a7f67967c4 100644 (file)
@@ -347,7 +347,6 @@ struct {char const *attr; bool supported;} const all_attrs[] = {
     {"inkscape:bbox-nodes", true},
     {"inkscape:snap-page", true},
     {"inkscape:snap-global", true},
-    {"inkscape:snap-indicator", true},
     {"inkscape:snap-bbox", true},
     {"inkscape:snap-nodes", true},
     {"inkscape:snap-guide", true},
index add2c8caf43f3dcccdae21c12f30d05784d5f87a..149d177f5e2b1db1fb3df273b7a942132a8539c1 100644 (file)
@@ -87,7 +87,6 @@ static SPStyleProp const props[] = {
     {SP_ATTR_INKSCAPE_WINDOW_X, "inkscape:window-x"},
     {SP_ATTR_INKSCAPE_WINDOW_Y, "inkscape:window-y"},
     {SP_ATTR_INKSCAPE_SNAP_GLOBAL, "inkscape:snap-global"},
-    {SP_ATTR_INKSCAPE_SNAP_INDICATOR, "inkscape:snap-indicator"},
     {SP_ATTR_INKSCAPE_SNAP_BBOX, "inkscape:snap-bbox"},
     {SP_ATTR_INKSCAPE_SNAP_NODES, "inkscape:snap-nodes"},
     {SP_ATTR_INKSCAPE_SNAP_GUIDE, "inkscape:snap-guide"},
index e15822411e9cceb4e757cc0d3336e2cc22e78e05..f8925f47ccca86ced39dcd6b79be90e68d51a53e 100644 (file)
@@ -87,7 +87,6 @@ enum SPAttributeEnum {
     SP_ATTR_INKSCAPE_WINDOW_X,
     SP_ATTR_INKSCAPE_WINDOW_Y,
     SP_ATTR_INKSCAPE_SNAP_GLOBAL,
-    SP_ATTR_INKSCAPE_SNAP_INDICATOR,
     SP_ATTR_INKSCAPE_SNAP_BBOX,
     SP_ATTR_INKSCAPE_SNAP_NODES,
     SP_ATTR_INKSCAPE_SNAP_GUIDE,
index 6f90105339461a32830f27063480912ce6ca9531..1ba708ed7c312bbcaa9209aadf062991ccf5cbc9 100644 (file)
@@ -1,6 +1,7 @@
 /**
- * This is a simple mechanism to bind Inkscape to Java, and thence
- * to all of the nice things that can be layered upon that. 
+ * @file
+ * @brief This is a simple mechanism to bind Inkscape to Java, and thence
+ * to all of the nice things that can be layered upon that.
  *
  * Authors:
  *   Bob Jamison
index 2530bd735f66a6562292c0e74de9c2a25bc00f73..a03f0c1a2898a3712d29791c0ce309eef81a4347 100644 (file)
@@ -1,7 +1,6 @@
-#ifndef __JAVABIND_PRIVATE_H__
-#define __JAVABIND_PRIVATE_H__
 /**
- * This is a simple mechanism to bind Inkscape to Java, and thence
+ * @file
+ * @brief This is a simple mechanism to bind Inkscape to Java, and thence
  * to all of the nice things that can be layered upon that. 
  *
  * Authors:
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <jni.h>
+#ifndef __JAVABIND_PRIVATE_H__
+#define __JAVABIND_PRIVATE_H__
 
+#include <jni.h>
 #include "javabind.h"
 
-
-
 namespace Inkscape
 {
 
index e0e246d488d71a858bee1a9b45a516ae3f6ad88d..cb8c778b1b6a64b006d8f618aff6f9c2f992c766 100644 (file)
@@ -1,5 +1,6 @@
 /**
- * This is a simple mechanism to bind Inkscape to Java, and thence
+ * @file
+ * @brief This is a simple mechanism to bind Inkscape to Java, and thence
  * to all of the nice things that can be layered upon that.
  *
  * Authors:
index 6ea896a2cb6699755a5b88fbc0857b7d0d835505..894f52d5dddffe902625054a7b4d97ffbbf34f8f 100644 (file)
@@ -1,7 +1,6 @@
-#ifndef __JAVABIND_H__
-#define __JAVABIND_H__
 /**
- * This is a simple mechanism to bind Inkscape to Java, and thence
+ * @file
+ * @brief This is a simple mechanism to bind Inkscape to Java, and thence
  * to all of the nice things that can be layered upon that. 
  *
  * Authors:
@@ -24,6 +23,9 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#ifndef __JAVABIND_H__
+#define __JAVABIND_H__
+
 #include <glibmm.h>
 #include <vector>
 
index 866cbbca47f7091a0b6dec9b96d364b17815c1b7..241279100a8bee0e7b6bfc8033d5275cd3c1b904 100644 (file)
@@ -216,7 +216,6 @@ box3d_side_set_shape (SPShape *shape)
         return;
     }
 
-    SPCurve *c = new SPCurve();
     // TODO: Draw the correct quadrangle here
     //       To do this, determine the perspective of the box, the orientation of the side (e.g., XY-FRONT)
     //       compute the coordinates of the corners in P^3, project them onto the canvas, and draw the
@@ -225,14 +224,24 @@ box3d_side_set_shape (SPShape *shape)
     unsigned int corners[4];
     box3d_side_compute_corner_ids(side, corners);
 
+    SPCurve *c = new SPCurve();
     c->moveto(box3d_get_corner_screen(box, corners[0]));
     c->lineto(box3d_get_corner_screen(box, corners[1]));
     c->lineto(box3d_get_corner_screen(box, corners[2]));
     c->lineto(box3d_get_corner_screen(box, corners[3]));
-
     c->closepath();
-    sp_lpe_item_perform_path_effect(SP_LPE_ITEM (side), c);
-    sp_shape_set_curve_insync (SP_SHAPE (side), c, TRUE);
+
+    /* Reset the shape'scurve to the "original_curve"
+     * This is very important for LPEs to work properly! (the bbox might be recalculated depending on the curve in shape)*/
+    sp_shape_set_curve_insync (shape, c, TRUE);
+    if (sp_lpe_item_has_path_effect(SP_LPE_ITEM(shape)) && sp_lpe_item_path_effects_enabled(SP_LPE_ITEM(shape))) {
+        SPCurve *c_lpe = c->copy();
+        bool success = sp_lpe_item_perform_path_effect(SP_LPE_ITEM (shape), c_lpe);
+        if (success) {
+            sp_shape_set_curve_insync (shape, c_lpe, TRUE);
+        }
+        c_lpe->unref();
+    }
     c->unref();
 }
 
index 34c839c6f04635cf85b4440d1df51a2979672b1f..657850ec7bf1ba3ebd835ddcce86e654b742f4ee 100644 (file)
@@ -190,7 +190,7 @@ static Avoid::Polygn avoid_item_poly(SPItem const *item)
     //       by the sp_*_update functions, e.g., text.
     sp_document_ensure_up_to_date(item->document);
     
-    boost::optional<Geom::Rect> rHull = item->getBounds(sp_item_i2doc_affine(item));
+    Geom::OptRect rHull = item->getBounds(sp_item_i2doc_affine(item));
     if (!rHull) {
         return Avoid::newPoly(0);
     }
index ef89c290f89e47c5e7fba1dd8615e2e0dce53703..8260456d4bad10d9e563249582a461a495b22c5a 100644 (file)
@@ -602,7 +602,7 @@ connector_handle_motion_notify(SPConnectorContext *const cc, GdkEventMotion cons
 
     if (connector_within_tolerance) {
         gint const tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
-        if ( NR::LInfty( event_w - connector_drag_origin_w ) < tolerance ) {
+        if ( Geom::LInfty( event_w - connector_drag_origin_w ) < tolerance ) {
             return FALSE;   // Do not drag if we're within tolerance from origin.
         }
     }
@@ -1149,7 +1149,7 @@ static void cc_set_active_shape(SPConnectorContext *cc, SPItem *item)
     }
 
 
-    boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop(cc->active_shape);
+    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);
index 07817529dfaa25bc8ea29f211166fb655be0c337..c92bcfdf5ca2366d9c66e51f45fff3ab893d4114 100644 (file)
@@ -25,7 +25,7 @@
 #include "style.h"
 #include "preferences.h"
 #include "sp-use.h"
-#include "sp-feblend.h"
+#include "filters/blend.h"
 #include "sp-filter.h"
 #include "sp-filter-reference.h"
 #include "sp-gaussian-blur.h"
index 1ee24f9c6d35854c73c20714dd1e1450dbf52103..cd39e77aeb7ff4944fc76fb6811a74d884e0fd1a 100644 (file)
@@ -535,7 +535,7 @@ bool SPDesktop::isLayer(SPObject *object) const {
 bool SPDesktop::isWithinViewport (SPItem *item) const
 {
     Geom::Rect const viewport = get_display_area();
-    boost::optional<Geom::Rect> const bbox = sp_item_bbox_desktop(item);
+    Geom::OptRect const bbox = sp_item_bbox_desktop(item);
     if (bbox) {
         return viewport.contains(*bbox);
     } else {
@@ -756,7 +756,7 @@ SPDesktop::set_display_area (double x0, double y0, double x1, double y1, double
 
     // FIXME: This 2geom idiom doesn't allow us to declare dbox const
     Geom::Rect viewbox = canvas->getViewbox();
-    viewbox.expandBy(border);
+    viewbox.expandBy(-border);
 
     double scale = _d2w.descrim();
     double newscale;
@@ -937,8 +937,8 @@ SPDesktop::zoom_quick (bool enable)
         }
 
         if (!zoomed) {
-            boost::optional<Geom::Rect> const d = selection->bounds();
-            if (d && !d->isEmpty() && d->area() * 2.0 < _quick_zoom_stored_area.area()) {
+            Geom::OptRect const d = selection->bounds();
+            if (d && d->area() * 2.0 < _quick_zoom_stored_area.area()) {
                 set_display_area(*d, 10);
                 zoomed = true;
             } 
@@ -1038,8 +1038,7 @@ SPDesktop::zoom_page()
     Geom::Rect d(Geom::Point(0, 0),
                  Geom::Point(sp_document_width(doc()), sp_document_height(doc())));
 
-    // FIXME: the original NR::Rect::isEmpty call contained an additional threshold of 1.0; is it safe to ignore it?
-    if (d.isEmpty()) {
+    if (d.minExtent() < 1.0) {
         return;
     }
 
@@ -1070,10 +1069,9 @@ SPDesktop::zoom_page_width()
 void
 SPDesktop::zoom_selection()
 {
-    boost::optional<Geom::Rect> const d = selection->bounds();
+    Geom::OptRect const d = selection->bounds();
 
-    // FIXME: the original NR::Rect::isEmpty call contained an additional threshold of 0.1; is it safe to ignore it?
-    if ( !d || d->isEmpty() ) {
+    if ( !d || d->minExtent() < 0.1 ) {
         return;
     }
 
@@ -1099,13 +1097,12 @@ SPDesktop::zoom_drawing()
     SPItem *docitem = SP_ITEM (sp_document_root (doc()));
     g_return_if_fail (docitem != NULL);
 
-    boost::optional<Geom::Rect> d = sp_item_bbox_desktop(docitem);
+    Geom::OptRect d = sp_item_bbox_desktop(docitem);
 
     /* Note that the second condition here indicates that
     ** there are no items in the drawing.
     */
-    // FIXME: the original NR::Rect::isEmpty call contained an additional threshold of 1.0; is it safe to ignore it?
-    if ( !d || d->isEmpty() ) {
+    if ( !d || d->minExtent() < 0.1 ) {
         return;
     }
 
index 4087fbfe9cc4ed2cf9c11cadcbecc33b91da233b..e9fa7c6fc41521c604e9e21defc397f06fc0d877 100644 (file)
@@ -1,6 +1,5 @@
 SET(dialogs_SRC
 clonetiler.cpp
-debugdialog.cpp
 dialog-events.cpp
 eek-color-def.cpp
 eek-preview.cpp
@@ -21,7 +20,6 @@ sp-attribute-widget.cpp
 stroke-style.cpp
 swatches.cpp
 text-edit.cpp
-tiledialog.cpp
 unclump.cpp
 xml-tree.cpp
 )
index 4b1d42abbafdbc1c70e8621e9b9e374978f693f3..5d561466849f3cc3c131d46d21ff04d4f6475c4c 100644 (file)
@@ -13,57 +13,53 @@ dialogs/all: dialogs/libspdialogs.a
 dialogs/clean:
        rm -f dialogs/libspdialogs.a $(dialogs_libspdialogs_a_OBJECTS)
 
-dialogs_libspdialogs_a_SOURCES = \
-       dialogs/debugdialog.cpp \
-       dialogs/debugdialog.h   \
+dialogs_libspdialogs_a_SOURCES =       \
+       dialogs/clonetiler.cpp          \
+       dialogs/clonetiler.h            \
        dialogs/dialog-events.cpp       \
-       dialogs/dialog-events.h \
-       dialogs/eek-color-def.h \
+       dialogs/dialog-events.h         \
        dialogs/eek-color-def.cpp       \
-       dialogs/eek-preview.h   \
-       dialogs/eek-preview.cpp \
-       dialogs/export.cpp      \
-       dialogs/export.h        \
-       dialogs/extensions.cpp  \
-       dialogs/extensions.h    \
-       dialogs/fill-style.cpp  \
-       dialogs/fill-style.h    \
+       dialogs/eek-color-def.h         \
+       dialogs/eek-preview.cpp         \
+       dialogs/eek-preview.h           \
+       dialogs/export.cpp              \
+       dialogs/export.h                \
+       dialogs/extensions.cpp          \
+       dialogs/extensions.h            \
+       dialogs/fill-style.cpp          \
+       dialogs/fill-style.h            \
+       dialogs/find.cpp                \
+       dialogs/find.h                  \
        dialogs/guidelinedialog.cpp     \
        dialogs/guidelinedialog.h       \
+       dialogs/iconpreview.cpp         \
+       dialogs/iconpreview.h           \
        dialogs/in-dt-coordsys.cpp      \
        dialogs/in-dt-coordsys.h        \
-       dialogs/input.cpp       \
-       dialogs/input.h         \
+       dialogs/input.cpp               \
+       dialogs/input.h                 \
        dialogs/item-properties.cpp     \
        dialogs/item-properties.h       \
        dialogs/layer-properties.cpp    \
        dialogs/layer-properties.h      \
        dialogs/layers-panel.cpp        \
-       dialogs/layers-panel.h  \
+       dialogs/layers-panel.h          \
        dialogs/object-attributes.cpp   \
        dialogs/object-attributes.h     \
+       dialogs/rdf.cpp                 \
+       dialogs/rdf.h                   \
        dialogs/sp-attribute-widget.cpp \
        dialogs/sp-attribute-widget.h   \
        dialogs/stroke-style.cpp        \
-       dialogs/stroke-style.h  \
-       dialogs/swatches.cpp    \
-       dialogs/swatches.h      \
-       dialogs/text-edit.cpp   \
-       dialogs/text-edit.h     \
-       dialogs/tiledialog.cpp  \
-       dialogs/tiledialog.h    \
-       dialogs/xml-tree.cpp    \
-       dialogs/xml-tree.h      \
-       dialogs/rdf.cpp \
-       dialogs/rdf.h      \
-       dialogs/find.cpp        \
-       dialogs/find.h \
-       dialogs/clonetiler.cpp        \
-       dialogs/clonetiler.h        \
-       dialogs/unclump.cpp \
-       dialogs/unclump.h \
-       dialogs/iconpreview.cpp     \
-       dialogs/iconpreview.h
+       dialogs/stroke-style.h          \
+       dialogs/swatches.cpp            \
+       dialogs/swatches.h              \
+       dialogs/text-edit.cpp           \
+       dialogs/text-edit.h             \
+       dialogs/unclump.cpp             \
+       dialogs/unclump.h               \
+       dialogs/xml-tree.cpp            \
+       dialogs/xml-tree.h
 
 #      dialogs/sp-widget.c     \
 #      dialogs/sp-widget.h     \
index ce0fc15dfa3a7789f9241d5e0eb1ebb7557778f4..d1074ef73d5530a188058c33033d5a43346476a1 100644 (file)
@@ -1,14 +1,12 @@
-#define __SP_CLONE_TILER_C__
-
-/*
+/** @file
  * Clone tiling dialog
- *
- * Authors:
+ */
+/* Authors:
  *   bulia byak <buliabyak@users.sf.net>
  *   Johan Engelen <goejendaagh@zonnet.nl>
  *
  * Copyright (C) 2004-2006 Authors
- * Released under GNU GPL
+ * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
 #ifdef HAVE_CONFIG_H
@@ -1246,7 +1244,7 @@ clonetiler_apply( GtkWidget */*widget*/, void * )
         bool prefs_bbox = prefs->getBool("/tools/bounding_box", false);
         SPItem::BBoxType bbox_type = ( prefs_bbox ? 
             SPItem::APPROXIMATE_BBOX : SPItem::GEOMETRIC_BBOX );
-        boost::optional<Geom::Rect> r = SP_ITEM(obj)->getBounds(sp_item_i2doc_affine(SP_ITEM(obj)),
+        Geom::OptRect r = SP_ITEM(obj)->getBounds(sp_item_i2doc_affine(SP_ITEM(obj)),
                                                         bbox_type);
         if (r) {
             w = r->dimensions()[Geom::X];
index 82206818cb16645eb6ce3db356c885619113c5dc..6bfb257a42d7ede26c7e69c6d70e97bd7447b78e 100644 (file)
@@ -1,15 +1,14 @@
-#ifndef __SP_CLONE_TILER_H__
-#define __SP_CLONE_TILER_H__
-
-/**
- * \brief Clone tiling dialog
- *
- * Authors:
- *   bulia byak
+/** @file
+ * @brief Clone tiling dialog
+ */
+/* Authors:
+ *   bulia byak <buliabyak@users.sf.net>
  *
  * Copyright (C) 2004 Authors
- *
+ * Released under the GNU GPL, read the file 'COPYING' for more information
  */
+#ifndef __SP_CLONE_TILER_H__
+#define __SP_CLONE_TILER_H__
 
 #include <glib.h>
 
diff --git a/src/dialogs/debugdialog.cpp b/src/dialogs/debugdialog.cpp
deleted file mode 100644 (file)
index 42bf960..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * A very simple dialog for displaying Inkscape messages. Messages
- * sent to g_log(), g_warning(), g_message(), ets, are routed here,
- * in order to avoid messing with the startup console.
- *
- * Authors:
- *   Bob Jamison
- *   Other dudes from The Inkscape Organization
- *
- * Copyright (C) 2004 The Inkscape Organization
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <glibmm/i18n.h>
-#include <gtkmm/box.h>
-#include <gtkmm/dialog.h>
-#include <gtkmm/textview.h>
-#include <gtkmm/button.h>
-#include <gtkmm/menubar.h>
-#include <gtkmm/scrolledwindow.h>
-
-#include "debugdialog.h"
-
-namespace Inkscape {
-namespace UI {
-namespace Dialogs {
-
-
-//#########################################################################
-//## I M P L E M E N T A T I O N
-//#########################################################################
-
-/**
- * A dialog that displays log messages
- */
-class DebugDialogImpl : public DebugDialog, public Gtk::Dialog
-{
-
-    public:
-    
-
-    /**
-     * Constructor
-     */
-    DebugDialogImpl();
-
-    /**
-     * Destructor
-     */
-    ~DebugDialogImpl();
-
-
-    /**
-     * Show the dialog
-     */
-    void show();
-
-    /**
-     * Do not show the dialog
-     */
-    void hide();
-
-    /**
-     * Clear all information from the dialog
-     */
-    void clear();
-
-    /**
-     * Display a message
-     */
-    void message(char const *msg);
-    
-    /**
-     * Redirect g_log() messages to this widget
-     */
-    void captureLogMessages();
-
-    /**
-     * Return g_log() messages to normal handling
-     */
-    void releaseLogMessages();
-
-
-
-    private:
-
-
-    Gtk::MenuBar menuBar;
-
-    Gtk::Menu   fileMenu;
-
-    Gtk::ScrolledWindow textScroll;
-
-    Gtk::TextView messageText;
-
-    //Handler ID's
-    guint handlerDefault;
-    guint handlerGlibmm;
-    guint handlerAtkmm;
-    guint handlerPangomm;
-    guint handlerGdkmm;
-    guint handlerGtkmm;
-
-};
-
-
-
-
-//#########################################################################
-//## E V E N T S
-//#########################################################################
-
-/**
- * Also a public method.  Remove all text from the dialog
- */
-void DebugDialogImpl::clear()
-{
-    Glib::RefPtr<Gtk::TextBuffer> buffer = messageText.get_buffer();
-    buffer->erase(buffer->begin(), buffer->end());
-}
-
-
-//#########################################################################
-//## C O N S T R U C T O R    /    D E S T R U C T O R
-//#########################################################################
-/**
- * Constructor
- */
-DebugDialogImpl::DebugDialogImpl()
-{
-    set_title(_("Messages"));
-    set_size_request(300, 400);
-
-    Gtk::VBox *mainVBox = get_vbox();
-
-    //## Add a menu for clear()
-    menuBar.items().push_back( Gtk::Menu_Helpers::MenuElem(_("_File"), fileMenu) );
-    fileMenu.items().push_back( Gtk::Menu_Helpers::MenuElem(_("_Clear"),
-           sigc::mem_fun(*this, &DebugDialogImpl::clear) ) );
-    fileMenu.items().push_back( Gtk::Menu_Helpers::MenuElem(_("Capture log messages"),
-           sigc::mem_fun(*this, &DebugDialogImpl::captureLogMessages) ) );
-    fileMenu.items().push_back( Gtk::Menu_Helpers::MenuElem(_("Release log messages"),
-           sigc::mem_fun(*this, &DebugDialogImpl::releaseLogMessages) ) );
-    mainVBox->pack_start(menuBar, Gtk::PACK_SHRINK);
-    
-
-    //### Set up the text widget
-    messageText.set_editable(false);
-    textScroll.add(messageText);
-    textScroll.set_policy(Gtk::POLICY_ALWAYS, Gtk::POLICY_ALWAYS);
-    mainVBox->pack_start(textScroll);
-
-    show_all_children();
-
-    message("ready.");
-    message("enable log display by setting ");
-    message("dialogs.debug 'redirect' attribute to 1 in preferences.xml");
-
-    handlerDefault = 0;
-    handlerGlibmm  = 0;
-    handlerAtkmm   = 0;
-    handlerPangomm = 0;
-    handlerGdkmm   = 0;
-    handlerGtkmm   = 0;
-}
-
-/**
- * Factory method.  Use this to create a new DebugDialog
- */
-DebugDialog *DebugDialog::create()
-{
-    DebugDialog *dialog = new DebugDialogImpl();
-    return dialog;
-}
-
-
-/**
- * Constructor
- */
-DebugDialogImpl::~DebugDialogImpl()
-{
-
-
-}
-
-
-//#########################################################################
-//## M E T H O D S
-//#########################################################################
-
-void DebugDialogImpl::show()
-{
-    //call super()
-    Gtk::Dialog::show();
-    //sp_transientize((GtkWidget *)gobj());  //Make transient
-    raise();
-    Gtk::Dialog::present();
-}
-
-
-
-void DebugDialogImpl::hide()
-{
-    //call super()
-    Gtk::Dialog::hide();
-}
-
-
-
-void DebugDialogImpl::message(char const *msg)
-{
-    Glib::RefPtr<Gtk::TextBuffer> buffer = messageText.get_buffer();
-    Glib::ustring uMsg = msg;
-    if (uMsg[uMsg.length()-1] != '\n')
-        uMsg += '\n';
-    buffer->insert (buffer->end(), uMsg);
-}
-
-
-/* static instance, to reduce dependencies */
-static DebugDialog *debugDialogInstance = NULL;
-
-DebugDialog *DebugDialog::getInstance()
-{
-    if ( !debugDialogInstance )
-        {
-        debugDialogInstance = new DebugDialogImpl();
-        }
-    return debugDialogInstance;
-}
-
-
-
-void DebugDialog::showInstance()
-{
-    DebugDialog *debugDialog = getInstance();
-    debugDialog->show();
-}
-
-
-
-
-/*##### THIS IS THE IMPORTANT PART ##### */
-void dialogLoggingFunction(const gchar */*log_domain*/,
-                           GLogLevelFlags /*log_level*/,
-                           const gchar *messageText,
-                           gpointer user_data)
-{
-    DebugDialogImpl *dlg = (DebugDialogImpl *)user_data;
-
-    dlg->message(messageText);
-
-}
-
-
-void DebugDialogImpl::captureLogMessages()
-{
-    /*
-    This might likely need more code, to capture Gtkmm
-    and Glibmm warnings, or maybe just simply grab stdout/stderr
-    */
-   GLogLevelFlags flags = (GLogLevelFlags) (G_LOG_LEVEL_ERROR   | G_LOG_LEVEL_CRITICAL |
-                             G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE  |
-                             G_LOG_LEVEL_INFO    | G_LOG_LEVEL_DEBUG);
-    if ( !handlerDefault )
-        {
-        handlerDefault = g_log_set_handler(NULL, flags,
-              dialogLoggingFunction, (gpointer)this);
-        }
-    if ( !handlerGlibmm )
-        {
-        handlerGlibmm = g_log_set_handler("glibmm", flags,
-              dialogLoggingFunction, (gpointer)this);
-        }
-    if ( !handlerAtkmm )
-        {
-        handlerAtkmm = g_log_set_handler("atkmm", flags,
-              dialogLoggingFunction, (gpointer)this);
-        }
-    if ( !handlerPangomm )
-        {
-        handlerPangomm = g_log_set_handler("pangomm", flags,
-              dialogLoggingFunction, (gpointer)this);
-        }
-    if ( !handlerGdkmm )
-        {
-        handlerGdkmm = g_log_set_handler("gdkmm", flags,
-              dialogLoggingFunction, (gpointer)this);
-        }
-    if ( !handlerGtkmm )
-        {
-        handlerGtkmm = g_log_set_handler("gtkmm", flags,
-              dialogLoggingFunction, (gpointer)this);
-        }
-    message("log capture started");
-}
-
-void DebugDialogImpl::releaseLogMessages()
-{
-    if ( handlerDefault )
-        {
-        g_log_remove_handler(NULL, handlerDefault);
-        handlerDefault = 0;
-        }
-    if ( handlerGlibmm )
-        {
-        g_log_remove_handler("glibmm", handlerGlibmm);
-        handlerGlibmm = 0;
-        }
-    if ( handlerAtkmm )
-        {
-        g_log_remove_handler("atkmm", handlerAtkmm);
-        handlerAtkmm = 0;
-        }
-    if ( handlerPangomm )
-        {
-        g_log_remove_handler("pangomm", handlerPangomm);
-        handlerPangomm = 0;
-        }
-    if ( handlerGdkmm )
-        {
-        g_log_remove_handler("gdkmm", handlerGdkmm);
-        handlerGdkmm = 0;
-        }
-    if ( handlerGtkmm )
-        {
-        g_log_remove_handler("gtkmm", handlerGtkmm);
-        handlerGtkmm = 0;
-        }
-    message("log capture discontinued");
-}
-
-
-
-} //namespace Dialogs
-} //namespace UI
-} //namespace Inkscape
-
-//#########################################################################
-//## E N D    O F    F I L E
-//#########################################################################
-
-
-
diff --git a/src/dialogs/debugdialog.h b/src/dialogs/debugdialog.h
deleted file mode 100644 (file)
index 1a4a036..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef __DEBUGDIALOG_H__
-#define __DEBUGDIALOG_H__
-/*
- * A very simple dialog for displaying Inkscape messages. Messages
- * sent to g_log(), g_warning(), g_message(), ets, are routed here,
- * in order to avoid messing with the startup console.
- *
- * Authors:
- *   Bob Jamison
- *   Other dudes from The Inkscape Organization
- *
- * Copyright (C) 2004 The Inkscape Organization
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-
-
-namespace Inkscape {
-namespace UI {
-namespace Dialogs {
-
-
-/**
- * A dialog that displays log messages
- */
-class DebugDialog
-{
-
-    public:
-    
-
-    /**
-     * Constructor
-     */
-    DebugDialog() {};
-
-
-    /**
-     * Factory method
-     */
-    static DebugDialog *create();
-
-    /**
-     * Destructor
-     */
-    virtual ~DebugDialog() {};
-
-
-    /**
-     * Show the dialog
-     */
-    virtual void show() = 0;
-
-    /**
-     * Do not show the dialog
-     */
-    virtual void hide() = 0;
-
-    /**
-     * Clear all information from the dialog
-     */
-    virtual void clear() = 0;
-
-    /**
-     * Display a message
-     */
-    virtual void message(char const *msg) = 0;
-
-    /**
-     * Redirect g_log() messages to this widget
-     */
-    virtual void captureLogMessages() = 0;
-
-    /**
-     * Return g_log() messages to normal handling
-     */
-    virtual void releaseLogMessages() = 0;
-
-    /**
-     * Get a shared singleton instance
-     */
-    static DebugDialog *getInstance();
-
-    /**
-     * Show the instance above
-     */
-    static void showInstance();
-
-
-    
-
-};
-
-
-} //namespace Dialogs
-} //namespace UI
-} //namespace Inkscape
-
-
-
-
-#endif /* __DEBUGDIALOG_H__ */
-
index b306e42d6245ff2e4f1a05affdd1d1caa68644f0..da55936ced1b8b8572391bbbc75b99ecbdeaed63 100644 (file)
@@ -1,9 +1,7 @@
-#define __DIALOG_EVENTS_C__
-
-/**
- * \brief  Event handler for dialog windows
- *
- * Authors:
+/** @file
+ * @brief  Event handler for dialog windows
+ */
+/* Authors:
  *   bulia byak <bulia@dr.com>
  *   Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
  *
@@ -31,9 +29,9 @@
 
 
 /**
-* \brief  This function is called to zero the transientize semaphore by a
-*         timeout.
-*/
+ * \brief  This function is called to zero the transientize semaphore by a
+ *         timeout.
+ */
 gboolean
 sp_allow_again (gpointer *wd)
 {
index 46cbc7a67a520bb42096ed7186a3f83a8fca2df8..2fca84ad2bd3e6257e678849563b6114c54edec8 100644 (file)
@@ -1,10 +1,7 @@
-#ifndef __DIALOG_EVENTS_H__
-#define __DIALOG_EVENTS_H__
-
-/**
- * \brief  Event handler for dialog windows
- *
- * Authors:
+/** @file
+ * @brief  Event handler for dialog windows
+ */
+/* Authors:
  *   bulia byak <bulia@dr.com>
  *
  * Copyright (C) 2003 authors
@@ -12,6 +9,9 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef __DIALOG_EVENTS_H__
+#define __DIALOG_EVENTS_H__
+
 #include <gtk/gtkstyle.h>
 #include <gtk/gtkwindow.h>
 #include <forward.h>
@@ -31,8 +31,8 @@ class Entry;
 }
  
 typedef struct { 
-  GtkWidget *win;
-  guint stop;
+    GtkWidget *win;
+    guint stop;
 } win_data;
 
 
index 9a079b68fe89010739873ed46f154cb7350d6b09..85b00b251a0708fbf8b679296505f92d0546856b 100644 (file)
@@ -1,5 +1,5 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
+/** @file
+ * @brief EEK color definition
  */
 /* ***** BEGIN LICENSE BLOCK *****
  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
@@ -133,5 +133,15 @@ void ColorDef::removeCallback( ColorCallback cb, void* data )
     (void)data;
 }
 
-
 } // namespace eek
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index e17e8a59617827c2e3ba11f4047dd9f14718a349..63cd096be981d11649d09c16d5aa4c32ecd28c5e 100644 (file)
@@ -1,7 +1,5 @@
-#ifndef SEEN_EEK_COLOR_DEF_H
-#define SEEN_EEK_COLOR_DEF_H
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
+/** @file
+ * @brief EEK color definition
  */
 /* ***** BEGIN LICENSE BLOCK *****
  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
@@ -39,6 +37,9 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
+#ifndef SEEN_EEK_COLOR_DEF_H
+#define SEEN_EEK_COLOR_DEF_H
+
 #include <string>
 #include <vector>
 
@@ -87,5 +88,15 @@ private:
 
 } // namespace eek
 
-
 #endif // SEEN_EEK_COLOR_DEF_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 :
index 145346af3026f595c20fb199284b2f82d7801ada..f9aadc561f8e9c4a98b3bdd869fca99a371c484a 100644 (file)
@@ -1,5 +1,5 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
+/** @file
+ * @brief EEK preview stuff
  */
 /* ***** BEGIN LICENSE BLOCK *****
  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
@@ -655,27 +655,27 @@ static void eek_preview_init( EekPreview *preview )
 /*   GTK_STATE_SELECTED, */
 /*   GTK_STATE_INSENSITIVE */
 
-  if ( 0 ) {
-    GdkColor color = {0,0,0,0};
-
-    color.red = 0xffff;
-    color.green = 0;
-    color.blue = 0xffff;
-    gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
-    gtk_widget_modify_bg(widg, GTK_STATE_ACTIVE, &color);
-
-    color.red = 0;
-    color.green = 0xffff;
-    color.blue = 0;
-    gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
-    gtk_widget_modify_bg(widg, GTK_STATE_SELECTED, &color);
-
-    color.red = 0xffff;
-    color.green = 0;
-    color.blue = 0;
-    gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
-    gtk_widget_modify_bg( widg, GTK_STATE_PRELIGHT, &color );
-  }
+    if ( 0 ) {
+        GdkColor color = {0,0,0,0};
+
+        color.red = 0xffff;
+        color.green = 0;
+        color.blue = 0xffff;
+        gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
+        gtk_widget_modify_bg(widg, GTK_STATE_ACTIVE, &color);
+
+        color.red = 0;
+        color.green = 0xffff;
+        color.blue = 0;
+        gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
+        gtk_widget_modify_bg(widg, GTK_STATE_SELECTED, &color);
+
+        color.red = 0xffff;
+        color.green = 0;
+        color.blue = 0;
+        gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE );
+        gtk_widget_modify_bg( widg, GTK_STATE_PRELIGHT, &color );
+    }
 }
 
 
@@ -684,3 +684,13 @@ GtkWidget* eek_preview_new(void)
     return GTK_WIDGET( g_object_new( EEK_PREVIEW_TYPE, NULL ) );
 }
 
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index ee99125af35dc9b982316fa8e3bfd5aa1987c996..40597eb486c84f908e7eb3925bd2ca04b724bbc2 100644 (file)
@@ -1,7 +1,5 @@
-#ifndef SEEN_EEK_PREVIEW_H
-#define SEEN_EEK_PREVIEW_H
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
+/** @file
+ * @brief EEK preview stuff
  */
 /* ***** BEGIN LICENSE BLOCK *****
  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
@@ -39,6 +37,9 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
+#ifndef SEEN_EEK_PREVIEW_H
+#define SEEN_EEK_PREVIEW_H
+
 #include <gtk/gtkdrawingarea.h>
 
 G_BEGIN_DECLS
@@ -131,5 +132,15 @@ void eek_preview_set_size_mappings( guint count, GtkIconSize const* sizes );
 
 G_END_DECLS
 
-
 #endif /* SEEN_EEK_PREVIEW_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 :
index dc337ef8e841ea006d025334258262825ee0ffbd..f1a68c9994dbadc52b33b0a76b392d89adc0e02a 100644 (file)
@@ -1,11 +1,7 @@
-#define __SP_EXPORT_C__
-
-/** \file
- * \brief  PNG export dialog
+/** @file
+ * @brief  PNG export dialog
  */
-
-/*
- * Authors:
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   bulia byak <buliabyak@users.sf.net>
  *   Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
@@ -317,7 +313,7 @@ sp_export_dialog_area_box (GtkWidget * dlg)
                                dlg );
 
     sp_export_spinbutton_new ( "width", 0.0, 0.0, PNG_UINT_31_MAX, 0.1, 1.0,
-                               us->gobj(), GTK_WIDGET(t->gobj()), 4, 0, _("Width:"), NULL, EXPORT_COORD_PRECISION, 1,
+                               us->gobj(), GTK_WIDGET(t->gobj()), 4, 0, _("Wid_th:"), NULL, EXPORT_COORD_PRECISION, 1,
                                G_CALLBACK
                                    (sp_export_area_width_value_changed),
                                dlg );
@@ -333,7 +329,7 @@ sp_export_dialog_area_box (GtkWidget * dlg)
                                dlg );
 
     sp_export_spinbutton_new ( "height", 0.0, 0.0, PNG_UINT_31_MAX, 0.1, 1.0,
-                               us->gobj(), GTK_WIDGET(t->gobj()), 4, 1, _("Height:"), NULL, EXPORT_COORD_PRECISION, 1,
+                               us->gobj(), GTK_WIDGET(t->gobj()), 4, 1, _("Hei_ght:"), NULL, EXPORT_COORD_PRECISION, 1,
                                G_CALLBACK (sp_export_area_height_value_changed),
                                dlg );
 
@@ -492,7 +488,7 @@ sp_export_dialog (void)
 
             sp_export_spinbutton_new ( "bmheight", 16.0, 1.0, 1000000.0, 1.0, 10.0,
                                        NULL, GTK_WIDGET(t->gobj()), 0, 1,
-                                       _("Height:"), _("pixels at"), 0, 1,
+                                       _("_Height:"), _("pixels at"), 0, 1,
                                        G_CALLBACK
                                        (sp_export_bitmap_height_value_changed),
                                        dlg );
@@ -626,7 +622,7 @@ sp_export_dialog (void)
 
         {
             Gtk::HBox* hide_box = new Gtk::HBox(FALSE, 5);
-            GtkWidget *he = gtk_check_button_new_with_label(_("Hide all except selected"));
+            GtkWidget *he = gtk_check_button_new_with_label(_("Hide _all except selected"));
             gtk_widget_set_sensitive(GTK_WIDGET(he), TRUE);
             gtk_object_set_data(GTK_OBJECT(dlg), "hide_checkbox", he);
             hide_box->pack_start(*Glib::wrap(he), false, false);
@@ -778,7 +774,7 @@ sp_export_selection_modified ( Inkscape::Application */*inkscape*/,
             if ( SP_ACTIVE_DESKTOP ) {
                 SPDocument *doc;
                 doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
-                boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop (SP_ITEM (SP_DOCUMENT_ROOT (doc)));
+                Geom::OptRect bbox = sp_item_bbox_desktop (SP_ITEM (SP_DOCUMENT_ROOT (doc)));
                 if (bbox) {
                     sp_export_set_area (base, bbox->min()[Geom::X],
                                               bbox->min()[Geom::Y],
@@ -837,7 +833,7 @@ sp_export_area_toggled (GtkToggleButton *tb, GtkObject *base)
     if ( SP_ACTIVE_DESKTOP )
     {
         SPDocument *doc;
-        boost::optional<Geom::Rect> bbox;
+        Geom::OptRect bbox;
         doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
 
         /* Notice how the switch is used to 'fall through' here to get
@@ -1102,26 +1098,27 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
                 dpi = DPI_BASE;
             }
 
-            NRRect area;
-            sp_item_invoke_bbox(item, &area, sp_item_i2r_affine((SPItem *) item), TRUE);
-
-            gint width = (gint) ((area.x1 - area.x0) * dpi / PX_PER_IN + 0.5);
-            gint height = (gint) ((area.y1 - area.y0) * dpi / PX_PER_IN + 0.5);
-
-            if (width > 1 && height > 1) {
-                /* Do export */
-                if (!sp_export_png_file (sp_desktop_document (SP_ACTIVE_DESKTOP), fn,
-                                         area.x0, area.y0, area.x1, area.y1, width, height, dpi, dpi,
-                                         nv->pagecolor,
-                                         NULL, NULL, TRUE,  // overwrite without asking
-                                         hide ? (GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList() : NULL
-                        )) {
-                    gchar * error;
-                    gchar * safeFile = Inkscape::IO::sanitizeString(fn);
-                    error = g_strdup_printf(_("Could not export to filename %s.\n"), safeFile);
-                    sp_ui_error_dialog(error);
-                    g_free(safeFile);
-                    g_free(error);
+            Geom::OptRect area;
+            sp_item_invoke_bbox(item, area, sp_item_i2r_affine((SPItem *) item), TRUE);
+            if (area) {
+                gint width = (gint) (area->width() * dpi / PX_PER_IN + 0.5);
+                gint height = (gint) (area->height() * dpi / PX_PER_IN + 0.5);
+
+                if (width > 1 && height > 1) {
+                    /* Do export */
+                    if (!sp_export_png_file (sp_desktop_document (SP_ACTIVE_DESKTOP), fn,
+                                             *area, width, height, dpi, dpi,
+                                             nv->pagecolor,
+                                             NULL, NULL, TRUE,  // overwrite without asking
+                                             hide ? (GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList() : NULL
+                            )) {
+                        gchar * error;
+                        gchar * safeFile = Inkscape::IO::sanitizeString(fn);
+                        error = g_strdup_printf(_("Could not export to filename %s.\n"), safeFile);
+                        sp_ui_error_dialog(error);
+                        g_free(safeFile);
+                        g_free(error);
+                    }
                 }
             }
             n++;
@@ -1183,7 +1180,7 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
 
     /* Do export */
     if (!sp_export_png_file (sp_desktop_document (SP_ACTIVE_DESKTOP), filename_ext,
-                             x0, y0, x1, y1, width, height, xdpi, ydpi,
+                             Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1)), width, height, xdpi, ydpi,
                              nv->pagecolor,
                              sp_export_progress_callback, base, FALSE,
                              hide ? (GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList() : NULL
@@ -1407,7 +1404,7 @@ sp_export_detect_size(GtkObject * base) {
         switch (this_test[i]) {
             case SELECTION_SELECTION:
                 if ((sp_desktop_selection(SP_ACTIVE_DESKTOP))->isEmpty() == false) {
-                    boost::optional<Geom::Rect> bbox = (sp_desktop_selection (SP_ACTIVE_DESKTOP))->bounds();
+                    Geom::OptRect bbox = (sp_desktop_selection (SP_ACTIVE_DESKTOP))->bounds();
 
                     //std::cout << "Selection " << bbox;
                     if ( bbox && sp_export_bbox_equal(*bbox,current_bbox)) {
@@ -1418,7 +1415,7 @@ sp_export_detect_size(GtkObject * base) {
             case SELECTION_DRAWING: {
                 SPDocument *doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
 
-                boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop (SP_ITEM (SP_DOCUMENT_ROOT (doc)));
+                Geom::OptRect bbox = sp_item_bbox_desktop (SP_ITEM (SP_DOCUMENT_ROOT (doc)));
 
                 // std::cout << "Drawing " << bbox2;
                 if ( bbox && sp_export_bbox_equal(*bbox,current_bbox) ) {
@@ -1969,9 +1966,9 @@ sp_export_filename_modified (GtkObject * object, gpointer data)
   Local Variables:
   mode:c++
   c-file-style:"stroustrup"
-  c-file-offsets:((innamespace . 0)(inline-open . 0))
+  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 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 3bb0a1375e3b500921a653c8657e322bdad96ca4..801ddc91a2f2465491934e4b2a61524d48bc194a 100644 (file)
@@ -1,14 +1,24 @@
+/** @file
+ * @brief export to bitmap dialog
+ */
+/* Authors:
+ *   Lauris Kaplinski <lauris@kaplinski.com>
+ *   bulia byak <buliabyak@users.sf.net>
+ *   Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ *
+ * Copyright (C) 1999-2007 Authors
+ * Copyright (C) 2001-2002 Ximian, Inc.
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
 #ifndef SP_EXPORT_H
 #define SP_EXPORT_H
 
 /**
- * \brief export to bitmap dialog
- *
  * Creates a dialog window for exporting an image to a bitmap if one doesn't already exist and
- * shows it to the user.  If the dialog has already been created, it simply shows the window.
- *
+ * shows it to the user. If the dialog has already been created, it simply shows the window.
  */
-
 void sp_export_dialog (void);
 
 #endif
index e363df6074b8faaa8af17e8c43493ce5deea2533..f168da33ac1d453fd1c24153694bb1de0cfd0695 100644 (file)
@@ -1,16 +1,13 @@
-/*
- * A simple dialog for previewing icon representation.
- *
- * Authors:
+/** @file
+ * @brief A simple dialog with information about extensions
+ */
+/* Authors:
  *   Jon A. Cruz
  *
  * Copyright (C) 2005 Jon A. Cruz
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
 
 #include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
 #include <gtkmm/scrolledwindow.h>
@@ -116,8 +113,17 @@ void ExtensionsPanel::rescan()
 //     g_message("\\------------------");
 }
 
-
-
 } //namespace Dialogs
 } //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 :
index e253ab84987edd34a0df83899c51875240d9a13d..8b0fc27804d22eb3f4be76ab9ccc70b7027bfe20 100644 (file)
@@ -1,24 +1,23 @@
-
-#ifndef SEEN_EXTENSIONS_H
-#define SEEN_EXTENSIONS_H
-/*
- * A simple dialog for previewing icon representation.
- *
- * Authors:
+/** @file
+ * A simple dialog with information about extensions
+ */
+/* Authors:
  *   Jon A. Cruz
  *
  * Copyright (C) 2005 The Inkscape Organization
- *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
+#ifndef SEEN_EXTENSIONS_H
+#define SEEN_EXTENSIONS_H
 
 #include <gtkmm/textview.h>
 #include "ui/widget/panel.h"
 
 namespace Inkscape {
-        namespace Extension {
-                class Extension;
-        }
+namespace Extension {
+class Extension;
+}
 }
 
 namespace Inkscape {
@@ -54,6 +53,4 @@ private:
 } //namespace UI
 } //namespace Inkscape
 
-
-
 #endif // SEEN_EXTENSIONS_H
index e095425a963c105dd2048f514388c256cf40f852..e1c30e7aebdf4a5fb21625fe4e48f1a28146fabe 100644 (file)
@@ -1,9 +1,7 @@
-#define __SP_FILL_STYLE_C__
-
-/**
- * \brief  Fill style widget
- *
- * Authors:
+/** @file
+ * @brief  Fill style widget
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   Frank Felfe <innerspace@iname.com>
  *   bulia byak <buliabyak@users.sf.net>
index 96cb06987f8ae0d3ece9c5e18bb5952b69888976..3924412ec3848e5a12c8db228e6f403e10b8dbd6 100644 (file)
@@ -1,10 +1,7 @@
-#ifndef __SP_FILL_STYLE_H__
-#define __SP_FILL_STYLE_H__
-
-/**
- * \brief  Fill style configuration
- *
- * Authors:
+/** @file
+ * @brief  Fill style configuration
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *
  * Copyright (C) 2002 Lauris Kaplinski
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-#include <glib.h>
+#ifndef SEEN_DIALOGS_SP_FILL_STYLE_H
+#define SEEN_DIALOGS_SP_FILL_STYLE_H
 
+#include <glib.h>
 #include <gtk/gtkwidget.h>
-
 #include "forward.h"
 
 
index 96a6305530122dbec92f256a63209b4bde3231c0..29a0fe7e8d88963a885baeb9f118b5fdad2ef185 100644 (file)
@@ -1,9 +1,7 @@
-#define __SP_TRANSFORMATION_C__
-
-/**
- * \brief  Find dialog
- *
- * Authors:
+/** @file
+ * @brief  Find dialog
+ */
+/* Authors:
  *   bulia byak <bulia@users.sf.net>
  *
  * Copyright (C) 2004 Authors
@@ -11,13 +9,7 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-
 #include "widgets/icon.h"
-
 #include "message-stack.h"
 
 //TODO  : delete this
@@ -69,9 +61,6 @@ sp_find_dialog(){
 
 #define MIN_ONSCREEN_DISTANCE 50
 
-using NR::X;
-using NR::Y;
-
 static GtkWidget *dlg = NULL;
 static win_data wd;
 
index 38200d5321b33db787795609b261593a0e03cf5e..fe5861a7352b245627e797befdcdc1c77cd4a3ad 100644 (file)
@@ -1,10 +1,7 @@
-#ifndef SEEN_FIND_H
-#define SEEN_FIND_H
-
-/**
- * \brief  Find dialog
- *
- * Authors:
+/** @file
+ * @brief  Find dialog
+ */
+/* Authors:
  *   bulia byak <bulia@users.sf.net>
  *
  * Copyright (C) 2004 Authors
@@ -12,6 +9,9 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef SEEN_FIND_H
+#define SEEN_FIND_H
+
 #include <gtk/gtkstyle.h>
 
 void sp_find_dialog();
index 1dc23cb2b3654315bf1c0f00ee315e81ec792fa4..f0115ee913cd6dae305a329fd1c0dda49c8ea6fd 100644 (file)
@@ -1,9 +1,7 @@
-#define __GUIDELINE_CPP__
-
-/*
- * simple guideline dialog
- *
- * Authors:
+/** @file
+ * @brief Simple guideline dialog
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   Andrius R. <knutux@gmail.com>
  *   Johan Engelen
@@ -285,4 +283,3 @@ void GuidelinePropertiesDialog::_setup() {
   End:
 */
 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
-
index f31914e3eb88d8cdabf5de9cb14f18e8d9cb249a..4d402d23560b4e6d6cad7768888c26f90a7cbfaa 100644 (file)
@@ -1,7 +1,7 @@
-/*
- * A simple dialog for previewing icon representation.
- *
- * Authors:
+/** @file
+ * @brief A simple dialog for previewing icon representation.
+ */
+/* Authors:
  *   Jon A. Cruz
  *   Bob Jamison
  *   Other dudes from The Inkscape Organization
index 3a3652334568b39e32b333cfd327772ad90af70e..8f143725d6ca7064b481e1210a13fb11c974fd8c 100644 (file)
@@ -1,9 +1,7 @@
-#ifndef SEEN_ICON_PREVIEW_H
-#define SEEN_ICON_PREVIEW_H
-/*
- * A simple dialog for previewing icon representation.
- *
- * Authors:
+/** @file
+ * @brief A simple dialog for previewing icon representation.
+ */
+/* Authors:
  *   Jon A. Cruz
  *   Bob Jamison
  *   Other dudes from The Inkscape Organization
@@ -13,6 +11,9 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef SEEN_ICON_PREVIEW_H
+#define SEEN_ICON_PREVIEW_H
+
 #include <gtkmm/box.h>
 #include <gtkmm/button.h>
 #include <gtkmm/label.h>
index 6078f9b41110d8b0af12b72cfda283cd79aecd7b..c2ec96d8ecf2e1a35acec03e6aba77bbd5a04dfb 100644 (file)
@@ -4,7 +4,6 @@
 
 bool in_dt_coordsys(SPObject const &item);
 
-
 #endif /* !SEEN_IN_DT_COORDSYS */
 
 /*
index e23fcc848ba7b885c2173f96bdc945b466e9510d..0b4587f55aeb9a074b7e12bdcb780af16bf6e847 100644 (file)
@@ -1,5 +1,3 @@
-#define __SP_INPUT_C__
-
 /** @file
  * @brief Extended input devices dialog
  */
@@ -13,8 +11,9 @@
  */
 
 #ifdef HAVE_CONFIG_H
-# include "config.h"
+#   include <config.h>
 #endif
+
 #include <gtk/gtksignal.h>
 #include <gtk/gtkinputdialog.h>
 #include <glibmm/ustring.h>
index 70e68774e80eef57f9a33c3ce5f19205b34fd90f..0996d06ca7467de193df3f919246cf3c79cb0847 100644 (file)
@@ -1,10 +1,7 @@
-#ifndef __SP_INPUT_H__
-#define __SP_INPUT_H__
-
-/**
- * \brief  Extended input device dialog
- *
- * Author:
+/** @file
+ * @brief  Extended input device dialog
+ */
+/* Author:
  *   Nicklas Lindgren <nili@lysator.liu.se>
  *
  * Copyright (C) 2005 Authors
@@ -12,6 +9,8 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef SEEN_DIALOGS_INPUT_H
+#define SEEN_DIALOGS_INPUT_H
 
 void sp_input_load_from_preferences (void);
 void sp_input_save_to_preferences (void);
index 808775786b9a4fb5c6013e043ec2c3a1ffc790cc..d1992b158ce03545e28da1f7396fabc191b20c02 100644 (file)
@@ -1,9 +1,7 @@
-#define __SP_ITEM_PROPERTIES_C__
-
-/*
- * Object properties dialog
- *
- * Authors:
+/** @file
+ * @brief Object properties dialog
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   bulia byak <buliabyak@users.sf.net>
  *   Johan Engelen <goejendaagh@zonnet.nl>
index a81034aaeca11aef998e61a44bc783113d61bbf0..9815a1fc58b66ab24ac8f1dacf8935d79b6c0179 100644 (file)
@@ -1,20 +1,17 @@
-#ifndef __SP_ITEM_PROPERTIES_H__
-#define __SP_ITEM_PROPERTIES_H__
-
-/**
+/** @file
  * \brief  Display settings dialog
- *
- * Author:
+ */
+/* Author:
  *   Lauris Kaplinski <lauris@ximian.com>
  *
  * Copyright (C) 2001 Ximian, Inc.
- *
+ * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-#include <glib.h>
-
-
+#ifndef SEEN_DIALOGS_ITEM_PROPERTIES_H
+#define SEEN_DIALOGS_ITEM_PROPERTIES_H
 
+#include <glib.h>
 #include <gtk/gtkwidget.h>
 #include "../forward.h"
 
@@ -22,8 +19,6 @@ GtkWidget *sp_item_widget_new (void);
 
 void sp_item_dialog (void);
 
-
-
 #endif
 
 /*
index bd95fbc719b9c6c9ff2857c69f11a24000f6acdf..ccd91fa2e74ee191613d0e8f9f8183e06a8a356e 100644 (file)
@@ -1,8 +1,7 @@
-/**
- *
- * \brief  Dialog for renaming layers
- *
- * Author:
+/** @file
+ * @brief Dialog for renaming layers
+ */
+/* Author:
  *   Bryce W. Harrington <bryce@bryceharrington.com>
  *   Andrius R. <knutux@gmail.com>
  *
  * Released under GNU GPL.  Read the file 'COPYING' for more information
  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
 #include <gtkmm/stock.h>
-
 #include <glibmm/i18n.h>
 #include "inkscape.h"
 #include "desktop.h"
index 58bed141d4a75e87d329ee7d2b634bbb548a5709..807967e8d44302284bea41703b9bb2d1cc95de56 100644 (file)
@@ -1,8 +1,7 @@
-/**
- *
- * \brief  Dialog for renaming layers
- *
- * Author:
+/** @file
+ * @brief  Dialog for renaming layers
+ */
+/* Author:
  *   Bryce W. Harrington <bryce@bryceharrington.com>
  *
  * Copyright (C) 2004 Bryce Harrington
index 62596e4071d3befafdaecfed64614a49f847bb46..1f593b9c6c962e3c8b727170a3102d1e65e50ead 100644 (file)
@@ -1,5 +1,3 @@
-#ifndef SEEN_LAYERS_PANEL_H
-#define SEEN_LAYERS_PANEL_H
 /*
  * A simple dialog for layer UI.
  *
@@ -11,6 +9,9 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef SEEN_LAYERS_PANEL_H
+#define SEEN_LAYERS_PANEL_H
+
 #include <gtkmm/treeview.h>
 #include <gtkmm/treestore.h>
 #include <gtkmm/tooltips.h>
index e0c891ea1ad22c4aedf4f30eec1d88f610fc1238..d9bcf148943efb75e9753f18778db5c95beab2c6 100644 (file)
@@ -1,9 +1,7 @@
-#define __SP_OBJECT_ATTRIBUTES_C__
-
-/**
- * \brief  Generic properties editor
- *
- * Authors:
+/** @file
+ * @brief  Generic properties editor
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   bulia byak <buliabyak@users.sf.net>
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
 #include <glibmm/i18n.h>
 #include <string>
 #include <cstring>
@@ -149,11 +143,8 @@ sp_object_attributes_dialog (SPObject *object, const gchar *tag)
             sp_object_attr_show_dialog (object, image_desc, tag);
         }
     } 
-
 } // end of sp_object_attributes_dialog()
 
-
-
 /*
   Local Variables:
   mode:c++
index 2fc562e16d02a062f8bf02f35c60c3340cc4efb3..726d8e43b8e3039212eded6c1841608686005991 100644 (file)
@@ -1,10 +1,7 @@
-#ifndef __SP_OBJECT_ATTRIBUTES_H__
-#define __SP_OBJECT_ATTRIBUTES_H__
-
-/**
- * \brief  Generic object attribute editor
- *
- * Author:
+/** @file
+ * @brief  Generic object attribute editor
+ */
+/* Author:
  *   Lauris Kaplinski <lauris@ximian.com>
  *
  * Copyright (C) 2001 Ximian, Inc.
  * Licensed under GNU GPL
  */
 
-#include <glib.h>
-
-
+#ifndef SEEN_DIALOGS_OBJECT_ATTRIBUTES_H
+#define SEEN_DIALOGS_OBJECT_ATTRIBUTES_H
 
+#include <glib.h>
 #include <gtk/gtkwidget.h>
 #include "../forward.h"
 
 void sp_object_attributes_dialog (SPObject *object, const gchar *tag);
 
-
-
 #endif
 
 /*
index 70cac4e1fe8cdc69f092ade6c3cbaf6cc1b982ec..f0b1749229ae515454eb9b06f4b2482f426cb656 100644 (file)
@@ -1,9 +1,9 @@
-/**
- * \brief  RDF manipulation functions
- *
- * FIXME: move these to xml/ instead of dialogs/
+/** @file
+ * @brief  RDF manipulation functions
  *
- * Authors:
+ * @todo move these to xml/ instead of dialogs/
+ */
+/* Authors:
  *   Kees Cook <kees@outflux.net>
  *   Jon Phillips <jon@rejon.org>
  *
  * Copyright (C) 2006 Jon Phillips <jon@rejon.org>
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
- *
  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-
-
 #include "xml/repr.h"
 #include "rdf.h"
 #include "sp-item-group.h"
 #include "inkscape.h"
 
 /*
-
    Example RDF XML from various places...
  
 <rdf:RDF xmlns="http://creativecommons.org/ns#"
@@ -83,8 +75,6 @@ Bag example:
 <rdf:li>filetype</rdf:li>
 </rdf:Bag>
 </dc:subject>
-
-
 */
 
 struct rdf_double_t rdf_license_empty [] = {
@@ -1021,7 +1011,6 @@ rdf_set_defaults ( SPDocument * doc )
     }
 }
 
-
 /*
   Local Variables:
   mode:c++
@@ -1031,4 +1020,4 @@ rdf_set_defaults ( SPDocument * doc )
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 4c907e7aad74c0a0e49d8321e536a35f6984a2c5..a98f5a1e474b43354585e2824fd81cae46df07fd 100644 (file)
@@ -1,20 +1,16 @@
-/**
- *
- * \brief headers for RDF types
- * 
- * Authors:
+/** @file
+ * @brief headers for RDF types
+ */
+/* Authors:
  *  Kees Cook <kees@outflux.net>
  *
- * Copyright (C) 2004 Kees Cook <kees@outflux.net>
- * 
+ * Copyright (C) 2004 Authors
  * Released under GNU GPL, read the file 'COPYING' for more information
- * 
  */
 #ifndef _RDF_H_
 #define _RDF_H_
 
 #include <glib.h>
-
 #include <glibmm/i18n.h>
 #include "document.h"
 
@@ -121,4 +117,4 @@ void rdf_set_defaults ( SPDocument * doc );
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 9848d9f266c86430ee12aff55b9aebac6550571b..de14fc173bb5732e667243f41f82fb6d510f498b 100644 (file)
@@ -1,20 +1,12 @@
-#define __SP_ATTRIBUTE_WIDGET_C__
-
-/**
- * \brief  SPAttributeWidget
- *
- * Widget, that listens and modifies repr attributes
- *
- * Authors:
+/** @file
+ * @brief Widget that listens and modifies repr attributes
+ */
+/* Authors:
  *  Lauris Kaplinski <lauris@ximian.com>
  *
  * Copyright (C) 2001 Ximian, Inc.
- *
- * Licensed under GNU GPL
+ * Released under GNU GPL, read the file 'COPYING' for more information
  */
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
 
 #include <gtk/gtktable.h>
 #include <gtk/gtklabel.h>
index dc27c5a247ec3d7e9e9c17a044af5655c8f1172d..01da29bed6ad682f258bc96bca9e2fa6b5c68573 100644 (file)
@@ -1,12 +1,7 @@
-#ifndef __SP_ATTRIBUTE_WIDGET_H__
-#define __SP_ATTRIBUTE_WIDGET_H__
-
-/**
- * \brief  SPAttributeWidget
- *
- * Widget, that listens and modifies repr attributes
- *
- * Authors:
+/** @file
+ * @brief Widget that listens and modifies repr attributes
+ */
+/* Authors:
  *  Lauris Kaplinski <lauris@kaplinski.com>
  *
  * Copyright (C) 2002 authors
  * Licensed under GNU GPL, read the file 'COPYING' for more information
  */
 
-#include <glib.h>
+#ifndef SEEN_DIALOGS_SP_ATTRIBUTE_WIDGET_H
+#define SEEN_DIALOGS_SP_ATTRIBUTE_WIDGET_H
 
+#include <glib.h>
 #include <sigc++/connection.h>
 
 #define SP_TYPE_ATTRIBUTE_WIDGET (sp_attribute_widget_get_type ())
@@ -119,7 +116,6 @@ void sp_attribute_table_set_repr ( SPAttributeTable *spw,
                                    const gchar **labels, 
                                    const gchar **attrs );
 
-
 #endif
 
 /*
index c7173ad1ed3a95a3fde8fb7d6eeab2c8a7347f5e..b0375f75511ada9ae99d9eb7d1a48923c126457c 100644 (file)
@@ -1,9 +1,7 @@
-#define __SP_STROKE_STYLE_C__
-
-/**
- * \brief  Stroke style dialog
- *
- * Authors:
+/** @file
+ * @brief  Stroke style dialog
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   Bryce Harrington <brycehar@bryceharrington.org>
  *   bulia byak <buliabyak@users.sf.net>
 
 #define noSP_SS_VERBOSE
 
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-
-
 #include <glib/gmem.h>
 #include <gtk/gtk.h>
 
@@ -594,7 +586,7 @@ sp_marker_prev_new(unsigned psize, gchar const *mname,
 
     // Find object's bbox in document
     Geom::Matrix const i2doc(sp_item_i2doc_affine(SP_ITEM(object)));
-    boost::optional<Geom::Rect> dbox = SP_ITEM(object)->getBounds(i2doc);
+    Geom::OptRect dbox = SP_ITEM(object)->getBounds(i2doc);
 
     if (!dbox) {
         return NULL;
@@ -1834,7 +1826,6 @@ ink_extract_marker_name(gchar const *n, SPDocument *doc)
     return marker;
 }
 
-
 /*
   Local Variables:
   mode:c++
@@ -1844,4 +1835,4 @@ ink_extract_marker_name(gchar const *n, SPDocument *doc)
   fill-column:99
   End:
 */
-// vim: filetype=c++:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 475a2d388c9550d883886aed4eb74387070c79b4..b947209e31325775516f292b026ed52bf49ef47b 100644 (file)
@@ -1,16 +1,16 @@
-#ifndef __SP_STROKE_STYLE_H__
-#define __SP_STROKE_STYLE_H__
-
-/**
- * \brief  Stroke style dialog
- *
- * Author:
+/** @file
+ * @brief  Stroke style dialog
+ */
+/* Author:
  *   Lauris Kaplinski <lauris@ximian.com>
  *
  * Copyright (C) 2001 Ximian, Inc.
- *
+ * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef SEEN_DIALOGS_STROKE_STYLE_H
+#define SEEN_DIALOGS_STROKE_STYLE_H
+
 #include <glib.h>
 
 #include <gtk/gtkwidget.h>
index 71c16d87a3c52dea5e90542be01d5d26095f1dcb..2eb30f27cadca86a3906b3ce1931ff0f6f91a46f 100644 (file)
@@ -1,7 +1,7 @@
-/*
- * A simple panel for color swatches
- *
- * Authors:
+/** @file
+ * @brief Color swatches dialog
+ */
+/* Authors:
  *   Jon A. Cruz
  *   John Bintz
  *
@@ -10,9 +10,6 @@
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
 
 #include <errno.h>
 
index 630fada7c39c1a854758ccebfa3a150b2fd547b9..fc3c772b869cdb7a1c8d2cd54aca840f09d68059 100644 (file)
@@ -1,16 +1,14 @@
-
-#ifndef SEEN_SWATCHES_H
-#define SEEN_SWATCHES_H
-/*
- * A simple dialog for previewing icon representation.
- *
- * Authors:
+/** @file
+ * @brief Color swatches dialog
+ */
+/* Authors:
  *   Jon A. Cruz
  *
  * Copyright (C) 2005 Jon A. Cruz
- *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
+#ifndef SEEN_DIALOGS_SWATCHES_H
+#define SEEN_DIALOGS_SWATCHES_H
 
 #include <gtkmm/textview.h>
 #include <gtkmm/tooltips.h>
index 1f8395c953a3e97c74d63215f3599247cf910b75..e213a8abac65e25201b6d194d28d0effc3ab75cb 100644 (file)
@@ -1,9 +1,7 @@
-#define __SP_TEXT_EDIT_C__
-
-/**
- * \brief Text editing dialog
- *
- * Authors:
+/** @file
+ * @brief Text editing dialog
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@ximian.com>
  *   bulia byak <buliabyak@users.sf.net>
  *   Johan Engelen <goejendaagh@zonnet.nl>
@@ -19,7 +17,6 @@
 #endif
 
 #include <libnrtype/font-instance.h>
-
 #include <gtk/gtk.h>
 
 #ifdef WITH_GTKSPELL
index 1fa60c457576a7d23b2c05305da550f1249b65fc..1e5cdc77d7ea6e525e0f8f820a3934f7a1aeeb00 100644 (file)
@@ -1,12 +1,18 @@
-#ifndef SP_TEXT_EDIT_H
-#define SP_TEXT_EDIT_H
-
-/**
- * \brief text-edit
+/** @file
+ * @brief Text-edit
+ */
+/* Authors:
+ *   Lauris Kaplinski <lauris@ximian.com>
+ *   bulia byak <buliabyak@users.sf.net>
+ *   Johan Engelen <goejendaagh@zonnet.nl>
  *
- * Text editing and font changes
+ * Copyright (C) 1999-2007 Authors
+ * Copyright (C) 2000-2001 Ximian, Inc.
  *
+ * Released under GNU GPL, read the file 'COPYING' for more information
  */
+#ifndef SEEN_DIALOGS_TEXT_EDIT_H
+#define SEEN_DIALOGS_TEXT_EDIT_H
 
 void sp_text_edit_dialog (void);
 void sp_text_edit_dialog_default_set_insensitive (); //FIXME: Replace trough a verb
diff --git a/src/dialogs/tiledialog.cpp b/src/dialogs/tiledialog.cpp
deleted file mode 100644 (file)
index f597c60..0000000
+++ /dev/null
@@ -1,887 +0,0 @@
-/*
- * A simple dialog for creating grid type arrangements of selected objects
- *
- * Authors:
- *   Bob Jamison ( based off trace dialog)
- *   John Cliff
- *   Other dudes from The Inkscape Organization
- *
- * Copyright (C) 2004 Bob Jamison
- * Copyright (C) 2004 John Cliff
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-//#define DEBUG_GRID_ARRANGE 1
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-
-#include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
-#include <gtk/gtksizegroup.h>
-#include <glibmm/i18n.h>
-#include <gtkmm/stock.h>
-
-#include "verbs.h"
-#include "preferences.h"
-#include "inkscape.h"
-#include "desktop-handles.h"
-#include "selection.h"
-#include "document.h"
-#include "sp-item.h"
-#include "widgets/icon.h"
-#include "tiledialog.h"
-
-
-
-/*
- *    Sort items by their x co-ordinates, taking account of y (keeps rows intact)
- *
- *    <0 *elem1 goes before *elem2
- *    0  *elem1 == *elem2
- *    >0  *elem1 goes after *elem2
- */
-int
-sp_compare_x_position(SPItem *first, SPItem *second)
-{
-    using Geom::X;
-    using Geom::Y;
-
-    boost::optional<Geom::Rect> a = first->getBounds(sp_item_i2doc_affine(first));
-    boost::optional<Geom::Rect> b = second->getBounds(sp_item_i2doc_affine(second));
-
-    if ( !a || !b ) {
-        // FIXME?
-        return 0;
-    }
-
-    double const a_height = a->dimensions()[Y];
-    double const b_height = b->dimensions()[Y];
-    
-    bool a_in_b_vert = false;
-    if ((a->min()[Y] < b->min()[Y] + 0.1) && (a->min()[Y] > b->min()[Y] - b_height)) {
-        a_in_b_vert = true;
-    } else if ((b->min()[Y] < a->min()[Y] + 0.1) && (b->min()[Y] > a->min()[Y] - a_height)) {
-        a_in_b_vert = true;
-    } else if (b->min()[Y] == a->min()[Y]) {
-        a_in_b_vert = true;
-    } else {
-        a_in_b_vert = false;
-    }
-
-    if (!a_in_b_vert) {
-        return -1;
-    }
-    if (a_in_b_vert && a->min()[X] > b->min()[X]) {
-        return 1;
-    }
-    if (a_in_b_vert && a->min()[X] < b->min()[X]) {
-        return -1;
-    }
-    return 0;
-}
-
-/*
- *    Sort items by their y co-ordinates.
- */
-int
-sp_compare_y_position(SPItem *first, SPItem *second)
-{
-    boost::optional<Geom::Rect> a = first->getBounds(sp_item_i2doc_affine(first));
-    boost::optional<Geom::Rect> b = second->getBounds(sp_item_i2doc_affine(second));
-
-    if ( !a || !b ) {
-        // FIXME?
-        return 0;
-    }
-
-    if (a->min()[Geom::Y] > b->min()[Geom::Y]) {
-        return 1;
-    }
-    if (a->min()[Geom::Y] < b->min()[Geom::Y]) {
-        return -1;
-    }
-    
-    return 0;
-}
-
-namespace Inkscape {
-namespace UI {
-namespace Dialog {
-
-
-//#########################################################################
-//## E V E N T S
-//#########################################################################
-
-/*
- *
- * This arranges the selection in a grid pattern.
- *
- */
-
-void TileDialog::Grid_Arrange ()
-{
-
-    int cnt,row_cnt,col_cnt,a,row,col;
-    double grid_left,grid_top,col_width,row_height,paddingx,paddingy,width, height, new_x, new_y,cx,cy;
-    double total_col_width,total_row_height;
-    col_width = 0;
-    row_height = 0;
-    total_col_width=0;
-    total_row_height=0;
-
-    // check for correct numbers in the row- and col-spinners
-    on_col_spinbutton_changed();
-    on_row_spinbutton_changed();
-
-    // set padding to manual values
-    paddingx = XPadSpinner.get_value();
-    paddingy = YPadSpinner.get_value();
-
-    std::vector<double> row_heights;
-    std::vector<double> col_widths;
-    std::vector<double> row_ys;
-    std::vector<double> col_xs;
-
-    int NoOfCols = NoOfColsSpinner.get_value_as_int();
-    int NoOfRows = NoOfRowsSpinner.get_value_as_int();
-
-    width = 0;
-    for (a=0;a<NoOfCols; a++){
-        col_widths.push_back(width);
-    }
-
-    height = 0;
-    for (a=0;a<NoOfRows; a++){
-        row_heights.push_back(height);
-    }
-    grid_left = 99999;
-    grid_top = 99999;
-
-    SPDesktop *desktop = getDesktop();
-    sp_document_ensure_up_to_date(sp_desktop_document(desktop));
-
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
-    const GSList *items = selection->itemList();
-    cnt=0;
-    for (; items != NULL; items = items->next) {
-        SPItem *item = SP_ITEM(items->data);
-        boost::optional<Geom::Rect> b = item->getBounds(sp_item_i2doc_affine(item));
-        if (!b) {
-            continue;
-        }
-
-        width = b->dimensions()[Geom::X];
-        height = b->dimensions()[Geom::Y];
-
-        cx = b->midpoint()[Geom::X];
-        cy = b->midpoint()[Geom::Y];
-
-        if (b->min()[Geom::X] < grid_left) {
-            grid_left = b->min()[Geom::X];
-        }
-        if (b->min()[Geom::Y] < grid_top) {
-            grid_top = b->min()[Geom::Y];
-        }
-        if (width > col_width) {
-            col_width = width;
-        }
-        if (height > row_height) {
-            row_height = height;
-        }
-    }
-
-
-    // require the sorting done before we can calculate row heights etc.
-
-    const GSList *items2 = selection->itemList();
-    GSList *rev = g_slist_copy((GSList *) items2);
-    GSList *sorted = NULL;
-    rev = g_slist_sort(rev, (GCompareFunc) sp_compare_y_position);
-    sorted = g_slist_sort(rev, (GCompareFunc) sp_compare_x_position);
-
-
-    // Calculate individual Row and Column sizes if necessary
-
-
-        cnt=0;
-        const GSList *sizes = sorted;
-        for (; sizes != NULL; sizes = sizes->next) {
-            SPItem *item = SP_ITEM(sizes->data);
-            boost::optional<Geom::Rect> b = item->getBounds(sp_item_i2doc_affine(item));
-            if (b) {
-                width = b->dimensions()[Geom::X];
-                height = b->dimensions()[Geom::Y];
-                if (width > col_widths[(cnt % NoOfCols)]) {
-                    col_widths[(cnt % NoOfCols)] = width;
-                }
-                if (height > row_heights[(cnt / NoOfCols)]) {
-                    row_heights[(cnt / NoOfCols)] = height;
-                }
-            }
-
-            cnt++;
-        }
-
-
-    /// Make sure the top and left of the grid dont move by compensating for align values.
-    if (RowHeightButton.get_active()){
-        grid_top = grid_top - (((row_height - row_heights[0]) / 2)*(VertAlign));
-    }
-    if (ColumnWidthButton.get_active()){
-        grid_left = grid_left - (((col_width - col_widths[0]) /2)*(HorizAlign));
-    }
-
-    #ifdef DEBUG_GRID_ARRANGE
-     g_print("\n cx = %f cy= %f gridleft=%f",cx,cy,grid_left);
-    #endif
-
-    // Calculate total widths and heights, allowing for columns and rows non uniformly sized.
-
-    if (ColumnWidthButton.get_active()){
-        total_col_width = col_width * NoOfCols;
-        col_widths.clear();
-        for (a=0;a<NoOfCols; a++){
-            col_widths.push_back(col_width);
-        }
-    } else {
-        for (a = 0; a < (int)col_widths.size(); a++)
-        {
-          total_col_width += col_widths[a] ;
-        }
-    }
-
-    if (RowHeightButton.get_active()){
-        total_row_height = row_height * NoOfRows;
-        row_heights.clear();
-        for (a=0;a<NoOfRows; a++){
-            row_heights.push_back(row_height);
-        }
-    } else {
-        for (a = 0; a < (int)row_heights.size(); a++)
-        {
-          total_row_height += row_heights[a] ;
-        }
-    }
-
-
-    boost::optional<Geom::Rect> sel_bbox = selection->bounds();
-    // Fit to bbox, calculate padding between rows accordingly.
-    if ( sel_bbox && !SpaceManualRadioButton.get_active() ){
-#ifdef DEBUG_GRID_ARRANGE
-g_print("\n row = %f     col = %f selection x= %f selection y = %f", total_row_height,total_col_width, b.extent(Geom::X), b.extent(Geom::Y));
-#endif
-        paddingx = (sel_bbox->width() - total_col_width) / (NoOfCols -1);
-        paddingy = (sel_bbox->height() - total_row_height) / (NoOfRows -1);
-    }
-
-/*
-    Horizontal align  - Left    = 0
-                        Centre  = 1
-                        Right   = 2
-
-    Vertical align    - Top     = 0
-                        Middle  = 1
-                        Bottom  = 2
-
-    X position is calculated by taking the grids left co-ord, adding the distance to the column,
-   then adding 1/2 the spacing multiplied by the align variable above,
-   Y position likewise, takes the top of the grid, adds the y to the current row then adds the padding in to align it.
-
-*/
-
-    // Calculate row and column x and y coords required to allow for columns and rows which are non uniformly sized.
-
-    for (a=0;a<NoOfCols; a++){
-        if (a<1) col_xs.push_back(0);
-        else col_xs.push_back(col_widths[a-1]+paddingx+col_xs[a-1]);
-    }
-
-
-    for (a=0;a<NoOfRows; a++){
-        if (a<1) row_ys.push_back(0);
-        else row_ys.push_back(row_heights[a-1]+paddingy+row_ys[a-1]);
-    }
-
-    cnt=0;
-  for (row_cnt=0; ((sorted != NULL) && (row_cnt<NoOfRows)); row_cnt++) {
-
-             GSList *current_row = NULL;
-             for (col_cnt = 0; ((sorted != NULL) && (col_cnt<NoOfCols)); col_cnt++) {
-                 current_row = g_slist_append (current_row, sorted->data);
-                 sorted = sorted->next;
-             }
-
-             for (; current_row != NULL; current_row = current_row->next) {
-                 SPItem *item=SP_ITEM(current_row->data);
-                 Inkscape::XML::Node *repr = SP_OBJECT_REPR(item);
-                 boost::optional<Geom::Rect> b = item->getBounds(sp_item_i2doc_affine(item));
-                 Geom::Point min;
-                 if (b) {
-                     width = b->dimensions()[Geom::X];
-                     height = b->dimensions()[Geom::Y];
-                     min = b->min();
-                 } else {
-                     width = height = 0;
-                     min = Geom::Point(0, 0);
-                 }
-
-                 row = cnt / NoOfCols;
-                 col = cnt % NoOfCols;
-
-                 new_x = grid_left + (((col_widths[col] - width)/2)*HorizAlign) + col_xs[col];
-                 new_y = grid_top + (((row_heights[row] - height)/2)*VertAlign) + row_ys[row];
-
-                 // signs are inverted between x and y due to y inversion
-                 Geom::Point move = Geom::Point(new_x - min[Geom::X], min[Geom::Y] - new_y);
-                 Geom::Matrix const affine = Geom::Matrix(Geom::Translate(move));
-                 sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * affine);
-                 sp_item_write_transform(item, repr, item->transform,  NULL);
-                 SP_OBJECT (current_row->data)->updateRepr();
-                 cnt +=1;
-             }
-             g_slist_free (current_row);
-    }
-
-    sp_document_done (sp_desktop_document (desktop), SP_VERB_SELECTION_GRIDTILE, 
-                      _("Arrange in a grid"));
-
-}
-
-
-//#########################################################################
-//## E V E N T S
-//#########################################################################
-
-
-void TileDialog::_apply()
-{
-       Grid_Arrange();
-}
-
-
-/**
- * changed value in # of columns spinbox.
- */
-void TileDialog::on_row_spinbutton_changed()
-{
-    // quit if run by the attr_changed listener
-    if (updating) {
-            return;
-        }
-
-    // in turn, prevent listener from responding
-    updating = true;
-    SPDesktop *desktop = getDesktop();
-
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
-
-    GSList const *items = selection->itemList();
-    int selcount = g_slist_length((GSList *)items);
-
-    double PerCol = ceil(selcount / NoOfColsSpinner.get_value());
-    NoOfRowsSpinner.set_value(PerCol);
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setDouble("/dialogs/gridtiler/NoOfCols", NoOfColsSpinner.get_value());
-    updating=false;
-}
-
-/**
- * changed value in # of rows spinbox.
- */
-void TileDialog::on_col_spinbutton_changed()
-{
-    // quit if run by the attr_changed listener
-    if (updating) {
-            return;
-        }
-
-    // in turn, prevent listener from responding
-    updating = true;
-    SPDesktop *desktop = getDesktop();
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
-
-    GSList const *items = selection->itemList();
-    int selcount = g_slist_length((GSList *)items);
-
-    double PerRow = ceil(selcount / NoOfRowsSpinner.get_value());
-    NoOfColsSpinner.set_value(PerRow);
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setDouble("/dialogs/gridtiler/NoOfCols", PerRow);
-
-    updating=false;
-}
-
-/**
- * changed value in x padding spinbox.
- */
-void TileDialog::on_xpad_spinbutton_changed()
-{
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setDouble("/dialogs/gridtiler/XPad", XPadSpinner.get_value());
-
-}
-
-/**
- * changed value in y padding spinbox.
- */
-void TileDialog::on_ypad_spinbutton_changed()
-{
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setDouble("/dialogs/gridtiler/YPad", YPadSpinner.get_value());
-}
-
-
-/**
- * checked/unchecked autosize Rows button.
- */
-void TileDialog::on_RowSize_checkbutton_changed()
-{
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    if (RowHeightButton.get_active()) {
-        prefs->setDouble("/dialogs/gridtiler/AutoRowSize", 20);
-    } else {
-        prefs->setDouble("/dialogs/gridtiler/AutoRowSize", -20);
-    }
-    RowHeightBox.set_sensitive ( !RowHeightButton.get_active());
-}
-
-/**
- * checked/unchecked autosize Rows button.
- */
-void TileDialog::on_ColSize_checkbutton_changed()
-{
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    if (ColumnWidthButton.get_active()) {
-        prefs->setDouble("/dialogs/gridtiler/AutoColSize", 20);
-    } else {
-        prefs->setDouble("/dialogs/gridtiler/AutoColSize", -20);
-    }
-    ColumnWidthBox.set_sensitive ( !ColumnWidthButton.get_active());
-}
-
-/**
- * changed value in columns spinbox.
- */
-void TileDialog::on_rowSize_spinbutton_changed()
-{
-    // quit if run by the attr_changed listener
-    if (updating) {
-            return;
-        }
-
-    // in turn, prevent listener from responding
-    updating = true;
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setDouble("/dialogs/gridtiler/RowHeight", RowHeightSpinner.get_value());
-    updating=false;
-
-}
-
-/**
- * changed value in rows spinbox.
- */
-void TileDialog::on_colSize_spinbutton_changed()
-{
-    // quit if run by the attr_changed listener
-    if (updating) {
-            return;
-        }
-
-    // in turn, prevent listener from responding
-    updating = true;
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setDouble("/dialogs/gridtiler/ColWidth", ColumnWidthSpinner.get_value());
-    updating=false;
-
-}
-
-/**
- * changed Radio button in Spacing group.
- */
-void TileDialog::Spacing_button_changed()
-{
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    if (SpaceManualRadioButton.get_active()) {
-        prefs->setDouble("/dialogs/gridtiler/SpacingType", 20);
-    } else {
-        prefs->setDouble("/dialogs/gridtiler/SpacingType", -20);
-    }
-
-    SizesHBox.set_sensitive ( SpaceManualRadioButton.get_active());
-}
-
-/**
- * changed Radio button in Vertical Align group.
- */
-void TileDialog::VertAlign_changed()
-{
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    if (VertTopRadioButton.get_active()) {
-        VertAlign = 0;
-        prefs->setInt("/dialogs/gridtiler/VertAlign", 0);
-    } else if (VertCentreRadioButton.get_active()){
-        VertAlign = 1;
-        prefs->setInt("/dialogs/gridtiler/VertAlign", 1);
-    } else if (VertBotRadioButton.get_active()){
-        VertAlign = 2;
-        prefs->setInt("/dialogs/gridtiler/VertAlign", 2);
-    }
-}
-
-/**
- * changed Radio button in Vertical Align group.
- */
-void TileDialog::HorizAlign_changed()
-{
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    if (HorizLeftRadioButton.get_active()) {
-        HorizAlign = 0;
-        prefs->setInt("/dialogs/gridtiler/HorizAlign", 0);
-    } else if (HorizCentreRadioButton.get_active()){
-        HorizAlign = 1;
-        prefs->setInt("/dialogs/gridtiler/HorizAlign", 1);
-    } else if (HorizRightRadioButton.get_active()){
-        HorizAlign = 2;
-        prefs->setInt("/dialogs/gridtiler/HorizAlign", 2);
-    }
-}
-
-/**
- * Desktop selection changed
- */
-void TileDialog::updateSelection()
-{
-    // quit if run by the attr_changed listener
-    if (updating) {
-        return;
-    }
-
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    double col_width = 0;
-    double row_height = 0;
-    // in turn, prevent listener from responding
-    updating = true;
-    SPDesktop *desktop = getDesktop();
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
-    const GSList *items = selection->itemList();
-    int selcount = g_slist_length((GSList *)items);
-
-    if (NoOfColsSpinner.get_value()>1 && NoOfRowsSpinner.get_value()>1){
-        // Update the number of rows assuming number of columns wanted remains same.
-        double NoOfRows = ceil(selcount / NoOfColsSpinner.get_value());
-        NoOfRowsSpinner.set_value(NoOfRows);
-
-        // if the selection has less than the number set for one row, reduce it appropriately
-        if (selcount<NoOfColsSpinner.get_value()) {
-            double NoOfCols = ceil(selcount / NoOfRowsSpinner.get_value());
-            NoOfColsSpinner.set_value(NoOfCols);
-            prefs->setInt("/dialogs/gridtiler/NoOfCols", NoOfCols);
-        }
-    } else {
-        double PerRow = ceil(sqrt(selcount));
-        double PerCol = ceil(sqrt(selcount));
-        NoOfRowsSpinner.set_value(PerRow);
-        NoOfColsSpinner.set_value(PerCol);
-        prefs->setInt("/dialogs/gridtiler/NoOfCols", static_cast<int>(PerCol));
-
-    }
-
-    updating=false;
-
-}
-
-
-
-/*##########################
-## Experimental
-##########################*/
-
-static void updateSelectionCallback(Inkscape::Application */*inkscape*/, Inkscape::Selection */*selection*/, TileDialog *dlg)
-{
-    TileDialog *tledlg = (TileDialog *) dlg;
-    tledlg->updateSelection();
-}
-
-
-//#########################################################################
-//## C O N S T R U C T O R    /    D E S T R U C T O R
-//#########################################################################
-/**
- * Constructor
- */
-TileDialog::TileDialog()
-    : UI::Widget::Panel("", "/dialogs/gridtiler", SP_VERB_SELECTION_GRIDTILE)
-{
-     // bool used by spin button callbacks to stop loops where they change each other.
-    updating = false;
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-
-    // could not do this in gtkmm - there's no Gtk::SizeGroup public constructor (!)
-    GtkSizeGroup *_col1 = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-    GtkSizeGroup *_col2 = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-    GtkSizeGroup *_col3 = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
-    {
-        // Selection Change signal
-        g_signal_connect ( G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (updateSelectionCallback), this);
-    }
-
-    Gtk::Box *contents = _getContents();
-
-#define MARGIN 2
-
-    //##Set up the panel
-
-    SPDesktop *desktop = getDesktop();
-
-    Inkscape::Selection *selection = sp_desktop_selection (desktop);
-    int selcount = 1;
-    if (!selection->isEmpty()) {
-        GSList const *items = selection->itemList();
-        selcount = g_slist_length((GSList *)items);
-    }
-
-
-    /*#### Number of Rows ####*/
-
-    double PerRow = ceil(sqrt(selcount));
-    double PerCol = ceil(sqrt(selcount));
-
-    #ifdef DEBUG_GRID_ARRANGE
-        g_print("/n PerRox = %f PerCol = %f selcount = %d",PerRow,PerCol,selcount);
-    #endif
-
-    NoOfRowsLabel.set_label(_("Rows:"));
-    NoOfRowsBox.pack_start(NoOfRowsLabel, false, false, MARGIN);
-
-    NoOfRowsSpinner.set_digits(0);
-    NoOfRowsSpinner.set_increments(1, 5);
-    NoOfRowsSpinner.set_range(1.0, 100.0);
-    NoOfRowsSpinner.set_value(PerCol);
-    NoOfRowsSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_col_spinbutton_changed));
-    tips.set_tip(NoOfRowsSpinner, _("Number of rows"));
-    NoOfRowsBox.pack_start(NoOfRowsSpinner, false, false, MARGIN);
-    gtk_size_group_add_widget(_col1, (GtkWidget *) NoOfRowsBox.gobj());
-
-    RowHeightButton.set_label(_("Equal height"));
-    double AutoRow = prefs->getDouble("/dialogs/gridtiler/AutoRowSize", 15);
-    if (AutoRow>0)
-         AutoRowSize=true;
-    else
-         AutoRowSize=false;
-    RowHeightButton.set_active(AutoRowSize);
-
-    NoOfRowsBox.pack_start(RowHeightButton, false, false, MARGIN);
-
-    tips.set_tip(RowHeightButton, _("If not set, each row has the height of the tallest object in it"));
-    RowHeightButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::on_RowSize_checkbutton_changed));
-
- {
-        /*#### Radio buttons to control vertical alignment ####*/
-
-        VertAlignLabel.set_label(_("Align:"));
-        VertAlignHBox.pack_start(VertAlignLabel, false, false, MARGIN);
-
-        VertTopRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::VertAlign_changed));
-        VertAlignGroup = VertTopRadioButton.get_group();
-        VertAlignVBox.pack_start(VertTopRadioButton, false, false, 0);
-
-        VertCentreRadioButton.set_group(VertAlignGroup);
-        VertCentreRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::VertAlign_changed));
-        VertAlignVBox.pack_start(VertCentreRadioButton, false, false, 0);
-
-        VertBotRadioButton.set_group(VertAlignGroup);
-        VertBotRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::VertAlign_changed));
-        VertAlignVBox.pack_start(VertBotRadioButton, false, false, 0);
-
-        VertAlign = prefs->getInt("/dialogs/gridtiler/VertAlign", 1);
-        if (VertAlign == 0) {
-            VertTopRadioButton.set_active(TRUE);
-        }
-        else if (VertAlign == 1) {
-            VertCentreRadioButton.set_active(TRUE);
-        }
-        else if (VertAlign == 2){
-            VertBotRadioButton.set_active(TRUE);
-        }
-        VertAlignHBox.pack_start(VertAlignVBox, false, false, MARGIN);
-        NoOfRowsBox.pack_start(VertAlignHBox, false, false, MARGIN);
-    }
-
-    SpinsHBox.pack_start(NoOfRowsBox, false, false, MARGIN);
-
-
-    /*#### Label for X ####*/
-    padXByYLabel.set_label(" ");
-    XByYLabelVBox.pack_start(padXByYLabel, false, false, MARGIN);
-    XByYLabel.set_markup(" &#215; ");
-    XByYLabelVBox.pack_start(XByYLabel, false, false, MARGIN);
-    SpinsHBox.pack_start(XByYLabelVBox, false, false, MARGIN);
-    gtk_size_group_add_widget(_col2, (GtkWidget *) XByYLabelVBox.gobj());
-
-    /*#### Number of columns ####*/
-
-    NoOfColsLabel.set_label(_("Columns:"));
-    NoOfColsBox.pack_start(NoOfColsLabel, false, false, MARGIN);
-
-    NoOfColsSpinner.set_digits(0);
-    NoOfColsSpinner.set_increments(1, 5);
-    NoOfColsSpinner.set_range(1.0, 100.0);
-    NoOfColsSpinner.set_value(PerRow);
-    NoOfColsSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_row_spinbutton_changed));
-    tips.set_tip(NoOfColsSpinner, _("Number of columns"));
-    NoOfColsBox.pack_start(NoOfColsSpinner, false, false, MARGIN);
-    gtk_size_group_add_widget(_col3, (GtkWidget *) NoOfColsBox.gobj());
-
-    ColumnWidthButton.set_label(_("Equal width"));
-    double AutoCol = prefs->getDouble("/dialogs/gridtiler/AutoColSize", 15);
-    if (AutoCol>0)
-         AutoColSize=true;
-    else
-         AutoColSize=false;
-    ColumnWidthButton.set_active(AutoColSize);
-    NoOfColsBox.pack_start(ColumnWidthButton, false, false, MARGIN);
-
-    tips.set_tip(ColumnWidthButton, _("If not set, each column has the width of the widest object in it"));
-    ColumnWidthButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::on_ColSize_checkbutton_changed));
-
-
-    {
-        /*#### Radio buttons to control horizontal alignment ####*/
-
-        HorizAlignLabel.set_label(_("Align:"));
-        HorizAlignVBox.pack_start(HorizAlignLabel, false, false, MARGIN);
-
-        HorizAlignHBox.pack_start(*(new Gtk::HBox()), true, true, 0); // centering strut
-
-        HorizLeftRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::HorizAlign_changed));
-        HorizAlignGroup = HorizLeftRadioButton.get_group();
-        HorizAlignHBox.pack_start(HorizLeftRadioButton, false, false, 0);
-
-        HorizCentreRadioButton.set_group(HorizAlignGroup);
-        HorizCentreRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::HorizAlign_changed));
-        HorizAlignHBox.pack_start(HorizCentreRadioButton, false, false, 0);
-
-        HorizRightRadioButton.set_group(HorizAlignGroup);
-        HorizRightRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::HorizAlign_changed));
-        HorizAlignHBox.pack_start(HorizRightRadioButton, false, false, 0);
-
-        HorizAlignHBox.pack_start(*(new Gtk::HBox()), true, true, 0); // centering strut
-
-        HorizAlign = prefs->getInt("/dialogs/gridtiler/HorizAlign", 1);
-        if (HorizAlign == 0) {
-            HorizLeftRadioButton.set_active(TRUE);
-        }
-        else if (HorizAlign == 1) {
-            HorizCentreRadioButton.set_active(TRUE);
-        }
-        else if (HorizAlign == 2) {
-            HorizRightRadioButton.set_active(TRUE);
-        }
-        HorizAlignVBox.pack_start(HorizAlignHBox, false, false, MARGIN);
-        NoOfColsBox.pack_start(HorizAlignVBox, false, false, MARGIN);
-    }
-
-    SpinsHBox.pack_start(NoOfColsBox, false, false, MARGIN);
-
-    TileBox.pack_start(SpinsHBox, false, false, MARGIN);
-
-    {
-        /*#### Radio buttons to control spacing manually or to fit selection bbox ####*/
-        SpaceByBBoxRadioButton.set_label(_("Fit into selection box"));
-        SpaceByBBoxRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::Spacing_button_changed));
-        SpacingGroup = SpaceByBBoxRadioButton.get_group();
-
-        SpacingVBox.pack_start(SpaceByBBoxRadioButton, false, false, MARGIN);
-
-        SpaceManualRadioButton.set_label(_("Set spacing:"));
-        SpaceManualRadioButton.set_group(SpacingGroup);
-        SpaceManualRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::Spacing_button_changed));
-        SpacingVBox.pack_start(SpaceManualRadioButton, false, false, MARGIN);
-
-        TileBox.pack_start(SpacingVBox, false, false, MARGIN);
-    }
-
-    {
-        /*#### Y Padding ####*/
-
-        GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "clonetiler_per_row");
-        YPadBox.pack_start (*(Glib::wrap(i)), false, false, MARGIN);
-
-        YPadSpinner.set_digits(1);
-        YPadSpinner.set_increments(0.2, 2);
-        YPadSpinner.set_range(-10000, 10000);
-        double YPad = prefs->getDouble("/dialogs/gridtiler/YPad", 15);
-        YPadSpinner.set_value(YPad);
-        YPadBox.pack_start(YPadSpinner, true, true, MARGIN);
-        tips.set_tip(YPadSpinner, _("Vertical spacing between rows (px units)"));
-        YPadSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_ypad_spinbutton_changed));
-        gtk_size_group_add_widget(_col1, (GtkWidget *) YPadBox.gobj());
-
-        SizesHBox.pack_start(YPadBox, false, false, MARGIN);
-    }
-
-    {
-    Gtk::HBox *spacer = new Gtk::HBox;
-    SizesHBox.pack_start(*spacer, false, false, 0);
-    gtk_size_group_add_widget(_col2, (GtkWidget *) spacer->gobj());
-    }
-
-    {
-        /*#### X padding ####*/
-
-        GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "clonetiler_per_column");
-        XPadBox.pack_start (*(Glib::wrap(i)), false, false, MARGIN);
-
-        XPadSpinner.set_digits(1);
-        XPadSpinner.set_increments(0.2, 2);
-        XPadSpinner.set_range(-10000, 10000);
-        double XPad = prefs->getDouble("/dialogs/gridtiler/XPad", 15);
-        XPadSpinner.set_value(XPad);
-        XPadBox.pack_start(XPadSpinner, true, true, MARGIN);
-        tips.set_tip(XPadSpinner, _("Horizontal spacing between columns (px units)"));
-        XPadSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_xpad_spinbutton_changed));
-        gtk_size_group_add_widget(_col3, (GtkWidget *) XPadBox.gobj());
-
-        SizesHBox.pack_start(XPadBox, false, false, MARGIN);
-    }
-
-
-    TileBox.pack_start(SizesHBox, false, false, MARGIN);
-
-    contents->pack_start(TileBox);
-
-    double SpacingType = prefs->getDouble("/dialogs/gridtiler/SpacingType", 15);
-    if (SpacingType>0) {
-        ManualSpacing=true;
-    } else {
-        ManualSpacing=false;
-    }
-    SpaceManualRadioButton.set_active(ManualSpacing);
-    SpaceByBBoxRadioButton.set_active(!ManualSpacing);
-    SizesHBox.set_sensitive (ManualSpacing);
-
-    //## The OK button
-    TileOkButton = addResponseButton(_("Arrange"), GTK_RESPONSE_APPLY);
-    tips.set_tip((*TileOkButton), _("Arrange selected objects"));
-
-    show_all_children();
-}
-
-} //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/dialogs/tiledialog.h b/src/dialogs/tiledialog.h
deleted file mode 100644 (file)
index a120195..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-#ifndef __TILEDIALOG_H__
-#define __TILEDIALOG_H__
-/*
- * A simple dialog for creating grid type arrangements of selected objects
- *
- * Authors:
- *   Bob Jamison ( based off trace dialog)
- *   John Cliff
- *   Other dudes from The Inkscape Organization
- *
- * Copyright (C) 2004 Bob Jamison
- * Copyright (C) 2004 John Cliff
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-
-#include <gtkmm/box.h>
-#include <gtkmm/notebook.h>
-#include <gtkmm/tooltips.h>
-#include <gtkmm/button.h>
-#include <gtkmm/spinbutton.h>
-#include <gtkmm/checkbutton.h>
-#include <gtkmm/radiobutton.h>
-
-#include "ui/widget/panel.h"
-
-namespace Inkscape {
-namespace UI {
-namespace Dialog {
-
-
-/**
- * A dialog that displays log messages
- */
-class TileDialog : public UI::Widget::Panel {
-
-public:
-
-    /**
-     * Constructor
-     */
-    TileDialog() ;
-
-    /**
-     * Factory method
-     */
-    static TileDialog& getInstance() { return *new TileDialog(); }
-
-    /**
-     * Destructor
-     */
-    virtual ~TileDialog() {};
-
-    /**
-     * Do the actual work
-     */
-    void Grid_Arrange();
-
-    /**
-     * Respond to selection change
-     */
-    void updateSelection();
-
-
-    /**
-     * Callback from Apply
-     */
-    virtual void _apply();
-
-    /**
-     * Callback from spinbuttons
-     */
-    void on_row_spinbutton_changed();
-    void on_col_spinbutton_changed();
-    void on_xpad_spinbutton_changed();
-    void on_ypad_spinbutton_changed();
-    void on_RowSize_checkbutton_changed();
-    void on_ColSize_checkbutton_changed();
-    void on_rowSize_spinbutton_changed();
-    void on_colSize_spinbutton_changed();
-    void Spacing_button_changed();
-    void VertAlign_changed();
-    void HorizAlign_changed();
-
-
-private:
-    TileDialog(TileDialog const &d); // no copy
-    void operator=(TileDialog const &d); // no assign
-
-    bool userHidden;
-    bool updating;
-
-
-
-    Gtk::Notebook   notebook;
-    Gtk::Tooltips   tips;
-
-    Gtk::VBox             TileBox;
-    Gtk::Button           *TileOkButton;
-    Gtk::Button           *TileCancelButton;
-
-    // Number selected label
-    Gtk::Label            SelectionContentsLabel;
-
-
-    Gtk::HBox             AlignHBox;
-    Gtk::HBox             SpinsHBox;
-    Gtk::HBox             SizesHBox;
-
-    // Number per Row
-    Gtk::VBox             NoOfColsBox;
-    Gtk::Label            NoOfColsLabel;
-    Gtk::SpinButton       NoOfColsSpinner;
-    bool AutoRowSize;
-    Gtk::CheckButton      RowHeightButton;
-
-    Gtk::VBox             XByYLabelVBox;
-    Gtk::Label            padXByYLabel;
-    Gtk::Label            XByYLabel;
-
-    // Number per Column
-    Gtk::VBox             NoOfRowsBox;
-    Gtk::Label            NoOfRowsLabel;
-    Gtk::SpinButton       NoOfRowsSpinner;
-    bool AutoColSize;
-    Gtk::CheckButton      ColumnWidthButton;
-
-    // Vertical align
-    Gtk::Label            VertAlignLabel;
-    Gtk::HBox             VertAlignHBox;
-    Gtk::VBox             VertAlignVBox;
-    Gtk::RadioButtonGroup VertAlignGroup;
-    Gtk::RadioButton      VertCentreRadioButton;
-    Gtk::RadioButton      VertTopRadioButton;
-    Gtk::RadioButton      VertBotRadioButton;
-    double VertAlign;
-
-    // Horizontal align
-    Gtk::Label            HorizAlignLabel;
-    Gtk::VBox             HorizAlignVBox;
-    Gtk::HBox             HorizAlignHBox;
-    Gtk::RadioButtonGroup HorizAlignGroup;
-    Gtk::RadioButton      HorizCentreRadioButton;
-    Gtk::RadioButton      HorizLeftRadioButton;
-    Gtk::RadioButton      HorizRightRadioButton;
-    double HorizAlign;
-
-    // padding in x
-    Gtk::VBox             XPadBox;
-    Gtk::Label            XPadLabel;
-    Gtk::SpinButton       XPadSpinner;
-
-    // padding in y
-    Gtk::VBox             YPadBox;
-    Gtk::Label            YPadLabel;
-    Gtk::SpinButton       YPadSpinner;
-
-    // BBox or manual spacing
-    Gtk::VBox             SpacingVBox;
-    Gtk::RadioButtonGroup SpacingGroup;
-    Gtk::RadioButton      SpaceByBBoxRadioButton;
-    Gtk::RadioButton      SpaceManualRadioButton;
-    bool ManualSpacing;
-
-
-
-    // Row height
-    Gtk::VBox             RowHeightVBox;
-    Gtk::HBox             RowHeightBox;
-    Gtk::Label            RowHeightLabel;
-    Gtk::SpinButton       RowHeightSpinner;
-
-    // Column width
-    Gtk::VBox             ColumnWidthVBox;
-    Gtk::HBox             ColumnWidthBox;
-    Gtk::Label            ColumnWidthLabel;
-    Gtk::SpinButton       ColumnWidthSpinner;
-
-};
-
-
-} //namespace Dialog
-} //namespace UI
-} //namespace Inkscape
-
-
-#endif /* __TILEDIALOG_H__ */
-
index 1329fdb5f14ff8bebb090248f2472515db68f2f4..2190bf77eb8b46c1b1def28c17e8710594216e48 100644 (file)
@@ -1,16 +1,13 @@
-#define __UNCLUMP_C__
-
-/*
- * Unclumping objects
- *
- * Authors:
+/** @file
+ * @brief Unclumping objects
+ */
+/* Authors:
  *   bulia byak
  *
  * Copyright (C) 2005 Authors
- * Released under GNU GPL
+ * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-
 #include <algorithm>
 #include <map>
 #include "libnr/nr-matrix-ops.h"
@@ -35,7 +32,7 @@ unclump_center (SPItem *item)
         return i->second;
     }
 
-    boost::optional<Geom::Rect> r = item->getBounds(sp_item_i2d_affine(item));
+    Geom::OptRect r = item->getBounds(sp_item_i2d_affine(item));
     if (r) {
        Geom::Point const c = r->midpoint();
        c_cache[SP_OBJECT_ID(item)] = c;
@@ -54,7 +51,7 @@ unclump_wh (SPItem *item)
     if ( i != wh_cache.end() ) {
         wh = i->second;
     } else {
-        boost::optional<Geom::Rect> r = item->getBounds(sp_item_i2d_affine(item));
+        Geom::OptRect r = item->getBounds(sp_item_i2d_affine(item));
        if (r) {
             wh = r->dimensions();
             wh_cache[SP_OBJECT_ID(item)] = wh;
@@ -379,3 +376,14 @@ unclump (GSList *items)
         }
     }
 }
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 6cebc0caf13131a0cb20e0b111ccdeb8c4acf5db..c5a8bf7d7af4acf59e43732a10832d7cd63d2c6b 100644 (file)
@@ -1,20 +1,29 @@
-#ifndef UNCLUMP_H_SEEN
-#define UNCLUMP_H_SEEN
-
-/** \file
- * Unclumping objects
+/** @file
+ * @brief Unclumping objects
  */
-/*
- * Authors:
+/* Authors:
  *   bulia byak
  *
  * Copyright (C) 2005 Authors
- * Released under GNU GPL
+ * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef SEEN_DIALOGS_UNCLUMP_H
+#define SEEN_DIALOGS_UNCLUMP_H
+
 #include <glib/gslist.h>
 
 void unclump(GSList *items);
 
-
 #endif /* !UNCLUMP_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 2c596bc0e6be22ba4016d8adca464c05f2701e1f..78a5aa3a724822e2cca40d899b86ee5ef3d41b7a 100644 (file)
@@ -1,36 +1,18 @@
-#define __SP_XMLVIEW_TREE_C__
-
-/**
- * \brief  XML View
- *
- * Authors:
+/** @file
+ * @brief XML editor
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   MenTaLguY <mental@rydia.net>
  *   bulia byak <buliabyak@users.sf.net>
  *   Johan Engelen <goejendaagh@zonnet.nl>
+ *   David Turner
  *
  * Copyright (C) 1999-2006 Authors
- * Copyright (C) 2004 David Turner
- *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <gtk/gtkmain.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkhpaned.h>
-#include <gtk/gtkvpaned.h>
-#include <gtk/gtkhseparator.h>
-#include <gtk/gtkhbbox.h>
-#include <gtk/gtktoolbar.h>
-#include <gtk/gtkscrolledwindow.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtkarrow.h>
-
+#include <gtk/gtk.h>
 #include <glibmm/i18n.h>
 #include "helper/window.h"
 #include "macros.h"
index 6d0d44a7d288bb45c52eab0507a256e28d664961..0edea8f4df9c0d71333e994368f23b45bfd516f6 100644 (file)
@@ -1,10 +1,7 @@
-#ifndef SP_XML_TREE_H
-#define SP_XML_TREE_H
-
-/**
- * \brief  XML tree editing dialog for Inkscape
- *
- * Copyright Lauris Kaplinski, 2000
+/** @file
+ * @brief XML tree editing dialog for Inkscape
+ */
+/* Copyright Lauris Kaplinski, 2000
  *
  * Released under GNU General Public License.
  *
@@ -13,6 +10,9 @@
  *
  */
 
+#ifndef SEEN_DIALOGS_XML_TREE_H
+#define SEEN_DIALOGS_XML_TREE_H
+
 void sp_xml_tree_dialog (void);
 
 #endif
index 1900ed961b92abfc67a2dff92352ef6b3f843b5a..357d67359c9fd9e9244bfb94708233863e03b1d3 100644 (file)
@@ -143,13 +143,19 @@ sp_canvas_bpath_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned
 
     cbp->affine = affine;
 
-    Geom::Rect bbox = bounds_exact_transformed(cbp->curve->get_pathvector(), affine);
-
-    item->x1 = (int)bbox.min()[Geom::X] - 1;
-    item->y1 = (int)bbox.min()[Geom::Y] - 1;
-    item->x2 = (int)bbox.max()[Geom::X] + 1;
-    item->y2 = (int)bbox.max()[Geom::Y] + 1;
-
+    Geom::OptRect bbox = bounds_exact_transformed(cbp->curve->get_pathvector(), affine);
+
+    if (bbox) {
+        item->x1 = (int)bbox->min()[Geom::X] - 1;
+        item->y1 = (int)bbox->min()[Geom::Y] - 1;
+        item->x2 = (int)bbox->max()[Geom::X] + 1;
+        item->y2 = (int)bbox->max()[Geom::Y] + 1;
+    } else {
+        item->x1 = 0;
+        item->y1 = 0;
+        item->x2 = 0;
+        item->y2 = 0;
+    }
     sp_canvas_request_redraw (item->canvas, (int)item->x1, (int)item->y1, (int)item->x2, (int)item->y2);
 }
 
index 54f979f374791d17d17f57a0e434da33106c6ec0..a31a9387f4eb6b1689c6852869ac6fc38f05bede 100644 (file)
@@ -170,9 +170,9 @@ feed_path_to_cairo (cairo_t *ct, Geom::Path const &path)
 
 /** Feeds path-creating calls to the cairo context translating them from the Path, with the given transform and shift */
 static void
-feed_path_to_cairo (cairo_t *ct, Geom::Path const &path, Geom::Matrix trans, boost::optional<Geom::Rect> area, bool optimize_stroke, double stroke_width)
+feed_path_to_cairo (cairo_t *ct, Geom::Path const &path, Geom::Matrix trans, Geom::OptRect area, bool optimize_stroke, double stroke_width)
 {
-    if (!area || area->isEmpty())
+    if (!area)
         return;
     if (path.empty())
         return;
@@ -214,9 +214,9 @@ feed_path_to_cairo (cairo_t *ct, Geom::Path const &path, Geom::Matrix trans, boo
 /** Feeds path-creating calls to the cairo context translating them from the PathVector, with the given transform and shift
  *  One must have done cairo_new_path(ct); before calling this function. */
 void
-feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv, Geom::Matrix trans, boost::optional<Geom::Rect> area, bool optimize_stroke, double stroke_width)
+feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv, Geom::Matrix trans, Geom::OptRect area, bool optimize_stroke, double stroke_width)
 {
-    if (!area || area->isEmpty())
+    if (!area)
         return;
     if (pathv.empty())
         return;
index 4a9c15ae30a162b6e595f1cbbfe54cf66735ea66..cb4d474a6d1bec40accd8c15361577ce6643d0fd 100644 (file)
@@ -21,7 +21,7 @@ class SPCanvasBuf;
 
 cairo_t *nr_create_cairo_context_canvasbuf (NRRectL *area, SPCanvasBuf *b);
 cairo_t *nr_create_cairo_context (NRRectL *area, NRPixBlock *pb);
-void feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv, Geom::Matrix trans, boost::optional<Geom::Rect> area, bool optimize_stroke, double stroke_width);
+void feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv, Geom::Matrix trans, Geom::OptRect area, bool optimize_stroke, double stroke_width);
 void feed_pathvector_to_cairo (cairo_t *ct, Geom::PathVector const &pathv);
 
 #endif
index 8b388aa40c3a01af4cce7274b0a7fbb76b50198b..d63d9b704a1dee4a5f40082ce501588f96b4a3cf 100644 (file)
@@ -20,7 +20,7 @@
 #include "sp-filter.h"
 #include "sp-filter-reference.h"
 #include "sp-gaussian-blur.h"
-#include "sp-feblend.h"
+#include "filters/blend.h"
 #include "display/nr-filter-blend.h"
 #include "libnr/nr-matrix-fns.h"
 #include "libnr/nr-matrix-ops.h"
index 17c9ab07c83ca9089e43a9045059bd5387ea640c..3778dc6426a33b10954e99b565b160edb7e379ed 100644 (file)
@@ -24,7 +24,7 @@
 #include "sp-filter.h"
 #include "sp-filter-reference.h"
 #include "sp-gaussian-blur.h"
-#include "sp-feblend.h"
+#include "filters/blend.h"
 #include "display/nr-filter-blend.h"
 
 int nr_arena_image_x_sample = 1;
index d944b4228aa6f14509bd00f4cdcf3807ae5ca548..b4fada749afa3c19d21097539d093042fc13837f 100644 (file)
@@ -255,9 +255,7 @@ nr_arena_item_invoke_update (NRArenaItem *item, NRRectL *area, NRGC *gc,
     item->ctm = childgc.transform;
 
     /* Invoke the real method */
-    item->state =
-        NR_ARENA_ITEM_VIRTUAL (item, update) (item, area, &childgc, state,
-                                              reset);
+    item->state = NR_ARENA_ITEM_VIRTUAL (item, update) (item, area, &childgc, state, reset);
     if (item->state & NR_ARENA_ITEM_STATE_INVALID)
         return item->state;
     /* Enlarge the bounding box to contain filter effects */
@@ -838,12 +836,12 @@ nr_arena_item_set_order (NRArenaItem *item, int order)
 }
 
 void
-nr_arena_item_set_item_bbox (NRArenaItem *item, boost::optional<Geom::Rect> &bbox)
+nr_arena_item_set_item_bbox (NRArenaItem *item, Geom::OptRect &bbox)
 {
     nr_return_if_fail(item != NULL);
     nr_return_if_fail(NR_IS_ARENA_ITEM(item));
 
-    if(bbox)  item->item_bbox = *bbox;
+    item->item_bbox = bbox;
 }
 
 /** Returns a background image for use with filter effects. */
index 9db8d7a4063d58fe49c24ae61c38efe799d166a6..23dd92a439ab1b7f0fe60fe395b236a33ce5d944 100644 (file)
@@ -92,7 +92,7 @@ struct NRArenaItem : public NRObject {
     NRRectL bbox;
     /* BBox in item coordinates - this should be a bounding box as
      * specified in SVG standard. Required by filters. */
-    boost::optional<Geom::Rect> item_bbox;
+    Geom::OptRect item_bbox;
     /* Our affine */
     Geom::Matrix *transform;
     /* Clip item */
@@ -178,7 +178,7 @@ void nr_arena_item_set_visible (NRArenaItem *item, unsigned int visible);
 void nr_arena_item_set_clip (NRArenaItem *item, NRArenaItem *clip);
 void nr_arena_item_set_mask (NRArenaItem *item, NRArenaItem *mask);
 void nr_arena_item_set_order (NRArenaItem *item, int order);
-void nr_arena_item_set_item_bbox (NRArenaItem *item, boost::optional<Geom::Rect> &bbox);
+void nr_arena_item_set_item_bbox (NRArenaItem *item, Geom::OptRect &bbox);
 
 NRPixBlock *nr_arena_item_get_background (NRArenaItem const *item, int depth = 0);
 
index 4c988be46b5153689f1461c966e6bbfbcfae99c9..e479078265c86d683f15533c9e7b2ed0cf951cfb 100644 (file)
@@ -229,7 +229,7 @@ nr_arena_shape_set_child_position(NRArenaItem *item, NRArenaItem *child, NRArena
 
 void nr_arena_shape_update_stroke(NRArenaShape *shape, NRGC* gc, NRRectL *area);
 void nr_arena_shape_update_fill(NRArenaShape *shape, NRGC *gc, NRRectL *area, bool force_shape = false);
-void nr_arena_shape_add_bboxes(NRArenaShape* shape, Geom::Rect &bbox);
+void nr_arena_shape_add_bboxes(NRArenaShape* shape, Geom::OptRect &bbox);
 
 /**
  * Updates the arena shape 'item' and all of its children, including the markers.
@@ -237,7 +237,7 @@ void nr_arena_shape_add_bboxes(NRArenaShape* shape, Geom::Rect &bbox);
 static guint
 nr_arena_shape_update(NRArenaItem *item, NRRectL *area, NRGC *gc, guint state, guint reset)
 {
-    Geom::Rect boundingbox;
+    Geom::OptRect boundingbox;
 
     NRArenaShape *shape = NR_ARENA_SHAPE(item);
 
@@ -255,10 +255,15 @@ nr_arena_shape_update(NRArenaItem *item, NRRectL *area, NRGC *gc, guint state, g
         if (state & NR_ARENA_ITEM_STATE_BBOX) {
             if (shape->curve) {
                 boundingbox = bounds_exact_transformed(shape->curve->get_pathvector(), gc->transform);
-                item->bbox.x0 = (gint32)(boundingbox[0][0] - 1.0F);
-                item->bbox.y0 = (gint32)(boundingbox[1][0] - 1.0F);
-                item->bbox.x1 = (gint32)(boundingbox[0][1] + 1.9999F);
-                item->bbox.y1 = (gint32)(boundingbox[1][1] + 1.9999F);
+                /// \todo  just write item->bbox = boundingbox
+                if (boundingbox) {
+                    item->bbox.x0 = (gint32)((*boundingbox)[0][0] - 1.0F);
+                    item->bbox.y0 = (gint32)((*boundingbox)[1][0] - 1.0F);
+                    item->bbox.x1 = (gint32)((*boundingbox)[0][1] + 1.9999F);
+                    item->bbox.y1 = (gint32)((*boundingbox)[1][1] + 1.9999F);
+                } else {
+                    item->bbox = NR_RECT_L_EMPTY;
+                }
             }
             if (beststate & NR_ARENA_ITEM_STATE_BBOX) {
                 for (NRArenaItem *child = shape->markers; child != NULL; child = child->next) {
@@ -271,43 +276,44 @@ nr_arena_shape_update(NRArenaItem *item, NRRectL *area, NRGC *gc, guint state, g
 
     shape->delayed_shp=true;
     shape->ctm = gc->transform;
-    boundingbox[0][0] = boundingbox[1][0] = NR_HUGE;
-    boundingbox[0][1] = boundingbox[1][1] = -NR_HUGE;
+    boundingbox = Geom::OptRect();
 
     bool outline = (NR_ARENA_ITEM(shape)->arena->rendermode == Inkscape::RENDERMODE_OUTLINE);
 
     if (shape->curve) {
         boundingbox = bounds_exact_transformed(shape->curve->get_pathvector(), gc->transform);
 
-        if (shape->_stroke.paint.type() != NRArenaShape::Paint::NONE || outline) {
+        if (boundingbox && (shape->_stroke.paint.type() != NRArenaShape::Paint::NONE || outline)) {
             float width, scale;
             scale = gc->transform.descrim();
             width = MAX(0.125, shape->_stroke.width * scale);
             if ( fabs(shape->_stroke.width * scale) > 0.01 ) { // sinon c'est 0=oon veut pas de bord
-                boundingbox.expandBy(width);
+                boundingbox->expandBy(width);
             }
             // those pesky miters, now
             float miterMax=width*shape->_stroke.mitre_limit;
             if ( miterMax > 0.01 ) {
                 // grunt mode. we should compute the various miters instead (one for each point on the curve)
-                boundingbox.expandBy(miterMax);
+                boundingbox->expandBy(miterMax);
             }
         }
+    } 
+
+    /// \todo  just write item->bbox = boundingbox
+    if (boundingbox) {
+        shape->approx_bbox.x0 = (gint32)((*boundingbox)[0][0] - 1.0F);
+        shape->approx_bbox.y0 = (gint32)((*boundingbox)[1][0] - 1.0F);
+        shape->approx_bbox.x1 = (gint32)((*boundingbox)[0][1] + 1.9999F);
+        shape->approx_bbox.y1 = (gint32)((*boundingbox)[1][1] + 1.9999F);
     } else {
+        shape->approx_bbox = NR_RECT_L_EMPTY;
     }
-    shape->approx_bbox.x0 = (gint32)(boundingbox[0][0] - 1.0F);
-    shape->approx_bbox.y0 = (gint32)(boundingbox[1][0] - 1.0F);
-    shape->approx_bbox.x1 = (gint32)(boundingbox[0][1] + 1.9999F);
-    shape->approx_bbox.y1 = (gint32)(boundingbox[1][1] + 1.9999F);
     if ( area && nr_rect_l_test_intersect_ptr(area, &shape->approx_bbox) ) shape->delayed_shp=false;
 
     /* Release state data */
-    if (TRUE || !Geom::transform_equalp(gc->transform, shape->ctm, NR_EPSILON)) {
-        /* Concept test */
-        if (shape->fill_shp) {
-            delete shape->fill_shp;
-            shape->fill_shp = NULL;
-        }
+    if (shape->fill_shp) {
+        delete shape->fill_shp;
+        shape->fill_shp = NULL;
     }
     if (shape->stroke_shp) {
         delete shape->stroke_shp;
@@ -339,22 +345,28 @@ nr_arena_shape_update(NRArenaItem *item, NRRectL *area, NRGC *gc, guint state, g
         nr_arena_shape_update_stroke(shape, gc, area);
         nr_arena_shape_update_fill(shape, gc, area);
 
-        boundingbox[0][0] = boundingbox[0][1] = boundingbox[1][0] = boundingbox[1][1] = 0.0;
+        boundingbox = Geom::OptRect();
         nr_arena_shape_add_bboxes(shape, boundingbox);
 
-        shape->approx_bbox.x0 = (gint32)(boundingbox[0][0] - 1.0F);
-        shape->approx_bbox.y0 = (gint32)(boundingbox[1][0] - 1.0F);
-        shape->approx_bbox.x1 = (gint32)(boundingbox[0][1] + 1.9999F);
-        shape->approx_bbox.y1 = (gint32)(boundingbox[1][1] + 1.9999F);
+        /// \todo  just write shape->approx_bbox = boundingbox
+        if (boundingbox) {
+            shape->approx_bbox.x0 = (gint32)((*boundingbox)[0][0] - 1.0F);
+            shape->approx_bbox.y0 = (gint32)((*boundingbox)[1][0] - 1.0F);
+            shape->approx_bbox.x1 = (gint32)((*boundingbox)[0][1] + 1.9999F);
+            shape->approx_bbox.y1 = (gint32)((*boundingbox)[1][1] + 1.9999F);
+        } else {
+            shape->approx_bbox = NR_RECT_L_EMPTY;
+        }
     }
 
-    if (boundingbox.isEmpty())
+    if (!boundingbox)
         return NR_ARENA_ITEM_STATE_ALL;
 
-    item->bbox.x0 = (gint32)(boundingbox[0][0] - 1.0F);
-    item->bbox.y0 = (gint32)(boundingbox[1][0] - 1.0F);
-    item->bbox.x1 = (gint32)(boundingbox[0][1] + 1.0F);
-    item->bbox.y1 = (gint32)(boundingbox[1][1] + 1.0F);
+    /// \todo  just write item->bbox = boundingbox
+    item->bbox.x0 = (gint32)((*boundingbox)[0][0] - 1.0F);
+    item->bbox.y0 = (gint32)((*boundingbox)[1][0] - 1.0F);
+    item->bbox.x1 = (gint32)((*boundingbox)[0][1] + 1.0F);
+    item->bbox.y1 = (gint32)((*boundingbox)[1][1] + 1.0F);
     nr_arena_request_render_rect(item->arena, &item->bbox);
 
     item->render_opacity = TRUE;
@@ -442,9 +454,8 @@ void
 nr_arena_shape_update_fill(NRArenaShape *shape, NRGC *gc, NRRectL *area, bool force_shape)
 {
     if ((shape->_fill.paint.type() != NRArenaShape::Paint::NONE || force_shape) &&
-//        ((shape->curve->get_length() > 2) || (SP_CURVE_BPATH(shape->curve)[1].code == NR_CURVETO)) ) {  // <-- this used to be the old code, i think it has to determine that the path has a sort of 'internal region' where fill would occur
           has_inner_area(shape->curve->get_pathvector()) ) {
-        if (TRUE || !shape->fill_shp) {
+
             Geom::Matrix  cached_to_new = Geom::identity();
             int isometry = 0;
             if ( shape->cached_fill ) {
@@ -522,7 +533,6 @@ nr_arena_shape_update_fill(NRArenaShape *shape, NRGC *gc, NRRectL *area, bool fo
                 shape->fill_shp->needEdgesSorting();
             }
             shape->delayed_shp |= shape->cached_fpartialy;
-        }
     }
 }
 
@@ -683,7 +693,7 @@ nr_arena_shape_update_stroke(NRArenaShape *shape,NRGC* gc, NRRectL *area)
 
 
 void
-nr_arena_shape_add_bboxes(NRArenaShape* shape, Geom::Rect &bbox)
+nr_arena_shape_add_bboxes(NRArenaShape* shape, Geom::OptRect &bbox)
 {
     /* TODO: are these two if's mutually exclusive? ( i.e. "shape->stroke_shp <=> !shape->fill_shp" )
      * if so, then this can be written much more compact ! */
@@ -715,7 +725,7 @@ nr_arena_shape_add_bboxes(NRArenaShape* shape, Geom::Rect &bbox)
 
 // cairo outline rendering:
 static unsigned int
-cairo_arena_shape_render_outline(cairo_t *ct, NRArenaItem *item, boost::optional<Geom::Rect> area)
+cairo_arena_shape_render_outline(cairo_t *ct, NRArenaItem *item, Geom::OptRect area)
 {
     NRArenaShape *shape = NR_ARENA_SHAPE(item);
 
index a1a4886741f6a02d59328f3b9f639873392729dd..32fa3e2a5e965c1efad4b3ff48b270109b09db57 100644 (file)
@@ -12,7 +12,7 @@
 #include <cmath>
 
 #include "2geom/isnan.h"
-#include "sp-fecomposite.h"
+#include "filters/composite.h"
 #include "display/nr-filter-composite.h"
 #include "display/nr-filter-pixops.h"
 #include "display/nr-filter-slot.h"
index e41dd77dbfebfd69a06ce38c176be7da622d0022..72331f767d63708dbb62d72b0164a22c5b060d22 100644 (file)
@@ -12,7 +12,7 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-#include "sp-fecomposite.h"
+#include "filters/composite.h"
 #include "display/nr-filter-primitive.h"
 #include "display/nr-filter-slot.h"
 #include "display/nr-filter-units.h"
index 669d2c7e1876dd6c411404169b8a4dd19e3e8747..b3b574f0c3f852f1a24fdf2e1d8d642036552578 100644 (file)
@@ -19,9 +19,9 @@
 #include "display/nr-filter-slot.h"
 #include "display/nr-filter-units.h"
 #include "libnr/nr-matrix.h"
-#include "sp-fedistantlight.h"
-#include "sp-fepointlight.h"
-#include "sp-fespotlight.h"
+#include "filters/distantlight.h"
+#include "filters/pointlight.h"
+#include "filters/spotlight.h"
 #include "color.h"
 
 namespace NR {
index 34ba3aad263447330946e7c0ded8d9ca622b7229..6730822d9905918dae181fbfae1a688b541f7746 100644 (file)
@@ -12,7 +12,7 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-#include "sp-fedisplacementmap.h"
+#include "filters/displacementmap.h"
 #include "display/nr-filter-primitive.h"
 #include "display/nr-filter-slot.h"
 #include "display/nr-filter-units.h"
index 7837770ed2f11b012952315a16044e765d078fb5..517f2dac9b3675f7735adde910f27e89daa4c6e7 100644 (file)
@@ -62,7 +62,7 @@ int FilterImage::render(FilterSlot &slot, FilterUnits const &units) {
         Matrix identity(1.0, 0.0,
                    0.0, 1.0,
                    0.0, 0.0);
-        boost::optional<Geom::Rect> area = SVGElem->getBounds(identity);
+        Geom::OptRect area = SVGElem->getBounds(identity);
         
         NRRectL rect;
         rect.x0=area->min()[NR::X];
index 1632a7a82e64fb63daf35bdf0d978b63ee0fdb49..4581238b7cbd5880329e0b8a0bf37478fdb82094 100644 (file)
@@ -13,7 +13,7 @@
 #include <vector>
 
 #include "2geom/isnan.h"
-#include "sp-femerge.h"
+#include "filters/merge.h"
 #include "display/nr-filter-merge.h"
 #include "display/nr-filter-pixops.h"
 #include "display/nr-filter-slot.h"
index 5fe6b33e32ddf9bc4417ccb8297f9e4b65c41dd2..3fa62a9cc8cac02b76624d9e2e38a3b2b5515faf 100644 (file)
@@ -14,7 +14,7 @@
 
 #include <vector>
 
-#include "sp-femerge.h"
+#include "filters/merge.h"
 #include "display/nr-filter-primitive.h"
 #include "display/nr-filter-slot.h"
 #include "display/nr-filter-units.h"
index 6de682972f2153a3fa7ab4bd5dd267bee28da14a..4d0bea8fff8efa7cd7dbb061ad15a09c74f9575c 100644 (file)
@@ -19,9 +19,9 @@
 #include "display/nr-filter-slot.h"
 #include "display/nr-filter-units.h"
 #include "libnr/nr-matrix.h"
-#include "sp-fedistantlight.h"
-#include "sp-fepointlight.h"
-#include "sp-fespotlight.h"
+#include "filters/distantlight.h"
+#include "filters/pointlight.h"
+#include "filters/spotlight.h"
 #include "color.h"
 
 namespace NR {
index 49fe30aa953b527a783b098ea2021a85f7e21216..df38c2bb9837c3c635ae51a181cef4af29c634cc 100644 (file)
@@ -16,6 +16,7 @@
 #include "libnr/nr-matrix.h"
 #include "libnr/nr-rect.h"
 #include "libnr/nr-rect-l.h"
+#include <2geom/rect.h>
 
 namespace NR {
 
index 31aec0748d0862a0d0b617c0f434c483824e8714..01a092177803688cda5fcc4f31389200e421404c 100644 (file)
@@ -136,7 +136,7 @@ int Filter::render(NRArenaItem const *item, NRPixBlock *pb)
     }
 
     Geom::Rect filter_area = filter_effect_area(item_bbox);
-    if (item_bbox.area() == 0.0) {
+    if (item_bbox.hasZeroArea()) {
         // It's no use to try and filter an empty object.
         return 1;
     }
index c2e6f1f8346f0d06411d257cd0c0b6ddb8d3dadf..72ed684b0a093340e828576dd442b3427ab58b65 100644 (file)
@@ -16,9 +16,9 @@
 #include "libnr/nr-pixops.h"
 #include "display/nr-light.h"
 #include "display/nr-3dutils.h"
-#include "sp-fedistantlight.h"
-#include "sp-fepointlight.h"
-#include "sp-fespotlight.h"
+#include "filters/distantlight.h"
+#include "filters/pointlight.h"
+#include "filters/spotlight.h"
 
 namespace NR {
    
index 02c9a9ea218a1469affa99e2a0d4d0c122b117d5..723929ea77ec33bb1ead76d031179d91d3c3fd75 100644 (file)
@@ -249,7 +249,7 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t  *scaled_font,
         //This glyph has a path description on its d attribute, so we render it:
         cairo_new_path(cr);
         Geom::Scale s(1.0/((SPFont*) node->parent)->horiz_adv_x);
-        Geom::Rect area( Geom::Point(0,0), Geom::Point(1,1) ); //I need help here!    (reaction: note that the 'area' parameter is an *optional* rect, so you can pass an empty boost::optional<Geom::Rect>() )
+        Geom::Rect area( Geom::Point(0,0), Geom::Point(1,1) ); //I need help here!    (reaction: note that the 'area' parameter is an *optional* rect, so you can pass an empty Geom::OptRect() )
         feed_pathvector_to_cairo (cr, pathv, s, area, false, 0);
         cairo_fill(cr);
     }
index 59578123e12e4d9e754c1897a9cf422d21a11634..441b64c02fa74679ba4d36523e39a13c684a9181 100644 (file)
@@ -15,9 +15,9 @@
 
 #include "desktop.h"
 #include "desktop-handles.h"
-#include "sp-namedview.h"
 #include "display/sodipodi-ctrl.h"
 #include "knot.h"
+#include "preferences.h"
 
 namespace Inkscape {
 namespace Display {
@@ -47,9 +47,10 @@ SnapIndicator::set_new_snappoint(Inkscape::SnappedPoint const p)
     }
     */
     
-    SPNamedView *nv = sp_desktop_namedview(_desktop);
-    
-    if (nv->snapindicator) {
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    bool value = prefs->getBool("/options/snapindicator/value", true);
+       
+    if (value) {
         // TODO add many different kinds of snap indicator :-)
         // For this we should use p->getTarget() to find out what has snapped 
         // and adjust the shape of the snapindicator accordingly, e.g. a cross
index 1bed9355d234ee3b94c1a8dcd0bf5167074db971..c26402743959bec45b8f34dcda5ef09b6f30f1ef 100644 (file)
@@ -12,6 +12,7 @@
 #include "sp-canvas-util.h"
 #include "display-forward.h"
 #include "sodipodi-ctrl.h"
+#include "libnr/nr-pixops.h"
 
 enum {
     ARG_0,
@@ -122,6 +123,11 @@ sp_ctrl_destroy (GtkObject *object)
 
     ctrl = SP_CTRL (object);
 
+    if (ctrl->cache) {
+        g_free(ctrl->cache);
+        ctrl->cache = NULL;
+    }
+
     if (GTK_OBJECT_CLASS (parent_class)->destroy)
         (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
 }
@@ -314,11 +320,13 @@ sp_ctrl_build_cache (SPCtrl *ctrl)
 
     side = (ctrl->span * 2 +1);
     c = ctrl->span ;
-    g_free (ctrl->cache);
     size = (side) * (side) * 4;
-    ctrl->cache = (guchar*)g_malloc (size);
     if (side < 2) return;
 
+    if (ctrl->cache)
+        g_free (ctrl->cache);
+    ctrl->cache = (guchar*)g_malloc (size);
+
     switch (ctrl->shape) {
         case SP_CTRL_SHAPE_SQUARE:
             p = ctrl->cache;
@@ -482,9 +490,9 @@ sp_ctrl_build_cache (SPCtrl *ctrl)
 }
 
 // composite background, foreground, alpha for xor mode
-#define COMPOSE_X(b,f,a) ( ( ((guchar) b) * ((guchar) (0xff - a)) + ((guchar) ((b ^ ~f) + b/4 - (b>127? 63 : 0))) * ((guchar) a) ) / 0xff )
+#define COMPOSE_X(b,f,a) ( FAST_DIVIDE<255>( ((guchar) b) * ((guchar) (0xff - a)) + ((guchar) ((b ^ ~f) + b/4 - (b>127? 63 : 0))) * ((guchar) a) ) )
 // composite background, foreground, alpha for color mode
-#define COMPOSE_N(b,f,a) ( ( ((guchar) b) * ((guchar) (0xff - a)) + ((guchar) f) * ((guchar) a) ) / 0xff )
+#define COMPOSE_N(b,f,a) ( FAST_DIVIDE<255>( ((guchar) b) * ((guchar) (0xff - a)) + ((guchar) f) * ((guchar) a) ) )
 
 static void
 sp_ctrl_render (SPCanvasItem *item, SPCanvasBuf *buf)
index e9bf1633ee7a9cb4db3ae33e38b5a5e51c6dd6d7..651bd041490b360aed11d2ff975dfe84fcb88fc3 100644 (file)
@@ -795,7 +795,7 @@ sp_canvas_group_update (SPCanvasItem *item, Geom::Matrix const &affine, unsigned
         }
     }
 
-    boost::optional<Geom::Rect> const bounds = corners.bounds();
+    Geom::OptRect const bounds = corners.bounds();
     if (bounds) {
         item->x1 = bounds->min()[Geom::X];
         item->y1 = bounds->min()[Geom::Y];
@@ -1612,45 +1612,54 @@ sp_canvas_motion (GtkWidget *widget, GdkEventMotion *event)
     // Snap when speed drops below e.g. 0.02 px/msec, or when no motion events have occured for some period.
        // i.e. snap when we're at stand still. A speed threshold enforces snapping for tablets, which might never
        // be fully at stand still and might keep spitting out motion events.
-    
-    if (event->type == GDK_MOTION_NOTIFY) {            
-       Geom::Point event_pos(event->x, event->y);
-       guint32 event_t = gdk_event_get_time ( (GdkEvent *) event );
-               
-       if (dt) { // put snapping on hold
-                       dt->namedview->snap_manager.snapprefs.setSnapPostponedGlobally(true);
-               }                               
-       
-       if (prev_pos) {
-               Geom::Coord dist = Geom::L2(event_pos - *prev_pos);
-               guint32 delta_t = event_t - prev_time;
-               gdouble speed = delta_t > 0 ? dist/delta_t : 1000;
-               // std::cout << "speed = " << speed << " px/msec " << "| time passed = " << delta_t << " msec" << std::endl;
-               if (speed > 0.02) { // Jitter threshold, might be needed for tablets 
-                               // We're moving fast, so postpone any snapping until the next GDK_MOTION_NOTIFY event. We
-                       // will keep on postponing the snapping as long as the speed is high.
-                               // We must snap at some point in time though, so set a watchdog timer at some time from
-                               // now, just in case there's no future motion event that drops under the speed limit (when 
-                       // stoppping abruptly)
-                       sp_canvas_snap_watchdog_kill(canvas);
-                       sp_canvas_snap_watchdog_set(canvas, event); // watchdog is reset, i.e. pushed forward in time
-                       } else { // Speed is very low, so we're virtually at stand still
-                               // But if we're really standing still, then we should snap now. We could use some low-pass filtering, 
-                               // otherwise snapping occurs for each jitter movement. For this filtering we'll leave the watchdog to expire,
-                               // snap, and set a new watchdog again. 
-                               if (canvas->watchdog_id == 0) { // no watchdog has been set 
-                                       // it might have already expired, so we'll set a new one; the snapping frequency will be limited by this
-                                       sp_canvas_snap_watchdog_set(canvas, event);
-                               } // else: watchdog has been set before and we'll wait for it to expire
-                       }
-               } else {
-                       // This is the first GDK_MOTION_NOTIFY event, so postpone snapping and set the watchdog
-                       sp_canvas_snap_watchdog_set(canvas, event);
-               }
+    if (dt) {
+           bool const c1 = event->type == GDK_MOTION_NOTIFY;
+           bool const c21 = event->state & GDK_BUTTON1_MASK; // Snapping only occurs when dragging with the left mouse button down
+           bool const c22 = event->state & GDK_BUTTON2_MASK; // We shouldn't hold back any events when other mouse buttons have been
+           bool const c23 = event->state & GDK_BUTTON3_MASK; // pressed, e.g. when scrolling with the middle mouse button; if we do then
+                                                                                                         // Inkscape will get stuck in an unresponsive state
+           bool const c3 = dt->namedview->snap_manager.snapprefs.getSnapEnabledGlobally();
+           if (c1 && c21 && (!c22) && (!c23) && c3) {          
+               Geom::Point event_pos(event->x, event->y);
+               guint32 event_t = gdk_event_get_time ( (GdkEvent *) event );
+                       
+               dt->namedview->snap_manager.snapprefs.setSnapPostponedGlobally(true); // put snapping on hold
                        
-       prev_pos = event_pos;
-       prev_time = event_t;
-    }
+               if (prev_pos) {
+                       Geom::Coord dist = Geom::L2(event_pos - *prev_pos);
+                       guint32 delta_t = event_t - prev_time;
+                       gdouble speed = delta_t > 0 ? dist/delta_t : 1000;
+                       // std::cout << "speed = " << speed << " px/msec " << "| time passed = " << delta_t << " msec" << std::endl;
+                       if (speed > 0.02) { // Jitter threshold, might be needed for tablets 
+                                       // We're moving fast, so postpone any snapping until the next GDK_MOTION_NOTIFY event. We
+                               // will keep on postponing the snapping as long as the speed is high.
+                                       // We must snap at some point in time though, so set a watchdog timer at some time from
+                                       // now, just in case there's no future motion event that drops under the speed limit (when 
+                               // stoppping abruptly)
+                               sp_canvas_snap_watchdog_kill(canvas);
+                               sp_canvas_snap_watchdog_set(canvas, event); // watchdog is reset, i.e. pushed forward in time
+                               // If the watchdog expires before a new motion event is received, we will snap (as explained
+                               // above). This means however that when the timer is too short, we will always snap and that the
+                               // speed threshold is ineffective. In the extreme case the delay is set to zero, and snapping will
+                               // be immediate, as it used to be in the old days ;-). 
+                               } else { // Speed is very low, so we're virtually at stand still
+                                       // But if we're really standing still, then we should snap now. We could use some low-pass filtering, 
+                                       // otherwise snapping occurs for each jitter movement. For this filtering we'll leave the watchdog to expire,
+                                       // snap, and set a new watchdog again. 
+                                       if (canvas->watchdog_id == 0) { // no watchdog has been set 
+                                               // it might have already expired, so we'll set a new one; the snapping frequency will be limited by this
+                                               sp_canvas_snap_watchdog_set(canvas, event);
+                                       } // else: watchdog has been set before and we'll wait for it to expire
+                               }
+                       } else {
+                               // This is the first GDK_MOTION_NOTIFY event, so postpone snapping and set the watchdog
+                               sp_canvas_snap_watchdog_set(canvas, event);
+                       }
+                               
+               prev_pos = event_pos;
+               prev_time = event_t;
+           }
+       }
     
     canvas->state = event->state;
     pick_current_item (canvas, (GdkEvent *) event);
@@ -1687,8 +1696,10 @@ gboolean sp_canvas_snap_watchdog_callback(gpointer data)
 
 void sp_canvas_snap_watchdog_set(SPCanvas *canvas, GdkEventMotion *event) 
 {
+       Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+       double value = prefs->getDoubleLimited("/options/snapdelay/value", 0, 0, 1000);
        g_assert(canvas->watchdog_id == 0);
-       canvas->watchdog_id = g_timeout_add(400, &sp_canvas_snap_watchdog_callback, canvas);
+       canvas->watchdog_id = g_timeout_add(value, &sp_canvas_snap_watchdog_callback, canvas);
        g_assert(canvas->watchdog_event == NULL);
        canvas->watchdog_event = gdk_event_copy( (GdkEvent *) event); 
 }
index 28a2be9a168d20014fd46d1c1b1300f57524ad82..d38d5423fde0fee95ba41a4966c36203e6613b5b 100644 (file)
@@ -560,6 +560,11 @@ gdouble sp_document_height(SPDocument *document)
     return root->height.computed;
 }
 
+Geom::Point sp_document_dimensions(SPDocument *doc)
+{
+    return Geom::Point(sp_document_width(doc), sp_document_height(doc));
+}
+
 /**
  * Given a Geom::Rect that may, for example, correspond to the bbox of an object,
  * this function fits the canvas to that rect by resizing the canvas
@@ -567,8 +572,6 @@ gdouble sp_document_height(SPDocument *document)
  */
 void SPDocument::fitToRect(Geom::Rect const &rect)
 {
-    g_return_if_fail(!rect.isEmpty());
-
     double const w = rect.width();
     double const h = rect.height();
 
@@ -918,7 +921,7 @@ static GSList *find_items_in_area(GSList *s, SPGroup *group, unsigned int dkey,
             s = find_items_in_area(s, SP_GROUP(o), dkey, area, test);
         } else {
             SPItem *child = SP_ITEM(o);
-            boost::optional<Geom::Rect> box = sp_item_bbox_desktop(child);
+            Geom::OptRect box = sp_item_bbox_desktop(child);
             if ( box && test(area, *box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) {
                 s = g_slist_append(s, child);
             }
index fff3289ddbfc5489924fdafbad1d73001e756e66..99a887c6bda815406ebd090e0436457a754e0ea5 100644 (file)
@@ -21,7 +21,7 @@
 #include <sigc++/class_slot.h>
 
 #include "libcroco/cr-cascade.h"
-#include <2geom/rect.h>
+#include <2geom/forward.h>
 
 #include "gc-managed.h"
 #include "gc-finalized.h"
@@ -41,10 +41,6 @@ struct SPItem;
 struct SPObject;
 struct SPGroup;
 
-namespace Geom {
-    class Point;
-}
-
 namespace Inkscape {
     struct Application;
     class Selection; 
@@ -187,6 +183,7 @@ SPDocument *sp_document_create(Inkscape::XML::Document *rdoc, gchar const *uri,
 
 gdouble sp_document_width (SPDocument * document);
 gdouble sp_document_height (SPDocument * document);
+Geom::Point sp_document_dimensions (SPDocument * document);
 
 struct SPUnit;
 
index 035d83a1452d979043379a0b96fd414fc2505b63..bfca9b21a9c465bac2e9725afbb5d728048d1122 100644 (file)
-/** \file
- * Contains Doxygen documentation - main page.
- *
- * Authors:
+/** @file
+ * @brief Doxygen documentation - main page and namespace documentation.
+ */
+/* Authors:
  *   Ralf Stephan <ralf@ark.in-berlin.de>
+ *   Krzysztof Kosiński <tweenk.pl@gmail.com>
  *
- * Copyright (C) 2005-2006 authors
+ * Copyright (C) 2005-2008 authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-/** \mainpage The Inkscape Source Code Documentation
+// Note: % before a word prevents that word from being linkified
+
+/**
+ * @brief Main %Inkscape namespace
+ *
+ * This namespace contains all code internal to %Inkscape.
+ */
+namespace Inkscape {
+
+/**
+ * @brief Some STL-style algorithms
+ *
+ * This namespace contains a few generic algorithms used with the %XML tree.
+ */
+namespace Algorithms {}
+
+
+/**
+ * @brief Debugging utilities
+ *
+ * This namespace contains various debugging code which can help developers
+ * to pinpoint problems with their (or others') code.
+ */
+namespace Debug {}
+
+/**
+ * @brief Rendering-related code
+ *
+ * This namespace contains code related to the renderer.
+ */
+namespace Display {}
+
+/**
+ * @brief Extension support
+ *
+ * This namespace contains the extension subsystem and implementations
+ * of the internal extensions. This includes input and output filters, bitmap
+ * extensions, and printing.
+ */
+namespace Extension {}
+
+/**
+ * @brief Boehm-GC based garbage collector
+ *
+ * This namespace contains code related to the garbage collector and base
+ * classes for %GC-managed objects.
+ */
+namespace GC {}
+
+/**
+ * @brief Low-level IO code
+ *
+ * This namespace contains low level IO-related code, including a homegrown
+ * streams implementation, routines for formatting SVG output, and some
+ * file handling utility functions.
+ */
+namespace IO {}
+
+/**
+ * @brief Live Path Effects code
+ *
+ * This namespace contains classes and functions related to the implementation
+ * of Live Path Effects, which apply arbitrary transformation to a path and
+ * update whenever the original path is modified.
+ */
+namespace LivePathEffect {}
+
+/**
+ * @brief Tracing backend
+ *
+ * This namespace contains the integrated potrace-based tracing backend, used
+ * in the Trace Bitmap and Paint Bucket features.
+ */
+namespace Trace {}
+
+/**
+ * @brief User interface code
+ *
+ * This namespace contains everything related to the user interface of Inkscape.
+ */
+namespace UI {
+
+/**
+ * @brief Dialog code
+ *
+ * This namespace contains all code related to dialogs.
+ */
+namespace Dialog {}
+
+/**
+ * @brief Custom widgets
+ *
+ * This namespace contains custom user interface widgets used thorought
+ * Inkscape.
+ */
+namespace Widget {}
+
+} // namespace UI
+
+/**
+ * @brief Miscellaneous supporting code
+ *
+ * This namespace contains miscellaneous low-level code: an implementation of
+ * garbage-collected lists, tuples, generic pointer iterators and length unit
+ * handling.
+ */
+namespace Util {}
+
+/**
+ * @brief %Inkscape %XML tree
+ *
+ * This namespace contains classes and functions that comprise the XML tree
+ * of Inkscape documents.
+ *
+ * SVG documents in Inkscape are represented as two parallel hierarchies
+ * of nodes: the object tree, which contains all information about
+ * the document's state when loaded, and the %XML tree, which contains all
+ * information about the document's %XML representation. For this reason
+ * this tree is also called the "repr tree", and %XML nodes are called "reprs".
+ *
+ * The central class is XML::Node, which provides all operations. It should be
+ * noted that nodes are currently typeless and operations not valid for their
+ * type simply do nothing (like trying to iterate over children of a text node).
+ * In addition to standard DOM operations, the %XML tree supports observers -
+ * objects derived from Xml::NodeObserver which receive notifications about
+ * changes in the document tree.
+ */
+namespace XML {}
+
+} // namespace Inkscape
+
+/** \mainpage Inkscape Source Code Documentation
  * While the standard doxygen documentation can be accessed through the links
  * in the header, the following documents are additionally available to the
  * interested reader.
  *
  * \subsection liblinks External documentation on libraries used in inkscape
  *
- * <a href="http://www.gtkmm.org/gtkmm2/docs/">Gtkmm</a>
- * <a href="http://www.gtkmm.org/gtkmm2/docs/reference/html/dir_000003.html">atkmm</a>
- * <a href="http://www.gtkmm.org/gtkmm2/docs/reference/html/dir_000009.html">gdkmm</a>
- * <a href="http://www.gtkmm.org/gtkmm2/docs/reference/html/dir_000007.html">pangomm</a>
- * <a href="http://libsigc.sourceforge.net/libsigc1_2/reference/html/modules.html">libsigc++</a>
+ * C++:
+ * <a href="http://www.gtkmm.org/documentation.shtml">gtkmm</a>
+ * <a href="http://www.gtkmm.org/docs/gtkmm-2.4/docs/reference/html/namespaceAtk.html">atkmm</a>
+ * <a href="http://www.gtkmm.org/docs/gtkmm-2.4/docs/reference/html/namespaceGdk.html">gdkmm</a>
+ * <a href="http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/namespaceGlib.html">glibmm</a>
+ * <a href="http://www.gtkmm.org/docs/pangomm-1.4/docs/reference/html/namespacePango.html">pangomm</a>
+ * <a href="http://libsigc.sourceforge.net/libsigc2/docs/index.html">libsigc++</a>
+ * C:
  * <a href="http://www.gtk.org/api/">GTK+</a>
  * <a href="http://developer.gnome.org/doc/API/2.0/gdk-pixbuf/index.html">gdk-pixbuf</a>
  * <a href="http://developer.gnome.org/doc/API/2.0/gobject/index.html">GObject</a>
  * <a href="http://developer.gnome.org/doc/API/2.0/atk/index.html">atk</a>
  * <a href="http://developer.gnome.org/doc/API/2.0/pango/index.html">pango</a>
- * <a href="http://developer.gnome.org/doc/API/2.0/gnome-vfs-2.0/">GnomeVFS</a>
- * <a href="http://libsigc.sourceforge.net/libsigc2/docs/index.html">libsigc</a>
  * <a href="http://developer.gnome.org/doc/API/2.0/ORBit/index.html">ORBit</a>
  * <a href="http://developer.gnome.org/doc/API/2.0/libbonobo/index.html">bonobo</a>
  * <a href="http://developer.gnome.org/doc/API/2.0/bonobo-activation/index.html">bonobo-activation</a>
  * <a href="http://xmlsoft.org/XSLT/html/libxslt-lib.html#LIBXSLT-LIB">libxslt</a>
  * <a href="http://xmlsoft.org/html/index.html">libxml2</a>
+ * Legacy:
+ * <a href="http://developer.gnome.org/doc/API/2.0/gnome-vfs-2.0/">GnomeVFS</a>
  *
  * \subsection stdlinks External standards documentation
  *
  * <a href="http://www.w3.org/Graphics/SVG/Test/">SVGTest</a>
  * <a href="http://www.libpng.org/pub/png/">PNG</a>
  * <a href="http://www.w3.org/TR/xslt">XSLT</a>
- * <a href="http://partners.adobe.com/public/developer/ps/index_specs.html">PS</a>
+ * <a href="http://partners.adobe.com/public/developer/ps/index_specs.html">PostScript</a>
  * <a href="http://developer.gnome.org/projects/gup/hig/">Gnome-HIG</a>
  */
 
index fab6f4dadefa326d16f1e034fcd0ddf241912ddf..465bee16afea2c122ad478d53cc125fa8a6104a9 100644 (file)
@@ -742,7 +742,7 @@ set_to_accumulated(SPEraserContext *dc)
             Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
 
             SPItem* acid = SP_ITEM(desktop->doc()->getObjectByRepr(dc->repr));
-            boost::optional<Geom::Rect> eraserBbox = acid->getBounds(Geom::identity());
+            Geom::OptRect eraserBbox = acid->getBounds(Geom::identity());
             Geom::Rect bounds = (*eraserBbox) * desktop->doc2dt();
             std::vector<SPItem*> remainingItems;
             GSList* toWorkOn = 0;
@@ -764,7 +764,7 @@ set_to_accumulated(SPEraserContext *dc)
                     for (GSList *i = toWorkOn ; i ; i = i->next ) {
                         SPItem *item = SP_ITEM(i->data);
                         if ( eraserMode ) {
-                            boost::optional<Geom::Rect> bbox = item->getBounds(Geom::identity());
+                            Geom::OptRect bbox = item->getBounds(Geom::identity());
                             if (bbox && bbox->intersects(*eraserBbox)) {
                                 Inkscape::XML::Node* dup = dc->repr->duplicate(xml_doc);
                                 dc->repr->parent()->appendChild(dup);
index be7b2e033ca546e629327b580c106c0f37bb4b0f..963bf2d7e67b16f3e92b72b7378a1199bc13c55a 100644 (file)
@@ -499,7 +499,7 @@ static gint sp_event_context_private_root_handler(SPEventContext *event_context,
                 ret = TRUE;
             } else if (zoom_rb == event->button.button) {
                 zoom_rb = 0;
-                boost::optional<Geom::Rect> const b = Inkscape::Rubberband::get(desktop)->getRectangle();
+                Geom::OptRect const b = Inkscape::Rubberband::get(desktop)->getRectangle();
                 Inkscape::Rubberband::get(desktop)->stop();
                 if (b && !within_tolerance) {
                     desktop->set_display_area(*b, 10);
index afacbed630a288d265e9de03c74ef805849a73f9..0dba9df8fa8724c3a975b98630ccfe2cb5d4e312 100644 (file)
 #include "system.h"
 #include "db.h"
 #include "internal/svgz.h"
-#include "internal/ps.h"
-#ifdef HAVE_CAIRO_PDF
-# include "internal/pdf-cairo.h"
-#endif
 #ifdef WIN32
 # include "internal/win32.h"
 # include "internal/emf-win32-inout.h"
 # include "internal/emf-win32-print.h"
 #endif
-#include "internal/ps-out.h"
 #ifdef HAVE_CAIRO_PDF
-# include "internal/cairo-pdf-out.h"
 # include "internal/cairo-renderer-pdf-out.h"
 # include "internal/cairo-png-out.h"
 # include "internal/cairo-ps-out.h"
@@ -52,7 +46,6 @@
 #include "internal/odf.h"
 #include "internal/latex-pstricks-out.h"
 #include "internal/latex-pstricks.h"
-#include "internal/eps-out.h"
 #include "internal/gdkpixbuf-input.h"
 #include "internal/bluredge.h"
 #include "internal/gimpgrad.h"
@@ -160,19 +153,12 @@ init()
     /* TODO: Change to Internal */
     Internal::Svg::init();
     Internal::Svgz::init();
-    //Internal::PsOutput::init(); // disabled, to be deleted, replaced by CairoPsOutput
-    //Internal::EpsOutput::init(); // disabled, to be deleted, replaced by CairoEpsOutput
-    Internal::PrintPS::init();
+
 #ifdef HAVE_CAIRO_PDF
-    if (prefs->getBool("/options/useoldpdfexporter/value")) {
-    //g_print ("Using CairoPdfOutput: old pdf exporter\n");
-    Internal::CairoPdfOutput::init();
-    Internal::PrintCairoPDF::init();
-    } else {
     //g_print ("Using CairoRendererPdfOutput: new pdf exporter\n");
     Internal::CairoRendererPdfOutput::init();
     Internal::CairoRendererOutput::init();
-    }
+
     Internal::CairoPsOutput::init();
     Internal::CairoEpsOutput::init();
 #endif
index 1de46034ed35e0557c4e513d2fdd5efe960e9262..ee431ee48ad0b5319bb480d25e72fce618b26f5a 100644 (file)
@@ -98,16 +98,8 @@ extension_internal_libinternal_a_SOURCES =   \
        extension/internal/svg.cpp      \
        extension/internal/svgz.h       \
        extension/internal/svgz.cpp     \
-       extension/internal/ps.h \
-       extension/internal/ps.cpp       \
-       extension/internal/ps-out.h     \
-       extension/internal/ps-out.cpp   \
-       extension/internal/pdf-cairo.cpp \
-       extension/internal/pdf-cairo.h \
        extension/internal/pdf-input-cairo.cpp \
        extension/internal/pdf-input-cairo.h \
-       extension/internal/cairo-pdf-out.h      \
-       extension/internal/cairo-pdf-out.cpp    \
        extension/internal/cairo-ps-out.h       \
        extension/internal/cairo-ps-out.cpp     \
        extension/internal/cairo-render-context.h       \
@@ -118,8 +110,6 @@ extension_internal_libinternal_a_SOURCES =  \
        extension/internal/cairo-renderer-pdf-out.cpp   \
        extension/internal/cairo-png-out.h \
        extension/internal/cairo-png-out.cpp \
-       extension/internal/eps-out.h    \
-       extension/internal/eps-out.cpp  \
        extension/internal/javafx-out.cpp       \
        extension/internal/javafx-out.h \
        extension/internal/gdkpixbuf-input.h    \
diff --git a/src/extension/internal/cairo-pdf-out.cpp b/src/extension/internal/cairo-pdf-out.cpp
deleted file mode 100644 (file)
index ac598b9..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * A quick hack to use the print output to write out a file.  This
- * then makes 'save as...' PDF.
- *
- * Authors:
- *   Ted Gould <ted@gould.cx>
- *   Ulf Erikson <ulferikson@users.sf.net>
- *
- * Copyright (C) 2004-2006 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef HAVE_CAIRO_PDF
-
-#include "cairo-pdf-out.h"
-#include <print.h>
-#include "extension/system.h"
-#include "extension/print.h"
-#include "extension/db.h"
-#include "extension/output.h"
-#include "display/nr-arena.h"
-#include "display/nr-arena-item.h"
-#include "sp-path.h"
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-bool
-CairoPdfOutput::check (Inkscape::Extension::Extension * module)
-{
-       if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PDF))
-               return FALSE;
-
-       return TRUE;
-}
-
-
-static unsigned int
-pdf_print_document_to_file(SPDocument *doc, gchar const *filename, unsigned int pdf_level, bool texttopath, bool filtertobitmap)
-{
-    Inkscape::Extension::Print *mod;
-    SPPrintContext context;
-    gchar const *oldconst;
-    gchar *oldoutput;
-    unsigned int ret;
-
-    sp_document_ensure_up_to_date(doc);
-
-    mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_CAIRO_PDF);
-    oldconst = mod->get_param_string("destination");
-    oldoutput = g_strdup(oldconst);
-    mod->set_param_string("destination", (gchar *)filename);
-
-/* Start */
-    context.module = mod;
-    /* fixme: This has to go into module constructor somehow */
-    /* Create new arena */
-    const gchar* exportId = mod->get_param_string("exportId");
-    bool exportDrawing = mod->get_param_bool("exportDrawing");
-    bool exportCanvas = mod->get_param_bool("exportCanvas");
-    if (exportId && strcmp(exportId, "")) {
-        // we want to export the given item only
-        mod->base = SP_ITEM(doc->getObjectById(exportId));
-        if (exportCanvas)
-            mod->set_param_bool("pageBoundingBox", TRUE);
-        else
-            mod->set_param_bool("pageBoundingBox", FALSE);
-    } else {
-        // we want to export the entire document from root
-        mod->base = SP_ITEM(sp_document_root(doc));
-        if (exportDrawing)
-            mod->set_param_bool("pageBoundingBox", FALSE);
-        else
-            mod->set_param_bool("pageBoundingBox", TRUE);
-    }
-    mod->arena = NRArena::create();
-    mod->dkey = sp_item_display_key_new(1);
-    mod->root = sp_item_invoke_show(mod->base, mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY);
-
-    /* Print document */
-    ret = mod->begin(doc);
-    if (ret) {
-        sp_item_invoke_print(mod->base, &context);
-        ret = mod->finish();
-    }
-
-    /* Release arena */
-    sp_item_invoke_hide(mod->base, mod->dkey);
-    mod->base = NULL;
-    mod->root = NULL;
-    nr_object_unref((NRObject *) mod->arena);
-    mod->arena = NULL;
-/* end */
-
-    mod->set_param_string("destination", oldoutput);
-    g_free(oldoutput);
-
-    return ret;
-}
-
-
-/**
-    \brief  This function calls the print system with the filename
-       \param  mod   unused
-       \param  doc   Document to be saved
-    \param  uri   Filename to save to (probably will end in .pdf)
-
-       The most interesting thing that this function does is just attach
-       an '>' on the front of the filename.  This is the syntax used to
-       tell the printing system to save to file.
-*/
-void
-CairoPdfOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gchar *uri)
-{
-    Inkscape::Extension::Extension * ext;
-    unsigned int ret;
-
-    ext = Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_CAIRO_PDF);
-    if (ext == NULL)
-        return;
-
-    bool old_textToPath  = FALSE;
-    bool new_textToPath  = FALSE;
-    try {
-        old_textToPath  = ext->get_param_bool("textToPath");
-        new_textToPath  = mod->get_param_bool("textToPath");
-        ext->set_param_bool("textToPath", new_textToPath);
-    }
-    catch(...) {
-        g_warning("Parameter <textToPath> might not exist");
-    }
-
-    bool old_blurToBitmap  = FALSE;
-    bool new_blurToBitmap  = FALSE;
-    try {
-        old_blurToBitmap  = ext->get_param_bool("blurToBitmap");
-        new_blurToBitmap  = mod->get_param_bool("blurToBitmap");
-        ext->set_param_bool("blurToBitmap", new_blurToBitmap);
-    }
-    catch(...) {
-        g_warning("Parameter <blurToBitmap> might not exist");
-    }
-
-    const gchar* old_exportId = NULL;
-    const gchar* new_exportId = NULL;
-    try {
-        old_exportId  = ext->get_param_string("exportId");
-        new_exportId  = mod->get_param_string("exportId");
-        ext->set_param_string("exportId", new_exportId);
-    }
-    catch(...) {
-        g_warning("Parameter <exportId> might not exist");
-    }
-
-    bool old_exportDrawing = false;
-    bool new_exportDrawing = false;
-    try {
-        old_exportDrawing  = ext->get_param_bool("exportDrawing");
-        new_exportDrawing  = mod->get_param_bool("exportDrawing");
-        ext->set_param_bool("exportDrawing", new_exportDrawing);
-    }
-    catch(...) {
-        g_warning("Parameter <exportDrawing> might not exist");
-    }
-
-    bool old_exportCanvas = false;
-    bool new_exportCanvas = false;
-    try {
-        old_exportCanvas  = ext->get_param_bool("exportCanvas");
-        new_exportCanvas  = mod->get_param_bool("exportCanvas");
-        ext->set_param_bool("exportCanvas", new_exportCanvas);
-    }
-    catch(...) {
-        g_warning("Parameter <exportCanvas> might not exist");
-    }
-
-    gchar * final_name;
-    final_name = g_strdup_printf("> %s", uri);
-    ret = pdf_print_document_to_file(doc, final_name, 0, new_textToPath, new_blurToBitmap);
-    g_free(final_name);
-
-    try {
-        ext->set_param_bool("blurToBitmap", old_blurToBitmap);
-    }
-    catch(...) {
-        g_warning("Parameter <blurToBitmap> might not exist");
-    }
-    try {
-        ext->set_param_bool("textToPath", old_textToPath);
-    }
-    catch(...) {
-        g_warning("Parameter <textToPath> might not exist");
-    }
-    try {
-        ext->set_param_string("exportId", old_exportId);
-    }
-    catch(...) {
-        g_warning("Parameter <exportId> might not exist");
-    }
-    try {
-        ext->set_param_bool("exportDrawing", old_exportDrawing);
-    }
-    catch(...) {
-        g_warning("Parameter <exportDrawing> might not exist");
-    }
-    try {
-        ext->set_param_bool("exportCanvas", old_exportCanvas);
-    }
-    catch(...) {
-        g_warning("Parameter <exportCanvas> might not exist");
-    }
-
-    if (!ret)
-        throw Inkscape::Extension::Output::save_failed();
-
-    return;
-}
-
-#include "clear-n_.h"
-/**
-       \brief   A function allocate a copy of this function.
-
-       This is the definition of PDF out.  This function just
-       calls the extension system with the memory allocated XML that
-       describes the data.
-*/
-void
-CairoPdfOutput::init (void)
-{
-       Inkscape::Extension::build_from_mem(
-               "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n"
-                       "<name>" N_("Cairo PDF Output") "</name>\n"
-                       "<id>org.inkscape.output.pdf.cairo</id>\n"
-                       "<param name=\"PDFversion\" gui-text=\"" N_("Restrict to PDF version") "\" type=\"enum\" >\n"
-                               "<_item value='PDF14'>" N_("PDF 1.4") "</_item>\n"
-      "</param>\n"
-                       "<param name=\"textToPath\" gui-text=\"" N_("Convert texts to paths") "\" type=\"boolean\">false</param>\n"
-                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert blur effects to bitmaps") "\" type=\"boolean\">false</param>\n"
-      "<param name=\"resolution\" gui-text=\"" N_("Preferred resolution (DPI) of bitmaps") "\" type=\"int\" min=\"72\" max=\"2400\">90</param>\n"
-      "<param name=\"exportDrawing\" gui-text=\"" N_("Export drawing, not page") "\" type=\"boolean\">false</param>\n"
-      "<param name=\"exportCanvas\" gui-text=\"" N_("Export canvas") "\" type=\"boolean\">false</param>\n"
-      "<param name=\"exportId\" gui-text=\"" N_("Limit export to the object with ID") "\" type=\"string\"></param>\n"
-      "<output>\n"
-                               "<extension>.pdf</extension>\n"
-                               "<mimetype>application/pdf</mimetype>\n"
-                               "<filetypename>" N_("PDF via Cairo (*.pdf)") "</filetypename>\n"
-                               "<filetypetooltip>" N_("PDF File") "</filetypetooltip>\n"
-                       "</output>\n"
-               "</inkscape-extension>", new CairoPdfOutput());
-
-       return;
-}
-
-} } }  /* namespace Inkscape, Extension, Implementation */
-
-#endif /* HAVE_CAIRO_PDF */
-
-/*
-  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 :
diff --git a/src/extension/internal/cairo-pdf-out.h b/src/extension/internal/cairo-pdf-out.h
deleted file mode 100644 (file)
index 42cd936..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * A quick hack to use the print output to write out a file.  This
- * then makes 'save as...' PDF.
- *
- * Authors:
- *   Ted Gould <ted@gould.cx>
- *   Ulf Erikson <ulferikson@users.sf.net>
- *
- * Copyright (C) 2004-2006 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifndef EXTENSION_INTERNAL_CAIRO_PDF_OUT_H
-#define EXTENSION_INTERNAL_CAIRO_PDF_OUT_H
-
-#include "extension/implementation/implementation.h"
-
-#ifdef HAVE_CAIRO_PDF
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-class CairoPdfOutput : Inkscape::Extension::Implementation::Implementation {
-
-public:
-    bool check(Inkscape::Extension::Extension *module);
-    void save(Inkscape::Extension::Output *mod,
-              SPDocument *doc,
-              gchar const *uri);
-    static void init();
-};
-
-} } }  /* namespace Inkscape, Extension, Implementation */
-
-#endif /* HAVE_CAIRO_PDF */
-
-#endif /* !EXTENSION_INTERNAL_CAIRO_PDF_OUT_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 :
index 01afec0fcfb09f6d4bcbe44a254c78fe437073af..e33316c94e4930f6d9e2bb67338dd51bc65e7b1d 100644 (file)
@@ -282,7 +282,7 @@ CairoPsOutput::init (void)
                        "<param name=\"areaCanvas\" gui-text=\"" N_("Export area is whole canvas") "\" type=\"boolean\">true</param>\n"
                        "<param name=\"areaDrawing\" gui-text=\"" N_("Export area is the drawing") "\" type=\"boolean\">true</param>\n"
                        "<param name=\"textToPath\" gui-text=\"" N_("Convert texts to paths") "\" type=\"boolean\">false</param>\n"
-                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert blur effects to bitmaps") "\" type=\"boolean\">false</param>\n"
+                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert blur effects to bitmaps") "\" type=\"boolean\">true</param>\n"
                        "<param name=\"resolution\" gui-text=\"" N_("Preferred resolution (DPI) of bitmaps") "\" type=\"int\" min=\"72\" max=\"2400\">90</param>\n"
                        "<param name=\"exportId\" gui-text=\"" N_("Limit export to the object with ID") "\" type=\"string\"></param>\n"
                        "<output>\n"
@@ -319,7 +319,7 @@ CairoEpsOutput::init (void)
                        "<param name=\"areaCanvas\" gui-text=\"" N_("Export area is whole canvas") "\" type=\"boolean\">true</param>\n"
                        "<param name=\"areaDrawing\" gui-text=\"" N_("Export area is the drawing") "\" type=\"boolean\">true</param>\n"
                        "<param name=\"textToPath\" gui-text=\"" N_("Convert texts to paths") "\" type=\"boolean\">false</param>\n"
-                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert blur effects to bitmaps") "\" type=\"boolean\">false</param>\n"
+                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert blur effects to bitmaps") "\" type=\"boolean\">true</param>\n"
                        "<param name=\"resolution\" gui-text=\"" N_("Preferred resolution (DPI) of bitmaps") "\" type=\"int\" min=\"72\" max=\"2400\">90</param>\n"
                        "<param name=\"exportId\" gui-text=\"" N_("Limit export to the object with ID") "\" type=\"string\"></param>\n"
                        "<output>\n"
index c82cc76112a69e8be431b0b00d606a18c4a75190..cb17002d41625892f43d8cf1f43a54c45e165198 100644 (file)
@@ -216,7 +216,7 @@ CairoRendererPdfOutput::init (void)
                                "<_item value='PDF14'>" N_("PDF 1.4") "</_item>\n"
                        "</param>\n"
                        "<param name=\"textToPath\" gui-text=\"" N_("Convert texts to paths") "\" type=\"boolean\">false</param>\n"
-                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert filter effects to bitmaps") "\" type=\"boolean\">false</param>\n"
+                       "<param name=\"blurToBitmap\" gui-text=\"" N_("Convert filter effects to bitmaps") "\" type=\"boolean\">true</param>\n"
                        "<param name=\"resolution\" gui-text=\"" N_("Preferred resolution (DPI) of bitmaps") "\" type=\"int\" min=\"72\" max=\"2400\">90</param>\n"
                        "<param name=\"areaDrawing\" gui-text=\"" N_("Export drawing, not page") "\" type=\"boolean\">false</param>\n"
                        "<param name=\"areaCanvas\" gui-text=\"" N_("Export canvas") "\" type=\"boolean\">false</param>\n"
index 5d6315894da32f5f0f8bbbb87b1b7db098ffcb9d..4bc983cb75247e77903b48abdff190e5072eb999 100644 (file)
@@ -446,7 +446,7 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx)
     TRACE(("sp_asbitmap_render: resolution: %f\n", res ));
 
     // Get the bounding box of the selection in document coordinates.
-    boost::optional<Geom::Rect> bbox = 
+    Geom::OptRect bbox = 
            item->getBounds(sp_item_i2d_affine(item), SPItem::RENDERING_BBOX);
 
     if (!bbox) // no bbox, e.g. empty group
diff --git a/src/extension/internal/eps-out.cpp b/src/extension/internal/eps-out.cpp
deleted file mode 100644 (file)
index c08bd1d..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Authors:
- *   Ted Gould <ted@gould.cx>
- *
- * Copyright (C) 2004 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#include "eps-out.h"
-#include <print.h>
-#include "extension/system.h"
-#include "extension/db.h"
-#include "extension/output.h"
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-bool
-EpsOutput::check (Inkscape::Extension::Extension * module)
-{
-    if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_PS))
-        return FALSE;
-
-    return TRUE;
-}
-
-/**
-    \brief  This function calls the print system with the filename
-    \param  mod   unused
-    \param  doc   Document to be saved
-    \param  uri   Filename to save to (probably will end in .eps)
-
-    The most interesting thing that this function does is just attach
-    an '>' on the front of the filename.  This is the syntax used to
-    tell the printing system to save to file.
-*/
-void
-EpsOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gchar *uri)
-{
-    gchar * final_name;
-    Inkscape::Extension::Extension * ext;
-
-    ext = Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_PS);
-    if (ext == NULL)
-        return;
-
-    bool old_pageBoundingBox = ext->get_param_bool("pageBoundingBox");
-    bool new_val             = mod->get_param_bool("pageBoundingBox");
-    ext->set_param_bool("pageBoundingBox", new_val);
-
-    bool old_textToPath      = ext->get_param_bool("textToPath");
-    new_val                  = mod->get_param_bool("textToPath");
-    ext->set_param_bool("textToPath", new_val);
-
-    bool old_fontEmbedded    = ext->get_param_bool("fontEmbedded");
-    new_val                  = mod->get_param_bool("fontEmbedded");
-    ext->set_param_bool("fontEmbedded", new_val);
-
-    final_name = g_strdup_printf("> %s", uri);
-    sp_print_document_to_file(doc, final_name);
-    g_free(final_name);
-
-    ext->set_param_bool("pageBoundingBox", old_pageBoundingBox);
-    ext->set_param_bool("textToPath", old_textToPath);
-    ext->set_param_bool("fontEmbedded", old_fontEmbedded);
-
-    return;
-}
-
-#include "clear-n_.h"
-
-/**
-    \brief   A function allocate a copy of this function.
-
-    This is the definition of postscript out.  This function just
-    calls the extension system with the memory allocated XML that
-    describes the data.
-*/
-void
-EpsOutput::init (void)
-{
-    Inkscape::Extension::build_from_mem(
-        "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n"
-            "<name>" N_("Encapsulated Postscript Output") "</name>\n"
-            "<id>org.inkscape.output.eps</id>\n"
-            "<param name=\"pageBoundingBox\" type=\"boolean\" gui-text=\"" N_("Make bounding box around full page") "\">false</param>\n"
-            "<param name=\"textToPath\" type=\"boolean\" gui-text=\"" N_("Convert texts to paths") "\">true</param>\n"
-            "<param name=\"fontEmbedded\" type=\"boolean\" gui-text=\"" N_("Embed fonts (Type 1 only)") "\">false</param>\n"
-            "<output>\n"
-                "<extension>.eps</extension>\n"
-                "<mimetype>image/x-eps</mimetype>\n"
-                "<filetypename>" N_("Encapsulated Postscript (*.eps)") "</filetypename>\n"
-                "<filetypetooltip>" N_("Encapsulated Postscript File") "</filetypetooltip>\n"
-            "</output>\n"
-        "</inkscape-extension>", new EpsOutput());
-
-    return;
-}
-
-} } }  /* namespace Inkscape, Extension, Implementation */
-
-/*
-  Local Variables:
-  mode:c++
-  c-file-style:"stroustrup"
-  c-file-offsets:((innamespace . 0)(inline-open . 0))
-  indent-tabs-mode:nil
-  fill-column:99
-  End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
diff --git a/src/extension/internal/eps-out.h b/src/extension/internal/eps-out.h
deleted file mode 100644 (file)
index 41a6c1f..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *
- * Authors:
- *   Ted Gould <ted@gould.cx>
- *
- * Copyright (C) 2004 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifndef EXTENSION_INTERNAL_EPS_OUT_H
-#define EXTENSION_INTERNAL_EPS_OUT_H
-
-#include <gtk/gtkdialog.h>
-#include <gtk/gtkwidget.h>
-
-#include "extension/implementation/implementation.h"
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-class EpsOutput : Inkscape::Extension::Implementation::Implementation {
-public:
-    bool check(Inkscape::Extension::Extension *module);
-
-    void save(Inkscape::Extension::Output *mod,
-              SPDocument *doc,
-              gchar const *uri);
-
-    static void init(void);
-};
-
-} } }  /* namespace Inkscape, Extension, Implementation */
-
-#endif /* EXTENSION_INTERNAL_EPS_OUT_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 :
index e0785df30f561972b463a4835f77f2bc310a6f3a..4a02086e22fc0ba4e8ca02e1f7ceb0ded1f2c761 100644 (file)
@@ -41,7 +41,9 @@ public:
                                "<effect>\n"
                                        "<object-type>all</object-type>\n"
                                        "<effects-menu>\n"
-                                               "<submenu name=\"" N_("Filter") "\" />\n"
+                                               "<submenu name=\"" N_("Filters") "\" >\n"
+                                               "<submenu name=\"Shadows and Glows\"/>\n"
+                             "</submenu>\n"
                                        "</effects-menu>\n"
                                        "<menu-tip>" N_("Black, blurred drop shadow") "</menu-tip>\n"
                                "</effect>\n"
@@ -61,7 +63,7 @@ DropShadow::get_filter_text (Inkscape::Extension::Extension * ext)
        float y = ext->get_param_float("yoffset");
 
        _filter = g_strdup_printf(
-               "<filter>\n"
+               "<filter width=\"1.5\" height=\"1.5\" x=\"-.25\" y=\"-.25\">\n"
                        "<feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"%f\" result=\"blur\"/>\n"
                         "<feColorMatrix result=\"bluralpha\" type=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 %f 0 \" />\n"
                        "<feOffset in=\"bluralpha\" dx=\"%f\" dy=\"%f\" result=\"offsetBlur\"/>\n"
@@ -74,6 +76,61 @@ DropShadow::get_filter_text (Inkscape::Extension::Extension * ext)
        return _filter;
 };
 
+class DropGlow : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+       virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+       DropGlow ( ) : Filter() { };
+       virtual ~DropGlow ( ) { if (_filter != NULL) g_free((void *)_filter); return; }
+
+       static void init (void) {
+               Inkscape::Extension::build_from_mem(
+                       "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n"
+                               "<name>" N_("Drop Glow") "</name>\n"
+                               "<id>org.inkscape.effect.filter.drop-glow</id>\n"
+                               "<param name=\"blur\" gui-text=\"" N_("Blur radius, px") "\" type=\"float\" min=\"0.0\" max=\"200.0\">2.0</param>\n"
+                               "<param name=\"opacity\" gui-text=\"" N_("Opacity, %") "\" type=\"float\" min=\"0.0\" max=\"100.0\">50</param>\n"                               
+                               "<param name=\"xoffset\" gui-text=\"" N_("Horizontal offset, px") "\" type=\"float\" min=\"-50.0\" max=\"50.0\">4.0</param>\n"
+                               "<param name=\"yoffset\" gui-text=\"" N_("Vertical offset, px") "\" type=\"float\" min=\"-50.0\" max=\"50.0\">4.0</param>\n"
+                               "<effect>\n"
+                                       "<object-type>all</object-type>\n"
+                                       "<effects-menu>\n"
+                                               "<submenu name=\"" N_("Filters") "\">\n"
+                                               "<submenu name=\"Shadows and Glows\"/>\n"
+                             "</submenu>\n"
+                                       "</effects-menu>\n"
+                                       "<menu-tip>" N_("White, blurred drop glow") "</menu-tip>\n"
+                               "</effect>\n"
+                       "</inkscape-extension>\n", new DropGlow());
+       };
+
+};
+
+gchar const *
+DropGlow::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+       if (_filter != NULL) g_free((void *)_filter);
+
+       float blur = ext->get_param_float("blur");
+       float opacity = ext->get_param_float("opacity") / 100;
+       float x = ext->get_param_float("xoffset");
+       float y = ext->get_param_float("yoffset");
+
+       _filter = g_strdup_printf(
+               "<filter width=\"1.5\" height=\"1.5\" x=\"-.25\" y=\"-.25\">\n"
+                       "<feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"%f\" result=\"blur\"/>\n"
+                        "<feColorMatrix result=\"bluralpha\" type=\"matrix\" values=\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 %f 0 \" />\n"
+                       "<feOffset in=\"bluralpha\" dx=\"%f\" dy=\"%f\" result=\"offsetBlur\"/>\n"
+                       "<feMerge>\n"
+                               "<feMergeNode in=\"offsetBlur\"/>\n"
+                               "<feMergeNode in=\"SourceGraphic\"/>\n"
+                       "</feMerge>\n"
+               "</filter>\n", blur, opacity, x, y);
+
+       return _filter;
+};
+
 }; /* namespace Filter */
 }; /* namespace Internal */
 }; /* namespace Extension */
index 6f0208a0bfa0f33081fe8d2511797c116774aa02..b4b8caf81d3d67a8c4e3bd80b621aa7aad9a9bb1 100644 (file)
@@ -8,34 +8,8 @@
 #include "filter.h"
 
 /* Put your filter here */
-#include "apparition.h"
-#include "bloom.h"
-#include "clouds.h"
-#include "crystal.h"
-#include "cutout.h"
 #include "drop-shadow.h"
-#include "emboss.h"
-#include "etched-glass.h"
-#include "fire.h"
-#include "frost.h"
-#include "ink-bleed.h"
-#include "jelly-bean.h"
-#include "jigsaw-piece.h"
-#include "leopard-fur.h"
-#include "melt.h"
-#include "metal.h"
-#include "motion-blur.h"
-#include "oil-slick.h"
-#include "patterned-glass.h"
-#include "ridged-border.h"
-#include "ripple.h"
-#include "roughen.h"
-#include "rubber-stamp.h"
-#include "sepia.h"
 #include "snow.h"
-#include "speckle.h"
-#include "zebra.h"
-
 
 namespace Inkscape {
 namespace Extension {
@@ -46,35 +20,13 @@ namespace Filter {
 void
 Filter::filters_all (void )
 {
-       Apparition::init();
-       Bloom::init();
-       Clouds::init();
-       Crystal::init();
-       Cutout::init();
+       // Here come the filters which are coded in C++ in order to present a parameters dialog
        DropShadow::init();
-       Emboss::init();
-       EtchedGlass::init();
-       Fire::init();
-       Frost::init();
-       InkBleed::init();
-       JellyBean::init();
-       JigsawPiece::init();
-       LeopardFur::init();
-       Melt::init();
-       Metal::init();
-       MotionBlur::init();
-       OilSlick::init();
-       PatternedGlass::init();
-       RidgedBorder::init();
-       Ripple::init();
-       Roughen::init();
-       RubberStamp::init();
-       Sepia::init();
+       DropGlow::init();
        Snow::init();
-       Speckle::init();
-       Zebra::init();
-
 
+       // Here come the rest of the filters that are read from SVG files in share/filters and
+       // .config/Inkscape/filters
        /* This should always be last, don't put stuff below this
         * line. */
        Filter::filters_all_files();
index 857c01a1c47bd1b77b3468cd8fbc5d5f58ebba3c..7cb671f51c67722ae8861f6507cc78276f5bbf0e 100644 (file)
@@ -130,6 +130,8 @@ void
 Filter::filters_load_node (Inkscape::XML::Node * node, gchar * menuname)
 {
        gchar const * label = node->attribute("inkscape:label");
+       gchar const * menu = node->attribute("inkscape:menu");
+       gchar const * menu_tooltip = node->attribute("inkscape:menu-tooltip");
        gchar const * id = node->attribute("id");
 
        if (label == NULL) {
@@ -143,12 +145,18 @@ Filter::filters_load_node (Inkscape::XML::Node * node, gchar * menuname)
             "<effect>\n"
                 "<object-type>all</object-type>\n"
                 "<effects-menu>\n"
-                    "<submenu name=\"" N_("Filter") "\">\n"
-                                               "<submenu name=\"%s\"/>\n"
-                                       "</submenu>\n"
+                    "<submenu name=\"" N_("Filters") "\">\n"
+                                                       "<submenu name=\"%s\"/>\n"
+                                             "</submenu>\n"
                 "</effects-menu>\n"
+                "<menu-tip>%s</menu-tip>\n"
             "</effect>\n"
-        "</inkscape-extension>\n", label, id, menuname);
+        "</inkscape-extension>\n", label, id, menu? menu : menuname, menu_tooltip? menu_tooltip : label);
+
+       // FIXME: Bad hack: since we pull out a single filter node out of SVG file and
+       // serialize it, it loses the namespace declarations from the root, so we must provide
+       // one right here for our inkscape attributes
+       node->setAttribute("xmlns:inkscape", SP_INKSCAPE_NS_URI);
 
        mywriter writer;
        sp_repr_write_stream(node, writer, 0, FALSE, g_quark_from_static_string("svg"), 0, 0);
index 1ba0ce8cac6379485f4d54bc923ed5a3c6e3c389..5a104b6a1c17de97c5b90503bb9bd2bde822747d 100644 (file)
@@ -109,8 +109,6 @@ Filter::merge_filters (Inkscape::XML::Node * to, Inkscape::XML::Node * from, Ink
                }
     Inkscape::GC::release(to_child);
        }
-
-       return;
 }
 
 #define FILTER_SRC_GRAPHIC       "fbSourceGraphic"
@@ -139,8 +137,10 @@ Filter::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View *d
                gchar const * filter = sp_repr_css_property(css, "filter", NULL);
 
                if (filter == NULL) {
+
                        Inkscape::XML::Node * newfilterroot = xmldoc->createElement("svg:filter");
                        defsrepr->appendChild(newfilterroot);
+
                        Glib::ustring url = "url(#"; url += newfilterroot->attribute("id"); url += ")";
 
                        merge_filters(newfilterroot, get_filter(module)->root(), xmldoc);
@@ -189,7 +189,7 @@ Filter::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View *d
 #include "extension/internal/clear-n_.h"
 
 void
-Filter::filter_init (gchar const * id, gchar const * name, gchar const * tip, gchar const * filter)
+Filter::filter_init (gchar const * id, gchar const * name, gchar const * submenu, gchar const * tip, gchar const * filter)
 {
        gchar * xml_str = g_strdup_printf(
         "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n"
@@ -198,11 +198,12 @@ Filter::filter_init (gchar const * id, gchar const * name, gchar const * tip, gc
             "<effect>\n"
                 "<object-type>all</object-type>\n"
                 "<effects-menu>\n"
-                    "<submenu name=\"" N_("Filter") "\" />\n"
+                    "<submenu name=\"" N_("Filters") "\" />\n"
+                                                       "<submenu name=\"%s\"/>\n"
                 "</effects-menu>\n"
                 "<menu-tip>%s</menu-tip>\n"
             "</effect>\n"
-        "</inkscape-extension>\n", name, id, tip);
+        "</inkscape-extension>\n", name, id, submenu, tip);
     Inkscape::Extension::build_from_mem(xml_str, new Filter::Filter(filter));
        g_free(xml_str);
     return;
index 05fdcc4cdf1510fdca93c58a6309fc9d7c4dcaf5..fe6b678d9ac1ea257ce312695ec1137eb6ef3b87 100644 (file)
@@ -36,7 +36,7 @@ public:
        Inkscape::Extension::Implementation::ImplementationDocumentCache * newDocCache (Inkscape::Extension::Extension * ext, Inkscape::UI::View::View * doc);
        void effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::View *document, Inkscape::Extension::Implementation::ImplementationDocumentCache * docCache);
 
-       static void filter_init(gchar const * id, gchar const * name, gchar const * tip, gchar const * filter);
+       static void filter_init(gchar const * id, gchar const * name, gchar const * submenu, gchar const * tip, gchar const * filter);
        static void filters_all(void);
 
        /* File loader related */
index 366bdcf1f007c432239123e5ba79325c04c69625..cf506575422ae4d201983d87a3912c3e6f1145a7 100644 (file)
@@ -35,9 +35,11 @@ public:
                                "<effect>\n"
                                        "<object-type>all</object-type>\n"
                                        "<effects-menu>\n"
-                                               "<submenu name=\"" N_("Filter") "\" />\n"
+                                               "<submenu name=\"" N_("Filters") "\">\n"
+                                               "<submenu name=\"Shadows and Glows\"/>\n"
+                             "</submenu>\n"
                                        "</effects-menu>\n"
-                                       "<menu-tip>" N_("When the weather outside is frightening...") "</menu-tip>\n"
+                                       "<menu-tip>" N_("Snow has fallen on object") "</menu-tip>\n"
                                "</effect>\n"
                        "</inkscape-extension>\n", new Snow());
        };
index 366bab0006fec8dcf59c3157eccf884a11ebd0ff..d4b35b261baec5cb49bb89bbdac225bb8bd07179 100644 (file)
@@ -85,7 +85,7 @@ Grid::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View *doc
         bounding_area = Geom::Rect(  Geom::Point(0,0),
                                      Geom::Point(sp_document_width(doc), sp_document_height(doc))  );
     } else {
-        boost::optional<Geom::Rect> bounds = selection->bounds();
+        Geom::OptRect bounds = selection->bounds();
         if (bounds) {
             bounding_area = *bounds;
         }
index 967ddd92d72a57fd541a29b13b08a42ae31f390e..69ee296e58a0a73c80cdb8833d236b6bf42d5cc9 100644 (file)
@@ -187,6 +187,16 @@ static JavaFXOutput::String getStrokeLineJoin(unsigned value) {
 }\r
 \r
 \r
+/**\r
+ * Replace illegal characters for JavaFX for a underscore.\r
+ */\r
+static JavaFXOutput::String sanatize(const JavaFXOutput::String &badstr){\r
+    JavaFXOutput::String good(badstr);\r
+    for (int pos = 0; pos < badstr.length(); ++pos )\r
+        if((badstr.at(pos)=='-')||(badstr.at(pos)==' '))\r
+            good.replace(pos, 1, "_");\r
+    return good;\r
+}\r
 \r
 /**\r
  *  Output data to the buffer, printf()-style\r
@@ -298,11 +308,13 @@ bool JavaFXOutput::doTail()
  */\r
 bool JavaFXOutput::doGradient(SPGradient *grad, const String &id)\r
 {\r
+    String jfxid = sanatize(id);\r
+\r
     if (SP_IS_LINEARGRADIENT(grad))\r
         {\r
         SPLinearGradient *g = SP_LINEARGRADIENT(grad);\r
-        out("    /* create LinearGradient for %s */\n", id.c_str());\r
-        out("    private function %s(): LinearGradient {\n",  id.c_str());\r
+        out("    /* create LinearGradient for %s */\n", jfxid.c_str());\r
+        out("    private function %s(): LinearGradient {\n",  jfxid.c_str());\r
         out("        LinearGradient {\n");\r
         std::vector<SPGradientStop> stops = g->vector.stops;\r
         if (stops.size() > 0)\r
@@ -320,14 +332,14 @@ bool JavaFXOutput::doGradient(SPGradient *grad, const String &id)
             out("            ]\n");\r
             }\r
         out("        };\n");\r
-        out("    } // end LinearGradient: %s\n", id.c_str());\r
+        out("    } // end LinearGradient: %s\n", jfxid.c_str());\r
         out("\n\n");\r
         }\r
     else if (SP_IS_RADIALGRADIENT(grad))\r
         {\r
         SPRadialGradient *g = SP_RADIALGRADIENT(grad);\r
-        out("    /* create RadialGradient for %s */\n", id.c_str());\r
-        out("    private function %s() {\n", id.c_str());\r
+        out("    /* create RadialGradient for %s */\n", jfxid.c_str());\r
+        out("    private function %s() {\n", jfxid.c_str());\r
         out("        RadialGradient {\n");\r
         out("            centerX: %s\n", DSTR(g->cx.value));\r
         out("            centerY: %s\n", DSTR(g->cy.value));\r
@@ -350,12 +362,12 @@ bool JavaFXOutput::doGradient(SPGradient *grad, const String &id)
             out("            ]\n");\r
             }\r
         out("        };\n");\r
-        out("    } // end RadialGradient: %s\n", id.c_str());\r
+        out("    } // end RadialGradient: %s\n", jfxid.c_str());\r
         out("\n\n");\r
         }\r
     else\r
         {\r
-        err("Unknown gradient type for '%s'\n", id.c_str());\r
+        err("Unknown gradient type for '%s'\n", jfxid.c_str());\r
         return false;\r
         }\r
 \r
@@ -392,7 +404,7 @@ bool JavaFXOutput::doStyle(SPStyle *style)
             /* trim the anchor '#' from the front */\r
             if (uri.size() > 0 && uri[0]=='#')\r
                 uri = uri.substr(1);\r
-            out("            fill: %s()\n", uri.c_str());\r
+            out("            fill: %s()\n", sanatize(uri).c_str());\r
         }\r
     }\r
 \r
@@ -456,6 +468,8 @@ bool JavaFXOutput::doCurve(SPItem *item, const String &id)
     using Geom::X;\r
     using Geom::Y;\r
 \r
+    String jfxid = sanatize(id);\r
+\r
     //### Get the Shape\r
     if (!SP_IS_SHAPE(item))//Bulia's suggestion.  Allow all shapes\r
         return true;\r
@@ -467,10 +481,10 @@ bool JavaFXOutput::doCurve(SPItem *item, const String &id)
 \r
     nrShapes++;\r
 \r
-    out("    /** path %s */\n", id.c_str());\r
-    out("    private function %s() : Path {\n",id.c_str());\r
+    out("    /** path %s */\n", jfxid.c_str());\r
+    out("    private function %s() : Path {\n",jfxid.c_str());\r
     out("        Path {\n");\r
-    out("            id: \"%s\"\n", id.c_str());\r
+    out("            id: \"%s\"\n", jfxid.c_str());\r
 \r
     /**\r
      * Output the style information\r
@@ -560,7 +574,7 @@ bool JavaFXOutput::doCurve(SPItem *item, const String &id)
 \r
     out("            ] // elements\n");\r
     out("        }; // Path\n");\r
-    out("    } // end path %s\n\n", id.c_str());\r
+    out("    } // end path %s\n\n", jfxid.c_str());\r
 \r
     double cminx = cminmax.min()[X];\r
     double cmaxx = cminmax.max()[X];\r
@@ -737,7 +751,8 @@ bool JavaFXOutput::doTree(SPDocument *doc)
 }\r
 \r
 \r
-bool JavaFXOutput::doBody(SPDocument *doc, SPObject *obj) {\r
+bool JavaFXOutput::doBody(SPDocument *doc, SPObject *obj)\r
+{\r
     /**\r
      * Check the type of node and process\r
      */\r
index 2e0082832fa0274075a06cf95dde3f8c5006c144..c15b839d795621897f42dc8f0457cba3b39ee990 100644 (file)
@@ -962,10 +962,10 @@ static Geom::Matrix getODFTransform(const SPItem *item)
  * Get the bounding box of an item, as mapped onto
  * an ODF document, in cm.
  */
-static boost::optional<Geom::Rect> getODFBoundingBox(const SPItem *item)
+static Geom::OptRect getODFBoundingBox(const SPItem *item)
 {
-    boost::optional<Geom::Rect> bbox_temp = sp_item_bbox_desktop((SPItem *)item);
-    boost::optional<Geom::Rect> bbox;
+    Geom::OptRect bbox_temp = sp_item_bbox_desktop((SPItem *)item);
+    Geom::OptRect bbox;
     if (bbox_temp) {
         bbox = *bbox_temp;
         double doc_height    = sp_document_height(SP_ACTIVE_DOCUMENT);
@@ -1866,7 +1866,7 @@ bool OdfOutput::writeTree(Writer &couts, Writer &souts,
     Geom::Matrix tf        = getODFTransform(item);
 
     //### Get ODF bounding box params for item
-    boost::optional<Geom::Rect> bbox = getODFBoundingBox(item);
+    Geom::OptRect bbox = getODFBoundingBox(item);
     if (!bbox) {
         return true;
     }
diff --git a/src/extension/internal/pdf-cairo.cpp b/src/extension/internal/pdf-cairo.cpp
deleted file mode 100644 (file)
index 6c2b2ed..0000000
+++ /dev/null
@@ -1,1060 +0,0 @@
-#define __SP_PDF_CAIRO_C__
-
-/** \file
- * PDF printing with Cairo.
- */
-/*
- * Authors:
- *   Miklós Erdélyi <erdelyim@gmail.com>
- *
- * Based on pdf.cpp
- *
- * Licensed under GNU GPL
- */
-
-/* Plain Print */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#ifdef HAVE_CAIRO_PDF
-
-#ifndef PANGO_ENABLE_BACKEND
-#define PANGO_ENABLE_BACKEND
-#endif
-
-#ifndef PANGO_ENABLE_ENGINE
-#define PANGO_ENABLE_ENGINE
-#endif
-
-
-#include <signal.h>
-#include <errno.h>
-
-#include <glib/gmem.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtkradiobutton.h>
-#include <gtk/gtkcombo.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtktooltips.h>
-
-#include <glibmm/i18n.h>
-#include "display/nr-arena-item.h"
-#include "display/canvas-bpath.h"
-#include "display/inkscape-cairo.h"
-#include "sp-item.h"
-#include "style.h"
-#include "sp-linear-gradient.h"
-#include "sp-radial-gradient.h"
-
-#include "libnrtype/font-instance.h"
-#include "libnrtype/font-style-to-pos.h"
-
-#include "libnr/nr-matrix.h"
-#include "libnr/nr-matrix-fns.h"
-#include "libnr/nr-matrix-ops.h"
-
-#include <unit-constants.h>
-
-#include "pdf-cairo.h"
-#include "extension/system.h"
-#include "extension/print.h"
-
-#include "io/sys.h"
-
-#include <cairo.h>
-#include <cairo-pdf.h>
-
-#include <pango/pango.h>
-#include <pango/pangofc-fontmap.h>
-
-#ifdef RENDER_WITH_PANGO_CAIRO
-#include <pango/pangocairo.h>
-#else
-#include <cairo-ft.h>
-#endif
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-static cairo_status_t _write_callback(void *closure, const unsigned char *data, unsigned int length);
-static void _concat_transform(cairo_t *cr, double xx, double yx, double xy, double yy, double x0, double y0);
-
-PrintCairoPDF::PrintCairoPDF() :
-    cr(NULL),
-    pdf_surface(NULL),
-    _layout(NULL),
-    _dpi(72),
-    _bitmap(false)
-{
-}
-
-PrintCairoPDF::~PrintCairoPDF(void)
-{
-    if (cr) cairo_destroy(cr);
-    if (pdf_surface) cairo_surface_destroy(pdf_surface);
-    if (_layout) g_object_unref(_layout);
-
-    /* restore default signal handling for SIGPIPE */
-#if !defined(_WIN32) && !defined(__WIN32__)
-    (void) signal(SIGPIPE, SIG_DFL);
-#endif
-
-    return;
-}
-
-unsigned int
-PrintCairoPDF::setup(Inkscape::Extension::Print * mod)
-{
-    static gchar const *const pdr[] = {"72", "75", "100", "144", "150", "200", "300", "360", "600", "1200", "2400", NULL};
-
-#ifdef TED
-    Inkscape::XML::Node *repr = ((SPModule *) mod)->repr;
-#endif
-
-    unsigned int ret = FALSE;
-
-    /* Create dialog */
-    GtkTooltips *tt = gtk_tooltips_new();
-    g_object_ref((GObject *) tt);
-    gtk_object_sink((GtkObject *) tt);
-
-    GtkWidget *dlg = gtk_dialog_new_with_buttons(_("Print Destination"),
-//            SP_DT_WIDGET(SP_ACTIVE_DESKTOP)->window,
-            NULL,
-            (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT),
-            GTK_STOCK_CANCEL,
-            GTK_RESPONSE_CANCEL,
-            GTK_STOCK_PRINT,
-            GTK_RESPONSE_OK,
-            NULL);
-
-    gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_OK);
-
-    GtkWidget *vbox = GTK_DIALOG(dlg)->vbox;
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
-    /* Print properties frame */
-    GtkWidget *f = gtk_frame_new(_("Print properties"));
-    gtk_box_pack_start(GTK_BOX(vbox), f, FALSE, FALSE, 4);
-    GtkWidget *vb = gtk_vbox_new(FALSE, 4);
-    gtk_container_add(GTK_CONTAINER(f), vb);
-    gtk_container_set_border_width(GTK_CONTAINER(vb), 4);
-    /* Print type */
-    bool const p2bm = mod->get_param_bool("bitmap");
-    GtkWidget *rb = gtk_radio_button_new_with_label(NULL, _("Print using PDF operators"));
-    gtk_tooltips_set_tip((GtkTooltips *) tt, rb,
-                         _("Use PDF vector operators. The resulting image is usually smaller "
-                           "in file size and can be arbitrarily scaled, but "
-                           "patterns will be lost."), NULL);
-    if (!p2bm) gtk_toggle_button_set_active((GtkToggleButton *) rb, TRUE);
-    gtk_box_pack_start(GTK_BOX(vb), rb, FALSE, FALSE, 0);
-    rb = gtk_radio_button_new_with_label(gtk_radio_button_get_group((GtkRadioButton *) rb), _("Print as bitmap"));
-    gtk_tooltips_set_tip((GtkTooltips *) tt, rb,
-                         _("Print 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."), NULL);
-    if (p2bm) gtk_toggle_button_set_active((GtkToggleButton *) rb, TRUE);
-    gtk_box_pack_start(GTK_BOX(vb), rb, FALSE, FALSE, 0);
-    /* Resolution */
-    GtkWidget *hb = gtk_hbox_new(FALSE, 4);
-    gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, 0);
-    GtkWidget *combo = gtk_combo_new();
-    gtk_combo_set_value_in_list(GTK_COMBO(combo), FALSE, FALSE);
-    gtk_combo_set_use_arrows(GTK_COMBO(combo), TRUE);
-    gtk_combo_set_use_arrows_always(GTK_COMBO(combo), TRUE);
-    gtk_widget_set_size_request(combo, 64, -1);
-    gtk_tooltips_set_tip((GtkTooltips *) tt, GTK_COMBO(combo)->entry,
-                         _("Preferred resolution (dots per inch) of bitmap"), NULL);
-    /* Setup strings */
-    GList *sl = NULL;
-    for (unsigned i = 0; pdr[i] != NULL; i++) {
-        sl = g_list_prepend(sl, (gpointer) pdr[i]);
-    }
-    sl = g_list_reverse(sl);
-    gtk_combo_set_popdown_strings(GTK_COMBO(combo), sl);
-    g_list_free(sl);
-    if (1) {
-        gchar const *val = mod->get_param_string("resolution");
-        gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), val);
-    }
-    gtk_box_pack_end(GTK_BOX(hb), combo, FALSE, FALSE, 0);
-    GtkWidget *l = gtk_label_new(_("Resolution:"));
-    gtk_box_pack_end(GTK_BOX(hb), l, FALSE, FALSE, 0);
-
-    /* Print destination frame */
-    f = gtk_frame_new(_("Print destination"));
-    gtk_box_pack_start(GTK_BOX(vbox), f, FALSE, FALSE, 4);
-    vb = gtk_vbox_new(FALSE, 4);
-    gtk_container_add(GTK_CONTAINER(f), vb);
-    gtk_container_set_border_width(GTK_CONTAINER(vb), 4);
-
-    l = gtk_label_new(_("Printer name (as given by lpstat -p);\n"
-                        "leave empty to use the system default printer.\n"
-                        "Use '> filename' to print to file.\n"
-                        "Use '| prog arg...' to pipe to a program."));
-    gtk_box_pack_start(GTK_BOX(vb), l, FALSE, FALSE, 0);
-
-    GtkWidget *e = gtk_entry_new();
-    if (1) {
-        gchar const *val = mod->get_param_string("destination");
-        gtk_entry_set_text(GTK_ENTRY(e), ( val != NULL
-                                           ? val
-                                           : "" ));
-    }
-    gtk_box_pack_start(GTK_BOX(vb), e, FALSE, FALSE, 0);
-
-    // pressing enter in the destination field is the same as clicking Print:
-    gtk_entry_set_activates_default(GTK_ENTRY(e), TRUE);
-
-    gtk_widget_show_all(vbox);
-
-    int const response = gtk_dialog_run(GTK_DIALOG(dlg));
-
-    g_object_unref((GObject *) tt);
-
-    if (response == GTK_RESPONSE_OK) {
-        gchar const *fn;
-        char const *sstr;
-
-        _bitmap = gtk_toggle_button_get_active((GtkToggleButton *) rb);
-        sstr = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
-        _dpi = (unsigned int) MAX((int)(atof(sstr)), 1);
-        /* Arrgh, have to do something */
-        fn = gtk_entry_get_text(GTK_ENTRY(e));
-        /* skip leading whitespace, bug #1068483 */
-        while (fn && *fn==' ') { fn++; }
-        /* g_print("Printing to %s\n", fn); */
-
-        mod->set_param_bool("bitmap", _bitmap);
-        mod->set_param_string("resolution", (gchar *)sstr);
-        mod->set_param_string("destination", (gchar *)fn);
-        ret = TRUE;
-    }
-
-    gtk_widget_destroy(dlg);
-
-    return ret;
-}
-
-unsigned int
-PrintCairoPDF::begin(Inkscape::Extension::Print *mod, SPDocument *doc)
-{
-    FILE *osf = NULL;
-    FILE *osp = NULL;
-
-    _alpha_stack.clear();
-    _alpha_stack.push_back(1.0);
-
-    gsize bytesRead = 0;
-    gsize bytesWritten = 0;
-    GError *error = NULL;
-    gchar const *utf8_fn = mod->get_param_string("destination");
-    gchar *local_fn = g_filename_from_utf8( utf8_fn,
-                                            -1,  &bytesRead,  &bytesWritten, &error);
-    gchar const *fn = local_fn;
-
-    /* TODO: Replace the below fprintf's with something that does the right thing whether in
-     * gui or batch mode (e.g. --print=blah).  Consider throwing an exception: currently one of
-     * the callers (sp_print_document_to_file, "ret = mod->begin(doc)") wrongly ignores the
-     * return code.
-     */
-    if (fn != NULL) {
-        if (*fn == '|') {
-            fn += 1;
-            while (isspace(*fn)) fn += 1;
-#ifndef WIN32
-            osp = popen(fn, "w");
-#else
-            osp = _popen(fn, "w");
-#endif
-            if (!osp) {
-                fprintf(stderr, "inkscape: popen(%s): %s\n",
-                        fn, strerror(errno));
-                return 0;
-            }
-            _stream = osp;
-        } else if (*fn == '>') {
-            fn += 1;
-            while (isspace(*fn)) fn += 1;
-            Inkscape::IO::dump_fopen_call(fn, "K");
-            osf = Inkscape::IO::fopen_utf8name(fn, "w+");
-            if (!osf) {
-                fprintf(stderr, "inkscape: fopen(%s): %s\n",
-                        fn, strerror(errno));
-                return 0;
-            }
-            _stream = osf;
-        } else {
-            /* put cwd stuff in here */
-            gchar *qn = ( *fn
-                          ? g_strdup_printf("lpr -P %s", fn)  /* FIXME: quote fn */
-                          : g_strdup("lpr") );
-#ifndef WIN32
-            osp = popen(qn, "w");
-#else
-            osp = _popen(qn, "w");
-#endif
-            if (!osp) {
-                fprintf(stderr, "inkscape: popen(%s): %s\n",
-                        qn, strerror(errno));
-                return 0;
-            }
-            g_free(qn);
-            _stream = osp;
-        }
-    }
-
-    g_free(local_fn);
-
-    if (_stream) {
-        /* fixme: this is kinda icky */
-#if !defined(_WIN32) && !defined(__WIN32__)
-        (void) signal(SIGPIPE, SIG_IGN);
-#endif
-    }
-
-    // test output stream?
-
-    // width and height in pt
-    _width = sp_document_width(doc) * PT_PER_PX;
-    _height = sp_document_height(doc) * PT_PER_PX;
-
-    NRRect d;
-    bool   pageBoundingBox = mod->get_param_bool("pageBoundingBox");
-    SPItem* doc_item = SP_ITEM(mod->base);
-    // printf("Page Bounding Box: %s\n", pageBoundingBox ? "TRUE" : "FALSE");
-    Geom::Matrix t (Geom::identity());
-    if (pageBoundingBox) {
-        d.x0 = d.y0 = 0;
-        d.x1 = _width;
-        d.y1 = _height;
-    } else {
-        // if not page, use our base, which is either root or the item we want to export
-        sp_item_invoke_bbox(doc_item, &d, sp_item_i2doc_affine (doc_item), TRUE);
-        // convert from px to pt
-        d.x0 *= PT_PER_PX;
-        d.x1 *= PT_PER_PX;
-        d.y0 *= PT_PER_PX;
-        d.y1 *= PT_PER_PX;
-    }
-
-    // When rendering a standalone object, we must set cairo's transform to the accumulated
-    // ancestor transform of that item - e.g. it may be rotated or skewed by its parent group, and
-    // we must reproduce that in the export even though we start traversing the tree from the
-    // object itself, ignoring its ancestors
-
-    // complete transform, including doc_item's own transform
-    t = sp_item_i2doc_affine (doc_item);
-    // subreact doc_item's transform (comes first) from it
-    t = Geom::Matrix(doc_item->transform).inverse() * t;
-
-    // create cairo context
-    pdf_surface = cairo_pdf_surface_create_for_stream(Inkscape::Extension::Internal::_write_callback, _stream, d.x1-d.x0, d.y1-d.y0);
-    cr = cairo_create(pdf_surface);
-
-    // move to the origin
-    cairo_translate (cr, -d.x0, -d.y0);
-
-    // set cairo transform;  we must scale the translation values to pt
-    _concat_transform (cr, t[0], t[1], t[2], t[3], t[4]*PT_PER_PX, t[5]*PT_PER_PX);
-
-    if (!_bitmap) {
-        cairo_scale(cr, PT_PER_PX, PT_PER_PX);
-
-        // from now on we can output px, but they will be treated as pt
-        // note that the we do not have to flip the y axis
-        // because Cairo's coordinate system is identical to Inkscape's
-    }
-
-    return 1;
-}
-
-unsigned int
-PrintCairoPDF::finish(Inkscape::Extension::Print *mod)
-{
-    if (!_stream) return 0;
-    if (_bitmap) return 0;
-
-    cairo_show_page(cr);
-
-    cairo_destroy(cr);
-    cairo_surface_finish(pdf_surface);
-    cairo_status_t status = cairo_surface_status(pdf_surface);
-    cairo_surface_destroy(pdf_surface);
-    cr = NULL;
-    pdf_surface = NULL;
-
-    /* Flush stream to be sure. */
-    (void) fflush(_stream);
-
-    /* fixme: should really use pclose for popen'd streams */
-    fclose(_stream);
-    _stream = 0;
-
-    if (status == CAIRO_STATUS_SUCCESS)
-        return true;
-    else
-        return false;
-}
-
-unsigned int
-PrintCairoPDF::bind(Inkscape::Extension::Print *mod, Geom::Matrix const *transform, float opacity)
-{
-    if (!_stream) return 0;  // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    if (opacity < 1.0) {
-        cairo_push_group(cr);
-    } else {
-        cairo_save(cr);
-    }
-    _concat_transform(cr, (*transform)[0], (*transform)[1], (*transform)[2], (*transform)[3], (*transform)[4], (*transform)[5]);
-    // printf("bind: (%f) %f %f %f %f %f %f\n", opacity, transform->c[0], transform->c[1], transform->c[2], transform->c[3], transform->c[4], transform->c[5]);
-    // remember these to be able to undo them when outputting text
-    _last_tx = (*transform)[4];
-    _last_ty = (*transform)[5];
-
-    _alpha_stack.push_back(opacity);
-
-    return 1;
-}
-
-unsigned int
-PrintCairoPDF::release(Inkscape::Extension::Print *mod)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    float opacity = _alpha_stack.back();
-
-    if (opacity < 1.0) {
-        cairo_pop_group_to_source(cr);
-        cairo_paint_with_alpha(cr, opacity);
-    } else {
-        cairo_restore(cr);
-    }
-//    g_printf("release\n");
-    _alpha_stack.pop_back();
-    g_assert(_alpha_stack.size() > 0);
-
-    return 1;
-}
-
-unsigned int
-PrintCairoPDF::comment(Inkscape::Extension::Print *mod, char const *comment)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    return 1;
-}
-
-cairo_pattern_t*
-PrintCairoPDF::create_pattern_for_paint(SPPaintServer const *const paintserver, NRRect const *pbox, float alpha)
-{
-    cairo_pattern_t *pattern = NULL;
-    bool apply_bbox2user = false;
-
-    if (SP_IS_LINEARGRADIENT (paintserver)) {
-
-            SPLinearGradient *lg=SP_LINEARGRADIENT(paintserver);
-
-            sp_gradient_ensure_vector(SP_GRADIENT(lg)); // when exporting from commandline, vector is not built
-
-            Geom::Point p1 (lg->x1.computed, lg->y1.computed);
-            Geom::Point p2 (lg->x2.computed, lg->y2.computed);
-            if (pbox && SP_GRADIENT(lg)->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
-                // convert to userspace
-                Geom::Matrix bbox2user(pbox->x1 - pbox->x0, 0, 0, pbox->y1 - pbox->y0, pbox->x0, pbox->y0);
-                p1 *= bbox2user;
-                p2 *= bbox2user;
-            }
-
-            // create linear gradient pattern
-            pattern = cairo_pattern_create_linear(p1[Geom::X], p1[Geom::Y], p2[Geom::X], p2[Geom::Y]);
-
-            // add stops
-            for (gint i = 0; unsigned(i) < lg->vector.stops.size(); i++) {
-                float rgb[3];
-                sp_color_get_rgb_floatv(&lg->vector.stops[i].color, rgb);
-                cairo_pattern_add_color_stop_rgba(pattern, lg->vector.stops[i].offset, rgb[0], rgb[1], rgb[2], lg->vector.stops[i].opacity * alpha);
-            }
-    } else if (SP_IS_RADIALGRADIENT (paintserver)) {
-
-        SPRadialGradient *rg=SP_RADIALGRADIENT(paintserver);
-
-        sp_gradient_ensure_vector(SP_GRADIENT(rg)); // when exporting from commandline, vector is not built
-
-        Geom::Point c (rg->cx.computed, rg->cy.computed);
-        Geom::Point f (rg->fx.computed, rg->fy.computed);
-        double r = rg->r.computed;
-
-        Geom::Coord const df = hypot(f[Geom::X] - c[Geom::X], f[Geom::Y] - c[Geom::Y]);
-        if (df >= r) {
-            f[Geom::X] = c[Geom::X] + (f[Geom::X] - c[Geom::X] ) * r / (float) df;
-            f[Geom::Y] = c[Geom::Y] + (f[Geom::Y] - c[Geom::Y] ) * r / (float) df;
-        }
-
-        if (pbox && SP_GRADIENT(rg)->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX)
-            apply_bbox2user = true;
-
-        // create radial gradient pattern
-        pattern = cairo_pattern_create_radial(f[Geom::X], f[Geom::Y], 0, c[Geom::X], c[Geom::Y], r);
-
-        // add stops
-        for (gint i = 0; unsigned(i) < rg->vector.stops.size(); i++) {
-            float rgb[3];
-            sp_color_get_rgb_floatv(&rg->vector.stops[i].color, rgb);
-            cairo_pattern_add_color_stop_rgba(pattern, rg->vector.stops[i].offset, rgb[0], rgb[1], rgb[2], rg->vector.stops[i].opacity * alpha);
-        }
-    }
-
-    if (pattern) {
-        SPGradient *g = SP_GRADIENT(paintserver);
-
-        // set extend type
-        SPGradientSpread spread = sp_gradient_get_spread(g);
-       switch (spread) {
-                       case SP_GRADIENT_SPREAD_REPEAT:
-                               cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
-                               break;
-                       case SP_GRADIENT_SPREAD_REFLECT:
-                               cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REFLECT);
-                               break;
-                       case SP_GRADIENT_SPREAD_PAD:
-            default:
-                               cairo_pattern_set_extend(pattern, CAIRO_EXTEND_PAD);
-                               break;
-               }
-
-        cairo_matrix_t pattern_matrix;
-        if (g->gradientTransform_set) {
-               // apply gradient transformation
-               cairo_matrix_init(&pattern_matrix,
-                   g->gradientTransform[0], g->gradientTransform[1],
-                   g->gradientTransform[2], g->gradientTransform[3],
-                   g->gradientTransform[4], g->gradientTransform[5]);
-        } else {
-            cairo_matrix_init_identity (&pattern_matrix);
-        }
-
-        if (apply_bbox2user) {
-            // convert to userspace
-            cairo_matrix_t bbox2user;
-            cairo_matrix_init (&bbox2user, pbox->x1 - pbox->x0, 0, 0, pbox->y1 - pbox->y0, pbox->x0, pbox->y0);
-            cairo_matrix_multiply (&pattern_matrix, &bbox2user, &pattern_matrix);
-        }
-        cairo_matrix_invert(&pattern_matrix);   // because Cairo expects a userspace->patternspace matrix
-        cairo_pattern_set_matrix(pattern, &pattern_matrix);
-    }
-
-    return pattern;
-}
-
-void
-PrintCairoPDF::print_fill_style(cairo_t *cr, SPStyle const *const style, NRRect const *pbox)
-{
-    g_return_if_fail( style->fill.isColor()
-                      || ( style->fill.isPaintserver()
-                           && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) ) );
-
-    if (style->fill.isColor()) {
-        float rgb[3];
-        sp_color_get_rgb_floatv(&style->fill.value.color, rgb);
-
-        float alpha = SP_SCALE24_TO_FLOAT(style->fill_opacity.value);
-
-        cairo_set_source_rgba(cr, rgb[0], rgb[1], rgb[2], alpha);
-    } else {
-        g_assert( style->fill.isPaintserver()
-                  && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) );
-
-        cairo_pattern_t *pattern = create_pattern_for_paint(SP_STYLE_FILL_SERVER(style), pbox, 1.0);
-
-        if (pattern) {
-               cairo_set_source(cr, pattern);
-            cairo_pattern_destroy(pattern);
-        }
-    }
-}
-
-unsigned int
-PrintCairoPDF::fill(Inkscape::Extension::Print *mod, Geom::PathVector const &pathv, Geom::Matrix const *ctm, SPStyle const *const style,
-              NRRect const *pbox, NRRect const *dbox, NRRect const *bbox)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    if ( style->fill.isColor()
-         || ( style->fill.isPaintserver()
-              && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) ) ) {
-
-        float alpha = SP_SCALE24_TO_FLOAT(style->fill_opacity.value);
-
-        cairo_save(cr);
-
-        print_fill_style(cr, style, pbox);
-
-        cairo_new_path(cr);
-        feed_pathvector_to_cairo(cr, pathv);
-
-        if (style->fill_rule.computed == SP_WIND_RULE_EVENODD) {
-            cairo_set_fill_rule(cr, CAIRO_FILL_RULE_EVEN_ODD);
-        } else {
-            cairo_set_fill_rule(cr, CAIRO_FILL_RULE_WINDING);
-        }
-        if (alpha != 1.0 &&
-            !style->fill.isColor()) {
-
-            cairo_clip (cr);
-            cairo_paint_with_alpha (cr, alpha);
-        } else {
-            cairo_fill(cr);
-        }
-
-        cairo_restore(cr);
-    }
-
-    return 0;
-}
-
-void
-PrintCairoPDF::print_stroke_style(cairo_t *cr, SPStyle const *style, NRRect const *pbox)
-{
-    float alpha = SP_SCALE24_TO_FLOAT(style->stroke_opacity.value);
-
-    if ( style->stroke.isColor() ) {
-        float rgb[3];
-        sp_color_get_rgb_floatv(&style->stroke.value.color, rgb);
-
-        cairo_set_source_rgba(cr, rgb[0], rgb[1], rgb[2], alpha);
-    } else if ( style->stroke.isPaintserver()
-                  && SP_IS_GRADIENT(SP_STYLE_STROKE_SERVER(style)) ) {
-
-        cairo_pattern_t *pattern = create_pattern_for_paint(SP_STYLE_STROKE_SERVER(style), pbox, alpha);
-
-        if (pattern) {
-               cairo_set_source(cr, pattern);
-            cairo_pattern_destroy(pattern);
-        }
-    }
-
-    if (style->stroke_dash.n_dash   &&
-        style->stroke_dash.dash       )
-    {
-        cairo_set_dash(cr, style->stroke_dash.dash, style->stroke_dash.n_dash, style->stroke_dash.offset);
-    } else {
-       cairo_set_dash(cr, NULL, 0, 0.0);       // disable dashing
-    }
-
-    cairo_set_line_width(cr, style->stroke_width.computed);
-
-    // set line join type
-    cairo_line_join_t join = CAIRO_LINE_JOIN_MITER;
-    switch (style->stroke_linejoin.computed) {
-       case SP_STROKE_LINEJOIN_MITER:
-           join = CAIRO_LINE_JOIN_MITER;
-           break;
-       case SP_STROKE_LINEJOIN_ROUND:
-           join = CAIRO_LINE_JOIN_ROUND;
-           break;
-       case SP_STROKE_LINEJOIN_BEVEL:
-           join = CAIRO_LINE_JOIN_BEVEL;
-           break;
-    }
-    cairo_set_line_join(cr, join);
-
-    // set line cap type
-    cairo_line_cap_t cap = CAIRO_LINE_CAP_BUTT;
-    switch (style->stroke_linecap.computed) {
-       case SP_STROKE_LINECAP_BUTT:
-           cap = CAIRO_LINE_CAP_BUTT;
-           break;
-       case SP_STROKE_LINECAP_ROUND:
-           cap = CAIRO_LINE_CAP_ROUND;
-           break;
-       case SP_STROKE_LINECAP_SQUARE:
-           cap = CAIRO_LINE_CAP_SQUARE;
-           break;
-    }
-    cairo_set_line_cap(cr, cap);
-    cairo_set_miter_limit(cr, MAX(1, style->stroke_miterlimit.value));
-}
-
-unsigned int
-PrintCairoPDF::stroke(Inkscape::Extension::Print *mod, Geom::PathVector const &pathv, Geom::Matrix const *ctm, SPStyle const *style,
-                NRRect const *pbox, NRRect const *dbox, NRRect const *bbox)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    if ( style->stroke.isColor() ||
-         ( style->stroke.isPaintserver()
-              && SP_IS_GRADIENT(SP_STYLE_STROKE_SERVER(style)) ) ) {
-
-        cairo_save(cr);
-
-        cairo_new_path(cr);
-        print_stroke_style(cr, style, pbox);
-
-        feed_pathvector_to_cairo(cr, pathv);
-        cairo_stroke(cr);
-
-        cairo_restore(cr);
-    }
-
-    return 0;
-}
-
-unsigned int
-PrintCairoPDF::image(Inkscape::Extension::Print *mod, guchar *px, unsigned int w, unsigned int h, unsigned int rs,
-               Geom::Matrix const *transform, SPStyle const *style)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    guchar* px_rgba = (guchar*)g_malloc(4 * w * h);
-    if (!px_rgba) return 0;
-
-    float alpha = _alpha_stack.back();
-
-    // make a copy of the original pixbuf with premultiplied alpha
-    // if we pass the original pixbuf it will get messed up
-    for (unsigned i = 0; i < h; i++) {
-       for (unsigned j = 0; j < w; j++) {
-            guchar const *src = px + i * rs + j * 4;
-            guint32 *dst = (guint32 *)(px_rgba + i * rs + j * 4);
-            guchar r, g, b, alpha_dst;
-
-            // calculate opacity-modified alpha
-            alpha_dst = src[3];
-            if (alpha != 1.0)
-                alpha_dst = (guchar)ceil((float)alpha_dst * alpha);
-
-            // premul alpha (needed because this will be undone by cairo-pdf)
-            r = src[0]*alpha_dst/255;
-            g = src[1]*alpha_dst/255;
-            b = src[2]*alpha_dst/255;
-
-            *dst = (((alpha_dst) << 24) | (((r)) << 16) | (((g)) << 8) | (b));
-       }
-    }
-
-    cairo_surface_t *image_surface = cairo_image_surface_create_for_data(px_rgba, CAIRO_FORMAT_ARGB32, w, h, w * 4);
-    if (cairo_surface_status(image_surface)) {
-        g_printf("Error: %s\n", cairo_status_to_string(cairo_surface_status(image_surface)));
-       return 0;
-    }
-
-    cairo_save(cr);
-
-       // scaling by width & height is not needed because it will be done by cairo-pdf
-       // we have to translate down by height also in order to eliminate the last translation done by sp_image_print
-    cairo_matrix_t matrix;
-    cairo_matrix_init(&matrix,
-                   (*transform)[0]/w, (*transform)[1],
-                   (*transform)[2], -(*transform)[3]/h,
-                   (*transform)[4], (*transform)[5] + (*transform)[3]);
-    cairo_transform(cr, &matrix);
-
-    cairo_pattern_t *pattern = cairo_pattern_create_for_surface(image_surface);
-    cairo_pattern_set_extend(pattern, CAIRO_EXTEND_NONE);
-
-    cairo_set_source(cr, pattern);
-    cairo_pattern_destroy(pattern);
-
-    // set clip region so that the pattern will not be repeated (bug in Cairo prior 1.2.1)
-    cairo_new_path(cr);
-    cairo_rectangle(cr, 0, 0, w, h);
-    cairo_clip(cr);
-
-    cairo_paint(cr);
-
-    cairo_restore(cr);
-
-    cairo_surface_destroy(image_surface);
-    g_free(px_rgba);
-
-    return 0;
-}
-
-#define GLYPH_ARRAY_SIZE 64
-
-#ifndef RENDER_WITH_PANGO_CAIRO
-
-Geom::Point
-PrintCairoPDF::draw_glyphs(cairo_t *cr, Geom::Point p, PangoFont *font, PangoGlyphString *glyph_string,
-               bool vertical, bool stroke)
-{
-    cairo_glyph_t glyph_array[GLYPH_ARRAY_SIZE];
-    cairo_glyph_t *glyphs = glyph_array;
-    if (glyph_string->num_glyphs > GLYPH_ARRAY_SIZE)
-        glyphs = (cairo_glyph_t*)g_malloc(sizeof(cairo_glyph_t) * glyph_string->num_glyphs);
-
-    PangoGlyphUnit x_offset = 0, y_offset = 0;
-    PangoGlyphInfo *info;
-    int num_invalid_glyphs = 0;
-    for (gint i = 0; i < glyph_string->num_glyphs; i++) {
-        info = &glyph_string->glyphs[i];
-        // skip glyphs which are PANGO_GLYPH_EMPTY (0x0FFFFFFF) or have
-        // the PANGO_GLYPH_UNKNOWN_FLAG (0x10000000) set
-        if (info->glyph == 0x0FFFFFFF || info->glyph & 0x10000000) {
-            num_invalid_glyphs++;
-            continue;
-        }
-
-        glyphs[i - num_invalid_glyphs].index = info->glyph;
-        glyphs[i - num_invalid_glyphs].x = p[Geom::X] + (x_offset + info->geometry.x_offset)/PANGO_SCALE;
-        glyphs[i - num_invalid_glyphs].y = p[Geom::Y] + (y_offset + info->geometry.y_offset)/PANGO_SCALE;
-
-        if (vertical) {
-            cairo_text_extents_t extents;
-            cairo_glyph_extents(cr, &glyphs[i - num_invalid_glyphs], 1, &extents);
-            y_offset += (PangoGlyphUnit)(extents.y_advance * PANGO_SCALE);
-        }
-        else
-            x_offset += info->geometry.width;
-    }
-
-    if (stroke)
-        cairo_glyph_path(cr, glyphs, glyph_string->num_glyphs - num_invalid_glyphs);
-    else
-        cairo_show_glyphs(cr, glyphs, glyph_string->num_glyphs - num_invalid_glyphs);
-
-    if (glyph_string->num_glyphs > GLYPH_ARRAY_SIZE)
-        g_free(glyphs);
-
-    return Geom::Point(x_offset, y_offset);
-}
-#endif
-
-
-
-unsigned int
-PrintCairoPDF::text(Inkscape::Extension::Print *mod, char const *text, Geom::Point p,
-              SPStyle const *const style)
-{
-    bool dirty_pattern = false;
-
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    cairo_save(cr);
-
-    // this needs to be there to encounter Cairo's userspace locking semantics for set_source
-    // otherwise gradients won't be shown correctly
-    // printf("\n _last_tx:%f _last_ty:%f", _last_tx, _last_ty);
-    cairo_translate(cr, -_last_tx, -_last_ty);
-
-    // create pango layout and context if needed
-    if (_layout == NULL) {
-#ifdef RENDER_WITH_PANGO_CAIRO
-        //_context = pango_cairo_font_map_create_context(PANGO_CAIRO_FONT_MAP(pango_cairo_font_map_get_default()));
-        _layout = pango_cairo_create_layout(cr);
-#else
-        _layout = pango_layout_new((font_factory::Default())->fontContext);
-#endif
-    }
-
-    // create font instance from style and use it
-    font_instance *tf = font_factory::Default()->FaceFromStyle(style);
-    if (tf == NULL) {   // do something
-        g_printf("Warning: trouble getting font_instance\n");
-        tf = (font_factory::Default())->Face("sans", font_style_to_pos(*style));
-    }
-    PangoFontDescription *adjusted = pango_font_description_copy(tf->descr);
-
-    pango_font_description_set_absolute_size(adjusted, (gint)(style->font_size.computed * PANGO_SCALE));
-    pango_layout_set_font_description(_layout, adjusted);
-    pango_layout_set_text(_layout, text, -1);
-
-    pango_font_description_free(adjusted);
-    tf->Unref();
-
-#ifdef RENDER_WITH_PANGO_CAIRO
-    pango_cairo_update_layout(cr, _layout);
-#else
-    pango_layout_context_changed(_layout);   // is this needed?
-#endif
-
-    PangoLayoutLine *line = pango_layout_get_line(_layout, 0);
-    if (line == NULL)
-        return 0;
-
-#ifndef RENDER_WITH_PANGO_CAIRO
-    // apply the selected font
-    double size;
-    PangoLayoutRun *first_run = (PangoLayoutRun *)line->runs->data;
-    PangoFcFont *fc_font = PANGO_FC_FONT(first_run->item->analysis.font);
-    FcPattern *fc_pattern = fc_font->font_pattern;
-
-    if ( style->writing_mode.set &&
-       (style->writing_mode.computed == SP_CSS_WRITING_MODE_TB_RL ||
-        style->writing_mode.computed == SP_CSS_WRITING_MODE_TB_LR) )
-    {
-        FcPatternDel(fc_pattern, FC_VERTICAL_LAYOUT);
-        FcPatternAddBool(fc_pattern, FC_VERTICAL_LAYOUT, FcTrue);
-        dirty_pattern = true;
-    }
-
-    cairo_font_face_t *font_face = cairo_ft_font_face_create_for_pattern(fc_pattern);
-    cairo_set_font_face(cr, font_face);
-
-    if (FcPatternGetDouble(fc_pattern, FC_PIXEL_SIZE, 0, &size) != FcResultMatch)
-        size = 12.0;
-
-    // adjust size and horizontal flip
-    cairo_matrix_t matrix;
-    cairo_get_font_matrix(cr, &matrix);
-    matrix.xx = size;
-    matrix.yy = -matrix.xx;
-    cairo_set_font_matrix(cr, &matrix);
-#endif
-
-    if ( style->fill.isColor()
-         || ( style->fill.isPaintserver()
-              && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) ) )
-    {
-        // set fill style
-        print_fill_style(cr, style, NULL);
-
-#ifndef RENDER_WITH_PANGO_CAIRO
-        Geom::Point cursor(_last_tx, _last_ty);
-        for (GSList *tmpList = line->runs; tmpList && tmpList->data; tmpList = tmpList->next) {
-            PangoLayoutRun *run = (PangoLayoutRun *)tmpList->data;
-            cursor += draw_glyphs(cr, cursor, run->item->analysis.font, run->glyphs, dirty_pattern, false) / PANGO_SCALE;
-        }
-#else
-        cairo_new_path(cr);
-        // as pango has inverted origin we simulate the moveto and apply the vertical flip
-        //cairo_move_to(cr, _last_tx, _last_ty);
-        cairo_translate(cr, _last_tx, _last_ty);
-        cairo_scale(cr, 1, -1);
-        cairo_move_to(cr, 0, 0);
-        pango_cairo_show_layout_line(cr, line);
-        cairo_scale(cr, 1, -1);
-        cairo_translate(cr, -_last_tx, -_last_ty);
-
-#endif
-    }
-
-    if (style->stroke.isColor()
-        || ( style->stroke.isPaintserver()
-              && SP_IS_GRADIENT(SP_STYLE_STROKE_SERVER(style)) ) )
-    {
-        // set stroke style
-        print_stroke_style(cr, style, NULL);
-
-        // paint stroke
-#ifndef RENDER_WITH_PANGO_CAIRO
-        Geom::Point cursor(_last_tx, _last_ty);
-        for (GSList *tmpList = line->runs; tmpList && tmpList->data; tmpList = tmpList->next) {
-            PangoLayoutRun *run = (PangoLayoutRun *)tmpList->data;
-            cursor += draw_glyphs(cr, cursor, run->item->analysis.font, run->glyphs, dirty_pattern, true) / PANGO_SCALE;
-        }
-#else
-        cairo_new_path(cr);
-        // as pango has inverted origin we simulate the moveto and apply the vertical flip
-        //cairo_move_to(cr, _last_tx, _last_ty);
-        cairo_translate(cr, _last_tx, _last_ty);
-        cairo_scale(cr, 1, -1);
-        cairo_move_to(cr, 0, 0);
-        pango_cairo_layout_line_path(cr, line);
-        cairo_scale(cr, 1, -1);
-        cairo_translate(cr, -_last_tx, -_last_ty);
-#endif
-        cairo_stroke(cr);
-    }
-
-
-    cairo_restore(cr);
-
-#ifndef RENDER_WITH_PANGO_CAIRO
-    cairo_font_face_destroy(font_face);
-
-    if (dirty_pattern) {
-        FcPatternDel(fc_pattern, FC_VERTICAL_LAYOUT);
-        FcPatternAddBool(fc_pattern, FC_VERTICAL_LAYOUT, FcFalse);
-    }
-#endif
-
-    return 0;
-}
-
-/* Helper functions */
-
-static void
-_concat_transform(cairo_t *cr, double xx, double yx, double xy, double yy, double x0, double y0)
-{
-    cairo_matrix_t matrix;
-
-    cairo_matrix_init(&matrix, xx, yx, xy, yy, x0, y0);
-    cairo_transform(cr, &matrix);
-}
-
-static cairo_status_t
-_write_callback(void *closure, const unsigned char *data, unsigned int length)
-{
-    size_t written;
-    FILE *file = (FILE*)closure;
-
-    written = fwrite (data, 1, length, file);
-
-    if (written == length)
-       return CAIRO_STATUS_SUCCESS;
-    else
-       return CAIRO_STATUS_WRITE_ERROR;
-}
-
-bool
-PrintCairoPDF::textToPath(Inkscape::Extension::Print * ext)
-{
-    return ext->get_param_bool("textToPath");
-}
-
-#include "clear-n_.h"
-
-void
-PrintCairoPDF::init(void)
-{
-    /* PDF out */
-    (void) Inkscape::Extension::build_from_mem(
-        "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n"
-        "<name>" N_("PDF Print") "</name>\n"
-        "<id>" SP_MODULE_KEY_PRINT_CAIRO_PDF "</id>\n"
-        "<param name=\"bitmap\" type=\"boolean\">false</param>\n"
-        "<param name=\"resolution\" type=\"string\">72</param>\n"
-        "<param name=\"destination\" type=\"string\">| lp</param>\n"
-        "<param name=\"pageBoundingBox\" type=\"boolean\">true</param>\n"
-        "<param name=\"textToPath\" type=\"boolean\">true</param>\n"
-        "<param name=\"exportDrawing\" type=\"boolean\">false</param>\n"
-        "<param name=\"exportCanvas\" type=\"boolean\">false</param>\n"
-        "<param name=\"exportId\" type=\"string\"></param>\n"
-        "<print/>\n"
-        "</inkscape-extension>", new PrintCairoPDF());
-}
-
-
-}  /* namespace Internal */
-}  /* namespace Extension */
-}  /* namespace Inkscape */
-
-/* End of GNU GPL code */
-
-#endif /* HAVE_CAIRO_PDF */
-
-
-/*
-  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/extension/internal/pdf-cairo.h b/src/extension/internal/pdf-cairo.h
deleted file mode 100644 (file)
index 2b81fa3..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-#ifndef EXTENSION_INTERNAL_PDF_CAIRO_H_SEEN
-#define EXTENSION_INTERNAL_PDF_CAIRO_H_SEEN
-
-/** \file
- * Declaration of PrintCairoPDF, the internal module used to do PDF printing with Cairo.
- */
-/*
- * Authors:
- *        Lauris Kaplinski <lauris@kaplinski.com>
- *        Ted Gould <ted@gould.cx>
- *
- * Lauris' original code is in the public domain.
- * Ted's changes are licensed under the GNU GPL.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#ifdef HAVE_CAIRO_PDF
-
-#include "extension/extension.h"
-#include "extension/implementation/implementation.h"
-#include <set>
-#include <string>
-
-#include "libnrtype/font-instance.h"
-
-#include "svg/stringstream.h"
-#include "sp-gradient.h"
-
-#include <cairo.h>
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-class PrintCairoPDF : public Inkscape::Extension::Implementation::Implementation {
-    float _width;
-    float _height;
-    FILE *_stream;
-    cairo_t *cr;
-    cairo_surface_t *pdf_surface;
-    PangoLayout *_layout;
-//    PangoContext *_context;
-    std::vector<float> _alpha_stack;
-    double _last_tx, _last_ty;
-    
-    unsigned short _dpi;
-    bool _bitmap;
-
-    cairo_pattern_t *create_pattern_for_paint(SPPaintServer const *const paintserver, NRRect const *pbox, float alpha);
-    
-    void print_fill_style(cairo_t *cr, SPStyle const *const style, NRRect const *pbox);
-    void print_stroke_style(cairo_t *cr, SPStyle const *style, NRRect const *pbox);
-
-#ifndef RENDER_WITH_PANGO_CAIRO
-    Geom::Point draw_glyphs(cairo_t *cr, Geom::Point p, PangoFont *font, PangoGlyphString *glyph_string,
-                          bool vertical, bool stroke);
-#endif
-
-public:
-    PrintCairoPDF(void);
-    virtual ~PrintCairoPDF(void);
-
-    /* Print functions */
-    virtual unsigned int setup(Inkscape::Extension::Print *module);
-    /*
-      virtual unsigned int set_preview(Inkscape::Extension::Print *module);
-    */
-
-    virtual unsigned int begin(Inkscape::Extension::Print *module, SPDocument *doc);
-    virtual unsigned int finish(Inkscape::Extension::Print *module);
-
-    /* Rendering methods */
-    virtual unsigned int bind(Inkscape::Extension::Print *module, Geom::Matrix const *transform, float opacity);
-    virtual unsigned int release(Inkscape::Extension::Print *module);
-    virtual unsigned int comment(Inkscape::Extension::Print *module, char const *comment);
-    virtual unsigned int fill(Inkscape::Extension::Print *module, Geom::PathVector const &pathv, Geom::Matrix const *ctm, SPStyle const *style,
-                              NRRect const *pbox, NRRect const *dbox, NRRect const *bbox);
-    virtual unsigned int stroke(Inkscape::Extension::Print *module, Geom::PathVector const &pathv, Geom::Matrix const *transform, SPStyle const *style,
-                                NRRect const *pbox, NRRect const *dbox, NRRect const *bbox);
-    virtual unsigned int image(Inkscape::Extension::Print *module, unsigned char *px, unsigned int w, unsigned int h, unsigned int rs,
-                               Geom::Matrix const *transform, SPStyle const *style);
-    virtual unsigned int text(Inkscape::Extension::Print *module, char const *text,
-                              Geom::Point p, SPStyle const *style);
-
-    bool textToPath(Inkscape::Extension::Print *ext);
-    static void init(void);
-};
-
-}  /* namespace Internal */
-}  /* namespace Extension */
-}  /* namespace Inkscape */
-
-#endif /* HAVE_CAIRO_PDF */
-
-#endif /* !EXTENSION_INTERNAL_PDF_CAIRO_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/extension/internal/ps-out.cpp b/src/extension/internal/ps-out.cpp
deleted file mode 100644 (file)
index ba93381..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * A quick hack to use the print output to write out a file.  This
- * then makes 'save as...' Postscript.
- *
- * Authors:
- *   Ted Gould <ted@gould.cx>
- *
- * Copyright (C) 2004 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#include "ps-out.h"
-#include <print.h>
-#include "extension/system.h"
-#include "extension/db.h"
-#include "extension/output.h"
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-bool
-PsOutput::check( Inkscape::Extension::Extension * /*module*/ )
-{
-    if (NULL == Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_PS))
-        return FALSE;
-
-    return TRUE;
-}
-
-/**
-    \brief  This function calls the print system with the filename
-       \param  mod   unused
-       \param  doc   Document to be saved
-    \param  uri   Filename to save to (probably will end in .ps)
-
-       The most interesting thing that this function does is just attach
-       an '>' on the front of the filename.  This is the syntax used to
-       tell the printing system to save to file.
-*/
-void
-PsOutput::save (Inkscape::Extension::Output *mod, SPDocument *doc, const gchar *uri)
-{
-    Inkscape::Extension::Extension * ext;
-
-    ext = Inkscape::Extension::db.get(SP_MODULE_KEY_PRINT_PS);
-    if (ext == NULL)
-        return;
-
-    bool old_textToPath  = ext->get_param_bool("textToPath");
-    bool new_val         = mod->get_param_bool("textToPath");
-    ext->set_param_bool("textToPath", new_val);
-
-       gchar * final_name;
-       final_name = g_strdup_printf("> %s", uri);
-       sp_print_document_to_file(doc, final_name);
-       g_free(final_name);
-
-    ext->set_param_bool("textToPath", old_textToPath);
-
-       return;
-}
-
-#include "clear-n_.h"
-
-/**
-       \brief   A function allocate a copy of this function.
-
-       This is the definition of postscript out.  This function just
-       calls the extension system with the memory allocated XML that
-       describes the data.
-*/
-void
-PsOutput::init (void)
-{
-       Inkscape::Extension::build_from_mem(
-               "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n"
-                       "<name>" N_("Postscript Output") "</name>\n"
-                       "<id>org.inkscape.output.ps</id>\n"
-                       "<param name=\"textToPath\" gui-text=\"" N_("Convert texts to paths") "\" type=\"boolean\">true</param>\n"
-                       "<param name=\"fontEmbedded\" gui-text=\"" N_("Embed fonts (Type 1 only)") "\" type=\"boolean\">false</param>\n"
-                       "<output>\n"
-                               "<extension>.ps</extension>\n"
-                               "<mimetype>image/x-postscript</mimetype>\n"
-                               "<filetypename>" N_("PostScript (old exporter via print) (*.ps)") "</filetypename>\n"
-                               "<filetypetooltip>" N_("PostScript File") "</filetypetooltip>\n"
-                       "</output>\n"
-               "</inkscape-extension>", new PsOutput());
-
-       return;
-}
-
-} } }  /* namespace Inkscape, Extension, Implementation */
diff --git a/src/extension/internal/ps-out.h b/src/extension/internal/ps-out.h
deleted file mode 100644 (file)
index 592f3d7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * A quick hack to use the print output to write out a file.  This
- * then makes 'save as...' Postscript.
- *
- * Authors:
- *   Ted Gould <ted@gould.cx>
- *
- * Copyright (C) 2004 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifndef EXTENSION_INTERNAL_PS_OUT_H
-#define EXTENSION_INTERNAL_PS_OUT_H
-
-#include "extension/implementation/implementation.h"
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-class PsOutput : Inkscape::Extension::Implementation::Implementation {
-
-public:
-    bool check(Inkscape::Extension::Extension *module);
-    void save(Inkscape::Extension::Output *mod,
-              SPDocument *doc,
-              gchar const *uri);
-    static void init();
-};
-
-} } }  /* namespace Inkscape, Extension, Implementation */
-
-#endif /* !EXTENSION_INTERNAL_PS_OUT_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/extension/internal/ps.cpp b/src/extension/internal/ps.cpp
deleted file mode 100644 (file)
index f8b3d99..0000000
+++ /dev/null
@@ -1,1797 +0,0 @@
-#define __SP_PS_C__
-
-/** \file
- * PostScript printing.
- */
-/*
- * Authors:
- *   Lauris Kaplinski <lauris@kaplinski.com>
- *   bulia byak <buliabyak@users.sf.net>
- *
- * Basic printing code, EXCEPT image and
- * ascii85 filter is in public domain
- *
- * Image printing and Ascii85 filter:
- *
- * Copyright (C) 2006 Johan Engelen
- * Copyright (C) 1997-98 Peter Kirchgessner
- * Copyright (C) 1995 Spencer Kimball and Peter Mattis
- * George White <aa056@chebucto.ns.ca>
- * Austin Donnelly <austin@gimp.org>
- *
- * Licensed under GNU GPL
- */
-
-/* Plain Print */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <signal.h>
-#include <errno.h>
-
-#include <libnr/nr-matrix-fns.h>
-
-#include <glib/gmem.h>
-#include <glib/gstrfuncs.h>
-#include <gtk/gtkstock.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtkframe.h>
-#include <gtk/gtkradiobutton.h>
-#include <gtk/gtkcombo.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtktooltips.h>
-
-#include <glibmm/i18n.h>
-#include "display/nr-arena-item.h"
-#include "display/canvas-bpath.h"
-#include "sp-item.h"
-#include "style.h"
-#include "sp-linear-gradient.h"
-#include "sp-radial-gradient.h"
-
-#include "libnrtype/font-instance.h"
-#include "libnrtype/font-style-to-pos.h"
-
-#include <unit-constants.h>
-
-#include "ps.h"
-#include "extension/system.h"
-#include "extension/print.h"
-
-#include "io/sys.h"
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_XFREE86_H
-#include <pango/pangoft2.h>
-#include <string>
-#include <iostream>
-#include <fstream>
-#include <cstring>
-#include <cstdio>
-#include <cstdlib>
-#include <cmath>
-
-#include <2geom/sbasis-to-bezier.h>
-#include <2geom/bezier-curve.h>
-#include <2geom/hvlinesegment.h>
-#include "helper/geom-curves.h"
-
-/*
-using std::atof;
-using std::ceil;
-using std::fclose;
-using std::ferror;
-using std::fflush;
-using std::fgetc;
-using std::fprintf;  --> this line will result  'std::libintl_fprintf' has not been declared
-using std::fputc;
-using std::fseek;
-using std::ifstream;
-using std::ios;
-using std::memset;
-using std::strchr;
-using std::strcmp;
-using std::strerror;
-using std::tmpfile;
-*/
-using namespace std;
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-PrintPS::PrintPS() :
-    _stream(NULL),
-    _dpi(72),
-    _bitmap(false)
-{
-    //map font types
-    _fontTypesMap["Type 1"] = FONT_TYPE1;
-    _fontTypesMap["TrueType"] = FONT_TRUETYPE;
-    //TODO: support other font types (cf. embed_font())
-}
-
-PrintPS::~PrintPS(void)
-{
-    /* fixme: should really use pclose for popen'd streams */
-    if (_stream) fclose(_stream);
-    if(_begin_stream) fclose(_begin_stream);
-    if(_fonts) g_tree_destroy(_fonts);
-
-    /* restore default signal handling for SIGPIPE */
-#if !defined(_WIN32) && !defined(__WIN32__)
-    (void) signal(SIGPIPE, SIG_DFL);
-#endif
-
-    return;
-}
-
-unsigned int
-PrintPS::setup(Inkscape::Extension::Print * mod)
-{
-    static gchar const *const pdr[] = {"72", "75", "100", "144", "150", "200", "300", "360", "600", "1200", "2400", NULL};
-
-#ifdef TED
-    Inkscape::XML::Node *repr = ((SPModule *) mod)->repr;
-#endif
-
-    unsigned int ret = FALSE;
-    gchar const *destination = mod->get_param_string("destination");
-
-    /* Create dialog */
-    GtkTooltips *tt = gtk_tooltips_new();
-    g_object_ref((GObject *) tt);
-    gtk_object_sink((GtkObject *) tt);
-
-    GtkWidget *dlg = gtk_dialog_new_with_buttons(
-            destination ?  _("Print Configuration") : _("Print Destination"),
-//            SP_DT_WIDGET(SP_ACTIVE_DESKTOP)->window,
-            NULL,
-            (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT),
-            GTK_STOCK_CANCEL,
-            GTK_RESPONSE_CANCEL,
-            destination ? GTK_STOCK_GO_FORWARD : GTK_STOCK_PRINT,
-            GTK_RESPONSE_OK,
-            NULL);
-
-    gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_OK);
-
-    GtkWidget *vbox = GTK_DIALOG(dlg)->vbox;
-    gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
-    /* Print properties frame */
-    GtkWidget *f = gtk_frame_new(_("Print properties"));
-    gtk_box_pack_start(GTK_BOX(vbox), f, FALSE, FALSE, 4);
-    GtkWidget *vb = gtk_vbox_new(FALSE, 4);
-    gtk_container_add(GTK_CONTAINER(f), vb);
-    gtk_container_set_border_width(GTK_CONTAINER(vb), 4);
-    /* Print type */
-    bool const p2bm = mod->get_param_bool("bitmap");
-    GtkWidget *rb = gtk_radio_button_new_with_label(NULL, _("Print using PostScript operators"));
-    gtk_tooltips_set_tip((GtkTooltips *) tt, rb,
-                         _("Use PostScript vector operators. The resulting image is usually smaller "
-                           "in file size and can be arbitrarily scaled, but alpha transparency "
-                           "and patterns will be lost."), NULL);
-    if (!p2bm) gtk_toggle_button_set_active((GtkToggleButton *) rb, TRUE);
-    gtk_box_pack_start(GTK_BOX(vb), rb, FALSE, FALSE, 0);
-    rb = gtk_radio_button_new_with_label(gtk_radio_button_get_group((GtkRadioButton *) rb), _("Print as bitmap"));
-    gtk_tooltips_set_tip((GtkTooltips *) tt, rb,
-                         _("Print 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."), NULL);
-    if (p2bm) gtk_toggle_button_set_active((GtkToggleButton *) rb, TRUE);
-    gtk_box_pack_start(GTK_BOX(vb), rb, FALSE, FALSE, 0);
-    /* Resolution */
-    GtkWidget *hb = gtk_hbox_new(FALSE, 4);
-    gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, 0);
-    GtkWidget *combo = gtk_combo_new();
-    gtk_combo_set_value_in_list(GTK_COMBO(combo), FALSE, FALSE);
-    gtk_combo_set_use_arrows(GTK_COMBO(combo), TRUE);
-    gtk_combo_set_use_arrows_always(GTK_COMBO(combo), TRUE);
-    gtk_widget_set_size_request(combo, 64, -1);
-    gtk_tooltips_set_tip((GtkTooltips *) tt, GTK_COMBO(combo)->entry,
-                         _("Preferred resolution (dots per inch) of bitmap"), NULL);
-    /* Setup strings */
-    GList *sl = NULL;
-    for (unsigned i = 0; pdr[i] != NULL; i++) {
-        sl = g_list_prepend(sl, (gpointer) pdr[i]);
-    }
-    sl = g_list_reverse(sl);
-    gtk_combo_set_popdown_strings(GTK_COMBO(combo), sl);
-    g_list_free(sl);
-    if (1) {
-        gchar const *val = mod->get_param_string("resolution");
-        gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), val);
-    }
-    gtk_box_pack_end(GTK_BOX(hb), combo, FALSE, FALSE, 0);
-    GtkWidget *l = gtk_label_new(_("Resolution:"));
-    gtk_box_pack_end(GTK_BOX(hb), l, FALSE, FALSE, 0);
-
-    GtkWidget *e = NULL;
-    /* if the destination isn't already set, we must prompt for it */
-    if (!destination) {
-        /* Print destination frame */
-        f = gtk_frame_new(_("Print destination"));
-        gtk_box_pack_start(GTK_BOX(vbox), f, FALSE, FALSE, 4);
-        vb = gtk_vbox_new(FALSE, 4);
-        gtk_container_add(GTK_CONTAINER(f), vb);
-        gtk_container_set_border_width(GTK_CONTAINER(vb), 4);
-
-        l = gtk_label_new(_("Printer name (as given by lpstat -p);\n"
-                            "leave empty to use the system default printer.\n"
-                            "Use '> filename' to print to file.\n"
-                        "Use '| prog arg...' to pipe to a program."));
-        gtk_box_pack_start(GTK_BOX(vb), l, FALSE, FALSE, 0);
-
-        e = gtk_entry_new();
-        gtk_entry_set_text(GTK_ENTRY(e), ( destination != NULL
-                                           ? destination
-                                           : "" ));
-        gtk_box_pack_start(GTK_BOX(vb), e, FALSE, FALSE, 0);
-
-        // pressing enter in the destination field is the same as clicking Print:
-        gtk_entry_set_activates_default(GTK_ENTRY(e), TRUE);
-    }
-
-    gtk_widget_show_all(vbox);
-
-    int const response = gtk_dialog_run(GTK_DIALOG(dlg));
-
-    g_object_unref((GObject *) tt);
-
-    if (response == GTK_RESPONSE_OK) {
-        gchar const *fn;
-        char const *sstr;
-
-        _bitmap = gtk_toggle_button_get_active((GtkToggleButton *) rb);
-        sstr = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry));
-        _dpi = (unsigned int) MAX((int)(atof(sstr)), 1);
-
-        /* if the destination was prompted for, record the new value */
-        if (e) {
-            /* Arrgh, have to do something */
-            fn = gtk_entry_get_text(GTK_ENTRY(e));
-            /* skip leading whitespace, bug #1068483 */
-            while (fn && *fn==' ') { fn++; }
-            /* g_print("Printing to %s\n", fn); */
-
-            mod->set_param_string("destination", (gchar *)fn);
-        }
-        mod->set_param_bool("bitmap", _bitmap);
-        mod->set_param_string("resolution", (gchar *)sstr);
-        ret = TRUE;
-    }
-
-    gtk_widget_destroy(dlg);
-
-    return ret;
-}
-
-unsigned int
-PrintPS::begin(Inkscape::Extension::Print *mod, SPDocument *doc)
-{
-    gboolean epsexport = false;
-
-
-    _latin1_encoded_fonts.clear();
-    _newlatin1font_proc_defined = false;
-
-    FILE *osf = NULL;
-    FILE *osp = NULL;
-    FILE *osf_tmp = NULL;
-
-    gsize bytesRead = 0;
-    gsize bytesWritten = 0;
-    GError *error = NULL;
-    //check whether fonts have to be embedded in the (EPS only) output
-    bool font_embedded = mod->fontEmbedded();
-    gchar const *utf8_fn = mod->get_param_string("destination");
-    gchar *local_fn = g_filename_from_utf8( utf8_fn,
-                                            -1,  &bytesRead,  &bytesWritten, &error);
-    gchar const *fn = local_fn;
-
-    /* TODO: Replace the below fprintf's with something that does the right thing whether in
-     * gui or batch mode (e.g. --print=blah).  Consider throwing an exception: currently one of
-     * the callers (sp_print_document_to_file, "ret = mod->begin(doc)") wrongly ignores the
-     * return code.
-     */
-    if (fn != NULL) {
-        if (*fn == '|') {
-            fn += 1;
-            while (g_ascii_isspace(*fn)) fn += 1;
-#ifndef WIN32
-            osp = popen(fn, "w");
-#else
-            osp = _popen(fn, "w");
-#endif
-            if (!osp) {
-                fprintf(stderr, "inkscape: popen(%s): %s\n",
-                        fn, strerror(errno));
-                return 0;
-            }
-            _stream = _begin_stream = osp;
-        } else if (*fn == '>') {
-            fn += 1;
-            epsexport = g_str_has_suffix(fn,".eps");
-            while (isspace(*fn)) fn += 1;
-            Inkscape::IO::dump_fopen_call(fn, "K");
-            osf = Inkscape::IO::fopen_utf8name(fn, "w+");
-            if (!osf) {
-                fprintf(stderr, "inkscape: fopen(%s): %s\n",
-                        fn, strerror(errno));
-                return 0;
-            }
-            _begin_stream = osf;
-             /* if font embedding is requested for EPS export...
-             * TODO:could be extended to PS export if texttopath=FALSE possible
-             */
-             if(font_embedded && epsexport)
-             {
-               /**
-               * Create temporary file where to print the main "script" part of the EPS document.
-               * Use an extra stream (_begin_stream) to print the prolog and document setup sections.
-               * Thus, once all the (main) script part printed, all the fonts used are known and can be embedded
-               * just after the prolog section, in a Begin(End)Setup section (document setup),
-               * one Begin(End)Resource (DSC comment) section for each font embedded.
-               * Then, append the final script part from the temporary file (_stream in this case).
-               * Reference: Adobe Technical note 5001, "PostScript Document Struturing Conventions Specifications"
-               * page 19
-               */
-               osf_tmp = tmpfile();
-               if(!osf_tmp)
-               {
-                 g_warning("Could not create a temporary file for font embedding. Font embedding canceled.");
-                 mod->set_param_bool("fontEmbedded", false);
-                 font_embedded = false;
-                 _stream = osf;
-               } else _stream = osf_tmp;
-             } else _stream = osf;
-        } else {
-            /* put cwd stuff in here */
-            gchar *qn = ( *fn
-                          ? g_strdup_printf("lpr -P %s", fn)  /* FIXME: quote fn */
-                          : g_strdup("lpr") );
-#ifndef WIN32
-            osp = popen(qn, "w");
-#else
-            osp = _popen(qn, "w");
-#endif
-            if (!osp) {
-                fprintf(stderr, "inkscape: popen(%s): %s\n",
-                        qn, strerror(errno));
-                return 0;
-            }
-            g_free(qn);
-            _stream = _begin_stream = osp;
-        }
-    }
-
-    g_free(local_fn);
-
-    if (_stream) {
-        /* fixme: this is kinda icky */
-#if !defined(_WIN32) && !defined(__WIN32__)
-        (void) signal(SIGPIPE, SIG_IGN);
-#endif
-    }
-
-    int const res = fprintf(_begin_stream, ( epsexport
-                                       ? "%%!PS-Adobe-3.0 EPSF-3.0\n"
-                                       : "%%!PS-Adobe-3.0\n" ));
-    /* flush this to test output stream as early as possible */
-    if (fflush(_begin_stream)) {
-        /*g_print("caught error in sp_module_print_plain_begin\n");*/
-        if (ferror(_begin_stream)) {
-            g_print("Error %d on output stream: %s\n", errno,
-                    g_strerror(errno));
-        }
-        g_print("Printing failed\n");
-        /* fixme: should use pclose() for pipes */
-        fclose(_begin_stream);
-        _begin_stream = NULL;
-        fflush(stdout);
-        return 0;
-    }
-    //TODO: do this same test on _stream
-
-    // width and height in pt
-    _width = sp_document_width(doc) * PT_PER_PX;
-    _height = sp_document_height(doc) * PT_PER_PX;
-
-    NRRect d;
-    bool   pageBoundingBox;
-    bool   pageLandscape;
-    pageBoundingBox = mod->get_param_bool("pageBoundingBox");
-    // printf("Page Bounding Box: %s\n", pageBoundingBox ? "TRUE" : "FALSE");
-    if (pageBoundingBox) {
-        d.x0 = d.y0 = 0;
-        d.x1 = ceil(_width);
-        d.y1 = ceil(_height);
-    } else {
-        SPItem* doc_item = SP_ITEM(sp_document_root(doc));
-        sp_item_invoke_bbox(doc_item, &d, sp_item_i2r_affine(doc_item), TRUE);
-        // convert from px to pt
-        d.x0 *= PT_PER_PX;
-        d.x1 *= PT_PER_PX;
-        d.y0 *= PT_PER_PX;
-        d.y1 *= PT_PER_PX;
-    }
-
-    Inkscape::SVGOStringStream os;
-    if (res >= 0) {
-
-        os << "%%Creator: " << PACKAGE_STRING << "\n";
-        // This will become problematic if inkscape gains the
-        // ability to handle multi paged documents. If this is
-        // the case the %%Orientation: comments should be
-        // renamed to %%PageOrientation: and moved to the
-        // respective pages.
-        os << "%%Pages: 1\n";
-
-        // 2004 Dec 10, BFC:
-        // The point of the following code is (1) to do the thing that's expected by users
-        // who have done File>New>A4_landscape or ...letter_landscape (i.e., rotate
-        // the output), while (2) not messing up users who simply want their output wider
-        // than it is tall (e.g., small figures for inclusion in LaTeX).
-        // The original patch by WQ only had the w>h condition.
-        {
-             double w = (d.x1 - d.x0); // width and height of bounding box, in pt
-             double h = (d.y1 - d.y0);
-             pageLandscape = (
-                 (w > 0. && h > 0.) // empty documents fail this sanity check, have w<0, h<0
-                 && (w > h)   // implies, but does not prove, the user wanted landscape
-                 && (w > 600) // approximate maximum printable width of an A4
-                 && (!epsexport) // eps should always be portrait
-             )
-             ? true : false;
-        }
-
-        if (pageLandscape) {
-            os << "%%Orientation: Landscape\n";
-            os << "%%BoundingBox: " << (int) (_height - d.y1) << " "
-               << (int) d.x0 << " "
-               << (int) ceil(_height - d.y0) << " "
-               << (int) ceil(d.x1) << "\n";
-            // According to Mike Sweet (the author of CUPS)
-            // HiResBoundingBox is only appropriate
-            // for EPS files. This means that we should
-            // distinguish if we export to ps or eps here.
-            // FIXME: I couldn't find HiResBoundingBox in the PS
-            // reference manual, so I guess we should skip
-            // it.
-            os << "%%HiResBoundingBox: " << (_height - d.y1) << " "
-               << d.x0 << " "
-               << (_height - d.y0) << " "
-               << d.x1 << "\n";
-            if (!epsexport) {
-                os << "%%DocumentMedia: plain "
-                   << (int) ceil(_height) << " "
-                   << (int) ceil(_width) << " "
-                   << "0 () ()\n";
-            }
-        } else {
-            os << "%%Orientation: Portrait\n";
-            os << "%%BoundingBox: " << (int) d.x0 << " "
-               << (int) d.y0 << " "
-               << (int) ceil(d.x1) << " "
-               << (int) ceil(d.y1) << "\n";
-            os << "%%HiResBoundingBox: " << d.x0 << " "
-               << d.y0 << " "
-               << d.x1 << " "
-               << d.y1 << "\n";
-            if (!epsexport) {
-                               os << "%%DocumentMedia: plain "
-                                  << (int) ceil(_width) << " "
-                  << (int) ceil(_height) << " "
-                  << "0 () ()\n";
-                       }
-        }
-
-        os << "%%EndComments\n";
-         /* If font embedding requested, begin document setup section where to include font resources */
-         if(font_embedded) os << "%%BeginSetup\n";/* Resume it later with Begin(End)Resource sections for font embedding. So, for now, we are done with the prolog/setup part. */
-         gint ret = fprintf(_begin_stream, "%s", os.str().c_str());
-         if(ret < 0) return ret;
-
-         /* Main Script part (after document setup) begins */
-         /* Empty os from all previous printing */
-         std::string clrstr = "";
-         os.str(clrstr);
-        // This will become problematic if we print multi paged documents:
-        os << "%%Page: 1 1\n";
-
-        if (pageLandscape) {
-            os << "90 rotate\n";
-            if (_bitmap) {
-                os << "0 " << (int) -ceil(_height) << " translate\n";
-            }
-        } else {
-            if (!_bitmap) {
-                os << "0 " << (int) ceil(_height) << " translate\n";
-            }
-        }
-
-        if (!_bitmap) {
-            os << PT_PER_PX << " " << -PT_PER_PX << " scale\n";
-            // from now on we can output px, but they will be treated as pt
-        }
-
-       /* As a new PS document is created, _fontlist has to be reinitialized (unref fonts from possible former PS docs) */
-        _fonts = g_tree_new_full((GCompareDataFunc)strcmp, NULL, (GDestroyNotify)g_free, (GDestroyNotify)g_free);
-    }
-
-    os << "0 0 0 setrgbcolor\n"
-       << "[] 0 setdash\n"
-       << "1 setlinewidth\n"
-       << "0 setlinejoin\n"
-       << "0 setlinecap\n";
-
-    /* FIXME: This function is declared to return unsigned, whereas fprintf returns a signed int *
-     * that can be zero if the first fprintf failed (os is empty) or "negative" (i.e. very positive
-     * in unsigned int interpretation) if the first fprintf failed but this one succeeds, or
-     * positive if both succeed. */
-    return fprintf(_stream, "%s", os.str().c_str());
-}
-
-unsigned int
-PrintPS::finish(Inkscape::Extension::Print *mod)
-{
-    if (!_stream) return 0;
-
-    if (_bitmap) {
-        double const dots_per_pt = _dpi / PT_PER_IN;
-
-        double const x0 = 0.0;
-        double const y0 = 0.0;
-        double const x1 = x0 + _width;
-        double const y1 = y0 + _height;
-
-        /* Bitmap width/height in bitmap dots. */
-        int const width = (int) (_width * dots_per_pt + 0.5);
-        int const height = (int) (_height * dots_per_pt + 0.5);
-
-        Geom::Matrix affine;
-        affine[0] = width / ((x1 - x0) * PX_PER_PT);
-        affine[1] = 0.0;
-        affine[2] = 0.0;
-        affine[3] = height / ((y1 - y0) * PX_PER_PT);
-        affine[4] = -affine[0] * x0;
-        affine[5] = -affine[3] * y0;
-
-        nr_arena_item_set_transform(mod->root, &affine);
-
-        guchar *const px = g_new(guchar, 4 * width * 64);
-
-        for (int y = 0; y < height; y += 64) {
-            /* Set area of interest. */
-            NRRectL bbox;
-            bbox.x0 = 0;
-            bbox.y0 = y;
-            bbox.x1 = width;
-            bbox.y1 = MIN(height, y + 64);
-
-            /* Update to renderable state. */
-            NRGC gc(NULL);
-            gc.transform.setIdentity();
-            nr_arena_item_invoke_update(mod->root, &bbox, &gc, NR_ARENA_ITEM_STATE_ALL, NR_ARENA_ITEM_STATE_NONE);
-            /* Render */
-            /* This should take guchar* instead of unsigned char*) */
-            NRPixBlock pb;
-            nr_pixblock_setup_extern(&pb, NR_PIXBLOCK_MODE_R8G8B8A8N,
-                                     bbox.x0, bbox.y0, bbox.x1, bbox.y1,
-                                     (guchar*)px, 4 * width, FALSE, FALSE);
-            memset(px, 0xff, 4 * width * 64);
-            nr_arena_item_invoke_render(NULL, mod->root, &bbox, &pb, 0);
-            /* Blitter goes here */
-            Geom::Matrix imgt;
-            imgt[0] = (bbox.x1 - bbox.x0) / dots_per_pt;
-            imgt[1] = 0.0;
-            imgt[2] = 0.0;
-            imgt[3] = (bbox.y1 - bbox.y0) / dots_per_pt;
-            imgt[4] = 0.0;
-            imgt[5] = _height - y / dots_per_pt - (bbox.y1 - bbox.y0) / dots_per_pt;
-
-            print_image(_stream, px, bbox.x1 - bbox.x0, bbox.y1 - bbox.y0, 4 * width, &imgt);
-        }
-
-        g_free(px);
-    }
-
-    fprintf(_stream, "showpage\n");
-    int const res = fprintf(_stream, "%%%%EOF\n");
-
-    /* Flush stream to be sure. */
-    (void) fflush(_stream);
-
-    char c;
-    /* If font embedding... */
-    if(mod->get_param_bool("fontEmbedded"))
-    {
-        /* Close the document setup section that had been started (because all the needed resources are supposed to be included now) */
-       /*res = */fprintf(_begin_stream, "%s", "%%EndSetup\n");
-       /* If font embedding requested, the following PS script part was printed to a different file from the prolog/setup, so script part (current _stream) needs to be copied to prolog/setup file to get the complete (E)PS document */
-       if(fseek(_stream, 0, SEEK_SET) == 0)
-       {
-           while((c = fgetc(_stream))!=EOF) fputc(c, _begin_stream);
-       }
-       fclose(_stream);
-       _stream = _begin_stream;
-    }
-
-    /* fixme: should really use pclose for popen'd streams */
-    fclose(_stream);
-    _stream = NULL;
-
-    _latin1_encoded_fonts.clear();
-
-    g_tree_destroy(_fonts);
-
-    return res;
-}
-
-unsigned int
-PrintPS::bind(Inkscape::Extension::Print */*mod*/, Geom::Matrix const *transform, float /*opacity*/)
-{
-    if (!_stream) return 0;  // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    Inkscape::SVGOStringStream os;
-    os << "gsave [" << (*transform)[0] << " "
-       << (*transform)[1] << " "
-       << (*transform)[2] << " "
-       << (*transform)[3] << " "
-       << (*transform)[4] << " "
-       << (*transform)[5] << "] concat\n";
-
-    return fprintf(_stream, "%s", os.str().c_str());
-}
-
-unsigned int
-PrintPS::release(Inkscape::Extension::Print */*mod*/)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    return fprintf(_stream, "grestore\n");
-}
-
-unsigned int
-PrintPS::comment(Inkscape::Extension::Print */*mod*/, char const *comment)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    return fprintf(_stream, "%%! %s\n",comment);
-}
-
-void
-PrintPS::print_fill_style(SVGOStringStream &os, SPStyle const *const style, NRRect const *pbox)
-{
-    g_return_if_fail( style->fill.isColor()
-                      || ( style->fill.isPaintserver()
-                           && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) ) );
-
-    if (style->fill.isColor()) {
-        float rgb[3];
-        sp_color_get_rgb_floatv(&style->fill.value.color, rgb);
-
-        os << rgb[0] << " " << rgb[1] << " " << rgb[2] << " setrgbcolor\n";
-
-    } else {
-        g_assert( style->fill.isPaintserver()
-                  && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) );
-
-        if (SP_IS_LINEARGRADIENT(SP_STYLE_FILL_SERVER(style))) {
-
-            SPLinearGradient *lg = SP_LINEARGRADIENT(SP_STYLE_FILL_SERVER(style));
-            Geom::Point p1 (lg->x1.computed, lg->y1.computed);
-            Geom::Point p2 (lg->x2.computed, lg->y2.computed);
-            if (pbox && SP_GRADIENT(lg)->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
-                // convert to userspace
-                Geom::Matrix bbox2user(pbox->x1 - pbox->x0, 0, 0, pbox->y1 - pbox->y0, pbox->x0, pbox->y0);
-                p1 *= bbox2user;
-                p2 *= bbox2user;
-            }
-
-            os << "<<\n/ShadingType 2\n/ColorSpace /DeviceRGB\n";
-            os << "/Coords [" << p1[Geom::X] << " " << p1[Geom::Y] << " " << p2[Geom::X] << " " << p2[Geom::Y] <<"]\n";
-            os << "/Extend [true true]\n";
-            os << "/Domain [0 1]\n";
-            os << "/Function <<\n/FunctionType 3\n/Functions\n[\n";
-
-            sp_gradient_ensure_vector(SP_GRADIENT(lg)); // when exporting from commandline, vector is not built
-            for (unsigned i = 0; i + 1 < lg->vector.stops.size(); i++) {
-                float rgb[3];
-                sp_color_get_rgb_floatv(&lg->vector.stops[i].color, rgb);
-                os << "<<\n/FunctionType 2\n/Domain [0 1]\n";
-                os << "/C0 [" << rgb[0] << " " << rgb[1] << " " << rgb[2] << "]\n";
-                sp_color_get_rgb_floatv(&lg->vector.stops[i+1].color, rgb);
-                os << "/C1 [" << rgb[0] << " " << rgb[1] << " " << rgb[2] << "]\n";
-                os << "/N 1\n>>\n";
-            }
-            os << "]\n/Domain [0 1]\n";
-            os << "/Bounds [ ";
-            for (unsigned i = 0; i + 2 < lg->vector.stops.size(); i++) {
-                os << lg->vector.stops[i+1].offset <<" ";
-            }
-            os << "]\n";
-            os << "/Encode [ ";
-            for (unsigned i = 0; i + 1 < lg->vector.stops.size(); i++) {
-                os << "0 1 ";
-            }
-            os << "]\n";
-            os << ">>\n>>\n";
-
-        } else if (SP_IS_RADIALGRADIENT(SP_STYLE_FILL_SERVER(style))) {
-
-            SPRadialGradient *rg = SP_RADIALGRADIENT(SP_STYLE_FILL_SERVER(style));
-            Geom::Point c(rg->cx.computed, rg->cy.computed);
-            Geom::Point f(rg->fx.computed, rg->fy.computed);
-            double r = rg->r.computed;
-            if (pbox && SP_GRADIENT(rg)->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
-                // convert to userspace
-                Geom::Matrix const bbox2user(pbox->x1 - pbox->x0, 0,
-                                           0, pbox->y1 - pbox->y0,
-                                           pbox->x0, pbox->y0);
-                c *= bbox2user;
-                f *= bbox2user;
-                r *= bbox2user.descrim();
-            }
-
-            os << "<<\n/ShadingType 3\n/ColorSpace /DeviceRGB\n";
-            os << "/Coords ["<< f[Geom::X] <<" "<< f[Geom::Y] <<" 0 "<< c[Geom::X] <<" "<< c[Geom::Y] <<" "<< r <<"]\n";
-            os << "/Extend [true true]\n";
-            os << "/Domain [0 1]\n";
-            os << "/Function <<\n/FunctionType 3\n/Functions\n[\n";
-
-            sp_gradient_ensure_vector(SP_GRADIENT(rg)); // when exporting from commandline, vector is not built
-            for (unsigned i = 0; i + 1 < rg->vector.stops.size(); i++) {
-                float rgb[3];
-                sp_color_get_rgb_floatv(&rg->vector.stops[i].color, rgb);
-                os << "<<\n/FunctionType 2\n/Domain [0 1]\n";
-                os << "/C0 [" << rgb[0] << " " << rgb[1] << " " << rgb[2] << "]\n";
-                sp_color_get_rgb_floatv(&rg->vector.stops[i+1].color, rgb);
-                os << "/C1 [" << rgb[0] << " " << rgb[1] << " " << rgb[2] << "]\n";
-                os << "/N 1\n>>\n";
-            }
-            os << "]\n/Domain [0 1]\n";
-            os << "/Bounds [ ";
-            for (unsigned i = 0; i + 2 < rg->vector.stops.size(); i++) {
-                os << rg->vector.stops[i+1].offset << " ";
-            }
-            os << "]\n";
-            os << "/Encode [ ";
-            for (unsigned i = 0; i + 1 < rg->vector.stops.size(); i++) {
-                os << "0 1 ";
-            }
-            os << "]\n";
-            os << ">>\n>>\n";
-        }
-    }
-}
-
-void
-PrintPS::print_stroke_style(SVGOStringStream &os, SPStyle const *style)
-{
-    float rgb[3];
-    sp_color_get_rgb_floatv(&style->stroke.value.color, rgb);
-
-    os << rgb[0] << " " << rgb[1] << " " << rgb[2] << " setrgbcolor\n";
-
-    // There are rare cases in which for a solid line stroke_dasharray_set is true. To avoid
-    // invalid PS-lines such as "[0.0000000 0.0000000] 0.0000000 setdash", which should be "[] 0 setdash",
-    // we first check if all components of stroke_dash.dash are 0.
-    bool LineSolid = true;
-    if (style->stroke_dash.n_dash   &&
-        style->stroke_dash.dash       )
-    {
-        int i = 0;
-        while (LineSolid && (i < style->stroke_dash.n_dash)) {
-                if (style->stroke_dash.dash[i] > 0.00000001)
-                    LineSolid = false;
-                i++;
-        }
-        if (!LineSolid) {
-            os << "[";
-            for (i = 0; i < style->stroke_dash.n_dash; i++) {
-                if (i > 0) {
-                    os << " ";
-                }
-                os << style->stroke_dash.dash[i];
-            }
-            os << "] " << style->stroke_dash.offset << " setdash\n";
-        } else {
-            os << "[] 0 setdash\n";
-        }
-    } else {
-        os << "[] 0 setdash\n";
-    }
-
-    os << style->stroke_width.computed << " setlinewidth\n";
-    os << style->stroke_linejoin.computed << " setlinejoin\n";
-    os << style->stroke_linecap.computed << " setlinecap\n";
-}
-
-
-unsigned int
-PrintPS::fill(Inkscape::Extension::Print *mod, Geom::PathVector const &pathv, Geom::Matrix const *ctm, SPStyle const *const style,
-              NRRect const *pbox, NRRect const *dbox, NRRect const *bbox)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    if ( style->fill.isColor()
-         || ( style->fill.isPaintserver()
-              && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) ) )
-    {
-        Inkscape::SVGOStringStream os;
-
-        os << "gsave\n";
-
-        print_fill_style(os, style, pbox);
-
-        print_pathvector(os, pathv);
-
-        if (style->fill_rule.computed == SP_WIND_RULE_EVENODD) {
-            if (style->fill.isColor()) {
-                os << "eofill\n";
-            } else {
-                g_assert( style->fill.isPaintserver()
-                          && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) );
-                SPGradient const *g = SP_GRADIENT(SP_STYLE_FILL_SERVER(style));
-                os << "eoclip\n";
-                if (g->gradientTransform_set) {
-                    os << "gsave [" << g->gradientTransform[0] << " " << g->gradientTransform[1]
-                        << " " << g->gradientTransform[2] << " " << g->gradientTransform[3]
-                        << " " << g->gradientTransform[4] << " " << g->gradientTransform[5] << "] concat\n";
-                }
-                os << "shfill\n";
-                if (g->gradientTransform_set) {
-                    os << "grestore\n";
-                }
-            }
-        } else {
-            if (style->fill.isColor()) {
-                os << "fill\n";
-            } else {
-                g_assert( style->fill.isPaintserver()
-                          && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) );
-                SPGradient const *g = SP_GRADIENT(SP_STYLE_FILL_SERVER(style));
-                os << "clip\n";
-                if (g->gradientTransform_set) {
-                    os << "gsave [" << g->gradientTransform[0] << " " << g->gradientTransform[1]
-                        << " " << g->gradientTransform[2] << " " << g->gradientTransform[3]
-                        << " " << g->gradientTransform[4] << " " << g->gradientTransform[5] << "] concat\n";
-                }
-                os << "shfill\n";
-                if (g->gradientTransform_set) {
-                    os << "grestore\n";
-                }
-            }
-        }
-
-        os << "grestore\n";
-
-        fprintf(_stream, "%s", os.str().c_str());
-    }
-
-    return 0;
-}
-
-
-unsigned int
-PrintPS::stroke(Inkscape::Extension::Print *mod, Geom::PathVector const &pathv, Geom::Matrix const *ctm, SPStyle const *style,
-                NRRect const *pbox, NRRect const *dbox, NRRect const *bbox)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    if (style->stroke.isColor()) {
-        Inkscape::SVGOStringStream os;
-
-        print_stroke_style(os, style);
-
-        print_pathvector(os, pathv);
-
-        os << "stroke\n";
-
-        fprintf(_stream, "%s", os.str().c_str());
-    }
-
-    return 0;
-}
-
-unsigned int
-PrintPS::image(Inkscape::Extension::Print *mod, guchar *px, unsigned int w, unsigned int h, unsigned int rs,
-               Geom::Matrix const *transform, SPStyle const *style)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    return print_image(_stream, px, w, h, rs, transform);
-}
-
-/* PSFontName is now useless (cf. text() method code) */
-char const *
-PrintPS::PSFontName(SPStyle const *style)
-{
-    font_instance *tf = font_factory::Default()->FaceFromStyle(style);
-
-    char const *n;
-    char name_buf[256];
-
-    // PS does not like spaces in fontnames, replace them with the usual dashes.
-
-    if (tf) {
-        tf->PSName(name_buf, sizeof(name_buf));
-        n = g_strdelimit(name_buf, " ", '-');
-        tf->Unref();
-    } else {
-        // this system does not have this font, so just use the name from SVG in the hope that PS interpreter will make sense of it
-        bool i = (style->font_style.value == SP_CSS_FONT_STYLE_ITALIC);
-        bool o = (style->font_style.value == SP_CSS_FONT_STYLE_OBLIQUE);
-        bool b = (style->font_weight.value == SP_CSS_FONT_WEIGHT_BOLD) ||
-            (style->font_weight.value >= SP_CSS_FONT_WEIGHT_500 && style->font_weight.value <= SP_CSS_FONT_WEIGHT_900);
-
-        n = g_strdup_printf("%s%s%s%s",
-                            g_strdelimit(style->text->font_family.value, " ", '-'), 
-                            (b || i || o) ? "-" : "",
-                            (b) ? "Bold" : "",
-                            (i) ? "Italic" : ((o) ? "Oblique" : "") );
-    }
-
-    return g_strdup(n);
-}
-
-//LSB = Least Significant Byte
-//converts 4-byte array to "LSB first" to "LSB last"
-/**
-* (Used by PrintPS::embed_t1 (from libgnomeprint/gnome-font-face.c),
-* to get the length of data segment (bytes 3-6 in IBM PC (PostScript) font file format.
-* Reference: Adobe technical note 5040, "Supporting Downloadable PostScript
-* Language Fonts", page 9)
-*/
-
-#define INT32_LSB_2_5(q) ((q)[2] + ((q)[3] << 8) + ((q)[4] << 16) + ((q)[5] << 24))
-
-/**
-* \brief For "Type 1" font only, print font data in output stream, to embed font data in PS output.
-* \param os Stream of output.
-* \param font Font whose data to embed.
-* \return FALSE if font embedding canceled (due to error or not supported font type), TRUE otherwise
-* TODO: enable font embedding for True Type
-*/
-//adapted more/less from libgnomeprint/gnome_font_face_ps_embed_t1()
-bool
-PrintPS::embed_t1 (SVGOStringStream &os, font_instance* font)
-{
-        //check font type
-        FT_Face font_face = pango_ft2_font_get_face(font->pFont);
-        const FT_String* font_type = FT_Get_X11_Font_Format(font_face);
-        g_return_val_if_fail (_fontTypesMap[font_type] == FONT_TYPE1, false);
-        //get font filename, stream to font file and size
-        FT_Stream font_stream = font_face->stream;
-        const char* font_filename = (char*) font_stream->pathname.pointer;
-        unsigned long font_stream_size = font_stream->size;
-        //first detect if font file is in IBM PC format
-        /**
-        * if first byte is 0x80, font file is pfb, do the same as a pfb to pfa converter
-        * Reference: Adobe technical note 5040, "Supporting Downloadable PostScript
-        * Language Fonts", page 9
-       * else: include all the ASCII data in the font pfa file
-        **/
-        char* buf = new char[7];
-        unsigned char* buffer = new unsigned char[7];//for the 6 header bytes (data segment length is unknown at this point) and final '\0'
-        std::string ascii_data;//for data segment "type 1" in IBM PC Format
-        //read the 6 header bytes
-        //for debug: g_warning("Reading from font file %s...", font_filename);
-        font_stream->close(font_stream);
-        ifstream font_file (font_filename, ios::in|ios::binary);
-        if (!font_file.is_open()) {
-                g_warning ("file %s: line %d: Cannot open font file %s", __FILE__, __LINE__, font_filename);
-                return false;
-        }
-        font_file.read(buf, 6);
-        buffer = (unsigned char*) buf;
-
-       //If font file is pfb, do the same as pfb to pfa converter
-        //check byte 1
-        if (buffer[0] == 0x80) {
-                const char hextab[17] = "0123456789abcdef";
-                unsigned long offset = 0;
-
-                while (offset < font_stream_size) {
-                        gint length, i;
-                        if (buffer[0] != 0x80) {
-                                g_warning ("file %s: line %d: Corrupt %s", __FILE__, __LINE__, font_filename);
-                                //TODO: print some default font data anyway like libgnomeprint/gnome_font_face_ps_embed_empty
-                                return false;
-                        }
-                        switch (buffer[1]) {
-                        case 1:
-                                //get data segment length from bytes 3-6
-                                //(Note: byte 1 is first byte in comments to match Adobe technical note 5040, but index 0 in code)
-                                length = INT32_LSB_2_5 (buffer);
-                                offset += 6;
-                                //resize the buffer to fit the data segment length
-                                delete [] buf;
-                                buf = new char[length + 1];
-                                buffer = new unsigned char[length + 1];
-                                //read and print all the data segment length
-                                font_file.read(buf, length);
-                               buffer = (unsigned char*) buf;
-                                /**
-                                * Assigning a part from the buffer of length "length" ensures
-                                * that no incorrect extra character will be printed and make the PS output invalid
-                                * That was the case with the code:
-                                * os << buffer;
-                                * (A substring method could have been used as well.)
-                                */
-                                ascii_data.assign(buf, 0, length);
-                                os << ascii_data;
-                                offset += length;
-                                //read next 6 header bytes
-                                font_file.read(buf, 6);
-                                break;
-                        case 2:
-                                length = INT32_LSB_2_5 (buffer);
-                                offset += 6;
-                                //resize the buffer to fit the data segment length
-                                delete [] buf;
-                                buf = new char[length + 1];
-                                buffer = new unsigned char[length + 1];
-                                //read and print all the data segment length
-                                font_file.read(buf, length);
-                                buffer = (unsigned char*) buf;
-                                for (i = 0; i < length; i++) {
-                                        os << hextab[buffer[i] >> 4];
-                                        os << hextab[buffer[i] & 15];
-                                        offset += 1;
-                                        if ((i & 31) == 31 || i == length - 1)
-                                                os << "\n";
-                                }
-                                //read next 6 header bytes
-                                font_file.read(buf, 6);
-                                break;
-                        case 3:
-                                /* Finished */
-                                os << "\n";
-                                offset = font_stream_size;
-                                break;
-                        default:
-                                os << "%%%ERROR: Font file corrupted at byte " << offset << "\n";
-                                //TODO: print some default font data anyway like libgnomeprint/gnome_font_face_ps_embed_empty
-                                return false;
-                        }
-                }
-        }
-       //else: font file is pfa, include all directly
-       else {
-                //font is not in IBM PC format, all the file content can be directly printed
-                //resize buffer
-                delete [] buf;
-                buf = new char[font_stream_size + 1];
-                delete [] buffer;
-                font_file.seekg (0, ios::beg);
-                font_file.read(buf, font_stream_size);
-               /**
-                * Assigning a part from the buffer of length "length" ensures
-                 * that no incorrect extra character will be printed and make the PS output invalid
-                 * That was the case with the code:
-                 * os << buffer;
-                 * (A substring method could have been used as well.)
-                 */
-               ascii_data.assign(buf, 0, font_stream_size);
-               os << ascii_data;
-        }
-        font_file.close();
-        delete [] buf;
-        buf = NULL;
-        buffer = NULL;// Clear buffer to prevent using invalid memory reference.
-
-        char font_psname[256];
-        font->PSName(font_psname, sizeof(font_psname));
-        FT_Long font_num_glyphs = font_face->num_glyphs;
-        if (font_num_glyphs < 256) {
-                gint glyph;
-                /* 8-bit vector */
-                os << "(" << font_psname << ") cvn findfont dup length dict begin\n";
-                os << "{1 index /FID ne {def} {pop pop} ifelse} forall\n";
-                os << "/Encoding [\n";
-                for (glyph = 0; glyph < 256; glyph++) {
-                        guint g;
-                        gchar c[256];
-                        FT_Error status;
-                        g = (glyph < font_num_glyphs) ? glyph : 0;
-                        status = FT_Get_Glyph_Name (font_face, g, c, 256);
-
-                       if (status != FT_Err_Ok) {
-                                g_warning ("file %s: line %d: Glyph %d has no name in %s", __FILE__, __LINE__, g, font_filename);
-                                g_snprintf (c, 256, ".notdef");
-                        }
-
-                        os << "/" << c << ( ((glyph & 0xf) == 0xf)?"\n":" " );
-                }
-                os << "] def currentdict end\n";
-                //TODO: manage several font instances for same ps name like in libgnomeprint/gnome_print_ps2_set_font_real()
-                //gf_pso_sprintf (pso, "(%s) cvn exch definefont pop\n", pso->encodedname);
-                os << "(" << font_psname << ") cvn exch definefont pop\n";
-        } else {
-                gint nfonts, i, j;
-                /* 16-bit vector */
-                nfonts = (font_num_glyphs + 255) >> 8;
-
-                os << "32 dict begin\n";
-                /* Common entries */
-                os << "/FontType 0 def\n";
-                os << "/FontMatrix [1 0 0 1 0 0] def\n";
-                os << "/FontName (" << font_psname << "-Glyph-Composite) cvn def\n";
-                os << "/LanguageLevel 2 def\n";
-
-                /* Type 0 entries */
-                os << "/FMapType 2 def\n";
-
-                /* Bitch 'o' bitches */
-                os << "/FDepVector [\n";
-
-                for (i = 0; i < nfonts; i++) {
-                        os << "(" << font_psname << ") cvn findfont dup length dict begin\n";
-                        os << "{1 index /FID ne {def} {pop pop} ifelse} forall\n";
-                        os << "/Encoding [\n";
-                        for (j = 0; j < 256; j++) {
-                                gint glyph;
-                                gchar c[256];
-                                FT_Error status;
-                                glyph = 256 * i + j;
-                                if (glyph >= font_num_glyphs)
-                                        glyph = 0;
-                                status = FT_Get_Glyph_Name (font_face, glyph, c, 256);
-                                if (status != FT_Err_Ok) {
-                                        g_warning ("file %s: line %d: Glyph %d has no name in %s", __FILE__, __LINE__, glyph, font_filename);
-                                        g_snprintf (c, 256, ".notdef");
-                                }
-                                os << "/" << c << ( ((j & 0xf) == 0xf)?"\n":" " );
-                        }
-                        os << "] def\n";
-                        os << "currentdict end (" << font_psname << "-Glyph-Page-";
-                        os << std::dec << i;
-                        os << ") cvn exch definefont\n";
-                }
-                os << "] def\n";
-                os << "/Encoding [\n";
-                for (i = 0; i < 256; i++) {
-                        gint fn;
-                        fn = (i < nfonts) ? i : 0;
-                        os << std::dec << fn;
-                        os << ( ((i & 0xf) == 0xf) ? "\n" : " " );
-                }
-                os << "] def\n";
-                os << "currentdict end\n";
-                //TODO: manage several font instances for same ps name like in libgnomeprint/gnome_print_ps2_set_font_real()
-                //gf_pso_sprintf (pso, "(%s) cvn exch definefont pop\n", pso->encodedname);
-                os << "(" << font_psname << ") cvn exch definefont pop\n";
-        }
-       //font embedding completed
-       return true;
-}
-
-
-
-/**
-* \brief Print font data in output stream, to embed font data in PS output.
-* \param os Stream of output.
-* \param font Font whose data to embed.
-* \return FALSE if font embedding canceled (due to error or not supported font type), TRUE otherwise
-*/
-//adapted from libgnomeprint/gnome_font_face_ps_embed()
-bool PrintPS::embed_font(SVGOStringStream &os, font_instance* font)
-{
-  //Hinted at by a comment in libgnomeprint/fcpattern_to_gp_font_entry()
-  //Determining the font type in the "Pango way"
-  FT_Face font_face = pango_ft2_font_get_face(font->pFont);
-  const FT_String* font_type = FT_Get_X11_Font_Format(font_face);
-
-  /**
-  * Possible values of "font_type": Type 1, TrueType, etc.
-  * Embedding available only for Type 1 fonts so far.
-  */
-  //TODO: provide support for other font types (TrueType is a priority)
-  switch(_fontTypesMap[font_type])
-  {
-    case FONT_TYPE1:
-      return embed_t1 (os, font);
-    //TODO: implement TT font embedding
-    /*case FONT_TRUETYPE:
-      embed_tt (os, font);
-      break;*/
-    default:
-      g_warning("Unknown (not supported) font type for embedding: %s", font_type);
-      //TODO: embed something like in libgnomeprint/gnome_font_face_ps_embed_empty();
-      return false;
-  }
-}
-
-
-/**
-* \brief Converts UTF-8 string to sequence of glyph numbers for PostScript string (cf. "show" commands.).
-* \param os Stream of output.
-* \param font Font used for unicode->glyph mapping.
-* \param unistring UTF-8 encoded string to convert.
-*/
-void PrintPS::print_glyphlist(SVGOStringStream &os, font_instance* font, Glib::ustring unistring)
-{
-  //iterate through unicode chars in unistring
-  Glib::ustring::iterator unistring_iter;
-  gunichar unichar;
-  gint glyph_index, glyph_page;
-  
-  FT_Face font_face = pango_ft2_font_get_face(font->pFont);
-  FT_Long font_num_glyphs = font_face->num_glyphs;
-  //whether font has more than one glyph pages (16-bit encoding)
-  bool two_bytes_encoded = (font_num_glyphs > 255);
-
-  for (unistring_iter = unistring.begin();   unistring_iter!=unistring.end();  unistring_iter++)
-  {
-    //get unicode char
-    unichar = *unistring_iter;
-    //get matching glyph index in current font for unicode char
-    //default glyph index is 0 for undefined font character (glyph unavailable)
-    //TODO: if glyph unavailable for current font, use a default font among the most Unicode-compliant - e.g. Bitstream Cyberbit - I guess
-    glyph_index = font->MapUnicodeChar(unichar);
-    //if more than one glyph pages for current font (16-bit encoding),
-    if(two_bytes_encoded)
-    {
-      //add glyph page before glyph index.
-      glyph_page = (glyph_index >> 8) & 0xff;
-      os << "\\";
-      //convert in octal code before printing
-      os << std::oct << glyph_page;
-    }
-    //(If one page - 8-bit encoding -, nothing to add.)
-    //TODO: explain the following line inspired from libgnomeprint/gnome_print_ps2_glyphlist()
-    glyph_index = glyph_index & 0xff;
-    //TODO: mark glyph as used for current font, if Inkscape has to embed minimal font data in PS
-    os << "\\";
-    //convert in octal code before printing
-    os << std::oct << glyph_index;
-  }
-}
-
-unsigned int
-PrintPS::text(Inkscape::Extension::Print *mod, char const *text, Geom::Point p,
-              SPStyle const *const style)
-{
-    if (!_stream) return 0; // XXX: fixme, returning -1 as unsigned.
-    if (_bitmap) return 0;
-
-    //check whether fonts have to be embedded in the PS output
-    //if not, use the former way of Inkscape to print text
-    gboolean font_embedded = mod->fontEmbedded();
-
-    Inkscape::SVGOStringStream os;
-    //find font
-    /**
-    * A font_instance object is necessary for the next steps,
-    * that's why using PSFontName() method just to get the PS fontname
-    * is not enough and not appropriate
-    */
-    font_instance *tf = font_factory::Default()->FaceFromStyle(style);
-    
-    const gchar *fn = NULL;
-    char name_buf[256];
-
-    //check whether font was found
-    /**
-    * This check is not strictly reliable
-    * since Inkscape returns a default font if font not found.
-    * This is just to be consistent with the method PSFontName().
-    */
-    if (tf) {
-        //get font PS name
-        tf->PSName(name_buf, sizeof(name_buf));
-        fn = name_buf;
-    } else {
-       // this system does not have this font, so cancel font embedding...
-        font_embedded = FALSE;
-        //this case seems to never happen since Inkscape uses a default font instead (like BitstreamVeraSans on Windows)
-        g_warning("Font %s not found.", fn);
-        //...and just use the name from SVG in the hope that PS interpreter will make sense of it
-        bool i = (style->font_style.value == SP_CSS_FONT_STYLE_ITALIC);
-        bool o = (style->font_style.value == SP_CSS_FONT_STYLE_OBLIQUE);
-        bool b = (style->font_weight.value == SP_CSS_FONT_WEIGHT_BOLD) ||
-            (style->font_weight.value >= SP_CSS_FONT_WEIGHT_500 && style->font_weight.value <= SP_CSS_FONT_WEIGHT_900);
-
-        fn = g_strdup_printf("%s%s%s%s",
-                            g_strdelimit(style->text->font_family.value, " ", '-'),
-                            (b || i || o) ? "-" : "",
-                            (b) ? "Bold" : "",
-                            (i) ? "Italic" : ((o) ? "Oblique" : "") );
-    }
-
-    /**
-    * If font embedding is requested, tempt to embed the font the first time it is used, once and for all.
-    * There is no selection of the glyph descriptions to embed, based on the characters used effectively in the document.
-    * (TODO?)
-    * Else, back to the former way of printing.
-    */
-    gpointer  is_embedded;
-    //if not first time the font is used and if font embedding requested, check whether the font has been embedded (successfully the first time).
-    if(g_tree_lookup_extended(_fonts, fn, NULL, &is_embedded)) font_embedded = font_embedded && (strcmp((char *)is_embedded, "TRUE") == 0);
-    else
-    {
-      //first time the font is used
-      if(font_embedded)
-      {
-        //embed font in PS output
-        //adapted from libgnomeprint/gnome_print_ps2_close()
-        os << "%%BeginResource: font " << fn << "\n";
-        font_embedded = embed_font(os, tf);
-        os << "%%EndResource: font " << fn << "\n";
-        if(!font_embedded) g_warning("Font embedding canceled for font: %s", fn);
-        else fprintf(_begin_stream, "%s", os.str().c_str());
-        //empty os before resume printing to the script stream
-        std::string clrstr = "";
-        os.str(clrstr);
-
-      }
-      //add to the list
-      g_tree_insert(_fonts, g_strdup(fn), g_strdup((font_embedded)?"TRUE":"FALSE"));
-    }
-    
-    Glib::ustring s;
-    // Escape chars
-    Inkscape::SVGOStringStream escaped_text;
-    //if font embedding, all characters will be converted to glyph indices (cf. PrintPS::print_glyphlist()),
-    //so no need to escape characters
-    //else back to the old way, i.e. escape chars: '\',')','(' and UTF-8 ones
-    if(font_embedded) s = text;
-    else {
-       escaped_text << std::oct;
-       for (gchar const *p_text = text ; *p_text ; p_text = g_utf8_next_char(p_text)) {
-               gunichar const c = g_utf8_get_char(p_text);
-               if (c == '\\' || c == ')' || c == '(')
-               escaped_text << '\\' << static_cast<char>(c);
-               else if (c >= 0x80)
-               escaped_text << '\\' << c;
-               else
-               escaped_text << static_cast<char>(c);
-       }
-    }
-
-    os << "gsave\n";
-
-    // set font
-    if(font_embedded) os << "/" << fn << " findfont\n";
-    else {
-       if (_latin1_encoded_fonts.find(fn) == _latin1_encoded_fonts.end()) {
-               if (!_newlatin1font_proc_defined) {
-               // input: newfontname, existingfontname
-               // output: new font object, also defined to newfontname
-               os << "/newlatin1font "         // name of the proc
-                       "{findfont dup length dict copy "     // load the font and create a copy of it
-                       "dup /Encoding ISOLatin1Encoding put "     // change the encoding in the copy
-                       "definefont} def\n";      // create the new font and leave it on the stack, define the proc
-               _newlatin1font_proc_defined = true;
-               }
-               if(strchr(fn, ' ') == NULL)
-                       os << "/" << fn << "-ISOLatin1 /" << fn << " newlatin1font\n";
-               else
-                       os << "(/" << fn << "-ISOLatin1) (/" << fn << ") newlatin1font\n";
-               _latin1_encoded_fonts.insert(fn);
-       } else
-               if(strchr(fn, ' ') == NULL)
-                       os << "/" << fn << "-ISOLatin1 findfont\n";
-               else
-                       os << "(/" << fn << "-ISOLatin1) findfont\n";
-    }
-    os << style->font_size.computed << " scalefont\n";
-    os << "setfont\n";
-   //The commented line beneath causes Inkscape to crash under Linux but not under Windows
-    //g_free((void*) fn);
-
-    if ( style->fill.isColor()
-         || ( style->fill.isPaintserver()
-              && SP_IS_GRADIENT(SP_STYLE_FILL_SERVER(style)) ) )
-    {
-        // set fill style
-        print_fill_style(os, style, NULL);
-        // FIXME: we don't know the pbox of text, so have to pass NULL. This means gradients with
-        // bbox units won't work with text. However userspace gradients don't work with text either
-        // (text is black) for some reason.
-
-        os << "newpath\n";
-        os << p[Geom::X] << " " << p[Geom::Y] << " moveto\n";
-        os << "(";
-        if(font_embedded) print_glyphlist(os, tf, s);
-        else os << escaped_text.str();
-        os << ") show\n";
-    }
-
-    if (style->stroke.isColor()) {
-
-        // set stroke style
-        print_stroke_style(os, style);
-
-        // paint stroke
-        os << "newpath\n";
-        os << p[Geom::X] << " " << p[Geom::Y] << " moveto\n";
-        os << "(";
-        if(font_embedded) print_glyphlist(os, tf, s);
-        else os << escaped_text.str();
-        os << ") false charpath stroke\n";
-    }
-
-    if(tf) tf->Unref();
-
-    os << "grestore\n";
-
-    fprintf(_stream, "%s", os.str().c_str());
-
-    return 0;
-}
-
-
-
-/* PostScript helpers */
-
-void
-PrintPS::print_pathvector(SVGOStringStream &os, Geom::PathVector const &pathv)
-{
-    if (pathv.empty())
-        return;
-
-    os << "newpath\n";
-
-    for(Geom::PathVector::const_iterator it = pathv.begin(); it != pathv.end(); ++it) {
-
-        os << it->initialPoint()[Geom::X] << " " << it->initialPoint()[Geom::Y] << " moveto\n";
-
-        for(Geom::Path::const_iterator cit = it->begin(); cit != it->end_open(); ++cit) {
-            print_2geomcurve(os, *cit);
-        }
-
-        if (it->closed()) {
-            os << "closepath\n";
-        }
-
-    }
-}
-
-void
-PrintPS::print_2geomcurve(SVGOStringStream &os, Geom::Curve const & c )
-{
-    using Geom::X;
-    using Geom::Y;
-
-    if( is_straight_curve(c) )
-    {
-        os << c.finalPoint()[X] << " " << c.finalPoint()[Y] << " lineto\n";
-    }
-    else if(Geom::CubicBezier const *cubic_bezier = dynamic_cast<Geom::CubicBezier const*>(&c)) {
-        std::vector<Geom::Point> points = cubic_bezier->points();
-        os << points[1][X] << " " << points[1][Y] << " "
-           << points[2][X] << " " << points[2][Y] << " "
-           << points[3][X] << " " << points[3][Y] << " curveto\n";
-    }
-    else {
-        //this case handles sbasis as well as all other curve types
-        Geom::Path sbasis_path = Geom::cubicbezierpath_from_sbasis(c.toSBasis(), 0.1);
-
-        for(Geom::Path::iterator iter = sbasis_path.begin(); iter != sbasis_path.end(); ++iter) {
-            print_2geomcurve(os, *iter);
-        }
-    }
-}
-
-
-/* The following code is licensed under GNU GPL.
-** The packbits, ascii85 and imaging printing code
-** is from the gimp's postscript.c.
-*/
-
-/**
-* \param nin Number of bytes of source data.
-* \param src Source data.
-* \param nout Number of output bytes.
-* \param dst Buffer for output.
-*/
-void
-PrintPS::compress_packbits(int nin,
-                           guchar *src,
-                           int *nout,
-                           guchar *dst)
-
-{
-    register guchar c;
-    int nrepeat, nliteral;
-    guchar *run_start;
-    guchar *start_dst = dst;
-    guchar *last_literal = NULL;
-
-    for (;;) {
-        if (nin <= 0) break;
-
-        run_start = src;
-        c = *run_start;
-
-        /* Search repeat bytes */
-        if ((nin > 1) && (c == src[1])) {
-            nrepeat = 1;
-            nin -= 2;
-            src += 2;
-            while ((nin > 0) && (c == *src)) {
-                nrepeat++;
-                src++;
-                nin--;
-                if (nrepeat == 127) break; /* Maximum repeat */
-            }
-
-            /* Add two-byte repeat to last literal run ? */
-            if ( (nrepeat == 1)
-                 && (last_literal != NULL) && (((*last_literal)+1)+2 <= 128) )
-            {
-                *last_literal += 2;
-                *(dst++) = c;
-                *(dst++) = c;
-                continue;
-            }
-
-            /* Add repeat run */
-            *(dst++) = (guchar)((-nrepeat) & 0xff);
-            *(dst++) = c;
-            last_literal = NULL;
-            continue;
-        }
-        /* Search literal bytes */
-        nliteral = 1;
-        nin--;
-        src++;
-
-        for (;;) {
-            if (nin <= 0) break;
-
-            if ((nin >= 2) && (src[0] == src[1])) /* A two byte repeat ? */
-                break;
-
-            nliteral++;
-            nin--;
-            src++;
-            if (nliteral == 128) break; /* Maximum literal run */
-        }
-
-        /* Could be added to last literal run ? */
-        if ((last_literal != NULL) && (((*last_literal)+1)+nliteral <= 128)) {
-            *last_literal += nliteral;
-        } else {
-            last_literal = dst;
-            *(dst++) = (guchar)(nliteral-1);
-        }
-        while (nliteral-- > 0) *(dst++) = *(run_start++);
-    }
-    *nout = dst - start_dst;
-}
-
-void
-PrintPS::ascii85_init(void)
-{
-    ascii85_len = 0;
-    ascii85_linewidth = 0;
-}
-
-void
-PrintPS::ascii85_flush(SVGOStringStream &os)
-{
-    char c[5];
-    bool const zero_case = (ascii85_buf == 0);
-    static int const max_linewidth = 75;
-
-    for (int i = 4; i >= 0; i--) {
-        c[i] = (ascii85_buf % 85) + '!';
-        ascii85_buf /= 85;
-    }
-    /* check for special case: "!!!!!" becomes "z", but only if not
-     * at end of data. */
-    if (zero_case && (ascii85_len == 4)) {
-        if (ascii85_linewidth >= max_linewidth) {
-            os << '\n';
-            ascii85_linewidth = 0;
-        }
-        os << 'z';
-        ascii85_linewidth++;
-    } else {
-        for (int i = 0; i < ascii85_len+1; i++) {
-            if ((ascii85_linewidth >= max_linewidth) && (c[i] != '%')) {
-                os << '\n';
-                ascii85_linewidth = 0;
-            }
-            os << c[i];
-            ascii85_linewidth++;
-        }
-    }
-
-    ascii85_len = 0;
-    ascii85_buf = 0;
-}
-
-inline void
-PrintPS::ascii85_out(guchar byte, SVGOStringStream &os)
-{
-    if (ascii85_len == 4)
-        ascii85_flush(os);
-
-    ascii85_buf <<= 8;
-    ascii85_buf |= byte;
-    ascii85_len++;
-}
-
-void
-PrintPS::ascii85_nout(int n, guchar *uptr, SVGOStringStream &os)
-{
-    while (n-- > 0) {
-        ascii85_out(*uptr, os);
-        uptr++;
-    }
-}
-
-void
-PrintPS::ascii85_done(SVGOStringStream &os)
-{
-    if (ascii85_len) {
-        /* zero any unfilled buffer portion, then flush */
-        ascii85_buf <<= (8 * (4-ascii85_len));
-        ascii85_flush(os);
-    }
-
-    os << "~>\n";
-}
-
-unsigned int
-PrintPS::print_image(FILE *ofp, guchar *px, unsigned int width, unsigned int height, unsigned int rs,
-                     Geom::Matrix const *transform)
-{
-    Inkscape::SVGOStringStream os;
-
-    os << "gsave\n";
-
-    os << "[" << (*transform)[0] << " "
-       << (*transform)[1] << " "
-       << (*transform)[2] << " "
-       << (*transform)[3] << " "
-       << (*transform)[4] << " "
-       << (*transform)[5] << "] concat\n";
-
-    /* Write read image procedure */
-    os << "<<\n";
-    os << "  /ImageType 3\n";
-    os << "  /InterleaveType 1\n";
-
-    os << "  /MaskDict\n";
-    os << "  <<\n";
-    os << "    /ImageType 1\n";
-    os << "    /Width " << width << "\n";
-    os << "    /Height " << height << "\n";
-    os << "    /ImageMatrix "
-       << "[" << width << " "
-       << 0 << " "
-       << 0 << " "
-       << -((long) height) << " "
-       << 0 << " "
-       << height << "]\n";
-    os << "    /BitsPerComponent 8\n";
-    os << "    /Decode [1 0]\n";
-    os << "  >>\n";
-
-    os << "  /DataDict\n";
-    os << "  <<\n";
-    os << "    /ImageType 1\n";
-    os << "    /Width " << width << "\n";
-    os << "    /Height " << height << "\n";
-    os << "    /ImageMatrix "
-       << "[" << width << " "
-       << 0 << " "
-       << 0 << " "
-       << -((long )height) << " "
-       << 0 << " "
-       << height << "]\n";
-    os << "    /DataSource currentfile /ASCII85Decode filter\n";
-    os << "    /BitsPerComponent 8\n";
-    os << "    /Decode [0 1 0 1 0 1]\n";
-    os << "  >>\n";
-
-    os << ">>\n";
-
-    /* Allocate buffer for packbits data. Worst case: Less than 1% increase */
-    guchar *const packb = (guchar *)g_malloc((4*width * 105)/100+2);
-    guchar *const plane = (guchar *)g_malloc(4*width);
-
-    os << "image\n";
-
-    ascii85_init();
-    
-    for (unsigned i = 0; i < height; i++) {
-        guchar const *const src = px + i * rs;
-
-        guchar const *src_ptr = src;
-        guchar *plane_ptr = plane;
-        for (unsigned j = 0; j < width; j++) {
-            *(plane_ptr++) = *(src_ptr+3);
-            *(plane_ptr++) = *(src_ptr+0);
-            *(plane_ptr++) = *(src_ptr+1);
-            *(plane_ptr++) = *(src_ptr+2);
-            src_ptr += 4;
-        }
-        
-        ascii85_nout(4*width, plane, os);
-    }
-    ascii85_done(os);
-
-    g_free(packb);
-    g_free(plane);
-
-    os << "grestore\n";
-
-    fprintf(ofp, "%s", os.str().c_str());
-
-    return 0;
-}
-
-bool
-PrintPS::textToPath(Inkscape::Extension::Print * ext)
-{
-    return ext->get_param_bool("textToPath");
-}
-
-/**
-* \brief Get "fontEmbedded" param
-* \retval TRUE Fonts have to be embedded in the output so that the user might not need to install fonts to have the interpreter read the document correctly
-* \retval FALSE No font embedding
-*
-* Only available for Adobe Type 1 fonts in EPS output till now
-*/
-bool
-PrintPS::fontEmbedded(Inkscape::Extension::Print * ext)
-{
-    return ext->get_param_bool("fontEmbedded");
-}
-
-#include "clear-n_.h"
-
-void
-PrintPS::init(void)
-{
-    /* SVG in */
-    (void) Inkscape::Extension::build_from_mem(
-        "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n"
-        "<name>" N_("Postscript Print") "</name>\n"
-        "<id>" SP_MODULE_KEY_PRINT_PS "</id>\n"
-        "<param name=\"bitmap\" type=\"boolean\">false</param>\n"
-        "<param name=\"resolution\" type=\"string\">72</param>\n"
-        "<param name=\"destination\" type=\"string\">| lp</param>\n"
-        "<param name=\"pageBoundingBox\" type=\"boolean\">true</param>\n"
-        "<param name=\"textToPath\" type=\"boolean\">true</param>\n"
-        "<param name=\"fontEmbedded\" type=\"boolean\">false</param>\n"
-        "<print/>\n"
-        "</inkscape-extension>", new PrintPS());
-}
-
-
-}  /* namespace Internal */
-}  /* namespace Extension */
-}  /* namespace Inkscape */
-
-/* End of GNU GPL code */
-
-
-/*
-  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/extension/internal/ps.h b/src/extension/internal/ps.h
deleted file mode 100644 (file)
index 92928b9..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-#ifndef EXTENSION_INTERNAL_PS_H_SEEN
-#define EXTENSION_INTERNAL_PS_H_SEEN
-
-/** \file
- * Declaration of PrintPS, the internal module used to do Postscript Printing.
- */
-/*
- * Authors:
- *        Lauris Kaplinski <lauris@kaplinski.com>
- *        Ted Gould <ted@gould.cx>
- *
- * Lauris' original code is in the public domain.
- * Ted's changes are licensed under the GNU GPL.
- */
-
-#include <config.h>
-#include "extension/extension.h"
-#include "extension/implementation/implementation.h"
-#include <set>
-#include <string>
-
-#include <libnrtype/font-instance.h>
-
-#include "svg/stringstream.h"
-
-namespace Inkscape {
-namespace Extension {
-namespace Internal {
-
-typedef enum {FONT_TYPE1, FONT_TRUETYPE} FontType;
-
-class PrintPS : public Inkscape::Extension::Implementation::Implementation {
-    float _width;
-    float _height;
-    FILE * _begin_stream;//stream to print prolog and document setup of EPS, if font embedding
-    FILE * _stream;//(main) stream to print the (E)PS output, or only the script part following prolog/document setup, if font embedding
-
-    unsigned short _dpi;
-    bool _bitmap;
-    std::set<std::string> _latin1_encoded_fonts;
-    bool _newlatin1font_proc_defined;
-
-    GTree * _fonts;//maps fonts used in the document, to (value=)"TRUE" only if the font was effectively embedded, "FALSE" if not.
-
-    //map strings of font types to enumeration of int values
-    std::map<std::string, FontType> _fontTypesMap;
-
-    void print_2geomcurve(SVGOStringStream &os, Geom::Curve const & c );
-    void print_pathvector(SVGOStringStream &os, Geom::PathVector const &pathv);
-
-    void print_fill_style(SVGOStringStream &os, SPStyle const *style, NRRect const *pbox);
-    void print_stroke_style(SVGOStringStream &os, SPStyle const *style);
-
-    char const *PSFontName(SPStyle const *style);
-    bool embed_t1(SVGOStringStream &os, font_instance* font);
-    bool embed_font(SVGOStringStream &os, font_instance* font);
-
-    void print_glyphlist(SVGOStringStream &os, font_instance* font, Glib::ustring unistring);
-
-    unsigned int print_image(FILE *ofp, guchar *px, unsigned int width, unsigned int height, unsigned int rs,
-                             Geom::Matrix const *transform);
-    void compress_packbits(int nin, guchar *src, int *nout, guchar *dst);
-
-    /* ASCII 85 variables */
-    guint32 ascii85_buf;
-    int ascii85_len;
-    int ascii85_linewidth;
-    /* ASCII 85 Functions */
-    void ascii85_init(void);
-    void ascii85_flush(SVGOStringStream &os);
-    inline void ascii85_out(guchar byte, SVGOStringStream &os);
-    void ascii85_nout(int n, guchar *uptr, SVGOStringStream &os);
-    void ascii85_done(SVGOStringStream &os);
-
-
-public:
-    PrintPS(void);
-    virtual ~PrintPS(void);
-
-    /* Print functions */
-    virtual unsigned int setup(Inkscape::Extension::Print *module);
-    /*
-      virtual unsigned int set_preview(Inkscape::Extension::Print *module);
-    */
-
-    virtual unsigned int begin(Inkscape::Extension::Print *module, SPDocument *doc);
-    virtual unsigned int finish(Inkscape::Extension::Print *module);
-
-    /* Rendering methods */
-    virtual unsigned int bind(Inkscape::Extension::Print *module, Geom::Matrix const *transform, float opacity);
-    virtual unsigned int release(Inkscape::Extension::Print *module);
-    virtual unsigned int comment(Inkscape::Extension::Print *module, char const *comment);
-    virtual unsigned int fill(Inkscape::Extension::Print *module, Geom::PathVector const &pathv, Geom::Matrix const *ctm, SPStyle const *style,
-                              NRRect const *pbox, NRRect const *dbox, NRRect const *bbox);
-    virtual unsigned int stroke(Inkscape::Extension::Print *module, Geom::PathVector const &pathv, Geom::Matrix const *transform, SPStyle const *style,
-                                NRRect const *pbox, NRRect const *dbox, NRRect const *bbox);
-    virtual unsigned int image(Inkscape::Extension::Print *module, unsigned char *px, unsigned int w, unsigned int h, unsigned int rs,
-                               Geom::Matrix const *transform, SPStyle const *style);
-    virtual unsigned int text(Inkscape::Extension::Print *module, char const *text,
-                              Geom::Point p, SPStyle const *style);
-
-    bool textToPath(Inkscape::Extension::Print *ext);
-    static void init(void);
-    bool fontEmbedded (Inkscape::Extension::Print * ext);
-};
-
-}  /* namespace Internal */
-}  /* namespace Extension */
-}  /* namespace Inkscape */
-
-
-#endif /* !EXTENSION_INTERNAL_PS_H_SEEN */
-
-/*
-  Local Variables:
-  mode:c++
-  c-file-style:"stroustrup"
-  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
-  indent-tabs-mode:nil
-  fill-column:99
-  End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index f6f16fb85167a299f494d1463d3195044dae1187..b52a96211c9c36d468ecadd03cd380febc2ba46c 100644 (file)
@@ -29,6 +29,7 @@ class Output : public Extension {
 
 public:
     class save_failed {};        /**< Generic failure for an undescribed reason */
+    class save_cancelled {};     /**< Saving was cancelled */
     class no_extension_found {}; /**< Failed because we couldn't find an extension to match the filename */
 
                  Output (Inkscape::XML::Node * in_repr,
index cd70042b6e758d2918956fe0fa2268817a95927c..31cf877a857927f361d239656ebe7f6fd5634c0e 100644 (file)
@@ -218,8 +218,9 @@ save(Extension *key, SPDocument *doc, gchar const *filename, bool setextension,
         throw Output::save_failed();
     }
 
-    if (!omod->prefs())
-        return;
+    if (!omod->prefs()) {
+        throw Output::save_cancelled();
+    }
 
     gchar *fileName = NULL;
     if (setextension) {
index d5700bb6e47186ada7a6c6307d9781ce802ba5e9..71a3ddd6cc581191634e98a8ecf7f48a58d8796e 100644 (file)
@@ -589,6 +589,9 @@ file_save(Gtk::Window &parentWindow, SPDocument *doc, const Glib::ustring &uri,
         g_free(text);
         g_free(safeUri);
         return FALSE;
+    } catch (Inkscape::Extension::Output::save_cancelled &e) {
+        SP_ACTIVE_DESKTOP->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("Document not saved."));
+        return FALSE;
     } catch (Inkscape::Extension::Output::no_overwrite &e) {
         return sp_file_save_dialog(parentWindow, doc);
     }
@@ -1003,7 +1006,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
                 bool const saved_pref = prefs->getBool("/options/transform/pattern", true);
                 prefs->setBool("/options/transform/pattern", true);
                 sp_document_ensure_up_to_date(sp_desktop_document(desktop));
-                boost::optional<Geom::Rect> sel_bbox = selection->bounds();
+                Geom::OptRect sel_bbox = selection->bounds();
                 if (sel_bbox) {
                     Geom::Point m( desktop->point() - sel_bbox->midpoint() );
                     sp_selection_move_relative(selection, m);
index 5bb34415d96e9496eafbd908726058ed81f2cba1..1681831c2bacf85555dc6ba2b37c8e7d188eb31c 100644 (file)
@@ -21,7 +21,7 @@
 #include "filter-chemistry.h"
 #include "filter-enums.h"
 
-#include "sp-feblend.h"
+#include "filters/blend.h"
 #include "sp-filter.h"
 #include "sp-filter-reference.h"
 #include "sp-gaussian-blur.h"
@@ -319,7 +319,7 @@ new_filter_blend_gaussian_blur (SPDocument *document, const char *blendmode, gdo
 SPFilter *
 new_filter_simple_from_item (SPDocument *document, SPItem *item, const char *mode, gdouble radius)
 {
-    boost::optional<Geom::Rect> const r = sp_item_bbox_desktop(item, SPItem::GEOMETRIC_BBOX);
+    Geom::OptRect const r = sp_item_bbox_desktop(item, SPItem::GEOMETRIC_BBOX);
 
     double width;
     double height;
@@ -374,7 +374,7 @@ modify_filter_gaussian_blur_from_item(SPDocument *document, SPItem *item,
         stdDeviation /= expansion;
 
     // Get the object size
-    boost::optional<Geom::Rect> const r = sp_item_bbox_desktop(item, SPItem::GEOMETRIC_BBOX);
+    Geom::OptRect const r = sp_item_bbox_desktop(item, SPItem::GEOMETRIC_BBOX);
     double width;
     double height;
     if (r) {
index 87d5c1217676d90d46b91d38dfc9ef1539e6c818..815d439c18eabf59fbdb2b09a66a2ee71df268c9 100644 (file)
@@ -20,7 +20,7 @@
 #include "display/nr-filter-morphology.h"
 #include "display/nr-filter-turbulence.h"
 #include "display/nr-filter-types.h"
-#include "sp-fedisplacementmap.h"
+#include "filters/displacementmap.h"
 #include "util/enums.h"
 
 // Filter primitives
diff --git a/src/filters/Makefile_insert b/src/filters/Makefile_insert
new file mode 100644 (file)
index 0000000..babc72e
--- /dev/null
@@ -0,0 +1,64 @@
+## Makefile.am fragment sourced by src/Makefile.am.
+
+filters/all: filters/libfilters.a
+
+filters/clean: 
+       rm -f extension/libfilters.a $(extension_libextension_a_OBJECTS)
+
+filters_libfilters_a_SOURCES = \
+       filters/blend.cpp                                                       \
+       filters/blend-fns.h                                             \
+       filters/blend.h                                                 \
+       filters/colormatrix.cpp                                 \
+       filters/colormatrix-fns.h                                       \
+       filters/colormatrix.h                                           \
+       filters/componenttransfer.cpp                           \
+       filters/componenttransfer-fns.h                 \
+       filters/componenttransfer-funcnode.cpp          \
+       filters/componenttransfer-funcnode.h            \
+       filters/componenttransfer.h                             \
+       filters/composite.cpp                                           \
+       filters/composite-fns.h                                 \
+       filters/composite.h                                             \
+       filters/convolvematrix.cpp                                      \
+       filters/convolvematrix-fns.h                            \
+       filters/convolvematrix.h                                        \
+       filters/diffuselighting.cpp                             \
+       filters/diffuselighting-fns.h                           \
+       filters/diffuselighting.h                                       \
+       filters/displacementmap.cpp                             \
+       filters/displacementmap-fns.h                           \
+       filters/displacementmap.h                                       \
+       filters/distantlight.cpp                                        \
+       filters/distantlight.h                                          \
+       filters/flood.cpp                                                       \
+       filters/flood-fns.h                                             \
+       filters/flood.h                                                 \
+       filters/image.cpp                                                       \
+       filters/image-fns.h                                             \
+       filters/image.h                                                 \
+       filters/merge.cpp                                                       \
+       filters/merge-fns.h                                             \
+       filters/merge.h                                                 \
+       filters/mergenode.cpp                                           \
+       filters/mergenode.h                                             \
+       filters/morphology.cpp                                          \
+       filters/morphology-fns.h                                        \
+       filters/morphology.h                                            \
+       filters/offset.cpp                                                      \
+       filters/offset-fns.h                                            \
+       filters/offset.h                                                        \
+       filters/pointlight.cpp                                          \
+       filters/pointlight.h                                            \
+       filters/specularlighting.cpp                            \
+       filters/specularlighting-fns.h                          \
+       filters/specularlighting.h                                      \
+       filters/spotlight.cpp                                           \
+       filters/spotlight.h                                             \
+       filters/tile.cpp                                                        \
+       filters/tile-fns.h                                                      \
+       filters/tile.h                                                          \
+       filters/turbulence.cpp                                          \
+       filters/turbulence-fns.h                                        \
+       filters/turbulence.h
+
diff --git a/src/filters/blend-fns.h b/src/filters/blend-fns.h
new file mode 100644 (file)
index 0000000..f08ed9d
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEBLEND_FNS_H
+#define SP_FEBLEND_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeBlend;
+
+#define SP_TYPE_FEBLEND (sp_feBlend_get_type())
+#define SP_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEBLEND, SPFeBlend))
+#define SP_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEBLEND, SPFeBlendClass))
+#define SP_IS_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEBLEND))
+#define SP_IS_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEBLEND))
+
+GType sp_feBlend_get_type();
+
+#endif /* !SP_FEBLEND_FNS_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/filters/blend.cpp b/src/filters/blend.cpp
new file mode 100644 (file)
index 0000000..8c2d797
--- /dev/null
@@ -0,0 +1,249 @@
+#define __SP_FEBLEND_CPP__
+
+/** \file
+ * SVG <feBlend> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *
+ * Copyright (C) 2006,2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "blend.h"
+#include "xml/repr.h"
+
+#include "display/nr-filter.h"
+#include "display/nr-filter-primitive.h"
+#include "display/nr-filter-blend.h"
+#include "display/nr-filter-types.h"
+
+/* FeBlend base class */
+
+static void sp_feBlend_class_init(SPFeBlendClass *klass);
+static void sp_feBlend_init(SPFeBlend *feBlend);
+
+static void sp_feBlend_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feBlend_release(SPObject *object);
+static void sp_feBlend_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feBlend_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feBlend_build_renderer(SPFilterPrimitive *sp_prim, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feBlend_parent_class;
+
+GType
+sp_feBlend_get_type()
+{
+    static GType feBlend_type = 0;
+
+    if (!feBlend_type) {
+        GTypeInfo feBlend_info = {
+            sizeof(SPFeBlendClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feBlend_class_init,
+            NULL, NULL,
+            sizeof(SPFeBlend),
+            16,
+            (GInstanceInitFunc) sp_feBlend_init,
+            NULL,    /* value_table */
+        };
+        feBlend_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeBlend", &feBlend_info, (GTypeFlags)0);
+    }
+    return feBlend_type;
+}
+
+static void
+sp_feBlend_class_init(SPFeBlendClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feBlend_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feBlend_build;
+    sp_object_class->release = sp_feBlend_release;
+    sp_object_class->write = sp_feBlend_write;
+    sp_object_class->set = sp_feBlend_set;
+    sp_object_class->update = sp_feBlend_update;
+
+    sp_primitive_class->build_renderer = sp_feBlend_build_renderer;
+}
+
+static void
+sp_feBlend_init(SPFeBlend *feBlend)
+{
+    feBlend->in2 = NR::NR_FILTER_SLOT_NOT_SET;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeBlend variables.  For this to get called,
+ * 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_feBlend_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feBlend_parent_class)->build) {
+        ((SPObjectClass *) feBlend_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "mode");
+    sp_object_read_attr(object, "in2");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feBlend_release(SPObject *object)
+{
+    if (((SPObjectClass *) feBlend_parent_class)->release)
+        ((SPObjectClass *) feBlend_parent_class)->release(object);
+}
+
+static NR::FilterBlendMode sp_feBlend_readmode(gchar const *value)
+{
+    if (!value) return NR::BLEND_NORMAL;
+    switch (value[0]) {
+        case 'n':
+            if (strncmp(value, "normal", 6) == 0)
+                return NR::BLEND_NORMAL;
+            break;
+        case 'm':
+            if (strncmp(value, "multiply", 8) == 0)
+                return NR::BLEND_MULTIPLY;
+            break;
+        case 's':
+            if (strncmp(value, "screen", 6) == 0)
+                return NR::BLEND_SCREEN;
+            break;
+        case 'd':
+            if (strncmp(value, "darken", 6) == 0)
+                return NR::BLEND_DARKEN;
+            break;
+        case 'l':
+            if (strncmp(value, "lighten", 7) == 0)
+                return NR::BLEND_LIGHTEN;
+            break;
+        default:
+            // do nothing by default
+            break;
+    }
+    return NR::BLEND_NORMAL;
+}
+
+/**
+ * Sets a specific value in the SPFeBlend.
+ */
+static void
+sp_feBlend_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeBlend *feBlend = SP_FEBLEND(object);
+    (void)feBlend;
+
+    NR::FilterBlendMode mode;
+    int input;
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        case SP_ATTR_MODE:
+            mode = sp_feBlend_readmode(value);
+            if (mode != feBlend->blend_mode) {
+                feBlend->blend_mode = mode;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_IN2:
+            input = sp_filter_primitive_read_in(feBlend, value);
+            if (input != feBlend->in2) {
+                feBlend->in2 = input;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        default:
+            if (((SPObjectClass *) feBlend_parent_class)->set)
+                ((SPObjectClass *) feBlend_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & SP_OBJECT_MODIFIED_FLAG) {
+        sp_object_read_attr(object, "mode");
+        sp_object_read_attr(object, "in2");
+    }
+
+    if (((SPObjectClass *) feBlend_parent_class)->update) {
+        ((SPObjectClass *) feBlend_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feBlend_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            // repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feBlend_parent_class)->write) {
+        ((SPObjectClass *) feBlend_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feBlend_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeBlend *sp_blend = SP_FEBLEND(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_BLEND);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterBlend *nr_blend = dynamic_cast<NR::FilterBlend*>(nr_primitive);
+    g_assert(nr_blend != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_blend->set_mode(sp_blend->blend_mode);
+    nr_blend->set_input(1, sp_blend->in2);
+}
+
+/*
+  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/filters/blend.h b/src/filters/blend.h
new file mode 100644 (file)
index 0000000..bcb95c3
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef SP_FEBLEND_H_SEEN
+#define SP_FEBLEND_H_SEEN
+
+/** \file
+ * SVG <feBlend> implementation, see Blend.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *
+ * Copyright (C) 2006,2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "blend-fns.h"
+
+#include "display/nr-filter-blend.h"
+
+/* FeBlend base class */
+class SPFeBlendClass;
+
+struct SPFeBlend : public SPFilterPrimitive {
+    /** BLEND ATTRIBUTES HERE */
+    NR::FilterBlendMode blend_mode;
+    int in2;
+};
+
+struct SPFeBlendClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feBlend_get_type();
+
+
+#endif /* !SP_FEBLEND_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/filters/colormatrix-fns.h b/src/filters/colormatrix-fns.h
new file mode 100644 (file)
index 0000000..3a4a8d3
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FECOLORMATRIX_FNS_H
+#define SP_FECOLORMATRIX_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeColorMatrix;
+
+#define SP_TYPE_FECOLORMATRIX (sp_feColorMatrix_get_type())
+#define SP_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOLORMATRIX, SPFeColorMatrix))
+#define SP_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOLORMATRIX, SPFeColorMatrixClass))
+#define SP_IS_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOLORMATRIX))
+#define SP_IS_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOLORMATRIX))
+
+GType sp_feColorMatrix_get_type();
+
+#endif /* !SP_FECOLORMATRIX_FNS_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/filters/colormatrix.cpp b/src/filters/colormatrix.cpp
new file mode 100644 (file)
index 0000000..29c2458
--- /dev/null
@@ -0,0 +1,234 @@
+#define __SP_FECOLORMATRIX_CPP__
+
+/** \file
+ * SVG <feColorMatrix> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   Felipe Sanches <felipe.sanches@gmail.com>
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2007 Felipe C. da S. Sanches
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "colormatrix.h"
+#include "xml/repr.h"
+#include "helper-fns.h"
+
+#include "display/nr-filter-colormatrix.h"
+
+/* FeColorMatrix base class */
+
+static void sp_feColorMatrix_class_init(SPFeColorMatrixClass *klass);
+static void sp_feColorMatrix_init(SPFeColorMatrix *feColorMatrix);
+
+static void sp_feColorMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feColorMatrix_release(SPObject *object);
+static void sp_feColorMatrix_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feColorMatrix_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feColorMatrix_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feColorMatrix_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feColorMatrix_parent_class;
+
+GType
+sp_feColorMatrix_get_type()
+{
+    static GType feColorMatrix_type = 0;
+
+    if (!feColorMatrix_type) {
+        GTypeInfo feColorMatrix_info = {
+            sizeof(SPFeColorMatrixClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feColorMatrix_class_init,
+            NULL, NULL,
+            sizeof(SPFeColorMatrix),
+            16,
+            (GInstanceInitFunc) sp_feColorMatrix_init,
+            NULL,    /* value_table */
+        };
+        feColorMatrix_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeColorMatrix", &feColorMatrix_info, (GTypeFlags)0);
+    }
+    return feColorMatrix_type;
+}
+
+static void
+sp_feColorMatrix_class_init(SPFeColorMatrixClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feColorMatrix_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feColorMatrix_build;
+    sp_object_class->release = sp_feColorMatrix_release;
+    sp_object_class->write = sp_feColorMatrix_write;
+    sp_object_class->set = sp_feColorMatrix_set;
+    sp_object_class->update = sp_feColorMatrix_update;
+    sp_primitive_class->build_renderer = sp_feColorMatrix_build_renderer;
+}
+
+static void
+sp_feColorMatrix_init(SPFeColorMatrix */*feColorMatrix*/)
+{
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeColorMatrix variables.  For this to get called,
+ * 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_feColorMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feColorMatrix_parent_class)->build) {
+        ((SPObjectClass *) feColorMatrix_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "type");
+    sp_object_read_attr(object, "values");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feColorMatrix_release(SPObject *object)
+{
+    if (((SPObjectClass *) feColorMatrix_parent_class)->release)
+        ((SPObjectClass *) feColorMatrix_parent_class)->release(object);
+}
+
+static NR::FilterColorMatrixType sp_feColorMatrix_read_type(gchar const *value){
+    if (!value) return NR::COLORMATRIX_MATRIX; //matrix is default
+    switch(value[0]){
+        case 'm':
+            if (strcmp(value, "matrix") == 0) return NR::COLORMATRIX_MATRIX;
+            break;
+        case 's':
+            if (strcmp(value, "saturate") == 0) return NR::COLORMATRIX_SATURATE;
+            break;
+        case 'h':
+            if (strcmp(value, "hueRotate") == 0) return NR::COLORMATRIX_HUEROTATE;
+            break;
+        case 'l':
+            if (strcmp(value, "luminanceToAlpha") == 0) return NR::COLORMATRIX_LUMINANCETOALPHA;
+            break;
+    }
+    return NR::COLORMATRIX_MATRIX; //matrix is default
+}
+
+/**
+ * Sets a specific value in the SPFeColorMatrix.
+ */
+static void
+sp_feColorMatrix_set(SPObject *object, unsigned int key, gchar const *str)
+{
+    SPFeColorMatrix *feColorMatrix = SP_FECOLORMATRIX(object);
+    (void)feColorMatrix;
+
+    NR::FilterColorMatrixType read_type;
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+    switch(key) {
+        case SP_ATTR_TYPE:
+            read_type = sp_feColorMatrix_read_type(str);
+            if (feColorMatrix->type != read_type){
+                feColorMatrix->type = read_type;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_VALUES:
+            if (str){
+                feColorMatrix->values = helperfns_read_vector(str, 20);
+                feColorMatrix->value = helperfns_read_number(str, HELPERFNS_NO_WARNING);
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        default:
+            if (((SPObjectClass *) feColorMatrix_parent_class)->set)
+                ((SPObjectClass *) feColorMatrix_parent_class)->set(object, key, str);
+            break;
+    }
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feColorMatrix_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feColorMatrix_parent_class)->update) {
+        ((SPObjectClass *) feColorMatrix_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feColorMatrix_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feColorMatrix_parent_class)->write) {
+        ((SPObjectClass *) feColorMatrix_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feColorMatrix_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeColorMatrix *sp_colormatrix = SP_FECOLORMATRIX(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_COLORMATRIX);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterColorMatrix *nr_colormatrix = dynamic_cast<NR::FilterColorMatrix*>(nr_primitive);
+    g_assert(nr_colormatrix != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+    nr_colormatrix->set_type(sp_colormatrix->type);
+    nr_colormatrix->set_value(sp_colormatrix->value);
+    nr_colormatrix->set_values(sp_colormatrix->values);
+}
+
+/*
+  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/filters/colormatrix.h b/src/filters/colormatrix.h
new file mode 100644 (file)
index 0000000..4b9eda1
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef SP_FECOLORMATRIX_H_SEEN
+#define SP_FECOLORMATRIX_H_SEEN
+
+/** \file
+ * SVG <feColorMatrix> implementation, see ColorMatrix.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "colormatrix-fns.h"
+#include "display/nr-filter-colormatrix.h"
+#include <vector>
+
+/* FeColorMatrix base class */
+class SPFeColorMatrixClass;
+
+struct SPFeColorMatrix : public SPFilterPrimitive {
+    /** COLORMATRIX ATTRIBUTES HERE */
+    NR::FilterColorMatrixType type;
+    gdouble value;
+    std::vector<gdouble> values;
+};
+
+struct SPFeColorMatrixClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feColorMatrix_get_type();
+
+
+#endif /* !SP_FECOLORMATRIX_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/filters/componenttransfer-fns.h b/src/filters/componenttransfer-fns.h
new file mode 100644 (file)
index 0000000..4998377
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FECOMPONENTTRANSFER_FNS_H
+#define SP_FECOMPONENTTRANSFER_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeComponentTransfer;
+
+#define SP_TYPE_FECOMPONENTTRANSFER (sp_feComponentTransfer_get_type())
+#define SP_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransfer))
+#define SP_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransferClass))
+#define SP_IS_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPONENTTRANSFER))
+#define SP_IS_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPONENTTRANSFER))
+
+GType sp_feComponentTransfer_get_type();
+
+#endif /* !SP_FECOMPONENTTRANSFER_FNS_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/filters/componenttransfer-funcnode.cpp b/src/filters/componenttransfer-funcnode.cpp
new file mode 100644 (file)
index 0000000..72a4e87
--- /dev/null
@@ -0,0 +1,345 @@
+#define __SP_FEFUNCNODE_CPP__
+
+/** \file
+ * SVG <funcR>, <funcG>, <funcB> and <funcA> implementations.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *
+ * Copyright (C) 2006, 2007, 2008 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "attributes.h"
+#include "document.h"
+#include "componenttransfer.h"
+#include "componenttransfer-funcnode.h"
+#include "display/nr-filter-component-transfer.h"
+#include "xml/repr.h"
+#include "helper-fns.h"
+
+#define SP_MACROS_SILENT
+#include "macros.h"
+
+/* FeFuncNode class */
+
+static void sp_fefuncnode_class_init(SPFeFuncNodeClass *klass);
+static void sp_fefuncnode_init(SPFeFuncNode *fefuncnode);
+
+static void sp_fefuncnode_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_fefuncnode_release(SPObject *object);
+static void sp_fefuncnode_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_fefuncnode_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_fefuncnode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feFuncNode_parent_class;
+
+GType
+sp_fefuncR_get_type()
+{
+    static GType fefuncnode_type = 0;
+
+    if (!fefuncnode_type) {
+        GTypeInfo fefuncnode_info = {
+            sizeof(SPFeFuncNodeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_fefuncnode_class_init,
+            NULL, NULL,
+            sizeof(SPFeFuncNode),
+            16,
+            (GInstanceInitFunc) sp_fefuncnode_init,
+            NULL,    /* value_table */
+        };
+        fefuncnode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFuncR", &fefuncnode_info, (GTypeFlags)0);
+    }
+    return fefuncnode_type;
+}
+
+GType
+sp_fefuncG_get_type()
+{
+    static GType fefuncnode_type = 0;
+
+    if (!fefuncnode_type) {
+        GTypeInfo fefuncnode_info = {
+            sizeof(SPFeFuncNodeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_fefuncnode_class_init,
+            NULL, NULL,
+            sizeof(SPFeFuncNode),
+            16,
+            (GInstanceInitFunc) sp_fefuncnode_init,
+            NULL,    /* value_table */
+        };
+        fefuncnode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFuncG", &fefuncnode_info, (GTypeFlags)0);
+    }
+    return fefuncnode_type;
+}
+
+GType
+sp_fefuncB_get_type()
+{
+    static GType fefuncnode_type = 0;
+
+    if (!fefuncnode_type) {
+        GTypeInfo fefuncnode_info = {
+            sizeof(SPFeFuncNodeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_fefuncnode_class_init,
+            NULL, NULL,
+            sizeof(SPFeFuncNode),
+            16,
+            (GInstanceInitFunc) sp_fefuncnode_init,
+            NULL,    /* value_table */
+        };
+        fefuncnode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFuncB", &fefuncnode_info, (GTypeFlags)0);
+    }
+    return fefuncnode_type;
+}
+
+GType
+sp_fefuncA_get_type()
+{
+    static GType fefuncnode_type = 0;
+
+    if (!fefuncnode_type) {
+        GTypeInfo fefuncnode_info = {
+            sizeof(SPFeFuncNodeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_fefuncnode_class_init,
+            NULL, NULL,
+            sizeof(SPFeFuncNode),
+            16,
+            (GInstanceInitFunc) sp_fefuncnode_init,
+            NULL,    /* value_table */
+        };
+        fefuncnode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFuncA", &fefuncnode_info, (GTypeFlags)0);
+    }
+    return fefuncnode_type;
+}
+
+static void
+sp_fefuncnode_class_init(SPFeFuncNodeClass *klass)
+{
+
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feFuncNode_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_fefuncnode_build;
+    sp_object_class->release = sp_fefuncnode_release;
+    sp_object_class->write = sp_fefuncnode_write;
+    sp_object_class->set = sp_fefuncnode_set;
+    sp_object_class->update = sp_fefuncnode_update;
+}
+
+static void
+sp_fefuncnode_init(SPFeFuncNode *fefuncnode)
+{
+    fefuncnode->type = NR::COMPONENTTRANSFER_TYPE_IDENTITY;
+    //fefuncnode->tableValues = NULL;
+    fefuncnode->slope = 1;
+    fefuncnode->intercept = 0;
+    fefuncnode->amplitude = 1;
+    fefuncnode->exponent = 1;
+    fefuncnode->offset = 0;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPDistantLight variables.  For this to get called,
+ * 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_fefuncnode_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feFuncNode_parent_class)->build) {
+        ((SPObjectClass *) feFuncNode_parent_class)->build(object, document, repr);
+    }
+
+    //Read values of key attributes from XML nodes into object.
+    sp_object_read_attr(object, "type");
+    sp_object_read_attr(object, "tableValues");
+    sp_object_read_attr(object, "slope");
+    sp_object_read_attr(object, "intercept");
+    sp_object_read_attr(object, "amplitude");
+    sp_object_read_attr(object, "exponent");
+    sp_object_read_attr(object, "offset");
+
+
+//is this necessary?
+    sp_document_add_resource(document, "fefuncnode", object); //maybe feFuncR, fefuncG, feFuncB and fefuncA ?
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_fefuncnode_release(SPObject *object)
+{
+    //SPFeFuncNode *fefuncnode = SP_FEFUNCNODE(object);
+
+    if (SP_OBJECT_DOCUMENT(object)) {
+        /* Unregister ourselves */
+        sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fefuncnode", SP_OBJECT(object));
+    }
+
+//TODO: release resources here
+}
+
+static NR::FilterComponentTransferType sp_feComponenttransfer_read_type(gchar const *value){
+    if (!value) return NR::COMPONENTTRANSFER_TYPE_ERROR; //type attribute is REQUIRED.
+    switch(value[0]){
+        case 'i':
+            if (strncmp(value, "identity", 8) == 0) return NR::COMPONENTTRANSFER_TYPE_IDENTITY;
+            break;
+        case 't':
+            if (strncmp(value, "table", 5) == 0) return NR::COMPONENTTRANSFER_TYPE_TABLE;
+            break;
+        case 'd':
+            if (strncmp(value, "discrete", 8) == 0) return NR::COMPONENTTRANSFER_TYPE_DISCRETE;
+            break;
+        case 'l':
+            if (strncmp(value, "linear", 6) == 0) return NR::COMPONENTTRANSFER_TYPE_LINEAR;
+            break;
+        case 'g':
+            if (strncmp(value, "gamma", 5) == 0) return NR::COMPONENTTRANSFER_TYPE_GAMMA;
+            break;
+    }
+    return NR::COMPONENTTRANSFER_TYPE_ERROR; //type attribute is REQUIRED.
+}
+
+/**
+ * Sets a specific value in the SPFeFuncNode.
+ */
+static void
+sp_fefuncnode_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeFuncNode *feFuncNode = SP_FEFUNCNODE(object);
+    NR::FilterComponentTransferType type;
+    double read_num;
+    switch(key) {
+        case SP_ATTR_TYPE:
+            type = sp_feComponenttransfer_read_type(value);
+            if(type != feFuncNode->type) {
+                feFuncNode->type = type;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_TABLEVALUES:
+            if (value){
+                feFuncNode->tableValues = helperfns_read_vector(value);
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_SLOPE:
+            read_num = helperfns_read_number(value);
+            if (read_num != feFuncNode->slope) {
+                feFuncNode->slope = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_INTERCEPT:
+            read_num = helperfns_read_number(value);
+            if (read_num != feFuncNode->intercept) {
+                feFuncNode->intercept = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_AMPLITUDE:
+            read_num = helperfns_read_number(value);
+            if (read_num != feFuncNode->amplitude) {
+                feFuncNode->amplitude = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_EXPONENT:
+            read_num = helperfns_read_number(value);
+            if (read_num != feFuncNode->exponent) {
+                feFuncNode->exponent = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_OFFSET:
+            read_num = helperfns_read_number(value);
+            if (read_num != feFuncNode->offset) {
+                feFuncNode->offset = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        default:
+            if (((SPObjectClass *) feFuncNode_parent_class)->set)
+                ((SPObjectClass *) feFuncNode_parent_class)->set(object, key, value);
+            break;
+    }
+}
+
+/**
+ *  * Receives update notifications.
+ *   */
+static void
+sp_fefuncnode_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    SPFeFuncNode *feFuncNode = SP_FEFUNCNODE(object);
+    (void)feFuncNode;
+
+    if (flags & SP_OBJECT_MODIFIED_FLAG) {
+        /* do something to trigger redisplay, updates? */
+        //TODO
+        //sp_object_read_attr(object, "azimuth");
+        //sp_object_read_attr(object, "elevation");
+    }
+
+    if (((SPObjectClass *) feFuncNode_parent_class)->update) {
+        ((SPObjectClass *) feFuncNode_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_fefuncnode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    SPFeFuncNode *fefuncnode = SP_FEFUNCNODE(object);
+
+    if (!repr) {
+        repr = SP_OBJECT_REPR(object)->duplicate(doc);
+    }
+
+    (void)fefuncnode;
+    /*
+TODO: I'm not sure what to do here...
+
+    if (fefuncnode->azimuth_set)
+        sp_repr_set_css_double(repr, "azimuth", fefuncnode->azimuth);
+    if (fefuncnode->elevation_set)
+        sp_repr_set_css_double(repr, "elevation", fefuncnode->elevation);*/
+
+    if (((SPObjectClass *) feFuncNode_parent_class)->write) {
+        ((SPObjectClass *) feFuncNode_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+/*
+  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/filters/componenttransfer-funcnode.h b/src/filters/componenttransfer-funcnode.h
new file mode 100644 (file)
index 0000000..2f0b2fc
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef SP_FECOMPONENTTRANSFER_FUNCNODE_H_SEEN
+#define SP_FECOMPONENTTRANSFER_FUNCNODE_H_SEEN
+
+/** \file
+ * SVG <filter> implementation, see sp-filter.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *
+ * Copyright (C) 2006,2007 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-object.h"
+#include "display/nr-filter-component-transfer.h"
+
+#define SP_TYPE_FEFUNCR (sp_fefuncR_get_type())
+#define SP_TYPE_FEFUNCG (sp_fefuncG_get_type())
+#define SP_TYPE_FEFUNCB (sp_fefuncB_get_type())
+#define SP_TYPE_FEFUNCA (sp_fefuncA_get_type())
+
+#define SP_IS_FEFUNCR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCR))
+#define SP_IS_FEFUNCG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCG))
+#define SP_IS_FEFUNCB(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCB))
+#define SP_IS_FEFUNCA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCA))
+
+#define SP_FEFUNCNODE(obj) (SP_IS_FEFUNCR(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCR, SPFeFuncNode) : (SP_IS_FEFUNCG(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCG, SPFeFuncNode) : (SP_IS_FEFUNCB(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCB, SPFeFuncNode):(SP_IS_FEFUNCA(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCA, SPFeFuncNode): NULL))))
+
+#define SP_FEFUNCNODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFUNCNODE, SPFeFuncNodeClass))
+
+#define SP_IS_FEFUNCNODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFUNCNODE))
+
+/* Component Transfer funcNode class */
+
+class SPFeFuncNode;
+class SPFeFuncNodeClass;
+
+struct SPFeFuncNode : public SPObject {
+    NR::FilterComponentTransferType type;
+    std::vector<double> tableValues;
+    double slope;
+    double intercept;
+    double amplitude;
+    double exponent;
+    double offset;
+};
+
+struct SPFeFuncNodeClass {
+    SPObjectClass parent_class;
+};
+
+GType sp_fefuncR_get_type();
+GType sp_fefuncG_get_type();
+GType sp_fefuncB_get_type();
+GType sp_fefuncA_get_type();
+
+#endif /* !SP_FECOMPONENTTRANSFER_FUNCNODE_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/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp
new file mode 100644 (file)
index 0000000..09ea48b
--- /dev/null
@@ -0,0 +1,257 @@
+#define __SP_FECOMPONENTTRANSFER_CPP__
+
+/** \file
+ * SVG <feComponentTransfer> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include "document.h"
+#include "attributes.h"
+#include "svg/svg.h"
+#include "componenttransfer.h"
+#include "componenttransfer-funcnode.h"
+#include "xml/repr.h"
+//#include "display/nr-filter-component-transfer.h"
+
+/* FeComponentTransfer base class */
+
+static void sp_feComponentTransfer_class_init(SPFeComponentTransferClass *klass);
+static void sp_feComponentTransfer_init(SPFeComponentTransfer *feComponentTransfer);
+
+static void sp_feComponentTransfer_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feComponentTransfer_release(SPObject *object);
+static void sp_feComponentTransfer_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feComponentTransfer_update(SPObject *object, SPCtx *ctx, guint flags);
+static void sp_feComponentTransfer_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+static void sp_feComponentTransfer_remove_child(SPObject *object, Inkscape::XML::Node *child);
+static void sp_feComponentTransfer_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
+static Inkscape::XML::Node *sp_feComponentTransfer_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static SPFilterPrimitiveClass *feComponentTransfer_parent_class;
+
+GType
+sp_feComponentTransfer_get_type()
+{
+    static GType feComponentTransfer_type = 0;
+
+    if (!feComponentTransfer_type) {
+        GTypeInfo feComponentTransfer_info = {
+            sizeof(SPFeComponentTransferClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feComponentTransfer_class_init,
+            NULL, NULL,
+            sizeof(SPFeComponentTransfer),
+            16,
+            (GInstanceInitFunc) sp_feComponentTransfer_init,
+            NULL,    /* value_table */
+        };
+        feComponentTransfer_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeComponentTransfer", &feComponentTransfer_info, (GTypeFlags)0);
+    }
+    return feComponentTransfer_type;
+}
+
+static void
+sp_feComponentTransfer_class_init(SPFeComponentTransferClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+    feComponentTransfer_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feComponentTransfer_build;
+    sp_object_class->release = sp_feComponentTransfer_release;
+    sp_object_class->write = sp_feComponentTransfer_write;
+    sp_object_class->set = sp_feComponentTransfer_set;
+    sp_object_class->update = sp_feComponentTransfer_update;
+    sp_object_class->child_added = sp_feComponentTransfer_child_added;
+    sp_object_class->remove_child = sp_feComponentTransfer_remove_child;
+
+    sp_primitive_class->build_renderer = sp_feComponentTransfer_build_renderer;
+}
+
+static void
+sp_feComponentTransfer_init(SPFeComponentTransfer */*feComponentTransfer*/)
+{}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeComponentTransfer variables.  For this to get called,
+ * 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_feComponentTransfer_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->build) {
+        ((SPObjectClass *) feComponentTransfer_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+
+    //do we need this?
+    sp_document_add_resource(document, "feComponentTransfer", object);
+}
+
+static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_componenttransfer)
+{
+    if (sp_componenttransfer->renderer) {
+        SPObject* node = sp_componenttransfer->children;
+        for(;node;node=node->next){
+            int i=4;
+            if (SP_IS_FEFUNCR(node)) i=0;
+            if (SP_IS_FEFUNCG(node)) i=1;
+            if (SP_IS_FEFUNCB(node)) i=2;
+            if (SP_IS_FEFUNCA(node)) i=3;
+            if (i==4) break;
+            sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) node)->type;
+            sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) node)->tableValues;
+            sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) node)->slope;
+            sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) node)->intercept;
+            sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) node)->amplitude;
+            sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) node)->exponent;
+            sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) node)->offset;
+        }
+    }
+}
+
+/**
+ * Callback for child_added event.
+ */
+static void
+sp_feComponentTransfer_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+{
+    g_warning("child_added");
+    SPFeComponentTransfer *f = SP_FECOMPONENTTRANSFER(object);
+
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->child_added)
+        (* ((SPObjectClass *) feComponentTransfer_parent_class)->child_added)(object, child, ref);
+
+    sp_feComponentTransfer_children_modified(f);
+    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+
+
+/**
+ * Callback for remove_child event.
+ */
+static void
+sp_feComponentTransfer_remove_child(SPObject *object, Inkscape::XML::Node *child)
+{
+    SPFeComponentTransfer *f = SP_FECOMPONENTTRANSFER(object);
+
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->remove_child)
+        (* ((SPObjectClass *) feComponentTransfer_parent_class)->remove_child)(object, child);
+
+    sp_feComponentTransfer_children_modified(f);
+    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feComponentTransfer_release(SPObject *object)
+{
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->release)
+        ((SPObjectClass *) feComponentTransfer_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeComponentTransfer.
+ */
+static void
+sp_feComponentTransfer_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeComponentTransfer *feComponentTransfer = SP_FECOMPONENTTRANSFER(object);
+    (void)feComponentTransfer;
+
+    switch(key) {
+        /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feComponentTransfer_parent_class)->set)
+                ((SPObjectClass *) feComponentTransfer_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feComponentTransfer_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->update) {
+        ((SPObjectClass *) feComponentTransfer_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feComponentTransfer_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->write) {
+        ((SPObjectClass *) feComponentTransfer_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feComponentTransfer_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeComponentTransfer *sp_componenttransfer = SP_FECOMPONENTTRANSFER(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_COMPONENTTRANSFER);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterComponentTransfer *nr_componenttransfer = dynamic_cast<NR::FilterComponentTransfer*>(nr_primitive);
+    g_assert(nr_componenttransfer != NULL);
+
+    sp_componenttransfer->renderer = nr_componenttransfer;
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+
+    sp_feComponentTransfer_children_modified(sp_componenttransfer);    //do we need it?!
+}
+
+/*
+  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/filters/componenttransfer.h b/src/filters/componenttransfer.h
new file mode 100644 (file)
index 0000000..515825d
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef SP_FECOMPONENTTRANSFER_H_SEEN
+#define SP_FECOMPONENTTRANSFER_H_SEEN
+
+/** \file
+ * SVG <feComponentTransfer> implementation, see ComponentTransfer.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "componenttransfer-fns.h"
+#include "display/nr-filter-component-transfer.h"
+#include <vector>
+
+/* FeComponentTransfer base class */
+class SPFeComponentTransferClass;
+
+struct SPFeComponentTransfer : public SPFilterPrimitive {
+    /** COMPONENTTRANSFER ATTRIBUTES HERE */
+
+    NR::FilterComponentTransfer *renderer;
+};
+
+struct SPFeComponentTransferClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feComponentTransfer_get_type();
+
+
+#endif /* !SP_FECOMPONENTTRANSFER_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/filters/composite-fns.h b/src/filters/composite-fns.h
new file mode 100644 (file)
index 0000000..c79cb17
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FECOMPOSITE_FNS_H
+#define SP_FECOMPOSITE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeComposite;
+
+#define SP_TYPE_FECOMPOSITE (sp_feComposite_get_type())
+#define SP_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPOSITE, SPFeComposite))
+#define SP_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPOSITE, SPFeCompositeClass))
+#define SP_IS_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPOSITE))
+#define SP_IS_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPOSITE))
+
+GType sp_feComposite_get_type();
+
+#endif /* !SP_FECOMPOSITE_FNS_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/filters/composite.cpp b/src/filters/composite.cpp
new file mode 100644 (file)
index 0000000..61658ba
--- /dev/null
@@ -0,0 +1,283 @@
+#define __SP_FECOMPOSITE_CPP__
+
+/** \file
+ * SVG <feComposite> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "composite.h"
+#include "helper-fns.h"
+#include "xml/repr.h"
+#include "display/nr-filter-composite.h"
+
+/* FeComposite base class */
+
+static void sp_feComposite_class_init(SPFeCompositeClass *klass);
+static void sp_feComposite_init(SPFeComposite *feComposite);
+
+static void sp_feComposite_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feComposite_release(SPObject *object);
+static void sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feComposite_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feComposite_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feComposite_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feComposite_parent_class;
+
+GType
+sp_feComposite_get_type()
+{
+    static GType feComposite_type = 0;
+
+    if (!feComposite_type) {
+        GTypeInfo feComposite_info = {
+            sizeof(SPFeCompositeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feComposite_class_init,
+            NULL, NULL,
+            sizeof(SPFeComposite),
+            16,
+            (GInstanceInitFunc) sp_feComposite_init,
+            NULL,    /* value_table */
+        };
+        feComposite_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeComposite", &feComposite_info, (GTypeFlags)0);
+    }
+    return feComposite_type;
+}
+
+static void
+sp_feComposite_class_init(SPFeCompositeClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feComposite_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feComposite_build;
+    sp_object_class->release = sp_feComposite_release;
+    sp_object_class->write = sp_feComposite_write;
+    sp_object_class->set = sp_feComposite_set;
+    sp_object_class->update = sp_feComposite_update;
+
+    sp_primitive_class->build_renderer = sp_feComposite_build_renderer;
+}
+
+static void
+sp_feComposite_init(SPFeComposite *feComposite)
+{
+    feComposite->composite_operator = COMPOSITE_DEFAULT;
+    feComposite->k1 = 0;
+    feComposite->k2 = 0;
+    feComposite->k3 = 0;
+    feComposite->k4 = 0;
+    feComposite->in2 = NR::NR_FILTER_SLOT_NOT_SET;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeComposite variables.  For this to get called,
+ * 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_feComposite_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feComposite_parent_class)->build) {
+        ((SPObjectClass *) feComposite_parent_class)->build(object, document, repr);
+    }
+
+    SPFeComposite *composite = SP_FECOMPOSITE(object);
+
+    sp_object_read_attr(object, "operator");
+    if (composite->composite_operator == COMPOSITE_ARITHMETIC) {
+        sp_object_read_attr(object, "k1");
+        sp_object_read_attr(object, "k2");
+        sp_object_read_attr(object, "k3");
+        sp_object_read_attr(object, "k4");
+    }
+    sp_object_read_attr(object, "in2");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feComposite_release(SPObject *object)
+{
+    if (((SPObjectClass *) feComposite_parent_class)->release)
+        ((SPObjectClass *) feComposite_parent_class)->release(object);
+}
+
+static FeCompositeOperator
+sp_feComposite_read_operator(gchar const *value) {
+    if (!value) return COMPOSITE_DEFAULT;
+
+    if (strcmp(value, "over") == 0) return COMPOSITE_OVER;
+    else if (strcmp(value, "in") == 0) return COMPOSITE_IN;
+    else if (strcmp(value, "out") == 0) return COMPOSITE_OUT;
+    else if (strcmp(value, "atop") == 0) return COMPOSITE_ATOP;
+    else if (strcmp(value, "xor") == 0) return COMPOSITE_XOR;
+    else if (strcmp(value, "arithmetic") == 0) return COMPOSITE_ARITHMETIC;
+    return COMPOSITE_DEFAULT;
+}
+
+/**
+ * Sets a specific value in the SPFeComposite.
+ */
+static void
+sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeComposite *feComposite = SP_FECOMPOSITE(object);
+    (void)feComposite;
+
+    int input;
+    FeCompositeOperator op;
+    double k_n;
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        case SP_ATTR_OPERATOR:
+            op = sp_feComposite_read_operator(value);
+            if (op != feComposite->composite_operator) {
+                feComposite->composite_operator = op;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+
+        case SP_ATTR_K1:
+            k_n = helperfns_read_number(value);
+            if (k_n != feComposite->k1) {
+                feComposite->k1 = k_n;
+                if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
+                    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+
+        case SP_ATTR_K2:
+            k_n = helperfns_read_number(value);
+            if (k_n != feComposite->k2) {
+                feComposite->k2 = k_n;
+                if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
+                    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+
+        case SP_ATTR_K3:
+            k_n = helperfns_read_number(value);
+            if (k_n != feComposite->k3) {
+                feComposite->k3 = k_n;
+                if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
+                    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+
+        case SP_ATTR_K4:
+            k_n = helperfns_read_number(value);
+            if (k_n != feComposite->k4) {
+                feComposite->k4 = k_n;
+                if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
+                    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+
+        case SP_ATTR_IN2:
+            input = sp_filter_primitive_read_in(feComposite, value);
+            if (input != feComposite->in2) {
+                feComposite->in2 = input;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+
+        default:
+            if (((SPObjectClass *) feComposite_parent_class)->set)
+                ((SPObjectClass *) feComposite_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feComposite_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feComposite_parent_class)->update) {
+        ((SPObjectClass *) feComposite_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feComposite_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feComposite_parent_class)->write) {
+        ((SPObjectClass *) feComposite_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feComposite_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeComposite *sp_composite = SP_FECOMPOSITE(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_COMPOSITE);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterComposite *nr_composite = dynamic_cast<NR::FilterComposite*>(nr_primitive);
+    g_assert(nr_composite != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_composite->set_operator(sp_composite->composite_operator);
+    nr_composite->set_input(1, sp_composite->in2);
+    if (sp_composite->composite_operator == COMPOSITE_ARITHMETIC) {
+        nr_composite->set_arithmetic(sp_composite->k1, sp_composite->k2,
+                                     sp_composite->k3, sp_composite->k4);
+    }
+}
+
+
+/*
+  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/filters/composite.h b/src/filters/composite.h
new file mode 100644 (file)
index 0000000..095d761
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef SP_FECOMPOSITE_H_SEEN
+#define SP_FECOMPOSITE_H_SEEN
+
+/** \file
+ * SVG <feComposite> implementation, see Composite.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "composite-fns.h"
+
+enum FeCompositeOperator {
+    // Default value is 'over', but let's distinquish specifying the
+    // default and implicitely using the default
+    COMPOSITE_DEFAULT,
+    COMPOSITE_OVER,
+    COMPOSITE_IN,
+    COMPOSITE_OUT,
+    COMPOSITE_ATOP,
+    COMPOSITE_XOR,
+    COMPOSITE_ARITHMETIC,
+    COMPOSITE_ENDOPERATOR
+};
+
+/* FeComposite base class */
+class SPFeCompositeClass;
+
+struct SPFeComposite : public SPFilterPrimitive {
+    FeCompositeOperator composite_operator;
+    double k1, k2, k3, k4;
+    int in2;
+};
+
+struct SPFeCompositeClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feComposite_get_type();
+
+
+#endif /* !SP_FECOMPOSITE_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/filters/convolvematrix-fns.h b/src/filters/convolvematrix-fns.h
new file mode 100644 (file)
index 0000000..76baf7f
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FECONVOLVEMATRIX_FNS_H
+#define SP_FECONVOLVEMATRIX_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeConvolveMatrix;
+
+#define SP_TYPE_FECONVOLVEMATRIX (sp_feConvolveMatrix_get_type())
+#define SP_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrix))
+#define SP_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrixClass))
+#define SP_IS_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECONVOLVEMATRIX))
+#define SP_IS_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECONVOLVEMATRIX))
+
+GType sp_feConvolveMatrix_get_type();
+
+#endif /* !SP_FECONVOLVEMATRIX_FNS_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/filters/convolvematrix.cpp b/src/filters/convolvematrix.cpp
new file mode 100644 (file)
index 0000000..a930bc4
--- /dev/null
@@ -0,0 +1,338 @@
+#define __SP_FECONVOLVEMATRIX_CPP__
+
+/** \file
+ * SVG <feConvolveMatrix> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include <vector>
+#include "attributes.h"
+#include "svg/svg.h"
+#include "convolvematrix.h"
+#include "helper-fns.h"
+#include "xml/repr.h"
+#include "display/nr-filter-convolve-matrix.h"
+#include <math.h>
+
+/* FeConvolveMatrix base class */
+
+static void sp_feConvolveMatrix_class_init(SPFeConvolveMatrixClass *klass);
+static void sp_feConvolveMatrix_init(SPFeConvolveMatrix *feConvolveMatrix);
+
+static void sp_feConvolveMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feConvolveMatrix_release(SPObject *object);
+static void sp_feConvolveMatrix_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feConvolveMatrix_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feConvolveMatrix_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feConvolveMatrix_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feConvolveMatrix_parent_class;
+
+GType
+sp_feConvolveMatrix_get_type()
+{
+    static GType feConvolveMatrix_type = 0;
+
+    if (!feConvolveMatrix_type) {
+        GTypeInfo feConvolveMatrix_info = {
+            sizeof(SPFeConvolveMatrixClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feConvolveMatrix_class_init,
+            NULL, NULL,
+            sizeof(SPFeConvolveMatrix),
+            16,
+            (GInstanceInitFunc) sp_feConvolveMatrix_init,
+            NULL,    /* value_table */
+        };
+        feConvolveMatrix_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeConvolveMatrix", &feConvolveMatrix_info, (GTypeFlags)0);
+    }
+    return feConvolveMatrix_type;
+}
+
+static void
+sp_feConvolveMatrix_class_init(SPFeConvolveMatrixClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feConvolveMatrix_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feConvolveMatrix_build;
+    sp_object_class->release = sp_feConvolveMatrix_release;
+    sp_object_class->write = sp_feConvolveMatrix_write;
+    sp_object_class->set = sp_feConvolveMatrix_set;
+    sp_object_class->update = sp_feConvolveMatrix_update;
+
+    sp_primitive_class->build_renderer = sp_feConvolveMatrix_build_renderer;
+}
+
+static void
+sp_feConvolveMatrix_init(SPFeConvolveMatrix *feConvolveMatrix)
+{
+    //Setting default values:
+    feConvolveMatrix->order.set("3 3");
+    feConvolveMatrix->targetX = 1;
+    feConvolveMatrix->targetY = 1;
+    feConvolveMatrix->edgeMode = NR::CONVOLVEMATRIX_EDGEMODE_DUPLICATE;
+    feConvolveMatrix->preserveAlpha = false;
+
+    //some helper variables:
+    feConvolveMatrix->targetXIsSet = false;
+    feConvolveMatrix->targetYIsSet = false;
+    feConvolveMatrix->kernelMatrixIsSet = false;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeConvolveMatrix variables.  For this to get called,
+ * 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_feConvolveMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feConvolveMatrix_parent_class)->build) {
+        ((SPObjectClass *) feConvolveMatrix_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "order");
+    sp_object_read_attr(object, "kernelMatrix");
+    sp_object_read_attr(object, "divisor");
+    sp_object_read_attr(object, "bias");
+    sp_object_read_attr(object, "targetX");
+    sp_object_read_attr(object, "targetY");
+    sp_object_read_attr(object, "edgeMode");
+    sp_object_read_attr(object, "kernelUnitLength");
+    sp_object_read_attr(object, "preserveAlpha");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feConvolveMatrix_release(SPObject *object)
+{
+    if (((SPObjectClass *) feConvolveMatrix_parent_class)->release)
+        ((SPObjectClass *) feConvolveMatrix_parent_class)->release(object);
+}
+
+static NR::FilterConvolveMatrixEdgeMode sp_feConvolveMatrix_read_edgeMode(gchar const *value){
+    if (!value) return NR::CONVOLVEMATRIX_EDGEMODE_DUPLICATE; //duplicate is default
+    switch(value[0]){
+        case 'd':
+            if (strncmp(value, "duplicate", 9) == 0) return NR::CONVOLVEMATRIX_EDGEMODE_DUPLICATE;
+            break;
+        case 'w':
+            if (strncmp(value, "wrap", 4) == 0) return NR::CONVOLVEMATRIX_EDGEMODE_WRAP;
+            break;
+        case 'n':
+            if (strncmp(value, "none", 4) == 0) return NR::CONVOLVEMATRIX_EDGEMODE_NONE;
+            break;
+    }
+    return NR::CONVOLVEMATRIX_EDGEMODE_DUPLICATE; //duplicate is default
+}
+
+/**
+ * Sets a specific value in the SPFeConvolveMatrix.
+ */
+static void
+sp_feConvolveMatrix_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeConvolveMatrix *feConvolveMatrix = SP_FECONVOLVEMATRIX(object);
+    (void)feConvolveMatrix;
+    double read_num;
+    int read_int;
+    bool read_bool;
+    NR::FilterConvolveMatrixEdgeMode read_mode;
+   
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        case SP_ATTR_ORDER:
+            feConvolveMatrix->order.set(value);
+            //From SVG spec: If <orderY> is not provided, it defaults to <orderX>.
+            if (feConvolveMatrix->order.optNumIsSet() == false)
+                feConvolveMatrix->order.setOptNumber(feConvolveMatrix->order.getNumber());
+            if (feConvolveMatrix->targetXIsSet == false) feConvolveMatrix->targetX = (int) floor(feConvolveMatrix->order.getNumber()/2);
+            if (feConvolveMatrix->targetYIsSet == false) feConvolveMatrix->targetY = (int) floor(feConvolveMatrix->order.getOptNumber()/2);
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_KERNELMATRIX:
+            if (value){
+                feConvolveMatrix->kernelMatrixIsSet = true;
+                feConvolveMatrix->kernelMatrix = helperfns_read_vector(value, (int) (feConvolveMatrix->order.getNumber() * feConvolveMatrix->order.getOptNumber()));
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            } else {
+                g_warning("For feConvolveMatrix you MUST pass a kernelMatrix parameter!");
+            }
+            break;
+        case SP_ATTR_DIVISOR:
+            if (!value){
+                read_num = 1; 
+            } else {
+                read_num = helperfns_read_number(value);
+                if (read_num == 0) {
+                    if (feConvolveMatrix->kernelMatrixIsSet){
+                        g_warning("You shouldn't pass a divisor value equal to 0! Assuming the sum of all values in kernelMatrix as the default value.");
+                        for (unsigned int i = 0; i< feConvolveMatrix->kernelMatrix.size(); i++)
+                            read_num += feConvolveMatrix->kernelMatrix[i];
+                    } else {
+                        g_warning("You shouldn't pass a divisor value equal to 0! Assuming 1 as the default value.");
+                        read_num = 1;
+                    }
+                }
+            }
+            if (read_num != feConvolveMatrix->divisor){
+                feConvolveMatrix->divisor = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_BIAS:
+            read_num = 0;
+            if (value) read_num = helperfns_read_number(value);
+            if (read_num != feConvolveMatrix->bias){
+                feConvolveMatrix->bias = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_TARGETX:
+            read_int = (int) helperfns_read_number(value);
+            if (read_int < 0 || read_int > feConvolveMatrix->order.getNumber()){
+                g_warning("targetX must be a value between 0 and orderX! Assuming orderX as default value.");
+                read_int = (int) feConvolveMatrix->order.getNumber();
+            }
+            feConvolveMatrix->targetXIsSet = true;
+            if (read_int != feConvolveMatrix->targetX){
+                feConvolveMatrix->targetX = read_int;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_TARGETY:
+            read_int = (int) helperfns_read_number(value);
+            if (read_int < 0 || read_int > feConvolveMatrix->order.getOptNumber()){
+                g_warning("targetY must be a value between 0 and orderY! Assuming orderY as default value.");
+                read_int = (int) feConvolveMatrix->order.getOptNumber();
+            }
+            feConvolveMatrix->targetYIsSet = true;
+            if (read_int != feConvolveMatrix->targetY){
+                feConvolveMatrix->targetY = read_int;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_EDGEMODE:
+            read_mode = sp_feConvolveMatrix_read_edgeMode(value);
+            if (read_mode != feConvolveMatrix->edgeMode){
+                feConvolveMatrix->edgeMode = read_mode;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_KERNELUNITLENGTH:
+            feConvolveMatrix->kernelUnitLength.set(value);
+            //From SVG spec: If the <dy> value is not specified, it defaults to the same value as <dx>.
+            if (feConvolveMatrix->kernelUnitLength.optNumIsSet() == false)
+                feConvolveMatrix->kernelUnitLength.setOptNumber(feConvolveMatrix->kernelUnitLength.getNumber());
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_PRESERVEALPHA:
+            read_bool = helperfns_read_bool(value, false);
+            if (read_bool != feConvolveMatrix->preserveAlpha){
+                feConvolveMatrix->preserveAlpha = read_bool;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        default:
+            if (((SPObjectClass *) feConvolveMatrix_parent_class)->set)
+                ((SPObjectClass *) feConvolveMatrix_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feConvolveMatrix_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feConvolveMatrix_parent_class)->update) {
+        ((SPObjectClass *) feConvolveMatrix_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feConvolveMatrix_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feConvolveMatrix_parent_class)->write) {
+        ((SPObjectClass *) feConvolveMatrix_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feConvolveMatrix_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeConvolveMatrix *sp_convolve = SP_FECONVOLVEMATRIX(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_CONVOLVEMATRIX);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterConvolveMatrix *nr_convolve = dynamic_cast<NR::FilterConvolveMatrix*>(nr_primitive);
+    g_assert(nr_convolve != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_convolve->set_targetX(sp_convolve->targetX);
+    nr_convolve->set_targetY(sp_convolve->targetY);
+    nr_convolve->set_orderX( (int)sp_convolve->order.getNumber() );
+    nr_convolve->set_orderY( (int)sp_convolve->order.getOptNumber() );
+    nr_convolve->set_kernelMatrix(sp_convolve->kernelMatrix);
+    nr_convolve->set_divisor(sp_convolve->divisor);
+    nr_convolve->set_bias(sp_convolve->bias);
+    nr_convolve->set_preserveAlpha(sp_convolve->preserveAlpha);
+
+}
+/*
+  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/filters/convolvematrix.h b/src/filters/convolvematrix.h
new file mode 100644 (file)
index 0000000..991f639
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef SP_FECONVOLVEMATRIX_H_SEEN
+#define SP_FECONVOLVEMATRIX_H_SEEN
+
+/** \file
+ * SVG <feConvolveMatrix> implementation, see ConvolveMatrix.cpp.
+ */
+/*
+ * Authors:
+ *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "convolvematrix-fns.h"
+#include "number-opt-number.h"
+#include "display/nr-filter-convolve-matrix.h"
+#include <vector>
+
+/* FeConvolveMatrix base class */
+class SPFeConvolveMatrixClass;
+
+struct SPFeConvolveMatrix : public SPFilterPrimitive {
+    /* CONVOLVEMATRIX ATTRIBUTES */
+    NumberOptNumber order;
+    std::vector<gdouble> kernelMatrix;
+    double divisor, bias;
+    int targetX, targetY;
+    NR::FilterConvolveMatrixEdgeMode edgeMode;
+    NumberOptNumber kernelUnitLength;
+    bool preserveAlpha;
+    //some helper variables:
+    bool targetXIsSet;
+    bool targetYIsSet;
+    bool divisorIsSet;
+    bool kernelMatrixIsSet;
+};
+
+struct SPFeConvolveMatrixClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feConvolveMatrix_get_type();
+
+
+#endif /* !SP_FECONVOLVEMATRIX_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/filters/diffuselighting-fns.h b/src/filters/diffuselighting-fns.h
new file mode 100644 (file)
index 0000000..b91ed80
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEDIFFUSELIGHTING_FNS_H
+#define SP_FEDIFFUSELIGHTING_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeDiffuseLighting;
+
+#define SP_TYPE_FEDIFFUSELIGHTING (sp_feDiffuseLighting_get_type())
+#define SP_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLighting))
+#define SP_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLightingClass))
+#define SP_IS_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDIFFUSELIGHTING))
+#define SP_IS_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDIFFUSELIGHTING))
+
+GType sp_feDiffuseLighting_get_type();
+
+#endif /* !SP_FEDIFFUSELIGHTING_FNS_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/filters/diffuselighting.cpp b/src/filters/diffuselighting.cpp
new file mode 100644 (file)
index 0000000..a4935bf
--- /dev/null
@@ -0,0 +1,386 @@
+#define __SP_FEDIFFUSELIGHTING_CPP__
+
+/** \file
+ * SVG <feDiffuseLighting> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *               2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-object.h"
+#include "svg/svg-color.h"
+#include "diffuselighting.h"
+#include "xml/repr.h"
+#include "display/nr-filter-diffuselighting.h"
+
+/* FeDiffuseLighting base class */
+
+static void sp_feDiffuseLighting_class_init(SPFeDiffuseLightingClass *klass);
+static void sp_feDiffuseLighting_init(SPFeDiffuseLighting *feDiffuseLighting);
+
+static void sp_feDiffuseLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feDiffuseLighting_release(SPObject *object);
+static void sp_feDiffuseLighting_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feDiffuseLighting_update(SPObject *object, SPCtx *ctx, guint flags);
+//we assume that svg:feDiffuseLighting can have any number of children
+//only the first one is considered as the light source of the filter
+//TODO is that right?
+//if not modify child_added and remove_child to raise errors
+static void sp_feDiffuseLighting_child_added(SPObject *object,
+                                    Inkscape::XML::Node *child,
+                                    Inkscape::XML::Node *ref);
+static void sp_feDiffuseLighting_remove_child(SPObject *object, Inkscape::XML::Node *child);
+static void sp_feDiffuseLighting_order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref);
+static Inkscape::XML::Node *sp_feDiffuseLighting_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feDiffuseLighting_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+static void sp_feDiffuseLighting_children_modified(SPFeDiffuseLighting *sp_diffuselighting);
+
+static SPFilterPrimitiveClass *feDiffuseLighting_parent_class;
+
+GType
+sp_feDiffuseLighting_get_type()
+{
+    static GType feDiffuseLighting_type = 0;
+
+    if (!feDiffuseLighting_type) {
+        GTypeInfo feDiffuseLighting_info = {
+            sizeof(SPFeDiffuseLightingClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feDiffuseLighting_class_init,
+            NULL, NULL,
+            sizeof(SPFeDiffuseLighting),
+            16,
+            (GInstanceInitFunc) sp_feDiffuseLighting_init,
+            NULL,    /* value_table */
+        };
+        feDiffuseLighting_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeDiffuseLighting", &feDiffuseLighting_info, (GTypeFlags)0);
+    }
+    return feDiffuseLighting_type;
+}
+
+static void
+sp_feDiffuseLighting_class_init(SPFeDiffuseLightingClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+    feDiffuseLighting_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feDiffuseLighting_build;
+    sp_object_class->release = sp_feDiffuseLighting_release;
+    sp_object_class->write = sp_feDiffuseLighting_write;
+    sp_object_class->set = sp_feDiffuseLighting_set;
+    sp_object_class->update = sp_feDiffuseLighting_update;
+    sp_object_class->child_added = sp_feDiffuseLighting_child_added;
+    sp_object_class->remove_child = sp_feDiffuseLighting_remove_child;
+    sp_object_class->order_changed = sp_feDiffuseLighting_order_changed;
+
+    sp_primitive_class->build_renderer = sp_feDiffuseLighting_build_renderer;
+}
+
+static void
+sp_feDiffuseLighting_init(SPFeDiffuseLighting *feDiffuseLighting)
+{
+    feDiffuseLighting->surfaceScale = 1;
+    feDiffuseLighting->diffuseConstant = 1;
+    feDiffuseLighting->lighting_color = 0xffffffff;
+    //TODO kernelUnit
+    feDiffuseLighting->renderer = NULL;
+
+    feDiffuseLighting->surfaceScale_set = FALSE;
+    feDiffuseLighting->diffuseConstant_set = FALSE;
+    feDiffuseLighting->lighting_color_set = FALSE;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeDiffuseLighting variables.  For this to get called,
+ * 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_feDiffuseLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->build) {
+        ((SPObjectClass *) feDiffuseLighting_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "surfaceScale");
+    sp_object_read_attr(object, "diffuseConstant");
+    sp_object_read_attr(object, "kernelUnitLength");
+    sp_object_read_attr(object, "lighting-color");
+    
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feDiffuseLighting_release(SPObject *object)
+{
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->release)
+        ((SPObjectClass *) feDiffuseLighting_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeDiffuseLighting.
+ */
+static void
+sp_feDiffuseLighting_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeDiffuseLighting *feDiffuseLighting = SP_FEDIFFUSELIGHTING(object);
+    gchar const *cend_ptr = NULL;
+    gchar *end_ptr = NULL;
+    
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+//TODO test forbidden values
+        case SP_ATTR_SURFACESCALE:
+            end_ptr = NULL;
+            if (value) {
+                feDiffuseLighting->surfaceScale = g_ascii_strtod(value, &end_ptr);
+                if (end_ptr) {
+                    feDiffuseLighting->surfaceScale_set = TRUE;
+                }
+            } 
+            if (!value || !end_ptr) {
+                feDiffuseLighting->surfaceScale = 1;
+                feDiffuseLighting->surfaceScale_set = FALSE;
+            }
+            if (feDiffuseLighting->renderer) {
+                feDiffuseLighting->renderer->surfaceScale = feDiffuseLighting->surfaceScale;
+            }
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_DIFFUSECONSTANT:
+            end_ptr = NULL;
+            if (value) {
+                feDiffuseLighting->diffuseConstant = g_ascii_strtod(value, &end_ptr);
+                if (end_ptr && feDiffuseLighting->diffuseConstant >= 0) {
+                    feDiffuseLighting->diffuseConstant_set = TRUE;
+                } else {
+                    end_ptr = NULL;
+                    g_warning("feDiffuseLighting: diffuseConstant should be a positive number ... defaulting to 1");
+                }
+            } 
+            if (!value || !end_ptr) {
+                feDiffuseLighting->diffuseConstant = 1;
+                feDiffuseLighting->diffuseConstant_set = FALSE;
+            }
+            if (feDiffuseLighting->renderer) {
+                feDiffuseLighting->renderer->diffuseConstant = feDiffuseLighting->diffuseConstant;
+    }
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_KERNELUNITLENGTH:
+            //TODO kernelUnit
+            //feDiffuseLighting->kernelUnitLength.set(value);
+            /*TODOif (feDiffuseLighting->renderer) {
+                feDiffuseLighting->renderer->surfaceScale = feDiffuseLighting->renderer;
+            }
+            */
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_PROP_LIGHTING_COLOR:
+            cend_ptr = NULL;
+            feDiffuseLighting->lighting_color = sp_svg_read_color(value, &cend_ptr, 0xffffffff);
+            //if a value was read
+            if (cend_ptr) {
+                feDiffuseLighting->lighting_color_set = TRUE; 
+            } else {
+                //lighting_color already contains the default value
+                feDiffuseLighting->lighting_color_set = FALSE; 
+            }
+            if (feDiffuseLighting->renderer) {
+                feDiffuseLighting->renderer->lighting_color = feDiffuseLighting->lighting_color;
+            }
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        default:
+            if (((SPObjectClass *) feDiffuseLighting_parent_class)->set)
+                ((SPObjectClass *) feDiffuseLighting_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feDiffuseLighting_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG)) {
+        sp_object_read_attr(object, "surfaceScale");
+        sp_object_read_attr(object, "diffuseConstant");
+        sp_object_read_attr(object, "kernelUnit");
+        sp_object_read_attr(object, "lighting-color");
+    }
+
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->update) {
+        ((SPObjectClass *) feDiffuseLighting_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feDiffuseLighting_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    SPFeDiffuseLighting *fediffuselighting = SP_FEDIFFUSELIGHTING(object);
+    
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+    
+    if (fediffuselighting->surfaceScale_set)
+        sp_repr_set_css_double(repr, "surfaceScale", fediffuselighting->surfaceScale);
+    else
+        repr->setAttribute("surfaceScale", NULL);
+    if (fediffuselighting->diffuseConstant_set)
+        sp_repr_set_css_double(repr, "diffuseConstant", fediffuselighting->diffuseConstant);
+    else
+        repr->setAttribute("diffuseConstant", NULL);
+   /*TODO kernelUnits */ 
+    if (fediffuselighting->lighting_color_set) {
+        gchar c[64];
+        sp_svg_write_color(c, sizeof(c), fediffuselighting->lighting_color);
+        repr->setAttribute("lighting-color", c);
+    } else
+        repr->setAttribute("lighting-color", NULL);
+        
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->write) {
+        ((SPObjectClass *) feDiffuseLighting_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+/**
+ * Callback for child_added event.
+ */
+static void
+sp_feDiffuseLighting_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+{
+    SPFeDiffuseLighting *f = SP_FEDIFFUSELIGHTING(object);
+
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->child_added)
+        (* ((SPObjectClass *) feDiffuseLighting_parent_class)->child_added)(object, child, ref);
+
+    sp_feDiffuseLighting_children_modified(f);
+    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+            
+
+/**
+ * Callback for remove_child event.
+ */
+static void
+sp_feDiffuseLighting_remove_child(SPObject *object, Inkscape::XML::Node *child)
+{   
+    SPFeDiffuseLighting *f = SP_FEDIFFUSELIGHTING(object);
+
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->remove_child)
+        (* ((SPObjectClass *) feDiffuseLighting_parent_class)->remove_child)(object, child);   
+
+    sp_feDiffuseLighting_children_modified(f);
+    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+
+static void
+sp_feDiffuseLighting_order_changed (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref)
+{
+    SPFeDiffuseLighting *f = SP_FEDIFFUSELIGHTING(object);
+    if (((SPObjectClass *) (feDiffuseLighting_parent_class))->order_changed)
+        (* ((SPObjectClass *) (feDiffuseLighting_parent_class))->order_changed) (object, child, old_ref, new_ref);
+
+    sp_feDiffuseLighting_children_modified(f);
+    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+
+static void sp_feDiffuseLighting_children_modified(SPFeDiffuseLighting *sp_diffuselighting)
+{
+   if (sp_diffuselighting->renderer) {
+        sp_diffuselighting->renderer->light_type = NR::NO_LIGHT;
+        if (SP_IS_FEDISTANTLIGHT(sp_diffuselighting->children)) {
+            sp_diffuselighting->renderer->light_type = NR::DISTANT_LIGHT;
+            sp_diffuselighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_diffuselighting->children);
+        }
+        if (SP_IS_FEPOINTLIGHT(sp_diffuselighting->children)) {
+            sp_diffuselighting->renderer->light_type = NR::POINT_LIGHT;
+            sp_diffuselighting->renderer->light.point = SP_FEPOINTLIGHT(sp_diffuselighting->children);
+        }
+        if (SP_IS_FESPOTLIGHT(sp_diffuselighting->children)) {
+            sp_diffuselighting->renderer->light_type = NR::SPOT_LIGHT;
+            sp_diffuselighting->renderer->light.spot = SP_FESPOTLIGHT(sp_diffuselighting->children);
+        }
+   }
+}
+
+static void sp_feDiffuseLighting_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeDiffuseLighting *sp_diffuselighting = SP_FEDIFFUSELIGHTING(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_DIFFUSELIGHTING);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterDiffuseLighting *nr_diffuselighting = dynamic_cast<NR::FilterDiffuseLighting*>(nr_primitive);
+    g_assert(nr_diffuselighting != NULL);
+
+    sp_diffuselighting->renderer = nr_diffuselighting;
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_diffuselighting->diffuseConstant = sp_diffuselighting->diffuseConstant;
+    nr_diffuselighting->surfaceScale = sp_diffuselighting->surfaceScale;
+    nr_diffuselighting->lighting_color = sp_diffuselighting->lighting_color;
+    //We assume there is at most one child
+    nr_diffuselighting->light_type = NR::NO_LIGHT;
+    if (SP_IS_FEDISTANTLIGHT(primitive->children)) {
+        nr_diffuselighting->light_type = NR::DISTANT_LIGHT;
+        nr_diffuselighting->light.distant = SP_FEDISTANTLIGHT(primitive->children);
+    }
+    if (SP_IS_FEPOINTLIGHT(primitive->children)) {
+        nr_diffuselighting->light_type = NR::POINT_LIGHT;
+        nr_diffuselighting->light.point = SP_FEPOINTLIGHT(primitive->children);
+    }
+    if (SP_IS_FESPOTLIGHT(primitive->children)) {
+        nr_diffuselighting->light_type = NR::SPOT_LIGHT;
+        nr_diffuselighting->light.spot = SP_FESPOTLIGHT(primitive->children);
+    }
+        
+    //nr_offset->set_dx(sp_offset->dx);
+    //nr_offset->set_dy(sp_offset->dy);
+}
+
+
+/*
+  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/filters/diffuselighting.h b/src/filters/diffuselighting.h
new file mode 100644 (file)
index 0000000..8e909f9
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef SP_FEDIFFUSELIGHTING_H_SEEN
+#define SP_FEDIFFUSELIGHTING_H_SEEN
+
+/** \file
+ * SVG <feDiffuseLighting> implementation, see DiffuseLighting.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *               2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "diffuselighting-fns.h"
+
+namespace NR {
+class FilterDiffuseLighting;
+}
+
+/* FeDiffuseLighting base class */
+class SPFeDiffuseLightingClass;
+
+struct SPFeDiffuseLighting : public SPFilterPrimitive {
+    /** DIFFUSELIGHTING ATTRIBUTES HERE */
+    /** surfaceScale attribute */
+    gfloat surfaceScale;
+    guint surfaceScale_set : 1;
+    /** diffuseConstant attribute */
+    gfloat diffuseConstant;
+    guint diffuseConstant_set : 1;
+    /** kernelUnitLength attribute */
+    NumberOptNumber kernelUnitLength;
+    /** lighting-color property */
+    guint32 lighting_color;
+    guint lighting_color_set : 1;
+    /** pointer to the associated renderer */
+    NR::FilterDiffuseLighting *renderer;
+};
+
+struct SPFeDiffuseLightingClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feDiffuseLighting_get_type();
+
+
+#endif /* !SP_FEDIFFUSELIGHTING_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/filters/displacementmap-fns.h b/src/filters/displacementmap-fns.h
new file mode 100644 (file)
index 0000000..6d92c6b
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEDISPLACEMENTMAP_FNS_H
+#define SP_FEDISPLACEMENTMAP_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeDisplacementMap;
+
+#define SP_TYPE_FEDISPLACEMENTMAP (sp_feDisplacementMap_get_type())
+#define SP_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMap))
+#define SP_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMapClass))
+#define SP_IS_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISPLACEMENTMAP))
+#define SP_IS_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISPLACEMENTMAP))
+
+GType sp_feDisplacementMap_get_type();
+
+#endif /* !SP_FEDISPLACEMENTMAP_FNS_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/filters/displacementmap.cpp b/src/filters/displacementmap.cpp
new file mode 100644 (file)
index 0000000..405922b
--- /dev/null
@@ -0,0 +1,259 @@
+#define __SP_FEDISPLACEMENTMAP_CPP__
+
+/** \file
+ * SVG <feDisplacementMap> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "displacementmap.h"
+#include "xml/repr.h"
+#include "display/nr-filter-displacement-map.h"
+#include "helper-fns.h"
+
+/* FeDisplacementMap base class */
+
+static void sp_feDisplacementMap_class_init(SPFeDisplacementMapClass *klass);
+static void sp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap);
+
+static void sp_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feDisplacementMap_release(SPObject *object);
+static void sp_feDisplacementMap_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags);
+static void sp_feDisplacementMap_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+static Inkscape::XML::Node *sp_feDisplacementMap_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+static SPFilterPrimitiveClass *feDisplacementMap_parent_class;
+
+GType
+sp_feDisplacementMap_get_type()
+{
+    static GType feDisplacementMap_type = 0;
+
+    if (!feDisplacementMap_type) {
+        GTypeInfo feDisplacementMap_info = {
+            sizeof(SPFeDisplacementMapClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feDisplacementMap_class_init,
+            NULL, NULL,
+            sizeof(SPFeDisplacementMap),
+            16,
+            (GInstanceInitFunc) sp_feDisplacementMap_init,
+            NULL,    /* value_table */
+        };
+        feDisplacementMap_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeDisplacementMap", &feDisplacementMap_info, (GTypeFlags)0);
+    }
+    return feDisplacementMap_type;
+}
+
+static void
+sp_feDisplacementMap_class_init(SPFeDisplacementMapClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feDisplacementMap_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feDisplacementMap_build;
+    sp_object_class->release = sp_feDisplacementMap_release;
+    sp_object_class->write = sp_feDisplacementMap_write;
+    sp_object_class->set = sp_feDisplacementMap_set;
+    sp_object_class->update = sp_feDisplacementMap_update;
+    sp_primitive_class->build_renderer = sp_feDisplacementMap_build_renderer;
+}
+
+static void
+sp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap)
+{
+    feDisplacementMap->scale=0;
+    feDisplacementMap->xChannelSelector = DISPLACEMENTMAP_CHANNEL_ALPHA;
+    feDisplacementMap->yChannelSelector = DISPLACEMENTMAP_CHANNEL_ALPHA;
+    feDisplacementMap->in2 = NR::NR_FILTER_SLOT_NOT_SET;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeDisplacementMap variables.  For this to get called,
+ * 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_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feDisplacementMap_parent_class)->build) {
+        ((SPObjectClass *) feDisplacementMap_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "scale");
+    sp_object_read_attr(object, "in2");
+    sp_object_read_attr(object, "xChannelSelector");
+    sp_object_read_attr(object, "yChannelSelector");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feDisplacementMap_release(SPObject *object)
+{
+    if (((SPObjectClass *) feDisplacementMap_parent_class)->release)
+        ((SPObjectClass *) feDisplacementMap_parent_class)->release(object);
+}
+
+static FilterDisplacementMapChannelSelector sp_feDisplacementMap_readChannelSelector(gchar const *value)
+{
+    if (!value) return DISPLACEMENTMAP_CHANNEL_ALPHA;
+    switch (value[0]) {
+        case 'R':
+            return DISPLACEMENTMAP_CHANNEL_RED;
+            break;
+        case 'G':
+            return DISPLACEMENTMAP_CHANNEL_GREEN;
+            break;
+        case 'B':
+            return DISPLACEMENTMAP_CHANNEL_BLUE;
+            break;
+        case 'A':
+            return DISPLACEMENTMAP_CHANNEL_ALPHA;
+            break;
+        default:
+            // error
+            g_warning("Invalid attribute for Channel Selector. Valid modes are 'R', 'G', 'B' or 'A'");
+            break;
+    }
+    return DISPLACEMENTMAP_CHANNEL_ALPHA; //default is Alpha Channel
+}
+
+/**
+ * Sets a specific value in the SPFeDisplacementMap.
+ */
+static void
+sp_feDisplacementMap_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeDisplacementMap *feDisplacementMap = SP_FEDISPLACEMENTMAP(object);
+    (void)feDisplacementMap;
+    int input;
+    double read_num;
+    FilterDisplacementMapChannelSelector read_selector;
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        case SP_ATTR_XCHANNELSELECTOR:
+            read_selector = sp_feDisplacementMap_readChannelSelector(value);
+            if (read_selector != feDisplacementMap->xChannelSelector){
+                feDisplacementMap->xChannelSelector = read_selector;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_YCHANNELSELECTOR:
+            read_selector = sp_feDisplacementMap_readChannelSelector(value);
+            if (read_selector != feDisplacementMap->yChannelSelector){
+                feDisplacementMap->yChannelSelector = read_selector;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_SCALE:
+            read_num = helperfns_read_number(value);
+            if (read_num != feDisplacementMap->scale) {
+                feDisplacementMap->scale = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_IN2:
+            input = sp_filter_primitive_read_in(feDisplacementMap, value);
+            if (input != feDisplacementMap->in2) {
+                feDisplacementMap->in2 = input;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        default:
+            if (((SPObjectClass *) feDisplacementMap_parent_class)->set)
+                ((SPObjectClass *) feDisplacementMap_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feDisplacementMap_parent_class)->update) {
+        ((SPObjectClass *) feDisplacementMap_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feDisplacementMap_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feDisplacementMap_parent_class)->write) {
+        ((SPObjectClass *) feDisplacementMap_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feDisplacementMap_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeDisplacementMap *sp_displacement_map = SP_FEDISPLACEMENTMAP(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_DISPLACEMENTMAP);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterDisplacementMap *nr_displacement_map = dynamic_cast<NR::FilterDisplacementMap*>(nr_primitive);
+    g_assert(nr_displacement_map != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_displacement_map->set_input(1, sp_displacement_map->in2);
+    nr_displacement_map->set_scale(sp_displacement_map->scale);
+    nr_displacement_map->set_channel_selector(0, sp_displacement_map->xChannelSelector);
+    nr_displacement_map->set_channel_selector(1, sp_displacement_map->yChannelSelector);
+}
+
+
+/*
+  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/filters/displacementmap.h b/src/filters/displacementmap.h
new file mode 100644 (file)
index 0000000..6a8ac9c
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef SP_FEDISPLACEMENTMAP_H_SEEN
+#define SP_FEDISPLACEMENTMAP_H_SEEN
+
+/** \file
+ * SVG <feDisplacementMap> implementation, see DisplacementMap.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "displacementmap-fns.h"
+
+enum FilterDisplacementMapChannelSelector {
+    DISPLACEMENTMAP_CHANNEL_RED,
+    DISPLACEMENTMAP_CHANNEL_GREEN,
+    DISPLACEMENTMAP_CHANNEL_BLUE,
+    DISPLACEMENTMAP_CHANNEL_ALPHA,
+    DISPLACEMENTMAP_CHANNEL_ENDTYPE
+};
+
+/* FeDisplacementMap base class */
+class SPFeDisplacementMapClass;
+
+struct SPFeDisplacementMap : public SPFilterPrimitive {
+    /** DISPLACEMENTMAP ATTRIBUTES HERE */
+    int in2; 
+    double scale;
+    FilterDisplacementMapChannelSelector xChannelSelector;
+    FilterDisplacementMapChannelSelector yChannelSelector;
+};
+
+struct SPFeDisplacementMapClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feDisplacementMap_get_type();
+
+
+#endif /* !SP_FEDISPLACEMENTMAP_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/filters/distantlight.cpp b/src/filters/distantlight.cpp
new file mode 100644 (file)
index 0000000..41584c4
--- /dev/null
@@ -0,0 +1,234 @@
+#define __SP_FEDISTANTLIGHT_CPP__
+
+/** \file
+ * SVG <fedistantlight> implementation.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006,2007 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "attributes.h"
+#include "document.h"
+#include "distantlight.h"
+#include "diffuselighting-fns.h"
+#include "specularlighting-fns.h"
+#include "xml/repr.h"
+
+#define SP_MACROS_SILENT
+#include "macros.h"
+
+/* FeDistantLight class */
+
+static void sp_fedistantlight_class_init(SPFeDistantLightClass *klass);
+static void sp_fedistantlight_init(SPFeDistantLight *fedistantlight);
+
+static void sp_fedistantlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_fedistantlight_release(SPObject *object);
+static void sp_fedistantlight_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_fedistantlight_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_fedistantlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feDistantLight_parent_class;
+
+GType
+sp_fedistantlight_get_type()
+{
+    static GType fedistantlight_type = 0;
+
+    if (!fedistantlight_type) {
+        GTypeInfo fedistantlight_info = {
+            sizeof(SPFeDistantLightClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_fedistantlight_class_init,
+            NULL, NULL,
+            sizeof(SPFeDistantLight),
+            16,
+            (GInstanceInitFunc) sp_fedistantlight_init,
+            NULL,    /* value_table */
+        };
+        fedistantlight_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeDistantLight", &fedistantlight_info, (GTypeFlags)0);
+    }
+    return fedistantlight_type;
+}
+
+static void
+sp_fedistantlight_class_init(SPFeDistantLightClass *klass)
+{
+
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feDistantLight_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_fedistantlight_build;
+    sp_object_class->release = sp_fedistantlight_release;
+    sp_object_class->write = sp_fedistantlight_write;
+    sp_object_class->set = sp_fedistantlight_set;
+    sp_object_class->update = sp_fedistantlight_update;
+}
+
+static void
+sp_fedistantlight_init(SPFeDistantLight *fedistantlight)
+{
+    fedistantlight->azimuth = 0;
+    fedistantlight->elevation = 0;
+    fedistantlight->azimuth_set = FALSE;
+    fedistantlight->elevation_set = FALSE;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPDistantLight variables.  For this to get called,
+ * 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_fedistantlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feDistantLight_parent_class)->build) {
+        ((SPObjectClass *) feDistantLight_parent_class)->build(object, document, repr);
+    }
+
+    //Read values of key attributes from XML nodes into object.
+    sp_object_read_attr(object, "azimuth");
+    sp_object_read_attr(object, "elevation");
+
+//is this necessary?
+    sp_document_add_resource(document, "fedistantlight", object);
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_fedistantlight_release(SPObject *object)
+{
+    //SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object);
+
+    if (SP_OBJECT_DOCUMENT(object)) {
+        /* Unregister ourselves */
+        sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fedistantlight", SP_OBJECT(object));
+    }
+
+//TODO: release resources here
+}
+
+/**
+ * Sets a specific value in the SPFeDistantLight.
+ */
+static void
+sp_fedistantlight_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object);
+    gchar *end_ptr;
+    switch (key) {
+    case SP_ATTR_AZIMUTH:
+        end_ptr =NULL;
+        if (value) {
+            fedistantlight->azimuth = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr) {
+                fedistantlight->azimuth_set = TRUE;
+            }
+        }
+        if (!value || !end_ptr) {
+                fedistantlight->azimuth_set = FALSE;
+                fedistantlight->azimuth = 0;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_ELEVATION:
+        end_ptr =NULL;
+        if (value) {
+            fedistantlight->elevation = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr) {
+                fedistantlight->elevation_set = TRUE;
+            }
+        }
+        if (!value || !end_ptr) {
+                fedistantlight->elevation_set = FALSE;
+                fedistantlight->elevation = 0;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    default:
+        // See if any parents need this value.
+        if (((SPObjectClass *) feDistantLight_parent_class)->set) {
+            ((SPObjectClass *) feDistantLight_parent_class)->set(object, key, value);
+        }
+        break;
+    }
+}
+
+/**
+ *  * Receives update notifications.
+ *   */
+static void
+sp_fedistantlight_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    SPFeDistantLight *feDistantLight = SP_FEDISTANTLIGHT(object);
+    (void)feDistantLight;
+
+    if (flags & SP_OBJECT_MODIFIED_FLAG) {
+        /* do something to trigger redisplay, updates? */
+        sp_object_read_attr(object, "azimuth");
+        sp_object_read_attr(object, "elevation");
+    }
+
+    if (((SPObjectClass *) feDistantLight_parent_class)->update) {
+        ((SPObjectClass *) feDistantLight_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_fedistantlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object);
+
+    if (!repr) {
+        repr = SP_OBJECT_REPR(object)->duplicate(doc);
+    }
+
+    if (fedistantlight->azimuth_set)
+        sp_repr_set_css_double(repr, "azimuth", fedistantlight->azimuth);
+    if (fedistantlight->elevation_set)
+        sp_repr_set_css_double(repr, "elevation", fedistantlight->elevation);
+
+    if (((SPObjectClass *) feDistantLight_parent_class)->write) {
+        ((SPObjectClass *) feDistantLight_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+/*
+  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/filters/distantlight.h b/src/filters/distantlight.h
new file mode 100644 (file)
index 0000000..21edbc5
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef SP_FEDISTANTLIGHT_H_SEEN
+#define SP_FEDISTANTLIGHT_H_SEEN
+
+/** \file
+ * SVG <filter> implementation, see sp-filter.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006,2007 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-object.h"
+
+#define SP_TYPE_FEDISTANTLIGHT (sp_fedistantlight_get_type())
+#define SP_FEDISTANTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISTANTLIGHT, SPFeDistantLight))
+#define SP_FEDISTANTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISTANTLIGHT, SPFeDistantLightClass))
+#define SP_IS_FEDISTANTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISTANTLIGHT))
+#define SP_IS_FEDISTANTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISTANTLIGHT))
+
+/* Distant light class */
+
+
+class SPFeDistantLight;
+class SPFeDistantLightClass;
+
+struct SPFeDistantLight : public SPObject {
+
+    /** azimuth attribute */
+    gfloat azimuth;
+    guint azimuth_set : 1;
+    /** elevation attribute */
+    gfloat elevation;
+    guint elevation_set : 1;
+};
+
+struct SPFeDistantLightClass {
+    SPObjectClass parent_class;
+};
+
+GType
+sp_fedistantlight_get_type();
+#endif /* !SP_FEDISTANTLIGHT_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/filters/flood-fns.h b/src/filters/flood-fns.h
new file mode 100644 (file)
index 0000000..8cc5072
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEFLOOD_FNS_H
+#define SP_FEFLOOD_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeFlood;
+
+#define SP_TYPE_FEFLOOD (sp_feFlood_get_type())
+#define SP_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFLOOD, SPFeFlood))
+#define SP_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFLOOD, SPFeFloodClass))
+#define SP_IS_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFLOOD))
+#define SP_IS_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFLOOD))
+
+GType sp_feFlood_get_type();
+
+#endif /* !SP_FEFLOOD_FNS_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/filters/flood.cpp b/src/filters/flood.cpp
new file mode 100644 (file)
index 0000000..31aa955
--- /dev/null
@@ -0,0 +1,227 @@
+#define __SP_FEFLOOD_CPP__
+
+/** \file
+ * SVG <feFlood> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#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 */
+
+static void sp_feFlood_class_init(SPFeFloodClass *klass);
+static void sp_feFlood_init(SPFeFlood *feFlood);
+
+static void sp_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feFlood_release(SPObject *object);
+static void sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feFlood_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feFlood_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feFlood_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feFlood_parent_class;
+
+GType
+sp_feFlood_get_type()
+{
+    static GType feFlood_type = 0;
+
+    if (!feFlood_type) {
+        GTypeInfo feFlood_info = {
+            sizeof(SPFeFloodClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feFlood_class_init,
+            NULL, NULL,
+            sizeof(SPFeFlood),
+            16,
+            (GInstanceInitFunc) sp_feFlood_init,
+            NULL,    /* value_table */
+        };
+        feFlood_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeFlood", &feFlood_info, (GTypeFlags)0);
+    }
+    return feFlood_type;
+}
+
+static void
+sp_feFlood_class_init(SPFeFloodClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feFlood_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feFlood_build;
+    sp_object_class->release = sp_feFlood_release;
+    sp_object_class->write = sp_feFlood_write;
+    sp_object_class->set = sp_feFlood_set;
+    sp_object_class->update = sp_feFlood_update;
+    sp_primitive_class->build_renderer = sp_feFlood_build_renderer;
+}
+
+static void
+sp_feFlood_init(SPFeFlood *feFlood)
+{
+    feFlood->opacity = 1;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeFlood variables.  For this to get called,
+ * 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_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feFlood_parent_class)->build) {
+        ((SPObjectClass *) feFlood_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "flood-opacity");
+    sp_object_read_attr(object, "flood-color");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feFlood_release(SPObject *object)
+{
+    if (((SPObjectClass *) feFlood_parent_class)->release)
+        ((SPObjectClass *) feFlood_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeFlood.
+ */
+static void
+sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeFlood *feFlood = SP_FEFLOOD(object);
+    (void)feFlood;
+    gchar const *cend_ptr = NULL;
+    gchar *end_ptr = NULL;
+    guint32 read_color;
+    double read_num;
+    
+    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);
+            }
+            break;
+        case SP_PROP_FLOOD_OPACITY:
+            if (value) {
+                read_num = g_ascii_strtod(value, &end_ptr);
+                if (*end_ptr) {
+                    g_warning("Unable to convert \"%s\" to number", value);
+                    read_num = 1;
+                }
+            }
+            else {
+                read_num = 1;
+            }
+            if (read_num != feFlood->opacity){
+                feFlood->opacity = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        default:
+            if (((SPObjectClass *) feFlood_parent_class)->set)
+                ((SPObjectClass *) feFlood_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feFlood_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feFlood_parent_class)->update) {
+        ((SPObjectClass *) feFlood_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feFlood_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feFlood_parent_class)->write) {
+        ((SPObjectClass *) feFlood_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feFlood_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeFlood *sp_flood = SP_FEFLOOD(primitive);
+    (void)sp_flood;
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_FLOOD);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterFlood *nr_flood = dynamic_cast<NR::FilterFlood*>(nr_primitive);
+    g_assert(nr_flood != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+    
+    nr_flood->set_opacity(sp_flood->opacity);
+    nr_flood->set_color(sp_flood->color);
+}
+
+
+/*
+  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/filters/flood.h b/src/filters/flood.h
new file mode 100644 (file)
index 0000000..046c0e8
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef SP_FEFLOOD_H_SEEN
+#define SP_FEFLOOD_H_SEEN
+
+/** \file
+ * SVG <feFlood> implementation, see Flood.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "flood-fns.h"
+
+#include "display/nr-filter.h"
+#include "display/nr-filter-flood.h"
+
+/* FeFlood base class */
+class SPFeFloodClass;
+
+struct SPFeFlood : public SPFilterPrimitive {
+    /** FLOOD ATTRIBUTES HERE */
+    guint32 color;
+    double opacity;
+};
+
+struct SPFeFloodClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feFlood_get_type();
+
+
+#endif /* !SP_FEFLOOD_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/filters/image-fns.h b/src/filters/image-fns.h
new file mode 100644 (file)
index 0000000..0a8b453
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEIMAGE_FNS_H
+#define SP_FEIMAGE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeImage;
+
+#define SP_TYPE_FEIMAGE (sp_feImage_get_type())
+#define SP_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEIMAGE, SPFeImage))
+#define SP_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEIMAGE, SPFeImageClass))
+#define SP_IS_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEIMAGE))
+#define SP_IS_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEIMAGE))
+
+GType sp_feImage_get_type();
+
+#endif /* !SP_FEIMAGE_FNS_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/filters/image.cpp b/src/filters/image.cpp
new file mode 100644 (file)
index 0000000..d132d36
--- /dev/null
@@ -0,0 +1,264 @@
+#define __SP_FEIMAGE_CPP__
+
+/** \file
+ * SVG <feImage> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2007 Felipe Sanches
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+#include "uri.h"
+#include "uri-references.h"
+#include "attributes.h"
+#include "svg/svg.h"
+#include "image.h"
+#include "xml/repr.h"
+#include <string.h>
+
+#include "display/nr-filter.h"
+#include "display/nr-filter-image.h"
+
+/* FeImage base class */
+
+static void sp_feImage_class_init(SPFeImageClass *klass);
+static void sp_feImage_init(SPFeImage *feImage);
+
+static void sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feImage_release(SPObject *object);
+static void sp_feImage_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feImage_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feImage_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feImage_parent_class;
+
+GType
+sp_feImage_get_type()
+{
+    static GType feImage_type = 0;
+
+    if (!feImage_type) {
+        GTypeInfo feImage_info = {
+            sizeof(SPFeImageClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feImage_class_init,
+            NULL, NULL,
+            sizeof(SPFeImage),
+            16,
+            (GInstanceInitFunc) sp_feImage_init,
+            NULL,    /* value_table */
+        };
+        feImage_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeImage", &feImage_info, (GTypeFlags)0);
+    }
+    return feImage_type;
+}
+
+static void
+sp_feImage_class_init(SPFeImageClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass * sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feImage_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feImage_build;
+    sp_object_class->release = sp_feImage_release;
+    sp_object_class->write = sp_feImage_write;
+    sp_object_class->set = sp_feImage_set;
+    sp_object_class->update = sp_feImage_update;
+
+    sp_primitive_class->build_renderer = sp_feImage_build_renderer;
+}
+
+static void
+sp_feImage_init(SPFeImage */*feImage*/)
+{
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeImage variables.  For this to get called,
+ * 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)
+{
+    // Save document reference so we can load images with relative paths.
+    SPFeImage *feImage = SP_FEIMAGE(object);
+    feImage->document = document;
+
+    if (((SPObjectClass *) feImage_parent_class)->build) {
+        ((SPObjectClass *) feImage_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+
+    sp_object_read_attr(object, "x");
+    sp_object_read_attr(object, "y");
+    sp_object_read_attr(object, "width");
+    sp_object_read_attr(object, "height");
+    sp_object_read_attr(object, "xlink:href");
+
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feImage_release(SPObject *object)
+{
+    SPFeImage *feImage = SP_FEIMAGE(object);
+    feImage->_modified_connection.disconnect();
+    if (feImage->SVGElemRef) delete feImage->SVGElemRef;
+
+    if (((SPObjectClass *) feImage_parent_class)->release)
+        ((SPObjectClass *) feImage_parent_class)->release(object);
+}
+
+static void
+sp_feImage_elem_modified(SPObject* /*href*/, guint /*flags*/, SPObject* obj)
+{
+    obj->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+
+/**
+ * Sets a specific value in the SPFeImage.
+ */
+static void
+sp_feImage_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeImage *feImage = SP_FEIMAGE(object);
+    (void)feImage;
+    Inkscape::URI* SVGElem_uri;
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+       case SP_ATTR_XLINK_HREF:
+           if (feImage->href) g_free(feImage->href);
+           feImage->href = (value) ? g_strdup (value) : NULL;
+            if (!feImage->href) return;
+            try{
+                SVGElem_uri = new Inkscape::URI(feImage->href);
+                feImage->SVGElemRef = new Inkscape::URIReference(feImage->document);
+                feImage->from_element = true;
+                feImage->SVGElemRef->attach(*SVGElem_uri);
+                feImage->SVGElem = SP_ITEM(feImage->SVGElemRef->getObject());
+                
+                g_free(SVGElem_uri);
+                feImage->_modified_connection = ((SPObject*) feImage->SVGElem)->connectModified(sigc::bind(sigc::ptr_fun(&sp_feImage_elem_modified), object));
+                object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+                break;
+            }
+            catch(const Inkscape::UnsupportedURIException & e)
+            {
+                feImage->from_element = false;
+                g_warning("caught Inkscape::UnsupportedURIException in sp_feImage_set");
+                break;
+            }
+
+
+        case SP_ATTR_X:
+            feImage->x.readOrUnset(value);
+            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_Y:
+            feImage->y.readOrUnset(value);
+            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_WIDTH:
+            feImage->width.readOrUnset(value);
+            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_HEIGHT:
+            feImage->height.readOrUnset(value);
+            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        default:
+            if (((SPObjectClass *) feImage_parent_class)->set)
+                ((SPObjectClass *) feImage_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+    }
+
+    if (((SPObjectClass *) feImage_parent_class)->update) {
+        ((SPObjectClass *) feImage_parent_class)->update(object, ctx, 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)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feImage_parent_class)->write) {
+        ((SPObjectClass *) feImage_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feImage_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeImage *sp_image = SP_FEIMAGE(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_IMAGE);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterImage *nr_image = dynamic_cast<NR::FilterImage*>(nr_primitive);
+    g_assert(nr_image != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_image->from_element = sp_image->from_element;
+    nr_image->SVGElem = sp_image->SVGElem;
+    nr_image->set_region(sp_image->x, sp_image->y, sp_image->width, sp_image->height);
+    nr_image->set_href(sp_image->href);
+    nr_image->set_document(sp_image->document);
+}
+
+/*
+  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/filters/image.h b/src/filters/image.h
new file mode 100644 (file)
index 0000000..8952aee
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef SP_FEIMAGE_H_SEEN
+#define SP_FEIMAGE_H_SEEN
+
+/** \file
+ * SVG <feImage> implementation, see Image.cpp.
+ */
+/*
+ * Authors:
+ *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "image-fns.h"
+#include "svg/svg-length.h"
+#include "sp-item.h"
+#include "uri-references.h"
+
+/* FeImage base class */
+class SPFeImageClass;
+
+struct SPFeImage : public SPFilterPrimitive {
+    /** IMAGE ATTRIBUTES HERE */
+    gchar *href;
+    SVGLength x, y, height, width;
+    SPDocument *document;
+    bool from_element;
+    SPItem* SVGElem;
+    Inkscape::URIReference* SVGElemRef;
+    sigc::connection _modified_connection;
+};
+
+struct SPFeImageClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feImage_get_type();
+
+
+#endif /* !SP_FEIMAGE_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/filters/makefile.in b/src/filters/makefile.in
new file mode 100644 (file)
index 0000000..5aa76ce
--- /dev/null
@@ -0,0 +1,17 @@
+# Convenience stub makefile to call the real Makefile.
+
+@SET_MAKE@
+
+OBJEXT = @OBJEXT@
+
+# Explicit so that it's the default rule.
+all:
+       cd .. && $(MAKE) filters/all
+
+clean %.a %.$(OBJEXT):
+       cd .. && $(MAKE) filters/$@
+
+.PHONY: all clean
+
+.SUFFIXES:
+.SUFFIXES: .a .$(OBJEXT)
diff --git a/src/filters/merge-fns.h b/src/filters/merge-fns.h
new file mode 100644 (file)
index 0000000..24bda1a
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEMERGE_FNS_H
+#define SP_FEMERGE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeMerge;
+
+#define SP_TYPE_FEMERGE (sp_feMerge_get_type())
+#define SP_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMERGE, SPFeMerge))
+#define SP_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMERGE, SPFeMergeClass))
+#define SP_IS_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMERGE))
+#define SP_IS_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMERGE))
+
+GType sp_feMerge_get_type();
+
+#endif /* !SP_FEMERGE_FNS_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/filters/merge.cpp b/src/filters/merge.cpp
new file mode 100644 (file)
index 0000000..079d1b1
--- /dev/null
@@ -0,0 +1,203 @@
+#define __SP_FEMERGE_CPP__
+
+/** \file
+ * SVG <feMerge> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "xml/repr.h"
+
+#include "merge.h"
+#include "mergenode.h"
+#include "display/nr-filter-merge.h"
+
+/* FeMerge base class */
+
+static void sp_feMerge_class_init(SPFeMergeClass *klass);
+static void sp_feMerge_init(SPFeMerge *feMerge);
+
+static void sp_feMerge_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feMerge_release(SPObject *object);
+static void sp_feMerge_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feMerge_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feMerge_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feMerge_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feMerge_parent_class;
+
+GType
+sp_feMerge_get_type()
+{
+    static GType feMerge_type = 0;
+
+    if (!feMerge_type) {
+        GTypeInfo feMerge_info = {
+            sizeof(SPFeMergeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feMerge_class_init,
+            NULL, NULL,
+            sizeof(SPFeMerge),
+            16,
+            (GInstanceInitFunc) sp_feMerge_init,
+            NULL,    /* value_table */
+        };
+        feMerge_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeMerge", &feMerge_info, (GTypeFlags)0);
+    }
+    return feMerge_type;
+}
+
+static void
+sp_feMerge_class_init(SPFeMergeClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feMerge_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feMerge_build;
+    sp_object_class->release = sp_feMerge_release;
+    sp_object_class->write = sp_feMerge_write;
+    sp_object_class->set = sp_feMerge_set;
+    sp_object_class->update = sp_feMerge_update;
+
+    sp_primitive_class->build_renderer = sp_feMerge_build_renderer;
+}
+
+static void
+sp_feMerge_init(SPFeMerge */*feMerge*/)
+{
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeMerge variables.  For this to get called,
+ * 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_feMerge_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feMerge_parent_class)->build) {
+        ((SPObjectClass *) feMerge_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feMerge_release(SPObject *object)
+{
+    if (((SPObjectClass *) feMerge_parent_class)->release)
+        ((SPObjectClass *) feMerge_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeMerge.
+ */
+static void
+sp_feMerge_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeMerge *feMerge = SP_FEMERGE(object);
+    (void)feMerge;
+
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feMerge_parent_class)->set)
+                ((SPObjectClass *) feMerge_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feMerge_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & SP_OBJECT_MODIFIED_FLAG) {
+        object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+    }
+
+    if (((SPObjectClass *) feMerge_parent_class)->update) {
+        ((SPObjectClass *) feMerge_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feMerge_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feMerge_parent_class)->write) {
+        ((SPObjectClass *) feMerge_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feMerge_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeMerge *sp_merge = SP_FEMERGE(primitive);
+    (void)sp_merge;
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_MERGE);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterMerge *nr_merge = dynamic_cast<NR::FilterMerge*>(nr_primitive);
+    g_assert(nr_merge != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    SPObject *input = primitive->children;
+    int in_nr = 0;
+    while (input) {
+        if (SP_IS_FEMERGENODE(input)) {
+            SPFeMergeNode *node = SP_FEMERGENODE(input);
+            nr_merge->set_input(in_nr, node->input);
+            in_nr++;
+        }
+        input = input->next;
+    }
+}
+
+
+/*
+  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/filters/merge.h b/src/filters/merge.h
new file mode 100644 (file)
index 0000000..5d28fab
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef SP_FEMERGE_H_SEEN
+#define SP_FEMERGE_H_SEEN
+
+/** \file
+ * SVG <feMerge> implementation, see Merge.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "merge-fns.h"
+
+/* FeMerge base class */
+class SPFeMergeClass;
+
+struct SPFeMerge : public SPFilterPrimitive {
+    
+};
+
+struct SPFeMergeClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feMerge_get_type();
+
+
+#endif /* !SP_FEMERGE_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/filters/mergenode.cpp b/src/filters/mergenode.cpp
new file mode 100644 (file)
index 0000000..1f056a2
--- /dev/null
@@ -0,0 +1,177 @@
+#define __SP_FEMERGENODE_CPP__
+
+/** \file
+ * feMergeNode implementation. A feMergeNode contains the name of one
+ * input image for feMerge.
+ */
+/*
+ * Authors:
+ *   Kees Cook <kees@outflux.net>
+ *   Niko Kiirala <niko@kiirala.com>
+ *
+ * Copyright (C) 2004,2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "xml/repr.h"
+#include "mergenode.h"
+#include "merge.h"
+
+static void sp_feMergeNode_class_init(SPFeMergeNodeClass *klass);
+static void sp_feMergeNode_init(SPFeMergeNode *skeleton);
+
+static void sp_feMergeNode_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feMergeNode_release(SPObject *object);
+static void sp_feMergeNode_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feMergeNode_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feMergeNode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feMergeNode_parent_class;
+
+GType
+sp_feMergeNode_get_type()
+{
+    static GType feMergeNode_type = 0;
+
+    if (!feMergeNode_type) {
+        GTypeInfo feMergeNode_info = {
+            sizeof(SPFeMergeNodeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feMergeNode_class_init,
+            NULL, NULL,
+            sizeof(SPFeMergeNode),
+            16,
+            (GInstanceInitFunc) sp_feMergeNode_init,
+            NULL,    /* value_table */
+        };
+        feMergeNode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeMergeNode", &feMergeNode_info, (GTypeFlags)0);
+    }
+    return feMergeNode_type;
+}
+
+static void
+sp_feMergeNode_class_init(SPFeMergeNodeClass *klass)
+{
+    //GObjectClass *gobject_class = (GObjectClass *)klass;
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feMergeNode_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feMergeNode_build;
+    sp_object_class->release = sp_feMergeNode_release;
+    sp_object_class->write = sp_feMergeNode_write;
+    sp_object_class->set = sp_feMergeNode_set;
+    sp_object_class->update = sp_feMergeNode_update;
+}
+
+static void
+sp_feMergeNode_init(SPFeMergeNode *feMergeNode)
+{
+    feMergeNode->input = NR::NR_FILTER_SLOT_NOT_SET;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeMergeNode variables.  For this to get called,
+ * 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_feMergeNode_build(SPObject *object, SPDocument */*document*/, Inkscape::XML::Node */*repr*/)
+{
+    sp_object_read_attr(object, "in");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feMergeNode_release(SPObject *object)
+{
+    /* deal with our children and our selves here */
+
+    if (((SPObjectClass *) feMergeNode_parent_class)->release)
+        ((SPObjectClass *) feMergeNode_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeMergeNode.
+ */
+static void
+sp_feMergeNode_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object);
+    SPFeMerge *parent = SP_FEMERGE(object->parent);
+
+    if (key == SP_ATTR_IN) {
+        int input = sp_filter_primitive_read_in(parent, value);
+        if (input != feMergeNode->input) {
+            feMergeNode->input = input;
+            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+    }
+
+    /* See if any parents need this value. */
+    if (((SPObjectClass *) feMergeNode_parent_class)->set) {
+        ((SPObjectClass *) feMergeNode_parent_class)->set(object, key, value);
+    }
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feMergeNode_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    //SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object);
+
+    if (flags & SP_OBJECT_MODIFIED_FLAG) {
+        object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+    }
+
+    if (((SPObjectClass *) feMergeNode_parent_class)->update) {
+        ((SPObjectClass *) feMergeNode_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feMergeNode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    //SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object);
+
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feMergeNode_parent_class)->write) {
+        ((SPObjectClass *) feMergeNode_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  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/filters/mergenode.h b/src/filters/mergenode.h
new file mode 100644 (file)
index 0000000..8ec00bd
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef SP_FEMERGENODE_H_SEEN
+#define SP_FEMERGENODE_H_SEEN
+
+/** \file
+ * feMergeNode implementation. A feMergeNode stores information about one
+ * input image for feMerge filter primitive.
+ */
+/*
+ * Authors:
+ *   Kees Cook <kees@outflux.net>
+ *   Niko Kiirala <niko@kiirala.com>
+ *
+ * Copyright (C) 2004,2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-object.h"
+
+#define SP_TYPE_FEMERGENODE (sp_feMergeNode_get_type())
+#define SP_FEMERGENODE(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_FEMERGENODE, SPFeMergeNode))
+#define SP_IS_FEMERGENODE(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_FEMERGENODE))
+
+class SPFeMergeNode;
+class SPFeMergeNodeClass;
+
+struct SPFeMergeNode : public SPObject {
+    int input;
+};
+
+struct SPFeMergeNodeClass {
+    SPObjectClass parent_class;
+};
+
+GType sp_feMergeNode_get_type();
+
+
+#endif /* !SP_FEMERGENODE_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/filters/morphology-fns.h b/src/filters/morphology-fns.h
new file mode 100644 (file)
index 0000000..a055040
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEMORPHOLOGY_FNS_H
+#define SP_FEMORPHOLOGY_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeMorphology;
+
+#define SP_TYPE_FEMORPHOLOGY (sp_feMorphology_get_type())
+#define SP_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMORPHOLOGY, SPFeMorphology))
+#define SP_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMORPHOLOGY, SPFeMorphologyClass))
+#define SP_IS_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMORPHOLOGY))
+#define SP_IS_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMORPHOLOGY))
+
+GType sp_feMorphology_get_type();
+
+#endif /* !SP_FEMORPHOLOGY_FNS_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/filters/morphology.cpp b/src/filters/morphology.cpp
new file mode 100644 (file)
index 0000000..9276160
--- /dev/null
@@ -0,0 +1,229 @@
+#define __SP_FEMORPHOLOGY_CPP__
+
+/** \file
+ * SVG <feMorphology> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   Felipe Sanches <felipe.sanches@gmail.com>
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "morphology.h"
+#include "xml/repr.h"
+#include "display/nr-filter-morphology.h"
+
+/* FeMorphology base class */
+
+static void sp_feMorphology_class_init(SPFeMorphologyClass *klass);
+static void sp_feMorphology_init(SPFeMorphology *feMorphology);
+
+static void sp_feMorphology_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feMorphology_release(SPObject *object);
+static void sp_feMorphology_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feMorphology_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feMorphology_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feMorphology_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feMorphology_parent_class;
+
+GType
+sp_feMorphology_get_type()
+{
+    static GType feMorphology_type = 0;
+
+    if (!feMorphology_type) {
+        GTypeInfo feMorphology_info = {
+            sizeof(SPFeMorphologyClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feMorphology_class_init,
+            NULL, NULL,
+            sizeof(SPFeMorphology),
+            16,
+            (GInstanceInitFunc) sp_feMorphology_init,
+            NULL,    /* value_table */
+        };
+        feMorphology_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeMorphology", &feMorphology_info, (GTypeFlags)0);
+    }
+    return feMorphology_type;
+}
+
+static void
+sp_feMorphology_class_init(SPFeMorphologyClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+    
+    feMorphology_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feMorphology_build;
+    sp_object_class->release = sp_feMorphology_release;
+    sp_object_class->write = sp_feMorphology_write;
+    sp_object_class->set = sp_feMorphology_set;
+    sp_object_class->update = sp_feMorphology_update;
+    sp_primitive_class->build_renderer = sp_feMorphology_build_renderer;
+}
+
+static void
+sp_feMorphology_init(SPFeMorphology *feMorphology)
+{
+    //Setting default values:
+    feMorphology->radius.set("0");
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeMorphology variables.  For this to get called,
+ * 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_feMorphology_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feMorphology_parent_class)->build) {
+        ((SPObjectClass *) feMorphology_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "operator");
+    sp_object_read_attr(object, "radius");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feMorphology_release(SPObject *object)
+{
+    if (((SPObjectClass *) feMorphology_parent_class)->release)
+        ((SPObjectClass *) feMorphology_parent_class)->release(object);
+}
+
+static NR::FilterMorphologyOperator sp_feMorphology_read_operator(gchar const *value){
+    if (!value) return NR::MORPHOLOGY_OPERATOR_ERODE; //erode is default
+    switch(value[0]){
+        case 'e':
+            if (strncmp(value, "erode", 5) == 0) return NR::MORPHOLOGY_OPERATOR_ERODE;
+            break;
+        case 'd':
+            if (strncmp(value, "dilate", 6) == 0) return NR::MORPHOLOGY_OPERATOR_DILATE;
+            break;
+    }
+    return NR::MORPHOLOGY_OPERATOR_ERODE; //erode is default
+}
+
+/**
+ * Sets a specific value in the SPFeMorphology.
+ */
+static void
+sp_feMorphology_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeMorphology *feMorphology = SP_FEMORPHOLOGY(object);
+    (void)feMorphology;
+    
+    NR::FilterMorphologyOperator read_operator;
+    switch(key) {
+    /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        case SP_ATTR_OPERATOR:
+            read_operator = sp_feMorphology_read_operator(value);
+            if (read_operator != feMorphology->Operator){
+                feMorphology->Operator = read_operator;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_RADIUS:
+            feMorphology->radius.set(value);
+            //From SVG spec: If <y-radius> is not provided, it defaults to <x-radius>.
+            if (feMorphology->radius.optNumIsSet() == false)
+                feMorphology->radius.setOptNumber(feMorphology->radius.getNumber());
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        default:
+            if (((SPObjectClass *) feMorphology_parent_class)->set)
+                ((SPObjectClass *) feMorphology_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feMorphology_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feMorphology_parent_class)->update) {
+        ((SPObjectClass *) feMorphology_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feMorphology_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feMorphology_parent_class)->write) {
+        ((SPObjectClass *) feMorphology_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feMorphology_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeMorphology *sp_morphology = SP_FEMORPHOLOGY(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_MORPHOLOGY);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterMorphology *nr_morphology = dynamic_cast<NR::FilterMorphology*>(nr_primitive);
+    g_assert(nr_morphology != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive); 
+    
+    nr_morphology->set_operator(sp_morphology->Operator);
+    nr_morphology->set_xradius( sp_morphology->radius.getNumber() );
+    nr_morphology->set_yradius( sp_morphology->radius.getOptNumber() );
+}
+
+/*
+  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/filters/morphology.h b/src/filters/morphology.h
new file mode 100644 (file)
index 0000000..8e807d7
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef SP_FEMORPHOLOGY_H_SEEN
+#define SP_FEMORPHOLOGY_H_SEEN
+
+/** \file
+ * SVG <feMorphology> implementation, see Morphology.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "morphology-fns.h"
+#include "number-opt-number.h"
+#include "display/nr-filter.h"
+#include "display/nr-filter-morphology.h"
+
+
+/* FeMorphology base class */
+class SPFeMorphologyClass;
+
+struct SPFeMorphology : public SPFilterPrimitive {
+    /** MORPHOLOGY ATTRIBUTES HERE */
+    NR::FilterMorphologyOperator Operator;
+    NumberOptNumber radius;
+};
+
+struct SPFeMorphologyClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feMorphology_get_type();
+
+
+#endif /* !SP_FEMORPHOLOGY_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/filters/offset-fns.h b/src/filters/offset-fns.h
new file mode 100644 (file)
index 0000000..38561c1
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEOFFSET_FNS_H
+#define SP_FEOFFSET_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeOffset;
+
+#define SP_TYPE_FEOFFSET (sp_feOffset_get_type())
+#define SP_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEOFFSET, SPFeOffset))
+#define SP_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEOFFSET, SPFeOffsetClass))
+#define SP_IS_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEOFFSET))
+#define SP_IS_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEOFFSET))
+
+GType sp_feOffset_get_type();
+
+#endif /* !SP_FEOFFSET_FNS_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/filters/offset.cpp b/src/filters/offset.cpp
new file mode 100644 (file)
index 0000000..0848636
--- /dev/null
@@ -0,0 +1,214 @@
+#define __SP_FEOFFSET_CPP__
+
+/** \file
+ * SVG <feOffset> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *
+ * Copyright (C) 2006,2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "offset.h"
+#include "helper-fns.h"
+#include "xml/repr.h"
+#include "display/nr-filter-offset.h"
+
+/* FeOffset base class */
+
+static void sp_feOffset_class_init(SPFeOffsetClass *klass);
+static void sp_feOffset_init(SPFeOffset *feOffset);
+
+static void sp_feOffset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feOffset_release(SPObject *object);
+static void sp_feOffset_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feOffset_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feOffset_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feOffset_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feOffset_parent_class;
+
+GType
+sp_feOffset_get_type()
+{
+    static GType feOffset_type = 0;
+
+    if (!feOffset_type) {
+        GTypeInfo feOffset_info = {
+            sizeof(SPFeOffsetClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feOffset_class_init,
+            NULL, NULL,
+            sizeof(SPFeOffset),
+            16,
+            (GInstanceInitFunc) sp_feOffset_init,
+            NULL,    /* value_table */
+        };
+        feOffset_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeOffset", &feOffset_info, (GTypeFlags)0);
+    }
+    return feOffset_type;
+}
+
+static void
+sp_feOffset_class_init(SPFeOffsetClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feOffset_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feOffset_build;
+    sp_object_class->release = sp_feOffset_release;
+    sp_object_class->write = sp_feOffset_write;
+    sp_object_class->set = sp_feOffset_set;
+    sp_object_class->update = sp_feOffset_update;
+
+    sp_primitive_class->build_renderer = sp_feOffset_build_renderer;
+}
+
+static void
+sp_feOffset_init(SPFeOffset *feOffset)
+{
+    feOffset->dx = 0;
+    feOffset->dy = 0;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeOffset variables.  For this to get called,
+ * 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_feOffset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feOffset_parent_class)->build) {
+        ((SPObjectClass *) feOffset_parent_class)->build(object, document, repr);
+    }
+
+    sp_object_read_attr(object, "dx");
+    sp_object_read_attr(object, "dy");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feOffset_release(SPObject *object)
+{
+    if (((SPObjectClass *) feOffset_parent_class)->release)
+        ((SPObjectClass *) feOffset_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeOffset.
+ */
+static void
+sp_feOffset_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeOffset *feOffset = SP_FEOFFSET(object);
+
+    double read_num;
+    switch(key) {
+        case SP_ATTR_DX:
+            read_num = helperfns_read_number(value);
+            if (read_num != feOffset->dx) {
+                feOffset->dx = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_DY:
+            read_num = helperfns_read_number(value);
+            if (read_num != feOffset->dy) {
+                feOffset->dy = read_num;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+            
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feOffset_parent_class)->set)
+                ((SPObjectClass *) feOffset_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feOffset_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & SP_OBJECT_MODIFIED_FLAG) {
+        sp_object_read_attr(object, "dx");
+        sp_object_read_attr(object, "dy");
+    }
+
+    if (((SPObjectClass *) feOffset_parent_class)->update) {
+        ((SPObjectClass *) feOffset_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feOffset_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            // Not. Causes coredumps.
+            // repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feOffset_parent_class)->write) {
+        ((SPObjectClass *) feOffset_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feOffset_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeOffset *sp_offset = SP_FEOFFSET(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_OFFSET);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterOffset *nr_offset = dynamic_cast<NR::FilterOffset*>(nr_primitive);
+    g_assert(nr_offset != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_offset->set_dx(sp_offset->dx);
+    nr_offset->set_dy(sp_offset->dy);
+}
+
+
+/*
+  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/filters/offset.h b/src/filters/offset.h
new file mode 100644 (file)
index 0000000..72d8525
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FEOFFSET_H_SEEN
+#define SP_FEOFFSET_H_SEEN
+
+/** \file
+ * SVG <feOffset> implementation, see Offset.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "offset-fns.h"
+
+/* FeOffset base class */
+class SPFeOffsetClass;
+
+struct SPFeOffset : public SPFilterPrimitive {
+    /** OFFSET ATTRIBUTES HERE */
+    double dx, dy;
+};
+
+struct SPFeOffsetClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feOffset_get_type();
+
+
+#endif /* !SP_FEOFFSET_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/filters/pointlight.cpp b/src/filters/pointlight.cpp
new file mode 100644 (file)
index 0000000..ce58cf1
--- /dev/null
@@ -0,0 +1,259 @@
+#define __SP_FEPOINTLIGHT_CPP__
+
+/** \file
+ * SVG <fepointlight> implementation.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006,2007 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "attributes.h"
+#include "document.h"
+#include "pointlight.h"
+#include "diffuselighting-fns.h"
+#include "specularlighting-fns.h"
+#include "xml/repr.h"
+
+#define SP_MACROS_SILENT
+#include "macros.h"
+
+/* FePointLight class */
+
+static void sp_fepointlight_class_init(SPFePointLightClass *klass);
+static void sp_fepointlight_init(SPFePointLight *fepointlight);
+
+static void sp_fepointlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_fepointlight_release(SPObject *object);
+static void sp_fepointlight_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_fepointlight_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_fepointlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *fePointLight_parent_class;
+
+GType
+sp_fepointlight_get_type()
+{
+    static GType fepointlight_type = 0;
+
+    if (!fepointlight_type) {
+        GTypeInfo fepointlight_info = {
+            sizeof(SPFePointLightClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_fepointlight_class_init,
+            NULL, NULL,
+            sizeof(SPFePointLight),
+            16,
+            (GInstanceInitFunc) sp_fepointlight_init,
+            NULL,    /* value_table */
+        };
+        fepointlight_type = g_type_register_static(SP_TYPE_OBJECT, "SPFePointLight", &fepointlight_info, (GTypeFlags)0);
+    }
+    return fepointlight_type;
+}
+
+static void
+sp_fepointlight_class_init(SPFePointLightClass *klass)
+{
+
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    fePointLight_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_fepointlight_build;
+    sp_object_class->release = sp_fepointlight_release;
+    sp_object_class->write = sp_fepointlight_write;
+    sp_object_class->set = sp_fepointlight_set;
+    sp_object_class->update = sp_fepointlight_update;
+}
+
+static void
+sp_fepointlight_init(SPFePointLight *fepointlight)
+{
+    fepointlight->x = 0;
+    fepointlight->y = 0;
+    fepointlight->z = 0;
+
+    fepointlight->x_set = FALSE;
+    fepointlight->y_set = FALSE;
+    fepointlight->z_set = FALSE;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPPointLight variables.  For this to get called,
+ * 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_fepointlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) fePointLight_parent_class)->build) {
+        ((SPObjectClass *) fePointLight_parent_class)->build(object, document, repr);
+    }
+
+    //Read values of key attributes from XML nodes into object.
+    sp_object_read_attr(object, "x");
+    sp_object_read_attr(object, "y");
+    sp_object_read_attr(object, "z");
+
+//is this necessary?
+    sp_document_add_resource(document, "fepointlight", object);
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_fepointlight_release(SPObject *object)
+{
+    //SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object);
+
+    if (SP_OBJECT_DOCUMENT(object)) {
+        /* Unregister ourselves */
+        sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fepointlight", SP_OBJECT(object));
+    }
+
+//TODO: release resources here
+}
+
+/**
+ * Sets a specific value in the SPFePointLight.
+ */
+static void
+sp_fepointlight_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object);
+    gchar *end_ptr;
+    switch (key) {
+    case SP_ATTR_X:
+        end_ptr = NULL;
+        if (value) {
+            fepointlight->x = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr) {
+                fepointlight->x_set = TRUE;
+            }
+        }
+        if (!value || !end_ptr) {
+            fepointlight->x = 0;
+            fepointlight->x_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_Y:
+        end_ptr = NULL;
+        if (value) {
+            fepointlight->y = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr) {
+                fepointlight->y_set = TRUE;
+            }
+        }
+        if (!value || !end_ptr) {
+            fepointlight->y = 0;
+            fepointlight->y_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_Z:
+        end_ptr = NULL;
+        if (value) {
+            fepointlight->z = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr) {
+                fepointlight->z_set = TRUE;
+            }
+        }
+        if (!value || !end_ptr) {
+            fepointlight->z = 0;
+            fepointlight->z_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    default:
+        // See if any parents need this value.
+        if (((SPObjectClass *) fePointLight_parent_class)->set) {
+            ((SPObjectClass *) fePointLight_parent_class)->set(object, key, value);
+        }
+        break;
+    }
+}
+
+/**
+ *  * Receives update notifications.
+ *   */
+static void
+sp_fepointlight_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    SPFePointLight *fePointLight = SP_FEPOINTLIGHT(object);
+    (void)fePointLight;
+
+    if (flags & SP_OBJECT_MODIFIED_FLAG) {
+        /* do something to trigger redisplay, updates? */
+        sp_object_read_attr(object, "x");
+        sp_object_read_attr(object, "y");
+        sp_object_read_attr(object, "z");
+    }
+
+    if (((SPObjectClass *) fePointLight_parent_class)->update) {
+        ((SPObjectClass *) fePointLight_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_fepointlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object);
+
+    if (!repr) {
+        repr = SP_OBJECT_REPR(object)->duplicate(doc);
+    }
+
+    if (fepointlight->x_set)
+        sp_repr_set_css_double(repr, "x", fepointlight->x);
+    if (fepointlight->y_set)
+        sp_repr_set_css_double(repr, "y", fepointlight->y);
+    if (fepointlight->z_set)
+        sp_repr_set_css_double(repr, "z", fepointlight->z);
+
+    if (((SPObjectClass *) fePointLight_parent_class)->write) {
+        ((SPObjectClass *) fePointLight_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+/*
+  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/filters/pointlight.h b/src/filters/pointlight.h
new file mode 100644 (file)
index 0000000..915d726
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef SP_FEPOINTLIGHT_H_SEEN
+#define SP_FEPOINTLIGHT_H_SEEN
+
+/** \file
+ * SVG <filter> implementation, see sp-filter.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006,2007 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-object.h"
+
+#define SP_TYPE_FEPOINTLIGHT (sp_fepointlight_get_type())
+#define SP_FEPOINTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEPOINTLIGHT, SPFePointLight))
+#define SP_FEPOINTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEPOINTLIGHT, SPFePointLightClass))
+#define SP_IS_FEPOINTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEPOINTLIGHT))
+#define SP_IS_FEPOINTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEPOINTLIGHT))
+
+/* Distant light class */
+
+
+class SPFePointLight;
+class SPFePointLightClass;
+
+struct SPFePointLight : public SPObject {
+
+    /** x coordinate of the light source */
+    gfloat x; 
+    guint x_set : 1;
+    /** y coordinate of the light source */
+    gfloat y; 
+    guint y_set : 1;
+    /** z coordinate of the light source */
+    gfloat z; 
+    guint z_set : 1;
+
+    //other fields
+};
+
+struct SPFePointLightClass {
+    SPObjectClass parent_class;
+};
+
+GType
+sp_fepointlight_get_type();
+#endif /* !SP_FEPOINTLIGHT_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/filters/specularlighting-fns.h b/src/filters/specularlighting-fns.h
new file mode 100644 (file)
index 0000000..bd48ba6
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FESPECULARLIGHTING_FNS_H
+#define SP_FESPECULARLIGHTING_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeSpecularLighting;
+
+#define SP_TYPE_FESPECULARLIGHTING (sp_feSpecularLighting_get_type())
+#define SP_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLighting))
+#define SP_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLightingClass))
+#define SP_IS_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPECULARLIGHTING))
+#define SP_IS_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPECULARLIGHTING))
+
+GType sp_feSpecularLighting_get_type();
+
+#endif /* !SP_FESPECULARLIGHTING_FNS_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/filters/specularlighting.cpp b/src/filters/specularlighting.cpp
new file mode 100644 (file)
index 0000000..baf9bb7
--- /dev/null
@@ -0,0 +1,409 @@
+#define __SP_FESPECULARLIGHTING_CPP__
+
+/** \file
+ * SVG <feSpecularLighting> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *               2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-object.h"
+#include "svg/svg-color.h"
+#include "specularlighting.h"
+#include "xml/repr.h"
+#include "display/nr-filter-specularlighting.h"
+
+/* FeSpecularLighting base class */
+
+static void sp_feSpecularLighting_class_init(SPFeSpecularLightingClass *klass);
+static void sp_feSpecularLighting_init(SPFeSpecularLighting *feSpecularLighting);
+
+static void sp_feSpecularLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feSpecularLighting_release(SPObject *object);
+static void sp_feSpecularLighting_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feSpecularLighting_update(SPObject *object, SPCtx *ctx, guint flags);
+//we assume that svg:feSpecularLighting can have any number of children
+//only the first one is considered as the light source of the filter
+//TODO is that right?
+//if not modify child_added and remove_child to raise errors
+static void sp_feSpecularLighting_child_added(SPObject *object,
+                                    Inkscape::XML::Node *child,
+                                    Inkscape::XML::Node *ref);
+static void sp_feSpecularLighting_remove_child(SPObject *object, Inkscape::XML::Node *child);
+static void sp_feSpecularLighting_order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref);
+static Inkscape::XML::Node *sp_feSpecularLighting_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feSpecularLighting_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+static void sp_feSpecularLighting_children_modified(SPFeSpecularLighting *sp_specularlighting);
+
+static SPFilterPrimitiveClass *feSpecularLighting_parent_class;
+
+GType
+sp_feSpecularLighting_get_type()
+{
+    static GType feSpecularLighting_type = 0;
+
+    if (!feSpecularLighting_type) {
+        GTypeInfo feSpecularLighting_info = {
+            sizeof(SPFeSpecularLightingClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feSpecularLighting_class_init,
+            NULL, NULL,
+            sizeof(SPFeSpecularLighting),
+            16,
+            (GInstanceInitFunc) sp_feSpecularLighting_init,
+            NULL,    /* value_table */
+        };
+        feSpecularLighting_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeSpecularLighting", &feSpecularLighting_info, (GTypeFlags)0);
+    }
+    return feSpecularLighting_type;
+}
+
+static void
+sp_feSpecularLighting_class_init(SPFeSpecularLightingClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+    feSpecularLighting_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feSpecularLighting_build;
+    sp_object_class->release = sp_feSpecularLighting_release;
+    sp_object_class->write = sp_feSpecularLighting_write;
+    sp_object_class->set = sp_feSpecularLighting_set;
+    sp_object_class->update = sp_feSpecularLighting_update;
+    sp_object_class->child_added = sp_feSpecularLighting_child_added;
+    sp_object_class->remove_child = sp_feSpecularLighting_remove_child;
+    sp_object_class->order_changed = sp_feSpecularLighting_order_changed;
+
+    sp_primitive_class->build_renderer = sp_feSpecularLighting_build_renderer;
+}
+
+static void
+sp_feSpecularLighting_init(SPFeSpecularLighting *feSpecularLighting)
+{
+    feSpecularLighting->surfaceScale = 1;
+    feSpecularLighting->specularConstant = 1;
+    feSpecularLighting->specularExponent = 1;
+    feSpecularLighting->lighting_color = 0xffffffff;
+    //TODO kernelUnit
+    feSpecularLighting->renderer = NULL;
+    
+    feSpecularLighting->surfaceScale_set = FALSE;
+    feSpecularLighting->specularConstant_set = FALSE;
+    feSpecularLighting->specularExponent_set = FALSE;
+    feSpecularLighting->lighting_color_set = FALSE;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeSpecularLighting variables.  For this to get called,
+ * 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_feSpecularLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->build) {
+        ((SPObjectClass *) feSpecularLighting_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "surfaceScale");
+    sp_object_read_attr(object, "specularConstant");
+    sp_object_read_attr(object, "specularExponent");
+    sp_object_read_attr(object, "kernelUnitLength");
+    sp_object_read_attr(object, "lighting-color");
+    
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feSpecularLighting_release(SPObject *object)
+{
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->release)
+        ((SPObjectClass *) feSpecularLighting_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeSpecularLighting.
+ */
+static void
+sp_feSpecularLighting_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeSpecularLighting *feSpecularLighting = SP_FESPECULARLIGHTING(object);
+    gchar const *cend_ptr = NULL;
+    gchar *end_ptr = NULL;
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+//TODO test forbidden values
+        case SP_ATTR_SURFACESCALE:
+            end_ptr = NULL;
+            if (value) {
+                feSpecularLighting->surfaceScale = g_ascii_strtod(value, &end_ptr);
+                if (end_ptr) {
+                    feSpecularLighting->surfaceScale_set = TRUE;
+                } else {
+                    g_warning("feSpecularLighting: surfaceScale should be a number ... defaulting to 1");
+                }
+
+            }
+            //if the attribute is not set or has an unreadable value
+            if (!value || !end_ptr) {
+                feSpecularLighting->surfaceScale = 1;
+                feSpecularLighting->surfaceScale_set = FALSE;
+            }
+            if (feSpecularLighting->renderer) {
+                feSpecularLighting->renderer->surfaceScale = feSpecularLighting->surfaceScale;
+            }
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_SPECULARCONSTANT:
+            end_ptr = NULL;
+            if (value) {
+                feSpecularLighting->specularConstant = g_ascii_strtod(value, &end_ptr);
+                if (end_ptr && feSpecularLighting->specularConstant >= 0) {
+                    feSpecularLighting->specularConstant_set = TRUE;
+                } else {
+                    end_ptr = NULL;
+                    g_warning("feSpecularLighting: specularConstant should be a positive number ... defaulting to 1");
+                }
+            }
+            if (!value || !end_ptr) {
+                feSpecularLighting->specularConstant = 1;
+                feSpecularLighting->specularConstant_set = FALSE;
+            }
+            if (feSpecularLighting->renderer) {
+                feSpecularLighting->renderer->specularConstant = feSpecularLighting->specularConstant;
+            }
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_SPECULAREXPONENT:
+            end_ptr = NULL;
+            if (value) {
+                feSpecularLighting->specularExponent = g_ascii_strtod(value, &end_ptr);
+                if (feSpecularLighting->specularExponent >= 1 && feSpecularLighting->specularExponent <= 128) {
+                    feSpecularLighting->specularExponent_set = TRUE;
+                } else {
+                    end_ptr = NULL;
+                    g_warning("feSpecularLighting: specularExponent should be a number in range [1, 128] ... defaulting to 1");
+                }
+            } 
+            if (!value || !end_ptr) {
+                feSpecularLighting->specularExponent = 1;
+                feSpecularLighting->specularExponent_set = FALSE;
+            }
+            if (feSpecularLighting->renderer) {
+                feSpecularLighting->renderer->specularExponent = feSpecularLighting->specularExponent;
+            }
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_KERNELUNITLENGTH:
+            //TODO kernelUnit
+            //feSpecularLighting->kernelUnitLength.set(value);
+            /*TODOif (feSpecularLighting->renderer) {
+                feSpecularLighting->renderer->surfaceScale = feSpecularLighting->renderer;
+            }
+            */
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_PROP_LIGHTING_COLOR:
+            cend_ptr = NULL;
+            feSpecularLighting->lighting_color = sp_svg_read_color(value, &cend_ptr, 0xffffffff);
+            //if a value was read
+            if (cend_ptr) {
+                feSpecularLighting->lighting_color_set = TRUE;
+            } else {
+                //lighting_color already contains the default value
+                feSpecularLighting->lighting_color_set = FALSE;
+            }
+            if (feSpecularLighting->renderer) {
+                feSpecularLighting->renderer->lighting_color = feSpecularLighting->lighting_color;
+            }
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        default:
+            if (((SPObjectClass *) feSpecularLighting_parent_class)->set)
+                ((SPObjectClass *) feSpecularLighting_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feSpecularLighting_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG)) {
+        sp_object_read_attr(object, "surfaceScale");
+        sp_object_read_attr(object, "specularConstant");
+        sp_object_read_attr(object, "specularExponent");
+        sp_object_read_attr(object, "kernelUnitLength");
+        sp_object_read_attr(object, "lighting-color");
+    }
+
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->update) {
+        ((SPObjectClass *) feSpecularLighting_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feSpecularLighting_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    SPFeSpecularLighting *fespecularlighting = SP_FESPECULARLIGHTING(object);
+    
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+    if (fespecularlighting->surfaceScale_set)
+        sp_repr_set_css_double(repr, "surfaceScale", fespecularlighting->surfaceScale);
+    if (fespecularlighting->specularConstant_set)
+        sp_repr_set_css_double(repr, "specularConstant", fespecularlighting->specularConstant);
+    if (fespecularlighting->specularExponent_set)
+        sp_repr_set_css_double(repr, "specularExponent", fespecularlighting->specularExponent);
+   /*TODO kernelUnits */ 
+    if (fespecularlighting->lighting_color_set) {
+        gchar c[64];
+        sp_svg_write_color(c, sizeof(c), fespecularlighting->lighting_color);
+        repr->setAttribute("lighting-color", c);
+    }
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->write) {
+        ((SPObjectClass *) feSpecularLighting_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+/**
+ * Callback for child_added event.
+ */
+static void
+sp_feSpecularLighting_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+{
+    SPFeSpecularLighting *f = SP_FESPECULARLIGHTING(object);
+
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->child_added)
+        (* ((SPObjectClass *) feSpecularLighting_parent_class)->child_added)(object, child, ref);
+
+    sp_feSpecularLighting_children_modified(f);
+    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+            
+
+/**
+ * Callback for remove_child event.
+ */
+static void
+sp_feSpecularLighting_remove_child(SPObject *object, Inkscape::XML::Node *child)
+{   
+    SPFeSpecularLighting *f = SP_FESPECULARLIGHTING(object);
+
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->remove_child)
+        (* ((SPObjectClass *) feSpecularLighting_parent_class)->remove_child)(object, child);   
+
+    sp_feSpecularLighting_children_modified(f);
+    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+
+static void
+sp_feSpecularLighting_order_changed (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref)
+{
+    SPFeSpecularLighting *f = SP_FESPECULARLIGHTING(object);
+    if (((SPObjectClass *) (feSpecularLighting_parent_class))->order_changed)
+        (* ((SPObjectClass *) (feSpecularLighting_parent_class))->order_changed) (object, child, old_ref, new_ref);
+
+    sp_feSpecularLighting_children_modified(f);
+    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+}
+
+static void sp_feSpecularLighting_children_modified(SPFeSpecularLighting *sp_specularlighting)
+{
+   if (sp_specularlighting->renderer) {
+        sp_specularlighting->renderer->light_type = NR::NO_LIGHT;
+        if (SP_IS_FEDISTANTLIGHT(sp_specularlighting->children)) {
+            sp_specularlighting->renderer->light_type = NR::DISTANT_LIGHT;
+            sp_specularlighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_specularlighting->children);
+        }
+        if (SP_IS_FEPOINTLIGHT(sp_specularlighting->children)) {
+            sp_specularlighting->renderer->light_type = NR::POINT_LIGHT;
+            sp_specularlighting->renderer->light.point = SP_FEPOINTLIGHT(sp_specularlighting->children);
+        }
+        if (SP_IS_FESPOTLIGHT(sp_specularlighting->children)) {
+            sp_specularlighting->renderer->light_type = NR::SPOT_LIGHT;
+            sp_specularlighting->renderer->light.spot = SP_FESPOTLIGHT(sp_specularlighting->children);
+        }
+   }
+}
+
+static void sp_feSpecularLighting_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeSpecularLighting *sp_specularlighting = SP_FESPECULARLIGHTING(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_SPECULARLIGHTING);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterSpecularLighting *nr_specularlighting = dynamic_cast<NR::FilterSpecularLighting*>(nr_primitive);
+    g_assert(nr_specularlighting != NULL);
+
+    sp_specularlighting->renderer = nr_specularlighting;
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_specularlighting->specularConstant = sp_specularlighting->specularConstant;
+    nr_specularlighting->specularExponent = sp_specularlighting->specularExponent;
+    nr_specularlighting->surfaceScale = sp_specularlighting->surfaceScale;
+    nr_specularlighting->lighting_color = sp_specularlighting->lighting_color;
+    //We assume there is at most one child
+    nr_specularlighting->light_type = NR::NO_LIGHT;
+    if (SP_IS_FEDISTANTLIGHT(primitive->children)) {
+        nr_specularlighting->light_type = NR::DISTANT_LIGHT;
+        nr_specularlighting->light.distant = SP_FEDISTANTLIGHT(primitive->children);
+    }
+    if (SP_IS_FEPOINTLIGHT(primitive->children)) {
+        nr_specularlighting->light_type = NR::POINT_LIGHT;
+        nr_specularlighting->light.point = SP_FEPOINTLIGHT(primitive->children);
+    }
+    if (SP_IS_FESPOTLIGHT(primitive->children)) {
+        nr_specularlighting->light_type = NR::SPOT_LIGHT;
+        nr_specularlighting->light.spot = SP_FESPOTLIGHT(primitive->children);
+    }
+        
+    //nr_offset->set_dx(sp_offset->dx);
+    //nr_offset->set_dy(sp_offset->dy);
+}
+
+
+/*
+  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/filters/specularlighting.h b/src/filters/specularlighting.h
new file mode 100644 (file)
index 0000000..c2a55df
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef SP_FESPECULARLIGHTING_H_SEEN
+#define SP_FESPECULARLIGHTING_H_SEEN
+
+/** \file
+ * SVG <feSpecularLighting> implementation, see SpecularLighting.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *               2007 authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "specularlighting-fns.h"
+
+namespace NR {
+class FilterSpecularLighting;
+}
+
+/* FeSpecularLighting base class */
+class SPFeSpecularLightingClass;
+
+struct SPFeSpecularLighting : public SPFilterPrimitive {
+    /** SPECULARLIGHTING ATTRIBUTES HERE */
+    /** surfaceScale attribute */
+    gfloat surfaceScale;
+    guint surfaceScale_set : 1;
+    /** specularConstant attribute */
+    gfloat specularConstant;
+    guint specularConstant_set : 1;
+    /** specularConstant attribute */
+    gfloat specularExponent;
+    guint specularExponent_set : 1;
+    /** kernelUnitLenght attribute */
+    NumberOptNumber kernelUnitLength;
+    /** lighting-color property */
+    guint32 lighting_color;
+    guint lighting_color_set : 1;
+
+    NR::FilterSpecularLighting *renderer;
+};
+
+struct SPFeSpecularLightingClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feSpecularLighting_get_type();
+
+
+#endif /* !SP_FESPECULARLIGHTING_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/filters/spotlight.cpp b/src/filters/spotlight.cpp
new file mode 100644 (file)
index 0000000..3b518f0
--- /dev/null
@@ -0,0 +1,372 @@
+#define __SP_FESPOTLIGHT_CPP__
+
+/** \file
+ * SVG <fespotlight> implementation.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006,2007 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "attributes.h"
+#include "document.h"
+#include "spotlight.h"
+#include "diffuselighting-fns.h"
+#include "specularlighting-fns.h"
+#include "xml/repr.h"
+
+#define SP_MACROS_SILENT
+#include "macros.h"
+
+/* FeSpotLight class */
+
+static void sp_fespotlight_class_init(SPFeSpotLightClass *klass);
+static void sp_fespotlight_init(SPFeSpotLight *fespotlight);
+
+static void sp_fespotlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_fespotlight_release(SPObject *object);
+static void sp_fespotlight_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_fespotlight_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_fespotlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feSpotLight_parent_class;
+
+GType
+sp_fespotlight_get_type()
+{
+    static GType fespotlight_type = 0;
+
+    if (!fespotlight_type) {
+        GTypeInfo fespotlight_info = {
+            sizeof(SPFeSpotLightClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_fespotlight_class_init,
+            NULL, NULL,
+            sizeof(SPFeSpotLight),
+            16,
+            (GInstanceInitFunc) sp_fespotlight_init,
+            NULL,    /* value_table */
+        };
+        fespotlight_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeSpotLight", &fespotlight_info, (GTypeFlags)0);
+    }
+    return fespotlight_type;
+}
+
+static void
+sp_fespotlight_class_init(SPFeSpotLightClass *klass)
+{
+
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feSpotLight_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_fespotlight_build;
+    sp_object_class->release = sp_fespotlight_release;
+    sp_object_class->write = sp_fespotlight_write;
+    sp_object_class->set = sp_fespotlight_set;
+    sp_object_class->update = sp_fespotlight_update;
+}
+
+static void
+sp_fespotlight_init(SPFeSpotLight *fespotlight)
+{
+    fespotlight->x = 0;
+    fespotlight->y = 0;
+    fespotlight->z = 0;
+    fespotlight->pointsAtX = 0;
+    fespotlight->pointsAtY = 0;
+    fespotlight->pointsAtZ = 0;
+    fespotlight->specularExponent = 1;
+    fespotlight->limitingConeAngle = 90;
+
+    fespotlight->x_set = FALSE;
+    fespotlight->y_set = FALSE;
+    fespotlight->z_set = FALSE;
+    fespotlight->pointsAtX_set = FALSE;
+    fespotlight->pointsAtY_set = FALSE;
+    fespotlight->pointsAtZ_set = FALSE;
+    fespotlight->specularExponent_set = FALSE;
+    fespotlight->limitingConeAngle_set = FALSE;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPPointLight variables.  For this to get called,
+ * 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_fespotlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feSpotLight_parent_class)->build) {
+        ((SPObjectClass *) feSpotLight_parent_class)->build(object, document, repr);
+    }
+
+    //Read values of key attributes from XML nodes into object.
+    sp_object_read_attr(object, "x");
+    sp_object_read_attr(object, "y");
+    sp_object_read_attr(object, "z");
+    sp_object_read_attr(object, "pointsAtX");
+    sp_object_read_attr(object, "pointsAtY");
+    sp_object_read_attr(object, "pointsAtZ");
+    sp_object_read_attr(object, "specularExponent");
+    sp_object_read_attr(object, "limitingConeAngle");
+
+//is this necessary?
+    sp_document_add_resource(document, "fespotlight", object);
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_fespotlight_release(SPObject *object)
+{
+    //SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object);
+
+    if (SP_OBJECT_DOCUMENT(object)) {
+        /* Unregister ourselves */
+        sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fespotlight", SP_OBJECT(object));
+    }
+
+//TODO: release resources here
+}
+
+/**
+ * Sets a specific value in the SPFeSpotLight.
+ */
+static void
+sp_fespotlight_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object);
+    gchar *end_ptr;
+
+    switch (key) {
+    case SP_ATTR_X:
+        end_ptr = NULL;
+        if (value) {
+            fespotlight->x = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr)
+                fespotlight->x_set = TRUE;
+        }
+        if(!value || !end_ptr) {
+            fespotlight->x = 0;
+            fespotlight->x_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_Y:
+        end_ptr = NULL;
+        if (value) {
+            fespotlight->y = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr)
+                fespotlight->y_set = TRUE;
+        }
+        if(!value || !end_ptr) {
+            fespotlight->y = 0;
+            fespotlight->y_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_Z:
+        end_ptr = NULL;
+        if (value) {
+            fespotlight->z = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr)
+                fespotlight->z_set = TRUE;
+        }
+        if(!value || !end_ptr) {
+            fespotlight->z = 0;
+            fespotlight->z_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_POINTSATX:
+        end_ptr = NULL;
+        if (value) {
+            fespotlight->pointsAtX = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr)
+                fespotlight->pointsAtX_set = TRUE;
+        }
+        if(!value || !end_ptr) {
+            fespotlight->pointsAtX = 0;
+            fespotlight->pointsAtX_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_POINTSATY:
+        end_ptr = NULL;
+        if (value) {
+            fespotlight->pointsAtY = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr)
+                fespotlight->pointsAtY_set = TRUE;
+        }
+        if(!value || !end_ptr) {
+            fespotlight->pointsAtY = 0;
+            fespotlight->pointsAtY_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_POINTSATZ:
+        end_ptr = NULL;
+        if (value) {
+            fespotlight->pointsAtZ = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr)
+                fespotlight->pointsAtZ_set = TRUE;
+        }
+        if(!value || !end_ptr) {
+            fespotlight->pointsAtZ = 0;
+            fespotlight->pointsAtZ_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_SPECULAREXPONENT:
+        end_ptr = NULL;
+        if (value) {
+            fespotlight->specularExponent = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr)
+                fespotlight->specularExponent_set = TRUE;
+        }
+        if(!value || !end_ptr) {
+            fespotlight->specularExponent = 1;
+            fespotlight->specularExponent_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    case SP_ATTR_LIMITINGCONEANGLE:
+        end_ptr = NULL;
+        if (value) {
+            fespotlight->limitingConeAngle = g_ascii_strtod(value, &end_ptr);
+            if (end_ptr)
+                fespotlight->limitingConeAngle_set = TRUE;
+        }
+        if(!value || !end_ptr) {
+            fespotlight->limitingConeAngle = 90;
+            fespotlight->limitingConeAngle_set = FALSE;
+        }
+        if (object->parent &&
+                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
+                 SP_IS_FESPECULARLIGHTING(object->parent))) {
+            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        break;
+    default:
+        // See if any parents need this value.
+        if (((SPObjectClass *) feSpotLight_parent_class)->set) {
+            ((SPObjectClass *) feSpotLight_parent_class)->set(object, key, value);
+        }
+        break;
+    }
+}
+
+/**
+ *  * Receives update notifications.
+ *   */
+static void
+sp_fespotlight_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    SPFeSpotLight *feSpotLight = SP_FESPOTLIGHT(object);
+    (void)feSpotLight;
+
+    if (flags & SP_OBJECT_MODIFIED_FLAG) {
+        /* do something to trigger redisplay, updates? */
+        sp_object_read_attr(object, "x");
+        sp_object_read_attr(object, "y");
+        sp_object_read_attr(object, "z");
+        sp_object_read_attr(object, "pointsAtX");
+        sp_object_read_attr(object, "pointsAtY");
+        sp_object_read_attr(object, "pointsAtZ");
+        sp_object_read_attr(object, "specularExponent");
+        sp_object_read_attr(object, "limitingConeAngle");
+    }
+
+    if (((SPObjectClass *) feSpotLight_parent_class)->update) {
+        ((SPObjectClass *) feSpotLight_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_fespotlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object);
+
+    if (!repr) {
+        repr = SP_OBJECT_REPR(object)->duplicate(doc);
+    }
+
+    if (fespotlight->x_set)
+        sp_repr_set_css_double(repr, "x", fespotlight->x);
+    if (fespotlight->y_set)
+        sp_repr_set_css_double(repr, "y", fespotlight->y);
+    if (fespotlight->z_set)
+        sp_repr_set_css_double(repr, "z", fespotlight->z);
+    if (fespotlight->pointsAtX_set)
+        sp_repr_set_css_double(repr, "pointsAtX", fespotlight->pointsAtX);
+    if (fespotlight->pointsAtY_set)
+        sp_repr_set_css_double(repr, "pointsAtY", fespotlight->pointsAtY);
+    if (fespotlight->pointsAtZ_set)
+        sp_repr_set_css_double(repr, "pointsAtZ", fespotlight->pointsAtZ);
+    if (fespotlight->specularExponent_set)
+        sp_repr_set_css_double(repr, "specularExponent", fespotlight->specularExponent);
+    if (fespotlight->limitingConeAngle_set)
+        sp_repr_set_css_double(repr, "limitingConeAngle", fespotlight->limitingConeAngle);
+
+    if (((SPObjectClass *) feSpotLight_parent_class)->write) {
+        ((SPObjectClass *) feSpotLight_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+/*
+  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/filters/spotlight.h b/src/filters/spotlight.h
new file mode 100644 (file)
index 0000000..d48cf6d
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef SP_FESPOTLIGHT_H_SEEN
+#define SP_FESPOTLIGHT_H_SEEN
+
+/** \file
+ * SVG <filter> implementation, see sp-filter.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *   Niko Kiirala <niko@kiirala.com>
+ *   Jean-Rene Reinhard <jr@komite.net>
+ *
+ * Copyright (C) 2006,2007 Authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-object.h"
+
+#define SP_TYPE_FESPOTLIGHT (sp_fespotlight_get_type())
+#define SP_FESPOTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPOTLIGHT, SPFeSpotLight))
+#define SP_FESPOTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPOTLIGHT, SPFeSpotLightClass))
+#define SP_IS_FESPOTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPOTLIGHT))
+#define SP_IS_FESPOTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPOTLIGHT))
+
+/* Distant light class */
+
+
+class SPFeSpotLight;
+class SPFeSpotLightClass;
+
+struct SPFeSpotLight : public SPObject {
+
+    /** x coordinate of the light source */
+    gfloat x; 
+    guint x_set : 1;
+    /** y coordinate of the light source */
+    gfloat y; 
+    guint y_set : 1;
+    /** z coordinate of the light source */
+    gfloat z; 
+    guint z_set : 1;
+    /** x coordinate of the point the source is pointing at */
+    gfloat pointsAtX;
+    guint pointsAtX_set : 1;
+    /** y coordinate of the point the source is pointing at */
+    gfloat pointsAtY;
+    guint pointsAtY_set : 1;
+    /** z coordinate of the point the source is pointing at */
+    gfloat pointsAtZ;
+    guint pointsAtZ_set : 1;
+    /** specular exponent (focus of the light) */
+    gfloat specularExponent;
+    guint specularExponent_set : 1;
+    /** limiting cone angle */
+    gfloat limitingConeAngle;
+    guint limitingConeAngle_set : 1;
+    //other fields
+};
+
+struct SPFeSpotLightClass {
+    SPObjectClass parent_class;
+};
+
+GType
+sp_fespotlight_get_type();
+#endif /* !SP_FESPOTLIGHT_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/filters/tile-fns.h b/src/filters/tile-fns.h
new file mode 100644 (file)
index 0000000..b7c4c5f
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FETILE_FNS_H
+#define SP_FETILE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeTile;
+
+#define SP_TYPE_FETILE (sp_feTile_get_type())
+#define SP_FETILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETILE, SPFeTile))
+#define SP_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETILE, SPFeTileClass))
+#define SP_IS_FETILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETILE))
+#define SP_IS_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETILE))
+
+GType sp_feTile_get_type();
+
+#endif /* !SP_FETILE_FNS_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/filters/tile.cpp b/src/filters/tile.cpp
new file mode 100644 (file)
index 0000000..ab4f9a2
--- /dev/null
@@ -0,0 +1,191 @@
+#define __SP_FETILE_CPP__
+
+/** \file
+ * SVG <feTile> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "tile.h"
+#include "xml/repr.h"
+
+
+/* FeTile base class */
+
+static void sp_feTile_class_init(SPFeTileClass *klass);
+static void sp_feTile_init(SPFeTile *feTile);
+
+static void sp_feTile_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feTile_release(SPObject *object);
+static void sp_feTile_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feTile_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feTile_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feTile_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feTile_parent_class;
+
+GType
+sp_feTile_get_type()
+{
+    static GType feTile_type = 0;
+
+    if (!feTile_type) {
+        GTypeInfo feTile_info = {
+            sizeof(SPFeTileClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feTile_class_init,
+            NULL, NULL,
+            sizeof(SPFeTile),
+            16,
+            (GInstanceInitFunc) sp_feTile_init,
+            NULL,    /* value_table */
+        };
+        feTile_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeTile", &feTile_info, (GTypeFlags)0);
+    }
+    return feTile_type;
+}
+
+static void
+sp_feTile_class_init(SPFeTileClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feTile_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feTile_build;
+    sp_object_class->release = sp_feTile_release;
+    sp_object_class->write = sp_feTile_write;
+    sp_object_class->set = sp_feTile_set;
+    sp_object_class->update = sp_feTile_update;
+    sp_primitive_class->build_renderer = sp_feTile_build_renderer;
+}
+
+static void
+sp_feTile_init(SPFeTile */*feTile*/)
+{
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeTile variables.  For this to get called,
+ * 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_feTile_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feTile_parent_class)->build) {
+        ((SPObjectClass *) feTile_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feTile_release(SPObject *object)
+{
+    if (((SPObjectClass *) feTile_parent_class)->release)
+        ((SPObjectClass *) feTile_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeTile.
+ */
+static void
+sp_feTile_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeTile *feTile = SP_FETILE(object);
+    (void)feTile;
+
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feTile_parent_class)->set)
+                ((SPObjectClass *) feTile_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feTile_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feTile_parent_class)->update) {
+        ((SPObjectClass *) feTile_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feTile_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feTile_parent_class)->write) {
+        ((SPObjectClass *) feTile_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feTile_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeTile *sp_tile = SP_FETILE(primitive);
+    (void)sp_tile;
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_TILE);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterTile *nr_tile = dynamic_cast<NR::FilterTile*>(nr_primitive);
+    g_assert(nr_tile != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+}
+
+/*
+  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/filters/tile.h b/src/filters/tile.h
new file mode 100644 (file)
index 0000000..9e12ca7
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef SP_FETILE_H_SEEN
+#define SP_FETILE_H_SEEN
+
+/** \file
+ * SVG <feTile> implementation, see Tile.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "tile-fns.h"
+
+#include "display/nr-filter.h"
+#include "display/nr-filter-tile.h"
+
+/* FeTile base class */
+class SPFeTileClass;
+
+struct SPFeTile : public SPFilterPrimitive {
+    /** TILE ATTRIBUTES HERE */
+    
+};
+
+struct SPFeTileClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feTile_get_type();
+
+
+#endif /* !SP_FETILE_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/filters/turbulence-fns.h b/src/filters/turbulence-fns.h
new file mode 100644 (file)
index 0000000..43b4450
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FETURBULENCE_FNS_H
+#define SP_FETURBULENCE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeTurbulence;
+
+#define SP_TYPE_FETURBULENCE (sp_feTurbulence_get_type())
+#define SP_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETURBULENCE, SPFeTurbulence))
+#define SP_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETURBULENCE, SPFeTurbulenceClass))
+#define SP_IS_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETURBULENCE))
+#define SP_IS_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETURBULENCE))
+
+GType sp_feTurbulence_get_type();
+
+#endif /* !SP_FETURBULENCE_FNS_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/filters/turbulence.cpp b/src/filters/turbulence.cpp
new file mode 100644 (file)
index 0000000..1d7a1c8
--- /dev/null
@@ -0,0 +1,283 @@
+#define __SP_FETURBULENCE_CPP__
+
+/** \file
+ * SVG <feTurbulence> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2007 Felipe Sanches
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "turbulence.h"
+#include "helper-fns.h"
+#include "xml/repr.h"
+#include <string.h>
+
+#include "display/nr-filter.h"
+#include "display/nr-filter-turbulence.h"
+
+/* FeTurbulence base class */
+
+static void sp_feTurbulence_class_init(SPFeTurbulenceClass *klass);
+static void sp_feTurbulence_init(SPFeTurbulence *feTurbulence);
+
+static void sp_feTurbulence_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feTurbulence_release(SPObject *object);
+static void sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feTurbulence_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feTurbulence_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+static void sp_feTurbulence_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
+
+static SPFilterPrimitiveClass *feTurbulence_parent_class;
+
+GType
+sp_feTurbulence_get_type()
+{
+    static GType feTurbulence_type = 0;
+
+    if (!feTurbulence_type) {
+        GTypeInfo feTurbulence_info = {
+            sizeof(SPFeTurbulenceClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feTurbulence_class_init,
+            NULL, NULL,
+            sizeof(SPFeTurbulence),
+            16,
+            (GInstanceInitFunc) sp_feTurbulence_init,
+            NULL,    /* value_table */
+        };
+        feTurbulence_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeTurbulence", &feTurbulence_info, (GTypeFlags)0);
+    }
+    return feTurbulence_type;
+}
+
+static void
+sp_feTurbulence_class_init(SPFeTurbulenceClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+    SPFilterPrimitiveClass * sp_primitive_class = (SPFilterPrimitiveClass *)klass;
+
+    feTurbulence_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feTurbulence_build;
+    sp_object_class->release = sp_feTurbulence_release;
+    sp_object_class->write = sp_feTurbulence_write;
+    sp_object_class->set = sp_feTurbulence_set;
+    sp_object_class->update = sp_feTurbulence_update;
+
+    sp_primitive_class->build_renderer = sp_feTurbulence_build_renderer;
+}
+
+static void
+sp_feTurbulence_init(SPFeTurbulence *feTurbulence)
+{
+    feTurbulence->updated=false;
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeTurbulence variables.  For this to get called,
+ * 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_feTurbulence_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    if (((SPObjectClass *) feTurbulence_parent_class)->build) {
+        ((SPObjectClass *) feTurbulence_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+    sp_object_read_attr(object, "baseFrequency");
+    sp_object_read_attr(object, "numOctaves");
+    sp_object_read_attr(object, "seed");
+    sp_object_read_attr(object, "stitchTiles");
+    sp_object_read_attr(object, "type");
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feTurbulence_release(SPObject *object)
+{
+    if (((SPObjectClass *) feTurbulence_parent_class)->release)
+        ((SPObjectClass *) feTurbulence_parent_class)->release(object);
+}
+
+static bool sp_feTurbulence_read_stitchTiles(gchar const *value){
+    if (!value) return false; // 'noStitch' is default
+    switch(value[0]){
+        case 's':
+            if (strncmp(value, "stitch", 6) == 0) return true;
+            break;
+        case 'n':
+            if (strncmp(value, "noStitch", 8) == 0) return false;
+            break;
+    }
+    return false; // 'noStitch' is default
+}
+
+static NR::FilterTurbulenceType sp_feTurbulence_read_type(gchar const *value){
+    if (!value) return NR::TURBULENCE_TURBULENCE; // 'turbulence' is default
+    switch(value[0]){
+        case 'f':
+            if (strncmp(value, "fractalNoise", 12) == 0) return NR::TURBULENCE_FRACTALNOISE;
+            break;
+        case 't':
+            if (strncmp(value, "turbulence", 10) == 0) return NR::TURBULENCE_TURBULENCE;
+            break;
+    }
+    return NR::TURBULENCE_TURBULENCE; // 'turbulence' is default
+}
+
+/**
+ * Sets a specific value in the SPFeTurbulence.
+ */
+static void
+sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    SPFeTurbulence *feTurbulence = SP_FETURBULENCE(object);
+    (void)feTurbulence;
+
+    int read_int;
+    double read_num;
+    bool read_bool;
+    NR::FilterTurbulenceType read_type;
+
+    switch(key) {
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+
+        case SP_ATTR_BASEFREQUENCY:
+            feTurbulence->baseFrequency.set(value);
+                //From SVG spec: If two <number>s are provided, the first number represents a base frequency in the X direction and the second value represents a base frequency in the Y direction. If one number is provided, then that value is used for both X and Y.
+            if (feTurbulence->baseFrequency.optNumIsSet() == false)
+                feTurbulence->baseFrequency.setOptNumber(feTurbulence->baseFrequency.getNumber());
+            feTurbulence->updated = false;
+            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+        case SP_ATTR_NUMOCTAVES:
+            read_int = (int) helperfns_read_number(value);
+            if (read_int != feTurbulence->numOctaves){
+                feTurbulence->numOctaves = read_int;
+                feTurbulence->updated = false;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_SEED:
+            read_num = helperfns_read_number(value);
+            if (read_num != feTurbulence->seed){
+                feTurbulence->seed = read_num;
+                feTurbulence->updated = false;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_STITCHTILES:
+            read_bool = sp_feTurbulence_read_stitchTiles(value);
+            if (read_bool != feTurbulence->stitchTiles){
+                feTurbulence->stitchTiles = read_bool;
+                feTurbulence->updated = false;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        case SP_ATTR_TYPE:
+            read_type = sp_feTurbulence_read_type(value);
+            if (read_type != feTurbulence->type){
+                feTurbulence->type = read_type;
+                feTurbulence->updated = false;
+                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            }
+            break;
+        default:
+            if (((SPObjectClass *) feTurbulence_parent_class)->set)
+                ((SPObjectClass *) feTurbulence_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feTurbulence_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feTurbulence_parent_class)->update) {
+        ((SPObjectClass *) feTurbulence_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feTurbulence_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+{
+    // Inkscape-only object, not copied during an "plain SVG" dump:
+    if (flags & SP_OBJECT_WRITE_EXT) {
+        if (repr) {
+            // is this sane?
+            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
+        }
+    }
+
+    if (((SPObjectClass *) feTurbulence_parent_class)->write) {
+        ((SPObjectClass *) feTurbulence_parent_class)->write(object, doc, repr, flags);
+    }
+
+    return repr;
+}
+
+static void sp_feTurbulence_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
+    g_assert(primitive != NULL);
+    g_assert(filter != NULL);
+
+    SPFeTurbulence *sp_turbulence = SP_FETURBULENCE(primitive);
+
+    int primitive_n = filter->add_primitive(NR::NR_FILTER_TURBULENCE);
+    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
+    NR::FilterTurbulence *nr_turbulence = dynamic_cast<NR::FilterTurbulence*>(nr_primitive);
+    g_assert(nr_turbulence != NULL);
+
+    sp_filter_primitive_renderer_common(primitive, nr_primitive);
+
+    nr_turbulence->set_baseFrequency(0, sp_turbulence->baseFrequency.getNumber());
+    nr_turbulence->set_baseFrequency(1, sp_turbulence->baseFrequency.getOptNumber());
+    nr_turbulence->set_numOctaves(sp_turbulence->numOctaves);
+    nr_turbulence->set_seed(sp_turbulence->seed);
+    nr_turbulence->set_stitchTiles(sp_turbulence->stitchTiles);
+    nr_turbulence->set_type(sp_turbulence->type);
+    nr_turbulence->set_updated(sp_turbulence->updated);
+}
+
+/*
+  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/filters/turbulence.h b/src/filters/turbulence.h
new file mode 100644 (file)
index 0000000..3601a7c
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef SP_FETURBULENCE_H_SEEN
+#define SP_FETURBULENCE_H_SEEN
+
+/** \file
+ * SVG <feTurbulence> implementation, see Turbulence.cpp.
+ */
+/*
+ * Authors:
+ *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "turbulence-fns.h"
+#include "number-opt-number.h"
+#include "display/nr-filter-turbulence.h"
+
+/* FeTurbulence base class */
+class SPFeTurbulenceClass;
+
+struct SPFeTurbulence : public SPFilterPrimitive {
+    /** TURBULENCE ATTRIBUTES HERE */
+    NumberOptNumber baseFrequency;
+    int numOctaves;
+    double seed;
+    bool stitchTiles;
+    NR::FilterTurbulenceType type;
+    SVGLength x, y, height, width;
+    bool updated;
+};
+
+struct SPFeTurbulenceClass {
+    SPFilterPrimitiveClass parent_class;
+};
+
+GType sp_feTurbulence_get_type();
+
+
+#endif /* !SP_FETURBULENCE_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 9927919765bd94df74bd6fede5608cab7fc4ae41..a45ec5dfe79569b53d5e19359789447216322e76 100644 (file)
@@ -807,7 +807,7 @@ static void sp_flood_do_flood_fill(SPEventContext *event_context, GdkEvent *even
     sp_document_ensure_up_to_date (document);
     
     SPItem *document_root = SP_ITEM(SP_DOCUMENT_ROOT(document));
-    boost::optional<Geom::Rect> bbox = document_root->getBounds(Geom::identity());
+    Geom::OptRect bbox = document_root->getBounds(Geom::identity());
 
     if (!bbox) {
         desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("<b>Area is not bounded</b>, cannot fill."));
index 0fa24ccad6c7ab22e6670c5e7b14ec2f1f6854e7..4abd7483f42207c2c968d39e51e4ea5c8da17992 100644 (file)
@@ -285,9 +285,9 @@ sp_gradient_reset_to_userspace (SPGradient *gr, SPItem *item)
 
     // calculate the bbox of the item
     sp_document_ensure_up_to_date(SP_OBJECT_DOCUMENT(item));
-    boost::optional<Geom::Rect> bbox = item->getBounds(Geom::identity()); // we need "true" bbox without item_i2d_affine
+    Geom::OptRect bbox = item->getBounds(Geom::identity()); // we need "true" bbox without item_i2d_affine
 
-    if ( !bbox || bbox->isEmpty() )
+    if (!bbox)
         return gr;
 
     Geom::Coord const width = bbox->dimensions()[Geom::X];
@@ -346,8 +346,8 @@ sp_gradient_convert_to_userspace(SPGradient *gr, SPItem *item, gchar const *prop
         // calculate the bbox of the item
         sp_document_ensure_up_to_date(SP_OBJECT_DOCUMENT(item));
         Geom::Matrix bbox2user;
-        boost::optional<Geom::Rect> bbox = item->getBounds(Geom::identity()); // we need "true" bbox without item_i2d_affine
-        if ( bbox && !bbox->isEmpty() ) {
+        Geom::OptRect bbox = item->getBounds(Geom::identity()); // we need "true" bbox without item_i2d_affine
+        if ( bbox ) {
             bbox2user = Geom::Matrix(bbox->dimensions()[Geom::X], 0,
                                    0, bbox->dimensions()[Geom::Y],
                                    bbox->min()[Geom::X], bbox->min()[Geom::Y]);
@@ -1098,7 +1098,7 @@ sp_item_gradient_get_coords (SPItem *item, guint point_type, guint point_i, bool
 
     if (SP_GRADIENT(gradient)->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
         sp_document_ensure_up_to_date(SP_OBJECT_DOCUMENT(item));
-        boost::optional<Geom::Rect> bbox = item->getBounds(Geom::identity()); // we need "true" bbox without item_i2d_affine
+        Geom::OptRect bbox = item->getBounds(Geom::identity()); // we need "true" bbox without item_i2d_affine
         if (bbox) {
             p *= Geom::Matrix(bbox->dimensions()[Geom::X], 0,
                             0, bbox->dimensions()[Geom::Y],
index 3741bc499a7437b0a3a7eab055fa5d25f6bb9379..b4f52a7c9bf7fa909564ca540d335badf1d677fd 100644 (file)
@@ -57,7 +57,7 @@ static void sp_gradient_context_setup(SPEventContext *ec);
 
 static gint sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event);
 
-static void sp_gradient_drag(SPGradientContext &rc, NR::Point const pt, guint state, guint32 etime);
+static void sp_gradient_drag(SPGradientContext &rc, Geom::Point const pt, guint state, guint32 etime);
 
 static SPEventContextClass *parent_class;
 
@@ -241,7 +241,7 @@ sp_gradient_context_select_prev (SPEventContext *event_context)
 }
 
 static bool
-sp_gradient_context_is_over_line (SPGradientContext *rc, SPItem *item, NR::Point event_p)
+sp_gradient_context_is_over_line (SPGradientContext *rc, SPItem *item, Geom::Point event_p)
 {
     SPDesktop *desktop = SP_EVENT_CONTEXT (rc)->desktop;
 
@@ -260,10 +260,10 @@ sp_gradient_context_is_over_line (SPGradientContext *rc, SPItem *item, NR::Point
     return close;
 }
 
-std::vector<NR::Point>
+std::vector<Geom::Point>
 sp_gradient_context_get_stop_intervals (GrDrag *drag, GSList **these_stops, GSList **next_stops)
 {
-    std::vector<NR::Point> coords;
+    std::vector<Geom::Point> coords;
 
     // for all selected draggers
     for (GList *i = drag->selected; i != NULL; i = i->next) {
@@ -349,7 +349,7 @@ sp_gradient_context_add_stops_between_selected_stops (SPGradientContext *rc)
     GSList *these_stops = NULL;
     GSList *next_stops = NULL;
 
-    std::vector<NR::Point> coords = sp_gradient_context_get_stop_intervals (drag, &these_stops, &next_stops);
+    std::vector<Geom::Point> coords = sp_gradient_context_get_stop_intervals (drag, &these_stops, &next_stops);
 
     if (g_slist_length(these_stops) == 0 && drag->numSelected() == 1) {
         // if a single stop is selected, add between that stop and the next one
@@ -406,7 +406,7 @@ sp_gradient_simplify(SPGradientContext *rc, double tolerance)
     GSList *these_stops = NULL;
     GSList *next_stops = NULL;
 
-    std::vector<NR::Point> coords = sp_gradient_context_get_stop_intervals (drag, &these_stops, &next_stops);
+    std::vector<Geom::Point> coords = sp_gradient_context_get_stop_intervals (drag, &these_stops, &next_stops);
 
     GSList *todel = NULL;
 
@@ -464,7 +464,7 @@ sp_gradient_simplify(SPGradientContext *rc, double tolerance)
 
 
 static void
-sp_gradient_context_add_stop_near_point (SPGradientContext *rc, SPItem *item,  NR::Point mouse_p, guint32 /*etime*/)
+sp_gradient_context_add_stop_near_point (SPGradientContext *rc, SPItem *item,  Geom::Point mouse_p, guint32 /*etime*/)
 {
     // item is the selected item. mouse_p the location in doc coordinates of where to add the stop
 
@@ -508,7 +508,7 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
             if (drag->lines) {
                 for (GSList *l = drag->lines; (l != NULL) && (!over_line); l = l->next) {
                     line = (SPCtrlLine*) l->data;
-                    over_line |= sp_gradient_context_is_over_line (rc, (SPItem*) line, NR::Point(event->motion.x, event->motion.y));
+                    over_line |= sp_gradient_context_is_over_line (rc, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
                 }
             }
             if (over_line) {
@@ -535,11 +535,11 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
         break;
     case GDK_BUTTON_PRESS:
         if ( event->button.button == 1 && !event_context->space_panning ) {
-            NR::Point button_w(event->button.x, event->button.y);
+            Geom::Point button_w(event->button.x, event->button.y);
 
             // save drag origin
-            event_context->xp = (gint) button_w[NR::X];
-            event_context->yp = (gint) button_w[NR::Y];
+            event_context->xp = (gint) button_w[Geom::X];
+            event_context->yp = (gint) button_w[Geom::Y];
             event_context->within_tolerance = true;
 
             dragging = true;
@@ -577,9 +577,9 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
             // motion notify coordinates as given (no snapping back to origin)
             event_context->within_tolerance = false;
 
-            NR::Point const motion_w(event->motion.x,
+            Geom::Point const motion_w(event->motion.x,
                                      event->motion.y);
-            NR::Point const motion_dt = event_context->desktop->w2d(motion_w);
+            Geom::Point const motion_dt = event_context->desktop->w2d(motion_w);
 
             if (Inkscape::Rubberband::get(desktop)->is_started()) {
                 Inkscape::Rubberband::get(desktop)->move(motion_dt);
@@ -594,7 +594,7 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
             bool over_line = false;
             if (drag->lines) {
                 for (GSList *l = drag->lines; l != NULL; l = l->next) {
-                    over_line |= sp_gradient_context_is_over_line (rc, (SPItem*) l->data, NR::Point(event->motion.x, event->motion.y));
+                    over_line |= sp_gradient_context_is_over_line (rc, (SPItem*) l->data, Geom::Point(event->motion.x, event->motion.y));
                 }
             }
 
@@ -618,7 +618,7 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                 if (drag->lines) {
                     for (GSList *l = drag->lines; (l != NULL) && (!over_line); l = l->next) {
                         line = (SPCtrlLine*) l->data;
-                        over_line = sp_gradient_context_is_over_line (rc, (SPItem*) line, NR::Point(event->motion.x, event->motion.y));
+                        over_line = sp_gradient_context_is_over_line (rc, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y));
                         if (over_line)
                             break;
                     }
@@ -643,7 +643,7 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                     if (r->is_started() && !event_context->within_tolerance) {
                         // this was a rubberband drag
                         if (r->getMode() == RUBBERBAND_MODE_RECT) {
-                            boost::optional<Geom::Rect> const b = r->getRectangle();
+                            Geom::OptRect const b = r->getRectangle();
                             drag->selectRect(*b);
                         }
                     }
@@ -855,7 +855,7 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
     return ret;
 }
 
-static void sp_gradient_drag(SPGradientContext &rc, NR::Point const pt, guint /*state*/, guint32 etime)
+static void sp_gradient_drag(SPGradientContext &rc, Geom::Point const pt, guint /*state*/, guint32 etime)
 {
     SPDesktop *desktop = SP_EVENT_CONTEXT(&rc)->desktop;
     Inkscape::Selection *selection = sp_desktop_selection(desktop);
index b507ab72b51e1b477b725a834d52e0f572f5ca5a..1394cd7581d8e602a44a17db2ba1b6230e1be7c2 100644 (file)
@@ -283,7 +283,7 @@ guint32 GrDrag::getColor()
 }
 
 SPStop *
-GrDrag::addStopNearPoint (SPItem *item, NR::Point mouse_p, double tolerance)
+GrDrag::addStopNearPoint (SPItem *item, Geom::Point mouse_p, double tolerance)
 {
     gfloat offset; // type of SPStop.offset = gfloat
     SPGradient *gradient;
@@ -294,10 +294,10 @@ GrDrag::addStopNearPoint (SPItem *item, NR::Point mouse_p, double tolerance)
     do {
         gradient = sp_item_gradient (item, fill_or_stroke);
         if (SP_IS_LINEARGRADIENT(gradient)) {
-            NR::Point begin   = sp_item_gradient_get_coords(item, POINT_LG_BEGIN, 0, fill_or_stroke);
-            NR::Point end     = sp_item_gradient_get_coords(item, POINT_LG_END, 0, fill_or_stroke);
+            Geom::Point begin   = sp_item_gradient_get_coords(item, POINT_LG_BEGIN, 0, fill_or_stroke);
+            Geom::Point end     = sp_item_gradient_get_coords(item, POINT_LG_END, 0, fill_or_stroke);
 
-            NR::Point nearest = snap_vector_midpoint (mouse_p, begin, end, 0);
+            Geom::Point nearest = snap_vector_midpoint (mouse_p, begin, end, 0);
             double dist_screen = NR::L2 (mouse_p - nearest);
             if ( dist_screen < tolerance ) {
                 // add the knot
@@ -306,9 +306,9 @@ GrDrag::addStopNearPoint (SPItem *item, NR::Point mouse_p, double tolerance)
                 break; // break out of the while loop: add only one knot
             }
         } else if (SP_IS_RADIALGRADIENT(gradient)) {
-            NR::Point begin = sp_item_gradient_get_coords(item, POINT_RG_CENTER, 0, fill_or_stroke);
-            NR::Point end   = sp_item_gradient_get_coords(item, POINT_RG_R1, 0, fill_or_stroke);
-            NR::Point nearest = snap_vector_midpoint (mouse_p, begin, end, 0);
+            Geom::Point begin = sp_item_gradient_get_coords(item, POINT_RG_CENTER, 0, fill_or_stroke);
+            Geom::Point end   = sp_item_gradient_get_coords(item, POINT_RG_R1, 0, fill_or_stroke);
+            Geom::Point nearest = snap_vector_midpoint (mouse_p, begin, end, 0);
             double dist_screen = NR::L2 (mouse_p - nearest);
             if ( dist_screen < tolerance ) {
                 offset = get_offset_between_points(nearest, begin, end);
@@ -358,7 +358,7 @@ GrDrag::addStopNearPoint (SPItem *item, NR::Point mouse_p, double tolerance)
 
 
 bool
-GrDrag::dropColor(SPItem */*item*/, gchar *c, NR::Point p)
+GrDrag::dropColor(SPItem */*item*/, gchar *c, Geom::Point p)
 {
     // first, see if we can drop onto one of the existing draggers
     for (GList *i = draggers; i != NULL; i = i->next) { // for all draggables of dragger
@@ -384,7 +384,7 @@ GrDrag::dropColor(SPItem */*item*/, gchar *c, NR::Point p)
     if (lines) {
         for (GSList *l = lines; (l != NULL) && (!over_line); l = l->next) {
             line = (SPCtrlLine*) l->data;
-            NR::Point nearest = snap_vector_midpoint (p, line->s, line->e, 0);
+            Geom::Point nearest = snap_vector_midpoint (p, line->s, line->e, 0);
             double dist_screen = NR::L2 (p - nearest) * desktop->current_zoom();
             if (line->item && dist_screen < 5) {
                 SPStop *stop = addStopNearPoint (line->item, p, 5/desktop->current_zoom());
@@ -517,13 +517,29 @@ GrDraggable::getServer ()
     return server;
 }
 
+static
+boost::optional<Geom::Point>
+get_snap_vector (Geom::Point p, Geom::Point o, double snap, double initial)
+{
+    double r = L2 (p - o);
+    if (r < 1e-3) {
+        return boost::optional<Geom::Point>();
+    }
+
+    double angle = atan2 (p - o);
+    // snap angle to snaps increments, starting from initial:
+    double a_snapped = initial + floor((angle - initial)/snap + 0.5) * snap;
+    // calculate the new position and subtract p to get the vector:
+    return (o + r * Geom::Point(cos(a_snapped), sin(a_snapped)) - p);
+}
+
 static void
-gr_knot_moved_handler(SPKnot *knot, NR::Point const *ppointer, guint state, gpointer data)
+gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, guint state, gpointer data)
 {
     GrDragger *dragger = (GrDragger *) data;
     GrDrag *drag = dragger->parent;
 
-    NR::Point p = *ppointer;
+    Geom::Point p = ppointer;
 
     // FIXME: take from prefs
     double snap_dist = SNAP_DIST / dragger->parent->desktop->current_zoom();
@@ -591,18 +607,18 @@ gr_knot_moved_handler(SPKnot *knot, NR::Point const *ppointer, guint state, gpoi
             double dist = NR_HUGE;
             // No snapping so far, let's see if we need to snap to any of the levels
             for (guint i = 0; i < dragger->parent->hor_levels.size(); i++) {
-                dist = fabs(p[NR::Y] - dragger->parent->hor_levels[i]);
+                dist = fabs(p[Geom::Y] - dragger->parent->hor_levels[i]);
                 if (dist < snap_dist) {
-                    p[NR::Y] = dragger->parent->hor_levels[i];
+                    p[Geom::Y] = dragger->parent->hor_levels[i];
                     s = Inkscape::SnappedPoint(p, Inkscape::SNAPTARGET_GRADIENT, dist, snap_dist, false, false);
                     was_snapped = true;
                     sp_knot_moveto (knot, p);
                 }
             }
             for (guint i = 0; i < dragger->parent->vert_levels.size(); i++) {
-                dist = fabs(p[NR::X] - dragger->parent->vert_levels[i]);
+                dist = fabs(p[Geom::X] - dragger->parent->vert_levels[i]);
                 if (dist < snap_dist) {
-                    p[NR::X] = dragger->parent->vert_levels[i];
+                    p[Geom::X] = dragger->parent->vert_levels[i];
                     s = Inkscape::SnappedPoint(p, Inkscape::SNAPTARGET_GRADIENT, dist, snap_dist, false, false);
                     was_snapped = true;
                     sp_knot_moveto (knot, p);
@@ -625,7 +641,7 @@ gr_knot_moved_handler(SPKnot *knot, NR::Point const *ppointer, guint state, gpoi
         for (GSList const* i = dragger->draggables; i != NULL; i = i->next) {
             GrDraggable *draggable = (GrDraggable *) i->data;
 
-            NR::Point *dr_snap = NULL;
+            Geom::Point dr_snap(Geom::infinity(), Geom::infinity());
 
             if (draggable->point_type == POINT_LG_BEGIN || draggable->point_type == POINT_LG_END) {
                 for (GList *di = dragger->parent->draggers; di != NULL; di = di->next) {
@@ -638,11 +654,11 @@ gr_knot_moved_handler(SPKnot *knot, NR::Point const *ppointer, guint state, gpoi
                         // found the other end of the linear gradient;
                         if (state & GDK_SHIFT_MASK) {
                             // moving linear around center
-                            NR::Point center = NR::Point (0.5*(d_new->point + dragger->point));
-                            dr_snap = &center;
+                            Geom::Point center = Geom::Point (0.5*(d_new->point + dragger->point));
+                            dr_snap = center;
                         } else {
                             // moving linear around the other end
-                            dr_snap = &d_new->point;
+                            dr_snap = d_new->point;
                         }
                     }
                 }
@@ -655,37 +671,37 @@ gr_knot_moved_handler(SPKnot *knot, NR::Point const *ppointer, guint state, gpoi
                                     POINT_RG_CENTER,
                                     draggable->fill_or_stroke)) {
                         // found the center of the radial gradient;
-                        dr_snap = &(d_new->point);
+                        dr_snap = d_new->point;
                     }
                 }
             } else if (draggable->point_type == POINT_RG_CENTER) {
                 // radial center snaps to hor/vert relative to its original position
-                dr_snap = &(dragger->point_original);
+                dr_snap = dragger->point_original;
             }
 
-            NR::Point *snap_vector = NULL;
-            if (dr_snap) {
+            boost::optional<Geom::Point> snap_vector;
+            if (dr_snap.isFinite()) {
                 if (state & GDK_MOD1_MASK) {
                     // with Alt, snap to the original angle and its perpendiculars
-                    snap_vector = get_snap_vector (p, *dr_snap, M_PI/2, NR::atan2 (dragger->point_original - *dr_snap));
+                    snap_vector = get_snap_vector (p, dr_snap, M_PI/2, NR::atan2 (dragger->point_original - dr_snap));
                 } else {
                     // with Ctrl, snap to M_PI/snaps
-                    snap_vector = get_snap_vector (p, *dr_snap, M_PI/snaps, 0);
+                    snap_vector = get_snap_vector (p, dr_snap, M_PI/snaps, 0);
                 }
             }
             if (snap_vector) {
-                snap_vectors = g_slist_prepend (snap_vectors, snap_vector);
+                snap_vectors = g_slist_prepend (snap_vectors, &(*snap_vector));
             }
         }
 
         // Move by the smallest of snap vectors:
-        NR::Point move(9999, 9999);
+        Geom::Point move(9999, 9999);
         for (GSList const *i = snap_vectors; i != NULL; i = i->next) {
-            NR::Point *snap_vector = (NR::Point *) i->data;
+            Geom::Point *snap_vector = (Geom::Point *) i->data;
             if (NR::L2(*snap_vector) < NR::L2(move))
                 move = *snap_vector;
         }
-        if (move[NR::X] < 9999) {
+        if (move[Geom::X] < 9999) {
             p += move;
             sp_knot_moveto (knot, p);
         }
@@ -697,8 +713,8 @@ gr_knot_moved_handler(SPKnot *knot, NR::Point const *ppointer, guint state, gpoi
     bool scale_radial = (state & GDK_CONTROL_MASK) && (state & GDK_SHIFT_MASK);
 
     if (drag->keep_selection) {
-        NR::Point diff = p - dragger->point;
-        drag->selected_move_nowrite (diff[NR::X], diff[NR::Y], scale_radial);
+        Geom::Point diff = p - dragger->point;
+        drag->selected_move_nowrite (diff[Geom::X], diff[Geom::Y], scale_radial);
     } else {
         dragger->point = p;
         dragger->fireDraggables (false, scale_radial);
@@ -709,7 +725,7 @@ gr_knot_moved_handler(SPKnot *knot, NR::Point const *ppointer, guint state, gpoi
 
 
 static void
-gr_midpoint_limits(GrDragger *dragger, SPObject *server, NR::Point *begin, NR::Point *end, NR::Point *low_lim, NR::Point *high_lim, GSList **moving)
+gr_midpoint_limits(GrDragger *dragger, SPObject *server, Geom::Point *begin, Geom::Point *end, Geom::Point *low_lim, Geom::Point *high_lim, GSList **moving)
 {
 
     GrDrag *drag = dragger->parent;
@@ -797,7 +813,7 @@ gr_midpoint_limits(GrDragger *dragger, SPObject *server, NR::Point *begin, NR::P
 Called when a midpoint knot is dragged.
 */
 static void
-gr_knot_moved_midpoint_handler(SPKnot */*knot*/, NR::Point const *ppointer, guint state, gpointer data)
+gr_knot_moved_midpoint_handler(SPKnot */*knot*/, Geom::Point const &ppointer, guint state, gpointer data)
 {
     GrDragger *dragger = (GrDragger *) data;
     GrDrag *drag = dragger->parent;
@@ -807,9 +823,9 @@ gr_knot_moved_midpoint_handler(SPKnot */*knot*/, NR::Point const *ppointer, guin
     // FIXME: take from prefs
     double snap_fraction = 0.1;
 
-    NR::Point p = *ppointer;
-    NR::Point begin(0,0), end(0,0);
-    NR::Point low_lim(0,0), high_lim(0,0);
+    Geom::Point p = ppointer;
+    Geom::Point begin(0,0), end(0,0);
+    Geom::Point low_lim(0,0), high_lim(0,0);
 
     SPObject *server = draggable->getServer();
 
@@ -821,12 +837,12 @@ gr_knot_moved_midpoint_handler(SPKnot */*knot*/, NR::Point const *ppointer, guin
     } else {
         p = snap_vector_midpoint (p, low_lim, high_lim, 0);
     }
-    NR::Point displacement = p - dragger->point;
+    Geom::Point displacement = p - dragger->point;
 
     for (GSList const* i = moving; i != NULL; i = i->next) {
         GrDragger *drg = (GrDragger*) i->data;
         SPKnot *drgknot = drg->knot;
-        NR::Point this_move = displacement;
+        Geom::Point this_move = displacement;
         if (state & GDK_MOD1_MASK) {
             // FIXME: unify all these profiles (here, in nodepath, in tweak) in one place
             double alpha = 1.0;
@@ -1271,15 +1287,14 @@ GrDragger::updateDependencies (bool write_repr)
 
 
 
-GrDragger::GrDragger (GrDrag *parent, NR::Point p, GrDraggable *draggable)
+GrDragger::GrDragger (GrDrag *parent, Geom::Point p, GrDraggable *draggable)
+  : point(p),
+    point_original(p)
 {
     this->draggables = NULL;
 
     this->parent = parent;
 
-    this->point = p;
-    this->point_original = p;
-
     // create the knot
     this->knot = sp_knot_new (parent->desktop, NULL);
     this->knot->setMode(SP_KNOT_MODE_XOR);
@@ -1432,7 +1447,7 @@ GrDrag::selectAll()
 \brief Select all stops/draggers that match the coords
 */
 void
-GrDrag::selectByCoords(std::vector<NR::Point> coords)
+GrDrag::selectByCoords(std::vector<Geom::Point> coords)
 {
     for (GList *l = this->draggers; l != NULL; l = l->next) {
         GrDragger *d = ((GrDragger *) l->data);
@@ -1524,7 +1539,7 @@ GrDrag::setDeselected (GrDragger *dragger)
 Create a line from p1 to p2 and add it to the lines list
  */
 void
-GrDrag::addLine (SPItem *item, NR::Point p1, NR::Point p2, guint32 rgba)
+GrDrag::addLine (SPItem *item, Geom::Point p1, Geom::Point p2, guint32 rgba)
 {
     SPCanvasItem *line = sp_canvas_item_new(sp_desktop_controls(this->desktop),
                                                             SP_TYPE_CTRLLINE, NULL);
@@ -1544,7 +1559,7 @@ new dragger and add it to draggers list
 void
 GrDrag::addDragger (GrDraggable *draggable)
 {
-    NR::Point p = sp_item_gradient_get_coords (draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke);
+    Geom::Point p = sp_item_gradient_get_coords (draggable->item, draggable->point_type, draggable->point_i, draggable->fill_or_stroke);
 
     for (GList *i = this->draggers; i != NULL; i = i->next) {
         GrDragger *dragger = (GrDragger *) i->data;
@@ -1694,7 +1709,7 @@ GrDrag::updateLines ()
             if (SP_IS_LINEARGRADIENT (server)) {
                 this->addLine (item, sp_item_gradient_get_coords (item, POINT_LG_BEGIN, 0, true), sp_item_gradient_get_coords (item, POINT_LG_END, 0, true), GR_LINE_COLOR_FILL);
             } else if (SP_IS_RADIALGRADIENT (server)) {
-                NR::Point center = sp_item_gradient_get_coords (item, POINT_RG_CENTER, 0, true);
+                Geom::Point center = sp_item_gradient_get_coords (item, POINT_RG_CENTER, 0, true);
                 this->addLine (item, center, sp_item_gradient_get_coords (item, POINT_RG_R1, 0, true), GR_LINE_COLOR_FILL);
                 this->addLine (item, center, sp_item_gradient_get_coords (item, POINT_RG_R2, 0, true), GR_LINE_COLOR_FILL);
             }
@@ -1705,7 +1720,7 @@ GrDrag::updateLines ()
             if (SP_IS_LINEARGRADIENT (server)) {
                 this->addLine (item, sp_item_gradient_get_coords (item, POINT_LG_BEGIN, 0, false), sp_item_gradient_get_coords (item, POINT_LG_END, 0, false), GR_LINE_COLOR_STROKE);
             } else if (SP_IS_RADIALGRADIENT (server)) {
-                NR::Point center = sp_item_gradient_get_coords (item, POINT_RG_CENTER, 0, false);
+                Geom::Point center = sp_item_gradient_get_coords (item, POINT_RG_CENTER, 0, false);
                 this->addLine (item, center, sp_item_gradient_get_coords (item, POINT_RG_R1, 0, false), GR_LINE_COLOR_STROKE);
                 this->addLine (item, center, sp_item_gradient_get_coords (item, POINT_RG_R2, 0, false), GR_LINE_COLOR_STROKE);
             }
@@ -1726,7 +1741,7 @@ GrDrag::updateLevels ()
 
     for (GSList const* i = this->selection->itemList(); i != NULL; i = i->next) {
         SPItem *item = SP_ITEM(i->data);
-        boost::optional<Geom::Rect> rect = sp_item_bbox_desktop (item);
+        Geom::OptRect rect = sp_item_bbox_desktop (item);
         if (rect) {
             // Remember the edges of the bbox and the center axis
             hor_levels.push_back(rect->min()[Geom::Y]);
@@ -1793,7 +1808,7 @@ GrDrag::selected_move (double x, double y, bool write_repr, bool scale_radial)
             }
 
             did = true;
-            d->point += NR::Point (x, y);
+            d->point += Geom::Point (x, y);
             d->point_original = d->point;
             sp_knot_moveto (d->knot, d->point);
 
@@ -1816,16 +1831,16 @@ GrDrag::selected_move (double x, double y, bool write_repr, bool scale_radial)
         // a midpoint dragger can (logically) only contain one GrDraggable
         GrDraggable *draggable = (GrDraggable *) dragger->draggables->data;
 
-        NR::Point begin(0,0), end(0,0);
-        NR::Point low_lim(0,0), high_lim(0,0);
+        Geom::Point begin(0,0), end(0,0);
+        Geom::Point low_lim(0,0), high_lim(0,0);
 
         SPObject *server = draggable->getServer();
         GSList *moving = NULL;
         gr_midpoint_limits(dragger, server, &begin, &end, &low_lim, &high_lim, &moving);
 
-        NR::Point p(x, y);
+        Geom::Point p(x, y);
         p = snap_vector_midpoint (dragger->point + p, low_lim, high_lim, 0);
-        NR::Point displacement = p - dragger->point;
+        Geom::Point displacement = p - dragger->point;
 
         for (GSList const* i = moving; i != NULL; i = i->next) {
             GrDragger *drg = (GrDragger*) i->data;
@@ -2003,13 +2018,13 @@ GrDrag::deleteSelected (bool just_one)
                         SP_OBJECT_REPR(stopinfo->vector)->removeChild(SP_OBJECT_REPR(stopinfo->spstop));
 
                         SPLinearGradient *lg = SP_LINEARGRADIENT(stopinfo->gradient);
-                        NR::Point oldbegin = NR::Point (lg->x1.computed, lg->y1.computed);
-                        NR::Point end = NR::Point (lg->x2.computed, lg->y2.computed);
+                        Geom::Point oldbegin = Geom::Point (lg->x1.computed, lg->y1.computed);
+                        Geom::Point end = Geom::Point (lg->x2.computed, lg->y2.computed);
                         SPStop *stop = sp_first_stop(stopinfo->vector);
                         gdouble offset = stop->offset;
-                        NR::Point newbegin = oldbegin + offset * (end - oldbegin);
-                        lg->x1.computed = newbegin[NR::X];
-                        lg->y1.computed = newbegin[NR::Y];
+                        Geom::Point newbegin = oldbegin + offset * (end - oldbegin);
+                        lg->x1.computed = newbegin[Geom::X];
+                        lg->y1.computed = newbegin[Geom::Y];
 
                         Inkscape::XML::Node *repr = SP_OBJECT_REPR(stopinfo->gradient);
                         sp_repr_set_svg_double(repr, "x1", lg->x1.computed);
@@ -2032,13 +2047,13 @@ GrDrag::deleteSelected (bool just_one)
                         SP_OBJECT_REPR(stopinfo->vector)->removeChild(SP_OBJECT_REPR(stopinfo->spstop));
 
                         SPLinearGradient *lg = SP_LINEARGRADIENT(stopinfo->gradient);
-                        NR::Point begin = NR::Point (lg->x1.computed, lg->y1.computed);
-                        NR::Point oldend = NR::Point (lg->x2.computed, lg->y2.computed);
+                        Geom::Point begin = Geom::Point (lg->x1.computed, lg->y1.computed);
+                        Geom::Point oldend = Geom::Point (lg->x2.computed, lg->y2.computed);
                         SPStop *laststop = sp_last_stop(stopinfo->vector);
                         gdouble offset = laststop->offset;
-                        NR::Point newend = begin + offset * (oldend - begin);
-                        lg->x2.computed = newend[NR::X];
-                        lg->y2.computed = newend[NR::Y];
+                        Geom::Point newend = begin + offset * (oldend - begin);
+                        lg->x2.computed = newend[Geom::X];
+                        lg->y2.computed = newend[Geom::Y];
 
                         Inkscape::XML::Node *repr = SP_OBJECT_REPR(stopinfo->gradient);
                         sp_repr_set_svg_double(repr, "x2", lg->x2.computed);
index acc2dd48f52fee39cb5ab4589e9270d1d0c74629..974bba4deb1411dcd092753ec8710d510b4a7b7d 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <forward.h>
 #include <libnr/nr-forward.h>
+#include <2geom/point.h>
 #include <knot-enums.h>
 
 struct SPItem;
@@ -31,20 +32,20 @@ which has the gradient, whether it's fill or stroke, the point type (from the
 GrPointType enum), and the point number (needed if more than 2 stops are present).
 */
 struct GrDraggable {
-       GrDraggable(SPItem *item, guint point_type, guint point_i, bool fill_or_stroke);
+    GrDraggable(SPItem *item, guint point_type, guint point_i, bool fill_or_stroke);
     virtual ~GrDraggable();
 
-       SPItem *item;
-       gint point_type;
-       gint point_i;  // the stop number of this point ( = 0 POINT_LG_BEGIN and POINT_RG_CENTER)
-       bool fill_or_stroke;
+    SPItem *item;
+    gint point_type;
+    gint point_i;  // the stop number of this point ( = 0 POINT_LG_BEGIN and POINT_RG_CENTER)
+    bool fill_or_stroke;
 
-       SPObject *getServer();
+    SPObject *getServer();
 
-       bool mayMerge (GrDraggable *da2);
+    bool mayMerge (GrDraggable *da2);
 
     inline int equals (GrDraggable *other) {
-               return ((item == other->item) && (point_type == other->point_type) && (point_i == other->point_i) && (fill_or_stroke == other->fill_or_stroke));
+        return ((item == other->item) && (point_type == other->point_type) && (point_i == other->point_i) && (fill_or_stroke == other->fill_or_stroke));
     }
 };
 
@@ -56,45 +57,45 @@ be moved when the knot moves. Normally there's one draggable in the list, but th
 be more when draggers are snapped together.
 */
 struct GrDragger {
-       GrDragger (GrDrag *parent, NR::Point p, GrDraggable *draggable);
+    GrDragger (GrDrag *parent, Geom::Point p, GrDraggable *draggable);
     virtual ~GrDragger();
 
-       GrDrag *parent;
+    GrDrag *parent;
 
-       SPKnot *knot;
+    SPKnot *knot;
 
-       // position of the knot, desktop coords
-       NR::Point point;
-       // position of the knot before it began to drag; updated when released
-       NR::Point point_original;
+    // position of the knot, desktop coords
+    Geom::Point point;
+    // position of the knot before it began to drag; updated when released
+    Geom::Point point_original;
 
-       /** Connection to \a knot's "moved" signal, for blocking it (unused?). */
-       guint   handler_id;
+    /** Connection to \a knot's "moved" signal, for blocking it (unused?). */
+    guint handler_id;
 
-       GSList *draggables;
+    GSList *draggables;
 
-       void addDraggable(GrDraggable *draggable);
+    void addDraggable(GrDraggable *draggable);
 
-       void updateKnotShape();
-       void updateTip();
-       
-       void select();
-       void deselect();
-       bool isSelected();
+    void updateKnotShape();
+    void updateTip();
+    
+    void select();
+    void deselect();
+    bool isSelected();
 
-       void moveThisToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr);
-       void moveOtherToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr);
+    void moveThisToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr);
+    void moveOtherToDraggable (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke, bool write_repr);
     void updateMidstopDependencies (GrDraggable *draggable, bool write_repr);
     void updateDependencies (bool write_repr);
 
-       bool mayMerge (GrDragger *other);
-       bool mayMerge (GrDraggable *da2);
+    bool mayMerge (GrDragger *other);
+    bool mayMerge (GrDraggable *da2);
 
     bool isA (gint point_type);
     bool isA (SPItem *item, gint point_type, bool fill_or_stroke);
     bool isA (SPItem *item, gint point_type, gint point_i, bool fill_or_stroke);
 
-       void fireDraggables (bool write_repr, bool scale_radial = false, bool merging_focus = false);
+    void fireDraggables (bool write_repr, bool scale_radial = false, bool merging_focus = false);
 };
 
 /**
@@ -107,26 +108,26 @@ public: // FIXME: make more of this private!
     GrDrag(SPDesktop *desktop);
     virtual ~GrDrag();
 
-               bool isNonEmpty() {return (draggers != NULL);}
-               bool hasSelection() {return (selected != NULL);}
-               guint numSelected() {return (selected? g_list_length(selected) : 0);}
-               guint numDraggers() {return (draggers? g_list_length(draggers) : 0);}
-               guint singleSelectedDraggerNumDraggables() {return (selected? g_slist_length(((GrDragger *) selected->data)->draggables) : 0);}
-               guint singleSelectedDraggerSingleDraggableType() {return (selected? ((GrDraggable *) ((GrDragger *) selected->data)->draggables->data)->point_type : 0);}
+    bool isNonEmpty() {return (draggers != NULL);}
+    bool hasSelection() {return (selected != NULL);}
+    guint numSelected() {return (selected? g_list_length(selected) : 0);}
+    guint numDraggers() {return (draggers? g_list_length(draggers) : 0);}
+    guint singleSelectedDraggerNumDraggables() {return (selected? g_slist_length(((GrDragger *) selected->data)->draggables) : 0);}
+    guint singleSelectedDraggerSingleDraggableType() {return (selected? ((GrDraggable *) ((GrDragger *) selected->data)->draggables->data)->point_type : 0);}
 
     // especially the selection must be private, fix gradient-context to remove direct access to it
     GList *selected; // list of GrDragger*
     void setSelected (GrDragger *dragger, bool add_to_selection = false, bool override = true);
     void setDeselected (GrDragger *dragger);
     void deselectAll();
-               void selectAll();
-               void selectByCoords(std::vector<NR::Point> coords);
+    void selectAll();
+    void selectByCoords(std::vector<Geom::Point> coords);
     void selectRect(Geom::Rect const &r);
 
-    bool dropColor(SPItem *item, gchar *c, NR::Point p);
+    bool dropColor(SPItem *item, gchar *c, Geom::Point p);
+
+    SPStop *addStopNearPoint (SPItem *item, Geom::Point mouse_p, double tolerance);
 
-               SPStop *addStopNearPoint (SPItem *item, NR::Point mouse_p, double tolerance);
-    
     void deleteSelected (bool just_one = false);
 
     guint32 getColor();
@@ -165,7 +166,7 @@ public: // FIXME: make more of this private!
 private: 
     void deselect_all();
 
-    void addLine (SPItem *item, NR::Point p1, NR::Point p2, guint32 rgba);
+    void addLine (SPItem *item, Geom::Point p1, Geom::Point p2, guint32 rgba);
 
     void addDragger (GrDraggable *draggable);
 
index 87ec60695ab6e37722819aeee6d75693f581fdbd..12bca8891c12ed96d45fac4756b910eaf672112a 100644 (file)
@@ -125,7 +125,7 @@ void graphlayout(GSList const *const items) {
                ++i)
        {
                SPItem *u=*i;
-               boost::optional<Geom::Rect> const item_box(sp_item_bbox_desktop(u));
+               Geom::OptRect const item_box(sp_item_bbox_desktop(u));
         if(item_box) {
             Geom::Point ll(item_box->min());
             Geom::Point ur(item_box->max());
@@ -227,7 +227,7 @@ void graphlayout(GSList const *const items) {
                        map<string,unsigned>::iterator i=nodelookup.find(u->id);
                        if(i!=nodelookup.end()) {
                 Rectangle* r=rs[i->second];
-                boost::optional<Geom::Rect> item_box(sp_item_bbox_desktop(u));
+                Geom::OptRect item_box(sp_item_bbox_desktop(u));
                 if(item_box) {
                     Geom::Point const curr(item_box->midpoint());
                     Geom::Point const dest(r->getCentreX(),r->getCentreY());
index 4d1ed66307643c98004869ff4c116c0d7bbcb714..195ca26328ee2c38bd61c315a36fe2c5e8b7ddee 100644 (file)
@@ -40,17 +40,21 @@ helper_libspchelp_a_SOURCES =       \
        helper/stock-items.cpp  \
        helper/stock-items.h    
 
-
-# TODO: Check that the generated sp-marshal.h is the same as before.
+# cmp exits with status 0 when there are no differences. if executes the commands
+# after "then" when the exit status of the if command is 0 (this is crazy).
 helper/sp-marshal.h: helper/sp-marshal.list
-       glib-genmarshal --prefix=sp_marshal --header $(srcdir)/helper/sp-marshal.list > helper/tmp.$$$$ \
-        && mv helper/tmp.$$$$ helper/sp-marshal.h
+       glib-genmarshal --prefix=sp_marshal --header $(srcdir)/helper/sp-marshal.list > helper/tmp.sp-marshal.h
+       if cmp -s helper/sp-marshal.h helper/tmp.sp-marshal.h; \
+       then rm helper/tmp.sp-marshal.h; \
+       else mv helper/tmp.sp-marshal.h helper/sp-marshal.h; fi
 
 helper/sp-marshal.cpp: helper/sp-marshal.list helper/sp-marshal.h
        ( echo '#include "helper/sp-marshal.h"' &&      \
          glib-genmarshal --prefix=sp_marshal --body $(srcdir)/helper/sp-marshal.list ) \
-        > helper/tmp.$$$$      \
-        && mv helper/tmp.$$$$ helper/sp-marshal.cpp
+        > helper/tmp.sp-marshal.cpp; \
+       if cmp -s helper/sp-marshal.cpp helper/tmp.sp-marshal.cpp; \
+       then rm helper/tmp.sp-marshal.cpp; \
+       else mv helper/tmp.sp-marshal.cpp helper/sp-marshal.cpp; fi
 
 helper/sp-marshal.cpp helper/sp-marshal.h: Makefile
 
index 84f9678606559114f6bdcfa54fbf7559f60a7540..c79cd829a0d53f562b88260bada2b9d179b0caee 100644 (file)
@@ -149,23 +149,21 @@ cubic_bbox (Geom::Coord x000, Geom::Coord y000, Geom::Coord x001, Geom::Coord y0
     }
 }
 
-Geom::Rect
+Geom::OptRect
 bounds_fast_transformed(Geom::PathVector const & pv, Geom::Matrix const & t)
 {
     return bounds_exact_transformed(pv, t); //use this as it is faster for now! :)
 //    return Geom::bounds_fast(pv * t);
 }
 
-Geom::Rect
+Geom::OptRect
 bounds_exact_transformed(Geom::PathVector const & pv, Geom::Matrix const & t)
 {
-    Geom::Rect bbox;
-    
     if (pv.empty())
-        return bbox;
+        return Geom::OptRect();
 
     Geom::Point initial = pv.front().initialPoint() * t;
-    bbox = Geom::Rect(initial, initial);        // obtain well defined bbox as starting point to unionWith
+    Geom::Rect bbox(initial, initial);        // obtain well defined bbox as starting point to unionWith
 
     for (Geom::PathVector::const_iterator it = pv.begin(); it != pv.end(); ++it) {
         bbox.expandTo(it->initialPoint() * t);
@@ -494,6 +492,19 @@ pathv_to_linear_and_cubic_beziers( Geom::PathVector const &pathv )
     return output;
 }
 
+
+/**
+ * rounds all corners of the rectangle 'outwards', i.e. x0 and y0 are floored, x1 and y1 are ceiled.
+ */
+void round_rectangle_outwards(Geom::Rect & rect) {
+    Geom::Interval ints[2];
+    for (int i=0; i < 2; i++) {
+        ints[i] = Geom::Interval(std::floor(rect[i][0]), std::ceil(rect[i][1]));
+    }
+    rect = Geom::Rect(ints[0], ints[1]);
+}
+
+
 namespace Geom {
 
 bool transform_equalp(Geom::Matrix const &m0, Geom::Matrix const &m1, Geom::Coord const epsilon) {
index 4cda22a1c920968b1227ce53c42fc33d3e8d51f1..adf16739294501298fb5a95829e34b4735b0171d 100644 (file)
@@ -16,8 +16,8 @@
 #include <libnr/nr-forward.h>
 #include <libnr/nr-coord.h>
 
-Geom::Rect bounds_fast_transformed(Geom::PathVector const & pv, Geom::Matrix const & t);
-Geom::Rect bounds_exact_transformed(Geom::PathVector const & pv, Geom::Matrix const & t);
+Geom::OptRect bounds_fast_transformed(Geom::PathVector const & pv, Geom::Matrix const & t);
+Geom::OptRect bounds_exact_transformed(Geom::PathVector const & pv, Geom::Matrix const & t);
 
 void pathv_matrix_point_bbox_wind_distance ( Geom::PathVector const & pathv, Geom::Matrix const &m, Geom::Point const &pt,
                                              Geom::Rect *bbox, int *wind, Geom::Coord *dist,
@@ -25,6 +25,8 @@ void pathv_matrix_point_bbox_wind_distance ( Geom::PathVector const & pathv, Geo
 
 Geom::PathVector pathv_to_linear_and_cubic_beziers( Geom::PathVector const &pathv );
 
+void round_rectangle_outwards(Geom::Rect & rect);
+
 /*
 The following predefined objects are for reference
 and comparison.  They are defined in helper/geom.cpp
index 89ab32f559dfa47679dca17d7b56cd226899a40e..eb60169c47d9ad21be838a6858f2a8bf616edafd 100644 (file)
@@ -19,6 +19,7 @@
 #include <interface.h>
 #include <libnr/nr-pixops.h>
 #include <libnr/nr-translate-scale-ops.h>
+#include <2geom/rect.h>
 #include <glib/gmessages.h>
 #include <png.h>
 #include "png-write.h"
@@ -386,9 +387,20 @@ hide_other_items_recursively(SPObject *o, GSList *list, unsigned dkey)
  *
  * \return true if succeeded (or if no action was taken), false if an error occurred.
  */
+bool sp_export_png_file (SPDocument *doc, gchar const *filename,
+                   double x0, double y0, double x1, double y1,
+                   unsigned long int width, unsigned long int height, double xdpi, double ydpi,
+                   unsigned long bgcolor,
+                   unsigned int (*status) (float, void *),
+                   void *data, bool force_overwrite,
+                   GSList *items_only)
+{
+    return sp_export_png_file(doc, filename, Geom::Rect(Geom::Point(x0,y0),Geom::Point(x1,y1)),
+                              width, height, xdpi, ydpi, bgcolor, status, data, force_overwrite, items_only);
+}
 bool
 sp_export_png_file(SPDocument *doc, gchar const *filename,
-                   double x0, double y0, double x1, double y1,
+                   Geom::Rect const &area,
                    unsigned long width, unsigned long height, double xdpi, double ydpi,
                    unsigned long bgcolor,
                    unsigned (*status)(float, void *),
@@ -399,8 +411,22 @@ sp_export_png_file(SPDocument *doc, gchar const *filename,
     g_return_val_if_fail(filename != NULL, false);
     g_return_val_if_fail(width >= 1, false);
     g_return_val_if_fail(height >= 1, false);
+    g_return_val_if_fail(!area.hasZeroArea(), false);
+
+    //Make relative paths absolute, if possible:
+    gchar *path = 0;
+    if (!g_path_is_absolute(filename) && doc->uri) {
+        gchar *dirname = g_path_get_dirname(doc->uri);
+        if (dirname) {
+            path = g_build_filename(dirname, filename, NULL);
+            g_free(dirname);
+        }
+    }
+    if (!path) {
+        path = g_strdup(filename);
+    }
 
-    if (!force_overwrite && !sp_ui_overwrite_file(filename)) {
+    if (!force_overwrite && !sp_ui_overwrite_file(path)) {
         /* Remark: We return true so as not to invoke an error dialog in case export is cancelled
            by the user; currently this is safe because the callers only act when false is returned.
            If this changes in the future we need better distinction of return types (e.g., use int)
@@ -417,14 +443,10 @@ sp_export_png_file(SPDocument *doc, gchar const *filename,
 
     sp_document_ensure_up_to_date(doc);
 
-    /* Go to document coordinates */
-    {
-        gdouble const t = y0;
-        y0 = sp_document_height(doc) - y1;
-        y1 = sp_document_height(doc) - t;
-    }
+    /* Calculate translation by transforming to document coordinates (flipping Y)*/
+    Geom::Point translation = Geom::Point(-area[Geom::X][0], area[Geom::Y][1] - sp_document_height(doc));
 
-    /*
+    /*  This calculation is only valid when assumed that (x0,y0)= area.corner(0) and (x1,y1) = area.corner(2)
      * 1) a[0] * x0 + a[2] * y1 + a[4] = 0.0
      * 2) a[1] * x0 + a[3] * y1 + a[5] = 0.0
      * 3) a[0] * x1 + a[2] * y1 + a[4] = width
@@ -440,9 +462,9 @@ sp_export_png_file(SPDocument *doc, gchar const *filename,
      * (2) a[5] = -a[3] * y1
      */
 
-    Geom::Matrix const affine(Geom::Translate(-x0, -y0)
-                            * Geom::Scale(width / (x1 - x0),
-                                        height / (y1 - y0)));
+    Geom::Matrix const affine(Geom::Translate(translation)
+                            * Geom::Scale(width / area.width(),
+                                        height / area.height()));
 
     //SP_PRINT_MATRIX("SVG2PNG", &affine);
 
@@ -475,12 +497,12 @@ sp_export_png_file(SPDocument *doc, gchar const *filename,
     if ((width < 256) || ((width * height) < 32768)) {
         ebp.px = nr_pixelstore_64K_new(FALSE, 0);
         ebp.sheight = 65536 / (4 * width);
-        write_status = sp_png_write_rgba_striped(doc, filename, width, height, xdpi, ydpi, sp_export_get_rows, &ebp);
+        write_status = sp_png_write_rgba_striped(doc, path, width, height, xdpi, ydpi, sp_export_get_rows, &ebp);
         nr_pixelstore_64K_free(ebp.px);
     } else {
         ebp.px = g_new(guchar, 4 * 64 * width);
         ebp.sheight = 64;
-        write_status = sp_png_write_rgba_striped(doc, filename, width, height, xdpi, ydpi, sp_export_get_rows, &ebp);
+        write_status = sp_png_write_rgba_striped(doc, path, width, height, xdpi, ydpi, sp_export_get_rows, &ebp);
         g_free(ebp.px);
     }
 
@@ -494,6 +516,8 @@ sp_export_png_file(SPDocument *doc, gchar const *filename,
     prefs->setInt("/options/blurquality/value", saved_quality);
     prefs->setInt("/options/filterquality/value", saved_filter_quality);
 
+    g_free(path);
+
     return write_status;
 }
 
index 1217ba27694b9376526af6f2a5a462eb318fb629..83321aa4e7c6d68dddb1edfc5d7cbd5442e95c3e 100644 (file)
@@ -13,6 +13,7 @@
  */
 
 #include <glib/gtypes.h>
+#include <2geom/forward.h>
 struct SPDocument;
 
 bool sp_export_png_file (SPDocument *doc, gchar const *filename,
@@ -20,5 +21,10 @@ bool sp_export_png_file (SPDocument *doc, gchar const *filename,
             unsigned long int width, unsigned long int height, double xdpi, double ydpi,
             unsigned long bgcolor,
             unsigned int (*status) (float, void *), void *data, bool force_overwrite = false, GSList *items_only = NULL);
+bool sp_export_png_file (SPDocument *doc, gchar const *filename,
+            Geom::Rect const &area,
+            unsigned long int width, unsigned long int height, double xdpi, double ydpi,
+            unsigned long bgcolor,
+            unsigned int (*status) (float, void *), void *data, bool force_overwrite = false, GSList *items_only = NULL);
 
 #endif
index 59649cfb618fb88400fc745f38462555256c38b5..a9cad44660b2c6f5a47ea533610f0c70948f64d4 100644 (file)
@@ -46,12 +46,12 @@ public:
         }
        }
 
-       boost::optional<Rect> const &bounds() const {
+       OptRect const &bounds() const {
                return _bounds;
        }
        
 private:
-    boost::optional<Rect> _bounds;
+    OptRect _bounds;
 };
 
 } /* namespace Geom */
index 51f740fb4e889c37a1d23c9d845e266eb041574d..49b92394e48cb83ce6d0b1e06f1fb893c3b9cb79 100644 (file)
@@ -1,9 +1,7 @@
-#define __INKSCAPE_C__
-
-/*
- * Interface to main application
- *
- * Authors:
+/** @file
+ * @brief Legacy interface to main application
+ */
+/* Authors:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   bulia byak <buliabyak@users.sf.net>
  *
@@ -37,38 +35,33 @@ using Inkscape::Extension::Internal::PrintWin32;
 # include <shlobj.h>
 #endif
 
-#include <signal.h>
-
-#include <gtk/gtkmain.h>
-#include <gtk/gtkmessagedialog.h>
-#include <glib.h>
+#include <cstring>
 #include <glib/gstdio.h>
-
+#include <glib.h>
 #include <glibmm/i18n.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkmessagedialog.h>
+#include <signal.h>
 #include <string>
-#include <cstring>
-#include "helper/sp-marshal.h"
-#include "dialogs/debugdialog.h"
-#include "dialogs/input.h"
 #include "application/application.h"
 #include "application/editor.h"
-
-
-#include "document.h"
 #include "desktop.h"
 #include "desktop-handles.h"
-#include "selection.h"
+#include "dialogs/input.h"
+#include "document.h"
 #include "event-context.h"
-#include "inkscape-private.h"
-#include "xml/repr.h"
-#include "preferences.h"
-#include "io/sys.h"
-#include "message-stack.h"
-
-#include "extension/init.h"
 #include "extension/db.h"
+#include "extension/init.h"
 #include "extension/output.h"
 #include "extension/system.h"
+#include "helper/sp-marshal.h"
+#include "inkscape-private.h"
+#include "io/sys.h"
+#include "message-stack.h"
+#include "preferences.h"
+#include "selection.h"
+#include "ui/dialog/debug.h"
+#include "xml/repr.h"
 
 static Inkscape::Application *inkscape = NULL;
 
@@ -774,7 +767,7 @@ inkscape_application_init (const gchar *argv0, gboolean use_gui)
 
     if (use_gui == TRUE && prefs->getBool("/dialogs/debug/redirect", DEFAULT_LOG_REDIRECT))
     {
-        Inkscape::UI::Dialogs::DebugDialog::getInstance()->captureLogMessages();
+        Inkscape::UI::Dialog::DebugDialog::getInstance()->captureLogMessages();
     }
 
     /* Check for global remapping of Alt key */
index 8a318210396331e78530b17e987c0f7bf88c3747..fbdb8a5f63b79486e8fdb0555645cf417c824b1d 100644 (file)
@@ -20,6 +20,7 @@
 #endif
 
 #include <gtk/gtk.h>
+#include <glib.h>
 #include "inkscape-private.h"
 #include "extension/effect.h"
 #include "widgets/icon.h"
@@ -926,7 +927,7 @@ sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, Inkscape::UI:
             
             // add filter to only open files added by Inkscape
             GtkRecentFilter *inkscape_only_filter = gtk_recent_filter_new();
-            gtk_recent_filter_add_application(inkscape_only_filter, "inkscape");
+            gtk_recent_filter_add_application(inkscape_only_filter, g_get_prgname());
             gtk_recent_chooser_add_filter(GTK_RECENT_CHOOSER(recent_menu), inkscape_only_filter);
 
             GtkWidget *recent_item = gtk_menu_item_new_with_mnemonic(_("Open _Recent"));
@@ -1261,7 +1262,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
                 bool const saved_pref = prefs->getBool("/options/transform/pattern", true);
                 prefs->setBool("/options/transform/pattern", true);
                 sp_document_ensure_up_to_date(sp_desktop_document(desktop));
-                boost::optional<Geom::Rect> sel_bbox = selection->bounds();
+                Geom::OptRect sel_bbox = selection->bounds();
                 if (sel_bbox) {
                     Geom::Point m( desktop->point() - sel_bbox->midpoint() );
                     sp_selection_move_relative(selection, m);
index 7b501cddc109258495178546bfa2d98c75657384..b7cbd7ee803f907b2787d774432f6d27af5e4166 100644 (file)
@@ -45,8 +45,8 @@ inline NR::Rect from_2geom(Geom::Rect const & rect2geom) {
     NR::Rect rect(rect2geom.min(), rect2geom.max());
     return rect;
 }
-inline boost::optional<Geom::Rect> to_2geom(boost::optional<NR::Rect> const & rect) {
-    boost::optional<Geom::Rect> rect2geom;
+inline Geom::OptRect to_2geom(boost::optional<NR::Rect> const & rect) {
+    Geom::OptRect rect2geom;
     if (!rect) {
         return rect2geom;
     }
index 620782996417fb22dc96399dcde8572fc947c6cd..1e1f3610443513441fea885abae7ebd4bf600d0c 100644 (file)
@@ -28,7 +28,7 @@ NRRect::NRRect(boost::optional<NR::Rect> const &rect) {
     }
 }
 
-NRRect::NRRect(boost::optional<Geom::Rect> const &rect) {
+NRRect::NRRect(Geom::OptRect const &rect) {
     if (rect) {
         x0 = rect->min()[Geom::X];
         y0 = rect->min()[Geom::Y];
@@ -47,9 +47,9 @@ boost::optional<NR::Rect> NRRect::upgrade() const {
     }
 }
 
-boost::optional<Geom::Rect> NRRect::upgrade_2geom() const {
+Geom::OptRect NRRect::upgrade_2geom() const {
     if (nr_rect_d_test_empty_ptr(this)) {
-        return boost::optional<Geom::Rect>();
+        return Geom::OptRect();
     } else {
         return Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1));
     }
index 83f780efdd051fadd7bf8f5b271e3e90b979ca60..c074b00347c34160ea1bee9e6da0bb5f25128c7e 100644 (file)
@@ -244,9 +244,9 @@ struct NRRect {
     explicit NRRect(boost::optional<NR::Rect> const &rect);
     operator boost::optional<NR::Rect>() const { return upgrade(); }
     boost::optional<NR::Rect> upgrade() const;
-    explicit NRRect(boost::optional<Geom::Rect> const &rect);
-    operator boost::optional<Geom::Rect>() const { return upgrade_2geom(); }
-    boost::optional<Geom::Rect> upgrade_2geom() const;
+    explicit NRRect(Geom::OptRect const &rect);
+    operator Geom::OptRect() const { return upgrade_2geom(); }
+    Geom::OptRect upgrade_2geom() const;
 
     NR::Coord x0, y0, x1, y1;
 };
index d7d45b1e3ddd28582eb5d5418c0aecc895684c36..e1413b46e788a87f9f90832c551aeec169d4e614 100644 (file)
@@ -615,7 +615,7 @@ bool font_instance::FontSlope(double &run, double &rise)
        return true;
 }
 
-boost::optional<Geom::Rect> font_instance::BBox(int glyph_id)
+Geom::OptRect font_instance::BBox(int glyph_id)
 {
        int no=-1;
        if ( id_to_no.find(glyph_id) == id_to_no.end() ) {
@@ -629,7 +629,7 @@ boost::optional<Geom::Rect> font_instance::BBox(int glyph_id)
                no=id_to_no[glyph_id];
        }
        if ( no < 0 ) {
-            return boost::optional<Geom::Rect>();
+            return Geom::OptRect();
         } else {
            Geom::Point rmin(glyphs[no].bbox[0],glyphs[no].bbox[1]);
            Geom::Point rmax(glyphs[no].bbox[2],glyphs[no].bbox[3]);
index 57be6033a79419d550ff42f4dea6d1ce713fded8..2e65c2b24dd08f8cec2bd32466c58f85d8e3a6d6 100644 (file)
@@ -615,7 +615,6 @@ class Layout::Calculator
                             iter_source_text++;
                             char_index_in_unbroken_span++;
                             char_byte = iter_source_text.base() - unbroken_span.input_stream_first_character.base();
-                            glyph_rotate = 0.0;
                         }
 
                         advance_width *= direction_sign;
@@ -1014,6 +1013,7 @@ unsigned Layout::Calculator::_buildSpansForPara(ParagraphInfo *para) const
                     if (text_source->dy.size() > char_index_in_source) new_span.dx = text_source->dy[char_index_in_source];
                 }
                 if (text_source->rotate.size() > char_index_in_source) new_span.rotate = text_source->rotate[char_index_in_source];
+                else if (char_index_in_source == 0) new_span.rotate = 0.f;
                 if (input_index == 0 && para->unbroken_spans.empty() && !new_span.y._set && _flow._input_wrap_shapes.empty()) {
                     // if we don't set an explicit y some of the automatic wrapping code takes over and moves the text vertically
                     // so that the top of the letters is at zero, not the baseline
index a5ae1cd81dcc92f17303effbac7364aabd92fa9f..2ee0051a4b80fd544a24670bd16db3d32cd6ac5f 100644 (file)
@@ -54,6 +54,14 @@ void Layout::appendText(Glib::ustring const &text, SPStyle *style, void *source_
         _copyInputVector(optional_attributes->dx, optional_attributes_offset, &new_source->dx, new_source->text_length);
         _copyInputVector(optional_attributes->dy, optional_attributes_offset, &new_source->dy, new_source->text_length);
         _copyInputVector(optional_attributes->rotate, optional_attributes_offset, &new_source->rotate, new_source->text_length);
+        if (!optional_attributes->rotate.empty() && optional_attributes_offset >= optional_attributes->rotate.size()) {
+            SVGLength last_rotate;
+            last_rotate = 0.f;
+            for (std::vector<SVGLength>::const_iterator it = optional_attributes->rotate.begin() ; it != optional_attributes->rotate.end() ; ++it)
+                if (it->_set)
+                    last_rotate = *it;
+            new_source->rotate.resize(1, last_rotate);
+        }
     }
     
     _input_stream.push_back(new_source);
index abe28200530d5cf003f0e6fb1eca2974aa41f9fe..bbd4aa6fd1a962fc0839cc56c43b02ae2a5b763b 100644 (file)
@@ -200,7 +200,7 @@ Layout::iterator Layout::sourceToIterator(void *source_cookie) const
     return sourceToIterator(source_cookie, Glib::ustring::const_iterator(std::string::const_iterator(NULL)));
 }
 
-boost::optional<Geom::Rect> Layout::glyphBoundingBox(iterator const &it, double *rotation) const
+Geom::OptRect Layout::glyphBoundingBox(iterator const &it, double *rotation) const
 {
    if (rotation) *rotation = _glyphs[it._glyph_index].rotation;
    return _glyphs[it._glyph_index].span(this).font->BBox(_glyphs[it._glyph_index].glyph);
index a93993c563f70f7f494f2d7053c1646761521a36..49967cd59bad3bb82c329fea230152216a49da4e 100644 (file)
@@ -117,7 +117,7 @@ void Layout::getBoundingBox(NRRect *bounding_box, Geom::Matrix const &transform,
         Geom::Matrix total_transform = glyph_matrix;
         total_transform *= transform;
         if(_glyphs[glyph_index].span(this).font) {
-           boost::optional<Geom::Rect> glyph_rect = _glyphs[glyph_index].span(this).font->BBox(_glyphs[glyph_index].glyph);
+           Geom::OptRect glyph_rect = _glyphs[glyph_index].span(this).font->BBox(_glyphs[glyph_index].glyph);
             if (glyph_rect) {
                Geom::Point bmi = glyph_rect->min(), bma = glyph_rect->max();
                Geom::Point tlp(bmi[0],bmi[1]), trp(bma[0],bmi[1]), blp(bmi[0],bma[1]), brp(bma[0],bma[1]);
index 3d0c5728838bbb6761dbb487327e07e3c61dd415..19680b140a56a0cfc2c7b3ba9fea7c2c400c6118 100644 (file)
@@ -449,7 +449,7 @@ public:
     /** Returns the bounding box of the given glyph, and its rotation.
     The centre of rotation is the horizontal centre of the box at the
     text baseline. */
-    boost::optional<Geom::Rect> glyphBoundingBox(iterator const &it, double *rotation) const;
+    Geom::OptRect glyphBoundingBox(iterator const &it, double *rotation) const;
 
     /** Returns the zero-based line number of the character pointed to by
     \a it. */
index 3fbbe62d7cf8050430acb9f6cbc4e07065fcf3b8..14f6c7afac3160ed4268d2e6f2503fbb69edda77 100644 (file)
@@ -107,7 +107,7 @@ void           raster_font::BBox(int glyph_id,NRRect *area)
 {
        area->x0=area->y0=area->x1=area->y1=0;
        if ( daddy == NULL ) return;
-       boost::optional<Geom::Rect> res=daddy->BBox(glyph_id);
+       Geom::OptRect res=daddy->BBox(glyph_id);
        if (res) {
                Geom::Point bmi=res->min(),bma=res->max();
                Geom::Point tlp(bmi[0],bmi[1]),trp(bma[0],bmi[1]),blp(bmi[0],bma[1]),brp(bma[0],bma[1]);
index 2c8340e8a3096beff03441352e247a3cd47ddc50..4209a20af68c723c41daabd6867857cb0b62ee8b 100644 (file)
@@ -78,7 +78,7 @@ public:
     bool                 FontMetrics(double &ascent, double &descent, double &leading);
     bool                 FontSlope(double &run, double &rise);
                                 // for generating slanted cursors for oblique fonts
-    boost::optional<Geom::Rect>             BBox(int glyph_id);
+    Geom::OptRect             BBox(int glyph_id);
 
                // creates a rasterfont for the given style
     raster_font*         RasterFont(Geom::Matrix const &trs, double stroke_width,
index 140157fe3db053d6ee3a39345dae0a7def19c28f..f2d2f2ff624b0b46099fd802e324cf5cdd579a91 100644 (file)
@@ -27,7 +27,7 @@ void Inkscape::LineSnapper::freeSnap(SnappedConstraints &sc,
                                                     Inkscape::SnapPreferences::PointType const &t,
                                                     Geom::Point const &p,
                                                     bool const &/*f*/,
-                                                    boost::optional<Geom::Rect> const &/*bbox_to_snap*/,
+                                                    Geom::OptRect const &/*bbox_to_snap*/,
                                                     std::vector<SPItem const *> const */*it*/,
                                                     std::vector<Geom::Point> */*unselected_nodes*/) const
 {
@@ -61,7 +61,7 @@ void Inkscape::LineSnapper::constrainedSnap(SnappedConstraints &sc,
                                                Inkscape::SnapPreferences::PointType const &t,
                                                Geom::Point const &p,
                                                bool const &/*f*/,
-                                               boost::optional<Geom::Rect> const &/*bbox_to_snap*/,
+                                               Geom::OptRect const &/*bbox_to_snap*/,
                                                ConstraintLine const &c,
                                                std::vector<SPItem const *> const */*it*/) const
 
index 593e8bd73fcf58f2b6ea659da22f85bc0d97d247..529db1caaeb833700e6b0cb8da7ac2c916794753 100644 (file)
@@ -28,7 +28,7 @@ public:
                    Inkscape::SnapPreferences::PointType const &t,
                    Geom::Point const &p,
                    bool const &first_point,
-                   boost::optional<Geom::Rect> const &bbox_to_snap,
+                   Geom::OptRect const &bbox_to_snap,
                    std::vector<SPItem const *> const *it,
                    std::vector<Geom::Point> *unselected_nodes) const;
   
@@ -36,7 +36,7 @@ public:
                           Inkscape::SnapPreferences::PointType const &t,
                           Geom::Point const &p,
                           bool const &first_point,
-                          boost::optional<Geom::Rect> const &bbox_to_snap,
+                          Geom::OptRect const &bbox_to_snap,
                           ConstraintLine const &c,
                           std::vector<SPItem const *> const *it) const;
 
index 98875a5a21ba4bb1b0422536462fd9e46add9482..89b7b9e3a7f72afdf15907e75d8665ee27d94451 100644 (file)
@@ -11,6 +11,7 @@ lpe-gears.cpp
 lpegroupbbox.cpp
 lpe-interpolate.cpp
 lpe-knot.cpp
+lpe-hatches.cpp
 lpe-lattice.cpp
 lpe-mirror_symmetry.cpp
 lpeobject.cpp
index 3b136d20407773fd90f57ff07ed07c1c2db7e6fa..1bb001778ed99ac951dac66cffbdcdbab8eaf077 100644 (file)
@@ -8,6 +8,7 @@ live_effects/clean:
 live_effects_liblive_effects_a_SOURCES = \
        live_effects/effect.cpp \
        live_effects/effect.h   \
+       live_effects/effect-enum.h      \
        live_effects/lpeobject.cpp      \
        live_effects/lpeobject.h        \
        live_effects/lpegroupbbox.cpp   \
@@ -26,6 +27,8 @@ live_effects_liblive_effects_a_SOURCES = \
        live_effects/lpe-knot.h \
        live_effects/lpe-vonkoch.cpp    \
        live_effects/lpe-vonkoch.h      \
+       live_effects/lpe-hatches.cpp    \
+       live_effects/lpe-hatches.h      \
        live_effects/lpe-curvestitch.cpp        \
        live_effects/lpe-curvestitch.h  \
        live_effects/lpe-constructgrid.cpp      \
diff --git a/src/live_effects/effect-enum.h b/src/live_effects/effect-enum.h
new file mode 100644 (file)
index 0000000..1e82954
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef INKSCAPE_LIVEPATHEFFECT_ENUM_H
+#define INKSCAPE_LIVEPATHEFFECT_ENUM_H
+
+/*
+ * Inkscape::LivePathEffect::EffectType
+ *
+* Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "util/enums.h"
+
+#define LPE_ENABLE_TEST_EFFECTS
+
+namespace Inkscape {
+namespace LivePathEffect {
+
+enum EffectType {
+    BEND_PATH = 0,
+    PATTERN_ALONG_PATH,
+    FREEHAND_SHAPE,
+    SKETCH,
+    HATCHES,
+    VONKOCH,
+    KNOT,
+#ifdef LPE_ENABLE_TEST_EFFECTS
+    DOEFFECTSTACK_TEST,
+#endif
+    GEARS,
+    CURVE_STITCH,
+    CIRCLE_WITH_RADIUS,
+    PERSPECTIVE_PATH,
+    SPIRO,
+    LATTICE,
+    ENVELOPE,
+    CONSTRUCT_GRID,
+    PERP_BISECTOR,
+    TANGENT_TO_CURVE,
+    MIRROR_SYMMETRY,
+    CIRCLE_3PTS,
+    ANGLE_BISECTOR,
+    PARALLEL,
+    COPY_ROTATE,
+    OFFSET,
+    RULER,
+    BOOLOPS,
+    INTERPOLATE,
+    TEXT_LABEL,
+    PATH_LENGTH,
+    LINE_SEGMENT,
+    INVALID_LPE // This must be last
+};
+
+extern const Util::EnumData<EffectType> LPETypeData[];  /// defined in effect.cpp
+extern const Util::EnumDataConverter<EffectType> LPETypeConverter; /// defined in effect.cpp
+
+} //namespace LivePathEffect
+} //namespace Inkscape
+
+#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 :
index a04100cd3c26912d7ad0e7ca2fc6273f7d1f5792..bb5f0c55465b196b830d3395f0e7b04106ecfcdb 100644 (file)
@@ -42,6 +42,7 @@
 #include "live_effects/lpe-sketch.h"
 #include "live_effects/lpe-vonkoch.h"
 #include "live_effects/lpe-knot.h"
+#include "live_effects/lpe-hatches.h"
 #include "live_effects/lpe-test-doEffect-stack.h"
 #include "live_effects/lpe-gears.h"
 #include "live_effects/lpe-curvestitch.h"
@@ -99,6 +100,7 @@ const Util::EnumData<EffectType> LPETypeData[] = {
     {COPY_ROTATE,           N_("Rotate copies"),           "copy_rotate"},
     {RULER,                 N_("Ruler"),                   "ruler"},
     {SKETCH,                N_("Sketch"),                  "sketch"},
+    {HATCHES,               N_("Hatches"),                 "hatches"},
     {SPIRO,                 N_("Spiro spline"),            "spiro"},
     {CURVE_STITCH,          N_("Stitch Sub-Paths"),        "curvestitching"},
     {TANGENT_TO_CURVE,      N_("Tangent to curve"),        "tangent_to_curve"},
@@ -137,6 +139,9 @@ Effect::New(EffectType lpenr, LivePathEffectObject *lpeobj)
         case SKETCH:
             neweffect = static_cast<Effect*> ( new LPESketch(lpeobj) );
             break;
+        case HATCHES:
+            neweffect = static_cast<Effect*> ( new LPEHatches(lpeobj) );
+            break;
         case VONKOCH:
             neweffect = static_cast<Effect*> ( new LPEVonKoch(lpeobj) );
             break;
@@ -663,10 +668,9 @@ Effect::providesKnotholder()
     if (kh_entity_vector.size() > 0)
         return true;
 
-    // otherwise: are there any PointParams?
+    // otherwise: are there any parameters that have knotholderentities?
     for (std::vector<Parameter *>::iterator p = param_vector.begin(); p != param_vector.end(); ++p) {
-//        if ( Inkscape::LivePathEffect::PointParam *pointparam = dynamic_cast<Inkscape::LivePathEffect::PointParam*>(*p) ) {
-        if (dynamic_cast<Inkscape::LivePathEffect::PointParam*>(*p)) {
+        if ((*p)->providesKnotHolderEntities()) {
             return true;
         }
     }
index 8dd1354e2adb2ffb1bab29789769cd5b75108e28..ae42e358c2ef3e03bb1fc5d7e48d8d2ef89fdb70 100644 (file)
 #include <2geom/path.h>
 #include <2geom/forward.h>
 #include "ui/widget/registry.h"
-#include "util/enums.h"
 #include "sp-lpe-item.h"
 #include "knotholder.h"
 #include "parameter/bool.h"
+#include "effect-enum.h"
 
 #define  LPE_CONVERSION_TOLERANCE 0.01    // FIXME: find good solution for this.
 
-#define LPE_ENABLE_TEST_EFFECTS
-
 struct SPDocument;
 struct SPDesktop;
 struct SPItem;
@@ -49,44 +47,6 @@ namespace NodePath {
 
 namespace LivePathEffect {
 
-enum EffectType {
-    BEND_PATH = 0,
-    PATTERN_ALONG_PATH,
-    FREEHAND_SHAPE,
-    SKETCH,
-    VONKOCH,
-    KNOT,
-#ifdef LPE_ENABLE_TEST_EFFECTS
-    DOEFFECTSTACK_TEST,
-#endif
-    GEARS,
-    CURVE_STITCH,
-    CIRCLE_WITH_RADIUS,
-    PERSPECTIVE_PATH,
-    SPIRO,
-    LATTICE,
-    ENVELOPE,
-    CONSTRUCT_GRID,
-    PERP_BISECTOR,
-    TANGENT_TO_CURVE,
-    MIRROR_SYMMETRY,
-    CIRCLE_3PTS,
-    ANGLE_BISECTOR,
-    PARALLEL,
-    COPY_ROTATE,
-    OFFSET,
-    RULER,
-    BOOLOPS,
-    INTERPOLATE,
-    TEXT_LABEL,
-    PATH_LENGTH,
-    LINE_SEGMENT,
-    INVALID_LPE // This must be last
-};
-
-extern const Util::EnumData<EffectType> LPETypeData[];
-extern const Util::EnumDataConverter<EffectType> LPETypeConverter;
-
 enum LPEPathFlashType {
     SUPPRESS_FLASH,
 //    PERMANENT_FLASH,
index 8b169af3c496360f6ef678b3090d4dfb23d0c561..574a9c004b34b2348b3523b379f46702f3f578b1 100644 (file)
@@ -1,20 +1,11 @@
-#define INKSCAPE_LPE_CIRCLE_WITH_RADIUS_CPP
-/** \file
- * LPE <circle_with_radius> implementation, used as an example for a base starting class
- * when implementing new LivePathEffects.
- *
- * In vi, three global search-and-replaces will let you rename everything
- * in this and the .h file:
- *
- *   :%s/CIRCLE_WITH_RADIUS/YOURNAME/g
- *   :%s/CircleWithRadius/Yourname/g
- *   :%s/circle_with_radius/yourname/g
+/** @file
+ * @brief LPE effect that draws a circle based on two points and a radius
+ * - implementation
  */
-/*
- * Authors:
- *   Johan Engelen
-*
-* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+/* Authors:
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
+ *
+ * Copyright (C) 2007 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
@@ -106,4 +97,4 @@ LPECircleWithRadius::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > & p
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 19330eb3346fe9d0c842610aa76e3e33524dd844..2b94948755086dc61e54163a5d7f7ab92f448713 100644 (file)
@@ -1,19 +1,17 @@
-#ifndef INKSCAPE_LPE_CIRCLE_WITH_RADIUS_H
-#define INKSCAPE_LPE_CIRCLE_WITH_RADIUS_H
-
-/** \file
- * LPE <circle_with_radius> implementation, see lpe-circle_with_radius.cpp.
+/** @file
+ * @brief LPE effect that draws a circle based on two points and a radius
  */
-
-/*
- * Authors:
- *   Johan Engelen
-*
-* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+/* Authors:
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
+ *
+ * Copyright (C) 2007 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef INKSCAPE_LPE_CIRCLE_WITH_RADIUS_H
+#define INKSCAPE_LPE_CIRCLE_WITH_RADIUS_H
+
 #include "live_effects/effect.h"
 #include "live_effects/parameter/parameter.h"
 #include "live_effects/parameter/path.h"
@@ -43,3 +41,14 @@ private:
 } //namespace Inkscape
 
 #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 :
index 4404620be9d9969429a4a1c3001ced164e503e69..2716e45d72a6951d96235e7f85aa23ae5d590eae 100644 (file)
@@ -79,10 +79,13 @@ LPECurveStitch::doEffect_path (std::vector<Geom::Path> const & path_in)
         endpoint_spacing_variation.resetRandomizer();
 
         D2<Piecewise<SBasis> > stroke = make_cuts_independent(strokepath.get_pwd2());
-        Interval bndsStroke = bounds_exact(stroke[0]);
-        gdouble scaling = bndsStroke.max() - bndsStroke.min();
-        Interval bndsStrokeY = bounds_exact(stroke[1]);
-        Point stroke_origin(bndsStroke.min(), (bndsStrokeY.max()+bndsStrokeY.min())/2);
+        OptInterval bndsStroke = bounds_exact(stroke[0]);
+        OptInterval bndsStrokeY = bounds_exact(stroke[1]);
+        if (!bndsStroke && !bndsStrokeY) {
+            return path_in;
+        }
+        gdouble scaling = bndsStroke->max() - bndsStroke->min();
+        Point stroke_origin(bndsStroke->min(), (bndsStrokeY->max()+bndsStrokeY->min())/2);
 
         std::vector<Geom::Path> path_out;
 
@@ -163,18 +166,22 @@ LPECurveStitch::resetDefaults(SPItem * item)
         pwd2.concat( temppath[i].toPwSb() );
     }
     D2<Piecewise<SBasis> > d2pw = make_cuts_independent(pwd2);
-    Interval bndsX = bounds_exact(d2pw[0]);
-    Interval bndsY = bounds_exact(d2pw[1]);
-    Point start(bndsX.min(), (bndsY.max()+bndsY.min())/2);
-    Point end(bndsX.max(), (bndsY.max()+bndsY.min())/2);
-
-    if ( !Geom::are_near(start,end) ) {
-        Geom::Path path;
-        path.start( start );
-        path.appendNew<Geom::LineSegment>( end );
-        strokepath.set_new_value( path.toPwSb(), true );
+    OptInterval bndsX = bounds_exact(d2pw[0]);
+    OptInterval bndsY = bounds_exact(d2pw[1]);
+    if (bndsX && bndsY) {
+        Point start(bndsX->min(), (bndsY->max()+bndsY->min())/2);
+        Point end(bndsX->max(), (bndsY->max()+bndsY->min())/2);
+        if ( !Geom::are_near(start,end) ) {
+            Geom::Path path;
+            path.start( start );
+            path.appendNew<Geom::LineSegment>( end );
+            strokepath.set_new_value( path.toPwSb(), true );
+        } else {
+            // bounding box is too small to make decent path. set to default default. :-)
+            strokepath.param_set_and_write_default();
+        }
     } else {
-        // bounding box is too small to make decent path. set to default default. :-)
+        // bounding box is non-existent. set to default default. :-)
         strokepath.param_set_and_write_default();
     }
 }
diff --git a/src/live_effects/lpe-hatches.cpp b/src/live_effects/lpe-hatches.cpp
new file mode 100644 (file)
index 0000000..2205d91
--- /dev/null
@@ -0,0 +1,593 @@
+#define INKSCAPE_LPE_HATCHES_CPP\r
+/** \file\r
+ * LPE Curve Stitching implementation, used as an example for a base starting class\r
+ * when implementing new LivePathEffects.\r
+ *\r
+ */\r
+/*\r
+ * Authors:\r
+ *   JF Barraud.\r
+*\r
+* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>\r
+ *\r
+ * Released under GNU GPL, read the file 'COPYING' for more information\r
+ */\r
+\r
+#include "live_effects/lpe-hatches.h"\r
+\r
+#include "sp-item.h"\r
+#include "sp-path.h"\r
+#include "svg/svg.h"\r
+#include "xml/repr.h"\r
+\r
+#include <2geom/path.h>\r
+#include <2geom/piecewise.h>\r
+#include <2geom/sbasis.h>\r
+#include <2geom/sbasis-math.h>\r
+#include <2geom/sbasis-geometric.h>\r
+#include <2geom/bezier-to-sbasis.h>\r
+#include <2geom/sbasis-to-bezier.h>\r
+#include <2geom/d2.h>\r
+#include <2geom/matrix.h>\r
+\r
+#include "ui/widget/scalar.h"\r
+#include "libnr/nr-values.h"\r
+\r
+namespace Inkscape {\r
+namespace LivePathEffect {\r
+\r
+using namespace Geom;\r
+\r
+//------------------------------------------------\r
+// Some goodies to navigate through curve's levels.\r
+//------------------------------------------------\r
+struct LevelCrossing{\r
+    Point pt;\r
+    double t;\r
+    bool sign;\r
+    bool used;\r
+    std::pair<unsigned,unsigned> next_on_curve;\r
+    std::pair<unsigned,unsigned> prev_on_curve;\r
+};\r
+struct LevelCrossingOrder {\r
+    bool operator()(LevelCrossing a, LevelCrossing b) {\r
+        return a.pt[Y] < b.pt[Y];\r
+    }\r
+};\r
+struct LevelCrossingInfo{\r
+    double t;\r
+    unsigned level;\r
+    unsigned idx;\r
+};\r
+struct LevelCrossingInfoOrder {\r
+    bool operator()(LevelCrossingInfo a, LevelCrossingInfo b) {\r
+        return a.t < b.t;\r
+    }\r
+};\r
+\r
+typedef std::vector<LevelCrossing> LevelCrossings;\r
+\r
+std::vector<double>\r
+discontinuities(Piecewise<D2<SBasis> > const &f){\r
+    std::vector<double> result;\r
+    if (f.size()==0) return result;\r
+    result.push_back(f.cuts[0]);\r
+    Point prev_pt = f.segs[0].at1();\r
+    //double old_t  = f.cuts[0];\r
+    for(unsigned i=1; i<f.size(); i++){\r
+        if ( f.segs[i].at0()!=prev_pt){\r
+            result.push_back(f.cuts[i]);\r
+            //old_t = f.cuts[i];\r
+            //assert(f.segs[i-1].at1()==f.valueAt(old_t));\r
+        }\r
+        prev_pt = f.segs[i].at1();\r
+    }\r
+    result.push_back(f.cuts.back());\r
+    //assert(f.segs.back().at1()==f.valueAt(old_t));\r
+    return result;\r
+}\r
+\r
+class LevelsCrossings: public std::vector<LevelCrossings>{\r
+public:\r
+    LevelsCrossings():std::vector<LevelCrossings>(){};\r
+    LevelsCrossings(std::vector<std::vector<double> > const &times,\r
+                    Piecewise<D2<SBasis> > const &f,\r
+                    Piecewise<SBasis> const &dx){\r
+        \r
+        for (unsigned i=0; i<times.size(); i++){\r
+            LevelCrossings lcs;\r
+            for (unsigned j=0; j<times[i].size(); j++){\r
+                LevelCrossing lc;\r
+                lc.pt = f.valueAt(times[i][j]);\r
+                lc.t = times[i][j];\r
+                lc.sign = ( dx.valueAt(times[i][j])>0 );\r
+                lc.used = false;\r
+                lcs.push_back(lc);\r
+            }\r
+            std::sort(lcs.begin(), lcs.end(), LevelCrossingOrder());\r
+            push_back(lcs);\r
+        }\r
+        //Now create time ordering.\r
+        std::vector<LevelCrossingInfo>temp;\r
+        for (unsigned i=0; i<size(); i++){\r
+            for (unsigned j=0; j<(*this)[i].size(); j++){\r
+                LevelCrossingInfo elem;\r
+                elem.t = (*this)[i][j].t;\r
+                elem.level = i;\r
+                elem.idx = j;\r
+                temp.push_back(elem);\r
+            }\r
+        }\r
+        std::sort(temp.begin(),temp.end(),LevelCrossingInfoOrder());\r
+        std::vector<double> jumps = discontinuities(f);\r
+        unsigned jump_idx = 0;\r
+        unsigned first_in_comp = 0;\r
+        for (unsigned i=0; i<temp.size(); i++){\r
+            unsigned lvl = temp[i].level, idx = temp[i].idx;\r
+            if ( i == temp.size()-1 || temp[i+1].t > jumps[jump_idx+1]){\r
+                std::pair<unsigned,unsigned>next_data(temp[first_in_comp].level,temp[first_in_comp].idx);\r
+                (*this)[lvl][idx].next_on_curve = next_data;\r
+                first_in_comp = i+1;\r
+                jump_idx += 1;\r
+            }else{\r
+                std::pair<unsigned,unsigned> next_data(temp[i+1].level,temp[i+1].idx);\r
+                (*this)[lvl][idx].next_on_curve = next_data;\r
+            }\r
+        }\r
+\r
+        for (unsigned i=0; i<size(); i++){\r
+            for (unsigned j=0; j<(*this)[i].size(); j++){\r
+                std::pair<unsigned,unsigned> next = (*this)[i][j].next_on_curve;\r
+                (*this)[next.first][next.second].prev_on_curve = std::pair<unsigned,unsigned>(i,j);\r
+            }\r
+        }\r
+#if 0\r
+        std::cout<<"\n";\r
+        for (unsigned i=0; i<temp.size()-1; i++){\r
+            std::cout<<temp[i].level<<","<<temp[i].idx<<" -> ";\r
+        }\r
+        std::cout<<"\n";\r
+        for (unsigned i=0; i<size(); i++){\r
+            for (unsigned j=0; j<(*this)[i].size(); j++){\r
+                std::cout<<"level:"<<i<<", idx:"<<j<<" -  ";\r
+                std::cout<<"next:"<<(*this)[i][j].next_on_curve.first<<",";\r
+                std::cout<<(*this)[i][j].next_on_curve.second<<" - ";\r
+                std::cout<<"prev:"<<(*this)[i][j].prev_on_curve.first<<",";\r
+                std::cout<<(*this)[i][j].prev_on_curve.second<<"\n";\r
+            }\r
+        }\r
+#endif\r
+    }\r
+\r
+    void findFirstUnused(unsigned &level, unsigned &idx){\r
+        level = size();\r
+        idx = 0;\r
+        for (unsigned i=0; i<size(); i++){\r
+            for (unsigned j=0; j<(*this)[i].size(); j++){\r
+                if (!(*this)[i][j].used){\r
+                    level = i;\r
+                    idx = j;\r
+                    return;\r
+                }\r
+            }\r
+        }\r
+    }\r
+    //set indexes to point to the next point in the "snake walk"\r
+    //follow_level's meaning: \r
+    //  0=yes upward\r
+    //  1=no, last move was upward,\r
+    //  2=yes downward\r
+    //  3=no, last move was downward.\r
+    void step(unsigned &level, unsigned &idx, int &direction){\r
+        if ( direction % 2 == 0 ){\r
+            if (direction == 0) {\r
+                if ( idx >= (*this)[level].size()-1 || (*this)[level][idx+1].used ) {\r
+                    level = size();\r
+                    return;\r
+                }\r
+                idx += 1;\r
+            }else{\r
+                if ( idx <= 0  || (*this)[level][idx-1].used ) {\r
+                    level = size();\r
+                    return;\r
+                }\r
+                idx -= 1;\r
+            }\r
+            direction += 1;\r
+            return;\r
+        }\r
+        double t = (*this)[level][idx].t;\r
+        double sign = ((*this)[level][idx].sign ? 1 : -1);\r
+        double next_t = t;\r
+        //level += 1;\r
+        direction = (direction + 1)%4;\r
+        if (level == size()){\r
+            return;\r
+        }\r
+\r
+        std::pair<unsigned,unsigned> next;\r
+        if ( sign > 0 ){\r
+            next = (*this)[level][idx].next_on_curve;\r
+        }else{\r
+            next = (*this)[level][idx].prev_on_curve;\r
+        }\r
+\r
+        if ( level+1 != next.first || (*this)[next.first][next.second].used ) {\r
+            level = size();\r
+            return;\r
+        }\r
+        level = next.first;\r
+        idx = next.second;\r
+\r
+/*********************\r
+        //look for next time on the same level\r
+        for (unsigned j=0; j<(*this)[level].size(); j++){\r
+            double tj = (*this)[level][j].t;\r
+            if ( sign*(tj-t) > 0 ){\r
+                if( next_t == t ||  sign*(tj-next_t)<0 ){\r
+                    next_t = tj;\r
+                    idx = j;\r
+                }\r
+            }\r
+        }\r
+        if ( next_t == t ){//not found? look at max/min time in this component, as time is "periodic".\r
+            for (unsigned j=0; j<(*this)[level].size(); j++){\r
+                double tj = (*this)[level][j].t;\r
+                if ( -sign*(tj-next_t) > 0 ){\r
+                    next_t = tj;\r
+                    idx = j;\r
+                }\r
+            }\r
+        }\r
+        if ( next_t == t ){//still not found? houch! this should not happen.\r
+            level = size();\r
+            return;\r
+        }\r
+        if ( (*this)[level][idx].used ) {\r
+            level = size();\r
+            return;\r
+        }\r
+*************************/\r
+        return;\r
+    }\r
+};\r
+\r
+//-------------------------------------------------------\r
+// Bend a path...\r
+//-------------------------------------------------------\r
+\r
+Piecewise<D2<SBasis> > bend(Piecewise<D2<SBasis> > const &f, Piecewise<SBasis> bending){\r
+    D2<Piecewise<SBasis> > ff = make_cuts_independent(f);\r
+    ff[X] += compose(bending, ff[Y]);\r
+    return sectionize(ff);\r
+}\r
+\r
+//--------------------------------------------------------\r
+// The Hatches lpe.\r
+//--------------------------------------------------------\r
+LPEHatches::LPEHatches(LivePathEffectObject *lpeobject) :\r
+    Effect(lpeobject),\r
+    dist_rdm(_("Dist randomness"), _("Variation of dist between hatches, in %."), "dist_rdm", &wr, this, 75),\r
+    growth(_("Growth"), _("Growth of distance between hatches."), "growth", &wr, this, 0.),\r
+    scale_tf(_("Start smothness (front side)"), _("MISSING DESCRIPTION"), "scale_tf", &wr, this, 1.),\r
+    scale_tb(_("Start smothness (back side)"), _("MISSING DESCRIPTION"), "scale_tb", &wr, this, 1.),\r
+    scale_bf(_("End smothness (front side)"), _("MISSING DESCRIPTION"), "scale_bf", &wr, this, 1.),\r
+    scale_bb(_("End smothness (back side)"), _("MISSING DESCRIPTION"), "scale_bb", &wr, this, 1.),\r
+    top_edge_variation(_("Start edge variance"), _("The amount of random jitter to move the hatches start"), "top_edge_variation", &wr, this, 0),\r
+    bot_edge_variation(_("End edge variance"), _("The amount of random jitter to move the hatches end"), "bot_edge_variation", &wr, this, 0),\r
+    top_tgt_variation(_("Start tangential variance"), _("The amount of random jitter to move the hatches start along the boundary"), "top_tgt_variation", &wr, this, 0),\r
+    bot_tgt_variation(_("End tangential variance"), _("The amount of random jitter to move the hatches end along the boundary"), "bot_tgt_variation", &wr, this, 0),\r
+    top_smth_variation(_("Start smoothness variance"), _("Randomness of the smoothness of the U turn at hatches start"), "top_smth_variation", &wr, this, 0),\r
+    bot_smth_variation(_("End spacing variance"), _("Randomness of the smoothness of the U turn at hatches end"), "bot_smth_variation", &wr, this, 0),\r
+    fat_output(_("Generate thick/thin path"), _("Simulate a stroke of varrying width"), "fat_output", &wr, this, true),\r
+    do_bend(_("Bend hatches"), _("Add a global bend to the hatches (slower)"), "do_bend", &wr, this, true),\r
+    stroke_width_top(_("Stroke width (start side)"), _("Width at hatches 'start'"), "stroke_width_top", &wr, this, 1.),\r
+    stroke_width_bot(_("Stroke width (end side)"), _("Width at hatches 'end'"), "stroke_width_bot", &wr, this, 1.),\r
+    front_thickness(_("Front thickness (%)"), _("MISSING DESCRIPTION"), "front_thickness", &wr, this, 1.),\r
+    back_thickness(_("Back thickness (%)"), _("MISSING DESCRIPTION"), "back_thickness", &wr, this, .25),\r
+    bender(_("Global bending"), _("Relative position to ref point defines global bending direction and amount"), "bender", &wr, this, NULL, Geom::Point(-5,0)),\r
+    direction(_("Hatches width and dir"), _("Defines hatches frequency and direction"), "direction", &wr, this, Geom::Point(50,0))\r
+{\r
+    registerParameter( dynamic_cast<Parameter *>(&direction) );\r
+    registerParameter( dynamic_cast<Parameter *>(&do_bend) );\r
+    registerParameter( dynamic_cast<Parameter *>(&bender) );\r
+    registerParameter( dynamic_cast<Parameter *>(&dist_rdm) );\r
+    registerParameter( dynamic_cast<Parameter *>(&growth) );\r
+    registerParameter( dynamic_cast<Parameter *>(&top_edge_variation) );\r
+    registerParameter( dynamic_cast<Parameter *>(&bot_edge_variation) );\r
+    registerParameter( dynamic_cast<Parameter *>(&top_tgt_variation) );\r
+    registerParameter( dynamic_cast<Parameter *>(&bot_tgt_variation) );\r
+    registerParameter( dynamic_cast<Parameter *>(&scale_tf) );\r
+    registerParameter( dynamic_cast<Parameter *>(&scale_tb) );\r
+    registerParameter( dynamic_cast<Parameter *>(&scale_bf) );\r
+    registerParameter( dynamic_cast<Parameter *>(&scale_bb) );\r
+    registerParameter( dynamic_cast<Parameter *>(&top_smth_variation) );\r
+    registerParameter( dynamic_cast<Parameter *>(&bot_smth_variation) );\r
+    registerParameter( dynamic_cast<Parameter *>(&fat_output) );\r
+    registerParameter( dynamic_cast<Parameter *>(&stroke_width_top) );\r
+    registerParameter( dynamic_cast<Parameter *>(&stroke_width_bot) );\r
+    registerParameter( dynamic_cast<Parameter *>(&front_thickness) );\r
+    registerParameter( dynamic_cast<Parameter *>(&back_thickness) );\r
+\r
+    //hatch_dist.param_set_range(0.1, NR_HUGE);\r
+    growth.param_set_range(-0.95, NR_HUGE);\r
+    dist_rdm.param_set_range(0, 99.);\r
+    stroke_width_top.param_set_range(0,  NR_HUGE);\r
+    stroke_width_bot.param_set_range(0,  NR_HUGE);\r
+    front_thickness.param_set_range(0, NR_HUGE);\r
+    back_thickness.param_set_range(0, NR_HUGE);\r
+\r
+    concatenate_before_pwd2 = true;\r
+    show_orig_path = true;\r
+}\r
+\r
+LPEHatches::~LPEHatches()\r
+{\r
+\r
+}\r
+\r
+Geom::Piecewise<Geom::D2<Geom::SBasis> > \r
+LPEHatches::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_in){\r
+\r
+    Piecewise<D2<SBasis> > result;\r
+    \r
+    Piecewise<D2<SBasis> > transformed_pwd2_in = pwd2_in;\r
+    Piecewise<SBasis> tilter;//used to bend the hatches\r
+    Matrix bend_mat;//used to bend the hatches\r
+\r
+    if (do_bend.get_value()){\r
+        Point bend_dir = -rot90(unit_vector(direction.getOrigin() - bender));\r
+        double bend_amount = L2(direction.getOrigin() - bender);\r
+        bend_mat = Matrix(-bend_dir[Y], bend_dir[X], bend_dir[X], bend_dir[Y],0,0);\r
+        transformed_pwd2_in = pwd2_in * bend_mat;\r
+        tilter = Piecewise<SBasis>(shift(Linear(bend_amount),1));\r
+        OptRect bbox = bounds_exact( transformed_pwd2_in );\r
+        if (not(bbox)) return pwd2_in;\r
+        tilter.setDomain((*bbox)[Y]);\r
+        transformed_pwd2_in = bend(transformed_pwd2_in, tilter);\r
+        transformed_pwd2_in = transformed_pwd2_in * bend_mat.inverse();\r
+    }\r
+    hatch_dist = Geom::L2(direction.getVector())/5;\r
+    Point hatches_dir = rot90(unit_vector(direction.getVector()));\r
+    Matrix mat(-hatches_dir[Y], hatches_dir[X], hatches_dir[X], hatches_dir[Y],0,0);\r
+    transformed_pwd2_in = transformed_pwd2_in * mat;\r
+        \r
+    std::vector<std::vector<Point> > snakePoints;\r
+    snakePoints = linearSnake(transformed_pwd2_in);\r
+    if ( snakePoints.size() > 0 ){\r
+        Piecewise<D2<SBasis> >smthSnake = smoothSnake(snakePoints); \r
+        smthSnake = smthSnake*mat.inverse();\r
+        if (do_bend.get_value()){\r
+            smthSnake = smthSnake*bend_mat;\r
+            smthSnake = bend(smthSnake, -tilter);\r
+            smthSnake = smthSnake*bend_mat.inverse();\r
+        }\r
+        return (smthSnake);\r
+    }\r
+    return pwd2_in;\r
+}\r
+\r
+//------------------------------------------------\r
+// Generate the levels with random, growth...\r
+//------------------------------------------------\r
+std::vector<double>\r
+LPEHatches::generateLevels(Interval const &domain){\r
+    std::vector<double> result;\r
+    double x = domain.min() + double(hatch_dist)/2.;\r
+    double step = double(hatch_dist);\r
+    double scale = 1+(hatch_dist*growth/domain.extent());\r
+    while (x < domain.max()){\r
+        result.push_back(x);\r
+        double rdm = 1;\r
+        if (dist_rdm.get_value() != 0) \r
+            rdm = 1.+ double((2*dist_rdm - dist_rdm.get_value()))/100.;\r
+        x+= step*rdm;\r
+        step*=scale;//(1.+double(growth));\r
+    }\r
+    return result;\r
+}\r
+\r
+\r
+//-------------------------------------------------------\r
+// Walk through the intersections to create linear hatches\r
+//-------------------------------------------------------\r
+std::vector<std::vector<Point> > \r
+LPEHatches::linearSnake(Piecewise<D2<SBasis> > const &f){\r
+\r
+    std::vector<std::vector<Point> > result;\r
+\r
+    Piecewise<SBasis> x = make_cuts_independent(f)[X];\r
+    //Rque: derivative is computed twice in the 2 lines below!!\r
+    Piecewise<SBasis> dx = derivative(x);\r
+    OptInterval range = bounds_exact(x);\r
+\r
+    if (not range) return result;\r
+    std::vector<double> levels = generateLevels(*range);\r
+    std::vector<std::vector<double> > times;\r
+    times = multi_roots(x,levels);\r
+\r
+//TODO: fix multi_roots!!!*****************************************\r
+//remove doubles :-(\r
+    std::vector<std::vector<double> > cleaned_times(levels.size(),std::vector<double>());\r
+    for (unsigned i=0; i<times.size(); i++){\r
+        if ( times[i].size()>0 ){\r
+            double last_t = times[i][0]-1;//ugly hack!!\r
+            for (unsigned j=0; j<times[i].size(); j++){\r
+                if (times[i][j]-last_t >0.000001){\r
+                    last_t = times[i][j];\r
+                    cleaned_times[i].push_back(last_t);\r
+                }\r
+            }\r
+        }\r
+    }\r
+    times = cleaned_times;\r
+//     for (unsigned i=0; i<times.size(); i++){\r
+//         std::cout << "roots on level "<<i<<": ";\r
+//         for (unsigned j=0; j<times[i].size(); j++){\r
+//             std::cout << times[i][j] <<" ";\r
+//         }\r
+//         std::cout <<"\n";\r
+//     }\r
+//*******************************************************************\r
+    LevelsCrossings lscs(times,f,dx);\r
+    unsigned i,j;\r
+    lscs.findFirstUnused(i,j);\r
+    std::vector<Point> result_component;\r
+    while ( i < lscs.size() ){ \r
+        int dir = 0;\r
+        while ( i < lscs.size() ){\r
+            result_component.push_back(lscs[i][j].pt);\r
+            lscs[i][j].used = true;\r
+            lscs.step(i,j, dir);\r
+        }\r
+        result.push_back(result_component);\r
+        result_component = std::vector<Point>();\r
+        lscs.findFirstUnused(i,j);\r
+    }\r
+    return result;\r
+}\r
+\r
+//-------------------------------------------------------\r
+// Smooth the linear hatches according to params...\r
+//-------------------------------------------------------\r
+Piecewise<D2<SBasis> > \r
+LPEHatches::smoothSnake(std::vector<std::vector<Point> > const &linearSnake){\r
+\r
+    Piecewise<D2<SBasis> > result;\r
+    for (unsigned comp=0; comp<linearSnake.size(); comp++){\r
+        if (linearSnake[comp].size()>=2){\r
+            bool is_top = true;//Inversion here; due to downward y? \r
+            Point last_pt = linearSnake[comp][0];\r
+            Point last_top = linearSnake[comp][0];\r
+            Point last_bot = linearSnake[comp][0];\r
+            Point last_hdle = linearSnake[comp][0];\r
+            Point last_top_hdle = linearSnake[comp][0];\r
+            Point last_bot_hdle = linearSnake[comp][0];\r
+            Geom::Path res_comp(last_pt);\r
+            Geom::Path res_comp_top(last_pt);\r
+            Geom::Path res_comp_bot(last_pt);\r
+            unsigned i=1;\r
+            while( i+1<linearSnake[comp].size() ){\r
+                Point pt0 = linearSnake[comp][i];\r
+                Point pt1 = linearSnake[comp][i+1];\r
+                Point new_pt = (pt0+pt1)/2;\r
+                double scale_in = (is_top ? scale_tf : scale_bf );\r
+                double scale_out = (is_top ? scale_tb : scale_bb );\r
+                if (is_top){\r
+                    if (top_edge_variation.get_value() != 0) \r
+                        new_pt[Y] += double(top_edge_variation)-top_edge_variation.get_value()/2.;\r
+                    if (top_tgt_variation.get_value() != 0) \r
+                        new_pt[X] += double(top_tgt_variation)-top_tgt_variation.get_value()/2.;\r
+                    if (top_smth_variation.get_value() != 0) {\r
+                        scale_in*=(100.-double(top_smth_variation))/100.;\r
+                        scale_out*=(100.-double(top_smth_variation))/100.;\r
+                    }\r
+                }else{\r
+                    if (bot_edge_variation.get_value() != 0) \r
+                        new_pt[Y] += double(bot_edge_variation)-bot_edge_variation.get_value()/2.;\r
+                    if (bot_tgt_variation.get_value() != 0) \r
+                        new_pt[X] += double(bot_tgt_variation)-bot_tgt_variation.get_value()/2.;\r
+                    if (bot_smth_variation.get_value() != 0) {\r
+                        scale_in*=(100.-double(bot_smth_variation))/100.;\r
+                        scale_out*=(100.-double(bot_smth_variation))/100.;\r
+                    }\r
+                }\r
+                Point new_hdle_in  = new_pt + (pt0-pt1) * (scale_in /2.);\r
+                Point new_hdle_out = new_pt - (pt0-pt1) * (scale_out/2.);\r
+                \r
+                if ( fat_output.get_value() ){\r
+                    double scaled_width = double((is_top ? stroke_width_top : stroke_width_bot))/(pt1[X]-pt0[X]);\r
+                    Point hdle_offset = (pt1-pt0)*scaled_width;\r
+                    Point inside = new_pt;\r
+                    Point inside_hdle_in;\r
+                    Point inside_hdle_out;\r
+                    inside[Y]+= double((is_top ? -stroke_width_top : stroke_width_bot));\r
+                    inside_hdle_in  = inside + (new_hdle_in -new_pt) + hdle_offset * double((is_top ? front_thickness : back_thickness));\r
+                    inside_hdle_out = inside + (new_hdle_out-new_pt) - hdle_offset * double((is_top ? back_thickness : front_thickness));\r
+                    //TODO: find a good way to handle limit cases (small smthness, large stroke).\r
+                    //if (inside_hdle_in[X]  > inside[X]) inside_hdle_in = inside;\r
+                    //if (inside_hdle_out[X] < inside[X]) inside_hdle_out = inside;\r
+                    \r
+                    if (is_top){\r
+                        res_comp_top.appendNew<CubicBezier>(last_top_hdle,new_hdle_in,new_pt);\r
+                        res_comp_bot.appendNew<CubicBezier>(last_bot_hdle,inside_hdle_in,inside);\r
+                        last_top_hdle = new_hdle_out;\r
+                        last_bot_hdle = inside_hdle_out;\r
+                    }else{\r
+                        res_comp_top.appendNew<CubicBezier>(last_top_hdle,inside_hdle_in,inside);\r
+                        res_comp_bot.appendNew<CubicBezier>(last_bot_hdle,new_hdle_in,new_pt);\r
+                        last_top_hdle = inside_hdle_out;\r
+                        last_bot_hdle = new_hdle_out;\r
+                    }\r
+                }else{\r
+                    res_comp.appendNew<CubicBezier>(last_hdle,new_hdle_in,new_pt);\r
+                }\r
+            \r
+                last_hdle = new_hdle_out;\r
+                i+=2;\r
+                is_top = !is_top;\r
+            }\r
+            if ( i<linearSnake[comp].size() )\r
+                if ( fat_output.get_value() ){\r
+                    res_comp_top.appendNew<CubicBezier>(last_top_hdle,linearSnake[comp][i],linearSnake[comp][i]);\r
+                    res_comp_bot.appendNew<CubicBezier>(last_bot_hdle,linearSnake[comp][i],linearSnake[comp][i]);\r
+                }else{\r
+                    res_comp.appendNew<CubicBezier>(last_hdle,linearSnake[comp][i],linearSnake[comp][i]);\r
+                }\r
+            if ( fat_output.get_value() ){\r
+                res_comp = res_comp_bot;\r
+                res_comp.append(res_comp_top.reverse(),Geom::Path::STITCH_DISCONTINUOUS);\r
+            }    \r
+            result.concat(res_comp.toPwSb());\r
+        }\r
+    }\r
+    return result;\r
+}\r
+\r
+void\r
+LPEHatches::doBeforeEffect (SPLPEItem */*lpeitem*/)\r
+{\r
+    using namespace Geom;\r
+    top_edge_variation.resetRandomizer();\r
+    bot_edge_variation.resetRandomizer();\r
+    top_tgt_variation.resetRandomizer();\r
+    bot_tgt_variation.resetRandomizer();\r
+    top_smth_variation.resetRandomizer();\r
+    bot_smth_variation.resetRandomizer();\r
+    dist_rdm.resetRandomizer();\r
+\r
+    //original_bbox(lpeitem);\r
+}\r
+\r
+\r
+void\r
+LPEHatches::resetDefaults(SPItem * item)\r
+{\r
+    Geom::OptRect bbox = item->getBounds(Geom::identity(), SPItem::GEOMETRIC_BBOX);\r
+    Geom::Point origin(0.,0.);\r
+    Geom::Point vector(50.,0.);\r
+    if (bbox) {\r
+        origin = bbox->midpoint();\r
+        vector = Geom::Point((*bbox)[X].extent()/4, 0.);\r
+        top_edge_variation.param_set_value( (*bbox)[Y].extent()/10, 0 );\r
+        bot_edge_variation.param_set_value( (*bbox)[Y].extent()/10, 0 );\r
+    }\r
+    direction.set_and_write_new_values(origin, vector);\r
+    bender.param_set_and_write_new_value( origin + Geom::Point(5,0) );\r
+    hatch_dist = Geom::L2(vector)/5;\r
+}\r
+\r
+\r
+} //namespace LivePathEffect\r
+} /* namespace Inkscape */\r
+\r
+/*\r
+  Local Variables:\r
+  mode:c++\r
+  c-file-style:"stroustrup"\r
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))\r
+  indent-tabs-mode:nil\r
+  fill-column:99\r
+  End:\r
+*/\r
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :\r
diff --git a/src/live_effects/lpe-hatches.h b/src/live_effects/lpe-hatches.h
new file mode 100644 (file)
index 0000000..0298471
--- /dev/null
@@ -0,0 +1,77 @@
+#ifndef INKSCAPE_LPE_HATCHES_H\r
+#define INKSCAPE_LPE_HATCHES_H\r
+\r
+/** \file\r
+ * Implementation of the curve stitch effect, see lpe-hatches.cpp\r
+ */\r
+\r
+/*\r
+ * Authors:\r
+ *   JFBarraud\r
+ *\r
+ * Copyright (C) JF Barraud 2008.\r
+ *\r
+ * Released under GNU GPL, read the file 'COPYING' for more information\r
+ */\r
+\r
+#include "live_effects/effect.h"\r
+#include "live_effects/parameter/point.h"\r
+#include "live_effects/parameter/parameter.h"\r
+#include "live_effects/parameter/bool.h"\r
+#include "live_effects/parameter/random.h"\r
+#include "live_effects/parameter/vector.h"\r
+\r
+namespace Inkscape {\r
+namespace LivePathEffect {\r
+\r
+class LPEHatches : public Effect {\r
+public:\r
+    LPEHatches(LivePathEffectObject *lpeobject);\r
+    virtual ~LPEHatches();\r
+\r
+    virtual Geom::Piecewise<Geom::D2<Geom::SBasis> >\r
+    doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_in);\r
+\r
+    virtual void resetDefaults(SPItem * item);\r
+\r
+    virtual void doBeforeEffect(SPLPEItem * item);\r
+\r
+  std::vector<double>\r
+  generateLevels(Geom::Interval const &domain);\r
+\r
+  std::vector<std::vector<Geom::Point> >\r
+  linearSnake(Geom::Piecewise<Geom::D2<Geom::SBasis> > const &f);\r
+\r
+  Geom::Piecewise<Geom::D2<Geom::SBasis> > \r
+  smoothSnake(std::vector<std::vector<Geom::Point> > const &linearSnake);\r
+    \r
+private:\r
+  double hatch_dist;\r
+  RandomParam dist_rdm;\r
+  ScalarParam growth;\r
+  //topfront,topback,bottomfront,bottomback handle scales.\r
+  ScalarParam scale_tf, scale_tb, scale_bf, scale_bb;\r
+\r
+  RandomParam top_edge_variation;\r
+  RandomParam bot_edge_variation;\r
+  RandomParam top_tgt_variation;\r
+  RandomParam bot_tgt_variation;\r
+  RandomParam top_smth_variation;\r
+  RandomParam bot_smth_variation;\r
+\r
+  BoolParam fat_output, do_bend;\r
+  ScalarParam stroke_width_top;\r
+  ScalarParam stroke_width_bot;\r
+  ScalarParam front_thickness, back_thickness;\r
+\r
+  PointParam  bender;\r
+  VectorParam direction;\r
+\r
+  LPEHatches(const LPEHatches&);\r
+  LPEHatches& operator=(const LPEHatches&);\r
+};\r
+\r
+} //namespace LivePathEffect\r
+} //namespace Inkscape\r
+\r
+#endif\r
index a4c722acc99e8b684ac413f2429d2b91cae33875..b2f1547a97b1820330d4f5b1e5c72dbcf8737414 100644 (file)
@@ -61,8 +61,12 @@ LPEInterpolate::doEffect_path (Geom::PathVector const & path_in)
     Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2_B = path_in[1].toPwSb();
 
     // Transform both paths to (0,0) midpoint, so they can easily be positioned along interpolate_path
-    pwd2_A -= Geom::bounds_exact(pwd2_A).midpoint();
-    pwd2_B -= Geom::bounds_exact(pwd2_B).midpoint();
+    if (Geom::OptRect bounds = Geom::bounds_exact(pwd2_A)) {
+        pwd2_A -= bounds->midpoint();
+    }
+    if (Geom::OptRect bounds = Geom::bounds_exact(pwd2_B)) {
+        pwd2_B -= bounds->midpoint();
+    }
 
     // Make sure both paths have the same number of segments and cuts at the same locations
     pwd2_B.setDomain(pwd2_A.domain());
@@ -99,14 +103,18 @@ LPEInterpolate::resetDefaults(SPItem * item)
     if ( (pathv.size() < 2) )
         return;
 
-    Geom::Rect bounds_A = pathv[0].boundsExact();
-    Geom::Rect bounds_B = pathv[1].boundsExact();
-
-    Geom::PathVector traj_pathv;
-    traj_pathv.push_back( Geom::Path() );
-    traj_pathv[0].start( bounds_A.midpoint() );
-    traj_pathv[0].appendNew<Geom::LineSegment>( bounds_B.midpoint() );
-    trajectory_path.set_new_value( traj_pathv, true );
+    Geom::OptRect bounds_A = pathv[0].boundsExact();
+    Geom::OptRect bounds_B = pathv[1].boundsExact();
+
+    if (bounds_A && bounds_B) {
+        Geom::PathVector traj_pathv;
+        traj_pathv.push_back( Geom::Path() );
+        traj_pathv[0].start( bounds_A->midpoint() );
+        traj_pathv[0].appendNew<Geom::LineSegment>( bounds_B->midpoint() );
+        trajectory_path.set_new_value( traj_pathv, true );
+    } else {
+        trajectory_path.param_set_and_write_default();
+    }
 }
 
 } //namespace LivePathEffect
index 0ff1beccf7620c32c599313113a5f4cdbdf31cc9..df18f8767234345e26fdda57955063e7cb62fc82 100644 (file)
@@ -1,12 +1,10 @@
-#define INKSCAPE_LPE_KNOT_CPP
-/** \file
- * LPE <knot> implementation
+/** @file
+ * @brief LPE knot effect implementation
  */
-/*
- * Authors:
- *   JF Barraud
-*
-* Copyright (C) JF Barraud 2007 <jf.barraud@gmail.com>
+/* Authors:
+ *   Jean-Francois Barraud <jf.barraud@gmail.com>
+ *
+ * Copyright (C) 2007 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
@@ -107,8 +105,9 @@ findShadowedTime(Geom::Path const &patha,
     return Interval(tmin,tmax);
 }
 
+// TODO: Fix all this in 2geom!!!!
 //---------------------------------------------------------------------------
-// a 2Geom work around.
+// some 2Geom work around.
 //---------------------------------------------------------------------------
 
 //Cubic Bezier curves might self intersect; the 2geom code used to miss them.
@@ -133,29 +132,36 @@ split_at_horiz_vert_tgt (std::vector<Geom::Path> const & path_in){
     return ret;
 }
 
-
-//---------------------------------------------------------------------------
-//LPEKnot specific Crossing Data manipulation.
-//---------------------------------------------------------------------------
-
-//TODO: Fix this in 2Geom: I think CrossingSets should not contain duplicates.
+//TODO: Fix this in 2Geom; I think CrossingSets should not contain duplicates.
 Geom::CrossingSet crossingSet_remove_double(Geom::CrossingSet const &input){
     Geom::CrossingSet result(input.size());
     //Yeah, I know, there is a "unique" algorithm for that...
+    //Note: I'm not sure the duplicates are always consecutive!! (can be first and last, I think)
+    //Note: I also found crossings c with c.a==c.b and c.ta==c.tb . Is it normal?
+    //Note: I also found crossings c with c.ta or c.tb not in path[a] or path[b] domain. This is definitely not normal.
     Geom::Crossing last;
     for( unsigned i=0; i<input.size(); i++){
         for( unsigned j=0; j<input[i].size(); j++){
-            if( j==0 || !(input[i][j]==last) ){
-                result[i].push_back(input[i][j]);
-                last = input[i][j];
-            }else{
-                g_warning("Duplicate found in a Geom::CrossingSet!");
+            bool dup = false;
+            for ( unsigned k=0; k<result[i].size(); k++){
+                if ( input[i][j]==result[i][k] ){
+                    dup = true;
+                    g_warning("Duplicate found in a Geom::CrossingSet!");
+                    break;
+                }
+            }
+            if (!dup) {
+                result[i].push_back( input[i][j] );
             }
         }
     }
     return result;
 }
 
+//---------------------------------------------------------------------------
+//LPEKnot specific Crossing Data manipulation.
+//---------------------------------------------------------------------------
+
 //TODO: evaluate how usefull/lpeknot specific that is. Worth being moved to 2geom? (I doubt it)
 namespace LPEKnotNS {
 
@@ -173,15 +179,21 @@ namespace LPEKnotNS {
 CrossingPoints::CrossingPoints(Geom::CrossingSet const &input, std::vector<Geom::Path> const &path) : std::vector<CrossingPoint>()
 {
     using namespace Geom;
-//    g_print("JF>\nCrossing set content:\n");
+    //g_print("DBG>\nCrossing set content:\n");
     for( unsigned i=0; i<input.size(); i++){
         Crossings i_crossings = input[i];
         for( unsigned n=0; n<i_crossings.size(); n++ ){
             Crossing c = i_crossings[n];
-//            g_print("JF> (%u,%u) at times (%f,%f) ----->",c.a,c.b,c.ta,c.tb);
+            //g_print("DBG> [%u,%u]:(%u,%u) at times (%f,%f) ----->",i,n,c.a,c.b,c.ta,c.tb);
             unsigned j = c.getOther(i);
-            if (i<j || (i==j && c.ta<c.tb) ){
+            if (i<j || (i==j && c.ta<=c.tb) ){//FIXME: equality should not happen, but does happen.
                 CrossingPoint cp;
+                double ti = c.getTime(i);
+                //FIXME: times in crossing are sometimes out of range!!
+                //if (0<ti || ti > 1)g_print("oops! -->");
+                if (ti > 1) ti=1;
+                if (ti < 0) ti=0;
+
                 cp.pt = path[i].pointAt(c.getTime(i));
                 cp.i = i;
                 cp.j = j;
@@ -189,7 +201,7 @@ CrossingPoints::CrossingPoints(Geom::CrossingSet const &input, std::vector<Geom:
                 Crossing c_bar = c;
                 if (i==j){
                     c_bar.a  = c.b;
-                    c_bar.b  = c.a;
+                    c_bar.b  = c.a; 
                     c_bar.ta = c.tb;
                     c_bar.tb = c.ta;
                     c_bar.dir = !c.dir;
@@ -197,24 +209,37 @@ CrossingPoints::CrossingPoints(Geom::CrossingSet const &input, std::vector<Geom:
                 cp.nj = std::find(input[j].begin(),input[j].end(),c_bar)-input[j].begin();
                 cp.sign = 1;
                 push_back(cp);
-//                g_print("i=%u, ni=%u, j=%u, nj=%u\n",cp.i,cp.ni,cp.j,cp.nj);
-            }
-            else{
-//                g_print("\n");
+                //g_print("i=%u, ni=%u, j=%u, nj=%u\n",cp.i,cp.ni,cp.j,cp.nj);
+            }/*
+               else{
+                //debug purpose only: 
+                //This crossing is already registered in output. Just make sure it has a "mirror".
+                g_print("deja trouve?");
+                get(i,n);
                 bool found = false;
                 for( unsigned ii=0; ii<input.size(); ii++){
                     Crossings ii_crossings = input[ii];
                     for( unsigned nn=0; nn<ii_crossings.size(); nn++ ){
                         Crossing cc = ii_crossings[nn];
                         if (cc.b==c.a && cc.a==c.b && cc.ta==c.tb && cc.tb==c.ta) found = true;
+                        if ( (ii!=i || nn!=n) && 
+                             ( (cc.b==c.a && cc.a==c.b && cc.ta==c.tb && cc.tb==c.ta) ||
+                               (cc.a==c.a && cc.b==c.b && cc.ta==c.ta && cc.tb==c.tb) 
+                                 ) ) found = true;
                     }
                 }
-                if (!found) {
-                    throw std::exception();
-                }
+                assert( found );
+                g_print("  oui!\n");
             }
+             */
         }
     }
+
+    //g_print("CrossingPoints reslut:\n");
+    //for (unsigned k=0; k<size(); k++){
+    //    g_print("cpts[%u]: i=%u, ni=%u, j=%u, nj=%u\n",k,(*this)[k].i,(*this)[k].ni,(*this)[k].j,(*this)[k].nj);
+    //}
+
 }
 
 CrossingPoints::CrossingPoints(std::vector<double> const &input) : std::vector<CrossingPoint>()
@@ -386,19 +411,8 @@ LPEKnot::doEffect_path (std::vector<Geom::Path> const &input_path)
 
     CrossingSet crossingTable = crossings_among(path_in);
 
-    for(unsigned i=0;i<crossingTable.size();i++){
-        for(unsigned j=0;j<crossingTable[i].size();j++){
-//            g_print("JF>avant: %u,%u,%f,%f\n",crossingTable[i][j].a, crossingTable[i][j].b, crossingTable[i][j].ta, crossingTable[i][j].tb);
-        }
-    }
     crossingTable = crossingSet_remove_double(crossingTable);
 
-    for(unsigned i=0;i<crossingTable.size();i++){
-        for(unsigned j=0;j<crossingTable[i].size();j++){
-//            g_print("JF>apres: %u,%u,%f,%f\n",crossingTable[i][j].a, crossingTable[i][j].b, crossingTable[i][j].ta, crossingTable[i][j].tb);
-        }
-    }
-
     crossing_points = LPEKnotNS::CrossingPoints(crossingTable, path_in);
     crossing_points.inherit_signs(old_crdata);
     crossing_points_vector.param_set_and_write_new_value(crossing_points.to_vector());
@@ -522,8 +536,8 @@ KnotHolderEntityCrossingSwitcher::knot_click(guint state)
 
 /* ######################## */
 
-} //namespace LivePathEffect (setq default-directory "c:/Documents And Settings/jf/Mes Documents/InkscapeSVN")
-} /* namespace Inkscape */
+} // namespace LivePathEffect
+} // namespace Inkscape
 
 /*
   Local Variables:
@@ -534,4 +548,4 @@ KnotHolderEntityCrossingSwitcher::knot_click(guint state)
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 4c98ccd55736d1681d97052c3463092b910ee96e..cbd33466d80e5ef3de890e0c42b074c7ff51207c 100644 (file)
@@ -1,22 +1,21 @@
-#ifndef INKSCAPE_LPE_KNOT_H
-#define INKSCAPE_LPE_KNOT_H
-
 /** \file
- * LPE <knot> implementation, see lpe-knot.cpp.
+ * LPE knot effect implementation, see lpe-knot.cpp.
  */
-
-/*
- * Authors:
- *   JFB, but derived from Johan Engelen!
-*
-* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+/* Authors:
+ *   Jean-Francois Barraud <jf.barraud@gmail.com>
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
+ *
+ * Copyright (C) Johan Engelen 2007
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef INKSCAPE_LPE_KNOT_H
+#define INKSCAPE_LPE_KNOT_H
+
 #include "live_effects/effect.h"
 #include "live_effects/parameter/parameter.h"
-#include "live_effects/parameter/vector.h"
+#include "live_effects/parameter/array.h"
 #include "live_effects/parameter/path.h"
 #include "2geom/crossing.h"
 
@@ -70,7 +69,7 @@ private:
   // add the parameters for your effect here:
   ScalarParam interruption_width;
   ScalarParam switcher_size;
-  VectorParam<double> crossing_points_vector;
+  ArrayParam<double> crossing_points_vector;
   LPEKnotNS::CrossingPoints crossing_points;
   
   
index 0e5011e510616a85659165d1fdf6e7c7e5a0db04..954a01029a1a100cac03cf226d0ec3751fa4228f 100644 (file)
@@ -66,7 +66,8 @@ LPEPatternAlongPath::LPEPatternAlongPath(LivePathEffectObject *lpeobject) :
     normal_offset(_("Normal offset"), "", "normal_offset", &wr, this, 0),
     tang_offset(_("Tangential offset"), "", "tang_offset", &wr, this, 0),
     prop_units(_("Offsets in unit of pattern size"), _("Spacing, tangential and normal offset are expressed as a ratio of width/height"), "prop_units", &wr, this, false),
-    vertical_pattern(_("Pattern is vertical"), _("Rotate pattern 90 deg before applying"), "vertical_pattern", &wr, this, false)
+    vertical_pattern(_("Pattern is vertical"), _("Rotate pattern 90 deg before applying"), "vertical_pattern", &wr, this, false),
+    fuse_tolerance(_("Fuse nearby ends"), "Fuse ends closer than this number. 0 means don't fuse.", "fuse_tolerance", &wr, this, 0)
 {
     registerParameter( dynamic_cast<Parameter *>(&pattern) );
     registerParameter( dynamic_cast<Parameter *>(&copytype) );
@@ -77,6 +78,7 @@ LPEPatternAlongPath::LPEPatternAlongPath(LivePathEffectObject *lpeobject) :
     registerParameter( dynamic_cast<Parameter *>(&tang_offset) );
     registerParameter( dynamic_cast<Parameter *>(&prop_units) );
     registerParameter( dynamic_cast<Parameter *>(&vertical_pattern) );
+    registerParameter( dynamic_cast<Parameter *>(&fuse_tolerance) );
 
     prop_scale.param_set_digits(3);
     prop_scale.param_set_increments(0.01, 0.10);
@@ -94,105 +96,122 @@ LPEPatternAlongPath::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > con
 
 /* Much credit should go to jfb and mgsloan of lib2geom development for the code below! */
     Piecewise<D2<SBasis> > output;
+    std::vector<Geom::Piecewise<Geom::D2<Geom::SBasis> > > pre_output;
 
     PAPCopyType type = copytype.get_value();
 
     D2<Piecewise<SBasis> > patternd2 = make_cuts_independent(pattern.get_pwd2());
     Piecewise<SBasis> x0 = vertical_pattern.get_value() ? Piecewise<SBasis>(patternd2[1]) : Piecewise<SBasis>(patternd2[0]);
     Piecewise<SBasis> y0 = vertical_pattern.get_value() ? Piecewise<SBasis>(patternd2[0]) : Piecewise<SBasis>(patternd2[1]);
-    Interval pattBndsX = bounds_exact(x0);
-    x0 -= pattBndsX.min();
-    Interval pattBndsY = bounds_exact(y0);
-    y0 -= pattBndsY.middle();
-
-    double xspace  = spacing;
-    double noffset = normal_offset;
-    double toffset = tang_offset;
-    if (prop_units.get_value()){
-        xspace  *= pattBndsX.extent();
-        noffset *= pattBndsY.extent();
-        toffset *= pattBndsX.extent();
-    }
+    OptInterval pattBndsX = bounds_exact(x0);
+    OptInterval pattBndsY = bounds_exact(y0);
+    if (pattBndsX && pattBndsY) {
+        x0 -= pattBndsX->min();
+        y0 -= pattBndsY->middle();
+
+        double xspace  = spacing;
+        double noffset = normal_offset;
+        double toffset = tang_offset;
+        if (prop_units.get_value() && pattBndsY){
+            xspace  *= pattBndsX->extent();
+            noffset *= pattBndsY->extent();
+            toffset *= pattBndsX->extent();
+        }
 
-    //Prevent more than 90% overlap...
-    if (xspace < -pattBndsX.extent()*.9) {
-        xspace = -pattBndsX.extent()*.9;
-    }
-    //TODO: dynamical update of parameter ranges?
-    //if (prop_units.get_value()){
-    //        spacing.param_set_range(-.9, NR_HUGE);
-    //    }else{
-    //        spacing.param_set_range(-pattBndsX.extent()*.9, NR_HUGE);
-    //    }
-
-    y0+=noffset;
-
-    std::vector<Geom::Piecewise<Geom::D2<Geom::SBasis> > > paths_in;
-    paths_in = split_at_discontinuities(pwd2_in);
-
-    for (unsigned idx = 0; idx < paths_in.size(); idx++){
-        Geom::Piecewise<Geom::D2<Geom::SBasis> > path_i = paths_in[idx];
-        Piecewise<SBasis> x = x0;
-        Piecewise<SBasis> y = y0;
-        Piecewise<D2<SBasis> > uskeleton = arc_length_parametrization(path_i,2,.1);
-        uskeleton = remove_short_cuts(uskeleton,.01);
-        Piecewise<D2<SBasis> > n = rot90(derivative(uskeleton));
-        n = force_continuity(remove_short_cuts(n,.1));
-        
-        int nbCopies = 0;
-        double scaling = 1;
-        switch(type) {
-            case PAPCT_REPEATED:
-                nbCopies = static_cast<int>(floor((uskeleton.domain().extent() - toffset + xspace)/(pattBndsX.extent()+xspace)));
-                pattBndsX = Interval(pattBndsX.min(),pattBndsX.max()+xspace);
-                break;
-                
-            case PAPCT_SINGLE:
-                nbCopies = (toffset + pattBndsX.extent() < uskeleton.domain().extent()) ? 1 : 0;
-                break;
-                
-            case PAPCT_SINGLE_STRETCHED:
-                nbCopies = 1;
-                scaling = (uskeleton.domain().extent() - toffset)/pattBndsX.extent();
-                break;
-                
-            case PAPCT_REPEATED_STRETCHED:
-                // if uskeleton is closed:
-                if(path_i.segs.front().at0() == path_i.segs.back().at1()){
-                    nbCopies = static_cast<int>(std::floor((uskeleton.domain().extent() - toffset)/(pattBndsX.extent()+xspace)));
-                    pattBndsX = Interval(pattBndsX.min(),pattBndsX.max()+xspace);
-                    scaling = (uskeleton.domain().extent() - toffset)/(((double)nbCopies)*pattBndsX.extent());
-                    // if not closed: no space at the end
+        //Prevent more than 90% overlap...
+        if (xspace < -pattBndsX->extent()*.9) {
+            xspace = -pattBndsX->extent()*.9;
+        }
+        //TODO: dynamical update of parameter ranges?
+        //if (prop_units.get_value()){
+        //        spacing.param_set_range(-.9, NR_HUGE);
+        //    }else{
+        //        spacing.param_set_range(-pattBndsX.extent()*.9, NR_HUGE);
+        //    }
+
+        y0+=noffset;
+
+        std::vector<Geom::Piecewise<Geom::D2<Geom::SBasis> > > paths_in;
+        paths_in = split_at_discontinuities(pwd2_in);
+
+        for (unsigned idx = 0; idx < paths_in.size(); idx++){
+            Geom::Piecewise<Geom::D2<Geom::SBasis> > path_i = paths_in[idx];
+            Piecewise<SBasis> x = x0;
+            Piecewise<SBasis> y = y0;
+            Piecewise<D2<SBasis> > uskeleton = arc_length_parametrization(path_i,2,.1);
+            uskeleton = remove_short_cuts(uskeleton,.01);
+            Piecewise<D2<SBasis> > n = rot90(derivative(uskeleton));
+            n = force_continuity(remove_short_cuts(n,.1));
+            
+            int nbCopies = 0;
+            double scaling = 1;
+            switch(type) {
+                case PAPCT_REPEATED:
+                    nbCopies = static_cast<int>(floor((uskeleton.domain().extent() - toffset + xspace)/(pattBndsX->extent()+xspace)));
+                    pattBndsX = Interval(pattBndsX->min(),pattBndsX->max()+xspace);
+                    break;
+                    
+                case PAPCT_SINGLE:
+                    nbCopies = (toffset + pattBndsX->extent() < uskeleton.domain().extent()) ? 1 : 0;
+                    break;
+                    
+                case PAPCT_SINGLE_STRETCHED:
+                    nbCopies = 1;
+                    scaling = (uskeleton.domain().extent() - toffset)/pattBndsX->extent();
+                    break;
+                    
+                case PAPCT_REPEATED_STRETCHED:
+                    // if uskeleton is closed:
+                    if(path_i.segs.front().at0() == path_i.segs.back().at1()){
+                        nbCopies = static_cast<int>(std::floor((uskeleton.domain().extent() - toffset)/(pattBndsX->extent()+xspace)));
+                        pattBndsX = Interval(pattBndsX->min(),pattBndsX->max()+xspace);
+                        scaling = (uskeleton.domain().extent() - toffset)/(((double)nbCopies)*pattBndsX->extent());
+                        // if not closed: no space at the end
+                    }else{
+                        nbCopies = static_cast<int>(std::floor((uskeleton.domain().extent() - toffset + xspace)/(pattBndsX->extent()+xspace)));
+                        pattBndsX = Interval(pattBndsX->min(),pattBndsX->max()+xspace);
+                        scaling = (uskeleton.domain().extent() - toffset)/(((double)nbCopies)*pattBndsX->extent() - xspace);
+                    }
+                    break;
+                    
+                default:
+                    return pwd2_in;
+            };
+            
+            double pattWidth = pattBndsX->extent() * scaling;
+            
+            if (scaling != 1.0) {
+                x*=scaling;
+            }
+            if ( scale_y_rel.get_value() ) {
+                y*=(scaling*prop_scale);
+            } else {
+                if (prop_scale != 1.0) y *= prop_scale;
+            }
+            x += toffset;
+            
+            double offs = 0;
+            for (int i=0; i<nbCopies; i++){
+                if (fuse_tolerance > 0){        
+                    Geom::Piecewise<Geom::D2<Geom::SBasis> > output_piece = compose(uskeleton,x+offs)+y*compose(n,x+offs);
+                    std::vector<Geom::Piecewise<Geom::D2<Geom::SBasis> > > splited_output_piece = split_at_discontinuities(output_piece);
+                    pre_output.insert(pre_output.end(), splited_output_piece.begin(), splited_output_piece.end() );
                 }else{
-                    nbCopies = static_cast<int>(std::floor((uskeleton.domain().extent() - toffset + xspace)/(pattBndsX.extent()+xspace)));
-                    pattBndsX = Interval(pattBndsX.min(),pattBndsX.max()+xspace);
-                    scaling = (uskeleton.domain().extent() - toffset)/(((double)nbCopies)*pattBndsX.extent() - xspace);
+                    output.concat(compose(uskeleton,x+offs)+y*compose(n,x+offs));
                 }
-                break;
-                
-            default:
-                return pwd2_in;
-        };
-        
-        double pattWidth = pattBndsX.extent() * scaling;
-        
-        if (scaling != 1.0) {
-            x*=scaling;
-        }
-        if ( scale_y_rel.get_value() ) {
-            y*=(scaling*prop_scale);
-        } else {
-            if (prop_scale != 1.0) y *= prop_scale;
+                offs+=pattWidth;
+            }
         }
-        x += toffset;
-        
-        double offs = 0;
-        for (int i=0; i<nbCopies; i++){
-            output.concat(compose(uskeleton,x+offs)+y*compose(n,x+offs));
-            offs+=pattWidth;
+        if (fuse_tolerance > 0){        
+            pre_output = fuse_nearby_ends(pre_output, fuse_tolerance);
+            for (unsigned i=0; i<pre_output.size(); i++){
+                output.concat(pre_output[i]);
+            }
         }
+        return output;
+    } else {
+        return pwd2_in;
     }
-    return output;
 }
 
 LPEFreehandShape::LPEFreehandShape(LivePathEffectObject *lpeobject) : LPEPatternAlongPath(lpeobject)
index 5adc049fb699186331389f710457778ef85bf149..f35f7a5cb5db5899df85ec5b0f4df4650c3581c9 100644 (file)
@@ -42,6 +42,7 @@ private:
     ScalarParam  tang_offset;
     BoolParam    prop_units;
     BoolParam    vertical_pattern;
+    ScalarParam  fuse_tolerance;
 
     void on_pattern_pasted();
 
index 2eef0cd5b21b5cecb855150ec4424ae363865667..d5262f33cde2a4adbb86d1ef6dd3b329b93fce34 100644 (file)
@@ -1,22 +1,11 @@
-#define INKSCAPE_LPE_PERSPECTIVE_PATH_CPP
-/** \file
- * LPE <perspective_path> implementation, used as an example for a base starting class
- * when implementing new LivePathEffects.
- *
- * In vi, three global search-and-replaces will let you rename everything
- * in this and the .h file:
- *
- *   :%s/PERSPECTIVE_PATH/YOURNAME/g
- *   :%s/PerspectivePath/Yourname/g
- *   :%s/perspective_path/yourname/g
+/** @file
+ * @brief LPE perspective path effect implementation.
  */
-/*
- * Authors:
- *   Johan Engelen
- *   Maximilian Albert
+/* Authors:
+ *   Maximilian Albert <maximilian.albert@gmail.com>
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
  *
- * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
- * Copyright (C) Maximilian Albert 2008 <maximilian.albert@gmail.com>
+ * Copyright (C) 2007-2008 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
@@ -198,4 +187,4 @@ KnotHolderEntityOffset::knot_get()
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 62589e8756a6344506b211c639d3f6a4e9f7f76c..23731f9f7441d89bb8accc7bdd2744dbef8adf05 100644 (file)
@@ -1,19 +1,18 @@
-#ifndef INKSCAPE_LPE_PERSPECTIVE_PATH_H
-#define INKSCAPE_LPE_PERSPECTIVE_PATH_H
-
-/** \file
- * LPE <perspective_path> implementation, see lpe-perspective_path.cpp.
+/** @file
+ * @brief LPE perspective path effect implementation
  */
-
-/*
- * Authors:
- *   Johan Engelen
-*
-* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+/* Authors:
+ *   Maximilian Albert <maximilian.albert@gmail.com>
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
+ *
+ * Copyright (C) 2007 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef INKSCAPE_LPE_PERSPECTIVE_PATH_H
+#define INKSCAPE_LPE_PERSPECTIVE_PATH_H
+
 #include "live_effects/effect.h"
 #include "live_effects/parameter/parameter.h"
 #include "live_effects/parameter/bool.h"
@@ -65,3 +64,14 @@ private:
 } //namespace Inkscape
 
 #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 :
index c2ab7be514469910939adb02443bc5092e4a03ea..fdee68b88423bbf9d2421ed683c0eaab10b8173b 100644 (file)
@@ -1,7 +1,7 @@
 #define INKSCAPE_LPE_SKELETON_CPP
 /** \file
- * LPE <skeleton> implementation, used as an example for a base starting class
- * when implementing new LivePathEffects.
+ * @brief Minimal dummy LPE effect implementation, used as an example for a base
+ * starting class when implementing new LivePathEffects.
  *
  * In vi, three global search-and-replaces will let you rename everything
  * in this and the .h file:
  *   :%s/Skeleton/Yourname/g
  *   :%s/skeleton/yourname/g
  */
-/*
- * Authors:
- *   Johan Engelen
+/* Authors:
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
  *
- * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+ * Copyright (C) 2007 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
@@ -84,7 +83,7 @@ LPESkeleton::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd
  *  Define the classes for your knotholder handles here
  */
 
-/**
+/*
 namespace Skeleton {
 
 class KnotHolderEntityMyHandle : public LPEKnotHolderEntity
@@ -97,7 +96,7 @@ public:
 };
 
 } // namespace Skeleton
-**/
+*/
 
 /* ######################## */
 
@@ -113,4 +112,4 @@ public:
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index d961ad9543c0815156f51731343f90ebd455e568..fd9dc0abaecd2cf8b75e700d89049d953748da6a 100644 (file)
@@ -1,19 +1,17 @@
-#ifndef INKSCAPE_LPE_SKELETON_H
-#define INKSCAPE_LPE_SKELETON_H
-
-/** \file
- * LPE <skeleton> implementation, see lpe-skeleton.cpp.
+/** @file
+ * @brief Minimal LPE effect, see lpe-skeleton.cpp.
  */
-
-/*
- * Authors:
- *   Johan Engelen
+/* Authors:
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
  *
- * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+ * Copyright (C) 2007 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef INKSCAPE_LPE_SKELETON_H
+#define INKSCAPE_LPE_SKELETON_H
+
 #include "live_effects/effect.h"
 #include "live_effects/parameter/parameter.h"
 
@@ -65,4 +63,4 @@ private:
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 38957a6581157b50181772485f3a5e165316921f..1fe4ba52572bc40de2a16805df785a4c40d958b8 100644 (file)
@@ -1,12 +1,11 @@
-#define INKSCAPE_LPE_SKETCH_CPP
-/** \file
- * LPE <sketch> implementation
+/** @file
+ * @brief LPE sketch effect implementation
  */
-/*
- * Authors:
- *   Johan Engelen
-*
-* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+/* Authors:
+ *   Jean-Francois Barraud <jf.barraud@gmail.com>
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
+ *
+ * Copyright (C) 2007 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
@@ -189,7 +188,7 @@ LPESketch::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_
 
     //----- Approximated Strokes.
     std::vector<Piecewise<D2<SBasis> > > pieces_in = split_at_discontinuities (pwd2_in);
-
+    
     //work separately on each component.
     for (unsigned pieceidx = 0; pieceidx < pieces_in.size(); pieceidx++){
 
@@ -247,10 +246,11 @@ LPESketch::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_
                 t1 = times[0];
                 
                 //pick a rdm perturbation, and collect the perturbed piece into output.
-                Piecewise<D2<SBasis> > pwperturb = computePerturbation(s0,s1);
+                Piecewise<D2<SBasis> > pwperturb = computePerturbation(s0-0.01,s1+0.01);
                 pwperturb = compose(pwperturb,portion(piecelength,t0,t1));
+
                 output.concat(portion(piece,t0,t1)+pwperturb);
-                
+
                 //step points: s0 = s1 - overlap.
                 //TODO: make sure this has to end?
                 s0 = s1 - strokeoverlap*(1-strokeoverlap_rdm)*(s1-s0);
@@ -258,7 +258,6 @@ LPESketch::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_
         }
     }
 
-
     //----- Construction lines.
     //TODO: choose places according to curvature?.
 
@@ -268,7 +267,9 @@ LPESketch::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_
     Piecewise<D2<SBasis> > m = pwd2_in;
     Piecewise<D2<SBasis> > v = derivative(pwd2_in);
     Piecewise<D2<SBasis> > a = derivative(v);
+
     for (unsigned i=0; i<nbtangents; i++){
+
         // pick a point where to draw a tangent (s = dist from start along path).
         double s = total_length * ( i + tgtlength_rdm ) / (nbtangents+1.);
         std::vector<double> times;  
@@ -290,6 +291,7 @@ LPESketch::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_
         }
         output.concat(Piecewise<D2<SBasis> >(tgt));
     }
+    
     return output;
 }
 
@@ -319,4 +321,4 @@ LPESketch::doBeforeEffect (SPLPEItem *lpeitem)
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index bca4e2447b2d0a2d5b1d6fb3fed1123a2eaf1eaf..4237c2b678151206732c3f9917213f22a1c8490a 100644 (file)
@@ -1,19 +1,18 @@
-#ifndef INKSCAPE_LPE_SKETCH_H
-#define INKSCAPE_LPE_SKETCH_H
-
 /** \file
- * LPE <sketch> implementation, see lpe-sketch.cpp.
+ * @brief LPE sketch effect implementation, see lpe-sketch.cpp.
  */
-
-/*
- * Authors:
- *   JFB, but derived from Johan Engelen!
-*
-* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+/* Authors:
+ *   Jean-Francois Barraud <jf.barraud@gmail.com>
+ *   Johan Engelen <j.b.c.engelen@utwente.nl>
+ *
+ * Copyright (C) 2007 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef INKSCAPE_LPE_SKETCH_H
+#define INKSCAPE_LPE_SKETCH_H
+
 #include "live_effects/effect.h"
 #include "live_effects/parameter/parameter.h"
 #include "live_effects/parameter/random.h"
@@ -59,3 +58,14 @@ private:
 } //namespace Inkscape
 
 #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 :
index 3b1ece2ad9583a4ea62ec61abb8d01ecb232fa67..3820b5ba741c1ff8bee27a5e40f723fd0e081b81 100644 (file)
@@ -37,7 +37,7 @@ GroupBBoxEffect::original_bbox(SPLPEItem *lpeitem, bool absolute)
         transform = Geom::identity();
     }
 
-    boost::optional<Geom::Rect> bbox = item->getBounds(transform, SPItem::GEOMETRIC_BBOX);
+    Geom::OptRect bbox = item->getBounds(transform, SPItem::GEOMETRIC_BBOX);
     if (bbox) {
         boundingbox_X = (*bbox)[Geom::X];
         boundingbox_Y = (*bbox)[Geom::Y];
index d7775f44d0b17d8fd5a657d060505ca4a8b44b52..f93d8910aac9a6590ae5a4b77933c8b8dbbb84d9 100644 (file)
@@ -1,4 +1,5 @@
 SET(live_effects_parameter_SRC
+array.cpp
 bool.cpp
 parameter.cpp
 path.cpp
index 869f4a7f4a49cbe19c43e06b1f766565d78788f3..3832e24cbfe68e9baa13c9d5f77f1a3203781dfd 100644 (file)
@@ -8,14 +8,14 @@ live_effects/parameter/clean:
 live_effects_parameter_liblpeparam_a_SOURCES = \
        live_effects/parameter/parameter.cpp    \
        live_effects/parameter/parameter.h      \
+       live_effects/parameter/array.cpp        \
+       live_effects/parameter/array.h  \
        live_effects/parameter/bool.cpp \
        live_effects/parameter/bool.h   \
        live_effects/parameter/random.cpp       \
        live_effects/parameter/random.h \
        live_effects/parameter/point.cpp        \
        live_effects/parameter/point.h  \
-       live_effects/parameter/pointparam-knotholder.cpp        \
-       live_effects/parameter/pointparam-knotholder.h  \
        live_effects/parameter/enum.h   \
        live_effects/parameter/path-reference.cpp       \
        live_effects/parameter/path-reference.h \
diff --git a/src/live_effects/parameter/array.cpp b/src/live_effects/parameter/array.cpp
new file mode 100644 (file)
index 0000000..c576bed
--- /dev/null
@@ -0,0 +1,51 @@
+#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_ARRAY_CPP
+
+/*
+ * Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "live_effects/parameter/array.h"
+
+#include "svg/svg.h"
+#include "svg/stringstream.h"
+
+#include <2geom/coord.h>
+
+namespace Inkscape {
+
+namespace LivePathEffect {
+
+template <>
+double
+ArrayParam<double>::readsvg(const gchar * str)
+{
+    double newx = Geom::infinity();
+    sp_svg_number_read_d(str, &newx);
+    return newx;
+}
+
+template <>
+float
+ArrayParam<float>::readsvg(const gchar * str)
+{
+    float newx = Geom::infinity();
+    sp_svg_number_read_f(str, &newx);
+    return newx;
+}
+
+} /* namespace LivePathEffect */
+
+} /* 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 :
diff --git a/src/live_effects/parameter/array.h b/src/live_effects/parameter/array.h
new file mode 100644 (file)
index 0000000..4da329c
--- /dev/null
@@ -0,0 +1,123 @@
+#ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_ARRAY_H
+#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_ARRAY_H
+
+/*
+ * Inkscape::LivePathEffectParameters
+ *
+* Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include <vector>
+
+#include <glib/gtypes.h>
+
+#include <gtkmm/tooltips.h>
+
+#include "live_effects/parameter/parameter.h"
+
+#include "svg/svg.h"
+#include "svg/stringstream.h"
+
+namespace Inkscape {
+
+namespace LivePathEffect {
+
+template <typename StorageType>
+class ArrayParam : public Parameter {
+public:
+    ArrayParam( const Glib::ustring& label,
+                const Glib::ustring& tip,
+                const Glib::ustring& key,
+                Inkscape::UI::Widget::Registry* wr,
+                Effect* effect,
+                size_t n = 0 )
+        : Parameter(label, tip, key, wr, effect), _vector(n)
+    {
+
+    }
+
+    virtual ~ArrayParam() {
+
+    };
+
+    std::vector<StorageType> const & data() const {
+        return _vector;
+    }
+
+    virtual Gtk::Widget * param_newWidget(Gtk::Tooltips * /*tooltips*/) {
+        return NULL;
+    }
+
+    virtual bool param_readSVGValue(const gchar * strvalue) {
+        _vector.clear();
+        gchar ** strarray = g_strsplit(strvalue, "|", 0);
+        gchar ** iter = strarray;
+        while (*iter != NULL) {
+            _vector.push_back( readsvg(*iter) );
+            iter++;
+        }
+        g_strfreev (strarray);
+        return true;
+    }
+
+    virtual gchar * param_getSVGValue() const {
+        Inkscape::SVGOStringStream os;
+        writesvg(os, _vector);
+        gchar * str = g_strdup(os.str().c_str());
+        return str;
+    }
+
+    void param_setValue(std::vector<StorageType> const &new_vector) {
+        _vector = new_vector;
+    }
+
+    void param_set_default() {
+        param_setValue( std::vector<StorageType>() );
+    }
+
+    void param_set_and_write_new_value(std::vector<StorageType> const &new_vector) {
+        Inkscape::SVGOStringStream os;
+        writesvg(os, new_vector);
+        gchar * str = g_strdup(os.str().c_str());
+        param_write_to_repr(str);
+        g_free(str);
+    }
+
+private:
+    ArrayParam(const ArrayParam&);
+    ArrayParam& operator=(const ArrayParam&);
+
+    std::vector<StorageType> _vector;
+
+    void writesvg(SVGOStringStream &str, std::vector<StorageType> const &vector) const {
+        for (unsigned int i = 0; i < vector.size(); ++i) {
+            if (i != 0) {
+                // separate items with pipe symbol
+                str << " | ";
+            }
+            str << vector[i];
+        }
+    }
+
+    StorageType readsvg(const gchar * str);
+};
+
+
+} //namespace LivePathEffect
+
+} //namespace Inkscape
+
+#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 :
index aac3dfa69063b22d02eb7387fa6736f380d7db76..71bd5673dc797e7720e93279d902b95c5137c025 100644 (file)
@@ -60,7 +60,8 @@ public:
     virtual Glib::ustring * param_getTooltip() { return &param_tooltip; };
 
     // overload these for your particular parameter to make it provide knotholder handles or canvas helperpaths
-    virtual void addKnotHolderEntities(KnotHolder */*knotholder*/, SPDesktop */*desktop*/, SPItem */*item*/) {}
+    virtual bool providesKnotHolderEntities() { return false; }
+    virtual void addKnotHolderEntities(KnotHolder */*knotholder*/, SPDesktop */*desktop*/, SPItem */*item*/) {};
     virtual void addCanvasIndicators(SPLPEItem */*lpeitem*/, std::vector<Geom::PathVector> &/*hp_vec*/) {};
 
     virtual void param_editOncanvas(SPItem * /*item*/, SPDesktop * /*dt*/) {};
index 5d541eff8137bc445ebe269abcfa1031ede8e318..057cc424ba11590d8c8988c27c645f58bddb801b 100644 (file)
@@ -7,7 +7,6 @@
  */
 
 #include "live_effects/parameter/point.h"
-#include "live_effects/parameter/pointparam-knotholder.h"
 #include "live_effects/effect.h"
 #include "svg/svg.h"
 #include "svg/stringstream.h"
index ca440c1fce1f8a3772d6b77af914c17ce3e5a2bb..ec61fcd88319d1b9564b942d07eba5ed7f834d11 100644 (file)
@@ -49,14 +49,13 @@ public:
 
     void set_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color);
 
+    virtual bool providesKnotHolderEntities() { return true; }
     virtual void addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item);
 
 private:
     PointParam(const PointParam&);
     PointParam& operator=(const PointParam&);
 
-    void on_button_click();
-
     Geom::Point defvalue;
 
     SPKnotShapeType knot_shape;
diff --git a/src/live_effects/parameter/pointparam-knotholder.cpp b/src/live_effects/parameter/pointparam-knotholder.cpp
deleted file mode 100644 (file)
index b814f59..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-#define INKSCAPE_LPE_POINTPARAM_KNOTHOLDER_C
-
-/*
- * Container for PointParamKnotHolder visual handles
- *
- * Authors:
- *   Johan Engelen <goejendaagh@zonnet.nl>
- *
- * Copyright (C) 2008 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "live_effects/parameter/pointparam-knotholder.h"
-#include "live_effects/lpeobject.h"
-#include "document.h"
-#include "sp-shape.h"
-#include "knot.h"
-#include "knotholder.h"
-
-#include <glibmm/i18n.h>
-#include <2geom/point.h>
-#include <2geom/matrix.h>
-#include "svg/stringstream.h"
-#include "xml/repr.h"
-
-class SPDesktop;
-
-namespace Inkscape {
-
-static void pointparam_knot_clicked_handler (SPKnot *knot, guint state, PointParamKnotHolder *kh);
-static void pointparam_knot_moved_handler(SPKnot *knot, Geom::Point const *p, guint state, PointParamKnotHolder *kh);
-static void pointparam_knot_ungrabbed_handler (SPKnot *knot, unsigned int state, PointParamKnotHolder *kh);
-
-PointParamKnotHolder::PointParamKnotHolder(SPDesktop *desktop, SPObject *lpeobject, const gchar * key, SPItem *item)
-{
-    if (!desktop || !item || !SP_IS_ITEM(item)) {
-        g_print ("Error! Throw an exception, please!\n");
-    }
-
-    this->desktop = desktop;
-    this->item = item;
-    this->lpeobject = LIVEPATHEFFECT(lpeobject);
-    g_object_ref(G_OBJECT(item));
-    g_object_ref(G_OBJECT(lpeobject));
-
-    this->released = NULL;
-
-    this->repr = lpeobject->repr;
-    this->repr_key = key;
-
-    this->local_change = FALSE;
-}
-
-PointParamKnotHolder::~PointParamKnotHolder()
-{
-    g_object_unref(G_OBJECT(this->item));
-    g_object_unref(G_OBJECT(this->lpeobject));
-}
-
-class KnotHolderEntityPointParam : public LPEKnotHolderEntity {
-public:
-    virtual Geom::Point knot_get();
-    virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, guint state);
-};
-
-Geom::Point
-KnotHolderEntityPointParam::knot_get() {
-    return Geom::Point(0,0);
-}
-
-void
-KnotHolderEntityPointParam::knot_set(Geom::Point const &/*p*/, Geom::Point const &/*origin*/, guint /*state*/) {
-}
-
-void
-PointParamKnotHolder::add_knot (
-    Geom::Point         & p,
-// TODO: check if knot_click being ignored is bad:
-    PointParamKnotHolderClickedFunc /*knot_click*/,
-    SPKnotShapeType     shape,
-    SPKnotModeType      mode,
-    guint32             color,
-    const gchar *tip )
-{
-    /* create new SPKnotHolderEntry */
-    KnotHolderEntity *e = new KnotHolderEntityPointParam();
-    e->create(this->desktop, this->item, this, tip, shape, mode, color);
-
-    entity.push_back(e);
-
-    // Move to current point.
-    Geom::Point dp = p * sp_item_i2d_affine(item);
-    sp_knot_set_position(e->knot, dp, SP_KNOT_STATE_NORMAL);
-
-    e->handler_id = g_signal_connect(e->knot, "moved", G_CALLBACK(pointparam_knot_moved_handler), this);
-    e->_click_handler_id = g_signal_connect(e->knot, "clicked", G_CALLBACK(pointparam_knot_clicked_handler), this);
-    e->_ungrab_handler_id = g_signal_connect(e->knot, "ungrabbed", G_CALLBACK(pointparam_knot_ungrabbed_handler), this);
-
-    sp_knot_show(e->knot);
-}
-
-static void pointparam_knot_clicked_handler(SPKnot */*knot*/, guint /*state*/, PointParamKnotHolder */*kh*/)
-{
-
-}
-
-/**
- * \param p In desktop coordinates.
- *  This function does not write to XML, but tries to write directly to the PointParam to quickly live update the effect
- */
-static void pointparam_knot_moved_handler(SPKnot */*knot*/, Geom::Point const *p, guint /*state*/, PointParamKnotHolder *kh)
-{
-    Geom::Matrix const i2d(sp_item_i2d_affine(kh->getItem()));
-    Geom::Point pos = (*p) * i2d.inverse();
-
-    Inkscape::SVGOStringStream os;
-    os << pos;
-
-    // note: get_lpe() will always return a valid pointer?
-    kh->lpeobject->get_lpe()->setParameter(kh->repr_key, os.str().c_str());
-}
-
-static void pointparam_knot_ungrabbed_handler(SPKnot *knot, unsigned int /*state*/, PointParamKnotHolder *kh)
-{
-    Geom::Matrix const i2d(sp_item_i2d_affine(kh->getItem()));
-    Geom::Point pos = sp_knot_position(knot) * i2d.inverse();
-
-    Inkscape::SVGOStringStream os;
-    os << pos;
-
-    kh->repr->setAttribute(kh->repr_key , os.str().c_str());
-
-    sp_document_done(SP_OBJECT_DOCUMENT (kh->lpeobject), SP_VERB_CONTEXT_LPE, _("Change LPE point parameter"));
-}
-
-} // 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/live_effects/parameter/pointparam-knotholder.h b/src/live_effects/parameter/pointparam-knotholder.h
deleted file mode 100644 (file)
index f6dfdea..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef INKSCAPE_LPE_POINTPARAM_KNOTHOLDER_H
-#define INKSCAPE_LPE_POINTPARAM_KNOTHOLDER_H
-
-/*
- * PointParamKnotHolder - Hold SPKnot list and manage signals for LPE PointParam
- *
- * Author:
- *   Johan Engelen <goejendaagh@zonnet.nl>
- *
- * Copyright (C) 2008 Johan Engelen
- *
- * Released under GNU GPL
- *
- */
-
-#include "knotholder.h"
-#include <glib/gtypes.h>
-#include "knot-enums.h"
-#include "forward.h"
-#include "libnr/nr-forward.h"
-#include <2geom/point.h>
-#include "live_effects/lpeobject.h"
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-
-
-
-typedef void (* PointParamKnotHolderSetFunc) (SPItem *item, Geom::Point const &p, Geom::Point const &origin, guint state);
-typedef Geom::Point (* PointParamKnotHolderGetFunc) (SPItem *item);
-typedef void (* PointParamKnotHolderClickedFunc) (SPItem *item, guint state);
-
-class PointParamKnotHolder : public KnotHolder {
-public:
-    PointParamKnotHolder(SPDesktop *desktop, SPObject *lpeobject, const gchar * key, SPItem *item);
-    ~PointParamKnotHolder();
-
-    LivePathEffectObject * lpeobject;
-    Inkscape::XML::Node  * repr;
-    const gchar          * repr_key;
-
-    void add_knot ( Geom::Point         & p,
-                    PointParamKnotHolderClickedFunc knot_click,
-                    SPKnotShapeType     shape,
-                    SPKnotModeType      mode,
-                    guint32             color,
-                    const gchar *tip );
-};
-
-} // namespace Inkscape
-
-
-#endif /* INKSCAPE_LPE_POINTPARAM_KNOTHOLDER_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 :
index 90d9ebff98a66069e13540a2f66a632d8b4a135b..9a68334fdc9a0d0410e52b7704d53fef0a782358 100644 (file)
  */
 
 #include "live_effects/parameter/vector.h"
-
+#include "sp-lpe-item.h"
+#include "knotholder.h"
 #include "svg/svg.h"
 #include "svg/stringstream.h"
+#include <gtkmm.h>
 
-#include <2geom/coord.h>
+// needed for on-canvas editting:
+class SPDesktop;
 
 namespace Inkscape {
 
 namespace LivePathEffect {
 
-template <>
-double
-VectorParam<double>::readsvg(const gchar * str)
+VectorParam::VectorParam( const Glib::ustring& label, const Glib::ustring& tip,
+                        const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
+                        Effect* effect, Geom::Point default_vector)
+    : Parameter(label, tip, key, wr, effect),
+      defvalue(default_vector),
+      origin(0.,0.),
+      vector(default_vector)
+{
+    vec_knot_shape = SP_KNOT_SHAPE_DIAMOND;
+    vec_knot_mode  = SP_KNOT_MODE_XOR;
+    vec_knot_color = 0xffffb500;
+    ori_knot_shape = SP_KNOT_SHAPE_CIRCLE;
+    ori_knot_mode  = SP_KNOT_MODE_XOR;
+    ori_knot_color = 0xffffb500;
+}
+
+VectorParam::~VectorParam()
+{
+
+}
+
+void
+VectorParam::param_set_default()
+{
+    setOrigin(Geom::Point(0.,0.));
+    setVector(defvalue);
+}
+
+bool
+VectorParam::param_readSVGValue(const gchar * strvalue)
+{
+    gchar ** strarray = g_strsplit(strvalue, ",", 4);
+    double val[4];
+    unsigned int i = 0;
+    while (strarray[i] && i < 4) {
+        if (sp_svg_number_read_d(strarray[i], &val[i]) != 0) {
+            i++;
+        } else {
+            break;
+        }
+    }
+    g_strfreev (strarray);
+    if (i == 4) {
+        setOrigin( Geom::Point(val[0], val[1]) );
+        setVector( Geom::Point(val[2], val[3]) );
+        return true;
+    }
+    return false;
+}
+
+gchar *
+VectorParam::param_getSVGValue() const
+{
+    Inkscape::SVGOStringStream os;
+    os << origin << " , " << vector;
+    gchar * str = g_strdup(os.str().c_str());
+    return str;
+}
+
+Gtk::Widget *
+VectorParam::param_newWidget(Gtk::Tooltips * /*tooltips*/)
+{
+/*
+    Inkscape::UI::Widget::RegisteredTransformedPoint * pointwdg = Gtk::manage(
+        new Inkscape::UI::Widget::RegisteredTransformedPoint( param_label,
+                                                              param_tooltip,
+                                                              param_key,
+                                                              *param_wr,
+                                                              param_effect->getRepr(),
+                                                              param_effect->getSPDoc() ) );
+    // TODO: fix to get correct desktop (don't use SP_ACTIVE_DESKTOP)
+    SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+    Geom::Matrix transf = desktop->doc2dt();
+    pointwdg->setTransform(transf);
+    pointwdg->setValue( *this );
+    pointwdg->clearProgrammatically();
+    pointwdg->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change point parameter"));
+
+    Gtk::HBox * hbox = Gtk::manage( new Gtk::HBox() );
+    static_cast<Gtk::HBox*>(hbox)->pack_start(*pointwdg, true, true);
+    static_cast<Gtk::HBox*>(hbox)->show_all_children();
+
+    return dynamic_cast<Gtk::Widget *> (hbox);
+    */ return NULL;
+}
+
+void
+VectorParam::set_and_write_new_values(Geom::Point const &new_origin, Geom::Point const &new_vector)
+{
+    setValues(new_origin, new_vector);
+    gchar * str = param_getSVGValue();
+    param_write_to_repr(str);
+    g_free(str);
+}
+
+void
+VectorParam::param_transform_multiply(Geom::Matrix const& postmul, bool /*set*/)
+{
+    set_and_write_new_values( origin * postmul, vector * postmul );
+}
+
+
+void
+VectorParam::set_vector_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color)
 {
-    double newx = Geom::infinity();
-    sp_svg_number_read_d(str, &newx);
-    return newx;
+    vec_knot_shape = shape;
+    vec_knot_mode  = mode;
+    vec_knot_color = color;
 }
 
-template <>
-float
-VectorParam<float>::readsvg(const gchar * str)
+void
+VectorParam::set_origin_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color)
 {
-    float newx = Geom::infinity();
-    sp_svg_number_read_f(str, &newx);
-    return newx;
+    ori_knot_shape = shape;
+    ori_knot_mode  = mode;
+    ori_knot_color = color;
+}
+
+class VectorParamKnotHolderEntity_Origin : public LPEKnotHolderEntity {
+public:
+    VectorParamKnotHolderEntity_Origin(VectorParam *p) : param(p) { }
+    virtual ~VectorParamKnotHolderEntity_Origin() {}
+
+    virtual void knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, guint /*state*/) {
+        Geom::Point const s = snap_knot_position(p);
+        param->setOrigin(s);
+        sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false);
+    };
+    virtual Geom::Point knot_get(){
+        return param->origin;
+    };
+    virtual void knot_click(guint /*state*/){
+        g_print ("This is the origin handle associated to parameter '%s'\n", param->param_key.c_str());
+    };
+
+private:
+    VectorParam *param;
+};
+
+class VectorParamKnotHolderEntity_Vector : public LPEKnotHolderEntity {
+public:
+    VectorParamKnotHolderEntity_Vector(VectorParam *p) : param(p) { }
+    virtual ~VectorParamKnotHolderEntity_Vector() {}
+
+    virtual void knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, guint state) {
+        Geom::Point const s = p - param->origin;
+        /// @todo implement angle snapping when holding CTRL
+        param->setVector(s);
+        sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false);
+    };
+    virtual Geom::Point knot_get(){
+        return param->origin + param->vector;
+    };
+    virtual void knot_click(guint /*state*/){
+        g_print ("This is the vector handle associated to parameter '%s'\n", param->param_key.c_str());
+    };
+
+private:
+    VectorParam *param;
+};
+
+void
+VectorParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item)
+{
+    VectorParamKnotHolderEntity_Origin *origin_e = new VectorParamKnotHolderEntity_Origin(this);
+    origin_e->create(desktop, item, knotholder, handleTip(), ori_knot_shape, ori_knot_mode, ori_knot_color);
+    knotholder->add(origin_e);
+
+    VectorParamKnotHolderEntity_Vector *vector_e = new VectorParamKnotHolderEntity_Vector(this);
+    vector_e->create(desktop, item, knotholder, handleTip(), vec_knot_shape, vec_knot_mode, vec_knot_color);
+    knotholder->add(vector_e);
 }
 
 } /* namespace LivePathEffect */
index 0b65fea143c4e161be3742237fd3227ccc7997ba..a4c29d3174f671ff7fc1ab25812ad4a81c54df53 100644 (file)
@@ -4,27 +4,25 @@
 /*
  * Inkscape::LivePathEffectParameters
  *
-* Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>
+ * Copyright (C) Johan Engelen 2008 <j.b.c.engelen@utwente.nl>
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
-#include <vector>
-
 #include <glib/gtypes.h>
+#include <2geom/point.h>
 
 #include <gtkmm/tooltips.h>
 
 #include "live_effects/parameter/parameter.h"
 
-#include "svg/svg.h"
-#include "svg/stringstream.h"
+#include "knot-holder-entity.h"
 
 namespace Inkscape {
 
 namespace LivePathEffect {
 
-template <typename StorageType>
+
 class VectorParam : public Parameter {
 public:
     VectorParam( const Glib::ustring& label,
@@ -32,76 +30,51 @@ public:
                 const Glib::ustring& key,
                 Inkscape::UI::Widget::Registry* wr,
                 Effect* effect,
-                size_t n = 0 )
-        : Parameter(label, tip, key, wr, effect), _vector(n)
-    {
-
-    }
-
-    virtual ~VectorParam() {
-
-    };
-
-    std::vector<StorageType> const & data() const {
-        return _vector;
-    }
-
-    virtual Gtk::Widget * param_newWidget(Gtk::Tooltips * /*tooltips*/) {
-        return NULL;
-    }
-
-    virtual bool param_readSVGValue(const gchar * strvalue) {
-        _vector.clear();
-        gchar ** strarray = g_strsplit(strvalue, "|", 0);
-        gchar ** iter = strarray;
-        while (*iter != NULL) {
-            _vector.push_back( readsvg(*iter) );
-            iter++;
-        }
-        g_strfreev (strarray);
-        return true;
-    }
-
-    virtual gchar * param_getSVGValue() const {
-        Inkscape::SVGOStringStream os;
-        writesvg(os, _vector);
-        gchar * str = g_strdup(os.str().c_str());
-        return str;
-    }
-
-    void param_setValue(std::vector<StorageType> const &new_vector) {
-        _vector = new_vector;
-    }
-
-    void param_set_default() {
-        param_setValue( std::vector<StorageType>() );
-    }
-
-    void param_set_and_write_new_value(std::vector<StorageType> const &new_vector) {
-        Inkscape::SVGOStringStream os;
-        writesvg(os, new_vector);
-        gchar * str = g_strdup(os.str().c_str());
-        param_write_to_repr(str);
-        g_free(str);
-    }
+                Geom::Point default_vector = Geom::Point(1,0) );
+    virtual ~VectorParam();
+
+    virtual Gtk::Widget * param_newWidget(Gtk::Tooltips * tooltips);
+    inline const gchar *handleTip() const { return param_tooltip.c_str(); }
+
+    virtual bool param_readSVGValue(const gchar * strvalue);
+    virtual gchar * param_getSVGValue() const;
+
+    Geom::Point getVector() const { return vector; };
+    Geom::Point getOrigin() const { return origin; };
+    void setValues(Geom::Point const &new_origin, Geom::Point const &new_vector) { setVector(new_vector); setOrigin(new_origin); };
+    void setVector(Geom::Point const &new_vector) { vector = new_vector; };
+    void setOrigin(Geom::Point const &new_origin) { origin = new_origin; };
+    virtual void param_set_default();
+
+    void set_and_write_new_values(Geom::Point const &new_origin, Geom::Point const &new_vector);
+
+    virtual void param_transform_multiply(Geom::Matrix const &postmul, bool set);
+
+    void set_vector_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color);
+    void set_origin_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color);
+
+    virtual bool providesKnotHolderEntities() { return true; }
+    virtual void addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item);
 
 private:
     VectorParam(const VectorParam&);
     VectorParam& operator=(const VectorParam&);
 
-    std::vector<StorageType> _vector;
+    Geom::Point defvalue;
 
-    void writesvg(SVGOStringStream &str, std::vector<StorageType> const &vector) const {
-        for (unsigned int i = 0; i < vector.size(); ++i) {
-            if (i != 0) {
-                // separate items with pipe symbol
-                str << " | ";
-            }
-            str << vector[i];
-        }
-    }
+    Geom::Point origin;
+    Geom::Point vector;
 
-    StorageType readsvg(const gchar * str);
+    /// The looks of the vector and origin knots oncanvas
+    SPKnotShapeType vec_knot_shape;
+    SPKnotModeType  vec_knot_mode;
+    guint32         vec_knot_color;
+    SPKnotShapeType ori_knot_shape;
+    SPKnotModeType  ori_knot_mode;
+    guint32         ori_knot_color;
+
+    friend class VectorParamKnotHolderEntity_Origin;
+    friend class VectorParamKnotHolderEntity_Vector;
 };
 
 
@@ -110,14 +83,3 @@ private:
 } //namespace Inkscape
 
 #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 :
index 8439f7086871b9f2945d180c9c18f6bc81998f6f..5c6575ccaed70ce19a6e3f59707509d8002fad5b 100644 (file)
@@ -203,9 +203,10 @@ sp_lpetool_context_selection_changed(Inkscape::Selection *selection, gpointer da
 static void
 sp_lpetool_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
 {
-    // FIXME: how to set this correcly? the value from preferences-skeleton.h doesn't seem to get
-    // read (it wants to set drag = 1)
-    // lpetool_parent_class->set(ec, key, "drag");
+    if (val->getEntryName() == "mode") {
+        Inkscape::Preferences::get()->setString("/tools/geometric/mode", "drag");
+        SP_PEN_CONTEXT(ec)->mode = SP_PEN_CONTEXT_MODE_DRAG;
+    }
 
     /*
     //pass on up to parent class to handle common attributes.
index 5e1e6f64b357ce62f7ce185c6798f7aceefe6919..af896d7d6b912d703999a7e402dab1846f28ef5f 100644 (file)
@@ -82,6 +82,7 @@
 #include "debug/log-display-config.h"
 
 #include "helper/png-write.h"
+#include "helper/geom.h"
 
 #include <extension/extension.h>
 #include <extension/system.h>
@@ -1056,7 +1057,7 @@ do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gch
         SPItem *item = ((SPItem *) o);
 
         // "true" SVG bbox for scripting
-        boost::optional<Geom::Rect> area = item->getBounds(sp_item_i2doc_affine(item));
+        Geom::OptRect area = item->getBounds(sp_item_i2doc_affine(item));
         if (area) {
             Inkscape::SVGOStringStream os;
             if (extent) {
@@ -1089,7 +1090,7 @@ do_query_all_recurse (SPObject *o)
 {
     SPItem *item = ((SPItem *) o);
     if (o->id && SP_IS_ITEM(item)) {
-        boost::optional<Geom::Rect> area = item->getBounds(sp_item_i2doc_affine(item));
+        Geom::OptRect area = item->getBounds(sp_item_i2doc_affine(item));
         if (area) {
             Inkscape::SVGOStringStream os;
             os << o->id;
@@ -1121,7 +1122,7 @@ sp_do_export_png(SPDocument *doc)
 
     GSList *items = NULL;
 
-    NRRect area;
+    Geom::Rect area;
     if (sp_export_id || sp_export_area_drawing) {
 
         SPObject *o = NULL;
@@ -1181,10 +1182,10 @@ sp_do_export_png(SPDocument *doc)
 
             // write object bbox to area
             sp_document_ensure_up_to_date (doc);
-            boost::optional<Geom::Rect> areaMaybe;
+            Geom::OptRect areaMaybe;
             sp_item_invoke_bbox((SPItem *) o_area, areaMaybe, sp_item_i2r_affine((SPItem *) o_area), TRUE);
             if (areaMaybe) {
-                area = NRRect(areaMaybe);
+                area = *areaMaybe;
             } else {
                 g_warning("Unable to determine a valid bounding box. Nothing exported.");
                 return;
@@ -1197,21 +1198,17 @@ sp_do_export_png(SPDocument *doc)
 
     if (sp_export_area) {
         /* Try to parse area (given in SVG pixels) */
-        if (!sscanf(sp_export_area, "%lg:%lg:%lg:%lg", &area.x0, &area.y0, &area.x1, &area.y1) == 4) {
+        gdouble x0,y0,x1,y1;
+        if (!sscanf(sp_export_area, "%lg:%lg:%lg:%lg", &x0, &y0, &x1, &y1) == 4) {
             g_warning("Cannot parse export area '%s'; use 'x0:y0:x1:y1'. Nothing exported.", sp_export_area);
             return;
         }
-        if ((area.x0 >= area.x1) || (area.y0 >= area.y1)) {
-            g_warning("Export area '%s' has negative width or height. Nothing exported.", sp_export_area);
-            return;
-        }
+        area = Geom::Rect(Geom::Interval(x0,x1), Geom::Interval(y0,y1));
     } else if (sp_export_area_canvas || !(sp_export_id || sp_export_area_drawing)) {
         /* Export the whole canvas */
         sp_document_ensure_up_to_date (doc);
-        area.x0 = SP_ROOT(doc->root)->x.computed;
-        area.y0 = SP_ROOT(doc->root)->y.computed;
-        area.x1 = area.x0 + sp_document_width (doc);
-        area.y1 = area.y0 + sp_document_height (doc);
+        Geom::Point origin (SP_ROOT(doc->root)->x.computed, SP_ROOT(doc->root)->y.computed);
+        area = Geom::Rect(origin, origin + sp_document_dimensions(doc));
     }
 
     // set filename and dpi from options, if not yet set from the hints
@@ -1233,10 +1230,7 @@ sp_do_export_png(SPDocument *doc)
     }
 
     if (sp_export_area_snap) {
-        area.x0 = std::floor (area.x0);
-        area.y0 = std::floor (area.y0);
-        area.x1 = std::ceil (area.x1);
-        area.y1 = std::ceil (area.y1);
+        round_rectangle_outwards(area);
     }
 
     // default dpi
@@ -1254,7 +1248,7 @@ sp_do_export_png(SPDocument *doc)
             g_warning("Export width %lu out of range (1 - %lu). Nothing exported.", width, (unsigned long int)PNG_UINT_31_MAX);
             return;
         }
-        dpi = (gdouble) width * PX_PER_IN / (area.x1 - area.x0);
+        dpi = (gdouble) width * PX_PER_IN / area.width();
     }
 
     if (sp_export_height) {
@@ -1264,15 +1258,15 @@ sp_do_export_png(SPDocument *doc)
             g_warning("Export height %lu out of range (1 - %lu). Nothing exported.", height, (unsigned long int)PNG_UINT_31_MAX);
             return;
         }
-        dpi = (gdouble) height * PX_PER_IN / (area.y1 - area.y0);
+        dpi = (gdouble) height * PX_PER_IN / area.height();
     }
 
     if (!sp_export_width) {
-        width = (unsigned long int) ((area.x1 - area.x0) * dpi / PX_PER_IN + 0.5);
+        width = (unsigned long int) (area.width() * dpi / PX_PER_IN + 0.5);
     }
 
     if (!sp_export_height) {
-        height = (unsigned long int) ((area.y1 - area.y0) * dpi / PX_PER_IN + 0.5);
+        height = (unsigned long int) (area.height() * dpi / PX_PER_IN + 0.5);
     }
 
     guint32 bgcolor = 0x00000000;
@@ -1307,12 +1301,12 @@ sp_do_export_png(SPDocument *doc)
 
     g_print("Background RRGGBBAA: %08x\n", bgcolor);
 
-    g_print("Area %g:%g:%g:%g exported to %lu x %lu pixels (%g dpi)\n", area.x0, area.y0, area.x1, area.y1, width, height, dpi);
+    g_print("Area %g:%g:%g:%g exported to %lu x %lu pixels (%g dpi)\n", area[Geom::X][0], area[Geom::Y][0], area[Geom::X][1], area[Geom::Y][1], width, height, dpi);
 
     g_print("Bitmap saved as: %s\n", filename);
 
     if ((width >= 1) && (height >= 1) && (width <= PNG_UINT_31_MAX) && (height <= PNG_UINT_31_MAX)) {
-        sp_export_png_file(doc, filename, area.x0, area.y0, area.x1, area.y1, width, height, dpi, dpi, bgcolor, NULL, NULL, true, sp_export_id_only ? items : NULL);
+        sp_export_png_file(doc, filename, area, width, height, dpi, dpi, bgcolor, NULL, NULL, true, sp_export_id_only ? items : NULL);
     } else {
         g_warning("Calculated bitmap dimensions %lu %lu are out of range (1 - %lu). Nothing exported.", width, height, (unsigned long int)PNG_UINT_31_MAX);
     }
index 9ff7257cef1646c91c8226a69cf1e7f8858c5a49..c6c639631aa051de6d7d6edbfed98517b91c8a30 100644 (file)
@@ -444,7 +444,7 @@ sp_node_context_root_handler(SPEventContext *event_context, GdkEvent *event)
             if (event->type == GDK_BUTTON_RELEASE) {
                 event_context->xp = event_context->yp = 0;
                 if (event->button.button == 1) {
-                    boost::optional<Geom::Rect> b = Inkscape::Rubberband::get(desktop)->getRectangle();
+                    Geom::OptRect b = Inkscape::Rubberband::get(desktop)->getRectangle();
 
                     if (nc->shape_editor->hits_curve() && !event_context->within_tolerance) { //drag curve
                         nc->shape_editor->finish_drag();
@@ -634,7 +634,7 @@ sp_node_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                     break;
                 case GDK_Escape:
                 {
-                    boost::optional<Geom::Rect> const b = Inkscape::Rubberband::get(desktop)->getRectangle();
+                    Geom::OptRect const b = Inkscape::Rubberband::get(desktop)->getRectangle();
                     if (b) {
                         Inkscape::Rubberband::get(desktop)->stop();
                         nc->current_state = SP_NODE_CONTEXT_INACTIVE;
index 3481f6ed2cc0ac21afb3705954112d5e0ee09125..34c850d086099b87a8bf33c85226ebc46ef18de8 100644 (file)
@@ -126,14 +126,14 @@ static void sp_node_adjust_handles_auto(Inkscape::NodePath::Node *node);
 static void node_clicked(SPKnot *knot, guint state, gpointer data);
 static void node_grabbed(SPKnot *knot, guint state, gpointer data);
 static void node_ungrabbed(SPKnot *knot, guint state, gpointer data);
-static gboolean node_request(SPKnot *knot, Geom::Point *p, guint state, gpointer data);
+static gboolean node_request(SPKnot *knot, Geom::Point const &p, guint state, gpointer data);
 
 /* Handle event callbacks */
 static void node_handle_clicked(SPKnot *knot, guint state, gpointer data);
 static void node_handle_grabbed(SPKnot *knot, guint state, gpointer data);
 static void node_handle_ungrabbed(SPKnot *knot, guint state, gpointer data);
-static gboolean node_handle_request(SPKnot *knot, Geom::Point *p, guint state, gpointer data);
-static void node_handle_moved(SPKnot *knot, Geom::Point *p, guint state, gpointer data);
+static gboolean node_handle_request(SPKnot *knot, Geom::Point const &p, guint state, gpointer data);
+static void node_handle_moved(SPKnot *knot, Geom::Point const &p, guint state, gpointer data);
 static gboolean node_handle_event(SPKnot *knot, GdkEvent *event, Inkscape::NodePath::Node *n);
 
 /* Constructors and destructors */
@@ -181,7 +181,7 @@ canvasitem_from_pathvec(Inkscape::NodePath::Path *np, Geom::PathVector const &pa
 
 static void
 sp_nodepath_create_helperpaths(Inkscape::NodePath::Path *np) {
-    //std::map<Inkscape::LivePathEffect::Effect *, std::vector<SPCanvasItem *> >* helper_path_vec;
+    //std::map<Inkscape::LivePathEffect::Effect *, std::vector<SPCanvasItem *> > helper_path_vec;
     if (!SP_IS_LPE_ITEM(np->item)) {
         g_print ("Only LPEItems can have helperpaths!\n");
         return;
@@ -196,7 +196,7 @@ sp_nodepath_create_helperpaths(Inkscape::NodePath::Path *np) {
             // create new canvas items from the effect's helper paths
             std::vector<Geom::PathVector> hpaths = lpe->getHelperPaths(lpeitem);
             for (std::vector<Geom::PathVector>::iterator j = hpaths.begin(); j != hpaths.end(); ++j) {
-                (*np->helper_path_vec)[lpe].push_back(canvasitem_from_pathvec(np, *j, true));
+                np->helper_path_vec[lpe].push_back(canvasitem_from_pathvec(np, *j, true));
             }
         }
     }
@@ -204,7 +204,7 @@ sp_nodepath_create_helperpaths(Inkscape::NodePath::Path *np) {
 
 void
 sp_nodepath_update_helperpaths(Inkscape::NodePath::Path *np) {
-    //std::map<Inkscape::LivePathEffect::Effect *, std::vector<SPCanvasItem *> >* helper_path_vec;
+    //std::map<Inkscape::LivePathEffect::Effect *, std::vector<SPCanvasItem *> > helper_path_vec;
     if (!SP_IS_LPE_ITEM(np->item)) {
         g_print ("Only LPEItems can have helperpaths!\n");
         return;
@@ -223,7 +223,7 @@ sp_nodepath_update_helperpaths(Inkscape::NodePath::Path *np) {
             for (unsigned int j = 0; j < hpaths.size(); ++j) {
                 SPCurve *curve = new SPCurve(hpaths[j]);
                 curve->transform(np->i2d);
-                sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(((*np->helper_path_vec)[lpe])[j]), curve);
+                sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH((np->helper_path_vec[lpe])[j]), curve);
                 curve = curve->unref();
             }
         }
@@ -232,18 +232,21 @@ sp_nodepath_update_helperpaths(Inkscape::NodePath::Path *np) {
 
 static void
 sp_nodepath_destroy_helperpaths(Inkscape::NodePath::Path *np) {
-    for (HelperPathList::iterator i = np->helper_path_vec->begin(); i != np->helper_path_vec->end(); ++i) {
+    for (HelperPathList::iterator i = np->helper_path_vec.begin(); i != np->helper_path_vec.end(); ++i) {
         for (std::vector<SPCanvasItem *>::iterator j = (*i).second.begin(); j != (*i).second.end(); ++j) {
             GtkObject *temp = *j;
             *j = NULL;
             gtk_object_destroy(temp);
         }
     }
+    np->helper_path_vec.clear();
 }
 
 
 /**
  * \brief Creates new nodepath from item
+ *
+ * \todo create proper constructor for nodepath::path, this method returns null a constructor cannot so this cannot be simply converted to constructor.
  */
 Inkscape::NodePath::Path *sp_nodepath_new(SPDesktop *desktop, SPObject *object, bool show_handles, const char * repr_key_in, SPItem *item)
 {
@@ -278,7 +281,7 @@ Inkscape::NodePath::Path *sp_nodepath_new(SPDesktop *desktop, SPObject *object,
     }
 
     //Create new nodepath
-    Inkscape::NodePath::Path *np = g_new(Inkscape::NodePath::Path, 1);
+    Inkscape::NodePath::Path *np = new Inkscape::NodePath::Path();
     if (!np) {
         curve->unref();
         return NULL;
@@ -295,7 +298,6 @@ Inkscape::NodePath::Path *sp_nodepath_new(SPDesktop *desktop, SPObject *object,
     np->local_change = 0;
     np->show_handles = show_handles;
     np->helper_path = NULL;
-    np->helper_path_vec = new HelperPathList;
     np->helperpath_rgba = prefs->getInt("/tools/nodes/highlight_color", 0xff0000ff);
     np->helperpath_width = 1.0;
     np->curve = curve->copy();
@@ -328,7 +330,7 @@ Inkscape::NodePath::Path *sp_nodepath_new(SPDesktop *desktop, SPObject *object,
         Inkscape::LivePathEffect::Effect * lpe = LIVEPATHEFFECT(object)->get_lpe();
         if (!lpe) {
             g_error("sp_nodepath_new: lpeobject without real lpe passed as argument!");
-            sp_nodepath_destroy(np);
+            delete np;
         }
         Inkscape::LivePathEffect::Parameter *lpeparam = lpe->getParameter(repr_key_in);
         if (lpeparam) {
@@ -383,48 +385,39 @@ Inkscape::NodePath::Path *sp_nodepath_new(SPDesktop *desktop, SPObject *object,
 /**
  * Destroys nodepath's subpaths, then itself, also tell parent ShapeEditor about it.
  */
-void sp_nodepath_destroy(Inkscape::NodePath::Path *np) {
-
-    if (!np) {  //soft fail, like delete
-        return;
-    }
-
-    while (np->subpaths) {
-        sp_nodepath_subpath_destroy((Inkscape::NodePath::SubPath *) np->subpaths->data);
+Inkscape::NodePath::Path::~Path() {
+    while (this->subpaths) {
+        sp_nodepath_subpath_destroy((Inkscape::NodePath::SubPath *) this->subpaths->data);
     }
 
     //Inform the ShapeEditor that made me, if any, that I am gone.
-    if (np->shape_editor)
-        np->shape_editor->nodepath_destroyed();
+    if (this->shape_editor)
+        this->shape_editor->nodepath_destroyed();
 
-    g_assert(!np->selected);
+    g_assert(!this->selected);
 
-    if (np->helper_path) {
-        GtkObject *temp = np->helper_path;
-        np->helper_path = NULL;
+    if (this->helper_path) {
+        GtkObject *temp = this->helper_path;
+        this->helper_path = NULL;
         gtk_object_destroy(temp);
     }
-    if (np->curve) {
-        np->curve->unref();
-        np->curve = NULL;
+    if (this->curve) {
+        this->curve->unref();
+        this->curve = NULL;
     }
 
-    if (np->repr_key) {
-        g_free(np->repr_key);
-        np->repr_key = NULL;
+    if (this->repr_key) {
+        g_free(this->repr_key);
+        this->repr_key = NULL;
     }
-    if (np->repr_nodetypes_key) {
-        g_free(np->repr_nodetypes_key);
-        np->repr_nodetypes_key = NULL;
+    if (this->repr_nodetypes_key) {
+        g_free(this->repr_nodetypes_key);
+        this->repr_nodetypes_key = NULL;
     }
 
-    sp_nodepath_destroy_helperpaths(np);
-    delete np->helper_path_vec;
-    np->helper_path_vec = NULL;
-
-    np->desktop = NULL;
+    sp_nodepath_destroy_helperpaths(this);
 
-    g_free(np);
+    this->desktop = NULL;
 }
 
 /**
@@ -771,6 +764,9 @@ static SPCurve *create_curve(Inkscape::NodePath::Path *np)
        Inkscape::NodePath::Node *n = sp->first->n.other;
         while (n) {
             Geom::Point const end_pt = n->pos * np->d2i;
+            if (!IS_FINITE(n->pos[0]) || !IS_FINITE(n->pos[1])){
+                g_message("niet finite");
+            }
             switch (n->code) {
                 case NR_LINETO:
                     curve->lineto(end_pt);
@@ -2067,6 +2063,9 @@ sp_nodepath_add_node_near_point(Inkscape::NodePath::Path *nodepath, Geom::Point
 
     //find segment to split
     Inkscape::NodePath::Node *e = sp_nodepath_get_node_by_index(nodepath, segment_index);
+    if (!e) {
+        return;
+    }
 
     //don't know why but t seems to flip for lines
     if (sp_node_path_code_from_side(e, sp_node_get_side(e, -1)) == NR_LINETO) {
@@ -3609,7 +3608,7 @@ static double point_line_distance(Geom::Point *p, double a)
  * \todo fixme: This goes to "moved" event? (lauris)
  */
 static gboolean
-node_request(SPKnot */*knot*/, Geom::Point *p, guint state, gpointer data)
+node_request(SPKnot */*knot*/, Geom::Point const &p, guint state, gpointer data)
 {
     double yn, xn, yp, xp;
     double an, ap, na, pa;
@@ -3627,12 +3626,12 @@ node_request(SPKnot */*knot*/, Geom::Point *p, guint state, gpointer data)
          ( ((state & GDK_SHIFT_MASK) && ((n->n.other && n->n.pos == n->pos) || (n->p.other && n->p.pos == n->pos)))
            || n->dragging_out ) )
     {
-       Geom::Point mouse = (*p);
+       Geom::Point mouse = p;
 
        if (!n->dragging_out) {
            // This is the first drag-out event; find out which handle to drag out
-           double appr_n = (n->n.other ? Geom::L2(n->n.other->pos - n->pos) - Geom::L2(n->n.other->pos - (*p)) : -HUGE_VAL);
-           double appr_p = (n->p.other ? Geom::L2(n->p.other->pos - n->pos) - Geom::L2(n->p.other->pos - (*p)) : -HUGE_VAL);
+           double appr_n = (n->n.other ? Geom::L2(n->n.other->pos - n->pos) - Geom::L2(n->n.other->pos - p) : -HUGE_VAL);
+           double appr_p = (n->p.other ? Geom::L2(n->p.other->pos - n->pos) - Geom::L2(n->p.other->pos - p) : -HUGE_VAL);
 
            if (appr_p == -HUGE_VAL && appr_n == -HUGE_VAL) // orphan node?
                return FALSE;
@@ -3656,8 +3655,8 @@ node_request(SPKnot */*knot*/, Geom::Point *p, guint state, gpointer data)
                    opposite = &n->p;
                    n->n.other->code = NR_CURVETO;
                } else { // find out to which handle of the adjacent node we're closer; note that n->n.other == n->p.other
-                   double appr_other_n = (n->n.other ? Geom::L2(n->n.other->n.pos - n->pos) - Geom::L2(n->n.other->n.pos - (*p)) : -HUGE_VAL);
-                   double appr_other_p = (n->n.other ? Geom::L2(n->n.other->p.pos - n->pos) - Geom::L2(n->n.other->p.pos - (*p)) : -HUGE_VAL);
+                   double appr_other_n = (n->n.other ? Geom::L2(n->n.other->n.pos - n->pos) - Geom::L2(n->n.other->n.pos - p) : -HUGE_VAL);
+                   double appr_other_p = (n->n.other ? Geom::L2(n->n.other->p.pos - n->pos) - Geom::L2(n->n.other->p.pos - p) : -HUGE_VAL);
                    if (appr_other_p > appr_other_n) { // closer to other's p handle
                        n->dragging_out = &n->n;
                        opposite = &n->p;
@@ -3681,7 +3680,7 @@ node_request(SPKnot */*knot*/, Geom::Point *p, guint state, gpointer data)
        }
 
        // pass this on to the handle-moved callback
-       node_handle_moved(n->dragging_out->knot, &mouse, state, (gpointer) n);
+       node_handle_moved(n->dragging_out->knot, mouse, state, (gpointer) n);
        sp_node_update_handles(n);
        return TRUE;
    }
@@ -3744,7 +3743,7 @@ node_request(SPKnot */*knot*/, Geom::Point *p, guint state, gpointer data)
             if (ap == 0) pa = HUGE_VAL; else pa = -1/ap;
 
             // mouse point relative to the node's original pos
-            pr = (*p) - n->origin;
+            pr = p - n->origin;
 
             // distances to the four lines (two handles and two perpendiculars)
             d_an = point_line_distance(&pr, an);
@@ -3771,16 +3770,16 @@ node_request(SPKnot */*knot*/, Geom::Point *p, guint state, gpointer data)
 
         } else {  // constraining to hor/vert
 
-            if (fabs((*p)[Geom::X] - n->origin[Geom::X]) > fabs((*p)[Geom::Y] - n->origin[Geom::Y])) { // snap to hor
+            if (fabs(p[Geom::X] - n->origin[Geom::X]) > fabs(p[Geom::Y] - n->origin[Geom::Y])) { // snap to hor
                 sp_nodepath_selected_nodes_move(n->subpath->nodepath,
-                                                (*p)[Geom::X] - n->pos[Geom::X], 
+                                                p[Geom::X] - n->pos[Geom::X], 
                                                 n->origin[Geom::Y] - n->pos[Geom::Y],
                                                 true, 
                                                 true, Inkscape::Snapper::ConstraintLine(component_vectors[Geom::X]));
             } else { // snap to vert
                 sp_nodepath_selected_nodes_move(n->subpath->nodepath,
                                                 n->origin[Geom::X] - n->pos[Geom::X],
-                                                (*p)[Geom::Y] - n->pos[Geom::Y],
+                                                p[Geom::Y] - n->pos[Geom::Y],
                                                 true,
                                                 true, Inkscape::Snapper::ConstraintLine(component_vectors[Geom::Y]));
             }
@@ -3788,17 +3787,17 @@ node_request(SPKnot */*knot*/, Geom::Point *p, guint state, gpointer data)
     } else { // move freely
         if (n->is_dragging) {
             if (state & GDK_MOD1_MASK) { // sculpt
-                sp_nodepath_selected_nodes_sculpt(n->subpath->nodepath, n, (*p) - n->origin);
+                sp_nodepath_selected_nodes_sculpt(n->subpath->nodepath, n, p - n->origin);
             } else {
                 sp_nodepath_selected_nodes_move(n->subpath->nodepath,
-                                            (*p)[Geom::X] - n->pos[Geom::X],
-                                            (*p)[Geom::Y] - n->pos[Geom::Y],
+                                            p[Geom::X] - n->pos[Geom::X],
+                                            p[Geom::Y] - n->pos[Geom::Y],
                                             (state & GDK_SHIFT_MASK) == 0);
             }
         }
     }
 
-    n->subpath->nodepath->desktop->scroll_to_point(*p);
+    n->subpath->nodepath->desktop->scroll_to_point(p);
 
     return TRUE;
 }
@@ -3879,7 +3878,7 @@ static void node_handle_ungrabbed(SPKnot *knot, guint state, gpointer data)
 /**
  * Node handle "request" signal callback.
  */
-static gboolean node_handle_request(SPKnot *knot, Geom::Point *p, guint state, gpointer data)
+static gboolean node_handle_request(SPKnot *knot, Geom::Point const &p, guint state, gpointer data)
 {
     Inkscape::NodePath::Node *n = (Inkscape::NodePath::Node *) data;
 
@@ -3907,40 +3906,37 @@ static gboolean node_handle_request(SPKnot *knot, Geom::Point *p, guint state, g
     if ((state & GDK_SHIFT_MASK) != 0) {
        // We will not try to snap when the shift-key is pressed
        // so remove the old snap indicator and don't wait for it to time-out  
-       desktop->snapindicator->remove_snappoint();     
+       desktop->snapindicator->remove_snappoint();
     }
 
     Inkscape::NodePath::Node *othernode = opposite->other;
     if (othernode) {
         if ((n->type != Inkscape::NodePath::NODE_CUSP) && sp_node_side_is_line(n, opposite)) {
             /* We are smooth node adjacent with line */
-            Geom::Point const delta = *p - n->pos;
+            Geom::Point const delta = p - n->pos;
             Geom::Coord const len = Geom::L2(delta);
             Inkscape::NodePath::Node *othernode = opposite->other;
             Geom::Point const ndelta = n->pos - othernode->pos;
             Geom::Coord const linelen = Geom::L2(ndelta);
+            Geom::Point ptemp = p;
             if (len > NR_EPSILON && linelen > NR_EPSILON) {
                 Geom::Coord const scal = dot(delta, ndelta) / linelen;
-                (*p) = n->pos + (scal / linelen) * ndelta;
+                ptemp = n->pos + (scal / linelen) * ndelta;
             }
             if ((state & GDK_SHIFT_MASK) == 0) {
-               s = m.constrainedSnap(Inkscape::SnapPreferences::SNAPPOINT_NODE, to_2geom(*p), Inkscape::Snapper::ConstraintLine(*p, ndelta));
+                s = m.constrainedSnap(Inkscape::SnapPreferences::SNAPPOINT_NODE, ptemp, Inkscape::Snapper::ConstraintLine(ptemp, ndelta));
             }
         } else {
-               if ((state & GDK_SHIFT_MASK) == 0) {
-                       s = m.freeSnap(Inkscape::SnapPreferences::SNAPPOINT_NODE, to_2geom(*p));
-               }
+            if ((state & GDK_SHIFT_MASK) == 0) {
+                s = m.freeSnap(Inkscape::SnapPreferences::SNAPPOINT_NODE, p);
+            }
         }
     } else {
-       if ((state & GDK_SHIFT_MASK) == 0) {
-               s = m.freeSnap(Inkscape::SnapPreferences::SNAPPOINT_NODE, to_2geom(*p));
-       }
+        if ((state & GDK_SHIFT_MASK) == 0) {
+            s = m.freeSnap(Inkscape::SnapPreferences::SNAPPOINT_NODE, p);
+        }
     }
     
-    Geom::Point pt2g = *p;
-    s.getPoint(pt2g);
-    *p = pt2g;
-    
     sp_node_adjust_handle(n, -which);
 
     return FALSE;
@@ -3949,7 +3945,7 @@ static gboolean node_handle_request(SPKnot *knot, Geom::Point *p, guint state, g
 /**
  * Node handle moved callback.
  */
-static void node_handle_moved(SPKnot *knot, Geom::Point *p, guint state, gpointer data)
+static void node_handle_moved(SPKnot *knot, Geom::Point const &p, guint state, gpointer data)
 {
    Inkscape::NodePath::Node *n = (Inkscape::NodePath::Node *) data;
    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -3971,7 +3967,7 @@ static void node_handle_moved(SPKnot *knot, Geom::Point *p, guint state, gpointe
     // calculate radial coordinates of the grabbed handle, its other handle, and the mouse point
     Radial rme(me->pos - n->pos);
     Radial rother(other->pos - n->pos);
-    Radial rnew(*p - n->pos);
+    Radial rnew(p - n->pos);
 
     if (state & GDK_CONTROL_MASK && rnew.a != HUGE_VAL) {
         int const snaps = prefs->getInt("/options/rotationsnapsperpi/value", 12);
@@ -4362,8 +4358,18 @@ void sp_nodepath_selected_nodes_scale(Inkscape::NodePath::Path *nodepath, gdoubl
             box.expandTo (n->pos); // contain all selected nodes
         }
 
+        if ( Geom::are_near(box.maxExtent(), 0) ) {
+            SPEventContext *ec = nodepath->desktop->event_context;
+            if (!ec) return;
+            Inkscape::MessageContext *mc = get_message_context(ec);
+            if (!mc) return;
+            mc->setF(Inkscape::WARNING_MESSAGE,
+                             _("Cannot scale nodes when all are at the same location."));
+            return;
+        }
         double scale = (box.maxExtent() + grow)/box.maxExtent();
 
+
         Geom::Point scale_center;
         if (Inkscape::NodePath::Path::active_node == NULL)
             scale_center = box.midpoint();
@@ -4371,9 +4377,9 @@ void sp_nodepath_selected_nodes_scale(Inkscape::NodePath::Path *nodepath, gdoubl
             scale_center = Inkscape::NodePath::Path::active_node->pos;
 
         Geom::Matrix t =
-            Geom::Matrix (Geom::Translate(-scale_center)) *
-            Geom::Matrix (Geom::Scale(scale, scale)) *
-            Geom::Matrix (Geom::Translate(scale_center));
+            Geom::Translate(-scale_center) *
+            Geom::Scale(scale, scale) *
+            Geom::Translate(scale_center);
 
         for (GList *l = nodepath->selected; l != NULL; l = l->next) {
             Inkscape::NodePath::Node *n = (Inkscape::NodePath::Node *) l->data;
index 4d05b9f01b4e46ef456ab95fbe40bd9a13f4e02c..262b93d0434fe53a9dbe63841055ad0cd362a8be 100644 (file)
@@ -51,25 +51,25 @@ typedef std::map<Inkscape::LivePathEffect::Effect *, std::vector<SPCanvasItem *>
 class Radial{
  public:
 /**  Radius */
-       double r;
+    double r;
 /**  Amplitude */
-       double a;
-       Radial() {}
-       //      Radial(Geom::Point const &p); // Convert a point to radial coordinates
-       Radial(Radial &p) : r(p.r),a(p.a) {}
-       //      operator Geom::Point() const;
+    double a;
+    Radial() {}
+    // Radial(Geom::Point const &p); // Convert a point to radial coordinates
+    Radial(Radial &p) : r(p.r),a(p.a) {}
+    // operator Geom::Point() const;
 
 /**
  * Construct Radial from Geom::Point.
  */
 Radial(Geom::Point const &p)
 {
-       r = Geom::L2(p);
-       if (r > 0) {
-               a = Geom::atan2 (p);
-       } else {
-               a = HUGE_VAL; //undefined
-       }
+    r = Geom::L2(p);
+    if (r > 0) {
+        a = Geom::atan2 (p);
+    } else {
+        a = HUGE_VAL; //undefined
+    }
 }
 
 /**
@@ -77,11 +77,11 @@ Radial(Geom::Point const &p)
  */
 operator Geom::Point() const
 {
-       if (a == HUGE_VAL) {
-               return Geom::Point(0,0);
-       } else {
-               return r*Geom::Point(cos(a), sin(a));
-       }
+    if (a == HUGE_VAL) {
+        return Geom::Point(0,0);
+    } else {
+        return r*Geom::Point(cos(a), sin(a));
+    }
 }
 
 };
@@ -118,15 +118,15 @@ class Node;
 class SubPath {
  public:
 /**  The parent of this subpath */
-       Path * nodepath;
+    Path * nodepath;
 /**  Is this path closed (no endpoints) or not?*/
-       gboolean closed;
+    gboolean closed;
 /**  The nodes in this subpath. */
-       GList * nodes;
+    GList * nodes;
 /**  The first node of the subpath (does not imply open/closed)*/
-       Node * first;
+    Node * first;
 /**  The last node of the subpath */
-       Node * last;
+    Node * last;
 };
 
 
@@ -140,15 +140,15 @@ class SubPath {
  */
 typedef enum {
 /**  A normal node */
-       NODE_NONE,
+    NODE_NONE,
 /**  This node non-continuously joins two segments.*/
-       NODE_CUSP,
+    NODE_CUSP,
 /**  This node continuously joins two segments. */
-       NODE_SMOOTH,
+    NODE_SMOOTH,
 /**  This node has automatic handles. */
-       NODE_AUTO,
+    NODE_AUTO,
 /**  This node is symmetric. */
-       NODE_SYMM
+    NODE_SYMM
 } NodeType;
 
 
@@ -160,19 +160,19 @@ typedef enum {
 class NodeSide{
  public:
 /**  Pointer to the next node, */
-       Node * other;
+    Node * other;
 /**  Position */
-       Geom::Point pos;
+    Geom::Point pos;
 /**  Origin (while dragging) in radial notation */
-       Radial origin_radial;
+    Radial origin_radial;
 /**  Origin (while dragging) in x/y notation */
-       Geom::Point origin;
+    Geom::Point origin;
 /**  Knots are Inkscape's way of providing draggable points.  This
  *  Knot is the point on the curve representing the control point in a
  *  bezier curve.*/
-       SPKnot * knot;
+    SPKnot * knot;
 /**  What kind of rendering? */
-       SPCanvasItem * line;
+    SPCanvasItem * line;
 };
 
 /**
@@ -181,28 +181,28 @@ class NodeSide{
 class Node {
  public:
 /**  The parent subpath of this node */
-       SubPath * subpath;
+    SubPath * subpath;
 /**  Type is selected from NodeType.*/
-       guint type : 4;
+    guint type : 4;
 /**  Code refers to which ArtCode is used to represent the segment
  *  (which segment?).*/
-       guint code : 4;
+    guint code : 4;
 /**  Boolean.  Am I currently selected or not? */
-       guint selected : 1;
+    guint selected : 1;
 /**  */
-       Geom::Point pos;
+    Geom::Point pos;
 /**  */
-       Geom::Point origin;
+    Geom::Point origin;
 /**  Knots are Inkscape's way of providing draggable points.  This
  *  Knot is the point on the curve representing the endpoint.*/
-       SPKnot * knot;
+    SPKnot * knot;
 /**  The NodeSide in the 'next' direction */
-       NodeSide n;
+    NodeSide n;
 /**  The NodeSide in the 'previous' direction */
-       NodeSide p;
+    NodeSide p;
 
-       /** The pointer to the nodeside which we are dragging out with Shift */
-       NodeSide *dragging_out;
+    /** The pointer to the nodeside which we are dragging out with Shift */
+    NodeSide *dragging_out;
   
   /** Boolean.  Am I being dragged? */
   guint is_dragging : 1;
@@ -221,30 +221,37 @@ class Node {
  */
 class Path {
  public:
+    /** Constructor should private, people should create new nodepaths using sp_nodepath_new
+     *  But for some reason I cannot make sp_nodepath_new a friend :-(
+     */
+    Path() {};
+    /** Destructor */
+    ~Path();
+
 /**  Pointer to the current desktop, for reporting purposes */
-       SPDesktop * desktop;
+    SPDesktop * desktop;
 /**  The parent path of this nodepath */
-       SPObject * object;
+    SPObject * object;
 /**  The parent livepatheffect of this nodepath, if applicable */
     SPItem * item;
 /**  The context which created this nodepath.  Important if this nodepath is deleted */
-       ShapeEditor *shape_editor;
+    ShapeEditor *shape_editor;
 /**  The subpaths which comprise this NodePath */
-       GList * subpaths;
+    GList * subpaths;
 /**  A list of nodes which are currently selected */
-       GList * selected;
+    GList * selected;
 /**  Transforms (userspace <---> virtual space?   someone please describe )
-        njh: I'd be guessing that these are item <-> desktop transforms.*/
-       Geom::Matrix i2d, d2i;
+     njh: I'd be guessing that these are item <-> desktop transforms.*/
+    Geom::Matrix i2d, d2i;
 /**  The DOM node which describes this NodePath */
     Inkscape::XML::Node *repr;
     gchar *repr_key;
     gchar *repr_nodetypes_key;
-       //STL compliant method to get the selected nodes
-       void selection(std::list<Node *> &l);
+    //STL compliant method to get the selected nodes
+    void selection(std::list<Node *> &l);
 
-       guint numSelected() {return (selected? g_list_length(selected) : 0);}
-       Geom::Point& singleSelectedCoords() {return (((Node *) selected->data)->pos);}
+    guint numSelected() {return (selected? g_list_length(selected) : 0);}
+    Geom::Point& singleSelectedCoords() {return (((Node *) selected->data)->pos);}
 
     /// draw a "sketch" of the path by using these variables
     SPCanvasItem *helper_path;
@@ -254,21 +261,21 @@ class Path {
     gdouble helperpath_width;
 
     // the helperpaths provided by all LPEs (and their paramaters) of the current item
-    HelperPathList* helper_path_vec;
+    HelperPathList helper_path_vec;
 
       /// true if we changed repr, to tell this change from an external one such as from undo, simplify, or another desktop
-       unsigned int local_change;
+    unsigned int local_change;
 
-       /// true if we're showing selected nodes' handles
-       bool show_handles;
+    /// true if we're showing selected nodes' handles
+    bool show_handles;
 
     /// true if the path cannot contain curves, just straight lines
     bool straight_path;
 
-       /// active_node points to the node that is currently mouseovered (= NULL if
-       /// there isn't any); we also consider the node mouseovered if it is covered
-       /// by one of its handles and the latter is mouseovered
-       static Node *active_node;
+    /// active_node points to the node that is currently mouseovered (= NULL if
+    /// there isn't any); we also consider the node mouseovered if it is covered
+    /// by one of its handles and the latter is mouseovered
+    static Node *active_node;
 };
 
 }  // namespace NodePath
@@ -282,7 +289,6 @@ enum {
 
 // Do function documentation in nodepath.cpp
 Inkscape::NodePath::Path * sp_nodepath_new (SPDesktop * desktop, SPObject *object, bool show_handles, const char * repr_key = NULL, SPItem *item = NULL);
-void sp_nodepath_destroy (Inkscape::NodePath::Path * nodepath);
 void sp_nodepath_deselect (Inkscape::NodePath::Path *nodepath);
 void sp_nodepath_select_all (Inkscape::NodePath::Path *nodepath, bool invert);
 void sp_nodepath_select_all_from_subpath(Inkscape::NodePath::Path *nodepath, bool invert);
index 0458add78f65de15c2db9a85029553e00d594781..1fd566c8235aa3c478ff6bf5b13007450eea74c7 100644 (file)
@@ -138,7 +138,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent,
                 if (SP_IS_GROUP(o)) {
                     _findCandidates(o, it, false, bbox_to_snap, snap_dim, false, Geom::identity());
                 } else {
-                    boost::optional<Geom::Rect> bbox_of_item = Geom::Rect();
+                    Geom::OptRect bbox_of_item = Geom::Rect();
                     if (clip_or_mask) {
                         // Oh oh, this will get ugly. We cannot use sp_item_i2d_affine directly because we need to
                         // insert an additional transformation in document coordinates (code copied from sp_item_i2d_affine)
@@ -215,7 +215,7 @@ void Inkscape::ObjectSnapper::_collectNodes(Inkscape::SnapPreferences::PointType
                     // Discard the bbox of a clipped path / mask, because we don't want to snap to both the bbox
                     // of the item AND the bbox of the clipping path at the same time
                     if (!(*i).clip_or_mask) {  
-                        boost::optional<Geom::Rect> b = sp_item_bbox_desktop(root_item, bbox_type);
+                        Geom::OptRect b = sp_item_bbox_desktop(root_item, bbox_type);
                         if (b) {
                             for ( unsigned k = 0 ; k < 4 ; k++ ) {
                                 _points_to_snap_to->push_back(b->corner(k));
@@ -378,11 +378,12 @@ void Inkscape::ObjectSnapper::_collectPaths(Inkscape::SnapPreferences::PointType
                     // Discard the bbox of a clipped path / mask, because we don't want to snap to both the bbox
                     // of the item AND the bbox of the clipping path at the same time
                     if (!(*i).clip_or_mask) { 
-                        NRRect rect;
-                        sp_item_invoke_bbox(root_item, &rect, i2doc, TRUE, bbox_type);
-                        Geom::Rect const rect2 = to_2geom(*rect.upgrade());
-                        Geom::PathVector *path = _getPathvFromRect(rect2);
-                        _paths_to_snap_to->push_back(path);                        
+                       Geom::OptRect rect;
+                       sp_item_invoke_bbox(root_item, rect, i2doc, TRUE, bbox_type);
+                        if (rect) {
+                               Geom::PathVector *path = _getPathvFromRect(*rect);
+                               _paths_to_snap_to->push_back(path);
+                        }
                     }
                 }
             }
@@ -406,8 +407,9 @@ void Inkscape::ObjectSnapper::_snapPaths(SnappedConstraints &sc,
     bool const node_tool_active = _snap_to_itempath && selected_path != NULL;
     
     if (first_point) {
-        /* While editing a path in the node tool, findCandidates must ignore that path because 
-         * of the node snapping requirements (i.e. only unselected nodes must be snapable).
+        /* findCandidates() is used for snapping to both paths and nodes. It ignores the path that is
+         * currently being edited, because that path requires special care: when snapping to nodes 
+         * only the unselected nodes of that path should be considered, and these will be passed on separately.
          * This path must not be ignored however when snapping to the paths, so we add it here
          * manually when applicable. 
          * 
@@ -452,8 +454,15 @@ void Inkscape::ObjectSnapper::_snapPaths(SnappedConstraints &sc,
                     g_assert(unselected_nodes != NULL);
                     Geom::Point start_pt = _snapmanager->getDesktop()->doc2dt(curve->pointAt(0)); 
                     Geom::Point end_pt = _snapmanager->getDesktop()->doc2dt(curve->pointAt(1));                                    
-                    c1 = isUnselectedNode(start_pt, unselected_nodes);
-                    c2 = isUnselectedNode(end_pt, unselected_nodes);
+                    c1 = isUnselectedNode(start_pt, unselected_nodes); 
+                    c2 = isUnselectedNode(end_pt, unselected_nodes);  
+                    /* Unfortunately, this might yield false positives for coincident nodes. Inkscape might therefore mistakenly
+                     * snap to path segments that are not stationary. There are at least two possible ways to overcome this:
+                     * - Linking the individual nodes of the SPPath we have here, to the nodes of the NodePath::SubPath class as being
+                     *   used in sp_nodepath_selected_nodes_move. This class has a member variable called "selected". For this the nodes
+                     *   should be in the exact same order for both classes, so we can index them
+                     * - Replacing the SPPath being used here by the the NodePath::SubPath class; but how?
+                     */ 
                 }
                 
                 Geom::Point const sp_dt = _snapmanager->getDesktop()->doc2dt(sp_doc);                
@@ -550,7 +559,7 @@ void Inkscape::ObjectSnapper::freeSnap(SnappedConstraints &sc,
                                             Inkscape::SnapPreferences::PointType const &t,
                                             Geom::Point const &p,
                                             bool const &first_point,
-                                            boost::optional<Geom::Rect> const &bbox_to_snap,
+                                            Geom::OptRect const &bbox_to_snap,
                                             std::vector<SPItem const *> const *it,
                                             std::vector<Geom::Point> *unselected_nodes) const
 {
@@ -593,7 +602,7 @@ void Inkscape::ObjectSnapper::constrainedSnap( SnappedConstraints &sc,
                                                   Inkscape::SnapPreferences::PointType const &t,
                                                   Geom::Point const &p,
                                                   bool const &first_point,
-                                                  boost::optional<Geom::Rect> const &bbox_to_snap,
+                                                  Geom::OptRect const &bbox_to_snap,
                                                   ConstraintLine const &c,
                                                   std::vector<SPItem const *> const *it) const
 {
index 01ef8cf50958e9b97b8528e0ccd269e434396766..f235ae5661c6d491f63e07d496494e3221a8b227 100644 (file)
@@ -77,7 +77,7 @@ public:
                       Inkscape::SnapPreferences::PointType const &t,
                       Geom::Point const &p,
                       bool const &first_point,
-                      boost::optional<Geom::Rect> const &bbox_to_snap,
+                      Geom::OptRect const &bbox_to_snap,
                       std::vector<SPItem const *> const *it,
                       std::vector<Geom::Point> *unselected_nodes) const;
 
@@ -85,7 +85,7 @@ public:
                       Inkscape::SnapPreferences::PointType const &t,
                       Geom::Point const &p,
                       bool const &first_point,                                                                   
-                      boost::optional<Geom::Rect> const &bbox_to_snap,
+                      Geom::OptRect const &bbox_to_snap,
                       ConstraintLine const &c,
                       std::vector<SPItem const *> const *it) const;
   
index acc10389c1bb8c05e02553fbe8de1abd7864a780..69d9a5e234475d3cb2cac3fff5341f85c6bc779e 100644 (file)
@@ -58,7 +58,7 @@ static void spdc_set_endpoint(SPPencilContext *pc, Geom::Point const p);
 static void spdc_finish_endpoint(SPPencilContext *pc);
 static void spdc_add_freehand_point(SPPencilContext *pc, Geom::Point p, guint state);
 static void fit_and_split(SPPencilContext *pc);
-
+static void interpolate(SPPencilContext *pc);
 
 static SPDrawContextClass *pencil_parent_class;
 static Geom::Point pencil_drag_origin_w(0, 0);
@@ -263,9 +263,9 @@ pencil_handle_button_press(SPPencilContext *const pc, GdkEventButton const &beve
                         Inkscape::SnappedPoint const s = m.freeSnap(Inkscape::SnapPreferences::SNAPPOINT_NODE, p);
                         if (s.getSnapped()) {
                                s.getPoint(p);
-                               pc->pencil_has_snapped_before = true;
+                               pc->prev_snap_was_succesful = true;
                         } else {
-                               pc->pencil_has_snapped_before = false;
+                               pc->prev_snap_was_succesful = false;
                         }
                     } else if (selection->singleItem() && SP_IS_PATH(selection->singleItem())) {
                         desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Appending to selected path"));
@@ -362,11 +362,13 @@ pencil_handle_motion_notify(SPPencilContext *const pc, GdkEventMotion const &mev
                     Inkscape::SnappedPoint const s = m.freeSnap(Inkscape::SnapPreferences::SNAPPOINT_NODE, p);
                     if (s.getSnapped()) {
                        s.getPoint(p);
-                       pc->pencil_has_snapped_before = true;
+                       pc->prev_snap_was_succesful = true;
+                    } else {
+                       pc->prev_snap_was_succesful = false;
                     }
                 }
                 if ( pc->npoints != 0) { // buttonpress may have happened before we entered draw context!
-                       if (!(pc->pencil_has_snapped_before && m.snapprefs.getSnapPostponedGlobally())) {
+                       if (!(pc->prev_snap_was_succesful && m.snapprefs.getSnapPostponedGlobally())) {
                            // When snapping is enabled but temporarily on hold because the mouse is moving 
                                // fast, then we don't want to add nodes off-grid
                                spdc_add_freehand_point(pc, from_2geom(p), mevent.state);
@@ -450,6 +452,7 @@ pencil_handle_button_release(SPPencilContext *const pc, GdkEventButton const &re
 
                 dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Finishing freehand"));
 
+                interpolate(pc);
                 spdc_concat_colors_and_flush(pc, FALSE);
                 pc->sa = NULL;
                 pc->ea = NULL;
@@ -624,6 +627,7 @@ spdc_finish_endpoint(SPPencilContext *const pc)
     }
 }
 
+
 static void
 spdc_add_freehand_point(SPPencilContext *pc, Geom::Point p, guint /*state*/)
 {
@@ -633,6 +637,7 @@ spdc_add_freehand_point(SPPencilContext *pc, Geom::Point p, guint /*state*/)
     if ( ( p != pc->p[ pc->npoints - 1 ] )
          && in_svg_plane(p) )
     {
+        pc->ps.push_back(p);
         pc->p[pc->npoints++] = p;
         fit_and_split(pc);
     }
@@ -644,22 +649,95 @@ square(double const x)
     return x * x;
 }
 
+static void
+interpolate(SPPencilContext *pc)
+{
+
+    g_assert( pc->ps.size() > 1 );
+
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    double const tol = prefs->getDoubleLimited("/tools/freehand/pencil/tolerance", 10.0, 1.0, 100.0) * 0.4;
+    double const tolerance_sq = 0.02 * square( pc->desktop->w2d().descrim() * 
+                                               tol) * exp(0.2*tol - 2);
+
+    g_assert(is_zero(pc->req_tangent)
+             || is_unit_vector(pc->req_tangent));
+    Geom::Point const tHatEnd(0, 0);
+
+    guint n_points  = pc->ps.size();
+    pc->green_curve->reset();
+    pc->red_curve->reset();
+
+    Geom::Point * b = g_new(Geom::Point, 4*n_points);
+    Geom::Point * points = g_new(Geom::Point, 4*n_points);
+    for (int i = 0; i < pc->ps.size(); i++) { 
+        points[i] = pc->ps[i];
+    }
+
+    // worst case gives us a segment per point
+    int max_segs = 4*n_points;
+
+    int const n_segs = sp_bezier_fit_cubic_r(b, points, n_points,
+                                             tolerance_sq, max_segs);
+
+    if ( n_segs > 0)
+    {
+        /* Fit and draw and reset state */
+        pc->red_curve->reset();
+        pc->red_curve->moveto(b[0]);
+        for (int c = 0; c < n_segs; c++) { 
+            pc->red_curve->curveto(b[4*c+1], b[4*c+2], b[4*c+3]);
+        }
+        sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(pc->red_bpath), pc->red_curve);
+        pc->red_curve_is_valid = true;
+
+        /* Fit and draw and copy last point */
+        g_assert(!pc->red_curve->is_empty());
+
+        /* Set up direction of next curve. */
+        {
+            Geom::CubicBezier const * last_seg = dynamic_cast<Geom::CubicBezier const *>(pc->red_curve->last_segment());
+            g_assert( last_seg );      // Relevance: validity of (*last_seg)[2]
+            pc->p[0] = last_seg->finalPoint();
+            pc->npoints = 1;
+            Geom::Point const req_vec( pc->p[0] - (*last_seg)[2] );
+            pc->req_tangent = ( ( Geom::is_zero(req_vec) || !in_svg_plane(req_vec) )
+                                ? Geom::Point(0, 0)
+                                : Geom::unit_vector(req_vec) );
+        }
+
+        pc->green_curve->append_continuous(pc->red_curve, 0.0625);
+        SPCurve *curve = pc->red_curve->copy();
+
+        /// \todo fixme:
+        SPCanvasItem *cshape = sp_canvas_bpath_new(sp_desktop_sketch(pc->desktop), curve);
+        curve->unref();
+        sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(cshape), pc->green_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT);
+
+        pc->green_bpaths = g_slist_prepend(pc->green_bpaths, cshape);
+
+        pc->red_curve_is_valid = false;
+    }
+    g_free(b);
+    g_free(points);
+    pc->ps.clear();
+}
+
+
 static void
 fit_and_split(SPPencilContext *pc)
 {
     g_assert( pc->npoints > 1 );
 
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    double const tol = prefs->getDoubleLimited("/tools/freehand/pencil/tolerance", 10.0, 1.0, 100.0);
-    double const tolerance_sq = 0.02 * square( pc->desktop->w2d().descrim() * tol) 
-        * exp(0.2*tol - 2);
+    double const tolerance_sq = 0;
 
     Geom::Point b[4];
     g_assert(is_zero(pc->req_tangent)
              || is_unit_vector(pc->req_tangent));
     Geom::Point const tHatEnd(0, 0);
     int const n_segs = sp_bezier_fit_cubic_full(b, NULL, pc->p, pc->npoints,
-                                                pc->req_tangent, tHatEnd, tolerance_sq, 1);
+                                                pc->req_tangent, tHatEnd, 
+                                                tolerance_sq, 1);
     if ( n_segs > 0
          && unsigned(pc->npoints) < G_N_ELEMENTS(pc->p) )
     {
index 467241b17b66159d53e04fd7280a8cc28c22fef5..0845c82ba9234b7e0e6b2e06383fbce3583d1bff 100644 (file)
@@ -30,7 +30,9 @@ struct SPPencilContext : public SPDrawContext {
     Geom::Point req_tangent;
 
     bool is_drawing;
-    bool pencil_has_snapped_before;
+    bool prev_snap_was_succesful;
+    
+    std::vector<Geom::Point> ps;
 };
 
 /// The SPPencilContext vtable (empty).
index c6b547a9e43fde41850c171e5409e2ededfc55b1..0b860174891b64fe64e464387082cf2116cb04c1 100644 (file)
@@ -248,6 +248,8 @@ static char const preferences_skeleton[] =
 "    <group id=\"wheelzooms\" value=\"0\"/>\n"
 "    <group id=\"transientpolicy\" value=\"1\"/>\n"
 "    <group id=\"scrollingacceleration\" value=\"0.4\"/>\n"
+"    <group id=\"snapdelay\" value=\"150\"/>\n"        
+"    <group id=\"snapindicator\" value=\"1\"/>\n"
 "    <group id=\"autoscrollspeed\" value=\"0.7\"/>\n"
 "    <group id=\"autoscrolldistance\" value=\"-10\"/>\n"
 "    <group id=\"simplifythreshold\" value=\"0.002\"/>\n"
index 60bb0e4f9707313315745bc16c148caaec801836..084f95dfea06b461c0848deaae4d51032b5ada34 100644 (file)
@@ -48,7 +48,7 @@ void removeoverlap(GSList const *const items, double const xGap, double const yG
                ++it)
        {
                using Geom::X; using Geom::Y;
-               boost::optional<Geom::Rect> item_box(sp_item_bbox_desktop(*it));
+               Geom::OptRect item_box(sp_item_bbox_desktop(*it));
                if (item_box) {
                        Geom::Point min(item_box->min() - .5*gap);
                        Geom::Point max(item_box->max() + .5*gap);
index 7c43da9ea28dfa1114576b5679264a4d5acbc533..76743cf8b6017f578148c507fe3406ab9f4fa516 100644 (file)
@@ -124,10 +124,10 @@ void Inkscape::Rubberband::setMode(int mode)
     _mode = mode;
 }
 
-boost::optional<Geom::Rect> Inkscape::Rubberband::getRectangle() const
+Geom::OptRect Inkscape::Rubberband::getRectangle() const
 {
     if (!_started) {
-        return boost::optional<Geom::Rect>();
+        return Geom::OptRect();
     }
 
     return Geom::Rect(_start, _end);
index 6da1ddd8d3f59f5c4c26c68eb8c017c6d5d1d518..1f4b7d2eaec6b3b2be2154234999c2a46da1aff7 100644 (file)
@@ -40,7 +40,7 @@ public:
 
     void start(SPDesktop *desktop, Geom::Point const &p);
     void move(Geom::Point const &p);
-    boost::optional<Geom::Rect> getRectangle() const;
+    Geom::OptRect getRectangle() const;
     void stop();
     bool is_started();
 
index 241802a8763fb46670c122535173eedefeb428a5..03205d8498a893b08b50785c9fa0cd782d6d287f 100644 (file)
@@ -85,7 +85,7 @@ void Inkscape::SelCue::_updateItemBboxes()
     for (GSList const *l = _selection->itemList(); l != NULL; l = l->next) {
         SPItem *item = (SPItem *) l->data;
 
-        boost::optional<Geom::Rect> const b = sp_item_bbox_desktop(item, bbox_type);
+        Geom::OptRect const b = sp_item_bbox_desktop(item, bbox_type);
 
         SPCanvasItem* box = NULL;
 
index b726243f9c50f903769995de501852d5a73e6e5f..11c9cc4e9cafcc9bfca8c381cc86f87c0880e4bc 100644 (file)
@@ -599,7 +599,7 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                         // this was a rubberband drag
                         GSList *items = NULL;
                         if (r->getMode() == RUBBERBAND_MODE_RECT) {
-                            boost::optional<Geom::Rect> const b = r->getRectangle();
+                            Geom::OptRect const b = r->getRectangle();
                             items = sp_document_items_in_box(sp_desktop_document(desktop), desktop->dkey, *b);
                         } else if (r->getMode() == RUBBERBAND_MODE_TOUCHPATH) {
                             items = sp_document_items_at_points(sp_desktop_document(desktop), desktop->dkey, r->getPoints());
index 86bf64f01c2a5e6ca975ab46225e1b2be91f50a8..bd59c0aa48ae36da06ee3b91ed08db4b77d12423 100644 (file)
@@ -614,12 +614,12 @@ sp_item_list_common_parent_group(GSList const *items)
 }
 
 /** Finds out the minimum common bbox of the selected items. */
-static boost::optional<Geom::Rect>
+static Geom::OptRect
 enclose_items(GSList const *items)
 {
     g_assert(items != NULL);
 
-    boost::optional<Geom::Rect> r;
+    Geom::OptRect r;
     for (GSList const *i = items; i; i = i->next) {
         r = Geom::unify(r, sp_item_bbox_desktop((SPItem *) i->data));
     }
@@ -667,7 +667,7 @@ sp_selection_raise(SPDesktop *desktop)
     rev = g_slist_sort(rev, (GCompareFunc) sp_item_repr_compare_position);
 
     // Determine the common bbox of the selected items.
-    boost::optional<Geom::Rect> selected = enclose_items(items);
+    Geom::OptRect selected = enclose_items(items);
 
     // Iterate over all objects in the selection (starting from top).
     if (selected) {
@@ -677,7 +677,7 @@ sp_selection_raise(SPDesktop *desktop)
             for (SPObject *newref = child->next; newref; newref = newref->next) {
                 // if the sibling is an item AND overlaps our selection,
                 if (SP_IS_ITEM(newref)) {
-                    boost::optional<Geom::Rect> newref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
+                    Geom::OptRect newref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
                     if ( newref_bbox && selected->intersects(*newref_bbox) ) {
                         // AND if it's not one of our selected objects,
                         if (!g_slist_find((GSList *) items, newref)) {
@@ -757,7 +757,7 @@ sp_selection_lower(SPDesktop *desktop)
     Inkscape::XML::Node *grepr = SP_OBJECT_REPR(group);
 
     // Determine the common bbox of the selected items.
-    boost::optional<Geom::Rect> selected = enclose_items(items);
+    Geom::OptRect selected = enclose_items(items);
 
     /* Construct direct-ordered list of selected children. */
     GSList *rev = g_slist_copy((GSList *) items);
@@ -772,7 +772,7 @@ sp_selection_lower(SPDesktop *desktop)
             for (SPObject *newref = prev_sibling(child); newref; newref = prev_sibling(newref)) {
                 // if the sibling is an item AND overlaps our selection,
                 if (SP_IS_ITEM(newref)) {
-                    boost::optional<Geom::Rect> ref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
+                    Geom::OptRect ref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
                     if ( ref_bbox && selected->intersects(*ref_bbox) ) {
                         // AND if it's not one of our selected objects,
                         if (!g_slist_find((GSList *) items, newref)) {
@@ -1285,8 +1285,8 @@ sp_selection_scale_absolute(Inkscape::Selection *selection,
     if (selection->isEmpty())
         return;
 
-    boost::optional<Geom::Rect> const bbox(selection->bounds());
-    if ( !bbox || bbox->isEmpty() ) {
+    Geom::OptRect const bbox(selection->bounds());
+    if ( !bbox ) {
         return;
     }
 
@@ -1307,9 +1307,9 @@ void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point con
     if (selection->isEmpty())
         return;
 
-    boost::optional<Geom::Rect> const bbox(selection->bounds());
+    Geom::OptRect const bbox(selection->bounds());
 
-    if ( !bbox || bbox->isEmpty() ) {
+    if ( !bbox ) {
         return;
     }
 
@@ -1425,7 +1425,7 @@ sp_selection_rotate_screen(Inkscape::Selection *selection, gdouble angle)
     if (selection->isEmpty())
         return;
 
-    boost::optional<Geom::Rect> const bbox(selection->bounds());
+    Geom::OptRect const bbox(selection->bounds());
     boost::optional<Geom::Point> center = selection->center();
 
     if ( !bbox || !center ) {
@@ -1454,7 +1454,7 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow)
     if (selection->isEmpty())
         return;
 
-    boost::optional<Geom::Rect> const bbox(selection->bounds());
+    Geom::OptRect const bbox(selection->bounds());
     if (!bbox) {
         return;
     }
@@ -1491,7 +1491,7 @@ sp_selection_scale_times(Inkscape::Selection *selection, gdouble times)
     if (selection->isEmpty())
         return;
 
-    boost::optional<Geom::Rect> sel_bbox = selection->bounds();
+    Geom::OptRect sel_bbox = selection->bounds();
 
     if (!sel_bbox) {
         return;
@@ -1815,7 +1815,7 @@ SPItem *next_item(SPDesktop *desktop, GSList *path, SPObject *root,
 void scroll_to_show_item(SPDesktop *desktop, SPItem *item)
 {
     Geom::Rect dbox = desktop->get_display_area();
-    boost::optional<Geom::Rect> sbox = sp_item_bbox_desktop(item);
+    Geom::OptRect sbox = sp_item_bbox_desktop(item);
 
     if ( sbox && dbox.contains(*sbox) == false ) {
         Geom::Point const s_dt = sbox->midpoint();
@@ -2046,8 +2046,8 @@ sp_select_clone_original(SPDesktop *desktop)
         Inkscape::Preferences *prefs = Inkscape::Preferences::get();
         bool highlight = prefs->getBool("/options/highlightoriginal/value");
         if (highlight) {
-            boost::optional<Geom::Rect> a = item->getBounds(sp_item_i2d_affine(item));
-            boost::optional<Geom::Rect> b = original->getBounds(sp_item_i2d_affine(original));
+            Geom::OptRect a = item->getBounds(sp_item_i2d_affine(item));
+            Geom::OptRect b = original->getBounds(sp_item_i2d_affine(original));
             if ( a && b ) {
                 // draw a flashing line between the objects
                 SPCurve *curve = new SPCurve();
@@ -2088,9 +2088,9 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply)
     }
 
     sp_document_ensure_up_to_date(doc);
-    boost::optional<Geom::Rect> r = selection->bounds();
+    Geom::OptRect r = selection->bounds();
     boost::optional<Geom::Point> c = selection->center();
-    if ( !r || !c || r->isEmpty() ) {
+    if ( !r || !c ) {
         return;
     }
 
@@ -2212,8 +2212,8 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
     }
 
     sp_document_ensure_up_to_date(doc);
-    boost::optional<Geom::Rect> r = selection->bounds();
-    if ( !r || r->isEmpty() ) {
+    Geom::OptRect r = selection->bounds();
+    if ( !r ) {
         return;
     }
 
@@ -2871,8 +2871,8 @@ fit_canvas_to_selection(SPDesktop *desktop)
         desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to fit canvas to."));
         return false;
     }
-    boost::optional<Geom::Rect> const bbox(desktop->selection->bounds());
-    if (bbox && !bbox->isEmpty()) {
+    Geom::OptRect const bbox(desktop->selection->bounds());
+    if (bbox) {
         doc->fitToRect(*bbox);
         return true;
     } else {
@@ -2899,8 +2899,8 @@ fit_canvas_to_drawing(SPDocument *doc)
 
     sp_document_ensure_up_to_date(doc);
     SPItem const *const root = SP_ITEM(doc->root);
-    boost::optional<Geom::Rect> const bbox(root->getBounds(sp_item_i2r_affine(root)));
-    if (bbox && !bbox->isEmpty()) {
+    Geom::OptRect const bbox(root->getBounds(sp_item_i2r_affine(root)));
+    if (bbox) {
         doc->fitToRect(*bbox);
         return true;
     } else {
index 4ed6c0842b92ba71d7fa884fd171deb8ef77b01e..ea1c0053fa6be419f3c4178cf9e36f17d36f396c 100644 (file)
@@ -383,11 +383,11 @@ NRRect *Selection::bounds(NRRect *bbox, SPItem::BBoxType type) const
     return bbox;
 }
 
-boost::optional<Geom::Rect> Selection::bounds(SPItem::BBoxType type) const
+Geom::OptRect Selection::bounds(SPItem::BBoxType type) const
 {
     GSList const *items = const_cast<Selection *>(this)->itemList();
 
-    boost::optional<Geom::Rect> bbox;
+    Geom::OptRect bbox;
     for ( GSList const *i = items ; i != NULL ; i = i->next ) {
         bbox = unify(bbox, sp_item_bbox_desktop(SP_ITEM(i->data), type));
     }
@@ -415,7 +415,7 @@ NRRect *Selection::boundsInDocument(NRRect *bbox, SPItem::BBoxType type) const {
     return bbox;
 }
 
-boost::optional<Geom::Rect> Selection::boundsInDocument(SPItem::BBoxType type) const {
+Geom::OptRect Selection::boundsInDocument(SPItem::BBoxType type) const {
     NRRect r;
     return to_2geom(boundsInDocument(&r, type)->upgrade());
 }
@@ -430,7 +430,7 @@ boost::optional<Geom::Point> Selection::center() const {
             return first->getCenter();
         }
     }
-    boost::optional<Geom::Rect> bbox = bounds();
+    Geom::OptRect bbox = bounds();
     if (bbox) {
         return bounds()->midpoint();
     } else {
@@ -479,7 +479,7 @@ std::vector<Geom::Point> Selection::getSnapPointsConvexHull(SnapPreferences cons
             cvh.add(*i);
         }
 
-        boost::optional<Geom::Rect> rHull = cvh.bounds();
+        Geom::OptRect rHull = cvh.bounds();
         if (rHull) {
             for ( unsigned i = 0 ; i < 4 ; ++i ) {
                 pHull.push_back(rHull->corner(i));
index 88e8ae90de21810118c23daf7cf35bbf581ce78b..f3ab8e1c1a07ed48954bea58d97a020dd9823af9 100644 (file)
@@ -243,7 +243,7 @@ public:
     /** @brief Returns the bounding rectangle of the selection */
     NRRect *bounds(NRRect *dest, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
     /** @brief Returns the bounding rectangle of the selection */
-    boost::optional<Geom::Rect> bounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
+    Geom::OptRect bounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
 
     /**
      * @brief Returns the bounding rectangle of the selection
@@ -257,7 +257,7 @@ public:
      *
      * \todo how is this different from bounds()?
      */
-    boost::optional<Geom::Rect> boundsInDocument(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
+    Geom::OptRect boundsInDocument(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) const;
 
     /**
      * @brief Returns the rotation/skew center of the selection
index 64ced3dc5fa3e2521d38582ab1336e79df516938..9fafb5a761ebe4d58144ec0d4a366494fa7d11c7 100644 (file)
@@ -131,9 +131,9 @@ private:
 
     SPItem::BBoxType _snap_bbox_type;
     
-    boost::optional<Geom::Rect> _bbox;
-    boost::optional<Geom::Rect> _approximate_bbox;
-    boost::optional<Geom::Rect> _geometric_bbox;
+    Geom::OptRect _bbox;
+    Geom::OptRect _approximate_bbox;
+    Geom::OptRect _geometric_bbox;
     gdouble _strokewidth;
     
     Geom::Matrix _current_relative_affine;
index 04f40929bec2cbfd328b89ee199d59b8d8234ab4..d7cafaed2ab12864d502e2e2f3a7c58d8f26593c 100644 (file)
@@ -22,7 +22,7 @@
 #include "desktop.h"
 #include "desktop-handles.h"
 #include "knotholder.h"
-#include "live_effects/parameter/pointparam-knotholder.h"
+#include "live_effects/parameter/point.h"
 #include "nodepath.h"
 #include "xml/node-event-vector.h"
 #include "preferences.h"
@@ -75,7 +75,7 @@ void ShapeEditor::unset_item(SubType type, bool keep_knotholder) {
                 }
 
                 this->grab_node = -1;
-                sp_nodepath_destroy(this->nodepath);
+                delete this->nodepath;
                 this->nodepath = NULL;
             }
             break;
index e0c83ad36363c56780b61cf25014104063baac06..ebce87c98fa40018ff20acf1736702b6091579e0 100644 (file)
@@ -120,7 +120,7 @@ bool SnapManager::someSnapperMightSnap() const
 void SnapManager::freeSnapReturnByRef(Inkscape::SnapPreferences::PointType point_type,
                                              Geom::Point &p,
                                              bool first_point,
-                                             boost::optional<Geom::Rect> const &bbox_to_snap) const
+                                             Geom::OptRect const &bbox_to_snap) const
 {
     Inkscape::SnappedPoint const s = freeSnap(point_type, p, first_point, bbox_to_snap);                                                            
     s.getPoint(p);
@@ -140,7 +140,7 @@ void SnapManager::freeSnapReturnByRef(Inkscape::SnapPreferences::PointType point
 Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::SnapPreferences::PointType point_type,
                                              Geom::Point const &p,
                                              bool first_point,
-                                             boost::optional<Geom::Rect> const &bbox_to_snap) const
+                                             Geom::OptRect const &bbox_to_snap) const
 {
     if (!someSnapperMightSnap()) {
         return Inkscape::SnappedPoint(p, Inkscape::SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false);
@@ -206,7 +206,7 @@ Geom::Point SnapManager::multipleOfGridPitch(Geom::Point const &t) const
                 Geom::Point const t_offset = from_2geom(t) + grid->origin;
                 SnappedConstraints sc;    
                 // Only the first three parameters are being used for grid snappers
-                snapper->freeSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_NODE, t_offset, TRUE, boost::optional<Geom::Rect>(), NULL, NULL);
+                snapper->freeSnap(sc, Inkscape::SnapPreferences::SNAPPOINT_NODE, t_offset, TRUE, Geom::OptRect(), NULL, NULL);
                 // Find the best snap for this grid, including intersections of the grid-lines
                 Inkscape::SnappedPoint s = findBestSnap(t_offset, sc, false);
                 if (s.getSnapped() && (s.getDistance() < nearest_distance)) {
@@ -240,7 +240,7 @@ void SnapManager::constrainedSnapReturnByRef(Inkscape::SnapPreferences::PointTyp
                                                     Geom::Point &p,
                                                     Inkscape::Snapper::ConstraintLine const &constraint,
                                                     bool first_point,
-                                                    boost::optional<Geom::Rect> const &bbox_to_snap) const
+                                                    Geom::OptRect const &bbox_to_snap) const
 {
     Inkscape::SnappedPoint const s = constrainedSnap(point_type, p, constraint, first_point, bbox_to_snap);                                                            
     s.getPoint(p);
@@ -262,7 +262,7 @@ Inkscape::SnappedPoint SnapManager::constrainedSnap(Inkscape::SnapPreferences::P
                                                     Geom::Point const &p,
                                                     Inkscape::Snapper::ConstraintLine const &constraint,
                                                     bool first_point,
-                                                    boost::optional<Geom::Rect> const &bbox_to_snap) const
+                                                    Geom::OptRect const &bbox_to_snap) const
 {
     if (!someSnapperMightSnap()) {
         return Inkscape::SnappedPoint(p, Inkscape::SNAPTARGET_UNDEFINED, NR_HUGE, 0, false, false);
@@ -598,7 +598,7 @@ Inkscape::SnappedPoint SnapManager::freeSnapTranslation(Inkscape::SnapPreference
                                                         Geom::Point const &pointer,
                                                         Geom::Point const &tr) const
 {
-    return _snapTransformed(point_type, p, pointer, false, Geom::Point(), TRANSLATION, tr, Geom::Point(), Geom::X, false);
+    return _snapTransformed(point_type, p, pointer, false, Geom::Point(0,0), TRANSLATION, tr, Geom::Point(0,0), Geom::X, false);
 }
 
 
@@ -620,7 +620,7 @@ Inkscape::SnappedPoint SnapManager::constrainedSnapTranslation(Inkscape::SnapPre
                                                                Inkscape::Snapper::ConstraintLine const &constraint,
                                                                Geom::Point const &tr) const
 {
-    return _snapTransformed(point_type, p, pointer, true, constraint, TRANSLATION, tr, Geom::Point(), Geom::X, false);
+    return _snapTransformed(point_type, p, pointer, true, constraint, TRANSLATION, tr, Geom::Point(0,0), Geom::X, false);
 }
 
 
@@ -641,7 +641,7 @@ Inkscape::SnappedPoint SnapManager::freeSnapScale(Inkscape::SnapPreferences::Poi
                                                   Geom::Scale const &s,
                                                   Geom::Point const &o) const
 {
-    return _snapTransformed(point_type, p, pointer, false, Geom::Point(), SCALE, Geom::Point(s[Geom::X], s[Geom::Y]), o, Geom::X, false);
+    return _snapTransformed(point_type, p, pointer, false, Geom::Point(0,0), SCALE, Geom::Point(s[Geom::X], s[Geom::Y]), o, Geom::X, false);
 }
 
 
@@ -664,7 +664,7 @@ Inkscape::SnappedPoint SnapManager::constrainedSnapScale(Inkscape::SnapPreferenc
                                                          Geom::Point const &o) const
 {
     // When constrained scaling, only uniform scaling is supported.
-    return _snapTransformed(point_type, p, pointer, true, Geom::Point(), SCALE, Geom::Point(s[Geom::X], s[Geom::Y]), o, Geom::X, true);
+    return _snapTransformed(point_type, p, pointer, true, Geom::Point(0,0), SCALE, Geom::Point(s[Geom::X], s[Geom::Y]), o, Geom::X, true);
 }
 
 
@@ -689,7 +689,7 @@ Inkscape::SnappedPoint SnapManager::constrainedSnapStretch(Inkscape::SnapPrefere
                                                             Geom::Dim2 d,
                                                             bool u) const
 {
-   return _snapTransformed(point_type, p, pointer, true, Geom::Point(), STRETCH, Geom::Point(s, s), o, d, u);
+   return _snapTransformed(point_type, p, pointer, true, Geom::Point(0,0), STRETCH, Geom::Point(s, s), o, d, u);
 }
 
 
index 15b4bd0950fd71858e065bab60141b1f31eefe4a..05af0d20281fcbc043f9c4c4435b90987b0b083c 100644 (file)
@@ -56,12 +56,12 @@ public:
     void freeSnapReturnByRef(Inkscape::SnapPreferences::PointType point_type,
                       Geom::Point &p,
                       bool first_point = true,
-                      boost::optional<Geom::Rect> const &bbox_to_snap = boost::optional<Geom::Rect>()) const;
+                      Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const;
     
     Inkscape::SnappedPoint freeSnap(Inkscape::SnapPreferences::PointType point_type,
                                     Geom::Point const &p,
                                     bool first_point = true,
-                                    boost::optional<Geom::Rect> const &bbox_to_snap = boost::optional<Geom::Rect>() ) const;
+                                    Geom::OptRect const &bbox_to_snap = Geom::OptRect() ) const;
     
     Geom::Point multipleOfGridPitch(Geom::Point const &t) const;
     
@@ -71,13 +71,13 @@ public:
                              Geom::Point &p,
                              Inkscape::Snapper::ConstraintLine const &constraint,
                              bool first_point = true,
-                             boost::optional<Geom::Rect> const &bbox_to_snap = boost::optional<Geom::Rect>()) const;
+                             Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const;
     
     Inkscape::SnappedPoint constrainedSnap(Inkscape::SnapPreferences::PointType point_type,
                                            Geom::Point const &p,
                                            Inkscape::Snapper::ConstraintLine const &constraint,
                                            bool first_point = true,
-                                           boost::optional<Geom::Rect> const &bbox_to_snap = boost::optional<Geom::Rect>()) const;
+                                           Geom::OptRect const &bbox_to_snap = Geom::OptRect()) const;
                                            
     void guideSnap(Geom::Point &p, Geom::Point const &guide_normal) const;
 
index 7ad548ab401b377aef828868aff4591364920dc6..0c405fd2bfadced3d9108896a65f25f9bd177311 100644 (file)
@@ -62,7 +62,7 @@ public:
                           SnapPreferences::PointType const &/*t*/,
                           Geom::Point const &/*p*/,
                           bool const &/*first_point*/,
-                          boost::optional<Geom::Rect> const &/*bbox_to_snap*/,
+                          Geom::OptRect const &/*bbox_to_snap*/,
                           std::vector<SPItem const *> const */*it*/,
                           std::vector<Geom::Point> */*unselected_nodes*/) const {};
 
@@ -100,7 +100,7 @@ public:
                                                         SnapPreferences::PointType const &/*t*/,
                                  Geom::Point const &/*p*/,
                                  bool const &/*first_point*/,
-                                 boost::optional<Geom::Rect> const &/*bbox_to_snap*/,
+                                 Geom::OptRect const &/*bbox_to_snap*/,
                                  ConstraintLine const &/*c*/,
                                  std::vector<SPItem const *> const */*it*/) const {};
 
index 14305c8a95ff92cd06b37b7877581d0a7e8c0cc8..fbc4a93ca5e554b39823f89dc7d86a58a2cde5b2 100644 (file)
@@ -167,7 +167,7 @@ SPConnEndPair::getEndpoints(NR::Point endPts[]) const {
 
     for (unsigned h = 0; h < 2; ++h) {
         if ( h2attItem[h] ) {
-            boost::optional<Geom::Rect> bbox = h2attItem[h]->getBounds(sp_item_i2doc_affine(h2attItem[h]));
+            Geom::OptRect bbox = h2attItem[h]->getBounds(sp_item_i2doc_affine(h2attItem[h]));
             if (bbox) {
                 endPts[h] = bbox->midpoint();
             } else {
index c94e75f714cfa29c8fa8f70cc77189fe009c74bc..5776388c36f12ae7b417009534fe4493712efcbe 100644 (file)
@@ -72,7 +72,7 @@ sp_conn_end_move_compensate(Geom::Matrix const */*mp*/, SPItem */*moved_item*/,
             *(path->curve->penultimate_point())
         };
         for (unsigned h = 0; h < 2; ++h) {
-            boost::optional<Geom::Rect> bbox = h2attItem[h]->getBounds(Geom::identity());
+            Geom::OptRect bbox = h2attItem[h]->getBounds(Geom::identity());
             if (!bbox) {
                 if (updatePathRepr) {
                     path->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
@@ -115,7 +115,7 @@ sp_conn_end_move_compensate(Geom::Matrix const */*mp*/, SPItem */*moved_item*/,
 
         Geom::Rect otherpt_rect = Geom::Rect(other_endpt, other_endpt);
         Geom::Rect h2bbox_icoordsys[2] = { otherpt_rect, otherpt_rect };
-        boost::optional<Geom::Rect> bbox = h2attItem[ind]->getBounds(NR::identity());
+        Geom::OptRect bbox = h2attItem[ind]->getBounds(NR::identity());
         if (!bbox) {
             if (updatePathRepr) {
                 path->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
index e1284f61ec0d1838dfe98f04e617b6d39c191716..b6f510201e5e45d6584167af3a7264be22ed68e4 100644 (file)
@@ -243,8 +243,17 @@ static void sp_genericellipse_set_shape(SPShape *shape)
     Geom::Matrix aff = Geom::Scale(rx, ry) * Geom::Translate(ellipse->cx.computed, ellipse->cy.computed);
     curve->transform(aff);
 
-    sp_lpe_item_perform_path_effect(SP_LPE_ITEM (ellipse), curve);
-    sp_shape_set_curve_insync((SPShape *) ellipse, curve, TRUE);
+    /* Reset the shape'scurve to the "original_curve"
+     * This is very important for LPEs to work properly! (the bbox might be recalculated depending on the curve in shape)*/
+    sp_shape_set_curve_insync (shape, curve, TRUE);
+    if (sp_lpe_item_has_path_effect(SP_LPE_ITEM(shape)) && sp_lpe_item_path_effects_enabled(SP_LPE_ITEM(shape))) {
+        SPCurve *c_lpe = curve->copy();
+        bool success = sp_lpe_item_perform_path_effect(SP_LPE_ITEM (shape), c_lpe);
+        if (success) {
+            sp_shape_set_curve_insync (shape, c_lpe, TRUE);
+        }
+        c_lpe->unref();
+    }
     curve->unref();
 }
 
diff --git a/src/sp-feblend-fns.h b/src/sp-feblend-fns.h
deleted file mode 100644 (file)
index f08ed9d..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FEBLEND_FNS_H
-#define SP_FEBLEND_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeBlend;
-
-#define SP_TYPE_FEBLEND (sp_feBlend_get_type())
-#define SP_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEBLEND, SPFeBlend))
-#define SP_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEBLEND, SPFeBlendClass))
-#define SP_IS_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEBLEND))
-#define SP_IS_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEBLEND))
-
-GType sp_feBlend_get_type();
-
-#endif /* !SP_FEBLEND_FNS_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/sp-feblend.cpp b/src/sp-feblend.cpp
deleted file mode 100644 (file)
index 0522a38..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-#define __SP_FEBLEND_CPP__
-
-/** \file
- * SVG <feBlend> implementation.
- *
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *
- * Copyright (C) 2006,2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-feblend.h"
-#include "xml/repr.h"
-
-#include "display/nr-filter.h"
-#include "display/nr-filter-primitive.h"
-#include "display/nr-filter-blend.h"
-#include "display/nr-filter-types.h"
-
-/* FeBlend base class */
-
-static void sp_feBlend_class_init(SPFeBlendClass *klass);
-static void sp_feBlend_init(SPFeBlend *feBlend);
-
-static void sp_feBlend_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feBlend_release(SPObject *object);
-static void sp_feBlend_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feBlend_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feBlend_build_renderer(SPFilterPrimitive *sp_prim, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feBlend_parent_class;
-
-GType
-sp_feBlend_get_type()
-{
-    static GType feBlend_type = 0;
-
-    if (!feBlend_type) {
-        GTypeInfo feBlend_info = {
-            sizeof(SPFeBlendClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feBlend_class_init,
-            NULL, NULL,
-            sizeof(SPFeBlend),
-            16,
-            (GInstanceInitFunc) sp_feBlend_init,
-            NULL,    /* value_table */
-        };
-        feBlend_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeBlend", &feBlend_info, (GTypeFlags)0);
-    }
-    return feBlend_type;
-}
-
-static void
-sp_feBlend_class_init(SPFeBlendClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feBlend_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feBlend_build;
-    sp_object_class->release = sp_feBlend_release;
-    sp_object_class->write = sp_feBlend_write;
-    sp_object_class->set = sp_feBlend_set;
-    sp_object_class->update = sp_feBlend_update;
-
-    sp_primitive_class->build_renderer = sp_feBlend_build_renderer;
-}
-
-static void
-sp_feBlend_init(SPFeBlend *feBlend)
-{
-    feBlend->in2 = NR::NR_FILTER_SLOT_NOT_SET;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeBlend variables.  For this to get called,
- * 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_feBlend_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feBlend_parent_class)->build) {
-        ((SPObjectClass *) feBlend_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "mode");
-    sp_object_read_attr(object, "in2");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feBlend_release(SPObject *object)
-{
-    if (((SPObjectClass *) feBlend_parent_class)->release)
-        ((SPObjectClass *) feBlend_parent_class)->release(object);
-}
-
-static NR::FilterBlendMode sp_feBlend_readmode(gchar const *value)
-{
-    if (!value) return NR::BLEND_NORMAL;
-    switch (value[0]) {
-        case 'n':
-            if (strncmp(value, "normal", 6) == 0)
-                return NR::BLEND_NORMAL;
-            break;
-        case 'm':
-            if (strncmp(value, "multiply", 8) == 0)
-                return NR::BLEND_MULTIPLY;
-            break;
-        case 's':
-            if (strncmp(value, "screen", 6) == 0)
-                return NR::BLEND_SCREEN;
-            break;
-        case 'd':
-            if (strncmp(value, "darken", 6) == 0)
-                return NR::BLEND_DARKEN;
-            break;
-        case 'l':
-            if (strncmp(value, "lighten", 7) == 0)
-                return NR::BLEND_LIGHTEN;
-            break;
-        default:
-            // do nothing by default
-            break;
-    }
-    return NR::BLEND_NORMAL;
-}
-
-/**
- * Sets a specific value in the SPFeBlend.
- */
-static void
-sp_feBlend_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeBlend *feBlend = SP_FEBLEND(object);
-    (void)feBlend;
-
-    NR::FilterBlendMode mode;
-    int input;
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        case SP_ATTR_MODE:
-            mode = sp_feBlend_readmode(value);
-            if (mode != feBlend->blend_mode) {
-                feBlend->blend_mode = mode;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_IN2:
-            input = sp_filter_primitive_read_in(feBlend, value);
-            if (input != feBlend->in2) {
-                feBlend->in2 = input;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        default:
-            if (((SPObjectClass *) feBlend_parent_class)->set)
-                ((SPObjectClass *) feBlend_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & SP_OBJECT_MODIFIED_FLAG) {
-        sp_object_read_attr(object, "mode");
-        sp_object_read_attr(object, "in2");
-    }
-
-    if (((SPObjectClass *) feBlend_parent_class)->update) {
-        ((SPObjectClass *) feBlend_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feBlend_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            // repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feBlend_parent_class)->write) {
-        ((SPObjectClass *) feBlend_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feBlend_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeBlend *sp_blend = SP_FEBLEND(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_BLEND);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterBlend *nr_blend = dynamic_cast<NR::FilterBlend*>(nr_primitive);
-    g_assert(nr_blend != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_blend->set_mode(sp_blend->blend_mode);
-    nr_blend->set_input(1, sp_blend->in2);
-}
-
-/*
-  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/sp-feblend.h b/src/sp-feblend.h
deleted file mode 100644 (file)
index f6f71b8..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef SP_FEBLEND_H_SEEN
-#define SP_FEBLEND_H_SEEN
-
-/** \file
- * SVG <feBlend> implementation, see sp-feBlend.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *
- * Copyright (C) 2006,2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-feblend-fns.h"
-
-#include "display/nr-filter-blend.h"
-
-/* FeBlend base class */
-class SPFeBlendClass;
-
-struct SPFeBlend : public SPFilterPrimitive {
-    /** BLEND ATTRIBUTES HERE */
-    NR::FilterBlendMode blend_mode;
-    int in2;
-};
-
-struct SPFeBlendClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feBlend_get_type();
-
-
-#endif /* !SP_FEBLEND_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/sp-fecolormatrix-fns.h b/src/sp-fecolormatrix-fns.h
deleted file mode 100644 (file)
index 3a4a8d3..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FECOLORMATRIX_FNS_H
-#define SP_FECOLORMATRIX_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeColorMatrix;
-
-#define SP_TYPE_FECOLORMATRIX (sp_feColorMatrix_get_type())
-#define SP_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOLORMATRIX, SPFeColorMatrix))
-#define SP_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOLORMATRIX, SPFeColorMatrixClass))
-#define SP_IS_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOLORMATRIX))
-#define SP_IS_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOLORMATRIX))
-
-GType sp_feColorMatrix_get_type();
-
-#endif /* !SP_FECOLORMATRIX_FNS_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/sp-fecolormatrix.cpp b/src/sp-fecolormatrix.cpp
deleted file mode 100644 (file)
index 181b7cd..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-#define __SP_FECOLORMATRIX_CPP__
-
-/** \file
- * SVG <feColorMatrix> implementation.
- *
- */
-/*
- * Authors:
- *   Felipe Sanches <felipe.sanches@gmail.com>
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2007 Felipe C. da S. Sanches
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-fecolormatrix.h"
-#include "xml/repr.h"
-#include "helper-fns.h"
-
-#include "display/nr-filter-colormatrix.h"
-
-/* FeColorMatrix base class */
-
-static void sp_feColorMatrix_class_init(SPFeColorMatrixClass *klass);
-static void sp_feColorMatrix_init(SPFeColorMatrix *feColorMatrix);
-
-static void sp_feColorMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feColorMatrix_release(SPObject *object);
-static void sp_feColorMatrix_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feColorMatrix_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feColorMatrix_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feColorMatrix_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feColorMatrix_parent_class;
-
-GType
-sp_feColorMatrix_get_type()
-{
-    static GType feColorMatrix_type = 0;
-
-    if (!feColorMatrix_type) {
-        GTypeInfo feColorMatrix_info = {
-            sizeof(SPFeColorMatrixClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feColorMatrix_class_init,
-            NULL, NULL,
-            sizeof(SPFeColorMatrix),
-            16,
-            (GInstanceInitFunc) sp_feColorMatrix_init,
-            NULL,    /* value_table */
-        };
-        feColorMatrix_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeColorMatrix", &feColorMatrix_info, (GTypeFlags)0);
-    }
-    return feColorMatrix_type;
-}
-
-static void
-sp_feColorMatrix_class_init(SPFeColorMatrixClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feColorMatrix_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feColorMatrix_build;
-    sp_object_class->release = sp_feColorMatrix_release;
-    sp_object_class->write = sp_feColorMatrix_write;
-    sp_object_class->set = sp_feColorMatrix_set;
-    sp_object_class->update = sp_feColorMatrix_update;
-    sp_primitive_class->build_renderer = sp_feColorMatrix_build_renderer;
-}
-
-static void
-sp_feColorMatrix_init(SPFeColorMatrix */*feColorMatrix*/)
-{
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeColorMatrix variables.  For this to get called,
- * 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_feColorMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feColorMatrix_parent_class)->build) {
-        ((SPObjectClass *) feColorMatrix_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "type");
-    sp_object_read_attr(object, "values");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feColorMatrix_release(SPObject *object)
-{
-    if (((SPObjectClass *) feColorMatrix_parent_class)->release)
-        ((SPObjectClass *) feColorMatrix_parent_class)->release(object);
-}
-
-static NR::FilterColorMatrixType sp_feColorMatrix_read_type(gchar const *value){
-    if (!value) return NR::COLORMATRIX_MATRIX; //matrix is default
-    switch(value[0]){
-        case 'm':
-            if (strcmp(value, "matrix") == 0) return NR::COLORMATRIX_MATRIX;
-            break;
-        case 's':
-            if (strcmp(value, "saturate") == 0) return NR::COLORMATRIX_SATURATE;
-            break;
-        case 'h':
-            if (strcmp(value, "hueRotate") == 0) return NR::COLORMATRIX_HUEROTATE;
-            break;
-        case 'l':
-            if (strcmp(value, "luminanceToAlpha") == 0) return NR::COLORMATRIX_LUMINANCETOALPHA;
-            break;
-    }
-    return NR::COLORMATRIX_MATRIX; //matrix is default
-}
-
-/**
- * Sets a specific value in the SPFeColorMatrix.
- */
-static void
-sp_feColorMatrix_set(SPObject *object, unsigned int key, gchar const *str)
-{
-    SPFeColorMatrix *feColorMatrix = SP_FECOLORMATRIX(object);
-    (void)feColorMatrix;
-
-    NR::FilterColorMatrixType read_type;
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-    switch(key) {
-        case SP_ATTR_TYPE:
-            read_type = sp_feColorMatrix_read_type(str);
-            if (feColorMatrix->type != read_type){
-                feColorMatrix->type = read_type;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_VALUES:
-            if (str){
-                feColorMatrix->values = helperfns_read_vector(str, 20);
-                feColorMatrix->value = helperfns_read_number(str, HELPERFNS_NO_WARNING);
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        default:
-            if (((SPObjectClass *) feColorMatrix_parent_class)->set)
-                ((SPObjectClass *) feColorMatrix_parent_class)->set(object, key, str);
-            break;
-    }
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feColorMatrix_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feColorMatrix_parent_class)->update) {
-        ((SPObjectClass *) feColorMatrix_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feColorMatrix_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feColorMatrix_parent_class)->write) {
-        ((SPObjectClass *) feColorMatrix_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feColorMatrix_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeColorMatrix *sp_colormatrix = SP_FECOLORMATRIX(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_COLORMATRIX);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterColorMatrix *nr_colormatrix = dynamic_cast<NR::FilterColorMatrix*>(nr_primitive);
-    g_assert(nr_colormatrix != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-    nr_colormatrix->set_type(sp_colormatrix->type);
-    nr_colormatrix->set_value(sp_colormatrix->value);
-    nr_colormatrix->set_values(sp_colormatrix->values);
-}
-
-/*
-  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/sp-fecolormatrix.h b/src/sp-fecolormatrix.h
deleted file mode 100644 (file)
index e091a07..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef SP_FECOLORMATRIX_H_SEEN
-#define SP_FECOLORMATRIX_H_SEEN
-
-/** \file
- * SVG <feColorMatrix> implementation, see sp-feColorMatrix.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-fecolormatrix-fns.h"
-#include "display/nr-filter-colormatrix.h"
-#include <vector>
-
-/* FeColorMatrix base class */
-class SPFeColorMatrixClass;
-
-struct SPFeColorMatrix : public SPFilterPrimitive {
-    /** COLORMATRIX ATTRIBUTES HERE */
-    NR::FilterColorMatrixType type;
-    gdouble value;
-    std::vector<gdouble> values;
-};
-
-struct SPFeColorMatrixClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feColorMatrix_get_type();
-
-
-#endif /* !SP_FECOLORMATRIX_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/sp-fecomponenttransfer-fns.h b/src/sp-fecomponenttransfer-fns.h
deleted file mode 100644 (file)
index 4998377..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FECOMPONENTTRANSFER_FNS_H
-#define SP_FECOMPONENTTRANSFER_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeComponentTransfer;
-
-#define SP_TYPE_FECOMPONENTTRANSFER (sp_feComponentTransfer_get_type())
-#define SP_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransfer))
-#define SP_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPONENTTRANSFER, SPFeComponentTransferClass))
-#define SP_IS_FECOMPONENTTRANSFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPONENTTRANSFER))
-#define SP_IS_FECOMPONENTTRANSFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPONENTTRANSFER))
-
-GType sp_feComponentTransfer_get_type();
-
-#endif /* !SP_FECOMPONENTTRANSFER_FNS_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/sp-fecomponenttransfer-funcnode.cpp b/src/sp-fecomponenttransfer-funcnode.cpp
deleted file mode 100644 (file)
index 91194a3..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-#define __SP_FEFUNCNODE_CPP__
-
-/** \file
- * SVG <funcR>, <funcG>, <funcB> and <funcA> implementations.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
- *
- * Copyright (C) 2006, 2007, 2008 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <glib.h>
-
-#include "attributes.h"
-#include "document.h"
-#include "sp-fecomponenttransfer.h"
-#include "sp-fecomponenttransfer-funcnode.h"
-#include "display/nr-filter-component-transfer.h"
-#include "xml/repr.h"
-#include "helper-fns.h"
-
-#define SP_MACROS_SILENT
-#include "macros.h"
-
-/* FeFuncNode class */
-
-static void sp_fefuncnode_class_init(SPFeFuncNodeClass *klass);
-static void sp_fefuncnode_init(SPFeFuncNode *fefuncnode);
-
-static void sp_fefuncnode_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_fefuncnode_release(SPObject *object);
-static void sp_fefuncnode_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_fefuncnode_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_fefuncnode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static SPObjectClass *feFuncNode_parent_class;
-
-GType
-sp_fefuncR_get_type()
-{
-    static GType fefuncnode_type = 0;
-
-    if (!fefuncnode_type) {
-        GTypeInfo fefuncnode_info = {
-            sizeof(SPFeFuncNodeClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_fefuncnode_class_init,
-            NULL, NULL,
-            sizeof(SPFeFuncNode),
-            16,
-            (GInstanceInitFunc) sp_fefuncnode_init,
-            NULL,    /* value_table */
-        };
-        fefuncnode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFuncR", &fefuncnode_info, (GTypeFlags)0);
-    }
-    return fefuncnode_type;
-}
-
-GType
-sp_fefuncG_get_type()
-{
-    static GType fefuncnode_type = 0;
-
-    if (!fefuncnode_type) {
-        GTypeInfo fefuncnode_info = {
-            sizeof(SPFeFuncNodeClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_fefuncnode_class_init,
-            NULL, NULL,
-            sizeof(SPFeFuncNode),
-            16,
-            (GInstanceInitFunc) sp_fefuncnode_init,
-            NULL,    /* value_table */
-        };
-        fefuncnode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFuncG", &fefuncnode_info, (GTypeFlags)0);
-    }
-    return fefuncnode_type;
-}
-
-GType
-sp_fefuncB_get_type()
-{
-    static GType fefuncnode_type = 0;
-
-    if (!fefuncnode_type) {
-        GTypeInfo fefuncnode_info = {
-            sizeof(SPFeFuncNodeClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_fefuncnode_class_init,
-            NULL, NULL,
-            sizeof(SPFeFuncNode),
-            16,
-            (GInstanceInitFunc) sp_fefuncnode_init,
-            NULL,    /* value_table */
-        };
-        fefuncnode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFuncB", &fefuncnode_info, (GTypeFlags)0);
-    }
-    return fefuncnode_type;
-}
-
-GType
-sp_fefuncA_get_type()
-{
-    static GType fefuncnode_type = 0;
-
-    if (!fefuncnode_type) {
-        GTypeInfo fefuncnode_info = {
-            sizeof(SPFeFuncNodeClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_fefuncnode_class_init,
-            NULL, NULL,
-            sizeof(SPFeFuncNode),
-            16,
-            (GInstanceInitFunc) sp_fefuncnode_init,
-            NULL,    /* value_table */
-        };
-        fefuncnode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFuncA", &fefuncnode_info, (GTypeFlags)0);
-    }
-    return fefuncnode_type;
-}
-
-static void
-sp_fefuncnode_class_init(SPFeFuncNodeClass *klass)
-{
-
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-
-    feFuncNode_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_fefuncnode_build;
-    sp_object_class->release = sp_fefuncnode_release;
-    sp_object_class->write = sp_fefuncnode_write;
-    sp_object_class->set = sp_fefuncnode_set;
-    sp_object_class->update = sp_fefuncnode_update;
-}
-
-static void
-sp_fefuncnode_init(SPFeFuncNode *fefuncnode)
-{
-    fefuncnode->type = NR::COMPONENTTRANSFER_TYPE_IDENTITY;
-    //fefuncnode->tableValues = NULL;
-    fefuncnode->slope = 1;
-    fefuncnode->intercept = 0;
-    fefuncnode->amplitude = 1;
-    fefuncnode->exponent = 1;
-    fefuncnode->offset = 0;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPDistantLight variables.  For this to get called,
- * 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_fefuncnode_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feFuncNode_parent_class)->build) {
-        ((SPObjectClass *) feFuncNode_parent_class)->build(object, document, repr);
-    }
-
-    //Read values of key attributes from XML nodes into object.
-    sp_object_read_attr(object, "type");
-    sp_object_read_attr(object, "tableValues");
-    sp_object_read_attr(object, "slope");
-    sp_object_read_attr(object, "intercept");
-    sp_object_read_attr(object, "amplitude");
-    sp_object_read_attr(object, "exponent");
-    sp_object_read_attr(object, "offset");
-
-
-//is this necessary?
-    sp_document_add_resource(document, "fefuncnode", object); //maybe feFuncR, fefuncG, feFuncB and fefuncA ?
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_fefuncnode_release(SPObject *object)
-{
-    //SPFeFuncNode *fefuncnode = SP_FEFUNCNODE(object);
-
-    if (SP_OBJECT_DOCUMENT(object)) {
-        /* Unregister ourselves */
-        sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fefuncnode", SP_OBJECT(object));
-    }
-
-//TODO: release resources here
-}
-
-static NR::FilterComponentTransferType sp_feComponenttransfer_read_type(gchar const *value){
-    if (!value) return NR::COMPONENTTRANSFER_TYPE_ERROR; //type attribute is REQUIRED.
-    switch(value[0]){
-        case 'i':
-            if (strncmp(value, "identity", 8) == 0) return NR::COMPONENTTRANSFER_TYPE_IDENTITY;
-            break;
-        case 't':
-            if (strncmp(value, "table", 5) == 0) return NR::COMPONENTTRANSFER_TYPE_TABLE;
-            break;
-        case 'd':
-            if (strncmp(value, "discrete", 8) == 0) return NR::COMPONENTTRANSFER_TYPE_DISCRETE;
-            break;
-        case 'l':
-            if (strncmp(value, "linear", 6) == 0) return NR::COMPONENTTRANSFER_TYPE_LINEAR;
-            break;
-        case 'g':
-            if (strncmp(value, "gamma", 5) == 0) return NR::COMPONENTTRANSFER_TYPE_GAMMA;
-            break;
-    }
-    return NR::COMPONENTTRANSFER_TYPE_ERROR; //type attribute is REQUIRED.
-}
-
-/**
- * Sets a specific value in the SPFeFuncNode.
- */
-static void
-sp_fefuncnode_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeFuncNode *feFuncNode = SP_FEFUNCNODE(object);
-    NR::FilterComponentTransferType type;
-    double read_num;
-    switch(key) {
-        case SP_ATTR_TYPE:
-            type = sp_feComponenttransfer_read_type(value);
-            if(type != feFuncNode->type) {
-                feFuncNode->type = type;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_TABLEVALUES:
-            if (value){
-                feFuncNode->tableValues = helperfns_read_vector(value);
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_SLOPE:
-            read_num = helperfns_read_number(value);
-            if (read_num != feFuncNode->slope) {
-                feFuncNode->slope = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_INTERCEPT:
-            read_num = helperfns_read_number(value);
-            if (read_num != feFuncNode->intercept) {
-                feFuncNode->intercept = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_AMPLITUDE:
-            read_num = helperfns_read_number(value);
-            if (read_num != feFuncNode->amplitude) {
-                feFuncNode->amplitude = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_EXPONENT:
-            read_num = helperfns_read_number(value);
-            if (read_num != feFuncNode->exponent) {
-                feFuncNode->exponent = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_OFFSET:
-            read_num = helperfns_read_number(value);
-            if (read_num != feFuncNode->offset) {
-                feFuncNode->offset = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        default:
-            if (((SPObjectClass *) feFuncNode_parent_class)->set)
-                ((SPObjectClass *) feFuncNode_parent_class)->set(object, key, value);
-            break;
-    }
-}
-
-/**
- *  * Receives update notifications.
- *   */
-static void
-sp_fefuncnode_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    SPFeFuncNode *feFuncNode = SP_FEFUNCNODE(object);
-    (void)feFuncNode;
-
-    if (flags & SP_OBJECT_MODIFIED_FLAG) {
-        /* do something to trigger redisplay, updates? */
-        //TODO
-        //sp_object_read_attr(object, "azimuth");
-        //sp_object_read_attr(object, "elevation");
-    }
-
-    if (((SPObjectClass *) feFuncNode_parent_class)->update) {
-        ((SPObjectClass *) feFuncNode_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_fefuncnode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    SPFeFuncNode *fefuncnode = SP_FEFUNCNODE(object);
-
-    if (!repr) {
-        repr = SP_OBJECT_REPR(object)->duplicate(doc);
-    }
-
-    (void)fefuncnode;
-    /*
-TODO: I'm not sure what to do here...
-
-    if (fefuncnode->azimuth_set)
-        sp_repr_set_css_double(repr, "azimuth", fefuncnode->azimuth);
-    if (fefuncnode->elevation_set)
-        sp_repr_set_css_double(repr, "elevation", fefuncnode->elevation);*/
-
-    if (((SPObjectClass *) feFuncNode_parent_class)->write) {
-        ((SPObjectClass *) feFuncNode_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-/*
-  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/sp-fecomponenttransfer-funcnode.h b/src/sp-fecomponenttransfer-funcnode.h
deleted file mode 100644 (file)
index 2f0b2fc..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef SP_FECOMPONENTTRANSFER_FUNCNODE_H_SEEN
-#define SP_FECOMPONENTTRANSFER_FUNCNODE_H_SEEN
-
-/** \file
- * SVG <filter> implementation, see sp-filter.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
- *
- * Copyright (C) 2006,2007 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-object.h"
-#include "display/nr-filter-component-transfer.h"
-
-#define SP_TYPE_FEFUNCR (sp_fefuncR_get_type())
-#define SP_TYPE_FEFUNCG (sp_fefuncG_get_type())
-#define SP_TYPE_FEFUNCB (sp_fefuncB_get_type())
-#define SP_TYPE_FEFUNCA (sp_fefuncA_get_type())
-
-#define SP_IS_FEFUNCR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCR))
-#define SP_IS_FEFUNCG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCG))
-#define SP_IS_FEFUNCB(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCB))
-#define SP_IS_FEFUNCA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFUNCA))
-
-#define SP_FEFUNCNODE(obj) (SP_IS_FEFUNCR(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCR, SPFeFuncNode) : (SP_IS_FEFUNCG(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCG, SPFeFuncNode) : (SP_IS_FEFUNCB(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCB, SPFeFuncNode):(SP_IS_FEFUNCA(obj) ? G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFUNCA, SPFeFuncNode): NULL))))
-
-#define SP_FEFUNCNODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFUNCNODE, SPFeFuncNodeClass))
-
-#define SP_IS_FEFUNCNODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFUNCNODE))
-
-/* Component Transfer funcNode class */
-
-class SPFeFuncNode;
-class SPFeFuncNodeClass;
-
-struct SPFeFuncNode : public SPObject {
-    NR::FilterComponentTransferType type;
-    std::vector<double> tableValues;
-    double slope;
-    double intercept;
-    double amplitude;
-    double exponent;
-    double offset;
-};
-
-struct SPFeFuncNodeClass {
-    SPObjectClass parent_class;
-};
-
-GType sp_fefuncR_get_type();
-GType sp_fefuncG_get_type();
-GType sp_fefuncB_get_type();
-GType sp_fefuncA_get_type();
-
-#endif /* !SP_FECOMPONENTTRANSFER_FUNCNODE_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/sp-fecomponenttransfer.cpp b/src/sp-fecomponenttransfer.cpp
deleted file mode 100644 (file)
index e11f5ab..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-#define __SP_FECOMPONENTTRANSFER_CPP__
-
-/** \file
- * SVG <feComponentTransfer> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include "document.h"
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-fecomponenttransfer.h"
-#include "sp-fecomponenttransfer-funcnode.h"
-#include "xml/repr.h"
-//#include "display/nr-filter-component-transfer.h"
-
-/* FeComponentTransfer base class */
-
-static void sp_feComponentTransfer_class_init(SPFeComponentTransferClass *klass);
-static void sp_feComponentTransfer_init(SPFeComponentTransfer *feComponentTransfer);
-
-static void sp_feComponentTransfer_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feComponentTransfer_release(SPObject *object);
-static void sp_feComponentTransfer_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feComponentTransfer_update(SPObject *object, SPCtx *ctx, guint flags);
-static void sp_feComponentTransfer_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-static void sp_feComponentTransfer_remove_child(SPObject *object, Inkscape::XML::Node *child);
-static void sp_feComponentTransfer_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
-static Inkscape::XML::Node *sp_feComponentTransfer_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static SPFilterPrimitiveClass *feComponentTransfer_parent_class;
-
-GType
-sp_feComponentTransfer_get_type()
-{
-    static GType feComponentTransfer_type = 0;
-
-    if (!feComponentTransfer_type) {
-        GTypeInfo feComponentTransfer_info = {
-            sizeof(SPFeComponentTransferClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feComponentTransfer_class_init,
-            NULL, NULL,
-            sizeof(SPFeComponentTransfer),
-            16,
-            (GInstanceInitFunc) sp_feComponentTransfer_init,
-            NULL,    /* value_table */
-        };
-        feComponentTransfer_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeComponentTransfer", &feComponentTransfer_info, (GTypeFlags)0);
-    }
-    return feComponentTransfer_type;
-}
-
-static void
-sp_feComponentTransfer_class_init(SPFeComponentTransferClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-    feComponentTransfer_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feComponentTransfer_build;
-    sp_object_class->release = sp_feComponentTransfer_release;
-    sp_object_class->write = sp_feComponentTransfer_write;
-    sp_object_class->set = sp_feComponentTransfer_set;
-    sp_object_class->update = sp_feComponentTransfer_update;
-    sp_object_class->child_added = sp_feComponentTransfer_child_added;
-    sp_object_class->remove_child = sp_feComponentTransfer_remove_child;
-
-    sp_primitive_class->build_renderer = sp_feComponentTransfer_build_renderer;
-}
-
-static void
-sp_feComponentTransfer_init(SPFeComponentTransfer */*feComponentTransfer*/)
-{}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeComponentTransfer variables.  For this to get called,
- * 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_feComponentTransfer_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feComponentTransfer_parent_class)->build) {
-        ((SPObjectClass *) feComponentTransfer_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-
-    //do we need this?
-    sp_document_add_resource(document, "feComponentTransfer", object);
-}
-
-static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_componenttransfer)
-{
-    if (sp_componenttransfer->renderer) {
-        SPObject* node = sp_componenttransfer->children;
-        for(;node;node=node->next){
-            int i=4;
-            if (SP_IS_FEFUNCR(node)) i=0;
-            if (SP_IS_FEFUNCG(node)) i=1;
-            if (SP_IS_FEFUNCB(node)) i=2;
-            if (SP_IS_FEFUNCA(node)) i=3;
-            if (i==4) break;
-            sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) node)->type;
-            sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) node)->tableValues;
-            sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) node)->slope;
-            sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) node)->intercept;
-            sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) node)->amplitude;
-            sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) node)->exponent;
-            sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) node)->offset;
-        }
-    }
-}
-
-/**
- * Callback for child_added event.
- */
-static void
-sp_feComponentTransfer_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
-{
-    g_warning("child_added");
-    SPFeComponentTransfer *f = SP_FECOMPONENTTRANSFER(object);
-
-    if (((SPObjectClass *) feComponentTransfer_parent_class)->child_added)
-        (* ((SPObjectClass *) feComponentTransfer_parent_class)->child_added)(object, child, ref);
-
-    sp_feComponentTransfer_children_modified(f);
-    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-
-
-/**
- * Callback for remove_child event.
- */
-static void
-sp_feComponentTransfer_remove_child(SPObject *object, Inkscape::XML::Node *child)
-{
-    SPFeComponentTransfer *f = SP_FECOMPONENTTRANSFER(object);
-
-    if (((SPObjectClass *) feComponentTransfer_parent_class)->remove_child)
-        (* ((SPObjectClass *) feComponentTransfer_parent_class)->remove_child)(object, child);
-
-    sp_feComponentTransfer_children_modified(f);
-    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feComponentTransfer_release(SPObject *object)
-{
-    if (((SPObjectClass *) feComponentTransfer_parent_class)->release)
-        ((SPObjectClass *) feComponentTransfer_parent_class)->release(object);
-}
-
-/**
- * Sets a specific value in the SPFeComponentTransfer.
- */
-static void
-sp_feComponentTransfer_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeComponentTransfer *feComponentTransfer = SP_FECOMPONENTTRANSFER(object);
-    (void)feComponentTransfer;
-
-    switch(key) {
-        /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        default:
-            if (((SPObjectClass *) feComponentTransfer_parent_class)->set)
-                ((SPObjectClass *) feComponentTransfer_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feComponentTransfer_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feComponentTransfer_parent_class)->update) {
-        ((SPObjectClass *) feComponentTransfer_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feComponentTransfer_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feComponentTransfer_parent_class)->write) {
-        ((SPObjectClass *) feComponentTransfer_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feComponentTransfer_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeComponentTransfer *sp_componenttransfer = SP_FECOMPONENTTRANSFER(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_COMPONENTTRANSFER);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterComponentTransfer *nr_componenttransfer = dynamic_cast<NR::FilterComponentTransfer*>(nr_primitive);
-    g_assert(nr_componenttransfer != NULL);
-
-    sp_componenttransfer->renderer = nr_componenttransfer;
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-
-    sp_feComponentTransfer_children_modified(sp_componenttransfer);    //do we need it?!
-}
-
-/*
-  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/sp-fecomponenttransfer.h b/src/sp-fecomponenttransfer.h
deleted file mode 100644 (file)
index f32512c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef SP_FECOMPONENTTRANSFER_H_SEEN
-#define SP_FECOMPONENTTRANSFER_H_SEEN
-
-/** \file
- * SVG <feComponentTransfer> implementation, see sp-feComponentTransfer.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-fecomponenttransfer-fns.h"
-#include "display/nr-filter-component-transfer.h"
-#include <vector>
-
-/* FeComponentTransfer base class */
-class SPFeComponentTransferClass;
-
-struct SPFeComponentTransfer : public SPFilterPrimitive {
-    /** COMPONENTTRANSFER ATTRIBUTES HERE */
-
-    NR::FilterComponentTransfer *renderer;
-};
-
-struct SPFeComponentTransferClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feComponentTransfer_get_type();
-
-
-#endif /* !SP_FECOMPONENTTRANSFER_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/sp-fecomposite-fns.h b/src/sp-fecomposite-fns.h
deleted file mode 100644 (file)
index c79cb17..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FECOMPOSITE_FNS_H
-#define SP_FECOMPOSITE_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeComposite;
-
-#define SP_TYPE_FECOMPOSITE (sp_feComposite_get_type())
-#define SP_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPOSITE, SPFeComposite))
-#define SP_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPOSITE, SPFeCompositeClass))
-#define SP_IS_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPOSITE))
-#define SP_IS_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPOSITE))
-
-GType sp_feComposite_get_type();
-
-#endif /* !SP_FECOMPOSITE_FNS_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/sp-fecomposite.cpp b/src/sp-fecomposite.cpp
deleted file mode 100644 (file)
index 11d101b..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-#define __SP_FECOMPOSITE_CPP__
-
-/** \file
- * SVG <feComposite> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-fecomposite.h"
-#include "helper-fns.h"
-#include "xml/repr.h"
-#include "display/nr-filter-composite.h"
-
-/* FeComposite base class */
-
-static void sp_feComposite_class_init(SPFeCompositeClass *klass);
-static void sp_feComposite_init(SPFeComposite *feComposite);
-
-static void sp_feComposite_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feComposite_release(SPObject *object);
-static void sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feComposite_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feComposite_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feComposite_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feComposite_parent_class;
-
-GType
-sp_feComposite_get_type()
-{
-    static GType feComposite_type = 0;
-
-    if (!feComposite_type) {
-        GTypeInfo feComposite_info = {
-            sizeof(SPFeCompositeClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feComposite_class_init,
-            NULL, NULL,
-            sizeof(SPFeComposite),
-            16,
-            (GInstanceInitFunc) sp_feComposite_init,
-            NULL,    /* value_table */
-        };
-        feComposite_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeComposite", &feComposite_info, (GTypeFlags)0);
-    }
-    return feComposite_type;
-}
-
-static void
-sp_feComposite_class_init(SPFeCompositeClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feComposite_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feComposite_build;
-    sp_object_class->release = sp_feComposite_release;
-    sp_object_class->write = sp_feComposite_write;
-    sp_object_class->set = sp_feComposite_set;
-    sp_object_class->update = sp_feComposite_update;
-
-    sp_primitive_class->build_renderer = sp_feComposite_build_renderer;
-}
-
-static void
-sp_feComposite_init(SPFeComposite *feComposite)
-{
-    feComposite->composite_operator = COMPOSITE_DEFAULT;
-    feComposite->k1 = 0;
-    feComposite->k2 = 0;
-    feComposite->k3 = 0;
-    feComposite->k4 = 0;
-    feComposite->in2 = NR::NR_FILTER_SLOT_NOT_SET;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeComposite variables.  For this to get called,
- * 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_feComposite_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feComposite_parent_class)->build) {
-        ((SPObjectClass *) feComposite_parent_class)->build(object, document, repr);
-    }
-
-    SPFeComposite *composite = SP_FECOMPOSITE(object);
-
-    sp_object_read_attr(object, "operator");
-    if (composite->composite_operator == COMPOSITE_ARITHMETIC) {
-        sp_object_read_attr(object, "k1");
-        sp_object_read_attr(object, "k2");
-        sp_object_read_attr(object, "k3");
-        sp_object_read_attr(object, "k4");
-    }
-    sp_object_read_attr(object, "in2");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feComposite_release(SPObject *object)
-{
-    if (((SPObjectClass *) feComposite_parent_class)->release)
-        ((SPObjectClass *) feComposite_parent_class)->release(object);
-}
-
-static FeCompositeOperator
-sp_feComposite_read_operator(gchar const *value) {
-    if (!value) return COMPOSITE_DEFAULT;
-
-    if (strcmp(value, "over") == 0) return COMPOSITE_OVER;
-    else if (strcmp(value, "in") == 0) return COMPOSITE_IN;
-    else if (strcmp(value, "out") == 0) return COMPOSITE_OUT;
-    else if (strcmp(value, "atop") == 0) return COMPOSITE_ATOP;
-    else if (strcmp(value, "xor") == 0) return COMPOSITE_XOR;
-    else if (strcmp(value, "arithmetic") == 0) return COMPOSITE_ARITHMETIC;
-    return COMPOSITE_DEFAULT;
-}
-
-/**
- * Sets a specific value in the SPFeComposite.
- */
-static void
-sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeComposite *feComposite = SP_FECOMPOSITE(object);
-    (void)feComposite;
-
-    int input;
-    FeCompositeOperator op;
-    double k_n;
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        case SP_ATTR_OPERATOR:
-            op = sp_feComposite_read_operator(value);
-            if (op != feComposite->composite_operator) {
-                feComposite->composite_operator = op;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-
-        case SP_ATTR_K1:
-            k_n = helperfns_read_number(value);
-            if (k_n != feComposite->k1) {
-                feComposite->k1 = k_n;
-                if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
-                    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-
-        case SP_ATTR_K2:
-            k_n = helperfns_read_number(value);
-            if (k_n != feComposite->k2) {
-                feComposite->k2 = k_n;
-                if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
-                    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-
-        case SP_ATTR_K3:
-            k_n = helperfns_read_number(value);
-            if (k_n != feComposite->k3) {
-                feComposite->k3 = k_n;
-                if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
-                    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-
-        case SP_ATTR_K4:
-            k_n = helperfns_read_number(value);
-            if (k_n != feComposite->k4) {
-                feComposite->k4 = k_n;
-                if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
-                    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-
-        case SP_ATTR_IN2:
-            input = sp_filter_primitive_read_in(feComposite, value);
-            if (input != feComposite->in2) {
-                feComposite->in2 = input;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-
-        default:
-            if (((SPObjectClass *) feComposite_parent_class)->set)
-                ((SPObjectClass *) feComposite_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feComposite_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feComposite_parent_class)->update) {
-        ((SPObjectClass *) feComposite_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feComposite_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feComposite_parent_class)->write) {
-        ((SPObjectClass *) feComposite_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feComposite_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeComposite *sp_composite = SP_FECOMPOSITE(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_COMPOSITE);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterComposite *nr_composite = dynamic_cast<NR::FilterComposite*>(nr_primitive);
-    g_assert(nr_composite != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_composite->set_operator(sp_composite->composite_operator);
-    nr_composite->set_input(1, sp_composite->in2);
-    if (sp_composite->composite_operator == COMPOSITE_ARITHMETIC) {
-        nr_composite->set_arithmetic(sp_composite->k1, sp_composite->k2,
-                                     sp_composite->k3, sp_composite->k4);
-    }
-}
-
-
-/*
-  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/sp-fecomposite.h b/src/sp-fecomposite.h
deleted file mode 100644 (file)
index 280eae1..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef SP_FECOMPOSITE_H_SEEN
-#define SP_FECOMPOSITE_H_SEEN
-
-/** \file
- * SVG <feComposite> implementation, see sp-feComposite.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-fecomposite-fns.h"
-
-enum FeCompositeOperator {
-    // Default value is 'over', but let's distinquish specifying the
-    // default and implicitely using the default
-    COMPOSITE_DEFAULT,
-    COMPOSITE_OVER,
-    COMPOSITE_IN,
-    COMPOSITE_OUT,
-    COMPOSITE_ATOP,
-    COMPOSITE_XOR,
-    COMPOSITE_ARITHMETIC,
-    COMPOSITE_ENDOPERATOR
-};
-
-/* FeComposite base class */
-class SPFeCompositeClass;
-
-struct SPFeComposite : public SPFilterPrimitive {
-    FeCompositeOperator composite_operator;
-    double k1, k2, k3, k4;
-    int in2;
-};
-
-struct SPFeCompositeClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feComposite_get_type();
-
-
-#endif /* !SP_FECOMPOSITE_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/sp-feconvolvematrix-fns.h b/src/sp-feconvolvematrix-fns.h
deleted file mode 100644 (file)
index 76baf7f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FECONVOLVEMATRIX_FNS_H
-#define SP_FECONVOLVEMATRIX_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeConvolveMatrix;
-
-#define SP_TYPE_FECONVOLVEMATRIX (sp_feConvolveMatrix_get_type())
-#define SP_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrix))
-#define SP_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrixClass))
-#define SP_IS_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECONVOLVEMATRIX))
-#define SP_IS_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECONVOLVEMATRIX))
-
-GType sp_feConvolveMatrix_get_type();
-
-#endif /* !SP_FECONVOLVEMATRIX_FNS_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/sp-feconvolvematrix.cpp b/src/sp-feconvolvematrix.cpp
deleted file mode 100644 (file)
index 816c793..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-#define __SP_FECONVOLVEMATRIX_CPP__
-
-/** \file
- * SVG <feConvolveMatrix> implementation.
- *
- */
-/*
- * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include <vector>
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-feconvolvematrix.h"
-#include "helper-fns.h"
-#include "xml/repr.h"
-#include "display/nr-filter-convolve-matrix.h"
-#include <math.h>
-
-/* FeConvolveMatrix base class */
-
-static void sp_feConvolveMatrix_class_init(SPFeConvolveMatrixClass *klass);
-static void sp_feConvolveMatrix_init(SPFeConvolveMatrix *feConvolveMatrix);
-
-static void sp_feConvolveMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feConvolveMatrix_release(SPObject *object);
-static void sp_feConvolveMatrix_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feConvolveMatrix_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feConvolveMatrix_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feConvolveMatrix_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feConvolveMatrix_parent_class;
-
-GType
-sp_feConvolveMatrix_get_type()
-{
-    static GType feConvolveMatrix_type = 0;
-
-    if (!feConvolveMatrix_type) {
-        GTypeInfo feConvolveMatrix_info = {
-            sizeof(SPFeConvolveMatrixClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feConvolveMatrix_class_init,
-            NULL, NULL,
-            sizeof(SPFeConvolveMatrix),
-            16,
-            (GInstanceInitFunc) sp_feConvolveMatrix_init,
-            NULL,    /* value_table */
-        };
-        feConvolveMatrix_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeConvolveMatrix", &feConvolveMatrix_info, (GTypeFlags)0);
-    }
-    return feConvolveMatrix_type;
-}
-
-static void
-sp_feConvolveMatrix_class_init(SPFeConvolveMatrixClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feConvolveMatrix_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feConvolveMatrix_build;
-    sp_object_class->release = sp_feConvolveMatrix_release;
-    sp_object_class->write = sp_feConvolveMatrix_write;
-    sp_object_class->set = sp_feConvolveMatrix_set;
-    sp_object_class->update = sp_feConvolveMatrix_update;
-
-    sp_primitive_class->build_renderer = sp_feConvolveMatrix_build_renderer;
-}
-
-static void
-sp_feConvolveMatrix_init(SPFeConvolveMatrix *feConvolveMatrix)
-{
-    //Setting default values:
-    feConvolveMatrix->order.set("3 3");
-    feConvolveMatrix->targetX = 1;
-    feConvolveMatrix->targetY = 1;
-    feConvolveMatrix->edgeMode = NR::CONVOLVEMATRIX_EDGEMODE_DUPLICATE;
-    feConvolveMatrix->preserveAlpha = false;
-
-    //some helper variables:
-    feConvolveMatrix->targetXIsSet = false;
-    feConvolveMatrix->targetYIsSet = false;
-    feConvolveMatrix->kernelMatrixIsSet = false;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeConvolveMatrix variables.  For this to get called,
- * 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_feConvolveMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feConvolveMatrix_parent_class)->build) {
-        ((SPObjectClass *) feConvolveMatrix_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "order");
-    sp_object_read_attr(object, "kernelMatrix");
-    sp_object_read_attr(object, "divisor");
-    sp_object_read_attr(object, "bias");
-    sp_object_read_attr(object, "targetX");
-    sp_object_read_attr(object, "targetY");
-    sp_object_read_attr(object, "edgeMode");
-    sp_object_read_attr(object, "kernelUnitLength");
-    sp_object_read_attr(object, "preserveAlpha");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feConvolveMatrix_release(SPObject *object)
-{
-    if (((SPObjectClass *) feConvolveMatrix_parent_class)->release)
-        ((SPObjectClass *) feConvolveMatrix_parent_class)->release(object);
-}
-
-static NR::FilterConvolveMatrixEdgeMode sp_feConvolveMatrix_read_edgeMode(gchar const *value){
-    if (!value) return NR::CONVOLVEMATRIX_EDGEMODE_DUPLICATE; //duplicate is default
-    switch(value[0]){
-        case 'd':
-            if (strncmp(value, "duplicate", 9) == 0) return NR::CONVOLVEMATRIX_EDGEMODE_DUPLICATE;
-            break;
-        case 'w':
-            if (strncmp(value, "wrap", 4) == 0) return NR::CONVOLVEMATRIX_EDGEMODE_WRAP;
-            break;
-        case 'n':
-            if (strncmp(value, "none", 4) == 0) return NR::CONVOLVEMATRIX_EDGEMODE_NONE;
-            break;
-    }
-    return NR::CONVOLVEMATRIX_EDGEMODE_DUPLICATE; //duplicate is default
-}
-
-/**
- * Sets a specific value in the SPFeConvolveMatrix.
- */
-static void
-sp_feConvolveMatrix_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeConvolveMatrix *feConvolveMatrix = SP_FECONVOLVEMATRIX(object);
-    (void)feConvolveMatrix;
-    double read_num;
-    int read_int;
-    bool read_bool;
-    NR::FilterConvolveMatrixEdgeMode read_mode;
-   
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        case SP_ATTR_ORDER:
-            feConvolveMatrix->order.set(value);
-            //From SVG spec: If <orderY> is not provided, it defaults to <orderX>.
-            if (feConvolveMatrix->order.optNumIsSet() == false)
-                feConvolveMatrix->order.setOptNumber(feConvolveMatrix->order.getNumber());
-            if (feConvolveMatrix->targetXIsSet == false) feConvolveMatrix->targetX = (int) floor(feConvolveMatrix->order.getNumber()/2);
-            if (feConvolveMatrix->targetYIsSet == false) feConvolveMatrix->targetY = (int) floor(feConvolveMatrix->order.getOptNumber()/2);
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_KERNELMATRIX:
-            if (value){
-                feConvolveMatrix->kernelMatrixIsSet = true;
-                feConvolveMatrix->kernelMatrix = helperfns_read_vector(value, (int) (feConvolveMatrix->order.getNumber() * feConvolveMatrix->order.getOptNumber()));
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            } else {
-                g_warning("For feConvolveMatrix you MUST pass a kernelMatrix parameter!");
-            }
-            break;
-        case SP_ATTR_DIVISOR:
-            if (!value){
-                read_num = 1; 
-            } else {
-                read_num = helperfns_read_number(value);
-                if (read_num == 0) {
-                    if (feConvolveMatrix->kernelMatrixIsSet){
-                        g_warning("You shouldn't pass a divisor value equal to 0! Assuming the sum of all values in kernelMatrix as the default value.");
-                        for (unsigned int i = 0; i< feConvolveMatrix->kernelMatrix.size(); i++)
-                            read_num += feConvolveMatrix->kernelMatrix[i];
-                    } else {
-                        g_warning("You shouldn't pass a divisor value equal to 0! Assuming 1 as the default value.");
-                        read_num = 1;
-                    }
-                }
-            }
-            if (read_num != feConvolveMatrix->divisor){
-                feConvolveMatrix->divisor = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_BIAS:
-            read_num = 0;
-            if (value) read_num = helperfns_read_number(value);
-            if (read_num != feConvolveMatrix->bias){
-                feConvolveMatrix->bias = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_TARGETX:
-            read_int = (int) helperfns_read_number(value);
-            if (read_int < 0 || read_int > feConvolveMatrix->order.getNumber()){
-                g_warning("targetX must be a value between 0 and orderX! Assuming orderX as default value.");
-                read_int = (int) feConvolveMatrix->order.getNumber();
-            }
-            feConvolveMatrix->targetXIsSet = true;
-            if (read_int != feConvolveMatrix->targetX){
-                feConvolveMatrix->targetX = read_int;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_TARGETY:
-            read_int = (int) helperfns_read_number(value);
-            if (read_int < 0 || read_int > feConvolveMatrix->order.getOptNumber()){
-                g_warning("targetY must be a value between 0 and orderY! Assuming orderY as default value.");
-                read_int = (int) feConvolveMatrix->order.getOptNumber();
-            }
-            feConvolveMatrix->targetYIsSet = true;
-            if (read_int != feConvolveMatrix->targetY){
-                feConvolveMatrix->targetY = read_int;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_EDGEMODE:
-            read_mode = sp_feConvolveMatrix_read_edgeMode(value);
-            if (read_mode != feConvolveMatrix->edgeMode){
-                feConvolveMatrix->edgeMode = read_mode;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_KERNELUNITLENGTH:
-            feConvolveMatrix->kernelUnitLength.set(value);
-            //From SVG spec: If the <dy> value is not specified, it defaults to the same value as <dx>.
-            if (feConvolveMatrix->kernelUnitLength.optNumIsSet() == false)
-                feConvolveMatrix->kernelUnitLength.setOptNumber(feConvolveMatrix->kernelUnitLength.getNumber());
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_PRESERVEALPHA:
-            read_bool = helperfns_read_bool(value, false);
-            if (read_bool != feConvolveMatrix->preserveAlpha){
-                feConvolveMatrix->preserveAlpha = read_bool;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        default:
-            if (((SPObjectClass *) feConvolveMatrix_parent_class)->set)
-                ((SPObjectClass *) feConvolveMatrix_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feConvolveMatrix_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feConvolveMatrix_parent_class)->update) {
-        ((SPObjectClass *) feConvolveMatrix_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feConvolveMatrix_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feConvolveMatrix_parent_class)->write) {
-        ((SPObjectClass *) feConvolveMatrix_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feConvolveMatrix_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeConvolveMatrix *sp_convolve = SP_FECONVOLVEMATRIX(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_CONVOLVEMATRIX);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterConvolveMatrix *nr_convolve = dynamic_cast<NR::FilterConvolveMatrix*>(nr_primitive);
-    g_assert(nr_convolve != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_convolve->set_targetX(sp_convolve->targetX);
-    nr_convolve->set_targetY(sp_convolve->targetY);
-    nr_convolve->set_orderX( (int)sp_convolve->order.getNumber() );
-    nr_convolve->set_orderY( (int)sp_convolve->order.getOptNumber() );
-    nr_convolve->set_kernelMatrix(sp_convolve->kernelMatrix);
-    nr_convolve->set_divisor(sp_convolve->divisor);
-    nr_convolve->set_bias(sp_convolve->bias);
-    nr_convolve->set_preserveAlpha(sp_convolve->preserveAlpha);
-
-}
-/*
-  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/sp-feconvolvematrix.h b/src/sp-feconvolvematrix.h
deleted file mode 100644 (file)
index 2cdeee2..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef SP_FECONVOLVEMATRIX_H_SEEN
-#define SP_FECONVOLVEMATRIX_H_SEEN
-
-/** \file
- * SVG <feConvolveMatrix> implementation, see sp-feConvolveMatrix.cpp.
- */
-/*
- * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-feconvolvematrix-fns.h"
-#include "number-opt-number.h"
-#include "display/nr-filter-convolve-matrix.h"
-#include <vector>
-
-/* FeConvolveMatrix base class */
-class SPFeConvolveMatrixClass;
-
-struct SPFeConvolveMatrix : public SPFilterPrimitive {
-    /* CONVOLVEMATRIX ATTRIBUTES */
-    NumberOptNumber order;
-    std::vector<gdouble> kernelMatrix;
-    double divisor, bias;
-    int targetX, targetY;
-    NR::FilterConvolveMatrixEdgeMode edgeMode;
-    NumberOptNumber kernelUnitLength;
-    bool preserveAlpha;
-    //some helper variables:
-    bool targetXIsSet;
-    bool targetYIsSet;
-    bool divisorIsSet;
-    bool kernelMatrixIsSet;
-};
-
-struct SPFeConvolveMatrixClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feConvolveMatrix_get_type();
-
-
-#endif /* !SP_FECONVOLVEMATRIX_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/sp-fediffuselighting-fns.h b/src/sp-fediffuselighting-fns.h
deleted file mode 100644 (file)
index b91ed80..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FEDIFFUSELIGHTING_FNS_H
-#define SP_FEDIFFUSELIGHTING_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeDiffuseLighting;
-
-#define SP_TYPE_FEDIFFUSELIGHTING (sp_feDiffuseLighting_get_type())
-#define SP_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLighting))
-#define SP_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLightingClass))
-#define SP_IS_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDIFFUSELIGHTING))
-#define SP_IS_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDIFFUSELIGHTING))
-
-GType sp_feDiffuseLighting_get_type();
-
-#endif /* !SP_FEDIFFUSELIGHTING_FNS_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/sp-fediffuselighting.cpp b/src/sp-fediffuselighting.cpp
deleted file mode 100644 (file)
index 96dee56..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-#define __SP_FEDIFFUSELIGHTING_CPP__
-
-/** \file
- * SVG <feDiffuseLighting> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *               2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-object.h"
-#include "svg/svg-color.h"
-#include "sp-fediffuselighting.h"
-#include "xml/repr.h"
-#include "display/nr-filter-diffuselighting.h"
-
-/* FeDiffuseLighting base class */
-
-static void sp_feDiffuseLighting_class_init(SPFeDiffuseLightingClass *klass);
-static void sp_feDiffuseLighting_init(SPFeDiffuseLighting *feDiffuseLighting);
-
-static void sp_feDiffuseLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feDiffuseLighting_release(SPObject *object);
-static void sp_feDiffuseLighting_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feDiffuseLighting_update(SPObject *object, SPCtx *ctx, guint flags);
-//we assume that svg:feDiffuseLighting can have any number of children
-//only the first one is considered as the light source of the filter
-//TODO is that right?
-//if not modify child_added and remove_child to raise errors
-static void sp_feDiffuseLighting_child_added(SPObject *object,
-                                    Inkscape::XML::Node *child,
-                                    Inkscape::XML::Node *ref);
-static void sp_feDiffuseLighting_remove_child(SPObject *object, Inkscape::XML::Node *child);
-static void sp_feDiffuseLighting_order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref);
-static Inkscape::XML::Node *sp_feDiffuseLighting_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feDiffuseLighting_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-static void sp_feDiffuseLighting_children_modified(SPFeDiffuseLighting *sp_diffuselighting);
-
-static SPFilterPrimitiveClass *feDiffuseLighting_parent_class;
-
-GType
-sp_feDiffuseLighting_get_type()
-{
-    static GType feDiffuseLighting_type = 0;
-
-    if (!feDiffuseLighting_type) {
-        GTypeInfo feDiffuseLighting_info = {
-            sizeof(SPFeDiffuseLightingClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feDiffuseLighting_class_init,
-            NULL, NULL,
-            sizeof(SPFeDiffuseLighting),
-            16,
-            (GInstanceInitFunc) sp_feDiffuseLighting_init,
-            NULL,    /* value_table */
-        };
-        feDiffuseLighting_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeDiffuseLighting", &feDiffuseLighting_info, (GTypeFlags)0);
-    }
-    return feDiffuseLighting_type;
-}
-
-static void
-sp_feDiffuseLighting_class_init(SPFeDiffuseLightingClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-    feDiffuseLighting_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feDiffuseLighting_build;
-    sp_object_class->release = sp_feDiffuseLighting_release;
-    sp_object_class->write = sp_feDiffuseLighting_write;
-    sp_object_class->set = sp_feDiffuseLighting_set;
-    sp_object_class->update = sp_feDiffuseLighting_update;
-    sp_object_class->child_added = sp_feDiffuseLighting_child_added;
-    sp_object_class->remove_child = sp_feDiffuseLighting_remove_child;
-    sp_object_class->order_changed = sp_feDiffuseLighting_order_changed;
-
-    sp_primitive_class->build_renderer = sp_feDiffuseLighting_build_renderer;
-}
-
-static void
-sp_feDiffuseLighting_init(SPFeDiffuseLighting *feDiffuseLighting)
-{
-    feDiffuseLighting->surfaceScale = 1;
-    feDiffuseLighting->diffuseConstant = 1;
-    feDiffuseLighting->lighting_color = 0xffffffff;
-    //TODO kernelUnit
-    feDiffuseLighting->renderer = NULL;
-
-    feDiffuseLighting->surfaceScale_set = FALSE;
-    feDiffuseLighting->diffuseConstant_set = FALSE;
-    feDiffuseLighting->lighting_color_set = FALSE;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeDiffuseLighting variables.  For this to get called,
- * 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_feDiffuseLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feDiffuseLighting_parent_class)->build) {
-        ((SPObjectClass *) feDiffuseLighting_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "surfaceScale");
-    sp_object_read_attr(object, "diffuseConstant");
-    sp_object_read_attr(object, "kernelUnitLength");
-    sp_object_read_attr(object, "lighting-color");
-    
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feDiffuseLighting_release(SPObject *object)
-{
-    if (((SPObjectClass *) feDiffuseLighting_parent_class)->release)
-        ((SPObjectClass *) feDiffuseLighting_parent_class)->release(object);
-}
-
-/**
- * Sets a specific value in the SPFeDiffuseLighting.
- */
-static void
-sp_feDiffuseLighting_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeDiffuseLighting *feDiffuseLighting = SP_FEDIFFUSELIGHTING(object);
-    gchar const *cend_ptr = NULL;
-    gchar *end_ptr = NULL;
-    
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-//TODO test forbidden values
-        case SP_ATTR_SURFACESCALE:
-            end_ptr = NULL;
-            if (value) {
-                feDiffuseLighting->surfaceScale = g_ascii_strtod(value, &end_ptr);
-                if (end_ptr) {
-                    feDiffuseLighting->surfaceScale_set = TRUE;
-                }
-            } 
-            if (!value || !end_ptr) {
-                feDiffuseLighting->surfaceScale = 1;
-                feDiffuseLighting->surfaceScale_set = FALSE;
-            }
-            if (feDiffuseLighting->renderer) {
-                feDiffuseLighting->renderer->surfaceScale = feDiffuseLighting->surfaceScale;
-            }
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_DIFFUSECONSTANT:
-            end_ptr = NULL;
-            if (value) {
-                feDiffuseLighting->diffuseConstant = g_ascii_strtod(value, &end_ptr);
-                if (end_ptr && feDiffuseLighting->diffuseConstant >= 0) {
-                    feDiffuseLighting->diffuseConstant_set = TRUE;
-                } else {
-                    end_ptr = NULL;
-                    g_warning("feDiffuseLighting: diffuseConstant should be a positive number ... defaulting to 1");
-                }
-            } 
-            if (!value || !end_ptr) {
-                feDiffuseLighting->diffuseConstant = 1;
-                feDiffuseLighting->diffuseConstant_set = FALSE;
-            }
-            if (feDiffuseLighting->renderer) {
-                feDiffuseLighting->renderer->diffuseConstant = feDiffuseLighting->diffuseConstant;
-    }
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_KERNELUNITLENGTH:
-            //TODO kernelUnit
-            //feDiffuseLighting->kernelUnitLength.set(value);
-            /*TODOif (feDiffuseLighting->renderer) {
-                feDiffuseLighting->renderer->surfaceScale = feDiffuseLighting->renderer;
-            }
-            */
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_PROP_LIGHTING_COLOR:
-            cend_ptr = NULL;
-            feDiffuseLighting->lighting_color = sp_svg_read_color(value, &cend_ptr, 0xffffffff);
-            //if a value was read
-            if (cend_ptr) {
-                feDiffuseLighting->lighting_color_set = TRUE; 
-            } else {
-                //lighting_color already contains the default value
-                feDiffuseLighting->lighting_color_set = FALSE; 
-            }
-            if (feDiffuseLighting->renderer) {
-                feDiffuseLighting->renderer->lighting_color = feDiffuseLighting->lighting_color;
-            }
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        default:
-            if (((SPObjectClass *) feDiffuseLighting_parent_class)->set)
-                ((SPObjectClass *) feDiffuseLighting_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feDiffuseLighting_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG)) {
-        sp_object_read_attr(object, "surfaceScale");
-        sp_object_read_attr(object, "diffuseConstant");
-        sp_object_read_attr(object, "kernelUnit");
-        sp_object_read_attr(object, "lighting-color");
-    }
-
-    if (((SPObjectClass *) feDiffuseLighting_parent_class)->update) {
-        ((SPObjectClass *) feDiffuseLighting_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feDiffuseLighting_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    SPFeDiffuseLighting *fediffuselighting = SP_FEDIFFUSELIGHTING(object);
-    
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-    
-    if (fediffuselighting->surfaceScale_set)
-        sp_repr_set_css_double(repr, "surfaceScale", fediffuselighting->surfaceScale);
-    else
-        repr->setAttribute("surfaceScale", NULL);
-    if (fediffuselighting->diffuseConstant_set)
-        sp_repr_set_css_double(repr, "diffuseConstant", fediffuselighting->diffuseConstant);
-    else
-        repr->setAttribute("diffuseConstant", NULL);
-   /*TODO kernelUnits */ 
-    if (fediffuselighting->lighting_color_set) {
-        gchar c[64];
-        sp_svg_write_color(c, sizeof(c), fediffuselighting->lighting_color);
-        repr->setAttribute("lighting-color", c);
-    } else
-        repr->setAttribute("lighting-color", NULL);
-        
-    if (((SPObjectClass *) feDiffuseLighting_parent_class)->write) {
-        ((SPObjectClass *) feDiffuseLighting_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-/**
- * Callback for child_added event.
- */
-static void
-sp_feDiffuseLighting_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
-{
-    SPFeDiffuseLighting *f = SP_FEDIFFUSELIGHTING(object);
-
-    if (((SPObjectClass *) feDiffuseLighting_parent_class)->child_added)
-        (* ((SPObjectClass *) feDiffuseLighting_parent_class)->child_added)(object, child, ref);
-
-    sp_feDiffuseLighting_children_modified(f);
-    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-            
-
-/**
- * Callback for remove_child event.
- */
-static void
-sp_feDiffuseLighting_remove_child(SPObject *object, Inkscape::XML::Node *child)
-{   
-    SPFeDiffuseLighting *f = SP_FEDIFFUSELIGHTING(object);
-
-    if (((SPObjectClass *) feDiffuseLighting_parent_class)->remove_child)
-        (* ((SPObjectClass *) feDiffuseLighting_parent_class)->remove_child)(object, child);   
-
-    sp_feDiffuseLighting_children_modified(f);
-    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-
-static void
-sp_feDiffuseLighting_order_changed (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref)
-{
-    SPFeDiffuseLighting *f = SP_FEDIFFUSELIGHTING(object);
-    if (((SPObjectClass *) (feDiffuseLighting_parent_class))->order_changed)
-        (* ((SPObjectClass *) (feDiffuseLighting_parent_class))->order_changed) (object, child, old_ref, new_ref);
-
-    sp_feDiffuseLighting_children_modified(f);
-    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-
-static void sp_feDiffuseLighting_children_modified(SPFeDiffuseLighting *sp_diffuselighting)
-{
-   if (sp_diffuselighting->renderer) {
-        sp_diffuselighting->renderer->light_type = NR::NO_LIGHT;
-        if (SP_IS_FEDISTANTLIGHT(sp_diffuselighting->children)) {
-            sp_diffuselighting->renderer->light_type = NR::DISTANT_LIGHT;
-            sp_diffuselighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_diffuselighting->children);
-        }
-        if (SP_IS_FEPOINTLIGHT(sp_diffuselighting->children)) {
-            sp_diffuselighting->renderer->light_type = NR::POINT_LIGHT;
-            sp_diffuselighting->renderer->light.point = SP_FEPOINTLIGHT(sp_diffuselighting->children);
-        }
-        if (SP_IS_FESPOTLIGHT(sp_diffuselighting->children)) {
-            sp_diffuselighting->renderer->light_type = NR::SPOT_LIGHT;
-            sp_diffuselighting->renderer->light.spot = SP_FESPOTLIGHT(sp_diffuselighting->children);
-        }
-   }
-}
-
-static void sp_feDiffuseLighting_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeDiffuseLighting *sp_diffuselighting = SP_FEDIFFUSELIGHTING(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_DIFFUSELIGHTING);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterDiffuseLighting *nr_diffuselighting = dynamic_cast<NR::FilterDiffuseLighting*>(nr_primitive);
-    g_assert(nr_diffuselighting != NULL);
-
-    sp_diffuselighting->renderer = nr_diffuselighting;
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_diffuselighting->diffuseConstant = sp_diffuselighting->diffuseConstant;
-    nr_diffuselighting->surfaceScale = sp_diffuselighting->surfaceScale;
-    nr_diffuselighting->lighting_color = sp_diffuselighting->lighting_color;
-    //We assume there is at most one child
-    nr_diffuselighting->light_type = NR::NO_LIGHT;
-    if (SP_IS_FEDISTANTLIGHT(primitive->children)) {
-        nr_diffuselighting->light_type = NR::DISTANT_LIGHT;
-        nr_diffuselighting->light.distant = SP_FEDISTANTLIGHT(primitive->children);
-    }
-    if (SP_IS_FEPOINTLIGHT(primitive->children)) {
-        nr_diffuselighting->light_type = NR::POINT_LIGHT;
-        nr_diffuselighting->light.point = SP_FEPOINTLIGHT(primitive->children);
-    }
-    if (SP_IS_FESPOTLIGHT(primitive->children)) {
-        nr_diffuselighting->light_type = NR::SPOT_LIGHT;
-        nr_diffuselighting->light.spot = SP_FESPOTLIGHT(primitive->children);
-    }
-        
-    //nr_offset->set_dx(sp_offset->dx);
-    //nr_offset->set_dy(sp_offset->dy);
-}
-
-
-/*
-  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/sp-fediffuselighting.h b/src/sp-fediffuselighting.h
deleted file mode 100644 (file)
index 7d5bca8..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef SP_FEDIFFUSELIGHTING_H_SEEN
-#define SP_FEDIFFUSELIGHTING_H_SEEN
-
-/** \file
- * SVG <feDiffuseLighting> implementation, see sp-feDiffuseLighting.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *               2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-fediffuselighting-fns.h"
-
-namespace NR {
-class FilterDiffuseLighting;
-}
-
-/* FeDiffuseLighting base class */
-class SPFeDiffuseLightingClass;
-
-struct SPFeDiffuseLighting : public SPFilterPrimitive {
-    /** DIFFUSELIGHTING ATTRIBUTES HERE */
-    /** surfaceScale attribute */
-    gfloat surfaceScale;
-    guint surfaceScale_set : 1;
-    /** diffuseConstant attribute */
-    gfloat diffuseConstant;
-    guint diffuseConstant_set : 1;
-    /** kernelUnitLength attribute */
-    NumberOptNumber kernelUnitLength;
-    /** lighting-color property */
-    guint32 lighting_color;
-    guint lighting_color_set : 1;
-    /** pointer to the associated renderer */
-    NR::FilterDiffuseLighting *renderer;
-};
-
-struct SPFeDiffuseLightingClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feDiffuseLighting_get_type();
-
-
-#endif /* !SP_FEDIFFUSELIGHTING_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/sp-fedisplacementmap-fns.h b/src/sp-fedisplacementmap-fns.h
deleted file mode 100644 (file)
index 6d92c6b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FEDISPLACEMENTMAP_FNS_H
-#define SP_FEDISPLACEMENTMAP_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeDisplacementMap;
-
-#define SP_TYPE_FEDISPLACEMENTMAP (sp_feDisplacementMap_get_type())
-#define SP_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMap))
-#define SP_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMapClass))
-#define SP_IS_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISPLACEMENTMAP))
-#define SP_IS_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISPLACEMENTMAP))
-
-GType sp_feDisplacementMap_get_type();
-
-#endif /* !SP_FEDISPLACEMENTMAP_FNS_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/sp-fedisplacementmap.cpp b/src/sp-fedisplacementmap.cpp
deleted file mode 100644 (file)
index a30dd2f..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-#define __SP_FEDISPLACEMENTMAP_CPP__
-
-/** \file
- * SVG <feDisplacementMap> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-fedisplacementmap.h"
-#include "xml/repr.h"
-#include "display/nr-filter-displacement-map.h"
-#include "helper-fns.h"
-
-/* FeDisplacementMap base class */
-
-static void sp_feDisplacementMap_class_init(SPFeDisplacementMapClass *klass);
-static void sp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap);
-
-static void sp_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feDisplacementMap_release(SPObject *object);
-static void sp_feDisplacementMap_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags);
-static void sp_feDisplacementMap_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-static Inkscape::XML::Node *sp_feDisplacementMap_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static SPFilterPrimitiveClass *feDisplacementMap_parent_class;
-
-GType
-sp_feDisplacementMap_get_type()
-{
-    static GType feDisplacementMap_type = 0;
-
-    if (!feDisplacementMap_type) {
-        GTypeInfo feDisplacementMap_info = {
-            sizeof(SPFeDisplacementMapClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feDisplacementMap_class_init,
-            NULL, NULL,
-            sizeof(SPFeDisplacementMap),
-            16,
-            (GInstanceInitFunc) sp_feDisplacementMap_init,
-            NULL,    /* value_table */
-        };
-        feDisplacementMap_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeDisplacementMap", &feDisplacementMap_info, (GTypeFlags)0);
-    }
-    return feDisplacementMap_type;
-}
-
-static void
-sp_feDisplacementMap_class_init(SPFeDisplacementMapClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feDisplacementMap_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feDisplacementMap_build;
-    sp_object_class->release = sp_feDisplacementMap_release;
-    sp_object_class->write = sp_feDisplacementMap_write;
-    sp_object_class->set = sp_feDisplacementMap_set;
-    sp_object_class->update = sp_feDisplacementMap_update;
-    sp_primitive_class->build_renderer = sp_feDisplacementMap_build_renderer;
-}
-
-static void
-sp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap)
-{
-    feDisplacementMap->scale=0;
-    feDisplacementMap->xChannelSelector = DISPLACEMENTMAP_CHANNEL_ALPHA;
-    feDisplacementMap->yChannelSelector = DISPLACEMENTMAP_CHANNEL_ALPHA;
-    feDisplacementMap->in2 = NR::NR_FILTER_SLOT_NOT_SET;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeDisplacementMap variables.  For this to get called,
- * 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_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feDisplacementMap_parent_class)->build) {
-        ((SPObjectClass *) feDisplacementMap_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "scale");
-    sp_object_read_attr(object, "in2");
-    sp_object_read_attr(object, "xChannelSelector");
-    sp_object_read_attr(object, "yChannelSelector");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feDisplacementMap_release(SPObject *object)
-{
-    if (((SPObjectClass *) feDisplacementMap_parent_class)->release)
-        ((SPObjectClass *) feDisplacementMap_parent_class)->release(object);
-}
-
-static FilterDisplacementMapChannelSelector sp_feDisplacementMap_readChannelSelector(gchar const *value)
-{
-    if (!value) return DISPLACEMENTMAP_CHANNEL_ALPHA;
-    switch (value[0]) {
-        case 'R':
-            return DISPLACEMENTMAP_CHANNEL_RED;
-            break;
-        case 'G':
-            return DISPLACEMENTMAP_CHANNEL_GREEN;
-            break;
-        case 'B':
-            return DISPLACEMENTMAP_CHANNEL_BLUE;
-            break;
-        case 'A':
-            return DISPLACEMENTMAP_CHANNEL_ALPHA;
-            break;
-        default:
-            // error
-            g_warning("Invalid attribute for Channel Selector. Valid modes are 'R', 'G', 'B' or 'A'");
-            break;
-    }
-    return DISPLACEMENTMAP_CHANNEL_ALPHA; //default is Alpha Channel
-}
-
-/**
- * Sets a specific value in the SPFeDisplacementMap.
- */
-static void
-sp_feDisplacementMap_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeDisplacementMap *feDisplacementMap = SP_FEDISPLACEMENTMAP(object);
-    (void)feDisplacementMap;
-    int input;
-    double read_num;
-    FilterDisplacementMapChannelSelector read_selector;
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        case SP_ATTR_XCHANNELSELECTOR:
-            read_selector = sp_feDisplacementMap_readChannelSelector(value);
-            if (read_selector != feDisplacementMap->xChannelSelector){
-                feDisplacementMap->xChannelSelector = read_selector;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_YCHANNELSELECTOR:
-            read_selector = sp_feDisplacementMap_readChannelSelector(value);
-            if (read_selector != feDisplacementMap->yChannelSelector){
-                feDisplacementMap->yChannelSelector = read_selector;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_SCALE:
-            read_num = helperfns_read_number(value);
-            if (read_num != feDisplacementMap->scale) {
-                feDisplacementMap->scale = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_IN2:
-            input = sp_filter_primitive_read_in(feDisplacementMap, value);
-            if (input != feDisplacementMap->in2) {
-                feDisplacementMap->in2 = input;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        default:
-            if (((SPObjectClass *) feDisplacementMap_parent_class)->set)
-                ((SPObjectClass *) feDisplacementMap_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feDisplacementMap_parent_class)->update) {
-        ((SPObjectClass *) feDisplacementMap_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feDisplacementMap_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feDisplacementMap_parent_class)->write) {
-        ((SPObjectClass *) feDisplacementMap_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feDisplacementMap_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeDisplacementMap *sp_displacement_map = SP_FEDISPLACEMENTMAP(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_DISPLACEMENTMAP);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterDisplacementMap *nr_displacement_map = dynamic_cast<NR::FilterDisplacementMap*>(nr_primitive);
-    g_assert(nr_displacement_map != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_displacement_map->set_input(1, sp_displacement_map->in2);
-    nr_displacement_map->set_scale(sp_displacement_map->scale);
-    nr_displacement_map->set_channel_selector(0, sp_displacement_map->xChannelSelector);
-    nr_displacement_map->set_channel_selector(1, sp_displacement_map->yChannelSelector);
-}
-
-
-/*
-  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/sp-fedisplacementmap.h b/src/sp-fedisplacementmap.h
deleted file mode 100644 (file)
index 914f770..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef SP_FEDISPLACEMENTMAP_H_SEEN
-#define SP_FEDISPLACEMENTMAP_H_SEEN
-
-/** \file
- * SVG <feDisplacementMap> implementation, see sp-feDisplacementMap.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-fedisplacementmap-fns.h"
-
-enum FilterDisplacementMapChannelSelector {
-    DISPLACEMENTMAP_CHANNEL_RED,
-    DISPLACEMENTMAP_CHANNEL_GREEN,
-    DISPLACEMENTMAP_CHANNEL_BLUE,
-    DISPLACEMENTMAP_CHANNEL_ALPHA,
-    DISPLACEMENTMAP_CHANNEL_ENDTYPE
-};
-
-/* FeDisplacementMap base class */
-class SPFeDisplacementMapClass;
-
-struct SPFeDisplacementMap : public SPFilterPrimitive {
-    /** DISPLACEMENTMAP ATTRIBUTES HERE */
-    int in2; 
-    double scale;
-    FilterDisplacementMapChannelSelector xChannelSelector;
-    FilterDisplacementMapChannelSelector yChannelSelector;
-};
-
-struct SPFeDisplacementMapClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feDisplacementMap_get_type();
-
-
-#endif /* !SP_FEDISPLACEMENTMAP_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/sp-fedistantlight.cpp b/src/sp-fedistantlight.cpp
deleted file mode 100644 (file)
index 3ac3a50..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-#define __SP_FEDISTANTLIGHT_CPP__
-
-/** \file
- * SVG <fedistantlight> implementation.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006,2007 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <glib.h>
-
-#include "attributes.h"
-#include "document.h"
-#include "sp-fedistantlight.h"
-#include "sp-fediffuselighting-fns.h"
-#include "sp-fespecularlighting-fns.h"
-#include "xml/repr.h"
-
-#define SP_MACROS_SILENT
-#include "macros.h"
-
-/* FeDistantLight class */
-
-static void sp_fedistantlight_class_init(SPFeDistantLightClass *klass);
-static void sp_fedistantlight_init(SPFeDistantLight *fedistantlight);
-
-static void sp_fedistantlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_fedistantlight_release(SPObject *object);
-static void sp_fedistantlight_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_fedistantlight_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_fedistantlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static SPObjectClass *feDistantLight_parent_class;
-
-GType
-sp_fedistantlight_get_type()
-{
-    static GType fedistantlight_type = 0;
-
-    if (!fedistantlight_type) {
-        GTypeInfo fedistantlight_info = {
-            sizeof(SPFeDistantLightClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_fedistantlight_class_init,
-            NULL, NULL,
-            sizeof(SPFeDistantLight),
-            16,
-            (GInstanceInitFunc) sp_fedistantlight_init,
-            NULL,    /* value_table */
-        };
-        fedistantlight_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeDistantLight", &fedistantlight_info, (GTypeFlags)0);
-    }
-    return fedistantlight_type;
-}
-
-static void
-sp_fedistantlight_class_init(SPFeDistantLightClass *klass)
-{
-
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-
-    feDistantLight_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_fedistantlight_build;
-    sp_object_class->release = sp_fedistantlight_release;
-    sp_object_class->write = sp_fedistantlight_write;
-    sp_object_class->set = sp_fedistantlight_set;
-    sp_object_class->update = sp_fedistantlight_update;
-}
-
-static void
-sp_fedistantlight_init(SPFeDistantLight *fedistantlight)
-{
-    fedistantlight->azimuth = 0;
-    fedistantlight->elevation = 0;
-    fedistantlight->azimuth_set = FALSE;
-    fedistantlight->elevation_set = FALSE;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPDistantLight variables.  For this to get called,
- * 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_fedistantlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feDistantLight_parent_class)->build) {
-        ((SPObjectClass *) feDistantLight_parent_class)->build(object, document, repr);
-    }
-
-    //Read values of key attributes from XML nodes into object.
-    sp_object_read_attr(object, "azimuth");
-    sp_object_read_attr(object, "elevation");
-
-//is this necessary?
-    sp_document_add_resource(document, "fedistantlight", object);
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_fedistantlight_release(SPObject *object)
-{
-    //SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object);
-
-    if (SP_OBJECT_DOCUMENT(object)) {
-        /* Unregister ourselves */
-        sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fedistantlight", SP_OBJECT(object));
-    }
-
-//TODO: release resources here
-}
-
-/**
- * Sets a specific value in the SPFeDistantLight.
- */
-static void
-sp_fedistantlight_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object);
-    gchar *end_ptr;
-    switch (key) {
-    case SP_ATTR_AZIMUTH:
-        end_ptr =NULL;
-        if (value) {
-            fedistantlight->azimuth = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr) {
-                fedistantlight->azimuth_set = TRUE;
-            }
-        }
-        if (!value || !end_ptr) {
-                fedistantlight->azimuth_set = FALSE;
-                fedistantlight->azimuth = 0;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_ELEVATION:
-        end_ptr =NULL;
-        if (value) {
-            fedistantlight->elevation = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr) {
-                fedistantlight->elevation_set = TRUE;
-            }
-        }
-        if (!value || !end_ptr) {
-                fedistantlight->elevation_set = FALSE;
-                fedistantlight->elevation = 0;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    default:
-        // See if any parents need this value.
-        if (((SPObjectClass *) feDistantLight_parent_class)->set) {
-            ((SPObjectClass *) feDistantLight_parent_class)->set(object, key, value);
-        }
-        break;
-    }
-}
-
-/**
- *  * Receives update notifications.
- *   */
-static void
-sp_fedistantlight_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    SPFeDistantLight *feDistantLight = SP_FEDISTANTLIGHT(object);
-    (void)feDistantLight;
-
-    if (flags & SP_OBJECT_MODIFIED_FLAG) {
-        /* do something to trigger redisplay, updates? */
-        sp_object_read_attr(object, "azimuth");
-        sp_object_read_attr(object, "elevation");
-    }
-
-    if (((SPObjectClass *) feDistantLight_parent_class)->update) {
-        ((SPObjectClass *) feDistantLight_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_fedistantlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    SPFeDistantLight *fedistantlight = SP_FEDISTANTLIGHT(object);
-
-    if (!repr) {
-        repr = SP_OBJECT_REPR(object)->duplicate(doc);
-    }
-
-    if (fedistantlight->azimuth_set)
-        sp_repr_set_css_double(repr, "azimuth", fedistantlight->azimuth);
-    if (fedistantlight->elevation_set)
-        sp_repr_set_css_double(repr, "elevation", fedistantlight->elevation);
-
-    if (((SPObjectClass *) feDistantLight_parent_class)->write) {
-        ((SPObjectClass *) feDistantLight_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-/*
-  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/sp-fedistantlight.h b/src/sp-fedistantlight.h
deleted file mode 100644 (file)
index 21edbc5..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef SP_FEDISTANTLIGHT_H_SEEN
-#define SP_FEDISTANTLIGHT_H_SEEN
-
-/** \file
- * SVG <filter> implementation, see sp-filter.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006,2007 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-object.h"
-
-#define SP_TYPE_FEDISTANTLIGHT (sp_fedistantlight_get_type())
-#define SP_FEDISTANTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISTANTLIGHT, SPFeDistantLight))
-#define SP_FEDISTANTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISTANTLIGHT, SPFeDistantLightClass))
-#define SP_IS_FEDISTANTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISTANTLIGHT))
-#define SP_IS_FEDISTANTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISTANTLIGHT))
-
-/* Distant light class */
-
-
-class SPFeDistantLight;
-class SPFeDistantLightClass;
-
-struct SPFeDistantLight : public SPObject {
-
-    /** azimuth attribute */
-    gfloat azimuth;
-    guint azimuth_set : 1;
-    /** elevation attribute */
-    gfloat elevation;
-    guint elevation_set : 1;
-};
-
-struct SPFeDistantLightClass {
-    SPObjectClass parent_class;
-};
-
-GType
-sp_fedistantlight_get_type();
-#endif /* !SP_FEDISTANTLIGHT_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/sp-feflood-fns.h b/src/sp-feflood-fns.h
deleted file mode 100644 (file)
index 8cc5072..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FEFLOOD_FNS_H
-#define SP_FEFLOOD_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeFlood;
-
-#define SP_TYPE_FEFLOOD (sp_feFlood_get_type())
-#define SP_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFLOOD, SPFeFlood))
-#define SP_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFLOOD, SPFeFloodClass))
-#define SP_IS_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFLOOD))
-#define SP_IS_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFLOOD))
-
-GType sp_feFlood_get_type();
-
-#endif /* !SP_FEFLOOD_FNS_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/sp-feflood.cpp b/src/sp-feflood.cpp
deleted file mode 100644 (file)
index 14488b7..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-#define __SP_FEFLOOD_CPP__
-
-/** \file
- * SVG <feFlood> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-feflood.h"
-#include "xml/repr.h"
-#include "helper-fns.h"
-#include "svg/svg-color.h"
-
-/* FeFlood base class */
-
-static void sp_feFlood_class_init(SPFeFloodClass *klass);
-static void sp_feFlood_init(SPFeFlood *feFlood);
-
-static void sp_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feFlood_release(SPObject *object);
-static void sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feFlood_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feFlood_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feFlood_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feFlood_parent_class;
-
-GType
-sp_feFlood_get_type()
-{
-    static GType feFlood_type = 0;
-
-    if (!feFlood_type) {
-        GTypeInfo feFlood_info = {
-            sizeof(SPFeFloodClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feFlood_class_init,
-            NULL, NULL,
-            sizeof(SPFeFlood),
-            16,
-            (GInstanceInitFunc) sp_feFlood_init,
-            NULL,    /* value_table */
-        };
-        feFlood_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeFlood", &feFlood_info, (GTypeFlags)0);
-    }
-    return feFlood_type;
-}
-
-static void
-sp_feFlood_class_init(SPFeFloodClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feFlood_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feFlood_build;
-    sp_object_class->release = sp_feFlood_release;
-    sp_object_class->write = sp_feFlood_write;
-    sp_object_class->set = sp_feFlood_set;
-    sp_object_class->update = sp_feFlood_update;
-    sp_primitive_class->build_renderer = sp_feFlood_build_renderer;
-}
-
-static void
-sp_feFlood_init(SPFeFlood *feFlood)
-{
-    feFlood->opacity = 1;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeFlood variables.  For this to get called,
- * 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_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feFlood_parent_class)->build) {
-        ((SPObjectClass *) feFlood_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "flood-opacity");
-    sp_object_read_attr(object, "flood-color");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feFlood_release(SPObject *object)
-{
-    if (((SPObjectClass *) feFlood_parent_class)->release)
-        ((SPObjectClass *) feFlood_parent_class)->release(object);
-}
-
-/**
- * Sets a specific value in the SPFeFlood.
- */
-static void
-sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeFlood *feFlood = SP_FEFLOOD(object);
-    (void)feFlood;
-    gchar const *cend_ptr = NULL;
-    gchar *end_ptr = NULL;
-    guint32 read_color;
-    double read_num;
-    
-    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);
-            }
-            break;
-        case SP_PROP_FLOOD_OPACITY:
-            if (value) {
-                read_num = g_ascii_strtod(value, &end_ptr);
-                if (*end_ptr) {
-                    g_warning("Unable to convert \"%s\" to number", value);
-                    read_num = 1;
-                }
-            }
-            else {
-                read_num = 1;
-            }
-            if (read_num != feFlood->opacity){
-                feFlood->opacity = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        default:
-            if (((SPObjectClass *) feFlood_parent_class)->set)
-                ((SPObjectClass *) feFlood_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feFlood_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feFlood_parent_class)->update) {
-        ((SPObjectClass *) feFlood_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feFlood_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feFlood_parent_class)->write) {
-        ((SPObjectClass *) feFlood_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feFlood_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeFlood *sp_flood = SP_FEFLOOD(primitive);
-    (void)sp_flood;
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_FLOOD);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterFlood *nr_flood = dynamic_cast<NR::FilterFlood*>(nr_primitive);
-    g_assert(nr_flood != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-    
-    nr_flood->set_opacity(sp_flood->opacity);
-    nr_flood->set_color(sp_flood->color);
-}
-
-
-/*
-  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/sp-feflood.h b/src/sp-feflood.h
deleted file mode 100644 (file)
index 4d17022..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef SP_FEFLOOD_H_SEEN
-#define SP_FEFLOOD_H_SEEN
-
-/** \file
- * SVG <feFlood> implementation, see sp-feFlood.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-feflood-fns.h"
-
-#include "display/nr-filter.h"
-#include "display/nr-filter-flood.h"
-
-/* FeFlood base class */
-class SPFeFloodClass;
-
-struct SPFeFlood : public SPFilterPrimitive {
-    /** FLOOD ATTRIBUTES HERE */
-    guint32 color;
-    double opacity;
-};
-
-struct SPFeFloodClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feFlood_get_type();
-
-
-#endif /* !SP_FEFLOOD_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/sp-feimage-fns.h b/src/sp-feimage-fns.h
deleted file mode 100644 (file)
index 0a8b453..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FEIMAGE_FNS_H
-#define SP_FEIMAGE_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeImage;
-
-#define SP_TYPE_FEIMAGE (sp_feImage_get_type())
-#define SP_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEIMAGE, SPFeImage))
-#define SP_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEIMAGE, SPFeImageClass))
-#define SP_IS_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEIMAGE))
-#define SP_IS_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEIMAGE))
-
-GType sp_feImage_get_type();
-
-#endif /* !SP_FEIMAGE_FNS_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/sp-feimage.cpp b/src/sp-feimage.cpp
deleted file mode 100644 (file)
index 117e9ff..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-#define __SP_FEIMAGE_CPP__
-
-/** \file
- * SVG <feImage> implementation.
- *
- */
-/*
- * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2007 Felipe Sanches
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-#include "uri.h"
-#include "uri-references.h"
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-feimage.h"
-#include "xml/repr.h"
-#include <string.h>
-
-#include "display/nr-filter.h"
-#include "display/nr-filter-image.h"
-
-/* FeImage base class */
-
-static void sp_feImage_class_init(SPFeImageClass *klass);
-static void sp_feImage_init(SPFeImage *feImage);
-
-static void sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feImage_release(SPObject *object);
-static void sp_feImage_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feImage_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feImage_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feImage_parent_class;
-
-GType
-sp_feImage_get_type()
-{
-    static GType feImage_type = 0;
-
-    if (!feImage_type) {
-        GTypeInfo feImage_info = {
-            sizeof(SPFeImageClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feImage_class_init,
-            NULL, NULL,
-            sizeof(SPFeImage),
-            16,
-            (GInstanceInitFunc) sp_feImage_init,
-            NULL,    /* value_table */
-        };
-        feImage_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeImage", &feImage_info, (GTypeFlags)0);
-    }
-    return feImage_type;
-}
-
-static void
-sp_feImage_class_init(SPFeImageClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass * sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feImage_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feImage_build;
-    sp_object_class->release = sp_feImage_release;
-    sp_object_class->write = sp_feImage_write;
-    sp_object_class->set = sp_feImage_set;
-    sp_object_class->update = sp_feImage_update;
-
-    sp_primitive_class->build_renderer = sp_feImage_build_renderer;
-}
-
-static void
-sp_feImage_init(SPFeImage */*feImage*/)
-{
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeImage variables.  For this to get called,
- * 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)
-{
-    // Save document reference so we can load images with relative paths.
-    SPFeImage *feImage = SP_FEIMAGE(object);
-    feImage->document = document;
-
-    if (((SPObjectClass *) feImage_parent_class)->build) {
-        ((SPObjectClass *) feImage_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-
-    sp_object_read_attr(object, "x");
-    sp_object_read_attr(object, "y");
-    sp_object_read_attr(object, "width");
-    sp_object_read_attr(object, "height");
-    sp_object_read_attr(object, "xlink:href");
-
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feImage_release(SPObject *object)
-{
-    SPFeImage *feImage = SP_FEIMAGE(object);
-    feImage->_modified_connection.disconnect();
-    if (feImage->SVGElemRef) delete feImage->SVGElemRef;
-
-    if (((SPObjectClass *) feImage_parent_class)->release)
-        ((SPObjectClass *) feImage_parent_class)->release(object);
-}
-
-static void
-sp_feImage_elem_modified(SPObject* /*href*/, guint /*flags*/, SPObject* obj)
-{
-    obj->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-
-/**
- * Sets a specific value in the SPFeImage.
- */
-static void
-sp_feImage_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeImage *feImage = SP_FEIMAGE(object);
-    (void)feImage;
-    Inkscape::URI* SVGElem_uri;
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-       case SP_ATTR_XLINK_HREF:
-           if (feImage->href) g_free(feImage->href);
-           feImage->href = (value) ? g_strdup (value) : NULL;
-            if (!feImage->href) return;
-            try{
-                SVGElem_uri = new Inkscape::URI(feImage->href);
-                feImage->SVGElemRef = new Inkscape::URIReference(feImage->document);
-                feImage->from_element = true;
-                feImage->SVGElemRef->attach(*SVGElem_uri);
-                feImage->SVGElem = SP_ITEM(feImage->SVGElemRef->getObject());
-                
-                g_free(SVGElem_uri);
-                feImage->_modified_connection = ((SPObject*) feImage->SVGElem)->connectModified(sigc::bind(sigc::ptr_fun(&sp_feImage_elem_modified), object));
-                object->requestModified(SP_OBJECT_MODIFIED_FLAG);
-                break;
-            }
-            catch(const Inkscape::UnsupportedURIException & e)
-            {
-                feImage->from_element = false;
-                g_warning("caught Inkscape::UnsupportedURIException in sp_feImage_set");
-                break;
-            }
-
-
-        case SP_ATTR_X:
-            feImage->x.readOrUnset(value);
-            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_Y:
-            feImage->y.readOrUnset(value);
-            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_WIDTH:
-            feImage->width.readOrUnset(value);
-            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_HEIGHT:
-            feImage->height.readOrUnset(value);
-            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        default:
-            if (((SPObjectClass *) feImage_parent_class)->set)
-                ((SPObjectClass *) feImage_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-    }
-
-    if (((SPObjectClass *) feImage_parent_class)->update) {
-        ((SPObjectClass *) feImage_parent_class)->update(object, ctx, 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)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feImage_parent_class)->write) {
-        ((SPObjectClass *) feImage_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feImage_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeImage *sp_image = SP_FEIMAGE(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_IMAGE);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterImage *nr_image = dynamic_cast<NR::FilterImage*>(nr_primitive);
-    g_assert(nr_image != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_image->from_element = sp_image->from_element;
-    nr_image->SVGElem = sp_image->SVGElem;
-    nr_image->set_region(sp_image->x, sp_image->y, sp_image->width, sp_image->height);
-    nr_image->set_href(sp_image->href);
-    nr_image->set_document(sp_image->document);
-}
-
-/*
-  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/sp-feimage.h b/src/sp-feimage.h
deleted file mode 100644 (file)
index dc432a6..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef SP_FEIMAGE_H_SEEN
-#define SP_FEIMAGE_H_SEEN
-
-/** \file
- * SVG <feImage> implementation, see sp-feImage.cpp.
- */
-/*
- * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-feimage-fns.h"
-#include "svg/svg-length.h"
-#include "sp-item.h"
-#include "uri-references.h"
-
-/* FeImage base class */
-class SPFeImageClass;
-
-struct SPFeImage : public SPFilterPrimitive {
-    /** IMAGE ATTRIBUTES HERE */
-    gchar *href;
-    SVGLength x, y, height, width;
-    SPDocument *document;
-    bool from_element;
-    SPItem* SVGElem;
-    Inkscape::URIReference* SVGElemRef;
-    sigc::connection _modified_connection;
-};
-
-struct SPFeImageClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feImage_get_type();
-
-
-#endif /* !SP_FEIMAGE_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/sp-femerge-fns.h b/src/sp-femerge-fns.h
deleted file mode 100644 (file)
index 24bda1a..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FEMERGE_FNS_H
-#define SP_FEMERGE_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeMerge;
-
-#define SP_TYPE_FEMERGE (sp_feMerge_get_type())
-#define SP_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMERGE, SPFeMerge))
-#define SP_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMERGE, SPFeMergeClass))
-#define SP_IS_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMERGE))
-#define SP_IS_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMERGE))
-
-GType sp_feMerge_get_type();
-
-#endif /* !SP_FEMERGE_FNS_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/sp-femerge.cpp b/src/sp-femerge.cpp
deleted file mode 100644 (file)
index 9e45d44..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-#define __SP_FEMERGE_CPP__
-
-/** \file
- * SVG <feMerge> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "xml/repr.h"
-
-#include "sp-femerge.h"
-#include "sp-femergenode.h"
-#include "display/nr-filter-merge.h"
-
-/* FeMerge base class */
-
-static void sp_feMerge_class_init(SPFeMergeClass *klass);
-static void sp_feMerge_init(SPFeMerge *feMerge);
-
-static void sp_feMerge_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feMerge_release(SPObject *object);
-static void sp_feMerge_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feMerge_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feMerge_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feMerge_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feMerge_parent_class;
-
-GType
-sp_feMerge_get_type()
-{
-    static GType feMerge_type = 0;
-
-    if (!feMerge_type) {
-        GTypeInfo feMerge_info = {
-            sizeof(SPFeMergeClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feMerge_class_init,
-            NULL, NULL,
-            sizeof(SPFeMerge),
-            16,
-            (GInstanceInitFunc) sp_feMerge_init,
-            NULL,    /* value_table */
-        };
-        feMerge_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeMerge", &feMerge_info, (GTypeFlags)0);
-    }
-    return feMerge_type;
-}
-
-static void
-sp_feMerge_class_init(SPFeMergeClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feMerge_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feMerge_build;
-    sp_object_class->release = sp_feMerge_release;
-    sp_object_class->write = sp_feMerge_write;
-    sp_object_class->set = sp_feMerge_set;
-    sp_object_class->update = sp_feMerge_update;
-
-    sp_primitive_class->build_renderer = sp_feMerge_build_renderer;
-}
-
-static void
-sp_feMerge_init(SPFeMerge */*feMerge*/)
-{
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeMerge variables.  For this to get called,
- * 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_feMerge_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feMerge_parent_class)->build) {
-        ((SPObjectClass *) feMerge_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feMerge_release(SPObject *object)
-{
-    if (((SPObjectClass *) feMerge_parent_class)->release)
-        ((SPObjectClass *) feMerge_parent_class)->release(object);
-}
-
-/**
- * Sets a specific value in the SPFeMerge.
- */
-static void
-sp_feMerge_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeMerge *feMerge = SP_FEMERGE(object);
-    (void)feMerge;
-
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        default:
-            if (((SPObjectClass *) feMerge_parent_class)->set)
-                ((SPObjectClass *) feMerge_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feMerge_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & SP_OBJECT_MODIFIED_FLAG) {
-        object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-    }
-
-    if (((SPObjectClass *) feMerge_parent_class)->update) {
-        ((SPObjectClass *) feMerge_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feMerge_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feMerge_parent_class)->write) {
-        ((SPObjectClass *) feMerge_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feMerge_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeMerge *sp_merge = SP_FEMERGE(primitive);
-    (void)sp_merge;
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_MERGE);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterMerge *nr_merge = dynamic_cast<NR::FilterMerge*>(nr_primitive);
-    g_assert(nr_merge != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    SPObject *input = primitive->children;
-    int in_nr = 0;
-    while (input) {
-        if (SP_IS_FEMERGENODE(input)) {
-            SPFeMergeNode *node = SP_FEMERGENODE(input);
-            nr_merge->set_input(in_nr, node->input);
-            in_nr++;
-        }
-        input = input->next;
-    }
-}
-
-
-/*
-  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/sp-femerge.h b/src/sp-femerge.h
deleted file mode 100644 (file)
index f83697f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef SP_FEMERGE_H_SEEN
-#define SP_FEMERGE_H_SEEN
-
-/** \file
- * SVG <feMerge> implementation, see sp-feMerge.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-femerge-fns.h"
-
-/* FeMerge base class */
-class SPFeMergeClass;
-
-struct SPFeMerge : public SPFilterPrimitive {
-    
-};
-
-struct SPFeMergeClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feMerge_get_type();
-
-
-#endif /* !SP_FEMERGE_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/sp-femergenode.cpp b/src/sp-femergenode.cpp
deleted file mode 100644 (file)
index 153a619..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-#define __SP_FEMERGENODE_CPP__
-
-/** \file
- * feMergeNode implementation. A feMergeNode contains the name of one
- * input image for feMerge.
- */
-/*
- * Authors:
- *   Kees Cook <kees@outflux.net>
- *   Niko Kiirala <niko@kiirala.com>
- *
- * Copyright (C) 2004,2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "xml/repr.h"
-#include "sp-femergenode.h"
-#include "sp-femerge.h"
-
-static void sp_feMergeNode_class_init(SPFeMergeNodeClass *klass);
-static void sp_feMergeNode_init(SPFeMergeNode *skeleton);
-
-static void sp_feMergeNode_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feMergeNode_release(SPObject *object);
-static void sp_feMergeNode_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feMergeNode_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feMergeNode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static SPObjectClass *feMergeNode_parent_class;
-
-GType
-sp_feMergeNode_get_type()
-{
-    static GType feMergeNode_type = 0;
-
-    if (!feMergeNode_type) {
-        GTypeInfo feMergeNode_info = {
-            sizeof(SPFeMergeNodeClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feMergeNode_class_init,
-            NULL, NULL,
-            sizeof(SPFeMergeNode),
-            16,
-            (GInstanceInitFunc) sp_feMergeNode_init,
-            NULL,    /* value_table */
-        };
-        feMergeNode_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeMergeNode", &feMergeNode_info, (GTypeFlags)0);
-    }
-    return feMergeNode_type;
-}
-
-static void
-sp_feMergeNode_class_init(SPFeMergeNodeClass *klass)
-{
-    //GObjectClass *gobject_class = (GObjectClass *)klass;
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-
-    feMergeNode_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feMergeNode_build;
-    sp_object_class->release = sp_feMergeNode_release;
-    sp_object_class->write = sp_feMergeNode_write;
-    sp_object_class->set = sp_feMergeNode_set;
-    sp_object_class->update = sp_feMergeNode_update;
-}
-
-static void
-sp_feMergeNode_init(SPFeMergeNode *feMergeNode)
-{
-    feMergeNode->input = NR::NR_FILTER_SLOT_NOT_SET;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeMergeNode variables.  For this to get called,
- * 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_feMergeNode_build(SPObject *object, SPDocument */*document*/, Inkscape::XML::Node */*repr*/)
-{
-    sp_object_read_attr(object, "in");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feMergeNode_release(SPObject *object)
-{
-    /* deal with our children and our selves here */
-
-    if (((SPObjectClass *) feMergeNode_parent_class)->release)
-        ((SPObjectClass *) feMergeNode_parent_class)->release(object);
-}
-
-/**
- * Sets a specific value in the SPFeMergeNode.
- */
-static void
-sp_feMergeNode_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object);
-    SPFeMerge *parent = SP_FEMERGE(object->parent);
-
-    if (key == SP_ATTR_IN) {
-        int input = sp_filter_primitive_read_in(parent, value);
-        if (input != feMergeNode->input) {
-            feMergeNode->input = input;
-            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-    }
-
-    /* See if any parents need this value. */
-    if (((SPObjectClass *) feMergeNode_parent_class)->set) {
-        ((SPObjectClass *) feMergeNode_parent_class)->set(object, key, value);
-    }
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feMergeNode_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    //SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object);
-
-    if (flags & SP_OBJECT_MODIFIED_FLAG) {
-        object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-    }
-
-    if (((SPObjectClass *) feMergeNode_parent_class)->update) {
-        ((SPObjectClass *) feMergeNode_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feMergeNode_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    //SPFeMergeNode *feMergeNode = SP_FEMERGENODE(object);
-
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feMergeNode_parent_class)->write) {
-        ((SPObjectClass *) feMergeNode_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-
-/*
-  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/sp-femergenode.h b/src/sp-femergenode.h
deleted file mode 100644 (file)
index 8ec00bd..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef SP_FEMERGENODE_H_SEEN
-#define SP_FEMERGENODE_H_SEEN
-
-/** \file
- * feMergeNode implementation. A feMergeNode stores information about one
- * input image for feMerge filter primitive.
- */
-/*
- * Authors:
- *   Kees Cook <kees@outflux.net>
- *   Niko Kiirala <niko@kiirala.com>
- *
- * Copyright (C) 2004,2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-object.h"
-
-#define SP_TYPE_FEMERGENODE (sp_feMergeNode_get_type())
-#define SP_FEMERGENODE(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_FEMERGENODE, SPFeMergeNode))
-#define SP_IS_FEMERGENODE(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_FEMERGENODE))
-
-class SPFeMergeNode;
-class SPFeMergeNodeClass;
-
-struct SPFeMergeNode : public SPObject {
-    int input;
-};
-
-struct SPFeMergeNodeClass {
-    SPObjectClass parent_class;
-};
-
-GType sp_feMergeNode_get_type();
-
-
-#endif /* !SP_FEMERGENODE_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/sp-femorphology-fns.h b/src/sp-femorphology-fns.h
deleted file mode 100644 (file)
index a055040..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FEMORPHOLOGY_FNS_H
-#define SP_FEMORPHOLOGY_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeMorphology;
-
-#define SP_TYPE_FEMORPHOLOGY (sp_feMorphology_get_type())
-#define SP_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMORPHOLOGY, SPFeMorphology))
-#define SP_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMORPHOLOGY, SPFeMorphologyClass))
-#define SP_IS_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMORPHOLOGY))
-#define SP_IS_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMORPHOLOGY))
-
-GType sp_feMorphology_get_type();
-
-#endif /* !SP_FEMORPHOLOGY_FNS_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/sp-femorphology.cpp b/src/sp-femorphology.cpp
deleted file mode 100644 (file)
index 0129039..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-#define __SP_FEMORPHOLOGY_CPP__
-
-/** \file
- * SVG <feMorphology> implementation.
- *
- */
-/*
- * Authors:
- *   Felipe Sanches <felipe.sanches@gmail.com>
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-femorphology.h"
-#include "xml/repr.h"
-#include "display/nr-filter-morphology.h"
-
-/* FeMorphology base class */
-
-static void sp_feMorphology_class_init(SPFeMorphologyClass *klass);
-static void sp_feMorphology_init(SPFeMorphology *feMorphology);
-
-static void sp_feMorphology_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feMorphology_release(SPObject *object);
-static void sp_feMorphology_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feMorphology_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feMorphology_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feMorphology_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feMorphology_parent_class;
-
-GType
-sp_feMorphology_get_type()
-{
-    static GType feMorphology_type = 0;
-
-    if (!feMorphology_type) {
-        GTypeInfo feMorphology_info = {
-            sizeof(SPFeMorphologyClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feMorphology_class_init,
-            NULL, NULL,
-            sizeof(SPFeMorphology),
-            16,
-            (GInstanceInitFunc) sp_feMorphology_init,
-            NULL,    /* value_table */
-        };
-        feMorphology_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeMorphology", &feMorphology_info, (GTypeFlags)0);
-    }
-    return feMorphology_type;
-}
-
-static void
-sp_feMorphology_class_init(SPFeMorphologyClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-    
-    feMorphology_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feMorphology_build;
-    sp_object_class->release = sp_feMorphology_release;
-    sp_object_class->write = sp_feMorphology_write;
-    sp_object_class->set = sp_feMorphology_set;
-    sp_object_class->update = sp_feMorphology_update;
-    sp_primitive_class->build_renderer = sp_feMorphology_build_renderer;
-}
-
-static void
-sp_feMorphology_init(SPFeMorphology *feMorphology)
-{
-    //Setting default values:
-    feMorphology->radius.set("0");
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeMorphology variables.  For this to get called,
- * 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_feMorphology_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feMorphology_parent_class)->build) {
-        ((SPObjectClass *) feMorphology_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "operator");
-    sp_object_read_attr(object, "radius");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feMorphology_release(SPObject *object)
-{
-    if (((SPObjectClass *) feMorphology_parent_class)->release)
-        ((SPObjectClass *) feMorphology_parent_class)->release(object);
-}
-
-static NR::FilterMorphologyOperator sp_feMorphology_read_operator(gchar const *value){
-    if (!value) return NR::MORPHOLOGY_OPERATOR_ERODE; //erode is default
-    switch(value[0]){
-        case 'e':
-            if (strncmp(value, "erode", 5) == 0) return NR::MORPHOLOGY_OPERATOR_ERODE;
-            break;
-        case 'd':
-            if (strncmp(value, "dilate", 6) == 0) return NR::MORPHOLOGY_OPERATOR_DILATE;
-            break;
-    }
-    return NR::MORPHOLOGY_OPERATOR_ERODE; //erode is default
-}
-
-/**
- * Sets a specific value in the SPFeMorphology.
- */
-static void
-sp_feMorphology_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeMorphology *feMorphology = SP_FEMORPHOLOGY(object);
-    (void)feMorphology;
-    
-    NR::FilterMorphologyOperator read_operator;
-    switch(key) {
-    /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        case SP_ATTR_OPERATOR:
-            read_operator = sp_feMorphology_read_operator(value);
-            if (read_operator != feMorphology->Operator){
-                feMorphology->Operator = read_operator;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_RADIUS:
-            feMorphology->radius.set(value);
-            //From SVG spec: If <y-radius> is not provided, it defaults to <x-radius>.
-            if (feMorphology->radius.optNumIsSet() == false)
-                feMorphology->radius.setOptNumber(feMorphology->radius.getNumber());
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        default:
-            if (((SPObjectClass *) feMorphology_parent_class)->set)
-                ((SPObjectClass *) feMorphology_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feMorphology_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feMorphology_parent_class)->update) {
-        ((SPObjectClass *) feMorphology_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feMorphology_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feMorphology_parent_class)->write) {
-        ((SPObjectClass *) feMorphology_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feMorphology_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeMorphology *sp_morphology = SP_FEMORPHOLOGY(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_MORPHOLOGY);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterMorphology *nr_morphology = dynamic_cast<NR::FilterMorphology*>(nr_primitive);
-    g_assert(nr_morphology != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive); 
-    
-    nr_morphology->set_operator(sp_morphology->Operator);
-    nr_morphology->set_xradius( sp_morphology->radius.getNumber() );
-    nr_morphology->set_yradius( sp_morphology->radius.getOptNumber() );
-}
-
-/*
-  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/sp-femorphology.h b/src/sp-femorphology.h
deleted file mode 100644 (file)
index 1229c90..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef SP_FEMORPHOLOGY_H_SEEN
-#define SP_FEMORPHOLOGY_H_SEEN
-
-/** \file
- * SVG <feMorphology> implementation, see sp-feMorphology.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-femorphology-fns.h"
-#include "number-opt-number.h"
-#include "display/nr-filter.h"
-#include "display/nr-filter-morphology.h"
-
-
-/* FeMorphology base class */
-class SPFeMorphologyClass;
-
-struct SPFeMorphology : public SPFilterPrimitive {
-    /** MORPHOLOGY ATTRIBUTES HERE */
-    NR::FilterMorphologyOperator Operator;
-    NumberOptNumber radius;
-};
-
-struct SPFeMorphologyClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feMorphology_get_type();
-
-
-#endif /* !SP_FEMORPHOLOGY_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/sp-feoffset-fns.h b/src/sp-feoffset-fns.h
deleted file mode 100644 (file)
index 38561c1..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FEOFFSET_FNS_H
-#define SP_FEOFFSET_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeOffset;
-
-#define SP_TYPE_FEOFFSET (sp_feOffset_get_type())
-#define SP_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEOFFSET, SPFeOffset))
-#define SP_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEOFFSET, SPFeOffsetClass))
-#define SP_IS_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEOFFSET))
-#define SP_IS_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEOFFSET))
-
-GType sp_feOffset_get_type();
-
-#endif /* !SP_FEOFFSET_FNS_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/sp-feoffset.cpp b/src/sp-feoffset.cpp
deleted file mode 100644 (file)
index 228424c..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-#define __SP_FEOFFSET_CPP__
-
-/** \file
- * SVG <feOffset> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *
- * Copyright (C) 2006,2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-feoffset.h"
-#include "helper-fns.h"
-#include "xml/repr.h"
-#include "display/nr-filter-offset.h"
-
-/* FeOffset base class */
-
-static void sp_feOffset_class_init(SPFeOffsetClass *klass);
-static void sp_feOffset_init(SPFeOffset *feOffset);
-
-static void sp_feOffset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feOffset_release(SPObject *object);
-static void sp_feOffset_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feOffset_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feOffset_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feOffset_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feOffset_parent_class;
-
-GType
-sp_feOffset_get_type()
-{
-    static GType feOffset_type = 0;
-
-    if (!feOffset_type) {
-        GTypeInfo feOffset_info = {
-            sizeof(SPFeOffsetClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feOffset_class_init,
-            NULL, NULL,
-            sizeof(SPFeOffset),
-            16,
-            (GInstanceInitFunc) sp_feOffset_init,
-            NULL,    /* value_table */
-        };
-        feOffset_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeOffset", &feOffset_info, (GTypeFlags)0);
-    }
-    return feOffset_type;
-}
-
-static void
-sp_feOffset_class_init(SPFeOffsetClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feOffset_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feOffset_build;
-    sp_object_class->release = sp_feOffset_release;
-    sp_object_class->write = sp_feOffset_write;
-    sp_object_class->set = sp_feOffset_set;
-    sp_object_class->update = sp_feOffset_update;
-
-    sp_primitive_class->build_renderer = sp_feOffset_build_renderer;
-}
-
-static void
-sp_feOffset_init(SPFeOffset *feOffset)
-{
-    feOffset->dx = 0;
-    feOffset->dy = 0;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeOffset variables.  For this to get called,
- * 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_feOffset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feOffset_parent_class)->build) {
-        ((SPObjectClass *) feOffset_parent_class)->build(object, document, repr);
-    }
-
-    sp_object_read_attr(object, "dx");
-    sp_object_read_attr(object, "dy");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feOffset_release(SPObject *object)
-{
-    if (((SPObjectClass *) feOffset_parent_class)->release)
-        ((SPObjectClass *) feOffset_parent_class)->release(object);
-}
-
-/**
- * Sets a specific value in the SPFeOffset.
- */
-static void
-sp_feOffset_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeOffset *feOffset = SP_FEOFFSET(object);
-
-    double read_num;
-    switch(key) {
-        case SP_ATTR_DX:
-            read_num = helperfns_read_number(value);
-            if (read_num != feOffset->dx) {
-                feOffset->dx = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_DY:
-            read_num = helperfns_read_number(value);
-            if (read_num != feOffset->dy) {
-                feOffset->dy = read_num;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-            
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        default:
-            if (((SPObjectClass *) feOffset_parent_class)->set)
-                ((SPObjectClass *) feOffset_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feOffset_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & SP_OBJECT_MODIFIED_FLAG) {
-        sp_object_read_attr(object, "dx");
-        sp_object_read_attr(object, "dy");
-    }
-
-    if (((SPObjectClass *) feOffset_parent_class)->update) {
-        ((SPObjectClass *) feOffset_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feOffset_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            // Not. Causes coredumps.
-            // repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feOffset_parent_class)->write) {
-        ((SPObjectClass *) feOffset_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feOffset_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeOffset *sp_offset = SP_FEOFFSET(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_OFFSET);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterOffset *nr_offset = dynamic_cast<NR::FilterOffset*>(nr_primitive);
-    g_assert(nr_offset != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_offset->set_dx(sp_offset->dx);
-    nr_offset->set_dy(sp_offset->dy);
-}
-
-
-/*
-  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/sp-feoffset.h b/src/sp-feoffset.h
deleted file mode 100644 (file)
index 0427114..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef SP_FEOFFSET_H_SEEN
-#define SP_FEOFFSET_H_SEEN
-
-/** \file
- * SVG <feOffset> implementation, see sp-feOffset.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-feoffset-fns.h"
-
-/* FeOffset base class */
-class SPFeOffsetClass;
-
-struct SPFeOffset : public SPFilterPrimitive {
-    /** OFFSET ATTRIBUTES HERE */
-    double dx, dy;
-};
-
-struct SPFeOffsetClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feOffset_get_type();
-
-
-#endif /* !SP_FEOFFSET_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/sp-fepointlight.cpp b/src/sp-fepointlight.cpp
deleted file mode 100644 (file)
index 5317b96..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-#define __SP_FEPOINTLIGHT_CPP__
-
-/** \file
- * SVG <fepointlight> implementation.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006,2007 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <glib.h>
-
-#include "attributes.h"
-#include "document.h"
-#include "sp-fepointlight.h"
-#include "sp-fediffuselighting-fns.h"
-#include "sp-fespecularlighting-fns.h"
-#include "xml/repr.h"
-
-#define SP_MACROS_SILENT
-#include "macros.h"
-
-/* FePointLight class */
-
-static void sp_fepointlight_class_init(SPFePointLightClass *klass);
-static void sp_fepointlight_init(SPFePointLight *fepointlight);
-
-static void sp_fepointlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_fepointlight_release(SPObject *object);
-static void sp_fepointlight_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_fepointlight_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_fepointlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static SPObjectClass *fePointLight_parent_class;
-
-GType
-sp_fepointlight_get_type()
-{
-    static GType fepointlight_type = 0;
-
-    if (!fepointlight_type) {
-        GTypeInfo fepointlight_info = {
-            sizeof(SPFePointLightClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_fepointlight_class_init,
-            NULL, NULL,
-            sizeof(SPFePointLight),
-            16,
-            (GInstanceInitFunc) sp_fepointlight_init,
-            NULL,    /* value_table */
-        };
-        fepointlight_type = g_type_register_static(SP_TYPE_OBJECT, "SPFePointLight", &fepointlight_info, (GTypeFlags)0);
-    }
-    return fepointlight_type;
-}
-
-static void
-sp_fepointlight_class_init(SPFePointLightClass *klass)
-{
-
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-
-    fePointLight_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_fepointlight_build;
-    sp_object_class->release = sp_fepointlight_release;
-    sp_object_class->write = sp_fepointlight_write;
-    sp_object_class->set = sp_fepointlight_set;
-    sp_object_class->update = sp_fepointlight_update;
-}
-
-static void
-sp_fepointlight_init(SPFePointLight *fepointlight)
-{
-    fepointlight->x = 0;
-    fepointlight->y = 0;
-    fepointlight->z = 0;
-
-    fepointlight->x_set = FALSE;
-    fepointlight->y_set = FALSE;
-    fepointlight->z_set = FALSE;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPPointLight variables.  For this to get called,
- * 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_fepointlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) fePointLight_parent_class)->build) {
-        ((SPObjectClass *) fePointLight_parent_class)->build(object, document, repr);
-    }
-
-    //Read values of key attributes from XML nodes into object.
-    sp_object_read_attr(object, "x");
-    sp_object_read_attr(object, "y");
-    sp_object_read_attr(object, "z");
-
-//is this necessary?
-    sp_document_add_resource(document, "fepointlight", object);
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_fepointlight_release(SPObject *object)
-{
-    //SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object);
-
-    if (SP_OBJECT_DOCUMENT(object)) {
-        /* Unregister ourselves */
-        sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fepointlight", SP_OBJECT(object));
-    }
-
-//TODO: release resources here
-}
-
-/**
- * Sets a specific value in the SPFePointLight.
- */
-static void
-sp_fepointlight_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object);
-    gchar *end_ptr;
-    switch (key) {
-    case SP_ATTR_X:
-        end_ptr = NULL;
-        if (value) {
-            fepointlight->x = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr) {
-                fepointlight->x_set = TRUE;
-            }
-        }
-        if (!value || !end_ptr) {
-            fepointlight->x = 0;
-            fepointlight->x_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_Y:
-        end_ptr = NULL;
-        if (value) {
-            fepointlight->y = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr) {
-                fepointlight->y_set = TRUE;
-            }
-        }
-        if (!value || !end_ptr) {
-            fepointlight->y = 0;
-            fepointlight->y_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_Z:
-        end_ptr = NULL;
-        if (value) {
-            fepointlight->z = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr) {
-                fepointlight->z_set = TRUE;
-            }
-        }
-        if (!value || !end_ptr) {
-            fepointlight->z = 0;
-            fepointlight->z_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    default:
-        // See if any parents need this value.
-        if (((SPObjectClass *) fePointLight_parent_class)->set) {
-            ((SPObjectClass *) fePointLight_parent_class)->set(object, key, value);
-        }
-        break;
-    }
-}
-
-/**
- *  * Receives update notifications.
- *   */
-static void
-sp_fepointlight_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    SPFePointLight *fePointLight = SP_FEPOINTLIGHT(object);
-    (void)fePointLight;
-
-    if (flags & SP_OBJECT_MODIFIED_FLAG) {
-        /* do something to trigger redisplay, updates? */
-        sp_object_read_attr(object, "x");
-        sp_object_read_attr(object, "y");
-        sp_object_read_attr(object, "z");
-    }
-
-    if (((SPObjectClass *) fePointLight_parent_class)->update) {
-        ((SPObjectClass *) fePointLight_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_fepointlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object);
-
-    if (!repr) {
-        repr = SP_OBJECT_REPR(object)->duplicate(doc);
-    }
-
-    if (fepointlight->x_set)
-        sp_repr_set_css_double(repr, "x", fepointlight->x);
-    if (fepointlight->y_set)
-        sp_repr_set_css_double(repr, "y", fepointlight->y);
-    if (fepointlight->z_set)
-        sp_repr_set_css_double(repr, "z", fepointlight->z);
-
-    if (((SPObjectClass *) fePointLight_parent_class)->write) {
-        ((SPObjectClass *) fePointLight_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-/*
-  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/sp-fepointlight.h b/src/sp-fepointlight.h
deleted file mode 100644 (file)
index 915d726..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef SP_FEPOINTLIGHT_H_SEEN
-#define SP_FEPOINTLIGHT_H_SEEN
-
-/** \file
- * SVG <filter> implementation, see sp-filter.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006,2007 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-object.h"
-
-#define SP_TYPE_FEPOINTLIGHT (sp_fepointlight_get_type())
-#define SP_FEPOINTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEPOINTLIGHT, SPFePointLight))
-#define SP_FEPOINTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEPOINTLIGHT, SPFePointLightClass))
-#define SP_IS_FEPOINTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEPOINTLIGHT))
-#define SP_IS_FEPOINTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEPOINTLIGHT))
-
-/* Distant light class */
-
-
-class SPFePointLight;
-class SPFePointLightClass;
-
-struct SPFePointLight : public SPObject {
-
-    /** x coordinate of the light source */
-    gfloat x; 
-    guint x_set : 1;
-    /** y coordinate of the light source */
-    gfloat y; 
-    guint y_set : 1;
-    /** z coordinate of the light source */
-    gfloat z; 
-    guint z_set : 1;
-
-    //other fields
-};
-
-struct SPFePointLightClass {
-    SPObjectClass parent_class;
-};
-
-GType
-sp_fepointlight_get_type();
-#endif /* !SP_FEPOINTLIGHT_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/sp-fespecularlighting-fns.h b/src/sp-fespecularlighting-fns.h
deleted file mode 100644 (file)
index bd48ba6..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FESPECULARLIGHTING_FNS_H
-#define SP_FESPECULARLIGHTING_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeSpecularLighting;
-
-#define SP_TYPE_FESPECULARLIGHTING (sp_feSpecularLighting_get_type())
-#define SP_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLighting))
-#define SP_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLightingClass))
-#define SP_IS_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPECULARLIGHTING))
-#define SP_IS_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPECULARLIGHTING))
-
-GType sp_feSpecularLighting_get_type();
-
-#endif /* !SP_FESPECULARLIGHTING_FNS_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/sp-fespecularlighting.cpp b/src/sp-fespecularlighting.cpp
deleted file mode 100644 (file)
index c4e2902..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-#define __SP_FESPECULARLIGHTING_CPP__
-
-/** \file
- * SVG <feSpecularLighting> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *               2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-object.h"
-#include "svg/svg-color.h"
-#include "sp-fespecularlighting.h"
-#include "xml/repr.h"
-#include "display/nr-filter-specularlighting.h"
-
-/* FeSpecularLighting base class */
-
-static void sp_feSpecularLighting_class_init(SPFeSpecularLightingClass *klass);
-static void sp_feSpecularLighting_init(SPFeSpecularLighting *feSpecularLighting);
-
-static void sp_feSpecularLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feSpecularLighting_release(SPObject *object);
-static void sp_feSpecularLighting_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feSpecularLighting_update(SPObject *object, SPCtx *ctx, guint flags);
-//we assume that svg:feSpecularLighting can have any number of children
-//only the first one is considered as the light source of the filter
-//TODO is that right?
-//if not modify child_added and remove_child to raise errors
-static void sp_feSpecularLighting_child_added(SPObject *object,
-                                    Inkscape::XML::Node *child,
-                                    Inkscape::XML::Node *ref);
-static void sp_feSpecularLighting_remove_child(SPObject *object, Inkscape::XML::Node *child);
-static void sp_feSpecularLighting_order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref);
-static Inkscape::XML::Node *sp_feSpecularLighting_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feSpecularLighting_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-static void sp_feSpecularLighting_children_modified(SPFeSpecularLighting *sp_specularlighting);
-
-static SPFilterPrimitiveClass *feSpecularLighting_parent_class;
-
-GType
-sp_feSpecularLighting_get_type()
-{
-    static GType feSpecularLighting_type = 0;
-
-    if (!feSpecularLighting_type) {
-        GTypeInfo feSpecularLighting_info = {
-            sizeof(SPFeSpecularLightingClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feSpecularLighting_class_init,
-            NULL, NULL,
-            sizeof(SPFeSpecularLighting),
-            16,
-            (GInstanceInitFunc) sp_feSpecularLighting_init,
-            NULL,    /* value_table */
-        };
-        feSpecularLighting_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeSpecularLighting", &feSpecularLighting_info, (GTypeFlags)0);
-    }
-    return feSpecularLighting_type;
-}
-
-static void
-sp_feSpecularLighting_class_init(SPFeSpecularLightingClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-    feSpecularLighting_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feSpecularLighting_build;
-    sp_object_class->release = sp_feSpecularLighting_release;
-    sp_object_class->write = sp_feSpecularLighting_write;
-    sp_object_class->set = sp_feSpecularLighting_set;
-    sp_object_class->update = sp_feSpecularLighting_update;
-    sp_object_class->child_added = sp_feSpecularLighting_child_added;
-    sp_object_class->remove_child = sp_feSpecularLighting_remove_child;
-    sp_object_class->order_changed = sp_feSpecularLighting_order_changed;
-
-    sp_primitive_class->build_renderer = sp_feSpecularLighting_build_renderer;
-}
-
-static void
-sp_feSpecularLighting_init(SPFeSpecularLighting *feSpecularLighting)
-{
-    feSpecularLighting->surfaceScale = 1;
-    feSpecularLighting->specularConstant = 1;
-    feSpecularLighting->specularExponent = 1;
-    feSpecularLighting->lighting_color = 0xffffffff;
-    //TODO kernelUnit
-    feSpecularLighting->renderer = NULL;
-    
-    feSpecularLighting->surfaceScale_set = FALSE;
-    feSpecularLighting->specularConstant_set = FALSE;
-    feSpecularLighting->specularExponent_set = FALSE;
-    feSpecularLighting->lighting_color_set = FALSE;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeSpecularLighting variables.  For this to get called,
- * 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_feSpecularLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feSpecularLighting_parent_class)->build) {
-        ((SPObjectClass *) feSpecularLighting_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "surfaceScale");
-    sp_object_read_attr(object, "specularConstant");
-    sp_object_read_attr(object, "specularExponent");
-    sp_object_read_attr(object, "kernelUnitLength");
-    sp_object_read_attr(object, "lighting-color");
-    
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feSpecularLighting_release(SPObject *object)
-{
-    if (((SPObjectClass *) feSpecularLighting_parent_class)->release)
-        ((SPObjectClass *) feSpecularLighting_parent_class)->release(object);
-}
-
-/**
- * Sets a specific value in the SPFeSpecularLighting.
- */
-static void
-sp_feSpecularLighting_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeSpecularLighting *feSpecularLighting = SP_FESPECULARLIGHTING(object);
-    gchar const *cend_ptr = NULL;
-    gchar *end_ptr = NULL;
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-//TODO test forbidden values
-        case SP_ATTR_SURFACESCALE:
-            end_ptr = NULL;
-            if (value) {
-                feSpecularLighting->surfaceScale = g_ascii_strtod(value, &end_ptr);
-                if (end_ptr) {
-                    feSpecularLighting->surfaceScale_set = TRUE;
-                } else {
-                    g_warning("feSpecularLighting: surfaceScale should be a number ... defaulting to 1");
-                }
-
-            }
-            //if the attribute is not set or has an unreadable value
-            if (!value || !end_ptr) {
-                feSpecularLighting->surfaceScale = 1;
-                feSpecularLighting->surfaceScale_set = FALSE;
-            }
-            if (feSpecularLighting->renderer) {
-                feSpecularLighting->renderer->surfaceScale = feSpecularLighting->surfaceScale;
-            }
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_SPECULARCONSTANT:
-            end_ptr = NULL;
-            if (value) {
-                feSpecularLighting->specularConstant = g_ascii_strtod(value, &end_ptr);
-                if (end_ptr && feSpecularLighting->specularConstant >= 0) {
-                    feSpecularLighting->specularConstant_set = TRUE;
-                } else {
-                    end_ptr = NULL;
-                    g_warning("feSpecularLighting: specularConstant should be a positive number ... defaulting to 1");
-                }
-            }
-            if (!value || !end_ptr) {
-                feSpecularLighting->specularConstant = 1;
-                feSpecularLighting->specularConstant_set = FALSE;
-            }
-            if (feSpecularLighting->renderer) {
-                feSpecularLighting->renderer->specularConstant = feSpecularLighting->specularConstant;
-            }
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_SPECULAREXPONENT:
-            end_ptr = NULL;
-            if (value) {
-                feSpecularLighting->specularExponent = g_ascii_strtod(value, &end_ptr);
-                if (feSpecularLighting->specularExponent >= 1 && feSpecularLighting->specularExponent <= 128) {
-                    feSpecularLighting->specularExponent_set = TRUE;
-                } else {
-                    end_ptr = NULL;
-                    g_warning("feSpecularLighting: specularExponent should be a number in range [1, 128] ... defaulting to 1");
-                }
-            } 
-            if (!value || !end_ptr) {
-                feSpecularLighting->specularExponent = 1;
-                feSpecularLighting->specularExponent_set = FALSE;
-            }
-            if (feSpecularLighting->renderer) {
-                feSpecularLighting->renderer->specularExponent = feSpecularLighting->specularExponent;
-            }
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_KERNELUNITLENGTH:
-            //TODO kernelUnit
-            //feSpecularLighting->kernelUnitLength.set(value);
-            /*TODOif (feSpecularLighting->renderer) {
-                feSpecularLighting->renderer->surfaceScale = feSpecularLighting->renderer;
-            }
-            */
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_PROP_LIGHTING_COLOR:
-            cend_ptr = NULL;
-            feSpecularLighting->lighting_color = sp_svg_read_color(value, &cend_ptr, 0xffffffff);
-            //if a value was read
-            if (cend_ptr) {
-                feSpecularLighting->lighting_color_set = TRUE;
-            } else {
-                //lighting_color already contains the default value
-                feSpecularLighting->lighting_color_set = FALSE;
-            }
-            if (feSpecularLighting->renderer) {
-                feSpecularLighting->renderer->lighting_color = feSpecularLighting->lighting_color;
-            }
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        default:
-            if (((SPObjectClass *) feSpecularLighting_parent_class)->set)
-                ((SPObjectClass *) feSpecularLighting_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feSpecularLighting_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG)) {
-        sp_object_read_attr(object, "surfaceScale");
-        sp_object_read_attr(object, "specularConstant");
-        sp_object_read_attr(object, "specularExponent");
-        sp_object_read_attr(object, "kernelUnitLength");
-        sp_object_read_attr(object, "lighting-color");
-    }
-
-    if (((SPObjectClass *) feSpecularLighting_parent_class)->update) {
-        ((SPObjectClass *) feSpecularLighting_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feSpecularLighting_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    SPFeSpecularLighting *fespecularlighting = SP_FESPECULARLIGHTING(object);
-    
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-    if (fespecularlighting->surfaceScale_set)
-        sp_repr_set_css_double(repr, "surfaceScale", fespecularlighting->surfaceScale);
-    if (fespecularlighting->specularConstant_set)
-        sp_repr_set_css_double(repr, "specularConstant", fespecularlighting->specularConstant);
-    if (fespecularlighting->specularExponent_set)
-        sp_repr_set_css_double(repr, "specularExponent", fespecularlighting->specularExponent);
-   /*TODO kernelUnits */ 
-    if (fespecularlighting->lighting_color_set) {
-        gchar c[64];
-        sp_svg_write_color(c, sizeof(c), fespecularlighting->lighting_color);
-        repr->setAttribute("lighting-color", c);
-    }
-    if (((SPObjectClass *) feSpecularLighting_parent_class)->write) {
-        ((SPObjectClass *) feSpecularLighting_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-/**
- * Callback for child_added event.
- */
-static void
-sp_feSpecularLighting_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
-{
-    SPFeSpecularLighting *f = SP_FESPECULARLIGHTING(object);
-
-    if (((SPObjectClass *) feSpecularLighting_parent_class)->child_added)
-        (* ((SPObjectClass *) feSpecularLighting_parent_class)->child_added)(object, child, ref);
-
-    sp_feSpecularLighting_children_modified(f);
-    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-            
-
-/**
- * Callback for remove_child event.
- */
-static void
-sp_feSpecularLighting_remove_child(SPObject *object, Inkscape::XML::Node *child)
-{   
-    SPFeSpecularLighting *f = SP_FESPECULARLIGHTING(object);
-
-    if (((SPObjectClass *) feSpecularLighting_parent_class)->remove_child)
-        (* ((SPObjectClass *) feSpecularLighting_parent_class)->remove_child)(object, child);   
-
-    sp_feSpecularLighting_children_modified(f);
-    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-
-static void
-sp_feSpecularLighting_order_changed (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref)
-{
-    SPFeSpecularLighting *f = SP_FESPECULARLIGHTING(object);
-    if (((SPObjectClass *) (feSpecularLighting_parent_class))->order_changed)
-        (* ((SPObjectClass *) (feSpecularLighting_parent_class))->order_changed) (object, child, old_ref, new_ref);
-
-    sp_feSpecularLighting_children_modified(f);
-    object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-}
-
-static void sp_feSpecularLighting_children_modified(SPFeSpecularLighting *sp_specularlighting)
-{
-   if (sp_specularlighting->renderer) {
-        sp_specularlighting->renderer->light_type = NR::NO_LIGHT;
-        if (SP_IS_FEDISTANTLIGHT(sp_specularlighting->children)) {
-            sp_specularlighting->renderer->light_type = NR::DISTANT_LIGHT;
-            sp_specularlighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_specularlighting->children);
-        }
-        if (SP_IS_FEPOINTLIGHT(sp_specularlighting->children)) {
-            sp_specularlighting->renderer->light_type = NR::POINT_LIGHT;
-            sp_specularlighting->renderer->light.point = SP_FEPOINTLIGHT(sp_specularlighting->children);
-        }
-        if (SP_IS_FESPOTLIGHT(sp_specularlighting->children)) {
-            sp_specularlighting->renderer->light_type = NR::SPOT_LIGHT;
-            sp_specularlighting->renderer->light.spot = SP_FESPOTLIGHT(sp_specularlighting->children);
-        }
-   }
-}
-
-static void sp_feSpecularLighting_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeSpecularLighting *sp_specularlighting = SP_FESPECULARLIGHTING(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_SPECULARLIGHTING);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterSpecularLighting *nr_specularlighting = dynamic_cast<NR::FilterSpecularLighting*>(nr_primitive);
-    g_assert(nr_specularlighting != NULL);
-
-    sp_specularlighting->renderer = nr_specularlighting;
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_specularlighting->specularConstant = sp_specularlighting->specularConstant;
-    nr_specularlighting->specularExponent = sp_specularlighting->specularExponent;
-    nr_specularlighting->surfaceScale = sp_specularlighting->surfaceScale;
-    nr_specularlighting->lighting_color = sp_specularlighting->lighting_color;
-    //We assume there is at most one child
-    nr_specularlighting->light_type = NR::NO_LIGHT;
-    if (SP_IS_FEDISTANTLIGHT(primitive->children)) {
-        nr_specularlighting->light_type = NR::DISTANT_LIGHT;
-        nr_specularlighting->light.distant = SP_FEDISTANTLIGHT(primitive->children);
-    }
-    if (SP_IS_FEPOINTLIGHT(primitive->children)) {
-        nr_specularlighting->light_type = NR::POINT_LIGHT;
-        nr_specularlighting->light.point = SP_FEPOINTLIGHT(primitive->children);
-    }
-    if (SP_IS_FESPOTLIGHT(primitive->children)) {
-        nr_specularlighting->light_type = NR::SPOT_LIGHT;
-        nr_specularlighting->light.spot = SP_FESPOTLIGHT(primitive->children);
-    }
-        
-    //nr_offset->set_dx(sp_offset->dx);
-    //nr_offset->set_dy(sp_offset->dy);
-}
-
-
-/*
-  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/sp-fespecularlighting.h b/src/sp-fespecularlighting.h
deleted file mode 100644 (file)
index 5d2194c..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef SP_FESPECULARLIGHTING_H_SEEN
-#define SP_FESPECULARLIGHTING_H_SEEN
-
-/** \file
- * SVG <feSpecularLighting> implementation, see sp-feSpecularLighting.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *               2007 authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-fespecularlighting-fns.h"
-
-namespace NR {
-class FilterSpecularLighting;
-}
-
-/* FeSpecularLighting base class */
-class SPFeSpecularLightingClass;
-
-struct SPFeSpecularLighting : public SPFilterPrimitive {
-    /** SPECULARLIGHTING ATTRIBUTES HERE */
-    /** surfaceScale attribute */
-    gfloat surfaceScale;
-    guint surfaceScale_set : 1;
-    /** specularConstant attribute */
-    gfloat specularConstant;
-    guint specularConstant_set : 1;
-    /** specularConstant attribute */
-    gfloat specularExponent;
-    guint specularExponent_set : 1;
-    /** kernelUnitLenght attribute */
-    NumberOptNumber kernelUnitLength;
-    /** lighting-color property */
-    guint32 lighting_color;
-    guint lighting_color_set : 1;
-
-    NR::FilterSpecularLighting *renderer;
-};
-
-struct SPFeSpecularLightingClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feSpecularLighting_get_type();
-
-
-#endif /* !SP_FESPECULARLIGHTING_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/sp-fespotlight.cpp b/src/sp-fespotlight.cpp
deleted file mode 100644 (file)
index b669124..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-#define __SP_FESPOTLIGHT_CPP__
-
-/** \file
- * SVG <fespotlight> implementation.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006,2007 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <glib.h>
-
-#include "attributes.h"
-#include "document.h"
-#include "sp-fespotlight.h"
-#include "sp-fediffuselighting-fns.h"
-#include "sp-fespecularlighting-fns.h"
-#include "xml/repr.h"
-
-#define SP_MACROS_SILENT
-#include "macros.h"
-
-/* FeSpotLight class */
-
-static void sp_fespotlight_class_init(SPFeSpotLightClass *klass);
-static void sp_fespotlight_init(SPFeSpotLight *fespotlight);
-
-static void sp_fespotlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_fespotlight_release(SPObject *object);
-static void sp_fespotlight_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_fespotlight_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_fespotlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static SPObjectClass *feSpotLight_parent_class;
-
-GType
-sp_fespotlight_get_type()
-{
-    static GType fespotlight_type = 0;
-
-    if (!fespotlight_type) {
-        GTypeInfo fespotlight_info = {
-            sizeof(SPFeSpotLightClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_fespotlight_class_init,
-            NULL, NULL,
-            sizeof(SPFeSpotLight),
-            16,
-            (GInstanceInitFunc) sp_fespotlight_init,
-            NULL,    /* value_table */
-        };
-        fespotlight_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeSpotLight", &fespotlight_info, (GTypeFlags)0);
-    }
-    return fespotlight_type;
-}
-
-static void
-sp_fespotlight_class_init(SPFeSpotLightClass *klass)
-{
-
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-
-    feSpotLight_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_fespotlight_build;
-    sp_object_class->release = sp_fespotlight_release;
-    sp_object_class->write = sp_fespotlight_write;
-    sp_object_class->set = sp_fespotlight_set;
-    sp_object_class->update = sp_fespotlight_update;
-}
-
-static void
-sp_fespotlight_init(SPFeSpotLight *fespotlight)
-{
-    fespotlight->x = 0;
-    fespotlight->y = 0;
-    fespotlight->z = 0;
-    fespotlight->pointsAtX = 0;
-    fespotlight->pointsAtY = 0;
-    fespotlight->pointsAtZ = 0;
-    fespotlight->specularExponent = 1;
-    fespotlight->limitingConeAngle = 90;
-
-    fespotlight->x_set = FALSE;
-    fespotlight->y_set = FALSE;
-    fespotlight->z_set = FALSE;
-    fespotlight->pointsAtX_set = FALSE;
-    fespotlight->pointsAtY_set = FALSE;
-    fespotlight->pointsAtZ_set = FALSE;
-    fespotlight->specularExponent_set = FALSE;
-    fespotlight->limitingConeAngle_set = FALSE;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPPointLight variables.  For this to get called,
- * 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_fespotlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feSpotLight_parent_class)->build) {
-        ((SPObjectClass *) feSpotLight_parent_class)->build(object, document, repr);
-    }
-
-    //Read values of key attributes from XML nodes into object.
-    sp_object_read_attr(object, "x");
-    sp_object_read_attr(object, "y");
-    sp_object_read_attr(object, "z");
-    sp_object_read_attr(object, "pointsAtX");
-    sp_object_read_attr(object, "pointsAtY");
-    sp_object_read_attr(object, "pointsAtZ");
-    sp_object_read_attr(object, "specularExponent");
-    sp_object_read_attr(object, "limitingConeAngle");
-
-//is this necessary?
-    sp_document_add_resource(document, "fespotlight", object);
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_fespotlight_release(SPObject *object)
-{
-    //SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object);
-
-    if (SP_OBJECT_DOCUMENT(object)) {
-        /* Unregister ourselves */
-        sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fespotlight", SP_OBJECT(object));
-    }
-
-//TODO: release resources here
-}
-
-/**
- * Sets a specific value in the SPFeSpotLight.
- */
-static void
-sp_fespotlight_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object);
-    gchar *end_ptr;
-
-    switch (key) {
-    case SP_ATTR_X:
-        end_ptr = NULL;
-        if (value) {
-            fespotlight->x = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr)
-                fespotlight->x_set = TRUE;
-        }
-        if(!value || !end_ptr) {
-            fespotlight->x = 0;
-            fespotlight->x_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_Y:
-        end_ptr = NULL;
-        if (value) {
-            fespotlight->y = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr)
-                fespotlight->y_set = TRUE;
-        }
-        if(!value || !end_ptr) {
-            fespotlight->y = 0;
-            fespotlight->y_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_Z:
-        end_ptr = NULL;
-        if (value) {
-            fespotlight->z = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr)
-                fespotlight->z_set = TRUE;
-        }
-        if(!value || !end_ptr) {
-            fespotlight->z = 0;
-            fespotlight->z_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_POINTSATX:
-        end_ptr = NULL;
-        if (value) {
-            fespotlight->pointsAtX = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr)
-                fespotlight->pointsAtX_set = TRUE;
-        }
-        if(!value || !end_ptr) {
-            fespotlight->pointsAtX = 0;
-            fespotlight->pointsAtX_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_POINTSATY:
-        end_ptr = NULL;
-        if (value) {
-            fespotlight->pointsAtY = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr)
-                fespotlight->pointsAtY_set = TRUE;
-        }
-        if(!value || !end_ptr) {
-            fespotlight->pointsAtY = 0;
-            fespotlight->pointsAtY_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_POINTSATZ:
-        end_ptr = NULL;
-        if (value) {
-            fespotlight->pointsAtZ = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr)
-                fespotlight->pointsAtZ_set = TRUE;
-        }
-        if(!value || !end_ptr) {
-            fespotlight->pointsAtZ = 0;
-            fespotlight->pointsAtZ_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_SPECULAREXPONENT:
-        end_ptr = NULL;
-        if (value) {
-            fespotlight->specularExponent = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr)
-                fespotlight->specularExponent_set = TRUE;
-        }
-        if(!value || !end_ptr) {
-            fespotlight->specularExponent = 1;
-            fespotlight->specularExponent_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    case SP_ATTR_LIMITINGCONEANGLE:
-        end_ptr = NULL;
-        if (value) {
-            fespotlight->limitingConeAngle = g_ascii_strtod(value, &end_ptr);
-            if (end_ptr)
-                fespotlight->limitingConeAngle_set = TRUE;
-        }
-        if(!value || !end_ptr) {
-            fespotlight->limitingConeAngle = 90;
-            fespotlight->limitingConeAngle_set = FALSE;
-        }
-        if (object->parent &&
-                (SP_IS_FEDIFFUSELIGHTING(object->parent) ||
-                 SP_IS_FESPECULARLIGHTING(object->parent))) {
-            object->parent->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-        }
-        break;
-    default:
-        // See if any parents need this value.
-        if (((SPObjectClass *) feSpotLight_parent_class)->set) {
-            ((SPObjectClass *) feSpotLight_parent_class)->set(object, key, value);
-        }
-        break;
-    }
-}
-
-/**
- *  * Receives update notifications.
- *   */
-static void
-sp_fespotlight_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    SPFeSpotLight *feSpotLight = SP_FESPOTLIGHT(object);
-    (void)feSpotLight;
-
-    if (flags & SP_OBJECT_MODIFIED_FLAG) {
-        /* do something to trigger redisplay, updates? */
-        sp_object_read_attr(object, "x");
-        sp_object_read_attr(object, "y");
-        sp_object_read_attr(object, "z");
-        sp_object_read_attr(object, "pointsAtX");
-        sp_object_read_attr(object, "pointsAtY");
-        sp_object_read_attr(object, "pointsAtZ");
-        sp_object_read_attr(object, "specularExponent");
-        sp_object_read_attr(object, "limitingConeAngle");
-    }
-
-    if (((SPObjectClass *) feSpotLight_parent_class)->update) {
-        ((SPObjectClass *) feSpotLight_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_fespotlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    SPFeSpotLight *fespotlight = SP_FESPOTLIGHT(object);
-
-    if (!repr) {
-        repr = SP_OBJECT_REPR(object)->duplicate(doc);
-    }
-
-    if (fespotlight->x_set)
-        sp_repr_set_css_double(repr, "x", fespotlight->x);
-    if (fespotlight->y_set)
-        sp_repr_set_css_double(repr, "y", fespotlight->y);
-    if (fespotlight->z_set)
-        sp_repr_set_css_double(repr, "z", fespotlight->z);
-    if (fespotlight->pointsAtX_set)
-        sp_repr_set_css_double(repr, "pointsAtX", fespotlight->pointsAtX);
-    if (fespotlight->pointsAtY_set)
-        sp_repr_set_css_double(repr, "pointsAtY", fespotlight->pointsAtY);
-    if (fespotlight->pointsAtZ_set)
-        sp_repr_set_css_double(repr, "pointsAtZ", fespotlight->pointsAtZ);
-    if (fespotlight->specularExponent_set)
-        sp_repr_set_css_double(repr, "specularExponent", fespotlight->specularExponent);
-    if (fespotlight->limitingConeAngle_set)
-        sp_repr_set_css_double(repr, "limitingConeAngle", fespotlight->limitingConeAngle);
-
-    if (((SPObjectClass *) feSpotLight_parent_class)->write) {
-        ((SPObjectClass *) feSpotLight_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-/*
-  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/sp-fespotlight.h b/src/sp-fespotlight.h
deleted file mode 100644 (file)
index d48cf6d..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef SP_FESPOTLIGHT_H_SEEN
-#define SP_FESPOTLIGHT_H_SEEN
-
-/** \file
- * SVG <filter> implementation, see sp-filter.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *   Niko Kiirala <niko@kiirala.com>
- *   Jean-Rene Reinhard <jr@komite.net>
- *
- * Copyright (C) 2006,2007 Authors
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-object.h"
-
-#define SP_TYPE_FESPOTLIGHT (sp_fespotlight_get_type())
-#define SP_FESPOTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPOTLIGHT, SPFeSpotLight))
-#define SP_FESPOTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPOTLIGHT, SPFeSpotLightClass))
-#define SP_IS_FESPOTLIGHT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPOTLIGHT))
-#define SP_IS_FESPOTLIGHT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPOTLIGHT))
-
-/* Distant light class */
-
-
-class SPFeSpotLight;
-class SPFeSpotLightClass;
-
-struct SPFeSpotLight : public SPObject {
-
-    /** x coordinate of the light source */
-    gfloat x; 
-    guint x_set : 1;
-    /** y coordinate of the light source */
-    gfloat y; 
-    guint y_set : 1;
-    /** z coordinate of the light source */
-    gfloat z; 
-    guint z_set : 1;
-    /** x coordinate of the point the source is pointing at */
-    gfloat pointsAtX;
-    guint pointsAtX_set : 1;
-    /** y coordinate of the point the source is pointing at */
-    gfloat pointsAtY;
-    guint pointsAtY_set : 1;
-    /** z coordinate of the point the source is pointing at */
-    gfloat pointsAtZ;
-    guint pointsAtZ_set : 1;
-    /** specular exponent (focus of the light) */
-    gfloat specularExponent;
-    guint specularExponent_set : 1;
-    /** limiting cone angle */
-    gfloat limitingConeAngle;
-    guint limitingConeAngle_set : 1;
-    //other fields
-};
-
-struct SPFeSpotLightClass {
-    SPObjectClass parent_class;
-};
-
-GType
-sp_fespotlight_get_type();
-#endif /* !SP_FESPOTLIGHT_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/sp-fetile-fns.h b/src/sp-fetile-fns.h
deleted file mode 100644 (file)
index b7c4c5f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FETILE_FNS_H
-#define SP_FETILE_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeTile;
-
-#define SP_TYPE_FETILE (sp_feTile_get_type())
-#define SP_FETILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETILE, SPFeTile))
-#define SP_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETILE, SPFeTileClass))
-#define SP_IS_FETILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETILE))
-#define SP_IS_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETILE))
-
-GType sp_feTile_get_type();
-
-#endif /* !SP_FETILE_FNS_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/sp-fetile.cpp b/src/sp-fetile.cpp
deleted file mode 100644 (file)
index 598ccdb..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-#define __SP_FETILE_CPP__
-
-/** \file
- * SVG <feTile> implementation.
- *
- */
-/*
- * Authors:
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-fetile.h"
-#include "xml/repr.h"
-
-
-/* FeTile base class */
-
-static void sp_feTile_class_init(SPFeTileClass *klass);
-static void sp_feTile_init(SPFeTile *feTile);
-
-static void sp_feTile_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feTile_release(SPObject *object);
-static void sp_feTile_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feTile_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feTile_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feTile_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feTile_parent_class;
-
-GType
-sp_feTile_get_type()
-{
-    static GType feTile_type = 0;
-
-    if (!feTile_type) {
-        GTypeInfo feTile_info = {
-            sizeof(SPFeTileClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feTile_class_init,
-            NULL, NULL,
-            sizeof(SPFeTile),
-            16,
-            (GInstanceInitFunc) sp_feTile_init,
-            NULL,    /* value_table */
-        };
-        feTile_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeTile", &feTile_info, (GTypeFlags)0);
-    }
-    return feTile_type;
-}
-
-static void
-sp_feTile_class_init(SPFeTileClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass *sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feTile_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feTile_build;
-    sp_object_class->release = sp_feTile_release;
-    sp_object_class->write = sp_feTile_write;
-    sp_object_class->set = sp_feTile_set;
-    sp_object_class->update = sp_feTile_update;
-    sp_primitive_class->build_renderer = sp_feTile_build_renderer;
-}
-
-static void
-sp_feTile_init(SPFeTile */*feTile*/)
-{
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeTile variables.  For this to get called,
- * 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_feTile_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feTile_parent_class)->build) {
-        ((SPObjectClass *) feTile_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feTile_release(SPObject *object)
-{
-    if (((SPObjectClass *) feTile_parent_class)->release)
-        ((SPObjectClass *) feTile_parent_class)->release(object);
-}
-
-/**
- * Sets a specific value in the SPFeTile.
- */
-static void
-sp_feTile_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeTile *feTile = SP_FETILE(object);
-    (void)feTile;
-
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-        default:
-            if (((SPObjectClass *) feTile_parent_class)->set)
-                ((SPObjectClass *) feTile_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feTile_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feTile_parent_class)->update) {
-        ((SPObjectClass *) feTile_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feTile_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feTile_parent_class)->write) {
-        ((SPObjectClass *) feTile_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feTile_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeTile *sp_tile = SP_FETILE(primitive);
-    (void)sp_tile;
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_TILE);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterTile *nr_tile = dynamic_cast<NR::FilterTile*>(nr_primitive);
-    g_assert(nr_tile != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-}
-
-/*
-  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/sp-fetile.h b/src/sp-fetile.h
deleted file mode 100644 (file)
index efcccf1..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef SP_FETILE_H_SEEN
-#define SP_FETILE_H_SEEN
-
-/** \file
- * SVG <feTile> implementation, see sp-feTile.cpp.
- */
-/*
- * Authors:
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-fetile-fns.h"
-
-#include "display/nr-filter.h"
-#include "display/nr-filter-tile.h"
-
-/* FeTile base class */
-class SPFeTileClass;
-
-struct SPFeTile : public SPFilterPrimitive {
-    /** TILE ATTRIBUTES HERE */
-    
-};
-
-struct SPFeTileClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feTile_get_type();
-
-
-#endif /* !SP_FETILE_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/sp-feturbulence-fns.h b/src/sp-feturbulence-fns.h
deleted file mode 100644 (file)
index 43b4450..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef SP_FETURBULENCE_FNS_H
-#define SP_FETURBULENCE_FNS_H
-
-/** \file 
- * Macros and fn declarations related to gaussian blur filter.
- */
-
-#include <glib-object.h>
-#include <glib/gtypes.h>
-
-namespace Inkscape {
-namespace XML {
-class Node;
-}
-}
-
-class SPFeTurbulence;
-
-#define SP_TYPE_FETURBULENCE (sp_feTurbulence_get_type())
-#define SP_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETURBULENCE, SPFeTurbulence))
-#define SP_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETURBULENCE, SPFeTurbulenceClass))
-#define SP_IS_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETURBULENCE))
-#define SP_IS_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETURBULENCE))
-
-GType sp_feTurbulence_get_type();
-
-#endif /* !SP_FETURBULENCE_FNS_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/sp-feturbulence.cpp b/src/sp-feturbulence.cpp
deleted file mode 100644 (file)
index fcaf6c5..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-#define __SP_FETURBULENCE_CPP__
-
-/** \file
- * SVG <feTurbulence> implementation.
- *
- */
-/*
- * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
- *   hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2007 Felipe Sanches
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "attributes.h"
-#include "svg/svg.h"
-#include "sp-feturbulence.h"
-#include "helper-fns.h"
-#include "xml/repr.h"
-#include <string.h>
-
-#include "display/nr-filter.h"
-#include "display/nr-filter-turbulence.h"
-
-/* FeTurbulence base class */
-
-static void sp_feTurbulence_class_init(SPFeTurbulenceClass *klass);
-static void sp_feTurbulence_init(SPFeTurbulence *feTurbulence);
-
-static void sp_feTurbulence_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_feTurbulence_release(SPObject *object);
-static void sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_feTurbulence_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feTurbulence_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-static void sp_feTurbulence_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
-
-static SPFilterPrimitiveClass *feTurbulence_parent_class;
-
-GType
-sp_feTurbulence_get_type()
-{
-    static GType feTurbulence_type = 0;
-
-    if (!feTurbulence_type) {
-        GTypeInfo feTurbulence_info = {
-            sizeof(SPFeTurbulenceClass),
-            NULL, NULL,
-            (GClassInitFunc) sp_feTurbulence_class_init,
-            NULL, NULL,
-            sizeof(SPFeTurbulence),
-            16,
-            (GInstanceInitFunc) sp_feTurbulence_init,
-            NULL,    /* value_table */
-        };
-        feTurbulence_type = g_type_register_static(SP_TYPE_FILTER_PRIMITIVE, "SPFeTurbulence", &feTurbulence_info, (GTypeFlags)0);
-    }
-    return feTurbulence_type;
-}
-
-static void
-sp_feTurbulence_class_init(SPFeTurbulenceClass *klass)
-{
-    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
-    SPFilterPrimitiveClass * sp_primitive_class = (SPFilterPrimitiveClass *)klass;
-
-    feTurbulence_parent_class = (SPFilterPrimitiveClass*)g_type_class_peek_parent(klass);
-
-    sp_object_class->build = sp_feTurbulence_build;
-    sp_object_class->release = sp_feTurbulence_release;
-    sp_object_class->write = sp_feTurbulence_write;
-    sp_object_class->set = sp_feTurbulence_set;
-    sp_object_class->update = sp_feTurbulence_update;
-
-    sp_primitive_class->build_renderer = sp_feTurbulence_build_renderer;
-}
-
-static void
-sp_feTurbulence_init(SPFeTurbulence *feTurbulence)
-{
-    feTurbulence->updated=false;
-}
-
-/**
- * Reads the Inkscape::XML::Node, and initializes SPFeTurbulence variables.  For this to get called,
- * 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_feTurbulence_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
-{
-    if (((SPObjectClass *) feTurbulence_parent_class)->build) {
-        ((SPObjectClass *) feTurbulence_parent_class)->build(object, document, repr);
-    }
-
-    /*LOAD ATTRIBUTES FROM REPR HERE*/
-    sp_object_read_attr(object, "baseFrequency");
-    sp_object_read_attr(object, "numOctaves");
-    sp_object_read_attr(object, "seed");
-    sp_object_read_attr(object, "stitchTiles");
-    sp_object_read_attr(object, "type");
-}
-
-/**
- * Drops any allocated memory.
- */
-static void
-sp_feTurbulence_release(SPObject *object)
-{
-    if (((SPObjectClass *) feTurbulence_parent_class)->release)
-        ((SPObjectClass *) feTurbulence_parent_class)->release(object);
-}
-
-static bool sp_feTurbulence_read_stitchTiles(gchar const *value){
-    if (!value) return false; // 'noStitch' is default
-    switch(value[0]){
-        case 's':
-            if (strncmp(value, "stitch", 6) == 0) return true;
-            break;
-        case 'n':
-            if (strncmp(value, "noStitch", 8) == 0) return false;
-            break;
-    }
-    return false; // 'noStitch' is default
-}
-
-static NR::FilterTurbulenceType sp_feTurbulence_read_type(gchar const *value){
-    if (!value) return NR::TURBULENCE_TURBULENCE; // 'turbulence' is default
-    switch(value[0]){
-        case 'f':
-            if (strncmp(value, "fractalNoise", 12) == 0) return NR::TURBULENCE_FRACTALNOISE;
-            break;
-        case 't':
-            if (strncmp(value, "turbulence", 10) == 0) return NR::TURBULENCE_TURBULENCE;
-            break;
-    }
-    return NR::TURBULENCE_TURBULENCE; // 'turbulence' is default
-}
-
-/**
- * Sets a specific value in the SPFeTurbulence.
- */
-static void
-sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value)
-{
-    SPFeTurbulence *feTurbulence = SP_FETURBULENCE(object);
-    (void)feTurbulence;
-
-    int read_int;
-    double read_num;
-    bool read_bool;
-    NR::FilterTurbulenceType read_type;
-
-    switch(key) {
-       /*DEAL WITH SETTING ATTRIBUTES HERE*/
-
-        case SP_ATTR_BASEFREQUENCY:
-            feTurbulence->baseFrequency.set(value);
-                //From SVG spec: If two <number>s are provided, the first number represents a base frequency in the X direction and the second value represents a base frequency in the Y direction. If one number is provided, then that value is used for both X and Y.
-            if (feTurbulence->baseFrequency.optNumIsSet() == false)
-                feTurbulence->baseFrequency.setOptNumber(feTurbulence->baseFrequency.getNumber());
-            feTurbulence->updated = false;
-            object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
-        case SP_ATTR_NUMOCTAVES:
-            read_int = (int) helperfns_read_number(value);
-            if (read_int != feTurbulence->numOctaves){
-                feTurbulence->numOctaves = read_int;
-                feTurbulence->updated = false;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_SEED:
-            read_num = helperfns_read_number(value);
-            if (read_num != feTurbulence->seed){
-                feTurbulence->seed = read_num;
-                feTurbulence->updated = false;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_STITCHTILES:
-            read_bool = sp_feTurbulence_read_stitchTiles(value);
-            if (read_bool != feTurbulence->stitchTiles){
-                feTurbulence->stitchTiles = read_bool;
-                feTurbulence->updated = false;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        case SP_ATTR_TYPE:
-            read_type = sp_feTurbulence_read_type(value);
-            if (read_type != feTurbulence->type){
-                feTurbulence->type = read_type;
-                feTurbulence->updated = false;
-                object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            }
-            break;
-        default:
-            if (((SPObjectClass *) feTurbulence_parent_class)->set)
-                ((SPObjectClass *) feTurbulence_parent_class)->set(object, key, value);
-            break;
-    }
-
-}
-
-/**
- * Receives update notifications.
- */
-static void
-sp_feTurbulence_update(SPObject *object, SPCtx *ctx, guint flags)
-{
-    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
-                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
-
-        /* do something to trigger redisplay, updates? */
-
-    }
-
-    if (((SPObjectClass *) feTurbulence_parent_class)->update) {
-        ((SPObjectClass *) feTurbulence_parent_class)->update(object, ctx, flags);
-    }
-}
-
-/**
- * Writes its settings to an incoming repr object, if any.
- */
-static Inkscape::XML::Node *
-sp_feTurbulence_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
-{
-    // Inkscape-only object, not copied during an "plain SVG" dump:
-    if (flags & SP_OBJECT_WRITE_EXT) {
-        if (repr) {
-            // is this sane?
-            //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
-        } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(doc);
-        }
-    }
-
-    if (((SPObjectClass *) feTurbulence_parent_class)->write) {
-        ((SPObjectClass *) feTurbulence_parent_class)->write(object, doc, repr, flags);
-    }
-
-    return repr;
-}
-
-static void sp_feTurbulence_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter) {
-    g_assert(primitive != NULL);
-    g_assert(filter != NULL);
-
-    SPFeTurbulence *sp_turbulence = SP_FETURBULENCE(primitive);
-
-    int primitive_n = filter->add_primitive(NR::NR_FILTER_TURBULENCE);
-    NR::FilterPrimitive *nr_primitive = filter->get_primitive(primitive_n);
-    NR::FilterTurbulence *nr_turbulence = dynamic_cast<NR::FilterTurbulence*>(nr_primitive);
-    g_assert(nr_turbulence != NULL);
-
-    sp_filter_primitive_renderer_common(primitive, nr_primitive);
-
-    nr_turbulence->set_baseFrequency(0, sp_turbulence->baseFrequency.getNumber());
-    nr_turbulence->set_baseFrequency(1, sp_turbulence->baseFrequency.getOptNumber());
-    nr_turbulence->set_numOctaves(sp_turbulence->numOctaves);
-    nr_turbulence->set_seed(sp_turbulence->seed);
-    nr_turbulence->set_stitchTiles(sp_turbulence->stitchTiles);
-    nr_turbulence->set_type(sp_turbulence->type);
-    nr_turbulence->set_updated(sp_turbulence->updated);
-}
-
-/*
-  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/sp-feturbulence.h b/src/sp-feturbulence.h
deleted file mode 100644 (file)
index 6ae993d..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef SP_FETURBULENCE_H_SEEN
-#define SP_FETURBULENCE_H_SEEN
-
-/** \file
- * SVG <feTurbulence> implementation, see sp-feTurbulence.cpp.
- */
-/*
- * Authors:
- *   Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com>
- *   Hugo Rodrigues <haa.rodrigues@gmail.com>
- *
- * Copyright (C) 2006 Hugo Rodrigues
- *
- * Released under GNU GPL, read the file 'COPYING' for more information
- */
-
-#include "sp-filter.h"
-#include "sp-feturbulence-fns.h"
-#include "number-opt-number.h"
-#include "display/nr-filter-turbulence.h"
-
-/* FeTurbulence base class */
-class SPFeTurbulenceClass;
-
-struct SPFeTurbulence : public SPFilterPrimitive {
-    /** TURBULENCE ATTRIBUTES HERE */
-    NumberOptNumber baseFrequency;
-    int numOctaves;
-    double seed;
-    bool stitchTiles;
-    NR::FilterTurbulenceType type;
-    SVGLength x, y, height, width;
-    bool updated;
-};
-
-struct SPFeTurbulenceClass {
-    SPFilterPrimitiveClass parent_class;
-};
-
-GType sp_feTurbulence_get_type();
-
-
-#endif /* !SP_FETURBULENCE_H_SEEN */
-
-/*
-  Local Variables:
-  mode:c++
-  c-file-style:"stroustrup"
-  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
-  indent-tabs-mode:nil
-  fill-column:99
-  End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 83c13ca05bc00baf3814fd9c70eaa6c836b2748d..e0f9b34729111ea5c170c6d9375c177a9cfbebf2 100644 (file)
@@ -352,7 +352,7 @@ sp_flowtext_print(SPItem *item, SPPrintContext *ctx)
     NRRect pbox;
     sp_item_invoke_bbox(item, &pbox, Geom::identity(), TRUE);
     NRRect bbox;
-    boost::optional<Geom::Rect> bbox_maybe = sp_item_bbox_desktop(item);
+    Geom::OptRect bbox_maybe = sp_item_bbox_desktop(item);
     if (!bbox_maybe) {
         return;
     }
@@ -577,6 +577,10 @@ SPFlowtext::getAsText()
                 sp_repr_set_svg_double(span_tspan, "x", anchor_point[Geom::X]);  // FIXME: this will pick up the wrong end of counter-directional runs
             if (set_y)
                 sp_repr_set_svg_double(span_tspan, "y", anchor_point[Geom::Y]);
+            if (line_tspan->childCount() == 0) {
+                sp_repr_set_svg_double(line_tspan, "x", anchor_point[Geom::X]);  // FIXME: this will pick up the wrong end of counter-directional runs
+                sp_repr_set_svg_double(line_tspan, "y", anchor_point[Geom::Y]);
+            }
 
             SPObject *source_obj = 0;
             void *rawptr = 0;
index d0338f369ecc8bba93bd5d6632f308ddd062b97f..2b42a855b3c5877dcb39444fb17d12e63582cc1b 100644 (file)
@@ -701,7 +701,7 @@ void CGroup::onModified(guint flags) {
 
 void CGroup::calculateBBox(NRRect *bbox, Geom::Matrix const &transform, unsigned const flags) {
 
-    boost::optional<Geom::Rect> dummy_bbox;
+    Geom::OptRect dummy_bbox;
 
     GSList *l = _group->childList(false, SPObject::ActionBBox);
     while (l) {
@@ -836,7 +836,7 @@ sp_group_update_patheffect (SPLPEItem *lpeitem, bool write)
         for (PathEffectList::iterator it = lpeitem->path_effect_list->begin(); it != lpeitem->path_effect_list->end(); it++)
         {
             LivePathEffectObject *lpeobj = (*it)->lpeobject;
-            if (lpeobj->get_lpe()) {
+            if (lpeobj && lpeobj->get_lpe()) {
                 lpeobj->get_lpe()->doBeforeEffect(lpeitem);
             }
         }
index 3b0b1e054d7dc4109632374ab7ce762272bf0600..90f84ae0aa0296efd4490d654ba673dffa145691 100644 (file)
@@ -38,7 +38,7 @@ sp_item_rotate_rel(SPItem *item, Geom::Rotate const &rotation)
 void
 sp_item_scale_rel (SPItem *item, Geom::Scale const &scale)
 {
-    boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop(item);
+    Geom::OptRect bbox = sp_item_bbox_desktop(item);
     if (bbox) {
         Geom::Translate const s(bbox->midpoint()); // use getCenter?
         sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * s.inverse() * scale * s);
@@ -95,7 +95,7 @@ get_scale_transform_with_stroke (Geom::Rect const &bbox_param, gdouble strokewid
     gdouble h1 = y1 - y0;
     gdouble r0 = strokewidth;
 
-    if (bbox.isEmpty()) {
+    if (bbox.hasZeroArea()) {
         Geom::Matrix move = Geom::Translate(x0 - bbox.min()[Geom::X], y0 - bbox.min()[Geom::Y]);
         return (move); // cannot scale from empty boxes at all, so only translate
     }
@@ -158,7 +158,7 @@ get_scale_transform_with_stroke (Geom::Rect const &bbox_param, gdouble strokewid
 }
 
 Geom::Rect
-get_visual_bbox (boost::optional<Geom::Rect> const &initial_geom_bbox, Geom::Matrix const &abs_affine, gdouble const initial_strokewidth, bool const transform_stroke)
+get_visual_bbox (Geom::OptRect const &initial_geom_bbox, Geom::Matrix const &abs_affine, gdouble const initial_strokewidth, bool const transform_stroke)
 {
     
     g_assert(initial_geom_bbox);
index 884732abe3f9b5f2a6c9a877606cb7d67e80abb8..40bf0fa4e2d500cc4e2f60942c8a701d25750f22 100644 (file)
@@ -10,7 +10,7 @@ void sp_item_skew_rel (SPItem *item, double skewX, double skewY);
 void sp_item_move_rel(SPItem *item, Geom::Translate const &tr);
 
 Geom::Matrix get_scale_transform_with_stroke (Geom::Rect const &bbox, gdouble strokewidth, bool transform_stroke, gdouble x0, gdouble y0, gdouble x1, gdouble y1);
-Geom::Rect get_visual_bbox (boost::optional<Geom::Rect> const &initial_geom_bbox, Geom::Matrix const &abs_affine, gdouble const initial_strokewidth, bool const transform_stroke);
+Geom::Rect get_visual_bbox (Geom::OptRect const &initial_geom_bbox, Geom::Matrix const &abs_affine, gdouble const initial_strokewidth, bool const transform_stroke);
 
 
 #endif /* !SP_ITEM_TRANSFORM_H */
index 99f543328d98ba1b0702583c28343f142b2553c4..8868b787519e4d31982cf86fd9edb1cbd5fc5510 100644 (file)
@@ -291,7 +291,7 @@ SPItem::setExplicitlyHidden(bool const val) {
  */
 void
 SPItem::setCenter(Geom::Point object_centre) {
-    boost::optional<Geom::Rect> bbox = getBounds(sp_item_i2d_affine(this));
+    Geom::OptRect bbox = getBounds(sp_item_i2d_affine(this));
     if (bbox) {
         transform_center_x = object_centre[Geom::X] - bbox->midpoint()[Geom::X];
         if (fabs(transform_center_x) < 1e-5) // rounding error
@@ -313,7 +313,7 @@ bool SPItem::isCenterSet() {
 }
 
 Geom::Point SPItem::getCenter() const {
-    boost::optional<Geom::Rect> bbox = getBounds(sp_item_i2d_affine(this));
+    Geom::OptRect bbox = getBounds(sp_item_i2d_affine(this));
     if (bbox) {
         return to_2geom(bbox->midpoint()) + Geom::Point (this->transform_center_x, this->transform_center_y);
     } else {
@@ -642,14 +642,13 @@ sp_item_update(SPObject *object, SPCtx *ctx, guint flags)
 
     /* Update bounding box data used by filters */
     if (item->style->filter.set && item->display) {
-        NRRect item_bbox;
-        sp_item_invoke_bbox(item, &item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
-        boost::optional<Geom::Rect> i_bbox = item_bbox;
+        Geom::OptRect item_bbox;
+        sp_item_invoke_bbox(item, item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
 
         SPItemView *itemview = item->display;
         do {
             if (itemview->arenaitem)
-                nr_arena_item_set_item_bbox(itemview->arenaitem, i_bbox);
+                nr_arena_item_set_item_bbox(itemview->arenaitem, item_bbox);
         } while ( (itemview = itemview->next) );
     }
 
@@ -725,22 +724,22 @@ sp_item_write(SPObject *const object, Inkscape::XML::Document *xml_doc, Inkscape
  * \return  There is no guarantee that the return value will contain a rectangle.
             If this item does not have a boundingbox, it might well be empty.
  */
-boost::optional<Geom::Rect> SPItem::getBounds(Geom::Matrix const &transform,
+Geom::OptRect SPItem::getBounds(Geom::Matrix const &transform,
                                       SPItem::BBoxType type,
                                       unsigned int /*dkey*/) const
 {
-    boost::optional<Geom::Rect> r;
+    Geom::OptRect r;
     sp_item_invoke_bbox_full(this, r, transform, type, TRUE);
     return r;
 }
 
 void
-sp_item_invoke_bbox(SPItem const *item, boost::optional<Geom::Rect> &bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type)
+sp_item_invoke_bbox(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type)
 {
     sp_item_invoke_bbox_full(item, bbox, transform, type, clear);
 }
 
-// DEPRECATED to phase out the use of NRRect in favor of boost::optional<Geom::Rect>
+// DEPRECATED to phase out the use of NRRect in favor of Geom::OptRect
 void
 sp_item_invoke_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type)
 {
@@ -755,13 +754,13 @@ sp_item_invoke_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transf
  *               function returns. If this item does not have a boundingbox, this might well be empty.
  */
 void
-sp_item_invoke_bbox_full(SPItem const *item, boost::optional<Geom::Rect> &bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear)
+sp_item_invoke_bbox_full(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear)
 {
     g_assert(item != NULL);
     g_assert(SP_IS_ITEM(item));
 
     if (clear) {
-        bbox = boost::optional<Geom::Rect>();
+        bbox = Geom::OptRect();
     }
 
     // TODO: replace NRRect by Geom::Rect, for all SPItemClasses, and for SP_CLIPPATH
@@ -844,20 +843,20 @@ sp_item_invoke_bbox_full(SPItem const *item, boost::optional<Geom::Rect> &bbox,
         // or it has explicitely been set to be like this (e.g. in sp_shape_bbox)
         
         // When x0 > x1 or y0 > y1, the bbox is considered to be "nothing", although it has not been 
-        // explicitely defined this way for NRRects (as opposed to boost::optional<Geom::Rect>)
+        // explicitely defined this way for NRRects (as opposed to Geom::OptRect)
         // So union bbox with nothing = do nothing, just return
         return;
     }
 
-    // Do not use temp_bbox.upgrade() here, because it uses a test that returns an empty boost::optional<Geom::Rect>()
+    // Do not use temp_bbox.upgrade() here, because it uses a test that returns an empty Geom::OptRect()
     // for any rectangle with zero area. The geometrical bbox of for example a vertical line
-    // would therefore be translated into empty boost::optional<Geom::Rect>() (see bug https://bugs.launchpad.net/inkscape/+bug/168684)
-    boost::optional<Geom::Rect> temp_bbox_new = Geom::Rect(Geom::Point(temp_bbox.x0, temp_bbox.y0), Geom::Point(temp_bbox.x1, temp_bbox.y1));
+    // would therefore be translated into empty Geom::OptRect() (see bug https://bugs.launchpad.net/inkscape/+bug/168684)
+    Geom::OptRect temp_bbox_new = Geom::Rect(Geom::Point(temp_bbox.x0, temp_bbox.y0), Geom::Point(temp_bbox.x1, temp_bbox.y1));
 
     bbox = Geom::unify(bbox, temp_bbox_new);
 }
 
-// DEPRECATED to phase out the use of NRRect in favor of boost::optional<Geom::Rect>
+// DEPRECATED to phase out the use of NRRect in favor of Geom::OptRect
 /** Calls \a item's subclass' bounding box method; clips it by the bbox of clippath, if any; and
  * unions the resulting bbox with \a bbox. If \a clear is true, empties \a bbox first. Passes the
  * transform and the flags to the actual bbox methods. Note that many of subclasses (e.g. groups,
@@ -931,9 +930,9 @@ sp_item_bbox_desktop(SPItem *item, NRRect *bbox, SPItem::BBoxType type)
     sp_item_invoke_bbox(item, bbox, sp_item_i2d_affine(item), TRUE, type);
 }
 
-boost::optional<Geom::Rect> sp_item_bbox_desktop(SPItem *item, SPItem::BBoxType type)
+Geom::OptRect sp_item_bbox_desktop(SPItem *item, SPItem::BBoxType type)
 {
-    boost::optional<Geom::Rect> rect = boost::optional<Geom::Rect>();
+    Geom::OptRect rect = Geom::OptRect();
     sp_item_invoke_bbox(item, rect, sp_item_i2d_affine(item), TRUE, type);
     return rect;
 }
@@ -945,7 +944,7 @@ static void sp_item_private_snappoints(SPItem const *item, SnapPointsIter p, Ink
         * We don't know what shape we could be dealing with here, so we'll just
         * return the corners of the bounding box */
 
-       boost::optional<Geom::Rect> bbox = item->getBounds(sp_item_i2d_affine(item));
+       Geom::OptRect bbox = item->getBounds(sp_item_i2d_affine(item));
     
     if (bbox) {
         Geom::Point p1, p2;
@@ -1134,10 +1133,9 @@ sp_item_invoke_show(SPItem *item, NRArena *arena, unsigned key, unsigned flags)
             SP_OBJECT(mask)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
         }
         NR_ARENA_ITEM_SET_DATA(ai, item);
-        NRRect item_bbox;
-        sp_item_invoke_bbox(item, &item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
-        boost::optional<Geom::Rect> i_bbox = item_bbox;
-        nr_arena_item_set_item_bbox(ai, i_bbox);
+        Geom::OptRect item_bbox;
+        sp_item_invoke_bbox(item, item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
+        nr_arena_item_set_item_bbox(ai, item_bbox);
     }
 
     return ai;
@@ -1740,7 +1738,7 @@ sp_item_convert_to_guides(SPItem *item) {
     SPItem::BBoxType bbox_type = (prefs_bbox ==0)? 
         SPItem::APPROXIMATE_BBOX : SPItem::GEOMETRIC_BBOX;
 
-    boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop(item, bbox_type);
+    Geom::OptRect bbox = sp_item_bbox_desktop(item, bbox_type);
     if (!bbox) {
         g_warning ("Cannot determine item's bounding box during conversion to guides.\n");
         return;
index cd0a376bb4296486b1c087aab4938e2f2548d5fd..1cc05eb25aab3e0114bdc9119198899021056528 100644 (file)
@@ -155,7 +155,7 @@ struct SPItem : public SPObject {
     void raiseToTop();
     void lowerToBottom();
 
-    boost::optional<Geom::Rect> getBounds(Geom::Matrix const &transform, BBoxType type=APPROXIMATE_BBOX, unsigned int dkey=0) const;
+    Geom::OptRect getBounds(Geom::Matrix const &transform, BBoxType type=APPROXIMATE_BBOX, unsigned int dkey=0) const;
 
     sigc::connection _clip_ref_connection;
     sigc::connection _mask_ref_connection;
@@ -214,9 +214,9 @@ struct SPItemClass {
 
 /* Methods */
 
-void sp_item_invoke_bbox(SPItem const *item, boost::optional<Geom::Rect> &bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
+void sp_item_invoke_bbox(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
 void sp_item_invoke_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) __attribute__ ((deprecated));
-void sp_item_invoke_bbox_full(SPItem const *item, boost::optional<Geom::Rect> &bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear);
+void sp_item_invoke_bbox_full(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear);
 void sp_item_invoke_bbox_full(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear) __attribute__ ((deprecated));
 
 unsigned sp_item_pos_in_parent(SPItem *item);
@@ -252,7 +252,7 @@ gint sp_item_event (SPItem *item, SPEvent *event);
 NRArenaItem *sp_item_get_arenaitem(SPItem *item, unsigned int key);
 
 void sp_item_bbox_desktop(SPItem *item, NRRect *bbox, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) __attribute__ ((deprecated));
-boost::optional<Geom::Rect> sp_item_bbox_desktop(SPItem *item, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
+Geom::OptRect sp_item_bbox_desktop(SPItem *item, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
 
 Geom::Matrix i2anc_affine(SPObject const *item, SPObject const *ancestor);
 Geom::Matrix i2i_affine(SPObject const *src, SPObject const *dest);
index 0fe02e01dbc23f3211bd6a5363120b7c1acd72ca..1939b2ec076b5b7826196c8d35e23cc5063dae25 100644 (file)
@@ -209,19 +209,17 @@ sp_lpe_item_set(SPObject *object, unsigned int key, gchar const *value)
                         try {
                             path_effect_ref->link(href.c_str());
                         } catch (Inkscape::BadURIException e) {
-                            g_warning("BadURIException: %s", e.what());
+                            g_warning("BadURIException when trying to find LPE: %s", e.what());
                             path_effect_ref->unlink();
                             delete path_effect_ref;
                             path_effect_ref = NULL;
                         }
 
-                        if (path_effect_ref && path_effect_ref->lpeobject && path_effect_ref->lpeobject->get_lpe()) {
-                            lpeitem->path_effect_list->push_back(path_effect_ref);
-                        } else {
-                            // something has gone wrong in finding the right patheffect. For example when the specified LPE name does not exist.
-                            path_effect_ref->unlink();
-                            delete path_effect_ref;
-                            path_effect_ref = NULL;
+                        lpeitem->path_effect_list->push_back(path_effect_ref);
+                        if ( !(path_effect_ref->lpeobject && path_effect_ref->lpeobject->get_lpe()) ) {
+                            // something has gone wrong in finding the right patheffect.
+                            g_warning("Unknown LPE type specified, LPE stack effectively disabled");
+                            // keep the effect in the lpestack, so the whole stack is effectively disabled but maintained
                         }
                     }
                 }
@@ -300,9 +298,12 @@ sp_lpe_item_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::
     return repr;
 }
 
-void sp_lpe_item_perform_path_effect(SPLPEItem *lpeitem, SPCurve *curve) {
-    if (!lpeitem) return;
-    if (!curve) return;
+/**
+ * returns true when LPE was successful.
+ */
+bool sp_lpe_item_perform_path_effect(SPLPEItem *lpeitem, SPCurve *curve) {
+    if (!lpeitem) return false;
+    if (!curve) return false;
 
     if (sp_lpe_item_has_path_effect(lpeitem) && sp_lpe_item_path_effects_enabled(lpeitem)) {
         for (PathEffectList::iterator it = lpeitem->path_effect_list->begin(); it != lpeitem->path_effect_list->end(); ++it)
@@ -313,22 +314,22 @@ void sp_lpe_item_perform_path_effect(SPLPEItem *lpeitem, SPCurve *curve) {
                  * For example, this happens when copy pasting an object with LPE applied. Probably because the object is pasted while the effect is not yet pasted to defs, and cannot be found.
                  */
                 g_warning("sp_lpe_item_perform_path_effect - NULL lpeobj in list!");
-                return;
+                return false;
             }
             Inkscape::LivePathEffect::Effect *lpe = lpeobj->get_lpe();
             if (!lpe) {
                 /** \todo Investigate the cause of this.
                  * Not sure, but I think this can happen when an unknown effect type is specified...
                  */
-                g_warning("sp_lpe_item_perform_path_effect - lpeobj without lpe!");
-                return;
+                g_warning("sp_lpe_item_perform_path_effect - lpeobj with invalid lpe in the stack!");
+                return false;
             }
 
             if (lpe->isVisible()) {
                 if (lpe->acceptsNumClicks() > 0 && !lpe->isReady()) {
                     // if the effect expects mouse input before being applied and the input is not finished
                     // yet, we don't alter the path
-                    return;
+                    return false;
                 }
 
                 // Groups have their doBeforeEffect called elsewhere
@@ -345,10 +346,13 @@ void sp_lpe_item_perform_path_effect(SPLPEItem *lpeitem, SPCurve *curve) {
                         SP_ACTIVE_DESKTOP->messageStack()->flash( Inkscape::WARNING_MESSAGE,
                                         _("An exception occurred during execution of the Path Effect.") );
                     }
+                    return false;
                 }
             }
         }
     }
+
+    return true;
 }
 
 /**
index c5dc4048bce257806466457a090e4d1f8a1cc126..e9561c2c2c26f6f89a9ba5436c0b213d8a15d924 100644 (file)
@@ -54,7 +54,7 @@ struct SPLPEItemClass {
 GType sp_lpe_item_get_type();
 
 void sp_lpe_item_update_patheffect (SPLPEItem *lpeitem, bool wholetree, bool write);
-void sp_lpe_item_perform_path_effect(SPLPEItem *lpeitem, SPCurve *curve);
+bool sp_lpe_item_perform_path_effect(SPLPEItem *lpeitem, SPCurve *curve);
 void sp_lpe_item_add_path_effect(SPLPEItem *lpeitem, gchar *value, bool reset);
 void sp_lpe_item_add_path_effect(SPLPEItem *lpeitem, LivePathEffectObject * new_lpeobj);
 void sp_lpe_item_replace_path_effect(SPLPEItem *lpeitem, LivePathEffectObject * old_lpeobj,
index a73c178c75134719d8211a39308b3bcb97b78ddc..2b7c8bbc44178eb30f82cc8be2b04a7aa3f55388 100644 (file)
@@ -34,8 +34,6 @@
 #include "desktop.h"
 #include "conn-avoid-ref.h" // for defaultConnSpacing.
 
-
-#define DEFAULTTOLERANCE 0.4
 #define DEFAULTGRIDCOLOR 0x3f3fff25
 #define DEFAULTGRIDEMPCOLOR 0x3f3fff60
 #define DEFAULTGRIDEMPSPACING 5
@@ -113,8 +111,7 @@ static void sp_namedview_init(SPNamedView *nv)
     nv->guides = NULL;
     nv->viewcount = 0;
     nv->grids = NULL;
-    nv->snapindicator = false;
-
+    
     nv->default_layer_id = 0;
 
     nv->connector_spacing = defaultConnSpacing;
@@ -246,7 +243,6 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape:
     sp_object_read_attr(object, "inkscape:window-x");
     sp_object_read_attr(object, "inkscape:window-y");
     sp_object_read_attr(object, "inkscape:snap-global");
-    sp_object_read_attr(object, "inkscape:snap-indicator");
     sp_object_read_attr(object, "inkscape:snap-bbox");
     sp_object_read_attr(object, "inkscape:snap-nodes");
     sp_object_read_attr(object, "inkscape:snap-guide");
@@ -327,7 +323,7 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
             break;
     case SP_ATTR_GRIDTOLERANCE:
             nv->gridtoleranceunit = &px;
-            nv->gridtolerance = DEFAULTTOLERANCE;
+            nv->gridtolerance = 10000;
             if (value) {
                 sp_nv_read_length(value, SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE, &nv->gridtolerance, &nv->gridtoleranceunit);
             }
@@ -335,7 +331,7 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
             break;
     case SP_ATTR_GUIDETOLERANCE:
             nv->guidetoleranceunit = &px;
-            nv->guidetolerance = DEFAULTTOLERANCE;
+            nv->guidetolerance = 20;
             if (value) {
                 sp_nv_read_length(value, SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE, &nv->guidetolerance, &nv->guidetoleranceunit);
             }
@@ -343,7 +339,7 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
             break;
     case SP_ATTR_OBJECTTOLERANCE:
             nv->objecttoleranceunit = &px;
-            nv->objecttolerance = DEFAULTTOLERANCE;
+            nv->objecttolerance = 20;
             if (value) {
                 sp_nv_read_length(value, SP_UNIT_ABSOLUTE | SP_UNIT_DEVICE, &nv->objecttolerance, &nv->objecttoleranceunit);
             }
@@ -458,10 +454,6 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
             nv->snap_manager.snapprefs.setSnapEnabledGlobally(value ? sp_str_to_bool(value) : TRUE);
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
-    case SP_ATTR_INKSCAPE_SNAP_INDICATOR:
-            nv->snapindicator = (value) ? sp_str_to_bool (value) : TRUE;
-            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
-            break;
     case SP_ATTR_INKSCAPE_SNAP_BBOX:
             nv->snap_manager.snapprefs.setSnapModeBBox(value ? sp_str_to_bool(value) : FALSE);
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
index 3ed02bf59a4fbba75f88f77249ad7b0b08d949e3..5a9c2971f392f56073b113ff961ff5442a886737 100644 (file)
@@ -51,8 +51,7 @@ struct SPNamedView : public SPObjectGroup {
     SnapManager snap_manager;
     GSList * grids;
     bool grids_visible;
-    bool snapindicator;
-
+    
     SPUnit const *doc_units;
 
     SPUnit const *gridtoleranceunit;
index f45ed12830094aa45027c49d5f140e6b817ef806..4c3d5196ee2c4de5bb3753ca8ce46d17f94e4e79 100644 (file)
 #include "xml/repr.h"
 #include "sp-filter.h"
 #include "sp-gaussian-blur.h"
-#include "sp-feblend.h"
-#include "sp-fecolormatrix.h"
-#include "sp-fecomponenttransfer.h"
-#include "sp-fecomponenttransfer-funcnode.h"
-#include "sp-fecomposite.h"
-#include "sp-feconvolvematrix.h"
-#include "sp-fediffuselighting.h"
-#include "sp-fedistantlight.h"
-#include "sp-fedisplacementmap.h"
-#include "sp-feflood.h"
-#include "sp-feimage.h"
-#include "sp-femerge.h"
-#include "sp-femorphology.h"
-#include "sp-feoffset.h"
-#include "sp-fepointlight.h"
-#include "sp-fespecularlighting.h"
-#include "sp-fespotlight.h"
-#include "sp-fetile.h"
-#include "sp-feturbulence.h"
-#include "sp-femergenode.h"
+#include "filters/blend.h"
+#include "filters/colormatrix.h"
+#include "filters/componenttransfer.h"
+#include "filters/componenttransfer-funcnode.h"
+#include "filters/composite.h"
+#include "filters/convolvematrix.h"
+#include "filters/diffuselighting.h"
+#include "filters/distantlight.h"
+#include "filters/displacementmap.h"
+#include "filters/flood.h"
+#include "filters/image.h"
+#include "filters/merge.h"
+#include "filters/morphology.h"
+#include "filters/offset.h"
+#include "filters/pointlight.h"
+#include "filters/specularlighting.h"
+#include "filters/spotlight.h"
+#include "filters/tile.h"
+#include "filters/turbulence.h"
+#include "filters/mergenode.h"
 #include "live_effects/lpeobject.h"
 #include "sp-title.h"
 #include "sp-desc.h"
index c91b0ad0dcacfcbca7ee6e30b5e2d24183e35de9..faa2cf4575fdb05ca4f35dd0e24899c7c6f84ddf 100644 (file)
@@ -510,8 +510,8 @@ sp_offset_set_shape(SPShape *shape)
         theRes->ConvertToForme (orig, 1, originaux);
 
         SPItem *item = shape;
-        boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop (item);
-        if ( bbox && !bbox->isEmpty() ) {
+        Geom::OptRect bbox = sp_item_bbox_desktop (item);
+        if ( bbox ) {
             gdouble size = L2(bbox->dimensions());
             gdouble const exp = NR::expansion(item->transform);
             if (exp != 0)
index 404612be3a06483750c5aad7c13e23618c7ec42a..51c3746c89b3dc4f6f4cfb4f76a8462b7943e5aa 100644 (file)
@@ -388,19 +388,17 @@ sp_path_update_patheffect(SPLPEItem *lpeitem, bool write)
 {
     SPShape * const shape = (SPShape *) lpeitem;
     SPPath * const path = (SPPath *) lpeitem;
+    Inkscape::XML::Node *repr = SP_OBJECT_REPR(shape);
 
     if (path->original_curve) {
-        // if a path does not have an lpeitem applied, then reset the curve to the original_curve.
-        // This is very important for LPEs on groups to work properly!
         SPCurve *curve = path->original_curve->copy();
+        /* if a path does not have an lpeitem applied, then reset the curve to the original_curve.
+         * This is very important for LPEs to work properly! (the bbox might be recalculated depending on the curve in shape)*/
         sp_shape_set_curve_insync(shape, curve, TRUE);
-        sp_lpe_item_perform_path_effect(SP_LPE_ITEM(shape), curve);
-        SP_OBJECT(shape)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);        // this might be optimized in future for the case when this path is in a group with lpe applied (and will therefore have its curve change again when the group LPE is applied)
-        curve->unref();
 
-        if (write) {
+        bool success = sp_lpe_item_perform_path_effect(SP_LPE_ITEM(shape), curve);
+        if (success && write) {
             // could also do SP_OBJECT(shape)->updateRepr();  but only the d attribute needs updating.
-            Inkscape::XML::Node *repr = SP_OBJECT_REPR(shape);
             if ( shape->curve != NULL ) {
                 gchar *str = sp_svg_write_path(shape->curve->get_pathvector());
                 repr->setAttribute("d", str);
@@ -408,7 +406,19 @@ sp_path_update_patheffect(SPLPEItem *lpeitem, bool write)
             } else {
                 repr->setAttribute("d", NULL);
             }
+        } else {
+            // LPE was unsuccesfull. Read the old 'd'-attribute.
+            if (gchar const * value = repr->attribute("d")) {
+                Geom::PathVector pv = sp_svg_read_pathv(value);
+                SPCurve *oldcurve = new SPCurve(pv);
+                if (oldcurve) {
+                    sp_shape_set_curve(shape, oldcurve, TRUE);
+                    oldcurve->unref();
+                }
+            }
         }
+        SP_OBJECT(shape)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+        curve->unref();
     }
 }
 
index 96ff50cda909f02ae1cfe2592dc51de8385cf0e7..711f2c4085e57bad8807dada14ccce97e9ea8078 100644 (file)
@@ -226,7 +226,7 @@ sp_pattern_set (SPObject *object, unsigned int key, const gchar *value)
                object->requestModified(SP_OBJECT_MODIFIED_FLAG);
                break;
        case SP_ATTR_PATTERNTRANSFORM: {
-               NR::Matrix t;
+               Geom::Matrix t;
                if (value && sp_svg_transform_read (value, &t)) {
                        pat->patternTransform = t;
                        pat->patternTransform_set = TRUE;
index 2a23b1115816afb1e5bcadb6ee4508a9b7db79ae..d3f357e7688f51e1d6a025aa04eebe1d7738d0ed 100644 (file)
@@ -276,7 +276,7 @@ sp_shape_update (SPObject *object, SPCtx *ctx, unsigned int flags)
     if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_PARENT_MODIFIED_FLAG)) {
         /* This is suboptimal, because changing parent style schedules recalculation */
         /* But on the other hand - how can we know that parent does not tie style and transform */
-        boost::optional<Geom::Rect> paintbox = SP_ITEM(object)->getBounds(Geom::identity(), SPItem::GEOMETRIC_BBOX);
+        Geom::OptRect paintbox = SP_ITEM(object)->getBounds(Geom::identity(), SPItem::GEOMETRIC_BBOX);
         for (SPItemView *v = SP_ITEM (shape)->display; v != NULL; v = v->next) {
             NRArenaShape * const s = NR_ARENA_SHAPE(v->arenaitem);
             if (flags & SP_OBJECT_MODIFIED_FLAG) {
@@ -484,69 +484,40 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &
 {
     SPShape const *shape = SP_SHAPE (item);
     if (shape->curve) {
-
-        NRRect  cbbox;
-
-        Geom::Rect geombbox = bounds_exact_transformed(shape->curve->get_pathvector(), transform);
-        cbbox.x0 = geombbox[0][0];
-        cbbox.y0 = geombbox[1][0];
-        cbbox.x1 = geombbox[0][1];
-        cbbox.y1 = geombbox[1][1];
-
-        if ((SPItem::BBoxType) flags != SPItem::GEOMETRIC_BBOX) {
-            
-            SPStyle* style=SP_OBJECT_STYLE (item);
-            if (!style->stroke.isNone()) {
-                double const scale = transform.descrim();
-                if ( fabs(style->stroke_width.computed * scale) > 0.01 ) { // sinon c'est 0=oon veut pas de bord
-                    double const width = MAX(0.125, style->stroke_width.computed * scale);
-                    if ( fabs(cbbox.x1-cbbox.x0) > -0.00001 && fabs(cbbox.y1-cbbox.y0) > -0.00001 ) {
-                        cbbox.x0-=0.5*width;
-                        cbbox.x1+=0.5*width;
-                        cbbox.y0-=0.5*width;
-                        cbbox.y1+=0.5*width;
-                    }
-                }
-            }
-
-            // Union with bboxes of the markers, if any
-            if (sp_shape_has_markers (shape)) {
-                /* TODO: make code prettier: lots of variables can be taken out of the loop! */
-                Geom::PathVector const & pathv = shape->curve->get_pathvector();
-                for(Geom::PathVector::const_iterator path_it = pathv.begin(); path_it != pathv.end(); ++path_it) {
-                    if ( shape->marker[SP_MARKER_LOC_START] ) {
-                        SPMarker* marker = SP_MARKER (shape->marker[SP_MARKER_LOC_START]);
-                        SPItem* marker_item = sp_item_first_item_child (SP_OBJECT (shape->marker[SP_MARKER_LOC_START]));
-
-                        Geom::Matrix tr(sp_shape_marker_get_transform_at_start(path_it->front()));
-
-                        if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
-                            tr = Geom::Scale(style->stroke_width.computed) * tr;
+        Geom::OptRect geombbox = bounds_exact_transformed(shape->curve->get_pathvector(), transform);
+        if (geombbox) {
+            NRRect  cbbox;
+            cbbox.x0 = (*geombbox)[0][0];
+            cbbox.y0 = (*geombbox)[1][0];
+            cbbox.x1 = (*geombbox)[0][1];
+            cbbox.y1 = (*geombbox)[1][1];
+
+            if ((SPItem::BBoxType) flags != SPItem::GEOMETRIC_BBOX) {
+                
+                SPStyle* style=SP_OBJECT_STYLE (item);
+                if (!style->stroke.isNone()) {
+                    double const scale = transform.descrim();
+                    if ( fabs(style->stroke_width.computed * scale) > 0.01 ) { // sinon c'est 0=oon veut pas de bord
+                        double const width = MAX(0.125, style->stroke_width.computed * scale);
+                        if ( fabs(cbbox.x1-cbbox.x0) > -0.00001 && fabs(cbbox.y1-cbbox.y0) > -0.00001 ) {
+                            cbbox.x0-=0.5*width;
+                            cbbox.x1+=0.5*width;
+                            cbbox.y0-=0.5*width;
+                            cbbox.y1+=0.5*width;
                         }
-
-                        // total marker transform
-                        tr = marker_item->transform * marker->c2p * tr * transform;
-
-                        // get bbox of the marker with that transform
-                        NRRect marker_bbox;
-                        sp_item_invoke_bbox (marker_item, &marker_bbox, from_2geom(tr), true);
-                        // union it with the shape bbox
-                        nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
                     }
+                }
 
-                    if ( shape->marker[SP_MARKER_LOC_MID] && (path_it->size_default() > 1) ) {
-                        Geom::Path::const_iterator curve_it1 = path_it->begin();      // incoming curve
-                        Geom::Path::const_iterator curve_it2 = ++(path_it->begin());  // outgoing curve
-                        while (curve_it2 != path_it->end_default())
-                        {
-                            /* Put marker between curve_it1 and curve_it2.
-                             * Loop to end_default (so including closing segment), because when a path is closed,
-                             * there should be a midpoint marker between last segment and closing straight line segment */
-
-                            SPMarker* marker = SP_MARKER (shape->marker[SP_MARKER_LOC_MID]);
-                            SPItem* marker_item = sp_item_first_item_child (SP_OBJECT (shape->marker[SP_MARKER_LOC_MID]));
+                // Union with bboxes of the markers, if any
+                if (sp_shape_has_markers (shape)) {
+                    /* TODO: make code prettier: lots of variables can be taken out of the loop! */
+                    Geom::PathVector const & pathv = shape->curve->get_pathvector();
+                    for(Geom::PathVector::const_iterator path_it = pathv.begin(); path_it != pathv.end(); ++path_it) {
+                        if ( shape->marker[SP_MARKER_LOC_START] ) {
+                            SPMarker* marker = SP_MARKER (shape->marker[SP_MARKER_LOC_START]);
+                            SPItem* marker_item = sp_item_first_item_child (SP_OBJECT (shape->marker[SP_MARKER_LOC_START]));
 
-                            Geom::Matrix tr(sp_shape_marker_get_transform(*curve_it1, *curve_it2));
+                            Geom::Matrix tr(sp_shape_marker_get_transform_at_start(path_it->front()));
 
                             if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
                                 tr = Geom::Scale(style->stroke_width.computed) * tr;
@@ -560,45 +531,74 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &
                             sp_item_invoke_bbox (marker_item, &marker_bbox, from_2geom(tr), true);
                             // union it with the shape bbox
                             nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
-
-                            ++curve_it1;
-                            ++curve_it2;
                         }
-                    }
 
-                    if ( shape->marker[SP_MARKER_LOC_END] ) {
-                        SPMarker* marker = SP_MARKER (shape->marker[SP_MARKER_LOC_END]);
-                        SPItem* marker_item = sp_item_first_item_child (SP_OBJECT (shape->marker[SP_MARKER_LOC_END]));
+                        if ( shape->marker[SP_MARKER_LOC_MID] && (path_it->size_default() > 1) ) {
+                            Geom::Path::const_iterator curve_it1 = path_it->begin();      // incoming curve
+                            Geom::Path::const_iterator curve_it2 = ++(path_it->begin());  // outgoing curve
+                            while (curve_it2 != path_it->end_default())
+                            {
+                                /* Put marker between curve_it1 and curve_it2.
+                                 * Loop to end_default (so including closing segment), because when a path is closed,
+                                 * there should be a midpoint marker between last segment and closing straight line segment */
 
-                        /* Get reference to last curve in the path.
-                         * For moveto-only path, this returns the "closing line segment". */
-                        unsigned int index = path_it->size_default();
-                        if (index > 0) {
-                            index--;
-                        }
-                        Geom::Curve const &lastcurve = (*path_it)[index];
+                                SPMarker* marker = SP_MARKER (shape->marker[SP_MARKER_LOC_MID]);
+                                SPItem* marker_item = sp_item_first_item_child (SP_OBJECT (shape->marker[SP_MARKER_LOC_MID]));
+
+                                Geom::Matrix tr(sp_shape_marker_get_transform(*curve_it1, *curve_it2));
+
+                                if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
+                                    tr = Geom::Scale(style->stroke_width.computed) * tr;
+                                }
 
-                        Geom::Matrix tr = sp_shape_marker_get_transform_at_end(lastcurve);
+                                // total marker transform
+                                tr = marker_item->transform * marker->c2p * tr * transform;
 
-                        if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
-                            tr = Geom::Scale(style->stroke_width.computed) * tr;
+                                // get bbox of the marker with that transform
+                                NRRect marker_bbox;
+                                sp_item_invoke_bbox (marker_item, &marker_bbox, from_2geom(tr), true);
+                                // union it with the shape bbox
+                                nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
+
+                                ++curve_it1;
+                                ++curve_it2;
+                            }
                         }
 
-                        // total marker transform
-                        tr = marker_item->transform * marker->c2p * tr * transform;
+                        if ( shape->marker[SP_MARKER_LOC_END] ) {
+                            SPMarker* marker = SP_MARKER (shape->marker[SP_MARKER_LOC_END]);
+                            SPItem* marker_item = sp_item_first_item_child (SP_OBJECT (shape->marker[SP_MARKER_LOC_END]));
+
+                            /* Get reference to last curve in the path.
+                             * For moveto-only path, this returns the "closing line segment". */
+                            unsigned int index = path_it->size_default();
+                            if (index > 0) {
+                                index--;
+                            }
+                            Geom::Curve const &lastcurve = (*path_it)[index];
+
+                            Geom::Matrix tr = sp_shape_marker_get_transform_at_end(lastcurve);
 
-                        // get bbox of the marker with that transform
-                        NRRect marker_bbox;
-                        sp_item_invoke_bbox (marker_item, &marker_bbox, tr, true);
-                        // union it with the shape bbox
-                        nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
+                            if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
+                                tr = Geom::Scale(style->stroke_width.computed) * tr;
+                            }
+
+                            // total marker transform
+                            tr = marker_item->transform * marker->c2p * tr * transform;
+
+                            // get bbox of the marker with that transform
+                            NRRect marker_bbox;
+                            sp_item_invoke_bbox (marker_item, &marker_bbox, tr, true);
+                            // union it with the shape bbox
+                            nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
+                        }
                     }
                 }
             }
-        }
 
-        // copy our bbox to the variable we're given
-        *bbox = cbbox;
+            // copy our bbox to the variable we're given
+            *bbox = cbbox;
+        }
     }
 }
 
@@ -744,7 +744,7 @@ sp_shape_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int
     NRArenaShape * const s = NR_ARENA_SHAPE(arenaitem);
     nr_arena_shape_set_style(s, object->style);
     nr_arena_shape_set_path(s, shape->curve, false);
-    boost::optional<Geom::Rect> paintbox = item->getBounds(Geom::identity());
+    Geom::OptRect paintbox = item->getBounds(Geom::identity());
     if (paintbox) {
         s->setPaintBox(*paintbox);
     }
index 9a3708d4b3a55e888fab51479636075ad19b40aa..23233d04e1f8921e0a9d6750b1006a0c5504a62a 100644 (file)
@@ -455,8 +455,17 @@ sp_spiral_set_shape (SPShape *shape)
                sp_spiral_fit_and_draw (spiral, c, (1.0 - t)/(SAMPLE_SIZE - 1.0),
                                        darray, hat1, hat2, &t);
 
-    sp_lpe_item_perform_path_effect(SP_LPE_ITEM (spiral), c);
-    sp_shape_set_curve_insync ((SPShape *) spiral, c, TRUE);
+    /* Reset the shape'scurve to the "original_curve"
+     * This is very important for LPEs to work properly! (the bbox might be recalculated depending on the curve in shape)*/
+    sp_shape_set_curve_insync (shape, c, TRUE);
+    if (sp_lpe_item_has_path_effect(SP_LPE_ITEM(shape)) && sp_lpe_item_path_effects_enabled(SP_LPE_ITEM(shape))) {
+        SPCurve *c_lpe = c->copy();
+        bool success = sp_lpe_item_perform_path_effect(SP_LPE_ITEM (shape), c_lpe);
+        if (success) {
+            sp_shape_set_curve_insync (shape, c_lpe, TRUE);
+        }
+        c_lpe->unref();
+    }
     c->unref();
 }
 
index f5649e19f059b531c35a2770b8203458d0e8a303..79bdc46502a2f8b9277658c72977098a63e79001 100644 (file)
@@ -491,8 +491,18 @@ sp_star_set_shape (SPShape *shape)
                }
 
     c->closepath();
-    sp_lpe_item_perform_path_effect(SP_LPE_ITEM (star), c);
-    sp_shape_set_curve_insync (SP_SHAPE (star), c, TRUE);
+
+    /* Reset the shape'scurve to the "original_curve"
+     * This is very important for LPEs to work properly! (the bbox might be recalculated depending on the curve in shape)*/
+    sp_shape_set_curve_insync (shape, c, TRUE);
+    if (sp_lpe_item_has_path_effect(SP_LPE_ITEM(shape)) && sp_lpe_item_path_effects_enabled(SP_LPE_ITEM(shape))) {
+        SPCurve *c_lpe = c->copy();
+        bool success = sp_lpe_item_perform_path_effect(SP_LPE_ITEM (shape), c_lpe);
+        if (success) {
+            sp_shape_set_curve_insync (shape, c_lpe, TRUE);
+        }
+        c_lpe->unref();
+    }
     c->unref();
 }
 
index a3a4ce59ff1d9d28fbf17ea98ba3dd37eaca25bc..eb01e625ab8d0b30ff3b8ee60bf5a3a9581b06f4 100644 (file)
@@ -1648,7 +1648,7 @@ sp_selected_path_simplify_items(SPDesktop *desktop,
 
     bool didSomething = false;
 
-    boost::optional<Geom::Rect> selectionBbox = selection->bounds();
+    Geom::OptRect selectionBbox = selection->bounds();
     if (!selectionBbox) {
         return false;
     }
@@ -1669,7 +1669,7 @@ sp_selected_path_simplify_items(SPDesktop *desktop,
           continue;
 
         if (simplifyIndividualPaths) {
-            boost::optional<Geom::Rect> itemBbox = item->getBounds(sp_item_i2d_affine(item));
+            Geom::OptRect itemBbox = item->getBounds(sp_item_i2d_affine(item));
             if (itemBbox) {
                 simplifySize      = L2(itemBbox->dimensions());
             } else {
diff --git a/src/streams-gzip.cpp b/src/streams-gzip.cpp
deleted file mode 100644 (file)
index c77e716..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * IO layer : gzip streambuf and streams
- *
- * Authors:
- *   Johan Ceuppens <jceuppen at easynet dot be>
- *
- * Copyright (C) 2004 Johan Ceuppens
- *
- * Released under GNU LGPL, read the file 'COPYING.LIB' for more information
- */
-
-#include <cstring>
-#include <string>
-#include <string.h>
-
-#include "streams-gzip.h"
-
-namespace Inkscape {
-
-//With some inpsiration and code from libgsf, fastjar, libpng and RFC 1952
-
-static int const GZIP_IS_ASCII      = 0x01; //file contains text
-static int const GZIP_HEADER_CRC     = 0x02; //there is a CRC in the header
-static int const GZIP_EXTRA_FIELD    = 0x04; //there is an 'extra' field
-static int const GZIP_ORIGINAL_NAME  = 0x08; //the original is stored
-static int const GZIP_HAS_COMMENT    = 0x10; //There is a comment in the header
-static unsigned int const GZIP_HEADER_FLAGS = (GZIP_IS_ASCII
-                                              |GZIP_HEADER_CRC
-                                              |GZIP_EXTRA_FIELD
-                                              |GZIP_ORIGINAL_NAME
-                                              |GZIP_HAS_COMMENT);
-
-/**
- * GZipBuffer
- */
-
-void GZipBuffer::consume_header() throw(GZipHeaderException)
-{
-    unsigned int flags;
-    guint8 data[4];
-
-    try {
-       _urihandle->read(data, 4);
-       check_signature(data);
-       check_flags(data);
-       flags = data[3];
-       _urihandle->read(data, 4);
-       //get_modification_time()
-       _urihandle->read(data, 1);
-       //check_extra_flags();
-       _urihandle->read(data, 1);
-       //check_OS();
-       
-       if (flags & GZIP_EXTRA_FIELD) {
-           get_extrafield();
-       }
-       if (flags & GZIP_ORIGINAL_NAME) {
-           get_filename();
-       }
-       if (flags & GZIP_HAS_COMMENT) {
-           get_comment();
-       }
-       if (flags & GZIP_HEADER_CRC) {
-           get_crc();
-       }
-    }
-    catch(std::exception& e) {
-       throw GZipHeaderException();
-    }
-}
-
-void GZipBuffer::check_signature(guint8 *data) throw(GZipHeaderException)
-{
-    guint8 const signature[2] = {0x1f, 0x8b};
-    if (memcmp(data, signature, sizeof(signature)) != 0)
-       throw GZipHeaderException();
-}
-
-void GZipBuffer::check_flags(guint8 *data) throw(GZipHeaderException)
-{
-    unsigned int flags = data[3];
-    if (data[2] != Z_DEFLATED || (flags & ~GZIP_HEADER_FLAGS) != 0)
-       throw GZipHeaderException();
-}
-
-gchar *GZipBuffer::get_filename()
-{
-#ifdef DEBUG_STREAMS
-    std::cout<<"Filename is ";
-#endif
-    return read_string();
-}
-
-gchar *GZipBuffer::get_comment()
-{
-#ifdef DEBUG_STREAMS
-    std::cout<<"Comment is "<<std::endl;
-#endif
-    return read_string();
-}
-
-guint16 GZipBuffer::get_crc()
-{
-    guint16 buf;
-    _urihandle->read(&buf, 2);
-    return buf;
-}
-
-void GZipBuffer::get_extrafield()
-{
-    guint8 length_data[2];
-    _urihandle->read(length_data, 2);
-    unsigned int const length = length_data[0] | (length_data[1] << 8);
-    guint8 *data = new guint8[length];
-    _urihandle->read(data, length);
-}
-
-gchar *GZipBuffer::read_string() throw(GZipHeaderException)
-{
-    GByteArray *gba = g_byte_array_new();
-    try {
-       guint8 byte[1];
-       do {
-           _urihandle->read(byte, 1);
-           g_byte_array_append(gba, byte, sizeof(byte));
-#ifdef DEBUG_STREAMS
-           std::cout <<(char)*byte;
-#endif
-       } while (*byte != 0);
-    } catch (std::exception& e) {
-       g_byte_array_free(gba, TRUE);
-       throw GZipHeaderException();
-    }
-#ifdef DEBUG_STREAMS
-    std::cout<<std::endl;
-#endif
-    gchar *ret = (gchar *)gba->data;
-    g_byte_array_free(gba, FALSE);
-    return ret;
-}
-
-} // 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/streams-gzip.h b/src/streams-gzip.h
deleted file mode 100644 (file)
index ace1b88..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * IO layer : gzip streambuf and streams
- *
- * Authors:
- *   Johan Ceuppens <jceuppen at easynet dot be>
- *
- * Copyright (C) 2004 Johan Ceuppens
- *
- * Released under GNU LGPL, read the file 'COPYING.LIB' for more information
- */
-
-#ifndef __STREAMS_GZIP_H_
-#define __STREAMS_GZIP_H_
-
-#include "streams-zlib.h"
-
-namespace Inkscape {
-
-class GZipHeaderException : public ZlibBufferException
-{
-public:
-    const char *what() const throw() { return "Invalid gzip file"; }
-};
-
-/**
- * GZipBuffer
- */
-
-class GZipBuffer : public ZlibBuffer
-{
-public:
-    
-    GZipBuffer(URIHandle& urih) //throws GZipHeaderException
-       : ZlibBuffer(urih)
-    { consume_header(); } 
-    ~GZipBuffer() {}
-    
-private:
-    
-    void consume_header() throw(GZipHeaderException);
-    void check_signature(guint8 *data) throw(GZipHeaderException);
-    void check_flags(guint8 *data) throw(GZipHeaderException);
-    gchar *get_filename();
-    gchar *get_comment();
-    guint16 get_crc();
-    void get_extrafield();
-    gchar *read_string() throw(GZipHeaderException);
-    
-    GZipBuffer& operator=(GZipBuffer const& rhs);
-    GZipBuffer(GZipBuffer const& rhs);
-
-};
-
-} // namespace Inkscape
-#endif // header guard
-
-/*
-  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/streams-handles.cpp b/src/streams-handles.cpp
deleted file mode 100644 (file)
index 9c6e861..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * IO layer : handles for URIs
- *
- * Authors:
- *   Johan Ceuppens <jceuppen at easynet dot be>
- *
- * Copyright (C) 2004 Johan Ceuppens
- *
- * Released under GNU LGPL, read the file 'COPYING.LIB' for more information
- */
-
-#include "streams-handles.h"
-#include "uri.h"
-
-#include <iostream>
-
-namespace Inkscape {
-
-/**
- * FileHandle
- */
-
-int FileHandle::open(URI const& uri, char const* mode)
-{
-    if (sys_open(uri, mode) == 0)
-       return 0;
-    else
-       return 1;
-}
-
-FILE *FileHandle::sys_open(URI const& uri, char const* mode)
-{
-    gchar *filename = uri.toNativeFilename();
-
-    if ((fp = std::fopen(filename, mode)) == 0) {
-       error("fopen");
-    }
-#ifdef DEBUG_STREAMS
-    std::cout<<"file opened fp="<<fp<<std::endl;
-#endif
-    return fp;
-}
-
-void FileHandle::close()
-{
-    sys_close();
-}
-
-void FileHandle::sys_close()
-{
-    fclose(fp);
-}
-
-int FileHandle::read(void *buf, int buflen)
-{
-    return sys_read(buf, buflen);
-}
-
-int FileHandle::sys_read (void *buf, int buflen) throw(ReadException)
-{
-    int nbytes = 0;
-    if ((nbytes = std::fread(buf, 1, buflen, fp)) < 0) {
-       if (ferror(fp)) {
-           error("fread");
-           throw ReadException();
-       }
-    }
-    if (nbytes == 0)
-       return EOF;
-    else
-       return nbytes;
-}
-
-int FileHandle::write (void const *buf, int buflen)
-{
-    return sys_write(buf, buflen);
-}
-
-int FileHandle::sys_write (void const *buf, int buflen) throw(WriteException)
-{
-    int nbytes = 0;
-    if ((nbytes = std::fwrite(buf, 1, buflen, fp)) < 0) {
-       error("fwrite");
-       throw WriteException();
-    }
-
-    return nbytes;
-}
-
-int FileHandle::seek(long offset, int whence)
-{
-    return sys_seek(offset, whence);
-}
-
-int FileHandle::sys_seek(long offset, int whence)
-{
-    int result;
-    if ((result = fseek(fp, offset, whence)) < 0) {
-       error("fseek");
-    }
-    return result;
-}
-void FileHandle::error(char const *errstr)
-{
-    std::cerr<<"error FileHandle: "<<errstr<<std::endl;
-}
-
-} // 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/streams-handles.h b/src/streams-handles.h
deleted file mode 100644 (file)
index 1dad4a2..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * IO layer : handles for URIs
- *
- * Authors:
- *   Johan Ceuppens <jceuppen at easynet dot be>
- *
- * Copyright (C) 2004 Johan Ceuppens
- *
- * Released under GNU LGPL, read the file 'COPYING.LIB' for more information
- */
-
-#ifndef __STREAM_HANDLES_H_
-#define __STREAM_HANDLES_H_
-
-#include <stdio.h>
-#include <exception>
-
-#include "forward.h"
-
-namespace Inkscape {
-
-/**
- * URIHandle (Abstract class)
- */
-
-class URIHandle
-{
-public:
-    virtual ~URIHandle() {}
-    virtual int read (void *buf, int buflen) = 0;
-    virtual int write (void const *buf, int buflen) = 0;
-    virtual void close() = 0;
-    
-protected:
-    
-    virtual int sys_read (void *buf, int buflen) = 0;
-    virtual int sys_write (void const *buf, int buflen) = 0;
-    virtual void sys_close() = 0;
-    virtual void error(char const *errstr) = 0;
-    
-};
-
-/**
- * FileHandle
- */
-
-class IOException : public std::exception {};
-
-class ReadException : public IOException
-{
-public:
-    const char *what() const throw() { return "error read"; }
-};
-
-class WriteException : public IOException
-{
-public:
-    const char *what() const throw() { return "error write"; }
-};
-
-class FileHandle : public URIHandle
-{
-public:
-    FileHandle() : fp(0) {}
-    virtual ~FileHandle() { if (fp) sys_close(); };
-    virtual int open(URI const& uri, char const* mode);
-    virtual void close();
-    virtual int read (void *buf, int buflen);
-    virtual int write (void const *buf, int buflen);
-    virtual int seek (long offset, int whence);
-protected:
-    
-    virtual FILE *sys_open(URI const& uri, char const* mode);
-    virtual void sys_close();
-    virtual int sys_read(void *buf, int buflen) throw(ReadException);
-    virtual int sys_write(void const *buf, int buflen) throw(WriteException);
-    virtual int sys_seek(long offset, int whence);
-    virtual void error(char const *errstr);
-    FILE *get_fp() { return fp; }
-    
-private:
-    FILE *fp;
-};
-
-/*
-  class SocketHandle : public URIHandle
-  {
-  // ...
-  };
-*/
-}
-#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/streams-jar.cpp b/src/streams-jar.cpp
deleted file mode 100644 (file)
index e597822..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-#include <vector>
-#include "streams-jar.h"
-
-namespace Inkscape {
-
-const int LOC_EXTRA = 6;  // extra bytes
-const int LOC_COMP  = 8;  // compression method
-const int LOC_CSIZE = 18; // compressed size
-const int LOC_FNLEN = 26; // filename length
-const int LOC_EFLEN = 28; // extra-field length
-
-void JarBuffer::consume_header() throw(JarHeaderException)
-{
-    try {
-       guint8 data[30];
-       _urihandle->read(data, 4);
-       check_signature(data);
-       _urihandle->read(data+4, 26);
-       compressed_size = compressed_left = unpack_4bytes(data, LOC_CSIZE);
-       eflen = unpack_2bytes(data, LOC_EFLEN);
-       flags = unpack_2bytes(data, LOC_EXTRA);
-       method = unpack_2bytes(data, LOC_COMP);
-       
-#ifdef DEBUG_STREAMS
-       std::printf("Compressed size is %u\n", compressed_size);
-       std::printf("Extra field length is %hu\n", eflen);
-       std::printf("Flags are %#hx\n", flags);
-       std::printf("Compression method is %#hx\n", method);
-#endif
-    }
-    catch (std::exception& e) {
-       throw JarHeaderException();
-    }
-}
-
-void JarBuffer::check_signature(guint8 *data) throw(JarHeaderException)
-{
-    guint32 signature = unpack_4bytes(data, 0);
-
-#ifdef DEBUG_STREAMS
-    std::printf("signature is %x\n", signature);
-#endif
-
-    if (signature == 0x08074b50) {
-       _urihandle->read(data, 12);
-    } else if (signature != 0x02014b50 && signature != 0x04034b50) {
-       throw JarHeaderException();
-    }
-}
-
-void JarBuffer::reset()//resets zlib and buffer (also skips archived directories)
-{
-    bool do_reset = false;
-    while (compressed_left == 0) {
-       consume_header();
-       do_reset = true;
-    }
-
-    if (do_reset) {
-       reset_inflation();
-       setg(eback(), eback(), eback());
-    }
-}
-
-int JarBuffer::consume_and_inflate()
-{
-    int nbytes;
-
-    reset();
-
-    nbytes = compressed_left > BUFSIZE_STREAM ? BUFSIZE_STREAM
-           : compressed_left;
-
-    if (is_compressed())
-       return consume_compressed(nbytes);
-    else
-       return consume_uncompressed(nbytes);
-}
-
-int JarBuffer::consume_compressed(int nbytes)
-{
-    int ret=do_consume_and_inflate(nbytes);
-
-    if ( ret == EOF && eflen > 0 ) {
-        std::vector<guint8> efbuf(eflen);
-       _urihandle->read(&efbuf[0], eflen);
-       return 1;
-    }
-
-    return ret;
-}
-
-int JarBuffer::consume_uncompressed(int nbytes)
-{
-    std::vector<guint8> data(nbytes);
-    int consumed=consume(&data[0], nbytes);
-    if ( consumed != EOF ) {
-        copy_to_get(&data[0], consumed);
-        compressed_left -= consumed;
-    }
-    return consumed;
-}
-
-GByteArray *JarBuffer::inflate(guint8 *data, const int nbytes)
-{
-    GByteArray *gba = do_inflate(data, nbytes);
-    compressed_left -= nbytes;
-    return gba;
-}
-
-guint32 JarBuffer::unpack_4bytes(guint8 *data, const int offset)
-{
-    return ((guint32)data[offset]
-           + (((guint32)data[offset + 1]) << 8)
-           + (((guint32)data[offset + 2]) << 16)
-           + (((guint32)data[offset + 3]) << 24));
-}
-
-guint16 JarBuffer::unpack_2bytes(guint8 *data, int offset)
-{
-    return ((guint16)data[offset] + (((guint16)data[offset + 1]) << 8));
-}
-
-} // 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/streams-jar.h b/src/streams-jar.h
deleted file mode 100644 (file)
index cba6909..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef __STREAMS_JAR_H_
-#define __STREAMS_JAR_H_
-
-#include "streams-zlib.h"
-
-namespace Inkscape {
-
-//#define DEBUG_STREAMS 1;
-
-class JarHeaderException 
-{
-public:
-    const char *what() const throw() { return "Invalid file header in jar"; }
-};
-
-/**
- * JarBuffer
- */
-
-class JarBuffer : public ZlibBuffer
-{
-public:
-    
-    JarBuffer(URIHandle& urih) //throws JarHeaderException
-       : ZlibBuffer(urih), compressed_size(0), compressed_left(0), method(0),
-         flags(0)
-    { consume_header(); } 
-    virtual ~JarBuffer() {}
-    
-protected:
-
-    virtual void consume_header() throw(JarHeaderException);
-    virtual void check_signature(guint8 *data) throw(JarHeaderException);
-    virtual unsigned int get_compressed_size() const { return compressed_size; }
-    virtual unsigned int get_compressed_left() const { return compressed_left; }
-    virtual GByteArray *inflate(guint8 *data, int nbytes);
-    virtual int consume_and_inflate();
-    virtual void reset();
-    virtual bool is_compressed() const { return (method == 8 || flags & 0x0008);}
-    virtual int consume_compressed(int nbytes);
-    virtual int consume_uncompressed(int nbytes);
-    guint32 unpack_4bytes(guint8 *data, const int offset);
-    guint16 unpack_2bytes(guint8 *data, const int offset);
-
-private:
-    
-    JarBuffer& operator=(JarBuffer const& rhs);
-    JarBuffer(JarBuffer const& rhs);
-
-    guint32 compressed_size;
-    guint32 compressed_left;
-    guint16 method;
-    guint16 flags;
-    guint16 eflen;
-};
-
-} // namespace Inkscape
-#endif // header guard
-
-/*
-  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/streams-zlib.cpp b/src/streams-zlib.cpp
deleted file mode 100644 (file)
index 2d5fae0..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * IO layer : zlib streambuf
- *
- * Authors:
- *   Johan Ceuppens <jceuppen at easynet dot be>
- *
- * Copyright (C) 2004 Johan Ceuppens
- *
- * Released under GNU LGPL, read the file 'COPYING.LIB' for more information
- */
-
-#include <cstring>
-#include <string>
-#include <string.h>
-#include <vector>
-#include "streams-zlib.h"
-
-namespace Inkscape {
-
-/**
- * ZlibBuffer
- */
-
-ZlibBuffer::ZlibBuffer(URIHandle& urih)
-  : _urihandle(&urih), _putsize(BUFSIZE_STREAM), _getsize(BUFSIZE_STREAM)
-{
-    init_inflation();
-}
-
-int ZlibBuffer::allocate_buffers()
-{
-    if (!eback()) {
-       char *buf = new char[_getsize + _putsize];
-       setg(buf, buf , buf);
-       buf += _getsize;
-       setp(buf, buf + _putsize);
-       return 1;
-    }
-    return 0;
-}
-
-int ZlibBuffer::reallocate_buffers(int new_getsize, int new_putsize)
-{
-    char *new_buffer = new char[new_getsize + new_putsize];
-
-    std::memcpy(new_buffer, eback(), _getsize);
-    std::memcpy(new_buffer, eback() + _getsize, _putsize);
-
-    setg(new_buffer, new_buffer + (gptr() - eback()),
-        new_buffer + new_getsize);
-    new_buffer += new_getsize;
-    setp(new_buffer, new_buffer + new_putsize);
-
-    _getsize = new_getsize;
-    _putsize = new_putsize;
-
-    return 1;
-}
-
-int ZlibBuffer::underflow()
-{
-    if (eback() == 0 && allocate_buffers() == 0)
-       return EOF;
-
-    if (consume_and_inflate() == EOF)
-       return EOF;
-
-    return *(unsigned char *)gptr();
-}
-
-int ZlibBuffer::overflow(int c)
-{
-    if (c == EOF)
-       return flush_output();
-
-    if (pbase() == 0 && allocate_buffers() == 0)
-       return EOF;
-
-    if (pptr() >= epptr() &&
-       flush_output() == EOF)
-       return EOF;
-
-    putchar(c);
-
-    if (pptr() >= epptr() &&
-       flush_output() == EOF)
-       return EOF;
-
-    return c;
-}
-
-int ZlibBuffer::consume(guint8 *buf, int nbytes)
-{
-    return do_consume(buf, nbytes);
-}
-
-int ZlibBuffer::do_consume(guint8 *buf, int nbytes)
-{
-    nbytes = _urihandle->read(buf, nbytes);
-
-    if (nbytes == EOF)
-       return EOF;
-    else if (nbytes == 0)
-       return EOF;
-
-    return nbytes;
-}
-
-int ZlibBuffer::do_consume_and_inflate(int nbytes)
-{
-    std::vector<guint8> buf(nbytes);
-
-    int ret=consume(&buf[0], nbytes);
-    
-    if ( ret != EOF ) {
-        ret = 1;
-        GByteArray *gba = inflate(&buf[0], nbytes);
-        copy_to_get(gba->data, gba->len);
-        g_byte_array_free(gba, TRUE);
-    }
-
-    return ret;
-}
-
-int ZlibBuffer::consume_and_inflate()
-{
-    return do_consume_and_inflate(BUFSIZE_STREAM);
-}
-
-int ZlibBuffer::flush_output()
-{
-    if (pptr() <= pbase())
-       return 0;
-    int len = pptr() - pbase();
-    int nbytes = _urihandle->write(pbase(), len);
-    setp(pbase(), pbase() + BUFSIZE_STREAM);
-    if (len == nbytes)
-       return 0;
-    else
-       return EOF;
-}
-
-void ZlibBuffer::init_inflation() throw(ZlibBufferException)
-{
-    memset(&_zs, 0, sizeof(z_stream));
-
-    _zs.zalloc = Z_NULL;
-    _zs.zfree = Z_NULL;
-    _zs.opaque = Z_NULL;
-
-    if(inflateInit2(&_zs, -15) != Z_OK) {
-       throw ZlibBufferException();
-    }
-
-}
-
-void ZlibBuffer::reset_inflation() throw(ZlibBufferException)
-{
-    if (inflateReset(&_zs) != Z_OK)
-       throw ZlibBufferException();
-}
-
-GByteArray *ZlibBuffer::inflate(guint8 *in_buffer, int nbytes)
-{
-    return do_inflate(in_buffer, nbytes);
-}
-
-GByteArray *ZlibBuffer::do_inflate(guint8 *data, int nbytes)
-{
-    GByteArray *gba = g_byte_array_new();
-    guint8 out_buffer[BUFSIZE_STREAM];
-
-    _zs.avail_in = 0;
-    guint32 crc = crc32(0, Z_NULL, 0);
-
-    if (!_zs.avail_in) {
-       _zs.avail_in = nbytes;
-       _zs.next_in = (Bytef *)data;
-       crc = crc32(crc, (Bytef *)data, _zs.avail_in);
-    }
-    do {
-       _zs.next_out = out_buffer;
-       _zs.avail_out = BUFSIZE_STREAM;
-
-       int ret = ::inflate(&_zs, Z_NO_FLUSH);
-       if (BUFSIZE_STREAM != _zs.avail_out) {
-           unsigned int tmp_len = BUFSIZE_STREAM - _zs.avail_out;
-           g_byte_array_append(gba, out_buffer, tmp_len);
-       }
-       
-       if (ret == Z_STREAM_END) {
-           break;
-       }
-       if (ret != Z_OK) {
-           std::fprintf(stderr, "decompression error %d\n", ret);
-           break;
-       }
-    } while (_zs.avail_in);
-
-    return gba;
-}
-
-int ZlibBuffer::copy_to_get(guint8 *data, int nbytes)
-{
-    return do_copy_to_get(data, nbytes);
-}
-
-int ZlibBuffer::do_copy_to_get(guint8 *data, int nbytes)
-{
-    if (nbytes + gptr() - eback() > _getsize)
-       reallocate_buffers(nbytes + gptr() - eback() + BUFSIZE_STREAM,
-                          _putsize);
-
-    std::memcpy(gptr(), data, nbytes);
-    setg(eback(), gptr(), gptr() + nbytes);
-    return 1;
-}
-
-} // 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/streams-zlib.h b/src/streams-zlib.h
deleted file mode 100644 (file)
index 6ab7405..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * IO layer : zlib streambuf
- *
- * Authors:
- *   Johan Ceuppens <jceuppen at easynet dot be>
- *
- * Copyright (C) 2004 Johan Ceuppens
- *
- * Released under GNU LGPL, read the file 'COPYING.LIB' for more information
- */
-
-#ifndef __STREAMS_ZLIB_H_
-#define __STREAMS_ZLIB_H_
-
-#include "streams-handles.h"
-
-#include <glib/gtypes.h>
-#include <glib/garray.h>
-#include <zlib.h>
-#include <iostream>
-
-namespace Inkscape {
-
-class ZlibBufferException : public std::exception {};
-
-// This is the initial buffersize for the stream and
-// zipbuffers (the streambuffers expand as needed).
-const unsigned int BUFSIZE_STREAM = 4096; 
-
-/**
- * ZlibBuffer
- */ 
-
-//TODO: unbuffered IO
-class ZlibBuffer : public std::streambuf
-{
-public:
-
-    ZlibBuffer(URIHandle& urih);
-    virtual ~ZlibBuffer() {}
-    
-protected:
-
-    virtual int allocate_buffers();
-    virtual int reallocate_buffers(int new_getsize, int new_putsize);
-    virtual int underflow();
-    virtual int overflow(int c = EOF);
-    virtual int flush_output();
-
-    virtual void init_inflation() throw(ZlibBufferException);
-    virtual void reset_inflation() throw(ZlibBufferException);
-    virtual int consume_and_inflate();
-    virtual int do_consume_and_inflate(int nbytes);
-    virtual int consume(guint8 *buf, int nbytes);
-    virtual int do_consume(guint8 *buf, int nbytes);
-    virtual GByteArray *inflate(guint8 *in_buffer, int nbytes);
-    virtual GByteArray *do_inflate(guint8 *in_buffer, int nbytes);
-    virtual int copy_to_get(guint8 *data, int nbytes);
-    virtual int do_copy_to_get(guint8 *data, int nbytes);
-
-    URIHandle *_urihandle;
-
-private:
-
-    ZlibBuffer& operator=(ZlibBuffer const& rhs);
-    ZlibBuffer(ZlibBuffer const& rhs);
-
-    z_stream _zs;
-    int _putsize, _getsize;//sizes of in and out buffers
-    
-};
-
-class izstream : public std::istream {
-public:
-
-    explicit izstream(std::streambuf& sb) : std::istream(&sb) {}
-    ~izstream() { std::ios::init(0); }
-    
-    std::streambuf *rdbuf() { return std::ios::rdbuf(); }
-    std::streambuf *operator ->() { return rdbuf(); }
-
-};
-
-}
-
-#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 :
index bcc685e8ad946f567ce1e5d63663c3ddc0918244..1077f7e2fc928fc9e719a3614837904207c60732 100644 (file)
 
 bool
 sp_svg_transform_read(gchar const *str, Geom::Matrix *transform)
-{
-    NR::Matrix mat;
-    if (sp_svg_transform_read(str, &mat)) {
-        *transform = mat;
-        return true;
-    } else {
-        return false;
-    }
-}
-
-bool
-sp_svg_transform_read(gchar const *str, NR::Matrix *transform)
 {
     int idx;
     char keyword[32];
@@ -57,7 +45,7 @@ sp_svg_transform_read(gchar const *str, NR::Matrix *transform)
 
     if (str == NULL) return false;
 
-    NR::Matrix a(NR::identity());
+    Geom::Matrix a(Geom::identity());
 
     idx = 0;
     while (str[idx]) {
@@ -117,7 +105,7 @@ sp_svg_transform_read(gchar const *str, NR::Matrix *transform)
         /* ok, have parsed keyword and args, now modify the transform */
         if (!strcmp (keyword, "matrix")) {
             if (n_args != 6) return false;
-            a = (*NR_MATRIX_D_FROM_DOUBLE(args)) * a;
+            a = (*((Geom::Matrix *) &(args)[0])) * a;
         } else if (!strcmp (keyword, "translate")) {
             if (n_args == 1) {
                 args[1] = 0;
@@ -147,13 +135,13 @@ sp_svg_transform_read(gchar const *str, NR::Matrix *transform)
             }
         } else if (!strcmp (keyword, "skewX")) {
             if (n_args != 1) return false;
-            a = ( NR::Matrix(1, 0,
+            a = ( Geom::Matrix(1, 0,
                      tan(args[0] * M_PI / 180.0), 1,
                      0, 0)
                   * a );
         } else if (!strcmp (keyword, "skewY")) {
             if (n_args != 1) return false;
-            a = ( NR::Matrix(1, tan(args[0] * M_PI / 180.0),
+            a = ( Geom::Matrix(1, tan(args[0] * M_PI / 180.0),
                      0, 1,
                      0, 0)
                   * a );
@@ -263,17 +251,4 @@ gchar *
 sp_svg_transform_write(Geom::Matrix const *transform)
 {
     return sp_svg_transform_write(*transform);
-}
-
-gchar *
-sp_svg_transform_write(NR::Matrix const &transform)
-{
-    return sp_svg_transform_write((Geom::Matrix)transform);
-}
-
-gchar *
-sp_svg_transform_write(NR::Matrix const *transform)
-{
-    return sp_svg_transform_write(*transform);
-}
-
+}
\ No newline at end of file
index 0e9939bec4abfac569a06db214f65d7e164e12d9..0eab21226578da5dfcac06fdb0ebf9004a605274 100644 (file)
@@ -55,12 +55,9 @@ unsigned int sp_svg_length_read_ldd (const gchar *str, SVGLength::Unit *unit, do
 std::string sp_svg_length_write_with_units(SVGLength const &length);
 
 bool sp_svg_transform_read(gchar const *str, Geom::Matrix *transform);
-bool sp_svg_transform_read(gchar const *str, NR::Matrix *transform);
 
 gchar *sp_svg_transform_write(Geom::Matrix const &transform);
 gchar *sp_svg_transform_write(Geom::Matrix const *transform);
-gchar *sp_svg_transform_write(NR::Matrix const &transform);
-gchar *sp_svg_transform_write(NR::Matrix const *transform);
 
 double sp_svg_read_percentage (const char * str, double def);
 
index e277ff58492713224ddd39720c3fab090d9bc3d1..1dd5e4e82f0ec1c13d0434fa4ca1ee6eab822b4c 100644 (file)
@@ -446,7 +446,7 @@ sp_text_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEve
             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);
-                boost::optional<Geom::Rect> ibbox = sp_item_bbox_desktop(item_ungrouped);
+                Geom::OptRect ibbox = sp_item_bbox_desktop(item_ungrouped);
                 if (ibbox) {
                     SP_CTRLRECT(tc->indicator)->setRectangle(*ibbox);
                 }
@@ -1609,7 +1609,7 @@ sp_text_context_update_cursor(SPTextContext *tc,  bool scroll_to_see)
             SPItem *frame = SP_FLOWTEXT(tc->text)->get_frame (NULL); // first frame only
             if (frame) {
                 sp_canvas_item_show(tc->frame);
-                boost::optional<Geom::Rect> frame_bbox = sp_item_bbox_desktop(frame);
+                Geom::OptRect frame_bbox = sp_item_bbox_desktop(frame);
                 if (frame_bbox) {
                     SP_CTRLRECT(tc->frame)->setRectangle(*frame_bbox);
                 }
@@ -1668,10 +1668,10 @@ sp_text_context_timeout(SPTextContext *tc)
         sp_canvas_item_show(tc->cursor);
         if (tc->phase) {
             tc->phase = 0;
-            sp_ctrlline_set_rgba32(SP_CTRLLINE(tc->cursor), 0xffffffff);
+            sp_ctrlline_set_rgba32(SP_CTRLLINE(tc->cursor), 0x000000ff);
         } else {
             tc->phase = 1;
-            sp_ctrlline_set_rgba32(SP_CTRLLINE(tc->cursor), 0x000000ff);
+            sp_ctrlline_set_rgba32(SP_CTRLLINE(tc->cursor), 0xffffffff);
         }
     }
 
index f8e88b53ad63d27f985d663435889cb5c2e079cc..156ce0169b555ea0e00e2f172c7c7be72d7a34ff 100644 (file)
@@ -432,7 +432,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
     } else {
         if (mode == TWEAK_MODE_MOVE) {
 
-            boost::optional<Geom::Rect> a = item->getBounds(sp_item_i2doc_affine(item));
+            Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
             if (a) {
                 double x = Geom::L2(a->midpoint() - p)/radius;
                 if (a->contains(p)) x = 0;
@@ -445,7 +445,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
 
         } else if (mode == TWEAK_MODE_MOVE_IN_OUT) {
 
-            boost::optional<Geom::Rect> a = item->getBounds(sp_item_i2doc_affine(item));
+            Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
             if (a) {
                 double x = Geom::L2(a->midpoint() - p)/radius;
                 if (a->contains(p)) x = 0;
@@ -459,7 +459,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
 
         } else if (mode == TWEAK_MODE_MOVE_JITTER) {
 
-            boost::optional<Geom::Rect> a = item->getBounds(sp_item_i2doc_affine(item));
+            Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
             if (a) {
                 double dp = g_random_double_range(0, M_PI*2);
                 double dr = g_random_double_range(0, radius);
@@ -474,7 +474,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
 
         } else if (mode == TWEAK_MODE_SCALE) {
 
-            boost::optional<Geom::Rect> a = item->getBounds(sp_item_i2doc_affine(item));
+            Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
             if (a) {
                 double x = Geom::L2(a->midpoint() - p)/radius;
                 if (a->contains(p)) x = 0;
@@ -487,7 +487,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
 
         } else if (mode == TWEAK_MODE_ROTATE) {
 
-            boost::optional<Geom::Rect> a = item->getBounds(sp_item_i2doc_affine(item));
+            Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
             if (a) {
                 double x = Geom::L2(a->midpoint() - p)/radius;
                 if (a->contains(p)) x = 0;
@@ -500,7 +500,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
 
         } else if (mode == TWEAK_MODE_MORELESS) {
 
-            boost::optional<Geom::Rect> a = item->getBounds(sp_item_i2doc_affine(item));
+            Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
             if (a) {
                 double x = Geom::L2(a->midpoint() - p)/radius;
                 if (a->contains(p)) x = 0;
@@ -551,7 +551,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
 
 
         // skip those paths whose bboxes are entirely out of reach with our radius
-        boost::optional<Geom::Rect> bbox = item->getBounds(sp_item_i2doc_affine(item));
+        Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item));
         if (bbox) {
             bbox->expandBy(radius);
             if (!bbox->contains(p)) {
@@ -925,7 +925,7 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
         if (!style) {
             return false;
         }
-        boost::optional<Geom::Rect> bbox = item->getBounds(sp_item_i2doc_affine(item),
+        Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item),
                                                         SPItem::GEOMETRIC_BBOX);
         if (!bbox) {
             return false;
@@ -955,7 +955,7 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
         if (this_force > 0.002) {
 
             if (do_blur) {
-                boost::optional<Geom::Rect> bbox = item->getBounds(sp_item_i2doc_affine(item),
+                Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item),
                                                         SPItem::GEOMETRIC_BBOX);
                 if (!bbox) {
                     return did;
index e76af958fb86d1f710085286ad40058c0fbbd8f4..0dc4a1d5bc0a72feb8f841aa592278e8717d8846 100644 (file)
@@ -407,15 +407,15 @@ bool ClipboardManagerImpl::pasteSize(bool separately, bool apply_x, bool apply_y
         if (separately) {
             for (GSList *i = const_cast<GSList*>(selection->itemList()) ; i ; i = i->next) {
                 SPItem *item = SP_ITEM(i->data);
-                boost::optional<Geom::Rect> obj_size = sp_item_bbox_desktop(item);
-                if ( !obj_size || obj_size->isEmpty() ) continue;
+                Geom::OptRect obj_size = sp_item_bbox_desktop(item);
+                if ( !obj_size ) continue;
                 sp_item_scale_rel(item, _getScale(min, max, *obj_size, apply_x, apply_y));
             }
         }
         // resize the selection as a whole
         else {
-            boost::optional<Geom::Rect> sel_size = selection->bounds();
-            if ( sel_size && !sel_size->isEmpty() ) {
+            Geom::OptRect sel_size = selection->bounds();
+            if ( sel_size ) {
                 sp_selection_scale_relative(selection, sel_size->midpoint(),
                     _getScale(min, max, *sel_size, apply_x, apply_y));
             }
@@ -571,7 +571,7 @@ void ClipboardManagerImpl::_copySelection(Inkscape::Selection *selection)
         }
     }
 
-    boost::optional<Geom::Rect> size = selection->bounds();
+    Geom::OptRect size = selection->bounds();
     if (size) {
         sp_repr_set_point(_clipnode, "min", size->min());
         sp_repr_set_point(_clipnode, "max", size->max());
@@ -786,7 +786,7 @@ void ClipboardManagerImpl::_pasteDocument(SPDocument *clipdoc, bool in_place)
     selection->setReprList(pasted_objects);         // Change the selection to the freshly pasted objects
     sp_document_ensure_up_to_date(target_document); // What does this do?
     
-    boost::optional<Geom::Rect> sel_bbox = selection->bounds(); //In desktop coordinates
+    Geom::OptRect sel_bbox = selection->bounds(); //In desktop coordinates
     // PS: We could also have used the min/max corners calculated above, instead of selection->bounds() because 
     // we know that after pasting the upper left corner of the selection will be aligend to the corresponding 
     // page corner. Using the boundingbox of the selection is more foolproof though
@@ -1083,17 +1083,14 @@ void ClipboardManagerImpl::_onGet(Gtk::SelectionData &sel, guint /*info*/)
     try {
         if (out == outlist.end() && target == "image/png")
         {
-            NRRect area;
             gdouble dpi = PX_PER_IN;
             guint32 bgcolor = 0x00000000;
 
-            area.x0 = SP_ROOT(_clipboardSPDoc->root)->x.computed;
-            area.y0 = SP_ROOT(_clipboardSPDoc->root)->y.computed;
-            area.x1 = area.x0 + sp_document_width (_clipboardSPDoc);
-            area.y1 = area.y0 + sp_document_height (_clipboardSPDoc);
+            Geom::Point origin (SP_ROOT(_clipboardSPDoc->root)->x.computed, SP_ROOT(_clipboardSPDoc->root)->y.computed);
+            Geom::Rect area = Geom::Rect(origin, origin + sp_document_dimensions(_clipboardSPDoc));
 
-            unsigned long int width = (unsigned long int) ((area.x1 - area.x0) * dpi / PX_PER_IN + 0.5);
-            unsigned long int height = (unsigned long int) ((area.y1 - area.y0) * dpi / PX_PER_IN + 0.5);
+            unsigned long int width = (unsigned long int) (area.width() * dpi / PX_PER_IN + 0.5);
+            unsigned long int height = (unsigned long int) (area.height() * dpi / PX_PER_IN + 0.5);
 
             // read from namedview
             Inkscape::XML::Node *nv = sp_repr_lookup_name (_clipboardSPDoc->rroot, "sodipodi:namedview");
@@ -1102,7 +1099,7 @@ void ClipboardManagerImpl::_onGet(Gtk::SelectionData &sel, guint /*info*/)
             if (nv && nv->attribute("inkscape:pageopacity"))
                 bgcolor |= SP_COLOR_F_TO_U(sp_repr_get_double_attribute (nv, "inkscape:pageopacity", 1.0));
 
-            sp_export_png_file(_clipboardSPDoc, filename, area.x0, area.y0, area.x1, area.y1, width, height, dpi, dpi, bgcolor, NULL, NULL, true, NULL);
+            sp_export_png_file(_clipboardSPDoc, filename, area, width, height, dpi, dpi, bgcolor, NULL, NULL, true, NULL);
         }
         else
         {
index abdfa4dd8bead03388138e5c7d40f410e36b7183..5a0d6a08eb6882880d3529133752c6adf201eddb 100644 (file)
@@ -9,6 +9,7 @@ ENDIF(WIN32)
 SET(ui_dialog_SRC
 aboutbox.cpp
 align-and-distribute.cpp
+debug.cpp
 dialog.cpp
 dialog-manager.cpp
 dock-behavior.cpp
@@ -33,6 +34,7 @@ print.cpp
 scriptdialog.cpp
 #session-player.cpp
 text-properties.cpp
+tile.cpp
 tracedialog.cpp
 transformation.cpp
 tree-editor.cpp
index 638be28327d1d1db65fa55579227aaeead1deaae..6c301ef407fce700c032b12438be211f2194076d 100644 (file)
@@ -6,18 +6,19 @@ ui/dialog/clean:
        rm -f ui/dialog/libuidialog.a $(ui_libuidialog_a_OBJECTS)
 
 ui_dialog_libuidialog_a_SOURCES =              \
-       ui/dialog/dialog-manager.cpp            \
-       ui/dialog/dialog-manager.h              \
+       ui/dialog/aboutbox.cpp                  \
+       ui/dialog/aboutbox.h                    \
+       ui/dialog/align-and-distribute.cpp      \
+       ui/dialog/align-and-distribute.h        \
+       ui/dialog/behavior.h                    \
+       ui/dialog/debug.cpp                     \
+       ui/dialog/debug.h                       \
        ui/dialog/dialog.cpp                    \
        ui/dialog/dialog.h                      \
-       ui/dialog/panel-dialog.h                \
-       ui/dialog/behavior.h                    \
-       ui/dialog/dock-behavior.h               \
+       ui/dialog/dialog-manager.cpp            \
+       ui/dialog/dialog-manager.h              \
        ui/dialog/dock-behavior.cpp             \
-       ui/dialog/floating-behavior.h           \
-       ui/dialog/floating-behavior.cpp         \
-       ui/dialog/align-and-distribute.cpp      \
-       ui/dialog/align-and-distribute.h        \
+       ui/dialog/dock-behavior.h               \
        ui/dialog/document-metadata.cpp         \
        ui/dialog/document-metadata.h           \
        ui/dialog/document-properties.cpp       \
@@ -28,40 +29,43 @@ ui_dialog_libuidialog_a_SOURCES =           \
        ui/dialog/filedialog.h                  \
        ui/dialog/filedialogimpl-gtkmm.cpp      \
        ui/dialog/filedialogimpl-gtkmm.h        \
+       ui/dialog/filedialogimpl-win32.cpp      \
+       ui/dialog/filedialogimpl-win32.h        \
        ui/dialog/fill-and-stroke.cpp           \
        ui/dialog/fill-and-stroke.h             \
-       ui/dialog/filter-effects-dialog.h       \
        ui/dialog/filter-effects-dialog.cpp     \
+       ui/dialog/filter-effects-dialog.h       \
        ui/dialog/find.cpp                      \
        ui/dialog/find.h                        \
+       ui/dialog/floating-behavior.cpp         \
+       ui/dialog/floating-behavior.h           \
        ui/dialog/inkscape-preferences.cpp      \
        ui/dialog/inkscape-preferences.h        \
-       ui/dialog/input.cpp     \
-       ui/dialog/input.h       \
-       ui/dialog/livepatheffect-editor.cpp             \
-       ui/dialog/livepatheffect-editor.h               \
+       ui/dialog/input.cpp                     \
+       ui/dialog/input.h                       \
+       ui/dialog/livepatheffect-editor.cpp     \
+       ui/dialog/livepatheffect-editor.h       \
        ui/dialog/memory.cpp                    \
        ui/dialog/memory.h                      \
        ui/dialog/messages.cpp                  \
        ui/dialog/messages.h                    \
+       ui/dialog/ocaldialogs.cpp               \
+       ui/dialog/ocaldialogs.h                 \
+       ui/dialog/panel-dialog.h                \
        ui/dialog/print.cpp                     \
        ui/dialog/print.h                       \
        ui/dialog/scriptdialog.cpp              \
        ui/dialog/scriptdialog.h                \
-       ui/dialog/svg-fonts-dialog.cpp  \
+       ui/dialog/svg-fonts-dialog.cpp          \
        ui/dialog/svg-fonts-dialog.h            \
+       ui/dialog/tile.cpp                      \
+       ui/dialog/tile.h                        \
        ui/dialog/tracedialog.cpp               \
        ui/dialog/tracedialog.h                 \
        ui/dialog/transformation.cpp            \
        ui/dialog/transformation.h              \
        ui/dialog/undo-history.cpp              \
        ui/dialog/undo-history.h                \
-       $(inkboard_dialogs)     \
-       ui/dialog/aboutbox.cpp              \
-       ui/dialog/aboutbox.h            \
-       ui/dialog/ocaldialogs.cpp       \
-       ui/dialog/ocaldialogs.h \
-       ui/dialog/filedialogimpl-win32.h \
-       ui/dialog/filedialogimpl-win32.cpp 
+       $(inkboard_dialogs)
 
 ui/dialog/aboutbox.$(OBJEXT): inkscape_version.h
index 367a744c7d64680a14891c2c2f35ad757b31d976..b509d041ff745f0bb757e2d6b6395a4f1c39bd8f 100644 (file)
@@ -161,7 +161,7 @@ private :
                 selected.erase(master);
             /*}*/
             //Compute the anchor point
-            boost::optional<Geom::Rect> b = sp_item_bbox_desktop (thing);
+            Geom::OptRect b = sp_item_bbox_desktop (thing);
             if (b) {
                 mp = Geom::Point(a.mx0 * b->min()[Geom::X] + a.mx1 * b->max()[Geom::X],
                                a.my0 * b->min()[Geom::Y] + a.my1 * b->max()[Geom::Y]);
@@ -178,7 +178,7 @@ private :
 
         case AlignAndDistribute::DRAWING:
         {
-            boost::optional<Geom::Rect> b = sp_item_bbox_desktop
+            Geom::OptRect b = sp_item_bbox_desktop
                 ( (SPItem *) sp_document_root (sp_desktop_document (desktop)) );
             if (b) {
                 mp = Geom::Point(a.mx0 * b->min()[Geom::X] + a.mx1 * b->max()[Geom::X],
@@ -191,7 +191,7 @@ private :
 
         case AlignAndDistribute::SELECTION:
         {
-            boost::optional<Geom::Rect> b =  selection->bounds();
+            Geom::OptRect b =  selection->bounds();
             if (b) {
                 mp = Geom::Point(a.mx0 * b->min()[Geom::X] + a.mx1 * b->max()[Geom::X],
                                a.my0 * b->min()[Geom::Y] + a.my1 * b->max()[Geom::Y]);
@@ -216,7 +216,7 @@ private :
         prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
 
         bool changed = false;
-        boost::optional<Geom::Rect> b;
+        Geom::OptRect b;
         if (sel_as_group)
             b = selection->bounds();
 
@@ -331,7 +331,7 @@ private :
             it != selected.end();
             ++it)
         {
-            boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop(*it);
+            Geom::OptRect bbox = sp_item_bbox_desktop(*it);
             if (bbox) {
                 sorted.push_back(BBoxSort(*it, *bbox, _orientation, _kBegin, _kEnd));
             }
@@ -607,7 +607,7 @@ private :
         //Check 2 or more selected objects
         if (selected.size() < 2) return;
 
-        boost::optional<Geom::Rect> sel_bbox = selection->bounds();
+        Geom::OptRect sel_bbox = selection->bounds();
         if (!sel_bbox) {
             return;
         }
@@ -629,7 +629,7 @@ private :
             ++it)
         {
             sp_document_ensure_up_to_date(sp_desktop_document (desktop));
-            boost::optional<Geom::Rect> item_box = sp_item_bbox_desktop (*it);
+            Geom::OptRect item_box = sp_item_bbox_desktop (*it);
             if (item_box) {
                 // find new center, staying within bbox
                 double x = _dialog.randomize_bbox->min()[Geom::X] + (*item_box)[Geom::X].extent() /2 +
@@ -780,7 +780,7 @@ void on_tool_changed(Inkscape::Application */*inkscape*/, SPEventContext */*cont
 
 void on_selection_changed(Inkscape::Application */*inkscape*/, Inkscape::Selection */*selection*/, AlignAndDistribute *daad)
 {
-    daad->randomize_bbox = boost::optional<Geom::Rect>();
+    daad->randomize_bbox = Geom::OptRect();
 }
 
 /////////////////////////////////////////////////////////
@@ -961,7 +961,7 @@ AlignAndDistribute::AlignAndDistribute()
 
     // 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 = boost::optional<Geom::Rect>();
+    randomize_bbox = Geom::OptRect();
 
     show_all_children();
 
@@ -1106,7 +1106,7 @@ std::list<SPItem *>::iterator AlignAndDistribute::find_master( std::list<SPItem
     {
         gdouble max = -1e18;
         for (std::list<SPItem *>::iterator it = list.begin(); it != list.end(); it++) {
-            boost::optional<Geom::Rect> b = sp_item_bbox_desktop (*it);
+            Geom::OptRect b = sp_item_bbox_desktop (*it);
             if (b) {
                 gdouble dim = (*b)[horizontal ? Geom::X : Geom::Y].extent();
                 if (dim > max) {
@@ -1123,7 +1123,7 @@ std::list<SPItem *>::iterator AlignAndDistribute::find_master( std::list<SPItem
     {
         gdouble max = 1e18;
         for (std::list<SPItem *>::iterator it = list.begin(); it != list.end(); it++) {
-            boost::optional<Geom::Rect> b = sp_item_bbox_desktop (*it);
+            Geom::OptRect b = sp_item_bbox_desktop (*it);
             if (b) {
                 gdouble dim = (*b)[horizontal ? Geom::X : Geom::Y].extent();
                 if (dim < max) {
index 3d6b5984ece47b5ad9d13e060a8ad812a19f5f52..0d41bb221406dcf34964b331697895138021d065 100644 (file)
@@ -65,7 +65,7 @@ public:
     std::list<SPItem *>::iterator find_master(std::list <SPItem *> &list, bool horizontal);
     void setMode(bool nodeEdit);
 
-    boost::optional<Geom::Rect> randomize_bbox;
+    Geom::OptRect randomize_bbox;
 
 protected:
 
diff --git a/src/ui/dialog/debug.cpp b/src/ui/dialog/debug.cpp
new file mode 100644 (file)
index 0000000..b407966
--- /dev/null
@@ -0,0 +1,252 @@
+/** @file
+ * @brief A dialog that displays log messages
+ */
+/* Authors:
+ *   Bob Jamison
+ *   Other dudes from The Inkscape Organization
+ *
+ * Copyright (C) 2004 The Inkscape Organization
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <glibmm/i18n.h>
+#include <gtkmm/box.h>
+#include <gtkmm/dialog.h>
+#include <gtkmm/textview.h>
+#include <gtkmm/button.h>
+#include <gtkmm/menubar.h>
+#include <gtkmm/scrolledwindow.h>
+
+#include "debug.h"
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+/**
+ * @brief A very simple dialog for displaying Inkscape messages - implementation
+ */
+class DebugDialogImpl : public DebugDialog, public Gtk::Dialog
+{
+public:
+    DebugDialogImpl();
+    ~DebugDialogImpl();
+
+    void show();
+    void hide();
+    void clear();
+    void message(char const *msg);
+    void captureLogMessages();
+    void releaseLogMessages();
+
+private:
+    Gtk::MenuBar menuBar;
+    Gtk::Menu   fileMenu;
+    Gtk::ScrolledWindow textScroll;
+    Gtk::TextView messageText;
+
+    //Handler ID's
+    guint handlerDefault;
+    guint handlerGlibmm;
+    guint handlerAtkmm;
+    guint handlerPangomm;
+    guint handlerGdkmm;
+    guint handlerGtkmm;
+};
+
+void DebugDialogImpl::clear()
+{
+    Glib::RefPtr<Gtk::TextBuffer> buffer = messageText.get_buffer();
+    buffer->erase(buffer->begin(), buffer->end());
+}
+
+DebugDialogImpl::DebugDialogImpl()
+{
+    set_title(_("Messages"));
+    set_size_request(300, 400);
+
+    Gtk::VBox *mainVBox = get_vbox();
+
+    //## Add a menu for clear()
+    menuBar.items().push_back( Gtk::Menu_Helpers::MenuElem(_("_File"), fileMenu) );
+    fileMenu.items().push_back( Gtk::Menu_Helpers::MenuElem(_("_Clear"),
+           sigc::mem_fun(*this, &DebugDialogImpl::clear) ) );
+    fileMenu.items().push_back( Gtk::Menu_Helpers::MenuElem(_("Capture log messages"),
+           sigc::mem_fun(*this, &DebugDialogImpl::captureLogMessages) ) );
+    fileMenu.items().push_back( Gtk::Menu_Helpers::MenuElem(_("Release log messages"),
+           sigc::mem_fun(*this, &DebugDialogImpl::releaseLogMessages) ) );
+    mainVBox->pack_start(menuBar, Gtk::PACK_SHRINK);
+    
+
+    //### Set up the text widget
+    messageText.set_editable(false);
+    textScroll.add(messageText);
+    textScroll.set_policy(Gtk::POLICY_ALWAYS, Gtk::POLICY_ALWAYS);
+    mainVBox->pack_start(textScroll);
+
+    show_all_children();
+
+    message("ready.");
+    message("enable log display by setting ");
+    message("dialogs.debug 'redirect' attribute to 1 in preferences.xml");
+
+    handlerDefault = 0;
+    handlerGlibmm  = 0;
+    handlerAtkmm   = 0;
+    handlerPangomm = 0;
+    handlerGdkmm   = 0;
+    handlerGtkmm   = 0;
+}
+
+
+DebugDialog *DebugDialog::create()
+{
+    DebugDialog *dialog = new DebugDialogImpl();
+    return dialog;
+}
+
+DebugDialogImpl::~DebugDialogImpl()
+{
+}
+
+void DebugDialogImpl::show()
+{
+    //call super()
+    Gtk::Dialog::show();
+    //sp_transientize((GtkWidget *)gobj());  //Make transient
+    raise();
+    Gtk::Dialog::present();
+}
+
+void DebugDialogImpl::hide()
+{
+    // call super
+    Gtk::Dialog::hide();
+}
+
+void DebugDialogImpl::message(char const *msg)
+{
+    Glib::RefPtr<Gtk::TextBuffer> buffer = messageText.get_buffer();
+    Glib::ustring uMsg = msg;
+    if (uMsg[uMsg.length()-1] != '\n')
+        uMsg += '\n';
+    buffer->insert (buffer->end(), uMsg);
+}
+
+/* static instance, to reduce dependencies */
+static DebugDialog *debugDialogInstance = NULL;
+
+DebugDialog *DebugDialog::getInstance()
+{
+    if (!debugDialogInstance) {
+        debugDialogInstance = new DebugDialogImpl();
+    }
+    return debugDialogInstance;
+}
+
+
+
+void DebugDialog::showInstance()
+{
+    DebugDialog *debugDialog = getInstance();
+    debugDialog->show();
+}
+
+
+
+
+/*##### THIS IS THE IMPORTANT PART ##### */
+void dialogLoggingFunction(const gchar */*log_domain*/,
+                           GLogLevelFlags /*log_level*/,
+                           const gchar *messageText,
+                           gpointer user_data)
+{
+    DebugDialogImpl *dlg = (DebugDialogImpl *)user_data;
+    dlg->message(messageText);
+}
+
+
+void DebugDialogImpl::captureLogMessages()
+{
+    /*
+    This might likely need more code, to capture Gtkmm
+    and Glibmm warnings, or maybe just simply grab stdout/stderr
+    */
+    GLogLevelFlags flags = (GLogLevelFlags) (G_LOG_LEVEL_ERROR   | G_LOG_LEVEL_CRITICAL |
+                             G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE  |
+                             G_LOG_LEVEL_INFO    | G_LOG_LEVEL_DEBUG);
+    if ( !handlerDefault ) {
+        handlerDefault = g_log_set_handler(NULL, flags,
+              dialogLoggingFunction, (gpointer)this);
+    }
+    if ( !handlerGlibmm ) {
+        handlerGlibmm = g_log_set_handler("glibmm", flags,
+              dialogLoggingFunction, (gpointer)this);
+    }
+    if ( !handlerAtkmm ) {
+        handlerAtkmm = g_log_set_handler("atkmm", flags,
+              dialogLoggingFunction, (gpointer)this);
+    }
+    if ( !handlerPangomm ) {
+        handlerPangomm = g_log_set_handler("pangomm", flags,
+              dialogLoggingFunction, (gpointer)this);
+    }
+    if ( !handlerGdkmm ) {
+        handlerGdkmm = g_log_set_handler("gdkmm", flags,
+              dialogLoggingFunction, (gpointer)this);
+    }
+    if ( !handlerGtkmm ) {
+        handlerGtkmm = g_log_set_handler("gtkmm", flags,
+              dialogLoggingFunction, (gpointer)this);
+    }
+    message("log capture started");
+}
+
+void DebugDialogImpl::releaseLogMessages()
+{
+    if ( handlerDefault ) {
+        g_log_remove_handler(NULL, handlerDefault);
+        handlerDefault = 0;
+    }
+    if ( handlerGlibmm ) {
+        g_log_remove_handler("glibmm", handlerGlibmm);
+        handlerGlibmm = 0;
+    }
+    if ( handlerAtkmm ) {
+        g_log_remove_handler("atkmm", handlerAtkmm);
+        handlerAtkmm = 0;
+    }
+    if ( handlerPangomm ) {
+        g_log_remove_handler("pangomm", handlerPangomm);
+        handlerPangomm = 0;
+    }
+    if ( handlerGdkmm ) {
+        g_log_remove_handler("gdkmm", handlerGdkmm);
+        handlerGdkmm = 0;
+    }
+    if ( handlerGtkmm ) {
+        g_log_remove_handler("gtkmm", handlerGtkmm);
+        handlerGtkmm = 0;
+    }
+    message("log capture discontinued");
+}
+
+
+
+} //namespace Dialogs
+} //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/debug.h b/src/ui/dialog/debug.h
new file mode 100644 (file)
index 0000000..f2ad61d
--- /dev/null
@@ -0,0 +1,100 @@
+/** @file
+ * @brief Dialog for displaying Inkscape messages
+ */
+/* Authors:
+ *   Bob Jamison
+ *   Other dudes from The Inkscape Organization
+ *
+ * Copyright (C) 2004 The Inkscape Organization
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifndef SEEN_UI_DIALOGS_DEBUGDIALOG_H
+#define SEEN_UI_DIALOGS_DEBUGDIALOG_H
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+
+/**
+ * @brief A very simple dialog for displaying Inkscape messages.
+ *
+ * Messages sent to g_log(), g_warning(), g_message(), ets, are routed here,
+ * in order to avoid messing with the startup console.
+ */
+class DebugDialog
+{
+public:
+    DebugDialog() {};
+    /**
+     * Factory method
+     */
+    static DebugDialog *create();
+
+    /**
+     * Destructor
+     */
+    virtual ~DebugDialog() {};
+
+
+    /**
+     * Show the dialog
+     */
+    virtual void show() = 0;
+
+    /**
+     * Do not show the dialog
+     */
+    virtual void hide() = 0;
+
+    /**
+     * @brief Clear all information from the dialog
+        *
+        * Also a public method.  Remove all text from the dialog
+     */
+    virtual void clear() = 0;
+
+    /**
+     * Display a message
+     */
+    virtual void message(char const *msg) = 0;
+
+    /**
+     * Redirect g_log() messages to this widget
+     */
+    virtual void captureLogMessages() = 0;
+
+    /**
+     * Return g_log() messages to normal handling
+     */
+    virtual void releaseLogMessages() = 0;
+
+    /**
+        * Factory method.  Use this to create a new DebugDialog
+        */
+    static DebugDialog *getInstance();
+
+    /**
+     * Show the instance above
+     */
+    static void showInstance();
+};
+
+} //namespace Dialogs
+} //namespace UI
+} //namespace Inkscape
+
+#endif /* __DEBUGDIALOG_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 :
index e73200a1f7340962a5ac83779f0ace94917e1d47..7a8947adf7bc9315ee079b9baa9a92f897b11007 100644 (file)
@@ -1,13 +1,13 @@
-/**
- * \brief Object for managing a set of dialogs, including their signals and
+/** @file
+ * @brief Object for managing a set of dialogs, including their signals and
  *        construction/caching/destruction of them.
- *
- * Authors:
+ */
+/* Authors:
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *   Jon Phillips <jon@rejon.org>
  *   Gustav Broberg <broberg@kth.se>
  *
- * Copyright (C) 2004--2007 Authors
+ * Copyright (C) 2004-2007 Authors
  *
  * Released under GNU GPL.  Read the file 'COPYING' for more information.
  */
 #ifdef ENABLE_SVG_FONTS
 #include "ui/dialog/svg-fonts-dialog.h"
 #endif // ENABLE_SVG_FONTS
+#include "ui/dialog/tile.h"
 #include "ui/dialog/tracedialog.h"
 #include "ui/dialog/transformation.h"
 #include "ui/dialog/undo-history.h"
 #include "ui/dialog/panel-dialog.h"
 
 #include "dialogs/layers-panel.h"
-#include "dialogs/tiledialog.h"
 #include "dialogs/iconpreview.h"
 
 #include "ui/dialog/floating-behavior.h"
index 7c738c5033e28333f95d713adcc6508af8e7091f..acf4dbb54292f06887193fe9145672f7caca4b1f 100644 (file)
 #include "ui/widget/scalar-unit.h"
 
 #include "xml/node-event-vector.h"
+#include "xml/repr.h"
 #include "helper/units.h"
 #include "preferences.h"
 
 #include "inkscape.h"
+#include "io/sys.h"
 #include "verbs.h"
 #include "document.h"
 #include "desktop-handles.h"
 #include "desktop.h"
 #include "sp-namedview.h"
+#include "sp-object-repr.h"
+#include "sp-root.h"
 #include "widgets/icon.h"
 #include "document-properties.h"
 
 #include "display/canvas-grid.h"
 
+#if ENABLE_LCMS
+#include <lcms.h>
+//#include "color-profile-fns.h"
+#include "color-profile.h"
+#endif // ENABLE_LCMS
+
 using std::pair;
 
 namespace Inkscape {
@@ -82,7 +92,7 @@ DocumentProperties::getInstance()
 DocumentProperties::DocumentProperties()
     : UI::Widget::Panel ("", "/dialogs/documentoptions", SP_VERB_DIALOG_NAMEDVIEW),
       _page_page(1, 1, true, true), _page_guides(1, 1),
-      _page_snap(1, 1), _page_snap_dtls(1, 1),
+      _page_snap(1, 1), _page_snap_dtls(1, 1), _page_cms(1, 1),
     //---------------------------------------------------------------
       _rcb_canb(_("Show page _border"), _("If set, rectangular page border is shown"), "showborder", _wr, false),
       _rcb_bord(_("Border on _top of drawing"), _("If set, border is always on top of the drawing"), "borderlayer", _wr, false),
@@ -100,7 +110,6 @@ DocumentProperties::DocumentProperties()
       _rcp_hgui(_("_Highlight color:"), _("Highlighted guideline color"), _("Color of a guideline when it is under mouse"), "guidehicolor", "guidehiopacity", _wr),
     //---------------------------------------------------------------
       _rcbs(_("_Enable snapping"), _("Toggle snapping on or off"), "inkscape:snap-global", _wr),
-      _rcbsi(_("_Enable snap indicator"), _("After snapping, a symbol is drawn at the point that has snapped"), "inkscape:snap-indicator", _wr),
       _rcbsnbb(_("_Bounding box corners"), _("Only available in the selector tool: snap bounding box corners to guides, to grids, and to other bounding boxes (but not to nodes or paths)"),
                   "inkscape:snap-bbox", _wr),
       _rcbsnn(_("_Nodes"), _("Snap nodes (e.g. path nodes, special points in shapes, gradient handles, text base points, transformation origins, etc.) to guides, to grids, to paths and to other nodes"),
@@ -135,12 +144,16 @@ DocumentProperties::DocumentProperties()
     _notebook.append_page(_grids_vbox,     _("Grids"));
     _notebook.append_page(_page_snap,      _("Snap"));
     _notebook.append_page(_page_snap_dtls, _("Snap points"));
+    _notebook.append_page(_page_cms, _("Color Management"));
 
     build_page();
     build_guides();
     build_gridspage();
     build_snap();
     build_snap_dtls();
+#if ENABLE_LCMS
+    build_cms();
+#endif // ENABLE_LCMS
 
     _grids_button_new.signal_clicked().connect(sigc::mem_fun(*this, &DocumentProperties::onNewGrid));
     _grids_button_remove.signal_clicked().connect(sigc::mem_fun(*this, &DocumentProperties::onRemoveGrid));
@@ -312,8 +325,6 @@ DocumentProperties::build_snap()
     slaves.clear();
     slaves.push_back(&_rcbsnn);
     slaves.push_back(&_rcbsnbb);
-    slaves.push_back(&_rcbsi);
-
     _rcbs.setSlaveWidgets(slaves);
 
     Gtk::Label *label_g = manage (new Gtk::Label);
@@ -331,7 +342,6 @@ DocumentProperties::build_snap()
     {
         label_g,            0,
         0,                  &_rcbs,
-        0,                  &_rcbsi,
         0,                  0,
         label_w,            0,
         0,                  &_rcbsnn,
@@ -375,12 +385,208 @@ DocumentProperties::build_snap_dtls()
         0,                  0,
         label_m,            0,
         0,                  &_rcbic,
-        0,                                     &_rcbsm
+        0,                  &_rcbsm
     };
 
     attach_all(_page_snap_dtls.table(), array, G_N_ELEMENTS(array));
 }
 
+#if ENABLE_LCMS
+static void
+lcms_profile_get_name (cmsHPROFILE   profile, const gchar **name)
+{
+  if (profile)
+    {
+      *name = cmsTakeProductDesc (profile);
+
+      if (! *name)
+        *name = cmsTakeProductName (profile);
+
+      if (*name && ! g_utf8_validate (*name, -1, NULL))
+        *name = _("(invalid UTF-8 string)");
+    }
+  else
+    {
+      *name = _("None");
+    }
+}
+
+void
+DocumentProperties::populate_available_profiles(){
+
+    // add "None"
+/*    Gtk::MenuItem *i = new Gtk::MenuItem();
+    i->show();
+
+    i->set_data("filepath", NULL);
+    i->set_data("name", _("None"));
+
+    Gtk::HBox *hb = new Gtk::HBox(false,  0);
+    hb->show();
+
+    Gtk::Label *l = new Gtk::Label( _("None") );
+    l->show();
+    l->set_alignment(0.0, 0.5);
+
+    hb->pack_start(*l, true, true, 0);
+
+    hb->show();
+    i->add(*hb);
+    _menu.append(*i);
+*/
+    std::list<gchar *> sources;
+    sources.push_back( profile_path("color/icc") );
+    //sources.push_back( g_strdup(INKSCAPE_COLORPROFILESDIR) );
+
+    int index = 1;
+
+    // Use this loop to iterate through a list of possible document locations.
+    while (!sources.empty()) {
+        gchar *dirname = sources.front();
+
+        if ( Inkscape::IO::file_test( dirname, G_FILE_TEST_EXISTS )
+            && Inkscape::IO::file_test( dirname, G_FILE_TEST_IS_DIR )) {
+            GError *err = 0;
+            GDir *directory = g_dir_open(dirname, 0, &err);
+            if (!directory) {
+                gchar *safeDir = Inkscape::IO::sanitizeString(dirname);
+                g_warning(_("Color profiles directory (%s) is unavailable."), safeDir);
+                g_free(safeDir);
+            } else {
+                gchar *filename = 0;
+                while ((filename = (gchar *)g_dir_read_name(directory)) != NULL) {
+                    gchar* lower = g_ascii_strdown( filename, -1 );
+                    gchar* full = g_build_filename(dirname, filename, NULL);
+                    if ( !Inkscape::IO::file_test( full, G_FILE_TEST_IS_DIR ) ) {
+                        cmsHPROFILE hProfile = cmsOpenProfileFromFile(full, "r");
+                        if (hProfile != NULL){
+                            const gchar* name;
+                            lcms_profile_get_name(hProfile, &name);
+                            Gtk::MenuItem* mi = new Gtk::MenuItem();
+                            mi->set_data("filepath", g_strdup(full));
+                            mi->set_data("name", g_strdup(name));
+                            Gtk::HBox *hbox = new Gtk::HBox();
+                            hbox->show();
+                            Gtk::Label* lbl = manage(new Gtk::Label(name));
+                            lbl->show();
+                            hbox->pack_start(*lbl, true, true, 0);
+                            mi->add(*hbox);
+                            mi->show_all();
+                            _menu.append(*mi);
+        //                    g_free((void*)name);
+                        }
+                        cmsCloseProfile(hProfile);
+                        index++;
+                    }
+                    g_free(full);
+                    g_free(lower);
+                }
+                g_dir_close(directory);
+            }
+        }
+
+        // toss the dirname
+        g_free(dirname);
+        sources.pop_front();
+    }
+    _menu.show_all();
+}
+
+void
+DocumentProperties::onEmbedProfile()
+{
+//store this profile in the SVG document (create <color-profile> element in the XML)
+    SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+    if (!desktop){
+        g_warning("No active desktop");
+        return;
+    }
+    Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+    Inkscape::XML::Node *cprofRepr = xml_doc->createElement("svg:color-profile");
+    cprofRepr->setAttribute("name", (gchar*) _menu.get_active()->get_data("name"));
+    cprofRepr->setAttribute("xlink:href", (gchar*) _menu.get_active()->get_data("filepath"));
+
+    /* Checks whether there is a defs element. Creates it when needed */
+    Inkscape::XML::Node *defsRepr = sp_repr_lookup_name(xml_doc, "svg:defs");
+    if (!defsRepr){
+        defsRepr = xml_doc->createElement("svg:defs");
+        xml_doc->root()->addChild(defsRepr, NULL);
+    }
+
+    g_assert(SP_ROOT(desktop->doc()->root)->defs);
+    defsRepr->addChild(cprofRepr, NULL);
+
+    Inkscape::GC::release(defsRepr);
+
+    // inform the document, so we can undo
+    sp_document_done(desktop->doc(), SP_VERB_EMBED_COLOR_PROFILE, _("Embed Color Profile"));
+
+    populate_embedded_profiles_box();
+}
+
+void
+DocumentProperties::populate_embedded_profiles_box()
+{
+    _EmbeddedProfilesListStore->clear();
+    const GSList *current = sp_document_get_resource_list( SP_ACTIVE_DOCUMENT, "iccprofile" );
+    while ( current ) {
+        SPObject* obj = SP_OBJECT(current->data);
+        Inkscape::ColorProfile* prof = reinterpret_cast<Inkscape::ColorProfile*>(obj);
+        Gtk::TreeModel::Row row = *(_EmbeddedProfilesListStore->append());
+        row[_EmbeddedProfilesListColumns.nameColumn] = prof->name;
+//        row[_EmbeddedProfilesListColumns.previewColumn] = "Color Preview";
+        current = g_slist_next(current);
+    }
+}
+
+
+void
+DocumentProperties::build_cms()
+{
+    _page_cms.show();
+
+    Gtk::Label *label_embed= manage (new Gtk::Label);
+    label_embed->set_markup (_("<b>Embedded Color Profiles:</b>"));
+    Gtk::Label *label_avail = manage (new Gtk::Label);
+    label_avail->set_markup (_("<b>Available Color Profiles:</b>"));
+
+    _embed_btn.set_label("Embed Profile");
+
+    Gtk::Widget *const array[] =
+    {
+        label_embed,          0,
+        &_EmbeddedProfilesListScroller,      0,
+        label_avail,        0,
+        &_combo_avail,        &_embed_btn,
+    };
+
+    attach_all(_page_cms.table(), array, G_N_ELEMENTS(array));
+
+    populate_available_profiles();
+
+    _combo_avail.set_menu(_menu);
+    _combo_avail.set_history(0);
+    _combo_avail.show_all();
+
+    //# Set up the Embedded Profiles combo box
+    _EmbeddedProfilesListStore = Gtk::ListStore::create(_EmbeddedProfilesListColumns);
+    _EmbeddedProfilesList.set_model(_EmbeddedProfilesListStore);
+    _EmbeddedProfilesList.append_column(_("Profile Name"), _EmbeddedProfilesListColumns.nameColumn);
+//    _EmbeddedProfilesList.append_column(_("Color Preview"), _EmbeddedProfilesListColumns.previewColumn);
+    _EmbeddedProfilesList.set_headers_visible(false);
+    _EmbeddedProfilesList.set_fixed_height_mode(true);
+
+    populate_embedded_profiles_box();
+
+    _EmbeddedProfilesListScroller.add(_EmbeddedProfilesList);
+    _EmbeddedProfilesListScroller.set_shadow_type(Gtk::SHADOW_IN);
+    _EmbeddedProfilesListScroller.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_ALWAYS);
+    _EmbeddedProfilesListScroller.set_size_request(-1, 90);
+
+    _embed_btn.signal_clicked().connect(sigc::mem_fun(*this, &DocumentProperties::onEmbedProfile));
+}
+#endif // ENABLE_LCMS
+
 /**
 * Called for _updating_ the dialog (e.g. when a new grid was manually added in XML)
 */
@@ -515,8 +721,6 @@ DocumentProperties::update()
     _rsu_gusn.setValue (nv->guidetolerance);
 
     _rcbs.setActive (nv->snap_manager.snapprefs.getSnapEnabledGlobally());
-    _rcbsi.setActive (nv->snapindicator);
-
     //-----------------------------------------------------------grids page
 
     update_gridspage();
index ab70b0d07cc0b225a32b931580fc6342ad7a6b40..ff4739bfb093f8ca6bece2c887e32717e3fa5511 100644 (file)
@@ -50,8 +50,15 @@ protected:
     void  build_snap();
     void  build_snap_dtls();
     void  build_gridspage();
+#if ENABLE_LCMS
+    void  build_cms();
+#endif // ENABLE_LCMS
     void  init();
+
+    void  populate_available_profiles();
+    void  populate_embedded_profiles_box();
     virtual void  on_response (int);
+    void  onEmbedProfile();
 
     void _handleDocumentReplaced(SPDesktop* desktop, SPDocument *document);
     void _handleActivateDesktop(Inkscape::Application *application, SPDesktop *desktop);
@@ -61,7 +68,7 @@ protected:
     Gtk::Notebook  _notebook;
 
     NotebookPage   _page_page, _page_guides;
-    NotebookPage   _page_snap, _page_snap_dtls;
+    NotebookPage   _page_snap, _page_snap_dtls, _page_cms;
     Gtk::VBox      _grids_vbox;
 
     Registry _wr;
@@ -74,13 +81,29 @@ protected:
     RegisteredCheckButton _rcb_sgui, _rcbsng;
     RegisteredColorPicker _rcp_gui, _rcp_hgui;
     //---------------------------------------------------------------
-    RegisteredCheckButton _rcbs, _rcbsi, _rcbsnbb, _rcbsnn, _rcbsnop;
+    RegisteredCheckButton _rcbs, _rcbsnbb, _rcbsnn, _rcbsnop;
     RegisteredCheckButton _rcbsnon, _rcbsnbbp, _rcbsnbbn, _rcbsnpb;
     ToleranceSlider       _rsu_sno, _rsu_sn, _rsu_gusn;
     //---------------------------------------------------------------
     RegisteredCheckButton _rcbic, _rcbsm;
     RegisteredCheckButton _rcbsigg, _rcbsils;
     //---------------------------------------------------------------
+    Gtk::Menu   _menu;
+    Gtk::OptionMenu   _combo_avail;
+    Gtk::Button         _embed_btn;
+    class EmbeddedProfilesColumns : public Gtk::TreeModel::ColumnRecord
+        {
+        public:
+            EmbeddedProfilesColumns()
+               { add(nameColumn); add(previewColumn);  }
+            Gtk::TreeModelColumn<Glib::ustring> nameColumn;
+            Gtk::TreeModelColumn<Glib::ustring> previewColumn;
+        };
+    EmbeddedProfilesColumns _EmbeddedProfilesListColumns;
+    Glib::RefPtr<Gtk::ListStore> _EmbeddedProfilesListStore;
+    Gtk::TreeView _EmbeddedProfilesList;
+    Gtk::ScrolledWindow _EmbeddedProfilesListScroller;
+    //---------------------------------------------------------------
     Gtk::Notebook   _grids_notebook;
     Gtk::HBox       _grids_hbox_crea;
     Gtk::Label      _grids_label_crea;
index b47f2ccc74f0c77b7297e796db5fbf1eba5d1330..d91af244b1167bce64dafa25b192f8ce81a3065f 100644 (file)
@@ -864,7 +864,7 @@ bool FileOpenDialogImplWin32::set_svg_preview()
     NRRectL bbox = {0, 0, scaledSvgWidth, scaledSvgHeight};
 
     // write object bbox to area
-    boost::optional<Geom::Rect> maybeArea(area);
+    Geom::OptRect maybeArea(area);
     sp_document_ensure_up_to_date (svgDoc);
     sp_item_invoke_bbox((SPItem *) svgDoc->root, maybeArea,
         sp_item_i2r_affine((SPItem *)(svgDoc->root)), TRUE);
index 799bb2a245ba150705571f61d782dc1694147a1e..08df7fd05d5f38111da6dd6539280bcb32e643dd 100644 (file)
 #include "path-prefix.h"
 #include "preferences.h"
 #include "selection.h"
-#include "sp-feblend.h"
-#include "sp-fecolormatrix.h"
-#include "sp-fecomponenttransfer.h"
-#include "sp-fecomposite.h"
-#include "sp-feconvolvematrix.h"
-#include "sp-fedisplacementmap.h"
-#include "sp-fedistantlight.h"
-#include "sp-femerge.h"
-#include "sp-femergenode.h"
-#include "sp-feoffset.h"
-#include "sp-fepointlight.h"
-#include "sp-fespotlight.h"
+#include "filters/blend.h"
+#include "filters/colormatrix.h"
+#include "filters/componenttransfer.h"
+#include "filters/composite.h"
+#include "filters/convolvematrix.h"
+#include "filters/displacementmap.h"
+#include "filters/distantlight.h"
+#include "filters/merge.h"
+#include "filters/mergenode.h"
+#include "filters/offset.h"
+#include "filters/pointlight.h"
+#include "filters/spotlight.h"
 #include "sp-filter-primitive.h"
 #include "sp-gaussian-blur.h"
 
@@ -84,7 +84,7 @@ int input_count(const SPFilterPrimitive* prim)
     else if(SP_IS_FEMERGE(prim)) {
         // Return the number of feMergeNode connections plus an extra
         int count = 1;
-        for(const SPObject* o = prim->firstChild(); o; o = o->next, ++count);
+        for(const SPObject* o = prim->firstChild(); o; o = o->next, ++count){};
         return count;
     }
     else
@@ -1821,7 +1821,7 @@ int FilterEffectsDialog::PrimitiveList::find_index(const Gtk::TreeIter& target)
 {
     int i = 0;
     for(Gtk::TreeIter iter = _model->children().begin();
-        iter != target; ++iter, ++i);
+        iter != target; ++iter, ++i){};
     return i;
 }
 
index d06d3a4068b742733feffc645c3256f55795628d..a436ce867e4a9d316df930ad4f05a7676b459779 100644 (file)
@@ -114,6 +114,7 @@ InkscapePreferences::InkscapePreferences()
     initPageUI();
     initPageMouse();
     initPageScrolling();
+    initPageSnapping();
     initPageSteps();
     initPageWindows();
     initPageMisc();
@@ -198,6 +199,20 @@ void InkscapePreferences::initPageScrolling()
                             _("When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when off, it zooms with Ctrl and scrolls without Ctrl."));
 }
 
+void InkscapePreferences::initPageSnapping()
+{
+       
+       _snap_indicator.init( _("Enable snap indicator"), "/options/snapindicator/value", true);
+       _page_snapping.add_line( false, "", _snap_indicator, "",
+                       _("After snapping, a symbol is drawn at the point that has snapped"));
+           
+       _snap_delay.init("/options/snapdelay/value", 0, 1000, 50, 100, 300, 0);
+       _page_snapping.add_line( false, _("Delay (in msec):"), _snap_delay, "",
+                     _("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"), true);
+
+       this->AddPage(_page_snapping, _("Snapping"), PREFS_PAGE_SNAPPING);
+}
+
 void InkscapePreferences::initPageSteps()
 {
     this->AddPage(_page_steps, _("Steps"), PREFS_PAGE_STEPS);
index 98ecda855f333778ed8bae3b3f1ff1464bdbd057..a957ce6579a8343aedaa0e1e701040bc27ac3391 100644 (file)
@@ -72,6 +72,7 @@ enum {
     PREFS_PAGE_UI,
     PREFS_PAGE_MOUSE,
     PREFS_PAGE_SCROLLING,
+    PREFS_PAGE_SNAPPING,
     PREFS_PAGE_STEPS,
     PREFS_PAGE_WINDOWS,
     PREFS_PAGE_MISC
@@ -110,7 +111,7 @@ protected:
     Gtk::TreeModel::Path _path_tools;
     Gtk::TreeModel::Path _path_shapes;
 
-    DialogPage _page_mouse, _page_scrolling, _page_steps, _page_tools, _page_windows,
+    DialogPage _page_mouse, _page_scrolling, _page_snapping, _page_steps, _page_tools, _page_windows,
         _page_clones, _page_mask, _page_transforms, _page_filters, _page_select,
         _page_importexport, _page_cms, _page_grids, _page_svgoutput, _page_misc,
         _page_ui, _page_autosave, _page_bitmaps;
@@ -125,6 +126,9 @@ protected:
     PrefSpinButton _scroll_wheel, _scroll_arrow_px, _scroll_arrow_acc, _scroll_auto_speed, _scroll_auto_thres;
     PrefCheckButton _scroll_space;
     PrefCheckButton _wheel_zoom;
+    
+    Gtk::HScale                *_slider_snapping_delay;
+    PrefCheckButton _snap_indicator;
 
     PrefCombo       _steps_rot_snap;
     PrefCheckButton _steps_compass;
@@ -172,6 +176,7 @@ protected:
 
     PrefSpinButton  _importexport_export, _misc_recent, _misc_simpl;
     ZoomCorrRulerSlider _ui_zoom_correction;
+    PrefSlider         _snap_delay;
     PrefSpinButton  _misc_latency_skew;
     PrefCheckButton _misc_comment, _misc_forkvectors, _misc_scripts, _misc_namedicon_delay;
     PrefCombo       _misc_small_toolbar;
@@ -255,6 +260,7 @@ protected:
     void on_pagelist_selection_changed();
     void initPageMouse();
     void initPageScrolling();
+    void initPageSnapping();
     void initPageSteps();
     void initPageTools();
     void initPageWindows();
index 8a7e0adebdd571f9a31df11afbaee0ab0dcedf7c..1c66160dd4df622f185ea800175a8b1af9948255 100644 (file)
@@ -27,6 +27,7 @@
 #include "path-chemistry.h"
 #include "live_effects/effect.h"
 #include "live_effects/lpeobject.h"
+#include "live_effects/lpeobject-reference.h"
 #include "gtkmm/widget.h"
 #include <vector>
 #include "inkscape.h"
index 370bd599af6833a40ce4522c41b839d822fddded..1152e8bb8ba1652570598d0e13c2f3ca5051646d 100644 (file)
@@ -19,8 +19,7 @@
 #include <gtkmm/frame.h>
 #include <gtkmm/tooltips.h>
 #include "ui/widget/combo-enums.h"
-#include "live_effects/effect.h"
-#include "live_effects/lpeobject-reference.h"
+#include "live_effects/effect-enum.h"
 #include <gtkmm/liststore.h>
 #include <gtkmm/treeview.h>
 #include <gtkmm/scrolledwindow.h>
 
 
 class SPDesktop;
+class SPLPEItem;
 
 namespace Inkscape {
 
+namespace LivePathEffect {
+    class Effect;
+    class LPEObjectReference;
+}
+
 namespace UI {
 namespace Dialog {
 
index 958256310997b494bf276e8891a4ea6758938aa7..31f9cc51e7f879bb4347d534b2fdd6bd70ff183c 100644 (file)
@@ -99,8 +99,8 @@ void Messages::message(char *msg)
     buffer->insert (buffer->end(), uMsg);
 }
 
-
-void dialogLoggingFunction(const gchar */*log_domain*/,
+// dialogLoggingCallback is already used in debug.cpp
+static void dialogLoggingCallback(const gchar */*log_domain*/,
                            GLogLevelFlags /*log_level*/,
                            const gchar *messageText,
                            gpointer user_data)
@@ -123,27 +123,27 @@ void Messages::captureLogMessages()
                              G_LOG_LEVEL_INFO    | G_LOG_LEVEL_DEBUG);
     if ( !handlerDefault ) {
         handlerDefault = g_log_set_handler(NULL, flags,
-              dialogLoggingFunction, (gpointer)this);
+              dialogLoggingCallback, (gpointer)this);
     }
     if ( !handlerGlibmm ) {
         handlerGlibmm = g_log_set_handler("glibmm", flags,
-              dialogLoggingFunction, (gpointer)this);
+              dialogLoggingCallback, (gpointer)this);
     }
     if ( !handlerAtkmm ) {
         handlerAtkmm = g_log_set_handler("atkmm", flags,
-              dialogLoggingFunction, (gpointer)this);
+              dialogLoggingCallback, (gpointer)this);
     }
     if ( !handlerPangomm ) {
         handlerPangomm = g_log_set_handler("pangomm", flags,
-              dialogLoggingFunction, (gpointer)this);
+              dialogLoggingCallback, (gpointer)this);
     }
     if ( !handlerGdkmm ) {
         handlerGdkmm = g_log_set_handler("gdkmm", flags,
-              dialogLoggingFunction, (gpointer)this);
+              dialogLoggingCallback, (gpointer)this);
     }
     if ( !handlerGtkmm ) {
         handlerGtkmm = g_log_set_handler("gtkmm", flags,
-              dialogLoggingFunction, (gpointer)this);
+              dialogLoggingCallback, (gpointer)this);
     }
     message((char*)"log capture started");
 }
diff --git a/src/ui/dialog/tile.cpp b/src/ui/dialog/tile.cpp
new file mode 100644 (file)
index 0000000..7f45901
--- /dev/null
@@ -0,0 +1,884 @@
+/*
+ * A simple dialog for creating grid type arrangements of selected objects
+ *
+ * Authors:
+ *   Bob Jamison ( based off trace dialog)
+ *   John Cliff
+ *   Other dudes from The Inkscape Organization
+ *
+ * Copyright (C) 2004 Bob Jamison
+ * Copyright (C) 2004 John Cliff
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+//#define DEBUG_GRID_ARRANGE 1
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
+#include <gtk/gtksizegroup.h>
+#include <glibmm/i18n.h>
+#include <gtkmm/stock.h>
+
+#include "verbs.h"
+#include "preferences.h"
+#include "inkscape.h"
+#include "desktop-handles.h"
+#include "selection.h"
+#include "document.h"
+#include "sp-item.h"
+#include "widgets/icon.h"
+#include "tile.h"
+
+/*
+ *    Sort items by their x co-ordinates, taking account of y (keeps rows intact)
+ *
+ *    <0 *elem1 goes before *elem2
+ *    0  *elem1 == *elem2
+ *    >0  *elem1 goes after *elem2
+ */
+int
+sp_compare_x_position(SPItem *first, SPItem *second)
+{
+    using Geom::X;
+    using Geom::Y;
+
+    Geom::OptRect a = first->getBounds(sp_item_i2doc_affine(first));
+    Geom::OptRect b = second->getBounds(sp_item_i2doc_affine(second));
+
+    if ( !a || !b ) {
+        // FIXME?
+        return 0;
+    }
+
+    double const a_height = a->dimensions()[Y];
+    double const b_height = b->dimensions()[Y];
+    
+    bool a_in_b_vert = false;
+    if ((a->min()[Y] < b->min()[Y] + 0.1) && (a->min()[Y] > b->min()[Y] - b_height)) {
+        a_in_b_vert = true;
+    } else if ((b->min()[Y] < a->min()[Y] + 0.1) && (b->min()[Y] > a->min()[Y] - a_height)) {
+        a_in_b_vert = true;
+    } else if (b->min()[Y] == a->min()[Y]) {
+        a_in_b_vert = true;
+    } else {
+        a_in_b_vert = false;
+    }
+
+    if (!a_in_b_vert) {
+        return -1;
+    }
+    if (a_in_b_vert && a->min()[X] > b->min()[X]) {
+        return 1;
+    }
+    if (a_in_b_vert && a->min()[X] < b->min()[X]) {
+        return -1;
+    }
+    return 0;
+}
+
+/*
+ *    Sort items by their y co-ordinates.
+ */
+int
+sp_compare_y_position(SPItem *first, SPItem *second)
+{
+    Geom::OptRect a = first->getBounds(sp_item_i2doc_affine(first));
+    Geom::OptRect b = second->getBounds(sp_item_i2doc_affine(second));
+
+    if ( !a || !b ) {
+        // FIXME?
+        return 0;
+    }
+
+    if (a->min()[Geom::Y] > b->min()[Geom::Y]) {
+        return 1;
+    }
+    if (a->min()[Geom::Y] < b->min()[Geom::Y]) {
+        return -1;
+    }
+    
+    return 0;
+}
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+
+//#########################################################################
+//## E V E N T S
+//#########################################################################
+
+/*
+ *
+ * This arranges the selection in a grid pattern.
+ *
+ */
+
+void TileDialog::Grid_Arrange ()
+{
+
+    int cnt,row_cnt,col_cnt,a,row,col;
+    double grid_left,grid_top,col_width,row_height,paddingx,paddingy,width, height, new_x, new_y,cx,cy;
+    double total_col_width,total_row_height;
+    col_width = 0;
+    row_height = 0;
+    total_col_width=0;
+    total_row_height=0;
+
+    // check for correct numbers in the row- and col-spinners
+    on_col_spinbutton_changed();
+    on_row_spinbutton_changed();
+
+    // set padding to manual values
+    paddingx = XPadSpinner.get_value();
+    paddingy = YPadSpinner.get_value();
+
+    std::vector<double> row_heights;
+    std::vector<double> col_widths;
+    std::vector<double> row_ys;
+    std::vector<double> col_xs;
+
+    int NoOfCols = NoOfColsSpinner.get_value_as_int();
+    int NoOfRows = NoOfRowsSpinner.get_value_as_int();
+
+    width = 0;
+    for (a=0;a<NoOfCols; a++){
+        col_widths.push_back(width);
+    }
+
+    height = 0;
+    for (a=0;a<NoOfRows; a++){
+        row_heights.push_back(height);
+    }
+    grid_left = 99999;
+    grid_top = 99999;
+
+    SPDesktop *desktop = getDesktop();
+    sp_document_ensure_up_to_date(sp_desktop_document(desktop));
+
+    Inkscape::Selection *selection = sp_desktop_selection (desktop);
+    const GSList *items = selection->itemList();
+    cnt=0;
+    for (; items != NULL; items = items->next) {
+        SPItem *item = SP_ITEM(items->data);
+        Geom::OptRect b = item->getBounds(sp_item_i2doc_affine(item));
+        if (!b) {
+            continue;
+        }
+
+        width = b->dimensions()[Geom::X];
+        height = b->dimensions()[Geom::Y];
+
+        cx = b->midpoint()[Geom::X];
+        cy = b->midpoint()[Geom::Y];
+
+        if (b->min()[Geom::X] < grid_left) {
+            grid_left = b->min()[Geom::X];
+        }
+        if (b->min()[Geom::Y] < grid_top) {
+            grid_top = b->min()[Geom::Y];
+        }
+        if (width > col_width) {
+            col_width = width;
+        }
+        if (height > row_height) {
+            row_height = height;
+        }
+    }
+
+
+    // require the sorting done before we can calculate row heights etc.
+
+    const GSList *items2 = selection->itemList();
+    GSList *rev = g_slist_copy((GSList *) items2);
+    GSList *sorted = NULL;
+    rev = g_slist_sort(rev, (GCompareFunc) sp_compare_y_position);
+    sorted = g_slist_sort(rev, (GCompareFunc) sp_compare_x_position);
+
+
+    // Calculate individual Row and Column sizes if necessary
+
+
+        cnt=0;
+        const GSList *sizes = sorted;
+        for (; sizes != NULL; sizes = sizes->next) {
+            SPItem *item = SP_ITEM(sizes->data);
+            Geom::OptRect b = item->getBounds(sp_item_i2doc_affine(item));
+            if (b) {
+                width = b->dimensions()[Geom::X];
+                height = b->dimensions()[Geom::Y];
+                if (width > col_widths[(cnt % NoOfCols)]) {
+                    col_widths[(cnt % NoOfCols)] = width;
+                }
+                if (height > row_heights[(cnt / NoOfCols)]) {
+                    row_heights[(cnt / NoOfCols)] = height;
+                }
+            }
+
+            cnt++;
+        }
+
+
+    /// Make sure the top and left of the grid dont move by compensating for align values.
+    if (RowHeightButton.get_active()){
+        grid_top = grid_top - (((row_height - row_heights[0]) / 2)*(VertAlign));
+    }
+    if (ColumnWidthButton.get_active()){
+        grid_left = grid_left - (((col_width - col_widths[0]) /2)*(HorizAlign));
+    }
+
+    #ifdef DEBUG_GRID_ARRANGE
+     g_print("\n cx = %f cy= %f gridleft=%f",cx,cy,grid_left);
+    #endif
+
+    // Calculate total widths and heights, allowing for columns and rows non uniformly sized.
+
+    if (ColumnWidthButton.get_active()){
+        total_col_width = col_width * NoOfCols;
+        col_widths.clear();
+        for (a=0;a<NoOfCols; a++){
+            col_widths.push_back(col_width);
+        }
+    } else {
+        for (a = 0; a < (int)col_widths.size(); a++)
+        {
+          total_col_width += col_widths[a] ;
+        }
+    }
+
+    if (RowHeightButton.get_active()){
+        total_row_height = row_height * NoOfRows;
+        row_heights.clear();
+        for (a=0;a<NoOfRows; a++){
+            row_heights.push_back(row_height);
+        }
+    } else {
+        for (a = 0; a < (int)row_heights.size(); a++)
+        {
+          total_row_height += row_heights[a] ;
+        }
+    }
+
+
+    Geom::OptRect sel_bbox = selection->bounds();
+    // Fit to bbox, calculate padding between rows accordingly.
+    if ( sel_bbox && !SpaceManualRadioButton.get_active() ){
+#ifdef DEBUG_GRID_ARRANGE
+g_print("\n row = %f     col = %f selection x= %f selection y = %f", total_row_height,total_col_width, b.extent(Geom::X), b.extent(Geom::Y));
+#endif
+        paddingx = (sel_bbox->width() - total_col_width) / (NoOfCols -1);
+        paddingy = (sel_bbox->height() - total_row_height) / (NoOfRows -1);
+    }
+
+/*
+    Horizontal align  - Left    = 0
+                        Centre  = 1
+                        Right   = 2
+
+    Vertical align    - Top     = 0
+                        Middle  = 1
+                        Bottom  = 2
+
+    X position is calculated by taking the grids left co-ord, adding the distance to the column,
+   then adding 1/2 the spacing multiplied by the align variable above,
+   Y position likewise, takes the top of the grid, adds the y to the current row then adds the padding in to align it.
+
+*/
+
+    // Calculate row and column x and y coords required to allow for columns and rows which are non uniformly sized.
+
+    for (a=0;a<NoOfCols; a++){
+        if (a<1) col_xs.push_back(0);
+        else col_xs.push_back(col_widths[a-1]+paddingx+col_xs[a-1]);
+    }
+
+
+    for (a=0;a<NoOfRows; a++){
+        if (a<1) row_ys.push_back(0);
+        else row_ys.push_back(row_heights[a-1]+paddingy+row_ys[a-1]);
+    }
+
+    cnt=0;
+  for (row_cnt=0; ((sorted != NULL) && (row_cnt<NoOfRows)); row_cnt++) {
+
+             GSList *current_row = NULL;
+             for (col_cnt = 0; ((sorted != NULL) && (col_cnt<NoOfCols)); col_cnt++) {
+                 current_row = g_slist_append (current_row, sorted->data);
+                 sorted = sorted->next;
+             }
+
+             for (; current_row != NULL; current_row = current_row->next) {
+                 SPItem *item=SP_ITEM(current_row->data);
+                 Inkscape::XML::Node *repr = SP_OBJECT_REPR(item);
+                 Geom::OptRect b = item->getBounds(sp_item_i2doc_affine(item));
+                 Geom::Point min;
+                 if (b) {
+                     width = b->dimensions()[Geom::X];
+                     height = b->dimensions()[Geom::Y];
+                     min = b->min();
+                 } else {
+                     width = height = 0;
+                     min = Geom::Point(0, 0);
+                 }
+
+                 row = cnt / NoOfCols;
+                 col = cnt % NoOfCols;
+
+                 new_x = grid_left + (((col_widths[col] - width)/2)*HorizAlign) + col_xs[col];
+                 new_y = grid_top + (((row_heights[row] - height)/2)*VertAlign) + row_ys[row];
+
+                 // signs are inverted between x and y due to y inversion
+                 Geom::Point move = Geom::Point(new_x - min[Geom::X], min[Geom::Y] - new_y);
+                 Geom::Matrix const affine = Geom::Matrix(Geom::Translate(move));
+                 sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * affine);
+                 sp_item_write_transform(item, repr, item->transform,  NULL);
+                 SP_OBJECT (current_row->data)->updateRepr();
+                 cnt +=1;
+             }
+             g_slist_free (current_row);
+    }
+
+    sp_document_done (sp_desktop_document (desktop), SP_VERB_SELECTION_GRIDTILE, 
+                      _("Arrange in a grid"));
+
+}
+
+
+//#########################################################################
+//## E V E N T S
+//#########################################################################
+
+
+void TileDialog::_apply()
+{
+       Grid_Arrange();
+}
+
+
+/**
+ * changed value in # of columns spinbox.
+ */
+void TileDialog::on_row_spinbutton_changed()
+{
+    // quit if run by the attr_changed listener
+    if (updating) {
+            return;
+        }
+
+    // in turn, prevent listener from responding
+    updating = true;
+    SPDesktop *desktop = getDesktop();
+
+    Inkscape::Selection *selection = sp_desktop_selection (desktop);
+
+    GSList const *items = selection->itemList();
+    int selcount = g_slist_length((GSList *)items);
+
+    double PerCol = ceil(selcount / NoOfColsSpinner.get_value());
+    NoOfRowsSpinner.set_value(PerCol);
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    prefs->setDouble("/dialogs/gridtiler/NoOfCols", NoOfColsSpinner.get_value());
+    updating=false;
+}
+
+/**
+ * changed value in # of rows spinbox.
+ */
+void TileDialog::on_col_spinbutton_changed()
+{
+    // quit if run by the attr_changed listener
+    if (updating) {
+            return;
+        }
+
+    // in turn, prevent listener from responding
+    updating = true;
+    SPDesktop *desktop = getDesktop();
+    Inkscape::Selection *selection = sp_desktop_selection (desktop);
+
+    GSList const *items = selection->itemList();
+    int selcount = g_slist_length((GSList *)items);
+
+    double PerRow = ceil(selcount / NoOfRowsSpinner.get_value());
+    NoOfColsSpinner.set_value(PerRow);
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    prefs->setDouble("/dialogs/gridtiler/NoOfCols", PerRow);
+
+    updating=false;
+}
+
+/**
+ * changed value in x padding spinbox.
+ */
+void TileDialog::on_xpad_spinbutton_changed()
+{
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    prefs->setDouble("/dialogs/gridtiler/XPad", XPadSpinner.get_value());
+
+}
+
+/**
+ * changed value in y padding spinbox.
+ */
+void TileDialog::on_ypad_spinbutton_changed()
+{
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    prefs->setDouble("/dialogs/gridtiler/YPad", YPadSpinner.get_value());
+}
+
+
+/**
+ * checked/unchecked autosize Rows button.
+ */
+void TileDialog::on_RowSize_checkbutton_changed()
+{
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    if (RowHeightButton.get_active()) {
+        prefs->setDouble("/dialogs/gridtiler/AutoRowSize", 20);
+    } else {
+        prefs->setDouble("/dialogs/gridtiler/AutoRowSize", -20);
+    }
+    RowHeightBox.set_sensitive ( !RowHeightButton.get_active());
+}
+
+/**
+ * checked/unchecked autosize Rows button.
+ */
+void TileDialog::on_ColSize_checkbutton_changed()
+{
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    if (ColumnWidthButton.get_active()) {
+        prefs->setDouble("/dialogs/gridtiler/AutoColSize", 20);
+    } else {
+        prefs->setDouble("/dialogs/gridtiler/AutoColSize", -20);
+    }
+    ColumnWidthBox.set_sensitive ( !ColumnWidthButton.get_active());
+}
+
+/**
+ * changed value in columns spinbox.
+ */
+void TileDialog::on_rowSize_spinbutton_changed()
+{
+    // quit if run by the attr_changed listener
+    if (updating) {
+            return;
+        }
+
+    // in turn, prevent listener from responding
+    updating = true;
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    prefs->setDouble("/dialogs/gridtiler/RowHeight", RowHeightSpinner.get_value());
+    updating=false;
+
+}
+
+/**
+ * changed value in rows spinbox.
+ */
+void TileDialog::on_colSize_spinbutton_changed()
+{
+    // quit if run by the attr_changed listener
+    if (updating) {
+            return;
+        }
+
+    // in turn, prevent listener from responding
+    updating = true;
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    prefs->setDouble("/dialogs/gridtiler/ColWidth", ColumnWidthSpinner.get_value());
+    updating=false;
+
+}
+
+/**
+ * changed Radio button in Spacing group.
+ */
+void TileDialog::Spacing_button_changed()
+{
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    if (SpaceManualRadioButton.get_active()) {
+        prefs->setDouble("/dialogs/gridtiler/SpacingType", 20);
+    } else {
+        prefs->setDouble("/dialogs/gridtiler/SpacingType", -20);
+    }
+
+    SizesHBox.set_sensitive ( SpaceManualRadioButton.get_active());
+}
+
+/**
+ * changed Radio button in Vertical Align group.
+ */
+void TileDialog::VertAlign_changed()
+{
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    if (VertTopRadioButton.get_active()) {
+        VertAlign = 0;
+        prefs->setInt("/dialogs/gridtiler/VertAlign", 0);
+    } else if (VertCentreRadioButton.get_active()){
+        VertAlign = 1;
+        prefs->setInt("/dialogs/gridtiler/VertAlign", 1);
+    } else if (VertBotRadioButton.get_active()){
+        VertAlign = 2;
+        prefs->setInt("/dialogs/gridtiler/VertAlign", 2);
+    }
+}
+
+/**
+ * changed Radio button in Vertical Align group.
+ */
+void TileDialog::HorizAlign_changed()
+{
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    if (HorizLeftRadioButton.get_active()) {
+        HorizAlign = 0;
+        prefs->setInt("/dialogs/gridtiler/HorizAlign", 0);
+    } else if (HorizCentreRadioButton.get_active()){
+        HorizAlign = 1;
+        prefs->setInt("/dialogs/gridtiler/HorizAlign", 1);
+    } else if (HorizRightRadioButton.get_active()){
+        HorizAlign = 2;
+        prefs->setInt("/dialogs/gridtiler/HorizAlign", 2);
+    }
+}
+
+/**
+ * Desktop selection changed
+ */
+void TileDialog::updateSelection()
+{
+    // quit if run by the attr_changed listener
+    if (updating) {
+        return;
+    }
+
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    double col_width = 0;
+    double row_height = 0;
+    // in turn, prevent listener from responding
+    updating = true;
+    SPDesktop *desktop = getDesktop();
+    Inkscape::Selection *selection = sp_desktop_selection (desktop);
+    const GSList *items = selection->itemList();
+    int selcount = g_slist_length((GSList *)items);
+
+    if (NoOfColsSpinner.get_value()>1 && NoOfRowsSpinner.get_value()>1){
+        // Update the number of rows assuming number of columns wanted remains same.
+        double NoOfRows = ceil(selcount / NoOfColsSpinner.get_value());
+        NoOfRowsSpinner.set_value(NoOfRows);
+
+        // if the selection has less than the number set for one row, reduce it appropriately
+        if (selcount<NoOfColsSpinner.get_value()) {
+            double NoOfCols = ceil(selcount / NoOfRowsSpinner.get_value());
+            NoOfColsSpinner.set_value(NoOfCols);
+            prefs->setInt("/dialogs/gridtiler/NoOfCols", NoOfCols);
+        }
+    } else {
+        double PerRow = ceil(sqrt(selcount));
+        double PerCol = ceil(sqrt(selcount));
+        NoOfRowsSpinner.set_value(PerRow);
+        NoOfColsSpinner.set_value(PerCol);
+        prefs->setInt("/dialogs/gridtiler/NoOfCols", static_cast<int>(PerCol));
+
+    }
+
+    updating=false;
+
+}
+
+
+
+/*##########################
+## Experimental
+##########################*/
+
+static void updateSelectionCallback(Inkscape::Application */*inkscape*/, Inkscape::Selection */*selection*/, TileDialog *dlg)
+{
+    TileDialog *tledlg = (TileDialog *) dlg;
+    tledlg->updateSelection();
+}
+
+
+//#########################################################################
+//## C O N S T R U C T O R    /    D E S T R U C T O R
+//#########################################################################
+/**
+ * Constructor
+ */
+TileDialog::TileDialog()
+    : UI::Widget::Panel("", "/dialogs/gridtiler", SP_VERB_SELECTION_GRIDTILE)
+{
+     // bool used by spin button callbacks to stop loops where they change each other.
+    updating = false;
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+
+    // could not do this in gtkmm - there's no Gtk::SizeGroup public constructor (!)
+    GtkSizeGroup *_col1 = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+    GtkSizeGroup *_col2 = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+    GtkSizeGroup *_col3 = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+
+    {
+        // Selection Change signal
+        g_signal_connect ( G_OBJECT (INKSCAPE), "change_selection", G_CALLBACK (updateSelectionCallback), this);
+    }
+
+    Gtk::Box *contents = _getContents();
+
+#define MARGIN 2
+
+    //##Set up the panel
+
+    SPDesktop *desktop = getDesktop();
+
+    Inkscape::Selection *selection = sp_desktop_selection (desktop);
+    int selcount = 1;
+    if (!selection->isEmpty()) {
+        GSList const *items = selection->itemList();
+        selcount = g_slist_length((GSList *)items);
+    }
+
+
+    /*#### Number of Rows ####*/
+
+    double PerRow = ceil(sqrt(selcount));
+    double PerCol = ceil(sqrt(selcount));
+
+    #ifdef DEBUG_GRID_ARRANGE
+        g_print("/n PerRox = %f PerCol = %f selcount = %d",PerRow,PerCol,selcount);
+    #endif
+
+    NoOfRowsLabel.set_label(_("Rows:"));
+    NoOfRowsBox.pack_start(NoOfRowsLabel, false, false, MARGIN);
+
+    NoOfRowsSpinner.set_digits(0);
+    NoOfRowsSpinner.set_increments(1, 5);
+    NoOfRowsSpinner.set_range(1.0, 100.0);
+    NoOfRowsSpinner.set_value(PerCol);
+    NoOfRowsSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_col_spinbutton_changed));
+    tips.set_tip(NoOfRowsSpinner, _("Number of rows"));
+    NoOfRowsBox.pack_start(NoOfRowsSpinner, false, false, MARGIN);
+    gtk_size_group_add_widget(_col1, (GtkWidget *) NoOfRowsBox.gobj());
+
+    RowHeightButton.set_label(_("Equal height"));
+    double AutoRow = prefs->getDouble("/dialogs/gridtiler/AutoRowSize", 15);
+    if (AutoRow>0)
+         AutoRowSize=true;
+    else
+         AutoRowSize=false;
+    RowHeightButton.set_active(AutoRowSize);
+
+    NoOfRowsBox.pack_start(RowHeightButton, false, false, MARGIN);
+
+    tips.set_tip(RowHeightButton, _("If not set, each row has the height of the tallest object in it"));
+    RowHeightButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::on_RowSize_checkbutton_changed));
+
+ {
+        /*#### Radio buttons to control vertical alignment ####*/
+
+        VertAlignLabel.set_label(_("Align:"));
+        VertAlignHBox.pack_start(VertAlignLabel, false, false, MARGIN);
+
+        VertTopRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::VertAlign_changed));
+        VertAlignGroup = VertTopRadioButton.get_group();
+        VertAlignVBox.pack_start(VertTopRadioButton, false, false, 0);
+
+        VertCentreRadioButton.set_group(VertAlignGroup);
+        VertCentreRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::VertAlign_changed));
+        VertAlignVBox.pack_start(VertCentreRadioButton, false, false, 0);
+
+        VertBotRadioButton.set_group(VertAlignGroup);
+        VertBotRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::VertAlign_changed));
+        VertAlignVBox.pack_start(VertBotRadioButton, false, false, 0);
+
+        VertAlign = prefs->getInt("/dialogs/gridtiler/VertAlign", 1);
+        if (VertAlign == 0) {
+            VertTopRadioButton.set_active(TRUE);
+        }
+        else if (VertAlign == 1) {
+            VertCentreRadioButton.set_active(TRUE);
+        }
+        else if (VertAlign == 2){
+            VertBotRadioButton.set_active(TRUE);
+        }
+        VertAlignHBox.pack_start(VertAlignVBox, false, false, MARGIN);
+        NoOfRowsBox.pack_start(VertAlignHBox, false, false, MARGIN);
+    }
+
+    SpinsHBox.pack_start(NoOfRowsBox, false, false, MARGIN);
+
+
+    /*#### Label for X ####*/
+    padXByYLabel.set_label(" ");
+    XByYLabelVBox.pack_start(padXByYLabel, false, false, MARGIN);
+    XByYLabel.set_markup(" &#215; ");
+    XByYLabelVBox.pack_start(XByYLabel, false, false, MARGIN);
+    SpinsHBox.pack_start(XByYLabelVBox, false, false, MARGIN);
+    gtk_size_group_add_widget(_col2, (GtkWidget *) XByYLabelVBox.gobj());
+
+    /*#### Number of columns ####*/
+
+    NoOfColsLabel.set_label(_("Columns:"));
+    NoOfColsBox.pack_start(NoOfColsLabel, false, false, MARGIN);
+
+    NoOfColsSpinner.set_digits(0);
+    NoOfColsSpinner.set_increments(1, 5);
+    NoOfColsSpinner.set_range(1.0, 100.0);
+    NoOfColsSpinner.set_value(PerRow);
+    NoOfColsSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_row_spinbutton_changed));
+    tips.set_tip(NoOfColsSpinner, _("Number of columns"));
+    NoOfColsBox.pack_start(NoOfColsSpinner, false, false, MARGIN);
+    gtk_size_group_add_widget(_col3, (GtkWidget *) NoOfColsBox.gobj());
+
+    ColumnWidthButton.set_label(_("Equal width"));
+    double AutoCol = prefs->getDouble("/dialogs/gridtiler/AutoColSize", 15);
+    if (AutoCol>0)
+         AutoColSize=true;
+    else
+         AutoColSize=false;
+    ColumnWidthButton.set_active(AutoColSize);
+    NoOfColsBox.pack_start(ColumnWidthButton, false, false, MARGIN);
+
+    tips.set_tip(ColumnWidthButton, _("If not set, each column has the width of the widest object in it"));
+    ColumnWidthButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::on_ColSize_checkbutton_changed));
+
+
+    {
+        /*#### Radio buttons to control horizontal alignment ####*/
+
+        HorizAlignLabel.set_label(_("Align:"));
+        HorizAlignVBox.pack_start(HorizAlignLabel, false, false, MARGIN);
+
+        HorizAlignHBox.pack_start(*(new Gtk::HBox()), true, true, 0); // centering strut
+
+        HorizLeftRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::HorizAlign_changed));
+        HorizAlignGroup = HorizLeftRadioButton.get_group();
+        HorizAlignHBox.pack_start(HorizLeftRadioButton, false, false, 0);
+
+        HorizCentreRadioButton.set_group(HorizAlignGroup);
+        HorizCentreRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::HorizAlign_changed));
+        HorizAlignHBox.pack_start(HorizCentreRadioButton, false, false, 0);
+
+        HorizRightRadioButton.set_group(HorizAlignGroup);
+        HorizRightRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::HorizAlign_changed));
+        HorizAlignHBox.pack_start(HorizRightRadioButton, false, false, 0);
+
+        HorizAlignHBox.pack_start(*(new Gtk::HBox()), true, true, 0); // centering strut
+
+        HorizAlign = prefs->getInt("/dialogs/gridtiler/HorizAlign", 1);
+        if (HorizAlign == 0) {
+            HorizLeftRadioButton.set_active(TRUE);
+        }
+        else if (HorizAlign == 1) {
+            HorizCentreRadioButton.set_active(TRUE);
+        }
+        else if (HorizAlign == 2) {
+            HorizRightRadioButton.set_active(TRUE);
+        }
+        HorizAlignVBox.pack_start(HorizAlignHBox, false, false, MARGIN);
+        NoOfColsBox.pack_start(HorizAlignVBox, false, false, MARGIN);
+    }
+
+    SpinsHBox.pack_start(NoOfColsBox, false, false, MARGIN);
+
+    TileBox.pack_start(SpinsHBox, false, false, MARGIN);
+
+    {
+        /*#### Radio buttons to control spacing manually or to fit selection bbox ####*/
+        SpaceByBBoxRadioButton.set_label(_("Fit into selection box"));
+        SpaceByBBoxRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::Spacing_button_changed));
+        SpacingGroup = SpaceByBBoxRadioButton.get_group();
+
+        SpacingVBox.pack_start(SpaceByBBoxRadioButton, false, false, MARGIN);
+
+        SpaceManualRadioButton.set_label(_("Set spacing:"));
+        SpaceManualRadioButton.set_group(SpacingGroup);
+        SpaceManualRadioButton.signal_toggled().connect(sigc::mem_fun(*this, &TileDialog::Spacing_button_changed));
+        SpacingVBox.pack_start(SpaceManualRadioButton, false, false, MARGIN);
+
+        TileBox.pack_start(SpacingVBox, false, false, MARGIN);
+    }
+
+    {
+        /*#### Y Padding ####*/
+
+        GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "clonetiler_per_row");
+        YPadBox.pack_start (*(Glib::wrap(i)), false, false, MARGIN);
+
+        YPadSpinner.set_digits(1);
+        YPadSpinner.set_increments(0.2, 2);
+        YPadSpinner.set_range(-10000, 10000);
+        double YPad = prefs->getDouble("/dialogs/gridtiler/YPad", 15);
+        YPadSpinner.set_value(YPad);
+        YPadBox.pack_start(YPadSpinner, true, true, MARGIN);
+        tips.set_tip(YPadSpinner, _("Vertical spacing between rows (px units)"));
+        YPadSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_ypad_spinbutton_changed));
+        gtk_size_group_add_widget(_col1, (GtkWidget *) YPadBox.gobj());
+
+        SizesHBox.pack_start(YPadBox, false, false, MARGIN);
+    }
+
+    {
+    Gtk::HBox *spacer = new Gtk::HBox;
+    SizesHBox.pack_start(*spacer, false, false, 0);
+    gtk_size_group_add_widget(_col2, (GtkWidget *) spacer->gobj());
+    }
+
+    {
+        /*#### X padding ####*/
+
+        GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_MENU, "clonetiler_per_column");
+        XPadBox.pack_start (*(Glib::wrap(i)), false, false, MARGIN);
+
+        XPadSpinner.set_digits(1);
+        XPadSpinner.set_increments(0.2, 2);
+        XPadSpinner.set_range(-10000, 10000);
+        double XPad = prefs->getDouble("/dialogs/gridtiler/XPad", 15);
+        XPadSpinner.set_value(XPad);
+        XPadBox.pack_start(XPadSpinner, true, true, MARGIN);
+        tips.set_tip(XPadSpinner, _("Horizontal spacing between columns (px units)"));
+        XPadSpinner.signal_changed().connect(sigc::mem_fun(*this, &TileDialog::on_xpad_spinbutton_changed));
+        gtk_size_group_add_widget(_col3, (GtkWidget *) XPadBox.gobj());
+
+        SizesHBox.pack_start(XPadBox, false, false, MARGIN);
+    }
+
+
+    TileBox.pack_start(SizesHBox, false, false, MARGIN);
+
+    contents->pack_start(TileBox);
+
+    double SpacingType = prefs->getDouble("/dialogs/gridtiler/SpacingType", 15);
+    if (SpacingType>0) {
+        ManualSpacing=true;
+    } else {
+        ManualSpacing=false;
+    }
+    SpaceManualRadioButton.set_active(ManualSpacing);
+    SpaceByBBoxRadioButton.set_active(!ManualSpacing);
+    SizesHBox.set_sensitive (ManualSpacing);
+
+    //## The OK button
+    TileOkButton = addResponseButton(_("Arrange"), GTK_RESPONSE_APPLY);
+    tips.set_tip((*TileOkButton), _("Arrange selected objects"));
+
+    show_all_children();
+}
+
+} //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/tile.h b/src/ui/dialog/tile.h
new file mode 100644 (file)
index 0000000..075b2b3
--- /dev/null
@@ -0,0 +1,183 @@
+/** @file
+ * @brief Dialog for creating grid type arrangements of selected objects
+ */
+/* Authors:
+ *   Bob Jamison ( based off trace dialog)
+ *   John Cliff
+ *   Other dudes from The Inkscape Organization
+ *
+ * Copyright (C) 2004 Bob Jamison
+ * Copyright (C) 2004 John Cliff
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifndef SEEN_UI_DIALOG_TILE_H
+#define SEEN_UI_DIALOG_TILE_H
+
+#include <gtkmm/box.h>
+#include <gtkmm/notebook.h>
+#include <gtkmm/tooltips.h>
+#include <gtkmm/button.h>
+#include <gtkmm/spinbutton.h>
+#include <gtkmm/checkbutton.h>
+#include <gtkmm/radiobutton.h>
+
+#include "ui/widget/panel.h"
+
+namespace Inkscape {
+namespace UI {
+namespace Dialog {
+
+
+/**
+ * Dialog for tiling an object
+ */
+class TileDialog : public UI::Widget::Panel {
+public:
+    TileDialog() ;
+    virtual ~TileDialog() {};
+
+    /**
+     * Do the actual work
+     */
+    void Grid_Arrange();
+
+    /**
+     * Respond to selection change
+     */
+    void updateSelection();
+
+    /**
+     * Callback from Apply
+     */
+    virtual void _apply();
+
+    // Callbacks from spinbuttons
+    void on_row_spinbutton_changed();
+    void on_col_spinbutton_changed();
+    void on_xpad_spinbutton_changed();
+    void on_ypad_spinbutton_changed();
+    void on_RowSize_checkbutton_changed();
+    void on_ColSize_checkbutton_changed();
+    void on_rowSize_spinbutton_changed();
+    void on_colSize_spinbutton_changed();
+    void Spacing_button_changed();
+    void VertAlign_changed();
+    void HorizAlign_changed();
+
+    static TileDialog& getInstance() {
+        static TileDialog instance;
+        return instance;
+    }
+
+private:
+    TileDialog(TileDialog const &d); // no copy
+    void operator=(TileDialog const &d); // no assign
+
+    bool userHidden;
+    bool updating;
+
+    Gtk::Notebook   notebook;
+    Gtk::Tooltips   tips;
+
+    Gtk::VBox             TileBox;
+    Gtk::Button           *TileOkButton;
+    Gtk::Button           *TileCancelButton;
+
+    // Number selected label
+    Gtk::Label            SelectionContentsLabel;
+
+
+    Gtk::HBox             AlignHBox;
+    Gtk::HBox             SpinsHBox;
+    Gtk::HBox             SizesHBox;
+
+    // Number per Row
+    Gtk::VBox             NoOfColsBox;
+    Gtk::Label            NoOfColsLabel;
+    Gtk::SpinButton       NoOfColsSpinner;
+    bool AutoRowSize;
+    Gtk::CheckButton      RowHeightButton;
+
+    Gtk::VBox             XByYLabelVBox;
+    Gtk::Label            padXByYLabel;
+    Gtk::Label            XByYLabel;
+
+    // Number per Column
+    Gtk::VBox             NoOfRowsBox;
+    Gtk::Label            NoOfRowsLabel;
+    Gtk::SpinButton       NoOfRowsSpinner;
+    bool AutoColSize;
+    Gtk::CheckButton      ColumnWidthButton;
+
+    // Vertical align
+    Gtk::Label            VertAlignLabel;
+    Gtk::HBox             VertAlignHBox;
+    Gtk::VBox             VertAlignVBox;
+    Gtk::RadioButtonGroup VertAlignGroup;
+    Gtk::RadioButton      VertCentreRadioButton;
+    Gtk::RadioButton      VertTopRadioButton;
+    Gtk::RadioButton      VertBotRadioButton;
+    double VertAlign;
+
+    // Horizontal align
+    Gtk::Label            HorizAlignLabel;
+    Gtk::VBox             HorizAlignVBox;
+    Gtk::HBox             HorizAlignHBox;
+    Gtk::RadioButtonGroup HorizAlignGroup;
+    Gtk::RadioButton      HorizCentreRadioButton;
+    Gtk::RadioButton      HorizLeftRadioButton;
+    Gtk::RadioButton      HorizRightRadioButton;
+    double HorizAlign;
+
+    // padding in x
+    Gtk::VBox             XPadBox;
+    Gtk::Label            XPadLabel;
+    Gtk::SpinButton       XPadSpinner;
+
+    // padding in y
+    Gtk::VBox             YPadBox;
+    Gtk::Label            YPadLabel;
+    Gtk::SpinButton       YPadSpinner;
+
+    // BBox or manual spacing
+    Gtk::VBox             SpacingVBox;
+    Gtk::RadioButtonGroup SpacingGroup;
+    Gtk::RadioButton      SpaceByBBoxRadioButton;
+    Gtk::RadioButton      SpaceManualRadioButton;
+    bool ManualSpacing;
+
+
+
+    // Row height
+    Gtk::VBox             RowHeightVBox;
+    Gtk::HBox             RowHeightBox;
+    Gtk::Label            RowHeightLabel;
+    Gtk::SpinButton       RowHeightSpinner;
+
+    // Column width
+    Gtk::VBox             ColumnWidthVBox;
+    Gtk::HBox             ColumnWidthBox;
+    Gtk::Label            ColumnWidthLabel;
+    Gtk::SpinButton       ColumnWidthSpinner;
+};
+
+
+} //namespace Dialog
+} //namespace UI
+} //namespace Inkscape
+
+
+#endif /* __TILEDIALOG_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 :
index 899053cc9bf648365cdf8578ad3f29dea920b302..a242aaa4c9a5b3b66f5519b46df2c17f8e1d0b40 100644 (file)
@@ -457,7 +457,7 @@ Transformation::updatePageMove(Inkscape::Selection *selection)
 {
     if (selection && !selection->isEmpty()) {
         if (!_check_move_relative.get_active()) {
-            boost::optional<Geom::Rect> bbox = selection->bounds();
+            Geom::OptRect bbox = selection->bounds();
             if (bbox) {
                 double x = bbox->min()[Geom::X];
                 double y = bbox->min()[Geom::Y];
@@ -478,7 +478,7 @@ void
 Transformation::updatePageScale(Inkscape::Selection *selection)
 {
     if (selection && !selection->isEmpty()) {
-        boost::optional<Geom::Rect> bbox = selection->bounds();
+        Geom::OptRect bbox = selection->bounds();
         if (bbox) {
             double w = bbox->dimensions()[Geom::X];
             double h = bbox->dimensions()[Geom::Y];
@@ -508,7 +508,7 @@ void
 Transformation::updatePageSkew(Inkscape::Selection *selection)
 {
     if (selection && !selection->isEmpty()) {
-        boost::optional<Geom::Rect> bbox = selection->bounds();
+        Geom::OptRect bbox = selection->bounds();
         if (bbox) {
             double w = bbox->dimensions()[Geom::X];
             double h = bbox->dimensions()[Geom::Y];
@@ -605,7 +605,7 @@ Transformation::applyPageMove(Inkscape::Selection *selection)
         if (_check_move_relative.get_active()) {
             sp_selection_move_relative(selection, x, y);
         } else {
-            boost::optional<Geom::Rect> bbox = selection->bounds();
+            Geom::OptRect bbox = selection->bounds();
             if (bbox) {
                 sp_selection_move_relative(selection,
                                            x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]);
@@ -626,7 +626,7 @@ Transformation::applyPageMove(Inkscape::Selection *selection)
                      it != selected.end();
                      ++it)
                 {
-                    boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop(*it);
+                    Geom::OptRect bbox = sp_item_bbox_desktop(*it);
                     if (bbox) {
                         sorted.push_back(BBoxSort(*it, *bbox, Geom::X, x > 0? 1. : 0., x > 0? 0. : 1.));
                     }
@@ -650,7 +650,7 @@ Transformation::applyPageMove(Inkscape::Selection *selection)
                      it != selected.end();
                      ++it)
                 {
-                    boost::optional<Geom::Rect> bbox = sp_item_bbox_desktop(*it);
+                    Geom::OptRect bbox = sp_item_bbox_desktop(*it);
                     if (bbox) {
                         sorted.push_back(BBoxSort(*it, *bbox, Geom::Y, y > 0? 1. : 0., y > 0? 0. : 1.));
                     }
@@ -669,7 +669,7 @@ Transformation::applyPageMove(Inkscape::Selection *selection)
                 }
             }
         } else {
-            boost::optional<Geom::Rect> bbox = selection->bounds();
+            Geom::OptRect bbox = selection->bounds();
             if (bbox) {
                 sp_selection_move_relative(selection,
                                            x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]);
@@ -694,7 +694,7 @@ Transformation::applyPageScale(Inkscape::Selection *selection)
             Geom::Scale scale (0,0);
             // the values are increments!
             if (_units_scale.isAbsolute()) {
-                boost::optional<Geom::Rect> bbox(sp_item_bbox_desktop(item));
+                Geom::OptRect bbox(sp_item_bbox_desktop(item));
                 if (bbox) {
                     double new_width = scaleX;
                     if (fabs(new_width) < 1e-6) new_width = 1e-6; // not 0, as this would result in a nasty no-bbox object
@@ -712,7 +712,7 @@ Transformation::applyPageScale(Inkscape::Selection *selection)
             sp_item_scale_rel (item, scale);
         }
     } else {
-        boost::optional<Geom::Rect> bbox(selection->bounds());
+        Geom::OptRect bbox(selection->bounds());
         if (bbox) {
             Geom::Point center(bbox->midpoint()); // use rotation center?
             Geom::Scale scale (0,0);
@@ -781,7 +781,7 @@ Transformation::applyPageSkew(Inkscape::Selection *selection)
             } else { // absolute displacement
                 double skewX = _scalar_skew_horizontal.getValue("px");
                 double skewY = _scalar_skew_vertical.getValue("px");
-                boost::optional<Geom::Rect> bbox(sp_item_bbox_desktop(item));
+                Geom::OptRect bbox(sp_item_bbox_desktop(item));
                 if (bbox) {
                     double width = bbox->dimensions()[Geom::X];
                     double height = bbox->dimensions()[Geom::Y];
@@ -790,7 +790,7 @@ Transformation::applyPageSkew(Inkscape::Selection *selection)
             }
         }
     } else { // transform whole selection
-        boost::optional<Geom::Rect> bbox = selection->bounds();
+        Geom::OptRect bbox = selection->bounds();
         boost::optional<Geom::Point> center = selection->center();
 
         if ( bbox && center ) {
@@ -873,7 +873,7 @@ Transformation::onMoveRelativeToggled()
 
     //g_message("onMoveRelativeToggled: %f, %f px\n", x, y);
 
-    boost::optional<Geom::Rect> bbox = selection->bounds();
+    Geom::OptRect bbox = selection->bounds();
 
     if (bbox) {
         if (_check_move_relative.get_active()) {
@@ -1013,7 +1013,7 @@ Transformation::onClear()
             _scalar_move_horizontal.setValue(0);
             _scalar_move_vertical.setValue(0);
         } else {
-            boost::optional<Geom::Rect> bbox = selection->bounds();
+            Geom::OptRect bbox = selection->bounds();
             if (bbox) {
                 _scalar_move_horizontal.setValue(bbox->min()[Geom::X], "px");
                 _scalar_move_vertical.setValue(bbox->min()[Geom::Y], "px");
index 5e77130445bea6787fba7758b1b4bc4011c2d3b5..dd437aad836981a85d6435812d9d82f3cd97453b 100644 (file)
@@ -1404,7 +1404,7 @@ EditWidget::updateScrollbars (double scale)
                      Geom::Point(2 * sp_document_width(doc), 2 * sp_document_height(doc))  );
     SPObject* root = doc->root;
     SPItem* item = SP_ITEM(root);
-    boost::optional<Geom::Rect> deskarea = Geom::unify(darea, sp_item_bbox_desktop(item));
+    Geom::OptRect deskarea = Geom::unify(darea, sp_item_bbox_desktop(item));
 
     /* Canvas region we always show unconditionally */
     Geom::Rect carea( Geom::Point(deskarea->min()[Geom::X] * scale - 64, deskarea->max()[Geom::Y] * -scale - 64),
index 9e39af75ff87bcaeaa1006d3e210e79613ea5bea..3ef4c732877d597cc4cd9c92c513e59eb9e0bfc9 100644 (file)
@@ -125,7 +125,7 @@ ObjectCompositeSettings::_blendBlurValueChanged()
     // FIXME: fix for GTK breakage, see comment in SelectedStyle::on_opacity_changed; here it results in crash 1580903
     sp_canvas_force_full_redraw_after_interruptions(sp_desktop_canvas(desktop), 0);
 
-    boost::optional<Geom::Rect> bbox = _subject->getBounds(SPItem::GEOMETRIC_BBOX);
+    Geom::OptRect bbox = _subject->getBounds(SPItem::GEOMETRIC_BBOX);
     double radius;
     if (bbox) {
         double perimeter = bbox->dimensions()[Geom::X] + bbox->dimensions()[Geom::Y];   // fixme: this is only half the perimeter, is that correct?
@@ -271,7 +271,7 @@ ObjectCompositeSettings::_subjectChanged() {
             case QUERY_STYLE_SINGLE:
             case QUERY_STYLE_MULTIPLE_AVERAGED:
             case QUERY_STYLE_MULTIPLE_SAME:
-                boost::optional<Geom::Rect> bbox = _subject->getBounds(SPItem::GEOMETRIC_BBOX);
+                Geom::OptRect bbox = _subject->getBounds(SPItem::GEOMETRIC_BBOX);
                 if (bbox) {
                     double perimeter = bbox->dimensions()[Geom::X] + bbox->dimensions()[Geom::Y];   // fixme: this is only half the perimeter, is that correct?
                     _fe_cb.set_blur_sensitive(true);
index 72df1baab7747ff06af0b171e1eb216679fd8b8d..395726511722fd507f779515b3ddb5a4f3b0e1de 100644 (file)
@@ -461,6 +461,66 @@ ZoomCorrRulerSlider::init(int ruler_width, int ruler_height, double lower, doubl
     this->pack_start(*table, Gtk::PACK_EXPAND_WIDGET);
 }
 
+void
+PrefSlider::on_slider_value_changed()
+{
+    if (this->is_visible() || freeze) //only take action if user changed value
+    {
+        freeze = true;
+        Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+        prefs->setDouble(_prefs_path, _slider.get_value());
+        _sb.set_value(_slider.get_value());
+        freeze = false;
+    }
+}
+
+void
+PrefSlider::on_spinbutton_value_changed()
+{
+    if (this->is_visible() || freeze) //only take action if user changed value
+    {
+        freeze = true;
+        Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+        prefs->setDouble(_prefs_path, _sb.get_value());
+        _slider.set_value(_sb.get_value());
+        freeze = false;
+    }
+}
+
+void
+PrefSlider::init(Glib::ustring const &prefs_path,
+               double lower, double upper, double step_increment, double page_increment, double default_value, int digits)
+{
+       _prefs_path = prefs_path;
+       
+       Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    double value = prefs->getDoubleLimited(prefs_path, default_value, lower, upper);
+
+    freeze = false;
+
+    _slider.set_range (lower, upper);
+    _slider.set_increments (step_increment, page_increment);
+    _slider.set_value (value);
+    _slider.set_digits(digits);
+    _slider.signal_value_changed().connect(sigc::mem_fun(*this, &PrefSlider::on_slider_value_changed));
+
+    _sb.signal_value_changed().connect(sigc::mem_fun(*this, &PrefSlider::on_spinbutton_value_changed));
+    _sb.set_range (lower, upper);
+    _sb.set_increments (step_increment, page_increment);
+    _sb.set_value (value);
+    _sb.set_digits(digits);
+
+    Gtk::Table *table = Gtk::manage(new Gtk::Table());
+    Gtk::Alignment *alignment1 = Gtk::manage(new Gtk::Alignment(0.5,1,0,0));
+    Gtk::Alignment *alignment2 = Gtk::manage(new Gtk::Alignment(0.5,1,0,0));
+    alignment1->add(_sb);
+    
+    table->attach(_slider,     0, 1, 0, 1);
+    table->attach(*alignment1, 1, 2, 0, 1, static_cast<Gtk::AttachOptions>(0));
+    
+    this->pack_start(*table, Gtk::PACK_EXPAND_WIDGET);
+}
+
 void PrefCombo::init(Glib::ustring const &prefs_path,
                      Glib::ustring labels[], int values[], int num_items, int default_value)
 {
index dbc319c1ad0634d58793561a7a2ae546f63e34a7..1576184acc86fc932fce75624c62d6dee79bca95 100644 (file)
@@ -122,6 +122,23 @@ private:
     bool freeze; // used to block recursive updates of slider and spinbutton
 };
 
+class PrefSlider : public Gtk::HBox
+{
+public:
+    void init(Glib::ustring const &prefs_path,
+                 double lower, double upper, double step_increment, double page_increment, double default_value, int digits);
+
+private:
+    void on_slider_value_changed();
+    void on_spinbutton_value_changed();
+    
+    Glib::ustring _prefs_path;
+    Gtk::SpinButton _sb;
+    Gtk::HScale     _slider;
+    bool freeze; // used to block recursive updates of slider and spinbutton
+};
+
+
 class PrefCombo : public Gtk::ComboBoxText
 {
 public:
index a2e8a25478d6e455e08d576d46849c54e800a238..a7359242d904c2a463ffd1a552422a52635e027d 100644 (file)
@@ -65,12 +65,12 @@ StyleSubject::iterator StyleSubject::Selection::begin() {
     }
 }
 
-boost::optional<Geom::Rect> StyleSubject::Selection::getBounds(SPItem::BBoxType type) {
+Geom::OptRect StyleSubject::Selection::getBounds(SPItem::BBoxType type) {
     Inkscape::Selection *selection = _getSelection();
     if (selection) {
         return selection->bounds(type);
     } else {
-        return boost::optional<Geom::Rect>();
+        return Geom::OptRect();
     }
 }
 
@@ -143,12 +143,12 @@ StyleSubject::iterator StyleSubject::CurrentLayer::begin() {
     return iterator(_getLayerSList());
 }
 
-boost::optional<Geom::Rect> StyleSubject::CurrentLayer::getBounds(SPItem::BBoxType type) {
+Geom::OptRect StyleSubject::CurrentLayer::getBounds(SPItem::BBoxType type) {
     SPObject *layer = _getLayer();
     if (layer && SP_IS_ITEM(layer)) {
         return sp_item_bbox_desktop(SP_ITEM(layer), type);
     } else {
-        return boost::optional<Geom::Rect>();
+        return Geom::OptRect();
     }
 }
 
index 231a88728ae41a6831ae098be514a1e1fe9c45df..6f46efff52cccc5265e921a3746035647ba6ff7f 100644 (file)
@@ -44,7 +44,7 @@ public:
 
     virtual iterator begin() = 0;
     virtual iterator end() { return iterator(NULL); }
-    virtual boost::optional<Geom::Rect> getBounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) = 0;
+    virtual Geom::OptRect getBounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) = 0;
     virtual int queryStyle(SPStyle *query, int property) = 0;
     virtual void setCSS(SPCSSAttr *css) = 0;
 
@@ -67,7 +67,7 @@ public:
     ~Selection();
 
     virtual iterator begin();
-    virtual boost::optional<Geom::Rect> getBounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
+    virtual Geom::OptRect getBounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
     virtual int queryStyle(SPStyle *query, int property);
     virtual void setCSS(SPCSSAttr *css);
 
@@ -88,7 +88,7 @@ public:
     ~CurrentLayer();
 
     virtual iterator begin();
-    virtual boost::optional<Geom::Rect> getBounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
+    virtual Geom::OptRect getBounds(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
     virtual int queryStyle(SPStyle *query, int property);
     virtual void setCSS(SPCSSAttr *css);
 
index 37961ab15669ffde18c02ac0d06b613d74ebc31a..4ddf589572c861d6a39154a5d06efaf57ca058d2 100644 (file)
@@ -1308,7 +1308,7 @@ ObjectVerb::perform( SPAction *action, void *data, void */*pdata*/ )
     if (sel->isEmpty())
         return;
 
-    boost::optional<Geom::Rect> bbox = sel->bounds();
+    Geom::OptRect bbox = sel->bounds();
     if (!bbox) {
         return;
     }
index 8ae12f422b37ca5a8f84e914675c71127111e0bf..2bee018c519a4a49d46204f16005a9145747d479 100644 (file)
@@ -19,6 +19,7 @@
 #include <cstring>
 #include <string>
 #include <string.h>
+#include "config.h"
 #include "require-config.h"   /* HAVE_GTK_WINDOW_FULLSCREEN */
 #include "helper/helper-forward.h"
 #include "forward.h"
@@ -271,7 +272,9 @@ enum {
     SP_VERB_UNHIDE_ALL,
     SP_VERB_UNHIDE_ALL_IN_ALL_LAYERS,
     /* Footer */
-    SP_VERB_LAST
+    SP_VERB_LAST,
+    /* Color management */
+    SP_VERB_EMBED_COLOR_PROFILE,
 };
 
 gchar *sp_action_get_title (const SPAction *action);
index 33f5892473366109061716b493202b754a9cc045..fdebe8d20eec7f1e49992a1ac36f72050c60ffb7 100644 (file)
@@ -11,18 +11,18 @@ widgets/clean:
        rm -f widgets/libspwidgets.a $(widgets_libspwidgets_a_OBJECTS)
 
 widgets_libspwidgets_a_SOURCES =       \
-       widgets/button.cpp      \
-       widgets/button.h        \
+       widgets/button.cpp              \
+       widgets/button.h                \
        widgets/calligraphic-profile-rename.cpp \
        widgets/calligraphic-profile-rename.h   \
        widgets/dash-selector.cpp       \
-       widgets/dash-selector.h \
+       widgets/dash-selector.h         \
        widgets/dash-selector.cpp       \
-       widgets/dash-selector.h \
+       widgets/dash-selector.h         \
        widgets/desktop-widget.cpp      \
        widgets/desktop-widget.h        \
        widgets/font-selector.cpp       \
-       widgets/font-selector.h \
+       widgets/font-selector.h         \
        widgets/gradient-toolbar.cpp    \
        widgets/gradient-toolbar.h      \
        widgets/gradient-image.cpp      \
@@ -31,14 +31,14 @@ widgets_libspwidgets_a_SOURCES =    \
        widgets/gradient-selector.h     \
        widgets/gradient-vector.cpp     \
        widgets/gradient-vector.h       \
-       widgets/icon.cpp        \
-       widgets/icon.h  \
-       widgets/layer-selector.h \
-       widgets/layer-selector.cpp \
+       widgets/icon.cpp                \
+       widgets/icon.h                  \
+       widgets/layer-selector.h        \
+       widgets/layer-selector.cpp      \
        widgets/paint-selector.cpp      \
        widgets/paint-selector.h        \
-       widgets/ruler.cpp       \
-       widgets/ruler.h \
+       widgets/ruler.cpp               \
+       widgets/ruler.h                 \
        widgets/select-toolbar.cpp      \
        widgets/select-toolbar.h        \
        widgets/shrink-wrap-button.cpp  \
@@ -61,8 +61,8 @@ widgets_libspwidgets_a_SOURCES =      \
        widgets/sp-color-wheel-selector.h       \
        widgets/sp-color-wheel.cpp      \
        widgets/sp-color-wheel.h        \
-       widgets/sp-widget.cpp   \
-       widgets/sp-widget.h\
+       widgets/sp-widget.cpp           \
+       widgets/sp-widget.h             \
        widgets/sp-xmlview-attr-list.cpp        \
        widgets/sp-xmlview-attr-list.h  \
        widgets/sp-xmlview-content.cpp  \
@@ -72,9 +72,9 @@ widgets_libspwidgets_a_SOURCES =      \
        widgets/spinbutton-events.cpp   \
        widgets/spinbutton-events.h     \
        widgets/spw-utilities.cpp       \
-       widgets/spw-utilities.h \
-       widgets/toolbox.cpp     \
-       widgets/toolbox.h       \
+       widgets/spw-utilities.h         \
+       widgets/toolbox.cpp             \
+       widgets/toolbox.h               \
        widgets/widget-sizes.h
 
 widgets/button.$(OBJEXT): helper/sp-marshal.h
old mode 100755 (executable)
new mode 100644 (file)
index 45ad08a..888b327
@@ -1,12 +1,14 @@
-/**
+/** @file
+ * @brief Dialog for naming calligraphic profiles
  *
- * \brief  Dialog for naming calligraphic profiles
- *
- * Author:
+ * @note This file is in the wrong directory because of link order issues - 
+ * it is required by widgets/toolbox.cpp, and libspwidgets.a comes after
+ * libinkdialogs.a in the current link order.
+ */
+/* Author:
  *   Aubanel MONNIER 
  *
- * Copyright (C) 2007 Aubanel MONNIER
- *
+ * Copyright (C) 2007 Authors
  * Released under GNU GPL.  Read the file 'COPYING' for more information
  */
 
 #include "desktop.h"
 #include "calligraphic-profile-rename.h"
 
-
 namespace Inkscape {
 namespace UI {
-namespace Dialogs {
-CalligraphicProfileDialog::CalligraphicProfileDialog(): _applied(false){
-  Gtk::VBox *mainVBox = get_vbox();
-  _layout_table.set_spacings(4);
-  _layout_table.resize (1, 2);
-
-  _profile_name_entry.set_activates_default(true);
-
-  _profile_name_label.set_label(_("Profile name:"));
-  _profile_name_label.set_alignment(1.0, 0.5);
-  
-  _layout_table.attach(_profile_name_label,
-                      0, 1, 0, 1, Gtk::FILL, Gtk::FILL);
-  _layout_table.attach(_profile_name_entry,
-                      1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL);
-  mainVBox->pack_start(_layout_table, false, false, 4);
-  // Buttons
-  _close_button.set_use_stock(true);
-  _close_button.set_label(Gtk::Stock::CANCEL.id);
-  _close_button.set_flags(Gtk::CAN_DEFAULT);
-  
-  _apply_button.set_use_underline(true);
-  _apply_button.set_label(_("Save"));
-  _apply_button.set_flags(Gtk::CAN_DEFAULT);
-  
-  _close_button.signal_clicked()
-    .connect(sigc::mem_fun(*this, &CalligraphicProfileDialog::_close));
-  _apply_button.signal_clicked()
-    .connect(sigc::mem_fun(*this, &CalligraphicProfileDialog::_apply));
-  
-  signal_delete_event().connect(
-        sigc::bind_return(
-            sigc::hide(sigc::mem_fun(*this, &CalligraphicProfileDialog::_close)),
-            true
-        )
-    );
-
-  add_action_widget(_close_button, Gtk::RESPONSE_CLOSE);
-  add_action_widget(_apply_button, Gtk::RESPONSE_APPLY);
-
-  _apply_button.grab_default();
-
-  show_all_children();
+namespace Dialog {
+
+CalligraphicProfileRename::CalligraphicProfileRename() :
+    _applied(false)
+{
+    Gtk::VBox *mainVBox = get_vbox();
+    _layout_table.set_spacings(4);
+    _layout_table.resize (1, 2);
+
+    _profile_name_entry.set_activates_default(true);
+
+    _profile_name_label.set_label(_("Profile name:"));
+    _profile_name_label.set_alignment(1.0, 0.5);
 
+    _layout_table.attach(_profile_name_label,
+                  0, 1, 0, 1, Gtk::FILL, Gtk::FILL);
+    _layout_table.attach(_profile_name_entry,
+                  1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL);
+    mainVBox->pack_start(_layout_table, false, false, 4);
+    // Buttons
+    _close_button.set_use_stock(true);
+    _close_button.set_label(Gtk::Stock::CANCEL.id);
+    _close_button.set_flags(Gtk::CAN_DEFAULT);
+
+    _apply_button.set_use_underline(true);
+    _apply_button.set_label(_("Save"));
+    _apply_button.set_flags(Gtk::CAN_DEFAULT);
+
+    _close_button.signal_clicked()
+    .connect(sigc::mem_fun(*this, &CalligraphicProfileRename::_close));
+    _apply_button.signal_clicked()
+    .connect(sigc::mem_fun(*this, &CalligraphicProfileRename::_apply));
+
+    signal_delete_event().connect( sigc::bind_return(
+        sigc::hide(sigc::mem_fun(*this, &CalligraphicProfileRename::_close)), true ) );
+
+    add_action_widget(_close_button, Gtk::RESPONSE_CLOSE);
+    add_action_widget(_apply_button, Gtk::RESPONSE_APPLY);
+
+    _apply_button.grab_default();
+
+    show_all_children();
 }
 
-void
-CalligraphicProfileDialog::_apply()
+void CalligraphicProfileRename::_apply()
 {
-  _profile_name = _profile_name_entry.get_text();
-  _applied = true;
-  _close();
+    _profile_name = _profile_name_entry.get_text();
+    _applied = true;
+    _close();
 }
 
-void
-CalligraphicProfileDialog::_close()
+void CalligraphicProfileRename::_close()
 {
-  this->Gtk::Dialog::hide();
-  
+    this->Gtk::Dialog::hide();
 }
 
-void CalligraphicProfileDialog::show(SPDesktop *desktop){
-  CalligraphicProfileDialog &dial = instance();
-  dial._applied=false;
-  dial.set_modal(true);
-  desktop->setWindowTransient (dial.gobj());
-  dial.property_destroy_with_parent() = true;
-  //  dial.Gtk::Dialog::show();
-  //dial.present();
-  dial.run();
+void CalligraphicProfileRename::show(SPDesktop *desktop)
+{
+    CalligraphicProfileRename &dial = instance();
+    dial._applied=false;
+    dial.set_modal(true);
+    desktop->setWindowTransient (dial.gobj());
+    dial.property_destroy_with_parent() = true;
+    //  dial.Gtk::Dialog::show();
+    //dial.present();
+    dial.run();
 }
 
-
-}}}
+} // 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 :
old mode 100755 (executable)
new mode 100644 (file)
index f0e455c..53ce907
@@ -1,12 +1,10 @@
-/**
- *
- * \brief  Dialog for naming calligraphic profiles
- *
- * Author:
+/** @file
+ * @brief Dialog for naming calligraphic profiles
+ */
+/* Author:
  *   Aubanel MONNIER 
  *
- * Copyright (C) 2007 Aubanel MONNIER
- *
+ * Copyright (C) 2007 Authors
  * Released under GNU GPL.  Read the file 'COPYING' for more information
  */
 
 struct SPDesktop;
 
 namespace Inkscape {
-  namespace UI {
-    namespace Dialogs {
+namespace UI {
+namespace Dialog {
       
-      class  CalligraphicProfileDialog: public Gtk::Dialog {  
-      public:
-       CalligraphicProfileDialog();
-       virtual ~CalligraphicProfileDialog(){} ;
-       static void show(SPDesktop *desktop);
-       static bool applied(){return instance()._applied;}
-       static Glib::ustring getProfileName() { return instance()._profile_name;}
-
-       Glib::ustring getName() const { return "CalligraphicProfileDialog"; }
+class CalligraphicProfileRename : public Gtk::Dialog {  
+public:
+    CalligraphicProfileRename();
+    virtual ~CalligraphicProfileRename() {}
+    Glib::ustring getName() const {
+        return "CalligraphicProfileRename";
+    }
+    
+    static void show(SPDesktop *desktop);
+    static bool applied() {
+        return instance()._applied;
+    }
+    static Glib::ustring getProfileName() {
+        return instance()._profile_name;
+    }
 
-       
-      protected:
-       void _close();
-       void _apply();
+protected:
+    void _close();
+    void _apply();
 
-       Gtk::Label        _profile_name_label;
-       Gtk::Entry        _profile_name_entry;
-       Gtk::Table        _layout_table;
-       Gtk::Button       _close_button;
-       Gtk::Button       _apply_button;
-       Glib::ustring _profile_name;
-       bool _applied;
-      private:
-       static CalligraphicProfileDialog &instance(){static CalligraphicProfileDialog instance; return instance;}
-       CalligraphicProfileDialog(CalligraphicProfileDialog const &); // no copy
-       CalligraphicProfileDialog &operator=(CalligraphicProfileDialog  const &); // no assign
-      };      
+    Gtk::Label        _profile_name_label;
+    Gtk::Entry        _profile_name_entry;
+    Gtk::Table        _layout_table;
+    Gtk::Button       _close_button;
+    Gtk::Button       _apply_button;
+    Glib::ustring _profile_name;
+    bool _applied;
+private:
+    static CalligraphicProfileRename &instance() {
+        static CalligraphicProfileRename instance_;
+        return instance_;
     }
-  }
-}
+    CalligraphicProfileRename(CalligraphicProfileRename const &); // no copy
+    CalligraphicProfileRename &operator=(CalligraphicProfileRename const &); // no assign
+};
+} // namespace Dialog
+} // namespace UI
+} // namespace Inkscape
 
 #endif // INKSCAPE_DIALOG_CALLIGRAPHIC_PROFILE_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 :
index 3c78eb0bb1f611aa962d552853762de9906e4bc7..1fdf1fceb632db1f942b659f03cb826e5d5fcb4b 100644 (file)
@@ -1700,7 +1700,7 @@ sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale)
                      Geom::Point(2 * sp_document_width(doc), 2 * sp_document_height(doc))  );
     SPObject* root = doc->root;
     SPItem* item = SP_ITEM(root);
-    boost::optional<Geom::Rect> deskarea = Geom::unify(darea, sp_item_bbox_desktop(item));
+    Geom::OptRect deskarea = Geom::unify(darea, sp_item_bbox_desktop(item));
 
     /* Canvas region we always show unconditionally */
     Geom::Rect carea( Geom::Point(deskarea->min()[Geom::X] * scale - 64, deskarea->max()[Geom::Y] * -scale - 64),
index 49a35b5cb797209087cba3534f337673348b67d5..502c34790357b0bc58cf654f4e5b606b4ec63df1 100644 (file)
@@ -671,7 +671,7 @@ static gint sp_font_preview_expose(GtkWidget *widget, GdkEventExpose *event)
                         hpos[len] = base_pt[0];
                         len++;
                         if ( curF ) {
-                            boost::optional<Geom::Rect> nbbox = curF->BBox(str_text->glyph_text[i].gl);
+                            Geom::OptRect nbbox = curF->BBox(str_text->glyph_text[i].gl);
                             if (nbbox) {
                                 bbox.x0 = MIN(bbox.x0, base_pt[Geom::X] + theSize * (nbbox->min())[0]);
                                 bbox.y0 = MIN(bbox.y0, base_pt[Geom::Y] - theSize * (nbbox->max())[1]);
index 4c0439da7447e6da6eff75571fe1c9b88fdec10e..5aad614b4e60aec2478e32cc2a7bac4aae15befb 100644 (file)
@@ -662,7 +662,7 @@ sp_icon_doc_icon( SPDocument *doc, NRArenaItem *root,
         if (object && SP_IS_ITEM(object)) {
             /* Find bbox in document */
             Geom::Matrix const i2doc(sp_item_i2doc_affine(SP_ITEM(object)));
-            boost::optional<Geom::Rect> dbox = SP_ITEM(object)->getBounds(i2doc);
+            Geom::OptRect dbox = SP_ITEM(object)->getBounds(i2doc);
 
             if ( SP_OBJECT_PARENT(object) == NULL )
             {
@@ -671,7 +671,7 @@ sp_icon_doc_icon( SPDocument *doc, NRArenaItem *root,
             }
 
             /* This is in document coordinates, i.e. pixels */
-            if ( dbox && !dbox->isEmpty() ) {
+            if ( dbox ) {
                 NRGC gc(NULL);
                 /* Update to renderable state */
                 double sf = 1.0;
index af1883916b7d4df57d30c2656932560a29cdac80..e6929fcff5540adda0c08388a01fae1d54c3189f 100644 (file)
@@ -68,8 +68,8 @@ sp_selection_layout_widget_update(SPWidget *spw, Inkscape::Selection *sel)
         int prefs_bbox = prefs->getInt("/tools/bounding_box", 0);
         SPItem::BBoxType bbox_type = (prefs_bbox ==0)? 
             SPItem::APPROXIMATE_BBOX : SPItem::GEOMETRIC_BBOX;
-        boost::optional<Geom::Rect> const bbox(sel->bounds(bbox_type));
-        if ( bbox && !bbox->isEmpty() ) {
+        Geom::OptRect const bbox(sel->bounds(bbox_type));
+        if ( bbox ) {
             UnitTracker *tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(G_OBJECT(spw), "tracker"));
             SPUnit const &unit = *tracker->getActiveUnit();
 
@@ -159,9 +159,9 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
     int prefs_bbox = prefs->getInt("/tools/bounding_box");
     SPItem::BBoxType bbox_type = (prefs_bbox ==0)? 
         SPItem::APPROXIMATE_BBOX : SPItem::GEOMETRIC_BBOX;
-    boost::optional<Geom::Rect> bbox = selection->bounds(bbox_type);
+    Geom::OptRect bbox = selection->bounds(bbox_type);
 
-    if ( !bbox || bbox->isEmpty() ) {
+    if ( !bbox ) {
         g_object_set_data(G_OBJECT(spw), "update", GINT_TO_POINTER(FALSE));
         return;
     }
index b945765db14e852399f30234b8c895e6ea6f327e..ca6a72ca2ec6c929393caac18f4bc88f7d5834ac 100644 (file)
 #include <gtk/gtk.h>
 #include <iostream>
 #include <sstream>
-
-#include "widgets/button.h"
-#include "widgets/widget-sizes.h"
-#include "widgets/spw-utilities.h"
-#include "widgets/spinbutton-events.h"
-#include "dialogs/text-edit.h"
-#include "dialogs/dialog-events.h"
-
-#include "ui/widget/style-swatch.h"
-
-#include "verbs.h"
-#include "sp-namedview.h"
-#include "desktop.h"
-#include "desktop-handles.h"
-#include "xml/repr.h"
-#include "xml/node-event-vector.h"
-#include "xml/attribute-record.h"
 #include <glibmm/i18n.h>
-#include "helper/unit-menu.h"
-#include "helper/units.h"
-#include "live_effects/effect.h"
-
-#include "inkscape.h"
-#include "conn-avoid-ref.h"
-
 
-#include "select-toolbar.h"
+#include "../box3d-context.h"
+#include "../box3d.h"
+#include "calligraphic-profile-rename.h"
+#include "../conn-avoid-ref.h"
+#include "../connection-pool.h"
+#include "../connector-context.h"
+#include "../desktop.h"
+#include "../desktop-handles.h"
+#include "../desktop-style.h"
+#include "../dialogs/dialog-events.h"
+#include "../dialogs/text-edit.h"
+#include "../document-private.h"
+#include "../ege-adjustment-action.h"
+#include "../ege-output-action.h"
+#include "../ege-select-one-action.h"
+#include "../flood-context.h"
 #include "gradient-toolbar.h"
-
-#include "connector-context.h"
-#include "node-context.h"
-#include "pen-context.h"
-#include "lpe-tool-context.h"
-#include "live_effects/lpe-line_segment.h"
-#include "shape-editor.h"
-#include "tweak-context.h"
-#include "sp-rect.h"
-#include "box3d.h"
-#include "box3d-context.h"
-#include "sp-star.h"
-#include "sp-spiral.h"
-#include "sp-ellipse.h"
-#include "sp-text.h"
-#include "sp-flowtext.h"
-#include "sp-clippath.h"
-#include "sp-mask.h"
-#include "style.h"
-#include "tools-switch.h"
-#include "selection.h"
-#include "selection-chemistry.h"
-#include "document-private.h"
-#include "desktop-style.h"
-#include "../libnrtype/font-lister.h"
+#include "../graphlayout/graphlayout.h"
+#include "../helper/unit-menu.h"
+#include "../helper/units.h"
+#include "../helper/unit-tracker.h"
+#include "icon.h"
+#include "../ink-action.h"
+#include "../inkscape.h"
+#include "../inkscape-stock.h"
+#include "../interface.h"
 #include "../libnrtype/font-instance.h"
-#include "../connection-pool.h"
+#include "../libnrtype/font-lister.h"
+#include "../live_effects/effect.h"
+#include "../live_effects/lpe-angle_bisector.h"
+#include "../live_effects/lpe-line_segment.h"
+#include "../lpe-tool-context.h"
+#include "../mod360.h"
+#include "../node-context.h"
+#include "../pen-context.h"
 #include "../preferences.h"
-#include "../inkscape-stock.h"
-#include "icon.h"
-#include "graphlayout/graphlayout.h"
-#include "interface.h"
-#include "shortcuts.h"
-
-#include "mod360.h"
+#include "../selection-chemistry.h"
+#include "../selection.h"
+#include "select-toolbar.h"
+#include "../shape-editor.h"
+#include "../shortcuts.h"
+#include "../sp-clippath.h"
+#include "../sp-ellipse.h"
+#include "../sp-flowtext.h"
+#include "../sp-mask.h"
+#include "../sp-namedview.h"
+#include "../sp-rect.h"
+#include "../sp-spiral.h"
+#include "../sp-star.h"
+#include "../sp-text.h"
+#include "../style.h"
+#include "../svg/css-ostringstream.h"
+#include "../tools-switch.h"
+#include "../tweak-context.h"
+#include "../ui/widget/style-swatch.h"
+#include "../verbs.h"
+#include "../widgets/button.h"
+#include "../widgets/spinbutton-events.h"
+#include "../widgets/spw-utilities.h"
+#include "../widgets/widget-sizes.h"
+#include "../xml/attribute-record.h"
+#include "../xml/node-event-vector.h"
+#include "../xml/repr.h"
 
 #include "toolbox.h"
 
-#include "flood-context.h"
-
-#include "ink-action.h"
-#include "ege-adjustment-action.h"
-#include "ege-output-action.h"
-#include "ege-select-one-action.h"
-#include "helper/unit-tracker.h"
-#include "live_effects/lpe-angle_bisector.h"
-
-#include "svg/css-ostringstream.h"
-
-#include "widgets/calligraphic-profile-rename.h"
-
 using Inkscape::UnitTracker;
 
 typedef void (*SetupFunction)(GtkWidget *toolbox, SPDesktop *desktop);
@@ -4106,6 +4095,7 @@ static void sp_dcc_build_presets_list(GObject *tbl)
 
 static void sp_dcc_save_profile (GtkWidget */*widget*/, GObject *tbl)
 {
+    using Inkscape::UI::Dialog::CalligraphicProfileRename;
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     SPDesktop *desktop = (SPDesktop *) g_object_get_data(tbl, "desktop" );
     if (! desktop) return;
@@ -4113,13 +4103,13 @@ static void sp_dcc_save_profile (GtkWidget */*widget*/, GObject *tbl)
     if (g_object_get_data(tbl, "presets_blocked"))
         return;
 
-    Inkscape::UI::Dialogs::CalligraphicProfileDialog::show(desktop);
-    if ( ! Inkscape::UI::Dialogs::CalligraphicProfileDialog::applied()) {
+    CalligraphicProfileRename::show(desktop);
+    if ( !CalligraphicProfileRename::applied()) {
         // dialog cancelled
         update_presets_list (tbl);
         return;
     }
-    Glib::ustring profile_name = Inkscape::UI::Dialogs::CalligraphicProfileDialog::getProfileName();
+    Glib::ustring profile_name = CalligraphicProfileRename::getProfileName();
 
     if (profile_name.empty()) {
         // empty name entered
@@ -5007,7 +4997,7 @@ lpetool_toggle_set_bbox (GtkToggleAction *act, gpointer data) {
     SPDesktop *desktop = static_cast<SPDesktop *>(data);
     Inkscape::Selection *selection = desktop->selection;
 
-    boost::optional<Geom::Rect> bbox = selection->bounds();
+    Geom::OptRect bbox = selection->bounds();
 
     if (bbox) {
         Geom::Point A(bbox->min());
index b00845077fbf2162608a58947f514f7f6259dc6a..2f0185731073dbb6dd0c94304bb6525fc6beaf22 100644 (file)
@@ -176,7 +176,7 @@ static gint sp_zoom_context_root_handler(SPEventContext *event_context, GdkEvent
             Geom::Point const button_w(event->button.x, event->button.y);
             Geom::Point const button_dt(desktop->w2d(button_w));
             if ( event->button.button == 1  && !event_context->space_panning) {
-                boost::optional<Geom::Rect> const b = Inkscape::Rubberband::get(desktop)->getRectangle();
+                Geom::OptRect const b = Inkscape::Rubberband::get(desktop)->getRectangle();
                 if (b && !within_tolerance) {
                     desktop->set_display_area(*b, 10);
                 } else if (!escaped) {